aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorDavid Edelsohn <edelsohn@gnu.org>2003-12-24 02:22:37 +0000
committerDavid Edelsohn <dje@gcc.gnu.org>2003-12-23 21:22:37 -0500
commit8deb9aee9477fbe8fd8a0c9faf8b392ed07a3734 (patch)
tree87d1768140c9ea5855f3647e421b14c63deeae7d /gcc/function.c
parent2ab127f3ef93106864c0961bebe4cedd76453531 (diff)
downloadgcc-8deb9aee9477fbe8fd8a0c9faf8b392ed07a3734.zip
gcc-8deb9aee9477fbe8fd8a0c9faf8b392ed07a3734.tar.gz
gcc-8deb9aee9477fbe8fd8a0c9faf8b392ed07a3734.tar.bz2
function.c (assign_parms): Update max_parm_reg and parm_reg_stack_loc when adding new parm reg.
* function.c (assign_parms): Update max_parm_reg and parm_reg_stack_loc when adding new parm reg. From-SVN: r75001
Diffstat (limited to 'gcc/function.c')
-rw-r--r--gcc/function.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/gcc/function.c b/gcc/function.c
index 6eb44ae..30ede39 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -4740,9 +4740,28 @@ assign_parms (tree fndecl)
if (REG_P (parmreg))
{
+ unsigned int regno = REGNO (parmreg);
+
emit_group_store (parmreg, entry_parm, TREE_TYPE (parm),
int_size_in_bytes (TREE_TYPE (parm)));
SET_DECL_RTL (parm, parmreg);
+
+ if (regno >= max_parm_reg)
+ {
+ rtx *new;
+ int old_max_parm_reg = max_parm_reg;
+
+ /* It's slow to expand this one register at a time,
+ but it's also rare and we need max_parm_reg to be
+ precisely correct. */
+ max_parm_reg = regno + 1;
+ new = ggc_realloc (parm_reg_stack_loc,
+ max_parm_reg * sizeof (rtx));
+ memset (new + old_max_parm_reg, 0,
+ (max_parm_reg - old_max_parm_reg) * sizeof (rtx));
+ parm_reg_stack_loc = new;
+ parm_reg_stack_loc[regno] = stack_parm;
+ }
}
}