OSDN Git Service

* i386.c (ix86_split_long_move): Use change address to compensate
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Mar 2001 15:43:44 +0000 (15:43 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Mar 2001 15:43:44 +0000 (15:43 +0000)
stack pointer change in push instruction.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40968 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.c

index 6696baf..533b520 100644 (file)
@@ -1,3 +1,8 @@
+Fri Mar 30 17:36:43 CEST 2001  Jan Hubicka  <jh@suse.cz>
+
+       * i386.c (ix86_split_long_move): Use change address to compensate
+       stack pointer change in push instruction.
+
 Fri Mar 30 00:31:00 CEST 2001  Jan Hubicka  <jh@suse.cz>
 
        * i386.md (sse_movdfcc_eq): Fix constraint (sse_mov?fcc splitter): Use operands_match_p
index 5dc9fa9..9d63c5e 100644 (file)
@@ -6917,8 +6917,10 @@ ix86_split_long_move (operands)
       && reg_overlap_mentioned_p (stack_pointer_rtx, operands[1]))
     {
       if (nparts == 3)
-       part[1][1] = part[1][2];
-      part[1][0] = part[1][1];
+       part[1][1] = change_address (part[1][1], GET_MODE (part[1][1]),
+                                    XEXP (part[1][2], 0));
+      part[1][0] = change_address (part[1][0], GET_MODE (part[1][0]),
+                                  XEXP (part[1][1], 0));
     }
 
   /* We need to do copy in the right order in case an address register
@@ -6990,6 +6992,8 @@ ix86_split_long_move (operands)
                part[1][1] = gen_rtx_REG (DImode, REGNO (part[1][1]));
              else
                abort();
+             if (GET_MODE (part[1][0]) == SImode)
+               part[1][0] = part[1][1];
            }
        }
       emit_move_insn (part[0][1], part[1][1]);