From: "Alex Bennée" <alex.bennee@linaro.org>
To: Richard Henderson <rth@twiddle.net>
Cc: qemu-devel@nongnu.org, cota@braap.org, pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH v2 2/5] target/alpha: Use tcg_gen_lookup_and_goto_ptr
Date: Thu, 15 Jun 2017 09:48:43 +0100 [thread overview]
Message-ID: <87vanxmyac.fsf@linaro.org> (raw)
In-Reply-To: <20170614194821.8754-3-rth@twiddle.net>
Richard Henderson <rth@twiddle.net> writes:
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> ---
> target/alpha/translate.c | 27 ++++++++++++++++++++++-----
> 1 file changed, 22 insertions(+), 5 deletions(-)
>
> diff --git a/target/alpha/translate.c b/target/alpha/translate.c
> index 7c45ae3..a48e451 100644
> --- a/target/alpha/translate.c
> +++ b/target/alpha/translate.c
> @@ -84,6 +84,7 @@ typedef enum {
> the PC (for whatever reason), so there's no need to do it again on
> exiting the TB. */
> EXIT_PC_UPDATED,
> + EXIT_PC_UPDATED_NOCHAIN,
>
> /* We are exiting the TB, but have neither emitted a goto_tb, nor
> updated the PC for the next instruction to be executed. */
> @@ -458,11 +459,17 @@ static bool in_superpage(DisasContext *ctx, int64_t addr)
> #endif
> }
>
> +static bool use_exit_tb(DisasContext *ctx)
> +{
> + return ((ctx->tb->cflags & CF_LAST_IO)
> + || ctx->singlestep_enabled
> + || singlestep);
> +}
minor nit: why start testing this global? At the least we should
probably seed ctx->singlestep_enabled when we set up for translation.
> +
> static bool use_goto_tb(DisasContext *ctx, uint64_t dest)
> {
> /* Suppress goto_tb in the case of single-steping and IO. */
> - if ((ctx->tb->cflags & CF_LAST_IO)
> - || ctx->singlestep_enabled || singlestep) {
> + if (unlikely(use_exit_tb(ctx))) {
> return false;
> }
> #ifndef CONFIG_USER_ONLY
> @@ -1198,7 +1205,10 @@ static ExitStatus gen_call_pal(DisasContext *ctx, int palcode)
> tcg_gen_andi_i64(tmp, ctx->ir[IR_A0], PS_INT_MASK);
> tcg_gen_st8_i64(tmp, cpu_env, offsetof(CPUAlphaState, ps));
> tcg_temp_free(tmp);
> - break;
> +
> + /* Allow interrupts to be recognized right away. */
> + tcg_gen_movi_i64(cpu_pc, ctx.pc);
> + return EXIT_PC_UPDATED_NOCHAIN;
>
> case 0x36:
> /* RDPS */
> @@ -1266,7 +1276,7 @@ static ExitStatus gen_call_pal(DisasContext *ctx, int palcode)
> need the page permissions check. We'll see the existence of
> the page when we create the TB, and we'll flush all TBs if
> we change the PAL base register. */
> - if (!ctx->singlestep_enabled && !(ctx->tb->cflags & CF_LAST_IO)) {
> + if (!use_exit_tb(ctx)) {
> tcg_gen_goto_tb(0);
> tcg_gen_movi_i64(cpu_pc, entry);
> tcg_gen_exit_tb((uintptr_t)ctx->tb);
> @@ -2686,7 +2696,8 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn)
> tcg_gen_andi_i64(tmp, vb, 1);
> tcg_gen_st8_i64(tmp, cpu_env, offsetof(CPUAlphaState, pal_mode));
> tcg_gen_andi_i64(cpu_pc, vb, ~3);
> - ret = EXIT_PC_UPDATED;
> + /* Allow interrupts to be recognized right away. */
> + ret = EXIT_PC_UPDATED_NOCHAIN;
> break;
> #else
> goto invalid_opc;
> @@ -3010,6 +3021,12 @@ void gen_intermediate_code(CPUAlphaState *env, struct TranslationBlock *tb)
> tcg_gen_movi_i64(cpu_pc, ctx.pc);
> /* FALLTHRU */
> case EXIT_PC_UPDATED:
> + if (!use_exit_tb(&ctx)) {
> + tcg_gen_lookup_and_goto_ptr(cpu_pc);
> + break;
> + }
> + /* FALLTHRU */
> + case EXIT_PC_UPDATED_NOCHAIN:
> if (ctx.singlestep_enabled) {
> gen_excp_1(EXCP_DEBUG, 0);
> } else {
Aside from what Emilio already pointed at:
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
--
Alex Bennée
next prev parent reply other threads:[~2017-06-15 8:48 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-14 19:48 [Qemu-devel] [PATCH v2 0/5] Fixes for TCG hangs Richard Henderson
2017-06-14 19:48 ` [Qemu-devel] [PATCH v2 1/5] tcg: Refactor helper_lookup_tb_ptr Richard Henderson
2017-06-14 20:27 ` [Qemu-devel] [PATCH] tcg-runtime: increase hit rate of lookup_tb_ptr Emilio G. Cota
2017-06-15 1:21 ` Richard Henderson
2017-06-15 8:35 ` [Qemu-devel] [PATCH v2 1/5] tcg: Refactor helper_lookup_tb_ptr Alex Bennée
2017-06-16 20:19 ` Emilio G. Cota
2017-06-16 20:46 ` Richard Henderson
2017-06-14 19:48 ` [Qemu-devel] [PATCH v2 2/5] target/alpha: Use tcg_gen_lookup_and_goto_ptr Richard Henderson
2017-06-14 20:37 ` Emilio G. Cota
2017-06-15 1:21 ` Richard Henderson
2017-06-15 8:48 ` Alex Bennée [this message]
2017-06-15 20:55 ` Richard Henderson
2017-06-15 21:57 ` Philippe Mathieu-Daudé
2017-06-16 2:56 ` Richard Henderson
2017-06-14 19:48 ` [Qemu-devel] [PATCH v2 3/5] target/mips: Exit after enabling interrupts Richard Henderson
2017-06-15 8:57 ` Alex Bennée
2017-06-15 14:16 ` Paolo Bonzini
2017-06-15 21:19 ` Aurelien Jarno
2017-06-15 21:29 ` Richard Henderson
2017-06-14 19:48 ` [Qemu-devel] [PATCH v2 4/5] target/s390x: Exit after changing PSW mask Richard Henderson
2017-06-15 9:00 ` Alex Bennée
2017-06-14 19:48 ` [Qemu-devel] [PATCH v2 5/5] target/arm: Exit after clearing interrupt mask Richard Henderson
2017-06-14 20:33 ` [Qemu-devel] [PATCH] target/aarch64: exit to main loop after 'msr daifclr' Emilio G. Cota
2017-06-14 21:13 ` no-reply
2017-06-15 1:20 ` Richard Henderson
2017-06-15 5:19 ` Emilio G. Cota
2017-06-15 8:30 ` [Qemu-devel] [PATCH v2 5/5] target/arm: Exit after clearing interrupt mask Alex Bennée
2017-06-14 20:22 ` [Qemu-devel] [PATCH v2 0/5] Fixes for TCG hangs no-reply
2017-06-14 20:26 ` no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87vanxmyac.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=cota@braap.org \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).