x86 emulator: fix parity calculation for AAD instruction
PATCH 1/1 x86 emulator: fix parity calculation for AAD instruction
Reported-by Paolo Bonzini <[email protected]>
Suggested-by Paolo Bonzini <[email protected]>
Signed-off-by Gleb Natapov <[email protected]>
arch/x86/kvm/emulate.c +5 -8
@@ -2995,14 +2995,11 @@ static int em_aad(struct x86_emulate_ctxt *ctxt) ctxt->dst.val = (ctxt->dst.val &0xffff0000 ) | al; - ctxt->eflags &= ~(X86_EFLAGS_PF |X86_EFLAGS_SF |X86_EFLAGS_ZF ); - -if (!al) - ctxt->eflags |=X86_EFLAGS_ZF ; -if (!(al &1 )) - ctxt->eflags |=X86_EFLAGS_PF ; -if (al &0x80 ) - ctxt->eflags |=X86_EFLAGS_SF ; +/* Set PF, ZF, SF */ + ctxt->src.type =OP_IMM ; + ctxt->src.val =0 ; + ctxt->src.bytes =1 ; +fastop (ctxt, em_or);return X86EMUL_CONTINUE ; }
--
Gleb.
Il 13/02/2013 16:50, Gleb Natapov ha scritto:
Quoted 29 lines
Reported-by Paolo Bonzini <[email protected]>Suggested-by Paolo Bonzini <[email protected]>Signed-off-by Gleb Natapov <[email protected]>arch/x86/kvm/emulate.c +5
-9@@ -2995,14 +2995,11 @@ static int em_aad(struct x86_emulate_ctxt *ctxt) ctxt->dst.val = (ctxt->dst.val &0xffff0000 ) | al; - ctxt->eflags &= ~(X86_EFLAGS_PF |X86_EFLAGS_SF |X86_EFLAGS_ZF ); - -if (!al) - ctxt->eflags |=X86_EFLAGS_ZF ; -if (!(al &1 )) - ctxt->eflags |=X86_EFLAGS_PF ; -if (al &0x80 ) - ctxt->eflags |=X86_EFLAGS_SF ; +/* Set PF, ZF, SF */ + ctxt->src.type =OP_IMM ; + ctxt->src.val =0 ; + ctxt->src.bytes =1 ; +fastop (ctxt, em_or);return X86EMUL_CONTINUE ; } --
Quoted 2 lines
Gleb.
Reviewed-by Paolo Bonzini <[email protected]>