b7d0c9ca80bf870d66178d3fea38d5049d59d69a
[openssl.git] / crypto / aes / asm / aes-ia64.S
1 // ====================================================================
2 // Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
3 // project. Rights for redistribution and usage in source and binary
4 // forms are granted according to the OpenSSL license.
5 // ====================================================================
6 //
7 // What's wrong with compiler generated code? Compiler never uses
8 // variable 'shr' which is pairable with 'extr'/'dep' instructions.
9 // Then it uses 'zxt' which is an I-type, but can be replaced with
10 // 'and' which in turn can be assigned to M-port [there're double as
11 // much M-ports as there're I-ports on Itanium 2]. By sacrificing few
12 // registers for small constants (255, 24 and 16) to be used with
13 // 'shr' and 'and' instructions I can achieve better ILP, Intruction
14 // Level Parallelism, and performance. This code outperforms gcc
15 // generated code by almost factor of 2 (two). Improvement over HP C
16 // is not that impressive, 20%...
17
18 .ident  "aes-ia64.S, version 1.0"
19 .ident  "IA-64 ISA artwork by Andy Polyakov <appro@fy.chalmers.se>"
20 .explicit
21 .text
22
23 rk0=r8;     rk1=r9;
24
25 prsave=r10;
26 maskff=r11;
27 twenty4=r14;
28 sixteen=r15;
29
30 te00=r16;   te11=r17;   te22=r18;   te33=r19;
31 te01=r20;   te12=r21;   te23=r22;   te30=r23;
32 te02=r24;   te13=r25;   te20=r26;   te31=r27;
33 te03=r28;   te10=r29;   te21=r30;   te32=r31;
34
35 // these are rotating...
36 t0=r32;     s0=r33;
37 t1=r34;     s1=r35;
38 t2=r36;     s2=r37;
39 t3=r38;     s3=r39;
40
41 te0=r40;    te1=r41;    te2=r42;    te3=r43;
42
43 #if defined(_HPUX_SOURCE) && !defined(_LP64)
44 # define ADDP   addp4
45 # define KSZ    4
46 # define LDKEY  ld4
47 #else
48 # define ADDP   add
49 #endif
50
51 // Why is the key schedule sparse on 64-bit architectures? When/if we fix
52 // it in C, these are the lines to modify accordingly.
53 #ifndef KSZ
54 # define KSZ    8
55 # define LDKEY  ld8
56 #endif
57
58 // void AES_encrypt (const void *in,void *out,const AES_KEY *key);
59 // measured timing on Itanium 2 is (48 + 14*rounds) cycles, or
60 // 11.75 cycles per byte for 128 bit key...
61 .global AES_encrypt#
62 .proc   AES_encrypt#
63 .align  32
64 #if !defined(_HPUX_SOURCE)
65 .skip   16
66 #endif
67 AES_encrypt:
68         .prologue
69         .fframe 0
70         .save   ar.pfs,r2
71         .save   ar.lc,r3
72 { .mii; alloc   r2=ar.pfs,3,10,0,8
73         mov     r3=ar.lc        
74         mov     prsave=pr       };;
75
76         .body
77 { .mmi; and     r40=3,r32
78         ADDP    r32=0,r32
79         mov     pr.rot=7<<16    };;
80 #if defined(_HPUX_SOURCE)       // HPUX is big-endian, cut 15 cycles...
81 { .mib; cmp.ne  p6,p0=r40,r0
82         add     r41=4,r32               // 1st arg, borrow teN
83 (p6)    br.dpnt.many    .Le_unaligned   };;
84
85 { .mmi; ld4     r19=[r32],8
86         mov     r44=r33                 // save 2nd arg
87         mov     twenty4=24      }
88 { .mmi; ld4     r23=[r41],8
89         addl    te0=@ltoff(AES_Te#),gp
90         ADDP    r35=KSZ*60,r34  };;     // &AES_KEY->rounds, borrow s1
91 { .mmi; ld8     te0=[te0]
92         ld4     r35=[r35]               // AES_KEY->rounds
93         ADDP    rk0=0,r34       }//;;   // 3rd arg
94 { .mmi; ld4     r27=[r32]
95         ld4     r31=[r41]               
96         ADDP    rk1=KSZ,r34     };;
97
98 { .mfi; LDKEY   t0=[rk0],2*KSZ
99         mov     sixteen=16      }
100 { .mfi; LDKEY   t1=[rk1],2*KSZ
101         mov     maskff=0xff     };;
102 { .mfi; LDKEY   t2=[rk0],2*KSZ
103         add     te1=1024,te0    }
104 { .mib; LDKEY   t3=[rk1],2*KSZ
105         add     te2=2048,te0
106         br.many .Le_common      };;
107 #endif
108 .Le_unaligned:
109 { .mfi; ADDP    r40=0,r32               // 1st arg, borrow teN
110         ADDP    r41=1,r32       }
111 { .mfi; ADDP    r42=2,r32
112         ADDP    r43=3,r32       };;
113 { .mmi; ld1     r16=[r40],4
114         ld1     r17=[r41],4
115         mov     r44=r33         }//;;   // save 2nd arg
116 { .mmi; ld1     r18=[r42],4
117         ld1     r19=[r43],4
118         ADDP    rk0=0,r34       };;     // 3rd arg
119 { .mmi; ld1     r20=[r40],4
120         ld1     r21=[r41],4
121         ADDP    rk1=KSZ,r34     }//;;
122 { .mmi; ld1     r22=[r42],4
123         ld1     r23=[r43],4
124         ADDP    r35=KSZ*60,r34  };;     // &AES_KEY->rounds, borrow s1
125 { .mmi; ld1     r24=[r40],4
126         ld1     r25=[r41],4
127         mov     twenty4=24      }//;;
128 { .mmi; ld1     r26=[r42],4
129         ld1     r27=[r43],4
130         mov     sixteen=16      };;
131 { .mmi; ld1     r28=[r40]
132         ld1     r29=[r41]
133         mov     maskff=0xff     }//;;
134 { .mmi; ld1     r30=[r42]
135         ld1     r31=[r43]
136         addl    te0=@ltoff(AES_Te#),gp  };;     // that was close...
137
138 { .mii; ld8     te0=[te0]
139         dep     r19=r16,r19,24,8        //;;
140         dep     r23=r20,r23,24,8        }//;;
141 { .mii; ld4     r35=[r35]               // AES_KEY->rounds
142         dep     r27=r24,r27,24,8        //;;
143         dep     r31=r28,r31,24,8        };;
144 { .mii; LDKEY   t0=[rk0],2*KSZ
145         dep     r19=r17,r19,16,8        //;;
146         dep     r23=r21,r23,16,8        }//;;
147 { .mii; LDKEY   t1=[rk1],2*KSZ
148         dep     r27=r25,r27,16,8        //;;
149         dep     r31=r29,r31,16,8        };;
150 { .mii; LDKEY   t2=[rk0],2*KSZ
151         dep     r19=r18,r19,8,8         //;;
152         dep     r23=r22,r23,8,8         }//;;
153 { .mii; LDKEY   t3=[rk1],2*KSZ
154         dep     r27=r26,r27,8,8         //;;
155         dep     r31=r30,r31,8,8         };;
156         
157 { .mib; add     te1=1024,te0
158         add     te2=2048,te0    }
159 .Le_common:
160 { .mib; add     te3=3072,te0
161         add     r35=-3,r35
162         brp.exit.imp    .Le_rounds_cexit,.Le_cexit_insn
163                                 };;
164 { .mii; mov     ar.lc=r35               // borrowed s1
165         mov     ar.ec=3         };;
166
167 { .mfi; xor     s0=r19,t0
168         xor     s1=r23,t1       }
169 { .mfi; xor     s2=r27,t2
170         xor     s3=r31,t3       };;
171
172 .align  32
173 .Le_rounds:
174 { .mmi; (p0)    LDKEY   t0=[rk0],2*KSZ          // 0/0:rk[0]
175         (p0)    and     te33=s3,maskff          // 0/0:s3&0xff
176         (p0)    extr.u  te22=s2,8,8     }       // 0/0:s2>>8&0xff
177 { .mmi; (p0)    LDKEY   t1=[rk1],2*KSZ          // 0/1:rk[1]
178         (p0)    and     te30=s0,maskff          // 0/1:s0&0xff
179         (p0)    shr.u   te00=s0,twenty4 };;     // 0/0:s0>>24
180 { .mmi; (p0)    LDKEY   t2=[rk0],2*KSZ          // 1/2:rk[2]
181         (p0)    shladd  te33=te33,2,te3         // 1/0:te0+s0>>24
182         (p0)    extr.u  te23=s3,8,8     }       // 1/1:s3>>8&0xff
183 { .mmi; (p0)    LDKEY   t3=[rk1],2*KSZ          // 1/3:rk[3]
184         (p0)    shladd  te30=te30,2,te3         // 1/1:te3+s0
185         (p0)    shr.u   te01=s1,twenty4 };;     // 1/1:s1>>24
186 { .mmi; (p0)    ld4     te33=[te33]             // 2/0:te3[s3&0xff]
187         (p0)    shladd  te22=te22,2,te2         // 2/0:te2+s2>>8&0xff
188         (p0)    extr.u  te20=s0,8,8     }       // 2/2:s0>>8&0xff
189 { .mmi; (p0)    ld4     te30=[te30]             // 2/1:te3[s0]
190         (p0)    shladd  te23=te23,2,te2         // 2/1:te2+s3>>8
191         (p0)    shr.u   te02=s2,twenty4 };;     // 2/2:s2>>24
192 { .mmi; (p0)    ld4     te22=[te22]             // 3/0:te2[s2>>8]
193         (p0)    shladd  te20=te20,2,te2         // 3/2:te2+s0>>8
194         (p0)    extr.u  te21=s1,8,8     }       // 3/3:s1>>8&0xff
195 { .mmi; (p0)    ld4     te23=[te23]             // 3/1:te2[s3>>8]
196         (p0)    shladd  te00=te00,2,te0         // 3/0:te0+s0>>24
197         (p0)    shr.u   te03=s3,twenty4 };;     // 3/3:s3>>24
198 { .mmi; (p0)    ld4     te20=[te20]             // 4/2:te2[s0>>8]
199         (p0)    shladd  te21=te21,2,te2         // 4/3:te3+s2
200         (p0)    extr.u  te11=s1,16,8    }       // 4/0:s1>>16&0xff
201 { .mmi; (p0)    ld4     te00=[te00]             // 4/0:te0[s0>>24]
202         (p0)    shladd  te01=te01,2,te0         // 4/1:te0+s1>>24
203         (p0)    shr.u   te13=s3,sixteen };;     // 4/2:s3>>16
204 { .mmi; (p0)    ld4     te21=[te21]             // 5/3:te2[s1>>8]
205         (p0)    shladd  te11=te11,2,te1         // 5/0:te1+s1>>16
206         (p0)    extr.u  te12=s2,16,8    }       // 5/1:s2>>16&0xff
207 { .mmi; (p0)    ld4     te01=[te01]             // 5/1:te0[s1>>24]
208         (p0)    shladd  te02=te02,2,te0         // 5/2:te0+s2>>24
209         (p0)    and     te31=s1,maskff  };;     // 5/2:s1&0xff
210
211 { .mmi; (p0)    ld4     te11=[te11]             // 6/0:te1[s1>>16]
212         (p0)    shladd  te12=te12,2,te1         // 6/1:te1+s2>>16
213         (p0)    extr.u  te10=s0,16,8    }       // 6/3:s0>>16&0xff
214 { .mmi; (p0)    ld4     te02=[te02]             // 6/2:te0[s2>>24]
215         (p0)    shladd  te03=te03,2,te0         // 6/3:te1+s0>>16
216         (p0)    and     te32=s2,maskff  };;     // 6/3:s2&0xff
217 { .mmi; (p0)    ld4     te12=[te12]             // 7/1:te1[s2>>16]
218         (p0)    shladd  te31=te31,2,te3         // 7/2:te3+s1&0xff
219         (p0)    and     te13=te13,maskff}       // 7/2:s3>>16&0xff
220 { .mmi; (p0)    ld4     te03=[te03]             // 7/3:te0[s3>>24]
221         (p0)    shladd  te32=te32,2,te3         // 7/3:te3+s2
222         (p16)   cmp.eq  p0,p18=r0,r0    };;     // 7/clear (p18)
223 { .mmi; (p0)    ld4     te31=[te31]             // 8/2:te3[s1]
224         (p0)    shladd  te13=te13,2,te1         // 8/2:te1+s3>>16
225         (p17)   xor     t0=t0,te33      }       // 8/0:
226 { .mmi; (p0)    ld4     te32=[te32]             // 8/3:te3[s2]
227         (p0)    shladd  te10=te10,2,te1         // 8/3:te1+s0>>16
228         (p17)   xor     t1=t1,te30      };;     // 8/1:
229 { .mmi; (p0)    ld4     te13=[te13]             // 9/2:te1[s3>>16]
230         (p17)   xor     t0=t0,te22              // 9/0:
231         (p18)   add     te0=4096,te0    }       // 9/
232 .Le_cexit_insn:
233 { .mmb; (p0)    ld4     te10=[te10]             // 9/3:te1[s0>>16]
234         (p17)   xor     t1=t1,te23              // 9/1:
235         br.cexit.spnt.few       .Le_rounds_cexit
236                                         };;
237 { .mmi; (p18)   xor     s2=s2,te20              // 10/2:
238         (p18)   xor     s0=s0,te00              // 10/0:
239         (p19)   add     te1=3072,te1    }       // 10/
240 { .mmi; (p18)   xor     s3=s3,te21              // 10/3:
241         (p18)   xor     s1=s1,te01              // 10/1:
242         (p19)   add     te2=2048,te2    };;     // 10/
243 { .mfi; (p18)   xor     s0=s0,te11              // 11/0:done!
244         (p18)   xor     s2=s2,te02      }       // 11/2:
245 { .mfi; (p18)   xor     s1=s1,te12              // 11/1:done!
246         (p18)   xor     s3=s3,te03      };;     // 11/3:
247 { .mmi; (p18)   xor     s2=s2,te31              // 12/2:
248         (p18)   xor     s3=s3,te32              // 12/3:
249         (p19)   add     te3=1024,te3    };;     // 12/
250 { .mib; (p18)   xor     s2=s2,te13              // 13/2:done!
251         (p18)   xor     s3=s3,te10              // 13/3:done!
252         br      .Le_rounds      };;
253
254 .align  32
255 .Le_rounds_cexit:
256 { .mfi; xor     te00=te00,s0            // "s0"
257         xor     te11=te11,s0    }
258 { .mfi; xor     te22=te22,s0
259         xor     te33=te33,s0    }
260 { .mib; xor     te01=te01,s1            // "s1"
261         xor     te12=te12,s1    }
262 { .mib; xor     te23=te23,s1
263         xor     te30=te30,s1    }
264 { .mfi; xor     te02=te02,s2            // "s2"
265         xor     te13=te13,s2    }
266 { .mfi; xor     te20=te20,s2
267         xor     te31=te31,s2    }
268 { .mib; xor     te03=te03,s3            // "s3"
269         xor     te10=te10,s3    }
270 { .mib; xor     te21=te21,s3
271         xor     te32=te32,s3    };;
272
273 { .mii; ADDP    r40=0,r44               // saved 2nd argument, snatch teN
274         extr.u  te22=te22,8,8
275         shr.u   te00=te00,twenty4       }//;;
276 { .mii; ADDP    r41=1,r44
277         extr.u  te11=te11,16,8
278         shr.u   te01=te01,twenty4       }//;;
279 { .mii; ADDP    r42=2,r44
280         extr.u  te23=te23,8,8
281         shr.u   te12=te12,sixteen       }//;;
282 { .mii; ADDP    r43=3,r44
283         extr.u  te20=te20,8,8
284         shr.u   te02=te02,twenty4       };;
285 { .mii; st1     [r43]=te33,4
286         extr.u  te13=te13,16,8
287         shr.u   te03=te03,twenty4       }//;;
288 { .mii; st1     [r42]=te22,4
289         extr.u  te21=te21,8,8
290         shr.u   te10=te10,sixteen       }//;;
291
292 { .mmi; st1     [r41]=te11,4
293         st1     [r40]=te00,4            };;
294 { .mmi; st1     [r43]=te30,4
295         st1     [r42]=te23,4            }//;;
296 { .mmi; st1     [r41]=te12,4
297         st1     [r40]=te01,4            };;
298 { .mmi; st1     [r43]=te31,4
299         st1     [r42]=te20,4            }//;;
300 { .mmi; st1     [r41]=te13,4
301         st1     [r40]=te02,4
302         mov     pr=prsave,0x1ffff       };;
303 { .mmi; st1     [r43]=te32
304         st1     [r42]=te21
305         mov     ar.lc=r3                }//;;
306 { .mmb; st1     [r41]=te10
307         st1     [r40]=te03
308         br.ret.sptk.many        b0      };;
309 .endp   AES_encrypt#
310
311 // AES_decrypt is autogenerated by the following script:
312 #if 0
313 #!/usr/bin/env perl
314 print "// AES_decrypt is autogenerated by the following script:\n#if 0\n";
315 open(PROG,'<'.$0); while(<PROG>) { print; } close(PROG);
316 print "#endif\n";
317 while(<>) {
318         $process=1      if (/\.global\s+AES_encrypt/);
319         next            if (!$process);
320
321         #s/te00=s0/td00=s0/;    s/te00/td00/g;
322         s/te11=s1/td13=s3/;     s/te11/td13/g;
323         #s/te22=s2/td22=s2/;    s/te22/td22/g;
324         s/te33=s3/td31=s1/;     s/te33/td31/g;
325
326         #s/te01=s1/td01=s1/;    s/te01/td01/g;
327         s/te12=s2/td10=s0/;     s/te12/td10/g;
328         #s/te23=s3/td23=s3/;    s/te23/td23/g;
329         s/te30=s0/td32=s2/;     s/te30/td32/g;
330
331         #s/te02=s2/td02=s2/;    s/te02/td02/g;
332         s/te13=s3/td11=s1/;     s/te13/td11/g;
333         #s/te20=s0/td20=s0/;    s/te20/td20/g;
334         s/te31=s1/td33=s3/;     s/te31/td33/g;
335
336         #s/te03=s3/td03=s3/;    s/te03/td03/g;
337         s/te10=s0/td12=s2/;     s/te10/td12/g;
338         #s/te21=s1/td21=s1/;    s/te21/td21/g;
339         s/te32=s2/td30=s0/;     s/te32/td30/g;
340
341         s/td/te/g;
342
343         s/AES_encrypt/AES_decrypt/g;
344         s/\.Le_/.Ld_/g;
345         s/AES_Te#/AES_Td#/g;
346
347         print;
348
349         exit            if (/\.endp\s+AES_decrypt/);
350 }
351 #endif
352 .global AES_decrypt#
353 .proc   AES_decrypt#
354 .align  32
355 #if !defined(_HPUX_SOURCE)
356 .skip   16
357 #endif
358 AES_decrypt:
359         .prologue
360         .fframe 0
361         .save   ar.pfs,r2
362         .save   ar.lc,r3
363 { .mii; alloc   r2=ar.pfs,3,10,0,8
364         mov     r3=ar.lc        
365         mov     prsave=pr       };;
366
367         .body
368 { .mmi; and     r40=3,r32
369         ADDP    r32=0,r32
370         mov     pr.rot=7<<16    };;
371 #if defined(_HPUX_SOURCE)       // HPUX is big-endian, cut 15 cycles...
372 { .mib; cmp.ne  p6,p0=r40,r0
373         add     r41=4,r32               // 1st arg, borrow teN
374 (p6)    br.dpnt.many    .Ld_unaligned   };;
375
376 { .mmi; ld4     r19=[r32],8
377         mov     r44=r33                 // save 2nd arg
378         mov     twenty4=24      }
379 { .mmi; ld4     r23=[r41],8
380         addl    te0=@ltoff(AES_Td#),gp
381         ADDP    r35=KSZ*60,r34  };;     // &AES_KEY->rounds, borrow s1
382 { .mmi; ld8     te0=[te0]
383         ld4     r35=[r35]               // AES_KEY->rounds
384         ADDP    rk0=0,r34       }//;;   // 3rd arg
385 { .mmi; ld4     r27=[r32]
386         ld4     r31=[r41]               
387         ADDP    rk1=KSZ,r34     };;
388
389 { .mfi; LDKEY   t0=[rk0],2*KSZ
390         mov     sixteen=16      }
391 { .mfi; LDKEY   t1=[rk1],2*KSZ
392         mov     maskff=0xff     };;
393 { .mfi; LDKEY   t2=[rk0],2*KSZ
394         add     te1=1024,te0    }
395 { .mib; LDKEY   t3=[rk1],2*KSZ
396         add     te2=2048,te0
397         br.many .Ld_common      };;
398 #endif
399 .Ld_unaligned:
400 { .mfi; ADDP    r40=0,r32               // 1st arg, borrow teN
401         ADDP    r41=1,r32       }
402 { .mfi; ADDP    r42=2,r32
403         ADDP    r43=3,r32       };;
404 { .mmi; ld1     r16=[r40],4
405         ld1     r17=[r41],4
406         mov     r44=r33         }//;;   // save 2nd arg
407 { .mmi; ld1     r18=[r42],4
408         ld1     r19=[r43],4
409         ADDP    rk0=0,r34       };;     // 3rd arg
410 { .mmi; ld1     r20=[r40],4
411         ld1     r21=[r41],4
412         ADDP    rk1=KSZ,r34     }//;;
413 { .mmi; ld1     r22=[r42],4
414         ld1     r23=[r43],4
415         ADDP    r35=KSZ*60,r34  };;     // &AES_KEY->rounds, borrow s1
416 { .mmi; ld1     r24=[r40],4
417         ld1     r25=[r41],4
418         mov     twenty4=24      }//;;
419 { .mmi; ld1     r26=[r42],4
420         ld1     r27=[r43],4
421         mov     sixteen=16      };;
422 { .mmi; ld1     r28=[r40]
423         ld1     r29=[r41]
424         mov     maskff=0xff     }//;;
425 { .mmi; ld1     r30=[r42]
426         ld1     r31=[r43]
427         addl    te0=@ltoff(AES_Td#),gp  };;     // that was close...
428
429 { .mii; ld8     te0=[te0]
430         dep     r19=r16,r19,24,8        //;;
431         dep     r23=r20,r23,24,8        }//;;
432 { .mii; ld4     r35=[r35]               // AES_KEY->rounds
433         dep     r27=r24,r27,24,8        //;;
434         dep     r31=r28,r31,24,8        };;
435 { .mii; LDKEY   t0=[rk0],2*KSZ
436         dep     r19=r17,r19,16,8        //;;
437         dep     r23=r21,r23,16,8        }//;;
438 { .mii; LDKEY   t1=[rk1],2*KSZ
439         dep     r27=r25,r27,16,8        //;;
440         dep     r31=r29,r31,16,8        };;
441 { .mii; LDKEY   t2=[rk0],2*KSZ
442         dep     r19=r18,r19,8,8         //;;
443         dep     r23=r22,r23,8,8         }//;;
444 { .mii; LDKEY   t3=[rk1],2*KSZ
445         dep     r27=r26,r27,8,8         //;;
446         dep     r31=r30,r31,8,8         };;
447         
448 { .mib; add     te1=1024,te0
449         add     te2=2048,te0    }
450 .Ld_common:
451 { .mib; add     te3=3072,te0
452         add     r35=-3,r35
453         brp.exit.imp    .Ld_rounds_cexit,.Ld_cexit_insn
454                                 };;
455 { .mii; mov     ar.lc=r35               // borrowed s1
456         mov     ar.ec=3         };;
457
458 { .mfi; xor     s0=r19,t0
459         xor     s1=r23,t1       }
460 { .mfi; xor     s2=r27,t2
461         xor     s3=r31,t3       };;
462
463 .align  32
464 .Ld_rounds:
465 { .mmi; (p0)    LDKEY   t0=[rk0],2*KSZ          // 0/0:rk[0]
466         (p0)    and     te31=s1,maskff          // 0/0:s3&0xff
467         (p0)    extr.u  te22=s2,8,8     }       // 0/0:s2>>8&0xff
468 { .mmi; (p0)    LDKEY   t1=[rk1],2*KSZ          // 0/1:rk[1]
469         (p0)    and     te32=s2,maskff          // 0/1:s0&0xff
470         (p0)    shr.u   te00=s0,twenty4 };;     // 0/0:s0>>24
471 { .mmi; (p0)    LDKEY   t2=[rk0],2*KSZ          // 1/2:rk[2]
472         (p0)    shladd  te31=te31,2,te3         // 1/0:te0+s0>>24
473         (p0)    extr.u  te23=s3,8,8     }       // 1/1:s3>>8&0xff
474 { .mmi; (p0)    LDKEY   t3=[rk1],2*KSZ          // 1/3:rk[3]
475         (p0)    shladd  te32=te32,2,te3         // 1/1:te3+s0
476         (p0)    shr.u   te01=s1,twenty4 };;     // 1/1:s1>>24
477 { .mmi; (p0)    ld4     te31=[te31]             // 2/0:te3[s3&0xff]
478         (p0)    shladd  te22=te22,2,te2         // 2/0:te2+s2>>8&0xff
479         (p0)    extr.u  te20=s0,8,8     }       // 2/2:s0>>8&0xff
480 { .mmi; (p0)    ld4     te32=[te32]             // 2/1:te3[s0]
481         (p0)    shladd  te23=te23,2,te2         // 2/1:te2+s3>>8
482         (p0)    shr.u   te02=s2,twenty4 };;     // 2/2:s2>>24
483 { .mmi; (p0)    ld4     te22=[te22]             // 3/0:te2[s2>>8]
484         (p0)    shladd  te20=te20,2,te2         // 3/2:te2+s0>>8
485         (p0)    extr.u  te21=s1,8,8     }       // 3/3:s1>>8&0xff
486 { .mmi; (p0)    ld4     te23=[te23]             // 3/1:te2[s3>>8]
487         (p0)    shladd  te00=te00,2,te0         // 3/0:te0+s0>>24
488         (p0)    shr.u   te03=s3,twenty4 };;     // 3/3:s3>>24
489 { .mmi; (p0)    ld4     te20=[te20]             // 4/2:te2[s0>>8]
490         (p0)    shladd  te21=te21,2,te2         // 4/3:te3+s2
491         (p0)    extr.u  te13=s3,16,8    }       // 4/0:s1>>16&0xff
492 { .mmi; (p0)    ld4     te00=[te00]             // 4/0:te0[s0>>24]
493         (p0)    shladd  te01=te01,2,te0         // 4/1:te0+s1>>24
494         (p0)    shr.u   te11=s1,sixteen };;     // 4/2:s3>>16
495 { .mmi; (p0)    ld4     te21=[te21]             // 5/3:te2[s1>>8]
496         (p0)    shladd  te13=te13,2,te1         // 5/0:te1+s1>>16
497         (p0)    extr.u  te10=s0,16,8    }       // 5/1:s2>>16&0xff
498 { .mmi; (p0)    ld4     te01=[te01]             // 5/1:te0[s1>>24]
499         (p0)    shladd  te02=te02,2,te0         // 5/2:te0+s2>>24
500         (p0)    and     te33=s3,maskff  };;     // 5/2:s1&0xff
501
502 { .mmi; (p0)    ld4     te13=[te13]             // 6/0:te1[s1>>16]
503         (p0)    shladd  te10=te10,2,te1         // 6/1:te1+s2>>16
504         (p0)    extr.u  te12=s2,16,8    }       // 6/3:s0>>16&0xff
505 { .mmi; (p0)    ld4     te02=[te02]             // 6/2:te0[s2>>24]
506         (p0)    shladd  te03=te03,2,te0         // 6/3:te1+s0>>16
507         (p0)    and     te30=s0,maskff  };;     // 6/3:s2&0xff
508 { .mmi; (p0)    ld4     te10=[te10]             // 7/1:te1[s2>>16]
509         (p0)    shladd  te33=te33,2,te3         // 7/2:te3+s1&0xff
510         (p0)    and     te11=te11,maskff}       // 7/2:s3>>16&0xff
511 { .mmi; (p0)    ld4     te03=[te03]             // 7/3:te0[s3>>24]
512         (p0)    shladd  te30=te30,2,te3         // 7/3:te3+s2
513         (p16)   cmp.eq  p0,p18=r0,r0    };;     // 7/clear (p18)
514 { .mmi; (p0)    ld4     te33=[te33]             // 8/2:te3[s1]
515         (p0)    shladd  te11=te11,2,te1         // 8/2:te1+s3>>16
516         (p17)   xor     t0=t0,te31      }       // 8/0:
517 { .mmi; (p0)    ld4     te30=[te30]             // 8/3:te3[s2]
518         (p0)    shladd  te12=te12,2,te1         // 8/3:te1+s0>>16
519         (p17)   xor     t1=t1,te32      };;     // 8/1:
520 { .mmi; (p0)    ld4     te11=[te11]             // 9/2:te1[s3>>16]
521         (p17)   xor     t0=t0,te22              // 9/0:
522         (p18)   add     te0=4096,te0    }       // 9/
523 .Ld_cexit_insn:
524 { .mmb; (p0)    ld4     te12=[te12]             // 9/3:te1[s0>>16]
525         (p17)   xor     t1=t1,te23              // 9/1:
526         br.cexit.spnt.few       .Ld_rounds_cexit
527                                         };;
528 { .mmi; (p18)   xor     s2=s2,te20              // 10/2:
529         (p18)   xor     s0=s0,te00              // 10/0:
530         (p19)   add     te1=3072,te1    }       // 10/
531 { .mmi; (p18)   xor     s3=s3,te21              // 10/3:
532         (p18)   xor     s1=s1,te01              // 10/1:
533         (p19)   add     te2=2048,te2    };;     // 10/
534 { .mfi; (p18)   xor     s0=s0,te13              // 11/0:done!
535         (p18)   xor     s2=s2,te02      }       // 11/2:
536 { .mfi; (p18)   xor     s1=s1,te10              // 11/1:done!
537         (p18)   xor     s3=s3,te03      };;     // 11/3:
538 { .mmi; (p18)   xor     s2=s2,te33              // 12/2:
539         (p18)   xor     s3=s3,te30              // 12/3:
540         (p19)   add     te3=1024,te3    };;     // 12/
541 { .mib; (p18)   xor     s2=s2,te11              // 13/2:done!
542         (p18)   xor     s3=s3,te12              // 13/3:done!
543         br      .Ld_rounds      };;
544
545 .align  32
546 .Ld_rounds_cexit:
547 { .mfi; xor     te00=te00,s0            // "s0"
548         xor     te13=te13,s0    }
549 { .mfi; xor     te22=te22,s0
550         xor     te31=te31,s0    }
551 { .mib; xor     te01=te01,s1            // "s1"
552         xor     te10=te10,s1    }
553 { .mib; xor     te23=te23,s1
554         xor     te32=te32,s1    }
555 { .mfi; xor     te02=te02,s2            // "s2"
556         xor     te11=te11,s2    }
557 { .mfi; xor     te20=te20,s2
558         xor     te33=te33,s2    }
559 { .mib; xor     te03=te03,s3            // "s3"
560         xor     te12=te12,s3    }
561 { .mib; xor     te21=te21,s3
562         xor     te30=te30,s3    };;
563
564 { .mii; ADDP    r40=0,r44               // saved 2nd argument, snatch teN
565         extr.u  te22=te22,8,8
566         shr.u   te00=te00,twenty4       }//;;
567 { .mii; ADDP    r41=1,r44
568         extr.u  te13=te13,16,8
569         shr.u   te01=te01,twenty4       }//;;
570 { .mii; ADDP    r42=2,r44
571         extr.u  te23=te23,8,8
572         shr.u   te10=te10,sixteen       }//;;
573 { .mii; ADDP    r43=3,r44
574         extr.u  te20=te20,8,8
575         shr.u   te02=te02,twenty4       };;
576 { .mii; st1     [r43]=te31,4
577         extr.u  te11=te11,16,8
578         shr.u   te03=te03,twenty4       }//;;
579 { .mii; st1     [r42]=te22,4
580         extr.u  te21=te21,8,8
581         shr.u   te12=te12,sixteen       }//;;
582
583 { .mmi; st1     [r41]=te13,4
584         st1     [r40]=te00,4            };;
585 { .mmi; st1     [r43]=te32,4
586         st1     [r42]=te23,4            }//;;
587 { .mmi; st1     [r41]=te10,4
588         st1     [r40]=te01,4            };;
589 { .mmi; st1     [r43]=te33,4
590         st1     [r42]=te20,4            }//;;
591 { .mmi; st1     [r41]=te11,4
592         st1     [r40]=te02,4
593         mov     pr=prsave,0x1ffff       };;
594 { .mmi; st1     [r43]=te30
595         st1     [r42]=te21
596         mov     ar.lc=r3                }//;;
597 { .mmb; st1     [r41]=te12
598         st1     [r40]=te03
599         br.ret.sptk.many        b0      };;
600 .endp   AES_decrypt#
601
602 // leave it in .text segment...
603 .align  64
604 .global AES_Te#
605 .type   AES_Te#,@object
606 AES_Te: data4   0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d
607         data4   0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554
608         data4   0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d
609         data4   0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a
610         data4   0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87
611         data4   0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b
612         data4   0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea
613         data4   0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b
614         data4   0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a
615         data4   0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f
616         data4   0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108
617         data4   0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f
618         data4   0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e
619         data4   0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5
620         data4   0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d
621         data4   0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f
622         data4   0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e
623         data4   0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb
624         data4   0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce
625         data4   0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497
626         data4   0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c
627         data4   0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed
628         data4   0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b
629         data4   0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a
630         data4   0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16
631         data4   0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594
632         data4   0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81
633         data4   0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3
634         data4   0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a
635         data4   0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504
636         data4   0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163
637         data4   0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d
638         data4   0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f
639         data4   0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739
640         data4   0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47
641         data4   0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395
642         data4   0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f
643         data4   0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883
644         data4   0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c
645         data4   0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76
646         data4   0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e
647         data4   0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4
648         data4   0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6
649         data4   0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b
650         data4   0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7
651         data4   0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0
652         data4   0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25
653         data4   0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818
654         data4   0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72
655         data4   0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651
656         data4   0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21
657         data4   0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85
658         data4   0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa
659         data4   0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12
660         data4   0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0
661         data4   0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9
662         data4   0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133
663         data4   0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7
664         data4   0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920
665         data4   0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a
666         data4   0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17
667         data4   0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8
668         data4   0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11
669         data4   0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a
670 // Te1:
671         data4   0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b
672         data4   0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5
673         data4   0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b
674         data4   0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676
675         data4   0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d
676         data4   0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0
677         data4   0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf
678         data4   0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0
679         data4   0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626
680         data4   0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc
681         data4   0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1
682         data4   0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515
683         data4   0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3
684         data4   0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a
685         data4   0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2
686         data4   0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575
687         data4   0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a
688         data4   0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0
689         data4   0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3
690         data4   0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484
691         data4   0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded
692         data4   0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b
693         data4   0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939
694         data4   0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf
695         data4   0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb
696         data4   0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585
697         data4   0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f
698         data4   0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8
699         data4   0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f
700         data4   0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5
701         data4   0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121
702         data4   0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2
703         data4   0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec
704         data4   0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717
705         data4   0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d
706         data4   0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373
707         data4   0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc
708         data4   0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888
709         data4   0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414
710         data4   0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb
711         data4   0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a
712         data4   0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c
713         data4   0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262
714         data4   0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979
715         data4   0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d
716         data4   0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9
717         data4   0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea
718         data4   0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808
719         data4   0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e
720         data4   0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6
721         data4   0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f
722         data4   0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a
723         data4   0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666
724         data4   0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e
725         data4   0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9
726         data4   0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e
727         data4   0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111
728         data4   0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494
729         data4   0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9
730         data4   0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf
731         data4   0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d
732         data4   0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868
733         data4   0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f
734         data4   0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616
735 // Te2:
736         data4   0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b
737         data4   0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5
738         data4   0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b
739         data4   0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76
740         data4   0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d
741         data4   0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0
742         data4   0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af
743         data4   0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0
744         data4   0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26
745         data4   0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc
746         data4   0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1
747         data4   0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15
748         data4   0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3
749         data4   0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a
750         data4   0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2
751         data4   0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75
752         data4   0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a
753         data4   0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0
754         data4   0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3
755         data4   0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384
756         data4   0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed
757         data4   0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b
758         data4   0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239
759         data4   0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf
760         data4   0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb
761         data4   0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185
762         data4   0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f
763         data4   0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8
764         data4   0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f
765         data4   0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5
766         data4   0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221
767         data4   0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2
768         data4   0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec
769         data4   0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17
770         data4   0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d
771         data4   0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673
772         data4   0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc
773         data4   0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88
774         data4   0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814
775         data4   0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb
776         data4   0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a
777         data4   0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c
778         data4   0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462
779         data4   0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279
780         data4   0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d
781         data4   0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9
782         data4   0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea
783         data4   0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008
784         data4   0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e
785         data4   0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6
786         data4   0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f
787         data4   0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a
788         data4   0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66
789         data4   0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e
790         data4   0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9
791         data4   0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e
792         data4   0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211
793         data4   0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394
794         data4   0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9
795         data4   0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df
796         data4   0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d
797         data4   0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068
798         data4   0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f
799         data4   0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16
800 // Te3:
801         data4   0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6
802         data4   0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491
803         data4   0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56
804         data4   0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec
805         data4   0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa
806         data4   0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb
807         data4   0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45
808         data4   0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b
809         data4   0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c
810         data4   0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83
811         data4   0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9
812         data4   0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a
813         data4   0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d
814         data4   0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f
815         data4   0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf
816         data4   0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea
817         data4   0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34
818         data4   0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b
819         data4   0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d
820         data4   0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713
821         data4   0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1
822         data4   0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6
823         data4   0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72
824         data4   0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85
825         data4   0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed
826         data4   0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411
827         data4   0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe
828         data4   0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b
829         data4   0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05
830         data4   0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1
831         data4   0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342
832         data4   0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf
833         data4   0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3
834         data4   0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e
835         data4   0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a
836         data4   0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6
837         data4   0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3
838         data4   0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b
839         data4   0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28
840         data4   0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad
841         data4   0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14
842         data4   0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8
843         data4   0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4
844         data4   0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2
845         data4   0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da
846         data4   0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049
847         data4   0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf
848         data4   0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810
849         data4   0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c
850         data4   0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197
851         data4   0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e
852         data4   0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f
853         data4   0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc
854         data4   0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c
855         data4   0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069
856         data4   0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927
857         data4   0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322
858         data4   0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733
859         data4   0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9
860         data4   0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5
861         data4   0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a
862         data4   0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0
863         data4   0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e
864         data4   0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c
865 // Te4:
866         data4   0x63636363, 0x7c7c7c7c, 0x77777777, 0x7b7b7b7b
867         data4   0xf2f2f2f2, 0x6b6b6b6b, 0x6f6f6f6f, 0xc5c5c5c5
868         data4   0x30303030, 0x01010101, 0x67676767, 0x2b2b2b2b
869         data4   0xfefefefe, 0xd7d7d7d7, 0xabababab, 0x76767676
870         data4   0xcacacaca, 0x82828282, 0xc9c9c9c9, 0x7d7d7d7d
871         data4   0xfafafafa, 0x59595959, 0x47474747, 0xf0f0f0f0
872         data4   0xadadadad, 0xd4d4d4d4, 0xa2a2a2a2, 0xafafafaf
873         data4   0x9c9c9c9c, 0xa4a4a4a4, 0x72727272, 0xc0c0c0c0
874         data4   0xb7b7b7b7, 0xfdfdfdfd, 0x93939393, 0x26262626
875         data4   0x36363636, 0x3f3f3f3f, 0xf7f7f7f7, 0xcccccccc
876         data4   0x34343434, 0xa5a5a5a5, 0xe5e5e5e5, 0xf1f1f1f1
877         data4   0x71717171, 0xd8d8d8d8, 0x31313131, 0x15151515
878         data4   0x04040404, 0xc7c7c7c7, 0x23232323, 0xc3c3c3c3
879         data4   0x18181818, 0x96969696, 0x05050505, 0x9a9a9a9a
880         data4   0x07070707, 0x12121212, 0x80808080, 0xe2e2e2e2
881         data4   0xebebebeb, 0x27272727, 0xb2b2b2b2, 0x75757575
882         data4   0x09090909, 0x83838383, 0x2c2c2c2c, 0x1a1a1a1a
883         data4   0x1b1b1b1b, 0x6e6e6e6e, 0x5a5a5a5a, 0xa0a0a0a0
884         data4   0x52525252, 0x3b3b3b3b, 0xd6d6d6d6, 0xb3b3b3b3
885         data4   0x29292929, 0xe3e3e3e3, 0x2f2f2f2f, 0x84848484
886         data4   0x53535353, 0xd1d1d1d1, 0x00000000, 0xedededed
887         data4   0x20202020, 0xfcfcfcfc, 0xb1b1b1b1, 0x5b5b5b5b
888         data4   0x6a6a6a6a, 0xcbcbcbcb, 0xbebebebe, 0x39393939
889         data4   0x4a4a4a4a, 0x4c4c4c4c, 0x58585858, 0xcfcfcfcf
890         data4   0xd0d0d0d0, 0xefefefef, 0xaaaaaaaa, 0xfbfbfbfb
891         data4   0x43434343, 0x4d4d4d4d, 0x33333333, 0x85858585
892         data4   0x45454545, 0xf9f9f9f9, 0x02020202, 0x7f7f7f7f
893         data4   0x50505050, 0x3c3c3c3c, 0x9f9f9f9f, 0xa8a8a8a8
894         data4   0x51515151, 0xa3a3a3a3, 0x40404040, 0x8f8f8f8f
895         data4   0x92929292, 0x9d9d9d9d, 0x38383838, 0xf5f5f5f5
896         data4   0xbcbcbcbc, 0xb6b6b6b6, 0xdadadada, 0x21212121
897         data4   0x10101010, 0xffffffff, 0xf3f3f3f3, 0xd2d2d2d2
898         data4   0xcdcdcdcd, 0x0c0c0c0c, 0x13131313, 0xecececec
899         data4   0x5f5f5f5f, 0x97979797, 0x44444444, 0x17171717
900         data4   0xc4c4c4c4, 0xa7a7a7a7, 0x7e7e7e7e, 0x3d3d3d3d
901         data4   0x64646464, 0x5d5d5d5d, 0x19191919, 0x73737373
902         data4   0x60606060, 0x81818181, 0x4f4f4f4f, 0xdcdcdcdc
903         data4   0x22222222, 0x2a2a2a2a, 0x90909090, 0x88888888
904         data4   0x46464646, 0xeeeeeeee, 0xb8b8b8b8, 0x14141414
905         data4   0xdededede, 0x5e5e5e5e, 0x0b0b0b0b, 0xdbdbdbdb
906         data4   0xe0e0e0e0, 0x32323232, 0x3a3a3a3a, 0x0a0a0a0a
907         data4   0x49494949, 0x06060606, 0x24242424, 0x5c5c5c5c
908         data4   0xc2c2c2c2, 0xd3d3d3d3, 0xacacacac, 0x62626262
909         data4   0x91919191, 0x95959595, 0xe4e4e4e4, 0x79797979
910         data4   0xe7e7e7e7, 0xc8c8c8c8, 0x37373737, 0x6d6d6d6d
911         data4   0x8d8d8d8d, 0xd5d5d5d5, 0x4e4e4e4e, 0xa9a9a9a9
912         data4   0x6c6c6c6c, 0x56565656, 0xf4f4f4f4, 0xeaeaeaea
913         data4   0x65656565, 0x7a7a7a7a, 0xaeaeaeae, 0x08080808
914         data4   0xbabababa, 0x78787878, 0x25252525, 0x2e2e2e2e
915         data4   0x1c1c1c1c, 0xa6a6a6a6, 0xb4b4b4b4, 0xc6c6c6c6
916         data4   0xe8e8e8e8, 0xdddddddd, 0x74747474, 0x1f1f1f1f
917         data4   0x4b4b4b4b, 0xbdbdbdbd, 0x8b8b8b8b, 0x8a8a8a8a
918         data4   0x70707070, 0x3e3e3e3e, 0xb5b5b5b5, 0x66666666
919         data4   0x48484848, 0x03030303, 0xf6f6f6f6, 0x0e0e0e0e
920         data4   0x61616161, 0x35353535, 0x57575757, 0xb9b9b9b9
921         data4   0x86868686, 0xc1c1c1c1, 0x1d1d1d1d, 0x9e9e9e9e
922         data4   0xe1e1e1e1, 0xf8f8f8f8, 0x98989898, 0x11111111
923         data4   0x69696969, 0xd9d9d9d9, 0x8e8e8e8e, 0x94949494
924         data4   0x9b9b9b9b, 0x1e1e1e1e, 0x87878787, 0xe9e9e9e9
925         data4   0xcececece, 0x55555555, 0x28282828, 0xdfdfdfdf
926         data4   0x8c8c8c8c, 0xa1a1a1a1, 0x89898989, 0x0d0d0d0d
927         data4   0xbfbfbfbf, 0xe6e6e6e6, 0x42424242, 0x68686868
928         data4   0x41414141, 0x99999999, 0x2d2d2d2d, 0x0f0f0f0f
929         data4   0xb0b0b0b0, 0x54545454, 0xbbbbbbbb, 0x16161616
930 .size   AES_Te#,5*256*4 // HP-UX assembler fails to ".-AES_Te#"
931
932 .align  64
933 .global AES_Td#
934 .type   AES_Td#,@object
935 AES_Td: data4   0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96
936         data4   0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393
937         data4   0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25
938         data4   0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f
939         data4   0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1
940         data4   0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6
941         data4   0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da
942         data4   0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844
943         data4   0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd
944         data4   0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4
945         data4   0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45
946         data4   0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94
947         data4   0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7
948         data4   0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a
949         data4   0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5
950         data4   0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c
951         data4   0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1
952         data4   0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a
953         data4   0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75
954         data4   0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051
955         data4   0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46
956         data4   0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff
957         data4   0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77
958         data4   0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb
959         data4   0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000
960         data4   0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e
961         data4   0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927
962         data4   0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a
963         data4   0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e
964         data4   0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16
965         data4   0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d
966         data4   0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8
967         data4   0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd
968         data4   0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34
969         data4   0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163
970         data4   0xd731dcca, 0x42638510, 0x13972240, 0x84c61120
971         data4   0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d
972         data4   0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0
973         data4   0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422
974         data4   0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef
975         data4   0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36
976         data4   0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4
977         data4   0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662
978         data4   0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5
979         data4   0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3
980         data4   0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b
981         data4   0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8
982         data4   0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6
983         data4   0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6
984         data4   0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0
985         data4   0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815
986         data4   0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f
987         data4   0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df
988         data4   0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f
989         data4   0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e
990         data4   0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713
991         data4   0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89
992         data4   0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c
993         data4   0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf
994         data4   0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86
995         data4   0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f
996         data4   0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541
997         data4   0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190
998         data4   0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742
999 // Td1:
1000         data4   0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e
1001         data4   0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303
1002         data4   0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c
1003         data4   0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3
1004         data4   0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0
1005         data4   0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9
1006         data4   0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259
1007         data4   0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8
1008         data4   0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971
1009         data4   0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a
1010         data4   0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f
1011         data4   0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b
1012         data4   0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8
1013         data4   0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab
1014         data4   0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708
1015         data4   0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682
1016         data4   0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2
1017         data4   0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe
1018         data4   0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb
1019         data4   0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10
1020         data4   0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd
1021         data4   0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015
1022         data4   0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e
1023         data4   0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee
1024         data4   0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000
1025         data4   0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72
1026         data4   0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39
1027         data4   0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e
1028         data4   0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91
1029         data4   0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a
1030         data4   0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17
1031         data4   0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9
1032         data4   0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60
1033         data4   0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e
1034         data4   0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1
1035         data4   0xcad731dc, 0x10426385, 0x40139722, 0x2084c611
1036         data4   0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1
1037         data4   0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3
1038         data4   0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964
1039         data4   0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390
1040         data4   0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b
1041         data4   0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf
1042         data4   0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46
1043         data4   0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af
1044         data4   0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512
1045         data4   0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb
1046         data4   0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a
1047         data4   0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8
1048         data4   0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c
1049         data4   0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266
1050         data4   0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8
1051         data4   0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6
1052         data4   0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604
1053         data4   0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551
1054         data4   0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41
1055         data4   0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647
1056         data4   0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c
1057         data4   0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1
1058         data4   0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737
1059         data4   0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db
1060         data4   0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340
1061         data4   0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95
1062         data4   0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1
1063         data4   0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857
1064 // Td2:
1065         data4   0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27
1066         data4   0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3
1067         data4   0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502
1068         data4   0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562
1069         data4   0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe
1070         data4   0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3
1071         data4   0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552
1072         data4   0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9
1073         data4   0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9
1074         data4   0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce
1075         data4   0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253
1076         data4   0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908
1077         data4   0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b
1078         data4   0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655
1079         data4   0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337
1080         data4   0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16
1081         data4   0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69
1082         data4   0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6
1083         data4   0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6
1084         data4   0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e
1085         data4   0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6
1086         data4   0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050
1087         data4   0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9
1088         data4   0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8
1089         data4   0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000
1090         data4   0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a
1091         data4   0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d
1092         data4   0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436
1093         data4   0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b
1094         data4   0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12
1095         data4   0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b
1096         data4   0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e
1097         data4   0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f
1098         data4   0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb
1099         data4   0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4
1100         data4   0xdccad731, 0x85104263, 0x22401397, 0x112084c6
1101         data4   0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729
1102         data4   0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1
1103         data4   0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9
1104         data4   0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233
1105         data4   0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4
1106         data4   0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad
1107         data4   0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e
1108         data4   0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3
1109         data4   0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25
1110         data4   0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b
1111         data4   0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f
1112         data4   0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15
1113         data4   0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0
1114         data4   0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2
1115         data4   0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7
1116         data4   0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791
1117         data4   0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496
1118         data4   0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665
1119         data4   0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b
1120         data4   0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6
1121         data4   0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13
1122         data4   0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47
1123         data4   0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7
1124         data4   0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844
1125         data4   0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3
1126         data4   0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d
1127         data4   0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456
1128         data4   0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8
1129 // Td3:
1130         data4   0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a
1131         data4   0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b
1132         data4   0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5
1133         data4   0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5
1134         data4   0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d
1135         data4   0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b
1136         data4   0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95
1137         data4   0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e
1138         data4   0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27
1139         data4   0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d
1140         data4   0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562
1141         data4   0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9
1142         data4   0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752
1143         data4   0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66
1144         data4   0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3
1145         data4   0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced
1146         data4   0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e
1147         data4   0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4
1148         data4   0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4
1149         data4   0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd
1150         data4   0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d
1151         data4   0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60
1152         data4   0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767
1153         data4   0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79
1154         data4   0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000
1155         data4   0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c
1156         data4   0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736
1157         data4   0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24
1158         data4   0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b
1159         data4   0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c
1160         data4   0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12
1161         data4   0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814
1162         data4   0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3
1163         data4   0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b
1164         data4   0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8
1165         data4   0x31dccad7, 0x63851042, 0x97224013, 0xc6112084
1166         data4   0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7
1167         data4   0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077
1168         data4   0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247
1169         data4   0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22
1170         data4   0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698
1171         data4   0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f
1172         data4   0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254
1173         data4   0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582
1174         data4   0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf
1175         data4   0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb
1176         data4   0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883
1177         data4   0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef
1178         data4   0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629
1179         data4   0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035
1180         data4   0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533
1181         data4   0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17
1182         data4   0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4
1183         data4   0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46
1184         data4   0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb
1185         data4   0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d
1186         data4   0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb
1187         data4   0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a
1188         data4   0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73
1189         data4   0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678
1190         data4   0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2
1191         data4   0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff
1192         data4   0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064
1193         data4   0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0
1194 // Td4:
1195         data4   0x52525252, 0x09090909, 0x6a6a6a6a, 0xd5d5d5d5
1196         data4   0x30303030, 0x36363636, 0xa5a5a5a5, 0x38383838
1197         data4   0xbfbfbfbf, 0x40404040, 0xa3a3a3a3, 0x9e9e9e9e
1198         data4   0x81818181, 0xf3f3f3f3, 0xd7d7d7d7, 0xfbfbfbfb
1199         data4   0x7c7c7c7c, 0xe3e3e3e3, 0x39393939, 0x82828282
1200         data4   0x9b9b9b9b, 0x2f2f2f2f, 0xffffffff, 0x87878787
1201         data4   0x34343434, 0x8e8e8e8e, 0x43434343, 0x44444444
1202         data4   0xc4c4c4c4, 0xdededede, 0xe9e9e9e9, 0xcbcbcbcb
1203         data4   0x54545454, 0x7b7b7b7b, 0x94949494, 0x32323232
1204         data4   0xa6a6a6a6, 0xc2c2c2c2, 0x23232323, 0x3d3d3d3d
1205         data4   0xeeeeeeee, 0x4c4c4c4c, 0x95959595, 0x0b0b0b0b
1206         data4   0x42424242, 0xfafafafa, 0xc3c3c3c3, 0x4e4e4e4e
1207         data4   0x08080808, 0x2e2e2e2e, 0xa1a1a1a1, 0x66666666
1208         data4   0x28282828, 0xd9d9d9d9, 0x24242424, 0xb2b2b2b2
1209         data4   0x76767676, 0x5b5b5b5b, 0xa2a2a2a2, 0x49494949
1210         data4   0x6d6d6d6d, 0x8b8b8b8b, 0xd1d1d1d1, 0x25252525
1211         data4   0x72727272, 0xf8f8f8f8, 0xf6f6f6f6, 0x64646464
1212         data4   0x86868686, 0x68686868, 0x98989898, 0x16161616
1213         data4   0xd4d4d4d4, 0xa4a4a4a4, 0x5c5c5c5c, 0xcccccccc
1214         data4   0x5d5d5d5d, 0x65656565, 0xb6b6b6b6, 0x92929292
1215         data4   0x6c6c6c6c, 0x70707070, 0x48484848, 0x50505050
1216         data4   0xfdfdfdfd, 0xedededed, 0xb9b9b9b9, 0xdadadada
1217         data4   0x5e5e5e5e, 0x15151515, 0x46464646, 0x57575757
1218         data4   0xa7a7a7a7, 0x8d8d8d8d, 0x9d9d9d9d, 0x84848484
1219         data4   0x90909090, 0xd8d8d8d8, 0xabababab, 0x00000000
1220         data4   0x8c8c8c8c, 0xbcbcbcbc, 0xd3d3d3d3, 0x0a0a0a0a
1221         data4   0xf7f7f7f7, 0xe4e4e4e4, 0x58585858, 0x05050505
1222         data4   0xb8b8b8b8, 0xb3b3b3b3, 0x45454545, 0x06060606
1223         data4   0xd0d0d0d0, 0x2c2c2c2c, 0x1e1e1e1e, 0x8f8f8f8f
1224         data4   0xcacacaca, 0x3f3f3f3f, 0x0f0f0f0f, 0x02020202
1225         data4   0xc1c1c1c1, 0xafafafaf, 0xbdbdbdbd, 0x03030303
1226         data4   0x01010101, 0x13131313, 0x8a8a8a8a, 0x6b6b6b6b
1227         data4   0x3a3a3a3a, 0x91919191, 0x11111111, 0x41414141
1228         data4   0x4f4f4f4f, 0x67676767, 0xdcdcdcdc, 0xeaeaeaea
1229         data4   0x97979797, 0xf2f2f2f2, 0xcfcfcfcf, 0xcececece
1230         data4   0xf0f0f0f0, 0xb4b4b4b4, 0xe6e6e6e6, 0x73737373
1231         data4   0x96969696, 0xacacacac, 0x74747474, 0x22222222
1232         data4   0xe7e7e7e7, 0xadadadad, 0x35353535, 0x85858585
1233         data4   0xe2e2e2e2, 0xf9f9f9f9, 0x37373737, 0xe8e8e8e8
1234         data4   0x1c1c1c1c, 0x75757575, 0xdfdfdfdf, 0x6e6e6e6e
1235         data4   0x47474747, 0xf1f1f1f1, 0x1a1a1a1a, 0x71717171
1236         data4   0x1d1d1d1d, 0x29292929, 0xc5c5c5c5, 0x89898989
1237         data4   0x6f6f6f6f, 0xb7b7b7b7, 0x62626262, 0x0e0e0e0e
1238         data4   0xaaaaaaaa, 0x18181818, 0xbebebebe, 0x1b1b1b1b
1239         data4   0xfcfcfcfc, 0x56565656, 0x3e3e3e3e, 0x4b4b4b4b
1240         data4   0xc6c6c6c6, 0xd2d2d2d2, 0x79797979, 0x20202020
1241         data4   0x9a9a9a9a, 0xdbdbdbdb, 0xc0c0c0c0, 0xfefefefe
1242         data4   0x78787878, 0xcdcdcdcd, 0x5a5a5a5a, 0xf4f4f4f4
1243         data4   0x1f1f1f1f, 0xdddddddd, 0xa8a8a8a8, 0x33333333
1244         data4   0x88888888, 0x07070707, 0xc7c7c7c7, 0x31313131
1245         data4   0xb1b1b1b1, 0x12121212, 0x10101010, 0x59595959
1246         data4   0x27272727, 0x80808080, 0xecececec, 0x5f5f5f5f
1247         data4   0x60606060, 0x51515151, 0x7f7f7f7f, 0xa9a9a9a9
1248         data4   0x19191919, 0xb5b5b5b5, 0x4a4a4a4a, 0x0d0d0d0d
1249         data4   0x2d2d2d2d, 0xe5e5e5e5, 0x7a7a7a7a, 0x9f9f9f9f
1250         data4   0x93939393, 0xc9c9c9c9, 0x9c9c9c9c, 0xefefefef
1251         data4   0xa0a0a0a0, 0xe0e0e0e0, 0x3b3b3b3b, 0x4d4d4d4d
1252         data4   0xaeaeaeae, 0x2a2a2a2a, 0xf5f5f5f5, 0xb0b0b0b0
1253         data4   0xc8c8c8c8, 0xebebebeb, 0xbbbbbbbb, 0x3c3c3c3c
1254         data4   0x83838383, 0x53535353, 0x99999999, 0x61616161
1255         data4   0x17171717, 0x2b2b2b2b, 0x04040404, 0x7e7e7e7e
1256         data4   0xbabababa, 0x77777777, 0xd6d6d6d6, 0x26262626
1257         data4   0xe1e1e1e1, 0x69696969, 0x14141414, 0x63636363
1258         data4   0x55555555, 0x21212121, 0x0c0c0c0c, 0x7d7d7d7d
1259 .size   AES_Td#,5*256*4 // HP-UX assembler fails to ".-AES_Td#"