diff --git a/code/client/cl_cin.c b/code/client/cl_cin.c index c18a144..50ff532 100644 --- a/code/client/cl_cin.c +++ b/code/client/cl_cin.c @@ -83,7 +83,7 @@ typedef struct { byte file[65536]; short sqrTable[256]; - unsigned int mcomp[256]; + int mcomp[256]; byte *qStatus[2][32768]; long oldXOff, oldYOff, oldysize, oldxsize; diff --git a/code/game/q_shared.c b/code/game/q_shared.c index 6d35493..afb1a25 100644 --- a/code/game/q_shared.c +++ b/code/game/q_shared.c @@ -881,9 +881,7 @@ void QDECL Com_sprintf( char *dest, int size, const char *fmt, ...) { if (len >= size) { Com_Printf ("Com_sprintf: overflow of %i in %i\n", len, size); #ifdef _DEBUG - __asm { - int 3; - } + __debugbreak(); #endif } Q_strncpyz (dest, bigbuffer, size ); diff --git a/code/game/q_shared.h b/code/game/q_shared.h index 210ebc9..0e31cdb 100644 --- a/code/game/q_shared.h +++ b/code/game/q_shared.h @@ -138,20 +138,7 @@ float FloatSwap (const float *f); #undef QDECL #define QDECL __cdecl -// buildstring will be incorporated into the version string -#ifdef NDEBUG -#ifdef _M_IX86 -#define CPUSTRING "win-x86" -#elif defined _M_ALPHA -#define CPUSTRING "win-AXP" -#endif -#else -#ifdef _M_IX86 -#define CPUSTRING "win-x86-debug" -#elif defined _M_ALPHA -#define CPUSTRING "win-AXP-debug" -#endif -#endif +#define CPUSTRING "generic" #define ID_INLINE __inline diff --git a/code/qcommon/common.c b/code/qcommon/common.c index 7d8f823..f5ddabb 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -238,9 +238,7 @@ void QDECL Com_Error( int code, const char *fmt, ... ) { #if defined(_WIN32) && defined(_DEBUG) if ( code != ERR_DISCONNECT && code != ERR_NEED_CD ) { if (!com_noErrorInterrupt->integer) { - __asm { - int 0x03 - } + __debugbreak(); } } #endif diff --git a/code/qcommon/files.c b/code/qcommon/files.c index 0e21165..23ce2ca 100644 --- a/code/qcommon/files.c +++ b/code/qcommon/files.c @@ -2503,7 +2503,7 @@ static void FS_AddGameDirectory( const char *path, const char *dir ) { sorted[i] = pakfiles[i]; } - qsort( sorted, numfiles, 4, paksort ); + qsort( sorted, numfiles, sizeof(void*), paksort ); for ( i = 0 ; i < numfiles ; i++ ) { pakfile = FS_BuildOSPath( path, dir, sorted[i] ); diff --git a/code/qcommon/qcommon.h b/code/qcommon/qcommon.h index ad175f4..cd24342 100644 --- a/code/qcommon/qcommon.h +++ b/code/qcommon/qcommon.h @@ -676,15 +676,6 @@ extern char cl_cdkey[34]; // returnbed by Sys_GetProcessorId #define CPUID_GENERIC 0 // any unrecognized processor -#define CPUID_AXP 0x10 - -#define CPUID_INTEL_UNSUPPORTED 0x20 // Intel 386/486 -#define CPUID_INTEL_PENTIUM 0x21 // Intel Pentium or PPro -#define CPUID_INTEL_MMX 0x22 // Intel Pentium/MMX or P2/MMX -#define CPUID_INTEL_KATMAI 0x23 // Intel Katmai - -#define CPUID_AMD_3DNOW 0x30 // AMD K6 3DNOW! - // TTimo // centralized and cleaned, that's the max string you can send to a Com_Printf / Com_DPrintf (above gets truncated) #define MAXPRINTMSG 4096 diff --git a/code/qcommon/vm.c b/code/qcommon/vm.c index a6b1e3c..c48aedd 100644 --- a/code/qcommon/vm.c +++ b/code/qcommon/vm.c @@ -325,7 +325,7 @@ Dlls will call this directly ============ */ int QDECL VM_DllSyscall( int arg, ... ) { -#if ((defined __linux__) && (defined __powerpc__)) +#ifdef _WIN64 // rcg010206 - see commentary above int args[16]; int i; @@ -541,6 +541,10 @@ vm_t *VM_Create( const char *module, int (*systemCalls)(int *), // copy or compile the instructions vm->codeLength = header->codeLength; +#ifdef _WIN64 + vm->compiled = qfalse; + VM_PrepareInterpreter( vm, header ); +#else if ( interpret >= VMI_COMPILED ) { vm->compiled = qtrue; VM_Compile( vm, header ); @@ -548,6 +552,7 @@ vm_t *VM_Create( const char *module, int (*systemCalls)(int *), vm->compiled = qfalse; VM_PrepareInterpreter( vm, header ); } +#endif // free the original file FS_FreeFile( header ); @@ -698,10 +703,27 @@ int QDECL VM_Call( vm_t *vm, int callnum, ... ) { args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13], args[14], args[15]); - } else if ( vm->compiled ) { + } +#ifndef _WIN64 + else if ( vm->compiled ) + { r = VM_CallCompiled( vm, &callnum ); - } else { - r = VM_CallInterpreted( vm, &callnum ); + } +#endif + else + { + struct { + int callnum; + int args[10]; + } a; + a.callnum = callnum; + va_start(ap, callnum); + for (i = 0; i < sizeof (a.args) / sizeof (a.args[i]); i++) { + a.args[i] = va_arg(ap, int); + } + va_end(ap); + + r = VM_CallInterpreted( vm, &a ); } if ( oldVM != NULL ) // bk001220 - assert(currentVM!=NULL) for oldVM==NULL diff --git a/code/qcommon/vm_x86.c b/code/qcommon/vm_x86.c index 8c138be..d20a15d 100644 --- a/code/qcommon/vm_x86.c +++ b/code/qcommon/vm_x86.c @@ -21,6 +21,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // vm_x86.c -- load time compiler and execution environment for x86 +#ifndef _WIN64 + #include "vm_local.h" #ifdef __FreeBSD__ // rb0101023 @@ -1208,4 +1210,4 @@ int VM_CallCompiled( vm_t *vm, int *args ) { } #endif // !DLL_ONLY - +#endif // _WIN64 diff --git a/code/renderer/tr_main.c b/code/renderer/tr_main.c index 1c92579..e7c96ff 100644 --- a/code/renderer/tr_main.c +++ b/code/renderer/tr_main.c @@ -1003,7 +1003,13 @@ qsort replacement ================= */ -#define SWAP_DRAW_SURF(a,b) temp=((int *)a)[0];((int *)a)[0]=((int *)b)[0];((int *)b)[0]=temp; temp=((int *)a)[1];((int *)a)[1]=((int *)b)[1];((int *)b)[1]=temp; +ID_INLINE void SWAP_DRAW_SURF(void* a, void* b) { + char buf[sizeof(drawSurf_t)]; + Com_Memcpy(buf, a, sizeof(drawSurf_t)); + Com_Memcpy(a, b, sizeof(drawSurf_t)); + Com_Memcpy(b, buf, sizeof(drawSurf_t)); +} + /* this parameter defines the cutoff between using quick sort and insertion sort for arrays; arrays with lengths shorter or equal to the @@ -1013,7 +1019,6 @@ qsort replacement static void shortsort( drawSurf_t *lo, drawSurf_t *hi ) { drawSurf_t *p, *max; - int temp; while (hi > lo) { max = lo; @@ -1044,11 +1049,6 @@ void qsortFast ( unsigned size; /* size of the sub-array */ char *lostk[30], *histk[30]; int stkptr; /* stack for saving sub-array to be processed */ - int temp; - - if ( sizeof(drawSurf_t) != 8 ) { - ri.Error( ERR_DROP, "change SWAP_DRAW_SURF macro" ); - } /* Note: the number of stack entries required is no more than 1 + log2(size), so 30 is sufficient for any array */ diff --git a/code/win32/win_glimp.c b/code/win32/win_glimp.c index afbae07..f725be9 100644 --- a/code/win32/win_glimp.c +++ b/code/win32/win_glimp.c @@ -566,7 +566,7 @@ static qboolean GLW_CreateWindow( const char *drivername, int width, int height, memset( &wc, 0, sizeof( wc ) ); wc.style = 0; - wc.lpfnWndProc = (WNDPROC) glw_state.wndproc; + wc.lpfnWndProc = glw_state.wndproc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = g_wv.hInstance; @@ -1186,10 +1186,10 @@ void GLimp_Init( void ) // save off hInstance and wndproc cv = ri.Cvar_Get( "win_hinstance", "", 0 ); - sscanf( cv->string, "%i", (int *)&g_wv.hInstance ); + sscanf( cv->string, "%p", (void *)&g_wv.hInstance ); cv = ri.Cvar_Get( "win_wndproc", "", 0 ); - sscanf( cv->string, "%i", (int *)&glw_state.wndproc ); + sscanf( cv->string, "%p", (void *)&glw_state.wndproc ); r_allowSoftwareGL = ri.Cvar_Get( "r_allowSoftwareGL", "0", CVAR_LATCH ); r_maskMinidriver = ri.Cvar_Get( "r_maskMinidriver", "0", CVAR_LATCH ); diff --git a/code/win32/win_main.c b/code/win32/win_main.c index 9131e31..01f2796 100644 --- a/code/win32/win_main.c +++ b/code/win32/win_main.c @@ -1089,8 +1089,8 @@ void Sys_Init( void ) { } // save out a couple things in rom cvars for the renderer to access - Cvar_Get( "win_hinstance", va("%i", (int)g_wv.hInstance), CVAR_ROM ); - Cvar_Get( "win_wndproc", va("%i", (int)MainWndProc), CVAR_ROM ); + Cvar_Get( "win_hinstance", va("%p", (void*)g_wv.hInstance), CVAR_ROM ); + Cvar_Get( "win_wndproc", va("%p", (void*)MainWndProc), CVAR_ROM ); // // figure out our CPU @@ -1107,24 +1107,6 @@ void Sys_Init( void ) { case CPUID_GENERIC: Cvar_Set( "sys_cpustring", "generic" ); break; - case CPUID_INTEL_UNSUPPORTED: - Cvar_Set( "sys_cpustring", "x86 (pre-Pentium)" ); - break; - case CPUID_INTEL_PENTIUM: - Cvar_Set( "sys_cpustring", "x86 (P5/PPro, non-MMX)" ); - break; - case CPUID_INTEL_MMX: - Cvar_Set( "sys_cpustring", "x86 (P5/Pentium2, MMX)" ); - break; - case CPUID_INTEL_KATMAI: - Cvar_Set( "sys_cpustring", "Intel Pentium III" ); - break; - case CPUID_AMD_3DNOW: - Cvar_Set( "sys_cpustring", "AMD w/ 3DNow!" ); - break; - case CPUID_AXP: - Cvar_Set( "sys_cpustring", "Alpha AXP" ); - break; default: Com_Error( ERR_FATAL, "Unknown cpu type %d\n", cpuid ); break; @@ -1137,26 +1119,6 @@ void Sys_Init( void ) { { cpuid = CPUID_GENERIC; } - else if ( !Q_stricmp( Cvar_VariableString( "sys_cpustring" ), "x87" ) ) - { - cpuid = CPUID_INTEL_PENTIUM; - } - else if ( !Q_stricmp( Cvar_VariableString( "sys_cpustring" ), "mmx" ) ) - { - cpuid = CPUID_INTEL_MMX; - } - else if ( !Q_stricmp( Cvar_VariableString( "sys_cpustring" ), "3dnow" ) ) - { - cpuid = CPUID_AMD_3DNOW; - } - else if ( !Q_stricmp( Cvar_VariableString( "sys_cpustring" ), "PentiumIII" ) ) - { - cpuid = CPUID_INTEL_KATMAI; - } - else if ( !Q_stricmp( Cvar_VariableString( "sys_cpustring" ), "axp" ) ) - { - cpuid = CPUID_AXP; - } else { Com_Printf( "WARNING: unknown sys_cpustring '%s'\n", Cvar_VariableString( "sys_cpustring" ) ); diff --git a/code/win32/win_shared.c b/code/win32/win_shared.c index 012a291..b0f872d 100644 --- a/code/win32/win_shared.c +++ b/code/win32/win_shared.c @@ -58,39 +58,11 @@ int Sys_Milliseconds (void) Sys_SnapVector ================ */ -long fastftol( float f ) { - static int tmp; - __asm fld f - __asm fistp tmp - __asm mov eax, tmp -} - void Sys_SnapVector( float *v ) { - int i; - float f; - - f = *v; - __asm fld f; - __asm fistp i; - *v = i; - v++; - f = *v; - __asm fld f; - __asm fistp i; - *v = i; - v++; - f = *v; - __asm fld f; - __asm fistp i; - *v = i; - /* - *v = fastftol(*v); - v++; - *v = fastftol(*v); - v++; - *v = fastftol(*v); - */ + v[0] = (int)v[0]; + v[1] = (int)v[1]; + v[2] = (int)v[2]; } @@ -108,165 +80,10 @@ void Sys_SnapVector( float *v ) ** ** -------------------------------------------------------------------------------- */ -static void CPUID( int func, unsigned regs[4] ) -{ - unsigned regEAX, regEBX, regECX, regEDX; - -#ifndef __VECTORC - __asm mov eax, func - __asm __emit 00fh - __asm __emit 0a2h - __asm mov regEAX, eax - __asm mov regEBX, ebx - __asm mov regECX, ecx - __asm mov regEDX, edx - - regs[0] = regEAX; - regs[1] = regEBX; - regs[2] = regECX; - regs[3] = regEDX; -#else - regs[0] = 0; - regs[1] = 0; - regs[2] = 0; - regs[3] = 0; -#endif -} - -static int IsPentium( void ) -{ - __asm - { - pushfd // save eflags - pop eax - test eax, 0x00200000 // check ID bit - jz set21 // bit 21 is not set, so jump to set_21 - and eax, 0xffdfffff // clear bit 21 - push eax // save new value in register - popfd // store new value in flags - pushfd - pop eax - test eax, 0x00200000 // check ID bit - jz good - jmp err // cpuid not supported -set21: - or eax, 0x00200000 // set ID bit - push eax // store new value - popfd // store new value in EFLAGS - pushfd - pop eax - test eax, 0x00200000 // if bit 21 is on - jnz good - jmp err - } - -err: - return qfalse; -good: - return qtrue; -} - -static int Is3DNOW( void ) -{ - unsigned regs[4]; - char pstring[16]; - char processorString[13]; - - // get name of processor - CPUID( 0, ( unsigned int * ) pstring ); - processorString[0] = pstring[4]; - processorString[1] = pstring[5]; - processorString[2] = pstring[6]; - processorString[3] = pstring[7]; - processorString[4] = pstring[12]; - processorString[5] = pstring[13]; - processorString[6] = pstring[14]; - processorString[7] = pstring[15]; - processorString[8] = pstring[8]; - processorString[9] = pstring[9]; - processorString[10] = pstring[10]; - processorString[11] = pstring[11]; - processorString[12] = 0; - -// REMOVED because you can have 3DNow! on non-AMD systems -// if ( strcmp( processorString, "AuthenticAMD" ) ) -// return qfalse; - - // check AMD-specific functions - CPUID( 0x80000000, regs ); - if ( regs[0] < 0x80000000 ) - return qfalse; - - // bit 31 of EDX denotes 3DNOW! support - CPUID( 0x80000001, regs ); - if ( regs[3] & ( 1 << 31 ) ) - return qtrue; - - return qfalse; -} - -static int IsKNI( void ) -{ - unsigned regs[4]; - - // get CPU feature bits - CPUID( 1, regs ); - - // bit 25 of EDX denotes KNI existence - if ( regs[3] & ( 1 << 25 ) ) - return qtrue; - - return qfalse; -} - -static int IsMMX( void ) -{ - unsigned regs[4]; - - // get CPU feature bits - CPUID( 1, regs ); - - // bit 23 of EDX denotes MMX existence - if ( regs[3] & ( 1 << 23 ) ) - return qtrue; - return qfalse; -} int Sys_GetProcessorId( void ) { -#if defined _M_ALPHA - return CPUID_AXP; -#elif !defined _M_IX86 return CPUID_GENERIC; -#else - - // verify we're at least a Pentium or 486 w/ CPUID support - if ( !IsPentium() ) - return CPUID_INTEL_UNSUPPORTED; - - // check for MMX - if ( !IsMMX() ) - { - // Pentium or PPro - return CPUID_INTEL_PENTIUM; - } - - // see if we're an AMD 3DNOW! processor - if ( Is3DNOW() ) - { - return CPUID_AMD_3DNOW; - } - - // see if we're an Intel Katmai - if ( IsKNI() ) - { - return CPUID_INTEL_KATMAI; - } - - // by default we're functionally a vanilla Pentium/MMX or P2/MMX - return CPUID_INTEL_MMX; - -#endif } /* diff --git a/code/win32/win_syscon.c b/code/win32/win_syscon.c index 53b9fa5..f381973 100644 --- a/code/win32/win_syscon.c +++ b/code/win32/win_syscon.c @@ -416,7 +416,7 @@ void Sys_CreateConsole( void ) g_wv.hInstance, NULL ); SendMessage( s_wcd.hwndBuffer, WM_SETFONT, ( WPARAM ) s_wcd.hfBufferFont, 0 ); - s_wcd.SysInputLineWndProc = ( WNDPROC ) SetWindowLong( s_wcd.hwndInputLine, GWL_WNDPROC, ( long ) InputLineWndProc ); + s_wcd.SysInputLineWndProc = (WNDPROC)SetWindowLongPtr(s_wcd.hwndInputLine, GWLP_WNDPROC, (LONG_PTR)InputLineWndProc); SendMessage( s_wcd.hwndInputLine, WM_SETFONT, ( WPARAM ) s_wcd.hfBufferFont, 0 ); ShowWindow( s_wcd.hWnd, SW_SHOWDEFAULT);