129 lines
3.0 KiB
Factor
129 lines
3.0 KiB
Factor
USING: accessors assocs compiler compiler.cfg
|
|
compiler.cfg.debugger compiler.cfg.instructions
|
|
compiler.cfg.registers compiler.cfg.linear-scan
|
|
compiler.cfg.ssa.destruction compiler.cfg.build-stack-frame
|
|
compiler.codegen compiler.units cpu.architecture hashtables
|
|
kernel namespaces sequences tools.test vectors words layouts
|
|
literals math arrays alien.c-types alien.syntax math.private ;
|
|
IN: compiler.tests.low-level-ir
|
|
|
|
: compile-cfg ( cfg -- word )
|
|
gensym
|
|
[ linear-scan build-stack-frame generate ] dip
|
|
[ associate >alist t t modify-code-heap ] keep ;
|
|
|
|
: compile-test-cfg ( -- word )
|
|
cfg new 0 get >>entry
|
|
dup cfg set
|
|
dup fake-representations
|
|
destruct-ssa
|
|
compile-cfg ;
|
|
|
|
: compile-test-bb ( insns -- result )
|
|
V{ T{ ##prologue } T{ ##branch } } [ clone ] map 0 test-bb
|
|
V{
|
|
T{ ##inc-d f 1 }
|
|
T{ ##replace f 0 D 0 }
|
|
T{ ##branch }
|
|
} [ clone ] map append 1 test-bb
|
|
V{
|
|
T{ ##epilogue }
|
|
T{ ##return }
|
|
} [ clone ] map 2 test-bb
|
|
0 1 edge
|
|
1 2 edge
|
|
compile-test-cfg
|
|
execute( -- result ) ;
|
|
|
|
! loading constants
|
|
[ "hello" ] [
|
|
V{
|
|
T{ ##load-reference f 0 "hello" }
|
|
} compile-test-bb
|
|
] unit-test
|
|
|
|
! make sure slot access works when the destination is
|
|
! one of the sources
|
|
[ t ] [
|
|
V{
|
|
T{ ##load-tagged f 1 $[ 2 cell log2 shift array type-number - ] }
|
|
T{ ##load-reference f 0 { t f t } }
|
|
T{ ##slot f 0 0 1 0 0 }
|
|
} compile-test-bb
|
|
] unit-test
|
|
|
|
[ t ] [
|
|
V{
|
|
T{ ##load-reference f 0 { t f t } }
|
|
T{ ##slot-imm f 0 0 2 $[ array type-number ] }
|
|
} compile-test-bb
|
|
] unit-test
|
|
|
|
[ t ] [
|
|
V{
|
|
T{ ##load-tagged f 1 $[ 2 cell log2 shift array type-number - ] }
|
|
T{ ##load-reference f 0 { t f t } }
|
|
T{ ##set-slot f 0 0 1 0 0 }
|
|
} compile-test-bb
|
|
dup first eq?
|
|
] unit-test
|
|
|
|
[ t ] [
|
|
V{
|
|
T{ ##load-reference f 0 { t f t } }
|
|
T{ ##set-slot-imm f 0 0 2 $[ array type-number ] }
|
|
} compile-test-bb
|
|
dup first eq?
|
|
] unit-test
|
|
|
|
[ 4 ] [
|
|
V{
|
|
T{ ##load-tagged f 0 4 }
|
|
T{ ##shl f 0 0 0 }
|
|
} compile-test-bb
|
|
] unit-test
|
|
|
|
[ 4 ] [
|
|
V{
|
|
T{ ##load-tagged f 0 4 }
|
|
T{ ##shl-imm f 0 0 4 }
|
|
} compile-test-bb
|
|
] unit-test
|
|
|
|
[ 31 ] [
|
|
V{
|
|
T{ ##load-reference f 1 B{ 31 67 52 } }
|
|
T{ ##unbox-any-c-ptr f 2 1 }
|
|
T{ ##load-memory-imm f 3 2 0 int-rep uchar }
|
|
T{ ##shl-imm f 0 3 4 }
|
|
} compile-test-bb
|
|
] unit-test
|
|
|
|
[ 1 ] [
|
|
V{
|
|
T{ ##load-tagged f 0 32 }
|
|
T{ ##add-imm f 0 0 -16 }
|
|
} compile-test-bb
|
|
] unit-test
|
|
|
|
[ -1 ] [
|
|
V{
|
|
T{ ##load-tagged f 1 $[ -1 tag-fixnum ] }
|
|
T{ ##convert-integer f 0 1 char }
|
|
} compile-test-bb
|
|
] unit-test
|
|
|
|
[ -1 ] [
|
|
V{
|
|
T{ ##load-tagged f 1 $[ -1 9 2^ bitxor tag-fixnum ] }
|
|
T{ ##convert-integer f 0 1 char }
|
|
} compile-test-bb
|
|
] unit-test
|
|
|
|
[ $[ 255 tag-bits get neg shift ] ] [
|
|
V{
|
|
T{ ##load-tagged f 1 $[ -1 9 2^ bitxor tag-fixnum ] }
|
|
T{ ##convert-integer f 0 1 uchar }
|
|
} compile-test-bb
|
|
] unit-test
|