diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-08-10 18:36:30 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-08-12 19:08:19 +0200 |
commit | 8ae373235b316ff10c3b6f30ac1f2efed9bec011 (patch) | |
tree | f52d2ff1e1ba63036c7d1f5f34ba41db783d1f00 /cpukit/score/cpu/arm/armv7m-context-switch.c | |
parent | bsp/altera-cyclone-v: Add RTC driver. (diff) | |
download | rtems-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/armv7m-context-switch.c')
-rw-r--r-- | cpukit/score/cpu/arm/armv7m-context-switch.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/cpukit/score/cpu/arm/armv7m-context-switch.c b/cpukit/score/cpu/arm/armv7m-context-switch.c index eabf2c8272..359a1a7a9b 100644 --- a/cpukit/score/cpu/arm/armv7m-context-switch.c +++ b/cpukit/score/cpu/arm/armv7m-context-switch.c @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2011 Sebastian Huber. All rights reserved. + * Copyright (c) 2011-2014 Sebastian Huber. All rights reserved. * * embedded brains GmbH * Obere Lagerstr. 30 @@ -37,17 +37,26 @@ void __attribute__((naked)) _CPU_Context_switch( "movt r2, #:upper16:_Per_CPU_Information\n" "ldr r3, [r2, %[isrpcpuoff]]\n" "stm r0, {r4-r11, lr}\n" +#ifdef ARM_MULTILIB_VFP + "add r4, r0, %[d8off]\n" + "vstm r4, {d8-d15}\n" +#endif "str sp, [r0, %[spctxoff]]\n" "str r3, [r0, %[isrctxoff]]\n" "ldr r3, [r1, %[isrctxoff]]\n" "ldr sp, [r1, %[spctxoff]]\n" +#ifdef ARM_MULTILIB_VFP + "add r4, r1, %[d8off]\n" + "vldm r4, {d8-d15}\n" +#endif "ldm r1, {r4-r11, lr}\n" "str r3, [r2, %[isrpcpuoff]]\n" "bx lr\n" : : [spctxoff] "J" (offsetof(Context_Control, register_sp)), [isrctxoff] "J" (offsetof(Context_Control, isr_nest_level)), - [isrpcpuoff] "J" (offsetof(Per_CPU_Control, isr_nest_level)) + [isrpcpuoff] "J" (offsetof(Per_CPU_Control, isr_nest_level)), + [d8off] "J" (ARM_CONTEXT_CONTROL_D8_OFFSET) ); } |