diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1993-02-08 05:49:27 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1993-02-08 05:49:27 -0500 |
commit | cd048831883f3b3acdd4dc315cc44df8aea04ed0 (patch) | |
tree | 566b3fa5c3691dcc53d41783550df0c5ea1d9d4c /gcc | |
parent | e7cf2d7e557f1bee5f121bb57c96070856f0a43f (diff) | |
download | gcc-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.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -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) |