diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2003-11-20 22:42:01 +0000 |
---|---|---|
committer | David Edelsohn <dje@gcc.gnu.org> | 2003-11-20 17:42:01 -0500 |
commit | 531547e90e1394313f68e2c44624638f79317137 (patch) | |
tree | 06a9206319b71ba393811bbdb094a8c0bfcf8cd5 /gcc/expr.c | |
parent | 4be58168d32c1230d713573765a30026738e94f6 (diff) | |
download | gcc-531547e90e1394313f68e2c44624638f79317137.zip gcc-531547e90e1394313f68e2c44624638f79317137.tar.gz gcc-531547e90e1394313f68e2c44624638f79317137.tar.bz2 |
calls.c (expand_call): Allocate new temp in pass1.
2003-11-20 Fariborz Jahanian <fjahanian@apple.com>
David Edelsohn <edelsohn@gnu.org>
* calls.c (expand_call): Allocate new temp in pass1.
(store_one_arg): If PARALLEL, calculate excess using mode size of
rtvec elt.
* expr.c (emit_push_insn): If PARALLEL, calculate offset using
mode size of rtvec elt.
* function.c (assign_parms): Use parm in register, if available.
Co-Authored-By: David Edelsohn <edelsohn@gnu.org>
From-SVN: r73775
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -3474,9 +3474,19 @@ emit_push_insn (rtx x, enum machine_mode mode, tree type, rtx size, rtx temp; int used = partial * UNITS_PER_WORD; - int offset = used % (PARM_BOUNDARY / BITS_PER_UNIT); + int offset; int skip; + if (reg && GET_CODE (reg) == PARALLEL) + { + /* Use the size of the elt to compute offset. */ + rtx elt = XEXP (XVECEXP (reg, 0, 0), 0); + used = partial * GET_MODE_SIZE (GET_MODE (elt)); + offset = used % (PARM_BOUNDARY / BITS_PER_UNIT); + } + else + offset = used % (PARM_BOUNDARY / BITS_PER_UNIT); + if (size == 0) abort (); |