diff options
author | Peter Maydell | 2019-04-29 18:36:02 +0200 |
---|---|---|
committer | Peter Maydell | 2019-04-29 18:36:02 +0200 |
commit | fa6252a988dbe440cd6087bf93cbe0887f0c401b (patch) | |
tree | 580fb5821257f61e4090b63bed219fefa8f79913 /target/arm/helper.c | |
parent | target/arm: Activate M-profile floating point context when FPCCR.ASPEN is set (diff) | |
download | qemu-fa6252a988dbe440cd6087bf93cbe0887f0c401b.tar.gz qemu-fa6252a988dbe440cd6087bf93cbe0887f0c401b.tar.xz qemu-fa6252a988dbe440cd6087bf93cbe0887f0c401b.zip |
target/arm: New helper function arm_v7m_mmu_idx_all()
Add a new helper function which returns the MMU index to use
for v7M, where the caller specifies all of the security
state, privilege level and whether the execution priority
is negative, and reimplement the existing
arm_v7m_mmu_idx_for_secstate_and_priv() in terms of it.
We are going to need this for the lazy-FP-stacking code.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20190416125744.27770-21-peter.maydell@linaro.org
Diffstat (limited to 'target/arm/helper.c')
-rw-r--r-- | target/arm/helper.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/target/arm/helper.c b/target/arm/helper.c index 84e3790a9d..1ed5f1a251 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -13230,8 +13230,8 @@ int fp_exception_el(CPUARMState *env, int cur_el) return 0; } -ARMMMUIdx arm_v7m_mmu_idx_for_secstate_and_priv(CPUARMState *env, - bool secstate, bool priv) +ARMMMUIdx arm_v7m_mmu_idx_all(CPUARMState *env, + bool secstate, bool priv, bool negpri) { ARMMMUIdx mmu_idx = ARM_MMU_IDX_M; @@ -13239,7 +13239,7 @@ ARMMMUIdx arm_v7m_mmu_idx_for_secstate_and_priv(CPUARMState *env, mmu_idx |= ARM_MMU_IDX_M_PRIV; } - if (armv7m_nvic_neg_prio_requested(env->nvic, secstate)) { + if (negpri) { mmu_idx |= ARM_MMU_IDX_M_NEGPRI; } @@ -13250,6 +13250,14 @@ ARMMMUIdx arm_v7m_mmu_idx_for_secstate_and_priv(CPUARMState *env, return mmu_idx; } +ARMMMUIdx arm_v7m_mmu_idx_for_secstate_and_priv(CPUARMState *env, + bool secstate, bool priv) +{ + bool negpri = armv7m_nvic_neg_prio_requested(env->nvic, secstate); + + return arm_v7m_mmu_idx_all(env, secstate, priv, negpri); +} + /* Return the MMU index for a v7M CPU in the specified security state */ ARMMMUIdx arm_v7m_mmu_idx_for_secstate(CPUARMState *env, bool secstate) { |