]> gitweb.factorcode.org Git - factor.git/commitdiff
Fix PICs for x86-64
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Thu, 30 Apr 2009 23:00:49 +0000 (18:00 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Thu, 30 Apr 2009 23:00:49 +0000 (18:00 -0500)
basis/bootstrap/image/image.factor
basis/cpu/x86/bootstrap.factor
vm/cpu-x86.64.S
vm/cpu-x86.h

index dde945e9afc5295587923c3c2484e1bb05e51a26..fe1677a7a0410b6d83c0895d80e1774c8c5e0df8 100644 (file)
@@ -98,7 +98,7 @@ SYMBOL: jit-define-rt
 SYMBOL: jit-define-offset
 
 : compute-offset ( -- offset )
-    building get length jit-define-rc get rc-absolute-cell = cell 4 ? - ;
+    building get length jit-define-rc get rc-absolute-cell = bootstrap-cell 4 ? - ;
 
 : jit-rel ( rc rt -- )
     jit-define-rt set
index fe5b85057dfa42be8f4fa39fb47e119f493fb805..337c3ae57597fe39877943f0fbdf339769e63dd7 100644 (file)
@@ -241,6 +241,7 @@ big-endian off
     temp0 0 MOV rc-absolute-cell rt-immediate jit-rel
     ! key = class
     temp2 temp1 MOV
+    bootstrap-cell 8 = [ temp2 1 SHL ] when
     ! key &= cache.length - 1
     temp2 mega-cache-size get 1- bootstrap-cell * AND
     ! cache += array-start-offset
index 26cb753d5904962001f4c8229717a95b2e4a1c66..a110bf1d51277fc09a9c180a58b4edf7d2ee2542 100644 (file)
@@ -78,6 +78,6 @@ DEF(F_FASTCALL void,primitive_inline_cache_miss,(void)):
        sub $STACK_PADDING,%rsp
        call MANGLE(inline_cache_miss)
        add $STACK_PADDING,%rsp
-       jmp *WORD_XT_OFFSET(%rax)
+       jmp *%rax
 
 #include "cpu-x86.S"
index ab0989370771b1f13972420d1e32397c293c09ad..0888ec57fddc24d9962f80d8148a4826a36f4b8c 100755 (executable)
@@ -25,11 +25,11 @@ INLINE void check_call_site(CELL return_address)
 INLINE CELL get_call_target(CELL return_address)
 {
        check_call_site(return_address);
-       return *(F_FIXNUM *)(return_address - 4) + return_address;
+       return *(int *)(return_address - 4) + return_address;
 }
 
 INLINE void set_call_target(CELL return_address, CELL target)
 {
        check_call_site(return_address);
-       *(F_FIXNUM *)(return_address - 4) = (target - return_address);
+       *(int *)(return_address - 4) = (target - return_address);
 }