------- Comment #29 from hubicka at gcc dot gnu dot org  2009-02-22 18:46 
-------
I mean aligned(64).
I guess something like this then?
Index: config/i386/i386.c
===================================================================
--- config/i386/i386.c  (revision 144373)
+++ config/i386/i386.c  (working copy)
@@ -19351,6 +19351,12 @@ unsigned int
 ix86_local_alignment (tree type, enum machine_mode mode,
                      unsigned int align)
 {
+  /* We don't want to align DImode to 64bit for compilation with
+     -mpreferred-stack-boundary=2 to not enforce dynamic stack alignment
+     prologue.  */
+  if (mode == DImode && !TARGET_64BIT && ix86_preferred_stack_boundary < 64)
+    align = 32;
+
   /* If TYPE is NULL, we are allocating a stack slot for caller-save
      register in MODE.  We will return the largest alignment of XF
      and DF.  */
@@ -19360,6 +19366,12 @@ ix86_local_alignment (tree type, enum ma
        align = GET_MODE_ALIGNMENT (DFmode);
       return align;
     }
+  if (!TARGET_64BIT
+      && align == 64
+      && ix86_preferred_stack_boundary < 64
+      && (mode == DImode || (type && TYPE_MODE (type) == DImode))
+      && (!type || !TYPE_USER_ALIGN (type)))
+    align = 32;

   /* x86-64 ABI requires arrays greater than 16 bytes to be aligned
      to 16byte boundary.  */


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39137

Reply via email to