On Tue, Jul 07, 2015 at 12:42:01PM +0200, Paolo Bonzini wrote: > ABM is only implemented as a single instruction set by AMD; all AMD > processors support both instructions or neither. Intel considers POPCNT > as part of SSE4.2, and LZCNT as part of BMI1, but Intel also uses AMD's > ABM flag to indicate support for both POPCNT and LZCNT. It has to be > added to Haswell and Broadwell because Haswell, by adding LZCNT, has > completed the ABM. > > Tested with "qemu-kvm -cpu Haswell-noTSX,enforce" (and also with older > machine types) on an Haswell-EP machine. > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > hw/i386/pc_piix.c | 4 ++++ > hw/i386/pc_q35.c | 4 ++++ > target-i386/cpu.c | 8 ++++---- > 3 files changed, 12 insertions(+), 4 deletions(-) > > diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c > index 56cdcb9..d9e9987 100644 > --- a/hw/i386/pc_piix.c > +++ b/hw/i386/pc_piix.c > @@ -312,6 +312,10 @@ static void pc_compat_2_3(MachineState *machine) > if (kvm_enabled()) { > pcms->smm = ON_OFF_AUTO_OFF; > } > + x86_cpu_compat_set_features("Haswell", FEAT_8000_0001_ECX, 0, > CPUID_EXT3_ABM); > + x86_cpu_compat_set_features("Haswell-noTSX", FEAT_8000_0001_ECX, 0, > CPUID_EXT3_ABM); > + x86_cpu_compat_set_features("Broadwell", FEAT_8000_0001_ECX, 0, > CPUID_EXT3_ABM); > + x86_cpu_compat_set_features("Broadwell-noTSX", FEAT_8000_0001_ECX, 0, > CPUID_EXT3_ABM);
x86_cpu_compat_set_features() is not necessary anymore, please use PC_COMPAT_2_3 to disable ABM. -- Eduardo