2 * arch/sparc64/lib/xor.S
4 * High speed xor_block operation for RAID4/5 utilizing the
5 * UltraSparc Visual Instruction Set.
7 * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
10 #include <asm/visasm.h>
13 #include <asm/spitfire.h>
17 * !(((long)dest | (long)sourceN) & (64 - 1)) &&
18 * !(len & 127) && len >= 256
23 .type xor_vis_2,#function
26 andcc %o5, FPRS_FEF|FPRS_DU, %g0
28 sethi %hi(VISenter), %g1
29 jmpl %g1 + %lo(VISenter), %g7
31 0: wr %g0, FPRS_FEF, %fprs
33 wr %g0, ASI_BLK_P, %asi
34 membar #LoadStore|#StoreLoad|#StoreStore
39 2: ldda [%o1 + 64] %asi, %f32
49 ldda [%o2 + 64] %asi, %f48
50 ldda [%o1 + 128] %asi, %f0
62 stda %f48, [%o1 - 64] %asi
66 ldda [%o1 + 64] %asi, %f32
76 ldda [%o2 + 64] %asi, %f48
86 stda %f48, [%o1 + 64] %asi
87 membar #Sync|#StoreStore|#StoreLoad
91 .size xor_vis_2, .-xor_vis_2
94 .type xor_vis_3,#function
97 andcc %o5, FPRS_FEF|FPRS_DU, %g0
99 sethi %hi(VISenter), %g1
100 jmpl %g1 + %lo(VISenter), %g7
102 0: wr %g0, FPRS_FEF, %fprs
104 wr %g0, ASI_BLK_P, %asi
105 membar #LoadStore|#StoreLoad|#StoreStore
108 ldda [%o2] %asi, %f16
110 3: ldda [%o3] %asi, %f32
118 fxor %f10, %f26, %f58
119 fxor %f12, %f28, %f60
120 fxor %f14, %f30, %f62
122 fxor %f48, %f32, %f48
123 fxor %f50, %f34, %f50
124 fxor %f52, %f36, %f52
125 fxor %f54, %f38, %f54
127 fxor %f56, %f40, %f56
128 fxor %f58, %f42, %f58
130 fxor %f60, %f44, %f60
131 fxor %f62, %f46, %f62
132 stda %f48, [%o1 - 64] %asi
134 ldda [%o2] %asi, %f16
136 ldda [%o3] %asi, %f32
142 fxor %f10, %f26, %f58
143 fxor %f12, %f28, %f60
144 fxor %f14, %f30, %f62
146 fxor %f48, %f32, %f48
147 fxor %f50, %f34, %f50
148 fxor %f52, %f36, %f52
149 fxor %f54, %f38, %f54
150 fxor %f56, %f40, %f56
151 fxor %f58, %f42, %f58
152 fxor %f60, %f44, %f60
153 fxor %f62, %f46, %f62
154 stda %f48, [%o1] %asi
155 membar #Sync|#StoreStore|#StoreLoad
159 .size xor_vis_3, .-xor_vis_3
162 .type xor_vis_4,#function
165 andcc %o5, FPRS_FEF|FPRS_DU, %g0
167 sethi %hi(VISenter), %g1
168 jmpl %g1 + %lo(VISenter), %g7
170 0: wr %g0, FPRS_FEF, %fprs
172 wr %g0, ASI_BLK_P, %asi
173 membar #LoadStore|#StoreLoad|#StoreStore
176 ldda [%o2] %asi, %f16
178 4: ldda [%o3] %asi, %f32
186 fxor %f10, %f26, %f26
187 fxor %f12, %f28, %f28
188 fxor %f14, %f30, %f30
189 ldda [%o4] %asi, %f48
190 fxor %f16, %f32, %f32
191 fxor %f18, %f34, %f34
192 fxor %f20, %f36, %f36
193 fxor %f22, %f38, %f38
195 fxor %f24, %f40, %f40
196 fxor %f26, %f42, %f42
197 fxor %f28, %f44, %f44
198 fxor %f30, %f46, %f46
200 fxor %f32, %f48, %f48
201 fxor %f34, %f50, %f50
202 fxor %f36, %f52, %f52
204 fxor %f38, %f54, %f54
205 fxor %f40, %f56, %f56
206 fxor %f42, %f58, %f58
208 fxor %f44, %f60, %f60
209 fxor %f46, %f62, %f62
210 stda %f48, [%o1 - 64] %asi
212 ldda [%o2] %asi, %f16
214 ldda [%o3] %asi, %f32
220 fxor %f10, %f26, %f26
221 fxor %f12, %f28, %f28
222 fxor %f14, %f30, %f30
223 ldda [%o4] %asi, %f48
224 fxor %f16, %f32, %f32
225 fxor %f18, %f34, %f34
226 fxor %f20, %f36, %f36
227 fxor %f22, %f38, %f38
228 fxor %f24, %f40, %f40
229 fxor %f26, %f42, %f42
230 fxor %f28, %f44, %f44
231 fxor %f30, %f46, %f46
233 fxor %f32, %f48, %f48
234 fxor %f34, %f50, %f50
235 fxor %f36, %f52, %f52
236 fxor %f38, %f54, %f54
237 fxor %f40, %f56, %f56
238 fxor %f42, %f58, %f58
239 fxor %f44, %f60, %f60
240 fxor %f46, %f62, %f62
241 stda %f48, [%o1] %asi
242 membar #Sync|#StoreStore|#StoreLoad
246 .size xor_vis_4, .-xor_vis_4
249 .type xor_vis_5,#function
253 andcc %o5, FPRS_FEF|FPRS_DU, %g0
255 sethi %hi(VISenter), %g1
256 jmpl %g1 + %lo(VISenter), %g7
258 0: wr %g0, FPRS_FEF, %fprs
261 wr %g0, ASI_BLK_P, %asi
262 membar #LoadStore|#StoreLoad|#StoreStore
265 ldda [%o2] %asi, %f16
267 5: ldda [%o3] %asi, %f32
275 fxor %f10, %f26, %f58
276 fxor %f12, %f28, %f60
277 fxor %f14, %f30, %f62
278 ldda [%o4] %asi, %f16
279 fxor %f48, %f32, %f48
280 fxor %f50, %f34, %f50
281 fxor %f52, %f36, %f52
282 fxor %f54, %f38, %f54
284 fxor %f56, %f40, %f56
285 fxor %f58, %f42, %f58
286 fxor %f60, %f44, %f60
287 fxor %f62, %f46, %f62
288 ldda [%o5] %asi, %f32
289 fxor %f48, %f16, %f48
290 fxor %f50, %f18, %f50
292 fxor %f52, %f20, %f52
293 fxor %f54, %f22, %f54
295 fxor %f56, %f24, %f56
296 fxor %f58, %f26, %f58
297 fxor %f60, %f28, %f60
298 fxor %f62, %f30, %f62
300 fxor %f48, %f32, %f48
301 fxor %f50, %f34, %f50
302 fxor %f52, %f36, %f52
303 fxor %f54, %f38, %f54
304 fxor %f56, %f40, %f56
305 fxor %f58, %f42, %f58
307 fxor %f60, %f44, %f60
308 fxor %f62, %f46, %f62
309 stda %f48, [%o1 - 64] %asi
311 ldda [%o2] %asi, %f16
313 ldda [%o3] %asi, %f32
319 fxor %f10, %f26, %f58
320 fxor %f12, %f28, %f60
321 fxor %f14, %f30, %f62
322 ldda [%o4] %asi, %f16
323 fxor %f48, %f32, %f48
324 fxor %f50, %f34, %f50
325 fxor %f52, %f36, %f52
326 fxor %f54, %f38, %f54
327 fxor %f56, %f40, %f56
328 fxor %f58, %f42, %f58
329 fxor %f60, %f44, %f60
330 fxor %f62, %f46, %f62
331 ldda [%o5] %asi, %f32
332 fxor %f48, %f16, %f48
333 fxor %f50, %f18, %f50
334 fxor %f52, %f20, %f52
335 fxor %f54, %f22, %f54
336 fxor %f56, %f24, %f56
337 fxor %f58, %f26, %f58
338 fxor %f60, %f28, %f60
339 fxor %f62, %f30, %f62
341 fxor %f48, %f32, %f48
342 fxor %f50, %f34, %f50
343 fxor %f52, %f36, %f52
344 fxor %f54, %f38, %f54
345 fxor %f56, %f40, %f56
346 fxor %f58, %f42, %f58
347 fxor %f60, %f44, %f60
348 fxor %f62, %f46, %f62
349 stda %f48, [%o1] %asi
350 membar #Sync|#StoreStore|#StoreLoad
354 .size xor_vis_5, .-xor_vis_5