aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Froyd <froydnj@codesourcery.com>2009-09-11 03:20:37 +0000
committerNathan Froyd <froydnj@gcc.gnu.org>2009-09-11 03:20:37 +0000
commitb851135c6cd9f0e436fa4ef3d64e61ddb1148bd0 (patch)
tree10c457566c137533b2bce20a218d78681abb255f
parent5ba863d70d67fe53afb11ec0e71fc703ba843507 (diff)
downloadgcc-b851135c6cd9f0e436fa4ef3d64e61ddb1148bd0.zip
gcc-b851135c6cd9f0e436fa4ef3d64e61ddb1148bd0.tar.gz
gcc-b851135c6cd9f0e436fa4ef3d64e61ddb1148bd0.tar.bz2
rs6000.h (DATA_ALIGNMENT): Check that we are dealing with actual SPE/paired vector modes before using...
* config/rs6000/rs6000.h (DATA_ALIGNMENT): Check that we are dealing with actual SPE/paired vector modes before using 64-bit alignment. Check that TYPE is a REAL_TYPE for TARGET_E500_DOUBLE. From-SVN: r151626
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.h20
2 files changed, 18 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 64b946a..1070515 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-09-10 Nathan Froyd <froydnj@codesourcery.com>
+
+ * config/rs6000/rs6000.h (DATA_ALIGNMENT): Check that we are dealing
+ with actual SPE/paired vector modes before using 64-bit alignment.
+ Check that TYPE is a REAL_TYPE for TARGET_E500_DOUBLE.
+
2009-09-10 DJ Delorie <dj@redhat.com>
* config/mep/mep.md (eh_epilogue): Defer until after epilogue is
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index d837d44c..6152e36 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -743,14 +743,18 @@ extern unsigned rs6000_pointer_size;
/* Make arrays of chars word-aligned for the same reasons.
Align vectors to 128 bits. Align SPE vectors and E500 v2 doubles to
64 bits. */
-#define DATA_ALIGNMENT(TYPE, ALIGN) \
- (TREE_CODE (TYPE) == VECTOR_TYPE ? ((TARGET_SPE_ABI \
- || TARGET_PAIRED_FLOAT) ? 64 : 128) \
- : (TARGET_E500_DOUBLE \
- && TYPE_MODE (TYPE) == DFmode) ? 64 \
- : TREE_CODE (TYPE) == ARRAY_TYPE \
- && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
- && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
+#define DATA_ALIGNMENT(TYPE, ALIGN) \
+ (TREE_CODE (TYPE) == VECTOR_TYPE \
+ ? (((TARGET_SPE && SPE_VECTOR_MODE (TYPE_MODE (TYPE))) \
+ || (TARGET_PAIRED_FLOAT && PAIRED_VECTOR_MODE (TYPE_MODE (TYPE)))) \
+ ? 64 : 128) \
+ : ((TARGET_E500_DOUBLE \
+ && TREE_CODE (TYPE) == REAL_TYPE \
+ && TYPE_MODE (TYPE) == DFmode) \
+ ? 64 \
+ : (TREE_CODE (TYPE) == ARRAY_TYPE \
+ && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
+ && (ALIGN) < BITS_PER_WORD) ? BITS_PER_WORD : (ALIGN)))
/* Nonzero if move instructions will actually fail to work
when given unaligned data. */