File 0007-prepare-for-64bit-support.diff of Package enemy-territory

From 86afc25702fec5d4761609fb70179ac15857672e Mon Sep 17 00:00:00 2001
From: Ludwig Nussel <ludwig.nussel@suse.de>
Date: Sat, 14 Aug 2010 18:37:16 +0200
Subject: [PATCH 7/7] prepare for 64bit support

---
 src/SConstruct               |    2 +-
 src/cgame/cg_main.c          |    2 +-
 src/cgame/cg_syscalls.c      |    4 +-
 src/client/cl_cgame.c        |   10 +--
 src/client/cl_cin.c          |  141 +++++++++++++++---------------------------
 src/client/cl_ui.c           |   14 ++---
 src/game/bg_animation.c      |    2 +
 src/game/g_local.h           |    2 +-
 src/game/g_main.c            |    4 +-
 src/game/g_syscalls.c        |    4 +-
 src/game/q_shared.h          |   17 +++++
 src/jpeg-6/jdcoefct.c        |    2 +-
 src/mac/mac_dedicated_main.c |    4 +-
 src/mac/mac_main.cpp         |    2 +-
 src/qcommon/cm_polylib.c     |    2 +-
 src/qcommon/common.c         |    2 +-
 src/qcommon/files.c          |    2 +-
 src/qcommon/msg.c            |    4 +-
 src/qcommon/qcommon.h        |   22 +++++--
 src/qcommon/vm.c             |   57 ++++++++++-------
 src/qcommon/vm_local.h       |    6 +-
 src/renderer/tr_init.c       |    2 +-
 src/renderer/tr_main.c       |   57 +++++++++++++++++-
 src/server/sv_client.c       |    2 +-
 src/server/sv_game.c         |   12 +---
 src/ui/ui_main.c             |    2 +-
 src/ui/ui_syscalls.c         |    4 +-
 src/unix/unix_main.c         |    6 +-
 src/win32/win_main.c         |    4 +-
 29 files changed, 217 insertions(+), 177 deletions(-)

diff --git a/src/SConstruct b/src/SConstruct
index 10a350c..0e7e1ec 100644
--- a/src/SConstruct
+++ b/src/SConstruct
@@ -263,7 +263,7 @@ elif ( BUILD == 'release' ):
 		if ( cpu == 'x86'):
 			OPTCPPFLAGS = [ '-O3', '-march=i686', '-Winline', '-ffast-math', '-fomit-frame-pointer', '-finline-functions', '-fschedule-insns2' ]
 		else:
-			OPTCPPFLAGS = [ '-O3', '-Winline', '-ffast-math']
+			OPTCPPFLAGS = [ '-O2', '-g', '-Winline', '-ffast-math']
 	elif ( OS == 'Darwin' ):
 		OPTCPPFLAGS = []
 else:
diff --git a/src/cgame/cg_main.c b/src/cgame/cg_main.c
index 6839323..af23b05 100644
--- a/src/cgame/cg_main.c
+++ b/src/cgame/cg_main.c
@@ -55,7 +55,7 @@ This must be the very first function compiled into the .q3vm file
 #if __GNUC__ >= 4
 #pragma GCC visibility push(default)
 #endif
-int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10, int arg11  ) {
+intptr_t vmMain( intptr_t command, intptr_t arg0, intptr_t arg1, intptr_t arg2, intptr_t arg3, intptr_t arg4, intptr_t arg5, intptr_t arg6, intptr_t arg7, intptr_t arg8, intptr_t arg9, intptr_t arg10, intptr_t arg11  ) {
 #if __GNUC__ >= 4
 #pragma GCC visibility pop
 #endif
diff --git a/src/cgame/cg_syscalls.c b/src/cgame/cg_syscalls.c
index 1057277..96469f9 100644
--- a/src/cgame/cg_syscalls.c
+++ b/src/cgame/cg_syscalls.c
@@ -30,12 +30,12 @@ If you have questions concerning this license or the applicable additional terms
 // cg_syscalls.asm is included instead when building a qvm
 #include "cg_local.h"
 
-static int ( QDECL * syscall )( int arg, ... ) = ( int ( QDECL * )( int, ... ) ) - 1;
+static intptr_t ( QDECL * syscall )( intptr_t arg, ... ) = ( intptr_t ( QDECL * )( intptr_t, ... ) ) - 1;
 
 #if __GNUC__ >= 4
 #pragma GCC visibility push(default)
 #endif
-void dllEntry( int ( QDECL  *syscallptr )( int arg,... ) ) {
+void dllEntry( intptr_t ( QDECL  *syscallptr )( intptr_t arg,... ) ) {
 	syscall = syscallptr;
 }
 #if __GNUC__ >= 4
diff --git a/src/client/cl_cgame.c b/src/client/cl_cgame.c
index 20d37da..97b096c 100644
--- a/src/client/cl_cgame.c
+++ b/src/client/cl_cgame.c
@@ -564,10 +564,8 @@ CL_CgameSystemCalls
 The cgame module is making a system call
 ====================
 */
-#define VMA( x ) VM_ArgPtr( args[x] )
-#define VMF( x )  ( (float *)args )[x]
 
-int CL_CgameSystemCalls( int *args ) {
+intptr_t CL_CgameSystemCalls( intptr_t *args ) {
 	switch ( args[0] ) {
 	case CG_PRINT:
 		Com_Printf( "%s", (char *)VMA( 1 ) );
@@ -864,11 +862,11 @@ int CL_CgameSystemCalls( int *args ) {
 
 
 	case CG_MEMSET:
-		return (int)memset( VMA( 1 ), args[2], args[3] );
+		return (intptr_t)memset( VMA( 1 ), args[2], args[3] );
 	case CG_MEMCPY:
-		return (int)memcpy( VMA( 1 ), VMA( 2 ), args[3] );
+		return (intptr_t)memcpy( VMA( 1 ), VMA( 2 ), args[3] );
 	case CG_STRNCPY:
-		return (int)strncpy( VMA( 1 ), VMA( 2 ), args[3] );
+		return (intptr_t)strncpy( VMA( 1 ), VMA( 2 ), args[3] );
 	case CG_SIN:
 		return FloatAsInt( sin( VMF( 1 ) ) );
 	case CG_COS:
diff --git a/src/client/cl_cin.c b/src/client/cl_cin.c
index cdc5c32..aae689a 100644
--- a/src/client/cl_cin.c
+++ b/src/client/cl_cin.c
@@ -93,7 +93,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;
@@ -334,29 +334,16 @@ long RllDecodeStereoToMono( unsigned char *from,short *to,unsigned int size,char
 *
 ******************************************************************************/
 
-static void move8_32( byte *src, byte *dst, int spl ) {
-	double *dsrc, *ddst;
-	int dspl;
-
-	dsrc = (double *)src;
-	ddst = (double *)dst;
-	dspl = spl >> 3;
-
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
-	dsrc += dspl; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
-	dsrc += dspl; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
-	dsrc += dspl; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
-	dsrc += dspl; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
-	dsrc += dspl; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
-	dsrc += dspl; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
-	dsrc += dspl; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
+static void move8_32( byte *src, byte *dst, int spl )
+{
+	int i;
+
+	for(i = 0; i < 8; ++i)
+	{
+		memcpy(dst, src, 32);
+		src += spl;
+		dst += spl;
+	}
 }
 
 /******************************************************************************
@@ -367,21 +354,16 @@ static void move8_32( byte *src, byte *dst, int spl ) {
 *
 ******************************************************************************/
 
-static void move4_32( byte *src, byte *dst, int spl  ) {
-	double *dsrc, *ddst;
-	int dspl;
-
-	dsrc = (double *)src;
-	ddst = (double *)dst;
-	dspl = spl >> 3;
-
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1];
-	dsrc += dspl; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1];
-	dsrc += dspl; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1];
-	dsrc += dspl; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1];
+static void move4_32( byte *src, byte *dst, int spl  )
+{
+	int i;
+
+	for(i = 0; i < 4; ++i)
+	{
+		memcpy(dst, src, 16);
+		src += spl;
+		dst += spl;
+	}
 }
 
 /******************************************************************************
@@ -392,29 +374,16 @@ static void move4_32( byte *src, byte *dst, int spl  ) {
 *
 ******************************************************************************/
 
-static void blit8_32( byte *src, byte *dst, int spl  ) {
-	double *dsrc, *ddst;
-	int dspl;
-
-	dsrc = (double *)src;
-	ddst = (double *)dst;
-	dspl = spl >> 3;
-
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
-	dsrc += 4; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
-	dsrc += 4; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
-	dsrc += 4; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
-	dsrc += 4; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
-	dsrc += 4; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
-	dsrc += 4; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
-	dsrc += 4; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1]; ddst[2] = dsrc[2]; ddst[3] = dsrc[3];
+static void blit8_32( byte *src, byte *dst, int spl  )
+{
+	int i;
+
+	for(i = 0; i < 8; ++i)
+	{
+		memcpy(dst, src, 32);
+		src += 32;
+		dst += spl;
+	}
 }
 
 /******************************************************************************
@@ -424,22 +393,16 @@ static void blit8_32( byte *src, byte *dst, int spl  ) {
 * Description:
 *
 ******************************************************************************/
-#define movs double
-static void blit4_32( byte *src, byte *dst, int spl  ) {
-	movs *dsrc, *ddst;
-	int dspl;
-
-	dsrc = (movs *)src;
-	ddst = (movs *)dst;
-	dspl = spl >> 3;
-
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1];
-	dsrc += 2; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1];
-	dsrc += 2; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1];
-	dsrc += 2; ddst += dspl;
-	ddst[0] = dsrc[0]; ddst[1] = dsrc[1];
+static void blit4_32( byte *src, byte *dst, int spl  )
+{
+	int i;
+
+	for(i = 0; i < 4; ++i)
+	{
+		memmove(dst, src, 16);
+		src += 16;
+		dst += spl;
+	}
 }
 
 /******************************************************************************
@@ -450,16 +413,10 @@ static void blit4_32( byte *src, byte *dst, int spl  ) {
 *
 ******************************************************************************/
 
-static void blit2_32( byte *src, byte *dst, int spl  ) {
-	double *dsrc, *ddst;
-	int dspl;
-
-	dsrc = (double *)src;
-	ddst = (double *)dst;
-	dspl = spl >> 3;
-
-	ddst[0] = dsrc[0];
-	ddst[dspl] = dsrc[1];
+static void blit2_32( byte *src, byte *dst, int spl  )
+{
+	memcpy(dst, src, 8);
+	memcpy(dst+spl, src+8, 8);
 }
 
 /******************************************************************************
@@ -1095,8 +1052,8 @@ static void readQuadInfo( byte *qData ) {
 	cinTable[currentHandle].VQ0 = cinTable[currentHandle].VQNormal;
 	cinTable[currentHandle].VQ1 = cinTable[currentHandle].VQBuffer;
 
-	cinTable[currentHandle].t[0] = ( 0 - (unsigned int)cin.linbuf ) + (unsigned int)cin.linbuf + cinTable[currentHandle].screenDelta;
-	cinTable[currentHandle].t[1] = ( 0 - ( (unsigned int)cin.linbuf + cinTable[currentHandle].screenDelta ) ) + (unsigned int)cin.linbuf;
+	cinTable[currentHandle].t[0] = cinTable[currentHandle].screenDelta;
+	cinTable[currentHandle].t[1] = -cinTable[currentHandle].screenDelta;
 
 	cinTable[currentHandle].drawX = cinTable[currentHandle].CIN_WIDTH;
 	cinTable[currentHandle].drawY = cinTable[currentHandle].CIN_HEIGHT;
@@ -1327,8 +1284,8 @@ redump:
 	cinTable[currentHandle].roq_id       = framedata[0] + framedata[1] * 256;
 	cinTable[currentHandle].RoQFrameSize = framedata[2] + framedata[3] * 256 + framedata[4] * 65536;
 	cinTable[currentHandle].roq_flags    = framedata[6] + framedata[7] * 256;
-	cinTable[currentHandle].roqF0        = (char)framedata[7];
-	cinTable[currentHandle].roqF1        = (char)framedata[6];
+	cinTable[currentHandle].roqF0        = (signed char)framedata[7];
+	cinTable[currentHandle].roqF1        = (signed char)framedata[6];
 
 	if ( cinTable[currentHandle].RoQFrameSize > 65536 || cinTable[currentHandle].roq_id == 0x1084 ) {
 		Com_DPrintf( "roq_size>65536||roq_id==0x1084\n" );
diff --git a/src/client/cl_ui.c b/src/client/cl_ui.c
index 7165f1b..f7450c2 100644
--- a/src/client/cl_ui.c
+++ b/src/client/cl_ui.c
@@ -795,10 +795,6 @@ static int FloatAsInt( float f ) {
 	return temp;
 }
 
-void *VM_ArgPtr( int intValue );
-#define VMA( x ) VM_ArgPtr( args[x] )
-#define VMF( x )  ( (float *)args )[x]
-
 /*
 ====================
 CL_UISystemCalls
@@ -806,7 +802,7 @@ CL_UISystemCalls
 The ui module is making a system call
 ====================
 */
-int CL_UISystemCalls( int *args ) {
+intptr_t CL_UISystemCalls( intptr_t *args ) {
 	switch ( args[0] ) {
 	case UI_ERROR:
 		Com_Error( ERR_DROP, "%s", (char *)VMA( 1 ) );
@@ -1123,13 +1119,13 @@ int CL_UISystemCalls( int *args ) {
 		return 0;
 
 	case UI_MEMSET:
-		return (int)memset( VMA( 1 ), args[2], args[3] );
+		return (intptr_t)memset( VMA( 1 ), args[2], args[3] );
 
 	case UI_MEMCPY:
-		return (int)memcpy( VMA( 1 ), VMA( 2 ), args[3] );
+		return (intptr_t)memcpy( VMA( 1 ), VMA( 2 ), args[3] );
 
 	case UI_STRNCPY:
-		return (int)strncpy( VMA( 1 ), VMA( 2 ), args[3] );
+		return (intptr_t)strncpy( VMA( 1 ), VMA( 2 ), args[3] );
 
 	case UI_SIN:
 		return FloatAsInt( sin( VMF( 1 ) ) );
@@ -1229,7 +1225,7 @@ int CL_UISystemCalls( int *args ) {
 		return 0;
 
 	default:
-		Com_Error( ERR_DROP, "Bad UI system trap: %i", args[0] );
+		Com_Error( ERR_DROP, "Bad UI system trap: %i", (int)args[0] );
 
 	}
 
diff --git a/src/game/bg_animation.c b/src/game/bg_animation.c
index 1831cd2..7e2970f 100644
--- a/src/game/bg_animation.c
+++ b/src/game/bg_animation.c
@@ -1660,6 +1660,8 @@ int BG_GetConditionValue( int client, int condition, qboolean checkConversion )
 			// nothing found
 			return 0;
 		} else {
+			Com_Error( ERR_DROP, "FIXME");
+			#warning 64bit
 			// xkan, 1/14/2003 - must use COM_BitCheck on the result.
 			return (int)globalScriptData->clientConditions[client][condition];
 		}
diff --git a/src/game/g_local.h b/src/game/g_local.h
index 5365ec5..b07f751 100644
--- a/src/game/g_local.h
+++ b/src/game/g_local.h
@@ -1627,7 +1627,7 @@ extern gentity_t g_entities[];          //DAJ was explicit set to MAX_ENTITIES
 extern g_campaignInfo_t g_campaigns[];
 extern int saveGamePending;
 
-#define FOFS( x ) ( (int)&( ( (gentity_t *)0 )->x ) )
+#define FOFS( x ) ( (size_t)&( ( (gentity_t *)0 )->x ) )
 
 extern vmCvar_t g_gametype;
 
diff --git a/src/game/g_main.c b/src/game/g_main.c
index f672790..0956125 100644
--- a/src/game/g_main.c
+++ b/src/game/g_main.c
@@ -479,7 +479,7 @@ This must be the very first function compiled into the .q3vm file
 #if __GNUC__ >= 4
 #pragma GCC visibility push(default)
 #endif
-int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6 ) {
+intptr_t vmMain( intptr_t command, intptr_t arg0, intptr_t arg1, intptr_t arg2, intptr_t arg3, intptr_t arg4, intptr_t arg5, intptr_t arg6 ) {
 #if __GNUC__ >= 4
 #pragma GCC visibility pop
 #endif
@@ -491,7 +491,7 @@ int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int a
 		G_ShutdownGame( arg0 );
 		return 0;
 	case GAME_CLIENT_CONNECT:
-		return (int)ClientConnect( arg0, arg1, arg2 );
+		return (intptr_t)ClientConnect( arg0, arg1, arg2 );
 	case GAME_CLIENT_THINK:
 		ClientThink( arg0 );
 		return 0;
diff --git a/src/game/g_syscalls.c b/src/game/g_syscalls.c
index 3187c2a..b9f50a4 100644
--- a/src/game/g_syscalls.c
+++ b/src/game/g_syscalls.c
@@ -31,12 +31,12 @@ If you have questions concerning this license or the applicable additional terms
 // this file is only included when building a dll
 // g_syscalls.asm is included instead when building a qvm
 
-static int ( QDECL * syscall )( int arg, ... ) = ( int ( QDECL * )( int, ... ) ) - 1;
+static intptr_t ( QDECL * syscall )( intptr_t arg, ... ) = ( intptr_t ( QDECL * )( intptr_t, ... ) ) - 1;
 
 #if __GNUC__ >= 4
 #pragma GCC visibility push(default)
 #endif
-void dllEntry( int ( QDECL *syscallptr )( int arg,... ) ) {
+void dllEntry( intptr_t ( QDECL *syscallptr )( intptr_t arg,... ) ) {
 	syscall = syscallptr;
 }
 #if __GNUC__ >= 4
diff --git a/src/game/q_shared.h b/src/game/q_shared.h
index 6e6e5d5..2fe8dad 100644
--- a/src/game/q_shared.h
+++ b/src/game/q_shared.h
@@ -111,6 +111,8 @@ If you have questions concerning this license or the applicable additional terms
 
 #include "bg_lib.h"
 
+typedef int intptr_t;
+
 #else
 
 #include <assert.h>
@@ -125,6 +127,21 @@ If you have questions concerning this license or the applicable additional terms
 #include <sys/stat.h> // rain
 #include <float.h>
 
+#ifdef _MSC_VER
+  #include <io.h>
+
+  typedef __int64 int64_t;
+  typedef __int32 int32_t;
+  typedef __int16 int16_t;
+  typedef __int8 int8_t;
+  typedef unsigned __int64 uint64_t;
+  typedef unsigned __int32 uint32_t;
+  typedef unsigned __int16 uint16_t;
+  typedef unsigned __int8 uint8_t;
+#else
+  #include <stdint.h>
+#endif
+
 #endif
 
 
diff --git a/src/jpeg-6/jdcoefct.c b/src/jpeg-6/jdcoefct.c
index 8f67b5d..3525b06 100644
--- a/src/jpeg-6/jdcoefct.c
+++ b/src/jpeg-6/jdcoefct.c
@@ -732,7 +732,7 @@ jinit_d_coef_controller( j_decompress_ptr cinfo, boolean need_full_buffer ) {
 	} else {
 		/* We only need a single-MCU buffer. */
 		JBLOCKROW buffer;
-		int i;
+		unsigned i;
 
 		buffer = (JBLOCKROW)
 				  ( *cinfo->mem->alloc_large ) ( (j_common_ptr) cinfo, JPOOL_IMAGE,
diff --git a/src/mac/mac_dedicated_main.c b/src/mac/mac_dedicated_main.c
index 5658b74..2c25113 100644
--- a/src/mac/mac_dedicated_main.c
+++ b/src/mac/mac_dedicated_main.c
@@ -671,9 +671,9 @@ char* Sys_GetDLLName( const char *name ) {
 
 #if MAC_WOLF2_MP
 #pragma mark Sys_LoadDll
-void *Sys_LoadDll( const char *name, char *fqpath, int( **entryPoint ) ( int, ... ), int ( *systemCalls )( int, ... ) )
+void *Sys_LoadDll( const char *name, char *fqpath, intptr_t( **entryPoint ) ( int, ... ), intptr_t ( *systemCalls )( intptr_t, ... ) )
 #else
-void *Sys_LoadDll( const char *name, int( **entryPoint ) ( int, ... ), int ( *systemCalls )( int, ... ) )
+void *Sys_LoadDll( const char *name, intptr_t( **entryPoint ) ( int, ... ), intptr_t ( *systemCalls )( intptr_t, ... ) )
 #endif
 {
 	OSErr err = noErr;
diff --git a/src/mac/mac_main.cpp b/src/mac/mac_main.cpp
index 441b80c..9332e2d 100644
--- a/src/mac/mac_main.cpp
+++ b/src/mac/mac_main.cpp
@@ -327,7 +327,7 @@ char* Sys_GetDLLName( const char *name ) {
 
 
 #pragma mark Sys_LoadDll
-void *Sys_LoadDll( const char *name, char *fqpath, int( **entryPoint ) ( int, ... ), int ( *systemCalls )( int, ... ) ) {
+void *Sys_LoadDll( const char *name, char *fqpath, intptr_t( **entryPoint ) ( int, ... ), intptr_t ( *systemCalls )( intptr_t, ... ) ) {
 	OSErr err = noErr;
 	FSSpec SLSpec;
 	char name2[255];
diff --git a/src/qcommon/cm_polylib.c b/src/qcommon/cm_polylib.c
index 5bacc1c..1c6d023 100644
--- a/src/qcommon/cm_polylib.c
+++ b/src/qcommon/cm_polylib.c
@@ -272,7 +272,7 @@ winding_t   *CopyWinding( winding_t *w ) {
 	winding_t   *c;
 
 	c = AllocWinding( w->numpoints );
-	size = (int)( (winding_t *)0 )->p[w->numpoints];
+	size = (size_t)( (winding_t *)0 )->p[w->numpoints];
 	memcpy( c, w, size );
 	return c;
 }
diff --git a/src/qcommon/common.c b/src/qcommon/common.c
index 9e55d47..d92f34d 100644
--- a/src/qcommon/common.c
+++ b/src/qcommon/common.c
@@ -1605,7 +1605,7 @@ void Com_InitHunkMemory( void ) {
 		Com_Error( ERR_FATAL, "Hunk data failed to allocate %i megs", s_hunkTotal / ( 1024 * 1024 ) );
 	}
 	// cacheline align
-	s_hunkData = ( byte * )( ( (int)s_hunkData + 31 ) & ~31 );
+	s_hunkData = ( byte * )( ( (intptr_t)s_hunkData + 31 ) & ~31 );
 	Hunk_Clear();
 
 	Cmd_AddCommand( "meminfo", Com_Meminfo_f );
diff --git a/src/qcommon/files.c b/src/qcommon/files.c
index 82d8321..401c7da 100644
--- a/src/qcommon/files.c
+++ b/src/qcommon/files.c
@@ -2912,7 +2912,7 @@ static void FS_AddGameDirectory( const char *path, const char *dir ) {
 // jpw
 	}
 
-	qsort( sorted, numfiles, 4, paksort );
+	qsort( sorted, numfiles, sizeof(char*), paksort );
 
 	for ( i = 0 ; i < numfiles ; i++ ) {
 /*		if (Q_strncmp(sorted[i],"sp_",3)) { // JPW NERVE -- exclude sp_*
diff --git a/src/qcommon/msg.c b/src/qcommon/msg.c
index 25ca92a..66ad2af 100644
--- a/src/qcommon/msg.c
+++ b/src/qcommon/msg.c
@@ -834,7 +834,7 @@ typedef struct {
 } netField_t;
 
 // using the stringizing operator to save typing...
-#define NETF( x ) # x,(int)&( (entityState_t*)0 )->x
+#define NETF( x ) # x,(size_t)&( (entityState_t*)0 )->x
 
 netField_t entityStateFields[] = {
 	{ NETF( eType ), 8 },
@@ -1240,7 +1240,7 @@ player_state_t communication
 */
 
 // using the stringizing operator to save typing...
-#define PSF( x ) # x,(int)&( (playerState_t*)0 )->x
+#define PSF( x ) # x,(size_t)&( (playerState_t*)0 )->x
 
 netField_t playerStateFields[] = {
 	{ PSF( commandTime ), 32 },
diff --git a/src/qcommon/qcommon.h b/src/qcommon/qcommon.h
index ac51673..0742df7 100644
--- a/src/qcommon/qcommon.h
+++ b/src/qcommon/qcommon.h
@@ -388,7 +388,7 @@ typedef enum {
 } sharedTraps_t;
 
 void    VM_Init( void );
-vm_t    *VM_Create( const char *module, int ( *systemCalls )( int * ),
+vm_t    *VM_Create( const char *module, intptr_t ( *systemCalls )( intptr_t * ),
 					vmInterpret_t interpret );
 // module should be bare: "cgame", not "cgame.dll" or "vm/cgame.qvm"
 
@@ -396,12 +396,22 @@ void    VM_Free( vm_t *vm );
 void    VM_Clear( void );
 vm_t    *VM_Restart( vm_t *vm );
 
-int QDECL VM_Call( vm_t *vm, int callNum, ... );
+intptr_t QDECL VM_Call( vm_t *vm, int callNum, ... );
 
 void    VM_Debug( int level );
 
-void    *VM_ArgPtr( int intValue );
-void    *VM_ExplicitArgPtr( vm_t *vm, int intValue );
+void    *VM_ArgPtr( intptr_t intValue );
+void    *VM_ExplicitArgPtr( vm_t *vm, intptr_t intValue );
+
+#define VMA( x ) VM_ArgPtr( args[x] )
+static inline float _vmf(intptr_t x)
+{
+	int i = x;
+	float f;
+	memcpy(&f, &x, sizeof(i));
+	return f;
+}
+#define	VMF(x)	_vmf(args[x])
 
 /*
 ==============================================================
@@ -1109,8 +1119,8 @@ void Sys_LeaveCriticalSection( void *ptr );
 
 char* Sys_GetDLLName( const char *name );
 // fqpath param added 2/15/02 by T.Ray - Sys_LoadDll is only called in vm.c at this time
-void    * QDECL Sys_LoadDll( const char *name, char *fqpath, int( QDECL * *entryPoint ) ( int, ... ),
-							 int ( QDECL * systemcalls )( int, ... ) );
+void    * QDECL Sys_LoadDll( const char *name, char *fqpath, intptr_t( QDECL * *entryPoint ) ( int, ... ),
+							 intptr_t ( QDECL * systemcalls )( intptr_t, ... ) );
 void    Sys_UnloadDll( void *dllHandle );
 
 void    Sys_UnloadGame( void );
diff --git a/src/qcommon/vm.c b/src/qcommon/vm.c
index 3b16af8..cdbfa18 100644
--- a/src/qcommon/vm.c
+++ b/src/qcommon/vm.c
@@ -153,6 +153,7 @@ int VM_SymbolToValue( vm_t *vm, const char *symbol ) {
 }
 
 
+#if 0
 /*
 =====================
 VM_SymbolForCompiledPointer
@@ -179,6 +180,7 @@ const char *VM_SymbolForCompiledPointer( vm_t *vm, void *code ) {
 	// now look up the bytecode instruction pointer
 	return VM_ValueToSymbol( vm, i );
 }
+#endif
 
 
 
@@ -331,10 +333,9 @@ Dlls will call this directly
 
 ============
 */
-int QDECL VM_DllSyscall( int arg, ... ) {
-#if ( ( defined __linux__ ) && ( defined __powerpc__ ) ) //|| (defined MACOS_X)
-	// rcg010206 - see commentary above
-	int args[16];
+intptr_t QDECL VM_DllSyscall( intptr_t arg, ... ) {
+#if !id386
+	intptr_t args[16];
 	int i;
 	va_list ap;
 
@@ -342,7 +343,7 @@ int QDECL VM_DllSyscall( int arg, ... ) {
 
 	va_start( ap, arg );
 	for ( i = 1; i < sizeof( args ) / sizeof( args[i] ); i++ )
-		args[i] = va_arg( ap, int );
+		args[i] = va_arg( ap, intptr_t );
 	va_end( ap );
 
 	return currentVM->systemCall( args );
@@ -369,7 +370,7 @@ vm_t *VM_Restart( vm_t *vm ) {
 	// DLL's can't be restarted in place
 	if ( vm->dllHandle ) {
 		char name[MAX_QPATH];
-		int ( *systemCall )( int *parms );
+		intptr_t ( *systemCall )( intptr_t *parms );
 
 		systemCall = vm->systemCall;
 		Q_strncpyz( name, vm->name, sizeof( name ) );
@@ -439,7 +440,7 @@ it will attempt to load as a system dll
 
 #define STACK_SIZE  0x20000
 
-vm_t *VM_Create( const char *module, int ( *systemCalls )(int *),
+vm_t *VM_Create( const char *module, intptr_t ( *systemCalls )(intptr_t *),
 				 vmInterpret_t interpret ) {
 	vm_t        *vm;
 	vmHeader_t  *header;
@@ -606,7 +607,7 @@ void VM_Clear( void ) {
 	lastVM = NULL;
 }
 
-void *VM_ArgPtr( int intValue ) {
+void *VM_ArgPtr( intptr_t intValue ) {
 	if ( !intValue ) {
 		return NULL;
 	}
@@ -622,7 +623,7 @@ void *VM_ArgPtr( int intValue ) {
 	}
 }
 
-void *VM_ExplicitArgPtr( vm_t *vm, int intValue ) {
+void *VM_ExplicitArgPtr( vm_t *vm, intptr_t intValue ) {
 	if ( !intValue ) {
 		return NULL;
 	}
@@ -667,15 +668,12 @@ locals from sp
 #define MAX_STACK   256
 #define STACK_MASK  ( MAX_STACK - 1 )
 
-int QDECL VM_Call( vm_t *vm, int callnum, ... ) {
+intptr_t QDECL VM_Call( vm_t *vm, int callnum, ... ) {
 	vm_t    *oldVM;
-	int r;
-	//rcg010207 see dissertation at top of VM_DllSyscall() in this file.
-#if ( ( defined __linux__ ) && ( defined __powerpc__ ) ) || ( defined MACOS_X )
+	intptr_t r;
 	int i;
-	int args[16];
+	intptr_t args[16];
 	va_list ap;
-#endif
 
 	if ( !vm ) {
 		Com_Error( ERR_FATAL, "VM_Call with NULL vm" );
@@ -691,8 +689,6 @@ int QDECL VM_Call( vm_t *vm, int callnum, ... ) {
 
 	// if we have a dll loaded, call it directly
 	if ( vm->entryPoint ) {
-		//rcg010207 -  see dissertation at top of VM_DllSyscall() in this file.
-#if ( ( defined __linux__ ) && ( defined __powerpc__ ) ) || ( defined MACOS_X )
 		va_start( ap, callnum );
 		for ( i = 0; i < sizeof( args ) / sizeof( args[i] ); i++ )
 			args[i] = va_arg( ap, int );
@@ -702,18 +698,35 @@ 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 // PPC above, original id code below
-		r = vm->entryPoint( ( &callnum )[0], ( &callnum )[1], ( &callnum )[2], ( &callnum )[3],
-							( &callnum )[4], ( &callnum )[5], ( &callnum )[6], ( &callnum )[7],
-							( &callnum )[8],  ( &callnum )[9],  ( &callnum )[10],  ( &callnum )[11],  ( &callnum )[12] );
-#endif
 	} else {
+#if id386 || idsparc // i386/sparc calling convention doesn't need conversion
 #ifndef NO_VM_COMPILED
 		if ( vm->compiled ) {
 			r = VM_CallCompiled( vm, &callnum );
 		} else
 #endif
 			r = VM_CallInterpreted( vm, &callnum );
+#else
+		struct {
+			int callnum;
+			int args[16];
+		} a;
+		va_list ap;
+
+		a.callnum = callnum;
+		va_start(ap, callnum);
+		for (i = 0; i < sizeof (a.args) / sizeof (a.args[0]); i++) {
+			a.args[i] = va_arg(ap, int);
+		}
+		va_end(ap);
+#ifndef NO_VM_COMPILED
+		if ( vm->compiled )
+			r = VM_CallCompiled( vm, &a.callnum );
+		else
+#endif
+			r = VM_CallInterpreted( vm, &a.callnum );
+
+#endif
 	}
 
 	if ( oldVM != NULL ) { // bk001220 - assert(currentVM!=NULL) for oldVM==NULL
diff --git a/src/qcommon/vm_local.h b/src/qcommon/vm_local.h
index 94559d4..7ddd55b 100644
--- a/src/qcommon/vm_local.h
+++ b/src/qcommon/vm_local.h
@@ -118,7 +118,7 @@ typedef enum {
 
 
 
-typedef int vmptr_t;
+typedef intptr_t vmptr_t;
 
 typedef struct vmSymbol_s {
 	struct vmSymbol_s   *next;
@@ -134,7 +134,7 @@ struct vm_s {
 	// DO NOT MOVE OR CHANGE THESE WITHOUT CHANGING THE VM_OFFSET_* DEFINES
 	// USED BY THE ASM CODE
 	int programStack;               // the vm may be recursively entered
-	int ( *systemCall )( int *parms );
+	intptr_t ( *systemCall )( intptr_t *parms );
 
 	//------------------------------------
 
@@ -145,7 +145,7 @@ struct vm_s {
 
 	// for dynamic linked modules
 	void        *dllHandle;
-	int ( QDECL *entryPoint )( int callNum, ... );
+	intptr_t ( QDECL *entryPoint )( int callNum, ... );
 
 	// for interpreted modules
 	qboolean currentlyInterpreting;
diff --git a/src/renderer/tr_init.c b/src/renderer/tr_init.c
index 7f8601d..75df63d 100644
--- a/src/renderer/tr_init.c
+++ b/src/renderer/tr_init.c
@@ -1146,7 +1146,7 @@ void R_Init( void ) {
 
 	Swap_Init();
 
-	if ( (int)tess.xyz & 15 ) {
+	if ( (intptr_t)tess.xyz & 15 ) {
 		Com_Printf( "WARNING: tess.xyz not 16 byte aligned\n" );
 	}
 	memset( tess.constantColor255, 255, sizeof( tess.constantColor255 ) );
diff --git a/src/renderer/tr_main.c b/src/renderer/tr_main.c
index 3f52495..93e0af0 100644
--- a/src/renderer/tr_main.c
+++ b/src/renderer/tr_main.c
@@ -1368,6 +1368,61 @@ DRAWSURF SORTING
 ==========================================================================================
 */
 
+#warning FIXME
+#define Q3_LITTLE_ENDIAN
+#define ID_INLINE inline
+
+/*
+===============
+R_Radix
+===============
+*/
+static ID_INLINE void R_Radix( int byte, int size, drawSurf_t *source, drawSurf_t *dest )
+{
+  int           count[ 256 ] = { 0 };
+  int           index[ 256 ];
+  int           i;
+  unsigned char *sortKey = NULL;
+  unsigned char *end = NULL;
+
+  sortKey = ( (unsigned char *)&source[ 0 ].sort ) + byte;
+  end = sortKey + ( size * sizeof( drawSurf_t ) );
+  for( ; sortKey < end; sortKey += sizeof( drawSurf_t ) )
+    ++count[ *sortKey ];
+
+  index[ 0 ] = 0;
+
+  for( i = 1; i < 256; ++i )
+    index[ i ] = index[ i - 1 ] + count[ i - 1 ];
+
+  sortKey = ( (unsigned char *)&source[ 0 ].sort ) + byte;
+  for( i = 0; i < size; ++i, sortKey += sizeof( drawSurf_t ) )
+    dest[ index[ *sortKey ]++ ] = source[ i ];
+}
+
+/*
+===============
+R_RadixSort
+
+Radix sort with 4 byte size buckets
+===============
+*/
+static void R_RadixSort( drawSurf_t *source, int size )
+{
+  static drawSurf_t scratch[ MAX_DRAWSURFS ];
+#ifdef Q3_LITTLE_ENDIAN
+  R_Radix( 0, size, source, scratch );
+  R_Radix( 1, size, scratch, source );
+  R_Radix( 2, size, source, scratch );
+  R_Radix( 3, size, scratch, source );
+#else
+  R_Radix( 3, size, source, scratch );
+  R_Radix( 2, size, scratch, source );
+  R_Radix( 1, size, source, scratch );
+  R_Radix( 0, size, scratch, source );
+#endif //Q3_LITTLE_ENDIAN
+}
+
 /*
 =================
 qsort replacement
@@ -1627,7 +1682,7 @@ void R_SortDrawSurfs( drawSurf_t *drawSurfs, int numDrawSurfs ) {
 	}
 
 	// sort the drawsurfs by sort type, then orientation, then shader
-	qsortFast( drawSurfs, numDrawSurfs, sizeof( drawSurf_t ) );
+	R_RadixSort( drawSurfs, numDrawSurfs );
 
 	// check for any pass through drawing, which
 	// may cause another view to be rendered first
diff --git a/src/server/sv_client.c b/src/server/sv_client.c
index 9fd7dd2..5b68151 100644
--- a/src/server/sv_client.c
+++ b/src/server/sv_client.c
@@ -462,7 +462,7 @@ gotnewcl:
 	denied = (char *)VM_Call( gvm, GAME_CLIENT_CONNECT, clientNum, qtrue, qfalse ); // firstTime = qtrue
 	if ( denied ) {
 		// we can't just use VM_ArgPtr, because that is only valid inside a VM_Call
-		denied = VM_ExplicitArgPtr( gvm, (int)denied );
+		denied = VM_ExplicitArgPtr( gvm, (intptr_t)denied );
 
 		NET_OutOfBandPrint( NS_SERVER, from, "print\n[err_dialog]%s\n", denied );
 		Com_DPrintf( "Game rejected a connection: %s.\n", denied );
diff --git a/src/server/sv_game.c b/src/server/sv_game.c
index ee017f9..a92486c 100644
--- a/src/server/sv_game.c
+++ b/src/server/sv_game.c
@@ -364,20 +364,12 @@ SV_GameSystemCalls
 The module is making a system call
 ====================
 */
-//rcg010207 - see my comments in VM_DllSyscall(), in qcommon/vm.c ...
-#if ( ( defined __linux__ ) && ( defined __powerpc__ ) ) || ( defined MACOS_X )
-#define VMA( x ) ( (void *) args[x] )
-#else
-#define VMA( x ) VM_ArgPtr( args[x] )
-#endif
-
-#define VMF( x )  ( (float *)args )[x]
 
 // show_bug.cgi?id=574
 extern int S_RegisterSound( const char *name, qboolean compressed );
 extern int S_GetSoundLength( sfxHandle_t sfxHandle );
 
-int SV_GameSystemCalls( int *args ) {
+intptr_t SV_GameSystemCalls( intptr_t *args ) {
 	switch ( args[0] ) {
 	case G_PRINT:
 		Com_Printf( "%s", (char *)VMA( 1 ) );
@@ -967,7 +959,7 @@ int SV_GameSystemCalls( int *args ) {
 		return 0;
 
 	case TRAP_STRNCPY:
-		return (int)strncpy( VMA( 1 ), VMA( 2 ), args[3] );
+		return (intptr_t)strncpy( VMA( 1 ), VMA( 2 ), args[3] );
 
 	case TRAP_SIN:
 		return FloatAsInt( sin( VMF( 1 ) ) );
diff --git a/src/ui/ui_main.c b/src/ui/ui_main.c
index a1121b5..1f55c3b 100644
--- a/src/ui/ui_main.c
+++ b/src/ui/ui_main.c
@@ -269,7 +269,7 @@ qboolean _UI_IsFullscreen( void );
 #if __GNUC__ >= 4
 #pragma GCC visibility push(default)
 #endif
-int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10, int arg11  ) {
+intptr_t vmMain( intptr_t command, intptr_t arg0, intptr_t arg1, intptr_t arg2, intptr_t arg3, intptr_t arg4, intptr_t arg5, intptr_t arg6, intptr_t arg7, intptr_t arg8, intptr_t arg9, intptr_t arg10, intptr_t arg11  ) {
 #if __GNUC__ >= 4
 #pragma GCC visibility pop
 #endif
diff --git a/src/ui/ui_syscalls.c b/src/ui/ui_syscalls.c
index 8abc3bb..502a661 100644
--- a/src/ui/ui_syscalls.c
+++ b/src/ui/ui_syscalls.c
@@ -31,12 +31,12 @@ If you have questions concerning this license or the applicable additional terms
 // this file is only included when building a dll
 // syscalls.asm is included instead when building a qvm
 
-static int ( QDECL * syscall )( int arg, ... ) = ( int ( QDECL * )( int, ... ) ) - 1;
+static intptr_t ( QDECL * syscall )( intptr_t arg, ... ) = ( intptr_t ( QDECL * )( intptr_t, ... ) ) - 1;
 
 #if __GNUC__ >= 4
 #pragma GCC visibility push(default)
 #endif
-void dllEntry( int ( QDECL *syscallptr )( int arg,... ) ) {
+void dllEntry( intptr_t ( QDECL *syscallptr )( intptr_t arg,... ) ) {
 	syscall = syscallptr;
 }
 #if __GNUC__ >= 4
diff --git a/src/unix/unix_main.c b/src/unix/unix_main.c
index 1430e44..54cff42 100644
--- a/src/unix/unix_main.c
+++ b/src/unix/unix_main.c
@@ -721,10 +721,10 @@ char* Sys_GetDLLName( const char *name ) {
 }
 
 void *Sys_LoadDll( const char *name, char *fqpath,
-				   int( **entryPoint ) ( int, ... ),
-				   int ( *systemcalls )( int, ... ) ) {
+				   intptr_t( **entryPoint ) ( int, ... ),
+				   intptr_t ( *systemcalls )( intptr_t, ... ) ) {
 	void *libHandle;
-	void ( *dllEntry )( int ( *syscallptr )( int, ... ) );
+	void ( *dllEntry )( intptr_t ( *syscallptr )( intptr_t, ... ) );
 	char fname[MAX_OSPATH];
 	char  *pwdpath;
 	char  *homepath;
diff --git a/src/win32/win_main.c b/src/win32/win_main.c
index f5d77c3..08e93c9 100644
--- a/src/win32/win_main.c
+++ b/src/win32/win_main.c
@@ -617,8 +617,8 @@ void * QDECL Sys_LoadDll( const char *name, char *fqpath, int( QDECL **entryPoin
 		}
 	} else {Q_strncpyz( fqpath, fn, MAX_QPATH ) ;       // added 2/15/02 by T.Ray
 	}
-	dllEntry = ( void ( QDECL * )( int ( QDECL * )( int, ... ) ) )GetProcAddress( libHandle, "dllEntry" );
-	*entryPoint = ( int ( QDECL * )( int,... ) )GetProcAddress( libHandle, "vmMain" );
+	dllEntry = ( void ( QDECL * )( intptr_t ( QDECL * )( intptr_t, ... ) ) )GetProcAddress( libHandle, "dllEntry" );
+	*entryPoint = ( intptr_t ( QDECL * )( intptr_t,... ) )GetProcAddress( libHandle, "vmMain" );
 	if ( !*entryPoint || !dllEntry ) {
 		FreeLibrary( libHandle );
 		return NULL;
-- 
1.6.4.2

openSUSE Build Service is sponsored by