diff options
author | Michael Meissner <meissner@linux.vnet.ibm.com> | 2016-11-03 23:32:07 +0000 |
---|---|---|
committer | Michael Meissner <meissner@gcc.gnu.org> | 2016-11-03 23:32:07 +0000 |
commit | f2834ebc00d847dcac85c44640a2c7fb2cdd340e (patch) | |
tree | c9942ab81dd9456b420d9c144bde4c23c85ee2bf /gcc | |
parent | 0bc36dec0f6a5d73b79e78c549533261b76602ec (diff) | |
download | gcc-f2834ebc00d847dcac85c44640a2c7fb2cdd340e.zip gcc-f2834ebc00d847dcac85c44640a2c7fb2cdd340e.tar.gz gcc-f2834ebc00d847dcac85c44640a2c7fb2cdd340e.tar.bz2 |
re PR target/78192 (extract from vector registers to int results in wrong data order)
2016-11-03 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/78192
* config/rs6000/vsx.md (vsx_extract_<mode>_di): The element number
has already been adjusted for endianness, so don't adjust it any
further.
From-SVN: r241834
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/rs6000/vsx.md | 7 |
2 files changed, 8 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b45b91d..9222baa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2016-11-03 Michael Meissner <meissner@linux.vnet.ibm.com> + PR target/78192 + * config/rs6000/vsx.md (vsx_extract_<mode>_di): The element number + has already been adjusted for endianness, so don't adjust it any + further. + PR target/77993 * config/rs6000/rs6000.h (FLOAT128_IBM_P): Do not allow IFmode or ICmode unless we have standard PowerPC floating point. diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md index 505c270..2c74a8e 100644 --- a/gcc/config/rs6000/vsx.md +++ b/gcc/config/rs6000/vsx.md @@ -2586,11 +2586,10 @@ (parallel [(match_operand:QI 2 "<VSX_EXTRACT_PREDICATE>" "n")]))))] "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_VEXTRACTUB" { - int element = INTVAL (operands[2]); + /* Note, the element number has already been adjusted for endianness, so we + don't have to adjust it here. */ int unit_size = GET_MODE_UNIT_SIZE (<MODE>mode); - int offset = ((VECTOR_ELT_ORDER_BIG) - ? unit_size * element - : unit_size * (GET_MODE_NUNITS (<MODE>mode) - 1 - element)); + HOST_WIDE_INT offset = unit_size * INTVAL (operands[2]); operands[2] = GEN_INT (offset); if (unit_size == 4) |