summaryrefslogtreecommitdiffstats
path: root/cpukit/score/cpu/arm/arm_exc_interrupt.S
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-08-10 18:36:30 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-08-12 19:08:19 +0200
commit8ae373235b316ff10c3b6f30ac1f2efed9bec011 (patch)
treef52d2ff1e1ba63036c7d1f5f34ba41db783d1f00 /cpukit/score/cpu/arm/arm_exc_interrupt.S
parentbsp/altera-cyclone-v: Add RTC driver. (diff)
downloadrtems-8ae373235b316ff10c3b6f30ac1f2efed9bec011.tar.bz2
arm: Add support for FPv4-SP floating point unit
This floating point unit is available in Cortex-M4 processors and defined by ARMv7-M. This adds basic support for other VFP-D16 variants.
Diffstat (limited to 'cpukit/score/cpu/arm/arm_exc_interrupt.S')
-rw-r--r--cpukit/score/cpu/arm/arm_exc_interrupt.S12
1 files changed, 8 insertions, 4 deletions
diff --git a/cpukit/score/cpu/arm/arm_exc_interrupt.S b/cpukit/score/cpu/arm/arm_exc_interrupt.S
index e8026c869b..7930c32044 100644
--- a/cpukit/score/cpu/arm/arm_exc_interrupt.S
+++ b/cpukit/score/cpu/arm/arm_exc_interrupt.S
@@ -75,13 +75,15 @@ _ARMV4_Exception_interrupt:
stmdb sp!, CONTEXT_LIST
stmdb sp!, {SP_OF_INTERRUPTED_CONTEXT, lr}
-#ifdef ARM_MULTILIB_VFP_D32
+#ifdef ARM_MULTILIB_VFP
/* Save VFP context */
vmrs r0, FPSCR
vstmdb sp!, {d0-d7}
+#ifdef ARM_MULTILIB_VFP_D32
vstmdb sp!, {d16-d31}
- stmdb sp!, {r0, r1}
#endif
+ stmdb sp!, {r0, r1}
+#endif /* ARM_MULTILIB_VFP */
/* Get per-CPU control of current processor */
GET_SELF_CPU_CONTROL SELF_CPU_CONTROL, r1
@@ -166,13 +168,15 @@ thread_dispatch_done:
/* Switch to ARM instructions if necessary */
SWITCH_FROM_THUMB_TO_ARM
-#ifdef ARM_MULTILIB_VFP_D32
+#ifdef ARM_MULTILIB_VFP
/* Restore VFP context */
ldmia sp!, {r0, r1}
+#ifdef ARM_MULTILIB_VFP_D32
vldmia sp!, {d16-d31}
+#endif
vldmia sp!, {d0-d7}
vmsr FPSCR, r0
-#endif
+#endif /* ARM_MULTILIB_VFP */
/* Restore SP_OF_INTERRUPTED_CONTEXT register and link register */
ldmia sp!, {SP_OF_INTERRUPTED_CONTEXT, lr}