diff options
author | Peter Maydell | 2019-04-29 18:36:02 +0200 |
---|---|---|
committer | Peter Maydell | 2019-04-29 18:36:02 +0200 |
commit | a99ba8ab1601904e0fa20325192fc850362ce80e (patch) | |
tree | aead4ab361eebc72e22712989ef700aecf1b8b8a /target/arm/cpu.h | |
parent | target/arm: New helper function arm_v7m_mmu_idx_all() (diff) | |
download | qemu-a99ba8ab1601904e0fa20325192fc850362ce80e.tar.gz qemu-a99ba8ab1601904e0fa20325192fc850362ce80e.tar.xz qemu-a99ba8ab1601904e0fa20325192fc850362ce80e.zip |
target/arm: New function armv7m_nvic_set_pending_lazyfp()
In the v7M architecture, if an exception is generated in the process
of doing the lazy stacking of FP registers, the handling of
possible escalation to HardFault is treated differently to the normal
approach: it works based on the saved information about exception
readiness that was stored in the FPCCR when the stack frame was
created. Provide a new function armv7m_nvic_set_pending_lazyfp()
which pends exceptions during lazy stacking, and implements
this logic.
This corresponds to the pseudocode TakePreserveFPException().
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20190416125744.27770-22-peter.maydell@linaro.org
Diffstat (limited to 'target/arm/cpu.h')
-rw-r--r-- | target/arm/cpu.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 920cf36702..ed3069341d 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -2009,6 +2009,18 @@ void armv7m_nvic_set_pending(void *opaque, int irq, bool secure); */ void armv7m_nvic_set_pending_derived(void *opaque, int irq, bool secure); /** + * armv7m_nvic_set_pending_lazyfp: mark this lazy FP exception as pending + * @opaque: the NVIC + * @irq: the exception number to mark pending + * @secure: false for non-banked exceptions or for the nonsecure + * version of a banked exception, true for the secure version of a banked + * exception. + * + * Similar to armv7m_nvic_set_pending(), but specifically for exceptions + * generated in the course of lazy stacking of FP registers. + */ +void armv7m_nvic_set_pending_lazyfp(void *opaque, int irq, bool secure); +/** * armv7m_nvic_get_pending_irq_info: return highest priority pending * exception, and whether it targets Secure state * @opaque: the NVIC |