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