Re: [PATCH v2 4/6] rs6000: Add tests for SSE4.1 "ceil" intrinsics
On Wed, Jul 28, 2021 at 05:16:32PM -0500, Segher Boessenkool wrote: > On Fri, Jul 16, 2021 at 08:50:20AM -0500, Paul A. Clarke wrote: > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/powerpc/sse4_1-round.h > > @@ -0,0 +1,27 @@ > > +#include > > +#include > > +#include "sse4_1-check.h" > > + > > +#define DIM(a) (sizeof (a) / sizeof ((a)[0])) > > Pet peeve: sizeof is an operator, not a function, so even if you want to > protect the macro parameter this just is > #define DIM(a) (sizeof (a) / sizeof (a)[0]) > > > + (void) fesetround (round_save); > > Please don't cast to (void). That never does *anything*. > > Okay for trunk (these are all testsuite files after all, and we should > test horrrible style as well! :-P ) I didn't want to be responsible for promulgating horrible style, so I incorporated the above changes and pushed as d656a3d3ce88d402a14e8c120f1b0e78a3979deb. :-) PC
Re: [PATCH v2 4/6] rs6000: Add tests for SSE4.1 "ceil" intrinsics
Hi! On Fri, Jul 16, 2021 at 08:50:20AM -0500, Paul A. Clarke wrote: > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/sse4_1-round.h > @@ -0,0 +1,27 @@ > +#include > +#include > +#include "sse4_1-check.h" > + > +#define DIM(a) (sizeof (a) / sizeof ((a)[0])) Pet peeve: sizeof is an operator, not a function, so even if you want to protect the macro parameter this just is #define DIM(a) (sizeof (a) / sizeof (a)[0]) > + (void) fesetround (round_save); Please don't cast to (void). That never does *anything*. Okay for trunk (these are all testsuite files after all, and we should test horrrible style as well! :-P ) Thanks, Segher
Re: [PATCH v2 4/6] rs6000: Add tests for SSE4.1 "ceil" intrinsics
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 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 ..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 + +#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.cp+50, 0x1.dp+50 } }, + { 0x1.cp+50, 0x1.0p+51 } }, + { { .f = { 0x1.ep+50, 0x1.fp+50 } }, + { 0x1.0p+51, 0x1.0p+51 } }, + { { .f = { 0x1.0p+51, 0x1.1p+51 } }, + { 0x1.0p+51, 0x1.2p+51 } }, + { { .f = { 0x1.2p+51, 0x1.3p+51 } }, + { 0x1.2p+51, 0x1.4p+51 } }, + + { { .f = { 0x1.ep+51, 0x1.fp+51 } }, + { 0x1.ep+51, 0x1.0p+52 } }, + { { .f = { 0x1.0p+52, 0x1.1p+52 } }, + { 0x1.0p+52, 0x1.1p+52 } }, + + { { .f = { -0x1.1p+52, -0x1.0p+52 } }, + { -0x1.1p+52, -0x1.0p+52 } }, + { { .f = { -0x1.fp+51, -0x1.ep+51 } }, + { -0x1.ep+51, -0x1.ep+51 } }, + + { { .f = { -0x1.3p+51, -0x1.2p+51 } }, + { -0x1.2p+51, -0x1.2p+51 } }, + { { .f = { -0x1.1p+51, -0x1.0p+51 } }, + { -0x1.0p+51, -0x1.0p+51 } }, + { { .f = { -0x1.fp+50, -0x1.ep+50 } }, + { -0x1.cp+50, -0x1.cp+50 } }, + { { .f = { -0x1.dp+50, -0x1.cp+50 } }, + { -0x1.cp+50, -0x1.cp+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 ..1e2a57d8 --- /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 + +#defin
[PATCH v2 4/6] rs6000: Add tests for SSE4.1 "ceil" intrinsics
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 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 ..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 + +#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.cp+50, 0x1.dp+50 } }, + { 0x1.cp+50, 0x1.0p+51 } }, + { { .f = { 0x1.ep+50, 0x1.fp+50 } }, + { 0x1.0p+51, 0x1.0p+51 } }, + { { .f = { 0x1.0p+51, 0x1.1p+51 } }, + { 0x1.0p+51, 0x1.2p+51 } }, + { { .f = { 0x1.2p+51, 0x1.3p+51 } }, + { 0x1.2p+51, 0x1.4p+51 } }, + + { { .f = { 0x1.ep+51, 0x1.fp+51 } }, + { 0x1.ep+51, 0x1.0p+52 } }, + { { .f = { 0x1.0p+52, 0x1.1p+52 } }, + { 0x1.0p+52, 0x1.1p+52 } }, + + { { .f = { -0x1.1p+52, -0x1.0p+52 } }, + { -0x1.1p+52, -0x1.0p+52 } }, + { { .f = { -0x1.fp+51, -0x1.ep+51 } }, + { -0x1.ep+51, -0x1.ep+51 } }, + + { { .f = { -0x1.3p+51, -0x1.2p+51 } }, + { -0x1.2p+51, -0x1.2p+51 } }, + { { .f = { -0x1.1p+51, -0x1.0p+51 } }, + { -0x1.0p+51, -0x1.0p+51 } }, + { { .f = { -0x1.fp+50, -0x1.ep+50 } }, + { -0x1.cp+50, -0x1.cp+50 } }, + { { .f = { -0x1.dp+50, -0x1.cp+50 } }, + { -0x1.cp+50, -0x1.cp+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 ..1e2a57d8 --- /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 + +#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 d