summaryrefslogtreecommitdiff
path: root/gcc/config/arm
diff options
context:
space:
mode:
authorramana <ramana@138bc75d-0d04-0410-961f-82ee72b054a4>2010-08-19 08:27:59 +0000
committerramana <ramana@138bc75d-0d04-0410-961f-82ee72b054a4>2010-08-19 08:27:59 +0000
commita8eb47ea754a18208695983bc5ada2def78add05 (patch)
tree3a7046701b34c0d55f7149dc9e54e1e7a08448d0 /gcc/config/arm
parent77d6a623ca1ccd614007ad730fb3f5a3f04d193f (diff)
downloadgcc-a8eb47ea754a18208695983bc5ada2def78add05.tar.gz
For Ian Bolton <ian.bolton@arm.com>
2010-08-19 Ian Bolton <ian.bolton@arm.com> PR target/45070 * gcc.c-torture/execute/pr45070.c: New. * config/arm/arm.c (arm_output_epilogue): Ensure that return value of size 1-3 is handled correctly. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163367 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/arm')
-rw-r--r--gcc/config/arm/arm.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index f6148a7309d..5ed16a8a76e 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -14467,7 +14467,8 @@ arm_output_epilogue (rtx sibling)
&& !crtl->tail_call_emit)
{
unsigned long mask;
- mask = (1 << (arm_size_return_regs() / 4)) - 1;
+ /* Preserve return values, of any size. */
+ mask = (1 << ((arm_size_return_regs() + 3) / 4)) - 1;
mask ^= 0xf;
mask &= ~saved_regs_mask;
reg = 0;