public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Bill Schmidt <wschmidt@linux.ibm.com>
To: "Paul A. Clarke" <pc@us.ibm.com>, gcc-patches@gcc.gnu.org
Cc: segher@kernel.crashing.org
Subject: Re: [PATCH v2 4/6] rs6000: Add tests for SSE4.1 "ceil" intrinsics
Date: Fri, 16 Jul 2021 13:22:55 -0500	[thread overview]
Message-ID: <e13beaa9-0f03-9595-8187-2e29d6e66992@linux.ibm.com> (raw)
In-Reply-To: <20210716135022.489455-5-pc@us.ibm.com>

Hi Paul,

Thanks for the cleanup, LGTM!  Recommend maintainers approve.

Bill

On 7/16/21 8:50 AM, Paul A. Clarke wrote:
> Add the tests for _mm_ceil_pd, _mm_ceil_ps, _mm_ceil_sd, _mm_ceil_ss.
>
> Copy a test for _mm_ceil_pd and _mm_ceil_ps from
> gcc/testsuite/gcc.target/i386.
>
> Define __VSX_SSE2__ to pick up some union definitions in
> m128-check.h.
>
> 2021-07-16  Paul A. Clarke  <pc@us.ibm.com>
>
> gcc/testsuite
> 	* gcc.target/powerpc/sse4_1-ceilpd.c: New.
> 	* gcc.target/powerpc/sse4_1-ceilps.c: New.
> 	* gcc.target/powerpc/sse4_1-ceilsd.c: New.
> 	* gcc.target/powerpc/sse4_1-ceilss.c: New.
> 	* gcc.target/powerpc/sse4_1-round-data.h: New.
> 	* gcc.target/powerpc/sse4_1-round.h: New.
> 	* gcc.target/powerpc/sse4_1-round2.h: New.
> 	* gcc.target/powerpc/sse4_1-roundpd-3.c: Copy from gcc.target/i386.
> 	* gcc.target/powerpc/sse4_1-check.h (__VSX_SSE2__): Define.
> ---
> v2: Improve formatting per review from Bill.
>
>   .../gcc.target/powerpc/sse4_1-ceilpd.c        |  51 ++++++++
>   .../gcc.target/powerpc/sse4_1-ceilps.c        |  41 ++++++
>   .../gcc.target/powerpc/sse4_1-ceilsd.c        | 119 ++++++++++++++++++
>   .../gcc.target/powerpc/sse4_1-ceilss.c        |  95 ++++++++++++++
>   .../gcc.target/powerpc/sse4_1-check.h         |   4 +
>   .../gcc.target/powerpc/sse4_1-round-data.h    |  20 +++
>   .../gcc.target/powerpc/sse4_1-round.h         |  27 ++++
>   .../gcc.target/powerpc/sse4_1-round2.h        |  27 ++++
>   .../gcc.target/powerpc/sse4_1-roundpd-3.c     |  36 ++++++
>   9 files changed, 420 insertions(+)
>   create mode 100644 gcc/testsuite/gcc.target/powerpc/sse4_1-ceilpd.c
>   create mode 100644 gcc/testsuite/gcc.target/powerpc/sse4_1-ceilps.c
>   create mode 100644 gcc/testsuite/gcc.target/powerpc/sse4_1-ceilsd.c
>   create mode 100644 gcc/testsuite/gcc.target/powerpc/sse4_1-ceilss.c
>   create mode 100644 gcc/testsuite/gcc.target/powerpc/sse4_1-round-data.h
>   create mode 100644 gcc/testsuite/gcc.target/powerpc/sse4_1-round.h
>   create mode 100644 gcc/testsuite/gcc.target/powerpc/sse4_1-round2.h
>   create mode 100644 gcc/testsuite/gcc.target/powerpc/sse4_1-roundpd-3.c
>
> diff --git a/gcc/testsuite/gcc.target/powerpc/sse4_1-ceilpd.c b/gcc/testsuite/gcc.target/powerpc/sse4_1-ceilpd.c
> new file mode 100644
> index 000000000000..f532fdb9c285
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/sse4_1-ceilpd.c
> @@ -0,0 +1,51 @@
> +/* { dg-do run } */
> +/* { dg-require-effective-target p8vector_hw } */
> +/* { dg-options "-O2 -mpower8-vector -Wno-psabi" } */
> +
> +#define NO_WARN_X86_INTRINSICS 1
> +#include <smmintrin.h>
> +
> +#define VEC_T __m128d
> +#define FP_T double
> +
> +#define ROUND_INTRIN(x, mode) _mm_ceil_pd (x)
> +
> +#include "sse4_1-round-data.h"
> +
> +static struct data data[] = {
> +  { .value = { .f = {  0.00,  0.25 } }, .answer = {  0.0,  1.0 } },
> +  { .value = { .f = {  0.50,  0.75 } }, .answer = {  1.0,  1.0 } },
> +
> +  { { .f = {  0x1.ffffffffffffcp+50,  0x1.ffffffffffffdp+50 } },
> +           {  0x1.ffffffffffffcp+50,  0x1.0000000000000p+51 } },
> +  { { .f = {  0x1.ffffffffffffep+50,  0x1.fffffffffffffp+50 } },
> +           {  0x1.0000000000000p+51,  0x1.0000000000000p+51 } },
> +  { { .f = {  0x1.0000000000000p+51,  0x1.0000000000001p+51 } },
> +           {  0x1.0000000000000p+51,  0x1.0000000000002p+51 } },
> +  { { .f = {  0x1.0000000000002p+51,  0x1.0000000000003p+51 } },
> +           {  0x1.0000000000002p+51,  0x1.0000000000004p+51 } },
> +
> +  { { .f = {  0x1.ffffffffffffep+51,  0x1.fffffffffffffp+51 } },
> +           {  0x1.ffffffffffffep+51,  0x1.0000000000000p+52 } },
> +  { { .f = {  0x1.0000000000000p+52,  0x1.0000000000001p+52 } },
> +           {  0x1.0000000000000p+52,  0x1.0000000000001p+52 } },
> +
> +  { { .f = { -0x1.0000000000001p+52, -0x1.0000000000000p+52 } },
> +           { -0x1.0000000000001p+52, -0x1.0000000000000p+52 } },
> +  { { .f = { -0x1.fffffffffffffp+51, -0x1.ffffffffffffep+51 } },
> +           { -0x1.ffffffffffffep+51, -0x1.ffffffffffffep+51 } },
> +
> +  { { .f = { -0x1.0000000000003p+51, -0x1.0000000000002p+51 } },
> +           { -0x1.0000000000002p+51, -0x1.0000000000002p+51 } },
> +  { { .f = { -0x1.0000000000001p+51, -0x1.0000000000000p+51 } },
> +           { -0x1.0000000000000p+51, -0x1.0000000000000p+51 } },
> +  { { .f = { -0x1.fffffffffffffp+50, -0x1.ffffffffffffep+50 } },
> +           { -0x1.ffffffffffffcp+50, -0x1.ffffffffffffcp+50 } },
> +  { { .f = { -0x1.ffffffffffffdp+50, -0x1.ffffffffffffcp+50 } },
> +           { -0x1.ffffffffffffcp+50, -0x1.ffffffffffffcp+50 } },
> +
> +  { { .f = { -1.00, -0.75 } }, { -1.0,  0.0 } },
> +  { { .f = { -0.50, -0.25 } }, {  0.0,  0.0 } }
> +};
> +
> +#include "sse4_1-round.h"
> diff --git a/gcc/testsuite/gcc.target/powerpc/sse4_1-ceilps.c b/gcc/testsuite/gcc.target/powerpc/sse4_1-ceilps.c
> new file mode 100644
> index 000000000000..1e29999a57d8
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/sse4_1-ceilps.c
> @@ -0,0 +1,41 @@
> +/* { dg-do run } */
> +/* { dg-require-effective-target p8vector_hw } */
> +/* { dg-options "-O2 -mpower8-vector -Wno-psabi" } */
> +
> +#define NO_WARN_X86_INTRINSICS 1
> +#include <smmintrin.h>
> +
> +#define VEC_T __m128
> +#define FP_T float
> +
> +#define ROUND_INTRIN(x, mode) _mm_ceil_ps (x)
> +
> +#include "sse4_1-round-data.h"
> +
> +static struct data data[] = {
> +  { { .f = {  0.00,  0.25,  0.50,  0.75 } }, {  0.0,  1.0,  1.0,  1.0 } },
> +
> +  { { .f = {  0x1.fffff8p+21,  0x1.fffffap+21,
> +	      0x1.fffffcp+21,  0x1.fffffep+21 } },
> +           {  0x1.fffff8p+21,  0x1.000000p+22,
> +	      0x1.000000p+22,  0x1.000000p+22 } },
> +
> +  { { .f = {  0x1.fffffap+22,  0x1.fffffcp+22,
> +	      0x1.fffffep+22,  0x1.fffffep+23 } },
> +           {  0x1.fffffcp+22,  0x1.fffffcp+22,
> +	      0x1.000000p+23,  0x1.fffffep+23 } },
> +
> +  { { .f = { -0x1.fffffep+23, -0x1.fffffep+22,
> +	     -0x1.fffffcp+22, -0x1.fffffap+22 } },
> +           { -0x1.fffffep+23, -0x1.fffffcp+22,
> +	     -0x1.fffffcp+22, -0x1.fffff8p+22 } },
> +
> +  { { .f = { -0x1.fffffep+21, -0x1.fffffcp+21,
> +	     -0x1.fffffap+21, -0x1.fffff8p+21 } },
> +           { -0x1.fffff8p+21, -0x1.fffff8p+21,
> +	     -0x1.fffff8p+21, -0x1.fffff8p+21 } },
> +
> +  { { .f = { -1.00, -0.75, -0.50, -0.25 } }, { -1.0,  0.0,  0.0,  0.0 } }
> +};
> +
> +#include "sse4_1-round.h"
> diff --git a/gcc/testsuite/gcc.target/powerpc/sse4_1-ceilsd.c b/gcc/testsuite/gcc.target/powerpc/sse4_1-ceilsd.c
> new file mode 100644
> index 000000000000..cc0d9c1d0afe
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/sse4_1-ceilsd.c
> @@ -0,0 +1,119 @@
> +/* { dg-do run } */
> +/* { dg-require-effective-target p8vector_hw } */
> +/* { dg-options "-O2 -mpower8-vector -Wno-psabi" } */
> +
> +#define NO_WARN_X86_INTRINSICS 1
> +#include <smmintrin.h>
> +
> +#define VEC_T __m128d
> +#define FP_T double
> +
> +#define ROUND_INTRIN(x, y) _mm_ceil_sd (x, y)
> +
> +#include "sse4_1-round-data.h"
> +
> +static struct data2 data[] = {
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0.00, IGNORED } },
> +    .answer = {  0.0, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0.25, IGNORED } },
> +    .answer = {  1.0, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0.50, IGNORED } },
> +    .answer = {  1.0, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0.75, IGNORED } },
> +    .answer = {  1.0, PASSTHROUGH } },
> +
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.ffffffffffffcp+50, IGNORED } },
> +    .answer = {  0x1.ffffffffffffcp+50, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.ffffffffffffdp+50, IGNORED } },
> +    .answer = {  0x1.0000000000000p+51, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.ffffffffffffep+50, IGNORED } },
> +    .answer = {  0x1.0000000000000p+51, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.fffffffffffffp+50, IGNORED } },
> +    .answer = {  0x1.0000000000000p+51, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.0000000000000p+51, IGNORED } },
> +    .answer = {  0x1.0000000000000p+51, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.0000000000001p+51, IGNORED } },
> +    .answer = {  0x1.0000000000002p+51, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.0000000000002p+51, IGNORED } },
> +    .answer = {  0x1.0000000000002p+51, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.0000000000003p+51, IGNORED } },
> +    .answer = {  0x1.0000000000004p+51, PASSTHROUGH } },
> +
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.ffffffffffffep+51, IGNORED } },
> +    .answer = {  0x1.ffffffffffffep+51, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.fffffffffffffp+51, IGNORED } },
> +    .answer = {  0x1.0000000000000p+52, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.0000000000000p+52, IGNORED } },
> +    .answer = {  0x1.0000000000000p+52, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.0000000000001p+52, IGNORED } },
> +    .answer = {  0x1.0000000000001p+52, PASSTHROUGH } },
> +
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.0000000000001p+52, IGNORED } },
> +    .answer = { -0x1.0000000000001p+52, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.0000000000000p+52, IGNORED } },
> +    .answer = { -0x1.0000000000000p+52, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.fffffffffffffp+51, IGNORED } },
> +    .answer = { -0x1.ffffffffffffep+51, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.ffffffffffffep+51, IGNORED } },
> +    .answer = { -0x1.ffffffffffffep+51, PASSTHROUGH } },
> +
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.0000000000003p+51, IGNORED } },
> +    .answer = { -0x1.0000000000002p+51, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.0000000000002p+51, IGNORED } },
> +    .answer = { -0x1.0000000000002p+51, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.0000000000001p+51, IGNORED } },
> +    .answer = { -0x1.0000000000000p+51, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.0000000000000p+51, IGNORED } },
> +    .answer = { -0x1.0000000000000p+51, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.ffffffffffffcp+50, IGNORED } },
> +    .answer = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.ffffffffffffep+50, IGNORED } },
> +    .answer = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.ffffffffffffdp+50, IGNORED } },
> +    .answer = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.ffffffffffffcp+50, IGNORED } },
> +    .answer = { -0x1.ffffffffffffcp+50, PASSTHROUGH } },
> +
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -1.00, IGNORED } },
> +    .answer = { -1.0, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0.75, IGNORED } },
> +    .answer = { -0.0, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0.50, IGNORED } },
> +    .answer = { -0.0, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH } },
> +    .value2 = { .f = { -0.25, IGNORED } },
> +    .answer = { -0.0, PASSTHROUGH } }
> +};
> +
> +#include "sse4_1-round2.h"
> diff --git a/gcc/testsuite/gcc.target/powerpc/sse4_1-ceilss.c b/gcc/testsuite/gcc.target/powerpc/sse4_1-ceilss.c
> new file mode 100644
> index 000000000000..cf1a0392990e
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/sse4_1-ceilss.c
> @@ -0,0 +1,95 @@
> +/* { dg-do run } */
> +/* { dg-require-effective-target p8vector_hw } */
> +/* { dg-options "-O2 -mpower8-vector -Wno-psabi" } */
> +
> +#define NO_WARN_X86_INTRINSICS 1
> +#include <smmintrin.h>
> +
> +#define VEC_T __m128
> +#define FP_T float
> +
> +#define ROUND_INTRIN(x, y) _mm_ceil_ss (x, y)
> +
> +#include "sse4_1-round-data.h"
> +
> +static struct data2 data[] = {
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = {  0.00,  IGNORED, IGNORED, IGNORED } },
> +    .answer = {  0.0, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = {  0.25, IGNORED, IGNORED, IGNORED } },
> +    .answer = {  1.0, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = {  0.50, IGNORED, IGNORED, IGNORED } },
> +    .answer = {  1.0, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = {  0.75, IGNORED, IGNORED, IGNORED } },
> +    .answer = {  1.0, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.fffff8p+21, IGNORED, IGNORED, IGNORED } },
> +    .answer = {  0x1.fffff8p+21, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.fffffap+21, IGNORED, IGNORED, IGNORED } },
> +    .answer = {  0x1.000000p+22, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.fffffcp+21, IGNORED, IGNORED, IGNORED } },
> +    .answer = {  0x1.000000p+22, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.fffffep+21, IGNORED, IGNORED, IGNORED } },
> +    .answer = {  0x1.000000p+22, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.fffffap+22, IGNORED, IGNORED, IGNORED } },
> +    .answer = {  0x1.fffffcp+22, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.fffffcp+22, IGNORED, IGNORED, IGNORED } },
> +    .answer = {  0x1.fffffcp+22, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.fffffep+22, IGNORED, IGNORED, IGNORED } },
> +    .answer = {  0x1.000000p+23, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = {  0x1.fffffep+23, IGNORED, IGNORED, IGNORED } },
> +    .answer = {  0x1.fffffep+23, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.fffffep+23, IGNORED, IGNORED, IGNORED } },
> +    .answer = { -0x1.fffffep+23, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.fffffep+22, IGNORED, IGNORED, IGNORED } },
> +    .answer = { -0x1.fffffcp+22, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.fffffcp+22, IGNORED, IGNORED, IGNORED } },
> +    .answer = { -0x1.fffffcp+22, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.fffffap+22, IGNORED, IGNORED, IGNORED } },
> +    .answer = { -0x1.fffff8p+22, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.fffffep+21, IGNORED, IGNORED, IGNORED } },
> +    .answer = { -0x1.fffff8p+21, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.fffffcp+21, IGNORED, IGNORED, IGNORED } },
> +    .answer = { -0x1.fffff8p+21, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.fffffap+21, IGNORED, IGNORED, IGNORED } },
> +    .answer = { -0x1.fffff8p+21, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = { -0x1.fffff8p+21, IGNORED, IGNORED, IGNORED } },
> +    .answer = { -0x1.fffff8p+21, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = { -1.00, IGNORED, IGNORED, IGNORED } },
> +    .answer = { -1.0, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = { -0.75, IGNORED, IGNORED, IGNORED } },
> +    .answer = {  0.0, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = { -0.50, IGNORED, IGNORED, IGNORED } },
> +    .answer = {  0.0, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +  { .value1 = { .f = { IGNORED, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } },
> +    .value2 = { .f = { -0.25, IGNORED, IGNORED, IGNORED } },
> +    .answer = {  0.0, PASSTHROUGH, PASSTHROUGH, PASSTHROUGH } }
> +};
> +
> +#include "sse4_1-round2.h"
> diff --git a/gcc/testsuite/gcc.target/powerpc/sse4_1-check.h b/gcc/testsuite/gcc.target/powerpc/sse4_1-check.h
> index 5f855b9fd53a..16330533e50a 100644
> --- a/gcc/testsuite/gcc.target/powerpc/sse4_1-check.h
> +++ b/gcc/testsuite/gcc.target/powerpc/sse4_1-check.h
> @@ -1,6 +1,10 @@
>   #include <stdio.h>
>   #include <stdlib.h>
>   
> +/* Define this to enable the combination of VSX vector double and
> +   SSE2 data types.  */
> +#define __VSX_SSE2__ 1
> +
>   #include "m128-check.h"
>   
>   //#define DEBUG 1
> diff --git a/gcc/testsuite/gcc.target/powerpc/sse4_1-round-data.h b/gcc/testsuite/gcc.target/powerpc/sse4_1-round-data.h
> new file mode 100644
> index 000000000000..543f5bc2181b
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/sse4_1-round-data.h
> @@ -0,0 +1,20 @@
> +/* Pick a few numbers at random which are not in the input data and
> +   unlikely to show up naturally.  */
> +#define PASSTHROUGH -29.5
> +#define IGNORED -61.5
> +
> +union value {
> +  VEC_T x;
> +  FP_T f[sizeof (VEC_T) / sizeof (FP_T)];
> +};
> +
> +struct data {
> +  union value value;
> +  double answer[sizeof (VEC_T) / sizeof (FP_T)];
> +};
> +
> +struct data2 {
> +  union value value1;
> +  union value value2;
> +  double answer[sizeof (VEC_T) / sizeof (FP_T)];
> +};
> diff --git a/gcc/testsuite/gcc.target/powerpc/sse4_1-round.h b/gcc/testsuite/gcc.target/powerpc/sse4_1-round.h
> new file mode 100644
> index 000000000000..6acf8da8b766
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/sse4_1-round.h
> @@ -0,0 +1,27 @@
> +#include <fenv.h>
> +#include <smmintrin.h>
> +#include "sse4_1-check.h"
> +
> +#define DIM(a) (sizeof (a) / sizeof ((a)[0]))
> +
> +static int modes[] = { FE_TONEAREST, FE_UPWARD, FE_DOWNWARD, FE_TOWARDZERO };
> +
> +static void
> +TEST (void)
> +{
> +  int i, j, ri, round_save;
> +
> +  round_save = fegetround ();
> +  for (ri = 0; ri < DIM (modes); ri++) {
> +    (void) fesetround (modes[ri]);
> +    for (i = 0; i < DIM (data); i++) {
> +      union value guess;
> +      guess.x = ROUND_INTRIN (data[i].value.x, /* Ignored.  */);
> +      for (j = 0; j < DIM (data[i].value.f); j++) {
> +        if (guess.f[j] != data[i].answer[j])
> +          abort ();
> +      }
> +    }
> +  }
> +  (void) fesetround (round_save);
> +}
> diff --git a/gcc/testsuite/gcc.target/powerpc/sse4_1-round2.h b/gcc/testsuite/gcc.target/powerpc/sse4_1-round2.h
> new file mode 100644
> index 000000000000..859574e11d9a
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/sse4_1-round2.h
> @@ -0,0 +1,27 @@
> +#include <fenv.h>
> +#include <smmintrin.h>
> +#include "sse4_1-check.h"
> +
> +#define DIM(a) (sizeof (a) / sizeof ((a)[0]))
> +
> +static int modes[] = { FE_TONEAREST, FE_UPWARD, FE_DOWNWARD, FE_TOWARDZERO };
> +
> +static void
> +TEST (void)
> +{
> +  int i, j, ri, round_save;
> +
> +  round_save = fegetround ();
> +  for (ri = 0; ri < DIM (modes); ri++) {
> +    (void) fesetround (modes[ri]);
> +    for (i = 0; i < DIM (data); i++) {
> +      union value guess;
> +      guess.x = ROUND_INTRIN (data[i].value1.x, data[i].value2.x);
> +      for (j = 0; j < DIM (data[i].value1.f); j++) {
> +        if (guess.f[j] != data[i].answer[j])
> +          abort ();
> +      }
> +    }
> +  }
> +  (void) fesetround (round_save);
> +}
> diff --git a/gcc/testsuite/gcc.target/powerpc/sse4_1-roundpd-3.c b/gcc/testsuite/gcc.target/powerpc/sse4_1-roundpd-3.c
> new file mode 100644
> index 000000000000..88a5f0718ebb
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/sse4_1-roundpd-3.c
> @@ -0,0 +1,36 @@
> +/* { 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 void
> +TEST (void)
> +{
> +  union128d u, s;
> +  double e[2] = {0.0};
> +  int i;
> +
> +  s.x = _mm_set_pd (1.1234, -2.3478);
> +  u.x = _mm_ceil_pd (s.x);
> +
> +  for (i = 0; i < 2; i++)
> +    {
> +      __m128d tmp = _mm_load_sd (&s.a[i]);
> +      tmp = _mm_ceil_sd (tmp, tmp);
> +      _mm_store_sd (&e[i], tmp);
> +    }
> +
> +  if (check_union128d (u, e))
> +    abort ();
> +}

  reply	other threads:[~2021-07-16 18:22 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-16 13:50 [PATCH v2 0/6] rs6000: Add SSE4.1 "blend", "ceil", "floor" Paul A. Clarke
2021-07-16 13:50 ` [PATCH v2 1/6] rs6000: Add support for SSE4.1 "blend" intrinsics Paul A. Clarke
2021-07-16 18:13   ` Bill Schmidt
2021-07-28 21:30   ` Segher Boessenkool
2021-07-16 13:50 ` [PATCH v2 2/6] rs6000: Add tests " Paul A. Clarke
2021-07-16 18:16   ` Bill Schmidt
2021-07-28 21:51   ` Segher Boessenkool
2021-07-16 13:50 ` [PATCH v2 3/6] rs6000: Add support for SSE4.1 "ceil" intrinsics Paul A. Clarke
2021-07-16 18:20   ` Bill Schmidt
2021-07-28 22:01   ` Segher Boessenkool
2021-07-16 13:50 ` [PATCH v2 4/6] rs6000: Add tests " Paul A. Clarke
2021-07-16 18:22   ` Bill Schmidt [this message]
2021-07-28 22:16   ` Segher Boessenkool
2021-07-30 22:13     ` Paul A. Clarke
2021-07-16 13:50 ` [PATCH v2 5/6] rs6000: Add support for SSE4.1 "floor" intrinsics Paul A. Clarke
2021-07-16 18:30   ` Bill Schmidt
2021-07-28 22:25   ` Segher Boessenkool
2021-07-16 13:50 ` [PATCH v2 6/6] rs6000: Add tests " Paul A. Clarke
2021-07-16 18:31   ` Bill Schmidt
2021-07-28 22:26   ` Segher Boessenkool

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e13beaa9-0f03-9595-8187-2e29d6e66992@linux.ibm.com \
    --to=wschmidt@linux.ibm.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=pc@us.ibm.com \
    --cc=segher@kernel.crashing.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).