+static TranslatorOps aarch64_translator_ops = {
+ .init_disas_context = aarch64_trblock_init_disas_context,
+ .insn_start = aarch64_trblock_insn_start,
+ .breakpoint_check = aarch64_trblock_breakpoint_check,
+ .disas_insn = aarch64_trblock_disas_insn,
+ .tb_stop = aarch64_trblock_tb_stop,
+ .disas_flags = aarch64_trblock_disas_flags,
+};
+void gen_intermediate_code_a64(DisasContextBase *db, CPUState *cpu,
TranslationBlock *tb)
{
+ translate_block(&aarch64_translator_ops, db, cpu, &cpu_env, tb);
}
/* generate intermediate code for basic block 'tb'. */
void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb)
{
DisasContext dc1, *dc = &dc1;
DisasContextBase *db = &dc->base;
/* generate intermediate code */
@@ -12202,97 +12214,11 @@ void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb)
* the A32/T32 complexity to do with conditional execution/IT blocks/etc.
*/
if (ARM_TBFLAG_AARCH64_STATE(tb->flags)) {
+ gen_intermediate_code_a64(db, cpu, tb);
return;
+ } else {
+ translate_block(&arm_translator_ops, db, cpu, &cpu_env, tb);
}