about summary refs log tree commit diff
path: root/sysdeps/x86_64
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2021-10-13 13:46:52 -0700
committerH.J. Lu <hjl.tools@gmail.com>2021-10-14 11:59:12 -0700
commit9d3c9a046a2d7cfc9cad18675612e5916c65d7d7 (patch)
tree12b2f03416ffa0dcc72fb2c5c2a67a8ce351cb8a /sysdeps/x86_64
parentd6d89608ac8cf2b37c75debad1fff653f6939f90 (diff)
downloadglibc-9d3c9a046a2d7cfc9cad18675612e5916c65d7d7.tar.gz
glibc-9d3c9a046a2d7cfc9cad18675612e5916c65d7d7.tar.xz
glibc-9d3c9a046a2d7cfc9cad18675612e5916c65d7d7.zip
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.
Diffstat (limited to 'sysdeps/x86_64')
-rw-r--r--sysdeps/x86_64/fpu/Makefile74
-rw-r--r--sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx-main.c1
-rw-r--r--sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2-main.c1
-rw-r--r--sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512-main.c1
-rw-r--r--sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512f.c (renamed from sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512.c)0
-rw-r--r--sysdeps/x86_64/fpu/test-double-libmvec-sincos.c47
-rw-r--r--sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx-main.c1
-rw-r--r--sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2-main.c1
-rw-r--r--sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512-main.c1
-rw-r--r--sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512f.c (renamed from sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512.c)0
-rw-r--r--sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c47
-rw-r--r--sysdeps/x86_64/fpu/test-libmvec-avx.c2
-rw-r--r--sysdeps/x86_64/fpu/test-libmvec-avx2.c2
-rw-r--r--sysdeps/x86_64/fpu/test-libmvec-avx512f.c2
-rw-r--r--sysdeps/x86_64/fpu/test-libmvec.c1
-rw-r--r--sysdeps/x86_64/fpu/test-vector-abi-sincos.h (renamed from sysdeps/x86_64/fpu/test-double-libmvec-sincos-main.c)30
-rw-r--r--sysdeps/x86_64/fpu/test-vector-abi.h (renamed from sysdeps/x86_64/fpu/test-float-libmvec-sincosf-main.c)41
17 files changed, 80 insertions, 172 deletions
diff --git a/sysdeps/x86_64/fpu/Makefile b/sysdeps/x86_64/fpu/Makefile
index 1b4406380d..e5a65750c0 100644
--- a/sysdeps/x86_64/fpu/Makefile
+++ b/sysdeps/x86_64/fpu/Makefile
@@ -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-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-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.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
 
diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx-main.c
deleted file mode 100644
index fc2ffea314..0000000000
--- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx-main.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "test-double-libmvec-sincos-main.c"
diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2-main.c
deleted file mode 100644
index fc2ffea314..0000000000
--- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2-main.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "test-double-libmvec-sincos-main.c"
diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512-main.c
deleted file mode 100644
index fc2ffea314..0000000000
--- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512-main.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "test-double-libmvec-sincos-main.c"
diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512f.c
index 896f1bcbaf..896f1bcbaf 100644
--- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512.c
+++ b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512f.c
diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos.c
index 5f9eb4914f..9ccdbd6d6e 100644
--- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos.c
+++ b/sysdeps/x86_64/fpu/test-double-libmvec-sincos.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"
diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx-main.c
deleted file mode 100644
index 558e2ac649..0000000000
--- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx-main.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "test-float-libmvec-sincosf-main.c"
diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2-main.c
deleted file mode 100644
index 558e2ac649..0000000000
--- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2-main.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "test-float-libmvec-sincosf-main.c"
diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512-main.c
deleted file mode 100644
index 558e2ac649..0000000000
--- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512-main.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "test-float-libmvec-sincosf-main.c"
diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512f.c
index 5b45f0a055..5b45f0a055 100644
--- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512.c
+++ b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512f.c
diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c
index 4538003e9c..2b77f25db1 100644
--- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c
+++ b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.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"
diff --git a/sysdeps/x86_64/fpu/test-libmvec-avx.c b/sysdeps/x86_64/fpu/test-libmvec-avx.c
new file mode 100644
index 0000000000..8e0fb492d7
--- /dev/null
+++ b/sysdeps/x86_64/fpu/test-libmvec-avx.c
@@ -0,0 +1,2 @@
+#define REQUIRE_AVX
+#include "test-vector-abi.h"
diff --git a/sysdeps/x86_64/fpu/test-libmvec-avx2.c b/sysdeps/x86_64/fpu/test-libmvec-avx2.c
new file mode 100644
index 0000000000..8725907915
--- /dev/null
+++ b/sysdeps/x86_64/fpu/test-libmvec-avx2.c
@@ -0,0 +1,2 @@
+#define REQUIRE_AVX2
+#include "test-vector-abi.h"
diff --git a/sysdeps/x86_64/fpu/test-libmvec-avx512f.c b/sysdeps/x86_64/fpu/test-libmvec-avx512f.c
new file mode 100644
index 0000000000..c0f24ceaee
--- /dev/null
+++ b/sysdeps/x86_64/fpu/test-libmvec-avx512f.c
@@ -0,0 +1,2 @@
+#define REQUIRE_AVX512F
+#include "test-vector-abi.h"
diff --git a/sysdeps/x86_64/fpu/test-libmvec.c b/sysdeps/x86_64/fpu/test-libmvec.c
new file mode 100644
index 0000000000..60261f83b8
--- /dev/null
+++ b/sysdeps/x86_64/fpu/test-libmvec.c
@@ -0,0 +1 @@
+#include "test-vector-abi.h"
diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-main.c b/sysdeps/x86_64/fpu/test-vector-abi-sincos.h
index 0fe2369099..8863677a69 100644
--- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-main.c
+++ b/sysdeps/x86_64/fpu/test-vector-abi-sincos.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;
 }
diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-main.c b/sysdeps/x86_64/fpu/test-vector-abi.h
index c7246cffc3..cde24e6021 100644
--- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-main.c
+++ b/sysdeps/x86_64/fpu/test-vector-abi.h
@@ -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];
-  }
-
-#pragma omp simd
-  for(i = 0; i < N; i++)
-    sincosf (x[i], s_ptrs[i], c_ptrs[i]);
-
-  return 0;
+#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
+
+  return test_vector_abi ();
 }
+
+#include <support/test-driver.c>