[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 22/31] tcg/i386: Support vector absolute value
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH v3 22/31] tcg/i386: Support vector absolute value |
Date: |
Fri, 3 May 2019 22:52:51 -0700 |
Signed-off-by: Richard Henderson <address@hidden>
---
tcg/i386/tcg-target.h | 2 +-
tcg/i386/tcg-target.inc.c | 15 +++++++++++++++
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/tcg/i386/tcg-target.h b/tcg/i386/tcg-target.h
index 7445f05885..66f16fbe3c 100644
--- a/tcg/i386/tcg-target.h
+++ b/tcg/i386/tcg-target.h
@@ -182,7 +182,7 @@ extern bool have_avx2;
#define TCG_TARGET_HAS_orc_vec 0
#define TCG_TARGET_HAS_not_vec 0
#define TCG_TARGET_HAS_neg_vec 0
-#define TCG_TARGET_HAS_abs_vec 0
+#define TCG_TARGET_HAS_abs_vec 1
#define TCG_TARGET_HAS_shi_vec 1
#define TCG_TARGET_HAS_shs_vec 1
#define TCG_TARGET_HAS_shv_vec have_avx2
diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c
index 0ba1587da4..aafd01cb49 100644
--- a/tcg/i386/tcg-target.inc.c
+++ b/tcg/i386/tcg-target.inc.c
@@ -369,6 +369,9 @@ static inline int tcg_target_const_match(tcg_target_long
val, TCGType type,
#define OPC_MOVSLQ (0x63 | P_REXW)
#define OPC_MOVZBL (0xb6 | P_EXT)
#define OPC_MOVZWL (0xb7 | P_EXT)
+#define OPC_PABSB (0x1c | P_EXT38 | P_DATA16)
+#define OPC_PABSW (0x1d | P_EXT38 | P_DATA16)
+#define OPC_PABSD (0x1e | P_EXT38 | P_DATA16)
#define OPC_PACKSSDW (0x6b | P_EXT | P_DATA16)
#define OPC_PACKSSWB (0x63 | P_EXT | P_DATA16)
#define OPC_PACKUSDW (0x2b | P_EXT38 | P_DATA16)
@@ -2741,6 +2744,10 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc,
static int const sars_insn[4] = {
OPC_UD2, OPC_PSRAW, OPC_PSRAD, OPC_UD2
};
+ static int const abs_insn[4] = {
+ /* TODO: AVX512 adds support for MO_64. */
+ OPC_PABSB, OPC_PABSW, OPC_PABSD, OPC_UD2
+ };
TCGType type = vecl + TCG_TYPE_V64;
int insn, sub;
@@ -2829,6 +2836,11 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc,
insn = OPC_PUNPCKLDQ;
goto gen_simd;
#endif
+ case INDEX_op_abs_vec:
+ insn = abs_insn[vece];
+ a2 = a1;
+ a1 = 0;
+ goto gen_simd;
gen_simd:
tcg_debug_assert(insn != OPC_UD2);
if (type == TCG_TYPE_V256) {
@@ -3206,6 +3218,7 @@ static const TCGTargetOpDef *tcg_target_op_def(TCGOpcode
op)
case INDEX_op_dup2_vec:
#endif
return &x_x_x;
+ case INDEX_op_abs_vec:
case INDEX_op_dup_vec:
case INDEX_op_shli_vec:
case INDEX_op_shri_vec:
@@ -3283,6 +3296,8 @@ int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type,
unsigned vece)
case INDEX_op_umin_vec:
case INDEX_op_umax_vec:
return vece <= MO_32 ? 1 : -1;
+ case INDEX_op_abs_vec:
+ return vece <= MO_32;
default:
return 0;
--
2.17.1
- [Qemu-devel] [PATCH v3 10/31] tcg: Manually expand INDEX_op_dup_vec, (continued)
- [Qemu-devel] [PATCH v3 10/31] tcg: Manually expand INDEX_op_dup_vec, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 04/31] tcg: Specify optional vector requirements with a list, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 16/31] tcg/i386: Support vector variable shift opcodes, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 17/31] tcg/aarch64: Support vector variable shift opcodes, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 14/31] tcg: Add INDEX_op_dupm_vec, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 15/31] tcg: Add gvec expanders for variable shift, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 19/31] tcg/i386: Support vector scalar shift opcodes, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 18/31] tcg: Add gvec expanders for vector shift by scalar, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 20/31] tcg: Add support for integer absolute value, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 21/31] tcg: Add support for vector absolute value, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 22/31] tcg/i386: Support vector absolute value,
Richard Henderson <=
- [Qemu-devel] [PATCH v3 23/31] tcg/aarch64: Support vector absolute value, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 24/31] target/arm: Use tcg_gen_abs_i64 and tcg_gen_gvec_abs, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 25/31] target/cris: Use tcg_gen_abs_tl, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 26/31] target/ppc: Use tcg_gen_abs_i32, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 27/31] target/ppc: Use tcg_gen_abs_tl, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 28/31] target/s390x: Use tcg_gen_abs_i64, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 31/31] tcg/aarch64: Do not advertise minmax for MO_64, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 30/31] target/xtensa: Use tcg_gen_abs_i32, Richard Henderson, 2019/05/04
- [Qemu-devel] [PATCH v3 29/31] target/tricore: Use tcg_gen_abs_tl, Richard Henderson, 2019/05/04