tcg: Implement CPU_LOG_TB_NOCHAIN during expansion

Rather than test NOCHAIN before linking, do not emit the
goto_tb opcode at all. We already do this for goto_ptr.

Backports commit d7f425fdea991f052241c6479acd9feae834063b from qemu
This commit is contained in:
Richard Henderson 2018-10-23 14:35:03 -04:00 committed by Lioncash
parent 856974c7b2
commit e01deeb9ba
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7
2 changed files with 9 additions and 2 deletions

View file

@ -242,7 +242,7 @@ static inline TranslationBlock *tb_find(CPUState *cpu,
}
#endif
/* See if we can patch the calling TB. */
if (last_tb && !qemu_loglevel_mask(CPU_LOG_TB_NOCHAIN)) {
if (last_tb) {
if (!acquired_tb_lock) {
// Unicorn: commented out
//tb_lock();

View file

@ -2600,6 +2600,10 @@ void tcg_gen_exit_tb(TCGContext *s, TranslationBlock *tb, unsigned idx)
seen this numbered exit before, via tcg_gen_goto_tb. */
tcg_debug_assert(tcg_ctx->goto_tb_issue_mask & (1 << idx));
#endif
/* When not chaining, exit without indicating a link. */
if (qemu_loglevel_mask(CPU_LOG_TB_NOCHAIN)) {
val = 0;
}
} else {
/* This is an exit via the exitreq label. */
tcg_debug_assert(idx == TB_EXIT_REQUESTED);
@ -2617,8 +2621,11 @@ void tcg_gen_goto_tb(TCGContext *s, unsigned idx)
tcg_debug_assert((s->goto_tb_issue_mask & (1 << idx)) == 0);
s->goto_tb_issue_mask |= 1 << idx;
#endif
/* When not chaining, we simply fall through to the "fallback" exit. */
if (!qemu_loglevel_mask(CPU_LOG_TB_NOCHAIN)) {
tcg_gen_op1i(s, INDEX_op_goto_tb, idx);
}
}
void tcg_gen_lookup_and_goto_ptr(TCGContext *s)
{