xref: /netbsd-src/crypto/external/bsd/openssl/lib/libcrypto/arch/mips/aes-mips.S (revision 1b3d6f93806f8821fe459e13ad13e605b37c6d43)
1e0ea3921Schristos#include "mips_arch.h"
2e0ea3921Schristos
376c4f342Schristos.text
476c4f342Schristos#if !defined(__mips_eabi) && (!defined(__vxworks) || defined(__pic__))
576c4f342Schristos.option	pic2
676c4f342Schristos#endif
776c4f342Schristos.set	noat
876c4f342Schristos.align	5
976c4f342Schristos.ent	_mips_AES_encrypt
1076c4f342Schristos_mips_AES_encrypt:
1176c4f342Schristos	.frame	$29,0,$31
1276c4f342Schristos	.set	reorder
1376c4f342Schristos	lw	$12,0($6)
1476c4f342Schristos	lw	$13,4($6)
1576c4f342Schristos	lw	$14,8($6)
1676c4f342Schristos	lw	$15,12($6)
1776c4f342Schristos	lw	$30,240($6)
18e0ea3921Schristos	addu $3,$6,16
1976c4f342Schristos
2076c4f342Schristos	xor	$8,$12
2176c4f342Schristos	xor	$9,$13
2276c4f342Schristos	xor	$10,$14
2376c4f342Schristos	xor	$11,$15
2476c4f342Schristos
25e0ea3921Schristos	subu	$30,1
2676c4f342Schristos#if defined(__mips_smartmips)
2776c4f342Schristos	ext	$1,$9,8,8
2876c4f342Schristos.Loop_enc:
2976c4f342Schristos	ext	$2,$10,8,8
3076c4f342Schristos	ext	$24,$11,8,8
3176c4f342Schristos	ext	$25,$8,8,8
3276c4f342Schristos	lwxs	$12,$1($7)		# Te1[s1>>16]
3376c4f342Schristos	ext	$1,$10,16,8
3476c4f342Schristos	lwxs	$13,$2($7)		# Te1[s2>>16]
3576c4f342Schristos	ext	$2,$11,16,8
3676c4f342Schristos	lwxs	$14,$24($7)		# Te1[s3>>16]
3776c4f342Schristos	ext	$24,$8,16,8
3876c4f342Schristos	lwxs	$15,$25($7)		# Te1[s0>>16]
3976c4f342Schristos	ext	$25,$9,16,8
4076c4f342Schristos
4176c4f342Schristos	lwxs	$16,$1($7)		# Te2[s2>>8]
4276c4f342Schristos	ext	$1,$11,24,8
4376c4f342Schristos	lwxs	$17,$2($7)		# Te2[s3>>8]
4476c4f342Schristos	ext	$2,$8,24,8
4576c4f342Schristos	lwxs	$18,$24($7)		# Te2[s0>>8]
4676c4f342Schristos	ext	$24,$9,24,8
4776c4f342Schristos	lwxs	$19,$25($7)		# Te2[s1>>8]
4876c4f342Schristos	ext	$25,$10,24,8
4976c4f342Schristos
5076c4f342Schristos	lwxs	$20,$1($7)		# Te3[s3]
5176c4f342Schristos	ext	$1,$8,0,8
5276c4f342Schristos	lwxs	$21,$2($7)		# Te3[s0]
5376c4f342Schristos	ext	$2,$9,0,8
5476c4f342Schristos	lwxs	$22,$24($7)		# Te3[s1]
5576c4f342Schristos	ext	$24,$10,0,8
5676c4f342Schristos	lwxs	$23,$25($7)		# Te3[s2]
5776c4f342Schristos	ext	$25,$11,0,8
5876c4f342Schristos
5976c4f342Schristos	rotr	$12,$12,24
6076c4f342Schristos	rotr	$13,$13,24
6176c4f342Schristos	rotr	$14,$14,24
6276c4f342Schristos	rotr	$15,$15,24
6376c4f342Schristos
6476c4f342Schristos	rotr	$16,$16,16
6576c4f342Schristos	rotr	$17,$17,16
6676c4f342Schristos	rotr	$18,$18,16
6776c4f342Schristos	rotr	$19,$19,16
6876c4f342Schristos
6976c4f342Schristos	xor	$12,$16
7076c4f342Schristos	lwxs	$16,$1($7)		# Te0[s0>>24]
7176c4f342Schristos	xor	$13,$17
7276c4f342Schristos	lwxs	$17,$2($7)		# Te0[s1>>24]
7376c4f342Schristos	xor	$14,$18
7476c4f342Schristos	lwxs	$18,$24($7)		# Te0[s2>>24]
7576c4f342Schristos	xor	$15,$19
7676c4f342Schristos	lwxs	$19,$25($7)		# Te0[s3>>24]
7776c4f342Schristos
7876c4f342Schristos	rotr	$20,$20,8
7976c4f342Schristos	lw	$8,0($3)
8076c4f342Schristos	rotr	$21,$21,8
8176c4f342Schristos	lw	$9,4($3)
8276c4f342Schristos	rotr	$22,$22,8
8376c4f342Schristos	lw	$10,8($3)
8476c4f342Schristos	rotr	$23,$23,8
8576c4f342Schristos	lw	$11,12($3)
8676c4f342Schristos
8776c4f342Schristos	xor	$12,$20
8876c4f342Schristos	xor	$13,$21
8976c4f342Schristos	xor	$14,$22
9076c4f342Schristos	xor	$15,$23
9176c4f342Schristos
9276c4f342Schristos	xor	$12,$16
9376c4f342Schristos	xor	$13,$17
9476c4f342Schristos	xor	$14,$18
9576c4f342Schristos	xor	$15,$19
9676c4f342Schristos
97e0ea3921Schristos	subu	$30,1
98e0ea3921Schristos	addu $3,16
9976c4f342Schristos	xor	$8,$12
10076c4f342Schristos	xor	$9,$13
10176c4f342Schristos	xor	$10,$14
10276c4f342Schristos	xor	$11,$15
10376c4f342Schristos	.set	noreorder
10476c4f342Schristos	bnez	$30,.Loop_enc
10576c4f342Schristos	ext	$1,$9,8,8
10676c4f342Schristos
10776c4f342Schristos	srl	$1,$9,6
10876c4f342Schristos#else
109*1b3d6f93Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
110*1b3d6f93Schristos	move	$1,$7
111*1b3d6f93Schristos	move	$2,$7
112*1b3d6f93Schristos	move	$24,$7
113*1b3d6f93Schristos	move	$25,$7
114*1b3d6f93Schristos	ext	$12,$9,8,8
115*1b3d6f93Schristos.Loop_enc:
116*1b3d6f93Schristos	ext	$13,$10,8,8
117*1b3d6f93Schristos	ext	$14,$11,8,8
118*1b3d6f93Schristos	ext	$15,$8,8,8
119*1b3d6f93Schristos	ins $1,$12,2,8
120*1b3d6f93Schristos	ins $2,$13,2,8
121*1b3d6f93Schristos	ins $24,$14,2,8
122*1b3d6f93Schristos	ins $25,$15,2,8
123*1b3d6f93Schristos	lw	$12,0($1)		# Te1[s1>>16]
124*1b3d6f93Schristos	ext	$16,$10,16,8
125*1b3d6f93Schristos	lw	$13,0($2)		# Te1[s2>>16]
126*1b3d6f93Schristos	ext	$17,$11,16,8
127*1b3d6f93Schristos	lw	$14,0($24)		# Te1[s3>>16]
128*1b3d6f93Schristos	ext	$18,$8,16,8
129*1b3d6f93Schristos	lw	$15,0($25)		# Te1[s0>>16]
130*1b3d6f93Schristos	ext	$19,$9,16,8
131*1b3d6f93Schristos	ins $1,$16,2,8
132*1b3d6f93Schristos	ins $2,$17,2,8
133*1b3d6f93Schristos	ins $24,$18,2,8
134*1b3d6f93Schristos	ins $25,$19,2,8
135*1b3d6f93Schristos#else
13676c4f342Schristos	srl	$1,$9,6
13776c4f342Schristos.Loop_enc:
13876c4f342Schristos	srl	$2,$10,6
13976c4f342Schristos	srl	$24,$11,6
14076c4f342Schristos	srl	$25,$8,6
14176c4f342Schristos	and	$1,0x3fc
14276c4f342Schristos	and	$2,0x3fc
14376c4f342Schristos	and	$24,0x3fc
14476c4f342Schristos	and	$25,0x3fc
145e0ea3921Schristos	addu $1,$7
146e0ea3921Schristos	addu $2,$7
147e0ea3921Schristos	addu $24,$7
148e0ea3921Schristos	addu $25,$7
14976c4f342Schristos	lwl	$12,2($1)		# Te1[s1>>16]
15076c4f342Schristos	lwl	$13,2($2)		# Te1[s2>>16]
15176c4f342Schristos	lwl	$14,2($24)		# Te1[s3>>16]
15276c4f342Schristos	lwl	$15,2($25)		# Te1[s0>>16]
15376c4f342Schristos	lwr	$12,3($1)		# Te1[s1>>16]
15476c4f342Schristos	srl	$1,$10,14
15576c4f342Schristos	lwr	$13,3($2)		# Te1[s2>>16]
15676c4f342Schristos	srl	$2,$11,14
15776c4f342Schristos	lwr	$14,3($24)		# Te1[s3>>16]
15876c4f342Schristos	srl	$24,$8,14
15976c4f342Schristos	lwr	$15,3($25)		# Te1[s0>>16]
16076c4f342Schristos	srl	$25,$9,14
16176c4f342Schristos	and	$1,0x3fc
16276c4f342Schristos	and	$2,0x3fc
16376c4f342Schristos	and	$24,0x3fc
16476c4f342Schristos	and	$25,0x3fc
165e0ea3921Schristos	addu $1,$7
166e0ea3921Schristos	addu $2,$7
167e0ea3921Schristos	addu $24,$7
168e0ea3921Schristos	addu $25,$7
169*1b3d6f93Schristos#endif
17076c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
17176c4f342Schristos	rotr	$12,$12,24
17276c4f342Schristos	rotr	$13,$13,24
17376c4f342Schristos	rotr	$14,$14,24
17476c4f342Schristos	rotr	$15,$15,24
17576c4f342Schristos# if defined(_MIPSEL)
17676c4f342Schristos	lw	$16,0($1)		# Te2[s2>>8]
177*1b3d6f93Schristos	ext	$20,$11,24,8
17876c4f342Schristos	lw	$17,0($2)		# Te2[s3>>8]
179*1b3d6f93Schristos	ext	$21,$8,24,8
18076c4f342Schristos	lw	$18,0($24)		# Te2[s0>>8]
181*1b3d6f93Schristos	ext	$22,$9,24,8
18276c4f342Schristos	lw	$19,0($25)		# Te2[s1>>8]
183*1b3d6f93Schristos	ext	$23,$10,24,8
184*1b3d6f93Schristos	ins $1,$20,2,8
185*1b3d6f93Schristos	ins $2,$21,2,8
186*1b3d6f93Schristos	ins $24,$22,2,8
187*1b3d6f93Schristos	ins $25,$23,2,8
18876c4f342Schristos
18976c4f342Schristos	lw	$20,0($1)		# Te3[s3]
19076c4f342Schristos	ins $1,$8,2,8
19176c4f342Schristos	lw	$21,0($2)		# Te3[s0]
19276c4f342Schristos	ins $2,$9,2,8
19376c4f342Schristos	lw	$22,0($24)		# Te3[s1]
19476c4f342Schristos	ins $24,$10,2,8
19576c4f342Schristos	lw	$23,0($25)		# Te3[s2]
19676c4f342Schristos	ins $25,$11,2,8
19776c4f342Schristos# else
19876c4f342Schristos	lw	$16,0($1)		# Te2[s2>>8]
19976c4f342Schristos	ins $1,$11,2,8
20076c4f342Schristos	lw	$17,0($2)		# Te2[s3>>8]
20176c4f342Schristos	ins $2,$8,2,8
20276c4f342Schristos	lw	$18,0($24)		# Te2[s0>>8]
20376c4f342Schristos	ins $24,$9,2,8
20476c4f342Schristos	lw	$19,0($25)		# Te2[s1>>8]
20576c4f342Schristos	ins $25,$10,2,8
20676c4f342Schristos
20776c4f342Schristos	lw	$20,0($1)		# Te3[s3]
20876c4f342Schristos	sll	$1,$8,2
20976c4f342Schristos	lw	$21,0($2)		# Te3[s0]
21076c4f342Schristos	sll	$2,$9,2
21176c4f342Schristos	lw	$22,0($24)		# Te3[s1]
21276c4f342Schristos	sll	$24,$10,2
21376c4f342Schristos	lw	$23,0($25)		# Te3[s2]
21476c4f342Schristos	sll	$25,$11,2
21576c4f342Schristos
21676c4f342Schristos	and	$1,0x3fc
21776c4f342Schristos	and	$2,0x3fc
21876c4f342Schristos	and	$24,0x3fc
21976c4f342Schristos	and	$25,0x3fc
220e0ea3921Schristos	addu $1,$7
221e0ea3921Schristos	addu $2,$7
222e0ea3921Schristos	addu $24,$7
223e0ea3921Schristos	addu $25,$7
22476c4f342Schristos# endif
22576c4f342Schristos	rotr	$16,$16,16
22676c4f342Schristos	rotr	$17,$17,16
22776c4f342Schristos	rotr	$18,$18,16
22876c4f342Schristos	rotr	$19,$19,16
22976c4f342Schristos
23076c4f342Schristos	rotr	$20,$20,8
23176c4f342Schristos	rotr	$21,$21,8
23276c4f342Schristos	rotr	$22,$22,8
23376c4f342Schristos	rotr	$23,$23,8
23476c4f342Schristos#else
23576c4f342Schristos	lwl	$16,1($1)		# Te2[s2>>8]
23676c4f342Schristos	lwl	$17,1($2)		# Te2[s3>>8]
23776c4f342Schristos	lwl	$18,1($24)		# Te2[s0>>8]
23876c4f342Schristos	lwl	$19,1($25)		# Te2[s1>>8]
23976c4f342Schristos	lwr	$16,2($1)		# Te2[s2>>8]
24076c4f342Schristos	srl	$1,$11,22
24176c4f342Schristos	lwr	$17,2($2)		# Te2[s3>>8]
24276c4f342Schristos	srl	$2,$8,22
24376c4f342Schristos	lwr	$18,2($24)		# Te2[s0>>8]
24476c4f342Schristos	srl	$24,$9,22
24576c4f342Schristos	lwr	$19,2($25)		# Te2[s1>>8]
24676c4f342Schristos	srl	$25,$10,22
24776c4f342Schristos
24876c4f342Schristos	and	$1,0x3fc
24976c4f342Schristos	and	$2,0x3fc
25076c4f342Schristos	and	$24,0x3fc
25176c4f342Schristos	and	$25,0x3fc
252e0ea3921Schristos	addu $1,$7
253e0ea3921Schristos	addu $2,$7
254e0ea3921Schristos	addu $24,$7
255e0ea3921Schristos	addu $25,$7
25676c4f342Schristos	lwl	$20,0($1)		# Te3[s3]
25776c4f342Schristos	lwl	$21,0($2)		# Te3[s0]
25876c4f342Schristos	lwl	$22,0($24)		# Te3[s1]
25976c4f342Schristos	lwl	$23,0($25)		# Te3[s2]
26076c4f342Schristos	lwr	$20,1($1)		# Te3[s3]
26176c4f342Schristos	sll	$1,$8,2
26276c4f342Schristos	lwr	$21,1($2)		# Te3[s0]
26376c4f342Schristos	sll	$2,$9,2
26476c4f342Schristos	lwr	$22,1($24)		# Te3[s1]
26576c4f342Schristos	sll	$24,$10,2
26676c4f342Schristos	lwr	$23,1($25)		# Te3[s2]
26776c4f342Schristos	sll	$25,$11,2
26876c4f342Schristos
26976c4f342Schristos	and	$1,0x3fc
27076c4f342Schristos	and	$2,0x3fc
27176c4f342Schristos	and	$24,0x3fc
27276c4f342Schristos	and	$25,0x3fc
273e0ea3921Schristos	addu $1,$7
274e0ea3921Schristos	addu $2,$7
275e0ea3921Schristos	addu $24,$7
276e0ea3921Schristos	addu $25,$7
27776c4f342Schristos#endif
27876c4f342Schristos	xor	$12,$16
27976c4f342Schristos	lw	$16,0($1)		# Te0[s0>>24]
28076c4f342Schristos	xor	$13,$17
28176c4f342Schristos	lw	$17,0($2)		# Te0[s1>>24]
28276c4f342Schristos	xor	$14,$18
28376c4f342Schristos	lw	$18,0($24)		# Te0[s2>>24]
28476c4f342Schristos	xor	$15,$19
28576c4f342Schristos	lw	$19,0($25)		# Te0[s3>>24]
28676c4f342Schristos
28776c4f342Schristos	xor	$12,$20
28876c4f342Schristos	lw	$8,0($3)
28976c4f342Schristos	xor	$13,$21
29076c4f342Schristos	lw	$9,4($3)
29176c4f342Schristos	xor	$14,$22
29276c4f342Schristos	lw	$10,8($3)
29376c4f342Schristos	xor	$15,$23
29476c4f342Schristos	lw	$11,12($3)
29576c4f342Schristos
29676c4f342Schristos	xor	$12,$16
29776c4f342Schristos	xor	$13,$17
29876c4f342Schristos	xor	$14,$18
29976c4f342Schristos	xor	$15,$19
30076c4f342Schristos
301e0ea3921Schristos	subu	$30,1
302e0ea3921Schristos	addu $3,16
30376c4f342Schristos	xor	$8,$12
30476c4f342Schristos	xor	$9,$13
30576c4f342Schristos	xor	$10,$14
30676c4f342Schristos	xor	$11,$15
30776c4f342Schristos	.set	noreorder
30876c4f342Schristos	bnez	$30,.Loop_enc
309*1b3d6f93Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
310*1b3d6f93Schristos	ext	$12,$9,8,8
311*1b3d6f93Schristos#endif
31276c4f342Schristos	srl	$1,$9,6
31376c4f342Schristos#endif
31476c4f342Schristos
31576c4f342Schristos	.set	reorder
31676c4f342Schristos	srl	$2,$10,6
31776c4f342Schristos	srl	$24,$11,6
31876c4f342Schristos	srl	$25,$8,6
31976c4f342Schristos	and	$1,0x3fc
32076c4f342Schristos	and	$2,0x3fc
32176c4f342Schristos	and	$24,0x3fc
32276c4f342Schristos	and	$25,0x3fc
323e0ea3921Schristos	addu $1,$7
324e0ea3921Schristos	addu $2,$7
325e0ea3921Schristos	addu $24,$7
326e0ea3921Schristos	addu $25,$7
32776c4f342Schristos	lbu	$12,2($1)		# Te4[s1>>16]
32876c4f342Schristos	srl	$1,$10,14
32976c4f342Schristos	lbu	$13,2($2)		# Te4[s2>>16]
33076c4f342Schristos	srl	$2,$11,14
33176c4f342Schristos	lbu	$14,2($24)		# Te4[s3>>16]
33276c4f342Schristos	srl	$24,$8,14
33376c4f342Schristos	lbu	$15,2($25)		# Te4[s0>>16]
33476c4f342Schristos	srl	$25,$9,14
33576c4f342Schristos
33676c4f342Schristos	and	$1,0x3fc
33776c4f342Schristos	and	$2,0x3fc
33876c4f342Schristos	and	$24,0x3fc
33976c4f342Schristos	and	$25,0x3fc
340e0ea3921Schristos	addu $1,$7
341e0ea3921Schristos	addu $2,$7
342e0ea3921Schristos	addu $24,$7
343e0ea3921Schristos	addu $25,$7
34476c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
34576c4f342Schristos# if defined(_MIPSEL)
34676c4f342Schristos	lbu	$16,2($1)		# Te4[s2>>8]
34776c4f342Schristos	ins $1,$8,2,8
34876c4f342Schristos	lbu	$17,2($2)		# Te4[s3>>8]
34976c4f342Schristos	ins $2,$9,2,8
35076c4f342Schristos	lbu	$18,2($24)		# Te4[s0>>8]
35176c4f342Schristos	ins $24,$10,2,8
35276c4f342Schristos	lbu	$19,2($25)		# Te4[s1>>8]
35376c4f342Schristos	ins $25,$11,2,8
35476c4f342Schristos
35576c4f342Schristos	lbu	$20,2($1)		# Te4[s0>>24]
35676c4f342Schristos	srl	$1,$11,22
35776c4f342Schristos	lbu	$21,2($2)		# Te4[s1>>24]
35876c4f342Schristos	srl	$2,$8,22
35976c4f342Schristos	lbu	$22,2($24)		# Te4[s2>>24]
36076c4f342Schristos	srl	$24,$9,22
36176c4f342Schristos	lbu	$23,2($25)		# Te4[s3>>24]
36276c4f342Schristos	srl	$25,$10,22
36376c4f342Schristos
36476c4f342Schristos	and	$1,0x3fc
36576c4f342Schristos	and	$2,0x3fc
36676c4f342Schristos	and	$24,0x3fc
36776c4f342Schristos	and	$25,0x3fc
368e0ea3921Schristos	addu $1,$7
369e0ea3921Schristos	addu $2,$7
370e0ea3921Schristos	addu $24,$7
371e0ea3921Schristos	addu $25,$7
37276c4f342Schristos# else
37376c4f342Schristos	lbu	$16,2($1)		# Te4[s2>>8]
37476c4f342Schristos	sll	$1,$8,2
37576c4f342Schristos	lbu	$17,2($2)		# Te4[s3>>8]
37676c4f342Schristos	sll	$2,$9,2
37776c4f342Schristos	lbu	$18,2($24)		# Te4[s0>>8]
37876c4f342Schristos	sll	$24,$10,2
37976c4f342Schristos	lbu	$19,2($25)		# Te4[s1>>8]
38076c4f342Schristos	sll	$25,$11,2
38176c4f342Schristos
38276c4f342Schristos	and	$1,0x3fc
38376c4f342Schristos	and	$2,0x3fc
38476c4f342Schristos	and	$24,0x3fc
38576c4f342Schristos	and	$25,0x3fc
386e0ea3921Schristos	addu $1,$7
387e0ea3921Schristos	addu $2,$7
388e0ea3921Schristos	addu $24,$7
389e0ea3921Schristos	addu $25,$7
39076c4f342Schristos	lbu	$20,2($1)		# Te4[s0>>24]
39176c4f342Schristos	ins $1,$11,2,8
39276c4f342Schristos	lbu	$21,2($2)		# Te4[s1>>24]
39376c4f342Schristos	ins $2,$8,2,8
39476c4f342Schristos	lbu	$22,2($24)		# Te4[s2>>24]
39576c4f342Schristos	ins $24,$9,2,8
39676c4f342Schristos	lbu	$23,2($25)		# Te4[s3>>24]
39776c4f342Schristos	ins $25,$10,2,8
39876c4f342Schristos# endif
39976c4f342Schristos	sll	$12,$12,8
40076c4f342Schristos	sll	$13,$13,8
40176c4f342Schristos	sll	$14,$14,8
40276c4f342Schristos	sll	$15,$15,8
40376c4f342Schristos
40476c4f342Schristos	ins	$12,$16,16,8
40576c4f342Schristos	lbu	$16,2($1)		# Te4[s3]
40676c4f342Schristos	ins	$13,$17,16,8
40776c4f342Schristos	lbu	$17,2($2)		# Te4[s0]
40876c4f342Schristos	ins	$14,$18,16,8
40976c4f342Schristos	lbu	$18,2($24)		# Te4[s1]
41076c4f342Schristos	ins	$15,$19,16,8
41176c4f342Schristos	lbu	$19,2($25)		# Te4[s2]
41276c4f342Schristos
41376c4f342Schristos	ins	$12,$20,0,8
41476c4f342Schristos	lw	$8,0($3)
41576c4f342Schristos	ins	$13,$21,0,8
41676c4f342Schristos	lw	$9,4($3)
41776c4f342Schristos	ins	$14,$22,0,8
41876c4f342Schristos	lw	$10,8($3)
41976c4f342Schristos	ins	$15,$23,0,8
42076c4f342Schristos	lw	$11,12($3)
42176c4f342Schristos
42276c4f342Schristos	ins	$12,$16,24,8
42376c4f342Schristos	ins	$13,$17,24,8
42476c4f342Schristos	ins	$14,$18,24,8
42576c4f342Schristos	ins	$15,$19,24,8
42676c4f342Schristos#else
42776c4f342Schristos	lbu	$16,2($1)		# Te4[s2>>8]
42876c4f342Schristos	sll	$1,$8,2
42976c4f342Schristos	lbu	$17,2($2)		# Te4[s3>>8]
43076c4f342Schristos	sll	$2,$9,2
43176c4f342Schristos	lbu	$18,2($24)		# Te4[s0>>8]
43276c4f342Schristos	sll	$24,$10,2
43376c4f342Schristos	lbu	$19,2($25)		# Te4[s1>>8]
43476c4f342Schristos	sll	$25,$11,2
43576c4f342Schristos
43676c4f342Schristos	and	$1,0x3fc
43776c4f342Schristos	and	$2,0x3fc
43876c4f342Schristos	and	$24,0x3fc
43976c4f342Schristos	and	$25,0x3fc
440e0ea3921Schristos	addu $1,$7
441e0ea3921Schristos	addu $2,$7
442e0ea3921Schristos	addu $24,$7
443e0ea3921Schristos	addu $25,$7
44476c4f342Schristos	lbu	$20,2($1)		# Te4[s0>>24]
44576c4f342Schristos	srl	$1,$11,22
44676c4f342Schristos	lbu	$21,2($2)		# Te4[s1>>24]
44776c4f342Schristos	srl	$2,$8,22
44876c4f342Schristos	lbu	$22,2($24)		# Te4[s2>>24]
44976c4f342Schristos	srl	$24,$9,22
45076c4f342Schristos	lbu	$23,2($25)		# Te4[s3>>24]
45176c4f342Schristos	srl	$25,$10,22
45276c4f342Schristos
45376c4f342Schristos	and	$1,0x3fc
45476c4f342Schristos	and	$2,0x3fc
45576c4f342Schristos	and	$24,0x3fc
45676c4f342Schristos	and	$25,0x3fc
457e0ea3921Schristos	addu $1,$7
458e0ea3921Schristos	addu $2,$7
459e0ea3921Schristos	addu $24,$7
460e0ea3921Schristos	addu $25,$7
46176c4f342Schristos
46276c4f342Schristos	sll	$12,$12,8
46376c4f342Schristos	sll	$13,$13,8
46476c4f342Schristos	sll	$14,$14,8
46576c4f342Schristos	sll	$15,$15,8
46676c4f342Schristos
46776c4f342Schristos	sll	$16,$16,16
46876c4f342Schristos	sll	$17,$17,16
46976c4f342Schristos	sll	$18,$18,16
47076c4f342Schristos	sll	$19,$19,16
47176c4f342Schristos
47276c4f342Schristos	xor	$12,$16
47376c4f342Schristos	lbu	$16,2($1)		# Te4[s3]
47476c4f342Schristos	xor	$13,$17
47576c4f342Schristos	lbu	$17,2($2)		# Te4[s0]
47676c4f342Schristos	xor	$14,$18
47776c4f342Schristos	lbu	$18,2($24)		# Te4[s1]
47876c4f342Schristos	xor	$15,$19
47976c4f342Schristos	lbu	$19,2($25)		# Te4[s2]
48076c4f342Schristos
48176c4f342Schristos	#sll	$20,$20,0
48276c4f342Schristos	lw	$8,0($3)
48376c4f342Schristos	#sll	$21,$21,0
48476c4f342Schristos	lw	$9,4($3)
48576c4f342Schristos	#sll	$22,$22,0
48676c4f342Schristos	lw	$10,8($3)
48776c4f342Schristos	#sll	$23,$23,0
48876c4f342Schristos	lw	$11,12($3)
48976c4f342Schristos
49076c4f342Schristos	xor	$12,$20
49176c4f342Schristos	xor	$13,$21
49276c4f342Schristos	xor	$14,$22
49376c4f342Schristos	xor	$15,$23
49476c4f342Schristos
49576c4f342Schristos	sll	$16,$16,24
49676c4f342Schristos	sll	$17,$17,24
49776c4f342Schristos	sll	$18,$18,24
49876c4f342Schristos	sll	$19,$19,24
49976c4f342Schristos
50076c4f342Schristos	xor	$12,$16
50176c4f342Schristos	xor	$13,$17
50276c4f342Schristos	xor	$14,$18
50376c4f342Schristos	xor	$15,$19
50476c4f342Schristos#endif
50576c4f342Schristos	xor	$8,$12
50676c4f342Schristos	xor	$9,$13
50776c4f342Schristos	xor	$10,$14
50876c4f342Schristos	xor	$11,$15
50976c4f342Schristos
51076c4f342Schristos	jr	$31
51176c4f342Schristos.end	_mips_AES_encrypt
51276c4f342Schristos
51376c4f342Schristos.align	5
51476c4f342Schristos.globl	AES_encrypt
51576c4f342Schristos.ent	AES_encrypt
51676c4f342SchristosAES_encrypt:
51776c4f342Schristos	.frame	$29,64,$31
51876c4f342Schristos	.mask	0xc0ff0000,-4
51976c4f342Schristos	.set	noreorder
5206410c867Schristos	.cpload	$25
521e0ea3921Schristos	subu $29,64
52276c4f342Schristos	sw	$31,64-1*4($29)
52376c4f342Schristos	sw	$30,64-2*4($29)
52476c4f342Schristos	sw	$23,64-3*4($29)
52576c4f342Schristos	sw	$22,64-4*4($29)
52676c4f342Schristos	sw	$21,64-5*4($29)
52776c4f342Schristos	sw	$20,64-6*4($29)
52876c4f342Schristos	sw	$19,64-7*4($29)
52976c4f342Schristos	sw	$18,64-8*4($29)
53076c4f342Schristos	sw	$17,64-9*4($29)
53176c4f342Schristos	sw	$16,64-10*4($29)
53276c4f342Schristos	.set	reorder
53376c4f342Schristos	la	$7,AES_Te		# PIC-ified 'load address'
53476c4f342Schristos
535e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
536e0ea3921Schristos	lw	$8,0($4)
537e0ea3921Schristos	lw	$9,4($4)
538e0ea3921Schristos	lw	$10,8($4)
539e0ea3921Schristos	lw	$11,12($4)
540e0ea3921Schristos#else
54176c4f342Schristos	lwl	$8,0+3($4)
54276c4f342Schristos	lwl	$9,4+3($4)
54376c4f342Schristos	lwl	$10,8+3($4)
54476c4f342Schristos	lwl	$11,12+3($4)
54576c4f342Schristos	lwr	$8,0+0($4)
54676c4f342Schristos	lwr	$9,4+0($4)
54776c4f342Schristos	lwr	$10,8+0($4)
54876c4f342Schristos	lwr	$11,12+0($4)
549e0ea3921Schristos#endif
55076c4f342Schristos
55176c4f342Schristos	bal	_mips_AES_encrypt
55276c4f342Schristos
553e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
554e0ea3921Schristos	sw	$8,0($5)
555e0ea3921Schristos	sw	$9,4($5)
556e0ea3921Schristos	sw	$10,8($5)
557e0ea3921Schristos	sw	$11,12($5)
558e0ea3921Schristos#else
55976c4f342Schristos	swr	$8,0+0($5)
56076c4f342Schristos	swr	$9,4+0($5)
56176c4f342Schristos	swr	$10,8+0($5)
56276c4f342Schristos	swr	$11,12+0($5)
56376c4f342Schristos	swl	$8,0+3($5)
56476c4f342Schristos	swl	$9,4+3($5)
56576c4f342Schristos	swl	$10,8+3($5)
56676c4f342Schristos	swl	$11,12+3($5)
567e0ea3921Schristos#endif
56876c4f342Schristos
56976c4f342Schristos	.set	noreorder
57076c4f342Schristos	lw	$31,64-1*4($29)
57176c4f342Schristos	lw	$30,64-2*4($29)
57276c4f342Schristos	lw	$23,64-3*4($29)
57376c4f342Schristos	lw	$22,64-4*4($29)
57476c4f342Schristos	lw	$21,64-5*4($29)
57576c4f342Schristos	lw	$20,64-6*4($29)
57676c4f342Schristos	lw	$19,64-7*4($29)
57776c4f342Schristos	lw	$18,64-8*4($29)
57876c4f342Schristos	lw	$17,64-9*4($29)
57976c4f342Schristos	lw	$16,64-10*4($29)
58076c4f342Schristos	jr	$31
581e0ea3921Schristos	addu $29,64
58276c4f342Schristos.end	AES_encrypt
58376c4f342Schristos.align	5
58476c4f342Schristos.ent	_mips_AES_decrypt
58576c4f342Schristos_mips_AES_decrypt:
58676c4f342Schristos	.frame	$29,0,$31
58776c4f342Schristos	.set	reorder
58876c4f342Schristos	lw	$12,0($6)
58976c4f342Schristos	lw	$13,4($6)
59076c4f342Schristos	lw	$14,8($6)
59176c4f342Schristos	lw	$15,12($6)
59276c4f342Schristos	lw	$30,240($6)
593e0ea3921Schristos	addu $3,$6,16
59476c4f342Schristos
59576c4f342Schristos	xor	$8,$12
59676c4f342Schristos	xor	$9,$13
59776c4f342Schristos	xor	$10,$14
59876c4f342Schristos	xor	$11,$15
59976c4f342Schristos
600e0ea3921Schristos	subu	$30,1
60176c4f342Schristos#if defined(__mips_smartmips)
60276c4f342Schristos	ext	$1,$11,8,8
60376c4f342Schristos.Loop_dec:
60476c4f342Schristos	ext	$2,$8,8,8
60576c4f342Schristos	ext	$24,$9,8,8
60676c4f342Schristos	ext	$25,$10,8,8
60776c4f342Schristos	lwxs	$12,$1($7)		# Td1[s3>>16]
60876c4f342Schristos	ext	$1,$10,16,8
60976c4f342Schristos	lwxs	$13,$2($7)		# Td1[s0>>16]
61076c4f342Schristos	ext	$2,$11,16,8
61176c4f342Schristos	lwxs	$14,$24($7)		# Td1[s1>>16]
61276c4f342Schristos	ext	$24,$8,16,8
61376c4f342Schristos	lwxs	$15,$25($7)		# Td1[s2>>16]
61476c4f342Schristos	ext	$25,$9,16,8
61576c4f342Schristos
61676c4f342Schristos	lwxs	$16,$1($7)		# Td2[s2>>8]
61776c4f342Schristos	ext	$1,$9,24,8
61876c4f342Schristos	lwxs	$17,$2($7)		# Td2[s3>>8]
61976c4f342Schristos	ext	$2,$10,24,8
62076c4f342Schristos	lwxs	$18,$24($7)		# Td2[s0>>8]
62176c4f342Schristos	ext	$24,$11,24,8
62276c4f342Schristos	lwxs	$19,$25($7)		# Td2[s1>>8]
62376c4f342Schristos	ext	$25,$8,24,8
62476c4f342Schristos
62576c4f342Schristos	lwxs	$20,$1($7)		# Td3[s1]
62676c4f342Schristos	ext	$1,$8,0,8
62776c4f342Schristos	lwxs	$21,$2($7)		# Td3[s2]
62876c4f342Schristos	ext	$2,$9,0,8
62976c4f342Schristos	lwxs	$22,$24($7)		# Td3[s3]
63076c4f342Schristos	ext	$24,$10,0,8
63176c4f342Schristos	lwxs	$23,$25($7)		# Td3[s0]
63276c4f342Schristos	ext	$25,$11,0,8
63376c4f342Schristos
63476c4f342Schristos	rotr	$12,$12,24
63576c4f342Schristos	rotr	$13,$13,24
63676c4f342Schristos	rotr	$14,$14,24
63776c4f342Schristos	rotr	$15,$15,24
63876c4f342Schristos
63976c4f342Schristos	rotr	$16,$16,16
64076c4f342Schristos	rotr	$17,$17,16
64176c4f342Schristos	rotr	$18,$18,16
64276c4f342Schristos	rotr	$19,$19,16
64376c4f342Schristos
64476c4f342Schristos	xor	$12,$16
64576c4f342Schristos	lwxs	$16,$1($7)		# Td0[s0>>24]
64676c4f342Schristos	xor	$13,$17
64776c4f342Schristos	lwxs	$17,$2($7)		# Td0[s1>>24]
64876c4f342Schristos	xor	$14,$18
64976c4f342Schristos	lwxs	$18,$24($7)		# Td0[s2>>24]
65076c4f342Schristos	xor	$15,$19
65176c4f342Schristos	lwxs	$19,$25($7)		# Td0[s3>>24]
65276c4f342Schristos
65376c4f342Schristos	rotr	$20,$20,8
65476c4f342Schristos	lw	$8,0($3)
65576c4f342Schristos	rotr	$21,$21,8
65676c4f342Schristos	lw	$9,4($3)
65776c4f342Schristos	rotr	$22,$22,8
65876c4f342Schristos	lw	$10,8($3)
65976c4f342Schristos	rotr	$23,$23,8
66076c4f342Schristos	lw	$11,12($3)
66176c4f342Schristos
66276c4f342Schristos	xor	$12,$20
66376c4f342Schristos	xor	$13,$21
66476c4f342Schristos	xor	$14,$22
66576c4f342Schristos	xor	$15,$23
66676c4f342Schristos
66776c4f342Schristos	xor	$12,$16
66876c4f342Schristos	xor	$13,$17
66976c4f342Schristos	xor	$14,$18
67076c4f342Schristos	xor	$15,$19
67176c4f342Schristos
672e0ea3921Schristos	subu	$30,1
673e0ea3921Schristos	addu $3,16
67476c4f342Schristos	xor	$8,$12
67576c4f342Schristos	xor	$9,$13
67676c4f342Schristos	xor	$10,$14
67776c4f342Schristos	xor	$11,$15
67876c4f342Schristos	.set	noreorder
67976c4f342Schristos	bnez	$30,.Loop_dec
68076c4f342Schristos	ext	$1,$11,8,8
68176c4f342Schristos
68276c4f342Schristos	srl	$1,$11,6
68376c4f342Schristos#else
684*1b3d6f93Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
685*1b3d6f93Schristos	move	$1,$7
686*1b3d6f93Schristos	move	$2,$7
687*1b3d6f93Schristos	move	$24,$7
688*1b3d6f93Schristos	move	$25,$7
689*1b3d6f93Schristos	ext	$12,$11,8,8
690*1b3d6f93Schristos.Loop_dec:
691*1b3d6f93Schristos	ext	$13,$8,8,8
692*1b3d6f93Schristos	ext	$14,$9,8,8
693*1b3d6f93Schristos	ext	$15,$10,8,8
694*1b3d6f93Schristos	ins $1,$12,2,8
695*1b3d6f93Schristos	ins $2,$13,2,8
696*1b3d6f93Schristos	ins $24,$14,2,8
697*1b3d6f93Schristos	ins $25,$15,2,8
698*1b3d6f93Schristos	lw	$12,0($1)		# Td1[s3>>16]
699*1b3d6f93Schristos	ext	$16,$10,16,8
700*1b3d6f93Schristos	lw	$13,0($2)		# Td1[s0>>16]
701*1b3d6f93Schristos	ext	$17,$11,16,8
702*1b3d6f93Schristos	lw	$14,0($24)		# Td1[s1>>16]
703*1b3d6f93Schristos	ext	$18,$8,16,8
704*1b3d6f93Schristos	lw	$15,0($25)		# Td1[s2>>16]
705*1b3d6f93Schristos	ext	$19,$9,16,8
706*1b3d6f93Schristos	ins $1,$16,2,8
707*1b3d6f93Schristos	ins $2,$17,2,8
708*1b3d6f93Schristos	ins $24,$18,2,8
709*1b3d6f93Schristos	ins $25,$19,2,8
710*1b3d6f93Schristos#else
71176c4f342Schristos	srl	$1,$11,6
71276c4f342Schristos.Loop_dec:
71376c4f342Schristos	srl	$2,$8,6
71476c4f342Schristos	srl	$24,$9,6
71576c4f342Schristos	srl	$25,$10,6
71676c4f342Schristos	and	$1,0x3fc
71776c4f342Schristos	and	$2,0x3fc
71876c4f342Schristos	and	$24,0x3fc
71976c4f342Schristos	and	$25,0x3fc
720e0ea3921Schristos	addu $1,$7
721e0ea3921Schristos	addu $2,$7
722e0ea3921Schristos	addu $24,$7
723e0ea3921Schristos	addu $25,$7
72476c4f342Schristos	lwl	$12,2($1)		# Td1[s3>>16]
72576c4f342Schristos	lwl	$13,2($2)		# Td1[s0>>16]
72676c4f342Schristos	lwl	$14,2($24)		# Td1[s1>>16]
72776c4f342Schristos	lwl	$15,2($25)		# Td1[s2>>16]
72876c4f342Schristos	lwr	$12,3($1)		# Td1[s3>>16]
72976c4f342Schristos	srl	$1,$10,14
73076c4f342Schristos	lwr	$13,3($2)		# Td1[s0>>16]
73176c4f342Schristos	srl	$2,$11,14
73276c4f342Schristos	lwr	$14,3($24)		# Td1[s1>>16]
73376c4f342Schristos	srl	$24,$8,14
73476c4f342Schristos	lwr	$15,3($25)		# Td1[s2>>16]
73576c4f342Schristos	srl	$25,$9,14
73676c4f342Schristos	and	$1,0x3fc
73776c4f342Schristos	and	$2,0x3fc
73876c4f342Schristos	and	$24,0x3fc
73976c4f342Schristos	and	$25,0x3fc
740e0ea3921Schristos	addu $1,$7
741e0ea3921Schristos	addu $2,$7
742e0ea3921Schristos	addu $24,$7
743e0ea3921Schristos	addu $25,$7
744*1b3d6f93Schristos#endif
74576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
74676c4f342Schristos	rotr	$12,$12,24
74776c4f342Schristos	rotr	$13,$13,24
74876c4f342Schristos	rotr	$14,$14,24
74976c4f342Schristos	rotr	$15,$15,24
75076c4f342Schristos# if defined(_MIPSEL)
75176c4f342Schristos	lw	$16,0($1)		# Td2[s2>>8]
752*1b3d6f93Schristos	ext	$20,$9,24,8
75376c4f342Schristos	lw	$17,0($2)		# Td2[s3>>8]
754*1b3d6f93Schristos	ext	$21,$10,24,8
75576c4f342Schristos	lw	$18,0($24)		# Td2[s0>>8]
756*1b3d6f93Schristos	ext	$22,$11,24,8
75776c4f342Schristos	lw	$19,0($25)		# Td2[s1>>8]
758*1b3d6f93Schristos	ext	$23,$8,24,8
759*1b3d6f93Schristos	ins $1,$20,2,8
760*1b3d6f93Schristos	ins $2,$21,2,8
761*1b3d6f93Schristos	ins $24,$22,2,8
762*1b3d6f93Schristos	ins $25,$23,2,8
76376c4f342Schristos	lw	$20,0($1)		# Td3[s1]
76476c4f342Schristos	ins $1,$8,2,8
76576c4f342Schristos	lw	$21,0($2)		# Td3[s2]
76676c4f342Schristos	ins $2,$9,2,8
76776c4f342Schristos	lw	$22,0($24)		# Td3[s3]
76876c4f342Schristos	ins $24,$10,2,8
76976c4f342Schristos	lw	$23,0($25)		# Td3[s0]
77076c4f342Schristos	ins $25,$11,2,8
77176c4f342Schristos#else
77276c4f342Schristos	lw	$16,0($1)		# Td2[s2>>8]
77376c4f342Schristos	ins $1,$9,2,8
77476c4f342Schristos	lw	$17,0($2)		# Td2[s3>>8]
77576c4f342Schristos	ins $2,$10,2,8
77676c4f342Schristos	lw	$18,0($24)		# Td2[s0>>8]
77776c4f342Schristos	ins $24,$11,2,8
77876c4f342Schristos	lw	$19,0($25)		# Td2[s1>>8]
77976c4f342Schristos	ins $25,$8,2,8
78076c4f342Schristos
78176c4f342Schristos	lw	$20,0($1)		# Td3[s1]
78276c4f342Schristos	sll	$1,$8,2
78376c4f342Schristos	lw	$21,0($2)		# Td3[s2]
78476c4f342Schristos	sll	$2,$9,2
78576c4f342Schristos	lw	$22,0($24)		# Td3[s3]
78676c4f342Schristos	sll	$24,$10,2
78776c4f342Schristos	lw	$23,0($25)		# Td3[s0]
78876c4f342Schristos	sll	$25,$11,2
78976c4f342Schristos
79076c4f342Schristos	and	$1,0x3fc
79176c4f342Schristos	and	$2,0x3fc
79276c4f342Schristos	and	$24,0x3fc
79376c4f342Schristos	and	$25,0x3fc
794e0ea3921Schristos	addu $1,$7
795e0ea3921Schristos	addu $2,$7
796e0ea3921Schristos	addu $24,$7
797e0ea3921Schristos	addu $25,$7
79876c4f342Schristos#endif
79976c4f342Schristos	rotr	$16,$16,16
80076c4f342Schristos	rotr	$17,$17,16
80176c4f342Schristos	rotr	$18,$18,16
80276c4f342Schristos	rotr	$19,$19,16
80376c4f342Schristos
80476c4f342Schristos	rotr	$20,$20,8
80576c4f342Schristos	rotr	$21,$21,8
80676c4f342Schristos	rotr	$22,$22,8
80776c4f342Schristos	rotr	$23,$23,8
80876c4f342Schristos#else
80976c4f342Schristos	lwl	$16,1($1)		# Td2[s2>>8]
81076c4f342Schristos	lwl	$17,1($2)		# Td2[s3>>8]
81176c4f342Schristos	lwl	$18,1($24)		# Td2[s0>>8]
81276c4f342Schristos	lwl	$19,1($25)		# Td2[s1>>8]
81376c4f342Schristos	lwr	$16,2($1)		# Td2[s2>>8]
81476c4f342Schristos	srl	$1,$9,22
81576c4f342Schristos	lwr	$17,2($2)		# Td2[s3>>8]
81676c4f342Schristos	srl	$2,$10,22
81776c4f342Schristos	lwr	$18,2($24)		# Td2[s0>>8]
81876c4f342Schristos	srl	$24,$11,22
81976c4f342Schristos	lwr	$19,2($25)		# Td2[s1>>8]
82076c4f342Schristos	srl	$25,$8,22
82176c4f342Schristos
82276c4f342Schristos	and	$1,0x3fc
82376c4f342Schristos	and	$2,0x3fc
82476c4f342Schristos	and	$24,0x3fc
82576c4f342Schristos	and	$25,0x3fc
826e0ea3921Schristos	addu $1,$7
827e0ea3921Schristos	addu $2,$7
828e0ea3921Schristos	addu $24,$7
829e0ea3921Schristos	addu $25,$7
83076c4f342Schristos	lwl	$20,0($1)		# Td3[s1]
83176c4f342Schristos	lwl	$21,0($2)		# Td3[s2]
83276c4f342Schristos	lwl	$22,0($24)		# Td3[s3]
83376c4f342Schristos	lwl	$23,0($25)		# Td3[s0]
83476c4f342Schristos	lwr	$20,1($1)		# Td3[s1]
83576c4f342Schristos	sll	$1,$8,2
83676c4f342Schristos	lwr	$21,1($2)		# Td3[s2]
83776c4f342Schristos	sll	$2,$9,2
83876c4f342Schristos	lwr	$22,1($24)		# Td3[s3]
83976c4f342Schristos	sll	$24,$10,2
84076c4f342Schristos	lwr	$23,1($25)		# Td3[s0]
84176c4f342Schristos	sll	$25,$11,2
84276c4f342Schristos
84376c4f342Schristos	and	$1,0x3fc
84476c4f342Schristos	and	$2,0x3fc
84576c4f342Schristos	and	$24,0x3fc
84676c4f342Schristos	and	$25,0x3fc
847e0ea3921Schristos	addu $1,$7
848e0ea3921Schristos	addu $2,$7
849e0ea3921Schristos	addu $24,$7
850e0ea3921Schristos	addu $25,$7
85176c4f342Schristos#endif
85276c4f342Schristos
85376c4f342Schristos	xor	$12,$16
85476c4f342Schristos	lw	$16,0($1)		# Td0[s0>>24]
85576c4f342Schristos	xor	$13,$17
85676c4f342Schristos	lw	$17,0($2)		# Td0[s1>>24]
85776c4f342Schristos	xor	$14,$18
85876c4f342Schristos	lw	$18,0($24)		# Td0[s2>>24]
85976c4f342Schristos	xor	$15,$19
86076c4f342Schristos	lw	$19,0($25)		# Td0[s3>>24]
86176c4f342Schristos
86276c4f342Schristos	xor	$12,$20
86376c4f342Schristos	lw	$8,0($3)
86476c4f342Schristos	xor	$13,$21
86576c4f342Schristos	lw	$9,4($3)
86676c4f342Schristos	xor	$14,$22
86776c4f342Schristos	lw	$10,8($3)
86876c4f342Schristos	xor	$15,$23
86976c4f342Schristos	lw	$11,12($3)
87076c4f342Schristos
87176c4f342Schristos	xor	$12,$16
87276c4f342Schristos	xor	$13,$17
87376c4f342Schristos	xor	$14,$18
87476c4f342Schristos	xor	$15,$19
87576c4f342Schristos
876e0ea3921Schristos	subu	$30,1
877e0ea3921Schristos	addu $3,16
87876c4f342Schristos	xor	$8,$12
87976c4f342Schristos	xor	$9,$13
88076c4f342Schristos	xor	$10,$14
88176c4f342Schristos	xor	$11,$15
88276c4f342Schristos	.set	noreorder
88376c4f342Schristos	bnez	$30,.Loop_dec
884*1b3d6f93Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
885*1b3d6f93Schristos	ext	$12,$11,8,8
886*1b3d6f93Schristos#endif
887*1b3d6f93Schristos
88876c4f342Schristos	srl	$1,$11,6
88976c4f342Schristos#endif
89076c4f342Schristos
89176c4f342Schristos	.set	reorder
89276c4f342Schristos	lw	$16,1024($7)		# prefetch Td4
89376c4f342Schristos	srl	$1,$11,8
89476c4f342Schristos	lw	$17,1024+32($7)
89576c4f342Schristos	srl	$2,$8,8
89676c4f342Schristos	lw	$18,1024+64($7)
89776c4f342Schristos	srl	$24,$9,8
89876c4f342Schristos	lw	$19,1024+96($7)
89976c4f342Schristos	srl	$25,$10,8
90076c4f342Schristos	lw	$20,1024+128($7)
90176c4f342Schristos	and	$1,0xff
90276c4f342Schristos	lw	$21,1024+160($7)
90376c4f342Schristos	and	$2,0xff
90476c4f342Schristos	lw	$22,1024+192($7)
90576c4f342Schristos	and	$24,0xff
90676c4f342Schristos	lw	$23,1024+224($7)
90776c4f342Schristos	and	$25,0xff
90876c4f342Schristos
909e0ea3921Schristos	addu $1,$7
910e0ea3921Schristos	addu $2,$7
911e0ea3921Schristos	addu $24,$7
912e0ea3921Schristos	addu $25,$7
91376c4f342Schristos	lbu	$12,1024($1)		# Td4[s3>>16]
91476c4f342Schristos	srl	$1,$10,16
91576c4f342Schristos	lbu	$13,1024($2)		# Td4[s0>>16]
91676c4f342Schristos	srl	$2,$11,16
91776c4f342Schristos	lbu	$14,1024($24)		# Td4[s1>>16]
91876c4f342Schristos	srl	$24,$8,16
91976c4f342Schristos	lbu	$15,1024($25)		# Td4[s2>>16]
92076c4f342Schristos	srl	$25,$9,16
92176c4f342Schristos
92276c4f342Schristos	and	$1,0xff
92376c4f342Schristos	and	$2,0xff
92476c4f342Schristos	and	$24,0xff
92576c4f342Schristos	and	$25,0xff
926e0ea3921Schristos	addu $1,$7
927e0ea3921Schristos	addu $2,$7
928e0ea3921Schristos	addu $24,$7
929e0ea3921Schristos	addu $25,$7
93076c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
93176c4f342Schristos# if defined(_MIPSEL)
93276c4f342Schristos	lbu	$16,1024($1)		# Td4[s2>>8]
93376c4f342Schristos	ins $1,$8,0,8
93476c4f342Schristos	lbu	$17,1024($2)		# Td4[s3>>8]
93576c4f342Schristos	ins $2,$9,0,8
93676c4f342Schristos	lbu	$18,1024($24)		# Td4[s0>>8]
93776c4f342Schristos	ins $24,$10,0,8
93876c4f342Schristos	lbu	$19,1024($25)		# Td4[s1>>8]
93976c4f342Schristos	ins $25,$11,0,8
94076c4f342Schristos
94176c4f342Schristos	lbu	$20,1024($1)		# Td4[s0>>24]
94276c4f342Schristos	srl	$1,$9,24
94376c4f342Schristos	lbu	$21,1024($2)		# Td4[s1>>24]
94476c4f342Schristos	srl	$2,$10,24
94576c4f342Schristos	lbu	$22,1024($24)		# Td4[s2>>24]
94676c4f342Schristos	srl	$24,$11,24
94776c4f342Schristos	lbu	$23,1024($25)		# Td4[s3>>24]
94876c4f342Schristos	srl	$25,$8,24
94976c4f342Schristos
950e0ea3921Schristos	addu $1,$7
951e0ea3921Schristos	addu $2,$7
952e0ea3921Schristos	addu $24,$7
953e0ea3921Schristos	addu $25,$7
95476c4f342Schristos# else
95576c4f342Schristos	lbu	$16,1024($1)		# Td4[s2>>8]
95676c4f342Schristos	and	$1,$8,0xff
95776c4f342Schristos	lbu	$17,1024($2)		# Td4[s3>>8]
95876c4f342Schristos	and	$2,$9,0xff
95976c4f342Schristos	lbu	$18,1024($24)		# Td4[s0>>8]
96076c4f342Schristos	and	$24,$10,0xff
96176c4f342Schristos	lbu	$19,1024($25)		# Td4[s1>>8]
96276c4f342Schristos	and	$25,$11,0xff
96376c4f342Schristos
964e0ea3921Schristos	addu $1,$7
965e0ea3921Schristos	addu $2,$7
966e0ea3921Schristos	addu $24,$7
967e0ea3921Schristos	addu $25,$7
96876c4f342Schristos	lbu	$20,1024($1)		# Td4[s0>>24]
96976c4f342Schristos	ins $1,$9,0,8
97076c4f342Schristos	lbu	$21,1024($2)		# Td4[s1>>24]
97176c4f342Schristos	ins $2,$10,0,8
97276c4f342Schristos	lbu	$22,1024($24)		# Td4[s2>>24]
97376c4f342Schristos	ins $24,$11,0,8
97476c4f342Schristos	lbu	$23,1024($25)		# Td4[s3>>24]
97576c4f342Schristos	ins $25,$8,0,8
97676c4f342Schristos# endif
97776c4f342Schristos	sll	$12,$12,8
97876c4f342Schristos	sll	$13,$13,8
97976c4f342Schristos	sll	$14,$14,8
98076c4f342Schristos	sll	$15,$15,8
98176c4f342Schristos
98276c4f342Schristos	ins	$12,$16,16,8
98376c4f342Schristos	lbu	$16,1024($1)		# Td4[s1]
98476c4f342Schristos	ins	$13,$17,16,8
98576c4f342Schristos	lbu	$17,1024($2)		# Td4[s2]
98676c4f342Schristos	ins	$14,$18,16,8
98776c4f342Schristos	lbu	$18,1024($24)		# Td4[s3]
98876c4f342Schristos	ins	$15,$19,16,8
98976c4f342Schristos	lbu	$19,1024($25)		# Td4[s0]
99076c4f342Schristos
99176c4f342Schristos	ins	$12,$20,0,8
99276c4f342Schristos	lw	$8,0($3)
99376c4f342Schristos	ins	$13,$21,0,8
99476c4f342Schristos	lw	$9,4($3)
99576c4f342Schristos	ins	$14,$22,0,8
99676c4f342Schristos	lw	$10,8($3)
99776c4f342Schristos	ins	$15,$23,0,8
99876c4f342Schristos	lw	$11,12($3)
99976c4f342Schristos
100076c4f342Schristos	ins	$12,$16,24,8
100176c4f342Schristos	ins	$13,$17,24,8
100276c4f342Schristos	ins	$14,$18,24,8
100376c4f342Schristos	ins	$15,$19,24,8
100476c4f342Schristos#else
100576c4f342Schristos	lbu	$16,1024($1)		# Td4[s2>>8]
100676c4f342Schristos	and	$1,$8,0xff
100776c4f342Schristos	lbu	$17,1024($2)		# Td4[s3>>8]
100876c4f342Schristos	and	$2,$9,0xff
100976c4f342Schristos	lbu	$18,1024($24)		# Td4[s0>>8]
101076c4f342Schristos	and	$24,$10,0xff
101176c4f342Schristos	lbu	$19,1024($25)		# Td4[s1>>8]
101276c4f342Schristos	and	$25,$11,0xff
101376c4f342Schristos
1014e0ea3921Schristos	addu $1,$7
1015e0ea3921Schristos	addu $2,$7
1016e0ea3921Schristos	addu $24,$7
1017e0ea3921Schristos	addu $25,$7
101876c4f342Schristos	lbu	$20,1024($1)		# Td4[s0>>24]
101976c4f342Schristos	srl	$1,$9,24
102076c4f342Schristos	lbu	$21,1024($2)		# Td4[s1>>24]
102176c4f342Schristos	srl	$2,$10,24
102276c4f342Schristos	lbu	$22,1024($24)		# Td4[s2>>24]
102376c4f342Schristos	srl	$24,$11,24
102476c4f342Schristos	lbu	$23,1024($25)		# Td4[s3>>24]
102576c4f342Schristos	srl	$25,$8,24
102676c4f342Schristos
1027e0ea3921Schristos	addu $1,$7
1028e0ea3921Schristos	addu $2,$7
1029e0ea3921Schristos	addu $24,$7
1030e0ea3921Schristos	addu $25,$7
103176c4f342Schristos
103276c4f342Schristos	sll	$12,$12,8
103376c4f342Schristos	sll	$13,$13,8
103476c4f342Schristos	sll	$14,$14,8
103576c4f342Schristos	sll	$15,$15,8
103676c4f342Schristos
103776c4f342Schristos	sll	$16,$16,16
103876c4f342Schristos	sll	$17,$17,16
103976c4f342Schristos	sll	$18,$18,16
104076c4f342Schristos	sll	$19,$19,16
104176c4f342Schristos
104276c4f342Schristos	xor	$12,$16
104376c4f342Schristos	lbu	$16,1024($1)		# Td4[s1]
104476c4f342Schristos	xor	$13,$17
104576c4f342Schristos	lbu	$17,1024($2)		# Td4[s2]
104676c4f342Schristos	xor	$14,$18
104776c4f342Schristos	lbu	$18,1024($24)		# Td4[s3]
104876c4f342Schristos	xor	$15,$19
104976c4f342Schristos	lbu	$19,1024($25)		# Td4[s0]
105076c4f342Schristos
105176c4f342Schristos	#sll	$20,$20,0
105276c4f342Schristos	lw	$8,0($3)
105376c4f342Schristos	#sll	$21,$21,0
105476c4f342Schristos	lw	$9,4($3)
105576c4f342Schristos	#sll	$22,$22,0
105676c4f342Schristos	lw	$10,8($3)
105776c4f342Schristos	#sll	$23,$23,0
105876c4f342Schristos	lw	$11,12($3)
105976c4f342Schristos
106076c4f342Schristos	xor	$12,$20
106176c4f342Schristos	xor	$13,$21
106276c4f342Schristos	xor	$14,$22
106376c4f342Schristos	xor	$15,$23
106476c4f342Schristos
106576c4f342Schristos	sll	$16,$16,24
106676c4f342Schristos	sll	$17,$17,24
106776c4f342Schristos	sll	$18,$18,24
106876c4f342Schristos	sll	$19,$19,24
106976c4f342Schristos
107076c4f342Schristos	xor	$12,$16
107176c4f342Schristos	xor	$13,$17
107276c4f342Schristos	xor	$14,$18
107376c4f342Schristos	xor	$15,$19
107476c4f342Schristos#endif
107576c4f342Schristos
107676c4f342Schristos	xor	$8,$12
107776c4f342Schristos	xor	$9,$13
107876c4f342Schristos	xor	$10,$14
107976c4f342Schristos	xor	$11,$15
108076c4f342Schristos
108176c4f342Schristos	jr	$31
108276c4f342Schristos.end	_mips_AES_decrypt
108376c4f342Schristos
108476c4f342Schristos.align	5
108576c4f342Schristos.globl	AES_decrypt
108676c4f342Schristos.ent	AES_decrypt
108776c4f342SchristosAES_decrypt:
108876c4f342Schristos	.frame	$29,64,$31
108976c4f342Schristos	.mask	0xc0ff0000,-4
109076c4f342Schristos	.set	noreorder
10916410c867Schristos	.cpload	$25
1092e0ea3921Schristos	subu $29,64
109376c4f342Schristos	sw	$31,64-1*4($29)
109476c4f342Schristos	sw	$30,64-2*4($29)
109576c4f342Schristos	sw	$23,64-3*4($29)
109676c4f342Schristos	sw	$22,64-4*4($29)
109776c4f342Schristos	sw	$21,64-5*4($29)
109876c4f342Schristos	sw	$20,64-6*4($29)
109976c4f342Schristos	sw	$19,64-7*4($29)
110076c4f342Schristos	sw	$18,64-8*4($29)
110176c4f342Schristos	sw	$17,64-9*4($29)
110276c4f342Schristos	sw	$16,64-10*4($29)
110376c4f342Schristos	.set	reorder
110476c4f342Schristos	la	$7,AES_Td		# PIC-ified 'load address'
110576c4f342Schristos
1106e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1107e0ea3921Schristos	lw	$8,0($4)
1108e0ea3921Schristos	lw	$9,4($4)
1109e0ea3921Schristos	lw	$10,8($4)
1110e0ea3921Schristos	lw	$11,12($4)
1111e0ea3921Schristos#else
111276c4f342Schristos	lwl	$8,0+3($4)
111376c4f342Schristos	lwl	$9,4+3($4)
111476c4f342Schristos	lwl	$10,8+3($4)
111576c4f342Schristos	lwl	$11,12+3($4)
111676c4f342Schristos	lwr	$8,0+0($4)
111776c4f342Schristos	lwr	$9,4+0($4)
111876c4f342Schristos	lwr	$10,8+0($4)
111976c4f342Schristos	lwr	$11,12+0($4)
1120e0ea3921Schristos#endif
112176c4f342Schristos
112276c4f342Schristos	bal	_mips_AES_decrypt
112376c4f342Schristos
1124e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1125e0ea3921Schristos	sw	$8,0($5)
1126e0ea3921Schristos	sw	$9,4($5)
1127e0ea3921Schristos	sw	$10,8($5)
1128e0ea3921Schristos	sw	$11,12($5)
1129e0ea3921Schristos#else
113076c4f342Schristos	swr	$8,0+0($5)
113176c4f342Schristos	swr	$9,4+0($5)
113276c4f342Schristos	swr	$10,8+0($5)
113376c4f342Schristos	swr	$11,12+0($5)
113476c4f342Schristos	swl	$8,0+3($5)
113576c4f342Schristos	swl	$9,4+3($5)
113676c4f342Schristos	swl	$10,8+3($5)
113776c4f342Schristos	swl	$11,12+3($5)
1138e0ea3921Schristos#endif
113976c4f342Schristos
114076c4f342Schristos	.set	noreorder
114176c4f342Schristos	lw	$31,64-1*4($29)
114276c4f342Schristos	lw	$30,64-2*4($29)
114376c4f342Schristos	lw	$23,64-3*4($29)
114476c4f342Schristos	lw	$22,64-4*4($29)
114576c4f342Schristos	lw	$21,64-5*4($29)
114676c4f342Schristos	lw	$20,64-6*4($29)
114776c4f342Schristos	lw	$19,64-7*4($29)
114876c4f342Schristos	lw	$18,64-8*4($29)
114976c4f342Schristos	lw	$17,64-9*4($29)
115076c4f342Schristos	lw	$16,64-10*4($29)
115176c4f342Schristos	jr	$31
1152e0ea3921Schristos	addu $29,64
115376c4f342Schristos.end	AES_decrypt
115476c4f342Schristos.align	5
115576c4f342Schristos.ent	_mips_AES_set_encrypt_key
115676c4f342Schristos_mips_AES_set_encrypt_key:
115776c4f342Schristos	.frame	$29,0,$31
115876c4f342Schristos	.set	noreorder
115976c4f342Schristos	beqz	$4,.Lekey_done
116076c4f342Schristos	li	$2,-1
116176c4f342Schristos	beqz	$6,.Lekey_done
1162e0ea3921Schristos	addu $3,$7,256
116376c4f342Schristos
116476c4f342Schristos	.set	reorder
1165e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1166e0ea3921Schristos	lw	$8,0($4)		# load 128 bits
1167e0ea3921Schristos	lw	$9,4($4)
1168e0ea3921Schristos	lw	$10,8($4)
1169e0ea3921Schristos	lw	$11,12($4)
1170e0ea3921Schristos#else
117176c4f342Schristos	lwl	$8,0+3($4)	# load 128 bits
117276c4f342Schristos	lwl	$9,4+3($4)
117376c4f342Schristos	lwl	$10,8+3($4)
117476c4f342Schristos	lwl	$11,12+3($4)
117576c4f342Schristos	lwr	$8,0+0($4)
117676c4f342Schristos	lwr	$9,4+0($4)
117776c4f342Schristos	lwr	$10,8+0($4)
117876c4f342Schristos	lwr	$11,12+0($4)
1179e0ea3921Schristos#endif
1180e0ea3921Schristos	li	$1,128
118176c4f342Schristos	.set	noreorder
118276c4f342Schristos	beq	$5,$1,.L128bits
118376c4f342Schristos	li	$30,10
118476c4f342Schristos
118576c4f342Schristos	.set	reorder
1186e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1187e0ea3921Schristos	lw	$12,16($4)		# load 192 bits
1188e0ea3921Schristos	lw	$13,20($4)
1189e0ea3921Schristos#else
119076c4f342Schristos	lwl	$12,16+3($4)	# load 192 bits
119176c4f342Schristos	lwl	$13,20+3($4)
119276c4f342Schristos	lwr	$12,16+0($4)
119376c4f342Schristos	lwr	$13,20+0($4)
1194e0ea3921Schristos#endif
1195e0ea3921Schristos	li	$1,192
119676c4f342Schristos	.set	noreorder
119776c4f342Schristos	beq	$5,$1,.L192bits
119876c4f342Schristos	li	$30,8
119976c4f342Schristos
120076c4f342Schristos	.set	reorder
1201e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1202e0ea3921Schristos	lw	$14,24($4)		# load 256 bits
1203e0ea3921Schristos	lw	$15,28($4)
1204e0ea3921Schristos#else
120576c4f342Schristos	lwl	$14,24+3($4)	# load 256 bits
120676c4f342Schristos	lwl	$15,28+3($4)
120776c4f342Schristos	lwr	$14,24+0($4)
120876c4f342Schristos	lwr	$15,28+0($4)
1209e0ea3921Schristos#endif
1210e0ea3921Schristos	li	$1,256
121176c4f342Schristos	.set	noreorder
121276c4f342Schristos	beq	$5,$1,.L256bits
121376c4f342Schristos	li	$30,7
121476c4f342Schristos
121576c4f342Schristos	b	.Lekey_done
121676c4f342Schristos	li	$2,-2
121776c4f342Schristos
121876c4f342Schristos.align	4
121976c4f342Schristos.L128bits:
122076c4f342Schristos	.set	reorder
122176c4f342Schristos	srl	$1,$11,16
122276c4f342Schristos	srl	$2,$11,8
122376c4f342Schristos	and	$1,0xff
122476c4f342Schristos	and	$2,0xff
122576c4f342Schristos	and	$24,$11,0xff
122676c4f342Schristos	srl	$25,$11,24
1227e0ea3921Schristos	addu $1,$7
1228e0ea3921Schristos	addu $2,$7
1229e0ea3921Schristos	addu $24,$7
1230e0ea3921Schristos	addu $25,$7
123176c4f342Schristos	lbu	$1,0($1)
123276c4f342Schristos	lbu	$2,0($2)
123376c4f342Schristos	lbu	$24,0($24)
123476c4f342Schristos	lbu	$25,0($25)
123576c4f342Schristos
123676c4f342Schristos	sw	$8,0($6)
123776c4f342Schristos	sw	$9,4($6)
123876c4f342Schristos	sw	$10,8($6)
123976c4f342Schristos	sw	$11,12($6)
1240e0ea3921Schristos	subu	$30,1
1241e0ea3921Schristos	addu $6,16
124276c4f342Schristos
124376c4f342Schristos	sll	$1,$1,8
124476c4f342Schristos	#sll	$2,$2,0
124576c4f342Schristos	sll	$24,$24,24
124676c4f342Schristos	sll	$25,$25,16
124776c4f342Schristos
124876c4f342Schristos	xor	$8,$1
124976c4f342Schristos	lw	$1,0($3)
125076c4f342Schristos	xor	$8,$2
125176c4f342Schristos	xor	$8,$24
125276c4f342Schristos	xor	$8,$25
125376c4f342Schristos	xor	$8,$1
125476c4f342Schristos
125576c4f342Schristos	xor	$9,$8
125676c4f342Schristos	xor	$10,$9
125776c4f342Schristos	xor	$11,$10
125876c4f342Schristos
125976c4f342Schristos	.set	noreorder
126076c4f342Schristos	bnez	$30,.L128bits
1261e0ea3921Schristos	addu $3,4
126276c4f342Schristos
126376c4f342Schristos	sw	$8,0($6)
126476c4f342Schristos	sw	$9,4($6)
126576c4f342Schristos	sw	$10,8($6)
126676c4f342Schristos	li	$30,10
126776c4f342Schristos	sw	$11,12($6)
126876c4f342Schristos	li	$2,0
126976c4f342Schristos	sw	$30,80($6)
127076c4f342Schristos	b	.Lekey_done
1271e0ea3921Schristos	subu $6,10*16
127276c4f342Schristos
127376c4f342Schristos.align	4
127476c4f342Schristos.L192bits:
127576c4f342Schristos	.set	reorder
127676c4f342Schristos	srl	$1,$13,16
127776c4f342Schristos	srl	$2,$13,8
127876c4f342Schristos	and	$1,0xff
127976c4f342Schristos	and	$2,0xff
128076c4f342Schristos	and	$24,$13,0xff
128176c4f342Schristos	srl	$25,$13,24
1282e0ea3921Schristos	addu $1,$7
1283e0ea3921Schristos	addu $2,$7
1284e0ea3921Schristos	addu $24,$7
1285e0ea3921Schristos	addu $25,$7
128676c4f342Schristos	lbu	$1,0($1)
128776c4f342Schristos	lbu	$2,0($2)
128876c4f342Schristos	lbu	$24,0($24)
128976c4f342Schristos	lbu	$25,0($25)
129076c4f342Schristos
129176c4f342Schristos	sw	$8,0($6)
129276c4f342Schristos	sw	$9,4($6)
129376c4f342Schristos	sw	$10,8($6)
129476c4f342Schristos	sw	$11,12($6)
129576c4f342Schristos	sw	$12,16($6)
129676c4f342Schristos	sw	$13,20($6)
1297e0ea3921Schristos	subu	$30,1
1298e0ea3921Schristos	addu $6,24
129976c4f342Schristos
130076c4f342Schristos	sll	$1,$1,8
130176c4f342Schristos	#sll	$2,$2,0
130276c4f342Schristos	sll	$24,$24,24
130376c4f342Schristos	sll	$25,$25,16
130476c4f342Schristos
130576c4f342Schristos	xor	$8,$1
130676c4f342Schristos	lw	$1,0($3)
130776c4f342Schristos	xor	$8,$2
130876c4f342Schristos	xor	$8,$24
130976c4f342Schristos	xor	$8,$25
131076c4f342Schristos	xor	$8,$1
131176c4f342Schristos
131276c4f342Schristos	xor	$9,$8
131376c4f342Schristos	xor	$10,$9
131476c4f342Schristos	xor	$11,$10
131576c4f342Schristos	xor	$12,$11
131676c4f342Schristos	xor	$13,$12
131776c4f342Schristos
131876c4f342Schristos	.set	noreorder
131976c4f342Schristos	bnez	$30,.L192bits
1320e0ea3921Schristos	addu $3,4
132176c4f342Schristos
132276c4f342Schristos	sw	$8,0($6)
132376c4f342Schristos	sw	$9,4($6)
132476c4f342Schristos	sw	$10,8($6)
132576c4f342Schristos	li	$30,12
132676c4f342Schristos	sw	$11,12($6)
132776c4f342Schristos	li	$2,0
132876c4f342Schristos	sw	$30,48($6)
132976c4f342Schristos	b	.Lekey_done
1330e0ea3921Schristos	subu $6,12*16
133176c4f342Schristos
133276c4f342Schristos.align	4
133376c4f342Schristos.L256bits:
133476c4f342Schristos	.set	reorder
133576c4f342Schristos	srl	$1,$15,16
133676c4f342Schristos	srl	$2,$15,8
133776c4f342Schristos	and	$1,0xff
133876c4f342Schristos	and	$2,0xff
133976c4f342Schristos	and	$24,$15,0xff
134076c4f342Schristos	srl	$25,$15,24
1341e0ea3921Schristos	addu $1,$7
1342e0ea3921Schristos	addu $2,$7
1343e0ea3921Schristos	addu $24,$7
1344e0ea3921Schristos	addu $25,$7
134576c4f342Schristos	lbu	$1,0($1)
134676c4f342Schristos	lbu	$2,0($2)
134776c4f342Schristos	lbu	$24,0($24)
134876c4f342Schristos	lbu	$25,0($25)
134976c4f342Schristos
135076c4f342Schristos	sw	$8,0($6)
135176c4f342Schristos	sw	$9,4($6)
135276c4f342Schristos	sw	$10,8($6)
135376c4f342Schristos	sw	$11,12($6)
135476c4f342Schristos	sw	$12,16($6)
135576c4f342Schristos	sw	$13,20($6)
135676c4f342Schristos	sw	$14,24($6)
135776c4f342Schristos	sw	$15,28($6)
1358e0ea3921Schristos	subu	$30,1
135976c4f342Schristos
136076c4f342Schristos	sll	$1,$1,8
136176c4f342Schristos	#sll	$2,$2,0
136276c4f342Schristos	sll	$24,$24,24
136376c4f342Schristos	sll	$25,$25,16
136476c4f342Schristos
136576c4f342Schristos	xor	$8,$1
136676c4f342Schristos	lw	$1,0($3)
136776c4f342Schristos	xor	$8,$2
136876c4f342Schristos	xor	$8,$24
136976c4f342Schristos	xor	$8,$25
137076c4f342Schristos	xor	$8,$1
137176c4f342Schristos
137276c4f342Schristos	xor	$9,$8
137376c4f342Schristos	xor	$10,$9
137476c4f342Schristos	xor	$11,$10
137576c4f342Schristos	beqz	$30,.L256bits_done
137676c4f342Schristos
137776c4f342Schristos	srl	$1,$11,24
137876c4f342Schristos	srl	$2,$11,16
137976c4f342Schristos	srl	$24,$11,8
138076c4f342Schristos	and	$25,$11,0xff
138176c4f342Schristos	and	$2,0xff
138276c4f342Schristos	and	$24,0xff
1383e0ea3921Schristos	addu $1,$7
1384e0ea3921Schristos	addu $2,$7
1385e0ea3921Schristos	addu $24,$7
1386e0ea3921Schristos	addu $25,$7
138776c4f342Schristos	lbu	$1,0($1)
138876c4f342Schristos	lbu	$2,0($2)
138976c4f342Schristos	lbu	$24,0($24)
139076c4f342Schristos	lbu	$25,0($25)
139176c4f342Schristos	sll	$1,24
139276c4f342Schristos	sll	$2,16
139376c4f342Schristos	sll	$24,8
139476c4f342Schristos
139576c4f342Schristos	xor	$12,$1
139676c4f342Schristos	xor	$12,$2
139776c4f342Schristos	xor	$12,$24
139876c4f342Schristos	xor	$12,$25
139976c4f342Schristos
140076c4f342Schristos	xor	$13,$12
140176c4f342Schristos	xor	$14,$13
140276c4f342Schristos	xor	$15,$14
140376c4f342Schristos
1404e0ea3921Schristos	addu $6,32
140576c4f342Schristos	.set	noreorder
140676c4f342Schristos	b	.L256bits
1407e0ea3921Schristos	addu $3,4
140876c4f342Schristos
140976c4f342Schristos.L256bits_done:
141076c4f342Schristos	sw	$8,32($6)
141176c4f342Schristos	sw	$9,36($6)
141276c4f342Schristos	sw	$10,40($6)
141376c4f342Schristos	li	$30,14
141476c4f342Schristos	sw	$11,44($6)
141576c4f342Schristos	li	$2,0
141676c4f342Schristos	sw	$30,48($6)
1417e0ea3921Schristos	subu $6,12*16
141876c4f342Schristos
141976c4f342Schristos.Lekey_done:
142076c4f342Schristos	jr	$31
142176c4f342Schristos	nop
142276c4f342Schristos.end	_mips_AES_set_encrypt_key
142376c4f342Schristos
142476c4f342Schristos.globl	AES_set_encrypt_key
142576c4f342Schristos.ent	AES_set_encrypt_key
142676c4f342SchristosAES_set_encrypt_key:
142776c4f342Schristos	.frame	$29,32,$31
142876c4f342Schristos	.mask	0xc0000000,-4
142976c4f342Schristos	.set	noreorder
14306410c867Schristos	.cpload	$25
1431e0ea3921Schristos	subu $29,32
143276c4f342Schristos	sw	$31,32-1*4($29)
143376c4f342Schristos	sw	$30,32-2*4($29)
143476c4f342Schristos	.set	reorder
143576c4f342Schristos	la	$7,AES_Te4		# PIC-ified 'load address'
143676c4f342Schristos
143776c4f342Schristos	bal	_mips_AES_set_encrypt_key
143876c4f342Schristos
143976c4f342Schristos	.set	noreorder
144076c4f342Schristos	move	$4,$2
144176c4f342Schristos	lw	$31,32-1*4($29)
144276c4f342Schristos	lw	$30,32-2*4($29)
144376c4f342Schristos	jr	$31
1444e0ea3921Schristos	addu $29,32
144576c4f342Schristos.end	AES_set_encrypt_key
144676c4f342Schristos.align	5
144776c4f342Schristos.globl	AES_set_decrypt_key
144876c4f342Schristos.ent	AES_set_decrypt_key
144976c4f342SchristosAES_set_decrypt_key:
145076c4f342Schristos	.frame	$29,32,$31
145176c4f342Schristos	.mask	0xc0000000,-4
145276c4f342Schristos	.set	noreorder
14536410c867Schristos	.cpload	$25
1454e0ea3921Schristos	subu $29,32
145576c4f342Schristos	sw	$31,32-1*4($29)
145676c4f342Schristos	sw	$30,32-2*4($29)
145776c4f342Schristos	.set	reorder
145876c4f342Schristos	la	$7,AES_Te4		# PIC-ified 'load address'
145976c4f342Schristos
146076c4f342Schristos	bal	_mips_AES_set_encrypt_key
146176c4f342Schristos
146276c4f342Schristos	bltz	$2,.Ldkey_done
146376c4f342Schristos
146476c4f342Schristos	sll	$1,$30,4
1465e0ea3921Schristos	addu $4,$6,0
1466e0ea3921Schristos	addu $5,$6,$1
146776c4f342Schristos.align	4
146876c4f342Schristos.Lswap:
146976c4f342Schristos	lw	$8,0($4)
147076c4f342Schristos	lw	$9,4($4)
147176c4f342Schristos	lw	$10,8($4)
147276c4f342Schristos	lw	$11,12($4)
147376c4f342Schristos	lw	$12,0($5)
147476c4f342Schristos	lw	$13,4($5)
147576c4f342Schristos	lw	$14,8($5)
147676c4f342Schristos	lw	$15,12($5)
147776c4f342Schristos	sw	$8,0($5)
147876c4f342Schristos	sw	$9,4($5)
147976c4f342Schristos	sw	$10,8($5)
148076c4f342Schristos	sw	$11,12($5)
1481e0ea3921Schristos	addu $4,16
1482e0ea3921Schristos	subu $5,16
148376c4f342Schristos	sw	$12,-16($4)
148476c4f342Schristos	sw	$13,-12($4)
148576c4f342Schristos	sw	$14,-8($4)
148676c4f342Schristos	sw	$15,-4($4)
148776c4f342Schristos	bne	$4,$5,.Lswap
148876c4f342Schristos
148976c4f342Schristos	lw	$8,16($6)		# modulo-scheduled
149076c4f342Schristos	lui	$2,0x8080
1491e0ea3921Schristos	subu	$30,1
149276c4f342Schristos	or	$2,0x8080
149376c4f342Schristos	sll	$30,2
1494e0ea3921Schristos	addu $6,16
149576c4f342Schristos	lui	$25,0x1b1b
149676c4f342Schristos	nor	$24,$0,$2
149776c4f342Schristos	or	$25,0x1b1b
149876c4f342Schristos.align	4
149976c4f342Schristos.Lmix:
150076c4f342Schristos	and	$1,$8,$2
150176c4f342Schristos	and	$9,$8,$24
150276c4f342Schristos	srl	$10,$1,7
150376c4f342Schristos	addu	$9,$9		# tp2<<1
150476c4f342Schristos	subu	$1,$10
150576c4f342Schristos	and	$1,$25
150676c4f342Schristos	xor	$9,$1
150776c4f342Schristos
150876c4f342Schristos	and	$1,$9,$2
150976c4f342Schristos	and	$10,$9,$24
151076c4f342Schristos	srl	$11,$1,7
151176c4f342Schristos	addu	$10,$10		# tp4<<1
151276c4f342Schristos	subu	$1,$11
151376c4f342Schristos	and	$1,$25
151476c4f342Schristos	xor	$10,$1
151576c4f342Schristos
151676c4f342Schristos	and	$1,$10,$2
151776c4f342Schristos	and	$11,$10,$24
151876c4f342Schristos	srl	$12,$1,7
151976c4f342Schristos	addu	$11,$11		# tp8<<1
152076c4f342Schristos	subu	$1,$12
152176c4f342Schristos	and	$1,$25
152276c4f342Schristos	xor	$11,$1
152376c4f342Schristos
152476c4f342Schristos	xor	$12,$11,$8
152576c4f342Schristos	xor	$15,$11,$10
152676c4f342Schristos	xor	$13,$12,$9
152776c4f342Schristos	xor	$14,$12,$10
152876c4f342Schristos
152976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
153076c4f342Schristos	rotr	$8,$14,16
153176c4f342Schristos	 xor	$15,$9
153276c4f342Schristos	rotr	$9,$12,24
153376c4f342Schristos	xor	$15,$8
153476c4f342Schristos	rotr	$10,$13,8
153576c4f342Schristos	xor	$15,$9
153676c4f342Schristos	lw	$8,4($6)		# modulo-scheduled
153776c4f342Schristos	xor	$15,$10
153876c4f342Schristos#else
153976c4f342Schristos	sll	$8,$14,16
154076c4f342Schristos	 xor	$15,$9
154176c4f342Schristos	srl	$9,$14,16
154276c4f342Schristos	xor	$15,$8
154376c4f342Schristos	sll	$8,$12,8
154476c4f342Schristos	xor	$15,$9
154576c4f342Schristos	srl	$9,$12,24
154676c4f342Schristos	xor	$15,$8
154776c4f342Schristos	sll	$8,$13,24
154876c4f342Schristos	xor	$15,$9
154976c4f342Schristos	srl	$9,$13,8
155076c4f342Schristos	xor	$15,$8
155176c4f342Schristos	lw	$8,4($6)		# modulo-scheduled
155276c4f342Schristos	xor	$15,$9
155376c4f342Schristos#endif
1554e0ea3921Schristos	subu	$30,1
155576c4f342Schristos	sw	$15,0($6)
1556e0ea3921Schristos	addu $6,4
155776c4f342Schristos	bnez	$30,.Lmix
155876c4f342Schristos
155976c4f342Schristos	li	$2,0
156076c4f342Schristos.Ldkey_done:
156176c4f342Schristos	.set	noreorder
156276c4f342Schristos	move	$4,$2
156376c4f342Schristos	lw	$31,32-1*4($29)
156476c4f342Schristos	lw	$30,32-2*4($29)
156576c4f342Schristos	jr	$31
1566e0ea3921Schristos	addu $29,32
156776c4f342Schristos.end	AES_set_decrypt_key
156876c4f342Schristos.rdata
156976c4f342Schristos.align	10
157076c4f342SchristosAES_Te:
157176c4f342Schristos.byte	0xc6,0x63,0x63,0xa5,	0xf8,0x7c,0x7c,0x84	# Te0
157276c4f342Schristos.byte	0xee,0x77,0x77,0x99,	0xf6,0x7b,0x7b,0x8d
157376c4f342Schristos.byte	0xff,0xf2,0xf2,0x0d,	0xd6,0x6b,0x6b,0xbd
157476c4f342Schristos.byte	0xde,0x6f,0x6f,0xb1,	0x91,0xc5,0xc5,0x54
157576c4f342Schristos.byte	0x60,0x30,0x30,0x50,	0x02,0x01,0x01,0x03
157676c4f342Schristos.byte	0xce,0x67,0x67,0xa9,	0x56,0x2b,0x2b,0x7d
157776c4f342Schristos.byte	0xe7,0xfe,0xfe,0x19,	0xb5,0xd7,0xd7,0x62
157876c4f342Schristos.byte	0x4d,0xab,0xab,0xe6,	0xec,0x76,0x76,0x9a
157976c4f342Schristos.byte	0x8f,0xca,0xca,0x45,	0x1f,0x82,0x82,0x9d
158076c4f342Schristos.byte	0x89,0xc9,0xc9,0x40,	0xfa,0x7d,0x7d,0x87
158176c4f342Schristos.byte	0xef,0xfa,0xfa,0x15,	0xb2,0x59,0x59,0xeb
158276c4f342Schristos.byte	0x8e,0x47,0x47,0xc9,	0xfb,0xf0,0xf0,0x0b
158376c4f342Schristos.byte	0x41,0xad,0xad,0xec,	0xb3,0xd4,0xd4,0x67
158476c4f342Schristos.byte	0x5f,0xa2,0xa2,0xfd,	0x45,0xaf,0xaf,0xea
158576c4f342Schristos.byte	0x23,0x9c,0x9c,0xbf,	0x53,0xa4,0xa4,0xf7
158676c4f342Schristos.byte	0xe4,0x72,0x72,0x96,	0x9b,0xc0,0xc0,0x5b
158776c4f342Schristos.byte	0x75,0xb7,0xb7,0xc2,	0xe1,0xfd,0xfd,0x1c
158876c4f342Schristos.byte	0x3d,0x93,0x93,0xae,	0x4c,0x26,0x26,0x6a
158976c4f342Schristos.byte	0x6c,0x36,0x36,0x5a,	0x7e,0x3f,0x3f,0x41
159076c4f342Schristos.byte	0xf5,0xf7,0xf7,0x02,	0x83,0xcc,0xcc,0x4f
159176c4f342Schristos.byte	0x68,0x34,0x34,0x5c,	0x51,0xa5,0xa5,0xf4
159276c4f342Schristos.byte	0xd1,0xe5,0xe5,0x34,	0xf9,0xf1,0xf1,0x08
159376c4f342Schristos.byte	0xe2,0x71,0x71,0x93,	0xab,0xd8,0xd8,0x73
159476c4f342Schristos.byte	0x62,0x31,0x31,0x53,	0x2a,0x15,0x15,0x3f
159576c4f342Schristos.byte	0x08,0x04,0x04,0x0c,	0x95,0xc7,0xc7,0x52
159676c4f342Schristos.byte	0x46,0x23,0x23,0x65,	0x9d,0xc3,0xc3,0x5e
159776c4f342Schristos.byte	0x30,0x18,0x18,0x28,	0x37,0x96,0x96,0xa1
159876c4f342Schristos.byte	0x0a,0x05,0x05,0x0f,	0x2f,0x9a,0x9a,0xb5
159976c4f342Schristos.byte	0x0e,0x07,0x07,0x09,	0x24,0x12,0x12,0x36
160076c4f342Schristos.byte	0x1b,0x80,0x80,0x9b,	0xdf,0xe2,0xe2,0x3d
160176c4f342Schristos.byte	0xcd,0xeb,0xeb,0x26,	0x4e,0x27,0x27,0x69
160276c4f342Schristos.byte	0x7f,0xb2,0xb2,0xcd,	0xea,0x75,0x75,0x9f
160376c4f342Schristos.byte	0x12,0x09,0x09,0x1b,	0x1d,0x83,0x83,0x9e
160476c4f342Schristos.byte	0x58,0x2c,0x2c,0x74,	0x34,0x1a,0x1a,0x2e
160576c4f342Schristos.byte	0x36,0x1b,0x1b,0x2d,	0xdc,0x6e,0x6e,0xb2
160676c4f342Schristos.byte	0xb4,0x5a,0x5a,0xee,	0x5b,0xa0,0xa0,0xfb
160776c4f342Schristos.byte	0xa4,0x52,0x52,0xf6,	0x76,0x3b,0x3b,0x4d
160876c4f342Schristos.byte	0xb7,0xd6,0xd6,0x61,	0x7d,0xb3,0xb3,0xce
160976c4f342Schristos.byte	0x52,0x29,0x29,0x7b,	0xdd,0xe3,0xe3,0x3e
161076c4f342Schristos.byte	0x5e,0x2f,0x2f,0x71,	0x13,0x84,0x84,0x97
161176c4f342Schristos.byte	0xa6,0x53,0x53,0xf5,	0xb9,0xd1,0xd1,0x68
161276c4f342Schristos.byte	0x00,0x00,0x00,0x00,	0xc1,0xed,0xed,0x2c
161376c4f342Schristos.byte	0x40,0x20,0x20,0x60,	0xe3,0xfc,0xfc,0x1f
161476c4f342Schristos.byte	0x79,0xb1,0xb1,0xc8,	0xb6,0x5b,0x5b,0xed
161576c4f342Schristos.byte	0xd4,0x6a,0x6a,0xbe,	0x8d,0xcb,0xcb,0x46
161676c4f342Schristos.byte	0x67,0xbe,0xbe,0xd9,	0x72,0x39,0x39,0x4b
161776c4f342Schristos.byte	0x94,0x4a,0x4a,0xde,	0x98,0x4c,0x4c,0xd4
161876c4f342Schristos.byte	0xb0,0x58,0x58,0xe8,	0x85,0xcf,0xcf,0x4a
161976c4f342Schristos.byte	0xbb,0xd0,0xd0,0x6b,	0xc5,0xef,0xef,0x2a
162076c4f342Schristos.byte	0x4f,0xaa,0xaa,0xe5,	0xed,0xfb,0xfb,0x16
162176c4f342Schristos.byte	0x86,0x43,0x43,0xc5,	0x9a,0x4d,0x4d,0xd7
162276c4f342Schristos.byte	0x66,0x33,0x33,0x55,	0x11,0x85,0x85,0x94
162376c4f342Schristos.byte	0x8a,0x45,0x45,0xcf,	0xe9,0xf9,0xf9,0x10
162476c4f342Schristos.byte	0x04,0x02,0x02,0x06,	0xfe,0x7f,0x7f,0x81
162576c4f342Schristos.byte	0xa0,0x50,0x50,0xf0,	0x78,0x3c,0x3c,0x44
162676c4f342Schristos.byte	0x25,0x9f,0x9f,0xba,	0x4b,0xa8,0xa8,0xe3
162776c4f342Schristos.byte	0xa2,0x51,0x51,0xf3,	0x5d,0xa3,0xa3,0xfe
162876c4f342Schristos.byte	0x80,0x40,0x40,0xc0,	0x05,0x8f,0x8f,0x8a
162976c4f342Schristos.byte	0x3f,0x92,0x92,0xad,	0x21,0x9d,0x9d,0xbc
163076c4f342Schristos.byte	0x70,0x38,0x38,0x48,	0xf1,0xf5,0xf5,0x04
163176c4f342Schristos.byte	0x63,0xbc,0xbc,0xdf,	0x77,0xb6,0xb6,0xc1
163276c4f342Schristos.byte	0xaf,0xda,0xda,0x75,	0x42,0x21,0x21,0x63
163376c4f342Schristos.byte	0x20,0x10,0x10,0x30,	0xe5,0xff,0xff,0x1a
163476c4f342Schristos.byte	0xfd,0xf3,0xf3,0x0e,	0xbf,0xd2,0xd2,0x6d
163576c4f342Schristos.byte	0x81,0xcd,0xcd,0x4c,	0x18,0x0c,0x0c,0x14
163676c4f342Schristos.byte	0x26,0x13,0x13,0x35,	0xc3,0xec,0xec,0x2f
163776c4f342Schristos.byte	0xbe,0x5f,0x5f,0xe1,	0x35,0x97,0x97,0xa2
163876c4f342Schristos.byte	0x88,0x44,0x44,0xcc,	0x2e,0x17,0x17,0x39
163976c4f342Schristos.byte	0x93,0xc4,0xc4,0x57,	0x55,0xa7,0xa7,0xf2
164076c4f342Schristos.byte	0xfc,0x7e,0x7e,0x82,	0x7a,0x3d,0x3d,0x47
164176c4f342Schristos.byte	0xc8,0x64,0x64,0xac,	0xba,0x5d,0x5d,0xe7
164276c4f342Schristos.byte	0x32,0x19,0x19,0x2b,	0xe6,0x73,0x73,0x95
164376c4f342Schristos.byte	0xc0,0x60,0x60,0xa0,	0x19,0x81,0x81,0x98
164476c4f342Schristos.byte	0x9e,0x4f,0x4f,0xd1,	0xa3,0xdc,0xdc,0x7f
164576c4f342Schristos.byte	0x44,0x22,0x22,0x66,	0x54,0x2a,0x2a,0x7e
164676c4f342Schristos.byte	0x3b,0x90,0x90,0xab,	0x0b,0x88,0x88,0x83
164776c4f342Schristos.byte	0x8c,0x46,0x46,0xca,	0xc7,0xee,0xee,0x29
164876c4f342Schristos.byte	0x6b,0xb8,0xb8,0xd3,	0x28,0x14,0x14,0x3c
164976c4f342Schristos.byte	0xa7,0xde,0xde,0x79,	0xbc,0x5e,0x5e,0xe2
165076c4f342Schristos.byte	0x16,0x0b,0x0b,0x1d,	0xad,0xdb,0xdb,0x76
165176c4f342Schristos.byte	0xdb,0xe0,0xe0,0x3b,	0x64,0x32,0x32,0x56
165276c4f342Schristos.byte	0x74,0x3a,0x3a,0x4e,	0x14,0x0a,0x0a,0x1e
165376c4f342Schristos.byte	0x92,0x49,0x49,0xdb,	0x0c,0x06,0x06,0x0a
165476c4f342Schristos.byte	0x48,0x24,0x24,0x6c,	0xb8,0x5c,0x5c,0xe4
165576c4f342Schristos.byte	0x9f,0xc2,0xc2,0x5d,	0xbd,0xd3,0xd3,0x6e
165676c4f342Schristos.byte	0x43,0xac,0xac,0xef,	0xc4,0x62,0x62,0xa6
165776c4f342Schristos.byte	0x39,0x91,0x91,0xa8,	0x31,0x95,0x95,0xa4
165876c4f342Schristos.byte	0xd3,0xe4,0xe4,0x37,	0xf2,0x79,0x79,0x8b
165976c4f342Schristos.byte	0xd5,0xe7,0xe7,0x32,	0x8b,0xc8,0xc8,0x43
166076c4f342Schristos.byte	0x6e,0x37,0x37,0x59,	0xda,0x6d,0x6d,0xb7
166176c4f342Schristos.byte	0x01,0x8d,0x8d,0x8c,	0xb1,0xd5,0xd5,0x64
166276c4f342Schristos.byte	0x9c,0x4e,0x4e,0xd2,	0x49,0xa9,0xa9,0xe0
166376c4f342Schristos.byte	0xd8,0x6c,0x6c,0xb4,	0xac,0x56,0x56,0xfa
166476c4f342Schristos.byte	0xf3,0xf4,0xf4,0x07,	0xcf,0xea,0xea,0x25
166576c4f342Schristos.byte	0xca,0x65,0x65,0xaf,	0xf4,0x7a,0x7a,0x8e
166676c4f342Schristos.byte	0x47,0xae,0xae,0xe9,	0x10,0x08,0x08,0x18
166776c4f342Schristos.byte	0x6f,0xba,0xba,0xd5,	0xf0,0x78,0x78,0x88
166876c4f342Schristos.byte	0x4a,0x25,0x25,0x6f,	0x5c,0x2e,0x2e,0x72
166976c4f342Schristos.byte	0x38,0x1c,0x1c,0x24,	0x57,0xa6,0xa6,0xf1
167076c4f342Schristos.byte	0x73,0xb4,0xb4,0xc7,	0x97,0xc6,0xc6,0x51
167176c4f342Schristos.byte	0xcb,0xe8,0xe8,0x23,	0xa1,0xdd,0xdd,0x7c
167276c4f342Schristos.byte	0xe8,0x74,0x74,0x9c,	0x3e,0x1f,0x1f,0x21
167376c4f342Schristos.byte	0x96,0x4b,0x4b,0xdd,	0x61,0xbd,0xbd,0xdc
167476c4f342Schristos.byte	0x0d,0x8b,0x8b,0x86,	0x0f,0x8a,0x8a,0x85
167576c4f342Schristos.byte	0xe0,0x70,0x70,0x90,	0x7c,0x3e,0x3e,0x42
167676c4f342Schristos.byte	0x71,0xb5,0xb5,0xc4,	0xcc,0x66,0x66,0xaa
167776c4f342Schristos.byte	0x90,0x48,0x48,0xd8,	0x06,0x03,0x03,0x05
167876c4f342Schristos.byte	0xf7,0xf6,0xf6,0x01,	0x1c,0x0e,0x0e,0x12
167976c4f342Schristos.byte	0xc2,0x61,0x61,0xa3,	0x6a,0x35,0x35,0x5f
168076c4f342Schristos.byte	0xae,0x57,0x57,0xf9,	0x69,0xb9,0xb9,0xd0
168176c4f342Schristos.byte	0x17,0x86,0x86,0x91,	0x99,0xc1,0xc1,0x58
168276c4f342Schristos.byte	0x3a,0x1d,0x1d,0x27,	0x27,0x9e,0x9e,0xb9
168376c4f342Schristos.byte	0xd9,0xe1,0xe1,0x38,	0xeb,0xf8,0xf8,0x13
168476c4f342Schristos.byte	0x2b,0x98,0x98,0xb3,	0x22,0x11,0x11,0x33
168576c4f342Schristos.byte	0xd2,0x69,0x69,0xbb,	0xa9,0xd9,0xd9,0x70
168676c4f342Schristos.byte	0x07,0x8e,0x8e,0x89,	0x33,0x94,0x94,0xa7
168776c4f342Schristos.byte	0x2d,0x9b,0x9b,0xb6,	0x3c,0x1e,0x1e,0x22
168876c4f342Schristos.byte	0x15,0x87,0x87,0x92,	0xc9,0xe9,0xe9,0x20
168976c4f342Schristos.byte	0x87,0xce,0xce,0x49,	0xaa,0x55,0x55,0xff
169076c4f342Schristos.byte	0x50,0x28,0x28,0x78,	0xa5,0xdf,0xdf,0x7a
169176c4f342Schristos.byte	0x03,0x8c,0x8c,0x8f,	0x59,0xa1,0xa1,0xf8
169276c4f342Schristos.byte	0x09,0x89,0x89,0x80,	0x1a,0x0d,0x0d,0x17
169376c4f342Schristos.byte	0x65,0xbf,0xbf,0xda,	0xd7,0xe6,0xe6,0x31
169476c4f342Schristos.byte	0x84,0x42,0x42,0xc6,	0xd0,0x68,0x68,0xb8
169576c4f342Schristos.byte	0x82,0x41,0x41,0xc3,	0x29,0x99,0x99,0xb0
169676c4f342Schristos.byte	0x5a,0x2d,0x2d,0x77,	0x1e,0x0f,0x0f,0x11
169776c4f342Schristos.byte	0x7b,0xb0,0xb0,0xcb,	0xa8,0x54,0x54,0xfc
169876c4f342Schristos.byte	0x6d,0xbb,0xbb,0xd6,	0x2c,0x16,0x16,0x3a
169976c4f342Schristos
170076c4f342SchristosAES_Td:
170176c4f342Schristos.byte	0x51,0xf4,0xa7,0x50,	0x7e,0x41,0x65,0x53	# Td0
170276c4f342Schristos.byte	0x1a,0x17,0xa4,0xc3,	0x3a,0x27,0x5e,0x96
170376c4f342Schristos.byte	0x3b,0xab,0x6b,0xcb,	0x1f,0x9d,0x45,0xf1
170476c4f342Schristos.byte	0xac,0xfa,0x58,0xab,	0x4b,0xe3,0x03,0x93
170576c4f342Schristos.byte	0x20,0x30,0xfa,0x55,	0xad,0x76,0x6d,0xf6
170676c4f342Schristos.byte	0x88,0xcc,0x76,0x91,	0xf5,0x02,0x4c,0x25
170776c4f342Schristos.byte	0x4f,0xe5,0xd7,0xfc,	0xc5,0x2a,0xcb,0xd7
170876c4f342Schristos.byte	0x26,0x35,0x44,0x80,	0xb5,0x62,0xa3,0x8f
170976c4f342Schristos.byte	0xde,0xb1,0x5a,0x49,	0x25,0xba,0x1b,0x67
171076c4f342Schristos.byte	0x45,0xea,0x0e,0x98,	0x5d,0xfe,0xc0,0xe1
171176c4f342Schristos.byte	0xc3,0x2f,0x75,0x02,	0x81,0x4c,0xf0,0x12
171276c4f342Schristos.byte	0x8d,0x46,0x97,0xa3,	0x6b,0xd3,0xf9,0xc6
171376c4f342Schristos.byte	0x03,0x8f,0x5f,0xe7,	0x15,0x92,0x9c,0x95
171476c4f342Schristos.byte	0xbf,0x6d,0x7a,0xeb,	0x95,0x52,0x59,0xda
171576c4f342Schristos.byte	0xd4,0xbe,0x83,0x2d,	0x58,0x74,0x21,0xd3
171676c4f342Schristos.byte	0x49,0xe0,0x69,0x29,	0x8e,0xc9,0xc8,0x44
171776c4f342Schristos.byte	0x75,0xc2,0x89,0x6a,	0xf4,0x8e,0x79,0x78
171876c4f342Schristos.byte	0x99,0x58,0x3e,0x6b,	0x27,0xb9,0x71,0xdd
171976c4f342Schristos.byte	0xbe,0xe1,0x4f,0xb6,	0xf0,0x88,0xad,0x17
172076c4f342Schristos.byte	0xc9,0x20,0xac,0x66,	0x7d,0xce,0x3a,0xb4
172176c4f342Schristos.byte	0x63,0xdf,0x4a,0x18,	0xe5,0x1a,0x31,0x82
172276c4f342Schristos.byte	0x97,0x51,0x33,0x60,	0x62,0x53,0x7f,0x45
172376c4f342Schristos.byte	0xb1,0x64,0x77,0xe0,	0xbb,0x6b,0xae,0x84
172476c4f342Schristos.byte	0xfe,0x81,0xa0,0x1c,	0xf9,0x08,0x2b,0x94
172576c4f342Schristos.byte	0x70,0x48,0x68,0x58,	0x8f,0x45,0xfd,0x19
172676c4f342Schristos.byte	0x94,0xde,0x6c,0x87,	0x52,0x7b,0xf8,0xb7
172776c4f342Schristos.byte	0xab,0x73,0xd3,0x23,	0x72,0x4b,0x02,0xe2
172876c4f342Schristos.byte	0xe3,0x1f,0x8f,0x57,	0x66,0x55,0xab,0x2a
172976c4f342Schristos.byte	0xb2,0xeb,0x28,0x07,	0x2f,0xb5,0xc2,0x03
173076c4f342Schristos.byte	0x86,0xc5,0x7b,0x9a,	0xd3,0x37,0x08,0xa5
173176c4f342Schristos.byte	0x30,0x28,0x87,0xf2,	0x23,0xbf,0xa5,0xb2
173276c4f342Schristos.byte	0x02,0x03,0x6a,0xba,	0xed,0x16,0x82,0x5c
173376c4f342Schristos.byte	0x8a,0xcf,0x1c,0x2b,	0xa7,0x79,0xb4,0x92
173476c4f342Schristos.byte	0xf3,0x07,0xf2,0xf0,	0x4e,0x69,0xe2,0xa1
173576c4f342Schristos.byte	0x65,0xda,0xf4,0xcd,	0x06,0x05,0xbe,0xd5
173676c4f342Schristos.byte	0xd1,0x34,0x62,0x1f,	0xc4,0xa6,0xfe,0x8a
173776c4f342Schristos.byte	0x34,0x2e,0x53,0x9d,	0xa2,0xf3,0x55,0xa0
173876c4f342Schristos.byte	0x05,0x8a,0xe1,0x32,	0xa4,0xf6,0xeb,0x75
173976c4f342Schristos.byte	0x0b,0x83,0xec,0x39,	0x40,0x60,0xef,0xaa
174076c4f342Schristos.byte	0x5e,0x71,0x9f,0x06,	0xbd,0x6e,0x10,0x51
174176c4f342Schristos.byte	0x3e,0x21,0x8a,0xf9,	0x96,0xdd,0x06,0x3d
174276c4f342Schristos.byte	0xdd,0x3e,0x05,0xae,	0x4d,0xe6,0xbd,0x46
174376c4f342Schristos.byte	0x91,0x54,0x8d,0xb5,	0x71,0xc4,0x5d,0x05
174476c4f342Schristos.byte	0x04,0x06,0xd4,0x6f,	0x60,0x50,0x15,0xff
174576c4f342Schristos.byte	0x19,0x98,0xfb,0x24,	0xd6,0xbd,0xe9,0x97
174676c4f342Schristos.byte	0x89,0x40,0x43,0xcc,	0x67,0xd9,0x9e,0x77
174776c4f342Schristos.byte	0xb0,0xe8,0x42,0xbd,	0x07,0x89,0x8b,0x88
174876c4f342Schristos.byte	0xe7,0x19,0x5b,0x38,	0x79,0xc8,0xee,0xdb
174976c4f342Schristos.byte	0xa1,0x7c,0x0a,0x47,	0x7c,0x42,0x0f,0xe9
175076c4f342Schristos.byte	0xf8,0x84,0x1e,0xc9,	0x00,0x00,0x00,0x00
175176c4f342Schristos.byte	0x09,0x80,0x86,0x83,	0x32,0x2b,0xed,0x48
175276c4f342Schristos.byte	0x1e,0x11,0x70,0xac,	0x6c,0x5a,0x72,0x4e
175376c4f342Schristos.byte	0xfd,0x0e,0xff,0xfb,	0x0f,0x85,0x38,0x56
175476c4f342Schristos.byte	0x3d,0xae,0xd5,0x1e,	0x36,0x2d,0x39,0x27
175576c4f342Schristos.byte	0x0a,0x0f,0xd9,0x64,	0x68,0x5c,0xa6,0x21
175676c4f342Schristos.byte	0x9b,0x5b,0x54,0xd1,	0x24,0x36,0x2e,0x3a
175776c4f342Schristos.byte	0x0c,0x0a,0x67,0xb1,	0x93,0x57,0xe7,0x0f
175876c4f342Schristos.byte	0xb4,0xee,0x96,0xd2,	0x1b,0x9b,0x91,0x9e
175976c4f342Schristos.byte	0x80,0xc0,0xc5,0x4f,	0x61,0xdc,0x20,0xa2
176076c4f342Schristos.byte	0x5a,0x77,0x4b,0x69,	0x1c,0x12,0x1a,0x16
176176c4f342Schristos.byte	0xe2,0x93,0xba,0x0a,	0xc0,0xa0,0x2a,0xe5
176276c4f342Schristos.byte	0x3c,0x22,0xe0,0x43,	0x12,0x1b,0x17,0x1d
176376c4f342Schristos.byte	0x0e,0x09,0x0d,0x0b,	0xf2,0x8b,0xc7,0xad
176476c4f342Schristos.byte	0x2d,0xb6,0xa8,0xb9,	0x14,0x1e,0xa9,0xc8
176576c4f342Schristos.byte	0x57,0xf1,0x19,0x85,	0xaf,0x75,0x07,0x4c
176676c4f342Schristos.byte	0xee,0x99,0xdd,0xbb,	0xa3,0x7f,0x60,0xfd
176776c4f342Schristos.byte	0xf7,0x01,0x26,0x9f,	0x5c,0x72,0xf5,0xbc
176876c4f342Schristos.byte	0x44,0x66,0x3b,0xc5,	0x5b,0xfb,0x7e,0x34
176976c4f342Schristos.byte	0x8b,0x43,0x29,0x76,	0xcb,0x23,0xc6,0xdc
177076c4f342Schristos.byte	0xb6,0xed,0xfc,0x68,	0xb8,0xe4,0xf1,0x63
177176c4f342Schristos.byte	0xd7,0x31,0xdc,0xca,	0x42,0x63,0x85,0x10
177276c4f342Schristos.byte	0x13,0x97,0x22,0x40,	0x84,0xc6,0x11,0x20
177376c4f342Schristos.byte	0x85,0x4a,0x24,0x7d,	0xd2,0xbb,0x3d,0xf8
177476c4f342Schristos.byte	0xae,0xf9,0x32,0x11,	0xc7,0x29,0xa1,0x6d
177576c4f342Schristos.byte	0x1d,0x9e,0x2f,0x4b,	0xdc,0xb2,0x30,0xf3
177676c4f342Schristos.byte	0x0d,0x86,0x52,0xec,	0x77,0xc1,0xe3,0xd0
177776c4f342Schristos.byte	0x2b,0xb3,0x16,0x6c,	0xa9,0x70,0xb9,0x99
177876c4f342Schristos.byte	0x11,0x94,0x48,0xfa,	0x47,0xe9,0x64,0x22
177976c4f342Schristos.byte	0xa8,0xfc,0x8c,0xc4,	0xa0,0xf0,0x3f,0x1a
178076c4f342Schristos.byte	0x56,0x7d,0x2c,0xd8,	0x22,0x33,0x90,0xef
178176c4f342Schristos.byte	0x87,0x49,0x4e,0xc7,	0xd9,0x38,0xd1,0xc1
178276c4f342Schristos.byte	0x8c,0xca,0xa2,0xfe,	0x98,0xd4,0x0b,0x36
178376c4f342Schristos.byte	0xa6,0xf5,0x81,0xcf,	0xa5,0x7a,0xde,0x28
178476c4f342Schristos.byte	0xda,0xb7,0x8e,0x26,	0x3f,0xad,0xbf,0xa4
178576c4f342Schristos.byte	0x2c,0x3a,0x9d,0xe4,	0x50,0x78,0x92,0x0d
178676c4f342Schristos.byte	0x6a,0x5f,0xcc,0x9b,	0x54,0x7e,0x46,0x62
178776c4f342Schristos.byte	0xf6,0x8d,0x13,0xc2,	0x90,0xd8,0xb8,0xe8
178876c4f342Schristos.byte	0x2e,0x39,0xf7,0x5e,	0x82,0xc3,0xaf,0xf5
178976c4f342Schristos.byte	0x9f,0x5d,0x80,0xbe,	0x69,0xd0,0x93,0x7c
179076c4f342Schristos.byte	0x6f,0xd5,0x2d,0xa9,	0xcf,0x25,0x12,0xb3
179176c4f342Schristos.byte	0xc8,0xac,0x99,0x3b,	0x10,0x18,0x7d,0xa7
179276c4f342Schristos.byte	0xe8,0x9c,0x63,0x6e,	0xdb,0x3b,0xbb,0x7b
179376c4f342Schristos.byte	0xcd,0x26,0x78,0x09,	0x6e,0x59,0x18,0xf4
179476c4f342Schristos.byte	0xec,0x9a,0xb7,0x01,	0x83,0x4f,0x9a,0xa8
179576c4f342Schristos.byte	0xe6,0x95,0x6e,0x65,	0xaa,0xff,0xe6,0x7e
179676c4f342Schristos.byte	0x21,0xbc,0xcf,0x08,	0xef,0x15,0xe8,0xe6
179776c4f342Schristos.byte	0xba,0xe7,0x9b,0xd9,	0x4a,0x6f,0x36,0xce
179876c4f342Schristos.byte	0xea,0x9f,0x09,0xd4,	0x29,0xb0,0x7c,0xd6
179976c4f342Schristos.byte	0x31,0xa4,0xb2,0xaf,	0x2a,0x3f,0x23,0x31
180076c4f342Schristos.byte	0xc6,0xa5,0x94,0x30,	0x35,0xa2,0x66,0xc0
180176c4f342Schristos.byte	0x74,0x4e,0xbc,0x37,	0xfc,0x82,0xca,0xa6
180276c4f342Schristos.byte	0xe0,0x90,0xd0,0xb0,	0x33,0xa7,0xd8,0x15
180376c4f342Schristos.byte	0xf1,0x04,0x98,0x4a,	0x41,0xec,0xda,0xf7
180476c4f342Schristos.byte	0x7f,0xcd,0x50,0x0e,	0x17,0x91,0xf6,0x2f
180576c4f342Schristos.byte	0x76,0x4d,0xd6,0x8d,	0x43,0xef,0xb0,0x4d
180676c4f342Schristos.byte	0xcc,0xaa,0x4d,0x54,	0xe4,0x96,0x04,0xdf
180776c4f342Schristos.byte	0x9e,0xd1,0xb5,0xe3,	0x4c,0x6a,0x88,0x1b
180876c4f342Schristos.byte	0xc1,0x2c,0x1f,0xb8,	0x46,0x65,0x51,0x7f
180976c4f342Schristos.byte	0x9d,0x5e,0xea,0x04,	0x01,0x8c,0x35,0x5d
181076c4f342Schristos.byte	0xfa,0x87,0x74,0x73,	0xfb,0x0b,0x41,0x2e
181176c4f342Schristos.byte	0xb3,0x67,0x1d,0x5a,	0x92,0xdb,0xd2,0x52
181276c4f342Schristos.byte	0xe9,0x10,0x56,0x33,	0x6d,0xd6,0x47,0x13
181376c4f342Schristos.byte	0x9a,0xd7,0x61,0x8c,	0x37,0xa1,0x0c,0x7a
181476c4f342Schristos.byte	0x59,0xf8,0x14,0x8e,	0xeb,0x13,0x3c,0x89
181576c4f342Schristos.byte	0xce,0xa9,0x27,0xee,	0xb7,0x61,0xc9,0x35
181676c4f342Schristos.byte	0xe1,0x1c,0xe5,0xed,	0x7a,0x47,0xb1,0x3c
181776c4f342Schristos.byte	0x9c,0xd2,0xdf,0x59,	0x55,0xf2,0x73,0x3f
181876c4f342Schristos.byte	0x18,0x14,0xce,0x79,	0x73,0xc7,0x37,0xbf
181976c4f342Schristos.byte	0x53,0xf7,0xcd,0xea,	0x5f,0xfd,0xaa,0x5b
182076c4f342Schristos.byte	0xdf,0x3d,0x6f,0x14,	0x78,0x44,0xdb,0x86
182176c4f342Schristos.byte	0xca,0xaf,0xf3,0x81,	0xb9,0x68,0xc4,0x3e
182276c4f342Schristos.byte	0x38,0x24,0x34,0x2c,	0xc2,0xa3,0x40,0x5f
182376c4f342Schristos.byte	0x16,0x1d,0xc3,0x72,	0xbc,0xe2,0x25,0x0c
182476c4f342Schristos.byte	0x28,0x3c,0x49,0x8b,	0xff,0x0d,0x95,0x41
182576c4f342Schristos.byte	0x39,0xa8,0x01,0x71,	0x08,0x0c,0xb3,0xde
182676c4f342Schristos.byte	0xd8,0xb4,0xe4,0x9c,	0x64,0x56,0xc1,0x90
182776c4f342Schristos.byte	0x7b,0xcb,0x84,0x61,	0xd5,0x32,0xb6,0x70
182876c4f342Schristos.byte	0x48,0x6c,0x5c,0x74,	0xd0,0xb8,0x57,0x42
182976c4f342Schristos
183076c4f342Schristos.byte	0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38	# Td4
183176c4f342Schristos.byte	0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb
183276c4f342Schristos.byte	0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87
183376c4f342Schristos.byte	0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb
183476c4f342Schristos.byte	0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d
183576c4f342Schristos.byte	0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e
183676c4f342Schristos.byte	0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2
183776c4f342Schristos.byte	0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25
183876c4f342Schristos.byte	0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16
183976c4f342Schristos.byte	0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92
184076c4f342Schristos.byte	0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda
184176c4f342Schristos.byte	0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84
184276c4f342Schristos.byte	0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a
184376c4f342Schristos.byte	0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06
184476c4f342Schristos.byte	0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02
184576c4f342Schristos.byte	0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b
184676c4f342Schristos.byte	0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea
184776c4f342Schristos.byte	0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73
184876c4f342Schristos.byte	0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85
184976c4f342Schristos.byte	0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e
185076c4f342Schristos.byte	0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89
185176c4f342Schristos.byte	0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b
185276c4f342Schristos.byte	0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20
185376c4f342Schristos.byte	0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4
185476c4f342Schristos.byte	0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31
185576c4f342Schristos.byte	0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f
185676c4f342Schristos.byte	0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d
185776c4f342Schristos.byte	0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef
185876c4f342Schristos.byte	0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0
185976c4f342Schristos.byte	0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
186076c4f342Schristos.byte	0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
186176c4f342Schristos.byte	0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
186276c4f342Schristos
186376c4f342SchristosAES_Te4:
186476c4f342Schristos.byte	0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5	# Te4
186576c4f342Schristos.byte	0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76
186676c4f342Schristos.byte	0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0
186776c4f342Schristos.byte	0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0
186876c4f342Schristos.byte	0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
186976c4f342Schristos.byte	0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15
187076c4f342Schristos.byte	0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a
187176c4f342Schristos.byte	0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75
187276c4f342Schristos.byte	0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0
187376c4f342Schristos.byte	0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84
187476c4f342Schristos.byte	0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b
187576c4f342Schristos.byte	0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf
187676c4f342Schristos.byte	0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85
187776c4f342Schristos.byte	0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8
187876c4f342Schristos.byte	0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5
187976c4f342Schristos.byte	0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2
188076c4f342Schristos.byte	0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17
188176c4f342Schristos.byte	0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73
188276c4f342Schristos.byte	0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88
188376c4f342Schristos.byte	0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb
188476c4f342Schristos.byte	0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c
188576c4f342Schristos.byte	0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79
188676c4f342Schristos.byte	0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9
188776c4f342Schristos.byte	0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08
188876c4f342Schristos.byte	0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6
188976c4f342Schristos.byte	0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a
189076c4f342Schristos.byte	0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e
189176c4f342Schristos.byte	0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e
189276c4f342Schristos.byte	0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94
189376c4f342Schristos.byte	0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
189476c4f342Schristos.byte	0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
189576c4f342Schristos.byte	0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
189676c4f342Schristos
189776c4f342Schristos.byte	0x01,0x00,0x00,0x00,	0x02,0x00,0x00,0x00	# rcon
189876c4f342Schristos.byte	0x04,0x00,0x00,0x00,	0x08,0x00,0x00,0x00
189976c4f342Schristos.byte	0x10,0x00,0x00,0x00,	0x20,0x00,0x00,0x00
190076c4f342Schristos.byte	0x40,0x00,0x00,0x00,	0x80,0x00,0x00,0x00
190176c4f342Schristos.byte	0x1B,0x00,0x00,0x00,	0x36,0x00,0x00,0x00
1902