aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGleb Natapov <gleb@redhat.com>2009-04-12 06:36:14 -0400
committerAvi Kivity <avi@redhat.com>2009-06-10 04:48:40 -0400
commita5f868bd45a64ce1f502d228723a5b6c357790cd (patch)
treeeb67ac51d8fecd1308e5d274a39a6e7e1420343c
parentc2d0ee46e6e633a3c23ecbcb9b03ad731906cd79 (diff)
KVM: x86 emulator: Add decoding of 16bit second immediate argument
Such as segment number in lcall/ljmp Signed-off-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com>
-rw-r--r--arch/x86/kvm/x86_emulate.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86_emulate.c b/arch/x86/kvm/x86_emulate.c
index d7c9f6fd0d34..c0150636d453 100644
--- a/arch/x86/kvm/x86_emulate.c
+++ b/arch/x86/kvm/x86_emulate.c
@@ -76,6 +76,7 @@
76#define Src2CL (1<<29) 76#define Src2CL (1<<29)
77#define Src2ImmByte (2<<29) 77#define Src2ImmByte (2<<29)
78#define Src2One (3<<29) 78#define Src2One (3<<29)
79#define Src2Imm16 (4<<29)
79#define Src2Mask (7<<29) 80#define Src2Mask (7<<29)
80 81
81enum { 82enum {
@@ -1072,6 +1073,12 @@ done_prefixes:
1072 c->src2.bytes = 1; 1073 c->src2.bytes = 1;
1073 c->src2.val = insn_fetch(u8, 1, c->eip); 1074 c->src2.val = insn_fetch(u8, 1, c->eip);
1074 break; 1075 break;
1076 case Src2Imm16:
1077 c->src2.type = OP_IMM;
1078 c->src2.ptr = (unsigned long *)c->eip;
1079 c->src2.bytes = 2;
1080 c->src2.val = insn_fetch(u16, 2, c->eip);
1081 break;
1075 case Src2One: 1082 case Src2One:
1076 c->src2.bytes = 1; 1083 c->src2.bytes = 1;
1077 c->src2.val = 1; 1084 c->src2.val = 1;