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