[PATCH 2/2] KVM: x86 emulator: add XADD instruction emulation

2010-08-12 Thread Wei Yongjun
Add XADD instruction emulation (opcode 0x0f 0xc0~0xc1)

Signed-off-by: Wei Yongjun yj...@cn.fujitsu.com
---
 arch/x86/kvm/emulate.c |9 -
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index 8bf80a9..7c47e37 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -2387,7 +2387,8 @@ static struct opcode twobyte_table[256] = {
D(DstReg | SrcMem | ModRM), D(DstReg | SrcMem | ModRM),
D(ByteOp | DstReg | SrcMem | ModRM | Mov), D(DstReg | SrcMem16 | ModRM 
| Mov),
/* 0xC0 - 0xCF */
-   N, N, N, D(DstMem | SrcReg | ModRM | Mov),
+   D(ByteOp | DstMem | SrcReg | ModRM), D(DstMem | SrcReg | ModRM),
+   N, D(DstMem | SrcReg | ModRM | Mov),
N, N, N, GD(0, group9),
N, N, N, N, N, N, N, N,
/* 0xD0 - 0xDF */
@@ -3532,6 +3533,12 @@ twobyte_insn:
c-dst.val = (c-d  ByteOp) ? (s8) c-src.val :
(s16) c-src.val;
break;
+   case 0xc0 ... 0xc1: /* xadd */
+   /* Write back the register source. */
+   write_register_operand(c-src, c-dst.val, c-dst.bytes);
+   /* Write back the memory destination with implicit LOCK prefix. 
*/
+   c-lock_prefix = 1;
+   goto add;
case 0xc3:  /* movnti */
c-dst.bytes = c-op_bytes;
c-dst.val = (c-op_bytes == 4) ? (u32) c-src.val :
-- 
1.7.0.4


--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/2] KVM: x86 emulator: add XADD instruction emulation

2010-08-12 Thread Paolo Bonzini
On 08/12/2010 09:41 AM, Wei Yongjun wrote:
 + case 0xc0 ... 0xc1: /* xadd */
 + /* Write back the register source. */
 + write_register_operand(c-src, c-dst.val, c-dst.bytes);
 + /* Write back the memory destination with implicit LOCK prefix. 
 */
 + c-lock_prefix = 1;

It's not a major performance problem, but xadd does _not_ have an
implicit LOCK prefix.

Paolo
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html