emmintrin.h (_mm_and_si128): New function.
authorBill Schmidt <wschmidt@linux.ibm.com>
Fri, 13 Jul 2018 18:43:00 +0000 (18:43 +0000)
committerWilliam Schmidt <wschmidt@gcc.gnu.org>
Fri, 13 Jul 2018 18:43:00 +0000 (18:43 +0000)
[gcc]

2018-07-13  Bill Schmidt  <wschmidt@linux.ibm.com>
    Steve Munroe  <munroesj52@gmail.com>

* config/rs6000/emmintrin.h (_mm_and_si128): New function.
(_mm_andnot_si128): Likewise.
(_mm_or_si128): Likewise.
(_mm_xor_si128): Likewise.

[gcc/testsuite]

2018-07-13  Bill Schmidt  <wschmidt@linux.ibm.com>
    Steve Munroe  <munroesj52@gmail.com>

* gcc.target/powerpc/sse2-pand-1.c: New file.
* gcc.target/powerpc/sse2-pandn-1.c: Likewise.
* gcc.target/powerpc/sse2-por-1.c: Likewise.
* gcc.target/powerpc/sse2-pxor-1.c: Likewise.

Co-Authored-By: Steve Munroe <munroesj52@gmail.com>
From-SVN: r262642

gcc/ChangeLog
gcc/config/rs6000/emmintrin.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/sse2-pand-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/sse2-pandn-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/sse2-por-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/sse2-pxor-1.c [new file with mode: 0644]

index 6b776e1c7c5d5061b64f2255cef44fd66a345b3e..70cf49636f17fe1129bb9fe2f3fec5312ed9b914 100644 (file)
@@ -1,3 +1,11 @@
+2018-07-13  Bill Schmidt  <wschmidt@linux.ibm.com>
+           Steve Munroe  <munroesj52@gmail.com>
+
+       * config/rs6000/emmintrin.h (_mm_and_si128): New function.
+       (_mm_andnot_si128): Likewise.
+       (_mm_or_si128): Likewise.
+       (_mm_xor_si128): Likewise.
+
 2018-07-13  Qing Zhao  <qing.zhao@oracle.com>
 
        PR middle-end/78809
index 5d27a80339cee2b53ef2e5f377731250b48d5263..412ece7355b83fe1d7cfb04b5ae6c5aaead54ef4 100644 (file)
@@ -1883,6 +1883,30 @@ _mm_xor_pd (__m128d __A, __m128d __B)
   return (vec_xor ((__v2df) __A, (__v2df) __B));
 }
 
+extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_and_si128 (__m128i __A, __m128i __B)
+{
+  return (__m128i)vec_and ((__v2di) __A, (__v2di) __B);
+}
+
+extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_andnot_si128 (__m128i __A, __m128i __B)
+{
+  return (__m128i)vec_andc ((__v2di) __B, (__v2di) __A);
+}
+
+extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_or_si128 (__m128i __A, __m128i __B)
+{
+  return (__m128i)vec_or ((__v2di) __A, (__v2di) __B);
+}
+
+extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_xor_si128 (__m128i __A, __m128i __B)
+{
+  return (__m128i)vec_xor ((__v2di) __A, (__v2di) __B);
+}
+
 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 _mm_cmpeq_epi8 (__m128i __A, __m128i __B)
 {
@@ -2333,3 +2357,4 @@ _mm_castsi128_pd(__m128i __A)
 }
 
 #endif /* EMMINTRIN_H_ */
+
index 1780ca0074ae0d60d6d97be2f74c13fc83f2e063..3bedd12bb1568367b55850a780553cb33005cb44 100644 (file)
@@ -1,3 +1,11 @@
+2018-07-13  Bill Schmidt  <wschmidt@linux.ibm.com>
+           Steve Munroe  <munroesj52@gmail.com>
+
+       * gcc.target/powerpc/sse2-pand-1.c: New file.
+       * gcc.target/powerpc/sse2-pandn-1.c: Likewise.
+       * gcc.target/powerpc/sse2-por-1.c: Likewise.
+       * gcc.target/powerpc/sse2-pxor-1.c: Likewise.
+
 2018-07-13  Nathan Sidwell  <nathan@acm.org>
 
        PR c++/86374
diff --git a/gcc/testsuite/gcc.target/powerpc/sse2-pand-1.c b/gcc/testsuite/gcc.target/powerpc/sse2-pand-1.c
new file mode 100644 (file)
index 0000000..8c5904b
--- /dev/null
@@ -0,0 +1,41 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector -Wno-psabi" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#ifndef CHECK_H
+#define CHECK_H "sse2-check.h"
+#endif
+
+#include CHECK_H
+
+#ifndef TEST
+#define TEST sse2_test_pand_1
+#endif
+
+#include <emmintrin.h>
+
+static __m128i
+__attribute__((noinline, unused))
+test (__m128i s1, __m128i s2)
+{
+  return _mm_and_si128 (s1, s2); 
+}
+
+static void
+TEST (void)
+{
+  union128i_b u, s1, s2;
+  char e[16];
+  int i;
+   
+  s1.x = _mm_set_epi8 (1,2,3,4,10,20,30,90,-80,-40,-100,-15,98, 25, 98,7);
+  s2.x = _mm_set_epi8 (88, 44, 33, 22, 11, 98, 76, -100, -34, -78, -39, 6, 3, 4, 5, 119);
+  u.x = test (s1.x, s2.x); 
+   
+  for (i = 0; i < 16; i++)
+     e[i] = s1.a[i] & s2.a[i];
+
+  if (check_union128i_b (u, e))
+    abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/sse2-pandn-1.c b/gcc/testsuite/gcc.target/powerpc/sse2-pandn-1.c
new file mode 100644 (file)
index 0000000..5d0d1b7
--- /dev/null
@@ -0,0 +1,41 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector -Wno-psabi" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#ifndef CHECK_H
+#define CHECK_H "sse2-check.h"
+#endif
+
+#include CHECK_H
+
+#ifndef TEST
+#define TEST sse2_test_pandn_1
+#endif
+
+#include <emmintrin.h>
+
+static __m128i
+__attribute__((noinline, unused))
+test (__m128i s1, __m128i s2)
+{
+  return _mm_andnot_si128 (s1, s2); 
+}
+
+static void
+TEST (void)
+{
+  union128i_b u, s1, s2;
+  char e[16];
+  int i;
+   
+  s1.x = _mm_set_epi8 (1,2,3,4,10,20,30,90,-80,-40,-100,-15,98, 25, 98,7);
+  s2.x = _mm_set_epi8 (88, 44, 33, 22, 11, 98, 76, -100, -34, -78, -39, 6, 3, 4, 5, 119);
+  u.x = test (s1.x, s2.x); 
+   
+  for (i = 0; i < 16; i++)
+     e[i] = (~s1.a[i]) & s2.a[i];
+
+  if (check_union128i_b (u, e))
+    abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/sse2-por-1.c b/gcc/testsuite/gcc.target/powerpc/sse2-por-1.c
new file mode 100644 (file)
index 0000000..bdd48ad
--- /dev/null
@@ -0,0 +1,43 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector -Wno-psabi" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#ifndef CHECK_H
+#define CHECK_H "sse2-check.h"
+#endif
+
+#include CHECK_H
+
+#ifndef TEST
+#define TEST sse2_test_por_1
+#endif
+
+#include <emmintrin.h>
+
+static __m128i
+__attribute__((noinline, unused))
+test (__m128i s1, __m128i s2)
+{
+  return _mm_or_si128 (s1, s2); 
+}
+
+static void
+TEST (void)
+{
+  union128i_w u, s1, s2;
+  short e[8];
+  int i;
+   
+  s1.x = _mm_set_epi16 (10,20,30,90,-80,-40,-100,-15);
+  s2.x = _mm_set_epi16 (11, 98, 76, -100, -34, -78, -39, 14);
+  u.x = test (s1.x, s2.x); 
+   
+  for (i = 0; i < 8; i++)
+    {
+      e[i] = s1.a[i] | s2.a[i];
+    }
+
+  if (check_union128i_w (u, e))
+    abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/sse2-pxor-1.c b/gcc/testsuite/gcc.target/powerpc/sse2-pxor-1.c
new file mode 100644 (file)
index 0000000..cf430ee
--- /dev/null
@@ -0,0 +1,41 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector -Wno-psabi" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#ifndef CHECK_H
+#define CHECK_H "sse2-check.h"
+#endif
+
+#include CHECK_H
+
+#ifndef TEST
+#define TEST sse2_test_pxor_1
+#endif
+
+#include <emmintrin.h>
+
+static __m128i
+__attribute__((noinline, unused))
+test (__m128i s1, __m128i s2)
+{
+  return _mm_xor_si128 (s1, s2); 
+}
+
+static void
+TEST (void)
+{
+  union128i_ub u, s1, s2;
+  unsigned char e[16] = {0};
+  int i; 
+   
+  s1.x = _mm_set_epi8 (1,2,3,4,10,20,30,90,80,40,100,15,98, 25, 98,7);
+  s2.x = _mm_set_epi8 (88, 44, 33, 22, 11, 98, 76, 100, 34, 78, 39, 6, 3, 4, 5, 119);
+  u.x = test (s1.x, s2.x); 
+  for (i = 0; i < 16; i++)
+    e[i] = s1.a[i] ^ s2.a[i];
+
+  if (check_union128i_ub (u, e))
+    abort ();
+}