From: froydnj Date: Fri, 11 Sep 2009 03:20:37 +0000 (+0000) Subject: * config/rs6000/rs6000.h (DATA_ALIGNMENT): Check that we are dealing X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=d6516a1e4dc5fa9c8294d71afe4db8e8acc0e020 * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@151626 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 64b946a4a1b..10705159716 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-09-10 Nathan Froyd + + * 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 * 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 d837d44c9be..6152e3655ec 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. */