crtsavres.asm revision 96263
1/* 2 * Special support for eabi and SVR4 3 * 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. 12 * 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.) 20 * 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. 25 * 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. 30 * 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 */ 37 38/* Do any initializations needed for the eabi environment */ 39 40 .file "crtsavres.asm" 41 .section ".text" 42 #include "ppc-asm.h" 43 44#ifndef __powerpc64__ 45 46/* Routines for saving floating point registers, called by the compiler. */ 47/* Called with r11 pointing to the stack header word of the caller of the */ 48/* function, just beyond the end of the floating point save area. */ 49 50FUNC_START(_savefpr_14) stfd 14,-144(11) /* save fp registers */ 51FUNC_START(_savefpr_15) stfd 15,-136(11) 52FUNC_START(_savefpr_16) stfd 16,-128(11) 53FUNC_START(_savefpr_17) stfd 17,-120(11) 54FUNC_START(_savefpr_18) stfd 18,-112(11) 55FUNC_START(_savefpr_19) stfd 19,-104(11) 56FUNC_START(_savefpr_20) stfd 20,-96(11) 57FUNC_START(_savefpr_21) stfd 21,-88(11) 58FUNC_START(_savefpr_22) stfd 22,-80(11) 59FUNC_START(_savefpr_23) stfd 23,-72(11) 60FUNC_START(_savefpr_24) stfd 24,-64(11) 61FUNC_START(_savefpr_25) stfd 25,-56(11) 62FUNC_START(_savefpr_26) stfd 26,-48(11) 63FUNC_START(_savefpr_27) stfd 27,-40(11) 64FUNC_START(_savefpr_28) stfd 28,-32(11) 65FUNC_START(_savefpr_29) stfd 29,-24(11) 66FUNC_START(_savefpr_30) stfd 30,-16(11) 67FUNC_START(_savefpr_31) stfd 31,-8(11) 68 blr 69FUNC_END(_savefpr_31) 70FUNC_END(_savefpr_30) 71FUNC_END(_savefpr_29) 72FUNC_END(_savefpr_28) 73FUNC_END(_savefpr_27) 74FUNC_END(_savefpr_26) 75FUNC_END(_savefpr_25) 76FUNC_END(_savefpr_24) 77FUNC_END(_savefpr_23) 78FUNC_END(_savefpr_22) 79FUNC_END(_savefpr_21) 80FUNC_END(_savefpr_20) 81FUNC_END(_savefpr_19) 82FUNC_END(_savefpr_18) 83FUNC_END(_savefpr_17) 84FUNC_END(_savefpr_16) 85FUNC_END(_savefpr_15) 86FUNC_END(_savefpr_14) 87 88/* Routines for saving integer registers, called by the compiler. */ 89/* Called with r11 pointing to the stack header word of the caller of the */ 90/* function, just beyond the end of the integer save area. */ 91 92FUNC_START(_savegpr_14) stw 14,-72(11) /* save gp registers */ 93FUNC_START(_savegpr_15) stw 15,-68(11) 94FUNC_START(_savegpr_16) stw 16,-64(11) 95FUNC_START(_savegpr_17) stw 17,-60(11) 96FUNC_START(_savegpr_18) stw 18,-56(11) 97FUNC_START(_savegpr_19) stw 19,-52(11) 98FUNC_START(_savegpr_20) stw 20,-48(11) 99FUNC_START(_savegpr_21) stw 21,-44(11) 100FUNC_START(_savegpr_22) stw 22,-40(11) 101FUNC_START(_savegpr_23) stw 23,-36(11) 102FUNC_START(_savegpr_24) stw 24,-32(11) 103FUNC_START(_savegpr_25) stw 25,-28(11) 104FUNC_START(_savegpr_26) stw 26,-24(11) 105FUNC_START(_savegpr_27) stw 27,-20(11) 106FUNC_START(_savegpr_28) stw 28,-16(11) 107FUNC_START(_savegpr_29) stw 29,-12(11) 108FUNC_START(_savegpr_30) stw 30,-8(11) 109FUNC_START(_savegpr_31) stw 31,-4(11) 110 blr 111FUNC_END(_savegpr_31) 112FUNC_END(_savegpr_30) 113FUNC_END(_savegpr_29) 114FUNC_END(_savegpr_28) 115FUNC_END(_savegpr_27) 116FUNC_END(_savegpr_26) 117FUNC_END(_savegpr_25) 118FUNC_END(_savegpr_24) 119FUNC_END(_savegpr_23) 120FUNC_END(_savegpr_22) 121FUNC_END(_savegpr_21) 122FUNC_END(_savegpr_20) 123FUNC_END(_savegpr_19) 124FUNC_END(_savegpr_18) 125FUNC_END(_savegpr_17) 126FUNC_END(_savegpr_16) 127FUNC_END(_savegpr_15) 128FUNC_END(_savegpr_14) 129 130/* Routines for restoring floating point registers, called by the compiler. */ 131/* Called with r11 pointing to the stack header word of the caller of the */ 132/* function, just beyond the end of the floating point save area. */ 133 134FUNC_START(_restfpr_14) lfd 14,-144(11) /* restore fp registers */ 135FUNC_START(_restfpr_15) lfd 15,-136(11) 136FUNC_START(_restfpr_16) lfd 16,-128(11) 137FUNC_START(_restfpr_17) lfd 17,-120(11) 138FUNC_START(_restfpr_18) lfd 18,-112(11) 139FUNC_START(_restfpr_19) lfd 19,-104(11) 140FUNC_START(_restfpr_20) lfd 20,-96(11) 141FUNC_START(_restfpr_21) lfd 21,-88(11) 142FUNC_START(_restfpr_22) lfd 22,-80(11) 143FUNC_START(_restfpr_23) lfd 23,-72(11) 144FUNC_START(_restfpr_24) lfd 24,-64(11) 145FUNC_START(_restfpr_25) lfd 25,-56(11) 146FUNC_START(_restfpr_26) lfd 26,-48(11) 147FUNC_START(_restfpr_27) lfd 27,-40(11) 148FUNC_START(_restfpr_28) lfd 28,-32(11) 149FUNC_START(_restfpr_29) lfd 29,-24(11) 150FUNC_START(_restfpr_30) lfd 30,-16(11) 151FUNC_START(_restfpr_31) lfd 31,-8(11) 152 blr 153FUNC_END(_restfpr_31) 154FUNC_END(_restfpr_30) 155FUNC_END(_restfpr_29) 156FUNC_END(_restfpr_28) 157FUNC_END(_restfpr_27) 158FUNC_END(_restfpr_26) 159FUNC_END(_restfpr_25) 160FUNC_END(_restfpr_24) 161FUNC_END(_restfpr_23) 162FUNC_END(_restfpr_22) 163FUNC_END(_restfpr_21) 164FUNC_END(_restfpr_20) 165FUNC_END(_restfpr_19) 166FUNC_END(_restfpr_18) 167FUNC_END(_restfpr_17) 168FUNC_END(_restfpr_16) 169FUNC_END(_restfpr_15) 170FUNC_END(_restfpr_14) 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 176FUNC_START(_restgpr_14) lwz 14,-72(11) /* restore gp registers */ 177FUNC_START(_restgpr_15) lwz 15,-68(11) 178FUNC_START(_restgpr_16) lwz 16,-64(11) 179FUNC_START(_restgpr_17) lwz 17,-60(11) 180FUNC_START(_restgpr_18) lwz 18,-56(11) 181FUNC_START(_restgpr_19) lwz 19,-52(11) 182FUNC_START(_restgpr_20) lwz 20,-48(11) 183FUNC_START(_restgpr_21) lwz 21,-44(11) 184FUNC_START(_restgpr_22) lwz 22,-40(11) 185FUNC_START(_restgpr_23) lwz 23,-36(11) 186FUNC_START(_restgpr_24) lwz 24,-32(11) 187FUNC_START(_restgpr_25) lwz 25,-28(11) 188FUNC_START(_restgpr_26) lwz 26,-24(11) 189FUNC_START(_restgpr_27) lwz 27,-20(11) 190FUNC_START(_restgpr_28) lwz 28,-16(11) 191FUNC_START(_restgpr_29) lwz 29,-12(11) 192FUNC_START(_restgpr_30) lwz 30,-8(11) 193FUNC_START(_restgpr_31) lwz 31,-4(11) 194 blr 195FUNC_END(_restgpr_31) 196FUNC_END(_restgpr_30) 197FUNC_END(_restgpr_29) 198FUNC_END(_restgpr_28) 199FUNC_END(_restgpr_27) 200FUNC_END(_restgpr_26) 201FUNC_END(_restgpr_25) 202FUNC_END(_restgpr_24) 203FUNC_END(_restgpr_23) 204FUNC_END(_restgpr_22) 205FUNC_END(_restgpr_21) 206FUNC_END(_restgpr_20) 207FUNC_END(_restgpr_19) 208FUNC_END(_restgpr_18) 209FUNC_END(_restgpr_17) 210FUNC_END(_restgpr_16) 211FUNC_END(_restgpr_15) 212FUNC_END(_restgpr_14) 213 214/* Routines for restoring floating point registers, called by the compiler. */ 215/* Called with r11 pointing to the stack header word of the caller of the */ 216/* function, just beyond the end of the floating point save area. */ 217/* In addition to restoring the fp registers, it will return to the caller's */ 218/* caller */ 219 220FUNC_START(_restfpr_14_x) lfd 14,-144(11) /* restore fp registers */ 221FUNC_START(_restfpr_15_x) lfd 15,-136(11) 222FUNC_START(_restfpr_16_x) lfd 16,-128(11) 223FUNC_START(_restfpr_17_x) lfd 17,-120(11) 224FUNC_START(_restfpr_18_x) lfd 18,-112(11) 225FUNC_START(_restfpr_19_x) lfd 19,-104(11) 226FUNC_START(_restfpr_20_x) lfd 20,-96(11) 227FUNC_START(_restfpr_21_x) lfd 21,-88(11) 228FUNC_START(_restfpr_22_x) lfd 22,-80(11) 229FUNC_START(_restfpr_23_x) lfd 23,-72(11) 230FUNC_START(_restfpr_24_x) lfd 24,-64(11) 231FUNC_START(_restfpr_25_x) lfd 25,-56(11) 232FUNC_START(_restfpr_26_x) lfd 26,-48(11) 233FUNC_START(_restfpr_27_x) lfd 27,-40(11) 234FUNC_START(_restfpr_28_x) lfd 28,-32(11) 235FUNC_START(_restfpr_29_x) lfd 29,-24(11) 236FUNC_START(_restfpr_30_x) lfd 30,-16(11) 237FUNC_START(_restfpr_31_x) lwz 0,4(11) 238 lfd 31,-8(11) 239 mtlr 0 240 mr 1,11 241 blr 242FUNC_END(_restfpr_31_x) 243FUNC_END(_restfpr_30_x) 244FUNC_END(_restfpr_29_x) 245FUNC_END(_restfpr_28_x) 246FUNC_END(_restfpr_27_x) 247FUNC_END(_restfpr_26_x) 248FUNC_END(_restfpr_25_x) 249FUNC_END(_restfpr_24_x) 250FUNC_END(_restfpr_23_x) 251FUNC_END(_restfpr_22_x) 252FUNC_END(_restfpr_21_x) 253FUNC_END(_restfpr_20_x) 254FUNC_END(_restfpr_19_x) 255FUNC_END(_restfpr_18_x) 256FUNC_END(_restfpr_17_x) 257FUNC_END(_restfpr_16_x) 258FUNC_END(_restfpr_15_x) 259FUNC_END(_restfpr_14_x) 260 261/* Routines for restoring integer registers, called by the compiler. */ 262/* Called with r11 pointing to the stack header word of the caller of the */ 263/* function, just beyond the end of the integer restore area. */ 264 265FUNC_START(_restgpr_14_x) lwz 14,-72(11) /* restore gp registers */ 266FUNC_START(_restgpr_15_x) lwz 15,-68(11) 267FUNC_START(_restgpr_16_x) lwz 16,-64(11) 268FUNC_START(_restgpr_17_x) lwz 17,-60(11) 269FUNC_START(_restgpr_18_x) lwz 18,-56(11) 270FUNC_START(_restgpr_19_x) lwz 19,-52(11) 271FUNC_START(_restgpr_20_x) lwz 20,-48(11) 272FUNC_START(_restgpr_21_x) lwz 21,-44(11) 273FUNC_START(_restgpr_22_x) lwz 22,-40(11) 274FUNC_START(_restgpr_23_x) lwz 23,-36(11) 275FUNC_START(_restgpr_24_x) lwz 24,-32(11) 276FUNC_START(_restgpr_25_x) lwz 25,-28(11) 277FUNC_START(_restgpr_26_x) lwz 26,-24(11) 278FUNC_START(_restgpr_27_x) lwz 27,-20(11) 279FUNC_START(_restgpr_28_x) lwz 28,-16(11) 280FUNC_START(_restgpr_29_x) lwz 29,-12(11) 281FUNC_START(_restgpr_30_x) lwz 30,-8(11) 282FUNC_START(_restgpr_31_x) lwz 0,4(11) 283 lwz 31,-4(11) 284 mtlr 0 285 mr 1,11 286 blr 287FUNC_END(_restgpr_31_x) 288FUNC_END(_restgpr_30_x) 289FUNC_END(_restgpr_29_x) 290FUNC_END(_restgpr_28_x) 291FUNC_END(_restgpr_27_x) 292FUNC_END(_restgpr_26_x) 293FUNC_END(_restgpr_25_x) 294FUNC_END(_restgpr_24_x) 295FUNC_END(_restgpr_23_x) 296FUNC_END(_restgpr_22_x) 297FUNC_END(_restgpr_21_x) 298FUNC_END(_restgpr_20_x) 299FUNC_END(_restgpr_19_x) 300FUNC_END(_restgpr_18_x) 301FUNC_END(_restgpr_17_x) 302FUNC_END(_restgpr_16_x) 303FUNC_END(_restgpr_15_x) 304FUNC_END(_restgpr_14_x) 305 306#else /* __powerpc64__ */ 307 308 .section ".text" 309 .align 2 310 311/* Routines for saving floating point registers, called by the compiler. */ 312 313.fsav: 314FUNC_START(_savef14) stfd 14,-144(1) /* save fp registers */ 315FUNC_START(_savef15) stfd 15,-136(1) 316FUNC_START(_savef16) stfd 16,-128(1) 317FUNC_START(_savef17) stfd 17,-120(1) 318FUNC_START(_savef18) stfd 18,-112(1) 319FUNC_START(_savef19) stfd 19,-104(1) 320FUNC_START(_savef20) stfd 20,-96(1) 321FUNC_START(_savef21) stfd 21,-88(1) 322FUNC_START(_savef22) stfd 22,-80(1) 323FUNC_START(_savef23) stfd 23,-72(1) 324FUNC_START(_savef24) stfd 24,-64(1) 325FUNC_START(_savef25) stfd 25,-56(1) 326FUNC_START(_savef26) stfd 26,-48(1) 327FUNC_START(_savef27) stfd 27,-40(1) 328FUNC_START(_savef28) stfd 28,-32(1) 329FUNC_START(_savef29) stfd 29,-24(1) 330FUNC_START(_savef30) stfd 30,-16(1) 331FUNC_START(_savef31) stfd 31,-8(1) 332 blr 333.LTfsav: 334 .long 0 335 .byte 0,12,0,0,0,0,0,0 336 .long 0 337 .long .LTfsav-.fsav 338 .short 4 339 .ascii "fsav" 340FUNC_END(_savef31) 341FUNC_END(_savef30) 342FUNC_END(_savef29) 343FUNC_END(_savef28) 344FUNC_END(_savef27) 345FUNC_END(_savef26) 346FUNC_END(_savef25) 347FUNC_END(_savef24) 348FUNC_END(_savef23) 349FUNC_END(_savef22) 350FUNC_END(_savef21) 351FUNC_END(_savef20) 352FUNC_END(_savef19) 353FUNC_END(_savef18) 354FUNC_END(_savef17) 355FUNC_END(_savef16) 356FUNC_END(_savef15) 357FUNC_END(_savef14) 358 359/* Routines for restoring floating point registers, called by the compiler. */ 360 361.fres: 362FUNC_START(_restf14) lfd 14,-144(1) /* restore fp registers */ 363FUNC_START(_restf15) lfd 15,-136(1) 364FUNC_START(_restf16) lfd 16,-128(1) 365FUNC_START(_restf17) lfd 17,-120(1) 366FUNC_START(_restf18) lfd 18,-112(1) 367FUNC_START(_restf19) lfd 19,-104(1) 368FUNC_START(_restf20) lfd 20,-96(1) 369FUNC_START(_restf21) lfd 21,-88(1) 370FUNC_START(_restf22) lfd 22,-80(1) 371FUNC_START(_restf23) lfd 23,-72(1) 372FUNC_START(_restf24) lfd 24,-64(1) 373FUNC_START(_restf25) lfd 25,-56(1) 374FUNC_START(_restf26) lfd 26,-48(1) 375FUNC_START(_restf27) lfd 27,-40(1) 376FUNC_START(_restf28) lfd 28,-32(1) 377FUNC_START(_restf29) lfd 29,-24(1) 378FUNC_START(_restf30) lfd 30,-16(1) 379FUNC_START(_restf31) lfd 31,-8(1) 380 blr 381.LTfres: 382 .long 0 383 .byte 0,12,0,0,0,0,0,0 384 .long 0 385 .long .LTfres-.fres 386 .short 4 387 .ascii "fres" 388FUNC_END(_restf31) 389FUNC_END(_restf30) 390FUNC_END(_restf29) 391FUNC_END(_restf28) 392FUNC_END(_restf27) 393FUNC_END(_restf26) 394FUNC_END(_restf25) 395FUNC_END(_restf24) 396FUNC_END(_restf23) 397FUNC_END(_restf22) 398FUNC_END(_restf21) 399FUNC_END(_restf20) 400FUNC_END(_restf19) 401FUNC_END(_restf18) 402FUNC_END(_restf17) 403FUNC_END(_restf16) 404FUNC_END(_restf15) 405FUNC_END(_restf14) 406 407#endif 408