aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaul A. Clarke <pc@us.ibm.com>2018-10-26 15:01:22 +0000
committerPaul Clarke <pc@gcc.gnu.org>2018-10-26 15:01:22 +0000
commit4fa008a718f06108a3ddc06200c7947e0212075c (patch)
treeece8a126d76ef73149ad7f3d2cd35635d4810707 /gcc
parent4bfcf87914b412f8fa56cd46f7c3081365b7e647 (diff)
downloadgcc-4fa008a718f06108a3ddc06200c7947e0212075c.zip
gcc-4fa008a718f06108a3ddc06200c7947e0212075c.tar.gz
gcc-4fa008a718f06108a3ddc06200c7947e0212075c.tar.bz2
[rs6000] Fix _mm_extract_pi16 for big-endian
For compatibility implementation of x86 vector intrinsic, _mm_extract_pi16, adjust shift value for big-endian mode. gcc/ChangeLog: 2018-10-25 Paul A. Clarke <pc@us.ibm.com> * config/rs6000/xmmintrin.h (_mm_extract_pi16): Fix for big-endian. From-SVN: r265531
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/rs6000/xmmintrin.h7
2 files changed, 9 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5307ec7..3db373c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2018-10-26 Paul A. Clarke <pc@us.ibm.com>
+
+ * config/rs6000/xmmintrin.h (_mm_extract_pi16): Fix for big-endian.
+
2018-10-26 Richard Biener <rguenther@suse.de>
* tree-vect-slp.c (vect_mark_slp_stmts): Add visited hash_set
diff --git a/gcc/config/rs6000/xmmintrin.h b/gcc/config/rs6000/xmmintrin.h
index 5289375..86c41a82 100644
--- a/gcc/config/rs6000/xmmintrin.h
+++ b/gcc/config/rs6000/xmmintrin.h
@@ -1386,9 +1386,12 @@ _mm_load_ps1 (float const *__P)
extern __inline int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_extract_pi16 (__m64 const __A, int const __N)
{
- const int shiftr = (__N & 3) * 16;
+ unsigned int shiftr = __N & 3;
+#ifdef __BIG_ENDIAN__
+ shiftr = 3 - shiftr;
+#endif
- return ((__A >> shiftr) & 0xffff);
+ return ((__A >> (shiftr * 16)) & 0xffff);
}
extern __inline int __attribute__((__gnu_inline__, __always_inline__, __artificial__))