Round up the SSE register save area only if needed

There is is no point to round up the SSE register save area to 16 bytes if
the incoming stack boundary is less than 16 bytes.

	* config/i386/i386.c (ix86_compute_frame_layout): Round up the
	SSE register save area to 16 bytes only if the incoming stack
	boundary is no less than 16 bytes.

From-SVN: r228621
This commit is contained in:
H.J. Lu 2015-10-08 18:57:11 +00:00 committed by H.J. Lu
parent d1acc3f4d2
commit bc8642d6ce
2 changed files with 14 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2015-10-08 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (ix86_compute_frame_layout): Round up the
SSE register save area to 16 bytes only if the incoming stack
boundary is no less than 16 bytes.
2015-10-08 Jeff Law <law@redhat.com>
* tree-ssa-phiopt.c (factor_out_conversion): Add missing calls to

View File

@ -11383,9 +11383,14 @@ ix86_compute_frame_layout (struct ix86_frame *frame)
if (frame->nsseregs)
{
/* The only ABI that has saved SSE registers (Win64) also has a
16-byte aligned default stack, and thus we don't need to be
within the re-aligned local stack frame to save them. */
offset = ROUND_UP (offset, 16);
16-byte aligned default stack, and thus we don't need to be
within the re-aligned local stack frame to save them. In case
incoming stack boundary is aligned to less than 16 bytes,
unaligned move of SSE register will be emitted, so there is
no point to round up the SSE register save area outside the
re-aligned local stack frame to 16 bytes. */
if (ix86_incoming_stack_boundary >= 128)
offset = ROUND_UP (offset, 16);
offset += frame->nsseregs * 16;
}
frame->sse_reg_save_offset = offset;