Message ID | bd84d5f38af0ba2983ccd5c07635db49267c828f.1685448535.git.balaton@eik.bme.hu |
---|---|
State | New |
Headers | show |
Series | Embedded PPC misc clean up and optimisation | expand |
On 5/30/23 10:28, BALATON Zoltan wrote: > Move out checking PID registers into a separate function which makes > mmubooke_check_tlb() simpler and avoids using goto. > > Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> > --- Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com> > target/ppc/mmu_common.c | 40 +++++++++++++++++++++------------------- > 1 file changed, 21 insertions(+), 19 deletions(-) > > diff --git a/target/ppc/mmu_common.c b/target/ppc/mmu_common.c > index bd7d7d5257..ae1db6e348 100644 > --- a/target/ppc/mmu_common.c > +++ b/target/ppc/mmu_common.c > @@ -601,37 +601,39 @@ static int mmu40x_get_physical_address(CPUPPCState *env, mmu_ctx_t *ctx, > return ret; > } > > -static int mmubooke_check_tlb(CPUPPCState *env, ppcemb_tlb_t *tlb, > - hwaddr *raddr, int *prot, target_ulong address, > - MMUAccessType access_type, int i) > +static bool mmubooke_check_pid(CPUPPCState *env, ppcemb_tlb_t *tlb, > + hwaddr *raddr, target_ulong addr, int i) > { > - int prot2; > - > - if (ppcemb_tlb_check(env, tlb, raddr, address, > - env->spr[SPR_BOOKE_PID], i)) { > + if (ppcemb_tlb_check(env, tlb, raddr, addr, env->spr[SPR_BOOKE_PID], i)) { > if (!env->nb_pids) { > /* Extend the physical address to 36 bits */ > *raddr |= (uint64_t)(tlb->RPN & 0xF) << 32; > } > - goto found_tlb; > + return true; > + } else if (!env->nb_pids) { > + return false; > } > - > if (env->spr[SPR_BOOKE_PID1] && > - ppcemb_tlb_check(env, tlb, raddr, address, > - env->spr[SPR_BOOKE_PID1], i)) { > - goto found_tlb; > + ppcemb_tlb_check(env, tlb, raddr, addr, env->spr[SPR_BOOKE_PID1], i)) { > + return true; > } > - > if (env->spr[SPR_BOOKE_PID2] && > - ppcemb_tlb_check(env, tlb, raddr, address, > - env->spr[SPR_BOOKE_PID2], i)) { > - goto found_tlb; > + ppcemb_tlb_check(env, tlb, raddr, addr, env->spr[SPR_BOOKE_PID2], i)) { > + return true; > } > + return false; > +} > > - qemu_log_mask(CPU_LOG_MMU, "%s: TLB entry not found\n", __func__); > - return -1; > +static int mmubooke_check_tlb(CPUPPCState *env, ppcemb_tlb_t *tlb, > + hwaddr *raddr, int *prot, target_ulong address, > + MMUAccessType access_type, int i) > +{ > + int prot2; > > -found_tlb: > + if (!mmubooke_check_pid(env, tlb, raddr, address, i)) { > + qemu_log_mask(CPU_LOG_MMU, "%s: TLB entry not found\n", __func__); > + return -1; > + } > > if (FIELD_EX64(env->msr, MSR, PR)) { > prot2 = tlb->prot & 0xF;
diff --git a/target/ppc/mmu_common.c b/target/ppc/mmu_common.c index bd7d7d5257..ae1db6e348 100644 --- a/target/ppc/mmu_common.c +++ b/target/ppc/mmu_common.c @@ -601,37 +601,39 @@ static int mmu40x_get_physical_address(CPUPPCState *env, mmu_ctx_t *ctx, return ret; } -static int mmubooke_check_tlb(CPUPPCState *env, ppcemb_tlb_t *tlb, - hwaddr *raddr, int *prot, target_ulong address, - MMUAccessType access_type, int i) +static bool mmubooke_check_pid(CPUPPCState *env, ppcemb_tlb_t *tlb, + hwaddr *raddr, target_ulong addr, int i) { - int prot2; - - if (ppcemb_tlb_check(env, tlb, raddr, address, - env->spr[SPR_BOOKE_PID], i)) { + if (ppcemb_tlb_check(env, tlb, raddr, addr, env->spr[SPR_BOOKE_PID], i)) { if (!env->nb_pids) { /* Extend the physical address to 36 bits */ *raddr |= (uint64_t)(tlb->RPN & 0xF) << 32; } - goto found_tlb; + return true; + } else if (!env->nb_pids) { + return false; } - if (env->spr[SPR_BOOKE_PID1] && - ppcemb_tlb_check(env, tlb, raddr, address, - env->spr[SPR_BOOKE_PID1], i)) { - goto found_tlb; + ppcemb_tlb_check(env, tlb, raddr, addr, env->spr[SPR_BOOKE_PID1], i)) { + return true; } - if (env->spr[SPR_BOOKE_PID2] && - ppcemb_tlb_check(env, tlb, raddr, address, - env->spr[SPR_BOOKE_PID2], i)) { - goto found_tlb; + ppcemb_tlb_check(env, tlb, raddr, addr, env->spr[SPR_BOOKE_PID2], i)) { + return true; } + return false; +} - qemu_log_mask(CPU_LOG_MMU, "%s: TLB entry not found\n", __func__); - return -1; +static int mmubooke_check_tlb(CPUPPCState *env, ppcemb_tlb_t *tlb, + hwaddr *raddr, int *prot, target_ulong address, + MMUAccessType access_type, int i) +{ + int prot2; -found_tlb: + if (!mmubooke_check_pid(env, tlb, raddr, address, i)) { + qemu_log_mask(CPU_LOG_MMU, "%s: TLB entry not found\n", __func__); + return -1; + } if (FIELD_EX64(env->msr, MSR, PR)) { prot2 = tlb->prot & 0xF;
Move out checking PID registers into a separate function which makes mmubooke_check_tlb() simpler and avoids using goto. Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> --- target/ppc/mmu_common.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-)