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