]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/renaming/renaming.factor
db configurations factored out through db.info
[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 IN: compiler.cfg.renaming
6
7 SYMBOL: renamings
8
9 : rename-value ( vreg -- vreg' ) renamings get ?at drop ;
10
11 GENERIC: rename-insn-defs ( insn -- )
12
13 M: ##flushable rename-insn-defs
14     [ rename-value ] change-dst
15     drop ;
16
17 M: ##fixnum-overflow rename-insn-defs
18     [ rename-value ] change-dst
19     drop ;
20
21 M: _fixnum-overflow rename-insn-defs
22     [ rename-value ] change-dst
23     drop ;
24
25 M: insn rename-insn-defs drop ;
26
27 GENERIC: rename-insn-uses ( insn -- )
28
29 M: ##effect rename-insn-uses
30     [ rename-value ] change-src
31     drop ;
32
33 M: ##unary rename-insn-uses
34     [ rename-value ] change-src
35     drop ;
36
37 M: ##binary rename-insn-uses
38     [ rename-value ] change-src1
39     [ rename-value ] change-src2
40     drop ;
41
42 M: ##binary-imm rename-insn-uses
43     [ rename-value ] change-src1
44     drop ;
45
46 M: ##slot rename-insn-uses
47     [ rename-value ] change-obj
48     [ rename-value ] change-slot
49     drop ;
50
51 M: ##slot-imm rename-insn-uses
52     [ rename-value ] change-obj
53     drop ;
54
55 M: ##set-slot rename-insn-uses
56     dup call-next-method
57     [ rename-value ] change-obj
58     [ rename-value ] change-slot
59     drop ;
60
61 M: ##string-nth rename-insn-uses
62     [ rename-value ] change-obj
63     [ rename-value ] change-index
64     drop ;
65
66 M: ##set-string-nth-fast rename-insn-uses
67     dup call-next-method
68     [ rename-value ] change-obj
69     [ rename-value ] change-index
70     drop ;
71
72 M: ##set-slot-imm rename-insn-uses
73     dup call-next-method
74     [ rename-value ] change-obj
75     drop ;
76
77 M: ##alien-getter rename-insn-uses
78     dup call-next-method
79     [ rename-value ] change-src
80     drop ;
81
82 M: ##alien-setter rename-insn-uses
83     dup call-next-method
84     [ rename-value ] change-value
85     drop ;
86
87 M: ##conditional-branch rename-insn-uses
88     [ rename-value ] change-src1
89     [ rename-value ] change-src2
90     drop ;
91
92 M: ##compare-imm-branch rename-insn-uses
93     [ rename-value ] change-src1
94     drop ;
95
96 M: ##dispatch rename-insn-uses
97     [ rename-value ] change-src
98     drop ;
99
100 M: ##fixnum-overflow rename-insn-uses
101     [ rename-value ] change-src1
102     [ rename-value ] change-src2
103     drop ;
104
105 M: insn rename-insn-uses drop ;
106
107 : fresh-vreg ( vreg -- vreg' )
108     reg-class>> next-vreg ;
109
110 GENERIC: fresh-insn-temps ( insn -- )
111
112 M: ##write-barrier fresh-insn-temps
113     [ fresh-vreg ] change-card#
114     [ fresh-vreg ] change-table
115     drop ;
116
117 M: ##unary/temp fresh-insn-temps
118     [ fresh-vreg ] change-temp drop ;
119
120 M: ##allot fresh-insn-temps
121     [ fresh-vreg ] change-temp drop ;
122
123 M: ##dispatch fresh-insn-temps
124     [ fresh-vreg ] change-temp drop ;
125
126 M: ##slot fresh-insn-temps
127     [ fresh-vreg ] change-temp drop ;
128
129 M: ##set-slot fresh-insn-temps
130     [ fresh-vreg ] change-temp drop ;
131
132 M: ##string-nth fresh-insn-temps
133     [ fresh-vreg ] change-temp drop ;
134
135 M: ##set-string-nth-fast fresh-insn-temps
136     [ fresh-vreg ] change-temp drop ;
137
138 M: ##compare fresh-insn-temps
139     [ fresh-vreg ] change-temp drop ;
140
141 M: ##compare-imm fresh-insn-temps
142     [ fresh-vreg ] change-temp drop ;
143
144 M: ##compare-float fresh-insn-temps
145     [ fresh-vreg ] change-temp drop ;
146
147 M: ##gc fresh-insn-temps
148     [ fresh-vreg ] change-temp1
149     [ fresh-vreg ] change-temp2
150     drop ;
151
152 M: _dispatch fresh-insn-temps
153     [ fresh-vreg ] change-temp drop ;
154
155 M: insn fresh-insn-temps drop ;