diff options
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) ); } |