On Sat, Oct 3, 2020 at 12:19 AM Richard Henderson < richard.henderson@linaro.org> wrote: > On 9/29/20 2:03 PM, frank.chang@sifive.com wrote: > > +++ b/target/riscv/insn_trans/trans_rvv.c.inc > > @@ -41,6 +41,7 @@ static bool trans_vsetvl(DisasContext *ctx, arg_vsetvl > *a) > > gen_get_gpr(s2, a->rs2); > > gen_helper_vsetvl(dst, cpu_env, s1, s2); > > gen_set_gpr(a->rd, dst); > > + mark_vs_dirty(ctx); > > tcg_gen_movi_tl(cpu_pc, ctx->pc_succ_insn); > > lookup_and_goto_ptr(ctx); > > ctx->base.is_jmp = DISAS_NORETURN; > > @@ -72,7 +73,7 @@ static bool trans_vsetvli(DisasContext *ctx, > arg_vsetvli *a) > > } > > gen_helper_vsetvl(dst, cpu_env, s1, s2); > > gen_set_gpr(a->rd, dst); > > - gen_goto_tb(ctx, 0, ctx->pc_succ_insn); > > + mark_vs_dirty(ctx); > > Removing the gen_goto_tb can't be right all by itself. > Oops, I think I somehow mess up the commits. This commit should only contain: + mark_vs_dirty(ctx); change. The - gen_goto_tb(ctx, 0, ctx->pc_succ_insn); should be included and replaced by: + tcg_gen_movi_tl(cpu_pc, ctx->pc_succ_insn); + lookup_and_goto_ptr(ctx); in later commit: target/riscv: rvv-1.0: update check functions. > I think you want to be sharing the code between vsetvl and vsetvli now. > Just > pass in a TCGv value to a common helper. > The only difference now between vsetvl and vsetvli is the format of zimm and s2 fields. But they have different formats and are queried by different functions, i.e. s2 = tcg_const_tl(a->zimm); and gen_get_gpr(s2, a->rs2); Is there any elegant way to retrieve the values of zimm and s2 by shared common codes? > > r~ > Thanks, Frank Chang