1 #include "gen_riscv_new_nodes.h"
4 #include "riscv_bearch_t.h"
5 #include "gen_riscv_regalloc_if.h"
6 #include "riscv_new_nodes_t.h"
11 ir_op *op_riscv_add = NULL;
12 ir_op *op_riscv_addi = NULL;
13 ir_op *op_riscv_and = NULL;
14 ir_op *op_riscv_andi = NULL;
15 ir_op *op_riscv_bcc = NULL;
16 ir_op *op_riscv_div = NULL;
17 ir_op *op_riscv_divu = NULL;
18 ir_op *op_riscv_ijmp = NULL;
19 ir_op *op_riscv_j = NULL;
20 ir_op *op_riscv_jal = NULL;
21 ir_op *op_riscv_jalr = NULL;
22 ir_op *op_riscv_lb = NULL;
23 ir_op *op_riscv_lbu = NULL;
24 ir_op *op_riscv_lh = NULL;
25 ir_op *op_riscv_lhu = NULL;
26 ir_op *op_riscv_lui = NULL;
27 ir_op *op_riscv_lw = NULL;
28 ir_op *op_riscv_mul = NULL;
29 ir_op *op_riscv_mulh = NULL;
30 ir_op *op_riscv_mulhu = NULL;
31 ir_op *op_riscv_or = NULL;
32 ir_op *op_riscv_ori = NULL;
33 ir_op *op_riscv_rem = NULL;
34 ir_op *op_riscv_remu = NULL;
35 ir_op *op_riscv_ret = NULL;
36 ir_op *op_riscv_sb = NULL;
37 ir_op *op_riscv_sh = NULL;
38 ir_op *op_riscv_sll = NULL;
39 ir_op *op_riscv_slli = NULL;
40 ir_op *op_riscv_slt = NULL;
41 ir_op *op_riscv_sltiu = NULL;
42 ir_op *op_riscv_sltu = NULL;
43 ir_op *op_riscv_sra = NULL;
44 ir_op *op_riscv_srai = NULL;
45 ir_op *op_riscv_srl = NULL;
46 ir_op *op_riscv_srli = NULL;
47 ir_op *op_riscv_sub = NULL;
48 ir_op *op_riscv_sw = NULL;
49 ir_op *op_riscv_switch = NULL;
50 ir_op *op_riscv_xor = NULL;
51 ir_op *op_riscv_xori = NULL;
54 static int riscv_opcode_start = -1;
57 #define riscv_op_tag FOURCC('r', 'i', 's', 'c')
60 int is_riscv_op(
const ir_op *op)
62 return get_op_tag(op) == riscv_op_tag;
66 int is_riscv_irn(
const ir_node *node)
71 int get_riscv_irn_opcode(
const ir_node *node)
73 assert(is_riscv_irn(node));
78 #define BIT(x) (1 << (x))
85 static arch_register_req_t
const *in_reqs[] = {
86 &riscv_class_reg_req_gp,
87 &riscv_class_reg_req_gp,
102 arch_irn_flags_t irn_flags = arch_irn_flags_none;
103 irn_flags |= arch_irn_flag_rematerializable;
105 be_info_init_irn(res, irn_flags, in_reqs, n_res);
108 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
109 out_infos[0].req = &riscv_class_reg_req_gp;
117 static arch_register_req_t
const *in_reqs[] = {
118 &riscv_class_reg_req_gp,
132 arch_irn_flags_t irn_flags = arch_irn_flags_none;
133 irn_flags |= arch_irn_flag_rematerializable;
135 be_info_init_irn(res, irn_flags, in_reqs, n_res);
140 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
141 out_infos[0].req = &riscv_class_reg_req_gp;
149 static arch_register_req_t
const *in_reqs[] = {
150 &riscv_class_reg_req_gp,
151 &riscv_class_reg_req_gp,
166 arch_irn_flags_t irn_flags = arch_irn_flags_none;
167 irn_flags |= arch_irn_flag_rematerializable;
169 be_info_init_irn(res, irn_flags, in_reqs, n_res);
172 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
173 out_infos[0].req = &riscv_class_reg_req_gp;
181 static arch_register_req_t
const *in_reqs[] = {
182 &riscv_class_reg_req_gp,
196 arch_irn_flags_t irn_flags = arch_irn_flags_none;
197 irn_flags |= arch_irn_flag_rematerializable;
199 be_info_init_irn(res, irn_flags, in_reqs, n_res);
204 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
205 out_infos[0].req = &riscv_class_reg_req_gp;
213 static arch_register_req_t
const *in_reqs[] = {
214 &riscv_class_reg_req_gp,
215 &riscv_class_reg_req_gp,
230 arch_irn_flags_t irn_flags = arch_irn_flags_none;
232 be_info_init_irn(res, irn_flags, in_reqs, n_res);
236 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
237 out_infos[0].req = &arch_exec_requirement;
238 out_infos[1].req = &arch_exec_requirement;
246 static arch_register_req_t
const *in_reqs[] = {
247 &riscv_class_reg_req_gp,
248 &riscv_class_reg_req_gp,
263 arch_irn_flags_t irn_flags = arch_irn_flags_none;
264 irn_flags |= arch_irn_flag_rematerializable;
266 be_info_init_irn(res, irn_flags, in_reqs, n_res);
269 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
270 out_infos[0].req = &riscv_class_reg_req_gp;
278 static arch_register_req_t
const *in_reqs[] = {
279 &riscv_class_reg_req_gp,
280 &riscv_class_reg_req_gp,
295 arch_irn_flags_t irn_flags = arch_irn_flags_none;
296 irn_flags |= arch_irn_flag_rematerializable;
298 be_info_init_irn(res, irn_flags, in_reqs, n_res);
301 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
302 out_infos[0].req = &riscv_class_reg_req_gp;
310 static arch_register_req_t
const *in_reqs[] = {
311 &riscv_class_reg_req_gp,
325 arch_irn_flags_t irn_flags = arch_irn_flags_none;
327 be_info_init_irn(res, irn_flags, in_reqs, n_res);
330 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
331 out_infos[0].req = &arch_exec_requirement;
339 arch_register_req_t
const **
const in_reqs = NULL;
348 arch_irn_flags_t irn_flags = arch_irn_flags_none;
349 irn_flags |= arch_irn_flag_simple_jump;
350 irn_flags |= arch_irn_flag_fallthrough;
352 be_info_init_irn(res, irn_flags, in_reqs, n_res);
355 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
356 out_infos[0].req = &arch_exec_requirement;
362 ir_node *new_bd_riscv_jal(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
int n_res,
ir_entity *
const ent, int32_t
const val)
372 arch_irn_flags_t irn_flags = arch_irn_flags_none;
373 be_info_init_irn(res, irn_flags, in_reqs, n_res);
383 ir_node *new_bd_riscv_jalr(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
int n_res)
393 arch_irn_flags_t irn_flags = arch_irn_flags_none;
394 be_info_init_irn(res, irn_flags, in_reqs, n_res);
404 static arch_register_req_t
const *in_reqs[] = {
405 &arch_memory_requirement,
406 &riscv_class_reg_req_gp,
421 arch_irn_flags_t irn_flags = arch_irn_flags_none;
423 be_info_init_irn(res, irn_flags, in_reqs, n_res);
428 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
429 out_infos[0].req = &arch_memory_requirement;
430 out_infos[1].req = &riscv_class_reg_req_gp;
438 static arch_register_req_t
const *in_reqs[] = {
439 &arch_memory_requirement,
440 &riscv_class_reg_req_gp,
455 arch_irn_flags_t irn_flags = arch_irn_flags_none;
457 be_info_init_irn(res, irn_flags, in_reqs, n_res);
462 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
463 out_infos[0].req = &arch_memory_requirement;
464 out_infos[1].req = &riscv_class_reg_req_gp;
472 static arch_register_req_t
const *in_reqs[] = {
473 &arch_memory_requirement,
474 &riscv_class_reg_req_gp,
489 arch_irn_flags_t irn_flags = arch_irn_flags_none;
491 be_info_init_irn(res, irn_flags, in_reqs, n_res);
496 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
497 out_infos[0].req = &arch_memory_requirement;
498 out_infos[1].req = &riscv_class_reg_req_gp;
506 static arch_register_req_t
const *in_reqs[] = {
507 &arch_memory_requirement,
508 &riscv_class_reg_req_gp,
523 arch_irn_flags_t irn_flags = arch_irn_flags_none;
525 be_info_init_irn(res, irn_flags, in_reqs, n_res);
530 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
531 out_infos[0].req = &arch_memory_requirement;
532 out_infos[1].req = &riscv_class_reg_req_gp;
540 static arch_register_req_t
const *in_reqs[] = {
550 arch_irn_flags_t irn_flags = arch_irn_flags_none;
551 irn_flags |= arch_irn_flag_rematerializable;
553 be_info_init_irn(res, irn_flags, in_reqs, n_res);
558 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
559 out_infos[0].req = &riscv_class_reg_req_gp;
567 static arch_register_req_t
const *in_reqs[] = {
568 &arch_memory_requirement,
569 &riscv_class_reg_req_gp,
584 arch_irn_flags_t irn_flags = arch_irn_flags_none;
586 be_info_init_irn(res, irn_flags, in_reqs, n_res);
591 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
592 out_infos[0].req = &arch_memory_requirement;
593 out_infos[1].req = &riscv_class_reg_req_gp;
601 static arch_register_req_t
const *in_reqs[] = {
602 &riscv_class_reg_req_gp,
603 &riscv_class_reg_req_gp,
618 arch_irn_flags_t irn_flags = arch_irn_flags_none;
619 irn_flags |= arch_irn_flag_rematerializable;
621 be_info_init_irn(res, irn_flags, in_reqs, n_res);
624 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
625 out_infos[0].req = &riscv_class_reg_req_gp;
633 static arch_register_req_t
const *in_reqs[] = {
634 &riscv_class_reg_req_gp,
635 &riscv_class_reg_req_gp,
650 arch_irn_flags_t irn_flags = arch_irn_flags_none;
651 irn_flags |= arch_irn_flag_rematerializable;
653 be_info_init_irn(res, irn_flags, in_reqs, n_res);
656 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
657 out_infos[0].req = &riscv_class_reg_req_gp;
665 static arch_register_req_t
const *in_reqs[] = {
666 &riscv_class_reg_req_gp,
667 &riscv_class_reg_req_gp,
682 arch_irn_flags_t irn_flags = arch_irn_flags_none;
683 irn_flags |= arch_irn_flag_rematerializable;
685 be_info_init_irn(res, irn_flags, in_reqs, n_res);
688 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
689 out_infos[0].req = &riscv_class_reg_req_gp;
697 static arch_register_req_t
const *in_reqs[] = {
698 &riscv_class_reg_req_gp,
699 &riscv_class_reg_req_gp,
714 arch_irn_flags_t irn_flags = arch_irn_flags_none;
715 irn_flags |= arch_irn_flag_rematerializable;
717 be_info_init_irn(res, irn_flags, in_reqs, n_res);
720 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
721 out_infos[0].req = &riscv_class_reg_req_gp;
729 static arch_register_req_t
const *in_reqs[] = {
730 &riscv_class_reg_req_gp,
744 arch_irn_flags_t irn_flags = arch_irn_flags_none;
745 irn_flags |= arch_irn_flag_rematerializable;
747 be_info_init_irn(res, irn_flags, in_reqs, n_res);
752 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
753 out_infos[0].req = &riscv_class_reg_req_gp;
761 static arch_register_req_t
const *in_reqs[] = {
762 &riscv_class_reg_req_gp,
763 &riscv_class_reg_req_gp,
778 arch_irn_flags_t irn_flags = arch_irn_flags_none;
779 irn_flags |= arch_irn_flag_rematerializable;
781 be_info_init_irn(res, irn_flags, in_reqs, n_res);
784 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
785 out_infos[0].req = &riscv_class_reg_req_gp;
793 static arch_register_req_t
const *in_reqs[] = {
794 &riscv_class_reg_req_gp,
795 &riscv_class_reg_req_gp,
810 arch_irn_flags_t irn_flags = arch_irn_flags_none;
811 irn_flags |= arch_irn_flag_rematerializable;
813 be_info_init_irn(res, irn_flags, in_reqs, n_res);
816 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
817 out_infos[0].req = &riscv_class_reg_req_gp;
823 ir_node *new_bd_riscv_ret(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs)
833 arch_irn_flags_t irn_flags = arch_irn_flags_none;
835 be_info_init_irn(res, irn_flags, in_reqs, n_res);
838 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
839 out_infos[0].req = &arch_exec_requirement;
847 static arch_register_req_t
const *in_reqs[] = {
848 &arch_memory_requirement,
849 &riscv_class_reg_req_gp,
850 &riscv_class_reg_req_gp,
866 arch_irn_flags_t irn_flags = arch_irn_flags_none;
868 be_info_init_irn(res, irn_flags, in_reqs, n_res);
873 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
874 out_infos[0].req = &arch_memory_requirement;
882 static arch_register_req_t
const *in_reqs[] = {
883 &arch_memory_requirement,
884 &riscv_class_reg_req_gp,
885 &riscv_class_reg_req_gp,
901 arch_irn_flags_t irn_flags = arch_irn_flags_none;
903 be_info_init_irn(res, irn_flags, in_reqs, n_res);
908 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
909 out_infos[0].req = &arch_memory_requirement;
917 static arch_register_req_t
const *in_reqs[] = {
918 &riscv_class_reg_req_gp,
919 &riscv_class_reg_req_gp,
934 arch_irn_flags_t irn_flags = arch_irn_flags_none;
935 irn_flags |= arch_irn_flag_rematerializable;
937 be_info_init_irn(res, irn_flags, in_reqs, n_res);
940 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
941 out_infos[0].req = &riscv_class_reg_req_gp;
949 static arch_register_req_t
const *in_reqs[] = {
950 &riscv_class_reg_req_gp,
964 arch_irn_flags_t irn_flags = arch_irn_flags_none;
965 irn_flags |= arch_irn_flag_rematerializable;
967 be_info_init_irn(res, irn_flags, in_reqs, n_res);
972 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
973 out_infos[0].req = &riscv_class_reg_req_gp;
981 static arch_register_req_t
const *in_reqs[] = {
982 &riscv_class_reg_req_gp,
983 &riscv_class_reg_req_gp,
998 arch_irn_flags_t irn_flags = arch_irn_flags_none;
999 irn_flags |= arch_irn_flag_rematerializable;
1000 int const n_res = 1;
1001 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1004 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1005 out_infos[0].req = &riscv_class_reg_req_gp;
1013 static arch_register_req_t
const *in_reqs[] = {
1014 &riscv_class_reg_req_gp,
1028 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1029 irn_flags |= arch_irn_flag_rematerializable;
1030 int const n_res = 1;
1031 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1036 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1037 out_infos[0].req = &riscv_class_reg_req_gp;
1045 static arch_register_req_t
const *in_reqs[] = {
1046 &riscv_class_reg_req_gp,
1047 &riscv_class_reg_req_gp,
1062 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1063 irn_flags |= arch_irn_flag_rematerializable;
1064 int const n_res = 1;
1065 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1068 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1069 out_infos[0].req = &riscv_class_reg_req_gp;
1077 static arch_register_req_t
const *in_reqs[] = {
1078 &riscv_class_reg_req_gp,
1079 &riscv_class_reg_req_gp,
1094 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1095 irn_flags |= arch_irn_flag_rematerializable;
1096 int const n_res = 1;
1097 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1100 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1101 out_infos[0].req = &riscv_class_reg_req_gp;
1109 static arch_register_req_t
const *in_reqs[] = {
1110 &riscv_class_reg_req_gp,
1124 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1125 irn_flags |= arch_irn_flag_rematerializable;
1126 int const n_res = 1;
1127 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1132 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1133 out_infos[0].req = &riscv_class_reg_req_gp;
1141 static arch_register_req_t
const *in_reqs[] = {
1142 &riscv_class_reg_req_gp,
1143 &riscv_class_reg_req_gp,
1158 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1159 irn_flags |= arch_irn_flag_rematerializable;
1160 int const n_res = 1;
1161 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1164 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1165 out_infos[0].req = &riscv_class_reg_req_gp;
1173 static arch_register_req_t
const *in_reqs[] = {
1174 &riscv_class_reg_req_gp,
1188 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1189 irn_flags |= arch_irn_flag_rematerializable;
1190 int const n_res = 1;
1191 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1196 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1197 out_infos[0].req = &riscv_class_reg_req_gp;
1205 static arch_register_req_t
const *in_reqs[] = {
1206 &riscv_class_reg_req_gp,
1207 &riscv_class_reg_req_gp,
1222 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1223 irn_flags |= arch_irn_flag_rematerializable;
1224 int const n_res = 1;
1225 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1228 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1229 out_infos[0].req = &riscv_class_reg_req_gp;
1237 static arch_register_req_t
const *in_reqs[] = {
1238 &arch_memory_requirement,
1239 &riscv_class_reg_req_gp,
1240 &riscv_class_reg_req_gp,
1256 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1257 int const n_res = 1;
1258 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1263 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1264 out_infos[0].req = &arch_memory_requirement;
1272 static arch_register_req_t
const *in_reqs[] = {
1273 &riscv_class_reg_req_gp,
1287 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1288 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1291 be_switch_attr_init(res, &attr->swtch, table, table_entity);
1299 static arch_register_req_t
const *in_reqs[] = {
1300 &riscv_class_reg_req_gp,
1301 &riscv_class_reg_req_gp,
1316 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1317 irn_flags |= arch_irn_flag_rematerializable;
1318 int const n_res = 1;
1319 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1322 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1323 out_infos[0].req = &riscv_class_reg_req_gp;
1331 static arch_register_req_t
const *in_reqs[] = {
1332 &riscv_class_reg_req_gp,
1346 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1347 irn_flags |= arch_irn_flag_rematerializable;
1348 int const n_res = 1;
1349 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1354 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1355 out_infos[0].req = &riscv_class_reg_req_gp;
1366 void riscv_create_opcodes(
void)
1371 riscv_opcode_start = cur_opcode;
1376 set_op_tag(op, riscv_op_tag);
1382 set_op_tag(op, riscv_op_tag);
1388 set_op_tag(op, riscv_op_tag);
1394 set_op_tag(op, riscv_op_tag);
1400 set_op_tag(op, riscv_op_tag);
1406 set_op_tag(op, riscv_op_tag);
1412 set_op_tag(op, riscv_op_tag);
1418 set_op_tag(op, riscv_op_tag);
1424 set_op_tag(op, riscv_op_tag);
1430 set_op_tag(op, riscv_op_tag);
1436 set_op_tag(op, riscv_op_tag);
1442 set_op_tag(op, riscv_op_tag);
1448 set_op_tag(op, riscv_op_tag);
1454 set_op_tag(op, riscv_op_tag);
1460 set_op_tag(op, riscv_op_tag);
1466 set_op_tag(op, riscv_op_tag);
1472 set_op_tag(op, riscv_op_tag);
1478 set_op_tag(op, riscv_op_tag);
1484 set_op_tag(op, riscv_op_tag);
1490 set_op_tag(op, riscv_op_tag);
1491 op_riscv_mulhu = op;
1496 set_op_tag(op, riscv_op_tag);
1502 set_op_tag(op, riscv_op_tag);
1508 set_op_tag(op, riscv_op_tag);
1514 set_op_tag(op, riscv_op_tag);
1520 set_op_tag(op, riscv_op_tag);
1526 set_op_tag(op, riscv_op_tag);
1532 set_op_tag(op, riscv_op_tag);
1538 set_op_tag(op, riscv_op_tag);
1544 set_op_tag(op, riscv_op_tag);
1550 set_op_tag(op, riscv_op_tag);
1556 set_op_tag(op, riscv_op_tag);
1557 op_riscv_sltiu = op;
1562 set_op_tag(op, riscv_op_tag);
1568 set_op_tag(op, riscv_op_tag);
1574 set_op_tag(op, riscv_op_tag);
1580 set_op_tag(op, riscv_op_tag);
1586 set_op_tag(op, riscv_op_tag);
1592 set_op_tag(op, riscv_op_tag);
1598 set_op_tag(op, riscv_op_tag);
1604 set_op_tag(op, riscv_op_tag);
1605 op_riscv_switch = op;
1610 set_op_tag(op, riscv_op_tag);
1616 set_op_tag(op, riscv_op_tag);
1621 void riscv_free_opcodes(
void)
1623 free_ir_op(op_riscv_add); op_riscv_add = NULL;
1624 free_ir_op(op_riscv_addi); op_riscv_addi = NULL;
1625 free_ir_op(op_riscv_and); op_riscv_and = NULL;
1626 free_ir_op(op_riscv_andi); op_riscv_andi = NULL;
1627 free_ir_op(op_riscv_bcc); op_riscv_bcc = NULL;
1628 free_ir_op(op_riscv_div); op_riscv_div = NULL;
1629 free_ir_op(op_riscv_divu); op_riscv_divu = NULL;
1630 free_ir_op(op_riscv_ijmp); op_riscv_ijmp = NULL;
1632 free_ir_op(op_riscv_jal); op_riscv_jal = NULL;
1633 free_ir_op(op_riscv_jalr); op_riscv_jalr = NULL;
1635 free_ir_op(op_riscv_lbu); op_riscv_lbu = NULL;
1637 free_ir_op(op_riscv_lhu); op_riscv_lhu = NULL;
1638 free_ir_op(op_riscv_lui); op_riscv_lui = NULL;
1640 free_ir_op(op_riscv_mul); op_riscv_mul = NULL;
1641 free_ir_op(op_riscv_mulh); op_riscv_mulh = NULL;
1642 free_ir_op(op_riscv_mulhu); op_riscv_mulhu = NULL;
1644 free_ir_op(op_riscv_ori); op_riscv_ori = NULL;
1645 free_ir_op(op_riscv_rem); op_riscv_rem = NULL;
1646 free_ir_op(op_riscv_remu); op_riscv_remu = NULL;
1647 free_ir_op(op_riscv_ret); op_riscv_ret = NULL;
1650 free_ir_op(op_riscv_sll); op_riscv_sll = NULL;
1651 free_ir_op(op_riscv_slli); op_riscv_slli = NULL;
1652 free_ir_op(op_riscv_slt); op_riscv_slt = NULL;
1653 free_ir_op(op_riscv_sltiu); op_riscv_sltiu = NULL;
1654 free_ir_op(op_riscv_sltu); op_riscv_sltu = NULL;
1655 free_ir_op(op_riscv_sra); op_riscv_sra = NULL;
1656 free_ir_op(op_riscv_srai); op_riscv_srai = NULL;
1657 free_ir_op(op_riscv_srl); op_riscv_srl = NULL;
1658 free_ir_op(op_riscv_srli); op_riscv_srli = NULL;
1659 free_ir_op(op_riscv_sub); op_riscv_sub = NULL;
1661 free_ir_op(op_riscv_switch); op_riscv_switch = NULL;
1662 free_ir_op(op_riscv_xor); op_riscv_xor = NULL;
1663 free_ir_op(op_riscv_xori); op_riscv_xori = NULL;
void set_op_dump(ir_op *op, dump_node_func func)
Sets dump callback func for operation op.
void * get_irn_generic_attr(ir_node *node)
Returns a pointer to the node attributes.
ir_mode * mode_X
execution
unsigned get_next_ir_opcodes(unsigned num)
Returns the next free n IR opcode number, allows to register a bunch of user ops. ...
void set_op_attrs_equal(ir_op *op, node_attrs_equal_func func)
Sets attrs_equal callback func for operation op.
ir_op * new_ir_op(unsigned code, const char *name, op_pin_state p, irop_flags flags, op_arity opar, int op_index, size_t attr_size)
Creates a new IR operation.
Nodes of this opcode can be placed in any basic block.
struct ir_graph ir_graph
Procedure Graph.
struct dbg_info dbg_info
Source Reference.
struct ir_node ir_node
Procedure Graph Node.
Forking control flow at this operation.
ir_node * new_ir_node(dbg_info *db, ir_graph *irg, ir_node *block, ir_op *op, ir_mode *mode, int arity, ir_node *const *in)
IR node constructor.
This operation is a control flow operation.
unsigned get_irn_opcode(const ir_node *node)
Returns the opcode-enum of the node.
struct ir_switch_table ir_switch_table
A switch table mapping integer numbers to proj-numbers of a Switch-node.
struct ir_entity ir_entity
Entity.
ir_graph * get_irn_irg(const ir_node *node)
Returns the ir_graph this node belongs to.
Node must remain in this basic block if it can throw an exception, else can float.
ir_op * get_irn_op(const ir_node *node)
Returns the opcode struct of the node.
void ir_op_set_memory_index(ir_op *op, int memory_index)
Sets memory input of operation using memory.
struct ir_op ir_op
Node Opcode.
ir_node * optimize_node(ir_node *n)
Applies local optimizations to a single node.
void free_ir_op(ir_op *code)
Frees an ir operation.
Nodes must remain in this basic block.
This operation jumps to an unknown destination.
ir_mode * mode_T
tuple (none)
void verify_new_node(ir_node *node)
If firm is built in debug mode, verify that a newly created node is fine.
void set_op_copy_attr(ir_op *op, copy_attr_func func)
Sets attribute copy callback func for operation op.
This operation has a memory input and may change the memory state.
Any other arity, either fixed for the opcode or known when creating the node.