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