crtsavres.asm revision 169689
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, 51 Franklin Street, Fifth Floor, 29 * Boston, MA 02110-1301, 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/* On PowerPC64 Linux, these functions are provided by the linker. */ 45#ifndef __powerpc64__ 46 47/* Routines for saving floating point registers, called by the compiler. */ 48/* Called with r11 pointing to the stack header word of the caller of the */ 49/* function, just beyond the end of the floating point save area. */ 50 51FUNC_START(_savefpr_14) stfd 14,-144(11) /* save fp registers */ 52FUNC_START(_savefpr_15) stfd 15,-136(11) 53FUNC_START(_savefpr_16) stfd 16,-128(11) 54FUNC_START(_savefpr_17) stfd 17,-120(11) 55FUNC_START(_savefpr_18) stfd 18,-112(11) 56FUNC_START(_savefpr_19) stfd 19,-104(11) 57FUNC_START(_savefpr_20) stfd 20,-96(11) 58FUNC_START(_savefpr_21) stfd 21,-88(11) 59FUNC_START(_savefpr_22) stfd 22,-80(11) 60FUNC_START(_savefpr_23) stfd 23,-72(11) 61FUNC_START(_savefpr_24) stfd 24,-64(11) 62FUNC_START(_savefpr_25) stfd 25,-56(11) 63FUNC_START(_savefpr_26) stfd 26,-48(11) 64FUNC_START(_savefpr_27) stfd 27,-40(11) 65FUNC_START(_savefpr_28) stfd 28,-32(11) 66FUNC_START(_savefpr_29) stfd 29,-24(11) 67FUNC_START(_savefpr_30) stfd 30,-16(11) 68FUNC_START(_savefpr_31) stfd 31,-8(11) 69 blr 70FUNC_END(_savefpr_31) 71FUNC_END(_savefpr_30) 72FUNC_END(_savefpr_29) 73FUNC_END(_savefpr_28) 74FUNC_END(_savefpr_27) 75FUNC_END(_savefpr_26) 76FUNC_END(_savefpr_25) 77FUNC_END(_savefpr_24) 78FUNC_END(_savefpr_23) 79FUNC_END(_savefpr_22) 80FUNC_END(_savefpr_21) 81FUNC_END(_savefpr_20) 82FUNC_END(_savefpr_19) 83FUNC_END(_savefpr_18) 84FUNC_END(_savefpr_17) 85FUNC_END(_savefpr_16) 86FUNC_END(_savefpr_15) 87FUNC_END(_savefpr_14) 88 89/* Routines for saving integer registers, called by the compiler. */ 90/* Called with r11 pointing to the stack header word of the caller of the */ 91/* function, just beyond the end of the integer save area. */ 92 93FUNC_START(_savegpr_14) stw 14,-72(11) /* save gp registers */ 94FUNC_START(_savegpr_15) stw 15,-68(11) 95FUNC_START(_savegpr_16) stw 16,-64(11) 96FUNC_START(_savegpr_17) stw 17,-60(11) 97FUNC_START(_savegpr_18) stw 18,-56(11) 98FUNC_START(_savegpr_19) stw 19,-52(11) 99FUNC_START(_savegpr_20) stw 20,-48(11) 100FUNC_START(_savegpr_21) stw 21,-44(11) 101FUNC_START(_savegpr_22) stw 22,-40(11) 102FUNC_START(_savegpr_23) stw 23,-36(11) 103FUNC_START(_savegpr_24) stw 24,-32(11) 104FUNC_START(_savegpr_25) stw 25,-28(11) 105FUNC_START(_savegpr_26) stw 26,-24(11) 106FUNC_START(_savegpr_27) stw 27,-20(11) 107FUNC_START(_savegpr_28) stw 28,-16(11) 108FUNC_START(_savegpr_29) stw 29,-12(11) 109FUNC_START(_savegpr_30) stw 30,-8(11) 110FUNC_START(_savegpr_31) stw 31,-4(11) 111 blr 112FUNC_END(_savegpr_31) 113FUNC_END(_savegpr_30) 114FUNC_END(_savegpr_29) 115FUNC_END(_savegpr_28) 116FUNC_END(_savegpr_27) 117FUNC_END(_savegpr_26) 118FUNC_END(_savegpr_25) 119FUNC_END(_savegpr_24) 120FUNC_END(_savegpr_23) 121FUNC_END(_savegpr_22) 122FUNC_END(_savegpr_21) 123FUNC_END(_savegpr_20) 124FUNC_END(_savegpr_19) 125FUNC_END(_savegpr_18) 126FUNC_END(_savegpr_17) 127FUNC_END(_savegpr_16) 128FUNC_END(_savegpr_15) 129FUNC_END(_savegpr_14) 130 131/* Routines for restoring floating point registers, called by the compiler. */ 132/* Called with r11 pointing to the stack header word of the caller of the */ 133/* function, just beyond the end of the floating point save area. */ 134 135FUNC_START(_restfpr_14) lfd 14,-144(11) /* restore fp registers */ 136FUNC_START(_restfpr_15) lfd 15,-136(11) 137FUNC_START(_restfpr_16) lfd 16,-128(11) 138FUNC_START(_restfpr_17) lfd 17,-120(11) 139FUNC_START(_restfpr_18) lfd 18,-112(11) 140FUNC_START(_restfpr_19) lfd 19,-104(11) 141FUNC_START(_restfpr_20) lfd 20,-96(11) 142FUNC_START(_restfpr_21) lfd 21,-88(11) 143FUNC_START(_restfpr_22) lfd 22,-80(11) 144FUNC_START(_restfpr_23) lfd 23,-72(11) 145FUNC_START(_restfpr_24) lfd 24,-64(11) 146FUNC_START(_restfpr_25) lfd 25,-56(11) 147FUNC_START(_restfpr_26) lfd 26,-48(11) 148FUNC_START(_restfpr_27) lfd 27,-40(11) 149FUNC_START(_restfpr_28) lfd 28,-32(11) 150FUNC_START(_restfpr_29) lfd 29,-24(11) 151FUNC_START(_restfpr_30) lfd 30,-16(11) 152FUNC_START(_restfpr_31) lfd 31,-8(11) 153 blr 154FUNC_END(_restfpr_31) 155FUNC_END(_restfpr_30) 156FUNC_END(_restfpr_29) 157FUNC_END(_restfpr_28) 158FUNC_END(_restfpr_27) 159FUNC_END(_restfpr_26) 160FUNC_END(_restfpr_25) 161FUNC_END(_restfpr_24) 162FUNC_END(_restfpr_23) 163FUNC_END(_restfpr_22) 164FUNC_END(_restfpr_21) 165FUNC_END(_restfpr_20) 166FUNC_END(_restfpr_19) 167FUNC_END(_restfpr_18) 168FUNC_END(_restfpr_17) 169FUNC_END(_restfpr_16) 170FUNC_END(_restfpr_15) 171FUNC_END(_restfpr_14) 172 173/* Routines for restoring integer registers, called by the compiler. */ 174/* Called with r11 pointing to the stack header word of the caller of the */ 175/* function, just beyond the end of the integer restore area. */ 176 177FUNC_START(_restgpr_14) lwz 14,-72(11) /* restore gp registers */ 178FUNC_START(_restgpr_15) lwz 15,-68(11) 179FUNC_START(_restgpr_16) lwz 16,-64(11) 180FUNC_START(_restgpr_17) lwz 17,-60(11) 181FUNC_START(_restgpr_18) lwz 18,-56(11) 182FUNC_START(_restgpr_19) lwz 19,-52(11) 183FUNC_START(_restgpr_20) lwz 20,-48(11) 184FUNC_START(_restgpr_21) lwz 21,-44(11) 185FUNC_START(_restgpr_22) lwz 22,-40(11) 186FUNC_START(_restgpr_23) lwz 23,-36(11) 187FUNC_START(_restgpr_24) lwz 24,-32(11) 188FUNC_START(_restgpr_25) lwz 25,-28(11) 189FUNC_START(_restgpr_26) lwz 26,-24(11) 190FUNC_START(_restgpr_27) lwz 27,-20(11) 191FUNC_START(_restgpr_28) lwz 28,-16(11) 192FUNC_START(_restgpr_29) lwz 29,-12(11) 193FUNC_START(_restgpr_30) lwz 30,-8(11) 194FUNC_START(_restgpr_31) lwz 31,-4(11) 195 blr 196FUNC_END(_restgpr_31) 197FUNC_END(_restgpr_30) 198FUNC_END(_restgpr_29) 199FUNC_END(_restgpr_28) 200FUNC_END(_restgpr_27) 201FUNC_END(_restgpr_26) 202FUNC_END(_restgpr_25) 203FUNC_END(_restgpr_24) 204FUNC_END(_restgpr_23) 205FUNC_END(_restgpr_22) 206FUNC_END(_restgpr_21) 207FUNC_END(_restgpr_20) 208FUNC_END(_restgpr_19) 209FUNC_END(_restgpr_18) 210FUNC_END(_restgpr_17) 211FUNC_END(_restgpr_16) 212FUNC_END(_restgpr_15) 213FUNC_END(_restgpr_14) 214 215/* Routines for restoring floating point registers, called by the compiler. */ 216/* Called with r11 pointing to the stack header word of the caller of the */ 217/* function, just beyond the end of the floating point save area. */ 218/* In addition to restoring the fp registers, it will return to the caller's */ 219/* caller */ 220 221FUNC_START(_restfpr_14_x) lfd 14,-144(11) /* restore fp registers */ 222FUNC_START(_restfpr_15_x) lfd 15,-136(11) 223FUNC_START(_restfpr_16_x) lfd 16,-128(11) 224FUNC_START(_restfpr_17_x) lfd 17,-120(11) 225FUNC_START(_restfpr_18_x) lfd 18,-112(11) 226FUNC_START(_restfpr_19_x) lfd 19,-104(11) 227FUNC_START(_restfpr_20_x) lfd 20,-96(11) 228FUNC_START(_restfpr_21_x) lfd 21,-88(11) 229FUNC_START(_restfpr_22_x) lfd 22,-80(11) 230FUNC_START(_restfpr_23_x) lfd 23,-72(11) 231FUNC_START(_restfpr_24_x) lfd 24,-64(11) 232FUNC_START(_restfpr_25_x) lfd 25,-56(11) 233FUNC_START(_restfpr_26_x) lfd 26,-48(11) 234FUNC_START(_restfpr_27_x) lfd 27,-40(11) 235FUNC_START(_restfpr_28_x) lfd 28,-32(11) 236FUNC_START(_restfpr_29_x) lfd 29,-24(11) 237FUNC_START(_restfpr_30_x) lfd 30,-16(11) 238FUNC_START(_restfpr_31_x) lwz 0,4(11) 239 lfd 31,-8(11) 240 mtlr 0 241 mr 1,11 242 blr 243FUNC_END(_restfpr_31_x) 244FUNC_END(_restfpr_30_x) 245FUNC_END(_restfpr_29_x) 246FUNC_END(_restfpr_28_x) 247FUNC_END(_restfpr_27_x) 248FUNC_END(_restfpr_26_x) 249FUNC_END(_restfpr_25_x) 250FUNC_END(_restfpr_24_x) 251FUNC_END(_restfpr_23_x) 252FUNC_END(_restfpr_22_x) 253FUNC_END(_restfpr_21_x) 254FUNC_END(_restfpr_20_x) 255FUNC_END(_restfpr_19_x) 256FUNC_END(_restfpr_18_x) 257FUNC_END(_restfpr_17_x) 258FUNC_END(_restfpr_16_x) 259FUNC_END(_restfpr_15_x) 260FUNC_END(_restfpr_14_x) 261 262/* Routines for restoring integer registers, called by the compiler. */ 263/* Called with r11 pointing to the stack header word of the caller of the */ 264/* function, just beyond the end of the integer restore area. */ 265 266FUNC_START(_restgpr_14_x) lwz 14,-72(11) /* restore gp registers */ 267FUNC_START(_restgpr_15_x) lwz 15,-68(11) 268FUNC_START(_restgpr_16_x) lwz 16,-64(11) 269FUNC_START(_restgpr_17_x) lwz 17,-60(11) 270FUNC_START(_restgpr_18_x) lwz 18,-56(11) 271FUNC_START(_restgpr_19_x) lwz 19,-52(11) 272FUNC_START(_restgpr_20_x) lwz 20,-48(11) 273FUNC_START(_restgpr_21_x) lwz 21,-44(11) 274FUNC_START(_restgpr_22_x) lwz 22,-40(11) 275FUNC_START(_restgpr_23_x) lwz 23,-36(11) 276FUNC_START(_restgpr_24_x) lwz 24,-32(11) 277FUNC_START(_restgpr_25_x) lwz 25,-28(11) 278FUNC_START(_restgpr_26_x) lwz 26,-24(11) 279FUNC_START(_restgpr_27_x) lwz 27,-20(11) 280FUNC_START(_restgpr_28_x) lwz 28,-16(11) 281FUNC_START(_restgpr_29_x) lwz 29,-12(11) 282FUNC_START(_restgpr_30_x) lwz 30,-8(11) 283FUNC_START(_restgpr_31_x) lwz 0,4(11) 284 lwz 31,-4(11) 285 mtlr 0 286 mr 1,11 287 blr 288FUNC_END(_restgpr_31_x) 289FUNC_END(_restgpr_30_x) 290FUNC_END(_restgpr_29_x) 291FUNC_END(_restgpr_28_x) 292FUNC_END(_restgpr_27_x) 293FUNC_END(_restgpr_26_x) 294FUNC_END(_restgpr_25_x) 295FUNC_END(_restgpr_24_x) 296FUNC_END(_restgpr_23_x) 297FUNC_END(_restgpr_22_x) 298FUNC_END(_restgpr_21_x) 299FUNC_END(_restgpr_20_x) 300FUNC_END(_restgpr_19_x) 301FUNC_END(_restgpr_18_x) 302FUNC_END(_restgpr_17_x) 303FUNC_END(_restgpr_16_x) 304FUNC_END(_restgpr_15_x) 305FUNC_END(_restgpr_14_x) 306 307#endif 308