All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Bobek <jan.bobek@gmail.com>
To: qemu-devel@nongnu.org
Cc: "Alex Bennée" <alex.bennee@linaro.org>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Jan Bobek" <jan.bobek@gmail.com>
Subject: [Qemu-devel] [RFC PATCH v1 05/22] target/i386: introduce gen_ld_modrm_* helpers
Date: Wed, 31 Jul 2019 13:56:45 -0400	[thread overview]
Message-ID: <20190731175702.4916-6-jan.bobek@gmail.com> (raw)
In-Reply-To: <20190731175702.4916-1-jan.bobek@gmail.com>

These help with decoding/loading ModR/M vector operands; the operand's
register offset is returned, which is suitable for use with gvec
infrastructure.

Signed-off-by: Jan Bobek <jan.bobek@gmail.com>
---
 target/i386/translate.c | 47 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/target/i386/translate.c b/target/i386/translate.c
index 9e22eca2dc..7548677e1f 100644
--- a/target/i386/translate.c
+++ b/target/i386/translate.c
@@ -3040,6 +3040,53 @@ static const struct SSEOpHelper_eppi sse_op_table7[256] = {
     [0xdf] = AESNI_OP(aeskeygenassist),
 };
 
+static inline void gen_ld_modrm_PqQq(CPUX86State *env, DisasContext *s, int modrm,
+                                     uint32_t* dofs, uint32_t* aofs)
+{
+    const int mod = (modrm >> 6) & 3;
+    const int reg = (modrm >> 3) & 7; /* no REX_R */
+    *dofs = offsetof(CPUX86State, fpregs[reg].mmx);
+
+    if(mod == 3) {
+        const int rm = modrm & 7; /* no REX_B */
+
+        *aofs = offsetof(CPUX86State, fpregs[rm].mmx);
+    } else {
+        *aofs = offsetof(CPUX86State, mmx_t0);
+
+        gen_lea_modrm(env, s, modrm);
+        gen_ldq_env_A0(s, *aofs);
+    }
+}
+
+static inline void gen_ld_modrm_VxWx(CPUX86State *env, DisasContext *s, int modrm,
+                                     uint32_t* dofs, uint32_t* aofs)
+{
+    const int mod = (modrm >> 6) & 3;
+    const int reg = ((modrm >> 3) & 7) | REX_R(s);
+    *dofs = offsetof(CPUX86State, xmm_regs[reg]);
+
+    if(mod == 3) {
+        const int rm = (modrm & 7) | REX_B(s);
+
+        *aofs = offsetof(CPUX86State, xmm_regs[rm]);
+    } else {
+        *aofs = offsetof(CPUX86State, xmm_t0);
+
+        gen_lea_modrm(env, s, modrm);
+        gen_ldo_env_A0(s, *aofs); /* FIXME this needs to load 32 bytes for YMM */
+    }
+}
+
+static inline void gen_ld_modrm_VxHxWx(CPUX86State *env, DisasContext *s, int modrm,
+                                       uint32_t* dofs, uint32_t* aofs, uint32_t* bofs)
+{
+    assert(s->prefix & PREFIX_VEX);
+
+    gen_ld_modrm_VxWx(env, s, modrm, dofs, bofs);
+    *aofs = offsetof(CPUX86State, xmm_regs[s->vex_v]);
+}
+
 static void gen_sse(CPUX86State *env, DisasContext *s, int b)
 {
     int b1, op1_offset, op2_offset, is_xmm, val;
-- 
2.20.1



  parent reply	other threads:[~2019-07-31 18:00 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-31 17:56 [Qemu-devel] [RFC PATCH v1 00/22] reimplement (some) x86 vector instructions using tcg-gvec Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 01/22] target/i386: Push rex_r into DisasContext Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 02/22] target/i386: Push rex_w " Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 03/22] target/i386: Use prefix, aflag and dflag from DisasContext Jan Bobek
2019-07-31 19:41   ` Aleksandar Markovic
2019-07-31 20:04     ` Aleksandar Markovic
2019-08-02 13:20       ` Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 04/22] target/i386: Simplify gen_exception arguments Jan Bobek
2019-07-31 17:56 ` Jan Bobek [this message]
2019-07-31 19:08   ` [Qemu-devel] [RFC PATCH v1 05/22] target/i386: introduce gen_ld_modrm_* helpers Richard Henderson
2019-08-02 13:26     ` Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 06/22] target/i386: introduce gen_gvec_ld_modrm_* helpers Jan Bobek
2019-07-31 22:47   ` Richard Henderson
2019-08-02 13:34     ` Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 07/22] target/i386: add vector register file alignment constraints Jan Bobek
2019-07-31 19:14   ` Richard Henderson
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 08/22] target/i386: reimplement (V)PAND, (V)ANDPS, (V)ANDPD Jan Bobek
2019-07-31 19:35   ` Richard Henderson
2019-07-31 20:27     ` Aleksandar Markovic
2019-07-31 21:21       ` Richard Henderson
2019-08-02 13:53     ` Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 09/22] target/i386: reimplement (V)POR, (V)ORPS, (V)ORPD Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 10/22] target/i386: reimplement (V)PXOR, (V)XORPS, (V)XORPD Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 11/22] target/i386: reimplement (V)PANDN, (V)ANDNPS, (V)ANDNPD Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 12/22] target/i386: reimplement (V)PADD(B, W, D, Q) Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 13/22] target/i386: reimplement (V)PSUB(B, " Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 14/22] target/i386: reimplement (V)PADDS(B, W) Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 15/22] target/i386: reimplement (V)PADDUS(B, W) Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 16/22] target/i386: reimplement (V)PSUBS(B, W) Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 17/22] target/i386: reimplement (V)PSUBUS(B, W) Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 18/22] target/i386: reimplement (V)PMINSW Jan Bobek
2019-07-31 17:56 ` [Qemu-devel] [RFC PATCH v1 19/22] target/i386: reimplement (V)PMINUB Jan Bobek
2019-07-31 17:57 ` [Qemu-devel] [RFC PATCH v1 20/22] target/i386: reimplement (V)PMAXSW Jan Bobek
2019-07-31 17:57 ` [Qemu-devel] [RFC PATCH v1 21/22] target/i386: reimplement (V)PMAXUB Jan Bobek
2019-07-31 17:57 ` [Qemu-devel] [RFC PATCH v1 22/22] target/i386: reimplement (V)P(EQ, CMP)(B, W, D) Jan Bobek
2019-07-31 19:50   ` Richard Henderson
2019-07-31 20:09     ` Aleksandar Markovic
2019-07-31 21:31       ` Richard Henderson
2019-08-02 14:07         ` Jan Bobek
2019-08-02 14:18         ` Aleksandar Markovic
2019-07-31 18:20 ` [Qemu-devel] [RFC PATCH v1 00/22] reimplement (some) x86 vector instructions using tcg-gvec no-reply
2019-07-31 19:21 ` no-reply
2019-07-31 19:21 ` no-reply
2019-08-01 15:46 ` no-reply

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=20190731175702.4916-6-jan.bobek@gmail.com \
    --to=jan.bobek@gmail.com \
    --cc=alex.bennee@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /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.