x86-64: Add test-vector-abi.h/test-vector-abi-sincos.h

Add templates for vector ABI test and use them for vector sincos/sincosf
ABI tests.
This commit is contained in:
H.J. Lu 2021-10-13 13:46:52 -07:00
parent d6d89608ac
commit 9d3c9a046a
17 changed files with 78 additions and 170 deletions

View File

@ -31,58 +31,48 @@ libmvec-tests += double-vlen2 double-vlen4 double-vlen4-avx2 \
tests += test-double-libmvec-sincos test-double-libmvec-sincos-avx \
test-double-libmvec-sincos-avx2 test-float-libmvec-sincosf \
test-float-libmvec-sincosf-avx test-float-libmvec-sincosf-avx2
test-extras += test-double-libmvec-sincos-avx-main \
test-double-libmvec-sincos-avx2-main \
test-double-libmvec-sincos-main \
test-float-libmvec-sincosf-avx-main \
test-float-libmvec-sincosf-avx2-main \
test-float-libmvec-sincosf-main
extra-test-objs += test-double-libmvec-sincos-avx-main.o \
test-double-libmvec-sincos-avx2-main.o \
test-double-libmvec-sincos-main.o \
test-float-libmvec-sincosf-avx-main.o \
test-float-libmvec-sincosf-avx2-main.o\
test-float-libmvec-sincosf-main.o
test-extras += test-libmvec test-libmvec-avx \
test-libmvec-avx2 test-libmvec-avx512f
extra-test-objs += test-libmvec.o test-libmvec-avx.o \
test-libmvec-avx2.o test-libmvec-avx512f.o
$(objpfx)test-double-libmvec-sincos: \
$(objpfx)test-double-libmvec-sincos.o \
$(objpfx)test-double-libmvec-sincos-main.o $(libmvec)
$(objpfx)test-libmvec.o $(libmvec)
$(objpfx)test-double-libmvec-sincos-avx: \
$(objpfx)test-double-libmvec-sincos-avx.o \
$(objpfx)test-double-libmvec-sincos-avx-main.o $(libmvec)
$(objpfx)test-libmvec-avx.o $(libmvec)
$(objpfx)test-double-libmvec-sincos-avx2: \
$(objpfx)test-double-libmvec-sincos-avx2.o \
$(objpfx)test-double-libmvec-sincos-avx2-main.o $(libmvec)
$(objpfx)test-libmvec-avx2.o $(libmvec)
$(objpfx)test-float-libmvec-sincosf: \
$(objpfx)test-float-libmvec-sincosf.o \
$(objpfx)test-float-libmvec-sincosf-main.o $(libmvec)
$(objpfx)test-libmvec.o $(libmvec)
$(objpfx)test-float-libmvec-sincosf-avx: \
$(objpfx)test-float-libmvec-sincosf-avx.o \
$(objpfx)test-float-libmvec-sincosf-avx-main.o $(libmvec)
$(objpfx)test-libmvec-avx.o $(libmvec)
$(objpfx)test-float-libmvec-sincosf-avx2: \
$(objpfx)test-float-libmvec-sincosf-avx2.o \
$(objpfx)test-float-libmvec-sincosf-avx2-main.o $(libmvec)
$(objpfx)test-libmvec-avx2.o $(libmvec)
libmvec-tests += double-vlen8 float-vlen16
tests += test-double-libmvec-sincos-avx512 \
test-float-libmvec-sincosf-avx512
test-extras += test-double-libmvec-sincos-avx512-main \
test-float-libmvec-sincosf-avx512-main
extra-test-objs += test-double-libmvec-sincos-avx512-main.o \
test-float-libmvec-sincosf-avx512-main.o
tests += test-double-libmvec-sincos-avx512f \
test-float-libmvec-sincosf-avx512f
test-extras += test-libmvec-avx512f
extra-test-objs += test-libmvec-avx512f.o
$(objpfx)test-double-libmvec-sincos-avx512: \
$(objpfx)test-double-libmvec-sincos-avx512.o \
$(objpfx)test-double-libmvec-sincos-avx512-main.o $(libmvec)
$(objpfx)test-double-libmvec-sincos-avx512f: \
$(objpfx)test-double-libmvec-sincos-avx512f.o \
$(objpfx)test-libmvec-avx512f.o $(libmvec)
$(objpfx)test-float-libmvec-sincosf-avx512: \
$(objpfx)test-float-libmvec-sincosf-avx512.o \
$(objpfx)test-float-libmvec-sincosf-avx512-main.o $(libmvec)
$(objpfx)test-float-libmvec-sincosf-avx512f: \
$(objpfx)test-float-libmvec-sincosf-avx512f.o \
$(objpfx)test-libmvec-avx512f.o $(libmvec)
double-vlen2-funcs = cos exp log pow sin sincos
double-vlen4-funcs = cos exp log pow sin sincos
@ -107,21 +97,15 @@ CFLAGS-test-double-vlen4-avx2-wrappers.c = $(double-vlen4-arch-ext2-cflags)
CFLAGS-test-float-vlen8-avx2-wrappers.c = $(float-vlen8-arch-ext2-cflags)
CFLAGS-test-double-libmvec-sincos-main.c = $(libmvec-sincos-cflags)
CFLAGS-test-double-libmvec-sincos-avx.c = -DREQUIRE_AVX
CFLAGS-test-double-libmvec-sincos-avx-main.c = $(libmvec-sincos-cflags) $(double-vlen4-arch-ext-cflags)
CFLAGS-test-double-libmvec-sincos-avx2.c = -DREQUIRE_AVX2
CFLAGS-test-double-libmvec-sincos-avx2-main.c = $(libmvec-sincos-cflags) $(double-vlen4-arch-ext2-cflags)
CFLAGS-test-double-libmvec-sincos-avx512.c = -DREQUIRE_AVX512F
CFLAGS-test-double-libmvec-sincos-avx512-main.c = $(libmvec-sincos-cflags) $(double-vlen8-arch-ext-cflags)
CFLAGS-test-double-libmvec-sincos.c = $(libmvec-sincos-cflags)
CFLAGS-test-double-libmvec-sincos-avx.c = $(libmvec-sincos-cflags) $(double-vlen4-arch-ext-cflags)
CFLAGS-test-double-libmvec-sincos-avx2.c = $(libmvec-sincos-cflags) $(double-vlen4-arch-ext2-cflags)
CFLAGS-test-double-libmvec-sincos-avx512f.c = $(libmvec-sincos-cflags) $(double-vlen8-arch-ext-cflags)
CFLAGS-test-float-libmvec-sincosf-main.c = $(libmvec-sincos-cflags)
CFLAGS-test-float-libmvec-sincosf-avx.c = -DREQUIRE_AVX
CFLAGS-test-float-libmvec-sincosf-avx-main.c = $(libmvec-sincos-cflags) $(float-vlen8-arch-ext-cflags)
CFLAGS-test-float-libmvec-sincosf-avx2.c = -DREQUIRE_AVX2
CFLAGS-test-float-libmvec-sincosf-avx2-main.c = $(libmvec-sincos-cflags) $(float-vlen8-arch-ext2-cflags)
CFLAGS-test-float-libmvec-sincosf-avx512.c = -DREQUIRE_AVX512F
CFLAGS-test-float-libmvec-sincosf-avx512-main.c = $(libmvec-sincos-cflags) $(float-vlen16-arch-ext-cflags)
CFLAGS-test-float-libmvec-sincosf.c = $(libmvec-sincos-cflags)
CFLAGS-test-float-libmvec-sincosf-avx.c = $(libmvec-sincos-cflags) $(float-vlen8-arch-ext-cflags)
CFLAGS-test-float-libmvec-sincosf-avx2.c = $(libmvec-sincos-cflags) $(float-vlen8-arch-ext2-cflags)
CFLAGS-test-float-libmvec-sincosf-avx512f.c = $(libmvec-sincos-cflags) $(float-vlen16-arch-ext-cflags)
endif
endif

View File

@ -1 +0,0 @@
#include "test-double-libmvec-sincos-main.c"

View File

@ -1 +0,0 @@
#include "test-double-libmvec-sincos-main.c"

View File

@ -1 +0,0 @@
#include "test-double-libmvec-sincos-main.c"

View File

@ -1,44 +1,3 @@
/* Test for vector sincos ABI.
Copyright (C) 2016-2021 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <math-tests-arch.h>
extern int test_sincos_abi (void);
int arch_check = 1;
static void
check_arch (void)
{
CHECK_ARCH_EXT;
arch_check = 0;
}
static int
do_test (void)
{
check_arch ();
if (arch_check)
return 77;
return test_sincos_abi ();
}
#define TEST_FUNCTION do_test ()
#include "../../../test-skeleton.c"
#define LIBMVEC_TYPE double
#define LIBMVEC_SINCOS sincos
#include "test-vector-abi-sincos.h"

View File

@ -1 +0,0 @@
#include "test-float-libmvec-sincosf-main.c"

View File

@ -1 +0,0 @@
#include "test-float-libmvec-sincosf-main.c"

View File

@ -1 +0,0 @@
#include "test-float-libmvec-sincosf-main.c"

View File

@ -1,44 +1,3 @@
/* Test for vector sincosf ABI.
Copyright (C) 2016-2021 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <math-tests-arch.h>
extern int test_sincosf_abi (void);
int arch_check = 1;
static void
check_arch (void)
{
CHECK_ARCH_EXT;
arch_check = 0;
}
static int
do_test (void)
{
check_arch ();
if (arch_check)
return 77;
return test_sincosf_abi ();
}
#define TEST_FUNCTION do_test ()
#include "../../../test-skeleton.c"
#define LIBMVEC_TYPE float
#define LIBMVEC_SINCOS sincosf
#include "test-vector-abi-sincos.h"

View File

@ -0,0 +1,2 @@
#define REQUIRE_AVX
#include "test-vector-abi.h"

View File

@ -0,0 +1,2 @@
#define REQUIRE_AVX2
#include "test-vector-abi.h"

View File

@ -0,0 +1,2 @@
#define REQUIRE_AVX512F
#include "test-vector-abi.h"

View File

@ -0,0 +1 @@
#include "test-vector-abi.h"

View File

@ -1,4 +1,4 @@
/* Test for vector sincos ABI.
/* Test for vector sincos/sincosf ABI.
Copyright (C) 2016-2021 Free Software Foundation, Inc.
This file is part of the GNU C Library.
@ -17,27 +17,33 @@
<https://www.gnu.org/licenses/>. */
#include <math.h>
#include <support/test-driver.h>
/* Since libsupport_nonshared.a is placed before test-libmvec*.o, which
defines do_test, reference support_test_main here to include it to
avoid undefined reference to support_test_main. The libmvec ABI test
doesn't need other symbols in libsupport_nonshared.a. */
__typeof (support_test_main) *support_test_main_p = support_test_main;
#define N 1000
double x[N], s[N], c[N];
double* s_ptrs[N];
double* c_ptrs[N];
LIBMVEC_TYPE x[N], s[N], c[N];
LIBMVEC_TYPE *s_ptrs[N];
LIBMVEC_TYPE *c_ptrs[N];
int
test_sincos_abi (void)
test_vector_abi (void)
{
int i;
for(i = 0; i < N; i++)
{
x[i] = i / 3;
s_ptrs[i] = &s[i];
c_ptrs[i] = &c[i];
}
{
x[i] = i / 3;
s_ptrs[i] = &s[i];
c_ptrs[i] = &c[i];
}
#pragma omp simd
for(i = 0; i < N; i++)
sincos (x[i], s_ptrs[i], c_ptrs[i]);
LIBMVEC_SINCOS (x[i], s_ptrs[i], c_ptrs[i]);
return 0;
}

View File

@ -1,4 +1,4 @@
/* Test for vector sincosf ABI.
/* Test for vector ABI.
Copyright (C) 2016-2021 Free Software Foundation, Inc.
This file is part of the GNU C Library.
@ -16,27 +16,26 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <math.h>
#include <sys/platform/x86.h>
#include <support/test-driver.h>
#define N 1000
float x[N], s[N], c[N];
float *s_ptrs[N];
float *c_ptrs[N];
extern int test_vector_abi (void);
int
test_sincosf_abi (void)
static int
do_test (void)
{
int i;
for(i = 0; i < N; i++)
{
x[i] = i / 3;
s_ptrs[i] = &s[i];
c_ptrs[i] = &c[i];
}
#if defined REQUIRE_AVX
if (!CPU_FEATURE_ACTIVE (AVX))
return EXIT_UNSUPPORTED;
#elif defined REQUIRE_AVX2
if (!CPU_FEATURE_ACTIVE (AVX2))
return EXIT_UNSUPPORTED;
#elif defined REQUIRE_AVX512F
if (!CPU_FEATURE_ACTIVE (AVX512F))
return EXIT_UNSUPPORTED;
#endif
#pragma omp simd
for(i = 0; i < N; i++)
sincosf (x[i], s_ptrs[i], c_ptrs[i]);
return 0;
return test_vector_abi ();
}
#include <support/test-driver.c>