xref: /netbsd-src/crypto/external/bsd/openssl/lib/libcrypto/arch/mips/sha512-mips.S (revision e0ea3921ea68e51b93ffc215f08ae1647c8e1796)
1*e0ea3921Schristos#include "mips_arch.h"
276c4f342Schristos
376c4f342Schristos.text
476c4f342Schristos.set	noat
576c4f342Schristos#if !defined(__mips_eabi) && (!defined(__vxworks) || defined(__pic__))
676c4f342Schristos.option	pic2
776c4f342Schristos#endif
876c4f342Schristos
976c4f342Schristos.align	5
1076c4f342Schristos.globl	sha256_block_data_order
1176c4f342Schristos.ent	sha256_block_data_order
1276c4f342Schristossha256_block_data_order:
1376c4f342Schristos	.frame	$29,128,$31
1476c4f342Schristos	.mask	0xc0ff0000,-4
1576c4f342Schristos	.set	noreorder
166410c867Schristos	.cpload	$25
17*e0ea3921Schristos	subu $29,128
1876c4f342Schristos	sw	$31,128-1*4($29)
1976c4f342Schristos	sw	$30,128-2*4($29)
2076c4f342Schristos	sw	$23,128-3*4($29)
2176c4f342Schristos	sw	$22,128-4*4($29)
2276c4f342Schristos	sw	$21,128-5*4($29)
2376c4f342Schristos	sw	$20,128-6*4($29)
2476c4f342Schristos	sw	$19,128-7*4($29)
2576c4f342Schristos	sw	$18,128-8*4($29)
2676c4f342Schristos	sw	$17,128-9*4($29)
2776c4f342Schristos	sw	$16,128-10*4($29)
2876c4f342Schristos	sll $23,$6,6
2976c4f342Schristos	.set	reorder
3076c4f342Schristos	la	$6,K256		# PIC-ified 'load address'
3176c4f342Schristos
3276c4f342Schristos	lw	$1,0*4($4)		# load context
3376c4f342Schristos	lw	$2,1*4($4)
3476c4f342Schristos	lw	$3,2*4($4)
3576c4f342Schristos	lw	$7,3*4($4)
3676c4f342Schristos	lw	$24,4*4($4)
3776c4f342Schristos	lw	$25,5*4($4)
3876c4f342Schristos	lw	$30,6*4($4)
3976c4f342Schristos	lw	$31,7*4($4)
4076c4f342Schristos
41*e0ea3921Schristos	addu $23,$5		# pointer to the end of input
4276c4f342Schristos	sw	$23,16*4($29)
4376c4f342Schristos	b	.Loop
4476c4f342Schristos
4576c4f342Schristos.align	5
4676c4f342Schristos.Loop:
47*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
48*e0ea3921Schristos	lw	$8,($5)
49*e0ea3921Schristos#else
5076c4f342Schristos	lwl	$8,3($5)
5176c4f342Schristos	lwr	$8,0($5)
52*e0ea3921Schristos#endif
53*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
54*e0ea3921Schristos	lw	$9,4($5)
55*e0ea3921Schristos#else
5676c4f342Schristos	lwl	$9,7($5)
5776c4f342Schristos	lwr	$9,4($5)
58*e0ea3921Schristos#endif
5976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
6076c4f342Schristos	wsbh	$8,$8		# byte swap(0)
6176c4f342Schristos	rotr	$8,$8,16
6276c4f342Schristos#else
6376c4f342Schristos	srl	$13,$8,24		# byte swap(0)
6476c4f342Schristos	srl	$14,$8,8
6576c4f342Schristos	andi	$15,$8,0xFF00
6676c4f342Schristos	sll	$8,$8,24
6776c4f342Schristos	andi	$14,0xFF00
6876c4f342Schristos	sll	$15,$15,8
6976c4f342Schristos	or	$8,$13
7076c4f342Schristos	or	$14,$15
7176c4f342Schristos	or	$8,$14
7276c4f342Schristos#endif
7376c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
7476c4f342Schristos	xor	$15,$25,$30			# 0
7576c4f342Schristos	rotr	$13,$24,6
7676c4f342Schristos	addu	$12,$8,$31
7776c4f342Schristos	rotr	$14,$24,11
7876c4f342Schristos	and	$15,$24
7976c4f342Schristos	rotr	$31,$24,25
8076c4f342Schristos	xor	$13,$14
8176c4f342Schristos	rotr	$14,$1,2
8276c4f342Schristos	xor	$15,$30			# Ch(e,f,g)
8376c4f342Schristos	xor	$13,$31			# Sigma1(e)
8476c4f342Schristos
8576c4f342Schristos	rotr	$31,$1,13
8676c4f342Schristos	addu	$12,$15
8776c4f342Schristos	lw	$15,0($6)		# K[0]
8876c4f342Schristos	xor	$31,$14
8976c4f342Schristos	rotr	$14,$1,22
9076c4f342Schristos	addu	$12,$13
9176c4f342Schristos	and	$13,$2,$3
9276c4f342Schristos	xor	$31,$14			# Sigma0(a)
9376c4f342Schristos	xor	$14,$2,$3
9476c4f342Schristos#else
9576c4f342Schristos	addu	$12,$8,$31			# 0
9676c4f342Schristos	srl	$31,$24,6
9776c4f342Schristos	xor	$15,$25,$30
9876c4f342Schristos	sll	$14,$24,7
9976c4f342Schristos	and	$15,$24
10076c4f342Schristos	srl	$13,$24,11
10176c4f342Schristos	xor	$31,$14
10276c4f342Schristos	sll	$14,$24,21
10376c4f342Schristos	xor	$31,$13
10476c4f342Schristos	srl	$13,$24,25
10576c4f342Schristos	xor	$31,$14
10676c4f342Schristos	sll	$14,$24,26
10776c4f342Schristos	xor	$31,$13
10876c4f342Schristos	xor	$15,$30			# Ch(e,f,g)
10976c4f342Schristos	xor	$13,$14,$31			# Sigma1(e)
11076c4f342Schristos
11176c4f342Schristos	srl	$31,$1,2
11276c4f342Schristos	addu	$12,$15
11376c4f342Schristos	lw	$15,0($6)		# K[0]
11476c4f342Schristos	sll	$14,$1,10
11576c4f342Schristos	addu	$12,$13
11676c4f342Schristos	srl	$13,$1,13
11776c4f342Schristos	xor	$31,$14
11876c4f342Schristos	sll	$14,$1,19
11976c4f342Schristos	xor	$31,$13
12076c4f342Schristos	srl	$13,$1,22
12176c4f342Schristos	xor	$31,$14
12276c4f342Schristos	sll	$14,$1,30
12376c4f342Schristos	xor	$31,$13
12476c4f342Schristos	and	$13,$2,$3
12576c4f342Schristos	xor	$31,$14			# Sigma0(a)
12676c4f342Schristos	xor	$14,$2,$3
12776c4f342Schristos#endif
12876c4f342Schristos	sw	$8,0($29)	# offload to ring buffer
12976c4f342Schristos	addu	$31,$13
13076c4f342Schristos	and	$14,$1
13176c4f342Schristos	addu	$12,$15			# +=K[0]
13276c4f342Schristos	addu	$31,$14			# +=Maj(a,b,c)
13376c4f342Schristos	addu	$7,$12
13476c4f342Schristos	addu	$31,$12
135*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
136*e0ea3921Schristos	lw	$10,8($5)
137*e0ea3921Schristos#else
13876c4f342Schristos	lwl	$10,11($5)
13976c4f342Schristos	lwr	$10,8($5)
140*e0ea3921Schristos#endif
14176c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
14276c4f342Schristos	wsbh	$9,$9		# byte swap(1)
14376c4f342Schristos	rotr	$9,$9,16
14476c4f342Schristos#else
14576c4f342Schristos	srl	$14,$9,24		# byte swap(1)
14676c4f342Schristos	srl	$15,$9,8
14776c4f342Schristos	andi	$16,$9,0xFF00
14876c4f342Schristos	sll	$9,$9,24
14976c4f342Schristos	andi	$15,0xFF00
15076c4f342Schristos	sll	$16,$16,8
15176c4f342Schristos	or	$9,$14
15276c4f342Schristos	or	$15,$16
15376c4f342Schristos	or	$9,$15
15476c4f342Schristos#endif
15576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
15676c4f342Schristos	xor	$16,$24,$25			# 1
15776c4f342Schristos	rotr	$14,$7,6
15876c4f342Schristos	addu	$13,$9,$30
15976c4f342Schristos	rotr	$15,$7,11
16076c4f342Schristos	and	$16,$7
16176c4f342Schristos	rotr	$30,$7,25
16276c4f342Schristos	xor	$14,$15
16376c4f342Schristos	rotr	$15,$31,2
16476c4f342Schristos	xor	$16,$25			# Ch(e,f,g)
16576c4f342Schristos	xor	$14,$30			# Sigma1(e)
16676c4f342Schristos
16776c4f342Schristos	rotr	$30,$31,13
16876c4f342Schristos	addu	$13,$16
16976c4f342Schristos	lw	$16,4($6)		# K[1]
17076c4f342Schristos	xor	$30,$15
17176c4f342Schristos	rotr	$15,$31,22
17276c4f342Schristos	addu	$13,$14
17376c4f342Schristos	and	$14,$1,$2
17476c4f342Schristos	xor	$30,$15			# Sigma0(a)
17576c4f342Schristos	xor	$15,$1,$2
17676c4f342Schristos#else
17776c4f342Schristos	addu	$13,$9,$30			# 1
17876c4f342Schristos	srl	$30,$7,6
17976c4f342Schristos	xor	$16,$24,$25
18076c4f342Schristos	sll	$15,$7,7
18176c4f342Schristos	and	$16,$7
18276c4f342Schristos	srl	$14,$7,11
18376c4f342Schristos	xor	$30,$15
18476c4f342Schristos	sll	$15,$7,21
18576c4f342Schristos	xor	$30,$14
18676c4f342Schristos	srl	$14,$7,25
18776c4f342Schristos	xor	$30,$15
18876c4f342Schristos	sll	$15,$7,26
18976c4f342Schristos	xor	$30,$14
19076c4f342Schristos	xor	$16,$25			# Ch(e,f,g)
19176c4f342Schristos	xor	$14,$15,$30			# Sigma1(e)
19276c4f342Schristos
19376c4f342Schristos	srl	$30,$31,2
19476c4f342Schristos	addu	$13,$16
19576c4f342Schristos	lw	$16,4($6)		# K[1]
19676c4f342Schristos	sll	$15,$31,10
19776c4f342Schristos	addu	$13,$14
19876c4f342Schristos	srl	$14,$31,13
19976c4f342Schristos	xor	$30,$15
20076c4f342Schristos	sll	$15,$31,19
20176c4f342Schristos	xor	$30,$14
20276c4f342Schristos	srl	$14,$31,22
20376c4f342Schristos	xor	$30,$15
20476c4f342Schristos	sll	$15,$31,30
20576c4f342Schristos	xor	$30,$14
20676c4f342Schristos	and	$14,$1,$2
20776c4f342Schristos	xor	$30,$15			# Sigma0(a)
20876c4f342Schristos	xor	$15,$1,$2
20976c4f342Schristos#endif
21076c4f342Schristos	sw	$9,4($29)	# offload to ring buffer
21176c4f342Schristos	addu	$30,$14
21276c4f342Schristos	and	$15,$31
21376c4f342Schristos	addu	$13,$16			# +=K[1]
21476c4f342Schristos	addu	$30,$15			# +=Maj(a,b,c)
21576c4f342Schristos	addu	$3,$13
21676c4f342Schristos	addu	$30,$13
217*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
218*e0ea3921Schristos	lw	$11,12($5)
219*e0ea3921Schristos#else
22076c4f342Schristos	lwl	$11,15($5)
22176c4f342Schristos	lwr	$11,12($5)
222*e0ea3921Schristos#endif
22376c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
22476c4f342Schristos	wsbh	$10,$10		# byte swap(2)
22576c4f342Schristos	rotr	$10,$10,16
22676c4f342Schristos#else
22776c4f342Schristos	srl	$15,$10,24		# byte swap(2)
22876c4f342Schristos	srl	$16,$10,8
22976c4f342Schristos	andi	$17,$10,0xFF00
23076c4f342Schristos	sll	$10,$10,24
23176c4f342Schristos	andi	$16,0xFF00
23276c4f342Schristos	sll	$17,$17,8
23376c4f342Schristos	or	$10,$15
23476c4f342Schristos	or	$16,$17
23576c4f342Schristos	or	$10,$16
23676c4f342Schristos#endif
23776c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
23876c4f342Schristos	xor	$17,$7,$24			# 2
23976c4f342Schristos	rotr	$15,$3,6
24076c4f342Schristos	addu	$14,$10,$25
24176c4f342Schristos	rotr	$16,$3,11
24276c4f342Schristos	and	$17,$3
24376c4f342Schristos	rotr	$25,$3,25
24476c4f342Schristos	xor	$15,$16
24576c4f342Schristos	rotr	$16,$30,2
24676c4f342Schristos	xor	$17,$24			# Ch(e,f,g)
24776c4f342Schristos	xor	$15,$25			# Sigma1(e)
24876c4f342Schristos
24976c4f342Schristos	rotr	$25,$30,13
25076c4f342Schristos	addu	$14,$17
25176c4f342Schristos	lw	$17,8($6)		# K[2]
25276c4f342Schristos	xor	$25,$16
25376c4f342Schristos	rotr	$16,$30,22
25476c4f342Schristos	addu	$14,$15
25576c4f342Schristos	and	$15,$31,$1
25676c4f342Schristos	xor	$25,$16			# Sigma0(a)
25776c4f342Schristos	xor	$16,$31,$1
25876c4f342Schristos#else
25976c4f342Schristos	addu	$14,$10,$25			# 2
26076c4f342Schristos	srl	$25,$3,6
26176c4f342Schristos	xor	$17,$7,$24
26276c4f342Schristos	sll	$16,$3,7
26376c4f342Schristos	and	$17,$3
26476c4f342Schristos	srl	$15,$3,11
26576c4f342Schristos	xor	$25,$16
26676c4f342Schristos	sll	$16,$3,21
26776c4f342Schristos	xor	$25,$15
26876c4f342Schristos	srl	$15,$3,25
26976c4f342Schristos	xor	$25,$16
27076c4f342Schristos	sll	$16,$3,26
27176c4f342Schristos	xor	$25,$15
27276c4f342Schristos	xor	$17,$24			# Ch(e,f,g)
27376c4f342Schristos	xor	$15,$16,$25			# Sigma1(e)
27476c4f342Schristos
27576c4f342Schristos	srl	$25,$30,2
27676c4f342Schristos	addu	$14,$17
27776c4f342Schristos	lw	$17,8($6)		# K[2]
27876c4f342Schristos	sll	$16,$30,10
27976c4f342Schristos	addu	$14,$15
28076c4f342Schristos	srl	$15,$30,13
28176c4f342Schristos	xor	$25,$16
28276c4f342Schristos	sll	$16,$30,19
28376c4f342Schristos	xor	$25,$15
28476c4f342Schristos	srl	$15,$30,22
28576c4f342Schristos	xor	$25,$16
28676c4f342Schristos	sll	$16,$30,30
28776c4f342Schristos	xor	$25,$15
28876c4f342Schristos	and	$15,$31,$1
28976c4f342Schristos	xor	$25,$16			# Sigma0(a)
29076c4f342Schristos	xor	$16,$31,$1
29176c4f342Schristos#endif
29276c4f342Schristos	sw	$10,8($29)	# offload to ring buffer
29376c4f342Schristos	addu	$25,$15
29476c4f342Schristos	and	$16,$30
29576c4f342Schristos	addu	$14,$17			# +=K[2]
29676c4f342Schristos	addu	$25,$16			# +=Maj(a,b,c)
29776c4f342Schristos	addu	$2,$14
29876c4f342Schristos	addu	$25,$14
299*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
300*e0ea3921Schristos	lw	$12,16($5)
301*e0ea3921Schristos#else
30276c4f342Schristos	lwl	$12,19($5)
30376c4f342Schristos	lwr	$12,16($5)
304*e0ea3921Schristos#endif
30576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
30676c4f342Schristos	wsbh	$11,$11		# byte swap(3)
30776c4f342Schristos	rotr	$11,$11,16
30876c4f342Schristos#else
30976c4f342Schristos	srl	$16,$11,24		# byte swap(3)
31076c4f342Schristos	srl	$17,$11,8
31176c4f342Schristos	andi	$18,$11,0xFF00
31276c4f342Schristos	sll	$11,$11,24
31376c4f342Schristos	andi	$17,0xFF00
31476c4f342Schristos	sll	$18,$18,8
31576c4f342Schristos	or	$11,$16
31676c4f342Schristos	or	$17,$18
31776c4f342Schristos	or	$11,$17
31876c4f342Schristos#endif
31976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
32076c4f342Schristos	xor	$18,$3,$7			# 3
32176c4f342Schristos	rotr	$16,$2,6
32276c4f342Schristos	addu	$15,$11,$24
32376c4f342Schristos	rotr	$17,$2,11
32476c4f342Schristos	and	$18,$2
32576c4f342Schristos	rotr	$24,$2,25
32676c4f342Schristos	xor	$16,$17
32776c4f342Schristos	rotr	$17,$25,2
32876c4f342Schristos	xor	$18,$7			# Ch(e,f,g)
32976c4f342Schristos	xor	$16,$24			# Sigma1(e)
33076c4f342Schristos
33176c4f342Schristos	rotr	$24,$25,13
33276c4f342Schristos	addu	$15,$18
33376c4f342Schristos	lw	$18,12($6)		# K[3]
33476c4f342Schristos	xor	$24,$17
33576c4f342Schristos	rotr	$17,$25,22
33676c4f342Schristos	addu	$15,$16
33776c4f342Schristos	and	$16,$30,$31
33876c4f342Schristos	xor	$24,$17			# Sigma0(a)
33976c4f342Schristos	xor	$17,$30,$31
34076c4f342Schristos#else
34176c4f342Schristos	addu	$15,$11,$24			# 3
34276c4f342Schristos	srl	$24,$2,6
34376c4f342Schristos	xor	$18,$3,$7
34476c4f342Schristos	sll	$17,$2,7
34576c4f342Schristos	and	$18,$2
34676c4f342Schristos	srl	$16,$2,11
34776c4f342Schristos	xor	$24,$17
34876c4f342Schristos	sll	$17,$2,21
34976c4f342Schristos	xor	$24,$16
35076c4f342Schristos	srl	$16,$2,25
35176c4f342Schristos	xor	$24,$17
35276c4f342Schristos	sll	$17,$2,26
35376c4f342Schristos	xor	$24,$16
35476c4f342Schristos	xor	$18,$7			# Ch(e,f,g)
35576c4f342Schristos	xor	$16,$17,$24			# Sigma1(e)
35676c4f342Schristos
35776c4f342Schristos	srl	$24,$25,2
35876c4f342Schristos	addu	$15,$18
35976c4f342Schristos	lw	$18,12($6)		# K[3]
36076c4f342Schristos	sll	$17,$25,10
36176c4f342Schristos	addu	$15,$16
36276c4f342Schristos	srl	$16,$25,13
36376c4f342Schristos	xor	$24,$17
36476c4f342Schristos	sll	$17,$25,19
36576c4f342Schristos	xor	$24,$16
36676c4f342Schristos	srl	$16,$25,22
36776c4f342Schristos	xor	$24,$17
36876c4f342Schristos	sll	$17,$25,30
36976c4f342Schristos	xor	$24,$16
37076c4f342Schristos	and	$16,$30,$31
37176c4f342Schristos	xor	$24,$17			# Sigma0(a)
37276c4f342Schristos	xor	$17,$30,$31
37376c4f342Schristos#endif
37476c4f342Schristos	sw	$11,12($29)	# offload to ring buffer
37576c4f342Schristos	addu	$24,$16
37676c4f342Schristos	and	$17,$25
37776c4f342Schristos	addu	$15,$18			# +=K[3]
37876c4f342Schristos	addu	$24,$17			# +=Maj(a,b,c)
37976c4f342Schristos	addu	$1,$15
38076c4f342Schristos	addu	$24,$15
381*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
382*e0ea3921Schristos	lw	$13,20($5)
383*e0ea3921Schristos#else
38476c4f342Schristos	lwl	$13,23($5)
38576c4f342Schristos	lwr	$13,20($5)
386*e0ea3921Schristos#endif
38776c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
38876c4f342Schristos	wsbh	$12,$12		# byte swap(4)
38976c4f342Schristos	rotr	$12,$12,16
39076c4f342Schristos#else
39176c4f342Schristos	srl	$17,$12,24		# byte swap(4)
39276c4f342Schristos	srl	$18,$12,8
39376c4f342Schristos	andi	$19,$12,0xFF00
39476c4f342Schristos	sll	$12,$12,24
39576c4f342Schristos	andi	$18,0xFF00
39676c4f342Schristos	sll	$19,$19,8
39776c4f342Schristos	or	$12,$17
39876c4f342Schristos	or	$18,$19
39976c4f342Schristos	or	$12,$18
40076c4f342Schristos#endif
40176c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
40276c4f342Schristos	xor	$19,$2,$3			# 4
40376c4f342Schristos	rotr	$17,$1,6
40476c4f342Schristos	addu	$16,$12,$7
40576c4f342Schristos	rotr	$18,$1,11
40676c4f342Schristos	and	$19,$1
40776c4f342Schristos	rotr	$7,$1,25
40876c4f342Schristos	xor	$17,$18
40976c4f342Schristos	rotr	$18,$24,2
41076c4f342Schristos	xor	$19,$3			# Ch(e,f,g)
41176c4f342Schristos	xor	$17,$7			# Sigma1(e)
41276c4f342Schristos
41376c4f342Schristos	rotr	$7,$24,13
41476c4f342Schristos	addu	$16,$19
41576c4f342Schristos	lw	$19,16($6)		# K[4]
41676c4f342Schristos	xor	$7,$18
41776c4f342Schristos	rotr	$18,$24,22
41876c4f342Schristos	addu	$16,$17
41976c4f342Schristos	and	$17,$25,$30
42076c4f342Schristos	xor	$7,$18			# Sigma0(a)
42176c4f342Schristos	xor	$18,$25,$30
42276c4f342Schristos#else
42376c4f342Schristos	addu	$16,$12,$7			# 4
42476c4f342Schristos	srl	$7,$1,6
42576c4f342Schristos	xor	$19,$2,$3
42676c4f342Schristos	sll	$18,$1,7
42776c4f342Schristos	and	$19,$1
42876c4f342Schristos	srl	$17,$1,11
42976c4f342Schristos	xor	$7,$18
43076c4f342Schristos	sll	$18,$1,21
43176c4f342Schristos	xor	$7,$17
43276c4f342Schristos	srl	$17,$1,25
43376c4f342Schristos	xor	$7,$18
43476c4f342Schristos	sll	$18,$1,26
43576c4f342Schristos	xor	$7,$17
43676c4f342Schristos	xor	$19,$3			# Ch(e,f,g)
43776c4f342Schristos	xor	$17,$18,$7			# Sigma1(e)
43876c4f342Schristos
43976c4f342Schristos	srl	$7,$24,2
44076c4f342Schristos	addu	$16,$19
44176c4f342Schristos	lw	$19,16($6)		# K[4]
44276c4f342Schristos	sll	$18,$24,10
44376c4f342Schristos	addu	$16,$17
44476c4f342Schristos	srl	$17,$24,13
44576c4f342Schristos	xor	$7,$18
44676c4f342Schristos	sll	$18,$24,19
44776c4f342Schristos	xor	$7,$17
44876c4f342Schristos	srl	$17,$24,22
44976c4f342Schristos	xor	$7,$18
45076c4f342Schristos	sll	$18,$24,30
45176c4f342Schristos	xor	$7,$17
45276c4f342Schristos	and	$17,$25,$30
45376c4f342Schristos	xor	$7,$18			# Sigma0(a)
45476c4f342Schristos	xor	$18,$25,$30
45576c4f342Schristos#endif
45676c4f342Schristos	sw	$12,16($29)	# offload to ring buffer
45776c4f342Schristos	addu	$7,$17
45876c4f342Schristos	and	$18,$24
45976c4f342Schristos	addu	$16,$19			# +=K[4]
46076c4f342Schristos	addu	$7,$18			# +=Maj(a,b,c)
46176c4f342Schristos	addu	$31,$16
46276c4f342Schristos	addu	$7,$16
463*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
464*e0ea3921Schristos	lw	$14,24($5)
465*e0ea3921Schristos#else
46676c4f342Schristos	lwl	$14,27($5)
46776c4f342Schristos	lwr	$14,24($5)
468*e0ea3921Schristos#endif
46976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
47076c4f342Schristos	wsbh	$13,$13		# byte swap(5)
47176c4f342Schristos	rotr	$13,$13,16
47276c4f342Schristos#else
47376c4f342Schristos	srl	$18,$13,24		# byte swap(5)
47476c4f342Schristos	srl	$19,$13,8
47576c4f342Schristos	andi	$20,$13,0xFF00
47676c4f342Schristos	sll	$13,$13,24
47776c4f342Schristos	andi	$19,0xFF00
47876c4f342Schristos	sll	$20,$20,8
47976c4f342Schristos	or	$13,$18
48076c4f342Schristos	or	$19,$20
48176c4f342Schristos	or	$13,$19
48276c4f342Schristos#endif
48376c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
48476c4f342Schristos	xor	$20,$1,$2			# 5
48576c4f342Schristos	rotr	$18,$31,6
48676c4f342Schristos	addu	$17,$13,$3
48776c4f342Schristos	rotr	$19,$31,11
48876c4f342Schristos	and	$20,$31
48976c4f342Schristos	rotr	$3,$31,25
49076c4f342Schristos	xor	$18,$19
49176c4f342Schristos	rotr	$19,$7,2
49276c4f342Schristos	xor	$20,$2			# Ch(e,f,g)
49376c4f342Schristos	xor	$18,$3			# Sigma1(e)
49476c4f342Schristos
49576c4f342Schristos	rotr	$3,$7,13
49676c4f342Schristos	addu	$17,$20
49776c4f342Schristos	lw	$20,20($6)		# K[5]
49876c4f342Schristos	xor	$3,$19
49976c4f342Schristos	rotr	$19,$7,22
50076c4f342Schristos	addu	$17,$18
50176c4f342Schristos	and	$18,$24,$25
50276c4f342Schristos	xor	$3,$19			# Sigma0(a)
50376c4f342Schristos	xor	$19,$24,$25
50476c4f342Schristos#else
50576c4f342Schristos	addu	$17,$13,$3			# 5
50676c4f342Schristos	srl	$3,$31,6
50776c4f342Schristos	xor	$20,$1,$2
50876c4f342Schristos	sll	$19,$31,7
50976c4f342Schristos	and	$20,$31
51076c4f342Schristos	srl	$18,$31,11
51176c4f342Schristos	xor	$3,$19
51276c4f342Schristos	sll	$19,$31,21
51376c4f342Schristos	xor	$3,$18
51476c4f342Schristos	srl	$18,$31,25
51576c4f342Schristos	xor	$3,$19
51676c4f342Schristos	sll	$19,$31,26
51776c4f342Schristos	xor	$3,$18
51876c4f342Schristos	xor	$20,$2			# Ch(e,f,g)
51976c4f342Schristos	xor	$18,$19,$3			# Sigma1(e)
52076c4f342Schristos
52176c4f342Schristos	srl	$3,$7,2
52276c4f342Schristos	addu	$17,$20
52376c4f342Schristos	lw	$20,20($6)		# K[5]
52476c4f342Schristos	sll	$19,$7,10
52576c4f342Schristos	addu	$17,$18
52676c4f342Schristos	srl	$18,$7,13
52776c4f342Schristos	xor	$3,$19
52876c4f342Schristos	sll	$19,$7,19
52976c4f342Schristos	xor	$3,$18
53076c4f342Schristos	srl	$18,$7,22
53176c4f342Schristos	xor	$3,$19
53276c4f342Schristos	sll	$19,$7,30
53376c4f342Schristos	xor	$3,$18
53476c4f342Schristos	and	$18,$24,$25
53576c4f342Schristos	xor	$3,$19			# Sigma0(a)
53676c4f342Schristos	xor	$19,$24,$25
53776c4f342Schristos#endif
53876c4f342Schristos	sw	$13,20($29)	# offload to ring buffer
53976c4f342Schristos	addu	$3,$18
54076c4f342Schristos	and	$19,$7
54176c4f342Schristos	addu	$17,$20			# +=K[5]
54276c4f342Schristos	addu	$3,$19			# +=Maj(a,b,c)
54376c4f342Schristos	addu	$30,$17
54476c4f342Schristos	addu	$3,$17
545*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
546*e0ea3921Schristos	lw	$15,28($5)
547*e0ea3921Schristos#else
54876c4f342Schristos	lwl	$15,31($5)
54976c4f342Schristos	lwr	$15,28($5)
550*e0ea3921Schristos#endif
55176c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
55276c4f342Schristos	wsbh	$14,$14		# byte swap(6)
55376c4f342Schristos	rotr	$14,$14,16
55476c4f342Schristos#else
55576c4f342Schristos	srl	$19,$14,24		# byte swap(6)
55676c4f342Schristos	srl	$20,$14,8
55776c4f342Schristos	andi	$21,$14,0xFF00
55876c4f342Schristos	sll	$14,$14,24
55976c4f342Schristos	andi	$20,0xFF00
56076c4f342Schristos	sll	$21,$21,8
56176c4f342Schristos	or	$14,$19
56276c4f342Schristos	or	$20,$21
56376c4f342Schristos	or	$14,$20
56476c4f342Schristos#endif
56576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
56676c4f342Schristos	xor	$21,$31,$1			# 6
56776c4f342Schristos	rotr	$19,$30,6
56876c4f342Schristos	addu	$18,$14,$2
56976c4f342Schristos	rotr	$20,$30,11
57076c4f342Schristos	and	$21,$30
57176c4f342Schristos	rotr	$2,$30,25
57276c4f342Schristos	xor	$19,$20
57376c4f342Schristos	rotr	$20,$3,2
57476c4f342Schristos	xor	$21,$1			# Ch(e,f,g)
57576c4f342Schristos	xor	$19,$2			# Sigma1(e)
57676c4f342Schristos
57776c4f342Schristos	rotr	$2,$3,13
57876c4f342Schristos	addu	$18,$21
57976c4f342Schristos	lw	$21,24($6)		# K[6]
58076c4f342Schristos	xor	$2,$20
58176c4f342Schristos	rotr	$20,$3,22
58276c4f342Schristos	addu	$18,$19
58376c4f342Schristos	and	$19,$7,$24
58476c4f342Schristos	xor	$2,$20			# Sigma0(a)
58576c4f342Schristos	xor	$20,$7,$24
58676c4f342Schristos#else
58776c4f342Schristos	addu	$18,$14,$2			# 6
58876c4f342Schristos	srl	$2,$30,6
58976c4f342Schristos	xor	$21,$31,$1
59076c4f342Schristos	sll	$20,$30,7
59176c4f342Schristos	and	$21,$30
59276c4f342Schristos	srl	$19,$30,11
59376c4f342Schristos	xor	$2,$20
59476c4f342Schristos	sll	$20,$30,21
59576c4f342Schristos	xor	$2,$19
59676c4f342Schristos	srl	$19,$30,25
59776c4f342Schristos	xor	$2,$20
59876c4f342Schristos	sll	$20,$30,26
59976c4f342Schristos	xor	$2,$19
60076c4f342Schristos	xor	$21,$1			# Ch(e,f,g)
60176c4f342Schristos	xor	$19,$20,$2			# Sigma1(e)
60276c4f342Schristos
60376c4f342Schristos	srl	$2,$3,2
60476c4f342Schristos	addu	$18,$21
60576c4f342Schristos	lw	$21,24($6)		# K[6]
60676c4f342Schristos	sll	$20,$3,10
60776c4f342Schristos	addu	$18,$19
60876c4f342Schristos	srl	$19,$3,13
60976c4f342Schristos	xor	$2,$20
61076c4f342Schristos	sll	$20,$3,19
61176c4f342Schristos	xor	$2,$19
61276c4f342Schristos	srl	$19,$3,22
61376c4f342Schristos	xor	$2,$20
61476c4f342Schristos	sll	$20,$3,30
61576c4f342Schristos	xor	$2,$19
61676c4f342Schristos	and	$19,$7,$24
61776c4f342Schristos	xor	$2,$20			# Sigma0(a)
61876c4f342Schristos	xor	$20,$7,$24
61976c4f342Schristos#endif
62076c4f342Schristos	sw	$14,24($29)	# offload to ring buffer
62176c4f342Schristos	addu	$2,$19
62276c4f342Schristos	and	$20,$3
62376c4f342Schristos	addu	$18,$21			# +=K[6]
62476c4f342Schristos	addu	$2,$20			# +=Maj(a,b,c)
62576c4f342Schristos	addu	$25,$18
62676c4f342Schristos	addu	$2,$18
627*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
628*e0ea3921Schristos	lw	$16,32($5)
629*e0ea3921Schristos#else
63076c4f342Schristos	lwl	$16,35($5)
63176c4f342Schristos	lwr	$16,32($5)
632*e0ea3921Schristos#endif
63376c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
63476c4f342Schristos	wsbh	$15,$15		# byte swap(7)
63576c4f342Schristos	rotr	$15,$15,16
63676c4f342Schristos#else
63776c4f342Schristos	srl	$20,$15,24		# byte swap(7)
63876c4f342Schristos	srl	$21,$15,8
63976c4f342Schristos	andi	$22,$15,0xFF00
64076c4f342Schristos	sll	$15,$15,24
64176c4f342Schristos	andi	$21,0xFF00
64276c4f342Schristos	sll	$22,$22,8
64376c4f342Schristos	or	$15,$20
64476c4f342Schristos	or	$21,$22
64576c4f342Schristos	or	$15,$21
64676c4f342Schristos#endif
64776c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
64876c4f342Schristos	xor	$22,$30,$31			# 7
64976c4f342Schristos	rotr	$20,$25,6
65076c4f342Schristos	addu	$19,$15,$1
65176c4f342Schristos	rotr	$21,$25,11
65276c4f342Schristos	and	$22,$25
65376c4f342Schristos	rotr	$1,$25,25
65476c4f342Schristos	xor	$20,$21
65576c4f342Schristos	rotr	$21,$2,2
65676c4f342Schristos	xor	$22,$31			# Ch(e,f,g)
65776c4f342Schristos	xor	$20,$1			# Sigma1(e)
65876c4f342Schristos
65976c4f342Schristos	rotr	$1,$2,13
66076c4f342Schristos	addu	$19,$22
66176c4f342Schristos	lw	$22,28($6)		# K[7]
66276c4f342Schristos	xor	$1,$21
66376c4f342Schristos	rotr	$21,$2,22
66476c4f342Schristos	addu	$19,$20
66576c4f342Schristos	and	$20,$3,$7
66676c4f342Schristos	xor	$1,$21			# Sigma0(a)
66776c4f342Schristos	xor	$21,$3,$7
66876c4f342Schristos#else
66976c4f342Schristos	addu	$19,$15,$1			# 7
67076c4f342Schristos	srl	$1,$25,6
67176c4f342Schristos	xor	$22,$30,$31
67276c4f342Schristos	sll	$21,$25,7
67376c4f342Schristos	and	$22,$25
67476c4f342Schristos	srl	$20,$25,11
67576c4f342Schristos	xor	$1,$21
67676c4f342Schristos	sll	$21,$25,21
67776c4f342Schristos	xor	$1,$20
67876c4f342Schristos	srl	$20,$25,25
67976c4f342Schristos	xor	$1,$21
68076c4f342Schristos	sll	$21,$25,26
68176c4f342Schristos	xor	$1,$20
68276c4f342Schristos	xor	$22,$31			# Ch(e,f,g)
68376c4f342Schristos	xor	$20,$21,$1			# Sigma1(e)
68476c4f342Schristos
68576c4f342Schristos	srl	$1,$2,2
68676c4f342Schristos	addu	$19,$22
68776c4f342Schristos	lw	$22,28($6)		# K[7]
68876c4f342Schristos	sll	$21,$2,10
68976c4f342Schristos	addu	$19,$20
69076c4f342Schristos	srl	$20,$2,13
69176c4f342Schristos	xor	$1,$21
69276c4f342Schristos	sll	$21,$2,19
69376c4f342Schristos	xor	$1,$20
69476c4f342Schristos	srl	$20,$2,22
69576c4f342Schristos	xor	$1,$21
69676c4f342Schristos	sll	$21,$2,30
69776c4f342Schristos	xor	$1,$20
69876c4f342Schristos	and	$20,$3,$7
69976c4f342Schristos	xor	$1,$21			# Sigma0(a)
70076c4f342Schristos	xor	$21,$3,$7
70176c4f342Schristos#endif
70276c4f342Schristos	sw	$15,28($29)	# offload to ring buffer
70376c4f342Schristos	addu	$1,$20
70476c4f342Schristos	and	$21,$2
70576c4f342Schristos	addu	$19,$22			# +=K[7]
70676c4f342Schristos	addu	$1,$21			# +=Maj(a,b,c)
70776c4f342Schristos	addu	$24,$19
70876c4f342Schristos	addu	$1,$19
709*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
710*e0ea3921Schristos	lw	$17,36($5)
711*e0ea3921Schristos#else
71276c4f342Schristos	lwl	$17,39($5)
71376c4f342Schristos	lwr	$17,36($5)
714*e0ea3921Schristos#endif
71576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
71676c4f342Schristos	wsbh	$16,$16		# byte swap(8)
71776c4f342Schristos	rotr	$16,$16,16
71876c4f342Schristos#else
71976c4f342Schristos	srl	$21,$16,24		# byte swap(8)
72076c4f342Schristos	srl	$22,$16,8
72176c4f342Schristos	andi	$23,$16,0xFF00
72276c4f342Schristos	sll	$16,$16,24
72376c4f342Schristos	andi	$22,0xFF00
72476c4f342Schristos	sll	$23,$23,8
72576c4f342Schristos	or	$16,$21
72676c4f342Schristos	or	$22,$23
72776c4f342Schristos	or	$16,$22
72876c4f342Schristos#endif
72976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
73076c4f342Schristos	xor	$23,$25,$30			# 8
73176c4f342Schristos	rotr	$21,$24,6
73276c4f342Schristos	addu	$20,$16,$31
73376c4f342Schristos	rotr	$22,$24,11
73476c4f342Schristos	and	$23,$24
73576c4f342Schristos	rotr	$31,$24,25
73676c4f342Schristos	xor	$21,$22
73776c4f342Schristos	rotr	$22,$1,2
73876c4f342Schristos	xor	$23,$30			# Ch(e,f,g)
73976c4f342Schristos	xor	$21,$31			# Sigma1(e)
74076c4f342Schristos
74176c4f342Schristos	rotr	$31,$1,13
74276c4f342Schristos	addu	$20,$23
74376c4f342Schristos	lw	$23,32($6)		# K[8]
74476c4f342Schristos	xor	$31,$22
74576c4f342Schristos	rotr	$22,$1,22
74676c4f342Schristos	addu	$20,$21
74776c4f342Schristos	and	$21,$2,$3
74876c4f342Schristos	xor	$31,$22			# Sigma0(a)
74976c4f342Schristos	xor	$22,$2,$3
75076c4f342Schristos#else
75176c4f342Schristos	addu	$20,$16,$31			# 8
75276c4f342Schristos	srl	$31,$24,6
75376c4f342Schristos	xor	$23,$25,$30
75476c4f342Schristos	sll	$22,$24,7
75576c4f342Schristos	and	$23,$24
75676c4f342Schristos	srl	$21,$24,11
75776c4f342Schristos	xor	$31,$22
75876c4f342Schristos	sll	$22,$24,21
75976c4f342Schristos	xor	$31,$21
76076c4f342Schristos	srl	$21,$24,25
76176c4f342Schristos	xor	$31,$22
76276c4f342Schristos	sll	$22,$24,26
76376c4f342Schristos	xor	$31,$21
76476c4f342Schristos	xor	$23,$30			# Ch(e,f,g)
76576c4f342Schristos	xor	$21,$22,$31			# Sigma1(e)
76676c4f342Schristos
76776c4f342Schristos	srl	$31,$1,2
76876c4f342Schristos	addu	$20,$23
76976c4f342Schristos	lw	$23,32($6)		# K[8]
77076c4f342Schristos	sll	$22,$1,10
77176c4f342Schristos	addu	$20,$21
77276c4f342Schristos	srl	$21,$1,13
77376c4f342Schristos	xor	$31,$22
77476c4f342Schristos	sll	$22,$1,19
77576c4f342Schristos	xor	$31,$21
77676c4f342Schristos	srl	$21,$1,22
77776c4f342Schristos	xor	$31,$22
77876c4f342Schristos	sll	$22,$1,30
77976c4f342Schristos	xor	$31,$21
78076c4f342Schristos	and	$21,$2,$3
78176c4f342Schristos	xor	$31,$22			# Sigma0(a)
78276c4f342Schristos	xor	$22,$2,$3
78376c4f342Schristos#endif
78476c4f342Schristos	sw	$16,32($29)	# offload to ring buffer
78576c4f342Schristos	addu	$31,$21
78676c4f342Schristos	and	$22,$1
78776c4f342Schristos	addu	$20,$23			# +=K[8]
78876c4f342Schristos	addu	$31,$22			# +=Maj(a,b,c)
78976c4f342Schristos	addu	$7,$20
79076c4f342Schristos	addu	$31,$20
791*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
792*e0ea3921Schristos	lw	$18,40($5)
793*e0ea3921Schristos#else
79476c4f342Schristos	lwl	$18,43($5)
79576c4f342Schristos	lwr	$18,40($5)
796*e0ea3921Schristos#endif
79776c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
79876c4f342Schristos	wsbh	$17,$17		# byte swap(9)
79976c4f342Schristos	rotr	$17,$17,16
80076c4f342Schristos#else
80176c4f342Schristos	srl	$22,$17,24		# byte swap(9)
80276c4f342Schristos	srl	$23,$17,8
80376c4f342Schristos	andi	$8,$17,0xFF00
80476c4f342Schristos	sll	$17,$17,24
80576c4f342Schristos	andi	$23,0xFF00
80676c4f342Schristos	sll	$8,$8,8
80776c4f342Schristos	or	$17,$22
80876c4f342Schristos	or	$23,$8
80976c4f342Schristos	or	$17,$23
81076c4f342Schristos#endif
81176c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
81276c4f342Schristos	xor	$8,$24,$25			# 9
81376c4f342Schristos	rotr	$22,$7,6
81476c4f342Schristos	addu	$21,$17,$30
81576c4f342Schristos	rotr	$23,$7,11
81676c4f342Schristos	and	$8,$7
81776c4f342Schristos	rotr	$30,$7,25
81876c4f342Schristos	xor	$22,$23
81976c4f342Schristos	rotr	$23,$31,2
82076c4f342Schristos	xor	$8,$25			# Ch(e,f,g)
82176c4f342Schristos	xor	$22,$30			# Sigma1(e)
82276c4f342Schristos
82376c4f342Schristos	rotr	$30,$31,13
82476c4f342Schristos	addu	$21,$8
82576c4f342Schristos	lw	$8,36($6)		# K[9]
82676c4f342Schristos	xor	$30,$23
82776c4f342Schristos	rotr	$23,$31,22
82876c4f342Schristos	addu	$21,$22
82976c4f342Schristos	and	$22,$1,$2
83076c4f342Schristos	xor	$30,$23			# Sigma0(a)
83176c4f342Schristos	xor	$23,$1,$2
83276c4f342Schristos#else
83376c4f342Schristos	addu	$21,$17,$30			# 9
83476c4f342Schristos	srl	$30,$7,6
83576c4f342Schristos	xor	$8,$24,$25
83676c4f342Schristos	sll	$23,$7,7
83776c4f342Schristos	and	$8,$7
83876c4f342Schristos	srl	$22,$7,11
83976c4f342Schristos	xor	$30,$23
84076c4f342Schristos	sll	$23,$7,21
84176c4f342Schristos	xor	$30,$22
84276c4f342Schristos	srl	$22,$7,25
84376c4f342Schristos	xor	$30,$23
84476c4f342Schristos	sll	$23,$7,26
84576c4f342Schristos	xor	$30,$22
84676c4f342Schristos	xor	$8,$25			# Ch(e,f,g)
84776c4f342Schristos	xor	$22,$23,$30			# Sigma1(e)
84876c4f342Schristos
84976c4f342Schristos	srl	$30,$31,2
85076c4f342Schristos	addu	$21,$8
85176c4f342Schristos	lw	$8,36($6)		# K[9]
85276c4f342Schristos	sll	$23,$31,10
85376c4f342Schristos	addu	$21,$22
85476c4f342Schristos	srl	$22,$31,13
85576c4f342Schristos	xor	$30,$23
85676c4f342Schristos	sll	$23,$31,19
85776c4f342Schristos	xor	$30,$22
85876c4f342Schristos	srl	$22,$31,22
85976c4f342Schristos	xor	$30,$23
86076c4f342Schristos	sll	$23,$31,30
86176c4f342Schristos	xor	$30,$22
86276c4f342Schristos	and	$22,$1,$2
86376c4f342Schristos	xor	$30,$23			# Sigma0(a)
86476c4f342Schristos	xor	$23,$1,$2
86576c4f342Schristos#endif
86676c4f342Schristos	sw	$17,36($29)	# offload to ring buffer
86776c4f342Schristos	addu	$30,$22
86876c4f342Schristos	and	$23,$31
86976c4f342Schristos	addu	$21,$8			# +=K[9]
87076c4f342Schristos	addu	$30,$23			# +=Maj(a,b,c)
87176c4f342Schristos	addu	$3,$21
87276c4f342Schristos	addu	$30,$21
873*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
874*e0ea3921Schristos	lw	$19,44($5)
875*e0ea3921Schristos#else
87676c4f342Schristos	lwl	$19,47($5)
87776c4f342Schristos	lwr	$19,44($5)
878*e0ea3921Schristos#endif
87976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
88076c4f342Schristos	wsbh	$18,$18		# byte swap(10)
88176c4f342Schristos	rotr	$18,$18,16
88276c4f342Schristos#else
88376c4f342Schristos	srl	$23,$18,24		# byte swap(10)
88476c4f342Schristos	srl	$8,$18,8
88576c4f342Schristos	andi	$9,$18,0xFF00
88676c4f342Schristos	sll	$18,$18,24
88776c4f342Schristos	andi	$8,0xFF00
88876c4f342Schristos	sll	$9,$9,8
88976c4f342Schristos	or	$18,$23
89076c4f342Schristos	or	$8,$9
89176c4f342Schristos	or	$18,$8
89276c4f342Schristos#endif
89376c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
89476c4f342Schristos	xor	$9,$7,$24			# 10
89576c4f342Schristos	rotr	$23,$3,6
89676c4f342Schristos	addu	$22,$18,$25
89776c4f342Schristos	rotr	$8,$3,11
89876c4f342Schristos	and	$9,$3
89976c4f342Schristos	rotr	$25,$3,25
90076c4f342Schristos	xor	$23,$8
90176c4f342Schristos	rotr	$8,$30,2
90276c4f342Schristos	xor	$9,$24			# Ch(e,f,g)
90376c4f342Schristos	xor	$23,$25			# Sigma1(e)
90476c4f342Schristos
90576c4f342Schristos	rotr	$25,$30,13
90676c4f342Schristos	addu	$22,$9
90776c4f342Schristos	lw	$9,40($6)		# K[10]
90876c4f342Schristos	xor	$25,$8
90976c4f342Schristos	rotr	$8,$30,22
91076c4f342Schristos	addu	$22,$23
91176c4f342Schristos	and	$23,$31,$1
91276c4f342Schristos	xor	$25,$8			# Sigma0(a)
91376c4f342Schristos	xor	$8,$31,$1
91476c4f342Schristos#else
91576c4f342Schristos	addu	$22,$18,$25			# 10
91676c4f342Schristos	srl	$25,$3,6
91776c4f342Schristos	xor	$9,$7,$24
91876c4f342Schristos	sll	$8,$3,7
91976c4f342Schristos	and	$9,$3
92076c4f342Schristos	srl	$23,$3,11
92176c4f342Schristos	xor	$25,$8
92276c4f342Schristos	sll	$8,$3,21
92376c4f342Schristos	xor	$25,$23
92476c4f342Schristos	srl	$23,$3,25
92576c4f342Schristos	xor	$25,$8
92676c4f342Schristos	sll	$8,$3,26
92776c4f342Schristos	xor	$25,$23
92876c4f342Schristos	xor	$9,$24			# Ch(e,f,g)
92976c4f342Schristos	xor	$23,$8,$25			# Sigma1(e)
93076c4f342Schristos
93176c4f342Schristos	srl	$25,$30,2
93276c4f342Schristos	addu	$22,$9
93376c4f342Schristos	lw	$9,40($6)		# K[10]
93476c4f342Schristos	sll	$8,$30,10
93576c4f342Schristos	addu	$22,$23
93676c4f342Schristos	srl	$23,$30,13
93776c4f342Schristos	xor	$25,$8
93876c4f342Schristos	sll	$8,$30,19
93976c4f342Schristos	xor	$25,$23
94076c4f342Schristos	srl	$23,$30,22
94176c4f342Schristos	xor	$25,$8
94276c4f342Schristos	sll	$8,$30,30
94376c4f342Schristos	xor	$25,$23
94476c4f342Schristos	and	$23,$31,$1
94576c4f342Schristos	xor	$25,$8			# Sigma0(a)
94676c4f342Schristos	xor	$8,$31,$1
94776c4f342Schristos#endif
94876c4f342Schristos	sw	$18,40($29)	# offload to ring buffer
94976c4f342Schristos	addu	$25,$23
95076c4f342Schristos	and	$8,$30
95176c4f342Schristos	addu	$22,$9			# +=K[10]
95276c4f342Schristos	addu	$25,$8			# +=Maj(a,b,c)
95376c4f342Schristos	addu	$2,$22
95476c4f342Schristos	addu	$25,$22
955*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
956*e0ea3921Schristos	lw	$20,48($5)
957*e0ea3921Schristos#else
95876c4f342Schristos	lwl	$20,51($5)
95976c4f342Schristos	lwr	$20,48($5)
960*e0ea3921Schristos#endif
96176c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
96276c4f342Schristos	wsbh	$19,$19		# byte swap(11)
96376c4f342Schristos	rotr	$19,$19,16
96476c4f342Schristos#else
96576c4f342Schristos	srl	$8,$19,24		# byte swap(11)
96676c4f342Schristos	srl	$9,$19,8
96776c4f342Schristos	andi	$10,$19,0xFF00
96876c4f342Schristos	sll	$19,$19,24
96976c4f342Schristos	andi	$9,0xFF00
97076c4f342Schristos	sll	$10,$10,8
97176c4f342Schristos	or	$19,$8
97276c4f342Schristos	or	$9,$10
97376c4f342Schristos	or	$19,$9
97476c4f342Schristos#endif
97576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
97676c4f342Schristos	xor	$10,$3,$7			# 11
97776c4f342Schristos	rotr	$8,$2,6
97876c4f342Schristos	addu	$23,$19,$24
97976c4f342Schristos	rotr	$9,$2,11
98076c4f342Schristos	and	$10,$2
98176c4f342Schristos	rotr	$24,$2,25
98276c4f342Schristos	xor	$8,$9
98376c4f342Schristos	rotr	$9,$25,2
98476c4f342Schristos	xor	$10,$7			# Ch(e,f,g)
98576c4f342Schristos	xor	$8,$24			# Sigma1(e)
98676c4f342Schristos
98776c4f342Schristos	rotr	$24,$25,13
98876c4f342Schristos	addu	$23,$10
98976c4f342Schristos	lw	$10,44($6)		# K[11]
99076c4f342Schristos	xor	$24,$9
99176c4f342Schristos	rotr	$9,$25,22
99276c4f342Schristos	addu	$23,$8
99376c4f342Schristos	and	$8,$30,$31
99476c4f342Schristos	xor	$24,$9			# Sigma0(a)
99576c4f342Schristos	xor	$9,$30,$31
99676c4f342Schristos#else
99776c4f342Schristos	addu	$23,$19,$24			# 11
99876c4f342Schristos	srl	$24,$2,6
99976c4f342Schristos	xor	$10,$3,$7
100076c4f342Schristos	sll	$9,$2,7
100176c4f342Schristos	and	$10,$2
100276c4f342Schristos	srl	$8,$2,11
100376c4f342Schristos	xor	$24,$9
100476c4f342Schristos	sll	$9,$2,21
100576c4f342Schristos	xor	$24,$8
100676c4f342Schristos	srl	$8,$2,25
100776c4f342Schristos	xor	$24,$9
100876c4f342Schristos	sll	$9,$2,26
100976c4f342Schristos	xor	$24,$8
101076c4f342Schristos	xor	$10,$7			# Ch(e,f,g)
101176c4f342Schristos	xor	$8,$9,$24			# Sigma1(e)
101276c4f342Schristos
101376c4f342Schristos	srl	$24,$25,2
101476c4f342Schristos	addu	$23,$10
101576c4f342Schristos	lw	$10,44($6)		# K[11]
101676c4f342Schristos	sll	$9,$25,10
101776c4f342Schristos	addu	$23,$8
101876c4f342Schristos	srl	$8,$25,13
101976c4f342Schristos	xor	$24,$9
102076c4f342Schristos	sll	$9,$25,19
102176c4f342Schristos	xor	$24,$8
102276c4f342Schristos	srl	$8,$25,22
102376c4f342Schristos	xor	$24,$9
102476c4f342Schristos	sll	$9,$25,30
102576c4f342Schristos	xor	$24,$8
102676c4f342Schristos	and	$8,$30,$31
102776c4f342Schristos	xor	$24,$9			# Sigma0(a)
102876c4f342Schristos	xor	$9,$30,$31
102976c4f342Schristos#endif
103076c4f342Schristos	sw	$19,44($29)	# offload to ring buffer
103176c4f342Schristos	addu	$24,$8
103276c4f342Schristos	and	$9,$25
103376c4f342Schristos	addu	$23,$10			# +=K[11]
103476c4f342Schristos	addu	$24,$9			# +=Maj(a,b,c)
103576c4f342Schristos	addu	$1,$23
103676c4f342Schristos	addu	$24,$23
1037*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1038*e0ea3921Schristos	lw	$21,52($5)
1039*e0ea3921Schristos#else
104076c4f342Schristos	lwl	$21,55($5)
104176c4f342Schristos	lwr	$21,52($5)
1042*e0ea3921Schristos#endif
104376c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
104476c4f342Schristos	wsbh	$20,$20		# byte swap(12)
104576c4f342Schristos	rotr	$20,$20,16
104676c4f342Schristos#else
104776c4f342Schristos	srl	$9,$20,24		# byte swap(12)
104876c4f342Schristos	srl	$10,$20,8
104976c4f342Schristos	andi	$11,$20,0xFF00
105076c4f342Schristos	sll	$20,$20,24
105176c4f342Schristos	andi	$10,0xFF00
105276c4f342Schristos	sll	$11,$11,8
105376c4f342Schristos	or	$20,$9
105476c4f342Schristos	or	$10,$11
105576c4f342Schristos	or	$20,$10
105676c4f342Schristos#endif
105776c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
105876c4f342Schristos	xor	$11,$2,$3			# 12
105976c4f342Schristos	rotr	$9,$1,6
106076c4f342Schristos	addu	$8,$20,$7
106176c4f342Schristos	rotr	$10,$1,11
106276c4f342Schristos	and	$11,$1
106376c4f342Schristos	rotr	$7,$1,25
106476c4f342Schristos	xor	$9,$10
106576c4f342Schristos	rotr	$10,$24,2
106676c4f342Schristos	xor	$11,$3			# Ch(e,f,g)
106776c4f342Schristos	xor	$9,$7			# Sigma1(e)
106876c4f342Schristos
106976c4f342Schristos	rotr	$7,$24,13
107076c4f342Schristos	addu	$8,$11
107176c4f342Schristos	lw	$11,48($6)		# K[12]
107276c4f342Schristos	xor	$7,$10
107376c4f342Schristos	rotr	$10,$24,22
107476c4f342Schristos	addu	$8,$9
107576c4f342Schristos	and	$9,$25,$30
107676c4f342Schristos	xor	$7,$10			# Sigma0(a)
107776c4f342Schristos	xor	$10,$25,$30
107876c4f342Schristos#else
107976c4f342Schristos	addu	$8,$20,$7			# 12
108076c4f342Schristos	srl	$7,$1,6
108176c4f342Schristos	xor	$11,$2,$3
108276c4f342Schristos	sll	$10,$1,7
108376c4f342Schristos	and	$11,$1
108476c4f342Schristos	srl	$9,$1,11
108576c4f342Schristos	xor	$7,$10
108676c4f342Schristos	sll	$10,$1,21
108776c4f342Schristos	xor	$7,$9
108876c4f342Schristos	srl	$9,$1,25
108976c4f342Schristos	xor	$7,$10
109076c4f342Schristos	sll	$10,$1,26
109176c4f342Schristos	xor	$7,$9
109276c4f342Schristos	xor	$11,$3			# Ch(e,f,g)
109376c4f342Schristos	xor	$9,$10,$7			# Sigma1(e)
109476c4f342Schristos
109576c4f342Schristos	srl	$7,$24,2
109676c4f342Schristos	addu	$8,$11
109776c4f342Schristos	lw	$11,48($6)		# K[12]
109876c4f342Schristos	sll	$10,$24,10
109976c4f342Schristos	addu	$8,$9
110076c4f342Schristos	srl	$9,$24,13
110176c4f342Schristos	xor	$7,$10
110276c4f342Schristos	sll	$10,$24,19
110376c4f342Schristos	xor	$7,$9
110476c4f342Schristos	srl	$9,$24,22
110576c4f342Schristos	xor	$7,$10
110676c4f342Schristos	sll	$10,$24,30
110776c4f342Schristos	xor	$7,$9
110876c4f342Schristos	and	$9,$25,$30
110976c4f342Schristos	xor	$7,$10			# Sigma0(a)
111076c4f342Schristos	xor	$10,$25,$30
111176c4f342Schristos#endif
111276c4f342Schristos	sw	$20,48($29)	# offload to ring buffer
111376c4f342Schristos	addu	$7,$9
111476c4f342Schristos	and	$10,$24
111576c4f342Schristos	addu	$8,$11			# +=K[12]
111676c4f342Schristos	addu	$7,$10			# +=Maj(a,b,c)
111776c4f342Schristos	addu	$31,$8
111876c4f342Schristos	addu	$7,$8
1119*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1120*e0ea3921Schristos	lw	$22,56($5)
1121*e0ea3921Schristos#else
112276c4f342Schristos	lwl	$22,59($5)
112376c4f342Schristos	lwr	$22,56($5)
1124*e0ea3921Schristos#endif
112576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
112676c4f342Schristos	wsbh	$21,$21		# byte swap(13)
112776c4f342Schristos	rotr	$21,$21,16
112876c4f342Schristos#else
112976c4f342Schristos	srl	$10,$21,24		# byte swap(13)
113076c4f342Schristos	srl	$11,$21,8
113176c4f342Schristos	andi	$12,$21,0xFF00
113276c4f342Schristos	sll	$21,$21,24
113376c4f342Schristos	andi	$11,0xFF00
113476c4f342Schristos	sll	$12,$12,8
113576c4f342Schristos	or	$21,$10
113676c4f342Schristos	or	$11,$12
113776c4f342Schristos	or	$21,$11
113876c4f342Schristos#endif
113976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
114076c4f342Schristos	xor	$12,$1,$2			# 13
114176c4f342Schristos	rotr	$10,$31,6
114276c4f342Schristos	addu	$9,$21,$3
114376c4f342Schristos	rotr	$11,$31,11
114476c4f342Schristos	and	$12,$31
114576c4f342Schristos	rotr	$3,$31,25
114676c4f342Schristos	xor	$10,$11
114776c4f342Schristos	rotr	$11,$7,2
114876c4f342Schristos	xor	$12,$2			# Ch(e,f,g)
114976c4f342Schristos	xor	$10,$3			# Sigma1(e)
115076c4f342Schristos
115176c4f342Schristos	rotr	$3,$7,13
115276c4f342Schristos	addu	$9,$12
115376c4f342Schristos	lw	$12,52($6)		# K[13]
115476c4f342Schristos	xor	$3,$11
115576c4f342Schristos	rotr	$11,$7,22
115676c4f342Schristos	addu	$9,$10
115776c4f342Schristos	and	$10,$24,$25
115876c4f342Schristos	xor	$3,$11			# Sigma0(a)
115976c4f342Schristos	xor	$11,$24,$25
116076c4f342Schristos#else
116176c4f342Schristos	addu	$9,$21,$3			# 13
116276c4f342Schristos	srl	$3,$31,6
116376c4f342Schristos	xor	$12,$1,$2
116476c4f342Schristos	sll	$11,$31,7
116576c4f342Schristos	and	$12,$31
116676c4f342Schristos	srl	$10,$31,11
116776c4f342Schristos	xor	$3,$11
116876c4f342Schristos	sll	$11,$31,21
116976c4f342Schristos	xor	$3,$10
117076c4f342Schristos	srl	$10,$31,25
117176c4f342Schristos	xor	$3,$11
117276c4f342Schristos	sll	$11,$31,26
117376c4f342Schristos	xor	$3,$10
117476c4f342Schristos	xor	$12,$2			# Ch(e,f,g)
117576c4f342Schristos	xor	$10,$11,$3			# Sigma1(e)
117676c4f342Schristos
117776c4f342Schristos	srl	$3,$7,2
117876c4f342Schristos	addu	$9,$12
117976c4f342Schristos	lw	$12,52($6)		# K[13]
118076c4f342Schristos	sll	$11,$7,10
118176c4f342Schristos	addu	$9,$10
118276c4f342Schristos	srl	$10,$7,13
118376c4f342Schristos	xor	$3,$11
118476c4f342Schristos	sll	$11,$7,19
118576c4f342Schristos	xor	$3,$10
118676c4f342Schristos	srl	$10,$7,22
118776c4f342Schristos	xor	$3,$11
118876c4f342Schristos	sll	$11,$7,30
118976c4f342Schristos	xor	$3,$10
119076c4f342Schristos	and	$10,$24,$25
119176c4f342Schristos	xor	$3,$11			# Sigma0(a)
119276c4f342Schristos	xor	$11,$24,$25
119376c4f342Schristos#endif
119476c4f342Schristos	sw	$21,52($29)	# offload to ring buffer
119576c4f342Schristos	addu	$3,$10
119676c4f342Schristos	and	$11,$7
119776c4f342Schristos	addu	$9,$12			# +=K[13]
119876c4f342Schristos	addu	$3,$11			# +=Maj(a,b,c)
119976c4f342Schristos	addu	$30,$9
120076c4f342Schristos	addu	$3,$9
120176c4f342Schristos	lw	$8,0($29)	# prefetch from ring buffer
1202*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1203*e0ea3921Schristos	lw	$23,60($5)
1204*e0ea3921Schristos#else
120576c4f342Schristos	lwl	$23,63($5)
120676c4f342Schristos	lwr	$23,60($5)
1207*e0ea3921Schristos#endif
120876c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
120976c4f342Schristos	wsbh	$22,$22		# byte swap(14)
121076c4f342Schristos	rotr	$22,$22,16
121176c4f342Schristos#else
121276c4f342Schristos	srl	$11,$22,24		# byte swap(14)
121376c4f342Schristos	srl	$12,$22,8
121476c4f342Schristos	andi	$13,$22,0xFF00
121576c4f342Schristos	sll	$22,$22,24
121676c4f342Schristos	andi	$12,0xFF00
121776c4f342Schristos	sll	$13,$13,8
121876c4f342Schristos	or	$22,$11
121976c4f342Schristos	or	$12,$13
122076c4f342Schristos	or	$22,$12
122176c4f342Schristos#endif
122276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
122376c4f342Schristos	xor	$13,$31,$1			# 14
122476c4f342Schristos	rotr	$11,$30,6
122576c4f342Schristos	addu	$10,$22,$2
122676c4f342Schristos	rotr	$12,$30,11
122776c4f342Schristos	and	$13,$30
122876c4f342Schristos	rotr	$2,$30,25
122976c4f342Schristos	xor	$11,$12
123076c4f342Schristos	rotr	$12,$3,2
123176c4f342Schristos	xor	$13,$1			# Ch(e,f,g)
123276c4f342Schristos	xor	$11,$2			# Sigma1(e)
123376c4f342Schristos
123476c4f342Schristos	rotr	$2,$3,13
123576c4f342Schristos	addu	$10,$13
123676c4f342Schristos	lw	$13,56($6)		# K[14]
123776c4f342Schristos	xor	$2,$12
123876c4f342Schristos	rotr	$12,$3,22
123976c4f342Schristos	addu	$10,$11
124076c4f342Schristos	and	$11,$7,$24
124176c4f342Schristos	xor	$2,$12			# Sigma0(a)
124276c4f342Schristos	xor	$12,$7,$24
124376c4f342Schristos#else
124476c4f342Schristos	addu	$10,$22,$2			# 14
124576c4f342Schristos	srl	$2,$30,6
124676c4f342Schristos	xor	$13,$31,$1
124776c4f342Schristos	sll	$12,$30,7
124876c4f342Schristos	and	$13,$30
124976c4f342Schristos	srl	$11,$30,11
125076c4f342Schristos	xor	$2,$12
125176c4f342Schristos	sll	$12,$30,21
125276c4f342Schristos	xor	$2,$11
125376c4f342Schristos	srl	$11,$30,25
125476c4f342Schristos	xor	$2,$12
125576c4f342Schristos	sll	$12,$30,26
125676c4f342Schristos	xor	$2,$11
125776c4f342Schristos	xor	$13,$1			# Ch(e,f,g)
125876c4f342Schristos	xor	$11,$12,$2			# Sigma1(e)
125976c4f342Schristos
126076c4f342Schristos	srl	$2,$3,2
126176c4f342Schristos	addu	$10,$13
126276c4f342Schristos	lw	$13,56($6)		# K[14]
126376c4f342Schristos	sll	$12,$3,10
126476c4f342Schristos	addu	$10,$11
126576c4f342Schristos	srl	$11,$3,13
126676c4f342Schristos	xor	$2,$12
126776c4f342Schristos	sll	$12,$3,19
126876c4f342Schristos	xor	$2,$11
126976c4f342Schristos	srl	$11,$3,22
127076c4f342Schristos	xor	$2,$12
127176c4f342Schristos	sll	$12,$3,30
127276c4f342Schristos	xor	$2,$11
127376c4f342Schristos	and	$11,$7,$24
127476c4f342Schristos	xor	$2,$12			# Sigma0(a)
127576c4f342Schristos	xor	$12,$7,$24
127676c4f342Schristos#endif
127776c4f342Schristos	sw	$22,56($29)	# offload to ring buffer
127876c4f342Schristos	addu	$2,$11
127976c4f342Schristos	and	$12,$3
128076c4f342Schristos	addu	$10,$13			# +=K[14]
128176c4f342Schristos	addu	$2,$12			# +=Maj(a,b,c)
128276c4f342Schristos	addu	$25,$10
128376c4f342Schristos	addu	$2,$10
128476c4f342Schristos	lw	$9,4($29)	# prefetch from ring buffer
128576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
128676c4f342Schristos	wsbh	$23,$23		# byte swap(15)
128776c4f342Schristos	rotr	$23,$23,16
128876c4f342Schristos#else
128976c4f342Schristos	srl	$12,$23,24		# byte swap(15)
129076c4f342Schristos	srl	$13,$23,8
129176c4f342Schristos	andi	$14,$23,0xFF00
129276c4f342Schristos	sll	$23,$23,24
129376c4f342Schristos	andi	$13,0xFF00
129476c4f342Schristos	sll	$14,$14,8
129576c4f342Schristos	or	$23,$12
129676c4f342Schristos	or	$13,$14
129776c4f342Schristos	or	$23,$13
129876c4f342Schristos#endif
129976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
130076c4f342Schristos	xor	$14,$30,$31			# 15
130176c4f342Schristos	rotr	$12,$25,6
130276c4f342Schristos	addu	$11,$23,$1
130376c4f342Schristos	rotr	$13,$25,11
130476c4f342Schristos	and	$14,$25
130576c4f342Schristos	rotr	$1,$25,25
130676c4f342Schristos	xor	$12,$13
130776c4f342Schristos	rotr	$13,$2,2
130876c4f342Schristos	xor	$14,$31			# Ch(e,f,g)
130976c4f342Schristos	xor	$12,$1			# Sigma1(e)
131076c4f342Schristos
131176c4f342Schristos	rotr	$1,$2,13
131276c4f342Schristos	addu	$11,$14
131376c4f342Schristos	lw	$14,60($6)		# K[15]
131476c4f342Schristos	xor	$1,$13
131576c4f342Schristos	rotr	$13,$2,22
131676c4f342Schristos	addu	$11,$12
131776c4f342Schristos	and	$12,$3,$7
131876c4f342Schristos	xor	$1,$13			# Sigma0(a)
131976c4f342Schristos	xor	$13,$3,$7
132076c4f342Schristos#else
132176c4f342Schristos	addu	$11,$23,$1			# 15
132276c4f342Schristos	srl	$1,$25,6
132376c4f342Schristos	xor	$14,$30,$31
132476c4f342Schristos	sll	$13,$25,7
132576c4f342Schristos	and	$14,$25
132676c4f342Schristos	srl	$12,$25,11
132776c4f342Schristos	xor	$1,$13
132876c4f342Schristos	sll	$13,$25,21
132976c4f342Schristos	xor	$1,$12
133076c4f342Schristos	srl	$12,$25,25
133176c4f342Schristos	xor	$1,$13
133276c4f342Schristos	sll	$13,$25,26
133376c4f342Schristos	xor	$1,$12
133476c4f342Schristos	xor	$14,$31			# Ch(e,f,g)
133576c4f342Schristos	xor	$12,$13,$1			# Sigma1(e)
133676c4f342Schristos
133776c4f342Schristos	srl	$1,$2,2
133876c4f342Schristos	addu	$11,$14
133976c4f342Schristos	lw	$14,60($6)		# K[15]
134076c4f342Schristos	sll	$13,$2,10
134176c4f342Schristos	addu	$11,$12
134276c4f342Schristos	srl	$12,$2,13
134376c4f342Schristos	xor	$1,$13
134476c4f342Schristos	sll	$13,$2,19
134576c4f342Schristos	xor	$1,$12
134676c4f342Schristos	srl	$12,$2,22
134776c4f342Schristos	xor	$1,$13
134876c4f342Schristos	sll	$13,$2,30
134976c4f342Schristos	xor	$1,$12
135076c4f342Schristos	and	$12,$3,$7
135176c4f342Schristos	xor	$1,$13			# Sigma0(a)
135276c4f342Schristos	xor	$13,$3,$7
135376c4f342Schristos#endif
135476c4f342Schristos	sw	$23,60($29)	# offload to ring buffer
135576c4f342Schristos	addu	$1,$12
135676c4f342Schristos	and	$13,$2
135776c4f342Schristos	addu	$11,$14			# +=K[15]
135876c4f342Schristos	addu	$1,$13			# +=Maj(a,b,c)
135976c4f342Schristos	addu	$24,$11
136076c4f342Schristos	addu	$1,$11
136176c4f342Schristos	lw	$10,8($29)	# prefetch from ring buffer
136276c4f342Schristos	b	.L16_xx
136376c4f342Schristos.align	4
136476c4f342Schristos.L16_xx:
136576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
136676c4f342Schristos	srl	$14,$9,3		# Xupdate(16)
136776c4f342Schristos	rotr	$12,$9,7
136876c4f342Schristos	addu	$8,$17			# +=X[i+9]
136976c4f342Schristos	xor	$14,$12
137076c4f342Schristos	rotr	$12,$9,18
137176c4f342Schristos
137276c4f342Schristos	srl	$15,$22,10
137376c4f342Schristos	rotr	$13,$22,17
137476c4f342Schristos	xor	$14,$12			# sigma0(X[i+1])
137576c4f342Schristos	rotr	$12,$22,19
137676c4f342Schristos	xor	$15,$13
137776c4f342Schristos	addu	$8,$14
137876c4f342Schristos#else
137976c4f342Schristos	srl	$14,$9,3		# Xupdate(16)
138076c4f342Schristos	addu	$8,$17			# +=X[i+9]
138176c4f342Schristos	sll	$13,$9,14
138276c4f342Schristos	srl	$12,$9,7
138376c4f342Schristos	xor	$14,$13
138476c4f342Schristos	sll	$13,11
138576c4f342Schristos	xor	$14,$12
138676c4f342Schristos	srl	$12,$9,18
138776c4f342Schristos	xor	$14,$13
138876c4f342Schristos
138976c4f342Schristos	srl	$15,$22,10
139076c4f342Schristos	xor	$14,$12			# sigma0(X[i+1])
139176c4f342Schristos	sll	$13,$22,13
139276c4f342Schristos	addu	$8,$14
139376c4f342Schristos	srl	$12,$22,17
139476c4f342Schristos	xor	$15,$13
139576c4f342Schristos	sll	$13,2
139676c4f342Schristos	xor	$15,$12
139776c4f342Schristos	srl	$12,$22,19
139876c4f342Schristos	xor	$15,$13
139976c4f342Schristos#endif
140076c4f342Schristos	xor	$15,$12			# sigma1(X[i+14])
140176c4f342Schristos	addu	$8,$15
140276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
140376c4f342Schristos	xor	$15,$25,$30			# 16
140476c4f342Schristos	rotr	$13,$24,6
140576c4f342Schristos	addu	$12,$8,$31
140676c4f342Schristos	rotr	$14,$24,11
140776c4f342Schristos	and	$15,$24
140876c4f342Schristos	rotr	$31,$24,25
140976c4f342Schristos	xor	$13,$14
141076c4f342Schristos	rotr	$14,$1,2
141176c4f342Schristos	xor	$15,$30			# Ch(e,f,g)
141276c4f342Schristos	xor	$13,$31			# Sigma1(e)
141376c4f342Schristos
141476c4f342Schristos	rotr	$31,$1,13
141576c4f342Schristos	addu	$12,$15
141676c4f342Schristos	lw	$15,64($6)		# K[16]
141776c4f342Schristos	xor	$31,$14
141876c4f342Schristos	rotr	$14,$1,22
141976c4f342Schristos	addu	$12,$13
142076c4f342Schristos	and	$13,$2,$3
142176c4f342Schristos	xor	$31,$14			# Sigma0(a)
142276c4f342Schristos	xor	$14,$2,$3
142376c4f342Schristos#else
142476c4f342Schristos	addu	$12,$8,$31			# 16
142576c4f342Schristos	srl	$31,$24,6
142676c4f342Schristos	xor	$15,$25,$30
142776c4f342Schristos	sll	$14,$24,7
142876c4f342Schristos	and	$15,$24
142976c4f342Schristos	srl	$13,$24,11
143076c4f342Schristos	xor	$31,$14
143176c4f342Schristos	sll	$14,$24,21
143276c4f342Schristos	xor	$31,$13
143376c4f342Schristos	srl	$13,$24,25
143476c4f342Schristos	xor	$31,$14
143576c4f342Schristos	sll	$14,$24,26
143676c4f342Schristos	xor	$31,$13
143776c4f342Schristos	xor	$15,$30			# Ch(e,f,g)
143876c4f342Schristos	xor	$13,$14,$31			# Sigma1(e)
143976c4f342Schristos
144076c4f342Schristos	srl	$31,$1,2
144176c4f342Schristos	addu	$12,$15
144276c4f342Schristos	lw	$15,64($6)		# K[16]
144376c4f342Schristos	sll	$14,$1,10
144476c4f342Schristos	addu	$12,$13
144576c4f342Schristos	srl	$13,$1,13
144676c4f342Schristos	xor	$31,$14
144776c4f342Schristos	sll	$14,$1,19
144876c4f342Schristos	xor	$31,$13
144976c4f342Schristos	srl	$13,$1,22
145076c4f342Schristos	xor	$31,$14
145176c4f342Schristos	sll	$14,$1,30
145276c4f342Schristos	xor	$31,$13
145376c4f342Schristos	and	$13,$2,$3
145476c4f342Schristos	xor	$31,$14			# Sigma0(a)
145576c4f342Schristos	xor	$14,$2,$3
145676c4f342Schristos#endif
145776c4f342Schristos	sw	$8,0($29)	# offload to ring buffer
145876c4f342Schristos	addu	$31,$13
145976c4f342Schristos	and	$14,$1
146076c4f342Schristos	addu	$12,$15			# +=K[16]
146176c4f342Schristos	addu	$31,$14			# +=Maj(a,b,c)
146276c4f342Schristos	addu	$7,$12
146376c4f342Schristos	addu	$31,$12
146476c4f342Schristos	lw	$11,12($29)	# prefetch from ring buffer
146576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
146676c4f342Schristos	srl	$15,$10,3		# Xupdate(17)
146776c4f342Schristos	rotr	$13,$10,7
146876c4f342Schristos	addu	$9,$18			# +=X[i+9]
146976c4f342Schristos	xor	$15,$13
147076c4f342Schristos	rotr	$13,$10,18
147176c4f342Schristos
147276c4f342Schristos	srl	$16,$23,10
147376c4f342Schristos	rotr	$14,$23,17
147476c4f342Schristos	xor	$15,$13			# sigma0(X[i+1])
147576c4f342Schristos	rotr	$13,$23,19
147676c4f342Schristos	xor	$16,$14
147776c4f342Schristos	addu	$9,$15
147876c4f342Schristos#else
147976c4f342Schristos	srl	$15,$10,3		# Xupdate(17)
148076c4f342Schristos	addu	$9,$18			# +=X[i+9]
148176c4f342Schristos	sll	$14,$10,14
148276c4f342Schristos	srl	$13,$10,7
148376c4f342Schristos	xor	$15,$14
148476c4f342Schristos	sll	$14,11
148576c4f342Schristos	xor	$15,$13
148676c4f342Schristos	srl	$13,$10,18
148776c4f342Schristos	xor	$15,$14
148876c4f342Schristos
148976c4f342Schristos	srl	$16,$23,10
149076c4f342Schristos	xor	$15,$13			# sigma0(X[i+1])
149176c4f342Schristos	sll	$14,$23,13
149276c4f342Schristos	addu	$9,$15
149376c4f342Schristos	srl	$13,$23,17
149476c4f342Schristos	xor	$16,$14
149576c4f342Schristos	sll	$14,2
149676c4f342Schristos	xor	$16,$13
149776c4f342Schristos	srl	$13,$23,19
149876c4f342Schristos	xor	$16,$14
149976c4f342Schristos#endif
150076c4f342Schristos	xor	$16,$13			# sigma1(X[i+14])
150176c4f342Schristos	addu	$9,$16
150276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
150376c4f342Schristos	xor	$16,$24,$25			# 17
150476c4f342Schristos	rotr	$14,$7,6
150576c4f342Schristos	addu	$13,$9,$30
150676c4f342Schristos	rotr	$15,$7,11
150776c4f342Schristos	and	$16,$7
150876c4f342Schristos	rotr	$30,$7,25
150976c4f342Schristos	xor	$14,$15
151076c4f342Schristos	rotr	$15,$31,2
151176c4f342Schristos	xor	$16,$25			# Ch(e,f,g)
151276c4f342Schristos	xor	$14,$30			# Sigma1(e)
151376c4f342Schristos
151476c4f342Schristos	rotr	$30,$31,13
151576c4f342Schristos	addu	$13,$16
151676c4f342Schristos	lw	$16,68($6)		# K[17]
151776c4f342Schristos	xor	$30,$15
151876c4f342Schristos	rotr	$15,$31,22
151976c4f342Schristos	addu	$13,$14
152076c4f342Schristos	and	$14,$1,$2
152176c4f342Schristos	xor	$30,$15			# Sigma0(a)
152276c4f342Schristos	xor	$15,$1,$2
152376c4f342Schristos#else
152476c4f342Schristos	addu	$13,$9,$30			# 17
152576c4f342Schristos	srl	$30,$7,6
152676c4f342Schristos	xor	$16,$24,$25
152776c4f342Schristos	sll	$15,$7,7
152876c4f342Schristos	and	$16,$7
152976c4f342Schristos	srl	$14,$7,11
153076c4f342Schristos	xor	$30,$15
153176c4f342Schristos	sll	$15,$7,21
153276c4f342Schristos	xor	$30,$14
153376c4f342Schristos	srl	$14,$7,25
153476c4f342Schristos	xor	$30,$15
153576c4f342Schristos	sll	$15,$7,26
153676c4f342Schristos	xor	$30,$14
153776c4f342Schristos	xor	$16,$25			# Ch(e,f,g)
153876c4f342Schristos	xor	$14,$15,$30			# Sigma1(e)
153976c4f342Schristos
154076c4f342Schristos	srl	$30,$31,2
154176c4f342Schristos	addu	$13,$16
154276c4f342Schristos	lw	$16,68($6)		# K[17]
154376c4f342Schristos	sll	$15,$31,10
154476c4f342Schristos	addu	$13,$14
154576c4f342Schristos	srl	$14,$31,13
154676c4f342Schristos	xor	$30,$15
154776c4f342Schristos	sll	$15,$31,19
154876c4f342Schristos	xor	$30,$14
154976c4f342Schristos	srl	$14,$31,22
155076c4f342Schristos	xor	$30,$15
155176c4f342Schristos	sll	$15,$31,30
155276c4f342Schristos	xor	$30,$14
155376c4f342Schristos	and	$14,$1,$2
155476c4f342Schristos	xor	$30,$15			# Sigma0(a)
155576c4f342Schristos	xor	$15,$1,$2
155676c4f342Schristos#endif
155776c4f342Schristos	sw	$9,4($29)	# offload to ring buffer
155876c4f342Schristos	addu	$30,$14
155976c4f342Schristos	and	$15,$31
156076c4f342Schristos	addu	$13,$16			# +=K[17]
156176c4f342Schristos	addu	$30,$15			# +=Maj(a,b,c)
156276c4f342Schristos	addu	$3,$13
156376c4f342Schristos	addu	$30,$13
156476c4f342Schristos	lw	$12,16($29)	# prefetch from ring buffer
156576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
156676c4f342Schristos	srl	$16,$11,3		# Xupdate(18)
156776c4f342Schristos	rotr	$14,$11,7
156876c4f342Schristos	addu	$10,$19			# +=X[i+9]
156976c4f342Schristos	xor	$16,$14
157076c4f342Schristos	rotr	$14,$11,18
157176c4f342Schristos
157276c4f342Schristos	srl	$17,$8,10
157376c4f342Schristos	rotr	$15,$8,17
157476c4f342Schristos	xor	$16,$14			# sigma0(X[i+1])
157576c4f342Schristos	rotr	$14,$8,19
157676c4f342Schristos	xor	$17,$15
157776c4f342Schristos	addu	$10,$16
157876c4f342Schristos#else
157976c4f342Schristos	srl	$16,$11,3		# Xupdate(18)
158076c4f342Schristos	addu	$10,$19			# +=X[i+9]
158176c4f342Schristos	sll	$15,$11,14
158276c4f342Schristos	srl	$14,$11,7
158376c4f342Schristos	xor	$16,$15
158476c4f342Schristos	sll	$15,11
158576c4f342Schristos	xor	$16,$14
158676c4f342Schristos	srl	$14,$11,18
158776c4f342Schristos	xor	$16,$15
158876c4f342Schristos
158976c4f342Schristos	srl	$17,$8,10
159076c4f342Schristos	xor	$16,$14			# sigma0(X[i+1])
159176c4f342Schristos	sll	$15,$8,13
159276c4f342Schristos	addu	$10,$16
159376c4f342Schristos	srl	$14,$8,17
159476c4f342Schristos	xor	$17,$15
159576c4f342Schristos	sll	$15,2
159676c4f342Schristos	xor	$17,$14
159776c4f342Schristos	srl	$14,$8,19
159876c4f342Schristos	xor	$17,$15
159976c4f342Schristos#endif
160076c4f342Schristos	xor	$17,$14			# sigma1(X[i+14])
160176c4f342Schristos	addu	$10,$17
160276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
160376c4f342Schristos	xor	$17,$7,$24			# 18
160476c4f342Schristos	rotr	$15,$3,6
160576c4f342Schristos	addu	$14,$10,$25
160676c4f342Schristos	rotr	$16,$3,11
160776c4f342Schristos	and	$17,$3
160876c4f342Schristos	rotr	$25,$3,25
160976c4f342Schristos	xor	$15,$16
161076c4f342Schristos	rotr	$16,$30,2
161176c4f342Schristos	xor	$17,$24			# Ch(e,f,g)
161276c4f342Schristos	xor	$15,$25			# Sigma1(e)
161376c4f342Schristos
161476c4f342Schristos	rotr	$25,$30,13
161576c4f342Schristos	addu	$14,$17
161676c4f342Schristos	lw	$17,72($6)		# K[18]
161776c4f342Schristos	xor	$25,$16
161876c4f342Schristos	rotr	$16,$30,22
161976c4f342Schristos	addu	$14,$15
162076c4f342Schristos	and	$15,$31,$1
162176c4f342Schristos	xor	$25,$16			# Sigma0(a)
162276c4f342Schristos	xor	$16,$31,$1
162376c4f342Schristos#else
162476c4f342Schristos	addu	$14,$10,$25			# 18
162576c4f342Schristos	srl	$25,$3,6
162676c4f342Schristos	xor	$17,$7,$24
162776c4f342Schristos	sll	$16,$3,7
162876c4f342Schristos	and	$17,$3
162976c4f342Schristos	srl	$15,$3,11
163076c4f342Schristos	xor	$25,$16
163176c4f342Schristos	sll	$16,$3,21
163276c4f342Schristos	xor	$25,$15
163376c4f342Schristos	srl	$15,$3,25
163476c4f342Schristos	xor	$25,$16
163576c4f342Schristos	sll	$16,$3,26
163676c4f342Schristos	xor	$25,$15
163776c4f342Schristos	xor	$17,$24			# Ch(e,f,g)
163876c4f342Schristos	xor	$15,$16,$25			# Sigma1(e)
163976c4f342Schristos
164076c4f342Schristos	srl	$25,$30,2
164176c4f342Schristos	addu	$14,$17
164276c4f342Schristos	lw	$17,72($6)		# K[18]
164376c4f342Schristos	sll	$16,$30,10
164476c4f342Schristos	addu	$14,$15
164576c4f342Schristos	srl	$15,$30,13
164676c4f342Schristos	xor	$25,$16
164776c4f342Schristos	sll	$16,$30,19
164876c4f342Schristos	xor	$25,$15
164976c4f342Schristos	srl	$15,$30,22
165076c4f342Schristos	xor	$25,$16
165176c4f342Schristos	sll	$16,$30,30
165276c4f342Schristos	xor	$25,$15
165376c4f342Schristos	and	$15,$31,$1
165476c4f342Schristos	xor	$25,$16			# Sigma0(a)
165576c4f342Schristos	xor	$16,$31,$1
165676c4f342Schristos#endif
165776c4f342Schristos	sw	$10,8($29)	# offload to ring buffer
165876c4f342Schristos	addu	$25,$15
165976c4f342Schristos	and	$16,$30
166076c4f342Schristos	addu	$14,$17			# +=K[18]
166176c4f342Schristos	addu	$25,$16			# +=Maj(a,b,c)
166276c4f342Schristos	addu	$2,$14
166376c4f342Schristos	addu	$25,$14
166476c4f342Schristos	lw	$13,20($29)	# prefetch from ring buffer
166576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
166676c4f342Schristos	srl	$17,$12,3		# Xupdate(19)
166776c4f342Schristos	rotr	$15,$12,7
166876c4f342Schristos	addu	$11,$20			# +=X[i+9]
166976c4f342Schristos	xor	$17,$15
167076c4f342Schristos	rotr	$15,$12,18
167176c4f342Schristos
167276c4f342Schristos	srl	$18,$9,10
167376c4f342Schristos	rotr	$16,$9,17
167476c4f342Schristos	xor	$17,$15			# sigma0(X[i+1])
167576c4f342Schristos	rotr	$15,$9,19
167676c4f342Schristos	xor	$18,$16
167776c4f342Schristos	addu	$11,$17
167876c4f342Schristos#else
167976c4f342Schristos	srl	$17,$12,3		# Xupdate(19)
168076c4f342Schristos	addu	$11,$20			# +=X[i+9]
168176c4f342Schristos	sll	$16,$12,14
168276c4f342Schristos	srl	$15,$12,7
168376c4f342Schristos	xor	$17,$16
168476c4f342Schristos	sll	$16,11
168576c4f342Schristos	xor	$17,$15
168676c4f342Schristos	srl	$15,$12,18
168776c4f342Schristos	xor	$17,$16
168876c4f342Schristos
168976c4f342Schristos	srl	$18,$9,10
169076c4f342Schristos	xor	$17,$15			# sigma0(X[i+1])
169176c4f342Schristos	sll	$16,$9,13
169276c4f342Schristos	addu	$11,$17
169376c4f342Schristos	srl	$15,$9,17
169476c4f342Schristos	xor	$18,$16
169576c4f342Schristos	sll	$16,2
169676c4f342Schristos	xor	$18,$15
169776c4f342Schristos	srl	$15,$9,19
169876c4f342Schristos	xor	$18,$16
169976c4f342Schristos#endif
170076c4f342Schristos	xor	$18,$15			# sigma1(X[i+14])
170176c4f342Schristos	addu	$11,$18
170276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
170376c4f342Schristos	xor	$18,$3,$7			# 19
170476c4f342Schristos	rotr	$16,$2,6
170576c4f342Schristos	addu	$15,$11,$24
170676c4f342Schristos	rotr	$17,$2,11
170776c4f342Schristos	and	$18,$2
170876c4f342Schristos	rotr	$24,$2,25
170976c4f342Schristos	xor	$16,$17
171076c4f342Schristos	rotr	$17,$25,2
171176c4f342Schristos	xor	$18,$7			# Ch(e,f,g)
171276c4f342Schristos	xor	$16,$24			# Sigma1(e)
171376c4f342Schristos
171476c4f342Schristos	rotr	$24,$25,13
171576c4f342Schristos	addu	$15,$18
171676c4f342Schristos	lw	$18,76($6)		# K[19]
171776c4f342Schristos	xor	$24,$17
171876c4f342Schristos	rotr	$17,$25,22
171976c4f342Schristos	addu	$15,$16
172076c4f342Schristos	and	$16,$30,$31
172176c4f342Schristos	xor	$24,$17			# Sigma0(a)
172276c4f342Schristos	xor	$17,$30,$31
172376c4f342Schristos#else
172476c4f342Schristos	addu	$15,$11,$24			# 19
172576c4f342Schristos	srl	$24,$2,6
172676c4f342Schristos	xor	$18,$3,$7
172776c4f342Schristos	sll	$17,$2,7
172876c4f342Schristos	and	$18,$2
172976c4f342Schristos	srl	$16,$2,11
173076c4f342Schristos	xor	$24,$17
173176c4f342Schristos	sll	$17,$2,21
173276c4f342Schristos	xor	$24,$16
173376c4f342Schristos	srl	$16,$2,25
173476c4f342Schristos	xor	$24,$17
173576c4f342Schristos	sll	$17,$2,26
173676c4f342Schristos	xor	$24,$16
173776c4f342Schristos	xor	$18,$7			# Ch(e,f,g)
173876c4f342Schristos	xor	$16,$17,$24			# Sigma1(e)
173976c4f342Schristos
174076c4f342Schristos	srl	$24,$25,2
174176c4f342Schristos	addu	$15,$18
174276c4f342Schristos	lw	$18,76($6)		# K[19]
174376c4f342Schristos	sll	$17,$25,10
174476c4f342Schristos	addu	$15,$16
174576c4f342Schristos	srl	$16,$25,13
174676c4f342Schristos	xor	$24,$17
174776c4f342Schristos	sll	$17,$25,19
174876c4f342Schristos	xor	$24,$16
174976c4f342Schristos	srl	$16,$25,22
175076c4f342Schristos	xor	$24,$17
175176c4f342Schristos	sll	$17,$25,30
175276c4f342Schristos	xor	$24,$16
175376c4f342Schristos	and	$16,$30,$31
175476c4f342Schristos	xor	$24,$17			# Sigma0(a)
175576c4f342Schristos	xor	$17,$30,$31
175676c4f342Schristos#endif
175776c4f342Schristos	sw	$11,12($29)	# offload to ring buffer
175876c4f342Schristos	addu	$24,$16
175976c4f342Schristos	and	$17,$25
176076c4f342Schristos	addu	$15,$18			# +=K[19]
176176c4f342Schristos	addu	$24,$17			# +=Maj(a,b,c)
176276c4f342Schristos	addu	$1,$15
176376c4f342Schristos	addu	$24,$15
176476c4f342Schristos	lw	$14,24($29)	# prefetch from ring buffer
176576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
176676c4f342Schristos	srl	$18,$13,3		# Xupdate(20)
176776c4f342Schristos	rotr	$16,$13,7
176876c4f342Schristos	addu	$12,$21			# +=X[i+9]
176976c4f342Schristos	xor	$18,$16
177076c4f342Schristos	rotr	$16,$13,18
177176c4f342Schristos
177276c4f342Schristos	srl	$19,$10,10
177376c4f342Schristos	rotr	$17,$10,17
177476c4f342Schristos	xor	$18,$16			# sigma0(X[i+1])
177576c4f342Schristos	rotr	$16,$10,19
177676c4f342Schristos	xor	$19,$17
177776c4f342Schristos	addu	$12,$18
177876c4f342Schristos#else
177976c4f342Schristos	srl	$18,$13,3		# Xupdate(20)
178076c4f342Schristos	addu	$12,$21			# +=X[i+9]
178176c4f342Schristos	sll	$17,$13,14
178276c4f342Schristos	srl	$16,$13,7
178376c4f342Schristos	xor	$18,$17
178476c4f342Schristos	sll	$17,11
178576c4f342Schristos	xor	$18,$16
178676c4f342Schristos	srl	$16,$13,18
178776c4f342Schristos	xor	$18,$17
178876c4f342Schristos
178976c4f342Schristos	srl	$19,$10,10
179076c4f342Schristos	xor	$18,$16			# sigma0(X[i+1])
179176c4f342Schristos	sll	$17,$10,13
179276c4f342Schristos	addu	$12,$18
179376c4f342Schristos	srl	$16,$10,17
179476c4f342Schristos	xor	$19,$17
179576c4f342Schristos	sll	$17,2
179676c4f342Schristos	xor	$19,$16
179776c4f342Schristos	srl	$16,$10,19
179876c4f342Schristos	xor	$19,$17
179976c4f342Schristos#endif
180076c4f342Schristos	xor	$19,$16			# sigma1(X[i+14])
180176c4f342Schristos	addu	$12,$19
180276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
180376c4f342Schristos	xor	$19,$2,$3			# 20
180476c4f342Schristos	rotr	$17,$1,6
180576c4f342Schristos	addu	$16,$12,$7
180676c4f342Schristos	rotr	$18,$1,11
180776c4f342Schristos	and	$19,$1
180876c4f342Schristos	rotr	$7,$1,25
180976c4f342Schristos	xor	$17,$18
181076c4f342Schristos	rotr	$18,$24,2
181176c4f342Schristos	xor	$19,$3			# Ch(e,f,g)
181276c4f342Schristos	xor	$17,$7			# Sigma1(e)
181376c4f342Schristos
181476c4f342Schristos	rotr	$7,$24,13
181576c4f342Schristos	addu	$16,$19
181676c4f342Schristos	lw	$19,80($6)		# K[20]
181776c4f342Schristos	xor	$7,$18
181876c4f342Schristos	rotr	$18,$24,22
181976c4f342Schristos	addu	$16,$17
182076c4f342Schristos	and	$17,$25,$30
182176c4f342Schristos	xor	$7,$18			# Sigma0(a)
182276c4f342Schristos	xor	$18,$25,$30
182376c4f342Schristos#else
182476c4f342Schristos	addu	$16,$12,$7			# 20
182576c4f342Schristos	srl	$7,$1,6
182676c4f342Schristos	xor	$19,$2,$3
182776c4f342Schristos	sll	$18,$1,7
182876c4f342Schristos	and	$19,$1
182976c4f342Schristos	srl	$17,$1,11
183076c4f342Schristos	xor	$7,$18
183176c4f342Schristos	sll	$18,$1,21
183276c4f342Schristos	xor	$7,$17
183376c4f342Schristos	srl	$17,$1,25
183476c4f342Schristos	xor	$7,$18
183576c4f342Schristos	sll	$18,$1,26
183676c4f342Schristos	xor	$7,$17
183776c4f342Schristos	xor	$19,$3			# Ch(e,f,g)
183876c4f342Schristos	xor	$17,$18,$7			# Sigma1(e)
183976c4f342Schristos
184076c4f342Schristos	srl	$7,$24,2
184176c4f342Schristos	addu	$16,$19
184276c4f342Schristos	lw	$19,80($6)		# K[20]
184376c4f342Schristos	sll	$18,$24,10
184476c4f342Schristos	addu	$16,$17
184576c4f342Schristos	srl	$17,$24,13
184676c4f342Schristos	xor	$7,$18
184776c4f342Schristos	sll	$18,$24,19
184876c4f342Schristos	xor	$7,$17
184976c4f342Schristos	srl	$17,$24,22
185076c4f342Schristos	xor	$7,$18
185176c4f342Schristos	sll	$18,$24,30
185276c4f342Schristos	xor	$7,$17
185376c4f342Schristos	and	$17,$25,$30
185476c4f342Schristos	xor	$7,$18			# Sigma0(a)
185576c4f342Schristos	xor	$18,$25,$30
185676c4f342Schristos#endif
185776c4f342Schristos	sw	$12,16($29)	# offload to ring buffer
185876c4f342Schristos	addu	$7,$17
185976c4f342Schristos	and	$18,$24
186076c4f342Schristos	addu	$16,$19			# +=K[20]
186176c4f342Schristos	addu	$7,$18			# +=Maj(a,b,c)
186276c4f342Schristos	addu	$31,$16
186376c4f342Schristos	addu	$7,$16
186476c4f342Schristos	lw	$15,28($29)	# prefetch from ring buffer
186576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
186676c4f342Schristos	srl	$19,$14,3		# Xupdate(21)
186776c4f342Schristos	rotr	$17,$14,7
186876c4f342Schristos	addu	$13,$22			# +=X[i+9]
186976c4f342Schristos	xor	$19,$17
187076c4f342Schristos	rotr	$17,$14,18
187176c4f342Schristos
187276c4f342Schristos	srl	$20,$11,10
187376c4f342Schristos	rotr	$18,$11,17
187476c4f342Schristos	xor	$19,$17			# sigma0(X[i+1])
187576c4f342Schristos	rotr	$17,$11,19
187676c4f342Schristos	xor	$20,$18
187776c4f342Schristos	addu	$13,$19
187876c4f342Schristos#else
187976c4f342Schristos	srl	$19,$14,3		# Xupdate(21)
188076c4f342Schristos	addu	$13,$22			# +=X[i+9]
188176c4f342Schristos	sll	$18,$14,14
188276c4f342Schristos	srl	$17,$14,7
188376c4f342Schristos	xor	$19,$18
188476c4f342Schristos	sll	$18,11
188576c4f342Schristos	xor	$19,$17
188676c4f342Schristos	srl	$17,$14,18
188776c4f342Schristos	xor	$19,$18
188876c4f342Schristos
188976c4f342Schristos	srl	$20,$11,10
189076c4f342Schristos	xor	$19,$17			# sigma0(X[i+1])
189176c4f342Schristos	sll	$18,$11,13
189276c4f342Schristos	addu	$13,$19
189376c4f342Schristos	srl	$17,$11,17
189476c4f342Schristos	xor	$20,$18
189576c4f342Schristos	sll	$18,2
189676c4f342Schristos	xor	$20,$17
189776c4f342Schristos	srl	$17,$11,19
189876c4f342Schristos	xor	$20,$18
189976c4f342Schristos#endif
190076c4f342Schristos	xor	$20,$17			# sigma1(X[i+14])
190176c4f342Schristos	addu	$13,$20
190276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
190376c4f342Schristos	xor	$20,$1,$2			# 21
190476c4f342Schristos	rotr	$18,$31,6
190576c4f342Schristos	addu	$17,$13,$3
190676c4f342Schristos	rotr	$19,$31,11
190776c4f342Schristos	and	$20,$31
190876c4f342Schristos	rotr	$3,$31,25
190976c4f342Schristos	xor	$18,$19
191076c4f342Schristos	rotr	$19,$7,2
191176c4f342Schristos	xor	$20,$2			# Ch(e,f,g)
191276c4f342Schristos	xor	$18,$3			# Sigma1(e)
191376c4f342Schristos
191476c4f342Schristos	rotr	$3,$7,13
191576c4f342Schristos	addu	$17,$20
191676c4f342Schristos	lw	$20,84($6)		# K[21]
191776c4f342Schristos	xor	$3,$19
191876c4f342Schristos	rotr	$19,$7,22
191976c4f342Schristos	addu	$17,$18
192076c4f342Schristos	and	$18,$24,$25
192176c4f342Schristos	xor	$3,$19			# Sigma0(a)
192276c4f342Schristos	xor	$19,$24,$25
192376c4f342Schristos#else
192476c4f342Schristos	addu	$17,$13,$3			# 21
192576c4f342Schristos	srl	$3,$31,6
192676c4f342Schristos	xor	$20,$1,$2
192776c4f342Schristos	sll	$19,$31,7
192876c4f342Schristos	and	$20,$31
192976c4f342Schristos	srl	$18,$31,11
193076c4f342Schristos	xor	$3,$19
193176c4f342Schristos	sll	$19,$31,21
193276c4f342Schristos	xor	$3,$18
193376c4f342Schristos	srl	$18,$31,25
193476c4f342Schristos	xor	$3,$19
193576c4f342Schristos	sll	$19,$31,26
193676c4f342Schristos	xor	$3,$18
193776c4f342Schristos	xor	$20,$2			# Ch(e,f,g)
193876c4f342Schristos	xor	$18,$19,$3			# Sigma1(e)
193976c4f342Schristos
194076c4f342Schristos	srl	$3,$7,2
194176c4f342Schristos	addu	$17,$20
194276c4f342Schristos	lw	$20,84($6)		# K[21]
194376c4f342Schristos	sll	$19,$7,10
194476c4f342Schristos	addu	$17,$18
194576c4f342Schristos	srl	$18,$7,13
194676c4f342Schristos	xor	$3,$19
194776c4f342Schristos	sll	$19,$7,19
194876c4f342Schristos	xor	$3,$18
194976c4f342Schristos	srl	$18,$7,22
195076c4f342Schristos	xor	$3,$19
195176c4f342Schristos	sll	$19,$7,30
195276c4f342Schristos	xor	$3,$18
195376c4f342Schristos	and	$18,$24,$25
195476c4f342Schristos	xor	$3,$19			# Sigma0(a)
195576c4f342Schristos	xor	$19,$24,$25
195676c4f342Schristos#endif
195776c4f342Schristos	sw	$13,20($29)	# offload to ring buffer
195876c4f342Schristos	addu	$3,$18
195976c4f342Schristos	and	$19,$7
196076c4f342Schristos	addu	$17,$20			# +=K[21]
196176c4f342Schristos	addu	$3,$19			# +=Maj(a,b,c)
196276c4f342Schristos	addu	$30,$17
196376c4f342Schristos	addu	$3,$17
196476c4f342Schristos	lw	$16,32($29)	# prefetch from ring buffer
196576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
196676c4f342Schristos	srl	$20,$15,3		# Xupdate(22)
196776c4f342Schristos	rotr	$18,$15,7
196876c4f342Schristos	addu	$14,$23			# +=X[i+9]
196976c4f342Schristos	xor	$20,$18
197076c4f342Schristos	rotr	$18,$15,18
197176c4f342Schristos
197276c4f342Schristos	srl	$21,$12,10
197376c4f342Schristos	rotr	$19,$12,17
197476c4f342Schristos	xor	$20,$18			# sigma0(X[i+1])
197576c4f342Schristos	rotr	$18,$12,19
197676c4f342Schristos	xor	$21,$19
197776c4f342Schristos	addu	$14,$20
197876c4f342Schristos#else
197976c4f342Schristos	srl	$20,$15,3		# Xupdate(22)
198076c4f342Schristos	addu	$14,$23			# +=X[i+9]
198176c4f342Schristos	sll	$19,$15,14
198276c4f342Schristos	srl	$18,$15,7
198376c4f342Schristos	xor	$20,$19
198476c4f342Schristos	sll	$19,11
198576c4f342Schristos	xor	$20,$18
198676c4f342Schristos	srl	$18,$15,18
198776c4f342Schristos	xor	$20,$19
198876c4f342Schristos
198976c4f342Schristos	srl	$21,$12,10
199076c4f342Schristos	xor	$20,$18			# sigma0(X[i+1])
199176c4f342Schristos	sll	$19,$12,13
199276c4f342Schristos	addu	$14,$20
199376c4f342Schristos	srl	$18,$12,17
199476c4f342Schristos	xor	$21,$19
199576c4f342Schristos	sll	$19,2
199676c4f342Schristos	xor	$21,$18
199776c4f342Schristos	srl	$18,$12,19
199876c4f342Schristos	xor	$21,$19
199976c4f342Schristos#endif
200076c4f342Schristos	xor	$21,$18			# sigma1(X[i+14])
200176c4f342Schristos	addu	$14,$21
200276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
200376c4f342Schristos	xor	$21,$31,$1			# 22
200476c4f342Schristos	rotr	$19,$30,6
200576c4f342Schristos	addu	$18,$14,$2
200676c4f342Schristos	rotr	$20,$30,11
200776c4f342Schristos	and	$21,$30
200876c4f342Schristos	rotr	$2,$30,25
200976c4f342Schristos	xor	$19,$20
201076c4f342Schristos	rotr	$20,$3,2
201176c4f342Schristos	xor	$21,$1			# Ch(e,f,g)
201276c4f342Schristos	xor	$19,$2			# Sigma1(e)
201376c4f342Schristos
201476c4f342Schristos	rotr	$2,$3,13
201576c4f342Schristos	addu	$18,$21
201676c4f342Schristos	lw	$21,88($6)		# K[22]
201776c4f342Schristos	xor	$2,$20
201876c4f342Schristos	rotr	$20,$3,22
201976c4f342Schristos	addu	$18,$19
202076c4f342Schristos	and	$19,$7,$24
202176c4f342Schristos	xor	$2,$20			# Sigma0(a)
202276c4f342Schristos	xor	$20,$7,$24
202376c4f342Schristos#else
202476c4f342Schristos	addu	$18,$14,$2			# 22
202576c4f342Schristos	srl	$2,$30,6
202676c4f342Schristos	xor	$21,$31,$1
202776c4f342Schristos	sll	$20,$30,7
202876c4f342Schristos	and	$21,$30
202976c4f342Schristos	srl	$19,$30,11
203076c4f342Schristos	xor	$2,$20
203176c4f342Schristos	sll	$20,$30,21
203276c4f342Schristos	xor	$2,$19
203376c4f342Schristos	srl	$19,$30,25
203476c4f342Schristos	xor	$2,$20
203576c4f342Schristos	sll	$20,$30,26
203676c4f342Schristos	xor	$2,$19
203776c4f342Schristos	xor	$21,$1			# Ch(e,f,g)
203876c4f342Schristos	xor	$19,$20,$2			# Sigma1(e)
203976c4f342Schristos
204076c4f342Schristos	srl	$2,$3,2
204176c4f342Schristos	addu	$18,$21
204276c4f342Schristos	lw	$21,88($6)		# K[22]
204376c4f342Schristos	sll	$20,$3,10
204476c4f342Schristos	addu	$18,$19
204576c4f342Schristos	srl	$19,$3,13
204676c4f342Schristos	xor	$2,$20
204776c4f342Schristos	sll	$20,$3,19
204876c4f342Schristos	xor	$2,$19
204976c4f342Schristos	srl	$19,$3,22
205076c4f342Schristos	xor	$2,$20
205176c4f342Schristos	sll	$20,$3,30
205276c4f342Schristos	xor	$2,$19
205376c4f342Schristos	and	$19,$7,$24
205476c4f342Schristos	xor	$2,$20			# Sigma0(a)
205576c4f342Schristos	xor	$20,$7,$24
205676c4f342Schristos#endif
205776c4f342Schristos	sw	$14,24($29)	# offload to ring buffer
205876c4f342Schristos	addu	$2,$19
205976c4f342Schristos	and	$20,$3
206076c4f342Schristos	addu	$18,$21			# +=K[22]
206176c4f342Schristos	addu	$2,$20			# +=Maj(a,b,c)
206276c4f342Schristos	addu	$25,$18
206376c4f342Schristos	addu	$2,$18
206476c4f342Schristos	lw	$17,36($29)	# prefetch from ring buffer
206576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
206676c4f342Schristos	srl	$21,$16,3		# Xupdate(23)
206776c4f342Schristos	rotr	$19,$16,7
206876c4f342Schristos	addu	$15,$8			# +=X[i+9]
206976c4f342Schristos	xor	$21,$19
207076c4f342Schristos	rotr	$19,$16,18
207176c4f342Schristos
207276c4f342Schristos	srl	$22,$13,10
207376c4f342Schristos	rotr	$20,$13,17
207476c4f342Schristos	xor	$21,$19			# sigma0(X[i+1])
207576c4f342Schristos	rotr	$19,$13,19
207676c4f342Schristos	xor	$22,$20
207776c4f342Schristos	addu	$15,$21
207876c4f342Schristos#else
207976c4f342Schristos	srl	$21,$16,3		# Xupdate(23)
208076c4f342Schristos	addu	$15,$8			# +=X[i+9]
208176c4f342Schristos	sll	$20,$16,14
208276c4f342Schristos	srl	$19,$16,7
208376c4f342Schristos	xor	$21,$20
208476c4f342Schristos	sll	$20,11
208576c4f342Schristos	xor	$21,$19
208676c4f342Schristos	srl	$19,$16,18
208776c4f342Schristos	xor	$21,$20
208876c4f342Schristos
208976c4f342Schristos	srl	$22,$13,10
209076c4f342Schristos	xor	$21,$19			# sigma0(X[i+1])
209176c4f342Schristos	sll	$20,$13,13
209276c4f342Schristos	addu	$15,$21
209376c4f342Schristos	srl	$19,$13,17
209476c4f342Schristos	xor	$22,$20
209576c4f342Schristos	sll	$20,2
209676c4f342Schristos	xor	$22,$19
209776c4f342Schristos	srl	$19,$13,19
209876c4f342Schristos	xor	$22,$20
209976c4f342Schristos#endif
210076c4f342Schristos	xor	$22,$19			# sigma1(X[i+14])
210176c4f342Schristos	addu	$15,$22
210276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
210376c4f342Schristos	xor	$22,$30,$31			# 23
210476c4f342Schristos	rotr	$20,$25,6
210576c4f342Schristos	addu	$19,$15,$1
210676c4f342Schristos	rotr	$21,$25,11
210776c4f342Schristos	and	$22,$25
210876c4f342Schristos	rotr	$1,$25,25
210976c4f342Schristos	xor	$20,$21
211076c4f342Schristos	rotr	$21,$2,2
211176c4f342Schristos	xor	$22,$31			# Ch(e,f,g)
211276c4f342Schristos	xor	$20,$1			# Sigma1(e)
211376c4f342Schristos
211476c4f342Schristos	rotr	$1,$2,13
211576c4f342Schristos	addu	$19,$22
211676c4f342Schristos	lw	$22,92($6)		# K[23]
211776c4f342Schristos	xor	$1,$21
211876c4f342Schristos	rotr	$21,$2,22
211976c4f342Schristos	addu	$19,$20
212076c4f342Schristos	and	$20,$3,$7
212176c4f342Schristos	xor	$1,$21			# Sigma0(a)
212276c4f342Schristos	xor	$21,$3,$7
212376c4f342Schristos#else
212476c4f342Schristos	addu	$19,$15,$1			# 23
212576c4f342Schristos	srl	$1,$25,6
212676c4f342Schristos	xor	$22,$30,$31
212776c4f342Schristos	sll	$21,$25,7
212876c4f342Schristos	and	$22,$25
212976c4f342Schristos	srl	$20,$25,11
213076c4f342Schristos	xor	$1,$21
213176c4f342Schristos	sll	$21,$25,21
213276c4f342Schristos	xor	$1,$20
213376c4f342Schristos	srl	$20,$25,25
213476c4f342Schristos	xor	$1,$21
213576c4f342Schristos	sll	$21,$25,26
213676c4f342Schristos	xor	$1,$20
213776c4f342Schristos	xor	$22,$31			# Ch(e,f,g)
213876c4f342Schristos	xor	$20,$21,$1			# Sigma1(e)
213976c4f342Schristos
214076c4f342Schristos	srl	$1,$2,2
214176c4f342Schristos	addu	$19,$22
214276c4f342Schristos	lw	$22,92($6)		# K[23]
214376c4f342Schristos	sll	$21,$2,10
214476c4f342Schristos	addu	$19,$20
214576c4f342Schristos	srl	$20,$2,13
214676c4f342Schristos	xor	$1,$21
214776c4f342Schristos	sll	$21,$2,19
214876c4f342Schristos	xor	$1,$20
214976c4f342Schristos	srl	$20,$2,22
215076c4f342Schristos	xor	$1,$21
215176c4f342Schristos	sll	$21,$2,30
215276c4f342Schristos	xor	$1,$20
215376c4f342Schristos	and	$20,$3,$7
215476c4f342Schristos	xor	$1,$21			# Sigma0(a)
215576c4f342Schristos	xor	$21,$3,$7
215676c4f342Schristos#endif
215776c4f342Schristos	sw	$15,28($29)	# offload to ring buffer
215876c4f342Schristos	addu	$1,$20
215976c4f342Schristos	and	$21,$2
216076c4f342Schristos	addu	$19,$22			# +=K[23]
216176c4f342Schristos	addu	$1,$21			# +=Maj(a,b,c)
216276c4f342Schristos	addu	$24,$19
216376c4f342Schristos	addu	$1,$19
216476c4f342Schristos	lw	$18,40($29)	# prefetch from ring buffer
216576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
216676c4f342Schristos	srl	$22,$17,3		# Xupdate(24)
216776c4f342Schristos	rotr	$20,$17,7
216876c4f342Schristos	addu	$16,$9			# +=X[i+9]
216976c4f342Schristos	xor	$22,$20
217076c4f342Schristos	rotr	$20,$17,18
217176c4f342Schristos
217276c4f342Schristos	srl	$23,$14,10
217376c4f342Schristos	rotr	$21,$14,17
217476c4f342Schristos	xor	$22,$20			# sigma0(X[i+1])
217576c4f342Schristos	rotr	$20,$14,19
217676c4f342Schristos	xor	$23,$21
217776c4f342Schristos	addu	$16,$22
217876c4f342Schristos#else
217976c4f342Schristos	srl	$22,$17,3		# Xupdate(24)
218076c4f342Schristos	addu	$16,$9			# +=X[i+9]
218176c4f342Schristos	sll	$21,$17,14
218276c4f342Schristos	srl	$20,$17,7
218376c4f342Schristos	xor	$22,$21
218476c4f342Schristos	sll	$21,11
218576c4f342Schristos	xor	$22,$20
218676c4f342Schristos	srl	$20,$17,18
218776c4f342Schristos	xor	$22,$21
218876c4f342Schristos
218976c4f342Schristos	srl	$23,$14,10
219076c4f342Schristos	xor	$22,$20			# sigma0(X[i+1])
219176c4f342Schristos	sll	$21,$14,13
219276c4f342Schristos	addu	$16,$22
219376c4f342Schristos	srl	$20,$14,17
219476c4f342Schristos	xor	$23,$21
219576c4f342Schristos	sll	$21,2
219676c4f342Schristos	xor	$23,$20
219776c4f342Schristos	srl	$20,$14,19
219876c4f342Schristos	xor	$23,$21
219976c4f342Schristos#endif
220076c4f342Schristos	xor	$23,$20			# sigma1(X[i+14])
220176c4f342Schristos	addu	$16,$23
220276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
220376c4f342Schristos	xor	$23,$25,$30			# 24
220476c4f342Schristos	rotr	$21,$24,6
220576c4f342Schristos	addu	$20,$16,$31
220676c4f342Schristos	rotr	$22,$24,11
220776c4f342Schristos	and	$23,$24
220876c4f342Schristos	rotr	$31,$24,25
220976c4f342Schristos	xor	$21,$22
221076c4f342Schristos	rotr	$22,$1,2
221176c4f342Schristos	xor	$23,$30			# Ch(e,f,g)
221276c4f342Schristos	xor	$21,$31			# Sigma1(e)
221376c4f342Schristos
221476c4f342Schristos	rotr	$31,$1,13
221576c4f342Schristos	addu	$20,$23
221676c4f342Schristos	lw	$23,96($6)		# K[24]
221776c4f342Schristos	xor	$31,$22
221876c4f342Schristos	rotr	$22,$1,22
221976c4f342Schristos	addu	$20,$21
222076c4f342Schristos	and	$21,$2,$3
222176c4f342Schristos	xor	$31,$22			# Sigma0(a)
222276c4f342Schristos	xor	$22,$2,$3
222376c4f342Schristos#else
222476c4f342Schristos	addu	$20,$16,$31			# 24
222576c4f342Schristos	srl	$31,$24,6
222676c4f342Schristos	xor	$23,$25,$30
222776c4f342Schristos	sll	$22,$24,7
222876c4f342Schristos	and	$23,$24
222976c4f342Schristos	srl	$21,$24,11
223076c4f342Schristos	xor	$31,$22
223176c4f342Schristos	sll	$22,$24,21
223276c4f342Schristos	xor	$31,$21
223376c4f342Schristos	srl	$21,$24,25
223476c4f342Schristos	xor	$31,$22
223576c4f342Schristos	sll	$22,$24,26
223676c4f342Schristos	xor	$31,$21
223776c4f342Schristos	xor	$23,$30			# Ch(e,f,g)
223876c4f342Schristos	xor	$21,$22,$31			# Sigma1(e)
223976c4f342Schristos
224076c4f342Schristos	srl	$31,$1,2
224176c4f342Schristos	addu	$20,$23
224276c4f342Schristos	lw	$23,96($6)		# K[24]
224376c4f342Schristos	sll	$22,$1,10
224476c4f342Schristos	addu	$20,$21
224576c4f342Schristos	srl	$21,$1,13
224676c4f342Schristos	xor	$31,$22
224776c4f342Schristos	sll	$22,$1,19
224876c4f342Schristos	xor	$31,$21
224976c4f342Schristos	srl	$21,$1,22
225076c4f342Schristos	xor	$31,$22
225176c4f342Schristos	sll	$22,$1,30
225276c4f342Schristos	xor	$31,$21
225376c4f342Schristos	and	$21,$2,$3
225476c4f342Schristos	xor	$31,$22			# Sigma0(a)
225576c4f342Schristos	xor	$22,$2,$3
225676c4f342Schristos#endif
225776c4f342Schristos	sw	$16,32($29)	# offload to ring buffer
225876c4f342Schristos	addu	$31,$21
225976c4f342Schristos	and	$22,$1
226076c4f342Schristos	addu	$20,$23			# +=K[24]
226176c4f342Schristos	addu	$31,$22			# +=Maj(a,b,c)
226276c4f342Schristos	addu	$7,$20
226376c4f342Schristos	addu	$31,$20
226476c4f342Schristos	lw	$19,44($29)	# prefetch from ring buffer
226576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
226676c4f342Schristos	srl	$23,$18,3		# Xupdate(25)
226776c4f342Schristos	rotr	$21,$18,7
226876c4f342Schristos	addu	$17,$10			# +=X[i+9]
226976c4f342Schristos	xor	$23,$21
227076c4f342Schristos	rotr	$21,$18,18
227176c4f342Schristos
227276c4f342Schristos	srl	$8,$15,10
227376c4f342Schristos	rotr	$22,$15,17
227476c4f342Schristos	xor	$23,$21			# sigma0(X[i+1])
227576c4f342Schristos	rotr	$21,$15,19
227676c4f342Schristos	xor	$8,$22
227776c4f342Schristos	addu	$17,$23
227876c4f342Schristos#else
227976c4f342Schristos	srl	$23,$18,3		# Xupdate(25)
228076c4f342Schristos	addu	$17,$10			# +=X[i+9]
228176c4f342Schristos	sll	$22,$18,14
228276c4f342Schristos	srl	$21,$18,7
228376c4f342Schristos	xor	$23,$22
228476c4f342Schristos	sll	$22,11
228576c4f342Schristos	xor	$23,$21
228676c4f342Schristos	srl	$21,$18,18
228776c4f342Schristos	xor	$23,$22
228876c4f342Schristos
228976c4f342Schristos	srl	$8,$15,10
229076c4f342Schristos	xor	$23,$21			# sigma0(X[i+1])
229176c4f342Schristos	sll	$22,$15,13
229276c4f342Schristos	addu	$17,$23
229376c4f342Schristos	srl	$21,$15,17
229476c4f342Schristos	xor	$8,$22
229576c4f342Schristos	sll	$22,2
229676c4f342Schristos	xor	$8,$21
229776c4f342Schristos	srl	$21,$15,19
229876c4f342Schristos	xor	$8,$22
229976c4f342Schristos#endif
230076c4f342Schristos	xor	$8,$21			# sigma1(X[i+14])
230176c4f342Schristos	addu	$17,$8
230276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
230376c4f342Schristos	xor	$8,$24,$25			# 25
230476c4f342Schristos	rotr	$22,$7,6
230576c4f342Schristos	addu	$21,$17,$30
230676c4f342Schristos	rotr	$23,$7,11
230776c4f342Schristos	and	$8,$7
230876c4f342Schristos	rotr	$30,$7,25
230976c4f342Schristos	xor	$22,$23
231076c4f342Schristos	rotr	$23,$31,2
231176c4f342Schristos	xor	$8,$25			# Ch(e,f,g)
231276c4f342Schristos	xor	$22,$30			# Sigma1(e)
231376c4f342Schristos
231476c4f342Schristos	rotr	$30,$31,13
231576c4f342Schristos	addu	$21,$8
231676c4f342Schristos	lw	$8,100($6)		# K[25]
231776c4f342Schristos	xor	$30,$23
231876c4f342Schristos	rotr	$23,$31,22
231976c4f342Schristos	addu	$21,$22
232076c4f342Schristos	and	$22,$1,$2
232176c4f342Schristos	xor	$30,$23			# Sigma0(a)
232276c4f342Schristos	xor	$23,$1,$2
232376c4f342Schristos#else
232476c4f342Schristos	addu	$21,$17,$30			# 25
232576c4f342Schristos	srl	$30,$7,6
232676c4f342Schristos	xor	$8,$24,$25
232776c4f342Schristos	sll	$23,$7,7
232876c4f342Schristos	and	$8,$7
232976c4f342Schristos	srl	$22,$7,11
233076c4f342Schristos	xor	$30,$23
233176c4f342Schristos	sll	$23,$7,21
233276c4f342Schristos	xor	$30,$22
233376c4f342Schristos	srl	$22,$7,25
233476c4f342Schristos	xor	$30,$23
233576c4f342Schristos	sll	$23,$7,26
233676c4f342Schristos	xor	$30,$22
233776c4f342Schristos	xor	$8,$25			# Ch(e,f,g)
233876c4f342Schristos	xor	$22,$23,$30			# Sigma1(e)
233976c4f342Schristos
234076c4f342Schristos	srl	$30,$31,2
234176c4f342Schristos	addu	$21,$8
234276c4f342Schristos	lw	$8,100($6)		# K[25]
234376c4f342Schristos	sll	$23,$31,10
234476c4f342Schristos	addu	$21,$22
234576c4f342Schristos	srl	$22,$31,13
234676c4f342Schristos	xor	$30,$23
234776c4f342Schristos	sll	$23,$31,19
234876c4f342Schristos	xor	$30,$22
234976c4f342Schristos	srl	$22,$31,22
235076c4f342Schristos	xor	$30,$23
235176c4f342Schristos	sll	$23,$31,30
235276c4f342Schristos	xor	$30,$22
235376c4f342Schristos	and	$22,$1,$2
235476c4f342Schristos	xor	$30,$23			# Sigma0(a)
235576c4f342Schristos	xor	$23,$1,$2
235676c4f342Schristos#endif
235776c4f342Schristos	sw	$17,36($29)	# offload to ring buffer
235876c4f342Schristos	addu	$30,$22
235976c4f342Schristos	and	$23,$31
236076c4f342Schristos	addu	$21,$8			# +=K[25]
236176c4f342Schristos	addu	$30,$23			# +=Maj(a,b,c)
236276c4f342Schristos	addu	$3,$21
236376c4f342Schristos	addu	$30,$21
236476c4f342Schristos	lw	$20,48($29)	# prefetch from ring buffer
236576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
236676c4f342Schristos	srl	$8,$19,3		# Xupdate(26)
236776c4f342Schristos	rotr	$22,$19,7
236876c4f342Schristos	addu	$18,$11			# +=X[i+9]
236976c4f342Schristos	xor	$8,$22
237076c4f342Schristos	rotr	$22,$19,18
237176c4f342Schristos
237276c4f342Schristos	srl	$9,$16,10
237376c4f342Schristos	rotr	$23,$16,17
237476c4f342Schristos	xor	$8,$22			# sigma0(X[i+1])
237576c4f342Schristos	rotr	$22,$16,19
237676c4f342Schristos	xor	$9,$23
237776c4f342Schristos	addu	$18,$8
237876c4f342Schristos#else
237976c4f342Schristos	srl	$8,$19,3		# Xupdate(26)
238076c4f342Schristos	addu	$18,$11			# +=X[i+9]
238176c4f342Schristos	sll	$23,$19,14
238276c4f342Schristos	srl	$22,$19,7
238376c4f342Schristos	xor	$8,$23
238476c4f342Schristos	sll	$23,11
238576c4f342Schristos	xor	$8,$22
238676c4f342Schristos	srl	$22,$19,18
238776c4f342Schristos	xor	$8,$23
238876c4f342Schristos
238976c4f342Schristos	srl	$9,$16,10
239076c4f342Schristos	xor	$8,$22			# sigma0(X[i+1])
239176c4f342Schristos	sll	$23,$16,13
239276c4f342Schristos	addu	$18,$8
239376c4f342Schristos	srl	$22,$16,17
239476c4f342Schristos	xor	$9,$23
239576c4f342Schristos	sll	$23,2
239676c4f342Schristos	xor	$9,$22
239776c4f342Schristos	srl	$22,$16,19
239876c4f342Schristos	xor	$9,$23
239976c4f342Schristos#endif
240076c4f342Schristos	xor	$9,$22			# sigma1(X[i+14])
240176c4f342Schristos	addu	$18,$9
240276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
240376c4f342Schristos	xor	$9,$7,$24			# 26
240476c4f342Schristos	rotr	$23,$3,6
240576c4f342Schristos	addu	$22,$18,$25
240676c4f342Schristos	rotr	$8,$3,11
240776c4f342Schristos	and	$9,$3
240876c4f342Schristos	rotr	$25,$3,25
240976c4f342Schristos	xor	$23,$8
241076c4f342Schristos	rotr	$8,$30,2
241176c4f342Schristos	xor	$9,$24			# Ch(e,f,g)
241276c4f342Schristos	xor	$23,$25			# Sigma1(e)
241376c4f342Schristos
241476c4f342Schristos	rotr	$25,$30,13
241576c4f342Schristos	addu	$22,$9
241676c4f342Schristos	lw	$9,104($6)		# K[26]
241776c4f342Schristos	xor	$25,$8
241876c4f342Schristos	rotr	$8,$30,22
241976c4f342Schristos	addu	$22,$23
242076c4f342Schristos	and	$23,$31,$1
242176c4f342Schristos	xor	$25,$8			# Sigma0(a)
242276c4f342Schristos	xor	$8,$31,$1
242376c4f342Schristos#else
242476c4f342Schristos	addu	$22,$18,$25			# 26
242576c4f342Schristos	srl	$25,$3,6
242676c4f342Schristos	xor	$9,$7,$24
242776c4f342Schristos	sll	$8,$3,7
242876c4f342Schristos	and	$9,$3
242976c4f342Schristos	srl	$23,$3,11
243076c4f342Schristos	xor	$25,$8
243176c4f342Schristos	sll	$8,$3,21
243276c4f342Schristos	xor	$25,$23
243376c4f342Schristos	srl	$23,$3,25
243476c4f342Schristos	xor	$25,$8
243576c4f342Schristos	sll	$8,$3,26
243676c4f342Schristos	xor	$25,$23
243776c4f342Schristos	xor	$9,$24			# Ch(e,f,g)
243876c4f342Schristos	xor	$23,$8,$25			# Sigma1(e)
243976c4f342Schristos
244076c4f342Schristos	srl	$25,$30,2
244176c4f342Schristos	addu	$22,$9
244276c4f342Schristos	lw	$9,104($6)		# K[26]
244376c4f342Schristos	sll	$8,$30,10
244476c4f342Schristos	addu	$22,$23
244576c4f342Schristos	srl	$23,$30,13
244676c4f342Schristos	xor	$25,$8
244776c4f342Schristos	sll	$8,$30,19
244876c4f342Schristos	xor	$25,$23
244976c4f342Schristos	srl	$23,$30,22
245076c4f342Schristos	xor	$25,$8
245176c4f342Schristos	sll	$8,$30,30
245276c4f342Schristos	xor	$25,$23
245376c4f342Schristos	and	$23,$31,$1
245476c4f342Schristos	xor	$25,$8			# Sigma0(a)
245576c4f342Schristos	xor	$8,$31,$1
245676c4f342Schristos#endif
245776c4f342Schristos	sw	$18,40($29)	# offload to ring buffer
245876c4f342Schristos	addu	$25,$23
245976c4f342Schristos	and	$8,$30
246076c4f342Schristos	addu	$22,$9			# +=K[26]
246176c4f342Schristos	addu	$25,$8			# +=Maj(a,b,c)
246276c4f342Schristos	addu	$2,$22
246376c4f342Schristos	addu	$25,$22
246476c4f342Schristos	lw	$21,52($29)	# prefetch from ring buffer
246576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
246676c4f342Schristos	srl	$9,$20,3		# Xupdate(27)
246776c4f342Schristos	rotr	$23,$20,7
246876c4f342Schristos	addu	$19,$12			# +=X[i+9]
246976c4f342Schristos	xor	$9,$23
247076c4f342Schristos	rotr	$23,$20,18
247176c4f342Schristos
247276c4f342Schristos	srl	$10,$17,10
247376c4f342Schristos	rotr	$8,$17,17
247476c4f342Schristos	xor	$9,$23			# sigma0(X[i+1])
247576c4f342Schristos	rotr	$23,$17,19
247676c4f342Schristos	xor	$10,$8
247776c4f342Schristos	addu	$19,$9
247876c4f342Schristos#else
247976c4f342Schristos	srl	$9,$20,3		# Xupdate(27)
248076c4f342Schristos	addu	$19,$12			# +=X[i+9]
248176c4f342Schristos	sll	$8,$20,14
248276c4f342Schristos	srl	$23,$20,7
248376c4f342Schristos	xor	$9,$8
248476c4f342Schristos	sll	$8,11
248576c4f342Schristos	xor	$9,$23
248676c4f342Schristos	srl	$23,$20,18
248776c4f342Schristos	xor	$9,$8
248876c4f342Schristos
248976c4f342Schristos	srl	$10,$17,10
249076c4f342Schristos	xor	$9,$23			# sigma0(X[i+1])
249176c4f342Schristos	sll	$8,$17,13
249276c4f342Schristos	addu	$19,$9
249376c4f342Schristos	srl	$23,$17,17
249476c4f342Schristos	xor	$10,$8
249576c4f342Schristos	sll	$8,2
249676c4f342Schristos	xor	$10,$23
249776c4f342Schristos	srl	$23,$17,19
249876c4f342Schristos	xor	$10,$8
249976c4f342Schristos#endif
250076c4f342Schristos	xor	$10,$23			# sigma1(X[i+14])
250176c4f342Schristos	addu	$19,$10
250276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
250376c4f342Schristos	xor	$10,$3,$7			# 27
250476c4f342Schristos	rotr	$8,$2,6
250576c4f342Schristos	addu	$23,$19,$24
250676c4f342Schristos	rotr	$9,$2,11
250776c4f342Schristos	and	$10,$2
250876c4f342Schristos	rotr	$24,$2,25
250976c4f342Schristos	xor	$8,$9
251076c4f342Schristos	rotr	$9,$25,2
251176c4f342Schristos	xor	$10,$7			# Ch(e,f,g)
251276c4f342Schristos	xor	$8,$24			# Sigma1(e)
251376c4f342Schristos
251476c4f342Schristos	rotr	$24,$25,13
251576c4f342Schristos	addu	$23,$10
251676c4f342Schristos	lw	$10,108($6)		# K[27]
251776c4f342Schristos	xor	$24,$9
251876c4f342Schristos	rotr	$9,$25,22
251976c4f342Schristos	addu	$23,$8
252076c4f342Schristos	and	$8,$30,$31
252176c4f342Schristos	xor	$24,$9			# Sigma0(a)
252276c4f342Schristos	xor	$9,$30,$31
252376c4f342Schristos#else
252476c4f342Schristos	addu	$23,$19,$24			# 27
252576c4f342Schristos	srl	$24,$2,6
252676c4f342Schristos	xor	$10,$3,$7
252776c4f342Schristos	sll	$9,$2,7
252876c4f342Schristos	and	$10,$2
252976c4f342Schristos	srl	$8,$2,11
253076c4f342Schristos	xor	$24,$9
253176c4f342Schristos	sll	$9,$2,21
253276c4f342Schristos	xor	$24,$8
253376c4f342Schristos	srl	$8,$2,25
253476c4f342Schristos	xor	$24,$9
253576c4f342Schristos	sll	$9,$2,26
253676c4f342Schristos	xor	$24,$8
253776c4f342Schristos	xor	$10,$7			# Ch(e,f,g)
253876c4f342Schristos	xor	$8,$9,$24			# Sigma1(e)
253976c4f342Schristos
254076c4f342Schristos	srl	$24,$25,2
254176c4f342Schristos	addu	$23,$10
254276c4f342Schristos	lw	$10,108($6)		# K[27]
254376c4f342Schristos	sll	$9,$25,10
254476c4f342Schristos	addu	$23,$8
254576c4f342Schristos	srl	$8,$25,13
254676c4f342Schristos	xor	$24,$9
254776c4f342Schristos	sll	$9,$25,19
254876c4f342Schristos	xor	$24,$8
254976c4f342Schristos	srl	$8,$25,22
255076c4f342Schristos	xor	$24,$9
255176c4f342Schristos	sll	$9,$25,30
255276c4f342Schristos	xor	$24,$8
255376c4f342Schristos	and	$8,$30,$31
255476c4f342Schristos	xor	$24,$9			# Sigma0(a)
255576c4f342Schristos	xor	$9,$30,$31
255676c4f342Schristos#endif
255776c4f342Schristos	sw	$19,44($29)	# offload to ring buffer
255876c4f342Schristos	addu	$24,$8
255976c4f342Schristos	and	$9,$25
256076c4f342Schristos	addu	$23,$10			# +=K[27]
256176c4f342Schristos	addu	$24,$9			# +=Maj(a,b,c)
256276c4f342Schristos	addu	$1,$23
256376c4f342Schristos	addu	$24,$23
256476c4f342Schristos	lw	$22,56($29)	# prefetch from ring buffer
256576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
256676c4f342Schristos	srl	$10,$21,3		# Xupdate(28)
256776c4f342Schristos	rotr	$8,$21,7
256876c4f342Schristos	addu	$20,$13			# +=X[i+9]
256976c4f342Schristos	xor	$10,$8
257076c4f342Schristos	rotr	$8,$21,18
257176c4f342Schristos
257276c4f342Schristos	srl	$11,$18,10
257376c4f342Schristos	rotr	$9,$18,17
257476c4f342Schristos	xor	$10,$8			# sigma0(X[i+1])
257576c4f342Schristos	rotr	$8,$18,19
257676c4f342Schristos	xor	$11,$9
257776c4f342Schristos	addu	$20,$10
257876c4f342Schristos#else
257976c4f342Schristos	srl	$10,$21,3		# Xupdate(28)
258076c4f342Schristos	addu	$20,$13			# +=X[i+9]
258176c4f342Schristos	sll	$9,$21,14
258276c4f342Schristos	srl	$8,$21,7
258376c4f342Schristos	xor	$10,$9
258476c4f342Schristos	sll	$9,11
258576c4f342Schristos	xor	$10,$8
258676c4f342Schristos	srl	$8,$21,18
258776c4f342Schristos	xor	$10,$9
258876c4f342Schristos
258976c4f342Schristos	srl	$11,$18,10
259076c4f342Schristos	xor	$10,$8			# sigma0(X[i+1])
259176c4f342Schristos	sll	$9,$18,13
259276c4f342Schristos	addu	$20,$10
259376c4f342Schristos	srl	$8,$18,17
259476c4f342Schristos	xor	$11,$9
259576c4f342Schristos	sll	$9,2
259676c4f342Schristos	xor	$11,$8
259776c4f342Schristos	srl	$8,$18,19
259876c4f342Schristos	xor	$11,$9
259976c4f342Schristos#endif
260076c4f342Schristos	xor	$11,$8			# sigma1(X[i+14])
260176c4f342Schristos	addu	$20,$11
260276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
260376c4f342Schristos	xor	$11,$2,$3			# 28
260476c4f342Schristos	rotr	$9,$1,6
260576c4f342Schristos	addu	$8,$20,$7
260676c4f342Schristos	rotr	$10,$1,11
260776c4f342Schristos	and	$11,$1
260876c4f342Schristos	rotr	$7,$1,25
260976c4f342Schristos	xor	$9,$10
261076c4f342Schristos	rotr	$10,$24,2
261176c4f342Schristos	xor	$11,$3			# Ch(e,f,g)
261276c4f342Schristos	xor	$9,$7			# Sigma1(e)
261376c4f342Schristos
261476c4f342Schristos	rotr	$7,$24,13
261576c4f342Schristos	addu	$8,$11
261676c4f342Schristos	lw	$11,112($6)		# K[28]
261776c4f342Schristos	xor	$7,$10
261876c4f342Schristos	rotr	$10,$24,22
261976c4f342Schristos	addu	$8,$9
262076c4f342Schristos	and	$9,$25,$30
262176c4f342Schristos	xor	$7,$10			# Sigma0(a)
262276c4f342Schristos	xor	$10,$25,$30
262376c4f342Schristos#else
262476c4f342Schristos	addu	$8,$20,$7			# 28
262576c4f342Schristos	srl	$7,$1,6
262676c4f342Schristos	xor	$11,$2,$3
262776c4f342Schristos	sll	$10,$1,7
262876c4f342Schristos	and	$11,$1
262976c4f342Schristos	srl	$9,$1,11
263076c4f342Schristos	xor	$7,$10
263176c4f342Schristos	sll	$10,$1,21
263276c4f342Schristos	xor	$7,$9
263376c4f342Schristos	srl	$9,$1,25
263476c4f342Schristos	xor	$7,$10
263576c4f342Schristos	sll	$10,$1,26
263676c4f342Schristos	xor	$7,$9
263776c4f342Schristos	xor	$11,$3			# Ch(e,f,g)
263876c4f342Schristos	xor	$9,$10,$7			# Sigma1(e)
263976c4f342Schristos
264076c4f342Schristos	srl	$7,$24,2
264176c4f342Schristos	addu	$8,$11
264276c4f342Schristos	lw	$11,112($6)		# K[28]
264376c4f342Schristos	sll	$10,$24,10
264476c4f342Schristos	addu	$8,$9
264576c4f342Schristos	srl	$9,$24,13
264676c4f342Schristos	xor	$7,$10
264776c4f342Schristos	sll	$10,$24,19
264876c4f342Schristos	xor	$7,$9
264976c4f342Schristos	srl	$9,$24,22
265076c4f342Schristos	xor	$7,$10
265176c4f342Schristos	sll	$10,$24,30
265276c4f342Schristos	xor	$7,$9
265376c4f342Schristos	and	$9,$25,$30
265476c4f342Schristos	xor	$7,$10			# Sigma0(a)
265576c4f342Schristos	xor	$10,$25,$30
265676c4f342Schristos#endif
265776c4f342Schristos	sw	$20,48($29)	# offload to ring buffer
265876c4f342Schristos	addu	$7,$9
265976c4f342Schristos	and	$10,$24
266076c4f342Schristos	addu	$8,$11			# +=K[28]
266176c4f342Schristos	addu	$7,$10			# +=Maj(a,b,c)
266276c4f342Schristos	addu	$31,$8
266376c4f342Schristos	addu	$7,$8
266476c4f342Schristos	lw	$23,60($29)	# prefetch from ring buffer
266576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
266676c4f342Schristos	srl	$11,$22,3		# Xupdate(29)
266776c4f342Schristos	rotr	$9,$22,7
266876c4f342Schristos	addu	$21,$14			# +=X[i+9]
266976c4f342Schristos	xor	$11,$9
267076c4f342Schristos	rotr	$9,$22,18
267176c4f342Schristos
267276c4f342Schristos	srl	$12,$19,10
267376c4f342Schristos	rotr	$10,$19,17
267476c4f342Schristos	xor	$11,$9			# sigma0(X[i+1])
267576c4f342Schristos	rotr	$9,$19,19
267676c4f342Schristos	xor	$12,$10
267776c4f342Schristos	addu	$21,$11
267876c4f342Schristos#else
267976c4f342Schristos	srl	$11,$22,3		# Xupdate(29)
268076c4f342Schristos	addu	$21,$14			# +=X[i+9]
268176c4f342Schristos	sll	$10,$22,14
268276c4f342Schristos	srl	$9,$22,7
268376c4f342Schristos	xor	$11,$10
268476c4f342Schristos	sll	$10,11
268576c4f342Schristos	xor	$11,$9
268676c4f342Schristos	srl	$9,$22,18
268776c4f342Schristos	xor	$11,$10
268876c4f342Schristos
268976c4f342Schristos	srl	$12,$19,10
269076c4f342Schristos	xor	$11,$9			# sigma0(X[i+1])
269176c4f342Schristos	sll	$10,$19,13
269276c4f342Schristos	addu	$21,$11
269376c4f342Schristos	srl	$9,$19,17
269476c4f342Schristos	xor	$12,$10
269576c4f342Schristos	sll	$10,2
269676c4f342Schristos	xor	$12,$9
269776c4f342Schristos	srl	$9,$19,19
269876c4f342Schristos	xor	$12,$10
269976c4f342Schristos#endif
270076c4f342Schristos	xor	$12,$9			# sigma1(X[i+14])
270176c4f342Schristos	addu	$21,$12
270276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
270376c4f342Schristos	xor	$12,$1,$2			# 29
270476c4f342Schristos	rotr	$10,$31,6
270576c4f342Schristos	addu	$9,$21,$3
270676c4f342Schristos	rotr	$11,$31,11
270776c4f342Schristos	and	$12,$31
270876c4f342Schristos	rotr	$3,$31,25
270976c4f342Schristos	xor	$10,$11
271076c4f342Schristos	rotr	$11,$7,2
271176c4f342Schristos	xor	$12,$2			# Ch(e,f,g)
271276c4f342Schristos	xor	$10,$3			# Sigma1(e)
271376c4f342Schristos
271476c4f342Schristos	rotr	$3,$7,13
271576c4f342Schristos	addu	$9,$12
271676c4f342Schristos	lw	$12,116($6)		# K[29]
271776c4f342Schristos	xor	$3,$11
271876c4f342Schristos	rotr	$11,$7,22
271976c4f342Schristos	addu	$9,$10
272076c4f342Schristos	and	$10,$24,$25
272176c4f342Schristos	xor	$3,$11			# Sigma0(a)
272276c4f342Schristos	xor	$11,$24,$25
272376c4f342Schristos#else
272476c4f342Schristos	addu	$9,$21,$3			# 29
272576c4f342Schristos	srl	$3,$31,6
272676c4f342Schristos	xor	$12,$1,$2
272776c4f342Schristos	sll	$11,$31,7
272876c4f342Schristos	and	$12,$31
272976c4f342Schristos	srl	$10,$31,11
273076c4f342Schristos	xor	$3,$11
273176c4f342Schristos	sll	$11,$31,21
273276c4f342Schristos	xor	$3,$10
273376c4f342Schristos	srl	$10,$31,25
273476c4f342Schristos	xor	$3,$11
273576c4f342Schristos	sll	$11,$31,26
273676c4f342Schristos	xor	$3,$10
273776c4f342Schristos	xor	$12,$2			# Ch(e,f,g)
273876c4f342Schristos	xor	$10,$11,$3			# Sigma1(e)
273976c4f342Schristos
274076c4f342Schristos	srl	$3,$7,2
274176c4f342Schristos	addu	$9,$12
274276c4f342Schristos	lw	$12,116($6)		# K[29]
274376c4f342Schristos	sll	$11,$7,10
274476c4f342Schristos	addu	$9,$10
274576c4f342Schristos	srl	$10,$7,13
274676c4f342Schristos	xor	$3,$11
274776c4f342Schristos	sll	$11,$7,19
274876c4f342Schristos	xor	$3,$10
274976c4f342Schristos	srl	$10,$7,22
275076c4f342Schristos	xor	$3,$11
275176c4f342Schristos	sll	$11,$7,30
275276c4f342Schristos	xor	$3,$10
275376c4f342Schristos	and	$10,$24,$25
275476c4f342Schristos	xor	$3,$11			# Sigma0(a)
275576c4f342Schristos	xor	$11,$24,$25
275676c4f342Schristos#endif
275776c4f342Schristos	sw	$21,52($29)	# offload to ring buffer
275876c4f342Schristos	addu	$3,$10
275976c4f342Schristos	and	$11,$7
276076c4f342Schristos	addu	$9,$12			# +=K[29]
276176c4f342Schristos	addu	$3,$11			# +=Maj(a,b,c)
276276c4f342Schristos	addu	$30,$9
276376c4f342Schristos	addu	$3,$9
276476c4f342Schristos	lw	$8,0($29)	# prefetch from ring buffer
276576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
276676c4f342Schristos	srl	$12,$23,3		# Xupdate(30)
276776c4f342Schristos	rotr	$10,$23,7
276876c4f342Schristos	addu	$22,$15			# +=X[i+9]
276976c4f342Schristos	xor	$12,$10
277076c4f342Schristos	rotr	$10,$23,18
277176c4f342Schristos
277276c4f342Schristos	srl	$13,$20,10
277376c4f342Schristos	rotr	$11,$20,17
277476c4f342Schristos	xor	$12,$10			# sigma0(X[i+1])
277576c4f342Schristos	rotr	$10,$20,19
277676c4f342Schristos	xor	$13,$11
277776c4f342Schristos	addu	$22,$12
277876c4f342Schristos#else
277976c4f342Schristos	srl	$12,$23,3		# Xupdate(30)
278076c4f342Schristos	addu	$22,$15			# +=X[i+9]
278176c4f342Schristos	sll	$11,$23,14
278276c4f342Schristos	srl	$10,$23,7
278376c4f342Schristos	xor	$12,$11
278476c4f342Schristos	sll	$11,11
278576c4f342Schristos	xor	$12,$10
278676c4f342Schristos	srl	$10,$23,18
278776c4f342Schristos	xor	$12,$11
278876c4f342Schristos
278976c4f342Schristos	srl	$13,$20,10
279076c4f342Schristos	xor	$12,$10			# sigma0(X[i+1])
279176c4f342Schristos	sll	$11,$20,13
279276c4f342Schristos	addu	$22,$12
279376c4f342Schristos	srl	$10,$20,17
279476c4f342Schristos	xor	$13,$11
279576c4f342Schristos	sll	$11,2
279676c4f342Schristos	xor	$13,$10
279776c4f342Schristos	srl	$10,$20,19
279876c4f342Schristos	xor	$13,$11
279976c4f342Schristos#endif
280076c4f342Schristos	xor	$13,$10			# sigma1(X[i+14])
280176c4f342Schristos	addu	$22,$13
280276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
280376c4f342Schristos	xor	$13,$31,$1			# 30
280476c4f342Schristos	rotr	$11,$30,6
280576c4f342Schristos	addu	$10,$22,$2
280676c4f342Schristos	rotr	$12,$30,11
280776c4f342Schristos	and	$13,$30
280876c4f342Schristos	rotr	$2,$30,25
280976c4f342Schristos	xor	$11,$12
281076c4f342Schristos	rotr	$12,$3,2
281176c4f342Schristos	xor	$13,$1			# Ch(e,f,g)
281276c4f342Schristos	xor	$11,$2			# Sigma1(e)
281376c4f342Schristos
281476c4f342Schristos	rotr	$2,$3,13
281576c4f342Schristos	addu	$10,$13
281676c4f342Schristos	lw	$13,120($6)		# K[30]
281776c4f342Schristos	xor	$2,$12
281876c4f342Schristos	rotr	$12,$3,22
281976c4f342Schristos	addu	$10,$11
282076c4f342Schristos	and	$11,$7,$24
282176c4f342Schristos	xor	$2,$12			# Sigma0(a)
282276c4f342Schristos	xor	$12,$7,$24
282376c4f342Schristos#else
282476c4f342Schristos	addu	$10,$22,$2			# 30
282576c4f342Schristos	srl	$2,$30,6
282676c4f342Schristos	xor	$13,$31,$1
282776c4f342Schristos	sll	$12,$30,7
282876c4f342Schristos	and	$13,$30
282976c4f342Schristos	srl	$11,$30,11
283076c4f342Schristos	xor	$2,$12
283176c4f342Schristos	sll	$12,$30,21
283276c4f342Schristos	xor	$2,$11
283376c4f342Schristos	srl	$11,$30,25
283476c4f342Schristos	xor	$2,$12
283576c4f342Schristos	sll	$12,$30,26
283676c4f342Schristos	xor	$2,$11
283776c4f342Schristos	xor	$13,$1			# Ch(e,f,g)
283876c4f342Schristos	xor	$11,$12,$2			# Sigma1(e)
283976c4f342Schristos
284076c4f342Schristos	srl	$2,$3,2
284176c4f342Schristos	addu	$10,$13
284276c4f342Schristos	lw	$13,120($6)		# K[30]
284376c4f342Schristos	sll	$12,$3,10
284476c4f342Schristos	addu	$10,$11
284576c4f342Schristos	srl	$11,$3,13
284676c4f342Schristos	xor	$2,$12
284776c4f342Schristos	sll	$12,$3,19
284876c4f342Schristos	xor	$2,$11
284976c4f342Schristos	srl	$11,$3,22
285076c4f342Schristos	xor	$2,$12
285176c4f342Schristos	sll	$12,$3,30
285276c4f342Schristos	xor	$2,$11
285376c4f342Schristos	and	$11,$7,$24
285476c4f342Schristos	xor	$2,$12			# Sigma0(a)
285576c4f342Schristos	xor	$12,$7,$24
285676c4f342Schristos#endif
285776c4f342Schristos	sw	$22,56($29)	# offload to ring buffer
285876c4f342Schristos	addu	$2,$11
285976c4f342Schristos	and	$12,$3
286076c4f342Schristos	addu	$10,$13			# +=K[30]
286176c4f342Schristos	addu	$2,$12			# +=Maj(a,b,c)
286276c4f342Schristos	addu	$25,$10
286376c4f342Schristos	addu	$2,$10
286476c4f342Schristos	lw	$9,4($29)	# prefetch from ring buffer
286576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
286676c4f342Schristos	srl	$13,$8,3		# Xupdate(31)
286776c4f342Schristos	rotr	$11,$8,7
286876c4f342Schristos	addu	$23,$16			# +=X[i+9]
286976c4f342Schristos	xor	$13,$11
287076c4f342Schristos	rotr	$11,$8,18
287176c4f342Schristos
287276c4f342Schristos	srl	$14,$21,10
287376c4f342Schristos	rotr	$12,$21,17
287476c4f342Schristos	xor	$13,$11			# sigma0(X[i+1])
287576c4f342Schristos	rotr	$11,$21,19
287676c4f342Schristos	xor	$14,$12
287776c4f342Schristos	addu	$23,$13
287876c4f342Schristos#else
287976c4f342Schristos	srl	$13,$8,3		# Xupdate(31)
288076c4f342Schristos	addu	$23,$16			# +=X[i+9]
288176c4f342Schristos	sll	$12,$8,14
288276c4f342Schristos	srl	$11,$8,7
288376c4f342Schristos	xor	$13,$12
288476c4f342Schristos	sll	$12,11
288576c4f342Schristos	xor	$13,$11
288676c4f342Schristos	srl	$11,$8,18
288776c4f342Schristos	xor	$13,$12
288876c4f342Schristos
288976c4f342Schristos	srl	$14,$21,10
289076c4f342Schristos	xor	$13,$11			# sigma0(X[i+1])
289176c4f342Schristos	sll	$12,$21,13
289276c4f342Schristos	addu	$23,$13
289376c4f342Schristos	srl	$11,$21,17
289476c4f342Schristos	xor	$14,$12
289576c4f342Schristos	sll	$12,2
289676c4f342Schristos	xor	$14,$11
289776c4f342Schristos	srl	$11,$21,19
289876c4f342Schristos	xor	$14,$12
289976c4f342Schristos#endif
290076c4f342Schristos	xor	$14,$11			# sigma1(X[i+14])
290176c4f342Schristos	addu	$23,$14
290276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
290376c4f342Schristos	xor	$14,$30,$31			# 31
290476c4f342Schristos	rotr	$12,$25,6
290576c4f342Schristos	addu	$11,$23,$1
290676c4f342Schristos	rotr	$13,$25,11
290776c4f342Schristos	and	$14,$25
290876c4f342Schristos	rotr	$1,$25,25
290976c4f342Schristos	xor	$12,$13
291076c4f342Schristos	rotr	$13,$2,2
291176c4f342Schristos	xor	$14,$31			# Ch(e,f,g)
291276c4f342Schristos	xor	$12,$1			# Sigma1(e)
291376c4f342Schristos
291476c4f342Schristos	rotr	$1,$2,13
291576c4f342Schristos	addu	$11,$14
291676c4f342Schristos	lw	$14,124($6)		# K[31]
291776c4f342Schristos	xor	$1,$13
291876c4f342Schristos	rotr	$13,$2,22
291976c4f342Schristos	addu	$11,$12
292076c4f342Schristos	and	$12,$3,$7
292176c4f342Schristos	xor	$1,$13			# Sigma0(a)
292276c4f342Schristos	xor	$13,$3,$7
292376c4f342Schristos#else
292476c4f342Schristos	addu	$11,$23,$1			# 31
292576c4f342Schristos	srl	$1,$25,6
292676c4f342Schristos	xor	$14,$30,$31
292776c4f342Schristos	sll	$13,$25,7
292876c4f342Schristos	and	$14,$25
292976c4f342Schristos	srl	$12,$25,11
293076c4f342Schristos	xor	$1,$13
293176c4f342Schristos	sll	$13,$25,21
293276c4f342Schristos	xor	$1,$12
293376c4f342Schristos	srl	$12,$25,25
293476c4f342Schristos	xor	$1,$13
293576c4f342Schristos	sll	$13,$25,26
293676c4f342Schristos	xor	$1,$12
293776c4f342Schristos	xor	$14,$31			# Ch(e,f,g)
293876c4f342Schristos	xor	$12,$13,$1			# Sigma1(e)
293976c4f342Schristos
294076c4f342Schristos	srl	$1,$2,2
294176c4f342Schristos	addu	$11,$14
294276c4f342Schristos	lw	$14,124($6)		# K[31]
294376c4f342Schristos	sll	$13,$2,10
294476c4f342Schristos	addu	$11,$12
294576c4f342Schristos	srl	$12,$2,13
294676c4f342Schristos	xor	$1,$13
294776c4f342Schristos	sll	$13,$2,19
294876c4f342Schristos	xor	$1,$12
294976c4f342Schristos	srl	$12,$2,22
295076c4f342Schristos	xor	$1,$13
295176c4f342Schristos	sll	$13,$2,30
295276c4f342Schristos	xor	$1,$12
295376c4f342Schristos	and	$12,$3,$7
295476c4f342Schristos	xor	$1,$13			# Sigma0(a)
295576c4f342Schristos	xor	$13,$3,$7
295676c4f342Schristos#endif
295776c4f342Schristos	sw	$23,60($29)	# offload to ring buffer
295876c4f342Schristos	addu	$1,$12
295976c4f342Schristos	and	$13,$2
296076c4f342Schristos	addu	$11,$14			# +=K[31]
296176c4f342Schristos	addu	$1,$13			# +=Maj(a,b,c)
296276c4f342Schristos	addu	$24,$11
296376c4f342Schristos	addu	$1,$11
296476c4f342Schristos	lw	$10,8($29)	# prefetch from ring buffer
296576c4f342Schristos	and	$14,0xfff
296676c4f342Schristos	li	$15,2290
296776c4f342Schristos	.set	noreorder
296876c4f342Schristos	bne	$14,$15,.L16_xx
2969*e0ea3921Schristos	addu $6,16*4		# Ktbl+=16
297076c4f342Schristos
297176c4f342Schristos	lw	$23,16*4($29)	# restore pointer to the end of input
297276c4f342Schristos	lw	$8,0*4($4)
297376c4f342Schristos	lw	$9,1*4($4)
297476c4f342Schristos	lw	$10,2*4($4)
2975*e0ea3921Schristos	addu $5,16*4
297676c4f342Schristos	lw	$11,3*4($4)
297776c4f342Schristos	addu	$1,$8
297876c4f342Schristos	lw	$12,4*4($4)
297976c4f342Schristos	addu	$2,$9
298076c4f342Schristos	lw	$13,5*4($4)
298176c4f342Schristos	addu	$3,$10
298276c4f342Schristos	lw	$14,6*4($4)
298376c4f342Schristos	addu	$7,$11
298476c4f342Schristos	lw	$15,7*4($4)
298576c4f342Schristos	addu	$24,$12
298676c4f342Schristos	sw	$1,0*4($4)
298776c4f342Schristos	addu	$25,$13
298876c4f342Schristos	sw	$2,1*4($4)
298976c4f342Schristos	addu	$30,$14
299076c4f342Schristos	sw	$3,2*4($4)
299176c4f342Schristos	addu	$31,$15
299276c4f342Schristos	sw	$7,3*4($4)
299376c4f342Schristos	sw	$24,4*4($4)
299476c4f342Schristos	sw	$25,5*4($4)
299576c4f342Schristos	sw	$30,6*4($4)
299676c4f342Schristos	sw	$31,7*4($4)
299776c4f342Schristos
299876c4f342Schristos	bne	$5,$23,.Loop
2999*e0ea3921Schristos	subu $6,192	# rewind $6
300076c4f342Schristos
300176c4f342Schristos	lw	$31,128-1*4($29)
300276c4f342Schristos	lw	$30,128-2*4($29)
300376c4f342Schristos	lw	$23,128-3*4($29)
300476c4f342Schristos	lw	$22,128-4*4($29)
300576c4f342Schristos	lw	$21,128-5*4($29)
300676c4f342Schristos	lw	$20,128-6*4($29)
300776c4f342Schristos	lw	$19,128-7*4($29)
300876c4f342Schristos	lw	$18,128-8*4($29)
300976c4f342Schristos	lw	$17,128-9*4($29)
301076c4f342Schristos	lw	$16,128-10*4($29)
301176c4f342Schristos	jr	$31
3012*e0ea3921Schristos	addu $29,128
301376c4f342Schristos.end	sha256_block_data_order
301476c4f342Schristos
301576c4f342Schristos.rdata
301676c4f342Schristos.align	5
301776c4f342SchristosK256:
301876c4f342Schristos	.word	0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5
301976c4f342Schristos	.word	0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5
302076c4f342Schristos	.word	0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3
302176c4f342Schristos	.word	0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174
302276c4f342Schristos	.word	0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc
302376c4f342Schristos	.word	0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da
302476c4f342Schristos	.word	0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7
302576c4f342Schristos	.word	0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967
302676c4f342Schristos	.word	0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13
302776c4f342Schristos	.word	0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85
302876c4f342Schristos	.word	0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3
302976c4f342Schristos	.word	0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070
303076c4f342Schristos	.word	0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5
303176c4f342Schristos	.word	0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3
303276c4f342Schristos	.word	0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208
303376c4f342Schristos	.word	0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
303476c4f342Schristos.asciiz	"SHA256 for MIPS, CRYPTOGAMS by <appro@openssl.org>"
303576c4f342Schristos.align	5
303676c4f342Schristos
3037