Commit 4902606b authored by James Zern's avatar James Zern Committed by Gerrit Code Review
Browse files

Merge "x86_simd_caps: check max cpuid before testing AVX2"

parents 2be50a1c abff8b24
......@@ -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;
}
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment