[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 41/72] target/ppc/mmu_common.c: Move calculation of a value closer
|
From: |
Nicholas Piggin |
|
Subject: |
[PULL 41/72] target/ppc/mmu_common.c: Move calculation of a value closer to its usage |
|
Date: |
Fri, 24 May 2024 09:07:14 +1000 |
From: BALATON Zoltan <balaton@eik.bme.hu>
In mmubooke_check_tlb() and mmubooke206_check_tlb() prot2 is
calculated first but only used after an unrelated check that can
return before tha value is used. Move the calculation after the check,
closer to where it is used, to keep them together and avoid computing
it when not needed.
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
target/ppc/mmu_common.c | 36 +++++++++++++++++-------------------
1 file changed, 17 insertions(+), 19 deletions(-)
diff --git a/target/ppc/mmu_common.c b/target/ppc/mmu_common.c
index 4fde7fd3bf..f79e390306 100644
--- a/target/ppc/mmu_common.c
+++ b/target/ppc/mmu_common.c
@@ -635,12 +635,6 @@ static int mmubooke_check_tlb(CPUPPCState *env,
ppcemb_tlb_t *tlb,
return -1;
}
- if (FIELD_EX64(env->msr, MSR, PR)) {
- prot2 = tlb->prot & 0xF;
- } else {
- prot2 = (tlb->prot >> 4) & 0xF;
- }
-
/* Check the address space */
if ((access_type == MMU_INST_FETCH ?
FIELD_EX64(env->msr, MSR, IR) :
@@ -649,6 +643,11 @@ static int mmubooke_check_tlb(CPUPPCState *env,
ppcemb_tlb_t *tlb,
return -1;
}
+ if (FIELD_EX64(env->msr, MSR, PR)) {
+ prot2 = tlb->prot & 0xF;
+ } else {
+ prot2 = (tlb->prot >> 4) & 0xF;
+ }
*prot = prot2;
if (prot2 & prot_for_access_type(access_type)) {
qemu_log_mask(CPU_LOG_MMU, "%s: good TLB!\n", __func__);
@@ -830,6 +829,18 @@ static int mmubooke206_check_tlb(CPUPPCState *env,
ppcmas_tlb_t *tlb,
found_tlb:
+ /* Check the address space and permissions */
+ if (access_type == MMU_INST_FETCH) {
+ /* There is no way to fetch code using epid load */
+ assert(!use_epid);
+ as = FIELD_EX64(env->msr, MSR, IR);
+ }
+
+ if (as != ((tlb->mas1 & MAS1_TS) >> MAS1_TS_SHIFT)) {
+ qemu_log_mask(CPU_LOG_MMU, "%s: AS doesn't match\n", __func__);
+ return -1;
+ }
+
if (pr) {
if (tlb->mas7_3 & MAS3_UR) {
prot2 |= PAGE_READ;
@@ -851,19 +862,6 @@ found_tlb:
prot2 |= PAGE_EXEC;
}
}
-
- /* Check the address space and permissions */
- if (access_type == MMU_INST_FETCH) {
- /* There is no way to fetch code using epid load */
- assert(!use_epid);
- as = FIELD_EX64(env->msr, MSR, IR);
- }
-
- if (as != ((tlb->mas1 & MAS1_TS) >> MAS1_TS_SHIFT)) {
- qemu_log_mask(CPU_LOG_MMU, "%s: AS doesn't match\n", __func__);
- return -1;
- }
-
*prot = prot2;
if (prot2 & prot_for_access_type(access_type)) {
qemu_log_mask(CPU_LOG_MMU, "%s: good TLB!\n", __func__);
--
2.43.0
- [PULL 34/72] target/ppc: Add SMT support to simple SPRs, (continued)
- [PULL 34/72] target/ppc: Add SMT support to simple SPRs, Nicholas Piggin, 2024/05/23
- [PULL 25/72] Adds migration support for Branch History Rolling Buffer (BHRB) internal state., Nicholas Piggin, 2024/05/23
- [PULL 42/72] target/ppc/mmu_common.c: Remove unneeded local variable, Nicholas Piggin, 2024/05/23
- [PULL 36/72] target/ppc: Implement LDBAR, TTR SPRs, Nicholas Piggin, 2024/05/23
- [PULL 37/72] target/ppc: Implement SPRC/SPRD SPRs, Nicholas Piggin, 2024/05/23
- [PULL 31/72] target/ppc: BookE DECAR SPR is 32-bit, Nicholas Piggin, 2024/05/23
- [PULL 38/72] target/ppc: add SMT support to msgsnd broadcast, Nicholas Piggin, 2024/05/23
- [PULL 39/72] target/ppc: Remove unused struct 'mmu_ctx_hash32', Nicholas Piggin, 2024/05/23
- [PULL 40/72] target/ppc: Remove unused helper, Nicholas Piggin, 2024/05/23
- [PULL 48/72] target/ppc/mmu_common.c: Eliminate ret from mmu6xx_get_physical_address(), Nicholas Piggin, 2024/05/23
- [PULL 41/72] target/ppc/mmu_common.c: Move calculation of a value closer to its usage,
Nicholas Piggin <=
- [PULL 44/72] target/ppc/mmu_common.c: Drop cases for unimplemented MPC8xx MMU, Nicholas Piggin, 2024/05/23
- [PULL 45/72] target/ppc/mmu_common.c: Introduce mmu6xx_get_physical_address(), Nicholas Piggin, 2024/05/23
- [PULL 43/72] target/ppc/mmu_common.c: Simplify checking for real mode, Nicholas Piggin, 2024/05/23
- [PULL 51/72] target/ppc/mmu_common.c: Inline and remove check_physical(), Nicholas Piggin, 2024/05/23
- [PULL 46/72] target/ppc/mmu_common.c: Move else branch to avoid large if block, Nicholas Piggin, 2024/05/23
- [PULL 47/72] target/ppc/mmu_common.c: Move some debug logging, Nicholas Piggin, 2024/05/23
- [PULL 49/72] target/ppc/mmu_common.c: Split out BookE cases before checking real mode, Nicholas Piggin, 2024/05/23
- [PULL 50/72] target/ppc/mmu_common.c: Split off real mode cases in get_physical_address_wtlb(), Nicholas Piggin, 2024/05/23
- [PULL 53/72] target/ppc/mmu_common.c: Deindent ppc_jumbo_xlate(), Nicholas Piggin, 2024/05/23
- [PULL 52/72] target/ppc/mmu_common.c: Fix misindented qemu_log_mask() calls, Nicholas Piggin, 2024/05/23