diff options
author | Nitin A Kamble <nitin.a.kamble@intel.com> | 2007-08-28 20:58:52 -0400 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2007-10-13 04:18:28 -0400 |
commit | 7d316911632acb8ba8cb7c1dd318ba723c9f1d50 (patch) | |
tree | 458b003794584fc80163339b468e2435b4470fbf /drivers/kvm | |
parent | bfdaab090386e7dda8c442721eeb91179258dad4 (diff) |
KVM: x86 emulator: push imm8
Implement the instruction
push imm8
opcode: 0x6a
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 | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c index 86171ca794dd..4fc2da6aae7d 100644 --- a/drivers/kvm/x86_emulate.c +++ b/drivers/kvm/x86_emulate.c | |||
@@ -104,10 +104,11 @@ static u8 opcode_table[256] = { | |||
104 | /* 0x58 - 0x5F */ | 104 | /* 0x58 - 0x5F */ |
105 | ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, | 105 | ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, |
106 | ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, | 106 | ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, |
107 | /* 0x60 - 0x6B */ | 107 | /* 0x60 - 0x67 */ |
108 | 0, 0, 0, DstReg | SrcMem32 | ModRM | Mov /* movsxd (x86/64) */ , | 108 | 0, 0, 0, DstReg | SrcMem32 | ModRM | Mov /* movsxd (x86/64) */ , |
109 | 0, 0, 0, 0, 0, 0, 0, 0, | 109 | 0, 0, 0, 0, |
110 | /* 0x6C - 0x6F */ | 110 | /* 0x68 - 0x6F */ |
111 | 0, 0, ImplicitOps|Mov, 0, | ||
111 | SrcNone | ByteOp | ImplicitOps, SrcNone | ImplicitOps, /* insb, insw/insd */ | 112 | SrcNone | ByteOp | ImplicitOps, SrcNone | ImplicitOps, /* insb, insw/insd */ |
112 | SrcNone | ByteOp | ImplicitOps, SrcNone | ImplicitOps, /* outsb, outsw/outsd */ | 113 | SrcNone | ByteOp | ImplicitOps, SrcNone | ImplicitOps, /* outsb, outsw/outsd */ |
113 | /* 0x70 - 0x7F */ | 114 | /* 0x70 - 0x7F */ |
@@ -919,6 +920,16 @@ done_prefixes: | |||
919 | goto cannot_emulate; | 920 | goto cannot_emulate; |
920 | dst.val = (s32) src.val; | 921 | dst.val = (s32) src.val; |
921 | break; | 922 | break; |
923 | case 0x6a: /* push imm8 */ | ||
924 | src.val = 0L; | ||
925 | src.val = insn_fetch(s8, 1, _eip); | ||
926 | push: | ||
927 | dst.type = OP_MEM; | ||
928 | dst.bytes = op_bytes; | ||
929 | dst.val = src.val; | ||
930 | register_address_increment(_regs[VCPU_REGS_RSP], -op_bytes); | ||
931 | dst.ptr = register_address(ctxt->ss_base, _regs[VCPU_REGS_RSP]); | ||
932 | break; | ||
922 | case 0x80 ... 0x83: /* Grp1 */ | 933 | case 0x80 ... 0x83: /* Grp1 */ |
923 | switch (modrm_reg) { | 934 | switch (modrm_reg) { |
924 | case 0: | 935 | case 0: |