i386.c (pro_epilogue_adjust_stack): Use EBP for tail call epilogues.
* config/i386/i386.c (pro_epilogue_adjust_stack): Use EBP for tail call epilogues. From-SVN: r160050
This commit is contained in:
parent
e6bdd0396c
commit
17f01631e1
|
@ -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,
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue