source: rtems/cpukit/score/cpu/powerpc/ppc-context-volatile-clobber.S @ 9165349d

Last change on this file since 9165349d was 80cf60e, checked in by Sebastian Huber <sebastian.huber@…>, on 04/15/20 at 07:48:32

Canonicalize config.h include

Use the following variant which was already used by most source files:

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

  • Property mode set to 100644
File size: 2.2 KB
Line 
1/*
2 * Copyright (c) 2013, 2017 embedded brains GmbH.  All rights reserved.
3 *
4 *  embedded brains GmbH
5 *  Dornierstr. 4
6 *  82178 Puchheim
7 *  Germany
8 *  <rtems@embedded-brains.de>
9 *
10 * The license and distribution terms for this file may be
11 * found in the file LICENSE in this distribution or at
12 * http://www.rtems.org/license/LICENSE.
13 */
14
15#ifdef HAVE_CONFIG_H
16#include "config.h"
17#endif
18
19#include <rtems/asm.h>
20#include <rtems/score/cpu.h>
21
22        .global _CPU_Context_volatile_clobber
23
24_CPU_Context_volatile_clobber:
25
26#ifdef PPC_MULTILIB_FPU
27.macro CLOBBER_F i
28        addi    r4, r3, 0x100 + \i
29        stw     r4, 32(r1)
30        addi    r4, r3, 0x200 + \i
31        stw     r4, 32 + 4(r1)
32        lfd     \i, 32(r1)
33.endm
34
35        PPC_REG_STORE_UPDATE    r1, -96(r1)
36
37        /* Negate FPSCR[FPRF] bits */
38        mffs    f0
39        stfd    f0, 32(r1)
40        lwz     r0, 36(r1)
41        nor     r3, r0, r0
42        rlwinm  r0, r0, 0, 20, 14
43        rlwinm  r3, r3, 0, 15, 19
44        or      r0, r3, r0
45        stw     r0, 36(r1)
46        lfd     f0, 32(r1)
47        mtfsf   0xff, f0
48
49        CLOBBER_F 0
50        CLOBBER_F 1
51        CLOBBER_F 2
52        CLOBBER_F 3
53        CLOBBER_F 4
54        CLOBBER_F 5
55        CLOBBER_F 6
56        CLOBBER_F 7
57        CLOBBER_F 8
58        CLOBBER_F 9
59        CLOBBER_F 10
60        CLOBBER_F 11
61        CLOBBER_F 12
62        CLOBBER_F 13
63        addi    r1, r1, 96
64#endif
65
66#ifdef PPC_MULTILIB_ALTIVEC
67.macro CLOBBER_V i
68        addi    r4, r3, 0x300 + \i
69        stw     r4, 32(r1)
70        addi    r4, r3, 0x400 + \i
71        stw     r4, 32 + 4(r1)
72        addi    r4, r3, 0x500 + \i
73        stw     r4, 32 + 8(r1)
74        addi    r4, r3, 0x600 + \i
75        stw     r4, 32 + 12(r1)
76        li      r4, 32
77        lvx     \i, r1, r4
78.endm
79
80        PPC_REG_STORE_UPDATE    r1, -96(r1)
81
82        /* Negate VSCR[SAT] bit */
83        mfvscr  v0
84        li      r3, 44
85        stvewx  v0, r1, r3
86        lwz     r0, 44(r1)
87        nor     r3, r0, r0
88        rlwinm  r0, r0, 0, 0, 30
89        rlwinm  r3, r3, 0, 31, 31
90        or      r0, r3, r0
91        stw     r0, 44(r1)
92        li      r3, 44
93        lvewx   v0, r1, r3
94        mtvscr  v0
95
96        CLOBBER_V 0
97        CLOBBER_V 1
98        CLOBBER_V 2
99        CLOBBER_V 3
100        CLOBBER_V 4
101        CLOBBER_V 5
102        CLOBBER_V 6
103        CLOBBER_V 7
104        CLOBBER_V 8
105        CLOBBER_V 9
106        CLOBBER_V 10
107        CLOBBER_V 11
108        CLOBBER_V 12
109        CLOBBER_V 13
110        CLOBBER_V 14
111        CLOBBER_V 15
112        CLOBBER_V 16
113        CLOBBER_V 17
114        CLOBBER_V 18
115        CLOBBER_V 19
116        addi    r1, r1, 96
117#endif
118
119        addi    r4, r3, 10
120        rlwinm  r4, r4, 0, 20, 7
121        mfcr    r5
122        rlwinm  r5, r5, 0, 8, 19
123        or      r4, r4, r5
124        mtcr    r4
125        addi    r4, r3, 11
126        mtctr   r4
127        addi    r4, r3, 12
128        mtxer   r4
129        addi    r0, r3, 13
130        addi    r4, r3, 1
131        addi    r5, r3, 2
132        addi    r6, r3, 3
133        addi    r7, r3, 4
134        addi    r8, r3, 5
135        addi    r9, r3, 6
136        addi    r10, r3, 7
137        addi    r11, r3, 8
138        addi    r12, r3, 9
139        blr
Note: See TracBrowser for help on using the repository browser.