aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1999-02-18 17:51:58 +0000
committerJeff Law <law@gcc.gnu.org>1999-02-18 10:51:58 -0700
commitc87a0a3994b20fcf69a9d4072516929c08a96746 (patch)
treef0eab21139c029483c2daa202f4e15f29369101c /gcc
parent743f9f5dfdca8dfa597125b06edddfb61a968d06 (diff)
downloadgcc-c87a0a3994b20fcf69a9d4072516929c08a96746.zip
gcc-c87a0a3994b20fcf69a9d4072516929c08a96746.tar.gz
gcc-c87a0a3994b20fcf69a9d4072516929c08a96746.tar.bz2
function.c (assign_stack_temp_for_type): Round SIZE before calling assign_stack_local for BLKmode slots.
* function.c (assign_stack_temp_for_type): Round SIZE before calling assign_stack_local for BLKmode slots. From-SVN: r25290
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/function.c12
2 files changed, 17 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bdc71f9..9e98406 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Thu Feb 18 18:47:09 1999 Jeffrey A Law (law@cygnus.com)
+
+ * function.c (assign_stack_temp_for_type): Round SIZE before calling
+ assign_stack_local for BLKmode slots.
+
Fri Feb 19 01:45:06 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
* loop.c (strength_reduce): For derived givs, replace the
diff --git a/gcc/function.c b/gcc/function.c
index a14a886..05189d9 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -963,6 +963,18 @@ assign_stack_temp_for_type (mode, size, keep, type)
p = (struct temp_slot *) oballoc (sizeof (struct temp_slot));
+ /* We are passing an explicit alignment request to assign_stack_local.
+ One side effect of that is assign_stack_local will not round SIZE
+ to ensure the frame offset remains suitably aligned.
+
+ So for requests which depended on the rounding of SIZE, we go ahead
+ and round it now. We also make sure ALIGNMENT is at least
+ BIGGEST_ALIGNMENT. */
+ if (mode == BLKmode)
+ {
+ align = MAX (align, BIGGEST_ALIGNMENT / BITS_PER_UNIT);
+ size = CEIL_ROUND (size, align);
+ }
p->slot = assign_stack_local (mode, size, align);
p->align = align;