]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* config/i386/i386.c (pro_epilogue_adjust_stack): Use EBP
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 30 May 2010 12:14:49 +0000 (12:14 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 30 May 2010 12:14:49 +0000 (12:14 +0000)
for tail call epilogues.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160050 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.c

index 938ddbb4e1cc34d43e1bc3b3acf688c411620c8e..005db41a894445b2a829ac40f41cec646d0f7f63 100644 (file)
@@ -1,3 +1,8 @@
+2010-05-30  Jan Hubicka  <jh@suse.cz>
+
+       * config/i386/i386.c (pro_epilogue_adjust_stack): Use EBP
+       for tail call epilogues.
+
 2010-05-30  Jan Hubicka  <jh@suse.cz>
 
        * passes.c (ipa_write_optimization_summaries_1, ipa_write_summaries_2,
index de291c70861c120f46828d8106ca1520d9651b8c..76dace5ce16f6cb1d7005d5685312a3ba643cd3f 100644 (file)
@@ -8363,17 +8363,21 @@ pro_epilogue_adjust_stack (rtx dest, rtx src, rtx offset,
     insn = emit_insn (gen_pro_epilogue_adjust_stack_rex64 (dest, src, offset));
   else
     {
-      rtx r11;
+      rtx tmp;
       /* r11 is used by indirect sibcall return as well, set before the
-        epilogue and used after the epilogue.  ATM indirect sibcall
-        shouldn't be used together with huge frame sizes in one
-        function because of the frame_size check in sibcall.c.  */
-      gcc_assert (style);
-      r11 = gen_rtx_REG (DImode, R11_REG);
-      insn = emit_insn (gen_rtx_SET (DImode, r11, offset));
+        epilogue and used after the epilogue.  */
+      if (style)
+        tmp = gen_rtx_REG (DImode, R11_REG);
+      else
+       {
+         gcc_assert (src != hard_frame_pointer_rtx
+                     && dest != hard_frame_pointer_rtx);
+         tmp = hard_frame_pointer_rtx;
+       }
+      insn = emit_insn (gen_rtx_SET (DImode, tmp, offset));
       if (style < 0)
        RTX_FRAME_RELATED_P (insn) = 1;
-      insn = emit_insn (gen_pro_epilogue_adjust_stack_rex64_2 (dest, src, r11,
+      insn = emit_insn (gen_pro_epilogue_adjust_stack_rex64_2 (dest, src, tmp,
                                                               offset));
     }