2010-04-27 10:51:00 -04:00
|
|
|
! Copyright (C) 2009, 2010 Slava Pestov.
|
2008-09-17 20:31:35 -04:00
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2010-05-02 18:48:41 -04:00
|
|
|
USING: math math.order namespaces accessors kernel layouts
|
2010-05-16 03:43:02 -04:00
|
|
|
combinators assocs sequences cpu.architecture
|
2010-05-02 18:48:41 -04:00
|
|
|
words compiler.cfg.instructions ;
|
2008-09-17 20:31:35 -04:00
|
|
|
IN: compiler.cfg.stack-frame
|
|
|
|
|
2009-06-02 19:23:47 -04:00
|
|
|
TUPLE: stack-frame
|
|
|
|
{ params integer }
|
|
|
|
{ return integer }
|
2009-10-20 06:02:42 -04:00
|
|
|
{ spill-area-size integer }
|
2010-05-17 02:14:44 -04:00
|
|
|
{ total-size integer } ;
|
2008-09-17 20:31:35 -04:00
|
|
|
|
2009-06-02 19:23:47 -04:00
|
|
|
! Stack frame utilities
|
2010-05-16 03:43:02 -04:00
|
|
|
: return-offset ( -- offset )
|
|
|
|
stack-frame get params>> ;
|
2008-09-17 20:31:35 -04:00
|
|
|
|
2009-08-07 18:44:50 -04:00
|
|
|
: spill-offset ( n -- offset )
|
2010-05-16 03:43:02 -04:00
|
|
|
stack-frame get [ params>> ] [ return>> ] bi + + ;
|
2008-11-06 20:00:56 -05:00
|
|
|
|
2009-06-02 19:23:47 -04:00
|
|
|
: (stack-frame-size) ( stack-frame -- n )
|
2010-05-16 03:43:02 -04:00
|
|
|
[ params>> ] [ return>> ] [ spill-area-size>> ] tri + + ;
|
2009-06-02 19:23:47 -04:00
|
|
|
|
|
|
|
: max-stack-frame ( frame1 frame2 -- frame3 )
|
|
|
|
[ stack-frame new ] 2dip
|
2009-10-20 06:02:42 -04:00
|
|
|
{
|
2009-06-02 19:23:47 -04:00
|
|
|
[ [ params>> ] bi@ max >>params ]
|
|
|
|
[ [ return>> ] bi@ max >>return ]
|
2010-05-02 18:48:41 -04:00
|
|
|
[ [ spill-area-size>> ] bi@ max >>spill-area-size ]
|
|
|
|
} 2cleave ;
|