aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2003-11-20 22:42:01 +0000
committerDavid Edelsohn <dje@gcc.gnu.org>2003-11-20 17:42:01 -0500
commit531547e90e1394313f68e2c44624638f79317137 (patch)
tree06a9206319b71ba393811bbdb094a8c0bfcf8cd5 /gcc/expr.c
parent4be58168d32c1230d713573765a30026738e94f6 (diff)
downloadgcc-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.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 320284c..ac0249f 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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 ();