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

Message ID CAMXFM3uBzAwdhiS3OWHhWE47mqtAOWoO5TdEPNVj0z7027kBkg@mail.gmail.com
State Committed
Headers

Commit Message

Andrew Senkevich July 29, 2015, 1:11 p.m. UTC
  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.



--
WBR,
Andrew
  

Comments

Joseph Myers July 29, 2015, 4:27 p.m. UTC | #1
On Wed, 29 Jul 2015, Andrew Senkevich wrote:

> 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.

OK.
  

Patch

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"