@samitouri / QOSamiQemu / commits / d41238625e

target/arm/tcg/translate.c: extract aarch64_translate_code()

This allows to get rid of TARGET_AARCH64, and helps with next patch which will define at runtime tcg address type, by adding a second entry point in a different source file. Suggested-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Message-id: 20260407222208.271838-14-pierrick.bouvier@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Pierrick Bouvier committed Apr 23, 2026 at 10:24 UTC d41238625eed96fbe07aa0fba566775b3f6aa7e4
4 files changed +27 -10
target/arm/internals.h
+2
@@ -381,6 +381,8 @@ void arm_init_cpreg_list(ARMCPU *cpu);
381
382 void arm_cpu_register_gdb_regs_for_features(ARMCPU *cpu);
383 void arm_translate_init(void);
384 +void aarch64_translate_code(CPUState *cs, TranslationBlock *tb,
385 + int *max_insns, vaddr pc, void *host_pc);
386 void arm_translate_code(CPUState *cs, TranslationBlock *tb,
387 int *max_insns, vaddr pc, void *host_pc);
388
target/arm/tcg/stubs32.c
+7
@@ -3,6 +3,7 @@
3 */
4
5 #include "qemu/osdep.h"
6 +#include "target/arm/internals.h"
7 #include "target/arm/tcg/translate.h"
8
9
@@ -15,3 +16,9 @@ void a64_translate_init(void)
16 {
17 /* Don't initialize for 32 bits. Call site will be fixed later. */
18 }
19 +
20 +void aarch64_translate_code(CPUState *cs, TranslationBlock *tb,
21 + int *max_insns, vaddr pc, void *host_pc)
22 +{
23 + g_assert_not_reached();
24 +}
target/arm/tcg/translate-a64.c
+9
@@ -18,6 +18,7 @@
18 */
19 #include "qemu/osdep.h"
20 #include "exec/target_page.h"
21 +#include "exec/translator.h"
22 #include "helper-a64.h"
23 #include "helper-sme.h"
24 #include "helper-sve.h"
@@ -10949,3 +10950,11 @@ const TranslatorOps aarch64_translator_ops = {
10950 .translate_insn = aarch64_tr_translate_insn,
10951 .tb_stop = aarch64_tr_tb_stop,
10952 };
10953 +
10954 +void aarch64_translate_code(CPUState *cpu, TranslationBlock *tb,
10955 + int *max_insns, vaddr pc, void *host_pc)
10956 +{
10957 + DisasContext dc = {};
10958 + translator_loop(cpu, tb, max_insns, pc, host_pc,
10959 + &aarch64_translator_ops, &dc.base);
10960 +}
target/arm/tcg/translate.c
+9 -10
@@ -28,6 +28,7 @@
28 #include "semihosting/semihost.h"
29 #include "cpregs.h"
30 #include "exec/target_page.h"
31 +#include "exec/translator.h"
32 #include "helper.h"
33 #include "helper-mve.h"
34
@@ -6878,18 +6879,16 @@ static const TranslatorOps thumb_translator_ops = {
6879 void arm_translate_code(CPUState *cpu, TranslationBlock *tb,
6880 int *max_insns, vaddr pc, void *host_pc)
6881 {
6881 - DisasContext dc = { };
6882 - const TranslatorOps *ops = &arm_translator_ops;
6882 CPUARMTBFlags tb_flags = arm_tbflags_from_tb(tb);
6883
6885 - if (EX_TBFLAG_AM32(tb_flags, THUMB)) {
6886 - ops = &thumb_translator_ops;
6887 - }
6888 -#ifdef TARGET_AARCH64
6884 if (EX_TBFLAG_ANY(tb_flags, AARCH64_STATE)) {
6890 - ops = &aarch64_translator_ops;
6885 + aarch64_translate_code(cpu, tb, max_insns, pc, host_pc);
6886 + } else {
6887 + DisasContext dc = { };
6888 + translator_loop(cpu, tb, max_insns, pc, host_pc,
6889 + (EX_TBFLAG_AM32(tb_flags, THUMB)
6890 + ? &thumb_translator_ops
6891 + : &arm_translator_ops),
6892 + &dc.base);
6893 }
6892 -#endif
6893 -
6894 - translator_loop(cpu, tb, max_insns, pc, host_pc, ops, &dc.base);
6894 }