target/m68k: Use lookup_and_goto_tb for DISAS_JUMP

These are all indirect or out-of-page direct jumps.
We can indirectly chain to the next TB without going
back to the main loop.

Backports commit 8aaf7da9c3b1f282b5a123de3e87a2e6ca87f3b9 from qemu
This commit is contained in:
Richard Henderson 2018-06-15 10:48:16 -04:00 committed by Lioncash
parent c2fe05f7d9
commit 90b3770665
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7

View file

@ -6405,20 +6405,23 @@ void gen_intermediate_code(CPUState *cs, TranslationBlock *tb)
gen_helper_raise_exception(tcg_ctx, tcg_ctx->cpu_env, tcg_const_i32(tcg_ctx, EXCP_DEBUG)); gen_helper_raise_exception(tcg_ctx, tcg_ctx->cpu_env, tcg_const_i32(tcg_ctx, EXCP_DEBUG));
} else { } else {
switch(dc->is_jmp) { switch(dc->is_jmp) {
case DISAS_NEXT: case DISAS_NEXT:
update_cc_op(dc); update_cc_op(dc);
gen_jmp_tb(dc, 0, dc->pc); gen_jmp_tb(dc, 0, dc->pc);
break; break;
default: case DISAS_JUMP:
case DISAS_JUMP: /* We updated CC_OP and PC in gen_jmp/gen_jmp_im. */
case DISAS_UPDATE: tcg_gen_lookup_and_goto_ptr(tcg_ctx);
update_cc_op(dc); break;
/* indicate that the hash table must be used to find the next TB */ default:
tcg_gen_exit_tb(tcg_ctx, NULL, 0); case DISAS_UPDATE:
break; update_cc_op(dc);
case DISAS_NORETURN: /* indicate that the hash table must be used to find the next TB */
/* nothing more to generate */ tcg_gen_exit_tb(tcg_ctx, NULL, 0);
break; break;
case DISAS_NORETURN:
/* nothing more to generate */
break;
} }
} }