*/
static void use_reg(ir_node *node, const arch_register_t *reg, unsigned width)
{
- unsigned r = arch_register_get_index(reg);
+ unsigned r = reg->index;
for (unsigned r0 = r; r0 < r + width; ++r0)
assignments[r0] = node;
arch_set_irn_register(node, reg);
const arch_register_t *reg = arch_get_irn_register(node);
const arch_register_req_t *req = arch_get_irn_register_req(node);
- unsigned r = arch_register_get_index(reg);
+ unsigned r = reg->index;
/* assignment->value may be NULL if a value is used at 2 inputs
* so it gets freed twice. */
for (unsigned r0 = r; r0 < r + req->width; ++r0) {
return false;
const arch_register_t *from_reg = arch_get_irn_register(to_split);
- unsigned from_r = arch_register_get_index(from_reg);
+ unsigned from_r = from_reg->index;
ir_node *block = get_nodes_block(before);
float split_threshold = (float)get_block_execfreq(block) * SPLIT_DELTA;
unsigned width = 1;
mark_as_copy_of(copy, to_split);
/* hacky, but correct here */
- if (assignments[arch_register_get_index(from_reg)] == to_split)
+ if (assignments[from_reg->index] == to_split)
free_reg_of_value(to_split);
use_reg(copy, reg, width);
sched_add_before(before, copy);
ir_node *in = get_irn_n(in_node, i);
const arch_register_t *reg = arch_get_irn_register(in);
- unsigned reg_index = arch_register_get_index(reg);
+ unsigned reg_index = reg->index;
/* if the value didn't die here then we should not propagate the
* should_be_same info */
}
/* old register has 1 user less, permutation is resolved */
- assert(arch_register_get_index(arch_get_irn_register(src)) == old_r);
+ assert(arch_get_irn_register(src)->index == old_r);
permutation[r] = r;
assert(n_used[old_r] > 0);
ir_node *op = get_irn_n(node, i);
const arch_register_t *reg = arch_get_irn_register(op);
- rbitset_clear(bitset, arch_register_get_index(reg));
+ rbitset_clear(bitset, reg->index);
}
}
const unsigned *limited = req->limited;
const arch_register_t *reg = arch_get_irn_register(op);
- unsigned current_reg = arch_register_get_index(reg);
+ unsigned current_reg = reg->index;
for (unsigned r = 0; r < n_regs; ++r) {
if (rbitset_is_set(limited, r))
continue;
if (req->width > 1)
double_width = true;
const arch_register_t *reg = arch_get_irn_register(op);
- unsigned reg_index = arch_register_get_index(reg);
+ unsigned reg_index = reg->index;
if (req->type & arch_register_req_type_aligned) {
if (!is_aligned(reg_index, req->width)) {
good = false;
const unsigned *limited = req->limited;
const arch_register_t *reg = arch_get_irn_register(op);
- unsigned current_reg = arch_register_get_index(reg);
+ unsigned current_reg = reg->index;
for (unsigned r = 0; r < n_regs; ++r) {
if (rbitset_is_set(limited, r))
continue;
assert(a >= 0);
const arch_register_t *reg = arch_get_irn_register(phi);
- int regn = arch_register_get_index(reg);
+ int regn = reg->index;
/* same register? nothing to do */
if (regn == a)
continue;
/* we have permuted all values into the correct registers so we can
simply query which value occupies the phis register in the
predecessor */
- int a = arch_register_get_index(arch_get_irn_register(phi));
+ int a = arch_get_irn_register(phi)->index;
ir_node *op = pred_info->assignments[a];
set_Phi_pred(phi, p, op);
}
continue;
/* give bonus for already assigned register */
- float weight = (float)get_block_execfreq(pred_block);
- unsigned r = arch_register_get_index(reg);
- info->prefs[r] += weight * AFF_PHI;
+ float weight = (float)get_block_execfreq(pred_block);
+ info->prefs[reg->index] += weight * AFF_PHI;
}
}
continue;
const arch_register_t *reg = arch_get_irn_register(op);
- rbitset_set(forbidden_regs, arch_register_get_index(reg));
+ rbitset_set(forbidden_regs, reg->index);
}
/* free registers of values last used at this instruction */
if (arch_irn_consider_in_reg_alloc(cls, proj)) {
const arch_register_t *reg = x87_get_irn_register(proj);
- live &= ~(1 << arch_register_get_index(reg));
+ live &= ~(1 << reg->index);
}
}
} else if (arch_irn_consider_in_reg_alloc(cls, irn)) {
const arch_register_t *reg = x87_get_irn_register(irn);
- live &= ~(1 << arch_register_get_index(reg));
+ live &= ~(1 << reg->index);
}
for (i = 0, n = get_irn_arity(irn); i < n; ++i) {
if (mode_is_float(get_irn_mode(op)) &&
arch_irn_consider_in_reg_alloc(cls, op)) {
const arch_register_t *reg = x87_get_irn_register(op);
- live |= 1 << arch_register_get_index(reg);
+ live |= 1 << reg->index;
}
}
return live;
continue;
reg = x87_get_irn_register(node);
- live |= 1 << arch_register_get_index(reg);
+ live |= 1 << reg->index;
}
return live;
}
/** get the register mask from an arch_register */
-#define REGMASK(reg) (1 << (arch_register_get_index(reg)))
+#define REGMASK(reg) (1 << (reg->index))
/**
* Return a bitset of argument registers which are live at the end of a node.
const arch_register_t *op1_reg = x87_get_irn_register(op1);
const arch_register_t *op2_reg = x87_get_irn_register(op2);
const arch_register_t *out = x87_irn_get_register(n, pn_ia32_res);
- int reg_index_1 = arch_register_get_index(op1_reg);
- int reg_index_2 = arch_register_get_index(op2_reg);
+ int reg_index_1 = op1_reg->index;
+ int reg_index_2 = op2_reg->index;
vfp_liveness live = vfp_live_args_after(sim, n, REGMASK(out));
int op1_live_after;
int op2_live_after;
attr = get_ia32_x87_attr(n);
permuted = attr->attr.data.ins_permuted;
- int const out_reg_idx = arch_register_get_index(out);
+ int const out_reg_idx = out->index;
if (reg_index_2 != REG_VFP_VFP_NOREG) {
assert(!permuted);
ir_node *const op1 = get_irn_n(n, 0);
arch_register_t const *const op1_reg = x87_get_irn_register(op1);
- int const op1_reg_idx = arch_register_get_index(op1_reg);
+ int const op1_reg_idx = op1_reg->index;
int const op1_idx = x87_on_stack(state, op1_reg_idx);
- int const out_reg_idx = arch_register_get_index(out);
+ int const out_reg_idx = out->index;
if (is_vfp_live(op1_reg_idx, live)) {
/* push the operand here */
x87_create_fpush(state, n, op1_idx, out_reg_idx, op1);
ia32_x87_attr_t *attr;
DB((dbg, LEVEL_1, ">>> %+F -> %s\n", n, out->name));
- x87_push(state, arch_register_get_index(out), x87_patch_insn(n, op));
+ x87_push(state, out->index, x87_patch_insn(n, op));
assert(out == x87_irn_get_register(n, res_pos));
attr = get_ia32_x87_attr(n);
attr->x87[2] = out = get_st_reg(0);
bool do_pop = false;
int insn = NO_NODE_ADDED;
- int const op2_reg_idx = arch_register_get_index(op2);
+ int const op2_reg_idx = op2->index;
int const op2_idx = x87_on_stack(state, op2_reg_idx);
unsigned const live = vfp_live_args_after(state->sim, n, 0);
int const live_after_node = is_vfp_live(op2_reg_idx, live);
ir_node *val = get_irn_n(n, n_ia32_vfst_val);
const arch_register_t *op2 = x87_get_irn_register(val);
ia32_x87_attr_t *attr;
- int op2_reg_idx, op2_idx;
- op2_reg_idx = arch_register_get_index(op2);
- op2_idx = x87_on_stack(state, op2_reg_idx);
+ int const op2_idx = x87_on_stack(state, op2->index);
DB((dbg, LEVEL_1, ">>> %+F %s ->\n", n, op2->name));
assert(op2_idx >= 0);
ia32_x87_attr_t *attr = get_ia32_x87_attr(n);
ir_node *op1_node = get_irn_n(n, n_ia32_vFtstFnstsw_left);
const arch_register_t *reg1 = x87_get_irn_register(op1_node);
- int reg_index_1 = arch_register_get_index(reg1);
+ int reg_index_1 = reg1->index;
int op1_idx = x87_on_stack(state, reg_index_1);
unsigned live = vfp_live_args_after(sim, n, 0);
ir_node *op2_node = get_irn_n(n, n_ia32_vFucomFnstsw_right);
const arch_register_t *op1 = x87_get_irn_register(op1_node);
const arch_register_t *op2 = x87_get_irn_register(op2_node);
- int reg_index_1 = arch_register_get_index(op1);
- int reg_index_2 = arch_register_get_index(op2);
+ int reg_index_1 = op1->index;
+ int reg_index_2 = op2->index;
unsigned live = vfp_live_args_after(sim, n, 0);
bool permuted = attr->attr.data.ins_permuted;
bool xchg = false;
if (arch_register_get_class(op_reg) != &ia32_reg_classes[CLASS_ia32_vfp])
continue;
- reg_id = arch_register_get_index(op_reg);
+ reg_id = op_reg->index;
live = vfp_live_args_after(state->sim, node, 0);
op_stack_idx = x87_on_stack(state, reg_id);
/* copy a constant */
res = (*cnstr)(n_dbg, block, mode);
- x87_push(state, arch_register_get_index(out), res);
+ x87_push(state, out->index, res);
attr = get_ia32_x87_attr(res);
attr->x87[2] = get_st_reg(0);
} else {
- int op1_idx = x87_on_stack(state, arch_register_get_index(op1));
+ int op1_idx = x87_on_stack(state, op1->index);
res = new_bd_ia32_fpushCopy(n_dbg, block, pred, mode);
- x87_push(state, arch_register_get_index(out), res);
+ x87_push(state, out->index, res);
attr = get_ia32_x87_attr(res);
attr->x87[0] = get_st_reg(op1_idx);
DB((dbg, LEVEL_1, ">>> %+F %s -> %s\n", n, op1->name, out->name));
DEBUG_ONLY(vfp_dump_live(live);)
- if (is_vfp_live(arch_register_get_index(op1), live)) {
+ if (is_vfp_live(op1->index, live)) {
/* Operand is still live, a real copy. We need here an fpush that can
hold a a register, so use the fpushCopy or recreate constants */
ir_node *const node = create_Copy(state, n);
DB((dbg, LEVEL_1, "<<< %+F %s -> ?\n", node, op1->name));
} else {
/* Just a virtual copy. */
- int const op1_idx = x87_on_stack(state, arch_register_get_index(op1));
- x87_set_st(state, arch_register_get_index(out), n, op1_idx);
+ int const op1_idx = x87_on_stack(state, op1->index);
+ x87_set_st(state, out->index, n, op1_idx);
}
return NO_NODE_ADDED;
}
if (mode && mode_is_float(mode)) {
ir_node *const resproj = get_call_result_proj(n);
arch_register_t const *const reg = x87_get_irn_register(resproj);
- x87_push(state, arch_register_get_index(reg), resproj);
+ x87_push(state, reg->index, resproj);
}
}
DB((dbg, LEVEL_1, "Stack after: "));
/* collect old stack positions */
for (i = 0; i < n; ++i) {
const arch_register_t *inreg = x87_get_irn_register(get_irn_n(irn, i));
- int idx = x87_on_stack(state, arch_register_get_index(inreg));
+ int idx = x87_on_stack(state, inreg->index);
assert(idx >= 0 && "Perm argument not on x87 stack");
long num = get_Proj_proj(proj);
assert(0 <= num && num < n && "More Proj's than Perm inputs");
- x87_set_st(state, arch_register_get_index(out), proj, stack_pos[(unsigned)num]);
+ x87_set_st(state, out->index, proj, stack_pos[(unsigned)num]);
}
DB((dbg, LEVEL_1, "<<< %+F\n", irn));