On Wed, Jul 3, 2024 at 9:25 AM liuhongt <hongtao....@intel.com> wrote: > > The patch can avoid SIGILL on non-AVX512 machine due to kmovd is > generated in dynamic check. > > Committed as an obvious fix.
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? > gcc/testsuite/ChangeLog: > > PR target/115748 > * gcc.target/i386/avx512-check.h: Move runtime check into a > separate function and guard it with target ("no-avx"). > --- > gcc/testsuite/gcc.target/i386/avx512-check.h | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/gcc/testsuite/gcc.target/i386/avx512-check.h > b/gcc/testsuite/gcc.target/i386/avx512-check.h > index 0ad9064f637..71858a33dac 100644 > --- a/gcc/testsuite/gcc.target/i386/avx512-check.h > +++ b/gcc/testsuite/gcc.target/i386/avx512-check.h > @@ -34,8 +34,9 @@ check_osxsave (void) > return (ecx & bit_OSXSAVE) != 0; > } > > +__attribute__((noipa,target("no-avx"))) > int > -main () > +avx512_runtime_support_p () > { > unsigned int eax, ebx, ecx, edx; > > @@ -100,6 +101,17 @@ main () > && (edx & bit_AVX512VP2INTERSECT) > #endif > && avx512f_os_support ()) > + { > + return 1; > + } > + > + return 0; > +} > + > +int > +main () > +{ > + if (avx512_runtime_support_p ()) > { > DO_TEST (); > #ifdef DEBUG > -- > 2.31.1 >