ir_node *be_new_Start(ir_graph *const irg, be_start_out const *const outs) { ir_node *const block = get_irg_start_block(irg); ir_node *const start = new_ir_node(NULL, irg, block, op_be_Start, mode_T, 0, NULL); unsigned const n_regs = isa_if->n_registers; /* Count the number of outsputs. */ unsigned k = 1; /* +1 for memory */ for (unsigned i = 0; i != n_regs; ++i) { if (outs[i] != BE_START_NO) ++k; } be_info_init_irn(start, arch_irn_flag_schedule_first, NULL, k); /* Set out requirements and registers. */ unsigned l = 0; arch_set_irn_register_req_out(start, l++, arch_memory_req); arch_register_t const *const regs = isa_if->registers; for (unsigned i = 0; i != n_regs; ++i) { if (outs[i] != BE_START_NO) { arch_register_t const *const reg = ®s[i]; bool const ignore = outs[i] == BE_START_IGNORE; arch_register_req_t const *const req = be_create_reg_req(irg, reg, ignore); arch_set_irn_register_req_out(start, l, req); arch_set_irn_register_out( start, l, reg); ++l; } } assert(l == k); return start; }
/* Set the ARM machine node attributes to default values. */ static void init_arm_attributes(ir_node *node, arch_irn_flags_t flags, const arch_register_req_t ** in_reqs, int n_res) { be_info_init_irn(node, flags, in_reqs, n_res); arm_attr_t *const attr = get_arm_attr(node); attr->is_load_store = false; }
static void init_ia32_attributes(ir_node *node, arch_irn_flags_t flags, const arch_register_req_t **in_reqs, int n_res) { be_info_init_irn(node, flags, in_reqs, n_res); #ifndef NDEBUG ia32_attr_t *attr = get_ia32_attr(node); attr->attr_type |= IA32_ATTR_ia32_attr_t; #endif }
ir_node *be_new_Asm(dbg_info *const dbgi, ir_node *const block, int const n_ins, ir_node **const ins, arch_register_req_t const **const in_reqs, int const n_outs, ident *const text, void *const operands) { ir_graph *const irg = get_irn_irg(block); ir_node *const asmn = new_ir_node(dbgi, irg, block, op_be_Asm, mode_T, n_ins, ins); be_info_init_irn(asmn, arch_irn_flags_none, in_reqs, n_outs); be_asm_attr_t *const attr = (be_asm_attr_t*)get_irn_generic_attr(asmn); attr->text = text; attr->operands = operands; return asmn; }