diff mbox series

[PATCH-for-10.1,07/12] tcg: Check TARGET_INSN_START_EXTRA_WORDS range at runtime

Message ID 20250319134507.45045-8-philmd@linaro.org
State New
Headers show
Series tcg: Make tcg_gen_insn_start() target-agnostic | expand

Commit Message

Philippe Mathieu-Daudé March 19, 2025, 1:45 p.m. UTC
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(-)

Comments

Richard Henderson March 19, 2025, 4:22 p.m. UTC | #1
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 mbox series

Patch

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