aboutsummaryrefslogtreecommitdiffstats
path: root/code/qcommon/vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'code/qcommon/vm.c')
-rwxr-xr-xcode/qcommon/vm.c33
1 files changed, 28 insertions, 5 deletions
diff --git a/code/qcommon/vm.c b/code/qcommon/vm.c
index a6b1e3c..b509700 100755
--- a/code/qcommon/vm.c
+++ b/code/qcommon/vm.c
@@ -48,11 +48,14 @@ void VM_VmInfo_f( void );
void VM_VmProfile_f( void );
+
+#if 0 // 64bit!
// converts a VM pointer to a C pointer and
// checks to make sure that the range is acceptable
void *VM_VM2C( vmptr_t p, int length ) {
return (void *)p;
}
+#endif
void VM_Debug( int level ) {
vm_debugLevel = level;
@@ -151,6 +154,7 @@ int VM_SymbolToValue( vm_t *vm, const char *symbol ) {
VM_SymbolForCompiledPointer
=====================
*/
+#if 0 // 64bit!
const char *VM_SymbolForCompiledPointer( vm_t *vm, void *code ) {
int i;
@@ -172,6 +176,7 @@ const char *VM_SymbolForCompiledPointer( vm_t *vm, void *code ) {
// now look up the bytecode instruction pointer
return VM_ValueToSymbol( vm, i );
}
+#endif
@@ -445,6 +450,11 @@ vm_t *VM_Create( const char *module, int (*systemCalls)(int *),
Com_Error( ERR_FATAL, "VM_Create: bad parms" );
}
+#if !defined(__i386__) && !defined(__ppc__)
+ if(interpret >= VMI_COMPILED)
+ interpret = VMI_BYTECODE;
+#endif
+
remaining = Hunk_MemoryRemaining();
// see if we already have the VM
@@ -669,9 +679,6 @@ int QDECL VM_Call( vm_t *vm, int callnum, ... ) {
vm_t *oldVM;
int r;
int i;
- int args[16];
- va_list ap;
-
if ( !vm ) {
Com_Error( ERR_FATAL, "VM_Call with NULL vm" );
@@ -688,6 +695,8 @@ 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.
+ int args[16];
+ va_list ap;
va_start(ap, callnum);
for (i = 0; i < sizeof (args) / sizeof (args[i]); i++) {
args[i] = va_arg(ap, int);
@@ -698,10 +707,24 @@ 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]);
+#if defined(__ppc__) || defined(__i386__)
} else if ( vm->compiled ) {
r = VM_CallCompiled( vm, &callnum );
+#endif
} else {
- r = VM_CallInterpreted( vm, &callnum );
+ 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);
+ r = VM_CallInterpreted( vm, &a.callnum );
}
if ( oldVM != NULL ) // bk001220 - assert(currentVM!=NULL) for oldVM==NULL
@@ -820,7 +843,7 @@ void VM_LogSyscalls( int *args ) {
f = fopen("syscalls.log", "w" );
}
callnum++;
- fprintf(f, "%i: %i (%i) = %i %i %i %i\n", callnum, args - (int *)currentVM->dataBase,
+ fprintf(f, "%i: %li (%i) = %i %i %i %i\n", callnum, args - (int *)currentVM->dataBase,
args[0], args[1], args[2], args[3], args[4] );
}