162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * Special support for eabi and SVR4 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc. 562306a36Sopenharmony_ci * Copyright 2008 Freescale Semiconductor, Inc. 662306a36Sopenharmony_ci * Written By Michael Meissner 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Based on gcc/config/rs6000/crtsavres.asm from gcc 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci * This file is free software; you can redistribute it and/or modify it 1162306a36Sopenharmony_ci * under the terms of the GNU General Public License as published by the 1262306a36Sopenharmony_ci * Free Software Foundation; either version 2, or (at your option) any 1362306a36Sopenharmony_ci * later version. 1462306a36Sopenharmony_ci * 1562306a36Sopenharmony_ci * In addition to the permissions in the GNU General Public License, the 1662306a36Sopenharmony_ci * Free Software Foundation gives you unlimited permission to link the 1762306a36Sopenharmony_ci * compiled version of this file with other programs, and to distribute 1862306a36Sopenharmony_ci * those programs without any restriction coming from the use of this 1962306a36Sopenharmony_ci * file. (The General Public License restrictions do apply in other 2062306a36Sopenharmony_ci * respects; for example, they cover modification of the file, and 2162306a36Sopenharmony_ci * distribution when not linked into another program.) 2262306a36Sopenharmony_ci * 2362306a36Sopenharmony_ci * This file is distributed in the hope that it will be useful, but 2462306a36Sopenharmony_ci * WITHOUT ANY WARRANTY; without even the implied warranty of 2562306a36Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 2662306a36Sopenharmony_ci * General Public License for more details. 2762306a36Sopenharmony_ci * 2862306a36Sopenharmony_ci * You should have received a copy of the GNU General Public License 2962306a36Sopenharmony_ci * along with this program; see the file COPYING. If not, write to 3062306a36Sopenharmony_ci * the Free Software Foundation, 51 Franklin Street, Fifth Floor, 3162306a36Sopenharmony_ci * Boston, MA 02110-1301, USA. 3262306a36Sopenharmony_ci * 3362306a36Sopenharmony_ci * As a special exception, if you link this library with files 3462306a36Sopenharmony_ci * compiled with GCC to produce an executable, this does not cause 3562306a36Sopenharmony_ci * the resulting executable to be covered by the GNU General Public License. 3662306a36Sopenharmony_ci * This exception does not however invalidate any other reasons why 3762306a36Sopenharmony_ci * the executable file might be covered by the GNU General Public License. 3862306a36Sopenharmony_ci */ 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci#ifdef __powerpc64__ 4162306a36Sopenharmony_ci#error "On PPC64, FPR save/restore functions are provided by the linker." 4262306a36Sopenharmony_ci#endif 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci .file "crtsavres.S" 4562306a36Sopenharmony_ci .section ".text" 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#define _GLOBAL(name) \ 4862306a36Sopenharmony_ci .type name,@function; \ 4962306a36Sopenharmony_ci .globl name; \ 5062306a36Sopenharmony_ciname: 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci/* Routines for saving integer registers, called by the compiler. */ 5362306a36Sopenharmony_ci/* Called with r11 pointing to the stack header word of the caller of the */ 5462306a36Sopenharmony_ci/* function, just beyond the end of the integer save area. */ 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci_GLOBAL(_savegpr_14) 5762306a36Sopenharmony_ci_GLOBAL(_save32gpr_14) 5862306a36Sopenharmony_ci stw 14,-72(11) /* save gp registers */ 5962306a36Sopenharmony_ci_GLOBAL(_savegpr_15) 6062306a36Sopenharmony_ci_GLOBAL(_save32gpr_15) 6162306a36Sopenharmony_ci stw 15,-68(11) 6262306a36Sopenharmony_ci_GLOBAL(_savegpr_16) 6362306a36Sopenharmony_ci_GLOBAL(_save32gpr_16) 6462306a36Sopenharmony_ci stw 16,-64(11) 6562306a36Sopenharmony_ci_GLOBAL(_savegpr_17) 6662306a36Sopenharmony_ci_GLOBAL(_save32gpr_17) 6762306a36Sopenharmony_ci stw 17,-60(11) 6862306a36Sopenharmony_ci_GLOBAL(_savegpr_18) 6962306a36Sopenharmony_ci_GLOBAL(_save32gpr_18) 7062306a36Sopenharmony_ci stw 18,-56(11) 7162306a36Sopenharmony_ci_GLOBAL(_savegpr_19) 7262306a36Sopenharmony_ci_GLOBAL(_save32gpr_19) 7362306a36Sopenharmony_ci stw 19,-52(11) 7462306a36Sopenharmony_ci_GLOBAL(_savegpr_20) 7562306a36Sopenharmony_ci_GLOBAL(_save32gpr_20) 7662306a36Sopenharmony_ci stw 20,-48(11) 7762306a36Sopenharmony_ci_GLOBAL(_savegpr_21) 7862306a36Sopenharmony_ci_GLOBAL(_save32gpr_21) 7962306a36Sopenharmony_ci stw 21,-44(11) 8062306a36Sopenharmony_ci_GLOBAL(_savegpr_22) 8162306a36Sopenharmony_ci_GLOBAL(_save32gpr_22) 8262306a36Sopenharmony_ci stw 22,-40(11) 8362306a36Sopenharmony_ci_GLOBAL(_savegpr_23) 8462306a36Sopenharmony_ci_GLOBAL(_save32gpr_23) 8562306a36Sopenharmony_ci stw 23,-36(11) 8662306a36Sopenharmony_ci_GLOBAL(_savegpr_24) 8762306a36Sopenharmony_ci_GLOBAL(_save32gpr_24) 8862306a36Sopenharmony_ci stw 24,-32(11) 8962306a36Sopenharmony_ci_GLOBAL(_savegpr_25) 9062306a36Sopenharmony_ci_GLOBAL(_save32gpr_25) 9162306a36Sopenharmony_ci stw 25,-28(11) 9262306a36Sopenharmony_ci_GLOBAL(_savegpr_26) 9362306a36Sopenharmony_ci_GLOBAL(_save32gpr_26) 9462306a36Sopenharmony_ci stw 26,-24(11) 9562306a36Sopenharmony_ci_GLOBAL(_savegpr_27) 9662306a36Sopenharmony_ci_GLOBAL(_save32gpr_27) 9762306a36Sopenharmony_ci stw 27,-20(11) 9862306a36Sopenharmony_ci_GLOBAL(_savegpr_28) 9962306a36Sopenharmony_ci_GLOBAL(_save32gpr_28) 10062306a36Sopenharmony_ci stw 28,-16(11) 10162306a36Sopenharmony_ci_GLOBAL(_savegpr_29) 10262306a36Sopenharmony_ci_GLOBAL(_save32gpr_29) 10362306a36Sopenharmony_ci stw 29,-12(11) 10462306a36Sopenharmony_ci_GLOBAL(_savegpr_30) 10562306a36Sopenharmony_ci_GLOBAL(_save32gpr_30) 10662306a36Sopenharmony_ci stw 30,-8(11) 10762306a36Sopenharmony_ci_GLOBAL(_savegpr_31) 10862306a36Sopenharmony_ci_GLOBAL(_save32gpr_31) 10962306a36Sopenharmony_ci stw 31,-4(11) 11062306a36Sopenharmony_ci blr 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci/* Routines for restoring integer registers, called by the compiler. */ 11362306a36Sopenharmony_ci/* Called with r11 pointing to the stack header word of the caller of the */ 11462306a36Sopenharmony_ci/* function, just beyond the end of the integer restore area. */ 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci_GLOBAL(_restgpr_14) 11762306a36Sopenharmony_ci_GLOBAL(_rest32gpr_14) 11862306a36Sopenharmony_ci lwz 14,-72(11) /* restore gp registers */ 11962306a36Sopenharmony_ci_GLOBAL(_restgpr_15) 12062306a36Sopenharmony_ci_GLOBAL(_rest32gpr_15) 12162306a36Sopenharmony_ci lwz 15,-68(11) 12262306a36Sopenharmony_ci_GLOBAL(_restgpr_16) 12362306a36Sopenharmony_ci_GLOBAL(_rest32gpr_16) 12462306a36Sopenharmony_ci lwz 16,-64(11) 12562306a36Sopenharmony_ci_GLOBAL(_restgpr_17) 12662306a36Sopenharmony_ci_GLOBAL(_rest32gpr_17) 12762306a36Sopenharmony_ci lwz 17,-60(11) 12862306a36Sopenharmony_ci_GLOBAL(_restgpr_18) 12962306a36Sopenharmony_ci_GLOBAL(_rest32gpr_18) 13062306a36Sopenharmony_ci lwz 18,-56(11) 13162306a36Sopenharmony_ci_GLOBAL(_restgpr_19) 13262306a36Sopenharmony_ci_GLOBAL(_rest32gpr_19) 13362306a36Sopenharmony_ci lwz 19,-52(11) 13462306a36Sopenharmony_ci_GLOBAL(_restgpr_20) 13562306a36Sopenharmony_ci_GLOBAL(_rest32gpr_20) 13662306a36Sopenharmony_ci lwz 20,-48(11) 13762306a36Sopenharmony_ci_GLOBAL(_restgpr_21) 13862306a36Sopenharmony_ci_GLOBAL(_rest32gpr_21) 13962306a36Sopenharmony_ci lwz 21,-44(11) 14062306a36Sopenharmony_ci_GLOBAL(_restgpr_22) 14162306a36Sopenharmony_ci_GLOBAL(_rest32gpr_22) 14262306a36Sopenharmony_ci lwz 22,-40(11) 14362306a36Sopenharmony_ci_GLOBAL(_restgpr_23) 14462306a36Sopenharmony_ci_GLOBAL(_rest32gpr_23) 14562306a36Sopenharmony_ci lwz 23,-36(11) 14662306a36Sopenharmony_ci_GLOBAL(_restgpr_24) 14762306a36Sopenharmony_ci_GLOBAL(_rest32gpr_24) 14862306a36Sopenharmony_ci lwz 24,-32(11) 14962306a36Sopenharmony_ci_GLOBAL(_restgpr_25) 15062306a36Sopenharmony_ci_GLOBAL(_rest32gpr_25) 15162306a36Sopenharmony_ci lwz 25,-28(11) 15262306a36Sopenharmony_ci_GLOBAL(_restgpr_26) 15362306a36Sopenharmony_ci_GLOBAL(_rest32gpr_26) 15462306a36Sopenharmony_ci lwz 26,-24(11) 15562306a36Sopenharmony_ci_GLOBAL(_restgpr_27) 15662306a36Sopenharmony_ci_GLOBAL(_rest32gpr_27) 15762306a36Sopenharmony_ci lwz 27,-20(11) 15862306a36Sopenharmony_ci_GLOBAL(_restgpr_28) 15962306a36Sopenharmony_ci_GLOBAL(_rest32gpr_28) 16062306a36Sopenharmony_ci lwz 28,-16(11) 16162306a36Sopenharmony_ci_GLOBAL(_restgpr_29) 16262306a36Sopenharmony_ci_GLOBAL(_rest32gpr_29) 16362306a36Sopenharmony_ci lwz 29,-12(11) 16462306a36Sopenharmony_ci_GLOBAL(_restgpr_30) 16562306a36Sopenharmony_ci_GLOBAL(_rest32gpr_30) 16662306a36Sopenharmony_ci lwz 30,-8(11) 16762306a36Sopenharmony_ci_GLOBAL(_restgpr_31) 16862306a36Sopenharmony_ci_GLOBAL(_rest32gpr_31) 16962306a36Sopenharmony_ci lwz 31,-4(11) 17062306a36Sopenharmony_ci blr 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ci/* Routines for restoring integer registers, called by the compiler. */ 17362306a36Sopenharmony_ci/* Called with r11 pointing to the stack header word of the caller of the */ 17462306a36Sopenharmony_ci/* function, just beyond the end of the integer restore area. */ 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci_GLOBAL(_restgpr_14_x) 17762306a36Sopenharmony_ci_GLOBAL(_rest32gpr_14_x) 17862306a36Sopenharmony_ci lwz 14,-72(11) /* restore gp registers */ 17962306a36Sopenharmony_ci_GLOBAL(_restgpr_15_x) 18062306a36Sopenharmony_ci_GLOBAL(_rest32gpr_15_x) 18162306a36Sopenharmony_ci lwz 15,-68(11) 18262306a36Sopenharmony_ci_GLOBAL(_restgpr_16_x) 18362306a36Sopenharmony_ci_GLOBAL(_rest32gpr_16_x) 18462306a36Sopenharmony_ci lwz 16,-64(11) 18562306a36Sopenharmony_ci_GLOBAL(_restgpr_17_x) 18662306a36Sopenharmony_ci_GLOBAL(_rest32gpr_17_x) 18762306a36Sopenharmony_ci lwz 17,-60(11) 18862306a36Sopenharmony_ci_GLOBAL(_restgpr_18_x) 18962306a36Sopenharmony_ci_GLOBAL(_rest32gpr_18_x) 19062306a36Sopenharmony_ci lwz 18,-56(11) 19162306a36Sopenharmony_ci_GLOBAL(_restgpr_19_x) 19262306a36Sopenharmony_ci_GLOBAL(_rest32gpr_19_x) 19362306a36Sopenharmony_ci lwz 19,-52(11) 19462306a36Sopenharmony_ci_GLOBAL(_restgpr_20_x) 19562306a36Sopenharmony_ci_GLOBAL(_rest32gpr_20_x) 19662306a36Sopenharmony_ci lwz 20,-48(11) 19762306a36Sopenharmony_ci_GLOBAL(_restgpr_21_x) 19862306a36Sopenharmony_ci_GLOBAL(_rest32gpr_21_x) 19962306a36Sopenharmony_ci lwz 21,-44(11) 20062306a36Sopenharmony_ci_GLOBAL(_restgpr_22_x) 20162306a36Sopenharmony_ci_GLOBAL(_rest32gpr_22_x) 20262306a36Sopenharmony_ci lwz 22,-40(11) 20362306a36Sopenharmony_ci_GLOBAL(_restgpr_23_x) 20462306a36Sopenharmony_ci_GLOBAL(_rest32gpr_23_x) 20562306a36Sopenharmony_ci lwz 23,-36(11) 20662306a36Sopenharmony_ci_GLOBAL(_restgpr_24_x) 20762306a36Sopenharmony_ci_GLOBAL(_rest32gpr_24_x) 20862306a36Sopenharmony_ci lwz 24,-32(11) 20962306a36Sopenharmony_ci_GLOBAL(_restgpr_25_x) 21062306a36Sopenharmony_ci_GLOBAL(_rest32gpr_25_x) 21162306a36Sopenharmony_ci lwz 25,-28(11) 21262306a36Sopenharmony_ci_GLOBAL(_restgpr_26_x) 21362306a36Sopenharmony_ci_GLOBAL(_rest32gpr_26_x) 21462306a36Sopenharmony_ci lwz 26,-24(11) 21562306a36Sopenharmony_ci_GLOBAL(_restgpr_27_x) 21662306a36Sopenharmony_ci_GLOBAL(_rest32gpr_27_x) 21762306a36Sopenharmony_ci lwz 27,-20(11) 21862306a36Sopenharmony_ci_GLOBAL(_restgpr_28_x) 21962306a36Sopenharmony_ci_GLOBAL(_rest32gpr_28_x) 22062306a36Sopenharmony_ci lwz 28,-16(11) 22162306a36Sopenharmony_ci_GLOBAL(_restgpr_29_x) 22262306a36Sopenharmony_ci_GLOBAL(_rest32gpr_29_x) 22362306a36Sopenharmony_ci lwz 29,-12(11) 22462306a36Sopenharmony_ci_GLOBAL(_restgpr_30_x) 22562306a36Sopenharmony_ci_GLOBAL(_rest32gpr_30_x) 22662306a36Sopenharmony_ci lwz 30,-8(11) 22762306a36Sopenharmony_ci_GLOBAL(_restgpr_31_x) 22862306a36Sopenharmony_ci_GLOBAL(_rest32gpr_31_x) 22962306a36Sopenharmony_ci lwz 0,4(11) 23062306a36Sopenharmony_ci lwz 31,-4(11) 23162306a36Sopenharmony_ci mtlr 0 23262306a36Sopenharmony_ci mr 1,11 23362306a36Sopenharmony_ci blr 234