Completing slot and set-slot changes on x86
parent
7bd330cfd5
commit
51f2bbd74b
|
@ -63,9 +63,11 @@ insn-classes get [
|
||||||
: ^^allot-byte-array ( n -- dst )
|
: ^^allot-byte-array ( n -- dst )
|
||||||
2 cells + byte-array ^^allot ;
|
2 cells + byte-array ^^allot ;
|
||||||
|
|
||||||
: ^^offset>slot ( tag slot -- vreg' )
|
: ^^offset>slot ( slot -- vreg' )
|
||||||
cell 4 = [ 1 ^^shr-imm ] [ any-rep ^^copy ] if
|
cell 4 = [ 1 ^^shr-imm ] [ any-rep ^^copy ] if ;
|
||||||
swap ^^sub-imm ;
|
|
||||||
|
: ^^tag-offset>slot ( slot tag -- vreg' )
|
||||||
|
[ ^^offset>slot ] dip ^^sub-imm ;
|
||||||
|
|
||||||
: ^^tag-fixnum ( src -- dst )
|
: ^^tag-fixnum ( src -- dst )
|
||||||
tag-bits get ^^shl-imm ;
|
tag-bits get ^^shl-imm ;
|
||||||
|
|
|
@ -12,5 +12,5 @@ IN: compiler.cfg.intrinsics.misc
|
||||||
: emit-getenv ( node -- )
|
: emit-getenv ( node -- )
|
||||||
"userenv" ^^vm-field-ptr
|
"userenv" ^^vm-field-ptr
|
||||||
swap node-input-infos first literal>>
|
swap node-input-infos first literal>>
|
||||||
[ ds-drop 0 ^^slot-imm ] [ ds-pop ^^offset>slot 0 ^^slot ] if*
|
[ ds-drop 0 ^^slot-imm ] [ ds-pop ^^offset>slot ^^slot ] if*
|
||||||
ds-push ;
|
ds-push ;
|
||||||
|
|
|
@ -9,8 +9,8 @@ IN: compiler.cfg.intrinsics.slots
|
||||||
: value-tag ( info -- n ) class>> class-tag ; inline
|
: value-tag ( info -- n ) class>> class-tag ; inline
|
||||||
|
|
||||||
: (emit-slot) ( infos -- dst )
|
: (emit-slot) ( infos -- dst )
|
||||||
[ 2inputs ^^offset>slot ] [ first value-tag ] bi*
|
[ 2inputs ] [ first value-tag ] bi*
|
||||||
^^sub-imm ^^slot ;
|
^^tag-offset>slot ^^slot ;
|
||||||
|
|
||||||
: (emit-slot-imm) ( infos -- dst )
|
: (emit-slot-imm) ( infos -- dst )
|
||||||
ds-drop
|
ds-drop
|
||||||
|
@ -28,8 +28,8 @@ IN: compiler.cfg.intrinsics.slots
|
||||||
] [ drop emit-primitive ] if ;
|
] [ drop emit-primitive ] if ;
|
||||||
|
|
||||||
: (emit-set-slot) ( infos -- obj-reg )
|
: (emit-set-slot) ( infos -- obj-reg )
|
||||||
[ 3inputs ^^offset>slot ] [ second value-tag ] bi*
|
[ 3inputs ] [ second value-tag ] bi*
|
||||||
^^sub-imm over [ ##set-slot ] dip ;
|
^^tag-offset>slot over [ ##set-slot ] dip ;
|
||||||
|
|
||||||
: (emit-set-slot-imm) ( infos -- obj-reg )
|
: (emit-set-slot-imm) ( infos -- obj-reg )
|
||||||
ds-drop
|
ds-drop
|
||||||
|
|
|
@ -102,9 +102,9 @@ HOOK: %return cpu ( -- )
|
||||||
|
|
||||||
HOOK: %dispatch cpu ( src temp -- )
|
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: %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: %set-slot-imm cpu ( src obj slot tag -- )
|
||||||
|
|
||||||
HOOK: %string-nth cpu ( dst obj index temp -- )
|
HOOK: %string-nth cpu ( dst obj index temp -- )
|
||||||
|
|
Loading…
Reference in New Issue