From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, "Philippe Mathieu-Daudé" <philmd@linaro.org>
Subject: [PULL 17/31] tcg/i386: Implement vector TST{EQ,NE} for avx512
Date: Sun, 22 Sep 2024 14:00:58 +0200 [thread overview]
Message-ID: <20240922120112.5067-18-richard.henderson@linaro.org> (raw)
In-Reply-To: <20240922120112.5067-1-richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
tcg/i386/tcg-target.h | 2 +-
tcg/i386/tcg-target.c.inc | 31 ++++++++++++++++++++++++++++---
2 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/tcg/i386/tcg-target.h b/tcg/i386/tcg-target.h
index 342be30c4c..c68ac023d8 100644
--- a/tcg/i386/tcg-target.h
+++ b/tcg/i386/tcg-target.h
@@ -224,7 +224,7 @@ typedef enum {
#define TCG_TARGET_HAS_minmax_vec 1
#define TCG_TARGET_HAS_bitsel_vec have_avx512vl
#define TCG_TARGET_HAS_cmpsel_vec 1
-#define TCG_TARGET_HAS_tst_vec 0
+#define TCG_TARGET_HAS_tst_vec have_avx512bw
#define TCG_TARGET_deposit_i32_valid(ofs, len) \
(((ofs) == 0 && ((len) == 8 || (len) == 16)) || \
diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc
index d473dc7a5e..1bf50f1f62 100644
--- a/tcg/i386/tcg-target.c.inc
+++ b/tcg/i386/tcg-target.c.inc
@@ -462,6 +462,14 @@ static bool tcg_target_const_match(int64_t val, int ct,
#define OPC_VPSRLVD (0x45 | P_EXT38 | P_DATA16)
#define OPC_VPSRLVQ (0x45 | P_EXT38 | P_DATA16 | P_VEXW)
#define OPC_VPTERNLOGQ (0x25 | P_EXT3A | P_DATA16 | P_VEXW | P_EVEX)
+#define OPC_VPTESTMB (0x26 | P_EXT38 | P_DATA16 | P_EVEX)
+#define OPC_VPTESTMW (0x26 | P_EXT38 | P_DATA16 | P_VEXW | P_EVEX)
+#define OPC_VPTESTMD (0x27 | P_EXT38 | P_DATA16 | P_EVEX)
+#define OPC_VPTESTMQ (0x27 | P_EXT38 | P_DATA16 | P_VEXW | P_EVEX)
+#define OPC_VPTESTNMB (0x26 | P_EXT38 | P_SIMDF3 | P_EVEX)
+#define OPC_VPTESTNMW (0x26 | P_EXT38 | P_SIMDF3 | P_VEXW | P_EVEX)
+#define OPC_VPTESTNMD (0x27 | P_EXT38 | P_SIMDF3 | P_EVEX)
+#define OPC_VPTESTNMQ (0x27 | P_EXT38 | P_SIMDF3 | P_VEXW | P_EVEX)
#define OPC_VZEROUPPER (0x77 | P_EXT)
#define OPC_XCHG_ax_r32 (0x90)
#define OPC_XCHG_EvGv (0x87)
@@ -3145,6 +3153,13 @@ static void tcg_out_cmp_vec_k1(TCGContext *s, TCGType type, unsigned vece,
{ OPC_VPCMPB, OPC_VPCMPW, OPC_VPCMPD, OPC_VPCMPQ },
{ OPC_VPCMPUB, OPC_VPCMPUW, OPC_VPCMPUD, OPC_VPCMPUQ }
};
+ static const int testm_insn[4] = {
+ OPC_VPTESTMB, OPC_VPTESTMW, OPC_VPTESTMD, OPC_VPTESTMQ
+ };
+ static const int testnm_insn[4] = {
+ OPC_VPTESTNMB, OPC_VPTESTNMW, OPC_VPTESTNMD, OPC_VPTESTNMQ
+ };
+
static const int cond_ext[16] = {
[TCG_COND_EQ] = 0,
[TCG_COND_NE] = 4,
@@ -3160,9 +3175,19 @@ static void tcg_out_cmp_vec_k1(TCGContext *s, TCGType type, unsigned vece,
[TCG_COND_ALWAYS] = 7,
};
- tcg_out_vex_modrm_type(s, cmpm_insn[is_unsigned_cond(cond)][vece],
- /* k1 */ 1, v1, v2, type);
- tcg_out8(s, cond_ext[cond]);
+ switch (cond) {
+ case TCG_COND_TSTNE:
+ tcg_out_vex_modrm_type(s, testm_insn[vece], /* k1 */ 1, v1, v2, type);
+ break;
+ case TCG_COND_TSTEQ:
+ tcg_out_vex_modrm_type(s, testnm_insn[vece], /* k1 */ 1, v1, v2, type);
+ break;
+ default:
+ tcg_out_vex_modrm_type(s, cmpm_insn[is_unsigned_cond(cond)][vece],
+ /* k1 */ 1, v1, v2, type);
+ tcg_out8(s, cond_ext[cond]);
+ break;
+ }
}
static void tcg_out_k1_to_vec(TCGContext *s, TCGType type,
--
2.43.0
next prev parent reply other threads:[~2024-09-22 12:03 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-22 12:00 [PULL 00/31] tcg + linux-user patch queue Richard Henderson
2024-09-22 12:00 ` [PULL 01/31] tcg: Return TCGOp from tcg_gen_op[1-6] Richard Henderson
2024-09-22 12:00 ` [PULL 02/31] tcg: Propagate new TCGOp to add_as_label_use Richard Henderson
2024-09-22 12:00 ` [PULL 03/31] tcg: Fix iteration step in 32-bit gvec operation Richard Henderson
2024-09-22 12:00 ` [PULL 04/31] tcg: Export vec_gen_6 Richard Henderson
2024-09-22 12:00 ` [PULL 05/31] tcg/i386: Split out tcg_out_vex_modrm_type Richard Henderson
2024-09-22 12:00 ` [PULL 06/31] tcg/i386: Do not expand cmp_vec early Richard Henderson
2024-09-22 12:00 ` [PULL 07/31] tcg/i386: Do not expand cmpsel_vec early Richard Henderson
2024-09-22 12:00 ` [PULL 08/31] tcg/ppc: Do not expand cmp_vec early Richard Henderson
2024-09-22 12:00 ` [PULL 09/31] tcg/s390x: " Richard Henderson
2024-09-22 12:00 ` [PULL 10/31] tcg/optimize: Fold movcond with true and false values identical Richard Henderson
2024-09-22 12:00 ` [PULL 11/31] tcg/optimize: Optimize cmp_vec and cmpsel_vec Richard Henderson
2024-09-22 12:00 ` [PULL 12/31] tcg/optimize: Optimize bitsel_vec Richard Henderson
2024-09-22 12:00 ` [PULL 13/31] tcg/i386: Optimize cmpsel with constant 0 operand 3 Richard Henderson
2024-09-22 12:00 ` [PULL 14/31] tcg/i386: Implement cmp_vec with avx512 insns Richard Henderson
2024-09-22 12:00 ` [PULL 15/31] tcg/i386: Add predicate parameters to tcg_out_evex_opc Richard Henderson
2024-09-22 12:00 ` [PULL 16/31] tcg/i386: Implement cmpsel_vec with avx512 insns Richard Henderson
2024-09-22 12:00 ` Richard Henderson [this message]
2024-09-22 12:00 ` [PULL 18/31] tcg/ppc: Implement cmpsel_vec Richard Henderson
2024-09-22 12:01 ` [PULL 19/31] tcg/ppc: Optimize cmpsel with constant 0/-1 arguments Richard Henderson
2024-09-22 12:01 ` [PULL 20/31] tcg/s390x: Implement cmpsel_vec Richard Henderson
2024-09-22 12:01 ` [PULL 21/31] tcg/s390x: Optimize cmpsel with constant 0/-1 arguments Richard Henderson
2024-09-22 12:01 ` [PULL 22/31] target/ppc: Fix lxvx/stxvx facility check Richard Henderson
2024-09-22 12:01 ` [PULL 23/31] linux-user: update syscall_nr.h to Linux v6.10 Richard Henderson
2024-09-22 12:01 ` [PULL 24/31] linux-user, mips: update syscall-args-o32.c.inc " Richard Henderson
2024-09-22 12:01 ` [PULL 25/31] linux-user: update syscall.tbl " Richard Henderson
2024-09-22 12:01 ` [PULL 26/31] linux-user,aarch64: move to syscalltbl file Richard Henderson
2024-09-22 12:01 ` [PULL 27/31] linux-user,openrisc: " Richard Henderson
2024-09-22 12:01 ` [PULL 28/31] linux-user,riscv: " Richard Henderson
2024-09-22 12:01 ` [PULL 29/31] linux-user,hexagon: " Richard Henderson
2024-09-22 12:01 ` [PULL 30/31] linux-user,loongarch: " Richard Henderson
2024-09-22 12:01 ` [PULL 31/31] linux-user: update syscall.tbl to Linux v6.11 Richard Henderson
2024-09-27 15:18 ` [PULL 00/31] tcg + linux-user patch queue 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=20240922120112.5067-18-richard.henderson@linaro.org \
--to=richard.henderson@linaro.org \
--cc=peter.maydell@linaro.org \
--cc=philmd@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).