>> Hmm, now all avx512 tests SIGILL when testing with -m32:
>>
>> Dump of assembler code for function __get_cpuid_count:
>> => 0x08049500 <+0>:     kmovd  %eax,%k2
>>    0x08049504 <+4>:     kmovd  %edx,%k1
>>    0x08049508 <+8>:     pushf
>>    0x08049509 <+9>:     pushf
>>    0x0804950a <+10>:    pop    %eax
>>    0x0804950b <+11>:    mov    %eax,%edx
>>
>> looks like __get_cpuid_count is no longer inlined but AVX512 is in
>> effect for it.
>>
>> Maybe use #pragma GCC target around the includes instead?
>
>
> Can the built-in cpu supports be used?

Changed, and verified on both AVX512 and non-AVX512 machine.

Push to trunk.
gcc/testsuite/ChangeLog:

        PR target/115748
        * gcc.target/i386/avx512-check.h: Use __builtin_cpu_support
        instead of __get_cpuid_count.
---
 gcc/testsuite/gcc.target/i386/avx512-check.h | 46 +++++++++-----------
 1 file changed, 20 insertions(+), 26 deletions(-)

diff --git a/gcc/testsuite/gcc.target/i386/avx512-check.h 
b/gcc/testsuite/gcc.target/i386/avx512-check.h
index 71858a33dac..8ec1a7ccbae 100644
--- a/gcc/testsuite/gcc.target/i386/avx512-check.h
+++ b/gcc/testsuite/gcc.target/i386/avx512-check.h
@@ -38,69 +38,63 @@ __attribute__((noipa,target("no-avx")))
 int
 avx512_runtime_support_p ()
 {
-  unsigned int eax, ebx, ecx, edx;
-
-  if (!__get_cpuid_count (7, 0, &eax, &ebx, &ecx, &edx))
-    return 0;
-
   /* Run AVX512 test only if host has ISA support.  */
-  if (check_osxsave ()
-      && (ebx & bit_AVX512F)
+  if (__builtin_cpu_supports ("avx512f")
 #ifdef AVX512VL
-      && (ebx & bit_AVX512VL)
+      && __builtin_cpu_supports ("avx512vl")
 #endif
 #ifdef AVX512ER
-      && (ebx & bit_AVX512ER)
+      && __builtin_cpu_supports ("avx512er")
 #endif
 #ifdef AVX512CD
-      && (ebx & bit_AVX512CD)
+      && __builtin_cpu_supports ("avx512cd")
 #endif
 #ifdef AVX512DQ
-      && (ebx & bit_AVX512DQ)
+      && __builtin_cpu_supports ("avx512dq")
 #endif
 #ifdef AVX512BW
-      && (ebx & bit_AVX512BW)
+      && __builtin_cpu_supports ("avx512bw")
 #endif
 #ifdef AVX512IFMA
-      && (ebx & bit_AVX512IFMA)
+      && __builtin_cpu_supports ("avx512ifma")
 #endif
 #ifdef AVX512VBMI
-      && (ecx & bit_AVX512VBMI)
+      && __builtin_cpu_supports ("avx512vbmi")
 #endif
 #ifdef AVX5124FMAPS
-      && (edx & bit_AVX5124FMAPS)
+      && __builtin_cpu_supports ("avx5124fmaps")
 #endif
 #ifdef AVX5124VNNIW
-      && (edx & bit_AVX5124VNNIW)
+      && __builtin_cpu_supports ("avx5124vnniw")
 #endif
 #ifdef AVX512VPOPCNTDQ
-      && (ecx & bit_AVX512VPOPCNTDQ)
+      && __builtin_cpu_supports ("avx512vpopcntdq")
 #endif
 #ifdef AVX512BITALG
-      && (ecx & bit_AVX512BITALG)
+      && __builtin_cpu_supports ("avx512bitalg")
 #endif
 #ifdef GFNI
-      && (ecx & bit_GFNI)
+      && __builtin_cpu_supports ("gfni")
 #endif
 #ifdef AVX512VBMI2
-      && (ecx & bit_AVX512VBMI2)
+      && __builtin_cpu_supports ("avx512vbmi2")
 #endif
 #ifdef AVX512VNNI
-      && (ecx & bit_AVX512VNNI)
+      && __builtin_cpu_supports ("avx512vnni")
 #endif
 #ifdef AVX512FP16
-      && (edx & bit_AVX512FP16)
+      && __builtin_cpu_supports ("avx512fp16")
 #endif
 #ifdef VAES
-      && (ecx & bit_VAES)
+      && __builtin_cpu_supports ("vaes")
 #endif
 #ifdef VPCLMULQDQ
-      && (ecx & bit_VPCLMULQDQ)
+      && __builtin_cpu_supports ("vpclmulqdq")
 #endif
 #ifdef AVX512VP2INTERSECT
-      && (edx & bit_AVX512VP2INTERSECT)
+      && __builtin_cpu_supports ("avx512vp2intersect")
 #endif
-      && avx512f_os_support ())
+      )
     {
       return 1;
     }
-- 
2.31.1

Reply via email to