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