Commit 7f8f7371 by John Hassey

(emit_ldst): For large offsets use register index

instead of immediate.

From-SVN: r3484
parent abc1d3f1
...@@ -2127,7 +2127,22 @@ emit_ldst (store_p, regno, mode, offset) ...@@ -2127,7 +2127,22 @@ emit_ldst (store_p, regno, mode, offset)
int offset; int offset;
{ {
rtx reg = gen_rtx (REG, mode, regno); rtx reg = gen_rtx (REG, mode, regno);
rtx mem = gen_rtx (MEM, mode, plus_constant (stack_pointer_rtx, offset)); rtx mem;
if (SMALL_INTVAL (offset))
{
mem = gen_rtx (MEM, mode, plus_constant (stack_pointer_rtx, offset));
}
else
{
/* offset is too large for immediate index must use register */
rtx disp = gen_rtx (CONST_INT, VOIDmode, offset);
rtx temp = gen_rtx (REG, SImode, TEMP_REGNUM);
rtx regi = gen_rtx (PLUS, SImode, stack_pointer_rtx, temp);
emit_move_insn (temp, disp);
mem = gen_rtx (MEM, mode, regi);
}
if (store_p) if (store_p)
emit_move_insn (mem, reg); emit_move_insn (mem, reg);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment