/*1* Special support for eabi and SVR42*3* Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc.4* Copyright 2008 Freescale Semiconductor, Inc.5* Written By Michael Meissner6*7* Based on gcc/config/rs6000/crtsavres.asm from gcc8*9* This file is free software; you can redistribute it and/or modify it10* under the terms of the GNU General Public License as published by the11* Free Software Foundation; either version 2, or (at your option) any12* later version.13*14* In addition to the permissions in the GNU General Public License, the15* Free Software Foundation gives you unlimited permission to link the16* compiled version of this file with other programs, and to distribute17* those programs without any restriction coming from the use of this18* file. (The General Public License restrictions do apply in other19* respects; for example, they cover modification of the file, and20* distribution when not linked into another program.)21*22* This file is distributed in the hope that it will be useful, but23* WITHOUT ANY WARRANTY; without even the implied warranty of24* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU25* General Public License for more details.26*27* You should have received a copy of the GNU General Public License28* along with this program; see the file COPYING. If not, write to29* the Free Software Foundation, 51 Franklin Street, Fifth Floor,30* Boston, MA 02110-1301, USA.31*32* As a special exception, if you link this library with files33* compiled with GCC to produce an executable, this does not cause34* the resulting executable to be covered by the GNU General Public License.35* This exception does not however invalidate any other reasons why36* the executable file might be covered by the GNU General Public License.37*/3839#ifdef __powerpc64__40#error "On PPC64, FPR save/restore functions are provided by the linker."41#endif4243.file "crtsavres.S"44.section ".text"4546#define _GLOBAL(name) \47.type name,@function; \48.globl name; \49name:5051/* Routines for saving integer registers, called by the compiler. */52/* Called with r11 pointing to the stack header word of the caller of the */53/* function, just beyond the end of the integer save area. */5455_GLOBAL(_savegpr_14)56_GLOBAL(_save32gpr_14)57stw 14,-72(11) /* save gp registers */58_GLOBAL(_savegpr_15)59_GLOBAL(_save32gpr_15)60stw 15,-68(11)61_GLOBAL(_savegpr_16)62_GLOBAL(_save32gpr_16)63stw 16,-64(11)64_GLOBAL(_savegpr_17)65_GLOBAL(_save32gpr_17)66stw 17,-60(11)67_GLOBAL(_savegpr_18)68_GLOBAL(_save32gpr_18)69stw 18,-56(11)70_GLOBAL(_savegpr_19)71_GLOBAL(_save32gpr_19)72stw 19,-52(11)73_GLOBAL(_savegpr_20)74_GLOBAL(_save32gpr_20)75stw 20,-48(11)76_GLOBAL(_savegpr_21)77_GLOBAL(_save32gpr_21)78stw 21,-44(11)79_GLOBAL(_savegpr_22)80_GLOBAL(_save32gpr_22)81stw 22,-40(11)82_GLOBAL(_savegpr_23)83_GLOBAL(_save32gpr_23)84stw 23,-36(11)85_GLOBAL(_savegpr_24)86_GLOBAL(_save32gpr_24)87stw 24,-32(11)88_GLOBAL(_savegpr_25)89_GLOBAL(_save32gpr_25)90stw 25,-28(11)91_GLOBAL(_savegpr_26)92_GLOBAL(_save32gpr_26)93stw 26,-24(11)94_GLOBAL(_savegpr_27)95_GLOBAL(_save32gpr_27)96stw 27,-20(11)97_GLOBAL(_savegpr_28)98_GLOBAL(_save32gpr_28)99stw 28,-16(11)100_GLOBAL(_savegpr_29)101_GLOBAL(_save32gpr_29)102stw 29,-12(11)103_GLOBAL(_savegpr_30)104_GLOBAL(_save32gpr_30)105stw 30,-8(11)106_GLOBAL(_savegpr_31)107_GLOBAL(_save32gpr_31)108stw 31,-4(11)109blr110111/* Routines for restoring integer registers, called by the compiler. */112/* Called with r11 pointing to the stack header word of the caller of the */113/* function, just beyond the end of the integer restore area. */114115_GLOBAL(_restgpr_14)116_GLOBAL(_rest32gpr_14)117lwz 14,-72(11) /* restore gp registers */118_GLOBAL(_restgpr_15)119_GLOBAL(_rest32gpr_15)120lwz 15,-68(11)121_GLOBAL(_restgpr_16)122_GLOBAL(_rest32gpr_16)123lwz 16,-64(11)124_GLOBAL(_restgpr_17)125_GLOBAL(_rest32gpr_17)126lwz 17,-60(11)127_GLOBAL(_restgpr_18)128_GLOBAL(_rest32gpr_18)129lwz 18,-56(11)130_GLOBAL(_restgpr_19)131_GLOBAL(_rest32gpr_19)132lwz 19,-52(11)133_GLOBAL(_restgpr_20)134_GLOBAL(_rest32gpr_20)135lwz 20,-48(11)136_GLOBAL(_restgpr_21)137_GLOBAL(_rest32gpr_21)138lwz 21,-44(11)139_GLOBAL(_restgpr_22)140_GLOBAL(_rest32gpr_22)141lwz 22,-40(11)142_GLOBAL(_restgpr_23)143_GLOBAL(_rest32gpr_23)144lwz 23,-36(11)145_GLOBAL(_restgpr_24)146_GLOBAL(_rest32gpr_24)147lwz 24,-32(11)148_GLOBAL(_restgpr_25)149_GLOBAL(_rest32gpr_25)150lwz 25,-28(11)151_GLOBAL(_restgpr_26)152_GLOBAL(_rest32gpr_26)153lwz 26,-24(11)154_GLOBAL(_restgpr_27)155_GLOBAL(_rest32gpr_27)156lwz 27,-20(11)157_GLOBAL(_restgpr_28)158_GLOBAL(_rest32gpr_28)159lwz 28,-16(11)160_GLOBAL(_restgpr_29)161_GLOBAL(_rest32gpr_29)162lwz 29,-12(11)163_GLOBAL(_restgpr_30)164_GLOBAL(_rest32gpr_30)165lwz 30,-8(11)166_GLOBAL(_restgpr_31)167_GLOBAL(_rest32gpr_31)168lwz 31,-4(11)169blr170171/* Routines for restoring integer registers, called by the compiler. */172/* Called with r11 pointing to the stack header word of the caller of the */173/* function, just beyond the end of the integer restore area. */174175_GLOBAL(_restgpr_14_x)176_GLOBAL(_rest32gpr_14_x)177lwz 14,-72(11) /* restore gp registers */178_GLOBAL(_restgpr_15_x)179_GLOBAL(_rest32gpr_15_x)180lwz 15,-68(11)181_GLOBAL(_restgpr_16_x)182_GLOBAL(_rest32gpr_16_x)183lwz 16,-64(11)184_GLOBAL(_restgpr_17_x)185_GLOBAL(_rest32gpr_17_x)186lwz 17,-60(11)187_GLOBAL(_restgpr_18_x)188_GLOBAL(_rest32gpr_18_x)189lwz 18,-56(11)190_GLOBAL(_restgpr_19_x)191_GLOBAL(_rest32gpr_19_x)192lwz 19,-52(11)193_GLOBAL(_restgpr_20_x)194_GLOBAL(_rest32gpr_20_x)195lwz 20,-48(11)196_GLOBAL(_restgpr_21_x)197_GLOBAL(_rest32gpr_21_x)198lwz 21,-44(11)199_GLOBAL(_restgpr_22_x)200_GLOBAL(_rest32gpr_22_x)201lwz 22,-40(11)202_GLOBAL(_restgpr_23_x)203_GLOBAL(_rest32gpr_23_x)204lwz 23,-36(11)205_GLOBAL(_restgpr_24_x)206_GLOBAL(_rest32gpr_24_x)207lwz 24,-32(11)208_GLOBAL(_restgpr_25_x)209_GLOBAL(_rest32gpr_25_x)210lwz 25,-28(11)211_GLOBAL(_restgpr_26_x)212_GLOBAL(_rest32gpr_26_x)213lwz 26,-24(11)214_GLOBAL(_restgpr_27_x)215_GLOBAL(_rest32gpr_27_x)216lwz 27,-20(11)217_GLOBAL(_restgpr_28_x)218_GLOBAL(_rest32gpr_28_x)219lwz 28,-16(11)220_GLOBAL(_restgpr_29_x)221_GLOBAL(_rest32gpr_29_x)222lwz 29,-12(11)223_GLOBAL(_restgpr_30_x)224_GLOBAL(_rest32gpr_30_x)225lwz 30,-8(11)226_GLOBAL(_restgpr_31_x)227_GLOBAL(_rest32gpr_31_x)228lwz 0,4(11)229lwz 31,-4(11)230mtlr 0231mr 1,11232blr233234235