Message ID | 20191011155546.14342-14-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | target/arm: Reduce overhead of cpu_get_tb_cpu_state | expand |
Richard Henderson <richard.henderson@linaro.org> writes: > Avoid calling arm_current_el() twice. > > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> > --- > target/arm/internals.h | 9 +++++++++ > target/arm/helper.c | 12 +++++++----- > 2 files changed, 16 insertions(+), 5 deletions(-) > > diff --git a/target/arm/internals.h b/target/arm/internals.h > index 232d963875..f5313dd3d4 100644 > --- a/target/arm/internals.h > +++ b/target/arm/internals.h > @@ -949,6 +949,15 @@ void arm_cpu_update_virq(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: > * @env: The cpu environment > diff --git a/target/arm/helper.c b/target/arm/helper.c > index 85de96d071..3f7d3f257d 100644 > --- a/target/arm/helper.c > +++ b/target/arm/helper.c > @@ -11026,15 +11026,12 @@ ARMMMUIdx arm_v7m_mmu_idx_for_secstate(CPUARMState *env, bool secstate) > } > #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)) { > 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)) { > return ARMMMUIdx_S1SE0 + el; > } 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) > { > 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 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)) { > return rebuild_hflags_a64(env, el, fp_el, mmu_idx); -- Alex Bennée
diff --git a/target/arm/internals.h b/target/arm/internals.h index 232d963875..f5313dd3d4 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -949,6 +949,15 @@ void arm_cpu_update_virq(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: * @env: The cpu environment diff --git a/target/arm/helper.c b/target/arm/helper.c index 85de96d071..3f7d3f257d 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -11026,15 +11026,12 @@ ARMMMUIdx arm_v7m_mmu_idx_for_secstate(CPUARMState *env, bool secstate) } #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)) { 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)) { return ARMMMUIdx_S1SE0 + el; } 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) { 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 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)) { return rebuild_hflags_a64(env, el, fp_el, mmu_idx);