[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 08/29] tcg: Promote tcg_out_{dup, dupi}_vec t
From: |
Alex Bennée |
Subject: |
Re: [Qemu-devel] [PATCH v2 08/29] tcg: Promote tcg_out_{dup, dupi}_vec to backend interface |
Date: |
Wed, 01 May 2019 18:37:35 +0100 |
User-agent: |
mu4e 1.3.1; emacs 26.1 |
Richard Henderson <address@hidden> writes:
> The i386 backend already has these functions, and the aarch64
> backend could easily split out one. Nothing is done with these
> functions yet, but this will aid register allocation of
> INDEX_op_dup_vec in a later patch.
"Also use correct type for tcg_out_dupi_vec"?
Anyway:
Reviewed-by: Alex Bennée <address@hidden>
>
> Signed-off-by: Richard Henderson <address@hidden>
> ---
> tcg/aarch64/tcg-target.inc.c | 12 ++++++++++--
> tcg/i386/tcg-target.inc.c | 3 ++-
> tcg/tcg.c | 14 ++++++++++++++
> 3 files changed, 26 insertions(+), 3 deletions(-)
>
> diff --git a/tcg/aarch64/tcg-target.inc.c b/tcg/aarch64/tcg-target.inc.c
> index ee89734318..e443b5df23 100644
> --- a/tcg/aarch64/tcg-target.inc.c
> +++ b/tcg/aarch64/tcg-target.inc.c
> @@ -799,7 +799,7 @@ static void tcg_out_logicali(TCGContext *s, AArch64Insn
> insn, TCGType ext,
> }
>
> static void tcg_out_dupi_vec(TCGContext *s, TCGType type,
> - TCGReg rd, uint64_t v64)
> + TCGReg rd, tcg_target_long v64)
> {
> int op, cmode, imm8;
>
> @@ -814,6 +814,14 @@ static void tcg_out_dupi_vec(TCGContext *s, TCGType type,
> }
> }
>
> +static bool tcg_out_dup_vec(TCGContext *s, TCGType type, unsigned vece,
> + TCGReg rd, TCGReg rs)
> +{
> + int is_q = type - TCG_TYPE_V64;
> + tcg_out_insn(s, 3605, DUP, is_q, rd, rs, 1 << vece, 0);
> + return true;
> +}
> +
> static void tcg_out_movi(TCGContext *s, TCGType type, TCGReg rd,
> tcg_target_long value)
> {
> @@ -2201,7 +2209,7 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc,
> tcg_out_insn(s, 3617, NOT, is_q, 0, a0, a1);
> break;
> case INDEX_op_dup_vec:
> - tcg_out_insn(s, 3605, DUP, is_q, a0, a1, 1 << vece, 0);
> + tcg_out_dup_vec(s, type, vece, a0, a1);
> break;
> case INDEX_op_shli_vec:
> tcg_out_insn(s, 3614, SHL, is_q, a0, a1, a2 + (8 << vece));
> diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c
> index 1198c76392..0d621670c7 100644
> --- a/tcg/i386/tcg-target.inc.c
> +++ b/tcg/i386/tcg-target.inc.c
> @@ -855,7 +855,7 @@ static bool tcg_out_mov(TCGContext *s, TCGType type,
> TCGReg ret, TCGReg arg)
> return true;
> }
>
> -static void tcg_out_dup_vec(TCGContext *s, TCGType type, unsigned vece,
> +static bool tcg_out_dup_vec(TCGContext *s, TCGType type, unsigned vece,
> TCGReg r, TCGReg a)
> {
> if (have_avx2) {
> @@ -888,6 +888,7 @@ static void tcg_out_dup_vec(TCGContext *s, TCGType type,
> unsigned vece,
> g_assert_not_reached();
> }
> }
> + return true;
> }
>
> static void tcg_out_dupi_vec(TCGContext *s, TCGType type,
> diff --git a/tcg/tcg.c b/tcg/tcg.c
> index 68d86361e2..3ef4d3478d 100644
> --- a/tcg/tcg.c
> +++ b/tcg/tcg.c
> @@ -109,10 +109,24 @@ static void tcg_out_movi(TCGContext *s, TCGType type,
> static void tcg_out_op(TCGContext *s, TCGOpcode opc, const TCGArg *args,
> const int *const_args);
> #if TCG_TARGET_MAYBE_vec
> +static bool tcg_out_dup_vec(TCGContext *s, TCGType type, unsigned vece,
> + TCGReg dst, TCGReg src);
> +static void tcg_out_dupi_vec(TCGContext *s, TCGType type,
> + TCGReg dst, tcg_target_long arg);
> static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc, unsigned vecl,
> unsigned vece, const TCGArg *args,
> const int *const_args);
> #else
> +static inline bool tcg_out_dup_vec(TCGContext *s, TCGType type, unsigned
> vece,
> + TCGReg dst, TCGReg src)
> +{
> + g_assert_not_reached();
> +}
> +static inline void tcg_out_dupi_vec(TCGContext *s, TCGType type,
> + TCGReg dst, tcg_target_long arg)
> +{
> + g_assert_not_reached();
> +}
> static inline void tcg_out_vec_op(TCGContext *s, TCGOpcode opc, unsigned
> vecl,
> unsigned vece, const TCGArg *args,
> const int *const_args)
--
Alex Bennée
- [Qemu-devel] [PATCH v2 03/29] tcg: Allow add_vec, sub_vec, neg_vec, not_vec to be expanded, (continued)
- [Qemu-devel] [PATCH v2 03/29] tcg: Allow add_vec, sub_vec, neg_vec, not_vec to be expanded, Richard Henderson, 2019/05/01
- [Qemu-devel] [PATCH v2 04/29] tcg: Specify optional vector requirements with a list, Richard Henderson, 2019/05/01
- [Qemu-devel] [PATCH v2 05/29] tcg: Assert fixed_reg is read-only, Richard Henderson, 2019/05/01
- [Qemu-devel] [PATCH v2 06/29] tcg: Return bool success from tcg_out_mov, Richard Henderson, 2019/05/01
- [Qemu-devel] [PATCH v2 08/29] tcg: Promote tcg_out_{dup, dupi}_vec to backend interface, Richard Henderson, 2019/05/01
- Re: [Qemu-devel] [PATCH v2 08/29] tcg: Promote tcg_out_{dup, dupi}_vec to backend interface,
Alex Bennée <=
- [Qemu-devel] [PATCH v2 07/29] tcg: Support cross-class moves without instruction support, Richard Henderson, 2019/05/01
- [Qemu-devel] [PATCH v2 09/29] tcg: Manually expand INDEX_op_dup_vec, Richard Henderson, 2019/05/01
- [Qemu-devel] [PATCH v2 10/29] tcg: Add tcg_out_dupm_vec to the backend interface, Richard Henderson, 2019/05/01
- [Qemu-devel] [PATCH v2 11/29] tcg/i386: Implement tcg_out_dupm_vec, Richard Henderson, 2019/05/01
- [Qemu-devel] [PATCH v2 13/29] tcg: Add INDEX_op_dup_mem_vec, Richard Henderson, 2019/05/01