Skip to content

Commit

Permalink
avutil: detect when AVX-512 is available
Browse files Browse the repository at this point in the history
  • Loading branch information
JDarnley authored and James Darnley committed Dec 24, 2017
1 parent 8b81eab commit 4783a01
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions libavutil/x86/cpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ int ff_get_cpu_flags_x86(void)
int max_std_level, max_ext_level, std_caps = 0, ext_caps = 0;
int family = 0, model = 0;
union { int i[3]; char c[12]; } vendor;
int xcr0_lo = 0, xcr0_hi = 0;

if (!cpuid_test())
return 0; /* CPUID not supported */
Expand Down Expand Up @@ -132,8 +133,8 @@ int ff_get_cpu_flags_x86(void)
/* Check OXSAVE and AVX bits */
if ((ecx & 0x18000000) == 0x18000000) {
/* Check for OS support */
xgetbv(0, eax, edx);
if ((eax & 0x6) == 0x6) {
xgetbv(0, xcr0_lo, xcr0_hi);
if ((xcr0_lo & 0x6) == 0x6) {
rval |= AV_CPU_FLAG_AVX;
if (ecx & 0x00001000)
rval |= AV_CPU_FLAG_FMA3;
Expand All @@ -147,6 +148,13 @@ int ff_get_cpu_flags_x86(void)
#if HAVE_AVX2
if ((rval & AV_CPU_FLAG_AVX) && (ebx & 0x00000020))
rval |= AV_CPU_FLAG_AVX2;
#if HAVE_AVX512 /* F, CD, BW, DQ, VL */
if ((xcr0_lo & 0xe0) == 0xe0) { /* OPMASK/ZMM state */
if ((rval & AV_CPU_FLAG_AVX2) && (ebx & 0xd0030000) == 0xd0030000)
rval |= AV_CPU_FLAG_AVX512;

}
#endif /* HAVE_AVX512 */
#endif /* HAVE_AVX2 */
/* BMI1/2 don't need OS support */
if (ebx & 0x00000008) {
Expand Down

0 comments on commit 4783a01

Please sign in to comment.