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

Last change on this file since 87076c9 was 87076c9, checked in by Joel Sherrill <joel@…>, on 02/16/22 at 22:53:04

score/cpu/powerpc: Change license to BSD-2

Updates #3053.

  • Property mode set to 100644
File size: 3.4 KB
Line 
1/* SPDX-License-Identifier: BSD-2-Clause */
2
3/*
4 * Copyright (c) 2013, 2017 embedded brains GmbH.  All rights reserved.
5 *
6 *  embedded brains GmbH
7 *  Dornierstr. 4
8 *  82178 Puchheim
9 *  Germany
10 *  <rtems@embedded-brains.de>
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 *    notice, this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright
18 *    notice, this list of conditions and the following disclaimer in the
19 *    documentation and/or other materials provided with the distribution.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE.
32 */
33
34#ifdef HAVE_CONFIG_H
35#include "config.h"
36#endif
37
38#include <rtems/asm.h>
39#include <rtems/score/cpu.h>
40
41        .global _CPU_Context_volatile_clobber
42
43_CPU_Context_volatile_clobber:
44
45#ifdef PPC_MULTILIB_FPU
46.macro CLOBBER_F i
47        addi    r4, r3, 0x100 + \i
48        stw     r4, 32(r1)
49        addi    r4, r3, 0x200 + \i
50        stw     r4, 32 + 4(r1)
51        lfd     \i, 32(r1)
52.endm
53
54        PPC_REG_STORE_UPDATE    r1, -96(r1)
55
56        /* Negate FPSCR[FPRF] bits */
57        mffs    f0
58        stfd    f0, 32(r1)
59        lwz     r0, 36(r1)
60        nor     r3, r0, r0
61        rlwinm  r0, r0, 0, 20, 14
62        rlwinm  r3, r3, 0, 15, 19
63        or      r0, r3, r0
64        stw     r0, 36(r1)
65        lfd     f0, 32(r1)
66        mtfsf   0xff, f0
67
68        CLOBBER_F 0
69        CLOBBER_F 1
70        CLOBBER_F 2
71        CLOBBER_F 3
72        CLOBBER_F 4
73        CLOBBER_F 5
74        CLOBBER_F 6
75        CLOBBER_F 7
76        CLOBBER_F 8
77        CLOBBER_F 9
78        CLOBBER_F 10
79        CLOBBER_F 11
80        CLOBBER_F 12
81        CLOBBER_F 13
82        addi    r1, r1, 96
83#endif
84
85#ifdef PPC_MULTILIB_ALTIVEC
86.macro CLOBBER_V i
87        addi    r4, r3, 0x300 + \i
88        stw     r4, 32(r1)
89        addi    r4, r3, 0x400 + \i
90        stw     r4, 32 + 4(r1)
91        addi    r4, r3, 0x500 + \i
92        stw     r4, 32 + 8(r1)
93        addi    r4, r3, 0x600 + \i
94        stw     r4, 32 + 12(r1)
95        li      r4, 32
96        lvx     \i, r1, r4
97.endm
98
99        PPC_REG_STORE_UPDATE    r1, -96(r1)
100
101        /* Negate VSCR[SAT] bit */
102        mfvscr  v0
103        li      r3, 44
104        stvewx  v0, r1, r3
105        lwz     r0, 44(r1)
106        nor     r3, r0, r0
107        rlwinm  r0, r0, 0, 0, 30
108        rlwinm  r3, r3, 0, 31, 31
109        or      r0, r3, r0
110        stw     r0, 44(r1)
111        li      r3, 44
112        lvewx   v0, r1, r3
113        mtvscr  v0
114
115        CLOBBER_V 0
116        CLOBBER_V 1
117        CLOBBER_V 2
118        CLOBBER_V 3
119        CLOBBER_V 4
120        CLOBBER_V 5
121        CLOBBER_V 6
122        CLOBBER_V 7
123        CLOBBER_V 8
124        CLOBBER_V 9
125        CLOBBER_V 10
126        CLOBBER_V 11
127        CLOBBER_V 12
128        CLOBBER_V 13
129        CLOBBER_V 14
130        CLOBBER_V 15
131        CLOBBER_V 16
132        CLOBBER_V 17
133        CLOBBER_V 18
134        CLOBBER_V 19
135        addi    r1, r1, 96
136#endif
137
138        addi    r4, r3, 10
139        rlwinm  r4, r4, 0, 20, 7
140        mfcr    r5
141        rlwinm  r5, r5, 0, 8, 19
142        or      r4, r4, r5
143        mtcr    r4
144        addi    r4, r3, 11
145        mtctr   r4
146        addi    r4, r3, 12
147        mtxer   r4
148        addi    r0, r3, 13
149        addi    r4, r3, 1
150        addi    r5, r3, 2
151        addi    r6, r3, 3
152        addi    r7, r3, 4
153        addi    r8, r3, 5
154        addi    r9, r3, 6
155        addi    r10, r3, 7
156        addi    r11, r3, 8
157        addi    r12, r3, 9
158        blr
Note: See TracBrowser for help on using the repository browser.