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