Commit 90e0a28f authored by Guillaume Thouvenin's avatar Guillaume Thouvenin Committed by Avi Kivity

KVM: x86 emulator: Make a distinction between repeat prefixes F3 and F2

cmps and scas instructions accept repeat prefixes F3 and F2. So in
order to emulate those prefixed instructions we need to be able to know
if prefixes are REP/REPE/REPZ or REPNE/REPNZ. Currently kvm doesn't make
this distinction. This patch introduces this distinction.
Signed-off-by: default avatarGuillaume Thouvenin <guillaume.thouvenin@ext.bull.net>
Signed-off-by: default avatarAvi Kivity <avi@qumranet.com>
parent e9f85cde
...@@ -824,8 +824,10 @@ x86_decode_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops) ...@@ -824,8 +824,10 @@ x86_decode_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops)
c->lock_prefix = 1; c->lock_prefix = 1;
break; break;
case 0xf2: /* REPNE/REPNZ */ case 0xf2: /* REPNE/REPNZ */
c->rep_prefix = REPNE_PREFIX;
break;
case 0xf3: /* REP/REPE/REPZ */ case 0xf3: /* REP/REPE/REPZ */
c->rep_prefix = 1; c->rep_prefix = REPE_PREFIX;
break; break;
default: default:
goto done_prefixes; goto done_prefixes;
......
...@@ -162,6 +162,10 @@ struct x86_emulate_ctxt { ...@@ -162,6 +162,10 @@ struct x86_emulate_ctxt {
struct decode_cache decode; struct decode_cache decode;
}; };
/* Repeat String Operation Prefix */
#define REPE_PREFIX 1
#define REPNE_PREFIX 2
/* Execution mode, passed to the emulator. */ /* Execution mode, passed to the emulator. */
#define X86EMUL_MODE_REAL 0 /* Real mode. */ #define X86EMUL_MODE_REAL 0 /* Real mode. */
#define X86EMUL_MODE_PROT16 2 /* 16-bit protected mode. */ #define X86EMUL_MODE_PROT16 2 /* 16-bit protected mode. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment