@@ -143,6 +143,7 @@ int ff_get_cpu_flags_x86(void)
#endif /* HAVE_SSE */
}
if (max_std_level >= 7) {
+ int xcr0_lo = 0, xcr0_hi = 0;
cpuid(7, eax, ebx, ecx, edx);
#if HAVE_AVX2
if ((rval & AV_CPU_FLAG_AVX) && (ebx & 0x00000020))
@@ -154,6 +155,14 @@ int ff_get_cpu_flags_x86(void)
if (ebx & 0x00000100)
rval |= AV_CPU_FLAG_BMI2;
}
+#if HAVE_AVX512 /* F, CD, BW, DQ, VL */
+ xgetbv(0, xcr0_lo, xcr0_hi);
+ if ((xcr0_lo & 0xe6) == 0xe6) {
+ if ((ebx & 0xd0030000) == 0xd0030000)
+ rval |= AV_CPU_FLAG_AVX512;
+
+ }
+#endif
}
cpuid(0x80000000, max_ext_level, ebx, ecx, edx);