OSDN Git Service

* gcc.target/i386/avx-os-support.h: New.
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 Jul 2011 15:39:58 +0000 (15:39 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 Jul 2011 15:39:58 +0000 (15:39 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@176829 138bc75d-0d04-0410-961f-82ee72b054a4

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 a90a639..9beb225 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-27  Kai Tietz  <ktietz@redhat.com>
 
        * gcc.target/i386/aggregate-ret3.c: New test.
index 36a038e..f2a4ead 100644 (file)
@@ -3,6 +3,7 @@
 #endif
 #include <stdlib.h>
 #include "cpuid.h"
+#include "avx-os-support.h"
 
 static void aes_avx_test (void);
 
@@ -22,8 +23,9 @@ main ()
     return 0;
 
   /* Run AES + AVX test only if host has AES + AVX support.  */
-  if ((ecx & (bit_AVX | bit_OSXSAVE | bit_AES))
-      == (bit_AVX | bit_OSXSAVE | bit_AES))
+  if (((ecx & (bit_AVX | bit_OSXSAVE | bit_AES))
+       == (bit_AVX | bit_OSXSAVE | bit_AES))
+      && avx_os_support ())
     {
       do_test ();
 #ifdef DEBUG
index b15584a..7ddca9d 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);
 
@@ -20,7 +21,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 ())
     {
       do_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 750e25c..5eed2e2 100644 (file)
@@ -3,6 +3,7 @@
 #endif
 #include <stdlib.h>
 #include "cpuid.h"
+#include "avx-os-support.h"
 
 static void pclmul_avx_test (void);
 
@@ -22,8 +23,9 @@ main ()
     return 0;
 
   /* Run PCLMUL + AVX test only if host has PCLMUL + AVX support.  */
-  if ((ecx & (bit_AVX | bit_OSXSAVE | bit_PCLMUL))
-      == (bit_AVX | bit_OSXSAVE | bit_PCLMUL))
+  if (((ecx & (bit_AVX | bit_OSXSAVE | bit_PCLMUL))
+       == (bit_AVX | bit_OSXSAVE | bit_PCLMUL))
+      && avx_os_support ())
     {
       do_test ();
 #ifdef DEBUG