Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / boringssl / win-x86_64 / crypto / aes / aes-x86_64.asm
1 default rel
2 %define XMMWORD
3 %define YMMWORD
4 %define ZMMWORD
5 section .text code align=64
6
7
8 ALIGN   16
9 _x86_64_AES_encrypt:
10         xor     eax,DWORD[r15]
11         xor     ebx,DWORD[4+r15]
12         xor     ecx,DWORD[8+r15]
13         xor     edx,DWORD[12+r15]
14
15         mov     r13d,DWORD[240+r15]
16         sub     r13d,1
17         jmp     NEAR $L$enc_loop
18 ALIGN   16
19 $L$enc_loop:
20
21         movzx   esi,al
22         movzx   edi,bl
23         movzx   ebp,cl
24         mov     r10d,DWORD[rsi*8+r14]
25         mov     r11d,DWORD[rdi*8+r14]
26         mov     r12d,DWORD[rbp*8+r14]
27
28         movzx   esi,bh
29         movzx   edi,ch
30         movzx   ebp,dl
31         xor     r10d,DWORD[3+rsi*8+r14]
32         xor     r11d,DWORD[3+rdi*8+r14]
33         mov     r8d,DWORD[rbp*8+r14]
34
35         movzx   esi,dh
36         shr     ecx,16
37         movzx   ebp,ah
38         xor     r12d,DWORD[3+rsi*8+r14]
39         shr     edx,16
40         xor     r8d,DWORD[3+rbp*8+r14]
41
42         shr     ebx,16
43         lea     r15,[16+r15]
44         shr     eax,16
45
46         movzx   esi,cl
47         movzx   edi,dl
48         movzx   ebp,al
49         xor     r10d,DWORD[2+rsi*8+r14]
50         xor     r11d,DWORD[2+rdi*8+r14]
51         xor     r12d,DWORD[2+rbp*8+r14]
52
53         movzx   esi,dh
54         movzx   edi,ah
55         movzx   ebp,bl
56         xor     r10d,DWORD[1+rsi*8+r14]
57         xor     r11d,DWORD[1+rdi*8+r14]
58         xor     r8d,DWORD[2+rbp*8+r14]
59
60         mov     edx,DWORD[12+r15]
61         movzx   edi,bh
62         movzx   ebp,ch
63         mov     eax,DWORD[r15]
64         xor     r12d,DWORD[1+rdi*8+r14]
65         xor     r8d,DWORD[1+rbp*8+r14]
66
67         mov     ebx,DWORD[4+r15]
68         mov     ecx,DWORD[8+r15]
69         xor     eax,r10d
70         xor     ebx,r11d
71         xor     ecx,r12d
72         xor     edx,r8d
73         sub     r13d,1
74         jnz     NEAR $L$enc_loop
75         movzx   esi,al
76         movzx   edi,bl
77         movzx   ebp,cl
78         movzx   r10d,BYTE[2+rsi*8+r14]
79         movzx   r11d,BYTE[2+rdi*8+r14]
80         movzx   r12d,BYTE[2+rbp*8+r14]
81
82         movzx   esi,dl
83         movzx   edi,bh
84         movzx   ebp,ch
85         movzx   r8d,BYTE[2+rsi*8+r14]
86         mov     edi,DWORD[rdi*8+r14]
87         mov     ebp,DWORD[rbp*8+r14]
88
89         and     edi,0x0000ff00
90         and     ebp,0x0000ff00
91
92         xor     r10d,edi
93         xor     r11d,ebp
94         shr     ecx,16
95
96         movzx   esi,dh
97         movzx   edi,ah
98         shr     edx,16
99         mov     esi,DWORD[rsi*8+r14]
100         mov     edi,DWORD[rdi*8+r14]
101
102         and     esi,0x0000ff00
103         and     edi,0x0000ff00
104         shr     ebx,16
105         xor     r12d,esi
106         xor     r8d,edi
107         shr     eax,16
108
109         movzx   esi,cl
110         movzx   edi,dl
111         movzx   ebp,al
112         mov     esi,DWORD[rsi*8+r14]
113         mov     edi,DWORD[rdi*8+r14]
114         mov     ebp,DWORD[rbp*8+r14]
115
116         and     esi,0x00ff0000
117         and     edi,0x00ff0000
118         and     ebp,0x00ff0000
119
120         xor     r10d,esi
121         xor     r11d,edi
122         xor     r12d,ebp
123
124         movzx   esi,bl
125         movzx   edi,dh
126         movzx   ebp,ah
127         mov     esi,DWORD[rsi*8+r14]
128         mov     edi,DWORD[2+rdi*8+r14]
129         mov     ebp,DWORD[2+rbp*8+r14]
130
131         and     esi,0x00ff0000
132         and     edi,0xff000000
133         and     ebp,0xff000000
134
135         xor     r8d,esi
136         xor     r10d,edi
137         xor     r11d,ebp
138
139         movzx   esi,bh
140         movzx   edi,ch
141         mov     edx,DWORD[((16+12))+r15]
142         mov     esi,DWORD[2+rsi*8+r14]
143         mov     edi,DWORD[2+rdi*8+r14]
144         mov     eax,DWORD[((16+0))+r15]
145
146         and     esi,0xff000000
147         and     edi,0xff000000
148
149         xor     r12d,esi
150         xor     r8d,edi
151
152         mov     ebx,DWORD[((16+4))+r15]
153         mov     ecx,DWORD[((16+8))+r15]
154         xor     eax,r10d
155         xor     ebx,r11d
156         xor     ecx,r12d
157         xor     edx,r8d
158 DB      0xf3,0xc3
159
160
161 ALIGN   16
162 _x86_64_AES_encrypt_compact:
163         lea     r8,[128+r14]
164         mov     edi,DWORD[((0-128))+r8]
165         mov     ebp,DWORD[((32-128))+r8]
166         mov     r10d,DWORD[((64-128))+r8]
167         mov     r11d,DWORD[((96-128))+r8]
168         mov     edi,DWORD[((128-128))+r8]
169         mov     ebp,DWORD[((160-128))+r8]
170         mov     r10d,DWORD[((192-128))+r8]
171         mov     r11d,DWORD[((224-128))+r8]
172         jmp     NEAR $L$enc_loop_compact
173 ALIGN   16
174 $L$enc_loop_compact:
175         xor     eax,DWORD[r15]
176         xor     ebx,DWORD[4+r15]
177         xor     ecx,DWORD[8+r15]
178         xor     edx,DWORD[12+r15]
179         lea     r15,[16+r15]
180         movzx   r10d,al
181         movzx   r11d,bl
182         movzx   r12d,cl
183         movzx   r8d,dl
184         movzx   esi,bh
185         movzx   edi,ch
186         shr     ecx,16
187         movzx   ebp,dh
188         movzx   r10d,BYTE[r10*1+r14]
189         movzx   r11d,BYTE[r11*1+r14]
190         movzx   r12d,BYTE[r12*1+r14]
191         movzx   r8d,BYTE[r8*1+r14]
192
193         movzx   r9d,BYTE[rsi*1+r14]
194         movzx   esi,ah
195         movzx   r13d,BYTE[rdi*1+r14]
196         movzx   edi,cl
197         movzx   ebp,BYTE[rbp*1+r14]
198         movzx   esi,BYTE[rsi*1+r14]
199
200         shl     r9d,8
201         shr     edx,16
202         shl     r13d,8
203         xor     r10d,r9d
204         shr     eax,16
205         movzx   r9d,dl
206         shr     ebx,16
207         xor     r11d,r13d
208         shl     ebp,8
209         movzx   r13d,al
210         movzx   edi,BYTE[rdi*1+r14]
211         xor     r12d,ebp
212
213         shl     esi,8
214         movzx   ebp,bl
215         shl     edi,16
216         xor     r8d,esi
217         movzx   r9d,BYTE[r9*1+r14]
218         movzx   esi,dh
219         movzx   r13d,BYTE[r13*1+r14]
220         xor     r10d,edi
221
222         shr     ecx,8
223         movzx   edi,ah
224         shl     r9d,16
225         shr     ebx,8
226         shl     r13d,16
227         xor     r11d,r9d
228         movzx   ebp,BYTE[rbp*1+r14]
229         movzx   esi,BYTE[rsi*1+r14]
230         movzx   edi,BYTE[rdi*1+r14]
231         movzx   edx,BYTE[rcx*1+r14]
232         movzx   ecx,BYTE[rbx*1+r14]
233
234         shl     ebp,16
235         xor     r12d,r13d
236         shl     esi,24
237         xor     r8d,ebp
238         shl     edi,24
239         xor     r10d,esi
240         shl     edx,24
241         xor     r11d,edi
242         shl     ecx,24
243         mov     eax,r10d
244         mov     ebx,r11d
245         xor     ecx,r12d
246         xor     edx,r8d
247         cmp     r15,QWORD[16+rsp]
248         je      NEAR $L$enc_compact_done
249         mov     r10d,0x80808080
250         mov     r11d,0x80808080
251         and     r10d,eax
252         and     r11d,ebx
253         mov     esi,r10d
254         mov     edi,r11d
255         shr     r10d,7
256         lea     r8d,[rax*1+rax]
257         shr     r11d,7
258         lea     r9d,[rbx*1+rbx]
259         sub     esi,r10d
260         sub     edi,r11d
261         and     r8d,0xfefefefe
262         and     r9d,0xfefefefe
263         and     esi,0x1b1b1b1b
264         and     edi,0x1b1b1b1b
265         mov     r10d,eax
266         mov     r11d,ebx
267         xor     r8d,esi
268         xor     r9d,edi
269
270         xor     eax,r8d
271         xor     ebx,r9d
272         mov     r12d,0x80808080
273         rol     eax,24
274         mov     ebp,0x80808080
275         rol     ebx,24
276         and     r12d,ecx
277         and     ebp,edx
278         xor     eax,r8d
279         xor     ebx,r9d
280         mov     esi,r12d
281         ror     r10d,16
282         mov     edi,ebp
283         ror     r11d,16
284         lea     r8d,[rcx*1+rcx]
285         shr     r12d,7
286         xor     eax,r10d
287         shr     ebp,7
288         xor     ebx,r11d
289         ror     r10d,8
290         lea     r9d,[rdx*1+rdx]
291         ror     r11d,8
292         sub     esi,r12d
293         sub     edi,ebp
294         xor     eax,r10d
295         xor     ebx,r11d
296
297         and     r8d,0xfefefefe
298         and     r9d,0xfefefefe
299         and     esi,0x1b1b1b1b
300         and     edi,0x1b1b1b1b
301         mov     r12d,ecx
302         mov     ebp,edx
303         xor     r8d,esi
304         xor     r9d,edi
305
306         ror     r12d,16
307         xor     ecx,r8d
308         ror     ebp,16
309         xor     edx,r9d
310         rol     ecx,24
311         mov     esi,DWORD[r14]
312         rol     edx,24
313         xor     ecx,r8d
314         mov     edi,DWORD[64+r14]
315         xor     edx,r9d
316         mov     r8d,DWORD[128+r14]
317         xor     ecx,r12d
318         ror     r12d,8
319         xor     edx,ebp
320         ror     ebp,8
321         xor     ecx,r12d
322         mov     r9d,DWORD[192+r14]
323         xor     edx,ebp
324         jmp     NEAR $L$enc_loop_compact
325 ALIGN   16
326 $L$enc_compact_done:
327         xor     eax,DWORD[r15]
328         xor     ebx,DWORD[4+r15]
329         xor     ecx,DWORD[8+r15]
330         xor     edx,DWORD[12+r15]
331 DB      0xf3,0xc3
332
333 ALIGN   16
334 global  asm_AES_encrypt
335
336
337 asm_AES_encrypt:
338         mov     QWORD[8+rsp],rdi        ;WIN64 prologue
339         mov     QWORD[16+rsp],rsi
340         mov     rax,rsp
341 $L$SEH_begin_asm_AES_encrypt:
342         mov     rdi,rcx
343         mov     rsi,rdx
344         mov     rdx,r8
345
346
347         push    rbx
348         push    rbp
349         push    r12
350         push    r13
351         push    r14
352         push    r15
353
354
355         mov     r10,rsp
356         lea     rcx,[((-63))+rdx]
357         and     rsp,-64
358         sub     rcx,rsp
359         neg     rcx
360         and     rcx,0x3c0
361         sub     rsp,rcx
362         sub     rsp,32
363
364         mov     QWORD[16+rsp],rsi
365         mov     QWORD[24+rsp],r10
366 $L$enc_prologue:
367
368         mov     r15,rdx
369         mov     r13d,DWORD[240+r15]
370
371         mov     eax,DWORD[rdi]
372         mov     ebx,DWORD[4+rdi]
373         mov     ecx,DWORD[8+rdi]
374         mov     edx,DWORD[12+rdi]
375
376         shl     r13d,4
377         lea     rbp,[r13*1+r15]
378         mov     QWORD[rsp],r15
379         mov     QWORD[8+rsp],rbp
380
381
382         lea     r14,[(($L$AES_Te+2048))]
383         lea     rbp,[768+rsp]
384         sub     rbp,r14
385         and     rbp,0x300
386         lea     r14,[rbp*1+r14]
387
388         call    _x86_64_AES_encrypt_compact
389
390         mov     r9,QWORD[16+rsp]
391         mov     rsi,QWORD[24+rsp]
392         mov     DWORD[r9],eax
393         mov     DWORD[4+r9],ebx
394         mov     DWORD[8+r9],ecx
395         mov     DWORD[12+r9],edx
396
397         mov     r15,QWORD[rsi]
398         mov     r14,QWORD[8+rsi]
399         mov     r13,QWORD[16+rsi]
400         mov     r12,QWORD[24+rsi]
401         mov     rbp,QWORD[32+rsi]
402         mov     rbx,QWORD[40+rsi]
403         lea     rsp,[48+rsi]
404 $L$enc_epilogue:
405         mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
406         mov     rsi,QWORD[16+rsp]
407         DB      0F3h,0C3h               ;repret
408 $L$SEH_end_asm_AES_encrypt:
409
410 ALIGN   16
411 _x86_64_AES_decrypt:
412         xor     eax,DWORD[r15]
413         xor     ebx,DWORD[4+r15]
414         xor     ecx,DWORD[8+r15]
415         xor     edx,DWORD[12+r15]
416
417         mov     r13d,DWORD[240+r15]
418         sub     r13d,1
419         jmp     NEAR $L$dec_loop
420 ALIGN   16
421 $L$dec_loop:
422
423         movzx   esi,al
424         movzx   edi,bl
425         movzx   ebp,cl
426         mov     r10d,DWORD[rsi*8+r14]
427         mov     r11d,DWORD[rdi*8+r14]
428         mov     r12d,DWORD[rbp*8+r14]
429
430         movzx   esi,dh
431         movzx   edi,ah
432         movzx   ebp,dl
433         xor     r10d,DWORD[3+rsi*8+r14]
434         xor     r11d,DWORD[3+rdi*8+r14]
435         mov     r8d,DWORD[rbp*8+r14]
436
437         movzx   esi,bh
438         shr     eax,16
439         movzx   ebp,ch
440         xor     r12d,DWORD[3+rsi*8+r14]
441         shr     edx,16
442         xor     r8d,DWORD[3+rbp*8+r14]
443
444         shr     ebx,16
445         lea     r15,[16+r15]
446         shr     ecx,16
447
448         movzx   esi,cl
449         movzx   edi,dl
450         movzx   ebp,al
451         xor     r10d,DWORD[2+rsi*8+r14]
452         xor     r11d,DWORD[2+rdi*8+r14]
453         xor     r12d,DWORD[2+rbp*8+r14]
454
455         movzx   esi,bh
456         movzx   edi,ch
457         movzx   ebp,bl
458         xor     r10d,DWORD[1+rsi*8+r14]
459         xor     r11d,DWORD[1+rdi*8+r14]
460         xor     r8d,DWORD[2+rbp*8+r14]
461
462         movzx   esi,dh
463         mov     edx,DWORD[12+r15]
464         movzx   ebp,ah
465         xor     r12d,DWORD[1+rsi*8+r14]
466         mov     eax,DWORD[r15]
467         xor     r8d,DWORD[1+rbp*8+r14]
468
469         xor     eax,r10d
470         mov     ebx,DWORD[4+r15]
471         mov     ecx,DWORD[8+r15]
472         xor     ecx,r12d
473         xor     ebx,r11d
474         xor     edx,r8d
475         sub     r13d,1
476         jnz     NEAR $L$dec_loop
477         lea     r14,[2048+r14]
478         movzx   esi,al
479         movzx   edi,bl
480         movzx   ebp,cl
481         movzx   r10d,BYTE[rsi*1+r14]
482         movzx   r11d,BYTE[rdi*1+r14]
483         movzx   r12d,BYTE[rbp*1+r14]
484
485         movzx   esi,dl
486         movzx   edi,dh
487         movzx   ebp,ah
488         movzx   r8d,BYTE[rsi*1+r14]
489         movzx   edi,BYTE[rdi*1+r14]
490         movzx   ebp,BYTE[rbp*1+r14]
491
492         shl     edi,8
493         shl     ebp,8
494
495         xor     r10d,edi
496         xor     r11d,ebp
497         shr     edx,16
498
499         movzx   esi,bh
500         movzx   edi,ch
501         shr     eax,16
502         movzx   esi,BYTE[rsi*1+r14]
503         movzx   edi,BYTE[rdi*1+r14]
504
505         shl     esi,8
506         shl     edi,8
507         shr     ebx,16
508         xor     r12d,esi
509         xor     r8d,edi
510         shr     ecx,16
511
512         movzx   esi,cl
513         movzx   edi,dl
514         movzx   ebp,al
515         movzx   esi,BYTE[rsi*1+r14]
516         movzx   edi,BYTE[rdi*1+r14]
517         movzx   ebp,BYTE[rbp*1+r14]
518
519         shl     esi,16
520         shl     edi,16
521         shl     ebp,16
522
523         xor     r10d,esi
524         xor     r11d,edi
525         xor     r12d,ebp
526
527         movzx   esi,bl
528         movzx   edi,bh
529         movzx   ebp,ch
530         movzx   esi,BYTE[rsi*1+r14]
531         movzx   edi,BYTE[rdi*1+r14]
532         movzx   ebp,BYTE[rbp*1+r14]
533
534         shl     esi,16
535         shl     edi,24
536         shl     ebp,24
537
538         xor     r8d,esi
539         xor     r10d,edi
540         xor     r11d,ebp
541
542         movzx   esi,dh
543         movzx   edi,ah
544         mov     edx,DWORD[((16+12))+r15]
545         movzx   esi,BYTE[rsi*1+r14]
546         movzx   edi,BYTE[rdi*1+r14]
547         mov     eax,DWORD[((16+0))+r15]
548
549         shl     esi,24
550         shl     edi,24
551
552         xor     r12d,esi
553         xor     r8d,edi
554
555         mov     ebx,DWORD[((16+4))+r15]
556         mov     ecx,DWORD[((16+8))+r15]
557         lea     r14,[((-2048))+r14]
558         xor     eax,r10d
559         xor     ebx,r11d
560         xor     ecx,r12d
561         xor     edx,r8d
562 DB      0xf3,0xc3
563
564
565 ALIGN   16
566 _x86_64_AES_decrypt_compact:
567         lea     r8,[128+r14]
568         mov     edi,DWORD[((0-128))+r8]
569         mov     ebp,DWORD[((32-128))+r8]
570         mov     r10d,DWORD[((64-128))+r8]
571         mov     r11d,DWORD[((96-128))+r8]
572         mov     edi,DWORD[((128-128))+r8]
573         mov     ebp,DWORD[((160-128))+r8]
574         mov     r10d,DWORD[((192-128))+r8]
575         mov     r11d,DWORD[((224-128))+r8]
576         jmp     NEAR $L$dec_loop_compact
577
578 ALIGN   16
579 $L$dec_loop_compact:
580         xor     eax,DWORD[r15]
581         xor     ebx,DWORD[4+r15]
582         xor     ecx,DWORD[8+r15]
583         xor     edx,DWORD[12+r15]
584         lea     r15,[16+r15]
585         movzx   r10d,al
586         movzx   r11d,bl
587         movzx   r12d,cl
588         movzx   r8d,dl
589         movzx   esi,dh
590         movzx   edi,ah
591         shr     edx,16
592         movzx   ebp,bh
593         movzx   r10d,BYTE[r10*1+r14]
594         movzx   r11d,BYTE[r11*1+r14]
595         movzx   r12d,BYTE[r12*1+r14]
596         movzx   r8d,BYTE[r8*1+r14]
597
598         movzx   r9d,BYTE[rsi*1+r14]
599         movzx   esi,ch
600         movzx   r13d,BYTE[rdi*1+r14]
601         movzx   ebp,BYTE[rbp*1+r14]
602         movzx   esi,BYTE[rsi*1+r14]
603
604         shr     ecx,16
605         shl     r13d,8
606         shl     r9d,8
607         movzx   edi,cl
608         shr     eax,16
609         xor     r10d,r9d
610         shr     ebx,16
611         movzx   r9d,dl
612
613         shl     ebp,8
614         xor     r11d,r13d
615         shl     esi,8
616         movzx   r13d,al
617         movzx   edi,BYTE[rdi*1+r14]
618         xor     r12d,ebp
619         movzx   ebp,bl
620
621         shl     edi,16
622         xor     r8d,esi
623         movzx   r9d,BYTE[r9*1+r14]
624         movzx   esi,bh
625         movzx   ebp,BYTE[rbp*1+r14]
626         xor     r10d,edi
627         movzx   r13d,BYTE[r13*1+r14]
628         movzx   edi,ch
629
630         shl     ebp,16
631         shl     r9d,16
632         shl     r13d,16
633         xor     r8d,ebp
634         movzx   ebp,dh
635         xor     r11d,r9d
636         shr     eax,8
637         xor     r12d,r13d
638
639         movzx   esi,BYTE[rsi*1+r14]
640         movzx   ebx,BYTE[rdi*1+r14]
641         movzx   ecx,BYTE[rbp*1+r14]
642         movzx   edx,BYTE[rax*1+r14]
643
644         mov     eax,r10d
645         shl     esi,24
646         shl     ebx,24
647         shl     ecx,24
648         xor     eax,esi
649         shl     edx,24
650         xor     ebx,r11d
651         xor     ecx,r12d
652         xor     edx,r8d
653         cmp     r15,QWORD[16+rsp]
654         je      NEAR $L$dec_compact_done
655
656         mov     rsi,QWORD[((256+0))+r14]
657         shl     rbx,32
658         shl     rdx,32
659         mov     rdi,QWORD[((256+8))+r14]
660         or      rax,rbx
661         or      rcx,rdx
662         mov     rbp,QWORD[((256+16))+r14]
663         mov     r9,rsi
664         mov     r12,rsi
665         and     r9,rax
666         and     r12,rcx
667         mov     rbx,r9
668         mov     rdx,r12
669         shr     r9,7
670         lea     r8,[rax*1+rax]
671         shr     r12,7
672         lea     r11,[rcx*1+rcx]
673         sub     rbx,r9
674         sub     rdx,r12
675         and     r8,rdi
676         and     r11,rdi
677         and     rbx,rbp
678         and     rdx,rbp
679         xor     r8,rbx
680         xor     r11,rdx
681         mov     r10,rsi
682         mov     r13,rsi
683
684         and     r10,r8
685         and     r13,r11
686         mov     rbx,r10
687         mov     rdx,r13
688         shr     r10,7
689         lea     r9,[r8*1+r8]
690         shr     r13,7
691         lea     r12,[r11*1+r11]
692         sub     rbx,r10
693         sub     rdx,r13
694         and     r9,rdi
695         and     r12,rdi
696         and     rbx,rbp
697         and     rdx,rbp
698         xor     r9,rbx
699         xor     r12,rdx
700         mov     r10,rsi
701         mov     r13,rsi
702
703         and     r10,r9
704         and     r13,r12
705         mov     rbx,r10
706         mov     rdx,r13
707         shr     r10,7
708         xor     r8,rax
709         shr     r13,7
710         xor     r11,rcx
711         sub     rbx,r10
712         sub     rdx,r13
713         lea     r10,[r9*1+r9]
714         lea     r13,[r12*1+r12]
715         xor     r9,rax
716         xor     r12,rcx
717         and     r10,rdi
718         and     r13,rdi
719         and     rbx,rbp
720         and     rdx,rbp
721         xor     r10,rbx
722         xor     r13,rdx
723
724         xor     rax,r10
725         xor     rcx,r13
726         xor     r8,r10
727         xor     r11,r13
728         mov     rbx,rax
729         mov     rdx,rcx
730         xor     r9,r10
731         shr     rbx,32
732         xor     r12,r13
733         shr     rdx,32
734         xor     r10,r8
735         rol     eax,8
736         xor     r13,r11
737         rol     ecx,8
738         xor     r10,r9
739         rol     ebx,8
740         xor     r13,r12
741
742         rol     edx,8
743         xor     eax,r10d
744         shr     r10,32
745         xor     ecx,r13d
746         shr     r13,32
747         xor     ebx,r10d
748         xor     edx,r13d
749
750         mov     r10,r8
751         rol     r8d,24
752         mov     r13,r11
753         rol     r11d,24
754         shr     r10,32
755         xor     eax,r8d
756         shr     r13,32
757         xor     ecx,r11d
758         rol     r10d,24
759         mov     r8,r9
760         rol     r13d,24
761         mov     r11,r12
762         shr     r8,32
763         xor     ebx,r10d
764         shr     r11,32
765         xor     edx,r13d
766
767         mov     rsi,QWORD[r14]
768         rol     r9d,16
769         mov     rdi,QWORD[64+r14]
770         rol     r12d,16
771         mov     rbp,QWORD[128+r14]
772         rol     r8d,16
773         mov     r10,QWORD[192+r14]
774         xor     eax,r9d
775         rol     r11d,16
776         xor     ecx,r12d
777         mov     r13,QWORD[256+r14]
778         xor     ebx,r8d
779         xor     edx,r11d
780         jmp     NEAR $L$dec_loop_compact
781 ALIGN   16
782 $L$dec_compact_done:
783         xor     eax,DWORD[r15]
784         xor     ebx,DWORD[4+r15]
785         xor     ecx,DWORD[8+r15]
786         xor     edx,DWORD[12+r15]
787 DB      0xf3,0xc3
788
789 ALIGN   16
790 global  asm_AES_decrypt
791
792
793 asm_AES_decrypt:
794         mov     QWORD[8+rsp],rdi        ;WIN64 prologue
795         mov     QWORD[16+rsp],rsi
796         mov     rax,rsp
797 $L$SEH_begin_asm_AES_decrypt:
798         mov     rdi,rcx
799         mov     rsi,rdx
800         mov     rdx,r8
801
802
803         push    rbx
804         push    rbp
805         push    r12
806         push    r13
807         push    r14
808         push    r15
809
810
811         mov     r10,rsp
812         lea     rcx,[((-63))+rdx]
813         and     rsp,-64
814         sub     rcx,rsp
815         neg     rcx
816         and     rcx,0x3c0
817         sub     rsp,rcx
818         sub     rsp,32
819
820         mov     QWORD[16+rsp],rsi
821         mov     QWORD[24+rsp],r10
822 $L$dec_prologue:
823
824         mov     r15,rdx
825         mov     r13d,DWORD[240+r15]
826
827         mov     eax,DWORD[rdi]
828         mov     ebx,DWORD[4+rdi]
829         mov     ecx,DWORD[8+rdi]
830         mov     edx,DWORD[12+rdi]
831
832         shl     r13d,4
833         lea     rbp,[r13*1+r15]
834         mov     QWORD[rsp],r15
835         mov     QWORD[8+rsp],rbp
836
837
838         lea     r14,[(($L$AES_Td+2048))]
839         lea     rbp,[768+rsp]
840         sub     rbp,r14
841         and     rbp,0x300
842         lea     r14,[rbp*1+r14]
843         shr     rbp,3
844         add     r14,rbp
845
846         call    _x86_64_AES_decrypt_compact
847
848         mov     r9,QWORD[16+rsp]
849         mov     rsi,QWORD[24+rsp]
850         mov     DWORD[r9],eax
851         mov     DWORD[4+r9],ebx
852         mov     DWORD[8+r9],ecx
853         mov     DWORD[12+r9],edx
854
855         mov     r15,QWORD[rsi]
856         mov     r14,QWORD[8+rsi]
857         mov     r13,QWORD[16+rsi]
858         mov     r12,QWORD[24+rsi]
859         mov     rbp,QWORD[32+rsi]
860         mov     rbx,QWORD[40+rsi]
861         lea     rsp,[48+rsi]
862 $L$dec_epilogue:
863         mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
864         mov     rsi,QWORD[16+rsp]
865         DB      0F3h,0C3h               ;repret
866 $L$SEH_end_asm_AES_decrypt:
867 ALIGN   16
868 global  asm_AES_set_encrypt_key
869
870 asm_AES_set_encrypt_key:
871         mov     QWORD[8+rsp],rdi        ;WIN64 prologue
872         mov     QWORD[16+rsp],rsi
873         mov     rax,rsp
874 $L$SEH_begin_asm_AES_set_encrypt_key:
875         mov     rdi,rcx
876         mov     rsi,rdx
877         mov     rdx,r8
878
879
880         push    rbx
881         push    rbp
882         push    r12
883         push    r13
884         push    r14
885         push    r15
886         sub     rsp,8
887 $L$enc_key_prologue:
888
889         call    _x86_64_AES_set_encrypt_key
890
891         mov     rbp,QWORD[40+rsp]
892         mov     rbx,QWORD[48+rsp]
893         add     rsp,56
894 $L$enc_key_epilogue:
895         mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
896         mov     rsi,QWORD[16+rsp]
897         DB      0F3h,0C3h               ;repret
898 $L$SEH_end_asm_AES_set_encrypt_key:
899
900
901 ALIGN   16
902 _x86_64_AES_set_encrypt_key:
903         mov     ecx,esi
904         mov     rsi,rdi
905         mov     rdi,rdx
906
907         test    rsi,-1
908         jz      NEAR $L$badpointer
909         test    rdi,-1
910         jz      NEAR $L$badpointer
911
912         lea     rbp,[$L$AES_Te]
913         lea     rbp,[((2048+128))+rbp]
914
915
916         mov     eax,DWORD[((0-128))+rbp]
917         mov     ebx,DWORD[((32-128))+rbp]
918         mov     r8d,DWORD[((64-128))+rbp]
919         mov     edx,DWORD[((96-128))+rbp]
920         mov     eax,DWORD[((128-128))+rbp]
921         mov     ebx,DWORD[((160-128))+rbp]
922         mov     r8d,DWORD[((192-128))+rbp]
923         mov     edx,DWORD[((224-128))+rbp]
924
925         cmp     ecx,128
926         je      NEAR $L$10rounds
927         cmp     ecx,192
928         je      NEAR $L$12rounds
929         cmp     ecx,256
930         je      NEAR $L$14rounds
931         mov     rax,-2
932         jmp     NEAR $L$exit
933
934 $L$10rounds:
935         mov     rax,QWORD[rsi]
936         mov     rdx,QWORD[8+rsi]
937         mov     QWORD[rdi],rax
938         mov     QWORD[8+rdi],rdx
939
940         shr     rdx,32
941         xor     ecx,ecx
942         jmp     NEAR $L$10shortcut
943 ALIGN   4
944 $L$10loop:
945         mov     eax,DWORD[rdi]
946         mov     edx,DWORD[12+rdi]
947 $L$10shortcut:
948         movzx   esi,dl
949         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
950         movzx   esi,dh
951         shl     ebx,24
952         xor     eax,ebx
953
954         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
955         shr     edx,16
956         movzx   esi,dl
957         xor     eax,ebx
958
959         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
960         movzx   esi,dh
961         shl     ebx,8
962         xor     eax,ebx
963
964         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
965         shl     ebx,16
966         xor     eax,ebx
967
968         xor     eax,DWORD[((1024-128))+rcx*4+rbp]
969         mov     DWORD[16+rdi],eax
970         xor     eax,DWORD[4+rdi]
971         mov     DWORD[20+rdi],eax
972         xor     eax,DWORD[8+rdi]
973         mov     DWORD[24+rdi],eax
974         xor     eax,DWORD[12+rdi]
975         mov     DWORD[28+rdi],eax
976         add     ecx,1
977         lea     rdi,[16+rdi]
978         cmp     ecx,10
979         jl      NEAR $L$10loop
980
981         mov     DWORD[80+rdi],10
982         xor     rax,rax
983         jmp     NEAR $L$exit
984
985 $L$12rounds:
986         mov     rax,QWORD[rsi]
987         mov     rbx,QWORD[8+rsi]
988         mov     rdx,QWORD[16+rsi]
989         mov     QWORD[rdi],rax
990         mov     QWORD[8+rdi],rbx
991         mov     QWORD[16+rdi],rdx
992
993         shr     rdx,32
994         xor     ecx,ecx
995         jmp     NEAR $L$12shortcut
996 ALIGN   4
997 $L$12loop:
998         mov     eax,DWORD[rdi]
999         mov     edx,DWORD[20+rdi]
1000 $L$12shortcut:
1001         movzx   esi,dl
1002         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
1003         movzx   esi,dh
1004         shl     ebx,24
1005         xor     eax,ebx
1006
1007         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
1008         shr     edx,16
1009         movzx   esi,dl
1010         xor     eax,ebx
1011
1012         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
1013         movzx   esi,dh
1014         shl     ebx,8
1015         xor     eax,ebx
1016
1017         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
1018         shl     ebx,16
1019         xor     eax,ebx
1020
1021         xor     eax,DWORD[((1024-128))+rcx*4+rbp]
1022         mov     DWORD[24+rdi],eax
1023         xor     eax,DWORD[4+rdi]
1024         mov     DWORD[28+rdi],eax
1025         xor     eax,DWORD[8+rdi]
1026         mov     DWORD[32+rdi],eax
1027         xor     eax,DWORD[12+rdi]
1028         mov     DWORD[36+rdi],eax
1029
1030         cmp     ecx,7
1031         je      NEAR $L$12break
1032         add     ecx,1
1033
1034         xor     eax,DWORD[16+rdi]
1035         mov     DWORD[40+rdi],eax
1036         xor     eax,DWORD[20+rdi]
1037         mov     DWORD[44+rdi],eax
1038
1039         lea     rdi,[24+rdi]
1040         jmp     NEAR $L$12loop
1041 $L$12break:
1042         mov     DWORD[72+rdi],12
1043         xor     rax,rax
1044         jmp     NEAR $L$exit
1045
1046 $L$14rounds:
1047         mov     rax,QWORD[rsi]
1048         mov     rbx,QWORD[8+rsi]
1049         mov     rcx,QWORD[16+rsi]
1050         mov     rdx,QWORD[24+rsi]
1051         mov     QWORD[rdi],rax
1052         mov     QWORD[8+rdi],rbx
1053         mov     QWORD[16+rdi],rcx
1054         mov     QWORD[24+rdi],rdx
1055
1056         shr     rdx,32
1057         xor     ecx,ecx
1058         jmp     NEAR $L$14shortcut
1059 ALIGN   4
1060 $L$14loop:
1061         mov     eax,DWORD[rdi]
1062         mov     edx,DWORD[28+rdi]
1063 $L$14shortcut:
1064         movzx   esi,dl
1065         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
1066         movzx   esi,dh
1067         shl     ebx,24
1068         xor     eax,ebx
1069
1070         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
1071         shr     edx,16
1072         movzx   esi,dl
1073         xor     eax,ebx
1074
1075         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
1076         movzx   esi,dh
1077         shl     ebx,8
1078         xor     eax,ebx
1079
1080         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
1081         shl     ebx,16
1082         xor     eax,ebx
1083
1084         xor     eax,DWORD[((1024-128))+rcx*4+rbp]
1085         mov     DWORD[32+rdi],eax
1086         xor     eax,DWORD[4+rdi]
1087         mov     DWORD[36+rdi],eax
1088         xor     eax,DWORD[8+rdi]
1089         mov     DWORD[40+rdi],eax
1090         xor     eax,DWORD[12+rdi]
1091         mov     DWORD[44+rdi],eax
1092
1093         cmp     ecx,6
1094         je      NEAR $L$14break
1095         add     ecx,1
1096
1097         mov     edx,eax
1098         mov     eax,DWORD[16+rdi]
1099         movzx   esi,dl
1100         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
1101         movzx   esi,dh
1102         xor     eax,ebx
1103
1104         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
1105         shr     edx,16
1106         shl     ebx,8
1107         movzx   esi,dl
1108         xor     eax,ebx
1109
1110         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
1111         movzx   esi,dh
1112         shl     ebx,16
1113         xor     eax,ebx
1114
1115         movzx   ebx,BYTE[((-128))+rsi*1+rbp]
1116         shl     ebx,24
1117         xor     eax,ebx
1118
1119         mov     DWORD[48+rdi],eax
1120         xor     eax,DWORD[20+rdi]
1121         mov     DWORD[52+rdi],eax
1122         xor     eax,DWORD[24+rdi]
1123         mov     DWORD[56+rdi],eax
1124         xor     eax,DWORD[28+rdi]
1125         mov     DWORD[60+rdi],eax
1126
1127         lea     rdi,[32+rdi]
1128         jmp     NEAR $L$14loop
1129 $L$14break:
1130         mov     DWORD[48+rdi],14
1131         xor     rax,rax
1132         jmp     NEAR $L$exit
1133
1134 $L$badpointer:
1135         mov     rax,-1
1136 $L$exit:
1137 DB      0xf3,0xc3
1138
1139 ALIGN   16
1140 global  asm_AES_set_decrypt_key
1141
1142 asm_AES_set_decrypt_key:
1143         mov     QWORD[8+rsp],rdi        ;WIN64 prologue
1144         mov     QWORD[16+rsp],rsi
1145         mov     rax,rsp
1146 $L$SEH_begin_asm_AES_set_decrypt_key:
1147         mov     rdi,rcx
1148         mov     rsi,rdx
1149         mov     rdx,r8
1150
1151
1152         push    rbx
1153         push    rbp
1154         push    r12
1155         push    r13
1156         push    r14
1157         push    r15
1158         push    rdx
1159 $L$dec_key_prologue:
1160
1161         call    _x86_64_AES_set_encrypt_key
1162         mov     r8,QWORD[rsp]
1163         cmp     eax,0
1164         jne     NEAR $L$abort
1165
1166         mov     r14d,DWORD[240+r8]
1167         xor     rdi,rdi
1168         lea     rcx,[r14*4+rdi]
1169         mov     rsi,r8
1170         lea     rdi,[rcx*4+r8]
1171 ALIGN   4
1172 $L$invert:
1173         mov     rax,QWORD[rsi]
1174         mov     rbx,QWORD[8+rsi]
1175         mov     rcx,QWORD[rdi]
1176         mov     rdx,QWORD[8+rdi]
1177         mov     QWORD[rdi],rax
1178         mov     QWORD[8+rdi],rbx
1179         mov     QWORD[rsi],rcx
1180         mov     QWORD[8+rsi],rdx
1181         lea     rsi,[16+rsi]
1182         lea     rdi,[((-16))+rdi]
1183         cmp     rdi,rsi
1184         jne     NEAR $L$invert
1185
1186         lea     rax,[(($L$AES_Te+2048+1024))]
1187
1188         mov     rsi,QWORD[40+rax]
1189         mov     rdi,QWORD[48+rax]
1190         mov     rbp,QWORD[56+rax]
1191
1192         mov     r15,r8
1193         sub     r14d,1
1194 ALIGN   4
1195 $L$permute:
1196         lea     r15,[16+r15]
1197         mov     rax,QWORD[r15]
1198         mov     rcx,QWORD[8+r15]
1199         mov     r9,rsi
1200         mov     r12,rsi
1201         and     r9,rax
1202         and     r12,rcx
1203         mov     rbx,r9
1204         mov     rdx,r12
1205         shr     r9,7
1206         lea     r8,[rax*1+rax]
1207         shr     r12,7
1208         lea     r11,[rcx*1+rcx]
1209         sub     rbx,r9
1210         sub     rdx,r12
1211         and     r8,rdi
1212         and     r11,rdi
1213         and     rbx,rbp
1214         and     rdx,rbp
1215         xor     r8,rbx
1216         xor     r11,rdx
1217         mov     r10,rsi
1218         mov     r13,rsi
1219
1220         and     r10,r8
1221         and     r13,r11
1222         mov     rbx,r10
1223         mov     rdx,r13
1224         shr     r10,7
1225         lea     r9,[r8*1+r8]
1226         shr     r13,7
1227         lea     r12,[r11*1+r11]
1228         sub     rbx,r10
1229         sub     rdx,r13
1230         and     r9,rdi
1231         and     r12,rdi
1232         and     rbx,rbp
1233         and     rdx,rbp
1234         xor     r9,rbx
1235         xor     r12,rdx
1236         mov     r10,rsi
1237         mov     r13,rsi
1238
1239         and     r10,r9
1240         and     r13,r12
1241         mov     rbx,r10
1242         mov     rdx,r13
1243         shr     r10,7
1244         xor     r8,rax
1245         shr     r13,7
1246         xor     r11,rcx
1247         sub     rbx,r10
1248         sub     rdx,r13
1249         lea     r10,[r9*1+r9]
1250         lea     r13,[r12*1+r12]
1251         xor     r9,rax
1252         xor     r12,rcx
1253         and     r10,rdi
1254         and     r13,rdi
1255         and     rbx,rbp
1256         and     rdx,rbp
1257         xor     r10,rbx
1258         xor     r13,rdx
1259
1260         xor     rax,r10
1261         xor     rcx,r13
1262         xor     r8,r10
1263         xor     r11,r13
1264         mov     rbx,rax
1265         mov     rdx,rcx
1266         xor     r9,r10
1267         shr     rbx,32
1268         xor     r12,r13
1269         shr     rdx,32
1270         xor     r10,r8
1271         rol     eax,8
1272         xor     r13,r11
1273         rol     ecx,8
1274         xor     r10,r9
1275         rol     ebx,8
1276         xor     r13,r12
1277
1278         rol     edx,8
1279         xor     eax,r10d
1280         shr     r10,32
1281         xor     ecx,r13d
1282         shr     r13,32
1283         xor     ebx,r10d
1284         xor     edx,r13d
1285
1286         mov     r10,r8
1287         rol     r8d,24
1288         mov     r13,r11
1289         rol     r11d,24
1290         shr     r10,32
1291         xor     eax,r8d
1292         shr     r13,32
1293         xor     ecx,r11d
1294         rol     r10d,24
1295         mov     r8,r9
1296         rol     r13d,24
1297         mov     r11,r12
1298         shr     r8,32
1299         xor     ebx,r10d
1300         shr     r11,32
1301         xor     edx,r13d
1302
1303
1304         rol     r9d,16
1305
1306         rol     r12d,16
1307
1308         rol     r8d,16
1309
1310         xor     eax,r9d
1311         rol     r11d,16
1312         xor     ecx,r12d
1313
1314         xor     ebx,r8d
1315         xor     edx,r11d
1316         mov     DWORD[r15],eax
1317         mov     DWORD[4+r15],ebx
1318         mov     DWORD[8+r15],ecx
1319         mov     DWORD[12+r15],edx
1320         sub     r14d,1
1321         jnz     NEAR $L$permute
1322
1323         xor     rax,rax
1324 $L$abort:
1325         mov     r15,QWORD[8+rsp]
1326         mov     r14,QWORD[16+rsp]
1327         mov     r13,QWORD[24+rsp]
1328         mov     r12,QWORD[32+rsp]
1329         mov     rbp,QWORD[40+rsp]
1330         mov     rbx,QWORD[48+rsp]
1331         add     rsp,56
1332 $L$dec_key_epilogue:
1333         mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
1334         mov     rsi,QWORD[16+rsp]
1335         DB      0F3h,0C3h               ;repret
1336 $L$SEH_end_asm_AES_set_decrypt_key:
1337 ALIGN   16
1338 global  asm_AES_cbc_encrypt
1339
1340 EXTERN  OPENSSL_ia32cap_P
1341
1342 asm_AES_cbc_encrypt:
1343         mov     QWORD[8+rsp],rdi        ;WIN64 prologue
1344         mov     QWORD[16+rsp],rsi
1345         mov     rax,rsp
1346 $L$SEH_begin_asm_AES_cbc_encrypt:
1347         mov     rdi,rcx
1348         mov     rsi,rdx
1349         mov     rdx,r8
1350         mov     rcx,r9
1351         mov     r8,QWORD[40+rsp]
1352         mov     r9,QWORD[48+rsp]
1353
1354
1355         cmp     rdx,0
1356         je      NEAR $L$cbc_epilogue
1357         pushfq
1358         push    rbx
1359         push    rbp
1360         push    r12
1361         push    r13
1362         push    r14
1363         push    r15
1364 $L$cbc_prologue:
1365
1366         cld
1367         mov     r9d,r9d
1368
1369         lea     r14,[$L$AES_Te]
1370         cmp     r9,0
1371         jne     NEAR $L$cbc_picked_te
1372         lea     r14,[$L$AES_Td]
1373 $L$cbc_picked_te:
1374
1375         mov     r10d,DWORD[OPENSSL_ia32cap_P]
1376         cmp     rdx,512
1377         jb      NEAR $L$cbc_slow_prologue
1378         test    rdx,15
1379         jnz     NEAR $L$cbc_slow_prologue
1380         bt      r10d,28
1381         jc      NEAR $L$cbc_slow_prologue
1382
1383
1384         lea     r15,[((-88-248))+rsp]
1385         and     r15,-64
1386
1387
1388         mov     r10,r14
1389         lea     r11,[2304+r14]
1390         mov     r12,r15
1391         and     r10,0xFFF
1392         and     r11,0xFFF
1393         and     r12,0xFFF
1394
1395         cmp     r12,r11
1396         jb      NEAR $L$cbc_te_break_out
1397         sub     r12,r11
1398         sub     r15,r12
1399         jmp     NEAR $L$cbc_te_ok
1400 $L$cbc_te_break_out:
1401         sub     r12,r10
1402         and     r12,0xFFF
1403         add     r12,320
1404         sub     r15,r12
1405 ALIGN   4
1406 $L$cbc_te_ok:
1407
1408         xchg    r15,rsp
1409
1410         mov     QWORD[16+rsp],r15
1411 $L$cbc_fast_body:
1412         mov     QWORD[24+rsp],rdi
1413         mov     QWORD[32+rsp],rsi
1414         mov     QWORD[40+rsp],rdx
1415         mov     QWORD[48+rsp],rcx
1416         mov     QWORD[56+rsp],r8
1417         mov     DWORD[((80+240))+rsp],0
1418         mov     rbp,r8
1419         mov     rbx,r9
1420         mov     r9,rsi
1421         mov     r8,rdi
1422         mov     r15,rcx
1423
1424         mov     eax,DWORD[240+r15]
1425
1426         mov     r10,r15
1427         sub     r10,r14
1428         and     r10,0xfff
1429         cmp     r10,2304
1430         jb      NEAR $L$cbc_do_ecopy
1431         cmp     r10,4096-248
1432         jb      NEAR $L$cbc_skip_ecopy
1433 ALIGN   4
1434 $L$cbc_do_ecopy:
1435         mov     rsi,r15
1436         lea     rdi,[80+rsp]
1437         lea     r15,[80+rsp]
1438         mov     ecx,240/8
1439         DD      0x90A548F3
1440         mov     DWORD[rdi],eax
1441 $L$cbc_skip_ecopy:
1442         mov     QWORD[rsp],r15
1443
1444         mov     ecx,18
1445 ALIGN   4
1446 $L$cbc_prefetch_te:
1447         mov     r10,QWORD[r14]
1448         mov     r11,QWORD[32+r14]
1449         mov     r12,QWORD[64+r14]
1450         mov     r13,QWORD[96+r14]
1451         lea     r14,[128+r14]
1452         sub     ecx,1
1453         jnz     NEAR $L$cbc_prefetch_te
1454         lea     r14,[((-2304))+r14]
1455
1456         cmp     rbx,0
1457         je      NEAR $L$FAST_DECRYPT
1458
1459
1460         mov     eax,DWORD[rbp]
1461         mov     ebx,DWORD[4+rbp]
1462         mov     ecx,DWORD[8+rbp]
1463         mov     edx,DWORD[12+rbp]
1464
1465 ALIGN   4
1466 $L$cbc_fast_enc_loop:
1467         xor     eax,DWORD[r8]
1468         xor     ebx,DWORD[4+r8]
1469         xor     ecx,DWORD[8+r8]
1470         xor     edx,DWORD[12+r8]
1471         mov     r15,QWORD[rsp]
1472         mov     QWORD[24+rsp],r8
1473
1474         call    _x86_64_AES_encrypt
1475
1476         mov     r8,QWORD[24+rsp]
1477         mov     r10,QWORD[40+rsp]
1478         mov     DWORD[r9],eax
1479         mov     DWORD[4+r9],ebx
1480         mov     DWORD[8+r9],ecx
1481         mov     DWORD[12+r9],edx
1482
1483         lea     r8,[16+r8]
1484         lea     r9,[16+r9]
1485         sub     r10,16
1486         test    r10,-16
1487         mov     QWORD[40+rsp],r10
1488         jnz     NEAR $L$cbc_fast_enc_loop
1489         mov     rbp,QWORD[56+rsp]
1490         mov     DWORD[rbp],eax
1491         mov     DWORD[4+rbp],ebx
1492         mov     DWORD[8+rbp],ecx
1493         mov     DWORD[12+rbp],edx
1494
1495         jmp     NEAR $L$cbc_fast_cleanup
1496
1497
1498 ALIGN   16
1499 $L$FAST_DECRYPT:
1500         cmp     r9,r8
1501         je      NEAR $L$cbc_fast_dec_in_place
1502
1503         mov     QWORD[64+rsp],rbp
1504 ALIGN   4
1505 $L$cbc_fast_dec_loop:
1506         mov     eax,DWORD[r8]
1507         mov     ebx,DWORD[4+r8]
1508         mov     ecx,DWORD[8+r8]
1509         mov     edx,DWORD[12+r8]
1510         mov     r15,QWORD[rsp]
1511         mov     QWORD[24+rsp],r8
1512
1513         call    _x86_64_AES_decrypt
1514
1515         mov     rbp,QWORD[64+rsp]
1516         mov     r8,QWORD[24+rsp]
1517         mov     r10,QWORD[40+rsp]
1518         xor     eax,DWORD[rbp]
1519         xor     ebx,DWORD[4+rbp]
1520         xor     ecx,DWORD[8+rbp]
1521         xor     edx,DWORD[12+rbp]
1522         mov     rbp,r8
1523
1524         sub     r10,16
1525         mov     QWORD[40+rsp],r10
1526         mov     QWORD[64+rsp],rbp
1527
1528         mov     DWORD[r9],eax
1529         mov     DWORD[4+r9],ebx
1530         mov     DWORD[8+r9],ecx
1531         mov     DWORD[12+r9],edx
1532
1533         lea     r8,[16+r8]
1534         lea     r9,[16+r9]
1535         jnz     NEAR $L$cbc_fast_dec_loop
1536         mov     r12,QWORD[56+rsp]
1537         mov     r10,QWORD[rbp]
1538         mov     r11,QWORD[8+rbp]
1539         mov     QWORD[r12],r10
1540         mov     QWORD[8+r12],r11
1541         jmp     NEAR $L$cbc_fast_cleanup
1542
1543 ALIGN   16
1544 $L$cbc_fast_dec_in_place:
1545         mov     r10,QWORD[rbp]
1546         mov     r11,QWORD[8+rbp]
1547         mov     QWORD[((0+64))+rsp],r10
1548         mov     QWORD[((8+64))+rsp],r11
1549 ALIGN   4
1550 $L$cbc_fast_dec_in_place_loop:
1551         mov     eax,DWORD[r8]
1552         mov     ebx,DWORD[4+r8]
1553         mov     ecx,DWORD[8+r8]
1554         mov     edx,DWORD[12+r8]
1555         mov     r15,QWORD[rsp]
1556         mov     QWORD[24+rsp],r8
1557
1558         call    _x86_64_AES_decrypt
1559
1560         mov     r8,QWORD[24+rsp]
1561         mov     r10,QWORD[40+rsp]
1562         xor     eax,DWORD[((0+64))+rsp]
1563         xor     ebx,DWORD[((4+64))+rsp]
1564         xor     ecx,DWORD[((8+64))+rsp]
1565         xor     edx,DWORD[((12+64))+rsp]
1566
1567         mov     r11,QWORD[r8]
1568         mov     r12,QWORD[8+r8]
1569         sub     r10,16
1570         jz      NEAR $L$cbc_fast_dec_in_place_done
1571
1572         mov     QWORD[((0+64))+rsp],r11
1573         mov     QWORD[((8+64))+rsp],r12
1574
1575         mov     DWORD[r9],eax
1576         mov     DWORD[4+r9],ebx
1577         mov     DWORD[8+r9],ecx
1578         mov     DWORD[12+r9],edx
1579
1580         lea     r8,[16+r8]
1581         lea     r9,[16+r9]
1582         mov     QWORD[40+rsp],r10
1583         jmp     NEAR $L$cbc_fast_dec_in_place_loop
1584 $L$cbc_fast_dec_in_place_done:
1585         mov     rdi,QWORD[56+rsp]
1586         mov     QWORD[rdi],r11
1587         mov     QWORD[8+rdi],r12
1588
1589         mov     DWORD[r9],eax
1590         mov     DWORD[4+r9],ebx
1591         mov     DWORD[8+r9],ecx
1592         mov     DWORD[12+r9],edx
1593
1594 ALIGN   4
1595 $L$cbc_fast_cleanup:
1596         cmp     DWORD[((80+240))+rsp],0
1597         lea     rdi,[80+rsp]
1598         je      NEAR $L$cbc_exit
1599         mov     ecx,240/8
1600         xor     rax,rax
1601         DD      0x90AB48F3
1602
1603         jmp     NEAR $L$cbc_exit
1604
1605
1606 ALIGN   16
1607 $L$cbc_slow_prologue:
1608
1609         lea     rbp,[((-88))+rsp]
1610         and     rbp,-64
1611
1612         lea     r10,[((-88-63))+rcx]
1613         sub     r10,rbp
1614         neg     r10
1615         and     r10,0x3c0
1616         sub     rbp,r10
1617
1618         xchg    rbp,rsp
1619
1620         mov     QWORD[16+rsp],rbp
1621 $L$cbc_slow_body:
1622
1623
1624
1625
1626         mov     QWORD[56+rsp],r8
1627         mov     rbp,r8
1628         mov     rbx,r9
1629         mov     r9,rsi
1630         mov     r8,rdi
1631         mov     r15,rcx
1632         mov     r10,rdx
1633
1634         mov     eax,DWORD[240+r15]
1635         mov     QWORD[rsp],r15
1636         shl     eax,4
1637         lea     rax,[rax*1+r15]
1638         mov     QWORD[8+rsp],rax
1639
1640
1641         lea     r14,[2048+r14]
1642         lea     rax,[((768-8))+rsp]
1643         sub     rax,r14
1644         and     rax,0x300
1645         lea     r14,[rax*1+r14]
1646
1647         cmp     rbx,0
1648         je      NEAR $L$SLOW_DECRYPT
1649
1650
1651         test    r10,-16
1652         mov     eax,DWORD[rbp]
1653         mov     ebx,DWORD[4+rbp]
1654         mov     ecx,DWORD[8+rbp]
1655         mov     edx,DWORD[12+rbp]
1656         jz      NEAR $L$cbc_slow_enc_tail
1657
1658 ALIGN   4
1659 $L$cbc_slow_enc_loop:
1660         xor     eax,DWORD[r8]
1661         xor     ebx,DWORD[4+r8]
1662         xor     ecx,DWORD[8+r8]
1663         xor     edx,DWORD[12+r8]
1664         mov     r15,QWORD[rsp]
1665         mov     QWORD[24+rsp],r8
1666         mov     QWORD[32+rsp],r9
1667         mov     QWORD[40+rsp],r10
1668
1669         call    _x86_64_AES_encrypt_compact
1670
1671         mov     r8,QWORD[24+rsp]
1672         mov     r9,QWORD[32+rsp]
1673         mov     r10,QWORD[40+rsp]
1674         mov     DWORD[r9],eax
1675         mov     DWORD[4+r9],ebx
1676         mov     DWORD[8+r9],ecx
1677         mov     DWORD[12+r9],edx
1678
1679         lea     r8,[16+r8]
1680         lea     r9,[16+r9]
1681         sub     r10,16
1682         test    r10,-16
1683         jnz     NEAR $L$cbc_slow_enc_loop
1684         test    r10,15
1685         jnz     NEAR $L$cbc_slow_enc_tail
1686         mov     rbp,QWORD[56+rsp]
1687         mov     DWORD[rbp],eax
1688         mov     DWORD[4+rbp],ebx
1689         mov     DWORD[8+rbp],ecx
1690         mov     DWORD[12+rbp],edx
1691
1692         jmp     NEAR $L$cbc_exit
1693
1694 ALIGN   4
1695 $L$cbc_slow_enc_tail:
1696         mov     r11,rax
1697         mov     r12,rcx
1698         mov     rcx,r10
1699         mov     rsi,r8
1700         mov     rdi,r9
1701         DD      0x9066A4F3
1702         mov     rcx,16
1703         sub     rcx,r10
1704         xor     rax,rax
1705         DD      0x9066AAF3
1706         mov     r8,r9
1707         mov     r10,16
1708         mov     rax,r11
1709         mov     rcx,r12
1710         jmp     NEAR $L$cbc_slow_enc_loop
1711
1712 ALIGN   16
1713 $L$SLOW_DECRYPT:
1714         shr     rax,3
1715         add     r14,rax
1716
1717         mov     r11,QWORD[rbp]
1718         mov     r12,QWORD[8+rbp]
1719         mov     QWORD[((0+64))+rsp],r11
1720         mov     QWORD[((8+64))+rsp],r12
1721
1722 ALIGN   4
1723 $L$cbc_slow_dec_loop:
1724         mov     eax,DWORD[r8]
1725         mov     ebx,DWORD[4+r8]
1726         mov     ecx,DWORD[8+r8]
1727         mov     edx,DWORD[12+r8]
1728         mov     r15,QWORD[rsp]
1729         mov     QWORD[24+rsp],r8
1730         mov     QWORD[32+rsp],r9
1731         mov     QWORD[40+rsp],r10
1732
1733         call    _x86_64_AES_decrypt_compact
1734
1735         mov     r8,QWORD[24+rsp]
1736         mov     r9,QWORD[32+rsp]
1737         mov     r10,QWORD[40+rsp]
1738         xor     eax,DWORD[((0+64))+rsp]
1739         xor     ebx,DWORD[((4+64))+rsp]
1740         xor     ecx,DWORD[((8+64))+rsp]
1741         xor     edx,DWORD[((12+64))+rsp]
1742
1743         mov     r11,QWORD[r8]
1744         mov     r12,QWORD[8+r8]
1745         sub     r10,16
1746         jc      NEAR $L$cbc_slow_dec_partial
1747         jz      NEAR $L$cbc_slow_dec_done
1748
1749         mov     QWORD[((0+64))+rsp],r11
1750         mov     QWORD[((8+64))+rsp],r12
1751
1752         mov     DWORD[r9],eax
1753         mov     DWORD[4+r9],ebx
1754         mov     DWORD[8+r9],ecx
1755         mov     DWORD[12+r9],edx
1756
1757         lea     r8,[16+r8]
1758         lea     r9,[16+r9]
1759         jmp     NEAR $L$cbc_slow_dec_loop
1760 $L$cbc_slow_dec_done:
1761         mov     rdi,QWORD[56+rsp]
1762         mov     QWORD[rdi],r11
1763         mov     QWORD[8+rdi],r12
1764
1765         mov     DWORD[r9],eax
1766         mov     DWORD[4+r9],ebx
1767         mov     DWORD[8+r9],ecx
1768         mov     DWORD[12+r9],edx
1769
1770         jmp     NEAR $L$cbc_exit
1771
1772 ALIGN   4
1773 $L$cbc_slow_dec_partial:
1774         mov     rdi,QWORD[56+rsp]
1775         mov     QWORD[rdi],r11
1776         mov     QWORD[8+rdi],r12
1777
1778         mov     DWORD[((0+64))+rsp],eax
1779         mov     DWORD[((4+64))+rsp],ebx
1780         mov     DWORD[((8+64))+rsp],ecx
1781         mov     DWORD[((12+64))+rsp],edx
1782
1783         mov     rdi,r9
1784         lea     rsi,[64+rsp]
1785         lea     rcx,[16+r10]
1786         DD      0x9066A4F3
1787         jmp     NEAR $L$cbc_exit
1788
1789 ALIGN   16
1790 $L$cbc_exit:
1791         mov     rsi,QWORD[16+rsp]
1792         mov     r15,QWORD[rsi]
1793         mov     r14,QWORD[8+rsi]
1794         mov     r13,QWORD[16+rsi]
1795         mov     r12,QWORD[24+rsi]
1796         mov     rbp,QWORD[32+rsi]
1797         mov     rbx,QWORD[40+rsi]
1798         lea     rsp,[48+rsi]
1799 $L$cbc_popfq:
1800         popfq
1801 $L$cbc_epilogue:
1802         mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
1803         mov     rsi,QWORD[16+rsp]
1804         DB      0F3h,0C3h               ;repret
1805 $L$SEH_end_asm_AES_cbc_encrypt:
1806 ALIGN   64
1807 $L$AES_Te:
1808         DD      0xa56363c6,0xa56363c6
1809         DD      0x847c7cf8,0x847c7cf8
1810         DD      0x997777ee,0x997777ee
1811         DD      0x8d7b7bf6,0x8d7b7bf6
1812         DD      0x0df2f2ff,0x0df2f2ff
1813         DD      0xbd6b6bd6,0xbd6b6bd6
1814         DD      0xb16f6fde,0xb16f6fde
1815         DD      0x54c5c591,0x54c5c591
1816         DD      0x50303060,0x50303060
1817         DD      0x03010102,0x03010102
1818         DD      0xa96767ce,0xa96767ce
1819         DD      0x7d2b2b56,0x7d2b2b56
1820         DD      0x19fefee7,0x19fefee7
1821         DD      0x62d7d7b5,0x62d7d7b5
1822         DD      0xe6abab4d,0xe6abab4d
1823         DD      0x9a7676ec,0x9a7676ec
1824         DD      0x45caca8f,0x45caca8f
1825         DD      0x9d82821f,0x9d82821f
1826         DD      0x40c9c989,0x40c9c989
1827         DD      0x877d7dfa,0x877d7dfa
1828         DD      0x15fafaef,0x15fafaef
1829         DD      0xeb5959b2,0xeb5959b2
1830         DD      0xc947478e,0xc947478e
1831         DD      0x0bf0f0fb,0x0bf0f0fb
1832         DD      0xecadad41,0xecadad41
1833         DD      0x67d4d4b3,0x67d4d4b3
1834         DD      0xfda2a25f,0xfda2a25f
1835         DD      0xeaafaf45,0xeaafaf45
1836         DD      0xbf9c9c23,0xbf9c9c23
1837         DD      0xf7a4a453,0xf7a4a453
1838         DD      0x967272e4,0x967272e4
1839         DD      0x5bc0c09b,0x5bc0c09b
1840         DD      0xc2b7b775,0xc2b7b775
1841         DD      0x1cfdfde1,0x1cfdfde1
1842         DD      0xae93933d,0xae93933d
1843         DD      0x6a26264c,0x6a26264c
1844         DD      0x5a36366c,0x5a36366c
1845         DD      0x413f3f7e,0x413f3f7e
1846         DD      0x02f7f7f5,0x02f7f7f5
1847         DD      0x4fcccc83,0x4fcccc83
1848         DD      0x5c343468,0x5c343468
1849         DD      0xf4a5a551,0xf4a5a551
1850         DD      0x34e5e5d1,0x34e5e5d1
1851         DD      0x08f1f1f9,0x08f1f1f9
1852         DD      0x937171e2,0x937171e2
1853         DD      0x73d8d8ab,0x73d8d8ab
1854         DD      0x53313162,0x53313162
1855         DD      0x3f15152a,0x3f15152a
1856         DD      0x0c040408,0x0c040408
1857         DD      0x52c7c795,0x52c7c795
1858         DD      0x65232346,0x65232346
1859         DD      0x5ec3c39d,0x5ec3c39d
1860         DD      0x28181830,0x28181830
1861         DD      0xa1969637,0xa1969637
1862         DD      0x0f05050a,0x0f05050a
1863         DD      0xb59a9a2f,0xb59a9a2f
1864         DD      0x0907070e,0x0907070e
1865         DD      0x36121224,0x36121224
1866         DD      0x9b80801b,0x9b80801b
1867         DD      0x3de2e2df,0x3de2e2df
1868         DD      0x26ebebcd,0x26ebebcd
1869         DD      0x6927274e,0x6927274e
1870         DD      0xcdb2b27f,0xcdb2b27f
1871         DD      0x9f7575ea,0x9f7575ea
1872         DD      0x1b090912,0x1b090912
1873         DD      0x9e83831d,0x9e83831d
1874         DD      0x742c2c58,0x742c2c58
1875         DD      0x2e1a1a34,0x2e1a1a34
1876         DD      0x2d1b1b36,0x2d1b1b36
1877         DD      0xb26e6edc,0xb26e6edc
1878         DD      0xee5a5ab4,0xee5a5ab4
1879         DD      0xfba0a05b,0xfba0a05b
1880         DD      0xf65252a4,0xf65252a4
1881         DD      0x4d3b3b76,0x4d3b3b76
1882         DD      0x61d6d6b7,0x61d6d6b7
1883         DD      0xceb3b37d,0xceb3b37d
1884         DD      0x7b292952,0x7b292952
1885         DD      0x3ee3e3dd,0x3ee3e3dd
1886         DD      0x712f2f5e,0x712f2f5e
1887         DD      0x97848413,0x97848413
1888         DD      0xf55353a6,0xf55353a6
1889         DD      0x68d1d1b9,0x68d1d1b9
1890         DD      0x00000000,0x00000000
1891         DD      0x2cededc1,0x2cededc1
1892         DD      0x60202040,0x60202040
1893         DD      0x1ffcfce3,0x1ffcfce3
1894         DD      0xc8b1b179,0xc8b1b179
1895         DD      0xed5b5bb6,0xed5b5bb6
1896         DD      0xbe6a6ad4,0xbe6a6ad4
1897         DD      0x46cbcb8d,0x46cbcb8d
1898         DD      0xd9bebe67,0xd9bebe67
1899         DD      0x4b393972,0x4b393972
1900         DD      0xde4a4a94,0xde4a4a94
1901         DD      0xd44c4c98,0xd44c4c98
1902         DD      0xe85858b0,0xe85858b0
1903         DD      0x4acfcf85,0x4acfcf85
1904         DD      0x6bd0d0bb,0x6bd0d0bb
1905         DD      0x2aefefc5,0x2aefefc5
1906         DD      0xe5aaaa4f,0xe5aaaa4f
1907         DD      0x16fbfbed,0x16fbfbed
1908         DD      0xc5434386,0xc5434386
1909         DD      0xd74d4d9a,0xd74d4d9a
1910         DD      0x55333366,0x55333366
1911         DD      0x94858511,0x94858511
1912         DD      0xcf45458a,0xcf45458a
1913         DD      0x10f9f9e9,0x10f9f9e9
1914         DD      0x06020204,0x06020204
1915         DD      0x817f7ffe,0x817f7ffe
1916         DD      0xf05050a0,0xf05050a0
1917         DD      0x443c3c78,0x443c3c78
1918         DD      0xba9f9f25,0xba9f9f25
1919         DD      0xe3a8a84b,0xe3a8a84b
1920         DD      0xf35151a2,0xf35151a2
1921         DD      0xfea3a35d,0xfea3a35d
1922         DD      0xc0404080,0xc0404080
1923         DD      0x8a8f8f05,0x8a8f8f05
1924         DD      0xad92923f,0xad92923f
1925         DD      0xbc9d9d21,0xbc9d9d21
1926         DD      0x48383870,0x48383870
1927         DD      0x04f5f5f1,0x04f5f5f1
1928         DD      0xdfbcbc63,0xdfbcbc63
1929         DD      0xc1b6b677,0xc1b6b677
1930         DD      0x75dadaaf,0x75dadaaf
1931         DD      0x63212142,0x63212142
1932         DD      0x30101020,0x30101020
1933         DD      0x1affffe5,0x1affffe5
1934         DD      0x0ef3f3fd,0x0ef3f3fd
1935         DD      0x6dd2d2bf,0x6dd2d2bf
1936         DD      0x4ccdcd81,0x4ccdcd81
1937         DD      0x140c0c18,0x140c0c18
1938         DD      0x35131326,0x35131326
1939         DD      0x2fececc3,0x2fececc3
1940         DD      0xe15f5fbe,0xe15f5fbe
1941         DD      0xa2979735,0xa2979735
1942         DD      0xcc444488,0xcc444488
1943         DD      0x3917172e,0x3917172e
1944         DD      0x57c4c493,0x57c4c493
1945         DD      0xf2a7a755,0xf2a7a755
1946         DD      0x827e7efc,0x827e7efc
1947         DD      0x473d3d7a,0x473d3d7a
1948         DD      0xac6464c8,0xac6464c8
1949         DD      0xe75d5dba,0xe75d5dba
1950         DD      0x2b191932,0x2b191932
1951         DD      0x957373e6,0x957373e6
1952         DD      0xa06060c0,0xa06060c0
1953         DD      0x98818119,0x98818119
1954         DD      0xd14f4f9e,0xd14f4f9e
1955         DD      0x7fdcdca3,0x7fdcdca3
1956         DD      0x66222244,0x66222244
1957         DD      0x7e2a2a54,0x7e2a2a54
1958         DD      0xab90903b,0xab90903b
1959         DD      0x8388880b,0x8388880b
1960         DD      0xca46468c,0xca46468c
1961         DD      0x29eeeec7,0x29eeeec7
1962         DD      0xd3b8b86b,0xd3b8b86b
1963         DD      0x3c141428,0x3c141428
1964         DD      0x79dedea7,0x79dedea7
1965         DD      0xe25e5ebc,0xe25e5ebc
1966         DD      0x1d0b0b16,0x1d0b0b16
1967         DD      0x76dbdbad,0x76dbdbad
1968         DD      0x3be0e0db,0x3be0e0db
1969         DD      0x56323264,0x56323264
1970         DD      0x4e3a3a74,0x4e3a3a74
1971         DD      0x1e0a0a14,0x1e0a0a14
1972         DD      0xdb494992,0xdb494992
1973         DD      0x0a06060c,0x0a06060c
1974         DD      0x6c242448,0x6c242448
1975         DD      0xe45c5cb8,0xe45c5cb8
1976         DD      0x5dc2c29f,0x5dc2c29f
1977         DD      0x6ed3d3bd,0x6ed3d3bd
1978         DD      0xefacac43,0xefacac43
1979         DD      0xa66262c4,0xa66262c4
1980         DD      0xa8919139,0xa8919139
1981         DD      0xa4959531,0xa4959531
1982         DD      0x37e4e4d3,0x37e4e4d3
1983         DD      0x8b7979f2,0x8b7979f2
1984         DD      0x32e7e7d5,0x32e7e7d5
1985         DD      0x43c8c88b,0x43c8c88b
1986         DD      0x5937376e,0x5937376e
1987         DD      0xb76d6dda,0xb76d6dda
1988         DD      0x8c8d8d01,0x8c8d8d01
1989         DD      0x64d5d5b1,0x64d5d5b1
1990         DD      0xd24e4e9c,0xd24e4e9c
1991         DD      0xe0a9a949,0xe0a9a949
1992         DD      0xb46c6cd8,0xb46c6cd8
1993         DD      0xfa5656ac,0xfa5656ac
1994         DD      0x07f4f4f3,0x07f4f4f3
1995         DD      0x25eaeacf,0x25eaeacf
1996         DD      0xaf6565ca,0xaf6565ca
1997         DD      0x8e7a7af4,0x8e7a7af4
1998         DD      0xe9aeae47,0xe9aeae47
1999         DD      0x18080810,0x18080810
2000         DD      0xd5baba6f,0xd5baba6f
2001         DD      0x887878f0,0x887878f0
2002         DD      0x6f25254a,0x6f25254a
2003         DD      0x722e2e5c,0x722e2e5c
2004         DD      0x241c1c38,0x241c1c38
2005         DD      0xf1a6a657,0xf1a6a657
2006         DD      0xc7b4b473,0xc7b4b473
2007         DD      0x51c6c697,0x51c6c697
2008         DD      0x23e8e8cb,0x23e8e8cb
2009         DD      0x7cdddda1,0x7cdddda1
2010         DD      0x9c7474e8,0x9c7474e8
2011         DD      0x211f1f3e,0x211f1f3e
2012         DD      0xdd4b4b96,0xdd4b4b96
2013         DD      0xdcbdbd61,0xdcbdbd61
2014         DD      0x868b8b0d,0x868b8b0d
2015         DD      0x858a8a0f,0x858a8a0f
2016         DD      0x907070e0,0x907070e0
2017         DD      0x423e3e7c,0x423e3e7c
2018         DD      0xc4b5b571,0xc4b5b571
2019         DD      0xaa6666cc,0xaa6666cc
2020         DD      0xd8484890,0xd8484890
2021         DD      0x05030306,0x05030306
2022         DD      0x01f6f6f7,0x01f6f6f7
2023         DD      0x120e0e1c,0x120e0e1c
2024         DD      0xa36161c2,0xa36161c2
2025         DD      0x5f35356a,0x5f35356a
2026         DD      0xf95757ae,0xf95757ae
2027         DD      0xd0b9b969,0xd0b9b969
2028         DD      0x91868617,0x91868617
2029         DD      0x58c1c199,0x58c1c199
2030         DD      0x271d1d3a,0x271d1d3a
2031         DD      0xb99e9e27,0xb99e9e27
2032         DD      0x38e1e1d9,0x38e1e1d9
2033         DD      0x13f8f8eb,0x13f8f8eb
2034         DD      0xb398982b,0xb398982b
2035         DD      0x33111122,0x33111122
2036         DD      0xbb6969d2,0xbb6969d2
2037         DD      0x70d9d9a9,0x70d9d9a9
2038         DD      0x898e8e07,0x898e8e07
2039         DD      0xa7949433,0xa7949433
2040         DD      0xb69b9b2d,0xb69b9b2d
2041         DD      0x221e1e3c,0x221e1e3c
2042         DD      0x92878715,0x92878715
2043         DD      0x20e9e9c9,0x20e9e9c9
2044         DD      0x49cece87,0x49cece87
2045         DD      0xff5555aa,0xff5555aa
2046         DD      0x78282850,0x78282850
2047         DD      0x7adfdfa5,0x7adfdfa5
2048         DD      0x8f8c8c03,0x8f8c8c03
2049         DD      0xf8a1a159,0xf8a1a159
2050         DD      0x80898909,0x80898909
2051         DD      0x170d0d1a,0x170d0d1a
2052         DD      0xdabfbf65,0xdabfbf65
2053         DD      0x31e6e6d7,0x31e6e6d7
2054         DD      0xc6424284,0xc6424284
2055         DD      0xb86868d0,0xb86868d0
2056         DD      0xc3414182,0xc3414182
2057         DD      0xb0999929,0xb0999929
2058         DD      0x772d2d5a,0x772d2d5a
2059         DD      0x110f0f1e,0x110f0f1e
2060         DD      0xcbb0b07b,0xcbb0b07b
2061         DD      0xfc5454a8,0xfc5454a8
2062         DD      0xd6bbbb6d,0xd6bbbb6d
2063         DD      0x3a16162c,0x3a16162c
2064 DB      0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2065 DB      0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2066 DB      0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2067 DB      0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2068 DB      0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2069 DB      0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2070 DB      0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2071 DB      0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2072 DB      0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2073 DB      0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2074 DB      0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2075 DB      0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2076 DB      0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2077 DB      0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2078 DB      0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2079 DB      0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2080 DB      0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2081 DB      0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2082 DB      0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2083 DB      0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2084 DB      0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2085 DB      0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2086 DB      0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2087 DB      0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2088 DB      0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2089 DB      0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2090 DB      0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2091 DB      0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2092 DB      0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2093 DB      0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2094 DB      0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2095 DB      0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2096 DB      0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2097 DB      0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2098 DB      0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2099 DB      0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2100 DB      0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2101 DB      0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2102 DB      0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2103 DB      0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2104 DB      0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2105 DB      0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2106 DB      0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2107 DB      0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2108 DB      0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2109 DB      0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2110 DB      0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2111 DB      0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2112 DB      0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2113 DB      0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2114 DB      0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2115 DB      0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2116 DB      0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2117 DB      0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2118 DB      0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2119 DB      0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2120 DB      0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2121 DB      0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2122 DB      0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2123 DB      0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2124 DB      0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2125 DB      0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2126 DB      0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2127 DB      0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2128 DB      0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2129 DB      0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2130 DB      0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2131 DB      0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2132 DB      0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2133 DB      0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2134 DB      0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2135 DB      0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2136 DB      0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2137 DB      0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2138 DB      0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2139 DB      0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2140 DB      0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2141 DB      0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2142 DB      0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2143 DB      0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2144 DB      0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2145 DB      0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2146 DB      0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2147 DB      0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2148 DB      0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2149 DB      0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2150 DB      0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2151 DB      0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2152 DB      0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2153 DB      0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2154 DB      0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2155 DB      0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2156 DB      0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2157 DB      0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2158 DB      0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2159 DB      0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2160 DB      0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2161 DB      0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2162 DB      0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2163 DB      0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2164 DB      0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2165 DB      0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2166 DB      0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2167 DB      0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2168 DB      0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2169 DB      0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2170 DB      0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2171 DB      0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2172 DB      0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2173 DB      0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2174 DB      0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2175 DB      0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2176 DB      0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2177 DB      0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2178 DB      0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2179 DB      0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2180 DB      0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2181 DB      0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2182 DB      0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2183 DB      0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2184 DB      0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2185 DB      0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2186 DB      0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2187 DB      0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2188 DB      0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2189 DB      0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2190 DB      0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2191 DB      0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2192         DD      0x00000001,0x00000002,0x00000004,0x00000008
2193         DD      0x00000010,0x00000020,0x00000040,0x00000080
2194         DD      0x0000001b,0x00000036,0x80808080,0x80808080
2195         DD      0xfefefefe,0xfefefefe,0x1b1b1b1b,0x1b1b1b1b
2196 ALIGN   64
2197 $L$AES_Td:
2198         DD      0x50a7f451,0x50a7f451
2199         DD      0x5365417e,0x5365417e
2200         DD      0xc3a4171a,0xc3a4171a
2201         DD      0x965e273a,0x965e273a
2202         DD      0xcb6bab3b,0xcb6bab3b
2203         DD      0xf1459d1f,0xf1459d1f
2204         DD      0xab58faac,0xab58faac
2205         DD      0x9303e34b,0x9303e34b
2206         DD      0x55fa3020,0x55fa3020
2207         DD      0xf66d76ad,0xf66d76ad
2208         DD      0x9176cc88,0x9176cc88
2209         DD      0x254c02f5,0x254c02f5
2210         DD      0xfcd7e54f,0xfcd7e54f
2211         DD      0xd7cb2ac5,0xd7cb2ac5
2212         DD      0x80443526,0x80443526
2213         DD      0x8fa362b5,0x8fa362b5
2214         DD      0x495ab1de,0x495ab1de
2215         DD      0x671bba25,0x671bba25
2216         DD      0x980eea45,0x980eea45
2217         DD      0xe1c0fe5d,0xe1c0fe5d
2218         DD      0x02752fc3,0x02752fc3
2219         DD      0x12f04c81,0x12f04c81
2220         DD      0xa397468d,0xa397468d
2221         DD      0xc6f9d36b,0xc6f9d36b
2222         DD      0xe75f8f03,0xe75f8f03
2223         DD      0x959c9215,0x959c9215
2224         DD      0xeb7a6dbf,0xeb7a6dbf
2225         DD      0xda595295,0xda595295
2226         DD      0x2d83bed4,0x2d83bed4
2227         DD      0xd3217458,0xd3217458
2228         DD      0x2969e049,0x2969e049
2229         DD      0x44c8c98e,0x44c8c98e
2230         DD      0x6a89c275,0x6a89c275
2231         DD      0x78798ef4,0x78798ef4
2232         DD      0x6b3e5899,0x6b3e5899
2233         DD      0xdd71b927,0xdd71b927
2234         DD      0xb64fe1be,0xb64fe1be
2235         DD      0x17ad88f0,0x17ad88f0
2236         DD      0x66ac20c9,0x66ac20c9
2237         DD      0xb43ace7d,0xb43ace7d
2238         DD      0x184adf63,0x184adf63
2239         DD      0x82311ae5,0x82311ae5
2240         DD      0x60335197,0x60335197
2241         DD      0x457f5362,0x457f5362
2242         DD      0xe07764b1,0xe07764b1
2243         DD      0x84ae6bbb,0x84ae6bbb
2244         DD      0x1ca081fe,0x1ca081fe
2245         DD      0x942b08f9,0x942b08f9
2246         DD      0x58684870,0x58684870
2247         DD      0x19fd458f,0x19fd458f
2248         DD      0x876cde94,0x876cde94
2249         DD      0xb7f87b52,0xb7f87b52
2250         DD      0x23d373ab,0x23d373ab
2251         DD      0xe2024b72,0xe2024b72
2252         DD      0x578f1fe3,0x578f1fe3
2253         DD      0x2aab5566,0x2aab5566
2254         DD      0x0728ebb2,0x0728ebb2
2255         DD      0x03c2b52f,0x03c2b52f
2256         DD      0x9a7bc586,0x9a7bc586
2257         DD      0xa50837d3,0xa50837d3
2258         DD      0xf2872830,0xf2872830
2259         DD      0xb2a5bf23,0xb2a5bf23
2260         DD      0xba6a0302,0xba6a0302
2261         DD      0x5c8216ed,0x5c8216ed
2262         DD      0x2b1ccf8a,0x2b1ccf8a
2263         DD      0x92b479a7,0x92b479a7
2264         DD      0xf0f207f3,0xf0f207f3
2265         DD      0xa1e2694e,0xa1e2694e
2266         DD      0xcdf4da65,0xcdf4da65
2267         DD      0xd5be0506,0xd5be0506
2268         DD      0x1f6234d1,0x1f6234d1
2269         DD      0x8afea6c4,0x8afea6c4
2270         DD      0x9d532e34,0x9d532e34
2271         DD      0xa055f3a2,0xa055f3a2
2272         DD      0x32e18a05,0x32e18a05
2273         DD      0x75ebf6a4,0x75ebf6a4
2274         DD      0x39ec830b,0x39ec830b
2275         DD      0xaaef6040,0xaaef6040
2276         DD      0x069f715e,0x069f715e
2277         DD      0x51106ebd,0x51106ebd
2278         DD      0xf98a213e,0xf98a213e
2279         DD      0x3d06dd96,0x3d06dd96
2280         DD      0xae053edd,0xae053edd
2281         DD      0x46bde64d,0x46bde64d
2282         DD      0xb58d5491,0xb58d5491
2283         DD      0x055dc471,0x055dc471
2284         DD      0x6fd40604,0x6fd40604
2285         DD      0xff155060,0xff155060
2286         DD      0x24fb9819,0x24fb9819
2287         DD      0x97e9bdd6,0x97e9bdd6
2288         DD      0xcc434089,0xcc434089
2289         DD      0x779ed967,0x779ed967
2290         DD      0xbd42e8b0,0xbd42e8b0
2291         DD      0x888b8907,0x888b8907
2292         DD      0x385b19e7,0x385b19e7
2293         DD      0xdbeec879,0xdbeec879
2294         DD      0x470a7ca1,0x470a7ca1
2295         DD      0xe90f427c,0xe90f427c
2296         DD      0xc91e84f8,0xc91e84f8
2297         DD      0x00000000,0x00000000
2298         DD      0x83868009,0x83868009
2299         DD      0x48ed2b32,0x48ed2b32
2300         DD      0xac70111e,0xac70111e
2301         DD      0x4e725a6c,0x4e725a6c
2302         DD      0xfbff0efd,0xfbff0efd
2303         DD      0x5638850f,0x5638850f
2304         DD      0x1ed5ae3d,0x1ed5ae3d
2305         DD      0x27392d36,0x27392d36
2306         DD      0x64d90f0a,0x64d90f0a
2307         DD      0x21a65c68,0x21a65c68
2308         DD      0xd1545b9b,0xd1545b9b
2309         DD      0x3a2e3624,0x3a2e3624
2310         DD      0xb1670a0c,0xb1670a0c
2311         DD      0x0fe75793,0x0fe75793
2312         DD      0xd296eeb4,0xd296eeb4
2313         DD      0x9e919b1b,0x9e919b1b
2314         DD      0x4fc5c080,0x4fc5c080
2315         DD      0xa220dc61,0xa220dc61
2316         DD      0x694b775a,0x694b775a
2317         DD      0x161a121c,0x161a121c
2318         DD      0x0aba93e2,0x0aba93e2
2319         DD      0xe52aa0c0,0xe52aa0c0
2320         DD      0x43e0223c,0x43e0223c
2321         DD      0x1d171b12,0x1d171b12
2322         DD      0x0b0d090e,0x0b0d090e
2323         DD      0xadc78bf2,0xadc78bf2
2324         DD      0xb9a8b62d,0xb9a8b62d
2325         DD      0xc8a91e14,0xc8a91e14
2326         DD      0x8519f157,0x8519f157
2327         DD      0x4c0775af,0x4c0775af
2328         DD      0xbbdd99ee,0xbbdd99ee
2329         DD      0xfd607fa3,0xfd607fa3
2330         DD      0x9f2601f7,0x9f2601f7
2331         DD      0xbcf5725c,0xbcf5725c
2332         DD      0xc53b6644,0xc53b6644
2333         DD      0x347efb5b,0x347efb5b
2334         DD      0x7629438b,0x7629438b
2335         DD      0xdcc623cb,0xdcc623cb
2336         DD      0x68fcedb6,0x68fcedb6
2337         DD      0x63f1e4b8,0x63f1e4b8
2338         DD      0xcadc31d7,0xcadc31d7
2339         DD      0x10856342,0x10856342
2340         DD      0x40229713,0x40229713
2341         DD      0x2011c684,0x2011c684
2342         DD      0x7d244a85,0x7d244a85
2343         DD      0xf83dbbd2,0xf83dbbd2
2344         DD      0x1132f9ae,0x1132f9ae
2345         DD      0x6da129c7,0x6da129c7
2346         DD      0x4b2f9e1d,0x4b2f9e1d
2347         DD      0xf330b2dc,0xf330b2dc
2348         DD      0xec52860d,0xec52860d
2349         DD      0xd0e3c177,0xd0e3c177
2350         DD      0x6c16b32b,0x6c16b32b
2351         DD      0x99b970a9,0x99b970a9
2352         DD      0xfa489411,0xfa489411
2353         DD      0x2264e947,0x2264e947
2354         DD      0xc48cfca8,0xc48cfca8
2355         DD      0x1a3ff0a0,0x1a3ff0a0
2356         DD      0xd82c7d56,0xd82c7d56
2357         DD      0xef903322,0xef903322
2358         DD      0xc74e4987,0xc74e4987
2359         DD      0xc1d138d9,0xc1d138d9
2360         DD      0xfea2ca8c,0xfea2ca8c
2361         DD      0x360bd498,0x360bd498
2362         DD      0xcf81f5a6,0xcf81f5a6
2363         DD      0x28de7aa5,0x28de7aa5
2364         DD      0x268eb7da,0x268eb7da
2365         DD      0xa4bfad3f,0xa4bfad3f
2366         DD      0xe49d3a2c,0xe49d3a2c
2367         DD      0x0d927850,0x0d927850
2368         DD      0x9bcc5f6a,0x9bcc5f6a
2369         DD      0x62467e54,0x62467e54
2370         DD      0xc2138df6,0xc2138df6
2371         DD      0xe8b8d890,0xe8b8d890
2372         DD      0x5ef7392e,0x5ef7392e
2373         DD      0xf5afc382,0xf5afc382
2374         DD      0xbe805d9f,0xbe805d9f
2375         DD      0x7c93d069,0x7c93d069
2376         DD      0xa92dd56f,0xa92dd56f
2377         DD      0xb31225cf,0xb31225cf
2378         DD      0x3b99acc8,0x3b99acc8
2379         DD      0xa77d1810,0xa77d1810
2380         DD      0x6e639ce8,0x6e639ce8
2381         DD      0x7bbb3bdb,0x7bbb3bdb
2382         DD      0x097826cd,0x097826cd
2383         DD      0xf418596e,0xf418596e
2384         DD      0x01b79aec,0x01b79aec
2385         DD      0xa89a4f83,0xa89a4f83
2386         DD      0x656e95e6,0x656e95e6
2387         DD      0x7ee6ffaa,0x7ee6ffaa
2388         DD      0x08cfbc21,0x08cfbc21
2389         DD      0xe6e815ef,0xe6e815ef
2390         DD      0xd99be7ba,0xd99be7ba
2391         DD      0xce366f4a,0xce366f4a
2392         DD      0xd4099fea,0xd4099fea
2393         DD      0xd67cb029,0xd67cb029
2394         DD      0xafb2a431,0xafb2a431
2395         DD      0x31233f2a,0x31233f2a
2396         DD      0x3094a5c6,0x3094a5c6
2397         DD      0xc066a235,0xc066a235
2398         DD      0x37bc4e74,0x37bc4e74
2399         DD      0xa6ca82fc,0xa6ca82fc
2400         DD      0xb0d090e0,0xb0d090e0
2401         DD      0x15d8a733,0x15d8a733
2402         DD      0x4a9804f1,0x4a9804f1
2403         DD      0xf7daec41,0xf7daec41
2404         DD      0x0e50cd7f,0x0e50cd7f
2405         DD      0x2ff69117,0x2ff69117
2406         DD      0x8dd64d76,0x8dd64d76
2407         DD      0x4db0ef43,0x4db0ef43
2408         DD      0x544daacc,0x544daacc
2409         DD      0xdf0496e4,0xdf0496e4
2410         DD      0xe3b5d19e,0xe3b5d19e
2411         DD      0x1b886a4c,0x1b886a4c
2412         DD      0xb81f2cc1,0xb81f2cc1
2413         DD      0x7f516546,0x7f516546
2414         DD      0x04ea5e9d,0x04ea5e9d
2415         DD      0x5d358c01,0x5d358c01
2416         DD      0x737487fa,0x737487fa
2417         DD      0x2e410bfb,0x2e410bfb
2418         DD      0x5a1d67b3,0x5a1d67b3
2419         DD      0x52d2db92,0x52d2db92
2420         DD      0x335610e9,0x335610e9
2421         DD      0x1347d66d,0x1347d66d
2422         DD      0x8c61d79a,0x8c61d79a
2423         DD      0x7a0ca137,0x7a0ca137
2424         DD      0x8e14f859,0x8e14f859
2425         DD      0x893c13eb,0x893c13eb
2426         DD      0xee27a9ce,0xee27a9ce
2427         DD      0x35c961b7,0x35c961b7
2428         DD      0xede51ce1,0xede51ce1
2429         DD      0x3cb1477a,0x3cb1477a
2430         DD      0x59dfd29c,0x59dfd29c
2431         DD      0x3f73f255,0x3f73f255
2432         DD      0x79ce1418,0x79ce1418
2433         DD      0xbf37c773,0xbf37c773
2434         DD      0xeacdf753,0xeacdf753
2435         DD      0x5baafd5f,0x5baafd5f
2436         DD      0x146f3ddf,0x146f3ddf
2437         DD      0x86db4478,0x86db4478
2438         DD      0x81f3afca,0x81f3afca
2439         DD      0x3ec468b9,0x3ec468b9
2440         DD      0x2c342438,0x2c342438
2441         DD      0x5f40a3c2,0x5f40a3c2
2442         DD      0x72c31d16,0x72c31d16
2443         DD      0x0c25e2bc,0x0c25e2bc
2444         DD      0x8b493c28,0x8b493c28
2445         DD      0x41950dff,0x41950dff
2446         DD      0x7101a839,0x7101a839
2447         DD      0xdeb30c08,0xdeb30c08
2448         DD      0x9ce4b4d8,0x9ce4b4d8
2449         DD      0x90c15664,0x90c15664
2450         DD      0x6184cb7b,0x6184cb7b
2451         DD      0x70b632d5,0x70b632d5
2452         DD      0x745c6c48,0x745c6c48
2453         DD      0x4257b8d0,0x4257b8d0
2454 DB      0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2455 DB      0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2456 DB      0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2457 DB      0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2458 DB      0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2459 DB      0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2460 DB      0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2461 DB      0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2462 DB      0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2463 DB      0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2464 DB      0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2465 DB      0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2466 DB      0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2467 DB      0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2468 DB      0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2469 DB      0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2470 DB      0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2471 DB      0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2472 DB      0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2473 DB      0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2474 DB      0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2475 DB      0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2476 DB      0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2477 DB      0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2478 DB      0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2479 DB      0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2480 DB      0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2481 DB      0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2482 DB      0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2483 DB      0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2484 DB      0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2485 DB      0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2486         DD      0x80808080,0x80808080,0xfefefefe,0xfefefefe
2487         DD      0x1b1b1b1b,0x1b1b1b1b,0,0
2488 DB      0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2489 DB      0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2490 DB      0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2491 DB      0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2492 DB      0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2493 DB      0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2494 DB      0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2495 DB      0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2496 DB      0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2497 DB      0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2498 DB      0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2499 DB      0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2500 DB      0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2501 DB      0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2502 DB      0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2503 DB      0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2504 DB      0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2505 DB      0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2506 DB      0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2507 DB      0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2508 DB      0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2509 DB      0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2510 DB      0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2511 DB      0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2512 DB      0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2513 DB      0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2514 DB      0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2515 DB      0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2516 DB      0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2517 DB      0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2518 DB      0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2519 DB      0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2520         DD      0x80808080,0x80808080,0xfefefefe,0xfefefefe
2521         DD      0x1b1b1b1b,0x1b1b1b1b,0,0
2522 DB      0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2523 DB      0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2524 DB      0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2525 DB      0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2526 DB      0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2527 DB      0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2528 DB      0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2529 DB      0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2530 DB      0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2531 DB      0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2532 DB      0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2533 DB      0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2534 DB      0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2535 DB      0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2536 DB      0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2537 DB      0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2538 DB      0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2539 DB      0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2540 DB      0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2541 DB      0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2542 DB      0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2543 DB      0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2544 DB      0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2545 DB      0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2546 DB      0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2547 DB      0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2548 DB      0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2549 DB      0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2550 DB      0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2551 DB      0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2552 DB      0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2553 DB      0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2554         DD      0x80808080,0x80808080,0xfefefefe,0xfefefefe
2555         DD      0x1b1b1b1b,0x1b1b1b1b,0,0
2556 DB      0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2557 DB      0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2558 DB      0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2559 DB      0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2560 DB      0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2561 DB      0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2562 DB      0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2563 DB      0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2564 DB      0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2565 DB      0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2566 DB      0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2567 DB      0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2568 DB      0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2569 DB      0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2570 DB      0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2571 DB      0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2572 DB      0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2573 DB      0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2574 DB      0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2575 DB      0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2576 DB      0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2577 DB      0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2578 DB      0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2579 DB      0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2580 DB      0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2581 DB      0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2582 DB      0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2583 DB      0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2584 DB      0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2585 DB      0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2586 DB      0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2587 DB      0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2588         DD      0x80808080,0x80808080,0xfefefefe,0xfefefefe
2589         DD      0x1b1b1b1b,0x1b1b1b1b,0,0
2590 DB      65,69,83,32,102,111,114,32,120,56,54,95,54,52,44,32
2591 DB      67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
2592 DB      112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
2593 DB      62,0
2594 ALIGN   64
2595 EXTERN  __imp_RtlVirtualUnwind
2596
2597 ALIGN   16
2598 block_se_handler:
2599         push    rsi
2600         push    rdi
2601         push    rbx
2602         push    rbp
2603         push    r12
2604         push    r13
2605         push    r14
2606         push    r15
2607         pushfq
2608         sub     rsp,64
2609
2610         mov     rax,QWORD[120+r8]
2611         mov     rbx,QWORD[248+r8]
2612
2613         mov     rsi,QWORD[8+r9]
2614         mov     r11,QWORD[56+r9]
2615
2616         mov     r10d,DWORD[r11]
2617         lea     r10,[r10*1+rsi]
2618         cmp     rbx,r10
2619         jb      NEAR $L$in_block_prologue
2620
2621         mov     rax,QWORD[152+r8]
2622
2623         mov     r10d,DWORD[4+r11]
2624         lea     r10,[r10*1+rsi]
2625         cmp     rbx,r10
2626         jae     NEAR $L$in_block_prologue
2627
2628         mov     rax,QWORD[24+rax]
2629         lea     rax,[48+rax]
2630
2631         mov     rbx,QWORD[((-8))+rax]
2632         mov     rbp,QWORD[((-16))+rax]
2633         mov     r12,QWORD[((-24))+rax]
2634         mov     r13,QWORD[((-32))+rax]
2635         mov     r14,QWORD[((-40))+rax]
2636         mov     r15,QWORD[((-48))+rax]
2637         mov     QWORD[144+r8],rbx
2638         mov     QWORD[160+r8],rbp
2639         mov     QWORD[216+r8],r12
2640         mov     QWORD[224+r8],r13
2641         mov     QWORD[232+r8],r14
2642         mov     QWORD[240+r8],r15
2643
2644 $L$in_block_prologue:
2645         mov     rdi,QWORD[8+rax]
2646         mov     rsi,QWORD[16+rax]
2647         mov     QWORD[152+r8],rax
2648         mov     QWORD[168+r8],rsi
2649         mov     QWORD[176+r8],rdi
2650
2651         jmp     NEAR $L$common_seh_exit
2652
2653
2654
2655 ALIGN   16
2656 key_se_handler:
2657         push    rsi
2658         push    rdi
2659         push    rbx
2660         push    rbp
2661         push    r12
2662         push    r13
2663         push    r14
2664         push    r15
2665         pushfq
2666         sub     rsp,64
2667
2668         mov     rax,QWORD[120+r8]
2669         mov     rbx,QWORD[248+r8]
2670
2671         mov     rsi,QWORD[8+r9]
2672         mov     r11,QWORD[56+r9]
2673
2674         mov     r10d,DWORD[r11]
2675         lea     r10,[r10*1+rsi]
2676         cmp     rbx,r10
2677         jb      NEAR $L$in_key_prologue
2678
2679         mov     rax,QWORD[152+r8]
2680
2681         mov     r10d,DWORD[4+r11]
2682         lea     r10,[r10*1+rsi]
2683         cmp     rbx,r10
2684         jae     NEAR $L$in_key_prologue
2685
2686         lea     rax,[56+rax]
2687
2688         mov     rbx,QWORD[((-8))+rax]
2689         mov     rbp,QWORD[((-16))+rax]
2690         mov     r12,QWORD[((-24))+rax]
2691         mov     r13,QWORD[((-32))+rax]
2692         mov     r14,QWORD[((-40))+rax]
2693         mov     r15,QWORD[((-48))+rax]
2694         mov     QWORD[144+r8],rbx
2695         mov     QWORD[160+r8],rbp
2696         mov     QWORD[216+r8],r12
2697         mov     QWORD[224+r8],r13
2698         mov     QWORD[232+r8],r14
2699         mov     QWORD[240+r8],r15
2700
2701 $L$in_key_prologue:
2702         mov     rdi,QWORD[8+rax]
2703         mov     rsi,QWORD[16+rax]
2704         mov     QWORD[152+r8],rax
2705         mov     QWORD[168+r8],rsi
2706         mov     QWORD[176+r8],rdi
2707
2708         jmp     NEAR $L$common_seh_exit
2709
2710
2711
2712 ALIGN   16
2713 cbc_se_handler:
2714         push    rsi
2715         push    rdi
2716         push    rbx
2717         push    rbp
2718         push    r12
2719         push    r13
2720         push    r14
2721         push    r15
2722         pushfq
2723         sub     rsp,64
2724
2725         mov     rax,QWORD[120+r8]
2726         mov     rbx,QWORD[248+r8]
2727
2728         lea     r10,[$L$cbc_prologue]
2729         cmp     rbx,r10
2730         jb      NEAR $L$in_cbc_prologue
2731
2732         lea     r10,[$L$cbc_fast_body]
2733         cmp     rbx,r10
2734         jb      NEAR $L$in_cbc_frame_setup
2735
2736         lea     r10,[$L$cbc_slow_prologue]
2737         cmp     rbx,r10
2738         jb      NEAR $L$in_cbc_body
2739
2740         lea     r10,[$L$cbc_slow_body]
2741         cmp     rbx,r10
2742         jb      NEAR $L$in_cbc_frame_setup
2743
2744 $L$in_cbc_body:
2745         mov     rax,QWORD[152+r8]
2746
2747         lea     r10,[$L$cbc_epilogue]
2748         cmp     rbx,r10
2749         jae     NEAR $L$in_cbc_prologue
2750
2751         lea     rax,[8+rax]
2752
2753         lea     r10,[$L$cbc_popfq]
2754         cmp     rbx,r10
2755         jae     NEAR $L$in_cbc_prologue
2756
2757         mov     rax,QWORD[8+rax]
2758         lea     rax,[56+rax]
2759
2760 $L$in_cbc_frame_setup:
2761         mov     rbx,QWORD[((-16))+rax]
2762         mov     rbp,QWORD[((-24))+rax]
2763         mov     r12,QWORD[((-32))+rax]
2764         mov     r13,QWORD[((-40))+rax]
2765         mov     r14,QWORD[((-48))+rax]
2766         mov     r15,QWORD[((-56))+rax]
2767         mov     QWORD[144+r8],rbx
2768         mov     QWORD[160+r8],rbp
2769         mov     QWORD[216+r8],r12
2770         mov     QWORD[224+r8],r13
2771         mov     QWORD[232+r8],r14
2772         mov     QWORD[240+r8],r15
2773
2774 $L$in_cbc_prologue:
2775         mov     rdi,QWORD[8+rax]
2776         mov     rsi,QWORD[16+rax]
2777         mov     QWORD[152+r8],rax
2778         mov     QWORD[168+r8],rsi
2779         mov     QWORD[176+r8],rdi
2780
2781 $L$common_seh_exit:
2782
2783         mov     rdi,QWORD[40+r9]
2784         mov     rsi,r8
2785         mov     ecx,154
2786         DD      0xa548f3fc
2787
2788         mov     rsi,r9
2789         xor     rcx,rcx
2790         mov     rdx,QWORD[8+rsi]
2791         mov     r8,QWORD[rsi]
2792         mov     r9,QWORD[16+rsi]
2793         mov     r10,QWORD[40+rsi]
2794         lea     r11,[56+rsi]
2795         lea     r12,[24+rsi]
2796         mov     QWORD[32+rsp],r10
2797         mov     QWORD[40+rsp],r11
2798         mov     QWORD[48+rsp],r12
2799         mov     QWORD[56+rsp],rcx
2800         call    QWORD[__imp_RtlVirtualUnwind]
2801
2802         mov     eax,1
2803         add     rsp,64
2804         popfq
2805         pop     r15
2806         pop     r14
2807         pop     r13
2808         pop     r12
2809         pop     rbp
2810         pop     rbx
2811         pop     rdi
2812         pop     rsi
2813         DB      0F3h,0C3h               ;repret
2814
2815
2816 section .pdata rdata align=4
2817 ALIGN   4
2818         DD      $L$SEH_begin_asm_AES_encrypt wrt ..imagebase
2819         DD      $L$SEH_end_asm_AES_encrypt wrt ..imagebase
2820         DD      $L$SEH_info_asm_AES_encrypt wrt ..imagebase
2821
2822         DD      $L$SEH_begin_asm_AES_decrypt wrt ..imagebase
2823         DD      $L$SEH_end_asm_AES_decrypt wrt ..imagebase
2824         DD      $L$SEH_info_asm_AES_decrypt wrt ..imagebase
2825
2826         DD      $L$SEH_begin_asm_AES_set_encrypt_key wrt ..imagebase
2827         DD      $L$SEH_end_asm_AES_set_encrypt_key wrt ..imagebase
2828         DD      $L$SEH_info_asm_AES_set_encrypt_key wrt ..imagebase
2829
2830         DD      $L$SEH_begin_asm_AES_set_decrypt_key wrt ..imagebase
2831         DD      $L$SEH_end_asm_AES_set_decrypt_key wrt ..imagebase
2832         DD      $L$SEH_info_asm_AES_set_decrypt_key wrt ..imagebase
2833
2834         DD      $L$SEH_begin_asm_AES_cbc_encrypt wrt ..imagebase
2835         DD      $L$SEH_end_asm_AES_cbc_encrypt wrt ..imagebase
2836         DD      $L$SEH_info_asm_AES_cbc_encrypt wrt ..imagebase
2837
2838 section .xdata rdata align=8
2839 ALIGN   8
2840 $L$SEH_info_asm_AES_encrypt:
2841 DB      9,0,0,0
2842         DD      block_se_handler wrt ..imagebase
2843         DD      $L$enc_prologue wrt ..imagebase,$L$enc_epilogue wrt ..imagebase
2844 $L$SEH_info_asm_AES_decrypt:
2845 DB      9,0,0,0
2846         DD      block_se_handler wrt ..imagebase
2847         DD      $L$dec_prologue wrt ..imagebase,$L$dec_epilogue wrt ..imagebase
2848 $L$SEH_info_asm_AES_set_encrypt_key:
2849 DB      9,0,0,0
2850         DD      key_se_handler wrt ..imagebase
2851         DD      $L$enc_key_prologue wrt ..imagebase,$L$enc_key_epilogue wrt ..imagebase
2852 $L$SEH_info_asm_AES_set_decrypt_key:
2853 DB      9,0,0,0
2854         DD      key_se_handler wrt ..imagebase
2855         DD      $L$dec_key_prologue wrt ..imagebase,$L$dec_key_epilogue wrt ..imagebase
2856 $L$SEH_info_asm_AES_cbc_encrypt:
2857 DB      9,0,0,0
2858         DD      cbc_se_handler wrt ..imagebase