fix naming clash, remove %tag-fixnum %untag-fixnum %jump-f vops

cvs
Slava Pestov 2005-09-10 06:56:33 +00:00
parent 43ee7d00c6
commit 3f20042a03
7 changed files with 31 additions and 69 deletions

View File

@ -63,7 +63,6 @@ sequences vectors words ;
drop
in-1
0 %type ,
0 %retag-fixnum ,
out-1
] "intrinsic" set-word-prop
@ -71,7 +70,6 @@ sequences vectors words ;
drop
in-1
0 %tag ,
0 %retag-fixnum ,
out-1
] "intrinsic" set-word-prop
@ -164,7 +162,7 @@ sequences vectors words ;
in-2
-1 %inc-d ,
1 <vreg> 0 <vreg> 2 <vreg> %fixnum-mod ,
2 0 %replace-d ,
<< vreg f 2 >> 0 %replace-d ,
] "intrinsic" set-word-prop
\ fixnum/mod [
@ -174,8 +172,8 @@ sequences vectors words ;
{ << vreg f 1 >> << vreg f 0 >> }
{ << vreg f 2 >> << vreg f 0 >> }
%fixnum/mod ,
2 0 %replace-d ,
0 1 %replace-d ,
<< vreg f 2 >> 0 %replace-d ,
<< vreg f 0 >> 1 %replace-d ,
] "intrinsic" set-word-prop
\ fixnum-bitnot [
@ -213,7 +211,7 @@ sequences vectors words ;
in-1
dup cell -8 * <= [
drop 0 <vreg> 2 <vreg> %fixnum-sgn ,
2 0 %replace-d ,
<< vreg f 2 >> 0 %replace-d ,
] [
neg 0 <vreg> 0 <vreg> %fixnum>> ,
out-1

View File

@ -72,7 +72,6 @@ M: #ifte linearize* ( node -- )
#! label/branch pairs.
in-1
-1 %inc-d ,
0 %untag-fixnum ,
0 %dispatch ,
[ <label> dup %target-label , cons ] map
%end-dispatch , ;

View File

@ -52,14 +52,8 @@ M: %jump generate-node ( vop -- )
M: %jump-label generate-node ( vop -- )
vop-label B ;
: conditional ( vop -- label )
dup 0 vop-in v>operand 0 swap f address CMPI vop-label ;
M: %jump-f generate-node ( vop -- )
conditional BEQ ;
M: %jump-t generate-node ( vop -- )
conditional BNE ;
dup 0 vop-in v>operand 0 swap f address CMPI vop-label BNE ;
M: %return-to generate-node ( vop -- )
vop-label 0 3 LOAD32 absolute-16/16
@ -74,15 +68,8 @@ M: %return generate-node ( vop -- )
M: %untag generate-node ( vop -- )
dest/src untag ;
M: %untag-fixnum generate-node ( vop -- )
dest/src tag-bits SRAWI ;
: tag-fixnum ( src dest -- ) tag-bits SLWI ;
M: %retag-fixnum generate-node ( vop -- )
! todo: formalize scratch register usage
dest/src tag-fixnum ;
M: %dispatch generate-node ( vop -- )
0 <vreg> check-src
3 3 2 SLWI

View File

@ -101,10 +101,6 @@ TUPLE: %jump-t ;
C: %jump-t make-vop ;
: %jump-t <vreg> label/src-vop <%jump-t> ;
TUPLE: %jump-f ;
C: %jump-f make-vop ;
: %jump-f <vreg> label/src-vop <%jump-f> ;
! dispatch tables
TUPLE: %dispatch ;
C: %dispatch make-vop ;
@ -135,7 +131,7 @@ TUPLE: %replace-d ;
C: %replace-d make-vop ;
: %replace-d ( vreg n -- vop )
<ds-loc> swap <vreg> swap src/dest-vop <%replace-d> ;
<ds-loc> src/dest-vop <%replace-d> ;
M: %replace-d basic-block? drop t ;
@ -165,7 +161,7 @@ TUPLE: %replace-r ;
C: %replace-r make-vop ;
: %replace-r ( vreg n -- vop )
<cs-loc> swap <vreg> swap src/dest-vop <%replace-r> ;
<cs-loc> src/dest-vop <%replace-r> ;
M: %replace-r basic-block? drop t ;
@ -180,7 +176,7 @@ M: %inc-r basic-block? drop t ;
: in-1 0 0 %peek-d , ;
: in-2 0 1 %peek-d , 1 0 %peek-d , ;
: in-3 0 2 %peek-d , 1 1 %peek-d , 2 0 %peek-d , ;
: out-1 0 0 %replace-d , ;
: out-1 << vreg f 0 >> 0 %replace-d , ;
! indirect load of a literal through a table
TUPLE: %indirect ;
@ -190,7 +186,6 @@ C: %indirect make-vop ;
M: %indirect basic-block? drop t ;
! object slot accessors
! mask off a tag (see also %untag-fixnum)
TUPLE: %untag ;
C: %untag make-vop ;
: %untag <vreg> dest-vop <%untag> ;
@ -314,16 +309,6 @@ C: %tag make-vop ;
: %tag ( vreg ) <vreg> dest-vop <%tag> ;
M: %tag basic-block? drop t ;
TUPLE: %retag-fixnum ;
C: %retag-fixnum make-vop ;
: %retag-fixnum <vreg> dest-vop <%retag-fixnum> ;
M: %retag-fixnum basic-block? drop t ;
TUPLE: %untag-fixnum ;
C: %untag-fixnum make-vop ;
: %untag-fixnum <vreg> dest-vop <%untag-fixnum> ;
M: %untag-fixnum basic-block? drop t ;
: check-dest ( vop reg -- )
swap 0 vop-out = [ "bad VOP destination" throw ] unless ;

View File

@ -22,14 +22,8 @@ M: %jump generate-node ( vop -- )
M: %jump-label generate-node ( vop -- )
vop-label JMP ;
: conditional ( vop -- label )
dup 0 vop-in v>operand f address CMP vop-label ;
M: %jump-f generate-node ( vop -- )
conditional JE ;
M: %jump-t generate-node ( vop -- )
conditional JNE ;
dup 0 vop-in v>operand f address CMP vop-label JNE ;
M: %return-to generate-node ( vop -- )
0 PUSH vop-label absolute ;
@ -37,22 +31,13 @@ M: %return-to generate-node ( vop -- )
M: %return generate-node ( vop -- )
drop RET ;
M: %untag generate-node ( vop -- )
0 vop-out v>operand BIN: 111 bitnot AND ;
M: %retag-fixnum generate-node ( vop -- )
0 vop-out v>operand 3 SHL ;
M: %untag-fixnum generate-node ( vop -- )
0 vop-out v>operand 3 SHR ;
M: %dispatch generate-node ( vop -- )
#! Compile a piece of code that jumps to an offset in a
#! jump table indexed by the fixnum at the top of the stack.
#! The jump table must immediately follow this macro.
0 vop-in v>operand
! Multiply by 4 to get a jump table offset
dup 2 SHL
! Untag and multiply by 4 to get a jump table offset
dup tag-bits 2 - SHR
! Add to jump table base
dup HEX: ffff ADD just-compiled >r 0 0 rel-address
! Jump to jump table entry
@ -63,8 +48,8 @@ M: %dispatch generate-node ( vop -- )
compiled-offset r> set-compiled-cell ( fixup -- ) ;
M: %type generate-node ( vop -- )
#! Intrinstic version of type primitive. It outputs an
#! UNBOXED value in 0 vop-out.
#! Intrinstic version of type primitive.
<label> "header" set
<label> "f" set
<label> "end" set
0 vop-out v>operand
@ -75,21 +60,29 @@ M: %type generate-node ( vop -- )
! Compare with object tag number (3).
dup object-tag CMP
! Jump if the object doesn't store type info in its header
"end" get JNE
"header" get JE
! It doesn't store type info in its header
dup tag-bits SHL
"end" get JMP
"header" get save-xt
! It does store type info in its header
! Is the pointer itself equal to 3? Then its F_TYPE (9).
ECX object-tag CMP
"f" get JE
! The pointer is not equal to 3. Load the object header.
dup ECX object-tag neg 2list MOV
dup 3 SHR
! Mask off header tag, making a fixnum.
dup object-tag XOR
"end" get JMP
"f" get save-xt
! The pointer is equal to 3. Load F_TYPE (9).
f type MOV
f type tag-bits shift MOV
"end" get save-xt ;
M: %tag generate-node ( vop -- )
dup dup 0 vop-in check-dest
0 vop-in v>operand tag-mask AND ;
0 vop-in v>operand dup tag-mask AND
tag-bits SHL ;
M: %untag generate-node ( vop -- )
0 vop-out v>operand tag-mask bitnot AND ;

View File

@ -170,9 +170,3 @@ math-internals test words ;
! regression
[ t ] [ { 1 2 3 } { 1 2 3 } [ over type over type eq? ] compile-1 2nip ] unit-test
! regression
: bleh 3 ;
: blah over cons? [ bleh >r 2cdr r> ] [ 2drop f f f ] ifte ; compiled
[ f ] [ [ 1 2 3 ] [ 1 3 2 ] blah drop 2car = ] unit-test

View File

@ -187,3 +187,9 @@ TUPLE: pred-test ;
: bad-kill-2 bad-kill-1 drop ; compiled
[ 3 ] [ t bad-kill-2 ] unit-test
! regression
: bleh 3 ;
: blah over cons? [ bleh >r 2cdr r> ] [ 2drop f f f ] ifte ; compiled
[ f ] [ [ 1 2 3 ] [ 1 3 2 ] blah drop 2car = ] unit-test