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
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
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.
38 /* Do any initializations needed for the eabi environment
*/
48 .LCTOC1
= .
/* +32768 */
50 /* Table of addresses
*/
52 .long .LCTOC1
/* address we are really at
*/
55 .long _SDA_BASE_
/* address of the first
small data area
*/
58 .long __SDATA_START__
/* start of .sdata
/.sbss
section */
61 .long __SBSS_END__
/* end of .sdata
/.sbss
section */
64 .long _SDA2_BASE_
/* address of the second
small data area
*/
67 .long __SDATA2_START__
/* start of .sdata2
/.sbss2
section */
70 .long __SBSS2_END__
/* end of .sdata2
/.sbss2
section */
74 .long __GOT_START__
/* Global offset table start
*/
77 .long _GLOBAL_OFFSET_TABLE_
-4 /* end of GOT ptrs before BLCL
+ 3 reserved words
*/
80 .long _GLOBAL_OFFSET_TABLE_
+12 /* start of GOT ptrs after BLCL
+ 3 reserved words
*/
83 .long __GOT_END__
/* Global offset table
end */
86 .long __GOT2_START__
/* -mrelocatable GOT pointers start
*/
89 .long __GOT2_END__
/* -mrelocatable GOT pointers
end */
92 .long __FIXUP_START__
/* start of .fixup
section */
95 .long __FIXUP_END__
/* end of .fixup
section */
98 .long __CTOR_LIST__
/* start of .ctor
section */
101 .long __CTOR_END__
/* end of .ctor
section */
104 .long __DTOR_LIST__
/* start of .dtor
section */
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 */
116 .long .Linit_p
/* address of variable to say we
've been called */
121 .long .LCTOC1-.Laddr /* PC relative pointer to .got2 */
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
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 */
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
*/
148 bl .Laddr
/* get current address
*/
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 */
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). */
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 */
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 */
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. */
234 b FUNC_NAME(__init) /* do any C++ global constructors (which returns to caller) */
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 */
252 addi 3,3,-4 /* start-4 for use with lwzu */
256 lwzu 6,4(3) /* pointer to convert */
258 beq- .Lcvt2 /* if pointer is null, don't convert
*/
260 add 6,6,12 /* convert pointer
*/
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
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
*/
286 addi
3,3,-4 /* start
-4 for use with lwzu
*/
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
*/
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 */
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)
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)
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__ */
566 /* Routines for saving floating point registers, called by the compiler. */
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)
590 .byte 0,12,0,0,0,0,0,0
614 /* Routines for restoring floating point registers, called by the compiler. */
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)
638 .byte 0,12,0,0,0,0,0,0