|
From: <sv...@va...> - 2013-10-18 13:11:20
|
Author: mjw
Date: Fri Oct 18 13:11:05 2013
New Revision: 13656
Log:
Don't report BMI support when AVX support is missing.
Bug #326113. This is a bit conservative, but it is what the linux kernel
also seems to be doing. If AVX support is missing (because the OS doesn't
save the wide registers), then also don't report supporting BMI.
Modified:
trunk/coregrind/m_machine.c
Modified: trunk/coregrind/m_machine.c
==============================================================================
--- trunk/coregrind/m_machine.c (original)
+++ trunk/coregrind/m_machine.c Fri Oct 18 13:11:05 2013
@@ -868,13 +868,13 @@
have_rdtscp = (edx & (1<<27)) != 0; /* True => have RDTSVCP */
}
- /* Check for BMI1 and AVX2. */
+ /* Check for BMI1 and AVX2. If we have AVX1 (plus OS support). */
have_bmi = False;
have_avx2 = False;
- if (max_basic >= 7) {
+ if (have_avx && max_basic >= 7) {
VG_(cpuid)(7, 0, &eax, &ebx, &ecx, &edx);
have_bmi = (ebx & (1<<3)) != 0; /* True => have BMI1 */
- have_avx2 = have_avx && ((ebx & (1<<5)) != 0); /* True => have AVX2 */
+ have_avx2 = (ebx & (1<<5)) != 0; /* True => have AVX2 */
}
va = VexArchAMD64;
|