* config/rs6000/eabi.asm: Define 64-bit versions of FPR
[official-gcc.git] / gcc / config / rs6000 / eabi.asm
blob7ca745846492dec298bb2e15b8f094a172578303
1 /*
2 * Special support for eabi and SVR4
4 * Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc.
5 * Written By Michael Meissner
6 * 64-bit support written by David Edelsohn
7 *
8 * This file is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2, or (at your option) any
11 * later version.
13 * In addition to the permissions in the GNU General Public License, the
14 * Free Software Foundation gives you unlimited permission to link the
15 * compiled version of this file with other programs, and to distribute
16 * those programs without any restriction coming from the use of this
17 * file. (The General Public License restrictions do apply in other
18 * respects; for example, they cover modification of the file, and
19 * distribution when not linked into another program.)
21 * This file is distributed in the hope that it will be useful, but
22 * WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 * General Public License for more details.
26 * You should have received a copy of the GNU General Public License
27 * along with this program; see the file COPYING. If not, write to
28 * the Free Software Foundation, 59 Temple Place - Suite 330,
29 * Boston, MA 02111-1307, USA.
31 * As a special exception, if you link this library with files
32 * compiled with GCC to produce an executable, this does not cause
33 * the resulting executable to be covered by the GNU General Public License.
34 * This exception does not however invalidate any other reasons why
35 * the executable file might be covered by the GNU General Public License.
36 */
38 /* Do any initializations needed for the eabi environment */
40 .file "eabi.asm"
41 .section ".text"
42 #include "ppc-asm.h"
44 #ifndef __powerpc64__
46 .section ".got2","aw"
47 .align 2
48 .LCTOC1 = . /* +32768 */
50 /* Table of addresses */
51 .Ltable = .-.LCTOC1
52 .long .LCTOC1 /* address we are really at */
54 .Lsda = .-.LCTOC1
55 .long _SDA_BASE_ /* address of the first small data area */
57 .Lsdas = .-.LCTOC1
58 .long __SDATA_START__ /* start of .sdata/.sbss section */
60 .Lsdae = .-.LCTOC1
61 .long __SBSS_END__ /* end of .sdata/.sbss section */
63 .Lsda2 = .-.LCTOC1
64 .long _SDA2_BASE_ /* address of the second small data area */
66 .Lsda2s = .-.LCTOC1
67 .long __SDATA2_START__ /* start of .sdata2/.sbss2 section */
69 .Lsda2e = .-.LCTOC1
70 .long __SBSS2_END__ /* end of .sdata2/.sbss2 section */
72 #ifdef _RELOCATABLE
73 .Lgots = .-.LCTOC1
74 .long __GOT_START__ /* Global offset table start */
76 .Lgotm1 = .-.LCTOC1
77 .long _GLOBAL_OFFSET_TABLE_-4 /* end of GOT ptrs before BLCL + 3 reserved words */
79 .Lgotm2 = .-.LCTOC1
80 .long _GLOBAL_OFFSET_TABLE_+12 /* start of GOT ptrs after BLCL + 3 reserved words */
82 .Lgote = .-.LCTOC1
83 .long __GOT_END__ /* Global offset table end */
85 .Lgot2s = .-.LCTOC1
86 .long __GOT2_START__ /* -mrelocatable GOT pointers start */
88 .Lgot2e = .-.LCTOC1
89 .long __GOT2_END__ /* -mrelocatable GOT pointers end */
91 .Lfixups = .-.LCTOC1
92 .long __FIXUP_START__ /* start of .fixup section */
94 .Lfixupe = .-.LCTOC1
95 .long __FIXUP_END__ /* end of .fixup section */
97 .Lctors = .-.LCTOC1
98 .long __CTOR_LIST__ /* start of .ctor section */
100 .Lctore = .-.LCTOC1
101 .long __CTOR_END__ /* end of .ctor section */
103 .Ldtors = .-.LCTOC1
104 .long __DTOR_LIST__ /* start of .dtor section */
106 .Ldtore = .-.LCTOC1
107 .long __DTOR_END__ /* end of .dtor section */
109 .Lexcepts = .-.LCTOC1
110 .long __EXCEPT_START__ /* start of .gcc_except_table section */
112 .Lexcepte = .-.LCTOC1
113 .long __EXCEPT_END__ /* end of .gcc_except_table section */
115 .Linit = .-.LCTOC1
116 .long .Linit_p /* address of variable to say we've been called */
118 .text
119 .align 2
120 .Lptr:
121 .long .LCTOC1-.Laddr /* PC relative pointer to .got2 */
122 #endif
124 .data
125 .align 2
126 .Linit_p:
127 .long 0
129 .text
131 FUNC_START(__eabi)
133 /* Eliminate -mrelocatable code if not -mrelocatable, so that this file can
134 be assembled with other assemblers than GAS, such as the Solaris PowerPC
135 assembler. */
137 #ifndef _RELOCATABLE
138 addis 10,0,.Linit_p@ha /* init flag */
139 addis 11,0,.LCTOC1@ha /* load address of .LCTOC1 */
140 lwz 9,.Linit_p@l(10) /* init flag */
141 addi 11,11,.LCTOC1@l
142 cmplwi 2,9,0 /* init flag != 0? */
143 bnelr 2 /* return now, if we've been called already */
144 stw 1,.Linit_p@l(10) /* store a non-zero value in the done flag */
146 #else /* -mrelocatable */
147 mflr 0
148 bl .Laddr /* get current address */
149 .Laddr:
150 mflr 12 /* real address of .Laddr */
151 lwz 11,(.Lptr-.Laddr)(12) /* linker generated address of .LCTOC1 */
152 add 11,11,12 /* correct to real pointer */
153 lwz 12,.Ltable(11) /* get linker's idea of where .Laddr is */
154 lwz 10,.Linit(11) /* address of init flag */
155 subf. 12,12,11 /* calculate difference */
156 lwzx 9,10,12 /* done flag */
157 cmplwi 2,9,0 /* init flag != 0? */
158 mtlr 0 /* restore in case branch was taken */
159 bnelr 2 /* return now, if we've been called already */
160 stwx 1,10,12 /* store a non-zero value in the done flag */
161 beq+ 0,.Lsdata /* skip if we don't need to relocate */
163 /* We need to relocate the .got2 pointers. */
165 lwz 3,.Lgot2s(11) /* GOT2 pointers start */
166 lwz 4,.Lgot2e(11) /* GOT2 pointers end */
167 add 3,12,3 /* adjust pointers */
168 add 4,12,4
169 bl FUNC_NAME(__eabi_convert) /* convert pointers in .got2 section */
171 /* Fixup the .ctor section for static constructors */
173 lwz 3,.Lctors(11) /* constructors pointers start */
174 lwz 4,.Lctore(11) /* constructors pointers end */
175 bl FUNC_NAME(__eabi_convert) /* convert constructors */
177 /* Fixup the .dtor section for static destructors */
179 lwz 3,.Ldtors(11) /* destructors pointers start */
180 lwz 4,.Ldtore(11) /* destructors pointers end */
181 bl FUNC_NAME(__eabi_convert) /* convert destructors */
183 /* Fixup the .gcc_except_table section for G++ exceptions */
185 lwz 3,.Lexcepts(11) /* exception table pointers start */
186 lwz 4,.Lexcepte(11) /* exception table pointers end */
187 bl FUNC_NAME(__eabi_convert) /* convert exceptions */
189 /* Fixup the addresses in the GOT below _GLOBAL_OFFSET_TABLE_-4 */
191 lwz 3,.Lgots(11) /* GOT table pointers start */
192 lwz 4,.Lgotm1(11) /* GOT table pointers below _GLOBAL_OFFSET_TABLE-4 */
193 bl FUNC_NAME(__eabi_convert) /* convert lower GOT */
195 /* Fixup the addresses in the GOT above _GLOBAL_OFFSET_TABLE_+12 */
197 lwz 3,.Lgotm2(11) /* GOT table pointers above _GLOBAL_OFFSET_TABLE+12 */
198 lwz 4,.Lgote(11) /* GOT table pointers end */
199 bl FUNC_NAME(__eabi_convert) /* convert lower GOT */
201 /* Fixup any user initialized pointers now (the compiler drops pointers to */
202 /* each of the relocs that it does in the .fixup section). */
204 .Lfix:
205 lwz 3,.Lfixups(11) /* fixup pointers start */
206 lwz 4,.Lfixupe(11) /* fixup pointers end */
207 bl FUNC_NAME(__eabi_uconvert) /* convert user initialized pointers */
209 .Lsdata:
210 mtlr 0 /* restore link register */
211 #endif /* _RELOCATABLE */
213 /* Only load up register 13 if there is a .sdata and/or .sbss section */
214 lwz 3,.Lsdas(11) /* start of .sdata/.sbss section */
215 lwz 4,.Lsdae(11) /* end of .sdata/.sbss section */
216 cmpw 1,3,4 /* .sdata/.sbss section non-empty? */
217 beq- 1,.Lsda2l /* skip loading r13 */
219 lwz 13,.Lsda(11) /* load r13 with _SDA_BASE_ address */
221 /* Only load up register 2 if there is a .sdata2 and/or .sbss2 section */
223 .Lsda2l:
224 lwz 3,.Lsda2s(11) /* start of .sdata/.sbss section */
225 lwz 4,.Lsda2e(11) /* end of .sdata/.sbss section */
226 cmpw 1,3,4 /* .sdata/.sbss section non-empty? */
227 beq+ 1,.Ldone /* skip loading r2 */
229 lwz 2,.Lsda2(11) /* load r2 with _SDA2_BASE_ address */
231 /* Done adjusting pointers, return by way of doing the C++ global constructors. */
233 .Ldone:
234 b FUNC_NAME(__init) /* do any C++ global constructors (which returns to caller) */
235 FUNC_END(__eabi)
237 /* Special subroutine to convert a bunch of pointers directly.
238 r0 has original link register
239 r3 has low pointer to convert
240 r4 has high pointer to convert
241 r5 .. r10 are scratch registers
242 r11 has the address of .LCTOC1 in it.
243 r12 has the value to add to each pointer
244 r13 .. r31 are unchanged */
246 FUNC_START(__eabi_convert)
247 cmplw 1,3,4 /* any pointers to convert? */
248 subf 5,3,4 /* calculate number of words to convert */
249 bclr 4,4 /* return if no pointers */
251 srawi 5,5,2
252 addi 3,3,-4 /* start-4 for use with lwzu */
253 mtctr 5
255 .Lcvt:
256 lwzu 6,4(3) /* pointer to convert */
257 cmpi 0,6,0
258 beq- .Lcvt2 /* if pointer is null, don't convert */
260 add 6,6,12 /* convert pointer */
261 stw 6,0(3)
262 .Lcvt2:
263 bdnz+ .Lcvt
266 FUNC_END(__eabi_convert)
268 /* Special subroutine to convert the pointers the user has initialized. The
269 compiler has placed the address of the initialized pointer into the .fixup
270 section.
272 r0 has original link register
273 r3 has low pointer to convert
274 r4 has high pointer to convert
275 r5 .. r10 are scratch registers
276 r11 has the address of .LCTOC1 in it.
277 r12 has the value to add to each pointer
278 r13 .. r31 are unchanged */
280 FUNC_START(__eabi_uconvert)
281 cmplw 1,3,4 /* any pointers to convert? */
282 subf 5,3,4 /* calculate number of words to convert */
283 bclr 4,4 /* return if no pointers */
285 srawi 5,5,2
286 addi 3,3,-4 /* start-4 for use with lwzu */
287 mtctr 5
289 .Lucvt:
290 lwzu 6,4(3) /* next pointer to pointer to convert */
291 add 6,6,12 /* adjust pointer */
292 lwz 7,0(6) /* get the pointer it points to */
293 stw 6,0(3) /* store adjusted pointer */
294 add 7,7,12 /* adjust */
295 stw 7,0(6)
296 bdnz+ .Lucvt
299 FUNC_END(__eabi_uconvert)
301 /* Routines for saving floating point registers, called by the compiler. */
302 /* Called with r11 pointing to the stack header word of the caller of the */
303 /* function, just beyond the end of the floating point save area. */
305 FUNC_START(_savefpr_14) stfd 14,-144(11) /* save fp registers */
306 FUNC_START(_savefpr_15) stfd 15,-136(11)
307 FUNC_START(_savefpr_16) stfd 16,-128(11)
308 FUNC_START(_savefpr_17) stfd 17,-120(11)
309 FUNC_START(_savefpr_18) stfd 18,-112(11)
310 FUNC_START(_savefpr_19) stfd 19,-104(11)
311 FUNC_START(_savefpr_20) stfd 20,-96(11)
312 FUNC_START(_savefpr_21) stfd 21,-88(11)
313 FUNC_START(_savefpr_22) stfd 22,-80(11)
314 FUNC_START(_savefpr_23) stfd 23,-72(11)
315 FUNC_START(_savefpr_24) stfd 24,-64(11)
316 FUNC_START(_savefpr_25) stfd 25,-56(11)
317 FUNC_START(_savefpr_26) stfd 26,-48(11)
318 FUNC_START(_savefpr_27) stfd 27,-40(11)
319 FUNC_START(_savefpr_28) stfd 28,-32(11)
320 FUNC_START(_savefpr_29) stfd 29,-24(11)
321 FUNC_START(_savefpr_30) stfd 30,-16(11)
322 FUNC_START(_savefpr_31) stfd 31,-8(11)
324 FUNC_END(_savefpr_31)
325 FUNC_END(_savefpr_30)
326 FUNC_END(_savefpr_29)
327 FUNC_END(_savefpr_28)
328 FUNC_END(_savefpr_27)
329 FUNC_END(_savefpr_26)
330 FUNC_END(_savefpr_25)
331 FUNC_END(_savefpr_24)
332 FUNC_END(_savefpr_23)
333 FUNC_END(_savefpr_22)
334 FUNC_END(_savefpr_21)
335 FUNC_END(_savefpr_20)
336 FUNC_END(_savefpr_19)
337 FUNC_END(_savefpr_18)
338 FUNC_END(_savefpr_17)
339 FUNC_END(_savefpr_16)
340 FUNC_END(_savefpr_15)
341 FUNC_END(_savefpr_14)
343 /* Routines for saving integer registers, called by the compiler. */
344 /* Called with r11 pointing to the stack header word of the caller of the */
345 /* function, just beyond the end of the integer save area. */
347 FUNC_START(_savegpr_14) stw 14,-72(11) /* save gp registers */
348 FUNC_START(_savegpr_15) stw 15,-68(11)
349 FUNC_START(_savegpr_16) stw 16,-64(11)
350 FUNC_START(_savegpr_17) stw 17,-60(11)
351 FUNC_START(_savegpr_18) stw 18,-56(11)
352 FUNC_START(_savegpr_19) stw 19,-52(11)
353 FUNC_START(_savegpr_20) stw 20,-48(11)
354 FUNC_START(_savegpr_21) stw 21,-44(11)
355 FUNC_START(_savegpr_22) stw 22,-40(11)
356 FUNC_START(_savegpr_23) stw 23,-36(11)
357 FUNC_START(_savegpr_24) stw 24,-32(11)
358 FUNC_START(_savegpr_25) stw 25,-28(11)
359 FUNC_START(_savegpr_26) stw 26,-24(11)
360 FUNC_START(_savegpr_27) stw 27,-20(11)
361 FUNC_START(_savegpr_28) stw 28,-16(11)
362 FUNC_START(_savegpr_29) stw 29,-12(11)
363 FUNC_START(_savegpr_30) stw 30,-8(11)
364 FUNC_START(_savegpr_31) stw 31,-4(11)
366 FUNC_END(_savegpr_31)
367 FUNC_END(_savegpr_30)
368 FUNC_END(_savegpr_29)
369 FUNC_END(_savegpr_28)
370 FUNC_END(_savegpr_27)
371 FUNC_END(_savegpr_26)
372 FUNC_END(_savegpr_25)
373 FUNC_END(_savegpr_24)
374 FUNC_END(_savegpr_23)
375 FUNC_END(_savegpr_22)
376 FUNC_END(_savegpr_21)
377 FUNC_END(_savegpr_20)
378 FUNC_END(_savegpr_19)
379 FUNC_END(_savegpr_18)
380 FUNC_END(_savegpr_17)
381 FUNC_END(_savegpr_16)
382 FUNC_END(_savegpr_15)
383 FUNC_END(_savegpr_14)
385 /* Routines for restoring floating point registers, called by the compiler. */
386 /* Called with r11 pointing to the stack header word of the caller of the */
387 /* function, just beyond the end of the floating point save area. */
389 FUNC_START(_restfpr_14) lfd 14,-144(11) /* restore fp registers */
390 FUNC_START(_restfpr_15) lfd 15,-136(11)
391 FUNC_START(_restfpr_16) lfd 16,-128(11)
392 FUNC_START(_restfpr_17) lfd 17,-120(11)
393 FUNC_START(_restfpr_18) lfd 18,-112(11)
394 FUNC_START(_restfpr_19) lfd 19,-104(11)
395 FUNC_START(_restfpr_20) lfd 20,-96(11)
396 FUNC_START(_restfpr_21) lfd 21,-88(11)
397 FUNC_START(_restfpr_22) lfd 22,-80(11)
398 FUNC_START(_restfpr_23) lfd 23,-72(11)
399 FUNC_START(_restfpr_24) lfd 24,-64(11)
400 FUNC_START(_restfpr_25) lfd 25,-56(11)
401 FUNC_START(_restfpr_26) lfd 26,-48(11)
402 FUNC_START(_restfpr_27) lfd 27,-40(11)
403 FUNC_START(_restfpr_28) lfd 28,-32(11)
404 FUNC_START(_restfpr_29) lfd 29,-24(11)
405 FUNC_START(_restfpr_30) lfd 30,-16(11)
406 FUNC_START(_restfpr_31) lfd 31,-8(11)
408 FUNC_END(_restfpr_31)
409 FUNC_END(_restfpr_30)
410 FUNC_END(_restfpr_29)
411 FUNC_END(_restfpr_28)
412 FUNC_END(_restfpr_27)
413 FUNC_END(_restfpr_26)
414 FUNC_END(_restfpr_25)
415 FUNC_END(_restfpr_24)
416 FUNC_END(_restfpr_23)
417 FUNC_END(_restfpr_22)
418 FUNC_END(_restfpr_21)
419 FUNC_END(_restfpr_20)
420 FUNC_END(_restfpr_19)
421 FUNC_END(_restfpr_18)
422 FUNC_END(_restfpr_17)
423 FUNC_END(_restfpr_16)
424 FUNC_END(_restfpr_15)
425 FUNC_END(_restfpr_14)
427 /* Routines for restoring integer registers, called by the compiler. */
428 /* Called with r11 pointing to the stack header word of the caller of the */
429 /* function, just beyond the end of the integer restore area. */
431 FUNC_START(_restgpr_14) lwz 14,-72(11) /* restore gp registers */
432 FUNC_START(_restgpr_15) lwz 15,-68(11)
433 FUNC_START(_restgpr_16) lwz 16,-64(11)
434 FUNC_START(_restgpr_17) lwz 17,-60(11)
435 FUNC_START(_restgpr_18) lwz 18,-56(11)
436 FUNC_START(_restgpr_19) lwz 19,-52(11)
437 FUNC_START(_restgpr_20) lwz 20,-48(11)
438 FUNC_START(_restgpr_21) lwz 21,-44(11)
439 FUNC_START(_restgpr_22) lwz 22,-40(11)
440 FUNC_START(_restgpr_23) lwz 23,-36(11)
441 FUNC_START(_restgpr_24) lwz 24,-32(11)
442 FUNC_START(_restgpr_25) lwz 25,-28(11)
443 FUNC_START(_restgpr_26) lwz 26,-24(11)
444 FUNC_START(_restgpr_27) lwz 27,-20(11)
445 FUNC_START(_restgpr_28) lwz 28,-16(11)
446 FUNC_START(_restgpr_29) lwz 29,-12(11)
447 FUNC_START(_restgpr_30) lwz 30,-8(11)
448 FUNC_START(_restgpr_31) lwz 31,-4(11)
450 FUNC_END(_restgpr_31)
451 FUNC_END(_restgpr_30)
452 FUNC_END(_restgpr_29)
453 FUNC_END(_restgpr_28)
454 FUNC_END(_restgpr_27)
455 FUNC_END(_restgpr_26)
456 FUNC_END(_restgpr_25)
457 FUNC_END(_restgpr_24)
458 FUNC_END(_restgpr_23)
459 FUNC_END(_restgpr_22)
460 FUNC_END(_restgpr_21)
461 FUNC_END(_restgpr_20)
462 FUNC_END(_restgpr_19)
463 FUNC_END(_restgpr_18)
464 FUNC_END(_restgpr_17)
465 FUNC_END(_restgpr_16)
466 FUNC_END(_restgpr_15)
467 FUNC_END(_restgpr_14)
469 /* Routines for restoring floating point registers, called by the compiler. */
470 /* Called with r11 pointing to the stack header word of the caller of the */
471 /* function, just beyond the end of the floating point save area. */
472 /* In addition to restoring the fp registers, it will return to the caller's */
473 /* caller */
475 FUNC_START(_restfpr_14_x) lfd 14,-144(11) /* restore fp registers */
476 FUNC_START(_restfpr_15_x) lfd 15,-136(11)
477 FUNC_START(_restfpr_16_x) lfd 16,-128(11)
478 FUNC_START(_restfpr_17_x) lfd 17,-120(11)
479 FUNC_START(_restfpr_18_x) lfd 18,-112(11)
480 FUNC_START(_restfpr_19_x) lfd 19,-104(11)
481 FUNC_START(_restfpr_20_x) lfd 20,-96(11)
482 FUNC_START(_restfpr_21_x) lfd 21,-88(11)
483 FUNC_START(_restfpr_22_x) lfd 22,-80(11)
484 FUNC_START(_restfpr_23_x) lfd 23,-72(11)
485 FUNC_START(_restfpr_24_x) lfd 24,-64(11)
486 FUNC_START(_restfpr_25_x) lfd 25,-56(11)
487 FUNC_START(_restfpr_26_x) lfd 26,-48(11)
488 FUNC_START(_restfpr_27_x) lfd 27,-40(11)
489 FUNC_START(_restfpr_28_x) lfd 28,-32(11)
490 FUNC_START(_restfpr_29_x) lfd 29,-24(11)
491 FUNC_START(_restfpr_30_x) lfd 30,-16(11)
492 FUNC_START(_restfpr_31_x) lwz 0,4(11)
493 lfd 31,-8(11)
494 mtlr 0
495 mr 1,11
497 FUNC_END(_restfpr_31_x)
498 FUNC_END(_restfpr_30_x)
499 FUNC_END(_restfpr_29_x)
500 FUNC_END(_restfpr_28_x)
501 FUNC_END(_restfpr_27_x)
502 FUNC_END(_restfpr_26_x)
503 FUNC_END(_restfpr_25_x)
504 FUNC_END(_restfpr_24_x)
505 FUNC_END(_restfpr_23_x)
506 FUNC_END(_restfpr_22_x)
507 FUNC_END(_restfpr_21_x)
508 FUNC_END(_restfpr_20_x)
509 FUNC_END(_restfpr_19_x)
510 FUNC_END(_restfpr_18_x)
511 FUNC_END(_restfpr_17_x)
512 FUNC_END(_restfpr_16_x)
513 FUNC_END(_restfpr_15_x)
514 FUNC_END(_restfpr_14_x)
516 /* Routines for restoring integer registers, called by the compiler. */
517 /* Called with r11 pointing to the stack header word of the caller of the */
518 /* function, just beyond the end of the integer restore area. */
520 FUNC_START(_restgpr_14_x) lwz 14,-72(11) /* restore gp registers */
521 FUNC_START(_restgpr_15_x) lwz 15,-68(11)
522 FUNC_START(_restgpr_16_x) lwz 16,-64(11)
523 FUNC_START(_restgpr_17_x) lwz 17,-60(11)
524 FUNC_START(_restgpr_18_x) lwz 18,-56(11)
525 FUNC_START(_restgpr_19_x) lwz 19,-52(11)
526 FUNC_START(_restgpr_20_x) lwz 20,-48(11)
527 FUNC_START(_restgpr_21_x) lwz 21,-44(11)
528 FUNC_START(_restgpr_22_x) lwz 22,-40(11)
529 FUNC_START(_restgpr_23_x) lwz 23,-36(11)
530 FUNC_START(_restgpr_24_x) lwz 24,-32(11)
531 FUNC_START(_restgpr_25_x) lwz 25,-28(11)
532 FUNC_START(_restgpr_26_x) lwz 26,-24(11)
533 FUNC_START(_restgpr_27_x) lwz 27,-20(11)
534 FUNC_START(_restgpr_28_x) lwz 28,-16(11)
535 FUNC_START(_restgpr_29_x) lwz 29,-12(11)
536 FUNC_START(_restgpr_30_x) lwz 30,-8(11)
537 FUNC_START(_restgpr_31_x) lwz 0,4(11)
538 lwz 31,-4(11)
539 mtlr 0
540 mr 1,11
542 FUNC_END(_restgpr_31_x)
543 FUNC_END(_restgpr_30_x)
544 FUNC_END(_restgpr_29_x)
545 FUNC_END(_restgpr_28_x)
546 FUNC_END(_restgpr_27_x)
547 FUNC_END(_restgpr_26_x)
548 FUNC_END(_restgpr_25_x)
549 FUNC_END(_restgpr_24_x)
550 FUNC_END(_restgpr_23_x)
551 FUNC_END(_restgpr_22_x)
552 FUNC_END(_restgpr_21_x)
553 FUNC_END(_restgpr_20_x)
554 FUNC_END(_restgpr_19_x)
555 FUNC_END(_restgpr_18_x)
556 FUNC_END(_restgpr_17_x)
557 FUNC_END(_restgpr_16_x)
558 FUNC_END(_restgpr_15_x)
559 FUNC_END(_restgpr_14_x)
561 #else /* __powerpc64__ */
563 .section ".text"
564 .align 2
566 /* Routines for saving floating point registers, called by the compiler. */
568 .fsav:
569 FUNC_START(_savef14) stfd 14,-144(1) /* save fp registers */
570 FUNC_START(_savef15) stfd 15,-136(1)
571 FUNC_START(_savef16) stfd 16,-128(1)
572 FUNC_START(_savef17) stfd 17,-120(1)
573 FUNC_START(_savef18) stfd 18,-112(1)
574 FUNC_START(_savef19) stfd 19,-104(1)
575 FUNC_START(_savef20) stfd 20,-96(1)
576 FUNC_START(_savef21) stfd 21,-88(1)
577 FUNC_START(_savef22) stfd 22,-80(1)
578 FUNC_START(_savef23) stfd 23,-72(1)
579 FUNC_START(_savef24) stfd 24,-64(1)
580 FUNC_START(_savef25) stfd 25,-56(1)
581 FUNC_START(_savef26) stfd 26,-48(1)
582 FUNC_START(_savef27) stfd 27,-40(1)
583 FUNC_START(_savef28) stfd 28,-32(1)
584 FUNC_START(_savef29) stfd 29,-24(1)
585 FUNC_START(_savef30) stfd 30,-16(1)
586 FUNC_START(_savef31) stfd 31,-8(1)
588 .LTfsav:
589 .long 0
590 .byte 0,12,0,0,0,0,0,0
591 .long 0
592 .long .LTfsav-.fsav
593 .short 4
594 .ascii "fsav"
595 FUNC_END(_savef31)
596 FUNC_END(_savef30)
597 FUNC_END(_savef29)
598 FUNC_END(_savef28)
599 FUNC_END(_savef27)
600 FUNC_END(_savef26)
601 FUNC_END(_savef25)
602 FUNC_END(_savef24)
603 FUNC_END(_savef23)
604 FUNC_END(_savef22)
605 FUNC_END(_savef21)
606 FUNC_END(_savef20)
607 FUNC_END(_savef19)
608 FUNC_END(_savef18)
609 FUNC_END(_savef17)
610 FUNC_END(_savef16)
611 FUNC_END(_savef15)
612 FUNC_END(_savef14)
614 /* Routines for restoring floating point registers, called by the compiler. */
616 .fres:
617 FUNC_START(_restf14) lfd 14,-144(1) /* restore fp registers */
618 FUNC_START(_restf15) lfd 15,-136(1)
619 FUNC_START(_restf16) lfd 16,-128(1)
620 FUNC_START(_restf17) lfd 17,-120(1)
621 FUNC_START(_restf18) lfd 18,-112(1)
622 FUNC_START(_restf19) lfd 19,-104(1)
623 FUNC_START(_restf20) lfd 20,-96(1)
624 FUNC_START(_restf21) lfd 21,-88(1)
625 FUNC_START(_restf22) lfd 22,-80(1)
626 FUNC_START(_restf23) lfd 23,-72(1)
627 FUNC_START(_restf24) lfd 24,-64(1)
628 FUNC_START(_restf25) lfd 25,-56(1)
629 FUNC_START(_restf26) lfd 26,-48(1)
630 FUNC_START(_restf27) lfd 27,-40(1)
631 FUNC_START(_restf28) lfd 28,-32(1)
632 FUNC_START(_restf29) lfd 29,-24(1)
633 FUNC_START(_restf30) lfd 30,-16(1)
634 FUNC_START(_restf31) lfd 31,-8(1)
636 .LTfres:
637 .long 0
638 .byte 0,12,0,0,0,0,0,0
639 .long 0
640 .long .LTfres-.fres
641 .short 4
642 .ascii "fres"
643 FUNC_END(_restf31)
644 FUNC_END(_restf30)
645 FUNC_END(_restf29)
646 FUNC_END(_restf28)
647 FUNC_END(_restf27)
648 FUNC_END(_restf26)
649 FUNC_END(_restf25)
650 FUNC_END(_restf24)
651 FUNC_END(_restf23)
652 FUNC_END(_restf22)
653 FUNC_END(_restf21)
654 FUNC_END(_restf20)
655 FUNC_END(_restf19)
656 FUNC_END(_restf18)
657 FUNC_END(_restf17)
658 FUNC_END(_restf16)
659 FUNC_END(_restf15)
660 FUNC_END(_restf14)
662 #endif