kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] KVM: x86 emulator: add bsf/bsr instruction emulation
@ 2010-08-09 10:00 Wei Yongjun
  2010-08-10  3:14 ` Avi Kivity
  0 siblings, 1 reply; 4+ messages in thread
From: Wei Yongjun @ 2010-08-09 10:00 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm

Add bsf/bsr instruction emulation (opcode 0x0f 0xbc~0xbd)

Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com>
---
 arch/x86/kvm/emulate.c |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index fb4ac8c..831aa6e 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -2342,8 +2342,8 @@ static struct opcode twobyte_table[256] = {
 	/* 0xB8 - 0xBF */
 	N, N,
 	G(BitOp, group8), D(DstMem | SrcReg | ModRM | BitOp | Lock),
-	N, N, D(ByteOp | DstReg | SrcMem | ModRM | Mov),
-	    D(DstReg | SrcMem16 | ModRM | Mov),
+	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),
 	N, N, N, GD(0, &group9),
@@ -3464,6 +3464,30 @@ twobyte_insn:
 	      btc:		/* btc */
 		emulate_2op_SrcV_nobyte("btc", c->src, c->dst, ctxt->eflags);
 		break;
+	case 0xbc: {		/* bsf */
+		int zf;
+		__asm__ ("bsf %2, %0; setz %b1"
+			 : "=r"(c->dst.val), "=q"(zf)
+			 : "r"(c->src.val), "1" (0));
+		ctxt->eflags &= ~X86_EFLAGS_ZF;
+		if (zf) {
+			ctxt->eflags |= X86_EFLAGS_ZF;
+			c->dst.type = OP_NONE;	/* Disable writeback. */
+		}
+		break;
+	}
+	case 0xbd: {		/* bsr */
+		int zf;
+		__asm__ ("bsr %2, %0; setz %b1"
+			 : "=r"(c->dst.val), "=q"(zf)
+			 : "r"(c->src.val), "1" (0));
+		ctxt->eflags &= ~X86_EFLAGS_ZF;
+		if (zf) {
+			ctxt->eflags |= X86_EFLAGS_ZF;
+			c->dst.type = OP_NONE;	/* Disable writeback. */
+		}
+		break;
+	}
 	case 0xbe ... 0xbf:	/* movsx */
 		c->dst.bytes = c->op_bytes;
 		c->dst.val = (c->d & ByteOp) ? (s8) c->src.val :
-- 
1.7.0.4



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] KVM: x86 emulator: add bsf/bsr instruction emulation
  2010-08-09 10:00 [PATCH] KVM: x86 emulator: add bsf/bsr instruction emulation Wei Yongjun
@ 2010-08-10  3:14 ` Avi Kivity
  2010-08-10  5:48   ` [PATCH v2] " Wei Yongjun
  0 siblings, 1 reply; 4+ messages in thread
From: Avi Kivity @ 2010-08-10  3:14 UTC (permalink / raw)
  To: Wei Yongjun; +Cc: kvm

 On 08/09/2010 06:00 AM, Wei Yongjun wrote:
> Add bsf/bsr instruction emulation (opcode 0x0f 0xbc~0xbd)
>
> @@ -3464,6 +3464,30 @@ twobyte_insn:
>  	      btc:		/* btc */
>  		emulate_2op_SrcV_nobyte("btc", c->src, c->dst, ctxt->eflags);
>  		break;
> +	case 0xbc: {		/* bsf */
> +		int zf;
> +		__asm__ ("bsf %2, %0; setz %b1"
> +			 : "=r"(c->dst.val), "=q"(zf)
> +			 : "r"(c->src.val), "1" (0));

Won't the high bytes of zf remain clear? Please examine the assembly.

Declaring it u8 is probably better.


-- 
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v2] KVM: x86 emulator: add bsf/bsr instruction emulation
  2010-08-10  3:14 ` Avi Kivity
@ 2010-08-10  5:48   ` Wei Yongjun
  2010-08-10 10:21     ` Avi Kivity
  0 siblings, 1 reply; 4+ messages in thread
From: Wei Yongjun @ 2010-08-10  5:48 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm

Add bsf/bsr instruction emulation (opcode 0x0f 0xbc~0xbd)

Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com>
---
v1 -> v2: use 'u8 zf' instead of int.
---
 arch/x86/kvm/emulate.c |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index 66139ad..7cbcb66 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -2381,8 +2381,8 @@ static struct opcode twobyte_table[256] = {
 	/* 0xB8 - 0xBF */
 	N, N,
 	G(BitOp, group8), D(DstMem | SrcReg | ModRM | BitOp | Lock),
-	N, N, D(ByteOp | DstReg | SrcMem | ModRM | Mov),
-	    D(DstReg | SrcMem16 | ModRM | Mov),
+	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),
 	N, N, N, GD(0, &group9),
@@ -3500,6 +3500,30 @@ twobyte_insn:
 	      btc:		/* btc */
 		emulate_2op_SrcV_nobyte("btc", c->src, c->dst, ctxt->eflags);
 		break;
+	case 0xbc: {		/* bsf */
+		u8 zf;
+		__asm__ ("bsf %2, %0; setz %1"
+			 : "=r"(c->dst.val), "=q"(zf)
+			 : "r"(c->src.val));
+		ctxt->eflags &= ~X86_EFLAGS_ZF;
+		if (zf) {
+			ctxt->eflags |= X86_EFLAGS_ZF;
+			c->dst.type = OP_NONE;	/* Disable writeback. */
+		}
+		break;
+	}
+	case 0xbd: {		/* bsr */
+		u8 zf;
+		__asm__ ("bsr %2, %0; setz %1"
+			 : "=r"(c->dst.val), "=q"(zf)
+			 : "r"(c->src.val));
+		ctxt->eflags &= ~X86_EFLAGS_ZF;
+		if (zf) {
+			ctxt->eflags |= X86_EFLAGS_ZF;
+			c->dst.type = OP_NONE;	/* Disable writeback. */
+		}
+		break;
+	}
 	case 0xbe ... 0xbf:	/* movsx */
 		c->dst.bytes = c->op_bytes;
 		c->dst.val = (c->d & ByteOp) ? (s8) c->src.val :
-- 
1.7.0.4



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] KVM: x86 emulator: add bsf/bsr instruction emulation
  2010-08-10  5:48   ` [PATCH v2] " Wei Yongjun
@ 2010-08-10 10:21     ` Avi Kivity
  0 siblings, 0 replies; 4+ messages in thread
From: Avi Kivity @ 2010-08-10 10:21 UTC (permalink / raw)
  To: Wei Yongjun; +Cc: kvm

 On 08/10/2010 01:48 AM, Wei Yongjun wrote:
> Add bsf/bsr instruction emulation (opcode 0x0f 0xbc~0xbd)
>

Applied, thanks.

-- 
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-08-10 10:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-08-09 10:00 [PATCH] KVM: x86 emulator: add bsf/bsr instruction emulation Wei Yongjun
2010-08-10  3:14 ` Avi Kivity
2010-08-10  5:48   ` [PATCH v2] " Wei Yongjun
2010-08-10 10:21     ` Avi Kivity

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).