This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
assign_stack_temp_for_type BLKmode size rounding
- To: law at cygnus dot com
- Subject: assign_stack_temp_for_type BLKmode size rounding
- From: John Wehle <john at feith dot com>
- Date: Thu, 25 Feb 1999 01:52:55 -0500 (EST)
- Cc: egcs-patches at egcs dot cygnus dot com
Some comments about your change:
1) Since align is never suppose to be less than BIGGEST_ALIGNMENT /
BITS_PER_UNIT when mode == BLKmode I would be incline to call abort
if it ever happens.
2) The comments:
/* The following slot size computation is necessary because we don't
know the actual size of the temporary slot until assign_stack_local
has performed all the frame alignment and size rounding for the
requested temporary. Note that extra space added for alignment
can be either above or below this stack slot depending on which
way the frame grows. We include the extra space if and only if it
is above this slot. */
#ifdef FRAME_GROWS_DOWNWARD
p->size = frame_offset_old - frame_offset;
#else
p->size = size;
#endif
seem to indicate that ->size should not include rounding done
for alignment and (if I recall correctly) the original code
did not (in general) include the rounding done for alignment.
Notes:
1) Egcs bootstraps and no new testsuite regressions are evident on
FreeBSD 3.1 x86 when configured for aout. This patch has not
been tried on any other platform.
ChangeLog:
Sat Feb 20 13:47:00 EST 1999 John Wehle (john@feith.com)
* function.c (assign_stack_temp_for_type): Abort
if mode == Blkmode and align is less than
BIGGEST_ALIGNMENT / BITS_PER_UNIT.
(assign_stack_temp_for_type): Round the size parameter
passed to assign_stack_local instead of size itself.
Enjoy!
-- John Wehle
------------------8<------------------------8<------------------------
*** gcc/function.c.ORIGINAL Sat Feb 20 03:07:39 1999
--- gcc/function.c Sat Feb 20 03:46:40 1999
*************** assign_stack_temp_for_type (mode, size,
*** 970,981 ****
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;
--- 970,981 ----
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 < (BIGGEST_ALIGNMENT / BITS_PER_UNIT))
! abort();
! p->slot = assign_stack_local (mode,
! mode == BLKmode
! ? CEIL_ROUND (size, align) : size,
! align);
p->align = align;
-------------------------------------------------------------------------
| Feith Systems | Voice: 1-215-646-8000 | Email: john@feith.com |
| John Wehle | Fax: 1-215-540-5495 | |
-------------------------------------------------------------------------