mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 09:43:32 +08:00
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:
parent
d6d89608ac
commit
9d3c9a046a
@ -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
|
||||
|
||||
|
@ -1 +0,0 @@
|
||||
#include "test-double-libmvec-sincos-main.c"
|
@ -1 +0,0 @@
|
||||
#include "test-double-libmvec-sincos-main.c"
|
@ -1 +0,0 @@
|
||||
#include "test-double-libmvec-sincos-main.c"
|
@ -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"
|
||||
|
@ -1 +0,0 @@
|
||||
#include "test-float-libmvec-sincosf-main.c"
|
@ -1 +0,0 @@
|
||||
#include "test-float-libmvec-sincosf-main.c"
|
@ -1 +0,0 @@
|
||||
#include "test-float-libmvec-sincosf-main.c"
|
@ -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"
|
||||
|
2
sysdeps/x86_64/fpu/test-libmvec-avx.c
Normal file
2
sysdeps/x86_64/fpu/test-libmvec-avx.c
Normal file
@ -0,0 +1,2 @@
|
||||
#define REQUIRE_AVX
|
||||
#include "test-vector-abi.h"
|
2
sysdeps/x86_64/fpu/test-libmvec-avx2.c
Normal file
2
sysdeps/x86_64/fpu/test-libmvec-avx2.c
Normal file
@ -0,0 +1,2 @@
|
||||
#define REQUIRE_AVX2
|
||||
#include "test-vector-abi.h"
|
2
sysdeps/x86_64/fpu/test-libmvec-avx512f.c
Normal file
2
sysdeps/x86_64/fpu/test-libmvec-avx512f.c
Normal file
@ -0,0 +1,2 @@
|
||||
#define REQUIRE_AVX512F
|
||||
#include "test-vector-abi.h"
|
1
sysdeps/x86_64/fpu/test-libmvec.c
Normal file
1
sysdeps/x86_64/fpu/test-libmvec.c
Normal file
@ -0,0 +1 @@
|
||||
#include "test-vector-abi.h"
|
@ -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;
|
||||
}
|
@ -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>
|
Loading…
Reference in New Issue
Block a user