]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/renaming/functor/functor.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / basis / compiler / cfg / renaming / functor / functor.factor
1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: functors assocs kernel accessors compiler.cfg.instructions
4 lexer parser ;
5 IN: compiler.cfg.renaming.functor
6
7 FUNCTOR: define-renaming ( NAME DEF-QUOT USE-QUOT TEMP-QUOT -- )
8
9 rename-insn-defs DEFINES ${NAME}-insn-defs
10 rename-insn-uses DEFINES ${NAME}-insn-uses
11 rename-insn-temps DEFINES ${NAME}-insn-temps
12
13 WHERE
14
15 GENERIC: rename-insn-defs ( insn -- )
16
17 M: ##flushable rename-insn-defs
18     DEF-QUOT change-dst
19     drop ;
20
21 M: ##fixnum-overflow rename-insn-defs
22     DEF-QUOT change-dst
23     drop ;
24
25 M: _fixnum-overflow rename-insn-defs
26     DEF-QUOT change-dst
27     drop ;
28
29 M: insn rename-insn-defs drop ;
30
31 GENERIC: rename-insn-uses ( insn -- )
32
33 M: ##effect rename-insn-uses
34     USE-QUOT change-src
35     drop ;
36
37 M: ##unary rename-insn-uses
38     USE-QUOT change-src
39     drop ;
40
41 M: ##binary rename-insn-uses
42     USE-QUOT change-src1
43     USE-QUOT change-src2
44     drop ;
45
46 M: ##binary-imm rename-insn-uses
47     USE-QUOT change-src1
48     drop ;
49
50 M: ##slot rename-insn-uses
51     USE-QUOT change-obj
52     USE-QUOT change-slot
53     drop ;
54
55 M: ##slot-imm rename-insn-uses
56     USE-QUOT change-obj
57     drop ;
58
59 M: ##set-slot rename-insn-uses
60     dup call-next-method
61     USE-QUOT change-obj
62     USE-QUOT change-slot
63     drop ;
64
65 M: ##string-nth rename-insn-uses
66     USE-QUOT change-obj
67     USE-QUOT change-index
68     drop ;
69
70 M: ##set-string-nth-fast rename-insn-uses
71     dup call-next-method
72     USE-QUOT change-obj
73     USE-QUOT change-index
74     drop ;
75
76 M: ##set-slot-imm rename-insn-uses
77     dup call-next-method
78     USE-QUOT change-obj
79     drop ;
80
81 M: ##alien-getter rename-insn-uses
82     dup call-next-method
83     USE-QUOT change-src
84     drop ;
85
86 M: ##alien-setter rename-insn-uses
87     dup call-next-method
88     USE-QUOT change-value
89     drop ;
90
91 M: ##conditional-branch rename-insn-uses
92     USE-QUOT change-src1
93     USE-QUOT change-src2
94     drop ;
95
96 M: ##compare-imm-branch rename-insn-uses
97     USE-QUOT change-src1
98     drop ;
99
100 M: ##dispatch rename-insn-uses
101     USE-QUOT change-src
102     drop ;
103
104 M: ##fixnum-overflow rename-insn-uses
105     USE-QUOT change-src1
106     USE-QUOT change-src2
107     drop ;
108
109 M: ##phi rename-insn-uses
110     [ USE-QUOT assoc-map ] change-inputs
111     drop ;
112
113 M: insn rename-insn-uses drop ;
114
115 GENERIC: rename-insn-temps ( insn -- )
116
117 M: ##write-barrier rename-insn-temps
118     TEMP-QUOT change-card#
119     TEMP-QUOT change-table
120     drop ;
121
122 M: ##unary/temp rename-insn-temps
123     TEMP-QUOT change-temp drop ;
124
125 M: ##allot rename-insn-temps
126     TEMP-QUOT change-temp drop ;
127
128 M: ##dispatch rename-insn-temps
129     TEMP-QUOT change-temp drop ;
130
131 M: ##slot rename-insn-temps
132     TEMP-QUOT change-temp drop ;
133
134 M: ##set-slot rename-insn-temps
135     TEMP-QUOT change-temp drop ;
136
137 M: ##string-nth rename-insn-temps
138     TEMP-QUOT change-temp drop ;
139
140 M: ##set-string-nth-fast rename-insn-temps
141     TEMP-QUOT change-temp drop ;
142
143 M: ##compare rename-insn-temps
144     TEMP-QUOT change-temp drop ;
145
146 M: ##compare-imm rename-insn-temps
147     TEMP-QUOT change-temp drop ;
148
149 M: ##compare-float rename-insn-temps
150     TEMP-QUOT change-temp drop ;
151
152 M: ##gc rename-insn-temps
153     TEMP-QUOT change-temp1
154     TEMP-QUOT change-temp2
155     drop ;
156
157 M: _dispatch rename-insn-temps
158     TEMP-QUOT change-temp drop ;
159
160 M: insn rename-insn-temps drop ;
161
162 ;FUNCTOR
163
164 SYNTAX: RENAMING: scan scan-object scan-object scan-object define-renaming ;