summaryrefslogtreecommitdiffstats
path: root/games/ioquake3/files/patch-code-qcommon-vm_interpreted.c
blob: 77e7b9829d23a085507a4b1dafe53f6660ddc27f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
--- code/qcommon/vm_interpreted.c.orig	2008-08-23 22:45:30 UTC
+++ code/qcommon/vm_interpreted.c
@@ -526,18 +526,20 @@ nextInstruction2:
 
 //VM_LogSyscalls( (int *)&image[ programStack + 4 ] );
 				{
-					intptr_t* argptr = (intptr_t *)&image[ programStack + 4 ];
-				#if __WORDSIZE == 64
-				// the vm has ints on the stack, we expect
-				// longs so we have to convert it
-					intptr_t argarr[16];
-					int i;
-					for (i = 0; i < 16; ++i) {
-						argarr[i] = *(int*)&image[ programStack + 4 + 4*i ];
+					// the vm has ints on the stack, we expect
+					// pointers so we might have to convert it
+					if (sizeof(intptr_t) != sizeof(int)) {
+						intptr_t argarr[16];
+						int *imagePtr = (int *)&image[programStack];
+						int i;
+						for (i = 0; i < 16; ++i) {
+							argarr[i] = *(++imagePtr);
+						}
+						r = vm->systemCall( argarr );
+					} else {
+						intptr_t* argptr = (intptr_t *)&image[ programStack + 4 ];
+						r = vm->systemCall( argptr );
 					}
-					argptr = argarr;
-				#endif
-					r = vm->systemCall( argptr );
 				}
 
 #ifdef DEBUG_VM
OpenPOWER on IntegriCloud