xref: /linux/arch/sparc/lib/Memcpy_utils.S (revision 6093a688a07da07808f0122f9aa2a3eed250d853)
1#ifndef __ASM_MEMCPY_UTILS
2#define __ASM_MEMCPY_UTILS
3
4#include <linux/linkage.h>
5#include <asm/asi.h>
6#include <asm/visasm.h>
7
8ENTRY(__restore_asi_fp)
9	VISExitHalf
10	retl
11	 wr	%g0, ASI_AIUS, %asi
12ENDPROC(__restore_asi_fp)
13
14ENTRY(__restore_asi)
15	retl
16	 wr	%g0, ASI_AIUS, %asi
17ENDPROC(__restore_asi)
18
19ENTRY(memcpy_retl_o2)
20	ba,pt	%xcc, __restore_asi
21	 mov	%o2, %o0
22ENDPROC(memcpy_retl_o2)
23ENTRY(memcpy_retl_o2_plus_1)
24	ba,pt	%xcc, __restore_asi
25	 add	%o2, 1, %o0
26ENDPROC(memcpy_retl_o2_plus_1)
27ENTRY(memcpy_retl_o2_plus_3)
28	ba,pt	%xcc, __restore_asi
29	 add	%o2, 3, %o0
30ENDPROC(memcpy_retl_o2_plus_3)
31ENTRY(memcpy_retl_o2_plus_4)
32	ba,pt	%xcc, __restore_asi
33	 add	%o2, 4, %o0
34ENDPROC(memcpy_retl_o2_plus_4)
35ENTRY(memcpy_retl_o2_plus_5)
36	ba,pt	%xcc, __restore_asi
37	 add	%o2, 5, %o0
38ENDPROC(memcpy_retl_o2_plus_5)
39ENTRY(memcpy_retl_o2_plus_6)
40	ba,pt	%xcc, __restore_asi
41	 add	%o2, 6, %o0
42ENDPROC(memcpy_retl_o2_plus_6)
43ENTRY(memcpy_retl_o2_plus_7)
44	ba,pt	%xcc, __restore_asi
45	 add	%o2, 7, %o0
46ENDPROC(memcpy_retl_o2_plus_7)
47ENTRY(memcpy_retl_o2_plus_8)
48	ba,pt	%xcc, __restore_asi
49	 add	%o2, 8, %o0
50ENDPROC(memcpy_retl_o2_plus_8)
51ENTRY(memcpy_retl_o2_plus_15)
52	ba,pt	%xcc, __restore_asi
53	 add	%o2, 15, %o0
54ENDPROC(memcpy_retl_o2_plus_15)
55ENTRY(memcpy_retl_o2_plus_15_8)
56	 add	%o2, 15, %o2
57	ba,pt	%xcc, __restore_asi
58	 add	%o2, 8, %o0
59ENDPROC(memcpy_retl_o2_plus_15_8)
60ENTRY(memcpy_retl_o2_plus_16)
61	ba,pt	%xcc, __restore_asi
62	 add	%o2, 16, %o0
63ENDPROC(memcpy_retl_o2_plus_16)
64ENTRY(memcpy_retl_o2_plus_24)
65	ba,pt	%xcc, __restore_asi
66	 add	%o2, 24, %o0
67ENDPROC(memcpy_retl_o2_plus_24)
68ENTRY(memcpy_retl_o2_plus_31)
69	ba,pt	%xcc, __restore_asi
70	 add	%o2, 31, %o0
71ENDPROC(memcpy_retl_o2_plus_31)
72ENTRY(memcpy_retl_o2_plus_32)
73	ba,pt	%xcc, __restore_asi
74	 add	%o2, 32, %o0
75ENDPROC(memcpy_retl_o2_plus_32)
76ENTRY(memcpy_retl_o2_plus_31_32)
77	add	%o2, 31, %o2
78	ba,pt	%xcc, __restore_asi
79	 add	%o2, 32, %o0
80ENDPROC(memcpy_retl_o2_plus_31_32)
81ENTRY(memcpy_retl_o2_plus_31_24)
82	add	%o2, 31, %o2
83	ba,pt	%xcc, __restore_asi
84	 add	%o2, 24, %o0
85ENDPROC(memcpy_retl_o2_plus_31_24)
86ENTRY(memcpy_retl_o2_plus_31_16)
87	add	%o2, 31, %o2
88	ba,pt	%xcc, __restore_asi
89	 add	%o2, 16, %o0
90ENDPROC(memcpy_retl_o2_plus_31_16)
91ENTRY(memcpy_retl_o2_plus_31_8)
92	add	%o2, 31, %o2
93	ba,pt	%xcc, __restore_asi
94	 add	%o2, 8, %o0
95ENDPROC(memcpy_retl_o2_plus_31_8)
96ENTRY(memcpy_retl_o2_plus_63)
97	ba,pt	%xcc, __restore_asi
98	 add	%o2, 63, %o0
99ENDPROC(memcpy_retl_o2_plus_63)
100ENTRY(memcpy_retl_o2_plus_63_64)
101	 add	%o2, 63, %o2
102	ba,pt	%xcc, __restore_asi
103	 add	%o2, 64, %o0
104ENDPROC(memcpy_retl_o2_plus_63_64)
105ENTRY(memcpy_retl_o2_plus_63_56)
106	 add	%o2, 63, %o2
107	ba,pt	%xcc, __restore_asi
108	 add	%o2, 56, %o0
109ENDPROC(memcpy_retl_o2_plus_63_56)
110ENTRY(memcpy_retl_o2_plus_63_48)
111	 add	%o2, 63, %o2
112	ba,pt	%xcc, __restore_asi
113	 add	%o2, 48, %o0
114ENDPROC(memcpy_retl_o2_plus_63_48)
115ENTRY(memcpy_retl_o2_plus_63_40)
116	 add	%o2, 63, %o2
117	ba,pt	%xcc, __restore_asi
118	 add	%o2, 40, %o0
119ENDPROC(memcpy_retl_o2_plus_63_40)
120ENTRY(memcpy_retl_o2_plus_63_32)
121	 add	%o2, 63, %o2
122	ba,pt	%xcc, __restore_asi
123	 add	%o2, 32, %o0
124ENDPROC(memcpy_retl_o2_plus_63_32)
125ENTRY(memcpy_retl_o2_plus_63_24)
126	 add	%o2, 63, %o2
127	ba,pt	%xcc, __restore_asi
128	 add	%o2, 24, %o0
129ENDPROC(memcpy_retl_o2_plus_63_24)
130ENTRY(memcpy_retl_o2_plus_63_16)
131	 add	%o2, 63, %o2
132	ba,pt	%xcc, __restore_asi
133	 add	%o2, 16, %o0
134ENDPROC(memcpy_retl_o2_plus_63_16)
135ENTRY(memcpy_retl_o2_plus_63_8)
136	 add	%o2, 63, %o2
137	ba,pt	%xcc, __restore_asi
138	 add	%o2, 8, %o0
139ENDPROC(memcpy_retl_o2_plus_63_8)
140ENTRY(memcpy_retl_o2_plus_o3)
141	ba,pt	%xcc, __restore_asi
142	 add	%o2, %o3, %o0
143ENDPROC(memcpy_retl_o2_plus_o3)
144ENTRY(memcpy_retl_o2_plus_o3_plus_1)
145	add	%o3, 1, %o3
146	ba,pt	%xcc, __restore_asi
147	 add	%o2, %o3, %o0
148ENDPROC(memcpy_retl_o2_plus_o3_plus_1)
149ENTRY(memcpy_retl_o2_plus_o5)
150	ba,pt	%xcc, __restore_asi
151	 add	%o2, %o5, %o0
152ENDPROC(memcpy_retl_o2_plus_o5)
153ENTRY(memcpy_retl_o2_plus_o5_plus_1)
154	add	%o5, 1, %o5
155	ba,pt	%xcc, __restore_asi
156	 add	%o2, %o5, %o0
157ENDPROC(memcpy_retl_o2_plus_o5_plus_1)
158ENTRY(memcpy_retl_o2_plus_o5_plus_4)
159	add	%o5, 4, %o5
160	ba,pt	%xcc, __restore_asi
161	 add	%o2, %o5, %o0
162ENDPROC(memcpy_retl_o2_plus_o5_plus_4)
163ENTRY(memcpy_retl_o2_plus_o5_plus_8)
164	add	%o5, 8, %o5
165	ba,pt	%xcc, __restore_asi
166	 add	%o2, %o5, %o0
167ENDPROC(memcpy_retl_o2_plus_o5_plus_8)
168ENTRY(memcpy_retl_o2_plus_o5_plus_16)
169	add	%o5, 16, %o5
170	ba,pt	%xcc, __restore_asi
171	 add	%o2, %o5, %o0
172ENDPROC(memcpy_retl_o2_plus_o5_plus_16)
173ENTRY(memcpy_retl_o2_plus_o5_plus_24)
174	add	%o5, 24, %o5
175	ba,pt	%xcc, __restore_asi
176	 add	%o2, %o5, %o0
177ENDPROC(memcpy_retl_o2_plus_o5_plus_24)
178ENTRY(memcpy_retl_o2_plus_o5_plus_32)
179	add	%o5, 32, %o5
180	ba,pt	%xcc, __restore_asi
181	 add	%o2, %o5, %o0
182ENDPROC(memcpy_retl_o2_plus_o5_plus_32)
183ENTRY(memcpy_retl_o2_plus_o5_64)
184	add	%o5, 32, %o5
185	ba,pt	%xcc, __restore_asi
186	 add	%o2, %o5, %o0
187ENDPROC(memcpy_retl_o2_plus_o5_64)
188ENTRY(memcpy_retl_o2_plus_g1)
189	ba,pt	%xcc, __restore_asi
190	 add	%o2, %g1, %o0
191ENDPROC(memcpy_retl_o2_plus_g1)
192ENTRY(memcpy_retl_o2_plus_g1_plus_1)
193	add	%g1, 1, %g1
194	ba,pt	%xcc, __restore_asi
195	 add	%o2, %g1, %o0
196ENDPROC(memcpy_retl_o2_plus_g1_plus_1)
197ENTRY(memcpy_retl_o2_plus_g1_plus_8)
198	add	%g1, 8, %g1
199	ba,pt	%xcc, __restore_asi
200	 add	%o2, %g1, %o0
201ENDPROC(memcpy_retl_o2_plus_g1_plus_8)
202ENTRY(memcpy_retl_o2_plus_o4)
203	ba,pt	%xcc, __restore_asi
204	 add	%o2, %o4, %o0
205ENDPROC(memcpy_retl_o2_plus_o4)
206ENTRY(memcpy_retl_o2_plus_o4_plus_8)
207	add	%o4, 8, %o4
208	ba,pt	%xcc, __restore_asi
209	 add	%o2, %o4, %o0
210ENDPROC(memcpy_retl_o2_plus_o4_plus_8)
211ENTRY(memcpy_retl_o2_plus_o4_plus_16)
212	add	%o4, 16, %o4
213	ba,pt	%xcc, __restore_asi
214	 add	%o2, %o4, %o0
215ENDPROC(memcpy_retl_o2_plus_o4_plus_16)
216ENTRY(memcpy_retl_o2_plus_o4_plus_24)
217	add	%o4, 24, %o4
218	ba,pt	%xcc, __restore_asi
219	 add	%o2, %o4, %o0
220ENDPROC(memcpy_retl_o2_plus_o4_plus_24)
221ENTRY(memcpy_retl_o2_plus_o4_plus_32)
222	add	%o4, 32, %o4
223	ba,pt	%xcc, __restore_asi
224	 add	%o2, %o4, %o0
225ENDPROC(memcpy_retl_o2_plus_o4_plus_32)
226ENTRY(memcpy_retl_o2_plus_o4_plus_40)
227	add	%o4, 40, %o4
228	ba,pt	%xcc, __restore_asi
229	 add	%o2, %o4, %o0
230ENDPROC(memcpy_retl_o2_plus_o4_plus_40)
231ENTRY(memcpy_retl_o2_plus_o4_plus_48)
232	add	%o4, 48, %o4
233	ba,pt	%xcc, __restore_asi
234	 add	%o2, %o4, %o0
235ENDPROC(memcpy_retl_o2_plus_o4_plus_48)
236ENTRY(memcpy_retl_o2_plus_o4_plus_56)
237	add	%o4, 56, %o4
238	ba,pt	%xcc, __restore_asi
239	 add	%o2, %o4, %o0
240ENDPROC(memcpy_retl_o2_plus_o4_plus_56)
241ENTRY(memcpy_retl_o2_plus_o4_plus_64)
242	add	%o4, 64, %o4
243	ba,pt	%xcc, __restore_asi
244	 add	%o2, %o4, %o0
245ENDPROC(memcpy_retl_o2_plus_o4_plus_64)
246ENTRY(memcpy_retl_o2_plus_o5_plus_64)
247	add	%o5, 64, %o5
248	ba,pt	%xcc, __restore_asi
249	 add	%o2, %o5, %o0
250ENDPROC(memcpy_retl_o2_plus_o5_plus_64)
251ENTRY(memcpy_retl_o2_plus_o3_fp)
252	ba,pt	%xcc, __restore_asi_fp
253	 add	%o2, %o3, %o0
254ENDPROC(memcpy_retl_o2_plus_o3_fp)
255ENTRY(memcpy_retl_o2_plus_o3_plus_1_fp)
256	add	%o3, 1, %o3
257	ba,pt	%xcc, __restore_asi_fp
258	 add	%o2, %o3, %o0
259ENDPROC(memcpy_retl_o2_plus_o3_plus_1_fp)
260ENTRY(memcpy_retl_o2_plus_o3_plus_4_fp)
261	add	%o3, 4, %o3
262	ba,pt	%xcc, __restore_asi_fp
263	 add	%o2, %o3, %o0
264ENDPROC(memcpy_retl_o2_plus_o3_plus_4_fp)
265ENTRY(memcpy_retl_o2_plus_o4_fp)
266	ba,pt	%xcc, __restore_asi_fp
267	 add	%o2, %o4, %o0
268ENDPROC(memcpy_retl_o2_plus_o4_fp)
269ENTRY(memcpy_retl_o2_plus_o4_plus_8_fp)
270	add	%o4, 8, %o4
271	ba,pt	%xcc, __restore_asi_fp
272	 add	%o2, %o4, %o0
273ENDPROC(memcpy_retl_o2_plus_o4_plus_8_fp)
274ENTRY(memcpy_retl_o2_plus_o4_plus_16_fp)
275	add	%o4, 16, %o4
276	ba,pt	%xcc, __restore_asi_fp
277	 add	%o2, %o4, %o0
278ENDPROC(memcpy_retl_o2_plus_o4_plus_16_fp)
279ENTRY(memcpy_retl_o2_plus_o4_plus_24_fp)
280	add	%o4, 24, %o4
281	ba,pt	%xcc, __restore_asi_fp
282	 add	%o2, %o4, %o0
283ENDPROC(memcpy_retl_o2_plus_o4_plus_24_fp)
284ENTRY(memcpy_retl_o2_plus_o4_plus_32_fp)
285	add	%o4, 32, %o4
286	ba,pt	%xcc, __restore_asi_fp
287	 add	%o2, %o4, %o0
288ENDPROC(memcpy_retl_o2_plus_o4_plus_32_fp)
289ENTRY(memcpy_retl_o2_plus_o4_plus_40_fp)
290	add	%o4, 40, %o4
291	ba,pt	%xcc, __restore_asi_fp
292	 add	%o2, %o4, %o0
293ENDPROC(memcpy_retl_o2_plus_o4_plus_40_fp)
294ENTRY(memcpy_retl_o2_plus_o4_plus_48_fp)
295	add	%o4, 48, %o4
296	ba,pt	%xcc, __restore_asi_fp
297	 add	%o2, %o4, %o0
298ENDPROC(memcpy_retl_o2_plus_o4_plus_48_fp)
299ENTRY(memcpy_retl_o2_plus_o4_plus_56_fp)
300	add	%o4, 56, %o4
301	ba,pt	%xcc, __restore_asi_fp
302	 add	%o2, %o4, %o0
303ENDPROC(memcpy_retl_o2_plus_o4_plus_56_fp)
304ENTRY(memcpy_retl_o2_plus_o4_plus_64_fp)
305	add	%o4, 64, %o4
306	ba,pt	%xcc, __restore_asi_fp
307	 add	%o2, %o4, %o0
308ENDPROC(memcpy_retl_o2_plus_o4_plus_64_fp)
309ENTRY(memcpy_retl_o2_plus_o5_fp)
310	ba,pt	%xcc, __restore_asi_fp
311	 add	%o2, %o5, %o0
312ENDPROC(memcpy_retl_o2_plus_o5_fp)
313ENTRY(memcpy_retl_o2_plus_o5_plus_64_fp)
314	add	%o5, 64, %o5
315	ba,pt	%xcc, __restore_asi_fp
316	 add	%o2, %o5, %o0
317ENDPROC(memcpy_retl_o2_plus_o5_plus_64_fp)
318ENTRY(memcpy_retl_o2_plus_o5_plus_56_fp)
319	add	%o5, 56, %o5
320	ba,pt	%xcc, __restore_asi_fp
321	 add	%o2, %o5, %o0
322ENDPROC(memcpy_retl_o2_plus_o5_plus_56_fp)
323ENTRY(memcpy_retl_o2_plus_o5_plus_48_fp)
324	add	%o5, 48, %o5
325	ba,pt	%xcc, __restore_asi_fp
326	 add	%o2, %o5, %o0
327ENDPROC(memcpy_retl_o2_plus_o5_plus_48_fp)
328ENTRY(memcpy_retl_o2_plus_o5_plus_40_fp)
329	add	%o5, 40, %o5
330	ba,pt	%xcc, __restore_asi_fp
331	 add	%o2, %o5, %o0
332ENDPROC(memcpy_retl_o2_plus_o5_plus_40_fp)
333ENTRY(memcpy_retl_o2_plus_o5_plus_32_fp)
334	add	%o5, 32, %o5
335	ba,pt	%xcc, __restore_asi_fp
336	 add	%o2, %o5, %o0
337ENDPROC(memcpy_retl_o2_plus_o5_plus_32_fp)
338ENTRY(memcpy_retl_o2_plus_o5_plus_24_fp)
339	add	%o5, 24, %o5
340	ba,pt	%xcc, __restore_asi_fp
341	 add	%o2, %o5, %o0
342ENDPROC(memcpy_retl_o2_plus_o5_plus_24_fp)
343ENTRY(memcpy_retl_o2_plus_o5_plus_16_fp)
344	add	%o5, 16, %o5
345	ba,pt	%xcc, __restore_asi_fp
346	 add	%o2, %o5, %o0
347ENDPROC(memcpy_retl_o2_plus_o5_plus_16_fp)
348ENTRY(memcpy_retl_o2_plus_o5_plus_8_fp)
349	add	%o5, 8, %o5
350	ba,pt	%xcc, __restore_asi_fp
351	 add	%o2, %o5, %o0
352ENDPROC(memcpy_retl_o2_plus_o5_plus_8_fp)
353
354#endif
355