summaryrefslogtreecommitdiff
path: root/arch/x86/kvm/emulate.c
AgeCommit message (Collapse)AuthorFilesLines
2010-10-24KVM: x86 emulator: Rename variable that shadows another local variable.Gleb Natapov1-3/+3
Signed-off-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
2010-10-24KVM: x86 emulator: add CALL FAR instruction emulation (opcode 9a)Wei Yongjun1-1/+1
Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
2010-10-24KVM: x86 emulator: add JrCXZ instruction emulationWei Yongjun1-1/+5
Add JrCXZ instruction emulation (opcode 0xe3) Used by FreeBSD boot loader. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
2010-10-24KVM: x86 emulator: add LDS/LES/LFS/LGS/LSS instruction emulationWei Yongjun1-4/+46
Add LDS/LES/LFS/LGS/LSS instruction emulation. (opcode 0xc4, 0xc5, 0x0f 0xb2, 0x0f 0xb4~0xb5) Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
2010-10-24KVM: x86 emulator: implement CWD (opcode 99)Avi Kivity1-1/+14
Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: implement IMUL REG, R/M, IMM (opcode 69)Avi Kivity1-1/+2
Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: add Src2Imm decodingAvi Kivity1-0/+4
Needed for 3-operand IMUL. Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: consolidate immediate decode into a functionAvi Kivity1-45/+64
Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: implement RDTSC (opcode 0F 31)Avi Kivity1-1/+18
Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: remove SrcImplicitAvi Kivity1-2/+1
Useless. Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: implement IMUL REG, R/M (opcode 0F AF)Avi Kivity1-3/+10
Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: implement IMUL REG, R/M, imm8 (opcode 6B)Avi Kivity1-1/+11
Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: implement RET imm16 (opcode C2)Avi Kivity1-1/+18
Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: add SrcImmU16 operand typeAvi Kivity1-3/+9
Used for RET NEAR instructions. Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: implement CALL FAR (FF /3)Avi Kivity1-1/+36
Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: implement DAS (opcode 2F)Avi Kivity1-1/+41
Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: Use a register for ____emulate_2op() destinationAvi Kivity1-1/+1
Most x86 two operand instructions allow the destination to be a memory operand, but IMUL (for example) requires that the destination be a register. Change ____emulate_2op() to take a register for both source and destination so we can invoke IMUL. Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: pass destination type to ____emulate_2op()Avi Kivity1-6/+6
We'll need it later so we can use a register for the destination. Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: add LOOP/LOOPcc instruction emulationWei Yongjun1-1/+7
Add LOOP/LOOPcc instruction emulation (opcode 0xe0~0xe2). Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: add CBW/CWDE/CDQE instruction emulationWei Yongjun1-1/+8
Add CBW/CWDE/CDQE instruction emulation.(opcode 0x98) Used by FreeBSD's boot loader. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: fix REPZ/REPNZ termination conditionAvi Kivity1-21/+20
EFLAGS.ZF needs to be checked after each iteration, not before. Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: implement SCAS (opcodes AE, AF)Avi Kivity1-3/+2
Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: fix INTn emulation not pushing EFLAGS and CSAvi Kivity1-1/+12
emulate_push() only schedules a push; it doesn't actually push anything. Call writeback() to flush out the write. Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: remove dup code of in/out instructionWei Yongjun1-20/+4
Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: change OUT instruction to use dst instead of srcWei Yongjun1-7/+8
Change OUT instruction to use dst instead of src, so we can reuse those code for all out instructions. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: introduce DstImmUByte for dst operand decodeWei Yongjun1-0/+7
Introduce DstImmUByte for dst operand decode, which will be used for out instruction. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: remove useless label from x86_emulate_insn()Wei Yongjun1-5/+1
Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: add setcc instruction emulationWei Yongjun1-1/+4
Add setcc instruction emulation (opcode 0x0f 0x90~0x9f) Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: add XADD instruction emulationWei Yongjun1-1/+8
Add XADD instruction emulation (opcode 0x0f 0xc0~0xc1) Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: put register operand write back to a functionWei Yongjun1-32/+23
Introduce function write_register_operand() to write back the register operand. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: add bsf/bsr instruction emulationWei Yongjun1-2/+26
Add bsf/bsr instruction emulation (opcode 0x0f 0xbc~0xbd) Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: Fix emulate_grp3 return valuesMohammed Gamal1-3/+3
This patch lets emulate_grp3() return X86EMUL_* return codes instead of hardcoded ones. Signed-off-by: Mohammed Gamal <m.gamal005@gmail.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: Add unary mul, imul, div, and idiv instructionsMohammed Gamal1-1/+40
This adds unary mul, imul, div, and idiv instructions (group 3 r/m 4-7). Signed-off-by: Mohammed Gamal <m.gamal005@gmail.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: mask group 8 instruction as BitOpWei Yongjun1-7/+4
Mask group 8 instruction as BitOp, so we can share the code for adjust the source operand. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: do not adjust the address for immediate sourceWei Yongjun1-1/+1
adjust the dst address for a register source but not adjust the address for an immediate source. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: fix negative bit offset BitOp instruction emulationWei Yongjun1-6/+18
If bit offset operands is a negative number, BitOp instruction will return wrong value. This patch fix it. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: Add stc instruction (opcode 0xf9)Mohammed Gamal1-1/+4
Signed-off-by: Mohammed Gamal <m.gamal005@gmail.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: using SrcOne for instruction d0/d1 decodingWei Yongjun1-2/+1
Using SrcOne for instruction d0/d1 decoding. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: disable writeback when decode dest operandWei Yongjun1-17/+6
This patch change to disable writeback when decode dest operand if the dest type is ImplicitOps or not specified. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: use SrcAcc to simplify stos decodingWei Yongjun1-3/+2
Use SrcAcc to simplify stos decoding. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: Add into, int, and int3 instructions (opcodes 0xcc-0xce)Mohammed Gamal1-0/+78
This adds support for int instructions to the emulator. Signed-off-by: Mohammed Gamal <m.gamal005@gmail.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: simplify two-byte opcode checkWei Yongjun1-7/+5
Two-byte opcode always start with 0x0F and the decode flags of opcode 0xF0 is always 0, so remove dup check. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: Fix nop emulationMohammed Gamal1-1/+1
If a nop instruction is encountered, we jump directly to the done label. This skip updating rip. Break from the switch case instead Signed-off-by: Mohammed Gamal <m.gamal005@gmail.com> Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: Decode memory operands directly into a 'struct operand'Avi Kivity1-68/+57
Since modrm operand can be either register or memory, decoding it into a 'struct operand', which can represent both, is simpler. Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: change invlpg emulation to use src.mem.addrAvi Kivity1-1/+1
Instead of using modrm_ea, which will soon be gone. Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: switch LEA to use SrcMem decodingAvi Kivity1-2/+2
The NoAccess flag will prevent memory from being accessed. Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: add NoAccess flag for memory instructions that skip accessAvi Kivity1-2/+4
Use for INVLPG, which accesses the tlb, not memory. Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: use struct operand for mov reg,dr and mov dr,reg for reg opAvi Kivity1-5/+4
This is an ordinary modrm source or destination; use the standard structure representing it. Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: use struct operand for mov reg,cr and mov cr,reg for reg opAvi Kivity1-5/+4
This is an ordinary modrm source or destination; use the standard structure representing it. Signed-off-by: Avi Kivity <avi@redhat.com>
2010-10-24KVM: x86 emulator: mark mov cr and mov dr as 64-bit instructions in long modeAvi Kivity1-2/+2
Signed-off-by: Avi Kivity <avi@redhat.com>