libFirm
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
gen_mips_emitter.c
1 
9 #include "gen_mips_emitter.h"
10 
11 #include "beemithlp.h"
12 #include "gen_mips_new_nodes.h"
13 #include "mips_emitter.h"
14 
15 static void emit_mips_addiu(ir_node const *const node)
16 {
17  mips_emitf(node, "addiu %D0, %S0, %I");
18 }
19 
20 static void emit_mips_addu(ir_node const *const node)
21 {
22  mips_emitf(node, "addu %D0, %S0, %S1");
23 }
24 
25 static void emit_mips_and(ir_node const *const node)
26 {
27  mips_emitf(node, "and %D0, %S0, %S1");
28 }
29 
30 static void emit_mips_andi(ir_node const *const node)
31 {
32  mips_emitf(node, "andi %D0, %S0, %I");
33 }
34 
35 static void emit_mips_div_hi(ir_node const *const node)
36 {
37  mips_emitf(node, "div %S0, %S1\nmfhi %D0");
38 }
39 
40 static void emit_mips_div_lo(ir_node const *const node)
41 {
42  mips_emitf(node, "div %S0, %S1\nmflo %D0");
43 }
44 
45 static void emit_mips_divu_hi(ir_node const *const node)
46 {
47  mips_emitf(node, "divu %S0, %S1\nmfhi %D0");
48 }
49 
50 static void emit_mips_divu_lo(ir_node const *const node)
51 {
52  mips_emitf(node, "divu %S0, %S1\nmflo %D0");
53 }
54 
55 static void emit_mips_ijmp(ir_node const *const node)
56 {
57  mips_emitf(node, "jr %S0\nnop");
58 }
59 
60 static void emit_mips_jal(ir_node const *const node)
61 {
62  mips_emitf(node, "jal %J\nnop");
63 }
64 
65 static void emit_mips_jalr(ir_node const *const node)
66 {
67  mips_emitf(node, "jalr %S2\nnop");
68 }
69 
70 static void emit_mips_lb(ir_node const *const node)
71 {
72  mips_emitf(node, "lb %D1, %A");
73 }
74 
75 static void emit_mips_lbu(ir_node const *const node)
76 {
77  mips_emitf(node, "lbu %D1, %A");
78 }
79 
80 static void emit_mips_lh(ir_node const *const node)
81 {
82  mips_emitf(node, "lh %D1, %A");
83 }
84 
85 static void emit_mips_lhu(ir_node const *const node)
86 {
87  mips_emitf(node, "lhu %D1, %A");
88 }
89 
90 static void emit_mips_lui(ir_node const *const node)
91 {
92  mips_emitf(node, "lui %D0, %H");
93 }
94 
95 static void emit_mips_lw(ir_node const *const node)
96 {
97  mips_emitf(node, "lw %D1, %A");
98 }
99 
100 static void emit_mips_mult_hi(ir_node const *const node)
101 {
102  mips_emitf(node, "mult %S0, %S1\nmfhi %D0");
103 }
104 
105 static void emit_mips_mult_lo(ir_node const *const node)
106 {
107  mips_emitf(node, "mult %S0, %S1\nmflo %D0");
108 }
109 
110 static void emit_mips_multu_hi(ir_node const *const node)
111 {
112  mips_emitf(node, "multu %S0, %S1\nmfhi %D0");
113 }
114 
115 static void emit_mips_nor(ir_node const *const node)
116 {
117  mips_emitf(node, "nor %D0, %S0, %S1");
118 }
119 
120 static void emit_mips_or(ir_node const *const node)
121 {
122  mips_emitf(node, "or %D0, %S0, %S1");
123 }
124 
125 static void emit_mips_ori(ir_node const *const node)
126 {
127  mips_emitf(node, "ori %D0, %S0, %I");
128 }
129 
130 static void emit_mips_ret(ir_node const *const node)
131 {
132  mips_emitf(node, "jr %S2\nnop");
133 }
134 
135 static void emit_mips_sb(ir_node const *const node)
136 {
137  mips_emitf(node, "sb %S2, %A");
138 }
139 
140 static void emit_mips_sh(ir_node const *const node)
141 {
142  mips_emitf(node, "sh %S2, %A");
143 }
144 
145 static void emit_mips_sll(ir_node const *const node)
146 {
147  mips_emitf(node, "sll %D0, %S0, %I");
148 }
149 
150 static void emit_mips_sllv(ir_node const *const node)
151 {
152  mips_emitf(node, "sllv %D0, %S0, %S1");
153 }
154 
155 static void emit_mips_slt(ir_node const *const node)
156 {
157  mips_emitf(node, "slt %D0, %S0, %S1");
158 }
159 
160 static void emit_mips_sltiu(ir_node const *const node)
161 {
162  mips_emitf(node, "sltiu %D0, %S0, %I");
163 }
164 
165 static void emit_mips_sltu(ir_node const *const node)
166 {
167  mips_emitf(node, "sltu %D0, %S0, %S1");
168 }
169 
170 static void emit_mips_sra(ir_node const *const node)
171 {
172  mips_emitf(node, "sra %D0, %S0, %I");
173 }
174 
175 static void emit_mips_srav(ir_node const *const node)
176 {
177  mips_emitf(node, "srav %D0, %S0, %S1");
178 }
179 
180 static void emit_mips_srl(ir_node const *const node)
181 {
182  mips_emitf(node, "srl %D0, %S0, %I");
183 }
184 
185 static void emit_mips_srlv(ir_node const *const node)
186 {
187  mips_emitf(node, "srlv %D0, %S0, %S1");
188 }
189 
190 static void emit_mips_subu(ir_node const *const node)
191 {
192  mips_emitf(node, "subu %D0, %S0, %S1");
193 }
194 
195 static void emit_mips_sw(ir_node const *const node)
196 {
197  mips_emitf(node, "sw %S2, %A");
198 }
199 
200 static void emit_mips_xor(ir_node const *const node)
201 {
202  mips_emitf(node, "xor %D0, %S0, %S1");
203 }
204 
205 static void emit_mips_xori(ir_node const *const node)
206 {
207  mips_emitf(node, "xori %D0, %S0, %I");
208 }
209 
210 
211 
212 void mips_register_spec_emitters(void)
213 {
214  be_set_emitter(op_mips_addiu, emit_mips_addiu);
215  be_set_emitter(op_mips_addu, emit_mips_addu);
216  be_set_emitter(op_mips_and, emit_mips_and);
217  be_set_emitter(op_mips_andi, emit_mips_andi);
218  be_set_emitter(op_mips_div_hi, emit_mips_div_hi);
219  be_set_emitter(op_mips_div_lo, emit_mips_div_lo);
220  be_set_emitter(op_mips_divu_hi, emit_mips_divu_hi);
221  be_set_emitter(op_mips_divu_lo, emit_mips_divu_lo);
222  be_set_emitter(op_mips_ijmp, emit_mips_ijmp);
223  be_set_emitter(op_mips_jal, emit_mips_jal);
224  be_set_emitter(op_mips_jalr, emit_mips_jalr);
225  be_set_emitter(op_mips_lb, emit_mips_lb);
226  be_set_emitter(op_mips_lbu, emit_mips_lbu);
227  be_set_emitter(op_mips_lh, emit_mips_lh);
228  be_set_emitter(op_mips_lhu, emit_mips_lhu);
229  be_set_emitter(op_mips_lui, emit_mips_lui);
230  be_set_emitter(op_mips_lw, emit_mips_lw);
231  be_set_emitter(op_mips_mult_hi, emit_mips_mult_hi);
232  be_set_emitter(op_mips_mult_lo, emit_mips_mult_lo);
233  be_set_emitter(op_mips_multu_hi, emit_mips_multu_hi);
234  be_set_emitter(op_mips_nor, emit_mips_nor);
235  be_set_emitter(op_mips_or, emit_mips_or);
236  be_set_emitter(op_mips_ori, emit_mips_ori);
237  be_set_emitter(op_mips_ret, emit_mips_ret);
238  be_set_emitter(op_mips_sb, emit_mips_sb);
239  be_set_emitter(op_mips_sh, emit_mips_sh);
240  be_set_emitter(op_mips_sll, emit_mips_sll);
241  be_set_emitter(op_mips_sllv, emit_mips_sllv);
242  be_set_emitter(op_mips_slt, emit_mips_slt);
243  be_set_emitter(op_mips_sltiu, emit_mips_sltiu);
244  be_set_emitter(op_mips_sltu, emit_mips_sltu);
245  be_set_emitter(op_mips_sra, emit_mips_sra);
246  be_set_emitter(op_mips_srav, emit_mips_srav);
247  be_set_emitter(op_mips_srl, emit_mips_srl);
248  be_set_emitter(op_mips_srlv, emit_mips_srlv);
249  be_set_emitter(op_mips_subu, emit_mips_subu);
250  be_set_emitter(op_mips_sw, emit_mips_sw);
251  be_set_emitter(op_mips_xor, emit_mips_xor);
252  be_set_emitter(op_mips_xori, emit_mips_xori);
253 
254 }
255 
256 void mips_register_spec_binary_emitters(void)
257 {
258 
259 }
struct ir_node ir_node
Procedure Graph Node.
Definition: firm_types.h:53