vm: fix register clobberage in x86 c_to_factor

db4
Slava Pestov 2009-10-02 09:12:09 -05:00
parent df9b0f695f
commit 512bf8befa
3 changed files with 10 additions and 6 deletions

View File

@ -7,7 +7,8 @@
#define DS_REG %esi
#define RETURN_REG %eax
#define NV_TEMP_REG %ebx
#define NV0 %ebx
#define NV1 %ebp
#define ARITH_TEMP_1 %ebp
#define ARITH_TEMP_2 %ebx
@ -82,7 +83,7 @@ DEF(void,set_x87_env,(const void*)):
ret
DEF(F_FASTCALL void,throw_impl,(CELL quot, F_STACK_FRAME *rewind_to, void *vm)):
mov ARG2,NV_TEMP_REG /* remember vm ptr in case quot_xt = lazy_jit_compile */
mov ARG2,NV0 /* remember vm ptr in case quot_xt = lazy_jit_compile */
/* clear x87 stack, but preserve rounding mode and exception flags */
sub $2,STACK_REG
fnstcw (STACK_REG)
@ -90,7 +91,7 @@ DEF(F_FASTCALL void,throw_impl,(CELL quot, F_STACK_FRAME *rewind_to, void *vm)):
fldcw (STACK_REG)
/* rewind_to */
mov ARG1,STACK_REG
mov NV_TEMP_REG,ARG1
mov NV0,ARG1
jmp *QUOT_XT_OFFSET(ARG0)
DEF(F_FASTCALL void,lazy_jit_compile,(CELL quot, void *vm)):

View File

@ -7,7 +7,8 @@
#define CELL_SIZE 8
#define STACK_PADDING 56
#define NV_TEMP_REG %rbp
#define NV0 %rbp
#define NV1 %r12
#define ARITH_TEMP_1 %r8
#define ARITH_TEMP_2 %r9

View File

@ -41,7 +41,8 @@ multiply_overflow:
DEF(F_FASTCALL void,c_to_factor,(CELL quot, void *vm)):
PUSH_NONVOLATILE
mov ARG0,NV_TEMP_REG
mov ARG0,NV0
mov ARG1,NV1
/* Create register shadow area for Win64 */
sub $32,STACK_REG
@ -51,7 +52,8 @@ DEF(F_FASTCALL void,c_to_factor,(CELL quot, void *vm)):
call MANGLE(save_callstack_bottom)
/* Call quot-xt */
mov NV_TEMP_REG,ARG0
mov NV0,ARG0
mov NV1,ARG1
call *QUOT_XT_OFFSET(ARG0)
/* Tear down register shadow area */