From: Alan Modra Date: Mon, 12 Dec 2005 01:28:50 +0000 (+0000) Subject: re PR target/25299 (Another ABI incompatibility with Apple's gcc) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=392cc400f49a47b029b29a59541468e20d5ac08b;p=gcc.git re PR target/25299 (Another ABI incompatibility with Apple's gcc) PR target/25299 * config/rs6000/rs6000.c (rs6000_special_round_type_align): Increase alignment to doubleword if the first field is a double array. * config/rs6000/linux64.h (TARGET_ALIGN_NATURAL): Define. From-SVN: r108393 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 47d19ac89a8..1e602a212a4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-12-12 Alan Modra + + PR target/25299 + * config/rs6000/rs6000.c (rs6000_special_round_type_align): Increase + alignment to doubleword if the first field is a double array. + * config/rs6000/linux64.h (TARGET_ALIGN_NATURAL): Define. + 2005-12-11 Daniel Berlin * tree-ssa-structalias.c (process_constraint): Remove code to diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index 1555d2968a7..bc615e8c96d 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -236,6 +236,12 @@ extern int dot_symbols; ? rs6000_special_round_type_align (STRUCT, COMPUTED, SPECIFIED) \ : MAX ((COMPUTED), (SPECIFIED))) +/* Use the default for compiling target libs. */ +#ifdef IN_TARGET_LIBS +#undef TARGET_ALIGN_NATURAL +#define TARGET_ALIGN_NATURAL 1 +#endif + /* Indicate that jump tables go in the text section. */ #undef JUMP_TABLES_IN_TEXT_SECTION #define JUMP_TABLES_IN_TEXT_SECTION TARGET_64BIT diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 609de947d3e..9f547dab057 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -2513,7 +2513,10 @@ rs6000_special_round_type_align (tree type, int computed, int specified) while (field != NULL && TREE_CODE (field) != FIELD_DECL) field = TREE_CHAIN (field); - if (field == NULL || field == type || DECL_MODE (field) != DFmode) + if (field == NULL || field == type + || TYPE_MODE (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE + ? get_inner_array_type (field) + : TREE_TYPE (field)) != DFmode) return MAX (computed, specified); return MAX (MAX (computed, specified), 64);