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