target/ppc: Move else branch to avoid large if block in mmu6xx_get_physical_address()

In mmu6xx_get_physical_address() we have a large if block with a two
line else branch that effectively returns. Invert the condition and
move the else there to allow deindenting the large if block to make
the flow easier to follow.

Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
This commit is contained in:
BALATON Zoltan 2024-05-13 01:27:40 +02:00 committed by Nicholas Piggin
parent 269d6f006b
commit f1418bdeb0
1 changed files with 32 additions and 35 deletions

View File

@ -405,47 +405,44 @@ static int mmu6xx_get_physical_address(CPUPPCState *env, mmu_ctx_t *ctx,
ret = -1; ret = -1;
if (!ds) { if (!ds) {
/* Check if instruction fetch is allowed, if needed */ /* Check if instruction fetch is allowed, if needed */
if (type != ACCESS_CODE || ctx->nx == 0) { if (type == ACCESS_CODE && ctx->nx) {
/* Page address translation */ qemu_log_mask(CPU_LOG_MMU, "No access allowed\n");
qemu_log_mask(CPU_LOG_MMU, "htab_base " HWADDR_FMT_plx return -3;
" htab_mask " HWADDR_FMT_plx }
" hash " HWADDR_FMT_plx "\n", /* Page address translation */
ppc_hash32_hpt_base(cpu), ppc_hash32_hpt_mask(cpu), hash); qemu_log_mask(CPU_LOG_MMU, "htab_base " HWADDR_FMT_plx " htab_mask "
ctx->hash[0] = hash; HWADDR_FMT_plx " hash " HWADDR_FMT_plx "\n",
ctx->hash[1] = ~hash; ppc_hash32_hpt_base(cpu), ppc_hash32_hpt_mask(cpu), hash);
ctx->hash[0] = hash;
ctx->hash[1] = ~hash;
/* Initialize real address with an invalid value */ /* Initialize real address with an invalid value */
ctx->raddr = (hwaddr)-1ULL; ctx->raddr = (hwaddr)-1ULL;
/* Software TLB search */ /* Software TLB search */
ret = ppc6xx_tlb_check(env, ctx, eaddr, access_type); ret = ppc6xx_tlb_check(env, ctx, eaddr, access_type);
#if defined(DUMP_PAGE_TABLES) #if defined(DUMP_PAGE_TABLES)
if (qemu_loglevel_mask(CPU_LOG_MMU)) { if (qemu_loglevel_mask(CPU_LOG_MMU)) {
CPUState *cs = env_cpu(env); CPUState *cs = env_cpu(env);
hwaddr curaddr; hwaddr curaddr;
uint32_t a0, a1, a2, a3; uint32_t a0, a1, a2, a3;
qemu_log("Page table: " HWADDR_FMT_plx " len " HWADDR_FMT_plx qemu_log("Page table: " HWADDR_FMT_plx " len " HWADDR_FMT_plx "\n",
"\n", ppc_hash32_hpt_base(cpu), ppc_hash32_hpt_base(cpu), ppc_hash32_hpt_mask(cpu) + 0x80);
ppc_hash32_hpt_mask(cpu) + 0x80); for (curaddr = ppc_hash32_hpt_base(cpu);
for (curaddr = ppc_hash32_hpt_base(cpu); curaddr < (ppc_hash32_hpt_base(cpu)
curaddr < (ppc_hash32_hpt_base(cpu) + ppc_hash32_hpt_mask(cpu) + 0x80);
+ ppc_hash32_hpt_mask(cpu) + 0x80); curaddr += 16) {
curaddr += 16) { a0 = ldl_phys(cs->as, curaddr);
a0 = ldl_phys(cs->as, curaddr); a1 = ldl_phys(cs->as, curaddr + 4);
a1 = ldl_phys(cs->as, curaddr + 4); a2 = ldl_phys(cs->as, curaddr + 8);
a2 = ldl_phys(cs->as, curaddr + 8); a3 = ldl_phys(cs->as, curaddr + 12);
a3 = ldl_phys(cs->as, curaddr + 12); if (a0 != 0 || a1 != 0 || a2 != 0 || a3 != 0) {
if (a0 != 0 || a1 != 0 || a2 != 0 || a3 != 0) { qemu_log(HWADDR_FMT_plx ": %08x %08x %08x %08x\n",
qemu_log(HWADDR_FMT_plx ": %08x %08x %08x %08x\n", curaddr, a0, a1, a2, a3);
curaddr, a0, a1, a2, a3);
}
} }
} }
#endif
} else {
qemu_log_mask(CPU_LOG_MMU, "No access allowed\n");
ret = -3;
} }
#endif
} else { } else {
qemu_log_mask(CPU_LOG_MMU, "direct store...\n"); qemu_log_mask(CPU_LOG_MMU, "direct store...\n");
/* Direct-store segment : absolutely *BUGGY* for now */ /* Direct-store segment : absolutely *BUGGY* for now */