diff -urp gcc-alan4/gcc/config/rs6000/rs6000.c gcc-alan5a/gcc/config/rs6000/rs6000.c
--- gcc-alan4/gcc/config/rs6000/rs6000.c	2012-04-19 18:33:20.171843404 +0930
+++ gcc-alan5a/gcc/config/rs6000/rs6000.c	2012-04-19 21:24:46.643632761 +0930
@@ -17456,8 +17456,9 @@ rs6000_savres_strategy (rs6000_stack_t *
      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
