]> gitweb.factorcode.org Git - factor.git/commitdiff
Merge branch 'fix_stack_alignment' of git://github.com/phildawes/factor
authorSlava Pestov <slava@shill.local>
Fri, 25 Sep 2009 00:54:51 +0000 (19:54 -0500)
committerSlava Pestov <slava@shill.local>
Fri, 25 Sep 2009 00:54:51 +0000 (19:54 -0500)
basis/cpu/x86/32/32.factor
basis/cpu/x86/64/64.factor
basis/cpu/x86/x86.factor
vm/cpu-x86.32.S
vm/cpu-x86.S
vm/data_gc.cpp
vm/data_gc.hpp
vm/quotations.cpp
vm/quotations.hpp

index 7a7d1befd92ff42fe6116a6775622e1770e13445..34d508fcf2677635e3451941ee0a5d044a94acdf 100755 (executable)
@@ -40,6 +40,7 @@ M:: x86.32 %dispatch ( src temp -- )
 ! Registers for fastcall
 M: x86.32 param-reg-1 EAX ;
 M: x86.32 param-reg-2 EDX ;
+M: x86.32 param-reg-3 ECX ;
 
 M: x86.32 pic-tail-reg EBX ;
 
index c33368fc91cb38d4ab7838f61af0bebb0843ade2..8363f7a18b1e2a2e028d9bafd66b39f487199004 100644 (file)
@@ -38,7 +38,7 @@ M:: x86.64 %dispatch ( src temp -- )
 
 M: x86.64 param-reg-1 int-regs param-regs first ;
 M: x86.64 param-reg-2 int-regs param-regs second ;
-: param-reg-3 ( -- reg ) int-regs param-regs third ; inline
+M: x86.64 param-reg-3 int-regs param-regs third ;
 
 M: x86.64 pic-tail-reg RBX ;
 
index 8585dfa697cea2d67c4447800838fb2f5faea915..25dca527f600732b756b2bcbade9dd8b58ba7bf7 100644 (file)
@@ -55,6 +55,7 @@ HOOK: temp-reg cpu ( -- reg )
 ! Fastcall calling convention
 HOOK: param-reg-1 cpu ( -- reg )
 HOOK: param-reg-2 cpu ( -- reg )
+HOOK: param-reg-3 cpu ( -- reg )
 
 HOOK: pic-tail-reg cpu ( -- reg )
 
@@ -832,8 +833,10 @@ M:: x86 %call-gc ( gc-root-count -- )
     param-reg-1 gc-root-base param@ LEA
     ! Pass number of roots as second parameter
     param-reg-2 gc-root-count MOV
+    ! Pass vm as third argument
+    param-reg-3 0 MOV rc-absolute-cell rt-vm rel-fixup
     ! Call GC
-    "inline_gc" %vm-invoke-3rd-arg ; 
+    "inline_gc" f %alien-invoke ; 
 
 M: x86 %alien-global ( dst symbol library -- )
     [ 0 MOV ] 2dip rc-absolute-cell rel-dlsym ;    
index 3a5907cc78cafe6b8c80ce436459a603f089cc7b..3eeb7980933ee2b809770a1c175b0e780ed0edbc 100644 (file)
@@ -94,12 +94,10 @@ DEF(F_FASTCALL void,throw_impl,(CELL quot, F_STACK_FRAME *rewind_to, void *vm)):
        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 ARG1,ARG2
        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 */
index 93c1da6430482b6df2ce2c634d8eee3352ec98b6..e9116f8f65530de5f403a3d4beeb992261b9cc8f 100644 (file)
@@ -48,9 +48,7 @@ DEF(F_FASTCALL void,c_to_factor,(CELL quot, void *vm)):
        
        /* Save stack pointer */
        lea -CELL_SIZE(STACK_REG),ARG0
-       push ARG1  /* save vm ptr */
        call MANGLE(save_callstack_bottom)
-       pop ARG1
        
        /* Call quot-xt */
        mov NV_TEMP_REG,ARG0
index 8766cc8c7c60a744d0ad69c8efc3763c55350eaf..590000611a5907cb76d5ec16d805a7544bd4dd4d 100755 (executable)
@@ -681,7 +681,7 @@ void factor_vm::inline_gc(cell *gc_roots_base, cell gc_roots_size)
                gc_locals.pop_back();
 }
 
-VM_ASM_API void inline_gc(cell *gc_roots_base, cell gc_roots_size, factor_vm *myvm)
+VM_ASM_API_OVERFLOW void inline_gc(cell *gc_roots_base, cell gc_roots_size, factor_vm *myvm)
 {
        ASSERTVM();
        VM_PTR->inline_gc(gc_roots_base,gc_roots_size);
index 411c4d19fe2383a82319b756a4fe3114b9c4267f..4ef89c23272f8e4bcd6f0ba338ea481b88c52352 100755 (executable)
@@ -20,6 +20,6 @@ PRIMITIVE(gc_stats);
 PRIMITIVE(clear_gc_stats);
 PRIMITIVE(become);
 struct factor_vm;
-VM_ASM_API void inline_gc(cell *gc_roots_base, cell gc_roots_size, factor_vm *myvm);
+VM_ASM_API_OVERFLOW void inline_gc(cell *gc_roots_base, cell gc_roots_size, factor_vm *myvm);
 
 }
index 1bc6240481bbe16db90f2e129558b59b57a82fa8..e5a2a53f86ef1a0e33d517ee543d9ae4afe339ee 100755 (executable)
@@ -368,7 +368,7 @@ cell factor_vm::lazy_jit_compile_impl(cell quot_, stack_frame *stack)
        return quot.value();
 }
 
-VM_ASM_API cell lazy_jit_compile_impl(cell quot_, stack_frame *stack, factor_vm *myvm)
+VM_ASM_API_OVERFLOW cell lazy_jit_compile_impl(cell quot_, stack_frame *stack, factor_vm *myvm)
 {
        ASSERTVM();
        return VM_PTR->lazy_jit_compile_impl(quot_,stack);
index b21884a35bfc8c4601f6c538e20421fd6bf09537..43beb0511276b025927a664e3862b4efbe47511d 100755 (executable)
@@ -27,7 +27,7 @@ PRIMITIVE(jit_compile);
 PRIMITIVE(array_to_quotation);
 PRIMITIVE(quotation_xt);
 
-VM_ASM_API cell lazy_jit_compile_impl(cell quot, stack_frame *stack, factor_vm *myvm);
+VM_ASM_API_OVERFLOW cell lazy_jit_compile_impl(cell quot, stack_frame *stack, factor_vm *myvm);
 
 PRIMITIVE(quot_compiled_p);