diff options
author | Alan Modra <amodra@bigpond.net.au> | 2005-12-12 01:28:50 +0000 |
---|---|---|
committer | Alan Modra <amodra@gcc.gnu.org> | 2005-12-12 11:58:50 +1030 |
commit | 392cc400f49a47b029b29a59541468e20d5ac08b (patch) | |
tree | f2719b842679a682a127c083311a8867c67b1104 | |
parent | e78ac651b0ea6070ecb4f16eaf55568faf3e7bbb (diff) | |
download | gcc-392cc400f49a47b029b29a59541468e20d5ac08b.zip gcc-392cc400f49a47b029b29a59541468e20d5ac08b.tar.gz gcc-392cc400f49a47b029b29a59541468e20d5ac08b.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/rs6000/linux64.h | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 5 |
3 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 47d19ac..1e602a2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-12-12 Alan Modra <amodra@bigpond.net.au> + + 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 <dberlin@dberlin.org> * tree-ssa-structalias.c (process_constraint): Remove code to diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index 1555d29..bc615e8 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 609de94..9f547da 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); |