mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-11-30 14:40:32 +00:00
avutil: detect when AVX-512 is available
This commit is contained in:
parent
8b81eabe57
commit
4783a01c11
@ -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 max_std_level, max_ext_level, std_caps = 0, ext_caps = 0;
|
||||||
int family = 0, model = 0;
|
int family = 0, model = 0;
|
||||||
union { int i[3]; char c[12]; } vendor;
|
union { int i[3]; char c[12]; } vendor;
|
||||||
|
int xcr0_lo = 0, xcr0_hi = 0;
|
||||||
|
|
||||||
if (!cpuid_test())
|
if (!cpuid_test())
|
||||||
return 0; /* CPUID not supported */
|
return 0; /* CPUID not supported */
|
||||||
@ -132,8 +133,8 @@ int ff_get_cpu_flags_x86(void)
|
|||||||
/* Check OXSAVE and AVX bits */
|
/* Check OXSAVE and AVX bits */
|
||||||
if ((ecx & 0x18000000) == 0x18000000) {
|
if ((ecx & 0x18000000) == 0x18000000) {
|
||||||
/* Check for OS support */
|
/* Check for OS support */
|
||||||
xgetbv(0, eax, edx);
|
xgetbv(0, xcr0_lo, xcr0_hi);
|
||||||
if ((eax & 0x6) == 0x6) {
|
if ((xcr0_lo & 0x6) == 0x6) {
|
||||||
rval |= AV_CPU_FLAG_AVX;
|
rval |= AV_CPU_FLAG_AVX;
|
||||||
if (ecx & 0x00001000)
|
if (ecx & 0x00001000)
|
||||||
rval |= AV_CPU_FLAG_FMA3;
|
rval |= AV_CPU_FLAG_FMA3;
|
||||||
@ -147,6 +148,13 @@ int ff_get_cpu_flags_x86(void)
|
|||||||
#if HAVE_AVX2
|
#if HAVE_AVX2
|
||||||
if ((rval & AV_CPU_FLAG_AVX) && (ebx & 0x00000020))
|
if ((rval & AV_CPU_FLAG_AVX) && (ebx & 0x00000020))
|
||||||
rval |= AV_CPU_FLAG_AVX2;
|
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 */
|
#endif /* HAVE_AVX2 */
|
||||||
/* BMI1/2 don't need OS support */
|
/* BMI1/2 don't need OS support */
|
||||||
if (ebx & 0x00000008) {
|
if (ebx & 0x00000008) {
|
||||||
|
Loading…
Reference in New Issue
Block a user