From: Sunil K Pandey Date: Wed, 13 Oct 2021 20:37:24 +0000 (-0700) Subject: x86_64: Add missing libmvec ABI tests X-Git-Tag: glibc-2.35~397 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4f690aad9ee50ff54e94a7aac87c2a076d625f26;p=thirdparty%2Fglibc.git x86_64: Add missing libmvec ABI tests Add vector ABI tests for cos, exp, log, pow and sin functions. Reviewed-by: H.J. Lu --- diff --git a/sysdeps/x86_64/fpu/Makeconfig b/sysdeps/x86_64/fpu/Makeconfig index 0a9341cdd9f..24aaee1a43b 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 00000000000..f2b3e8e883c --- /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 00000000000..f2b3e8e883c --- /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 00000000000..f2b3e8e883c --- /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 00000000000..ebc688163ed --- /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 00000000000..fb485c35587 --- /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 00000000000..fb485c35587 --- /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 00000000000..fb485c35587 --- /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 00000000000..fd8143aacc6 --- /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 00000000000..1acdf16a6e5 --- /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 00000000000..1acdf16a6e5 --- /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 00000000000..1acdf16a6e5 --- /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 00000000000..a17a02ca662 --- /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 00000000000..7c921ccad55 --- /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 00000000000..7c921ccad55 --- /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 00000000000..7c921ccad55 --- /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 00000000000..c70e24b6639 --- /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 00000000000..c785cd04456 --- /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 00000000000..c785cd04456 --- /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 00000000000..c785cd04456 --- /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 00000000000..bc2fb3c614d --- /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 00000000000..928f4b607b0 --- /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 00000000000..928f4b607b0 --- /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 00000000000..928f4b607b0 --- /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 00000000000..d8ecea7e6a6 --- /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 00000000000..9e0b6d667cf --- /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 00000000000..9e0b6d667cf --- /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 00000000000..9e0b6d667cf --- /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 00000000000..0c21b9ae834 --- /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 00000000000..92767c94627 --- /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 00000000000..92767c94627 --- /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 00000000000..92767c94627 --- /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 00000000000..964d869e72e --- /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 00000000000..e00d4e73e01 --- /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 00000000000..e00d4e73e01 --- /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 00000000000..e00d4e73e01 --- /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 00000000000..ef8559b0caa --- /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 00000000000..302886760e2 --- /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 00000000000..302886760e2 --- /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 00000000000..302886760e2 --- /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 00000000000..00d3255ccfc --- /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 00000000000..962fafcd0b7 --- /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 + . */ + +#include +#include + +/* 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 00000000000..4b7e10d26b3 --- /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 + . */ + +#include +#include + +/* 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; +}