]> gitweb.factorcode.org Git - factor.git/commitdiff
Completing slot and set-slot changes on x86
authorDaniel Ehrenberg <littledan@pool-224-36.res.carleton.edu>
Sat, 26 Sep 2009 06:39:48 +0000 (01:39 -0500)
committerDaniel Ehrenberg <littledan@pool-224-36.res.carleton.edu>
Sat, 26 Sep 2009 06:39:48 +0000 (01:39 -0500)
basis/compiler/cfg/hats/hats.factor
basis/compiler/cfg/intrinsics/misc/misc.factor
basis/compiler/cfg/intrinsics/slots/slots.factor
basis/cpu/architecture/architecture.factor

index 5a42ad2c99d17320e8ee49bb8fca6d267911ef06..36fa631050d234965b5de7d032314005606c79d9 100644 (file)
@@ -63,9 +63,11 @@ insn-classes get [
 : ^^allot-byte-array ( n -- dst )
     2 cells + byte-array ^^allot ;
 
-: ^^offset>slot ( tag slot -- vreg' )
-    cell 4 = [ 1 ^^shr-imm ] [ any-rep ^^copy ] if
-    swap ^^sub-imm ;
+: ^^offset>slot ( slot -- vreg' )
+    cell 4 = [ 1 ^^shr-imm ] [ any-rep ^^copy ] if ;
+
+: ^^tag-offset>slot ( slot tag -- vreg' )
+    [ ^^offset>slot ] dip ^^sub-imm ;
 
 : ^^tag-fixnum ( src -- dst )
     tag-bits get ^^shl-imm ;
index f9f34887736f3c222937dba1ec3482369df93d60..ce005e8353650e5f6461b4d4188b8fef7be11f8c 100644 (file)
@@ -12,5 +12,5 @@ IN: compiler.cfg.intrinsics.misc
 : emit-getenv ( node -- )
     "userenv" ^^vm-field-ptr
     swap node-input-infos first literal>>
-    [ ds-drop 0 ^^slot-imm ] [ ds-pop ^^offset>slot ^^slot ] if*
+    [ ds-drop 0 ^^slot-imm ] [ ds-pop ^^offset>slot ^^slot ] if*
     ds-push ;
index 93de5188af7c4924ad1e38517f78b1c136dec4fd..07202ae60b53465694d96944a2b382451e551aac 100644 (file)
@@ -9,8 +9,8 @@ IN: compiler.cfg.intrinsics.slots
 : value-tag ( info -- n ) class>> class-tag ; inline
 
 : (emit-slot) ( infos -- dst )
-    [ 2inputs ^^offset>slot ] [ first value-tag ] bi*
-    ^^sub-imm ^^slot ;
+    [ 2inputs ] [ first value-tag ] bi*
+    ^^tag-offset>slot ^^slot ;
 
 : (emit-slot-imm) ( infos -- dst )
     ds-drop
@@ -28,8 +28,8 @@ IN: compiler.cfg.intrinsics.slots
     ] [ drop emit-primitive ] if ;
 
 : (emit-set-slot) ( infos -- obj-reg )
-    [ 3inputs ^^offset>slot ] [ second value-tag ] bi*
-    ^^sub-imm over [ ##set-slot ] dip ;
+    [ 3inputs ] [ second value-tag ] bi*
+    ^^tag-offset>slot over [ ##set-slot ] dip ;
 
 : (emit-set-slot-imm) ( infos -- obj-reg )
     ds-drop
index fbec9f697a785744cbc548f9e219fc671aac7d1f..6b41613c007e259ea212aab2ee52bd876dc56e2f 100644 (file)
@@ -102,9 +102,9 @@ HOOK: %return cpu ( -- )
 
 HOOK: %dispatch cpu ( src temp -- )
 
-HOOK: %slot cpu ( dst obj slot tag temp -- )
+HOOK: %slot cpu ( dst obj slot -- )
 HOOK: %slot-imm cpu ( dst obj slot tag -- )
-HOOK: %set-slot cpu ( src obj slot tag temp -- )
+HOOK: %set-slot cpu ( src obj slot -- )
 HOOK: %set-slot-imm cpu ( src obj slot tag -- )
 
 HOOK: %string-nth cpu ( dst obj index temp -- )