]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/stack-frame/stack-frame.factor
4ed192a21e3abf87ce6d62cdbc166f1f62e2730f
[factor.git] / basis / compiler / cfg / stack-frame / stack-frame.factor
1 ! Copyright (C) 2009, 2010 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: math math.order namespaces accessors kernel layouts
4 combinators assocs sequences cpu.architecture
5 words compiler.cfg.instructions ;
6 IN: compiler.cfg.stack-frame
7
8 TUPLE: stack-frame
9 { params integer }
10 { local-allot integer }
11 { spill-area-size integer }
12 { total-size integer } ;
13
14 ! Stack frame utilities
15 : local-allot-offset ( n -- offset )
16     stack-frame get params>> + ;
17
18 : spill-offset ( n -- offset )
19     stack-frame get [ params>> ] [ local-allot>> ] bi + + ;
20
21 : (stack-frame-size) ( stack-frame -- n )
22     [ params>> ] [ local-allot>> ] [ spill-area-size>> ] tri + + ;
23
24 : max-stack-frame ( frame1 frame2 -- frame3 )
25     [ stack-frame new ] 2dip
26     {
27         [ [ params>> ] bi@ max >>params ]
28         [ [ local-allot>> ] bi@ max >>local-allot ]
29         [ [ spill-area-size>> ] bi@ max >>spill-area-size ]
30     } 2cleave ;