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