diff mbox series

[2/4] rs6000: Add tests for SSE4.1 "test" intrinsics

Message ID 20210629180859.1235662-3-pc@us.ibm.com
State New
Headers show
Series rs6000: Add SSE4.1 "test" and "blend" intrinsics | expand

Commit Message

Paul A. Clarke June 29, 2021, 6:08 p.m. UTC
Copy the test for _mm_testz_si128, _mm_testc_si128,
_mm_testnzc_si128, _mm_test_all_ones, _mm_test_all_zeros,
_mm_test_mix_ones_zeros from gcc/testsuite/gcc.target/i386.

2021-06-29  Paul A. Clarke  <pc@us.ibm.com>

gcc/testsuite/ChangeLog:
        * gcc.target/powerpc/sse4_1-ptest.c: Copy from
	gcc/testsuite/gcc.target/i386.
---
 .../gcc.target/powerpc/sse4_1-ptest-1.c       | 117 ++++++++++++++++++
 1 file changed, 117 insertions(+)
 create mode 100644 gcc/testsuite/gcc.target/powerpc/sse4_1-ptest-1.c

Comments

Li, Pan2 via Gcc-patches July 11, 2021, 3:49 p.m. UTC | #1
Hi Paul,

LGTM.  I can't approve, but recommend approval as is.

Thanks,
Bill

On 6/29/21 1:08 PM, Paul A. Clarke via Gcc-patches wrote:
> Copy the test for _mm_testz_si128, _mm_testc_si128,
> _mm_testnzc_si128, _mm_test_all_ones, _mm_test_all_zeros,
> _mm_test_mix_ones_zeros from gcc/testsuite/gcc.target/i386.
>
> 2021-06-29  Paul A. Clarke  <pc@us.ibm.com>
>
> gcc/testsuite/ChangeLog:
>          * gcc.target/powerpc/sse4_1-ptest.c: Copy from
> 	gcc/testsuite/gcc.target/i386.
> ---
>   .../gcc.target/powerpc/sse4_1-ptest-1.c       | 117 ++++++++++++++++++
>   1 file changed, 117 insertions(+)
>   create mode 100644 gcc/testsuite/gcc.target/powerpc/sse4_1-ptest-1.c
>
> diff --git a/gcc/testsuite/gcc.target/powerpc/sse4_1-ptest-1.c b/gcc/testsuite/gcc.target/powerpc/sse4_1-ptest-1.c
> new file mode 100644
> index 000000000000..69d13d57770d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/sse4_1-ptest-1.c
> @@ -0,0 +1,117 @@
> +/* { dg-do run } */
> +/* { dg-require-effective-target p8vector_hw } */
> +/* { dg-options "-O2 -mpower8-vector -Wno-psabi" } */
> +
> +#ifndef CHECK_H
> +#define CHECK_H "sse4_1-check.h"
> +#endif
> +
> +#ifndef TEST
> +#define TEST sse4_1_test
> +#endif
> +
> +#include CHECK_H
> +
> +#include <smmintrin.h>
> +
> +static int
> +make_ptestz (__m128i m, __m128i v)
> +{
> +  union
> +    {
> +      __m128i x;
> +      unsigned char c[16];
> +    } val, mask;
> +  int i, z;
> +
> +  mask.x = m;
> +  val.x = v;
> +
> +  z = 1;
> +  for (i = 0; i < 16; i++)
> +    if ((mask.c[i] & val.c[i]))
> +      {
> +	z = 0;
> +	break;
> +      }
> +  return z;
> +}
> +
> +static int
> +make_ptestc (__m128i m, __m128i v)
> +{
> +  union
> +    {
> +      __m128i x;
> +      unsigned char c[16];
> +    } val, mask;
> +  int i, c;
> +
> +  mask.x = m;
> +  val.x = v;
> +
> +  c = 1;
> +  for (i = 0; i < 16; i++)
> +    if ((val.c[i] & ~mask.c[i]))
> +      {
> +	c = 0;
> +	break;
> +      }
> +  return c;
> +}
> +
> +static void
> +TEST (void)
> +{
> +  union
> +    {
> +      __m128i x;
> +      unsigned int i[4];
> +    } val[4];
> +  int i, j, l;
> +  int res[32];
> +
> +  val[0].i[0] = 0x11111111;
> +  val[0].i[1] = 0x00000000;
> +  val[0].i[2] = 0x00000000;
> +  val[0].i[3] = 0x11111111;
> +
> +  val[1].i[0] = 0x00000000;
> +  val[1].i[1] = 0x11111111;
> +  val[1].i[2] = 0x11111111;
> +  val[1].i[3] = 0x00000000;
> +
> +  val[2].i[0] = 0;
> +  val[2].i[1] = 0;
> +  val[2].i[2] = 0;
> +  val[2].i[3] = 0;
> +
> +  val[3].i[0] = 0xffffffff;
> +  val[3].i[1] = 0xffffffff;
> +  val[3].i[2] = 0xffffffff;
> +  val[3].i[3] = 0xffffffff;
> +
> +  l = 0;
> +  for(i = 0; i < 4; i++)
> +    for(j = 0; j < 4; j++)
> +      {
> +	res[l++] = _mm_testz_si128 (val[j].x, val[i].x);
> +	res[l++] = _mm_testc_si128 (val[j].x, val[i].x);
> +      }
> +
> +  l = 0;
> +  for(i = 0; i < 4; i++)
> +    for(j = 0; j < 4; j++)
> +      {
> +	if (res[l++] != make_ptestz (val[j].x, val[i].x))
> +	  abort ();
> +	if (res[l++] != make_ptestc (val[j].x, val[i].x))
> +	  abort ();
> +      }
> +
> +  if (res[2] != _mm_testz_si128 (val[1].x, val[0].x))
> +    abort ();
> +
> +  if (res[3] != _mm_testc_si128 (val[1].x, val[0].x))
> +    abort ();
> +}
Segher Boessenkool July 12, 2021, 10:39 p.m. UTC | #2
On Sun, Jul 11, 2021 at 10:49:27AM -0500, Bill Schmidt wrote:
> LGTM.  I can't approve, but recommend approval as is.

Okay for trunk.  Thanks!


Segher


> >2021-06-29  Paul A. Clarke  <pc@us.ibm.com>
> >
> >gcc/testsuite/ChangeLog:
> >         * gcc.target/powerpc/sse4_1-ptest.c: Copy from
> >	gcc/testsuite/gcc.target/i386.
diff mbox series

Patch

diff --git a/gcc/testsuite/gcc.target/powerpc/sse4_1-ptest-1.c b/gcc/testsuite/gcc.target/powerpc/sse4_1-ptest-1.c
new file mode 100644
index 000000000000..69d13d57770d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/sse4_1-ptest-1.c
@@ -0,0 +1,117 @@ 
+/* { dg-do run } */
+/* { dg-require-effective-target p8vector_hw } */
+/* { dg-options "-O2 -mpower8-vector -Wno-psabi" } */
+
+#ifndef CHECK_H
+#define CHECK_H "sse4_1-check.h"
+#endif
+
+#ifndef TEST
+#define TEST sse4_1_test
+#endif
+
+#include CHECK_H
+
+#include <smmintrin.h>
+
+static int
+make_ptestz (__m128i m, __m128i v)
+{
+  union
+    {
+      __m128i x;
+      unsigned char c[16];
+    } val, mask;
+  int i, z;
+
+  mask.x = m;
+  val.x = v;
+
+  z = 1;
+  for (i = 0; i < 16; i++)
+    if ((mask.c[i] & val.c[i]))
+      {
+	z = 0;
+	break;
+      }
+  return z;
+}
+
+static int
+make_ptestc (__m128i m, __m128i v)
+{
+  union
+    {
+      __m128i x;
+      unsigned char c[16];
+    } val, mask;
+  int i, c;
+
+  mask.x = m;
+  val.x = v;
+
+  c = 1;
+  for (i = 0; i < 16; i++)
+    if ((val.c[i] & ~mask.c[i]))
+      {
+	c = 0;
+	break;
+      }
+  return c;
+}
+
+static void
+TEST (void)
+{
+  union
+    {
+      __m128i x;
+      unsigned int i[4];
+    } val[4];
+  int i, j, l;
+  int res[32];
+
+  val[0].i[0] = 0x11111111;
+  val[0].i[1] = 0x00000000;
+  val[0].i[2] = 0x00000000;
+  val[0].i[3] = 0x11111111;
+    
+  val[1].i[0] = 0x00000000;
+  val[1].i[1] = 0x11111111;
+  val[1].i[2] = 0x11111111;
+  val[1].i[3] = 0x00000000;
+
+  val[2].i[0] = 0;
+  val[2].i[1] = 0;
+  val[2].i[2] = 0;
+  val[2].i[3] = 0;
+
+  val[3].i[0] = 0xffffffff;
+  val[3].i[1] = 0xffffffff;
+  val[3].i[2] = 0xffffffff;
+  val[3].i[3] = 0xffffffff;
+
+  l = 0;
+  for(i = 0; i < 4; i++)
+    for(j = 0; j < 4; j++)
+      {
+	res[l++] = _mm_testz_si128 (val[j].x, val[i].x);
+	res[l++] = _mm_testc_si128 (val[j].x, val[i].x);
+      }
+
+  l = 0;
+  for(i = 0; i < 4; i++)
+    for(j = 0; j < 4; j++)
+      {
+	if (res[l++] != make_ptestz (val[j].x, val[i].x))
+	  abort ();
+	if (res[l++] != make_ptestc (val[j].x, val[i].x))
+	  abort ();
+      }
+
+  if (res[2] != _mm_testz_si128 (val[1].x, val[0].x))
+    abort ();
+
+  if (res[3] != _mm_testc_si128 (val[1].x, val[0].x))
+    abort ();
+}