diff options
author | Nathan Froyd <froydnj@codesourcery.com> | 2009-09-11 03:20:37 +0000 |
---|---|---|
committer | Nathan Froyd <froydnj@gcc.gnu.org> | 2009-09-11 03:20:37 +0000 |
commit | b851135c6cd9f0e436fa4ef3d64e61ddb1148bd0 (patch) | |
tree | 10c457566c137533b2bce20a218d78681abb255f | |
parent | 5ba863d70d67fe53afb11ec0e71fc703ba843507 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.h | 20 |
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. */ |