From e7c2087cea5f1d1b45e9abfe4660dd1be52bb42d Mon Sep 17 00:00:00 2001
From: Richard Stallman <rms@gnu.org>
Date: Sat, 30 Oct 1993 22:11:45 +0000
Subject: [PATCH] (output_move_double): Extend the special case for *--sp =
 sp[N] to handle 12 bytes as well as 8 bytes.

From-SVN: r5951
---
 gcc/config/i386/i386.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 8ef428910d0f..384cfb076945 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -444,12 +444,14 @@ output_move_double (operands)
     }
 
   /* 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.  */
+     high word first.  We should use the adjusted operand 1
+     (which is N+4 (sp) or N+8 (sp))
+     for the low word and middle word as well,
+     to compensate for the first decrement of sp.  */
   if (optype0 == PUSHOP
       && REGNO (XEXP (XEXP (operands[0], 0), 0)) == STACK_POINTER_REGNUM
       && reg_overlap_mentioned_p (stack_pointer_rtx, operands[1]))
-    operands[1] = latehalf[1];
+    middlehalf[1] = operands[1] = latehalf[1];
 
   /* For (set (reg:DI N) (mem:DI ... (reg:SI N) ...)),
      if the upper part of reg N does not appear in the MEM, arrange to
-- 
GitLab