From: Tom Musta <tommusta@gmail.com>
To: qemu-devel@nongnu.org
Cc: Tom Musta <tommusta@gmail.com>, qemu-ppc@nongnu.org
Subject: [Qemu-devel] [V5 PATCH 07/22] target-ppc: General Support for VSX Helpers
Date: Thu, 2 Jan 2014 16:21:20 -0600 [thread overview]
Message-ID: <1388701295-29855-8-git-send-email-tommusta@gmail.com> (raw)
In-Reply-To: <1388701295-29855-1-git-send-email-tommusta@gmail.com>
This patch adds general support that will be used by the VSX helper
routines:
- a union describing the various VSR subfields.
- access routines to get and set VSRs
- VSX decoders
- a general routine to generate a handler that invokes a VSX
helper.
Signed-off-by: Tom Musta <tommusta@gmail.com>
Reviewed-by: Richard Henderson <address@hidden>
---
target-ppc/fpu_helper.c | 41 +++++++++++++++++++++++++++++++++++++++++
target-ppc/translate.c | 14 ++++++++++++++
2 files changed, 55 insertions(+), 0 deletions(-)
diff --git a/target-ppc/fpu_helper.c b/target-ppc/fpu_helper.c
index f0b0a49..cea94ac 100644
--- a/target-ppc/fpu_helper.c
+++ b/target-ppc/fpu_helper.c
@@ -1717,3 +1717,44 @@ uint32_t helper_efdcmpeq(CPUPPCState *env, uint64_t op1, uint64_t op2)
/* XXX: TODO: test special values (NaN, infinites, ...) */
return helper_efdtsteq(env, op1, op2);
}
+
+#define DECODE_SPLIT(opcode, shift1, nb1, shift2, nb2) \
+ (((((opcode) >> (shift1)) & ((1 << (nb1)) - 1)) << nb2) | \
+ (((opcode) >> (shift2)) & ((1 << (nb2)) - 1)))
+
+#define xT(opcode) DECODE_SPLIT(opcode, 0, 1, 21, 5)
+#define xA(opcode) DECODE_SPLIT(opcode, 2, 1, 16, 5)
+#define xB(opcode) DECODE_SPLIT(opcode, 1, 1, 11, 5)
+#define xC(opcode) DECODE_SPLIT(opcode, 3, 1, 6, 5)
+#define BF(opcode) (((opcode) >> (31-8)) & 7)
+
+typedef union _ppc_vsr_t {
+ uint64_t u64[2];
+ uint32_t u32[4];
+ float32 f32[4];
+ float64 f64[2];
+} ppc_vsr_t;
+
+static void getVSR(int n, ppc_vsr_t *vsr, CPUPPCState *env)
+{
+ if (n < 32) {
+ vsr->f64[0] = env->fpr[n];
+ vsr->u64[1] = env->vsr[n];
+ } else {
+ vsr->u64[0] = env->avr[n-32].u64[0];
+ vsr->u64[1] = env->avr[n-32].u64[1];
+ }
+}
+
+static void putVSR(int n, ppc_vsr_t *vsr, CPUPPCState *env)
+{
+ if (n < 32) {
+ env->fpr[n] = vsr->f64[0];
+ env->vsr[n] = vsr->u64[1];
+ } else {
+ env->avr[n-32].u64[0] = vsr->u64[0];
+ env->avr[n-32].u64[1] = vsr->u64[1];
+ }
+}
+
+#define float64_to_float64(x, env) x
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index c5c1108..2060b1c 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7289,6 +7289,20 @@ VSX_VECTOR_MOVE(xvnabssp, OP_NABS, SGN_MASK_SP)
VSX_VECTOR_MOVE(xvnegsp, OP_NEG, SGN_MASK_SP)
VSX_VECTOR_MOVE(xvcpsgnsp, OP_CPSGN, SGN_MASK_SP)
+#define GEN_VSX_HELPER_2(name, op1, op2, inval, type) \
+static void gen_##name(DisasContext * ctx) \
+{ \
+ TCGv_i32 opc; \
+ if (unlikely(!ctx->vsx_enabled)) { \
+ gen_exception(ctx, POWERPC_EXCP_VSXU); \
+ return; \
+ } \
+ /* NIP cannot be restored if the memory exception comes from an helper */ \
+ gen_update_nip(ctx, ctx->nip - 4); \
+ opc = tcg_const_i32(ctx->opcode); \
+ gen_helper_##name(cpu_env, opc); \
+ tcg_temp_free_i32(opc); \
+}
#define VSX_LOGICAL(name, tcg_op) \
static void glue(gen_, name)(DisasContext * ctx) \
--
1.7.1
next prev parent reply other threads:[~2014-01-02 22:22 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-02 22:21 [Qemu-devel] [V5 PATCH 00/22] target-ppc: PowerPC VSX Stage 3 Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 01/22] softfloat: Fix float64_to_uint64 Tom Musta
2014-01-06 12:54 ` Peter Maydell
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 02/22] softfloat: Add float32_to_uint64() Tom Musta
2014-01-06 12:54 ` Peter Maydell
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 03/22] softfloat: Fix float64_to_uint64_round_to_zero Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 04/22] softfloat: Fix float64_to_uint32 Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 05/22] softfloat: Fix float64_to_uint32_round_to_zero Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 06/22] target-ppc: Add set_fprf Argument to fload_invalid_op_excp() Tom Musta
2014-01-02 22:21 ` Tom Musta [this message]
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 08/22] target-ppc: Add VSX ISA2.06 xadd/xsub Instructions Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 09/22] target-ppc: Add VSX ISA2.06 xmul Instructions Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 10/22] target-ppc: Add VSX ISA2.06 xdiv Instructions Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 11/22] target-ppc: Add VSX ISA2.06 xre Instructions Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 12/22] target-ppc: Add VSX ISA2.06 xsqrt Instructions Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 13/22] target-ppc: Add VSX ISA2.06 xrsqrte Instructions Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 14/22] target-ppc: Add VSX ISA2.06 xtdiv Instructions Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 15/22] target-ppc: Add VSX ISA2.06 xtsqrt Instructions Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 16/22] target-ppc: Add VSX ISA2.06 Multiply Add Instructions Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 17/22] target-ppc: Add VSX xscmp*dp Instructions Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 18/22] target-ppc: Add VSX xmax/xmin Instructions Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 19/22] target-ppc: Add VSX Vector Compare Instructions Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 20/22] target-ppc: Add VSX Floating Point to Floating Point Conversion Instructions Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 21/22] target-ppc: Add VSX ISA2.06 Integer " Tom Musta
2014-01-02 22:21 ` [Qemu-devel] [V5 PATCH 22/22] target-ppc: Add VSX Rounding Instructions Tom Musta
2014-01-27 15:40 ` [Qemu-devel] [Qemu-ppc] [V5 PATCH 00/22] target-ppc: PowerPC VSX Stage 3 Alexander Graf
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=1388701295-29855-8-git-send-email-tommusta@gmail.com \
--to=tommusta@gmail.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.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 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).