KVM: x86 emulator: fix byte-sized MOVZX/MOVSX
Commit 2adb5ad9fe
removed ByteOp from MOVZX/MOVSX, replacing them by
SrcMem8, but neglected to fix the dependency in the emulation code
on ByteOp. This caused the instruction not to have any effect in
some circumstances.
Fix by replacing the check for ByteOp with the equivalent src.op_bytes == 1.
Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
Родитель
2dd7caa092
Коммит
361cad2b50
|
@ -4517,12 +4517,12 @@ twobyte_insn:
|
|||
break;
|
||||
case 0xb6 ... 0xb7: /* movzx */
|
||||
ctxt->dst.bytes = ctxt->op_bytes;
|
||||
ctxt->dst.val = (ctxt->d & ByteOp) ? (u8) ctxt->src.val
|
||||
ctxt->dst.val = (ctxt->src.bytes == 1) ? (u8) ctxt->src.val
|
||||
: (u16) ctxt->src.val;
|
||||
break;
|
||||
case 0xbe ... 0xbf: /* movsx */
|
||||
ctxt->dst.bytes = ctxt->op_bytes;
|
||||
ctxt->dst.val = (ctxt->d & ByteOp) ? (s8) ctxt->src.val :
|
||||
ctxt->dst.val = (ctxt->src.bytes == 1) ? (s8) ctxt->src.val :
|
||||
(s16) ctxt->src.val;
|
||||
break;
|
||||
case 0xc0 ... 0xc1: /* xadd */
|
||||
|
|
Загрузка…
Ссылка в новой задаче