mirror of
https://github.com/dhewm/dhewm3.git
synced 2024-11-27 06:32:27 +00:00
Stub out win32 CPU functions for MinGW
Most of these use MSVC style asm. Binaries compiled with MinGW will not use any SIMD code for now.
This commit is contained in:
parent
ed349d71cc
commit
661e8f453b
2 changed files with 56 additions and 6 deletions
|
@ -46,12 +46,12 @@ Sys_GetClockTicks
|
|||
================
|
||||
*/
|
||||
double Sys_GetClockTicks( void ) {
|
||||
#if 0
|
||||
#ifndef _MSC_VER
|
||||
|
||||
LARGE_INTEGER li;
|
||||
|
||||
QueryPerformanceCounter( &li );
|
||||
return = (double ) li.LowPart + (double) 0xFFFFFFFF * li.HighPart;
|
||||
return (double ) li.LowPart + (double) 0xFFFFFFFF * li.HighPart;
|
||||
|
||||
#else
|
||||
|
||||
|
@ -78,7 +78,7 @@ Sys_ClockTicksPerSecond
|
|||
*/
|
||||
double Sys_ClockTicksPerSecond( void ) {
|
||||
static double ticks = 0;
|
||||
#if 0
|
||||
#ifndef _MSC_VER
|
||||
|
||||
if ( !ticks ) {
|
||||
LARGE_INTEGER li;
|
||||
|
@ -130,6 +130,7 @@ HasCPUID
|
|||
================
|
||||
*/
|
||||
static bool HasCPUID( void ) {
|
||||
#ifdef _MSC_VER
|
||||
__asm
|
||||
{
|
||||
pushfd // save eflags
|
||||
|
@ -159,6 +160,9 @@ err:
|
|||
return false;
|
||||
good:
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
#define _REG_EAX 0
|
||||
|
@ -172,6 +176,7 @@ CPUID
|
|||
================
|
||||
*/
|
||||
static void CPUID( int func, unsigned regs[4] ) {
|
||||
#ifdef _MSC_VER
|
||||
unsigned regEAX, regEBX, regECX, regEDX;
|
||||
|
||||
__asm pusha
|
||||
|
@ -188,9 +193,14 @@ static void CPUID( int func, unsigned regs[4] ) {
|
|||
regs[_REG_EBX] = regEBX;
|
||||
regs[_REG_ECX] = regECX;
|
||||
regs[_REG_EDX] = regEDX;
|
||||
#else
|
||||
regs[0] = 0;
|
||||
regs[1] = 0;
|
||||
regs[2] = 0;
|
||||
regs[3] = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
================
|
||||
IsAMD
|
||||
|
@ -344,6 +354,7 @@ LogicalProcPerPhysicalProc
|
|||
// processors per physical processor when execute cpuid with
|
||||
// eax set to 1
|
||||
static unsigned char LogicalProcPerPhysicalProc( void ) {
|
||||
#ifdef _MSC_VER
|
||||
unsigned int regebx = 0;
|
||||
__asm {
|
||||
mov eax, 1
|
||||
|
@ -351,6 +362,9 @@ static unsigned char LogicalProcPerPhysicalProc( void ) {
|
|||
mov regebx, ebx
|
||||
}
|
||||
return (unsigned char) ((regebx & NUM_LOGICAL_BITS) >> 16);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -362,6 +376,7 @@ GetAPIC_ID
|
|||
// initial APIC ID for the processor this code is running on.
|
||||
// Default value = 0xff if HT is not supported
|
||||
static unsigned char GetAPIC_ID( void ) {
|
||||
#ifdef _MSC_VER
|
||||
unsigned int regebx = 0;
|
||||
__asm {
|
||||
mov eax, 1
|
||||
|
@ -369,6 +384,9 @@ static unsigned char GetAPIC_ID( void ) {
|
|||
mov regebx, ebx
|
||||
}
|
||||
return (unsigned char) ((regebx & INITIAL_APIC_ID_BITS) >> 24);
|
||||
#else
|
||||
return '\0';
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -502,6 +520,7 @@ HasHTT
|
|||
================
|
||||
*/
|
||||
static bool HasDAZ( void ) {
|
||||
#ifdef _MSC_VER
|
||||
__declspec(align(16)) unsigned char FXSaveArea[512];
|
||||
unsigned char *FXArea = FXSaveArea;
|
||||
DWORD dwMask = 0;
|
||||
|
@ -524,6 +543,9 @@ static bool HasDAZ( void ) {
|
|||
|
||||
dwMask = *(DWORD *)&FXArea[28]; // Read the MXCSR Mask
|
||||
return ( ( dwMask & ( 1 << 6 ) ) == ( 1 << 6 ) ); // Return if the DAZ bit is set
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -532,6 +554,7 @@ Sys_GetCPUId
|
|||
================
|
||||
*/
|
||||
int Sys_GetCPUId( void ) {
|
||||
#ifdef _MSC_VER
|
||||
int flags;
|
||||
|
||||
// verify we're at least a Pentium or 486 with CPUID support
|
||||
|
@ -587,6 +610,9 @@ int Sys_GetCPUId( void ) {
|
|||
}
|
||||
|
||||
return flags;
|
||||
#else
|
||||
return CPUID_GENERIC;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -646,6 +672,7 @@ Sys_FPU_PrintStateFlags
|
|||
===============
|
||||
*/
|
||||
int Sys_FPU_PrintStateFlags( char *ptr, int ctrl, int stat, int tags, int inof, int inse, int opof, int opse ) {
|
||||
#ifdef _MSC_VER
|
||||
int i, length = 0;
|
||||
|
||||
length += sprintf( ptr+length, "CTRL = %08x\n"
|
||||
|
@ -673,6 +700,9 @@ int Sys_FPU_PrintStateFlags( char *ptr, int ctrl, int stat, int tags, int inof,
|
|||
length += sprintf( ptr+length, " %-30s = %d\n", "Top of stack pointer", (stat>>11)&7 );
|
||||
|
||||
return length;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -681,6 +711,7 @@ Sys_FPU_StackIsEmpty
|
|||
===============
|
||||
*/
|
||||
bool Sys_FPU_StackIsEmpty( void ) {
|
||||
#ifdef _MSC_VER
|
||||
__asm {
|
||||
mov eax, statePtr
|
||||
fnstenv [eax]
|
||||
|
@ -692,6 +723,9 @@ bool Sys_FPU_StackIsEmpty( void ) {
|
|||
return false;
|
||||
empty:
|
||||
return true;
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -700,6 +734,7 @@ Sys_FPU_ClearStack
|
|||
===============
|
||||
*/
|
||||
void Sys_FPU_ClearStack( void ) {
|
||||
#ifdef _MSC_VER
|
||||
__asm {
|
||||
mov eax, statePtr
|
||||
fnstenv [eax]
|
||||
|
@ -715,6 +750,7 @@ void Sys_FPU_ClearStack( void ) {
|
|||
jmp emptyStack
|
||||
done:
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -725,6 +761,7 @@ Sys_FPU_GetState
|
|||
===============
|
||||
*/
|
||||
const char *Sys_FPU_GetState( void ) {
|
||||
#ifdef _MSC_VER
|
||||
double fpuStack[8] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
|
||||
double *fpuStackPtr = fpuStack;
|
||||
int i, numValues;
|
||||
|
@ -821,6 +858,9 @@ const char *Sys_FPU_GetState( void ) {
|
|||
Sys_FPU_PrintStateFlags( ptr, ctrl, stat, tags, inof, inse, opof, opse );
|
||||
|
||||
return fpuString;
|
||||
#else
|
||||
return "";
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -829,6 +869,7 @@ Sys_FPU_EnableExceptions
|
|||
===============
|
||||
*/
|
||||
void Sys_FPU_EnableExceptions( int exceptions ) {
|
||||
#ifdef _MSC_VER
|
||||
__asm {
|
||||
mov eax, statePtr
|
||||
mov ecx, exceptions
|
||||
|
@ -841,6 +882,7 @@ void Sys_FPU_EnableExceptions( int exceptions ) {
|
|||
mov word ptr [eax], bx
|
||||
fldcw word ptr [eax]
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -849,6 +891,7 @@ Sys_FPU_SetPrecision
|
|||
===============
|
||||
*/
|
||||
void Sys_FPU_SetPrecision( int precision ) {
|
||||
#ifdef _MSC_VER
|
||||
short precisionBitTable[4] = { 0, 1, 3, 0 };
|
||||
short precisionBits = precisionBitTable[precision & 3] << 8;
|
||||
short precisionMask = ~( ( 1 << 9 ) | ( 1 << 8 ) );
|
||||
|
@ -863,6 +906,7 @@ void Sys_FPU_SetPrecision( int precision ) {
|
|||
mov word ptr [eax], bx
|
||||
fldcw word ptr [eax]
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -871,6 +915,7 @@ Sys_FPU_SetRounding
|
|||
================
|
||||
*/
|
||||
void Sys_FPU_SetRounding( int rounding ) {
|
||||
#ifdef _MSC_VER
|
||||
short roundingBitTable[4] = { 0, 1, 2, 3 };
|
||||
short roundingBits = roundingBitTable[rounding & 3] << 10;
|
||||
short roundingMask = ~( ( 1 << 11 ) | ( 1 << 10 ) );
|
||||
|
@ -885,6 +930,7 @@ void Sys_FPU_SetRounding( int rounding ) {
|
|||
mov word ptr [eax], bx
|
||||
fldcw word ptr [eax]
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -893,6 +939,7 @@ Sys_FPU_SetDAZ
|
|||
================
|
||||
*/
|
||||
void Sys_FPU_SetDAZ( bool enable ) {
|
||||
#ifdef _MSC_VER
|
||||
DWORD dwData;
|
||||
|
||||
_asm {
|
||||
|
@ -906,6 +953,7 @@ void Sys_FPU_SetDAZ( bool enable ) {
|
|||
mov dwData, eax
|
||||
LDMXCSR dword ptr dwData
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -914,6 +962,7 @@ Sys_FPU_SetFTZ
|
|||
================
|
||||
*/
|
||||
void Sys_FPU_SetFTZ( bool enable ) {
|
||||
#ifdef _MSC_VER
|
||||
DWORD dwData;
|
||||
|
||||
_asm {
|
||||
|
@ -927,4 +976,5 @@ void Sys_FPU_SetFTZ( bool enable ) {
|
|||
mov dwData, eax
|
||||
LDMXCSR dword ptr dwData
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ If you have questions concerning this license or the applicable additional terms
|
|||
#include <io.h>
|
||||
#include <conio.h>
|
||||
|
||||
#ifndef ID_DEDICATED
|
||||
#if !defined(ID_DEDICATED) && !defined(__MINGW32__)
|
||||
#include <comdef.h>
|
||||
#include <comutil.h>
|
||||
#include <wbemidl.h>
|
||||
|
@ -110,7 +110,7 @@ returns in megabytes
|
|||
================
|
||||
*/
|
||||
int Sys_GetVideoRam( void ) {
|
||||
#ifdef ID_DEDICATED
|
||||
#if defined(ID_DEDICATED) || defined(__MINGW32__)
|
||||
return 0;
|
||||
#else
|
||||
unsigned int retSize = 64;
|
||||
|
|
Loading…
Reference in a new issue