xref: /openbmc/linux/arch/sparc/lib/Memcpy_utils.S (revision e2c75e76)
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_o5)
141	ba,pt	%xcc, __restore_asi
142	 add	%o2, %o5, %o0
143ENDPROC(memcpy_retl_o2_plus_o5)
144ENTRY(memcpy_retl_o2_plus_o5_plus_1)
145	add	%o5, 1, %o5
146	ba,pt	%xcc, __restore_asi
147	 add	%o2, %o5, %o0
148ENDPROC(memcpy_retl_o2_plus_o5_plus_1)
149ENTRY(memcpy_retl_o2_plus_o5_plus_4)
150	add	%o5, 4, %o5
151	ba,pt	%xcc, __restore_asi
152	 add	%o2, %o5, %o0
153ENDPROC(memcpy_retl_o2_plus_o5_plus_4)
154ENTRY(memcpy_retl_o2_plus_o5_plus_8)
155	add	%o5, 8, %o5
156	ba,pt	%xcc, __restore_asi
157	 add	%o2, %o5, %o0
158ENDPROC(memcpy_retl_o2_plus_o5_plus_8)
159ENTRY(memcpy_retl_o2_plus_o5_plus_16)
160	add	%o5, 16, %o5
161	ba,pt	%xcc, __restore_asi
162	 add	%o2, %o5, %o0
163ENDPROC(memcpy_retl_o2_plus_o5_plus_16)
164ENTRY(memcpy_retl_o2_plus_o5_plus_24)
165	add	%o5, 24, %o5
166	ba,pt	%xcc, __restore_asi
167	 add	%o2, %o5, %o0
168ENDPROC(memcpy_retl_o2_plus_o5_plus_24)
169ENTRY(memcpy_retl_o2_plus_o5_plus_32)
170	add	%o5, 32, %o5
171	ba,pt	%xcc, __restore_asi
172	 add	%o2, %o5, %o0
173ENDPROC(memcpy_retl_o2_plus_o5_plus_32)
174ENTRY(memcpy_retl_o2_plus_o5_64)
175	add	%o5, 32, %o5
176	ba,pt	%xcc, __restore_asi
177	 add	%o2, %o5, %o0
178ENDPROC(memcpy_retl_o2_plus_o5_64)
179ENTRY(memcpy_retl_o2_plus_g1)
180	ba,pt	%xcc, __restore_asi
181	 add	%o2, %g1, %o0
182ENDPROC(memcpy_retl_o2_plus_g1)
183ENTRY(memcpy_retl_o2_plus_g1_plus_1)
184	add	%g1, 1, %g1
185	ba,pt	%xcc, __restore_asi
186	 add	%o2, %g1, %o0
187ENDPROC(memcpy_retl_o2_plus_g1_plus_1)
188ENTRY(memcpy_retl_o2_plus_g1_plus_8)
189	add	%g1, 8, %g1
190	ba,pt	%xcc, __restore_asi
191	 add	%o2, %g1, %o0
192ENDPROC(memcpy_retl_o2_plus_g1_plus_8)
193ENTRY(memcpy_retl_o2_plus_o4)
194	ba,pt	%xcc, __restore_asi
195	 add	%o2, %o4, %o0
196ENDPROC(memcpy_retl_o2_plus_o4)
197ENTRY(memcpy_retl_o2_plus_o4_plus_8)
198	add	%o4, 8, %o4
199	ba,pt	%xcc, __restore_asi
200	 add	%o2, %o4, %o0
201ENDPROC(memcpy_retl_o2_plus_o4_plus_8)
202ENTRY(memcpy_retl_o2_plus_o4_plus_16)
203	add	%o4, 16, %o4
204	ba,pt	%xcc, __restore_asi
205	 add	%o2, %o4, %o0
206ENDPROC(memcpy_retl_o2_plus_o4_plus_16)
207ENTRY(memcpy_retl_o2_plus_o4_plus_24)
208	add	%o4, 24, %o4
209	ba,pt	%xcc, __restore_asi
210	 add	%o2, %o4, %o0
211ENDPROC(memcpy_retl_o2_plus_o4_plus_24)
212ENTRY(memcpy_retl_o2_plus_o4_plus_32)
213	add	%o4, 32, %o4
214	ba,pt	%xcc, __restore_asi
215	 add	%o2, %o4, %o0
216ENDPROC(memcpy_retl_o2_plus_o4_plus_32)
217ENTRY(memcpy_retl_o2_plus_o4_plus_40)
218	add	%o4, 40, %o4
219	ba,pt	%xcc, __restore_asi
220	 add	%o2, %o4, %o0
221ENDPROC(memcpy_retl_o2_plus_o4_plus_40)
222ENTRY(memcpy_retl_o2_plus_o4_plus_48)
223	add	%o4, 48, %o4
224	ba,pt	%xcc, __restore_asi
225	 add	%o2, %o4, %o0
226ENDPROC(memcpy_retl_o2_plus_o4_plus_48)
227ENTRY(memcpy_retl_o2_plus_o4_plus_56)
228	add	%o4, 56, %o4
229	ba,pt	%xcc, __restore_asi
230	 add	%o2, %o4, %o0
231ENDPROC(memcpy_retl_o2_plus_o4_plus_56)
232ENTRY(memcpy_retl_o2_plus_o4_plus_64)
233	add	%o4, 64, %o4
234	ba,pt	%xcc, __restore_asi
235	 add	%o2, %o4, %o0
236ENDPROC(memcpy_retl_o2_plus_o4_plus_64)
237ENTRY(memcpy_retl_o2_plus_o5_plus_64)
238	add	%o5, 64, %o5
239	ba,pt	%xcc, __restore_asi
240	 add	%o2, %o5, %o0
241ENDPROC(memcpy_retl_o2_plus_o5_plus_64)
242ENTRY(memcpy_retl_o2_plus_o3_fp)
243	ba,pt	%xcc, __restore_asi_fp
244	 add	%o2, %o3, %o0
245ENDPROC(memcpy_retl_o2_plus_o3_fp)
246ENTRY(memcpy_retl_o2_plus_o3_plus_1_fp)
247	add	%o3, 1, %o3
248	ba,pt	%xcc, __restore_asi_fp
249	 add	%o2, %o3, %o0
250ENDPROC(memcpy_retl_o2_plus_o3_plus_1_fp)
251ENTRY(memcpy_retl_o2_plus_o3_plus_4_fp)
252	add	%o3, 4, %o3
253	ba,pt	%xcc, __restore_asi_fp
254	 add	%o2, %o3, %o0
255ENDPROC(memcpy_retl_o2_plus_o3_plus_4_fp)
256ENTRY(memcpy_retl_o2_plus_o4_fp)
257	ba,pt	%xcc, __restore_asi_fp
258	 add	%o2, %o4, %o0
259ENDPROC(memcpy_retl_o2_plus_o4_fp)
260ENTRY(memcpy_retl_o2_plus_o4_plus_8_fp)
261	add	%o4, 8, %o4
262	ba,pt	%xcc, __restore_asi_fp
263	 add	%o2, %o4, %o0
264ENDPROC(memcpy_retl_o2_plus_o4_plus_8_fp)
265ENTRY(memcpy_retl_o2_plus_o4_plus_16_fp)
266	add	%o4, 16, %o4
267	ba,pt	%xcc, __restore_asi_fp
268	 add	%o2, %o4, %o0
269ENDPROC(memcpy_retl_o2_plus_o4_plus_16_fp)
270ENTRY(memcpy_retl_o2_plus_o4_plus_24_fp)
271	add	%o4, 24, %o4
272	ba,pt	%xcc, __restore_asi_fp
273	 add	%o2, %o4, %o0
274ENDPROC(memcpy_retl_o2_plus_o4_plus_24_fp)
275ENTRY(memcpy_retl_o2_plus_o4_plus_32_fp)
276	add	%o4, 32, %o4
277	ba,pt	%xcc, __restore_asi_fp
278	 add	%o2, %o4, %o0
279ENDPROC(memcpy_retl_o2_plus_o4_plus_32_fp)
280ENTRY(memcpy_retl_o2_plus_o4_plus_40_fp)
281	add	%o4, 40, %o4
282	ba,pt	%xcc, __restore_asi_fp
283	 add	%o2, %o4, %o0
284ENDPROC(memcpy_retl_o2_plus_o4_plus_40_fp)
285ENTRY(memcpy_retl_o2_plus_o4_plus_48_fp)
286	add	%o4, 48, %o4
287	ba,pt	%xcc, __restore_asi_fp
288	 add	%o2, %o4, %o0
289ENDPROC(memcpy_retl_o2_plus_o4_plus_48_fp)
290ENTRY(memcpy_retl_o2_plus_o4_plus_56_fp)
291	add	%o4, 56, %o4
292	ba,pt	%xcc, __restore_asi_fp
293	 add	%o2, %o4, %o0
294ENDPROC(memcpy_retl_o2_plus_o4_plus_56_fp)
295ENTRY(memcpy_retl_o2_plus_o4_plus_64_fp)
296	add	%o4, 64, %o4
297	ba,pt	%xcc, __restore_asi_fp
298	 add	%o2, %o4, %o0
299ENDPROC(memcpy_retl_o2_plus_o4_plus_64_fp)
300ENTRY(memcpy_retl_o2_plus_o5_fp)
301	ba,pt	%xcc, __restore_asi_fp
302	 add	%o2, %o5, %o0
303ENDPROC(memcpy_retl_o2_plus_o5_fp)
304ENTRY(memcpy_retl_o2_plus_o5_plus_64_fp)
305	add	%o5, 64, %o5
306	ba,pt	%xcc, __restore_asi_fp
307	 add	%o2, %o5, %o0
308ENDPROC(memcpy_retl_o2_plus_o5_plus_64_fp)
309ENTRY(memcpy_retl_o2_plus_o5_plus_56_fp)
310	add	%o5, 56, %o5
311	ba,pt	%xcc, __restore_asi_fp
312	 add	%o2, %o5, %o0
313ENDPROC(memcpy_retl_o2_plus_o5_plus_56_fp)
314ENTRY(memcpy_retl_o2_plus_o5_plus_48_fp)
315	add	%o5, 48, %o5
316	ba,pt	%xcc, __restore_asi_fp
317	 add	%o2, %o5, %o0
318ENDPROC(memcpy_retl_o2_plus_o5_plus_48_fp)
319ENTRY(memcpy_retl_o2_plus_o5_plus_40_fp)
320	add	%o5, 40, %o5
321	ba,pt	%xcc, __restore_asi_fp
322	 add	%o2, %o5, %o0
323ENDPROC(memcpy_retl_o2_plus_o5_plus_40_fp)
324ENTRY(memcpy_retl_o2_plus_o5_plus_32_fp)
325	add	%o5, 32, %o5
326	ba,pt	%xcc, __restore_asi_fp
327	 add	%o2, %o5, %o0
328ENDPROC(memcpy_retl_o2_plus_o5_plus_32_fp)
329ENTRY(memcpy_retl_o2_plus_o5_plus_24_fp)
330	add	%o5, 24, %o5
331	ba,pt	%xcc, __restore_asi_fp
332	 add	%o2, %o5, %o0
333ENDPROC(memcpy_retl_o2_plus_o5_plus_24_fp)
334ENTRY(memcpy_retl_o2_plus_o5_plus_16_fp)
335	add	%o5, 16, %o5
336	ba,pt	%xcc, __restore_asi_fp
337	 add	%o2, %o5, %o0
338ENDPROC(memcpy_retl_o2_plus_o5_plus_16_fp)
339ENTRY(memcpy_retl_o2_plus_o5_plus_8_fp)
340	add	%o5, 8, %o5
341	ba,pt	%xcc, __restore_asi_fp
342	 add	%o2, %o5, %o0
343ENDPROC(memcpy_retl_o2_plus_o5_plus_8_fp)
344
345#endif
346