Root/
Source at commit 0de2b2b3be81048189a32f7a3d3ba0ba9ec817b6 created 11 years 11 months ago. By Maarten ter Huurne, MIPS: JZ4740: Fixed value for round robin constant. | |
---|---|
1 | /* |
2 | * arch/sparc64/lib/xor.S |
3 | * |
4 | * High speed xor_block operation for RAID4/5 utilizing the |
5 | * UltraSparc Visual Instruction Set and Niagara store-init/twin-load. |
6 | * |
7 | * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz) |
8 | * Copyright (C) 2006 David S. Miller <davem@davemloft.net> |
9 | */ |
10 | |
11 | #include <asm/visasm.h> |
12 | #include <asm/asi.h> |
13 | #include <asm/dcu.h> |
14 | #include <asm/spitfire.h> |
15 | |
16 | /* |
17 | * Requirements: |
18 | * !(((long)dest | (long)sourceN) & (64 - 1)) && |
19 | * !(len & 127) && len >= 256 |
20 | */ |
21 | .text |
22 | .align 32 |
23 | |
24 | /* VIS versions. */ |
25 | .globl xor_vis_2 |
26 | .type xor_vis_2,#function |
27 | xor_vis_2: |
28 | rd %fprs, %o5 |
29 | andcc %o5, FPRS_FEF|FPRS_DU, %g0 |
30 | be,pt %icc, 0f |
31 | sethi %hi(VISenter), %g1 |
32 | jmpl %g1 + %lo(VISenter), %g7 |
33 | add %g7, 8, %g7 |
34 | 0: wr %g0, FPRS_FEF, %fprs |
35 | rd %asi, %g1 |
36 | wr %g0, ASI_BLK_P, %asi |
37 | membar #LoadStore|#StoreLoad|#StoreStore |
38 | sub %o0, 128, %o0 |
39 | ldda [%o1] %asi, %f0 |
40 | ldda [%o2] %asi, %f16 |
41 | |
42 | 2: ldda [%o1 + 64] %asi, %f32 |
43 | fxor %f0, %f16, %f16 |
44 | fxor %f2, %f18, %f18 |
45 | fxor %f4, %f20, %f20 |
46 | fxor %f6, %f22, %f22 |
47 | fxor %f8, %f24, %f24 |
48 | fxor %f10, %f26, %f26 |
49 | fxor %f12, %f28, %f28 |
50 | fxor %f14, %f30, %f30 |
51 | stda %f16, [%o1] %asi |
52 | ldda [%o2 + 64] %asi, %f48 |
53 | ldda [%o1 + 128] %asi, %f0 |
54 | fxor %f32, %f48, %f48 |
55 | fxor %f34, %f50, %f50 |
56 | add %o1, 128, %o1 |
57 | fxor %f36, %f52, %f52 |
58 | add %o2, 128, %o2 |
59 | fxor %f38, %f54, %f54 |
60 | subcc %o0, 128, %o0 |
61 | fxor %f40, %f56, %f56 |
62 | fxor %f42, %f58, %f58 |
63 | fxor %f44, %f60, %f60 |
64 | fxor %f46, %f62, %f62 |
65 | stda %f48, [%o1 - 64] %asi |
66 | bne,pt %xcc, 2b |
67 | ldda [%o2] %asi, %f16 |
68 | |
69 | ldda [%o1 + 64] %asi, %f32 |
70 | fxor %f0, %f16, %f16 |
71 | fxor %f2, %f18, %f18 |
72 | fxor %f4, %f20, %f20 |
73 | fxor %f6, %f22, %f22 |
74 | fxor %f8, %f24, %f24 |
75 | fxor %f10, %f26, %f26 |
76 | fxor %f12, %f28, %f28 |
77 | fxor %f14, %f30, %f30 |
78 | stda %f16, [%o1] %asi |
79 | ldda [%o2 + 64] %asi, %f48 |
80 | membar #Sync |
81 | fxor %f32, %f48, %f48 |
82 | fxor %f34, %f50, %f50 |
83 | fxor %f36, %f52, %f52 |
84 | fxor %f38, %f54, %f54 |
85 | fxor %f40, %f56, %f56 |
86 | fxor %f42, %f58, %f58 |
87 | fxor %f44, %f60, %f60 |
88 | fxor %f46, %f62, %f62 |
89 | stda %f48, [%o1 + 64] %asi |
90 | membar #Sync|#StoreStore|#StoreLoad |
91 | wr %g1, %g0, %asi |
92 | retl |
93 | wr %g0, 0, %fprs |
94 | .size xor_vis_2, .-xor_vis_2 |
95 | |
96 | .globl xor_vis_3 |
97 | .type xor_vis_3,#function |
98 | xor_vis_3: |
99 | rd %fprs, %o5 |
100 | andcc %o5, FPRS_FEF|FPRS_DU, %g0 |
101 | be,pt %icc, 0f |
102 | sethi %hi(VISenter), %g1 |
103 | jmpl %g1 + %lo(VISenter), %g7 |
104 | add %g7, 8, %g7 |
105 | 0: wr %g0, FPRS_FEF, %fprs |
106 | rd %asi, %g1 |
107 | wr %g0, ASI_BLK_P, %asi |
108 | membar #LoadStore|#StoreLoad|#StoreStore |
109 | sub %o0, 64, %o0 |
110 | ldda [%o1] %asi, %f0 |
111 | ldda [%o2] %asi, %f16 |
112 | |
113 | 3: ldda [%o3] %asi, %f32 |
114 | fxor %f0, %f16, %f48 |
115 | fxor %f2, %f18, %f50 |
116 | add %o1, 64, %o1 |
117 | fxor %f4, %f20, %f52 |
118 | fxor %f6, %f22, %f54 |
119 | add %o2, 64, %o2 |
120 | fxor %f8, %f24, %f56 |
121 | fxor %f10, %f26, %f58 |
122 | fxor %f12, %f28, %f60 |
123 | fxor %f14, %f30, %f62 |
124 | ldda [%o1] %asi, %f0 |
125 | fxor %f48, %f32, %f48 |
126 | fxor %f50, %f34, %f50 |
127 | fxor %f52, %f36, %f52 |
128 | fxor %f54, %f38, %f54 |
129 | add %o3, 64, %o3 |
130 | fxor %f56, %f40, %f56 |
131 | fxor %f58, %f42, %f58 |
132 | subcc %o0, 64, %o0 |
133 | fxor %f60, %f44, %f60 |
134 | fxor %f62, %f46, %f62 |
135 | stda %f48, [%o1 - 64] %asi |
136 | bne,pt %xcc, 3b |
137 | ldda [%o2] %asi, %f16 |
138 | |
139 | ldda [%o3] %asi, %f32 |
140 | fxor %f0, %f16, %f48 |
141 | fxor %f2, %f18, %f50 |
142 | fxor %f4, %f20, %f52 |
143 | fxor %f6, %f22, %f54 |
144 | fxor %f8, %f24, %f56 |
145 | fxor %f10, %f26, %f58 |
146 | fxor %f12, %f28, %f60 |
147 | fxor %f14, %f30, %f62 |
148 | membar #Sync |
149 | fxor %f48, %f32, %f48 |
150 | fxor %f50, %f34, %f50 |
151 | fxor %f52, %f36, %f52 |
152 | fxor %f54, %f38, %f54 |
153 | fxor %f56, %f40, %f56 |
154 | fxor %f58, %f42, %f58 |
155 | fxor %f60, %f44, %f60 |
156 | fxor %f62, %f46, %f62 |
157 | stda %f48, [%o1] %asi |
158 | membar #Sync|#StoreStore|#StoreLoad |
159 | wr %g1, %g0, %asi |
160 | retl |
161 | wr %g0, 0, %fprs |
162 | .size xor_vis_3, .-xor_vis_3 |
163 | |
164 | .globl xor_vis_4 |
165 | .type xor_vis_4,#function |
166 | xor_vis_4: |
167 | rd %fprs, %o5 |
168 | andcc %o5, FPRS_FEF|FPRS_DU, %g0 |
169 | be,pt %icc, 0f |
170 | sethi %hi(VISenter), %g1 |
171 | jmpl %g1 + %lo(VISenter), %g7 |
172 | add %g7, 8, %g7 |
173 | 0: wr %g0, FPRS_FEF, %fprs |
174 | rd %asi, %g1 |
175 | wr %g0, ASI_BLK_P, %asi |
176 | membar #LoadStore|#StoreLoad|#StoreStore |
177 | sub %o0, 64, %o0 |
178 | ldda [%o1] %asi, %f0 |
179 | ldda [%o2] %asi, %f16 |
180 | |
181 | 4: ldda [%o3] %asi, %f32 |
182 | fxor %f0, %f16, %f16 |
183 | fxor %f2, %f18, %f18 |
184 | add %o1, 64, %o1 |
185 | fxor %f4, %f20, %f20 |
186 | fxor %f6, %f22, %f22 |
187 | add %o2, 64, %o2 |
188 | fxor %f8, %f24, %f24 |
189 | fxor %f10, %f26, %f26 |
190 | fxor %f12, %f28, %f28 |
191 | fxor %f14, %f30, %f30 |
192 | ldda [%o4] %asi, %f48 |
193 | fxor %f16, %f32, %f32 |
194 | fxor %f18, %f34, %f34 |
195 | fxor %f20, %f36, %f36 |
196 | fxor %f22, %f38, %f38 |
197 | add %o3, 64, %o3 |
198 | fxor %f24, %f40, %f40 |
199 | fxor %f26, %f42, %f42 |
200 | fxor %f28, %f44, %f44 |
201 | fxor %f30, %f46, %f46 |
202 | ldda [%o1] %asi, %f0 |
203 | fxor %f32, %f48, %f48 |
204 | fxor %f34, %f50, %f50 |
205 | fxor %f36, %f52, %f52 |
206 | add %o4, 64, %o4 |
207 | fxor %f38, %f54, %f54 |
208 | fxor %f40, %f56, %f56 |
209 | fxor %f42, %f58, %f58 |
210 | subcc %o0, 64, %o0 |
211 | fxor %f44, %f60, %f60 |
212 | fxor %f46, %f62, %f62 |
213 | stda %f48, [%o1 - 64] %asi |
214 | bne,pt %xcc, 4b |
215 | ldda [%o2] %asi, %f16 |
216 | |
217 | ldda [%o3] %asi, %f32 |
218 | fxor %f0, %f16, %f16 |
219 | fxor %f2, %f18, %f18 |
220 | fxor %f4, %f20, %f20 |
221 | fxor %f6, %f22, %f22 |
222 | fxor %f8, %f24, %f24 |
223 | fxor %f10, %f26, %f26 |
224 | fxor %f12, %f28, %f28 |
225 | fxor %f14, %f30, %f30 |
226 | ldda [%o4] %asi, %f48 |
227 | fxor %f16, %f32, %f32 |
228 | fxor %f18, %f34, %f34 |
229 | fxor %f20, %f36, %f36 |
230 | fxor %f22, %f38, %f38 |
231 | fxor %f24, %f40, %f40 |
232 | fxor %f26, %f42, %f42 |
233 | fxor %f28, %f44, %f44 |
234 | fxor %f30, %f46, %f46 |
235 | membar #Sync |
236 | fxor %f32, %f48, %f48 |
237 | fxor %f34, %f50, %f50 |
238 | fxor %f36, %f52, %f52 |
239 | fxor %f38, %f54, %f54 |
240 | fxor %f40, %f56, %f56 |
241 | fxor %f42, %f58, %f58 |
242 | fxor %f44, %f60, %f60 |
243 | fxor %f46, %f62, %f62 |
244 | stda %f48, [%o1] %asi |
245 | membar #Sync|#StoreStore|#StoreLoad |
246 | wr %g1, %g0, %asi |
247 | retl |
248 | wr %g0, 0, %fprs |
249 | .size xor_vis_4, .-xor_vis_4 |
250 | |
251 | .globl xor_vis_5 |
252 | .type xor_vis_5,#function |
253 | xor_vis_5: |
254 | save %sp, -192, %sp |
255 | rd %fprs, %o5 |
256 | andcc %o5, FPRS_FEF|FPRS_DU, %g0 |
257 | be,pt %icc, 0f |
258 | sethi %hi(VISenter), %g1 |
259 | jmpl %g1 + %lo(VISenter), %g7 |
260 | add %g7, 8, %g7 |
261 | 0: wr %g0, FPRS_FEF, %fprs |
262 | rd %asi, %g1 |
263 | wr %g0, ASI_BLK_P, %asi |
264 | membar #LoadStore|#StoreLoad|#StoreStore |
265 | sub %i0, 64, %i0 |
266 | ldda [%i1] %asi, %f0 |
267 | ldda [%i2] %asi, %f16 |
268 | |
269 | 5: ldda [%i3] %asi, %f32 |
270 | fxor %f0, %f16, %f48 |
271 | fxor %f2, %f18, %f50 |
272 | add %i1, 64, %i1 |
273 | fxor %f4, %f20, %f52 |
274 | fxor %f6, %f22, %f54 |
275 | add %i2, 64, %i2 |
276 | fxor %f8, %f24, %f56 |
277 | fxor %f10, %f26, %f58 |
278 | fxor %f12, %f28, %f60 |
279 | fxor %f14, %f30, %f62 |
280 | ldda [%i4] %asi, %f16 |
281 | fxor %f48, %f32, %f48 |
282 | fxor %f50, %f34, %f50 |
283 | fxor %f52, %f36, %f52 |
284 | fxor %f54, %f38, %f54 |
285 | add %i3, 64, %i3 |
286 | fxor %f56, %f40, %f56 |
287 | fxor %f58, %f42, %f58 |
288 | fxor %f60, %f44, %f60 |
289 | fxor %f62, %f46, %f62 |
290 | ldda [%i5] %asi, %f32 |
291 | fxor %f48, %f16, %f48 |
292 | fxor %f50, %f18, %f50 |
293 | add %i4, 64, %i4 |
294 | fxor %f52, %f20, %f52 |
295 | fxor %f54, %f22, %f54 |
296 | add %i5, 64, %i5 |
297 | fxor %f56, %f24, %f56 |
298 | fxor %f58, %f26, %f58 |
299 | fxor %f60, %f28, %f60 |
300 | fxor %f62, %f30, %f62 |
301 | ldda [%i1] %asi, %f0 |
302 | fxor %f48, %f32, %f48 |
303 | fxor %f50, %f34, %f50 |
304 | fxor %f52, %f36, %f52 |
305 | fxor %f54, %f38, %f54 |
306 | fxor %f56, %f40, %f56 |
307 | fxor %f58, %f42, %f58 |
308 | subcc %i0, 64, %i0 |
309 | fxor %f60, %f44, %f60 |
310 | fxor %f62, %f46, %f62 |
311 | stda %f48, [%i1 - 64] %asi |
312 | bne,pt %xcc, 5b |
313 | ldda [%i2] %asi, %f16 |
314 | |
315 | ldda [%i3] %asi, %f32 |
316 | fxor %f0, %f16, %f48 |
317 | fxor %f2, %f18, %f50 |
318 | fxor %f4, %f20, %f52 |
319 | fxor %f6, %f22, %f54 |
320 | fxor %f8, %f24, %f56 |
321 | fxor %f10, %f26, %f58 |
322 | fxor %f12, %f28, %f60 |
323 | fxor %f14, %f30, %f62 |
324 | ldda [%i4] %asi, %f16 |
325 | fxor %f48, %f32, %f48 |
326 | fxor %f50, %f34, %f50 |
327 | fxor %f52, %f36, %f52 |
328 | fxor %f54, %f38, %f54 |
329 | fxor %f56, %f40, %f56 |
330 | fxor %f58, %f42, %f58 |
331 | fxor %f60, %f44, %f60 |
332 | fxor %f62, %f46, %f62 |
333 | ldda [%i5] %asi, %f32 |
334 | fxor %f48, %f16, %f48 |
335 | fxor %f50, %f18, %f50 |
336 | fxor %f52, %f20, %f52 |
337 | fxor %f54, %f22, %f54 |
338 | fxor %f56, %f24, %f56 |
339 | fxor %f58, %f26, %f58 |
340 | fxor %f60, %f28, %f60 |
341 | fxor %f62, %f30, %f62 |
342 | membar #Sync |
343 | fxor %f48, %f32, %f48 |
344 | fxor %f50, %f34, %f50 |
345 | fxor %f52, %f36, %f52 |
346 | fxor %f54, %f38, %f54 |
347 | fxor %f56, %f40, %f56 |
348 | fxor %f58, %f42, %f58 |
349 | fxor %f60, %f44, %f60 |
350 | fxor %f62, %f46, %f62 |
351 | stda %f48, [%i1] %asi |
352 | membar #Sync|#StoreStore|#StoreLoad |
353 | wr %g1, %g0, %asi |
354 | wr %g0, 0, %fprs |
355 | ret |
356 | restore |
357 | .size xor_vis_5, .-xor_vis_5 |
358 | |
359 | /* Niagara versions. */ |
360 | .globl xor_niagara_2 |
361 | .type xor_niagara_2,#function |
362 | xor_niagara_2: /* %o0=bytes, %o1=dest, %o2=src */ |
363 | save %sp, -192, %sp |
364 | prefetch [%i1], #n_writes |
365 | prefetch [%i2], #one_read |
366 | rd %asi, %g7 |
367 | wr %g0, ASI_BLK_INIT_QUAD_LDD_P, %asi |
368 | srlx %i0, 6, %g1 |
369 | mov %i1, %i0 |
370 | mov %i2, %i1 |
371 | 1: ldda [%i1 + 0x00] %asi, %i2 /* %i2/%i3 = src + 0x00 */ |
372 | ldda [%i1 + 0x10] %asi, %i4 /* %i4/%i5 = src + 0x10 */ |
373 | ldda [%i1 + 0x20] %asi, %g2 /* %g2/%g3 = src + 0x20 */ |
374 | ldda [%i1 + 0x30] %asi, %l0 /* %l0/%l1 = src + 0x30 */ |
375 | prefetch [%i1 + 0x40], #one_read |
376 | ldda [%i0 + 0x00] %asi, %o0 /* %o0/%o1 = dest + 0x00 */ |
377 | ldda [%i0 + 0x10] %asi, %o2 /* %o2/%o3 = dest + 0x10 */ |
378 | ldda [%i0 + 0x20] %asi, %o4 /* %o4/%o5 = dest + 0x20 */ |
379 | ldda [%i0 + 0x30] %asi, %l2 /* %l2/%l3 = dest + 0x30 */ |
380 | prefetch [%i0 + 0x40], #n_writes |
381 | xor %o0, %i2, %o0 |
382 | xor %o1, %i3, %o1 |
383 | stxa %o0, [%i0 + 0x00] %asi |
384 | stxa %o1, [%i0 + 0x08] %asi |
385 | xor %o2, %i4, %o2 |
386 | xor %o3, %i5, %o3 |
387 | stxa %o2, [%i0 + 0x10] %asi |
388 | stxa %o3, [%i0 + 0x18] %asi |
389 | xor %o4, %g2, %o4 |
390 | xor %o5, %g3, %o5 |
391 | stxa %o4, [%i0 + 0x20] %asi |
392 | stxa %o5, [%i0 + 0x28] %asi |
393 | xor %l2, %l0, %l2 |
394 | xor %l3, %l1, %l3 |
395 | stxa %l2, [%i0 + 0x30] %asi |
396 | stxa %l3, [%i0 + 0x38] %asi |
397 | add %i0, 0x40, %i0 |
398 | subcc %g1, 1, %g1 |
399 | bne,pt %xcc, 1b |
400 | add %i1, 0x40, %i1 |
401 | membar #Sync |
402 | wr %g7, 0x0, %asi |
403 | ret |
404 | restore |
405 | .size xor_niagara_2, .-xor_niagara_2 |
406 | |
407 | .globl xor_niagara_3 |
408 | .type xor_niagara_3,#function |
409 | xor_niagara_3: /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2 */ |
410 | save %sp, -192, %sp |
411 | prefetch [%i1], #n_writes |
412 | prefetch [%i2], #one_read |
413 | prefetch [%i3], #one_read |
414 | rd %asi, %g7 |
415 | wr %g0, ASI_BLK_INIT_QUAD_LDD_P, %asi |
416 | srlx %i0, 6, %g1 |
417 | mov %i1, %i0 |
418 | mov %i2, %i1 |
419 | mov %i3, %l7 |
420 | 1: ldda [%i1 + 0x00] %asi, %i2 /* %i2/%i3 = src1 + 0x00 */ |
421 | ldda [%i1 + 0x10] %asi, %i4 /* %i4/%i5 = src1 + 0x10 */ |
422 | ldda [%l7 + 0x00] %asi, %g2 /* %g2/%g3 = src2 + 0x00 */ |
423 | ldda [%l7 + 0x10] %asi, %l0 /* %l0/%l1 = src2 + 0x10 */ |
424 | ldda [%i0 + 0x00] %asi, %o0 /* %o0/%o1 = dest + 0x00 */ |
425 | ldda [%i0 + 0x10] %asi, %o2 /* %o2/%o3 = dest + 0x10 */ |
426 | xor %g2, %i2, %g2 |
427 | xor %g3, %i3, %g3 |
428 | xor %o0, %g2, %o0 |
429 | xor %o1, %g3, %o1 |
430 | stxa %o0, [%i0 + 0x00] %asi |
431 | stxa %o1, [%i0 + 0x08] %asi |
432 | ldda [%i1 + 0x20] %asi, %i2 /* %i2/%i3 = src1 + 0x20 */ |
433 | ldda [%l7 + 0x20] %asi, %g2 /* %g2/%g3 = src2 + 0x20 */ |
434 | ldda [%i0 + 0x20] %asi, %o0 /* %o0/%o1 = dest + 0x20 */ |
435 | xor %l0, %i4, %l0 |
436 | xor %l1, %i5, %l1 |
437 | xor %o2, %l0, %o2 |
438 | xor %o3, %l1, %o3 |
439 | stxa %o2, [%i0 + 0x10] %asi |
440 | stxa %o3, [%i0 + 0x18] %asi |
441 | ldda [%i1 + 0x30] %asi, %i4 /* %i4/%i5 = src1 + 0x30 */ |
442 | ldda [%l7 + 0x30] %asi, %l0 /* %l0/%l1 = src2 + 0x30 */ |
443 | ldda [%i0 + 0x30] %asi, %o2 /* %o2/%o3 = dest + 0x30 */ |
444 | prefetch [%i1 + 0x40], #one_read |
445 | prefetch [%l7 + 0x40], #one_read |
446 | prefetch [%i0 + 0x40], #n_writes |
447 | xor %g2, %i2, %g2 |
448 | xor %g3, %i3, %g3 |
449 | xor %o0, %g2, %o0 |
450 | xor %o1, %g3, %o1 |
451 | stxa %o0, [%i0 + 0x20] %asi |
452 | stxa %o1, [%i0 + 0x28] %asi |
453 | xor %l0, %i4, %l0 |
454 | xor %l1, %i5, %l1 |
455 | xor %o2, %l0, %o2 |
456 | xor %o3, %l1, %o3 |
457 | stxa %o2, [%i0 + 0x30] %asi |
458 | stxa %o3, [%i0 + 0x38] %asi |
459 | add %i0, 0x40, %i0 |
460 | add %i1, 0x40, %i1 |
461 | subcc %g1, 1, %g1 |
462 | bne,pt %xcc, 1b |
463 | add %l7, 0x40, %l7 |
464 | membar #Sync |
465 | wr %g7, 0x0, %asi |
466 | ret |
467 | restore |
468 | .size xor_niagara_3, .-xor_niagara_3 |
469 | |
470 | .globl xor_niagara_4 |
471 | .type xor_niagara_4,#function |
472 | xor_niagara_4: /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3 */ |
473 | save %sp, -192, %sp |
474 | prefetch [%i1], #n_writes |
475 | prefetch [%i2], #one_read |
476 | prefetch [%i3], #one_read |
477 | prefetch [%i4], #one_read |
478 | rd %asi, %g7 |
479 | wr %g0, ASI_BLK_INIT_QUAD_LDD_P, %asi |
480 | srlx %i0, 6, %g1 |
481 | mov %i1, %i0 |
482 | mov %i2, %i1 |
483 | mov %i3, %l7 |
484 | mov %i4, %l6 |
485 | 1: ldda [%i1 + 0x00] %asi, %i2 /* %i2/%i3 = src1 + 0x00 */ |
486 | ldda [%l7 + 0x00] %asi, %i4 /* %i4/%i5 = src2 + 0x00 */ |
487 | ldda [%l6 + 0x00] %asi, %g2 /* %g2/%g3 = src3 + 0x00 */ |
488 | ldda [%i0 + 0x00] %asi, %l0 /* %l0/%l1 = dest + 0x00 */ |
489 | xor %i4, %i2, %i4 |
490 | xor %i5, %i3, %i5 |
491 | ldda [%i1 + 0x10] %asi, %i2 /* %i2/%i3 = src1 + 0x10 */ |
492 | xor %g2, %i4, %g2 |
493 | xor %g3, %i5, %g3 |
494 | ldda [%l7 + 0x10] %asi, %i4 /* %i4/%i5 = src2 + 0x10 */ |
495 | xor %l0, %g2, %l0 |
496 | xor %l1, %g3, %l1 |
497 | stxa %l0, [%i0 + 0x00] %asi |
498 | stxa %l1, [%i0 + 0x08] %asi |
499 | ldda [%l6 + 0x10] %asi, %g2 /* %g2/%g3 = src3 + 0x10 */ |
500 | ldda [%i0 + 0x10] %asi, %l0 /* %l0/%l1 = dest + 0x10 */ |
501 | |
502 | xor %i4, %i2, %i4 |
503 | xor %i5, %i3, %i5 |
504 | ldda [%i1 + 0x20] %asi, %i2 /* %i2/%i3 = src1 + 0x20 */ |
505 | xor %g2, %i4, %g2 |
506 | xor %g3, %i5, %g3 |
507 | ldda [%l7 + 0x20] %asi, %i4 /* %i4/%i5 = src2 + 0x20 */ |
508 | xor %l0, %g2, %l0 |
509 | xor %l1, %g3, %l1 |
510 | stxa %l0, [%i0 + 0x10] %asi |
511 | stxa %l1, [%i0 + 0x18] %asi |
512 | ldda [%l6 + 0x20] %asi, %g2 /* %g2/%g3 = src3 + 0x20 */ |
513 | ldda [%i0 + 0x20] %asi, %l0 /* %l0/%l1 = dest + 0x20 */ |
514 | |
515 | xor %i4, %i2, %i4 |
516 | xor %i5, %i3, %i5 |
517 | ldda [%i1 + 0x30] %asi, %i2 /* %i2/%i3 = src1 + 0x30 */ |
518 | xor %g2, %i4, %g2 |
519 | xor %g3, %i5, %g3 |
520 | ldda [%l7 + 0x30] %asi, %i4 /* %i4/%i5 = src2 + 0x30 */ |
521 | xor %l0, %g2, %l0 |
522 | xor %l1, %g3, %l1 |
523 | stxa %l0, [%i0 + 0x20] %asi |
524 | stxa %l1, [%i0 + 0x28] %asi |
525 | ldda [%l6 + 0x30] %asi, %g2 /* %g2/%g3 = src3 + 0x30 */ |
526 | ldda [%i0 + 0x30] %asi, %l0 /* %l0/%l1 = dest + 0x30 */ |
527 | |
528 | prefetch [%i1 + 0x40], #one_read |
529 | prefetch [%l7 + 0x40], #one_read |
530 | prefetch [%l6 + 0x40], #one_read |
531 | prefetch [%i0 + 0x40], #n_writes |
532 | |
533 | xor %i4, %i2, %i4 |
534 | xor %i5, %i3, %i5 |
535 | xor %g2, %i4, %g2 |
536 | xor %g3, %i5, %g3 |
537 | xor %l0, %g2, %l0 |
538 | xor %l1, %g3, %l1 |
539 | stxa %l0, [%i0 + 0x30] %asi |
540 | stxa %l1, [%i0 + 0x38] %asi |
541 | |
542 | add %i0, 0x40, %i0 |
543 | add %i1, 0x40, %i1 |
544 | add %l7, 0x40, %l7 |
545 | subcc %g1, 1, %g1 |
546 | bne,pt %xcc, 1b |
547 | add %l6, 0x40, %l6 |
548 | membar #Sync |
549 | wr %g7, 0x0, %asi |
550 | ret |
551 | restore |
552 | .size xor_niagara_4, .-xor_niagara_4 |
553 | |
554 | .globl xor_niagara_5 |
555 | .type xor_niagara_5,#function |
556 | xor_niagara_5: /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3, %o5=src4 */ |
557 | save %sp, -192, %sp |
558 | prefetch [%i1], #n_writes |
559 | prefetch [%i2], #one_read |
560 | prefetch [%i3], #one_read |
561 | prefetch [%i4], #one_read |
562 | prefetch [%i5], #one_read |
563 | rd %asi, %g7 |
564 | wr %g0, ASI_BLK_INIT_QUAD_LDD_P, %asi |
565 | srlx %i0, 6, %g1 |
566 | mov %i1, %i0 |
567 | mov %i2, %i1 |
568 | mov %i3, %l7 |
569 | mov %i4, %l6 |
570 | mov %i5, %l5 |
571 | 1: ldda [%i1 + 0x00] %asi, %i2 /* %i2/%i3 = src1 + 0x00 */ |
572 | ldda [%l7 + 0x00] %asi, %i4 /* %i4/%i5 = src2 + 0x00 */ |
573 | ldda [%l6 + 0x00] %asi, %g2 /* %g2/%g3 = src3 + 0x00 */ |
574 | ldda [%l5 + 0x00] %asi, %l0 /* %l0/%l1 = src4 + 0x00 */ |
575 | ldda [%i0 + 0x00] %asi, %l2 /* %l2/%l3 = dest + 0x00 */ |
576 | xor %i4, %i2, %i4 |
577 | xor %i5, %i3, %i5 |
578 | ldda [%i1 + 0x10] %asi, %i2 /* %i2/%i3 = src1 + 0x10 */ |
579 | xor %g2, %i4, %g2 |
580 | xor %g3, %i5, %g3 |
581 | ldda [%l7 + 0x10] %asi, %i4 /* %i4/%i5 = src2 + 0x10 */ |
582 | xor %l0, %g2, %l0 |
583 | xor %l1, %g3, %l1 |
584 | ldda [%l6 + 0x10] %asi, %g2 /* %g2/%g3 = src3 + 0x10 */ |
585 | xor %l2, %l0, %l2 |
586 | xor %l3, %l1, %l3 |
587 | stxa %l2, [%i0 + 0x00] %asi |
588 | stxa %l3, [%i0 + 0x08] %asi |
589 | ldda [%l5 + 0x10] %asi, %l0 /* %l0/%l1 = src4 + 0x10 */ |
590 | ldda [%i0 + 0x10] %asi, %l2 /* %l2/%l3 = dest + 0x10 */ |
591 | |
592 | xor %i4, %i2, %i4 |
593 | xor %i5, %i3, %i5 |
594 | ldda [%i1 + 0x20] %asi, %i2 /* %i2/%i3 = src1 + 0x20 */ |
595 | xor %g2, %i4, %g2 |
596 | xor %g3, %i5, %g3 |
597 | ldda [%l7 + 0x20] %asi, %i4 /* %i4/%i5 = src2 + 0x20 */ |
598 | xor %l0, %g2, %l0 |
599 | xor %l1, %g3, %l1 |
600 | ldda [%l6 + 0x20] %asi, %g2 /* %g2/%g3 = src3 + 0x20 */ |
601 | xor %l2, %l0, %l2 |
602 | xor %l3, %l1, %l3 |
603 | stxa %l2, [%i0 + 0x10] %asi |
604 | stxa %l3, [%i0 + 0x18] %asi |
605 | ldda [%l5 + 0x20] %asi, %l0 /* %l0/%l1 = src4 + 0x20 */ |
606 | ldda [%i0 + 0x20] %asi, %l2 /* %l2/%l3 = dest + 0x20 */ |
607 | |
608 | xor %i4, %i2, %i4 |
609 | xor %i5, %i3, %i5 |
610 | ldda [%i1 + 0x30] %asi, %i2 /* %i2/%i3 = src1 + 0x30 */ |
611 | xor %g2, %i4, %g2 |
612 | xor %g3, %i5, %g3 |
613 | ldda [%l7 + 0x30] %asi, %i4 /* %i4/%i5 = src2 + 0x30 */ |
614 | xor %l0, %g2, %l0 |
615 | xor %l1, %g3, %l1 |
616 | ldda [%l6 + 0x30] %asi, %g2 /* %g2/%g3 = src3 + 0x30 */ |
617 | xor %l2, %l0, %l2 |
618 | xor %l3, %l1, %l3 |
619 | stxa %l2, [%i0 + 0x20] %asi |
620 | stxa %l3, [%i0 + 0x28] %asi |
621 | ldda [%l5 + 0x30] %asi, %l0 /* %l0/%l1 = src4 + 0x30 */ |
622 | ldda [%i0 + 0x30] %asi, %l2 /* %l2/%l3 = dest + 0x30 */ |
623 | |
624 | prefetch [%i1 + 0x40], #one_read |
625 | prefetch [%l7 + 0x40], #one_read |
626 | prefetch [%l6 + 0x40], #one_read |
627 | prefetch [%l5 + 0x40], #one_read |
628 | prefetch [%i0 + 0x40], #n_writes |
629 | |
630 | xor %i4, %i2, %i4 |
631 | xor %i5, %i3, %i5 |
632 | xor %g2, %i4, %g2 |
633 | xor %g3, %i5, %g3 |
634 | xor %l0, %g2, %l0 |
635 | xor %l1, %g3, %l1 |
636 | xor %l2, %l0, %l2 |
637 | xor %l3, %l1, %l3 |
638 | stxa %l2, [%i0 + 0x30] %asi |
639 | stxa %l3, [%i0 + 0x38] %asi |
640 | |
641 | add %i0, 0x40, %i0 |
642 | add %i1, 0x40, %i1 |
643 | add %l7, 0x40, %l7 |
644 | add %l6, 0x40, %l6 |
645 | subcc %g1, 1, %g1 |
646 | bne,pt %xcc, 1b |
647 | add %l5, 0x40, %l5 |
648 | membar #Sync |
649 | wr %g7, 0x0, %asi |
650 | ret |
651 | restore |
652 | .size xor_niagara_5, .-xor_niagara_5 |
653 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9