On Mon, May 17, 2021 at 05:50:05PM -0300, matheus.fe...@eldorado.org.br wrote: > From: Richard Henderson <richard.hender...@linaro.org> > > The translation of branch instructions always results in exit from > the TB. Remove the synthetic "exception" after no more uses. > > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> > Signed-off-by: Matheus Ferst <matheus.fe...@eldorado.org.br>
Applied to ppc-for-6.1, thanks. > --- > linux-user/ppc/cpu_loop.c | 3 --- > target/ppc/cpu.h | 2 -- > target/ppc/translate.c | 8 ++------ > 3 files changed, 2 insertions(+), 11 deletions(-) > > diff --git a/linux-user/ppc/cpu_loop.c b/linux-user/ppc/cpu_loop.c > index fe526693d2..fa91ea0eed 100644 > --- a/linux-user/ppc/cpu_loop.c > +++ b/linux-user/ppc/cpu_loop.c > @@ -423,9 +423,6 @@ void cpu_loop(CPUPPCState *env) > cpu_abort(cs, "Maintenance exception while in user mode. " > "Aborting\n"); > break; > - case POWERPC_EXCP_BRANCH: /* branch instruction: > */ > - /* We just stopped because of a branch. Go on */ > - break; > case POWERPC_EXCP_SYSCALL_USER: > /* system call in user-mode emulation */ > /* WARNING: > diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h > index 9e38df685d..cab33a3680 100644 > --- a/target/ppc/cpu.h > +++ b/target/ppc/cpu.h > @@ -131,8 +131,6 @@ enum { > POWERPC_EXCP_SYSCALL_VECTORED = 102, /* scv exception > */ > /* EOL > */ > POWERPC_EXCP_NB = 103, > - /* QEMU exceptions: used internally during code translation > */ > - POWERPC_EXCP_BRANCH = 0x201, /* branch instruction > */ > /* QEMU exceptions: special cases we want to stop translation > */ > POWERPC_EXCP_SYSCALL_USER = 0x203, /* System call in user mode only > */ > }; > diff --git a/target/ppc/translate.c b/target/ppc/translate.c > index f57b67be5f..d019454550 100644 > --- a/target/ppc/translate.c > +++ b/target/ppc/translate.c > @@ -4692,7 +4692,6 @@ static void gen_b(DisasContext *ctx) > { > target_ulong li, target; > > - ctx->exception = POWERPC_EXCP_BRANCH; > /* sign extend LI */ > li = LI(ctx->opcode); > li = (li ^ 0x02000000) - 0x02000000; > @@ -4706,6 +4705,7 @@ static void gen_b(DisasContext *ctx) > } > gen_update_cfar(ctx, ctx->cia); > gen_goto_tb(ctx, 0, target); > + ctx->base.is_jmp = DISAS_NORETURN; > } > > #define BCOND_IM 0 > @@ -4718,7 +4718,6 @@ static void gen_bcond(DisasContext *ctx, int type) > uint32_t bo = BO(ctx->opcode); > TCGLabel *l1; > TCGv target; > - ctx->exception = POWERPC_EXCP_BRANCH; > > if (type == BCOND_LR || type == BCOND_CTR || type == BCOND_TAR) { > target = tcg_temp_local_new(); > @@ -4825,6 +4824,7 @@ static void gen_bcond(DisasContext *ctx, int type) > gen_set_label(l1); > gen_goto_tb(ctx, 1, ctx->base.pc_next); > } > + ctx->base.is_jmp = DISAS_NORETURN; > } > > static void gen_bc(DisasContext *ctx) > @@ -9102,7 +9102,6 @@ static void ppc_tr_translate_insn(DisasContextBase > *dcbase, CPUState *cs) > /* Check trace mode exceptions */ > if (unlikely(ctx->singlestep_enabled & CPU_SINGLE_STEP && > (ctx->base.pc_next <= 0x100 || ctx->base.pc_next > 0xF00) && > - ctx->exception != POWERPC_EXCP_BRANCH && > ctx->base.is_jmp != DISAS_NORETURN)) { > uint32_t excp = gen_prep_dbgex(ctx); > gen_exception_nip(ctx, excp, ctx->base.pc_next); > @@ -9118,9 +9117,6 @@ static void ppc_tr_translate_insn(DisasContextBase > *dcbase, CPUState *cs) > switch (ctx->exception) { > case POWERPC_EXCP_NONE: > break; > - case POWERPC_EXCP_BRANCH: > - ctx->base.is_jmp = DISAS_NORETURN; > - break; > default: > /* Every other ctx->exception should have set NORETURN. */ > g_assert_not_reached(); -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature