amd64 ffi fix

cvs
Slava Pestov 2006-01-30 03:51:26 +00:00
parent fd86522548
commit ff09d4c559
2 changed files with 9 additions and 6 deletions

View File

@ -8,7 +8,7 @@ GENERIC: store-insn ( offset 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
drop stack@ RAX MOV ;
@ -37,6 +37,12 @@ M: %parameter generate-node ( vop -- )
! Move a value from the C stack into the fastcall register
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 -- )
dup fastcall-regs first swap return-reg
2dup eq? [ 2drop ] [ MOV ] if ;

View File

@ -23,12 +23,9 @@ M: int-regs return-reg drop RAX ;
M: int-regs fastcall-regs drop { RDI RSI RDX RCX R8 R9 } ;
: reset-sse RAX RAX XOR ;
: compile-c-call ( symbol dll -- )
reset-sse
2dup dlsym 1 scratch swap MOV
rel-absolute-cell rel-dlsym 1 scratch CALL ;
2dup dlsym R10 swap MOV
rel-absolute-cell rel-dlsym R10 CALL ;
: compile-c-call* ( symbol dll args -- )
T{ int-regs } fastcall-regs