libFirm
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
gen_sparc_emitter.c
1 
9 #include "beemitter.h"
10 #include "gen_sparc_emitter.h"
11 #include "sparc_new_nodes.h"
12 #include "sparc_emitter.h"
13 
14 static void emit_sparc_Add(ir_node const *const node)
15 {
16  sparc_emitf(node, "add %S0, %SI1, %D0");
17 }
18 
19 static void emit_sparc_AddCC(ir_node const *const node)
20 {
21  sparc_emitf(node, "addcc %S0, %SI1, %D0");
22 }
23 
24 static void emit_sparc_AddCCZero(ir_node const *const node)
25 {
26  sparc_emitf(node, "addcc %S0, %SI1, %%g0");
27 }
28 
29 static void emit_sparc_AddSP(ir_node const *const node)
30 {
31  sparc_emitf(node, "add %S0, %S1, %D0");
32 }
33 
34 static void emit_sparc_AddX(ir_node const *const node)
35 {
36  sparc_emitf(node, "addx %S0, %SI1, %D0");
37 }
38 
39 static void emit_sparc_And(ir_node const *const node)
40 {
41  sparc_emitf(node, "and %S0, %SI1, %D0");
42 }
43 
44 static void emit_sparc_AndCCZero(ir_node const *const node)
45 {
46  sparc_emitf(node, "andcc %S0, %SI1, %%g0");
47 }
48 
49 static void emit_sparc_AndN(ir_node const *const node)
50 {
51  sparc_emitf(node, "andn %S0, %SI1, %D0");
52 }
53 
54 static void emit_sparc_AndNCCZero(ir_node const *const node)
55 {
56  sparc_emitf(node, "andncc %S0, %SI1, %%g0");
57 }
58 
59 static void emit_sparc_Cmp(ir_node const *const node)
60 {
61  sparc_emitf(node, "cmp %S0, %SI1");
62 }
63 
64 static void emit_sparc_Ld(ir_node const *const node)
65 {
66  sparc_emitf(node, "ld%ML %MO0, %D0");
67 }
68 
69 static void emit_sparc_Ldf(ir_node const *const node)
70 {
71  sparc_emitf(node, "ld%ML %MO0, %D0");
72 }
73 
74 static void emit_sparc_Mul(ir_node const *const node)
75 {
76  sparc_emitf(node, "smul %S0, %SI1, %D0");
77 }
78 
79 static void emit_sparc_MulCCZero(ir_node const *const node)
80 {
81  sparc_emitf(node, "smulcc %S0, %SI1, %%g0");
82 }
83 
84 static void emit_sparc_Or(ir_node const *const node)
85 {
86  sparc_emitf(node, "or %S0, %SI1, %D0");
87 }
88 
89 static void emit_sparc_OrCCZero(ir_node const *const node)
90 {
91  sparc_emitf(node, "orcc %S0, %SI1, %%g0");
92 }
93 
94 static void emit_sparc_OrN(ir_node const *const node)
95 {
96  sparc_emitf(node, "orn %S0, %SI1, %D0");
97 }
98 
99 static void emit_sparc_OrNCCZero(ir_node const *const node)
100 {
101  sparc_emitf(node, "orncc %S0, %SI1, %%g0");
102 }
103 
104 static void emit_sparc_RestoreZero(ir_node const *const node)
105 {
106  sparc_emitf(node, "restore");
107 }
108 
109 static void emit_sparc_SMulh(ir_node const *const node)
110 {
111  sparc_emitf(node, "smul %S0, %SI1, %D0");
112  sparc_emitf(node, "mov %%y, %D0");
113 }
114 
115 static void emit_sparc_Save(ir_node const *const node)
116 {
117  sparc_emitf(node, "save %S0, %SI1, %D0");
118 }
119 
120 static void emit_sparc_SetHi(ir_node const *const node)
121 {
122  sparc_emitf(node, "sethi %H, %D0");
123 }
124 
125 static void emit_sparc_Sll(ir_node const *const node)
126 {
127  sparc_emitf(node, "sll %S0, %SI1, %D0");
128 }
129 
130 static void emit_sparc_Sra(ir_node const *const node)
131 {
132  sparc_emitf(node, "sra %S0, %SI1, %D0");
133 }
134 
135 static void emit_sparc_Srl(ir_node const *const node)
136 {
137  sparc_emitf(node, "srl %S0, %SI1, %D0");
138 }
139 
140 static void emit_sparc_St(ir_node const *const node)
141 {
142  sparc_emitf(node, "st%MS %S0, %MO1");
143 }
144 
145 static void emit_sparc_Stbar(ir_node const *const node)
146 {
147  sparc_emitf(node, "stbar");
148 }
149 
150 static void emit_sparc_Stf(ir_node const *const node)
151 {
152  sparc_emitf(node, "st%MS %S0, %MO1");
153 }
154 
155 static void emit_sparc_Sub(ir_node const *const node)
156 {
157  sparc_emitf(node, "sub %S0, %SI1, %D0");
158 }
159 
160 static void emit_sparc_SubCC(ir_node const *const node)
161 {
162  sparc_emitf(node, "subcc %S0, %SI1, %D0");
163 }
164 
165 static void emit_sparc_SubCCZero(ir_node const *const node)
166 {
167  sparc_emitf(node, "subcc %S0, %SI1, %%g0");
168 }
169 
170 static void emit_sparc_SubX(ir_node const *const node)
171 {
172  sparc_emitf(node, "subx %S0, %SI1, %D0");
173 }
174 
175 static void emit_sparc_UMulh(ir_node const *const node)
176 {
177  sparc_emitf(node, "umul %S0, %SI1, %D0");
178  sparc_emitf(node, "mov %%y, %D0");
179 }
180 
181 static void emit_sparc_XNor(ir_node const *const node)
182 {
183  sparc_emitf(node, "xnor %S0, %SI1, %D0");
184 }
185 
186 static void emit_sparc_XNorCCZero(ir_node const *const node)
187 {
188  sparc_emitf(node, "xnorcc %S0, %SI1, %%g0");
189 }
190 
191 static void emit_sparc_Xor(ir_node const *const node)
192 {
193  sparc_emitf(node, "xor %S0, %SI1, %D0");
194 }
195 
196 static void emit_sparc_XorCCZero(ir_node const *const node)
197 {
198  sparc_emitf(node, "xorcc %S0, %SI1, %%g0");
199 }
200 
201 static void emit_sparc_fabs(ir_node const *const node)
202 {
203  sparc_emitf(node, "fabs %S0, %D0");
204 }
205 
206 static void emit_sparc_fadd(ir_node const *const node)
207 {
208  sparc_emitf(node, "fadd%FM %S0, %S1, %D0");
209 }
210 
211 static void emit_sparc_fcmp(ir_node const *const node)
212 {
213  sparc_emitf(node, "fcmp%FM %S0, %S1");
214 }
215 
216 static void emit_sparc_fdiv(ir_node const *const node)
217 {
218  sparc_emitf(node, "fdiv%FM %S0, %S1, %D0");
219 }
220 
221 static void emit_sparc_fftof(ir_node const *const node)
222 {
223  sparc_emitf(node, "f%FSto%FD %S0, %D0");
224 }
225 
226 static void emit_sparc_fftoi(ir_node const *const node)
227 {
228  sparc_emitf(node, "f%FMtoi %S0, %D0");
229 }
230 
231 static void emit_sparc_fitof(ir_node const *const node)
232 {
233  sparc_emitf(node, "fito%FM %S0, %D0");
234 }
235 
236 static void emit_sparc_fmul(ir_node const *const node)
237 {
238  sparc_emitf(node, "fmul%FM %S0, %S1, %D0");
239 }
240 
241 static void emit_sparc_fneg(ir_node const *const node)
242 {
243  sparc_emitf(node, "fnegs %S0, %D0");
244 }
245 
246 static void emit_sparc_fsub(ir_node const *const node)
247 {
248  sparc_emitf(node, "fsub%FM %S0, %S1, %D0");
249 }
250 
251 
252 
257 void sparc_register_spec_emitters(void)
258 {
259  be_set_emitter(op_sparc_Add, emit_sparc_Add);
260  be_set_emitter(op_sparc_AddCC, emit_sparc_AddCC);
261  be_set_emitter(op_sparc_AddCCZero, emit_sparc_AddCCZero);
262  be_set_emitter(op_sparc_AddSP, emit_sparc_AddSP);
263  be_set_emitter(op_sparc_AddX, emit_sparc_AddX);
264  be_set_emitter(op_sparc_And, emit_sparc_And);
265  be_set_emitter(op_sparc_AndCCZero, emit_sparc_AndCCZero);
266  be_set_emitter(op_sparc_AndN, emit_sparc_AndN);
267  be_set_emitter(op_sparc_AndNCCZero, emit_sparc_AndNCCZero);
268  be_set_emitter(op_sparc_Cmp, emit_sparc_Cmp);
269  be_set_emitter(op_sparc_Ld, emit_sparc_Ld);
270  be_set_emitter(op_sparc_Ldf, emit_sparc_Ldf);
271  be_set_emitter(op_sparc_Mul, emit_sparc_Mul);
272  be_set_emitter(op_sparc_MulCCZero, emit_sparc_MulCCZero);
273  be_set_emitter(op_sparc_Or, emit_sparc_Or);
274  be_set_emitter(op_sparc_OrCCZero, emit_sparc_OrCCZero);
275  be_set_emitter(op_sparc_OrN, emit_sparc_OrN);
276  be_set_emitter(op_sparc_OrNCCZero, emit_sparc_OrNCCZero);
277  be_set_emitter(op_sparc_RestoreZero, emit_sparc_RestoreZero);
278  be_set_emitter(op_sparc_SMulh, emit_sparc_SMulh);
279  be_set_emitter(op_sparc_Save, emit_sparc_Save);
280  be_set_emitter(op_sparc_SetHi, emit_sparc_SetHi);
281  be_set_emitter(op_sparc_Sll, emit_sparc_Sll);
282  be_set_emitter(op_sparc_Sra, emit_sparc_Sra);
283  be_set_emitter(op_sparc_Srl, emit_sparc_Srl);
284  be_set_emitter(op_sparc_St, emit_sparc_St);
285  be_set_emitter(op_sparc_Stbar, emit_sparc_Stbar);
286  be_set_emitter(op_sparc_Stf, emit_sparc_Stf);
287  be_set_emitter(op_sparc_Sub, emit_sparc_Sub);
288  be_set_emitter(op_sparc_SubCC, emit_sparc_SubCC);
289  be_set_emitter(op_sparc_SubCCZero, emit_sparc_SubCCZero);
290  be_set_emitter(op_sparc_SubX, emit_sparc_SubX);
291  be_set_emitter(op_sparc_UMulh, emit_sparc_UMulh);
292  be_set_emitter(op_sparc_XNor, emit_sparc_XNor);
293  be_set_emitter(op_sparc_XNorCCZero, emit_sparc_XNorCCZero);
294  be_set_emitter(op_sparc_Xor, emit_sparc_Xor);
295  be_set_emitter(op_sparc_XorCCZero, emit_sparc_XorCCZero);
296  be_set_emitter(op_sparc_fabs, emit_sparc_fabs);
297  be_set_emitter(op_sparc_fadd, emit_sparc_fadd);
298  be_set_emitter(op_sparc_fcmp, emit_sparc_fcmp);
299  be_set_emitter(op_sparc_fdiv, emit_sparc_fdiv);
300  be_set_emitter(op_sparc_fftof, emit_sparc_fftof);
301  be_set_emitter(op_sparc_fftoi, emit_sparc_fftoi);
302  be_set_emitter(op_sparc_fitof, emit_sparc_fitof);
303  be_set_emitter(op_sparc_fmul, emit_sparc_fmul);
304  be_set_emitter(op_sparc_fneg, emit_sparc_fneg);
305  be_set_emitter(op_sparc_fsub, emit_sparc_fsub);
306 
307 }
struct ir_node ir_node
Procedure Graph Node.
Definition: firm_types.h:53