--- gcc-4.1.2-org/gcc/config/i386/i386.c	Fri Nov 17 08:01:22 2006
+++ gcc-4.1.2/gcc/config/i386/i386.c	Thu Mar 22 20:47:58 2007
@@ -815,9 +815,12 @@
 
 /* Variables which are this size or smaller are put in the data/bss
    or ldata/lbss sections.  */
-
 int ix86_section_threshold = 65536;
 
+/* Aggregate variables bigger than this number of bits
+   are aligned to 32 bytes (256 bits) */
+unsigned int bigdata_align = 256;
+
 /* Prefix built by ASM_GENERATE_INTERNAL_LABEL.  */
 char internal_label_prefix[16];
 int internal_label_prefix_len;
@@ -1443,6 +1446,11 @@
    if (TARGET_64BIT)
      ix86_regparm = REGPARM_MAX;
 
+  if (ix86_bigdata_align_string)
+    {
+      bigdata_align = 8 * atoi (ix86_bigdata_align_string);
+    }
+
   /* If the user has provided any of the -malign-* options,
      warn and use that value only if -falign-* is not set.
      Remove this code in GCC 3.2 or later.  */
@@ -13339,7 +13347,7 @@
   if (AGGREGATE_TYPE_P (type)
        && TYPE_SIZE (type)
        && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
-       && (TREE_INT_CST_LOW (TYPE_SIZE (type)) >= 256
+       && (TREE_INT_CST_LOW (TYPE_SIZE (type)) >= bigdata_align
 	   || TREE_INT_CST_HIGH (TYPE_SIZE (type))) && align < 256)
     return 256;
 
--- gcc-4.1.2-org/gcc/config/i386/i386.opt	Wed May 17 20:38:58 2006
+++ gcc-4.1.2/gcc/config/i386/i386.opt	Thu Mar 22 20:56:03 2007
@@ -71,6 +71,10 @@
 Target RejectNegative Joined Var(ix86_align_loops_string)
 Loop code aligned to this power of 2
 
+mbigdata_align=
+Target RejectNegative Joined Var(ix86_bigdata_align_string)
+Aggregate objects bigger than this are aligned to 32 bytes
+
 malign-stringops
 Target RejectNegative Report InverseMask(NO_ALIGN_STRINGOPS, ALIGN_STRINGOPS)
 Align destination of the string operations
