From 7153fab94f5f9c95a2607246461f5c17c8d0df9a Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 20 Apr 2012 19:03:19 +0930 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/config/rs6000/rs6000.c | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 196fcd9d39e..0a90509422c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-04-20 Alan Modra + + PR target/53040 + * config/rs6000/rs6000.c (rs6000_savres_strategy): When using + static chain, set REST_INLINE_FPRS too. + 2012-04-20 Thomas Schwinge * tree-dump.c (dequeue_and_dump) : Dump the three child diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index ceb6448742c..d1205341d88 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 -- 2.30.2