Re: [PATCH v5 24/24] target/riscv: Use {get,dest}_gpr for RVV

2021-08-29 Thread Alistair Francis
On Tue, Aug 24, 2021 at 6:13 AM Richard Henderson
 wrote:
>
> Remove gen_get_gpr, as the function becomes unused.
>
> Signed-off-by: Richard Henderson 

Reviewed-by: Alistair Francis 

Alistair

> ---
>  target/riscv/translate.c| 13 ++---
>  target/riscv/insn_trans/trans_rvv.c.inc | 74 +++--
>  2 files changed, 26 insertions(+), 61 deletions(-)
>
> diff --git a/target/riscv/translate.c b/target/riscv/translate.c
> index e44254e878..e356fc6c46 100644
> --- a/target/riscv/translate.c
> +++ b/target/riscv/translate.c
> @@ -232,11 +232,6 @@ static TCGv get_gpr(DisasContext *ctx, int reg_num, 
> DisasExtend ext)
>  g_assert_not_reached();
>  }
>
> -static void gen_get_gpr(DisasContext *ctx, TCGv t, int reg_num)
> -{
> -tcg_gen_mov_tl(t, get_gpr(ctx, reg_num, EXT_NONE));
> -}
> -
>  static TCGv dest_gpr(DisasContext *ctx, int reg_num)
>  {
>  if (reg_num == 0 || ctx->w) {
> @@ -637,9 +632,11 @@ void riscv_translate_init(void)
>  {
>  int i;
>
> -/* 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 gen_set_gpr and get_gpr helper functions when accessing regs,
> + * unless you specifically block reads/writes to reg 0.
> + */
>  cpu_gpr[0] = NULL;
>
>  for (i = 1; i < 32; i++) {
> diff --git a/target/riscv/insn_trans/trans_rvv.c.inc 
> b/target/riscv/insn_trans/trans_rvv.c.inc
> index de580c493c..fa451938f1 100644
> --- a/target/riscv/insn_trans/trans_rvv.c.inc
> +++ b/target/riscv/insn_trans/trans_rvv.c.inc
> @@ -27,27 +27,22 @@ static bool trans_vsetvl(DisasContext *ctx, arg_vsetvl *a)
>  return false;
>  }
>
> -s2 = tcg_temp_new();
> -dst = tcg_temp_new();
> +s2 = get_gpr(ctx, a->rs2, EXT_ZERO);
> +dst = dest_gpr(ctx, a->rd);
>
>  /* Using x0 as the rs1 register specifier, encodes an infinite AVL */
>  if (a->rs1 == 0) {
>  /* As the mask is at least one bit, RV_VLEN_MAX is >= VLMAX */
>  s1 = tcg_constant_tl(RV_VLEN_MAX);
>  } else {
> -s1 = tcg_temp_new();
> -gen_get_gpr(ctx, s1, a->rs1);
> +s1 = get_gpr(ctx, a->rs1, EXT_ZERO);
>  }
> -gen_get_gpr(ctx, s2, a->rs2);
>  gen_helper_vsetvl(dst, cpu_env, s1, s2);
>  gen_set_gpr(ctx, a->rd, dst);
> +
>  tcg_gen_movi_tl(cpu_pc, ctx->pc_succ_insn);
>  lookup_and_goto_ptr(ctx);
>  ctx->base.is_jmp = DISAS_NORETURN;
> -
> -tcg_temp_free(s1);
> -tcg_temp_free(s2);
> -tcg_temp_free(dst);
>  return true;
>  }
>
> @@ -60,23 +55,20 @@ static bool trans_vsetvli(DisasContext *ctx, arg_vsetvli 
> *a)
>  }
>
>  s2 = tcg_constant_tl(a->zimm);
> -dst = tcg_temp_new();
> +dst = dest_gpr(ctx, a->rd);
>
>  /* Using x0 as the rs1 register specifier, encodes an infinite AVL */
>  if (a->rs1 == 0) {
>  /* As the mask is at least one bit, RV_VLEN_MAX is >= VLMAX */
>  s1 = tcg_constant_tl(RV_VLEN_MAX);
>  } else {
> -s1 = tcg_temp_new();
> -gen_get_gpr(ctx, s1, a->rs1);
> +s1 = get_gpr(ctx, a->rs1, EXT_ZERO);
>  }
>  gen_helper_vsetvl(dst, cpu_env, s1, s2);
>  gen_set_gpr(ctx, a->rd, dst);
> +
>  gen_goto_tb(ctx, 0, ctx->pc_succ_insn);
>  ctx->base.is_jmp = DISAS_NORETURN;
> -
> -tcg_temp_free(s1);
> -tcg_temp_free(dst);
>  return true;
>  }
>
> @@ -173,7 +165,7 @@ static bool ldst_us_trans(uint32_t vd, uint32_t rs1, 
> uint32_t data,
>
>  dest = tcg_temp_new_ptr();
>  mask = tcg_temp_new_ptr();
> -base = tcg_temp_new();
> +base = get_gpr(s, rs1, EXT_NONE);
>
>  /*
>   * As simd_desc supports at most 256 bytes, and in this implementation,
> @@ -184,7 +176,6 @@ static bool ldst_us_trans(uint32_t vd, uint32_t rs1, 
> uint32_t data,
>   */
>  desc = tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data));
>
> -gen_get_gpr(s, base, rs1);
>  tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd));
>  tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0));
>
> @@ -192,7 +183,6 @@ static bool ldst_us_trans(uint32_t vd, uint32_t rs1, 
> uint32_t data,
>
>  tcg_temp_free_ptr(dest);
>  tcg_temp_free_ptr(mask);
> -tcg_temp_free(base);
>  gen_set_label(over);
>  return true;
>  }
> @@ -330,12 +320,10 @@ static bool ldst_stride_trans(uint32_t vd, uint32_t 
> rs1, uint32_t rs2,
>
>  dest = tcg_temp_new_ptr();
>  mask = tcg_temp_new_ptr();
> -base = tcg_temp_new();
> -stride = tcg_temp_new();
> +base = get_gpr(s, rs1, EXT_NONE);
> +stride = get_gpr(s, rs2, EXT_NONE);
>  desc = tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data));
>
> -gen_get_gpr(s, base, rs1);
> -gen_get_gpr(s, stride, rs2);
>  tcg_gen_addi_ptr(dest, cpu_env, 

[PATCH v5 24/24] target/riscv: Use {get,dest}_gpr for RVV

2021-08-23 Thread Richard Henderson
Remove gen_get_gpr, as the function becomes unused.

Signed-off-by: Richard Henderson 
---
 target/riscv/translate.c| 13 ++---
 target/riscv/insn_trans/trans_rvv.c.inc | 74 +++--
 2 files changed, 26 insertions(+), 61 deletions(-)

diff --git a/target/riscv/translate.c b/target/riscv/translate.c
index e44254e878..e356fc6c46 100644
--- a/target/riscv/translate.c
+++ b/target/riscv/translate.c
@@ -232,11 +232,6 @@ static TCGv get_gpr(DisasContext *ctx, int reg_num, 
DisasExtend ext)
 g_assert_not_reached();
 }
 
-static void gen_get_gpr(DisasContext *ctx, TCGv t, int reg_num)
-{
-tcg_gen_mov_tl(t, get_gpr(ctx, reg_num, EXT_NONE));
-}
-
 static TCGv dest_gpr(DisasContext *ctx, int reg_num)
 {
 if (reg_num == 0 || ctx->w) {
@@ -637,9 +632,11 @@ void riscv_translate_init(void)
 {
 int i;
 
-/* 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 gen_set_gpr and get_gpr helper functions when accessing regs,
+ * unless you specifically block reads/writes to reg 0.
+ */
 cpu_gpr[0] = NULL;
 
 for (i = 1; i < 32; i++) {
diff --git a/target/riscv/insn_trans/trans_rvv.c.inc 
b/target/riscv/insn_trans/trans_rvv.c.inc
index de580c493c..fa451938f1 100644
--- a/target/riscv/insn_trans/trans_rvv.c.inc
+++ b/target/riscv/insn_trans/trans_rvv.c.inc
@@ -27,27 +27,22 @@ static bool trans_vsetvl(DisasContext *ctx, arg_vsetvl *a)
 return false;
 }
 
-s2 = tcg_temp_new();
-dst = tcg_temp_new();
+s2 = get_gpr(ctx, a->rs2, EXT_ZERO);
+dst = dest_gpr(ctx, a->rd);
 
 /* Using x0 as the rs1 register specifier, encodes an infinite AVL */
 if (a->rs1 == 0) {
 /* As the mask is at least one bit, RV_VLEN_MAX is >= VLMAX */
 s1 = tcg_constant_tl(RV_VLEN_MAX);
 } else {
-s1 = tcg_temp_new();
-gen_get_gpr(ctx, s1, a->rs1);
+s1 = get_gpr(ctx, a->rs1, EXT_ZERO);
 }
-gen_get_gpr(ctx, s2, a->rs2);
 gen_helper_vsetvl(dst, cpu_env, s1, s2);
 gen_set_gpr(ctx, a->rd, dst);
+
 tcg_gen_movi_tl(cpu_pc, ctx->pc_succ_insn);
 lookup_and_goto_ptr(ctx);
 ctx->base.is_jmp = DISAS_NORETURN;
-
-tcg_temp_free(s1);
-tcg_temp_free(s2);
-tcg_temp_free(dst);
 return true;
 }
 
@@ -60,23 +55,20 @@ static bool trans_vsetvli(DisasContext *ctx, arg_vsetvli *a)
 }
 
 s2 = tcg_constant_tl(a->zimm);
-dst = tcg_temp_new();
+dst = dest_gpr(ctx, a->rd);
 
 /* Using x0 as the rs1 register specifier, encodes an infinite AVL */
 if (a->rs1 == 0) {
 /* As the mask is at least one bit, RV_VLEN_MAX is >= VLMAX */
 s1 = tcg_constant_tl(RV_VLEN_MAX);
 } else {
-s1 = tcg_temp_new();
-gen_get_gpr(ctx, s1, a->rs1);
+s1 = get_gpr(ctx, a->rs1, EXT_ZERO);
 }
 gen_helper_vsetvl(dst, cpu_env, s1, s2);
 gen_set_gpr(ctx, a->rd, dst);
+
 gen_goto_tb(ctx, 0, ctx->pc_succ_insn);
 ctx->base.is_jmp = DISAS_NORETURN;
-
-tcg_temp_free(s1);
-tcg_temp_free(dst);
 return true;
 }
 
@@ -173,7 +165,7 @@ static bool ldst_us_trans(uint32_t vd, uint32_t rs1, 
uint32_t data,
 
 dest = tcg_temp_new_ptr();
 mask = tcg_temp_new_ptr();
-base = tcg_temp_new();
+base = get_gpr(s, rs1, EXT_NONE);
 
 /*
  * As simd_desc supports at most 256 bytes, and in this implementation,
@@ -184,7 +176,6 @@ static bool ldst_us_trans(uint32_t vd, uint32_t rs1, 
uint32_t data,
  */
 desc = tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data));
 
-gen_get_gpr(s, base, rs1);
 tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd));
 tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0));
 
@@ -192,7 +183,6 @@ static bool ldst_us_trans(uint32_t vd, uint32_t rs1, 
uint32_t data,
 
 tcg_temp_free_ptr(dest);
 tcg_temp_free_ptr(mask);
-tcg_temp_free(base);
 gen_set_label(over);
 return true;
 }
@@ -330,12 +320,10 @@ static bool ldst_stride_trans(uint32_t vd, uint32_t rs1, 
uint32_t rs2,
 
 dest = tcg_temp_new_ptr();
 mask = tcg_temp_new_ptr();
-base = tcg_temp_new();
-stride = tcg_temp_new();
+base = get_gpr(s, rs1, EXT_NONE);
+stride = get_gpr(s, rs2, EXT_NONE);
 desc = tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data));
 
-gen_get_gpr(s, base, rs1);
-gen_get_gpr(s, stride, rs2);
 tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd));
 tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0));
 
@@ -343,8 +331,6 @@ static bool ldst_stride_trans(uint32_t vd, uint32_t rs1, 
uint32_t rs2,
 
 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 +444,9 @@ static bool