avx-os-support.h (XCR_XFEATURE_ENABLED_MASK): New.
authorUros Bizjak <uros@gcc.gnu.org>
Wed, 6 Jun 2012 18:11:39 +0000 (20:11 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Wed, 6 Jun 2012 18:11:39 +0000 (20:11 +0200)
* gcc.target/i386/avx-os-support.h (XCR_XFEATURE_ENABLED_MASK): New.
(XSTATE_FP): Ditto.
(XSTATE_SSE): Ditto.
(XSTATE_YMM): Ditto.
(avx_os_support): Use new defines.

From-SVN: r188275

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/avx-os-support.h

index 73a1de65da5fd0bbae9ebf81e710ffd1748bdfe9..0b681b46bf31f2cfa8926ecc6d42a35d5611ccb8 100644 (file)
@@ -1,3 +1,11 @@
+2012-06-06  Uros Bizjak  <ubizjak@gmail.com>
+
+       * gcc.target/i386/avx-os-support.h (XCR_XFEATURE_ENABLED_MASK): New.
+       (XSTATE_FP): Ditto.
+       (XSTATE_SSE): Ditto.
+       (XSTATE_YMM): Ditto.
+       (avx_os_support): Use new defines.
+
 2012-06-06  Richard Guenther  <rguenther@suse.de>
 
        PR testsuite/32380
        arm32 to targets.
        * gcc.dg/vect/slp-perm-8.c (main): Prevent vectorization
        of the initialization loop.
-        (dg-final): Adjust the expected number of vectorized loops depending
+       (dg-final): Adjust the expected number of vectorized loops depending
        on vect_char_mult target selector.
 
 2012-05-31  Hans-Peter Nilsson  <hp@axis.com>
        * gcc.target/cris/peep2-andu2.c: Tweak expected assembly
        code to match current output and cover new peephole2 pattern.
 
-2012-04-27   Ollie Wild  <aaw@google.com>
+2012-04-27  Ollie Wild  <aaw@google.com>
 
        * g++.dg/cpp0x/Wliteral-suffix.c: New test.
 
index 21d332f7d3d8e018e9d4969ec72584456b56c23e..fb1ce7562d324c7a247599dd39d764c9d7b477d3 100644 (file)
@@ -1,10 +1,18 @@
 /* Check if the OS supports executing AVX instructions.  */
 
+#define XCR_XFEATURE_ENABLED_MASK      0x0
+
+#define XSTATE_FP      0x1
+#define XSTATE_SSE     0x2
+#define XSTATE_YMM     0x4
+
 static int
 avx_os_support (void)
 {
   unsigned int eax, edx;
+  unsigned int ecx = XCR_XFEATURE_ENABLED_MASK;
+
+  __asm__ ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (ecx));
 
-  __asm__ ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0));
-  return (eax & 6) == 6;
+  return (eax & (XSTATE_SSE | XSTATE_YMM)) == (XSTATE_SSE | XSTATE_YMM);
 }