25 lines
		
	
	
		
			833 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			833 B
		
	
	
	
		
			Factor
		
	
	
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 ] [ cfg-w-spill-area-base ] bi*
 | 
						|
    cfg [
 | 
						|
        gc-root-offset reserved-stack-space cell / -
 | 
						|
    ] with-variable ;
 | 
						|
 | 
						|
cpu x86.64? [
 | 
						|
    ! The offset is 1, not 0 because the return address occupies the
 | 
						|
    ! first position in the stack frame.
 | 
						|
    { 1 } [ 0 0 expected-gc-root-offset ] unit-test
 | 
						|
 | 
						|
    { 10 } [ 8 64 expected-gc-root-offset ] unit-test
 | 
						|
 | 
						|
    { 20 } [ 24 128 expected-gc-root-offset ] unit-test
 | 
						|
] when
 |