All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/8] Simplify byte/word opcode pair decode
@ 2010-08-26  8:36 Avi Kivity
  2010-08-26  8:36 ` [PATCH v2 1/8] KVM: x86 emulator: support byte/word opcode pairs Avi Kivity
                   ` (7 more replies)
  0 siblings, 8 replies; 12+ messages in thread
From: Avi Kivity @ 2010-08-26  8:36 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

Many x86 instructions come in pairs - byte and word variants where bit 0
of the opcode determines operand size.  Use this to simplify the decode
tables.

Rebased, plus:

Avi Kivity (8):
  KVM: x86 emulator: support byte/word opcode pairs
  KVM: x86 emulator: simplify ALU block (opcodes 00-3F) decode flags
    - fix opcode 25 (AND r/m, imm) to accept a full immediate, not 8-bit
  KVM: x86 emulator: simplify string instruction decode flags
  KVM: x86 emulator: simplify instruction decode flags for opcodes
    80-8F
  KVM: x86 emulator: simplify instruction decode flags for opcodes
    A0-AF
  KVM: x86 emulator: simplify instruction decode flags for opcodes
    C0-DF
  KVM: x86 emulator: simplify instruction decode flags for opcodes
    E0-FF
  KVM: x86 emulator: simplify instruction decode flags for opcodes 0F
    00-FF

 arch/x86/kvm/emulate.c |   89 ++++++++++++++++++++++--------------------------
 1 files changed, 41 insertions(+), 48 deletions(-)


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

* [PATCH v2 1/8] KVM: x86 emulator: support byte/word opcode pairs
  2010-08-26  8:36 [PATCH v2 0/8] Simplify byte/word opcode pair decode Avi Kivity
@ 2010-08-26  8:36 ` Avi Kivity
  2010-08-26  8:36 ` [PATCH v2 2/8] KVM: x86 emulator: simplify ALU block (opcodes 00-3F) decode flags Avi Kivity
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 12+ messages in thread
From: Avi Kivity @ 2010-08-26  8:36 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

Many x86 instructions come in byte and word variants distinguished with bit
0 of the opcode.  Add macros to aid in defining them.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 arch/x86/kvm/emulate.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index d613690..8f4575e 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -2332,6 +2332,9 @@ static int em_rdtsc(struct x86_emulate_ctxt *ctxt)
 #define GD(_f, _g) { .flags = ((_f) | Group | GroupDual), .u.gdual = (_g) }
 #define I(_f, _e) { .flags = (_f), .u.execute = (_e) }
 
+#define D2bv(_f)      D((_f) | ByteOp), D(_f)
+#define I2bv(_f, _e)  I((_f) | ByteOp, _e), I(_f, _e)
+
 static struct opcode group1[] = {
 	X7(D(Lock)), N
 };
@@ -2574,6 +2577,9 @@ static struct opcode twobyte_table[256] = {
 #undef GD
 #undef I
 
+#undef D2bv
+#undef I2bv
+
 static unsigned imm_size(struct decode_cache *c)
 {
 	unsigned size;
-- 
1.7.1


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

* [PATCH v2 2/8] KVM: x86 emulator: simplify ALU block (opcodes 00-3F) decode flags
  2010-08-26  8:36 [PATCH v2 0/8] Simplify byte/word opcode pair decode Avi Kivity
  2010-08-26  8:36 ` [PATCH v2 1/8] KVM: x86 emulator: support byte/word opcode pairs Avi Kivity
@ 2010-08-26  8:36 ` Avi Kivity
  2010-08-26  8:36 ` [PATCH v2 3/8] KVM: x86 emulator: simplify string instruction " Avi Kivity
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 12+ messages in thread
From: Avi Kivity @ 2010-08-26  8:36 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

Use the new byte/word dual opcode decode.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 arch/x86/kvm/emulate.c |   40 ++++++++++++++++------------------------
 1 files changed, 16 insertions(+), 24 deletions(-)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index 8f4575e..c47f350 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -2387,42 +2387,34 @@ static struct group_dual group9 = { {
 
 static struct opcode opcode_table[256] = {
 	/* 0x00 - 0x07 */
-	D(ByteOp | DstMem | SrcReg | ModRM | Lock), D(DstMem | SrcReg | ModRM | Lock),
-	D(ByteOp | DstReg | SrcMem | ModRM), D(DstReg | SrcMem | ModRM),
-	D(ByteOp | DstAcc | SrcImm), D(DstAcc | SrcImm),
+	D2bv(DstMem | SrcReg | ModRM | Lock), D2bv(DstReg | SrcMem | ModRM),
+	D2bv(DstAcc | SrcImm),
 	D(ImplicitOps | Stack | No64), D(ImplicitOps | Stack | No64),
 	/* 0x08 - 0x0F */
-	D(ByteOp | DstMem | SrcReg | ModRM | Lock), D(DstMem | SrcReg | ModRM | Lock),
-	D(ByteOp | DstReg | SrcMem | ModRM), D(DstReg | SrcMem | ModRM),
-	D(ByteOp | DstAcc | SrcImm), D(DstAcc | SrcImm),
+	D2bv(DstMem | SrcReg | ModRM | Lock), D2bv(DstReg | SrcMem | ModRM),
+	D2bv(DstAcc | SrcImm),
 	D(ImplicitOps | Stack | No64), N,
 	/* 0x10 - 0x17 */
-	D(ByteOp | DstMem | SrcReg | ModRM | Lock), D(DstMem | SrcReg | ModRM | Lock),
-	D(ByteOp | DstReg | SrcMem | ModRM), D(DstReg | SrcMem | ModRM),
-	D(ByteOp | DstAcc | SrcImm), D(DstAcc | SrcImm),
+	D2bv(DstMem | SrcReg | ModRM | Lock), D2bv(DstReg | SrcMem | ModRM),
+	D2bv(DstAcc | SrcImm),
 	D(ImplicitOps | Stack | No64), D(ImplicitOps | Stack | No64),
 	/* 0x18 - 0x1F */
-	D(ByteOp | DstMem | SrcReg | ModRM | Lock), D(DstMem | SrcReg | ModRM | Lock),
-	D(ByteOp | DstReg | SrcMem | ModRM), D(DstReg | SrcMem | ModRM),
-	D(ByteOp | DstAcc | SrcImm), D(DstAcc | SrcImm),
+	D2bv(DstMem | SrcReg | ModRM | Lock), D2bv(DstReg | SrcMem | ModRM),
+	D2bv(DstAcc | SrcImm),
 	D(ImplicitOps | Stack | No64), D(ImplicitOps | Stack | No64),
 	/* 0x20 - 0x27 */
-	D(ByteOp | DstMem | SrcReg | ModRM | Lock), D(DstMem | SrcReg | ModRM | Lock),
-	D(ByteOp | DstReg | SrcMem | ModRM), D(DstReg | SrcMem | ModRM),
-	D(ByteOp | DstAcc | SrcImmByte), D(DstAcc | SrcImm), N, N,
+	D2bv(DstMem | SrcReg | ModRM | Lock), D2bv(DstReg | SrcMem | ModRM),
+	D2bv(DstAcc | SrcImm), N, N,
 	/* 0x28 - 0x2F */
-	D(ByteOp | DstMem | SrcReg | ModRM | Lock), D(DstMem | SrcReg | ModRM | Lock),
-	D(ByteOp | DstReg | SrcMem | ModRM), D(DstReg | SrcMem | ModRM),
-	D(ByteOp | DstAcc | SrcImmByte), D(DstAcc | SrcImm),
+	D2bv(DstMem | SrcReg | ModRM | Lock), D2bv(DstReg | SrcMem | ModRM),
+	D2bv(DstAcc | SrcImm),
 	N, I(ByteOp | DstAcc | No64, em_das),
 	/* 0x30 - 0x37 */
-	D(ByteOp | DstMem | SrcReg | ModRM | Lock), D(DstMem | SrcReg | ModRM | Lock),
-	D(ByteOp | DstReg | SrcMem | ModRM), D(DstReg | SrcMem | ModRM),
-	D(ByteOp | DstAcc | SrcImmByte), D(DstAcc | SrcImm), N, N,
+	D2bv(DstMem | SrcReg | ModRM | Lock), D2bv(DstReg | SrcMem | ModRM),
+	D2bv(DstAcc | SrcImm), N, N,
 	/* 0x38 - 0x3F */
-	D(ByteOp | DstMem | SrcReg | ModRM), D(DstMem | SrcReg | ModRM),
-	D(ByteOp | DstReg | SrcMem | ModRM), D(DstReg | SrcMem | ModRM),
-	D(ByteOp | DstAcc | SrcImm), D(DstAcc | SrcImm),
+	D2bv(DstMem | SrcReg | ModRM), D2bv(DstReg | SrcMem | ModRM),
+	D2bv(DstAcc | SrcImm),
 	N, N,
 	/* 0x40 - 0x4F */
 	X16(D(DstReg)),
-- 
1.7.1


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

* [PATCH v2 3/8] KVM: x86 emulator: simplify string instruction decode flags
  2010-08-26  8:36 [PATCH v2 0/8] Simplify byte/word opcode pair decode Avi Kivity
  2010-08-26  8:36 ` [PATCH v2 1/8] KVM: x86 emulator: support byte/word opcode pairs Avi Kivity
  2010-08-26  8:36 ` [PATCH v2 2/8] KVM: x86 emulator: simplify ALU block (opcodes 00-3F) decode flags Avi Kivity
@ 2010-08-26  8:36 ` Avi Kivity
  2010-08-26  8:36 ` [PATCH v2 4/8] KVM: x86 emulator: simplify instruction decode flags for opcodes 80-8F Avi Kivity
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 12+ messages in thread
From: Avi Kivity @ 2010-08-26  8:36 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

Use the new byte/word dual opcode decode.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 arch/x86/kvm/emulate.c |   13 ++++++-------
 1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index c47f350..356b994 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -2431,8 +2431,8 @@ static struct opcode opcode_table[256] = {
 	I(DstReg | SrcMem | ModRM | Src2Imm, em_imul_3op),
 	I(SrcImmByte | Mov | Stack, em_push),
 	I(DstReg | SrcMem | ModRM | Src2ImmByte, em_imul_3op),
-	D(DstDI | ByteOp | Mov | String), D(DstDI | Mov | String), /* insb, insw/insd */
-	D(SrcSI | ByteOp | ImplicitOps | String), D(SrcSI | ImplicitOps | String), /* outsb, outsw/outsd */
+	D2bv(DstDI | Mov | String), /* insb, insw/insd */
+	D2bv(SrcSI | ImplicitOps | String), /* outsb, outsw/outsd */
 	/* 0x70 - 0x7F */
 	X16(D(SrcImmByte)),
 	/* 0x80 - 0x87 */
@@ -2456,13 +2456,12 @@ static struct opcode opcode_table[256] = {
 	/* 0xA0 - 0xA7 */
 	D(ByteOp | DstAcc | SrcMem | Mov | MemAbs), D(DstAcc | SrcMem | Mov | MemAbs),
 	D(ByteOp | DstMem | SrcAcc | Mov | MemAbs), D(DstMem | SrcAcc | Mov | MemAbs),
-	D(ByteOp | SrcSI | DstDI | Mov | String), D(SrcSI | DstDI | Mov | String),
-	D(ByteOp | SrcSI | DstDI | String), D(SrcSI | DstDI | String),
+	D2bv(SrcSI | DstDI | Mov | String), D2bv(SrcSI | DstDI | String),
 	/* 0xA8 - 0xAF */
 	D(DstAcc | SrcImmByte | ByteOp), D(DstAcc | SrcImm),
-	D(ByteOp | SrcAcc | DstDI | Mov | String), D(SrcAcc | DstDI | Mov | String),
-	D(ByteOp | SrcSI | DstAcc | Mov | String), D(SrcSI | DstAcc | Mov | String),
-	D(ByteOp | SrcAcc | DstDI | String), D(SrcAcc | DstDI | String),
+	D2bv(SrcAcc | DstDI | Mov | String),
+	D2bv(SrcSI | DstAcc | Mov | String),
+	D2bv(SrcAcc | DstDI | String),
 	/* 0xB0 - 0xB7 */
 	X8(D(ByteOp | DstReg | SrcImm | Mov)),
 	/* 0xB8 - 0xBF */
-- 
1.7.1


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

* [PATCH v2 4/8] KVM: x86 emulator: simplify instruction decode flags for opcodes 80-8F
  2010-08-26  8:36 [PATCH v2 0/8] Simplify byte/word opcode pair decode Avi Kivity
                   ` (2 preceding siblings ...)
  2010-08-26  8:36 ` [PATCH v2 3/8] KVM: x86 emulator: simplify string instruction " Avi Kivity
@ 2010-08-26  8:36 ` Avi Kivity
  2010-08-26  8:36 ` [PATCH v2 5/8] KVM: x86 emulator: simplify instruction decode flags for opcodes A0-AF Avi Kivity
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 12+ messages in thread
From: Avi Kivity @ 2010-08-26  8:36 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

Use the new byte/word dual opcode decode.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 arch/x86/kvm/emulate.c |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index 356b994..ecd6605 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -2440,11 +2440,10 @@ static struct opcode opcode_table[256] = {
 	G(DstMem | SrcImm | ModRM | Group, group1),
 	G(ByteOp | DstMem | SrcImm | ModRM | No64 | Group, group1),
 	G(DstMem | SrcImmByte | ModRM | Group, group1),
-	D(ByteOp | DstMem | SrcReg | ModRM), D(DstMem | SrcReg | ModRM),
-	D(ByteOp | DstMem | SrcReg | ModRM | Lock), D(DstMem | SrcReg | ModRM | Lock),
+	D2bv(DstMem | SrcReg | ModRM), D2bv(DstMem | SrcReg | ModRM | Lock),
 	/* 0x88 - 0x8F */
-	D(ByteOp | DstMem | SrcReg | ModRM | Mov), D(DstMem | SrcReg | ModRM | Mov),
-	D(ByteOp | DstReg | SrcMem | ModRM | Mov), D(DstReg | SrcMem | ModRM | Mov),
+	D2bv(DstMem | SrcReg | ModRM | Mov),
+	D2bv(DstReg | SrcMem | ModRM | Mov),
 	D(DstMem | SrcNone | ModRM | Mov), D(ModRM | SrcMem | NoAccess | DstReg),
 	D(ImplicitOps | SrcMem16 | ModRM), G(0, group1A),
 	/* 0x90 - 0x97 */
-- 
1.7.1


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

* [PATCH v2 5/8] KVM: x86 emulator: simplify instruction decode flags for opcodes A0-AF
  2010-08-26  8:36 [PATCH v2 0/8] Simplify byte/word opcode pair decode Avi Kivity
                   ` (3 preceding siblings ...)
  2010-08-26  8:36 ` [PATCH v2 4/8] KVM: x86 emulator: simplify instruction decode flags for opcodes 80-8F Avi Kivity
@ 2010-08-26  8:36 ` Avi Kivity
  2010-08-26  8:36 ` [PATCH v2 6/8] KVM: x86 emulator: simplify instruction decode flags for opcodes C0-DF Avi Kivity
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 12+ messages in thread
From: Avi Kivity @ 2010-08-26  8:36 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

Use the new byte/word dual opcode decode.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 arch/x86/kvm/emulate.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index ecd6605..935f98e 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -2453,11 +2453,11 @@ static struct opcode opcode_table[256] = {
 	I(SrcImmFAddr | No64, em_call_far), N,
 	D(ImplicitOps | Stack), D(ImplicitOps | Stack), N, N,
 	/* 0xA0 - 0xA7 */
-	D(ByteOp | DstAcc | SrcMem | Mov | MemAbs), D(DstAcc | SrcMem | Mov | MemAbs),
-	D(ByteOp | DstMem | SrcAcc | Mov | MemAbs), D(DstMem | SrcAcc | Mov | MemAbs),
+	D2bv(DstAcc | SrcMem | Mov | MemAbs),
+	D2bv(DstMem | SrcAcc | Mov | MemAbs),
 	D2bv(SrcSI | DstDI | Mov | String), D2bv(SrcSI | DstDI | String),
 	/* 0xA8 - 0xAF */
-	D(DstAcc | SrcImmByte | ByteOp), D(DstAcc | SrcImm),
+	D2bv(DstAcc | SrcImm),
 	D2bv(SrcAcc | DstDI | Mov | String),
 	D2bv(SrcSI | DstAcc | Mov | String),
 	D2bv(SrcAcc | DstDI | String),
-- 
1.7.1


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

* [PATCH v2 6/8] KVM: x86 emulator: simplify instruction decode flags for opcodes C0-DF
  2010-08-26  8:36 [PATCH v2 0/8] Simplify byte/word opcode pair decode Avi Kivity
                   ` (4 preceding siblings ...)
  2010-08-26  8:36 ` [PATCH v2 5/8] KVM: x86 emulator: simplify instruction decode flags for opcodes A0-AF Avi Kivity
@ 2010-08-26  8:36 ` Avi Kivity
  2010-08-26  8:47   ` Wei Yongjun
  2010-08-26  8:36 ` [PATCH v2 7/8] KVM: x86 emulator: simplify instruction decode flags for opcodes E0-FF Avi Kivity
  2010-08-26  8:36 ` [PATCH v2 8/8] KVM: x86 emulator: simplify instruction decode flags for opcodes 0F 00-FF Avi Kivity
  7 siblings, 1 reply; 12+ messages in thread
From: Avi Kivity @ 2010-08-26  8:36 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

Use the new byte/word dual opcode decode.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 arch/x86/kvm/emulate.c |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index 935f98e..2610fc5 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -2466,17 +2466,16 @@ static struct opcode opcode_table[256] = {
 	/* 0xB8 - 0xBF */
 	X8(D(DstReg | SrcImm | Mov)),
 	/* 0xC0 - 0xC7 */
-	D(ByteOp | DstMem | SrcImm | ModRM), D(DstMem | SrcImmByte | ModRM),
+	D2bv(DstMem | SrcImm | ModRM),
 	I(ImplicitOps | Stack | SrcImmU16, em_ret_near_imm),
 	D(ImplicitOps | Stack),
 	D(DstReg | SrcMemFAddr | ModRM | No64), D(DstReg | SrcMemFAddr | ModRM | No64),
-	D(ByteOp | DstMem | SrcImm | ModRM | Mov), D(DstMem | SrcImm | ModRM | Mov),
+	D2bv(DstMem | SrcImm | ModRM | Mov),
 	/* 0xC8 - 0xCF */
 	N, N, N, D(ImplicitOps | Stack),
 	D(ImplicitOps), D(SrcImmByte), D(ImplicitOps | No64), D(ImplicitOps),
 	/* 0xD0 - 0xD7 */
-	D(ByteOp | DstMem | SrcOne | ModRM), D(DstMem | SrcOne | ModRM),
-	D(ByteOp | DstMem | ModRM), D(DstMem | ModRM),
+	D2bv(DstMem | SrcOne | ModRM), D2bv(DstMem | ModRM),
 	N, N, N, N,
 	/* 0xD8 - 0xDF */
 	N, N, N, N, N, N, N, N,
-- 
1.7.1


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

* [PATCH v2 7/8] KVM: x86 emulator: simplify instruction decode flags for opcodes E0-FF
  2010-08-26  8:36 [PATCH v2 0/8] Simplify byte/word opcode pair decode Avi Kivity
                   ` (5 preceding siblings ...)
  2010-08-26  8:36 ` [PATCH v2 6/8] KVM: x86 emulator: simplify instruction decode flags for opcodes C0-DF Avi Kivity
@ 2010-08-26  8:36 ` Avi Kivity
  2010-08-26  8:36 ` [PATCH v2 8/8] KVM: x86 emulator: simplify instruction decode flags for opcodes 0F 00-FF Avi Kivity
  7 siblings, 0 replies; 12+ messages in thread
From: Avi Kivity @ 2010-08-26  8:36 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

Use the new byte/word dual opcode decode.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 arch/x86/kvm/emulate.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index 2610fc5..c42a9c1 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -2481,13 +2481,11 @@ static struct opcode opcode_table[256] = {
 	N, N, N, N, N, N, N, N,
 	/* 0xE0 - 0xE7 */
 	X4(D(SrcImmByte)),
-	D(ByteOp | SrcImmUByte | DstAcc), D(SrcImmUByte | DstAcc),
-	D(ByteOp | SrcAcc | DstImmUByte), D(SrcAcc | DstImmUByte),
+	D2bv(SrcImmUByte | DstAcc), D2bv(SrcAcc | DstImmUByte),
 	/* 0xE8 - 0xEF */
 	D(SrcImm | Stack), D(SrcImm | ImplicitOps),
 	D(SrcImmFAddr | No64), D(SrcImmByte | ImplicitOps),
-	D(SrcNone | ByteOp | DstAcc), D(SrcNone | DstAcc),
-	D(ByteOp | SrcAcc | ImplicitOps), D(SrcAcc | ImplicitOps),
+	D2bv(SrcNone | DstAcc),	D2bv(SrcAcc | ImplicitOps),
 	/* 0xF0 - 0xF7 */
 	N, N, N, N,
 	D(ImplicitOps | Priv), D(ImplicitOps), G(ByteOp, group3), G(0, group3),
-- 
1.7.1


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

* [PATCH v2 8/8] KVM: x86 emulator: simplify instruction decode flags for opcodes 0F 00-FF
  2010-08-26  8:36 [PATCH v2 0/8] Simplify byte/word opcode pair decode Avi Kivity
                   ` (6 preceding siblings ...)
  2010-08-26  8:36 ` [PATCH v2 7/8] KVM: x86 emulator: simplify instruction decode flags for opcodes E0-FF Avi Kivity
@ 2010-08-26  8:36 ` Avi Kivity
  7 siblings, 0 replies; 12+ messages in thread
From: Avi Kivity @ 2010-08-26  8:36 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

Use the new byte/word dual opcode decode.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 arch/x86/kvm/emulate.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index c42a9c1..bd2e563 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -2536,7 +2536,7 @@ static struct opcode twobyte_table[256] = {
 	D(DstMem | SrcReg | Src2CL | ModRM),
 	D(ModRM), I(DstReg | SrcMem | ModRM, em_imul),
 	/* 0xB0 - 0xB7 */
-	D(ByteOp | DstMem | SrcReg | ModRM | Lock), D(DstMem | SrcReg | ModRM | Lock),
+	D2bv(DstMem | SrcReg | ModRM | Lock),
 	D(DstReg | SrcMemFAddr | ModRM), D(DstMem | SrcReg | ModRM | BitOp | Lock),
 	D(DstReg | SrcMemFAddr | ModRM), D(DstReg | SrcMemFAddr | ModRM),
 	D(ByteOp | DstReg | SrcMem | ModRM | Mov), D(DstReg | SrcMem16 | ModRM | Mov),
@@ -2546,7 +2546,7 @@ 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 */
-	D(ByteOp | DstMem | SrcReg | ModRM | Lock), D(DstMem | SrcReg | ModRM | Lock),
+	D2bv(DstMem | SrcReg | ModRM | Lock),
 	N, D(DstMem | SrcReg | ModRM | Mov),
 	N, N, N, GD(0, &group9),
 	N, N, N, N, N, N, N, N,
-- 
1.7.1


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

* Re: [PATCH v2 6/8] KVM: x86 emulator: simplify instruction decode flags for opcodes C0-DF
  2010-08-26  8:36 ` [PATCH v2 6/8] KVM: x86 emulator: simplify instruction decode flags for opcodes C0-DF Avi Kivity
@ 2010-08-26  8:47   ` Wei Yongjun
  2010-08-26  8:48     ` Wei Yongjun
  2010-08-26  8:50     ` Avi Kivity
  0 siblings, 2 replies; 12+ messages in thread
From: Wei Yongjun @ 2010-08-26  8:47 UTC (permalink / raw)
  To: Avi Kivity; +Cc: Marcelo Tosatti, kvm


> Use the new byte/word dual opcode decode.
>
> Signed-off-by: Avi Kivity <avi@redhat.com>
> ---
>  arch/x86/kvm/emulate.c |    7 +++----
>  1 files changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
> index 935f98e..2610fc5 100644
> --- a/arch/x86/kvm/emulate.c
> +++ b/arch/x86/kvm/emulate.c
> @@ -2466,17 +2466,16 @@ static struct opcode opcode_table[256] = {
>  	/* 0xB8 - 0xBF */
>  	X8(D(DstReg | SrcImm | Mov)),
>  	/* 0xC0 - 0xC7 */
> -	D(ByteOp | DstMem | SrcImm | ModRM), D(DstMem | SrcImmByte | ModRM),
> +	D2bv(DstMem | SrcImm | ModRM),
>   

0xC1 takes imm8 as the source operand. So D2bv can not be used here.

>  	I(ImplicitOps | Stack | SrcImmU16, em_ret_near_imm),
>  	D(ImplicitOps | Stack),
>  	D(DstReg | SrcMemFAddr | ModRM | No64), D(DstReg | SrcMemFAddr | ModRM | No64),
> -	D(ByteOp | DstMem | SrcImm | ModRM | Mov), D(DstMem | SrcImm | ModRM | Mov),
> +	D2bv(DstMem | SrcImm | ModRM | Mov),
>  	/* 0xC8 - 0xCF */
>  	N, N, N, D(ImplicitOps | Stack),
>  	D(ImplicitOps), D(SrcImmByte), D(ImplicitOps | No64), D(ImplicitOps),
>  	/* 0xD0 - 0xD7 */
> -	D(ByteOp | DstMem | SrcOne | ModRM), D(DstMem | SrcOne | ModRM),
> -	D(ByteOp | DstMem | ModRM), D(DstMem | ModRM),
> +	D2bv(DstMem | SrcOne | ModRM), D2bv(DstMem | ModRM),
>  	N, N, N, N,
>  	/* 0xD8 - 0xDF */
>  	N, N, N, N, N, N, N, N,
>   

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

* Re: [PATCH v2 6/8] KVM: x86 emulator: simplify instruction decode flags for opcodes C0-DF
  2010-08-26  8:47   ` Wei Yongjun
@ 2010-08-26  8:48     ` Wei Yongjun
  2010-08-26  8:50     ` Avi Kivity
  1 sibling, 0 replies; 12+ messages in thread
From: Wei Yongjun @ 2010-08-26  8:48 UTC (permalink / raw)
  To: Avi Kivity; +Cc: Marcelo Tosatti, kvm


>   
>> Use the new byte/word dual opcode decode.
>>
>> Signed-off-by: Avi Kivity <avi@redhat.com>
>> ---
>>  arch/x86/kvm/emulate.c |    7 +++----
>>  1 files changed, 3 insertions(+), 4 deletions(-)
>>
>> diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
>> index 935f98e..2610fc5 100644
>> --- a/arch/x86/kvm/emulate.c
>> +++ b/arch/x86/kvm/emulate.c
>> @@ -2466,17 +2466,16 @@ static struct opcode opcode_table[256] = {
>>  	/* 0xB8 - 0xBF */
>>  	X8(D(DstReg | SrcImm | Mov)),
>>  	/* 0xC0 - 0xC7 */
>> -	D(ByteOp | DstMem | SrcImm | ModRM), D(DstMem | SrcImmByte | ModRM),
>> +	D2bv(DstMem | SrcImm | ModRM),
>>   
>>     
> 0xC1 takes imm8 as the source operand. So D2bv can not be used here.
>   

Maybe we can used D2bv(DstMem | SrcImmByte | ModRM).

>   
>>  	I(ImplicitOps | Stack | SrcImmU16, em_ret_near_imm),
>>  	D(ImplicitOps | Stack),
>>  	D(DstReg | SrcMemFAddr | ModRM | No64), D(DstReg | SrcMemFAddr | ModRM | No64),
>> -	D(ByteOp | DstMem | SrcImm | ModRM | Mov), D(DstMem | SrcImm | ModRM | Mov),
>> +	D2bv(DstMem | SrcImm | ModRM | Mov),
>>  	/* 0xC8 - 0xCF */
>>  	N, N, N, D(ImplicitOps | Stack),
>>  	D(ImplicitOps), D(SrcImmByte), D(ImplicitOps | No64), D(ImplicitOps),
>>  	/* 0xD0 - 0xD7 */
>> -	D(ByteOp | DstMem | SrcOne | ModRM), D(DstMem | SrcOne | ModRM),
>> -	D(ByteOp | DstMem | ModRM), D(DstMem | ModRM),
>> +	D2bv(DstMem | SrcOne | ModRM), D2bv(DstMem | ModRM),
>>  	N, N, N, N,
>>  	/* 0xD8 - 0xDF */
>>  	N, N, N, N, N, N, N, N,
>>   
>>     
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
>
>   

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

* Re: [PATCH v2 6/8] KVM: x86 emulator: simplify instruction decode flags for opcodes C0-DF
  2010-08-26  8:47   ` Wei Yongjun
  2010-08-26  8:48     ` Wei Yongjun
@ 2010-08-26  8:50     ` Avi Kivity
  1 sibling, 0 replies; 12+ messages in thread
From: Avi Kivity @ 2010-08-26  8:50 UTC (permalink / raw)
  To: Wei Yongjun; +Cc: Marcelo Tosatti, kvm

 On 08/26/2010 11:47 AM, Wei Yongjun wrote:
>> Use the new byte/word dual opcode decode.
>>
>> Signed-off-by: Avi Kivity <avi@redhat.com>
>> ---
>>  arch/x86/kvm/emulate.c |    7 +++----
>>  1 files changed, 3 insertions(+), 4 deletions(-)
>>
>> diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
>> index 935f98e..2610fc5 100644
>> --- a/arch/x86/kvm/emulate.c
>> +++ b/arch/x86/kvm/emulate.c
>> @@ -2466,17 +2466,16 @@ static struct opcode opcode_table[256] = {
>>  	/* 0xB8 - 0xBF */
>>  	X8(D(DstReg | SrcImm | Mov)),
>>  	/* 0xC0 - 0xC7 */
>> -	D(ByteOp | DstMem | SrcImm | ModRM), D(DstMem | SrcImmByte | ModRM),
>> +	D2bv(DstMem | SrcImm | ModRM),
>>   
> 0xC1 takes imm8 as the source operand. 

Good catch.

> So D2bv can not be used here.


It can, just needs to be D2bv(DstMem | SrcImmByte | ModRM).

-- 
error compiling committee.c: too many arguments to function


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

end of thread, other threads:[~2010-08-26  8:51 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-26  8:36 [PATCH v2 0/8] Simplify byte/word opcode pair decode Avi Kivity
2010-08-26  8:36 ` [PATCH v2 1/8] KVM: x86 emulator: support byte/word opcode pairs Avi Kivity
2010-08-26  8:36 ` [PATCH v2 2/8] KVM: x86 emulator: simplify ALU block (opcodes 00-3F) decode flags Avi Kivity
2010-08-26  8:36 ` [PATCH v2 3/8] KVM: x86 emulator: simplify string instruction " Avi Kivity
2010-08-26  8:36 ` [PATCH v2 4/8] KVM: x86 emulator: simplify instruction decode flags for opcodes 80-8F Avi Kivity
2010-08-26  8:36 ` [PATCH v2 5/8] KVM: x86 emulator: simplify instruction decode flags for opcodes A0-AF Avi Kivity
2010-08-26  8:36 ` [PATCH v2 6/8] KVM: x86 emulator: simplify instruction decode flags for opcodes C0-DF Avi Kivity
2010-08-26  8:47   ` Wei Yongjun
2010-08-26  8:48     ` Wei Yongjun
2010-08-26  8:50     ` Avi Kivity
2010-08-26  8:36 ` [PATCH v2 7/8] KVM: x86 emulator: simplify instruction decode flags for opcodes E0-FF Avi Kivity
2010-08-26  8:36 ` [PATCH v2 8/8] KVM: x86 emulator: simplify instruction decode flags for opcodes 0F 00-FF Avi Kivity

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.