OSDN Git Service

* config/rs6000/rs6000.h (DATA_ALIGNMENT): Check that we are dealing
authorfroydnj <froydnj@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 11 Sep 2009 03:20:37 +0000 (03:20 +0000)
committerfroydnj <froydnj@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 11 Sep 2009 03:20:37 +0000 (03:20 +0000)
with actual SPE/paired vector modes before using 64-bit alignment.
Check that TYPE is a REAL_TYPE for TARGET_E500_DOUBLE.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@151626 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/rs6000/rs6000.h

index 64b946a..1070515 100644 (file)
@@ -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
index d837d44..6152e36 100644 (file)
@@ -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.  */