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.

OK for trunk?

H.J.
---
        * 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.

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index a24bd26..7f0479c 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -11382,10 +11382,11 @@ ix86_compute_frame_layout (struct ix86_frame *frame)
   /* Align and set SSE register save area.  */
   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);
+      /* 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.  */
+      if (ix86_incoming_stack_boundary >= 128)
+       offset = ROUND_UP (offset, 16);
       offset += frame->nsseregs * 16;
     }
   frame->sse_reg_save_offset = offset;

Reply via email to