-USING: accessors alien.c-types arrays bit-arrays classes.struct
-compiler.cfg.instructions compiler.cfg.stack-frame
+USING: accessors alien.c-types arrays bit-arrays classes.struct compiler.cfg
+compiler.cfg.instructions compiler.cfg.stack-frame compiler.cfg.utilities
compiler.codegen.gc-maps compiler.codegen.relocation cpu.architecture
cpu.x86 byte-arrays make namespaces kernel layouts math sequences
specialized-arrays system tools.test ;
M: linux-x86.64 gc-root-offset
n>> spill-offset cell + cell /i ;
+: cfg-w-spill-area-base ( base -- cfg )
+ stack-frame new swap >>spill-area-base
+ { } insns>cfg swap >>stack-frame ;
+
cpu x86.64? [
linux-x86.64 \ cpu set
! gc-root-offsets
{ { 1 3 } } [
- T{ stack-frame { spill-area-base 0 } } stack-frame [
+ 0 cfg-w-spill-area-base cfg [
T{ gc-map
{ gc-roots {
T{ spill-slot { n 0 } }
] unit-test
{ { 6 10 } } [
- T{ stack-frame { spill-area-base 32 } } stack-frame [
+ 32 cfg-w-spill-area-base cfg [
T{ gc-map
{ gc-roots {
T{ spill-slot { n 8 } }
! scrub-d scrub-r gc-roots
{ { 0 0 5 } } [
- T{ stack-frame { spill-area-base 0 } } stack-frame [
+ 0 cfg-w-spill-area-base cfg [
T{ gc-map
{ gc-roots {
T{ spill-slot { n 0 } }
! scrub-d scrub-r gc-roots
{ { 0 0 9 } } [
- T{ stack-frame { spill-area-base 32 } } stack-frame [
+ 32 cfg-w-spill-area-base cfg [
T{ gc-map
{ gc-roots {
T{ spill-slot { n 0 } }
-USING: accessors compiler.cfg.instructions compiler.cfg.stack-frame
-cpu.architecture cpu.x86 kernel layouts math namespaces system tools.test ;
+USING: accessors compiler.cfg compiler.cfg.instructions
+compiler.cfg.stack-frame compiler.cfg.utilities cpu.architecture
+cpu.x86 kernel layouts math namespaces system tools.test ;
IN: cpu.architecture.tests
+: cfg-w-spill-area-base ( base -- cfg )
+ stack-frame new swap >>spill-area-base
+ { } insns>cfg swap >>stack-frame ;
+
: expected-gc-root-offset ( slot-number spill-area-base -- offset )
- [ spill-slot boa ] [ stack-frame new swap >>spill-area-base ] bi*
- stack-frame [
+ [ spill-slot boa ] [ cfg-w-spill-area-base ] bi*
+ cfg [
gc-root-offset reserved-stack-space cell / -
] with-variable ;
! Like word>gc-info but uses the compiler
: word>gc-info-expected ( word -- seq/f )
- test-regs first dup stack-frame>> stack-frame
- [ cfg>gc-maps tally-gc-maps ] with-variable ;
+ test-regs first cfg>gc-maps tally-gc-maps ;
: same-gc-info? ( compiler-gc-info gc-info -- ? )
[ struct-slot-values = ]
[ [ not ] dip return-address-count>> 0 = and ] 2bi or ;
: base-pointer-groups-expected ( word -- seq )
- test-regs first dup stack-frame>> stack-frame [
- cfg>gc-maps [ derived-root-offsets { } like ] { } map-as
- ] with-variable ;
+ test-regs first cfg>gc-maps [ derived-root-offsets { } like ] { } map-as ;
: base-pointer-groups-decoded ( word -- seq )
word>gc-maps [