m68k.c (handle_move_double): Handle pushes with overlapping registers also for regist...
authorAndreas Schwab <schwab@linux-m68k.org>
Fri, 3 Jan 2014 13:57:45 +0000 (13:57 +0000)
committerAndreas Schwab <schwab@gcc.gnu.org>
Fri, 3 Jan 2014 13:57:45 +0000 (13:57 +0000)
* config/m68k/m68k.c (handle_move_double): Handle pushes with
overlapping registers also for registers other than the stack
pointer.

From-SVN: r206317

gcc/ChangeLog
gcc/config/m68k/m68k.c

index a5e8ee2..1cb81b7 100644 (file)
@@ -1,3 +1,9 @@
+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>
 
        PR other/59661
index 25b8580..f20d071 100644 (file)
@@ -3328,12 +3328,12 @@ handle_move_double (rtx operands[2],
        latehalf[1] = adjust_address (operands[1], SImode, 0);
     }
 
-  /* If insn is effectively movd N(sp),-(sp) then we will do the
-     high word first.  We should use the adjusted operand 1 (which is N+4(sp))
-     for the low word as well, to compensate for the first decrement of sp.  */
+  /* If insn is effectively movd N(REG),-(REG) then we will do the high
+     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
+     REG.  */
   if (optype0 == PUSHOP
-      && REGNO (XEXP (XEXP (operands[0], 0), 0)) == STACK_POINTER_REGNUM
-      && reg_overlap_mentioned_p (stack_pointer_rtx, operands[1]))
+      && reg_overlap_mentioned_p (XEXP (XEXP (operands[0], 0), 0), operands[1]))
     operands[1] = middlehalf[1] = latehalf[1];
 
   /* For (set (reg:DI N) (mem:DI ... (reg:SI N) ...)),