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 * 64 bit additions from reading the PPC elf64abi document.
1062306a36Sopenharmony_ci *
1162306a36Sopenharmony_ci * This file is free software; you can redistribute it and/or modify it
1262306a36Sopenharmony_ci * under the terms of the GNU General Public License as published by the
1362306a36Sopenharmony_ci * Free Software Foundation; either version 2, or (at your option) any
1462306a36Sopenharmony_ci * later version.
1562306a36Sopenharmony_ci *
1662306a36Sopenharmony_ci * In addition to the permissions in the GNU General Public License, the
1762306a36Sopenharmony_ci * Free Software Foundation gives you unlimited permission to link the
1862306a36Sopenharmony_ci * compiled version of this file with other programs, and to distribute
1962306a36Sopenharmony_ci * those programs without any restriction coming from the use of this
2062306a36Sopenharmony_ci * file.  (The General Public License restrictions do apply in other
2162306a36Sopenharmony_ci * respects; for example, they cover modification of the file, and
2262306a36Sopenharmony_ci * distribution when not linked into another program.)
2362306a36Sopenharmony_ci *
2462306a36Sopenharmony_ci * This file is distributed in the hope that it will be useful, but
2562306a36Sopenharmony_ci * WITHOUT ANY WARRANTY; without even the implied warranty of
2662306a36Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
2762306a36Sopenharmony_ci * General Public License for more details.
2862306a36Sopenharmony_ci *
2962306a36Sopenharmony_ci * You should have received a copy of the GNU General Public License
3062306a36Sopenharmony_ci * along with this program; see the file COPYING.  If not, write to
3162306a36Sopenharmony_ci * the Free Software Foundation, 51 Franklin Street, Fifth Floor,
3262306a36Sopenharmony_ci * Boston, MA 02110-1301, USA.
3362306a36Sopenharmony_ci *
3462306a36Sopenharmony_ci *    As a special exception, if you link this library with files
3562306a36Sopenharmony_ci *    compiled with GCC to produce an executable, this does not cause
3662306a36Sopenharmony_ci *    the resulting executable to be covered by the GNU General Public License.
3762306a36Sopenharmony_ci *    This exception does not however invalidate any other reasons why
3862306a36Sopenharmony_ci *    the executable file might be covered by the GNU General Public License.
3962306a36Sopenharmony_ci */
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci#include <asm/ppc_asm.h>
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	.file	"crtsavres.S"
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci#ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci	.section ".text"
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci#ifndef CONFIG_PPC64
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci/* Routines for saving integer registers, called by the compiler.  */
5262306a36Sopenharmony_ci/* Called with r11 pointing to the stack header word of the caller of the */
5362306a36Sopenharmony_ci/* function, just beyond the end of the integer save area.  */
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci_GLOBAL(_savegpr_14)
5662306a36Sopenharmony_ci_GLOBAL(_save32gpr_14)
5762306a36Sopenharmony_ci	stw	14,-72(11)	/* save gp registers */
5862306a36Sopenharmony_ci_GLOBAL(_savegpr_15)
5962306a36Sopenharmony_ci_GLOBAL(_save32gpr_15)
6062306a36Sopenharmony_ci	stw	15,-68(11)
6162306a36Sopenharmony_ci_GLOBAL(_savegpr_16)
6262306a36Sopenharmony_ci_GLOBAL(_save32gpr_16)
6362306a36Sopenharmony_ci	stw	16,-64(11)
6462306a36Sopenharmony_ci_GLOBAL(_savegpr_17)
6562306a36Sopenharmony_ci_GLOBAL(_save32gpr_17)
6662306a36Sopenharmony_ci	stw	17,-60(11)
6762306a36Sopenharmony_ci_GLOBAL(_savegpr_18)
6862306a36Sopenharmony_ci_GLOBAL(_save32gpr_18)
6962306a36Sopenharmony_ci	stw	18,-56(11)
7062306a36Sopenharmony_ci_GLOBAL(_savegpr_19)
7162306a36Sopenharmony_ci_GLOBAL(_save32gpr_19)
7262306a36Sopenharmony_ci	stw	19,-52(11)
7362306a36Sopenharmony_ci_GLOBAL(_savegpr_20)
7462306a36Sopenharmony_ci_GLOBAL(_save32gpr_20)
7562306a36Sopenharmony_ci	stw	20,-48(11)
7662306a36Sopenharmony_ci_GLOBAL(_savegpr_21)
7762306a36Sopenharmony_ci_GLOBAL(_save32gpr_21)
7862306a36Sopenharmony_ci	stw	21,-44(11)
7962306a36Sopenharmony_ci_GLOBAL(_savegpr_22)
8062306a36Sopenharmony_ci_GLOBAL(_save32gpr_22)
8162306a36Sopenharmony_ci	stw	22,-40(11)
8262306a36Sopenharmony_ci_GLOBAL(_savegpr_23)
8362306a36Sopenharmony_ci_GLOBAL(_save32gpr_23)
8462306a36Sopenharmony_ci	stw	23,-36(11)
8562306a36Sopenharmony_ci_GLOBAL(_savegpr_24)
8662306a36Sopenharmony_ci_GLOBAL(_save32gpr_24)
8762306a36Sopenharmony_ci	stw	24,-32(11)
8862306a36Sopenharmony_ci_GLOBAL(_savegpr_25)
8962306a36Sopenharmony_ci_GLOBAL(_save32gpr_25)
9062306a36Sopenharmony_ci	stw	25,-28(11)
9162306a36Sopenharmony_ci_GLOBAL(_savegpr_26)
9262306a36Sopenharmony_ci_GLOBAL(_save32gpr_26)
9362306a36Sopenharmony_ci	stw	26,-24(11)
9462306a36Sopenharmony_ci_GLOBAL(_savegpr_27)
9562306a36Sopenharmony_ci_GLOBAL(_save32gpr_27)
9662306a36Sopenharmony_ci	stw	27,-20(11)
9762306a36Sopenharmony_ci_GLOBAL(_savegpr_28)
9862306a36Sopenharmony_ci_GLOBAL(_save32gpr_28)
9962306a36Sopenharmony_ci	stw	28,-16(11)
10062306a36Sopenharmony_ci_GLOBAL(_savegpr_29)
10162306a36Sopenharmony_ci_GLOBAL(_save32gpr_29)
10262306a36Sopenharmony_ci	stw	29,-12(11)
10362306a36Sopenharmony_ci_GLOBAL(_savegpr_30)
10462306a36Sopenharmony_ci_GLOBAL(_save32gpr_30)
10562306a36Sopenharmony_ci	stw	30,-8(11)
10662306a36Sopenharmony_ci_GLOBAL(_savegpr_31)
10762306a36Sopenharmony_ci_GLOBAL(_save32gpr_31)
10862306a36Sopenharmony_ci	stw	31,-4(11)
10962306a36Sopenharmony_ci	blr
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ci/* Routines for restoring integer registers, called by the compiler.  */
11262306a36Sopenharmony_ci/* Called with r11 pointing to the stack header word of the caller of the */
11362306a36Sopenharmony_ci/* function, just beyond the end of the integer restore area.  */
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ci_GLOBAL(_restgpr_14)
11662306a36Sopenharmony_ci_GLOBAL(_rest32gpr_14)
11762306a36Sopenharmony_ci	lwz	14,-72(11)	/* restore gp registers */
11862306a36Sopenharmony_ci_GLOBAL(_restgpr_15)
11962306a36Sopenharmony_ci_GLOBAL(_rest32gpr_15)
12062306a36Sopenharmony_ci	lwz	15,-68(11)
12162306a36Sopenharmony_ci_GLOBAL(_restgpr_16)
12262306a36Sopenharmony_ci_GLOBAL(_rest32gpr_16)
12362306a36Sopenharmony_ci	lwz	16,-64(11)
12462306a36Sopenharmony_ci_GLOBAL(_restgpr_17)
12562306a36Sopenharmony_ci_GLOBAL(_rest32gpr_17)
12662306a36Sopenharmony_ci	lwz	17,-60(11)
12762306a36Sopenharmony_ci_GLOBAL(_restgpr_18)
12862306a36Sopenharmony_ci_GLOBAL(_rest32gpr_18)
12962306a36Sopenharmony_ci	lwz	18,-56(11)
13062306a36Sopenharmony_ci_GLOBAL(_restgpr_19)
13162306a36Sopenharmony_ci_GLOBAL(_rest32gpr_19)
13262306a36Sopenharmony_ci	lwz	19,-52(11)
13362306a36Sopenharmony_ci_GLOBAL(_restgpr_20)
13462306a36Sopenharmony_ci_GLOBAL(_rest32gpr_20)
13562306a36Sopenharmony_ci	lwz	20,-48(11)
13662306a36Sopenharmony_ci_GLOBAL(_restgpr_21)
13762306a36Sopenharmony_ci_GLOBAL(_rest32gpr_21)
13862306a36Sopenharmony_ci	lwz	21,-44(11)
13962306a36Sopenharmony_ci_GLOBAL(_restgpr_22)
14062306a36Sopenharmony_ci_GLOBAL(_rest32gpr_22)
14162306a36Sopenharmony_ci	lwz	22,-40(11)
14262306a36Sopenharmony_ci_GLOBAL(_restgpr_23)
14362306a36Sopenharmony_ci_GLOBAL(_rest32gpr_23)
14462306a36Sopenharmony_ci	lwz	23,-36(11)
14562306a36Sopenharmony_ci_GLOBAL(_restgpr_24)
14662306a36Sopenharmony_ci_GLOBAL(_rest32gpr_24)
14762306a36Sopenharmony_ci	lwz	24,-32(11)
14862306a36Sopenharmony_ci_GLOBAL(_restgpr_25)
14962306a36Sopenharmony_ci_GLOBAL(_rest32gpr_25)
15062306a36Sopenharmony_ci	lwz	25,-28(11)
15162306a36Sopenharmony_ci_GLOBAL(_restgpr_26)
15262306a36Sopenharmony_ci_GLOBAL(_rest32gpr_26)
15362306a36Sopenharmony_ci	lwz	26,-24(11)
15462306a36Sopenharmony_ci_GLOBAL(_restgpr_27)
15562306a36Sopenharmony_ci_GLOBAL(_rest32gpr_27)
15662306a36Sopenharmony_ci	lwz	27,-20(11)
15762306a36Sopenharmony_ci_GLOBAL(_restgpr_28)
15862306a36Sopenharmony_ci_GLOBAL(_rest32gpr_28)
15962306a36Sopenharmony_ci	lwz	28,-16(11)
16062306a36Sopenharmony_ci_GLOBAL(_restgpr_29)
16162306a36Sopenharmony_ci_GLOBAL(_rest32gpr_29)
16262306a36Sopenharmony_ci	lwz	29,-12(11)
16362306a36Sopenharmony_ci_GLOBAL(_restgpr_30)
16462306a36Sopenharmony_ci_GLOBAL(_rest32gpr_30)
16562306a36Sopenharmony_ci	lwz	30,-8(11)
16662306a36Sopenharmony_ci_GLOBAL(_restgpr_31)
16762306a36Sopenharmony_ci_GLOBAL(_rest32gpr_31)
16862306a36Sopenharmony_ci	lwz	31,-4(11)
16962306a36Sopenharmony_ci	blr
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci/* Routines for restoring integer registers, called by the compiler.  */
17262306a36Sopenharmony_ci/* Called with r11 pointing to the stack header word of the caller of the */
17362306a36Sopenharmony_ci/* function, just beyond the end of the integer restore area.  */
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci_GLOBAL(_restgpr_14_x)
17662306a36Sopenharmony_ci_GLOBAL(_rest32gpr_14_x)
17762306a36Sopenharmony_ci	lwz	14,-72(11)	/* restore gp registers */
17862306a36Sopenharmony_ci_GLOBAL(_restgpr_15_x)
17962306a36Sopenharmony_ci_GLOBAL(_rest32gpr_15_x)
18062306a36Sopenharmony_ci	lwz	15,-68(11)
18162306a36Sopenharmony_ci_GLOBAL(_restgpr_16_x)
18262306a36Sopenharmony_ci_GLOBAL(_rest32gpr_16_x)
18362306a36Sopenharmony_ci	lwz	16,-64(11)
18462306a36Sopenharmony_ci_GLOBAL(_restgpr_17_x)
18562306a36Sopenharmony_ci_GLOBAL(_rest32gpr_17_x)
18662306a36Sopenharmony_ci	lwz	17,-60(11)
18762306a36Sopenharmony_ci_GLOBAL(_restgpr_18_x)
18862306a36Sopenharmony_ci_GLOBAL(_rest32gpr_18_x)
18962306a36Sopenharmony_ci	lwz	18,-56(11)
19062306a36Sopenharmony_ci_GLOBAL(_restgpr_19_x)
19162306a36Sopenharmony_ci_GLOBAL(_rest32gpr_19_x)
19262306a36Sopenharmony_ci	lwz	19,-52(11)
19362306a36Sopenharmony_ci_GLOBAL(_restgpr_20_x)
19462306a36Sopenharmony_ci_GLOBAL(_rest32gpr_20_x)
19562306a36Sopenharmony_ci	lwz	20,-48(11)
19662306a36Sopenharmony_ci_GLOBAL(_restgpr_21_x)
19762306a36Sopenharmony_ci_GLOBAL(_rest32gpr_21_x)
19862306a36Sopenharmony_ci	lwz	21,-44(11)
19962306a36Sopenharmony_ci_GLOBAL(_restgpr_22_x)
20062306a36Sopenharmony_ci_GLOBAL(_rest32gpr_22_x)
20162306a36Sopenharmony_ci	lwz	22,-40(11)
20262306a36Sopenharmony_ci_GLOBAL(_restgpr_23_x)
20362306a36Sopenharmony_ci_GLOBAL(_rest32gpr_23_x)
20462306a36Sopenharmony_ci	lwz	23,-36(11)
20562306a36Sopenharmony_ci_GLOBAL(_restgpr_24_x)
20662306a36Sopenharmony_ci_GLOBAL(_rest32gpr_24_x)
20762306a36Sopenharmony_ci	lwz	24,-32(11)
20862306a36Sopenharmony_ci_GLOBAL(_restgpr_25_x)
20962306a36Sopenharmony_ci_GLOBAL(_rest32gpr_25_x)
21062306a36Sopenharmony_ci	lwz	25,-28(11)
21162306a36Sopenharmony_ci_GLOBAL(_restgpr_26_x)
21262306a36Sopenharmony_ci_GLOBAL(_rest32gpr_26_x)
21362306a36Sopenharmony_ci	lwz	26,-24(11)
21462306a36Sopenharmony_ci_GLOBAL(_restgpr_27_x)
21562306a36Sopenharmony_ci_GLOBAL(_rest32gpr_27_x)
21662306a36Sopenharmony_ci	lwz	27,-20(11)
21762306a36Sopenharmony_ci_GLOBAL(_restgpr_28_x)
21862306a36Sopenharmony_ci_GLOBAL(_rest32gpr_28_x)
21962306a36Sopenharmony_ci	lwz	28,-16(11)
22062306a36Sopenharmony_ci_GLOBAL(_restgpr_29_x)
22162306a36Sopenharmony_ci_GLOBAL(_rest32gpr_29_x)
22262306a36Sopenharmony_ci	lwz	29,-12(11)
22362306a36Sopenharmony_ci_GLOBAL(_restgpr_30_x)
22462306a36Sopenharmony_ci_GLOBAL(_rest32gpr_30_x)
22562306a36Sopenharmony_ci	lwz	30,-8(11)
22662306a36Sopenharmony_ci_GLOBAL(_restgpr_31_x)
22762306a36Sopenharmony_ci_GLOBAL(_rest32gpr_31_x)
22862306a36Sopenharmony_ci	lwz	0,4(11)
22962306a36Sopenharmony_ci	lwz	31,-4(11)
23062306a36Sopenharmony_ci	mtlr	0
23162306a36Sopenharmony_ci	mr	1,11
23262306a36Sopenharmony_ci	blr
23362306a36Sopenharmony_ci
23462306a36Sopenharmony_ci#ifdef CONFIG_ALTIVEC
23562306a36Sopenharmony_ci/* Called with r0 pointing just beyond the end of the vector save area.  */
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ci_GLOBAL(_savevr_20)
23862306a36Sopenharmony_ci	li	r11,-192
23962306a36Sopenharmony_ci	stvx	v20,r11,r0
24062306a36Sopenharmony_ci_GLOBAL(_savevr_21)
24162306a36Sopenharmony_ci	li	r11,-176
24262306a36Sopenharmony_ci	stvx	v21,r11,r0
24362306a36Sopenharmony_ci_GLOBAL(_savevr_22)
24462306a36Sopenharmony_ci	li	r11,-160
24562306a36Sopenharmony_ci	stvx	v22,r11,r0
24662306a36Sopenharmony_ci_GLOBAL(_savevr_23)
24762306a36Sopenharmony_ci	li	r11,-144
24862306a36Sopenharmony_ci	stvx	v23,r11,r0
24962306a36Sopenharmony_ci_GLOBAL(_savevr_24)
25062306a36Sopenharmony_ci	li	r11,-128
25162306a36Sopenharmony_ci	stvx	v24,r11,r0
25262306a36Sopenharmony_ci_GLOBAL(_savevr_25)
25362306a36Sopenharmony_ci	li	r11,-112
25462306a36Sopenharmony_ci	stvx	v25,r11,r0
25562306a36Sopenharmony_ci_GLOBAL(_savevr_26)
25662306a36Sopenharmony_ci	li	r11,-96
25762306a36Sopenharmony_ci	stvx	v26,r11,r0
25862306a36Sopenharmony_ci_GLOBAL(_savevr_27)
25962306a36Sopenharmony_ci	li	r11,-80
26062306a36Sopenharmony_ci	stvx	v27,r11,r0
26162306a36Sopenharmony_ci_GLOBAL(_savevr_28)
26262306a36Sopenharmony_ci	li	r11,-64
26362306a36Sopenharmony_ci	stvx	v28,r11,r0
26462306a36Sopenharmony_ci_GLOBAL(_savevr_29)
26562306a36Sopenharmony_ci	li	r11,-48
26662306a36Sopenharmony_ci	stvx	v29,r11,r0
26762306a36Sopenharmony_ci_GLOBAL(_savevr_30)
26862306a36Sopenharmony_ci	li	r11,-32
26962306a36Sopenharmony_ci	stvx	v30,r11,r0
27062306a36Sopenharmony_ci_GLOBAL(_savevr_31)
27162306a36Sopenharmony_ci	li	r11,-16
27262306a36Sopenharmony_ci	stvx	v31,r11,r0
27362306a36Sopenharmony_ci	blr
27462306a36Sopenharmony_ci
27562306a36Sopenharmony_ci_GLOBAL(_restvr_20)
27662306a36Sopenharmony_ci	li	r11,-192
27762306a36Sopenharmony_ci	lvx	v20,r11,r0
27862306a36Sopenharmony_ci_GLOBAL(_restvr_21)
27962306a36Sopenharmony_ci	li	r11,-176
28062306a36Sopenharmony_ci	lvx	v21,r11,r0
28162306a36Sopenharmony_ci_GLOBAL(_restvr_22)
28262306a36Sopenharmony_ci	li	r11,-160
28362306a36Sopenharmony_ci	lvx	v22,r11,r0
28462306a36Sopenharmony_ci_GLOBAL(_restvr_23)
28562306a36Sopenharmony_ci	li	r11,-144
28662306a36Sopenharmony_ci	lvx	v23,r11,r0
28762306a36Sopenharmony_ci_GLOBAL(_restvr_24)
28862306a36Sopenharmony_ci	li	r11,-128
28962306a36Sopenharmony_ci	lvx	v24,r11,r0
29062306a36Sopenharmony_ci_GLOBAL(_restvr_25)
29162306a36Sopenharmony_ci	li	r11,-112
29262306a36Sopenharmony_ci	lvx	v25,r11,r0
29362306a36Sopenharmony_ci_GLOBAL(_restvr_26)
29462306a36Sopenharmony_ci	li	r11,-96
29562306a36Sopenharmony_ci	lvx	v26,r11,r0
29662306a36Sopenharmony_ci_GLOBAL(_restvr_27)
29762306a36Sopenharmony_ci	li	r11,-80
29862306a36Sopenharmony_ci	lvx	v27,r11,r0
29962306a36Sopenharmony_ci_GLOBAL(_restvr_28)
30062306a36Sopenharmony_ci	li	r11,-64
30162306a36Sopenharmony_ci	lvx	v28,r11,r0
30262306a36Sopenharmony_ci_GLOBAL(_restvr_29)
30362306a36Sopenharmony_ci	li	r11,-48
30462306a36Sopenharmony_ci	lvx	v29,r11,r0
30562306a36Sopenharmony_ci_GLOBAL(_restvr_30)
30662306a36Sopenharmony_ci	li	r11,-32
30762306a36Sopenharmony_ci	lvx	v30,r11,r0
30862306a36Sopenharmony_ci_GLOBAL(_restvr_31)
30962306a36Sopenharmony_ci	li	r11,-16
31062306a36Sopenharmony_ci	lvx	v31,r11,r0
31162306a36Sopenharmony_ci	blr
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ci#endif /* CONFIG_ALTIVEC */
31462306a36Sopenharmony_ci
31562306a36Sopenharmony_ci#else /* CONFIG_PPC64 */
31662306a36Sopenharmony_ci
31762306a36Sopenharmony_ci.globl	_savegpr0_14
31862306a36Sopenharmony_ci_savegpr0_14:
31962306a36Sopenharmony_ci	std	r14,-144(r1)
32062306a36Sopenharmony_ci.globl	_savegpr0_15
32162306a36Sopenharmony_ci_savegpr0_15:
32262306a36Sopenharmony_ci	std	r15,-136(r1)
32362306a36Sopenharmony_ci.globl	_savegpr0_16
32462306a36Sopenharmony_ci_savegpr0_16:
32562306a36Sopenharmony_ci	std	r16,-128(r1)
32662306a36Sopenharmony_ci.globl	_savegpr0_17
32762306a36Sopenharmony_ci_savegpr0_17:
32862306a36Sopenharmony_ci	std	r17,-120(r1)
32962306a36Sopenharmony_ci.globl	_savegpr0_18
33062306a36Sopenharmony_ci_savegpr0_18:
33162306a36Sopenharmony_ci	std	r18,-112(r1)
33262306a36Sopenharmony_ci.globl	_savegpr0_19
33362306a36Sopenharmony_ci_savegpr0_19:
33462306a36Sopenharmony_ci	std	r19,-104(r1)
33562306a36Sopenharmony_ci.globl	_savegpr0_20
33662306a36Sopenharmony_ci_savegpr0_20:
33762306a36Sopenharmony_ci	std	r20,-96(r1)
33862306a36Sopenharmony_ci.globl	_savegpr0_21
33962306a36Sopenharmony_ci_savegpr0_21:
34062306a36Sopenharmony_ci	std	r21,-88(r1)
34162306a36Sopenharmony_ci.globl	_savegpr0_22
34262306a36Sopenharmony_ci_savegpr0_22:
34362306a36Sopenharmony_ci	std	r22,-80(r1)
34462306a36Sopenharmony_ci.globl	_savegpr0_23
34562306a36Sopenharmony_ci_savegpr0_23:
34662306a36Sopenharmony_ci	std	r23,-72(r1)
34762306a36Sopenharmony_ci.globl	_savegpr0_24
34862306a36Sopenharmony_ci_savegpr0_24:
34962306a36Sopenharmony_ci	std	r24,-64(r1)
35062306a36Sopenharmony_ci.globl	_savegpr0_25
35162306a36Sopenharmony_ci_savegpr0_25:
35262306a36Sopenharmony_ci	std	r25,-56(r1)
35362306a36Sopenharmony_ci.globl	_savegpr0_26
35462306a36Sopenharmony_ci_savegpr0_26:
35562306a36Sopenharmony_ci	std	r26,-48(r1)
35662306a36Sopenharmony_ci.globl	_savegpr0_27
35762306a36Sopenharmony_ci_savegpr0_27:
35862306a36Sopenharmony_ci	std	r27,-40(r1)
35962306a36Sopenharmony_ci.globl	_savegpr0_28
36062306a36Sopenharmony_ci_savegpr0_28:
36162306a36Sopenharmony_ci	std	r28,-32(r1)
36262306a36Sopenharmony_ci.globl	_savegpr0_29
36362306a36Sopenharmony_ci_savegpr0_29:
36462306a36Sopenharmony_ci	std	r29,-24(r1)
36562306a36Sopenharmony_ci.globl	_savegpr0_30
36662306a36Sopenharmony_ci_savegpr0_30:
36762306a36Sopenharmony_ci	std	r30,-16(r1)
36862306a36Sopenharmony_ci.globl	_savegpr0_31
36962306a36Sopenharmony_ci_savegpr0_31:
37062306a36Sopenharmony_ci	std	r31,-8(r1)
37162306a36Sopenharmony_ci	std	r0,16(r1)
37262306a36Sopenharmony_ci	blr
37362306a36Sopenharmony_ci
37462306a36Sopenharmony_ci.globl	_restgpr0_14
37562306a36Sopenharmony_ci_restgpr0_14:
37662306a36Sopenharmony_ci	ld	r14,-144(r1)
37762306a36Sopenharmony_ci.globl	_restgpr0_15
37862306a36Sopenharmony_ci_restgpr0_15:
37962306a36Sopenharmony_ci	ld	r15,-136(r1)
38062306a36Sopenharmony_ci.globl	_restgpr0_16
38162306a36Sopenharmony_ci_restgpr0_16:
38262306a36Sopenharmony_ci	ld	r16,-128(r1)
38362306a36Sopenharmony_ci.globl	_restgpr0_17
38462306a36Sopenharmony_ci_restgpr0_17:
38562306a36Sopenharmony_ci	ld	r17,-120(r1)
38662306a36Sopenharmony_ci.globl	_restgpr0_18
38762306a36Sopenharmony_ci_restgpr0_18:
38862306a36Sopenharmony_ci	ld	r18,-112(r1)
38962306a36Sopenharmony_ci.globl	_restgpr0_19
39062306a36Sopenharmony_ci_restgpr0_19:
39162306a36Sopenharmony_ci	ld	r19,-104(r1)
39262306a36Sopenharmony_ci.globl	_restgpr0_20
39362306a36Sopenharmony_ci_restgpr0_20:
39462306a36Sopenharmony_ci	ld	r20,-96(r1)
39562306a36Sopenharmony_ci.globl	_restgpr0_21
39662306a36Sopenharmony_ci_restgpr0_21:
39762306a36Sopenharmony_ci	ld	r21,-88(r1)
39862306a36Sopenharmony_ci.globl	_restgpr0_22
39962306a36Sopenharmony_ci_restgpr0_22:
40062306a36Sopenharmony_ci	ld	r22,-80(r1)
40162306a36Sopenharmony_ci.globl	_restgpr0_23
40262306a36Sopenharmony_ci_restgpr0_23:
40362306a36Sopenharmony_ci	ld	r23,-72(r1)
40462306a36Sopenharmony_ci.globl	_restgpr0_24
40562306a36Sopenharmony_ci_restgpr0_24:
40662306a36Sopenharmony_ci	ld	r24,-64(r1)
40762306a36Sopenharmony_ci.globl	_restgpr0_25
40862306a36Sopenharmony_ci_restgpr0_25:
40962306a36Sopenharmony_ci	ld	r25,-56(r1)
41062306a36Sopenharmony_ci.globl	_restgpr0_26
41162306a36Sopenharmony_ci_restgpr0_26:
41262306a36Sopenharmony_ci	ld	r26,-48(r1)
41362306a36Sopenharmony_ci.globl	_restgpr0_27
41462306a36Sopenharmony_ci_restgpr0_27:
41562306a36Sopenharmony_ci	ld	r27,-40(r1)
41662306a36Sopenharmony_ci.globl	_restgpr0_28
41762306a36Sopenharmony_ci_restgpr0_28:
41862306a36Sopenharmony_ci	ld	r28,-32(r1)
41962306a36Sopenharmony_ci.globl	_restgpr0_29
42062306a36Sopenharmony_ci_restgpr0_29:
42162306a36Sopenharmony_ci	ld	r0,16(r1)
42262306a36Sopenharmony_ci	ld	r29,-24(r1)
42362306a36Sopenharmony_ci	mtlr	r0
42462306a36Sopenharmony_ci	ld	r30,-16(r1)
42562306a36Sopenharmony_ci	ld	r31,-8(r1)
42662306a36Sopenharmony_ci	blr
42762306a36Sopenharmony_ci
42862306a36Sopenharmony_ci.globl	_restgpr0_30
42962306a36Sopenharmony_ci_restgpr0_30:
43062306a36Sopenharmony_ci	ld	r30,-16(r1)
43162306a36Sopenharmony_ci.globl	_restgpr0_31
43262306a36Sopenharmony_ci_restgpr0_31:
43362306a36Sopenharmony_ci	ld	r0,16(r1)
43462306a36Sopenharmony_ci	ld	r31,-8(r1)
43562306a36Sopenharmony_ci	mtlr	r0
43662306a36Sopenharmony_ci	blr
43762306a36Sopenharmony_ci
43862306a36Sopenharmony_ci#ifdef CONFIG_ALTIVEC
43962306a36Sopenharmony_ci/* Called with r0 pointing just beyond the end of the vector save area.  */
44062306a36Sopenharmony_ci
44162306a36Sopenharmony_ci.globl	_savevr_20
44262306a36Sopenharmony_ci_savevr_20:
44362306a36Sopenharmony_ci	li	r12,-192
44462306a36Sopenharmony_ci	stvx	v20,r12,r0
44562306a36Sopenharmony_ci.globl	_savevr_21
44662306a36Sopenharmony_ci_savevr_21:
44762306a36Sopenharmony_ci	li	r12,-176
44862306a36Sopenharmony_ci	stvx	v21,r12,r0
44962306a36Sopenharmony_ci.globl	_savevr_22
45062306a36Sopenharmony_ci_savevr_22:
45162306a36Sopenharmony_ci	li	r12,-160
45262306a36Sopenharmony_ci	stvx	v22,r12,r0
45362306a36Sopenharmony_ci.globl	_savevr_23
45462306a36Sopenharmony_ci_savevr_23:
45562306a36Sopenharmony_ci	li	r12,-144
45662306a36Sopenharmony_ci	stvx	v23,r12,r0
45762306a36Sopenharmony_ci.globl	_savevr_24
45862306a36Sopenharmony_ci_savevr_24:
45962306a36Sopenharmony_ci	li	r12,-128
46062306a36Sopenharmony_ci	stvx	v24,r12,r0
46162306a36Sopenharmony_ci.globl	_savevr_25
46262306a36Sopenharmony_ci_savevr_25:
46362306a36Sopenharmony_ci	li	r12,-112
46462306a36Sopenharmony_ci	stvx	v25,r12,r0
46562306a36Sopenharmony_ci.globl	_savevr_26
46662306a36Sopenharmony_ci_savevr_26:
46762306a36Sopenharmony_ci	li	r12,-96
46862306a36Sopenharmony_ci	stvx	v26,r12,r0
46962306a36Sopenharmony_ci.globl	_savevr_27
47062306a36Sopenharmony_ci_savevr_27:
47162306a36Sopenharmony_ci	li	r12,-80
47262306a36Sopenharmony_ci	stvx	v27,r12,r0
47362306a36Sopenharmony_ci.globl	_savevr_28
47462306a36Sopenharmony_ci_savevr_28:
47562306a36Sopenharmony_ci	li	r12,-64
47662306a36Sopenharmony_ci	stvx	v28,r12,r0
47762306a36Sopenharmony_ci.globl	_savevr_29
47862306a36Sopenharmony_ci_savevr_29:
47962306a36Sopenharmony_ci	li	r12,-48
48062306a36Sopenharmony_ci	stvx	v29,r12,r0
48162306a36Sopenharmony_ci.globl	_savevr_30
48262306a36Sopenharmony_ci_savevr_30:
48362306a36Sopenharmony_ci	li	r12,-32
48462306a36Sopenharmony_ci	stvx	v30,r12,r0
48562306a36Sopenharmony_ci.globl	_savevr_31
48662306a36Sopenharmony_ci_savevr_31:
48762306a36Sopenharmony_ci	li	r12,-16
48862306a36Sopenharmony_ci	stvx	v31,r12,r0
48962306a36Sopenharmony_ci	blr
49062306a36Sopenharmony_ci
49162306a36Sopenharmony_ci.globl	_restvr_20
49262306a36Sopenharmony_ci_restvr_20:
49362306a36Sopenharmony_ci	li	r12,-192
49462306a36Sopenharmony_ci	lvx	v20,r12,r0
49562306a36Sopenharmony_ci.globl	_restvr_21
49662306a36Sopenharmony_ci_restvr_21:
49762306a36Sopenharmony_ci	li	r12,-176
49862306a36Sopenharmony_ci	lvx	v21,r12,r0
49962306a36Sopenharmony_ci.globl	_restvr_22
50062306a36Sopenharmony_ci_restvr_22:
50162306a36Sopenharmony_ci	li	r12,-160
50262306a36Sopenharmony_ci	lvx	v22,r12,r0
50362306a36Sopenharmony_ci.globl	_restvr_23
50462306a36Sopenharmony_ci_restvr_23:
50562306a36Sopenharmony_ci	li	r12,-144
50662306a36Sopenharmony_ci	lvx	v23,r12,r0
50762306a36Sopenharmony_ci.globl	_restvr_24
50862306a36Sopenharmony_ci_restvr_24:
50962306a36Sopenharmony_ci	li	r12,-128
51062306a36Sopenharmony_ci	lvx	v24,r12,r0
51162306a36Sopenharmony_ci.globl	_restvr_25
51262306a36Sopenharmony_ci_restvr_25:
51362306a36Sopenharmony_ci	li	r12,-112
51462306a36Sopenharmony_ci	lvx	v25,r12,r0
51562306a36Sopenharmony_ci.globl	_restvr_26
51662306a36Sopenharmony_ci_restvr_26:
51762306a36Sopenharmony_ci	li	r12,-96
51862306a36Sopenharmony_ci	lvx	v26,r12,r0
51962306a36Sopenharmony_ci.globl	_restvr_27
52062306a36Sopenharmony_ci_restvr_27:
52162306a36Sopenharmony_ci	li	r12,-80
52262306a36Sopenharmony_ci	lvx	v27,r12,r0
52362306a36Sopenharmony_ci.globl	_restvr_28
52462306a36Sopenharmony_ci_restvr_28:
52562306a36Sopenharmony_ci	li	r12,-64
52662306a36Sopenharmony_ci	lvx	v28,r12,r0
52762306a36Sopenharmony_ci.globl	_restvr_29
52862306a36Sopenharmony_ci_restvr_29:
52962306a36Sopenharmony_ci	li	r12,-48
53062306a36Sopenharmony_ci	lvx	v29,r12,r0
53162306a36Sopenharmony_ci.globl	_restvr_30
53262306a36Sopenharmony_ci_restvr_30:
53362306a36Sopenharmony_ci	li	r12,-32
53462306a36Sopenharmony_ci	lvx	v30,r12,r0
53562306a36Sopenharmony_ci.globl	_restvr_31
53662306a36Sopenharmony_ci_restvr_31:
53762306a36Sopenharmony_ci	li	r12,-16
53862306a36Sopenharmony_ci	lvx	v31,r12,r0
53962306a36Sopenharmony_ci	blr
54062306a36Sopenharmony_ci
54162306a36Sopenharmony_ci#endif /* CONFIG_ALTIVEC */
54262306a36Sopenharmony_ci
54362306a36Sopenharmony_ci#endif /* CONFIG_PPC64 */
54462306a36Sopenharmony_ci
54562306a36Sopenharmony_ci#endif
546