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