aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2005-12-12 01:28:50 +0000
committerAlan Modra <amodra@gcc.gnu.org>2005-12-12 11:58:50 +1030
commit392cc400f49a47b029b29a59541468e20d5ac08b (patch)
treef2719b842679a682a127c083311a8867c67b1104 /gcc
parente78ac651b0ea6070ecb4f16eaf55568faf3e7bbb (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/rs6000/linux64.h6
-rw-r--r--gcc/config/rs6000/rs6000.c5
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);