Committed as an obvious fix.

H.J.
---
Index: gcc/ChangeLog
===================================================================
--- gcc/ChangeLog       (revision 228731)
+++ gcc/ChangeLog       (working copy)
@@ -1,3 +1,10 @@
+2015-10-12  H.J. Lu  <hongjiu...@intel.com>
+
+       PR target/67940
+       * config/i386/i386.c (ix86_compute_frame_layout): Correct
+       stack alignment adjustment.
+       (ix86_expand_prologue): Likewise.
+
 2015-10-12  Uros Bizjak  <ubiz...@gmail.com>
 
        Backport from mainline
Index: gcc/config/i386/i386.c
===================================================================
--- gcc/config/i386/i386.c      (revision 228731)
+++ gcc/config/i386/i386.c      (working copy)
@@ -10222,7 +10222,7 @@ ix86_compute_frame_layout (struct ix86_f
      sure that no value happens to be the same before and after, force
      the alignment computation below to add a non-zero value.  */
   if (stack_realign_fp)
-    offset = (offset + stack_alignment_needed) & -stack_alignment_needed;
+    offset = (offset + stack_alignment_needed - 1) & -stack_alignment_needed;
 
   /* Va-arg area */
   frame->va_arg_size = ix86_varargs_gpr_size + ix86_varargs_fpr_size;
@@ -11613,7 +11613,7 @@ ix86_expand_prologue (void)
          pointer is no longer valid.  As for the value of sp_offset,
         see ix86_compute_frame_layout, which we need to match in order
         to pass verification of stack_pointer_offset at the end.  */
-      m->fs.sp_offset = (m->fs.sp_offset + align_bytes) & -align_bytes;
+      m->fs.sp_offset = (m->fs.sp_offset + align_bytes - 1) & -align_bytes;
       m->fs.sp_valid = false;
     }
 

Reply via email to