case iro_ia32_ShlD:
case iro_ia32_ShrD:
+ assert(n_ia32_ShlD_count == n_ia32_ShrD_count);
+ count = get_irn_n(node, n_ia32_ShlD_count);
+ goto check_shift_amount;
+
case iro_ia32_Shl:
case iro_ia32_Shr:
case iro_ia32_Sar:
- assert(n_ia32_ShlD_count == n_ia32_ShrD_count);
assert(n_ia32_Shl_count == n_ia32_Shr_count
&& n_ia32_Shl_count == n_ia32_Sar_count);
- if (is_ia32_ShlD(node) || is_ia32_ShrD(node)) {
- count = get_irn_n(node, n_ia32_ShlD_count);
- } else {
- count = get_irn_n(node, n_ia32_Shl_count);
- }
+ count = get_irn_n(node, n_ia32_Shl_count);
+check_shift_amount:
/* when shift count is zero the flags are not affected, so we can only
* do this for constants != 0 */
if (!is_ia32_Immediate(count))
}
}
- /* ensure, that the 3 byte return is generated
- * actually the emitter tests again if the block beginning has a label and
- * isn't just a fallthrough */
+ /* ensure, that the 3 byte return is generated */
be_Return_set_emit_pop(node, 1);
}
maxslot = -1;
pred_sp = be_get_IncSP_pred(irn);
for (node = sched_prev(irn); !sched_is_end(node); node = sched_prev(node)) {
- ir_node *mem;
int offset;
int loadslot;
const arch_register_t *sreg, *dreg;
* but we do not check this */
break;
}
- /* Load has to be attached to Spill-Mem */
- mem = skip_Proj(get_irn_n(node, n_ia32_mem));
- if (!is_Phi(mem) && !is_ia32_Store(mem) && !is_ia32_Push(mem))
- break;
/* should have NO index */
- if (get_ia32_am_scale(node) > 0 || !is_ia32_NoReg_GP(get_irn_n(node, n_ia32_index)))
+ if (!is_ia32_NoReg_GP(get_irn_n(node, n_ia32_index)))
break;
offset = get_ia32_am_offs_int(node);