diff options
author | Sunil K Pandey <skpgkp2@gmail.com> | 2021-10-13 13:37:24 -0700 |
---|---|---|
committer | Sunil K Pandey <skpgkp2@gmail.com> | 2021-10-22 06:46:49 -0700 |
commit | 4f690aad9ee50ff54e94a7aac87c2a076d625f26 (patch) | |
tree | 03f9a7c56a07478abc6fd1ad41f8cd8ebf13f182 | |
parent | 927246e1882e4aa0ac3abac1fc795be494c38141 (diff) | |
download | glibc-4f690aad9ee50ff54e94a7aac87c2a076d625f26.zip glibc-4f690aad9ee50ff54e94a7aac87c2a076d625f26.tar.gz glibc-4f690aad9ee50ff54e94a7aac87c2a076d625f26.tar.bz2 |
x86_64: Add missing libmvec ABI tests
Add vector ABI tests for cos, exp, log, pow and sin functions.
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
43 files changed, 152 insertions, 8 deletions
diff --git a/sysdeps/x86_64/fpu/Makeconfig b/sysdeps/x86_64/fpu/Makeconfig index 0a9341c..24aaee1 100644 --- a/sysdeps/x86_64/fpu/Makeconfig +++ b/sysdeps/x86_64/fpu/Makeconfig @@ -29,15 +29,10 @@ libmvec-funcs = \ sin \ sincos \ -# FIXME: Add ABI tests for all libmvec functions and replace -# libmvec-abi-funcs with libmvec-funcs. -libmvec-abi-funcs = \ - sincos - # The base libmvec ABI tests. libmvec-abi-func-tests = \ - $(addprefix test-double-libmvec-,$(libmvec-abi-funcs)) \ - $(addsuffix f,$(addprefix test-float-libmvec-,$(libmvec-abi-funcs))) + $(addprefix test-double-libmvec-,$(libmvec-funcs)) \ + $(addsuffix f,$(addprefix test-float-libmvec-,$(libmvec-funcs))) # The AVX libmvec ABI tests. libmvec-abi-func-avx-tests = \ @@ -62,7 +57,7 @@ $(common-objpfx)libmvec.mk: $(common-objpfx)config.make echo; \ done; \ done; \ - for t in $(libmvec-abi-funcs); do \ + for t in $(libmvec-funcs); do \ echo "CFLAGS-test-double-libmvec-$$t.c = \\"; \ echo " \$$(libmvec-abi-test-cflags)"; \ echo "CFLAGS-test-double-libmvec-$$t-avx.c = \\"; \ diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-cos-avx.c b/sysdeps/x86_64/fpu/test-double-libmvec-cos-avx.c new file mode 100644 index 0000000..f2b3e8e --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-cos-avx.c @@ -0,0 +1 @@ +#include "test-double-libmvec-cos.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-cos-avx2.c b/sysdeps/x86_64/fpu/test-double-libmvec-cos-avx2.c new file mode 100644 index 0000000..f2b3e8e --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-cos-avx2.c @@ -0,0 +1 @@ +#include "test-double-libmvec-cos.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-cos-avx512f.c b/sysdeps/x86_64/fpu/test-double-libmvec-cos-avx512f.c new file mode 100644 index 0000000..f2b3e8e --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-cos-avx512f.c @@ -0,0 +1 @@ +#include "test-double-libmvec-cos.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-cos.c b/sysdeps/x86_64/fpu/test-double-libmvec-cos.c new file mode 100644 index 0000000..ebc6881 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-cos.c @@ -0,0 +1,3 @@ +#define LIBMVEC_TYPE double +#define LIBMVEC_FUNC cos +#include "test-vector-abi-arg1.h" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-exp-avx.c b/sysdeps/x86_64/fpu/test-double-libmvec-exp-avx.c new file mode 100644 index 0000000..fb485c3 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-exp-avx.c @@ -0,0 +1 @@ +#include "test-double-libmvec-exp.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-exp-avx2.c b/sysdeps/x86_64/fpu/test-double-libmvec-exp-avx2.c new file mode 100644 index 0000000..fb485c3 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-exp-avx2.c @@ -0,0 +1 @@ +#include "test-double-libmvec-exp.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-exp-avx512f.c b/sysdeps/x86_64/fpu/test-double-libmvec-exp-avx512f.c new file mode 100644 index 0000000..fb485c3 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-exp-avx512f.c @@ -0,0 +1 @@ +#include "test-double-libmvec-exp.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-exp.c b/sysdeps/x86_64/fpu/test-double-libmvec-exp.c new file mode 100644 index 0000000..fd8143a --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-exp.c @@ -0,0 +1,3 @@ +#define LIBMVEC_TYPE double +#define LIBMVEC_FUNC exp +#include "test-vector-abi-arg1.h" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-log-avx.c b/sysdeps/x86_64/fpu/test-double-libmvec-log-avx.c new file mode 100644 index 0000000..1acdf16 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-log-avx.c @@ -0,0 +1 @@ +#include "test-double-libmvec-log.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-log-avx2.c b/sysdeps/x86_64/fpu/test-double-libmvec-log-avx2.c new file mode 100644 index 0000000..1acdf16 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-log-avx2.c @@ -0,0 +1 @@ +#include "test-double-libmvec-log.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-log-avx512f.c b/sysdeps/x86_64/fpu/test-double-libmvec-log-avx512f.c new file mode 100644 index 0000000..1acdf16 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-log-avx512f.c @@ -0,0 +1 @@ +#include "test-double-libmvec-log.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-log.c b/sysdeps/x86_64/fpu/test-double-libmvec-log.c new file mode 100644 index 0000000..a17a02c --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-log.c @@ -0,0 +1,3 @@ +#define LIBMVEC_TYPE double +#define LIBMVEC_FUNC log +#include "test-vector-abi-arg1.h" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-pow-avx.c b/sysdeps/x86_64/fpu/test-double-libmvec-pow-avx.c new file mode 100644 index 0000000..7c921cc --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-pow-avx.c @@ -0,0 +1 @@ +#include "test-double-libmvec-pow.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-pow-avx2.c b/sysdeps/x86_64/fpu/test-double-libmvec-pow-avx2.c new file mode 100644 index 0000000..7c921cc --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-pow-avx2.c @@ -0,0 +1 @@ +#include "test-double-libmvec-pow.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-pow-avx512f.c b/sysdeps/x86_64/fpu/test-double-libmvec-pow-avx512f.c new file mode 100644 index 0000000..7c921cc --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-pow-avx512f.c @@ -0,0 +1 @@ +#include "test-double-libmvec-pow.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-pow.c b/sysdeps/x86_64/fpu/test-double-libmvec-pow.c new file mode 100644 index 0000000..c70e24b --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-pow.c @@ -0,0 +1,3 @@ +#define LIBMVEC_TYPE double +#define LIBMVEC_FUNC pow +#include "test-vector-abi-arg2.h" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sin-avx.c b/sysdeps/x86_64/fpu/test-double-libmvec-sin-avx.c new file mode 100644 index 0000000..c785cd0 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-sin-avx.c @@ -0,0 +1 @@ +#include "test-double-libmvec-sin.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sin-avx2.c b/sysdeps/x86_64/fpu/test-double-libmvec-sin-avx2.c new file mode 100644 index 0000000..c785cd0 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-sin-avx2.c @@ -0,0 +1 @@ +#include "test-double-libmvec-sin.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sin-avx512f.c b/sysdeps/x86_64/fpu/test-double-libmvec-sin-avx512f.c new file mode 100644 index 0000000..c785cd0 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-sin-avx512f.c @@ -0,0 +1 @@ +#include "test-double-libmvec-sin.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sin.c b/sysdeps/x86_64/fpu/test-double-libmvec-sin.c new file mode 100644 index 0000000..bc2fb3c --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-sin.c @@ -0,0 +1,3 @@ +#define LIBMVEC_TYPE double +#define LIBMVEC_FUNC sin +#include "test-vector-abi-arg1.h" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-cosf-avx.c b/sysdeps/x86_64/fpu/test-float-libmvec-cosf-avx.c new file mode 100644 index 0000000..928f4b6 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-cosf-avx.c @@ -0,0 +1 @@ +#include "test-float-libmvec-cosf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-cosf-avx2.c b/sysdeps/x86_64/fpu/test-float-libmvec-cosf-avx2.c new file mode 100644 index 0000000..928f4b6 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-cosf-avx2.c @@ -0,0 +1 @@ +#include "test-float-libmvec-cosf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-cosf-avx512f.c b/sysdeps/x86_64/fpu/test-float-libmvec-cosf-avx512f.c new file mode 100644 index 0000000..928f4b6 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-cosf-avx512f.c @@ -0,0 +1 @@ +#include "test-float-libmvec-cosf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-cosf.c b/sysdeps/x86_64/fpu/test-float-libmvec-cosf.c new file mode 100644 index 0000000..d8ecea7 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-cosf.c @@ -0,0 +1,3 @@ +#define LIBMVEC_TYPE float +#define LIBMVEC_FUNC cosf +#include "test-vector-abi-arg1.h" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-expf-avx.c b/sysdeps/x86_64/fpu/test-float-libmvec-expf-avx.c new file mode 100644 index 0000000..9e0b6d6 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-expf-avx.c @@ -0,0 +1 @@ +#include "test-float-libmvec-expf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-expf-avx2.c b/sysdeps/x86_64/fpu/test-float-libmvec-expf-avx2.c new file mode 100644 index 0000000..9e0b6d6 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-expf-avx2.c @@ -0,0 +1 @@ +#include "test-float-libmvec-expf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-expf-avx512f.c b/sysdeps/x86_64/fpu/test-float-libmvec-expf-avx512f.c new file mode 100644 index 0000000..9e0b6d6 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-expf-avx512f.c @@ -0,0 +1 @@ +#include "test-float-libmvec-expf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-expf.c b/sysdeps/x86_64/fpu/test-float-libmvec-expf.c new file mode 100644 index 0000000..0c21b9a --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-expf.c @@ -0,0 +1,3 @@ +#define LIBMVEC_TYPE float +#define LIBMVEC_FUNC expf +#include "test-vector-abi-arg1.h" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-logf-avx.c b/sysdeps/x86_64/fpu/test-float-libmvec-logf-avx.c new file mode 100644 index 0000000..92767c9 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-logf-avx.c @@ -0,0 +1 @@ +#include "test-float-libmvec-logf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-logf-avx2.c b/sysdeps/x86_64/fpu/test-float-libmvec-logf-avx2.c new file mode 100644 index 0000000..92767c9 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-logf-avx2.c @@ -0,0 +1 @@ +#include "test-float-libmvec-logf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-logf-avx512f.c b/sysdeps/x86_64/fpu/test-float-libmvec-logf-avx512f.c new file mode 100644 index 0000000..92767c9 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-logf-avx512f.c @@ -0,0 +1 @@ +#include "test-float-libmvec-logf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-logf.c b/sysdeps/x86_64/fpu/test-float-libmvec-logf.c new file mode 100644 index 0000000..964d869 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-logf.c @@ -0,0 +1,3 @@ +#define LIBMVEC_TYPE float +#define LIBMVEC_FUNC logf +#include "test-vector-abi-arg1.h" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-powf-avx.c b/sysdeps/x86_64/fpu/test-float-libmvec-powf-avx.c new file mode 100644 index 0000000..e00d4e7 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-powf-avx.c @@ -0,0 +1 @@ +#include "test-float-libmvec-powf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-powf-avx2.c b/sysdeps/x86_64/fpu/test-float-libmvec-powf-avx2.c new file mode 100644 index 0000000..e00d4e7 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-powf-avx2.c @@ -0,0 +1 @@ +#include "test-float-libmvec-powf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-powf-avx512f.c b/sysdeps/x86_64/fpu/test-float-libmvec-powf-avx512f.c new file mode 100644 index 0000000..e00d4e7 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-powf-avx512f.c @@ -0,0 +1 @@ +#include "test-float-libmvec-powf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-powf.c b/sysdeps/x86_64/fpu/test-float-libmvec-powf.c new file mode 100644 index 0000000..ef8559b --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-powf.c @@ -0,0 +1,3 @@ +#define LIBMVEC_TYPE float +#define LIBMVEC_FUNC powf +#include "test-vector-abi-arg2.h" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sinf-avx.c b/sysdeps/x86_64/fpu/test-float-libmvec-sinf-avx.c new file mode 100644 index 0000000..3028867 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-sinf-avx.c @@ -0,0 +1 @@ +#include "test-float-libmvec-sinf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sinf-avx2.c b/sysdeps/x86_64/fpu/test-float-libmvec-sinf-avx2.c new file mode 100644 index 0000000..3028867 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-sinf-avx2.c @@ -0,0 +1 @@ +#include "test-float-libmvec-sinf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sinf-avx512f.c b/sysdeps/x86_64/fpu/test-float-libmvec-sinf-avx512f.c new file mode 100644 index 0000000..3028867 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-sinf-avx512f.c @@ -0,0 +1 @@ +#include "test-float-libmvec-sinf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sinf.c b/sysdeps/x86_64/fpu/test-float-libmvec-sinf.c new file mode 100644 index 0000000..00d3255 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-sinf.c @@ -0,0 +1,3 @@ +#define LIBMVEC_TYPE float +#define LIBMVEC_FUNC sinf +#include "test-vector-abi-arg1.h" diff --git a/sysdeps/x86_64/fpu/test-vector-abi-arg1.h b/sysdeps/x86_64/fpu/test-vector-abi-arg1.h new file mode 100644 index 0000000..962fafc --- /dev/null +++ b/sysdeps/x86_64/fpu/test-vector-abi-arg1.h @@ -0,0 +1,43 @@ +/* Test for vector ABI with a single argument. + 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.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 +LIBMVEC_TYPE x[N], c[N]; + +int +test_vector_abi (void) +{ + int i; + for(i = 0; i < N; i++) + c[i] = i / 3; + +#pragma omp simd + for(i = 0; i < N; i++) + x[i] = LIBMVEC_FUNC (c[i]); + + return 0; +} diff --git a/sysdeps/x86_64/fpu/test-vector-abi-arg2.h b/sysdeps/x86_64/fpu/test-vector-abi-arg2.h new file mode 100644 index 0000000..4b7e10d --- /dev/null +++ b/sysdeps/x86_64/fpu/test-vector-abi-arg2.h @@ -0,0 +1,46 @@ +/* Test for vector ABI with 2 arguments. + 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.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 +LIBMVEC_TYPE x[N], s[N], c[N]; + +int +test_vector_abi (void) +{ + int i; + for(i = 0; i < N; i++) + { + c[i] = i / 3; + s[i] = c[i]; + } + +#pragma omp simd + for(i = 0; i < N; i++) + x[i] = LIBMVEC_FUNC (s[i], c[i]); + + return 0; +} |