All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linux.org
Subject: [Qemu-devel] [PULL 16/31] tcg/i386: Support vector variable shift opcodes
Date: Mon, 13 May 2019 17:05:25 -0700	[thread overview]
Message-ID: <20190514000540.4313-17-richard.henderson@linaro.org> (raw)
In-Reply-To: <20190514000540.4313-1-richard.henderson@linaro.org>

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/i386/tcg-target.h     |  2 +-
 tcg/i386/tcg-target.inc.c | 35 +++++++++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/tcg/i386/tcg-target.h b/tcg/i386/tcg-target.h
index 241bf19413..b240633455 100644
--- a/tcg/i386/tcg-target.h
+++ b/tcg/i386/tcg-target.h
@@ -184,7 +184,7 @@ extern bool have_avx2;
 #define TCG_TARGET_HAS_neg_vec          0
 #define TCG_TARGET_HAS_shi_vec          1
 #define TCG_TARGET_HAS_shs_vec          0
-#define TCG_TARGET_HAS_shv_vec          0
+#define TCG_TARGET_HAS_shv_vec          have_avx2
 #define TCG_TARGET_HAS_cmp_vec          1
 #define TCG_TARGET_HAS_mul_vec          1
 #define TCG_TARGET_HAS_sat_vec          1
diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c
index 5b33bbd99b..c9448b6d84 100644
--- a/tcg/i386/tcg-target.inc.c
+++ b/tcg/i386/tcg-target.inc.c
@@ -467,6 +467,11 @@ static inline int tcg_target_const_match(tcg_target_long val, TCGType type,
 #define OPC_VPBROADCASTQ (0x59 | P_EXT38 | P_DATA16)
 #define OPC_VPERMQ      (0x00 | P_EXT3A | P_DATA16 | P_REXW)
 #define OPC_VPERM2I128  (0x46 | P_EXT3A | P_DATA16 | P_VEXL)
+#define OPC_VPSLLVD     (0x47 | P_EXT38 | P_DATA16)
+#define OPC_VPSLLVQ     (0x47 | P_EXT38 | P_DATA16 | P_REXW)
+#define OPC_VPSRAVD     (0x46 | P_EXT38 | P_DATA16)
+#define OPC_VPSRLVD     (0x45 | P_EXT38 | P_DATA16)
+#define OPC_VPSRLVQ     (0x45 | P_EXT38 | P_DATA16 | P_REXW)
 #define OPC_VZEROUPPER  (0x77 | P_EXT)
 #define OPC_XCHG_ax_r32	(0x90)
 
@@ -2707,6 +2712,18 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc,
     static int const umax_insn[4] = {
         OPC_PMAXUB, OPC_PMAXUW, OPC_PMAXUD, OPC_UD2
     };
+    static int const shlv_insn[4] = {
+        /* TODO: AVX512 adds support for MO_16.  */
+        OPC_UD2, OPC_UD2, OPC_VPSLLVD, OPC_VPSLLVQ
+    };
+    static int const shrv_insn[4] = {
+        /* TODO: AVX512 adds support for MO_16.  */
+        OPC_UD2, OPC_UD2, OPC_VPSRLVD, OPC_VPSRLVQ
+    };
+    static int const sarv_insn[4] = {
+        /* TODO: AVX512 adds support for MO_16, MO_64.  */
+        OPC_UD2, OPC_UD2, OPC_VPSRAVD, OPC_UD2
+    };
 
     TCGType type = vecl + TCG_TYPE_V64;
     int insn, sub;
@@ -2759,6 +2776,15 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc,
     case INDEX_op_umax_vec:
         insn = umax_insn[vece];
         goto gen_simd;
+    case INDEX_op_shlv_vec:
+        insn = shlv_insn[vece];
+        goto gen_simd;
+    case INDEX_op_shrv_vec:
+        insn = shrv_insn[vece];
+        goto gen_simd;
+    case INDEX_op_sarv_vec:
+        insn = sarv_insn[vece];
+        goto gen_simd;
     case INDEX_op_x86_punpckl_vec:
         insn = punpckl_insn[vece];
         goto gen_simd;
@@ -3136,6 +3162,9 @@ static const TCGTargetOpDef *tcg_target_op_def(TCGOpcode op)
     case INDEX_op_umin_vec:
     case INDEX_op_smax_vec:
     case INDEX_op_umax_vec:
+    case INDEX_op_shlv_vec:
+    case INDEX_op_shrv_vec:
+    case INDEX_op_sarv_vec:
     case INDEX_op_cmp_vec:
     case INDEX_op_x86_shufps_vec:
     case INDEX_op_x86_blend_vec:
@@ -3193,6 +3222,12 @@ int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type, unsigned vece)
         }
         return 1;
 
+    case INDEX_op_shlv_vec:
+    case INDEX_op_shrv_vec:
+        return have_avx2 && vece >= MO_32;
+    case INDEX_op_sarv_vec:
+        return have_avx2 && vece == MO_32;
+
     case INDEX_op_mul_vec:
         if (vece == MO_8) {
             /* We can expand the operation for MO_8.  */
-- 
2.17.1



  parent reply	other threads:[~2019-05-14  6:28 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-14  0:05 [Qemu-devel] [PULL 00/31] tcg: gvec improvments Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 01/31] tcg: Implement tcg_gen_gvec_3i() Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 02/31] tcg: Do not recreate INDEX_op_neg_vec unless supported Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 03/31] tcg: Allow add_vec, sub_vec, neg_vec, not_vec to be expanded Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 04/31] tcg: Specify optional vector requirements with a list Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 05/31] tcg: Assert fixed_reg is read-only Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 06/31] tcg/arm: Use tcg_out_mov_reg in tcg_out_mov Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 07/31] tcg: Return bool success from tcg_out_mov Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 08/31] tcg: Support cross-class moves without instruction support Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 09/31] tcg: Promote tcg_out_{dup, dupi}_vec to backend interface Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 10/31] tcg: Manually expand INDEX_op_dup_vec Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 11/31] tcg: Add tcg_out_dupm_vec to the backend interface Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 12/31] tcg/i386: Implement tcg_out_dupm_vec Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 13/31] tcg/aarch64: " Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 14/31] tcg: Add INDEX_op_dupm_vec Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 15/31] tcg: Add gvec expanders for variable shift Richard Henderson
2019-05-14  0:05 ` Richard Henderson [this message]
2019-05-14  0:05 ` [Qemu-devel] [PULL 17/31] tcg/aarch64: Support vector variable shift opcodes Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 18/31] tcg: Add gvec expanders for vector shift by scalar Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 19/31] tcg/i386: Support vector scalar shift opcodes Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 20/31] tcg: Add support for integer absolute value Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 21/31] tcg: Add support for vector " Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 22/31] tcg/i386: Support " Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 23/31] tcg/aarch64: " Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 24/31] target/arm: Use tcg_gen_abs_i64 and tcg_gen_gvec_abs Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 25/31] target/cris: Use tcg_gen_abs_tl Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 26/31] target/ppc: Use tcg_gen_abs_i32 Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 27/31] target/ppc: Use tcg_gen_abs_tl Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 28/31] target/s390x: Use tcg_gen_abs_i64 Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 29/31] target/tricore: Use tcg_gen_abs_tl Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 30/31] target/xtensa: Use tcg_gen_abs_i32 Richard Henderson
2019-05-14  0:05 ` [Qemu-devel] [PULL 31/31] tcg/aarch64: Do not advertise minmax for MO_64 Richard Henderson
2019-05-14 12:35 ` [Qemu-devel] [PULL 00/31] tcg: gvec improvments Peter Maydell

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=20190514000540.4313-17-richard.henderson@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=peter.maydell@linux.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 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.