diff options
author | J"orn Rennecke <amylaar@cygnus.co.uk> | 2000-02-25 20:12:02 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2000-02-25 20:12:02 +0000 |
commit | 0ad913af75bd074c706e162e99591a5d6db37c9f (patch) | |
tree | d7775bea2212e7f6521be0ee9ca5ecb3a52462a4 /gcc | |
parent | dc5de37072b855beba90a62056d96ce1bf422c7c (diff) | |
download | gcc-0ad913af75bd074c706e162e99591a5d6db37c9f.zip gcc-0ad913af75bd074c706e162e99591a5d6db37c9f.tar.gz gcc-0ad913af75bd074c706e162e99591a5d6db37c9f.tar.bz2 |
sh.c (calc_live_regs): Multiply value assigned to *COUNT_PTR by UNITS_PER_WORD.
* sh.c (calc_live_regs): Multiply value assigned to *COUNT_PTR by
UNITS_PER_WORD. Change caller initial_elimination_offset.
(rounded_frame_size): Take into account that argument pushed has
changed. Fix TARGET_ALIGN_DOUBLE problem.
From-SVN: r32152
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/sh/sh.c | 11 |
2 files changed, 13 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index edb1176..83307d1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Fri Feb 25 20:02:35 2000 J"orn Rennecke <amylaar@cygnus.co.uk> + + * sh.c (calc_live_regs): Multiply value assigned to *COUNT_PTR by + UNITS_PER_WORD. Change caller initial_elimination_offset. + (rounded_frame_size): Take into account that argument pushed has + changed. Fix TARGET_ALIGN_DOUBLE problem. + 2000-02-25 Geoff Keating <geoffk@cygnus.com> * haifa-sched.c (schedule_block): Explain the real reason diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 7eaf707..6f45669 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -3788,12 +3788,15 @@ calc_live_regs (count_ptr, live_regs_mask2) } } - *count_ptr = count; + *count_ptr = count * UNITS_PER_WORD; return live_regs_mask; } /* Code to generate prologue and epilogue sequences */ +/* PUSHED is the number of bytes that are bing pushed on the + stack for register saves. Return the frame size, padded + appropriately so that the stack stays properly aligned. */ static HOST_WIDE_INT rounded_frame_size (pushed) int pushed; @@ -3801,9 +3804,7 @@ rounded_frame_size (pushed) HOST_WIDE_INT size = get_frame_size (); HOST_WIDE_INT align = STACK_BOUNDARY / BITS_PER_UNIT; - if (TARGET_ALIGN_DOUBLE && pushed & 1) - size += 4; - return size + align - 1 & -align; + return (size + pushed + align - 1 & -align) - pushed; } void @@ -4311,7 +4312,7 @@ initial_elimination_offset (from, to) total_auto_space = rounded_frame_size (regs_saved); target_flags = save_flags; - total_saved_regs_space = (regs_saved) * 4; + total_saved_regs_space = regs_saved; if (from == ARG_POINTER_REGNUM && to == FRAME_POINTER_REGNUM) return total_saved_regs_space + total_auto_space; |