| Index: source/libvpx/vpx_ports/x86.h
|
| diff --git a/source/libvpx/vpx_ports/x86.h b/source/libvpx/vpx_ports/x86.h
|
| index ae349fb84c631ea40a5cbbd084938fd56ef113f4..7d93710c4b0381ae0199172d2c57fa4e6232ce71 100644
|
| --- a/source/libvpx/vpx_ports/x86.h
|
| +++ b/source/libvpx/vpx_ports/x86.h
|
| @@ -152,7 +152,7 @@ static INLINE int
|
| x86_simd_caps(void) {
|
| unsigned int flags = 0;
|
| unsigned int mask = ~0;
|
| - unsigned int reg_eax, reg_ebx, reg_ecx, reg_edx;
|
| + unsigned int max_cpuid_val, reg_eax, reg_ebx, reg_ecx, reg_edx;
|
| char *env;
|
| (void)reg_ebx;
|
|
|
| @@ -168,9 +168,9 @@ x86_simd_caps(void) {
|
| mask = strtol(env, NULL, 0);
|
|
|
| /* Ensure that the CPUID instruction supports extended features */
|
| - cpuid(0, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
|
| + cpuid(0, 0, max_cpuid_val, reg_ebx, reg_ecx, reg_edx);
|
|
|
| - if (reg_eax < 1)
|
| + if (max_cpuid_val < 1)
|
| return 0;
|
|
|
| /* Get the standard feature flags */
|
| @@ -193,10 +193,12 @@ x86_simd_caps(void) {
|
| if ((xgetbv() & 0x6) == 0x6) {
|
| flags |= HAS_AVX;
|
|
|
| - /* Get the leaf 7 feature flags. Needed to check for AVX2 support */
|
| - cpuid(7, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
|
| + if (max_cpuid_val >= 7) {
|
| + /* Get the leaf 7 feature flags. Needed to check for AVX2 support */
|
| + cpuid(7, 0, reg_eax, reg_ebx, reg_ecx, reg_edx);
|
|
|
| - if (reg_ebx & BIT(5)) flags |= HAS_AVX2;
|
| + if (reg_ebx & BIT(5)) flags |= HAS_AVX2;
|
| + }
|
| }
|
| }
|
|
|
|
|