Message ID | 20180516185146.30708-29-edgar.iglesias@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 05/16/2018 03:51 PM, Edgar E. Iglesias wrote: > From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com> > > Plug a temp leak. > > Reported-by: Richard Henderson <richard.henderson@linaro.org> > Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > target/microblaze/translate.c | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) > > diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c > index 03a0289858..cf1b87c09e 100644 > --- a/target/microblaze/translate.c > +++ b/target/microblaze/translate.c > @@ -516,12 +516,17 @@ static void dec_msr(DisasContext *dc) > #if !defined(CONFIG_USER_ONLY) > /* Catch read/writes to the mmu block. */ > if ((sr & ~0xff) == 0x1000) { > + TCGv_i32 tmp_sr; > + > sr &= 7; > + tmp_sr = tcg_const_i32(sr); > LOG_DIS("m%ss sr%d r%d imm=%x\n", to ? "t" : "f", sr, dc->ra, dc->imm); > - if (to) > - gen_helper_mmu_write(cpu_env, tcg_const_i32(sr), cpu_R[dc->ra]); > - else > - gen_helper_mmu_read(cpu_R[dc->rd], cpu_env, tcg_const_i32(sr)); > + if (to) { > + gen_helper_mmu_write(cpu_env, tmp_sr, cpu_R[dc->ra]); > + } else { > + gen_helper_mmu_read(cpu_R[dc->rd], cpu_env, tmp_sr); > + } > + tcg_temp_free_i32(tmp_sr); > return; > } > #endif >
diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c index 03a0289858..cf1b87c09e 100644 --- a/target/microblaze/translate.c +++ b/target/microblaze/translate.c @@ -516,12 +516,17 @@ static void dec_msr(DisasContext *dc) #if !defined(CONFIG_USER_ONLY) /* Catch read/writes to the mmu block. */ if ((sr & ~0xff) == 0x1000) { + TCGv_i32 tmp_sr; + sr &= 7; + tmp_sr = tcg_const_i32(sr); LOG_DIS("m%ss sr%d r%d imm=%x\n", to ? "t" : "f", sr, dc->ra, dc->imm); - if (to) - gen_helper_mmu_write(cpu_env, tcg_const_i32(sr), cpu_R[dc->ra]); - else - gen_helper_mmu_read(cpu_R[dc->rd], cpu_env, tcg_const_i32(sr)); + if (to) { + gen_helper_mmu_write(cpu_env, tmp_sr, cpu_R[dc->ra]); + } else { + gen_helper_mmu_read(cpu_R[dc->rd], cpu_env, tmp_sr); + } + tcg_temp_free_i32(tmp_sr); return; } #endif