This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH][BZ #18731] Fix runtime fails of AVX tests on non-AVX hardware


Hi,

this patch fixes fails of AVX vector math tests on non-AVX hardware
with addition of runtime checks.

2015-07-29  Andrew Senkevich  <andrew.senkevich@intel.com>

        [BZ #18731]
        * sysdeps/x86_64/fpu/math-tests-arch.h: Added AVX runtime check.
        * sysdeps/x86_64/fpu/test-double-vlen4.c: Likewise.
        * sysdeps/x86_64/fpu/test-float-vlen8.c: Likewise.

diff --git a/ChangeLog b/ChangeLog
index c753d5c..9a5e489 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2015-07-29  Andrew Senkevich  <andrew.senkevich@intel.com>
+
+       [BZ #18731]
+       * sysdeps/x86_64/fpu/math-tests-arch.h: Added AVX runtime check.
+       * sysdeps/x86_64/fpu/test-double-vlen4.c: Likewise.
+       * sysdeps/x86_64/fpu/test-float-vlen8.c: Likewise.
+
 2015-07-27  Mike Frysinger  <vapier@gentoo.org>

        * sysdeps/unix/sysv/linux/ia64/localplt.data: Delete __tls_get_addr.
diff --git a/sysdeps/x86_64/fpu/math-tests-arch.h
b/sysdeps/x86_64/fpu/math-tests-arch.h
index 56714f5..e8833bf 100644
--- a/sysdeps/x86_64/fpu/math-tests-arch.h
+++ b/sysdeps/x86_64/fpu/math-tests-arch.h
@@ -16,7 +16,29 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */

-#if defined REQUIRE_AVX2
+#if defined REQUIRE_AVX
+# include <init-arch.h>
+
+/* Set to 1 if AVX supported.  */
+static int avx_usable;
+
+# define INIT_ARCH_EXT                                         \
+  do                                                           \
+    {                                                          \
+      __init_cpu_features ();                                  \
+      avx_usable = __cpu_features.feature[index_AVX_Usable]    \
+                   & bit_AVX_Usable;                           \
+    }                                                          \
+  while (0)
+
+# define CHECK_ARCH_EXT                                        \
+  do                                                           \
+    {                                                          \
+      if (!avx_usable) return;                                 \
+    }                                                          \
+  while (0)
+
+#elif defined REQUIRE_AVX2
 # include <init-arch.h>

   /* Set to 1 if AVX2 supported.  */
diff --git a/sysdeps/x86_64/fpu/test-double-vlen4.c
b/sysdeps/x86_64/fpu/test-double-vlen4.c
index 679397f..f081343 100644
--- a/sysdeps/x86_64/fpu/test-double-vlen4.c
+++ b/sysdeps/x86_64/fpu/test-double-vlen4.c
@@ -25,4 +25,6 @@
 #define TEST_VECTOR_exp 1
 #define TEST_VECTOR_pow 1

+#define REQUIRE_AVX
+
 #include "libm-test.c"
diff --git a/sysdeps/x86_64/fpu/test-float-vlen8.c
b/sysdeps/x86_64/fpu/test-float-vlen8.c
index 581cbde..891e58f 100644
--- a/sysdeps/x86_64/fpu/test-float-vlen8.c
+++ b/sysdeps/x86_64/fpu/test-float-vlen8.c
@@ -25,4 +25,6 @@
 #define TEST_VECTOR_expf 1
 #define TEST_VECTOR_powf 1

+#define REQUIRE_AVX
+
 #include "libm-test.c"


--
WBR,
Andrew


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]