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
9 : rename-value ( vreg -- vreg' ) renamings get ?at drop ;
11 GENERIC: rename-insn-defs ( insn -- )
13 M: ##flushable rename-insn-defs
14 [ rename-value ] change-dst
17 M: ##fixnum-overflow rename-insn-defs
18 [ rename-value ] change-dst
21 M: _fixnum-overflow rename-insn-defs
22 [ rename-value ] change-dst
25 M: insn rename-insn-defs drop ;
27 GENERIC: rename-insn-uses ( insn -- )
29 M: ##effect rename-insn-uses
30 [ rename-value ] change-src
33 M: ##unary rename-insn-uses
34 [ rename-value ] change-src
37 M: ##binary rename-insn-uses
38 [ rename-value ] change-src1
39 [ rename-value ] change-src2
42 M: ##binary-imm rename-insn-uses
43 [ rename-value ] change-src1
46 M: ##slot rename-insn-uses
47 [ rename-value ] change-obj
48 [ rename-value ] change-slot
51 M: ##slot-imm rename-insn-uses
52 [ rename-value ] change-obj
55 M: ##set-slot rename-insn-uses
57 [ rename-value ] change-obj
58 [ rename-value ] change-slot
61 M: ##string-nth rename-insn-uses
62 [ rename-value ] change-obj
63 [ rename-value ] change-index
66 M: ##set-string-nth-fast rename-insn-uses
68 [ rename-value ] change-obj
69 [ rename-value ] change-index
72 M: ##set-slot-imm rename-insn-uses
74 [ rename-value ] change-obj
77 M: ##alien-getter rename-insn-uses
79 [ rename-value ] change-src
82 M: ##alien-setter rename-insn-uses
84 [ rename-value ] change-value
87 M: ##conditional-branch rename-insn-uses
88 [ rename-value ] change-src1
89 [ rename-value ] change-src2
92 M: ##compare-imm-branch rename-insn-uses
93 [ rename-value ] change-src1
96 M: ##dispatch rename-insn-uses
97 [ rename-value ] change-src
100 M: ##fixnum-overflow rename-insn-uses
101 [ rename-value ] change-src1
102 [ rename-value ] change-src2
105 M: insn rename-insn-uses drop ;
107 : fresh-vreg ( vreg -- vreg' )
108 reg-class>> next-vreg ;
110 GENERIC: fresh-insn-temps ( insn -- )
112 M: ##write-barrier fresh-insn-temps
113 [ fresh-vreg ] change-card#
114 [ fresh-vreg ] change-table
117 M: ##unary/temp fresh-insn-temps
118 [ fresh-vreg ] change-temp drop ;
120 M: ##allot fresh-insn-temps
121 [ fresh-vreg ] change-temp drop ;
123 M: ##dispatch fresh-insn-temps
124 [ fresh-vreg ] change-temp drop ;
126 M: ##slot fresh-insn-temps
127 [ fresh-vreg ] change-temp drop ;
129 M: ##set-slot fresh-insn-temps
130 [ fresh-vreg ] change-temp drop ;
132 M: ##string-nth fresh-insn-temps
133 [ fresh-vreg ] change-temp drop ;
135 M: ##set-string-nth-fast fresh-insn-temps
136 [ fresh-vreg ] change-temp drop ;
138 M: ##compare fresh-insn-temps
139 [ fresh-vreg ] change-temp drop ;
141 M: ##compare-imm fresh-insn-temps
142 [ fresh-vreg ] change-temp drop ;
144 M: ##compare-float fresh-insn-temps
145 [ fresh-vreg ] change-temp drop ;
147 M: ##gc fresh-insn-temps
148 [ fresh-vreg ] change-temp1
149 [ fresh-vreg ] change-temp2
152 M: _dispatch fresh-insn-temps
153 [ fresh-vreg ] change-temp drop ;
155 M: insn fresh-insn-temps drop ;