Update copyright notices with scripts/update-copyrights
[glibc.git] / sysdeps / unix / sysv / linux / powerpc / powerpc32 / nofpu / context-e500.h
blob4cc9a81dc18399bdb5449aa8c9a3e01389171e62
1 /* getcontext/setcontext/makecontext support for e500 high parts of registers.
2 Copyright (C) 2006-2014 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
19 #ifndef _CONTEXT_E500_H
20 #define _CONTEXT_E500_H 1
22 #if defined __SPE__ || (defined __NO_FPRS__ && !defined _SOFT_FLOAT)
24 # define __CONTEXT_ENABLE_E500 1
26 /* We follow the kernel's layout, which saves the high parts of the
27 SPE registers in the vregs area, immediately followed by the ACC
28 value (call-clobbered, not handled here) and the SPEFSCR value. */
30 .macro getcontext_e500
31 la r10,(_UC_VREGS)(r3)
32 evstwwe r0,(0*4)(r10)
33 evstwwe r1,(1*4)(r10)
34 evstwwe r2,(2*4)(r10)
35 evstwwe r3,(3*4)(r10)
36 evstwwe r4,(4*4)(r10)
37 evstwwe r5,(5*4)(r10)
38 evstwwe r6,(6*4)(r10)
39 evstwwe r7,(7*4)(r10)
40 evstwwe r8,(8*4)(r10)
41 evstwwe r9,(9*4)(r10)
42 evstwwe r10,(10*4)(r10)
43 evstwwe r11,(11*4)(r10)
44 evstwwe r12,(12*4)(r10)
45 evstwwe r13,(13*4)(r10)
46 evstwwe r14,(14*4)(r10)
47 evstwwe r15,(15*4)(r10)
48 evstwwe r16,(16*4)(r10)
49 evstwwe r17,(17*4)(r10)
50 evstwwe r18,(18*4)(r10)
51 evstwwe r19,(19*4)(r10)
52 evstwwe r20,(20*4)(r10)
53 evstwwe r21,(21*4)(r10)
54 evstwwe r22,(22*4)(r10)
55 evstwwe r23,(23*4)(r10)
56 evstwwe r24,(24*4)(r10)
57 evstwwe r25,(25*4)(r10)
58 evstwwe r26,(26*4)(r10)
59 evstwwe r27,(27*4)(r10)
60 evstwwe r28,(28*4)(r10)
61 evstwwe r29,(29*4)(r10)
62 evstwwe r30,(30*4)(r10)
63 evstwwe r31,(31*4)(r10)
64 mfspefscr r9
65 stw r9,(34*4)(r10)
66 .endm
68 .macro setcontext_e500
69 lwz r3,_UC_VREGS+(0*4)(r31)
70 evmergelo r0,r3,r0
71 lwz r3,_UC_VREGS+(1*4)(r31)
72 evmergelo r1,r3,r1
73 lwz r3,_UC_VREGS+(2*4)(r31)
74 evmergelo r2,r3,r2
75 lwz r3,_UC_VREGS+(1*4)(r31)
76 evmergelo r1,r3,r1
77 lwz r3,_UC_VREGS+(2*4)(r31)
78 evmergelo r2,r3,r2
79 lwz r3,_UC_VREGS+(3*4)(r31)
80 evmergelo r3,r3,r3
81 lwz r3,_UC_VREGS+(4*4)(r31)
82 evmergelo r4,r3,r4
83 lwz r3,_UC_VREGS+(5*4)(r31)
84 evmergelo r5,r3,r5
85 lwz r3,_UC_VREGS+(6*4)(r31)
86 evmergelo r6,r3,r6
87 lwz r3,_UC_VREGS+(7*4)(r31)
88 evmergelo r7,r3,r7
89 lwz r3,_UC_VREGS+(8*4)(r31)
90 evmergelo r8,r3,r8
91 lwz r3,_UC_VREGS+(9*4)(r31)
92 evmergelo r9,r3,r9
93 lwz r3,_UC_VREGS+(10*4)(r31)
94 evmergelo r10,r3,r10
95 lwz r3,_UC_VREGS+(11*4)(r31)
96 evmergelo r11,r3,r11
97 lwz r3,_UC_VREGS+(12*4)(r31)
98 evmergelo r12,r3,r12
99 lwz r3,_UC_VREGS+(13*4)(r31)
100 evmergelo r13,r3,r13
101 lwz r3,_UC_VREGS+(14*4)(r31)
102 evmergelo r14,r3,r14
103 lwz r3,_UC_VREGS+(15*4)(r31)
104 evmergelo r15,r3,r15
105 lwz r3,_UC_VREGS+(16*4)(r31)
106 evmergelo r16,r3,r16
107 lwz r3,_UC_VREGS+(17*4)(r31)
108 evmergelo r17,r3,r17
109 lwz r3,_UC_VREGS+(18*4)(r31)
110 evmergelo r18,r3,r18
111 lwz r3,_UC_VREGS+(19*4)(r31)
112 evmergelo r19,r3,r19
113 lwz r3,_UC_VREGS+(20*4)(r31)
114 evmergelo r20,r3,r20
115 lwz r3,_UC_VREGS+(21*4)(r31)
116 evmergelo r21,r3,r21
117 lwz r3,_UC_VREGS+(22*4)(r31)
118 evmergelo r22,r3,r22
119 lwz r3,_UC_VREGS+(23*4)(r31)
120 evmergelo r23,r3,r23
121 lwz r3,_UC_VREGS+(24*4)(r31)
122 evmergelo r24,r3,r24
123 lwz r3,_UC_VREGS+(25*4)(r31)
124 evmergelo r25,r3,r25
125 lwz r3,_UC_VREGS+(26*4)(r31)
126 evmergelo r26,r3,r26
127 lwz r3,_UC_VREGS+(27*4)(r31)
128 evmergelo r27,r3,r27
129 lwz r3,_UC_VREGS+(28*4)(r31)
130 evmergelo r28,r3,r28
131 lwz r3,_UC_VREGS+(29*4)(r31)
132 evmergelo r29,r3,r29
133 lwz r3,_UC_VREGS+(30*4)(r31)
134 evmergelo r30,r3,r30
135 lwz r3,_UC_VREGS+(31*4)(r31)
136 evmergelo r31,r3,r31
137 lwz r3,_UC_VREGS+(34*4)(r31)
138 mtspefscr r3
139 .endm
140 #else
141 # undef __CONTEXT_ENABLE_E500
142 #endif
144 #endif /* context-e500.h */