mirror of https://github.com/xemu-project/xemu.git
target/ppc/mem_helper.c: Remove a conditional from dcbz_common()
Instead of passing a bool and select a value within dcbz_common() let the callers pass in the right value to avoid this conditional statement. On PPC dcbz is often used to zero memory and some code uses it a lot. This change improves the run time of a test case that copies memory with a dcbz call in every iteration from 6.23 to 5.83 seconds. Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> Message-Id: <20240622204833.5F7C74E6000@zero.eik.bme.hu> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
This commit is contained in:
parent
3b9991e35c
commit
73a93ae5f4
|
@ -271,12 +271,11 @@ void helper_stsw(CPUPPCState *env, target_ulong addr, uint32_t nb,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dcbz_common(CPUPPCState *env, target_ulong addr,
|
static void dcbz_common(CPUPPCState *env, target_ulong addr,
|
||||||
uint32_t opcode, bool epid, uintptr_t retaddr)
|
uint32_t opcode, int mmu_idx, uintptr_t retaddr)
|
||||||
{
|
{
|
||||||
target_ulong mask, dcbz_size = env->dcache_line_size;
|
target_ulong mask, dcbz_size = env->dcache_line_size;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
void *haddr;
|
void *haddr;
|
||||||
int mmu_idx = epid ? PPC_TLB_EPID_STORE : ppc_env_mmu_index(env, false);
|
|
||||||
|
|
||||||
#if defined(TARGET_PPC64)
|
#if defined(TARGET_PPC64)
|
||||||
/* Check for dcbz vs dcbzl on 970 */
|
/* Check for dcbz vs dcbzl on 970 */
|
||||||
|
@ -309,12 +308,12 @@ static void dcbz_common(CPUPPCState *env, target_ulong addr,
|
||||||
|
|
||||||
void helper_dcbz(CPUPPCState *env, target_ulong addr, uint32_t opcode)
|
void helper_dcbz(CPUPPCState *env, target_ulong addr, uint32_t opcode)
|
||||||
{
|
{
|
||||||
dcbz_common(env, addr, opcode, false, GETPC());
|
dcbz_common(env, addr, opcode, ppc_env_mmu_index(env, false), GETPC());
|
||||||
}
|
}
|
||||||
|
|
||||||
void helper_dcbzep(CPUPPCState *env, target_ulong addr, uint32_t opcode)
|
void helper_dcbzep(CPUPPCState *env, target_ulong addr, uint32_t opcode)
|
||||||
{
|
{
|
||||||
dcbz_common(env, addr, opcode, true, GETPC());
|
dcbz_common(env, addr, opcode, PPC_TLB_EPID_STORE, GETPC());
|
||||||
}
|
}
|
||||||
|
|
||||||
void helper_icbi(CPUPPCState *env, target_ulong addr)
|
void helper_icbi(CPUPPCState *env, target_ulong addr)
|
||||||
|
|
Loading…
Reference in New Issue