1 #include "gen_amd64_new_nodes.h"
4 #include "amd64_bearch_t.h"
5 #include "gen_amd64_regalloc_if.h"
6 #include "amd64_new_nodes_t.h"
11 ir_op *op_amd64_add = NULL;
12 ir_op *op_amd64_adds = NULL;
13 ir_op *op_amd64_and = NULL;
14 ir_op *op_amd64_bsf = NULL;
15 ir_op *op_amd64_bsr = NULL;
16 ir_op *op_amd64_call = NULL;
17 ir_op *op_amd64_cltd = NULL;
18 ir_op *op_amd64_cmp = NULL;
19 ir_op *op_amd64_cmpxchg = NULL;
20 ir_op *op_amd64_copyB = NULL;
21 ir_op *op_amd64_copyB_i = NULL;
22 ir_op *op_amd64_cqto = NULL;
23 ir_op *op_amd64_cvtsd2ss = NULL;
24 ir_op *op_amd64_cvtsi2sd = NULL;
25 ir_op *op_amd64_cvtsi2ss = NULL;
26 ir_op *op_amd64_cvtss2sd = NULL;
27 ir_op *op_amd64_cvttsd2si = NULL;
28 ir_op *op_amd64_cvttss2si = NULL;
29 ir_op *op_amd64_div = NULL;
30 ir_op *op_amd64_divs = NULL;
31 ir_op *op_amd64_fadd = NULL;
32 ir_op *op_amd64_fchs = NULL;
33 ir_op *op_amd64_fdiv = NULL;
34 ir_op *op_amd64_fdup = NULL;
35 ir_op *op_amd64_fild = NULL;
36 ir_op *op_amd64_fisttp = NULL;
37 ir_op *op_amd64_fld = NULL;
38 ir_op *op_amd64_fld1 = NULL;
39 ir_op *op_amd64_fldz = NULL;
40 ir_op *op_amd64_fmul = NULL;
41 ir_op *op_amd64_fpop = NULL;
42 ir_op *op_amd64_fst = NULL;
43 ir_op *op_amd64_fstp = NULL;
44 ir_op *op_amd64_fsub = NULL;
45 ir_op *op_amd64_fucomi = NULL;
46 ir_op *op_amd64_fxch = NULL;
47 ir_op *op_amd64_haddpd = NULL;
48 ir_op *op_amd64_idiv = NULL;
49 ir_op *op_amd64_ijmp = NULL;
50 ir_op *op_amd64_imul = NULL;
51 ir_op *op_amd64_imul_1op = NULL;
52 ir_op *op_amd64_jcc = NULL;
53 ir_op *op_amd64_jmp = NULL;
54 ir_op *op_amd64_jmp_switch = NULL;
55 ir_op *op_amd64_l_haddpd = NULL;
56 ir_op *op_amd64_l_punpckldq = NULL;
57 ir_op *op_amd64_l_subpd = NULL;
58 ir_op *op_amd64_lea = NULL;
59 ir_op *op_amd64_leave = NULL;
60 ir_op *op_amd64_mov_gp = NULL;
61 ir_op *op_amd64_mov_imm = NULL;
62 ir_op *op_amd64_mov_store = NULL;
63 ir_op *op_amd64_movd = NULL;
64 ir_op *op_amd64_movd_gp_xmm = NULL;
65 ir_op *op_amd64_movd_xmm_gp = NULL;
66 ir_op *op_amd64_movdqa = NULL;
67 ir_op *op_amd64_movdqu = NULL;
68 ir_op *op_amd64_movdqu_store = NULL;
69 ir_op *op_amd64_movs = NULL;
70 ir_op *op_amd64_movs_store_xmm = NULL;
71 ir_op *op_amd64_movs_xmm = NULL;
72 ir_op *op_amd64_mul = NULL;
73 ir_op *op_amd64_muls = NULL;
74 ir_op *op_amd64_neg = NULL;
75 ir_op *op_amd64_not = NULL;
76 ir_op *op_amd64_or = NULL;
77 ir_op *op_amd64_pop_am = NULL;
78 ir_op *op_amd64_punpckldq = NULL;
79 ir_op *op_amd64_push_am = NULL;
80 ir_op *op_amd64_push_reg = NULL;
81 ir_op *op_amd64_ret = NULL;
82 ir_op *op_amd64_sar = NULL;
83 ir_op *op_amd64_sbb = NULL;
84 ir_op *op_amd64_setcc = NULL;
85 ir_op *op_amd64_shl = NULL;
86 ir_op *op_amd64_shr = NULL;
87 ir_op *op_amd64_sub = NULL;
88 ir_op *op_amd64_sub_sp = NULL;
89 ir_op *op_amd64_subpd = NULL;
90 ir_op *op_amd64_subs = NULL;
91 ir_op *op_amd64_test = NULL;
92 ir_op *op_amd64_ucomis = NULL;
93 ir_op *op_amd64_xor = NULL;
94 ir_op *op_amd64_xor_0 = NULL;
95 ir_op *op_amd64_xorp = NULL;
96 ir_op *op_amd64_xorp_0 = NULL;
99 static int amd64_opcode_start = -1;
102 #define amd64_op_tag FOURCC('a', 'm', 'd', '6')
105 int is_amd64_op(
const ir_op *op)
107 return get_op_tag(op) == amd64_op_tag;
111 int is_amd64_irn(
const ir_node *node)
116 int get_amd64_irn_opcode(
const ir_node *node)
118 assert(is_amd64_irn(node));
123 #define BIT(x) (1 << (x))
125 static const unsigned amd64_limit_gp_rbp[] = { BIT(REG_GP_RBP), 0 };
126 static const unsigned amd64_limit_gp_rsp[] = { BIT(REG_GP_RSP), 0 };
128 static const arch_register_req_t amd64_requirements_gp_rbp_I = {
129 .cls = &amd64_reg_classes[CLASS_amd64_gp],
130 .limited = amd64_limit_gp_rbp,
132 .must_be_different = 0,
137 static const arch_register_req_t amd64_requirements_gp_rsp_I = {
138 .cls = &amd64_reg_classes[CLASS_amd64_gp],
139 .limited = amd64_limit_gp_rsp,
141 .must_be_different = 0,
146 static const arch_register_req_t amd64_requirements_gp_in_r0 = {
147 .cls = &amd64_reg_classes[CLASS_amd64_gp],
150 .must_be_different = 0,
156 ir_node *new_bd_amd64_add(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
166 arch_irn_flags_t irn_flags = arch_irn_flags_none;
167 irn_flags |= arch_irn_flag_modify_flags;
168 irn_flags |= arch_irn_flag_rematerializable;
169 irn_flags |= (arch_irn_flags_t)amd64_arch_irn_flag_commutative_binop;
171 be_info_init_irn(res, irn_flags, in_reqs, n_res);
175 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
176 out_infos[0].req = &amd64_class_reg_req_gp;
177 out_infos[1].req = &amd64_class_reg_req_flags;
178 out_infos[2].req = &arch_memory_requirement;
184 ir_node *new_bd_amd64_adds(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
194 arch_irn_flags_t irn_flags = arch_irn_flags_none;
195 irn_flags |= arch_irn_flag_rematerializable;
196 irn_flags |= (arch_irn_flags_t)amd64_arch_irn_flag_commutative_binop;
198 be_info_init_irn(res, irn_flags, in_reqs, n_res);
202 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
203 out_infos[0].req = &amd64_class_reg_req_xmm;
204 out_infos[1].req = &arch_no_requirement;
205 out_infos[2].req = &arch_memory_requirement;
211 ir_node *new_bd_amd64_and(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
221 arch_irn_flags_t irn_flags = arch_irn_flags_none;
222 irn_flags |= arch_irn_flag_modify_flags;
223 irn_flags |= arch_irn_flag_rematerializable;
224 irn_flags |= (arch_irn_flags_t)amd64_arch_irn_flag_commutative_binop;
226 be_info_init_irn(res, irn_flags, in_reqs, n_res);
230 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
231 out_infos[0].req = &amd64_class_reg_req_gp;
232 out_infos[1].req = &amd64_class_reg_req_flags;
233 out_infos[2].req = &arch_memory_requirement;
239 ir_node *new_bd_amd64_bsf(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
249 arch_irn_flags_t irn_flags = arch_irn_flags_none;
250 irn_flags |= arch_irn_flag_modify_flags;
251 irn_flags |= arch_irn_flag_rematerializable;
253 be_info_init_irn(res, irn_flags, in_reqs, n_res);
256 init_amd64_attributes(res, op_mode, size);
258 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
259 out_infos[0].req = &amd64_class_reg_req_gp;
260 out_infos[1].req = &amd64_class_reg_req_flags;
261 out_infos[2].req = &arch_memory_requirement;
267 ir_node *new_bd_amd64_bsr(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
277 arch_irn_flags_t irn_flags = arch_irn_flags_none;
278 irn_flags |= arch_irn_flag_modify_flags;
279 irn_flags |= arch_irn_flag_rematerializable;
281 be_info_init_irn(res, irn_flags, in_reqs, n_res);
284 init_amd64_attributes(res, op_mode, size);
286 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
287 out_infos[0].req = &amd64_class_reg_req_gp;
288 out_infos[1].req = &amd64_class_reg_req_flags;
289 out_infos[2].req = &arch_memory_requirement;
295 ir_node *new_bd_amd64_call(
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,
const amd64_call_addr_attr_t *attr_init)
305 arch_irn_flags_t irn_flags = arch_irn_flags_none;
306 irn_flags |= arch_irn_flag_modify_flags;
307 be_info_init_irn(res, irn_flags, in_reqs, n_res);
318 static arch_register_req_t
const *in_reqs[] = {
319 &amd64_single_reg_req_gp_rax,
333 arch_irn_flags_t irn_flags = arch_irn_flags_none;
335 be_info_init_irn(res, irn_flags, in_reqs, n_res);
338 amd64_op_mode_t op_mode = AMD64_OP_NONE;
339 x86_insn_size_t size = X86_SIZE_32;
341 init_amd64_attributes(res, op_mode, size);
342 arch_set_additional_pressure(res, &amd64_reg_classes[CLASS_amd64_gp], 1);
343 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
344 out_infos[0].req = &amd64_single_reg_req_gp_rdx;
350 ir_node *new_bd_amd64_cmp(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
360 arch_irn_flags_t irn_flags = arch_irn_flags_none;
361 irn_flags |= arch_irn_flag_modify_flags;
362 irn_flags |= arch_irn_flag_rematerializable;
364 be_info_init_irn(res, irn_flags, in_reqs, n_res);
368 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
369 out_infos[0].req = &arch_no_requirement;
370 out_infos[1].req = &amd64_class_reg_req_flags;
371 out_infos[2].req = &arch_memory_requirement;
377 ir_node *new_bd_amd64_cmpxchg(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
387 arch_irn_flags_t irn_flags = arch_irn_flags_none;
388 irn_flags |= arch_irn_flag_modify_flags;
390 be_info_init_irn(res, irn_flags, in_reqs, n_res);
394 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
395 out_infos[0].req = &amd64_single_reg_req_gp_rax;
396 out_infos[1].req = &amd64_class_reg_req_flags;
397 out_infos[2].req = &arch_memory_requirement;
405 static arch_register_req_t
const *in_reqs[] = {
406 &amd64_single_reg_req_gp_rdi,
407 &amd64_single_reg_req_gp_rsi,
408 &amd64_single_reg_req_gp_rcx,
409 &arch_memory_requirement,
426 arch_irn_flags_t irn_flags = arch_irn_flags_none;
428 be_info_init_irn(res, irn_flags, in_reqs, n_res);
431 init_amd64_attributes(res, AMD64_OP_NONE, size);
432 init_amd64_copyb_attributes(res, size);
433 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
434 out_infos[0].req = &amd64_single_reg_req_gp_rdi;
435 out_infos[1].req = &amd64_single_reg_req_gp_rsi;
436 out_infos[2].req = &amd64_single_reg_req_gp_rcx;
437 out_infos[3].req = &arch_memory_requirement;
445 static arch_register_req_t
const *in_reqs[] = {
446 &amd64_single_reg_req_gp_rdi,
447 &amd64_single_reg_req_gp_rsi,
448 &arch_memory_requirement,
464 arch_irn_flags_t irn_flags = arch_irn_flags_none;
466 be_info_init_irn(res, irn_flags, in_reqs, n_res);
469 init_amd64_attributes(res, AMD64_OP_NONE, size);
470 init_amd64_copyb_attributes(res, size);
471 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
472 out_infos[0].req = &amd64_single_reg_req_gp_rdi;
473 out_infos[1].req = &amd64_single_reg_req_gp_rsi;
474 out_infos[2].req = &arch_memory_requirement;
482 static arch_register_req_t
const *in_reqs[] = {
483 &amd64_single_reg_req_gp_rax,
497 arch_irn_flags_t irn_flags = arch_irn_flags_none;
499 be_info_init_irn(res, irn_flags, in_reqs, n_res);
502 amd64_op_mode_t op_mode = AMD64_OP_NONE;
503 x86_insn_size_t size = X86_SIZE_64;
505 init_amd64_attributes(res, op_mode, size);
506 arch_set_additional_pressure(res, &amd64_reg_classes[CLASS_amd64_gp], 1);
507 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
508 out_infos[0].req = &amd64_single_reg_req_gp_rdx;
514 ir_node *new_bd_amd64_cvtsd2ss(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, amd64_op_mode_t op_mode, x86_addr_t addr)
524 arch_irn_flags_t irn_flags = arch_irn_flags_none;
526 be_info_init_irn(res, irn_flags, in_reqs, n_res);
529 x86_insn_size_t size = X86_SIZE_64;
531 init_amd64_attributes(res, op_mode, size);
533 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
534 out_infos[0].req = &amd64_class_reg_req_xmm;
535 out_infos[1].req = &arch_no_requirement;
536 out_infos[2].req = &arch_memory_requirement;
542 ir_node *new_bd_amd64_cvtsi2sd(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
552 arch_irn_flags_t irn_flags = arch_irn_flags_none;
554 be_info_init_irn(res, irn_flags, in_reqs, n_res);
557 init_amd64_attributes(res, op_mode, size);
559 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
560 out_infos[0].req = &amd64_class_reg_req_xmm;
561 out_infos[1].req = &arch_no_requirement;
562 out_infos[2].req = &arch_memory_requirement;
568 ir_node *new_bd_amd64_cvtsi2ss(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
578 arch_irn_flags_t irn_flags = arch_irn_flags_none;
580 be_info_init_irn(res, irn_flags, in_reqs, n_res);
583 init_amd64_attributes(res, op_mode, size);
585 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
586 out_infos[0].req = &amd64_class_reg_req_xmm;
587 out_infos[1].req = &arch_no_requirement;
588 out_infos[2].req = &arch_memory_requirement;
594 ir_node *new_bd_amd64_cvtss2sd(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
604 arch_irn_flags_t irn_flags = arch_irn_flags_none;
606 be_info_init_irn(res, irn_flags, in_reqs, n_res);
609 init_amd64_attributes(res, op_mode, size);
611 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
612 out_infos[0].req = &amd64_class_reg_req_xmm;
613 out_infos[1].req = &arch_no_requirement;
614 out_infos[2].req = &arch_memory_requirement;
620 ir_node *new_bd_amd64_cvttsd2si(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
630 arch_irn_flags_t irn_flags = arch_irn_flags_none;
632 be_info_init_irn(res, irn_flags, in_reqs, n_res);
635 init_amd64_attributes(res, op_mode, size);
637 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
638 out_infos[0].req = &amd64_class_reg_req_gp;
639 out_infos[1].req = &arch_no_requirement;
640 out_infos[2].req = &arch_memory_requirement;
646 ir_node *new_bd_amd64_cvttss2si(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
656 arch_irn_flags_t irn_flags = arch_irn_flags_none;
658 be_info_init_irn(res, irn_flags, in_reqs, n_res);
661 init_amd64_attributes(res, op_mode, size);
663 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
664 out_infos[0].req = &amd64_class_reg_req_gp;
665 out_infos[1].req = &arch_no_requirement;
666 out_infos[2].req = &arch_memory_requirement;
672 ir_node *new_bd_amd64_div(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size)
682 arch_irn_flags_t irn_flags = arch_irn_flags_none;
683 irn_flags |= arch_irn_flag_modify_flags;
685 be_info_init_irn(res, irn_flags, in_reqs, n_res);
688 x86_addr_t addr = { .base_input = 0, .variant = X86_ADDR_REG };
689 amd64_op_mode_t op_mode = AMD64_OP_REG;
691 init_amd64_attributes(res, op_mode, size);
693 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
694 out_infos[0].req = &amd64_single_reg_req_gp_rax;
695 out_infos[1].req = &amd64_class_reg_req_flags;
696 out_infos[2].req = &arch_memory_requirement;
697 out_infos[3].req = &amd64_single_reg_req_gp_rdx;
703 ir_node *new_bd_amd64_divs(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
713 arch_irn_flags_t irn_flags = arch_irn_flags_none;
714 irn_flags |= arch_irn_flag_rematerializable;
716 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 = &amd64_class_reg_req_xmm;
722 out_infos[1].req = &arch_no_requirement;
723 out_infos[2].req = &arch_memory_requirement;
731 static arch_register_req_t
const *in_reqs[] = {
732 &amd64_class_reg_req_x87,
733 &amd64_class_reg_req_x87,
748 arch_irn_flags_t irn_flags = arch_irn_flags_none;
749 irn_flags |= arch_irn_flag_rematerializable;
751 be_info_init_irn(res, irn_flags, in_reqs, n_res);
754 init_amd64_attributes(res, AMD64_OP_X87, X86_SIZE_80);
756 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
757 out_infos[0].req = &amd64_class_reg_req_x87;
765 static arch_register_req_t
const *in_reqs[] = {
766 &amd64_class_reg_req_x87,
780 arch_irn_flags_t irn_flags = arch_irn_flags_none;
781 irn_flags |= arch_irn_flag_rematerializable;
783 be_info_init_irn(res, irn_flags, in_reqs, n_res);
786 init_amd64_attributes(res, AMD64_OP_X87, X86_SIZE_80);
788 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
789 out_infos[0].req = &amd64_class_reg_req_x87;
797 static arch_register_req_t
const *in_reqs[] = {
798 &amd64_class_reg_req_x87,
799 &amd64_class_reg_req_x87,
814 arch_irn_flags_t irn_flags = arch_irn_flags_none;
815 irn_flags |= arch_irn_flag_rematerializable;
817 be_info_init_irn(res, irn_flags, in_reqs, n_res);
820 init_amd64_attributes(res, AMD64_OP_X87, X86_SIZE_80);
822 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
823 out_infos[0].req = &amd64_class_reg_req_x87;
831 static arch_register_req_t
const *in_reqs[] = {
832 &amd64_class_reg_req_x87,
846 arch_irn_flags_t irn_flags = arch_irn_flags_none;
848 be_info_init_irn(res, irn_flags, in_reqs, n_res);
851 init_amd64_attributes(res, AMD64_OP_X87, X86_SIZE_80);
854 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
855 out_infos[0].req = &amd64_class_reg_req_x87;
861 ir_node *new_bd_amd64_fild(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
871 arch_irn_flags_t irn_flags = arch_irn_flags_none;
872 irn_flags |= arch_irn_flag_rematerializable;
874 be_info_init_irn(res, irn_flags, in_reqs, n_res);
877 init_amd64_attributes(res, op_mode, size);
878 attr->base.addr = addr;
880 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
881 out_infos[0].req = &amd64_class_reg_req_x87;
882 out_infos[1].req = &arch_no_requirement;
883 out_infos[2].req = &arch_memory_requirement;
889 ir_node *new_bd_amd64_fisttp(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
899 arch_irn_flags_t irn_flags = arch_irn_flags_none;
901 be_info_init_irn(res, irn_flags, in_reqs, n_res);
902 amd64_x87_binop_addr_attr_t *
const attr = (amd64_x87_binop_addr_attr_t*)
get_irn_generic_attr(res);
904 attr->base = *attr_init;
905 assert(attr_init->base.base.op_mode == AMD64_OP_ADDR_REG);
906 attr->base.base.base.op_mode = AMD64_OP_X87_ADDR_REG;
908 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
909 out_infos[0].req = &arch_memory_requirement;
915 ir_node *new_bd_amd64_fld(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
925 arch_irn_flags_t irn_flags = arch_irn_flags_none;
926 irn_flags |= arch_irn_flag_rematerializable;
928 be_info_init_irn(res, irn_flags, in_reqs, n_res);
931 init_amd64_attributes(res, op_mode, size);
932 attr->base.addr = addr;
934 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
935 out_infos[0].req = &amd64_class_reg_req_x87;
936 out_infos[1].req = &arch_no_requirement;
937 out_infos[2].req = &arch_memory_requirement;
945 arch_register_req_t
const **
const in_reqs = NULL;
949 ir_node *
const res =
new_ir_node(dbgi, irg, block, op_amd64_fld1, x86_mode_E, 0, NULL);
954 arch_irn_flags_t irn_flags = arch_irn_flags_none;
955 irn_flags |= arch_irn_flag_rematerializable;
957 be_info_init_irn(res, irn_flags, in_reqs, n_res);
960 amd64_op_mode_t op_mode = AMD64_OP_X87;
961 x86_insn_size_t size = X86_SIZE_80;
963 init_amd64_attributes(res, op_mode, size);
964 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
965 out_infos[0].req = &amd64_class_reg_req_x87;
973 arch_register_req_t
const **
const in_reqs = NULL;
977 ir_node *
const res =
new_ir_node(dbgi, irg, block, op_amd64_fldz, x86_mode_E, 0, NULL);
982 arch_irn_flags_t irn_flags = arch_irn_flags_none;
983 irn_flags |= arch_irn_flag_rematerializable;
985 be_info_init_irn(res, irn_flags, in_reqs, n_res);
988 amd64_op_mode_t op_mode = AMD64_OP_X87;
989 x86_insn_size_t size = X86_SIZE_80;
991 init_amd64_attributes(res, op_mode, size);
992 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
993 out_infos[0].req = &amd64_class_reg_req_x87;
1001 static arch_register_req_t
const *in_reqs[] = {
1002 &amd64_class_reg_req_x87,
1003 &amd64_class_reg_req_x87,
1013 ir_node *
const res =
new_ir_node(dbgi, irg, block, op_amd64_fmul, x86_mode_E, 2, in);
1018 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1019 irn_flags |= arch_irn_flag_rematerializable;
1020 int const n_res = 1;
1021 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1024 init_amd64_attributes(res, AMD64_OP_X87, X86_SIZE_80);
1026 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1027 out_infos[0].req = &amd64_class_reg_req_x87;
1035 arch_register_req_t
const **
const in_reqs = NULL;
1044 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1045 int const n_res = 1;
1046 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1049 init_amd64_attributes(res, AMD64_OP_X87, X86_SIZE_80);
1051 attr->x87.reg = reg;
1052 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1053 out_infos[0].req = &arch_no_requirement;
1059 ir_node *new_bd_amd64_fst(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
1069 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1070 int const n_res = 1;
1071 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1072 amd64_x87_binop_addr_attr_t *
const attr = (amd64_x87_binop_addr_attr_t*)
get_irn_generic_attr(res);
1074 attr->base = *attr_init;
1075 assert(attr_init->base.base.op_mode == AMD64_OP_ADDR_REG);
1076 attr->base.base.base.op_mode = AMD64_OP_X87_ADDR_REG;
1078 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1079 out_infos[0].req = &arch_memory_requirement;
1085 ir_node *new_bd_amd64_fstp(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
1095 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1096 int const n_res = 1;
1097 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1098 amd64_x87_binop_addr_attr_t *
const attr = (amd64_x87_binop_addr_attr_t*)
get_irn_generic_attr(res);
1100 attr->base = *attr_init;
1101 assert(attr_init->base.base.op_mode == AMD64_OP_ADDR_REG);
1102 attr->base.base.base.op_mode = AMD64_OP_X87_ADDR_REG;
1104 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1105 out_infos[0].req = &arch_memory_requirement;
1113 static arch_register_req_t
const *in_reqs[] = {
1114 &amd64_class_reg_req_x87,
1115 &amd64_class_reg_req_x87,
1125 ir_node *
const res =
new_ir_node(dbgi, irg, block, op_amd64_fsub, x86_mode_E, 2, in);
1130 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1131 irn_flags |= arch_irn_flag_rematerializable;
1132 int const n_res = 1;
1133 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1136 init_amd64_attributes(res, AMD64_OP_X87, X86_SIZE_80);
1138 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1139 out_infos[0].req = &amd64_class_reg_req_x87;
1147 static arch_register_req_t
const *in_reqs[] = {
1148 &amd64_class_reg_req_x87,
1149 &amd64_class_reg_req_x87,
1164 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1165 irn_flags |= arch_irn_flag_rematerializable;
1166 int const n_res = 1;
1167 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1170 init_amd64_attributes(res, AMD64_OP_X87, X86_SIZE_80);
1172 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1173 out_infos[0].req = &amd64_class_reg_req_flags;
1181 arch_register_req_t
const **
const in_reqs = NULL;
1190 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1191 int const n_res = 1;
1192 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1195 init_amd64_attributes(res, AMD64_OP_X87, X86_SIZE_80);
1197 attr->x87.reg = reg;
1198 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1199 out_infos[0].req = &arch_no_requirement;
1205 ir_node *new_bd_amd64_haddpd(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
1215 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1216 irn_flags |= arch_irn_flag_rematerializable;
1217 int const n_res = 3;
1218 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1222 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1223 out_infos[0].req = &amd64_class_reg_req_xmm;
1224 out_infos[1].req = &arch_no_requirement;
1225 out_infos[2].req = &arch_memory_requirement;
1231 ir_node *new_bd_amd64_idiv(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size)
1241 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1242 irn_flags |= arch_irn_flag_modify_flags;
1243 int const n_res = 4;
1244 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1247 x86_addr_t addr = { .base_input = 0, .variant = X86_ADDR_REG };
1248 amd64_op_mode_t op_mode = AMD64_OP_REG;
1250 init_amd64_attributes(res, op_mode, size);
1252 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1253 out_infos[0].req = &amd64_single_reg_req_gp_rax;
1254 out_infos[1].req = &amd64_class_reg_req_flags;
1255 out_infos[2].req = &arch_memory_requirement;
1256 out_infos[3].req = &amd64_single_reg_req_gp_rdx;
1262 ir_node *new_bd_amd64_ijmp(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
1272 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1273 int const n_res = 3;
1274 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1277 init_amd64_attributes(res, op_mode, size);
1279 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1280 out_infos[0].req = &arch_exec_requirement;
1281 out_infos[1].req = &arch_no_requirement;
1282 out_infos[2].req = &arch_memory_requirement;
1288 ir_node *new_bd_amd64_imul(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
1298 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1299 irn_flags |= arch_irn_flag_modify_flags;
1300 irn_flags |= arch_irn_flag_rematerializable;
1301 irn_flags |= (arch_irn_flags_t)amd64_arch_irn_flag_commutative_binop;
1302 int const n_res = 3;
1303 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1307 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1308 out_infos[0].req = &amd64_class_reg_req_gp;
1309 out_infos[1].req = &amd64_class_reg_req_flags;
1310 out_infos[2].req = &arch_memory_requirement;
1316 ir_node *new_bd_amd64_imul_1op(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
1326 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1327 irn_flags |= arch_irn_flag_modify_flags;
1328 int const n_res = 4;
1329 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1332 init_amd64_attributes(res, op_mode, size);
1334 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1335 out_infos[0].req = &amd64_single_reg_req_gp_rax;
1336 out_infos[1].req = &amd64_class_reg_req_flags;
1337 out_infos[2].req = &arch_memory_requirement;
1338 out_infos[3].req = &amd64_single_reg_req_gp_rdx;
1346 static arch_register_req_t
const *in_reqs[] = {
1347 &amd64_class_reg_req_flags,
1361 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1362 int const n_res = 2;
1363 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1366 x86_insn_size_t size = X86_SIZE_64;
1367 init_amd64_attributes(res, AMD64_OP_CC, size);
1368 init_amd64_cc_attributes(res, cc);
1369 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1370 out_infos[0].req = &arch_exec_requirement;
1371 out_infos[1].req = &arch_exec_requirement;
1379 arch_register_req_t
const **
const in_reqs = NULL;
1388 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1389 irn_flags |= arch_irn_flag_simple_jump;
1390 irn_flags |= arch_irn_flag_fallthrough;
1391 int const n_res = 1;
1392 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1395 amd64_op_mode_t op_mode = AMD64_OP_NONE;
1396 x86_insn_size_t size = X86_SIZE_64;
1398 init_amd64_attributes(res, op_mode, size);
1399 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1400 out_infos[0].req = &arch_exec_requirement;
1406 ir_node *new_bd_amd64_jmp_switch(
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, amd64_op_mode_t op_mode, x86_insn_size_t size,
const x86_addr_t *addr,
const ir_switch_table *table,
ir_entity *table_entity)
1416 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1417 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1420 init_amd64_attributes(res, op_mode, size);
1421 attr->base.addr = *addr;
1422 be_switch_attr_init(res, &attr->swtch, table, table_entity);
1438 ir_node *
const res =
new_ir_node(dbgi, irg, block, op_amd64_l_haddpd, amd64_mode_xmm, 2, in);
1456 ir_node *
const res =
new_ir_node(dbgi, irg, block, op_amd64_l_punpckldq, amd64_mode_xmm, 2, in);
1474 ir_node *
const res =
new_ir_node(dbgi, irg, block, op_amd64_l_subpd, amd64_mode_xmm, 2, in);
1482 ir_node *new_bd_amd64_lea(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, x86_addr_t addr)
1492 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1493 irn_flags |= arch_irn_flag_rematerializable;
1494 int const n_res = 1;
1495 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1498 amd64_op_mode_t op_mode = AMD64_OP_ADDR;
1500 init_amd64_attributes(res, op_mode, size);
1502 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1503 out_infos[0].req = &amd64_class_reg_req_gp;
1511 static arch_register_req_t
const *in_reqs[] = {
1512 &amd64_single_reg_req_gp_rbp,
1513 &arch_memory_requirement,
1528 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1529 int const n_res = 3;
1530 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1533 amd64_op_mode_t op_mode = AMD64_OP_NONE;
1534 x86_insn_size_t size = X86_SIZE_64;
1536 init_amd64_attributes(res, op_mode, size);
1537 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1538 out_infos[0].req = &amd64_requirements_gp_rbp_I;
1539 out_infos[1].req = &arch_memory_requirement;
1540 out_infos[2].req = &amd64_requirements_gp_rsp_I;
1546 ir_node *new_bd_amd64_mov_gp(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
1556 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1557 int const n_res = 3;
1558 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1561 init_amd64_attributes(res, op_mode, size);
1563 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1564 out_infos[0].req = &amd64_class_reg_req_gp;
1565 out_infos[1].req = &arch_no_requirement;
1566 out_infos[2].req = &arch_memory_requirement;
1572 ir_node *new_bd_amd64_mov_imm(
dbg_info *dbgi,
ir_node *block, x86_insn_size_t size,
const amd64_imm64_t *imm)
1574 arch_register_req_t
const **
const in_reqs = NULL;
1583 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1584 irn_flags |= arch_irn_flag_rematerializable;
1585 int const n_res = 1;
1586 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1589 init_amd64_attributes(res, AMD64_OP_IMM64, size);
1590 init_amd64_movimm_attributes(res, imm);
1591 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1592 out_infos[0].req = &amd64_class_reg_req_gp;
1598 ir_node *new_bd_amd64_mov_store(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
1608 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1609 int const n_res = 1;
1610 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1614 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1615 out_infos[0].req = &arch_memory_requirement;
1621 ir_node *new_bd_amd64_movd(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, amd64_op_mode_t op_mode, x86_addr_t addr)
1631 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1632 int const n_res = 3;
1633 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1636 x86_insn_size_t size = X86_SIZE_64;
1638 init_amd64_attributes(res, op_mode, size);
1640 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1641 out_infos[0].req = &amd64_class_reg_req_xmm;
1642 out_infos[1].req = &arch_no_requirement;
1643 out_infos[2].req = &arch_memory_requirement;
1649 ir_node *new_bd_amd64_movd_gp_xmm(
dbg_info *dbgi,
ir_node *block,
ir_node *operand, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
1651 static arch_register_req_t
const *in_reqs[] = {
1652 &amd64_class_reg_req_gp,
1661 ir_node *
const res =
new_ir_node(dbgi, irg, block, op_amd64_movd_gp_xmm, amd64_mode_xmm, 1, in);
1666 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1667 int const n_res = 1;
1668 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1671 init_amd64_attributes(res, op_mode, size);
1673 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1674 out_infos[0].req = &amd64_class_reg_req_xmm;
1680 ir_node *new_bd_amd64_movd_xmm_gp(
dbg_info *dbgi,
ir_node *block,
ir_node *operand, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
1682 static arch_register_req_t
const *in_reqs[] = {
1683 &amd64_class_reg_req_xmm,
1697 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1698 int const n_res = 1;
1699 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1702 init_amd64_attributes(res, op_mode, size);
1704 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1705 out_infos[0].req = &amd64_class_reg_req_gp;
1711 ir_node *new_bd_amd64_movdqa(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, amd64_op_mode_t op_mode, x86_addr_t addr)
1721 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1722 int const n_res = 3;
1723 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1726 x86_insn_size_t size = X86_SIZE_128;
1728 init_amd64_attributes(res, op_mode, size);
1730 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1731 out_infos[0].req = &amd64_class_reg_req_xmm;
1732 out_infos[1].req = &arch_no_requirement;
1733 out_infos[2].req = &arch_memory_requirement;
1739 ir_node *new_bd_amd64_movdqu(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, amd64_op_mode_t op_mode, x86_addr_t addr)
1749 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1750 int const n_res = 3;
1751 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1754 x86_insn_size_t size = X86_SIZE_128;
1756 init_amd64_attributes(res, op_mode, size);
1758 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1759 out_infos[0].req = &amd64_class_reg_req_xmm;
1760 out_infos[1].req = &arch_no_requirement;
1761 out_infos[2].req = &arch_memory_requirement;
1767 ir_node *new_bd_amd64_movdqu_store(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
1777 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1778 int const n_res = 1;
1779 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1783 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1784 out_infos[0].req = &arch_memory_requirement;
1790 ir_node *new_bd_amd64_movs(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
1800 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1801 int const n_res = 3;
1802 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1805 init_amd64_attributes(res, op_mode, size);
1807 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1808 out_infos[0].req = &amd64_class_reg_req_gp;
1809 out_infos[1].req = &arch_no_requirement;
1810 out_infos[2].req = &arch_memory_requirement;
1816 ir_node *new_bd_amd64_movs_store_xmm(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
1826 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1827 int const n_res = 1;
1828 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1832 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1833 out_infos[0].req = &arch_memory_requirement;
1839 ir_node *new_bd_amd64_movs_xmm(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
1849 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1850 int const n_res = 3;
1851 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1854 init_amd64_attributes(res, op_mode, size);
1856 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1857 out_infos[0].req = &amd64_class_reg_req_xmm;
1858 out_infos[1].req = &arch_no_requirement;
1859 out_infos[2].req = &arch_memory_requirement;
1865 ir_node *new_bd_amd64_mul(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, amd64_op_mode_t op_mode, x86_addr_t addr)
1875 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1876 irn_flags |= arch_irn_flag_modify_flags;
1877 int const n_res = 4;
1878 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1881 init_amd64_attributes(res, op_mode, size);
1883 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1884 out_infos[0].req = &amd64_single_reg_req_gp_rax;
1885 out_infos[1].req = &amd64_class_reg_req_flags;
1886 out_infos[2].req = &arch_memory_requirement;
1887 out_infos[3].req = &amd64_single_reg_req_gp_rdx;
1893 ir_node *new_bd_amd64_muls(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
1903 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1904 irn_flags |= arch_irn_flag_rematerializable;
1905 irn_flags |= (arch_irn_flags_t)amd64_arch_irn_flag_commutative_binop;
1906 int const n_res = 3;
1907 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1911 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1912 out_infos[0].req = &amd64_class_reg_req_xmm;
1913 out_infos[1].req = &arch_no_requirement;
1914 out_infos[2].req = &arch_memory_requirement;
1922 static arch_register_req_t
const *in_reqs[] = {
1923 &amd64_class_reg_req_gp,
1937 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1938 irn_flags |= arch_irn_flag_modify_flags;
1939 irn_flags |= arch_irn_flag_rematerializable;
1940 int const n_res = 2;
1941 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1944 amd64_op_mode_t op_mode = AMD64_OP_REG;
1945 x86_addr_t addr = { .base_input = 0, .variant = X86_ADDR_REG };
1946 init_amd64_attributes(res, op_mode, size);
1948 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1949 out_infos[0].req = &amd64_requirements_gp_in_r0;
1950 out_infos[1].req = &amd64_class_reg_req_flags;
1958 static arch_register_req_t
const *in_reqs[] = {
1959 &amd64_class_reg_req_gp,
1973 arch_irn_flags_t irn_flags = arch_irn_flags_none;
1974 irn_flags |= arch_irn_flag_modify_flags;
1975 irn_flags |= arch_irn_flag_rematerializable;
1976 int const n_res = 2;
1977 be_info_init_irn(res, irn_flags, in_reqs, n_res);
1980 amd64_op_mode_t op_mode = AMD64_OP_REG;
1981 x86_addr_t addr = { .base_input = 0, .variant = X86_ADDR_REG };
1982 init_amd64_attributes(res, op_mode, size);
1984 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
1985 out_infos[0].req = &amd64_requirements_gp_in_r0;
1986 out_infos[1].req = &amd64_class_reg_req_flags;
1992 ir_node *new_bd_amd64_or(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
2002 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2003 irn_flags |= arch_irn_flag_modify_flags;
2004 irn_flags |= arch_irn_flag_rematerializable;
2005 irn_flags |= (arch_irn_flags_t)amd64_arch_irn_flag_commutative_binop;
2006 int const n_res = 3;
2007 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2011 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2012 out_infos[0].req = &amd64_class_reg_req_gp;
2013 out_infos[1].req = &amd64_class_reg_req_flags;
2014 out_infos[2].req = &arch_memory_requirement;
2020 ir_node *new_bd_amd64_pop_am(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, x86_addr_t addr)
2030 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2031 int const n_res = 2;
2032 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2035 amd64_op_mode_t op_mode = AMD64_OP_ADDR;
2037 init_amd64_attributes(res, op_mode, size);
2039 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2040 out_infos[0].req = &amd64_requirements_gp_rsp_I;
2041 out_infos[1].req = &arch_memory_requirement;
2047 ir_node *new_bd_amd64_punpckldq(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
2057 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2058 irn_flags |= arch_irn_flag_rematerializable;
2059 int const n_res = 3;
2060 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2064 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2065 out_infos[0].req = &amd64_class_reg_req_xmm;
2066 out_infos[1].req = &arch_no_requirement;
2067 out_infos[2].req = &arch_memory_requirement;
2073 ir_node *new_bd_amd64_push_am(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs, x86_insn_size_t size, x86_addr_t addr)
2083 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2084 int const n_res = 2;
2085 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2088 amd64_op_mode_t op_mode = AMD64_OP_ADDR;
2090 init_amd64_attributes(res, op_mode, size);
2092 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2093 out_infos[0].req = &amd64_requirements_gp_rsp_I;
2094 out_infos[1].req = &arch_memory_requirement;
2102 static arch_register_req_t
const *in_reqs[] = {
2103 &amd64_single_reg_req_gp_rsp,
2104 &arch_memory_requirement,
2105 &amd64_class_reg_req_gp,
2121 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2122 int const n_res = 2;
2123 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2126 amd64_op_mode_t op_mode = AMD64_OP_NONE;
2128 init_amd64_attributes(res, op_mode, size);
2129 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2130 out_infos[0].req = &amd64_requirements_gp_rsp_I;
2131 out_infos[1].req = &arch_memory_requirement;
2137 ir_node *new_bd_amd64_ret(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs)
2147 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2148 int const n_res = 1;
2149 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2152 amd64_op_mode_t op_mode = AMD64_OP_NONE;
2153 x86_insn_size_t size = X86_SIZE_64;
2155 init_amd64_attributes(res, op_mode, size);
2156 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2157 out_infos[0].req = &arch_exec_requirement;
2163 ir_node *new_bd_amd64_sar(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_shift_attr_t *attr_init)
2173 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2174 irn_flags |= arch_irn_flag_modify_flags;
2175 irn_flags |= arch_irn_flag_rematerializable;
2176 int const n_res = 2;
2177 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2182 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2183 out_infos[0].req = &amd64_class_reg_req_gp;
2184 out_infos[1].req = &amd64_class_reg_req_flags;
2190 ir_node *new_bd_amd64_sbb(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
2200 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2201 irn_flags |= arch_irn_flag_modify_flags;
2202 int const n_res = 3;
2203 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2207 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2208 out_infos[0].req = &amd64_class_reg_req_gp;
2209 out_infos[1].req = &amd64_class_reg_req_flags;
2210 out_infos[2].req = &arch_memory_requirement;
2218 static arch_register_req_t
const *in_reqs[] = {
2219 &amd64_class_reg_req_flags,
2233 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2234 int const n_res = 1;
2235 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2238 x86_insn_size_t size = X86_SIZE_8;
2239 init_amd64_attributes(res, AMD64_OP_CC, size);
2240 init_amd64_cc_attributes(res, cc);
2241 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2242 out_infos[0].req = &amd64_class_reg_req_gp;
2248 ir_node *new_bd_amd64_shl(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_shift_attr_t *attr_init)
2258 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2259 irn_flags |= arch_irn_flag_modify_flags;
2260 irn_flags |= arch_irn_flag_rematerializable;
2261 int const n_res = 2;
2262 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2267 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2268 out_infos[0].req = &amd64_class_reg_req_gp;
2269 out_infos[1].req = &amd64_class_reg_req_flags;
2275 ir_node *new_bd_amd64_shr(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_shift_attr_t *attr_init)
2285 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2286 irn_flags |= arch_irn_flag_modify_flags;
2287 irn_flags |= arch_irn_flag_rematerializable;
2288 int const n_res = 2;
2289 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2294 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2295 out_infos[0].req = &amd64_class_reg_req_gp;
2296 out_infos[1].req = &amd64_class_reg_req_flags;
2302 ir_node *new_bd_amd64_sub(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
2312 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2313 irn_flags |= arch_irn_flag_modify_flags;
2314 irn_flags |= arch_irn_flag_rematerializable;
2315 int const n_res = 3;
2316 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2320 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2321 out_infos[0].req = &amd64_class_reg_req_gp;
2322 out_infos[1].req = &amd64_class_reg_req_flags;
2323 out_infos[2].req = &arch_memory_requirement;
2329 ir_node *new_bd_amd64_sub_sp(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
2339 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2340 irn_flags |= arch_irn_flag_modify_flags;
2341 int const n_res = 3;
2342 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2346 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2347 out_infos[0].req = &amd64_requirements_gp_rsp_I;
2348 out_infos[1].req = &amd64_class_reg_req_gp;
2349 out_infos[2].req = &arch_memory_requirement;
2355 ir_node *new_bd_amd64_subpd(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
2365 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2366 irn_flags |= arch_irn_flag_rematerializable;
2367 int const n_res = 3;
2368 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2372 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2373 out_infos[0].req = &amd64_class_reg_req_xmm;
2374 out_infos[1].req = &arch_no_requirement;
2375 out_infos[2].req = &arch_memory_requirement;
2381 ir_node *new_bd_amd64_subs(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
2391 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2392 irn_flags |= arch_irn_flag_rematerializable;
2393 int const n_res = 3;
2394 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2398 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2399 out_infos[0].req = &amd64_class_reg_req_xmm;
2400 out_infos[1].req = &arch_no_requirement;
2401 out_infos[2].req = &arch_memory_requirement;
2407 ir_node *new_bd_amd64_test(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
2417 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2418 irn_flags |= arch_irn_flag_modify_flags;
2419 irn_flags |= arch_irn_flag_rematerializable;
2420 int const n_res = 3;
2421 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2425 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2426 out_infos[0].req = &arch_no_requirement;
2427 out_infos[1].req = &amd64_class_reg_req_flags;
2428 out_infos[2].req = &arch_memory_requirement;
2434 ir_node *new_bd_amd64_ucomis(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
2444 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2445 irn_flags |= arch_irn_flag_modify_flags;
2446 irn_flags |= arch_irn_flag_rematerializable;
2447 int const n_res = 3;
2448 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2452 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2453 out_infos[0].req = &arch_no_requirement;
2454 out_infos[1].req = &amd64_class_reg_req_flags;
2455 out_infos[2].req = &arch_memory_requirement;
2461 ir_node *new_bd_amd64_xor(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
2471 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2472 irn_flags |= arch_irn_flag_modify_flags;
2473 irn_flags |= arch_irn_flag_rematerializable;
2474 irn_flags |= (arch_irn_flags_t)amd64_arch_irn_flag_commutative_binop;
2475 int const n_res = 3;
2476 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2480 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2481 out_infos[0].req = &amd64_class_reg_req_gp;
2482 out_infos[1].req = &amd64_class_reg_req_flags;
2483 out_infos[2].req = &arch_memory_requirement;
2491 arch_register_req_t
const **
const in_reqs = NULL;
2500 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2501 irn_flags |= arch_irn_flag_modify_flags;
2502 irn_flags |= arch_irn_flag_rematerializable;
2503 int const n_res = 2;
2504 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2507 amd64_op_mode_t op_mode = AMD64_OP_NONE;
2508 init_amd64_attributes(res, op_mode, size);
2509 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2510 out_infos[0].req = &amd64_class_reg_req_gp;
2511 out_infos[1].req = &amd64_class_reg_req_flags;
2517 ir_node *new_bd_amd64_xorp(
dbg_info *dbgi,
ir_node *block,
int const arity,
ir_node *
const *
const in, arch_register_req_t
const **
const in_reqs,
const amd64_binop_addr_attr_t *attr_init)
2527 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2528 irn_flags |= arch_irn_flag_rematerializable;
2529 irn_flags |= (arch_irn_flags_t)amd64_arch_irn_flag_commutative_binop;
2530 int const n_res = 3;
2531 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2535 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2536 out_infos[0].req = &amd64_class_reg_req_xmm;
2537 out_infos[1].req = &arch_no_requirement;
2538 out_infos[2].req = &arch_memory_requirement;
2546 arch_register_req_t
const **
const in_reqs = NULL;
2550 ir_node *
const res =
new_ir_node(dbgi, irg, block, op_amd64_xorp_0, amd64_mode_xmm, 0, NULL);
2555 arch_irn_flags_t irn_flags = arch_irn_flags_none;
2556 irn_flags |= arch_irn_flag_rematerializable;
2557 int const n_res = 1;
2558 be_info_init_irn(res, irn_flags, in_reqs, n_res);
2561 amd64_op_mode_t op_mode = AMD64_OP_NONE;
2562 init_amd64_attributes(res, op_mode, size);
2563 reg_out_info_t *
const out_infos = be_get_info(res)->out_infos;
2564 out_infos[0].req = &amd64_class_reg_req_xmm;
2575 void amd64_create_opcodes(
void)
2580 amd64_opcode_start = cur_opcode;
2585 set_op_tag(op, amd64_op_tag);
2591 set_op_tag(op, amd64_op_tag);
2597 set_op_tag(op, amd64_op_tag);
2603 set_op_tag(op, amd64_op_tag);
2609 set_op_tag(op, amd64_op_tag);
2615 set_op_tag(op, amd64_op_tag);
2621 set_op_tag(op, amd64_op_tag);
2627 set_op_tag(op, amd64_op_tag);
2633 set_op_tag(op, amd64_op_tag);
2634 op_amd64_cmpxchg = op;
2639 set_op_tag(op, amd64_op_tag);
2640 op_amd64_copyB = op;
2645 set_op_tag(op, amd64_op_tag);
2646 op_amd64_copyB_i = op;
2651 set_op_tag(op, amd64_op_tag);
2657 set_op_tag(op, amd64_op_tag);
2658 op_amd64_cvtsd2ss = op;
2663 set_op_tag(op, amd64_op_tag);
2664 op_amd64_cvtsi2sd = op;
2669 set_op_tag(op, amd64_op_tag);
2670 op_amd64_cvtsi2ss = op;
2675 set_op_tag(op, amd64_op_tag);
2676 op_amd64_cvtss2sd = op;
2681 set_op_tag(op, amd64_op_tag);
2682 op_amd64_cvttsd2si = op;
2687 set_op_tag(op, amd64_op_tag);
2688 op_amd64_cvttss2si = op;
2693 set_op_tag(op, amd64_op_tag);
2699 set_op_tag(op, amd64_op_tag);
2705 set_op_tag(op, amd64_op_tag);
2711 set_op_tag(op, amd64_op_tag);
2717 set_op_tag(op, amd64_op_tag);
2723 set_op_tag(op, amd64_op_tag);
2729 set_op_tag(op, amd64_op_tag);
2735 set_op_tag(op, amd64_op_tag);
2736 op_amd64_fisttp = op;
2741 set_op_tag(op, amd64_op_tag);
2747 set_op_tag(op, amd64_op_tag);
2753 set_op_tag(op, amd64_op_tag);
2759 set_op_tag(op, amd64_op_tag);
2765 set_op_tag(op, amd64_op_tag);
2771 set_op_tag(op, amd64_op_tag);
2777 set_op_tag(op, amd64_op_tag);
2783 set_op_tag(op, amd64_op_tag);
2789 set_op_tag(op, amd64_op_tag);
2790 op_amd64_fucomi = op;
2795 set_op_tag(op, amd64_op_tag);
2801 set_op_tag(op, amd64_op_tag);
2802 op_amd64_haddpd = op;
2807 set_op_tag(op, amd64_op_tag);
2813 set_op_tag(op, amd64_op_tag);
2819 set_op_tag(op, amd64_op_tag);
2825 set_op_tag(op, amd64_op_tag);
2826 op_amd64_imul_1op = op;
2831 set_op_tag(op, amd64_op_tag);
2837 set_op_tag(op, amd64_op_tag);
2843 set_op_tag(op, amd64_op_tag);
2844 op_amd64_jmp_switch = op;
2847 set_op_tag(op, amd64_op_tag);
2848 op_amd64_l_haddpd = op;
2851 set_op_tag(op, amd64_op_tag);
2852 op_amd64_l_punpckldq = op;
2855 set_op_tag(op, amd64_op_tag);
2856 op_amd64_l_subpd = op;
2861 set_op_tag(op, amd64_op_tag);
2867 set_op_tag(op, amd64_op_tag);
2868 op_amd64_leave = op;
2873 set_op_tag(op, amd64_op_tag);
2874 op_amd64_mov_gp = op;
2879 set_op_tag(op, amd64_op_tag);
2880 op_amd64_mov_imm = op;
2885 set_op_tag(op, amd64_op_tag);
2886 op_amd64_mov_store = op;
2891 set_op_tag(op, amd64_op_tag);
2897 set_op_tag(op, amd64_op_tag);
2898 op_amd64_movd_gp_xmm = op;
2903 set_op_tag(op, amd64_op_tag);
2904 op_amd64_movd_xmm_gp = op;
2909 set_op_tag(op, amd64_op_tag);
2910 op_amd64_movdqa = op;
2915 set_op_tag(op, amd64_op_tag);
2916 op_amd64_movdqu = op;
2921 set_op_tag(op, amd64_op_tag);
2922 op_amd64_movdqu_store = op;
2927 set_op_tag(op, amd64_op_tag);
2933 set_op_tag(op, amd64_op_tag);
2934 op_amd64_movs_store_xmm = op;
2939 set_op_tag(op, amd64_op_tag);
2940 op_amd64_movs_xmm = op;
2945 set_op_tag(op, amd64_op_tag);
2951 set_op_tag(op, amd64_op_tag);
2957 set_op_tag(op, amd64_op_tag);
2963 set_op_tag(op, amd64_op_tag);
2969 set_op_tag(op, amd64_op_tag);
2975 set_op_tag(op, amd64_op_tag);
2976 op_amd64_pop_am = op;
2981 set_op_tag(op, amd64_op_tag);
2982 op_amd64_punpckldq = op;
2987 set_op_tag(op, amd64_op_tag);
2988 op_amd64_push_am = op;
2993 set_op_tag(op, amd64_op_tag);
2994 op_amd64_push_reg = op;
2999 set_op_tag(op, amd64_op_tag);
3005 set_op_tag(op, amd64_op_tag);
3011 set_op_tag(op, amd64_op_tag);
3017 set_op_tag(op, amd64_op_tag);
3018 op_amd64_setcc = op;
3023 set_op_tag(op, amd64_op_tag);
3029 set_op_tag(op, amd64_op_tag);
3035 set_op_tag(op, amd64_op_tag);
3041 set_op_tag(op, amd64_op_tag);
3042 op_amd64_sub_sp = op;
3047 set_op_tag(op, amd64_op_tag);
3048 op_amd64_subpd = op;
3053 set_op_tag(op, amd64_op_tag);
3059 set_op_tag(op, amd64_op_tag);
3065 set_op_tag(op, amd64_op_tag);
3066 op_amd64_ucomis = op;
3071 set_op_tag(op, amd64_op_tag);
3077 set_op_tag(op, amd64_op_tag);
3078 op_amd64_xor_0 = op;
3083 set_op_tag(op, amd64_op_tag);
3089 set_op_tag(op, amd64_op_tag);
3090 op_amd64_xorp_0 = op;
3094 void amd64_free_opcodes(
void)
3096 free_ir_op(op_amd64_add); op_amd64_add = NULL;
3097 free_ir_op(op_amd64_adds); op_amd64_adds = NULL;
3098 free_ir_op(op_amd64_and); op_amd64_and = NULL;
3099 free_ir_op(op_amd64_bsf); op_amd64_bsf = NULL;
3100 free_ir_op(op_amd64_bsr); op_amd64_bsr = NULL;
3101 free_ir_op(op_amd64_call); op_amd64_call = NULL;
3102 free_ir_op(op_amd64_cltd); op_amd64_cltd = NULL;
3103 free_ir_op(op_amd64_cmp); op_amd64_cmp = NULL;
3104 free_ir_op(op_amd64_cmpxchg); op_amd64_cmpxchg = NULL;
3105 free_ir_op(op_amd64_copyB); op_amd64_copyB = NULL;
3106 free_ir_op(op_amd64_copyB_i); op_amd64_copyB_i = NULL;
3107 free_ir_op(op_amd64_cqto); op_amd64_cqto = NULL;
3108 free_ir_op(op_amd64_cvtsd2ss); op_amd64_cvtsd2ss = NULL;
3109 free_ir_op(op_amd64_cvtsi2sd); op_amd64_cvtsi2sd = NULL;
3110 free_ir_op(op_amd64_cvtsi2ss); op_amd64_cvtsi2ss = NULL;
3111 free_ir_op(op_amd64_cvtss2sd); op_amd64_cvtss2sd = NULL;
3112 free_ir_op(op_amd64_cvttsd2si); op_amd64_cvttsd2si = NULL;
3113 free_ir_op(op_amd64_cvttss2si); op_amd64_cvttss2si = NULL;
3114 free_ir_op(op_amd64_div); op_amd64_div = NULL;
3115 free_ir_op(op_amd64_divs); op_amd64_divs = NULL;
3116 free_ir_op(op_amd64_fadd); op_amd64_fadd = NULL;
3117 free_ir_op(op_amd64_fchs); op_amd64_fchs = NULL;
3118 free_ir_op(op_amd64_fdiv); op_amd64_fdiv = NULL;
3119 free_ir_op(op_amd64_fdup); op_amd64_fdup = NULL;
3120 free_ir_op(op_amd64_fild); op_amd64_fild = NULL;
3121 free_ir_op(op_amd64_fisttp); op_amd64_fisttp = NULL;
3122 free_ir_op(op_amd64_fld); op_amd64_fld = NULL;
3123 free_ir_op(op_amd64_fld1); op_amd64_fld1 = NULL;
3124 free_ir_op(op_amd64_fldz); op_amd64_fldz = NULL;
3125 free_ir_op(op_amd64_fmul); op_amd64_fmul = NULL;
3126 free_ir_op(op_amd64_fpop); op_amd64_fpop = NULL;
3127 free_ir_op(op_amd64_fst); op_amd64_fst = NULL;
3128 free_ir_op(op_amd64_fstp); op_amd64_fstp = NULL;
3129 free_ir_op(op_amd64_fsub); op_amd64_fsub = NULL;
3130 free_ir_op(op_amd64_fucomi); op_amd64_fucomi = NULL;
3131 free_ir_op(op_amd64_fxch); op_amd64_fxch = NULL;
3132 free_ir_op(op_amd64_haddpd); op_amd64_haddpd = NULL;
3133 free_ir_op(op_amd64_idiv); op_amd64_idiv = NULL;
3134 free_ir_op(op_amd64_ijmp); op_amd64_ijmp = NULL;
3135 free_ir_op(op_amd64_imul); op_amd64_imul = NULL;
3136 free_ir_op(op_amd64_imul_1op); op_amd64_imul_1op = NULL;
3137 free_ir_op(op_amd64_jcc); op_amd64_jcc = NULL;
3138 free_ir_op(op_amd64_jmp); op_amd64_jmp = NULL;
3139 free_ir_op(op_amd64_jmp_switch); op_amd64_jmp_switch = NULL;
3140 free_ir_op(op_amd64_l_haddpd); op_amd64_l_haddpd = NULL;
3141 free_ir_op(op_amd64_l_punpckldq); op_amd64_l_punpckldq = NULL;
3142 free_ir_op(op_amd64_l_subpd); op_amd64_l_subpd = NULL;
3143 free_ir_op(op_amd64_lea); op_amd64_lea = NULL;
3144 free_ir_op(op_amd64_leave); op_amd64_leave = NULL;
3145 free_ir_op(op_amd64_mov_gp); op_amd64_mov_gp = NULL;
3146 free_ir_op(op_amd64_mov_imm); op_amd64_mov_imm = NULL;
3147 free_ir_op(op_amd64_mov_store); op_amd64_mov_store = NULL;
3148 free_ir_op(op_amd64_movd); op_amd64_movd = NULL;
3149 free_ir_op(op_amd64_movd_gp_xmm); op_amd64_movd_gp_xmm = NULL;
3150 free_ir_op(op_amd64_movd_xmm_gp); op_amd64_movd_xmm_gp = NULL;
3151 free_ir_op(op_amd64_movdqa); op_amd64_movdqa = NULL;
3152 free_ir_op(op_amd64_movdqu); op_amd64_movdqu = NULL;
3153 free_ir_op(op_amd64_movdqu_store); op_amd64_movdqu_store = NULL;
3154 free_ir_op(op_amd64_movs); op_amd64_movs = NULL;
3155 free_ir_op(op_amd64_movs_store_xmm); op_amd64_movs_store_xmm = NULL;
3156 free_ir_op(op_amd64_movs_xmm); op_amd64_movs_xmm = NULL;
3157 free_ir_op(op_amd64_mul); op_amd64_mul = NULL;
3158 free_ir_op(op_amd64_muls); op_amd64_muls = NULL;
3159 free_ir_op(op_amd64_neg); op_amd64_neg = NULL;
3160 free_ir_op(op_amd64_not); op_amd64_not = NULL;
3162 free_ir_op(op_amd64_pop_am); op_amd64_pop_am = NULL;
3163 free_ir_op(op_amd64_punpckldq); op_amd64_punpckldq = NULL;
3164 free_ir_op(op_amd64_push_am); op_amd64_push_am = NULL;
3165 free_ir_op(op_amd64_push_reg); op_amd64_push_reg = NULL;
3166 free_ir_op(op_amd64_ret); op_amd64_ret = NULL;
3167 free_ir_op(op_amd64_sar); op_amd64_sar = NULL;
3168 free_ir_op(op_amd64_sbb); op_amd64_sbb = NULL;
3169 free_ir_op(op_amd64_setcc); op_amd64_setcc = NULL;
3170 free_ir_op(op_amd64_shl); op_amd64_shl = NULL;
3171 free_ir_op(op_amd64_shr); op_amd64_shr = NULL;
3172 free_ir_op(op_amd64_sub); op_amd64_sub = NULL;
3173 free_ir_op(op_amd64_sub_sp); op_amd64_sub_sp = NULL;
3174 free_ir_op(op_amd64_subpd); op_amd64_subpd = NULL;
3175 free_ir_op(op_amd64_subs); op_amd64_subs = NULL;
3176 free_ir_op(op_amd64_test); op_amd64_test = NULL;
3177 free_ir_op(op_amd64_ucomis); op_amd64_ucomis = NULL;
3178 free_ir_op(op_amd64_xor); op_amd64_xor = NULL;
3179 free_ir_op(op_amd64_xor_0); op_amd64_xor_0 = NULL;
3180 free_ir_op(op_amd64_xorp); op_amd64_xorp = NULL;
3181 free_ir_op(op_amd64_xorp_0); op_amd64_xorp_0 = 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.
ir_mode * mode_ANY
undefined mode
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.
This operation can be kept in End's keep-alive list.
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)
This operation has no arguments and is some kind of a constant.
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.