xref: /rk3399_rockchip-uboot/arch/arc/lib/_millicodethunk.S (revision e1cc4d31f889428a4ca73120951389c756404184)
1*a67ef280SAlexey Brodkin/*
2*a67ef280SAlexey Brodkin * Copyright (C) 1995, 1997, 2007-2013 Free Software Foundation, Inc.
3*a67ef280SAlexey Brodkin *
4*a67ef280SAlexey Brodkin * SPDX-License-Identifier:	GPL-2.0+
5*a67ef280SAlexey Brodkin */
6*a67ef280SAlexey Brodkin
7*a67ef280SAlexey Brodkin /* ANSI concatenation macros.  */
8*a67ef280SAlexey Brodkin
9*a67ef280SAlexey Brodkin #define CONCAT1(a, b) CONCAT2(a, b)
10*a67ef280SAlexey Brodkin #define CONCAT2(a, b) a ## b
11*a67ef280SAlexey Brodkin
12*a67ef280SAlexey Brodkin /* Use the right prefix for global labels.  */
13*a67ef280SAlexey Brodkin
14*a67ef280SAlexey Brodkin #define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
15*a67ef280SAlexey Brodkin
16*a67ef280SAlexey Brodkin#ifndef WORKING_ASSEMBLER
17*a67ef280SAlexey Brodkin#define abs_l abs
18*a67ef280SAlexey Brodkin#define asl_l asl
19*a67ef280SAlexey Brodkin#define mov_l mov
20*a67ef280SAlexey Brodkin#endif
21*a67ef280SAlexey Brodkin
22*a67ef280SAlexey Brodkin#define FUNC(X)         .type SYM(X),@function
23*a67ef280SAlexey Brodkin#define HIDDEN_FUNC(X)	FUNC(X)` .hidden X
24*a67ef280SAlexey Brodkin#define ENDFUNC0(X)     .Lfe_##X: .size X,.Lfe_##X-X
25*a67ef280SAlexey Brodkin#define ENDFUNC(X)      ENDFUNC0(X)
26*a67ef280SAlexey Brodkin
27*a67ef280SAlexey Brodkin	.section .text
28*a67ef280SAlexey Brodkin	.align 4
29*a67ef280SAlexey Brodkin	.global SYM(__st_r13_to_r15)
30*a67ef280SAlexey Brodkin	.global SYM(__st_r13_to_r16)
31*a67ef280SAlexey Brodkin	.global SYM(__st_r13_to_r17)
32*a67ef280SAlexey Brodkin	.global SYM(__st_r13_to_r18)
33*a67ef280SAlexey Brodkin	.global SYM(__st_r13_to_r19)
34*a67ef280SAlexey Brodkin	.global SYM(__st_r13_to_r20)
35*a67ef280SAlexey Brodkin	.global SYM(__st_r13_to_r21)
36*a67ef280SAlexey Brodkin	.global SYM(__st_r13_to_r22)
37*a67ef280SAlexey Brodkin	.global SYM(__st_r13_to_r23)
38*a67ef280SAlexey Brodkin	.global SYM(__st_r13_to_r24)
39*a67ef280SAlexey Brodkin	.global SYM(__st_r13_to_r25)
40*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__st_r13_to_r15)
41*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__st_r13_to_r16)
42*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__st_r13_to_r17)
43*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__st_r13_to_r18)
44*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__st_r13_to_r19)
45*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__st_r13_to_r20)
46*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__st_r13_to_r21)
47*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__st_r13_to_r22)
48*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__st_r13_to_r23)
49*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__st_r13_to_r24)
50*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__st_r13_to_r25)
51*a67ef280SAlexey Brodkin	.align 4
52*a67ef280SAlexey BrodkinSYM(__st_r13_to_r25):
53*a67ef280SAlexey Brodkin	st r25, [sp,48]
54*a67ef280SAlexey BrodkinSYM(__st_r13_to_r24):
55*a67ef280SAlexey Brodkin	st r24, [sp,44]
56*a67ef280SAlexey BrodkinSYM(__st_r13_to_r23):
57*a67ef280SAlexey Brodkin	st r23, [sp,40]
58*a67ef280SAlexey BrodkinSYM(__st_r13_to_r22):
59*a67ef280SAlexey Brodkin	st r22, [sp,36]
60*a67ef280SAlexey BrodkinSYM(__st_r13_to_r21):
61*a67ef280SAlexey Brodkin	st r21, [sp,32]
62*a67ef280SAlexey BrodkinSYM(__st_r13_to_r20):
63*a67ef280SAlexey Brodkin	st r20, [sp,28]
64*a67ef280SAlexey BrodkinSYM(__st_r13_to_r19):
65*a67ef280SAlexey Brodkin	st r19, [sp,24]
66*a67ef280SAlexey BrodkinSYM(__st_r13_to_r18):
67*a67ef280SAlexey Brodkin	st r18, [sp,20]
68*a67ef280SAlexey BrodkinSYM(__st_r13_to_r17):
69*a67ef280SAlexey Brodkin	st r17, [sp,16]
70*a67ef280SAlexey BrodkinSYM(__st_r13_to_r16):
71*a67ef280SAlexey Brodkin	st r16, [sp,12]
72*a67ef280SAlexey BrodkinSYM(__st_r13_to_r15):
73*a67ef280SAlexey Brodkin#ifdef __ARC700__
74*a67ef280SAlexey Brodkin	st r15, [sp,8] ; minimum function size to avoid stall: 6 bytes.
75*a67ef280SAlexey Brodkin#else
76*a67ef280SAlexey Brodkin	st_s r15, [sp,8]
77*a67ef280SAlexey Brodkin#endif
78*a67ef280SAlexey Brodkin	st_s r14, [sp,4]
79*a67ef280SAlexey Brodkin	j_s.d [%blink]
80*a67ef280SAlexey Brodkin	st_s r13, [sp,0]
81*a67ef280SAlexey Brodkin	ENDFUNC(__st_r13_to_r15)
82*a67ef280SAlexey Brodkin	ENDFUNC(__st_r13_to_r16)
83*a67ef280SAlexey Brodkin	ENDFUNC(__st_r13_to_r17)
84*a67ef280SAlexey Brodkin	ENDFUNC(__st_r13_to_r18)
85*a67ef280SAlexey Brodkin	ENDFUNC(__st_r13_to_r19)
86*a67ef280SAlexey Brodkin	ENDFUNC(__st_r13_to_r20)
87*a67ef280SAlexey Brodkin	ENDFUNC(__st_r13_to_r21)
88*a67ef280SAlexey Brodkin	ENDFUNC(__st_r13_to_r22)
89*a67ef280SAlexey Brodkin	ENDFUNC(__st_r13_to_r23)
90*a67ef280SAlexey Brodkin	ENDFUNC(__st_r13_to_r24)
91*a67ef280SAlexey Brodkin	ENDFUNC(__st_r13_to_r25)
92*a67ef280SAlexey Brodkin
93*a67ef280SAlexey Brodkin	.section .text
94*a67ef280SAlexey Brodkin	.align 4
95*a67ef280SAlexey Brodkin;	==================================
96*a67ef280SAlexey Brodkin;	the loads
97*a67ef280SAlexey Brodkin
98*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r15)
99*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r16)
100*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r17)
101*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r18)
102*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r19)
103*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r20)
104*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r21)
105*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r22)
106*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r23)
107*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r24)
108*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r25)
109*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r15)
110*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r16)
111*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r17)
112*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r18)
113*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r19)
114*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r20)
115*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r21)
116*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r22)
117*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r23)
118*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r24)
119*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r25)
120*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r25):
121*a67ef280SAlexey Brodkin	ld r25, [sp,48]
122*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r24):
123*a67ef280SAlexey Brodkin	ld r24, [sp,44]
124*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r23):
125*a67ef280SAlexey Brodkin	ld r23, [sp,40]
126*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r22):
127*a67ef280SAlexey Brodkin	ld r22, [sp,36]
128*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r21):
129*a67ef280SAlexey Brodkin	ld r21, [sp,32]
130*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r20):
131*a67ef280SAlexey Brodkin	ld r20, [sp,28]
132*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r19):
133*a67ef280SAlexey Brodkin	ld r19, [sp,24]
134*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r18):
135*a67ef280SAlexey Brodkin	ld r18, [sp,20]
136*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r17):
137*a67ef280SAlexey Brodkin	ld r17, [sp,16]
138*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r16):
139*a67ef280SAlexey Brodkin	ld r16, [sp,12]
140*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r15):
141*a67ef280SAlexey Brodkin#ifdef __ARC700__
142*a67ef280SAlexey Brodkin	ld r15, [sp,8] ; minimum function size to avoid stall: 6 bytes.
143*a67ef280SAlexey Brodkin#else
144*a67ef280SAlexey Brodkin	ld_s r15, [sp,8]
145*a67ef280SAlexey Brodkin#endif
146*a67ef280SAlexey Brodkin	ld_s r14, [sp,4]
147*a67ef280SAlexey Brodkin	j_s.d [%blink]
148*a67ef280SAlexey Brodkin	ld_s r13, [sp,0]
149*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r15)
150*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r16)
151*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r17)
152*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r18)
153*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r19)
154*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r20)
155*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r21)
156*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r22)
157*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r23)
158*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r24)
159*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r25)
160*a67ef280SAlexey Brodkin
161*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r14_ret)
162*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r15_ret)
163*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r16_ret)
164*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r17_ret)
165*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r18_ret)
166*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r19_ret)
167*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r20_ret)
168*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r21_ret)
169*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r22_ret)
170*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r23_ret)
171*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r24_ret)
172*a67ef280SAlexey Brodkin	.global SYM(__ld_r13_to_r25_ret)
173*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r14_ret)
174*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r15_ret)
175*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r16_ret)
176*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r17_ret)
177*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r18_ret)
178*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r19_ret)
179*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r20_ret)
180*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r21_ret)
181*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r22_ret)
182*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r23_ret)
183*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r24_ret)
184*a67ef280SAlexey Brodkin	HIDDEN_FUNC(__ld_r13_to_r25_ret)
185*a67ef280SAlexey Brodkin	.section .text
186*a67ef280SAlexey Brodkin	.align 4
187*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r25_ret):
188*a67ef280SAlexey Brodkin	ld r25, [sp,48]
189*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r24_ret):
190*a67ef280SAlexey Brodkin	ld r24, [sp,44]
191*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r23_ret):
192*a67ef280SAlexey Brodkin	ld r23, [sp,40]
193*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r22_ret):
194*a67ef280SAlexey Brodkin	ld r22, [sp,36]
195*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r21_ret):
196*a67ef280SAlexey Brodkin	ld r21, [sp,32]
197*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r20_ret):
198*a67ef280SAlexey Brodkin	ld r20, [sp,28]
199*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r19_ret):
200*a67ef280SAlexey Brodkin	ld r19, [sp,24]
201*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r18_ret):
202*a67ef280SAlexey Brodkin	ld r18, [sp,20]
203*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r17_ret):
204*a67ef280SAlexey Brodkin	ld r17, [sp,16]
205*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r16_ret):
206*a67ef280SAlexey Brodkin	ld r16, [sp,12]
207*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r15_ret):
208*a67ef280SAlexey Brodkin	ld r15, [sp,8]
209*a67ef280SAlexey BrodkinSYM(__ld_r13_to_r14_ret):
210*a67ef280SAlexey Brodkin	ld blink,[sp,r12]
211*a67ef280SAlexey Brodkin	ld_s r14, [sp,4]
212*a67ef280SAlexey Brodkin	ld.ab r13, [sp,r12]
213*a67ef280SAlexey Brodkin	j_s.d [%blink]
214*a67ef280SAlexey Brodkin	add_s sp,sp,4
215*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r14_ret)
216*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r15_ret)
217*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r16_ret)
218*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r17_ret)
219*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r18_ret)
220*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r19_ret)
221*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r20_ret)
222*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r21_ret)
223*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r22_ret)
224*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r23_ret)
225*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r24_ret)
226*a67ef280SAlexey Brodkin	ENDFUNC(__ld_r13_to_r25_ret)
227