bootstrap.x86: new words jit-call-Xarg for calling vm functions with
arguments, simplifies some assembly codedb4
parent
6ca83e7588
commit
528e9f61f3
|
@ -37,6 +37,21 @@ IN: bootstrap.x86
|
|||
: jit-call ( name -- )
|
||||
0 CALL f rc-relative rel-dlsym ;
|
||||
|
||||
:: jit-call-1arg ( arg1s name -- )
|
||||
ESP [] arg1s MOV
|
||||
name jit-call ;
|
||||
|
||||
:: jit-call-2arg ( arg1s arg2s name -- )
|
||||
ESP [] arg1s MOV
|
||||
ESP 4 [+] arg2s MOV
|
||||
name jit-call ;
|
||||
|
||||
:: jit-call-3arg ( arg1s arg2s arg3s name -- )
|
||||
ESP [] arg1s MOV
|
||||
ESP 4 [+] arg2s MOV
|
||||
ESP 8 [+] arg3s MOV
|
||||
name jit-call ;
|
||||
|
||||
[
|
||||
pic-tail-reg 0 MOV 0 rc-absolute-cell rel-here
|
||||
0 JMP f rc-relative rel-word-pic-tail
|
||||
|
@ -79,16 +94,13 @@ IN: bootstrap.x86
|
|||
|
||||
[
|
||||
jit-load-vm
|
||||
ESP [] vm-reg MOV
|
||||
EAX EBP 8 [+] MOV
|
||||
ESP 4 [+] EAX MOV
|
||||
"begin_callback" jit-call
|
||||
vm-reg EAX "begin_callback" jit-call-2arg
|
||||
|
||||
jit-call-quot
|
||||
|
||||
jit-load-vm
|
||||
ESP [] vm-reg MOV
|
||||
"end_callback" jit-call
|
||||
vm-reg "end_callback" jit-call-1arg
|
||||
] \ c-to-factor define-sub-primitive
|
||||
|
||||
: signal-handler-save-regs ( -- regs )
|
||||
|
@ -169,12 +181,8 @@ IN: bootstrap.x86
|
|||
jit-load-vm
|
||||
jit-save-context
|
||||
|
||||
! Store arguments
|
||||
ESP [] EAX MOV
|
||||
ESP 4 [+] vm-reg MOV
|
||||
|
||||
! Call VM
|
||||
"lazy_jit_compile" jit-call
|
||||
! Call VM, quotation reference is in EAX
|
||||
EAX vm-reg "lazy_jit_compile" jit-call-2arg
|
||||
]
|
||||
[ jit-call-quot ]
|
||||
[ jit-jump-quot ]
|
||||
|
@ -245,11 +253,9 @@ IN: bootstrap.x86
|
|||
[ JNO ]
|
||||
[
|
||||
EBX tag-bits get SAR
|
||||
ESP [] EBX MOV
|
||||
ESP 4 [+] EBP MOV
|
||||
jit-load-vm
|
||||
ESP 8 [+] vm-reg MOV
|
||||
"overflow_fixnum_multiply" jit-call
|
||||
|
||||
EBX EBP vm-reg "overflow_fixnum_multiply" jit-call-3arg
|
||||
]
|
||||
jit-conditional
|
||||
] \ fixnum* define-sub-primitive
|
||||
|
@ -312,8 +318,7 @@ IN: bootstrap.x86
|
|||
! Create the new context in return-reg
|
||||
jit-load-vm
|
||||
jit-save-context
|
||||
ESP [] vm-reg MOV
|
||||
"new_context" jit-call
|
||||
vm-reg "new_context" jit-call-1arg
|
||||
|
||||
jit-save-quot-and-param
|
||||
|
||||
|
@ -339,9 +344,7 @@ IN: bootstrap.x86
|
|||
: jit-delete-current-context ( -- )
|
||||
jit-load-vm
|
||||
jit-load-context
|
||||
ESP [] vm-reg MOV
|
||||
ESP 4 [+] ctx-reg MOV
|
||||
"delete_context" jit-call ;
|
||||
vm-reg ctx-reg "delete_context" jit-call-2arg ;
|
||||
|
||||
[
|
||||
jit-delete-current-context
|
||||
|
@ -351,9 +354,7 @@ IN: bootstrap.x86
|
|||
: jit-start-context-and-delete ( -- )
|
||||
jit-load-vm
|
||||
jit-load-context
|
||||
ESP [] vm-reg MOV
|
||||
ESP 4 [+] ctx-reg MOV
|
||||
"reset_context" jit-call
|
||||
vm-reg ctx-reg "reset_context" jit-call-2arg
|
||||
|
||||
jit-save-quot-and-param
|
||||
ctx-reg jit-switch-context
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
! Copyright (C) 2007, 2011 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: bootstrap.image.private kernel kernel.private namespaces
|
||||
system layouts vocabs parser compiler.constants
|
||||
USING: bootstrap.image.private kernel kernel.private layouts locals namespaces
|
||||
vocabs parser compiler.constants
|
||||
compiler.codegen.relocation math math.private cpu.x86.assembler
|
||||
cpu.x86.assembler.operands sequences generic.single.private
|
||||
threads.private locals ;
|
||||
threads.private ;
|
||||
IN: bootstrap.x86
|
||||
|
||||
8 \ cell set
|
||||
|
@ -33,6 +33,15 @@ IN: bootstrap.x86
|
|||
RAX 0 MOV f rc-absolute-cell rel-dlsym
|
||||
RAX CALL ;
|
||||
|
||||
:: jit-call-1arg ( arg1s name -- )
|
||||
arg1 arg1s MOV
|
||||
name jit-call ;
|
||||
|
||||
:: jit-call-2arg ( arg1s arg2s name -- )
|
||||
arg1 arg1s MOV
|
||||
arg2 arg2s MOV
|
||||
name jit-call ;
|
||||
|
||||
[
|
||||
pic-tail-reg 5 [RIP+] LEA
|
||||
0 JMP f rc-relative rel-word-pic-tail
|
||||
|
@ -74,15 +83,13 @@ IN: bootstrap.x86
|
|||
|
||||
[
|
||||
arg2 arg1 MOV
|
||||
arg1 vm-reg MOV
|
||||
"begin_callback" jit-call
|
||||
vm-reg "begin_callback" jit-call-1arg
|
||||
|
||||
! call the quotation
|
||||
arg1 return-reg MOV
|
||||
jit-call-quot
|
||||
|
||||
arg1 vm-reg MOV
|
||||
"end_callback" jit-call
|
||||
vm-reg "end_callback" jit-call-1arg
|
||||
] \ c-to-factor define-sub-primitive
|
||||
|
||||
: signal-handler-save-regs ( -- regs )
|
||||
|
@ -280,8 +287,7 @@ IN: bootstrap.x86
|
|||
! twice, first before calling new_context() which may GC,
|
||||
! and again after popping the two parameters from the stack.
|
||||
jit-save-context
|
||||
arg1 vm-reg MOV
|
||||
"new_context" jit-call
|
||||
vm-reg "new_context" jit-call-1arg
|
||||
|
||||
jit-pop-quot-and-param
|
||||
jit-save-context
|
||||
|
@ -293,9 +299,7 @@ IN: bootstrap.x86
|
|||
|
||||
: jit-delete-current-context ( -- )
|
||||
jit-load-context
|
||||
arg1 vm-reg MOV
|
||||
arg2 ctx-reg MOV
|
||||
"delete_context" jit-call ;
|
||||
vm-reg ctx-reg "delete_context" jit-call-2arg ;
|
||||
|
||||
[
|
||||
jit-delete-current-context
|
||||
|
@ -304,9 +308,7 @@ IN: bootstrap.x86
|
|||
|
||||
: jit-start-context-and-delete ( -- )
|
||||
jit-load-context
|
||||
arg1 vm-reg MOV
|
||||
arg2 ctx-reg MOV
|
||||
"reset_context" jit-call
|
||||
vm-reg ctx-reg "reset_context" jit-call-2arg
|
||||
|
||||
jit-pop-quot-and-param
|
||||
ctx-reg jit-switch-context
|
||||
|
|
Loading…
Reference in New Issue