kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/8] Simplify byte/word opcode pair decode
@ 2010-08-26  8:56 Avi Kivity
  2010-08-26  8:56 ` [PATCH v3 1/8] KVM: x86 emulator: support byte/word opcode pairs Avi Kivity
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: Avi Kivity @ 2010-08-26  8:56 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
    - v2: 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
    - v3: fix opcode C1 to accept an 8-bit immediate, not full
  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] 10+ messages in thread

* [PATCH v3 1/8] KVM: x86 emulator: support byte/word opcode pairs
  2010-08-26  8:56 [PATCH v3 0/8] Simplify byte/word opcode pair decode Avi Kivity
@ 2010-08-26  8:56 ` Avi Kivity
  2010-08-26  8:56 ` [PATCH v3 2/8] KVM: x86 emulator: simplify ALU block (opcodes 00-3F) decode flags Avi Kivity
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Avi Kivity @ 2010-08-26  8:56 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] 10+ messages in thread

* [PATCH v3 2/8] KVM: x86 emulator: simplify ALU block (opcodes 00-3F) decode flags
  2010-08-26  8:56 [PATCH v3 0/8] Simplify byte/word opcode pair decode Avi Kivity
  2010-08-26  8:56 ` [PATCH v3 1/8] KVM: x86 emulator: support byte/word opcode pairs Avi Kivity
@ 2010-08-26  8:56 ` Avi Kivity
  2010-08-26  8:56 ` [PATCH v3 3/8] KVM: x86 emulator: simplify string instruction " Avi Kivity
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Avi Kivity @ 2010-08-26  8:56 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] 10+ messages in thread

* [PATCH v3 3/8] KVM: x86 emulator: simplify string instruction decode flags
  2010-08-26  8:56 [PATCH v3 0/8] Simplify byte/word opcode pair decode Avi Kivity
  2010-08-26  8:56 ` [PATCH v3 1/8] KVM: x86 emulator: support byte/word opcode pairs Avi Kivity
  2010-08-26  8:56 ` [PATCH v3 2/8] KVM: x86 emulator: simplify ALU block (opcodes 00-3F) decode flags Avi Kivity
@ 2010-08-26  8:56 ` Avi Kivity
  2010-08-26  8:56 ` [PATCH v3 4/8] KVM: x86 emulator: simplify instruction decode flags for opcodes 80-8F Avi Kivity
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Avi Kivity @ 2010-08-26  8:56 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] 10+ messages in thread

* [PATCH v3 4/8] KVM: x86 emulator: simplify instruction decode flags for opcodes 80-8F
  2010-08-26  8:56 [PATCH v3 0/8] Simplify byte/word opcode pair decode Avi Kivity
                   ` (2 preceding siblings ...)
  2010-08-26  8:56 ` [PATCH v3 3/8] KVM: x86 emulator: simplify string instruction " Avi Kivity
@ 2010-08-26  8:56 ` Avi Kivity
  2010-08-26  8:56 ` [PATCH v3 5/8] KVM: x86 emulator: simplify instruction decode flags for opcodes A0-AF Avi Kivity
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Avi Kivity @ 2010-08-26  8:56 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] 10+ messages in thread

* [PATCH v3 5/8] KVM: x86 emulator: simplify instruction decode flags for opcodes A0-AF
  2010-08-26  8:56 [PATCH v3 0/8] Simplify byte/word opcode pair decode Avi Kivity
                   ` (3 preceding siblings ...)
  2010-08-26  8:56 ` [PATCH v3 4/8] KVM: x86 emulator: simplify instruction decode flags for opcodes 80-8F Avi Kivity
@ 2010-08-26  8:56 ` Avi Kivity
  2010-08-26  8:56 ` [PATCH v3 6/8] KVM: x86 emulator: simplify instruction decode flags for opcodes C0-DF Avi Kivity
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Avi Kivity @ 2010-08-26  8:56 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] 10+ messages in thread

* [PATCH v3 6/8] KVM: x86 emulator: simplify instruction decode flags for opcodes C0-DF
  2010-08-26  8:56 [PATCH v3 0/8] Simplify byte/word opcode pair decode Avi Kivity
                   ` (4 preceding siblings ...)
  2010-08-26  8:56 ` [PATCH v3 5/8] KVM: x86 emulator: simplify instruction decode flags for opcodes A0-AF Avi Kivity
@ 2010-08-26  8:56 ` Avi Kivity
  2010-08-26  8:56 ` [PATCH v3 7/8] KVM: x86 emulator: simplify instruction decode flags for opcodes E0-FF Avi Kivity
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Avi Kivity @ 2010-08-26  8:56 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..1e159ff 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 | 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,
-- 
1.7.1


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

* [PATCH v3 7/8] KVM: x86 emulator: simplify instruction decode flags for opcodes E0-FF
  2010-08-26  8:56 [PATCH v3 0/8] Simplify byte/word opcode pair decode Avi Kivity
                   ` (5 preceding siblings ...)
  2010-08-26  8:56 ` [PATCH v3 6/8] KVM: x86 emulator: simplify instruction decode flags for opcodes C0-DF Avi Kivity
@ 2010-08-26  8:56 ` Avi Kivity
  2010-08-26  8:56 ` [PATCH v3 8/8] KVM: x86 emulator: simplify instruction decode flags for opcodes 0F 00-FF Avi Kivity
  2010-08-26 18:12 ` [PATCH v3 0/8] Simplify byte/word opcode pair decode Marcelo Tosatti
  8 siblings, 0 replies; 10+ messages in thread
From: Avi Kivity @ 2010-08-26  8:56 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 1e159ff..0d5f6bd 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] 10+ messages in thread

* [PATCH v3 8/8] KVM: x86 emulator: simplify instruction decode flags for opcodes 0F 00-FF
  2010-08-26  8:56 [PATCH v3 0/8] Simplify byte/word opcode pair decode Avi Kivity
                   ` (6 preceding siblings ...)
  2010-08-26  8:56 ` [PATCH v3 7/8] KVM: x86 emulator: simplify instruction decode flags for opcodes E0-FF Avi Kivity
@ 2010-08-26  8:56 ` Avi Kivity
  2010-08-26 18:12 ` [PATCH v3 0/8] Simplify byte/word opcode pair decode Marcelo Tosatti
  8 siblings, 0 replies; 10+ messages in thread
From: Avi Kivity @ 2010-08-26  8:56 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 0d5f6bd..9e02565 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] 10+ messages in thread

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

On Thu, Aug 26, 2010 at 11:56:05AM +0300, Avi Kivity wrote:
> 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
>     - v2: 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
>     - v3: fix opcode C1 to accept an 8-bit immediate, not full
>   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(-)

Applied, thanks.


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

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

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

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).