• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
12sha256_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
3018K256:
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