aes-m68k.S revision 1.2
1|	$NetBSD: aes-m68k.S,v 1.2 2018/03/05 00:59:43 christos Exp $
2
3| Copyright (C) 2016 Tetsuya Isaki. All rights reserved.
4| Copyright (C) 2016 Y.Sugahara (moveccr). All rights reserved.
5|
6| Redistribution and use in source and binary forms, with or without
7| modification, are permitted provided that the following conditions
8| are met:
9| 1. Redistributions of source code must retain the above copyright
10|    notice, this list of conditions and the following disclaimer.
11| 2. Redistributions in binary form must reproduce the above copyright
12|    notice, this list of conditions and the following disclaimer in the
13|    documentation and/or other materials provided with the distribution.
14|
15| THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16| IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17| OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18| IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19| INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
20| BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
22| AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23| OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25| SUCH DAMAGE.
26
27#define rd_key	(0)
28#define rounds	(60 * 4)
29
30| int
31| AES_set_encrypt_key(const unsigned char *userKey,
32|  const int bits,
33|  AES_KEY *key)
34	.global	AES_set_encrypt_key
35	.type	AES_set_encrypt_key, @function
36AES_set_encrypt_key:
37	moveml	%d2-%d7/%a2-%a6,%sp@-
38	moveal	%sp@(44+4),%a0		| userKey
39	moveal	%sp@(44+8),%a1		| bits
40	moveal	%sp@(44+12),%a3		| key
41
42	tstl	%a0
43	beq	pek_return1		| return -1 if userKey == NULL
44	tstl	%a3
45	beq	pek_return1		| return -1 if key == NULL
46
47	cmpaw	#128,%a1
48	bne	pek192_check		| unless bits == 128
49pek128:
50	| %d0-%d7 rk[0..7]
51	| %a0 userKey, Te0
52	| %a1          Te1
53	| %a2          Te2
54	| %a3 key,     Te3
55	| %a4 rcon_byte
56	| %a5 &rk[4]
57	| %a6 end of rcon_byte
58
59	moveq	#10,%d0
60	movel	%d0,%a3@(rounds)	| key->rounds = 10
61
62	lea	%a3@(rd_key),%a5	| &rk[0]
63
64	| rk[0] = GETU32(userKey     );
65	| rk[1] = GETU32(userKey +  4);
66	| rk[2] = GETU32(userKey +  8);
67	| rk[3] = GETU32(userKey + 12);
68	moveml	%a0@,%d0-%d3
69	movel	%d0,%a5@+
70	movel	%d1,%a5@+
71	movel	%d2,%a5@+
72	movel	%d3,%a5@+
73
74	lea	%pc@(Te0),%a0		| %a0 = Te0
75	lea	%a0@(256*4),%a1		| %a1 = Te1
76	lea	%a1@(256*4),%a2		| %a2 = Te2
77	lea	%a2@(256*4),%a3		| %a3 = Te3
78
79	moveq	#0,%d7
80	lea	%pc@(rcon_byte),%a4
81	lea	%a4@(10),%a6
82
83pek128_loop:
84					| d6 consists of four Te index bytes
85	movel	%d3,%d5			| d5=rk[3] as {1,2,3,0}
86	moveb	%d5,%d7			| d7=temp
87	moveb	%a0@(2,%d7:w:4),%d4	| d4=$xxxxxx00
88	swap	%d5			| d5={3,0,1,2}
89	lsll	#8,%d4			| d4=$xxxx00xx
90	moveb	%d5,%d7			| d7=temp>>16
91	moveb	%a2@(0,%d7:w:4),%d6	| d6=$xxxxxx22
92	lsrl	#8,%d5			| d5={x,3,0,1}
93	moveb	%a4@+,%d7		| LSByte ^= rcon[i]
94	eorb	%d7,%d6
95	lsll	#8,%d6			| d6=$xxxx22xx
96	moveb	%d5,%d7			| d7=temp>>24
97	moveb	%a1@(3,%d7:w:4),%d4	| d4=$xxxx0011
98	swap	%d5			| d5={0,1,x,3}
99	moveb	%d5,%d7			| d7=temp>>8
100	moveb	%a3@(1,%d7:w:4),%d6	| d6=$xxxx2233
101	swap	%d6			| d6=$2233xxxx
102	movew	%d4,%d6			| d6=$22330011
103
104	eorl	%d6,%d0			| rk[4] = rk[0]^ (Te..)
105	movel	%d0,%a5@+
106	eorl	%d0,%d1			| rk[5] = rk[1] ^ rk[4];
107	movel	%d1,%a5@+
108	eorl	%d1,%d2			| rk[6] = rk[2] ^ rk[5];
109	movel	%d2,%a5@+
110	eorl	%d2,%d3			| rk[7] = rk[3] ^ rk[6];
111	movel	%d3,%a5@+
112
113	cmpal	%a4,%a6
114	bne	pek128_loop		|if (++i == 10) return 0;
115
116pek_return0:
117	moveql	#0,%d0
118pek_return:
119	moveml	%sp@+,%d2-%d7/%a2-%a6
120	rts
121
122pek192_check:
123	| %a0 userKey
124	| %a1 bits
125	| %a3 key
126	cmpaw	#192,%a1
127	bne	pek256_check		| unless bits == 192
128pek192:
129	| %a0 Te0
130	| %a1 Te1
131	| %a2 Te2
132	| %a3 Te3
133	| %a4 rcon_byte
134	| %a5 &rk[6]
135	| %a6 end of rcon_byte
136	moveq	#12,%d0
137	movel	%d0,%a3@(rounds)	| key->rounds = 12
138
139	lea	%a3@(rd_key),%a5	| &rk[0]
140
141	| rk[0] = GETU32(userKey     );
142	| rk[1] = GETU32(userKey +  4);
143	| rk[2] = GETU32(userKey +  8);
144	| rk[3] = GETU32(userKey + 12);
145	| rk[4] = GETU32(userKey + 16);
146	| rk[5] = GETU32(userKey + 20);
147	moveml	%a0@,%d0-%d5		| copy userKey[0..23]
148	movel	%d0,%a5@+
149	movel	%d1,%a5@+
150	movel	%d2,%a5@+
151	movel	%d3,%a5@+
152	movel	%d4,%a5@+
153	movel	%d5,%a5@		| read again later
154
155	lea	%pc@(Te0   +2),%a0	| %a0 = Te0 + 2
156	lea	%a0@(256*4 -2+3),%a1	| %a1 = Te1 + 3
157	lea	%a1@(256*4 -3+0),%a2	| %a2 = Te2 + 0
158	lea	%a2@(256*4 +0+1),%a3	| %a3 = Te3 + 1
159
160	moveq	#0,%d7
161	lea	%pc@(rcon_byte),%a4
162	lea	%a4@(8),%a6
163	bra	pek192_loop_start
164
165pek192_loop:
166	eorl	%d3,%d4			| rk[10] = rk[4] ^ rk[9]
167	movel	%d4,%a5@+		| %d4 is rk[10]
168	eorl	%d4,%d5			| rk[11] = rk[5] ^ rk[10]
169	movel	%d5,%a5@		| %d5 is rk[11]
170
171pek192_loop_start:
172	| %d0..%d5 = rk[0..5]
173	|
174	| temp = rk[5];
175	| rk[6]  = (Te0[(temp      ) & 0xff] & 0x0000ff00)
176	| rk[6] |= (Te3[(temp >>  8) & 0xff] & 0x00ff0000)
177	| rk[6] |= (Te2[(temp >> 16) & 0xff] & 0xff000000)
178	|         ^ rcon[i]
179	| rk[6] |= (Te1[(temp >> 24)       ] & 0x000000ff)
180	moveb	%d5,%d7			| temp >> 0
181	moveb	%a0@(%d7:w:4),%d6	| d6=$xxxxxx00
182	rorl	#8,%d6			| d6=$00xxxxxx
183	lsrl	#8,%d5			| temp >> 8
184	moveb	%d5,%d7
185	moveb	%a3@(%d7:w:4),%d6	| d6=$00xxxx11
186	rorl	#8,%d6			| d6=$1100xxxx
187	lsrl	#8,%d5			| temp >> 16
188	moveb	%d5,%d7
189	moveb	%a2@(%d7:w:4),%d6	| d6=$1100xx22
190	moveb	%a4@+,%d7		| LSByte ^= rcon[i]
191	eorb	%d7,%d6
192	rorl	#8,%d6			| d6=$221100xx
193	lsrl	#8,%d5			| temp >> 24
194	moveb	%a1@(%d5:w:4),%d6	| d6=$22110033
195
196	movel	%a5@+,%d5		| read rk[5] again
197					| (faster than keeping %a5)
198
199	eorl	%d6,%d0			| rk[6] ^= rk[0]
200	movel	%d0,%a5@+		| %d0 is rk[6]
201	eorl	%d0,%d1			| rk[7] = rk[1] ^ rk[6]
202	movel	%d1,%a5@+		| %d1 is rk[7]
203	eorl	%d1,%d2			| rk[8] = rk[2] ^ rk[7]
204	movel	%d2,%a5@+		| %d2 is rk[8]
205	eorl	%d2,%d3			| rk[9] = rk[3] ^ rk[8]
206	movel	%d3,%a5@+		| %d3 is rk[9]
207
208	cmpal	%a4,%a6
209	bne	pek192_loop
210	bra	pek_return0
211
212
213pek256_check:
214	| %a0 userKey
215	| %a1 bits
216	| %a3 key
217	cmpaw	#256,%a1
218	bne	pek_return2		| otherwise return -2
219pek256:
220	| %a0 Te0
221	| %a1 Te1
222	| %a2 Te2
223	| %a3 Te3
224	| %a4 rcon_byte
225	| %a5 &rk[6]
226	| %a6 end of rcon_byte
227	moveq	#14,%d0
228	movel	%d0,%a3@(rounds)	| key->rounds = 14
229
230	lea	%a3@(rd_key),%a5	| &rk[0]
231
232	| rk[0] = GETU32(userKey     );
233	| rk[1] = GETU32(userKey +  4);
234	| rk[2] = GETU32(userKey +  8);
235	| rk[3] = GETU32(userKey + 12);
236	| rk[4] = GETU32(userKey + 16);
237	| rk[5] = GETU32(userKey + 20);
238	| rk[6] = GETU32(userKey + 24);
239	| rk[7] = GETU32(userKey + 28);
240	moveml	%a0@,%d0-%d7		| copy userKey[0..31]
241	movel	%d0,%a5@+
242	movel	%d1,%a5@+
243	movel	%d2,%a5@+
244	movel	%d3,%a5@+
245	movel	%d4,%a5@+
246	movel	%d5,%a5@+
247	movel	%d6,%a5@+
248	movel	%d7,%a5@+
249
250	lea	%pc@(Te0   +2),%a0	| %a0 = Te0 + 2
251	lea	%a0@(256*4 -2+3),%a1	| %a1 = Te1 + 3
252	lea	%a1@(256*4 -3+0),%a2	| %a2 = Te2 + 0
253	lea	%a2@(256*4 +0+1),%a3	| %a3 = Te3 + 1
254
255	lea	%pc@(rcon_byte),%a4
256	lea	%a4@(7),%a6
257	bra	pek256_loop_start
258
259pek256_loop:
260	| %d0: rk[8]  -> work
261	| %d1: rk[9]  -> work
262	| %d2: rk[10]
263	| %d3: rk[11] -> work
264	| %d4: rk[4]
265	| %d5: work   -> rk[5]
266	| %d6: work   -> rk[6]
267	| %d7: work   -> rk[7]
268	| %a5 = &rk[12]
269	|
270	| temp = rk[11];
271	| rk[12]  = (Te1[(temp      ) & 0xff] & 0x000000ff);
272	| rk[12] |= (Te0[(temp >>  8) & 0xff] & 0x0000ff00);
273	| rk[12] |= (Te3[(temp >> 16) & 0xff] & 0x00ff0000);
274	| rk[12] |= (Te2[(temp >> 24)       ] & 0xff000000);
275	| rk[12] ^= rk[ 4];
276
277	moveml	%a5@(-7*4),%d5-%d7	| %d5..%d7 = rk[5..7]
278
279	moveq	#0,%d0
280	moveb	%d3,%d0			| temp >> 0
281	moveb	%a1@(%d0:w:4),%d1	| d1=$xxxxxx00
282	rorl	#8,%d1			| d1=$00xxxxxx
283	lsrl	#8,%d3			| temp >> 8
284	moveb	%d3,%d0
285	moveb	%a0@(%d0:w:4),%d1	| d1=$00xxxx11
286	rorl	#8,%d1			| d1=$1100xxxx
287	lsrl	#8,%d3			| temp >> 16
288	moveb	%d3,%d0
289	moveb	%a3@(%d0:w:4),%d1	| d1=$1100xx22
290	rorl	#8,%d1			| d1=$221100xx
291	lsrl	#8,%d3			| temp >> 24
292	moveb	%a2@(%d3:w:4),%d1	| d1=$22110033
293	rorl	#8,%d1			| d1=$33221100
294
295	eorl	%d1,%d4			| rk[12] ^= rk[4]
296	movel	%d4,%a5@+		| %d4 is rk[12]
297	eorl	%d4,%d5			| rk[13] = rk[5] ^ rk[12]
298	movel	%d5,%a5@+		| %d5 is rk[13]
299	eorl	%d5,%d6			| rk[14] = rk[6] ^ rk[13]
300	movel	%d6,%a5@+		| %d6 is rk[14]
301	eorl	%d6,%d7			| rk[15] = rk[7] ^ rk[14]
302	movel	%d7,%a5@+		| %d7 is rk[15]
303
304	| %d0: work -> rk[8]
305	| %d1: work -> rk[9]
306	| %d2: rk[10]
307	| %d3: work -> rk[11]
308	| %d4: rk[12]
309	| %d5: rk[13]
310	| %d6: rk[14]
311	| %d7: rk[15]
312	| %a5 = &rk[16]
313
314	moveml	%a5@(-8*4),%d0-%d1	| %d0..%d1 = rk[8..9]
315	movel	%a5@(-5*4),%d3		| %d3 = rk[11]
316
317pek256_loop_start:
318	| %d0: rk[0]
319	| %d1: rk[1]
320	| %d2: rk[2]
321	| %d3: rk[3]
322	| %d4: rk[4]
323	| %d5: rk[5] -> work
324	| %d6: rk[6] -> work
325	| %d7: rk[7]
326	| %a5 = &rk[8]
327	|
328	| temp = rk[7]
329	| rk[8]  = (Te0[(temp      ) & 0xff] & 0x0000ff00);
330	| rk[8] |= (Te3[(temp >>  8) & 0xff] & 0x00ff0000);
331	| rk[8] |= (Te2[(temp >> 16) & 0xff] & 0xff000000);
332	| rk[8] ^= rcon[i];
333	| rk[8] |= (Te1[(temp >> 24)       ] & 0x000000ff);
334	| rk[8] ^= rk[ 0];
335
336	moveq	#0,%d5
337	moveb	%d7,%d5			| temp >> 0
338	moveb	%a0@(%d5:w:4),%d6	| d6=$xxxxxx00
339	rorl	#8,%d6			| d6=$00xxxxxx
340	lsrl	#8,%d7			| temp >> 8
341	moveb	%d7,%d5
342	moveb	%a3@(%d5:w:4),%d6	| d6=$00xxxx11
343	rorl	#8,%d6			| d6=$1100xxxx
344	lsrl	#8,%d7			| temp >> 16
345	moveb	%d7,%d5
346	moveb	%a2@(%d5:w:4),%d6	| d6=$1100xx22
347	moveb	%a4@+,%d5		| LSByte ^= rcon[i]
348	eorb	%d5,%d6
349	rorl	#8,%d6			| d6=$221100xx
350	lsrl	#8,%d7			| temp >> 24
351	moveb	%a1@(%d7:w:4),%d6	| d6=$22110033
352
353	eorl	%d6,%d0			| rk[8] ^= rk[0]
354	movel	%d0,%a5@+		| %d0 is rk[8]
355	eorl	%d0,%d1			| rk[9] = rk[1] ^ rk[8]
356	movel	%d1,%a5@+		| %d1 is rk[9]
357	eorl	%d1,%d2			| rk[10] = rk[2] ^ rk[9]
358	movel	%d2,%a5@+		| %d2 is rk[10]
359	eorl	%d2,%d3			| rk[11] = rk[3] ^ rk[10]
360	movel	%d3,%a5@+		| %d3 is rk[11]
361
362	| %d0: rk[8]
363	| %d1: rk[9]
364	| %d2: rk[10]
365	| %d3: rk[11]
366	| %d4: rk[4]
367	| %d5: work
368	| %d6: work
369	| %d7: work
370
371	cmpal	%a4,%a6
372	bne	pek256_loop
373	bra	pek_return0
374
375pek_return1:
376	moveql	#-1,%d0
377	bra	pek_return
378pek_return2:
379	moveql	#-2,%d0
380	bra	pek_return
381	.size	AES_set_encrypt_key, .-AES_set_encrypt_key
382
383
384| int
385| private_AES_set_decrypt_key(const unsigned char *userKey,
386|  const int bits,
387|  AES_KEY *key)
388	.global	AES_set_decrypt_key
389	.type	AES_set_decrypt_key, @function
390AES_set_decrypt_key:
391	moveml	%d2-%d7/%a2-%a6,%sp@-
392	moveal	%sp@(44+4),%a0		| userKey
393	moveal	%sp@(44+8),%a1		| bits
394	moveal	%sp@(44+12),%a3		| key
395
396	/* first, start with an encryption schedule */
397	movel	%a3,%sp@-
398	movel	%a1,%sp@-
399	movel	%a0,%sp@-
400	bsr	AES_set_encrypt_key
401	lea	%sp@(12),%sp
402	bmi	pdk_return
403
404	/* invert the order of the round keys: */
405	lea	%a3@(rd_key),%a5	| %a5 := &rk[0]
406	movel	%a3@(rounds),%d4
407	lslw	#4,%d4
408	lea	%a5@(%d4),%a4		| %a4 := &rk[j]
409	moveal	%a4,%a6			| %a6 for the next loop
410pdk_invert_loop:
411	movel	%a5@,%d0
412	movel	%a4@,%a5@+
413	movel	%d0,%a4@+
414
415	movel	%a5@,%d0
416	movel	%a4@,%a5@+
417	movel	%d0,%a4@+
418
419	movel	%a5@,%d0
420	movel	%a4@,%a5@+
421	movel	%d0,%a4@+
422
423	movel	%a5@,%d0
424	movel	%a4@,%a5@+
425	movel	%d0,%a4@
426
427	lea	%a4@(-28),%a4
428
429	cmpal	%a4,%a5
430	bcs	pdk_invert_loop
431
432	/*
433	 * apply the inverse MixColumn transform to all round keys but
434	 * the first and the last:
435	 */
436	lea	%a3@(rd_key + 16),%a5	| rk += 4
437	lea	%pc@(Te1+3),%a4		| LSByte of Te1
438	lea	%pc@(Td0),%a0		| %a0 = Td0
439	lea	%a0@(256*4),%a1		| %a1 = Td1
440	lea	%a1@(256*4),%a2		| %a2 = Td2
441	lea	%a2@(256*4),%a3		| %a3 = Td3
442
443	| for (i = 1; i < key->rounds; i++)
444	moveq	#0,%d1
445pdk_apply_loop:
446	| rk[0] =
447	|     Td3[Te1[(rk[0]      ) & 0xff] & 0xff] ^
448	|     Td2[Te1[(rk[0] >>  8) & 0xff] & 0xff] ^
449	|     Td1[Te1[(rk[0] >> 16) & 0xff] & 0xff] ^
450	|     Td0[Te1[(rk[0] >> 24)       ] & 0xff];
451	movel	%a5@,%d0
452	moveb	%d0,%d1			| rk[0] >>  0
453	moveb	%a4@(%d1:w:4),%d1	| Te1[]
454	movel	%a3@(%d1:w:4),%d2	| Td3[]
455	lsrl	#8,%d0
456	moveb	%d0,%d1			| rk[0] >>  8
457	moveb	%a4@(%d1:w:4),%d1	| Te1[]
458	movel	%a2@(%d1:w:4),%d3	| Td3[]
459	eorl	%d3,%d2
460	lsrl	#8,%d0
461	moveb	%d0,%d1			| rk[0] >> 16
462	moveb	%a4@(%d1:w:4),%d1	| Te1[]
463	movel	%a1@(%d1:w:4),%d3	| Td3[]
464	eorl	%d3,%d2
465	lsrl	#8,%d0			| rk[0] >> 24
466	moveb	%a4@(%d0:w:4),%d1	| Te1[]
467	movel	%a0@(%d1:w:4),%d3
468	eorl	%d3,%d2
469	movel	%d2,%a5@+		| -> rk[0]
470
471	cmpal	%a6,%a5
472	bcs	pdk_apply_loop
473
474	moveql	#0,%d0
475pdk_return:
476	moveml	%sp@+,%d2-%d7/%a2-%a6
477	rts
478	.size	AES_set_decrypt_key, .-AES_set_decrypt_key
479
480
481| void
482| AES_encrypt(const unsigned char *in,
483|  unsigned char *out,
484|  const AES_KEY *key)
485	.global AES_encrypt
486	.type	AES_encrypt, @function
487AES_encrypt:
488	| %a0  in,  Te0
489	| %a1  out, Te1
490	| %a2       Te2
491	| %a3  key, Te3
492	| %a4  loop end
493	| %a5  rk
494	moveml	%d2-%d7/%a2-%a5,%sp@-
495	moveal	%sp@(40+4),%a0		| in
496	moveal	%sp@(40+12),%a3		| key
497
498	lea	%a3@(rd_key),%a5
499	movel	%a3@(rounds),%d0
500
501	lslw	#4,%d0			| key->rounds * 16
502	lea	%a5@(0,%d0),%a4		| %a4 := %a5 + key->rounds * 16
503
504	movel	%a0@+,%d0
505	movel	%a5@+,%d5
506	eorl	%d5,%d0			| s0 = GETU32(in     ) ^ rk[0]
507
508	movel	%a0@+,%d1
509	movel	%a5@+,%d5
510	eorl	%d5,%d1			| s1 = GETU32(in +  4) ^ rk[1]
511
512	movel	%a0@+,%d2
513	movel	%a5@+,%d5
514	eorl	%d5,%d2			| s2 = GETU32(in +  8) ^ rk[2]
515
516	movel	%a0@+,%d3
517	movel	%a5@+,%d5
518	eorl	%d5,%d3			| s3 = GETU32(in + 12) ^ rk[3]
519
520	lea	%pc@(Te0),%a0		| %a0 = Te0
521	lea	%a0@(256*4),%a1		| %a1 = Te1
522	lea	%a1@(256*4),%a2		| %a2 = Te2
523	lea	%a2@(256*4),%a3		| %a3 = Te3
524
525	bra	enc_loop_start
526
527enc_loop:
528	| s1  = Te3[(t0      ) & 0xff];
529	| s2  = Te2[(t0 >>  8) & 0xff];
530	| s3  = Te1[(t0 >> 16) & 0xff];
531	| s0  = Te0[(t0 >> 24)       ];
532	|
533	| s2 ^= Te3[(t1      ) & 0xff];
534	| s3 ^= Te2[(t1 >>  8) & 0xff];
535	| s0 ^= Te1[(t1 >> 16) & 0xff];
536	| s1 ^= Te0[(t1 >> 24)       ];
537	|
538	| s3 ^= Te3[(t2      ) & 0xff];
539	| s0 ^= Te2[(t2 >>  8) & 0xff];
540	| s1 ^= Te1[(t2 >> 16) & 0xff];
541	| s2 ^= Te0[(t2 >> 24)       ];
542	|
543	| s0 ^= Te3[(t3      ) & 0xff];
544	| s1 ^= Te2[(t3 >>  8) & 0xff];
545	| s2 ^= Te1[(t3 >> 16) & 0xff];
546	| s3 ^= Te0[(t3 >> 24)       ];
547	|
548	| s0 ^= rk[0];
549	| s1 ^= rk[1];
550	| s2 ^= rk[2];
551	| s3 ^= rk[3];
552	|
553	| %d0..%d3: s0..s3
554	| %d4..%d7: t0..t3
555
556	moveq	#0,%d3
557	moveb	%d4,%d3
558	movel	%a3@(%d3:w:4),%d1
559	lsrl	#8,%d4
560	moveb	%d4,%d3
561	movel	%a2@(%d3:w:4),%d2
562	lsrl	#8,%d4
563	moveb	%d4,%d3
564	movel	%a1@(%d3:w:4),%d3
565	lsrl	#8,%d4
566	movel	%a0@(%d4:w:4),%d0
567
568	moveb	%d5,%d4
569	movel	%a3@(%d4:w:4),%d4
570	eorl	%d4,%d2
571	lsrl	#8,%d5
572	moveql	#0,%d4
573	moveb	%d5,%d4
574	movel	%a2@(%d4:w:4),%d4
575	eorl	%d4,%d3
576	lsrl	#8,%d5
577	moveql	#0,%d4
578	moveb	%d5,%d4
579	movel	%a1@(%d4:w:4),%d4
580	eorl	%d4,%d0
581	lsrl	#8,%d5
582	movel	%a0@(%d5:w:4),%d4
583	eorl	%d4,%d1
584
585	moveb	%d6,%d5
586	movel	%a3@(%d5:w:4),%d4
587	eorl	%d4,%d3
588	lsrl	#8,%d6
589	moveb	%d6,%d5
590	movel	%a2@(%d5:w:4),%d4
591	eorl	%d4,%d0
592	lsrl	#8,%d6
593	moveb	%d6,%d5
594	movel	%a1@(%d5:w:4),%d4
595	eorl	%d4,%d1
596	lsrl	#8,%d6
597	movel	%a0@(%d6:w:4),%d4
598	eorl	%d4,%d2
599
600	moveb	%d7,%d5
601	movel	%a3@(%d5:w:4),%d4
602	eorl	%d4,%d0
603	lsrl	#8,%d7
604	moveb	%d7,%d5
605	movel	%a2@(%d5:w:4),%d4
606	eorl	%d4,%d1
607	lsrl	#8,%d7
608	moveb	%d7,%d5
609	movel	%a1@(%d5:w:4),%d4
610	eorl	%d4,%d2
611	lsrl	#8,%d7
612	movel	%a0@(%d7:w:4),%d4
613	eorl	%d4,%d3
614
615	movel	%a5@+,%d4
616	eorl	%d4,%d0
617	movel	%a5@+,%d4
618	eorl	%d4,%d1
619	movel	%a5@+,%d4
620	eorl	%d4,%d2
621	movel	%a5@+,%d4
622	eorl	%d4,%d3
623
624enc_loop_start:
625	| t1  = Te3[(s0      ) & 0xff];
626	| t2  = Te2[(s0 >>  8) & 0xff];
627	| t3  = Te1[(s0 >> 16) & 0xff];
628	| t0  = Te0[(s0 >> 24) & 0xff];
629	|
630	| t2 ^= Te3[(s1 >>  0) & 0xff];
631	| t3 ^= Te2[(s1 >>  8) & 0xff];
632	| t0 ^= Te1[(s1 >> 16) & 0xff];
633	| t1 ^= Te0[(s1 >> 24) & 0xff];
634	|
635	| t3 ^= Te3[(s2 >>  0) & 0xff];
636	| t0 ^= Te2[(s2 >>  8) & 0xff];
637	| t1 ^= Te1[(s2 >> 16) & 0xff];
638	| t2 ^= Te0[(s2 >> 24) & 0xff];
639	|
640	| t0 ^= Te3[(s3 >>  0) & 0xff];
641	| t1 ^= Te2[(s3 >>  8) & 0xff];
642	| t2 ^= Te1[(s3 >> 16) & 0xff];
643	| t3 ^= Te0[(s3 >> 24) & 0xff];
644	|
645	| t0 ^= rk[4];
646	| t1 ^= rk[5];
647	| t2 ^= rk[6];
648	| t3 ^= rk[7];
649	|
650	| %d0..%d3: s0..s3
651	| %d4..%d7: t0..t3
652
653	moveql	#0,%d7
654	moveb	%d0,%d7
655	movel	%a3@(%d7:w:4),%d5
656	lsrl	#8,%d0
657	moveb	%d0,%d7
658	movel	%a2@(%d7:w:4),%d6
659	lsrl	#8,%d0
660	moveb	%d0,%d7
661	movel	%a1@(%d7:w:4),%d7
662	lsrl	#8,%d0
663	movel	%a0@(%d0:w:4),%d4
664
665	moveb	%d1,%d0
666	movel	%a3@(%d0:w:4),%d0
667	eorl	%d0,%d6
668	lsrl	#8,%d1
669	moveql	#0,%d0
670	moveb	%d1,%d0
671	movel	%a2@(%d0:w:4),%d0
672	eorl	%d0,%d7
673	lsrl	#8,%d1
674	moveql	#0,%d0
675	moveb	%d1,%d0
676	movel	%a1@(%d0:w:4),%d0
677	eorl	%d0,%d4
678	lsrl	#8,%d1
679	movel	%a0@(%d1:w:4),%d0
680	eorl	%d0,%d5
681
682	moveb	%d2,%d1
683	movel	%a3@(%d1:w:4),%d0
684	eorl	%d0,%d7
685	lsrl	#8,%d2
686	moveb	%d2,%d1
687	movel	%a2@(%d1:w:4),%d0
688	eorl	%d0,%d4
689	lsrl	#8,%d2
690	moveb	%d2,%d1
691	movel	%a1@(%d1:w:4),%d0
692	eorl	%d0,%d5
693	lsrl	#8,%d2
694	movel	%a0@(%d2:w:4),%d0
695	eorl	%d0,%d6
696
697	moveb	%d3,%d1
698	movel	%a3@(%d1:w:4),%d0
699	eorl	%d0,%d4
700	lsrl	#8,%d3
701	moveb	%d3,%d1
702	movel	%a2@(%d1:w:4),%d0
703	eorl	%d0,%d5
704	lsrl	#8,%d3
705	moveb	%d3,%d1
706	movel	%a1@(%d1:w:4),%d0
707	eorl	%d0,%d6
708	lsrl	#8,%d3
709	movel	%a0@(%d3:w:4),%d0
710	eorl	%d0,%d7
711
712	movel	%a5@+,%d0
713	eorl	%d0,%d4
714	movel	%a5@+,%d0
715	eorl	%d0,%d5
716	movel	%a5@+,%d0
717	eorl	%d0,%d6
718	movel	%a5@+,%d0
719	eorl	%d0,%d7
720
721	cmpal	%a5,%a4
722	bne	enc_loop		| if (--r == 0) break;
723enc_last:
724	/*
725	 * apply last round and
726	 * map cipher state to byte array block:
727	 */
728	moveal	%sp@(40+8),%a4		| out
729	addql	#2,%a0			| Te0 += 2
730	addql	#3,%a1			| Te1 += 3
731	addql	#1,%a3			| Te3 += 1
732					| Te2 += 0
733
734	| s1  = (Te1[(t0      ) & 0xff] & 0x000000ff);
735	| s2  = (Te0[(t0 >>  8) & 0xff] & 0x0000ff00);
736	| s3  = (Te3[(t0 >> 16) & 0xff] & 0x00ff0000);
737	| s0  = (Te2[(t0 >> 24)       ] & 0xff000000);
738	|
739	| s2 |= (Te1[(t1      ) & 0xff] & 0x000000ff);
740	| s3 |= (Te0[(t1 >>  8) & 0xff] & 0x0000ff00);
741	| s0 |= (Te3[(t1 >> 16) & 0xff] & 0x00ff0000);
742	| s1 |= (Te2[(t1 >> 24)       ] & 0xff000000);
743	|
744	| s3 |= (Te1[(t2      ) & 0xff] & 0x000000ff);
745	| s0 |= (Te0[(t2 >>  8) & 0xff] & 0x0000ff00);
746	| s1 |= (Te3[(t2 >> 16) & 0xff] & 0x00ff0000);
747	| s2 |= (Te2[(t2 >> 24)       ] & 0xff000000);
748	|
749	| s0 |= (Te1[(t3      ) & 0xff] & 0x000000ff);
750	| s1 |= (Te0[(t3 >>  8) & 0xff] & 0x0000ff00);
751	| s2 |= (Te3[(t3 >> 16) & 0xff] & 0x00ff0000);
752	| s3 |= (Te2[(t3 >> 24)       ] & 0xff000000);
753
754	moveql	#0,%d0
755	moveb	%d4,%d0			| t0 >> 0
756	moveb	%a1@(%d0:w:4),%d1	| d1=$xxxxxx00
757	lsrl	#8,%d4			| t0 >> 8
758	lsll	#8,%d1			| d1=$xxxx00xx
759	moveb	%d4,%d0
760	moveb	%a0@(%d0:w:4),%d2	| d2=$xxxxxx00
761	lsrl	#8,%d4			| t0 >> 16
762	lsll	#8,%d2			| d2=$xxxx00xx
763	moveb	%d4,%d0
764	moveb	%a3@(%d0:w:4),%d3	| d3=$xxxxxx00
765	lsrl	#8,%d4			| t0 >> 24
766	lsll	#8,%d3			| d3=$xxxx00xx
767	moveb	%a2@(%d4:w:4),%d0	| d0=$xxxxxx00
768	lsll	#8,%d0			| d0=$xxxx00xx
769
770	moveb	%d5,%d4			| t1 >> 0
771	moveb	%a1@(%d4:w:4),%d2	| d2=$xxxx0011
772	lsrl	#8,%d5			| t1 >> 8
773	lsll	#8,%d2			| d2=$xx0011xx
774	moveb	%d5,%d4
775	moveb	%a0@(%d4:w:4),%d3	| d3=$xxxx0011
776	lsrl	#8,%d5			| t1 >> 16
777	lsll	#8,%d3			| d3=$xx0011xx
778	moveb	%d5,%d4
779	moveb	%a3@(%d4:w:4),%d0	| d0=$xxxx0011
780	lsrl	#8,%d5			| t1 >> 24
781	lsll	#8,%d0			| d0=$xx0011xx
782	moveb	%a1@(%d5:w:4),%d1	| d1=$xxxx0011
783	lsll	#8,%d1			| d1=$xx0011xx
784
785	moveb	%d6,%d4			| t2 >> 0
786	moveb	%a1@(%d4:w:4),%d3	| d3=$xx001122
787	lsrl	#8,%d6			| t2 >> 8
788	lsll	#8,%d3			| d3=$001122xx
789	moveb	%d6,%d4
790	moveb	%a0@(%d4:w:4),%d0	| d0=$xx001122
791	lsrl	#8,%d6			| t2 >> 16
792	lsll	#8,%d0			| d0=$001122xx
793	moveb	%d6,%d4
794	moveb	%a3@(%d4:w:4),%d1	| d1=$xx001122
795	lsrl	#8,%d6			| t2 >> 24
796	lsll	#8,%d1			| d1=$001122xx
797	moveb	%a2@(%d6:w:4),%d2	| d2=$xx001122
798	lsll	#8,%d2			| d2=$001122xx
799
800	moveb	%d7,%d4			| t3 >> 0
801	moveb	%a1@(%d4:w:4),%d0	| d0=$00112233
802	lsrl	#8,%d7			| t3 >> 8
803	moveb	%d7,%d4
804	moveb	%a0@(%d4:w:4),%d1	| d1=$00112233
805	lsrl	#8,%d7			| t3 >> 16
806	roll	#8,%d1			| d1=$11223300
807	moveb	%d7,%d4
808	moveb	%a3@(%d4:w:4),%d2	| d2=$00112233
809	lsrl	#8,%d7			| t3 >> 24
810	swap	%d2			| d2=$22330011
811	moveb	%a2@(%d7:w:4),%d3	| d3=$00112233
812	rorl	#8,%d3			| d3=$33001122
813
814	movel	%a5@+,%d4
815	eorl	%d4,%d0			| s0 ^= rk[0]
816	movel	%a5@+,%d4
817	eorl	%d4,%d1			| s1 ^= rk[1]
818	movel	%a5@+,%d4
819	eorl	%d4,%d2			| s2 ^= rk[2]
820	movel	%a5@+,%d4
821	eorl	%d4,%d3			| s3 ^= rk[3]
822
823	movel	%d0,%a4@+		| PUTU32(out     , s0);
824	movel	%d1,%a4@+		| PUTU32(out +  4, s1);
825	movel	%d2,%a4@+		| PUTU32(out +  8, s2);
826	movel	%d3,%a4@		| PUTU32(out + 12, s3);
827
828	moveml	%sp@+,%d2-%d7/%a2-%a5
829	rts
830	.size	AES_set_decrypt_key, .-AES_set_decrypt_key
831
832| void
833| AES_decrypt(const unsigned char *in,
834|  unsigned char *out,
835|  const AES_KEY *key)
836	.global	AES_decrypt
837	.type	AES_decrypt, @function
838AES_decrypt:
839	| %a0  in,  Td0
840	| %a1  out, Td1
841	| %a2       Td2
842	| %a3  key, Td3
843	| %a4  loop end, Td4
844	| %a5  rk
845	moveml	%d2-%d7/%a2-%a5,%sp@-
846	moveal	%sp@(40+4),%a0		| in
847	moveal	%sp@(40+12),%a3		| key
848
849	lea	%a3@(rd_key),%a5
850	movel	%a3@(rounds),%d0
851
852	lslw	#4,%d0			| key->rounds * 16
853	lea	%a5@(0,%d0),%a4		| %a4 := %a5 + key->rounds * 16
854
855	movel	%a0@+,%d0
856	movel	%a5@+,%d5
857	eorl	%d5,%d0			| s0 = GETU32(in     ) ^ rk[0]
858
859	movel	%a0@+,%d1
860	movel	%a5@+,%d5
861	eorl	%d5,%d1			| s1 = GETU32(in +  4) ^ rk[1]
862
863	movel	%a0@+,%d2
864	movel	%a5@+,%d5
865	eorl	%d5,%d2			| s2 = GETU32(in +  8) ^ rk[2]
866
867	movel	%a0@+,%d3
868	movel	%a5@+,%d5
869	eorl	%d5,%d3			| s3 = GETU32(in + 12) ^ rk[3]
870
871	lea	%pc@(Td0),%a0		| %a0 = Td0
872	lea	%a0@(256*4),%a1		| %a1 = Td1
873	lea	%a1@(256*4),%a2		| %a2 = Td2
874	lea	%a2@(256*4),%a3		| %a3 = Td3
875
876	bra	dec_loop_start
877
878dec_loop:
879	| s3  = Td3[(t0      ) & 0xff];
880	| s2  = Td2[(t0 >>  8) & 0xff];
881	| s1  = Td1[(t0 >> 16) & 0xff];
882	| s0  = Td0[(t0 >> 24)       ];
883	|
884	| s0 ^= Td3[(t1      ) & 0xff];
885	| s3 ^= Td2[(t1 >>  8) & 0xff];
886	| s2 ^= Td1[(t1 >> 16) & 0xff];
887	| s1 ^= Td0[(t1 >> 24)       ];
888	|
889	| s1 ^= Td3[(t2      ) & 0xff];
890	| s0 ^= Td2[(t2 >>  8) & 0xff];
891	| s3 ^= Td1[(t2 >> 16) & 0xff];
892	| s2 ^= Td0[(t2 >> 24)       ];
893	|
894	| s2 ^= Td3[(t3      ) & 0xff];
895	| s1 ^= Td2[(t3 >>  8) & 0xff];
896	| s0 ^= Td1[(t3 >> 16) & 0xff];
897	| s3 ^= Td0[(t3 >> 24)       ];
898	|
899	| s0 ^= rk[0];
900	| s1 ^= rk[1];
901	| s2 ^= rk[2];
902	| s3 ^= rk[3];
903	|
904	| %d0..%d3: s0..s3
905	| %d4..%d7: t0..t3
906
907	moveq	#0,%d1
908	moveb	%d4,%d1
909	movel	%a3@(%d1:w:4),%d3
910	lsrl	#8,%d4
911	moveb	%d4,%d1
912	movel	%a2@(%d1:w:4),%d2
913	lsrl	#8,%d4
914	moveb	%d4,%d1
915	movel	%a1@(%d1:w:4),%d1
916	lsrl	#8,%d4
917	movel	%a0@(%d4:w:4),%d0
918
919	moveb	%d5,%d4
920	movel	%a3@(%d4:w:4),%d4
921	eorl	%d4,%d0
922	lsrl	#8,%d5
923	moveql	#0,%d4
924	moveb	%d5,%d4
925	movel	%a2@(%d4:w:4),%d4
926	eorl	%d4,%d3
927	lsrl	#8,%d5
928	moveql	#0,%d4
929	moveb	%d5,%d4
930	movel	%a1@(%d4:w:4),%d4
931	eorl	%d4,%d2
932	lsrl	#8,%d5
933	movel	%a0@(%d5:w:4),%d4
934	eorl	%d4,%d1
935
936	moveb	%d6,%d5
937	movel	%a3@(%d5:w:4),%d4
938	eorl	%d4,%d1
939	lsrl	#8,%d6
940	moveb	%d6,%d5
941	movel	%a2@(%d5:w:4),%d4
942	eorl	%d4,%d0
943	lsrl	#8,%d6
944	moveb	%d6,%d5
945	movel	%a1@(%d5:w:4),%d4
946	eorl	%d4,%d3
947	lsrl	#8,%d6
948	movel	%a0@(%d6:w:4),%d4
949	eorl	%d4,%d2
950
951	moveb	%d7,%d5
952	movel	%a3@(%d5:w:4),%d4
953	eorl	%d4,%d2
954	lsrl	#8,%d7
955	moveb	%d7,%d5
956	movel	%a2@(%d5:w:4),%d4
957	eorl	%d4,%d1
958	lsrl	#8,%d7
959	moveb	%d7,%d5
960	movel	%a1@(%d5:w:4),%d4
961	eorl	%d4,%d0
962	lsrl	#8,%d7
963	movel	%a0@(%d7:w:4),%d4
964	eorl	%d4,%d3
965
966	movel	%a5@+,%d4
967	eorl	%d4,%d0
968	movel	%a5@+,%d4
969	eorl	%d4,%d1
970	movel	%a5@+,%d4
971	eorl	%d4,%d2
972	movel	%a5@+,%d4
973	eorl	%d4,%d3
974
975dec_loop_start:
976	| t3  = Td3[(s0      ) & 0xff];
977	| t2  = Td2[(s0 >>  8) & 0xff];
978	| t1  = Td1[(s0 >> 16) & 0xff];
979	| t0  = Td0[(s0 >> 24) & 0xff];
980	|
981	| t0 ^= Td3[(s1 >>  0) & 0xff];
982	| t3 ^= Td2[(s1 >>  8) & 0xff];
983	| t2 ^= Td1[(s1 >> 16) & 0xff];
984	| t1 ^= Td0[(s1 >> 24) & 0xff];
985	|
986	| t1 ^= Td3[(s2 >>  0) & 0xff];
987	| t0 ^= Td2[(s2 >>  8) & 0xff];
988	| t3 ^= Td1[(s2 >> 16) & 0xff];
989	| t2 ^= Td0[(s2 >> 24) & 0xff];
990	|
991	| t2 ^= Td3[(s3 >>  0) & 0xff];
992	| t1 ^= Td2[(s3 >>  8) & 0xff];
993	| t0 ^= Td1[(s3 >> 16) & 0xff];
994	| t3 ^= Td0[(s3 >> 24) & 0xff];
995	|
996	| t0 ^= rk[4];
997	| t1 ^= rk[5];
998	| t2 ^= rk[6];
999	| t3 ^= rk[7];
1000	|
1001	| %d0..%d3: s0..s3
1002	| %d4..%d7: t0..t3
1003
1004	moveql	#0,%d5
1005	moveb	%d0,%d5
1006	movel	%a3@(%d5:w:4),%d7
1007	lsrl	#8,%d0
1008	moveb	%d0,%d5
1009	movel	%a2@(%d5:w:4),%d6
1010	lsrl	#8,%d0
1011	moveb	%d0,%d5
1012	movel	%a1@(%d5:w:4),%d5
1013	lsrl	#8,%d0
1014	movel	%a0@(%d0:w:4),%d4
1015
1016	moveb	%d1,%d0
1017	movel	%a3@(%d0:w:4),%d0
1018	eorl	%d0,%d4
1019	lsrl	#8,%d1
1020	moveql	#0,%d0
1021	moveb	%d1,%d0
1022	movel	%a2@(%d0:w:4),%d0
1023	eorl	%d0,%d7
1024	lsrl	#8,%d1
1025	moveql	#0,%d0
1026	moveb	%d1,%d0
1027	movel	%a1@(%d0:w:4),%d0
1028	eorl	%d0,%d6
1029	lsrl	#8,%d1
1030	movel	%a0@(%d1:w:4),%d0
1031	eorl	%d0,%d5
1032
1033	moveb	%d2,%d1
1034	movel	%a3@(%d1:w:4),%d0
1035	eorl	%d0,%d5
1036	lsrl	#8,%d2
1037	moveb	%d2,%d1
1038	movel	%a2@(%d1:w:4),%d0
1039	eorl	%d0,%d4
1040	lsrl	#8,%d2
1041	moveb	%d2,%d1
1042	movel	%a1@(%d1:w:4),%d0
1043	eorl	%d0,%d7
1044	lsrl	#8,%d2
1045	movel	%a0@(%d2:w:4),%d0
1046	eorl	%d0,%d6
1047
1048	moveb	%d3,%d1
1049	movel	%a3@(%d1:w:4),%d0
1050	eorl	%d0,%d6
1051	lsrl	#8,%d3
1052	moveb	%d3,%d1
1053	movel	%a2@(%d1:w:4),%d0
1054	eorl	%d0,%d5
1055	lsrl	#8,%d3
1056	moveb	%d3,%d1
1057	movel	%a1@(%d1:w:4),%d0
1058	eorl	%d0,%d4
1059	lsrl	#8,%d3
1060	movel	%a0@(%d3:w:4),%d0
1061	eorl	%d0,%d7
1062
1063	movel	%a5@+,%d0
1064	eorl	%d0,%d4
1065	movel	%a5@+,%d0
1066	eorl	%d0,%d5
1067	movel	%a5@+,%d0
1068	eorl	%d0,%d6
1069	movel	%a5@+,%d0
1070	eorl	%d0,%d7
1071
1072	cmpal	%a5,%a4
1073	bne	dec_loop		| if (--r == 0) break;
1074
1075	/*
1076	 * apply last round and
1077	 * map cipher state to byte array block:
1078	 */
1079	| s3  = ((u32)Td4[(t0 >>  0) & 0xff] <<  0);
1080	| s2  = ((u32)Td4[(t0 >>  8) & 0xff] <<  8);
1081	| s1  = ((u32)Td4[(t0 >> 16) & 0xff] << 16);
1082	| s0  = ((u32)Td4[(t0 >> 24) & 0xff] << 24);
1083	|
1084	| s0 |= ((u32)Td4[(t1 >>  0) & 0xff] <<  0);
1085	| s3 |= ((u32)Td4[(t1 >>  8) & 0xff] <<  8);
1086	| s2 |= ((u32)Td4[(t1 >> 16) & 0xff] << 16);
1087	| s1 |= ((u32)Td4[(t1 >> 24) & 0xff] << 24);
1088	|
1089	| s1 |= ((u32)Td4[(t2 >>  0) & 0xff] <<  0);
1090	| s0 |= ((u32)Td4[(t2 >>  8) & 0xff] <<  8);
1091	| s3 |= ((u32)Td4[(t2 >> 16) & 0xff] << 16);
1092	| s2 |= ((u32)Td4[(t2 >> 24) & 0xff] << 24);
1093	|
1094	| s2 |= ((u32)Td4[(t3 >>  0) & 0xff] <<  0);
1095	| s1 |= ((u32)Td4[(t3 >>  8) & 0xff] <<  8);
1096	| s0 |= ((u32)Td4[(t3 >> 16) & 0xff] << 16);
1097	| s3 |= ((u32)Td4[(t3 >> 24) & 0xff] << 24);
1098	|
1099	| s0 ^= rk[0];
1100	| PUTU32(out     , s0);
1101	| s1 ^= rk[1];
1102	| PUTU32(out +  4, s1);
1103	| s2 ^= rk[2];
1104	| PUTU32(out +  8, s2);
1105	| s3 ^= rk[3];
1106	| PUTU32(out + 12, s3);
1107	|
1108	| %d4..%d7: t0..t3
1109	| %d0..%d3: s0..s3
1110
1111	lea	%pc@(Td4),%a4
1112	moveq	#0,%d0
1113	moveb	%d4,%d0
1114	moveb	%a4@(%d0),%d3
1115	rorl	#8,%d3
1116	lsrl	#8,%d4
1117	moveb	%d4,%d0
1118	moveb	%a4@(%d0),%d2
1119	rorl	#8,%d2
1120	lsrl	#8,%d4
1121	moveb	%d4,%d0
1122	moveb	%a4@(%d0),%d1
1123	rorl	#8,%d1
1124	lsrl	#8,%d4
1125	moveb	%a4@(%d4),%d0
1126	rorl	#8,%d0
1127
1128	moveb	%d5,%d4
1129	moveb	%a4@(%d4),%d0
1130	rorl	#8,%d0
1131	lsrl	#8,%d5
1132	moveb	%d5,%d4
1133	moveb	%a4@(%d4),%d3
1134	rorl	#8,%d3
1135	lsrl	#8,%d5
1136	moveb	%d5,%d4
1137	moveb	%a4@(%d4),%d2
1138	rorl	#8,%d2
1139	lsrl	#8,%d5
1140	moveb	%a4@(%d5),%d1
1141	rorl	#8,%d1
1142
1143	moveb	%d6,%d4
1144	moveb	%a4@(%d4),%d1
1145	rorl	#8,%d1			| d1=$221100xx
1146	lsrl	#8,%d6
1147	moveb	%d6,%d4
1148	moveb	%a4@(%d4),%d0
1149	rorl	#8,%d0			| d0=$221100xx
1150	lsrl	#8,%d6
1151	moveb	%d6,%d4
1152	moveb	%a4@(%d4),%d3
1153	rorl	#8,%d3			| d3=$221100xx
1154	lsrl	#8,%d6
1155	moveb	%a4@(%d6),%d2
1156	rorl	#8,%d2			| d2=$221100xx
1157
1158	moveb	%d7,%d4
1159	moveb	%a4@(%d4),%d2		| d2=$22110033
1160	lsrl	#8,%d7
1161	moveb	%d7,%d4
1162	moveb	%a4@(%d4),%d1		| d1=$22110033
1163	roll	#8,%d1			| d1=$11003322
1164	lsrl	#8,%d7
1165	moveb	%d7,%d4
1166	moveb	%a4@(%d4),%d0		| d0=$22110033
1167	swap	%d0			| d0=$00332211
1168	lsrl	#8,%d7
1169	moveb	%a4@(%d7),%d3		| d3=$22110033
1170	rorl	#8,%d3			| d3=$33221100
1171
1172	moveal	%sp@(40+8),%a4		| out
1173
1174	movel	%a5@+,%d4
1175	eorl	%d4,%d0
1176	movel	%d0,%a4@+
1177
1178	movel	%a5@+,%d4
1179	eorl	%d4,%d1
1180	movel	%d1,%a4@+
1181
1182	movel	%a5@+,%d4
1183	eorl	%d4,%d2
1184	movel	%d2,%a4@+
1185
1186	movel	%a5@+,%d4
1187	eorl	%d4,%d3
1188	movel	%d3,%a4@
1189
1190	moveml	%sp@+,%d2-%d7/%a2-%a5
1191	rts
1192	.size	AES_decrypt, .-AES_decrypt
1193
1194	.data
1195	.balign	4
1196Te0:
1197	.long	0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d
1198	.long	0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554
1199	.long	0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d
1200	.long	0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a
1201	.long	0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87
1202	.long	0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b
1203	.long	0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea
1204	.long	0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b
1205	.long	0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a
1206	.long	0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f
1207	.long	0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108
1208	.long	0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f
1209	.long	0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e
1210	.long	0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5
1211	.long	0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d
1212	.long	0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f
1213	.long	0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e
1214	.long	0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb
1215	.long	0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce
1216	.long	0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497
1217	.long	0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c
1218	.long	0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed
1219	.long	0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b
1220	.long	0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a
1221	.long	0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16
1222	.long	0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594
1223	.long	0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81
1224	.long	0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3
1225	.long	0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a
1226	.long	0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504
1227	.long	0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163
1228	.long	0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d
1229	.long	0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f
1230	.long	0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739
1231	.long	0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47
1232	.long	0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395
1233	.long	0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f
1234	.long	0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883
1235	.long	0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c
1236	.long	0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76
1237	.long	0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e
1238	.long	0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4
1239	.long	0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6
1240	.long	0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b
1241	.long	0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7
1242	.long	0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0
1243	.long	0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25
1244	.long	0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818
1245	.long	0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72
1246	.long	0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651
1247	.long	0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21
1248	.long	0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85
1249	.long	0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa
1250	.long	0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12
1251	.long	0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0
1252	.long	0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9
1253	.long	0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133
1254	.long	0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7
1255	.long	0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920
1256	.long	0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a
1257	.long	0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17
1258	.long	0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8
1259	.long	0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11
1260	.long	0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a
1261Te1:
1262	.long	0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b
1263	.long	0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5
1264	.long	0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b
1265	.long	0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676
1266	.long	0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d
1267	.long	0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0
1268	.long	0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf
1269	.long	0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0
1270	.long	0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626
1271	.long	0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc
1272	.long	0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1
1273	.long	0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515
1274	.long	0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3
1275	.long	0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a
1276	.long	0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2
1277	.long	0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575
1278	.long	0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a
1279	.long	0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0
1280	.long	0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3
1281	.long	0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484
1282	.long	0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded
1283	.long	0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b
1284	.long	0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939
1285	.long	0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf
1286	.long	0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb
1287	.long	0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585
1288	.long	0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f
1289	.long	0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8
1290	.long	0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f
1291	.long	0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5
1292	.long	0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121
1293	.long	0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2
1294	.long	0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec
1295	.long	0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717
1296	.long	0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d
1297	.long	0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373
1298	.long	0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc
1299	.long	0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888
1300	.long	0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414
1301	.long	0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb
1302	.long	0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a
1303	.long	0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c
1304	.long	0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262
1305	.long	0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979
1306	.long	0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d
1307	.long	0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9
1308	.long	0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea
1309	.long	0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808
1310	.long	0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e
1311	.long	0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6
1312	.long	0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f
1313	.long	0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a
1314	.long	0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666
1315	.long	0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e
1316	.long	0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9
1317	.long	0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e
1318	.long	0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111
1319	.long	0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494
1320	.long	0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9
1321	.long	0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf
1322	.long	0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d
1323	.long	0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868
1324	.long	0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f
1325	.long	0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616
1326Te2:
1327	.long	0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b
1328	.long	0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5
1329	.long	0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b
1330	.long	0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76
1331	.long	0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d
1332	.long	0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0
1333	.long	0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af
1334	.long	0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0
1335	.long	0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26
1336	.long	0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc
1337	.long	0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1
1338	.long	0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15
1339	.long	0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3
1340	.long	0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a
1341	.long	0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2
1342	.long	0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75
1343	.long	0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a
1344	.long	0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0
1345	.long	0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3
1346	.long	0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384
1347	.long	0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed
1348	.long	0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b
1349	.long	0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239
1350	.long	0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf
1351	.long	0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb
1352	.long	0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185
1353	.long	0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f
1354	.long	0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8
1355	.long	0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f
1356	.long	0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5
1357	.long	0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221
1358	.long	0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2
1359	.long	0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec
1360	.long	0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17
1361	.long	0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d
1362	.long	0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673
1363	.long	0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc
1364	.long	0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88
1365	.long	0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814
1366	.long	0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb
1367	.long	0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a
1368	.long	0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c
1369	.long	0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462
1370	.long	0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279
1371	.long	0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d
1372	.long	0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9
1373	.long	0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea
1374	.long	0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008
1375	.long	0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e
1376	.long	0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6
1377	.long	0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f
1378	.long	0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a
1379	.long	0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66
1380	.long	0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e
1381	.long	0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9
1382	.long	0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e
1383	.long	0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211
1384	.long	0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394
1385	.long	0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9
1386	.long	0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df
1387	.long	0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d
1388	.long	0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068
1389	.long	0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f
1390	.long	0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16
1391Te3:
1392	.long	0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6
1393	.long	0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491
1394	.long	0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56
1395	.long	0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec
1396	.long	0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa
1397	.long	0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb
1398	.long	0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45
1399	.long	0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b
1400	.long	0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c
1401	.long	0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83
1402	.long	0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9
1403	.long	0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a
1404	.long	0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d
1405	.long	0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f
1406	.long	0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf
1407	.long	0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea
1408	.long	0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34
1409	.long	0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b
1410	.long	0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d
1411	.long	0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713
1412	.long	0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1
1413	.long	0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6
1414	.long	0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72
1415	.long	0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85
1416	.long	0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed
1417	.long	0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411
1418	.long	0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe
1419	.long	0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b
1420	.long	0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05
1421	.long	0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1
1422	.long	0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342
1423	.long	0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf
1424	.long	0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3
1425	.long	0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e
1426	.long	0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a
1427	.long	0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6
1428	.long	0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3
1429	.long	0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b
1430	.long	0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28
1431	.long	0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad
1432	.long	0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14
1433	.long	0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8
1434	.long	0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4
1435	.long	0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2
1436	.long	0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da
1437	.long	0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049
1438	.long	0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf
1439	.long	0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810
1440	.long	0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c
1441	.long	0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197
1442	.long	0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e
1443	.long	0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f
1444	.long	0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc
1445	.long	0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c
1446	.long	0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069
1447	.long	0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927
1448	.long	0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322
1449	.long	0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733
1450	.long	0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9
1451	.long	0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5
1452	.long	0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a
1453	.long	0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0
1454	.long	0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e
1455	.long	0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c
1456
1457Td0:
1458	.long	0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96
1459	.long	0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393
1460	.long	0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25
1461	.long	0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f
1462	.long	0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1
1463	.long	0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6
1464	.long	0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da
1465	.long	0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844
1466	.long	0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd
1467	.long	0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4
1468	.long	0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45
1469	.long	0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94
1470	.long	0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7
1471	.long	0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a
1472	.long	0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5
1473	.long	0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c
1474	.long	0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1
1475	.long	0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a
1476	.long	0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75
1477	.long	0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051
1478	.long	0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46
1479	.long	0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff
1480	.long	0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77
1481	.long	0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb
1482	.long	0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000
1483	.long	0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e
1484	.long	0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927
1485	.long	0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a
1486	.long	0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e
1487	.long	0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16
1488	.long	0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d
1489	.long	0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8
1490	.long	0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd
1491	.long	0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34
1492	.long	0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163
1493	.long	0xd731dcca, 0x42638510, 0x13972240, 0x84c61120
1494	.long	0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d
1495	.long	0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0
1496	.long	0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422
1497	.long	0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef
1498	.long	0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36
1499	.long	0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4
1500	.long	0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662
1501	.long	0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5
1502	.long	0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3
1503	.long	0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b
1504	.long	0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8
1505	.long	0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6
1506	.long	0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6
1507	.long	0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0
1508	.long	0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815
1509	.long	0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f
1510	.long	0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df
1511	.long	0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f
1512	.long	0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e
1513	.long	0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713
1514	.long	0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89
1515	.long	0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c
1516	.long	0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf
1517	.long	0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86
1518	.long	0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f
1519	.long	0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541
1520	.long	0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190
1521	.long	0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742
1522Td1:
1523	.long	0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e
1524	.long	0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303
1525	.long	0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c
1526	.long	0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3
1527	.long	0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0
1528	.long	0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9
1529	.long	0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259
1530	.long	0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8
1531	.long	0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971
1532	.long	0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a
1533	.long	0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f
1534	.long	0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b
1535	.long	0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8
1536	.long	0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab
1537	.long	0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708
1538	.long	0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682
1539	.long	0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2
1540	.long	0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe
1541	.long	0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb
1542	.long	0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10
1543	.long	0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd
1544	.long	0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015
1545	.long	0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e
1546	.long	0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee
1547	.long	0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000
1548	.long	0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72
1549	.long	0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39
1550	.long	0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e
1551	.long	0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91
1552	.long	0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a
1553	.long	0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17
1554	.long	0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9
1555	.long	0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60
1556	.long	0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e
1557	.long	0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1
1558	.long	0xcad731dc, 0x10426385, 0x40139722, 0x2084c611
1559	.long	0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1
1560	.long	0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3
1561	.long	0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964
1562	.long	0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390
1563	.long	0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b
1564	.long	0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf
1565	.long	0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46
1566	.long	0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af
1567	.long	0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512
1568	.long	0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb
1569	.long	0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a
1570	.long	0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8
1571	.long	0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c
1572	.long	0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266
1573	.long	0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8
1574	.long	0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6
1575	.long	0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604
1576	.long	0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551
1577	.long	0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41
1578	.long	0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647
1579	.long	0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c
1580	.long	0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1
1581	.long	0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737
1582	.long	0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db
1583	.long	0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340
1584	.long	0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95
1585	.long	0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1
1586	.long	0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857
1587Td2:
1588	.long	0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27
1589	.long	0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3
1590	.long	0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502
1591	.long	0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562
1592	.long	0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe
1593	.long	0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3
1594	.long	0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552
1595	.long	0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9
1596	.long	0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9
1597	.long	0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce
1598	.long	0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253
1599	.long	0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908
1600	.long	0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b
1601	.long	0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655
1602	.long	0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337
1603	.long	0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16
1604	.long	0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69
1605	.long	0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6
1606	.long	0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6
1607	.long	0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e
1608	.long	0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6
1609	.long	0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050
1610	.long	0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9
1611	.long	0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8
1612	.long	0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000
1613	.long	0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a
1614	.long	0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d
1615	.long	0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436
1616	.long	0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b
1617	.long	0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12
1618	.long	0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b
1619	.long	0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e
1620	.long	0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f
1621	.long	0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb
1622	.long	0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4
1623	.long	0xdccad731, 0x85104263, 0x22401397, 0x112084c6
1624	.long	0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729
1625	.long	0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1
1626	.long	0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9
1627	.long	0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233
1628	.long	0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4
1629	.long	0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad
1630	.long	0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e
1631	.long	0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3
1632	.long	0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25
1633	.long	0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b
1634	.long	0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f
1635	.long	0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15
1636	.long	0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0
1637	.long	0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2
1638	.long	0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7
1639	.long	0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791
1640	.long	0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496
1641	.long	0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665
1642	.long	0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b
1643	.long	0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6
1644	.long	0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13
1645	.long	0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47
1646	.long	0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7
1647	.long	0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844
1648	.long	0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3
1649	.long	0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d
1650	.long	0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456
1651	.long	0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8
1652Td3:
1653	.long	0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a
1654	.long	0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b
1655	.long	0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5
1656	.long	0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5
1657	.long	0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d
1658	.long	0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b
1659	.long	0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95
1660	.long	0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e
1661	.long	0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27
1662	.long	0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d
1663	.long	0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562
1664	.long	0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9
1665	.long	0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752
1666	.long	0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66
1667	.long	0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3
1668	.long	0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced
1669	.long	0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e
1670	.long	0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4
1671	.long	0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4
1672	.long	0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd
1673	.long	0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d
1674	.long	0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60
1675	.long	0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767
1676	.long	0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79
1677	.long	0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000
1678	.long	0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c
1679	.long	0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736
1680	.long	0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24
1681	.long	0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b
1682	.long	0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c
1683	.long	0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12
1684	.long	0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814
1685	.long	0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3
1686	.long	0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b
1687	.long	0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8
1688	.long	0x31dccad7, 0x63851042, 0x97224013, 0xc6112084
1689	.long	0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7
1690	.long	0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077
1691	.long	0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247
1692	.long	0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22
1693	.long	0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698
1694	.long	0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f
1695	.long	0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254
1696	.long	0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582
1697	.long	0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf
1698	.long	0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb
1699	.long	0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883
1700	.long	0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef
1701	.long	0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629
1702	.long	0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035
1703	.long	0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533
1704	.long	0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17
1705	.long	0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4
1706	.long	0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46
1707	.long	0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb
1708	.long	0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d
1709	.long	0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb
1710	.long	0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a
1711	.long	0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73
1712	.long	0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678
1713	.long	0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2
1714	.long	0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff
1715	.long	0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064
1716	.long	0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0
1717Td4:
1718	.byte	0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38
1719	.byte	0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb
1720	.byte	0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87
1721	.byte	0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb
1722	.byte	0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d
1723	.byte	0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e
1724	.byte	0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2
1725	.byte	0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25
1726	.byte	0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16
1727	.byte	0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92
1728	.byte	0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda
1729	.byte	0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84
1730	.byte	0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a
1731	.byte	0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06
1732	.byte	0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02
1733	.byte	0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b
1734	.byte	0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea
1735	.byte	0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73
1736	.byte	0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85
1737	.byte	0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e
1738	.byte	0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89
1739	.byte	0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b
1740	.byte	0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20
1741	.byte	0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4
1742	.byte	0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31
1743	.byte	0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f
1744	.byte	0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d
1745	.byte	0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef
1746	.byte	0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0
1747	.byte	0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
1748	.byte	0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
1749	.byte	0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
1750
1751rcon_byte:
1752	.byte	0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36
1753