On Wed, Oct 31, 2018 at 6:27 AM Bastian Koppelmann <kbast...@mail.uni-paderborn.de> wrote: > > CPURISCVState is rarely used, so there is no need to pass it to every > translate function. This paves the way for decodetree which only passes > DisasContext to translate functions. > > Reviewed-by: Palmer Dabbelt <pal...@sifive.com> > Signed-off-by: Bastian Koppelmann <kbast...@mail.uni-paderborn.de>
Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> Alistair > --- > target/riscv/translate.c | 15 ++++++++------- > 1 file changed, 8 insertions(+), 7 deletions(-) > > diff --git a/target/riscv/translate.c b/target/riscv/translate.c > index 18d7b6d147..e81b9f097e 100644 > --- a/target/riscv/translate.c > +++ b/target/riscv/translate.c > @@ -52,6 +52,7 @@ typedef struct DisasContext { > to any system register, which includes CSR_FRM, so we do not have > to reset this known value. */ > int frm; > + CPURISCVState *env; > } DisasContext; > > /* convert riscv funct3 to qemu memop for load/store */ > @@ -1789,19 +1790,19 @@ static void decode_RV32_64G(CPURISCVState *env, > DisasContext *ctx) > } > } > > -static void decode_opc(CPURISCVState *env, DisasContext *ctx) > +static void decode_opc(DisasContext *ctx) > { > /* check for compressed insn */ > if (extract32(ctx->opcode, 0, 2) != 3) { > - if (!riscv_has_ext(env, RVC)) { > + if (!riscv_has_ext(ctx->env, RVC)) { > gen_exception_illegal(ctx); > } else { > ctx->pc_succ_insn = ctx->base.pc_next + 2; > - decode_RV32_64C(env, ctx); > + decode_RV32_64C(ctx->env, ctx); > } > } else { > ctx->pc_succ_insn = ctx->base.pc_next + 4; > - decode_RV32_64G(env, ctx); > + decode_RV32_64G(ctx->env, ctx); > } > } > > @@ -1846,10 +1847,10 @@ static bool > riscv_tr_breakpoint_check(DisasContextBase *dcbase, CPUState *cpu, > static void riscv_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu) > { > DisasContext *ctx = container_of(dcbase, DisasContext, base); > - CPURISCVState *env = cpu->env_ptr; > + ctx->env = cpu->env_ptr; > > - ctx->opcode = cpu_ldl_code(env, ctx->base.pc_next); > - decode_opc(env, ctx); > + ctx->opcode = cpu_ldl_code(ctx->env, ctx->base.pc_next); > + decode_opc(ctx); > ctx->base.pc_next = ctx->pc_succ_insn; > > if (ctx->base.is_jmp == DISAS_NEXT) { > -- > 2.19.1 > >