Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / boringssl / win-x86_64 / crypto / sha / sha256-x86_64.asm
1 default rel
2 %define XMMWORD
3 %define YMMWORD
4 %define ZMMWORD
5 section .text code align=64
6
7
8 EXTERN  OPENSSL_ia32cap_P
9 global  sha256_block_data_order
10
11 ALIGN   16
12 sha256_block_data_order:
13         mov     QWORD[8+rsp],rdi        ;WIN64 prologue
14         mov     QWORD[16+rsp],rsi
15         mov     rax,rsp
16 $L$SEH_begin_sha256_block_data_order:
17         mov     rdi,rcx
18         mov     rsi,rdx
19         mov     rdx,r8
20
21
22         lea     r11,[OPENSSL_ia32cap_P]
23         mov     r9d,DWORD[r11]
24         mov     r10d,DWORD[4+r11]
25         mov     r11d,DWORD[8+r11]
26         test    r10d,512
27         jnz     NEAR $L$ssse3_shortcut
28         push    rbx
29         push    rbp
30         push    r12
31         push    r13
32         push    r14
33         push    r15
34         mov     r11,rsp
35         shl     rdx,4
36         sub     rsp,16*4+4*8
37         lea     rdx,[rdx*4+rsi]
38         and     rsp,-64
39         mov     QWORD[((64+0))+rsp],rdi
40         mov     QWORD[((64+8))+rsp],rsi
41         mov     QWORD[((64+16))+rsp],rdx
42         mov     QWORD[((64+24))+rsp],r11
43 $L$prologue:
44
45         mov     eax,DWORD[rdi]
46         mov     ebx,DWORD[4+rdi]
47         mov     ecx,DWORD[8+rdi]
48         mov     edx,DWORD[12+rdi]
49         mov     r8d,DWORD[16+rdi]
50         mov     r9d,DWORD[20+rdi]
51         mov     r10d,DWORD[24+rdi]
52         mov     r11d,DWORD[28+rdi]
53         jmp     NEAR $L$loop
54
55 ALIGN   16
56 $L$loop:
57         mov     edi,ebx
58         lea     rbp,[K256]
59         xor     edi,ecx
60         mov     r12d,DWORD[rsi]
61         mov     r13d,r8d
62         mov     r14d,eax
63         bswap   r12d
64         ror     r13d,14
65         mov     r15d,r9d
66
67         xor     r13d,r8d
68         ror     r14d,9
69         xor     r15d,r10d
70
71         mov     DWORD[rsp],r12d
72         xor     r14d,eax
73         and     r15d,r8d
74
75         ror     r13d,5
76         add     r12d,r11d
77         xor     r15d,r10d
78
79         ror     r14d,11
80         xor     r13d,r8d
81         add     r12d,r15d
82
83         mov     r15d,eax
84         add     r12d,DWORD[rbp]
85         xor     r14d,eax
86
87         xor     r15d,ebx
88         ror     r13d,6
89         mov     r11d,ebx
90
91         and     edi,r15d
92         ror     r14d,2
93         add     r12d,r13d
94
95         xor     r11d,edi
96         add     edx,r12d
97         add     r11d,r12d
98
99         lea     rbp,[4+rbp]
100         add     r11d,r14d
101         mov     r12d,DWORD[4+rsi]
102         mov     r13d,edx
103         mov     r14d,r11d
104         bswap   r12d
105         ror     r13d,14
106         mov     edi,r8d
107
108         xor     r13d,edx
109         ror     r14d,9
110         xor     edi,r9d
111
112         mov     DWORD[4+rsp],r12d
113         xor     r14d,r11d
114         and     edi,edx
115
116         ror     r13d,5
117         add     r12d,r10d
118         xor     edi,r9d
119
120         ror     r14d,11
121         xor     r13d,edx
122         add     r12d,edi
123
124         mov     edi,r11d
125         add     r12d,DWORD[rbp]
126         xor     r14d,r11d
127
128         xor     edi,eax
129         ror     r13d,6
130         mov     r10d,eax
131
132         and     r15d,edi
133         ror     r14d,2
134         add     r12d,r13d
135
136         xor     r10d,r15d
137         add     ecx,r12d
138         add     r10d,r12d
139
140         lea     rbp,[4+rbp]
141         add     r10d,r14d
142         mov     r12d,DWORD[8+rsi]
143         mov     r13d,ecx
144         mov     r14d,r10d
145         bswap   r12d
146         ror     r13d,14
147         mov     r15d,edx
148
149         xor     r13d,ecx
150         ror     r14d,9
151         xor     r15d,r8d
152
153         mov     DWORD[8+rsp],r12d
154         xor     r14d,r10d
155         and     r15d,ecx
156
157         ror     r13d,5
158         add     r12d,r9d
159         xor     r15d,r8d
160
161         ror     r14d,11
162         xor     r13d,ecx
163         add     r12d,r15d
164
165         mov     r15d,r10d
166         add     r12d,DWORD[rbp]
167         xor     r14d,r10d
168
169         xor     r15d,r11d
170         ror     r13d,6
171         mov     r9d,r11d
172
173         and     edi,r15d
174         ror     r14d,2
175         add     r12d,r13d
176
177         xor     r9d,edi
178         add     ebx,r12d
179         add     r9d,r12d
180
181         lea     rbp,[4+rbp]
182         add     r9d,r14d
183         mov     r12d,DWORD[12+rsi]
184         mov     r13d,ebx
185         mov     r14d,r9d
186         bswap   r12d
187         ror     r13d,14
188         mov     edi,ecx
189
190         xor     r13d,ebx
191         ror     r14d,9
192         xor     edi,edx
193
194         mov     DWORD[12+rsp],r12d
195         xor     r14d,r9d
196         and     edi,ebx
197
198         ror     r13d,5
199         add     r12d,r8d
200         xor     edi,edx
201
202         ror     r14d,11
203         xor     r13d,ebx
204         add     r12d,edi
205
206         mov     edi,r9d
207         add     r12d,DWORD[rbp]
208         xor     r14d,r9d
209
210         xor     edi,r10d
211         ror     r13d,6
212         mov     r8d,r10d
213
214         and     r15d,edi
215         ror     r14d,2
216         add     r12d,r13d
217
218         xor     r8d,r15d
219         add     eax,r12d
220         add     r8d,r12d
221
222         lea     rbp,[20+rbp]
223         add     r8d,r14d
224         mov     r12d,DWORD[16+rsi]
225         mov     r13d,eax
226         mov     r14d,r8d
227         bswap   r12d
228         ror     r13d,14
229         mov     r15d,ebx
230
231         xor     r13d,eax
232         ror     r14d,9
233         xor     r15d,ecx
234
235         mov     DWORD[16+rsp],r12d
236         xor     r14d,r8d
237         and     r15d,eax
238
239         ror     r13d,5
240         add     r12d,edx
241         xor     r15d,ecx
242
243         ror     r14d,11
244         xor     r13d,eax
245         add     r12d,r15d
246
247         mov     r15d,r8d
248         add     r12d,DWORD[rbp]
249         xor     r14d,r8d
250
251         xor     r15d,r9d
252         ror     r13d,6
253         mov     edx,r9d
254
255         and     edi,r15d
256         ror     r14d,2
257         add     r12d,r13d
258
259         xor     edx,edi
260         add     r11d,r12d
261         add     edx,r12d
262
263         lea     rbp,[4+rbp]
264         add     edx,r14d
265         mov     r12d,DWORD[20+rsi]
266         mov     r13d,r11d
267         mov     r14d,edx
268         bswap   r12d
269         ror     r13d,14
270         mov     edi,eax
271
272         xor     r13d,r11d
273         ror     r14d,9
274         xor     edi,ebx
275
276         mov     DWORD[20+rsp],r12d
277         xor     r14d,edx
278         and     edi,r11d
279
280         ror     r13d,5
281         add     r12d,ecx
282         xor     edi,ebx
283
284         ror     r14d,11
285         xor     r13d,r11d
286         add     r12d,edi
287
288         mov     edi,edx
289         add     r12d,DWORD[rbp]
290         xor     r14d,edx
291
292         xor     edi,r8d
293         ror     r13d,6
294         mov     ecx,r8d
295
296         and     r15d,edi
297         ror     r14d,2
298         add     r12d,r13d
299
300         xor     ecx,r15d
301         add     r10d,r12d
302         add     ecx,r12d
303
304         lea     rbp,[4+rbp]
305         add     ecx,r14d
306         mov     r12d,DWORD[24+rsi]
307         mov     r13d,r10d
308         mov     r14d,ecx
309         bswap   r12d
310         ror     r13d,14
311         mov     r15d,r11d
312
313         xor     r13d,r10d
314         ror     r14d,9
315         xor     r15d,eax
316
317         mov     DWORD[24+rsp],r12d
318         xor     r14d,ecx
319         and     r15d,r10d
320
321         ror     r13d,5
322         add     r12d,ebx
323         xor     r15d,eax
324
325         ror     r14d,11
326         xor     r13d,r10d
327         add     r12d,r15d
328
329         mov     r15d,ecx
330         add     r12d,DWORD[rbp]
331         xor     r14d,ecx
332
333         xor     r15d,edx
334         ror     r13d,6
335         mov     ebx,edx
336
337         and     edi,r15d
338         ror     r14d,2
339         add     r12d,r13d
340
341         xor     ebx,edi
342         add     r9d,r12d
343         add     ebx,r12d
344
345         lea     rbp,[4+rbp]
346         add     ebx,r14d
347         mov     r12d,DWORD[28+rsi]
348         mov     r13d,r9d
349         mov     r14d,ebx
350         bswap   r12d
351         ror     r13d,14
352         mov     edi,r10d
353
354         xor     r13d,r9d
355         ror     r14d,9
356         xor     edi,r11d
357
358         mov     DWORD[28+rsp],r12d
359         xor     r14d,ebx
360         and     edi,r9d
361
362         ror     r13d,5
363         add     r12d,eax
364         xor     edi,r11d
365
366         ror     r14d,11
367         xor     r13d,r9d
368         add     r12d,edi
369
370         mov     edi,ebx
371         add     r12d,DWORD[rbp]
372         xor     r14d,ebx
373
374         xor     edi,ecx
375         ror     r13d,6
376         mov     eax,ecx
377
378         and     r15d,edi
379         ror     r14d,2
380         add     r12d,r13d
381
382         xor     eax,r15d
383         add     r8d,r12d
384         add     eax,r12d
385
386         lea     rbp,[20+rbp]
387         add     eax,r14d
388         mov     r12d,DWORD[32+rsi]
389         mov     r13d,r8d
390         mov     r14d,eax
391         bswap   r12d
392         ror     r13d,14
393         mov     r15d,r9d
394
395         xor     r13d,r8d
396         ror     r14d,9
397         xor     r15d,r10d
398
399         mov     DWORD[32+rsp],r12d
400         xor     r14d,eax
401         and     r15d,r8d
402
403         ror     r13d,5
404         add     r12d,r11d
405         xor     r15d,r10d
406
407         ror     r14d,11
408         xor     r13d,r8d
409         add     r12d,r15d
410
411         mov     r15d,eax
412         add     r12d,DWORD[rbp]
413         xor     r14d,eax
414
415         xor     r15d,ebx
416         ror     r13d,6
417         mov     r11d,ebx
418
419         and     edi,r15d
420         ror     r14d,2
421         add     r12d,r13d
422
423         xor     r11d,edi
424         add     edx,r12d
425         add     r11d,r12d
426
427         lea     rbp,[4+rbp]
428         add     r11d,r14d
429         mov     r12d,DWORD[36+rsi]
430         mov     r13d,edx
431         mov     r14d,r11d
432         bswap   r12d
433         ror     r13d,14
434         mov     edi,r8d
435
436         xor     r13d,edx
437         ror     r14d,9
438         xor     edi,r9d
439
440         mov     DWORD[36+rsp],r12d
441         xor     r14d,r11d
442         and     edi,edx
443
444         ror     r13d,5
445         add     r12d,r10d
446         xor     edi,r9d
447
448         ror     r14d,11
449         xor     r13d,edx
450         add     r12d,edi
451
452         mov     edi,r11d
453         add     r12d,DWORD[rbp]
454         xor     r14d,r11d
455
456         xor     edi,eax
457         ror     r13d,6
458         mov     r10d,eax
459
460         and     r15d,edi
461         ror     r14d,2
462         add     r12d,r13d
463
464         xor     r10d,r15d
465         add     ecx,r12d
466         add     r10d,r12d
467
468         lea     rbp,[4+rbp]
469         add     r10d,r14d
470         mov     r12d,DWORD[40+rsi]
471         mov     r13d,ecx
472         mov     r14d,r10d
473         bswap   r12d
474         ror     r13d,14
475         mov     r15d,edx
476
477         xor     r13d,ecx
478         ror     r14d,9
479         xor     r15d,r8d
480
481         mov     DWORD[40+rsp],r12d
482         xor     r14d,r10d
483         and     r15d,ecx
484
485         ror     r13d,5
486         add     r12d,r9d
487         xor     r15d,r8d
488
489         ror     r14d,11
490         xor     r13d,ecx
491         add     r12d,r15d
492
493         mov     r15d,r10d
494         add     r12d,DWORD[rbp]
495         xor     r14d,r10d
496
497         xor     r15d,r11d
498         ror     r13d,6
499         mov     r9d,r11d
500
501         and     edi,r15d
502         ror     r14d,2
503         add     r12d,r13d
504
505         xor     r9d,edi
506         add     ebx,r12d
507         add     r9d,r12d
508
509         lea     rbp,[4+rbp]
510         add     r9d,r14d
511         mov     r12d,DWORD[44+rsi]
512         mov     r13d,ebx
513         mov     r14d,r9d
514         bswap   r12d
515         ror     r13d,14
516         mov     edi,ecx
517
518         xor     r13d,ebx
519         ror     r14d,9
520         xor     edi,edx
521
522         mov     DWORD[44+rsp],r12d
523         xor     r14d,r9d
524         and     edi,ebx
525
526         ror     r13d,5
527         add     r12d,r8d
528         xor     edi,edx
529
530         ror     r14d,11
531         xor     r13d,ebx
532         add     r12d,edi
533
534         mov     edi,r9d
535         add     r12d,DWORD[rbp]
536         xor     r14d,r9d
537
538         xor     edi,r10d
539         ror     r13d,6
540         mov     r8d,r10d
541
542         and     r15d,edi
543         ror     r14d,2
544         add     r12d,r13d
545
546         xor     r8d,r15d
547         add     eax,r12d
548         add     r8d,r12d
549
550         lea     rbp,[20+rbp]
551         add     r8d,r14d
552         mov     r12d,DWORD[48+rsi]
553         mov     r13d,eax
554         mov     r14d,r8d
555         bswap   r12d
556         ror     r13d,14
557         mov     r15d,ebx
558
559         xor     r13d,eax
560         ror     r14d,9
561         xor     r15d,ecx
562
563         mov     DWORD[48+rsp],r12d
564         xor     r14d,r8d
565         and     r15d,eax
566
567         ror     r13d,5
568         add     r12d,edx
569         xor     r15d,ecx
570
571         ror     r14d,11
572         xor     r13d,eax
573         add     r12d,r15d
574
575         mov     r15d,r8d
576         add     r12d,DWORD[rbp]
577         xor     r14d,r8d
578
579         xor     r15d,r9d
580         ror     r13d,6
581         mov     edx,r9d
582
583         and     edi,r15d
584         ror     r14d,2
585         add     r12d,r13d
586
587         xor     edx,edi
588         add     r11d,r12d
589         add     edx,r12d
590
591         lea     rbp,[4+rbp]
592         add     edx,r14d
593         mov     r12d,DWORD[52+rsi]
594         mov     r13d,r11d
595         mov     r14d,edx
596         bswap   r12d
597         ror     r13d,14
598         mov     edi,eax
599
600         xor     r13d,r11d
601         ror     r14d,9
602         xor     edi,ebx
603
604         mov     DWORD[52+rsp],r12d
605         xor     r14d,edx
606         and     edi,r11d
607
608         ror     r13d,5
609         add     r12d,ecx
610         xor     edi,ebx
611
612         ror     r14d,11
613         xor     r13d,r11d
614         add     r12d,edi
615
616         mov     edi,edx
617         add     r12d,DWORD[rbp]
618         xor     r14d,edx
619
620         xor     edi,r8d
621         ror     r13d,6
622         mov     ecx,r8d
623
624         and     r15d,edi
625         ror     r14d,2
626         add     r12d,r13d
627
628         xor     ecx,r15d
629         add     r10d,r12d
630         add     ecx,r12d
631
632         lea     rbp,[4+rbp]
633         add     ecx,r14d
634         mov     r12d,DWORD[56+rsi]
635         mov     r13d,r10d
636         mov     r14d,ecx
637         bswap   r12d
638         ror     r13d,14
639         mov     r15d,r11d
640
641         xor     r13d,r10d
642         ror     r14d,9
643         xor     r15d,eax
644
645         mov     DWORD[56+rsp],r12d
646         xor     r14d,ecx
647         and     r15d,r10d
648
649         ror     r13d,5
650         add     r12d,ebx
651         xor     r15d,eax
652
653         ror     r14d,11
654         xor     r13d,r10d
655         add     r12d,r15d
656
657         mov     r15d,ecx
658         add     r12d,DWORD[rbp]
659         xor     r14d,ecx
660
661         xor     r15d,edx
662         ror     r13d,6
663         mov     ebx,edx
664
665         and     edi,r15d
666         ror     r14d,2
667         add     r12d,r13d
668
669         xor     ebx,edi
670         add     r9d,r12d
671         add     ebx,r12d
672
673         lea     rbp,[4+rbp]
674         add     ebx,r14d
675         mov     r12d,DWORD[60+rsi]
676         mov     r13d,r9d
677         mov     r14d,ebx
678         bswap   r12d
679         ror     r13d,14
680         mov     edi,r10d
681
682         xor     r13d,r9d
683         ror     r14d,9
684         xor     edi,r11d
685
686         mov     DWORD[60+rsp],r12d
687         xor     r14d,ebx
688         and     edi,r9d
689
690         ror     r13d,5
691         add     r12d,eax
692         xor     edi,r11d
693
694         ror     r14d,11
695         xor     r13d,r9d
696         add     r12d,edi
697
698         mov     edi,ebx
699         add     r12d,DWORD[rbp]
700         xor     r14d,ebx
701
702         xor     edi,ecx
703         ror     r13d,6
704         mov     eax,ecx
705
706         and     r15d,edi
707         ror     r14d,2
708         add     r12d,r13d
709
710         xor     eax,r15d
711         add     r8d,r12d
712         add     eax,r12d
713
714         lea     rbp,[20+rbp]
715         jmp     NEAR $L$rounds_16_xx
716 ALIGN   16
717 $L$rounds_16_xx:
718         mov     r13d,DWORD[4+rsp]
719         mov     r15d,DWORD[56+rsp]
720
721         mov     r12d,r13d
722         ror     r13d,11
723         add     eax,r14d
724         mov     r14d,r15d
725         ror     r15d,2
726
727         xor     r13d,r12d
728         shr     r12d,3
729         ror     r13d,7
730         xor     r15d,r14d
731         shr     r14d,10
732
733         ror     r15d,17
734         xor     r12d,r13d
735         xor     r15d,r14d
736         add     r12d,DWORD[36+rsp]
737
738         add     r12d,DWORD[rsp]
739         mov     r13d,r8d
740         add     r12d,r15d
741         mov     r14d,eax
742         ror     r13d,14
743         mov     r15d,r9d
744
745         xor     r13d,r8d
746         ror     r14d,9
747         xor     r15d,r10d
748
749         mov     DWORD[rsp],r12d
750         xor     r14d,eax
751         and     r15d,r8d
752
753         ror     r13d,5
754         add     r12d,r11d
755         xor     r15d,r10d
756
757         ror     r14d,11
758         xor     r13d,r8d
759         add     r12d,r15d
760
761         mov     r15d,eax
762         add     r12d,DWORD[rbp]
763         xor     r14d,eax
764
765         xor     r15d,ebx
766         ror     r13d,6
767         mov     r11d,ebx
768
769         and     edi,r15d
770         ror     r14d,2
771         add     r12d,r13d
772
773         xor     r11d,edi
774         add     edx,r12d
775         add     r11d,r12d
776
777         lea     rbp,[4+rbp]
778         mov     r13d,DWORD[8+rsp]
779         mov     edi,DWORD[60+rsp]
780
781         mov     r12d,r13d
782         ror     r13d,11
783         add     r11d,r14d
784         mov     r14d,edi
785         ror     edi,2
786
787         xor     r13d,r12d
788         shr     r12d,3
789         ror     r13d,7
790         xor     edi,r14d
791         shr     r14d,10
792
793         ror     edi,17
794         xor     r12d,r13d
795         xor     edi,r14d
796         add     r12d,DWORD[40+rsp]
797
798         add     r12d,DWORD[4+rsp]
799         mov     r13d,edx
800         add     r12d,edi
801         mov     r14d,r11d
802         ror     r13d,14
803         mov     edi,r8d
804
805         xor     r13d,edx
806         ror     r14d,9
807         xor     edi,r9d
808
809         mov     DWORD[4+rsp],r12d
810         xor     r14d,r11d
811         and     edi,edx
812
813         ror     r13d,5
814         add     r12d,r10d
815         xor     edi,r9d
816
817         ror     r14d,11
818         xor     r13d,edx
819         add     r12d,edi
820
821         mov     edi,r11d
822         add     r12d,DWORD[rbp]
823         xor     r14d,r11d
824
825         xor     edi,eax
826         ror     r13d,6
827         mov     r10d,eax
828
829         and     r15d,edi
830         ror     r14d,2
831         add     r12d,r13d
832
833         xor     r10d,r15d
834         add     ecx,r12d
835         add     r10d,r12d
836
837         lea     rbp,[4+rbp]
838         mov     r13d,DWORD[12+rsp]
839         mov     r15d,DWORD[rsp]
840
841         mov     r12d,r13d
842         ror     r13d,11
843         add     r10d,r14d
844         mov     r14d,r15d
845         ror     r15d,2
846
847         xor     r13d,r12d
848         shr     r12d,3
849         ror     r13d,7
850         xor     r15d,r14d
851         shr     r14d,10
852
853         ror     r15d,17
854         xor     r12d,r13d
855         xor     r15d,r14d
856         add     r12d,DWORD[44+rsp]
857
858         add     r12d,DWORD[8+rsp]
859         mov     r13d,ecx
860         add     r12d,r15d
861         mov     r14d,r10d
862         ror     r13d,14
863         mov     r15d,edx
864
865         xor     r13d,ecx
866         ror     r14d,9
867         xor     r15d,r8d
868
869         mov     DWORD[8+rsp],r12d
870         xor     r14d,r10d
871         and     r15d,ecx
872
873         ror     r13d,5
874         add     r12d,r9d
875         xor     r15d,r8d
876
877         ror     r14d,11
878         xor     r13d,ecx
879         add     r12d,r15d
880
881         mov     r15d,r10d
882         add     r12d,DWORD[rbp]
883         xor     r14d,r10d
884
885         xor     r15d,r11d
886         ror     r13d,6
887         mov     r9d,r11d
888
889         and     edi,r15d
890         ror     r14d,2
891         add     r12d,r13d
892
893         xor     r9d,edi
894         add     ebx,r12d
895         add     r9d,r12d
896
897         lea     rbp,[4+rbp]
898         mov     r13d,DWORD[16+rsp]
899         mov     edi,DWORD[4+rsp]
900
901         mov     r12d,r13d
902         ror     r13d,11
903         add     r9d,r14d
904         mov     r14d,edi
905         ror     edi,2
906
907         xor     r13d,r12d
908         shr     r12d,3
909         ror     r13d,7
910         xor     edi,r14d
911         shr     r14d,10
912
913         ror     edi,17
914         xor     r12d,r13d
915         xor     edi,r14d
916         add     r12d,DWORD[48+rsp]
917
918         add     r12d,DWORD[12+rsp]
919         mov     r13d,ebx
920         add     r12d,edi
921         mov     r14d,r9d
922         ror     r13d,14
923         mov     edi,ecx
924
925         xor     r13d,ebx
926         ror     r14d,9
927         xor     edi,edx
928
929         mov     DWORD[12+rsp],r12d
930         xor     r14d,r9d
931         and     edi,ebx
932
933         ror     r13d,5
934         add     r12d,r8d
935         xor     edi,edx
936
937         ror     r14d,11
938         xor     r13d,ebx
939         add     r12d,edi
940
941         mov     edi,r9d
942         add     r12d,DWORD[rbp]
943         xor     r14d,r9d
944
945         xor     edi,r10d
946         ror     r13d,6
947         mov     r8d,r10d
948
949         and     r15d,edi
950         ror     r14d,2
951         add     r12d,r13d
952
953         xor     r8d,r15d
954         add     eax,r12d
955         add     r8d,r12d
956
957         lea     rbp,[20+rbp]
958         mov     r13d,DWORD[20+rsp]
959         mov     r15d,DWORD[8+rsp]
960
961         mov     r12d,r13d
962         ror     r13d,11
963         add     r8d,r14d
964         mov     r14d,r15d
965         ror     r15d,2
966
967         xor     r13d,r12d
968         shr     r12d,3
969         ror     r13d,7
970         xor     r15d,r14d
971         shr     r14d,10
972
973         ror     r15d,17
974         xor     r12d,r13d
975         xor     r15d,r14d
976         add     r12d,DWORD[52+rsp]
977
978         add     r12d,DWORD[16+rsp]
979         mov     r13d,eax
980         add     r12d,r15d
981         mov     r14d,r8d
982         ror     r13d,14
983         mov     r15d,ebx
984
985         xor     r13d,eax
986         ror     r14d,9
987         xor     r15d,ecx
988
989         mov     DWORD[16+rsp],r12d
990         xor     r14d,r8d
991         and     r15d,eax
992
993         ror     r13d,5
994         add     r12d,edx
995         xor     r15d,ecx
996
997         ror     r14d,11
998         xor     r13d,eax
999         add     r12d,r15d
1000
1001         mov     r15d,r8d
1002         add     r12d,DWORD[rbp]
1003         xor     r14d,r8d
1004
1005         xor     r15d,r9d
1006         ror     r13d,6
1007         mov     edx,r9d
1008
1009         and     edi,r15d
1010         ror     r14d,2
1011         add     r12d,r13d
1012
1013         xor     edx,edi
1014         add     r11d,r12d
1015         add     edx,r12d
1016
1017         lea     rbp,[4+rbp]
1018         mov     r13d,DWORD[24+rsp]
1019         mov     edi,DWORD[12+rsp]
1020
1021         mov     r12d,r13d
1022         ror     r13d,11
1023         add     edx,r14d
1024         mov     r14d,edi
1025         ror     edi,2
1026
1027         xor     r13d,r12d
1028         shr     r12d,3
1029         ror     r13d,7
1030         xor     edi,r14d
1031         shr     r14d,10
1032
1033         ror     edi,17
1034         xor     r12d,r13d
1035         xor     edi,r14d
1036         add     r12d,DWORD[56+rsp]
1037
1038         add     r12d,DWORD[20+rsp]
1039         mov     r13d,r11d
1040         add     r12d,edi
1041         mov     r14d,edx
1042         ror     r13d,14
1043         mov     edi,eax
1044
1045         xor     r13d,r11d
1046         ror     r14d,9
1047         xor     edi,ebx
1048
1049         mov     DWORD[20+rsp],r12d
1050         xor     r14d,edx
1051         and     edi,r11d
1052
1053         ror     r13d,5
1054         add     r12d,ecx
1055         xor     edi,ebx
1056
1057         ror     r14d,11
1058         xor     r13d,r11d
1059         add     r12d,edi
1060
1061         mov     edi,edx
1062         add     r12d,DWORD[rbp]
1063         xor     r14d,edx
1064
1065         xor     edi,r8d
1066         ror     r13d,6
1067         mov     ecx,r8d
1068
1069         and     r15d,edi
1070         ror     r14d,2
1071         add     r12d,r13d
1072
1073         xor     ecx,r15d
1074         add     r10d,r12d
1075         add     ecx,r12d
1076
1077         lea     rbp,[4+rbp]
1078         mov     r13d,DWORD[28+rsp]
1079         mov     r15d,DWORD[16+rsp]
1080
1081         mov     r12d,r13d
1082         ror     r13d,11
1083         add     ecx,r14d
1084         mov     r14d,r15d
1085         ror     r15d,2
1086
1087         xor     r13d,r12d
1088         shr     r12d,3
1089         ror     r13d,7
1090         xor     r15d,r14d
1091         shr     r14d,10
1092
1093         ror     r15d,17
1094         xor     r12d,r13d
1095         xor     r15d,r14d
1096         add     r12d,DWORD[60+rsp]
1097
1098         add     r12d,DWORD[24+rsp]
1099         mov     r13d,r10d
1100         add     r12d,r15d
1101         mov     r14d,ecx
1102         ror     r13d,14
1103         mov     r15d,r11d
1104
1105         xor     r13d,r10d
1106         ror     r14d,9
1107         xor     r15d,eax
1108
1109         mov     DWORD[24+rsp],r12d
1110         xor     r14d,ecx
1111         and     r15d,r10d
1112
1113         ror     r13d,5
1114         add     r12d,ebx
1115         xor     r15d,eax
1116
1117         ror     r14d,11
1118         xor     r13d,r10d
1119         add     r12d,r15d
1120
1121         mov     r15d,ecx
1122         add     r12d,DWORD[rbp]
1123         xor     r14d,ecx
1124
1125         xor     r15d,edx
1126         ror     r13d,6
1127         mov     ebx,edx
1128
1129         and     edi,r15d
1130         ror     r14d,2
1131         add     r12d,r13d
1132
1133         xor     ebx,edi
1134         add     r9d,r12d
1135         add     ebx,r12d
1136
1137         lea     rbp,[4+rbp]
1138         mov     r13d,DWORD[32+rsp]
1139         mov     edi,DWORD[20+rsp]
1140
1141         mov     r12d,r13d
1142         ror     r13d,11
1143         add     ebx,r14d
1144         mov     r14d,edi
1145         ror     edi,2
1146
1147         xor     r13d,r12d
1148         shr     r12d,3
1149         ror     r13d,7
1150         xor     edi,r14d
1151         shr     r14d,10
1152
1153         ror     edi,17
1154         xor     r12d,r13d
1155         xor     edi,r14d
1156         add     r12d,DWORD[rsp]
1157
1158         add     r12d,DWORD[28+rsp]
1159         mov     r13d,r9d
1160         add     r12d,edi
1161         mov     r14d,ebx
1162         ror     r13d,14
1163         mov     edi,r10d
1164
1165         xor     r13d,r9d
1166         ror     r14d,9
1167         xor     edi,r11d
1168
1169         mov     DWORD[28+rsp],r12d
1170         xor     r14d,ebx
1171         and     edi,r9d
1172
1173         ror     r13d,5
1174         add     r12d,eax
1175         xor     edi,r11d
1176
1177         ror     r14d,11
1178         xor     r13d,r9d
1179         add     r12d,edi
1180
1181         mov     edi,ebx
1182         add     r12d,DWORD[rbp]
1183         xor     r14d,ebx
1184
1185         xor     edi,ecx
1186         ror     r13d,6
1187         mov     eax,ecx
1188
1189         and     r15d,edi
1190         ror     r14d,2
1191         add     r12d,r13d
1192
1193         xor     eax,r15d
1194         add     r8d,r12d
1195         add     eax,r12d
1196
1197         lea     rbp,[20+rbp]
1198         mov     r13d,DWORD[36+rsp]
1199         mov     r15d,DWORD[24+rsp]
1200
1201         mov     r12d,r13d
1202         ror     r13d,11
1203         add     eax,r14d
1204         mov     r14d,r15d
1205         ror     r15d,2
1206
1207         xor     r13d,r12d
1208         shr     r12d,3
1209         ror     r13d,7
1210         xor     r15d,r14d
1211         shr     r14d,10
1212
1213         ror     r15d,17
1214         xor     r12d,r13d
1215         xor     r15d,r14d
1216         add     r12d,DWORD[4+rsp]
1217
1218         add     r12d,DWORD[32+rsp]
1219         mov     r13d,r8d
1220         add     r12d,r15d
1221         mov     r14d,eax
1222         ror     r13d,14
1223         mov     r15d,r9d
1224
1225         xor     r13d,r8d
1226         ror     r14d,9
1227         xor     r15d,r10d
1228
1229         mov     DWORD[32+rsp],r12d
1230         xor     r14d,eax
1231         and     r15d,r8d
1232
1233         ror     r13d,5
1234         add     r12d,r11d
1235         xor     r15d,r10d
1236
1237         ror     r14d,11
1238         xor     r13d,r8d
1239         add     r12d,r15d
1240
1241         mov     r15d,eax
1242         add     r12d,DWORD[rbp]
1243         xor     r14d,eax
1244
1245         xor     r15d,ebx
1246         ror     r13d,6
1247         mov     r11d,ebx
1248
1249         and     edi,r15d
1250         ror     r14d,2
1251         add     r12d,r13d
1252
1253         xor     r11d,edi
1254         add     edx,r12d
1255         add     r11d,r12d
1256
1257         lea     rbp,[4+rbp]
1258         mov     r13d,DWORD[40+rsp]
1259         mov     edi,DWORD[28+rsp]
1260
1261         mov     r12d,r13d
1262         ror     r13d,11
1263         add     r11d,r14d
1264         mov     r14d,edi
1265         ror     edi,2
1266
1267         xor     r13d,r12d
1268         shr     r12d,3
1269         ror     r13d,7
1270         xor     edi,r14d
1271         shr     r14d,10
1272
1273         ror     edi,17
1274         xor     r12d,r13d
1275         xor     edi,r14d
1276         add     r12d,DWORD[8+rsp]
1277
1278         add     r12d,DWORD[36+rsp]
1279         mov     r13d,edx
1280         add     r12d,edi
1281         mov     r14d,r11d
1282         ror     r13d,14
1283         mov     edi,r8d
1284
1285         xor     r13d,edx
1286         ror     r14d,9
1287         xor     edi,r9d
1288
1289         mov     DWORD[36+rsp],r12d
1290         xor     r14d,r11d
1291         and     edi,edx
1292
1293         ror     r13d,5
1294         add     r12d,r10d
1295         xor     edi,r9d
1296
1297         ror     r14d,11
1298         xor     r13d,edx
1299         add     r12d,edi
1300
1301         mov     edi,r11d
1302         add     r12d,DWORD[rbp]
1303         xor     r14d,r11d
1304
1305         xor     edi,eax
1306         ror     r13d,6
1307         mov     r10d,eax
1308
1309         and     r15d,edi
1310         ror     r14d,2
1311         add     r12d,r13d
1312
1313         xor     r10d,r15d
1314         add     ecx,r12d
1315         add     r10d,r12d
1316
1317         lea     rbp,[4+rbp]
1318         mov     r13d,DWORD[44+rsp]
1319         mov     r15d,DWORD[32+rsp]
1320
1321         mov     r12d,r13d
1322         ror     r13d,11
1323         add     r10d,r14d
1324         mov     r14d,r15d
1325         ror     r15d,2
1326
1327         xor     r13d,r12d
1328         shr     r12d,3
1329         ror     r13d,7
1330         xor     r15d,r14d
1331         shr     r14d,10
1332
1333         ror     r15d,17
1334         xor     r12d,r13d
1335         xor     r15d,r14d
1336         add     r12d,DWORD[12+rsp]
1337
1338         add     r12d,DWORD[40+rsp]
1339         mov     r13d,ecx
1340         add     r12d,r15d
1341         mov     r14d,r10d
1342         ror     r13d,14
1343         mov     r15d,edx
1344
1345         xor     r13d,ecx
1346         ror     r14d,9
1347         xor     r15d,r8d
1348
1349         mov     DWORD[40+rsp],r12d
1350         xor     r14d,r10d
1351         and     r15d,ecx
1352
1353         ror     r13d,5
1354         add     r12d,r9d
1355         xor     r15d,r8d
1356
1357         ror     r14d,11
1358         xor     r13d,ecx
1359         add     r12d,r15d
1360
1361         mov     r15d,r10d
1362         add     r12d,DWORD[rbp]
1363         xor     r14d,r10d
1364
1365         xor     r15d,r11d
1366         ror     r13d,6
1367         mov     r9d,r11d
1368
1369         and     edi,r15d
1370         ror     r14d,2
1371         add     r12d,r13d
1372
1373         xor     r9d,edi
1374         add     ebx,r12d
1375         add     r9d,r12d
1376
1377         lea     rbp,[4+rbp]
1378         mov     r13d,DWORD[48+rsp]
1379         mov     edi,DWORD[36+rsp]
1380
1381         mov     r12d,r13d
1382         ror     r13d,11
1383         add     r9d,r14d
1384         mov     r14d,edi
1385         ror     edi,2
1386
1387         xor     r13d,r12d
1388         shr     r12d,3
1389         ror     r13d,7
1390         xor     edi,r14d
1391         shr     r14d,10
1392
1393         ror     edi,17
1394         xor     r12d,r13d
1395         xor     edi,r14d
1396         add     r12d,DWORD[16+rsp]
1397
1398         add     r12d,DWORD[44+rsp]
1399         mov     r13d,ebx
1400         add     r12d,edi
1401         mov     r14d,r9d
1402         ror     r13d,14
1403         mov     edi,ecx
1404
1405         xor     r13d,ebx
1406         ror     r14d,9
1407         xor     edi,edx
1408
1409         mov     DWORD[44+rsp],r12d
1410         xor     r14d,r9d
1411         and     edi,ebx
1412
1413         ror     r13d,5
1414         add     r12d,r8d
1415         xor     edi,edx
1416
1417         ror     r14d,11
1418         xor     r13d,ebx
1419         add     r12d,edi
1420
1421         mov     edi,r9d
1422         add     r12d,DWORD[rbp]
1423         xor     r14d,r9d
1424
1425         xor     edi,r10d
1426         ror     r13d,6
1427         mov     r8d,r10d
1428
1429         and     r15d,edi
1430         ror     r14d,2
1431         add     r12d,r13d
1432
1433         xor     r8d,r15d
1434         add     eax,r12d
1435         add     r8d,r12d
1436
1437         lea     rbp,[20+rbp]
1438         mov     r13d,DWORD[52+rsp]
1439         mov     r15d,DWORD[40+rsp]
1440
1441         mov     r12d,r13d
1442         ror     r13d,11
1443         add     r8d,r14d
1444         mov     r14d,r15d
1445         ror     r15d,2
1446
1447         xor     r13d,r12d
1448         shr     r12d,3
1449         ror     r13d,7
1450         xor     r15d,r14d
1451         shr     r14d,10
1452
1453         ror     r15d,17
1454         xor     r12d,r13d
1455         xor     r15d,r14d
1456         add     r12d,DWORD[20+rsp]
1457
1458         add     r12d,DWORD[48+rsp]
1459         mov     r13d,eax
1460         add     r12d,r15d
1461         mov     r14d,r8d
1462         ror     r13d,14
1463         mov     r15d,ebx
1464
1465         xor     r13d,eax
1466         ror     r14d,9
1467         xor     r15d,ecx
1468
1469         mov     DWORD[48+rsp],r12d
1470         xor     r14d,r8d
1471         and     r15d,eax
1472
1473         ror     r13d,5
1474         add     r12d,edx
1475         xor     r15d,ecx
1476
1477         ror     r14d,11
1478         xor     r13d,eax
1479         add     r12d,r15d
1480
1481         mov     r15d,r8d
1482         add     r12d,DWORD[rbp]
1483         xor     r14d,r8d
1484
1485         xor     r15d,r9d
1486         ror     r13d,6
1487         mov     edx,r9d
1488
1489         and     edi,r15d
1490         ror     r14d,2
1491         add     r12d,r13d
1492
1493         xor     edx,edi
1494         add     r11d,r12d
1495         add     edx,r12d
1496
1497         lea     rbp,[4+rbp]
1498         mov     r13d,DWORD[56+rsp]
1499         mov     edi,DWORD[44+rsp]
1500
1501         mov     r12d,r13d
1502         ror     r13d,11
1503         add     edx,r14d
1504         mov     r14d,edi
1505         ror     edi,2
1506
1507         xor     r13d,r12d
1508         shr     r12d,3
1509         ror     r13d,7
1510         xor     edi,r14d
1511         shr     r14d,10
1512
1513         ror     edi,17
1514         xor     r12d,r13d
1515         xor     edi,r14d
1516         add     r12d,DWORD[24+rsp]
1517
1518         add     r12d,DWORD[52+rsp]
1519         mov     r13d,r11d
1520         add     r12d,edi
1521         mov     r14d,edx
1522         ror     r13d,14
1523         mov     edi,eax
1524
1525         xor     r13d,r11d
1526         ror     r14d,9
1527         xor     edi,ebx
1528
1529         mov     DWORD[52+rsp],r12d
1530         xor     r14d,edx
1531         and     edi,r11d
1532
1533         ror     r13d,5
1534         add     r12d,ecx
1535         xor     edi,ebx
1536
1537         ror     r14d,11
1538         xor     r13d,r11d
1539         add     r12d,edi
1540
1541         mov     edi,edx
1542         add     r12d,DWORD[rbp]
1543         xor     r14d,edx
1544
1545         xor     edi,r8d
1546         ror     r13d,6
1547         mov     ecx,r8d
1548
1549         and     r15d,edi
1550         ror     r14d,2
1551         add     r12d,r13d
1552
1553         xor     ecx,r15d
1554         add     r10d,r12d
1555         add     ecx,r12d
1556
1557         lea     rbp,[4+rbp]
1558         mov     r13d,DWORD[60+rsp]
1559         mov     r15d,DWORD[48+rsp]
1560
1561         mov     r12d,r13d
1562         ror     r13d,11
1563         add     ecx,r14d
1564         mov     r14d,r15d
1565         ror     r15d,2
1566
1567         xor     r13d,r12d
1568         shr     r12d,3
1569         ror     r13d,7
1570         xor     r15d,r14d
1571         shr     r14d,10
1572
1573         ror     r15d,17
1574         xor     r12d,r13d
1575         xor     r15d,r14d
1576         add     r12d,DWORD[28+rsp]
1577
1578         add     r12d,DWORD[56+rsp]
1579         mov     r13d,r10d
1580         add     r12d,r15d
1581         mov     r14d,ecx
1582         ror     r13d,14
1583         mov     r15d,r11d
1584
1585         xor     r13d,r10d
1586         ror     r14d,9
1587         xor     r15d,eax
1588
1589         mov     DWORD[56+rsp],r12d
1590         xor     r14d,ecx
1591         and     r15d,r10d
1592
1593         ror     r13d,5
1594         add     r12d,ebx
1595         xor     r15d,eax
1596
1597         ror     r14d,11
1598         xor     r13d,r10d
1599         add     r12d,r15d
1600
1601         mov     r15d,ecx
1602         add     r12d,DWORD[rbp]
1603         xor     r14d,ecx
1604
1605         xor     r15d,edx
1606         ror     r13d,6
1607         mov     ebx,edx
1608
1609         and     edi,r15d
1610         ror     r14d,2
1611         add     r12d,r13d
1612
1613         xor     ebx,edi
1614         add     r9d,r12d
1615         add     ebx,r12d
1616
1617         lea     rbp,[4+rbp]
1618         mov     r13d,DWORD[rsp]
1619         mov     edi,DWORD[52+rsp]
1620
1621         mov     r12d,r13d
1622         ror     r13d,11
1623         add     ebx,r14d
1624         mov     r14d,edi
1625         ror     edi,2
1626
1627         xor     r13d,r12d
1628         shr     r12d,3
1629         ror     r13d,7
1630         xor     edi,r14d
1631         shr     r14d,10
1632
1633         ror     edi,17
1634         xor     r12d,r13d
1635         xor     edi,r14d
1636         add     r12d,DWORD[32+rsp]
1637
1638         add     r12d,DWORD[60+rsp]
1639         mov     r13d,r9d
1640         add     r12d,edi
1641         mov     r14d,ebx
1642         ror     r13d,14
1643         mov     edi,r10d
1644
1645         xor     r13d,r9d
1646         ror     r14d,9
1647         xor     edi,r11d
1648
1649         mov     DWORD[60+rsp],r12d
1650         xor     r14d,ebx
1651         and     edi,r9d
1652
1653         ror     r13d,5
1654         add     r12d,eax
1655         xor     edi,r11d
1656
1657         ror     r14d,11
1658         xor     r13d,r9d
1659         add     r12d,edi
1660
1661         mov     edi,ebx
1662         add     r12d,DWORD[rbp]
1663         xor     r14d,ebx
1664
1665         xor     edi,ecx
1666         ror     r13d,6
1667         mov     eax,ecx
1668
1669         and     r15d,edi
1670         ror     r14d,2
1671         add     r12d,r13d
1672
1673         xor     eax,r15d
1674         add     r8d,r12d
1675         add     eax,r12d
1676
1677         lea     rbp,[20+rbp]
1678         cmp     BYTE[3+rbp],0
1679         jnz     NEAR $L$rounds_16_xx
1680
1681         mov     rdi,QWORD[((64+0))+rsp]
1682         add     eax,r14d
1683         lea     rsi,[64+rsi]
1684
1685         add     eax,DWORD[rdi]
1686         add     ebx,DWORD[4+rdi]
1687         add     ecx,DWORD[8+rdi]
1688         add     edx,DWORD[12+rdi]
1689         add     r8d,DWORD[16+rdi]
1690         add     r9d,DWORD[20+rdi]
1691         add     r10d,DWORD[24+rdi]
1692         add     r11d,DWORD[28+rdi]
1693
1694         cmp     rsi,QWORD[((64+16))+rsp]
1695
1696         mov     DWORD[rdi],eax
1697         mov     DWORD[4+rdi],ebx
1698         mov     DWORD[8+rdi],ecx
1699         mov     DWORD[12+rdi],edx
1700         mov     DWORD[16+rdi],r8d
1701         mov     DWORD[20+rdi],r9d
1702         mov     DWORD[24+rdi],r10d
1703         mov     DWORD[28+rdi],r11d
1704         jb      NEAR $L$loop
1705
1706         mov     rsi,QWORD[((64+24))+rsp]
1707         mov     r15,QWORD[rsi]
1708         mov     r14,QWORD[8+rsi]
1709         mov     r13,QWORD[16+rsi]
1710         mov     r12,QWORD[24+rsi]
1711         mov     rbp,QWORD[32+rsi]
1712         mov     rbx,QWORD[40+rsi]
1713         lea     rsp,[48+rsi]
1714 $L$epilogue:
1715         mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
1716         mov     rsi,QWORD[16+rsp]
1717         DB      0F3h,0C3h               ;repret
1718 $L$SEH_end_sha256_block_data_order:
1719 ALIGN   64
1720
1721 K256:
1722         DD      0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
1723         DD      0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
1724         DD      0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
1725         DD      0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
1726         DD      0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
1727         DD      0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
1728         DD      0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
1729         DD      0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
1730         DD      0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
1731         DD      0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
1732         DD      0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
1733         DD      0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
1734         DD      0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
1735         DD      0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
1736         DD      0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
1737         DD      0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
1738         DD      0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
1739         DD      0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
1740         DD      0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
1741         DD      0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
1742         DD      0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
1743         DD      0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
1744         DD      0xd192e819,0xd6990624,0xf40e3585,0x106aa070
1745         DD      0xd192e819,0xd6990624,0xf40e3585,0x106aa070
1746         DD      0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
1747         DD      0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
1748         DD      0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
1749         DD      0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
1750         DD      0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
1751         DD      0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
1752         DD      0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
1753         DD      0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
1754
1755         DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
1756         DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
1757         DD      0x03020100,0x0b0a0908,0xffffffff,0xffffffff
1758         DD      0x03020100,0x0b0a0908,0xffffffff,0xffffffff
1759         DD      0xffffffff,0xffffffff,0x03020100,0x0b0a0908
1760         DD      0xffffffff,0xffffffff,0x03020100,0x0b0a0908
1761 DB      83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97
1762 DB      110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54
1763 DB      52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
1764 DB      32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
1765 DB      111,114,103,62,0
1766
1767 ALIGN   64
1768 sha256_block_data_order_ssse3:
1769         mov     QWORD[8+rsp],rdi        ;WIN64 prologue
1770         mov     QWORD[16+rsp],rsi
1771         mov     rax,rsp
1772 $L$SEH_begin_sha256_block_data_order_ssse3:
1773         mov     rdi,rcx
1774         mov     rsi,rdx
1775         mov     rdx,r8
1776
1777
1778 $L$ssse3_shortcut:
1779         push    rbx
1780         push    rbp
1781         push    r12
1782         push    r13
1783         push    r14
1784         push    r15
1785         mov     r11,rsp
1786         shl     rdx,4
1787         sub     rsp,160
1788         lea     rdx,[rdx*4+rsi]
1789         and     rsp,-64
1790         mov     QWORD[((64+0))+rsp],rdi
1791         mov     QWORD[((64+8))+rsp],rsi
1792         mov     QWORD[((64+16))+rsp],rdx
1793         mov     QWORD[((64+24))+rsp],r11
1794         movaps  XMMWORD[(64+32)+rsp],xmm6
1795         movaps  XMMWORD[(64+48)+rsp],xmm7
1796         movaps  XMMWORD[(64+64)+rsp],xmm8
1797         movaps  XMMWORD[(64+80)+rsp],xmm9
1798 $L$prologue_ssse3:
1799
1800         mov     eax,DWORD[rdi]
1801         mov     ebx,DWORD[4+rdi]
1802         mov     ecx,DWORD[8+rdi]
1803         mov     edx,DWORD[12+rdi]
1804         mov     r8d,DWORD[16+rdi]
1805         mov     r9d,DWORD[20+rdi]
1806         mov     r10d,DWORD[24+rdi]
1807         mov     r11d,DWORD[28+rdi]
1808
1809
1810         jmp     NEAR $L$loop_ssse3
1811 ALIGN   16
1812 $L$loop_ssse3:
1813         movdqa  xmm7,XMMWORD[((K256+512))]
1814         movdqu  xmm0,XMMWORD[rsi]
1815         movdqu  xmm1,XMMWORD[16+rsi]
1816         movdqu  xmm2,XMMWORD[32+rsi]
1817 DB      102,15,56,0,199
1818         movdqu  xmm3,XMMWORD[48+rsi]
1819         lea     rbp,[K256]
1820 DB      102,15,56,0,207
1821         movdqa  xmm4,XMMWORD[rbp]
1822         movdqa  xmm5,XMMWORD[32+rbp]
1823 DB      102,15,56,0,215
1824         paddd   xmm4,xmm0
1825         movdqa  xmm6,XMMWORD[64+rbp]
1826 DB      102,15,56,0,223
1827         movdqa  xmm7,XMMWORD[96+rbp]
1828         paddd   xmm5,xmm1
1829         paddd   xmm6,xmm2
1830         paddd   xmm7,xmm3
1831         movdqa  XMMWORD[rsp],xmm4
1832         mov     r14d,eax
1833         movdqa  XMMWORD[16+rsp],xmm5
1834         mov     edi,ebx
1835         movdqa  XMMWORD[32+rsp],xmm6
1836         xor     edi,ecx
1837         movdqa  XMMWORD[48+rsp],xmm7
1838         mov     r13d,r8d
1839         jmp     NEAR $L$ssse3_00_47
1840
1841 ALIGN   16
1842 $L$ssse3_00_47:
1843         sub     rbp,-128
1844         ror     r13d,14
1845         movdqa  xmm4,xmm1
1846         mov     eax,r14d
1847         mov     r12d,r9d
1848         movdqa  xmm7,xmm3
1849         ror     r14d,9
1850         xor     r13d,r8d
1851         xor     r12d,r10d
1852         ror     r13d,5
1853         xor     r14d,eax
1854 DB      102,15,58,15,224,4
1855         and     r12d,r8d
1856         xor     r13d,r8d
1857 DB      102,15,58,15,250,4
1858         add     r11d,DWORD[rsp]
1859         mov     r15d,eax
1860         xor     r12d,r10d
1861         ror     r14d,11
1862         movdqa  xmm5,xmm4
1863         xor     r15d,ebx
1864         add     r11d,r12d
1865         movdqa  xmm6,xmm4
1866         ror     r13d,6
1867         and     edi,r15d
1868         psrld   xmm4,3
1869         xor     r14d,eax
1870         add     r11d,r13d
1871         xor     edi,ebx
1872         paddd   xmm0,xmm7
1873         ror     r14d,2
1874         add     edx,r11d
1875         psrld   xmm6,7
1876         add     r11d,edi
1877         mov     r13d,edx
1878         pshufd  xmm7,xmm3,250
1879         add     r14d,r11d
1880         ror     r13d,14
1881         pslld   xmm5,14
1882         mov     r11d,r14d
1883         mov     r12d,r8d
1884         pxor    xmm4,xmm6
1885         ror     r14d,9
1886         xor     r13d,edx
1887         xor     r12d,r9d
1888         ror     r13d,5
1889         psrld   xmm6,11
1890         xor     r14d,r11d
1891         pxor    xmm4,xmm5
1892         and     r12d,edx
1893         xor     r13d,edx
1894         pslld   xmm5,11
1895         add     r10d,DWORD[4+rsp]
1896         mov     edi,r11d
1897         pxor    xmm4,xmm6
1898         xor     r12d,r9d
1899         ror     r14d,11
1900         movdqa  xmm6,xmm7
1901         xor     edi,eax
1902         add     r10d,r12d
1903         pxor    xmm4,xmm5
1904         ror     r13d,6
1905         and     r15d,edi
1906         xor     r14d,r11d
1907         psrld   xmm7,10
1908         add     r10d,r13d
1909         xor     r15d,eax
1910         paddd   xmm0,xmm4
1911         ror     r14d,2
1912         add     ecx,r10d
1913         psrlq   xmm6,17
1914         add     r10d,r15d
1915         mov     r13d,ecx
1916         add     r14d,r10d
1917         pxor    xmm7,xmm6
1918         ror     r13d,14
1919         mov     r10d,r14d
1920         mov     r12d,edx
1921         ror     r14d,9
1922         psrlq   xmm6,2
1923         xor     r13d,ecx
1924         xor     r12d,r8d
1925         pxor    xmm7,xmm6
1926         ror     r13d,5
1927         xor     r14d,r10d
1928         and     r12d,ecx
1929         pshufd  xmm7,xmm7,128
1930         xor     r13d,ecx
1931         add     r9d,DWORD[8+rsp]
1932         mov     r15d,r10d
1933         psrldq  xmm7,8
1934         xor     r12d,r8d
1935         ror     r14d,11
1936         xor     r15d,r11d
1937         add     r9d,r12d
1938         ror     r13d,6
1939         paddd   xmm0,xmm7
1940         and     edi,r15d
1941         xor     r14d,r10d
1942         add     r9d,r13d
1943         pshufd  xmm7,xmm0,80
1944         xor     edi,r11d
1945         ror     r14d,2
1946         add     ebx,r9d
1947         movdqa  xmm6,xmm7
1948         add     r9d,edi
1949         mov     r13d,ebx
1950         psrld   xmm7,10
1951         add     r14d,r9d
1952         ror     r13d,14
1953         psrlq   xmm6,17
1954         mov     r9d,r14d
1955         mov     r12d,ecx
1956         pxor    xmm7,xmm6
1957         ror     r14d,9
1958         xor     r13d,ebx
1959         xor     r12d,edx
1960         ror     r13d,5
1961         xor     r14d,r9d
1962         psrlq   xmm6,2
1963         and     r12d,ebx
1964         xor     r13d,ebx
1965         add     r8d,DWORD[12+rsp]
1966         pxor    xmm7,xmm6
1967         mov     edi,r9d
1968         xor     r12d,edx
1969         ror     r14d,11
1970         pshufd  xmm7,xmm7,8
1971         xor     edi,r10d
1972         add     r8d,r12d
1973         movdqa  xmm6,XMMWORD[rbp]
1974         ror     r13d,6
1975         and     r15d,edi
1976         pslldq  xmm7,8
1977         xor     r14d,r9d
1978         add     r8d,r13d
1979         xor     r15d,r10d
1980         paddd   xmm0,xmm7
1981         ror     r14d,2
1982         add     eax,r8d
1983         add     r8d,r15d
1984         paddd   xmm6,xmm0
1985         mov     r13d,eax
1986         add     r14d,r8d
1987         movdqa  XMMWORD[rsp],xmm6
1988         ror     r13d,14
1989         movdqa  xmm4,xmm2
1990         mov     r8d,r14d
1991         mov     r12d,ebx
1992         movdqa  xmm7,xmm0
1993         ror     r14d,9
1994         xor     r13d,eax
1995         xor     r12d,ecx
1996         ror     r13d,5
1997         xor     r14d,r8d
1998 DB      102,15,58,15,225,4
1999         and     r12d,eax
2000         xor     r13d,eax
2001 DB      102,15,58,15,251,4
2002         add     edx,DWORD[16+rsp]
2003         mov     r15d,r8d
2004         xor     r12d,ecx
2005         ror     r14d,11
2006         movdqa  xmm5,xmm4
2007         xor     r15d,r9d
2008         add     edx,r12d
2009         movdqa  xmm6,xmm4
2010         ror     r13d,6
2011         and     edi,r15d
2012         psrld   xmm4,3
2013         xor     r14d,r8d
2014         add     edx,r13d
2015         xor     edi,r9d
2016         paddd   xmm1,xmm7
2017         ror     r14d,2
2018         add     r11d,edx
2019         psrld   xmm6,7
2020         add     edx,edi
2021         mov     r13d,r11d
2022         pshufd  xmm7,xmm0,250
2023         add     r14d,edx
2024         ror     r13d,14
2025         pslld   xmm5,14
2026         mov     edx,r14d
2027         mov     r12d,eax
2028         pxor    xmm4,xmm6
2029         ror     r14d,9
2030         xor     r13d,r11d
2031         xor     r12d,ebx
2032         ror     r13d,5
2033         psrld   xmm6,11
2034         xor     r14d,edx
2035         pxor    xmm4,xmm5
2036         and     r12d,r11d
2037         xor     r13d,r11d
2038         pslld   xmm5,11
2039         add     ecx,DWORD[20+rsp]
2040         mov     edi,edx
2041         pxor    xmm4,xmm6
2042         xor     r12d,ebx
2043         ror     r14d,11
2044         movdqa  xmm6,xmm7
2045         xor     edi,r8d
2046         add     ecx,r12d
2047         pxor    xmm4,xmm5
2048         ror     r13d,6
2049         and     r15d,edi
2050         xor     r14d,edx
2051         psrld   xmm7,10
2052         add     ecx,r13d
2053         xor     r15d,r8d
2054         paddd   xmm1,xmm4
2055         ror     r14d,2
2056         add     r10d,ecx
2057         psrlq   xmm6,17
2058         add     ecx,r15d
2059         mov     r13d,r10d
2060         add     r14d,ecx
2061         pxor    xmm7,xmm6
2062         ror     r13d,14
2063         mov     ecx,r14d
2064         mov     r12d,r11d
2065         ror     r14d,9
2066         psrlq   xmm6,2
2067         xor     r13d,r10d
2068         xor     r12d,eax
2069         pxor    xmm7,xmm6
2070         ror     r13d,5
2071         xor     r14d,ecx
2072         and     r12d,r10d
2073         pshufd  xmm7,xmm7,128
2074         xor     r13d,r10d
2075         add     ebx,DWORD[24+rsp]
2076         mov     r15d,ecx
2077         psrldq  xmm7,8
2078         xor     r12d,eax
2079         ror     r14d,11
2080         xor     r15d,edx
2081         add     ebx,r12d
2082         ror     r13d,6
2083         paddd   xmm1,xmm7
2084         and     edi,r15d
2085         xor     r14d,ecx
2086         add     ebx,r13d
2087         pshufd  xmm7,xmm1,80
2088         xor     edi,edx
2089         ror     r14d,2
2090         add     r9d,ebx
2091         movdqa  xmm6,xmm7
2092         add     ebx,edi
2093         mov     r13d,r9d
2094         psrld   xmm7,10
2095         add     r14d,ebx
2096         ror     r13d,14
2097         psrlq   xmm6,17
2098         mov     ebx,r14d
2099         mov     r12d,r10d
2100         pxor    xmm7,xmm6
2101         ror     r14d,9
2102         xor     r13d,r9d
2103         xor     r12d,r11d
2104         ror     r13d,5
2105         xor     r14d,ebx
2106         psrlq   xmm6,2
2107         and     r12d,r9d
2108         xor     r13d,r9d
2109         add     eax,DWORD[28+rsp]
2110         pxor    xmm7,xmm6
2111         mov     edi,ebx
2112         xor     r12d,r11d
2113         ror     r14d,11
2114         pshufd  xmm7,xmm7,8
2115         xor     edi,ecx
2116         add     eax,r12d
2117         movdqa  xmm6,XMMWORD[32+rbp]
2118         ror     r13d,6
2119         and     r15d,edi
2120         pslldq  xmm7,8
2121         xor     r14d,ebx
2122         add     eax,r13d
2123         xor     r15d,ecx
2124         paddd   xmm1,xmm7
2125         ror     r14d,2
2126         add     r8d,eax
2127         add     eax,r15d
2128         paddd   xmm6,xmm1
2129         mov     r13d,r8d
2130         add     r14d,eax
2131         movdqa  XMMWORD[16+rsp],xmm6
2132         ror     r13d,14
2133         movdqa  xmm4,xmm3
2134         mov     eax,r14d
2135         mov     r12d,r9d
2136         movdqa  xmm7,xmm1
2137         ror     r14d,9
2138         xor     r13d,r8d
2139         xor     r12d,r10d
2140         ror     r13d,5
2141         xor     r14d,eax
2142 DB      102,15,58,15,226,4
2143         and     r12d,r8d
2144         xor     r13d,r8d
2145 DB      102,15,58,15,248,4
2146         add     r11d,DWORD[32+rsp]
2147         mov     r15d,eax
2148         xor     r12d,r10d
2149         ror     r14d,11
2150         movdqa  xmm5,xmm4
2151         xor     r15d,ebx
2152         add     r11d,r12d
2153         movdqa  xmm6,xmm4
2154         ror     r13d,6
2155         and     edi,r15d
2156         psrld   xmm4,3
2157         xor     r14d,eax
2158         add     r11d,r13d
2159         xor     edi,ebx
2160         paddd   xmm2,xmm7
2161         ror     r14d,2
2162         add     edx,r11d
2163         psrld   xmm6,7
2164         add     r11d,edi
2165         mov     r13d,edx
2166         pshufd  xmm7,xmm1,250
2167         add     r14d,r11d
2168         ror     r13d,14
2169         pslld   xmm5,14
2170         mov     r11d,r14d
2171         mov     r12d,r8d
2172         pxor    xmm4,xmm6
2173         ror     r14d,9
2174         xor     r13d,edx
2175         xor     r12d,r9d
2176         ror     r13d,5
2177         psrld   xmm6,11
2178         xor     r14d,r11d
2179         pxor    xmm4,xmm5
2180         and     r12d,edx
2181         xor     r13d,edx
2182         pslld   xmm5,11
2183         add     r10d,DWORD[36+rsp]
2184         mov     edi,r11d
2185         pxor    xmm4,xmm6
2186         xor     r12d,r9d
2187         ror     r14d,11
2188         movdqa  xmm6,xmm7
2189         xor     edi,eax
2190         add     r10d,r12d
2191         pxor    xmm4,xmm5
2192         ror     r13d,6
2193         and     r15d,edi
2194         xor     r14d,r11d
2195         psrld   xmm7,10
2196         add     r10d,r13d
2197         xor     r15d,eax
2198         paddd   xmm2,xmm4
2199         ror     r14d,2
2200         add     ecx,r10d
2201         psrlq   xmm6,17
2202         add     r10d,r15d
2203         mov     r13d,ecx
2204         add     r14d,r10d
2205         pxor    xmm7,xmm6
2206         ror     r13d,14
2207         mov     r10d,r14d
2208         mov     r12d,edx
2209         ror     r14d,9
2210         psrlq   xmm6,2
2211         xor     r13d,ecx
2212         xor     r12d,r8d
2213         pxor    xmm7,xmm6
2214         ror     r13d,5
2215         xor     r14d,r10d
2216         and     r12d,ecx
2217         pshufd  xmm7,xmm7,128
2218         xor     r13d,ecx
2219         add     r9d,DWORD[40+rsp]
2220         mov     r15d,r10d
2221         psrldq  xmm7,8
2222         xor     r12d,r8d
2223         ror     r14d,11
2224         xor     r15d,r11d
2225         add     r9d,r12d
2226         ror     r13d,6
2227         paddd   xmm2,xmm7
2228         and     edi,r15d
2229         xor     r14d,r10d
2230         add     r9d,r13d
2231         pshufd  xmm7,xmm2,80
2232         xor     edi,r11d
2233         ror     r14d,2
2234         add     ebx,r9d
2235         movdqa  xmm6,xmm7
2236         add     r9d,edi
2237         mov     r13d,ebx
2238         psrld   xmm7,10
2239         add     r14d,r9d
2240         ror     r13d,14
2241         psrlq   xmm6,17
2242         mov     r9d,r14d
2243         mov     r12d,ecx
2244         pxor    xmm7,xmm6
2245         ror     r14d,9
2246         xor     r13d,ebx
2247         xor     r12d,edx
2248         ror     r13d,5
2249         xor     r14d,r9d
2250         psrlq   xmm6,2
2251         and     r12d,ebx
2252         xor     r13d,ebx
2253         add     r8d,DWORD[44+rsp]
2254         pxor    xmm7,xmm6
2255         mov     edi,r9d
2256         xor     r12d,edx
2257         ror     r14d,11
2258         pshufd  xmm7,xmm7,8
2259         xor     edi,r10d
2260         add     r8d,r12d
2261         movdqa  xmm6,XMMWORD[64+rbp]
2262         ror     r13d,6
2263         and     r15d,edi
2264         pslldq  xmm7,8
2265         xor     r14d,r9d
2266         add     r8d,r13d
2267         xor     r15d,r10d
2268         paddd   xmm2,xmm7
2269         ror     r14d,2
2270         add     eax,r8d
2271         add     r8d,r15d
2272         paddd   xmm6,xmm2
2273         mov     r13d,eax
2274         add     r14d,r8d
2275         movdqa  XMMWORD[32+rsp],xmm6
2276         ror     r13d,14
2277         movdqa  xmm4,xmm0
2278         mov     r8d,r14d
2279         mov     r12d,ebx
2280         movdqa  xmm7,xmm2
2281         ror     r14d,9
2282         xor     r13d,eax
2283         xor     r12d,ecx
2284         ror     r13d,5
2285         xor     r14d,r8d
2286 DB      102,15,58,15,227,4
2287         and     r12d,eax
2288         xor     r13d,eax
2289 DB      102,15,58,15,249,4
2290         add     edx,DWORD[48+rsp]
2291         mov     r15d,r8d
2292         xor     r12d,ecx
2293         ror     r14d,11
2294         movdqa  xmm5,xmm4
2295         xor     r15d,r9d
2296         add     edx,r12d
2297         movdqa  xmm6,xmm4
2298         ror     r13d,6
2299         and     edi,r15d
2300         psrld   xmm4,3
2301         xor     r14d,r8d
2302         add     edx,r13d
2303         xor     edi,r9d
2304         paddd   xmm3,xmm7
2305         ror     r14d,2
2306         add     r11d,edx
2307         psrld   xmm6,7
2308         add     edx,edi
2309         mov     r13d,r11d
2310         pshufd  xmm7,xmm2,250
2311         add     r14d,edx
2312         ror     r13d,14
2313         pslld   xmm5,14
2314         mov     edx,r14d
2315         mov     r12d,eax
2316         pxor    xmm4,xmm6
2317         ror     r14d,9
2318         xor     r13d,r11d
2319         xor     r12d,ebx
2320         ror     r13d,5
2321         psrld   xmm6,11
2322         xor     r14d,edx
2323         pxor    xmm4,xmm5
2324         and     r12d,r11d
2325         xor     r13d,r11d
2326         pslld   xmm5,11
2327         add     ecx,DWORD[52+rsp]
2328         mov     edi,edx
2329         pxor    xmm4,xmm6
2330         xor     r12d,ebx
2331         ror     r14d,11
2332         movdqa  xmm6,xmm7
2333         xor     edi,r8d
2334         add     ecx,r12d
2335         pxor    xmm4,xmm5
2336         ror     r13d,6
2337         and     r15d,edi
2338         xor     r14d,edx
2339         psrld   xmm7,10
2340         add     ecx,r13d
2341         xor     r15d,r8d
2342         paddd   xmm3,xmm4
2343         ror     r14d,2
2344         add     r10d,ecx
2345         psrlq   xmm6,17
2346         add     ecx,r15d
2347         mov     r13d,r10d
2348         add     r14d,ecx
2349         pxor    xmm7,xmm6
2350         ror     r13d,14
2351         mov     ecx,r14d
2352         mov     r12d,r11d
2353         ror     r14d,9
2354         psrlq   xmm6,2
2355         xor     r13d,r10d
2356         xor     r12d,eax
2357         pxor    xmm7,xmm6
2358         ror     r13d,5
2359         xor     r14d,ecx
2360         and     r12d,r10d
2361         pshufd  xmm7,xmm7,128
2362         xor     r13d,r10d
2363         add     ebx,DWORD[56+rsp]
2364         mov     r15d,ecx
2365         psrldq  xmm7,8
2366         xor     r12d,eax
2367         ror     r14d,11
2368         xor     r15d,edx
2369         add     ebx,r12d
2370         ror     r13d,6
2371         paddd   xmm3,xmm7
2372         and     edi,r15d
2373         xor     r14d,ecx
2374         add     ebx,r13d
2375         pshufd  xmm7,xmm3,80
2376         xor     edi,edx
2377         ror     r14d,2
2378         add     r9d,ebx
2379         movdqa  xmm6,xmm7
2380         add     ebx,edi
2381         mov     r13d,r9d
2382         psrld   xmm7,10
2383         add     r14d,ebx
2384         ror     r13d,14
2385         psrlq   xmm6,17
2386         mov     ebx,r14d
2387         mov     r12d,r10d
2388         pxor    xmm7,xmm6
2389         ror     r14d,9
2390         xor     r13d,r9d
2391         xor     r12d,r11d
2392         ror     r13d,5
2393         xor     r14d,ebx
2394         psrlq   xmm6,2
2395         and     r12d,r9d
2396         xor     r13d,r9d
2397         add     eax,DWORD[60+rsp]
2398         pxor    xmm7,xmm6
2399         mov     edi,ebx
2400         xor     r12d,r11d
2401         ror     r14d,11
2402         pshufd  xmm7,xmm7,8
2403         xor     edi,ecx
2404         add     eax,r12d
2405         movdqa  xmm6,XMMWORD[96+rbp]
2406         ror     r13d,6
2407         and     r15d,edi
2408         pslldq  xmm7,8
2409         xor     r14d,ebx
2410         add     eax,r13d
2411         xor     r15d,ecx
2412         paddd   xmm3,xmm7
2413         ror     r14d,2
2414         add     r8d,eax
2415         add     eax,r15d
2416         paddd   xmm6,xmm3
2417         mov     r13d,r8d
2418         add     r14d,eax
2419         movdqa  XMMWORD[48+rsp],xmm6
2420         cmp     BYTE[131+rbp],0
2421         jne     NEAR $L$ssse3_00_47
2422         ror     r13d,14
2423         mov     eax,r14d
2424         mov     r12d,r9d
2425         ror     r14d,9
2426         xor     r13d,r8d
2427         xor     r12d,r10d
2428         ror     r13d,5
2429         xor     r14d,eax
2430         and     r12d,r8d
2431         xor     r13d,r8d
2432         add     r11d,DWORD[rsp]
2433         mov     r15d,eax
2434         xor     r12d,r10d
2435         ror     r14d,11
2436         xor     r15d,ebx
2437         add     r11d,r12d
2438         ror     r13d,6
2439         and     edi,r15d
2440         xor     r14d,eax
2441         add     r11d,r13d
2442         xor     edi,ebx
2443         ror     r14d,2
2444         add     edx,r11d
2445         add     r11d,edi
2446         mov     r13d,edx
2447         add     r14d,r11d
2448         ror     r13d,14
2449         mov     r11d,r14d
2450         mov     r12d,r8d
2451         ror     r14d,9
2452         xor     r13d,edx
2453         xor     r12d,r9d
2454         ror     r13d,5
2455         xor     r14d,r11d
2456         and     r12d,edx
2457         xor     r13d,edx
2458         add     r10d,DWORD[4+rsp]
2459         mov     edi,r11d
2460         xor     r12d,r9d
2461         ror     r14d,11
2462         xor     edi,eax
2463         add     r10d,r12d
2464         ror     r13d,6
2465         and     r15d,edi
2466         xor     r14d,r11d
2467         add     r10d,r13d
2468         xor     r15d,eax
2469         ror     r14d,2
2470         add     ecx,r10d
2471         add     r10d,r15d
2472         mov     r13d,ecx
2473         add     r14d,r10d
2474         ror     r13d,14
2475         mov     r10d,r14d
2476         mov     r12d,edx
2477         ror     r14d,9
2478         xor     r13d,ecx
2479         xor     r12d,r8d
2480         ror     r13d,5
2481         xor     r14d,r10d
2482         and     r12d,ecx
2483         xor     r13d,ecx
2484         add     r9d,DWORD[8+rsp]
2485         mov     r15d,r10d
2486         xor     r12d,r8d
2487         ror     r14d,11
2488         xor     r15d,r11d
2489         add     r9d,r12d
2490         ror     r13d,6
2491         and     edi,r15d
2492         xor     r14d,r10d
2493         add     r9d,r13d
2494         xor     edi,r11d
2495         ror     r14d,2
2496         add     ebx,r9d
2497         add     r9d,edi
2498         mov     r13d,ebx
2499         add     r14d,r9d
2500         ror     r13d,14
2501         mov     r9d,r14d
2502         mov     r12d,ecx
2503         ror     r14d,9
2504         xor     r13d,ebx
2505         xor     r12d,edx
2506         ror     r13d,5
2507         xor     r14d,r9d
2508         and     r12d,ebx
2509         xor     r13d,ebx
2510         add     r8d,DWORD[12+rsp]
2511         mov     edi,r9d
2512         xor     r12d,edx
2513         ror     r14d,11
2514         xor     edi,r10d
2515         add     r8d,r12d
2516         ror     r13d,6
2517         and     r15d,edi
2518         xor     r14d,r9d
2519         add     r8d,r13d
2520         xor     r15d,r10d
2521         ror     r14d,2
2522         add     eax,r8d
2523         add     r8d,r15d
2524         mov     r13d,eax
2525         add     r14d,r8d
2526         ror     r13d,14
2527         mov     r8d,r14d
2528         mov     r12d,ebx
2529         ror     r14d,9
2530         xor     r13d,eax
2531         xor     r12d,ecx
2532         ror     r13d,5
2533         xor     r14d,r8d
2534         and     r12d,eax
2535         xor     r13d,eax
2536         add     edx,DWORD[16+rsp]
2537         mov     r15d,r8d
2538         xor     r12d,ecx
2539         ror     r14d,11
2540         xor     r15d,r9d
2541         add     edx,r12d
2542         ror     r13d,6
2543         and     edi,r15d
2544         xor     r14d,r8d
2545         add     edx,r13d
2546         xor     edi,r9d
2547         ror     r14d,2
2548         add     r11d,edx
2549         add     edx,edi
2550         mov     r13d,r11d
2551         add     r14d,edx
2552         ror     r13d,14
2553         mov     edx,r14d
2554         mov     r12d,eax
2555         ror     r14d,9
2556         xor     r13d,r11d
2557         xor     r12d,ebx
2558         ror     r13d,5
2559         xor     r14d,edx
2560         and     r12d,r11d
2561         xor     r13d,r11d
2562         add     ecx,DWORD[20+rsp]
2563         mov     edi,edx
2564         xor     r12d,ebx
2565         ror     r14d,11
2566         xor     edi,r8d
2567         add     ecx,r12d
2568         ror     r13d,6
2569         and     r15d,edi
2570         xor     r14d,edx
2571         add     ecx,r13d
2572         xor     r15d,r8d
2573         ror     r14d,2
2574         add     r10d,ecx
2575         add     ecx,r15d
2576         mov     r13d,r10d
2577         add     r14d,ecx
2578         ror     r13d,14
2579         mov     ecx,r14d
2580         mov     r12d,r11d
2581         ror     r14d,9
2582         xor     r13d,r10d
2583         xor     r12d,eax
2584         ror     r13d,5
2585         xor     r14d,ecx
2586         and     r12d,r10d
2587         xor     r13d,r10d
2588         add     ebx,DWORD[24+rsp]
2589         mov     r15d,ecx
2590         xor     r12d,eax
2591         ror     r14d,11
2592         xor     r15d,edx
2593         add     ebx,r12d
2594         ror     r13d,6
2595         and     edi,r15d
2596         xor     r14d,ecx
2597         add     ebx,r13d
2598         xor     edi,edx
2599         ror     r14d,2
2600         add     r9d,ebx
2601         add     ebx,edi
2602         mov     r13d,r9d
2603         add     r14d,ebx
2604         ror     r13d,14
2605         mov     ebx,r14d
2606         mov     r12d,r10d
2607         ror     r14d,9
2608         xor     r13d,r9d
2609         xor     r12d,r11d
2610         ror     r13d,5
2611         xor     r14d,ebx
2612         and     r12d,r9d
2613         xor     r13d,r9d
2614         add     eax,DWORD[28+rsp]
2615         mov     edi,ebx
2616         xor     r12d,r11d
2617         ror     r14d,11
2618         xor     edi,ecx
2619         add     eax,r12d
2620         ror     r13d,6
2621         and     r15d,edi
2622         xor     r14d,ebx
2623         add     eax,r13d
2624         xor     r15d,ecx
2625         ror     r14d,2
2626         add     r8d,eax
2627         add     eax,r15d
2628         mov     r13d,r8d
2629         add     r14d,eax
2630         ror     r13d,14
2631         mov     eax,r14d
2632         mov     r12d,r9d
2633         ror     r14d,9
2634         xor     r13d,r8d
2635         xor     r12d,r10d
2636         ror     r13d,5
2637         xor     r14d,eax
2638         and     r12d,r8d
2639         xor     r13d,r8d
2640         add     r11d,DWORD[32+rsp]
2641         mov     r15d,eax
2642         xor     r12d,r10d
2643         ror     r14d,11
2644         xor     r15d,ebx
2645         add     r11d,r12d
2646         ror     r13d,6
2647         and     edi,r15d
2648         xor     r14d,eax
2649         add     r11d,r13d
2650         xor     edi,ebx
2651         ror     r14d,2
2652         add     edx,r11d
2653         add     r11d,edi
2654         mov     r13d,edx
2655         add     r14d,r11d
2656         ror     r13d,14
2657         mov     r11d,r14d
2658         mov     r12d,r8d
2659         ror     r14d,9
2660         xor     r13d,edx
2661         xor     r12d,r9d
2662         ror     r13d,5
2663         xor     r14d,r11d
2664         and     r12d,edx
2665         xor     r13d,edx
2666         add     r10d,DWORD[36+rsp]
2667         mov     edi,r11d
2668         xor     r12d,r9d
2669         ror     r14d,11
2670         xor     edi,eax
2671         add     r10d,r12d
2672         ror     r13d,6
2673         and     r15d,edi
2674         xor     r14d,r11d
2675         add     r10d,r13d
2676         xor     r15d,eax
2677         ror     r14d,2
2678         add     ecx,r10d
2679         add     r10d,r15d
2680         mov     r13d,ecx
2681         add     r14d,r10d
2682         ror     r13d,14
2683         mov     r10d,r14d
2684         mov     r12d,edx
2685         ror     r14d,9
2686         xor     r13d,ecx
2687         xor     r12d,r8d
2688         ror     r13d,5
2689         xor     r14d,r10d
2690         and     r12d,ecx
2691         xor     r13d,ecx
2692         add     r9d,DWORD[40+rsp]
2693         mov     r15d,r10d
2694         xor     r12d,r8d
2695         ror     r14d,11
2696         xor     r15d,r11d
2697         add     r9d,r12d
2698         ror     r13d,6
2699         and     edi,r15d
2700         xor     r14d,r10d
2701         add     r9d,r13d
2702         xor     edi,r11d
2703         ror     r14d,2
2704         add     ebx,r9d
2705         add     r9d,edi
2706         mov     r13d,ebx
2707         add     r14d,r9d
2708         ror     r13d,14
2709         mov     r9d,r14d
2710         mov     r12d,ecx
2711         ror     r14d,9
2712         xor     r13d,ebx
2713         xor     r12d,edx
2714         ror     r13d,5
2715         xor     r14d,r9d
2716         and     r12d,ebx
2717         xor     r13d,ebx
2718         add     r8d,DWORD[44+rsp]
2719         mov     edi,r9d
2720         xor     r12d,edx
2721         ror     r14d,11
2722         xor     edi,r10d
2723         add     r8d,r12d
2724         ror     r13d,6
2725         and     r15d,edi
2726         xor     r14d,r9d
2727         add     r8d,r13d
2728         xor     r15d,r10d
2729         ror     r14d,2
2730         add     eax,r8d
2731         add     r8d,r15d
2732         mov     r13d,eax
2733         add     r14d,r8d
2734         ror     r13d,14
2735         mov     r8d,r14d
2736         mov     r12d,ebx
2737         ror     r14d,9
2738         xor     r13d,eax
2739         xor     r12d,ecx
2740         ror     r13d,5
2741         xor     r14d,r8d
2742         and     r12d,eax
2743         xor     r13d,eax
2744         add     edx,DWORD[48+rsp]
2745         mov     r15d,r8d
2746         xor     r12d,ecx
2747         ror     r14d,11
2748         xor     r15d,r9d
2749         add     edx,r12d
2750         ror     r13d,6
2751         and     edi,r15d
2752         xor     r14d,r8d
2753         add     edx,r13d
2754         xor     edi,r9d
2755         ror     r14d,2
2756         add     r11d,edx
2757         add     edx,edi
2758         mov     r13d,r11d
2759         add     r14d,edx
2760         ror     r13d,14
2761         mov     edx,r14d
2762         mov     r12d,eax
2763         ror     r14d,9
2764         xor     r13d,r11d
2765         xor     r12d,ebx
2766         ror     r13d,5
2767         xor     r14d,edx
2768         and     r12d,r11d
2769         xor     r13d,r11d
2770         add     ecx,DWORD[52+rsp]
2771         mov     edi,edx
2772         xor     r12d,ebx
2773         ror     r14d,11
2774         xor     edi,r8d
2775         add     ecx,r12d
2776         ror     r13d,6
2777         and     r15d,edi
2778         xor     r14d,edx
2779         add     ecx,r13d
2780         xor     r15d,r8d
2781         ror     r14d,2
2782         add     r10d,ecx
2783         add     ecx,r15d
2784         mov     r13d,r10d
2785         add     r14d,ecx
2786         ror     r13d,14
2787         mov     ecx,r14d
2788         mov     r12d,r11d
2789         ror     r14d,9
2790         xor     r13d,r10d
2791         xor     r12d,eax
2792         ror     r13d,5
2793         xor     r14d,ecx
2794         and     r12d,r10d
2795         xor     r13d,r10d
2796         add     ebx,DWORD[56+rsp]
2797         mov     r15d,ecx
2798         xor     r12d,eax
2799         ror     r14d,11
2800         xor     r15d,edx
2801         add     ebx,r12d
2802         ror     r13d,6
2803         and     edi,r15d
2804         xor     r14d,ecx
2805         add     ebx,r13d
2806         xor     edi,edx
2807         ror     r14d,2
2808         add     r9d,ebx
2809         add     ebx,edi
2810         mov     r13d,r9d
2811         add     r14d,ebx
2812         ror     r13d,14
2813         mov     ebx,r14d
2814         mov     r12d,r10d
2815         ror     r14d,9
2816         xor     r13d,r9d
2817         xor     r12d,r11d
2818         ror     r13d,5
2819         xor     r14d,ebx
2820         and     r12d,r9d
2821         xor     r13d,r9d
2822         add     eax,DWORD[60+rsp]
2823         mov     edi,ebx
2824         xor     r12d,r11d
2825         ror     r14d,11
2826         xor     edi,ecx
2827         add     eax,r12d
2828         ror     r13d,6
2829         and     r15d,edi
2830         xor     r14d,ebx
2831         add     eax,r13d
2832         xor     r15d,ecx
2833         ror     r14d,2
2834         add     r8d,eax
2835         add     eax,r15d
2836         mov     r13d,r8d
2837         add     r14d,eax
2838         mov     rdi,QWORD[((64+0))+rsp]
2839         mov     eax,r14d
2840
2841         add     eax,DWORD[rdi]
2842         lea     rsi,[64+rsi]
2843         add     ebx,DWORD[4+rdi]
2844         add     ecx,DWORD[8+rdi]
2845         add     edx,DWORD[12+rdi]
2846         add     r8d,DWORD[16+rdi]
2847         add     r9d,DWORD[20+rdi]
2848         add     r10d,DWORD[24+rdi]
2849         add     r11d,DWORD[28+rdi]
2850
2851         cmp     rsi,QWORD[((64+16))+rsp]
2852
2853         mov     DWORD[rdi],eax
2854         mov     DWORD[4+rdi],ebx
2855         mov     DWORD[8+rdi],ecx
2856         mov     DWORD[12+rdi],edx
2857         mov     DWORD[16+rdi],r8d
2858         mov     DWORD[20+rdi],r9d
2859         mov     DWORD[24+rdi],r10d
2860         mov     DWORD[28+rdi],r11d
2861         jb      NEAR $L$loop_ssse3
2862
2863         mov     rsi,QWORD[((64+24))+rsp]
2864         movaps  xmm6,XMMWORD[((64+32))+rsp]
2865         movaps  xmm7,XMMWORD[((64+48))+rsp]
2866         movaps  xmm8,XMMWORD[((64+64))+rsp]
2867         movaps  xmm9,XMMWORD[((64+80))+rsp]
2868         mov     r15,QWORD[rsi]
2869         mov     r14,QWORD[8+rsi]
2870         mov     r13,QWORD[16+rsi]
2871         mov     r12,QWORD[24+rsi]
2872         mov     rbp,QWORD[32+rsi]
2873         mov     rbx,QWORD[40+rsi]
2874         lea     rsp,[48+rsi]
2875 $L$epilogue_ssse3:
2876         mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
2877         mov     rsi,QWORD[16+rsp]
2878         DB      0F3h,0C3h               ;repret
2879 $L$SEH_end_sha256_block_data_order_ssse3:
2880 EXTERN  __imp_RtlVirtualUnwind
2881
2882 ALIGN   16
2883 se_handler:
2884         push    rsi
2885         push    rdi
2886         push    rbx
2887         push    rbp
2888         push    r12
2889         push    r13
2890         push    r14
2891         push    r15
2892         pushfq
2893         sub     rsp,64
2894
2895         mov     rax,QWORD[120+r8]
2896         mov     rbx,QWORD[248+r8]
2897
2898         mov     rsi,QWORD[8+r9]
2899         mov     r11,QWORD[56+r9]
2900
2901         mov     r10d,DWORD[r11]
2902         lea     r10,[r10*1+rsi]
2903         cmp     rbx,r10
2904         jb      NEAR $L$in_prologue
2905
2906         mov     rax,QWORD[152+r8]
2907
2908         mov     r10d,DWORD[4+r11]
2909         lea     r10,[r10*1+rsi]
2910         cmp     rbx,r10
2911         jae     NEAR $L$in_prologue
2912         mov     rsi,rax
2913         mov     rax,QWORD[((64+24))+rax]
2914         lea     rax,[48+rax]
2915
2916         mov     rbx,QWORD[((-8))+rax]
2917         mov     rbp,QWORD[((-16))+rax]
2918         mov     r12,QWORD[((-24))+rax]
2919         mov     r13,QWORD[((-32))+rax]
2920         mov     r14,QWORD[((-40))+rax]
2921         mov     r15,QWORD[((-48))+rax]
2922         mov     QWORD[144+r8],rbx
2923         mov     QWORD[160+r8],rbp
2924         mov     QWORD[216+r8],r12
2925         mov     QWORD[224+r8],r13
2926         mov     QWORD[232+r8],r14
2927         mov     QWORD[240+r8],r15
2928
2929         lea     r10,[$L$epilogue]
2930         cmp     rbx,r10
2931         jb      NEAR $L$in_prologue
2932
2933         lea     rsi,[((64+32))+rsi]
2934         lea     rdi,[512+r8]
2935         mov     ecx,8
2936         DD      0xa548f3fc
2937
2938 $L$in_prologue:
2939         mov     rdi,QWORD[8+rax]
2940         mov     rsi,QWORD[16+rax]
2941         mov     QWORD[152+r8],rax
2942         mov     QWORD[168+r8],rsi
2943         mov     QWORD[176+r8],rdi
2944
2945         mov     rdi,QWORD[40+r9]
2946         mov     rsi,r8
2947         mov     ecx,154
2948         DD      0xa548f3fc
2949
2950         mov     rsi,r9
2951         xor     rcx,rcx
2952         mov     rdx,QWORD[8+rsi]
2953         mov     r8,QWORD[rsi]
2954         mov     r9,QWORD[16+rsi]
2955         mov     r10,QWORD[40+rsi]
2956         lea     r11,[56+rsi]
2957         lea     r12,[24+rsi]
2958         mov     QWORD[32+rsp],r10
2959         mov     QWORD[40+rsp],r11
2960         mov     QWORD[48+rsp],r12
2961         mov     QWORD[56+rsp],rcx
2962         call    QWORD[__imp_RtlVirtualUnwind]
2963
2964         mov     eax,1
2965         add     rsp,64
2966         popfq
2967         pop     r15
2968         pop     r14
2969         pop     r13
2970         pop     r12
2971         pop     rbp
2972         pop     rbx
2973         pop     rdi
2974         pop     rsi
2975         DB      0F3h,0C3h               ;repret
2976
2977 section .pdata rdata align=4
2978 ALIGN   4
2979         DD      $L$SEH_begin_sha256_block_data_order wrt ..imagebase
2980         DD      $L$SEH_end_sha256_block_data_order wrt ..imagebase
2981         DD      $L$SEH_info_sha256_block_data_order wrt ..imagebase
2982         DD      $L$SEH_begin_sha256_block_data_order_ssse3 wrt ..imagebase
2983         DD      $L$SEH_end_sha256_block_data_order_ssse3 wrt ..imagebase
2984         DD      $L$SEH_info_sha256_block_data_order_ssse3 wrt ..imagebase
2985 section .xdata rdata align=8
2986 ALIGN   8
2987 $L$SEH_info_sha256_block_data_order:
2988 DB      9,0,0,0
2989         DD      se_handler wrt ..imagebase
2990         DD      $L$prologue wrt ..imagebase,$L$epilogue wrt ..imagebase
2991 $L$SEH_info_sha256_block_data_order_ssse3:
2992 DB      9,0,0,0
2993         DD      se_handler wrt ..imagebase
2994         DD      $L$prologue_ssse3 wrt ..imagebase,$L$epilogue_ssse3 wrt ..imagebase