]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/renaming/renaming.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / basis / compiler / cfg / renaming / renaming.factor
1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs kernel namespaces sequences
4 compiler.cfg.instructions compiler.cfg.registers
5 compiler.cfg.renaming.functor ;
6 IN: compiler.cfg.renaming
7
8 SYMBOL: renamings
9
10 : rename-value ( vreg -- vreg' )
11     renamings get ?at drop ;
12
13 RENAMING: rename [ rename-value ] [ rename-value ]
14
15 : fresh-vreg ( vreg -- vreg' )
16     reg-class>> next-vreg ;
17
18 GENERIC: fresh-insn-temps ( insn -- )
19
20 M: ##write-barrier fresh-insn-temps
21     [ fresh-vreg ] change-card#
22     [ fresh-vreg ] change-table
23     drop ;
24
25 M: ##unary/temp fresh-insn-temps
26     [ fresh-vreg ] change-temp drop ;
27
28 M: ##allot fresh-insn-temps
29     [ fresh-vreg ] change-temp drop ;
30
31 M: ##dispatch fresh-insn-temps
32     [ fresh-vreg ] change-temp drop ;
33
34 M: ##slot fresh-insn-temps
35     [ fresh-vreg ] change-temp drop ;
36
37 M: ##set-slot fresh-insn-temps
38     [ fresh-vreg ] change-temp drop ;
39
40 M: ##string-nth fresh-insn-temps
41     [ fresh-vreg ] change-temp drop ;
42
43 M: ##set-string-nth-fast fresh-insn-temps
44     [ fresh-vreg ] change-temp drop ;
45
46 M: ##compare fresh-insn-temps
47     [ fresh-vreg ] change-temp drop ;
48
49 M: ##compare-imm fresh-insn-temps
50     [ fresh-vreg ] change-temp drop ;
51
52 M: ##compare-float fresh-insn-temps
53     [ fresh-vreg ] change-temp drop ;
54
55 M: ##gc fresh-insn-temps
56     [ fresh-vreg ] change-temp1
57     [ fresh-vreg ] change-temp2
58     drop ;
59
60 M: _dispatch fresh-insn-temps
61     [ fresh-vreg ] change-temp drop ;
62
63 M: insn fresh-insn-temps drop ;