Commit e864837a by Andreas Schwab Committed by Andreas Schwab

m68k.c (handle_move_double): Handle pushes with overlapping registers also for…

m68k.c (handle_move_double): Handle pushes with overlapping registers also for registers other than the...

* config/m68k/m68k.c (handle_move_double): Handle pushes with
overlapping registers also for registers other than the stack
pointer.

From-SVN: r206317
parent 56a34230
2014-01-03 Andreas Schwab <schwab@linux-m68k.org>
* config/m68k/m68k.c (handle_move_double): Handle pushes with
overlapping registers also for registers other than the stack
pointer.
2014-01-03 Marek Polacek <polacek@redhat.com> 2014-01-03 Marek Polacek <polacek@redhat.com>
PR other/59661 PR other/59661
......
...@@ -3328,12 +3328,12 @@ handle_move_double (rtx operands[2], ...@@ -3328,12 +3328,12 @@ handle_move_double (rtx operands[2],
latehalf[1] = adjust_address (operands[1], SImode, 0); latehalf[1] = adjust_address (operands[1], SImode, 0);
} }
/* If insn is effectively movd N(sp),-(sp) then we will do the /* If insn is effectively movd N(REG),-(REG) then we will do the high
high word first. We should use the adjusted operand 1 (which is N+4(sp)) word first. We should use the adjusted operand 1 (which is N+4(REG))
for the low word as well, to compensate for the first decrement of sp. */ for the low word as well, to compensate for the first decrement of
REG. */
if (optype0 == PUSHOP if (optype0 == PUSHOP
&& REGNO (XEXP (XEXP (operands[0], 0), 0)) == STACK_POINTER_REGNUM && reg_overlap_mentioned_p (XEXP (XEXP (operands[0], 0), 0), operands[1]))
&& reg_overlap_mentioned_p (stack_pointer_rtx, operands[1]))
operands[1] = middlehalf[1] = latehalf[1]; operands[1] = middlehalf[1] = latehalf[1];
/* For (set (reg:DI N) (mem:DI ... (reg:SI N) ...)), /* For (set (reg:DI N) (mem:DI ... (reg:SI N) ...)),
......
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