aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-02-08 05:49:27 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1993-02-08 05:49:27 -0500
commitcd048831883f3b3acdd4dc315cc44df8aea04ed0 (patch)
tree566b3fa5c3691dcc53d41783550df0c5ea1d9d4c /gcc
parente7cf2d7e557f1bee5f121bb57c96070856f0a43f (diff)
downloadgcc-cd048831883f3b3acdd4dc315cc44df8aea04ed0.zip
gcc-cd048831883f3b3acdd4dc315cc44df8aea04ed0.tar.gz
gcc-cd048831883f3b3acdd4dc315cc44df8aea04ed0.tar.bz2
(emit_push_insn): If REG is zero, don't set regs here.
From-SVN: r3439
Diffstat (limited to 'gcc')
-rw-r--r--gcc/expr.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index b407896..dfc978a 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -1728,11 +1728,14 @@ gen_push_operand ()
ALIGN (in bytes) is maximum alignment we can assume.
- If PARTIAL is nonzero, then copy that many of the first words
- of X into registers starting with REG, and push the rest of X.
+ If PARTIAL and REG are both nonzero, then copy that many of the first
+ words of X into registers starting with REG, and push the rest of X.
The amount of space pushed is decreased by PARTIAL words,
rounded *down* to a multiple of PARM_BOUNDARY.
REG must be a hard register in this case.
+ If REG is zero but PARTIAL is not, take any all others actions for an
+ argument partially in registers, but do not actually load any
+ registers.
EXTRA is the amount in bytes of extra space to leave next to this arg.
This is ignored if an argument block has already been allocated.
@@ -2042,7 +2045,7 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
/* If part should go in registers, copy that part
into the appropriate registers. Do this now, at the end,
since mem-to-mem copies above may do function calls. */
- if (partial > 0)
+ if (partial > 0 && reg != 0)
move_block_to_reg (REGNO (reg), x, partial, mode);
if (extra && args_addr == 0 && where_pad == stack_direction)