clean up value numbering conversion of ##add/sub to ##add/sub-imm

db4
Doug Coleman 2009-07-13 19:02:05 -05:00
parent 3b244d5d41
commit ccae9b59a4
1 changed files with 18 additions and 10 deletions

View File

@ -49,9 +49,12 @@ M: insn rewrite ;
[ src2>> tag-mask get bitand 0 = ] [ src2>> tag-mask get bitand 0 = ]
} 1&& ; inline } 1&& ; inline
: tagged>constant ( n -- n' )
tag-bits get neg shift ; inline
: (rewrite-tagged-comparison) ( insn -- src1 src2 cc ) : (rewrite-tagged-comparison) ( insn -- src1 src2 cc )
[ src1>> vreg>expr in1>> vn>vreg ] [ src1>> vreg>expr in1>> vn>vreg ]
[ src2>> tag-bits get neg shift ] [ src2>> tagged>constant ]
[ cc>> ] [ cc>> ]
tri ; inline tri ; inline
@ -203,15 +206,20 @@ M: ##or-imm rewrite [ bitor ] \ ##or-imm combine-imm ;
M: ##xor-imm rewrite [ bitxor ] \ ##xor-imm combine-imm ; M: ##xor-imm rewrite [ bitxor ] \ ##xor-imm combine-imm ;
: rewrite-add? ( insn -- ? ) : new-arithmetic ( obj op -- )
src2>> vreg-small-constant? ; [
M: ##add rewrite
dup rewrite-add? [
[ dst>> ] [ dst>> ]
[ src1>> ] [ src1>> ]
[ src2>> vreg>constant ] tri \ ##add-imm new-insn [ src2>> vreg>constant ] tri
dup number-values ] dip new-insn dup number-values ; inline
] when ;
M: ##sub rewrite constant-fold ; : rewrite-arithmetic ( insn op -- ? )
over src2>> vreg-small-constant? [
new-arithmetic constant-fold
] [
drop
] if ; inline
M: ##add rewrite \ ##add-imm rewrite-arithmetic ;
M: ##sub rewrite \ ##sub-imm rewrite-arithmetic ;