From: Avi Kivity <avi@redhat.com>
To: Marcelo Tosatti <mtosatti@redhat.com>, kvm@vger.kernel.org
Subject: [PATCH 06/14] KVM: x86 emulator: switch src2 to generic decode_operand()
Date: Tue, 13 Sep 2011 10:45:43 +0300 [thread overview]
Message-ID: <1315899951-2357-7-git-send-email-avi@redhat.com> (raw)
In-Reply-To: <1315899951-2357-1-git-send-email-avi@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
---
arch/x86/kvm/emulate.c | 51 ++++++++++++++++++++++++-----------------------
1 files changed, 26 insertions(+), 25 deletions(-)
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index 8c65ff2..88d32fc 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -40,6 +40,10 @@
#define OpMem64 6ull /* Memory, 64-bit */
#define OpImmUByte 7ull /* Zero-extended 8-bit immediate */
#define OpDX 8ull /* DX register */
+#define OpCL 9ull /* CL register (for shifts) */
+#define OpImmByte 10ull /* 8-bit sign extended immediate */
+#define OpOne 11ull /* Implied 1 */
+#define OpImm 12ull /* Sign extended immediate */
#define OpBits 4 /* Width of operand field */
#define OpMask ((1ull << OpBits) - 1)
@@ -108,12 +112,13 @@
#define Priv (1<<27) /* instruction generates #GP if current CPL != 0 */
#define No64 (1<<28)
/* Source 2 operand type */
-#define Src2None (0u<<29)
-#define Src2CL (1u<<29)
-#define Src2ImmByte (2u<<29)
-#define Src2One (3u<<29)
-#define Src2Imm (4u<<29)
-#define Src2Mask (7u<<29)
+#define Src2Shift (29)
+#define Src2None (OpNone << Src2Shift)
+#define Src2CL (OpCL << Src2Shift)
+#define Src2ImmByte (OpImmByte << Src2Shift)
+#define Src2One (OpOne << Src2Shift)
+#define Src2Imm (OpImm << Src2Shift)
+#define Src2Mask (OpMask << Src2Shift)
#define X2(x...) x, x
#define X3(x...) X2(x), x
@@ -3382,6 +3387,20 @@ static int decode_operand(struct x86_emulate_ctxt *ctxt, struct operand *op,
op->addr.reg = &ctxt->regs[VCPU_REGS_RDX];
fetch_register_operand(op);
break;
+ case OpCL:
+ op->bytes = 1;
+ op->val = ctxt->regs[VCPU_REGS_RCX] & 0xff;
+ break;
+ case OpImmByte:
+ rc = decode_imm(ctxt, op, 1, true);
+ break;
+ case OpOne:
+ op->bytes = 1;
+ op->val = 1;
+ break;
+ case OpImm:
+ rc = decode_imm(ctxt, op, imm_size(ctxt), true);
+ break;
case OpImplicit:
/* Special instructions do their own operand decoding. */
default:
@@ -3656,25 +3675,7 @@ int x86_decode_insn(struct x86_emulate_ctxt *ctxt, void *insn, int insn_len)
* Decode and fetch the second source operand: register, memory
* or immediate.
*/
- switch (ctxt->d & Src2Mask) {
- case Src2None:
- break;
- case Src2CL:
- ctxt->src2.bytes = 1;
- ctxt->src2.val = ctxt->regs[VCPU_REGS_RCX] & 0xff;
- break;
- case Src2ImmByte:
- rc = decode_imm(ctxt, &ctxt->src2, 1, true);
- break;
- case Src2One:
- ctxt->src2.bytes = 1;
- ctxt->src2.val = 1;
- break;
- case Src2Imm:
- rc = decode_imm(ctxt, &ctxt->src2, imm_size(ctxt), true);
- break;
- }
-
+ rc = decode_operand(ctxt, &ctxt->src2, (ctxt->d >> Src2Shift) & OpMask);
if (rc != X86EMUL_CONTINUE)
goto done;
--
1.7.6.1
next prev parent reply other threads:[~2011-09-13 7:45 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-13 7:45 [PATCH 00/14] Emulator decode generalization Avi Kivity
2011-09-13 7:45 ` [PATCH 01/14] KVM: x86 emulator: fix Src2CL decode Avi Kivity
2011-09-13 7:45 ` [PATCH 02/14] KVM: x86 emulator: convert group 3 instructions to direct decode Avi Kivity
2011-09-13 7:45 ` [PATCH 03/14] KVM: x86 emulator: move memop, memopp into emulation context Avi Kivity
2011-09-14 10:41 ` Takuya Yoshikawa
2011-09-14 11:37 ` Avi Kivity
2011-09-14 15:21 ` Takuya Yoshikawa
2011-09-14 15:25 ` Avi Kivity
2011-09-13 7:45 ` [PATCH 04/14] KVM: x86 emulator: split dst decode to a generic decode_operand() Avi Kivity
2011-09-13 7:45 ` [PATCH 05/14] KVM: x86 emulator: expand decode flags to 64 bits Avi Kivity
2011-09-13 7:45 ` Avi Kivity [this message]
2011-09-13 7:45 ` [PATCH 07/14] KVM: x86 emulator: free up some flag bits near src, dst Avi Kivity
2011-09-13 7:45 ` [PATCH 08/14] KVM: x86 emulator: switch OpImmUByte decode to decode_imm() Avi Kivity
2011-09-13 7:45 ` [PATCH 09/14] KVM: x86 emulator: qualify OpReg inhibit_byte_regs hack Avi Kivity
2011-09-13 7:45 ` [PATCH 10/14] KVM: x86 emulator: switch src decode to decode_operand() Avi Kivity
2011-09-13 7:45 ` [PATCH 11/14] KVM: x86 emulator: simplify OpMem64 decode Avi Kivity
2011-09-13 7:45 ` [PATCH 12/14] KVM: x86 emulator: streamline decode of segment registers Avi Kivity
2011-09-13 7:45 ` [PATCH 13/14] KVM: x86 emulator: switch lds/les/lss/lfs/lgs to direct decode Avi Kivity
2011-09-13 7:45 ` [PATCH 14/14] KVM: x86 emulator: convert push %sreg/pop %sreg " Avi Kivity
2011-09-14 11:12 ` [PATCH 00/14] Emulator decode generalization Marcelo Tosatti
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1315899951-2357-7-git-send-email-avi@redhat.com \
--to=avi@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.