factor/basis/compiler/cfg/registers/registers.factor

47 lines
1.4 KiB
Factor
Raw Normal View History

! Copyright (C) 2008, 2009 Slava Pestov.
2008-09-10 23:11:03 -04:00
! See http://factorcode.org/license.txt for BSD license.
USING: accessors namespaces kernel math parser assocs sequences ;
2008-09-15 02:54:48 -04:00
IN: compiler.cfg.registers
2008-09-10 23:11:03 -04:00
! Virtual registers, used by CFG and machine IRs, are just integers
SYMBOL: vreg-counter
: next-vreg ( -- vreg )
! This word cannot be called AFTER representation selection has run;
! use next-vreg-rep in that case
\ vreg-counter counter ;
SYMBOL: representations
ERROR: bad-vreg vreg ;
: rep-of ( vreg -- rep )
! This word cannot be called BEFORE representation selection has run;
! use any-rep for ##copy instructions and so on
representations get ?at [ bad-vreg ] unless ;
: set-rep-of ( rep vreg -- )
representations get set-at ;
: next-vreg-rep ( rep -- vreg )
! This word cannot be called BEFORE representation selection has run;
! use next-vreg in that case
next-vreg [ set-rep-of ] keep ;
2008-09-10 23:11:03 -04:00
! Stack locations -- 'n' is an index starting from the top of the stack
! going down. So 0 is the top of the stack, 1 is what would be the top
! of the stack after a 'drop', and so on.
! ##inc-d and ##inc-r affect locations as follows. Location D 0 before
! an ##inc-d 1 becomes D 1 after ##inc-d 1.
TUPLE: loc { n integer read-only } ;
2008-10-17 21:03:59 -04:00
2008-09-10 23:11:03 -04:00
TUPLE: ds-loc < loc ;
2008-10-20 02:56:28 -04:00
C: <ds-loc> ds-loc
2008-09-10 23:11:03 -04:00
TUPLE: rs-loc < loc ;
C: <rs-loc> rs-loc
2008-09-17 01:46:38 -04:00
2009-10-28 14:38:27 -04:00
SYNTAX: D scan-word <ds-loc> suffix! ;
SYNTAX: R scan-word <rs-loc> suffix! ;