aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Evans <dje@gnu.org>1994-12-07 20:58:08 +0000
committerDoug Evans <dje@gnu.org>1994-12-07 20:58:08 +0000
commitd4b0a7a049724e029148cc11e71e4bf51a10b092 (patch)
tree1cdc1119bc43386b9468d91cb0fa58222d1ede01
parentb0c312a930d1394f8140e0aeb5bbd025e8ba9ab4 (diff)
downloadgcc-d4b0a7a049724e029148cc11e71e4bf51a10b092.zip
gcc-d4b0a7a049724e029148cc11e71e4bf51a10b092.tar.gz
gcc-d4b0a7a049724e029148cc11e71e4bf51a10b092.tar.bz2
(locate_and_pad_parm): Do padding before rounding
so pad_below knows how much is needed. From-SVN: r8622
-rw-r--r--gcc/function.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/function.c b/gcc/function.c
index 3811835..7e50c84 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -4015,15 +4015,16 @@ locate_and_pad_parm (passed_mode, type, in_regs, fndecl,
sizetree = size_int (PUSH_ROUNDING (TREE_INT_CST_LOW (sizetree)));
#endif
+ /* Pad_below needs the pre-rounded size to know how much to pad below
+ so this must be done before rounding up. */
+ if (where_pad == downward)
+ pad_below (offset_ptr, passed_mode, sizetree);
+
if (where_pad != none
&& (TREE_CODE (sizetree) != INTEGER_CST
|| ((TREE_INT_CST_LOW (sizetree) * BITS_PER_UNIT) % PARM_BOUNDARY)))
sizetree = round_up (sizetree, PARM_BOUNDARY / BITS_PER_UNIT);
- /* This must be done after rounding sizetree, so that it will subtract
- the same value that we explicitly add below. */
- if (where_pad == downward)
- pad_below (offset_ptr, passed_mode, sizetree);
ADD_PARM_SIZE (*arg_size_ptr, sizetree);
#endif /* ARGS_GROW_DOWNWARD */
}