Message ID | 20250319134507.45045-8-philmd@linaro.org |
---|---|
State | New |
Headers | show |
Series | tcg: Make tcg_gen_insn_start() target-agnostic | expand |
On 3/19/25 06:45, Philippe Mathieu-Daudé wrote: > Define TARGET_INSN_START_WORDS_MAX and use it to check > TARGET_INSN_START_EXTRA_WORDS at runtime in tb_gen_code(). > > Suggested-by: Peter Maydell <peter.maydell@linaro.org> > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > include/tcg/tcg-op.h | 4 +--- > include/tcg/tcg.h | 2 ++ > accel/tcg/translate-all.c | 2 ++ > 3 files changed, 5 insertions(+), 3 deletions(-) Nack. > @@ -52,8 +52,6 @@ static inline void tcg_gen_insn_start(uint64_t pc, uint64_t a1, uint64_t a2) > tcg_set_insn_start_param(op, 1, a1); > tcg_set_insn_start_param(op, 2, a2); > } > -#else > -#error Unhandled TARGET_INSN_START_EXTRA_WORDS value > #endif This is far superior to ... > @@ -351,6 +352,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu, > tcg_ctx->tlb_dyn_max_bits = CPU_TLB_DYN_MAX_BITS; > #endif > tcg_ctx->insn_start_words = TARGET_INSN_START_WORDS; > + tcg_debug_assert(tcg_ctx->insn_start_words <= TARGET_INSN_START_WORDS_MAX); ... this. r~
diff --git a/include/tcg/tcg-op.h b/include/tcg/tcg-op.h index 1f0d3b95304..0915043adf8 100644 --- a/include/tcg/tcg-op.h +++ b/include/tcg/tcg-op.h @@ -41,7 +41,7 @@ static inline void tcg_gen_insn_start(uint64_t pc, uint64_t a1) tcg_set_insn_start_param(op, 0, pc); tcg_set_insn_start_param(op, 1, a1); } -#elif TARGET_INSN_START_EXTRA_WORDS == 2 +#elif TARGET_INSN_START_EXTRA_WORDS >= 2 static inline void tcg_gen_insn_start(uint64_t pc, uint64_t a1, uint64_t a2) { unsigned insn_start_words = tcg_ctx->insn_start_words; @@ -52,8 +52,6 @@ static inline void tcg_gen_insn_start(uint64_t pc, uint64_t a1, uint64_t a2) tcg_set_insn_start_param(op, 1, a1); tcg_set_insn_start_param(op, 2, a2); } -#else -#error Unhandled TARGET_INSN_START_EXTRA_WORDS value #endif #if TARGET_LONG_BITS == 32 diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h index 84d99508b65..92a23e10218 100644 --- a/include/tcg/tcg.h +++ b/include/tcg/tcg.h @@ -577,6 +577,8 @@ static inline TCGv_vec temp_tcgv_vec(TCGTemp *t) return (TCGv_vec)temp_tcgv_i32(t); } +#define TARGET_INSN_START_WORDS_MAX 3 + static inline TCGArg tcg_get_insn_param(TCGOp *op, int arg) { return op->args[arg]; diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c index 54bba995a04..5e2a89dc474 100644 --- a/accel/tcg/translate-all.c +++ b/accel/tcg/translate-all.c @@ -66,6 +66,7 @@ #include "internal-target.h" #include "tcg/perf.h" #include "tcg/insn-start-words.h" +#include "tcg/tcg-op.h" TBContext tb_ctx; @@ -351,6 +352,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu, tcg_ctx->tlb_dyn_max_bits = CPU_TLB_DYN_MAX_BITS; #endif tcg_ctx->insn_start_words = TARGET_INSN_START_WORDS; + tcg_debug_assert(tcg_ctx->insn_start_words <= TARGET_INSN_START_WORDS_MAX); #ifdef TCG_GUEST_DEFAULT_MO tcg_ctx->guest_mo = TCG_GUEST_DEFAULT_MO; #else
Define TARGET_INSN_START_WORDS_MAX and use it to check TARGET_INSN_START_EXTRA_WORDS at runtime in tb_gen_code(). Suggested-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- include/tcg/tcg-op.h | 4 +--- include/tcg/tcg.h | 2 ++ accel/tcg/translate-all.c | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-)