]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
avx-os-support.h: New.
authorUros Bizjak <ubizjak@gmail.com>
Wed, 27 Jul 2011 15:54:59 +0000 (17:54 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Wed, 27 Jul 2011 15:54:59 +0000 (17:54 +0200)
* gcc.target/i386/avx-os-support.h: New.
* gcc.target/i386/avx-check.h: Include avx-os-support.h
(main): Check avx_os_support before the test is run.
* gcc.target/i386/aes-avx-check.h: Ditto.
* gcc.target/i386/pclmul-avx-check.h: Ditto.

From-SVN: r176832

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/aes-avx-check.h
gcc/testsuite/gcc.target/i386/avx-check.h
gcc/testsuite/gcc.target/i386/avx-os-support.h [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pclmul-avx-check.h

index 228a5d82727b45b40f2462a6662d8cdf381317ee..13b73d7ad28c207fafe024020796acdc1f7b2642 100644 (file)
@@ -1,3 +1,11 @@
+2011-07-27  Uros Bizjak  <ubizjak@gmail.com>
+
+       * gcc.target/i386/avx-os-support.h: New.
+       * gcc.target/i386/avx-check.h: Include avx-os-support.h
+       (main): Check avx_os_support before the test is run.
+       * gcc.target/i386/aes-avx-check.h: Ditto.
+       * gcc.target/i386/pclmul-avx-check.h: Ditto.
+
 2011-07-22  Uros Bizjak  <ubizjak@gmail.com>
 
        * lib/target-supports.exp (check_avx_os_support_available): New.
index e73e36eab2574b9b91eaacdf6fc954e7fa7c127d..96305fbb3ef192dd8e31830d6307fb352e745f0f 100644 (file)
@@ -3,6 +3,7 @@
 #endif
 #include <stdlib.h>
 #include "cpuid.h"
+#include "avx-os-support.h"
 
 static void aes_avx_test (void);
 
@@ -15,7 +16,9 @@ main ()
     return 0;
 
   /* Run AES + AVX test only if host has AES + AVX support.  */
-  if ((ecx & (bit_AVX | bit_AES)) == (bit_AVX | bit_AES))
+  if (((ecx & (bit_AVX | bit_OSXSAVE | bit_AES))
+       == (bit_AVX | bit_OSXSAVE | bit_AES))
+      && avx_os_support ())
     {
       aes_avx_test ();
 #ifdef DEBUG
index 491da8b4c4fad795c7ce50d4e130a983a94a01fd..c094eddfb99c4f51f6f119f1133b9ed58323e95f 100644 (file)
@@ -1,6 +1,7 @@
 #include <stdlib.h>
 #include "cpuid.h"
 #include "m256-check.h"
+#include "avx-os-support.h"
 
 static void avx_test (void);
 
@@ -13,7 +14,8 @@ main ()
     return 0;
 
   /* Run AVX test only if host has AVX support.  */
-  if ((ecx & (bit_AVX | bit_OSXSAVE)) == (bit_AVX | bit_OSXSAVE))
+  if (((ecx & (bit_AVX | bit_OSXSAVE)) == (bit_AVX | bit_OSXSAVE))
+      && avx_os_support ())
     {
       avx_test ();
 #ifdef DEBUG
diff --git a/gcc/testsuite/gcc.target/i386/avx-os-support.h b/gcc/testsuite/gcc.target/i386/avx-os-support.h
new file mode 100644 (file)
index 0000000..21d332f
--- /dev/null
@@ -0,0 +1,10 @@
+/* Check if the OS supports executing AVX instructions.  */
+
+static int
+avx_os_support (void)
+{
+  unsigned int eax, edx;
+
+  __asm__ ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0));
+  return (eax & 6) == 6;
+}
index de633336157173760db8b2f1364228850dadf415..3eb84b86ddf2f9fb62b2a8c300b9727d090fc2b0 100644 (file)
@@ -3,6 +3,7 @@
 #endif
 #include <stdlib.h>
 #include "cpuid.h"
+#include "avx-os-support.h"
 
 static void pclmul_avx_test (void);
 
@@ -15,7 +16,9 @@ main ()
     return 0;
 
   /* Run PCLMUL + AVX test only if host has PCLMUL + AVX support.  */
-  if ((ecx & (bit_AVX | bit_PCLMUL)) == (bit_AVX | bit_PCLMUL))
+  if (((ecx & (bit_AVX | bit_OSXSAVE | bit_PCLMUL))
+       == (bit_AVX | bit_OSXSAVE | bit_PCLMUL))
+      && avx_os_support ())
     {
       pclmul_avx_test ();
 #ifdef DEBUG