1*4882a593Smuzhiyun/* 2*4882a593Smuzhiyun * Special support for eabi and SVR4 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc. 5*4882a593Smuzhiyun * Copyright 2008 Freescale Semiconductor, Inc. 6*4882a593Smuzhiyun * Written By Michael Meissner 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * Based on gcc/config/rs6000/crtsavres.asm from gcc 9*4882a593Smuzhiyun * 64 bit additions from reading the PPC elf64abi document. 10*4882a593Smuzhiyun * 11*4882a593Smuzhiyun * This file is free software; you can redistribute it and/or modify it 12*4882a593Smuzhiyun * under the terms of the GNU General Public License as published by the 13*4882a593Smuzhiyun * Free Software Foundation; either version 2, or (at your option) any 14*4882a593Smuzhiyun * later version. 15*4882a593Smuzhiyun * 16*4882a593Smuzhiyun * In addition to the permissions in the GNU General Public License, the 17*4882a593Smuzhiyun * Free Software Foundation gives you unlimited permission to link the 18*4882a593Smuzhiyun * compiled version of this file with other programs, and to distribute 19*4882a593Smuzhiyun * those programs without any restriction coming from the use of this 20*4882a593Smuzhiyun * file. (The General Public License restrictions do apply in other 21*4882a593Smuzhiyun * respects; for example, they cover modification of the file, and 22*4882a593Smuzhiyun * distribution when not linked into another program.) 23*4882a593Smuzhiyun * 24*4882a593Smuzhiyun * This file is distributed in the hope that it will be useful, but 25*4882a593Smuzhiyun * WITHOUT ANY WARRANTY; without even the implied warranty of 26*4882a593Smuzhiyun * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 27*4882a593Smuzhiyun * General Public License for more details. 28*4882a593Smuzhiyun * 29*4882a593Smuzhiyun * You should have received a copy of the GNU General Public License 30*4882a593Smuzhiyun * along with this program; see the file COPYING. If not, write to 31*4882a593Smuzhiyun * the Free Software Foundation, 51 Franklin Street, Fifth Floor, 32*4882a593Smuzhiyun * Boston, MA 02110-1301, USA. 33*4882a593Smuzhiyun * 34*4882a593Smuzhiyun * As a special exception, if you link this library with files 35*4882a593Smuzhiyun * compiled with GCC to produce an executable, this does not cause 36*4882a593Smuzhiyun * the resulting executable to be covered by the GNU General Public License. 37*4882a593Smuzhiyun * This exception does not however invalidate any other reasons why 38*4882a593Smuzhiyun * the executable file might be covered by the GNU General Public License. 39*4882a593Smuzhiyun */ 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun#include <asm/ppc_asm.h> 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun .file "crtsavres.S" 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun#ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun .section ".text" 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun#ifndef CONFIG_PPC64 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun/* Routines for saving integer registers, called by the compiler. */ 52*4882a593Smuzhiyun/* Called with r11 pointing to the stack header word of the caller of the */ 53*4882a593Smuzhiyun/* function, just beyond the end of the integer save area. */ 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun_GLOBAL(_savegpr_14) 56*4882a593Smuzhiyun_GLOBAL(_save32gpr_14) 57*4882a593Smuzhiyun stw 14,-72(11) /* save gp registers */ 58*4882a593Smuzhiyun_GLOBAL(_savegpr_15) 59*4882a593Smuzhiyun_GLOBAL(_save32gpr_15) 60*4882a593Smuzhiyun stw 15,-68(11) 61*4882a593Smuzhiyun_GLOBAL(_savegpr_16) 62*4882a593Smuzhiyun_GLOBAL(_save32gpr_16) 63*4882a593Smuzhiyun stw 16,-64(11) 64*4882a593Smuzhiyun_GLOBAL(_savegpr_17) 65*4882a593Smuzhiyun_GLOBAL(_save32gpr_17) 66*4882a593Smuzhiyun stw 17,-60(11) 67*4882a593Smuzhiyun_GLOBAL(_savegpr_18) 68*4882a593Smuzhiyun_GLOBAL(_save32gpr_18) 69*4882a593Smuzhiyun stw 18,-56(11) 70*4882a593Smuzhiyun_GLOBAL(_savegpr_19) 71*4882a593Smuzhiyun_GLOBAL(_save32gpr_19) 72*4882a593Smuzhiyun stw 19,-52(11) 73*4882a593Smuzhiyun_GLOBAL(_savegpr_20) 74*4882a593Smuzhiyun_GLOBAL(_save32gpr_20) 75*4882a593Smuzhiyun stw 20,-48(11) 76*4882a593Smuzhiyun_GLOBAL(_savegpr_21) 77*4882a593Smuzhiyun_GLOBAL(_save32gpr_21) 78*4882a593Smuzhiyun stw 21,-44(11) 79*4882a593Smuzhiyun_GLOBAL(_savegpr_22) 80*4882a593Smuzhiyun_GLOBAL(_save32gpr_22) 81*4882a593Smuzhiyun stw 22,-40(11) 82*4882a593Smuzhiyun_GLOBAL(_savegpr_23) 83*4882a593Smuzhiyun_GLOBAL(_save32gpr_23) 84*4882a593Smuzhiyun stw 23,-36(11) 85*4882a593Smuzhiyun_GLOBAL(_savegpr_24) 86*4882a593Smuzhiyun_GLOBAL(_save32gpr_24) 87*4882a593Smuzhiyun stw 24,-32(11) 88*4882a593Smuzhiyun_GLOBAL(_savegpr_25) 89*4882a593Smuzhiyun_GLOBAL(_save32gpr_25) 90*4882a593Smuzhiyun stw 25,-28(11) 91*4882a593Smuzhiyun_GLOBAL(_savegpr_26) 92*4882a593Smuzhiyun_GLOBAL(_save32gpr_26) 93*4882a593Smuzhiyun stw 26,-24(11) 94*4882a593Smuzhiyun_GLOBAL(_savegpr_27) 95*4882a593Smuzhiyun_GLOBAL(_save32gpr_27) 96*4882a593Smuzhiyun stw 27,-20(11) 97*4882a593Smuzhiyun_GLOBAL(_savegpr_28) 98*4882a593Smuzhiyun_GLOBAL(_save32gpr_28) 99*4882a593Smuzhiyun stw 28,-16(11) 100*4882a593Smuzhiyun_GLOBAL(_savegpr_29) 101*4882a593Smuzhiyun_GLOBAL(_save32gpr_29) 102*4882a593Smuzhiyun stw 29,-12(11) 103*4882a593Smuzhiyun_GLOBAL(_savegpr_30) 104*4882a593Smuzhiyun_GLOBAL(_save32gpr_30) 105*4882a593Smuzhiyun stw 30,-8(11) 106*4882a593Smuzhiyun_GLOBAL(_savegpr_31) 107*4882a593Smuzhiyun_GLOBAL(_save32gpr_31) 108*4882a593Smuzhiyun stw 31,-4(11) 109*4882a593Smuzhiyun blr 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun/* Routines for restoring integer registers, called by the compiler. */ 112*4882a593Smuzhiyun/* Called with r11 pointing to the stack header word of the caller of the */ 113*4882a593Smuzhiyun/* function, just beyond the end of the integer restore area. */ 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun_GLOBAL(_restgpr_14) 116*4882a593Smuzhiyun_GLOBAL(_rest32gpr_14) 117*4882a593Smuzhiyun lwz 14,-72(11) /* restore gp registers */ 118*4882a593Smuzhiyun_GLOBAL(_restgpr_15) 119*4882a593Smuzhiyun_GLOBAL(_rest32gpr_15) 120*4882a593Smuzhiyun lwz 15,-68(11) 121*4882a593Smuzhiyun_GLOBAL(_restgpr_16) 122*4882a593Smuzhiyun_GLOBAL(_rest32gpr_16) 123*4882a593Smuzhiyun lwz 16,-64(11) 124*4882a593Smuzhiyun_GLOBAL(_restgpr_17) 125*4882a593Smuzhiyun_GLOBAL(_rest32gpr_17) 126*4882a593Smuzhiyun lwz 17,-60(11) 127*4882a593Smuzhiyun_GLOBAL(_restgpr_18) 128*4882a593Smuzhiyun_GLOBAL(_rest32gpr_18) 129*4882a593Smuzhiyun lwz 18,-56(11) 130*4882a593Smuzhiyun_GLOBAL(_restgpr_19) 131*4882a593Smuzhiyun_GLOBAL(_rest32gpr_19) 132*4882a593Smuzhiyun lwz 19,-52(11) 133*4882a593Smuzhiyun_GLOBAL(_restgpr_20) 134*4882a593Smuzhiyun_GLOBAL(_rest32gpr_20) 135*4882a593Smuzhiyun lwz 20,-48(11) 136*4882a593Smuzhiyun_GLOBAL(_restgpr_21) 137*4882a593Smuzhiyun_GLOBAL(_rest32gpr_21) 138*4882a593Smuzhiyun lwz 21,-44(11) 139*4882a593Smuzhiyun_GLOBAL(_restgpr_22) 140*4882a593Smuzhiyun_GLOBAL(_rest32gpr_22) 141*4882a593Smuzhiyun lwz 22,-40(11) 142*4882a593Smuzhiyun_GLOBAL(_restgpr_23) 143*4882a593Smuzhiyun_GLOBAL(_rest32gpr_23) 144*4882a593Smuzhiyun lwz 23,-36(11) 145*4882a593Smuzhiyun_GLOBAL(_restgpr_24) 146*4882a593Smuzhiyun_GLOBAL(_rest32gpr_24) 147*4882a593Smuzhiyun lwz 24,-32(11) 148*4882a593Smuzhiyun_GLOBAL(_restgpr_25) 149*4882a593Smuzhiyun_GLOBAL(_rest32gpr_25) 150*4882a593Smuzhiyun lwz 25,-28(11) 151*4882a593Smuzhiyun_GLOBAL(_restgpr_26) 152*4882a593Smuzhiyun_GLOBAL(_rest32gpr_26) 153*4882a593Smuzhiyun lwz 26,-24(11) 154*4882a593Smuzhiyun_GLOBAL(_restgpr_27) 155*4882a593Smuzhiyun_GLOBAL(_rest32gpr_27) 156*4882a593Smuzhiyun lwz 27,-20(11) 157*4882a593Smuzhiyun_GLOBAL(_restgpr_28) 158*4882a593Smuzhiyun_GLOBAL(_rest32gpr_28) 159*4882a593Smuzhiyun lwz 28,-16(11) 160*4882a593Smuzhiyun_GLOBAL(_restgpr_29) 161*4882a593Smuzhiyun_GLOBAL(_rest32gpr_29) 162*4882a593Smuzhiyun lwz 29,-12(11) 163*4882a593Smuzhiyun_GLOBAL(_restgpr_30) 164*4882a593Smuzhiyun_GLOBAL(_rest32gpr_30) 165*4882a593Smuzhiyun lwz 30,-8(11) 166*4882a593Smuzhiyun_GLOBAL(_restgpr_31) 167*4882a593Smuzhiyun_GLOBAL(_rest32gpr_31) 168*4882a593Smuzhiyun lwz 31,-4(11) 169*4882a593Smuzhiyun blr 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun/* Routines for restoring integer registers, called by the compiler. */ 172*4882a593Smuzhiyun/* Called with r11 pointing to the stack header word of the caller of the */ 173*4882a593Smuzhiyun/* function, just beyond the end of the integer restore area. */ 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun_GLOBAL(_restgpr_14_x) 176*4882a593Smuzhiyun_GLOBAL(_rest32gpr_14_x) 177*4882a593Smuzhiyun lwz 14,-72(11) /* restore gp registers */ 178*4882a593Smuzhiyun_GLOBAL(_restgpr_15_x) 179*4882a593Smuzhiyun_GLOBAL(_rest32gpr_15_x) 180*4882a593Smuzhiyun lwz 15,-68(11) 181*4882a593Smuzhiyun_GLOBAL(_restgpr_16_x) 182*4882a593Smuzhiyun_GLOBAL(_rest32gpr_16_x) 183*4882a593Smuzhiyun lwz 16,-64(11) 184*4882a593Smuzhiyun_GLOBAL(_restgpr_17_x) 185*4882a593Smuzhiyun_GLOBAL(_rest32gpr_17_x) 186*4882a593Smuzhiyun lwz 17,-60(11) 187*4882a593Smuzhiyun_GLOBAL(_restgpr_18_x) 188*4882a593Smuzhiyun_GLOBAL(_rest32gpr_18_x) 189*4882a593Smuzhiyun lwz 18,-56(11) 190*4882a593Smuzhiyun_GLOBAL(_restgpr_19_x) 191*4882a593Smuzhiyun_GLOBAL(_rest32gpr_19_x) 192*4882a593Smuzhiyun lwz 19,-52(11) 193*4882a593Smuzhiyun_GLOBAL(_restgpr_20_x) 194*4882a593Smuzhiyun_GLOBAL(_rest32gpr_20_x) 195*4882a593Smuzhiyun lwz 20,-48(11) 196*4882a593Smuzhiyun_GLOBAL(_restgpr_21_x) 197*4882a593Smuzhiyun_GLOBAL(_rest32gpr_21_x) 198*4882a593Smuzhiyun lwz 21,-44(11) 199*4882a593Smuzhiyun_GLOBAL(_restgpr_22_x) 200*4882a593Smuzhiyun_GLOBAL(_rest32gpr_22_x) 201*4882a593Smuzhiyun lwz 22,-40(11) 202*4882a593Smuzhiyun_GLOBAL(_restgpr_23_x) 203*4882a593Smuzhiyun_GLOBAL(_rest32gpr_23_x) 204*4882a593Smuzhiyun lwz 23,-36(11) 205*4882a593Smuzhiyun_GLOBAL(_restgpr_24_x) 206*4882a593Smuzhiyun_GLOBAL(_rest32gpr_24_x) 207*4882a593Smuzhiyun lwz 24,-32(11) 208*4882a593Smuzhiyun_GLOBAL(_restgpr_25_x) 209*4882a593Smuzhiyun_GLOBAL(_rest32gpr_25_x) 210*4882a593Smuzhiyun lwz 25,-28(11) 211*4882a593Smuzhiyun_GLOBAL(_restgpr_26_x) 212*4882a593Smuzhiyun_GLOBAL(_rest32gpr_26_x) 213*4882a593Smuzhiyun lwz 26,-24(11) 214*4882a593Smuzhiyun_GLOBAL(_restgpr_27_x) 215*4882a593Smuzhiyun_GLOBAL(_rest32gpr_27_x) 216*4882a593Smuzhiyun lwz 27,-20(11) 217*4882a593Smuzhiyun_GLOBAL(_restgpr_28_x) 218*4882a593Smuzhiyun_GLOBAL(_rest32gpr_28_x) 219*4882a593Smuzhiyun lwz 28,-16(11) 220*4882a593Smuzhiyun_GLOBAL(_restgpr_29_x) 221*4882a593Smuzhiyun_GLOBAL(_rest32gpr_29_x) 222*4882a593Smuzhiyun lwz 29,-12(11) 223*4882a593Smuzhiyun_GLOBAL(_restgpr_30_x) 224*4882a593Smuzhiyun_GLOBAL(_rest32gpr_30_x) 225*4882a593Smuzhiyun lwz 30,-8(11) 226*4882a593Smuzhiyun_GLOBAL(_restgpr_31_x) 227*4882a593Smuzhiyun_GLOBAL(_rest32gpr_31_x) 228*4882a593Smuzhiyun lwz 0,4(11) 229*4882a593Smuzhiyun lwz 31,-4(11) 230*4882a593Smuzhiyun mtlr 0 231*4882a593Smuzhiyun mr 1,11 232*4882a593Smuzhiyun blr 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun#ifdef CONFIG_ALTIVEC 235*4882a593Smuzhiyun/* Called with r0 pointing just beyond the end of the vector save area. */ 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun_GLOBAL(_savevr_20) 238*4882a593Smuzhiyun li r11,-192 239*4882a593Smuzhiyun stvx v20,r11,r0 240*4882a593Smuzhiyun_GLOBAL(_savevr_21) 241*4882a593Smuzhiyun li r11,-176 242*4882a593Smuzhiyun stvx v21,r11,r0 243*4882a593Smuzhiyun_GLOBAL(_savevr_22) 244*4882a593Smuzhiyun li r11,-160 245*4882a593Smuzhiyun stvx v22,r11,r0 246*4882a593Smuzhiyun_GLOBAL(_savevr_23) 247*4882a593Smuzhiyun li r11,-144 248*4882a593Smuzhiyun stvx v23,r11,r0 249*4882a593Smuzhiyun_GLOBAL(_savevr_24) 250*4882a593Smuzhiyun li r11,-128 251*4882a593Smuzhiyun stvx v24,r11,r0 252*4882a593Smuzhiyun_GLOBAL(_savevr_25) 253*4882a593Smuzhiyun li r11,-112 254*4882a593Smuzhiyun stvx v25,r11,r0 255*4882a593Smuzhiyun_GLOBAL(_savevr_26) 256*4882a593Smuzhiyun li r11,-96 257*4882a593Smuzhiyun stvx v26,r11,r0 258*4882a593Smuzhiyun_GLOBAL(_savevr_27) 259*4882a593Smuzhiyun li r11,-80 260*4882a593Smuzhiyun stvx v27,r11,r0 261*4882a593Smuzhiyun_GLOBAL(_savevr_28) 262*4882a593Smuzhiyun li r11,-64 263*4882a593Smuzhiyun stvx v28,r11,r0 264*4882a593Smuzhiyun_GLOBAL(_savevr_29) 265*4882a593Smuzhiyun li r11,-48 266*4882a593Smuzhiyun stvx v29,r11,r0 267*4882a593Smuzhiyun_GLOBAL(_savevr_30) 268*4882a593Smuzhiyun li r11,-32 269*4882a593Smuzhiyun stvx v30,r11,r0 270*4882a593Smuzhiyun_GLOBAL(_savevr_31) 271*4882a593Smuzhiyun li r11,-16 272*4882a593Smuzhiyun stvx v31,r11,r0 273*4882a593Smuzhiyun blr 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun_GLOBAL(_restvr_20) 276*4882a593Smuzhiyun li r11,-192 277*4882a593Smuzhiyun lvx v20,r11,r0 278*4882a593Smuzhiyun_GLOBAL(_restvr_21) 279*4882a593Smuzhiyun li r11,-176 280*4882a593Smuzhiyun lvx v21,r11,r0 281*4882a593Smuzhiyun_GLOBAL(_restvr_22) 282*4882a593Smuzhiyun li r11,-160 283*4882a593Smuzhiyun lvx v22,r11,r0 284*4882a593Smuzhiyun_GLOBAL(_restvr_23) 285*4882a593Smuzhiyun li r11,-144 286*4882a593Smuzhiyun lvx v23,r11,r0 287*4882a593Smuzhiyun_GLOBAL(_restvr_24) 288*4882a593Smuzhiyun li r11,-128 289*4882a593Smuzhiyun lvx v24,r11,r0 290*4882a593Smuzhiyun_GLOBAL(_restvr_25) 291*4882a593Smuzhiyun li r11,-112 292*4882a593Smuzhiyun lvx v25,r11,r0 293*4882a593Smuzhiyun_GLOBAL(_restvr_26) 294*4882a593Smuzhiyun li r11,-96 295*4882a593Smuzhiyun lvx v26,r11,r0 296*4882a593Smuzhiyun_GLOBAL(_restvr_27) 297*4882a593Smuzhiyun li r11,-80 298*4882a593Smuzhiyun lvx v27,r11,r0 299*4882a593Smuzhiyun_GLOBAL(_restvr_28) 300*4882a593Smuzhiyun li r11,-64 301*4882a593Smuzhiyun lvx v28,r11,r0 302*4882a593Smuzhiyun_GLOBAL(_restvr_29) 303*4882a593Smuzhiyun li r11,-48 304*4882a593Smuzhiyun lvx v29,r11,r0 305*4882a593Smuzhiyun_GLOBAL(_restvr_30) 306*4882a593Smuzhiyun li r11,-32 307*4882a593Smuzhiyun lvx v30,r11,r0 308*4882a593Smuzhiyun_GLOBAL(_restvr_31) 309*4882a593Smuzhiyun li r11,-16 310*4882a593Smuzhiyun lvx v31,r11,r0 311*4882a593Smuzhiyun blr 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun#endif /* CONFIG_ALTIVEC */ 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun#else /* CONFIG_PPC64 */ 316*4882a593Smuzhiyun 317*4882a593Smuzhiyun.globl _savegpr0_14 318*4882a593Smuzhiyun_savegpr0_14: 319*4882a593Smuzhiyun std r14,-144(r1) 320*4882a593Smuzhiyun.globl _savegpr0_15 321*4882a593Smuzhiyun_savegpr0_15: 322*4882a593Smuzhiyun std r15,-136(r1) 323*4882a593Smuzhiyun.globl _savegpr0_16 324*4882a593Smuzhiyun_savegpr0_16: 325*4882a593Smuzhiyun std r16,-128(r1) 326*4882a593Smuzhiyun.globl _savegpr0_17 327*4882a593Smuzhiyun_savegpr0_17: 328*4882a593Smuzhiyun std r17,-120(r1) 329*4882a593Smuzhiyun.globl _savegpr0_18 330*4882a593Smuzhiyun_savegpr0_18: 331*4882a593Smuzhiyun std r18,-112(r1) 332*4882a593Smuzhiyun.globl _savegpr0_19 333*4882a593Smuzhiyun_savegpr0_19: 334*4882a593Smuzhiyun std r19,-104(r1) 335*4882a593Smuzhiyun.globl _savegpr0_20 336*4882a593Smuzhiyun_savegpr0_20: 337*4882a593Smuzhiyun std r20,-96(r1) 338*4882a593Smuzhiyun.globl _savegpr0_21 339*4882a593Smuzhiyun_savegpr0_21: 340*4882a593Smuzhiyun std r21,-88(r1) 341*4882a593Smuzhiyun.globl _savegpr0_22 342*4882a593Smuzhiyun_savegpr0_22: 343*4882a593Smuzhiyun std r22,-80(r1) 344*4882a593Smuzhiyun.globl _savegpr0_23 345*4882a593Smuzhiyun_savegpr0_23: 346*4882a593Smuzhiyun std r23,-72(r1) 347*4882a593Smuzhiyun.globl _savegpr0_24 348*4882a593Smuzhiyun_savegpr0_24: 349*4882a593Smuzhiyun std r24,-64(r1) 350*4882a593Smuzhiyun.globl _savegpr0_25 351*4882a593Smuzhiyun_savegpr0_25: 352*4882a593Smuzhiyun std r25,-56(r1) 353*4882a593Smuzhiyun.globl _savegpr0_26 354*4882a593Smuzhiyun_savegpr0_26: 355*4882a593Smuzhiyun std r26,-48(r1) 356*4882a593Smuzhiyun.globl _savegpr0_27 357*4882a593Smuzhiyun_savegpr0_27: 358*4882a593Smuzhiyun std r27,-40(r1) 359*4882a593Smuzhiyun.globl _savegpr0_28 360*4882a593Smuzhiyun_savegpr0_28: 361*4882a593Smuzhiyun std r28,-32(r1) 362*4882a593Smuzhiyun.globl _savegpr0_29 363*4882a593Smuzhiyun_savegpr0_29: 364*4882a593Smuzhiyun std r29,-24(r1) 365*4882a593Smuzhiyun.globl _savegpr0_30 366*4882a593Smuzhiyun_savegpr0_30: 367*4882a593Smuzhiyun std r30,-16(r1) 368*4882a593Smuzhiyun.globl _savegpr0_31 369*4882a593Smuzhiyun_savegpr0_31: 370*4882a593Smuzhiyun std r31,-8(r1) 371*4882a593Smuzhiyun std r0,16(r1) 372*4882a593Smuzhiyun blr 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun.globl _restgpr0_14 375*4882a593Smuzhiyun_restgpr0_14: 376*4882a593Smuzhiyun ld r14,-144(r1) 377*4882a593Smuzhiyun.globl _restgpr0_15 378*4882a593Smuzhiyun_restgpr0_15: 379*4882a593Smuzhiyun ld r15,-136(r1) 380*4882a593Smuzhiyun.globl _restgpr0_16 381*4882a593Smuzhiyun_restgpr0_16: 382*4882a593Smuzhiyun ld r16,-128(r1) 383*4882a593Smuzhiyun.globl _restgpr0_17 384*4882a593Smuzhiyun_restgpr0_17: 385*4882a593Smuzhiyun ld r17,-120(r1) 386*4882a593Smuzhiyun.globl _restgpr0_18 387*4882a593Smuzhiyun_restgpr0_18: 388*4882a593Smuzhiyun ld r18,-112(r1) 389*4882a593Smuzhiyun.globl _restgpr0_19 390*4882a593Smuzhiyun_restgpr0_19: 391*4882a593Smuzhiyun ld r19,-104(r1) 392*4882a593Smuzhiyun.globl _restgpr0_20 393*4882a593Smuzhiyun_restgpr0_20: 394*4882a593Smuzhiyun ld r20,-96(r1) 395*4882a593Smuzhiyun.globl _restgpr0_21 396*4882a593Smuzhiyun_restgpr0_21: 397*4882a593Smuzhiyun ld r21,-88(r1) 398*4882a593Smuzhiyun.globl _restgpr0_22 399*4882a593Smuzhiyun_restgpr0_22: 400*4882a593Smuzhiyun ld r22,-80(r1) 401*4882a593Smuzhiyun.globl _restgpr0_23 402*4882a593Smuzhiyun_restgpr0_23: 403*4882a593Smuzhiyun ld r23,-72(r1) 404*4882a593Smuzhiyun.globl _restgpr0_24 405*4882a593Smuzhiyun_restgpr0_24: 406*4882a593Smuzhiyun ld r24,-64(r1) 407*4882a593Smuzhiyun.globl _restgpr0_25 408*4882a593Smuzhiyun_restgpr0_25: 409*4882a593Smuzhiyun ld r25,-56(r1) 410*4882a593Smuzhiyun.globl _restgpr0_26 411*4882a593Smuzhiyun_restgpr0_26: 412*4882a593Smuzhiyun ld r26,-48(r1) 413*4882a593Smuzhiyun.globl _restgpr0_27 414*4882a593Smuzhiyun_restgpr0_27: 415*4882a593Smuzhiyun ld r27,-40(r1) 416*4882a593Smuzhiyun.globl _restgpr0_28 417*4882a593Smuzhiyun_restgpr0_28: 418*4882a593Smuzhiyun ld r28,-32(r1) 419*4882a593Smuzhiyun.globl _restgpr0_29 420*4882a593Smuzhiyun_restgpr0_29: 421*4882a593Smuzhiyun ld r0,16(r1) 422*4882a593Smuzhiyun ld r29,-24(r1) 423*4882a593Smuzhiyun mtlr r0 424*4882a593Smuzhiyun ld r30,-16(r1) 425*4882a593Smuzhiyun ld r31,-8(r1) 426*4882a593Smuzhiyun blr 427*4882a593Smuzhiyun 428*4882a593Smuzhiyun.globl _restgpr0_30 429*4882a593Smuzhiyun_restgpr0_30: 430*4882a593Smuzhiyun ld r30,-16(r1) 431*4882a593Smuzhiyun.globl _restgpr0_31 432*4882a593Smuzhiyun_restgpr0_31: 433*4882a593Smuzhiyun ld r0,16(r1) 434*4882a593Smuzhiyun ld r31,-8(r1) 435*4882a593Smuzhiyun mtlr r0 436*4882a593Smuzhiyun blr 437*4882a593Smuzhiyun 438*4882a593Smuzhiyun#ifdef CONFIG_ALTIVEC 439*4882a593Smuzhiyun/* Called with r0 pointing just beyond the end of the vector save area. */ 440*4882a593Smuzhiyun 441*4882a593Smuzhiyun.globl _savevr_20 442*4882a593Smuzhiyun_savevr_20: 443*4882a593Smuzhiyun li r12,-192 444*4882a593Smuzhiyun stvx v20,r12,r0 445*4882a593Smuzhiyun.globl _savevr_21 446*4882a593Smuzhiyun_savevr_21: 447*4882a593Smuzhiyun li r12,-176 448*4882a593Smuzhiyun stvx v21,r12,r0 449*4882a593Smuzhiyun.globl _savevr_22 450*4882a593Smuzhiyun_savevr_22: 451*4882a593Smuzhiyun li r12,-160 452*4882a593Smuzhiyun stvx v22,r12,r0 453*4882a593Smuzhiyun.globl _savevr_23 454*4882a593Smuzhiyun_savevr_23: 455*4882a593Smuzhiyun li r12,-144 456*4882a593Smuzhiyun stvx v23,r12,r0 457*4882a593Smuzhiyun.globl _savevr_24 458*4882a593Smuzhiyun_savevr_24: 459*4882a593Smuzhiyun li r12,-128 460*4882a593Smuzhiyun stvx v24,r12,r0 461*4882a593Smuzhiyun.globl _savevr_25 462*4882a593Smuzhiyun_savevr_25: 463*4882a593Smuzhiyun li r12,-112 464*4882a593Smuzhiyun stvx v25,r12,r0 465*4882a593Smuzhiyun.globl _savevr_26 466*4882a593Smuzhiyun_savevr_26: 467*4882a593Smuzhiyun li r12,-96 468*4882a593Smuzhiyun stvx v26,r12,r0 469*4882a593Smuzhiyun.globl _savevr_27 470*4882a593Smuzhiyun_savevr_27: 471*4882a593Smuzhiyun li r12,-80 472*4882a593Smuzhiyun stvx v27,r12,r0 473*4882a593Smuzhiyun.globl _savevr_28 474*4882a593Smuzhiyun_savevr_28: 475*4882a593Smuzhiyun li r12,-64 476*4882a593Smuzhiyun stvx v28,r12,r0 477*4882a593Smuzhiyun.globl _savevr_29 478*4882a593Smuzhiyun_savevr_29: 479*4882a593Smuzhiyun li r12,-48 480*4882a593Smuzhiyun stvx v29,r12,r0 481*4882a593Smuzhiyun.globl _savevr_30 482*4882a593Smuzhiyun_savevr_30: 483*4882a593Smuzhiyun li r12,-32 484*4882a593Smuzhiyun stvx v30,r12,r0 485*4882a593Smuzhiyun.globl _savevr_31 486*4882a593Smuzhiyun_savevr_31: 487*4882a593Smuzhiyun li r12,-16 488*4882a593Smuzhiyun stvx v31,r12,r0 489*4882a593Smuzhiyun blr 490*4882a593Smuzhiyun 491*4882a593Smuzhiyun.globl _restvr_20 492*4882a593Smuzhiyun_restvr_20: 493*4882a593Smuzhiyun li r12,-192 494*4882a593Smuzhiyun lvx v20,r12,r0 495*4882a593Smuzhiyun.globl _restvr_21 496*4882a593Smuzhiyun_restvr_21: 497*4882a593Smuzhiyun li r12,-176 498*4882a593Smuzhiyun lvx v21,r12,r0 499*4882a593Smuzhiyun.globl _restvr_22 500*4882a593Smuzhiyun_restvr_22: 501*4882a593Smuzhiyun li r12,-160 502*4882a593Smuzhiyun lvx v22,r12,r0 503*4882a593Smuzhiyun.globl _restvr_23 504*4882a593Smuzhiyun_restvr_23: 505*4882a593Smuzhiyun li r12,-144 506*4882a593Smuzhiyun lvx v23,r12,r0 507*4882a593Smuzhiyun.globl _restvr_24 508*4882a593Smuzhiyun_restvr_24: 509*4882a593Smuzhiyun li r12,-128 510*4882a593Smuzhiyun lvx v24,r12,r0 511*4882a593Smuzhiyun.globl _restvr_25 512*4882a593Smuzhiyun_restvr_25: 513*4882a593Smuzhiyun li r12,-112 514*4882a593Smuzhiyun lvx v25,r12,r0 515*4882a593Smuzhiyun.globl _restvr_26 516*4882a593Smuzhiyun_restvr_26: 517*4882a593Smuzhiyun li r12,-96 518*4882a593Smuzhiyun lvx v26,r12,r0 519*4882a593Smuzhiyun.globl _restvr_27 520*4882a593Smuzhiyun_restvr_27: 521*4882a593Smuzhiyun li r12,-80 522*4882a593Smuzhiyun lvx v27,r12,r0 523*4882a593Smuzhiyun.globl _restvr_28 524*4882a593Smuzhiyun_restvr_28: 525*4882a593Smuzhiyun li r12,-64 526*4882a593Smuzhiyun lvx v28,r12,r0 527*4882a593Smuzhiyun.globl _restvr_29 528*4882a593Smuzhiyun_restvr_29: 529*4882a593Smuzhiyun li r12,-48 530*4882a593Smuzhiyun lvx v29,r12,r0 531*4882a593Smuzhiyun.globl _restvr_30 532*4882a593Smuzhiyun_restvr_30: 533*4882a593Smuzhiyun li r12,-32 534*4882a593Smuzhiyun lvx v30,r12,r0 535*4882a593Smuzhiyun.globl _restvr_31 536*4882a593Smuzhiyun_restvr_31: 537*4882a593Smuzhiyun li r12,-16 538*4882a593Smuzhiyun lvx v31,r12,r0 539*4882a593Smuzhiyun blr 540*4882a593Smuzhiyun 541*4882a593Smuzhiyun#endif /* CONFIG_ALTIVEC */ 542*4882a593Smuzhiyun 543*4882a593Smuzhiyun#endif /* CONFIG_PPC64 */ 544*4882a593Smuzhiyun 545*4882a593Smuzhiyun#endif 546