1 #include "mips_arch.h"
2 
3 .text
4 .set	noat
5 #if !defined(__mips_eabi) && (!defined(__vxworks) || defined(__pic__))
6 .option	pic2
7 #endif
8 
9 .align	5
10 .globl	sha512_block_data_order
11 .ent	sha512_block_data_order
12 sha512_block_data_order:
13 	.frame	$29,256,$31
14 	.mask	0xc0ff0000,-8
15 	.set	noreorder
16 	dsubu $29,256
17 	sd	$31,256-1*8($29)
18 	sd	$30,256-2*8($29)
19 	sd	$23,256-3*8($29)
20 	sd	$22,256-4*8($29)
21 	sd	$21,256-5*8($29)
22 	sd	$20,256-6*8($29)
23 	sd	$19,256-7*8($29)
24 	sd	$18,256-8*8($29)
25 	sd	$17,256-9*8($29)
26 	sd	$16,256-10*8($29)
27 	dsll $23,$6,7
28 	.cplocal	$6
29 	.cpsetup	$25,$0,sha512_block_data_order
30 	.set	reorder
31 	dla	$6,K512		# PIC-ified 'load address'
32 
33 	ld	$1,0*8($4)		# load context
34 	ld	$2,1*8($4)
35 	ld	$3,2*8($4)
36 	ld	$7,3*8($4)
37 	ld	$24,4*8($4)
38 	ld	$25,5*8($4)
39 	ld	$30,6*8($4)
40 	ld	$31,7*8($4)
41 
42 	daddu $23,$5		# pointer to the end of input
43 	sd	$23,16*8($29)
44 	b	.Loop
45 
46 .align	5
47 .Loop:
48 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
49 	ld	$8,($5)
50 #else
51 	ldl	$8,7($5)
52 	ldr	$8,0($5)
53 #endif
54 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
55 	ld	$9,8($5)
56 #else
57 	ldl	$9,15($5)
58 	ldr	$9,8($5)
59 #endif
60 #if defined(_MIPS_ARCH_MIPS64R2)
61 	dsbh	$8,$8		# byte swap(0)
62 	dshd	$8,$8
63 #else
64 	ori	$13,$0,0xFF
65 	dsll	$15,$13,32
66 	or	$13,$15		# 0x000000FF000000FF
67 	and	$14,$8,$13	# byte swap(0)
68 	dsrl	$15,$8,24
69 	dsll	$14,24
70 	and	$15,$13
71 	dsll	$13,8			# 0x0000FF000000FF00
72 	or	$14,$15
73 	and	$15,$8,$13
74 	dsrl	$8,8
75 	dsll	$15,8
76 	and	$8,$13
77 	or	$14,$15
78 	or	$8,$14
79 	dsrl	$14,$8,32
80 	dsll	$8,32
81 	or	$8,$14
82 #endif
83 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
84 	xor	$15,$25,$30			# 0
85 	drotr	$13,$24,14
86 	daddu	$12,$8,$31
87 	drotr	$14,$24,18
88 	and	$15,$24
89 	drotr	$31,$24,41
90 	xor	$13,$14
91 	drotr	$14,$1,28
92 	xor	$15,$30			# Ch(e,f,g)
93 	xor	$13,$31			# Sigma1(e)
94 
95 	drotr	$31,$1,34
96 	daddu	$12,$15
97 	ld	$15,0($6)		# K[0]
98 	xor	$31,$14
99 	drotr	$14,$1,39
100 	daddu	$12,$13
101 	and	$13,$2,$3
102 	xor	$31,$14			# Sigma0(a)
103 	xor	$14,$2,$3
104 #else
105 	daddu	$12,$8,$31			# 0
106 	dsrl	$31,$24,14
107 	xor	$15,$25,$30
108 	dsll	$14,$24,23
109 	and	$15,$24
110 	dsrl	$13,$24,18
111 	xor	$31,$14
112 	dsll	$14,$24,46
113 	xor	$31,$13
114 	dsrl	$13,$24,41
115 	xor	$31,$14
116 	dsll	$14,$24,50
117 	xor	$31,$13
118 	xor	$15,$30			# Ch(e,f,g)
119 	xor	$13,$14,$31			# Sigma1(e)
120 
121 	dsrl	$31,$1,28
122 	daddu	$12,$15
123 	ld	$15,0($6)		# K[0]
124 	dsll	$14,$1,25
125 	daddu	$12,$13
126 	dsrl	$13,$1,34
127 	xor	$31,$14
128 	dsll	$14,$1,30
129 	xor	$31,$13
130 	dsrl	$13,$1,39
131 	xor	$31,$14
132 	dsll	$14,$1,36
133 	xor	$31,$13
134 	and	$13,$2,$3
135 	xor	$31,$14			# Sigma0(a)
136 	xor	$14,$2,$3
137 #endif
138 	sd	$8,0($29)	# offload to ring buffer
139 	daddu	$31,$13
140 	and	$14,$1
141 	daddu	$12,$15			# +=K[0]
142 	daddu	$31,$14			# +=Maj(a,b,c)
143 	daddu	$7,$12
144 	daddu	$31,$12
145 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
146 	ld	$10,16($5)
147 #else
148 	ldl	$10,23($5)
149 	ldr	$10,16($5)
150 #endif
151 #if defined(_MIPS_ARCH_MIPS64R2)
152 	dsbh	$9,$9		# byte swap(1)
153 	dshd	$9,$9
154 #else
155 	ori	$14,$0,0xFF
156 	dsll	$16,$14,32
157 	or	$14,$16		# 0x000000FF000000FF
158 	and	$15,$9,$14	# byte swap(1)
159 	dsrl	$16,$9,24
160 	dsll	$15,24
161 	and	$16,$14
162 	dsll	$14,8			# 0x0000FF000000FF00
163 	or	$15,$16
164 	and	$16,$9,$14
165 	dsrl	$9,8
166 	dsll	$16,8
167 	and	$9,$14
168 	or	$15,$16
169 	or	$9,$15
170 	dsrl	$15,$9,32
171 	dsll	$9,32
172 	or	$9,$15
173 #endif
174 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
175 	xor	$16,$24,$25			# 1
176 	drotr	$14,$7,14
177 	daddu	$13,$9,$30
178 	drotr	$15,$7,18
179 	and	$16,$7
180 	drotr	$30,$7,41
181 	xor	$14,$15
182 	drotr	$15,$31,28
183 	xor	$16,$25			# Ch(e,f,g)
184 	xor	$14,$30			# Sigma1(e)
185 
186 	drotr	$30,$31,34
187 	daddu	$13,$16
188 	ld	$16,8($6)		# K[1]
189 	xor	$30,$15
190 	drotr	$15,$31,39
191 	daddu	$13,$14
192 	and	$14,$1,$2
193 	xor	$30,$15			# Sigma0(a)
194 	xor	$15,$1,$2
195 #else
196 	daddu	$13,$9,$30			# 1
197 	dsrl	$30,$7,14
198 	xor	$16,$24,$25
199 	dsll	$15,$7,23
200 	and	$16,$7
201 	dsrl	$14,$7,18
202 	xor	$30,$15
203 	dsll	$15,$7,46
204 	xor	$30,$14
205 	dsrl	$14,$7,41
206 	xor	$30,$15
207 	dsll	$15,$7,50
208 	xor	$30,$14
209 	xor	$16,$25			# Ch(e,f,g)
210 	xor	$14,$15,$30			# Sigma1(e)
211 
212 	dsrl	$30,$31,28
213 	daddu	$13,$16
214 	ld	$16,8($6)		# K[1]
215 	dsll	$15,$31,25
216 	daddu	$13,$14
217 	dsrl	$14,$31,34
218 	xor	$30,$15
219 	dsll	$15,$31,30
220 	xor	$30,$14
221 	dsrl	$14,$31,39
222 	xor	$30,$15
223 	dsll	$15,$31,36
224 	xor	$30,$14
225 	and	$14,$1,$2
226 	xor	$30,$15			# Sigma0(a)
227 	xor	$15,$1,$2
228 #endif
229 	sd	$9,8($29)	# offload to ring buffer
230 	daddu	$30,$14
231 	and	$15,$31
232 	daddu	$13,$16			# +=K[1]
233 	daddu	$30,$15			# +=Maj(a,b,c)
234 	daddu	$3,$13
235 	daddu	$30,$13
236 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
237 	ld	$11,24($5)
238 #else
239 	ldl	$11,31($5)
240 	ldr	$11,24($5)
241 #endif
242 #if defined(_MIPS_ARCH_MIPS64R2)
243 	dsbh	$10,$10		# byte swap(2)
244 	dshd	$10,$10
245 #else
246 	ori	$15,$0,0xFF
247 	dsll	$17,$15,32
248 	or	$15,$17		# 0x000000FF000000FF
249 	and	$16,$10,$15	# byte swap(2)
250 	dsrl	$17,$10,24
251 	dsll	$16,24
252 	and	$17,$15
253 	dsll	$15,8			# 0x0000FF000000FF00
254 	or	$16,$17
255 	and	$17,$10,$15
256 	dsrl	$10,8
257 	dsll	$17,8
258 	and	$10,$15
259 	or	$16,$17
260 	or	$10,$16
261 	dsrl	$16,$10,32
262 	dsll	$10,32
263 	or	$10,$16
264 #endif
265 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
266 	xor	$17,$7,$24			# 2
267 	drotr	$15,$3,14
268 	daddu	$14,$10,$25
269 	drotr	$16,$3,18
270 	and	$17,$3
271 	drotr	$25,$3,41
272 	xor	$15,$16
273 	drotr	$16,$30,28
274 	xor	$17,$24			# Ch(e,f,g)
275 	xor	$15,$25			# Sigma1(e)
276 
277 	drotr	$25,$30,34
278 	daddu	$14,$17
279 	ld	$17,16($6)		# K[2]
280 	xor	$25,$16
281 	drotr	$16,$30,39
282 	daddu	$14,$15
283 	and	$15,$31,$1
284 	xor	$25,$16			# Sigma0(a)
285 	xor	$16,$31,$1
286 #else
287 	daddu	$14,$10,$25			# 2
288 	dsrl	$25,$3,14
289 	xor	$17,$7,$24
290 	dsll	$16,$3,23
291 	and	$17,$3
292 	dsrl	$15,$3,18
293 	xor	$25,$16
294 	dsll	$16,$3,46
295 	xor	$25,$15
296 	dsrl	$15,$3,41
297 	xor	$25,$16
298 	dsll	$16,$3,50
299 	xor	$25,$15
300 	xor	$17,$24			# Ch(e,f,g)
301 	xor	$15,$16,$25			# Sigma1(e)
302 
303 	dsrl	$25,$30,28
304 	daddu	$14,$17
305 	ld	$17,16($6)		# K[2]
306 	dsll	$16,$30,25
307 	daddu	$14,$15
308 	dsrl	$15,$30,34
309 	xor	$25,$16
310 	dsll	$16,$30,30
311 	xor	$25,$15
312 	dsrl	$15,$30,39
313 	xor	$25,$16
314 	dsll	$16,$30,36
315 	xor	$25,$15
316 	and	$15,$31,$1
317 	xor	$25,$16			# Sigma0(a)
318 	xor	$16,$31,$1
319 #endif
320 	sd	$10,16($29)	# offload to ring buffer
321 	daddu	$25,$15
322 	and	$16,$30
323 	daddu	$14,$17			# +=K[2]
324 	daddu	$25,$16			# +=Maj(a,b,c)
325 	daddu	$2,$14
326 	daddu	$25,$14
327 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
328 	ld	$12,32($5)
329 #else
330 	ldl	$12,39($5)
331 	ldr	$12,32($5)
332 #endif
333 #if defined(_MIPS_ARCH_MIPS64R2)
334 	dsbh	$11,$11		# byte swap(3)
335 	dshd	$11,$11
336 #else
337 	ori	$16,$0,0xFF
338 	dsll	$18,$16,32
339 	or	$16,$18		# 0x000000FF000000FF
340 	and	$17,$11,$16	# byte swap(3)
341 	dsrl	$18,$11,24
342 	dsll	$17,24
343 	and	$18,$16
344 	dsll	$16,8			# 0x0000FF000000FF00
345 	or	$17,$18
346 	and	$18,$11,$16
347 	dsrl	$11,8
348 	dsll	$18,8
349 	and	$11,$16
350 	or	$17,$18
351 	or	$11,$17
352 	dsrl	$17,$11,32
353 	dsll	$11,32
354 	or	$11,$17
355 #endif
356 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
357 	xor	$18,$3,$7			# 3
358 	drotr	$16,$2,14
359 	daddu	$15,$11,$24
360 	drotr	$17,$2,18
361 	and	$18,$2
362 	drotr	$24,$2,41
363 	xor	$16,$17
364 	drotr	$17,$25,28
365 	xor	$18,$7			# Ch(e,f,g)
366 	xor	$16,$24			# Sigma1(e)
367 
368 	drotr	$24,$25,34
369 	daddu	$15,$18
370 	ld	$18,24($6)		# K[3]
371 	xor	$24,$17
372 	drotr	$17,$25,39
373 	daddu	$15,$16
374 	and	$16,$30,$31
375 	xor	$24,$17			# Sigma0(a)
376 	xor	$17,$30,$31
377 #else
378 	daddu	$15,$11,$24			# 3
379 	dsrl	$24,$2,14
380 	xor	$18,$3,$7
381 	dsll	$17,$2,23
382 	and	$18,$2
383 	dsrl	$16,$2,18
384 	xor	$24,$17
385 	dsll	$17,$2,46
386 	xor	$24,$16
387 	dsrl	$16,$2,41
388 	xor	$24,$17
389 	dsll	$17,$2,50
390 	xor	$24,$16
391 	xor	$18,$7			# Ch(e,f,g)
392 	xor	$16,$17,$24			# Sigma1(e)
393 
394 	dsrl	$24,$25,28
395 	daddu	$15,$18
396 	ld	$18,24($6)		# K[3]
397 	dsll	$17,$25,25
398 	daddu	$15,$16
399 	dsrl	$16,$25,34
400 	xor	$24,$17
401 	dsll	$17,$25,30
402 	xor	$24,$16
403 	dsrl	$16,$25,39
404 	xor	$24,$17
405 	dsll	$17,$25,36
406 	xor	$24,$16
407 	and	$16,$30,$31
408 	xor	$24,$17			# Sigma0(a)
409 	xor	$17,$30,$31
410 #endif
411 	sd	$11,24($29)	# offload to ring buffer
412 	daddu	$24,$16
413 	and	$17,$25
414 	daddu	$15,$18			# +=K[3]
415 	daddu	$24,$17			# +=Maj(a,b,c)
416 	daddu	$1,$15
417 	daddu	$24,$15
418 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
419 	ld	$13,40($5)
420 #else
421 	ldl	$13,47($5)
422 	ldr	$13,40($5)
423 #endif
424 #if defined(_MIPS_ARCH_MIPS64R2)
425 	dsbh	$12,$12		# byte swap(4)
426 	dshd	$12,$12
427 #else
428 	ori	$17,$0,0xFF
429 	dsll	$19,$17,32
430 	or	$17,$19		# 0x000000FF000000FF
431 	and	$18,$12,$17	# byte swap(4)
432 	dsrl	$19,$12,24
433 	dsll	$18,24
434 	and	$19,$17
435 	dsll	$17,8			# 0x0000FF000000FF00
436 	or	$18,$19
437 	and	$19,$12,$17
438 	dsrl	$12,8
439 	dsll	$19,8
440 	and	$12,$17
441 	or	$18,$19
442 	or	$12,$18
443 	dsrl	$18,$12,32
444 	dsll	$12,32
445 	or	$12,$18
446 #endif
447 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
448 	xor	$19,$2,$3			# 4
449 	drotr	$17,$1,14
450 	daddu	$16,$12,$7
451 	drotr	$18,$1,18
452 	and	$19,$1
453 	drotr	$7,$1,41
454 	xor	$17,$18
455 	drotr	$18,$24,28
456 	xor	$19,$3			# Ch(e,f,g)
457 	xor	$17,$7			# Sigma1(e)
458 
459 	drotr	$7,$24,34
460 	daddu	$16,$19
461 	ld	$19,32($6)		# K[4]
462 	xor	$7,$18
463 	drotr	$18,$24,39
464 	daddu	$16,$17
465 	and	$17,$25,$30
466 	xor	$7,$18			# Sigma0(a)
467 	xor	$18,$25,$30
468 #else
469 	daddu	$16,$12,$7			# 4
470 	dsrl	$7,$1,14
471 	xor	$19,$2,$3
472 	dsll	$18,$1,23
473 	and	$19,$1
474 	dsrl	$17,$1,18
475 	xor	$7,$18
476 	dsll	$18,$1,46
477 	xor	$7,$17
478 	dsrl	$17,$1,41
479 	xor	$7,$18
480 	dsll	$18,$1,50
481 	xor	$7,$17
482 	xor	$19,$3			# Ch(e,f,g)
483 	xor	$17,$18,$7			# Sigma1(e)
484 
485 	dsrl	$7,$24,28
486 	daddu	$16,$19
487 	ld	$19,32($6)		# K[4]
488 	dsll	$18,$24,25
489 	daddu	$16,$17
490 	dsrl	$17,$24,34
491 	xor	$7,$18
492 	dsll	$18,$24,30
493 	xor	$7,$17
494 	dsrl	$17,$24,39
495 	xor	$7,$18
496 	dsll	$18,$24,36
497 	xor	$7,$17
498 	and	$17,$25,$30
499 	xor	$7,$18			# Sigma0(a)
500 	xor	$18,$25,$30
501 #endif
502 	sd	$12,32($29)	# offload to ring buffer
503 	daddu	$7,$17
504 	and	$18,$24
505 	daddu	$16,$19			# +=K[4]
506 	daddu	$7,$18			# +=Maj(a,b,c)
507 	daddu	$31,$16
508 	daddu	$7,$16
509 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
510 	ld	$14,48($5)
511 #else
512 	ldl	$14,55($5)
513 	ldr	$14,48($5)
514 #endif
515 #if defined(_MIPS_ARCH_MIPS64R2)
516 	dsbh	$13,$13		# byte swap(5)
517 	dshd	$13,$13
518 #else
519 	ori	$18,$0,0xFF
520 	dsll	$20,$18,32
521 	or	$18,$20		# 0x000000FF000000FF
522 	and	$19,$13,$18	# byte swap(5)
523 	dsrl	$20,$13,24
524 	dsll	$19,24
525 	and	$20,$18
526 	dsll	$18,8			# 0x0000FF000000FF00
527 	or	$19,$20
528 	and	$20,$13,$18
529 	dsrl	$13,8
530 	dsll	$20,8
531 	and	$13,$18
532 	or	$19,$20
533 	or	$13,$19
534 	dsrl	$19,$13,32
535 	dsll	$13,32
536 	or	$13,$19
537 #endif
538 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
539 	xor	$20,$1,$2			# 5
540 	drotr	$18,$31,14
541 	daddu	$17,$13,$3
542 	drotr	$19,$31,18
543 	and	$20,$31
544 	drotr	$3,$31,41
545 	xor	$18,$19
546 	drotr	$19,$7,28
547 	xor	$20,$2			# Ch(e,f,g)
548 	xor	$18,$3			# Sigma1(e)
549 
550 	drotr	$3,$7,34
551 	daddu	$17,$20
552 	ld	$20,40($6)		# K[5]
553 	xor	$3,$19
554 	drotr	$19,$7,39
555 	daddu	$17,$18
556 	and	$18,$24,$25
557 	xor	$3,$19			# Sigma0(a)
558 	xor	$19,$24,$25
559 #else
560 	daddu	$17,$13,$3			# 5
561 	dsrl	$3,$31,14
562 	xor	$20,$1,$2
563 	dsll	$19,$31,23
564 	and	$20,$31
565 	dsrl	$18,$31,18
566 	xor	$3,$19
567 	dsll	$19,$31,46
568 	xor	$3,$18
569 	dsrl	$18,$31,41
570 	xor	$3,$19
571 	dsll	$19,$31,50
572 	xor	$3,$18
573 	xor	$20,$2			# Ch(e,f,g)
574 	xor	$18,$19,$3			# Sigma1(e)
575 
576 	dsrl	$3,$7,28
577 	daddu	$17,$20
578 	ld	$20,40($6)		# K[5]
579 	dsll	$19,$7,25
580 	daddu	$17,$18
581 	dsrl	$18,$7,34
582 	xor	$3,$19
583 	dsll	$19,$7,30
584 	xor	$3,$18
585 	dsrl	$18,$7,39
586 	xor	$3,$19
587 	dsll	$19,$7,36
588 	xor	$3,$18
589 	and	$18,$24,$25
590 	xor	$3,$19			# Sigma0(a)
591 	xor	$19,$24,$25
592 #endif
593 	sd	$13,40($29)	# offload to ring buffer
594 	daddu	$3,$18
595 	and	$19,$7
596 	daddu	$17,$20			# +=K[5]
597 	daddu	$3,$19			# +=Maj(a,b,c)
598 	daddu	$30,$17
599 	daddu	$3,$17
600 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
601 	ld	$15,56($5)
602 #else
603 	ldl	$15,63($5)
604 	ldr	$15,56($5)
605 #endif
606 #if defined(_MIPS_ARCH_MIPS64R2)
607 	dsbh	$14,$14		# byte swap(6)
608 	dshd	$14,$14
609 #else
610 	ori	$19,$0,0xFF
611 	dsll	$21,$19,32
612 	or	$19,$21		# 0x000000FF000000FF
613 	and	$20,$14,$19	# byte swap(6)
614 	dsrl	$21,$14,24
615 	dsll	$20,24
616 	and	$21,$19
617 	dsll	$19,8			# 0x0000FF000000FF00
618 	or	$20,$21
619 	and	$21,$14,$19
620 	dsrl	$14,8
621 	dsll	$21,8
622 	and	$14,$19
623 	or	$20,$21
624 	or	$14,$20
625 	dsrl	$20,$14,32
626 	dsll	$14,32
627 	or	$14,$20
628 #endif
629 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
630 	xor	$21,$31,$1			# 6
631 	drotr	$19,$30,14
632 	daddu	$18,$14,$2
633 	drotr	$20,$30,18
634 	and	$21,$30
635 	drotr	$2,$30,41
636 	xor	$19,$20
637 	drotr	$20,$3,28
638 	xor	$21,$1			# Ch(e,f,g)
639 	xor	$19,$2			# Sigma1(e)
640 
641 	drotr	$2,$3,34
642 	daddu	$18,$21
643 	ld	$21,48($6)		# K[6]
644 	xor	$2,$20
645 	drotr	$20,$3,39
646 	daddu	$18,$19
647 	and	$19,$7,$24
648 	xor	$2,$20			# Sigma0(a)
649 	xor	$20,$7,$24
650 #else
651 	daddu	$18,$14,$2			# 6
652 	dsrl	$2,$30,14
653 	xor	$21,$31,$1
654 	dsll	$20,$30,23
655 	and	$21,$30
656 	dsrl	$19,$30,18
657 	xor	$2,$20
658 	dsll	$20,$30,46
659 	xor	$2,$19
660 	dsrl	$19,$30,41
661 	xor	$2,$20
662 	dsll	$20,$30,50
663 	xor	$2,$19
664 	xor	$21,$1			# Ch(e,f,g)
665 	xor	$19,$20,$2			# Sigma1(e)
666 
667 	dsrl	$2,$3,28
668 	daddu	$18,$21
669 	ld	$21,48($6)		# K[6]
670 	dsll	$20,$3,25
671 	daddu	$18,$19
672 	dsrl	$19,$3,34
673 	xor	$2,$20
674 	dsll	$20,$3,30
675 	xor	$2,$19
676 	dsrl	$19,$3,39
677 	xor	$2,$20
678 	dsll	$20,$3,36
679 	xor	$2,$19
680 	and	$19,$7,$24
681 	xor	$2,$20			# Sigma0(a)
682 	xor	$20,$7,$24
683 #endif
684 	sd	$14,48($29)	# offload to ring buffer
685 	daddu	$2,$19
686 	and	$20,$3
687 	daddu	$18,$21			# +=K[6]
688 	daddu	$2,$20			# +=Maj(a,b,c)
689 	daddu	$25,$18
690 	daddu	$2,$18
691 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
692 	ld	$16,64($5)
693 #else
694 	ldl	$16,71($5)
695 	ldr	$16,64($5)
696 #endif
697 #if defined(_MIPS_ARCH_MIPS64R2)
698 	dsbh	$15,$15		# byte swap(7)
699 	dshd	$15,$15
700 #else
701 	ori	$20,$0,0xFF
702 	dsll	$22,$20,32
703 	or	$20,$22		# 0x000000FF000000FF
704 	and	$21,$15,$20	# byte swap(7)
705 	dsrl	$22,$15,24
706 	dsll	$21,24
707 	and	$22,$20
708 	dsll	$20,8			# 0x0000FF000000FF00
709 	or	$21,$22
710 	and	$22,$15,$20
711 	dsrl	$15,8
712 	dsll	$22,8
713 	and	$15,$20
714 	or	$21,$22
715 	or	$15,$21
716 	dsrl	$21,$15,32
717 	dsll	$15,32
718 	or	$15,$21
719 #endif
720 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
721 	xor	$22,$30,$31			# 7
722 	drotr	$20,$25,14
723 	daddu	$19,$15,$1
724 	drotr	$21,$25,18
725 	and	$22,$25
726 	drotr	$1,$25,41
727 	xor	$20,$21
728 	drotr	$21,$2,28
729 	xor	$22,$31			# Ch(e,f,g)
730 	xor	$20,$1			# Sigma1(e)
731 
732 	drotr	$1,$2,34
733 	daddu	$19,$22
734 	ld	$22,56($6)		# K[7]
735 	xor	$1,$21
736 	drotr	$21,$2,39
737 	daddu	$19,$20
738 	and	$20,$3,$7
739 	xor	$1,$21			# Sigma0(a)
740 	xor	$21,$3,$7
741 #else
742 	daddu	$19,$15,$1			# 7
743 	dsrl	$1,$25,14
744 	xor	$22,$30,$31
745 	dsll	$21,$25,23
746 	and	$22,$25
747 	dsrl	$20,$25,18
748 	xor	$1,$21
749 	dsll	$21,$25,46
750 	xor	$1,$20
751 	dsrl	$20,$25,41
752 	xor	$1,$21
753 	dsll	$21,$25,50
754 	xor	$1,$20
755 	xor	$22,$31			# Ch(e,f,g)
756 	xor	$20,$21,$1			# Sigma1(e)
757 
758 	dsrl	$1,$2,28
759 	daddu	$19,$22
760 	ld	$22,56($6)		# K[7]
761 	dsll	$21,$2,25
762 	daddu	$19,$20
763 	dsrl	$20,$2,34
764 	xor	$1,$21
765 	dsll	$21,$2,30
766 	xor	$1,$20
767 	dsrl	$20,$2,39
768 	xor	$1,$21
769 	dsll	$21,$2,36
770 	xor	$1,$20
771 	and	$20,$3,$7
772 	xor	$1,$21			# Sigma0(a)
773 	xor	$21,$3,$7
774 #endif
775 	sd	$15,56($29)	# offload to ring buffer
776 	daddu	$1,$20
777 	and	$21,$2
778 	daddu	$19,$22			# +=K[7]
779 	daddu	$1,$21			# +=Maj(a,b,c)
780 	daddu	$24,$19
781 	daddu	$1,$19
782 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
783 	ld	$17,72($5)
784 #else
785 	ldl	$17,79($5)
786 	ldr	$17,72($5)
787 #endif
788 #if defined(_MIPS_ARCH_MIPS64R2)
789 	dsbh	$16,$16		# byte swap(8)
790 	dshd	$16,$16
791 #else
792 	ori	$21,$0,0xFF
793 	dsll	$23,$21,32
794 	or	$21,$23		# 0x000000FF000000FF
795 	and	$22,$16,$21	# byte swap(8)
796 	dsrl	$23,$16,24
797 	dsll	$22,24
798 	and	$23,$21
799 	dsll	$21,8			# 0x0000FF000000FF00
800 	or	$22,$23
801 	and	$23,$16,$21
802 	dsrl	$16,8
803 	dsll	$23,8
804 	and	$16,$21
805 	or	$22,$23
806 	or	$16,$22
807 	dsrl	$22,$16,32
808 	dsll	$16,32
809 	or	$16,$22
810 #endif
811 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
812 	xor	$23,$25,$30			# 8
813 	drotr	$21,$24,14
814 	daddu	$20,$16,$31
815 	drotr	$22,$24,18
816 	and	$23,$24
817 	drotr	$31,$24,41
818 	xor	$21,$22
819 	drotr	$22,$1,28
820 	xor	$23,$30			# Ch(e,f,g)
821 	xor	$21,$31			# Sigma1(e)
822 
823 	drotr	$31,$1,34
824 	daddu	$20,$23
825 	ld	$23,64($6)		# K[8]
826 	xor	$31,$22
827 	drotr	$22,$1,39
828 	daddu	$20,$21
829 	and	$21,$2,$3
830 	xor	$31,$22			# Sigma0(a)
831 	xor	$22,$2,$3
832 #else
833 	daddu	$20,$16,$31			# 8
834 	dsrl	$31,$24,14
835 	xor	$23,$25,$30
836 	dsll	$22,$24,23
837 	and	$23,$24
838 	dsrl	$21,$24,18
839 	xor	$31,$22
840 	dsll	$22,$24,46
841 	xor	$31,$21
842 	dsrl	$21,$24,41
843 	xor	$31,$22
844 	dsll	$22,$24,50
845 	xor	$31,$21
846 	xor	$23,$30			# Ch(e,f,g)
847 	xor	$21,$22,$31			# Sigma1(e)
848 
849 	dsrl	$31,$1,28
850 	daddu	$20,$23
851 	ld	$23,64($6)		# K[8]
852 	dsll	$22,$1,25
853 	daddu	$20,$21
854 	dsrl	$21,$1,34
855 	xor	$31,$22
856 	dsll	$22,$1,30
857 	xor	$31,$21
858 	dsrl	$21,$1,39
859 	xor	$31,$22
860 	dsll	$22,$1,36
861 	xor	$31,$21
862 	and	$21,$2,$3
863 	xor	$31,$22			# Sigma0(a)
864 	xor	$22,$2,$3
865 #endif
866 	sd	$16,64($29)	# offload to ring buffer
867 	daddu	$31,$21
868 	and	$22,$1
869 	daddu	$20,$23			# +=K[8]
870 	daddu	$31,$22			# +=Maj(a,b,c)
871 	daddu	$7,$20
872 	daddu	$31,$20
873 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
874 	ld	$18,80($5)
875 #else
876 	ldl	$18,87($5)
877 	ldr	$18,80($5)
878 #endif
879 #if defined(_MIPS_ARCH_MIPS64R2)
880 	dsbh	$17,$17		# byte swap(9)
881 	dshd	$17,$17
882 #else
883 	ori	$22,$0,0xFF
884 	dsll	$8,$22,32
885 	or	$22,$8		# 0x000000FF000000FF
886 	and	$23,$17,$22	# byte swap(9)
887 	dsrl	$8,$17,24
888 	dsll	$23,24
889 	and	$8,$22
890 	dsll	$22,8			# 0x0000FF000000FF00
891 	or	$23,$8
892 	and	$8,$17,$22
893 	dsrl	$17,8
894 	dsll	$8,8
895 	and	$17,$22
896 	or	$23,$8
897 	or	$17,$23
898 	dsrl	$23,$17,32
899 	dsll	$17,32
900 	or	$17,$23
901 #endif
902 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
903 	xor	$8,$24,$25			# 9
904 	drotr	$22,$7,14
905 	daddu	$21,$17,$30
906 	drotr	$23,$7,18
907 	and	$8,$7
908 	drotr	$30,$7,41
909 	xor	$22,$23
910 	drotr	$23,$31,28
911 	xor	$8,$25			# Ch(e,f,g)
912 	xor	$22,$30			# Sigma1(e)
913 
914 	drotr	$30,$31,34
915 	daddu	$21,$8
916 	ld	$8,72($6)		# K[9]
917 	xor	$30,$23
918 	drotr	$23,$31,39
919 	daddu	$21,$22
920 	and	$22,$1,$2
921 	xor	$30,$23			# Sigma0(a)
922 	xor	$23,$1,$2
923 #else
924 	daddu	$21,$17,$30			# 9
925 	dsrl	$30,$7,14
926 	xor	$8,$24,$25
927 	dsll	$23,$7,23
928 	and	$8,$7
929 	dsrl	$22,$7,18
930 	xor	$30,$23
931 	dsll	$23,$7,46
932 	xor	$30,$22
933 	dsrl	$22,$7,41
934 	xor	$30,$23
935 	dsll	$23,$7,50
936 	xor	$30,$22
937 	xor	$8,$25			# Ch(e,f,g)
938 	xor	$22,$23,$30			# Sigma1(e)
939 
940 	dsrl	$30,$31,28
941 	daddu	$21,$8
942 	ld	$8,72($6)		# K[9]
943 	dsll	$23,$31,25
944 	daddu	$21,$22
945 	dsrl	$22,$31,34
946 	xor	$30,$23
947 	dsll	$23,$31,30
948 	xor	$30,$22
949 	dsrl	$22,$31,39
950 	xor	$30,$23
951 	dsll	$23,$31,36
952 	xor	$30,$22
953 	and	$22,$1,$2
954 	xor	$30,$23			# Sigma0(a)
955 	xor	$23,$1,$2
956 #endif
957 	sd	$17,72($29)	# offload to ring buffer
958 	daddu	$30,$22
959 	and	$23,$31
960 	daddu	$21,$8			# +=K[9]
961 	daddu	$30,$23			# +=Maj(a,b,c)
962 	daddu	$3,$21
963 	daddu	$30,$21
964 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
965 	ld	$19,88($5)
966 #else
967 	ldl	$19,95($5)
968 	ldr	$19,88($5)
969 #endif
970 #if defined(_MIPS_ARCH_MIPS64R2)
971 	dsbh	$18,$18		# byte swap(10)
972 	dshd	$18,$18
973 #else
974 	ori	$23,$0,0xFF
975 	dsll	$9,$23,32
976 	or	$23,$9		# 0x000000FF000000FF
977 	and	$8,$18,$23	# byte swap(10)
978 	dsrl	$9,$18,24
979 	dsll	$8,24
980 	and	$9,$23
981 	dsll	$23,8			# 0x0000FF000000FF00
982 	or	$8,$9
983 	and	$9,$18,$23
984 	dsrl	$18,8
985 	dsll	$9,8
986 	and	$18,$23
987 	or	$8,$9
988 	or	$18,$8
989 	dsrl	$8,$18,32
990 	dsll	$18,32
991 	or	$18,$8
992 #endif
993 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
994 	xor	$9,$7,$24			# 10
995 	drotr	$23,$3,14
996 	daddu	$22,$18,$25
997 	drotr	$8,$3,18
998 	and	$9,$3
999 	drotr	$25,$3,41
1000 	xor	$23,$8
1001 	drotr	$8,$30,28
1002 	xor	$9,$24			# Ch(e,f,g)
1003 	xor	$23,$25			# Sigma1(e)
1004 
1005 	drotr	$25,$30,34
1006 	daddu	$22,$9
1007 	ld	$9,80($6)		# K[10]
1008 	xor	$25,$8
1009 	drotr	$8,$30,39
1010 	daddu	$22,$23
1011 	and	$23,$31,$1
1012 	xor	$25,$8			# Sigma0(a)
1013 	xor	$8,$31,$1
1014 #else
1015 	daddu	$22,$18,$25			# 10
1016 	dsrl	$25,$3,14
1017 	xor	$9,$7,$24
1018 	dsll	$8,$3,23
1019 	and	$9,$3
1020 	dsrl	$23,$3,18
1021 	xor	$25,$8
1022 	dsll	$8,$3,46
1023 	xor	$25,$23
1024 	dsrl	$23,$3,41
1025 	xor	$25,$8
1026 	dsll	$8,$3,50
1027 	xor	$25,$23
1028 	xor	$9,$24			# Ch(e,f,g)
1029 	xor	$23,$8,$25			# Sigma1(e)
1030 
1031 	dsrl	$25,$30,28
1032 	daddu	$22,$9
1033 	ld	$9,80($6)		# K[10]
1034 	dsll	$8,$30,25
1035 	daddu	$22,$23
1036 	dsrl	$23,$30,34
1037 	xor	$25,$8
1038 	dsll	$8,$30,30
1039 	xor	$25,$23
1040 	dsrl	$23,$30,39
1041 	xor	$25,$8
1042 	dsll	$8,$30,36
1043 	xor	$25,$23
1044 	and	$23,$31,$1
1045 	xor	$25,$8			# Sigma0(a)
1046 	xor	$8,$31,$1
1047 #endif
1048 	sd	$18,80($29)	# offload to ring buffer
1049 	daddu	$25,$23
1050 	and	$8,$30
1051 	daddu	$22,$9			# +=K[10]
1052 	daddu	$25,$8			# +=Maj(a,b,c)
1053 	daddu	$2,$22
1054 	daddu	$25,$22
1055 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1056 	ld	$20,96($5)
1057 #else
1058 	ldl	$20,103($5)
1059 	ldr	$20,96($5)
1060 #endif
1061 #if defined(_MIPS_ARCH_MIPS64R2)
1062 	dsbh	$19,$19		# byte swap(11)
1063 	dshd	$19,$19
1064 #else
1065 	ori	$8,$0,0xFF
1066 	dsll	$10,$8,32
1067 	or	$8,$10		# 0x000000FF000000FF
1068 	and	$9,$19,$8	# byte swap(11)
1069 	dsrl	$10,$19,24
1070 	dsll	$9,24
1071 	and	$10,$8
1072 	dsll	$8,8			# 0x0000FF000000FF00
1073 	or	$9,$10
1074 	and	$10,$19,$8
1075 	dsrl	$19,8
1076 	dsll	$10,8
1077 	and	$19,$8
1078 	or	$9,$10
1079 	or	$19,$9
1080 	dsrl	$9,$19,32
1081 	dsll	$19,32
1082 	or	$19,$9
1083 #endif
1084 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1085 	xor	$10,$3,$7			# 11
1086 	drotr	$8,$2,14
1087 	daddu	$23,$19,$24
1088 	drotr	$9,$2,18
1089 	and	$10,$2
1090 	drotr	$24,$2,41
1091 	xor	$8,$9
1092 	drotr	$9,$25,28
1093 	xor	$10,$7			# Ch(e,f,g)
1094 	xor	$8,$24			# Sigma1(e)
1095 
1096 	drotr	$24,$25,34
1097 	daddu	$23,$10
1098 	ld	$10,88($6)		# K[11]
1099 	xor	$24,$9
1100 	drotr	$9,$25,39
1101 	daddu	$23,$8
1102 	and	$8,$30,$31
1103 	xor	$24,$9			# Sigma0(a)
1104 	xor	$9,$30,$31
1105 #else
1106 	daddu	$23,$19,$24			# 11
1107 	dsrl	$24,$2,14
1108 	xor	$10,$3,$7
1109 	dsll	$9,$2,23
1110 	and	$10,$2
1111 	dsrl	$8,$2,18
1112 	xor	$24,$9
1113 	dsll	$9,$2,46
1114 	xor	$24,$8
1115 	dsrl	$8,$2,41
1116 	xor	$24,$9
1117 	dsll	$9,$2,50
1118 	xor	$24,$8
1119 	xor	$10,$7			# Ch(e,f,g)
1120 	xor	$8,$9,$24			# Sigma1(e)
1121 
1122 	dsrl	$24,$25,28
1123 	daddu	$23,$10
1124 	ld	$10,88($6)		# K[11]
1125 	dsll	$9,$25,25
1126 	daddu	$23,$8
1127 	dsrl	$8,$25,34
1128 	xor	$24,$9
1129 	dsll	$9,$25,30
1130 	xor	$24,$8
1131 	dsrl	$8,$25,39
1132 	xor	$24,$9
1133 	dsll	$9,$25,36
1134 	xor	$24,$8
1135 	and	$8,$30,$31
1136 	xor	$24,$9			# Sigma0(a)
1137 	xor	$9,$30,$31
1138 #endif
1139 	sd	$19,88($29)	# offload to ring buffer
1140 	daddu	$24,$8
1141 	and	$9,$25
1142 	daddu	$23,$10			# +=K[11]
1143 	daddu	$24,$9			# +=Maj(a,b,c)
1144 	daddu	$1,$23
1145 	daddu	$24,$23
1146 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1147 	ld	$21,104($5)
1148 #else
1149 	ldl	$21,111($5)
1150 	ldr	$21,104($5)
1151 #endif
1152 #if defined(_MIPS_ARCH_MIPS64R2)
1153 	dsbh	$20,$20		# byte swap(12)
1154 	dshd	$20,$20
1155 #else
1156 	ori	$9,$0,0xFF
1157 	dsll	$11,$9,32
1158 	or	$9,$11		# 0x000000FF000000FF
1159 	and	$10,$20,$9	# byte swap(12)
1160 	dsrl	$11,$20,24
1161 	dsll	$10,24
1162 	and	$11,$9
1163 	dsll	$9,8			# 0x0000FF000000FF00
1164 	or	$10,$11
1165 	and	$11,$20,$9
1166 	dsrl	$20,8
1167 	dsll	$11,8
1168 	and	$20,$9
1169 	or	$10,$11
1170 	or	$20,$10
1171 	dsrl	$10,$20,32
1172 	dsll	$20,32
1173 	or	$20,$10
1174 #endif
1175 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1176 	xor	$11,$2,$3			# 12
1177 	drotr	$9,$1,14
1178 	daddu	$8,$20,$7
1179 	drotr	$10,$1,18
1180 	and	$11,$1
1181 	drotr	$7,$1,41
1182 	xor	$9,$10
1183 	drotr	$10,$24,28
1184 	xor	$11,$3			# Ch(e,f,g)
1185 	xor	$9,$7			# Sigma1(e)
1186 
1187 	drotr	$7,$24,34
1188 	daddu	$8,$11
1189 	ld	$11,96($6)		# K[12]
1190 	xor	$7,$10
1191 	drotr	$10,$24,39
1192 	daddu	$8,$9
1193 	and	$9,$25,$30
1194 	xor	$7,$10			# Sigma0(a)
1195 	xor	$10,$25,$30
1196 #else
1197 	daddu	$8,$20,$7			# 12
1198 	dsrl	$7,$1,14
1199 	xor	$11,$2,$3
1200 	dsll	$10,$1,23
1201 	and	$11,$1
1202 	dsrl	$9,$1,18
1203 	xor	$7,$10
1204 	dsll	$10,$1,46
1205 	xor	$7,$9
1206 	dsrl	$9,$1,41
1207 	xor	$7,$10
1208 	dsll	$10,$1,50
1209 	xor	$7,$9
1210 	xor	$11,$3			# Ch(e,f,g)
1211 	xor	$9,$10,$7			# Sigma1(e)
1212 
1213 	dsrl	$7,$24,28
1214 	daddu	$8,$11
1215 	ld	$11,96($6)		# K[12]
1216 	dsll	$10,$24,25
1217 	daddu	$8,$9
1218 	dsrl	$9,$24,34
1219 	xor	$7,$10
1220 	dsll	$10,$24,30
1221 	xor	$7,$9
1222 	dsrl	$9,$24,39
1223 	xor	$7,$10
1224 	dsll	$10,$24,36
1225 	xor	$7,$9
1226 	and	$9,$25,$30
1227 	xor	$7,$10			# Sigma0(a)
1228 	xor	$10,$25,$30
1229 #endif
1230 	sd	$20,96($29)	# offload to ring buffer
1231 	daddu	$7,$9
1232 	and	$10,$24
1233 	daddu	$8,$11			# +=K[12]
1234 	daddu	$7,$10			# +=Maj(a,b,c)
1235 	daddu	$31,$8
1236 	daddu	$7,$8
1237 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1238 	ld	$22,112($5)
1239 #else
1240 	ldl	$22,119($5)
1241 	ldr	$22,112($5)
1242 #endif
1243 #if defined(_MIPS_ARCH_MIPS64R2)
1244 	dsbh	$21,$21		# byte swap(13)
1245 	dshd	$21,$21
1246 #else
1247 	ori	$10,$0,0xFF
1248 	dsll	$12,$10,32
1249 	or	$10,$12		# 0x000000FF000000FF
1250 	and	$11,$21,$10	# byte swap(13)
1251 	dsrl	$12,$21,24
1252 	dsll	$11,24
1253 	and	$12,$10
1254 	dsll	$10,8			# 0x0000FF000000FF00
1255 	or	$11,$12
1256 	and	$12,$21,$10
1257 	dsrl	$21,8
1258 	dsll	$12,8
1259 	and	$21,$10
1260 	or	$11,$12
1261 	or	$21,$11
1262 	dsrl	$11,$21,32
1263 	dsll	$21,32
1264 	or	$21,$11
1265 #endif
1266 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1267 	xor	$12,$1,$2			# 13
1268 	drotr	$10,$31,14
1269 	daddu	$9,$21,$3
1270 	drotr	$11,$31,18
1271 	and	$12,$31
1272 	drotr	$3,$31,41
1273 	xor	$10,$11
1274 	drotr	$11,$7,28
1275 	xor	$12,$2			# Ch(e,f,g)
1276 	xor	$10,$3			# Sigma1(e)
1277 
1278 	drotr	$3,$7,34
1279 	daddu	$9,$12
1280 	ld	$12,104($6)		# K[13]
1281 	xor	$3,$11
1282 	drotr	$11,$7,39
1283 	daddu	$9,$10
1284 	and	$10,$24,$25
1285 	xor	$3,$11			# Sigma0(a)
1286 	xor	$11,$24,$25
1287 #else
1288 	daddu	$9,$21,$3			# 13
1289 	dsrl	$3,$31,14
1290 	xor	$12,$1,$2
1291 	dsll	$11,$31,23
1292 	and	$12,$31
1293 	dsrl	$10,$31,18
1294 	xor	$3,$11
1295 	dsll	$11,$31,46
1296 	xor	$3,$10
1297 	dsrl	$10,$31,41
1298 	xor	$3,$11
1299 	dsll	$11,$31,50
1300 	xor	$3,$10
1301 	xor	$12,$2			# Ch(e,f,g)
1302 	xor	$10,$11,$3			# Sigma1(e)
1303 
1304 	dsrl	$3,$7,28
1305 	daddu	$9,$12
1306 	ld	$12,104($6)		# K[13]
1307 	dsll	$11,$7,25
1308 	daddu	$9,$10
1309 	dsrl	$10,$7,34
1310 	xor	$3,$11
1311 	dsll	$11,$7,30
1312 	xor	$3,$10
1313 	dsrl	$10,$7,39
1314 	xor	$3,$11
1315 	dsll	$11,$7,36
1316 	xor	$3,$10
1317 	and	$10,$24,$25
1318 	xor	$3,$11			# Sigma0(a)
1319 	xor	$11,$24,$25
1320 #endif
1321 	sd	$21,104($29)	# offload to ring buffer
1322 	daddu	$3,$10
1323 	and	$11,$7
1324 	daddu	$9,$12			# +=K[13]
1325 	daddu	$3,$11			# +=Maj(a,b,c)
1326 	daddu	$30,$9
1327 	daddu	$3,$9
1328 	ld	$8,0($29)	# prefetch from ring buffer
1329 #if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1330 	ld	$23,120($5)
1331 #else
1332 	ldl	$23,127($5)
1333 	ldr	$23,120($5)
1334 #endif
1335 #if defined(_MIPS_ARCH_MIPS64R2)
1336 	dsbh	$22,$22		# byte swap(14)
1337 	dshd	$22,$22
1338 #else
1339 	ori	$11,$0,0xFF
1340 	dsll	$13,$11,32
1341 	or	$11,$13		# 0x000000FF000000FF
1342 	and	$12,$22,$11	# byte swap(14)
1343 	dsrl	$13,$22,24
1344 	dsll	$12,24
1345 	and	$13,$11
1346 	dsll	$11,8			# 0x0000FF000000FF00
1347 	or	$12,$13
1348 	and	$13,$22,$11
1349 	dsrl	$22,8
1350 	dsll	$13,8
1351 	and	$22,$11
1352 	or	$12,$13
1353 	or	$22,$12
1354 	dsrl	$12,$22,32
1355 	dsll	$22,32
1356 	or	$22,$12
1357 #endif
1358 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1359 	xor	$13,$31,$1			# 14
1360 	drotr	$11,$30,14
1361 	daddu	$10,$22,$2
1362 	drotr	$12,$30,18
1363 	and	$13,$30
1364 	drotr	$2,$30,41
1365 	xor	$11,$12
1366 	drotr	$12,$3,28
1367 	xor	$13,$1			# Ch(e,f,g)
1368 	xor	$11,$2			# Sigma1(e)
1369 
1370 	drotr	$2,$3,34
1371 	daddu	$10,$13
1372 	ld	$13,112($6)		# K[14]
1373 	xor	$2,$12
1374 	drotr	$12,$3,39
1375 	daddu	$10,$11
1376 	and	$11,$7,$24
1377 	xor	$2,$12			# Sigma0(a)
1378 	xor	$12,$7,$24
1379 #else
1380 	daddu	$10,$22,$2			# 14
1381 	dsrl	$2,$30,14
1382 	xor	$13,$31,$1
1383 	dsll	$12,$30,23
1384 	and	$13,$30
1385 	dsrl	$11,$30,18
1386 	xor	$2,$12
1387 	dsll	$12,$30,46
1388 	xor	$2,$11
1389 	dsrl	$11,$30,41
1390 	xor	$2,$12
1391 	dsll	$12,$30,50
1392 	xor	$2,$11
1393 	xor	$13,$1			# Ch(e,f,g)
1394 	xor	$11,$12,$2			# Sigma1(e)
1395 
1396 	dsrl	$2,$3,28
1397 	daddu	$10,$13
1398 	ld	$13,112($6)		# K[14]
1399 	dsll	$12,$3,25
1400 	daddu	$10,$11
1401 	dsrl	$11,$3,34
1402 	xor	$2,$12
1403 	dsll	$12,$3,30
1404 	xor	$2,$11
1405 	dsrl	$11,$3,39
1406 	xor	$2,$12
1407 	dsll	$12,$3,36
1408 	xor	$2,$11
1409 	and	$11,$7,$24
1410 	xor	$2,$12			# Sigma0(a)
1411 	xor	$12,$7,$24
1412 #endif
1413 	sd	$22,112($29)	# offload to ring buffer
1414 	daddu	$2,$11
1415 	and	$12,$3
1416 	daddu	$10,$13			# +=K[14]
1417 	daddu	$2,$12			# +=Maj(a,b,c)
1418 	daddu	$25,$10
1419 	daddu	$2,$10
1420 	ld	$9,8($29)	# prefetch from ring buffer
1421 #if defined(_MIPS_ARCH_MIPS64R2)
1422 	dsbh	$23,$23		# byte swap(15)
1423 	dshd	$23,$23
1424 #else
1425 	ori	$12,$0,0xFF
1426 	dsll	$14,$12,32
1427 	or	$12,$14		# 0x000000FF000000FF
1428 	and	$13,$23,$12	# byte swap(15)
1429 	dsrl	$14,$23,24
1430 	dsll	$13,24
1431 	and	$14,$12
1432 	dsll	$12,8			# 0x0000FF000000FF00
1433 	or	$13,$14
1434 	and	$14,$23,$12
1435 	dsrl	$23,8
1436 	dsll	$14,8
1437 	and	$23,$12
1438 	or	$13,$14
1439 	or	$23,$13
1440 	dsrl	$13,$23,32
1441 	dsll	$23,32
1442 	or	$23,$13
1443 #endif
1444 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1445 	xor	$14,$30,$31			# 15
1446 	drotr	$12,$25,14
1447 	daddu	$11,$23,$1
1448 	drotr	$13,$25,18
1449 	and	$14,$25
1450 	drotr	$1,$25,41
1451 	xor	$12,$13
1452 	drotr	$13,$2,28
1453 	xor	$14,$31			# Ch(e,f,g)
1454 	xor	$12,$1			# Sigma1(e)
1455 
1456 	drotr	$1,$2,34
1457 	daddu	$11,$14
1458 	ld	$14,120($6)		# K[15]
1459 	xor	$1,$13
1460 	drotr	$13,$2,39
1461 	daddu	$11,$12
1462 	and	$12,$3,$7
1463 	xor	$1,$13			# Sigma0(a)
1464 	xor	$13,$3,$7
1465 #else
1466 	daddu	$11,$23,$1			# 15
1467 	dsrl	$1,$25,14
1468 	xor	$14,$30,$31
1469 	dsll	$13,$25,23
1470 	and	$14,$25
1471 	dsrl	$12,$25,18
1472 	xor	$1,$13
1473 	dsll	$13,$25,46
1474 	xor	$1,$12
1475 	dsrl	$12,$25,41
1476 	xor	$1,$13
1477 	dsll	$13,$25,50
1478 	xor	$1,$12
1479 	xor	$14,$31			# Ch(e,f,g)
1480 	xor	$12,$13,$1			# Sigma1(e)
1481 
1482 	dsrl	$1,$2,28
1483 	daddu	$11,$14
1484 	ld	$14,120($6)		# K[15]
1485 	dsll	$13,$2,25
1486 	daddu	$11,$12
1487 	dsrl	$12,$2,34
1488 	xor	$1,$13
1489 	dsll	$13,$2,30
1490 	xor	$1,$12
1491 	dsrl	$12,$2,39
1492 	xor	$1,$13
1493 	dsll	$13,$2,36
1494 	xor	$1,$12
1495 	and	$12,$3,$7
1496 	xor	$1,$13			# Sigma0(a)
1497 	xor	$13,$3,$7
1498 #endif
1499 	sd	$23,120($29)	# offload to ring buffer
1500 	daddu	$1,$12
1501 	and	$13,$2
1502 	daddu	$11,$14			# +=K[15]
1503 	daddu	$1,$13			# +=Maj(a,b,c)
1504 	daddu	$24,$11
1505 	daddu	$1,$11
1506 	ld	$10,16($29)	# prefetch from ring buffer
1507 	b	.L16_xx
1508 .align	4
1509 .L16_xx:
1510 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1511 	dsrl	$14,$9,7		# Xupdate(16)
1512 	drotr	$12,$9,1
1513 	daddu	$8,$17			# +=X[i+9]
1514 	xor	$14,$12
1515 	drotr	$12,$9,8
1516 
1517 	dsrl	$15,$22,6
1518 	drotr	$13,$22,19
1519 	xor	$14,$12			# sigma0(X[i+1])
1520 	drotr	$12,$22,61
1521 	xor	$15,$13
1522 	daddu	$8,$14
1523 #else
1524 	dsrl	$14,$9,7		# Xupdate(16)
1525 	daddu	$8,$17			# +=X[i+9]
1526 	dsll	$13,$9,56
1527 	dsrl	$12,$9,1
1528 	xor	$14,$13
1529 	dsll	$13,7
1530 	xor	$14,$12
1531 	dsrl	$12,$9,8
1532 	xor	$14,$13
1533 
1534 	dsrl	$15,$22,6
1535 	xor	$14,$12			# sigma0(X[i+1])
1536 	dsll	$13,$22,3
1537 	daddu	$8,$14
1538 	dsrl	$12,$22,19
1539 	xor	$15,$13
1540 	dsll	$13,42
1541 	xor	$15,$12
1542 	dsrl	$12,$22,61
1543 	xor	$15,$13
1544 #endif
1545 	xor	$15,$12			# sigma1(X[i+14])
1546 	daddu	$8,$15
1547 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1548 	xor	$15,$25,$30			# 16
1549 	drotr	$13,$24,14
1550 	daddu	$12,$8,$31
1551 	drotr	$14,$24,18
1552 	and	$15,$24
1553 	drotr	$31,$24,41
1554 	xor	$13,$14
1555 	drotr	$14,$1,28
1556 	xor	$15,$30			# Ch(e,f,g)
1557 	xor	$13,$31			# Sigma1(e)
1558 
1559 	drotr	$31,$1,34
1560 	daddu	$12,$15
1561 	ld	$15,128($6)		# K[16]
1562 	xor	$31,$14
1563 	drotr	$14,$1,39
1564 	daddu	$12,$13
1565 	and	$13,$2,$3
1566 	xor	$31,$14			# Sigma0(a)
1567 	xor	$14,$2,$3
1568 #else
1569 	daddu	$12,$8,$31			# 16
1570 	dsrl	$31,$24,14
1571 	xor	$15,$25,$30
1572 	dsll	$14,$24,23
1573 	and	$15,$24
1574 	dsrl	$13,$24,18
1575 	xor	$31,$14
1576 	dsll	$14,$24,46
1577 	xor	$31,$13
1578 	dsrl	$13,$24,41
1579 	xor	$31,$14
1580 	dsll	$14,$24,50
1581 	xor	$31,$13
1582 	xor	$15,$30			# Ch(e,f,g)
1583 	xor	$13,$14,$31			# Sigma1(e)
1584 
1585 	dsrl	$31,$1,28
1586 	daddu	$12,$15
1587 	ld	$15,128($6)		# K[16]
1588 	dsll	$14,$1,25
1589 	daddu	$12,$13
1590 	dsrl	$13,$1,34
1591 	xor	$31,$14
1592 	dsll	$14,$1,30
1593 	xor	$31,$13
1594 	dsrl	$13,$1,39
1595 	xor	$31,$14
1596 	dsll	$14,$1,36
1597 	xor	$31,$13
1598 	and	$13,$2,$3
1599 	xor	$31,$14			# Sigma0(a)
1600 	xor	$14,$2,$3
1601 #endif
1602 	sd	$8,0($29)	# offload to ring buffer
1603 	daddu	$31,$13
1604 	and	$14,$1
1605 	daddu	$12,$15			# +=K[16]
1606 	daddu	$31,$14			# +=Maj(a,b,c)
1607 	daddu	$7,$12
1608 	daddu	$31,$12
1609 	ld	$11,24($29)	# prefetch from ring buffer
1610 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1611 	dsrl	$15,$10,7		# Xupdate(17)
1612 	drotr	$13,$10,1
1613 	daddu	$9,$18			# +=X[i+9]
1614 	xor	$15,$13
1615 	drotr	$13,$10,8
1616 
1617 	dsrl	$16,$23,6
1618 	drotr	$14,$23,19
1619 	xor	$15,$13			# sigma0(X[i+1])
1620 	drotr	$13,$23,61
1621 	xor	$16,$14
1622 	daddu	$9,$15
1623 #else
1624 	dsrl	$15,$10,7		# Xupdate(17)
1625 	daddu	$9,$18			# +=X[i+9]
1626 	dsll	$14,$10,56
1627 	dsrl	$13,$10,1
1628 	xor	$15,$14
1629 	dsll	$14,7
1630 	xor	$15,$13
1631 	dsrl	$13,$10,8
1632 	xor	$15,$14
1633 
1634 	dsrl	$16,$23,6
1635 	xor	$15,$13			# sigma0(X[i+1])
1636 	dsll	$14,$23,3
1637 	daddu	$9,$15
1638 	dsrl	$13,$23,19
1639 	xor	$16,$14
1640 	dsll	$14,42
1641 	xor	$16,$13
1642 	dsrl	$13,$23,61
1643 	xor	$16,$14
1644 #endif
1645 	xor	$16,$13			# sigma1(X[i+14])
1646 	daddu	$9,$16
1647 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1648 	xor	$16,$24,$25			# 17
1649 	drotr	$14,$7,14
1650 	daddu	$13,$9,$30
1651 	drotr	$15,$7,18
1652 	and	$16,$7
1653 	drotr	$30,$7,41
1654 	xor	$14,$15
1655 	drotr	$15,$31,28
1656 	xor	$16,$25			# Ch(e,f,g)
1657 	xor	$14,$30			# Sigma1(e)
1658 
1659 	drotr	$30,$31,34
1660 	daddu	$13,$16
1661 	ld	$16,136($6)		# K[17]
1662 	xor	$30,$15
1663 	drotr	$15,$31,39
1664 	daddu	$13,$14
1665 	and	$14,$1,$2
1666 	xor	$30,$15			# Sigma0(a)
1667 	xor	$15,$1,$2
1668 #else
1669 	daddu	$13,$9,$30			# 17
1670 	dsrl	$30,$7,14
1671 	xor	$16,$24,$25
1672 	dsll	$15,$7,23
1673 	and	$16,$7
1674 	dsrl	$14,$7,18
1675 	xor	$30,$15
1676 	dsll	$15,$7,46
1677 	xor	$30,$14
1678 	dsrl	$14,$7,41
1679 	xor	$30,$15
1680 	dsll	$15,$7,50
1681 	xor	$30,$14
1682 	xor	$16,$25			# Ch(e,f,g)
1683 	xor	$14,$15,$30			# Sigma1(e)
1684 
1685 	dsrl	$30,$31,28
1686 	daddu	$13,$16
1687 	ld	$16,136($6)		# K[17]
1688 	dsll	$15,$31,25
1689 	daddu	$13,$14
1690 	dsrl	$14,$31,34
1691 	xor	$30,$15
1692 	dsll	$15,$31,30
1693 	xor	$30,$14
1694 	dsrl	$14,$31,39
1695 	xor	$30,$15
1696 	dsll	$15,$31,36
1697 	xor	$30,$14
1698 	and	$14,$1,$2
1699 	xor	$30,$15			# Sigma0(a)
1700 	xor	$15,$1,$2
1701 #endif
1702 	sd	$9,8($29)	# offload to ring buffer
1703 	daddu	$30,$14
1704 	and	$15,$31
1705 	daddu	$13,$16			# +=K[17]
1706 	daddu	$30,$15			# +=Maj(a,b,c)
1707 	daddu	$3,$13
1708 	daddu	$30,$13
1709 	ld	$12,32($29)	# prefetch from ring buffer
1710 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1711 	dsrl	$16,$11,7		# Xupdate(18)
1712 	drotr	$14,$11,1
1713 	daddu	$10,$19			# +=X[i+9]
1714 	xor	$16,$14
1715 	drotr	$14,$11,8
1716 
1717 	dsrl	$17,$8,6
1718 	drotr	$15,$8,19
1719 	xor	$16,$14			# sigma0(X[i+1])
1720 	drotr	$14,$8,61
1721 	xor	$17,$15
1722 	daddu	$10,$16
1723 #else
1724 	dsrl	$16,$11,7		# Xupdate(18)
1725 	daddu	$10,$19			# +=X[i+9]
1726 	dsll	$15,$11,56
1727 	dsrl	$14,$11,1
1728 	xor	$16,$15
1729 	dsll	$15,7
1730 	xor	$16,$14
1731 	dsrl	$14,$11,8
1732 	xor	$16,$15
1733 
1734 	dsrl	$17,$8,6
1735 	xor	$16,$14			# sigma0(X[i+1])
1736 	dsll	$15,$8,3
1737 	daddu	$10,$16
1738 	dsrl	$14,$8,19
1739 	xor	$17,$15
1740 	dsll	$15,42
1741 	xor	$17,$14
1742 	dsrl	$14,$8,61
1743 	xor	$17,$15
1744 #endif
1745 	xor	$17,$14			# sigma1(X[i+14])
1746 	daddu	$10,$17
1747 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1748 	xor	$17,$7,$24			# 18
1749 	drotr	$15,$3,14
1750 	daddu	$14,$10,$25
1751 	drotr	$16,$3,18
1752 	and	$17,$3
1753 	drotr	$25,$3,41
1754 	xor	$15,$16
1755 	drotr	$16,$30,28
1756 	xor	$17,$24			# Ch(e,f,g)
1757 	xor	$15,$25			# Sigma1(e)
1758 
1759 	drotr	$25,$30,34
1760 	daddu	$14,$17
1761 	ld	$17,144($6)		# K[18]
1762 	xor	$25,$16
1763 	drotr	$16,$30,39
1764 	daddu	$14,$15
1765 	and	$15,$31,$1
1766 	xor	$25,$16			# Sigma0(a)
1767 	xor	$16,$31,$1
1768 #else
1769 	daddu	$14,$10,$25			# 18
1770 	dsrl	$25,$3,14
1771 	xor	$17,$7,$24
1772 	dsll	$16,$3,23
1773 	and	$17,$3
1774 	dsrl	$15,$3,18
1775 	xor	$25,$16
1776 	dsll	$16,$3,46
1777 	xor	$25,$15
1778 	dsrl	$15,$3,41
1779 	xor	$25,$16
1780 	dsll	$16,$3,50
1781 	xor	$25,$15
1782 	xor	$17,$24			# Ch(e,f,g)
1783 	xor	$15,$16,$25			# Sigma1(e)
1784 
1785 	dsrl	$25,$30,28
1786 	daddu	$14,$17
1787 	ld	$17,144($6)		# K[18]
1788 	dsll	$16,$30,25
1789 	daddu	$14,$15
1790 	dsrl	$15,$30,34
1791 	xor	$25,$16
1792 	dsll	$16,$30,30
1793 	xor	$25,$15
1794 	dsrl	$15,$30,39
1795 	xor	$25,$16
1796 	dsll	$16,$30,36
1797 	xor	$25,$15
1798 	and	$15,$31,$1
1799 	xor	$25,$16			# Sigma0(a)
1800 	xor	$16,$31,$1
1801 #endif
1802 	sd	$10,16($29)	# offload to ring buffer
1803 	daddu	$25,$15
1804 	and	$16,$30
1805 	daddu	$14,$17			# +=K[18]
1806 	daddu	$25,$16			# +=Maj(a,b,c)
1807 	daddu	$2,$14
1808 	daddu	$25,$14
1809 	ld	$13,40($29)	# prefetch from ring buffer
1810 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1811 	dsrl	$17,$12,7		# Xupdate(19)
1812 	drotr	$15,$12,1
1813 	daddu	$11,$20			# +=X[i+9]
1814 	xor	$17,$15
1815 	drotr	$15,$12,8
1816 
1817 	dsrl	$18,$9,6
1818 	drotr	$16,$9,19
1819 	xor	$17,$15			# sigma0(X[i+1])
1820 	drotr	$15,$9,61
1821 	xor	$18,$16
1822 	daddu	$11,$17
1823 #else
1824 	dsrl	$17,$12,7		# Xupdate(19)
1825 	daddu	$11,$20			# +=X[i+9]
1826 	dsll	$16,$12,56
1827 	dsrl	$15,$12,1
1828 	xor	$17,$16
1829 	dsll	$16,7
1830 	xor	$17,$15
1831 	dsrl	$15,$12,8
1832 	xor	$17,$16
1833 
1834 	dsrl	$18,$9,6
1835 	xor	$17,$15			# sigma0(X[i+1])
1836 	dsll	$16,$9,3
1837 	daddu	$11,$17
1838 	dsrl	$15,$9,19
1839 	xor	$18,$16
1840 	dsll	$16,42
1841 	xor	$18,$15
1842 	dsrl	$15,$9,61
1843 	xor	$18,$16
1844 #endif
1845 	xor	$18,$15			# sigma1(X[i+14])
1846 	daddu	$11,$18
1847 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1848 	xor	$18,$3,$7			# 19
1849 	drotr	$16,$2,14
1850 	daddu	$15,$11,$24
1851 	drotr	$17,$2,18
1852 	and	$18,$2
1853 	drotr	$24,$2,41
1854 	xor	$16,$17
1855 	drotr	$17,$25,28
1856 	xor	$18,$7			# Ch(e,f,g)
1857 	xor	$16,$24			# Sigma1(e)
1858 
1859 	drotr	$24,$25,34
1860 	daddu	$15,$18
1861 	ld	$18,152($6)		# K[19]
1862 	xor	$24,$17
1863 	drotr	$17,$25,39
1864 	daddu	$15,$16
1865 	and	$16,$30,$31
1866 	xor	$24,$17			# Sigma0(a)
1867 	xor	$17,$30,$31
1868 #else
1869 	daddu	$15,$11,$24			# 19
1870 	dsrl	$24,$2,14
1871 	xor	$18,$3,$7
1872 	dsll	$17,$2,23
1873 	and	$18,$2
1874 	dsrl	$16,$2,18
1875 	xor	$24,$17
1876 	dsll	$17,$2,46
1877 	xor	$24,$16
1878 	dsrl	$16,$2,41
1879 	xor	$24,$17
1880 	dsll	$17,$2,50
1881 	xor	$24,$16
1882 	xor	$18,$7			# Ch(e,f,g)
1883 	xor	$16,$17,$24			# Sigma1(e)
1884 
1885 	dsrl	$24,$25,28
1886 	daddu	$15,$18
1887 	ld	$18,152($6)		# K[19]
1888 	dsll	$17,$25,25
1889 	daddu	$15,$16
1890 	dsrl	$16,$25,34
1891 	xor	$24,$17
1892 	dsll	$17,$25,30
1893 	xor	$24,$16
1894 	dsrl	$16,$25,39
1895 	xor	$24,$17
1896 	dsll	$17,$25,36
1897 	xor	$24,$16
1898 	and	$16,$30,$31
1899 	xor	$24,$17			# Sigma0(a)
1900 	xor	$17,$30,$31
1901 #endif
1902 	sd	$11,24($29)	# offload to ring buffer
1903 	daddu	$24,$16
1904 	and	$17,$25
1905 	daddu	$15,$18			# +=K[19]
1906 	daddu	$24,$17			# +=Maj(a,b,c)
1907 	daddu	$1,$15
1908 	daddu	$24,$15
1909 	ld	$14,48($29)	# prefetch from ring buffer
1910 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1911 	dsrl	$18,$13,7		# Xupdate(20)
1912 	drotr	$16,$13,1
1913 	daddu	$12,$21			# +=X[i+9]
1914 	xor	$18,$16
1915 	drotr	$16,$13,8
1916 
1917 	dsrl	$19,$10,6
1918 	drotr	$17,$10,19
1919 	xor	$18,$16			# sigma0(X[i+1])
1920 	drotr	$16,$10,61
1921 	xor	$19,$17
1922 	daddu	$12,$18
1923 #else
1924 	dsrl	$18,$13,7		# Xupdate(20)
1925 	daddu	$12,$21			# +=X[i+9]
1926 	dsll	$17,$13,56
1927 	dsrl	$16,$13,1
1928 	xor	$18,$17
1929 	dsll	$17,7
1930 	xor	$18,$16
1931 	dsrl	$16,$13,8
1932 	xor	$18,$17
1933 
1934 	dsrl	$19,$10,6
1935 	xor	$18,$16			# sigma0(X[i+1])
1936 	dsll	$17,$10,3
1937 	daddu	$12,$18
1938 	dsrl	$16,$10,19
1939 	xor	$19,$17
1940 	dsll	$17,42
1941 	xor	$19,$16
1942 	dsrl	$16,$10,61
1943 	xor	$19,$17
1944 #endif
1945 	xor	$19,$16			# sigma1(X[i+14])
1946 	daddu	$12,$19
1947 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1948 	xor	$19,$2,$3			# 20
1949 	drotr	$17,$1,14
1950 	daddu	$16,$12,$7
1951 	drotr	$18,$1,18
1952 	and	$19,$1
1953 	drotr	$7,$1,41
1954 	xor	$17,$18
1955 	drotr	$18,$24,28
1956 	xor	$19,$3			# Ch(e,f,g)
1957 	xor	$17,$7			# Sigma1(e)
1958 
1959 	drotr	$7,$24,34
1960 	daddu	$16,$19
1961 	ld	$19,160($6)		# K[20]
1962 	xor	$7,$18
1963 	drotr	$18,$24,39
1964 	daddu	$16,$17
1965 	and	$17,$25,$30
1966 	xor	$7,$18			# Sigma0(a)
1967 	xor	$18,$25,$30
1968 #else
1969 	daddu	$16,$12,$7			# 20
1970 	dsrl	$7,$1,14
1971 	xor	$19,$2,$3
1972 	dsll	$18,$1,23
1973 	and	$19,$1
1974 	dsrl	$17,$1,18
1975 	xor	$7,$18
1976 	dsll	$18,$1,46
1977 	xor	$7,$17
1978 	dsrl	$17,$1,41
1979 	xor	$7,$18
1980 	dsll	$18,$1,50
1981 	xor	$7,$17
1982 	xor	$19,$3			# Ch(e,f,g)
1983 	xor	$17,$18,$7			# Sigma1(e)
1984 
1985 	dsrl	$7,$24,28
1986 	daddu	$16,$19
1987 	ld	$19,160($6)		# K[20]
1988 	dsll	$18,$24,25
1989 	daddu	$16,$17
1990 	dsrl	$17,$24,34
1991 	xor	$7,$18
1992 	dsll	$18,$24,30
1993 	xor	$7,$17
1994 	dsrl	$17,$24,39
1995 	xor	$7,$18
1996 	dsll	$18,$24,36
1997 	xor	$7,$17
1998 	and	$17,$25,$30
1999 	xor	$7,$18			# Sigma0(a)
2000 	xor	$18,$25,$30
2001 #endif
2002 	sd	$12,32($29)	# offload to ring buffer
2003 	daddu	$7,$17
2004 	and	$18,$24
2005 	daddu	$16,$19			# +=K[20]
2006 	daddu	$7,$18			# +=Maj(a,b,c)
2007 	daddu	$31,$16
2008 	daddu	$7,$16
2009 	ld	$15,56($29)	# prefetch from ring buffer
2010 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2011 	dsrl	$19,$14,7		# Xupdate(21)
2012 	drotr	$17,$14,1
2013 	daddu	$13,$22			# +=X[i+9]
2014 	xor	$19,$17
2015 	drotr	$17,$14,8
2016 
2017 	dsrl	$20,$11,6
2018 	drotr	$18,$11,19
2019 	xor	$19,$17			# sigma0(X[i+1])
2020 	drotr	$17,$11,61
2021 	xor	$20,$18
2022 	daddu	$13,$19
2023 #else
2024 	dsrl	$19,$14,7		# Xupdate(21)
2025 	daddu	$13,$22			# +=X[i+9]
2026 	dsll	$18,$14,56
2027 	dsrl	$17,$14,1
2028 	xor	$19,$18
2029 	dsll	$18,7
2030 	xor	$19,$17
2031 	dsrl	$17,$14,8
2032 	xor	$19,$18
2033 
2034 	dsrl	$20,$11,6
2035 	xor	$19,$17			# sigma0(X[i+1])
2036 	dsll	$18,$11,3
2037 	daddu	$13,$19
2038 	dsrl	$17,$11,19
2039 	xor	$20,$18
2040 	dsll	$18,42
2041 	xor	$20,$17
2042 	dsrl	$17,$11,61
2043 	xor	$20,$18
2044 #endif
2045 	xor	$20,$17			# sigma1(X[i+14])
2046 	daddu	$13,$20
2047 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2048 	xor	$20,$1,$2			# 21
2049 	drotr	$18,$31,14
2050 	daddu	$17,$13,$3
2051 	drotr	$19,$31,18
2052 	and	$20,$31
2053 	drotr	$3,$31,41
2054 	xor	$18,$19
2055 	drotr	$19,$7,28
2056 	xor	$20,$2			# Ch(e,f,g)
2057 	xor	$18,$3			# Sigma1(e)
2058 
2059 	drotr	$3,$7,34
2060 	daddu	$17,$20
2061 	ld	$20,168($6)		# K[21]
2062 	xor	$3,$19
2063 	drotr	$19,$7,39
2064 	daddu	$17,$18
2065 	and	$18,$24,$25
2066 	xor	$3,$19			# Sigma0(a)
2067 	xor	$19,$24,$25
2068 #else
2069 	daddu	$17,$13,$3			# 21
2070 	dsrl	$3,$31,14
2071 	xor	$20,$1,$2
2072 	dsll	$19,$31,23
2073 	and	$20,$31
2074 	dsrl	$18,$31,18
2075 	xor	$3,$19
2076 	dsll	$19,$31,46
2077 	xor	$3,$18
2078 	dsrl	$18,$31,41
2079 	xor	$3,$19
2080 	dsll	$19,$31,50
2081 	xor	$3,$18
2082 	xor	$20,$2			# Ch(e,f,g)
2083 	xor	$18,$19,$3			# Sigma1(e)
2084 
2085 	dsrl	$3,$7,28
2086 	daddu	$17,$20
2087 	ld	$20,168($6)		# K[21]
2088 	dsll	$19,$7,25
2089 	daddu	$17,$18
2090 	dsrl	$18,$7,34
2091 	xor	$3,$19
2092 	dsll	$19,$7,30
2093 	xor	$3,$18
2094 	dsrl	$18,$7,39
2095 	xor	$3,$19
2096 	dsll	$19,$7,36
2097 	xor	$3,$18
2098 	and	$18,$24,$25
2099 	xor	$3,$19			# Sigma0(a)
2100 	xor	$19,$24,$25
2101 #endif
2102 	sd	$13,40($29)	# offload to ring buffer
2103 	daddu	$3,$18
2104 	and	$19,$7
2105 	daddu	$17,$20			# +=K[21]
2106 	daddu	$3,$19			# +=Maj(a,b,c)
2107 	daddu	$30,$17
2108 	daddu	$3,$17
2109 	ld	$16,64($29)	# prefetch from ring buffer
2110 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2111 	dsrl	$20,$15,7		# Xupdate(22)
2112 	drotr	$18,$15,1
2113 	daddu	$14,$23			# +=X[i+9]
2114 	xor	$20,$18
2115 	drotr	$18,$15,8
2116 
2117 	dsrl	$21,$12,6
2118 	drotr	$19,$12,19
2119 	xor	$20,$18			# sigma0(X[i+1])
2120 	drotr	$18,$12,61
2121 	xor	$21,$19
2122 	daddu	$14,$20
2123 #else
2124 	dsrl	$20,$15,7		# Xupdate(22)
2125 	daddu	$14,$23			# +=X[i+9]
2126 	dsll	$19,$15,56
2127 	dsrl	$18,$15,1
2128 	xor	$20,$19
2129 	dsll	$19,7
2130 	xor	$20,$18
2131 	dsrl	$18,$15,8
2132 	xor	$20,$19
2133 
2134 	dsrl	$21,$12,6
2135 	xor	$20,$18			# sigma0(X[i+1])
2136 	dsll	$19,$12,3
2137 	daddu	$14,$20
2138 	dsrl	$18,$12,19
2139 	xor	$21,$19
2140 	dsll	$19,42
2141 	xor	$21,$18
2142 	dsrl	$18,$12,61
2143 	xor	$21,$19
2144 #endif
2145 	xor	$21,$18			# sigma1(X[i+14])
2146 	daddu	$14,$21
2147 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2148 	xor	$21,$31,$1			# 22
2149 	drotr	$19,$30,14
2150 	daddu	$18,$14,$2
2151 	drotr	$20,$30,18
2152 	and	$21,$30
2153 	drotr	$2,$30,41
2154 	xor	$19,$20
2155 	drotr	$20,$3,28
2156 	xor	$21,$1			# Ch(e,f,g)
2157 	xor	$19,$2			# Sigma1(e)
2158 
2159 	drotr	$2,$3,34
2160 	daddu	$18,$21
2161 	ld	$21,176($6)		# K[22]
2162 	xor	$2,$20
2163 	drotr	$20,$3,39
2164 	daddu	$18,$19
2165 	and	$19,$7,$24
2166 	xor	$2,$20			# Sigma0(a)
2167 	xor	$20,$7,$24
2168 #else
2169 	daddu	$18,$14,$2			# 22
2170 	dsrl	$2,$30,14
2171 	xor	$21,$31,$1
2172 	dsll	$20,$30,23
2173 	and	$21,$30
2174 	dsrl	$19,$30,18
2175 	xor	$2,$20
2176 	dsll	$20,$30,46
2177 	xor	$2,$19
2178 	dsrl	$19,$30,41
2179 	xor	$2,$20
2180 	dsll	$20,$30,50
2181 	xor	$2,$19
2182 	xor	$21,$1			# Ch(e,f,g)
2183 	xor	$19,$20,$2			# Sigma1(e)
2184 
2185 	dsrl	$2,$3,28
2186 	daddu	$18,$21
2187 	ld	$21,176($6)		# K[22]
2188 	dsll	$20,$3,25
2189 	daddu	$18,$19
2190 	dsrl	$19,$3,34
2191 	xor	$2,$20
2192 	dsll	$20,$3,30
2193 	xor	$2,$19
2194 	dsrl	$19,$3,39
2195 	xor	$2,$20
2196 	dsll	$20,$3,36
2197 	xor	$2,$19
2198 	and	$19,$7,$24
2199 	xor	$2,$20			# Sigma0(a)
2200 	xor	$20,$7,$24
2201 #endif
2202 	sd	$14,48($29)	# offload to ring buffer
2203 	daddu	$2,$19
2204 	and	$20,$3
2205 	daddu	$18,$21			# +=K[22]
2206 	daddu	$2,$20			# +=Maj(a,b,c)
2207 	daddu	$25,$18
2208 	daddu	$2,$18
2209 	ld	$17,72($29)	# prefetch from ring buffer
2210 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2211 	dsrl	$21,$16,7		# Xupdate(23)
2212 	drotr	$19,$16,1
2213 	daddu	$15,$8			# +=X[i+9]
2214 	xor	$21,$19
2215 	drotr	$19,$16,8
2216 
2217 	dsrl	$22,$13,6
2218 	drotr	$20,$13,19
2219 	xor	$21,$19			# sigma0(X[i+1])
2220 	drotr	$19,$13,61
2221 	xor	$22,$20
2222 	daddu	$15,$21
2223 #else
2224 	dsrl	$21,$16,7		# Xupdate(23)
2225 	daddu	$15,$8			# +=X[i+9]
2226 	dsll	$20,$16,56
2227 	dsrl	$19,$16,1
2228 	xor	$21,$20
2229 	dsll	$20,7
2230 	xor	$21,$19
2231 	dsrl	$19,$16,8
2232 	xor	$21,$20
2233 
2234 	dsrl	$22,$13,6
2235 	xor	$21,$19			# sigma0(X[i+1])
2236 	dsll	$20,$13,3
2237 	daddu	$15,$21
2238 	dsrl	$19,$13,19
2239 	xor	$22,$20
2240 	dsll	$20,42
2241 	xor	$22,$19
2242 	dsrl	$19,$13,61
2243 	xor	$22,$20
2244 #endif
2245 	xor	$22,$19			# sigma1(X[i+14])
2246 	daddu	$15,$22
2247 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2248 	xor	$22,$30,$31			# 23
2249 	drotr	$20,$25,14
2250 	daddu	$19,$15,$1
2251 	drotr	$21,$25,18
2252 	and	$22,$25
2253 	drotr	$1,$25,41
2254 	xor	$20,$21
2255 	drotr	$21,$2,28
2256 	xor	$22,$31			# Ch(e,f,g)
2257 	xor	$20,$1			# Sigma1(e)
2258 
2259 	drotr	$1,$2,34
2260 	daddu	$19,$22
2261 	ld	$22,184($6)		# K[23]
2262 	xor	$1,$21
2263 	drotr	$21,$2,39
2264 	daddu	$19,$20
2265 	and	$20,$3,$7
2266 	xor	$1,$21			# Sigma0(a)
2267 	xor	$21,$3,$7
2268 #else
2269 	daddu	$19,$15,$1			# 23
2270 	dsrl	$1,$25,14
2271 	xor	$22,$30,$31
2272 	dsll	$21,$25,23
2273 	and	$22,$25
2274 	dsrl	$20,$25,18
2275 	xor	$1,$21
2276 	dsll	$21,$25,46
2277 	xor	$1,$20
2278 	dsrl	$20,$25,41
2279 	xor	$1,$21
2280 	dsll	$21,$25,50
2281 	xor	$1,$20
2282 	xor	$22,$31			# Ch(e,f,g)
2283 	xor	$20,$21,$1			# Sigma1(e)
2284 
2285 	dsrl	$1,$2,28
2286 	daddu	$19,$22
2287 	ld	$22,184($6)		# K[23]
2288 	dsll	$21,$2,25
2289 	daddu	$19,$20
2290 	dsrl	$20,$2,34
2291 	xor	$1,$21
2292 	dsll	$21,$2,30
2293 	xor	$1,$20
2294 	dsrl	$20,$2,39
2295 	xor	$1,$21
2296 	dsll	$21,$2,36
2297 	xor	$1,$20
2298 	and	$20,$3,$7
2299 	xor	$1,$21			# Sigma0(a)
2300 	xor	$21,$3,$7
2301 #endif
2302 	sd	$15,56($29)	# offload to ring buffer
2303 	daddu	$1,$20
2304 	and	$21,$2
2305 	daddu	$19,$22			# +=K[23]
2306 	daddu	$1,$21			# +=Maj(a,b,c)
2307 	daddu	$24,$19
2308 	daddu	$1,$19
2309 	ld	$18,80($29)	# prefetch from ring buffer
2310 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2311 	dsrl	$22,$17,7		# Xupdate(24)
2312 	drotr	$20,$17,1
2313 	daddu	$16,$9			# +=X[i+9]
2314 	xor	$22,$20
2315 	drotr	$20,$17,8
2316 
2317 	dsrl	$23,$14,6
2318 	drotr	$21,$14,19
2319 	xor	$22,$20			# sigma0(X[i+1])
2320 	drotr	$20,$14,61
2321 	xor	$23,$21
2322 	daddu	$16,$22
2323 #else
2324 	dsrl	$22,$17,7		# Xupdate(24)
2325 	daddu	$16,$9			# +=X[i+9]
2326 	dsll	$21,$17,56
2327 	dsrl	$20,$17,1
2328 	xor	$22,$21
2329 	dsll	$21,7
2330 	xor	$22,$20
2331 	dsrl	$20,$17,8
2332 	xor	$22,$21
2333 
2334 	dsrl	$23,$14,6
2335 	xor	$22,$20			# sigma0(X[i+1])
2336 	dsll	$21,$14,3
2337 	daddu	$16,$22
2338 	dsrl	$20,$14,19
2339 	xor	$23,$21
2340 	dsll	$21,42
2341 	xor	$23,$20
2342 	dsrl	$20,$14,61
2343 	xor	$23,$21
2344 #endif
2345 	xor	$23,$20			# sigma1(X[i+14])
2346 	daddu	$16,$23
2347 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2348 	xor	$23,$25,$30			# 24
2349 	drotr	$21,$24,14
2350 	daddu	$20,$16,$31
2351 	drotr	$22,$24,18
2352 	and	$23,$24
2353 	drotr	$31,$24,41
2354 	xor	$21,$22
2355 	drotr	$22,$1,28
2356 	xor	$23,$30			# Ch(e,f,g)
2357 	xor	$21,$31			# Sigma1(e)
2358 
2359 	drotr	$31,$1,34
2360 	daddu	$20,$23
2361 	ld	$23,192($6)		# K[24]
2362 	xor	$31,$22
2363 	drotr	$22,$1,39
2364 	daddu	$20,$21
2365 	and	$21,$2,$3
2366 	xor	$31,$22			# Sigma0(a)
2367 	xor	$22,$2,$3
2368 #else
2369 	daddu	$20,$16,$31			# 24
2370 	dsrl	$31,$24,14
2371 	xor	$23,$25,$30
2372 	dsll	$22,$24,23
2373 	and	$23,$24
2374 	dsrl	$21,$24,18
2375 	xor	$31,$22
2376 	dsll	$22,$24,46
2377 	xor	$31,$21
2378 	dsrl	$21,$24,41
2379 	xor	$31,$22
2380 	dsll	$22,$24,50
2381 	xor	$31,$21
2382 	xor	$23,$30			# Ch(e,f,g)
2383 	xor	$21,$22,$31			# Sigma1(e)
2384 
2385 	dsrl	$31,$1,28
2386 	daddu	$20,$23
2387 	ld	$23,192($6)		# K[24]
2388 	dsll	$22,$1,25
2389 	daddu	$20,$21
2390 	dsrl	$21,$1,34
2391 	xor	$31,$22
2392 	dsll	$22,$1,30
2393 	xor	$31,$21
2394 	dsrl	$21,$1,39
2395 	xor	$31,$22
2396 	dsll	$22,$1,36
2397 	xor	$31,$21
2398 	and	$21,$2,$3
2399 	xor	$31,$22			# Sigma0(a)
2400 	xor	$22,$2,$3
2401 #endif
2402 	sd	$16,64($29)	# offload to ring buffer
2403 	daddu	$31,$21
2404 	and	$22,$1
2405 	daddu	$20,$23			# +=K[24]
2406 	daddu	$31,$22			# +=Maj(a,b,c)
2407 	daddu	$7,$20
2408 	daddu	$31,$20
2409 	ld	$19,88($29)	# prefetch from ring buffer
2410 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2411 	dsrl	$23,$18,7		# Xupdate(25)
2412 	drotr	$21,$18,1
2413 	daddu	$17,$10			# +=X[i+9]
2414 	xor	$23,$21
2415 	drotr	$21,$18,8
2416 
2417 	dsrl	$8,$15,6
2418 	drotr	$22,$15,19
2419 	xor	$23,$21			# sigma0(X[i+1])
2420 	drotr	$21,$15,61
2421 	xor	$8,$22
2422 	daddu	$17,$23
2423 #else
2424 	dsrl	$23,$18,7		# Xupdate(25)
2425 	daddu	$17,$10			# +=X[i+9]
2426 	dsll	$22,$18,56
2427 	dsrl	$21,$18,1
2428 	xor	$23,$22
2429 	dsll	$22,7
2430 	xor	$23,$21
2431 	dsrl	$21,$18,8
2432 	xor	$23,$22
2433 
2434 	dsrl	$8,$15,6
2435 	xor	$23,$21			# sigma0(X[i+1])
2436 	dsll	$22,$15,3
2437 	daddu	$17,$23
2438 	dsrl	$21,$15,19
2439 	xor	$8,$22
2440 	dsll	$22,42
2441 	xor	$8,$21
2442 	dsrl	$21,$15,61
2443 	xor	$8,$22
2444 #endif
2445 	xor	$8,$21			# sigma1(X[i+14])
2446 	daddu	$17,$8
2447 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2448 	xor	$8,$24,$25			# 25
2449 	drotr	$22,$7,14
2450 	daddu	$21,$17,$30
2451 	drotr	$23,$7,18
2452 	and	$8,$7
2453 	drotr	$30,$7,41
2454 	xor	$22,$23
2455 	drotr	$23,$31,28
2456 	xor	$8,$25			# Ch(e,f,g)
2457 	xor	$22,$30			# Sigma1(e)
2458 
2459 	drotr	$30,$31,34
2460 	daddu	$21,$8
2461 	ld	$8,200($6)		# K[25]
2462 	xor	$30,$23
2463 	drotr	$23,$31,39
2464 	daddu	$21,$22
2465 	and	$22,$1,$2
2466 	xor	$30,$23			# Sigma0(a)
2467 	xor	$23,$1,$2
2468 #else
2469 	daddu	$21,$17,$30			# 25
2470 	dsrl	$30,$7,14
2471 	xor	$8,$24,$25
2472 	dsll	$23,$7,23
2473 	and	$8,$7
2474 	dsrl	$22,$7,18
2475 	xor	$30,$23
2476 	dsll	$23,$7,46
2477 	xor	$30,$22
2478 	dsrl	$22,$7,41
2479 	xor	$30,$23
2480 	dsll	$23,$7,50
2481 	xor	$30,$22
2482 	xor	$8,$25			# Ch(e,f,g)
2483 	xor	$22,$23,$30			# Sigma1(e)
2484 
2485 	dsrl	$30,$31,28
2486 	daddu	$21,$8
2487 	ld	$8,200($6)		# K[25]
2488 	dsll	$23,$31,25
2489 	daddu	$21,$22
2490 	dsrl	$22,$31,34
2491 	xor	$30,$23
2492 	dsll	$23,$31,30
2493 	xor	$30,$22
2494 	dsrl	$22,$31,39
2495 	xor	$30,$23
2496 	dsll	$23,$31,36
2497 	xor	$30,$22
2498 	and	$22,$1,$2
2499 	xor	$30,$23			# Sigma0(a)
2500 	xor	$23,$1,$2
2501 #endif
2502 	sd	$17,72($29)	# offload to ring buffer
2503 	daddu	$30,$22
2504 	and	$23,$31
2505 	daddu	$21,$8			# +=K[25]
2506 	daddu	$30,$23			# +=Maj(a,b,c)
2507 	daddu	$3,$21
2508 	daddu	$30,$21
2509 	ld	$20,96($29)	# prefetch from ring buffer
2510 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2511 	dsrl	$8,$19,7		# Xupdate(26)
2512 	drotr	$22,$19,1
2513 	daddu	$18,$11			# +=X[i+9]
2514 	xor	$8,$22
2515 	drotr	$22,$19,8
2516 
2517 	dsrl	$9,$16,6
2518 	drotr	$23,$16,19
2519 	xor	$8,$22			# sigma0(X[i+1])
2520 	drotr	$22,$16,61
2521 	xor	$9,$23
2522 	daddu	$18,$8
2523 #else
2524 	dsrl	$8,$19,7		# Xupdate(26)
2525 	daddu	$18,$11			# +=X[i+9]
2526 	dsll	$23,$19,56
2527 	dsrl	$22,$19,1
2528 	xor	$8,$23
2529 	dsll	$23,7
2530 	xor	$8,$22
2531 	dsrl	$22,$19,8
2532 	xor	$8,$23
2533 
2534 	dsrl	$9,$16,6
2535 	xor	$8,$22			# sigma0(X[i+1])
2536 	dsll	$23,$16,3
2537 	daddu	$18,$8
2538 	dsrl	$22,$16,19
2539 	xor	$9,$23
2540 	dsll	$23,42
2541 	xor	$9,$22
2542 	dsrl	$22,$16,61
2543 	xor	$9,$23
2544 #endif
2545 	xor	$9,$22			# sigma1(X[i+14])
2546 	daddu	$18,$9
2547 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2548 	xor	$9,$7,$24			# 26
2549 	drotr	$23,$3,14
2550 	daddu	$22,$18,$25
2551 	drotr	$8,$3,18
2552 	and	$9,$3
2553 	drotr	$25,$3,41
2554 	xor	$23,$8
2555 	drotr	$8,$30,28
2556 	xor	$9,$24			# Ch(e,f,g)
2557 	xor	$23,$25			# Sigma1(e)
2558 
2559 	drotr	$25,$30,34
2560 	daddu	$22,$9
2561 	ld	$9,208($6)		# K[26]
2562 	xor	$25,$8
2563 	drotr	$8,$30,39
2564 	daddu	$22,$23
2565 	and	$23,$31,$1
2566 	xor	$25,$8			# Sigma0(a)
2567 	xor	$8,$31,$1
2568 #else
2569 	daddu	$22,$18,$25			# 26
2570 	dsrl	$25,$3,14
2571 	xor	$9,$7,$24
2572 	dsll	$8,$3,23
2573 	and	$9,$3
2574 	dsrl	$23,$3,18
2575 	xor	$25,$8
2576 	dsll	$8,$3,46
2577 	xor	$25,$23
2578 	dsrl	$23,$3,41
2579 	xor	$25,$8
2580 	dsll	$8,$3,50
2581 	xor	$25,$23
2582 	xor	$9,$24			# Ch(e,f,g)
2583 	xor	$23,$8,$25			# Sigma1(e)
2584 
2585 	dsrl	$25,$30,28
2586 	daddu	$22,$9
2587 	ld	$9,208($6)		# K[26]
2588 	dsll	$8,$30,25
2589 	daddu	$22,$23
2590 	dsrl	$23,$30,34
2591 	xor	$25,$8
2592 	dsll	$8,$30,30
2593 	xor	$25,$23
2594 	dsrl	$23,$30,39
2595 	xor	$25,$8
2596 	dsll	$8,$30,36
2597 	xor	$25,$23
2598 	and	$23,$31,$1
2599 	xor	$25,$8			# Sigma0(a)
2600 	xor	$8,$31,$1
2601 #endif
2602 	sd	$18,80($29)	# offload to ring buffer
2603 	daddu	$25,$23
2604 	and	$8,$30
2605 	daddu	$22,$9			# +=K[26]
2606 	daddu	$25,$8			# +=Maj(a,b,c)
2607 	daddu	$2,$22
2608 	daddu	$25,$22
2609 	ld	$21,104($29)	# prefetch from ring buffer
2610 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2611 	dsrl	$9,$20,7		# Xupdate(27)
2612 	drotr	$23,$20,1
2613 	daddu	$19,$12			# +=X[i+9]
2614 	xor	$9,$23
2615 	drotr	$23,$20,8
2616 
2617 	dsrl	$10,$17,6
2618 	drotr	$8,$17,19
2619 	xor	$9,$23			# sigma0(X[i+1])
2620 	drotr	$23,$17,61
2621 	xor	$10,$8
2622 	daddu	$19,$9
2623 #else
2624 	dsrl	$9,$20,7		# Xupdate(27)
2625 	daddu	$19,$12			# +=X[i+9]
2626 	dsll	$8,$20,56
2627 	dsrl	$23,$20,1
2628 	xor	$9,$8
2629 	dsll	$8,7
2630 	xor	$9,$23
2631 	dsrl	$23,$20,8
2632 	xor	$9,$8
2633 
2634 	dsrl	$10,$17,6
2635 	xor	$9,$23			# sigma0(X[i+1])
2636 	dsll	$8,$17,3
2637 	daddu	$19,$9
2638 	dsrl	$23,$17,19
2639 	xor	$10,$8
2640 	dsll	$8,42
2641 	xor	$10,$23
2642 	dsrl	$23,$17,61
2643 	xor	$10,$8
2644 #endif
2645 	xor	$10,$23			# sigma1(X[i+14])
2646 	daddu	$19,$10
2647 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2648 	xor	$10,$3,$7			# 27
2649 	drotr	$8,$2,14
2650 	daddu	$23,$19,$24
2651 	drotr	$9,$2,18
2652 	and	$10,$2
2653 	drotr	$24,$2,41
2654 	xor	$8,$9
2655 	drotr	$9,$25,28
2656 	xor	$10,$7			# Ch(e,f,g)
2657 	xor	$8,$24			# Sigma1(e)
2658 
2659 	drotr	$24,$25,34
2660 	daddu	$23,$10
2661 	ld	$10,216($6)		# K[27]
2662 	xor	$24,$9
2663 	drotr	$9,$25,39
2664 	daddu	$23,$8
2665 	and	$8,$30,$31
2666 	xor	$24,$9			# Sigma0(a)
2667 	xor	$9,$30,$31
2668 #else
2669 	daddu	$23,$19,$24			# 27
2670 	dsrl	$24,$2,14
2671 	xor	$10,$3,$7
2672 	dsll	$9,$2,23
2673 	and	$10,$2
2674 	dsrl	$8,$2,18
2675 	xor	$24,$9
2676 	dsll	$9,$2,46
2677 	xor	$24,$8
2678 	dsrl	$8,$2,41
2679 	xor	$24,$9
2680 	dsll	$9,$2,50
2681 	xor	$24,$8
2682 	xor	$10,$7			# Ch(e,f,g)
2683 	xor	$8,$9,$24			# Sigma1(e)
2684 
2685 	dsrl	$24,$25,28
2686 	daddu	$23,$10
2687 	ld	$10,216($6)		# K[27]
2688 	dsll	$9,$25,25
2689 	daddu	$23,$8
2690 	dsrl	$8,$25,34
2691 	xor	$24,$9
2692 	dsll	$9,$25,30
2693 	xor	$24,$8
2694 	dsrl	$8,$25,39
2695 	xor	$24,$9
2696 	dsll	$9,$25,36
2697 	xor	$24,$8
2698 	and	$8,$30,$31
2699 	xor	$24,$9			# Sigma0(a)
2700 	xor	$9,$30,$31
2701 #endif
2702 	sd	$19,88($29)	# offload to ring buffer
2703 	daddu	$24,$8
2704 	and	$9,$25
2705 	daddu	$23,$10			# +=K[27]
2706 	daddu	$24,$9			# +=Maj(a,b,c)
2707 	daddu	$1,$23
2708 	daddu	$24,$23
2709 	ld	$22,112($29)	# prefetch from ring buffer
2710 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2711 	dsrl	$10,$21,7		# Xupdate(28)
2712 	drotr	$8,$21,1
2713 	daddu	$20,$13			# +=X[i+9]
2714 	xor	$10,$8
2715 	drotr	$8,$21,8
2716 
2717 	dsrl	$11,$18,6
2718 	drotr	$9,$18,19
2719 	xor	$10,$8			# sigma0(X[i+1])
2720 	drotr	$8,$18,61
2721 	xor	$11,$9
2722 	daddu	$20,$10
2723 #else
2724 	dsrl	$10,$21,7		# Xupdate(28)
2725 	daddu	$20,$13			# +=X[i+9]
2726 	dsll	$9,$21,56
2727 	dsrl	$8,$21,1
2728 	xor	$10,$9
2729 	dsll	$9,7
2730 	xor	$10,$8
2731 	dsrl	$8,$21,8
2732 	xor	$10,$9
2733 
2734 	dsrl	$11,$18,6
2735 	xor	$10,$8			# sigma0(X[i+1])
2736 	dsll	$9,$18,3
2737 	daddu	$20,$10
2738 	dsrl	$8,$18,19
2739 	xor	$11,$9
2740 	dsll	$9,42
2741 	xor	$11,$8
2742 	dsrl	$8,$18,61
2743 	xor	$11,$9
2744 #endif
2745 	xor	$11,$8			# sigma1(X[i+14])
2746 	daddu	$20,$11
2747 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2748 	xor	$11,$2,$3			# 28
2749 	drotr	$9,$1,14
2750 	daddu	$8,$20,$7
2751 	drotr	$10,$1,18
2752 	and	$11,$1
2753 	drotr	$7,$1,41
2754 	xor	$9,$10
2755 	drotr	$10,$24,28
2756 	xor	$11,$3			# Ch(e,f,g)
2757 	xor	$9,$7			# Sigma1(e)
2758 
2759 	drotr	$7,$24,34
2760 	daddu	$8,$11
2761 	ld	$11,224($6)		# K[28]
2762 	xor	$7,$10
2763 	drotr	$10,$24,39
2764 	daddu	$8,$9
2765 	and	$9,$25,$30
2766 	xor	$7,$10			# Sigma0(a)
2767 	xor	$10,$25,$30
2768 #else
2769 	daddu	$8,$20,$7			# 28
2770 	dsrl	$7,$1,14
2771 	xor	$11,$2,$3
2772 	dsll	$10,$1,23
2773 	and	$11,$1
2774 	dsrl	$9,$1,18
2775 	xor	$7,$10
2776 	dsll	$10,$1,46
2777 	xor	$7,$9
2778 	dsrl	$9,$1,41
2779 	xor	$7,$10
2780 	dsll	$10,$1,50
2781 	xor	$7,$9
2782 	xor	$11,$3			# Ch(e,f,g)
2783 	xor	$9,$10,$7			# Sigma1(e)
2784 
2785 	dsrl	$7,$24,28
2786 	daddu	$8,$11
2787 	ld	$11,224($6)		# K[28]
2788 	dsll	$10,$24,25
2789 	daddu	$8,$9
2790 	dsrl	$9,$24,34
2791 	xor	$7,$10
2792 	dsll	$10,$24,30
2793 	xor	$7,$9
2794 	dsrl	$9,$24,39
2795 	xor	$7,$10
2796 	dsll	$10,$24,36
2797 	xor	$7,$9
2798 	and	$9,$25,$30
2799 	xor	$7,$10			# Sigma0(a)
2800 	xor	$10,$25,$30
2801 #endif
2802 	sd	$20,96($29)	# offload to ring buffer
2803 	daddu	$7,$9
2804 	and	$10,$24
2805 	daddu	$8,$11			# +=K[28]
2806 	daddu	$7,$10			# +=Maj(a,b,c)
2807 	daddu	$31,$8
2808 	daddu	$7,$8
2809 	ld	$23,120($29)	# prefetch from ring buffer
2810 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2811 	dsrl	$11,$22,7		# Xupdate(29)
2812 	drotr	$9,$22,1
2813 	daddu	$21,$14			# +=X[i+9]
2814 	xor	$11,$9
2815 	drotr	$9,$22,8
2816 
2817 	dsrl	$12,$19,6
2818 	drotr	$10,$19,19
2819 	xor	$11,$9			# sigma0(X[i+1])
2820 	drotr	$9,$19,61
2821 	xor	$12,$10
2822 	daddu	$21,$11
2823 #else
2824 	dsrl	$11,$22,7		# Xupdate(29)
2825 	daddu	$21,$14			# +=X[i+9]
2826 	dsll	$10,$22,56
2827 	dsrl	$9,$22,1
2828 	xor	$11,$10
2829 	dsll	$10,7
2830 	xor	$11,$9
2831 	dsrl	$9,$22,8
2832 	xor	$11,$10
2833 
2834 	dsrl	$12,$19,6
2835 	xor	$11,$9			# sigma0(X[i+1])
2836 	dsll	$10,$19,3
2837 	daddu	$21,$11
2838 	dsrl	$9,$19,19
2839 	xor	$12,$10
2840 	dsll	$10,42
2841 	xor	$12,$9
2842 	dsrl	$9,$19,61
2843 	xor	$12,$10
2844 #endif
2845 	xor	$12,$9			# sigma1(X[i+14])
2846 	daddu	$21,$12
2847 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2848 	xor	$12,$1,$2			# 29
2849 	drotr	$10,$31,14
2850 	daddu	$9,$21,$3
2851 	drotr	$11,$31,18
2852 	and	$12,$31
2853 	drotr	$3,$31,41
2854 	xor	$10,$11
2855 	drotr	$11,$7,28
2856 	xor	$12,$2			# Ch(e,f,g)
2857 	xor	$10,$3			# Sigma1(e)
2858 
2859 	drotr	$3,$7,34
2860 	daddu	$9,$12
2861 	ld	$12,232($6)		# K[29]
2862 	xor	$3,$11
2863 	drotr	$11,$7,39
2864 	daddu	$9,$10
2865 	and	$10,$24,$25
2866 	xor	$3,$11			# Sigma0(a)
2867 	xor	$11,$24,$25
2868 #else
2869 	daddu	$9,$21,$3			# 29
2870 	dsrl	$3,$31,14
2871 	xor	$12,$1,$2
2872 	dsll	$11,$31,23
2873 	and	$12,$31
2874 	dsrl	$10,$31,18
2875 	xor	$3,$11
2876 	dsll	$11,$31,46
2877 	xor	$3,$10
2878 	dsrl	$10,$31,41
2879 	xor	$3,$11
2880 	dsll	$11,$31,50
2881 	xor	$3,$10
2882 	xor	$12,$2			# Ch(e,f,g)
2883 	xor	$10,$11,$3			# Sigma1(e)
2884 
2885 	dsrl	$3,$7,28
2886 	daddu	$9,$12
2887 	ld	$12,232($6)		# K[29]
2888 	dsll	$11,$7,25
2889 	daddu	$9,$10
2890 	dsrl	$10,$7,34
2891 	xor	$3,$11
2892 	dsll	$11,$7,30
2893 	xor	$3,$10
2894 	dsrl	$10,$7,39
2895 	xor	$3,$11
2896 	dsll	$11,$7,36
2897 	xor	$3,$10
2898 	and	$10,$24,$25
2899 	xor	$3,$11			# Sigma0(a)
2900 	xor	$11,$24,$25
2901 #endif
2902 	sd	$21,104($29)	# offload to ring buffer
2903 	daddu	$3,$10
2904 	and	$11,$7
2905 	daddu	$9,$12			# +=K[29]
2906 	daddu	$3,$11			# +=Maj(a,b,c)
2907 	daddu	$30,$9
2908 	daddu	$3,$9
2909 	ld	$8,0($29)	# prefetch from ring buffer
2910 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2911 	dsrl	$12,$23,7		# Xupdate(30)
2912 	drotr	$10,$23,1
2913 	daddu	$22,$15			# +=X[i+9]
2914 	xor	$12,$10
2915 	drotr	$10,$23,8
2916 
2917 	dsrl	$13,$20,6
2918 	drotr	$11,$20,19
2919 	xor	$12,$10			# sigma0(X[i+1])
2920 	drotr	$10,$20,61
2921 	xor	$13,$11
2922 	daddu	$22,$12
2923 #else
2924 	dsrl	$12,$23,7		# Xupdate(30)
2925 	daddu	$22,$15			# +=X[i+9]
2926 	dsll	$11,$23,56
2927 	dsrl	$10,$23,1
2928 	xor	$12,$11
2929 	dsll	$11,7
2930 	xor	$12,$10
2931 	dsrl	$10,$23,8
2932 	xor	$12,$11
2933 
2934 	dsrl	$13,$20,6
2935 	xor	$12,$10			# sigma0(X[i+1])
2936 	dsll	$11,$20,3
2937 	daddu	$22,$12
2938 	dsrl	$10,$20,19
2939 	xor	$13,$11
2940 	dsll	$11,42
2941 	xor	$13,$10
2942 	dsrl	$10,$20,61
2943 	xor	$13,$11
2944 #endif
2945 	xor	$13,$10			# sigma1(X[i+14])
2946 	daddu	$22,$13
2947 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
2948 	xor	$13,$31,$1			# 30
2949 	drotr	$11,$30,14
2950 	daddu	$10,$22,$2
2951 	drotr	$12,$30,18
2952 	and	$13,$30
2953 	drotr	$2,$30,41
2954 	xor	$11,$12
2955 	drotr	$12,$3,28
2956 	xor	$13,$1			# Ch(e,f,g)
2957 	xor	$11,$2			# Sigma1(e)
2958 
2959 	drotr	$2,$3,34
2960 	daddu	$10,$13
2961 	ld	$13,240($6)		# K[30]
2962 	xor	$2,$12
2963 	drotr	$12,$3,39
2964 	daddu	$10,$11
2965 	and	$11,$7,$24
2966 	xor	$2,$12			# Sigma0(a)
2967 	xor	$12,$7,$24
2968 #else
2969 	daddu	$10,$22,$2			# 30
2970 	dsrl	$2,$30,14
2971 	xor	$13,$31,$1
2972 	dsll	$12,$30,23
2973 	and	$13,$30
2974 	dsrl	$11,$30,18
2975 	xor	$2,$12
2976 	dsll	$12,$30,46
2977 	xor	$2,$11
2978 	dsrl	$11,$30,41
2979 	xor	$2,$12
2980 	dsll	$12,$30,50
2981 	xor	$2,$11
2982 	xor	$13,$1			# Ch(e,f,g)
2983 	xor	$11,$12,$2			# Sigma1(e)
2984 
2985 	dsrl	$2,$3,28
2986 	daddu	$10,$13
2987 	ld	$13,240($6)		# K[30]
2988 	dsll	$12,$3,25
2989 	daddu	$10,$11
2990 	dsrl	$11,$3,34
2991 	xor	$2,$12
2992 	dsll	$12,$3,30
2993 	xor	$2,$11
2994 	dsrl	$11,$3,39
2995 	xor	$2,$12
2996 	dsll	$12,$3,36
2997 	xor	$2,$11
2998 	and	$11,$7,$24
2999 	xor	$2,$12			# Sigma0(a)
3000 	xor	$12,$7,$24
3001 #endif
3002 	sd	$22,112($29)	# offload to ring buffer
3003 	daddu	$2,$11
3004 	and	$12,$3
3005 	daddu	$10,$13			# +=K[30]
3006 	daddu	$2,$12			# +=Maj(a,b,c)
3007 	daddu	$25,$10
3008 	daddu	$2,$10
3009 	ld	$9,8($29)	# prefetch from ring buffer
3010 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
3011 	dsrl	$13,$8,7		# Xupdate(31)
3012 	drotr	$11,$8,1
3013 	daddu	$23,$16			# +=X[i+9]
3014 	xor	$13,$11
3015 	drotr	$11,$8,8
3016 
3017 	dsrl	$14,$21,6
3018 	drotr	$12,$21,19
3019 	xor	$13,$11			# sigma0(X[i+1])
3020 	drotr	$11,$21,61
3021 	xor	$14,$12
3022 	daddu	$23,$13
3023 #else
3024 	dsrl	$13,$8,7		# Xupdate(31)
3025 	daddu	$23,$16			# +=X[i+9]
3026 	dsll	$12,$8,56
3027 	dsrl	$11,$8,1
3028 	xor	$13,$12
3029 	dsll	$12,7
3030 	xor	$13,$11
3031 	dsrl	$11,$8,8
3032 	xor	$13,$12
3033 
3034 	dsrl	$14,$21,6
3035 	xor	$13,$11			# sigma0(X[i+1])
3036 	dsll	$12,$21,3
3037 	daddu	$23,$13
3038 	dsrl	$11,$21,19
3039 	xor	$14,$12
3040 	dsll	$12,42
3041 	xor	$14,$11
3042 	dsrl	$11,$21,61
3043 	xor	$14,$12
3044 #endif
3045 	xor	$14,$11			# sigma1(X[i+14])
3046 	daddu	$23,$14
3047 #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
3048 	xor	$14,$30,$31			# 31
3049 	drotr	$12,$25,14
3050 	daddu	$11,$23,$1
3051 	drotr	$13,$25,18
3052 	and	$14,$25
3053 	drotr	$1,$25,41
3054 	xor	$12,$13
3055 	drotr	$13,$2,28
3056 	xor	$14,$31			# Ch(e,f,g)
3057 	xor	$12,$1			# Sigma1(e)
3058 
3059 	drotr	$1,$2,34
3060 	daddu	$11,$14
3061 	ld	$14,248($6)		# K[31]
3062 	xor	$1,$13
3063 	drotr	$13,$2,39
3064 	daddu	$11,$12
3065 	and	$12,$3,$7
3066 	xor	$1,$13			# Sigma0(a)
3067 	xor	$13,$3,$7
3068 #else
3069 	daddu	$11,$23,$1			# 31
3070 	dsrl	$1,$25,14
3071 	xor	$14,$30,$31
3072 	dsll	$13,$25,23
3073 	and	$14,$25
3074 	dsrl	$12,$25,18
3075 	xor	$1,$13
3076 	dsll	$13,$25,46
3077 	xor	$1,$12
3078 	dsrl	$12,$25,41
3079 	xor	$1,$13
3080 	dsll	$13,$25,50
3081 	xor	$1,$12
3082 	xor	$14,$31			# Ch(e,f,g)
3083 	xor	$12,$13,$1			# Sigma1(e)
3084 
3085 	dsrl	$1,$2,28
3086 	daddu	$11,$14
3087 	ld	$14,248($6)		# K[31]
3088 	dsll	$13,$2,25
3089 	daddu	$11,$12
3090 	dsrl	$12,$2,34
3091 	xor	$1,$13
3092 	dsll	$13,$2,30
3093 	xor	$1,$12
3094 	dsrl	$12,$2,39
3095 	xor	$1,$13
3096 	dsll	$13,$2,36
3097 	xor	$1,$12
3098 	and	$12,$3,$7
3099 	xor	$1,$13			# Sigma0(a)
3100 	xor	$13,$3,$7
3101 #endif
3102 	sd	$23,120($29)	# offload to ring buffer
3103 	daddu	$1,$12
3104 	and	$13,$2
3105 	daddu	$11,$14			# +=K[31]
3106 	daddu	$1,$13			# +=Maj(a,b,c)
3107 	daddu	$24,$11
3108 	daddu	$1,$11
3109 	ld	$10,16($29)	# prefetch from ring buffer
3110 	and	$14,0xfff
3111 	li	$15,2071
3112 	.set	noreorder
3113 	bne	$14,$15,.L16_xx
3114 	daddu $6,16*8		# Ktbl+=16
3115 
3116 	ld	$23,16*8($29)	# restore pointer to the end of input
3117 	ld	$8,0*8($4)
3118 	ld	$9,1*8($4)
3119 	ld	$10,2*8($4)
3120 	daddu $5,16*8
3121 	ld	$11,3*8($4)
3122 	daddu	$1,$8
3123 	ld	$12,4*8($4)
3124 	daddu	$2,$9
3125 	ld	$13,5*8($4)
3126 	daddu	$3,$10
3127 	ld	$14,6*8($4)
3128 	daddu	$7,$11
3129 	ld	$15,7*8($4)
3130 	daddu	$24,$12
3131 	sd	$1,0*8($4)
3132 	daddu	$25,$13
3133 	sd	$2,1*8($4)
3134 	daddu	$30,$14
3135 	sd	$3,2*8($4)
3136 	daddu	$31,$15
3137 	sd	$7,3*8($4)
3138 	sd	$24,4*8($4)
3139 	sd	$25,5*8($4)
3140 	sd	$30,6*8($4)
3141 	sd	$31,7*8($4)
3142 
3143 	bne	$5,$23,.Loop
3144 	dsubu $6,512	# rewind $6
3145 
3146 	ld	$31,256-1*8($29)
3147 	ld	$30,256-2*8($29)
3148 	ld	$23,256-3*8($29)
3149 	ld	$22,256-4*8($29)
3150 	ld	$21,256-5*8($29)
3151 	ld	$20,256-6*8($29)
3152 	ld	$19,256-7*8($29)
3153 	ld	$18,256-8*8($29)
3154 	ld	$17,256-9*8($29)
3155 	ld	$16,256-10*8($29)
3156 	jr	$31
3157 	daddu $29,256
3158 .end	sha512_block_data_order
3159 
3160 .rdata
3161 .align	5
3162 K512:
3163 	.dword	0x428a2f98d728ae22, 0x7137449123ef65cd
3164 	.dword	0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc
3165 	.dword	0x3956c25bf348b538, 0x59f111f1b605d019
3166 	.dword	0x923f82a4af194f9b, 0xab1c5ed5da6d8118
3167 	.dword	0xd807aa98a3030242, 0x12835b0145706fbe
3168 	.dword	0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2
3169 	.dword	0x72be5d74f27b896f, 0x80deb1fe3b1696b1
3170 	.dword	0x9bdc06a725c71235, 0xc19bf174cf692694
3171 	.dword	0xe49b69c19ef14ad2, 0xefbe4786384f25e3
3172 	.dword	0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65
3173 	.dword	0x2de92c6f592b0275, 0x4a7484aa6ea6e483
3174 	.dword	0x5cb0a9dcbd41fbd4, 0x76f988da831153b5
3175 	.dword	0x983e5152ee66dfab, 0xa831c66d2db43210
3176 	.dword	0xb00327c898fb213f, 0xbf597fc7beef0ee4
3177 	.dword	0xc6e00bf33da88fc2, 0xd5a79147930aa725
3178 	.dword	0x06ca6351e003826f, 0x142929670a0e6e70
3179 	.dword	0x27b70a8546d22ffc, 0x2e1b21385c26c926
3180 	.dword	0x4d2c6dfc5ac42aed, 0x53380d139d95b3df
3181 	.dword	0x650a73548baf63de, 0x766a0abb3c77b2a8
3182 	.dword	0x81c2c92e47edaee6, 0x92722c851482353b
3183 	.dword	0xa2bfe8a14cf10364, 0xa81a664bbc423001
3184 	.dword	0xc24b8b70d0f89791, 0xc76c51a30654be30
3185 	.dword	0xd192e819d6ef5218, 0xd69906245565a910
3186 	.dword	0xf40e35855771202a, 0x106aa07032bbd1b8
3187 	.dword	0x19a4c116b8d2d0c8, 0x1e376c085141ab53
3188 	.dword	0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8
3189 	.dword	0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb
3190 	.dword	0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3
3191 	.dword	0x748f82ee5defb2fc, 0x78a5636f43172f60
3192 	.dword	0x84c87814a1f0ab72, 0x8cc702081a6439ec
3193 	.dword	0x90befffa23631e28, 0xa4506cebde82bde9
3194 	.dword	0xbef9a3f7b2c67915, 0xc67178f2e372532b
3195 	.dword	0xca273eceea26619c, 0xd186b8c721c0c207
3196 	.dword	0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178
3197 	.dword	0x06f067aa72176fba, 0x0a637dc5a2c898a6
3198 	.dword	0x113f9804bef90dae, 0x1b710b35131c471b
3199 	.dword	0x28db77f523047d84, 0x32caab7b40c72493
3200 	.dword	0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c
3201 	.dword	0x4cc5d4becb3e42b6, 0x597f299cfc657e2a
3202 	.dword	0x5fcb6fab3ad6faec, 0x6c44198c4a475817
3203 .asciiz	"SHA512 for MIPS, CRYPTOGAMS by <appro@openssl.org>"
3204 .align	5
3205 
3206