9 #include "gen_riscv_emitter.h"
11 #include "beemithlp.h"
12 #include "gen_riscv_new_nodes.h"
13 #include "riscv_emitter.h"
15 static void emit_riscv_add(
ir_node const *
const node)
17 riscv_emitf(node,
"add %D0, %S0, %S1");
20 static void emit_riscv_addi(
ir_node const *
const node)
22 riscv_emitf(node,
"addi %D0, %S0, %I");
25 static void emit_riscv_and(
ir_node const *
const node)
27 riscv_emitf(node,
"and %D0, %S0, %S1");
30 static void emit_riscv_andi(
ir_node const *
const node)
32 riscv_emitf(node,
"andi %D0, %S0, %I");
35 static void emit_riscv_div(
ir_node const *
const node)
37 riscv_emitf(node,
"div %D0, %S0, %S1");
40 static void emit_riscv_divu(
ir_node const *
const node)
42 riscv_emitf(node,
"divu %D0, %S0, %S1");
45 static void emit_riscv_ijmp(
ir_node const *
const node)
47 riscv_emitf(node,
"jr %S0");
50 static void emit_riscv_jal(
ir_node const *
const node)
52 riscv_emitf(node,
"jal %J");
55 static void emit_riscv_jalr(
ir_node const *
const node)
57 riscv_emitf(node,
"jalr %S2");
60 static void emit_riscv_lb(
ir_node const *
const node)
62 riscv_emitf(node,
"lb %D1, %A");
65 static void emit_riscv_lbu(
ir_node const *
const node)
67 riscv_emitf(node,
"lbu %D1, %A");
70 static void emit_riscv_lh(
ir_node const *
const node)
72 riscv_emitf(node,
"lh %D1, %A");
75 static void emit_riscv_lhu(
ir_node const *
const node)
77 riscv_emitf(node,
"lhu %D1, %A");
80 static void emit_riscv_lui(
ir_node const *
const node)
82 riscv_emitf(node,
"lui %D0, %H");
85 static void emit_riscv_lw(
ir_node const *
const node)
87 riscv_emitf(node,
"lw %D1, %A");
90 static void emit_riscv_mul(
ir_node const *
const node)
92 riscv_emitf(node,
"mul %D0, %S0, %S1");
95 static void emit_riscv_mulh(
ir_node const *
const node)
97 riscv_emitf(node,
"mulh %D0, %S0, %S1");
100 static void emit_riscv_mulhu(
ir_node const *
const node)
102 riscv_emitf(node,
"mulhu %D0, %S0, %S1");
105 static void emit_riscv_or(
ir_node const *
const node)
107 riscv_emitf(node,
"or %D0, %S0, %S1");
110 static void emit_riscv_ori(
ir_node const *
const node)
112 riscv_emitf(node,
"ori %D0, %S0, %I");
115 static void emit_riscv_rem(
ir_node const *
const node)
117 riscv_emitf(node,
"rem %D0, %S0, %S1");
120 static void emit_riscv_remu(
ir_node const *
const node)
122 riscv_emitf(node,
"remu %D0, %S0, %S1");
125 static void emit_riscv_ret(
ir_node const *
const node)
127 riscv_emitf(node,
"ret");
130 static void emit_riscv_sb(
ir_node const *
const node)
132 riscv_emitf(node,
"sb %S2, %A");
135 static void emit_riscv_sh(
ir_node const *
const node)
137 riscv_emitf(node,
"sh %S2, %A");
140 static void emit_riscv_sll(
ir_node const *
const node)
142 riscv_emitf(node,
"sll %D0, %S0, %S1");
145 static void emit_riscv_slli(
ir_node const *
const node)
147 riscv_emitf(node,
"slli %D0, %S0, %I");
150 static void emit_riscv_slt(
ir_node const *
const node)
152 riscv_emitf(node,
"slt %D0, %S0, %S1");
155 static void emit_riscv_sltiu(
ir_node const *
const node)
157 riscv_emitf(node,
"sltiu %D0, %S0, %I");
160 static void emit_riscv_sltu(
ir_node const *
const node)
162 riscv_emitf(node,
"sltu %D0, %S0, %S1");
165 static void emit_riscv_sra(
ir_node const *
const node)
167 riscv_emitf(node,
"sra %D0, %S0, %S1");
170 static void emit_riscv_srai(
ir_node const *
const node)
172 riscv_emitf(node,
"srai %D0, %S0, %I");
175 static void emit_riscv_srl(
ir_node const *
const node)
177 riscv_emitf(node,
"srl %D0, %S0, %S1");
180 static void emit_riscv_srli(
ir_node const *
const node)
182 riscv_emitf(node,
"srli %D0, %S0, %I");
185 static void emit_riscv_sub(
ir_node const *
const node)
187 riscv_emitf(node,
"sub %D0, %S0, %S1");
190 static void emit_riscv_sw(
ir_node const *
const node)
192 riscv_emitf(node,
"sw %S2, %A");
195 static void emit_riscv_xor(
ir_node const *
const node)
197 riscv_emitf(node,
"xor %D0, %S0, %S1");
200 static void emit_riscv_xori(
ir_node const *
const node)
202 riscv_emitf(node,
"xori %D0, %S0, %I");
207 void riscv_register_spec_emitters(
void)
209 be_set_emitter(op_riscv_add, emit_riscv_add);
210 be_set_emitter(op_riscv_addi, emit_riscv_addi);
211 be_set_emitter(op_riscv_and, emit_riscv_and);
212 be_set_emitter(op_riscv_andi, emit_riscv_andi);
213 be_set_emitter(op_riscv_div, emit_riscv_div);
214 be_set_emitter(op_riscv_divu, emit_riscv_divu);
215 be_set_emitter(op_riscv_ijmp, emit_riscv_ijmp);
216 be_set_emitter(op_riscv_jal, emit_riscv_jal);
217 be_set_emitter(op_riscv_jalr, emit_riscv_jalr);
218 be_set_emitter(op_riscv_lb, emit_riscv_lb);
219 be_set_emitter(op_riscv_lbu, emit_riscv_lbu);
220 be_set_emitter(op_riscv_lh, emit_riscv_lh);
221 be_set_emitter(op_riscv_lhu, emit_riscv_lhu);
222 be_set_emitter(op_riscv_lui, emit_riscv_lui);
223 be_set_emitter(op_riscv_lw, emit_riscv_lw);
224 be_set_emitter(op_riscv_mul, emit_riscv_mul);
225 be_set_emitter(op_riscv_mulh, emit_riscv_mulh);
226 be_set_emitter(op_riscv_mulhu, emit_riscv_mulhu);
227 be_set_emitter(op_riscv_or, emit_riscv_or);
228 be_set_emitter(op_riscv_ori, emit_riscv_ori);
229 be_set_emitter(op_riscv_rem, emit_riscv_rem);
230 be_set_emitter(op_riscv_remu, emit_riscv_remu);
231 be_set_emitter(op_riscv_ret, emit_riscv_ret);
232 be_set_emitter(op_riscv_sb, emit_riscv_sb);
233 be_set_emitter(op_riscv_sh, emit_riscv_sh);
234 be_set_emitter(op_riscv_sll, emit_riscv_sll);
235 be_set_emitter(op_riscv_slli, emit_riscv_slli);
236 be_set_emitter(op_riscv_slt, emit_riscv_slt);
237 be_set_emitter(op_riscv_sltiu, emit_riscv_sltiu);
238 be_set_emitter(op_riscv_sltu, emit_riscv_sltu);
239 be_set_emitter(op_riscv_sra, emit_riscv_sra);
240 be_set_emitter(op_riscv_srai, emit_riscv_srai);
241 be_set_emitter(op_riscv_srl, emit_riscv_srl);
242 be_set_emitter(op_riscv_srli, emit_riscv_srli);
243 be_set_emitter(op_riscv_sub, emit_riscv_sub);
244 be_set_emitter(op_riscv_sw, emit_riscv_sw);
245 be_set_emitter(op_riscv_xor, emit_riscv_xor);
246 be_set_emitter(op_riscv_xori, emit_riscv_xori);
250 void riscv_register_spec_binary_emitters(
void)
struct ir_node ir_node
Procedure Graph Node.