max-v8 was one TypeInfo whose instance initializer was chosen from the selected target at registration. Register both initializers, and let target_arm() and target_aarch64() select which type is available.
Signed-off-by: Yonggang Luo <[email protected]> --- target/arm/cpu.c | 1 + target/arm/cpu.h | 1 + target/arm/tcg/cpu-max-v8.c | 16 ++++++++++++---- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 510fc9eeb3b..6eb55242980 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -2695,6 +2695,7 @@ void arm_cpu_register(const ARMCPUInfo *info) .instance_init = arm_cpu_instance_init, .class_init = info->class_init ?: cpu_register_class_init, .class_data = info, + .is_available = info->is_available, }; type_info.name = g_strdup_printf("%s-" TYPE_ARM_CPU, info->name); diff --git a/target/arm/cpu.h b/target/arm/cpu.h index add993ef101..3240a8633ee 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1203,6 +1203,7 @@ typedef struct ARMCPUInfo { const char *deprecation_note; void (*initfn)(Object *obj); void (*class_init)(ObjectClass *oc, const void *data); + bool (*is_available)(void); } ARMCPUInfo; /** diff --git a/target/arm/tcg/cpu-max-v8.c b/target/arm/tcg/cpu-max-v8.c index 65f851f2006..e819d07e6ce 100644 --- a/target/arm/tcg/cpu-max-v8.c +++ b/target/arm/tcg/cpu-max-v8.c @@ -121,10 +121,18 @@ void aarch32_max_v8_tcg_initfn(Object *obj) static void cpu_max_v8_register_type(void) { - static const ARMCPUInfo max_v8[2] = { - { .name = "max-v8", .initfn = aarch32_max_v8_tcg_initfn }, - { .name = "max-v8", .initfn = aarch64_max_v8_tcg_initfn }, + static const ARMCPUInfo max_v8_aarch32 = { + .name = "max-v8", + .initfn = aarch32_max_v8_tcg_initfn, + .is_available = target_arm, }; - arm_cpu_register(&max_v8[target_aarch64()]); + static const ARMCPUInfo max_v8_aarch64 = { + .name = "max-v8", + .initfn = aarch64_max_v8_tcg_initfn, + .is_available = target_aarch64, + }; + + arm_cpu_register(&max_v8_aarch32); + arm_cpu_register(&max_v8_aarch64); } type_init(cpu_max_v8_register_type) -- 2.55.0.windows.3
