target/arm: Split out arm_mmu_idx_el

Avoid calling arm_current_el() twice.

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20191023150057.25731-14-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Richard Henderson 2019-10-23 11:00:46 -04:00 committed by Peter Maydell
parent 3d74e2e9ff
commit 164690b29f
2 changed files with 16 additions and 5 deletions

View File

@ -11026,15 +11026,12 @@ ARMMMUIdx arm_v7m_mmu_idx_for_secstate(CPUARMState *env, bool secstate)
} }
#endif #endif
ARMMMUIdx arm_mmu_idx(CPUARMState *env) ARMMMUIdx arm_mmu_idx_el(CPUARMState *env, int el)
{ {
int el;
if (arm_feature(env, ARM_FEATURE_M)) { if (arm_feature(env, ARM_FEATURE_M)) {
return arm_v7m_mmu_idx_for_secstate(env, env->v7m.secure); return arm_v7m_mmu_idx_for_secstate(env, env->v7m.secure);
} }
el = arm_current_el(env);
if (el < 2 && arm_is_secure_below_el3(env)) { if (el < 2 && arm_is_secure_below_el3(env)) {
return ARMMMUIdx_S1SE0 + el; return ARMMMUIdx_S1SE0 + el;
} else { } else {
@ -11042,6 +11039,11 @@ ARMMMUIdx arm_mmu_idx(CPUARMState *env)
} }
} }
ARMMMUIdx arm_mmu_idx(CPUARMState *env)
{
return arm_mmu_idx_el(env, arm_current_el(env));
}
int cpu_mmu_index(CPUARMState *env, bool ifetch) int cpu_mmu_index(CPUARMState *env, bool ifetch)
{ {
return arm_to_core_mmu_idx(arm_mmu_idx(env)); return arm_to_core_mmu_idx(arm_mmu_idx(env));
@ -11202,7 +11204,7 @@ static uint32_t rebuild_hflags_internal(CPUARMState *env)
{ {
int el = arm_current_el(env); int el = arm_current_el(env);
int fp_el = fp_exception_el(env, el); int fp_el = fp_exception_el(env, el);
ARMMMUIdx mmu_idx = arm_mmu_idx(env); ARMMMUIdx mmu_idx = arm_mmu_idx_el(env, el);
if (is_a64(env)) { if (is_a64(env)) {
return rebuild_hflags_a64(env, el, fp_el, mmu_idx); return rebuild_hflags_a64(env, el, fp_el, mmu_idx);

View File

@ -949,6 +949,15 @@ void arm_cpu_update_virq(ARMCPU *cpu);
*/ */
void arm_cpu_update_vfiq(ARMCPU *cpu); void arm_cpu_update_vfiq(ARMCPU *cpu);
/**
* arm_mmu_idx_el:
* @env: The cpu environment
* @el: The EL to use.
*
* Return the full ARMMMUIdx for the translation regime for EL.
*/
ARMMMUIdx arm_mmu_idx_el(CPUARMState *env, int el);
/** /**
* arm_mmu_idx: * arm_mmu_idx:
* @env: The cpu environment * @env: The cpu environment