9 #include "gen_mips_emitter.h"
11 #include "beemithlp.h"
12 #include "gen_mips_new_nodes.h"
13 #include "mips_emitter.h"
15 static void emit_mips_addiu(
ir_node const *
const node)
17 mips_emitf(node,
"addiu %D0, %S0, %I");
20 static void emit_mips_addu(
ir_node const *
const node)
22 mips_emitf(node,
"addu %D0, %S0, %S1");
25 static void emit_mips_and(
ir_node const *
const node)
27 mips_emitf(node,
"and %D0, %S0, %S1");
30 static void emit_mips_andi(
ir_node const *
const node)
32 mips_emitf(node,
"andi %D0, %S0, %I");
35 static void emit_mips_div_hi(
ir_node const *
const node)
37 mips_emitf(node,
"div %S0, %S1\nmfhi %D0");
40 static void emit_mips_div_lo(
ir_node const *
const node)
42 mips_emitf(node,
"div %S0, %S1\nmflo %D0");
45 static void emit_mips_divu_hi(
ir_node const *
const node)
47 mips_emitf(node,
"divu %S0, %S1\nmfhi %D0");
50 static void emit_mips_divu_lo(
ir_node const *
const node)
52 mips_emitf(node,
"divu %S0, %S1\nmflo %D0");
55 static void emit_mips_ijmp(
ir_node const *
const node)
57 mips_emitf(node,
"jr %S0\nnop");
60 static void emit_mips_jal(
ir_node const *
const node)
62 mips_emitf(node,
"jal %J\nnop");
65 static void emit_mips_jalr(
ir_node const *
const node)
67 mips_emitf(node,
"jalr %S2\nnop");
70 static void emit_mips_lb(
ir_node const *
const node)
72 mips_emitf(node,
"lb %D1, %A");
75 static void emit_mips_lbu(
ir_node const *
const node)
77 mips_emitf(node,
"lbu %D1, %A");
80 static void emit_mips_lh(
ir_node const *
const node)
82 mips_emitf(node,
"lh %D1, %A");
85 static void emit_mips_lhu(
ir_node const *
const node)
87 mips_emitf(node,
"lhu %D1, %A");
90 static void emit_mips_lui(
ir_node const *
const node)
92 mips_emitf(node,
"lui %D0, %H");
95 static void emit_mips_lw(
ir_node const *
const node)
97 mips_emitf(node,
"lw %D1, %A");
100 static void emit_mips_mult_hi(
ir_node const *
const node)
102 mips_emitf(node,
"mult %S0, %S1\nmfhi %D0");
105 static void emit_mips_mult_lo(
ir_node const *
const node)
107 mips_emitf(node,
"mult %S0, %S1\nmflo %D0");
110 static void emit_mips_multu_hi(
ir_node const *
const node)
112 mips_emitf(node,
"multu %S0, %S1\nmfhi %D0");
115 static void emit_mips_nor(
ir_node const *
const node)
117 mips_emitf(node,
"nor %D0, %S0, %S1");
120 static void emit_mips_or(
ir_node const *
const node)
122 mips_emitf(node,
"or %D0, %S0, %S1");
125 static void emit_mips_ori(
ir_node const *
const node)
127 mips_emitf(node,
"ori %D0, %S0, %I");
130 static void emit_mips_ret(
ir_node const *
const node)
132 mips_emitf(node,
"jr %S2\nnop");
135 static void emit_mips_sb(
ir_node const *
const node)
137 mips_emitf(node,
"sb %S2, %A");
140 static void emit_mips_sh(
ir_node const *
const node)
142 mips_emitf(node,
"sh %S2, %A");
145 static void emit_mips_sll(
ir_node const *
const node)
147 mips_emitf(node,
"sll %D0, %S0, %I");
150 static void emit_mips_sllv(
ir_node const *
const node)
152 mips_emitf(node,
"sllv %D0, %S0, %S1");
155 static void emit_mips_slt(
ir_node const *
const node)
157 mips_emitf(node,
"slt %D0, %S0, %S1");
160 static void emit_mips_sltiu(
ir_node const *
const node)
162 mips_emitf(node,
"sltiu %D0, %S0, %I");
165 static void emit_mips_sltu(
ir_node const *
const node)
167 mips_emitf(node,
"sltu %D0, %S0, %S1");
170 static void emit_mips_sra(
ir_node const *
const node)
172 mips_emitf(node,
"sra %D0, %S0, %I");
175 static void emit_mips_srav(
ir_node const *
const node)
177 mips_emitf(node,
"srav %D0, %S0, %S1");
180 static void emit_mips_srl(
ir_node const *
const node)
182 mips_emitf(node,
"srl %D0, %S0, %I");
185 static void emit_mips_srlv(
ir_node const *
const node)
187 mips_emitf(node,
"srlv %D0, %S0, %S1");
190 static void emit_mips_subu(
ir_node const *
const node)
192 mips_emitf(node,
"subu %D0, %S0, %S1");
195 static void emit_mips_sw(
ir_node const *
const node)
197 mips_emitf(node,
"sw %S2, %A");
200 static void emit_mips_xor(
ir_node const *
const node)
202 mips_emitf(node,
"xor %D0, %S0, %S1");
205 static void emit_mips_xori(
ir_node const *
const node)
207 mips_emitf(node,
"xori %D0, %S0, %I");
212 void mips_register_spec_emitters(
void)
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);
256 void mips_register_spec_binary_emitters(
void)
struct ir_node ir_node
Procedure Graph Node.