1 /* getcontext/setcontext/makecontext support for e500 high parts of registers.
2 Copyright (C) 2006-2015 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
)
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
)
68 .macro setcontext_e500
69 lwz r3
,_UC_VREGS
+(0*4)(r31
)
71 lwz r3
,_UC_VREGS
+(1*4)(r31
)
73 lwz r3
,_UC_VREGS
+(2*4)(r31
)
75 lwz r3
,_UC_VREGS
+(1*4)(r31
)
77 lwz r3
,_UC_VREGS
+(2*4)(r31
)
79 lwz r3
,_UC_VREGS
+(3*4)(r31
)
81 lwz r3
,_UC_VREGS
+(4*4)(r31
)
83 lwz r3
,_UC_VREGS
+(5*4)(r31
)
85 lwz r3
,_UC_VREGS
+(6*4)(r31
)
87 lwz r3
,_UC_VREGS
+(7*4)(r31
)
89 lwz r3
,_UC_VREGS
+(8*4)(r31
)
91 lwz r3
,_UC_VREGS
+(9*4)(r31
)
93 lwz r3
,_UC_VREGS
+(10*4)(r31
)
95 lwz r3
,_UC_VREGS
+(11*4)(r31
)
97 lwz r3
,_UC_VREGS
+(12*4)(r31
)
99 lwz r3
,_UC_VREGS
+(13*4)(r31
)
101 lwz r3
,_UC_VREGS
+(14*4)(r31
)
103 lwz r3
,_UC_VREGS
+(15*4)(r31
)
105 lwz r3
,_UC_VREGS
+(16*4)(r31
)
107 lwz r3
,_UC_VREGS
+(17*4)(r31
)
109 lwz r3
,_UC_VREGS
+(18*4)(r31
)
111 lwz r3
,_UC_VREGS
+(19*4)(r31
)
113 lwz r3
,_UC_VREGS
+(20*4)(r31
)
115 lwz r3
,_UC_VREGS
+(21*4)(r31
)
117 lwz r3
,_UC_VREGS
+(22*4)(r31
)
119 lwz r3
,_UC_VREGS
+(23*4)(r31
)
121 lwz r3
,_UC_VREGS
+(24*4)(r31
)
123 lwz r3
,_UC_VREGS
+(25*4)(r31
)
125 lwz r3
,_UC_VREGS
+(26*4)(r31
)
127 lwz r3
,_UC_VREGS
+(27*4)(r31
)
129 lwz r3
,_UC_VREGS
+(28*4)(r31
)
131 lwz r3
,_UC_VREGS
+(29*4)(r31
)
133 lwz r3
,_UC_VREGS
+(30*4)(r31
)
135 lwz r3
,_UC_VREGS
+(31*4)(r31
)
137 lwz r3
,_UC_VREGS
+(34*4)(r31
)
141 # undef __CONTEXT_ENABLE_E500
144 #endif /* context-e500.h */