aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2012-04-20 19:03:19 +0930
committerAlan Modra <amodra@gcc.gnu.org>2012-04-20 19:03:19 +0930
commit7153fab94f5f9c95a2607246461f5c17c8d0df9a (patch)
treea6839f3d47d6b44a29732e14161167ebe289832a /gcc
parent4e0bd6d3f8a1b385d049d345775102199406de96 (diff)
downloadgcc-7153fab94f5f9c95a2607246461f5c17c8d0df9a.zip
gcc-7153fab94f5f9c95a2607246461f5c17c8d0df9a.tar.gz
gcc-7153fab94f5f9c95a2607246461f5c17c8d0df9a.tar.bz2
re PR target/53040 (nested functions may trash floating point registers)
PR target/53040 * config/rs6000/rs6000.c (rs6000_savres_strategy): When using static chain, set REST_INLINE_FPRS too. From-SVN: r186616
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c5
2 files changed, 9 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 196fcd9..0a90509 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-04-20 Alan Modra <amodra@gmail.com>
+
+ PR target/53040
+ * config/rs6000/rs6000.c (rs6000_savres_strategy): When using
+ static chain, set REST_INLINE_FPRS too.
+
2012-04-20 Thomas Schwinge <thomas@codesourcery.com>
* tree-dump.c (dequeue_and_dump) <BIT_FIELD_REF>: Dump the three child
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index ceb6448..d120534 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -17457,8 +17457,9 @@ rs6000_savres_strategy (rs6000_stack_t *info,
static chain is rarely used anyway. FPRs are saved w.r.t the stack
pointer on Darwin. */
if (using_static_chain_p)
- strategy |= (DEFAULT_ABI == ABI_DARWIN ? 0 : SAVE_INLINE_FPRS)
- | SAVE_INLINE_GPRS;
+ strategy |= ((DEFAULT_ABI == ABI_DARWIN
+ ? 0 : SAVE_INLINE_FPRS | REST_INLINE_FPRS)
+ | SAVE_INLINE_GPRS);
/* If we are going to use store multiple, then don't even bother
with the out-of-line routines, since the store-multiple