aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Edelsohn <edelsohn@gnu.org>1996-04-22 15:52:29 +0000
committerDavid Edelsohn <edelsohn@gnu.org>1996-04-22 15:52:29 +0000
commit6bc3403cba35affa0b7b484a6bacedc801b5638f (patch)
treefd837128ed043ab1359dd0139f4a79e984507562
parent75c91bcd752ca5f5be4859f91c90e53d8c1a1c72 (diff)
downloadgcc-6bc3403cba35affa0b7b484a6bacedc801b5638f.zip
gcc-6bc3403cba35affa0b7b484a6bacedc801b5638f.tar.gz
gcc-6bc3403cba35affa0b7b484a6bacedc801b5638f.tar.bz2
fix AIX struct/union/field alignment
From-SVN: r11866
-rw-r--r--gcc/config/rs6000/rs6000.h15
1 files changed, 13 insertions, 2 deletions
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 1620ad4..5582f41 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -572,8 +572,9 @@ extern struct rs6000_cpu_select rs6000_select[];
/* No data type wants to be aligned rounder than this. */
#define BIGGEST_ALIGNMENT 64
-/* AIX aligns internal doubles in structures on word boundaries. */
-#define BIGGEST_FIELD_ALIGNMENT 32
+/* AIX word-aligns FP doubles but doubleword-aligns 64-bit ints. */
+#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
+ (DECL_MODE (FIELD) != DFmode ? (COMPUTED) : MIN ((COMPUTED), 32))
/* Alignment of field after `int : 0' in a structure. */
#define EMPTY_FIELD_BOUNDARY 32
@@ -584,6 +585,16 @@ extern struct rs6000_cpu_select rs6000_select[];
/* A bitfield declared as `int' forces `int' alignment for the struct. */
#define PCC_BITFIELD_TYPE_MATTERS 1
+/* AIX increases natural record alignment to doubleword if the first
+ field is an FP double while the FP fields remain word aligned. */
+#define ROUND_TYPE_ALIGN(STRUCT, COMPUTED, SPECIFIED) \
+ ((TREE_CODE (STRUCT) == RECORD_TYPE \
+ || TREE_CODE (STRUCT) == UNION_TYPE \
+ || TREE_CODE (STRUCT) == QUAL_UNION_TYPE) \
+ && DECL_MODE (TYPE_FIELDS (STRUCT)) == DFmode \
+ ? MAX (MAX ((COMPUTED), (SPECIFIED)), BIGGEST_ALIGNMENT) \
+ : MAX ((COMPUTED), (SPECIFIED)))
+
/* Make strings word-aligned so strcpy from constants will be faster. */
#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
(TREE_CODE (EXP) == STRING_CST \