aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorIan Bolton <ian.bolton@arm.com>2010-08-19 08:27:59 +0000
committerRamana Radhakrishnan <ramana@gcc.gnu.org>2010-08-19 08:27:59 +0000
commitc92f1823b0f338f196da7586af13fd93b5a950ef (patch)
tree3a7046701b34c0d55f7149dc9e54e1e7a08448d0 /gcc/config
parentf096c02afcfad5fbb2e0021af89520c3745084e5 (diff)
downloadgcc-c92f1823b0f338f196da7586af13fd93b5a950ef.zip
gcc-c92f1823b0f338f196da7586af13fd93b5a950ef.tar.gz
gcc-c92f1823b0f338f196da7586af13fd93b5a950ef.tar.bz2
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. From-SVN: r163367
Diffstat (limited to 'gcc/config')
-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 f6148a7..5ed16a8 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;