From: Richard Henderson <richard.henderson@linaro.org>
To: Song Gao <gaosong@loongson.cn>, qemu-devel@nongnu.org
Subject: Re: [PATCH v4 06/48] target/loongarch: Implement xvreplgr2vr
Date: Wed, 30 Aug 2023 09:09:21 -0700 [thread overview]
Message-ID: <34b735fd-0b90-8e3d-a0a8-3091adeccbf5@linaro.org> (raw)
In-Reply-To: <20230830084902.2113960-7-gaosong@loongson.cn>
On 8/30/23 01:48, Song Gao wrote:
> This patch includes:
> - XVREPLGR2VR.{B/H/W/D}.
>
> Signed-off-by: Song Gao <gaosong@loongson.cn>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> ---
> target/loongarch/insns.decode | 5 +++++
> target/loongarch/disas.c | 10 ++++++++++
> target/loongarch/insn_trans/trans_lasx.c.inc | 5 +++++
> target/loongarch/insn_trans/trans_lsx.c.inc | 12 ++++++------
> 4 files changed, 26 insertions(+), 6 deletions(-)
>
> diff --git a/target/loongarch/insns.decode b/target/loongarch/insns.decode
> index bcc18fb6c5..04bd238995 100644
> --- a/target/loongarch/insns.decode
> +++ b/target/loongarch/insns.decode
> @@ -1310,3 +1310,8 @@ xvsub_h 0111 01000000 11001 ..... ..... ..... @vvv
> xvsub_w 0111 01000000 11010 ..... ..... ..... @vvv
> xvsub_d 0111 01000000 11011 ..... ..... ..... @vvv
> xvsub_q 0111 01010010 11011 ..... ..... ..... @vvv
> +
> +xvreplgr2vr_b 0111 01101001 11110 00000 ..... ..... @vr
> +xvreplgr2vr_h 0111 01101001 11110 00001 ..... ..... @vr
> +xvreplgr2vr_w 0111 01101001 11110 00010 ..... ..... @vr
> +xvreplgr2vr_d 0111 01101001 11110 00011 ..... ..... @vr
> diff --git a/target/loongarch/disas.c b/target/loongarch/disas.c
> index d8b62ba532..c47f455ed0 100644
> --- a/target/loongarch/disas.c
> +++ b/target/loongarch/disas.c
> @@ -1708,6 +1708,11 @@ static void output_vvv_x(DisasContext *ctx, arg_vvv * a, const char *mnemonic)
> output(ctx, mnemonic, "x%d, x%d, x%d", a->vd, a->vj, a->vk);
> }
>
> +static void output_vr_x(DisasContext *ctx, arg_vr *a, const char *mnemonic)
> +{
> + output(ctx, mnemonic, "x%d, r%d", a->vd, a->rj);
> +}
> +
> INSN_LASX(xvadd_b, vvv)
> INSN_LASX(xvadd_h, vvv)
> INSN_LASX(xvadd_w, vvv)
> @@ -1718,3 +1723,8 @@ INSN_LASX(xvsub_h, vvv)
> INSN_LASX(xvsub_w, vvv)
> INSN_LASX(xvsub_d, vvv)
> INSN_LASX(xvsub_q, vvv)
> +
> +INSN_LASX(xvreplgr2vr_b, vr)
> +INSN_LASX(xvreplgr2vr_h, vr)
> +INSN_LASX(xvreplgr2vr_w, vr)
> +INSN_LASX(xvreplgr2vr_d, vr)
> diff --git a/target/loongarch/insn_trans/trans_lasx.c.inc b/target/loongarch/insn_trans/trans_lasx.c.inc
> index 218b8dc648..66b5abc790 100644
> --- a/target/loongarch/insn_trans/trans_lasx.c.inc
> +++ b/target/loongarch/insn_trans/trans_lasx.c.inc
> @@ -50,3 +50,8 @@ TRANS(xvsub_b, LASX, gvec_vvv, 32, MO_8, tcg_gen_gvec_sub)
> TRANS(xvsub_h, LASX, gvec_vvv, 32, MO_16, tcg_gen_gvec_sub)
> TRANS(xvsub_w, LASX, gvec_vvv, 32, MO_32, tcg_gen_gvec_sub)
> TRANS(xvsub_d, LASX, gvec_vvv, 32, MO_64, tcg_gen_gvec_sub)
> +
> +TRANS(xvreplgr2vr_b, LASX, gvec_dup, 32, MO_8)
> +TRANS(xvreplgr2vr_h, LASX, gvec_dup, 32, MO_16)
> +TRANS(xvreplgr2vr_w, LASX, gvec_dup, 32, MO_32)
> +TRANS(xvreplgr2vr_d, LASX, gvec_dup, 32, MO_64)
> diff --git a/target/loongarch/insn_trans/trans_lsx.c.inc b/target/loongarch/insn_trans/trans_lsx.c.inc
> index 0e12213e8b..c0e7a9a372 100644
> --- a/target/loongarch/insn_trans/trans_lsx.c.inc
> +++ b/target/loongarch/insn_trans/trans_lsx.c.inc
> @@ -4161,7 +4161,7 @@ static bool trans_vpickve2gr_du(DisasContext *ctx, arg_rv_i *a)
> return true;
> }
>
> -static bool gvec_dup(DisasContext *ctx, arg_vr *a, MemOp mop)
> +static bool gvec_dup(DisasContext *ctx, arg_vr *a, uint32_t oprsz, MemOp mop)
> {
> TCGv src = gpr_src(ctx, a->rj, EXT_NONE);
>
> @@ -4172,14 +4172,14 @@ static bool gvec_dup(DisasContext *ctx, arg_vr *a, MemOp mop)
> CHECK_VEC;
>
> tcg_gen_gvec_dup_i64(mop, vec_full_offset(a->vd),
> - 16, ctx->vl/8, src);
> + oprsz, ctx->vl / 8, src);
> return true;
> }
>
> -TRANS(vreplgr2vr_b, LSX, gvec_dup, MO_8)
> -TRANS(vreplgr2vr_h, LSX, gvec_dup, MO_16)
> -TRANS(vreplgr2vr_w, LSX, gvec_dup, MO_32)
> -TRANS(vreplgr2vr_d, LSX, gvec_dup, MO_64)
> +TRANS(vreplgr2vr_b, LSX, gvec_dup, 16, MO_8)
> +TRANS(vreplgr2vr_h, LSX, gvec_dup, 16, MO_16)
> +TRANS(vreplgr2vr_w, LSX, gvec_dup, 16, MO_32)
> +TRANS(vreplgr2vr_d, LSX, gvec_dup, 16, MO_64)
Hmm.
Ok, so revising the advice I gave versus the previous patch, I can see how having a common
CHECK_VEC is helpful. But it still needs to use oprsz not vl for the size check.
It would be better to replace with a function, like
if (!check_vec(ctx, oprsz)) {
return true;
}
rather than a macro with a hidden return. The replacement should be done in a patch by
itself, probably using check_vec(ctx, 16) for all of the existing LSX code until, step by
step, oprsz is plumbed into all of the places required.
I still think having separate minimal gen_vvv and gen_xxx helpers will help reduce the
possibility of typos, when there are a lot of instructions within an instruction format.
But when there are just 8, like here, just adding oprsz certainly looks simpler.
I wonder if it is really clearer having the LASX instructions in a separate file? Perhaps
it be better to keep all of the similar patterns together, e.g.
static bool gvec_dup(...)
{
...
}
TRANS(vreplgr2vr_b, LSX, gvec_dup, 16, MO_8)
TRANS(vreplgr2vr_h, LSX, gvec_dup, 16, MO_16)
TRANS(vreplgr2vr_w, LSX, gvec_dup, 16, MO_32)
TRANS(vreplgr2vr_d, LSX, gvec_dup, 16, MO_64)
TRANS(xvreplgr2vr_b, LASX, gvec_dup, 32, MO_8)
TRANS(xvreplgr2vr_h, LASX, gvec_dup, 32, MO_16)
TRANS(xvreplgr2vr_w, LASX, gvec_dup, 32, MO_32)
TRANS(xvreplgr2vr_d, LASX, gvec_dup, 32, MO_64)
r~
next prev parent reply other threads:[~2023-08-30 16:09 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-30 8:48 [PATCH v4 00/48] Add LoongArch LASX instructions Song Gao
2023-08-30 8:48 ` [PATCH v4 01/48] target/loongarch: Add LASX data support Song Gao
2023-08-30 8:48 ` [PATCH v4 02/48] target/loongarch: meson.build support build LASX Song Gao
2023-08-30 8:48 ` [PATCH v4 03/48] target/loongarch: Add CHECK_ASXE maccro for check LASX enable Song Gao
2023-08-30 8:48 ` [PATCH v4 04/48] target/loongarch: Add avail_LASX to check LASX instructions Song Gao
2023-08-30 14:20 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 05/48] target/loongarch: Implement xvadd/xvsub Song Gao
2023-08-30 15:38 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 06/48] target/loongarch: Implement xvreplgr2vr Song Gao
2023-08-30 16:09 ` Richard Henderson [this message]
2023-08-31 7:17 ` gaosong
2023-08-30 8:48 ` [PATCH v4 07/48] target/loongarch: Implement xvaddi/xvsubi Song Gao
2023-08-30 8:48 ` [PATCH v4 08/48] target/loongarch: Implement xvneg Song Gao
2023-08-30 8:48 ` [PATCH v4 09/48] target/loongarch: Implement xvsadd/xvssub Song Gao
2023-08-30 8:48 ` [PATCH v4 10/48] target/loongarch: rename lsx_helper.c to vec_helper.c Song Gao
2023-08-30 18:06 ` Richard Henderson
2023-08-31 7:17 ` gaosong
2023-08-30 8:48 ` [PATCH v4 11/48] target/loongarch: Implement xvhaddw/xvhsubw Song Gao
2023-08-30 18:12 ` Richard Henderson
2023-08-31 7:17 ` gaosong
2023-08-31 15:06 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 12/48] target/loongarch: Implement xvaddw/xvsubw Song Gao
2023-08-30 8:48 ` [PATCH v4 13/48] target/loongarch: Implement xavg/xvagr Song Gao
2023-08-30 18:14 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 14/48] target/loongarch: Implement xvabsd Song Gao
2023-08-30 8:48 ` [PATCH v4 15/48] target/loongarch: Implement xvadda Song Gao
2023-08-30 20:45 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 16/48] target/loongarch: Implement xvmax/xvmin Song Gao
2023-08-30 20:50 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 17/48] target/loongarch: Implement xvmul/xvmuh/xvmulw{ev/od} Song Gao
2023-08-30 18:23 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 18/48] target/loongarch: Implement xvmadd/xvmsub/xvmaddw{ev/od} Song Gao
2023-08-30 21:05 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 19/48] target/loongarch; Implement xvdiv/xvmod Song Gao
2023-08-30 22:14 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 20/48] target/loongarch: Implement xvsat Song Gao
2023-08-30 22:19 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 21/48] target/loongarch: Implement xvexth Song Gao
2023-08-30 22:34 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 22/48] target/loongarch: Implement vext2xv Song Gao
2023-08-30 22:36 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 23/48] target/loongarch: Implement xvsigncov Song Gao
2023-08-30 8:48 ` [PATCH v4 24/48] target/loongarch: Implement xvmskltz/xvmskgez/xvmsknz Song Gao
2023-08-30 22:44 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 25/48] target/loognarch: Implement xvldi Song Gao
2023-08-30 8:48 ` [PATCH v4 26/48] target/loongarch: Implement LASX logic instructions Song Gao
2023-08-30 22:46 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 27/48] target/loongarch: Implement xvsll xvsrl xvsra xvrotr Song Gao
2023-08-30 8:48 ` [PATCH v4 28/48] target/loongarch: Implement xvsllwil xvextl Song Gao
2023-08-30 22:52 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 29/48] target/loongarch: Implement xvsrlr xvsrar Song Gao
2023-08-30 22:54 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 30/48] target/loongarch: Implement xvsrln xvsran Song Gao
2023-08-30 22:57 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 31/48] target/loongarch: Implement xvsrlrn xvsrarn Song Gao
2023-08-30 23:00 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 32/48] target/loongarch: Implement xvssrln xvssran Song Gao
2023-08-30 23:22 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 33/48] target/loongarch: Implement xvssrlrn xvssrarn Song Gao
2023-08-30 23:26 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 34/48] target/loongarch: Implement xvclo xvclz Song Gao
2023-08-30 23:27 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 35/48] target/loongarch: Implement xvpcnt Song Gao
2023-08-30 23:28 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 36/48] target/loongarch: Implement xvbitclr xvbitset xvbitrev Song Gao
2023-08-30 23:30 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 37/48] target/loongarch: Implement xvfrstp Song Gao
2023-08-30 23:34 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 38/48] target/loongarch: Implement LASX fpu arith instructions Song Gao
2023-08-30 23:37 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 39/48] target/loongarch: Implement LASX fpu fcvt instructions Song Gao
2023-08-30 23:40 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 40/48] target/loongarch: Implement xvseq xvsle xvslt Song Gao
2023-08-30 23:41 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 41/48] target/loongarch: Implement xvfcmp Song Gao
2023-08-31 0:30 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 42/48] target/loongarch: Implement xvbitsel xvset Song Gao
2023-08-31 0:32 ` Richard Henderson
2023-08-30 8:48 ` [PATCH v4 43/48] target/loongarch: Implement xvinsgr2vr xvpickve2gr Song Gao
2023-08-30 8:48 ` [PATCH v4 44/48] target/loongarch: Implement xvreplve xvinsve0 xvpickve xvb{sll/srl}v Song Gao
2023-08-30 8:48 ` [PATCH v4 45/48] target/loongarch: Implement xvpack xvpick xvilv{l/h} Song Gao
2023-08-31 0:35 ` Richard Henderson
2023-08-30 8:49 ` [PATCH v4 46/48] target/loongarch: Implement xvshuf xvperm{i} xvshuf4i xvextrins Song Gao
2023-08-30 8:49 ` [PATCH v4 47/48] target/loongarch: Implement xvld xvst Song Gao
2023-08-30 8:49 ` [PATCH v4 48/48] target/loongarch: CPUCFG support LASX Song Gao
2023-08-31 0:38 ` 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=34b735fd-0b90-8e3d-a0a8-3091adeccbf5@linaro.org \
--to=richard.henderson@linaro.org \
--cc=gaosong@loongson.cn \
--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).