Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / boringssl / win-x86_64 / crypto / aes / aes-x86_64.asm
1 OPTION  DOTNAME
2 .text$  SEGMENT ALIGN(256) 'CODE'
3
4 ALIGN   16
5 _x86_64_AES_encrypt     PROC PRIVATE
6         xor     eax,DWORD PTR[r15]
7         xor     ebx,DWORD PTR[4+r15]
8         xor     ecx,DWORD PTR[8+r15]
9         xor     edx,DWORD PTR[12+r15]
10
11         mov     r13d,DWORD PTR[240+r15]
12         sub     r13d,1
13         jmp     $L$enc_loop
14 ALIGN   16
15 $L$enc_loop::
16
17         movzx   esi,al
18         movzx   edi,bl
19         movzx   ebp,cl
20         mov     r10d,DWORD PTR[rsi*8+r14]
21         mov     r11d,DWORD PTR[rdi*8+r14]
22         mov     r12d,DWORD PTR[rbp*8+r14]
23
24         movzx   esi,bh
25         movzx   edi,ch
26         movzx   ebp,dl
27         xor     r10d,DWORD PTR[3+rsi*8+r14]
28         xor     r11d,DWORD PTR[3+rdi*8+r14]
29         mov     r8d,DWORD PTR[rbp*8+r14]
30
31         movzx   esi,dh
32         shr     ecx,16
33         movzx   ebp,ah
34         xor     r12d,DWORD PTR[3+rsi*8+r14]
35         shr     edx,16
36         xor     r8d,DWORD PTR[3+rbp*8+r14]
37
38         shr     ebx,16
39         lea     r15,QWORD PTR[16+r15]
40         shr     eax,16
41
42         movzx   esi,cl
43         movzx   edi,dl
44         movzx   ebp,al
45         xor     r10d,DWORD PTR[2+rsi*8+r14]
46         xor     r11d,DWORD PTR[2+rdi*8+r14]
47         xor     r12d,DWORD PTR[2+rbp*8+r14]
48
49         movzx   esi,dh
50         movzx   edi,ah
51         movzx   ebp,bl
52         xor     r10d,DWORD PTR[1+rsi*8+r14]
53         xor     r11d,DWORD PTR[1+rdi*8+r14]
54         xor     r8d,DWORD PTR[2+rbp*8+r14]
55
56         mov     edx,DWORD PTR[12+r15]
57         movzx   edi,bh
58         movzx   ebp,ch
59         mov     eax,DWORD PTR[r15]
60         xor     r12d,DWORD PTR[1+rdi*8+r14]
61         xor     r8d,DWORD PTR[1+rbp*8+r14]
62
63         mov     ebx,DWORD PTR[4+r15]
64         mov     ecx,DWORD PTR[8+r15]
65         xor     eax,r10d
66         xor     ebx,r11d
67         xor     ecx,r12d
68         xor     edx,r8d
69         sub     r13d,1
70         jnz     $L$enc_loop
71         movzx   esi,al
72         movzx   edi,bl
73         movzx   ebp,cl
74         movzx   r10d,BYTE PTR[2+rsi*8+r14]
75         movzx   r11d,BYTE PTR[2+rdi*8+r14]
76         movzx   r12d,BYTE PTR[2+rbp*8+r14]
77
78         movzx   esi,dl
79         movzx   edi,bh
80         movzx   ebp,ch
81         movzx   r8d,BYTE PTR[2+rsi*8+r14]
82         mov     edi,DWORD PTR[rdi*8+r14]
83         mov     ebp,DWORD PTR[rbp*8+r14]
84
85         and     edi,00000ff00h
86         and     ebp,00000ff00h
87
88         xor     r10d,edi
89         xor     r11d,ebp
90         shr     ecx,16
91
92         movzx   esi,dh
93         movzx   edi,ah
94         shr     edx,16
95         mov     esi,DWORD PTR[rsi*8+r14]
96         mov     edi,DWORD PTR[rdi*8+r14]
97
98         and     esi,00000ff00h
99         and     edi,00000ff00h
100         shr     ebx,16
101         xor     r12d,esi
102         xor     r8d,edi
103         shr     eax,16
104
105         movzx   esi,cl
106         movzx   edi,dl
107         movzx   ebp,al
108         mov     esi,DWORD PTR[rsi*8+r14]
109         mov     edi,DWORD PTR[rdi*8+r14]
110         mov     ebp,DWORD PTR[rbp*8+r14]
111
112         and     esi,000ff0000h
113         and     edi,000ff0000h
114         and     ebp,000ff0000h
115
116         xor     r10d,esi
117         xor     r11d,edi
118         xor     r12d,ebp
119
120         movzx   esi,bl
121         movzx   edi,dh
122         movzx   ebp,ah
123         mov     esi,DWORD PTR[rsi*8+r14]
124         mov     edi,DWORD PTR[2+rdi*8+r14]
125         mov     ebp,DWORD PTR[2+rbp*8+r14]
126
127         and     esi,000ff0000h
128         and     edi,0ff000000h
129         and     ebp,0ff000000h
130
131         xor     r8d,esi
132         xor     r10d,edi
133         xor     r11d,ebp
134
135         movzx   esi,bh
136         movzx   edi,ch
137         mov     edx,DWORD PTR[((16+12))+r15]
138         mov     esi,DWORD PTR[2+rsi*8+r14]
139         mov     edi,DWORD PTR[2+rdi*8+r14]
140         mov     eax,DWORD PTR[((16+0))+r15]
141
142         and     esi,0ff000000h
143         and     edi,0ff000000h
144
145         xor     r12d,esi
146         xor     r8d,edi
147
148         mov     ebx,DWORD PTR[((16+4))+r15]
149         mov     ecx,DWORD PTR[((16+8))+r15]
150         xor     eax,r10d
151         xor     ebx,r11d
152         xor     ecx,r12d
153         xor     edx,r8d
154 DB      0f3h,0c3h
155 _x86_64_AES_encrypt     ENDP
156
157 ALIGN   16
158 _x86_64_AES_encrypt_compact     PROC PRIVATE
159         lea     r8,QWORD PTR[128+r14]
160         mov     edi,DWORD PTR[((0-128))+r8]
161         mov     ebp,DWORD PTR[((32-128))+r8]
162         mov     r10d,DWORD PTR[((64-128))+r8]
163         mov     r11d,DWORD PTR[((96-128))+r8]
164         mov     edi,DWORD PTR[((128-128))+r8]
165         mov     ebp,DWORD PTR[((160-128))+r8]
166         mov     r10d,DWORD PTR[((192-128))+r8]
167         mov     r11d,DWORD PTR[((224-128))+r8]
168         jmp     $L$enc_loop_compact
169 ALIGN   16
170 $L$enc_loop_compact::
171         xor     eax,DWORD PTR[r15]
172         xor     ebx,DWORD PTR[4+r15]
173         xor     ecx,DWORD PTR[8+r15]
174         xor     edx,DWORD PTR[12+r15]
175         lea     r15,QWORD PTR[16+r15]
176         movzx   r10d,al
177         movzx   r11d,bl
178         movzx   r12d,cl
179         movzx   r8d,dl
180         movzx   esi,bh
181         movzx   edi,ch
182         shr     ecx,16
183         movzx   ebp,dh
184         movzx   r10d,BYTE PTR[r10*1+r14]
185         movzx   r11d,BYTE PTR[r11*1+r14]
186         movzx   r12d,BYTE PTR[r12*1+r14]
187         movzx   r8d,BYTE PTR[r8*1+r14]
188
189         movzx   r9d,BYTE PTR[rsi*1+r14]
190         movzx   esi,ah
191         movzx   r13d,BYTE PTR[rdi*1+r14]
192         movzx   edi,cl
193         movzx   ebp,BYTE PTR[rbp*1+r14]
194         movzx   esi,BYTE PTR[rsi*1+r14]
195
196         shl     r9d,8
197         shr     edx,16
198         shl     r13d,8
199         xor     r10d,r9d
200         shr     eax,16
201         movzx   r9d,dl
202         shr     ebx,16
203         xor     r11d,r13d
204         shl     ebp,8
205         movzx   r13d,al
206         movzx   edi,BYTE PTR[rdi*1+r14]
207         xor     r12d,ebp
208
209         shl     esi,8
210         movzx   ebp,bl
211         shl     edi,16
212         xor     r8d,esi
213         movzx   r9d,BYTE PTR[r9*1+r14]
214         movzx   esi,dh
215         movzx   r13d,BYTE PTR[r13*1+r14]
216         xor     r10d,edi
217
218         shr     ecx,8
219         movzx   edi,ah
220         shl     r9d,16
221         shr     ebx,8
222         shl     r13d,16
223         xor     r11d,r9d
224         movzx   ebp,BYTE PTR[rbp*1+r14]
225         movzx   esi,BYTE PTR[rsi*1+r14]
226         movzx   edi,BYTE PTR[rdi*1+r14]
227         movzx   edx,BYTE PTR[rcx*1+r14]
228         movzx   ecx,BYTE PTR[rbx*1+r14]
229
230         shl     ebp,16
231         xor     r12d,r13d
232         shl     esi,24
233         xor     r8d,ebp
234         shl     edi,24
235         xor     r10d,esi
236         shl     edx,24
237         xor     r11d,edi
238         shl     ecx,24
239         mov     eax,r10d
240         mov     ebx,r11d
241         xor     ecx,r12d
242         xor     edx,r8d
243         cmp     r15,QWORD PTR[16+rsp]
244         je      $L$enc_compact_done
245         mov     r10d,080808080h
246         mov     r11d,080808080h
247         and     r10d,eax
248         and     r11d,ebx
249         mov     esi,r10d
250         mov     edi,r11d
251         shr     r10d,7
252         lea     r8d,DWORD PTR[rax*1+rax]
253         shr     r11d,7
254         lea     r9d,DWORD PTR[rbx*1+rbx]
255         sub     esi,r10d
256         sub     edi,r11d
257         and     r8d,0fefefefeh
258         and     r9d,0fefefefeh
259         and     esi,01b1b1b1bh
260         and     edi,01b1b1b1bh
261         mov     r10d,eax
262         mov     r11d,ebx
263         xor     r8d,esi
264         xor     r9d,edi
265
266         xor     eax,r8d
267         xor     ebx,r9d
268         mov     r12d,080808080h
269         rol     eax,24
270         mov     ebp,080808080h
271         rol     ebx,24
272         and     r12d,ecx
273         and     ebp,edx
274         xor     eax,r8d
275         xor     ebx,r9d
276         mov     esi,r12d
277         ror     r10d,16
278         mov     edi,ebp
279         ror     r11d,16
280         lea     r8d,DWORD PTR[rcx*1+rcx]
281         shr     r12d,7
282         xor     eax,r10d
283         shr     ebp,7
284         xor     ebx,r11d
285         ror     r10d,8
286         lea     r9d,DWORD PTR[rdx*1+rdx]
287         ror     r11d,8
288         sub     esi,r12d
289         sub     edi,ebp
290         xor     eax,r10d
291         xor     ebx,r11d
292
293         and     r8d,0fefefefeh
294         and     r9d,0fefefefeh
295         and     esi,01b1b1b1bh
296         and     edi,01b1b1b1bh
297         mov     r12d,ecx
298         mov     ebp,edx
299         xor     r8d,esi
300         xor     r9d,edi
301
302         ror     r12d,16
303         xor     ecx,r8d
304         ror     ebp,16
305         xor     edx,r9d
306         rol     ecx,24
307         mov     esi,DWORD PTR[r14]
308         rol     edx,24
309         xor     ecx,r8d
310         mov     edi,DWORD PTR[64+r14]
311         xor     edx,r9d
312         mov     r8d,DWORD PTR[128+r14]
313         xor     ecx,r12d
314         ror     r12d,8
315         xor     edx,ebp
316         ror     ebp,8
317         xor     ecx,r12d
318         mov     r9d,DWORD PTR[192+r14]
319         xor     edx,ebp
320         jmp     $L$enc_loop_compact
321 ALIGN   16
322 $L$enc_compact_done::
323         xor     eax,DWORD PTR[r15]
324         xor     ebx,DWORD PTR[4+r15]
325         xor     ecx,DWORD PTR[8+r15]
326         xor     edx,DWORD PTR[12+r15]
327 DB      0f3h,0c3h
328 _x86_64_AES_encrypt_compact     ENDP
329 ALIGN   16
330 PUBLIC  asm_AES_encrypt
331
332 asm_AES_encrypt::
333         push    rbx
334         push    rbp
335         push    r12
336         push    r13
337         push    r14
338         push    r15
339
340
341         mov     r10,rsp
342         lea     rcx,QWORD PTR[((-63))+rdx]
343         and     rsp,-64
344         sub     rcx,rsp
345         neg     rcx
346         and     rcx,03c0h
347         sub     rsp,rcx
348         sub     rsp,32
349
350         mov     QWORD PTR[16+rsp],rsi
351         mov     QWORD PTR[24+rsp],r10
352 $L$enc_prologue::
353
354         mov     r15,rdx
355         mov     r13d,DWORD PTR[240+r15]
356
357         mov     eax,DWORD PTR[rdi]
358         mov     ebx,DWORD PTR[4+rdi]
359         mov     ecx,DWORD PTR[8+rdi]
360         mov     edx,DWORD PTR[12+rdi]
361
362         shl     r13d,4
363         lea     rbp,QWORD PTR[r13*1+r15]
364         mov     QWORD PTR[rsp],r15
365         mov     QWORD PTR[8+rsp],rbp
366
367
368         lea     r14,QWORD PTR[(($L$AES_Te+2048))]
369         lea     rbp,QWORD PTR[768+rsp]
370         sub     rbp,r14
371         and     rbp,0300h
372         lea     r14,QWORD PTR[rbp*1+r14]
373
374         call    _x86_64_AES_encrypt_compact
375
376         mov     r9,QWORD PTR[16+rsp]
377         mov     rsi,QWORD PTR[24+rsp]
378         mov     DWORD PTR[r9],eax
379         mov     DWORD PTR[4+r9],ebx
380         mov     DWORD PTR[8+r9],ecx
381         mov     DWORD PTR[12+r9],edx
382
383         mov     r15,QWORD PTR[rsi]
384         mov     r14,QWORD PTR[8+rsi]
385         mov     r13,QWORD PTR[16+rsi]
386         mov     r12,QWORD PTR[24+rsi]
387         mov     rbp,QWORD PTR[32+rsi]
388         mov     rbx,QWORD PTR[40+rsi]
389         lea     rsp,QWORD PTR[48+rsi]
390 $L$enc_epilogue::
391         DB      0F3h,0C3h               ;repret
392
393
394 ALIGN   16
395 _x86_64_AES_decrypt     PROC PRIVATE
396         xor     eax,DWORD PTR[r15]
397         xor     ebx,DWORD PTR[4+r15]
398         xor     ecx,DWORD PTR[8+r15]
399         xor     edx,DWORD PTR[12+r15]
400
401         mov     r13d,DWORD PTR[240+r15]
402         sub     r13d,1
403         jmp     $L$dec_loop
404 ALIGN   16
405 $L$dec_loop::
406
407         movzx   esi,al
408         movzx   edi,bl
409         movzx   ebp,cl
410         mov     r10d,DWORD PTR[rsi*8+r14]
411         mov     r11d,DWORD PTR[rdi*8+r14]
412         mov     r12d,DWORD PTR[rbp*8+r14]
413
414         movzx   esi,dh
415         movzx   edi,ah
416         movzx   ebp,dl
417         xor     r10d,DWORD PTR[3+rsi*8+r14]
418         xor     r11d,DWORD PTR[3+rdi*8+r14]
419         mov     r8d,DWORD PTR[rbp*8+r14]
420
421         movzx   esi,bh
422         shr     eax,16
423         movzx   ebp,ch
424         xor     r12d,DWORD PTR[3+rsi*8+r14]
425         shr     edx,16
426         xor     r8d,DWORD PTR[3+rbp*8+r14]
427
428         shr     ebx,16
429         lea     r15,QWORD PTR[16+r15]
430         shr     ecx,16
431
432         movzx   esi,cl
433         movzx   edi,dl
434         movzx   ebp,al
435         xor     r10d,DWORD PTR[2+rsi*8+r14]
436         xor     r11d,DWORD PTR[2+rdi*8+r14]
437         xor     r12d,DWORD PTR[2+rbp*8+r14]
438
439         movzx   esi,bh
440         movzx   edi,ch
441         movzx   ebp,bl
442         xor     r10d,DWORD PTR[1+rsi*8+r14]
443         xor     r11d,DWORD PTR[1+rdi*8+r14]
444         xor     r8d,DWORD PTR[2+rbp*8+r14]
445
446         movzx   esi,dh
447         mov     edx,DWORD PTR[12+r15]
448         movzx   ebp,ah
449         xor     r12d,DWORD PTR[1+rsi*8+r14]
450         mov     eax,DWORD PTR[r15]
451         xor     r8d,DWORD PTR[1+rbp*8+r14]
452
453         xor     eax,r10d
454         mov     ebx,DWORD PTR[4+r15]
455         mov     ecx,DWORD PTR[8+r15]
456         xor     ecx,r12d
457         xor     ebx,r11d
458         xor     edx,r8d
459         sub     r13d,1
460         jnz     $L$dec_loop
461         lea     r14,QWORD PTR[2048+r14]
462         movzx   esi,al
463         movzx   edi,bl
464         movzx   ebp,cl
465         movzx   r10d,BYTE PTR[rsi*1+r14]
466         movzx   r11d,BYTE PTR[rdi*1+r14]
467         movzx   r12d,BYTE PTR[rbp*1+r14]
468
469         movzx   esi,dl
470         movzx   edi,dh
471         movzx   ebp,ah
472         movzx   r8d,BYTE PTR[rsi*1+r14]
473         movzx   edi,BYTE PTR[rdi*1+r14]
474         movzx   ebp,BYTE PTR[rbp*1+r14]
475
476         shl     edi,8
477         shl     ebp,8
478
479         xor     r10d,edi
480         xor     r11d,ebp
481         shr     edx,16
482
483         movzx   esi,bh
484         movzx   edi,ch
485         shr     eax,16
486         movzx   esi,BYTE PTR[rsi*1+r14]
487         movzx   edi,BYTE PTR[rdi*1+r14]
488
489         shl     esi,8
490         shl     edi,8
491         shr     ebx,16
492         xor     r12d,esi
493         xor     r8d,edi
494         shr     ecx,16
495
496         movzx   esi,cl
497         movzx   edi,dl
498         movzx   ebp,al
499         movzx   esi,BYTE PTR[rsi*1+r14]
500         movzx   edi,BYTE PTR[rdi*1+r14]
501         movzx   ebp,BYTE PTR[rbp*1+r14]
502
503         shl     esi,16
504         shl     edi,16
505         shl     ebp,16
506
507         xor     r10d,esi
508         xor     r11d,edi
509         xor     r12d,ebp
510
511         movzx   esi,bl
512         movzx   edi,bh
513         movzx   ebp,ch
514         movzx   esi,BYTE PTR[rsi*1+r14]
515         movzx   edi,BYTE PTR[rdi*1+r14]
516         movzx   ebp,BYTE PTR[rbp*1+r14]
517
518         shl     esi,16
519         shl     edi,24
520         shl     ebp,24
521
522         xor     r8d,esi
523         xor     r10d,edi
524         xor     r11d,ebp
525
526         movzx   esi,dh
527         movzx   edi,ah
528         mov     edx,DWORD PTR[((16+12))+r15]
529         movzx   esi,BYTE PTR[rsi*1+r14]
530         movzx   edi,BYTE PTR[rdi*1+r14]
531         mov     eax,DWORD PTR[((16+0))+r15]
532
533         shl     esi,24
534         shl     edi,24
535
536         xor     r12d,esi
537         xor     r8d,edi
538
539         mov     ebx,DWORD PTR[((16+4))+r15]
540         mov     ecx,DWORD PTR[((16+8))+r15]
541         lea     r14,QWORD PTR[((-2048))+r14]
542         xor     eax,r10d
543         xor     ebx,r11d
544         xor     ecx,r12d
545         xor     edx,r8d
546 DB      0f3h,0c3h
547 _x86_64_AES_decrypt     ENDP
548
549 ALIGN   16
550 _x86_64_AES_decrypt_compact     PROC PRIVATE
551         lea     r8,QWORD PTR[128+r14]
552         mov     edi,DWORD PTR[((0-128))+r8]
553         mov     ebp,DWORD PTR[((32-128))+r8]
554         mov     r10d,DWORD PTR[((64-128))+r8]
555         mov     r11d,DWORD PTR[((96-128))+r8]
556         mov     edi,DWORD PTR[((128-128))+r8]
557         mov     ebp,DWORD PTR[((160-128))+r8]
558         mov     r10d,DWORD PTR[((192-128))+r8]
559         mov     r11d,DWORD PTR[((224-128))+r8]
560         jmp     $L$dec_loop_compact
561
562 ALIGN   16
563 $L$dec_loop_compact::
564         xor     eax,DWORD PTR[r15]
565         xor     ebx,DWORD PTR[4+r15]
566         xor     ecx,DWORD PTR[8+r15]
567         xor     edx,DWORD PTR[12+r15]
568         lea     r15,QWORD PTR[16+r15]
569         movzx   r10d,al
570         movzx   r11d,bl
571         movzx   r12d,cl
572         movzx   r8d,dl
573         movzx   esi,dh
574         movzx   edi,ah
575         shr     edx,16
576         movzx   ebp,bh
577         movzx   r10d,BYTE PTR[r10*1+r14]
578         movzx   r11d,BYTE PTR[r11*1+r14]
579         movzx   r12d,BYTE PTR[r12*1+r14]
580         movzx   r8d,BYTE PTR[r8*1+r14]
581
582         movzx   r9d,BYTE PTR[rsi*1+r14]
583         movzx   esi,ch
584         movzx   r13d,BYTE PTR[rdi*1+r14]
585         movzx   ebp,BYTE PTR[rbp*1+r14]
586         movzx   esi,BYTE PTR[rsi*1+r14]
587
588         shr     ecx,16
589         shl     r13d,8
590         shl     r9d,8
591         movzx   edi,cl
592         shr     eax,16
593         xor     r10d,r9d
594         shr     ebx,16
595         movzx   r9d,dl
596
597         shl     ebp,8
598         xor     r11d,r13d
599         shl     esi,8
600         movzx   r13d,al
601         movzx   edi,BYTE PTR[rdi*1+r14]
602         xor     r12d,ebp
603         movzx   ebp,bl
604
605         shl     edi,16
606         xor     r8d,esi
607         movzx   r9d,BYTE PTR[r9*1+r14]
608         movzx   esi,bh
609         movzx   ebp,BYTE PTR[rbp*1+r14]
610         xor     r10d,edi
611         movzx   r13d,BYTE PTR[r13*1+r14]
612         movzx   edi,ch
613
614         shl     ebp,16
615         shl     r9d,16
616         shl     r13d,16
617         xor     r8d,ebp
618         movzx   ebp,dh
619         xor     r11d,r9d
620         shr     eax,8
621         xor     r12d,r13d
622
623         movzx   esi,BYTE PTR[rsi*1+r14]
624         movzx   ebx,BYTE PTR[rdi*1+r14]
625         movzx   ecx,BYTE PTR[rbp*1+r14]
626         movzx   edx,BYTE PTR[rax*1+r14]
627
628         mov     eax,r10d
629         shl     esi,24
630         shl     ebx,24
631         shl     ecx,24
632         xor     eax,esi
633         shl     edx,24
634         xor     ebx,r11d
635         xor     ecx,r12d
636         xor     edx,r8d
637         cmp     r15,QWORD PTR[16+rsp]
638         je      $L$dec_compact_done
639
640         mov     rsi,QWORD PTR[((256+0))+r14]
641         shl     rbx,32
642         shl     rdx,32
643         mov     rdi,QWORD PTR[((256+8))+r14]
644         or      rax,rbx
645         or      rcx,rdx
646         mov     rbp,QWORD PTR[((256+16))+r14]
647         mov     r9,rsi
648         mov     r12,rsi
649         and     r9,rax
650         and     r12,rcx
651         mov     rbx,r9
652         mov     rdx,r12
653         shr     r9,7
654         lea     r8,QWORD PTR[rax*1+rax]
655         shr     r12,7
656         lea     r11,QWORD PTR[rcx*1+rcx]
657         sub     rbx,r9
658         sub     rdx,r12
659         and     r8,rdi
660         and     r11,rdi
661         and     rbx,rbp
662         and     rdx,rbp
663         xor     r8,rbx
664         xor     r11,rdx
665         mov     r10,rsi
666         mov     r13,rsi
667
668         and     r10,r8
669         and     r13,r11
670         mov     rbx,r10
671         mov     rdx,r13
672         shr     r10,7
673         lea     r9,QWORD PTR[r8*1+r8]
674         shr     r13,7
675         lea     r12,QWORD PTR[r11*1+r11]
676         sub     rbx,r10
677         sub     rdx,r13
678         and     r9,rdi
679         and     r12,rdi
680         and     rbx,rbp
681         and     rdx,rbp
682         xor     r9,rbx
683         xor     r12,rdx
684         mov     r10,rsi
685         mov     r13,rsi
686
687         and     r10,r9
688         and     r13,r12
689         mov     rbx,r10
690         mov     rdx,r13
691         shr     r10,7
692         xor     r8,rax
693         shr     r13,7
694         xor     r11,rcx
695         sub     rbx,r10
696         sub     rdx,r13
697         lea     r10,QWORD PTR[r9*1+r9]
698         lea     r13,QWORD PTR[r12*1+r12]
699         xor     r9,rax
700         xor     r12,rcx
701         and     r10,rdi
702         and     r13,rdi
703         and     rbx,rbp
704         and     rdx,rbp
705         xor     r10,rbx
706         xor     r13,rdx
707
708         xor     rax,r10
709         xor     rcx,r13
710         xor     r8,r10
711         xor     r11,r13
712         mov     rbx,rax
713         mov     rdx,rcx
714         xor     r9,r10
715         shr     rbx,32
716         xor     r12,r13
717         shr     rdx,32
718         xor     r10,r8
719         rol     eax,8
720         xor     r13,r11
721         rol     ecx,8
722         xor     r10,r9
723         rol     ebx,8
724         xor     r13,r12
725
726         rol     edx,8
727         xor     eax,r10d
728         shr     r10,32
729         xor     ecx,r13d
730         shr     r13,32
731         xor     ebx,r10d
732         xor     edx,r13d
733
734         mov     r10,r8
735         rol     r8d,24
736         mov     r13,r11
737         rol     r11d,24
738         shr     r10,32
739         xor     eax,r8d
740         shr     r13,32
741         xor     ecx,r11d
742         rol     r10d,24
743         mov     r8,r9
744         rol     r13d,24
745         mov     r11,r12
746         shr     r8,32
747         xor     ebx,r10d
748         shr     r11,32
749         xor     edx,r13d
750
751         mov     rsi,QWORD PTR[r14]
752         rol     r9d,16
753         mov     rdi,QWORD PTR[64+r14]
754         rol     r12d,16
755         mov     rbp,QWORD PTR[128+r14]
756         rol     r8d,16
757         mov     r10,QWORD PTR[192+r14]
758         xor     eax,r9d
759         rol     r11d,16
760         xor     ecx,r12d
761         mov     r13,QWORD PTR[256+r14]
762         xor     ebx,r8d
763         xor     edx,r11d
764         jmp     $L$dec_loop_compact
765 ALIGN   16
766 $L$dec_compact_done::
767         xor     eax,DWORD PTR[r15]
768         xor     ebx,DWORD PTR[4+r15]
769         xor     ecx,DWORD PTR[8+r15]
770         xor     edx,DWORD PTR[12+r15]
771 DB      0f3h,0c3h
772 _x86_64_AES_decrypt_compact     ENDP
773 ALIGN   16
774 PUBLIC  asm_AES_decrypt
775
776 asm_AES_decrypt::
777         push    rbx
778         push    rbp
779         push    r12
780         push    r13
781         push    r14
782         push    r15
783
784
785         mov     r10,rsp
786         lea     rcx,QWORD PTR[((-63))+rdx]
787         and     rsp,-64
788         sub     rcx,rsp
789         neg     rcx
790         and     rcx,03c0h
791         sub     rsp,rcx
792         sub     rsp,32
793
794         mov     QWORD PTR[16+rsp],rsi
795         mov     QWORD PTR[24+rsp],r10
796 $L$dec_prologue::
797
798         mov     r15,rdx
799         mov     r13d,DWORD PTR[240+r15]
800
801         mov     eax,DWORD PTR[rdi]
802         mov     ebx,DWORD PTR[4+rdi]
803         mov     ecx,DWORD PTR[8+rdi]
804         mov     edx,DWORD PTR[12+rdi]
805
806         shl     r13d,4
807         lea     rbp,QWORD PTR[r13*1+r15]
808         mov     QWORD PTR[rsp],r15
809         mov     QWORD PTR[8+rsp],rbp
810
811
812         lea     r14,QWORD PTR[(($L$AES_Td+2048))]
813         lea     rbp,QWORD PTR[768+rsp]
814         sub     rbp,r14
815         and     rbp,0300h
816         lea     r14,QWORD PTR[rbp*1+r14]
817         shr     rbp,3
818         add     r14,rbp
819
820         call    _x86_64_AES_decrypt_compact
821
822         mov     r9,QWORD PTR[16+rsp]
823         mov     rsi,QWORD PTR[24+rsp]
824         mov     DWORD PTR[r9],eax
825         mov     DWORD PTR[4+r9],ebx
826         mov     DWORD PTR[8+r9],ecx
827         mov     DWORD PTR[12+r9],edx
828
829         mov     r15,QWORD PTR[rsi]
830         mov     r14,QWORD PTR[8+rsi]
831         mov     r13,QWORD PTR[16+rsi]
832         mov     r12,QWORD PTR[24+rsi]
833         mov     rbp,QWORD PTR[32+rsi]
834         mov     rbx,QWORD PTR[40+rsi]
835         lea     rsp,QWORD PTR[48+rsi]
836 $L$dec_epilogue::
837         DB      0F3h,0C3h               ;repret
838
839 ALIGN   16
840 PUBLIC  asm_AES_set_encrypt_key
841 asm_AES_set_encrypt_key::
842         push    rbx
843         push    rbp
844         push    r12
845         push    r13
846         push    r14
847         push    r15
848         sub     rsp,8
849 $L$enc_key_prologue::
850
851         call    _x86_64_AES_set_encrypt_key
852
853         mov     rbp,QWORD PTR[40+rsp]
854         mov     rbx,QWORD PTR[48+rsp]
855         add     rsp,56
856 $L$enc_key_epilogue::
857         DB      0F3h,0C3h               ;repret
858
859
860
861 ALIGN   16
862 _x86_64_AES_set_encrypt_key     PROC PRIVATE
863         mov     ecx,esi
864         mov     rsi,rdi
865         mov     rdi,rdx
866
867         test    rsi,-1
868         jz      $L$badpointer
869         test    rdi,-1
870         jz      $L$badpointer
871
872         lea     rbp,QWORD PTR[$L$AES_Te]
873         lea     rbp,QWORD PTR[((2048+128))+rbp]
874
875
876         mov     eax,DWORD PTR[((0-128))+rbp]
877         mov     ebx,DWORD PTR[((32-128))+rbp]
878         mov     r8d,DWORD PTR[((64-128))+rbp]
879         mov     edx,DWORD PTR[((96-128))+rbp]
880         mov     eax,DWORD PTR[((128-128))+rbp]
881         mov     ebx,DWORD PTR[((160-128))+rbp]
882         mov     r8d,DWORD PTR[((192-128))+rbp]
883         mov     edx,DWORD PTR[((224-128))+rbp]
884
885         cmp     ecx,128
886         je      $L$10rounds
887         cmp     ecx,192
888         je      $L$12rounds
889         cmp     ecx,256
890         je      $L$14rounds
891         mov     rax,-2
892         jmp     $L$exit
893
894 $L$10rounds::
895         mov     rax,QWORD PTR[rsi]
896         mov     rdx,QWORD PTR[8+rsi]
897         mov     QWORD PTR[rdi],rax
898         mov     QWORD PTR[8+rdi],rdx
899
900         shr     rdx,32
901         xor     ecx,ecx
902         jmp     $L$10shortcut
903 ALIGN   4
904 $L$10loop::
905         mov     eax,DWORD PTR[rdi]
906         mov     edx,DWORD PTR[12+rdi]
907 $L$10shortcut::
908         movzx   esi,dl
909         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
910         movzx   esi,dh
911         shl     ebx,24
912         xor     eax,ebx
913
914         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
915         shr     edx,16
916         movzx   esi,dl
917         xor     eax,ebx
918
919         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
920         movzx   esi,dh
921         shl     ebx,8
922         xor     eax,ebx
923
924         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
925         shl     ebx,16
926         xor     eax,ebx
927
928         xor     eax,DWORD PTR[((1024-128))+rcx*4+rbp]
929         mov     DWORD PTR[16+rdi],eax
930         xor     eax,DWORD PTR[4+rdi]
931         mov     DWORD PTR[20+rdi],eax
932         xor     eax,DWORD PTR[8+rdi]
933         mov     DWORD PTR[24+rdi],eax
934         xor     eax,DWORD PTR[12+rdi]
935         mov     DWORD PTR[28+rdi],eax
936         add     ecx,1
937         lea     rdi,QWORD PTR[16+rdi]
938         cmp     ecx,10
939         jl      $L$10loop
940
941         mov     DWORD PTR[80+rdi],10
942         xor     rax,rax
943         jmp     $L$exit
944
945 $L$12rounds::
946         mov     rax,QWORD PTR[rsi]
947         mov     rbx,QWORD PTR[8+rsi]
948         mov     rdx,QWORD PTR[16+rsi]
949         mov     QWORD PTR[rdi],rax
950         mov     QWORD PTR[8+rdi],rbx
951         mov     QWORD PTR[16+rdi],rdx
952
953         shr     rdx,32
954         xor     ecx,ecx
955         jmp     $L$12shortcut
956 ALIGN   4
957 $L$12loop::
958         mov     eax,DWORD PTR[rdi]
959         mov     edx,DWORD PTR[20+rdi]
960 $L$12shortcut::
961         movzx   esi,dl
962         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
963         movzx   esi,dh
964         shl     ebx,24
965         xor     eax,ebx
966
967         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
968         shr     edx,16
969         movzx   esi,dl
970         xor     eax,ebx
971
972         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
973         movzx   esi,dh
974         shl     ebx,8
975         xor     eax,ebx
976
977         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
978         shl     ebx,16
979         xor     eax,ebx
980
981         xor     eax,DWORD PTR[((1024-128))+rcx*4+rbp]
982         mov     DWORD PTR[24+rdi],eax
983         xor     eax,DWORD PTR[4+rdi]
984         mov     DWORD PTR[28+rdi],eax
985         xor     eax,DWORD PTR[8+rdi]
986         mov     DWORD PTR[32+rdi],eax
987         xor     eax,DWORD PTR[12+rdi]
988         mov     DWORD PTR[36+rdi],eax
989
990         cmp     ecx,7
991         je      $L$12break
992         add     ecx,1
993
994         xor     eax,DWORD PTR[16+rdi]
995         mov     DWORD PTR[40+rdi],eax
996         xor     eax,DWORD PTR[20+rdi]
997         mov     DWORD PTR[44+rdi],eax
998
999         lea     rdi,QWORD PTR[24+rdi]
1000         jmp     $L$12loop
1001 $L$12break::
1002         mov     DWORD PTR[72+rdi],12
1003         xor     rax,rax
1004         jmp     $L$exit
1005
1006 $L$14rounds::
1007         mov     rax,QWORD PTR[rsi]
1008         mov     rbx,QWORD PTR[8+rsi]
1009         mov     rcx,QWORD PTR[16+rsi]
1010         mov     rdx,QWORD PTR[24+rsi]
1011         mov     QWORD PTR[rdi],rax
1012         mov     QWORD PTR[8+rdi],rbx
1013         mov     QWORD PTR[16+rdi],rcx
1014         mov     QWORD PTR[24+rdi],rdx
1015
1016         shr     rdx,32
1017         xor     ecx,ecx
1018         jmp     $L$14shortcut
1019 ALIGN   4
1020 $L$14loop::
1021         mov     eax,DWORD PTR[rdi]
1022         mov     edx,DWORD PTR[28+rdi]
1023 $L$14shortcut::
1024         movzx   esi,dl
1025         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
1026         movzx   esi,dh
1027         shl     ebx,24
1028         xor     eax,ebx
1029
1030         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
1031         shr     edx,16
1032         movzx   esi,dl
1033         xor     eax,ebx
1034
1035         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
1036         movzx   esi,dh
1037         shl     ebx,8
1038         xor     eax,ebx
1039
1040         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
1041         shl     ebx,16
1042         xor     eax,ebx
1043
1044         xor     eax,DWORD PTR[((1024-128))+rcx*4+rbp]
1045         mov     DWORD PTR[32+rdi],eax
1046         xor     eax,DWORD PTR[4+rdi]
1047         mov     DWORD PTR[36+rdi],eax
1048         xor     eax,DWORD PTR[8+rdi]
1049         mov     DWORD PTR[40+rdi],eax
1050         xor     eax,DWORD PTR[12+rdi]
1051         mov     DWORD PTR[44+rdi],eax
1052
1053         cmp     ecx,6
1054         je      $L$14break
1055         add     ecx,1
1056
1057         mov     edx,eax
1058         mov     eax,DWORD PTR[16+rdi]
1059         movzx   esi,dl
1060         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
1061         movzx   esi,dh
1062         xor     eax,ebx
1063
1064         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
1065         shr     edx,16
1066         shl     ebx,8
1067         movzx   esi,dl
1068         xor     eax,ebx
1069
1070         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
1071         movzx   esi,dh
1072         shl     ebx,16
1073         xor     eax,ebx
1074
1075         movzx   ebx,BYTE PTR[((-128))+rsi*1+rbp]
1076         shl     ebx,24
1077         xor     eax,ebx
1078
1079         mov     DWORD PTR[48+rdi],eax
1080         xor     eax,DWORD PTR[20+rdi]
1081         mov     DWORD PTR[52+rdi],eax
1082         xor     eax,DWORD PTR[24+rdi]
1083         mov     DWORD PTR[56+rdi],eax
1084         xor     eax,DWORD PTR[28+rdi]
1085         mov     DWORD PTR[60+rdi],eax
1086
1087         lea     rdi,QWORD PTR[32+rdi]
1088         jmp     $L$14loop
1089 $L$14break::
1090         mov     DWORD PTR[48+rdi],14
1091         xor     rax,rax
1092         jmp     $L$exit
1093
1094 $L$badpointer::
1095         mov     rax,-1
1096 $L$exit::
1097 DB      0f3h,0c3h
1098 _x86_64_AES_set_encrypt_key     ENDP
1099 ALIGN   16
1100 PUBLIC  asm_AES_set_decrypt_key
1101 asm_AES_set_decrypt_key::
1102         push    rbx
1103         push    rbp
1104         push    r12
1105         push    r13
1106         push    r14
1107         push    r15
1108         push    rdx
1109 $L$dec_key_prologue::
1110
1111         call    _x86_64_AES_set_encrypt_key
1112         mov     r8,QWORD PTR[rsp]
1113         cmp     eax,0
1114         jne     $L$abort
1115
1116         mov     r14d,DWORD PTR[240+r8]
1117         xor     rdi,rdi
1118         lea     rcx,QWORD PTR[r14*4+rdi]
1119         mov     rsi,r8
1120         lea     rdi,QWORD PTR[rcx*4+r8]
1121 ALIGN   4
1122 $L$invert::
1123         mov     rax,QWORD PTR[rsi]
1124         mov     rbx,QWORD PTR[8+rsi]
1125         mov     rcx,QWORD PTR[rdi]
1126         mov     rdx,QWORD PTR[8+rdi]
1127         mov     QWORD PTR[rdi],rax
1128         mov     QWORD PTR[8+rdi],rbx
1129         mov     QWORD PTR[rsi],rcx
1130         mov     QWORD PTR[8+rsi],rdx
1131         lea     rsi,QWORD PTR[16+rsi]
1132         lea     rdi,QWORD PTR[((-16))+rdi]
1133         cmp     rdi,rsi
1134         jne     $L$invert
1135
1136         lea     rax,QWORD PTR[(($L$AES_Te+2048+1024))]
1137
1138         mov     rsi,QWORD PTR[40+rax]
1139         mov     rdi,QWORD PTR[48+rax]
1140         mov     rbp,QWORD PTR[56+rax]
1141
1142         mov     r15,r8
1143         sub     r14d,1
1144 ALIGN   4
1145 $L$permute::
1146         lea     r15,QWORD PTR[16+r15]
1147         mov     rax,QWORD PTR[r15]
1148         mov     rcx,QWORD PTR[8+r15]
1149         mov     r9,rsi
1150         mov     r12,rsi
1151         and     r9,rax
1152         and     r12,rcx
1153         mov     rbx,r9
1154         mov     rdx,r12
1155         shr     r9,7
1156         lea     r8,QWORD PTR[rax*1+rax]
1157         shr     r12,7
1158         lea     r11,QWORD PTR[rcx*1+rcx]
1159         sub     rbx,r9
1160         sub     rdx,r12
1161         and     r8,rdi
1162         and     r11,rdi
1163         and     rbx,rbp
1164         and     rdx,rbp
1165         xor     r8,rbx
1166         xor     r11,rdx
1167         mov     r10,rsi
1168         mov     r13,rsi
1169
1170         and     r10,r8
1171         and     r13,r11
1172         mov     rbx,r10
1173         mov     rdx,r13
1174         shr     r10,7
1175         lea     r9,QWORD PTR[r8*1+r8]
1176         shr     r13,7
1177         lea     r12,QWORD PTR[r11*1+r11]
1178         sub     rbx,r10
1179         sub     rdx,r13
1180         and     r9,rdi
1181         and     r12,rdi
1182         and     rbx,rbp
1183         and     rdx,rbp
1184         xor     r9,rbx
1185         xor     r12,rdx
1186         mov     r10,rsi
1187         mov     r13,rsi
1188
1189         and     r10,r9
1190         and     r13,r12
1191         mov     rbx,r10
1192         mov     rdx,r13
1193         shr     r10,7
1194         xor     r8,rax
1195         shr     r13,7
1196         xor     r11,rcx
1197         sub     rbx,r10
1198         sub     rdx,r13
1199         lea     r10,QWORD PTR[r9*1+r9]
1200         lea     r13,QWORD PTR[r12*1+r12]
1201         xor     r9,rax
1202         xor     r12,rcx
1203         and     r10,rdi
1204         and     r13,rdi
1205         and     rbx,rbp
1206         and     rdx,rbp
1207         xor     r10,rbx
1208         xor     r13,rdx
1209
1210         xor     rax,r10
1211         xor     rcx,r13
1212         xor     r8,r10
1213         xor     r11,r13
1214         mov     rbx,rax
1215         mov     rdx,rcx
1216         xor     r9,r10
1217         shr     rbx,32
1218         xor     r12,r13
1219         shr     rdx,32
1220         xor     r10,r8
1221         rol     eax,8
1222         xor     r13,r11
1223         rol     ecx,8
1224         xor     r10,r9
1225         rol     ebx,8
1226         xor     r13,r12
1227
1228         rol     edx,8
1229         xor     eax,r10d
1230         shr     r10,32
1231         xor     ecx,r13d
1232         shr     r13,32
1233         xor     ebx,r10d
1234         xor     edx,r13d
1235
1236         mov     r10,r8
1237         rol     r8d,24
1238         mov     r13,r11
1239         rol     r11d,24
1240         shr     r10,32
1241         xor     eax,r8d
1242         shr     r13,32
1243         xor     ecx,r11d
1244         rol     r10d,24
1245         mov     r8,r9
1246         rol     r13d,24
1247         mov     r11,r12
1248         shr     r8,32
1249         xor     ebx,r10d
1250         shr     r11,32
1251         xor     edx,r13d
1252
1253
1254         rol     r9d,16
1255
1256         rol     r12d,16
1257
1258         rol     r8d,16
1259
1260         xor     eax,r9d
1261         rol     r11d,16
1262         xor     ecx,r12d
1263
1264         xor     ebx,r8d
1265         xor     edx,r11d
1266         mov     DWORD PTR[r15],eax
1267         mov     DWORD PTR[4+r15],ebx
1268         mov     DWORD PTR[8+r15],ecx
1269         mov     DWORD PTR[12+r15],edx
1270         sub     r14d,1
1271         jnz     $L$permute
1272
1273         xor     rax,rax
1274 $L$abort::
1275         mov     r15,QWORD PTR[8+rsp]
1276         mov     r14,QWORD PTR[16+rsp]
1277         mov     r13,QWORD PTR[24+rsp]
1278         mov     r12,QWORD PTR[32+rsp]
1279         mov     rbp,QWORD PTR[40+rsp]
1280         mov     rbx,QWORD PTR[48+rsp]
1281         add     rsp,56
1282 $L$dec_key_epilogue::
1283         DB      0F3h,0C3h               ;repret
1284
1285 ALIGN   16
1286 EXTERN  OPENSSL_ia32cap_P:NEAR
1287 PUBLIC  asm_AES_cbc_encrypt
1288
1289 asm_AES_cbc_encrypt::
1290         cmp     rdx,0
1291         je      $L$cbc_epilogue
1292         pushfq
1293         push    rbx
1294         push    rbp
1295         push    r12
1296         push    r13
1297         push    r14
1298         push    r15
1299 $L$cbc_prologue::
1300
1301         cld
1302         mov     r9d,r9d
1303
1304         lea     r14,QWORD PTR[$L$AES_Te]
1305         cmp     r9,0
1306         jne     $L$cbc_picked_te
1307         lea     r14,QWORD PTR[$L$AES_Td]
1308 $L$cbc_picked_te::
1309
1310         mov     r10d,DWORD PTR[OPENSSL_ia32cap_P]
1311         cmp     rdx,512
1312         jb      $L$cbc_slow_prologue
1313         test    rdx,15
1314         jnz     $L$cbc_slow_prologue
1315         bt      r10d,28
1316         jc      $L$cbc_slow_prologue
1317
1318
1319         lea     r15,QWORD PTR[((-88-248))+rsp]
1320         and     r15,-64
1321
1322
1323         mov     r10,r14
1324         lea     r11,QWORD PTR[2304+r14]
1325         mov     r12,r15
1326         and     r10,0FFFh
1327         and     r11,0FFFh
1328         and     r12,0FFFh
1329
1330         cmp     r12,r11
1331         jb      $L$cbc_te_break_out
1332         sub     r12,r11
1333         sub     r15,r12
1334         jmp     $L$cbc_te_ok
1335 $L$cbc_te_break_out::
1336         sub     r12,r10
1337         and     r12,0FFFh
1338         add     r12,320
1339         sub     r15,r12
1340 ALIGN   4
1341 $L$cbc_te_ok::
1342
1343         xchg    r15,rsp
1344
1345         mov     QWORD PTR[16+rsp],r15
1346 $L$cbc_fast_body::
1347         mov     QWORD PTR[24+rsp],rdi
1348         mov     QWORD PTR[32+rsp],rsi
1349         mov     QWORD PTR[40+rsp],rdx
1350         mov     QWORD PTR[48+rsp],rcx
1351         mov     QWORD PTR[56+rsp],r8
1352         mov     DWORD PTR[((80+240))+rsp],0
1353         mov     rbp,r8
1354         mov     rbx,r9
1355         mov     r9,rsi
1356         mov     r8,rdi
1357         mov     r15,rcx
1358
1359         mov     eax,DWORD PTR[240+r15]
1360
1361         mov     r10,r15
1362         sub     r10,r14
1363         and     r10,0fffh
1364         cmp     r10,2304
1365         jb      $L$cbc_do_ecopy
1366         cmp     r10,4096-248
1367         jb      $L$cbc_skip_ecopy
1368 ALIGN   4
1369 $L$cbc_do_ecopy::
1370         mov     rsi,r15
1371         lea     rdi,QWORD PTR[80+rsp]
1372         lea     r15,QWORD PTR[80+rsp]
1373         mov     ecx,240/8
1374         DD      090A548F3h
1375         mov     DWORD PTR[rdi],eax
1376 $L$cbc_skip_ecopy::
1377         mov     QWORD PTR[rsp],r15
1378
1379         mov     ecx,18
1380 ALIGN   4
1381 $L$cbc_prefetch_te::
1382         mov     r10,QWORD PTR[r14]
1383         mov     r11,QWORD PTR[32+r14]
1384         mov     r12,QWORD PTR[64+r14]
1385         mov     r13,QWORD PTR[96+r14]
1386         lea     r14,QWORD PTR[128+r14]
1387         sub     ecx,1
1388         jnz     $L$cbc_prefetch_te
1389         lea     r14,QWORD PTR[((-2304))+r14]
1390
1391         cmp     rbx,0
1392         je      $L$FAST_DECRYPT
1393
1394
1395         mov     eax,DWORD PTR[rbp]
1396         mov     ebx,DWORD PTR[4+rbp]
1397         mov     ecx,DWORD PTR[8+rbp]
1398         mov     edx,DWORD PTR[12+rbp]
1399
1400 ALIGN   4
1401 $L$cbc_fast_enc_loop::
1402         xor     eax,DWORD PTR[r8]
1403         xor     ebx,DWORD PTR[4+r8]
1404         xor     ecx,DWORD PTR[8+r8]
1405         xor     edx,DWORD PTR[12+r8]
1406         mov     r15,QWORD PTR[rsp]
1407         mov     QWORD PTR[24+rsp],r8
1408
1409         call    _x86_64_AES_encrypt
1410
1411         mov     r8,QWORD PTR[24+rsp]
1412         mov     r10,QWORD PTR[40+rsp]
1413         mov     DWORD PTR[r9],eax
1414         mov     DWORD PTR[4+r9],ebx
1415         mov     DWORD PTR[8+r9],ecx
1416         mov     DWORD PTR[12+r9],edx
1417
1418         lea     r8,QWORD PTR[16+r8]
1419         lea     r9,QWORD PTR[16+r9]
1420         sub     r10,16
1421         test    r10,-16
1422         mov     QWORD PTR[40+rsp],r10
1423         jnz     $L$cbc_fast_enc_loop
1424         mov     rbp,QWORD PTR[56+rsp]
1425         mov     DWORD PTR[rbp],eax
1426         mov     DWORD PTR[4+rbp],ebx
1427         mov     DWORD PTR[8+rbp],ecx
1428         mov     DWORD PTR[12+rbp],edx
1429
1430         jmp     $L$cbc_fast_cleanup
1431
1432
1433 ALIGN   16
1434 $L$FAST_DECRYPT::
1435         cmp     r9,r8
1436         je      $L$cbc_fast_dec_in_place
1437
1438         mov     QWORD PTR[64+rsp],rbp
1439 ALIGN   4
1440 $L$cbc_fast_dec_loop::
1441         mov     eax,DWORD PTR[r8]
1442         mov     ebx,DWORD PTR[4+r8]
1443         mov     ecx,DWORD PTR[8+r8]
1444         mov     edx,DWORD PTR[12+r8]
1445         mov     r15,QWORD PTR[rsp]
1446         mov     QWORD PTR[24+rsp],r8
1447
1448         call    _x86_64_AES_decrypt
1449
1450         mov     rbp,QWORD PTR[64+rsp]
1451         mov     r8,QWORD PTR[24+rsp]
1452         mov     r10,QWORD PTR[40+rsp]
1453         xor     eax,DWORD PTR[rbp]
1454         xor     ebx,DWORD PTR[4+rbp]
1455         xor     ecx,DWORD PTR[8+rbp]
1456         xor     edx,DWORD PTR[12+rbp]
1457         mov     rbp,r8
1458
1459         sub     r10,16
1460         mov     QWORD PTR[40+rsp],r10
1461         mov     QWORD PTR[64+rsp],rbp
1462
1463         mov     DWORD PTR[r9],eax
1464         mov     DWORD PTR[4+r9],ebx
1465         mov     DWORD PTR[8+r9],ecx
1466         mov     DWORD PTR[12+r9],edx
1467
1468         lea     r8,QWORD PTR[16+r8]
1469         lea     r9,QWORD PTR[16+r9]
1470         jnz     $L$cbc_fast_dec_loop
1471         mov     r12,QWORD PTR[56+rsp]
1472         mov     r10,QWORD PTR[rbp]
1473         mov     r11,QWORD PTR[8+rbp]
1474         mov     QWORD PTR[r12],r10
1475         mov     QWORD PTR[8+r12],r11
1476         jmp     $L$cbc_fast_cleanup
1477
1478 ALIGN   16
1479 $L$cbc_fast_dec_in_place::
1480         mov     r10,QWORD PTR[rbp]
1481         mov     r11,QWORD PTR[8+rbp]
1482         mov     QWORD PTR[((0+64))+rsp],r10
1483         mov     QWORD PTR[((8+64))+rsp],r11
1484 ALIGN   4
1485 $L$cbc_fast_dec_in_place_loop::
1486         mov     eax,DWORD PTR[r8]
1487         mov     ebx,DWORD PTR[4+r8]
1488         mov     ecx,DWORD PTR[8+r8]
1489         mov     edx,DWORD PTR[12+r8]
1490         mov     r15,QWORD PTR[rsp]
1491         mov     QWORD PTR[24+rsp],r8
1492
1493         call    _x86_64_AES_decrypt
1494
1495         mov     r8,QWORD PTR[24+rsp]
1496         mov     r10,QWORD PTR[40+rsp]
1497         xor     eax,DWORD PTR[((0+64))+rsp]
1498         xor     ebx,DWORD PTR[((4+64))+rsp]
1499         xor     ecx,DWORD PTR[((8+64))+rsp]
1500         xor     edx,DWORD PTR[((12+64))+rsp]
1501
1502         mov     r11,QWORD PTR[r8]
1503         mov     r12,QWORD PTR[8+r8]
1504         sub     r10,16
1505         jz      $L$cbc_fast_dec_in_place_done
1506
1507         mov     QWORD PTR[((0+64))+rsp],r11
1508         mov     QWORD PTR[((8+64))+rsp],r12
1509
1510         mov     DWORD PTR[r9],eax
1511         mov     DWORD PTR[4+r9],ebx
1512         mov     DWORD PTR[8+r9],ecx
1513         mov     DWORD PTR[12+r9],edx
1514
1515         lea     r8,QWORD PTR[16+r8]
1516         lea     r9,QWORD PTR[16+r9]
1517         mov     QWORD PTR[40+rsp],r10
1518         jmp     $L$cbc_fast_dec_in_place_loop
1519 $L$cbc_fast_dec_in_place_done::
1520         mov     rdi,QWORD PTR[56+rsp]
1521         mov     QWORD PTR[rdi],r11
1522         mov     QWORD PTR[8+rdi],r12
1523
1524         mov     DWORD PTR[r9],eax
1525         mov     DWORD PTR[4+r9],ebx
1526         mov     DWORD PTR[8+r9],ecx
1527         mov     DWORD PTR[12+r9],edx
1528
1529 ALIGN   4
1530 $L$cbc_fast_cleanup::
1531         cmp     DWORD PTR[((80+240))+rsp],0
1532         lea     rdi,QWORD PTR[80+rsp]
1533         je      $L$cbc_exit
1534         mov     ecx,240/8
1535         xor     rax,rax
1536         DD      090AB48F3h
1537
1538         jmp     $L$cbc_exit
1539
1540
1541 ALIGN   16
1542 $L$cbc_slow_prologue::
1543
1544         lea     rbp,QWORD PTR[((-88))+rsp]
1545         and     rbp,-64
1546
1547         lea     r10,QWORD PTR[((-88-63))+rcx]
1548         sub     r10,rbp
1549         neg     r10
1550         and     r10,03c0h
1551         sub     rbp,r10
1552
1553         xchg    rbp,rsp
1554
1555         mov     QWORD PTR[16+rsp],rbp
1556 $L$cbc_slow_body::
1557
1558
1559
1560
1561         mov     QWORD PTR[56+rsp],r8
1562         mov     rbp,r8
1563         mov     rbx,r9
1564         mov     r9,rsi
1565         mov     r8,rdi
1566         mov     r15,rcx
1567         mov     r10,rdx
1568
1569         mov     eax,DWORD PTR[240+r15]
1570         mov     QWORD PTR[rsp],r15
1571         shl     eax,4
1572         lea     rax,QWORD PTR[rax*1+r15]
1573         mov     QWORD PTR[8+rsp],rax
1574
1575
1576         lea     r14,QWORD PTR[2048+r14]
1577         lea     rax,QWORD PTR[((768-8))+rsp]
1578         sub     rax,r14
1579         and     rax,0300h
1580         lea     r14,QWORD PTR[rax*1+r14]
1581
1582         cmp     rbx,0
1583         je      $L$SLOW_DECRYPT
1584
1585
1586         test    r10,-16
1587         mov     eax,DWORD PTR[rbp]
1588         mov     ebx,DWORD PTR[4+rbp]
1589         mov     ecx,DWORD PTR[8+rbp]
1590         mov     edx,DWORD PTR[12+rbp]
1591         jz      $L$cbc_slow_enc_tail
1592
1593 ALIGN   4
1594 $L$cbc_slow_enc_loop::
1595         xor     eax,DWORD PTR[r8]
1596         xor     ebx,DWORD PTR[4+r8]
1597         xor     ecx,DWORD PTR[8+r8]
1598         xor     edx,DWORD PTR[12+r8]
1599         mov     r15,QWORD PTR[rsp]
1600         mov     QWORD PTR[24+rsp],r8
1601         mov     QWORD PTR[32+rsp],r9
1602         mov     QWORD PTR[40+rsp],r10
1603
1604         call    _x86_64_AES_encrypt_compact
1605
1606         mov     r8,QWORD PTR[24+rsp]
1607         mov     r9,QWORD PTR[32+rsp]
1608         mov     r10,QWORD PTR[40+rsp]
1609         mov     DWORD PTR[r9],eax
1610         mov     DWORD PTR[4+r9],ebx
1611         mov     DWORD PTR[8+r9],ecx
1612         mov     DWORD PTR[12+r9],edx
1613
1614         lea     r8,QWORD PTR[16+r8]
1615         lea     r9,QWORD PTR[16+r9]
1616         sub     r10,16
1617         test    r10,-16
1618         jnz     $L$cbc_slow_enc_loop
1619         test    r10,15
1620         jnz     $L$cbc_slow_enc_tail
1621         mov     rbp,QWORD PTR[56+rsp]
1622         mov     DWORD PTR[rbp],eax
1623         mov     DWORD PTR[4+rbp],ebx
1624         mov     DWORD PTR[8+rbp],ecx
1625         mov     DWORD PTR[12+rbp],edx
1626
1627         jmp     $L$cbc_exit
1628
1629 ALIGN   4
1630 $L$cbc_slow_enc_tail::
1631         mov     r11,rax
1632         mov     r12,rcx
1633         mov     rcx,r10
1634         mov     rsi,r8
1635         mov     rdi,r9
1636         DD      09066A4F3h
1637         mov     rcx,16
1638         sub     rcx,r10
1639         xor     rax,rax
1640         DD      09066AAF3h
1641         mov     r8,r9
1642         mov     r10,16
1643         mov     rax,r11
1644         mov     rcx,r12
1645         jmp     $L$cbc_slow_enc_loop
1646
1647 ALIGN   16
1648 $L$SLOW_DECRYPT::
1649         shr     rax,3
1650         add     r14,rax
1651
1652         mov     r11,QWORD PTR[rbp]
1653         mov     r12,QWORD PTR[8+rbp]
1654         mov     QWORD PTR[((0+64))+rsp],r11
1655         mov     QWORD PTR[((8+64))+rsp],r12
1656
1657 ALIGN   4
1658 $L$cbc_slow_dec_loop::
1659         mov     eax,DWORD PTR[r8]
1660         mov     ebx,DWORD PTR[4+r8]
1661         mov     ecx,DWORD PTR[8+r8]
1662         mov     edx,DWORD PTR[12+r8]
1663         mov     r15,QWORD PTR[rsp]
1664         mov     QWORD PTR[24+rsp],r8
1665         mov     QWORD PTR[32+rsp],r9
1666         mov     QWORD PTR[40+rsp],r10
1667
1668         call    _x86_64_AES_decrypt_compact
1669
1670         mov     r8,QWORD PTR[24+rsp]
1671         mov     r9,QWORD PTR[32+rsp]
1672         mov     r10,QWORD PTR[40+rsp]
1673         xor     eax,DWORD PTR[((0+64))+rsp]
1674         xor     ebx,DWORD PTR[((4+64))+rsp]
1675         xor     ecx,DWORD PTR[((8+64))+rsp]
1676         xor     edx,DWORD PTR[((12+64))+rsp]
1677
1678         mov     r11,QWORD PTR[r8]
1679         mov     r12,QWORD PTR[8+r8]
1680         sub     r10,16
1681         jc      $L$cbc_slow_dec_partial
1682         jz      $L$cbc_slow_dec_done
1683
1684         mov     QWORD PTR[((0+64))+rsp],r11
1685         mov     QWORD PTR[((8+64))+rsp],r12
1686
1687         mov     DWORD PTR[r9],eax
1688         mov     DWORD PTR[4+r9],ebx
1689         mov     DWORD PTR[8+r9],ecx
1690         mov     DWORD PTR[12+r9],edx
1691
1692         lea     r8,QWORD PTR[16+r8]
1693         lea     r9,QWORD PTR[16+r9]
1694         jmp     $L$cbc_slow_dec_loop
1695 $L$cbc_slow_dec_done::
1696         mov     rdi,QWORD PTR[56+rsp]
1697         mov     QWORD PTR[rdi],r11
1698         mov     QWORD PTR[8+rdi],r12
1699
1700         mov     DWORD PTR[r9],eax
1701         mov     DWORD PTR[4+r9],ebx
1702         mov     DWORD PTR[8+r9],ecx
1703         mov     DWORD PTR[12+r9],edx
1704
1705         jmp     $L$cbc_exit
1706
1707 ALIGN   4
1708 $L$cbc_slow_dec_partial::
1709         mov     rdi,QWORD PTR[56+rsp]
1710         mov     QWORD PTR[rdi],r11
1711         mov     QWORD PTR[8+rdi],r12
1712
1713         mov     DWORD PTR[((0+64))+rsp],eax
1714         mov     DWORD PTR[((4+64))+rsp],ebx
1715         mov     DWORD PTR[((8+64))+rsp],ecx
1716         mov     DWORD PTR[((12+64))+rsp],edx
1717
1718         mov     rdi,r9
1719         lea     rsi,QWORD PTR[64+rsp]
1720         lea     rcx,QWORD PTR[16+r10]
1721         DD      09066A4F3h
1722         jmp     $L$cbc_exit
1723
1724 ALIGN   16
1725 $L$cbc_exit::
1726         mov     rsi,QWORD PTR[16+rsp]
1727         mov     r15,QWORD PTR[rsi]
1728         mov     r14,QWORD PTR[8+rsi]
1729         mov     r13,QWORD PTR[16+rsi]
1730         mov     r12,QWORD PTR[24+rsi]
1731         mov     rbp,QWORD PTR[32+rsi]
1732         mov     rbx,QWORD PTR[40+rsi]
1733         lea     rsp,QWORD PTR[48+rsi]
1734 $L$cbc_popfq::
1735         popfq
1736 $L$cbc_epilogue::
1737         DB      0F3h,0C3h               ;repret
1738
1739 ALIGN   64
1740 $L$AES_Te::
1741         DD      0a56363c6h,0a56363c6h
1742         DD      0847c7cf8h,0847c7cf8h
1743         DD      0997777eeh,0997777eeh
1744         DD      08d7b7bf6h,08d7b7bf6h
1745         DD      00df2f2ffh,00df2f2ffh
1746         DD      0bd6b6bd6h,0bd6b6bd6h
1747         DD      0b16f6fdeh,0b16f6fdeh
1748         DD      054c5c591h,054c5c591h
1749         DD      050303060h,050303060h
1750         DD      003010102h,003010102h
1751         DD      0a96767ceh,0a96767ceh
1752         DD      07d2b2b56h,07d2b2b56h
1753         DD      019fefee7h,019fefee7h
1754         DD      062d7d7b5h,062d7d7b5h
1755         DD      0e6abab4dh,0e6abab4dh
1756         DD      09a7676ech,09a7676ech
1757         DD      045caca8fh,045caca8fh
1758         DD      09d82821fh,09d82821fh
1759         DD      040c9c989h,040c9c989h
1760         DD      0877d7dfah,0877d7dfah
1761         DD      015fafaefh,015fafaefh
1762         DD      0eb5959b2h,0eb5959b2h
1763         DD      0c947478eh,0c947478eh
1764         DD      00bf0f0fbh,00bf0f0fbh
1765         DD      0ecadad41h,0ecadad41h
1766         DD      067d4d4b3h,067d4d4b3h
1767         DD      0fda2a25fh,0fda2a25fh
1768         DD      0eaafaf45h,0eaafaf45h
1769         DD      0bf9c9c23h,0bf9c9c23h
1770         DD      0f7a4a453h,0f7a4a453h
1771         DD      0967272e4h,0967272e4h
1772         DD      05bc0c09bh,05bc0c09bh
1773         DD      0c2b7b775h,0c2b7b775h
1774         DD      01cfdfde1h,01cfdfde1h
1775         DD      0ae93933dh,0ae93933dh
1776         DD      06a26264ch,06a26264ch
1777         DD      05a36366ch,05a36366ch
1778         DD      0413f3f7eh,0413f3f7eh
1779         DD      002f7f7f5h,002f7f7f5h
1780         DD      04fcccc83h,04fcccc83h
1781         DD      05c343468h,05c343468h
1782         DD      0f4a5a551h,0f4a5a551h
1783         DD      034e5e5d1h,034e5e5d1h
1784         DD      008f1f1f9h,008f1f1f9h
1785         DD      0937171e2h,0937171e2h
1786         DD      073d8d8abh,073d8d8abh
1787         DD      053313162h,053313162h
1788         DD      03f15152ah,03f15152ah
1789         DD      00c040408h,00c040408h
1790         DD      052c7c795h,052c7c795h
1791         DD      065232346h,065232346h
1792         DD      05ec3c39dh,05ec3c39dh
1793         DD      028181830h,028181830h
1794         DD      0a1969637h,0a1969637h
1795         DD      00f05050ah,00f05050ah
1796         DD      0b59a9a2fh,0b59a9a2fh
1797         DD      00907070eh,00907070eh
1798         DD      036121224h,036121224h
1799         DD      09b80801bh,09b80801bh
1800         DD      03de2e2dfh,03de2e2dfh
1801         DD      026ebebcdh,026ebebcdh
1802         DD      06927274eh,06927274eh
1803         DD      0cdb2b27fh,0cdb2b27fh
1804         DD      09f7575eah,09f7575eah
1805         DD      01b090912h,01b090912h
1806         DD      09e83831dh,09e83831dh
1807         DD      0742c2c58h,0742c2c58h
1808         DD      02e1a1a34h,02e1a1a34h
1809         DD      02d1b1b36h,02d1b1b36h
1810         DD      0b26e6edch,0b26e6edch
1811         DD      0ee5a5ab4h,0ee5a5ab4h
1812         DD      0fba0a05bh,0fba0a05bh
1813         DD      0f65252a4h,0f65252a4h
1814         DD      04d3b3b76h,04d3b3b76h
1815         DD      061d6d6b7h,061d6d6b7h
1816         DD      0ceb3b37dh,0ceb3b37dh
1817         DD      07b292952h,07b292952h
1818         DD      03ee3e3ddh,03ee3e3ddh
1819         DD      0712f2f5eh,0712f2f5eh
1820         DD      097848413h,097848413h
1821         DD      0f55353a6h,0f55353a6h
1822         DD      068d1d1b9h,068d1d1b9h
1823         DD      000000000h,000000000h
1824         DD      02cededc1h,02cededc1h
1825         DD      060202040h,060202040h
1826         DD      01ffcfce3h,01ffcfce3h
1827         DD      0c8b1b179h,0c8b1b179h
1828         DD      0ed5b5bb6h,0ed5b5bb6h
1829         DD      0be6a6ad4h,0be6a6ad4h
1830         DD      046cbcb8dh,046cbcb8dh
1831         DD      0d9bebe67h,0d9bebe67h
1832         DD      04b393972h,04b393972h
1833         DD      0de4a4a94h,0de4a4a94h
1834         DD      0d44c4c98h,0d44c4c98h
1835         DD      0e85858b0h,0e85858b0h
1836         DD      04acfcf85h,04acfcf85h
1837         DD      06bd0d0bbh,06bd0d0bbh
1838         DD      02aefefc5h,02aefefc5h
1839         DD      0e5aaaa4fh,0e5aaaa4fh
1840         DD      016fbfbedh,016fbfbedh
1841         DD      0c5434386h,0c5434386h
1842         DD      0d74d4d9ah,0d74d4d9ah
1843         DD      055333366h,055333366h
1844         DD      094858511h,094858511h
1845         DD      0cf45458ah,0cf45458ah
1846         DD      010f9f9e9h,010f9f9e9h
1847         DD      006020204h,006020204h
1848         DD      0817f7ffeh,0817f7ffeh
1849         DD      0f05050a0h,0f05050a0h
1850         DD      0443c3c78h,0443c3c78h
1851         DD      0ba9f9f25h,0ba9f9f25h
1852         DD      0e3a8a84bh,0e3a8a84bh
1853         DD      0f35151a2h,0f35151a2h
1854         DD      0fea3a35dh,0fea3a35dh
1855         DD      0c0404080h,0c0404080h
1856         DD      08a8f8f05h,08a8f8f05h
1857         DD      0ad92923fh,0ad92923fh
1858         DD      0bc9d9d21h,0bc9d9d21h
1859         DD      048383870h,048383870h
1860         DD      004f5f5f1h,004f5f5f1h
1861         DD      0dfbcbc63h,0dfbcbc63h
1862         DD      0c1b6b677h,0c1b6b677h
1863         DD      075dadaafh,075dadaafh
1864         DD      063212142h,063212142h
1865         DD      030101020h,030101020h
1866         DD      01affffe5h,01affffe5h
1867         DD      00ef3f3fdh,00ef3f3fdh
1868         DD      06dd2d2bfh,06dd2d2bfh
1869         DD      04ccdcd81h,04ccdcd81h
1870         DD      0140c0c18h,0140c0c18h
1871         DD      035131326h,035131326h
1872         DD      02fececc3h,02fececc3h
1873         DD      0e15f5fbeh,0e15f5fbeh
1874         DD      0a2979735h,0a2979735h
1875         DD      0cc444488h,0cc444488h
1876         DD      03917172eh,03917172eh
1877         DD      057c4c493h,057c4c493h
1878         DD      0f2a7a755h,0f2a7a755h
1879         DD      0827e7efch,0827e7efch
1880         DD      0473d3d7ah,0473d3d7ah
1881         DD      0ac6464c8h,0ac6464c8h
1882         DD      0e75d5dbah,0e75d5dbah
1883         DD      02b191932h,02b191932h
1884         DD      0957373e6h,0957373e6h
1885         DD      0a06060c0h,0a06060c0h
1886         DD      098818119h,098818119h
1887         DD      0d14f4f9eh,0d14f4f9eh
1888         DD      07fdcdca3h,07fdcdca3h
1889         DD      066222244h,066222244h
1890         DD      07e2a2a54h,07e2a2a54h
1891         DD      0ab90903bh,0ab90903bh
1892         DD      08388880bh,08388880bh
1893         DD      0ca46468ch,0ca46468ch
1894         DD      029eeeec7h,029eeeec7h
1895         DD      0d3b8b86bh,0d3b8b86bh
1896         DD      03c141428h,03c141428h
1897         DD      079dedea7h,079dedea7h
1898         DD      0e25e5ebch,0e25e5ebch
1899         DD      01d0b0b16h,01d0b0b16h
1900         DD      076dbdbadh,076dbdbadh
1901         DD      03be0e0dbh,03be0e0dbh
1902         DD      056323264h,056323264h
1903         DD      04e3a3a74h,04e3a3a74h
1904         DD      01e0a0a14h,01e0a0a14h
1905         DD      0db494992h,0db494992h
1906         DD      00a06060ch,00a06060ch
1907         DD      06c242448h,06c242448h
1908         DD      0e45c5cb8h,0e45c5cb8h
1909         DD      05dc2c29fh,05dc2c29fh
1910         DD      06ed3d3bdh,06ed3d3bdh
1911         DD      0efacac43h,0efacac43h
1912         DD      0a66262c4h,0a66262c4h
1913         DD      0a8919139h,0a8919139h
1914         DD      0a4959531h,0a4959531h
1915         DD      037e4e4d3h,037e4e4d3h
1916         DD      08b7979f2h,08b7979f2h
1917         DD      032e7e7d5h,032e7e7d5h
1918         DD      043c8c88bh,043c8c88bh
1919         DD      05937376eh,05937376eh
1920         DD      0b76d6ddah,0b76d6ddah
1921         DD      08c8d8d01h,08c8d8d01h
1922         DD      064d5d5b1h,064d5d5b1h
1923         DD      0d24e4e9ch,0d24e4e9ch
1924         DD      0e0a9a949h,0e0a9a949h
1925         DD      0b46c6cd8h,0b46c6cd8h
1926         DD      0fa5656ach,0fa5656ach
1927         DD      007f4f4f3h,007f4f4f3h
1928         DD      025eaeacfh,025eaeacfh
1929         DD      0af6565cah,0af6565cah
1930         DD      08e7a7af4h,08e7a7af4h
1931         DD      0e9aeae47h,0e9aeae47h
1932         DD      018080810h,018080810h
1933         DD      0d5baba6fh,0d5baba6fh
1934         DD      0887878f0h,0887878f0h
1935         DD      06f25254ah,06f25254ah
1936         DD      0722e2e5ch,0722e2e5ch
1937         DD      0241c1c38h,0241c1c38h
1938         DD      0f1a6a657h,0f1a6a657h
1939         DD      0c7b4b473h,0c7b4b473h
1940         DD      051c6c697h,051c6c697h
1941         DD      023e8e8cbh,023e8e8cbh
1942         DD      07cdddda1h,07cdddda1h
1943         DD      09c7474e8h,09c7474e8h
1944         DD      0211f1f3eh,0211f1f3eh
1945         DD      0dd4b4b96h,0dd4b4b96h
1946         DD      0dcbdbd61h,0dcbdbd61h
1947         DD      0868b8b0dh,0868b8b0dh
1948         DD      0858a8a0fh,0858a8a0fh
1949         DD      0907070e0h,0907070e0h
1950         DD      0423e3e7ch,0423e3e7ch
1951         DD      0c4b5b571h,0c4b5b571h
1952         DD      0aa6666cch,0aa6666cch
1953         DD      0d8484890h,0d8484890h
1954         DD      005030306h,005030306h
1955         DD      001f6f6f7h,001f6f6f7h
1956         DD      0120e0e1ch,0120e0e1ch
1957         DD      0a36161c2h,0a36161c2h
1958         DD      05f35356ah,05f35356ah
1959         DD      0f95757aeh,0f95757aeh
1960         DD      0d0b9b969h,0d0b9b969h
1961         DD      091868617h,091868617h
1962         DD      058c1c199h,058c1c199h
1963         DD      0271d1d3ah,0271d1d3ah
1964         DD      0b99e9e27h,0b99e9e27h
1965         DD      038e1e1d9h,038e1e1d9h
1966         DD      013f8f8ebh,013f8f8ebh
1967         DD      0b398982bh,0b398982bh
1968         DD      033111122h,033111122h
1969         DD      0bb6969d2h,0bb6969d2h
1970         DD      070d9d9a9h,070d9d9a9h
1971         DD      0898e8e07h,0898e8e07h
1972         DD      0a7949433h,0a7949433h
1973         DD      0b69b9b2dh,0b69b9b2dh
1974         DD      0221e1e3ch,0221e1e3ch
1975         DD      092878715h,092878715h
1976         DD      020e9e9c9h,020e9e9c9h
1977         DD      049cece87h,049cece87h
1978         DD      0ff5555aah,0ff5555aah
1979         DD      078282850h,078282850h
1980         DD      07adfdfa5h,07adfdfa5h
1981         DD      08f8c8c03h,08f8c8c03h
1982         DD      0f8a1a159h,0f8a1a159h
1983         DD      080898909h,080898909h
1984         DD      0170d0d1ah,0170d0d1ah
1985         DD      0dabfbf65h,0dabfbf65h
1986         DD      031e6e6d7h,031e6e6d7h
1987         DD      0c6424284h,0c6424284h
1988         DD      0b86868d0h,0b86868d0h
1989         DD      0c3414182h,0c3414182h
1990         DD      0b0999929h,0b0999929h
1991         DD      0772d2d5ah,0772d2d5ah
1992         DD      0110f0f1eh,0110f0f1eh
1993         DD      0cbb0b07bh,0cbb0b07bh
1994         DD      0fc5454a8h,0fc5454a8h
1995         DD      0d6bbbb6dh,0d6bbbb6dh
1996         DD      03a16162ch,03a16162ch
1997 DB      063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
1998 DB      030h,001h,067h,02bh,0feh,0d7h,0abh,076h
1999 DB      0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
2000 DB      0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
2001 DB      0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
2002 DB      034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
2003 DB      004h,0c7h,023h,0c3h,018h,096h,005h,09ah
2004 DB      007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
2005 DB      009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
2006 DB      052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
2007 DB      053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
2008 DB      06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
2009 DB      0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
2010 DB      045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
2011 DB      051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
2012 DB      0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
2013 DB      0cdh,00ch,013h,0ech,05fh,097h,044h,017h
2014 DB      0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
2015 DB      060h,081h,04fh,0dch,022h,02ah,090h,088h
2016 DB      046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
2017 DB      0e0h,032h,03ah,00ah,049h,006h,024h,05ch
2018 DB      0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
2019 DB      0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
2020 DB      06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
2021 DB      0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
2022 DB      0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
2023 DB      070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
2024 DB      061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
2025 DB      0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
2026 DB      09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
2027 DB      08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
2028 DB      041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
2029 DB      063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
2030 DB      030h,001h,067h,02bh,0feh,0d7h,0abh,076h
2031 DB      0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
2032 DB      0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
2033 DB      0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
2034 DB      034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
2035 DB      004h,0c7h,023h,0c3h,018h,096h,005h,09ah
2036 DB      007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
2037 DB      009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
2038 DB      052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
2039 DB      053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
2040 DB      06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
2041 DB      0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
2042 DB      045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
2043 DB      051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
2044 DB      0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
2045 DB      0cdh,00ch,013h,0ech,05fh,097h,044h,017h
2046 DB      0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
2047 DB      060h,081h,04fh,0dch,022h,02ah,090h,088h
2048 DB      046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
2049 DB      0e0h,032h,03ah,00ah,049h,006h,024h,05ch
2050 DB      0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
2051 DB      0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
2052 DB      06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
2053 DB      0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
2054 DB      0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
2055 DB      070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
2056 DB      061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
2057 DB      0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
2058 DB      09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
2059 DB      08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
2060 DB      041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
2061 DB      063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
2062 DB      030h,001h,067h,02bh,0feh,0d7h,0abh,076h
2063 DB      0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
2064 DB      0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
2065 DB      0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
2066 DB      034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
2067 DB      004h,0c7h,023h,0c3h,018h,096h,005h,09ah
2068 DB      007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
2069 DB      009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
2070 DB      052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
2071 DB      053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
2072 DB      06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
2073 DB      0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
2074 DB      045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
2075 DB      051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
2076 DB      0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
2077 DB      0cdh,00ch,013h,0ech,05fh,097h,044h,017h
2078 DB      0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
2079 DB      060h,081h,04fh,0dch,022h,02ah,090h,088h
2080 DB      046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
2081 DB      0e0h,032h,03ah,00ah,049h,006h,024h,05ch
2082 DB      0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
2083 DB      0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
2084 DB      06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
2085 DB      0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
2086 DB      0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
2087 DB      070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
2088 DB      061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
2089 DB      0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
2090 DB      09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
2091 DB      08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
2092 DB      041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
2093 DB      063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
2094 DB      030h,001h,067h,02bh,0feh,0d7h,0abh,076h
2095 DB      0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
2096 DB      0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
2097 DB      0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
2098 DB      034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
2099 DB      004h,0c7h,023h,0c3h,018h,096h,005h,09ah
2100 DB      007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
2101 DB      009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
2102 DB      052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
2103 DB      053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
2104 DB      06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
2105 DB      0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
2106 DB      045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
2107 DB      051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
2108 DB      0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
2109 DB      0cdh,00ch,013h,0ech,05fh,097h,044h,017h
2110 DB      0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
2111 DB      060h,081h,04fh,0dch,022h,02ah,090h,088h
2112 DB      046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
2113 DB      0e0h,032h,03ah,00ah,049h,006h,024h,05ch
2114 DB      0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
2115 DB      0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
2116 DB      06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
2117 DB      0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
2118 DB      0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
2119 DB      070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
2120 DB      061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
2121 DB      0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
2122 DB      09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
2123 DB      08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
2124 DB      041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
2125         DD      000000001h,000000002h,000000004h,000000008h
2126         DD      000000010h,000000020h,000000040h,000000080h
2127         DD      00000001bh,000000036h,080808080h,080808080h
2128         DD      0fefefefeh,0fefefefeh,01b1b1b1bh,01b1b1b1bh
2129 ALIGN   64
2130 $L$AES_Td::
2131         DD      050a7f451h,050a7f451h
2132         DD      05365417eh,05365417eh
2133         DD      0c3a4171ah,0c3a4171ah
2134         DD      0965e273ah,0965e273ah
2135         DD      0cb6bab3bh,0cb6bab3bh
2136         DD      0f1459d1fh,0f1459d1fh
2137         DD      0ab58faach,0ab58faach
2138         DD      09303e34bh,09303e34bh
2139         DD      055fa3020h,055fa3020h
2140         DD      0f66d76adh,0f66d76adh
2141         DD      09176cc88h,09176cc88h
2142         DD      0254c02f5h,0254c02f5h
2143         DD      0fcd7e54fh,0fcd7e54fh
2144         DD      0d7cb2ac5h,0d7cb2ac5h
2145         DD      080443526h,080443526h
2146         DD      08fa362b5h,08fa362b5h
2147         DD      0495ab1deh,0495ab1deh
2148         DD      0671bba25h,0671bba25h
2149         DD      0980eea45h,0980eea45h
2150         DD      0e1c0fe5dh,0e1c0fe5dh
2151         DD      002752fc3h,002752fc3h
2152         DD      012f04c81h,012f04c81h
2153         DD      0a397468dh,0a397468dh
2154         DD      0c6f9d36bh,0c6f9d36bh
2155         DD      0e75f8f03h,0e75f8f03h
2156         DD      0959c9215h,0959c9215h
2157         DD      0eb7a6dbfh,0eb7a6dbfh
2158         DD      0da595295h,0da595295h
2159         DD      02d83bed4h,02d83bed4h
2160         DD      0d3217458h,0d3217458h
2161         DD      02969e049h,02969e049h
2162         DD      044c8c98eh,044c8c98eh
2163         DD      06a89c275h,06a89c275h
2164         DD      078798ef4h,078798ef4h
2165         DD      06b3e5899h,06b3e5899h
2166         DD      0dd71b927h,0dd71b927h
2167         DD      0b64fe1beh,0b64fe1beh
2168         DD      017ad88f0h,017ad88f0h
2169         DD      066ac20c9h,066ac20c9h
2170         DD      0b43ace7dh,0b43ace7dh
2171         DD      0184adf63h,0184adf63h
2172         DD      082311ae5h,082311ae5h
2173         DD      060335197h,060335197h
2174         DD      0457f5362h,0457f5362h
2175         DD      0e07764b1h,0e07764b1h
2176         DD      084ae6bbbh,084ae6bbbh
2177         DD      01ca081feh,01ca081feh
2178         DD      0942b08f9h,0942b08f9h
2179         DD      058684870h,058684870h
2180         DD      019fd458fh,019fd458fh
2181         DD      0876cde94h,0876cde94h
2182         DD      0b7f87b52h,0b7f87b52h
2183         DD      023d373abh,023d373abh
2184         DD      0e2024b72h,0e2024b72h
2185         DD      0578f1fe3h,0578f1fe3h
2186         DD      02aab5566h,02aab5566h
2187         DD      00728ebb2h,00728ebb2h
2188         DD      003c2b52fh,003c2b52fh
2189         DD      09a7bc586h,09a7bc586h
2190         DD      0a50837d3h,0a50837d3h
2191         DD      0f2872830h,0f2872830h
2192         DD      0b2a5bf23h,0b2a5bf23h
2193         DD      0ba6a0302h,0ba6a0302h
2194         DD      05c8216edh,05c8216edh
2195         DD      02b1ccf8ah,02b1ccf8ah
2196         DD      092b479a7h,092b479a7h
2197         DD      0f0f207f3h,0f0f207f3h
2198         DD      0a1e2694eh,0a1e2694eh
2199         DD      0cdf4da65h,0cdf4da65h
2200         DD      0d5be0506h,0d5be0506h
2201         DD      01f6234d1h,01f6234d1h
2202         DD      08afea6c4h,08afea6c4h
2203         DD      09d532e34h,09d532e34h
2204         DD      0a055f3a2h,0a055f3a2h
2205         DD      032e18a05h,032e18a05h
2206         DD      075ebf6a4h,075ebf6a4h
2207         DD      039ec830bh,039ec830bh
2208         DD      0aaef6040h,0aaef6040h
2209         DD      0069f715eh,0069f715eh
2210         DD      051106ebdh,051106ebdh
2211         DD      0f98a213eh,0f98a213eh
2212         DD      03d06dd96h,03d06dd96h
2213         DD      0ae053eddh,0ae053eddh
2214         DD      046bde64dh,046bde64dh
2215         DD      0b58d5491h,0b58d5491h
2216         DD      0055dc471h,0055dc471h
2217         DD      06fd40604h,06fd40604h
2218         DD      0ff155060h,0ff155060h
2219         DD      024fb9819h,024fb9819h
2220         DD      097e9bdd6h,097e9bdd6h
2221         DD      0cc434089h,0cc434089h
2222         DD      0779ed967h,0779ed967h
2223         DD      0bd42e8b0h,0bd42e8b0h
2224         DD      0888b8907h,0888b8907h
2225         DD      0385b19e7h,0385b19e7h
2226         DD      0dbeec879h,0dbeec879h
2227         DD      0470a7ca1h,0470a7ca1h
2228         DD      0e90f427ch,0e90f427ch
2229         DD      0c91e84f8h,0c91e84f8h
2230         DD      000000000h,000000000h
2231         DD      083868009h,083868009h
2232         DD      048ed2b32h,048ed2b32h
2233         DD      0ac70111eh,0ac70111eh
2234         DD      04e725a6ch,04e725a6ch
2235         DD      0fbff0efdh,0fbff0efdh
2236         DD      05638850fh,05638850fh
2237         DD      01ed5ae3dh,01ed5ae3dh
2238         DD      027392d36h,027392d36h
2239         DD      064d90f0ah,064d90f0ah
2240         DD      021a65c68h,021a65c68h
2241         DD      0d1545b9bh,0d1545b9bh
2242         DD      03a2e3624h,03a2e3624h
2243         DD      0b1670a0ch,0b1670a0ch
2244         DD      00fe75793h,00fe75793h
2245         DD      0d296eeb4h,0d296eeb4h
2246         DD      09e919b1bh,09e919b1bh
2247         DD      04fc5c080h,04fc5c080h
2248         DD      0a220dc61h,0a220dc61h
2249         DD      0694b775ah,0694b775ah
2250         DD      0161a121ch,0161a121ch
2251         DD      00aba93e2h,00aba93e2h
2252         DD      0e52aa0c0h,0e52aa0c0h
2253         DD      043e0223ch,043e0223ch
2254         DD      01d171b12h,01d171b12h
2255         DD      00b0d090eh,00b0d090eh
2256         DD      0adc78bf2h,0adc78bf2h
2257         DD      0b9a8b62dh,0b9a8b62dh
2258         DD      0c8a91e14h,0c8a91e14h
2259         DD      08519f157h,08519f157h
2260         DD      04c0775afh,04c0775afh
2261         DD      0bbdd99eeh,0bbdd99eeh
2262         DD      0fd607fa3h,0fd607fa3h
2263         DD      09f2601f7h,09f2601f7h
2264         DD      0bcf5725ch,0bcf5725ch
2265         DD      0c53b6644h,0c53b6644h
2266         DD      0347efb5bh,0347efb5bh
2267         DD      07629438bh,07629438bh
2268         DD      0dcc623cbh,0dcc623cbh
2269         DD      068fcedb6h,068fcedb6h
2270         DD      063f1e4b8h,063f1e4b8h
2271         DD      0cadc31d7h,0cadc31d7h
2272         DD      010856342h,010856342h
2273         DD      040229713h,040229713h
2274         DD      02011c684h,02011c684h
2275         DD      07d244a85h,07d244a85h
2276         DD      0f83dbbd2h,0f83dbbd2h
2277         DD      01132f9aeh,01132f9aeh
2278         DD      06da129c7h,06da129c7h
2279         DD      04b2f9e1dh,04b2f9e1dh
2280         DD      0f330b2dch,0f330b2dch
2281         DD      0ec52860dh,0ec52860dh
2282         DD      0d0e3c177h,0d0e3c177h
2283         DD      06c16b32bh,06c16b32bh
2284         DD      099b970a9h,099b970a9h
2285         DD      0fa489411h,0fa489411h
2286         DD      02264e947h,02264e947h
2287         DD      0c48cfca8h,0c48cfca8h
2288         DD      01a3ff0a0h,01a3ff0a0h
2289         DD      0d82c7d56h,0d82c7d56h
2290         DD      0ef903322h,0ef903322h
2291         DD      0c74e4987h,0c74e4987h
2292         DD      0c1d138d9h,0c1d138d9h
2293         DD      0fea2ca8ch,0fea2ca8ch
2294         DD      0360bd498h,0360bd498h
2295         DD      0cf81f5a6h,0cf81f5a6h
2296         DD      028de7aa5h,028de7aa5h
2297         DD      0268eb7dah,0268eb7dah
2298         DD      0a4bfad3fh,0a4bfad3fh
2299         DD      0e49d3a2ch,0e49d3a2ch
2300         DD      00d927850h,00d927850h
2301         DD      09bcc5f6ah,09bcc5f6ah
2302         DD      062467e54h,062467e54h
2303         DD      0c2138df6h,0c2138df6h
2304         DD      0e8b8d890h,0e8b8d890h
2305         DD      05ef7392eh,05ef7392eh
2306         DD      0f5afc382h,0f5afc382h
2307         DD      0be805d9fh,0be805d9fh
2308         DD      07c93d069h,07c93d069h
2309         DD      0a92dd56fh,0a92dd56fh
2310         DD      0b31225cfh,0b31225cfh
2311         DD      03b99acc8h,03b99acc8h
2312         DD      0a77d1810h,0a77d1810h
2313         DD      06e639ce8h,06e639ce8h
2314         DD      07bbb3bdbh,07bbb3bdbh
2315         DD      0097826cdh,0097826cdh
2316         DD      0f418596eh,0f418596eh
2317         DD      001b79aech,001b79aech
2318         DD      0a89a4f83h,0a89a4f83h
2319         DD      0656e95e6h,0656e95e6h
2320         DD      07ee6ffaah,07ee6ffaah
2321         DD      008cfbc21h,008cfbc21h
2322         DD      0e6e815efh,0e6e815efh
2323         DD      0d99be7bah,0d99be7bah
2324         DD      0ce366f4ah,0ce366f4ah
2325         DD      0d4099feah,0d4099feah
2326         DD      0d67cb029h,0d67cb029h
2327         DD      0afb2a431h,0afb2a431h
2328         DD      031233f2ah,031233f2ah
2329         DD      03094a5c6h,03094a5c6h
2330         DD      0c066a235h,0c066a235h
2331         DD      037bc4e74h,037bc4e74h
2332         DD      0a6ca82fch,0a6ca82fch
2333         DD      0b0d090e0h,0b0d090e0h
2334         DD      015d8a733h,015d8a733h
2335         DD      04a9804f1h,04a9804f1h
2336         DD      0f7daec41h,0f7daec41h
2337         DD      00e50cd7fh,00e50cd7fh
2338         DD      02ff69117h,02ff69117h
2339         DD      08dd64d76h,08dd64d76h
2340         DD      04db0ef43h,04db0ef43h
2341         DD      0544daacch,0544daacch
2342         DD      0df0496e4h,0df0496e4h
2343         DD      0e3b5d19eh,0e3b5d19eh
2344         DD      01b886a4ch,01b886a4ch
2345         DD      0b81f2cc1h,0b81f2cc1h
2346         DD      07f516546h,07f516546h
2347         DD      004ea5e9dh,004ea5e9dh
2348         DD      05d358c01h,05d358c01h
2349         DD      0737487fah,0737487fah
2350         DD      02e410bfbh,02e410bfbh
2351         DD      05a1d67b3h,05a1d67b3h
2352         DD      052d2db92h,052d2db92h
2353         DD      0335610e9h,0335610e9h
2354         DD      01347d66dh,01347d66dh
2355         DD      08c61d79ah,08c61d79ah
2356         DD      07a0ca137h,07a0ca137h
2357         DD      08e14f859h,08e14f859h
2358         DD      0893c13ebh,0893c13ebh
2359         DD      0ee27a9ceh,0ee27a9ceh
2360         DD      035c961b7h,035c961b7h
2361         DD      0ede51ce1h,0ede51ce1h
2362         DD      03cb1477ah,03cb1477ah
2363         DD      059dfd29ch,059dfd29ch
2364         DD      03f73f255h,03f73f255h
2365         DD      079ce1418h,079ce1418h
2366         DD      0bf37c773h,0bf37c773h
2367         DD      0eacdf753h,0eacdf753h
2368         DD      05baafd5fh,05baafd5fh
2369         DD      0146f3ddfh,0146f3ddfh
2370         DD      086db4478h,086db4478h
2371         DD      081f3afcah,081f3afcah
2372         DD      03ec468b9h,03ec468b9h
2373         DD      02c342438h,02c342438h
2374         DD      05f40a3c2h,05f40a3c2h
2375         DD      072c31d16h,072c31d16h
2376         DD      00c25e2bch,00c25e2bch
2377         DD      08b493c28h,08b493c28h
2378         DD      041950dffh,041950dffh
2379         DD      07101a839h,07101a839h
2380         DD      0deb30c08h,0deb30c08h
2381         DD      09ce4b4d8h,09ce4b4d8h
2382         DD      090c15664h,090c15664h
2383         DD      06184cb7bh,06184cb7bh
2384         DD      070b632d5h,070b632d5h
2385         DD      0745c6c48h,0745c6c48h
2386         DD      04257b8d0h,04257b8d0h
2387 DB      052h,009h,06ah,0d5h,030h,036h,0a5h,038h
2388 DB      0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
2389 DB      07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
2390 DB      034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
2391 DB      054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
2392 DB      0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
2393 DB      008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
2394 DB      076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
2395 DB      072h,0f8h,0f6h,064h,086h,068h,098h,016h
2396 DB      0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
2397 DB      06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
2398 DB      05eh,015h,046h,057h,0a7h,08dh,09dh,084h
2399 DB      090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
2400 DB      0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
2401 DB      0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
2402 DB      0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
2403 DB      03ah,091h,011h,041h,04fh,067h,0dch,0eah
2404 DB      097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
2405 DB      096h,0ach,074h,022h,0e7h,0adh,035h,085h
2406 DB      0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
2407 DB      047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
2408 DB      06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
2409 DB      0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
2410 DB      09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
2411 DB      01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
2412 DB      0b1h,012h,010h,059h,027h,080h,0ech,05fh
2413 DB      060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
2414 DB      02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
2415 DB      0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
2416 DB      0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
2417 DB      017h,02bh,004h,07eh,0bah,077h,0d6h,026h
2418 DB      0e1h,069h,014h,063h,055h,021h,00ch,07dh
2419         DD      080808080h,080808080h,0fefefefeh,0fefefefeh
2420         DD      01b1b1b1bh,01b1b1b1bh,0,0
2421 DB      052h,009h,06ah,0d5h,030h,036h,0a5h,038h
2422 DB      0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
2423 DB      07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
2424 DB      034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
2425 DB      054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
2426 DB      0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
2427 DB      008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
2428 DB      076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
2429 DB      072h,0f8h,0f6h,064h,086h,068h,098h,016h
2430 DB      0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
2431 DB      06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
2432 DB      05eh,015h,046h,057h,0a7h,08dh,09dh,084h
2433 DB      090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
2434 DB      0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
2435 DB      0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
2436 DB      0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
2437 DB      03ah,091h,011h,041h,04fh,067h,0dch,0eah
2438 DB      097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
2439 DB      096h,0ach,074h,022h,0e7h,0adh,035h,085h
2440 DB      0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
2441 DB      047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
2442 DB      06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
2443 DB      0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
2444 DB      09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
2445 DB      01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
2446 DB      0b1h,012h,010h,059h,027h,080h,0ech,05fh
2447 DB      060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
2448 DB      02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
2449 DB      0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
2450 DB      0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
2451 DB      017h,02bh,004h,07eh,0bah,077h,0d6h,026h
2452 DB      0e1h,069h,014h,063h,055h,021h,00ch,07dh
2453         DD      080808080h,080808080h,0fefefefeh,0fefefefeh
2454         DD      01b1b1b1bh,01b1b1b1bh,0,0
2455 DB      052h,009h,06ah,0d5h,030h,036h,0a5h,038h
2456 DB      0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
2457 DB      07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
2458 DB      034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
2459 DB      054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
2460 DB      0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
2461 DB      008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
2462 DB      076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
2463 DB      072h,0f8h,0f6h,064h,086h,068h,098h,016h
2464 DB      0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
2465 DB      06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
2466 DB      05eh,015h,046h,057h,0a7h,08dh,09dh,084h
2467 DB      090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
2468 DB      0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
2469 DB      0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
2470 DB      0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
2471 DB      03ah,091h,011h,041h,04fh,067h,0dch,0eah
2472 DB      097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
2473 DB      096h,0ach,074h,022h,0e7h,0adh,035h,085h
2474 DB      0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
2475 DB      047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
2476 DB      06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
2477 DB      0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
2478 DB      09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
2479 DB      01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
2480 DB      0b1h,012h,010h,059h,027h,080h,0ech,05fh
2481 DB      060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
2482 DB      02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
2483 DB      0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
2484 DB      0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
2485 DB      017h,02bh,004h,07eh,0bah,077h,0d6h,026h
2486 DB      0e1h,069h,014h,063h,055h,021h,00ch,07dh
2487         DD      080808080h,080808080h,0fefefefeh,0fefefefeh
2488         DD      01b1b1b1bh,01b1b1b1bh,0,0
2489 DB      052h,009h,06ah,0d5h,030h,036h,0a5h,038h
2490 DB      0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
2491 DB      07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
2492 DB      034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
2493 DB      054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
2494 DB      0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
2495 DB      008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
2496 DB      076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
2497 DB      072h,0f8h,0f6h,064h,086h,068h,098h,016h
2498 DB      0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
2499 DB      06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
2500 DB      05eh,015h,046h,057h,0a7h,08dh,09dh,084h
2501 DB      090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
2502 DB      0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
2503 DB      0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
2504 DB      0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
2505 DB      03ah,091h,011h,041h,04fh,067h,0dch,0eah
2506 DB      097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
2507 DB      096h,0ach,074h,022h,0e7h,0adh,035h,085h
2508 DB      0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
2509 DB      047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
2510 DB      06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
2511 DB      0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
2512 DB      09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
2513 DB      01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
2514 DB      0b1h,012h,010h,059h,027h,080h,0ech,05fh
2515 DB      060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
2516 DB      02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
2517 DB      0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
2518 DB      0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
2519 DB      017h,02bh,004h,07eh,0bah,077h,0d6h,026h
2520 DB      0e1h,069h,014h,063h,055h,021h,00ch,07dh
2521         DD      080808080h,080808080h,0fefefefeh,0fefefefeh
2522         DD      01b1b1b1bh,01b1b1b1bh,0,0
2523 DB      65,69,83,32,102,111,114,32,120,56,54,95,54,52,44,32
2524 DB      67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
2525 DB      112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
2526 DB      62,0
2527 ALIGN   64
2528 EXTERN  __imp_RtlVirtualUnwind:NEAR
2529
2530 ALIGN   16
2531 block_se_handler        PROC PRIVATE
2532         push    rsi
2533         push    rdi
2534         push    rbx
2535         push    rbp
2536         push    r12
2537         push    r13
2538         push    r14
2539         push    r15
2540         pushfq
2541         sub     rsp,64
2542
2543         mov     rax,QWORD PTR[120+r8]
2544         mov     rbx,QWORD PTR[248+r8]
2545
2546         mov     rsi,QWORD PTR[8+r9]
2547         mov     r11,QWORD PTR[56+r9]
2548
2549         mov     r10d,DWORD PTR[r11]
2550         lea     r10,QWORD PTR[r10*1+rsi]
2551         cmp     rbx,r10
2552         jb      $L$in_block_prologue
2553
2554         mov     rax,QWORD PTR[152+r8]
2555
2556         mov     r10d,DWORD PTR[4+r11]
2557         lea     r10,QWORD PTR[r10*1+rsi]
2558         cmp     rbx,r10
2559         jae     $L$in_block_prologue
2560
2561         mov     rax,QWORD PTR[24+rax]
2562         lea     rax,QWORD PTR[48+rax]
2563
2564         mov     rbx,QWORD PTR[((-8))+rax]
2565         mov     rbp,QWORD PTR[((-16))+rax]
2566         mov     r12,QWORD PTR[((-24))+rax]
2567         mov     r13,QWORD PTR[((-32))+rax]
2568         mov     r14,QWORD PTR[((-40))+rax]
2569         mov     r15,QWORD PTR[((-48))+rax]
2570         mov     QWORD PTR[144+r8],rbx
2571         mov     QWORD PTR[160+r8],rbp
2572         mov     QWORD PTR[216+r8],r12
2573         mov     QWORD PTR[224+r8],r13
2574         mov     QWORD PTR[232+r8],r14
2575         mov     QWORD PTR[240+r8],r15
2576
2577 $L$in_block_prologue::
2578         mov     rdi,QWORD PTR[8+rax]
2579         mov     rsi,QWORD PTR[16+rax]
2580         mov     QWORD PTR[152+r8],rax
2581         mov     QWORD PTR[168+r8],rsi
2582         mov     QWORD PTR[176+r8],rdi
2583
2584         jmp     $L$common_seh_exit
2585 block_se_handler        ENDP
2586
2587
2588 ALIGN   16
2589 key_se_handler  PROC PRIVATE
2590         push    rsi
2591         push    rdi
2592         push    rbx
2593         push    rbp
2594         push    r12
2595         push    r13
2596         push    r14
2597         push    r15
2598         pushfq
2599         sub     rsp,64
2600
2601         mov     rax,QWORD PTR[120+r8]
2602         mov     rbx,QWORD PTR[248+r8]
2603
2604         mov     rsi,QWORD PTR[8+r9]
2605         mov     r11,QWORD PTR[56+r9]
2606
2607         mov     r10d,DWORD PTR[r11]
2608         lea     r10,QWORD PTR[r10*1+rsi]
2609         cmp     rbx,r10
2610         jb      $L$in_key_prologue
2611
2612         mov     rax,QWORD PTR[152+r8]
2613
2614         mov     r10d,DWORD PTR[4+r11]
2615         lea     r10,QWORD PTR[r10*1+rsi]
2616         cmp     rbx,r10
2617         jae     $L$in_key_prologue
2618
2619         lea     rax,QWORD PTR[56+rax]
2620
2621         mov     rbx,QWORD PTR[((-8))+rax]
2622         mov     rbp,QWORD PTR[((-16))+rax]
2623         mov     r12,QWORD PTR[((-24))+rax]
2624         mov     r13,QWORD PTR[((-32))+rax]
2625         mov     r14,QWORD PTR[((-40))+rax]
2626         mov     r15,QWORD PTR[((-48))+rax]
2627         mov     QWORD PTR[144+r8],rbx
2628         mov     QWORD PTR[160+r8],rbp
2629         mov     QWORD PTR[216+r8],r12
2630         mov     QWORD PTR[224+r8],r13
2631         mov     QWORD PTR[232+r8],r14
2632         mov     QWORD PTR[240+r8],r15
2633
2634 $L$in_key_prologue::
2635         mov     rdi,QWORD PTR[8+rax]
2636         mov     rsi,QWORD PTR[16+rax]
2637         mov     QWORD PTR[152+r8],rax
2638         mov     QWORD PTR[168+r8],rsi
2639         mov     QWORD PTR[176+r8],rdi
2640
2641         jmp     $L$common_seh_exit
2642 key_se_handler  ENDP
2643
2644
2645 ALIGN   16
2646 cbc_se_handler  PROC PRIVATE
2647         push    rsi
2648         push    rdi
2649         push    rbx
2650         push    rbp
2651         push    r12
2652         push    r13
2653         push    r14
2654         push    r15
2655         pushfq
2656         sub     rsp,64
2657
2658         mov     rax,QWORD PTR[120+r8]
2659         mov     rbx,QWORD PTR[248+r8]
2660
2661         lea     r10,QWORD PTR[$L$cbc_prologue]
2662         cmp     rbx,r10
2663         jb      $L$in_cbc_prologue
2664
2665         lea     r10,QWORD PTR[$L$cbc_fast_body]
2666         cmp     rbx,r10
2667         jb      $L$in_cbc_frame_setup
2668
2669         lea     r10,QWORD PTR[$L$cbc_slow_prologue]
2670         cmp     rbx,r10
2671         jb      $L$in_cbc_body
2672
2673         lea     r10,QWORD PTR[$L$cbc_slow_body]
2674         cmp     rbx,r10
2675         jb      $L$in_cbc_frame_setup
2676
2677 $L$in_cbc_body::
2678         mov     rax,QWORD PTR[152+r8]
2679
2680         lea     r10,QWORD PTR[$L$cbc_epilogue]
2681         cmp     rbx,r10
2682         jae     $L$in_cbc_prologue
2683
2684         lea     rax,QWORD PTR[8+rax]
2685
2686         lea     r10,QWORD PTR[$L$cbc_popfq]
2687         cmp     rbx,r10
2688         jae     $L$in_cbc_prologue
2689
2690         mov     rax,QWORD PTR[8+rax]
2691         lea     rax,QWORD PTR[56+rax]
2692
2693 $L$in_cbc_frame_setup::
2694         mov     rbx,QWORD PTR[((-16))+rax]
2695         mov     rbp,QWORD PTR[((-24))+rax]
2696         mov     r12,QWORD PTR[((-32))+rax]
2697         mov     r13,QWORD PTR[((-40))+rax]
2698         mov     r14,QWORD PTR[((-48))+rax]
2699         mov     r15,QWORD PTR[((-56))+rax]
2700         mov     QWORD PTR[144+r8],rbx
2701         mov     QWORD PTR[160+r8],rbp
2702         mov     QWORD PTR[216+r8],r12
2703         mov     QWORD PTR[224+r8],r13
2704         mov     QWORD PTR[232+r8],r14
2705         mov     QWORD PTR[240+r8],r15
2706
2707 $L$in_cbc_prologue::
2708         mov     rdi,QWORD PTR[8+rax]
2709         mov     rsi,QWORD PTR[16+rax]
2710         mov     QWORD PTR[152+r8],rax
2711         mov     QWORD PTR[168+r8],rsi
2712         mov     QWORD PTR[176+r8],rdi
2713
2714 $L$common_seh_exit::
2715
2716         mov     rdi,QWORD PTR[40+r9]
2717         mov     rsi,r8
2718         mov     ecx,154
2719         DD      0a548f3fch
2720
2721         mov     rsi,r9
2722         xor     rcx,rcx
2723         mov     rdx,QWORD PTR[8+rsi]
2724         mov     r8,QWORD PTR[rsi]
2725         mov     r9,QWORD PTR[16+rsi]
2726         mov     r10,QWORD PTR[40+rsi]
2727         lea     r11,QWORD PTR[56+rsi]
2728         lea     r12,QWORD PTR[24+rsi]
2729         mov     QWORD PTR[32+rsp],r10
2730         mov     QWORD PTR[40+rsp],r11
2731         mov     QWORD PTR[48+rsp],r12
2732         mov     QWORD PTR[56+rsp],rcx
2733         call    QWORD PTR[__imp_RtlVirtualUnwind]
2734
2735         mov     eax,1
2736         add     rsp,64
2737         popfq
2738         pop     r15
2739         pop     r14
2740         pop     r13
2741         pop     r12
2742         pop     rbp
2743         pop     rbx
2744         pop     rdi
2745         pop     rsi
2746         DB      0F3h,0C3h               ;repret
2747 cbc_se_handler  ENDP
2748
2749 .text$  ENDS
2750 .pdata  SEGMENT READONLY ALIGN(4)
2751 ALIGN   4
2752         DD      imagerel $L$SEH_begin_AES_encrypt
2753         DD      imagerel $L$SEH_end_AES_encrypt
2754         DD      imagerel $L$SEH_info_AES_encrypt
2755
2756         DD      imagerel $L$SEH_begin_AES_decrypt
2757         DD      imagerel $L$SEH_end_AES_decrypt
2758         DD      imagerel $L$SEH_info_AES_decrypt
2759
2760         DD      imagerel $L$SEH_begin_AES_set_encrypt_key
2761         DD      imagerel $L$SEH_end_AES_set_encrypt_key
2762         DD      imagerel $L$SEH_info_AES_set_encrypt_key
2763
2764         DD      imagerel $L$SEH_begin_AES_set_decrypt_key
2765         DD      imagerel $L$SEH_end_AES_set_decrypt_key
2766         DD      imagerel $L$SEH_info_AES_set_decrypt_key
2767
2768         DD      imagerel $L$SEH_begin_AES_cbc_encrypt
2769         DD      imagerel $L$SEH_end_AES_cbc_encrypt
2770         DD      imagerel $L$SEH_info_AES_cbc_encrypt
2771
2772 .pdata  ENDS
2773 .xdata  SEGMENT READONLY ALIGN(8)
2774 ALIGN   8
2775 $L$SEH_info_AES_encrypt::
2776 DB      9,0,0,0
2777         DD      imagerel block_se_handler
2778         DD      imagerel $L$enc_prologue,imagerel $L$enc_epilogue
2779 $L$SEH_info_AES_decrypt::
2780 DB      9,0,0,0
2781         DD      imagerel block_se_handler
2782         DD      imagerel $L$dec_prologue,imagerel $L$dec_epilogue
2783 $L$SEH_info_AES_set_encrypt_key::
2784 DB      9,0,0,0
2785         DD      imagerel key_se_handler
2786         DD      imagerel $L$enc_key_prologue,imagerel $L$enc_key_epilogue
2787 $L$SEH_info_AES_set_decrypt_key::
2788 DB      9,0,0,0
2789         DD      imagerel key_se_handler
2790         DD      imagerel $L$dec_key_prologue,imagerel $L$dec_key_epilogue
2791 $L$SEH_info_AES_cbc_encrypt::
2792 DB      9,0,0,0
2793         DD      imagerel cbc_se_handler
2794
2795 .xdata  ENDS
2796 END