Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/powerpc/boot/crtsavres.S
26439 views
1
/*
2
* Special support for eabi and SVR4
3
*
4
* Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc.
5
* Copyright 2008 Freescale Semiconductor, Inc.
6
* Written By Michael Meissner
7
*
8
* Based on gcc/config/rs6000/crtsavres.asm from gcc
9
*
10
* This file is free software; you can redistribute it and/or modify it
11
* under the terms of the GNU General Public License as published by the
12
* Free Software Foundation; either version 2, or (at your option) any
13
* later version.
14
*
15
* In addition to the permissions in the GNU General Public License, the
16
* Free Software Foundation gives you unlimited permission to link the
17
* compiled version of this file with other programs, and to distribute
18
* those programs without any restriction coming from the use of this
19
* file. (The General Public License restrictions do apply in other
20
* respects; for example, they cover modification of the file, and
21
* distribution when not linked into another program.)
22
*
23
* This file is distributed in the hope that it will be useful, but
24
* WITHOUT ANY WARRANTY; without even the implied warranty of
25
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
26
* General Public License for more details.
27
*
28
* You should have received a copy of the GNU General Public License
29
* along with this program; see the file COPYING. If not, write to
30
* the Free Software Foundation, 51 Franklin Street, Fifth Floor,
31
* Boston, MA 02110-1301, USA.
32
*
33
* As a special exception, if you link this library with files
34
* compiled with GCC to produce an executable, this does not cause
35
* the resulting executable to be covered by the GNU General Public License.
36
* This exception does not however invalidate any other reasons why
37
* the executable file might be covered by the GNU General Public License.
38
*/
39
40
#ifdef __powerpc64__
41
#error "On PPC64, FPR save/restore functions are provided by the linker."
42
#endif
43
44
.file "crtsavres.S"
45
.section ".text"
46
47
#define _GLOBAL(name) \
48
.type name,@function; \
49
.globl name; \
50
name:
51
52
/* Routines for saving integer registers, called by the compiler. */
53
/* Called with r11 pointing to the stack header word of the caller of the */
54
/* function, just beyond the end of the integer save area. */
55
56
_GLOBAL(_savegpr_14)
57
_GLOBAL(_save32gpr_14)
58
stw 14,-72(11) /* save gp registers */
59
_GLOBAL(_savegpr_15)
60
_GLOBAL(_save32gpr_15)
61
stw 15,-68(11)
62
_GLOBAL(_savegpr_16)
63
_GLOBAL(_save32gpr_16)
64
stw 16,-64(11)
65
_GLOBAL(_savegpr_17)
66
_GLOBAL(_save32gpr_17)
67
stw 17,-60(11)
68
_GLOBAL(_savegpr_18)
69
_GLOBAL(_save32gpr_18)
70
stw 18,-56(11)
71
_GLOBAL(_savegpr_19)
72
_GLOBAL(_save32gpr_19)
73
stw 19,-52(11)
74
_GLOBAL(_savegpr_20)
75
_GLOBAL(_save32gpr_20)
76
stw 20,-48(11)
77
_GLOBAL(_savegpr_21)
78
_GLOBAL(_save32gpr_21)
79
stw 21,-44(11)
80
_GLOBAL(_savegpr_22)
81
_GLOBAL(_save32gpr_22)
82
stw 22,-40(11)
83
_GLOBAL(_savegpr_23)
84
_GLOBAL(_save32gpr_23)
85
stw 23,-36(11)
86
_GLOBAL(_savegpr_24)
87
_GLOBAL(_save32gpr_24)
88
stw 24,-32(11)
89
_GLOBAL(_savegpr_25)
90
_GLOBAL(_save32gpr_25)
91
stw 25,-28(11)
92
_GLOBAL(_savegpr_26)
93
_GLOBAL(_save32gpr_26)
94
stw 26,-24(11)
95
_GLOBAL(_savegpr_27)
96
_GLOBAL(_save32gpr_27)
97
stw 27,-20(11)
98
_GLOBAL(_savegpr_28)
99
_GLOBAL(_save32gpr_28)
100
stw 28,-16(11)
101
_GLOBAL(_savegpr_29)
102
_GLOBAL(_save32gpr_29)
103
stw 29,-12(11)
104
_GLOBAL(_savegpr_30)
105
_GLOBAL(_save32gpr_30)
106
stw 30,-8(11)
107
_GLOBAL(_savegpr_31)
108
_GLOBAL(_save32gpr_31)
109
stw 31,-4(11)
110
blr
111
112
/* Routines for restoring integer registers, called by the compiler. */
113
/* Called with r11 pointing to the stack header word of the caller of the */
114
/* function, just beyond the end of the integer restore area. */
115
116
_GLOBAL(_restgpr_14)
117
_GLOBAL(_rest32gpr_14)
118
lwz 14,-72(11) /* restore gp registers */
119
_GLOBAL(_restgpr_15)
120
_GLOBAL(_rest32gpr_15)
121
lwz 15,-68(11)
122
_GLOBAL(_restgpr_16)
123
_GLOBAL(_rest32gpr_16)
124
lwz 16,-64(11)
125
_GLOBAL(_restgpr_17)
126
_GLOBAL(_rest32gpr_17)
127
lwz 17,-60(11)
128
_GLOBAL(_restgpr_18)
129
_GLOBAL(_rest32gpr_18)
130
lwz 18,-56(11)
131
_GLOBAL(_restgpr_19)
132
_GLOBAL(_rest32gpr_19)
133
lwz 19,-52(11)
134
_GLOBAL(_restgpr_20)
135
_GLOBAL(_rest32gpr_20)
136
lwz 20,-48(11)
137
_GLOBAL(_restgpr_21)
138
_GLOBAL(_rest32gpr_21)
139
lwz 21,-44(11)
140
_GLOBAL(_restgpr_22)
141
_GLOBAL(_rest32gpr_22)
142
lwz 22,-40(11)
143
_GLOBAL(_restgpr_23)
144
_GLOBAL(_rest32gpr_23)
145
lwz 23,-36(11)
146
_GLOBAL(_restgpr_24)
147
_GLOBAL(_rest32gpr_24)
148
lwz 24,-32(11)
149
_GLOBAL(_restgpr_25)
150
_GLOBAL(_rest32gpr_25)
151
lwz 25,-28(11)
152
_GLOBAL(_restgpr_26)
153
_GLOBAL(_rest32gpr_26)
154
lwz 26,-24(11)
155
_GLOBAL(_restgpr_27)
156
_GLOBAL(_rest32gpr_27)
157
lwz 27,-20(11)
158
_GLOBAL(_restgpr_28)
159
_GLOBAL(_rest32gpr_28)
160
lwz 28,-16(11)
161
_GLOBAL(_restgpr_29)
162
_GLOBAL(_rest32gpr_29)
163
lwz 29,-12(11)
164
_GLOBAL(_restgpr_30)
165
_GLOBAL(_rest32gpr_30)
166
lwz 30,-8(11)
167
_GLOBAL(_restgpr_31)
168
_GLOBAL(_rest32gpr_31)
169
lwz 31,-4(11)
170
blr
171
172
/* Routines for restoring integer registers, called by the compiler. */
173
/* Called with r11 pointing to the stack header word of the caller of the */
174
/* function, just beyond the end of the integer restore area. */
175
176
_GLOBAL(_restgpr_14_x)
177
_GLOBAL(_rest32gpr_14_x)
178
lwz 14,-72(11) /* restore gp registers */
179
_GLOBAL(_restgpr_15_x)
180
_GLOBAL(_rest32gpr_15_x)
181
lwz 15,-68(11)
182
_GLOBAL(_restgpr_16_x)
183
_GLOBAL(_rest32gpr_16_x)
184
lwz 16,-64(11)
185
_GLOBAL(_restgpr_17_x)
186
_GLOBAL(_rest32gpr_17_x)
187
lwz 17,-60(11)
188
_GLOBAL(_restgpr_18_x)
189
_GLOBAL(_rest32gpr_18_x)
190
lwz 18,-56(11)
191
_GLOBAL(_restgpr_19_x)
192
_GLOBAL(_rest32gpr_19_x)
193
lwz 19,-52(11)
194
_GLOBAL(_restgpr_20_x)
195
_GLOBAL(_rest32gpr_20_x)
196
lwz 20,-48(11)
197
_GLOBAL(_restgpr_21_x)
198
_GLOBAL(_rest32gpr_21_x)
199
lwz 21,-44(11)
200
_GLOBAL(_restgpr_22_x)
201
_GLOBAL(_rest32gpr_22_x)
202
lwz 22,-40(11)
203
_GLOBAL(_restgpr_23_x)
204
_GLOBAL(_rest32gpr_23_x)
205
lwz 23,-36(11)
206
_GLOBAL(_restgpr_24_x)
207
_GLOBAL(_rest32gpr_24_x)
208
lwz 24,-32(11)
209
_GLOBAL(_restgpr_25_x)
210
_GLOBAL(_rest32gpr_25_x)
211
lwz 25,-28(11)
212
_GLOBAL(_restgpr_26_x)
213
_GLOBAL(_rest32gpr_26_x)
214
lwz 26,-24(11)
215
_GLOBAL(_restgpr_27_x)
216
_GLOBAL(_rest32gpr_27_x)
217
lwz 27,-20(11)
218
_GLOBAL(_restgpr_28_x)
219
_GLOBAL(_rest32gpr_28_x)
220
lwz 28,-16(11)
221
_GLOBAL(_restgpr_29_x)
222
_GLOBAL(_rest32gpr_29_x)
223
lwz 29,-12(11)
224
_GLOBAL(_restgpr_30_x)
225
_GLOBAL(_rest32gpr_30_x)
226
lwz 30,-8(11)
227
_GLOBAL(_restgpr_31_x)
228
_GLOBAL(_rest32gpr_31_x)
229
lwz 0,4(11)
230
lwz 31,-4(11)
231
mtlr 0
232
mr 1,11
233
blr
234
235