aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-11-23 13:30:35 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1994-11-23 13:30:35 -0500
commita98c9f1ab2c7f8ad5cb6153ce46731b66fd110ea (patch)
treef05c5d927cf9cb965d3b3535cc00f128069ddf53
parent601774ce085c9e492abc26534e36676066bcc887 (diff)
downloadgcc-a98c9f1ab2c7f8ad5cb6153ce46731b66fd110ea.zip
gcc-a98c9f1ab2c7f8ad5cb6153ce46731b66fd110ea.tar.gz
gcc-a98c9f1ab2c7f8ad5cb6153ce46731b66fd110ea.tar.bz2
(emit_move_insn): If splitting up into individual words and X is a push_operand...
(emit_move_insn): If splitting up into individual words and X is a push_operand, do the push and reference top of stack. From-SVN: r8554
-rw-r--r--gcc/expr.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index a1ecf25..0d5fd9f 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -1951,6 +1951,17 @@ emit_move_insn_1 (x, y)
rtx last_insn = 0;
rtx insns;
+#ifdef PUSH_ROUNDING
+
+ /* If X is a push on the stack, do the push now and replace
+ X with a reference to the stack pointer. */
+ if (push_operand (x, GET_MODE (x)))
+ {
+ anti_adjust_stack (GEN_INT (GET_MODE_SIZE (GET_MODE (x))));
+ x = change_address (x, VOIDmode, stack_pointer_rtx);
+ }
+#endif
+
for (i = 0;
i < (GET_MODE_SIZE (mode) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD;
i++)