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