compiler.cfg.linear-scan: fix spilling

db4
Slava Pestov 2009-07-01 22:37:27 -05:00
parent 58bb118024
commit e6b1c21590
2 changed files with 23 additions and 3 deletions

View File

@ -26,13 +26,13 @@ ERROR: bad-live-ranges interval ;
[ drop ] [ bad-live-ranges ] if
] [ drop ] if ;
: trim-before-ranges ( live-interval n -- )
: trim-before-ranges ( live-interval -- )
[ ranges>> ] [ uses>> last ] bi
[ '[ from>> _ <= ] filter-here ]
[ swap last (>>to) ]
2bi ;
: trim-after-ranges ( live-interval n -- )
: trim-after-ranges ( live-interval -- )
[ ranges>> ] [ uses>> first ] bi
[ '[ to>> _ >= ] filter-here ]
[ swap first (>>from) ]
@ -56,7 +56,7 @@ ERROR: bad-live-ranges interval ;
over spill-to>> >>reload-from ;
: split-and-spill ( new existing -- before after )
swap start>> split-for-spill assign-spill assign-reload ;
swap start>> split-for-spill [ assign-spill ] dip assign-reload ;
: reuse-register ( new existing -- )
[ nip delete-active ]

20
basis/stuff.factor Normal file
View File

@ -0,0 +1,20 @@
: spill-integer-base ( -- n )
stack-frame get spill-counts>> double-float-regs swap at
double-float-regs reg-size * ;
: spill-integer@ ( n -- offset )
cells spill-integer-base + param@ ;
: spill-float@ ( n -- offset )
double-float-regs reg-size * param@ ;
: (stack-frame-size) ( stack-frame -- n )
[
{
[ spill-counts>> [ swap reg-size * ] { } assoc>map sum ]
[ gc-roots>> cells ]
[ params>> ]
[ return>> ]
} cleave
] sum-outputs ;