Skip to content

Commit

Permalink
Fix VM call for release version, bug introduced by myself in r1994
Browse files Browse the repository at this point in the history
  • Loading branch information
Thilo Schulz committed May 18, 2011
1 parent 61d6e6e commit a42239e
Showing 1 changed file with 18 additions and 25 deletions.
43 changes: 18 additions & 25 deletions code/qcommon/vm_x86.c
Expand Up @@ -1491,6 +1491,7 @@ This function is called directly by the generated code
*/
int VM_CallCompiled( vm_t *vm, int *args ) {
int stack[1024];
void *entryPoint;
int programCounter;
int programStack;
int stackOnEntry;
Expand Down Expand Up @@ -1527,36 +1528,28 @@ int VM_CallCompiled( vm_t *vm, int *args ) {
*(int *)&image[ programStack ] = -1; // will terminate the loop on return

// off we go into generated code...
entryPoint = vm->codeBase + vm->entryOfs;
opStack = &stack;

{
#ifdef _MSC_VER
void *entryPoint = vm->codeBase + vm->entryOfs;

__asm {
pushad
mov esi, programStack
mov edi, opStack
call entryPoint
mov programStack, esi
mov opStack, edi
popad
}
__asm
{
pushad
mov esi, programStack
mov edi, opStack
call entryPoint
mov programStack, esi
mov opStack, edi
popad
}
#else
__asm__ volatile(
"pushal\r\n"
"movl %0, %%esi\r\n"
"movl %1, %%edi\r\n"
"call *%2\r\n"
"movl %%edi, %1\r\n"
"movl %%esi, %0\r\n"
"popal\r\n"
: "+g" (programStack), "+g" (opStack)
: "g" (vm->codeBase + vm->entryOfs)
: "cc", "memory"
);
__asm__ volatile(
"call *%2\r\n"
: "+S" (programStack), "+D" (opStack)
: "r" (vm->codeBase + vm->entryOfs)
: "cc", "memory", "%eax", "%ebx", "%ecx", "%edx"
);
#endif
}

if ( opStack != &stack[1] ) {
Com_Error( ERR_DROP, "opStack corrupted in compiled code" );
Expand Down

0 comments on commit a42239e

Please sign in to comment.