[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 4/7] target/s390x: Tidy access_prepare_nf
From: |
Richard Henderson |
Subject: |
[PATCH 4/7] target/s390x: Tidy access_prepare_nf |
Date: |
Mon, 9 Jan 2023 12:18:53 -0800 |
Assign to access struct immediately, rather than waiting
until the end of the function. This means we can pass
address of haddr struct members instead of allocating
extra space on the local stack.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
target/s390x/tcg/mem_helper.c | 30 +++++++++++++-----------------
1 file changed, 13 insertions(+), 17 deletions(-)
diff --git a/target/s390x/tcg/mem_helper.c b/target/s390x/tcg/mem_helper.c
index 0f2830f87c..59237fe7de 100644
--- a/target/s390x/tcg/mem_helper.c
+++ b/target/s390x/tcg/mem_helper.c
@@ -176,39 +176,35 @@ static int access_prepare_nf(S390Access *access,
CPUS390XState *env,
MMUAccessType access_type,
int mmu_idx, uintptr_t ra)
{
- void *haddr1, *haddr2 = NULL;
int size1, size2, exc;
- vaddr vaddr2 = 0;
assert(size > 0 && size <= 4096);
size1 = MIN(size, -(vaddr1 | TARGET_PAGE_MASK)),
size2 = size - size1;
+ memset(access, 0, sizeof(*access));
+ access->vaddr1 = vaddr1;
+ access->size1 = size1;
+ access->size2 = size2;
+ access->mmu_idx = mmu_idx;
+
exc = s390_probe_access(env, vaddr1, size1, access_type, mmu_idx, nonfault,
- &haddr1, ra);
- if (exc) {
+ &access->haddr1, ra);
+ if (unlikely(exc)) {
return exc;
}
if (unlikely(size2)) {
/* The access crosses page boundaries. */
- vaddr2 = wrap_address(env, vaddr1 + size1);
+ vaddr vaddr2 = wrap_address(env, vaddr1 + size1);
+
+ access->vaddr2 = vaddr2;
exc = s390_probe_access(env, vaddr2, size2, access_type, mmu_idx,
- nonfault, &haddr2, ra);
- if (exc) {
+ nonfault, &access->haddr2, ra);
+ if (unlikely(exc)) {
return exc;
}
}
-
- *access = (S390Access) {
- .vaddr1 = vaddr1,
- .vaddr2 = vaddr2,
- .haddr1 = haddr1,
- .haddr2 = haddr2,
- .size1 = size1,
- .size2 = size2,
- .mmu_idx = mmu_idx
- };
return 0;
}
--
2.34.1
- [PATCH 0/7] target/s390x: mem_helper.c cleanups, Richard Henderson, 2023/01/09
- [PATCH 2/7] target/s390x: Pass S390Access pointer into access_prepare, Richard Henderson, 2023/01/09
- [PATCH 1/7] target/s390x: Fix s390_probe_access for user-only, Richard Henderson, 2023/01/09
- [PATCH 5/7] target/s390x: Remove TLB_NOTDIRTY workarounds, Richard Henderson, 2023/01/09
- [PATCH 4/7] target/s390x: Tidy access_prepare_nf,
Richard Henderson <=
- [PATCH 7/7] target/s390x: Hoist some computation in access_memmove, Richard Henderson, 2023/01/09
- [PATCH 3/7] target/s390x: Use void* for haddr in S390Access, Richard Henderson, 2023/01/09
- [PATCH 6/7] target/s390x: Inline do_access_{get,set}_byte, Richard Henderson, 2023/01/09