On Wed, Nov 6, 2019 at 6:17 AM Edgar E. Iglesias <edgar.igles...@gmail.com> wrote: > > From: "Edgar E. Iglesias" <edgar.igles...@xilinx.com> > > Plug temp leaks with delay slot setup. > > Signed-off-by: Edgar E. Iglesias <edgar.igles...@xilinx.com>
Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> Alistair > --- > target/microblaze/translate.c | 26 ++++++++++++++------------ > 1 file changed, 14 insertions(+), 12 deletions(-) > > diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c > index ba143ede5f..e9ff9e650d 100644 > --- a/target/microblaze/translate.c > +++ b/target/microblaze/translate.c > @@ -1201,6 +1201,17 @@ static void eval_cond_jmp(DisasContext *dc, TCGv_i64 > pc_true, TCGv_i64 pc_false) > tcg_temp_free_i64(tmp_zero); > } > > +static void dec_setup_dslot(DisasContext *dc) > +{ > + TCGv_i32 tmp = tcg_const_i32(dc->type_b && (dc->tb_flags & > IMM_FLAG)); > + > + dc->delayed_branch = 2; > + dc->tb_flags |= D_FLAG; > + > + tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUMBState, bimm)); > + tcg_temp_free_i32(tmp); > +} > + > static void dec_bcc(DisasContext *dc) > { > unsigned int cc; > @@ -1212,10 +1223,7 @@ static void dec_bcc(DisasContext *dc) > > dc->delayed_branch = 1; > if (dslot) { > - dc->delayed_branch = 2; > - dc->tb_flags |= D_FLAG; > - tcg_gen_st_i32(tcg_const_i32(dc->type_b && (dc->tb_flags & > IMM_FLAG)), > - cpu_env, offsetof(CPUMBState, bimm)); > + dec_setup_dslot(dc); > } > > if (dec_alu_op_b_is_small_imm(dc)) { > @@ -1274,10 +1282,7 @@ static void dec_br(DisasContext *dc) > > dc->delayed_branch = 1; > if (dslot) { > - dc->delayed_branch = 2; > - dc->tb_flags |= D_FLAG; > - tcg_gen_st_i32(tcg_const_i32(dc->type_b && (dc->tb_flags & > IMM_FLAG)), > - cpu_env, offsetof(CPUMBState, bimm)); > + dec_setup_dslot(dc); > } > if (link && dc->rd) > tcg_gen_movi_i32(cpu_R[dc->rd], dc->pc); > @@ -1379,10 +1384,7 @@ static void dec_rts(DisasContext *dc) > return; > } > > - dc->delayed_branch = 2; > - dc->tb_flags |= D_FLAG; > - tcg_gen_st_i32(tcg_const_i32(dc->type_b && (dc->tb_flags & IMM_FLAG)), > - cpu_env, offsetof(CPUMBState, bimm)); > + dec_setup_dslot(dc); > > if (i_bit) { > LOG_DIS("rtid ir=%x\n", dc->ir); > -- > 2.20.1 > >