compiler.cfg.linear-scan: fix spilling
parent
58bb118024
commit
e6b1c21590
|
@ -26,13 +26,13 @@ ERROR: bad-live-ranges interval ;
|
||||||
[ drop ] [ bad-live-ranges ] if
|
[ drop ] [ bad-live-ranges ] if
|
||||||
] [ drop ] if ;
|
] [ drop ] if ;
|
||||||
|
|
||||||
: trim-before-ranges ( live-interval n -- )
|
: trim-before-ranges ( live-interval -- )
|
||||||
[ ranges>> ] [ uses>> last ] bi
|
[ ranges>> ] [ uses>> last ] bi
|
||||||
[ '[ from>> _ <= ] filter-here ]
|
[ '[ from>> _ <= ] filter-here ]
|
||||||
[ swap last (>>to) ]
|
[ swap last (>>to) ]
|
||||||
2bi ;
|
2bi ;
|
||||||
|
|
||||||
: trim-after-ranges ( live-interval n -- )
|
: trim-after-ranges ( live-interval -- )
|
||||||
[ ranges>> ] [ uses>> first ] bi
|
[ ranges>> ] [ uses>> first ] bi
|
||||||
[ '[ to>> _ >= ] filter-here ]
|
[ '[ to>> _ >= ] filter-here ]
|
||||||
[ swap first (>>from) ]
|
[ swap first (>>from) ]
|
||||||
|
@ -56,7 +56,7 @@ ERROR: bad-live-ranges interval ;
|
||||||
over spill-to>> >>reload-from ;
|
over spill-to>> >>reload-from ;
|
||||||
|
|
||||||
: split-and-spill ( new existing -- before after )
|
: 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 -- )
|
: reuse-register ( new existing -- )
|
||||||
[ nip delete-active ]
|
[ nip delete-active ]
|
||||||
|
|
|
@ -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 ;
|
Loading…
Reference in New Issue