diff options
Diffstat (limited to 'cpukit/score/cpu/powerpc/ppc-context-volatile-clobber.S')
-rw-r--r-- | cpukit/score/cpu/powerpc/ppc-context-volatile-clobber.S | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/cpukit/score/cpu/powerpc/ppc-context-volatile-clobber.S b/cpukit/score/cpu/powerpc/ppc-context-volatile-clobber.S index d0c2159a06..e3a7a9cc14 100644 --- a/cpukit/score/cpu/powerpc/ppc-context-volatile-clobber.S +++ b/cpukit/score/cpu/powerpc/ppc-context-volatile-clobber.S @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013, 2017 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -17,6 +17,7 @@ #endif #include <rtems/asm.h> +#include <rtems/score/cpu.h> .global _CPU_Context_volatile_clobber @@ -25,24 +26,24 @@ _CPU_Context_volatile_clobber: #ifdef PPC_MULTILIB_FPU .macro CLOBBER_F i addi r4, r3, 0x100 + \i - stw r4, 16(r1) + stw r4, 32(r1) addi r4, r3, 0x200 + \i - stw r4, 16 + 4(r1) - lfd \i, 16(r1) + stw r4, 32 + 4(r1) + lfd \i, 32(r1) .endm - stwu r1, -32(r1) + PPC_REG_STORE_UPDATE r1, -96(r1) /* Negate FPSCR[FPRF] bits */ mffs f0 - stfd f0, 16(r1) - lwz r0, 20(r1) + stfd f0, 32(r1) + lwz r0, 36(r1) nor r3, r0, r0 rlwinm r0, r0, 0, 20, 14 rlwinm r3, r3, 0, 15, 19 or r0, r3, r0 - stw r0, 20(r1) - lfd f0, 16(r1) + stw r0, 36(r1) + lfd f0, 32(r1) mtfsf 0xff, f0 CLOBBER_F 0 @@ -59,36 +60,36 @@ _CPU_Context_volatile_clobber: CLOBBER_F 11 CLOBBER_F 12 CLOBBER_F 13 - addi r1, r1, 32 + addi r1, r1, 96 #endif #ifdef PPC_MULTILIB_ALTIVEC .macro CLOBBER_V i addi r4, r3, 0x300 + \i - stw r4, 16(r1) + stw r4, 32(r1) addi r4, r3, 0x400 + \i - stw r4, 16 + 4(r1) + stw r4, 32 + 4(r1) addi r4, r3, 0x500 + \i - stw r4, 16 + 8(r1) + stw r4, 32 + 8(r1) addi r4, r3, 0x600 + \i - stw r4, 16 + 12(r1) - li r4, 16 + stw r4, 32 + 12(r1) + li r4, 32 lvx \i, r1, r4 .endm - stwu r1, -32(r1) + PPC_REG_STORE_UPDATE r1, -96(r1) /* Negate VSCR[SAT] bit */ mfvscr v0 - li r3, 28 + li r3, 44 stvewx v0, r1, r3 - lwz r0, 28(r1) + lwz r0, 44(r1) nor r3, r0, r0 rlwinm r0, r0, 0, 0, 30 rlwinm r3, r3, 0, 31, 31 or r0, r3, r0 - stw r0, 28(r1) - li r3, 28 + stw r0, 44(r1) + li r3, 44 lvewx v0, r1, r3 mtvscr v0 @@ -112,7 +113,7 @@ _CPU_Context_volatile_clobber: CLOBBER_V 17 CLOBBER_V 18 CLOBBER_V 19 - addi r1, r1, 32 + addi r1, r1, 96 #endif addi r4, r3, 10 |