vm ptr passed to lazy_jit_compile on x86.64
parent
90119f3dd7
commit
d7e2f770c0
|
@ -172,9 +172,13 @@ M: x86.64 %alien-invoke
|
||||||
rc-absolute-cell rel-dlsym
|
rc-absolute-cell rel-dlsym
|
||||||
R11 CALL ;
|
R11 CALL ;
|
||||||
|
|
||||||
M: x86.64 %vm-invoke-1st-arg ( function -- ) f %alien-invoke ;
|
M: x86.64 %vm-invoke-1st-arg ( function -- )
|
||||||
|
param-reg-1 0 MOV rc-absolute-cell rt-vm rel-fixup
|
||||||
|
f %alien-invoke ;
|
||||||
|
|
||||||
M: x86.64 %vm-invoke-3rd-arg ( function -- ) f %alien-invoke ;
|
M: x86.64 %vm-invoke-3rd-arg ( function -- )
|
||||||
|
param-reg-3 0 MOV rc-absolute-cell rt-vm rel-fixup
|
||||||
|
f %alien-invoke ;
|
||||||
|
|
||||||
M: x86.64 %prepare-alien-indirect ( -- )
|
M: x86.64 %prepare-alien-indirect ( -- )
|
||||||
"unbox_alien" f %alien-invoke
|
"unbox_alien" f %alien-invoke
|
||||||
|
|
|
@ -80,7 +80,7 @@ DEF(void,set_x87_env,(const void*)):
|
||||||
ret
|
ret
|
||||||
|
|
||||||
DEF(F_FASTCALL void,throw_impl,(CELL quot, F_STACK_FRAME *rewind_to, void *vm)):
|
DEF(F_FASTCALL void,throw_impl,(CELL quot, F_STACK_FRAME *rewind_to, void *vm)):
|
||||||
mov CELL_SIZE(STACK_REG),NV_TEMP_REG /* stash vm ptr */
|
mov CELL_SIZE(STACK_REG),NV_TEMP_REG /* get vm ptr in case quot_xt = lazy_jit_compile */
|
||||||
/* clear x87 stack, but preserve rounding mode and exception flags */
|
/* clear x87 stack, but preserve rounding mode and exception flags */
|
||||||
sub $2,STACK_REG
|
sub $2,STACK_REG
|
||||||
fnstcw (STACK_REG)
|
fnstcw (STACK_REG)
|
||||||
|
@ -91,6 +91,18 @@ DEF(F_FASTCALL void,throw_impl,(CELL quot, F_STACK_FRAME *rewind_to, void *vm)):
|
||||||
mov NV_TEMP_REG,ARG1
|
mov NV_TEMP_REG,ARG1
|
||||||
jmp *QUOT_XT_OFFSET(ARG0)
|
jmp *QUOT_XT_OFFSET(ARG0)
|
||||||
|
|
||||||
|
|
||||||
|
DEF(F_FASTCALL void,lazy_jit_compile,(CELL quot, void *vm)):
|
||||||
|
mov ARG1,NV_TEMP_REG /* stash vm ptr */
|
||||||
|
mov STACK_REG,ARG1 /* Save stack pointer */
|
||||||
|
sub $STACK_PADDING,STACK_REG
|
||||||
|
push NV_TEMP_REG /* push vm ptr as arg3 */
|
||||||
|
call MANGLE(lazy_jit_compile_impl)
|
||||||
|
pop NV_TEMP_REG
|
||||||
|
mov RETURN_REG,ARG0 /* No-op on 32-bit */
|
||||||
|
add $STACK_PADDING,STACK_REG
|
||||||
|
jmp *QUOT_XT_OFFSET(ARG0) /* Call the quotation */
|
||||||
|
|
||||||
|
|
||||||
#include "cpu-x86.S"
|
#include "cpu-x86.S"
|
||||||
|
|
||||||
|
|
|
@ -115,6 +115,17 @@ DEF(F_FASTCALL void,throw_impl,(CELL quot, F_STACK_FRAME *rewind_to, void *vm)):
|
||||||
fldcw (STACK_REG)
|
fldcw (STACK_REG)
|
||||||
/* rewind_to */
|
/* rewind_to */
|
||||||
mov ARG1,STACK_REG
|
mov ARG1,STACK_REG
|
||||||
|
mov ARG2,ARG1 /* make vm ptr 2nd arg in case quot_xt = lazy_jit_compile */
|
||||||
jmp *QUOT_XT_OFFSET(ARG0)
|
jmp *QUOT_XT_OFFSET(ARG0)
|
||||||
|
|
||||||
|
DEF(F_FASTCALL void,lazy_jit_compile,(CELL quot, void *vm)):
|
||||||
|
mov ARG1,ARG2 /* vm is 3rd arg */
|
||||||
|
mov STACK_REG,ARG1 /* Save stack pointer */
|
||||||
|
sub $STACK_PADDING,STACK_REG
|
||||||
|
call MANGLE(lazy_jit_compile_impl)
|
||||||
|
mov RETURN_REG,ARG0 /* No-op on 32-bit */
|
||||||
|
add $STACK_PADDING,STACK_REG
|
||||||
|
jmp *QUOT_XT_OFFSET(ARG0) /* Call the quotation */
|
||||||
|
|
||||||
|
|
||||||
#include "cpu-x86.S"
|
#include "cpu-x86.S"
|
||||||
|
|
12
vm/cpu-x86.S
12
vm/cpu-x86.S
|
@ -56,17 +56,6 @@ DEF(F_FASTCALL void,c_to_factor,(CELL quot, void *vm)):
|
||||||
POP_NONVOLATILE
|
POP_NONVOLATILE
|
||||||
ret
|
ret
|
||||||
|
|
||||||
DEF(F_FASTCALL void,lazy_jit_compile,(CELL quot, void *vm)):
|
|
||||||
mov ARG1,NV_TEMP_REG /* stash vm ptr */
|
|
||||||
mov STACK_REG,ARG1 /* Save stack pointer */
|
|
||||||
sub $STACK_PADDING,STACK_REG
|
|
||||||
push NV_TEMP_REG /* push vm ptr as arg3 */
|
|
||||||
call MANGLE(lazy_jit_compile_impl)
|
|
||||||
pop NV_TEMP_REG
|
|
||||||
mov RETURN_REG,ARG0 /* No-op on 32-bit */
|
|
||||||
add $STACK_PADDING,STACK_REG
|
|
||||||
jmp *QUOT_XT_OFFSET(ARG0) /* Call the quotation */
|
|
||||||
|
|
||||||
/* cpu.x86.features calls this */
|
/* cpu.x86.features calls this */
|
||||||
DEF(bool,sse_version,(void)):
|
DEF(bool,sse_version,(void)):
|
||||||
mov $0x1,RETURN_REG
|
mov $0x1,RETURN_REG
|
||||||
|
@ -103,6 +92,7 @@ sse_2:
|
||||||
sse_1:
|
sse_1:
|
||||||
mov $10,RETURN_REG
|
mov $10,RETURN_REG
|
||||||
ret
|
ret
|
||||||
|
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
.section .drectve
|
.section .drectve
|
||||||
.ascii " -export:sse_version"
|
.ascii " -export:sse_version"
|
||||||
|
|
Loading…
Reference in New Issue