diff -uNr valgrind-3.6.0.orig/VEX/priv/guest_amd64_toIR.c valgrind-3.6.0/VEX/priv/guest_amd64_toIR.c
--- valgrind-3.6.0.orig/VEX/priv/guest_amd64_toIR.c 2011-01-17 20:35:34.380376775 +0100
+++ valgrind-3.6.0/VEX/priv/guest_amd64_toIR.c 2011-01-17 20:36:00.891571709 +0100
-@@ -19903,7 +19903,11 @@
- HChar* fName = NULL;
+@@ -21165,6 +21165,10 @@ Long dis_ESC_0F (
+ const HChar* fName = NULL;
void* fAddr = NULL;
if (haveF2orF3(pfx)) goto decode_failure;
-- if (archinfo->hwcaps == (VEX_HWCAPS_AMD64_SSE3
+ if (vex_control.iropt_native_cpuid) {
+ fName = "amd64g_dirtyhelper_CPUID_native";
+ fAddr = &amd64g_dirtyhelper_CPUID_native;
-+ }
-+ else if (archinfo->hwcaps == (VEX_HWCAPS_AMD64_SSE3
- |VEX_HWCAPS_AMD64_CX16
- |VEX_HWCAPS_AMD64_AVX)) {
- fName = "amd64g_dirtyhelper_CPUID_avx_and_cx16";
++ } else
+ /* 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) &&
diff -uNr valgrind-3.6.0.orig/VEX/pub/libvex.h valgrind-3.6.0/VEX/pub/libvex.h
--- valgrind-3.6.0.orig/VEX/pub/libvex.h 2010-10-20 22:19:52.000000000 +0200
+++ valgrind-3.6.0/VEX/pub/libvex.h 2011-01-17 20:41:02.906490947 +0100