[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v1 2/3] target/microblaze: Plug temp leaks with delay slot se
From: |
Alistair Francis |
Subject: |
Re: [PATCH v1 2/3] target/microblaze: Plug temp leaks with delay slot setup |
Date: |
Wed, 6 Nov 2019 13:56:53 -0800 |
On Wed, Nov 6, 2019 at 6:17 AM Edgar E. Iglesias
<address@hidden> wrote:
>
> From: "Edgar E. Iglesias" <address@hidden>
>
> Plug temp leaks with delay slot setup.
>
> Signed-off-by: Edgar E. Iglesias <address@hidden>
Reviewed-by: Alistair Francis <address@hidden>
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
>
>