]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/stacks/stacks.factor
db configurations factored out through db.info
[factor.git] / basis / compiler / cfg / stacks / stacks.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: math sequences kernel cpu.architecture
4 compiler.cfg.instructions compiler.cfg.registers
5 compiler.cfg.hats ;
6 IN: compiler.cfg.stacks
7
8 : ds-drop ( -- )
9     -1 ##inc-d ;
10
11 : ds-pop ( -- vreg )
12     D 0 ^^peek -1 ##inc-d ;
13
14 : ds-push ( vreg -- )
15     1 ##inc-d D 0 ##replace ;
16
17 : ds-load ( n -- vregs )
18     dup 0 =
19     [ drop f ]
20     [ [ <reversed> [ <ds-loc> ^^peek ] map ] [ neg ##inc-d ] bi ] if ;
21
22 : ds-store ( vregs -- )
23     [
24         <reversed>
25         [ length ##inc-d ]
26         [ [ <ds-loc> ##replace ] each-index ] bi
27     ] unless-empty ;
28
29 : rs-load ( n -- vregs )
30     dup 0 =
31     [ drop f ]
32     [ [ <reversed> [ <rs-loc> ^^peek ] map ] [ neg ##inc-r ] bi ] if ;
33
34 : rs-store ( vregs -- )
35     [
36         <reversed>
37         [ length ##inc-r ]
38         [ [ <rs-loc> ##replace ] each-index ] bi
39     ] unless-empty ;
40
41 : 2inputs ( -- vreg1 vreg2 )
42     D 1 ^^peek D 0 ^^peek -2 ##inc-d ;
43
44 : 3inputs ( -- vreg1 vreg2 vreg3 )
45     D 2 ^^peek D 1 ^^peek D 0 ^^peek -3 ##inc-d ;