md5-sparcv9.S revision 1.1.1.1 1 #include "sparc_arch.h"
2
3 #ifdef __arch64__
4 .register %g2,#scratch
5 .register %g3,#scratch
6 #endif
7
8 .section ".text",#alloc,#execinstr
9
10 #ifdef __PIC__
11 SPARC_PIC_THUNK(%g1)
12 #endif
13
14 .globl md5_block_asm_data_order
15 .align 32
16 md5_block_asm_data_order:
17 SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5)
18 ld [%g1+4],%g1 ! OPENSSL_sparcv9cap_P[1]
19
20 andcc %g1, CFR_MD5, %g0
21 be .Lsoftware
22 nop
23
24 mov 4, %g1
25 andcc %o1, 0x7, %g0
26 lda [%o0 + %g0]0x88, %f0 ! load context
27 lda [%o0 + %g1]0x88, %f1
28 add %o0, 8, %o0
29 lda [%o0 + %g0]0x88, %f2
30 lda [%o0 + %g1]0x88, %f3
31 bne,pn %icc, .Lhwunaligned
32 sub %o0, 8, %o0
33
34 .Lhw_loop:
35 ldd [%o1 + 0x00], %f8
36 ldd [%o1 + 0x08], %f10
37 ldd [%o1 + 0x10], %f12
38 ldd [%o1 + 0x18], %f14
39 ldd [%o1 + 0x20], %f16
40 ldd [%o1 + 0x28], %f18
41 ldd [%o1 + 0x30], %f20
42 subcc %o2, 1, %o2 ! done yet?
43 ldd [%o1 + 0x38], %f22
44 add %o1, 0x40, %o1
45 prefetch [%o1 + 63], 20
46
47 .word 0x81b02800 ! MD5
48
49 bne,pt SIZE_T_CC, .Lhw_loop
50 nop
51
52 .Lhwfinish:
53 sta %f0, [%o0 + %g0]0x88 ! store context
54 sta %f1, [%o0 + %g1]0x88
55 add %o0, 8, %o0
56 sta %f2, [%o0 + %g0]0x88
57 sta %f3, [%o0 + %g1]0x88
58 retl
59 nop
60
61 .align 8
62 .Lhwunaligned:
63 .word 0x93b24300 !alignaddr %o1,%g0,%o1
64
65 ldd [%o1 + 0x00], %f10
66 .Lhwunaligned_loop:
67 ldd [%o1 + 0x08], %f12
68 ldd [%o1 + 0x10], %f14
69 ldd [%o1 + 0x18], %f16
70 ldd [%o1 + 0x20], %f18
71 ldd [%o1 + 0x28], %f20
72 ldd [%o1 + 0x30], %f22
73 ldd [%o1 + 0x38], %f24
74 subcc %o2, 1, %o2 ! done yet?
75 ldd [%o1 + 0x40], %f26
76 add %o1, 0x40, %o1
77 prefetch [%o1 + 63], 20
78
79 .word 0x91b2890c !faligndata %f10,%f12,%f8
80 .word 0x95b3090e !faligndata %f12,%f14,%f10
81 .word 0x99b38910 !faligndata %f14,%f16,%f12
82 .word 0x9db40912 !faligndata %f16,%f18,%f14
83 .word 0xa1b48914 !faligndata %f18,%f20,%f16
84 .word 0xa5b50916 !faligndata %f20,%f22,%f18
85 .word 0xa9b58918 !faligndata %f22,%f24,%f20
86 .word 0xadb6091a !faligndata %f24,%f26,%f22
87
88 .word 0x81b02800 ! MD5
89
90 bne,pt SIZE_T_CC, .Lhwunaligned_loop
91 .word 0x95b68f9a !for %f26,%f26,%f10 ! %f10=%f26
92
93 ba .Lhwfinish
94 nop
95
96 .align 16
97 .Lsoftware:
98 save %sp,-STACK_FRAME,%sp
99
100 rd %asi,%l7
101 wr %g0,0x88,%asi ! ASI_PRIMARY_LITTLE
102 and %i1,7,%i3
103 andn %i1,7,%i1
104
105 sll %i3,3,%i3 ! *=8
106 mov 56,%i5
107 ld [%i0+0],%l0
108 sub %i5,%i3,%i5
109 ld [%i0+4],%l1
110 and %i5,32,%i4
111 add %i5,8,%i5
112 ld [%i0+8],%l2
113 sub %i5,%i4,%i5 ! shr+shl1+shl2==64
114 ld [%i0+12],%l3
115 nop
116
117 .Loop:
118 cmp %i3,0 ! was inp aligned?
119 ldxa [%i1+0]%asi,%o0 ! load little-endian input
120 ldxa [%i1+8]%asi,%o1
121 ldxa [%i1+16]%asi,%o2
122 ldxa [%i1+24]%asi,%o3
123 ldxa [%i1+32]%asi,%o4
124 sllx %l0,32,%g4 ! pack A,B
125 ldxa [%i1+40]%asi,%o5
126 sllx %l2,32,%g5 ! pack C,D
127 ldxa [%i1+48]%asi,%o7
128 or %l1,%g4,%g4
129 ldxa [%i1+56]%asi,%g1
130 or %l3,%g5,%g5
131 bnz,a,pn %icc,.+8
132 ldxa [%i1+64]%asi,%g2
133
134 srlx %o0,%i3,%o0 ! align X[0]
135 sllx %o1,%i4,%g3
136 sethi %hi(3614090360),%l5
137 sllx %g3,%i5,%g3
138 or %l5,%lo(3614090360),%l5
139 or %g3,%o0,%o0
140 xor %l2,%l3,%l4
141 add %o0,%l5,%l5 ! X[0]+K[0]
142 srlx %o0,32,%g3 ! extract X[1]
143 and %l1,%l4,%l4 ! round 0
144 add %l5,%l0,%l0
145 xor %l3,%l4,%l4
146 sethi %hi(3905402710),%l5
147 add %l4,%l0,%l0
148 or %l5,%lo(3905402710),%l5
149 sll %l0,7,%l6
150 add %g3,%l5,%l5 ! X[1]+K[1]
151 srl %l0,32-7,%l0
152 add %l1,%l6,%l6
153 xor %l1,%l2,%l4
154 add %l6,%l0,%l0
155 srlx %o1,%i3,%o1 ! align X[2]
156 and %l0,%l4,%l4 ! round 1
157 sllx %o2,%i4,%g3
158 add %l5,%l3,%l3
159 sllx %g3,%i5,%g3
160 xor %l2,%l4,%l4
161 or %g3,%o1,%o1
162 sethi %hi(606105819),%l5
163 add %l4,%l3,%l3
164 or %l5,%lo(606105819),%l5
165 sll %l3,12,%l6
166 add %o1,%l5,%l5 ! X[2]+K[2]
167 srl %l3,32-12,%l3
168 add %l0,%l6,%l6
169 xor %l0,%l1,%l4
170 add %l6,%l3,%l3
171 srlx %o1,32,%g3 ! extract X[3]
172 and %l3,%l4,%l4 ! round 2
173 add %l5,%l2,%l2
174 xor %l1,%l4,%l4
175 sethi %hi(3250441966),%l5
176 add %l4,%l2,%l2
177 or %l5,%lo(3250441966),%l5
178 sll %l2,17,%l6
179 add %g3,%l5,%l5 ! X[3]+K[3]
180 srl %l2,32-17,%l2
181 add %l3,%l6,%l6
182 xor %l3,%l0,%l4
183 add %l6,%l2,%l2
184 srlx %o2,%i3,%o2 ! align X[4]
185 and %l2,%l4,%l4 ! round 3
186 sllx %o3,%i4,%g3
187 add %l5,%l1,%l1
188 sllx %g3,%i5,%g3
189 xor %l0,%l4,%l4
190 or %g3,%o2,%o2
191 sethi %hi(4118548399),%l5
192 add %l4,%l1,%l1
193 or %l5,%lo(4118548399),%l5
194 sll %l1,22,%l6
195 add %o2,%l5,%l5 ! X[4]+K[4]
196 srl %l1,32-22,%l1
197 add %l2,%l6,%l6
198 xor %l2,%l3,%l4
199 add %l6,%l1,%l1
200 srlx %o2,32,%g3 ! extract X[5]
201 and %l1,%l4,%l4 ! round 4
202 add %l5,%l0,%l0
203 xor %l3,%l4,%l4
204 sethi %hi(1200080426),%l5
205 add %l4,%l0,%l0
206 or %l5,%lo(1200080426),%l5
207 sll %l0,7,%l6
208 add %g3,%l5,%l5 ! X[5]+K[5]
209 srl %l0,32-7,%l0
210 add %l1,%l6,%l6
211 xor %l1,%l2,%l4
212 add %l6,%l0,%l0
213 srlx %o3,%i3,%o3 ! align X[6]
214 and %l0,%l4,%l4 ! round 5
215 sllx %o4,%i4,%g3
216 add %l5,%l3,%l3
217 sllx %g3,%i5,%g3
218 xor %l2,%l4,%l4
219 or %g3,%o3,%o3
220 sethi %hi(2821735955),%l5
221 add %l4,%l3,%l3
222 or %l5,%lo(2821735955),%l5
223 sll %l3,12,%l6
224 add %o3,%l5,%l5 ! X[6]+K[6]
225 srl %l3,32-12,%l3
226 add %l0,%l6,%l6
227 xor %l0,%l1,%l4
228 add %l6,%l3,%l3
229 srlx %o3,32,%g3 ! extract X[7]
230 and %l3,%l4,%l4 ! round 6
231 add %l5,%l2,%l2
232 xor %l1,%l4,%l4
233 sethi %hi(4249261313),%l5
234 add %l4,%l2,%l2
235 or %l5,%lo(4249261313),%l5
236 sll %l2,17,%l6
237 add %g3,%l5,%l5 ! X[7]+K[7]
238 srl %l2,32-17,%l2
239 add %l3,%l6,%l6
240 xor %l3,%l0,%l4
241 add %l6,%l2,%l2
242 srlx %o4,%i3,%o4 ! align X[8]
243 and %l2,%l4,%l4 ! round 7
244 sllx %o5,%i4,%g3
245 add %l5,%l1,%l1
246 sllx %g3,%i5,%g3
247 xor %l0,%l4,%l4
248 or %g3,%o4,%o4
249 sethi %hi(1770035416),%l5
250 add %l4,%l1,%l1
251 or %l5,%lo(1770035416),%l5
252 sll %l1,22,%l6
253 add %o4,%l5,%l5 ! X[8]+K[8]
254 srl %l1,32-22,%l1
255 add %l2,%l6,%l6
256 xor %l2,%l3,%l4
257 add %l6,%l1,%l1
258 srlx %o4,32,%g3 ! extract X[9]
259 and %l1,%l4,%l4 ! round 8
260 add %l5,%l0,%l0
261 xor %l3,%l4,%l4
262 sethi %hi(2336552879),%l5
263 add %l4,%l0,%l0
264 or %l5,%lo(2336552879),%l5
265 sll %l0,7,%l6
266 add %g3,%l5,%l5 ! X[9]+K[9]
267 srl %l0,32-7,%l0
268 add %l1,%l6,%l6
269 xor %l1,%l2,%l4
270 add %l6,%l0,%l0
271 srlx %o5,%i3,%o5 ! align X[10]
272 and %l0,%l4,%l4 ! round 9
273 sllx %o7,%i4,%g3
274 add %l5,%l3,%l3
275 sllx %g3,%i5,%g3
276 xor %l2,%l4,%l4
277 or %g3,%o5,%o5
278 sethi %hi(4294925233),%l5
279 add %l4,%l3,%l3
280 or %l5,%lo(4294925233),%l5
281 sll %l3,12,%l6
282 add %o5,%l5,%l5 ! X[10]+K[10]
283 srl %l3,32-12,%l3
284 add %l0,%l6,%l6
285 xor %l0,%l1,%l4
286 add %l6,%l3,%l3
287 srlx %o5,32,%g3 ! extract X[11]
288 and %l3,%l4,%l4 ! round 10
289 add %l5,%l2,%l2
290 xor %l1,%l4,%l4
291 sethi %hi(2304563134),%l5
292 add %l4,%l2,%l2
293 or %l5,%lo(2304563134),%l5
294 sll %l2,17,%l6
295 add %g3,%l5,%l5 ! X[11]+K[11]
296 srl %l2,32-17,%l2
297 add %l3,%l6,%l6
298 xor %l3,%l0,%l4
299 add %l6,%l2,%l2
300 srlx %o7,%i3,%o7 ! align X[12]
301 and %l2,%l4,%l4 ! round 11
302 sllx %g1,%i4,%g3
303 add %l5,%l1,%l1
304 sllx %g3,%i5,%g3
305 xor %l0,%l4,%l4
306 or %g3,%o7,%o7
307 sethi %hi(1804603682),%l5
308 add %l4,%l1,%l1
309 or %l5,%lo(1804603682),%l5
310 sll %l1,22,%l6
311 add %o7,%l5,%l5 ! X[12]+K[12]
312 srl %l1,32-22,%l1
313 add %l2,%l6,%l6
314 xor %l2,%l3,%l4
315 add %l6,%l1,%l1
316 srlx %o7,32,%g3 ! extract X[13]
317 and %l1,%l4,%l4 ! round 12
318 add %l5,%l0,%l0
319 xor %l3,%l4,%l4
320 sethi %hi(4254626195),%l5
321 add %l4,%l0,%l0
322 or %l5,%lo(4254626195),%l5
323 sll %l0,7,%l6
324 add %g3,%l5,%l5 ! X[13]+K[13]
325 srl %l0,32-7,%l0
326 add %l1,%l6,%l6
327 xor %l1,%l2,%l4
328 add %l6,%l0,%l0
329 srlx %g1,%i3,%g1 ! align X[14]
330 and %l0,%l4,%l4 ! round 13
331 sllx %g2,%i4,%g3
332 add %l5,%l3,%l3
333 sllx %g3,%i5,%g3
334 xor %l2,%l4,%l4
335 or %g3,%g1,%g1
336 sethi %hi(2792965006),%l5
337 add %l4,%l3,%l3
338 or %l5,%lo(2792965006),%l5
339 sll %l3,12,%l6
340 add %g1,%l5,%l5 ! X[14]+K[14]
341 srl %l3,32-12,%l3
342 add %l0,%l6,%l6
343 xor %l0,%l1,%l4
344 add %l6,%l3,%l3
345 srlx %g1,32,%g3 ! extract X[15]
346 and %l3,%l4,%l4 ! round 14
347 add %l5,%l2,%l2
348 xor %l1,%l4,%l4
349 sethi %hi(1236535329),%l5
350 add %l4,%l2,%l2
351 or %l5,%lo(1236535329),%l5
352 sll %l2,17,%l6
353 add %g3,%l5,%l5 ! X[15]+K[15]
354 srl %l2,32-17,%l2
355 add %l3,%l6,%l6
356 xor %l3,%l0,%l4
357 add %l6,%l2,%l2
358 srlx %o0,32,%g3 ! extract X[1]
359 and %l2,%l4,%l4 ! round 15
360 add %l5,%l1,%l1
361 xor %l0,%l4,%l4
362 sethi %hi(4129170786),%l5
363 add %l4,%l1,%l1
364 or %l5,%lo(4129170786),%l5
365 sll %l1,22,%l6
366 add %g3,%l5,%l5 ! X[1]+K[16]
367 srl %l1,32-22,%l1
368 add %l2,%l6,%l6
369 andn %l2,%l3,%l4
370 add %l6,%l1,%l1
371 and %l1,%l3,%l6 ! round 16
372 add %l5,%l0,%l0
373 or %l6,%l4,%l4
374 sethi %hi(3225465664),%l5
375 add %l4,%l0,%l0
376 or %l5,%lo(3225465664),%l5
377 sll %l0,5,%l6
378 add %o3,%l5,%l5 ! X[6]+K[17]
379 srl %l0,32-5,%l0
380 add %l1,%l6,%l6
381 andn %l1,%l2,%l4
382 add %l6,%l0,%l0
383 srlx %o5,32,%g3 ! extract X[11]
384 and %l0,%l2,%l6 ! round 17
385 add %l5,%l3,%l3
386 or %l6,%l4,%l4
387 sethi %hi(643717713),%l5
388 add %l4,%l3,%l3
389 or %l5,%lo(643717713),%l5
390 sll %l3,9,%l6
391 add %g3,%l5,%l5 ! X[11]+K[18]
392 srl %l3,32-9,%l3
393 add %l0,%l6,%l6
394 andn %l0,%l1,%l4
395 add %l6,%l3,%l3
396 and %l3,%l1,%l6 ! round 18
397 add %l5,%l2,%l2
398 or %l6,%l4,%l4
399 sethi %hi(3921069994),%l5
400 add %l4,%l2,%l2
401 or %l5,%lo(3921069994),%l5
402 sll %l2,14,%l6
403 add %o0,%l5,%l5 ! X[0]+K[19]
404 srl %l2,32-14,%l2
405 add %l3,%l6,%l6
406 andn %l3,%l0,%l4
407 add %l6,%l2,%l2
408 srlx %o2,32,%g3 ! extract X[5]
409 and %l2,%l0,%l6 ! round 19
410 add %l5,%l1,%l1
411 or %l6,%l4,%l4
412 sethi %hi(3593408605),%l5
413 add %l4,%l1,%l1
414 or %l5,%lo(3593408605),%l5
415 sll %l1,20,%l6
416 add %g3,%l5,%l5 ! X[5]+K[20]
417 srl %l1,32-20,%l1
418 add %l2,%l6,%l6
419 andn %l2,%l3,%l4
420 add %l6,%l1,%l1
421 and %l1,%l3,%l6 ! round 20
422 add %l5,%l0,%l0
423 or %l6,%l4,%l4
424 sethi %hi(38016083),%l5
425 add %l4,%l0,%l0
426 or %l5,%lo(38016083),%l5
427 sll %l0,5,%l6
428 add %o5,%l5,%l5 ! X[10]+K[21]
429 srl %l0,32-5,%l0
430 add %l1,%l6,%l6
431 andn %l1,%l2,%l4
432 add %l6,%l0,%l0
433 srlx %g1,32,%g3 ! extract X[15]
434 and %l0,%l2,%l6 ! round 21
435 add %l5,%l3,%l3
436 or %l6,%l4,%l4
437 sethi %hi(3634488961),%l5
438 add %l4,%l3,%l3
439 or %l5,%lo(3634488961),%l5
440 sll %l3,9,%l6
441 add %g3,%l5,%l5 ! X[15]+K[22]
442 srl %l3,32-9,%l3
443 add %l0,%l6,%l6
444 andn %l0,%l1,%l4
445 add %l6,%l3,%l3
446 and %l3,%l1,%l6 ! round 22
447 add %l5,%l2,%l2
448 or %l6,%l4,%l4
449 sethi %hi(3889429448),%l5
450 add %l4,%l2,%l2
451 or %l5,%lo(3889429448),%l5
452 sll %l2,14,%l6
453 add %o2,%l5,%l5 ! X[4]+K[23]
454 srl %l2,32-14,%l2
455 add %l3,%l6,%l6
456 andn %l3,%l0,%l4
457 add %l6,%l2,%l2
458 srlx %o4,32,%g3 ! extract X[9]
459 and %l2,%l0,%l6 ! round 23
460 add %l5,%l1,%l1
461 or %l6,%l4,%l4
462 sethi %hi(568446438),%l5
463 add %l4,%l1,%l1
464 or %l5,%lo(568446438),%l5
465 sll %l1,20,%l6
466 add %g3,%l5,%l5 ! X[9]+K[24]
467 srl %l1,32-20,%l1
468 add %l2,%l6,%l6
469 andn %l2,%l3,%l4
470 add %l6,%l1,%l1
471 and %l1,%l3,%l6 ! round 24
472 add %l5,%l0,%l0
473 or %l6,%l4,%l4
474 sethi %hi(3275163606),%l5
475 add %l4,%l0,%l0
476 or %l5,%lo(3275163606),%l5
477 sll %l0,5,%l6
478 add %g1,%l5,%l5 ! X[14]+K[25]
479 srl %l0,32-5,%l0
480 add %l1,%l6,%l6
481 andn %l1,%l2,%l4
482 add %l6,%l0,%l0
483 srlx %o1,32,%g3 ! extract X[3]
484 and %l0,%l2,%l6 ! round 25
485 add %l5,%l3,%l3
486 or %l6,%l4,%l4
487 sethi %hi(4107603335),%l5
488 add %l4,%l3,%l3
489 or %l5,%lo(4107603335),%l5
490 sll %l3,9,%l6
491 add %g3,%l5,%l5 ! X[3]+K[26]
492 srl %l3,32-9,%l3
493 add %l0,%l6,%l6
494 andn %l0,%l1,%l4
495 add %l6,%l3,%l3
496 and %l3,%l1,%l6 ! round 26
497 add %l5,%l2,%l2
498 or %l6,%l4,%l4
499 sethi %hi(1163531501),%l5
500 add %l4,%l2,%l2
501 or %l5,%lo(1163531501),%l5
502 sll %l2,14,%l6
503 add %o4,%l5,%l5 ! X[8]+K[27]
504 srl %l2,32-14,%l2
505 add %l3,%l6,%l6
506 andn %l3,%l0,%l4
507 add %l6,%l2,%l2
508 srlx %o7,32,%g3 ! extract X[13]
509 and %l2,%l0,%l6 ! round 27
510 add %l5,%l1,%l1
511 or %l6,%l4,%l4
512 sethi %hi(2850285829),%l5
513 add %l4,%l1,%l1
514 or %l5,%lo(2850285829),%l5
515 sll %l1,20,%l6
516 add %g3,%l5,%l5 ! X[13]+K[28]
517 srl %l1,32-20,%l1
518 add %l2,%l6,%l6
519 andn %l2,%l3,%l4
520 add %l6,%l1,%l1
521 and %l1,%l3,%l6 ! round 28
522 add %l5,%l0,%l0
523 or %l6,%l4,%l4
524 sethi %hi(4243563512),%l5
525 add %l4,%l0,%l0
526 or %l5,%lo(4243563512),%l5
527 sll %l0,5,%l6
528 add %o1,%l5,%l5 ! X[2]+K[29]
529 srl %l0,32-5,%l0
530 add %l1,%l6,%l6
531 andn %l1,%l2,%l4
532 add %l6,%l0,%l0
533 srlx %o3,32,%g3 ! extract X[7]
534 and %l0,%l2,%l6 ! round 29
535 add %l5,%l3,%l3
536 or %l6,%l4,%l4
537 sethi %hi(1735328473),%l5
538 add %l4,%l3,%l3
539 or %l5,%lo(1735328473),%l5
540 sll %l3,9,%l6
541 add %g3,%l5,%l5 ! X[7]+K[30]
542 srl %l3,32-9,%l3
543 add %l0,%l6,%l6
544 andn %l0,%l1,%l4
545 add %l6,%l3,%l3
546 and %l3,%l1,%l6 ! round 30
547 add %l5,%l2,%l2
548 or %l6,%l4,%l4
549 sethi %hi(2368359562),%l5
550 add %l4,%l2,%l2
551 or %l5,%lo(2368359562),%l5
552 sll %l2,14,%l6
553 add %o7,%l5,%l5 ! X[12]+K[31]
554 srl %l2,32-14,%l2
555 add %l3,%l6,%l6
556 andn %l3,%l0,%l4
557 add %l6,%l2,%l2
558 srlx %o2,32,%g3 ! extract X[5]
559 and %l2,%l0,%l6 ! round 31
560 add %l5,%l1,%l1
561 or %l6,%l4,%l4
562 sethi %hi(4294588738),%l5
563 add %l4,%l1,%l1
564 or %l5,%lo(4294588738),%l5
565 sll %l1,20,%l6
566 add %g3,%l5,%l5 ! X[5]+K[32]
567 srl %l1,32-20,%l1
568 add %l2,%l6,%l6
569 xor %l2,%l3,%l4
570 add %l6,%l1,%l1
571 add %l5,%l0,%l0 ! round 32
572 xor %l1,%l4,%l4
573 sethi %hi(2272392833),%l5
574 add %l4,%l0,%l0
575 or %l5,%lo(2272392833),%l5
576 sll %l0,4,%l6
577 add %o4,%l5,%l5 ! X[8]+K[33]
578 srl %l0,32-4,%l0
579 add %l1,%l6,%l6
580 xor %l1,%l2,%l4
581 add %l6,%l0,%l0
582 srlx %o5,32,%g3 ! extract X[11]
583 add %l5,%l3,%l3 ! round 33
584 xor %l0,%l4,%l4
585 sethi %hi(1839030562),%l5
586 add %l4,%l3,%l3
587 or %l5,%lo(1839030562),%l5
588 sll %l3,11,%l6
589 add %g3,%l5,%l5 ! X[11]+K[34]
590 srl %l3,32-11,%l3
591 add %l0,%l6,%l6
592 xor %l0,%l1,%l4
593 add %l6,%l3,%l3
594 add %l5,%l2,%l2 ! round 34
595 xor %l3,%l4,%l4
596 sethi %hi(4259657740),%l5
597 add %l4,%l2,%l2
598 or %l5,%lo(4259657740),%l5
599 sll %l2,16,%l6
600 add %g1,%l5,%l5 ! X[14]+K[35]
601 srl %l2,32-16,%l2
602 add %l3,%l6,%l6
603 xor %l3,%l0,%l4
604 add %l6,%l2,%l2
605 srlx %o0,32,%g3 ! extract X[1]
606 add %l5,%l1,%l1 ! round 35
607 xor %l2,%l4,%l4
608 sethi %hi(2763975236),%l5
609 add %l4,%l1,%l1
610 or %l5,%lo(2763975236),%l5
611 sll %l1,23,%l6
612 add %g3,%l5,%l5 ! X[1]+K[36]
613 srl %l1,32-23,%l1
614 add %l2,%l6,%l6
615 xor %l2,%l3,%l4
616 add %l6,%l1,%l1
617 add %l5,%l0,%l0 ! round 36
618 xor %l1,%l4,%l4
619 sethi %hi(1272893353),%l5
620 add %l4,%l0,%l0
621 or %l5,%lo(1272893353),%l5
622 sll %l0,4,%l6
623 add %o2,%l5,%l5 ! X[4]+K[37]
624 srl %l0,32-4,%l0
625 add %l1,%l6,%l6
626 xor %l1,%l2,%l4
627 add %l6,%l0,%l0
628 srlx %o3,32,%g3 ! extract X[7]
629 add %l5,%l3,%l3 ! round 37
630 xor %l0,%l4,%l4
631 sethi %hi(4139469664),%l5
632 add %l4,%l3,%l3
633 or %l5,%lo(4139469664),%l5
634 sll %l3,11,%l6
635 add %g3,%l5,%l5 ! X[7]+K[38]
636 srl %l3,32-11,%l3
637 add %l0,%l6,%l6
638 xor %l0,%l1,%l4
639 add %l6,%l3,%l3
640 add %l5,%l2,%l2 ! round 38
641 xor %l3,%l4,%l4
642 sethi %hi(3200236656),%l5
643 add %l4,%l2,%l2
644 or %l5,%lo(3200236656),%l5
645 sll %l2,16,%l6
646 add %o5,%l5,%l5 ! X[10]+K[39]
647 srl %l2,32-16,%l2
648 add %l3,%l6,%l6
649 xor %l3,%l0,%l4
650 add %l6,%l2,%l2
651 srlx %o7,32,%g3 ! extract X[13]
652 add %l5,%l1,%l1 ! round 39
653 xor %l2,%l4,%l4
654 sethi %hi(681279174),%l5
655 add %l4,%l1,%l1
656 or %l5,%lo(681279174),%l5
657 sll %l1,23,%l6
658 add %g3,%l5,%l5 ! X[13]+K[40]
659 srl %l1,32-23,%l1
660 add %l2,%l6,%l6
661 xor %l2,%l3,%l4
662 add %l6,%l1,%l1
663 add %l5,%l0,%l0 ! round 40
664 xor %l1,%l4,%l4
665 sethi %hi(3936430074),%l5
666 add %l4,%l0,%l0
667 or %l5,%lo(3936430074),%l5
668 sll %l0,4,%l6
669 add %o0,%l5,%l5 ! X[0]+K[41]
670 srl %l0,32-4,%l0
671 add %l1,%l6,%l6
672 xor %l1,%l2,%l4
673 add %l6,%l0,%l0
674 srlx %o1,32,%g3 ! extract X[3]
675 add %l5,%l3,%l3 ! round 41
676 xor %l0,%l4,%l4
677 sethi %hi(3572445317),%l5
678 add %l4,%l3,%l3
679 or %l5,%lo(3572445317),%l5
680 sll %l3,11,%l6
681 add %g3,%l5,%l5 ! X[3]+K[42]
682 srl %l3,32-11,%l3
683 add %l0,%l6,%l6
684 xor %l0,%l1,%l4
685 add %l6,%l3,%l3
686 add %l5,%l2,%l2 ! round 42
687 xor %l3,%l4,%l4
688 sethi %hi(76029189),%l5
689 add %l4,%l2,%l2
690 or %l5,%lo(76029189),%l5
691 sll %l2,16,%l6
692 add %o3,%l5,%l5 ! X[6]+K[43]
693 srl %l2,32-16,%l2
694 add %l3,%l6,%l6
695 xor %l3,%l0,%l4
696 add %l6,%l2,%l2
697 srlx %o4,32,%g3 ! extract X[9]
698 add %l5,%l1,%l1 ! round 43
699 xor %l2,%l4,%l4
700 sethi %hi(3654602809),%l5
701 add %l4,%l1,%l1
702 or %l5,%lo(3654602809),%l5
703 sll %l1,23,%l6
704 add %g3,%l5,%l5 ! X[9]+K[44]
705 srl %l1,32-23,%l1
706 add %l2,%l6,%l6
707 xor %l2,%l3,%l4
708 add %l6,%l1,%l1
709 add %l5,%l0,%l0 ! round 44
710 xor %l1,%l4,%l4
711 sethi %hi(3873151461),%l5
712 add %l4,%l0,%l0
713 or %l5,%lo(3873151461),%l5
714 sll %l0,4,%l6
715 add %o7,%l5,%l5 ! X[12]+K[45]
716 srl %l0,32-4,%l0
717 add %l1,%l6,%l6
718 xor %l1,%l2,%l4
719 add %l6,%l0,%l0
720 srlx %g1,32,%g3 ! extract X[15]
721 add %l5,%l3,%l3 ! round 45
722 xor %l0,%l4,%l4
723 sethi %hi(530742520),%l5
724 add %l4,%l3,%l3
725 or %l5,%lo(530742520),%l5
726 sll %l3,11,%l6
727 add %g3,%l5,%l5 ! X[15]+K[46]
728 srl %l3,32-11,%l3
729 add %l0,%l6,%l6
730 xor %l0,%l1,%l4
731 add %l6,%l3,%l3
732 add %l5,%l2,%l2 ! round 46
733 xor %l3,%l4,%l4
734 sethi %hi(3299628645),%l5
735 add %l4,%l2,%l2
736 or %l5,%lo(3299628645),%l5
737 sll %l2,16,%l6
738 add %o1,%l5,%l5 ! X[2]+K[47]
739 srl %l2,32-16,%l2
740 add %l3,%l6,%l6
741 xor %l3,%l0,%l4
742 add %l6,%l2,%l2
743 add %l5,%l1,%l1 ! round 47
744 xor %l2,%l4,%l4
745 sethi %hi(4096336452),%l5
746 add %l4,%l1,%l1
747 or %l5,%lo(4096336452),%l5
748 sll %l1,23,%l6
749 add %o0,%l5,%l5 ! X[0]+K[48]
750 srl %l1,32-23,%l1
751 add %l2,%l6,%l6
752 xor %l2,%l3,%l4
753 add %l6,%l1,%l1
754 add %l5,%l0,%l0 ! round 48
755 srlx %o3,32,%g3 ! extract X[7]
756 orn %l1,%l3,%l4
757 sethi %hi(1126891415),%l5
758 xor %l2,%l4,%l4
759 or %l5,%lo(1126891415),%l5
760 add %l4,%l0,%l0
761 sll %l0,6,%l6
762 add %g3,%l5,%l5 ! X[7]+K[49]
763 srl %l0,32-6,%l0
764 add %l1,%l6,%l6
765 add %l6,%l0,%l0
766 add %l5,%l3,%l3 ! round 49
767 orn %l0,%l2,%l4
768 sethi %hi(2878612391),%l5
769 xor %l1,%l4,%l4
770 or %l5,%lo(2878612391),%l5
771 add %l4,%l3,%l3
772 sll %l3,10,%l6
773 add %g1,%l5,%l5 ! X[14]+K[50]
774 srl %l3,32-10,%l3
775 add %l0,%l6,%l6
776 add %l6,%l3,%l3
777 add %l5,%l2,%l2 ! round 50
778 srlx %o2,32,%g3 ! extract X[5]
779 orn %l3,%l1,%l4
780 sethi %hi(4237533241),%l5
781 xor %l0,%l4,%l4
782 or %l5,%lo(4237533241),%l5
783 add %l4,%l2,%l2
784 sll %l2,15,%l6
785 add %g3,%l5,%l5 ! X[5]+K[51]
786 srl %l2,32-15,%l2
787 add %l3,%l6,%l6
788 add %l6,%l2,%l2
789 add %l5,%l1,%l1 ! round 51
790 orn %l2,%l0,%l4
791 sethi %hi(1700485571),%l5
792 xor %l3,%l4,%l4
793 or %l5,%lo(1700485571),%l5
794 add %l4,%l1,%l1
795 sll %l1,21,%l6
796 add %o7,%l5,%l5 ! X[12]+K[52]
797 srl %l1,32-21,%l1
798 add %l2,%l6,%l6
799 add %l6,%l1,%l1
800 add %l5,%l0,%l0 ! round 52
801 srlx %o1,32,%g3 ! extract X[3]
802 orn %l1,%l3,%l4
803 sethi %hi(2399980690),%l5
804 xor %l2,%l4,%l4
805 or %l5,%lo(2399980690),%l5
806 add %l4,%l0,%l0
807 sll %l0,6,%l6
808 add %g3,%l5,%l5 ! X[3]+K[53]
809 srl %l0,32-6,%l0
810 add %l1,%l6,%l6
811 add %l6,%l0,%l0
812 add %l5,%l3,%l3 ! round 53
813 orn %l0,%l2,%l4
814 sethi %hi(4293915773),%l5
815 xor %l1,%l4,%l4
816 or %l5,%lo(4293915773),%l5
817 add %l4,%l3,%l3
818 sll %l3,10,%l6
819 add %o5,%l5,%l5 ! X[10]+K[54]
820 srl %l3,32-10,%l3
821 add %l0,%l6,%l6
822 add %l6,%l3,%l3
823 add %l5,%l2,%l2 ! round 54
824 srlx %o0,32,%g3 ! extract X[1]
825 orn %l3,%l1,%l4
826 sethi %hi(2240044497),%l5
827 xor %l0,%l4,%l4
828 or %l5,%lo(2240044497),%l5
829 add %l4,%l2,%l2
830 sll %l2,15,%l6
831 add %g3,%l5,%l5 ! X[1]+K[55]
832 srl %l2,32-15,%l2
833 add %l3,%l6,%l6
834 add %l6,%l2,%l2
835 add %l5,%l1,%l1 ! round 55
836 orn %l2,%l0,%l4
837 sethi %hi(1873313359),%l5
838 xor %l3,%l4,%l4
839 or %l5,%lo(1873313359),%l5
840 add %l4,%l1,%l1
841 sll %l1,21,%l6
842 add %o4,%l5,%l5 ! X[8]+K[56]
843 srl %l1,32-21,%l1
844 add %l2,%l6,%l6
845 add %l6,%l1,%l1
846 add %l5,%l0,%l0 ! round 56
847 srlx %g1,32,%g3 ! extract X[15]
848 orn %l1,%l3,%l4
849 sethi %hi(4264355552),%l5
850 xor %l2,%l4,%l4
851 or %l5,%lo(4264355552),%l5
852 add %l4,%l0,%l0
853 sll %l0,6,%l6
854 add %g3,%l5,%l5 ! X[15]+K[57]
855 srl %l0,32-6,%l0
856 add %l1,%l6,%l6
857 add %l6,%l0,%l0
858 add %l5,%l3,%l3 ! round 57
859 orn %l0,%l2,%l4
860 sethi %hi(2734768916),%l5
861 xor %l1,%l4,%l4
862 or %l5,%lo(2734768916),%l5
863 add %l4,%l3,%l3
864 sll %l3,10,%l6
865 add %o3,%l5,%l5 ! X[6]+K[58]
866 srl %l3,32-10,%l3
867 add %l0,%l6,%l6
868 add %l6,%l3,%l3
869 add %l5,%l2,%l2 ! round 58
870 srlx %o7,32,%g3 ! extract X[13]
871 orn %l3,%l1,%l4
872 sethi %hi(1309151649),%l5
873 xor %l0,%l4,%l4
874 or %l5,%lo(1309151649),%l5
875 add %l4,%l2,%l2
876 sll %l2,15,%l6
877 add %g3,%l5,%l5 ! X[13]+K[59]
878 srl %l2,32-15,%l2
879 add %l3,%l6,%l6
880 add %l6,%l2,%l2
881 add %l5,%l1,%l1 ! round 59
882 orn %l2,%l0,%l4
883 sethi %hi(4149444226),%l5
884 xor %l3,%l4,%l4
885 or %l5,%lo(4149444226),%l5
886 add %l4,%l1,%l1
887 sll %l1,21,%l6
888 add %o2,%l5,%l5 ! X[4]+K[60]
889 srl %l1,32-21,%l1
890 add %l2,%l6,%l6
891 add %l6,%l1,%l1
892 add %l5,%l0,%l0 ! round 60
893 srlx %o5,32,%g3 ! extract X[11]
894 orn %l1,%l3,%l4
895 sethi %hi(3174756917),%l5
896 xor %l2,%l4,%l4
897 or %l5,%lo(3174756917),%l5
898 add %l4,%l0,%l0
899 sll %l0,6,%l6
900 add %g3,%l5,%l5 ! X[11]+K[61]
901 srl %l0,32-6,%l0
902 add %l1,%l6,%l6
903 add %l6,%l0,%l0
904 add %l5,%l3,%l3 ! round 61
905 orn %l0,%l2,%l4
906 sethi %hi(718787259),%l5
907 xor %l1,%l4,%l4
908 or %l5,%lo(718787259),%l5
909 add %l4,%l3,%l3
910 sll %l3,10,%l6
911 add %o1,%l5,%l5 ! X[2]+K[62]
912 srl %l3,32-10,%l3
913 add %l0,%l6,%l6
914 add %l6,%l3,%l3
915 add %l5,%l2,%l2 ! round 62
916 srlx %o4,32,%g3 ! extract X[9]
917 orn %l3,%l1,%l4
918 sethi %hi(3951481745),%l5
919 xor %l0,%l4,%l4
920 or %l5,%lo(3951481745),%l5
921 add %l4,%l2,%l2
922 sll %l2,15,%l6
923 add %g3,%l5,%l5 ! X[9]+K[63]
924 srl %l2,32-15,%l2
925 add %l3,%l6,%l6
926 add %l6,%l2,%l2
927 add %l5,%l1,%l1 ! round 63
928 orn %l2,%l0,%l4
929 sethi %hi(0),%l5
930 xor %l3,%l4,%l4
931 or %l5,%lo(0),%l5
932 add %l4,%l1,%l1
933 sll %l1,21,%l6
934 add %o0,%l5,%l5 ! X[0]+K[64]
935 srl %l1,32-21,%l1
936 add %l2,%l6,%l6
937 add %l6,%l1,%l1
938 srlx %g4,32,%l4 ! unpack A,B,C,D and accumulate
939 add %i1,64,%i1 ! advance inp
940 srlx %g5,32,%l5
941 add %l4,%l0,%l0
942 subcc %i2,1,%i2 ! done yet?
943 add %g4,%l1,%l1
944 add %l5,%l2,%l2
945 add %g5,%l3,%l3
946 srl %l1,0,%l1 ! clruw %l1
947 bne SIZE_T_CC,.Loop
948 srl %l3,0,%l3 ! clruw %l3
949
950 st %l0,[%i0+0] ! write out ctx
951 st %l1,[%i0+4]
952 st %l2,[%i0+8]
953 st %l3,[%i0+12]
954
955 wr %g0,%l7,%asi
956 ret
957 restore
958 .type md5_block_asm_data_order,#function
959 .size md5_block_asm_data_order,(.-md5_block_asm_data_order)
960
961 .asciz "MD5 block transform for SPARCv9, CRYPTOGAMS by <appro (at) openssl.org>"
962 .align 4
963