aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/kvm/x86_emulate.c
diff options
context:
space:
mode:
authorNitin A Kamble <nitin.a.kamble@intel.com>2007-09-15 03:25:41 -0400
committerAvi Kivity <avi@qumranet.com>2007-10-13 04:18:29 -0400
commit55bebde45ec252295b08cb3990f15df2228dbf0e (patch)
tree18e2a6a126d2166b7bdf1e70269741860e8df2e2 /drivers/kvm/x86_emulate.c
parentbbe9abbdaca366510db1f2df25f4c7b48cba38eb (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/x86_emulate.c')
-rw-r--r--drivers/kvm/x86_emulate.c15
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;