Skip to content

Commit aa21cb5

Browse files
authored
Merge pull request #2960 from thrasibule/avx2_detection
fix avx2 detection
2 parents 9349dcd + 1f564d7 commit aa21cb5

File tree

2 files changed

+14
-14
lines changed

2 files changed

+14
-14
lines changed

cpuid_x86.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ int support_avx(){
202202
if ((ecx & (1 << 28)) != 0 && (ecx & (1 << 27)) != 0 && (ecx & (1 << 26)) != 0){
203203
xgetbv(0, &eax, &edx);
204204
if((eax & 6) == 6){
205-
ret=1; //OS support AVX
205+
ret=1; //OS supports saving xmm and ymm registers (6 = (1<<1) | (1<<2))
206206
}
207207
}
208208
return ret;
@@ -219,8 +219,8 @@ int support_avx2(){
219219
if (!support_avx())
220220
return 0;
221221
cpuid(7, &eax, &ebx, &ecx, &edx);
222-
if((ebx & (1<<7)) != 0)
223-
ret=1; //OS supports AVX2
222+
if((ebx & (1<<5)) != 0)
223+
ret=1; //CPU supports AVX2
224224
return ret;
225225
#else
226226
return 0;
@@ -235,14 +235,14 @@ int support_avx512(){
235235
if (!support_avx())
236236
return 0;
237237
cpuid(7, &eax, &ebx, &ecx, &edx);
238-
if((ebx & 32) != 32){
239-
ret=0; //OS does not even support AVX2
238+
if((ebx & (1<<5)) == 0){
239+
ret=0; //cpu does not have avx2 flag
240240
}
241-
if((ebx & (1<<31)) != 0){
241+
if((ebx & (1<<31)) != 0){ //AVX512VL flag
242242
xgetbv(0, &eax, &edx);
243243
if((eax & 0xe0) == 0xe0)
244-
ret=1; //OS supports AVX512VL
245-
}
244+
ret=1; //OS supports saving zmm registers
245+
}
246246
return ret;
247247
#else
248248
return 0;

driver/others/dynamic.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -330,8 +330,8 @@ int support_avx2(){
330330
if (!support_avx())
331331
return 0;
332332
cpuid(7, &eax, &ebx, &ecx, &edx);
333-
if((ebx & (1<<7)) != 0)
334-
ret=1; //OS supports AVX2
333+
if((ebx & (1<<5)) != 0)
334+
ret=1; //AVX2 flag is set
335335
return ret;
336336
#else
337337
return 0;
@@ -346,13 +346,13 @@ int support_avx512(){
346346
if (!support_avx())
347347
return 0;
348348
cpuid(7, &eax, &ebx, &ecx, &edx);
349-
if((ebx & (1<<7)) == 0){
350-
ret=0; //OS does not even support AVX2
349+
if((ebx & (1<<5)) == 0){
350+
ret=0; //cpu does not have avx2 flag
351351
}
352-
if((ebx & (1u<<31)) != 0){
352+
if((ebx & (1<<31)) != 0){ //AVX512VL flag is set
353353
xgetbv(0, &eax, &edx);
354354
if((eax & 0xe0) == 0xe0)
355-
ret=1; //OS supports AVX512VL
355+
ret=1; //OS supports saving zmm register
356356
}
357357
return ret;
358358
#else

0 commit comments

Comments
 (0)