From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625805459940979.9256384702635; Thu, 8 Jul 2021 21:37:39 -0700 (PDT) Received: from localhost ([::1]:53210 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iGg-0000IU-Hr for importer@patchew.org; Fri, 09 Jul 2021 00:37:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53584) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i5h-0006BU-Nf for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:18 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]:41516) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5b-0001Qi-Vr for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:17 -0400 Received: by mail-pf1-x42d.google.com with SMTP id f17so7582241pfj.8 for ; Thu, 08 Jul 2021 21:26:11 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1m/1jB+LWTz8tW/cgnB9pZrF+whRynxXiyjawbFKLWM=; b=Qsh7V+16LvVr60bYVP75+fXFhTp7yTbRg0mz2CeU8VzhXK4AXfy3ut25I/yH16xNjR fZwxW+ujCOgof9Slx9gkEbPlECLF7iZtLvhyecCowVhTBFoU9BSsUJ6M77AzcMDRKZqZ TepDiDKBVgqZPMvZipj/5yB2fL4ESTcJfs68rnl3ZjQpBU6xN4dWSgCCqBsusWsb1NDA knvuO6wZFtBakPnSPcw8+ftW0Rb2iHDkfHdOnFiK0NcQiHlyjeDfqIxPi+IQISRcbXeL KlCkswclH5wwMJqIH9BGtk9uhQVYtXSCEeDMtS/XjJBizyGmcucv1u595+AvwkIHZyXt w2DA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=1m/1jB+LWTz8tW/cgnB9pZrF+whRynxXiyjawbFKLWM=; b=MfNv8K2mGsumrr4WjkWmInv+9U9UoVWcvZzYNJdMllQnfxY56FQ5pH4bFfHuWhsiVl 11eN63LkYgohZZIF1x9RI8F3b9ztBppZlkvm3dnVF/zNA3c4kiUNhsHSgJiNV/pIOcBo TSwpUFwFvp86qnNIf/H42kwife7TWpL1dyWgW/QMx6BqBrrhNH8rw0cZkSLwASvahRrl yw9k7MxZs3+ZOtKhQK3aHzVAf8QdD4R79yHvXory8XsHQUF/vh0efARZcgCz/gcjcZuO TPTfuSdjntTmxCiPGsRtZNcBndAmIklzVogrBbB/eUWk2U8VXAw8A83fGr9cEnOo4eAE QPGA== X-Gm-Message-State: AOAM533In70jlyetSde3LzDdYqS+09E2LFue0+PO3eYjlcNdDuJkHs9g cAZbzc8T2n6oJMHGf3eNNOPm5g64WDeliQ== X-Google-Smtp-Source: ABdhPJzKHyp2aywDxoBpWehoj4/riaje/DOFs6lzK4mAllzRk6H8vGWZ7bWCrkxiVsUQ7NdsjKoydA== X-Received: by 2002:a63:4b59:: with SMTP id k25mr35598293pgl.252.1625804770081; Thu, 08 Jul 2021 21:26:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 01/17] target/riscv: Use tcg_constant_* Date: Thu, 8 Jul 2021 21:25:52 -0700 Message-Id: <20210709042608.883256-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625805460820100005 Content-Type: text/plain; charset="utf-8" Replace uses of tcg_const_* with the allocate and free close together. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/riscv/translate.c | 36 ++++---------- target/riscv/insn_trans/trans_rvf.c.inc | 3 +- target/riscv/insn_trans/trans_rvv.c.inc | 65 +++++++++---------------- 3 files changed, 34 insertions(+), 70 deletions(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 62a7d7e4c7..bba5ad8ec4 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -104,20 +104,16 @@ static void gen_nanbox_s(TCGv_i64 out, TCGv_i64 in) */ static void gen_check_nanbox_s(TCGv_i64 out, TCGv_i64 in) { - TCGv_i64 t_max =3D tcg_const_i64(0xffffffff00000000ull); - TCGv_i64 t_nan =3D tcg_const_i64(0xffffffff7fc00000ull); + TCGv_i64 t_max =3D tcg_constant_i64(0xffffffff00000000ull); + TCGv_i64 t_nan =3D tcg_constant_i64(0xffffffff7fc00000ull); =20 tcg_gen_movcond_i64(TCG_COND_GEU, out, in, t_max, in, t_nan); - tcg_temp_free_i64(t_max); - tcg_temp_free_i64(t_nan); } =20 static void generate_exception(DisasContext *ctx, int excp) { tcg_gen_movi_tl(cpu_pc, ctx->base.pc_next); - TCGv_i32 helper_tmp =3D tcg_const_i32(excp); - gen_helper_raise_exception(cpu_env, helper_tmp); - tcg_temp_free_i32(helper_tmp); + gen_helper_raise_exception(cpu_env, tcg_constant_i32(excp)); ctx->base.is_jmp =3D DISAS_NORETURN; } =20 @@ -125,17 +121,13 @@ static void generate_exception_mtval(DisasContext *ct= x, int excp) { tcg_gen_movi_tl(cpu_pc, ctx->base.pc_next); tcg_gen_st_tl(cpu_pc, cpu_env, offsetof(CPURISCVState, badaddr)); - TCGv_i32 helper_tmp =3D tcg_const_i32(excp); - gen_helper_raise_exception(cpu_env, helper_tmp); - tcg_temp_free_i32(helper_tmp); + gen_helper_raise_exception(cpu_env, tcg_constant_i32(excp)); ctx->base.is_jmp =3D DISAS_NORETURN; } =20 static void gen_exception_debug(void) { - TCGv_i32 helper_tmp =3D tcg_const_i32(EXCP_DEBUG); - gen_helper_raise_exception(cpu_env, helper_tmp); - tcg_temp_free_i32(helper_tmp); + gen_helper_raise_exception(cpu_env, tcg_constant_i32(EXCP_DEBUG)); } =20 /* Wrapper around tcg_gen_exit_tb that handles single stepping */ @@ -247,7 +239,7 @@ static void gen_div(TCGv ret, TCGv source1, TCGv source= 2) */ cond1 =3D tcg_temp_new(); cond2 =3D tcg_temp_new(); - zeroreg =3D tcg_const_tl(0); + zeroreg =3D tcg_constant_tl(0); resultopt1 =3D tcg_temp_new(); =20 tcg_gen_movi_tl(resultopt1, (target_ulong)-1); @@ -268,7 +260,6 @@ static void gen_div(TCGv ret, TCGv source1, TCGv source= 2) =20 tcg_temp_free(cond1); tcg_temp_free(cond2); - tcg_temp_free(zeroreg); tcg_temp_free(resultopt1); } =20 @@ -277,7 +268,7 @@ static void gen_divu(TCGv ret, TCGv source1, TCGv sourc= e2) TCGv cond1, zeroreg, resultopt1; cond1 =3D tcg_temp_new(); =20 - zeroreg =3D tcg_const_tl(0); + zeroreg =3D tcg_constant_tl(0); resultopt1 =3D tcg_temp_new(); =20 tcg_gen_setcondi_tl(TCG_COND_EQ, cond1, source2, 0); @@ -290,7 +281,6 @@ static void gen_divu(TCGv ret, TCGv source1, TCGv sourc= e2) tcg_gen_divu_tl(ret, source1, source2); =20 tcg_temp_free(cond1); - tcg_temp_free(zeroreg); tcg_temp_free(resultopt1); } =20 @@ -300,7 +290,7 @@ static void gen_rem(TCGv ret, TCGv source1, TCGv source= 2) =20 cond1 =3D tcg_temp_new(); cond2 =3D tcg_temp_new(); - zeroreg =3D tcg_const_tl(0); + zeroreg =3D tcg_constant_tl(0); resultopt1 =3D tcg_temp_new(); =20 tcg_gen_movi_tl(resultopt1, 1L); @@ -320,7 +310,6 @@ static void gen_rem(TCGv ret, TCGv source1, TCGv source= 2) =20 tcg_temp_free(cond1); tcg_temp_free(cond2); - tcg_temp_free(zeroreg); tcg_temp_free(resultopt1); } =20 @@ -328,7 +317,7 @@ static void gen_remu(TCGv ret, TCGv source1, TCGv sourc= e2) { TCGv cond1, zeroreg, resultopt1; cond1 =3D tcg_temp_new(); - zeroreg =3D tcg_const_tl(0); + zeroreg =3D tcg_constant_tl(0); resultopt1 =3D tcg_temp_new(); =20 tcg_gen_movi_tl(resultopt1, (target_ulong)1); @@ -341,7 +330,6 @@ static void gen_remu(TCGv ret, TCGv source1, TCGv sourc= e2) source1); =20 tcg_temp_free(cond1); - tcg_temp_free(zeroreg); tcg_temp_free(resultopt1); } =20 @@ -402,15 +390,11 @@ static inline void mark_fs_dirty(DisasContext *ctx) {= } =20 static void gen_set_rm(DisasContext *ctx, int rm) { - TCGv_i32 t0; - if (ctx->frm =3D=3D rm) { return; } ctx->frm =3D rm; - t0 =3D tcg_const_i32(rm); - gen_helper_set_rounding_mode(cpu_env, t0); - tcg_temp_free_i32(t0); + gen_helper_set_rounding_mode(cpu_env, tcg_constant_i32(rm)); } =20 static int ex_plus_1(DisasContext *ctx, int nf) diff --git a/target/riscv/insn_trans/trans_rvf.c.inc b/target/riscv/insn_tr= ans/trans_rvf.c.inc index db1c0c9974..89f78701e7 100644 --- a/target/riscv/insn_trans/trans_rvf.c.inc +++ b/target/riscv/insn_trans/trans_rvf.c.inc @@ -200,12 +200,11 @@ static bool trans_fsgnjn_s(DisasContext *ctx, arg_fsg= njn_s *a) * Replace bit 31 in rs1 with inverse in rs2. * This formulation retains the nanboxing of rs1. */ - mask =3D tcg_const_i64(~MAKE_64BIT_MASK(31, 1)); + mask =3D tcg_constant_i64(~MAKE_64BIT_MASK(31, 1)); tcg_gen_nor_i64(rs2, rs2, mask); tcg_gen_and_i64(rs1, mask, rs1); tcg_gen_or_i64(cpu_fpr[a->rd], rs1, rs2); =20 - tcg_temp_free_i64(mask); tcg_temp_free_i64(rs2); } tcg_temp_free_i64(rs1); diff --git a/target/riscv/insn_trans/trans_rvv.c.inc b/target/riscv/insn_tr= ans/trans_rvv.c.inc index 83d9a285ba..a8e7272487 100644 --- a/target/riscv/insn_trans/trans_rvv.c.inc +++ b/target/riscv/insn_trans/trans_rvv.c.inc @@ -33,7 +33,7 @@ static bool trans_vsetvl(DisasContext *ctx, arg_vsetvl *a) /* Using x0 as the rs1 register specifier, encodes an infinite AVL */ if (a->rs1 =3D=3D 0) { /* As the mask is at least one bit, RV_VLEN_MAX is >=3D VLMAX */ - s1 =3D tcg_const_tl(RV_VLEN_MAX); + s1 =3D tcg_constant_tl(RV_VLEN_MAX); } else { s1 =3D tcg_temp_new(); gen_get_gpr(s1, a->rs1); @@ -59,13 +59,13 @@ static bool trans_vsetvli(DisasContext *ctx, arg_vsetvl= i *a) return false; } =20 - s2 =3D tcg_const_tl(a->zimm); + s2 =3D tcg_constant_tl(a->zimm); dst =3D tcg_temp_new(); =20 /* Using x0 as the rs1 register specifier, encodes an infinite AVL */ if (a->rs1 =3D=3D 0) { /* As the mask is at least one bit, RV_VLEN_MAX is >=3D VLMAX */ - s1 =3D tcg_const_tl(RV_VLEN_MAX); + s1 =3D tcg_constant_tl(RV_VLEN_MAX); } else { s1 =3D tcg_temp_new(); gen_get_gpr(s1, a->rs1); @@ -76,7 +76,6 @@ static bool trans_vsetvli(DisasContext *ctx, arg_vsetvli = *a) ctx->base.is_jmp =3D DISAS_NORETURN; =20 tcg_temp_free(s1); - tcg_temp_free(s2); tcg_temp_free(dst); return true; } @@ -183,7 +182,7 @@ static bool ldst_us_trans(uint32_t vd, uint32_t rs1, ui= nt32_t data, * The first part is vlen in bytes, encoded in maxsz of simd_desc. * The second part is lmul, encoded in data of simd_desc. */ - desc =3D tcg_const_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); + desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); =20 gen_get_gpr(base, rs1); tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd)); @@ -194,7 +193,6 @@ static bool ldst_us_trans(uint32_t vd, uint32_t rs1, ui= nt32_t data, tcg_temp_free_ptr(dest); tcg_temp_free_ptr(mask); tcg_temp_free(base); - tcg_temp_free_i32(desc); gen_set_label(over); return true; } @@ -334,7 +332,7 @@ static bool ldst_stride_trans(uint32_t vd, uint32_t rs1= , uint32_t rs2, mask =3D tcg_temp_new_ptr(); base =3D tcg_temp_new(); stride =3D tcg_temp_new(); - desc =3D tcg_const_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); + desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); =20 gen_get_gpr(base, rs1); gen_get_gpr(stride, rs2); @@ -347,7 +345,6 @@ static bool ldst_stride_trans(uint32_t vd, uint32_t rs1= , uint32_t rs2, tcg_temp_free_ptr(mask); tcg_temp_free(base); tcg_temp_free(stride); - tcg_temp_free_i32(desc); gen_set_label(over); return true; } @@ -462,7 +459,7 @@ static bool ldst_index_trans(uint32_t vd, uint32_t rs1,= uint32_t vs2, mask =3D tcg_temp_new_ptr(); index =3D tcg_temp_new_ptr(); base =3D tcg_temp_new(); - desc =3D tcg_const_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); + desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); =20 gen_get_gpr(base, rs1); tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd)); @@ -475,7 +472,6 @@ static bool ldst_index_trans(uint32_t vd, uint32_t rs1,= uint32_t vs2, tcg_temp_free_ptr(mask); tcg_temp_free_ptr(index); tcg_temp_free(base); - tcg_temp_free_i32(desc); gen_set_label(over); return true; } @@ -594,7 +590,7 @@ static bool ldff_trans(uint32_t vd, uint32_t rs1, uint3= 2_t data, dest =3D tcg_temp_new_ptr(); mask =3D tcg_temp_new_ptr(); base =3D tcg_temp_new(); - desc =3D tcg_const_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); + desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); =20 gen_get_gpr(base, rs1); tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd)); @@ -605,7 +601,6 @@ static bool ldff_trans(uint32_t vd, uint32_t rs1, uint3= 2_t data, tcg_temp_free_ptr(dest); tcg_temp_free_ptr(mask); tcg_temp_free(base); - tcg_temp_free_i32(desc); gen_set_label(over); return true; } @@ -671,7 +666,7 @@ static bool amo_trans(uint32_t vd, uint32_t rs1, uint32= _t vs2, mask =3D tcg_temp_new_ptr(); index =3D tcg_temp_new_ptr(); base =3D tcg_temp_new(); - desc =3D tcg_const_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); + desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); =20 gen_get_gpr(base, rs1); tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd)); @@ -684,7 +679,6 @@ static bool amo_trans(uint32_t vd, uint32_t rs1, uint32= _t vs2, tcg_temp_free_ptr(mask); tcg_temp_free_ptr(index); tcg_temp_free(base); - tcg_temp_free_i32(desc); gen_set_label(over); return true; } @@ -874,7 +868,7 @@ static bool opivx_trans(uint32_t vd, uint32_t rs1, uint= 32_t vs2, uint32_t vm, data =3D FIELD_DP32(data, VDATA, MLEN, s->mlen); data =3D FIELD_DP32(data, VDATA, VM, vm); data =3D FIELD_DP32(data, VDATA, LMUL, s->lmul); - desc =3D tcg_const_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); + desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); =20 tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd)); tcg_gen_addi_ptr(src2, cpu_env, vreg_ofs(s, vs2)); @@ -886,7 +880,6 @@ static bool opivx_trans(uint32_t vd, uint32_t rs1, uint= 32_t vs2, uint32_t vm, tcg_temp_free_ptr(mask); tcg_temp_free_ptr(src2); tcg_temp_free(src1); - tcg_temp_free_i32(desc); gen_set_label(over); return true; } @@ -1014,14 +1007,14 @@ static bool opivi_trans(uint32_t vd, uint32_t imm, = uint32_t vs2, uint32_t vm, mask =3D tcg_temp_new_ptr(); src2 =3D tcg_temp_new_ptr(); if (zx) { - src1 =3D tcg_const_tl(imm); + src1 =3D tcg_constant_tl(imm); } else { - src1 =3D tcg_const_tl(sextract64(imm, 0, 5)); + src1 =3D tcg_constant_tl(sextract64(imm, 0, 5)); } data =3D FIELD_DP32(data, VDATA, MLEN, s->mlen); data =3D FIELD_DP32(data, VDATA, VM, vm); data =3D FIELD_DP32(data, VDATA, LMUL, s->lmul); - desc =3D tcg_const_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); + desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); =20 tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd)); tcg_gen_addi_ptr(src2, cpu_env, vreg_ofs(s, vs2)); @@ -1032,8 +1025,6 @@ static bool opivi_trans(uint32_t vd, uint32_t imm, ui= nt32_t vs2, uint32_t vm, tcg_temp_free_ptr(dest); tcg_temp_free_ptr(mask); tcg_temp_free_ptr(src2); - tcg_temp_free(src1); - tcg_temp_free_i32(desc); gen_set_label(over); return true; } @@ -1080,9 +1071,8 @@ GEN_OPIVI_GVEC_TRANS(vadd_vi, 0, vadd_vx, addi) static void tcg_gen_gvec_rsubi(unsigned vece, uint32_t dofs, uint32_t aofs, int64_t c, uint32_t oprsz, uint32_t maxsz) { - TCGv_i64 tmp =3D tcg_const_i64(c); + TCGv_i64 tmp =3D tcg_constant_i64(c); tcg_gen_gvec_rsubs(vece, dofs, aofs, tmp, oprsz, maxsz); - tcg_temp_free_i64(tmp); } =20 GEN_OPIVI_GVEC_TRANS(vrsub_vi, 0, vrsub_vx, rsubi) @@ -1682,7 +1672,7 @@ static bool trans_vmv_v_x(DisasContext *s, arg_vmv_v_= x *a) tcg_gen_gvec_dup_tl(s->sew, vreg_ofs(s, a->rd), MAXSZ(s), MAXSZ(s), s1); } else { - TCGv_i32 desc ; + TCGv_i32 desc; TCGv_i64 s1_i64 =3D tcg_temp_new_i64(); TCGv_ptr dest =3D tcg_temp_new_ptr(); uint32_t data =3D FIELD_DP32(0, VDATA, LMUL, s->lmul); @@ -1692,12 +1682,11 @@ static bool trans_vmv_v_x(DisasContext *s, arg_vmv_= v_x *a) }; =20 tcg_gen_ext_tl_i64(s1_i64, s1); - desc =3D tcg_const_i32(simd_desc(s->vlen / 8, s->vlen / 8, dat= a)); + desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, = data)); tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, a->rd)); fns[s->sew](dest, s1_i64, cpu_env, desc); =20 tcg_temp_free_ptr(dest); - tcg_temp_free_i32(desc); tcg_temp_free_i64(s1_i64); } =20 @@ -1729,15 +1718,13 @@ static bool trans_vmv_v_i(DisasContext *s, arg_vmv_= v_i *a) TCGLabel *over =3D gen_new_label(); tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_vl, 0, over); =20 - s1 =3D tcg_const_i64(simm); + s1 =3D tcg_constant_i64(simm); dest =3D tcg_temp_new_ptr(); - desc =3D tcg_const_i32(simd_desc(s->vlen / 8, s->vlen / 8, dat= a)); + desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, = data)); tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, a->rd)); fns[s->sew](dest, s1, cpu_env, desc); =20 tcg_temp_free_ptr(dest); - tcg_temp_free_i32(desc); - tcg_temp_free_i64(s1); gen_set_label(over); } return true; @@ -1866,7 +1853,7 @@ static bool opfvf_trans(uint32_t vd, uint32_t rs1, ui= nt32_t vs2, dest =3D tcg_temp_new_ptr(); mask =3D tcg_temp_new_ptr(); src2 =3D tcg_temp_new_ptr(); - desc =3D tcg_const_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); + desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); =20 tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd)); tcg_gen_addi_ptr(src2, cpu_env, vreg_ofs(s, vs2)); @@ -1877,7 +1864,6 @@ static bool opfvf_trans(uint32_t vd, uint32_t rs1, ui= nt32_t vs2, tcg_temp_free_ptr(dest); tcg_temp_free_ptr(mask); tcg_temp_free_ptr(src2); - tcg_temp_free_i32(desc); gen_set_label(over); return true; } @@ -2231,12 +2217,11 @@ static bool trans_vfmv_v_f(DisasContext *s, arg_vfm= v_v_f *a) tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_vl, 0, over); =20 dest =3D tcg_temp_new_ptr(); - desc =3D tcg_const_i32(simd_desc(s->vlen / 8, s->vlen / 8, dat= a)); + desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, = data)); tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, a->rd)); fns[s->sew - 1](dest, cpu_fpr[a->rs1], cpu_env, desc); =20 tcg_temp_free_ptr(dest); - tcg_temp_free_i32(desc); gen_set_label(over); } return true; @@ -2428,7 +2413,7 @@ static bool trans_vmpopc_m(DisasContext *s, arg_rmr *= a) mask =3D tcg_temp_new_ptr(); src2 =3D tcg_temp_new_ptr(); dst =3D tcg_temp_new(); - desc =3D tcg_const_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); + desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data= )); =20 tcg_gen_addi_ptr(src2, cpu_env, vreg_ofs(s, a->rs2)); tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0)); @@ -2439,7 +2424,6 @@ static bool trans_vmpopc_m(DisasContext *s, arg_rmr *= a) tcg_temp_free_ptr(mask); tcg_temp_free_ptr(src2); tcg_temp_free(dst); - tcg_temp_free_i32(desc); return true; } return false; @@ -2460,7 +2444,7 @@ static bool trans_vmfirst_m(DisasContext *s, arg_rmr = *a) mask =3D tcg_temp_new_ptr(); src2 =3D tcg_temp_new_ptr(); dst =3D tcg_temp_new(); - desc =3D tcg_const_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); + desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data= )); =20 tcg_gen_addi_ptr(src2, cpu_env, vreg_ofs(s, a->rs2)); tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0)); @@ -2471,7 +2455,6 @@ static bool trans_vmfirst_m(DisasContext *s, arg_rmr = *a) tcg_temp_free_ptr(mask); tcg_temp_free_ptr(src2); tcg_temp_free(dst); - tcg_temp_free_i32(desc); return true; } return false; @@ -2636,15 +2619,13 @@ static void vec_element_loadx(DisasContext *s, TCGv= _i64 dest, tcg_temp_free_i32(ofs); =20 /* Flush out-of-range indexing to zero. */ - t_vlmax =3D tcg_const_i64(vlmax); - t_zero =3D tcg_const_i64(0); + t_vlmax =3D tcg_constant_i64(vlmax); + t_zero =3D tcg_constant_i64(0); tcg_gen_extu_tl_i64(t_idx, idx); =20 tcg_gen_movcond_i64(TCG_COND_LTU, dest, t_idx, t_vlmax, dest, t_zero); =20 - tcg_temp_free_i64(t_vlmax); - tcg_temp_free_i64(t_zero); tcg_temp_free_i64(t_idx); } =20 --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625805795819268.20748373088713; Thu, 8 Jul 2021 21:43:15 -0700 (PDT) Received: from localhost ([::1]:43230 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iM6-00068w-Ng for importer@patchew.org; Fri, 09 Jul 2021 00:43:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53650) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i5k-0006Ch-Is for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:25 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:41631) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5d-0001Rg-2w for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:20 -0400 Received: by mail-pg1-x529.google.com with SMTP id s18so8692606pgg.8 for ; Thu, 08 Jul 2021 21:26:11 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=nqyVs0TjuFo6Br+0zwXeBvSWIus7E5o2mh04xLu+NTU=; b=MR34U9URnKd4ZYmnWwMZU2EnJGXAla7Zvhd2EVc8rOAMrQPelJr9qVfzROePtDFtfU QMpugOnK095Z+mKT6ccCb5vuOsVS1ZBDif3yvqGofvt44EFUbLtMCBGxydm0y5bPn8Mt VhGpa/LpY3MGvRuDbN200E62/R5tbwerKjJdDN7/bEGJ708O+iRAOnXKTd3Zd9CVuHuh fLQBS4NoEh57POYCaHGi8ngGBL2bR6cBRayRJhc0fcy6P37RpUb1WI/tZakb8sq3uMub N/ykjKnPwFvfJIevUJgJifiSCzKRM7Fy2kK8d8iqXOAlCdVDjpslsd2WMTFCpbcdpxIF KBlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=nqyVs0TjuFo6Br+0zwXeBvSWIus7E5o2mh04xLu+NTU=; b=ip+5hiHFzPbDmD5HjtuMFnuqvTQNiRcOX/oF3suvpJu7S0Yb6Zqed/iY3/3Mv6/ng/ zLCozRfjBed8FxMMT0IgINP0YkCoH63eLSQPsCMiEaL+zG+Tau9GwhL4+dV0B8CN91IQ F9TInB4YI+xhTXLNuOShjRspusO9rxTqX7dFLohDRUnFDVXhzgASXJ8HnhgLhSSvobZg 2iXJ2U0vhwTqRfGaeZXx/vA1GndF0E2qmMLtBR0FUz7MqpjaoUM+42fGej6b92txenc1 mdhZ7BUJWTXv760FISXaye50addZ4Xy+NQf8XM26rhfsiLmYZb/yS9GYmONWYE04MlHB L+4A== X-Gm-Message-State: AOAM53208qYt3tUWbUGMsUItNJrLkjQAE9qW1yftTBCATtUG8QiUABq5 0UJm5JWMc5rrjVLY2F2GoxKDUqi0rTH9eg== X-Google-Smtp-Source: ABdhPJxIroeJxKcpGRYQWnbE9paRT2jTJV6GLZQ9NqyFtPCGLYicVogM0zBt73xOlCvLwsT7fLKZNQ== X-Received: by 2002:a63:2446:: with SMTP id k67mr35478407pgk.360.1625804770819; Thu, 08 Jul 2021 21:26:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 02/17] target/riscv: Introduce gpr_src, gpr_dst Date: Thu, 8 Jul 2021 21:25:53 -0700 Message-Id: <20210709042608.883256-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625805797615100001 Content-Type: text/plain; charset="utf-8" New helpers that do not force tcg globals into temps, returning a constant 0 for $zero as source and a new temp for $zero as destination. Use them in gen_arith_imm_{fn,tl}, gen_arith, gen_unary. These are simplest because no further temps required. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/translate.c | 83 ++++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 38 deletions(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index bba5ad8ec4..2cfcb849b8 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -65,6 +65,8 @@ typedef struct DisasContext { uint16_t mlen; bool vl_eq_vlmax; CPUState *cs; + TCGv zero; + TCGv sink; } DisasContext; =20 static inline bool has_ext(DisasContext *ctx, uint32_t ext) @@ -202,6 +204,14 @@ static inline void gen_get_gpr(TCGv t, int reg_num) } } =20 +static TCGv gpr_src(DisasContext *ctx, int reg_num) +{ + if (reg_num =3D=3D 0) { + return ctx->zero; + } + return cpu_gpr[reg_num]; +} + /* Wrapper for setting reg values - need to check of reg is zero since * cpu_gpr[0] is not actually allocated. this is more for safety purposes, * since we usually avoid calling the OP_TYPE_gen function if we see a wri= te to @@ -214,6 +224,17 @@ static inline void gen_set_gpr(int reg_num_dst, TCGv t) } } =20 +static TCGv gpr_dst(DisasContext *ctx, int reg_num) +{ + if (reg_num =3D=3D 0) { + if (ctx->sink =3D=3D NULL) { + ctx->sink =3D tcg_temp_new(); + } + return ctx->sink; + } + return cpu_gpr[reg_num]; +} + static void gen_mulhsu(TCGv ret, TCGv arg1, TCGv arg2) { TCGv rl =3D tcg_temp_new(); @@ -442,33 +463,21 @@ static int ex_rvc_shifti(DisasContext *ctx, int imm) static bool gen_arith_imm_fn(DisasContext *ctx, arg_i *a, void (*func)(TCGv, TCGv, target_long)) { - TCGv source1; - source1 =3D tcg_temp_new(); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); =20 - gen_get_gpr(source1, a->rs1); - - (*func)(source1, source1, a->imm); - - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); + (*func)(dest, src1, a->imm); return true; } =20 static bool gen_arith_imm_tl(DisasContext *ctx, arg_i *a, void (*func)(TCGv, TCGv, TCGv)) { - TCGv source1, source2; - source1 =3D tcg_temp_new(); - source2 =3D tcg_temp_new(); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); + TCGv src2 =3D tcg_constant_tl(a->imm); =20 - gen_get_gpr(source1, a->rs1); - tcg_gen_movi_tl(source2, a->imm); - - (*func)(source1, source1, source2); - - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); - tcg_temp_free(source2); + (*func)(dest, src1, src2); return true; } =20 @@ -758,18 +767,11 @@ static void gen_add_uw(TCGv ret, TCGv arg1, TCGv arg2) static bool gen_arith(DisasContext *ctx, arg_r *a, void(*func)(TCGv, TCGv, TCGv)) { - TCGv source1, source2; - source1 =3D tcg_temp_new(); - source2 =3D tcg_temp_new(); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); + TCGv src2 =3D gpr_src(ctx, a->rs2); =20 - gen_get_gpr(source1, a->rs1); - gen_get_gpr(source2, a->rs2); - - (*func)(source1, source1, source2); - - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); - tcg_temp_free(source2); + (*func)(dest, src1, src2); return true; } =20 @@ -871,14 +873,10 @@ static void gen_clz(TCGv ret, TCGv arg1) static bool gen_unary(DisasContext *ctx, arg_r2 *a, void(*func)(TCGv, TCGv)) { - TCGv source =3D tcg_temp_new(); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); =20 - gen_get_gpr(source, a->rs1); - - (*func)(source, source); - - gen_set_gpr(a->rd, source); - tcg_temp_free(source); + (*func)(dest, src1); return true; } =20 @@ -952,8 +950,12 @@ static void riscv_tr_init_disas_context(DisasContextBa= se *dcbase, CPUState *cs) ctx->cs =3D cs; } =20 -static void riscv_tr_tb_start(DisasContextBase *db, CPUState *cpu) +static void riscv_tr_tb_start(DisasContextBase *dcbase, CPUState *cpu) { + DisasContext *ctx =3D container_of(dcbase, DisasContext, base); + + ctx->sink =3D NULL; + ctx->zero =3D tcg_constant_tl(0); } =20 static void riscv_tr_insn_start(DisasContextBase *dcbase, CPUState *cpu) @@ -988,6 +990,11 @@ static void riscv_tr_translate_insn(DisasContextBase *= dcbase, CPUState *cpu) decode_opc(env, ctx, opcode16); ctx->base.pc_next =3D ctx->pc_succ_insn; =20 + if (ctx->sink) { + tcg_temp_free(ctx->sink); + ctx->sink =3D NULL; + } + if (ctx->base.is_jmp =3D=3D DISAS_NEXT) { target_ulong page_start; =20 --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625805906942794.260851867629; Thu, 8 Jul 2021 21:45:06 -0700 (PDT) Received: from localhost ([::1]:48588 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iNt-0001F2-IQ for importer@patchew.org; Fri, 09 Jul 2021 00:45:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53682) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i5l-0006Cr-Qb for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:25 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]:41519) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5d-0001St-3G for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:21 -0400 Received: by mail-pf1-x430.google.com with SMTP id f17so7582277pfj.8 for ; Thu, 08 Jul 2021 21:26:12 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DkRSjZK4s1X6JiwKyTRkh9Sv6TW6zjiR4pJsIp26yK4=; b=dYpR5sCQ/MBKQk+9TLiHzrj2ulvjmAuAd1wwtBlGHkxzlYrLO7GY+EBa88gM6m07rL v+drd/gYuUlRWVRQgwlcFv0XgRyAZ/laoF5ydVKtKj1IISxrbDxHUdccKyWi+EKifhob giijSTAtuXNRDhQ1E7tyb2JG1WkBQDaGdNpHLmKDB1TkjDlBhXEvtAwFq+0WtIHeMbYb Q5EDYz6aErTiPtTBH6qc44Wk7yq5Z9/za/GMrzC1ThAO/766sQKQneHep06QJajOmbvE UOKFGoppp7HQk0qdx24F3u8YYsGh4ciX57NNdeY7il2CPk9E5QbjjpY89vlHWCT8UWDO W2IQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DkRSjZK4s1X6JiwKyTRkh9Sv6TW6zjiR4pJsIp26yK4=; b=EIbUU1777Zgt/0L5GOBxe+k5xe1OtvdpO2cJbhfmVv35MFs+sJY6FcGieaio19HRjT 50bPaV+O5kwS4FWdD8fCw12xAEHHc4eCkl701HxwcjCQkEwI06PqzMu1N31ejgb3apGK qUg9BqK8TUS7Lul94NB7Y/vjWv51c1H4rtsmgHpH8isv0rO+s9R2psjuxxXBDt8Tv2Xf G+x6Yvm6V2k4olcoBFjJ01LirSOb8c9V+/WoV8hfa843XVz247QYwgcppoCEVqRcKRNH WYNq8lYM1tCKx2tPww4dcyjg1xaHEZ/Pywv7a1w/MGNcdXCduYglRWxpTyhO3vkPR0yZ TZuA== X-Gm-Message-State: AOAM530UamGGXCJo66e0AVax+LkieNDc5PQ9fbdMhE1Onw1n+9pRak9v Nb6qg0aHe6Q1koxeQ6Jmz7rPjrYHVoEusA== X-Google-Smtp-Source: ABdhPJyuubcrSP8Nsl6YWMhgWUEHvsG9aF1VeYJ8TDU8ntkUScv/w9VfxcnHaDRxyV8RyRtuthzpdA== X-Received: by 2002:a63:fa50:: with SMTP id g16mr36247530pgk.16.1625804771424; Thu, 08 Jul 2021 21:26:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 03/17] target/riscv: Use gpr_{src,dst} in shift operations Date: Thu, 8 Jul 2021 21:25:54 -0700 Message-Id: <20210709042608.883256-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::430; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625805907971100001 Content-Type: text/plain; charset="utf-8" These operations are slightly more complicated since we need to crop the shift operand. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/translate.c | 68 +++++++++++++++------------------------- 1 file changed, 26 insertions(+), 42 deletions(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 2cfcb849b8..a60b198623 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -778,18 +778,14 @@ static bool gen_arith(DisasContext *ctx, arg_r *a, static bool gen_shift(DisasContext *ctx, arg_r *a, void(*func)(TCGv, TCGv, TCGv)) { - TCGv source1 =3D tcg_temp_new(); - TCGv source2 =3D tcg_temp_new(); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); + TCGv src2 =3D gpr_src(ctx, a->rs2); + TCGv ext2 =3D tcg_temp_new(); =20 - gen_get_gpr(source1, a->rs1); - gen_get_gpr(source2, a->rs2); - - tcg_gen_andi_tl(source2, source2, TARGET_LONG_BITS - 1); - (*func)(source1, source1, source2); - - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); - tcg_temp_free(source2); + tcg_gen_andi_tl(ext2, src2, TARGET_LONG_BITS - 1); + (*func)(dest, src1, ext2); + tcg_temp_free(ext2); return true; } =20 @@ -805,58 +801,46 @@ static uint32_t opcode_at(DisasContextBase *dcbase, t= arget_ulong pc) static bool gen_shifti(DisasContext *ctx, arg_shift *a, void(*func)(TCGv, TCGv, TCGv)) { + TCGv dest, src1, src2; + if (a->shamt >=3D TARGET_LONG_BITS) { return false; } =20 - TCGv source1 =3D tcg_temp_new(); - TCGv source2 =3D tcg_temp_new(); + dest =3D gpr_dst(ctx, a->rd); + src1 =3D gpr_src(ctx, a->rs1); + src2 =3D tcg_constant_tl(a->shamt); =20 - gen_get_gpr(source1, a->rs1); - - tcg_gen_movi_tl(source2, a->shamt); - (*func)(source1, source1, source2); - - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); - tcg_temp_free(source2); + (*func)(dest, src1, src2); return true; } =20 static bool gen_shiftw(DisasContext *ctx, arg_r *a, void(*func)(TCGv, TCGv, TCGv)) { - TCGv source1 =3D tcg_temp_new(); - TCGv source2 =3D tcg_temp_new(); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); + TCGv src2 =3D gpr_src(ctx, a->rs2); + TCGv ext2 =3D tcg_temp_new(); =20 - gen_get_gpr(source1, a->rs1); - gen_get_gpr(source2, a->rs2); + tcg_gen_andi_tl(ext2, src2, 31); + (*func)(dest, src1, ext2); + tcg_gen_ext32s_tl(dest, dest); =20 - tcg_gen_andi_tl(source2, source2, 31); - (*func)(source1, source1, source2); - tcg_gen_ext32s_tl(source1, source1); - - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); - tcg_temp_free(source2); + tcg_temp_free(ext2); return true; } =20 static bool gen_shiftiw(DisasContext *ctx, arg_shift *a, void(*func)(TCGv, TCGv, TCGv)) { - TCGv source1 =3D tcg_temp_new(); - TCGv source2 =3D tcg_temp_new(); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); + TCGv src2 =3D tcg_constant_tl(a->shamt); =20 - gen_get_gpr(source1, a->rs1); - tcg_gen_movi_tl(source2, a->shamt); + (*func)(dest, src1, src2); + tcg_gen_ext32s_tl(dest, dest); =20 - (*func)(source1, source1, source2); - tcg_gen_ext32s_tl(source1, source1); - - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); - tcg_temp_free(source2); return true; } =20 --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625805959053797.3657562446592; Thu, 8 Jul 2021 21:45:59 -0700 (PDT) Received: from localhost ([::1]:51906 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iOj-0003Rd-Vi for importer@patchew.org; Fri, 09 Jul 2021 00:45:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53722) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i5o-0006D9-K4 for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:27 -0400 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]:43793) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5d-0001TZ-ST for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:24 -0400 Received: by mail-pf1-x434.google.com with SMTP id a127so7568471pfa.10 for ; Thu, 08 Jul 2021 21:26:13 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dOZ5v8S9L+KcISDEuXtshwNMh5i3cnKKIThbnOAdoo8=; b=Ypf9XI5QYgDVB/e03IkRtUr91a/prrD3pueB984lS/MrJzNrQHJNO5y0l1HcE3C3jT fa++gGaP6C1rzJlypFry4MJcHGqqilAAmZkxF46MzvtiOxTpWhltkbs32Hj8bPBB2u/w AgyS7XTPZYdAmRkP+QYHDFCDDL/HWCHC8UoR+bPF2jCZKM7++SyMH3Uvx/L0e8iniOOG firQpldxXo2tQPyfJbCpsdR4+hxIkjG4wR9Ki4W+ivNzSAl2E3OuUZC6Nwht6E10S6RS F2DiBAQ3bSd1O0RWcshIlrmCagqSU6InBPTjPcsknagD48K2201q2QBQyIDreFwQNYoO l7Bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=dOZ5v8S9L+KcISDEuXtshwNMh5i3cnKKIThbnOAdoo8=; b=EcA4YCpMWhHFjJMMOeUvxrzaL2cueQmNoh7WEOhmRyGh1gizqrgOHo7hZqiYzhFXMg sAhB6di0HMXoCWFA5xp98Wrbu1yb/GSfN8EpNtvT21Yovzz/XYfWjR3tbtisMm8opikN Z5NMnFda2DrxbTUbMh1gllrSWIddmJ78YDr6UEHfamgoguDbhcAs7eU/y6QabvEc5FcG k2hdIWwx5X0RhraF/xkVM0kUhsluLYWACXFCocfah0Y9vKFe8X+W/L/V5hWhMniW1dE2 R4JeO49uBFjKyuBLU7GQQGV657/3BkKnaTrTdfTVZdQCD2UuW0tmEVJ56NgpI8Dxybkp 14dw== X-Gm-Message-State: AOAM530EIQLpv/UgdkJTO4iuHesqj90NJ04hdZkQqgQBArwXLF9LLSeD Klgv0zN3TEMlKNlFr7yjFpca1DHA9nwY0A== X-Google-Smtp-Source: ABdhPJxRV68D1b9W4XoIhN8oALytE+1lYDw8fjEmoGmOBOPgdRL8XrfmI4QmRqwWZp9l0ISJWEx/3A== X-Received: by 2002:a65:41c7:: with SMTP id b7mr2517533pgq.81.1625804772055; Thu, 08 Jul 2021 21:26:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 04/17] target/riscv: Use gpr_{src, dst} in word division operations Date: Thu, 8 Jul 2021 21:25:55 -0700 Message-Id: <20210709042608.883256-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::434; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x434.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625805959463100001 Content-Type: text/plain; charset="utf-8" Allocate new temps to hold the source extensions, and extend directly from the source registers. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/translate.c | 46 +++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index a60b198623..7dedfd548b 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -502,42 +502,40 @@ static void gen_mulw(TCGv ret, TCGv arg1, TCGv arg2) static bool gen_arith_div_w(DisasContext *ctx, arg_r *a, void(*func)(TCGv, TCGv, TCGv)) { - TCGv source1, source2; - source1 =3D tcg_temp_new(); - source2 =3D tcg_temp_new(); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); + TCGv src2 =3D gpr_src(ctx, a->rs2); + TCGv ext1 =3D tcg_temp_new(); + TCGv ext2 =3D tcg_temp_new(); =20 - gen_get_gpr(source1, a->rs1); - gen_get_gpr(source2, a->rs2); - tcg_gen_ext32s_tl(source1, source1); - tcg_gen_ext32s_tl(source2, source2); + tcg_gen_ext32s_tl(ext1, src1); + tcg_gen_ext32s_tl(ext2, src2); =20 - (*func)(source1, source1, source2); + (*func)(dest, ext1, ext2); + tcg_temp_free(ext1); + tcg_temp_free(ext2); =20 - tcg_gen_ext32s_tl(source1, source1); - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); - tcg_temp_free(source2); + tcg_gen_ext32s_tl(dest, dest); return true; } =20 static bool gen_arith_div_uw(DisasContext *ctx, arg_r *a, void(*func)(TCGv, TCGv, TCGv)) { - TCGv source1, source2; - source1 =3D tcg_temp_new(); - source2 =3D tcg_temp_new(); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); + TCGv src2 =3D gpr_src(ctx, a->rs2); + TCGv ext1 =3D tcg_temp_new(); + TCGv ext2 =3D tcg_temp_new(); =20 - gen_get_gpr(source1, a->rs1); - gen_get_gpr(source2, a->rs2); - tcg_gen_ext32u_tl(source1, source1); - tcg_gen_ext32u_tl(source2, source2); + tcg_gen_ext32u_tl(ext1, src1); + tcg_gen_ext32u_tl(ext2, src2); =20 - (*func)(source1, source1, source2); + (*func)(dest, ext1, ext2); + tcg_temp_free(ext1); + tcg_temp_free(ext2); =20 - tcg_gen_ext32s_tl(source1, source1); - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); - tcg_temp_free(source2); + tcg_gen_ext32s_tl(dest, dest); return true; } =20 --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625806161477970.0943556869773; Thu, 8 Jul 2021 21:49:21 -0700 (PDT) Received: from localhost ([::1]:60648 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iRx-0000oQ-AQ for importer@patchew.org; Fri, 09 Jul 2021 00:49:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53772) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i5q-0006Da-HS for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:27 -0400 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]:44823) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5d-0001UF-R6 for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:26 -0400 Received: by mail-pg1-x52a.google.com with SMTP id u14so8667184pga.11 for ; Thu, 08 Jul 2021 21:26:13 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=xyZhbP2MZlS3npwt40wzKePMMUn3bMJXYN7FzSUZsjk=; b=cZteOHr+bvPu/BxKx1Yk14ZXKUUEiXfbuvgagIwzZ9hqoav5CX5zg7dThcmBGo36tf V20b0E/3qVpsIb0PrhtAxJnzcrYm24F7bDiwPfIYkoh7rODqcfwp4Bs+ONUVAt3uw00W JB4msXKUVQbaFtbBArQq4j4NjoZOTjemXN9CccCD+qz72qbuzonqiiyFXSGaGeYXteig 8EQOtQeyN/xtYCApsHPxngKXIGfSr/vCEkPgca+hxtB9qV0s7bnIgAcT8leosXEf9GFX THVMrpVT94ECvUpucLU0Y6dvoO1OW2BmkQzbpNBwjBr07ye1cmKDXK6rcpjT+RTpPbij oHfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=xyZhbP2MZlS3npwt40wzKePMMUn3bMJXYN7FzSUZsjk=; b=Qmuu752zNnnR/FDjIhMEWrUz3h+ULf5wfi6LuI+4FnkeOxhvyf3Qj2i3qbwSZEbiBL KRLkP0eC8EjVZ5XnhpLF66kDBrlO4exiK4bxnEyEm2PMjWEryWW9ePjcRtsniqwclpqZ KJkqmmWbSG5CYA+m+ORcfEO53Z/8xwhChwGRs8CWTl+TaYRl2M1ew1vFalsCzZUjbST0 bGHmCS9GMZqQiw4JrcR04EbeZpn+7SNEuwNYgytOY+SfeV+AepRPOw8elgt+BNVVBt3J G+jjw1DTDRz4ZjEHa5O52RJjbPbqMiwXYOANK4CidMfr+PjXdR2/k4LFSYxhN2v8aYFs H6yA== X-Gm-Message-State: AOAM531HpuOuudBU8BzyGw3dsmtmG6b6RzU7dC3Xe1Rz2BOKHQ5meHRo vrMICieueZyPJxU+PKViQU2O9Q/QYW+VFg== X-Google-Smtp-Source: ABdhPJwE+++LQq8kETIRo/S+wMDzqQngOYswS9vOYavj5G11r0CbtTYSwUD3CJodlOiF4XshlZhOIg== X-Received: by 2002:a63:6586:: with SMTP id z128mr8861382pgb.446.1625804772713; Thu, 08 Jul 2021 21:26:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 05/17] target/riscv: Use gpr_{src, dst} and tcg_constant_tl in gen_grevi Date: Thu, 8 Jul 2021 21:25:56 -0700 Message-Id: <20210709042608.883256-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52a; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625806162294100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/translate.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 7dedfd548b..6ad40e43b0 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -620,23 +620,16 @@ static void gen_sro(TCGv ret, TCGv arg1, TCGv arg2) =20 static bool gen_grevi(DisasContext *ctx, arg_grevi *a) { - TCGv source1 =3D tcg_temp_new(); - TCGv source2; - - gen_get_gpr(source1, a->rs1); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); =20 if (a->shamt =3D=3D (TARGET_LONG_BITS - 8)) { /* rev8, byte swaps */ - tcg_gen_bswap_tl(source1, source1); + tcg_gen_bswap_tl(dest, src1); } else { - source2 =3D tcg_temp_new(); - tcg_gen_movi_tl(source2, a->shamt); - gen_helper_grev(source1, source1, source2); - tcg_temp_free(source2); + TCGv src2 =3D tcg_constant_tl(a->shamt); + gen_helper_grev(dest, src1, src2); } - - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); return true; } =20 --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625805644511122.65019597205367; Thu, 8 Jul 2021 21:40:44 -0700 (PDT) Received: from localhost ([::1]:33954 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iJf-0006Cy-Fz for importer@patchew.org; Fri, 09 Jul 2021 00:40:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53790) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i5r-0006Dc-9G for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:27 -0400 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]:46046) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5e-0001UT-Fu for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:27 -0400 Received: by mail-pf1-x434.google.com with SMTP id q10so7543764pfj.12 for ; Thu, 08 Jul 2021 21:26:13 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YLQLWU6UQVIyCDrZPADZhL8rRwVuD5u3CTypQGrVN5o=; b=io3KN9JTJ9ZQrhLCPU9wSB49BzCvWwNni6ZeOcJrCOves+hnpye0IVAoUSXHEhRxyN eTVYcHtyaIFQTA0Sdt7M4BNJ6d3dxzRlKYZSt6+hONmPn8AuAGANQDPG6D8et78gYyjc DTEPfFQLVcflqPH1uwXeEMzKRyicqmWYz90e27Y8l5RBjVYbuZFOelIlXwqo2qilHicD OzXX3G6bDLgi22ywkar/uCT5mNdxtdajP74bFEAJ+KWrmPCOV07SbW7T3mnzAKBFPoZD YeR6NdTdCXk8RrMf9jpQJAxCEKnLNSRz4QX/buRLOHh6a1hAng4lXecJpgw/b3/SSDya qhfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YLQLWU6UQVIyCDrZPADZhL8rRwVuD5u3CTypQGrVN5o=; b=IttcJcc9nhX8qJme6pjtebuh/nN1PvxMtnE+lro13FfTEyxX5h4vRC67HhJfDdvmrd F9jKG6K+XGkukG1G5wLpg0U4j988b4btN8Y4khQxIidQRKN4Bdfx8ToFwbXTFab8HPlI 0X1xUl8CX0IBl8Ev8RCBclIoXFVhZjRGuhHm9fBTT4gcQsjj6UX7wYyqdYDx7wCPhRdQ HvhD2H/j/rcZ7o8cAwckPlLOcJo5knHjCg0X7XeS74+fli1BS4mOJD8z8iJvnVoto3nw PRWXG4j1qVNDFUs/P4Ec8VHZgpNBa4vv4+IiVS8XWlZL9J7ctiuaNeIyYVL5Wi1WmuQm FD3w== X-Gm-Message-State: AOAM533uNysbO3mP7vURAyqJ3htQIIStY02PRytmggp4X6YbMe27Fy/P /PMF2fNY+GbXv7gWFtFAIO0S3ARyAKRZdA== X-Google-Smtp-Source: ABdhPJy8QIPHgs66I91NkTId3fzcObVtOjCC32X+/BPQMtjrTT5PDDly9I/RvJpoMno+NUejTiXtoA== X-Received: by 2002:a63:ba48:: with SMTP id l8mr30087632pgu.259.1625804773282; Thu, 08 Jul 2021 21:26:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 06/17] target/riscv: Use gpr_src in branches Date: Thu, 8 Jul 2021 21:25:57 -0700 Message-Id: <20210709042608.883256-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::434; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x434.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625805646449100001 Content-Type: text/plain; charset="utf-8" Narrow the scope of t0 in trans_jalr. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/insn_trans/trans_rvi.c.inc | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/target/riscv/insn_trans/trans_rvi.c.inc b/target/riscv/insn_tr= ans/trans_rvi.c.inc index 6e736c9d0d..a603925637 100644 --- a/target/riscv/insn_trans/trans_rvi.c.inc +++ b/target/riscv/insn_trans/trans_rvi.c.inc @@ -54,24 +54,25 @@ static bool trans_jal(DisasContext *ctx, arg_jal *a) =20 static bool trans_jalr(DisasContext *ctx, arg_jalr *a) { - /* no chaining with JALR */ TCGLabel *misaligned =3D NULL; - TCGv t0 =3D tcg_temp_new(); =20 - - gen_get_gpr(cpu_pc, a->rs1); - tcg_gen_addi_tl(cpu_pc, cpu_pc, a->imm); + tcg_gen_addi_tl(cpu_pc, gpr_src(ctx, a->rs1), a->imm); tcg_gen_andi_tl(cpu_pc, cpu_pc, (target_ulong)-2); =20 if (!has_ext(ctx, RVC)) { + TCGv t0 =3D tcg_temp_new(); + misaligned =3D gen_new_label(); tcg_gen_andi_tl(t0, cpu_pc, 0x2); tcg_gen_brcondi_tl(TCG_COND_NE, t0, 0x0, misaligned); + tcg_temp_free(t0); } =20 if (a->rd !=3D 0) { tcg_gen_movi_tl(cpu_gpr[a->rd], ctx->pc_succ_insn); } + + /* No chaining with JALR. */ lookup_and_goto_ptr(ctx); =20 if (misaligned) { @@ -80,21 +81,18 @@ static bool trans_jalr(DisasContext *ctx, arg_jalr *a) } ctx->base.is_jmp =3D DISAS_NORETURN; =20 - tcg_temp_free(t0); return true; } =20 static bool gen_branch(DisasContext *ctx, arg_b *a, TCGCond cond) { TCGLabel *l =3D gen_new_label(); - TCGv source1, source2; - source1 =3D tcg_temp_new(); - source2 =3D tcg_temp_new(); - gen_get_gpr(source1, a->rs1); - gen_get_gpr(source2, a->rs2); + TCGv src1 =3D gpr_src(ctx, a->rs1); + TCGv src2 =3D gpr_src(ctx, a->rs2); =20 - tcg_gen_brcond_tl(cond, source1, source2, l); + tcg_gen_brcond_tl(cond, src1, src2, l); gen_goto_tb(ctx, 1, ctx->pc_succ_insn); + gen_set_label(l); /* branch taken */ =20 if (!has_ext(ctx, RVC) && ((ctx->base.pc_next + a->imm) & 0x3)) { @@ -105,9 +103,6 @@ static bool gen_branch(DisasContext *ctx, arg_b *a, TCG= Cond cond) } ctx->base.is_jmp =3D DISAS_NORETURN; =20 - tcg_temp_free(source1); - tcg_temp_free(source2); - return true; } =20 --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625805241920837.7988147366646; Thu, 8 Jul 2021 21:34:01 -0700 (PDT) Received: from localhost ([::1]:41744 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iDA-00016A-Nq for importer@patchew.org; Fri, 09 Jul 2021 00:34:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53800) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i5s-0006EM-1e for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:28 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:38613) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5f-0001Uv-H8 for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:27 -0400 Received: by mail-pg1-x536.google.com with SMTP id h4so8694135pgp.5 for ; Thu, 08 Jul 2021 21:26:14 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=szhSmb+IJx7ewakRoFrjDYHYotl3MpERiZt5zOnrFx0=; b=q7uMINchCES1mQq+pX+G8iVgE775IJn5ShMM9umTHDf3gf//6wdJ/f2A2FhH2l5z1k u7GrAC/UF8rqBX3vcd1s13JDghVlPsLNYulg2TBTE+bAFAn0E8gIl4lCnYSQA2ZWOLc6 awBgUQIzKRqjU0Wj9ftICavliqUWYhP3dPLiSZeVSrVXVqZIYRZ7rl+86nb0IUbL6ew1 YCLEZdjBAW5839prdg/q90nzY/WG/FaS9D14r6bCTB0avK+LADa4OtIEXqPrLtA85ZY6 HFe+0NP8RwSss60qGlZVOJBUCAW/ctwyJQlLizccbJa0Np/Qm2h2wQH8h5xEFgWzNuTd S9vA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=szhSmb+IJx7ewakRoFrjDYHYotl3MpERiZt5zOnrFx0=; b=cG7LBTOxMYB+vBDE7XTJkz0QfDcI2xwI2767ErZIVDkSy4QlhnIbexWu8rOaLT3Gp8 K0r2vHmjrhFGTBBHUtGx1D27cJxkyozhFGyu61sI54Tmw7yx+wdxKwpMFj8RzQ5X3hnC qFx1KmZoLxzz5pAQ2PB0+bhW2jS/gre6WCy+BZ+71eIy8GYo2SqLAhjsSxLWWeI917mX 088hYp4DrdwttJOkbPY7kQEOB53jRzpaRn9W+ZmpM35CrNShwF9mtFdiQ9u7hdnOseP8 ytu2sy0vxIoT7Mt4piatgaADKcHB6yHI+23+gfE9whzCXi6gw+oTbVTY8LIeNgCkjVOR S7lw== X-Gm-Message-State: AOAM532OeiHnQVGKQGuuwazoK9jgaLzTWiLEV9Hs2ylZG+8FN1KcvBdp f4s2kKioRwqNeCUngzqw+C+vc55cQ5Vlow== X-Google-Smtp-Source: ABdhPJzDFJlA+1adNAVf/9FyK+TJL+Y74duNcirZaBVNmcrKGHnGuvXpLXRDkmCOlh96fTwnnoPm2w== X-Received: by 2002:a63:170b:: with SMTP id x11mr8807075pgl.253.1625804773889; Thu, 08 Jul 2021 21:26:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 07/17] target/riscv: Use gpr_{src,dst} for integer load/store Date: Thu, 8 Jul 2021 21:25:58 -0700 Message-Id: <20210709042608.883256-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::536; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x536.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625805242756100005 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/insn_trans/trans_rvi.c.inc | 45 +++++++++++++++---------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/target/riscv/insn_trans/trans_rvi.c.inc b/target/riscv/insn_tr= ans/trans_rvi.c.inc index a603925637..a422dc9ef4 100644 --- a/target/riscv/insn_trans/trans_rvi.c.inc +++ b/target/riscv/insn_trans/trans_rvi.c.inc @@ -138,15 +138,21 @@ static bool trans_bgeu(DisasContext *ctx, arg_bgeu *a) =20 static bool gen_load(DisasContext *ctx, arg_lb *a, MemOp memop) { - TCGv t0 =3D tcg_temp_new(); - TCGv t1 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - tcg_gen_addi_tl(t0, t0, a->imm); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv addr =3D gpr_src(ctx, a->rs1); + TCGv temp =3D NULL; =20 - tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, memop); - gen_set_gpr(a->rd, t1); - tcg_temp_free(t0); - tcg_temp_free(t1); + if (a->imm) { + temp =3D tcg_temp_new(); + tcg_gen_addi_tl(temp, addr, a->imm); + addr =3D temp; + } + + tcg_gen_qemu_ld_tl(dest, addr, ctx->mem_idx, memop); + + if (temp) { + tcg_temp_free(temp); + } return true; } =20 @@ -177,19 +183,24 @@ static bool trans_lhu(DisasContext *ctx, arg_lhu *a) =20 static bool gen_store(DisasContext *ctx, arg_sb *a, MemOp memop) { - TCGv t0 =3D tcg_temp_new(); - TCGv dat =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - tcg_gen_addi_tl(t0, t0, a->imm); - gen_get_gpr(dat, a->rs2); + TCGv addr =3D gpr_src(ctx, a->rs1); + TCGv data =3D gpr_src(ctx, a->rs2); + TCGv temp =3D NULL; =20 - tcg_gen_qemu_st_tl(dat, t0, ctx->mem_idx, memop); - tcg_temp_free(t0); - tcg_temp_free(dat); + if (a->imm) { + temp =3D tcg_temp_new(); + tcg_gen_addi_tl(temp, addr, a->imm); + addr =3D temp; + } + + tcg_gen_qemu_st_tl(data, addr, ctx->mem_idx, memop); + + if (temp) { + tcg_temp_free(temp); + } return true; } =20 - static bool trans_sb(DisasContext *ctx, arg_sb *a) { return gen_store(ctx, a, MO_SB); --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 162580539492231.706738676393798; Thu, 8 Jul 2021 21:36:34 -0700 (PDT) Received: from localhost ([::1]:49850 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iFd-0006WP-Sw for importer@patchew.org; Fri, 09 Jul 2021 00:36:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53824) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i5u-0006Hp-4j for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:30 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]:38723) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5f-0001Vh-QE for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:29 -0400 Received: by mail-pj1-x102e.google.com with SMTP id cs1-20020a17090af501b0290170856e1a8aso7512316pjb.3 for ; Thu, 08 Jul 2021 21:26:15 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DQ/WLskyXUz/4g9AcF1OXEaIbORFX+tdwkCAhBd67iI=; b=t62uCxDJyyuOML2V/zxRaCAFQL/YvzaGpqNm5sDhmGQh2Wg98M5CuOAVssim/okHnY Dr+5LyvICiSsjO6mEYz/+7t1aN9z/lWOLL8LJ81nBs9MgwpfQHgRMxGj7dWZmwQ3s2Bq 1DutUOk12P6zXWGraas89alDnBIZxgcHjYrsW4IW6tmw7zbaoYu51cv/lFV61sZQFukk t4kjWWen2+hSAl7ONvsKZUQqJYpq9Kw+QgJcAj8GESjZxMFQmuEWBnq7uEUxqNwmExNW 283vHXj+X7cvOsQQb5qda76nCPcwFgZu85ckxBbvC9u17UFyDUiM+2j1DAxPn0SdadgN XQ9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DQ/WLskyXUz/4g9AcF1OXEaIbORFX+tdwkCAhBd67iI=; b=DmpxodevMUNYyqv5vCODooSjx6k1RD+/rW8toZte2rI4XQrDNeQDkk3i75RBDbfUhF J/flLp80TUhXL2BSin4XvXKcKkmpZKXrspxz4PkbXk6FfVPkUkh8N68iIalAeOnLtup4 Zz7j4KrbT6g2cS6Xw8uWfIc9XfZWvY906hEVqeweXdWyH4tFbd2WXzgsPmK5CInq1YHe Z1Y7nKlEfYBJzkT1vC9mqnslTkoU15JLGQ7ahhefrBQFwWFUtGvUDXy5YRZu2Fd2WtA0 NM5/3LCEZebyCyWunV9Ya7BMZ2d/TWd7//RPCS6KNdwTwAq091O+RNW7tfLoy1cBMVc/ e1RQ== X-Gm-Message-State: AOAM53033koWPXr89gCX1MCBJYmnwALkqOnjB/ifyFX4T1ToKRLhB3Q6 ZfvpUD0DAdfvlHR6fpGZF9kttSjIkMVTKA== X-Google-Smtp-Source: ABdhPJww0OpCZAbOhbfkM7wnreiH8o7Dx8690Z4Q4NIdMrUhdhXhBlWBvf/mBm1w0IT7DaOAkTHErA== X-Received: by 2002:a17:90a:7442:: with SMTP id o2mr8556000pjk.47.1625804774556; Thu, 08 Jul 2021 21:26:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 08/17] target/riscv: Use gpr_{src, dst} for word shift operations Date: Thu, 8 Jul 2021 21:25:59 -0700 Message-Id: <20210709042608.883256-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625805396821100001 Content-Type: text/plain; charset="utf-8" For trans_sllw, we can just use gen_shiftw. The others use various tricks to reduce the tcg operation count. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/insn_trans/trans_rvi.c.inc | 82 ++++++++++--------------- 1 file changed, 31 insertions(+), 51 deletions(-) diff --git a/target/riscv/insn_trans/trans_rvi.c.inc b/target/riscv/insn_tr= ans/trans_rvi.c.inc index a422dc9ef4..840187a4d6 100644 --- a/target/riscv/insn_trans/trans_rvi.c.inc +++ b/target/riscv/insn_trans/trans_rvi.c.inc @@ -352,24 +352,23 @@ static bool trans_slliw(DisasContext *ctx, arg_slliw = *a) static bool trans_srliw(DisasContext *ctx, arg_srliw *a) { REQUIRE_64BIT(ctx); - TCGv t =3D tcg_temp_new(); - gen_get_gpr(t, a->rs1); - tcg_gen_extract_tl(t, t, a->shamt, 32 - a->shamt); - /* sign-extend for W instructions */ - tcg_gen_ext32s_tl(t, t); - gen_set_gpr(a->rd, t); - tcg_temp_free(t); + + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); + + tcg_gen_extract_tl(dest, src1, a->shamt, 32 - a->shamt); + tcg_gen_ext32s_tl(dest, dest); return true; } =20 static bool trans_sraiw(DisasContext *ctx, arg_sraiw *a) { REQUIRE_64BIT(ctx); - TCGv t =3D tcg_temp_new(); - gen_get_gpr(t, a->rs1); - tcg_gen_sextract_tl(t, t, a->shamt, 32 - a->shamt); - gen_set_gpr(a->rd, t); - tcg_temp_free(t); + + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); + + tcg_gen_sextract_tl(dest, src1, a->shamt, 32 - a->shamt); return true; } =20 @@ -388,64 +387,45 @@ static bool trans_subw(DisasContext *ctx, arg_subw *a) static bool trans_sllw(DisasContext *ctx, arg_sllw *a) { REQUIRE_64BIT(ctx); - TCGv source1 =3D tcg_temp_new(); - TCGv source2 =3D tcg_temp_new(); - - gen_get_gpr(source1, a->rs1); - gen_get_gpr(source2, a->rs2); - - tcg_gen_andi_tl(source2, source2, 0x1F); - tcg_gen_shl_tl(source1, source1, source2); - - tcg_gen_ext32s_tl(source1, source1); - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); - tcg_temp_free(source2); - return true; + return gen_shiftw(ctx, a, tcg_gen_shl_tl); } =20 static bool trans_srlw(DisasContext *ctx, arg_srlw *a) { REQUIRE_64BIT(ctx); - TCGv source1 =3D tcg_temp_new(); - TCGv source2 =3D tcg_temp_new(); =20 - gen_get_gpr(source1, a->rs1); - gen_get_gpr(source2, a->rs2); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); + TCGv src2 =3D gpr_src(ctx, a->rs2); + TCGv ext2 =3D tcg_temp_new(); =20 - /* clear upper 32 */ - tcg_gen_ext32u_tl(source1, source1); - tcg_gen_andi_tl(source2, source2, 0x1F); - tcg_gen_shr_tl(source1, source1, source2); + tcg_gen_andi_tl(ext2, src2, 31); + tcg_gen_ext32u_tl(dest, src1); + tcg_gen_shr_tl(dest, dest, ext2); + tcg_gen_ext32s_tl(dest, dest); =20 - tcg_gen_ext32s_tl(source1, source1); - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); - tcg_temp_free(source2); + tcg_temp_free(ext2); return true; } =20 static bool trans_sraw(DisasContext *ctx, arg_sraw *a) { REQUIRE_64BIT(ctx); - TCGv source1 =3D tcg_temp_new(); - TCGv source2 =3D tcg_temp_new(); =20 - gen_get_gpr(source1, a->rs1); - gen_get_gpr(source2, a->rs2); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); + TCGv src2 =3D gpr_src(ctx, a->rs2); + TCGv ext2 =3D tcg_temp_new(); =20 + tcg_gen_andi_tl(ext2, src2, 31); /* - * first, trick to get it to act like working on 32 bits (get rid of - * upper 32, sign extend to fill space) + * First, trick to get it to act like working on 32 bits + * (get rid of upper 32, sign extend to fill space) */ - tcg_gen_ext32s_tl(source1, source1); - tcg_gen_andi_tl(source2, source2, 0x1F); - tcg_gen_sar_tl(source1, source1, source2); - - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); - tcg_temp_free(source2); + tcg_gen_ext32s_tl(dest, src1); + tcg_gen_sar_tl(dest, dest, ext2); =20 + tcg_temp_free(ext2); return true; } =20 --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625806118348715.7169355564326; Thu, 8 Jul 2021 21:48:38 -0700 (PDT) Received: from localhost ([::1]:58544 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iRJ-0007qg-2Z for importer@patchew.org; Fri, 09 Jul 2021 00:48:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53862) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i5v-0006J3-PJ for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:31 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:43898) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5h-0001Vt-A8 for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:31 -0400 Received: by mail-pg1-x530.google.com with SMTP id y4so6210025pgl.10 for ; Thu, 08 Jul 2021 21:26:15 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ErWpHWjhjt0JpP+PFb2nQDuBLTGa4sotp1ACko/W4m0=; b=O+n0AfHSm4xa2yKXRgaW+y3NnwZ60dRW5PDDv4Zqb5d9MpgZQ/bnyeKtaCHjZvUOT2 PaGorBZq7WbndvYLMh5/kDh9R4jO3j3u3c354mjGX5lACw968VfZpDtfn1Bcv+2Ac5E0 A3O5pXi3WJ2HH+uE41jP1Iu4p4MytMB4uIsxzTNPlbS2gjF/62hSCWXN3Jtg+RLM1ySa fje13Ba1VVT4v6eAKVp9AABIev+zxBHQ5x6pl9KThWx7uJmDcdwjB0RNcU6Pm8DHlKgP iAihwi5UqXRNZAKWPBSIQzOb280bEker+6S+/Qoc8Gwsyujnm+Oc4n3KylhCsgRtsdEM bmpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ErWpHWjhjt0JpP+PFb2nQDuBLTGa4sotp1ACko/W4m0=; b=RlnJadJ7nNOhelsicoy809IchQ8Qb7kAyNBc6/yUxV1dbzlMQzWap0aL75OzEIOdSn ydrRplV3eRWbWCvZR/+5haX5BQX1YyQ1x/JYuJTf5qIAMF+M+VxRUsh9+B/EGL2xd0gs 9ioIHb31VP4z8cbccx/qFeVtWO9QEvPZYOSAglzM+uJ1b/VblaHFbERJOdFyOfiE1W42 WuNy7N931tg9vuf6Seurql8pIIIlv4DzGgYkU4SG69QlI7CBAIC5JS6XCnqIapPQN2S9 8w4nmZac3uTtcBNjwf04SGnao3R591EBygNPconnBc0wnLjFrRmP1Dmo/djwigLecY04 lR3w== X-Gm-Message-State: AOAM530vY0pEKlgF8PyV1adEQm5ayMPU0jlo76sqfwxOSPQx7LZnuFIj yZEldNeR5+CR79sHaWavszPqLJ9hN6g2dg== X-Google-Smtp-Source: ABdhPJygrwSDZB30wawlOp49PVCyX1AVaQUJE0tgfKuh8EQgo2P9DueIV1xL6Ta2VTTQ07NDA+U3ug== X-Received: by 2002:a65:684d:: with SMTP id q13mr29189282pgt.163.1625804775099; Thu, 08 Jul 2021 21:26:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 09/17] target/riscv: Reorg csr instructions Date: Thu, 8 Jul 2021 21:26:00 -0700 Message-Id: <20210709042608.883256-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::530; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x530.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625806119590100001 Content-Type: text/plain; charset="utf-8" Introduce csrr and csrw helpers, for read-only and write-only insns. Note that we do not properly implement this in riscv_csrrw, in that we cannot distinguish true read-only (rs1 =3D=3D 0) from any other zero write_mask another source register -- this should still raise an exception for read-only registers. Only issue gen_io_start for CF_USE_ICOUNT. Use ctx->zero for csrrc. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/helper.h | 6 +- target/riscv/op_helper.c | 18 +-- target/riscv/insn_trans/trans_rvi.c.inc | 170 +++++++++++++++++------- 3 files changed, 129 insertions(+), 65 deletions(-) diff --git a/target/riscv/helper.h b/target/riscv/helper.h index 415e37bc37..460eee9988 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -65,9 +65,9 @@ DEF_HELPER_FLAGS_2(gorc, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(gorcw, TCG_CALL_NO_RWG_SE, tl, tl, tl) =20 /* Special functions */ -DEF_HELPER_3(csrrw, tl, env, tl, tl) -DEF_HELPER_4(csrrs, tl, env, tl, tl, tl) -DEF_HELPER_4(csrrc, tl, env, tl, tl, tl) +DEF_HELPER_2(csrr, tl, env, int) +DEF_HELPER_3(csrw, void, env, int, tl) +DEF_HELPER_4(csrrw, tl, env, int, tl, tl) #ifndef CONFIG_USER_ONLY DEF_HELPER_2(sret, tl, env, tl) DEF_HELPER_2(mret, tl, env, tl) diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index 3c48e739ac..ee7c24efe7 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -37,11 +37,10 @@ void helper_raise_exception(CPURISCVState *env, uint32_= t exception) riscv_raise_exception(env, exception, 0); } =20 -target_ulong helper_csrrw(CPURISCVState *env, target_ulong src, - target_ulong csr) +target_ulong helper_csrr(CPURISCVState *env, int csr) { target_ulong val =3D 0; - RISCVException ret =3D riscv_csrrw(env, csr, &val, src, -1); + RISCVException ret =3D riscv_csrrw(env, csr, &val, 0, 0); =20 if (ret !=3D RISCV_EXCP_NONE) { riscv_raise_exception(env, ret, GETPC()); @@ -49,23 +48,20 @@ target_ulong helper_csrrw(CPURISCVState *env, target_ul= ong src, return val; } =20 -target_ulong helper_csrrs(CPURISCVState *env, target_ulong src, - target_ulong csr, target_ulong rs1_pass) +void helper_csrw(CPURISCVState *env, int csr, target_ulong src) { - target_ulong val =3D 0; - RISCVException ret =3D riscv_csrrw(env, csr, &val, -1, rs1_pass ? src = : 0); + RISCVException ret =3D riscv_csrrw(env, csr, NULL, src, -1); =20 if (ret !=3D RISCV_EXCP_NONE) { riscv_raise_exception(env, ret, GETPC()); } - return val; } =20 -target_ulong helper_csrrc(CPURISCVState *env, target_ulong src, - target_ulong csr, target_ulong rs1_pass) +target_ulong helper_csrrw(CPURISCVState *env, int csr, + target_ulong src, target_ulong write_mask) { target_ulong val =3D 0; - RISCVException ret =3D riscv_csrrw(env, csr, &val, 0, rs1_pass ? src := 0); + RISCVException ret =3D riscv_csrrw(env, csr, &val, src, write_mask); =20 if (ret !=3D RISCV_EXCP_NONE) { riscv_raise_exception(env, ret, GETPC()); diff --git a/target/riscv/insn_trans/trans_rvi.c.inc b/target/riscv/insn_tr= ans/trans_rvi.c.inc index 840187a4d6..3705aad380 100644 --- a/target/riscv/insn_trans/trans_rvi.c.inc +++ b/target/riscv/insn_trans/trans_rvi.c.inc @@ -452,80 +452,148 @@ static bool trans_fence_i(DisasContext *ctx, arg_fen= ce_i *a) return true; } =20 -#define RISCV_OP_CSR_PRE do {\ - source1 =3D tcg_temp_new(); \ - csr_store =3D tcg_temp_new(); \ - dest =3D tcg_temp_new(); \ - rs1_pass =3D tcg_temp_new(); \ - gen_get_gpr(source1, a->rs1); \ - tcg_gen_movi_tl(cpu_pc, ctx->base.pc_next); \ - tcg_gen_movi_tl(rs1_pass, a->rs1); \ - tcg_gen_movi_tl(csr_store, a->csr); \ - gen_io_start();\ -} while (0) +static bool do_csr_post(DisasContext *ctx) +{ + /* We may have changed important cpu state -- exit to main loop. */ + tcg_gen_movi_tl(cpu_pc, ctx->pc_succ_insn); + exit_tb(ctx); + ctx->base.is_jmp =3D DISAS_NORETURN; + return true; +} =20 -#define RISCV_OP_CSR_POST do {\ - gen_set_gpr(a->rd, dest); \ - tcg_gen_movi_tl(cpu_pc, ctx->pc_succ_insn); \ - exit_tb(ctx); \ - ctx->base.is_jmp =3D DISAS_NORETURN; \ - tcg_temp_free(source1); \ - tcg_temp_free(csr_store); \ - tcg_temp_free(dest); \ - tcg_temp_free(rs1_pass); \ -} while (0) +static bool do_csrr(DisasContext *ctx, int rd, int rc) +{ + TCGv dest =3D gpr_dst(ctx, rd); + TCGv_i32 csr =3D tcg_constant_i32(rc); =20 + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_io_start(); + } + gen_helper_csrr(dest, cpu_env, csr); + return do_csr_post(ctx); +} + +static bool do_csrw(DisasContext *ctx, int rc, TCGv src) +{ + TCGv_i32 csr =3D tcg_constant_i32(rc); + + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_io_start(); + } + gen_helper_csrw(cpu_env, csr, src); + return do_csr_post(ctx); +} + +static bool do_csrrw(DisasContext *ctx, int rd, int rc, TCGv src, TCGv mas= k) +{ + TCGv dest =3D gpr_dst(ctx, rd); + TCGv_i32 csr =3D tcg_constant_i32(rc); + + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_io_start(); + } + gen_helper_csrrw(dest, cpu_env, csr, src, mask); + return do_csr_post(ctx); +} =20 static bool trans_csrrw(DisasContext *ctx, arg_csrrw *a) { - TCGv source1, csr_store, dest, rs1_pass; - RISCV_OP_CSR_PRE; - gen_helper_csrrw(dest, cpu_env, source1, csr_store); - RISCV_OP_CSR_POST; - return true; + TCGv src =3D gpr_src(ctx, a->rs1); + + /* + * If rd =3D=3D 0, the insn shall not read the csr, nor cause any of t= he + * side effects that might occur on a csr read. + */ + if (a->rd =3D=3D 0) { + return do_csrw(ctx, a->csr, src); + } + + TCGv mask =3D tcg_constant_tl(-1); + return do_csrrw(ctx, a->rd, a->csr, src, mask); } =20 static bool trans_csrrs(DisasContext *ctx, arg_csrrs *a) { - TCGv source1, csr_store, dest, rs1_pass; - RISCV_OP_CSR_PRE; - gen_helper_csrrs(dest, cpu_env, source1, csr_store, rs1_pass); - RISCV_OP_CSR_POST; - return true; + /* + * If rs1 =3D=3D 0, the insn shall not write to the csr at all, nor + * cause any of the side effects that might occur on a csr write. + * Note that if rs1 specifies a register other than x0, holding + * a zero value, the instruction will still attempt to write the + * unmodified value back to the csr and will cause side effects. + */ + if (a->rs1 =3D=3D 0) { + return do_csrr(ctx, a->rd, a->csr); + } + + TCGv ones =3D tcg_constant_tl(-1); + TCGv mask =3D gpr_src(ctx, a->rs1); + return do_csrrw(ctx, a->rd, a->csr, ones, mask); } =20 static bool trans_csrrc(DisasContext *ctx, arg_csrrc *a) { - TCGv source1, csr_store, dest, rs1_pass; - RISCV_OP_CSR_PRE; - gen_helper_csrrc(dest, cpu_env, source1, csr_store, rs1_pass); - RISCV_OP_CSR_POST; - return true; + /* + * If rs1 =3D=3D 0, the insn shall not write to the csr at all, nor + * cause any of the side effects that might occur on a csr write. + * Note that if rs1 specifies a register other than x0, holding + * a zero value, the instruction will still attempt to write the + * unmodified value back to the csr and will cause side effects. + */ + if (a->rs1 =3D=3D 0) { + return do_csrr(ctx, a->rd, a->csr); + } + + TCGv mask =3D gpr_src(ctx, a->rs1); + return do_csrrw(ctx, a->rd, a->csr, ctx->zero, mask); } =20 static bool trans_csrrwi(DisasContext *ctx, arg_csrrwi *a) { - TCGv source1, csr_store, dest, rs1_pass; - RISCV_OP_CSR_PRE; - gen_helper_csrrw(dest, cpu_env, rs1_pass, csr_store); - RISCV_OP_CSR_POST; - return true; + TCGv src =3D tcg_constant_tl(a->rs1); + + /* + * If rd =3D=3D 0, the insn shall not read the csr, nor cause any of t= he + * side effects that might occur on a csr read. + */ + if (a->rd =3D=3D 0) { + return do_csrw(ctx, a->csr, src); + } + + TCGv mask =3D tcg_constant_tl(-1); + return do_csrrw(ctx, a->rd, a->csr, src, mask); } =20 static bool trans_csrrsi(DisasContext *ctx, arg_csrrsi *a) { - TCGv source1, csr_store, dest, rs1_pass; - RISCV_OP_CSR_PRE; - gen_helper_csrrs(dest, cpu_env, rs1_pass, csr_store, rs1_pass); - RISCV_OP_CSR_POST; - return true; + /* + * If rs1 =3D=3D 0, the insn shall not write to the csr at all, nor + * cause any of the side effects that might occur on a csr write. + * Note that if rs1 specifies a register other than x0, holding + * a zero value, the instruction will still attempt to write the + * unmodified value back to the csr and will cause side effects. + */ + if (a->rs1 =3D=3D 0) { + return do_csrr(ctx, a->rd, a->csr); + } + + TCGv ones =3D tcg_constant_tl(-1); + TCGv mask =3D tcg_constant_tl(a->rs1); + return do_csrrw(ctx, a->rd, a->csr, ones, mask); } =20 static bool trans_csrrci(DisasContext *ctx, arg_csrrci *a) { - TCGv source1, csr_store, dest, rs1_pass; - RISCV_OP_CSR_PRE; - gen_helper_csrrc(dest, cpu_env, rs1_pass, csr_store, rs1_pass); - RISCV_OP_CSR_POST; - return true; + /* + * If rs1 =3D=3D 0, the insn shall not write to the csr at all, nor + * cause any of the side effects that might occur on a csr write. + * Note that if rs1 specifies a register other than x0, holding + * a zero value, the instruction will still attempt to write the + * unmodified value back to the csr and will cause side effects. + */ + if (a->rs1 =3D=3D 0) { + return do_csrr(ctx, a->rd, a->csr); + } + + TCGv mask =3D tcg_constant_tl(a->rs1); + return do_csrrw(ctx, a->rd, a->csr, ctx->zero, mask); } --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625805644502293.4467285546401; Thu, 8 Jul 2021 21:40:44 -0700 (PDT) Received: from localhost ([::1]:33904 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iJf-0006Bd-Gy for importer@patchew.org; Fri, 09 Jul 2021 00:40:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53872) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i5x-0006LV-BO for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:33 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]:40490) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5h-0001WW-AW for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:33 -0400 Received: by mail-pf1-x430.google.com with SMTP id j199so7584433pfd.7 for ; Thu, 08 Jul 2021 21:26:16 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=X1qeQE6kB9QQ0i3jNEW6Omw4RLTIbFXQtxHWy2nbQ+Y=; b=NcRheggWnNrSnCm+Fi3FhLtdVgz/kWqJce/SeOQ9jxPipN1TBhEvSu+0ZnlhVxtnS4 8sgwgdcXbMe84B6fCEX5ZRNo4ij+iQizm3jozCqtRbv25mSJHAabgUf4UjKlmP+wreqr y40RMPD3yvA9YM6eGJD2OBf/PDjWUbM2mcSqTgGJZN92AMQI5/9v6spSKY/jgrviDk9o WmmLR0j3kmChHuaz1YYoPDJEkxry+vIZfJwjMBWdOSDthr4hyYxfADPTIGe+zm790nL8 bT7kOgYuPzUIfpeOQS4qx0EbF3rev+G5bbmrcGkOvyr7DlauciMHZXlp4fZs+TEDu3wd mXGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=X1qeQE6kB9QQ0i3jNEW6Omw4RLTIbFXQtxHWy2nbQ+Y=; b=G6xhVMJY/hD7NE/PAiO/eOnVmK/XJgiB3T+Fg26qCH56tqZ2kKivjEuFRBs6tvh2sR V9BqhIIYzLcRfseiPq1/L1LGSU88rBjN2Xebo5wbrZj5ubStuSiQwXDnzxTEPKsGzQyJ buS1v9HjpX8FP2kwYBoLTgtfKCcHQxUviq0u10iBTsOH1+rKamSGEtkcD9jg2ciGLZBC KlzdjgK1spTN5XUo9aczj7dwYuuNu9trZIWiGMznm17PY5IZG0++wTBlBSrlUqF4bxb1 85pjzUqKRQ4A8hKWrWPVMdPywH3NTBl6yboSxc/31iK+AeCPuKc1ic00wAJUBLvqksZ3 oISQ== X-Gm-Message-State: AOAM533d6ithzEutpxFa3iXnar2eDuyoBjL1KdJENfrfHEgi5UjtfaVZ qy3zWJ9uBONarmAd5TWrPFBfEBp7wPh0UQ== X-Google-Smtp-Source: ABdhPJxpilxN0saasMT8XZ97jVNyDmgqrg4yLejuGmIGeYfqjQHwwC+hU+eV3V+9fp1LewLPVtXUAA== X-Received: by 2002:a65:550a:: with SMTP id f10mr10448133pgr.155.1625804775783; Thu, 08 Jul 2021 21:26:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 10/17] target/riscv: Use gpr_{src,dst} for RVA Date: Thu, 8 Jul 2021 21:26:01 -0700 Message-Id: <20210709042608.883256-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::430; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625805646461100002 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/insn_trans/trans_rva.c.inc | 42 +++++++++---------------- 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/target/riscv/insn_trans/trans_rva.c.inc b/target/riscv/insn_tr= ans/trans_rva.c.inc index ab2ec4f0a5..5bb5bbd09c 100644 --- a/target/riscv/insn_trans/trans_rva.c.inc +++ b/target/riscv/insn_trans/trans_rva.c.inc @@ -18,11 +18,11 @@ * this program. If not, see . */ =20 -static inline bool gen_lr(DisasContext *ctx, arg_atomic *a, MemOp mop) +static bool gen_lr(DisasContext *ctx, arg_atomic *a, MemOp mop) { - TCGv src1 =3D tcg_temp_new(); + TCGv src1 =3D gpr_src(ctx, a->rs1); + /* Put addr in load_res, data in load_val. */ - gen_get_gpr(src1, a->rs1); if (a->rl) { tcg_gen_mb(TCG_MO_ALL | TCG_BAR_STRL); } @@ -33,30 +33,26 @@ static inline bool gen_lr(DisasContext *ctx, arg_atomic= *a, MemOp mop) tcg_gen_mov_tl(load_res, src1); gen_set_gpr(a->rd, load_val); =20 - tcg_temp_free(src1); return true; } =20 -static inline bool gen_sc(DisasContext *ctx, arg_atomic *a, MemOp mop) +static bool gen_sc(DisasContext *ctx, arg_atomic *a, MemOp mop) { - TCGv src1 =3D tcg_temp_new(); - TCGv src2 =3D tcg_temp_new(); - TCGv dat =3D tcg_temp_new(); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); + TCGv src2 =3D gpr_src(ctx, a->rs2); TCGLabel *l1 =3D gen_new_label(); TCGLabel *l2 =3D gen_new_label(); =20 - gen_get_gpr(src1, a->rs1); tcg_gen_brcond_tl(TCG_COND_NE, load_res, src1, l1); =20 - gen_get_gpr(src2, a->rs2); /* * Note that the TCG atomic primitives are SC, * so we can ignore AQ/RL along this path. */ - tcg_gen_atomic_cmpxchg_tl(src1, load_res, load_val, src2, + tcg_gen_atomic_cmpxchg_tl(dest, load_res, load_val, src2, ctx->mem_idx, mop); - tcg_gen_setcond_tl(TCG_COND_NE, dat, src1, load_val); - gen_set_gpr(a->rd, dat); + tcg_gen_setcond_tl(TCG_COND_NE, dest, dest, load_val); tcg_gen_br(l2); =20 gen_set_label(l1); @@ -65,8 +61,7 @@ static inline bool gen_sc(DisasContext *ctx, arg_atomic *= a, MemOp mop) * provide the memory barrier implied by AQ/RL. */ tcg_gen_mb(TCG_MO_ALL + a->aq * TCG_BAR_LDAQ + a->rl * TCG_BAR_STRL); - tcg_gen_movi_tl(dat, 1); - gen_set_gpr(a->rd, dat); + tcg_gen_movi_tl(dest, 1); =20 gen_set_label(l2); /* @@ -75,9 +70,6 @@ static inline bool gen_sc(DisasContext *ctx, arg_atomic *= a, MemOp mop) */ tcg_gen_movi_tl(load_res, -1); =20 - tcg_temp_free(dat); - tcg_temp_free(src1); - tcg_temp_free(src2); return true; } =20 @@ -85,17 +77,11 @@ static bool gen_amo(DisasContext *ctx, arg_atomic *a, void(*func)(TCGv, TCGv, TCGv, TCGArg, MemOp), MemOp mop) { - TCGv src1 =3D tcg_temp_new(); - TCGv src2 =3D tcg_temp_new(); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); + TCGv src2 =3D gpr_src(ctx, a->rs2); =20 - gen_get_gpr(src1, a->rs1); - gen_get_gpr(src2, a->rs2); - - (*func)(src2, src1, src2, ctx->mem_idx, mop); - - gen_set_gpr(a->rd, src2); - tcg_temp_free(src1); - tcg_temp_free(src2); + (*func)(dest, src1, src2, ctx->mem_idx, mop); return true; } =20 --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625805581219859.8419322580094; Thu, 8 Jul 2021 21:39:41 -0700 (PDT) Received: from localhost ([::1]:58558 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iId-0003qC-U7 for importer@patchew.org; Fri, 09 Jul 2021 00:39:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53906) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i60-0006Q0-5l for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:36 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:33475) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5h-0001Ww-IQ for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:35 -0400 Received: by mail-pl1-x62e.google.com with SMTP id f11so4377805plg.0 for ; Thu, 08 Jul 2021 21:26:17 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=a9fFt/OsBBNeqd2GgITsOvAQFQxqc8/6WAR/vy/k/Xw=; b=eMr3FHxZndFr8anybtBF8DTSreUootsdK/Y8ylvRqqU1dABB2W6nsZbIkawnCtvKmi IlicbULInGKvZEO4HXVy4K+qjYXGV8Ae/welJYNTBQExgQ6tt2nii9EPZwA/gdDbJ0Qh NrMgadsjszUPUzH3VGMS8+GlKzLeUhVMhAgzx5vT1n++2rQpTc0IES9IfS8EiVzUVRzb vx3R9GDUjb5XiPReWXVxVPkOWYBv/s053ZrwsjnKJSX9E6n+NNUFOa6E87GvEte7P7H1 439anK0E6dk9QnsQBT7xdU1d0jvkSACEs1zG8pk3cDaTNcrtCa//EzOUqSiCH40kDQ2u vU8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=a9fFt/OsBBNeqd2GgITsOvAQFQxqc8/6WAR/vy/k/Xw=; b=G8M4AWvMjKuMImUISZe/g6iCG3RWDQmFqo05PLNGqRCa6LN4pGcrcPAfQH1V6XCWQ5 mcuq36RFMqj47RrljfbcbpPhX/ULmY3XnfWvlOe4YBVqNmQSy5mPb58KQOiyxSF2YW40 JXglo0h49XULnR8qPgedMSxJbIUuzt8o/8r8M83lPOChazRtoXixM+Q1jGqwZZk3t01E 51FYHU+LmXOmydWgl8707Uf4hy7wFt3R0Or1G4A+qr4JLAS0X7R0LKKv4Ie8184/7lb6 pMdhRjZybfZEoe+94BLl2wxYoBqbFssINWi5VRkK+2ugpQaMbit/F/sGFMkbjDHOWXMh 8k8g== X-Gm-Message-State: AOAM5337GjBR5wInaeoO7hv52G0P4yakaIhbZpUTiYucels577MBXjXQ lxBMJ9AyjqXhknAn3IqI8NDchJ7pLEhO6w== X-Google-Smtp-Source: ABdhPJzwEKWVTVtwCE9l7sse8HUklrbzGbU9RKe18KfMFeGVRxrul7WnibjJ+Yd9IU6fSSzgKEhDOw== X-Received: by 2002:a17:90a:880c:: with SMTP id s12mr31960030pjn.72.1625804776357; Thu, 08 Jul 2021 21:26:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 11/17] target/riscv: Use gpr_{src,dst} for RVB Date: Thu, 8 Jul 2021 21:26:02 -0700 Message-Id: <20210709042608.883256-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62e; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625805582437100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/insn_trans/trans_rvb.c.inc | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_tr= ans/trans_rvb.c.inc index 9e81f6e3de..58921f3224 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -423,16 +423,13 @@ static bool trans_slli_uw(DisasContext *ctx, arg_slli= _uw *a) REQUIRE_64BIT(ctx); REQUIRE_EXT(ctx, RVB); =20 - TCGv source1 =3D tcg_temp_new(); - gen_get_gpr(source1, a->rs1); + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv src1 =3D gpr_src(ctx, a->rs1); =20 if (a->shamt < 32) { - tcg_gen_deposit_z_tl(source1, source1, a->shamt, 32); + tcg_gen_deposit_z_tl(dest, src1, a->shamt, 32); } else { - tcg_gen_shli_tl(source1, source1, a->shamt); + tcg_gen_shli_tl(dest, src1, a->shamt); } - - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); return true; } --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625806302528416.911734891896; Thu, 8 Jul 2021 21:51:42 -0700 (PDT) Received: from localhost ([::1]:39120 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iUH-0005Cq-FJ for importer@patchew.org; Fri, 09 Jul 2021 00:51:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53940) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i61-0006U8-6T for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:37 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:43793) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5i-0001XB-CY for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:36 -0400 Received: by mail-pf1-x433.google.com with SMTP id a127so7568611pfa.10 for ; Thu, 08 Jul 2021 21:26:17 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WW1i6QXBGQYoB4yy+7PZLlIEEYonhARpGvkyI1qitrE=; b=LPgnAW8JKS0BEu4NBa9F9EMO+pneQHg8H7zu5qN6QAk6Pea0FkGNMqOMZMJl161EYx 0XRDVilfvERG1aeiksKWUET3EYGjRKTxX9aXUCbR6SphTzWnMGjHrL+ieGh0HDx6ZnTb MkoN59L9vDbM/dKuHX5xKnGFrXPxpsLuxGma/LwJy323WiDiDMIgHnR4S5eW3+XWjP+z ux5+8DvjApyHDOcTk/h2iTPHEgVnzGMugPId2qUYDJ5J9rRbOAtkHtO+GC5CzCMMQvNs NpT4KzPksyU3jeyZyDxD4E0m5XL9OHF/hfXVi5jkd58d0rrUJ9TXJJ2WPTBJ6xIMPsFV YBug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WW1i6QXBGQYoB4yy+7PZLlIEEYonhARpGvkyI1qitrE=; b=mhCqudLTme0KLPpK9L1t4InJhNu6cI7R3/0UJ8YDz+AELYb0846LpzVhFb3vCbps8V jgWwOsVCGu2HxmMYXprVrkFwhqP4cwMChrlC8UBLnrIIsrZWx0bU7GgSX+FHs6PlaaFb odxxTrHiq2+RGmOm1fIV8N9LTRWdinESaLUGeO5zlNvA29qaUhxETTNs7hCwqc+EqszG NvoZtz+SJLTt/uOlv5VncfUan+V2z6K1/oGn/Sbq/6rAu+oN9WXhCGmBH/qsJYkSYSvs 3btAscVyLy58m+xTXKAxNlynJa9zAVXgf48yr/e//easH9YixiQfYa+MNxfWpNF5qgPc BHJg== X-Gm-Message-State: AOAM530WLsrWufgg3yCYgOLEpy8EG4Elth2hC8eSbtF5McwcAlxkgB6r K1SR0b7XUenW3B+WA2KPHV4+XfwDS7ym2g== X-Google-Smtp-Source: ABdhPJyLgHiyhxmu6WwBWR7IgqYiMoqeuw433LjaAQTjMZW97Np6pFQuLXF/QVhxkGuMO0X5LI8Gxg== X-Received: by 2002:a65:68c1:: with SMTP id k1mr35585393pgt.335.1625804776971; Thu, 08 Jul 2021 21:26:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 12/17] target/riscv: Use gpr_{src,dst} for RVF Date: Thu, 8 Jul 2021 21:26:03 -0700 Message-Id: <20210709042608.883256-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::433; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625806303215100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/insn_trans/trans_rvf.c.inc | 131 +++++++++--------------- 1 file changed, 49 insertions(+), 82 deletions(-) diff --git a/target/riscv/insn_trans/trans_rvf.c.inc b/target/riscv/insn_tr= ans/trans_rvf.c.inc index 89f78701e7..ff8e942199 100644 --- a/target/riscv/insn_trans/trans_rvf.c.inc +++ b/target/riscv/insn_trans/trans_rvf.c.inc @@ -27,14 +27,23 @@ static bool trans_flw(DisasContext *ctx, arg_flw *a) { REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); - TCGv t0 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - tcg_gen_addi_tl(t0, t0, a->imm); =20 - tcg_gen_qemu_ld_i64(cpu_fpr[a->rd], t0, ctx->mem_idx, MO_TEUL); - gen_nanbox_s(cpu_fpr[a->rd], cpu_fpr[a->rd]); + TCGv addr =3D gpr_src(ctx, a->rs1); + TCGv temp =3D NULL; =20 - tcg_temp_free(t0); + if (a->imm) { + temp =3D tcg_temp_new(); + tcg_gen_addi_tl(temp, addr, a->imm); + addr =3D temp; + } + + TCGv_i64 dest =3D cpu_fpr[a->rd]; + tcg_gen_qemu_ld_i64(dest, addr, ctx->mem_idx, MO_TEUL); + gen_nanbox_s(dest, dest); + + if (temp) { + tcg_temp_free(temp); + } mark_fs_dirty(ctx); return true; } @@ -43,14 +52,21 @@ static bool trans_fsw(DisasContext *ctx, arg_fsw *a) { REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); - TCGv t0 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); =20 - tcg_gen_addi_tl(t0, t0, a->imm); + TCGv addr =3D gpr_src(ctx, a->rs1); + TCGv temp =3D NULL; =20 - tcg_gen_qemu_st_i64(cpu_fpr[a->rs2], t0, ctx->mem_idx, MO_TEUL); + if (a->imm) { + temp =3D tcg_temp_new(); + tcg_gen_addi_tl(temp, addr, a->imm); + addr =3D temp; + } =20 - tcg_temp_free(t0); + tcg_gen_qemu_st_i64(cpu_fpr[a->rs2], addr, ctx->mem_idx, MO_TEUL); + + if (temp) { + tcg_temp_free(temp); + } return true; } =20 @@ -271,12 +287,8 @@ static bool trans_fcvt_w_s(DisasContext *ctx, arg_fcvt= _w_s *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); =20 - TCGv t0 =3D tcg_temp_new(); gen_set_rm(ctx, a->rm); - gen_helper_fcvt_w_s(t0, cpu_env, cpu_fpr[a->rs1]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); - + gen_helper_fcvt_w_s(gpr_dst(ctx, a->rd), cpu_env, cpu_fpr[a->rs1]); return true; } =20 @@ -285,12 +297,8 @@ static bool trans_fcvt_wu_s(DisasContext *ctx, arg_fcv= t_wu_s *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); =20 - TCGv t0 =3D tcg_temp_new(); gen_set_rm(ctx, a->rm); - gen_helper_fcvt_wu_s(t0, cpu_env, cpu_fpr[a->rs1]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); - + gen_helper_fcvt_wu_s(gpr_dst(ctx, a->rd), cpu_env, cpu_fpr[a->rs1]); return true; } =20 @@ -300,17 +308,14 @@ static bool trans_fmv_x_w(DisasContext *ctx, arg_fmv_= x_w *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); =20 - TCGv t0 =3D tcg_temp_new(); + TCGv dest =3D gpr_dst(ctx, a->rd); =20 #if defined(TARGET_RISCV64) - tcg_gen_ext32s_tl(t0, cpu_fpr[a->rs1]); + tcg_gen_ext32s_tl(dest, cpu_fpr[a->rs1]); #else - tcg_gen_extrl_i64_i32(t0, cpu_fpr[a->rs1]); + tcg_gen_extrl_i64_i32(dest, cpu_fpr[a->rs1]); #endif =20 - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); - return true; } =20 @@ -318,10 +323,9 @@ static bool trans_feq_s(DisasContext *ctx, arg_feq_s *= a) { REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); - TCGv t0 =3D tcg_temp_new(); - gen_helper_feq_s(t0, cpu_env, cpu_fpr[a->rs1], cpu_fpr[a->rs2]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); + + gen_helper_feq_s(gpr_dst(ctx, a->rd), cpu_env, + cpu_fpr[a->rs1], cpu_fpr[a->rs2]); return true; } =20 @@ -329,10 +333,9 @@ static bool trans_flt_s(DisasContext *ctx, arg_flt_s *= a) { REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); - TCGv t0 =3D tcg_temp_new(); - gen_helper_flt_s(t0, cpu_env, cpu_fpr[a->rs1], cpu_fpr[a->rs2]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); + + gen_helper_flt_s(gpr_dst(ctx, a->rd), cpu_env, + cpu_fpr[a->rs1], cpu_fpr[a->rs2]); return true; } =20 @@ -340,10 +343,9 @@ static bool trans_fle_s(DisasContext *ctx, arg_fle_s *= a) { REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); - TCGv t0 =3D tcg_temp_new(); - gen_helper_fle_s(t0, cpu_env, cpu_fpr[a->rs1], cpu_fpr[a->rs2]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); + + gen_helper_fle_s(gpr_dst(ctx, a->rd), cpu_env, + cpu_fpr[a->rs1], cpu_fpr[a->rs2]); return true; } =20 @@ -352,13 +354,7 @@ static bool trans_fclass_s(DisasContext *ctx, arg_fcla= ss_s *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); =20 - TCGv t0 =3D tcg_temp_new(); - - gen_helper_fclass_s(t0, cpu_fpr[a->rs1]); - - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); - + gen_helper_fclass_s(gpr_dst(ctx, a->rd), cpu_fpr[a->rs1]); return true; } =20 @@ -367,15 +363,10 @@ static bool trans_fcvt_s_w(DisasContext *ctx, arg_fcv= t_s_w *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); =20 - TCGv t0 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - gen_set_rm(ctx, a->rm); - gen_helper_fcvt_s_w(cpu_fpr[a->rd], cpu_env, t0); + gen_helper_fcvt_s_w(cpu_fpr[a->rd], cpu_env, gpr_src(ctx, a->rs1)); =20 mark_fs_dirty(ctx); - tcg_temp_free(t0); - return true; } =20 @@ -384,15 +375,10 @@ static bool trans_fcvt_s_wu(DisasContext *ctx, arg_fc= vt_s_wu *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); =20 - TCGv t0 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - gen_set_rm(ctx, a->rm); - gen_helper_fcvt_s_wu(cpu_fpr[a->rd], cpu_env, t0); + gen_helper_fcvt_s_wu(cpu_fpr[a->rd], cpu_env, gpr_src(ctx, a->rs1)); =20 mark_fs_dirty(ctx); - tcg_temp_free(t0); - return true; } =20 @@ -402,15 +388,10 @@ static bool trans_fmv_w_x(DisasContext *ctx, arg_fmv_= w_x *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); =20 - TCGv t0 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - - tcg_gen_extu_tl_i64(cpu_fpr[a->rd], t0); + tcg_gen_extu_tl_i64(cpu_fpr[a->rd], gpr_src(ctx, a->rs1)); gen_nanbox_s(cpu_fpr[a->rd], cpu_fpr[a->rd]); =20 mark_fs_dirty(ctx); - tcg_temp_free(t0); - return true; } =20 @@ -420,11 +401,8 @@ static bool trans_fcvt_l_s(DisasContext *ctx, arg_fcvt= _l_s *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); =20 - TCGv t0 =3D tcg_temp_new(); gen_set_rm(ctx, a->rm); - gen_helper_fcvt_l_s(t0, cpu_env, cpu_fpr[a->rs1]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); + gen_helper_fcvt_l_s(gpr_dst(ctx, a->rd), cpu_env, cpu_fpr[a->rs1]); return true; } =20 @@ -434,11 +412,8 @@ static bool trans_fcvt_lu_s(DisasContext *ctx, arg_fcv= t_lu_s *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); =20 - TCGv t0 =3D tcg_temp_new(); gen_set_rm(ctx, a->rm); - gen_helper_fcvt_lu_s(t0, cpu_env, cpu_fpr[a->rs1]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); + gen_helper_fcvt_lu_s(gpr_dst(ctx, a->rd), cpu_env, cpu_fpr[a->rs1]); return true; } =20 @@ -448,14 +423,10 @@ static bool trans_fcvt_s_l(DisasContext *ctx, arg_fcv= t_s_l *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); =20 - TCGv t0 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - gen_set_rm(ctx, a->rm); - gen_helper_fcvt_s_l(cpu_fpr[a->rd], cpu_env, t0); + gen_helper_fcvt_s_l(cpu_fpr[a->rd], cpu_env, gpr_src(ctx, a->rs1)); =20 mark_fs_dirty(ctx); - tcg_temp_free(t0); return true; } =20 @@ -465,13 +436,9 @@ static bool trans_fcvt_s_lu(DisasContext *ctx, arg_fcv= t_s_lu *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); =20 - TCGv t0 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - gen_set_rm(ctx, a->rm); - gen_helper_fcvt_s_lu(cpu_fpr[a->rd], cpu_env, t0); + gen_helper_fcvt_s_lu(cpu_fpr[a->rd], cpu_env, gpr_src(ctx, a->rs1)); =20 mark_fs_dirty(ctx); - tcg_temp_free(t0); return true; } --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625805819438196.21907315191208; Thu, 8 Jul 2021 21:43:39 -0700 (PDT) Received: from localhost ([::1]:43886 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iMU-0006YY-3w for importer@patchew.org; Fri, 09 Jul 2021 00:43:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53950) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i61-0006WS-Vk for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:38 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:35561) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5j-0001XR-WF for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:37 -0400 Received: by mail-pg1-x529.google.com with SMTP id v7so8709266pgl.2 for ; Thu, 08 Jul 2021 21:26:18 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6HbbkfJ+bykUVMcUtfXP5XxX4C861myEUuDfLalAZI0=; b=bA2CT54Lu4kcSuld9DUdIeLYl7mM/2c9emyxQ3OUo5dtYApfa9ev2OGiqsMktR2YTO QOt3vUKJAbOtGYCjSqtgVMa0Q6xpYEIqeOJ1xXFz7Tho+BLtzVSxLx60u0OqNNjjwy6/ DcA2UQ5kwVDIUpao3tIadXCXuBPbUOfKSYDh4InrfASe7iMclS879Qt9YGpDst+Xw9sB iFMioM2exSM+UMHpeFawzBwNic7T70twU1FWUPHZBxblRHLjyHilsF34O9zh8PYG/2Iz ta7S2IV+sT1mrMgbKU/xOSDjgpZc3dv3PfyTrp3LuZpj6yAHVz1JOaGwN7+EL0ximckI 1VhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6HbbkfJ+bykUVMcUtfXP5XxX4C861myEUuDfLalAZI0=; b=g0YY9EflMpMcX+jSoTYAsynn487zyvC4v+i9IYix/36JjjA+Enc9m3kHxnz42g6ijy hUD19umN8fJvwO2iU4yNruDPgyNPe+HtdmLMrJvHV6xhR+Nd3CRjDGR1AGTRTzE3TDk0 T0sf9HIwvN+f8onsAsDvVANv7eb7/Yc24GUpkokVxjMvJq+RWe2r5nu/7NbRCD933tg6 H+5rhHwyFYjBNsEZvjDurptLAKdEDc3nPnD26Hjd4DS72E6WDr378OfGbsNh3KUMpDA2 2nMg6dx6zNTdK3eNoQ36xpX3NzDaGJ0zitMywuTUQdIAUvF66oC7bO4h/ln2vzlB/QK2 CjrA== X-Gm-Message-State: AOAM532Z3crqdx5cI+Kh4lx/YtJ7+qlLkF1rnzDCjEwEiWWe43gJzxM1 CRBQ+8bNtvZAcaC0UpYVD4RauvxSZD9T+g== X-Google-Smtp-Source: ABdhPJye2O4F6nSkGVy67hgN6lR4mVGRGMNUfJK/6ODwvJ8ARHrQ4OQejLMA2znjXXmgyUbO1aaxvQ== X-Received: by 2002:a65:5186:: with SMTP id h6mr35499502pgq.62.1625804777586; Thu, 08 Jul 2021 21:26:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 13/17] target/riscv: Use gpr_{src,dst} for RVD Date: Thu, 8 Jul 2021 21:26:04 -0700 Message-Id: <20210709042608.883256-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625805820821100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/insn_trans/trans_rvd.c.inc | 116 +++++++++--------------- 1 file changed, 44 insertions(+), 72 deletions(-) diff --git a/target/riscv/insn_trans/trans_rvd.c.inc b/target/riscv/insn_tr= ans/trans_rvd.c.inc index 7e45538ae0..9bb15fdc12 100644 --- a/target/riscv/insn_trans/trans_rvd.c.inc +++ b/target/riscv/insn_trans/trans_rvd.c.inc @@ -22,14 +22,22 @@ static bool trans_fld(DisasContext *ctx, arg_fld *a) { REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); - TCGv t0 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - tcg_gen_addi_tl(t0, t0, a->imm); =20 - tcg_gen_qemu_ld_i64(cpu_fpr[a->rd], t0, ctx->mem_idx, MO_TEQ); + TCGv addr =3D gpr_src(ctx, a->rs1); + TCGv temp =3D NULL; =20 + if (a->imm) { + temp =3D tcg_temp_new(); + tcg_gen_addi_tl(temp, addr, a->imm); + addr =3D temp; + } + + tcg_gen_qemu_ld_i64(cpu_fpr[a->rd], addr, ctx->mem_idx, MO_TEQ); + + if (temp) { + tcg_temp_free(temp); + } mark_fs_dirty(ctx); - tcg_temp_free(t0); return true; } =20 @@ -37,13 +45,21 @@ static bool trans_fsd(DisasContext *ctx, arg_fsd *a) { REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); - TCGv t0 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - tcg_gen_addi_tl(t0, t0, a->imm); =20 - tcg_gen_qemu_st_i64(cpu_fpr[a->rs2], t0, ctx->mem_idx, MO_TEQ); + TCGv addr =3D gpr_src(ctx, a->rs1); + TCGv temp =3D NULL; =20 - tcg_temp_free(t0); + if (a->imm) { + temp =3D tcg_temp_new(); + tcg_gen_addi_tl(temp, addr, a->imm); + addr =3D temp; + } + + tcg_gen_qemu_st_i64(cpu_fpr[a->rs2], addr, ctx->mem_idx, MO_TEQ); + + if (temp) { + tcg_temp_free(temp); + } return true; } =20 @@ -252,11 +268,8 @@ static bool trans_feq_d(DisasContext *ctx, arg_feq_d *= a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); =20 - TCGv t0 =3D tcg_temp_new(); - gen_helper_feq_d(t0, cpu_env, cpu_fpr[a->rs1], cpu_fpr[a->rs2]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); - + gen_helper_feq_d(gpr_dst(ctx, a->rd), cpu_env, + cpu_fpr[a->rs1], cpu_fpr[a->rs2]); return true; } =20 @@ -265,11 +278,8 @@ static bool trans_flt_d(DisasContext *ctx, arg_flt_d *= a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); =20 - TCGv t0 =3D tcg_temp_new(); - gen_helper_flt_d(t0, cpu_env, cpu_fpr[a->rs1], cpu_fpr[a->rs2]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); - + gen_helper_flt_d(gpr_dst(ctx, a->rd), cpu_env, + cpu_fpr[a->rs1], cpu_fpr[a->rs2]); return true; } =20 @@ -278,11 +288,8 @@ static bool trans_fle_d(DisasContext *ctx, arg_fle_d *= a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); =20 - TCGv t0 =3D tcg_temp_new(); - gen_helper_fle_d(t0, cpu_env, cpu_fpr[a->rs1], cpu_fpr[a->rs2]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); - + gen_helper_fle_d(gpr_dst(ctx, a->rd), cpu_env, + cpu_fpr[a->rs1], cpu_fpr[a->rs2]); return true; } =20 @@ -291,10 +298,7 @@ static bool trans_fclass_d(DisasContext *ctx, arg_fcla= ss_d *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); =20 - TCGv t0 =3D tcg_temp_new(); - gen_helper_fclass_d(t0, cpu_fpr[a->rs1]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); + gen_helper_fclass_d(gpr_dst(ctx, a->rd), cpu_fpr[a->rs1]); return true; } =20 @@ -303,12 +307,8 @@ static bool trans_fcvt_w_d(DisasContext *ctx, arg_fcvt= _w_d *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); =20 - TCGv t0 =3D tcg_temp_new(); gen_set_rm(ctx, a->rm); - gen_helper_fcvt_w_d(t0, cpu_env, cpu_fpr[a->rs1]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); - + gen_helper_fcvt_w_d(gpr_dst(ctx, a->rd), cpu_env, cpu_fpr[a->rs1]); return true; } =20 @@ -317,12 +317,8 @@ static bool trans_fcvt_wu_d(DisasContext *ctx, arg_fcv= t_wu_d *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); =20 - TCGv t0 =3D tcg_temp_new(); gen_set_rm(ctx, a->rm); - gen_helper_fcvt_wu_d(t0, cpu_env, cpu_fpr[a->rs1]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); - + gen_helper_fcvt_wu_d(gpr_dst(ctx, a->rd), cpu_env, cpu_fpr[a->rs1]); return true; } =20 @@ -331,12 +327,8 @@ static bool trans_fcvt_d_w(DisasContext *ctx, arg_fcvt= _d_w *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); =20 - TCGv t0 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - gen_set_rm(ctx, a->rm); - gen_helper_fcvt_d_w(cpu_fpr[a->rd], cpu_env, t0); - tcg_temp_free(t0); + gen_helper_fcvt_d_w(cpu_fpr[a->rd], cpu_env, gpr_src(ctx, a->rs1)); =20 mark_fs_dirty(ctx); return true; @@ -347,12 +339,8 @@ static bool trans_fcvt_d_wu(DisasContext *ctx, arg_fcv= t_d_wu *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); =20 - TCGv t0 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - gen_set_rm(ctx, a->rm); - gen_helper_fcvt_d_wu(cpu_fpr[a->rd], cpu_env, t0); - tcg_temp_free(t0); + gen_helper_fcvt_d_wu(cpu_fpr[a->rd], cpu_env, gpr_src(ctx, a->rs1)); =20 mark_fs_dirty(ctx); return true; @@ -364,11 +352,8 @@ static bool trans_fcvt_l_d(DisasContext *ctx, arg_fcvt= _l_d *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); =20 - TCGv t0 =3D tcg_temp_new(); gen_set_rm(ctx, a->rm); - gen_helper_fcvt_l_d(t0, cpu_env, cpu_fpr[a->rs1]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); + gen_helper_fcvt_l_d(gpr_dst(ctx, a->rd), cpu_env, cpu_fpr[a->rs1]); return true; } =20 @@ -378,11 +363,8 @@ static bool trans_fcvt_lu_d(DisasContext *ctx, arg_fcv= t_lu_d *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); =20 - TCGv t0 =3D tcg_temp_new(); gen_set_rm(ctx, a->rm); - gen_helper_fcvt_lu_d(t0, cpu_env, cpu_fpr[a->rs1]); - gen_set_gpr(a->rd, t0); - tcg_temp_free(t0); + gen_helper_fcvt_lu_d(gpr_dst(ctx, a->rd), cpu_env, cpu_fpr[a->rs1]); return true; } =20 @@ -406,12 +388,9 @@ static bool trans_fcvt_d_l(DisasContext *ctx, arg_fcvt= _d_l *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); =20 - TCGv t0 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - gen_set_rm(ctx, a->rm); - gen_helper_fcvt_d_l(cpu_fpr[a->rd], cpu_env, t0); - tcg_temp_free(t0); + gen_helper_fcvt_d_l(cpu_fpr[a->rd], cpu_env, gpr_src(ctx, a->rs1)); + mark_fs_dirty(ctx); return true; } @@ -422,12 +401,9 @@ static bool trans_fcvt_d_lu(DisasContext *ctx, arg_fcv= t_d_lu *a) REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); =20 - TCGv t0 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - gen_set_rm(ctx, a->rm); - gen_helper_fcvt_d_lu(cpu_fpr[a->rd], cpu_env, t0); - tcg_temp_free(t0); + gen_helper_fcvt_d_lu(cpu_fpr[a->rd], cpu_env, gpr_src(ctx, a->rs1)); + mark_fs_dirty(ctx); return true; } @@ -439,11 +415,7 @@ static bool trans_fmv_d_x(DisasContext *ctx, arg_fmv_d= _x *a) REQUIRE_EXT(ctx, RVD); =20 #ifdef TARGET_RISCV64 - TCGv t0 =3D tcg_temp_new(); - gen_get_gpr(t0, a->rs1); - - tcg_gen_mov_tl(cpu_fpr[a->rd], t0); - tcg_temp_free(t0); + tcg_gen_mov_tl(cpu_fpr[a->rd], gpr_src(ctx, a->rs1)); mark_fs_dirty(ctx); return true; #else --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625806457150109.79643786641418; Thu, 8 Jul 2021 21:54:17 -0700 (PDT) Received: from localhost ([::1]:47612 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iWl-0002UG-P1 for importer@patchew.org; Fri, 09 Jul 2021 00:54:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54008) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i64-0006aX-Iv for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:42 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:46968) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5k-0001Xj-4N for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:40 -0400 Received: by mail-pg1-x529.google.com with SMTP id w15so8665161pgk.13 for ; Thu, 08 Jul 2021 21:26:19 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Bpo+nkLeBkcurb9p7fZinAdhuAJacCJMR3e5BDqkiuc=; b=wk5KrkB0hMZQ2JDMo0InJ8C4B9Xl4+C2e5UFxiu+nHRNLi0SpZta7A+baOueUklqMw Py9IzA4FD+pTsHEOnVhMTSOiPvy9/tu/yzIqE+rkJQjaJKivGQtJ0gZmUcVS7Y2N1lSL yNnMGgu8wOdMpsoEPNjrPYDbvTEwiICT84huxobWaR4200Imd5x7l40HtRTIyK2daXcp tbLE2nh0CzV6e3+lf13Fa4IfKcn2QgUt9tkXrQyTBRdet1cjZwrItFWUqKWJtdCgio9s f+AnEAcxfoRtm38AOpIpsoDrXbbH3LUHP038zZSoMelrFc3AbJRr89PgaC6XzRxi/6rt a/tw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Bpo+nkLeBkcurb9p7fZinAdhuAJacCJMR3e5BDqkiuc=; b=TufLbNc6Cviw94vA3d+gBhvJle0SM1L2quWrglAd2C5mJ3AQuOJHz71ZqylpDCkLQ/ NCQCkB3/0diSW/83lIESGQoV2KbQRVZq4T89NZqnrWRirB6ezn9ldMgw1pKm6OtAg9Iy nVRrcYmQ5tT36QWUILtYumxvRtZNbMMAbibxGlpUTMAo40XE/NDXixtiH5ousXFscnqw Dc40XG9wCE9G5k5VqxHOs/vzpwB59zcjTdCctLQleUqDN6OskqgMDBTjvyhATox1daSS SzYQUjW78WbCpm7ucGhnfG93AMTEMQGp42LA70R3+H63HkDCAfzF41YFNKE36HyTssP8 BY4A== X-Gm-Message-State: AOAM533Sp6R8zouVWn+vALMPx0MC3s8llnWVJF/DVwrsGlQUkNnfXHQR tZG40wcCFDyanhrPVbykqv6tmaNTOpLICQ== X-Google-Smtp-Source: ABdhPJybOtC5YF2pfFGGZrPqGh84a0Fju5FlzbHVOhX6DnbXzwI1pqj79SiU9yOJldZ0M7laejXpWg== X-Received: by 2002:a63:4719:: with SMTP id u25mr36111237pga.193.1625804778231; Thu, 08 Jul 2021 21:26:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 14/17] target/riscv: Tidy trans_rvh.c.inc Date: Thu, 8 Jul 2021 21:26:05 -0700 Message-Id: <20210709042608.883256-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625806457971100001 Content-Type: text/plain; charset="utf-8" Exit early if check_access fails. Split out do_hlv, do_hsv, do_hlvx subroutines. Use gpr_src, gpr_dst in the new subroutines. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/insn32.decode | 1 + target/riscv/insn_trans/trans_rvh.c.inc | 264 +++++------------------- 2 files changed, 55 insertions(+), 210 deletions(-) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index f09f8d5faf..2cd921d51c 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -42,6 +42,7 @@ &j imm rd &r rd rs1 rs2 &r2 rd rs1 +&r2_s rs1 rs2 &s imm rs1 rs2 &u imm rd &shift shamt rs1 rd diff --git a/target/riscv/insn_trans/trans_rvh.c.inc b/target/riscv/insn_tr= ans/trans_rvh.c.inc index 6b5edf82b7..dac732024b 100644 --- a/target/riscv/insn_trans/trans_rvh.c.inc +++ b/target/riscv/insn_trans/trans_rvh.c.inc @@ -17,281 +17,137 @@ */ =20 #ifndef CONFIG_USER_ONLY -static void check_access(DisasContext *ctx) { +static bool check_access(DisasContext *ctx) +{ if (!ctx->hlsx) { if (ctx->virt_enabled) { generate_exception(ctx, RISCV_EXCP_VIRT_INSTRUCTION_FAULT); } else { generate_exception(ctx, RISCV_EXCP_ILLEGAL_INST); } + return false; } + return true; } #endif =20 +static bool do_hlv(DisasContext *ctx, arg_r2 *a, MemOp mop) +{ +#ifdef CONFIG_USER_ONLY + return false; +#else + if (check_access(ctx)) { + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv addr =3D gpr_src(ctx, a->rs1); + int mem_idx =3D ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MASK; + tcg_gen_qemu_ld_tl(dest, addr, mem_idx, mop); + } + return true; +#endif +} + static bool trans_hlv_b(DisasContext *ctx, arg_hlv_b *a) { REQUIRE_EXT(ctx, RVH); -#ifndef CONFIG_USER_ONLY - TCGv t0 =3D tcg_temp_new(); - TCGv t1 =3D tcg_temp_new(); - - check_access(ctx); - - gen_get_gpr(t0, a->rs1); - - tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MAS= K, MO_SB); - gen_set_gpr(a->rd, t1); - - tcg_temp_free(t0); - tcg_temp_free(t1); - return true; -#else - return false; -#endif + return do_hlv(ctx, a, MO_SB); } =20 static bool trans_hlv_h(DisasContext *ctx, arg_hlv_h *a) { REQUIRE_EXT(ctx, RVH); -#ifndef CONFIG_USER_ONLY - TCGv t0 =3D tcg_temp_new(); - TCGv t1 =3D tcg_temp_new(); - - check_access(ctx); - - gen_get_gpr(t0, a->rs1); - - tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MAS= K, MO_TESW); - gen_set_gpr(a->rd, t1); - - tcg_temp_free(t0); - tcg_temp_free(t1); - return true; -#else - return false; -#endif + return do_hlv(ctx, a, MO_TESW); } =20 static bool trans_hlv_w(DisasContext *ctx, arg_hlv_w *a) { REQUIRE_EXT(ctx, RVH); -#ifndef CONFIG_USER_ONLY - TCGv t0 =3D tcg_temp_new(); - TCGv t1 =3D tcg_temp_new(); - - check_access(ctx); - - gen_get_gpr(t0, a->rs1); - - tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MAS= K, MO_TESL); - gen_set_gpr(a->rd, t1); - - tcg_temp_free(t0); - tcg_temp_free(t1); - return true; -#else - return false; -#endif + return do_hlv(ctx, a, MO_TESL); } =20 static bool trans_hlv_bu(DisasContext *ctx, arg_hlv_bu *a) { REQUIRE_EXT(ctx, RVH); -#ifndef CONFIG_USER_ONLY - TCGv t0 =3D tcg_temp_new(); - TCGv t1 =3D tcg_temp_new(); - - check_access(ctx); - - gen_get_gpr(t0, a->rs1); - - tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MAS= K, MO_UB); - gen_set_gpr(a->rd, t1); - - tcg_temp_free(t0); - tcg_temp_free(t1); - return true; -#else - return false; -#endif + return do_hlv(ctx, a, MO_UB); } =20 static bool trans_hlv_hu(DisasContext *ctx, arg_hlv_hu *a) { REQUIRE_EXT(ctx, RVH); -#ifndef CONFIG_USER_ONLY - TCGv t0 =3D tcg_temp_new(); - TCGv t1 =3D tcg_temp_new(); + return do_hlv(ctx, a, MO_TEUW); +} =20 - check_access(ctx); - - gen_get_gpr(t0, a->rs1); - tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MAS= K, MO_TEUW); - gen_set_gpr(a->rd, t1); - - tcg_temp_free(t0); - tcg_temp_free(t1); - return true; -#else +static bool do_hsv(DisasContext *ctx, arg_r2_s *a, MemOp mop) +{ +#ifdef CONFIG_USER_ONLY return false; +#else + if (check_access(ctx)) { + TCGv addr =3D gpr_src(ctx, a->rs1); + TCGv data =3D gpr_src(ctx, a->rs2); + int mem_idx =3D ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MASK; + tcg_gen_qemu_ld_tl(data, addr, mem_idx, mop); + } + return true; #endif } =20 static bool trans_hsv_b(DisasContext *ctx, arg_hsv_b *a) { REQUIRE_EXT(ctx, RVH); -#ifndef CONFIG_USER_ONLY - TCGv t0 =3D tcg_temp_new(); - TCGv dat =3D tcg_temp_new(); - - check_access(ctx); - - gen_get_gpr(t0, a->rs1); - gen_get_gpr(dat, a->rs2); - - tcg_gen_qemu_st_tl(dat, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MA= SK, MO_SB); - - tcg_temp_free(t0); - tcg_temp_free(dat); - return true; -#else - return false; -#endif + return do_hsv(ctx, a, MO_SB); } =20 static bool trans_hsv_h(DisasContext *ctx, arg_hsv_h *a) { REQUIRE_EXT(ctx, RVH); -#ifndef CONFIG_USER_ONLY - TCGv t0 =3D tcg_temp_new(); - TCGv dat =3D tcg_temp_new(); - - check_access(ctx); - - gen_get_gpr(t0, a->rs1); - gen_get_gpr(dat, a->rs2); - - tcg_gen_qemu_st_tl(dat, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MA= SK, MO_TESW); - - tcg_temp_free(t0); - tcg_temp_free(dat); - return true; -#else - return false; -#endif + return do_hsv(ctx, a, MO_TESW); } =20 static bool trans_hsv_w(DisasContext *ctx, arg_hsv_w *a) { REQUIRE_EXT(ctx, RVH); -#ifndef CONFIG_USER_ONLY - TCGv t0 =3D tcg_temp_new(); - TCGv dat =3D tcg_temp_new(); - - check_access(ctx); - - gen_get_gpr(t0, a->rs1); - gen_get_gpr(dat, a->rs2); - - tcg_gen_qemu_st_tl(dat, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MA= SK, MO_TESL); - - tcg_temp_free(t0); - tcg_temp_free(dat); - return true; -#else - return false; -#endif + return do_hsv(ctx, a, MO_TESL); } =20 static bool trans_hlv_wu(DisasContext *ctx, arg_hlv_wu *a) { REQUIRE_64BIT(ctx); REQUIRE_EXT(ctx, RVH); - -#ifndef CONFIG_USER_ONLY - TCGv t0 =3D tcg_temp_new(); - TCGv t1 =3D tcg_temp_new(); - - check_access(ctx); - - gen_get_gpr(t0, a->rs1); - - tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MAS= K, MO_TEUL); - gen_set_gpr(a->rd, t1); - - tcg_temp_free(t0); - tcg_temp_free(t1); - return true; -#else - return false; -#endif + return do_hlv(ctx, a, MO_TEUL); } =20 static bool trans_hlv_d(DisasContext *ctx, arg_hlv_d *a) { REQUIRE_64BIT(ctx); REQUIRE_EXT(ctx, RVH); - -#ifndef CONFIG_USER_ONLY - TCGv t0 =3D tcg_temp_new(); - TCGv t1 =3D tcg_temp_new(); - - check_access(ctx); - - gen_get_gpr(t0, a->rs1); - - tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MAS= K, MO_TEQ); - gen_set_gpr(a->rd, t1); - - tcg_temp_free(t0); - tcg_temp_free(t1); - return true; -#else - return false; -#endif + return do_hlv(ctx, a, MO_TEQ); } =20 static bool trans_hsv_d(DisasContext *ctx, arg_hsv_d *a) { REQUIRE_64BIT(ctx); REQUIRE_EXT(ctx, RVH); + return do_hsv(ctx, a, MO_TEQ); +} =20 #ifndef CONFIG_USER_ONLY - TCGv t0 =3D tcg_temp_new(); - TCGv dat =3D tcg_temp_new(); - - check_access(ctx); - - gen_get_gpr(t0, a->rs1); - gen_get_gpr(dat, a->rs2); - - tcg_gen_qemu_st_tl(dat, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MA= SK, MO_TEQ); - - tcg_temp_free(t0); - tcg_temp_free(dat); +static bool do_hlvx(DisasContext *ctx, arg_r2 *a, + void (*func)(TCGv, TCGv_env, TCGv)) +{ + if (check_access(ctx)) { + TCGv dest =3D gpr_dst(ctx, a->rd); + TCGv addr =3D gpr_src(ctx, a->rs1); + func(dest, cpu_env, addr); + } return true; -#else - return false; -#endif } +#endif =20 static bool trans_hlvx_hu(DisasContext *ctx, arg_hlvx_hu *a) { REQUIRE_EXT(ctx, RVH); #ifndef CONFIG_USER_ONLY - TCGv t0 =3D tcg_temp_new(); - TCGv t1 =3D tcg_temp_new(); - - check_access(ctx); - - gen_get_gpr(t0, a->rs1); - - gen_helper_hyp_hlvx_hu(t1, cpu_env, t0); - gen_set_gpr(a->rd, t1); - - tcg_temp_free(t0); - tcg_temp_free(t1); - return true; + return do_hlvx(ctx, a, gen_helper_hyp_hlvx_hu); #else return false; #endif @@ -301,19 +157,7 @@ static bool trans_hlvx_wu(DisasContext *ctx, arg_hlvx_= wu *a) { REQUIRE_EXT(ctx, RVH); #ifndef CONFIG_USER_ONLY - TCGv t0 =3D tcg_temp_new(); - TCGv t1 =3D tcg_temp_new(); - - check_access(ctx); - - gen_get_gpr(t0, a->rs1); - - gen_helper_hyp_hlvx_wu(t1, cpu_env, t0); - gen_set_gpr(a->rd, t1); - - tcg_temp_free(t0); - tcg_temp_free(t1); - return true; + return do_hlvx(ctx, a, gen_helper_hyp_hlvx_wu); #else return false; #endif --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625805743674594.3805422818828; Thu, 8 Jul 2021 21:42:23 -0700 (PDT) Received: from localhost ([::1]:39564 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iLG-0003kR-KM for importer@patchew.org; Fri, 09 Jul 2021 00:42:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53956) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i62-0006X7-4d for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:38 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]:39700) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5k-0001Z1-4b for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:37 -0400 Received: by mail-pj1-x102c.google.com with SMTP id p14-20020a17090ad30eb02901731c776526so5197217pju.4 for ; Thu, 08 Jul 2021 21:26:19 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lbT7rR4xAZ+TINcw0n3vg8MxSKcWXYHtQH2vV0PJUA8=; b=GCNmFCvx+2bFPvSIENUpcshqAYTMWkdpmFvPDuO0pMn1alP4Zqw6TuIPTiUEBdEWFC HchAPqDg3fgVLZrcMKG1N9h6N+y0WYGSaJ1gc1g55NucRmhPqXuKe2h6Jrf7o7evhhQn VhdQ4Cv+MezTroeIC9vtIFwmLu8MPU8vV2a4YqJYYNQTSDXbvOaoAiiB240sxn3k33UE qJQlu4UfajGAh4MuupnzoAq7zYlVUglJU1RTiiYunIv5dlI8BqzMLlevDzHoXWSKwunQ nL6y8Fik8JX3ZWo7CSn17kTzV8jQl29cHgn8dmHZ9qPBQ/rsdrUoS/bmozp3axbcUtfx Qoqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lbT7rR4xAZ+TINcw0n3vg8MxSKcWXYHtQH2vV0PJUA8=; b=Rwdn10xjatUkGOsTtD0oErhccKMVS7UpyNherL/Z0wGy3YUvcYQqjQ4gi/Bm9l/S+6 Hu8ihRO8U+/4rlHErmv7kzDo7oLOOMoP02xgnvvuWZfRvi3dYyGra0yjISGNRKUxPyh+ 4Q+tTwFsSb5xdD6dBYUO770OwDccEE5hM7SG8JdWHCjmEIU+/XU86ExXtT+o3QpX3OA9 S+FDEqbFYm+lk7yHVsc91m1krPi7aNp7nWkuloi6kfkybuG8iNp9eTs6w3frbu3VMDRY jChm1fhfRb3cFPHsedP+tEgV+cyMwJcx3qzcD9bo3Ulkl3mVYdgbHGtjMqWEsTt4KKtu dTZA== X-Gm-Message-State: AOAM5320on4Bnte0F2HuSXMuz00nWFpSmbVbQIvuE0iizEDfchefI0jb E3CxkaMWIdBWTxeq2Ez24Dd5Ugyu6RFt/w== X-Google-Smtp-Source: ABdhPJymI9HTMxv336TjQ2Je1aq8eBSSvFDhp8WdCPeDVJClN8M7c8W0Ys9mS8d6cMXwn/JCzcUspg== X-Received: by 2002:a17:90a:4e4a:: with SMTP id t10mr35752021pjl.173.1625804778835; Thu, 08 Jul 2021 21:26:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 15/17] target/riscv: Use gen_arith for mulh and mulhu Date: Thu, 8 Jul 2021 21:26:06 -0700 Message-Id: <20210709042608.883256-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102c; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625805745686100001 Content-Type: text/plain; charset="utf-8" Split out gen_mulh and gen_mulhu and use the common helper. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/translate.c | 16 ++++++++++++++++ target/riscv/insn_trans/trans_rvm.c.inc | 24 ++---------------------- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 6ad40e43b0..8ff75a5798 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -235,6 +235,22 @@ static TCGv gpr_dst(DisasContext *ctx, int reg_num) return cpu_gpr[reg_num]; } =20 +static void gen_mulh(TCGv ret, TCGv s1, TCGv s2) +{ + TCGv discard =3D tcg_temp_new(); + + tcg_gen_muls2_tl(discard, ret, s1, s2); + tcg_temp_free(discard); +} + +static void gen_mulhu(TCGv ret, TCGv s1, TCGv s2) +{ + TCGv discard =3D tcg_temp_new(); + + tcg_gen_mulu2_tl(discard, ret, s1, s2); + tcg_temp_free(discard); +} + static void gen_mulhsu(TCGv ret, TCGv arg1, TCGv arg2) { TCGv rl =3D tcg_temp_new(); diff --git a/target/riscv/insn_trans/trans_rvm.c.inc b/target/riscv/insn_tr= ans/trans_rvm.c.inc index 10ecc456fc..34220b824d 100644 --- a/target/riscv/insn_trans/trans_rvm.c.inc +++ b/target/riscv/insn_trans/trans_rvm.c.inc @@ -28,17 +28,7 @@ static bool trans_mul(DisasContext *ctx, arg_mul *a) static bool trans_mulh(DisasContext *ctx, arg_mulh *a) { REQUIRE_EXT(ctx, RVM); - TCGv source1 =3D tcg_temp_new(); - TCGv source2 =3D tcg_temp_new(); - gen_get_gpr(source1, a->rs1); - gen_get_gpr(source2, a->rs2); - - tcg_gen_muls2_tl(source2, source1, source1, source2); - - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); - tcg_temp_free(source2); - return true; + return gen_arith(ctx, a, gen_mulh); } =20 static bool trans_mulhsu(DisasContext *ctx, arg_mulhsu *a) @@ -50,17 +40,7 @@ static bool trans_mulhsu(DisasContext *ctx, arg_mulhsu *= a) static bool trans_mulhu(DisasContext *ctx, arg_mulhu *a) { REQUIRE_EXT(ctx, RVM); - TCGv source1 =3D tcg_temp_new(); - TCGv source2 =3D tcg_temp_new(); - gen_get_gpr(source1, a->rs1); - gen_get_gpr(source2, a->rs2); - - tcg_gen_mulu2_tl(source2, source1, source1, source2); - - gen_set_gpr(a->rd, source1); - tcg_temp_free(source1); - tcg_temp_free(source2); - return true; + return gen_arith(ctx, a, gen_mulhu); } =20 static bool trans_div(DisasContext *ctx, arg_div *a) --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1625805922864794.5569604163929; Thu, 8 Jul 2021 21:45:22 -0700 (PDT) Received: from localhost ([::1]:49946 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iO9-000280-IZ for importer@patchew.org; Fri, 09 Jul 2021 00:45:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54060) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i6A-0006dX-Bf for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:46 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:50993) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5k-0001ZB-Q0 for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:46 -0400 Received: by mail-pj1-x1036.google.com with SMTP id ie21so5090500pjb.0 for ; Thu, 08 Jul 2021 21:26:20 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hD5QgCjL8BmOLT1fueTUhF/PZmCVvTTtA3s9rkad2Ck=; b=zaLeJ8zzfRkLS2uv9ogfFn/ambqxAR55KwcZJKvzopmZkSPo27QxNnb2/BO022KdRh oi/VpJAx0Lzq5BNYb/AVbSv8qEdCChHyZk5zaFFKpNc8psLkh8rhfoViUFaPKIY9EtrS 1Ovbsn9CPM+id2wF/JOHdNf97IRT8D2PJx0x02RKaCbEduLfFIzQVvqOo/zq+1Qq4vm6 hulCOSmA5IVIc27hWQmlZsc2xPf74pHd5r2EMMN8olfmALFt8PJN6c0NfN/kV3moj71v xbLZnf4DoCkCOIKx7bIFI6WejjX1pbloo7YS4WQppnW8TWZDF2pCcEa0iYdFF677ctso Elog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hD5QgCjL8BmOLT1fueTUhF/PZmCVvTTtA3s9rkad2Ck=; b=hw3biGhQyAOLoRDNPMq5+UUu9CJsNIumNUYF6drH98dxWpWAmW5/fVVXIREWx+Nt4m WNFk2Dq6nh+rIYc00hZgnXiqonn9b7zPmd6CagbKQUstBz/cn+u9Ay0RzsiOaE1bv8V4 KxmRFkFTC2CcVK6KveWILBe28Os4WOohKY02FYWQwBnVh3XyFc3aHrYFRGPx6axrm5rF cIDFrXZcRmstDYUKzOgDSbOLU9tzQp5dot7xzjNZEBnlKKVDoOekoj/ZUfZt+qQqXY19 slycR8hs4ekd+hIbPhFjYBJTybnsUzK4qfbmvAdk3fKgCFB4zxg7q73eERMWLrjmezbP KqFg== X-Gm-Message-State: AOAM533IL4RAb1+u7m1euTWeAjpWHH2aIRqdyxrU/osyj74qsDjFfGMl 85kgUgH4qN/2+3oGnqajkLZ7dN620EAe6A== X-Google-Smtp-Source: ABdhPJzEvrPtznODRAd/4vdERl74pdvWST6+qOkdTerINP71IeHkPjNwN/glw4O8N7K5qbG1hZqwcg== X-Received: by 2002:a17:90a:e98a:: with SMTP id v10mr8641511pjy.46.1625804779438; Thu, 08 Jul 2021 21:26:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 16/17] target/riscv: Use gpr_{src,dst} for RVV Date: Thu, 8 Jul 2021 21:26:07 -0700 Message-Id: <20210709042608.883256-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625805925040100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/insn_trans/trans_rvv.c.inc | 79 +++++++------------------ 1 file changed, 20 insertions(+), 59 deletions(-) diff --git a/target/riscv/insn_trans/trans_rvv.c.inc b/target/riscv/insn_tr= ans/trans_rvv.c.inc index a8e7272487..84a45fac38 100644 --- a/target/riscv/insn_trans/trans_rvv.c.inc +++ b/target/riscv/insn_trans/trans_rvv.c.inc @@ -27,27 +27,21 @@ static bool trans_vsetvl(DisasContext *ctx, arg_vsetvl = *a) return false; } =20 - s2 =3D tcg_temp_new(); - dst =3D tcg_temp_new(); + s2 =3D gpr_src(ctx, a->rs2); + dst =3D gpr_dst(ctx, a->rd); =20 /* Using x0 as the rs1 register specifier, encodes an infinite AVL */ if (a->rs1 =3D=3D 0) { /* As the mask is at least one bit, RV_VLEN_MAX is >=3D VLMAX */ s1 =3D tcg_constant_tl(RV_VLEN_MAX); } else { - s1 =3D tcg_temp_new(); - gen_get_gpr(s1, a->rs1); + s1 =3D gpr_src(ctx, a->rs1); } - gen_get_gpr(s2, a->rs2); gen_helper_vsetvl(dst, cpu_env, s1, s2); - gen_set_gpr(a->rd, dst); + tcg_gen_movi_tl(cpu_pc, ctx->pc_succ_insn); lookup_and_goto_ptr(ctx); ctx->base.is_jmp =3D DISAS_NORETURN; - - tcg_temp_free(s1); - tcg_temp_free(s2); - tcg_temp_free(dst); return true; } =20 @@ -60,23 +54,19 @@ static bool trans_vsetvli(DisasContext *ctx, arg_vsetvl= i *a) } =20 s2 =3D tcg_constant_tl(a->zimm); - dst =3D tcg_temp_new(); + dst =3D gpr_dst(ctx, a->rd); =20 /* Using x0 as the rs1 register specifier, encodes an infinite AVL */ if (a->rs1 =3D=3D 0) { /* As the mask is at least one bit, RV_VLEN_MAX is >=3D VLMAX */ s1 =3D tcg_constant_tl(RV_VLEN_MAX); } else { - s1 =3D tcg_temp_new(); - gen_get_gpr(s1, a->rs1); + s1 =3D gpr_src(ctx, a->rs1); } gen_helper_vsetvl(dst, cpu_env, s1, s2); - gen_set_gpr(a->rd, dst); + gen_goto_tb(ctx, 0, ctx->pc_succ_insn); ctx->base.is_jmp =3D DISAS_NORETURN; - - tcg_temp_free(s1); - tcg_temp_free(dst); return true; } =20 @@ -173,7 +163,7 @@ static bool ldst_us_trans(uint32_t vd, uint32_t rs1, ui= nt32_t data, =20 dest =3D tcg_temp_new_ptr(); mask =3D tcg_temp_new_ptr(); - base =3D tcg_temp_new(); + base =3D gpr_src(s, rs1); =20 /* * As simd_desc supports at most 256 bytes, and in this implementation, @@ -184,7 +174,6 @@ static bool ldst_us_trans(uint32_t vd, uint32_t rs1, ui= nt32_t data, */ desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); =20 - gen_get_gpr(base, rs1); tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd)); tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0)); =20 @@ -192,7 +181,6 @@ static bool ldst_us_trans(uint32_t vd, uint32_t rs1, ui= nt32_t data, =20 tcg_temp_free_ptr(dest); tcg_temp_free_ptr(mask); - tcg_temp_free(base); gen_set_label(over); return true; } @@ -330,12 +318,10 @@ static bool ldst_stride_trans(uint32_t vd, uint32_t r= s1, uint32_t rs2, =20 dest =3D tcg_temp_new_ptr(); mask =3D tcg_temp_new_ptr(); - base =3D tcg_temp_new(); - stride =3D tcg_temp_new(); + base =3D gpr_src(s, rs1); + stride =3D gpr_src(s, rs2); desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); =20 - gen_get_gpr(base, rs1); - gen_get_gpr(stride, rs2); tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd)); tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0)); =20 @@ -343,8 +329,6 @@ static bool ldst_stride_trans(uint32_t vd, uint32_t rs1= , uint32_t rs2, =20 tcg_temp_free_ptr(dest); tcg_temp_free_ptr(mask); - tcg_temp_free(base); - tcg_temp_free(stride); gen_set_label(over); return true; } @@ -458,10 +442,9 @@ static bool ldst_index_trans(uint32_t vd, uint32_t rs1= , uint32_t vs2, dest =3D tcg_temp_new_ptr(); mask =3D tcg_temp_new_ptr(); index =3D tcg_temp_new_ptr(); - base =3D tcg_temp_new(); + base =3D gpr_src(s, rs1); desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); =20 - gen_get_gpr(base, rs1); tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd)); tcg_gen_addi_ptr(index, cpu_env, vreg_ofs(s, vs2)); tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0)); @@ -471,7 +454,6 @@ static bool ldst_index_trans(uint32_t vd, uint32_t rs1,= uint32_t vs2, tcg_temp_free_ptr(dest); tcg_temp_free_ptr(mask); tcg_temp_free_ptr(index); - tcg_temp_free(base); gen_set_label(over); return true; } @@ -589,10 +571,9 @@ static bool ldff_trans(uint32_t vd, uint32_t rs1, uint= 32_t data, =20 dest =3D tcg_temp_new_ptr(); mask =3D tcg_temp_new_ptr(); - base =3D tcg_temp_new(); + base =3D gpr_src(s, rs1); desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); =20 - gen_get_gpr(base, rs1); tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd)); tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0)); =20 @@ -600,7 +581,6 @@ static bool ldff_trans(uint32_t vd, uint32_t rs1, uint3= 2_t data, =20 tcg_temp_free_ptr(dest); tcg_temp_free_ptr(mask); - tcg_temp_free(base); gen_set_label(over); return true; } @@ -665,10 +645,9 @@ static bool amo_trans(uint32_t vd, uint32_t rs1, uint3= 2_t vs2, dest =3D tcg_temp_new_ptr(); mask =3D tcg_temp_new_ptr(); index =3D tcg_temp_new_ptr(); - base =3D tcg_temp_new(); + base =3D gpr_src(s, rs1); desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data)); =20 - gen_get_gpr(base, rs1); tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd)); tcg_gen_addi_ptr(index, cpu_env, vreg_ofs(s, vs2)); tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0)); @@ -678,7 +657,6 @@ static bool amo_trans(uint32_t vd, uint32_t rs1, uint32= _t vs2, tcg_temp_free_ptr(dest); tcg_temp_free_ptr(mask); tcg_temp_free_ptr(index); - tcg_temp_free(base); gen_set_label(over); return true; } @@ -862,8 +840,7 @@ static bool opivx_trans(uint32_t vd, uint32_t rs1, uint= 32_t vs2, uint32_t vm, dest =3D tcg_temp_new_ptr(); mask =3D tcg_temp_new_ptr(); src2 =3D tcg_temp_new_ptr(); - src1 =3D tcg_temp_new(); - gen_get_gpr(src1, rs1); + src1 =3D gpr_src(s, rs1); =20 data =3D FIELD_DP32(data, VDATA, MLEN, s->mlen); data =3D FIELD_DP32(data, VDATA, VM, vm); @@ -879,7 +856,6 @@ static bool opivx_trans(uint32_t vd, uint32_t rs1, uint= 32_t vs2, uint32_t vm, tcg_temp_free_ptr(dest); tcg_temp_free_ptr(mask); tcg_temp_free_ptr(src2); - tcg_temp_free(src1); gen_set_label(over); return true; } @@ -905,15 +881,12 @@ do_opivx_gvec(DisasContext *s, arg_rmrr *a, GVecGen2s= Fn *gvec_fn, =20 if (a->vm && s->vl_eq_vlmax) { TCGv_i64 src1 =3D tcg_temp_new_i64(); - TCGv tmp =3D tcg_temp_new(); =20 - gen_get_gpr(tmp, a->rs1); - tcg_gen_ext_tl_i64(src1, tmp); + tcg_gen_ext_tl_i64(src1, gpr_src(s, a->rs1)); gvec_fn(s->sew, vreg_ofs(s, a->rd), vreg_ofs(s, a->rs2), src1, MAXSZ(s), MAXSZ(s)); =20 tcg_temp_free_i64(src1); - tcg_temp_free(tmp); return true; } return opivx_trans(a->rd, a->rs1, a->rs2, a->vm, fn, s); @@ -1398,16 +1371,13 @@ do_opivx_gvec_shift(DisasContext *s, arg_rmrr *a, G= VecGen2sFn32 *gvec_fn, =20 if (a->vm && s->vl_eq_vlmax) { TCGv_i32 src1 =3D tcg_temp_new_i32(); - TCGv tmp =3D tcg_temp_new(); =20 - gen_get_gpr(tmp, a->rs1); - tcg_gen_trunc_tl_i32(src1, tmp); + tcg_gen_trunc_tl_i32(src1, gpr_src(s, a->rs1)); tcg_gen_extract_i32(src1, src1, 0, s->sew + 3); gvec_fn(s->sew, vreg_ofs(s, a->rd), vreg_ofs(s, a->rs2), src1, MAXSZ(s), MAXSZ(s)); =20 tcg_temp_free_i32(src1); - tcg_temp_free(tmp); return true; } return opivx_trans(a->rd, a->rs1, a->rs2, a->vm, fn, s); @@ -1665,8 +1635,7 @@ static bool trans_vmv_v_x(DisasContext *s, arg_vmv_v_= x *a) TCGLabel *over =3D gen_new_label(); tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_vl, 0, over); =20 - s1 =3D tcg_temp_new(); - gen_get_gpr(s1, a->rs1); + s1 =3D gpr_src(s, a->rs1); =20 if (s->vl_eq_vlmax) { tcg_gen_gvec_dup_tl(s->sew, vreg_ofs(s, a->rd), @@ -1690,7 +1659,6 @@ static bool trans_vmv_v_x(DisasContext *s, arg_vmv_v_= x *a) tcg_temp_free_i64(s1_i64); } =20 - tcg_temp_free(s1); gen_set_label(over); return true; } @@ -2412,18 +2380,16 @@ static bool trans_vmpopc_m(DisasContext *s, arg_rmr= *a) =20 mask =3D tcg_temp_new_ptr(); src2 =3D tcg_temp_new_ptr(); - dst =3D tcg_temp_new(); + dst =3D gpr_dst(s, a->rd); desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data= )); =20 tcg_gen_addi_ptr(src2, cpu_env, vreg_ofs(s, a->rs2)); tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0)); =20 gen_helper_vmpopc_m(dst, mask, src2, cpu_env, desc); - gen_set_gpr(a->rd, dst); =20 tcg_temp_free_ptr(mask); tcg_temp_free_ptr(src2); - tcg_temp_free(dst); return true; } return false; @@ -2443,18 +2409,16 @@ static bool trans_vmfirst_m(DisasContext *s, arg_rm= r *a) =20 mask =3D tcg_temp_new_ptr(); src2 =3D tcg_temp_new_ptr(); - dst =3D tcg_temp_new(); + dst =3D gpr_dst(s, a->rd); desc =3D tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data= )); =20 tcg_gen_addi_ptr(src2, cpu_env, vreg_ofs(s, a->rs2)); tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0)); =20 gen_helper_vmfirst_m(dst, mask, src2, cpu_env, desc); - gen_set_gpr(a->rd, dst); =20 tcg_temp_free_ptr(mask); tcg_temp_free_ptr(src2); - tcg_temp_free(dst); return true; } return false; @@ -2638,7 +2602,6 @@ static void vec_element_loadi(DisasContext *s, TCGv_i= 64 dest, static bool trans_vext_x_v(DisasContext *s, arg_r *a) { TCGv_i64 tmp =3D tcg_temp_new_i64(); - TCGv dest =3D tcg_temp_new(); =20 if (a->rs1 =3D=3D 0) { /* Special case vmv.x.s rd, vs2. */ @@ -2648,10 +2611,8 @@ static bool trans_vext_x_v(DisasContext *s, arg_r *a) int vlmax =3D s->vlen >> (3 + s->sew); vec_element_loadx(s, tmp, a->rs2, cpu_gpr[a->rs1], vlmax); } - tcg_gen_trunc_i64_tl(dest, tmp); - gen_set_gpr(a->rd, dest); =20 - tcg_temp_free(dest); + tcg_gen_trunc_i64_tl(gpr_dst(s, a->rd), tmp); tcg_temp_free_i64(tmp); return true; } --=20 2.25.1 From nobody Wed May 15 04:11:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 162580617115841.664913474272; Thu, 8 Jul 2021 21:49:31 -0700 (PDT) Received: from localhost ([::1]:33394 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1iS9-0001Rv-UE for importer@patchew.org; Fri, 09 Jul 2021 00:49:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54118) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1i6F-0006oH-PZ for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:51 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]:53772) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1i5l-0001ZO-Ic for qemu-devel@nongnu.org; Fri, 09 Jul 2021 00:26:50 -0400 Received: by mail-pj1-x102e.google.com with SMTP id p9so5059024pjl.3 for ; Thu, 08 Jul 2021 21:26:20 -0700 (PDT) Received: from localhost.localdomain ([71.212.149.176]) by smtp.gmail.com with ESMTPSA id y16sm4406727pfe.70.2021.07.08.21.26.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 21:26:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Zos/XIBM0Jy9VE3NQaTNYLdt/FcSmttabh3+wO3UTg8=; b=iO6szx4BWtH+ue6cE4Dgzyuy6w+HxTBmStd1LHV+kV9WPBfLviA7eWeqzi1xXWN5l1 aSlg2odQAU3nmp4d1MbGSovVsVz0ky6qmONrDzDx2LkBSUrMZkDuyoMg2W8HMBFn/kL1 Dqk/vC6HK2O/Yw80wVouRQtApSP0nCH8ab+S6+pS9+/6+D9I9KGQ4abZYk0S4xqRyz// eAy55ZPbse/7RdaPO3faBkl43V8UmdhcxS7cpKG6oAOa628ERuJ/D6w85vCBnD6cjSsL icX/odWpBImZjGr+rQb0MSs+T4UWsbUrrsf7j9eBSXoSDGdg3PlB2OD8ctmUQMra59F3 iNgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Zos/XIBM0Jy9VE3NQaTNYLdt/FcSmttabh3+wO3UTg8=; b=alLVLkTkqioUFsQX4FhVRmLSo2LxyYwSVeleZItAooMRxJTR77dz4CXQ0AS4Zb5dav kqZPQVytxWGQ/EWt+OH+Z7ChqKJZApVcrm6q/p0pziXtIiKvxd49bfrfyA4wv0thZztT LSu6EjtoAhf2FugiZFqtp/Es+3uQzxeAn5RS1wfKE1RFkXl3X8k0wBO0OS2u7JUAIj7a LvenBSk+3uJYXBwOafImEe7yiTMuQHRUlI+uUicxQPBwgvHgdF9aQGaTWUE+izSA5xhs hTYR2WhU7UJFg8FY7hGAgFYhdJqEA7wzTBUpkhhPNdSZsWGSfut/QQJlIhT5K0NjMGUN Wb4g== X-Gm-Message-State: AOAM532pBQ9cp0ObhlbgL1FAJL3Khr5zIV5rVZmbOmi0DcuSL64fAWrX JQl99LrkGMQWcvMpxuaaweAkZMOfH5ZDrw== X-Google-Smtp-Source: ABdhPJx5LUqNrYCo8I5jdDC2eM+NfRgE0fY8ea1rU50C0NLSTbnKdvdP6fwNSQsOfzCreERoIxPyZg== X-Received: by 2002:a17:90a:4404:: with SMTP id s4mr8628604pjg.218.1625804780049; Thu, 08 Jul 2021 21:26:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 17/17] target/riscv: Remove gen_get_gpr Date: Thu, 8 Jul 2021 21:26:08 -0700 Message-Id: <20210709042608.883256-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210709042608.883256-1-richard.henderson@linaro.org> References: <20210709042608.883256-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair.francis@wdc.com, qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1625806172993100001 Content-Type: text/plain; charset="utf-8" This function is now unused. The corresponding gen_set_gpr function is still in use. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/translate.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 8ff75a5798..a6c850e9d3 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -195,15 +195,6 @@ static void gen_goto_tb(DisasContext *ctx, int n, targ= et_ulong dest) /* Wrapper for getting reg values - need to check of reg is zero since * cpu_gpr[0] is not actually allocated */ -static inline void gen_get_gpr(TCGv t, int reg_num) -{ - if (reg_num =3D=3D 0) { - tcg_gen_movi_tl(t, 0); - } else { - tcg_gen_mov_tl(t, cpu_gpr[reg_num]); - } -} - static TCGv gpr_src(DisasContext *ctx, int reg_num) { if (reg_num =3D=3D 0) { @@ -1046,9 +1037,11 @@ void riscv_translate_init(void) { int i; =20 - /* cpu_gpr[0] is a placeholder for the zero register. Do not use it. */ - /* Use the gen_set_gpr and gen_get_gpr helper functions when accessing= */ - /* registers, unless you specifically block reads/writes to reg 0 */ + /* + * cpu_gpr[0] is a placeholder for the zero register. Do not use it. + * Use the gpr_src and gpr_dst helper functions when accessing regs, + * unless you specifically block reads/writes to reg 0. + */ cpu_gpr[0] =3D NULL; =20 for (i =3D 1; i < 32; i++) { --=20 2.25.1