Commit 3d887721 by Kai Tietz Committed by Kai Tietz

i386.c (ix86_can_use_return_insn_p): Check for padding0, too.

2009-09-09  Kai Tietz  <kai.tietz@onevision.com>

	PR/41315
	* config/i386.c (ix86_can_use_return_insn_p): Check for
	padding0, too.
	(ix86_expand_prologue): Take frame.padding0 into logic of
	to_allocate checks.
	(ix86_expand_epilogue): Likewise.

From-SVN: r151570
parent 80a76d1d
2009-09-09 Kai Tietz <kai.tietz@onevision.com>
PR/41315
* config/i386.c (ix86_can_use_return_insn_p): Check for
padding0, too.
(ix86_expand_prologue): Take frame.padding0 into logic of
to_allocate checks.
(ix86_expand_epilogue): Likewise.
2009-09-09 Jakub Jelinek <jakub@redhat.com>
* config/t-slibgcc-elf-ver (SHLIB_MAKE_SOLINK, SHLIB_INSTALL_SOLINK):
......
......@@ -7441,7 +7441,8 @@ ix86_can_use_return_insn_p (void)
return 0;
ix86_compute_frame_layout (&frame);
return frame.to_allocate == 0 && (frame.nregs + frame.nsseregs) == 0;
return frame.to_allocate == 0 && frame.padding0 == 0
&& (frame.nregs + frame.nsseregs) == 0;
}
/* Value should be nonzero if functions must have frame pointers.
......@@ -8482,7 +8483,7 @@ ix86_expand_prologue (void)
&& (! TARGET_STACK_PROBE || allocate < CHECK_STACK_LIMIT)))
{
if (!frame_pointer_needed
|| !frame.to_allocate
|| !(frame.to_allocate + frame.padding0)
|| crtl->stack_realign_needed)
ix86_emit_save_regs_using_mov (stack_pointer_rtx,
frame.to_allocate
......@@ -8492,7 +8493,7 @@ ix86_expand_prologue (void)
-frame.nregs * UNITS_PER_WORD);
}
if (!frame_pointer_needed
|| !frame.to_allocate
|| !(frame.to_allocate + frame.padding0)
|| crtl->stack_realign_needed)
ix86_emit_save_sse_regs_using_mov (stack_pointer_rtx,
frame.to_allocate);
......@@ -8804,9 +8805,10 @@ ix86_expand_epilogue (int style)
if ((!sp_valid && (frame.nregs + frame.nsseregs) <= 1)
|| (TARGET_EPILOGUE_USING_MOVE
&& cfun->machine->use_fast_prologue_epilogue
&& ((frame.nregs + frame.nsseregs) > 1 || frame.to_allocate))
&& ((frame.nregs + frame.nsseregs) > 1
|| (frame.to_allocate + frame.padding0) != 0))
|| (frame_pointer_needed && !(frame.nregs + frame.nsseregs)
&& frame.to_allocate)
&& (frame.to_allocate + frame.padding0) != 0)
|| (frame_pointer_needed && TARGET_USE_LEAVE
&& cfun->machine->use_fast_prologue_epilogue
&& (frame.nregs + frame.nsseregs) == 1)
......@@ -8822,7 +8824,7 @@ ix86_expand_epilogue (int style)
be addressed by bp. sp must be used instead. */
if (!frame_pointer_needed
|| (sp_valid && !frame.to_allocate)
|| (sp_valid && !(frame.to_allocate + frame.padding0))
|| stack_realign_fp)
{
ix86_emit_restore_sse_regs_using_mov (stack_pointer_rtx,
......@@ -8952,7 +8954,7 @@ ix86_expand_epilogue (int style)
GEN_INT (frame.nsseregs * 16 + frame.padding0),
style, false);
}
else if (frame.to_allocate || frame.nsseregs)
else if (frame.to_allocate || frame.padding0 || frame.nsseregs)
{
ix86_emit_restore_sse_regs_using_mov (stack_pointer_rtx,
frame.to_allocate, red_offset,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment