compiler.cfg: split off condition codes into a comparisons sub-vocabulary
parent
1481f7b591
commit
768e2a5148
|
@ -1,7 +1,10 @@
|
||||||
! Copyright (C) 2009 Slava Pestov.
|
! Copyright (C) 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors combinators.short-circuit kernel sequences vectors
|
USING: accessors combinators.short-circuit kernel sequences vectors
|
||||||
compiler.cfg.instructions compiler.cfg.rpo compiler.cfg ;
|
compiler.cfg.instructions
|
||||||
|
compiler.cfg.comparisons
|
||||||
|
compiler.cfg.rpo
|
||||||
|
compiler.cfg ;
|
||||||
IN: compiler.cfg.branch-folding
|
IN: compiler.cfg.branch-folding
|
||||||
|
|
||||||
! Fold comparisons where both inputs are the same. Predecessors must be
|
! Fold comparisons where both inputs are the same. Predecessors must be
|
||||||
|
|
|
@ -14,6 +14,7 @@ compiler.cfg.stacks
|
||||||
compiler.cfg.utilities
|
compiler.cfg.utilities
|
||||||
compiler.cfg.registers
|
compiler.cfg.registers
|
||||||
compiler.cfg.intrinsics
|
compiler.cfg.intrinsics
|
||||||
|
compiler.cfg.comparisons
|
||||||
compiler.cfg.stack-frame
|
compiler.cfg.stack-frame
|
||||||
compiler.cfg.instructions
|
compiler.cfg.instructions
|
||||||
compiler.alien ;
|
compiler.alien ;
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
! Copyright (C) 2009 Slava Pestov.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: assocs math.order sequences ;
|
||||||
|
IN: compiler.cfg.comparisons
|
||||||
|
|
||||||
|
SYMBOLS: cc< cc<= cc= cc> cc>= cc/= ;
|
||||||
|
|
||||||
|
: negate-cc ( cc -- cc' )
|
||||||
|
H{
|
||||||
|
{ cc< cc>= }
|
||||||
|
{ cc<= cc> }
|
||||||
|
{ cc> cc<= }
|
||||||
|
{ cc>= cc< }
|
||||||
|
{ cc= cc/= }
|
||||||
|
{ cc/= cc= }
|
||||||
|
} at ;
|
||||||
|
|
||||||
|
: swap-cc ( cc -- cc' )
|
||||||
|
H{
|
||||||
|
{ cc< cc> }
|
||||||
|
{ cc<= cc>= }
|
||||||
|
{ cc> cc< }
|
||||||
|
{ cc>= cc<= }
|
||||||
|
{ cc= cc= }
|
||||||
|
{ cc/= cc/= }
|
||||||
|
} at ;
|
||||||
|
|
||||||
|
: evaluate-cc ( result cc -- ? )
|
||||||
|
H{
|
||||||
|
{ cc< { +lt+ } }
|
||||||
|
{ cc<= { +lt+ +eq+ } }
|
||||||
|
{ cc= { +eq+ } }
|
||||||
|
{ cc>= { +eq+ +gt+ } }
|
||||||
|
{ cc> { +gt+ } }
|
||||||
|
{ cc/= { +lt+ +gt+ } }
|
||||||
|
} at memq? ;
|
|
@ -181,44 +181,6 @@ INSN: ##loop-entry ;
|
||||||
|
|
||||||
INSN: ##phi < ##pure inputs ;
|
INSN: ##phi < ##pure inputs ;
|
||||||
|
|
||||||
! Condition codes
|
|
||||||
SYMBOL: cc<
|
|
||||||
SYMBOL: cc<=
|
|
||||||
SYMBOL: cc=
|
|
||||||
SYMBOL: cc>
|
|
||||||
SYMBOL: cc>=
|
|
||||||
SYMBOL: cc/=
|
|
||||||
|
|
||||||
: negate-cc ( cc -- cc' )
|
|
||||||
H{
|
|
||||||
{ cc< cc>= }
|
|
||||||
{ cc<= cc> }
|
|
||||||
{ cc> cc<= }
|
|
||||||
{ cc>= cc< }
|
|
||||||
{ cc= cc/= }
|
|
||||||
{ cc/= cc= }
|
|
||||||
} at ;
|
|
||||||
|
|
||||||
: swap-cc ( cc -- cc' )
|
|
||||||
H{
|
|
||||||
{ cc< cc> }
|
|
||||||
{ cc<= cc>= }
|
|
||||||
{ cc> cc< }
|
|
||||||
{ cc>= cc<= }
|
|
||||||
{ cc= cc= }
|
|
||||||
{ cc/= cc/= }
|
|
||||||
} at ;
|
|
||||||
|
|
||||||
: evaluate-cc ( result cc -- ? )
|
|
||||||
H{
|
|
||||||
{ cc< { +lt+ } }
|
|
||||||
{ cc<= { +lt+ +eq+ } }
|
|
||||||
{ cc= { +eq+ } }
|
|
||||||
{ cc>= { +eq+ +gt+ } }
|
|
||||||
{ cc> { +gt+ } }
|
|
||||||
{ cc/= { +lt+ +gt+ } }
|
|
||||||
} at memq? ;
|
|
||||||
|
|
||||||
TUPLE: ##conditional-branch < insn { src1 vreg } { src2 vreg } cc ;
|
TUPLE: ##conditional-branch < insn { src1 vreg } { src2 vreg } cc ;
|
||||||
|
|
||||||
INSN: ##compare-branch < ##conditional-branch ;
|
INSN: ##compare-branch < ##conditional-branch ;
|
||||||
|
|
|
@ -7,7 +7,8 @@ compiler.cfg.hats
|
||||||
compiler.cfg.stacks
|
compiler.cfg.stacks
|
||||||
compiler.cfg.instructions
|
compiler.cfg.instructions
|
||||||
compiler.cfg.utilities
|
compiler.cfg.utilities
|
||||||
compiler.cfg.registers ;
|
compiler.cfg.registers
|
||||||
|
compiler.cfg.comparisons ;
|
||||||
IN: compiler.cfg.intrinsics.fixnum
|
IN: compiler.cfg.intrinsics.fixnum
|
||||||
|
|
||||||
: emit-both-fixnums? ( -- )
|
: emit-both-fixnums? ( -- )
|
||||||
|
|
|
@ -8,7 +8,8 @@ compiler.cfg.intrinsics.allot
|
||||||
compiler.cfg.intrinsics.fixnum
|
compiler.cfg.intrinsics.fixnum
|
||||||
compiler.cfg.intrinsics.float
|
compiler.cfg.intrinsics.float
|
||||||
compiler.cfg.intrinsics.slots
|
compiler.cfg.intrinsics.slots
|
||||||
compiler.cfg.intrinsics.misc ;
|
compiler.cfg.intrinsics.misc
|
||||||
|
compiler.cfg.comparisons ;
|
||||||
QUALIFIED: kernel
|
QUALIFIED: kernel
|
||||||
QUALIFIED: arrays
|
QUALIFIED: arrays
|
||||||
QUALIFIED: byte-arrays
|
QUALIFIED: byte-arrays
|
||||||
|
|
|
@ -5,6 +5,7 @@ combinators assocs arrays locals cpu.architecture
|
||||||
compiler.cfg
|
compiler.cfg
|
||||||
compiler.cfg.rpo
|
compiler.cfg.rpo
|
||||||
compiler.cfg.liveness
|
compiler.cfg.liveness
|
||||||
|
compiler.cfg.comparisons
|
||||||
compiler.cfg.stack-frame
|
compiler.cfg.stack-frame
|
||||||
compiler.cfg.instructions ;
|
compiler.cfg.instructions ;
|
||||||
IN: compiler.cfg.linearization
|
IN: compiler.cfg.linearization
|
||||||
|
|
|
@ -2,7 +2,10 @@
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors locals combinators combinators.short-circuit arrays
|
USING: accessors locals combinators combinators.short-circuit arrays
|
||||||
fry kernel layouts math namespaces sequences cpu.architecture
|
fry kernel layouts math namespaces sequences cpu.architecture
|
||||||
math.bitwise compiler.cfg.hats compiler.cfg.instructions
|
math.bitwise
|
||||||
|
compiler.cfg.hats
|
||||||
|
compiler.cfg.comparisons
|
||||||
|
compiler.cfg.instructions
|
||||||
compiler.cfg.value-numbering.expressions
|
compiler.cfg.value-numbering.expressions
|
||||||
compiler.cfg.value-numbering.graph
|
compiler.cfg.value-numbering.graph
|
||||||
compiler.cfg.value-numbering.simplify ;
|
compiler.cfg.value-numbering.simplify ;
|
||||||
|
|
|
@ -4,9 +4,14 @@ USING: accessors assocs alien alien.c-types arrays strings
|
||||||
cpu.x86.assembler cpu.x86.assembler.private cpu.architecture
|
cpu.x86.assembler cpu.x86.assembler.private cpu.architecture
|
||||||
kernel kernel.private math memory namespaces make sequences
|
kernel kernel.private math memory namespaces make sequences
|
||||||
words system layouts combinators math.order fry locals
|
words system layouts combinators math.order fry locals
|
||||||
compiler.constants compiler.cfg.registers
|
compiler.constants
|
||||||
compiler.cfg.instructions compiler.cfg.intrinsics
|
compiler.cfg.registers
|
||||||
compiler.cfg.stack-frame compiler.codegen compiler.codegen.fixup ;
|
compiler.cfg.instructions
|
||||||
|
compiler.cfg.intrinsics
|
||||||
|
compiler.cfg.comparisons
|
||||||
|
compiler.cfg.stack-frame
|
||||||
|
compiler.codegen
|
||||||
|
compiler.codegen.fixup ;
|
||||||
IN: cpu.x86
|
IN: cpu.x86
|
||||||
|
|
||||||
<< enable-fixnum-log2 >>
|
<< enable-fixnum-log2 >>
|
||||||
|
|
Loading…
Reference in New Issue