Skip to content

Commit

Permalink
x86 emulator: fix parity calculation for AAD instruction
Browse files Browse the repository at this point in the history
Reported-by: Paolo Bonzini <pbonzini@redhat.com>
Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Gleb Natapov <gleb@redhat.com>
  • Loading branch information
Gleb Natapov committed Feb 13, 2013
1 parent 7a905b1 commit f583c29
Showing 1 changed file with 5 additions and 8 deletions.
13 changes: 5 additions & 8 deletions arch/x86/kvm/emulate.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down

0 comments on commit f583c29

Please sign in to comment.