--- 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