diff options
author | Nitin A Kamble <nitin.a.kamble@intel.com> | 2007-09-15 03:25:41 -0400 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2007-10-13 04:18:29 -0400 |
commit | 55bebde45ec252295b08cb3990f15df2228dbf0e (patch) | |
tree | 18e2a6a126d2166b7bdf1e70269741860e8df2e2 /drivers/kvm | |
parent | bbe9abbdaca366510db1f2df25f4c7b48cba38eb (diff) |
KVM: X86 emulator: jump conditional short
Implement emulation of more jump conditional instructions
jcc shortrel
opcodes: 0x70 - 0x7f
Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'drivers/kvm')
-rw-r--r-- | drivers/kvm/x86_emulate.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c index ba53e59f558a..57f1a5ad0110 100644 --- a/drivers/kvm/x86_emulate.c +++ b/drivers/kvm/x86_emulate.c | |||
@@ -111,8 +111,12 @@ static u8 opcode_table[256] = { | |||
111 | 0, 0, ImplicitOps|Mov, 0, | 111 | 0, 0, ImplicitOps|Mov, 0, |
112 | SrcNone | ByteOp | ImplicitOps, SrcNone | ImplicitOps, /* insb, insw/insd */ | 112 | SrcNone | ByteOp | ImplicitOps, SrcNone | ImplicitOps, /* insb, insw/insd */ |
113 | SrcNone | ByteOp | ImplicitOps, SrcNone | ImplicitOps, /* outsb, outsw/outsd */ | 113 | SrcNone | ByteOp | ImplicitOps, SrcNone | ImplicitOps, /* outsb, outsw/outsd */ |
114 | /* 0x70 - 0x7F */ | 114 | /* 0x70 - 0x77 */ |
115 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 115 | ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, |
116 | ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, | ||
117 | /* 0x78 - 0x7F */ | ||
118 | ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, | ||
119 | ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, | ||
116 | /* 0x80 - 0x87 */ | 120 | /* 0x80 - 0x87 */ |
117 | ByteOp | DstMem | SrcImm | ModRM, DstMem | SrcImm | ModRM, | 121 | ByteOp | DstMem | SrcImm | ModRM, DstMem | SrcImm | ModRM, |
118 | ByteOp | DstMem | SrcImm | ModRM, DstMem | SrcImmByte | ModRM, | 122 | ByteOp | DstMem | SrcImm | ModRM, DstMem | SrcImmByte | ModRM, |
@@ -1268,6 +1272,13 @@ special_insn: | |||
1268 | ) == 0) | 1272 | ) == 0) |
1269 | return -1; | 1273 | return -1; |
1270 | return 0; | 1274 | return 0; |
1275 | case 0x70 ... 0x7f: /* jcc (short) */ { | ||
1276 | int rel = insn_fetch(s8, 1, _eip); | ||
1277 | |||
1278 | if (test_cc(b, _eflags)) | ||
1279 | JMP_REL(rel); | ||
1280 | break; | ||
1281 | } | ||
1271 | case 0x9c: /* pushf */ | 1282 | case 0x9c: /* pushf */ |
1272 | src.val = (unsigned long) _eflags; | 1283 | src.val = (unsigned long) _eflags; |
1273 | goto push; | 1284 | goto push; |