|
From: <sv...@va...> - 2013-09-13 13:30:58
|
Author: mjw
Date: Fri Sep 13 13:30:45 2013
New Revision: 2761
Log:
Bug 323893 - SSE3 not available on amd cpus in valgrind.
Check minimum hardware capabilities, not exact matches to prevent
downgrading to baseline if the hardware has more capabilities than
we expect.
Note that this is still not exactly correct. CPUID should depend on
VEX capabilities, not on underlying CPU, see bug 324882.
Modified:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c
==============================================================================
--- trunk/priv/guest_amd64_toIR.c (original)
+++ trunk/priv/guest_amd64_toIR.c Fri Sep 13 13:30:45 2013
@@ -20937,15 +20937,17 @@
const HChar* fName = NULL;
void* fAddr = NULL;
if (haveF2orF3(pfx)) goto decode_failure;
- if (archinfo->hwcaps == (VEX_HWCAPS_AMD64_SSE3
- |VEX_HWCAPS_AMD64_CX16
- |VEX_HWCAPS_AMD64_AVX)) {
+ /* This isn't entirely correct, CPUID should depend on the VEX
+ capabilities, not on the underlying CPU. See bug #324882. */
+ if ((archinfo->hwcaps & VEX_HWCAPS_AMD64_SSE3) &&
+ (archinfo->hwcaps & VEX_HWCAPS_AMD64_CX16) &&
+ (archinfo->hwcaps & VEX_HWCAPS_AMD64_AVX)) {
fName = "amd64g_dirtyhelper_CPUID_avx_and_cx16";
fAddr = &amd64g_dirtyhelper_CPUID_avx_and_cx16;
/* This is a Core-i5-2300-like machine */
}
- else if (archinfo->hwcaps == (VEX_HWCAPS_AMD64_SSE3
- |VEX_HWCAPS_AMD64_CX16)) {
+ else if ((archinfo->hwcaps & VEX_HWCAPS_AMD64_SSE3) &&
+ (archinfo->hwcaps & VEX_HWCAPS_AMD64_CX16)) {
fName = "amd64g_dirtyhelper_CPUID_sse42_and_cx16";
fAddr = &amd64g_dirtyhelper_CPUID_sse42_and_cx16;
/* This is a Core-i5-670-like machine */
|