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