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