]> gitweb.factorcode.org Git - factor.git/commitdiff
amd64 ffi fix
authorSlava Pestov <slava@factorcode.org>
Mon, 30 Jan 2006 03:51:26 +0000 (03:51 +0000)
committerSlava Pestov <slava@factorcode.org>
Mon, 30 Jan 2006 03:51:26 +0000 (03:51 +0000)
library/compiler/amd64/alien.factor
library/compiler/amd64/architecture.factor

index b8c26688aebe26148b6b3adbb56a6083a6404f2b..ebee97ede1fb4289e79470b76f26320f89f4248c 100644 (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 ;
index 7c712cdeab3f85e1c1d48d4c88a45c517c4f9318..d1a7f0ba256680b1046fa35ecd210f3f23177aa8 100644 (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