amd64 ffi fix
parent
fd86522548
commit
ff09d4c559
|
@ -8,7 +8,7 @@ GENERIC: store-insn ( offset reg-class -- )
|
||||||
|
|
||||||
GENERIC: load-insn ( elt parameter reg-class -- )
|
GENERIC: load-insn ( elt parameter reg-class -- )
|
||||||
|
|
||||||
: stack@ RCX RSP MOV RCX swap 2array ;
|
: stack@ R10 RSP MOV R10 swap 2array ;
|
||||||
|
|
||||||
M: int-regs store-insn
|
M: int-regs store-insn
|
||||||
drop stack@ RAX MOV ;
|
drop stack@ RAX MOV ;
|
||||||
|
@ -37,6 +37,12 @@ M: %parameter generate-node ( vop -- )
|
||||||
! Move a value from the C stack into the fastcall register
|
! Move a value from the C stack into the fastcall register
|
||||||
drop 0 input 1 input 2 input load-insn ;
|
drop 0 input 1 input 2 input load-insn ;
|
||||||
|
|
||||||
|
: reset-sse RAX RAX XOR ;
|
||||||
|
|
||||||
|
M: %alien-invoke generate-node
|
||||||
|
reset-sse
|
||||||
|
drop 0 input 1 input load-library compile-c-call ;
|
||||||
|
|
||||||
: load-return-value ( reg-class -- )
|
: load-return-value ( reg-class -- )
|
||||||
dup fastcall-regs first swap return-reg
|
dup fastcall-regs first swap return-reg
|
||||||
2dup eq? [ 2drop ] [ MOV ] if ;
|
2dup eq? [ 2drop ] [ MOV ] if ;
|
||||||
|
|
|
@ -23,12 +23,9 @@ M: int-regs return-reg drop RAX ;
|
||||||
|
|
||||||
M: int-regs fastcall-regs drop { RDI RSI RDX RCX R8 R9 } ;
|
M: int-regs fastcall-regs drop { RDI RSI RDX RCX R8 R9 } ;
|
||||||
|
|
||||||
: reset-sse RAX RAX XOR ;
|
|
||||||
|
|
||||||
: compile-c-call ( symbol dll -- )
|
: compile-c-call ( symbol dll -- )
|
||||||
reset-sse
|
2dup dlsym R10 swap MOV
|
||||||
2dup dlsym 1 scratch swap MOV
|
rel-absolute-cell rel-dlsym R10 CALL ;
|
||||||
rel-absolute-cell rel-dlsym 1 scratch CALL ;
|
|
||||||
|
|
||||||
: compile-c-call* ( symbol dll args -- )
|
: compile-c-call* ( symbol dll args -- )
|
||||||
T{ int-regs } fastcall-regs
|
T{ int-regs } fastcall-regs
|
||||||
|
|
Loading…
Reference in New Issue