From: John Hassey Date: Thu, 18 Feb 1993 03:05:08 +0000 (+0000) Subject: (emit_ldst): For large offsets use register index X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7f8f7371d3e43dcb01b3f9428507e40fa923de57;p=gcc.git (emit_ldst): For large offsets use register index instead of immediate. From-SVN: r3484 --- diff --git a/gcc/config/m88k/m88k.c b/gcc/config/m88k/m88k.c index aec823a96d4..c4718fb5347 100644 --- a/gcc/config/m88k/m88k.c +++ b/gcc/config/m88k/m88k.c @@ -2127,7 +2127,22 @@ emit_ldst (store_p, regno, mode, offset) int offset; { 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) emit_move_insn (mem, reg);