Richard Henderson <richard.hender...@linaro.org> writes:
> We must do this before we adjust how tcg_out_movi_i32, > lest the under-the-hood poking that we do be broken. > > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> Reviewed-by: Alex Bennée <alex.ben...@linaro.org> > --- > include/exec/gen-icount.h | 25 +++++++++++++------------ > 1 file changed, 13 insertions(+), 12 deletions(-) > > diff --git a/include/exec/gen-icount.h b/include/exec/gen-icount.h > index 822c43cfd3..404732518a 100644 > --- a/include/exec/gen-icount.h > +++ b/include/exec/gen-icount.h > @@ -34,7 +34,7 @@ static inline void gen_io_end(void) > > static inline void gen_tb_start(TranslationBlock *tb) > { > - TCGv_i32 count, imm; > + TCGv_i32 count; > > tcg_ctx->exitreq_label = gen_new_label(); > if (tb_cflags(tb) & CF_USE_ICOUNT) { > @@ -48,15 +48,13 @@ static inline void gen_tb_start(TranslationBlock *tb) > offsetof(ArchCPU, env)); > > if (tb_cflags(tb) & CF_USE_ICOUNT) { > - imm = tcg_temp_new_i32(); > - /* We emit a movi with a dummy immediate argument. Keep the insn > index > - * of the movi so that we later (when we know the actual insn count) > - * can update the immediate argument with the actual insn count. */ > - tcg_gen_movi_i32(imm, 0xdeadbeef); > + /* > + * We emit a sub with a dummy immediate argument. Keep the insn index > + * of the sub so that we later (when we know the actual insn count) > + * can update the argument with the actual insn count. > + */ > + tcg_gen_sub_i32(count, count, tcg_constant_i32(0)); > icount_start_insn = tcg_last_op(); > - > - tcg_gen_sub_i32(count, count, imm); > - tcg_temp_free_i32(imm); > } > > tcg_gen_brcondi_i32(TCG_COND_LT, count, 0, tcg_ctx->exitreq_label); > @@ -74,9 +72,12 @@ static inline void gen_tb_start(TranslationBlock *tb) > static inline void gen_tb_end(TranslationBlock *tb, int num_insns) > { > if (tb_cflags(tb) & CF_USE_ICOUNT) { > - /* Update the num_insn immediate parameter now that we know > - * the actual insn count. */ > - tcg_set_insn_param(icount_start_insn, 1, num_insns); > + /* > + * Update the num_insn immediate parameter now that we know > + * the actual insn count. > + */ > + tcg_set_insn_param(icount_start_insn, 2, > + tcgv_i32_arg(tcg_constant_i32(num_insns))); > } > > gen_set_label(tcg_ctx->exitreq_label); -- Alex Bennée