Message ID | 20200422011722.13287-13-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | tcg 5.1 omnibus patch set | expand |
Richard Henderson <richard.henderson@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.henderson@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@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
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);
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.henderson@linaro.org> --- include/exec/gen-icount.h | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) -- 2.20.1