From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org
Subject: [Qemu-devel] [PATCH v7 06/26] target/arm: Use vector infrastructure for aa64 mov/not/neg
Date: Mon, 18 Dec 2017 09:17:38 -0800	[thread overview]
Message-ID: <20171218171758.16964-7-richard.henderson@linaro.org> (raw)
In-Reply-To: <20171218171758.16964-1-richard.henderson@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/arm/translate-a64.c | 43 ++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 38 insertions(+), 5 deletions(-)
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
index 572af456d1..bc14c28e71 100644
--- a/target/arm/translate-a64.c
+++ b/target/arm/translate-a64.c
@@ -85,6 +85,7 @@ typedef void CryptoTwoOpEnvFn(TCGv_ptr, TCGv_i32, TCGv_i32);
 typedef void CryptoThreeOpEnvFn(TCGv_ptr, TCGv_i32, TCGv_i32, TCGv_i32);
 
 /* Note that the gvec expanders operate on offsets + sizes.  */
+typedef void GVecGen2Fn(unsigned, uint32_t, uint32_t, uint32_t, uint32_t);
 typedef void GVecGen3Fn(unsigned, uint32_t, uint32_t,
                         uint32_t, uint32_t, uint32_t);
 
@@ -4579,14 +4580,19 @@ static void handle_fp_1src_double(DisasContext *s, int opcode, int rd, int rn)
     TCGv_i64 tcg_op;
     TCGv_i64 tcg_res;
 
+    switch (opcode) {
+    case 0x0: /* FMOV */
+        tcg_gen_gvec_mov(0, vec_full_reg_offset(s, rd),
+                         vec_full_reg_offset(s, rn),
+                         8, vec_full_reg_size(s));
+        return;
+    }
+
     fpst = get_fpstatus_ptr();
     tcg_op = read_fp_dreg(s, rn);
     tcg_res = tcg_temp_new_i64();
 
     switch (opcode) {
-    case 0x0: /* FMOV */
-        tcg_gen_mov_i64(tcg_res, tcg_op);
-        break;
     case 0x1: /* FABS */
         gen_helper_vfp_absd(tcg_res, tcg_op);
         break;
@@ -9153,6 +9159,12 @@ static void disas_simd_3same_logic(DisasContext *s, uint32_t insn)
         gvec_fn = tcg_gen_gvec_andc;
         goto do_fn;
     case 2: /* ORR */
+        if (rn == rm) { /* MOV */
+            tcg_gen_gvec_mov(0, vec_full_reg_offset(s, rd),
+                             vec_full_reg_offset(s, rn),
+                             is_q ? 16 : 8, vec_full_reg_size(s));
+            return;
+        }
         gvec_fn = tcg_gen_gvec_or;
         goto do_fn;
     case 3: /* ORN */
@@ -10032,6 +10044,7 @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
     int rmode = -1;
     TCGv_i32 tcg_rmode;
     TCGv_ptr tcg_fpstatus;
+    GVecGen2Fn *gvec_fn;
 
     switch (opcode) {
     case 0x0: /* REV64, REV32 */
@@ -10040,8 +10053,7 @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
         return;
     case 0x5: /* CNT, NOT, RBIT */
         if (u && size == 0) {
-            /* NOT: adjust size so we can use the 64-bits-at-a-time loop. */
-            size = 3;
+            /* NOT */
             break;
         } else if (u && size == 1) {
             /* RBIT */
@@ -10293,6 +10305,27 @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
         tcg_rmode = NULL;
     }
 
+    switch (opcode) {
+    case 0x5:
+        if (u && size == 0) { /* NOT */
+            gvec_fn = tcg_gen_gvec_not;
+            goto do_fn;
+        }
+        break;
+    case 0xb:
+        if (u) { /* NEG */
+            gvec_fn = tcg_gen_gvec_neg;
+            goto do_fn;
+        }
+        break;
+
+    do_fn:
+        gvec_fn(size, vec_full_reg_offset(s, rd),
+                vec_full_reg_offset(s, rn),
+                is_q ? 16 : 8, vec_full_reg_size(s));
+        return;
+    }
+
     if (size == 3) {
         /* All 64-bit element operations can be shared with scalar 2misc */
         int pass;
-- 
2.14.3
next prev parent reply	other threads:[~2017-12-18 17:18 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-18 17:17 [Qemu-devel] [PATCH v7 00/26] tcg: generic vector operations Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 01/26] tcg: Add types and basic operations for host vectors Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 02/26] tcg: Add generic vector expanders Richard Henderson
2017-12-27 15:20   ` Kirill Batuzov
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 03/26] tcg: Allow multiple word entries into the constant pool Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 04/26] target/arm: Align vector registers Richard Henderson
2017-12-18 20:32   ` Philippe Mathieu-Daudé
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 05/26] target/arm: Use vector infrastructure for aa64 add/sub/logic Richard Henderson
2017-12-18 17:17 ` Richard Henderson [this message]
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 07/26] target/arm: Use vector infrastructure for aa64 dup/movi Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 08/26] tcg/i386: Add vector operations Richard Henderson
2017-12-27 15:31   ` Kirill Batuzov
2017-12-27 22:41     ` Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 09/26] tcg: Add tcg_expand_vec_op and tcg-target.opc.h Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 10/26] tcg: Add generic vector ops for interleave Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 11/26] target/arm: Use vector infrastructure for aa64 zip/uzp/trn/xtn Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 12/26] tcg: Add generic vector ops for constant shifts Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 13/26] target/arm: Use vector infrastructure for aa64 " Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 14/26] tcg: Add generic vector ops for comparisons Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 15/26] target/arm: Use vector infrastructure for aa64 compares Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 16/26] tcg/i386: Add vector operations/expansions for shift/cmp/interleave Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 17/26] tcg: Add generic vector ops for multiplication Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 18/26] target/arm: Use vector infrastructure for aa64 multiplies Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 19/26] tcg: Add generic vector ops for extension Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 20/26] target/arm: Use vector infrastructure for aa64 widening shifts Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 21/26] tcg/i386: Add vector operations/expansions for mul/extend Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 22/26] tcg/aarch64: Add vector operations Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 23/26] tcg/optimize: Handle vector opcodes during optimize Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 24/26] tcg: Add support for 4 operand vector ops Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 25/26] tcg: Add support for 5 " Richard Henderson
2017-12-18 17:17 ` [Qemu-devel] [PATCH v7 26/26] tcg: Add generic helpers for saturating arithmetic Richard Henderson
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=20171218171758.16964-7-richard.henderson@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@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).