KVM: emulate: move around some checks
The only purpose of this patch is to make the next patch simpler to review. No semantic change. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
6addfc4299
commit
e24186e097
|
@ -4388,12 +4388,15 @@ done_prefixes:
|
||||||
ctxt->d |= opcode.flags;
|
ctxt->d |= opcode.flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Unrecognised? */
|
||||||
|
if (ctxt->d == 0)
|
||||||
|
return EMULATION_FAILED;
|
||||||
|
|
||||||
ctxt->execute = opcode.u.execute;
|
ctxt->execute = opcode.u.execute;
|
||||||
ctxt->check_perm = opcode.check_perm;
|
ctxt->check_perm = opcode.check_perm;
|
||||||
ctxt->intercept = opcode.intercept;
|
ctxt->intercept = opcode.intercept;
|
||||||
|
|
||||||
/* Unrecognised? */
|
if (ctxt->d & NotImpl)
|
||||||
if (ctxt->d == 0 || (ctxt->d & NotImpl))
|
|
||||||
return EMULATION_FAILED;
|
return EMULATION_FAILED;
|
||||||
|
|
||||||
if (!(ctxt->d & EmulateOnUD) && ctxt->ud)
|
if (!(ctxt->d & EmulateOnUD) && ctxt->ud)
|
||||||
|
@ -4535,12 +4538,6 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
|
||||||
|
|
||||||
ctxt->mem_read.pos = 0;
|
ctxt->mem_read.pos = 0;
|
||||||
|
|
||||||
if ((ctxt->mode == X86EMUL_MODE_PROT64 && (ctxt->d & No64)) ||
|
|
||||||
(ctxt->d & Undefined)) {
|
|
||||||
rc = emulate_ud(ctxt);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* LOCK prefix is allowed only with some instructions */
|
/* LOCK prefix is allowed only with some instructions */
|
||||||
if (ctxt->lock_prefix && (!(ctxt->d & Lock) || ctxt->dst.type != OP_MEM)) {
|
if (ctxt->lock_prefix && (!(ctxt->d & Lock) || ctxt->dst.type != OP_MEM)) {
|
||||||
rc = emulate_ud(ctxt);
|
rc = emulate_ud(ctxt);
|
||||||
|
@ -4552,6 +4549,12 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((ctxt->mode == X86EMUL_MODE_PROT64 && (ctxt->d & No64)) ||
|
||||||
|
(ctxt->d & Undefined)) {
|
||||||
|
rc = emulate_ud(ctxt);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
if (((ctxt->d & (Sse|Mmx)) && ((ops->get_cr(ctxt, 0) & X86_CR0_EM)))
|
if (((ctxt->d & (Sse|Mmx)) && ((ops->get_cr(ctxt, 0) & X86_CR0_EM)))
|
||||||
|| ((ctxt->d & Sse) && !(ops->get_cr(ctxt, 4) & X86_CR4_OSFXSR))) {
|
|| ((ctxt->d & Sse) && !(ops->get_cr(ctxt, 4) & X86_CR4_OSFXSR))) {
|
||||||
rc = emulate_ud(ctxt);
|
rc = emulate_ud(ctxt);
|
||||||
|
|
Loading…
Reference in New Issue