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