]> gitweb.factorcode.org Git - factor.git/commitdiff
vm ptr passed to lazy_jit_compile on x86.64
authorPhil Dawes <phil@phildawes.net>
Tue, 25 Aug 2009 06:30:16 +0000 (07:30 +0100)
committerPhil Dawes <phil@phildawes.net>
Wed, 16 Sep 2009 07:20:10 +0000 (08:20 +0100)
basis/cpu/x86/64/64.factor
vm/cpu-x86.32.S
vm/cpu-x86.64.S
vm/cpu-x86.S

index 8c713eac8b8f3dd63000cb48fe15cd3d7ac6530e..46b1e9866f1929af5b98dabef441d9bc0d792fea 100644 (file)
@@ -172,9 +172,13 @@ M: x86.64 %alien-invoke
     rc-absolute-cell rel-dlsym
     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 ( -- )
     "unbox_alien" f %alien-invoke
index 9d2bf082d13524359e7b00525c3ba95ef34afac0..326ddb6eb83973a149d3c6f5650218f72212f2c1 100644 (file)
@@ -80,7 +80,7 @@ DEF(void,set_x87_env,(const void*)):
        ret
 
 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 */
        sub $2,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
        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"
 
index 98addeb80d6fef219bb733de2c3c8a4a2008915d..4d5c70616f325a84a98ace40b032480f553ab721 100644 (file)
@@ -115,6 +115,17 @@ DEF(F_FASTCALL void,throw_impl,(CELL quot, F_STACK_FRAME *rewind_to, void *vm)):
        fldcw (STACK_REG)
        /* rewind_to */
        mov ARG1,STACK_REG
+       mov ARG2,ARG1  /* make vm ptr 2nd arg in case quot_xt = lazy_jit_compile */
        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"
index 03f08fdabcf630d32cf090ae96c977876cea272a..2599ba3f97d0ba047de36fdd1223c96b14bf69c2 100644 (file)
@@ -56,17 +56,6 @@ DEF(F_FASTCALL void,c_to_factor,(CELL quot, void *vm)):
        POP_NONVOLATILE
        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 */
 DEF(bool,sse_version,(void)):
        mov $0x1,RETURN_REG
@@ -103,6 +92,7 @@ sse_2:
 sse_1:
        mov $10,RETURN_REG
        ret
+
 #ifdef WINDOWS
        .section .drectve
        .ascii " -export:sse_version"