Sean,

I agree it is reasonable to think hard about adding extra dependencies to building. 

Seems Perl is very popular in Openssl:
/Volumes/Case/edk2(master)>find . -iname '*.pl' | wc -l
     283

Thanks,

Andrew Fish

On Aug 18, 2020, at 2:33 PM, Sean <spbrogan@outlook.com> wrote:

Mike,

I am not technically a basetool maintainer but as an active user/dev in basetools, i would be opposed to bringing in perl as an edk2 dependency. Also introducing another language is counter to the goal of aligning on python and improving the python used within edk2.  From my perspective the openssl config case isn't strong enough to counter the above goal. In fact as you know we are trying to change the paradigm for Crypto/OpenSSL with the Crypto Driver (https://github.com/tianocore/edk2/tree/master/CryptoPkg/Driver) and BaseCryptLibOnProtocolPpi (https://github.com/tianocore/edk2/tree/master/CryptoPkg/Library/BaseCryptLibOnProtocolPpi) work so that everyday development doesn't need to compile openssl in their edk2 builds.

So I support leaving it as is which means if you have to change something in openssl config you deal with it and a special one off.

Just my 2 cents.

Thanks
Sean


On 8/18/2020 9:15 AM, Michael D Kinney wrote:
Jian,
I want the BaseTools maintainers to evaluate these build requirements.
We already have a number of tool dependencies.  Adding one more for perl
may be acceptable.
Mike
-----Original Message-----
From: Wang, Jian J <jian.j.wang@intel.com>
Sent: Monday, August 17, 2020 7:37 PM
To: Zurcher, Christopher J <christopher.j.zurcher@intel.com>; Yao, Jiewen <jiewen.yao@intel.com>; Kinney, Michael D
<michael.d.kinney@intel.com>; devel@edk2.groups.io
Cc: Lu, XiaoyuX <xiaoyux.lu@intel.com>; Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: RE: [PATCH v2 2/2] CryptoPkg/OpensslLib: Commit the auto-generated assembly files for X64

I agree with Christopher. Currently manual works are inevitable in openssl upgrade,
because perl script is used to automate part of code generation. It's hard to ask
Windows developers to install an extra interpreter like perl, considering it's not
popular in Windows environment.

Regards,
Jian

-----Original Message-----
From: Zurcher, Christopher J <christopher.j.zurcher@intel.com>
Sent: Saturday, August 15, 2020 3:35 AM
To: Yao, Jiewen <jiewen.yao@intel.com>; Kinney, Michael D
<michael.d.kinney@intel.com>; devel@edk2.groups.io
Cc: Wang, Jian J <jian.j.wang@intel.com>; Lu, XiaoyuX <xiaoyux.lu@intel.com>;
Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: RE: [PATCH v2 2/2] CryptoPkg/OpensslLib: Commit the auto-generated
assembly files for X64

The current OpenSSL "UEFI" configuration depends on the OpenSSL build
happening in a Unix-like environment. For a Windows-based build, this must be
done in a wrapper such as Cygwin/git bash or WSL. Integrating the OpenSSL
config step into the build process is a non-trivial change.

That means, whenever we upgrade the openssl, we need manually
generate
them again.
Any step by step, or readme to tell us how to do that?

The process for generating these X64 files is virtually identical to the already-
existing maintainer process for OpensslLib, with only one additional argument
required to process_files.pl.

OpensslLib as it exists today in EDK2 already includes auto-generated files from
the Perl configure process. If we want to re-architect how we include OpenSSL
into EDK2, I think that should be done in a different patch set. Additionally, such
a large task might be a waste of time with the release of OpenSSL 3 happening
later this year. They are making changes to their build system, and I think that if
we are going to re-architect our side of it, we should wait until we are adopting
OpenSSL 3.

--
Christopher Zurcher

-----Original Message-----
From: Yao, Jiewen <jiewen.yao@intel.com>
Sent: Thursday, August 13, 2020 08:46
To: Kinney, Michael D <michael.d.kinney@intel.com>; Zurcher, Christopher J
<christopher.j.zurcher@intel.com>; devel@edk2.groups.io
Cc: Wang, Jian J <jian.j.wang@intel.com>; Lu, XiaoyuX
<xiaoyux.lu@intel.com>;
Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: RE: [PATCH v2 2/2] CryptoPkg/OpensslLib: Commit the auto-
generated
assembly files for X64

Thank you Mike to help on this.

I also believe that the best option is to integrate the auto-gen process in
base tool.



-----Original Message-----
From: Kinney, Michael D <michael.d.kinney@intel.com>
Sent: Thursday, August 13, 2020 11:38 PM
To: Yao, Jiewen <jiewen.yao@intel.com>; Zurcher, Christopher J
<christopher.j.zurcher@intel.com>; devel@edk2.groups.io; Kinney, Michael
D
<michael.d.kinney@intel.com>
Cc: Wang, Jian J <jian.j.wang@intel.com>; Lu, XiaoyuX
<xiaoyux.lu@intel.com>;
Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: RE: [PATCH v2 2/2] CryptoPkg/OpensslLib: Commit the auto-
generated
assembly files for X64

Hi Jiewen,

For this use case, generating the files as part of the build process would
add
a dependency in pearl.

Based on other recent CryptoPkg changes and some being discussed in BZ, I
am
seeing more changes to the OpenSLL .pl configuration files, and I am
concerned
that based on platform requirements, we may need to build OpenSSL with
different .pl config file settings which would also add a pearl dependency
to the build.

So exploring what it would take to add the pearl dependency to the build
system
is worth exploring and if successful would eliminate the need to checkin
these
types of autogenerated files.  This would also reduce maintenance of the
auto-genererated files when EDK II moves to a new version of OpenSSL.

@Cristopher - Can you please share a branch that uses pearl to generate the
files
instead of checking them in?  I would like the BaseTools maintainers to
review
that and evaluate adding the pearl dependency.  Hopefully, we can make the
pearl dependency detectable so it is only required if the build requires
it.

Thanks,

Mike

-----Original Message-----
From: Yao, Jiewen <jiewen.yao@intel.com>
Sent: Thursday, August 13, 2020 8:25 AM
To: Zurcher, Christopher J <christopher.j.zurcher@intel.com>;
devel@edk2.groups.io
Cc: Wang, Jian J <jian.j.wang@intel.com>; Lu, XiaoyuX
<xiaoyux.lu@intel.com>; Kinney, Michael D
<michael.d.kinney@intel.com>; Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: RE: [PATCH v2 2/2] CryptoPkg/OpensslLib: Commit the auto-
generated assembly files for X64

+ Mike Kinney

I am not sure if it is a right way to check in auto-generated file.
That means, whenever we upgrade the openssl, we need manually
generate
them again.
Any step by step, or readme to tell us how to do that?

Mike, would you please double confirm what is the right way for auto-
generated file in EDKII?


-----Original Message-----
From: Zurcher, Christopher J <christopher.j.zurcher@intel.com>
Sent: Tuesday, August 4, 2020 8:24 AM
To: devel@edk2.groups.io
Cc: Yao, Jiewen <jiewen.yao@intel.com>; Wang, Jian J
<jian.j.wang@intel.com>;
Lu, XiaoyuX <xiaoyux.lu@intel.com>; Ard Biesheuvel
<ard.biesheuvel@linaro.org>
Subject: [PATCH v2 2/2] CryptoPkg/OpensslLib: Commit the auto-
generated
assembly files for X64

BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2507

Adding the auto-generated assembly files for the X64 architecture.

Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Xiaoyu Lu <xiaoyux.lu@intel.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Christopher J Zurcher <christopher.j.zurcher@intel.com>
---
 CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-mb-x86_64.nasm
|
732
+++
 CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha1-x86_64.nasm
|
1916 ++++++++
 CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha256-
x86_64.nasm |
78 +
 CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-x86_64.nasm        |
5103
++++++++++++++++++++
 CryptoPkg/Library/OpensslLib/X64/crypto/aes/vpaes-x86_64.nasm        |
1173
+++++
 CryptoPkg/Library/OpensslLib/X64/crypto/modes/ghash-x86_64.nasm
|
1569 ++++++
 CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-mb-x86_64.nasm
|
3137
++++++++++++
 CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-x86_64.nasm         |
2884
+++++++++++
 CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-mb-x86_64.nasm
|
3461 +++++++++++++
 CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-x86_64.nasm
|
3313
+++++++++++++
 CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha512-x86_64.nasm
|
1938
++++++++
 CryptoPkg/Library/OpensslLib/X64/crypto/x86_64cpuid.nasm             |
491
++
 12 files changed, 25795 insertions(+)

diff --git a/CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-mb-
x86_64.nasm b/CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-mb-
x86_64.nasm
new file mode 100644
index 0000000000..1a3ed1dd35
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-mb-
x86_64.nasm
@@ -0,0 +1,732 @@
+; WARNING: do not edit!

+; Generated from openssl/crypto/aes/asm/aesni-mb-x86_64.pl

+;

+; Copyright 2013-2020 The OpenSSL Project Authors. All Rights
Reserved.

+;

+; Licensed under the OpenSSL license (the "License").  You may not use

+; this file except in compliance with the License.  You can obtain a
copy

+; in the file LICENSE in the source distribution or at

+; https://www.openssl.org/source/license.html

+

+default rel

+%define XMMWORD

+%define YMMWORD

+%define ZMMWORD

+section .text code align=64

+

+

+EXTERN  OPENSSL_ia32cap_P

+

+global  aesni_multi_cbc_encrypt

+

+ALIGN   32

+aesni_multi_cbc_encrypt:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_aesni_multi_cbc_encrypt:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+

+        mov     rax,rsp

+

+        push    rbx

+

+        push    rbp

+

+        push    r12

+

+        push    r13

+

+        push    r14

+

+        push    r15

+

+        lea     rsp,[((-168))+rsp]

+        movaps  XMMWORD[rsp],xmm6

+        movaps  XMMWORD[16+rsp],xmm7

+        movaps  XMMWORD[32+rsp],xmm8

+        movaps  XMMWORD[48+rsp],xmm9

+        movaps  XMMWORD[64+rsp],xmm10

+        movaps  XMMWORD[80+rsp],xmm11

+        movaps  XMMWORD[96+rsp],xmm12

+        movaps  XMMWORD[(-104)+rax],xmm13

+        movaps  XMMWORD[(-88)+rax],xmm14

+        movaps  XMMWORD[(-72)+rax],xmm15

+

+

+

+

+

+

+        sub     rsp,48

+        and     rsp,-64

+        mov     QWORD[16+rsp],rax

+

+

+$L$enc4x_body:

+        movdqu  xmm12,XMMWORD[rsi]

+        lea     rsi,[120+rsi]

+        lea     rdi,[80+rdi]

+

+$L$enc4x_loop_grande:

+        mov     DWORD[24+rsp],edx

+        xor     edx,edx

+        mov     ecx,DWORD[((-64))+rdi]

+        mov     r8,QWORD[((-80))+rdi]

+        cmp     ecx,edx

+        mov     r12,QWORD[((-72))+rdi]

+        cmovg   edx,ecx

+        test    ecx,ecx

+        movdqu  xmm2,XMMWORD[((-56))+rdi]

+        mov     DWORD[32+rsp],ecx

+        cmovle  r8,rsp

+        mov     ecx,DWORD[((-24))+rdi]

+        mov     r9,QWORD[((-40))+rdi]

+        cmp     ecx,edx

+        mov     r13,QWORD[((-32))+rdi]

+        cmovg   edx,ecx

+        test    ecx,ecx

+        movdqu  xmm3,XMMWORD[((-16))+rdi]

+        mov     DWORD[36+rsp],ecx

+        cmovle  r9,rsp

+        mov     ecx,DWORD[16+rdi]

+        mov     r10,QWORD[rdi]

+        cmp     ecx,edx

+        mov     r14,QWORD[8+rdi]

+        cmovg   edx,ecx

+        test    ecx,ecx

+        movdqu  xmm4,XMMWORD[24+rdi]

+        mov     DWORD[40+rsp],ecx

+        cmovle  r10,rsp

+        mov     ecx,DWORD[56+rdi]

+        mov     r11,QWORD[40+rdi]

+        cmp     ecx,edx

+        mov     r15,QWORD[48+rdi]

+        cmovg   edx,ecx

+        test    ecx,ecx

+        movdqu  xmm5,XMMWORD[64+rdi]

+        mov     DWORD[44+rsp],ecx

+        cmovle  r11,rsp

+        test    edx,edx

+        jz      NEAR $L$enc4x_done

+

+        movups  xmm1,XMMWORD[((16-120))+rsi]

+        pxor    xmm2,xmm12

+        movups  xmm0,XMMWORD[((32-120))+rsi]

+        pxor    xmm3,xmm12

+        mov     eax,DWORD[((240-120))+rsi]

+        pxor    xmm4,xmm12

+        movdqu  xmm6,XMMWORD[r8]

+        pxor    xmm5,xmm12

+        movdqu  xmm7,XMMWORD[r9]

+        pxor    xmm2,xmm6

+        movdqu  xmm8,XMMWORD[r10]

+        pxor    xmm3,xmm7

+        movdqu  xmm9,XMMWORD[r11]

+        pxor    xmm4,xmm8

+        pxor    xmm5,xmm9

+        movdqa  xmm10,XMMWORD[32+rsp]

+        xor     rbx,rbx

+        jmp     NEAR $L$oop_enc4x

+

+ALIGN   32

+$L$oop_enc4x:

+        add     rbx,16

+        lea     rbp,[16+rsp]

+        mov     ecx,1

+        sub     rbp,rbx

+

+DB      102,15,56,220,209

+        prefetcht0      [31+rbx*1+r8]

+        prefetcht0      [31+rbx*1+r9]

+DB      102,15,56,220,217

+        prefetcht0      [31+rbx*1+r10]

+        prefetcht0      [31+rbx*1+r10]

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        movups  xmm1,XMMWORD[((48-120))+rsi]

+        cmp     ecx,DWORD[32+rsp]

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+        cmovge  r8,rbp

+        cmovg   r12,rbp

+DB      102,15,56,220,232

+        movups  xmm0,XMMWORD[((-56))+rsi]

+        cmp     ecx,DWORD[36+rsp]

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+        cmovge  r9,rbp

+        cmovg   r13,rbp

+DB      102,15,56,220,233

+        movups  xmm1,XMMWORD[((-40))+rsi]

+        cmp     ecx,DWORD[40+rsp]

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+        cmovge  r10,rbp

+        cmovg   r14,rbp

+DB      102,15,56,220,232

+        movups  xmm0,XMMWORD[((-24))+rsi]

+        cmp     ecx,DWORD[44+rsp]

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+        cmovge  r11,rbp

+        cmovg   r15,rbp

+DB      102,15,56,220,233

+        movups  xmm1,XMMWORD[((-8))+rsi]

+        movdqa  xmm11,xmm10

+DB      102,15,56,220,208

+        prefetcht0      [15+rbx*1+r12]

+        prefetcht0      [15+rbx*1+r13]

+DB      102,15,56,220,216

+        prefetcht0      [15+rbx*1+r14]

+        prefetcht0      [15+rbx*1+r15]

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+        movups  xmm0,XMMWORD[((128-120))+rsi]

+        pxor    xmm12,xmm12

+

+DB      102,15,56,220,209

+        pcmpgtd xmm11,xmm12

+        movdqu  xmm12,XMMWORD[((-120))+rsi]

+DB      102,15,56,220,217

+        paddd   xmm10,xmm11

+        movdqa  XMMWORD[32+rsp],xmm10

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        movups  xmm1,XMMWORD[((144-120))+rsi]

+

+        cmp     eax,11

+

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+        movups  xmm0,XMMWORD[((160-120))+rsi]

+

+        jb      NEAR $L$enc4x_tail

+

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        movups  xmm1,XMMWORD[((176-120))+rsi]

+

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+        movups  xmm0,XMMWORD[((192-120))+rsi]

+

+        je      NEAR $L$enc4x_tail

+

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        movups  xmm1,XMMWORD[((208-120))+rsi]

+

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+        movups  xmm0,XMMWORD[((224-120))+rsi]

+        jmp     NEAR $L$enc4x_tail

+

+ALIGN   32

+$L$enc4x_tail:

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        movdqu  xmm6,XMMWORD[rbx*1+r8]

+        movdqu  xmm1,XMMWORD[((16-120))+rsi]

+

+DB      102,15,56,221,208

+        movdqu  xmm7,XMMWORD[rbx*1+r9]

+        pxor    xmm6,xmm12

+DB      102,15,56,221,216

+        movdqu  xmm8,XMMWORD[rbx*1+r10]

+        pxor    xmm7,xmm12

+DB      102,15,56,221,224

+        movdqu  xmm9,XMMWORD[rbx*1+r11]

+        pxor    xmm8,xmm12

+DB      102,15,56,221,232

+        movdqu  xmm0,XMMWORD[((32-120))+rsi]

+        pxor    xmm9,xmm12

+

+        movups  XMMWORD[(-16)+rbx*1+r12],xmm2

+        pxor    xmm2,xmm6

+        movups  XMMWORD[(-16)+rbx*1+r13],xmm3

+        pxor    xmm3,xmm7

+        movups  XMMWORD[(-16)+rbx*1+r14],xmm4

+        pxor    xmm4,xmm8

+        movups  XMMWORD[(-16)+rbx*1+r15],xmm5

+        pxor    xmm5,xmm9

+

+        dec     edx

+        jnz     NEAR $L$oop_enc4x

+

+        mov     rax,QWORD[16+rsp]

+

+        mov     edx,DWORD[24+rsp]

+

+

+

+

+

+

+

+

+

+

+        lea     rdi,[160+rdi]

+        dec     edx

+        jnz     NEAR $L$enc4x_loop_grande

+

+$L$enc4x_done:

+        movaps  xmm6,XMMWORD[((-216))+rax]

+        movaps  xmm7,XMMWORD[((-200))+rax]

+        movaps  xmm8,XMMWORD[((-184))+rax]

+        movaps  xmm9,XMMWORD[((-168))+rax]

+        movaps  xmm10,XMMWORD[((-152))+rax]

+        movaps  xmm11,XMMWORD[((-136))+rax]

+        movaps  xmm12,XMMWORD[((-120))+rax]

+

+

+

+        mov     r15,QWORD[((-48))+rax]

+

+        mov     r14,QWORD[((-40))+rax]

+

+        mov     r13,QWORD[((-32))+rax]

+

+        mov     r12,QWORD[((-24))+rax]

+

+        mov     rbp,QWORD[((-16))+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+

+        lea     rsp,[rax]

+

+$L$enc4x_epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_aesni_multi_cbc_encrypt:

+

+global  aesni_multi_cbc_decrypt

+

+ALIGN   32

+aesni_multi_cbc_decrypt:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_aesni_multi_cbc_decrypt:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+

+        mov     rax,rsp

+

+        push    rbx

+

+        push    rbp

+

+        push    r12

+

+        push    r13

+

+        push    r14

+

+        push    r15

+

+        lea     rsp,[((-168))+rsp]

+        movaps  XMMWORD[rsp],xmm6

+        movaps  XMMWORD[16+rsp],xmm7

+        movaps  XMMWORD[32+rsp],xmm8

+        movaps  XMMWORD[48+rsp],xmm9

+        movaps  XMMWORD[64+rsp],xmm10

+        movaps  XMMWORD[80+rsp],xmm11

+        movaps  XMMWORD[96+rsp],xmm12

+        movaps  XMMWORD[(-104)+rax],xmm13

+        movaps  XMMWORD[(-88)+rax],xmm14

+        movaps  XMMWORD[(-72)+rax],xmm15

+

+

+

+

+

+

+        sub     rsp,48

+        and     rsp,-64

+        mov     QWORD[16+rsp],rax

+

+

+$L$dec4x_body:

+        movdqu  xmm12,XMMWORD[rsi]

+        lea     rsi,[120+rsi]

+        lea     rdi,[80+rdi]

+

+$L$dec4x_loop_grande:

+        mov     DWORD[24+rsp],edx

+        xor     edx,edx

+        mov     ecx,DWORD[((-64))+rdi]

+        mov     r8,QWORD[((-80))+rdi]

+        cmp     ecx,edx

+        mov     r12,QWORD[((-72))+rdi]

+        cmovg   edx,ecx

+        test    ecx,ecx

+        movdqu  xmm6,XMMWORD[((-56))+rdi]

+        mov     DWORD[32+rsp],ecx

+        cmovle  r8,rsp

+        mov     ecx,DWORD[((-24))+rdi]

+        mov     r9,QWORD[((-40))+rdi]

+        cmp     ecx,edx

+        mov     r13,QWORD[((-32))+rdi]

+        cmovg   edx,ecx

+        test    ecx,ecx

+        movdqu  xmm7,XMMWORD[((-16))+rdi]

+        mov     DWORD[36+rsp],ecx

+        cmovle  r9,rsp

+        mov     ecx,DWORD[16+rdi]

+        mov     r10,QWORD[rdi]

+        cmp     ecx,edx

+        mov     r14,QWORD[8+rdi]

+        cmovg   edx,ecx

+        test    ecx,ecx

+        movdqu  xmm8,XMMWORD[24+rdi]

+        mov     DWORD[40+rsp],ecx

+        cmovle  r10,rsp

+        mov     ecx,DWORD[56+rdi]

+        mov     r11,QWORD[40+rdi]

+        cmp     ecx,edx

+        mov     r15,QWORD[48+rdi]

+        cmovg   edx,ecx

+        test    ecx,ecx

+        movdqu  xmm9,XMMWORD[64+rdi]

+        mov     DWORD[44+rsp],ecx

+        cmovle  r11,rsp

+        test    edx,edx

+        jz      NEAR $L$dec4x_done

+

+        movups  xmm1,XMMWORD[((16-120))+rsi]

+        movups  xmm0,XMMWORD[((32-120))+rsi]

+        mov     eax,DWORD[((240-120))+rsi]

+        movdqu  xmm2,XMMWORD[r8]

+        movdqu  xmm3,XMMWORD[r9]

+        pxor    xmm2,xmm12

+        movdqu  xmm4,XMMWORD[r10]

+        pxor    xmm3,xmm12

+        movdqu  xmm5,XMMWORD[r11]

+        pxor    xmm4,xmm12

+        pxor    xmm5,xmm12

+        movdqa  xmm10,XMMWORD[32+rsp]

+        xor     rbx,rbx

+        jmp     NEAR $L$oop_dec4x

+

+ALIGN   32

+$L$oop_dec4x:

+        add     rbx,16

+        lea     rbp,[16+rsp]

+        mov     ecx,1

+        sub     rbp,rbx

+

+DB      102,15,56,222,209

+        prefetcht0      [31+rbx*1+r8]

+        prefetcht0      [31+rbx*1+r9]

+DB      102,15,56,222,217

+        prefetcht0      [31+rbx*1+r10]

+        prefetcht0      [31+rbx*1+r11]

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+        movups  xmm1,XMMWORD[((48-120))+rsi]

+        cmp     ecx,DWORD[32+rsp]

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+        cmovge  r8,rbp

+        cmovg   r12,rbp

+DB      102,15,56,222,232

+        movups  xmm0,XMMWORD[((-56))+rsi]

+        cmp     ecx,DWORD[36+rsp]

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+        cmovge  r9,rbp

+        cmovg   r13,rbp

+DB      102,15,56,222,233

+        movups  xmm1,XMMWORD[((-40))+rsi]

+        cmp     ecx,DWORD[40+rsp]

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+        cmovge  r10,rbp

+        cmovg   r14,rbp

+DB      102,15,56,222,232

+        movups  xmm0,XMMWORD[((-24))+rsi]

+        cmp     ecx,DWORD[44+rsp]

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+        cmovge  r11,rbp

+        cmovg   r15,rbp

+DB      102,15,56,222,233

+        movups  xmm1,XMMWORD[((-8))+rsi]

+        movdqa  xmm11,xmm10

+DB      102,15,56,222,208

+        prefetcht0      [15+rbx*1+r12]

+        prefetcht0      [15+rbx*1+r13]

+DB      102,15,56,222,216

+        prefetcht0      [15+rbx*1+r14]

+        prefetcht0      [15+rbx*1+r15]

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+        movups  xmm0,XMMWORD[((128-120))+rsi]

+        pxor    xmm12,xmm12

+

+DB      102,15,56,222,209

+        pcmpgtd xmm11,xmm12

+        movdqu  xmm12,XMMWORD[((-120))+rsi]

+DB      102,15,56,222,217

+        paddd   xmm10,xmm11

+        movdqa  XMMWORD[32+rsp],xmm10

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+        movups  xmm1,XMMWORD[((144-120))+rsi]

+

+        cmp     eax,11

+

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+        movups  xmm0,XMMWORD[((160-120))+rsi]

+

+        jb      NEAR $L$dec4x_tail

+

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+        movups  xmm1,XMMWORD[((176-120))+rsi]

+

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+        movups  xmm0,XMMWORD[((192-120))+rsi]

+

+        je      NEAR $L$dec4x_tail

+

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+        movups  xmm1,XMMWORD[((208-120))+rsi]

+

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+        movups  xmm0,XMMWORD[((224-120))+rsi]

+        jmp     NEAR $L$dec4x_tail

+

+ALIGN   32

+$L$dec4x_tail:

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+        pxor    xmm6,xmm0

+        pxor    xmm7,xmm0

+DB      102,15,56,222,233

+        movdqu  xmm1,XMMWORD[((16-120))+rsi]

+        pxor    xmm8,xmm0

+        pxor    xmm9,xmm0

+        movdqu  xmm0,XMMWORD[((32-120))+rsi]

+

+DB      102,15,56,223,214

+DB      102,15,56,223,223

+        movdqu  xmm6,XMMWORD[((-16))+rbx*1+r8]

+        movdqu  xmm7,XMMWORD[((-16))+rbx*1+r9]

+DB      102,65,15,56,223,224

+DB      102,65,15,56,223,233

+        movdqu  xmm8,XMMWORD[((-16))+rbx*1+r10]

+        movdqu  xmm9,XMMWORD[((-16))+rbx*1+r11]

+

+        movups  XMMWORD[(-16)+rbx*1+r12],xmm2

+        movdqu  xmm2,XMMWORD[rbx*1+r8]

+        movups  XMMWORD[(-16)+rbx*1+r13],xmm3

+        movdqu  xmm3,XMMWORD[rbx*1+r9]

+        pxor    xmm2,xmm12

+        movups  XMMWORD[(-16)+rbx*1+r14],xmm4

+        movdqu  xmm4,XMMWORD[rbx*1+r10]

+        pxor    xmm3,xmm12

+        movups  XMMWORD[(-16)+rbx*1+r15],xmm5

+        movdqu  xmm5,XMMWORD[rbx*1+r11]

+        pxor    xmm4,xmm12

+        pxor    xmm5,xmm12

+

+        dec     edx

+        jnz     NEAR $L$oop_dec4x

+

+        mov     rax,QWORD[16+rsp]

+

+        mov     edx,DWORD[24+rsp]

+

+        lea     rdi,[160+rdi]

+        dec     edx

+        jnz     NEAR $L$dec4x_loop_grande

+

+$L$dec4x_done:

+        movaps  xmm6,XMMWORD[((-216))+rax]

+        movaps  xmm7,XMMWORD[((-200))+rax]

+        movaps  xmm8,XMMWORD[((-184))+rax]

+        movaps  xmm9,XMMWORD[((-168))+rax]

+        movaps  xmm10,XMMWORD[((-152))+rax]

+        movaps  xmm11,XMMWORD[((-136))+rax]

+        movaps  xmm12,XMMWORD[((-120))+rax]

+

+

+

+        mov     r15,QWORD[((-48))+rax]

+

+        mov     r14,QWORD[((-40))+rax]

+

+        mov     r13,QWORD[((-32))+rax]

+

+        mov     r12,QWORD[((-24))+rax]

+

+        mov     rbp,QWORD[((-16))+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+

+        lea     rsp,[rax]

+

+$L$dec4x_epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_aesni_multi_cbc_decrypt:

+EXTERN  __imp_RtlVirtualUnwind

+

+ALIGN   16

+se_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        mov     rsi,QWORD[8+r9]

+        mov     r11,QWORD[56+r9]

+

+        mov     r10d,DWORD[r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jb      NEAR $L$in_prologue

+

+        mov     rax,QWORD[152+r8]

+

+        mov     r10d,DWORD[4+r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jae     NEAR $L$in_prologue

+

+        mov     rax,QWORD[16+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+        mov     rbp,QWORD[((-16))+rax]

+        mov     r12,QWORD[((-24))+rax]

+        mov     r13,QWORD[((-32))+rax]

+        mov     r14,QWORD[((-40))+rax]

+        mov     r15,QWORD[((-48))+rax]

+        mov     QWORD[144+r8],rbx

+        mov     QWORD[160+r8],rbp

+        mov     QWORD[216+r8],r12

+        mov     QWORD[224+r8],r13

+        mov     QWORD[232+r8],r14

+        mov     QWORD[240+r8],r15

+

+        lea     rsi,[((-56-160))+rax]

+        lea     rdi,[512+r8]

+        mov     ecx,20

+        DD      0xa548f3fc

+

+$L$in_prologue:

+        mov     rdi,QWORD[8+rax]

+        mov     rsi,QWORD[16+rax]

+        mov     QWORD[152+r8],rax

+        mov     QWORD[168+r8],rsi

+        mov     QWORD[176+r8],rdi

+

+        mov     rdi,QWORD[40+r9]

+        mov     rsi,r8

+        mov     ecx,154

+        DD      0xa548f3fc

+

+        mov     rsi,r9

+        xor     rcx,rcx

+        mov     rdx,QWORD[8+rsi]

+        mov     r8,QWORD[rsi]

+        mov     r9,QWORD[16+rsi]

+        mov     r10,QWORD[40+rsi]

+        lea     r11,[56+rsi]

+        lea     r12,[24+rsi]

+        mov     QWORD[32+rsp],r10

+        mov     QWORD[40+rsp],r11

+        mov     QWORD[48+rsp],r12

+        mov     QWORD[56+rsp],rcx

+        call    QWORD[__imp_RtlVirtualUnwind]

+

+        mov     eax,1

+        add     rsp,64

+        popfq

+        pop     r15

+        pop     r14

+        pop     r13

+        pop     r12

+        pop     rbp

+        pop     rbx

+        pop     rdi

+        pop     rsi

+        DB      0F3h,0C3h               ;repret

+

+

+section .pdata rdata align=4

+ALIGN   4

+        DD      $L$SEH_begin_aesni_multi_cbc_encrypt wrt ..imagebase

+        DD      $L$SEH_end_aesni_multi_cbc_encrypt wrt ..imagebase

+        DD      $L$SEH_info_aesni_multi_cbc_encrypt wrt ..imagebase

+        DD      $L$SEH_begin_aesni_multi_cbc_decrypt wrt ..imagebase

+        DD      $L$SEH_end_aesni_multi_cbc_decrypt wrt ..imagebase

+        DD      $L$SEH_info_aesni_multi_cbc_decrypt wrt ..imagebase

+section .xdata rdata align=8

+ALIGN   8

+$L$SEH_info_aesni_multi_cbc_encrypt:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$enc4x_body wrt ..imagebase,$L$enc4x_epilogue
wrt ..imagebase

+$L$SEH_info_aesni_multi_cbc_decrypt:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$dec4x_body wrt ..imagebase,$L$dec4x_epilogue
wrt ..imagebase

diff --git a/CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha1-
x86_64.nasm b/CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-
sha1-
x86_64.nasm
new file mode 100644
index 0000000000..f4fd9ca50d
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha1-
x86_64.nasm
@@ -0,0 +1,1916 @@
+; WARNING: do not edit!

+; Generated from openssl/crypto/aes/asm/aesni-sha1-x86_64.pl

+;

+; Copyright 2011-2020 The OpenSSL Project Authors. All Rights
Reserved.

+;

+; Licensed under the OpenSSL license (the "License").  You may not use

+; this file except in compliance with the License.  You can obtain a
copy

+; in the file LICENSE in the source distribution or at

+; https://www.openssl.org/source/license.html

+

+default rel

+%define XMMWORD

+%define YMMWORD

+%define ZMMWORD

+section .text code align=64

+

+EXTERN  OPENSSL_ia32cap_P

+

+global  aesni_cbc_sha1_enc

+

+ALIGN   32

+aesni_cbc_sha1_enc:

+

+

+        mov     r10d,DWORD[((OPENSSL_ia32cap_P+0))]

+        mov     r11,QWORD[((OPENSSL_ia32cap_P+4))]

+        bt      r11,61

+        jc      NEAR aesni_cbc_sha1_enc_shaext

+        jmp     NEAR aesni_cbc_sha1_enc_ssse3

+        DB      0F3h,0C3h               ;repret

+

+

+

+ALIGN   32

+aesni_cbc_sha1_enc_ssse3:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_aesni_cbc_sha1_enc_ssse3:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+        mov     rcx,r9

+        mov     r8,QWORD[40+rsp]

+        mov     r9,QWORD[48+rsp]

+

+

+

+        mov     r10,QWORD[56+rsp]

+

+

+        push    rbx

+

+        push    rbp

+

+        push    r12

+

+        push    r13

+

+        push    r14

+

+        push    r15

+

+        lea     rsp,[((-264))+rsp]

+

+

+

+        movaps  XMMWORD[(96+0)+rsp],xmm6

+        movaps  XMMWORD[(96+16)+rsp],xmm7

+        movaps  XMMWORD[(96+32)+rsp],xmm8

+        movaps  XMMWORD[(96+48)+rsp],xmm9

+        movaps  XMMWORD[(96+64)+rsp],xmm10

+        movaps  XMMWORD[(96+80)+rsp],xmm11

+        movaps  XMMWORD[(96+96)+rsp],xmm12

+        movaps  XMMWORD[(96+112)+rsp],xmm13

+        movaps  XMMWORD[(96+128)+rsp],xmm14

+        movaps  XMMWORD[(96+144)+rsp],xmm15

+$L$prologue_ssse3:

+        mov     r12,rdi

+        mov     r13,rsi

+        mov     r14,rdx

+        lea     r15,[112+rcx]

+        movdqu  xmm2,XMMWORD[r8]

+        mov     QWORD[88+rsp],r8

+        shl     r14,6

+        sub     r13,r12

+        mov     r8d,DWORD[((240-112))+r15]

+        add     r14,r10

+

+        lea     r11,[K_XX_XX]

+        mov     eax,DWORD[r9]

+        mov     ebx,DWORD[4+r9]

+        mov     ecx,DWORD[8+r9]

+        mov     edx,DWORD[12+r9]

+        mov     esi,ebx

+        mov     ebp,DWORD[16+r9]

+        mov     edi,ecx

+        xor     edi,edx

+        and     esi,edi

+

+        movdqa  xmm3,XMMWORD[64+r11]

+        movdqa  xmm13,XMMWORD[r11]

+        movdqu  xmm4,XMMWORD[r10]

+        movdqu  xmm5,XMMWORD[16+r10]

+        movdqu  xmm6,XMMWORD[32+r10]

+        movdqu  xmm7,XMMWORD[48+r10]

+DB      102,15,56,0,227

+DB      102,15,56,0,235

+DB      102,15,56,0,243

+        add     r10,64

+        paddd   xmm4,xmm13

+DB      102,15,56,0,251

+        paddd   xmm5,xmm13

+        paddd   xmm6,xmm13

+        movdqa  XMMWORD[rsp],xmm4

+        psubd   xmm4,xmm13

+        movdqa  XMMWORD[16+rsp],xmm5

+        psubd   xmm5,xmm13

+        movdqa  XMMWORD[32+rsp],xmm6

+        psubd   xmm6,xmm13

+        movups  xmm15,XMMWORD[((-112))+r15]

+        movups  xmm0,XMMWORD[((16-112))+r15]

+        jmp     NEAR $L$oop_ssse3

+ALIGN   32

+$L$oop_ssse3:

+        ror     ebx,2

+        movups  xmm14,XMMWORD[r12]

+        xorps   xmm14,xmm15

+        xorps   xmm2,xmm14

+        movups  xmm1,XMMWORD[((-80))+r15]

+DB      102,15,56,220,208

+        pshufd  xmm8,xmm4,238

+        xor     esi,edx

+        movdqa  xmm12,xmm7

+        paddd   xmm13,xmm7

+        mov     edi,eax

+        add     ebp,DWORD[rsp]

+        punpcklqdq      xmm8,xmm5

+        xor     ebx,ecx

+        rol     eax,5

+        add     ebp,esi

+        psrldq  xmm12,4

+        and     edi,ebx

+        xor     ebx,ecx

+        pxor    xmm8,xmm4

+        add     ebp,eax

+        ror     eax,7

+        pxor    xmm12,xmm6

+        xor     edi,ecx

+        mov     esi,ebp

+        add     edx,DWORD[4+rsp]

+        pxor    xmm8,xmm12

+        xor     eax,ebx

+        rol     ebp,5

+        movdqa  XMMWORD[48+rsp],xmm13

+        add     edx,edi

+        movups  xmm0,XMMWORD[((-64))+r15]

+DB      102,15,56,220,209

+        and     esi,eax

+        movdqa  xmm3,xmm8

+        xor     eax,ebx

+        add     edx,ebp

+        ror     ebp,7

+        movdqa  xmm12,xmm8

+        xor     esi,ebx

+        pslldq  xmm3,12

+        paddd   xmm8,xmm8

+        mov     edi,edx

+        add     ecx,DWORD[8+rsp]

+        psrld   xmm12,31

+        xor     ebp,eax

+        rol     edx,5

+        add     ecx,esi

+        movdqa  xmm13,xmm3

+        and     edi,ebp

+        xor     ebp,eax

+        psrld   xmm3,30

+        add     ecx,edx

+        ror     edx,7

+        por     xmm8,xmm12

+        xor     edi,eax

+        mov     esi,ecx

+        add     ebx,DWORD[12+rsp]

+        movups  xmm1,XMMWORD[((-48))+r15]

+DB      102,15,56,220,208

+        pslld   xmm13,2

+        pxor    xmm8,xmm3

+        xor     edx,ebp

+        movdqa  xmm3,XMMWORD[r11]

+        rol     ecx,5

+        add     ebx,edi

+        and     esi,edx

+        pxor    xmm8,xmm13

+        xor     edx,ebp

+        add     ebx,ecx

+        ror     ecx,7

+        pshufd  xmm9,xmm5,238

+        xor     esi,ebp

+        movdqa  xmm13,xmm8

+        paddd   xmm3,xmm8

+        mov     edi,ebx

+        add     eax,DWORD[16+rsp]

+        punpcklqdq      xmm9,xmm6

+        xor     ecx,edx

+        rol     ebx,5

+        add     eax,esi

+        psrldq  xmm13,4

+        and     edi,ecx

+        xor     ecx,edx

+        pxor    xmm9,xmm5

+        add     eax,ebx

+        ror     ebx,7

+        movups  xmm0,XMMWORD[((-32))+r15]

+DB      102,15,56,220,209

+        pxor    xmm13,xmm7

+        xor     edi,edx

+        mov     esi,eax

+        add     ebp,DWORD[20+rsp]

+        pxor    xmm9,xmm13

+        xor     ebx,ecx

+        rol     eax,5

+        movdqa  XMMWORD[rsp],xmm3

+        add     ebp,edi

+        and     esi,ebx

+        movdqa  xmm12,xmm9

+        xor     ebx,ecx

+        add     ebp,eax

+        ror     eax,7

+        movdqa  xmm13,xmm9

+        xor     esi,ecx

+        pslldq  xmm12,12

+        paddd   xmm9,xmm9

+        mov     edi,ebp

+        add     edx,DWORD[24+rsp]

+        psrld   xmm13,31

+        xor     eax,ebx

+        rol     ebp,5

+        add     edx,esi

+        movups  xmm1,XMMWORD[((-16))+r15]

+DB      102,15,56,220,208

+        movdqa  xmm3,xmm12

+        and     edi,eax

+        xor     eax,ebx

+        psrld   xmm12,30

+        add     edx,ebp

+        ror     ebp,7

+        por     xmm9,xmm13

+        xor     edi,ebx

+        mov     esi,edx

+        add     ecx,DWORD[28+rsp]

+        pslld   xmm3,2

+        pxor    xmm9,xmm12

+        xor     ebp,eax

+        movdqa  xmm12,XMMWORD[16+r11]

+        rol     edx,5

+        add     ecx,edi

+        and     esi,ebp

+        pxor    xmm9,xmm3

+        xor     ebp,eax

+        add     ecx,edx

+        ror     edx,7

+        pshufd  xmm10,xmm6,238

+        xor     esi,eax

+        movdqa  xmm3,xmm9

+        paddd   xmm12,xmm9

+        mov     edi,ecx

+        add     ebx,DWORD[32+rsp]

+        movups  xmm0,XMMWORD[r15]

+DB      102,15,56,220,209

+        punpcklqdq      xmm10,xmm7

+        xor     edx,ebp

+        rol     ecx,5

+        add     ebx,esi

+        psrldq  xmm3,4

+        and     edi,edx

+        xor     edx,ebp

+        pxor    xmm10,xmm6

+        add     ebx,ecx

+        ror     ecx,7

+        pxor    xmm3,xmm8

+        xor     edi,ebp

+        mov     esi,ebx

+        add     eax,DWORD[36+rsp]

+        pxor    xmm10,xmm3

+        xor     ecx,edx

+        rol     ebx,5

+        movdqa  XMMWORD[16+rsp],xmm12

+        add     eax,edi

+        and     esi,ecx

+        movdqa  xmm13,xmm10

+        xor     ecx,edx

+        add     eax,ebx

+        ror     ebx,7

+        movups  xmm1,XMMWORD[16+r15]

+DB      102,15,56,220,208

+        movdqa  xmm3,xmm10

+        xor     esi,edx

+        pslldq  xmm13,12

+        paddd   xmm10,xmm10

+        mov     edi,eax

+        add     ebp,DWORD[40+rsp]

+        psrld   xmm3,31

+        xor     ebx,ecx

+        rol     eax,5

+        add     ebp,esi

+        movdqa  xmm12,xmm13

+        and     edi,ebx

+        xor     ebx,ecx

+        psrld   xmm13,30

+        add     ebp,eax

+        ror     eax,7

+        por     xmm10,xmm3

+        xor     edi,ecx

+        mov     esi,ebp

+        add     edx,DWORD[44+rsp]

+        pslld   xmm12,2

+        pxor    xmm10,xmm13

+        xor     eax,ebx

+        movdqa  xmm13,XMMWORD[16+r11]

+        rol     ebp,5

+        add     edx,edi

+        movups  xmm0,XMMWORD[32+r15]

+DB      102,15,56,220,209

+        and     esi,eax

+        pxor    xmm10,xmm12

+        xor     eax,ebx

+        add     edx,ebp

+        ror     ebp,7

+        pshufd  xmm11,xmm7,238

+        xor     esi,ebx

+        movdqa  xmm12,xmm10

+        paddd   xmm13,xmm10

+        mov     edi,edx

+        add     ecx,DWORD[48+rsp]

+        punpcklqdq      xmm11,xmm8

+        xor     ebp,eax

+        rol     edx,5

+        add     ecx,esi

+        psrldq  xmm12,4

+        and     edi,ebp

+        xor     ebp,eax

+        pxor    xmm11,xmm7

+        add     ecx,edx

+        ror     edx,7

+        pxor    xmm12,xmm9

+        xor     edi,eax

+        mov     esi,ecx

+        add     ebx,DWORD[52+rsp]

+        movups  xmm1,XMMWORD[48+r15]

+DB      102,15,56,220,208

+        pxor    xmm11,xmm12

+        xor     edx,ebp

+        rol     ecx,5

+        movdqa  XMMWORD[32+rsp],xmm13

+        add     ebx,edi

+        and     esi,edx

+        movdqa  xmm3,xmm11

+        xor     edx,ebp

+        add     ebx,ecx

+        ror     ecx,7

+        movdqa  xmm12,xmm11

+        xor     esi,ebp

+        pslldq  xmm3,12

+        paddd   xmm11,xmm11

+        mov     edi,ebx

+        add     eax,DWORD[56+rsp]

+        psrld   xmm12,31

+        xor     ecx,edx

+        rol     ebx,5

+        add     eax,esi

+        movdqa  xmm13,xmm3

+        and     edi,ecx

+        xor     ecx,edx

+        psrld   xmm3,30

+        add     eax,ebx

+        ror     ebx,7

+        cmp     r8d,11

+        jb      NEAR $L$aesenclast1

+        movups  xmm0,XMMWORD[64+r15]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[80+r15]

+DB      102,15,56,220,208

+        je      NEAR $L$aesenclast1

+        movups  xmm0,XMMWORD[96+r15]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[112+r15]

+DB      102,15,56,220,208

+$L$aesenclast1:

+DB      102,15,56,221,209

+        movups  xmm0,XMMWORD[((16-112))+r15]

+        por     xmm11,xmm12

+        xor     edi,edx

+        mov     esi,eax

+        add     ebp,DWORD[60+rsp]

+        pslld   xmm13,2

+        pxor    xmm11,xmm3

+        xor     ebx,ecx

+        movdqa  xmm3,XMMWORD[16+r11]

+        rol     eax,5

+        add     ebp,edi

+        and     esi,ebx

+        pxor    xmm11,xmm13

+        pshufd  xmm13,xmm10,238

+        xor     ebx,ecx

+        add     ebp,eax

+        ror     eax,7

+        pxor    xmm4,xmm8

+        xor     esi,ecx

+        mov     edi,ebp

+        add     edx,DWORD[rsp]

+        punpcklqdq      xmm13,xmm11

+        xor     eax,ebx

+        rol     ebp,5

+        pxor    xmm4,xmm5

+        add     edx,esi

+        movups  xmm14,XMMWORD[16+r12]

+        xorps   xmm14,xmm15

+        movups  XMMWORD[r13*1+r12],xmm2

+        xorps   xmm2,xmm14

+        movups  xmm1,XMMWORD[((-80))+r15]

+DB      102,15,56,220,208

+        and     edi,eax

+        movdqa  xmm12,xmm3

+        xor     eax,ebx

+        paddd   xmm3,xmm11

+        add     edx,ebp

+        pxor    xmm4,xmm13

+        ror     ebp,7

+        xor     edi,ebx

+        mov     esi,edx

+        add     ecx,DWORD[4+rsp]

+        movdqa  xmm13,xmm4

+        xor     ebp,eax

+        rol     edx,5

+        movdqa  XMMWORD[48+rsp],xmm3

+        add     ecx,edi

+        and     esi,ebp

+        xor     ebp,eax

+        pslld   xmm4,2

+        add     ecx,edx

+        ror     edx,7

+        psrld   xmm13,30

+        xor     esi,eax

+        mov     edi,ecx

+        add     ebx,DWORD[8+rsp]

+        movups  xmm0,XMMWORD[((-64))+r15]

+DB      102,15,56,220,209

+        por     xmm4,xmm13

+        xor     edx,ebp

+        rol     ecx,5

+        pshufd  xmm3,xmm11,238

+        add     ebx,esi

+        and     edi,edx

+        xor     edx,ebp

+        add     ebx,ecx

+        add     eax,DWORD[12+rsp]

+        xor     edi,ebp

+        mov     esi,ebx

+        rol     ebx,5

+        add     eax,edi

+        xor     esi,edx

+        ror     ecx,7

+        add     eax,ebx

+        pxor    xmm5,xmm9

+        add     ebp,DWORD[16+rsp]

+        movups  xmm1,XMMWORD[((-48))+r15]

+DB      102,15,56,220,208

+        xor     esi,ecx

+        punpcklqdq      xmm3,xmm4

+        mov     edi,eax

+        rol     eax,5

+        pxor    xmm5,xmm6

+        add     ebp,esi

+        xor     edi,ecx

+        movdqa  xmm13,xmm12

+        ror     ebx,7

+        paddd   xmm12,xmm4

+        add     ebp,eax

+        pxor    xmm5,xmm3

+        add     edx,DWORD[20+rsp]

+        xor     edi,ebx

+        mov     esi,ebp

+        rol     ebp,5

+        movdqa  xmm3,xmm5

+        add     edx,edi

+        xor     esi,ebx

+        movdqa  XMMWORD[rsp],xmm12

+        ror     eax,7

+        add     edx,ebp

+        add     ecx,DWORD[24+rsp]

+        pslld   xmm5,2

+        xor     esi,eax

+        mov     edi,edx

+        psrld   xmm3,30

+        rol     edx,5

+        add     ecx,esi

+        movups  xmm0,XMMWORD[((-32))+r15]

+DB      102,15,56,220,209

+        xor     edi,eax

+        ror     ebp,7

+        por     xmm5,xmm3

+        add     ecx,edx

+        add     ebx,DWORD[28+rsp]

+        pshufd  xmm12,xmm4,238

+        xor     edi,ebp

+        mov     esi,ecx

+        rol     ecx,5

+        add     ebx,edi

+        xor     esi,ebp

+        ror     edx,7

+        add     ebx,ecx

+        pxor    xmm6,xmm10

+        add     eax,DWORD[32+rsp]

+        xor     esi,edx

+        punpcklqdq      xmm12,xmm5

+        mov     edi,ebx

+        rol     ebx,5

+        pxor    xmm6,xmm7

+        add     eax,esi

+        xor     edi,edx

+        movdqa  xmm3,XMMWORD[32+r11]

+        ror     ecx,7

+        paddd   xmm13,xmm5

+        add     eax,ebx

+        pxor    xmm6,xmm12

+        add     ebp,DWORD[36+rsp]

+        movups  xmm1,XMMWORD[((-16))+r15]

+DB      102,15,56,220,208

+        xor     edi,ecx

+        mov     esi,eax

+        rol     eax,5

+        movdqa  xmm12,xmm6

+        add     ebp,edi

+        xor     esi,ecx

+        movdqa  XMMWORD[16+rsp],xmm13

+        ror     ebx,7

+        add     ebp,eax

+        add     edx,DWORD[40+rsp]

+        pslld   xmm6,2

+        xor     esi,ebx

+        mov     edi,ebp

+        psrld   xmm12,30

+        rol     ebp,5

+        add     edx,esi

+        xor     edi,ebx

+        ror     eax,7

+        por     xmm6,xmm12

+        add     edx,ebp

+        add     ecx,DWORD[44+rsp]

+        pshufd  xmm13,xmm5,238

+        xor     edi,eax

+        mov     esi,edx

+        rol     edx,5

+        add     ecx,edi

+        movups  xmm0,XMMWORD[r15]

+DB      102,15,56,220,209

+        xor     esi,eax

+        ror     ebp,7

+        add     ecx,edx

+        pxor    xmm7,xmm11

+        add     ebx,DWORD[48+rsp]

+        xor     esi,ebp

+        punpcklqdq      xmm13,xmm6

+        mov     edi,ecx

+        rol     ecx,5

+        pxor    xmm7,xmm8

+        add     ebx,esi

+        xor     edi,ebp

+        movdqa  xmm12,xmm3

+        ror     edx,7

+        paddd   xmm3,xmm6

+        add     ebx,ecx

+        pxor    xmm7,xmm13

+        add     eax,DWORD[52+rsp]

+        xor     edi,edx

+        mov     esi,ebx

+        rol     ebx,5

+        movdqa  xmm13,xmm7

+        add     eax,edi

+        xor     esi,edx

+        movdqa  XMMWORD[32+rsp],xmm3

+        ror     ecx,7

+        add     eax,ebx

+        add     ebp,DWORD[56+rsp]

+        movups  xmm1,XMMWORD[16+r15]

+DB      102,15,56,220,208

+        pslld   xmm7,2

+        xor     esi,ecx

+        mov     edi,eax

+        psrld   xmm13,30

+        rol     eax,5

+        add     ebp,esi

+        xor     edi,ecx

+        ror     ebx,7

+        por     xmm7,xmm13

+        add     ebp,eax

+        add     edx,DWORD[60+rsp]

+        pshufd  xmm3,xmm6,238

+        xor     edi,ebx

+        mov     esi,ebp

+        rol     ebp,5

+        add     edx,edi

+        xor     esi,ebx

+        ror     eax,7

+        add     edx,ebp

+        pxor    xmm8,xmm4

+        add     ecx,DWORD[rsp]

+        xor     esi,eax

+        punpcklqdq      xmm3,xmm7

+        mov     edi,edx

+        rol     edx,5

+        pxor    xmm8,xmm9

+        add     ecx,esi

+        movups  xmm0,XMMWORD[32+r15]

+DB      102,15,56,220,209

+        xor     edi,eax

+        movdqa  xmm13,xmm12

+        ror     ebp,7

+        paddd   xmm12,xmm7

+        add     ecx,edx

+        pxor    xmm8,xmm3

+        add     ebx,DWORD[4+rsp]

+        xor     edi,ebp

+        mov     esi,ecx

+        rol     ecx,5

+        movdqa  xmm3,xmm8

+        add     ebx,edi

+        xor     esi,ebp

+        movdqa  XMMWORD[48+rsp],xmm12

+        ror     edx,7

+        add     ebx,ecx

+        add     eax,DWORD[8+rsp]

+        pslld   xmm8,2

+        xor     esi,edx

+        mov     edi,ebx

+        psrld   xmm3,30

+        rol     ebx,5

+        add     eax,esi

+        xor     edi,edx

+        ror     ecx,7

+        por     xmm8,xmm3

+        add     eax,ebx

+        add     ebp,DWORD[12+rsp]

+        movups  xmm1,XMMWORD[48+r15]

+DB      102,15,56,220,208

+        pshufd  xmm12,xmm7,238

+        xor     edi,ecx

+        mov     esi,eax

+        rol     eax,5

+        add     ebp,edi

+        xor     esi,ecx

+        ror     ebx,7

+        add     ebp,eax

+        pxor    xmm9,xmm5

+        add     edx,DWORD[16+rsp]

+        xor     esi,ebx

+        punpcklqdq      xmm12,xmm8

+        mov     edi,ebp

+        rol     ebp,5

+        pxor    xmm9,xmm10

+        add     edx,esi

+        xor     edi,ebx

+        movdqa  xmm3,xmm13

+        ror     eax,7

+        paddd   xmm13,xmm8

+        add     edx,ebp

+        pxor    xmm9,xmm12

+        add     ecx,DWORD[20+rsp]

+        xor     edi,eax

+        mov     esi,edx

+        rol     edx,5

+        movdqa  xmm12,xmm9

+        add     ecx,edi

+        cmp     r8d,11

+        jb      NEAR $L$aesenclast2

+        movups  xmm0,XMMWORD[64+r15]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[80+r15]

+DB      102,15,56,220,208

+        je      NEAR $L$aesenclast2

+        movups  xmm0,XMMWORD[96+r15]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[112+r15]

+DB      102,15,56,220,208

+$L$aesenclast2:

+DB      102,15,56,221,209

+        movups  xmm0,XMMWORD[((16-112))+r15]

+        xor     esi,eax

+        movdqa  XMMWORD[rsp],xmm13

+        ror     ebp,7

+        add     ecx,edx

+        add     ebx,DWORD[24+rsp]

+        pslld   xmm9,2

+        xor     esi,ebp

+        mov     edi,ecx

+        psrld   xmm12,30

+        rol     ecx,5

+        add     ebx,esi

+        xor     edi,ebp

+        ror     edx,7

+        por     xmm9,xmm12

+        add     ebx,ecx

+        add     eax,DWORD[28+rsp]

+        pshufd  xmm13,xmm8,238

+        ror     ecx,7

+        mov     esi,ebx

+        xor     edi,edx

+        rol     ebx,5

+        add     eax,edi

+        xor     esi,ecx

+        xor     ecx,edx

+        add     eax,ebx

+        pxor    xmm10,xmm6

+        add     ebp,DWORD[32+rsp]

+        movups  xmm14,XMMWORD[32+r12]

+        xorps   xmm14,xmm15

+        movups  XMMWORD[16+r12*1+r13],xmm2

+        xorps   xmm2,xmm14

+        movups  xmm1,XMMWORD[((-80))+r15]

+DB      102,15,56,220,208

+        and     esi,ecx

+        xor     ecx,edx

+        ror     ebx,7

+        punpcklqdq      xmm13,xmm9

+        mov     edi,eax

+        xor     esi,ecx

+        pxor    xmm10,xmm11

+        rol     eax,5

+        add     ebp,esi

+        movdqa  xmm12,xmm3

+        xor     edi,ebx

+        paddd   xmm3,xmm9

+        xor     ebx,ecx

+        pxor    xmm10,xmm13

+        add     ebp,eax

+        add     edx,DWORD[36+rsp]

+        and     edi,ebx

+        xor     ebx,ecx

+        ror     eax,7

+        movdqa  xmm13,xmm10

+        mov     esi,ebp

+        xor     edi,ebx

+        movdqa  XMMWORD[16+rsp],xmm3

+        rol     ebp,5

+        add     edx,edi

+        movups  xmm0,XMMWORD[((-64))+r15]

+DB      102,15,56,220,209

+        xor     esi,eax

+        pslld   xmm10,2

+        xor     eax,ebx

+        add     edx,ebp

+        psrld   xmm13,30

+        add     ecx,DWORD[40+rsp]

+        and     esi,eax

+        xor     eax,ebx

+        por     xmm10,xmm13

+        ror     ebp,7

+        mov     edi,edx

+        xor     esi,eax

+        rol     edx,5

+        pshufd  xmm3,xmm9,238

+        add     ecx,esi

+        xor     edi,ebp

+        xor     ebp,eax

+        add     ecx,edx

+        add     ebx,DWORD[44+rsp]

+        and     edi,ebp

+        xor     ebp,eax

+        ror     edx,7

+        movups  xmm1,XMMWORD[((-48))+r15]

+DB      102,15,56,220,208

+        mov     esi,ecx

+        xor     edi,ebp

+        rol     ecx,5

+        add     ebx,edi

+        xor     esi,edx

+        xor     edx,ebp

+        add     ebx,ecx

+        pxor    xmm11,xmm7

+        add     eax,DWORD[48+rsp]

+        and     esi,edx

+        xor     edx,ebp

+        ror     ecx,7

+        punpcklqdq      xmm3,xmm10

+        mov     edi,ebx

+        xor     esi,edx

+        pxor    xmm11,xmm4

+        rol     ebx,5

+        add     eax,esi

+        movdqa  xmm13,XMMWORD[48+r11]

+        xor     edi,ecx

+        paddd   xmm12,xmm10

+        xor     ecx,edx

+        pxor    xmm11,xmm3

+        add     eax,ebx

+        add     ebp,DWORD[52+rsp]

+        movups  xmm0,XMMWORD[((-32))+r15]

+DB      102,15,56,220,209

+        and     edi,ecx

+        xor     ecx,edx

+        ror     ebx,7

+        movdqa  xmm3,xmm11

+        mov     esi,eax

+        xor     edi,ecx

+        movdqa  XMMWORD[32+rsp],xmm12

+        rol     eax,5

+        add     ebp,edi

+        xor     esi,ebx

+        pslld   xmm11,2

+        xor     ebx,ecx

+        add     ebp,eax

+        psrld   xmm3,30

+        add     edx,DWORD[56+rsp]

+        and     esi,ebx

+        xor     ebx,ecx

+        por     xmm11,xmm3

+        ror     eax,7

+        mov     edi,ebp

+        xor     esi,ebx

+        rol     ebp,5

+        pshufd  xmm12,xmm10,238

+        add     edx,esi

+        movups  xmm1,XMMWORD[((-16))+r15]

+DB      102,15,56,220,208

+        xor     edi,eax

+        xor     eax,ebx

+        add     edx,ebp

+        add     ecx,DWORD[60+rsp]

+        and     edi,eax

+        xor     eax,ebx

+        ror     ebp,7

+        mov     esi,edx

+        xor     edi,eax

+        rol     edx,5

+        add     ecx,edi

+        xor     esi,ebp

+        xor     ebp,eax

+        add     ecx,edx

+        pxor    xmm4,xmm8

+        add     ebx,DWORD[rsp]

+        and     esi,ebp

+        xor     ebp,eax

+        ror     edx,7

+        movups  xmm0,XMMWORD[r15]

+DB      102,15,56,220,209

+        punpcklqdq      xmm12,xmm11

+        mov     edi,ecx

+        xor     esi,ebp

+        pxor    xmm4,xmm5

+        rol     ecx,5

+        add     ebx,esi

+        movdqa  xmm3,xmm13

+        xor     edi,edx

+        paddd   xmm13,xmm11

+        xor     edx,ebp

+        pxor    xmm4,xmm12

+        add     ebx,ecx

+        add     eax,DWORD[4+rsp]

+        and     edi,edx

+        xor     edx,ebp

+        ror     ecx,7

+        movdqa  xmm12,xmm4

+        mov     esi,ebx

+        xor     edi,edx

+        movdqa  XMMWORD[48+rsp],xmm13

+        rol     ebx,5

+        add     eax,edi

+        xor     esi,ecx

+        pslld   xmm4,2

+        xor     ecx,edx

+        add     eax,ebx

+        psrld   xmm12,30

+        add     ebp,DWORD[8+rsp]

+        movups  xmm1,XMMWORD[16+r15]

+DB      102,15,56,220,208

+        and     esi,ecx

+        xor     ecx,edx

+        por     xmm4,xmm12

+        ror     ebx,7

+        mov     edi,eax

+        xor     esi,ecx

+        rol     eax,5

+        pshufd  xmm13,xmm11,238

+        add     ebp,esi

+        xor     edi,ebx

+        xor     ebx,ecx

+        add     ebp,eax

+        add     edx,DWORD[12+rsp]

+        and     edi,ebx

+        xor     ebx,ecx

+        ror     eax,7

+        mov     esi,ebp

+        xor     edi,ebx

+        rol     ebp,5

+        add     edx,edi

+        movups  xmm0,XMMWORD[32+r15]

+DB      102,15,56,220,209

+        xor     esi,eax

+        xor     eax,ebx

+        add     edx,ebp

+        pxor    xmm5,xmm9

+        add     ecx,DWORD[16+rsp]

+        and     esi,eax

+        xor     eax,ebx

+        ror     ebp,7

+        punpcklqdq      xmm13,xmm4

+        mov     edi,edx

+        xor     esi,eax

+        pxor    xmm5,xmm6

+        rol     edx,5

+        add     ecx,esi

+        movdqa  xmm12,xmm3

+        xor     edi,ebp

+        paddd   xmm3,xmm4

+        xor     ebp,eax

+        pxor    xmm5,xmm13

+        add     ecx,edx

+        add     ebx,DWORD[20+rsp]

+        and     edi,ebp

+        xor     ebp,eax

+        ror     edx,7

+        movups  xmm1,XMMWORD[48+r15]

+DB      102,15,56,220,208

+        movdqa  xmm13,xmm5

+        mov     esi,ecx

+        xor     edi,ebp

+        movdqa  XMMWORD[rsp],xmm3

+        rol     ecx,5

+        add     ebx,edi

+        xor     esi,edx

+        pslld   xmm5,2

+        xor     edx,ebp

+        add     ebx,ecx

+        psrld   xmm13,30

+        add     eax,DWORD[24+rsp]

+        and     esi,edx

+        xor     edx,ebp

+        por     xmm5,xmm13

+        ror     ecx,7

+        mov     edi,ebx

+        xor     esi,edx

+        rol     ebx,5

+        pshufd  xmm3,xmm4,238

+        add     eax,esi

+        xor     edi,ecx

+        xor     ecx,edx

+        add     eax,ebx

+        add     ebp,DWORD[28+rsp]

+        cmp     r8d,11

+        jb      NEAR $L$aesenclast3

+        movups  xmm0,XMMWORD[64+r15]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[80+r15]

+DB      102,15,56,220,208

+        je      NEAR $L$aesenclast3

+        movups  xmm0,XMMWORD[96+r15]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[112+r15]

+DB      102,15,56,220,208

+$L$aesenclast3:

+DB      102,15,56,221,209

+        movups  xmm0,XMMWORD[((16-112))+r15]

+        and     edi,ecx

+        xor     ecx,edx

+        ror     ebx,7

+        mov     esi,eax

+        xor     edi,ecx

+        rol     eax,5

+        add     ebp,edi

+        xor     esi,ebx

+        xor     ebx,ecx

+        add     ebp,eax

+        pxor    xmm6,xmm10

+        add     edx,DWORD[32+rsp]

+        and     esi,ebx

+        xor     ebx,ecx

+        ror     eax,7

+        punpcklqdq      xmm3,xmm5

+        mov     edi,ebp

+        xor     esi,ebx

+        pxor    xmm6,xmm7

+        rol     ebp,5

+        add     edx,esi

+        movups  xmm14,XMMWORD[48+r12]

+        xorps   xmm14,xmm15

+        movups  XMMWORD[32+r12*1+r13],xmm2

+        xorps   xmm2,xmm14

+        movups  xmm1,XMMWORD[((-80))+r15]

+DB      102,15,56,220,208

+        movdqa  xmm13,xmm12

+        xor     edi,eax

+        paddd   xmm12,xmm5

+        xor     eax,ebx

+        pxor    xmm6,xmm3

+        add     edx,ebp

+        add     ecx,DWORD[36+rsp]

+        and     edi,eax

+        xor     eax,ebx

+        ror     ebp,7

+        movdqa  xmm3,xmm6

+        mov     esi,edx

+        xor     edi,eax

+        movdqa  XMMWORD[16+rsp],xmm12

+        rol     edx,5

+        add     ecx,edi

+        xor     esi,ebp

+        pslld   xmm6,2

+        xor     ebp,eax

+        add     ecx,edx

+        psrld   xmm3,30

+        add     ebx,DWORD[40+rsp]

+        and     esi,ebp

+        xor     ebp,eax

+        por     xmm6,xmm3

+        ror     edx,7

+        movups  xmm0,XMMWORD[((-64))+r15]

+DB      102,15,56,220,209

+        mov     edi,ecx

+        xor     esi,ebp

+        rol     ecx,5

+        pshufd  xmm12,xmm5,238

+        add     ebx,esi

+        xor     edi,edx

+        xor     edx,ebp

+        add     ebx,ecx

+        add     eax,DWORD[44+rsp]

+        and     edi,edx

+        xor     edx,ebp

+        ror     ecx,7

+        mov     esi,ebx

+        xor     edi,edx

+        rol     ebx,5

+        add     eax,edi

+        xor     esi,edx

+        add     eax,ebx

+        pxor    xmm7,xmm11

+        add     ebp,DWORD[48+rsp]

+        movups  xmm1,XMMWORD[((-48))+r15]

+DB      102,15,56,220,208

+        xor     esi,ecx

+        punpcklqdq      xmm12,xmm6

+        mov     edi,eax

+        rol     eax,5

+        pxor    xmm7,xmm8

+        add     ebp,esi

+        xor     edi,ecx

+        movdqa  xmm3,xmm13

+        ror     ebx,7

+        paddd   xmm13,xmm6

+        add     ebp,eax

+        pxor    xmm7,xmm12

+        add     edx,DWORD[52+rsp]

+        xor     edi,ebx

+        mov     esi,ebp

+        rol     ebp,5

+        movdqa  xmm12,xmm7

+        add     edx,edi

+        xor     esi,ebx

+        movdqa  XMMWORD[32+rsp],xmm13

+        ror     eax,7

+        add     edx,ebp

+        add     ecx,DWORD[56+rsp]

+        pslld   xmm7,2

+        xor     esi,eax

+        mov     edi,edx

+        psrld   xmm12,30

+        rol     edx,5

+        add     ecx,esi

+        movups  xmm0,XMMWORD[((-32))+r15]

+DB      102,15,56,220,209

+        xor     edi,eax

+        ror     ebp,7

+        por     xmm7,xmm12

+        add     ecx,edx

+        add     ebx,DWORD[60+rsp]

+        xor     edi,ebp

+        mov     esi,ecx

+        rol     ecx,5

+        add     ebx,edi

+        xor     esi,ebp

+        ror     edx,7

+        add     ebx,ecx

+        add     eax,DWORD[rsp]

+        xor     esi,edx

+        mov     edi,ebx

+        rol     ebx,5

+        paddd   xmm3,xmm7

+        add     eax,esi

+        xor     edi,edx

+        movdqa  XMMWORD[48+rsp],xmm3

+        ror     ecx,7

+        add     eax,ebx

+        add     ebp,DWORD[4+rsp]

+        movups  xmm1,XMMWORD[((-16))+r15]

+DB      102,15,56,220,208

+        xor     edi,ecx

+        mov     esi,eax

+        rol     eax,5

+        add     ebp,edi

+        xor     esi,ecx

+        ror     ebx,7

+        add     ebp,eax

+        add     edx,DWORD[8+rsp]

+        xor     esi,ebx

+        mov     edi,ebp

+        rol     ebp,5

+        add     edx,esi

+        xor     edi,ebx

+        ror     eax,7

+        add     edx,ebp

+        add     ecx,DWORD[12+rsp]

+        xor     edi,eax

+        mov     esi,edx

+        rol     edx,5

+        add     ecx,edi

+        movups  xmm0,XMMWORD[r15]

+DB      102,15,56,220,209

+        xor     esi,eax

+        ror     ebp,7

+        add     ecx,edx

+        cmp     r10,r14

+        je      NEAR $L$done_ssse3

+        movdqa  xmm3,XMMWORD[64+r11]

+        movdqa  xmm13,XMMWORD[r11]

+        movdqu  xmm4,XMMWORD[r10]

+        movdqu  xmm5,XMMWORD[16+r10]

+        movdqu  xmm6,XMMWORD[32+r10]

+        movdqu  xmm7,XMMWORD[48+r10]

+DB      102,15,56,0,227

+        add     r10,64

+        add     ebx,DWORD[16+rsp]

+        xor     esi,ebp

+        mov     edi,ecx

+DB      102,15,56,0,235

+        rol     ecx,5

+        add     ebx,esi

+        xor     edi,ebp

+        ror     edx,7

+        paddd   xmm4,xmm13

+        add     ebx,ecx

+        add     eax,DWORD[20+rsp]

+        xor     edi,edx

+        mov     esi,ebx

+        movdqa  XMMWORD[rsp],xmm4

+        rol     ebx,5

+        add     eax,edi

+        xor     esi,edx

+        ror     ecx,7

+        psubd   xmm4,xmm13

+        add     eax,ebx

+        add     ebp,DWORD[24+rsp]

+        movups  xmm1,XMMWORD[16+r15]

+DB      102,15,56,220,208

+        xor     esi,ecx

+        mov     edi,eax

+        rol     eax,5

+        add     ebp,esi

+        xor     edi,ecx

+        ror     ebx,7

+        add     ebp,eax

+        add     edx,DWORD[28+rsp]

+        xor     edi,ebx

+        mov     esi,ebp

+        rol     ebp,5

+        add     edx,edi

+        xor     esi,ebx

+        ror     eax,7

+        add     edx,ebp

+        add     ecx,DWORD[32+rsp]

+        xor     esi,eax

+        mov     edi,edx

+DB      102,15,56,0,243

+        rol     edx,5

+        add     ecx,esi

+        movups  xmm0,XMMWORD[32+r15]

+DB      102,15,56,220,209

+        xor     edi,eax

+        ror     ebp,7

+        paddd   xmm5,xmm13

+        add     ecx,edx

+        add     ebx,DWORD[36+rsp]

+        xor     edi,ebp

+        mov     esi,ecx

+        movdqa  XMMWORD[16+rsp],xmm5

+        rol     ecx,5

+        add     ebx,edi

+        xor     esi,ebp

+        ror     edx,7

+        psubd   xmm5,xmm13

+        add     ebx,ecx

+        add     eax,DWORD[40+rsp]

+        xor     esi,edx

+        mov     edi,ebx

+        rol     ebx,5

+        add     eax,esi

+        xor     edi,edx

+        ror     ecx,7

+        add     eax,ebx

+        add     ebp,DWORD[44+rsp]

+        movups  xmm1,XMMWORD[48+r15]

+DB      102,15,56,220,208

+        xor     edi,ecx

+        mov     esi,eax

+        rol     eax,5

+        add     ebp,edi

+        xor     esi,ecx

+        ror     ebx,7

+        add     ebp,eax

+        add     edx,DWORD[48+rsp]

+        xor     esi,ebx

+        mov     edi,ebp

+DB      102,15,56,0,251

+        rol     ebp,5

+        add     edx,esi

+        xor     edi,ebx

+        ror     eax,7

+        paddd   xmm6,xmm13

+        add     edx,ebp

+        add     ecx,DWORD[52+rsp]

+        xor     edi,eax

+        mov     esi,edx

+        movdqa  XMMWORD[32+rsp],xmm6

+        rol     edx,5

+        add     ecx,edi

+        cmp     r8d,11

+        jb      NEAR $L$aesenclast4

+        movups  xmm0,XMMWORD[64+r15]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[80+r15]

+DB      102,15,56,220,208

+        je      NEAR $L$aesenclast4

+        movups  xmm0,XMMWORD[96+r15]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[112+r15]

+DB      102,15,56,220,208

+$L$aesenclast4:

+DB      102,15,56,221,209

+        movups  xmm0,XMMWORD[((16-112))+r15]

+        xor     esi,eax

+        ror     ebp,7

+        psubd   xmm6,xmm13

+        add     ecx,edx

+        add     ebx,DWORD[56+rsp]

+        xor     esi,ebp

+        mov     edi,ecx

+        rol     ecx,5

+        add     ebx,esi

+        xor     edi,ebp

+        ror     edx,7

+        add     ebx,ecx

+        add     eax,DWORD[60+rsp]

+        xor     edi,edx

+        mov     esi,ebx

+        rol     ebx,5

+        add     eax,edi

+        ror     ecx,7

+        add     eax,ebx

+        movups  XMMWORD[48+r12*1+r13],xmm2

+        lea     r12,[64+r12]

+

+        add     eax,DWORD[r9]

+        add     esi,DWORD[4+r9]

+        add     ecx,DWORD[8+r9]

+        add     edx,DWORD[12+r9]

+        mov     DWORD[r9],eax

+        add     ebp,DWORD[16+r9]

+        mov     DWORD[4+r9],esi

+        mov     ebx,esi

+        mov     DWORD[8+r9],ecx

+        mov     edi,ecx

+        mov     DWORD[12+r9],edx

+        xor     edi,edx

+        mov     DWORD[16+r9],ebp

+        and     esi,edi

+        jmp     NEAR $L$oop_ssse3

+

+$L$done_ssse3:

+        add     ebx,DWORD[16+rsp]

+        xor     esi,ebp

+        mov     edi,ecx

+        rol     ecx,5

+        add     ebx,esi

+        xor     edi,ebp

+        ror     edx,7

+        add     ebx,ecx

+        add     eax,DWORD[20+rsp]

+        xor     edi,edx

+        mov     esi,ebx

+        rol     ebx,5

+        add     eax,edi

+        xor     esi,edx

+        ror     ecx,7

+        add     eax,ebx

+        add     ebp,DWORD[24+rsp]

+        movups  xmm1,XMMWORD[16+r15]

+DB      102,15,56,220,208

+        xor     esi,ecx

+        mov     edi,eax

+        rol     eax,5

+        add     ebp,esi

+        xor     edi,ecx

+        ror     ebx,7

+        add     ebp,eax

+        add     edx,DWORD[28+rsp]

+        xor     edi,ebx

+        mov     esi,ebp

+        rol     ebp,5

+        add     edx,edi

+        xor     esi,ebx

+        ror     eax,7

+        add     edx,ebp

+        add     ecx,DWORD[32+rsp]

+        xor     esi,eax

+        mov     edi,edx

+        rol     edx,5

+        add     ecx,esi

+        movups  xmm0,XMMWORD[32+r15]

+DB      102,15,56,220,209

+        xor     edi,eax

+        ror     ebp,7

+        add     ecx,edx

+        add     ebx,DWORD[36+rsp]

+        xor     edi,ebp

+        mov     esi,ecx

+        rol     ecx,5

+        add     ebx,edi

+        xor     esi,ebp

+        ror     edx,7

+        add     ebx,ecx

+        add     eax,DWORD[40+rsp]

+        xor     esi,edx

+        mov     edi,ebx

+        rol     ebx,5

+        add     eax,esi

+        xor     edi,edx

+        ror     ecx,7

+        add     eax,ebx

+        add     ebp,DWORD[44+rsp]

+        movups  xmm1,XMMWORD[48+r15]

+DB      102,15,56,220,208

+        xor     edi,ecx

+        mov     esi,eax

+        rol     eax,5

+        add     ebp,edi

+        xor     esi,ecx

+        ror     ebx,7

+        add     ebp,eax

+        add     edx,DWORD[48+rsp]

+        xor     esi,ebx

+        mov     edi,ebp

+        rol     ebp,5

+        add     edx,esi

+        xor     edi,ebx

+        ror     eax,7

+        add     edx,ebp

+        add     ecx,DWORD[52+rsp]

+        xor     edi,eax

+        mov     esi,edx

+        rol     edx,5

+        add     ecx,edi

+        cmp     r8d,11

+        jb      NEAR $L$aesenclast5

+        movups  xmm0,XMMWORD[64+r15]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[80+r15]

+DB      102,15,56,220,208

+        je      NEAR $L$aesenclast5

+        movups  xmm0,XMMWORD[96+r15]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[112+r15]

+DB      102,15,56,220,208

+$L$aesenclast5:

+DB      102,15,56,221,209

+        movups  xmm0,XMMWORD[((16-112))+r15]

+        xor     esi,eax

+        ror     ebp,7

+        add     ecx,edx

+        add     ebx,DWORD[56+rsp]

+        xor     esi,ebp

+        mov     edi,ecx

+        rol     ecx,5

+        add     ebx,esi

+        xor     edi,ebp

+        ror     edx,7

+        add     ebx,ecx

+        add     eax,DWORD[60+rsp]

+        xor     edi,edx

+        mov     esi,ebx

+        rol     ebx,5

+        add     eax,edi

+        ror     ecx,7

+        add     eax,ebx

+        movups  XMMWORD[48+r12*1+r13],xmm2

+        mov     r8,QWORD[88+rsp]

+

+        add     eax,DWORD[r9]

+        add     esi,DWORD[4+r9]

+        add     ecx,DWORD[8+r9]

+        mov     DWORD[r9],eax

+        add     edx,DWORD[12+r9]

+        mov     DWORD[4+r9],esi

+        add     ebp,DWORD[16+r9]

+        mov     DWORD[8+r9],ecx

+        mov     DWORD[12+r9],edx

+        mov     DWORD[16+r9],ebp

+        movups  XMMWORD[r8],xmm2

+        movaps  xmm6,XMMWORD[((96+0))+rsp]

+        movaps  xmm7,XMMWORD[((96+16))+rsp]

+        movaps  xmm8,XMMWORD[((96+32))+rsp]

+        movaps  xmm9,XMMWORD[((96+48))+rsp]

+        movaps  xmm10,XMMWORD[((96+64))+rsp]

+        movaps  xmm11,XMMWORD[((96+80))+rsp]

+        movaps  xmm12,XMMWORD[((96+96))+rsp]

+        movaps  xmm13,XMMWORD[((96+112))+rsp]

+        movaps  xmm14,XMMWORD[((96+128))+rsp]

+        movaps  xmm15,XMMWORD[((96+144))+rsp]

+        lea     rsi,[264+rsp]

+

+        mov     r15,QWORD[rsi]

+

+        mov     r14,QWORD[8+rsi]

+

+        mov     r13,QWORD[16+rsi]

+

+        mov     r12,QWORD[24+rsi]

+

+        mov     rbp,QWORD[32+rsi]

+

+        mov     rbx,QWORD[40+rsi]

+

+        lea     rsp,[48+rsi]

+

+$L$epilogue_ssse3:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_aesni_cbc_sha1_enc_ssse3:

+ALIGN   64

+K_XX_XX:

+        DD      0x5a827999,0x5a827999,0x5a827999,0x5a827999

+        DD      0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1

+        DD      0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc

+        DD      0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6

+        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f

+DB
0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0

+

+DB      65,69,83,78,73,45,67,66,67,43,83,72,65,49,32,115

+DB      116,105,116,99,104,32,102,111,114,32,120,56,54,95,54,52

+DB      44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32

+DB      60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111

+DB      114,103,62,0

+ALIGN   64

+

+ALIGN   32

+aesni_cbc_sha1_enc_shaext:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_aesni_cbc_sha1_enc_shaext:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+        mov     rcx,r9

+        mov     r8,QWORD[40+rsp]

+        mov     r9,QWORD[48+rsp]

+

+

+

+        mov     r10,QWORD[56+rsp]

+        lea     rsp,[((-168))+rsp]

+        movaps  XMMWORD[(-8-160)+rax],xmm6

+        movaps  XMMWORD[(-8-144)+rax],xmm7

+        movaps  XMMWORD[(-8-128)+rax],xmm8

+        movaps  XMMWORD[(-8-112)+rax],xmm9

+        movaps  XMMWORD[(-8-96)+rax],xmm10

+        movaps  XMMWORD[(-8-80)+rax],xmm11

+        movaps  XMMWORD[(-8-64)+rax],xmm12

+        movaps  XMMWORD[(-8-48)+rax],xmm13

+        movaps  XMMWORD[(-8-32)+rax],xmm14

+        movaps  XMMWORD[(-8-16)+rax],xmm15

+$L$prologue_shaext:

+        movdqu  xmm8,XMMWORD[r9]

+        movd    xmm9,DWORD[16+r9]

+        movdqa  xmm7,XMMWORD[((K_XX_XX+80))]

+

+        mov     r11d,DWORD[240+rcx]

+        sub     rsi,rdi

+        movups  xmm15,XMMWORD[rcx]

+        movups  xmm2,XMMWORD[r8]

+        movups  xmm0,XMMWORD[16+rcx]

+        lea     rcx,[112+rcx]

+

+        pshufd  xmm8,xmm8,27

+        pshufd  xmm9,xmm9,27

+        jmp     NEAR $L$oop_shaext

+

+ALIGN   16

+$L$oop_shaext:

+        movups  xmm14,XMMWORD[rdi]

+        xorps   xmm14,xmm15

+        xorps   xmm2,xmm14

+        movups  xmm1,XMMWORD[((-80))+rcx]

+DB      102,15,56,220,208

+        movdqu  xmm3,XMMWORD[r10]

+        movdqa  xmm12,xmm9

+DB      102,15,56,0,223

+        movdqu  xmm4,XMMWORD[16+r10]

+        movdqa  xmm11,xmm8

+        movups  xmm0,XMMWORD[((-64))+rcx]

+DB      102,15,56,220,209

+DB      102,15,56,0,231

+

+        paddd   xmm9,xmm3

+        movdqu  xmm5,XMMWORD[32+r10]

+        lea     r10,[64+r10]

+        pxor    xmm3,xmm12

+        movups  xmm1,XMMWORD[((-48))+rcx]

+DB      102,15,56,220,208

+        pxor    xmm3,xmm12

+        movdqa  xmm10,xmm8

+DB      102,15,56,0,239

+DB      69,15,58,204,193,0

+DB      68,15,56,200,212

+        movups  xmm0,XMMWORD[((-32))+rcx]

+DB      102,15,56,220,209

+DB      15,56,201,220

+        movdqu  xmm6,XMMWORD[((-16))+r10]

+        movdqa  xmm9,xmm8

+DB      102,15,56,0,247

+        movups  xmm1,XMMWORD[((-16))+rcx]

+DB      102,15,56,220,208

+DB      69,15,58,204,194,0

+DB      68,15,56,200,205

+        pxor    xmm3,xmm5

+DB      15,56,201,229

+        movups  xmm0,XMMWORD[rcx]

+DB      102,15,56,220,209

+        movdqa  xmm10,xmm8

+DB      69,15,58,204,193,0

+DB      68,15,56,200,214

+        movups  xmm1,XMMWORD[16+rcx]

+DB      102,15,56,220,208

+DB      15,56,202,222

+        pxor    xmm4,xmm6

+DB      15,56,201,238

+        movups  xmm0,XMMWORD[32+rcx]

+DB      102,15,56,220,209

+        movdqa  xmm9,xmm8

+DB      69,15,58,204,194,0

+DB      68,15,56,200,203

+        movups  xmm1,XMMWORD[48+rcx]

+DB      102,15,56,220,208

+DB      15,56,202,227

+        pxor    xmm5,xmm3

+DB      15,56,201,243

+        cmp     r11d,11

+        jb      NEAR $L$aesenclast6

+        movups  xmm0,XMMWORD[64+rcx]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[80+rcx]

+DB      102,15,56,220,208

+        je      NEAR $L$aesenclast6

+        movups  xmm0,XMMWORD[96+rcx]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[112+rcx]

+DB      102,15,56,220,208

+$L$aesenclast6:

+DB      102,15,56,221,209

+        movups  xmm0,XMMWORD[((16-112))+rcx]

+        movdqa  xmm10,xmm8

+DB      69,15,58,204,193,0

+DB      68,15,56,200,212

+        movups  xmm14,XMMWORD[16+rdi]

+        xorps   xmm14,xmm15

+        movups  XMMWORD[rdi*1+rsi],xmm2

+        xorps   xmm2,xmm14

+        movups  xmm1,XMMWORD[((-80))+rcx]

+DB      102,15,56,220,208

+DB      15,56,202,236

+        pxor    xmm6,xmm4

+DB      15,56,201,220

+        movups  xmm0,XMMWORD[((-64))+rcx]

+DB      102,15,56,220,209

+        movdqa  xmm9,xmm8

+DB      69,15,58,204,194,1

+DB      68,15,56,200,205

+        movups  xmm1,XMMWORD[((-48))+rcx]

+DB      102,15,56,220,208

+DB      15,56,202,245

+        pxor    xmm3,xmm5

+DB      15,56,201,229

+        movups  xmm0,XMMWORD[((-32))+rcx]

+DB      102,15,56,220,209

+        movdqa  xmm10,xmm8

+DB      69,15,58,204,193,1

+DB      68,15,56,200,214

+        movups  xmm1,XMMWORD[((-16))+rcx]

+DB      102,15,56,220,208

+DB      15,56,202,222

+        pxor    xmm4,xmm6

+DB      15,56,201,238

+        movups  xmm0,XMMWORD[rcx]

+DB      102,15,56,220,209

+        movdqa  xmm9,xmm8

+DB      69,15,58,204,194,1

+DB      68,15,56,200,203

+        movups  xmm1,XMMWORD[16+rcx]

+DB      102,15,56,220,208

+DB      15,56,202,227

+        pxor    xmm5,xmm3

+DB      15,56,201,243

+        movups  xmm0,XMMWORD[32+rcx]

+DB      102,15,56,220,209

+        movdqa  xmm10,xmm8

+DB      69,15,58,204,193,1

+DB      68,15,56,200,212

+        movups  xmm1,XMMWORD[48+rcx]

+DB      102,15,56,220,208

+DB      15,56,202,236

+        pxor    xmm6,xmm4

+DB      15,56,201,220

+        cmp     r11d,11

+        jb      NEAR $L$aesenclast7

+        movups  xmm0,XMMWORD[64+rcx]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[80+rcx]

+DB      102,15,56,220,208

+        je      NEAR $L$aesenclast7

+        movups  xmm0,XMMWORD[96+rcx]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[112+rcx]

+DB      102,15,56,220,208

+$L$aesenclast7:

+DB      102,15,56,221,209

+        movups  xmm0,XMMWORD[((16-112))+rcx]

+        movdqa  xmm9,xmm8

+DB      69,15,58,204,194,1

+DB      68,15,56,200,205

+        movups  xmm14,XMMWORD[32+rdi]

+        xorps   xmm14,xmm15

+        movups  XMMWORD[16+rdi*1+rsi],xmm2

+        xorps   xmm2,xmm14

+        movups  xmm1,XMMWORD[((-80))+rcx]

+DB      102,15,56,220,208

+DB      15,56,202,245

+        pxor    xmm3,xmm5

+DB      15,56,201,229

+        movups  xmm0,XMMWORD[((-64))+rcx]

+DB      102,15,56,220,209

+        movdqa  xmm10,xmm8

+DB      69,15,58,204,193,2

+DB      68,15,56,200,214

+        movups  xmm1,XMMWORD[((-48))+rcx]

+DB      102,15,56,220,208

+DB      15,56,202,222

+        pxor    xmm4,xmm6

+DB      15,56,201,238

+        movups  xmm0,XMMWORD[((-32))+rcx]

+DB      102,15,56,220,209

+        movdqa  xmm9,xmm8

+DB      69,15,58,204,194,2

+DB      68,15,56,200,203

+        movups  xmm1,XMMWORD[((-16))+rcx]

+DB      102,15,56,220,208

+DB      15,56,202,227

+        pxor    xmm5,xmm3

+DB      15,56,201,243

+        movups  xmm0,XMMWORD[rcx]

+DB      102,15,56,220,209

+        movdqa  xmm10,xmm8

+DB      69,15,58,204,193,2

+DB      68,15,56,200,212

+        movups  xmm1,XMMWORD[16+rcx]

+DB      102,15,56,220,208

+DB      15,56,202,236

+        pxor    xmm6,xmm4

+DB      15,56,201,220

+        movups  xmm0,XMMWORD[32+rcx]

+DB      102,15,56,220,209

+        movdqa  xmm9,xmm8

+DB      69,15,58,204,194,2

+DB      68,15,56,200,205

+        movups  xmm1,XMMWORD[48+rcx]

+DB      102,15,56,220,208

+DB      15,56,202,245

+        pxor    xmm3,xmm5

+DB      15,56,201,229

+        cmp     r11d,11

+        jb      NEAR $L$aesenclast8

+        movups  xmm0,XMMWORD[64+rcx]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[80+rcx]

+DB      102,15,56,220,208

+        je      NEAR $L$aesenclast8

+        movups  xmm0,XMMWORD[96+rcx]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[112+rcx]

+DB      102,15,56,220,208

+$L$aesenclast8:

+DB      102,15,56,221,209

+        movups  xmm0,XMMWORD[((16-112))+rcx]

+        movdqa  xmm10,xmm8

+DB      69,15,58,204,193,2

+DB      68,15,56,200,214

+        movups  xmm14,XMMWORD[48+rdi]

+        xorps   xmm14,xmm15

+        movups  XMMWORD[32+rdi*1+rsi],xmm2

+        xorps   xmm2,xmm14

+        movups  xmm1,XMMWORD[((-80))+rcx]

+DB      102,15,56,220,208

+DB      15,56,202,222

+        pxor    xmm4,xmm6

+DB      15,56,201,238

+        movups  xmm0,XMMWORD[((-64))+rcx]

+DB      102,15,56,220,209

+        movdqa  xmm9,xmm8

+DB      69,15,58,204,194,3

+DB      68,15,56,200,203

+        movups  xmm1,XMMWORD[((-48))+rcx]

+DB      102,15,56,220,208

+DB      15,56,202,227

+        pxor    xmm5,xmm3

+DB      15,56,201,243

+        movups  xmm0,XMMWORD[((-32))+rcx]

+DB      102,15,56,220,209

+        movdqa  xmm10,xmm8

+DB      69,15,58,204,193,3

+DB      68,15,56,200,212

+DB      15,56,202,236

+        pxor    xmm6,xmm4

+        movups  xmm1,XMMWORD[((-16))+rcx]

+DB      102,15,56,220,208

+        movdqa  xmm9,xmm8

+DB      69,15,58,204,194,3

+DB      68,15,56,200,205

+DB      15,56,202,245

+        movups  xmm0,XMMWORD[rcx]

+DB      102,15,56,220,209

+        movdqa  xmm5,xmm12

+        movdqa  xmm10,xmm8

+DB      69,15,58,204,193,3

+DB      68,15,56,200,214

+        movups  xmm1,XMMWORD[16+rcx]

+DB      102,15,56,220,208

+        movdqa  xmm9,xmm8

+DB      69,15,58,204,194,3

+DB      68,15,56,200,205

+        movups  xmm0,XMMWORD[32+rcx]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[48+rcx]

+DB      102,15,56,220,208

+        cmp     r11d,11

+        jb      NEAR $L$aesenclast9

+        movups  xmm0,XMMWORD[64+rcx]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[80+rcx]

+DB      102,15,56,220,208

+        je      NEAR $L$aesenclast9

+        movups  xmm0,XMMWORD[96+rcx]

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[112+rcx]

+DB      102,15,56,220,208

+$L$aesenclast9:

+DB      102,15,56,221,209

+        movups  xmm0,XMMWORD[((16-112))+rcx]

+        dec     rdx

+

+        paddd   xmm8,xmm11

+        movups  XMMWORD[48+rdi*1+rsi],xmm2

+        lea     rdi,[64+rdi]

+        jnz     NEAR $L$oop_shaext

+

+        pshufd  xmm8,xmm8,27

+        pshufd  xmm9,xmm9,27

+        movups  XMMWORD[r8],xmm2

+        movdqu  XMMWORD[r9],xmm8

+        movd    DWORD[16+r9],xmm9

+        movaps  xmm6,XMMWORD[((-8-160))+rax]

+        movaps  xmm7,XMMWORD[((-8-144))+rax]

+        movaps  xmm8,XMMWORD[((-8-128))+rax]

+        movaps  xmm9,XMMWORD[((-8-112))+rax]

+        movaps  xmm10,XMMWORD[((-8-96))+rax]

+        movaps  xmm11,XMMWORD[((-8-80))+rax]

+        movaps  xmm12,XMMWORD[((-8-64))+rax]

+        movaps  xmm13,XMMWORD[((-8-48))+rax]

+        movaps  xmm14,XMMWORD[((-8-32))+rax]

+        movaps  xmm15,XMMWORD[((-8-16))+rax]

+        mov     rsp,rax

+$L$epilogue_shaext:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_aesni_cbc_sha1_enc_shaext:

+EXTERN  __imp_RtlVirtualUnwind

+

+ALIGN   16

+ssse3_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        mov     rsi,QWORD[8+r9]

+        mov     r11,QWORD[56+r9]

+

+        mov     r10d,DWORD[r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jb      NEAR $L$common_seh_tail

+

+        mov     rax,QWORD[152+r8]

+

+        mov     r10d,DWORD[4+r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jae     NEAR $L$common_seh_tail

+        lea     r10,[aesni_cbc_sha1_enc_shaext]

+        cmp     rbx,r10

+        jb      NEAR $L$seh_no_shaext

+

+        lea     rsi,[rax]

+        lea     rdi,[512+r8]

+        mov     ecx,20

+        DD      0xa548f3fc

+        lea     rax,[168+rax]

+        jmp     NEAR $L$common_seh_tail

+$L$seh_no_shaext:

+        lea     rsi,[96+rax]

+        lea     rdi,[512+r8]

+        mov     ecx,20

+        DD      0xa548f3fc

+        lea     rax,[264+rax]

+

+        mov     r15,QWORD[rax]

+        mov     r14,QWORD[8+rax]

+        mov     r13,QWORD[16+rax]

+        mov     r12,QWORD[24+rax]

+        mov     rbp,QWORD[32+rax]

+        mov     rbx,QWORD[40+rax]

+        lea     rax,[48+rax]

+        mov     QWORD[144+r8],rbx

+        mov     QWORD[160+r8],rbp

+        mov     QWORD[216+r8],r12

+        mov     QWORD[224+r8],r13

+        mov     QWORD[232+r8],r14

+        mov     QWORD[240+r8],r15

+

+$L$common_seh_tail:

+        mov     rdi,QWORD[8+rax]

+        mov     rsi,QWORD[16+rax]

+        mov     QWORD[152+r8],rax

+        mov     QWORD[168+r8],rsi

+        mov     QWORD[176+r8],rdi

+

+        mov     rdi,QWORD[40+r9]

+        mov     rsi,r8

+        mov     ecx,154

+        DD      0xa548f3fc

+

+        mov     rsi,r9

+        xor     rcx,rcx

+        mov     rdx,QWORD[8+rsi]

+        mov     r8,QWORD[rsi]

+        mov     r9,QWORD[16+rsi]

+        mov     r10,QWORD[40+rsi]

+        lea     r11,[56+rsi]

+        lea     r12,[24+rsi]

+        mov     QWORD[32+rsp],r10

+        mov     QWORD[40+rsp],r11

+        mov     QWORD[48+rsp],r12

+        mov     QWORD[56+rsp],rcx

+        call    QWORD[__imp_RtlVirtualUnwind]

+

+        mov     eax,1

+        add     rsp,64

+        popfq

+        pop     r15

+        pop     r14

+        pop     r13

+        pop     r12

+        pop     rbp

+        pop     rbx

+        pop     rdi

+        pop     rsi

+        DB      0F3h,0C3h               ;repret

+

+

+section .pdata rdata align=4

+ALIGN   4

+        DD      $L$SEH_begin_aesni_cbc_sha1_enc_ssse3 wrt ..imagebase

+        DD      $L$SEH_end_aesni_cbc_sha1_enc_ssse3 wrt ..imagebase

+        DD      $L$SEH_info_aesni_cbc_sha1_enc_ssse3 wrt ..imagebase

+        DD      $L$SEH_begin_aesni_cbc_sha1_enc_shaext wrt ..imagebase

+        DD      $L$SEH_end_aesni_cbc_sha1_enc_shaext wrt ..imagebase

+        DD      $L$SEH_info_aesni_cbc_sha1_enc_shaext wrt ..imagebase

+section .xdata rdata align=8

+ALIGN   8

+$L$SEH_info_aesni_cbc_sha1_enc_ssse3:

+DB      9,0,0,0

+        DD      ssse3_handler wrt ..imagebase

+        DD      $L$prologue_ssse3 wrt ..imagebase,$L$epilogue_ssse3
wrt ..imagebase

+$L$SEH_info_aesni_cbc_sha1_enc_shaext:

+DB      9,0,0,0

+        DD      ssse3_handler wrt ..imagebase

+        DD      $L$prologue_shaext wrt ..imagebase,$L$epilogue_shaext
wrt ..imagebase

diff --git a/CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha256-
x86_64.nasm b/CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-
sha256-
x86_64.nasm
new file mode 100644
index 0000000000..f5c250b904
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha256-
x86_64.nasm
@@ -0,0 +1,78 @@
+; WARNING: do not edit!

+; Generated from openssl/crypto/aes/asm/aesni-sha256-x86_64.pl

+;

+; Copyright 2013-2020 The OpenSSL Project Authors. All Rights
Reserved.

+;

+; Licensed under the OpenSSL license (the "License").  You may not use

+; this file except in compliance with the License.  You can obtain a
copy

+; in the file LICENSE in the source distribution or at

+; https://www.openssl.org/source/license.html

+

+default rel

+%define XMMWORD

+%define YMMWORD

+%define ZMMWORD

+section .text code align=64

+

+

+EXTERN  OPENSSL_ia32cap_P

+global  aesni_cbc_sha256_enc

+

+ALIGN   16

+aesni_cbc_sha256_enc:

+

+        xor     eax,eax

+        cmp     rcx,0

+        je      NEAR $L$probe

+        ud2

+$L$probe:

+        DB      0F3h,0C3h               ;repret

+

+

+

+ALIGN   64

+

+K256:

+        DD      0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5

+        DD      0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5

+        DD      0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5

+        DD      0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5

+        DD      0xd807aa98,0x12835b01,0x243185be,0x550c7dc3

+        DD      0xd807aa98,0x12835b01,0x243185be,0x550c7dc3

+        DD      0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174

+        DD      0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174

+        DD      0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc

+        DD      0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc

+        DD      0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da

+        DD      0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da

+        DD      0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7

+        DD      0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7

+        DD      0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967

+        DD      0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967

+        DD      0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13

+        DD      0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13

+        DD      0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85

+        DD      0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85

+        DD      0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3

+        DD      0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3

+        DD      0xd192e819,0xd6990624,0xf40e3585,0x106aa070

+        DD      0xd192e819,0xd6990624,0xf40e3585,0x106aa070

+        DD      0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5

+        DD      0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5

+        DD      0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3

+        DD      0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3

+        DD      0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208

+        DD      0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208

+        DD      0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2

+        DD      0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2

+

+        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f

+        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f

+        DD      0,0,0,0,0,0,0,0,-1,-1,-1,-1

+        DD      0,0,0,0,0,0,0,0

+DB      65,69,83,78,73,45,67,66,67,43,83,72,65,50,53,54

+DB      32,115,116,105,116,99,104,32,102,111,114,32,120,56,54,95

+DB      54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98

+DB      121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108

+DB      46,111,114,103,62,0

+ALIGN   64

diff --git a/CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-
x86_64.nasm
b/CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-x86_64.nasm
new file mode 100644
index 0000000000..57ee23ea8c
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-x86_64.nasm
@@ -0,0 +1,5103 @@
+; WARNING: do not edit!

+; Generated from openssl/crypto/aes/asm/aesni-x86_64.pl

+;

+; Copyright 2009-2020 The OpenSSL Project Authors. All Rights
Reserved.

+;

+; Licensed under the OpenSSL license (the "License").  You may not use

+; this file except in compliance with the License.  You can obtain a
copy

+; in the file LICENSE in the source distribution or at

+; https://www.openssl.org/source/license.html

+

+default rel

+%define XMMWORD

+%define YMMWORD

+%define ZMMWORD

+section .text code align=64

+

+EXTERN  OPENSSL_ia32cap_P

+global  aesni_encrypt

+

+ALIGN   16

+aesni_encrypt:

+

+        movups  xmm2,XMMWORD[rcx]

+        mov     eax,DWORD[240+r8]

+        movups  xmm0,XMMWORD[r8]

+        movups  xmm1,XMMWORD[16+r8]

+        lea     r8,[32+r8]

+        xorps   xmm2,xmm0

+$L$oop_enc1_1:

+DB      102,15,56,220,209

+        dec     eax

+        movups  xmm1,XMMWORD[r8]

+        lea     r8,[16+r8]

+        jnz     NEAR $L$oop_enc1_1

+DB      102,15,56,221,209

+        pxor    xmm0,xmm0

+        pxor    xmm1,xmm1

+        movups  XMMWORD[rdx],xmm2

+        pxor    xmm2,xmm2

+        DB      0F3h,0C3h               ;repret

+

+

+

+global  aesni_decrypt

+

+ALIGN   16

+aesni_decrypt:

+

+        movups  xmm2,XMMWORD[rcx]

+        mov     eax,DWORD[240+r8]

+        movups  xmm0,XMMWORD[r8]

+        movups  xmm1,XMMWORD[16+r8]

+        lea     r8,[32+r8]

+        xorps   xmm2,xmm0

+$L$oop_dec1_2:

+DB      102,15,56,222,209

+        dec     eax

+        movups  xmm1,XMMWORD[r8]

+        lea     r8,[16+r8]

+        jnz     NEAR $L$oop_dec1_2

+DB      102,15,56,223,209

+        pxor    xmm0,xmm0

+        pxor    xmm1,xmm1

+        movups  XMMWORD[rdx],xmm2

+        pxor    xmm2,xmm2

+        DB      0F3h,0C3h               ;repret

+

+

+

+ALIGN   16

+_aesni_encrypt2:

+

+        movups  xmm0,XMMWORD[rcx]

+        shl     eax,4

+        movups  xmm1,XMMWORD[16+rcx]

+        xorps   xmm2,xmm0

+        xorps   xmm3,xmm0

+        movups  xmm0,XMMWORD[32+rcx]

+        lea     rcx,[32+rax*1+rcx]

+        neg     rax

+        add     rax,16

+

+$L$enc_loop2:

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$enc_loop2

+

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,221,208

+DB      102,15,56,221,216

+        DB      0F3h,0C3h               ;repret

+

+

+

+ALIGN   16

+_aesni_decrypt2:

+

+        movups  xmm0,XMMWORD[rcx]

+        shl     eax,4

+        movups  xmm1,XMMWORD[16+rcx]

+        xorps   xmm2,xmm0

+        xorps   xmm3,xmm0

+        movups  xmm0,XMMWORD[32+rcx]

+        lea     rcx,[32+rax*1+rcx]

+        neg     rax

+        add     rax,16

+

+$L$dec_loop2:

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$dec_loop2

+

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,223,208

+DB      102,15,56,223,216

+        DB      0F3h,0C3h               ;repret

+

+

+

+ALIGN   16

+_aesni_encrypt3:

+

+        movups  xmm0,XMMWORD[rcx]

+        shl     eax,4

+        movups  xmm1,XMMWORD[16+rcx]

+        xorps   xmm2,xmm0

+        xorps   xmm3,xmm0

+        xorps   xmm4,xmm0

+        movups  xmm0,XMMWORD[32+rcx]

+        lea     rcx,[32+rax*1+rcx]

+        neg     rax

+        add     rax,16

+

+$L$enc_loop3:

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$enc_loop3

+

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,221,208

+DB      102,15,56,221,216

+DB      102,15,56,221,224

+        DB      0F3h,0C3h               ;repret

+

+

+

+ALIGN   16

+_aesni_decrypt3:

+

+        movups  xmm0,XMMWORD[rcx]

+        shl     eax,4

+        movups  xmm1,XMMWORD[16+rcx]

+        xorps   xmm2,xmm0

+        xorps   xmm3,xmm0

+        xorps   xmm4,xmm0

+        movups  xmm0,XMMWORD[32+rcx]

+        lea     rcx,[32+rax*1+rcx]

+        neg     rax

+        add     rax,16

+

+$L$dec_loop3:

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$dec_loop3

+

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,223,208

+DB      102,15,56,223,216

+DB      102,15,56,223,224

+        DB      0F3h,0C3h               ;repret

+

+

+

+ALIGN   16

+_aesni_encrypt4:

+

+        movups  xmm0,XMMWORD[rcx]

+        shl     eax,4

+        movups  xmm1,XMMWORD[16+rcx]

+        xorps   xmm2,xmm0

+        xorps   xmm3,xmm0

+        xorps   xmm4,xmm0

+        xorps   xmm5,xmm0

+        movups  xmm0,XMMWORD[32+rcx]

+        lea     rcx,[32+rax*1+rcx]

+        neg     rax

+DB      0x0f,0x1f,0x00

+        add     rax,16

+

+$L$enc_loop4:

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$enc_loop4

+

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+DB      102,15,56,221,208

+DB      102,15,56,221,216

+DB      102,15,56,221,224

+DB      102,15,56,221,232

+        DB      0F3h,0C3h               ;repret

+

+

+

+ALIGN   16

+_aesni_decrypt4:

+

+        movups  xmm0,XMMWORD[rcx]

+        shl     eax,4

+        movups  xmm1,XMMWORD[16+rcx]

+        xorps   xmm2,xmm0

+        xorps   xmm3,xmm0

+        xorps   xmm4,xmm0

+        xorps   xmm5,xmm0

+        movups  xmm0,XMMWORD[32+rcx]

+        lea     rcx,[32+rax*1+rcx]

+        neg     rax

+DB      0x0f,0x1f,0x00

+        add     rax,16

+

+$L$dec_loop4:

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$dec_loop4

+

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+DB      102,15,56,223,208

+DB      102,15,56,223,216

+DB      102,15,56,223,224

+DB      102,15,56,223,232

+        DB      0F3h,0C3h               ;repret

+

+

+

+ALIGN   16

+_aesni_encrypt6:

+

+        movups  xmm0,XMMWORD[rcx]

+        shl     eax,4

+        movups  xmm1,XMMWORD[16+rcx]

+        xorps   xmm2,xmm0

+        pxor    xmm3,xmm0

+        pxor    xmm4,xmm0

+DB      102,15,56,220,209

+        lea     rcx,[32+rax*1+rcx]

+        neg     rax

+DB      102,15,56,220,217

+        pxor    xmm5,xmm0

+        pxor    xmm6,xmm0

+DB      102,15,56,220,225

+        pxor    xmm7,xmm0

+        movups  xmm0,XMMWORD[rax*1+rcx]

+        add     rax,16

+        jmp     NEAR $L$enc_loop6_enter

+ALIGN   16

+$L$enc_loop6:

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+$L$enc_loop6_enter:

+DB      102,15,56,220,233

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+DB      102,15,56,220,240

+DB      102,15,56,220,248

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$enc_loop6

+

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+DB      102,15,56,221,208

+DB      102,15,56,221,216

+DB      102,15,56,221,224

+DB      102,15,56,221,232

+DB      102,15,56,221,240

+DB      102,15,56,221,248

+        DB      0F3h,0C3h               ;repret

+

+

+

+ALIGN   16

+_aesni_decrypt6:

+

+        movups  xmm0,XMMWORD[rcx]

+        shl     eax,4

+        movups  xmm1,XMMWORD[16+rcx]

+        xorps   xmm2,xmm0

+        pxor    xmm3,xmm0

+        pxor    xmm4,xmm0

+DB      102,15,56,222,209

+        lea     rcx,[32+rax*1+rcx]

+        neg     rax

+DB      102,15,56,222,217

+        pxor    xmm5,xmm0

+        pxor    xmm6,xmm0

+DB      102,15,56,222,225

+        pxor    xmm7,xmm0

+        movups  xmm0,XMMWORD[rax*1+rcx]

+        add     rax,16

+        jmp     NEAR $L$dec_loop6_enter

+ALIGN   16

+$L$dec_loop6:

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+$L$dec_loop6_enter:

+DB      102,15,56,222,233

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+DB      102,15,56,222,240

+DB      102,15,56,222,248

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$dec_loop6

+

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+DB      102,15,56,223,208

+DB      102,15,56,223,216

+DB      102,15,56,223,224

+DB      102,15,56,223,232

+DB      102,15,56,223,240

+DB      102,15,56,223,248

+        DB      0F3h,0C3h               ;repret

+

+

+

+ALIGN   16

+_aesni_encrypt8:

+

+        movups  xmm0,XMMWORD[rcx]

+        shl     eax,4

+        movups  xmm1,XMMWORD[16+rcx]

+        xorps   xmm2,xmm0

+        xorps   xmm3,xmm0

+        pxor    xmm4,xmm0

+        pxor    xmm5,xmm0

+        pxor    xmm6,xmm0

+        lea     rcx,[32+rax*1+rcx]

+        neg     rax

+DB      102,15,56,220,209

+        pxor    xmm7,xmm0

+        pxor    xmm8,xmm0

+DB      102,15,56,220,217

+        pxor    xmm9,xmm0

+        movups  xmm0,XMMWORD[rax*1+rcx]

+        add     rax,16

+        jmp     NEAR $L$enc_loop8_inner

+ALIGN   16

+$L$enc_loop8:

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+$L$enc_loop8_inner:

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+DB      102,68,15,56,220,193

+DB      102,68,15,56,220,201

+$L$enc_loop8_enter:

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+DB      102,15,56,220,240

+DB      102,15,56,220,248

+DB      102,68,15,56,220,192

+DB      102,68,15,56,220,200

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$enc_loop8

+

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+DB      102,68,15,56,220,193

+DB      102,68,15,56,220,201

+DB      102,15,56,221,208

+DB      102,15,56,221,216

+DB      102,15,56,221,224

+DB      102,15,56,221,232

+DB      102,15,56,221,240

+DB      102,15,56,221,248

+DB      102,68,15,56,221,192

+DB      102,68,15,56,221,200

+        DB      0F3h,0C3h               ;repret

+

+

+

+ALIGN   16

+_aesni_decrypt8:

+

+        movups  xmm0,XMMWORD[rcx]

+        shl     eax,4

+        movups  xmm1,XMMWORD[16+rcx]

+        xorps   xmm2,xmm0

+        xorps   xmm3,xmm0

+        pxor    xmm4,xmm0

+        pxor    xmm5,xmm0

+        pxor    xmm6,xmm0

+        lea     rcx,[32+rax*1+rcx]

+        neg     rax

+DB      102,15,56,222,209

+        pxor    xmm7,xmm0

+        pxor    xmm8,xmm0

+DB      102,15,56,222,217

+        pxor    xmm9,xmm0

+        movups  xmm0,XMMWORD[rax*1+rcx]

+        add     rax,16

+        jmp     NEAR $L$dec_loop8_inner

+ALIGN   16

+$L$dec_loop8:

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+$L$dec_loop8_inner:

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+DB      102,68,15,56,222,193

+DB      102,68,15,56,222,201

+$L$dec_loop8_enter:

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+DB      102,15,56,222,240

+DB      102,15,56,222,248

+DB      102,68,15,56,222,192

+DB      102,68,15,56,222,200

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$dec_loop8

+

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+DB      102,68,15,56,222,193

+DB      102,68,15,56,222,201

+DB      102,15,56,223,208

+DB      102,15,56,223,216

+DB      102,15,56,223,224

+DB      102,15,56,223,232

+DB      102,15,56,223,240

+DB      102,15,56,223,248

+DB      102,68,15,56,223,192

+DB      102,68,15,56,223,200

+        DB      0F3h,0C3h               ;repret

+

+

+global  aesni_ecb_encrypt

+

+ALIGN   16

+aesni_ecb_encrypt:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_aesni_ecb_encrypt:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+        mov     rcx,r9

+        mov     r8,QWORD[40+rsp]

+

+

+

+        lea     rsp,[((-88))+rsp]

+        movaps  XMMWORD[rsp],xmm6

+        movaps  XMMWORD[16+rsp],xmm7

+        movaps  XMMWORD[32+rsp],xmm8

+        movaps  XMMWORD[48+rsp],xmm9

+$L$ecb_enc_body:

+        and     rdx,-16

+        jz      NEAR $L$ecb_ret

+

+        mov     eax,DWORD[240+rcx]

+        movups  xmm0,XMMWORD[rcx]

+        mov     r11,rcx

+        mov     r10d,eax

+        test    r8d,r8d

+        jz      NEAR $L$ecb_decrypt

+

+        cmp     rdx,0x80

+        jb      NEAR $L$ecb_enc_tail

+

+        movdqu  xmm2,XMMWORD[rdi]

+        movdqu  xmm3,XMMWORD[16+rdi]

+        movdqu  xmm4,XMMWORD[32+rdi]

+        movdqu  xmm5,XMMWORD[48+rdi]

+        movdqu  xmm6,XMMWORD[64+rdi]

+        movdqu  xmm7,XMMWORD[80+rdi]

+        movdqu  xmm8,XMMWORD[96+rdi]

+        movdqu  xmm9,XMMWORD[112+rdi]

+        lea     rdi,[128+rdi]

+        sub     rdx,0x80

+        jmp     NEAR $L$ecb_enc_loop8_enter

+ALIGN   16

+$L$ecb_enc_loop8:

+        movups  XMMWORD[rsi],xmm2

+        mov     rcx,r11

+        movdqu  xmm2,XMMWORD[rdi]

+        mov     eax,r10d

+        movups  XMMWORD[16+rsi],xmm3

+        movdqu  xmm3,XMMWORD[16+rdi]

+        movups  XMMWORD[32+rsi],xmm4

+        movdqu  xmm4,XMMWORD[32+rdi]

+        movups  XMMWORD[48+rsi],xmm5

+        movdqu  xmm5,XMMWORD[48+rdi]

+        movups  XMMWORD[64+rsi],xmm6

+        movdqu  xmm6,XMMWORD[64+rdi]

+        movups  XMMWORD[80+rsi],xmm7

+        movdqu  xmm7,XMMWORD[80+rdi]

+        movups  XMMWORD[96+rsi],xmm8

+        movdqu  xmm8,XMMWORD[96+rdi]

+        movups  XMMWORD[112+rsi],xmm9

+        lea     rsi,[128+rsi]

+        movdqu  xmm9,XMMWORD[112+rdi]

+        lea     rdi,[128+rdi]

+$L$ecb_enc_loop8_enter:

+

+        call    _aesni_encrypt8

+

+        sub     rdx,0x80

+        jnc     NEAR $L$ecb_enc_loop8

+

+        movups  XMMWORD[rsi],xmm2

+        mov     rcx,r11

+        movups  XMMWORD[16+rsi],xmm3

+        mov     eax,r10d

+        movups  XMMWORD[32+rsi],xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        movups  XMMWORD[64+rsi],xmm6

+        movups  XMMWORD[80+rsi],xmm7

+        movups  XMMWORD[96+rsi],xmm8

+        movups  XMMWORD[112+rsi],xmm9

+        lea     rsi,[128+rsi]

+        add     rdx,0x80

+        jz      NEAR $L$ecb_ret

+

+$L$ecb_enc_tail:

+        movups  xmm2,XMMWORD[rdi]

+        cmp     rdx,0x20

+        jb      NEAR $L$ecb_enc_one

+        movups  xmm3,XMMWORD[16+rdi]

+        je      NEAR $L$ecb_enc_two

+        movups  xmm4,XMMWORD[32+rdi]

+        cmp     rdx,0x40

+        jb      NEAR $L$ecb_enc_three

+        movups  xmm5,XMMWORD[48+rdi]

+        je      NEAR $L$ecb_enc_four

+        movups  xmm6,XMMWORD[64+rdi]

+        cmp     rdx,0x60

+        jb      NEAR $L$ecb_enc_five

+        movups  xmm7,XMMWORD[80+rdi]

+        je      NEAR $L$ecb_enc_six

+        movdqu  xmm8,XMMWORD[96+rdi]

+        xorps   xmm9,xmm9

+        call    _aesni_encrypt8

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        movups  XMMWORD[64+rsi],xmm6

+        movups  XMMWORD[80+rsi],xmm7

+        movups  XMMWORD[96+rsi],xmm8

+        jmp     NEAR $L$ecb_ret

+ALIGN   16

+$L$ecb_enc_one:

+        movups  xmm0,XMMWORD[rcx]

+        movups  xmm1,XMMWORD[16+rcx]

+        lea     rcx,[32+rcx]

+        xorps   xmm2,xmm0

+$L$oop_enc1_3:

+DB      102,15,56,220,209

+        dec     eax

+        movups  xmm1,XMMWORD[rcx]

+        lea     rcx,[16+rcx]

+        jnz     NEAR $L$oop_enc1_3

+DB      102,15,56,221,209

+        movups  XMMWORD[rsi],xmm2

+        jmp     NEAR $L$ecb_ret

+ALIGN   16

+$L$ecb_enc_two:

+        call    _aesni_encrypt2

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        jmp     NEAR $L$ecb_ret

+ALIGN   16

+$L$ecb_enc_three:

+        call    _aesni_encrypt3

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        jmp     NEAR $L$ecb_ret

+ALIGN   16

+$L$ecb_enc_four:

+        call    _aesni_encrypt4

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        jmp     NEAR $L$ecb_ret

+ALIGN   16

+$L$ecb_enc_five:

+        xorps   xmm7,xmm7

+        call    _aesni_encrypt6

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        movups  XMMWORD[64+rsi],xmm6

+        jmp     NEAR $L$ecb_ret

+ALIGN   16

+$L$ecb_enc_six:

+        call    _aesni_encrypt6

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        movups  XMMWORD[64+rsi],xmm6

+        movups  XMMWORD[80+rsi],xmm7

+        jmp     NEAR $L$ecb_ret

+

+ALIGN   16

+$L$ecb_decrypt:

+        cmp     rdx,0x80

+        jb      NEAR $L$ecb_dec_tail

+

+        movdqu  xmm2,XMMWORD[rdi]

+        movdqu  xmm3,XMMWORD[16+rdi]

+        movdqu  xmm4,XMMWORD[32+rdi]

+        movdqu  xmm5,XMMWORD[48+rdi]

+        movdqu  xmm6,XMMWORD[64+rdi]

+        movdqu  xmm7,XMMWORD[80+rdi]

+        movdqu  xmm8,XMMWORD[96+rdi]

+        movdqu  xmm9,XMMWORD[112+rdi]

+        lea     rdi,[128+rdi]

+        sub     rdx,0x80

+        jmp     NEAR $L$ecb_dec_loop8_enter

+ALIGN   16

+$L$ecb_dec_loop8:

+        movups  XMMWORD[rsi],xmm2

+        mov     rcx,r11

+        movdqu  xmm2,XMMWORD[rdi]

+        mov     eax,r10d

+        movups  XMMWORD[16+rsi],xmm3

+        movdqu  xmm3,XMMWORD[16+rdi]

+        movups  XMMWORD[32+rsi],xmm4

+        movdqu  xmm4,XMMWORD[32+rdi]

+        movups  XMMWORD[48+rsi],xmm5

+        movdqu  xmm5,XMMWORD[48+rdi]

+        movups  XMMWORD[64+rsi],xmm6

+        movdqu  xmm6,XMMWORD[64+rdi]

+        movups  XMMWORD[80+rsi],xmm7

+        movdqu  xmm7,XMMWORD[80+rdi]

+        movups  XMMWORD[96+rsi],xmm8

+        movdqu  xmm8,XMMWORD[96+rdi]

+        movups  XMMWORD[112+rsi],xmm9

+        lea     rsi,[128+rsi]

+        movdqu  xmm9,XMMWORD[112+rdi]

+        lea     rdi,[128+rdi]

+$L$ecb_dec_loop8_enter:

+

+        call    _aesni_decrypt8

+

+        movups  xmm0,XMMWORD[r11]

+        sub     rdx,0x80

+        jnc     NEAR $L$ecb_dec_loop8

+

+        movups  XMMWORD[rsi],xmm2

+        pxor    xmm2,xmm2

+        mov     rcx,r11

+        movups  XMMWORD[16+rsi],xmm3

+        pxor    xmm3,xmm3

+        mov     eax,r10d

+        movups  XMMWORD[32+rsi],xmm4

+        pxor    xmm4,xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        pxor    xmm5,xmm5

+        movups  XMMWORD[64+rsi],xmm6

+        pxor    xmm6,xmm6

+        movups  XMMWORD[80+rsi],xmm7

+        pxor    xmm7,xmm7

+        movups  XMMWORD[96+rsi],xmm8

+        pxor    xmm8,xmm8

+        movups  XMMWORD[112+rsi],xmm9

+        pxor    xmm9,xmm9

+        lea     rsi,[128+rsi]

+        add     rdx,0x80

+        jz      NEAR $L$ecb_ret

+

+$L$ecb_dec_tail:

+        movups  xmm2,XMMWORD[rdi]

+        cmp     rdx,0x20

+        jb      NEAR $L$ecb_dec_one

+        movups  xmm3,XMMWORD[16+rdi]

+        je      NEAR $L$ecb_dec_two

+        movups  xmm4,XMMWORD[32+rdi]

+        cmp     rdx,0x40

+        jb      NEAR $L$ecb_dec_three

+        movups  xmm5,XMMWORD[48+rdi]

+        je      NEAR $L$ecb_dec_four

+        movups  xmm6,XMMWORD[64+rdi]

+        cmp     rdx,0x60

+        jb      NEAR $L$ecb_dec_five

+        movups  xmm7,XMMWORD[80+rdi]

+        je      NEAR $L$ecb_dec_six

+        movups  xmm8,XMMWORD[96+rdi]

+        movups  xmm0,XMMWORD[rcx]

+        xorps   xmm9,xmm9

+        call    _aesni_decrypt8

+        movups  XMMWORD[rsi],xmm2

+        pxor    xmm2,xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        pxor    xmm3,xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        pxor    xmm4,xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        pxor    xmm5,xmm5

+        movups  XMMWORD[64+rsi],xmm6

+        pxor    xmm6,xmm6

+        movups  XMMWORD[80+rsi],xmm7

+        pxor    xmm7,xmm7

+        movups  XMMWORD[96+rsi],xmm8

+        pxor    xmm8,xmm8

+        pxor    xmm9,xmm9

+        jmp     NEAR $L$ecb_ret

+ALIGN   16

+$L$ecb_dec_one:

+        movups  xmm0,XMMWORD[rcx]

+        movups  xmm1,XMMWORD[16+rcx]

+        lea     rcx,[32+rcx]

+        xorps   xmm2,xmm0

+$L$oop_dec1_4:

+DB      102,15,56,222,209

+        dec     eax

+        movups  xmm1,XMMWORD[rcx]

+        lea     rcx,[16+rcx]

+        jnz     NEAR $L$oop_dec1_4

+DB      102,15,56,223,209

+        movups  XMMWORD[rsi],xmm2

+        pxor    xmm2,xmm2

+        jmp     NEAR $L$ecb_ret

+ALIGN   16

+$L$ecb_dec_two:

+        call    _aesni_decrypt2

+        movups  XMMWORD[rsi],xmm2

+        pxor    xmm2,xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        pxor    xmm3,xmm3

+        jmp     NEAR $L$ecb_ret

+ALIGN   16

+$L$ecb_dec_three:

+        call    _aesni_decrypt3

+        movups  XMMWORD[rsi],xmm2

+        pxor    xmm2,xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        pxor    xmm3,xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        pxor    xmm4,xmm4

+        jmp     NEAR $L$ecb_ret

+ALIGN   16

+$L$ecb_dec_four:

+        call    _aesni_decrypt4

+        movups  XMMWORD[rsi],xmm2

+        pxor    xmm2,xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        pxor    xmm3,xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        pxor    xmm4,xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        pxor    xmm5,xmm5

+        jmp     NEAR $L$ecb_ret

+ALIGN   16

+$L$ecb_dec_five:

+        xorps   xmm7,xmm7

+        call    _aesni_decrypt6

+        movups  XMMWORD[rsi],xmm2

+        pxor    xmm2,xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        pxor    xmm3,xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        pxor    xmm4,xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        pxor    xmm5,xmm5

+        movups  XMMWORD[64+rsi],xmm6

+        pxor    xmm6,xmm6

+        pxor    xmm7,xmm7

+        jmp     NEAR $L$ecb_ret

+ALIGN   16

+$L$ecb_dec_six:

+        call    _aesni_decrypt6

+        movups  XMMWORD[rsi],xmm2

+        pxor    xmm2,xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        pxor    xmm3,xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        pxor    xmm4,xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        pxor    xmm5,xmm5

+        movups  XMMWORD[64+rsi],xmm6

+        pxor    xmm6,xmm6

+        movups  XMMWORD[80+rsi],xmm7

+        pxor    xmm7,xmm7

+

+$L$ecb_ret:

+        xorps   xmm0,xmm0

+        pxor    xmm1,xmm1

+        movaps  xmm6,XMMWORD[rsp]

+        movaps  XMMWORD[rsp],xmm0

+        movaps  xmm7,XMMWORD[16+rsp]

+        movaps  XMMWORD[16+rsp],xmm0

+        movaps  xmm8,XMMWORD[32+rsp]

+        movaps  XMMWORD[32+rsp],xmm0

+        movaps  xmm9,XMMWORD[48+rsp]

+        movaps  XMMWORD[48+rsp],xmm0

+        lea     rsp,[88+rsp]

+$L$ecb_enc_ret:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_aesni_ecb_encrypt:

+global  aesni_ccm64_encrypt_blocks

+

+ALIGN   16

+aesni_ccm64_encrypt_blocks:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_aesni_ccm64_encrypt_blocks:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+        mov     rcx,r9

+        mov     r8,QWORD[40+rsp]

+        mov     r9,QWORD[48+rsp]

+

+

+

+        lea     rsp,[((-88))+rsp]

+        movaps  XMMWORD[rsp],xmm6

+        movaps  XMMWORD[16+rsp],xmm7

+        movaps  XMMWORD[32+rsp],xmm8

+        movaps  XMMWORD[48+rsp],xmm9

+$L$ccm64_enc_body:

+        mov     eax,DWORD[240+rcx]

+        movdqu  xmm6,XMMWORD[r8]

+        movdqa  xmm9,XMMWORD[$L$increment64]

+        movdqa  xmm7,XMMWORD[$L$bswap_mask]

+

+        shl     eax,4

+        mov     r10d,16

+        lea     r11,[rcx]

+        movdqu  xmm3,XMMWORD[r9]

+        movdqa  xmm2,xmm6

+        lea     rcx,[32+rax*1+rcx]

+DB      102,15,56,0,247

+        sub     r10,rax

+        jmp     NEAR $L$ccm64_enc_outer

+ALIGN   16

+$L$ccm64_enc_outer:

+        movups  xmm0,XMMWORD[r11]

+        mov     rax,r10

+        movups  xmm8,XMMWORD[rdi]

+

+        xorps   xmm2,xmm0

+        movups  xmm1,XMMWORD[16+r11]

+        xorps   xmm0,xmm8

+        xorps   xmm3,xmm0

+        movups  xmm0,XMMWORD[32+r11]

+

+$L$ccm64_enc2_loop:

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$ccm64_enc2_loop

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+        paddq   xmm6,xmm9

+        dec     rdx

+DB      102,15,56,221,208

+DB      102,15,56,221,216

+

+        lea     rdi,[16+rdi]

+        xorps   xmm8,xmm2

+        movdqa  xmm2,xmm6

+        movups  XMMWORD[rsi],xmm8

+DB      102,15,56,0,215

+        lea     rsi,[16+rsi]

+        jnz     NEAR $L$ccm64_enc_outer

+

+        pxor    xmm0,xmm0

+        pxor    xmm1,xmm1

+        pxor    xmm2,xmm2

+        movups  XMMWORD[r9],xmm3

+        pxor    xmm3,xmm3

+        pxor    xmm8,xmm8

+        pxor    xmm6,xmm6

+        movaps  xmm6,XMMWORD[rsp]

+        movaps  XMMWORD[rsp],xmm0

+        movaps  xmm7,XMMWORD[16+rsp]

+        movaps  XMMWORD[16+rsp],xmm0

+        movaps  xmm8,XMMWORD[32+rsp]

+        movaps  XMMWORD[32+rsp],xmm0

+        movaps  xmm9,XMMWORD[48+rsp]

+        movaps  XMMWORD[48+rsp],xmm0

+        lea     rsp,[88+rsp]

+$L$ccm64_enc_ret:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_aesni_ccm64_encrypt_blocks:

+global  aesni_ccm64_decrypt_blocks

+

+ALIGN   16

+aesni_ccm64_decrypt_blocks:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_aesni_ccm64_decrypt_blocks:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+        mov     rcx,r9

+        mov     r8,QWORD[40+rsp]

+        mov     r9,QWORD[48+rsp]

+

+

+

+        lea     rsp,[((-88))+rsp]

+        movaps  XMMWORD[rsp],xmm6

+        movaps  XMMWORD[16+rsp],xmm7

+        movaps  XMMWORD[32+rsp],xmm8

+        movaps  XMMWORD[48+rsp],xmm9

+$L$ccm64_dec_body:

+        mov     eax,DWORD[240+rcx]

+        movups  xmm6,XMMWORD[r8]

+        movdqu  xmm3,XMMWORD[r9]

+        movdqa  xmm9,XMMWORD[$L$increment64]

+        movdqa  xmm7,XMMWORD[$L$bswap_mask]

+

+        movaps  xmm2,xmm6

+        mov     r10d,eax

+        mov     r11,rcx

+DB      102,15,56,0,247

+        movups  xmm0,XMMWORD[rcx]

+        movups  xmm1,XMMWORD[16+rcx]

+        lea     rcx,[32+rcx]

+        xorps   xmm2,xmm0

+$L$oop_enc1_5:

+DB      102,15,56,220,209

+        dec     eax

+        movups  xmm1,XMMWORD[rcx]

+        lea     rcx,[16+rcx]

+        jnz     NEAR $L$oop_enc1_5

+DB      102,15,56,221,209

+        shl     r10d,4

+        mov     eax,16

+        movups  xmm8,XMMWORD[rdi]

+        paddq   xmm6,xmm9

+        lea     rdi,[16+rdi]

+        sub     rax,r10

+        lea     rcx,[32+r10*1+r11]

+        mov     r10,rax

+        jmp     NEAR $L$ccm64_dec_outer

+ALIGN   16

+$L$ccm64_dec_outer:

+        xorps   xmm8,xmm2

+        movdqa  xmm2,xmm6

+        movups  XMMWORD[rsi],xmm8

+        lea     rsi,[16+rsi]

+DB      102,15,56,0,215

+

+        sub     rdx,1

+        jz      NEAR $L$ccm64_dec_break

+

+        movups  xmm0,XMMWORD[r11]

+        mov     rax,r10

+        movups  xmm1,XMMWORD[16+r11]

+        xorps   xmm8,xmm0

+        xorps   xmm2,xmm0

+        xorps   xmm3,xmm8

+        movups  xmm0,XMMWORD[32+r11]

+        jmp     NEAR $L$ccm64_dec2_loop

+ALIGN   16

+$L$ccm64_dec2_loop:

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$ccm64_dec2_loop

+        movups  xmm8,XMMWORD[rdi]

+        paddq   xmm6,xmm9

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,221,208

+DB      102,15,56,221,216

+        lea     rdi,[16+rdi]

+        jmp     NEAR $L$ccm64_dec_outer

+

+ALIGN   16

+$L$ccm64_dec_break:

+

+        mov     eax,DWORD[240+r11]

+        movups  xmm0,XMMWORD[r11]

+        movups  xmm1,XMMWORD[16+r11]

+        xorps   xmm8,xmm0

+        lea     r11,[32+r11]

+        xorps   xmm3,xmm8

+$L$oop_enc1_6:

+DB      102,15,56,220,217

+        dec     eax

+        movups  xmm1,XMMWORD[r11]

+        lea     r11,[16+r11]

+        jnz     NEAR $L$oop_enc1_6

+DB      102,15,56,221,217

+        pxor    xmm0,xmm0

+        pxor    xmm1,xmm1

+        pxor    xmm2,xmm2

+        movups  XMMWORD[r9],xmm3

+        pxor    xmm3,xmm3

+        pxor    xmm8,xmm8

+        pxor    xmm6,xmm6

+        movaps  xmm6,XMMWORD[rsp]

+        movaps  XMMWORD[rsp],xmm0

+        movaps  xmm7,XMMWORD[16+rsp]

+        movaps  XMMWORD[16+rsp],xmm0

+        movaps  xmm8,XMMWORD[32+rsp]

+        movaps  XMMWORD[32+rsp],xmm0

+        movaps  xmm9,XMMWORD[48+rsp]

+        movaps  XMMWORD[48+rsp],xmm0

+        lea     rsp,[88+rsp]

+$L$ccm64_dec_ret:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_aesni_ccm64_decrypt_blocks:

+global  aesni_ctr32_encrypt_blocks

+

+ALIGN   16

+aesni_ctr32_encrypt_blocks:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_aesni_ctr32_encrypt_blocks:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+        mov     rcx,r9

+        mov     r8,QWORD[40+rsp]

+

+

+

+        cmp     rdx,1

+        jne     NEAR $L$ctr32_bulk

+

+

+

+        movups  xmm2,XMMWORD[r8]

+        movups  xmm3,XMMWORD[rdi]

+        mov     edx,DWORD[240+rcx]

+        movups  xmm0,XMMWORD[rcx]

+        movups  xmm1,XMMWORD[16+rcx]

+        lea     rcx,[32+rcx]

+        xorps   xmm2,xmm0

+$L$oop_enc1_7:

+DB      102,15,56,220,209

+        dec     edx

+        movups  xmm1,XMMWORD[rcx]

+        lea     rcx,[16+rcx]

+        jnz     NEAR $L$oop_enc1_7

+DB      102,15,56,221,209

+        pxor    xmm0,xmm0

+        pxor    xmm1,xmm1

+        xorps   xmm2,xmm3

+        pxor    xmm3,xmm3

+        movups  XMMWORD[rsi],xmm2

+        xorps   xmm2,xmm2

+        jmp     NEAR $L$ctr32_epilogue

+

+ALIGN   16

+$L$ctr32_bulk:

+        lea     r11,[rsp]

+

+        push    rbp

+

+        sub     rsp,288

+        and     rsp,-16

+        movaps  XMMWORD[(-168)+r11],xmm6

+        movaps  XMMWORD[(-152)+r11],xmm7

+        movaps  XMMWORD[(-136)+r11],xmm8

+        movaps  XMMWORD[(-120)+r11],xmm9

+        movaps  XMMWORD[(-104)+r11],xmm10

+        movaps  XMMWORD[(-88)+r11],xmm11

+        movaps  XMMWORD[(-72)+r11],xmm12

+        movaps  XMMWORD[(-56)+r11],xmm13

+        movaps  XMMWORD[(-40)+r11],xmm14

+        movaps  XMMWORD[(-24)+r11],xmm15

+$L$ctr32_body:

+

+

+

+

+        movdqu  xmm2,XMMWORD[r8]

+        movdqu  xmm0,XMMWORD[rcx]

+        mov     r8d,DWORD[12+r8]

+        pxor    xmm2,xmm0

+        mov     ebp,DWORD[12+rcx]

+        movdqa  XMMWORD[rsp],xmm2

+        bswap   r8d

+        movdqa  xmm3,xmm2

+        movdqa  xmm4,xmm2

+        movdqa  xmm5,xmm2

+        movdqa  XMMWORD[64+rsp],xmm2

+        movdqa  XMMWORD[80+rsp],xmm2

+        movdqa  XMMWORD[96+rsp],xmm2

+        mov     r10,rdx

+        movdqa  XMMWORD[112+rsp],xmm2

+

+        lea     rax,[1+r8]

+        lea     rdx,[2+r8]

+        bswap   eax

+        bswap   edx

+        xor     eax,ebp

+        xor     edx,ebp

+DB      102,15,58,34,216,3

+        lea     rax,[3+r8]

+        movdqa  XMMWORD[16+rsp],xmm3

+DB      102,15,58,34,226,3

+        bswap   eax

+        mov     rdx,r10

+        lea     r10,[4+r8]

+        movdqa  XMMWORD[32+rsp],xmm4

+        xor     eax,ebp

+        bswap   r10d

+DB      102,15,58,34,232,3

+        xor     r10d,ebp

+        movdqa  XMMWORD[48+rsp],xmm5

+        lea     r9,[5+r8]

+        mov     DWORD[((64+12))+rsp],r10d

+        bswap   r9d

+        lea     r10,[6+r8]

+        mov     eax,DWORD[240+rcx]

+        xor     r9d,ebp

+        bswap   r10d

+        mov     DWORD[((80+12))+rsp],r9d

+        xor     r10d,ebp

+        lea     r9,[7+r8]

+        mov     DWORD[((96+12))+rsp],r10d

+        bswap   r9d

+        mov     r10d,DWORD[((OPENSSL_ia32cap_P+4))]

+        xor     r9d,ebp

+        and     r10d,71303168

+        mov     DWORD[((112+12))+rsp],r9d

+

+        movups  xmm1,XMMWORD[16+rcx]

+

+        movdqa  xmm6,XMMWORD[64+rsp]

+        movdqa  xmm7,XMMWORD[80+rsp]

+

+        cmp     rdx,8

+        jb      NEAR $L$ctr32_tail

+

+        sub     rdx,6

+        cmp     r10d,4194304

+        je      NEAR $L$ctr32_6x

+

+        lea     rcx,[128+rcx]

+        sub     rdx,2

+        jmp     NEAR $L$ctr32_loop8

+

+ALIGN   16

+$L$ctr32_6x:

+        shl     eax,4

+        mov     r10d,48

+        bswap   ebp

+        lea     rcx,[32+rax*1+rcx]

+        sub     r10,rax

+        jmp     NEAR $L$ctr32_loop6

+

+ALIGN   16

+$L$ctr32_loop6:

+        add     r8d,6

+        movups  xmm0,XMMWORD[((-48))+r10*1+rcx]

+DB      102,15,56,220,209

+        mov     eax,r8d

+        xor     eax,ebp

+DB      102,15,56,220,217

+DB      0x0f,0x38,0xf1,0x44,0x24,12

+        lea     eax,[1+r8]

+DB      102,15,56,220,225

+        xor     eax,ebp

+DB      0x0f,0x38,0xf1,0x44,0x24,28

+DB      102,15,56,220,233

+        lea     eax,[2+r8]

+        xor     eax,ebp

+DB      102,15,56,220,241

+DB      0x0f,0x38,0xf1,0x44,0x24,44

+        lea     eax,[3+r8]

+DB      102,15,56,220,249

+        movups  xmm1,XMMWORD[((-32))+r10*1+rcx]

+        xor     eax,ebp

+

+DB      102,15,56,220,208

+DB      0x0f,0x38,0xf1,0x44,0x24,60

+        lea     eax,[4+r8]

+DB      102,15,56,220,216

+        xor     eax,ebp

+DB      0x0f,0x38,0xf1,0x44,0x24,76

+DB      102,15,56,220,224

+        lea     eax,[5+r8]

+        xor     eax,ebp

+DB      102,15,56,220,232

+DB      0x0f,0x38,0xf1,0x44,0x24,92

+        mov     rax,r10

+DB      102,15,56,220,240

+DB      102,15,56,220,248

+        movups  xmm0,XMMWORD[((-16))+r10*1+rcx]

+

+        call    $L$enc_loop6

+

+        movdqu  xmm8,XMMWORD[rdi]

+        movdqu  xmm9,XMMWORD[16+rdi]

+        movdqu  xmm10,XMMWORD[32+rdi]

+        movdqu  xmm11,XMMWORD[48+rdi]

+        movdqu  xmm12,XMMWORD[64+rdi]

+        movdqu  xmm13,XMMWORD[80+rdi]

+        lea     rdi,[96+rdi]

+        movups  xmm1,XMMWORD[((-64))+r10*1+rcx]

+        pxor    xmm8,xmm2

+        movaps  xmm2,XMMWORD[rsp]

+        pxor    xmm9,xmm3

+        movaps  xmm3,XMMWORD[16+rsp]

+        pxor    xmm10,xmm4

+        movaps  xmm4,XMMWORD[32+rsp]

+        pxor    xmm11,xmm5

+        movaps  xmm5,XMMWORD[48+rsp]

+        pxor    xmm12,xmm6

+        movaps  xmm6,XMMWORD[64+rsp]

+        pxor    xmm13,xmm7

+        movaps  xmm7,XMMWORD[80+rsp]

+        movdqu  XMMWORD[rsi],xmm8

+        movdqu  XMMWORD[16+rsi],xmm9

+        movdqu  XMMWORD[32+rsi],xmm10

+        movdqu  XMMWORD[48+rsi],xmm11

+        movdqu  XMMWORD[64+rsi],xmm12

+        movdqu  XMMWORD[80+rsi],xmm13

+        lea     rsi,[96+rsi]

+

+        sub     rdx,6

+        jnc     NEAR $L$ctr32_loop6

+

+        add     rdx,6

+        jz      NEAR $L$ctr32_done

+

+        lea     eax,[((-48))+r10]

+        lea     rcx,[((-80))+r10*1+rcx]

+        neg     eax

+        shr     eax,4

+        jmp     NEAR $L$ctr32_tail

+

+ALIGN   32

+$L$ctr32_loop8:

+        add     r8d,8

+        movdqa  xmm8,XMMWORD[96+rsp]

+DB      102,15,56,220,209

+        mov     r9d,r8d

+        movdqa  xmm9,XMMWORD[112+rsp]

+DB      102,15,56,220,217

+        bswap   r9d

+        movups  xmm0,XMMWORD[((32-128))+rcx]

+DB      102,15,56,220,225

+        xor     r9d,ebp

+        nop

+DB      102,15,56,220,233

+        mov     DWORD[((0+12))+rsp],r9d

+        lea     r9,[1+r8]

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+DB      102,68,15,56,220,193

+DB      102,68,15,56,220,201

+        movups  xmm1,XMMWORD[((48-128))+rcx]

+        bswap   r9d

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+        xor     r9d,ebp

+DB      0x66,0x90

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+        mov     DWORD[((16+12))+rsp],r9d

+        lea     r9,[2+r8]

+DB      102,15,56,220,240

+DB      102,15,56,220,248

+DB      102,68,15,56,220,192

+DB      102,68,15,56,220,200

+        movups  xmm0,XMMWORD[((64-128))+rcx]

+        bswap   r9d

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+        xor     r9d,ebp

+DB      0x66,0x90

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        mov     DWORD[((32+12))+rsp],r9d

+        lea     r9,[3+r8]

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+DB      102,68,15,56,220,193

+DB      102,68,15,56,220,201

+        movups  xmm1,XMMWORD[((80-128))+rcx]

+        bswap   r9d

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+        xor     r9d,ebp

+DB      0x66,0x90

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+        mov     DWORD[((48+12))+rsp],r9d

+        lea     r9,[4+r8]

+DB      102,15,56,220,240

+DB      102,15,56,220,248

+DB      102,68,15,56,220,192

+DB      102,68,15,56,220,200

+        movups  xmm0,XMMWORD[((96-128))+rcx]

+        bswap   r9d

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+        xor     r9d,ebp

+DB      0x66,0x90

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        mov     DWORD[((64+12))+rsp],r9d

+        lea     r9,[5+r8]

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+DB      102,68,15,56,220,193

+DB      102,68,15,56,220,201

+        movups  xmm1,XMMWORD[((112-128))+rcx]

+        bswap   r9d

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+        xor     r9d,ebp

+DB      0x66,0x90

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+        mov     DWORD[((80+12))+rsp],r9d

+        lea     r9,[6+r8]

+DB      102,15,56,220,240

+DB      102,15,56,220,248

+DB      102,68,15,56,220,192

+DB      102,68,15,56,220,200

+        movups  xmm0,XMMWORD[((128-128))+rcx]

+        bswap   r9d

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+        xor     r9d,ebp

+DB      0x66,0x90

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        mov     DWORD[((96+12))+rsp],r9d

+        lea     r9,[7+r8]

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+DB      102,68,15,56,220,193

+DB      102,68,15,56,220,201

+        movups  xmm1,XMMWORD[((144-128))+rcx]

+        bswap   r9d

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+        xor     r9d,ebp

+        movdqu  xmm10,XMMWORD[rdi]

+DB      102,15,56,220,232

+        mov     DWORD[((112+12))+rsp],r9d

+        cmp     eax,11

+DB      102,15,56,220,240

+DB      102,15,56,220,248

+DB      102,68,15,56,220,192

+DB      102,68,15,56,220,200

+        movups  xmm0,XMMWORD[((160-128))+rcx]

+

+        jb      NEAR $L$ctr32_enc_done

+

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+DB      102,68,15,56,220,193

+DB      102,68,15,56,220,201

+        movups  xmm1,XMMWORD[((176-128))+rcx]

+

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+DB      102,15,56,220,240

+DB      102,15,56,220,248

+DB      102,68,15,56,220,192

+DB      102,68,15,56,220,200

+        movups  xmm0,XMMWORD[((192-128))+rcx]

+        je      NEAR $L$ctr32_enc_done

+

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+DB      102,68,15,56,220,193

+DB      102,68,15,56,220,201

+        movups  xmm1,XMMWORD[((208-128))+rcx]

+

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+DB      102,15,56,220,240

+DB      102,15,56,220,248

+DB      102,68,15,56,220,192

+DB      102,68,15,56,220,200

+        movups  xmm0,XMMWORD[((224-128))+rcx]

+        jmp     NEAR $L$ctr32_enc_done

+

+ALIGN   16

+$L$ctr32_enc_done:

+        movdqu  xmm11,XMMWORD[16+rdi]

+        pxor    xmm10,xmm0

+        movdqu  xmm12,XMMWORD[32+rdi]

+        pxor    xmm11,xmm0

+        movdqu  xmm13,XMMWORD[48+rdi]

+        pxor    xmm12,xmm0

+        movdqu  xmm14,XMMWORD[64+rdi]

+        pxor    xmm13,xmm0

+        movdqu  xmm15,XMMWORD[80+rdi]

+        pxor    xmm14,xmm0

+        pxor    xmm15,xmm0

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+DB      102,68,15,56,220,193

+DB      102,68,15,56,220,201

+        movdqu  xmm1,XMMWORD[96+rdi]

+        lea     rdi,[128+rdi]

+

+DB      102,65,15,56,221,210

+        pxor    xmm1,xmm0

+        movdqu  xmm10,XMMWORD[((112-128))+rdi]

+DB      102,65,15,56,221,219

+        pxor    xmm10,xmm0

+        movdqa  xmm11,XMMWORD[rsp]

+DB      102,65,15,56,221,228

+DB      102,65,15,56,221,237

+        movdqa  xmm12,XMMWORD[16+rsp]

+        movdqa  xmm13,XMMWORD[32+rsp]

+DB      102,65,15,56,221,246

+DB      102,65,15,56,221,255

+        movdqa  xmm14,XMMWORD[48+rsp]

+        movdqa  xmm15,XMMWORD[64+rsp]

+DB      102,68,15,56,221,193

+        movdqa  xmm0,XMMWORD[80+rsp]

+        movups  xmm1,XMMWORD[((16-128))+rcx]

+DB      102,69,15,56,221,202

+

+        movups  XMMWORD[rsi],xmm2

+        movdqa  xmm2,xmm11

+        movups  XMMWORD[16+rsi],xmm3

+        movdqa  xmm3,xmm12

+        movups  XMMWORD[32+rsi],xmm4

+        movdqa  xmm4,xmm13

+        movups  XMMWORD[48+rsi],xmm5

+        movdqa  xmm5,xmm14

+        movups  XMMWORD[64+rsi],xmm6

+        movdqa  xmm6,xmm15

+        movups  XMMWORD[80+rsi],xmm7

+        movdqa  xmm7,xmm0

+        movups  XMMWORD[96+rsi],xmm8

+        movups  XMMWORD[112+rsi],xmm9

+        lea     rsi,[128+rsi]

+

+        sub     rdx,8

+        jnc     NEAR $L$ctr32_loop8

+

+        add     rdx,8

+        jz      NEAR $L$ctr32_done

+        lea     rcx,[((-128))+rcx]

+

+$L$ctr32_tail:

+

+

+        lea     rcx,[16+rcx]

+        cmp     rdx,4

+        jb      NEAR $L$ctr32_loop3

+        je      NEAR $L$ctr32_loop4

+

+

+        shl     eax,4

+        movdqa  xmm8,XMMWORD[96+rsp]

+        pxor    xmm9,xmm9

+

+        movups  xmm0,XMMWORD[16+rcx]

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+        lea     rcx,[((32-16))+rax*1+rcx]

+        neg     rax

+DB      102,15,56,220,225

+        add     rax,16

+        movups  xmm10,XMMWORD[rdi]

+DB      102,15,56,220,233

+DB      102,15,56,220,241

+        movups  xmm11,XMMWORD[16+rdi]

+        movups  xmm12,XMMWORD[32+rdi]

+DB      102,15,56,220,249

+DB      102,68,15,56,220,193

+

+        call    $L$enc_loop8_enter

+

+        movdqu  xmm13,XMMWORD[48+rdi]

+        pxor    xmm2,xmm10

+        movdqu  xmm10,XMMWORD[64+rdi]

+        pxor    xmm3,xmm11

+        movdqu  XMMWORD[rsi],xmm2

+        pxor    xmm4,xmm12

+        movdqu  XMMWORD[16+rsi],xmm3

+        pxor    xmm5,xmm13

+        movdqu  XMMWORD[32+rsi],xmm4

+        pxor    xmm6,xmm10

+        movdqu  XMMWORD[48+rsi],xmm5

+        movdqu  XMMWORD[64+rsi],xmm6

+        cmp     rdx,6

+        jb      NEAR $L$ctr32_done

+

+        movups  xmm11,XMMWORD[80+rdi]

+        xorps   xmm7,xmm11

+        movups  XMMWORD[80+rsi],xmm7

+        je      NEAR $L$ctr32_done

+

+        movups  xmm12,XMMWORD[96+rdi]

+        xorps   xmm8,xmm12

+        movups  XMMWORD[96+rsi],xmm8

+        jmp     NEAR $L$ctr32_done

+

+ALIGN   32

+$L$ctr32_loop4:

+DB      102,15,56,220,209

+        lea     rcx,[16+rcx]

+        dec     eax

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        movups  xmm1,XMMWORD[rcx]

+        jnz     NEAR $L$ctr32_loop4

+DB      102,15,56,221,209

+DB      102,15,56,221,217

+        movups  xmm10,XMMWORD[rdi]

+        movups  xmm11,XMMWORD[16+rdi]

+DB      102,15,56,221,225

+DB      102,15,56,221,233

+        movups  xmm12,XMMWORD[32+rdi]

+        movups  xmm13,XMMWORD[48+rdi]

+

+        xorps   xmm2,xmm10

+        movups  XMMWORD[rsi],xmm2

+        xorps   xmm3,xmm11

+        movups  XMMWORD[16+rsi],xmm3

+        pxor    xmm4,xmm12

+        movdqu  XMMWORD[32+rsi],xmm4

+        pxor    xmm5,xmm13

+        movdqu  XMMWORD[48+rsi],xmm5

+        jmp     NEAR $L$ctr32_done

+

+ALIGN   32

+$L$ctr32_loop3:

+DB      102,15,56,220,209

+        lea     rcx,[16+rcx]

+        dec     eax

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+        movups  xmm1,XMMWORD[rcx]

+        jnz     NEAR $L$ctr32_loop3

+DB      102,15,56,221,209

+DB      102,15,56,221,217

+DB      102,15,56,221,225

+

+        movups  xmm10,XMMWORD[rdi]

+        xorps   xmm2,xmm10

+        movups  XMMWORD[rsi],xmm2

+        cmp     rdx,2

+        jb      NEAR $L$ctr32_done

+

+        movups  xmm11,XMMWORD[16+rdi]

+        xorps   xmm3,xmm11

+        movups  XMMWORD[16+rsi],xmm3

+        je      NEAR $L$ctr32_done

+

+        movups  xmm12,XMMWORD[32+rdi]

+        xorps   xmm4,xmm12

+        movups  XMMWORD[32+rsi],xmm4

+

+$L$ctr32_done:

+        xorps   xmm0,xmm0

+        xor     ebp,ebp

+        pxor    xmm1,xmm1

+        pxor    xmm2,xmm2

+        pxor    xmm3,xmm3

+        pxor    xmm4,xmm4

+        pxor    xmm5,xmm5

+        movaps  xmm6,XMMWORD[((-168))+r11]

+        movaps  XMMWORD[(-168)+r11],xmm0

+        movaps  xmm7,XMMWORD[((-152))+r11]

+        movaps  XMMWORD[(-152)+r11],xmm0

+        movaps  xmm8,XMMWORD[((-136))+r11]

+        movaps  XMMWORD[(-136)+r11],xmm0

+        movaps  xmm9,XMMWORD[((-120))+r11]

+        movaps  XMMWORD[(-120)+r11],xmm0

+        movaps  xmm10,XMMWORD[((-104))+r11]

+        movaps  XMMWORD[(-104)+r11],xmm0

+        movaps  xmm11,XMMWORD[((-88))+r11]

+        movaps  XMMWORD[(-88)+r11],xmm0

+        movaps  xmm12,XMMWORD[((-72))+r11]

+        movaps  XMMWORD[(-72)+r11],xmm0

+        movaps  xmm13,XMMWORD[((-56))+r11]

+        movaps  XMMWORD[(-56)+r11],xmm0

+        movaps  xmm14,XMMWORD[((-40))+r11]

+        movaps  XMMWORD[(-40)+r11],xmm0

+        movaps  xmm15,XMMWORD[((-24))+r11]

+        movaps  XMMWORD[(-24)+r11],xmm0

+        movaps  XMMWORD[rsp],xmm0

+        movaps  XMMWORD[16+rsp],xmm0

+        movaps  XMMWORD[32+rsp],xmm0

+        movaps  XMMWORD[48+rsp],xmm0

+        movaps  XMMWORD[64+rsp],xmm0

+        movaps  XMMWORD[80+rsp],xmm0

+        movaps  XMMWORD[96+rsp],xmm0

+        movaps  XMMWORD[112+rsp],xmm0

+        mov     rbp,QWORD[((-8))+r11]

+

+        lea     rsp,[r11]

+

+$L$ctr32_epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_aesni_ctr32_encrypt_blocks:

+global  aesni_xts_encrypt

+

+ALIGN   16

+aesni_xts_encrypt:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_aesni_xts_encrypt:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+        mov     rcx,r9

+        mov     r8,QWORD[40+rsp]

+        mov     r9,QWORD[48+rsp]

+

+

+

+        lea     r11,[rsp]

+

+        push    rbp

+

+        sub     rsp,272

+        and     rsp,-16

+        movaps  XMMWORD[(-168)+r11],xmm6

+        movaps  XMMWORD[(-152)+r11],xmm7

+        movaps  XMMWORD[(-136)+r11],xmm8

+        movaps  XMMWORD[(-120)+r11],xmm9

+        movaps  XMMWORD[(-104)+r11],xmm10

+        movaps  XMMWORD[(-88)+r11],xmm11

+        movaps  XMMWORD[(-72)+r11],xmm12

+        movaps  XMMWORD[(-56)+r11],xmm13

+        movaps  XMMWORD[(-40)+r11],xmm14

+        movaps  XMMWORD[(-24)+r11],xmm15

+$L$xts_enc_body:

+        movups  xmm2,XMMWORD[r9]

+        mov     eax,DWORD[240+r8]

+        mov     r10d,DWORD[240+rcx]

+        movups  xmm0,XMMWORD[r8]

+        movups  xmm1,XMMWORD[16+r8]

+        lea     r8,[32+r8]

+        xorps   xmm2,xmm0

+$L$oop_enc1_8:

+DB      102,15,56,220,209

+        dec     eax

+        movups  xmm1,XMMWORD[r8]

+        lea     r8,[16+r8]

+        jnz     NEAR $L$oop_enc1_8

+DB      102,15,56,221,209

+        movups  xmm0,XMMWORD[rcx]

+        mov     rbp,rcx

+        mov     eax,r10d

+        shl     r10d,4

+        mov     r9,rdx

+        and     rdx,-16

+

+        movups  xmm1,XMMWORD[16+r10*1+rcx]

+

+        movdqa  xmm8,XMMWORD[$L$xts_magic]

+        movdqa  xmm15,xmm2

+        pshufd  xmm9,xmm2,0x5f

+        pxor    xmm1,xmm0

+        movdqa  xmm14,xmm9

+        paddd   xmm9,xmm9

+        movdqa  xmm10,xmm15

+        psrad   xmm14,31

+        paddq   xmm15,xmm15

+        pand    xmm14,xmm8

+        pxor    xmm10,xmm0

+        pxor    xmm15,xmm14

+        movdqa  xmm14,xmm9

+        paddd   xmm9,xmm9

+        movdqa  xmm11,xmm15

+        psrad   xmm14,31

+        paddq   xmm15,xmm15

+        pand    xmm14,xmm8

+        pxor    xmm11,xmm0

+        pxor    xmm15,xmm14

+        movdqa  xmm14,xmm9

+        paddd   xmm9,xmm9

+        movdqa  xmm12,xmm15

+        psrad   xmm14,31

+        paddq   xmm15,xmm15

+        pand    xmm14,xmm8

+        pxor    xmm12,xmm0

+        pxor    xmm15,xmm14

+        movdqa  xmm14,xmm9

+        paddd   xmm9,xmm9

+        movdqa  xmm13,xmm15

+        psrad   xmm14,31

+        paddq   xmm15,xmm15

+        pand    xmm14,xmm8

+        pxor    xmm13,xmm0

+        pxor    xmm15,xmm14

+        movdqa  xmm14,xmm15

+        psrad   xmm9,31

+        paddq   xmm15,xmm15

+        pand    xmm9,xmm8

+        pxor    xmm14,xmm0

+        pxor    xmm15,xmm9

+        movaps  XMMWORD[96+rsp],xmm1

+

+        sub     rdx,16*6

+        jc      NEAR $L$xts_enc_short

+

+        mov     eax,16+96

+        lea     rcx,[32+r10*1+rbp]

+        sub     rax,r10

+        movups  xmm1,XMMWORD[16+rbp]

+        mov     r10,rax

+        lea     r8,[$L$xts_magic]

+        jmp     NEAR $L$xts_enc_grandloop

+

+ALIGN   32

+$L$xts_enc_grandloop:

+        movdqu  xmm2,XMMWORD[rdi]

+        movdqa  xmm8,xmm0

+        movdqu  xmm3,XMMWORD[16+rdi]

+        pxor    xmm2,xmm10

+        movdqu  xmm4,XMMWORD[32+rdi]

+        pxor    xmm3,xmm11

+DB      102,15,56,220,209

+        movdqu  xmm5,XMMWORD[48+rdi]

+        pxor    xmm4,xmm12

+DB      102,15,56,220,217

+        movdqu  xmm6,XMMWORD[64+rdi]

+        pxor    xmm5,xmm13

+DB      102,15,56,220,225

+        movdqu  xmm7,XMMWORD[80+rdi]

+        pxor    xmm8,xmm15

+        movdqa  xmm9,XMMWORD[96+rsp]

+        pxor    xmm6,xmm14

+DB      102,15,56,220,233

+        movups  xmm0,XMMWORD[32+rbp]

+        lea     rdi,[96+rdi]

+        pxor    xmm7,xmm8

+

+        pxor    xmm10,xmm9

+DB      102,15,56,220,241

+        pxor    xmm11,xmm9

+        movdqa  XMMWORD[rsp],xmm10

+DB      102,15,56,220,249

+        movups  xmm1,XMMWORD[48+rbp]

+        pxor    xmm12,xmm9

+

+DB      102,15,56,220,208

+        pxor    xmm13,xmm9

+        movdqa  XMMWORD[16+rsp],xmm11

+DB      102,15,56,220,216

+        pxor    xmm14,xmm9

+        movdqa  XMMWORD[32+rsp],xmm12

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+        pxor    xmm8,xmm9

+        movdqa  XMMWORD[64+rsp],xmm14

+DB      102,15,56,220,240

+DB      102,15,56,220,248

+        movups  xmm0,XMMWORD[64+rbp]

+        movdqa  XMMWORD[80+rsp],xmm8

+        pshufd  xmm9,xmm15,0x5f

+        jmp     NEAR $L$xts_enc_loop6

+ALIGN   32

+$L$xts_enc_loop6:

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+        movups  xmm1,XMMWORD[((-64))+rax*1+rcx]

+        add     rax,32

+

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+DB      102,15,56,220,240

+DB      102,15,56,220,248

+        movups  xmm0,XMMWORD[((-80))+rax*1+rcx]

+        jnz     NEAR $L$xts_enc_loop6

+

+        movdqa  xmm8,XMMWORD[r8]

+        movdqa  xmm14,xmm9

+        paddd   xmm9,xmm9

+DB      102,15,56,220,209

+        paddq   xmm15,xmm15

+        psrad   xmm14,31

+DB      102,15,56,220,217

+        pand    xmm14,xmm8

+        movups  xmm10,XMMWORD[rbp]

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+DB      102,15,56,220,241

+        pxor    xmm15,xmm14

+        movaps  xmm11,xmm10

+DB      102,15,56,220,249

+        movups  xmm1,XMMWORD[((-64))+rcx]

+

+        movdqa  xmm14,xmm9

+DB      102,15,56,220,208

+        paddd   xmm9,xmm9

+        pxor    xmm10,xmm15

+DB      102,15,56,220,216

+        psrad   xmm14,31

+        paddq   xmm15,xmm15

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+        pand    xmm14,xmm8

+        movaps  xmm12,xmm11

+DB      102,15,56,220,240

+        pxor    xmm15,xmm14

+        movdqa  xmm14,xmm9

+DB      102,15,56,220,248

+        movups  xmm0,XMMWORD[((-48))+rcx]

+

+        paddd   xmm9,xmm9

+DB      102,15,56,220,209

+        pxor    xmm11,xmm15

+        psrad   xmm14,31

+DB      102,15,56,220,217

+        paddq   xmm15,xmm15

+        pand    xmm14,xmm8

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        movdqa  XMMWORD[48+rsp],xmm13

+        pxor    xmm15,xmm14

+DB      102,15,56,220,241

+        movaps  xmm13,xmm12

+        movdqa  xmm14,xmm9

+DB      102,15,56,220,249

+        movups  xmm1,XMMWORD[((-32))+rcx]

+

+        paddd   xmm9,xmm9

+DB      102,15,56,220,208

+        pxor    xmm12,xmm15

+        psrad   xmm14,31

+DB      102,15,56,220,216

+        paddq   xmm15,xmm15

+        pand    xmm14,xmm8

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+DB      102,15,56,220,240

+        pxor    xmm15,xmm14

+        movaps  xmm14,xmm13

+DB      102,15,56,220,248

+

+        movdqa  xmm0,xmm9

+        paddd   xmm9,xmm9

+DB      102,15,56,220,209

+        pxor    xmm13,xmm15

+        psrad   xmm0,31

+DB      102,15,56,220,217

+        paddq   xmm15,xmm15

+        pand    xmm0,xmm8

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        pxor    xmm15,xmm0

+        movups  xmm0,XMMWORD[rbp]

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+        movups  xmm1,XMMWORD[16+rbp]

+

+        pxor    xmm14,xmm15

+DB      102,15,56,221,84,36,0

+        psrad   xmm9,31

+        paddq   xmm15,xmm15

+DB      102,15,56,221,92,36,16

+DB      102,15,56,221,100,36,32

+        pand    xmm9,xmm8

+        mov     rax,r10

+DB      102,15,56,221,108,36,48

+DB      102,15,56,221,116,36,64

+DB      102,15,56,221,124,36,80

+        pxor    xmm15,xmm9

+

+        lea     rsi,[96+rsi]

+        movups  XMMWORD[(-96)+rsi],xmm2

+        movups  XMMWORD[(-80)+rsi],xmm3

+        movups  XMMWORD[(-64)+rsi],xmm4

+        movups  XMMWORD[(-48)+rsi],xmm5

+        movups  XMMWORD[(-32)+rsi],xmm6

+        movups  XMMWORD[(-16)+rsi],xmm7

+        sub     rdx,16*6

+        jnc     NEAR $L$xts_enc_grandloop

+

+        mov     eax,16+96

+        sub     eax,r10d

+        mov     rcx,rbp

+        shr     eax,4

+

+$L$xts_enc_short:

+

+        mov     r10d,eax

+        pxor    xmm10,xmm0

+        add     rdx,16*6

+        jz      NEAR $L$xts_enc_done

+

+        pxor    xmm11,xmm0

+        cmp     rdx,0x20

+        jb      NEAR $L$xts_enc_one

+        pxor    xmm12,xmm0

+        je      NEAR $L$xts_enc_two

+

+        pxor    xmm13,xmm0

+        cmp     rdx,0x40

+        jb      NEAR $L$xts_enc_three

+        pxor    xmm14,xmm0

+        je      NEAR $L$xts_enc_four

+

+        movdqu  xmm2,XMMWORD[rdi]

+        movdqu  xmm3,XMMWORD[16+rdi]

+        movdqu  xmm4,XMMWORD[32+rdi]

+        pxor    xmm2,xmm10

+        movdqu  xmm5,XMMWORD[48+rdi]

+        pxor    xmm3,xmm11

+        movdqu  xmm6,XMMWORD[64+rdi]

+        lea     rdi,[80+rdi]

+        pxor    xmm4,xmm12

+        pxor    xmm5,xmm13

+        pxor    xmm6,xmm14

+        pxor    xmm7,xmm7

+

+        call    _aesni_encrypt6

+

+        xorps   xmm2,xmm10

+        movdqa  xmm10,xmm15

+        xorps   xmm3,xmm11

+        xorps   xmm4,xmm12

+        movdqu  XMMWORD[rsi],xmm2

+        xorps   xmm5,xmm13

+        movdqu  XMMWORD[16+rsi],xmm3

+        xorps   xmm6,xmm14

+        movdqu  XMMWORD[32+rsi],xmm4

+        movdqu  XMMWORD[48+rsi],xmm5

+        movdqu  XMMWORD[64+rsi],xmm6

+        lea     rsi,[80+rsi]

+        jmp     NEAR $L$xts_enc_done

+

+ALIGN   16

+$L$xts_enc_one:

+        movups  xmm2,XMMWORD[rdi]

+        lea     rdi,[16+rdi]

+        xorps   xmm2,xmm10

+        movups  xmm0,XMMWORD[rcx]

+        movups  xmm1,XMMWORD[16+rcx]

+        lea     rcx,[32+rcx]

+        xorps   xmm2,xmm0

+$L$oop_enc1_9:

+DB      102,15,56,220,209

+        dec     eax

+        movups  xmm1,XMMWORD[rcx]

+        lea     rcx,[16+rcx]

+        jnz     NEAR $L$oop_enc1_9

+DB      102,15,56,221,209

+        xorps   xmm2,xmm10

+        movdqa  xmm10,xmm11

+        movups  XMMWORD[rsi],xmm2

+        lea     rsi,[16+rsi]

+        jmp     NEAR $L$xts_enc_done

+

+ALIGN   16

+$L$xts_enc_two:

+        movups  xmm2,XMMWORD[rdi]

+        movups  xmm3,XMMWORD[16+rdi]

+        lea     rdi,[32+rdi]

+        xorps   xmm2,xmm10

+        xorps   xmm3,xmm11

+

+        call    _aesni_encrypt2

+

+        xorps   xmm2,xmm10

+        movdqa  xmm10,xmm12

+        xorps   xmm3,xmm11

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        lea     rsi,[32+rsi]

+        jmp     NEAR $L$xts_enc_done

+

+ALIGN   16

+$L$xts_enc_three:

+        movups  xmm2,XMMWORD[rdi]

+        movups  xmm3,XMMWORD[16+rdi]

+        movups  xmm4,XMMWORD[32+rdi]

+        lea     rdi,[48+rdi]

+        xorps   xmm2,xmm10

+        xorps   xmm3,xmm11

+        xorps   xmm4,xmm12

+

+        call    _aesni_encrypt3

+

+        xorps   xmm2,xmm10

+        movdqa  xmm10,xmm13

+        xorps   xmm3,xmm11

+        xorps   xmm4,xmm12

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        lea     rsi,[48+rsi]

+        jmp     NEAR $L$xts_enc_done

+

+ALIGN   16

+$L$xts_enc_four:

+        movups  xmm2,XMMWORD[rdi]

+        movups  xmm3,XMMWORD[16+rdi]

+        movups  xmm4,XMMWORD[32+rdi]

+        xorps   xmm2,xmm10

+        movups  xmm5,XMMWORD[48+rdi]

+        lea     rdi,[64+rdi]

+        xorps   xmm3,xmm11

+        xorps   xmm4,xmm12

+        xorps   xmm5,xmm13

+

+        call    _aesni_encrypt4

+

+        pxor    xmm2,xmm10

+        movdqa  xmm10,xmm14

+        pxor    xmm3,xmm11

+        pxor    xmm4,xmm12

+        movdqu  XMMWORD[rsi],xmm2

+        pxor    xmm5,xmm13

+        movdqu  XMMWORD[16+rsi],xmm3

+        movdqu  XMMWORD[32+rsi],xmm4

+        movdqu  XMMWORD[48+rsi],xmm5

+        lea     rsi,[64+rsi]

+        jmp     NEAR $L$xts_enc_done

+

+ALIGN   16

+$L$xts_enc_done:

+        and     r9,15

+        jz      NEAR $L$xts_enc_ret

+        mov     rdx,r9

+

+$L$xts_enc_steal:

+        movzx   eax,BYTE[rdi]

+        movzx   ecx,BYTE[((-16))+rsi]

+        lea     rdi,[1+rdi]

+        mov     BYTE[((-16))+rsi],al

+        mov     BYTE[rsi],cl

+        lea     rsi,[1+rsi]

+        sub     rdx,1

+        jnz     NEAR $L$xts_enc_steal

+

+        sub     rsi,r9

+        mov     rcx,rbp

+        mov     eax,r10d

+

+        movups  xmm2,XMMWORD[((-16))+rsi]

+        xorps   xmm2,xmm10

+        movups  xmm0,XMMWORD[rcx]

+        movups  xmm1,XMMWORD[16+rcx]

+        lea     rcx,[32+rcx]

+        xorps   xmm2,xmm0

+$L$oop_enc1_10:

+DB      102,15,56,220,209

+        dec     eax

+        movups  xmm1,XMMWORD[rcx]

+        lea     rcx,[16+rcx]

+        jnz     NEAR $L$oop_enc1_10

+DB      102,15,56,221,209

+        xorps   xmm2,xmm10

+        movups  XMMWORD[(-16)+rsi],xmm2

+

+$L$xts_enc_ret:

+        xorps   xmm0,xmm0

+        pxor    xmm1,xmm1

+        pxor    xmm2,xmm2

+        pxor    xmm3,xmm3

+        pxor    xmm4,xmm4

+        pxor    xmm5,xmm5

+        movaps  xmm6,XMMWORD[((-168))+r11]

+        movaps  XMMWORD[(-168)+r11],xmm0

+        movaps  xmm7,XMMWORD[((-152))+r11]

+        movaps  XMMWORD[(-152)+r11],xmm0

+        movaps  xmm8,XMMWORD[((-136))+r11]

+        movaps  XMMWORD[(-136)+r11],xmm0

+        movaps  xmm9,XMMWORD[((-120))+r11]

+        movaps  XMMWORD[(-120)+r11],xmm0

+        movaps  xmm10,XMMWORD[((-104))+r11]

+        movaps  XMMWORD[(-104)+r11],xmm0

+        movaps  xmm11,XMMWORD[((-88))+r11]

+        movaps  XMMWORD[(-88)+r11],xmm0

+        movaps  xmm12,XMMWORD[((-72))+r11]

+        movaps  XMMWORD[(-72)+r11],xmm0

+        movaps  xmm13,XMMWORD[((-56))+r11]

+        movaps  XMMWORD[(-56)+r11],xmm0

+        movaps  xmm14,XMMWORD[((-40))+r11]

+        movaps  XMMWORD[(-40)+r11],xmm0

+        movaps  xmm15,XMMWORD[((-24))+r11]

+        movaps  XMMWORD[(-24)+r11],xmm0

+        movaps  XMMWORD[rsp],xmm0

+        movaps  XMMWORD[16+rsp],xmm0

+        movaps  XMMWORD[32+rsp],xmm0

+        movaps  XMMWORD[48+rsp],xmm0

+        movaps  XMMWORD[64+rsp],xmm0

+        movaps  XMMWORD[80+rsp],xmm0

+        movaps  XMMWORD[96+rsp],xmm0

+        mov     rbp,QWORD[((-8))+r11]

+

+        lea     rsp,[r11]

+

+$L$xts_enc_epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_aesni_xts_encrypt:

+global  aesni_xts_decrypt

+

+ALIGN   16

+aesni_xts_decrypt:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_aesni_xts_decrypt:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+        mov     rcx,r9

+        mov     r8,QWORD[40+rsp]

+        mov     r9,QWORD[48+rsp]

+

+

+

+        lea     r11,[rsp]

+

+        push    rbp

+

+        sub     rsp,272

+        and     rsp,-16

+        movaps  XMMWORD[(-168)+r11],xmm6

+        movaps  XMMWORD[(-152)+r11],xmm7

+        movaps  XMMWORD[(-136)+r11],xmm8

+        movaps  XMMWORD[(-120)+r11],xmm9

+        movaps  XMMWORD[(-104)+r11],xmm10

+        movaps  XMMWORD[(-88)+r11],xmm11

+        movaps  XMMWORD[(-72)+r11],xmm12

+        movaps  XMMWORD[(-56)+r11],xmm13

+        movaps  XMMWORD[(-40)+r11],xmm14

+        movaps  XMMWORD[(-24)+r11],xmm15

+$L$xts_dec_body:

+        movups  xmm2,XMMWORD[r9]

+        mov     eax,DWORD[240+r8]

+        mov     r10d,DWORD[240+rcx]

+        movups  xmm0,XMMWORD[r8]

+        movups  xmm1,XMMWORD[16+r8]

+        lea     r8,[32+r8]

+        xorps   xmm2,xmm0

+$L$oop_enc1_11:

+DB      102,15,56,220,209

+        dec     eax

+        movups  xmm1,XMMWORD[r8]

+        lea     r8,[16+r8]

+        jnz     NEAR $L$oop_enc1_11

+DB      102,15,56,221,209

+        xor     eax,eax

+        test    rdx,15

+        setnz   al

+        shl     rax,4

+        sub     rdx,rax

+

+        movups  xmm0,XMMWORD[rcx]

+        mov     rbp,rcx

+        mov     eax,r10d

+        shl     r10d,4

+        mov     r9,rdx

+        and     rdx,-16

+

+        movups  xmm1,XMMWORD[16+r10*1+rcx]

+

+        movdqa  xmm8,XMMWORD[$L$xts_magic]

+        movdqa  xmm15,xmm2

+        pshufd  xmm9,xmm2,0x5f

+        pxor    xmm1,xmm0

+        movdqa  xmm14,xmm9

+        paddd   xmm9,xmm9

+        movdqa  xmm10,xmm15

+        psrad   xmm14,31

+        paddq   xmm15,xmm15

+        pand    xmm14,xmm8

+        pxor    xmm10,xmm0

+        pxor    xmm15,xmm14

+        movdqa  xmm14,xmm9

+        paddd   xmm9,xmm9

+        movdqa  xmm11,xmm15

+        psrad   xmm14,31

+        paddq   xmm15,xmm15

+        pand    xmm14,xmm8

+        pxor    xmm11,xmm0

+        pxor    xmm15,xmm14

+        movdqa  xmm14,xmm9

+        paddd   xmm9,xmm9

+        movdqa  xmm12,xmm15

+        psrad   xmm14,31

+        paddq   xmm15,xmm15

+        pand    xmm14,xmm8

+        pxor    xmm12,xmm0

+        pxor    xmm15,xmm14

+        movdqa  xmm14,xmm9

+        paddd   xmm9,xmm9

+        movdqa  xmm13,xmm15

+        psrad   xmm14,31

+        paddq   xmm15,xmm15

+        pand    xmm14,xmm8

+        pxor    xmm13,xmm0

+        pxor    xmm15,xmm14

+        movdqa  xmm14,xmm15

+        psrad   xmm9,31

+        paddq   xmm15,xmm15

+        pand    xmm9,xmm8

+        pxor    xmm14,xmm0

+        pxor    xmm15,xmm9

+        movaps  XMMWORD[96+rsp],xmm1

+

+        sub     rdx,16*6

+        jc      NEAR $L$xts_dec_short

+

+        mov     eax,16+96

+        lea     rcx,[32+r10*1+rbp]

+        sub     rax,r10

+        movups  xmm1,XMMWORD[16+rbp]

+        mov     r10,rax

+        lea     r8,[$L$xts_magic]

+        jmp     NEAR $L$xts_dec_grandloop

+

+ALIGN   32

+$L$xts_dec_grandloop:

+        movdqu  xmm2,XMMWORD[rdi]

+        movdqa  xmm8,xmm0

+        movdqu  xmm3,XMMWORD[16+rdi]

+        pxor    xmm2,xmm10

+        movdqu  xmm4,XMMWORD[32+rdi]

+        pxor    xmm3,xmm11

+DB      102,15,56,222,209

+        movdqu  xmm5,XMMWORD[48+rdi]

+        pxor    xmm4,xmm12

+DB      102,15,56,222,217

+        movdqu  xmm6,XMMWORD[64+rdi]

+        pxor    xmm5,xmm13

+DB      102,15,56,222,225

+        movdqu  xmm7,XMMWORD[80+rdi]

+        pxor    xmm8,xmm15

+        movdqa  xmm9,XMMWORD[96+rsp]

+        pxor    xmm6,xmm14

+DB      102,15,56,222,233

+        movups  xmm0,XMMWORD[32+rbp]

+        lea     rdi,[96+rdi]

+        pxor    xmm7,xmm8

+

+        pxor    xmm10,xmm9

+DB      102,15,56,222,241

+        pxor    xmm11,xmm9

+        movdqa  XMMWORD[rsp],xmm10

+DB      102,15,56,222,249

+        movups  xmm1,XMMWORD[48+rbp]

+        pxor    xmm12,xmm9

+

+DB      102,15,56,222,208

+        pxor    xmm13,xmm9

+        movdqa  XMMWORD[16+rsp],xmm11

+DB      102,15,56,222,216

+        pxor    xmm14,xmm9

+        movdqa  XMMWORD[32+rsp],xmm12

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+        pxor    xmm8,xmm9

+        movdqa  XMMWORD[64+rsp],xmm14

+DB      102,15,56,222,240

+DB      102,15,56,222,248

+        movups  xmm0,XMMWORD[64+rbp]

+        movdqa  XMMWORD[80+rsp],xmm8

+        pshufd  xmm9,xmm15,0x5f

+        jmp     NEAR $L$xts_dec_loop6

+ALIGN   32

+$L$xts_dec_loop6:

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+        movups  xmm1,XMMWORD[((-64))+rax*1+rcx]

+        add     rax,32

+

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+DB      102,15,56,222,240

+DB      102,15,56,222,248

+        movups  xmm0,XMMWORD[((-80))+rax*1+rcx]

+        jnz     NEAR $L$xts_dec_loop6

+

+        movdqa  xmm8,XMMWORD[r8]

+        movdqa  xmm14,xmm9

+        paddd   xmm9,xmm9

+DB      102,15,56,222,209

+        paddq   xmm15,xmm15

+        psrad   xmm14,31

+DB      102,15,56,222,217

+        pand    xmm14,xmm8

+        movups  xmm10,XMMWORD[rbp]

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+DB      102,15,56,222,241

+        pxor    xmm15,xmm14

+        movaps  xmm11,xmm10

+DB      102,15,56,222,249

+        movups  xmm1,XMMWORD[((-64))+rcx]

+

+        movdqa  xmm14,xmm9

+DB      102,15,56,222,208

+        paddd   xmm9,xmm9

+        pxor    xmm10,xmm15

+DB      102,15,56,222,216

+        psrad   xmm14,31

+        paddq   xmm15,xmm15

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+        pand    xmm14,xmm8

+        movaps  xmm12,xmm11

+DB      102,15,56,222,240

+        pxor    xmm15,xmm14

+        movdqa  xmm14,xmm9

+DB      102,15,56,222,248

+        movups  xmm0,XMMWORD[((-48))+rcx]

+

+        paddd   xmm9,xmm9

+DB      102,15,56,222,209

+        pxor    xmm11,xmm15

+        psrad   xmm14,31

+DB      102,15,56,222,217

+        paddq   xmm15,xmm15

+        pand    xmm14,xmm8

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+        movdqa  XMMWORD[48+rsp],xmm13

+        pxor    xmm15,xmm14

+DB      102,15,56,222,241

+        movaps  xmm13,xmm12

+        movdqa  xmm14,xmm9

+DB      102,15,56,222,249

+        movups  xmm1,XMMWORD[((-32))+rcx]

+

+        paddd   xmm9,xmm9

+DB      102,15,56,222,208

+        pxor    xmm12,xmm15

+        psrad   xmm14,31

+DB      102,15,56,222,216

+        paddq   xmm15,xmm15

+        pand    xmm14,xmm8

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+DB      102,15,56,222,240

+        pxor    xmm15,xmm14

+        movaps  xmm14,xmm13

+DB      102,15,56,222,248

+

+        movdqa  xmm0,xmm9

+        paddd   xmm9,xmm9

+DB      102,15,56,222,209

+        pxor    xmm13,xmm15

+        psrad   xmm0,31

+DB      102,15,56,222,217

+        paddq   xmm15,xmm15

+        pand    xmm0,xmm8

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+        pxor    xmm15,xmm0

+        movups  xmm0,XMMWORD[rbp]

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+        movups  xmm1,XMMWORD[16+rbp]

+

+        pxor    xmm14,xmm15

+DB      102,15,56,223,84,36,0

+        psrad   xmm9,31

+        paddq   xmm15,xmm15

+DB      102,15,56,223,92,36,16

+DB      102,15,56,223,100,36,32

+        pand    xmm9,xmm8

+        mov     rax,r10

+DB      102,15,56,223,108,36,48

+DB      102,15,56,223,116,36,64

+DB      102,15,56,223,124,36,80

+        pxor    xmm15,xmm9

+

+        lea     rsi,[96+rsi]

+        movups  XMMWORD[(-96)+rsi],xmm2

+        movups  XMMWORD[(-80)+rsi],xmm3

+        movups  XMMWORD[(-64)+rsi],xmm4

+        movups  XMMWORD[(-48)+rsi],xmm5

+        movups  XMMWORD[(-32)+rsi],xmm6

+        movups  XMMWORD[(-16)+rsi],xmm7

+        sub     rdx,16*6

+        jnc     NEAR $L$xts_dec_grandloop

+

+        mov     eax,16+96

+        sub     eax,r10d

+        mov     rcx,rbp

+        shr     eax,4

+

+$L$xts_dec_short:

+

+        mov     r10d,eax

+        pxor    xmm10,xmm0

+        pxor    xmm11,xmm0

+        add     rdx,16*6

+        jz      NEAR $L$xts_dec_done

+

+        pxor    xmm12,xmm0

+        cmp     rdx,0x20

+        jb      NEAR $L$xts_dec_one

+        pxor    xmm13,xmm0

+        je      NEAR $L$xts_dec_two

+

+        pxor    xmm14,xmm0

+        cmp     rdx,0x40

+        jb      NEAR $L$xts_dec_three

+        je      NEAR $L$xts_dec_four

+

+        movdqu  xmm2,XMMWORD[rdi]

+        movdqu  xmm3,XMMWORD[16+rdi]

+        movdqu  xmm4,XMMWORD[32+rdi]

+        pxor    xmm2,xmm10

+        movdqu  xmm5,XMMWORD[48+rdi]

+        pxor    xmm3,xmm11

+        movdqu  xmm6,XMMWORD[64+rdi]

+        lea     rdi,[80+rdi]

+        pxor    xmm4,xmm12

+        pxor    xmm5,xmm13

+        pxor    xmm6,xmm14

+

+        call    _aesni_decrypt6

+

+        xorps   xmm2,xmm10

+        xorps   xmm3,xmm11

+        xorps   xmm4,xmm12

+        movdqu  XMMWORD[rsi],xmm2

+        xorps   xmm5,xmm13

+        movdqu  XMMWORD[16+rsi],xmm3

+        xorps   xmm6,xmm14

+        movdqu  XMMWORD[32+rsi],xmm4

+        pxor    xmm14,xmm14

+        movdqu  XMMWORD[48+rsi],xmm5

+        pcmpgtd xmm14,xmm15

+        movdqu  XMMWORD[64+rsi],xmm6

+        lea     rsi,[80+rsi]

+        pshufd  xmm11,xmm14,0x13

+        and     r9,15

+        jz      NEAR $L$xts_dec_ret

+

+        movdqa  xmm10,xmm15

+        paddq   xmm15,xmm15

+        pand    xmm11,xmm8

+        pxor    xmm11,xmm15

+        jmp     NEAR $L$xts_dec_done2

+

+ALIGN   16

+$L$xts_dec_one:

+        movups  xmm2,XMMWORD[rdi]

+        lea     rdi,[16+rdi]

+        xorps   xmm2,xmm10

+        movups  xmm0,XMMWORD[rcx]

+        movups  xmm1,XMMWORD[16+rcx]

+        lea     rcx,[32+rcx]

+        xorps   xmm2,xmm0

+$L$oop_dec1_12:

+DB      102,15,56,222,209

+        dec     eax

+        movups  xmm1,XMMWORD[rcx]

+        lea     rcx,[16+rcx]

+        jnz     NEAR $L$oop_dec1_12

+DB      102,15,56,223,209

+        xorps   xmm2,xmm10

+        movdqa  xmm10,xmm11

+        movups  XMMWORD[rsi],xmm2

+        movdqa  xmm11,xmm12

+        lea     rsi,[16+rsi]

+        jmp     NEAR $L$xts_dec_done

+

+ALIGN   16

+$L$xts_dec_two:

+        movups  xmm2,XMMWORD[rdi]

+        movups  xmm3,XMMWORD[16+rdi]

+        lea     rdi,[32+rdi]

+        xorps   xmm2,xmm10

+        xorps   xmm3,xmm11

+

+        call    _aesni_decrypt2

+

+        xorps   xmm2,xmm10

+        movdqa  xmm10,xmm12

+        xorps   xmm3,xmm11

+        movdqa  xmm11,xmm13

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        lea     rsi,[32+rsi]

+        jmp     NEAR $L$xts_dec_done

+

+ALIGN   16

+$L$xts_dec_three:

+        movups  xmm2,XMMWORD[rdi]

+        movups  xmm3,XMMWORD[16+rdi]

+        movups  xmm4,XMMWORD[32+rdi]

+        lea     rdi,[48+rdi]

+        xorps   xmm2,xmm10

+        xorps   xmm3,xmm11

+        xorps   xmm4,xmm12

+

+        call    _aesni_decrypt3

+

+        xorps   xmm2,xmm10

+        movdqa  xmm10,xmm13

+        xorps   xmm3,xmm11

+        movdqa  xmm11,xmm14

+        xorps   xmm4,xmm12

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        lea     rsi,[48+rsi]

+        jmp     NEAR $L$xts_dec_done

+

+ALIGN   16

+$L$xts_dec_four:

+        movups  xmm2,XMMWORD[rdi]

+        movups  xmm3,XMMWORD[16+rdi]

+        movups  xmm4,XMMWORD[32+rdi]

+        xorps   xmm2,xmm10

+        movups  xmm5,XMMWORD[48+rdi]

+        lea     rdi,[64+rdi]

+        xorps   xmm3,xmm11

+        xorps   xmm4,xmm12

+        xorps   xmm5,xmm13

+

+        call    _aesni_decrypt4

+

+        pxor    xmm2,xmm10

+        movdqa  xmm10,xmm14

+        pxor    xmm3,xmm11

+        movdqa  xmm11,xmm15

+        pxor    xmm4,xmm12

+        movdqu  XMMWORD[rsi],xmm2

+        pxor    xmm5,xmm13

+        movdqu  XMMWORD[16+rsi],xmm3

+        movdqu  XMMWORD[32+rsi],xmm4

+        movdqu  XMMWORD[48+rsi],xmm5

+        lea     rsi,[64+rsi]

+        jmp     NEAR $L$xts_dec_done

+

+ALIGN   16

+$L$xts_dec_done:

+        and     r9,15

+        jz      NEAR $L$xts_dec_ret

+$L$xts_dec_done2:

+        mov     rdx,r9

+        mov     rcx,rbp

+        mov     eax,r10d

+

+        movups  xmm2,XMMWORD[rdi]

+        xorps   xmm2,xmm11

+        movups  xmm0,XMMWORD[rcx]

+        movups  xmm1,XMMWORD[16+rcx]

+        lea     rcx,[32+rcx]

+        xorps   xmm2,xmm0

+$L$oop_dec1_13:

+DB      102,15,56,222,209

+        dec     eax

+        movups  xmm1,XMMWORD[rcx]

+        lea     rcx,[16+rcx]

+        jnz     NEAR $L$oop_dec1_13

+DB      102,15,56,223,209

+        xorps   xmm2,xmm11

+        movups  XMMWORD[rsi],xmm2

+

+$L$xts_dec_steal:

+        movzx   eax,BYTE[16+rdi]

+        movzx   ecx,BYTE[rsi]

+        lea     rdi,[1+rdi]

+        mov     BYTE[rsi],al

+        mov     BYTE[16+rsi],cl

+        lea     rsi,[1+rsi]

+        sub     rdx,1

+        jnz     NEAR $L$xts_dec_steal

+

+        sub     rsi,r9

+        mov     rcx,rbp

+        mov     eax,r10d

+

+        movups  xmm2,XMMWORD[rsi]

+        xorps   xmm2,xmm10

+        movups  xmm0,XMMWORD[rcx]

+        movups  xmm1,XMMWORD[16+rcx]

+        lea     rcx,[32+rcx]

+        xorps   xmm2,xmm0

+$L$oop_dec1_14:

+DB      102,15,56,222,209

+        dec     eax

+        movups  xmm1,XMMWORD[rcx]

+        lea     rcx,[16+rcx]

+        jnz     NEAR $L$oop_dec1_14

+DB      102,15,56,223,209

+        xorps   xmm2,xmm10

+        movups  XMMWORD[rsi],xmm2

+

+$L$xts_dec_ret:

+        xorps   xmm0,xmm0

+        pxor    xmm1,xmm1

+        pxor    xmm2,xmm2

+        pxor    xmm3,xmm3

+        pxor    xmm4,xmm4

+        pxor    xmm5,xmm5

+        movaps  xmm6,XMMWORD[((-168))+r11]

+        movaps  XMMWORD[(-168)+r11],xmm0

+        movaps  xmm7,XMMWORD[((-152))+r11]

+        movaps  XMMWORD[(-152)+r11],xmm0

+        movaps  xmm8,XMMWORD[((-136))+r11]

+        movaps  XMMWORD[(-136)+r11],xmm0

+        movaps  xmm9,XMMWORD[((-120))+r11]

+        movaps  XMMWORD[(-120)+r11],xmm0

+        movaps  xmm10,XMMWORD[((-104))+r11]

+        movaps  XMMWORD[(-104)+r11],xmm0

+        movaps  xmm11,XMMWORD[((-88))+r11]

+        movaps  XMMWORD[(-88)+r11],xmm0

+        movaps  xmm12,XMMWORD[((-72))+r11]

+        movaps  XMMWORD[(-72)+r11],xmm0

+        movaps  xmm13,XMMWORD[((-56))+r11]

+        movaps  XMMWORD[(-56)+r11],xmm0

+        movaps  xmm14,XMMWORD[((-40))+r11]

+        movaps  XMMWORD[(-40)+r11],xmm0

+        movaps  xmm15,XMMWORD[((-24))+r11]

+        movaps  XMMWORD[(-24)+r11],xmm0

+        movaps  XMMWORD[rsp],xmm0

+        movaps  XMMWORD[16+rsp],xmm0

+        movaps  XMMWORD[32+rsp],xmm0

+        movaps  XMMWORD[48+rsp],xmm0

+        movaps  XMMWORD[64+rsp],xmm0

+        movaps  XMMWORD[80+rsp],xmm0

+        movaps  XMMWORD[96+rsp],xmm0

+        mov     rbp,QWORD[((-8))+r11]

+

+        lea     rsp,[r11]

+

+$L$xts_dec_epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_aesni_xts_decrypt:

+global  aesni_ocb_encrypt

+

+ALIGN   32

+aesni_ocb_encrypt:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_aesni_ocb_encrypt:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+        mov     rcx,r9

+        mov     r8,QWORD[40+rsp]

+        mov     r9,QWORD[48+rsp]

+

+

+

+        lea     rax,[rsp]

+        push    rbx

+

+        push    rbp

+

+        push    r12

+

+        push    r13

+

+        push    r14

+

+        lea     rsp,[((-160))+rsp]

+        movaps  XMMWORD[rsp],xmm6

+        movaps  XMMWORD[16+rsp],xmm7

+        movaps  XMMWORD[32+rsp],xmm8

+        movaps  XMMWORD[48+rsp],xmm9

+        movaps  XMMWORD[64+rsp],xmm10

+        movaps  XMMWORD[80+rsp],xmm11

+        movaps  XMMWORD[96+rsp],xmm12

+        movaps  XMMWORD[112+rsp],xmm13

+        movaps  XMMWORD[128+rsp],xmm14

+        movaps  XMMWORD[144+rsp],xmm15

+$L$ocb_enc_body:

+        mov     rbx,QWORD[56+rax]

+        mov     rbp,QWORD[((56+8))+rax]

+

+        mov     r10d,DWORD[240+rcx]

+        mov     r11,rcx

+        shl     r10d,4

+        movups  xmm9,XMMWORD[rcx]

+        movups  xmm1,XMMWORD[16+r10*1+rcx]

+

+        movdqu  xmm15,XMMWORD[r9]

+        pxor    xmm9,xmm1

+        pxor    xmm15,xmm1

+

+        mov     eax,16+32

+        lea     rcx,[32+r10*1+r11]

+        movups  xmm1,XMMWORD[16+r11]

+        sub     rax,r10

+        mov     r10,rax

+

+        movdqu  xmm10,XMMWORD[rbx]

+        movdqu  xmm8,XMMWORD[rbp]

+

+        test    r8,1

+        jnz     NEAR $L$ocb_enc_odd

+

+        bsf     r12,r8

+        add     r8,1

+        shl     r12,4

+        movdqu  xmm7,XMMWORD[r12*1+rbx]

+        movdqu  xmm2,XMMWORD[rdi]

+        lea     rdi,[16+rdi]

+

+        call    __ocb_encrypt1

+

+        movdqa  xmm15,xmm7

+        movups  XMMWORD[rsi],xmm2

+        lea     rsi,[16+rsi]

+        sub     rdx,1

+        jz      NEAR $L$ocb_enc_done

+

+$L$ocb_enc_odd:

+        lea     r12,[1+r8]

+        lea     r13,[3+r8]

+        lea     r14,[5+r8]

+        lea     r8,[6+r8]

+        bsf     r12,r12

+        bsf     r13,r13

+        bsf     r14,r14

+        shl     r12,4

+        shl     r13,4

+        shl     r14,4

+

+        sub     rdx,6

+        jc      NEAR $L$ocb_enc_short

+        jmp     NEAR $L$ocb_enc_grandloop

+

+ALIGN   32

+$L$ocb_enc_grandloop:

+        movdqu  xmm2,XMMWORD[rdi]

+        movdqu  xmm3,XMMWORD[16+rdi]

+        movdqu  xmm4,XMMWORD[32+rdi]

+        movdqu  xmm5,XMMWORD[48+rdi]

+        movdqu  xmm6,XMMWORD[64+rdi]

+        movdqu  xmm7,XMMWORD[80+rdi]

+        lea     rdi,[96+rdi]

+

+        call    __ocb_encrypt6

+

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        movups  XMMWORD[64+rsi],xmm6

+        movups  XMMWORD[80+rsi],xmm7

+        lea     rsi,[96+rsi]

+        sub     rdx,6

+        jnc     NEAR $L$ocb_enc_grandloop

+

+$L$ocb_enc_short:

+        add     rdx,6

+        jz      NEAR $L$ocb_enc_done

+

+        movdqu  xmm2,XMMWORD[rdi]

+        cmp     rdx,2

+        jb      NEAR $L$ocb_enc_one

+        movdqu  xmm3,XMMWORD[16+rdi]

+        je      NEAR $L$ocb_enc_two

+

+        movdqu  xmm4,XMMWORD[32+rdi]

+        cmp     rdx,4

+        jb      NEAR $L$ocb_enc_three

+        movdqu  xmm5,XMMWORD[48+rdi]

+        je      NEAR $L$ocb_enc_four

+

+        movdqu  xmm6,XMMWORD[64+rdi]

+        pxor    xmm7,xmm7

+

+        call    __ocb_encrypt6

+

+        movdqa  xmm15,xmm14

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        movups  XMMWORD[64+rsi],xmm6

+

+        jmp     NEAR $L$ocb_enc_done

+

+ALIGN   16

+$L$ocb_enc_one:

+        movdqa  xmm7,xmm10

+

+        call    __ocb_encrypt1

+

+        movdqa  xmm15,xmm7

+        movups  XMMWORD[rsi],xmm2

+        jmp     NEAR $L$ocb_enc_done

+

+ALIGN   16

+$L$ocb_enc_two:

+        pxor    xmm4,xmm4

+        pxor    xmm5,xmm5

+

+        call    __ocb_encrypt4

+

+        movdqa  xmm15,xmm11

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+

+        jmp     NEAR $L$ocb_enc_done

+

+ALIGN   16

+$L$ocb_enc_three:

+        pxor    xmm5,xmm5

+

+        call    __ocb_encrypt4

+

+        movdqa  xmm15,xmm12

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        movups  XMMWORD[32+rsi],xmm4

+

+        jmp     NEAR $L$ocb_enc_done

+

+ALIGN   16

+$L$ocb_enc_four:

+        call    __ocb_encrypt4

+

+        movdqa  xmm15,xmm13

+        movups  XMMWORD[rsi],xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        movups  XMMWORD[48+rsi],xmm5

+

+$L$ocb_enc_done:

+        pxor    xmm15,xmm0

+        movdqu  XMMWORD[rbp],xmm8

+        movdqu  XMMWORD[r9],xmm15

+

+        xorps   xmm0,xmm0

+        pxor    xmm1,xmm1

+        pxor    xmm2,xmm2

+        pxor    xmm3,xmm3

+        pxor    xmm4,xmm4

+        pxor    xmm5,xmm5

+        movaps  xmm6,XMMWORD[rsp]

+        movaps  XMMWORD[rsp],xmm0

+        movaps  xmm7,XMMWORD[16+rsp]

+        movaps  XMMWORD[16+rsp],xmm0

+        movaps  xmm8,XMMWORD[32+rsp]

+        movaps  XMMWORD[32+rsp],xmm0

+        movaps  xmm9,XMMWORD[48+rsp]

+        movaps  XMMWORD[48+rsp],xmm0

+        movaps  xmm10,XMMWORD[64+rsp]

+        movaps  XMMWORD[64+rsp],xmm0

+        movaps  xmm11,XMMWORD[80+rsp]

+        movaps  XMMWORD[80+rsp],xmm0

+        movaps  xmm12,XMMWORD[96+rsp]

+        movaps  XMMWORD[96+rsp],xmm0

+        movaps  xmm13,XMMWORD[112+rsp]

+        movaps  XMMWORD[112+rsp],xmm0

+        movaps  xmm14,XMMWORD[128+rsp]

+        movaps  XMMWORD[128+rsp],xmm0

+        movaps  xmm15,XMMWORD[144+rsp]

+        movaps  XMMWORD[144+rsp],xmm0

+        lea     rax,[((160+40))+rsp]

+$L$ocb_enc_pop:

+        mov     r14,QWORD[((-40))+rax]

+

+        mov     r13,QWORD[((-32))+rax]

+

+        mov     r12,QWORD[((-24))+rax]

+

+        mov     rbp,QWORD[((-16))+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+

+        lea     rsp,[rax]

+

+$L$ocb_enc_epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_aesni_ocb_encrypt:

+

+

+ALIGN   32

+__ocb_encrypt6:

+

+        pxor    xmm15,xmm9

+        movdqu  xmm11,XMMWORD[r12*1+rbx]

+        movdqa  xmm12,xmm10

+        movdqu  xmm13,XMMWORD[r13*1+rbx]

+        movdqa  xmm14,xmm10

+        pxor    xmm10,xmm15

+        movdqu  xmm15,XMMWORD[r14*1+rbx]

+        pxor    xmm11,xmm10

+        pxor    xmm8,xmm2

+        pxor    xmm2,xmm10

+        pxor    xmm12,xmm11

+        pxor    xmm8,xmm3

+        pxor    xmm3,xmm11

+        pxor    xmm13,xmm12

+        pxor    xmm8,xmm4

+        pxor    xmm4,xmm12

+        pxor    xmm14,xmm13

+        pxor    xmm8,xmm5

+        pxor    xmm5,xmm13

+        pxor    xmm15,xmm14

+        pxor    xmm8,xmm6

+        pxor    xmm6,xmm14

+        pxor    xmm8,xmm7

+        pxor    xmm7,xmm15

+        movups  xmm0,XMMWORD[32+r11]

+

+        lea     r12,[1+r8]

+        lea     r13,[3+r8]

+        lea     r14,[5+r8]

+        add     r8,6

+        pxor    xmm10,xmm9

+        bsf     r12,r12

+        bsf     r13,r13

+        bsf     r14,r14

+

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        pxor    xmm11,xmm9

+        pxor    xmm12,xmm9

+DB      102,15,56,220,241

+        pxor    xmm13,xmm9

+        pxor    xmm14,xmm9

+DB      102,15,56,220,249

+        movups  xmm1,XMMWORD[48+r11]

+        pxor    xmm15,xmm9

+

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+DB      102,15,56,220,240

+DB      102,15,56,220,248

+        movups  xmm0,XMMWORD[64+r11]

+        shl     r12,4

+        shl     r13,4

+        jmp     NEAR $L$ocb_enc_loop6

+

+ALIGN   32

+$L$ocb_enc_loop6:

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+DB      102,15,56,220,240

+DB      102,15,56,220,248

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$ocb_enc_loop6

+

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+DB      102,15,56,220,241

+DB      102,15,56,220,249

+        movups  xmm1,XMMWORD[16+r11]

+        shl     r14,4

+

+DB      102,65,15,56,221,210

+        movdqu  xmm10,XMMWORD[rbx]

+        mov     rax,r10

+DB      102,65,15,56,221,219

+DB      102,65,15,56,221,228

+DB      102,65,15,56,221,237

+DB      102,65,15,56,221,246

+DB      102,65,15,56,221,255

+        DB      0F3h,0C3h               ;repret

+

+

+

+

+ALIGN   32

+__ocb_encrypt4:

+

+        pxor    xmm15,xmm9

+        movdqu  xmm11,XMMWORD[r12*1+rbx]

+        movdqa  xmm12,xmm10

+        movdqu  xmm13,XMMWORD[r13*1+rbx]

+        pxor    xmm10,xmm15

+        pxor    xmm11,xmm10

+        pxor    xmm8,xmm2

+        pxor    xmm2,xmm10

+        pxor    xmm12,xmm11

+        pxor    xmm8,xmm3

+        pxor    xmm3,xmm11

+        pxor    xmm13,xmm12

+        pxor    xmm8,xmm4

+        pxor    xmm4,xmm12

+        pxor    xmm8,xmm5

+        pxor    xmm5,xmm13

+        movups  xmm0,XMMWORD[32+r11]

+

+        pxor    xmm10,xmm9

+        pxor    xmm11,xmm9

+        pxor    xmm12,xmm9

+        pxor    xmm13,xmm9

+

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        movups  xmm1,XMMWORD[48+r11]

+

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+        movups  xmm0,XMMWORD[64+r11]

+        jmp     NEAR $L$ocb_enc_loop4

+

+ALIGN   32

+$L$ocb_enc_loop4:

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+

+DB      102,15,56,220,208

+DB      102,15,56,220,216

+DB      102,15,56,220,224

+DB      102,15,56,220,232

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$ocb_enc_loop4

+

+DB      102,15,56,220,209

+DB      102,15,56,220,217

+DB      102,15,56,220,225

+DB      102,15,56,220,233

+        movups  xmm1,XMMWORD[16+r11]

+        mov     rax,r10

+

+DB      102,65,15,56,221,210

+DB      102,65,15,56,221,219

+DB      102,65,15,56,221,228

+DB      102,65,15,56,221,237

+        DB      0F3h,0C3h               ;repret

+

+

+

+

+ALIGN   32

+__ocb_encrypt1:

+

+        pxor    xmm7,xmm15

+        pxor    xmm7,xmm9

+        pxor    xmm8,xmm2

+        pxor    xmm2,xmm7

+        movups  xmm0,XMMWORD[32+r11]

+

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[48+r11]

+        pxor    xmm7,xmm9

+

+DB      102,15,56,220,208

+        movups  xmm0,XMMWORD[64+r11]

+        jmp     NEAR $L$ocb_enc_loop1

+

+ALIGN   32

+$L$ocb_enc_loop1:

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+

+DB      102,15,56,220,208

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$ocb_enc_loop1

+

+DB      102,15,56,220,209

+        movups  xmm1,XMMWORD[16+r11]

+        mov     rax,r10

+

+DB      102,15,56,221,215

+        DB      0F3h,0C3h               ;repret

+

+

+

+global  aesni_ocb_decrypt

+

+ALIGN   32

+aesni_ocb_decrypt:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_aesni_ocb_decrypt:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+        mov     rcx,r9

+        mov     r8,QWORD[40+rsp]

+        mov     r9,QWORD[48+rsp]

+

+

+

+        lea     rax,[rsp]

+        push    rbx

+

+        push    rbp

+

+        push    r12

+

+        push    r13

+

+        push    r14

+

+        lea     rsp,[((-160))+rsp]

+        movaps  XMMWORD[rsp],xmm6

+        movaps  XMMWORD[16+rsp],xmm7

+        movaps  XMMWORD[32+rsp],xmm8

+        movaps  XMMWORD[48+rsp],xmm9

+        movaps  XMMWORD[64+rsp],xmm10

+        movaps  XMMWORD[80+rsp],xmm11

+        movaps  XMMWORD[96+rsp],xmm12

+        movaps  XMMWORD[112+rsp],xmm13

+        movaps  XMMWORD[128+rsp],xmm14

+        movaps  XMMWORD[144+rsp],xmm15

+$L$ocb_dec_body:

+        mov     rbx,QWORD[56+rax]

+        mov     rbp,QWORD[((56+8))+rax]

+

+        mov     r10d,DWORD[240+rcx]

+        mov     r11,rcx

+        shl     r10d,4

+        movups  xmm9,XMMWORD[rcx]

+        movups  xmm1,XMMWORD[16+r10*1+rcx]

+

+        movdqu  xmm15,XMMWORD[r9]

+        pxor    xmm9,xmm1

+        pxor    xmm15,xmm1

+

+        mov     eax,16+32

+        lea     rcx,[32+r10*1+r11]

+        movups  xmm1,XMMWORD[16+r11]

+        sub     rax,r10

+        mov     r10,rax

+

+        movdqu  xmm10,XMMWORD[rbx]

+        movdqu  xmm8,XMMWORD[rbp]

+

+        test    r8,1

+        jnz     NEAR $L$ocb_dec_odd

+

+        bsf     r12,r8

+        add     r8,1

+        shl     r12,4

+        movdqu  xmm7,XMMWORD[r12*1+rbx]

+        movdqu  xmm2,XMMWORD[rdi]

+        lea     rdi,[16+rdi]

+

+        call    __ocb_decrypt1

+

+        movdqa  xmm15,xmm7

+        movups  XMMWORD[rsi],xmm2

+        xorps   xmm8,xmm2

+        lea     rsi,[16+rsi]

+        sub     rdx,1

+        jz      NEAR $L$ocb_dec_done

+

+$L$ocb_dec_odd:

+        lea     r12,[1+r8]

+        lea     r13,[3+r8]

+        lea     r14,[5+r8]

+        lea     r8,[6+r8]

+        bsf     r12,r12

+        bsf     r13,r13

+        bsf     r14,r14

+        shl     r12,4

+        shl     r13,4

+        shl     r14,4

+

+        sub     rdx,6

+        jc      NEAR $L$ocb_dec_short

+        jmp     NEAR $L$ocb_dec_grandloop

+

+ALIGN   32

+$L$ocb_dec_grandloop:

+        movdqu  xmm2,XMMWORD[rdi]

+        movdqu  xmm3,XMMWORD[16+rdi]

+        movdqu  xmm4,XMMWORD[32+rdi]

+        movdqu  xmm5,XMMWORD[48+rdi]

+        movdqu  xmm6,XMMWORD[64+rdi]

+        movdqu  xmm7,XMMWORD[80+rdi]

+        lea     rdi,[96+rdi]

+

+        call    __ocb_decrypt6

+

+        movups  XMMWORD[rsi],xmm2

+        pxor    xmm8,xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        pxor    xmm8,xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        pxor    xmm8,xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        pxor    xmm8,xmm5

+        movups  XMMWORD[64+rsi],xmm6

+        pxor    xmm8,xmm6

+        movups  XMMWORD[80+rsi],xmm7

+        pxor    xmm8,xmm7

+        lea     rsi,[96+rsi]

+        sub     rdx,6

+        jnc     NEAR $L$ocb_dec_grandloop

+

+$L$ocb_dec_short:

+        add     rdx,6

+        jz      NEAR $L$ocb_dec_done

+

+        movdqu  xmm2,XMMWORD[rdi]

+        cmp     rdx,2

+        jb      NEAR $L$ocb_dec_one

+        movdqu  xmm3,XMMWORD[16+rdi]

+        je      NEAR $L$ocb_dec_two

+

+        movdqu  xmm4,XMMWORD[32+rdi]

+        cmp     rdx,4

+        jb      NEAR $L$ocb_dec_three

+        movdqu  xmm5,XMMWORD[48+rdi]

+        je      NEAR $L$ocb_dec_four

+

+        movdqu  xmm6,XMMWORD[64+rdi]

+        pxor    xmm7,xmm7

+

+        call    __ocb_decrypt6

+

+        movdqa  xmm15,xmm14

+        movups  XMMWORD[rsi],xmm2

+        pxor    xmm8,xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        pxor    xmm8,xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        pxor    xmm8,xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        pxor    xmm8,xmm5

+        movups  XMMWORD[64+rsi],xmm6

+        pxor    xmm8,xmm6

+

+        jmp     NEAR $L$ocb_dec_done

+

+ALIGN   16

+$L$ocb_dec_one:

+        movdqa  xmm7,xmm10

+

+        call    __ocb_decrypt1

+

+        movdqa  xmm15,xmm7

+        movups  XMMWORD[rsi],xmm2

+        xorps   xmm8,xmm2

+        jmp     NEAR $L$ocb_dec_done

+

+ALIGN   16

+$L$ocb_dec_two:

+        pxor    xmm4,xmm4

+        pxor    xmm5,xmm5

+

+        call    __ocb_decrypt4

+

+        movdqa  xmm15,xmm11

+        movups  XMMWORD[rsi],xmm2

+        xorps   xmm8,xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        xorps   xmm8,xmm3

+

+        jmp     NEAR $L$ocb_dec_done

+

+ALIGN   16

+$L$ocb_dec_three:

+        pxor    xmm5,xmm5

+

+        call    __ocb_decrypt4

+

+        movdqa  xmm15,xmm12

+        movups  XMMWORD[rsi],xmm2

+        xorps   xmm8,xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        xorps   xmm8,xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        xorps   xmm8,xmm4

+

+        jmp     NEAR $L$ocb_dec_done

+

+ALIGN   16

+$L$ocb_dec_four:

+        call    __ocb_decrypt4

+

+        movdqa  xmm15,xmm13

+        movups  XMMWORD[rsi],xmm2

+        pxor    xmm8,xmm2

+        movups  XMMWORD[16+rsi],xmm3

+        pxor    xmm8,xmm3

+        movups  XMMWORD[32+rsi],xmm4

+        pxor    xmm8,xmm4

+        movups  XMMWORD[48+rsi],xmm5

+        pxor    xmm8,xmm5

+

+$L$ocb_dec_done:

+        pxor    xmm15,xmm0

+        movdqu  XMMWORD[rbp],xmm8

+        movdqu  XMMWORD[r9],xmm15

+

+        xorps   xmm0,xmm0

+        pxor    xmm1,xmm1

+        pxor    xmm2,xmm2

+        pxor    xmm3,xmm3

+        pxor    xmm4,xmm4

+        pxor    xmm5,xmm5

+        movaps  xmm6,XMMWORD[rsp]

+        movaps  XMMWORD[rsp],xmm0

+        movaps  xmm7,XMMWORD[16+rsp]

+        movaps  XMMWORD[16+rsp],xmm0

+        movaps  xmm8,XMMWORD[32+rsp]

+        movaps  XMMWORD[32+rsp],xmm0

+        movaps  xmm9,XMMWORD[48+rsp]

+        movaps  XMMWORD[48+rsp],xmm0

+        movaps  xmm10,XMMWORD[64+rsp]

+        movaps  XMMWORD[64+rsp],xmm0

+        movaps  xmm11,XMMWORD[80+rsp]

+        movaps  XMMWORD[80+rsp],xmm0

+        movaps  xmm12,XMMWORD[96+rsp]

+        movaps  XMMWORD[96+rsp],xmm0

+        movaps  xmm13,XMMWORD[112+rsp]

+        movaps  XMMWORD[112+rsp],xmm0

+        movaps  xmm14,XMMWORD[128+rsp]

+        movaps  XMMWORD[128+rsp],xmm0

+        movaps  xmm15,XMMWORD[144+rsp]

+        movaps  XMMWORD[144+rsp],xmm0

+        lea     rax,[((160+40))+rsp]

+$L$ocb_dec_pop:

+        mov     r14,QWORD[((-40))+rax]

+

+        mov     r13,QWORD[((-32))+rax]

+

+        mov     r12,QWORD[((-24))+rax]

+

+        mov     rbp,QWORD[((-16))+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+

+        lea     rsp,[rax]

+

+$L$ocb_dec_epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_aesni_ocb_decrypt:

+

+

+ALIGN   32

+__ocb_decrypt6:

+

+        pxor    xmm15,xmm9

+        movdqu  xmm11,XMMWORD[r12*1+rbx]

+        movdqa  xmm12,xmm10

+        movdqu  xmm13,XMMWORD[r13*1+rbx]

+        movdqa  xmm14,xmm10

+        pxor    xmm10,xmm15

+        movdqu  xmm15,XMMWORD[r14*1+rbx]

+        pxor    xmm11,xmm10

+        pxor    xmm2,xmm10

+        pxor    xmm12,xmm11

+        pxor    xmm3,xmm11

+        pxor    xmm13,xmm12

+        pxor    xmm4,xmm12

+        pxor    xmm14,xmm13

+        pxor    xmm5,xmm13

+        pxor    xmm15,xmm14

+        pxor    xmm6,xmm14

+        pxor    xmm7,xmm15

+        movups  xmm0,XMMWORD[32+r11]

+

+        lea     r12,[1+r8]

+        lea     r13,[3+r8]

+        lea     r14,[5+r8]

+        add     r8,6

+        pxor    xmm10,xmm9

+        bsf     r12,r12

+        bsf     r13,r13

+        bsf     r14,r14

+

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+        pxor    xmm11,xmm9

+        pxor    xmm12,xmm9

+DB      102,15,56,222,241

+        pxor    xmm13,xmm9

+        pxor    xmm14,xmm9

+DB      102,15,56,222,249

+        movups  xmm1,XMMWORD[48+r11]

+        pxor    xmm15,xmm9

+

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+DB      102,15,56,222,240

+DB      102,15,56,222,248

+        movups  xmm0,XMMWORD[64+r11]

+        shl     r12,4

+        shl     r13,4

+        jmp     NEAR $L$ocb_dec_loop6

+

+ALIGN   32

+$L$ocb_dec_loop6:

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+DB      102,15,56,222,240

+DB      102,15,56,222,248

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$ocb_dec_loop6

+

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+        movups  xmm1,XMMWORD[16+r11]

+        shl     r14,4

+

+DB      102,65,15,56,223,210

+        movdqu  xmm10,XMMWORD[rbx]

+        mov     rax,r10

+DB      102,65,15,56,223,219

+DB      102,65,15,56,223,228

+DB      102,65,15,56,223,237

+DB      102,65,15,56,223,246

+DB      102,65,15,56,223,255

+        DB      0F3h,0C3h               ;repret

+

+

+

+

+ALIGN   32

+__ocb_decrypt4:

+

+        pxor    xmm15,xmm9

+        movdqu  xmm11,XMMWORD[r12*1+rbx]

+        movdqa  xmm12,xmm10

+        movdqu  xmm13,XMMWORD[r13*1+rbx]

+        pxor    xmm10,xmm15

+        pxor    xmm11,xmm10

+        pxor    xmm2,xmm10

+        pxor    xmm12,xmm11

+        pxor    xmm3,xmm11

+        pxor    xmm13,xmm12

+        pxor    xmm4,xmm12

+        pxor    xmm5,xmm13

+        movups  xmm0,XMMWORD[32+r11]

+

+        pxor    xmm10,xmm9

+        pxor    xmm11,xmm9

+        pxor    xmm12,xmm9

+        pxor    xmm13,xmm9

+

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+        movups  xmm1,XMMWORD[48+r11]

+

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+        movups  xmm0,XMMWORD[64+r11]

+        jmp     NEAR $L$ocb_dec_loop4

+

+ALIGN   32

+$L$ocb_dec_loop4:

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$ocb_dec_loop4

+

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+        movups  xmm1,XMMWORD[16+r11]

+        mov     rax,r10

+

+DB      102,65,15,56,223,210

+DB      102,65,15,56,223,219

+DB      102,65,15,56,223,228

+DB      102,65,15,56,223,237

+        DB      0F3h,0C3h               ;repret

+

+

+

+

+ALIGN   32

+__ocb_decrypt1:

+

+        pxor    xmm7,xmm15

+        pxor    xmm7,xmm9

+        pxor    xmm2,xmm7

+        movups  xmm0,XMMWORD[32+r11]

+

+DB      102,15,56,222,209

+        movups  xmm1,XMMWORD[48+r11]

+        pxor    xmm7,xmm9

+

+DB      102,15,56,222,208

+        movups  xmm0,XMMWORD[64+r11]

+        jmp     NEAR $L$ocb_dec_loop1

+

+ALIGN   32

+$L$ocb_dec_loop1:

+DB      102,15,56,222,209

+        movups  xmm1,XMMWORD[rax*1+rcx]

+        add     rax,32

+

+DB      102,15,56,222,208

+        movups  xmm0,XMMWORD[((-16))+rax*1+rcx]

+        jnz     NEAR $L$ocb_dec_loop1

+

+DB      102,15,56,222,209

+        movups  xmm1,XMMWORD[16+r11]

+        mov     rax,r10

+

+DB      102,15,56,223,215

+        DB      0F3h,0C3h               ;repret

+

+

+global  aesni_cbc_encrypt

+

+ALIGN   16

+aesni_cbc_encrypt:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_aesni_cbc_encrypt:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+        mov     rcx,r9

+        mov     r8,QWORD[40+rsp]

+        mov     r9,QWORD[48+rsp]

+

+

+

+        test    rdx,rdx

+        jz      NEAR $L$cbc_ret

+

+        mov     r10d,DWORD[240+rcx]

+        mov     r11,rcx

+        test    r9d,r9d

+        jz      NEAR $L$cbc_decrypt

+

+        movups  xmm2,XMMWORD[r8]

+        mov     eax,r10d

+        cmp     rdx,16

+        jb      NEAR $L$cbc_enc_tail

+        sub     rdx,16

+        jmp     NEAR $L$cbc_enc_loop

+ALIGN   16

+$L$cbc_enc_loop:

+        movups  xmm3,XMMWORD[rdi]

+        lea     rdi,[16+rdi]

+

+        movups  xmm0,XMMWORD[rcx]

+        movups  xmm1,XMMWORD[16+rcx]

+        xorps   xmm3,xmm0

+        lea     rcx,[32+rcx]

+        xorps   xmm2,xmm3

+$L$oop_enc1_15:

+DB      102,15,56,220,209

+        dec     eax

+        movups  xmm1,XMMWORD[rcx]

+        lea     rcx,[16+rcx]

+        jnz     NEAR $L$oop_enc1_15

+DB      102,15,56,221,209

+        mov     eax,r10d

+        mov     rcx,r11

+        movups  XMMWORD[rsi],xmm2

+        lea     rsi,[16+rsi]

+        sub     rdx,16

+        jnc     NEAR $L$cbc_enc_loop

+        add     rdx,16

+        jnz     NEAR $L$cbc_enc_tail

+        pxor    xmm0,xmm0

+        pxor    xmm1,xmm1

+        movups  XMMWORD[r8],xmm2

+        pxor    xmm2,xmm2

+        pxor    xmm3,xmm3

+        jmp     NEAR $L$cbc_ret

+

+$L$cbc_enc_tail:

+        mov     rcx,rdx

+        xchg    rsi,rdi

+        DD      0x9066A4F3

+        mov     ecx,16

+        sub     rcx,rdx

+        xor     eax,eax

+        DD      0x9066AAF3

+        lea     rdi,[((-16))+rdi]

+        mov     eax,r10d

+        mov     rsi,rdi

+        mov     rcx,r11

+        xor     rdx,rdx

+        jmp     NEAR $L$cbc_enc_loop

+

+ALIGN   16

+$L$cbc_decrypt:

+        cmp     rdx,16

+        jne     NEAR $L$cbc_decrypt_bulk

+

+

+

+        movdqu  xmm2,XMMWORD[rdi]

+        movdqu  xmm3,XMMWORD[r8]

+        movdqa  xmm4,xmm2

+        movups  xmm0,XMMWORD[rcx]

+        movups  xmm1,XMMWORD[16+rcx]

+        lea     rcx,[32+rcx]

+        xorps   xmm2,xmm0

+$L$oop_dec1_16:

+DB      102,15,56,222,209

+        dec     r10d

+        movups  xmm1,XMMWORD[rcx]

+        lea     rcx,[16+rcx]

+        jnz     NEAR $L$oop_dec1_16

+DB      102,15,56,223,209

+        pxor    xmm0,xmm0

+        pxor    xmm1,xmm1

+        movdqu  XMMWORD[r8],xmm4

+        xorps   xmm2,xmm3

+        pxor    xmm3,xmm3

+        movups  XMMWORD[rsi],xmm2

+        pxor    xmm2,xmm2

+        jmp     NEAR $L$cbc_ret

+ALIGN   16

+$L$cbc_decrypt_bulk:

+        lea     r11,[rsp]

+

+        push    rbp

+

+        sub     rsp,176

+        and     rsp,-16

+        movaps  XMMWORD[16+rsp],xmm6

+        movaps  XMMWORD[32+rsp],xmm7

+        movaps  XMMWORD[48+rsp],xmm8

+        movaps  XMMWORD[64+rsp],xmm9

+        movaps  XMMWORD[80+rsp],xmm10

+        movaps  XMMWORD[96+rsp],xmm11

+        movaps  XMMWORD[112+rsp],xmm12

+        movaps  XMMWORD[128+rsp],xmm13

+        movaps  XMMWORD[144+rsp],xmm14

+        movaps  XMMWORD[160+rsp],xmm15

+$L$cbc_decrypt_body:

+        mov     rbp,rcx

+        movups  xmm10,XMMWORD[r8]

+        mov     eax,r10d

+        cmp     rdx,0x50

+        jbe     NEAR $L$cbc_dec_tail

+

+        movups  xmm0,XMMWORD[rcx]

+        movdqu  xmm2,XMMWORD[rdi]

+        movdqu  xmm3,XMMWORD[16+rdi]

+        movdqa  xmm11,xmm2

+        movdqu  xmm4,XMMWORD[32+rdi]

+        movdqa  xmm12,xmm3

+        movdqu  xmm5,XMMWORD[48+rdi]

+        movdqa  xmm13,xmm4

+        movdqu  xmm6,XMMWORD[64+rdi]

+        movdqa  xmm14,xmm5

+        movdqu  xmm7,XMMWORD[80+rdi]

+        movdqa  xmm15,xmm6

+        mov     r9d,DWORD[((OPENSSL_ia32cap_P+4))]

+        cmp     rdx,0x70

+        jbe     NEAR $L$cbc_dec_six_or_seven

+

+        and     r9d,71303168

+        sub     rdx,0x50

+        cmp     r9d,4194304

+        je      NEAR $L$cbc_dec_loop6_enter

+        sub     rdx,0x20

+        lea     rcx,[112+rcx]

+        jmp     NEAR $L$cbc_dec_loop8_enter

+ALIGN   16

+$L$cbc_dec_loop8:

+        movups  XMMWORD[rsi],xmm9

+        lea     rsi,[16+rsi]

+$L$cbc_dec_loop8_enter:

+        movdqu  xmm8,XMMWORD[96+rdi]

+        pxor    xmm2,xmm0

+        movdqu  xmm9,XMMWORD[112+rdi]

+        pxor    xmm3,xmm0

+        movups  xmm1,XMMWORD[((16-112))+rcx]

+        pxor    xmm4,xmm0

+        mov     rbp,-1

+        cmp     rdx,0x70

+        pxor    xmm5,xmm0

+        pxor    xmm6,xmm0

+        pxor    xmm7,xmm0

+        pxor    xmm8,xmm0

+

+DB      102,15,56,222,209

+        pxor    xmm9,xmm0

+        movups  xmm0,XMMWORD[((32-112))+rcx]

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+DB      102,68,15,56,222,193

+        adc     rbp,0

+        and     rbp,128

+DB      102,68,15,56,222,201

+        add     rbp,rdi

+        movups  xmm1,XMMWORD[((48-112))+rcx]

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+DB      102,15,56,222,240

+DB      102,15,56,222,248

+DB      102,68,15,56,222,192

+DB      102,68,15,56,222,200

+        movups  xmm0,XMMWORD[((64-112))+rcx]

+        nop

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+DB      102,68,15,56,222,193

+DB      102,68,15,56,222,201

+        movups  xmm1,XMMWORD[((80-112))+rcx]

+        nop

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+DB      102,15,56,222,240

+DB      102,15,56,222,248

+DB      102,68,15,56,222,192

+DB      102,68,15,56,222,200

+        movups  xmm0,XMMWORD[((96-112))+rcx]

+        nop

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+DB      102,68,15,56,222,193

+DB      102,68,15,56,222,201

+        movups  xmm1,XMMWORD[((112-112))+rcx]

+        nop

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+DB      102,15,56,222,240

+DB      102,15,56,222,248

+DB      102,68,15,56,222,192

+DB      102,68,15,56,222,200

+        movups  xmm0,XMMWORD[((128-112))+rcx]

+        nop

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+DB      102,68,15,56,222,193

+DB      102,68,15,56,222,201

+        movups  xmm1,XMMWORD[((144-112))+rcx]

+        cmp     eax,11

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+DB      102,15,56,222,240

+DB      102,15,56,222,248

+DB      102,68,15,56,222,192

+DB      102,68,15,56,222,200

+        movups  xmm0,XMMWORD[((160-112))+rcx]

+        jb      NEAR $L$cbc_dec_done

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+DB      102,68,15,56,222,193

+DB      102,68,15,56,222,201

+        movups  xmm1,XMMWORD[((176-112))+rcx]

+        nop

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+DB      102,15,56,222,240

+DB      102,15,56,222,248

+DB      102,68,15,56,222,192

+DB      102,68,15,56,222,200

+        movups  xmm0,XMMWORD[((192-112))+rcx]

+        je      NEAR $L$cbc_dec_done

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+DB      102,68,15,56,222,193

+DB      102,68,15,56,222,201

+        movups  xmm1,XMMWORD[((208-112))+rcx]

+        nop

+DB      102,15,56,222,208

+DB      102,15,56,222,216

+DB      102,15,56,222,224

+DB      102,15,56,222,232

+DB      102,15,56,222,240

+DB      102,15,56,222,248

+DB      102,68,15,56,222,192

+DB      102,68,15,56,222,200

+        movups  xmm0,XMMWORD[((224-112))+rcx]

+        jmp     NEAR $L$cbc_dec_done

+ALIGN   16

+$L$cbc_dec_done:

+DB      102,15,56,222,209

+DB      102,15,56,222,217

+        pxor    xmm10,xmm0

+        pxor    xmm11,xmm0

+DB      102,15,56,222,225

+DB      102,15,56,222,233

+        pxor    xmm12,xmm0

+        pxor    xmm13,xmm0

+DB      102,15,56,222,241

+DB      102,15,56,222,249

+        pxor    xmm14,xmm0

+        pxor    xmm15,xmm0

+DB      102,68,15,56,222,193

+DB      102,68,15,56,222,201

+        movdqu  xmm1,XMMWORD[80+rdi]

+

+DB      102,65,15,56,223,210

+        movdqu  xmm10,XMMWORD[96+rdi]

+        pxor    xmm1,xmm0

+DB      102,65,15,56,223,219

+        pxor    xmm10,xmm0

+        movdqu  xmm0,XMMWORD[112+rdi]

+DB      102,65,15,56,223,228

+        lea     rdi,[128+rdi]

+        movdqu  xmm11,XMMWORD[rbp]

+DB      102,65,15,56,223,237

+DB      102,65,15,56,223,246

+        movdqu  xmm12,XMMWORD[16+rbp]

+        movdqu  xmm13,XMMWORD[32+rbp]

+DB      102,65,15,56,223,255

+DB      102,68,15,56,223,193

+        movdqu  xmm14,XMMWORD[48+rbp]

+        movdqu  xmm15,XMMWORD[64+rbp]

+DB      102,69,15,56,223,202

+        movdqa  xmm10,xmm0

+        movdqu  xmm1,XMMWORD[80+rbp]

+        movups  xmm0,XMMWORD[((-112))+rcx]

+

+        movups  XMMWORD[rsi],xmm2

+        movdqa  xmm2,xmm11

+        movups  XMMWORD[16+rsi],xmm3

+        movdqa  xmm3,xmm12

+        movups  XMMWORD[32+rsi],xmm4

+        movdqa  xmm4,xmm13

+        movups  XMMWORD[48+rsi],xmm5

+        movdqa  xmm5,xmm14

+        movups  XMMWORD[64+rsi],xmm6

+        movdqa  xmm6,xmm15

+        movups  XMMWORD[80+rsi],xmm7

+        movdqa  xmm7,xmm1

+        movups  XMMWORD[96+rsi],xmm8

+        lea     rsi,[112+rsi]

+

+        sub     rdx,0x80

+        ja      NEAR $L$cbc_dec_loop8

+

+        movaps  xmm2,xmm9

+        lea     rcx,[((-112))+rcx]

+        add     rdx,0x70

+        jle     NEAR $L$cbc_dec_clear_tail_collected

+        movups  XMMWORD[rsi],xmm9

+        lea     rsi,[16+rsi]

+        cmp     rdx,0x50

+        jbe     NEAR $L$cbc_dec_tail

+

+        movaps  xmm2,xmm11

+$L$cbc_dec_six_or_seven:

+        cmp     rdx,0x60

+        ja      NEAR $L$cbc_dec_seven

+

+        movaps  xmm8,xmm7

+        call    _aesni_decrypt6

+        pxor    xmm2,xmm10

+        movaps  xmm10,xmm8

+        pxor    xmm3,xmm11

+        movdqu  XMMWORD[rsi],xmm2

+        pxor    xmm4,xmm12

+        movdqu  XMMWORD[16+rsi],xmm3

+        pxor    xmm3,xmm3

+        pxor    xmm5,xmm13

+        movdqu  XMMWORD[32+rsi],xmm4

+        pxor    xmm4,xmm4

+        pxor    xmm6,xmm14

+        movdqu  XMMWORD[48+rsi],xmm5

+        pxor    xmm5,xmm5

+        pxor    xmm7,xmm15

+        movdqu  XMMWORD[64+rsi],xmm6

+        pxor    xmm6,xmm6

+        lea     rsi,[80+rsi]

+        movdqa  xmm2,xmm7

+        pxor    xmm7,xmm7

+        jmp     NEAR $L$cbc_dec_tail_collected

+

+ALIGN   16

+$L$cbc_dec_seven:

+        movups  xmm8,XMMWORD[96+rdi]

+        xorps   xmm9,xmm9

+        call    _aesni_decrypt8

+        movups  xmm9,XMMWORD[80+rdi]

+        pxor    xmm2,xmm10

+        movups  xmm10,XMMWORD[96+rdi]

+        pxor    xmm3,xmm11

+        movdqu  XMMWORD[rsi],xmm2

+        pxor    xmm4,xmm12

+        movdqu  XMMWORD[16+rsi],xmm3

+        pxor    xmm3,xmm3

+        pxor    xmm5,xmm13

+        movdqu  XMMWORD[32+rsi],xmm4

+        pxor    xmm4,xmm4

+        pxor    xmm6,xmm14

+        movdqu  XMMWORD[48+rsi],xmm5

+        pxor    xmm5,xmm5

+        pxor    xmm7,xmm15

+        movdqu  XMMWORD[64+rsi],xmm6

+        pxor    xmm6,xmm6

+        pxor    xmm8,xmm9

+        movdqu  XMMWORD[80+rsi],xmm7

+        pxor    xmm7,xmm7

+        lea     rsi,[96+rsi]

+        movdqa  xmm2,xmm8

+        pxor    xmm8,xmm8

+        pxor    xmm9,xmm9

+        jmp     NEAR $L$cbc_dec_tail_collected

+

+ALIGN   16

+$L$cbc_dec_loop6:

+        movups  XMMWORD[rsi],xmm7

+        lea     rsi,[16+rsi]

+        movdqu  xmm2,XMMWORD[rdi]

+        movdqu  xmm3,XMMWORD[16+rdi]

+        movdqa  xmm11,xmm2

+        movdqu  xmm4,XMMWORD[32+rdi]

+        movdqa  xmm12,xmm3

+        movdqu  xmm5,XMMWORD[48+rdi]

+        movdqa  xmm13,xmm4

+        movdqu  xmm6,XMMWORD[64+rdi]

+        movdqa  xmm14,xmm5

+        movdqu  xmm7,XMMWORD[80+rdi]

+        movdqa  xmm15,xmm6

+$L$cbc_dec_loop6_enter:

+        lea     rdi,[96+rdi]

+        movdqa  xmm8,xmm7

+

+        call    _aesni_decrypt6

+

+        pxor    xmm2,xmm10

+        movdqa  xmm10,xmm8

+        pxor    xmm3,xmm11

+        movdqu  XMMWORD[rsi],xmm2

+        pxor    xmm4,xmm12

+        movdqu  XMMWORD[16+rsi],xmm3

+        pxor    xmm5,xmm13

+        movdqu  XMMWORD[32+rsi],xmm4

+        pxor    xmm6,xmm14

+        mov     rcx,rbp

+        movdqu  XMMWORD[48+rsi],xmm5

+        pxor    xmm7,xmm15

+        mov     eax,r10d

+        movdqu  XMMWORD[64+rsi],xmm6

+        lea     rsi,[80+rsi]

+        sub     rdx,0x60

+        ja      NEAR $L$cbc_dec_loop6

+

+        movdqa  xmm2,xmm7

+        add     rdx,0x50

+        jle     NEAR $L$cbc_dec_clear_tail_collected

+        movups  XMMWORD[rsi],xmm7

+        lea     rsi,[16+rsi]

+

+$L$cbc_dec_tail:

+        movups  xmm2,XMMWORD[rdi]

+        sub     rdx,0x10

+        jbe     NEAR $L$cbc_dec_one

+

+        movups  xmm3,XMMWORD[16+rdi]

+        movaps  xmm11,xmm2

+        sub     rdx,0x10

+        jbe     NEAR $L$cbc_dec_two

+

+        movups  xmm4,XMMWORD[32+rdi]

+        movaps  xmm12,xmm3

+        sub     rdx,0x10

+        jbe     NEAR $L$cbc_dec_three

+

+        movups  xmm5,XMMWORD[48+rdi]

+        movaps  xmm13,xmm4

+        sub     rdx,0x10

+        jbe     NEAR $L$cbc_dec_four

+

+        movups  xmm6,XMMWORD[64+rdi]

+        movaps  xmm14,xmm5

+        movaps  xmm15,xmm6

+        xorps   xmm7,xmm7

+        call    _aesni_decrypt6

+        pxor    xmm2,xmm10

+        movaps  xmm10,xmm15

+        pxor    xmm3,xmm11

+        movdqu  XMMWORD[rsi],xmm2

+        pxor    xmm4,xmm12

+        movdqu  XMMWORD[16+rsi],xmm3

+        pxor    xmm3,xmm3

+        pxor    xmm5,xmm13

+        movdqu  XMMWORD[32+rsi],xmm4

+        pxor    xmm4,xmm4

+        pxor    xmm6,xmm14

+        movdqu  XMMWORD[48+rsi],xmm5

+        pxor    xmm5,xmm5

+        lea     rsi,[64+rsi]

+        movdqa  xmm2,xmm6

+        pxor    xmm6,xmm6

+        pxor    xmm7,xmm7

+        sub     rdx,0x10

+        jmp     NEAR $L$cbc_dec_tail_collected

+

+ALIGN   16

+$L$cbc_dec_one:

+        movaps  xmm11,xmm2

+        movups  xmm0,XMMWORD[rcx]

+        movups  xmm1,XMMWORD[16+rcx]

+        lea     rcx,[32+rcx]

+        xorps   xmm2,xmm0

+$L$oop_dec1_17:

+DB      102,15,56,222,209

+        dec     eax

+        movups  xmm1,XMMWORD[rcx]

+        lea     rcx,[16+rcx]

+        jnz     NEAR $L$oop_dec1_17

+DB      102,15,56,223,209

+        xorps   xmm2,xmm10

+        movaps  xmm10,xmm11

+        jmp     NEAR $L$cbc_dec_tail_collected

+ALIGN   16

+$L$cbc_dec_two:

+        movaps  xmm12,xmm3

+        call    _aesni_decrypt2

+        pxor    xmm2,xmm10

+        movaps  xmm10,xmm12

+        pxor    xmm3,xmm11

+        movdqu  XMMWORD[rsi],xmm2

+        movdqa  xmm2,xmm3

+        pxor    xmm3,xmm3

+        lea     rsi,[16+rsi]

+        jmp     NEAR $L$cbc_dec_tail_collected

+ALIGN   16

+$L$cbc_dec_three:

+        movaps  xmm13,xmm4

+        call    _aesni_decrypt3

+        pxor    xmm2,xmm10

+        movaps  xmm10,xmm13

+        pxor    xmm3,xmm11

+        movdqu  XMMWORD[rsi],xmm2

+        pxor    xmm4,xmm12

+        movdqu  XMMWORD[16+rsi],xmm3

+        pxor    xmm3,xmm3

+        movdqa  xmm2,xmm4

+        pxor    xmm4,xmm4

+        lea     rsi,[32+rsi]

+        jmp     NEAR $L$cbc_dec_tail_collected

+ALIGN   16

+$L$cbc_dec_four:

+        movaps  xmm14,xmm5

+        call    _aesni_decrypt4

+        pxor    xmm2,xmm10

+        movaps  xmm10,xmm14

+        pxor    xmm3,xmm11

+        movdqu  XMMWORD[rsi],xmm2

+        pxor    xmm4,xmm12

+        movdqu  XMMWORD[16+rsi],xmm3

+        pxor    xmm3,xmm3

+        pxor    xmm5,xmm13

+        movdqu  XMMWORD[32+rsi],xmm4

+        pxor    xmm4,xmm4

+        movdqa  xmm2,xmm5

+        pxor    xmm5,xmm5

+        lea     rsi,[48+rsi]

+        jmp     NEAR $L$cbc_dec_tail_collected

+

+ALIGN   16

+$L$cbc_dec_clear_tail_collected:

+        pxor    xmm3,xmm3

+        pxor    xmm4,xmm4

+        pxor    xmm5,xmm5

+$L$cbc_dec_tail_collected:

+        movups  XMMWORD[r8],xmm10

+        and     rdx,15

+        jnz     NEAR $L$cbc_dec_tail_partial

+        movups  XMMWORD[rsi],xmm2

+        pxor    xmm2,xmm2

+        jmp     NEAR $L$cbc_dec_ret

+ALIGN   16

+$L$cbc_dec_tail_partial:

+        movaps  XMMWORD[rsp],xmm2

+        pxor    xmm2,xmm2

+        mov     rcx,16

+        mov     rdi,rsi

+        sub     rcx,rdx

+        lea     rsi,[rsp]

+        DD      0x9066A4F3

+        movdqa  XMMWORD[rsp],xmm2

+

+$L$cbc_dec_ret:

+        xorps   xmm0,xmm0

+        pxor    xmm1,xmm1

+        movaps  xmm6,XMMWORD[16+rsp]

+        movaps  XMMWORD[16+rsp],xmm0

+        movaps  xmm7,XMMWORD[32+rsp]

+        movaps  XMMWORD[32+rsp],xmm0

+        movaps  xmm8,XMMWORD[48+rsp]

+        movaps  XMMWORD[48+rsp],xmm0

+        movaps  xmm9,XMMWORD[64+rsp]

+        movaps  XMMWORD[64+rsp],xmm0

+        movaps  xmm10,XMMWORD[80+rsp]

+        movaps  XMMWORD[80+rsp],xmm0

+        movaps  xmm11,XMMWORD[96+rsp]

+        movaps  XMMWORD[96+rsp],xmm0

+        movaps  xmm12,XMMWORD[112+rsp]

+        movaps  XMMWORD[112+rsp],xmm0

+        movaps  xmm13,XMMWORD[128+rsp]

+        movaps  XMMWORD[128+rsp],xmm0

+        movaps  xmm14,XMMWORD[144+rsp]

+        movaps  XMMWORD[144+rsp],xmm0

+        movaps  xmm15,XMMWORD[160+rsp]

+        movaps  XMMWORD[160+rsp],xmm0

+        mov     rbp,QWORD[((-8))+r11]

+

+        lea     rsp,[r11]

+

+$L$cbc_ret:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_aesni_cbc_encrypt:

+global  aesni_set_decrypt_key

+

+ALIGN   16

+aesni_set_decrypt_key:

+

+DB      0x48,0x83,0xEC,0x08

+

+        call    __aesni_set_encrypt_key

+        shl     edx,4

+        test    eax,eax

+        jnz     NEAR $L$dec_key_ret

+        lea     rcx,[16+rdx*1+r8]

+

+        movups  xmm0,XMMWORD[r8]

+        movups  xmm1,XMMWORD[rcx]

+        movups  XMMWORD[rcx],xmm0

+        movups  XMMWORD[r8],xmm1

+        lea     r8,[16+r8]

+        lea     rcx,[((-16))+rcx]

+

+$L$dec_key_inverse:

+        movups  xmm0,XMMWORD[r8]

+        movups  xmm1,XMMWORD[rcx]

+DB      102,15,56,219,192

+DB      102,15,56,219,201

+        lea     r8,[16+r8]

+        lea     rcx,[((-16))+rcx]

+        movups  XMMWORD[16+rcx],xmm0

+        movups  XMMWORD[(-16)+r8],xmm1

+        cmp     rcx,r8

+        ja      NEAR $L$dec_key_inverse

+

+        movups  xmm0,XMMWORD[r8]

+DB      102,15,56,219,192

+        pxor    xmm1,xmm1

+        movups  XMMWORD[rcx],xmm0

+        pxor    xmm0,xmm0

+$L$dec_key_ret:

+        add     rsp,8

+

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_set_decrypt_key:

+

+global  aesni_set_encrypt_key

+

+ALIGN   16

+aesni_set_encrypt_key:

+__aesni_set_encrypt_key:

+

+DB      0x48,0x83,0xEC,0x08

+

+        mov     rax,-1

+        test    rcx,rcx

+        jz      NEAR $L$enc_key_ret

+        test    r8,r8

+        jz      NEAR $L$enc_key_ret

+

+        mov     r10d,268437504

+        movups  xmm0,XMMWORD[rcx]

+        xorps   xmm4,xmm4

+        and     r10d,DWORD[((OPENSSL_ia32cap_P+4))]

+        lea     rax,[16+r8]

+        cmp     edx,256

+        je      NEAR $L$14rounds

+        cmp     edx,192

+        je      NEAR $L$12rounds

+        cmp     edx,128

+        jne     NEAR $L$bad_keybits

+

+$L$10rounds:

+        mov     edx,9

+        cmp     r10d,268435456

+        je      NEAR $L$10rounds_alt

+

+        movups  XMMWORD[r8],xmm0

+DB      102,15,58,223,200,1

+        call    $L$key_expansion_128_cold

+DB      102,15,58,223,200,2

+        call    $L$key_expansion_128

+DB      102,15,58,223,200,4

+        call    $L$key_expansion_128

+DB      102,15,58,223,200,8

+        call    $L$key_expansion_128

+DB      102,15,58,223,200,16

+        call    $L$key_expansion_128

+DB      102,15,58,223,200,32

+        call    $L$key_expansion_128

+DB      102,15,58,223,200,64

+        call    $L$key_expansion_128

+DB      102,15,58,223,200,128

+        call    $L$key_expansion_128

+DB      102,15,58,223,200,27

+        call    $L$key_expansion_128

+DB      102,15,58,223,200,54

+        call    $L$key_expansion_128

+        movups  XMMWORD[rax],xmm0

+        mov     DWORD[80+rax],edx

+        xor     eax,eax

+        jmp     NEAR $L$enc_key_ret

+

+ALIGN   16

+$L$10rounds_alt:

+        movdqa  xmm5,XMMWORD[$L$key_rotate]

+        mov     r10d,8

+        movdqa  xmm4,XMMWORD[$L$key_rcon1]

+        movdqa  xmm2,xmm0

+        movdqu  XMMWORD[r8],xmm0

+        jmp     NEAR $L$oop_key128

+

+ALIGN   16

+$L$oop_key128:

+DB      102,15,56,0,197

+DB      102,15,56,221,196

+        pslld   xmm4,1

+        lea     rax,[16+rax]

+

+        movdqa  xmm3,xmm2

+        pslldq  xmm2,4

+        pxor    xmm3,xmm2

+        pslldq  xmm2,4

+        pxor    xmm3,xmm2

+        pslldq  xmm2,4

+        pxor    xmm2,xmm3

+

+        pxor    xmm0,xmm2

+        movdqu  XMMWORD[(-16)+rax],xmm0

+        movdqa  xmm2,xmm0

+

+        dec     r10d

+        jnz     NEAR $L$oop_key128

+

+        movdqa  xmm4,XMMWORD[$L$key_rcon1b]

+

+DB      102,15,56,0,197

+DB      102,15,56,221,196

+        pslld   xmm4,1

+

+        movdqa  xmm3,xmm2

+        pslldq  xmm2,4

+        pxor    xmm3,xmm2

+        pslldq  xmm2,4

+        pxor    xmm3,xmm2

+        pslldq  xmm2,4

+        pxor    xmm2,xmm3

+

+        pxor    xmm0,xmm2

+        movdqu  XMMWORD[rax],xmm0

+

+        movdqa  xmm2,xmm0

+DB      102,15,56,0,197

+DB      102,15,56,221,196

+

+        movdqa  xmm3,xmm2

+        pslldq  xmm2,4

+        pxor    xmm3,xmm2

+        pslldq  xmm2,4

+        pxor    xmm3,xmm2

+        pslldq  xmm2,4

+        pxor    xmm2,xmm3

+

+        pxor    xmm0,xmm2

+        movdqu  XMMWORD[16+rax],xmm0

+

+        mov     DWORD[96+rax],edx

+        xor     eax,eax

+        jmp     NEAR $L$enc_key_ret

+

+ALIGN   16

+$L$12rounds:

+        movq    xmm2,QWORD[16+rcx]

+        mov     edx,11

+        cmp     r10d,268435456

+        je      NEAR $L$12rounds_alt

+

+        movups  XMMWORD[r8],xmm0

+DB      102,15,58,223,202,1

+        call    $L$key_expansion_192a_cold

+DB      102,15,58,223,202,2

+        call    $L$key_expansion_192b

+DB      102,15,58,223,202,4

+        call    $L$key_expansion_192a

+DB      102,15,58,223,202,8

+        call    $L$key_expansion_192b

+DB      102,15,58,223,202,16

+        call    $L$key_expansion_192a

+DB      102,15,58,223,202,32

+        call    $L$key_expansion_192b

+DB      102,15,58,223,202,64

+        call    $L$key_expansion_192a

+DB      102,15,58,223,202,128

+        call    $L$key_expansion_192b

+        movups  XMMWORD[rax],xmm0

+        mov     DWORD[48+rax],edx

+        xor     rax,rax

+        jmp     NEAR $L$enc_key_ret

+

+ALIGN   16

+$L$12rounds_alt:

+        movdqa  xmm5,XMMWORD[$L$key_rotate192]

+        movdqa  xmm4,XMMWORD[$L$key_rcon1]

+        mov     r10d,8

+        movdqu  XMMWORD[r8],xmm0

+        jmp     NEAR $L$oop_key192

+

+ALIGN   16

+$L$oop_key192:

+        movq    QWORD[rax],xmm2

+        movdqa  xmm1,xmm2

+DB      102,15,56,0,213

+DB      102,15,56,221,212

+        pslld   xmm4,1

+        lea     rax,[24+rax]

+

+        movdqa  xmm3,xmm0

+        pslldq  xmm0,4

+        pxor    xmm3,xmm0

+        pslldq  xmm0,4

+        pxor    xmm3,xmm0

+        pslldq  xmm0,4

+        pxor    xmm0,xmm3

+

+        pshufd  xmm3,xmm0,0xff

+        pxor    xmm3,xmm1

+        pslldq  xmm1,4

+        pxor    xmm3,xmm1

+

+        pxor    xmm0,xmm2

+        pxor    xmm2,xmm3

+        movdqu  XMMWORD[(-16)+rax],xmm0

+

+        dec     r10d

+        jnz     NEAR $L$oop_key192

+

+        mov     DWORD[32+rax],edx

+        xor     eax,eax

+        jmp     NEAR $L$enc_key_ret

+

+ALIGN   16

+$L$14rounds:

+        movups  xmm2,XMMWORD[16+rcx]

+        mov     edx,13

+        lea     rax,[16+rax]

+        cmp     r10d,268435456

+        je      NEAR $L$14rounds_alt

+

+        movups  XMMWORD[r8],xmm0

+        movups  XMMWORD[16+r8],xmm2

+DB      102,15,58,223,202,1

+        call    $L$key_expansion_256a_cold

+DB      102,15,58,223,200,1

+        call    $L$key_expansion_256b

+DB      102,15,58,223,202,2

+        call    $L$key_expansion_256a

+DB      102,15,58,223,200,2

+        call    $L$key_expansion_256b

+DB      102,15,58,223,202,4

+        call    $L$key_expansion_256a

+DB      102,15,58,223,200,4

+        call    $L$key_expansion_256b

+DB      102,15,58,223,202,8

+        call    $L$key_expansion_256a

+DB      102,15,58,223,200,8

+        call    $L$key_expansion_256b

+DB      102,15,58,223,202,16

+        call    $L$key_expansion_256a

+DB      102,15,58,223,200,16

+        call    $L$key_expansion_256b

+DB      102,15,58,223,202,32

+        call    $L$key_expansion_256a

+DB      102,15,58,223,200,32

+        call    $L$key_expansion_256b

+DB      102,15,58,223,202,64

+        call    $L$key_expansion_256a

+        movups  XMMWORD[rax],xmm0

+        mov     DWORD[16+rax],edx

+        xor     rax,rax

+        jmp     NEAR $L$enc_key_ret

+

+ALIGN   16

+$L$14rounds_alt:

+        movdqa  xmm5,XMMWORD[$L$key_rotate]

+        movdqa  xmm4,XMMWORD[$L$key_rcon1]

+        mov     r10d,7

+        movdqu  XMMWORD[r8],xmm0

+        movdqa  xmm1,xmm2

+        movdqu  XMMWORD[16+r8],xmm2

+        jmp     NEAR $L$oop_key256

+

+ALIGN   16

+$L$oop_key256:

+DB      102,15,56,0,213

+DB      102,15,56,221,212

+

+        movdqa  xmm3,xmm0

+        pslldq  xmm0,4

+        pxor    xmm3,xmm0

+        pslldq  xmm0,4

+        pxor    xmm3,xmm0

+        pslldq  xmm0,4

+        pxor    xmm0,xmm3

+        pslld   xmm4,1

+

+        pxor    xmm0,xmm2

+        movdqu  XMMWORD[rax],xmm0

+

+        dec     r10d

+        jz      NEAR $L$done_key256

+

+        pshufd  xmm2,xmm0,0xff

+        pxor    xmm3,xmm3

+DB      102,15,56,221,211

+

+        movdqa  xmm3,xmm1

+        pslldq  xmm1,4

+        pxor    xmm3,xmm1

+        pslldq  xmm1,4

+        pxor    xmm3,xmm1

+        pslldq  xmm1,4

+        pxor    xmm1,xmm3

+

+        pxor    xmm2,xmm1

+        movdqu  XMMWORD[16+rax],xmm2

+        lea     rax,[32+rax]

+        movdqa  xmm1,xmm2

+

+        jmp     NEAR $L$oop_key256

+

+$L$done_key256:

+        mov     DWORD[16+rax],edx

+        xor     eax,eax

+        jmp     NEAR $L$enc_key_ret

+

+ALIGN   16

+$L$bad_keybits:

+        mov     rax,-2

+$L$enc_key_ret:

+        pxor    xmm0,xmm0

+        pxor    xmm1,xmm1

+        pxor    xmm2,xmm2

+        pxor    xmm3,xmm3

+        pxor    xmm4,xmm4

+        pxor    xmm5,xmm5

+        add     rsp,8

+

+        DB      0F3h,0C3h               ;repret

+$L$SEH_end_set_encrypt_key:

+

+ALIGN   16

+$L$key_expansion_128:

+        movups  XMMWORD[rax],xmm0

+        lea     rax,[16+rax]

+$L$key_expansion_128_cold:

+        shufps  xmm4,xmm0,16

+        xorps   xmm0,xmm4

+        shufps  xmm4,xmm0,140

+        xorps   xmm0,xmm4

+        shufps  xmm1,xmm1,255

+        xorps   xmm0,xmm1

+        DB      0F3h,0C3h               ;repret

+

+ALIGN   16

+$L$key_expansion_192a:

+        movups  XMMWORD[rax],xmm0

+        lea     rax,[16+rax]

+$L$key_expansion_192a_cold:

+        movaps  xmm5,xmm2

+$L$key_expansion_192b_warm:

+        shufps  xmm4,xmm0,16

+        movdqa  xmm3,xmm2

+        xorps   xmm0,xmm4

+        shufps  xmm4,xmm0,140

+        pslldq  xmm3,4

+        xorps   xmm0,xmm4

+        pshufd  xmm1,xmm1,85

+        pxor    xmm2,xmm3

+        pxor    xmm0,xmm1

+        pshufd  xmm3,xmm0,255

+        pxor    xmm2,xmm3

+        DB      0F3h,0C3h               ;repret

+

+ALIGN   16

+$L$key_expansion_192b:

+        movaps  xmm3,xmm0

+        shufps  xmm5,xmm0,68

+        movups  XMMWORD[rax],xmm5

+        shufps  xmm3,xmm2,78

+        movups  XMMWORD[16+rax],xmm3

+        lea     rax,[32+rax]

+        jmp     NEAR $L$key_expansion_192b_warm

+

+ALIGN   16

+$L$key_expansion_256a:

+        movups  XMMWORD[rax],xmm2

+        lea     rax,[16+rax]

+$L$key_expansion_256a_cold:

+        shufps  xmm4,xmm0,16

+        xorps   xmm0,xmm4

+        shufps  xmm4,xmm0,140

+        xorps   xmm0,xmm4

+        shufps  xmm1,xmm1,255

+        xorps   xmm0,xmm1

+        DB      0F3h,0C3h               ;repret

+

+ALIGN   16

+$L$key_expansion_256b:

+        movups  XMMWORD[rax],xmm0

+        lea     rax,[16+rax]

+

+        shufps  xmm4,xmm2,16

+        xorps   xmm2,xmm4

+        shufps  xmm4,xmm2,140

+        xorps   xmm2,xmm4

+        shufps  xmm1,xmm1,170

+        xorps   xmm2,xmm1

+        DB      0F3h,0C3h               ;repret

+

+

+

+ALIGN   64

+$L$bswap_mask:

+DB      15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0

+$L$increment32:

+        DD      6,6,6,0

+$L$increment64:

+        DD      1,0,0,0

+$L$xts_magic:

+        DD      0x87,0,1,0

+$L$increment1:

+DB      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1

+$L$key_rotate:

+        DD      0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d

+$L$key_rotate192:

+        DD      0x04070605,0x04070605,0x04070605,0x04070605

+$L$key_rcon1:

+        DD      1,1,1,1

+$L$key_rcon1b:

+        DD      0x1b,0x1b,0x1b,0x1b

+

+DB      65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69

+DB      83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83

+DB      32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115

+DB      115,108,46,111,114,103,62,0

+ALIGN   64

+EXTERN  __imp_RtlVirtualUnwind

+

+ALIGN   16

+ecb_ccm64_se_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        mov     rsi,QWORD[8+r9]

+        mov     r11,QWORD[56+r9]

+

+        mov     r10d,DWORD[r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jb      NEAR $L$common_seh_tail

+

+        mov     rax,QWORD[152+r8]

+

+        mov     r10d,DWORD[4+r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jae     NEAR $L$common_seh_tail

+

+        lea     rsi,[rax]

+        lea     rdi,[512+r8]

+        mov     ecx,8

+        DD      0xa548f3fc

+        lea     rax,[88+rax]

+

+        jmp     NEAR $L$common_seh_tail

+

+

+

+ALIGN   16

+ctr_xts_se_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        mov     rsi,QWORD[8+r9]

+        mov     r11,QWORD[56+r9]

+

+        mov     r10d,DWORD[r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jb      NEAR $L$common_seh_tail

+

+        mov     rax,QWORD[152+r8]

+

+        mov     r10d,DWORD[4+r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jae     NEAR $L$common_seh_tail

+

+        mov     rax,QWORD[208+r8]

+

+        lea     rsi,[((-168))+rax]

+        lea     rdi,[512+r8]

+        mov     ecx,20

+        DD      0xa548f3fc

+

+        mov     rbp,QWORD[((-8))+rax]

+        mov     QWORD[160+r8],rbp

+        jmp     NEAR $L$common_seh_tail

+

+

+

+ALIGN   16

+ocb_se_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        mov     rsi,QWORD[8+r9]

+        mov     r11,QWORD[56+r9]

+

+        mov     r10d,DWORD[r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jb      NEAR $L$common_seh_tail

+

+        mov     r10d,DWORD[4+r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jae     NEAR $L$common_seh_tail

+

+        mov     r10d,DWORD[8+r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jae     NEAR $L$ocb_no_xmm

+

+        mov     rax,QWORD[152+r8]

+

+        lea     rsi,[rax]

+        lea     rdi,[512+r8]

+        mov     ecx,20

+        DD      0xa548f3fc

+        lea     rax,[((160+40))+rax]

+

+$L$ocb_no_xmm:

+        mov     rbx,QWORD[((-8))+rax]

+        mov     rbp,QWORD[((-16))+rax]

+        mov     r12,QWORD[((-24))+rax]

+        mov     r13,QWORD[((-32))+rax]

+        mov     r14,QWORD[((-40))+rax]

+

+        mov     QWORD[144+r8],rbx

+        mov     QWORD[160+r8],rbp

+        mov     QWORD[216+r8],r12

+        mov     QWORD[224+r8],r13

+        mov     QWORD[232+r8],r14

+

+        jmp     NEAR $L$common_seh_tail

+

+

+ALIGN   16

+cbc_se_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[152+r8]

+        mov     rbx,QWORD[248+r8]

+

+        lea     r10,[$L$cbc_decrypt_bulk]

+        cmp     rbx,r10

+        jb      NEAR $L$common_seh_tail

+

+        mov     rax,QWORD[120+r8]

+

+        lea     r10,[$L$cbc_decrypt_body]

+        cmp     rbx,r10

+        jb      NEAR $L$common_seh_tail

+

+        mov     rax,QWORD[152+r8]

+

+        lea     r10,[$L$cbc_ret]

+        cmp     rbx,r10

+        jae     NEAR $L$common_seh_tail

+

+        lea     rsi,[16+rax]

+        lea     rdi,[512+r8]

+        mov     ecx,20

+        DD      0xa548f3fc

+

+        mov     rax,QWORD[208+r8]

+

+        mov     rbp,QWORD[((-8))+rax]

+        mov     QWORD[160+r8],rbp

+

+$L$common_seh_tail:

+        mov     rdi,QWORD[8+rax]

+        mov     rsi,QWORD[16+rax]

+        mov     QWORD[152+r8],rax

+        mov     QWORD[168+r8],rsi

+        mov     QWORD[176+r8],rdi

+

+        mov     rdi,QWORD[40+r9]

+        mov     rsi,r8

+        mov     ecx,154

+        DD      0xa548f3fc

+

+        mov     rsi,r9

+        xor     rcx,rcx

+        mov     rdx,QWORD[8+rsi]

+        mov     r8,QWORD[rsi]

+        mov     r9,QWORD[16+rsi]

+        mov     r10,QWORD[40+rsi]

+        lea     r11,[56+rsi]

+        lea     r12,[24+rsi]

+        mov     QWORD[32+rsp],r10

+        mov     QWORD[40+rsp],r11

+        mov     QWORD[48+rsp],r12

+        mov     QWORD[56+rsp],rcx

+        call    QWORD[__imp_RtlVirtualUnwind]

+

+        mov     eax,1

+        add     rsp,64

+        popfq

+        pop     r15

+        pop     r14

+        pop     r13

+        pop     r12

+        pop     rbp

+        pop     rbx

+        pop     rdi

+        pop     rsi

+        DB      0F3h,0C3h               ;repret

+

+

+section .pdata rdata align=4

+ALIGN   4

+        DD      $L$SEH_begin_aesni_ecb_encrypt wrt ..imagebase

+        DD      $L$SEH_end_aesni_ecb_encrypt wrt ..imagebase

+        DD      $L$SEH_info_ecb wrt ..imagebase

+

+        DD      $L$SEH_begin_aesni_ccm64_encrypt_blocks wrt
..imagebase

+        DD      $L$SEH_end_aesni_ccm64_encrypt_blocks wrt ..imagebase

+        DD      $L$SEH_info_ccm64_enc wrt ..imagebase

+

+        DD      $L$SEH_begin_aesni_ccm64_decrypt_blocks wrt
..imagebase

+        DD      $L$SEH_end_aesni_ccm64_decrypt_blocks wrt ..imagebase

+        DD      $L$SEH_info_ccm64_dec wrt ..imagebase

+

+        DD      $L$SEH_begin_aesni_ctr32_encrypt_blocks wrt
..imagebase

+        DD      $L$SEH_end_aesni_ctr32_encrypt_blocks wrt ..imagebase

+        DD      $L$SEH_info_ctr32 wrt ..imagebase

+

+        DD      $L$SEH_begin_aesni_xts_encrypt wrt ..imagebase

+        DD      $L$SEH_end_aesni_xts_encrypt wrt ..imagebase

+        DD      $L$SEH_info_xts_enc wrt ..imagebase

+

+        DD      $L$SEH_begin_aesni_xts_decrypt wrt ..imagebase

+        DD      $L$SEH_end_aesni_xts_decrypt wrt ..imagebase

+        DD      $L$SEH_info_xts_dec wrt ..imagebase

+

+        DD      $L$SEH_begin_aesni_ocb_encrypt wrt ..imagebase

+        DD      $L$SEH_end_aesni_ocb_encrypt wrt ..imagebase

+        DD      $L$SEH_info_ocb_enc wrt ..imagebase

+

+        DD      $L$SEH_begin_aesni_ocb_decrypt wrt ..imagebase

+        DD      $L$SEH_end_aesni_ocb_decrypt wrt ..imagebase

+        DD      $L$SEH_info_ocb_dec wrt ..imagebase

+        DD      $L$SEH_begin_aesni_cbc_encrypt wrt ..imagebase

+        DD      $L$SEH_end_aesni_cbc_encrypt wrt ..imagebase

+        DD      $L$SEH_info_cbc wrt ..imagebase

+

+        DD      aesni_set_decrypt_key wrt ..imagebase

+        DD      $L$SEH_end_set_decrypt_key wrt ..imagebase

+        DD      $L$SEH_info_key wrt ..imagebase

+

+        DD      aesni_set_encrypt_key wrt ..imagebase

+        DD      $L$SEH_end_set_encrypt_key wrt ..imagebase

+        DD      $L$SEH_info_key wrt ..imagebase

+section .xdata rdata align=8

+ALIGN   8

+$L$SEH_info_ecb:

+DB      9,0,0,0

+        DD      ecb_ccm64_se_handler wrt ..imagebase

+        DD      $L$ecb_enc_body wrt ..imagebase,$L$ecb_enc_ret
wrt ..imagebase

+$L$SEH_info_ccm64_enc:

+DB      9,0,0,0

+        DD      ecb_ccm64_se_handler wrt ..imagebase

+        DD      $L$ccm64_enc_body wrt ..imagebase,$L$ccm64_enc_ret
wrt ..imagebase

+$L$SEH_info_ccm64_dec:

+DB      9,0,0,0

+        DD      ecb_ccm64_se_handler wrt ..imagebase

+        DD      $L$ccm64_dec_body wrt ..imagebase,$L$ccm64_dec_ret
wrt ..imagebase

+$L$SEH_info_ctr32:

+DB      9,0,0,0

+        DD      ctr_xts_se_handler wrt ..imagebase

+        DD      $L$ctr32_body wrt ..imagebase,$L$ctr32_epilogue
wrt ..imagebase

+$L$SEH_info_xts_enc:

+DB      9,0,0,0

+        DD      ctr_xts_se_handler wrt ..imagebase

+        DD      $L$xts_enc_body wrt ..imagebase,$L$xts_enc_epilogue
wrt ..imagebase

+$L$SEH_info_xts_dec:

+DB      9,0,0,0

+        DD      ctr_xts_se_handler wrt ..imagebase

+        DD      $L$xts_dec_body wrt ..imagebase,$L$xts_dec_epilogue
wrt ..imagebase

+$L$SEH_info_ocb_enc:

+DB      9,0,0,0

+        DD      ocb_se_handler wrt ..imagebase

+        DD      $L$ocb_enc_body wrt ..imagebase,$L$ocb_enc_epilogue
wrt ..imagebase

+        DD      $L$ocb_enc_pop wrt ..imagebase

+        DD      0

+$L$SEH_info_ocb_dec:

+DB      9,0,0,0

+        DD      ocb_se_handler wrt ..imagebase

+        DD      $L$ocb_dec_body wrt ..imagebase,$L$ocb_dec_epilogue
wrt ..imagebase

+        DD      $L$ocb_dec_pop wrt ..imagebase

+        DD      0

+$L$SEH_info_cbc:

+DB      9,0,0,0

+        DD      cbc_se_handler wrt ..imagebase

+$L$SEH_info_key:

+DB      0x01,0x04,0x01,0x00

+DB      0x04,0x02,0x00,0x00

diff --git a/CryptoPkg/Library/OpensslLib/X64/crypto/aes/vpaes-
x86_64.nasm
b/CryptoPkg/Library/OpensslLib/X64/crypto/aes/vpaes-x86_64.nasm
new file mode 100644
index 0000000000..1c911fa294
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/X64/crypto/aes/vpaes-x86_64.nasm
@@ -0,0 +1,1173 @@
+; WARNING: do not edit!

+; Generated from openssl/crypto/aes/asm/vpaes-x86_64.pl

+;

+; Copyright 2011-2020 The OpenSSL Project Authors. All Rights
Reserved.

+;

+; Licensed under the OpenSSL license (the "License").  You may not use

+; this file except in compliance with the License.  You can obtain a
copy

+; in the file LICENSE in the source distribution or at

+; https://www.openssl.org/source/license.html

+

+default rel

+%define XMMWORD

+%define YMMWORD

+%define ZMMWORD

+section .text code align=64

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+ALIGN   16

+_vpaes_encrypt_core:

+

+        mov     r9,rdx

+        mov     r11,16

+        mov     eax,DWORD[240+rdx]

+        movdqa  xmm1,xmm9

+        movdqa  xmm2,XMMWORD[$L$k_ipt]

+        pandn   xmm1,xmm0

+        movdqu  xmm5,XMMWORD[r9]

+        psrld   xmm1,4

+        pand    xmm0,xmm9

+DB      102,15,56,0,208

+        movdqa  xmm0,XMMWORD[(($L$k_ipt+16))]

+DB      102,15,56,0,193

+        pxor    xmm2,xmm5

+        add     r9,16

+        pxor    xmm0,xmm2

+        lea     r10,[$L$k_mc_backward]

+        jmp     NEAR $L$enc_entry

+

+ALIGN   16

+$L$enc_loop:

+

+        movdqa  xmm4,xmm13

+        movdqa  xmm0,xmm12

+DB      102,15,56,0,226

+DB      102,15,56,0,195

+        pxor    xmm4,xmm5

+        movdqa  xmm5,xmm15

+        pxor    xmm0,xmm4

+        movdqa  xmm1,XMMWORD[((-64))+r10*1+r11]

+DB      102,15,56,0,234

+        movdqa  xmm4,XMMWORD[r10*1+r11]

+        movdqa  xmm2,xmm14

+DB      102,15,56,0,211

+        movdqa  xmm3,xmm0

+        pxor    xmm2,xmm5

+DB      102,15,56,0,193

+        add     r9,16

+        pxor    xmm0,xmm2

+DB      102,15,56,0,220

+        add     r11,16

+        pxor    xmm3,xmm0

+DB      102,15,56,0,193

+        and     r11,0x30

+        sub     rax,1

+        pxor    xmm0,xmm3

+

+$L$enc_entry:

+

+        movdqa  xmm1,xmm9

+        movdqa  xmm5,xmm11

+        pandn   xmm1,xmm0

+        psrld   xmm1,4

+        pand    xmm0,xmm9

+DB      102,15,56,0,232

+        movdqa  xmm3,xmm10

+        pxor    xmm0,xmm1

+DB      102,15,56,0,217

+        movdqa  xmm4,xmm10

+        pxor    xmm3,xmm5

+DB      102,15,56,0,224

+        movdqa  xmm2,xmm10

+        pxor    xmm4,xmm5

+DB      102,15,56,0,211

+        movdqa  xmm3,xmm10

+        pxor    xmm2,xmm0

+DB      102,15,56,0,220

+        movdqu  xmm5,XMMWORD[r9]

+        pxor    xmm3,xmm1

+        jnz     NEAR $L$enc_loop

+

+

+        movdqa  xmm4,XMMWORD[((-96))+r10]

+        movdqa  xmm0,XMMWORD[((-80))+r10]

+DB      102,15,56,0,226

+        pxor    xmm4,xmm5

+DB      102,15,56,0,195

+        movdqa  xmm1,XMMWORD[64+r10*1+r11]

+        pxor    xmm0,xmm4

+DB      102,15,56,0,193

+        DB      0F3h,0C3h               ;repret

+

+

+

+

+

+

+

+

+

+ALIGN   16

+_vpaes_decrypt_core:

+

+        mov     r9,rdx

+        mov     eax,DWORD[240+rdx]

+        movdqa  xmm1,xmm9

+        movdqa  xmm2,XMMWORD[$L$k_dipt]

+        pandn   xmm1,xmm0

+        mov     r11,rax

+        psrld   xmm1,4

+        movdqu  xmm5,XMMWORD[r9]

+        shl     r11,4

+        pand    xmm0,xmm9

+DB      102,15,56,0,208

+        movdqa  xmm0,XMMWORD[(($L$k_dipt+16))]

+        xor     r11,0x30

+        lea     r10,[$L$k_dsbd]

+DB      102,15,56,0,193

+        and     r11,0x30

+        pxor    xmm2,xmm5

+        movdqa  xmm5,XMMWORD[(($L$k_mc_forward+48))]

+        pxor    xmm0,xmm2

+        add     r9,16

+        add     r11,r10

+        jmp     NEAR $L$dec_entry

+

+ALIGN   16

+$L$dec_loop:

+

+

+

+        movdqa  xmm4,XMMWORD[((-32))+r10]

+        movdqa  xmm1,XMMWORD[((-16))+r10]

+DB      102,15,56,0,226

+DB      102,15,56,0,203

+        pxor    xmm0,xmm4

+        movdqa  xmm4,XMMWORD[r10]

+        pxor    xmm0,xmm1

+        movdqa  xmm1,XMMWORD[16+r10]

+

+DB      102,15,56,0,226

+DB      102,15,56,0,197

+DB      102,15,56,0,203

+        pxor    xmm0,xmm4

+        movdqa  xmm4,XMMWORD[32+r10]

+        pxor    xmm0,xmm1

+        movdqa  xmm1,XMMWORD[48+r10]

+

+DB      102,15,56,0,226

+DB      102,15,56,0,197

+DB      102,15,56,0,203

+        pxor    xmm0,xmm4

+        movdqa  xmm4,XMMWORD[64+r10]

+        pxor    xmm0,xmm1

+        movdqa  xmm1,XMMWORD[80+r10]

+

+DB      102,15,56,0,226

+DB      102,15,56,0,197

+DB      102,15,56,0,203

+        pxor    xmm0,xmm4

+        add     r9,16

+DB      102,15,58,15,237,12

+        pxor    xmm0,xmm1

+        sub     rax,1

+

+$L$dec_entry:

+

+        movdqa  xmm1,xmm9

+        pandn   xmm1,xmm0

+        movdqa  xmm2,xmm11

+        psrld   xmm1,4

+        pand    xmm0,xmm9

+DB      102,15,56,0,208

+        movdqa  xmm3,xmm10

+        pxor    xmm0,xmm1

+DB      102,15,56,0,217

+        movdqa  xmm4,xmm10

+        pxor    xmm3,xmm2

+DB      102,15,56,0,224

+        pxor    xmm4,xmm2

+        movdqa  xmm2,xmm10

+DB      102,15,56,0,211

+        movdqa  xmm3,xmm10

+        pxor    xmm2,xmm0

+DB      102,15,56,0,220

+        movdqu  xmm0,XMMWORD[r9]

+        pxor    xmm3,xmm1

+        jnz     NEAR $L$dec_loop

+

+

+        movdqa  xmm4,XMMWORD[96+r10]

+DB      102,15,56,0,226

+        pxor    xmm4,xmm0

+        movdqa  xmm0,XMMWORD[112+r10]

+        movdqa  xmm2,XMMWORD[((-352))+r11]

+DB      102,15,56,0,195

+        pxor    xmm0,xmm4

+DB      102,15,56,0,194

+        DB      0F3h,0C3h               ;repret

+

+

+

+

+

+

+

+

+

+ALIGN   16

+_vpaes_schedule_core:

+

+

+

+

+

+

+        call    _vpaes_preheat

+        movdqa  xmm8,XMMWORD[$L$k_rcon]

+        movdqu  xmm0,XMMWORD[rdi]

+

+

+        movdqa  xmm3,xmm0

+        lea     r11,[$L$k_ipt]

+        call    _vpaes_schedule_transform

+        movdqa  xmm7,xmm0

+

+        lea     r10,[$L$k_sr]

+        test    rcx,rcx

+        jnz     NEAR $L$schedule_am_decrypting

+

+

+        movdqu  XMMWORD[rdx],xmm0

+        jmp     NEAR $L$schedule_go

+

+$L$schedule_am_decrypting:

+

+        movdqa  xmm1,XMMWORD[r10*1+r8]

+DB      102,15,56,0,217

+        movdqu  XMMWORD[rdx],xmm3

+        xor     r8,0x30

+

+$L$schedule_go:

+        cmp     esi,192

+        ja      NEAR $L$schedule_256

+        je      NEAR $L$schedule_192

+

+

+

+

+

+

+

+

+

+

+$L$schedule_128:

+        mov     esi,10

+

+$L$oop_schedule_128:

+        call    _vpaes_schedule_round

+        dec     rsi

+        jz      NEAR $L$schedule_mangle_last

+        call    _vpaes_schedule_mangle

+        jmp     NEAR $L$oop_schedule_128

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+ALIGN   16

+$L$schedule_192:

+        movdqu  xmm0,XMMWORD[8+rdi]

+        call    _vpaes_schedule_transform

+        movdqa  xmm6,xmm0

+        pxor    xmm4,xmm4

+        movhlps xmm6,xmm4

+        mov     esi,4

+

+$L$oop_schedule_192:

+        call    _vpaes_schedule_round

+DB      102,15,58,15,198,8

+        call    _vpaes_schedule_mangle

+        call    _vpaes_schedule_192_smear

+        call    _vpaes_schedule_mangle

+        call    _vpaes_schedule_round

+        dec     rsi

+        jz      NEAR $L$schedule_mangle_last

+        call    _vpaes_schedule_mangle

+        call    _vpaes_schedule_192_smear

+        jmp     NEAR $L$oop_schedule_192

+

+

+

+

+

+

+

+

+

+

+

+ALIGN   16

+$L$schedule_256:

+        movdqu  xmm0,XMMWORD[16+rdi]

+        call    _vpaes_schedule_transform

+        mov     esi,7

+

+$L$oop_schedule_256:

+        call    _vpaes_schedule_mangle

+        movdqa  xmm6,xmm0

+

+

+        call    _vpaes_schedule_round

+        dec     rsi

+        jz      NEAR $L$schedule_mangle_last

+        call    _vpaes_schedule_mangle

+

+

+        pshufd  xmm0,xmm0,0xFF

+        movdqa  xmm5,xmm7

+        movdqa  xmm7,xmm6

+        call    _vpaes_schedule_low_round

+        movdqa  xmm7,xmm5

+

+        jmp     NEAR $L$oop_schedule_256

+

+

+

+

+

+

+

+

+

+

+

+

+ALIGN   16

+$L$schedule_mangle_last:

+

+        lea     r11,[$L$k_deskew]

+        test    rcx,rcx

+        jnz     NEAR $L$schedule_mangle_last_dec

+

+

+        movdqa  xmm1,XMMWORD[r10*1+r8]

+DB      102,15,56,0,193

+        lea     r11,[$L$k_opt]

+        add     rdx,32

+

+$L$schedule_mangle_last_dec:

+        add     rdx,-16

+        pxor    xmm0,XMMWORD[$L$k_s63]

+        call    _vpaes_schedule_transform

+        movdqu  XMMWORD[rdx],xmm0

+

+

+        pxor    xmm0,xmm0

+        pxor    xmm1,xmm1

+        pxor    xmm2,xmm2

+        pxor    xmm3,xmm3

+        pxor    xmm4,xmm4

+        pxor    xmm5,xmm5

+        pxor    xmm6,xmm6

+        pxor    xmm7,xmm7

+        DB      0F3h,0C3h               ;repret

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+ALIGN   16

+_vpaes_schedule_192_smear:

+

+        pshufd  xmm1,xmm6,0x80

+        pshufd  xmm0,xmm7,0xFE

+        pxor    xmm6,xmm1

+        pxor    xmm1,xmm1

+        pxor    xmm6,xmm0

+        movdqa  xmm0,xmm6

+        movhlps xmm6,xmm1

+        DB      0F3h,0C3h               ;repret

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+ALIGN   16

+_vpaes_schedule_round:

+

+

+        pxor    xmm1,xmm1

+DB      102,65,15,58,15,200,15

+DB      102,69,15,58,15,192,15

+        pxor    xmm7,xmm1

+

+

+        pshufd  xmm0,xmm0,0xFF

+DB      102,15,58,15,192,1

+

+

+

+

+_vpaes_schedule_low_round:

+

+        movdqa  xmm1,xmm7

+        pslldq  xmm7,4

+        pxor    xmm7,xmm1

+        movdqa  xmm1,xmm7

+        pslldq  xmm7,8

+        pxor    xmm7,xmm1

+        pxor    xmm7,XMMWORD[$L$k_s63]

+

+

+        movdqa  xmm1,xmm9

+        pandn   xmm1,xmm0

+        psrld   xmm1,4

+        pand    xmm0,xmm9

+        movdqa  xmm2,xmm11

+DB      102,15,56,0,208

+        pxor    xmm0,xmm1

+        movdqa  xmm3,xmm10

+DB      102,15,56,0,217

+        pxor    xmm3,xmm2

+        movdqa  xmm4,xmm10

+DB      102,15,56,0,224

+        pxor    xmm4,xmm2

+        movdqa  xmm2,xmm10

+DB      102,15,56,0,211

+        pxor    xmm2,xmm0

+        movdqa  xmm3,xmm10

+DB      102,15,56,0,220

+        pxor    xmm3,xmm1

+        movdqa  xmm4,xmm13

+DB      102,15,56,0,226

+        movdqa  xmm0,xmm12

+DB      102,15,56,0,195

+        pxor    xmm0,xmm4

+

+

+        pxor    xmm0,xmm7

+        movdqa  xmm7,xmm0

+        DB      0F3h,0C3h               ;repret

+

+

+

+

+

+

+

+

+

+

+

+

+

+ALIGN   16

+_vpaes_schedule_transform:

+

+        movdqa  xmm1,xmm9

+        pandn   xmm1,xmm0

+        psrld   xmm1,4

+        pand    xmm0,xmm9

+        movdqa  xmm2,XMMWORD[r11]

+DB      102,15,56,0,208

+        movdqa  xmm0,XMMWORD[16+r11]

+DB      102,15,56,0,193

+        pxor    xmm0,xmm2

+        DB      0F3h,0C3h               ;repret

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+ALIGN   16

+_vpaes_schedule_mangle:

+

+        movdqa  xmm4,xmm0

+        movdqa  xmm5,XMMWORD[$L$k_mc_forward]

+        test    rcx,rcx

+        jnz     NEAR $L$schedule_mangle_dec

+

+

+        add     rdx,16

+        pxor    xmm4,XMMWORD[$L$k_s63]

+DB      102,15,56,0,229

+        movdqa  xmm3,xmm4

+DB      102,15,56,0,229

+        pxor    xmm3,xmm4

+DB      102,15,56,0,229

+        pxor    xmm3,xmm4

+

+        jmp     NEAR $L$schedule_mangle_both

+ALIGN   16

+$L$schedule_mangle_dec:

+

+        lea     r11,[$L$k_dksd]

+        movdqa  xmm1,xmm9

+        pandn   xmm1,xmm4

+        psrld   xmm1,4

+        pand    xmm4,xmm9

+

+        movdqa  xmm2,XMMWORD[r11]

+DB      102,15,56,0,212

+        movdqa  xmm3,XMMWORD[16+r11]

+DB      102,15,56,0,217

+        pxor    xmm3,xmm2

+DB      102,15,56,0,221

+

+        movdqa  xmm2,XMMWORD[32+r11]

+DB      102,15,56,0,212

+        pxor    xmm2,xmm3

+        movdqa  xmm3,XMMWORD[48+r11]

+DB      102,15,56,0,217

+        pxor    xmm3,xmm2

+DB      102,15,56,0,221

+

+        movdqa  xmm2,XMMWORD[64+r11]

+DB      102,15,56,0,212

+        pxor    xmm2,xmm3

+        movdqa  xmm3,XMMWORD[80+r11]

+DB      102,15,56,0,217

+        pxor    xmm3,xmm2

+DB      102,15,56,0,221

+

+        movdqa  xmm2,XMMWORD[96+r11]

+DB      102,15,56,0,212

+        pxor    xmm2,xmm3

+        movdqa  xmm3,XMMWORD[112+r11]

+DB      102,15,56,0,217

+        pxor    xmm3,xmm2

+

+        add     rdx,-16

+

+$L$schedule_mangle_both:

+        movdqa  xmm1,XMMWORD[r10*1+r8]

+DB      102,15,56,0,217

+        add     r8,-16

+        and     r8,0x30

+        movdqu  XMMWORD[rdx],xmm3

+        DB      0F3h,0C3h               ;repret

+

+

+

+

+

+

+global  vpaes_set_encrypt_key

+

+ALIGN   16

+vpaes_set_encrypt_key:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_vpaes_set_encrypt_key:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+

+        lea     rsp,[((-184))+rsp]

+        movaps  XMMWORD[16+rsp],xmm6

+        movaps  XMMWORD[32+rsp],xmm7

+        movaps  XMMWORD[48+rsp],xmm8

+        movaps  XMMWORD[64+rsp],xmm9

+        movaps  XMMWORD[80+rsp],xmm10

+        movaps  XMMWORD[96+rsp],xmm11

+        movaps  XMMWORD[112+rsp],xmm12

+        movaps  XMMWORD[128+rsp],xmm13

+        movaps  XMMWORD[144+rsp],xmm14

+        movaps  XMMWORD[160+rsp],xmm15

+$L$enc_key_body:

+        mov     eax,esi

+        shr     eax,5

+        add     eax,5

+        mov     DWORD[240+rdx],eax

+

+        mov     ecx,0

+        mov     r8d,0x30

+        call    _vpaes_schedule_core

+        movaps  xmm6,XMMWORD[16+rsp]

+        movaps  xmm7,XMMWORD[32+rsp]

+        movaps  xmm8,XMMWORD[48+rsp]

+        movaps  xmm9,XMMWORD[64+rsp]

+        movaps  xmm10,XMMWORD[80+rsp]

+        movaps  xmm11,XMMWORD[96+rsp]

+        movaps  xmm12,XMMWORD[112+rsp]

+        movaps  xmm13,XMMWORD[128+rsp]

+        movaps  xmm14,XMMWORD[144+rsp]

+        movaps  xmm15,XMMWORD[160+rsp]

+        lea     rsp,[184+rsp]

+$L$enc_key_epilogue:

+        xor     eax,eax

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_vpaes_set_encrypt_key:

+

+global  vpaes_set_decrypt_key

+

+ALIGN   16

+vpaes_set_decrypt_key:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_vpaes_set_decrypt_key:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+

+        lea     rsp,[((-184))+rsp]

+        movaps  XMMWORD[16+rsp],xmm6

+        movaps  XMMWORD[32+rsp],xmm7

+        movaps  XMMWORD[48+rsp],xmm8

+        movaps  XMMWORD[64+rsp],xmm9

+        movaps  XMMWORD[80+rsp],xmm10

+        movaps  XMMWORD[96+rsp],xmm11

+        movaps  XMMWORD[112+rsp],xmm12

+        movaps  XMMWORD[128+rsp],xmm13

+        movaps  XMMWORD[144+rsp],xmm14

+        movaps  XMMWORD[160+rsp],xmm15

+$L$dec_key_body:

+        mov     eax,esi

+        shr     eax,5

+        add     eax,5

+        mov     DWORD[240+rdx],eax

+        shl     eax,4

+        lea     rdx,[16+rax*1+rdx]

+

+        mov     ecx,1

+        mov     r8d,esi

+        shr     r8d,1

+        and     r8d,32

+        xor     r8d,32

+        call    _vpaes_schedule_core

+        movaps  xmm6,XMMWORD[16+rsp]

+        movaps  xmm7,XMMWORD[32+rsp]

+        movaps  xmm8,XMMWORD[48+rsp]

+        movaps  xmm9,XMMWORD[64+rsp]

+        movaps  xmm10,XMMWORD[80+rsp]

+        movaps  xmm11,XMMWORD[96+rsp]

+        movaps  xmm12,XMMWORD[112+rsp]

+        movaps  xmm13,XMMWORD[128+rsp]

+        movaps  xmm14,XMMWORD[144+rsp]

+        movaps  xmm15,XMMWORD[160+rsp]

+        lea     rsp,[184+rsp]

+$L$dec_key_epilogue:

+        xor     eax,eax

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_vpaes_set_decrypt_key:

+

+global  vpaes_encrypt

+

+ALIGN   16

+vpaes_encrypt:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_vpaes_encrypt:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+

+        lea     rsp,[((-184))+rsp]

+        movaps  XMMWORD[16+rsp],xmm6

+        movaps  XMMWORD[32+rsp],xmm7

+        movaps  XMMWORD[48+rsp],xmm8

+        movaps  XMMWORD[64+rsp],xmm9

+        movaps  XMMWORD[80+rsp],xmm10

+        movaps  XMMWORD[96+rsp],xmm11

+        movaps  XMMWORD[112+rsp],xmm12

+        movaps  XMMWORD[128+rsp],xmm13

+        movaps  XMMWORD[144+rsp],xmm14

+        movaps  XMMWORD[160+rsp],xmm15

+$L$enc_body:

+        movdqu  xmm0,XMMWORD[rdi]

+        call    _vpaes_preheat

+        call    _vpaes_encrypt_core

+        movdqu  XMMWORD[rsi],xmm0

+        movaps  xmm6,XMMWORD[16+rsp]

+        movaps  xmm7,XMMWORD[32+rsp]

+        movaps  xmm8,XMMWORD[48+rsp]

+        movaps  xmm9,XMMWORD[64+rsp]

+        movaps  xmm10,XMMWORD[80+rsp]

+        movaps  xmm11,XMMWORD[96+rsp]

+        movaps  xmm12,XMMWORD[112+rsp]

+        movaps  xmm13,XMMWORD[128+rsp]

+        movaps  xmm14,XMMWORD[144+rsp]

+        movaps  xmm15,XMMWORD[160+rsp]

+        lea     rsp,[184+rsp]

+$L$enc_epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_vpaes_encrypt:

+

+global  vpaes_decrypt

+

+ALIGN   16

+vpaes_decrypt:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_vpaes_decrypt:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+

+        lea     rsp,[((-184))+rsp]

+        movaps  XMMWORD[16+rsp],xmm6

+        movaps  XMMWORD[32+rsp],xmm7

+        movaps  XMMWORD[48+rsp],xmm8

+        movaps  XMMWORD[64+rsp],xmm9

+        movaps  XMMWORD[80+rsp],xmm10

+        movaps  XMMWORD[96+rsp],xmm11

+        movaps  XMMWORD[112+rsp],xmm12

+        movaps  XMMWORD[128+rsp],xmm13

+        movaps  XMMWORD[144+rsp],xmm14

+        movaps  XMMWORD[160+rsp],xmm15

+$L$dec_body:

+        movdqu  xmm0,XMMWORD[rdi]

+        call    _vpaes_preheat

+        call    _vpaes_decrypt_core

+        movdqu  XMMWORD[rsi],xmm0

+        movaps  xmm6,XMMWORD[16+rsp]

+        movaps  xmm7,XMMWORD[32+rsp]

+        movaps  xmm8,XMMWORD[48+rsp]

+        movaps  xmm9,XMMWORD[64+rsp]

+        movaps  xmm10,XMMWORD[80+rsp]

+        movaps  xmm11,XMMWORD[96+rsp]

+        movaps  xmm12,XMMWORD[112+rsp]

+        movaps  xmm13,XMMWORD[128+rsp]

+        movaps  xmm14,XMMWORD[144+rsp]

+        movaps  xmm15,XMMWORD[160+rsp]

+        lea     rsp,[184+rsp]

+$L$dec_epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_vpaes_decrypt:

+global  vpaes_cbc_encrypt

+

+ALIGN   16

+vpaes_cbc_encrypt:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_vpaes_cbc_encrypt:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+        mov     rcx,r9

+        mov     r8,QWORD[40+rsp]

+        mov     r9,QWORD[48+rsp]

+

+

+

+        xchg    rdx,rcx

+        sub     rcx,16

+        jc      NEAR $L$cbc_abort

+        lea     rsp,[((-184))+rsp]

+        movaps  XMMWORD[16+rsp],xmm6

+        movaps  XMMWORD[32+rsp],xmm7

+        movaps  XMMWORD[48+rsp],xmm8

+        movaps  XMMWORD[64+rsp],xmm9

+        movaps  XMMWORD[80+rsp],xmm10

+        movaps  XMMWORD[96+rsp],xmm11

+        movaps  XMMWORD[112+rsp],xmm12

+        movaps  XMMWORD[128+rsp],xmm13

+        movaps  XMMWORD[144+rsp],xmm14

+        movaps  XMMWORD[160+rsp],xmm15

+$L$cbc_body:

+        movdqu  xmm6,XMMWORD[r8]

+        sub     rsi,rdi

+        call    _vpaes_preheat

+        cmp     r9d,0

+        je      NEAR $L$cbc_dec_loop

+        jmp     NEAR $L$cbc_enc_loop

+ALIGN   16

+$L$cbc_enc_loop:

+        movdqu  xmm0,XMMWORD[rdi]

+        pxor    xmm0,xmm6

+        call    _vpaes_encrypt_core

+        movdqa  xmm6,xmm0

+        movdqu  XMMWORD[rdi*1+rsi],xmm0

+        lea     rdi,[16+rdi]

+        sub     rcx,16

+        jnc     NEAR $L$cbc_enc_loop

+        jmp     NEAR $L$cbc_done

+ALIGN   16

+$L$cbc_dec_loop:

+        movdqu  xmm0,XMMWORD[rdi]

+        movdqa  xmm7,xmm0

+        call    _vpaes_decrypt_core

+        pxor    xmm0,xmm6

+        movdqa  xmm6,xmm7

+        movdqu  XMMWORD[rdi*1+rsi],xmm0

+        lea     rdi,[16+rdi]

+        sub     rcx,16

+        jnc     NEAR $L$cbc_dec_loop

+$L$cbc_done:

+        movdqu  XMMWORD[r8],xmm6

+        movaps  xmm6,XMMWORD[16+rsp]

+        movaps  xmm7,XMMWORD[32+rsp]

+        movaps  xmm8,XMMWORD[48+rsp]

+        movaps  xmm9,XMMWORD[64+rsp]

+        movaps  xmm10,XMMWORD[80+rsp]

+        movaps  xmm11,XMMWORD[96+rsp]

+        movaps  xmm12,XMMWORD[112+rsp]

+        movaps  xmm13,XMMWORD[128+rsp]

+        movaps  xmm14,XMMWORD[144+rsp]

+        movaps  xmm15,XMMWORD[160+rsp]

+        lea     rsp,[184+rsp]

+$L$cbc_epilogue:

+$L$cbc_abort:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_vpaes_cbc_encrypt:

+

+

+

+

+

+

+

+ALIGN   16

+_vpaes_preheat:

+

+        lea     r10,[$L$k_s0F]

+        movdqa  xmm10,XMMWORD[((-32))+r10]

+        movdqa  xmm11,XMMWORD[((-16))+r10]

+        movdqa  xmm9,XMMWORD[r10]

+        movdqa  xmm13,XMMWORD[48+r10]

+        movdqa  xmm12,XMMWORD[64+r10]

+        movdqa  xmm15,XMMWORD[80+r10]

+        movdqa  xmm14,XMMWORD[96+r10]

+        DB      0F3h,0C3h               ;repret

+

+

+

+

+

+

+

+

+ALIGN   64

+_vpaes_consts:

+$L$k_inv:

+        DQ      0x0E05060F0D080180,0x040703090A0B0C02

+        DQ      0x01040A060F0B0780,0x030D0E0C02050809

+

+$L$k_s0F:

+        DQ      0x0F0F0F0F0F0F0F0F,0x0F0F0F0F0F0F0F0F

+

+$L$k_ipt:

+        DQ      0xC2B2E8985A2A7000,0xCABAE09052227808

+        DQ      0x4C01307D317C4D00,0xCD80B1FCB0FDCC81

+

+$L$k_sb1:

+        DQ      0xB19BE18FCB503E00,0xA5DF7A6E142AF544

+        DQ      0x3618D415FAE22300,0x3BF7CCC10D2ED9EF

+$L$k_sb2:

+        DQ      0xE27A93C60B712400,0x5EB7E955BC982FCD

+        DQ      0x69EB88400AE12900,0xC2A163C8AB82234A

+$L$k_sbo:

+        DQ      0xD0D26D176FBDC700,0x15AABF7AC502A878

+        DQ      0xCFE474A55FBB6A00,0x8E1E90D1412B35FA

+

+$L$k_mc_forward:

+        DQ      0x0407060500030201,0x0C0F0E0D080B0A09

+        DQ      0x080B0A0904070605,0x000302010C0F0E0D

+        DQ      0x0C0F0E0D080B0A09,0x0407060500030201

+        DQ      0x000302010C0F0E0D,0x080B0A0904070605

+

+$L$k_mc_backward:

+        DQ      0x0605040702010003,0x0E0D0C0F0A09080B

+        DQ      0x020100030E0D0C0F,0x0A09080B06050407

+        DQ      0x0E0D0C0F0A09080B,0x0605040702010003

+        DQ      0x0A09080B06050407,0x020100030E0D0C0F

+

+$L$k_sr:

+        DQ      0x0706050403020100,0x0F0E0D0C0B0A0908

+        DQ      0x030E09040F0A0500,0x0B06010C07020D08

+        DQ      0x0F060D040B020900,0x070E050C030A0108

+        DQ      0x0B0E0104070A0D00,0x0306090C0F020508

+

+$L$k_rcon:

+        DQ      0x1F8391B9AF9DEEB6,0x702A98084D7C7D81

+

+$L$k_s63:

+        DQ      0x5B5B5B5B5B5B5B5B,0x5B5B5B5B5B5B5B5B

+

+$L$k_opt:

+        DQ      0xFF9F4929D6B66000,0xF7974121DEBE6808

+        DQ      0x01EDBD5150BCEC00,0xE10D5DB1B05C0CE0

+

+$L$k_deskew:

+        DQ      0x07E4A34047A4E300,0x1DFEB95A5DBEF91A

+        DQ      0x5F36B5DC83EA6900,0x2841C2ABF49D1E77

+

+

+

+

+

+$L$k_dksd:

+        DQ      0xFEB91A5DA3E44700,0x0740E3A45A1DBEF9

+        DQ      0x41C277F4B5368300,0x5FDC69EAAB289D1E

+$L$k_dksb:

+        DQ      0x9A4FCA1F8550D500,0x03D653861CC94C99

+        DQ      0x115BEDA7B6FC4A00,0xD993256F7E3482C8

+$L$k_dkse:

+        DQ      0xD5031CCA1FC9D600,0x53859A4C994F5086

+        DQ      0xA23196054FDC7BE8,0xCD5EF96A20B31487

+$L$k_dks9:

+        DQ      0xB6116FC87ED9A700,0x4AED933482255BFC

+        DQ      0x4576516227143300,0x8BB89FACE9DAFDCE

+

+

+

+

+

+$L$k_dipt:

+        DQ      0x0F505B040B545F00,0x154A411E114E451A

+        DQ      0x86E383E660056500,0x12771772F491F194

+

+$L$k_dsb9:

+        DQ      0x851C03539A86D600,0xCAD51F504F994CC9

+        DQ      0xC03B1789ECD74900,0x725E2C9EB2FBA565

+$L$k_dsbd:

+        DQ      0x7D57CCDFE6B1A200,0xF56E9B13882A4439

+        DQ      0x3CE2FAF724C6CB00,0x2931180D15DEEFD3

+$L$k_dsbb:

+        DQ      0xD022649296B44200,0x602646F6B0F2D404

+        DQ      0xC19498A6CD596700,0xF3FF0C3E3255AA6B

+$L$k_dsbe:

+        DQ      0x46F2929626D4D000,0x2242600464B4F6B0

+        DQ      0x0C55A6CDFFAAC100,0x9467F36B98593E32

+$L$k_dsbo:

+        DQ      0x1387EA537EF94000,0xC7AA6DB9D4943E2D

+        DQ      0x12D7560F93441D00,0xCA4B8159D8C58E9C

+DB      86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105

+DB      111,110,32,65,69,83,32,102,111,114,32,120,56,54,95,54

+DB      52,47,83,83,83,69,51,44,32,77,105,107,101,32,72,97

+DB      109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32

+DB      85,110,105,118,101,114,115,105,116,121,41,0

+ALIGN   64

+

+EXTERN  __imp_RtlVirtualUnwind

+

+ALIGN   16

+se_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        mov     rsi,QWORD[8+r9]

+        mov     r11,QWORD[56+r9]

+

+        mov     r10d,DWORD[r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jb      NEAR $L$in_prologue

+

+        mov     rax,QWORD[152+r8]

+

+        mov     r10d,DWORD[4+r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jae     NEAR $L$in_prologue

+

+        lea     rsi,[16+rax]

+        lea     rdi,[512+r8]

+        mov     ecx,20

+        DD      0xa548f3fc

+        lea     rax,[184+rax]

+

+$L$in_prologue:

+        mov     rdi,QWORD[8+rax]

+        mov     rsi,QWORD[16+rax]

+        mov     QWORD[152+r8],rax

+        mov     QWORD[168+r8],rsi

+        mov     QWORD[176+r8],rdi

+

+        mov     rdi,QWORD[40+r9]

+        mov     rsi,r8

+        mov     ecx,154

+        DD      0xa548f3fc

+

+        mov     rsi,r9

+        xor     rcx,rcx

+        mov     rdx,QWORD[8+rsi]

+        mov     r8,QWORD[rsi]

+        mov     r9,QWORD[16+rsi]

+        mov     r10,QWORD[40+rsi]

+        lea     r11,[56+rsi]

+        lea     r12,[24+rsi]

+        mov     QWORD[32+rsp],r10

+        mov     QWORD[40+rsp],r11

+        mov     QWORD[48+rsp],r12

+        mov     QWORD[56+rsp],rcx

+        call    QWORD[__imp_RtlVirtualUnwind]

+

+        mov     eax,1

+        add     rsp,64

+        popfq

+        pop     r15

+        pop     r14

+        pop     r13

+        pop     r12

+        pop     rbp

+        pop     rbx

+        pop     rdi

+        pop     rsi

+        DB      0F3h,0C3h               ;repret

+

+

+section .pdata rdata align=4

+ALIGN   4

+        DD      $L$SEH_begin_vpaes_set_encrypt_key wrt ..imagebase

+        DD      $L$SEH_end_vpaes_set_encrypt_key wrt ..imagebase

+        DD      $L$SEH_info_vpaes_set_encrypt_key wrt ..imagebase

+

+        DD      $L$SEH_begin_vpaes_set_decrypt_key wrt ..imagebase

+        DD      $L$SEH_end_vpaes_set_decrypt_key wrt ..imagebase

+        DD      $L$SEH_info_vpaes_set_decrypt_key wrt ..imagebase

+

+        DD      $L$SEH_begin_vpaes_encrypt wrt ..imagebase

+        DD      $L$SEH_end_vpaes_encrypt wrt ..imagebase

+        DD      $L$SEH_info_vpaes_encrypt wrt ..imagebase

+

+        DD      $L$SEH_begin_vpaes_decrypt wrt ..imagebase

+        DD      $L$SEH_end_vpaes_decrypt wrt ..imagebase

+        DD      $L$SEH_info_vpaes_decrypt wrt ..imagebase

+

+        DD      $L$SEH_begin_vpaes_cbc_encrypt wrt ..imagebase

+        DD      $L$SEH_end_vpaes_cbc_encrypt wrt ..imagebase

+        DD      $L$SEH_info_vpaes_cbc_encrypt wrt ..imagebase

+

+section .xdata rdata align=8

+ALIGN   8

+$L$SEH_info_vpaes_set_encrypt_key:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$enc_key_body wrt ..imagebase,$L$enc_key_epilogue
wrt ..imagebase

+$L$SEH_info_vpaes_set_decrypt_key:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$dec_key_body wrt ..imagebase,$L$dec_key_epilogue
wrt ..imagebase

+$L$SEH_info_vpaes_encrypt:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$enc_body wrt ..imagebase,$L$enc_epilogue wrt
..imagebase

+$L$SEH_info_vpaes_decrypt:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$dec_body wrt ..imagebase,$L$dec_epilogue wrt
..imagebase

+$L$SEH_info_vpaes_cbc_encrypt:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$cbc_body wrt ..imagebase,$L$cbc_epilogue wrt
..imagebase

diff --git a/CryptoPkg/Library/OpensslLib/X64/crypto/modes/ghash-
x86_64.nasm b/CryptoPkg/Library/OpensslLib/X64/crypto/modes/ghash-
x86_64.nasm
new file mode 100644
index 0000000000..60f283d5fb
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/X64/crypto/modes/ghash-
x86_64.nasm
@@ -0,0 +1,1569 @@
+; WARNING: do not edit!

+; Generated from openssl/crypto/modes/asm/ghash-x86_64.pl

+;

+; Copyright 2010-2020 The OpenSSL Project Authors. All Rights
Reserved.

+;

+; Licensed under the OpenSSL license (the "License").  You may not use

+; this file except in compliance with the License.  You can obtain a
copy

+; in the file LICENSE in the source distribution or at

+; https://www.openssl.org/source/license.html

+

+default rel

+%define XMMWORD

+%define YMMWORD

+%define ZMMWORD

+section .text code align=64

+

+EXTERN  OPENSSL_ia32cap_P

+

+global  gcm_gmult_4bit

+

+ALIGN   16

+gcm_gmult_4bit:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_gcm_gmult_4bit:

+        mov     rdi,rcx

+        mov     rsi,rdx

+

+

+

+        push    rbx

+

+        push    rbp

+

+        push    r12

+

+        push    r13

+

+        push    r14

+

+        push    r15

+

+        sub     rsp,280

+

+$L$gmult_prologue:

+

+        movzx   r8,BYTE[15+rdi]

+        lea     r11,[$L$rem_4bit]

+        xor     rax,rax

+        xor     rbx,rbx

+        mov     al,r8b

+        mov     bl,r8b

+        shl     al,4

+        mov     rcx,14

+        mov     r8,QWORD[8+rax*1+rsi]

+        mov     r9,QWORD[rax*1+rsi]

+        and     bl,0xf0

+        mov     rdx,r8

+        jmp     NEAR $L$oop1

+

+ALIGN   16

+$L$oop1:

+        shr     r8,4

+        and     rdx,0xf

+        mov     r10,r9

+        mov     al,BYTE[rcx*1+rdi]

+        shr     r9,4

+        xor     r8,QWORD[8+rbx*1+rsi]

+        shl     r10,60

+        xor     r9,QWORD[rbx*1+rsi]

+        mov     bl,al

+        xor     r9,QWORD[rdx*8+r11]

+        mov     rdx,r8

+        shl     al,4

+        xor     r8,r10

+        dec     rcx

+        js      NEAR $L$break1

+

+        shr     r8,4

+        and     rdx,0xf

+        mov     r10,r9

+        shr     r9,4

+        xor     r8,QWORD[8+rax*1+rsi]

+        shl     r10,60

+        xor     r9,QWORD[rax*1+rsi]

+        and     bl,0xf0

+        xor     r9,QWORD[rdx*8+r11]

+        mov     rdx,r8

+        xor     r8,r10

+        jmp     NEAR $L$oop1

+

+ALIGN   16

+$L$break1:

+        shr     r8,4

+        and     rdx,0xf

+        mov     r10,r9

+        shr     r9,4

+        xor     r8,QWORD[8+rax*1+rsi]

+        shl     r10,60

+        xor     r9,QWORD[rax*1+rsi]

+        and     bl,0xf0

+        xor     r9,QWORD[rdx*8+r11]

+        mov     rdx,r8

+        xor     r8,r10

+

+        shr     r8,4

+        and     rdx,0xf

+        mov     r10,r9

+        shr     r9,4

+        xor     r8,QWORD[8+rbx*1+rsi]

+        shl     r10,60

+        xor     r9,QWORD[rbx*1+rsi]

+        xor     r8,r10

+        xor     r9,QWORD[rdx*8+r11]

+

+        bswap   r8

+        bswap   r9

+        mov     QWORD[8+rdi],r8

+        mov     QWORD[rdi],r9

+

+        lea     rsi,[((280+48))+rsp]

+

+        mov     rbx,QWORD[((-8))+rsi]

+

+        lea     rsp,[rsi]

+

+$L$gmult_epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_gcm_gmult_4bit:

+global  gcm_ghash_4bit

+

+ALIGN   16

+gcm_ghash_4bit:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_gcm_ghash_4bit:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+        mov     rcx,r9

+

+

+

+        push    rbx

+

+        push    rbp

+

+        push    r12

+

+        push    r13

+

+        push    r14

+

+        push    r15

+

+        sub     rsp,280

+

+$L$ghash_prologue:

+        mov     r14,rdx

+        mov     r15,rcx

+        sub     rsi,-128

+        lea     rbp,[((16+128))+rsp]

+        xor     edx,edx

+        mov     r8,QWORD[((0+0-128))+rsi]

+        mov     rax,QWORD[((0+8-128))+rsi]

+        mov     dl,al

+        shr     rax,4

+        mov     r10,r8

+        shr     r8,4

+        mov     r9,QWORD[((16+0-128))+rsi]

+        shl     dl,4

+        mov     rbx,QWORD[((16+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[rsp],dl

+        or      rax,r10

+        mov     dl,bl

+        shr     rbx,4

+        mov     r10,r9

+        shr     r9,4

+        mov     QWORD[rbp],r8

+        mov     r8,QWORD[((32+0-128))+rsi]

+        shl     dl,4

+        mov     QWORD[((0-128))+rbp],rax

+        mov     rax,QWORD[((32+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[1+rsp],dl

+        or      rbx,r10

+        mov     dl,al

+        shr     rax,4

+        mov     r10,r8

+        shr     r8,4

+        mov     QWORD[8+rbp],r9

+        mov     r9,QWORD[((48+0-128))+rsi]

+        shl     dl,4

+        mov     QWORD[((8-128))+rbp],rbx

+        mov     rbx,QWORD[((48+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[2+rsp],dl

+        or      rax,r10

+        mov     dl,bl

+        shr     rbx,4

+        mov     r10,r9

+        shr     r9,4

+        mov     QWORD[16+rbp],r8

+        mov     r8,QWORD[((64+0-128))+rsi]

+        shl     dl,4

+        mov     QWORD[((16-128))+rbp],rax

+        mov     rax,QWORD[((64+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[3+rsp],dl

+        or      rbx,r10

+        mov     dl,al

+        shr     rax,4

+        mov     r10,r8

+        shr     r8,4

+        mov     QWORD[24+rbp],r9

+        mov     r9,QWORD[((80+0-128))+rsi]

+        shl     dl,4

+        mov     QWORD[((24-128))+rbp],rbx

+        mov     rbx,QWORD[((80+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[4+rsp],dl

+        or      rax,r10

+        mov     dl,bl

+        shr     rbx,4

+        mov     r10,r9

+        shr     r9,4

+        mov     QWORD[32+rbp],r8

+        mov     r8,QWORD[((96+0-128))+rsi]

+        shl     dl,4

+        mov     QWORD[((32-128))+rbp],rax

+        mov     rax,QWORD[((96+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[5+rsp],dl

+        or      rbx,r10

+        mov     dl,al

+        shr     rax,4

+        mov     r10,r8

+        shr     r8,4

+        mov     QWORD[40+rbp],r9

+        mov     r9,QWORD[((112+0-128))+rsi]

+        shl     dl,4

+        mov     QWORD[((40-128))+rbp],rbx

+        mov     rbx,QWORD[((112+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[6+rsp],dl

+        or      rax,r10

+        mov     dl,bl

+        shr     rbx,4

+        mov     r10,r9

+        shr     r9,4

+        mov     QWORD[48+rbp],r8

+        mov     r8,QWORD[((128+0-128))+rsi]

+        shl     dl,4

+        mov     QWORD[((48-128))+rbp],rax

+        mov     rax,QWORD[((128+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[7+rsp],dl

+        or      rbx,r10

+        mov     dl,al

+        shr     rax,4

+        mov     r10,r8

+        shr     r8,4

+        mov     QWORD[56+rbp],r9

+        mov     r9,QWORD[((144+0-128))+rsi]

+        shl     dl,4

+        mov     QWORD[((56-128))+rbp],rbx

+        mov     rbx,QWORD[((144+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[8+rsp],dl

+        or      rax,r10

+        mov     dl,bl

+        shr     rbx,4

+        mov     r10,r9

+        shr     r9,4

+        mov     QWORD[64+rbp],r8

+        mov     r8,QWORD[((160+0-128))+rsi]

+        shl     dl,4

+        mov     QWORD[((64-128))+rbp],rax

+        mov     rax,QWORD[((160+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[9+rsp],dl

+        or      rbx,r10

+        mov     dl,al

+        shr     rax,4

+        mov     r10,r8

+        shr     r8,4

+        mov     QWORD[72+rbp],r9

+        mov     r9,QWORD[((176+0-128))+rsi]

+        shl     dl,4

+        mov     QWORD[((72-128))+rbp],rbx

+        mov     rbx,QWORD[((176+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[10+rsp],dl

+        or      rax,r10

+        mov     dl,bl

+        shr     rbx,4

+        mov     r10,r9

+        shr     r9,4

+        mov     QWORD[80+rbp],r8

+        mov     r8,QWORD[((192+0-128))+rsi]

+        shl     dl,4

+        mov     QWORD[((80-128))+rbp],rax

+        mov     rax,QWORD[((192+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[11+rsp],dl

+        or      rbx,r10

+        mov     dl,al

+        shr     rax,4

+        mov     r10,r8

+        shr     r8,4

+        mov     QWORD[88+rbp],r9

+        mov     r9,QWORD[((208+0-128))+rsi]

+        shl     dl,4

+        mov     QWORD[((88-128))+rbp],rbx

+        mov     rbx,QWORD[((208+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[12+rsp],dl

+        or      rax,r10

+        mov     dl,bl

+        shr     rbx,4

+        mov     r10,r9

+        shr     r9,4

+        mov     QWORD[96+rbp],r8

+        mov     r8,QWORD[((224+0-128))+rsi]

+        shl     dl,4

+        mov     QWORD[((96-128))+rbp],rax

+        mov     rax,QWORD[((224+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[13+rsp],dl

+        or      rbx,r10

+        mov     dl,al

+        shr     rax,4

+        mov     r10,r8

+        shr     r8,4

+        mov     QWORD[104+rbp],r9

+        mov     r9,QWORD[((240+0-128))+rsi]

+        shl     dl,4

+        mov     QWORD[((104-128))+rbp],rbx

+        mov     rbx,QWORD[((240+8-128))+rsi]

+        shl     r10,60

+        mov     BYTE[14+rsp],dl

+        or      rax,r10

+        mov     dl,bl

+        shr     rbx,4

+        mov     r10,r9

+        shr     r9,4

+        mov     QWORD[112+rbp],r8

+        shl     dl,4

+        mov     QWORD[((112-128))+rbp],rax

+        shl     r10,60

+        mov     BYTE[15+rsp],dl

+        or      rbx,r10

+        mov     QWORD[120+rbp],r9

+        mov     QWORD[((120-128))+rbp],rbx

+        add     rsi,-128

+        mov     r8,QWORD[8+rdi]

+        mov     r9,QWORD[rdi]

+        add     r15,r14

+        lea     r11,[$L$rem_8bit]

+        jmp     NEAR $L$outer_loop

+ALIGN   16

+$L$outer_loop:

+        xor     r9,QWORD[r14]

+        mov     rdx,QWORD[8+r14]

+        lea     r14,[16+r14]

+        xor     rdx,r8

+        mov     QWORD[rdi],r9

+        mov     QWORD[8+rdi],rdx

+        shr     rdx,32

+        xor     rax,rax

+        rol     edx,8

+        mov     al,dl

+        movzx   ebx,dl

+        shl     al,4

+        shr     ebx,4

+        rol     edx,8

+        mov     r8,QWORD[8+rax*1+rsi]

+        mov     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        movzx   ecx,dl

+        shl     al,4

+        movzx   r12,BYTE[rbx*1+rsp]

+        shr     ecx,4

+        xor     r12,r8

+        mov     r10,r9

+        shr     r8,8

+        movzx   r12,r12b

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rbx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rbx*8+rbp]

+        rol     edx,8

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        xor     r8,r10

+        movzx   r12,WORD[r12*2+r11]

+        movzx   ebx,dl

+        shl     al,4

+        movzx   r13,BYTE[rcx*1+rsp]

+        shr     ebx,4

+        shl     r12,48

+        xor     r13,r8

+        mov     r10,r9

+        xor     r9,r12

+        shr     r8,8

+        movzx   r13,r13b

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rcx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rcx*8+rbp]

+        rol     edx,8

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        xor     r8,r10

+        movzx   r13,WORD[r13*2+r11]

+        movzx   ecx,dl

+        shl     al,4

+        movzx   r12,BYTE[rbx*1+rsp]

+        shr     ecx,4

+        shl     r13,48

+        xor     r12,r8

+        mov     r10,r9

+        xor     r9,r13

+        shr     r8,8

+        movzx   r12,r12b

+        mov     edx,DWORD[8+rdi]

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rbx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rbx*8+rbp]

+        rol     edx,8

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        xor     r8,r10

+        movzx   r12,WORD[r12*2+r11]

+        movzx   ebx,dl

+        shl     al,4

+        movzx   r13,BYTE[rcx*1+rsp]

+        shr     ebx,4

+        shl     r12,48

+        xor     r13,r8

+        mov     r10,r9

+        xor     r9,r12

+        shr     r8,8

+        movzx   r13,r13b

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rcx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rcx*8+rbp]

+        rol     edx,8

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        xor     r8,r10

+        movzx   r13,WORD[r13*2+r11]

+        movzx   ecx,dl

+        shl     al,4

+        movzx   r12,BYTE[rbx*1+rsp]

+        shr     ecx,4

+        shl     r13,48

+        xor     r12,r8

+        mov     r10,r9

+        xor     r9,r13

+        shr     r8,8

+        movzx   r12,r12b

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rbx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rbx*8+rbp]

+        rol     edx,8

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        xor     r8,r10

+        movzx   r12,WORD[r12*2+r11]

+        movzx   ebx,dl

+        shl     al,4

+        movzx   r13,BYTE[rcx*1+rsp]

+        shr     ebx,4

+        shl     r12,48

+        xor     r13,r8

+        mov     r10,r9

+        xor     r9,r12

+        shr     r8,8

+        movzx   r13,r13b

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rcx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rcx*8+rbp]

+        rol     edx,8

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        xor     r8,r10

+        movzx   r13,WORD[r13*2+r11]

+        movzx   ecx,dl

+        shl     al,4

+        movzx   r12,BYTE[rbx*1+rsp]

+        shr     ecx,4

+        shl     r13,48

+        xor     r12,r8

+        mov     r10,r9

+        xor     r9,r13

+        shr     r8,8

+        movzx   r12,r12b

+        mov     edx,DWORD[4+rdi]

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rbx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rbx*8+rbp]

+        rol     edx,8

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        xor     r8,r10

+        movzx   r12,WORD[r12*2+r11]

+        movzx   ebx,dl

+        shl     al,4

+        movzx   r13,BYTE[rcx*1+rsp]

+        shr     ebx,4

+        shl     r12,48

+        xor     r13,r8

+        mov     r10,r9

+        xor     r9,r12

+        shr     r8,8

+        movzx   r13,r13b

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rcx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rcx*8+rbp]

+        rol     edx,8

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        xor     r8,r10

+        movzx   r13,WORD[r13*2+r11]

+        movzx   ecx,dl

+        shl     al,4

+        movzx   r12,BYTE[rbx*1+rsp]

+        shr     ecx,4

+        shl     r13,48

+        xor     r12,r8

+        mov     r10,r9

+        xor     r9,r13

+        shr     r8,8

+        movzx   r12,r12b

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rbx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rbx*8+rbp]

+        rol     edx,8

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        xor     r8,r10

+        movzx   r12,WORD[r12*2+r11]

+        movzx   ebx,dl

+        shl     al,4

+        movzx   r13,BYTE[rcx*1+rsp]

+        shr     ebx,4

+        shl     r12,48

+        xor     r13,r8

+        mov     r10,r9

+        xor     r9,r12

+        shr     r8,8

+        movzx   r13,r13b

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rcx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rcx*8+rbp]

+        rol     edx,8

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        xor     r8,r10

+        movzx   r13,WORD[r13*2+r11]

+        movzx   ecx,dl

+        shl     al,4

+        movzx   r12,BYTE[rbx*1+rsp]

+        shr     ecx,4

+        shl     r13,48

+        xor     r12,r8

+        mov     r10,r9

+        xor     r9,r13

+        shr     r8,8

+        movzx   r12,r12b

+        mov     edx,DWORD[rdi]

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rbx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rbx*8+rbp]

+        rol     edx,8

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        xor     r8,r10

+        movzx   r12,WORD[r12*2+r11]

+        movzx   ebx,dl

+        shl     al,4

+        movzx   r13,BYTE[rcx*1+rsp]

+        shr     ebx,4

+        shl     r12,48

+        xor     r13,r8

+        mov     r10,r9

+        xor     r9,r12

+        shr     r8,8

+        movzx   r13,r13b

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rcx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rcx*8+rbp]

+        rol     edx,8

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        xor     r8,r10

+        movzx   r13,WORD[r13*2+r11]

+        movzx   ecx,dl

+        shl     al,4

+        movzx   r12,BYTE[rbx*1+rsp]

+        shr     ecx,4

+        shl     r13,48

+        xor     r12,r8

+        mov     r10,r9

+        xor     r9,r13

+        shr     r8,8

+        movzx   r12,r12b

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rbx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rbx*8+rbp]

+        rol     edx,8

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        xor     r8,r10

+        movzx   r12,WORD[r12*2+r11]

+        movzx   ebx,dl

+        shl     al,4

+        movzx   r13,BYTE[rcx*1+rsp]

+        shr     ebx,4

+        shl     r12,48

+        xor     r13,r8

+        mov     r10,r9

+        xor     r9,r12

+        shr     r8,8

+        movzx   r13,r13b

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rcx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rcx*8+rbp]

+        rol     edx,8

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        mov     al,dl

+        xor     r8,r10

+        movzx   r13,WORD[r13*2+r11]

+        movzx   ecx,dl

+        shl     al,4

+        movzx   r12,BYTE[rbx*1+rsp]

+        and     ecx,240

+        shl     r13,48

+        xor     r12,r8

+        mov     r10,r9

+        xor     r9,r13

+        shr     r8,8

+        movzx   r12,r12b

+        mov     edx,DWORD[((-4))+rdi]

+        shr     r9,8

+        xor     r8,QWORD[((-128))+rbx*8+rbp]

+        shl     r10,56

+        xor     r9,QWORD[rbx*8+rbp]

+        movzx   r12,WORD[r12*2+r11]

+        xor     r8,QWORD[8+rax*1+rsi]

+        xor     r9,QWORD[rax*1+rsi]

+        shl     r12,48

+        xor     r8,r10

+        xor     r9,r12

+        movzx   r13,r8b

+        shr     r8,4

+        mov     r10,r9

+        shl     r13b,4

+        shr     r9,4

+        xor     r8,QWORD[8+rcx*1+rsi]

+        movzx   r13,WORD[r13*2+r11]

+        shl     r10,60

+        xor     r9,QWORD[rcx*1+rsi]

+        xor     r8,r10

+        shl     r13,48

+        bswap   r8

+        xor     r9,r13

+        bswap   r9

+        cmp     r14,r15

+        jb      NEAR $L$outer_loop

+        mov     QWORD[8+rdi],r8

+        mov     QWORD[rdi],r9

+

+        lea     rsi,[((280+48))+rsp]

+

+        mov     r15,QWORD[((-48))+rsi]

+

+        mov     r14,QWORD[((-40))+rsi]

+

+        mov     r13,QWORD[((-32))+rsi]

+

+        mov     r12,QWORD[((-24))+rsi]

+

+        mov     rbp,QWORD[((-16))+rsi]

+

+        mov     rbx,QWORD[((-8))+rsi]

+

+        lea     rsp,[rsi]

+

+$L$ghash_epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_gcm_ghash_4bit:

+global  gcm_init_clmul

+

+ALIGN   16

+gcm_init_clmul:

+

+$L$_init_clmul:

+$L$SEH_begin_gcm_init_clmul:

+

+DB      0x48,0x83,0xec,0x18

+DB      0x0f,0x29,0x34,0x24

+        movdqu  xmm2,XMMWORD[rdx]

+        pshufd  xmm2,xmm2,78

+

+

+        pshufd  xmm4,xmm2,255

+        movdqa  xmm3,xmm2

+        psllq   xmm2,1

+        pxor    xmm5,xmm5

+        psrlq   xmm3,63

+        pcmpgtd xmm5,xmm4

+        pslldq  xmm3,8

+        por     xmm2,xmm3

+

+

+        pand    xmm5,XMMWORD[$L$0x1c2_polynomial]

+        pxor    xmm2,xmm5

+

+

+        pshufd  xmm6,xmm2,78

+        movdqa  xmm0,xmm2

+        pxor    xmm6,xmm2

+        movdqa  xmm1,xmm0

+        pshufd  xmm3,xmm0,78

+        pxor    xmm3,xmm0

+DB      102,15,58,68,194,0

+DB      102,15,58,68,202,17

+DB      102,15,58,68,222,0

+        pxor    xmm3,xmm0

+        pxor    xmm3,xmm1

+

+        movdqa  xmm4,xmm3

+        psrldq  xmm3,8

+        pslldq  xmm4,8

+        pxor    xmm1,xmm3

+        pxor    xmm0,xmm4

+

+        movdqa  xmm4,xmm0

+        movdqa  xmm3,xmm0

+        psllq   xmm0,5

+        pxor    xmm3,xmm0

+        psllq   xmm0,1

+        pxor    xmm0,xmm3

+        psllq   xmm0,57

+        movdqa  xmm3,xmm0

+        pslldq  xmm0,8

+        psrldq  xmm3,8

+        pxor    xmm0,xmm4

+        pxor    xmm1,xmm3

+

+

+        movdqa  xmm4,xmm0

+        psrlq   xmm0,1

+        pxor    xmm1,xmm4

+        pxor    xmm4,xmm0

+        psrlq   xmm0,5

+        pxor    xmm0,xmm4

+        psrlq   xmm0,1

+        pxor    xmm0,xmm1

+        pshufd  xmm3,xmm2,78

+        pshufd  xmm4,xmm0,78

+        pxor    xmm3,xmm2

+        movdqu  XMMWORD[rcx],xmm2

+        pxor    xmm4,xmm0

+        movdqu  XMMWORD[16+rcx],xmm0

+DB      102,15,58,15,227,8

+        movdqu  XMMWORD[32+rcx],xmm4

+        movdqa  xmm1,xmm0

+        pshufd  xmm3,xmm0,78

+        pxor    xmm3,xmm0

+DB      102,15,58,68,194,0

+DB      102,15,58,68,202,17

+DB      102,15,58,68,222,0

+        pxor    xmm3,xmm0

+        pxor    xmm3,xmm1

+

+        movdqa  xmm4,xmm3

+        psrldq  xmm3,8

+        pslldq  xmm4,8

+        pxor    xmm1,xmm3

+        pxor    xmm0,xmm4

+

+        movdqa  xmm4,xmm0

+        movdqa  xmm3,xmm0

+        psllq   xmm0,5

+        pxor    xmm3,xmm0

+        psllq   xmm0,1

+        pxor    xmm0,xmm3

+        psllq   xmm0,57

+        movdqa  xmm3,xmm0

+        pslldq  xmm0,8

+        psrldq  xmm3,8

+        pxor    xmm0,xmm4

+        pxor    xmm1,xmm3

+

+

+        movdqa  xmm4,xmm0

+        psrlq   xmm0,1

+        pxor    xmm1,xmm4

+        pxor    xmm4,xmm0

+        psrlq   xmm0,5

+        pxor    xmm0,xmm4

+        psrlq   xmm0,1

+        pxor    xmm0,xmm1

+        movdqa  xmm5,xmm0

+        movdqa  xmm1,xmm0

+        pshufd  xmm3,xmm0,78

+        pxor    xmm3,xmm0

+DB      102,15,58,68,194,0

+DB      102,15,58,68,202,17

+DB      102,15,58,68,222,0

+        pxor    xmm3,xmm0

+        pxor    xmm3,xmm1

+

+        movdqa  xmm4,xmm3

+        psrldq  xmm3,8

+        pslldq  xmm4,8

+        pxor    xmm1,xmm3

+        pxor    xmm0,xmm4

+

+        movdqa  xmm4,xmm0

+        movdqa  xmm3,xmm0

+        psllq   xmm0,5

+        pxor    xmm3,xmm0

+        psllq   xmm0,1

+        pxor    xmm0,xmm3

+        psllq   xmm0,57

+        movdqa  xmm3,xmm0

+        pslldq  xmm0,8

+        psrldq  xmm3,8

+        pxor    xmm0,xmm4

+        pxor    xmm1,xmm3

+

+

+        movdqa  xmm4,xmm0

+        psrlq   xmm0,1

+        pxor    xmm1,xmm4

+        pxor    xmm4,xmm0

+        psrlq   xmm0,5

+        pxor    xmm0,xmm4

+        psrlq   xmm0,1

+        pxor    xmm0,xmm1

+        pshufd  xmm3,xmm5,78

+        pshufd  xmm4,xmm0,78

+        pxor    xmm3,xmm5

+        movdqu  XMMWORD[48+rcx],xmm5

+        pxor    xmm4,xmm0

+        movdqu  XMMWORD[64+rcx],xmm0

+DB      102,15,58,15,227,8

+        movdqu  XMMWORD[80+rcx],xmm4

+        movaps  xmm6,XMMWORD[rsp]

+        lea     rsp,[24+rsp]

+$L$SEH_end_gcm_init_clmul:

+        DB      0F3h,0C3h               ;repret

+

+

+global  gcm_gmult_clmul

+

+ALIGN   16

+gcm_gmult_clmul:

+

+$L$_gmult_clmul:

+        movdqu  xmm0,XMMWORD[rcx]

+        movdqa  xmm5,XMMWORD[$L$bswap_mask]

+        movdqu  xmm2,XMMWORD[rdx]

+        movdqu  xmm4,XMMWORD[32+rdx]

+DB      102,15,56,0,197

+        movdqa  xmm1,xmm0

+        pshufd  xmm3,xmm0,78

+        pxor    xmm3,xmm0

+DB      102,15,58,68,194,0

+DB      102,15,58,68,202,17

+DB      102,15,58,68,220,0

+        pxor    xmm3,xmm0

+        pxor    xmm3,xmm1

+

+        movdqa  xmm4,xmm3

+        psrldq  xmm3,8

+        pslldq  xmm4,8

+        pxor    xmm1,xmm3

+        pxor    xmm0,xmm4

+

+        movdqa  xmm4,xmm0

+        movdqa  xmm3,xmm0

+        psllq   xmm0,5

+        pxor    xmm3,xmm0

+        psllq   xmm0,1

+        pxor    xmm0,xmm3

+        psllq   xmm0,57

+        movdqa  xmm3,xmm0

+        pslldq  xmm0,8

+        psrldq  xmm3,8

+        pxor    xmm0,xmm4

+        pxor    xmm1,xmm3

+

+

+        movdqa  xmm4,xmm0

+        psrlq   xmm0,1

+        pxor    xmm1,xmm4

+        pxor    xmm4,xmm0

+        psrlq   xmm0,5

+        pxor    xmm0,xmm4

+        psrlq   xmm0,1

+        pxor    xmm0,xmm1

+DB      102,15,56,0,197

+        movdqu  XMMWORD[rcx],xmm0

+        DB      0F3h,0C3h               ;repret

+

+

+global  gcm_ghash_clmul

+

+ALIGN   32

+gcm_ghash_clmul:

+

+$L$_ghash_clmul:

+        lea     rax,[((-136))+rsp]

+$L$SEH_begin_gcm_ghash_clmul:

+

+DB      0x48,0x8d,0x60,0xe0

+DB      0x0f,0x29,0x70,0xe0

+DB      0x0f,0x29,0x78,0xf0

+DB      0x44,0x0f,0x29,0x00

+DB      0x44,0x0f,0x29,0x48,0x10

+DB      0x44,0x0f,0x29,0x50,0x20

+DB      0x44,0x0f,0x29,0x58,0x30

+DB      0x44,0x0f,0x29,0x60,0x40

+DB      0x44,0x0f,0x29,0x68,0x50

+DB      0x44,0x0f,0x29,0x70,0x60

+DB      0x44,0x0f,0x29,0x78,0x70

+        movdqa  xmm10,XMMWORD[$L$bswap_mask]

+

+        movdqu  xmm0,XMMWORD[rcx]

+        movdqu  xmm2,XMMWORD[rdx]

+        movdqu  xmm7,XMMWORD[32+rdx]

+DB      102,65,15,56,0,194

+

+        sub     r9,0x10

+        jz      NEAR $L$odd_tail

+

+        movdqu  xmm6,XMMWORD[16+rdx]

+        mov     eax,DWORD[((OPENSSL_ia32cap_P+4))]

+        cmp     r9,0x30

+        jb      NEAR $L$skip4x

+

+        and     eax,71303168

+        cmp     eax,4194304

+        je      NEAR $L$skip4x

+

+        sub     r9,0x30

+        mov     rax,0xA040608020C0E000

+        movdqu  xmm14,XMMWORD[48+rdx]

+        movdqu  xmm15,XMMWORD[64+rdx]

+

+

+

+

+        movdqu  xmm3,XMMWORD[48+r8]

+        movdqu  xmm11,XMMWORD[32+r8]

+DB      102,65,15,56,0,218

+DB      102,69,15,56,0,218

+        movdqa  xmm5,xmm3

+        pshufd  xmm4,xmm3,78

+        pxor    xmm4,xmm3

+DB      102,15,58,68,218,0

+DB      102,15,58,68,234,17

+DB      102,15,58,68,231,0

+

+        movdqa  xmm13,xmm11

+        pshufd  xmm12,xmm11,78

+        pxor    xmm12,xmm11

+DB      102,68,15,58,68,222,0

+DB      102,68,15,58,68,238,17

+DB      102,68,15,58,68,231,16

+        xorps   xmm3,xmm11

+        xorps   xmm5,xmm13

+        movups  xmm7,XMMWORD[80+rdx]

+        xorps   xmm4,xmm12

+

+        movdqu  xmm11,XMMWORD[16+r8]

+        movdqu  xmm8,XMMWORD[r8]

+DB      102,69,15,56,0,218

+DB      102,69,15,56,0,194

+        movdqa  xmm13,xmm11

+        pshufd  xmm12,xmm11,78

+        pxor    xmm0,xmm8

+        pxor    xmm12,xmm11

+DB      102,69,15,58,68,222,0

+        movdqa  xmm1,xmm0

+        pshufd  xmm8,xmm0,78

+        pxor    xmm8,xmm0

+DB      102,69,15,58,68,238,17

+DB      102,68,15,58,68,231,0

+        xorps   xmm3,xmm11

+        xorps   xmm5,xmm13

+

+        lea     r8,[64+r8]

+        sub     r9,0x40

+        jc      NEAR $L$tail4x

+

+        jmp     NEAR $L$mod4_loop

+ALIGN   32

+$L$mod4_loop:

+DB      102,65,15,58,68,199,0

+        xorps   xmm4,xmm12

+        movdqu  xmm11,XMMWORD[48+r8]

+DB      102,69,15,56,0,218

+DB      102,65,15,58,68,207,17

+        xorps   xmm0,xmm3

+        movdqu  xmm3,XMMWORD[32+r8]

+        movdqa  xmm13,xmm11

+DB      102,68,15,58,68,199,16

+        pshufd  xmm12,xmm11,78

+        xorps   xmm1,xmm5

+        pxor    xmm12,xmm11

+DB      102,65,15,56,0,218

+        movups  xmm7,XMMWORD[32+rdx]

+        xorps   xmm8,xmm4

+DB      102,68,15,58,68,218,0

+        pshufd  xmm4,xmm3,78

+

+        pxor    xmm8,xmm0

+        movdqa  xmm5,xmm3

+        pxor    xmm8,xmm1

+        pxor    xmm4,xmm3

+        movdqa  xmm9,xmm8

+DB      102,68,15,58,68,234,17

+        pslldq  xmm8,8

+        psrldq  xmm9,8

+        pxor    xmm0,xmm8

+        movdqa  xmm8,XMMWORD[$L$7_mask]

+        pxor    xmm1,xmm9

+DB      102,76,15,110,200

+

+        pand    xmm8,xmm0

+DB      102,69,15,56,0,200

+        pxor    xmm9,xmm0

+DB      102,68,15,58,68,231,0

+        psllq   xmm9,57

+        movdqa  xmm8,xmm9

+        pslldq  xmm9,8

+DB      102,15,58,68,222,0

+        psrldq  xmm8,8

+        pxor    xmm0,xmm9

+        pxor    xmm1,xmm8

+        movdqu  xmm8,XMMWORD[r8]

+

+        movdqa  xmm9,xmm0

+        psrlq   xmm0,1

+DB      102,15,58,68,238,17

+        xorps   xmm3,xmm11

+        movdqu  xmm11,XMMWORD[16+r8]

+DB      102,69,15,56,0,218

+DB      102,15,58,68,231,16

+        xorps   xmm5,xmm13

+        movups  xmm7,XMMWORD[80+rdx]

+DB      102,69,15,56,0,194

+        pxor    xmm1,xmm9

+        pxor    xmm9,xmm0

+        psrlq   xmm0,5

+

+        movdqa  xmm13,xmm11

+        pxor    xmm4,xmm12

+        pshufd  xmm12,xmm11,78

+        pxor    xmm0,xmm9

+        pxor    xmm1,xmm8

+        pxor    xmm12,xmm11

+DB      102,69,15,58,68,222,0

+        psrlq   xmm0,1

+        pxor    xmm0,xmm1

+        movdqa  xmm1,xmm0

+DB      102,69,15,58,68,238,17

+        xorps   xmm3,xmm11

+        pshufd  xmm8,xmm0,78

+        pxor    xmm8,xmm0

+

+DB      102,68,15,58,68,231,0

+        xorps   xmm5,xmm13

+

+        lea     r8,[64+r8]

+        sub     r9,0x40

+        jnc     NEAR $L$mod4_loop

+

+$L$tail4x:

+DB      102,65,15,58,68,199,0

+DB      102,65,15,58,68,207,17

+DB      102,68,15,58,68,199,16

+        xorps   xmm4,xmm12

+        xorps   xmm0,xmm3

+        xorps   xmm1,xmm5

+        pxor    xmm1,xmm0

+        pxor    xmm8,xmm4

+

+        pxor    xmm8,xmm1

+        pxor    xmm1,xmm0

+

+        movdqa  xmm9,xmm8

+        psrldq  xmm8,8

+        pslldq  xmm9,8

+        pxor    xmm1,xmm8

+        pxor    xmm0,xmm9

+

+        movdqa  xmm4,xmm0

+        movdqa  xmm3,xmm0

+        psllq   xmm0,5

+        pxor    xmm3,xmm0

+        psllq   xmm0,1

+        pxor    xmm0,xmm3

+        psllq   xmm0,57

+        movdqa  xmm3,xmm0

+        pslldq  xmm0,8

+        psrldq  xmm3,8

+        pxor    xmm0,xmm4

+        pxor    xmm1,xmm3

+

+

+        movdqa  xmm4,xmm0

+        psrlq   xmm0,1

+        pxor    xmm1,xmm4

+        pxor    xmm4,xmm0

+        psrlq   xmm0,5

+        pxor    xmm0,xmm4

+        psrlq   xmm0,1

+        pxor    xmm0,xmm1

+        add     r9,0x40

+        jz      NEAR $L$done

+        movdqu  xmm7,XMMWORD[32+rdx]

+        sub     r9,0x10

+        jz      NEAR $L$odd_tail

+$L$skip4x:

+

+

+

+

+

+        movdqu  xmm8,XMMWORD[r8]

+        movdqu  xmm3,XMMWORD[16+r8]

+DB      102,69,15,56,0,194

+DB      102,65,15,56,0,218

+        pxor    xmm0,xmm8

+

+        movdqa  xmm5,xmm3

+        pshufd  xmm4,xmm3,78

+        pxor    xmm4,xmm3

+DB      102,15,58,68,218,0

+DB      102,15,58,68,234,17

+DB      102,15,58,68,231,0

+

+        lea     r8,[32+r8]

+        nop

+        sub     r9,0x20

+        jbe     NEAR $L$even_tail

+        nop

+        jmp     NEAR $L$mod_loop

+

+ALIGN   32

+$L$mod_loop:

+        movdqa  xmm1,xmm0

+        movdqa  xmm8,xmm4

+        pshufd  xmm4,xmm0,78

+        pxor    xmm4,xmm0

+

+DB      102,15,58,68,198,0

+DB      102,15,58,68,206,17

+DB      102,15,58,68,231,16

+

+        pxor    xmm0,xmm3

+        pxor    xmm1,xmm5

+        movdqu  xmm9,XMMWORD[r8]

+        pxor    xmm8,xmm0

+DB      102,69,15,56,0,202

+        movdqu  xmm3,XMMWORD[16+r8]

+

+        pxor    xmm8,xmm1

+        pxor    xmm1,xmm9

+        pxor    xmm4,xmm8

+DB      102,65,15,56,0,218

+        movdqa  xmm8,xmm4

+        psrldq  xmm8,8

+        pslldq  xmm4,8

+        pxor    xmm1,xmm8

+        pxor    xmm0,xmm4

+

+        movdqa  xmm5,xmm3

+

+        movdqa  xmm9,xmm0

+        movdqa  xmm8,xmm0

+        psllq   xmm0,5

+        pxor    xmm8,xmm0

+DB      102,15,58,68,218,0

+        psllq   xmm0,1

+        pxor    xmm0,xmm8

+        psllq   xmm0,57

+        movdqa  xmm8,xmm0

+        pslldq  xmm0,8

+        psrldq  xmm8,8

+        pxor    xmm0,xmm9

+        pshufd  xmm4,xmm5,78

+        pxor    xmm1,xmm8

+        pxor    xmm4,xmm5

+

+        movdqa  xmm9,xmm0

+        psrlq   xmm0,1

+DB      102,15,58,68,234,17

+        pxor    xmm1,xmm9

+        pxor    xmm9,xmm0

+        psrlq   xmm0,5

+        pxor    xmm0,xmm9

+        lea     r8,[32+r8]

+        psrlq   xmm0,1

+DB      102,15,58,68,231,0

+        pxor    xmm0,xmm1

+

+        sub     r9,0x20

+        ja      NEAR $L$mod_loop

+

+$L$even_tail:

+        movdqa  xmm1,xmm0

+        movdqa  xmm8,xmm4

+        pshufd  xmm4,xmm0,78

+        pxor    xmm4,xmm0

+

+DB      102,15,58,68,198,0

+DB      102,15,58,68,206,17

+DB      102,15,58,68,231,16

+

+        pxor    xmm0,xmm3

+        pxor    xmm1,xmm5

+        pxor    xmm8,xmm0

+        pxor    xmm8,xmm1

+        pxor    xmm4,xmm8

+        movdqa  xmm8,xmm4

+        psrldq  xmm8,8

+        pslldq  xmm4,8

+        pxor    xmm1,xmm8

+        pxor    xmm0,xmm4

+

+        movdqa  xmm4,xmm0

+        movdqa  xmm3,xmm0

+        psllq   xmm0,5

+        pxor    xmm3,xmm0

+        psllq   xmm0,1

+        pxor    xmm0,xmm3

+        psllq   xmm0,57

+        movdqa  xmm3,xmm0

+        pslldq  xmm0,8

+        psrldq  xmm3,8

+        pxor    xmm0,xmm4

+        pxor    xmm1,xmm3

+

+

+        movdqa  xmm4,xmm0

+        psrlq   xmm0,1

+        pxor    xmm1,xmm4

+        pxor    xmm4,xmm0

+        psrlq   xmm0,5

+        pxor    xmm0,xmm4

+        psrlq   xmm0,1

+        pxor    xmm0,xmm1

+        test    r9,r9

+        jnz     NEAR $L$done

+

+$L$odd_tail:

+        movdqu  xmm8,XMMWORD[r8]

+DB      102,69,15,56,0,194

+        pxor    xmm0,xmm8

+        movdqa  xmm1,xmm0

+        pshufd  xmm3,xmm0,78

+        pxor    xmm3,xmm0

+DB      102,15,58,68,194,0

+DB      102,15,58,68,202,17

+DB      102,15,58,68,223,0

+        pxor    xmm3,xmm0

+        pxor    xmm3,xmm1

+

+        movdqa  xmm4,xmm3

+        psrldq  xmm3,8

+        pslldq  xmm4,8

+        pxor    xmm1,xmm3

+        pxor    xmm0,xmm4

+

+        movdqa  xmm4,xmm0

+        movdqa  xmm3,xmm0

+        psllq   xmm0,5

+        pxor    xmm3,xmm0

+        psllq   xmm0,1

+        pxor    xmm0,xmm3

+        psllq   xmm0,57

+        movdqa  xmm3,xmm0

+        pslldq  xmm0,8

+        psrldq  xmm3,8

+        pxor    xmm0,xmm4

+        pxor    xmm1,xmm3

+

+

+        movdqa  xmm4,xmm0

+        psrlq   xmm0,1

+        pxor    xmm1,xmm4

+        pxor    xmm4,xmm0

+        psrlq   xmm0,5

+        pxor    xmm0,xmm4

+        psrlq   xmm0,1

+        pxor    xmm0,xmm1

+$L$done:

+DB      102,65,15,56,0,194

+        movdqu  XMMWORD[rcx],xmm0

+        movaps  xmm6,XMMWORD[rsp]

+        movaps  xmm7,XMMWORD[16+rsp]

+        movaps  xmm8,XMMWORD[32+rsp]

+        movaps  xmm9,XMMWORD[48+rsp]

+        movaps  xmm10,XMMWORD[64+rsp]

+        movaps  xmm11,XMMWORD[80+rsp]

+        movaps  xmm12,XMMWORD[96+rsp]

+        movaps  xmm13,XMMWORD[112+rsp]

+        movaps  xmm14,XMMWORD[128+rsp]

+        movaps  xmm15,XMMWORD[144+rsp]

+        lea     rsp,[168+rsp]

+$L$SEH_end_gcm_ghash_clmul:

+        DB      0F3h,0C3h               ;repret

+

+

+global  gcm_init_avx

+

+ALIGN   32

+gcm_init_avx:

+

+        jmp     NEAR $L$_init_clmul

+

+

+global  gcm_gmult_avx

+

+ALIGN   32

+gcm_gmult_avx:

+

+        jmp     NEAR $L$_gmult_clmul

+

+

+global  gcm_ghash_avx

+

+ALIGN   32

+gcm_ghash_avx:

+

+        jmp     NEAR $L$_ghash_clmul

+

+

+ALIGN   64

+$L$bswap_mask:

+DB      15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0

+$L$0x1c2_polynomial:

+DB      1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2

+$L$7_mask:

+        DD      7,0,7,0

+$L$7_mask_poly:

+        DD      7,0,450,0

+ALIGN   64

+

+$L$rem_4bit:

+        DD      0,0,0,471859200,0,943718400,0,610271232

+        DD      0,1887436800,0,1822425088,0,1220542464,0,1423966208

+        DD      0,3774873600,0,4246732800,0,3644850176,0,3311403008

+        DD      0,2441084928,0,2376073216,0,2847932416,0,3051356160

+

+$L$rem_8bit:

+        DW
0x0000,0x01C2,0x0384,0x0246,0x0708,0x06CA,0x048C,0x054E

+        DW
0x0E10,0x0FD2,0x0D94,0x0C56,0x0918,0x08DA,0x0A9C,0x0B5E

+        DW
0x1C20,0x1DE2,0x1FA4,0x1E66,0x1B28,0x1AEA,0x18AC,0x196E

+        DW
0x1230,0x13F2,0x11B4,0x1076,0x1538,0x14FA,0x16BC,0x177E

+        DW
0x3840,0x3982,0x3BC4,0x3A06,0x3F48,0x3E8A,0x3CCC,0x3D0E

+        DW
0x3650,0x3792,0x35D4,0x3416,0x3158,0x309A,0x32DC,0x331E

+        DW
0x2460,0x25A2,0x27E4,0x2626,0x2368,0x22AA,0x20EC,0x212E

+        DW
0x2A70,0x2BB2,0x29F4,0x2836,0x2D78,0x2CBA,0x2EFC,0x2F3E

+        DW
0x7080,0x7142,0x7304,0x72C6,0x7788,0x764A,0x740C,0x75CE

+        DW
0x7E90,0x7F52,0x7D14,0x7CD6,0x7998,0x785A,0x7A1C,0x7BDE

+        DW
0x6CA0,0x6D62,0x6F24,0x6EE6,0x6BA8,0x6A6A,0x682C,0x69EE

+        DW
0x62B0,0x6372,0x6134,0x60F6,0x65B8,0x647A,0x663C,0x67FE

+        DW
0x48C0,0x4902,0x4B44,0x4A86,0x4FC8,0x4E0A,0x4C4C,0x4D8E

+        DW
0x46D0,0x4712,0x4554,0x4496,0x41D8,0x401A,0x425C,0x439E

+        DW
0x54E0,0x5522,0x5764,0x56A6,0x53E8,0x522A,0x506C,0x51AE

+        DW
0x5AF0,0x5B32,0x5974,0x58B6,0x5DF8,0x5C3A,0x5E7C,0x5FBE

+        DW
0xE100,0xE0C2,0xE284,0xE346,0xE608,0xE7CA,0xE58C,0xE44E

+        DW
0xEF10,0xEED2,0xEC94,0xED56,0xE818,0xE9DA,0xEB9C,0xEA5E

+        DW
0xFD20,0xFCE2,0xFEA4,0xFF66,0xFA28,0xFBEA,0xF9AC,0xF86E

+        DW
0xF330,0xF2F2,0xF0B4,0xF176,0xF438,0xF5FA,0xF7BC,0xF67E

+        DW
0xD940,0xD882,0xDAC4,0xDB06,0xDE48,0xDF8A,0xDDCC,0xDC0E

+        DW
0xD750,0xD692,0xD4D4,0xD516,0xD058,0xD19A,0xD3DC,0xD21E

+        DW
0xC560,0xC4A2,0xC6E4,0xC726,0xC268,0xC3AA,0xC1EC,0xC02E

+        DW
0xCB70,0xCAB2,0xC8F4,0xC936,0xCC78,0xCDBA,0xCFFC,0xCE3E

+        DW
0x9180,0x9042,0x9204,0x93C6,0x9688,0x974A,0x950C,0x94CE

+        DW
0x9F90,0x9E52,0x9C14,0x9DD6,0x9898,0x995A,0x9B1C,0x9ADE

+        DW
0x8DA0,0x8C62,0x8E24,0x8FE6,0x8AA8,0x8B6A,0x892C,0x88EE

+        DW
0x83B0,0x8272,0x8034,0x81F6,0x84B8,0x857A,0x873C,0x86FE

+        DW
0xA9C0,0xA802,0xAA44,0xAB86,0xAEC8,0xAF0A,0xAD4C,0xAC8E

+        DW
0xA7D0,0xA612,0xA454,0xA596,0xA0D8,0xA11A,0xA35C,0xA29E

+        DW
0xB5E0,0xB422,0xB664,0xB7A6,0xB2E8,0xB32A,0xB16C,0xB0AE

+        DW
0xBBF0,0xBA32,0xB874,0xB9B6,0xBCF8,0xBD3A,0xBF7C,0xBEBE

+

+DB      71,72,65,83,72,32,102,111,114,32,120,56,54,95,54,52

+DB      44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32

+DB      60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111

+DB      114,103,62,0

+ALIGN   64

+EXTERN  __imp_RtlVirtualUnwind

+

+ALIGN   16

+se_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        mov     rsi,QWORD[8+r9]

+        mov     r11,QWORD[56+r9]

+

+        mov     r10d,DWORD[r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jb      NEAR $L$in_prologue

+

+        mov     rax,QWORD[152+r8]

+

+        mov     r10d,DWORD[4+r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jae     NEAR $L$in_prologue

+

+        lea     rax,[((48+280))+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+        mov     rbp,QWORD[((-16))+rax]

+        mov     r12,QWORD[((-24))+rax]

+        mov     r13,QWORD[((-32))+rax]

+        mov     r14,QWORD[((-40))+rax]

+        mov     r15,QWORD[((-48))+rax]

+        mov     QWORD[144+r8],rbx

+        mov     QWORD[160+r8],rbp

+        mov     QWORD[216+r8],r12

+        mov     QWORD[224+r8],r13

+        mov     QWORD[232+r8],r14

+        mov     QWORD[240+r8],r15

+

+$L$in_prologue:

+        mov     rdi,QWORD[8+rax]

+        mov     rsi,QWORD[16+rax]

+        mov     QWORD[152+r8],rax

+        mov     QWORD[168+r8],rsi

+        mov     QWORD[176+r8],rdi

+

+        mov     rdi,QWORD[40+r9]

+        mov     rsi,r8

+        mov     ecx,154

+        DD      0xa548f3fc

+

+        mov     rsi,r9

+        xor     rcx,rcx

+        mov     rdx,QWORD[8+rsi]

+        mov     r8,QWORD[rsi]

+        mov     r9,QWORD[16+rsi]

+        mov     r10,QWORD[40+rsi]

+        lea     r11,[56+rsi]

+        lea     r12,[24+rsi]

+        mov     QWORD[32+rsp],r10

+        mov     QWORD[40+rsp],r11

+        mov     QWORD[48+rsp],r12

+        mov     QWORD[56+rsp],rcx

+        call    QWORD[__imp_RtlVirtualUnwind]

+

+        mov     eax,1

+        add     rsp,64

+        popfq

+        pop     r15

+        pop     r14

+        pop     r13

+        pop     r12

+        pop     rbp

+        pop     rbx

+        pop     rdi

+        pop     rsi

+        DB      0F3h,0C3h               ;repret

+

+

+section .pdata rdata align=4

+ALIGN   4

+        DD      $L$SEH_begin_gcm_gmult_4bit wrt ..imagebase

+        DD      $L$SEH_end_gcm_gmult_4bit wrt ..imagebase

+        DD      $L$SEH_info_gcm_gmult_4bit wrt ..imagebase

+

+        DD      $L$SEH_begin_gcm_ghash_4bit wrt ..imagebase

+        DD      $L$SEH_end_gcm_ghash_4bit wrt ..imagebase

+        DD      $L$SEH_info_gcm_ghash_4bit wrt ..imagebase

+

+        DD      $L$SEH_begin_gcm_init_clmul wrt ..imagebase

+        DD      $L$SEH_end_gcm_init_clmul wrt ..imagebase

+        DD      $L$SEH_info_gcm_init_clmul wrt ..imagebase

+

+        DD      $L$SEH_begin_gcm_ghash_clmul wrt ..imagebase

+        DD      $L$SEH_end_gcm_ghash_clmul wrt ..imagebase

+        DD      $L$SEH_info_gcm_ghash_clmul wrt ..imagebase

+section .xdata rdata align=8

+ALIGN   8

+$L$SEH_info_gcm_gmult_4bit:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$gmult_prologue wrt ..imagebase,$L$gmult_epilogue
wrt ..imagebase

+$L$SEH_info_gcm_ghash_4bit:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$ghash_prologue wrt ..imagebase,$L$ghash_epilogue
wrt ..imagebase

+$L$SEH_info_gcm_init_clmul:

+DB      0x01,0x08,0x03,0x00

+DB      0x08,0x68,0x00,0x00

+DB      0x04,0x22,0x00,0x00

+$L$SEH_info_gcm_ghash_clmul:

+DB      0x01,0x33,0x16,0x00

+DB      0x33,0xf8,0x09,0x00

+DB      0x2e,0xe8,0x08,0x00

+DB      0x29,0xd8,0x07,0x00

+DB      0x24,0xc8,0x06,0x00

+DB      0x1f,0xb8,0x05,0x00

+DB      0x1a,0xa8,0x04,0x00

+DB      0x15,0x98,0x03,0x00

+DB      0x10,0x88,0x02,0x00

+DB      0x0c,0x78,0x01,0x00

+DB      0x08,0x68,0x00,0x00

+DB      0x04,0x01,0x15,0x00

diff --git a/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-mb-
x86_64.nasm b/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-mb-
x86_64.nasm
new file mode 100644
index 0000000000..f3b7b0e35e
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-mb-
x86_64.nasm
@@ -0,0 +1,3137 @@
+; WARNING: do not edit!

+; Generated from openssl/crypto/sha/asm/sha1-mb-x86_64.pl

+;

+; Copyright 2013-2020 The OpenSSL Project Authors. All Rights
Reserved.

+;

+; Licensed under the OpenSSL license (the "License").  You may not use

+; this file except in compliance with the License.  You can obtain a
copy

+; in the file LICENSE in the source distribution or at

+; https://www.openssl.org/source/license.html

+

+default rel

+%define XMMWORD

+%define YMMWORD

+%define ZMMWORD

+section .text code align=64

+

+

+EXTERN  OPENSSL_ia32cap_P

+

+global  sha1_multi_block

+

+ALIGN   32

+sha1_multi_block:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_sha1_multi_block:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+

+        mov     rcx,QWORD[((OPENSSL_ia32cap_P+4))]

+        bt      rcx,61

+        jc      NEAR _shaext_shortcut

+        mov     rax,rsp

+

+        push    rbx

+

+        push    rbp

+

+        lea     rsp,[((-168))+rsp]

+        movaps  XMMWORD[rsp],xmm6

+        movaps  XMMWORD[16+rsp],xmm7

+        movaps  XMMWORD[32+rsp],xmm8

+        movaps  XMMWORD[48+rsp],xmm9

+        movaps  XMMWORD[(-120)+rax],xmm10

+        movaps  XMMWORD[(-104)+rax],xmm11

+        movaps  XMMWORD[(-88)+rax],xmm12

+        movaps  XMMWORD[(-72)+rax],xmm13

+        movaps  XMMWORD[(-56)+rax],xmm14

+        movaps  XMMWORD[(-40)+rax],xmm15

+        sub     rsp,288

+        and     rsp,-256

+        mov     QWORD[272+rsp],rax

+

+$L$body:

+        lea     rbp,[K_XX_XX]

+        lea     rbx,[256+rsp]

+

+$L$oop_grande:

+        mov     DWORD[280+rsp],edx

+        xor     edx,edx

+        mov     r8,QWORD[rsi]

+        mov     ecx,DWORD[8+rsi]

+        cmp     ecx,edx

+        cmovg   edx,ecx

+        test    ecx,ecx

+        mov     DWORD[rbx],ecx

+        cmovle  r8,rbp

+        mov     r9,QWORD[16+rsi]

+        mov     ecx,DWORD[24+rsi]

+        cmp     ecx,edx

+        cmovg   edx,ecx

+        test    ecx,ecx

+        mov     DWORD[4+rbx],ecx

+        cmovle  r9,rbp

+        mov     r10,QWORD[32+rsi]

+        mov     ecx,DWORD[40+rsi]

+        cmp     ecx,edx

+        cmovg   edx,ecx

+        test    ecx,ecx

+        mov     DWORD[8+rbx],ecx

+        cmovle  r10,rbp

+        mov     r11,QWORD[48+rsi]

+        mov     ecx,DWORD[56+rsi]

+        cmp     ecx,edx

+        cmovg   edx,ecx

+        test    ecx,ecx

+        mov     DWORD[12+rbx],ecx

+        cmovle  r11,rbp

+        test    edx,edx

+        jz      NEAR $L$done

+

+        movdqu  xmm10,XMMWORD[rdi]

+        lea     rax,[128+rsp]

+        movdqu  xmm11,XMMWORD[32+rdi]

+        movdqu  xmm12,XMMWORD[64+rdi]

+        movdqu  xmm13,XMMWORD[96+rdi]

+        movdqu  xmm14,XMMWORD[128+rdi]

+        movdqa  xmm5,XMMWORD[96+rbp]

+        movdqa  xmm15,XMMWORD[((-32))+rbp]

+        jmp     NEAR $L$oop

+

+ALIGN   32

+$L$oop:

+        movd    xmm0,DWORD[r8]

+        lea     r8,[64+r8]

+        movd    xmm2,DWORD[r9]

+        lea     r9,[64+r9]

+        movd    xmm3,DWORD[r10]

+        lea     r10,[64+r10]

+        movd    xmm4,DWORD[r11]

+        lea     r11,[64+r11]

+        punpckldq       xmm0,xmm3

+        movd    xmm1,DWORD[((-60))+r8]

+        punpckldq       xmm2,xmm4

+        movd    xmm9,DWORD[((-60))+r9]

+        punpckldq       xmm0,xmm2

+        movd    xmm8,DWORD[((-60))+r10]

+DB      102,15,56,0,197

+        movd    xmm7,DWORD[((-60))+r11]

+        punpckldq       xmm1,xmm8

+        movdqa  xmm8,xmm10

+        paddd   xmm14,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm11

+        movdqa  xmm6,xmm11

+        pslld   xmm8,5

+        pandn   xmm7,xmm13

+        pand    xmm6,xmm12

+        punpckldq       xmm1,xmm9

+        movdqa  xmm9,xmm10

+

+        movdqa  XMMWORD[(0-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        movd    xmm2,DWORD[((-56))+r8]

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm11

+

+        por     xmm8,xmm9

+        movd    xmm9,DWORD[((-56))+r9]

+        pslld   xmm7,30

+        paddd   xmm14,xmm6

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+DB      102,15,56,0,205

+        movd    xmm8,DWORD[((-56))+r10]

+        por     xmm11,xmm7

+        movd    xmm7,DWORD[((-56))+r11]

+        punpckldq       xmm2,xmm8

+        movdqa  xmm8,xmm14

+        paddd   xmm13,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm10

+        movdqa  xmm6,xmm10

+        pslld   xmm8,5

+        pandn   xmm7,xmm12

+        pand    xmm6,xmm11

+        punpckldq       xmm2,xmm9

+        movdqa  xmm9,xmm14

+

+        movdqa  XMMWORD[(16-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        movd    xmm3,DWORD[((-52))+r8]

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm10

+

+        por     xmm8,xmm9

+        movd    xmm9,DWORD[((-52))+r9]

+        pslld   xmm7,30

+        paddd   xmm13,xmm6

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+DB      102,15,56,0,213

+        movd    xmm8,DWORD[((-52))+r10]

+        por     xmm10,xmm7

+        movd    xmm7,DWORD[((-52))+r11]

+        punpckldq       xmm3,xmm8

+        movdqa  xmm8,xmm13

+        paddd   xmm12,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm14

+        movdqa  xmm6,xmm14

+        pslld   xmm8,5

+        pandn   xmm7,xmm11

+        pand    xmm6,xmm10

+        punpckldq       xmm3,xmm9

+        movdqa  xmm9,xmm13

+

+        movdqa  XMMWORD[(32-128)+rax],xmm2

+        paddd   xmm12,xmm2

+        movd    xmm4,DWORD[((-48))+r8]

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm14

+

+        por     xmm8,xmm9

+        movd    xmm9,DWORD[((-48))+r9]

+        pslld   xmm7,30

+        paddd   xmm12,xmm6

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+DB      102,15,56,0,221

+        movd    xmm8,DWORD[((-48))+r10]

+        por     xmm14,xmm7

+        movd    xmm7,DWORD[((-48))+r11]

+        punpckldq       xmm4,xmm8

+        movdqa  xmm8,xmm12

+        paddd   xmm11,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm13

+        movdqa  xmm6,xmm13

+        pslld   xmm8,5

+        pandn   xmm7,xmm10

+        pand    xmm6,xmm14

+        punpckldq       xmm4,xmm9

+        movdqa  xmm9,xmm12

+

+        movdqa  XMMWORD[(48-128)+rax],xmm3

+        paddd   xmm11,xmm3

+        movd    xmm0,DWORD[((-44))+r8]

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm13

+

+        por     xmm8,xmm9

+        movd    xmm9,DWORD[((-44))+r9]

+        pslld   xmm7,30

+        paddd   xmm11,xmm6

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+DB      102,15,56,0,229

+        movd    xmm8,DWORD[((-44))+r10]

+        por     xmm13,xmm7

+        movd    xmm7,DWORD[((-44))+r11]

+        punpckldq       xmm0,xmm8

+        movdqa  xmm8,xmm11

+        paddd   xmm10,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm12

+        movdqa  xmm6,xmm12

+        pslld   xmm8,5

+        pandn   xmm7,xmm14

+        pand    xmm6,xmm13

+        punpckldq       xmm0,xmm9

+        movdqa  xmm9,xmm11

+

+        movdqa  XMMWORD[(64-128)+rax],xmm4

+        paddd   xmm10,xmm4

+        movd    xmm1,DWORD[((-40))+r8]

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm12

+

+        por     xmm8,xmm9

+        movd    xmm9,DWORD[((-40))+r9]

+        pslld   xmm7,30

+        paddd   xmm10,xmm6

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+DB      102,15,56,0,197

+        movd    xmm8,DWORD[((-40))+r10]

+        por     xmm12,xmm7

+        movd    xmm7,DWORD[((-40))+r11]

+        punpckldq       xmm1,xmm8

+        movdqa  xmm8,xmm10

+        paddd   xmm14,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm11

+        movdqa  xmm6,xmm11

+        pslld   xmm8,5

+        pandn   xmm7,xmm13

+        pand    xmm6,xmm12

+        punpckldq       xmm1,xmm9

+        movdqa  xmm9,xmm10

+

+        movdqa  XMMWORD[(80-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        movd    xmm2,DWORD[((-36))+r8]

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm11

+

+        por     xmm8,xmm9

+        movd    xmm9,DWORD[((-36))+r9]

+        pslld   xmm7,30

+        paddd   xmm14,xmm6

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+DB      102,15,56,0,205

+        movd    xmm8,DWORD[((-36))+r10]

+        por     xmm11,xmm7

+        movd    xmm7,DWORD[((-36))+r11]

+        punpckldq       xmm2,xmm8

+        movdqa  xmm8,xmm14

+        paddd   xmm13,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm10

+        movdqa  xmm6,xmm10

+        pslld   xmm8,5

+        pandn   xmm7,xmm12

+        pand    xmm6,xmm11

+        punpckldq       xmm2,xmm9

+        movdqa  xmm9,xmm14

+

+        movdqa  XMMWORD[(96-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        movd    xmm3,DWORD[((-32))+r8]

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm10

+

+        por     xmm8,xmm9

+        movd    xmm9,DWORD[((-32))+r9]

+        pslld   xmm7,30

+        paddd   xmm13,xmm6

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+DB      102,15,56,0,213

+        movd    xmm8,DWORD[((-32))+r10]

+        por     xmm10,xmm7

+        movd    xmm7,DWORD[((-32))+r11]

+        punpckldq       xmm3,xmm8

+        movdqa  xmm8,xmm13

+        paddd   xmm12,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm14

+        movdqa  xmm6,xmm14

+        pslld   xmm8,5

+        pandn   xmm7,xmm11

+        pand    xmm6,xmm10

+        punpckldq       xmm3,xmm9

+        movdqa  xmm9,xmm13

+

+        movdqa  XMMWORD[(112-128)+rax],xmm2

+        paddd   xmm12,xmm2

+        movd    xmm4,DWORD[((-28))+r8]

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm14

+

+        por     xmm8,xmm9

+        movd    xmm9,DWORD[((-28))+r9]

+        pslld   xmm7,30

+        paddd   xmm12,xmm6

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+DB      102,15,56,0,221

+        movd    xmm8,DWORD[((-28))+r10]

+        por     xmm14,xmm7

+        movd    xmm7,DWORD[((-28))+r11]

+        punpckldq       xmm4,xmm8

+        movdqa  xmm8,xmm12

+        paddd   xmm11,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm13

+        movdqa  xmm6,xmm13

+        pslld   xmm8,5

+        pandn   xmm7,xmm10

+        pand    xmm6,xmm14

+        punpckldq       xmm4,xmm9

+        movdqa  xmm9,xmm12

+

+        movdqa  XMMWORD[(128-128)+rax],xmm3

+        paddd   xmm11,xmm3

+        movd    xmm0,DWORD[((-24))+r8]

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm13

+

+        por     xmm8,xmm9

+        movd    xmm9,DWORD[((-24))+r9]

+        pslld   xmm7,30

+        paddd   xmm11,xmm6

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+DB      102,15,56,0,229

+        movd    xmm8,DWORD[((-24))+r10]

+        por     xmm13,xmm7

+        movd    xmm7,DWORD[((-24))+r11]

+        punpckldq       xmm0,xmm8

+        movdqa  xmm8,xmm11

+        paddd   xmm10,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm12

+        movdqa  xmm6,xmm12

+        pslld   xmm8,5

+        pandn   xmm7,xmm14

+        pand    xmm6,xmm13

+        punpckldq       xmm0,xmm9

+        movdqa  xmm9,xmm11

+

+        movdqa  XMMWORD[(144-128)+rax],xmm4

+        paddd   xmm10,xmm4

+        movd    xmm1,DWORD[((-20))+r8]

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm12

+

+        por     xmm8,xmm9

+        movd    xmm9,DWORD[((-20))+r9]

+        pslld   xmm7,30

+        paddd   xmm10,xmm6

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+DB      102,15,56,0,197

+        movd    xmm8,DWORD[((-20))+r10]

+        por     xmm12,xmm7

+        movd    xmm7,DWORD[((-20))+r11]

+        punpckldq       xmm1,xmm8

+        movdqa  xmm8,xmm10

+        paddd   xmm14,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm11

+        movdqa  xmm6,xmm11

+        pslld   xmm8,5

+        pandn   xmm7,xmm13

+        pand    xmm6,xmm12

+        punpckldq       xmm1,xmm9

+        movdqa  xmm9,xmm10

+

+        movdqa  XMMWORD[(160-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        movd    xmm2,DWORD[((-16))+r8]

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm11

+

+        por     xmm8,xmm9

+        movd    xmm9,DWORD[((-16))+r9]

+        pslld   xmm7,30

+        paddd   xmm14,xmm6

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+DB      102,15,56,0,205

+        movd    xmm8,DWORD[((-16))+r10]

+        por     xmm11,xmm7

+        movd    xmm7,DWORD[((-16))+r11]

+        punpckldq       xmm2,xmm8

+        movdqa  xmm8,xmm14

+        paddd   xmm13,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm10

+        movdqa  xmm6,xmm10

+        pslld   xmm8,5

+        pandn   xmm7,xmm12

+        pand    xmm6,xmm11

+        punpckldq       xmm2,xmm9

+        movdqa  xmm9,xmm14

+

+        movdqa  XMMWORD[(176-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        movd    xmm3,DWORD[((-12))+r8]

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm10

+

+        por     xmm8,xmm9

+        movd    xmm9,DWORD[((-12))+r9]

+        pslld   xmm7,30

+        paddd   xmm13,xmm6

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+DB      102,15,56,0,213

+        movd    xmm8,DWORD[((-12))+r10]

+        por     xmm10,xmm7

+        movd    xmm7,DWORD[((-12))+r11]

+        punpckldq       xmm3,xmm8

+        movdqa  xmm8,xmm13

+        paddd   xmm12,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm14

+        movdqa  xmm6,xmm14

+        pslld   xmm8,5

+        pandn   xmm7,xmm11

+        pand    xmm6,xmm10

+        punpckldq       xmm3,xmm9

+        movdqa  xmm9,xmm13

+

+        movdqa  XMMWORD[(192-128)+rax],xmm2

+        paddd   xmm12,xmm2

+        movd    xmm4,DWORD[((-8))+r8]

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm14

+

+        por     xmm8,xmm9

+        movd    xmm9,DWORD[((-8))+r9]

+        pslld   xmm7,30

+        paddd   xmm12,xmm6

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+DB      102,15,56,0,221

+        movd    xmm8,DWORD[((-8))+r10]

+        por     xmm14,xmm7

+        movd    xmm7,DWORD[((-8))+r11]

+        punpckldq       xmm4,xmm8

+        movdqa  xmm8,xmm12

+        paddd   xmm11,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm13

+        movdqa  xmm6,xmm13

+        pslld   xmm8,5

+        pandn   xmm7,xmm10

+        pand    xmm6,xmm14

+        punpckldq       xmm4,xmm9

+        movdqa  xmm9,xmm12

+

+        movdqa  XMMWORD[(208-128)+rax],xmm3

+        paddd   xmm11,xmm3

+        movd    xmm0,DWORD[((-4))+r8]

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm13

+

+        por     xmm8,xmm9

+        movd    xmm9,DWORD[((-4))+r9]

+        pslld   xmm7,30

+        paddd   xmm11,xmm6

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+DB      102,15,56,0,229

+        movd    xmm8,DWORD[((-4))+r10]

+        por     xmm13,xmm7

+        movdqa  xmm1,XMMWORD[((0-128))+rax]

+        movd    xmm7,DWORD[((-4))+r11]

+        punpckldq       xmm0,xmm8

+        movdqa  xmm8,xmm11

+        paddd   xmm10,xmm15

+        punpckldq       xmm9,xmm7

+        movdqa  xmm7,xmm12

+        movdqa  xmm6,xmm12

+        pslld   xmm8,5

+        prefetcht0      [63+r8]

+        pandn   xmm7,xmm14

+        pand    xmm6,xmm13

+        punpckldq       xmm0,xmm9

+        movdqa  xmm9,xmm11

+

+        movdqa  XMMWORD[(224-128)+rax],xmm4

+        paddd   xmm10,xmm4

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+        movdqa  xmm7,xmm12

+        prefetcht0      [63+r9]

+

+        por     xmm8,xmm9

+        pslld   xmm7,30

+        paddd   xmm10,xmm6

+        prefetcht0      [63+r10]

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+DB      102,15,56,0,197

+        prefetcht0      [63+r11]

+        por     xmm12,xmm7

+        movdqa  xmm2,XMMWORD[((16-128))+rax]

+        pxor    xmm1,xmm3

+        movdqa  xmm3,XMMWORD[((32-128))+rax]

+

+        movdqa  xmm8,xmm10

+        pxor    xmm1,XMMWORD[((128-128))+rax]

+        paddd   xmm14,xmm15

+        movdqa  xmm7,xmm11

+        pslld   xmm8,5

+        pxor    xmm1,xmm3

+        movdqa  xmm6,xmm11

+        pandn   xmm7,xmm13

+        movdqa  xmm5,xmm1

+        pand    xmm6,xmm12

+        movdqa  xmm9,xmm10

+        psrld   xmm5,31

+        paddd   xmm1,xmm1

+

+        movdqa  XMMWORD[(240-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+

+        movdqa  xmm7,xmm11

+        por     xmm8,xmm9

+        pslld   xmm7,30

+        paddd   xmm14,xmm6

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+        por     xmm1,xmm5

+        por     xmm11,xmm7

+        pxor    xmm2,xmm4

+        movdqa  xmm4,XMMWORD[((48-128))+rax]

+

+        movdqa  xmm8,xmm14

+        pxor    xmm2,XMMWORD[((144-128))+rax]

+        paddd   xmm13,xmm15

+        movdqa  xmm7,xmm10

+        pslld   xmm8,5

+        pxor    xmm2,xmm4

+        movdqa  xmm6,xmm10

+        pandn   xmm7,xmm12

+        movdqa  xmm5,xmm2

+        pand    xmm6,xmm11

+        movdqa  xmm9,xmm14

+        psrld   xmm5,31

+        paddd   xmm2,xmm2

+

+        movdqa  XMMWORD[(0-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+

+        movdqa  xmm7,xmm10

+        por     xmm8,xmm9

+        pslld   xmm7,30

+        paddd   xmm13,xmm6

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+        por     xmm2,xmm5

+        por     xmm10,xmm7

+        pxor    xmm3,xmm0

+        movdqa  xmm0,XMMWORD[((64-128))+rax]

+

+        movdqa  xmm8,xmm13

+        pxor    xmm3,XMMWORD[((160-128))+rax]

+        paddd   xmm12,xmm15

+        movdqa  xmm7,xmm14

+        pslld   xmm8,5

+        pxor    xmm3,xmm0

+        movdqa  xmm6,xmm14

+        pandn   xmm7,xmm11

+        movdqa  xmm5,xmm3

+        pand    xmm6,xmm10

+        movdqa  xmm9,xmm13

+        psrld   xmm5,31

+        paddd   xmm3,xmm3

+

+        movdqa  XMMWORD[(16-128)+rax],xmm2

+        paddd   xmm12,xmm2

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+

+        movdqa  xmm7,xmm14

+        por     xmm8,xmm9

+        pslld   xmm7,30

+        paddd   xmm12,xmm6

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+        por     xmm3,xmm5

+        por     xmm14,xmm7

+        pxor    xmm4,xmm1

+        movdqa  xmm1,XMMWORD[((80-128))+rax]

+

+        movdqa  xmm8,xmm12

+        pxor    xmm4,XMMWORD[((176-128))+rax]

+        paddd   xmm11,xmm15

+        movdqa  xmm7,xmm13

+        pslld   xmm8,5

+        pxor    xmm4,xmm1

+        movdqa  xmm6,xmm13

+        pandn   xmm7,xmm10

+        movdqa  xmm5,xmm4

+        pand    xmm6,xmm14

+        movdqa  xmm9,xmm12

+        psrld   xmm5,31

+        paddd   xmm4,xmm4

+

+        movdqa  XMMWORD[(32-128)+rax],xmm3

+        paddd   xmm11,xmm3

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+

+        movdqa  xmm7,xmm13

+        por     xmm8,xmm9

+        pslld   xmm7,30

+        paddd   xmm11,xmm6

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+        por     xmm4,xmm5

+        por     xmm13,xmm7

+        pxor    xmm0,xmm2

+        movdqa  xmm2,XMMWORD[((96-128))+rax]

+

+        movdqa  xmm8,xmm11

+        pxor    xmm0,XMMWORD[((192-128))+rax]

+        paddd   xmm10,xmm15

+        movdqa  xmm7,xmm12

+        pslld   xmm8,5

+        pxor    xmm0,xmm2

+        movdqa  xmm6,xmm12

+        pandn   xmm7,xmm14

+        movdqa  xmm5,xmm0

+        pand    xmm6,xmm13

+        movdqa  xmm9,xmm11

+        psrld   xmm5,31

+        paddd   xmm0,xmm0

+

+        movdqa  XMMWORD[(48-128)+rax],xmm4

+        paddd   xmm10,xmm4

+        psrld   xmm9,27

+        pxor    xmm6,xmm7

+

+        movdqa  xmm7,xmm12

+        por     xmm8,xmm9

+        pslld   xmm7,30

+        paddd   xmm10,xmm6

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+        por     xmm0,xmm5

+        por     xmm12,xmm7

+        movdqa  xmm15,XMMWORD[rbp]

+        pxor    xmm1,xmm3

+        movdqa  xmm3,XMMWORD[((112-128))+rax]

+

+        movdqa  xmm8,xmm10

+        movdqa  xmm6,xmm13

+        pxor    xmm1,XMMWORD[((208-128))+rax]

+        paddd   xmm14,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm11

+

+        movdqa  xmm9,xmm10

+        movdqa  XMMWORD[(64-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        pxor    xmm1,xmm3

+        psrld   xmm9,27

+        pxor    xmm6,xmm12

+        movdqa  xmm7,xmm11

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm1

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm14,xmm6

+        paddd   xmm1,xmm1

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+        por     xmm1,xmm5

+        por     xmm11,xmm7

+        pxor    xmm2,xmm4

+        movdqa  xmm4,XMMWORD[((128-128))+rax]

+

+        movdqa  xmm8,xmm14

+        movdqa  xmm6,xmm12

+        pxor    xmm2,XMMWORD[((224-128))+rax]

+        paddd   xmm13,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm10

+

+        movdqa  xmm9,xmm14

+        movdqa  XMMWORD[(80-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        pxor    xmm2,xmm4

+        psrld   xmm9,27

+        pxor    xmm6,xmm11

+        movdqa  xmm7,xmm10

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm2

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm13,xmm6

+        paddd   xmm2,xmm2

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+        por     xmm2,xmm5

+        por     xmm10,xmm7

+        pxor    xmm3,xmm0

+        movdqa  xmm0,XMMWORD[((144-128))+rax]

+

+        movdqa  xmm8,xmm13

+        movdqa  xmm6,xmm11

+        pxor    xmm3,XMMWORD[((240-128))+rax]

+        paddd   xmm12,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm14

+

+        movdqa  xmm9,xmm13

+        movdqa  XMMWORD[(96-128)+rax],xmm2

+        paddd   xmm12,xmm2

+        pxor    xmm3,xmm0

+        psrld   xmm9,27

+        pxor    xmm6,xmm10

+        movdqa  xmm7,xmm14

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm3

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm12,xmm6

+        paddd   xmm3,xmm3

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+        por     xmm3,xmm5

+        por     xmm14,xmm7

+        pxor    xmm4,xmm1

+        movdqa  xmm1,XMMWORD[((160-128))+rax]

+

+        movdqa  xmm8,xmm12

+        movdqa  xmm6,xmm10

+        pxor    xmm4,XMMWORD[((0-128))+rax]

+        paddd   xmm11,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm13

+

+        movdqa  xmm9,xmm12

+        movdqa  XMMWORD[(112-128)+rax],xmm3

+        paddd   xmm11,xmm3

+        pxor    xmm4,xmm1

+        psrld   xmm9,27

+        pxor    xmm6,xmm14

+        movdqa  xmm7,xmm13

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm4

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm11,xmm6

+        paddd   xmm4,xmm4

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+        por     xmm4,xmm5

+        por     xmm13,xmm7

+        pxor    xmm0,xmm2

+        movdqa  xmm2,XMMWORD[((176-128))+rax]

+

+        movdqa  xmm8,xmm11

+        movdqa  xmm6,xmm14

+        pxor    xmm0,XMMWORD[((16-128))+rax]

+        paddd   xmm10,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm12

+

+        movdqa  xmm9,xmm11

+        movdqa  XMMWORD[(128-128)+rax],xmm4

+        paddd   xmm10,xmm4

+        pxor    xmm0,xmm2

+        psrld   xmm9,27

+        pxor    xmm6,xmm13

+        movdqa  xmm7,xmm12

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm0

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm10,xmm6

+        paddd   xmm0,xmm0

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+        por     xmm0,xmm5

+        por     xmm12,xmm7

+        pxor    xmm1,xmm3

+        movdqa  xmm3,XMMWORD[((192-128))+rax]

+

+        movdqa  xmm8,xmm10

+        movdqa  xmm6,xmm13

+        pxor    xmm1,XMMWORD[((32-128))+rax]

+        paddd   xmm14,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm11

+

+        movdqa  xmm9,xmm10

+        movdqa  XMMWORD[(144-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        pxor    xmm1,xmm3

+        psrld   xmm9,27

+        pxor    xmm6,xmm12

+        movdqa  xmm7,xmm11

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm1

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm14,xmm6

+        paddd   xmm1,xmm1

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+        por     xmm1,xmm5

+        por     xmm11,xmm7

+        pxor    xmm2,xmm4

+        movdqa  xmm4,XMMWORD[((208-128))+rax]

+

+        movdqa  xmm8,xmm14

+        movdqa  xmm6,xmm12

+        pxor    xmm2,XMMWORD[((48-128))+rax]

+        paddd   xmm13,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm10

+

+        movdqa  xmm9,xmm14

+        movdqa  XMMWORD[(160-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        pxor    xmm2,xmm4

+        psrld   xmm9,27

+        pxor    xmm6,xmm11

+        movdqa  xmm7,xmm10

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm2

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm13,xmm6

+        paddd   xmm2,xmm2

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+        por     xmm2,xmm5

+        por     xmm10,xmm7

+        pxor    xmm3,xmm0

+        movdqa  xmm0,XMMWORD[((224-128))+rax]

+

+        movdqa  xmm8,xmm13

+        movdqa  xmm6,xmm11

+        pxor    xmm3,XMMWORD[((64-128))+rax]

+        paddd   xmm12,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm14

+

+        movdqa  xmm9,xmm13

+        movdqa  XMMWORD[(176-128)+rax],xmm2

+        paddd   xmm12,xmm2

+        pxor    xmm3,xmm0

+        psrld   xmm9,27

+        pxor    xmm6,xmm10

+        movdqa  xmm7,xmm14

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm3

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm12,xmm6

+        paddd   xmm3,xmm3

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+        por     xmm3,xmm5

+        por     xmm14,xmm7

+        pxor    xmm4,xmm1

+        movdqa  xmm1,XMMWORD[((240-128))+rax]

+

+        movdqa  xmm8,xmm12

+        movdqa  xmm6,xmm10

+        pxor    xmm4,XMMWORD[((80-128))+rax]

+        paddd   xmm11,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm13

+

+        movdqa  xmm9,xmm12

+        movdqa  XMMWORD[(192-128)+rax],xmm3

+        paddd   xmm11,xmm3

+        pxor    xmm4,xmm1

+        psrld   xmm9,27

+        pxor    xmm6,xmm14

+        movdqa  xmm7,xmm13

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm4

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm11,xmm6

+        paddd   xmm4,xmm4

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+        por     xmm4,xmm5

+        por     xmm13,xmm7

+        pxor    xmm0,xmm2

+        movdqa  xmm2,XMMWORD[((0-128))+rax]

+

+        movdqa  xmm8,xmm11

+        movdqa  xmm6,xmm14

+        pxor    xmm0,XMMWORD[((96-128))+rax]

+        paddd   xmm10,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm12

+

+        movdqa  xmm9,xmm11

+        movdqa  XMMWORD[(208-128)+rax],xmm4

+        paddd   xmm10,xmm4

+        pxor    xmm0,xmm2

+        psrld   xmm9,27

+        pxor    xmm6,xmm13

+        movdqa  xmm7,xmm12

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm0

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm10,xmm6

+        paddd   xmm0,xmm0

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+        por     xmm0,xmm5

+        por     xmm12,xmm7

+        pxor    xmm1,xmm3

+        movdqa  xmm3,XMMWORD[((16-128))+rax]

+

+        movdqa  xmm8,xmm10

+        movdqa  xmm6,xmm13

+        pxor    xmm1,XMMWORD[((112-128))+rax]

+        paddd   xmm14,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm11

+

+        movdqa  xmm9,xmm10

+        movdqa  XMMWORD[(224-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        pxor    xmm1,xmm3

+        psrld   xmm9,27

+        pxor    xmm6,xmm12

+        movdqa  xmm7,xmm11

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm1

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm14,xmm6

+        paddd   xmm1,xmm1

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+        por     xmm1,xmm5

+        por     xmm11,xmm7

+        pxor    xmm2,xmm4

+        movdqa  xmm4,XMMWORD[((32-128))+rax]

+

+        movdqa  xmm8,xmm14

+        movdqa  xmm6,xmm12

+        pxor    xmm2,XMMWORD[((128-128))+rax]

+        paddd   xmm13,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm10

+

+        movdqa  xmm9,xmm14

+        movdqa  XMMWORD[(240-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        pxor    xmm2,xmm4

+        psrld   xmm9,27

+        pxor    xmm6,xmm11

+        movdqa  xmm7,xmm10

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm2

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm13,xmm6

+        paddd   xmm2,xmm2

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+        por     xmm2,xmm5

+        por     xmm10,xmm7

+        pxor    xmm3,xmm0

+        movdqa  xmm0,XMMWORD[((48-128))+rax]

+

+        movdqa  xmm8,xmm13

+        movdqa  xmm6,xmm11

+        pxor    xmm3,XMMWORD[((144-128))+rax]

+        paddd   xmm12,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm14

+

+        movdqa  xmm9,xmm13

+        movdqa  XMMWORD[(0-128)+rax],xmm2

+        paddd   xmm12,xmm2

+        pxor    xmm3,xmm0

+        psrld   xmm9,27

+        pxor    xmm6,xmm10

+        movdqa  xmm7,xmm14

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm3

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm12,xmm6

+        paddd   xmm3,xmm3

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+        por     xmm3,xmm5

+        por     xmm14,xmm7

+        pxor    xmm4,xmm1

+        movdqa  xmm1,XMMWORD[((64-128))+rax]

+

+        movdqa  xmm8,xmm12

+        movdqa  xmm6,xmm10

+        pxor    xmm4,XMMWORD[((160-128))+rax]

+        paddd   xmm11,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm13

+

+        movdqa  xmm9,xmm12

+        movdqa  XMMWORD[(16-128)+rax],xmm3

+        paddd   xmm11,xmm3

+        pxor    xmm4,xmm1

+        psrld   xmm9,27

+        pxor    xmm6,xmm14

+        movdqa  xmm7,xmm13

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm4

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm11,xmm6

+        paddd   xmm4,xmm4

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+        por     xmm4,xmm5

+        por     xmm13,xmm7

+        pxor    xmm0,xmm2

+        movdqa  xmm2,XMMWORD[((80-128))+rax]

+

+        movdqa  xmm8,xmm11

+        movdqa  xmm6,xmm14

+        pxor    xmm0,XMMWORD[((176-128))+rax]

+        paddd   xmm10,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm12

+

+        movdqa  xmm9,xmm11

+        movdqa  XMMWORD[(32-128)+rax],xmm4

+        paddd   xmm10,xmm4

+        pxor    xmm0,xmm2

+        psrld   xmm9,27

+        pxor    xmm6,xmm13

+        movdqa  xmm7,xmm12

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm0

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm10,xmm6

+        paddd   xmm0,xmm0

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+        por     xmm0,xmm5

+        por     xmm12,xmm7

+        pxor    xmm1,xmm3

+        movdqa  xmm3,XMMWORD[((96-128))+rax]

+

+        movdqa  xmm8,xmm10

+        movdqa  xmm6,xmm13

+        pxor    xmm1,XMMWORD[((192-128))+rax]

+        paddd   xmm14,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm11

+

+        movdqa  xmm9,xmm10

+        movdqa  XMMWORD[(48-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        pxor    xmm1,xmm3

+        psrld   xmm9,27

+        pxor    xmm6,xmm12

+        movdqa  xmm7,xmm11

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm1

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm14,xmm6

+        paddd   xmm1,xmm1

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+        por     xmm1,xmm5

+        por     xmm11,xmm7

+        pxor    xmm2,xmm4

+        movdqa  xmm4,XMMWORD[((112-128))+rax]

+

+        movdqa  xmm8,xmm14

+        movdqa  xmm6,xmm12

+        pxor    xmm2,XMMWORD[((208-128))+rax]

+        paddd   xmm13,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm10

+

+        movdqa  xmm9,xmm14

+        movdqa  XMMWORD[(64-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        pxor    xmm2,xmm4

+        psrld   xmm9,27

+        pxor    xmm6,xmm11

+        movdqa  xmm7,xmm10

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm2

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm13,xmm6

+        paddd   xmm2,xmm2

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+        por     xmm2,xmm5

+        por     xmm10,xmm7

+        pxor    xmm3,xmm0

+        movdqa  xmm0,XMMWORD[((128-128))+rax]

+

+        movdqa  xmm8,xmm13

+        movdqa  xmm6,xmm11

+        pxor    xmm3,XMMWORD[((224-128))+rax]

+        paddd   xmm12,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm14

+

+        movdqa  xmm9,xmm13

+        movdqa  XMMWORD[(80-128)+rax],xmm2

+        paddd   xmm12,xmm2

+        pxor    xmm3,xmm0

+        psrld   xmm9,27

+        pxor    xmm6,xmm10

+        movdqa  xmm7,xmm14

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm3

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm12,xmm6

+        paddd   xmm3,xmm3

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+        por     xmm3,xmm5

+        por     xmm14,xmm7

+        pxor    xmm4,xmm1

+        movdqa  xmm1,XMMWORD[((144-128))+rax]

+

+        movdqa  xmm8,xmm12

+        movdqa  xmm6,xmm10

+        pxor    xmm4,XMMWORD[((240-128))+rax]

+        paddd   xmm11,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm13

+

+        movdqa  xmm9,xmm12

+        movdqa  XMMWORD[(96-128)+rax],xmm3

+        paddd   xmm11,xmm3

+        pxor    xmm4,xmm1

+        psrld   xmm9,27

+        pxor    xmm6,xmm14

+        movdqa  xmm7,xmm13

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm4

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm11,xmm6

+        paddd   xmm4,xmm4

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+        por     xmm4,xmm5

+        por     xmm13,xmm7

+        pxor    xmm0,xmm2

+        movdqa  xmm2,XMMWORD[((160-128))+rax]

+

+        movdqa  xmm8,xmm11

+        movdqa  xmm6,xmm14

+        pxor    xmm0,XMMWORD[((0-128))+rax]

+        paddd   xmm10,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm12

+

+        movdqa  xmm9,xmm11

+        movdqa  XMMWORD[(112-128)+rax],xmm4

+        paddd   xmm10,xmm4

+        pxor    xmm0,xmm2

+        psrld   xmm9,27

+        pxor    xmm6,xmm13

+        movdqa  xmm7,xmm12

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm0

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm10,xmm6

+        paddd   xmm0,xmm0

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+        por     xmm0,xmm5

+        por     xmm12,xmm7

+        movdqa  xmm15,XMMWORD[32+rbp]

+        pxor    xmm1,xmm3

+        movdqa  xmm3,XMMWORD[((176-128))+rax]

+

+        movdqa  xmm8,xmm10

+        movdqa  xmm7,xmm13

+        pxor    xmm1,XMMWORD[((16-128))+rax]

+        pxor    xmm1,xmm3

+        paddd   xmm14,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm10

+        pand    xmm7,xmm12

+

+        movdqa  xmm6,xmm13

+        movdqa  xmm5,xmm1

+        psrld   xmm9,27

+        paddd   xmm14,xmm7

+        pxor    xmm6,xmm12

+

+        movdqa  XMMWORD[(128-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm11

+        movdqa  xmm7,xmm11

+

+        pslld   xmm7,30

+        paddd   xmm1,xmm1

+        paddd   xmm14,xmm6

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+        por     xmm1,xmm5

+        por     xmm11,xmm7

+        pxor    xmm2,xmm4

+        movdqa  xmm4,XMMWORD[((192-128))+rax]

+

+        movdqa  xmm8,xmm14

+        movdqa  xmm7,xmm12

+        pxor    xmm2,XMMWORD[((32-128))+rax]

+        pxor    xmm2,xmm4

+        paddd   xmm13,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm14

+        pand    xmm7,xmm11

+

+        movdqa  xmm6,xmm12

+        movdqa  xmm5,xmm2

+        psrld   xmm9,27

+        paddd   xmm13,xmm7

+        pxor    xmm6,xmm11

+

+        movdqa  XMMWORD[(144-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm10

+        movdqa  xmm7,xmm10

+

+        pslld   xmm7,30

+        paddd   xmm2,xmm2

+        paddd   xmm13,xmm6

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+        por     xmm2,xmm5

+        por     xmm10,xmm7

+        pxor    xmm3,xmm0

+        movdqa  xmm0,XMMWORD[((208-128))+rax]

+

+        movdqa  xmm8,xmm13

+        movdqa  xmm7,xmm11

+        pxor    xmm3,XMMWORD[((48-128))+rax]

+        pxor    xmm3,xmm0

+        paddd   xmm12,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm13

+        pand    xmm7,xmm10

+

+        movdqa  xmm6,xmm11

+        movdqa  xmm5,xmm3

+        psrld   xmm9,27

+        paddd   xmm12,xmm7

+        pxor    xmm6,xmm10

+

+        movdqa  XMMWORD[(160-128)+rax],xmm2

+        paddd   xmm12,xmm2

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm14

+        movdqa  xmm7,xmm14

+

+        pslld   xmm7,30

+        paddd   xmm3,xmm3

+        paddd   xmm12,xmm6

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+        por     xmm3,xmm5

+        por     xmm14,xmm7

+        pxor    xmm4,xmm1

+        movdqa  xmm1,XMMWORD[((224-128))+rax]

+

+        movdqa  xmm8,xmm12

+        movdqa  xmm7,xmm10

+        pxor    xmm4,XMMWORD[((64-128))+rax]

+        pxor    xmm4,xmm1

+        paddd   xmm11,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm12

+        pand    xmm7,xmm14

+

+        movdqa  xmm6,xmm10

+        movdqa  xmm5,xmm4

+        psrld   xmm9,27

+        paddd   xmm11,xmm7

+        pxor    xmm6,xmm14

+

+        movdqa  XMMWORD[(176-128)+rax],xmm3

+        paddd   xmm11,xmm3

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm13

+        movdqa  xmm7,xmm13

+

+        pslld   xmm7,30

+        paddd   xmm4,xmm4

+        paddd   xmm11,xmm6

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+        por     xmm4,xmm5

+        por     xmm13,xmm7

+        pxor    xmm0,xmm2

+        movdqa  xmm2,XMMWORD[((240-128))+rax]

+

+        movdqa  xmm8,xmm11

+        movdqa  xmm7,xmm14

+        pxor    xmm0,XMMWORD[((80-128))+rax]

+        pxor    xmm0,xmm2

+        paddd   xmm10,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm11

+        pand    xmm7,xmm13

+

+        movdqa  xmm6,xmm14

+        movdqa  xmm5,xmm0

+        psrld   xmm9,27

+        paddd   xmm10,xmm7

+        pxor    xmm6,xmm13

+

+        movdqa  XMMWORD[(192-128)+rax],xmm4

+        paddd   xmm10,xmm4

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm12

+        movdqa  xmm7,xmm12

+

+        pslld   xmm7,30

+        paddd   xmm0,xmm0

+        paddd   xmm10,xmm6

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+        por     xmm0,xmm5

+        por     xmm12,xmm7

+        pxor    xmm1,xmm3

+        movdqa  xmm3,XMMWORD[((0-128))+rax]

+

+        movdqa  xmm8,xmm10

+        movdqa  xmm7,xmm13

+        pxor    xmm1,XMMWORD[((96-128))+rax]

+        pxor    xmm1,xmm3

+        paddd   xmm14,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm10

+        pand    xmm7,xmm12

+

+        movdqa  xmm6,xmm13

+        movdqa  xmm5,xmm1

+        psrld   xmm9,27

+        paddd   xmm14,xmm7

+        pxor    xmm6,xmm12

+

+        movdqa  XMMWORD[(208-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm11

+        movdqa  xmm7,xmm11

+

+        pslld   xmm7,30

+        paddd   xmm1,xmm1

+        paddd   xmm14,xmm6

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+        por     xmm1,xmm5

+        por     xmm11,xmm7

+        pxor    xmm2,xmm4

+        movdqa  xmm4,XMMWORD[((16-128))+rax]

+

+        movdqa  xmm8,xmm14

+        movdqa  xmm7,xmm12

+        pxor    xmm2,XMMWORD[((112-128))+rax]

+        pxor    xmm2,xmm4

+        paddd   xmm13,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm14

+        pand    xmm7,xmm11

+

+        movdqa  xmm6,xmm12

+        movdqa  xmm5,xmm2

+        psrld   xmm9,27

+        paddd   xmm13,xmm7

+        pxor    xmm6,xmm11

+

+        movdqa  XMMWORD[(224-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm10

+        movdqa  xmm7,xmm10

+

+        pslld   xmm7,30

+        paddd   xmm2,xmm2

+        paddd   xmm13,xmm6

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+        por     xmm2,xmm5

+        por     xmm10,xmm7

+        pxor    xmm3,xmm0

+        movdqa  xmm0,XMMWORD[((32-128))+rax]

+

+        movdqa  xmm8,xmm13

+        movdqa  xmm7,xmm11

+        pxor    xmm3,XMMWORD[((128-128))+rax]

+        pxor    xmm3,xmm0

+        paddd   xmm12,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm13

+        pand    xmm7,xmm10

+

+        movdqa  xmm6,xmm11

+        movdqa  xmm5,xmm3

+        psrld   xmm9,27

+        paddd   xmm12,xmm7

+        pxor    xmm6,xmm10

+

+        movdqa  XMMWORD[(240-128)+rax],xmm2

+        paddd   xmm12,xmm2

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm14

+        movdqa  xmm7,xmm14

+

+        pslld   xmm7,30

+        paddd   xmm3,xmm3

+        paddd   xmm12,xmm6

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+        por     xmm3,xmm5

+        por     xmm14,xmm7

+        pxor    xmm4,xmm1

+        movdqa  xmm1,XMMWORD[((48-128))+rax]

+

+        movdqa  xmm8,xmm12

+        movdqa  xmm7,xmm10

+        pxor    xmm4,XMMWORD[((144-128))+rax]

+        pxor    xmm4,xmm1

+        paddd   xmm11,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm12

+        pand    xmm7,xmm14

+

+        movdqa  xmm6,xmm10

+        movdqa  xmm5,xmm4

+        psrld   xmm9,27

+        paddd   xmm11,xmm7

+        pxor    xmm6,xmm14

+

+        movdqa  XMMWORD[(0-128)+rax],xmm3

+        paddd   xmm11,xmm3

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm13

+        movdqa  xmm7,xmm13

+

+        pslld   xmm7,30

+        paddd   xmm4,xmm4

+        paddd   xmm11,xmm6

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+        por     xmm4,xmm5

+        por     xmm13,xmm7

+        pxor    xmm0,xmm2

+        movdqa  xmm2,XMMWORD[((64-128))+rax]

+

+        movdqa  xmm8,xmm11

+        movdqa  xmm7,xmm14

+        pxor    xmm0,XMMWORD[((160-128))+rax]

+        pxor    xmm0,xmm2

+        paddd   xmm10,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm11

+        pand    xmm7,xmm13

+

+        movdqa  xmm6,xmm14

+        movdqa  xmm5,xmm0

+        psrld   xmm9,27

+        paddd   xmm10,xmm7

+        pxor    xmm6,xmm13

+

+        movdqa  XMMWORD[(16-128)+rax],xmm4

+        paddd   xmm10,xmm4

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm12

+        movdqa  xmm7,xmm12

+

+        pslld   xmm7,30

+        paddd   xmm0,xmm0

+        paddd   xmm10,xmm6

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+        por     xmm0,xmm5

+        por     xmm12,xmm7

+        pxor    xmm1,xmm3

+        movdqa  xmm3,XMMWORD[((80-128))+rax]

+

+        movdqa  xmm8,xmm10

+        movdqa  xmm7,xmm13

+        pxor    xmm1,XMMWORD[((176-128))+rax]

+        pxor    xmm1,xmm3

+        paddd   xmm14,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm10

+        pand    xmm7,xmm12

+

+        movdqa  xmm6,xmm13

+        movdqa  xmm5,xmm1

+        psrld   xmm9,27

+        paddd   xmm14,xmm7

+        pxor    xmm6,xmm12

+

+        movdqa  XMMWORD[(32-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm11

+        movdqa  xmm7,xmm11

+

+        pslld   xmm7,30

+        paddd   xmm1,xmm1

+        paddd   xmm14,xmm6

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+        por     xmm1,xmm5

+        por     xmm11,xmm7

+        pxor    xmm2,xmm4

+        movdqa  xmm4,XMMWORD[((96-128))+rax]

+

+        movdqa  xmm8,xmm14

+        movdqa  xmm7,xmm12

+        pxor    xmm2,XMMWORD[((192-128))+rax]

+        pxor    xmm2,xmm4

+        paddd   xmm13,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm14

+        pand    xmm7,xmm11

+

+        movdqa  xmm6,xmm12

+        movdqa  xmm5,xmm2

+        psrld   xmm9,27

+        paddd   xmm13,xmm7

+        pxor    xmm6,xmm11

+

+        movdqa  XMMWORD[(48-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm10

+        movdqa  xmm7,xmm10

+

+        pslld   xmm7,30

+        paddd   xmm2,xmm2

+        paddd   xmm13,xmm6

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+        por     xmm2,xmm5

+        por     xmm10,xmm7

+        pxor    xmm3,xmm0

+        movdqa  xmm0,XMMWORD[((112-128))+rax]

+

+        movdqa  xmm8,xmm13

+        movdqa  xmm7,xmm11

+        pxor    xmm3,XMMWORD[((208-128))+rax]

+        pxor    xmm3,xmm0

+        paddd   xmm12,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm13

+        pand    xmm7,xmm10

+

+        movdqa  xmm6,xmm11

+        movdqa  xmm5,xmm3

+        psrld   xmm9,27

+        paddd   xmm12,xmm7

+        pxor    xmm6,xmm10

+

+        movdqa  XMMWORD[(64-128)+rax],xmm2

+        paddd   xmm12,xmm2

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm14

+        movdqa  xmm7,xmm14

+

+        pslld   xmm7,30

+        paddd   xmm3,xmm3

+        paddd   xmm12,xmm6

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+        por     xmm3,xmm5

+        por     xmm14,xmm7

+        pxor    xmm4,xmm1

+        movdqa  xmm1,XMMWORD[((128-128))+rax]

+

+        movdqa  xmm8,xmm12

+        movdqa  xmm7,xmm10

+        pxor    xmm4,XMMWORD[((224-128))+rax]

+        pxor    xmm4,xmm1

+        paddd   xmm11,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm12

+        pand    xmm7,xmm14

+

+        movdqa  xmm6,xmm10

+        movdqa  xmm5,xmm4

+        psrld   xmm9,27

+        paddd   xmm11,xmm7

+        pxor    xmm6,xmm14

+

+        movdqa  XMMWORD[(80-128)+rax],xmm3

+        paddd   xmm11,xmm3

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm13

+        movdqa  xmm7,xmm13

+

+        pslld   xmm7,30

+        paddd   xmm4,xmm4

+        paddd   xmm11,xmm6

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+        por     xmm4,xmm5

+        por     xmm13,xmm7

+        pxor    xmm0,xmm2

+        movdqa  xmm2,XMMWORD[((144-128))+rax]

+

+        movdqa  xmm8,xmm11

+        movdqa  xmm7,xmm14

+        pxor    xmm0,XMMWORD[((240-128))+rax]

+        pxor    xmm0,xmm2

+        paddd   xmm10,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm11

+        pand    xmm7,xmm13

+

+        movdqa  xmm6,xmm14

+        movdqa  xmm5,xmm0

+        psrld   xmm9,27

+        paddd   xmm10,xmm7

+        pxor    xmm6,xmm13

+

+        movdqa  XMMWORD[(96-128)+rax],xmm4

+        paddd   xmm10,xmm4

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm12

+        movdqa  xmm7,xmm12

+

+        pslld   xmm7,30

+        paddd   xmm0,xmm0

+        paddd   xmm10,xmm6

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+        por     xmm0,xmm5

+        por     xmm12,xmm7

+        pxor    xmm1,xmm3

+        movdqa  xmm3,XMMWORD[((160-128))+rax]

+

+        movdqa  xmm8,xmm10

+        movdqa  xmm7,xmm13

+        pxor    xmm1,XMMWORD[((0-128))+rax]

+        pxor    xmm1,xmm3

+        paddd   xmm14,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm10

+        pand    xmm7,xmm12

+

+        movdqa  xmm6,xmm13

+        movdqa  xmm5,xmm1

+        psrld   xmm9,27

+        paddd   xmm14,xmm7

+        pxor    xmm6,xmm12

+

+        movdqa  XMMWORD[(112-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm11

+        movdqa  xmm7,xmm11

+

+        pslld   xmm7,30

+        paddd   xmm1,xmm1

+        paddd   xmm14,xmm6

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+        por     xmm1,xmm5

+        por     xmm11,xmm7

+        pxor    xmm2,xmm4

+        movdqa  xmm4,XMMWORD[((176-128))+rax]

+

+        movdqa  xmm8,xmm14

+        movdqa  xmm7,xmm12

+        pxor    xmm2,XMMWORD[((16-128))+rax]

+        pxor    xmm2,xmm4

+        paddd   xmm13,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm14

+        pand    xmm7,xmm11

+

+        movdqa  xmm6,xmm12

+        movdqa  xmm5,xmm2

+        psrld   xmm9,27

+        paddd   xmm13,xmm7

+        pxor    xmm6,xmm11

+

+        movdqa  XMMWORD[(128-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm10

+        movdqa  xmm7,xmm10

+

+        pslld   xmm7,30

+        paddd   xmm2,xmm2

+        paddd   xmm13,xmm6

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+        por     xmm2,xmm5

+        por     xmm10,xmm7

+        pxor    xmm3,xmm0

+        movdqa  xmm0,XMMWORD[((192-128))+rax]

+

+        movdqa  xmm8,xmm13

+        movdqa  xmm7,xmm11

+        pxor    xmm3,XMMWORD[((32-128))+rax]

+        pxor    xmm3,xmm0

+        paddd   xmm12,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm13

+        pand    xmm7,xmm10

+

+        movdqa  xmm6,xmm11

+        movdqa  xmm5,xmm3

+        psrld   xmm9,27

+        paddd   xmm12,xmm7

+        pxor    xmm6,xmm10

+

+        movdqa  XMMWORD[(144-128)+rax],xmm2

+        paddd   xmm12,xmm2

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm14

+        movdqa  xmm7,xmm14

+

+        pslld   xmm7,30

+        paddd   xmm3,xmm3

+        paddd   xmm12,xmm6

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+        por     xmm3,xmm5

+        por     xmm14,xmm7

+        pxor    xmm4,xmm1

+        movdqa  xmm1,XMMWORD[((208-128))+rax]

+

+        movdqa  xmm8,xmm12

+        movdqa  xmm7,xmm10

+        pxor    xmm4,XMMWORD[((48-128))+rax]

+        pxor    xmm4,xmm1

+        paddd   xmm11,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm12

+        pand    xmm7,xmm14

+

+        movdqa  xmm6,xmm10

+        movdqa  xmm5,xmm4

+        psrld   xmm9,27

+        paddd   xmm11,xmm7

+        pxor    xmm6,xmm14

+

+        movdqa  XMMWORD[(160-128)+rax],xmm3

+        paddd   xmm11,xmm3

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm13

+        movdqa  xmm7,xmm13

+

+        pslld   xmm7,30

+        paddd   xmm4,xmm4

+        paddd   xmm11,xmm6

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+        por     xmm4,xmm5

+        por     xmm13,xmm7

+        pxor    xmm0,xmm2

+        movdqa  xmm2,XMMWORD[((224-128))+rax]

+

+        movdqa  xmm8,xmm11

+        movdqa  xmm7,xmm14

+        pxor    xmm0,XMMWORD[((64-128))+rax]

+        pxor    xmm0,xmm2

+        paddd   xmm10,xmm15

+        pslld   xmm8,5

+        movdqa  xmm9,xmm11

+        pand    xmm7,xmm13

+

+        movdqa  xmm6,xmm14

+        movdqa  xmm5,xmm0

+        psrld   xmm9,27

+        paddd   xmm10,xmm7

+        pxor    xmm6,xmm13

+

+        movdqa  XMMWORD[(176-128)+rax],xmm4

+        paddd   xmm10,xmm4

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        pand    xmm6,xmm12

+        movdqa  xmm7,xmm12

+

+        pslld   xmm7,30

+        paddd   xmm0,xmm0

+        paddd   xmm10,xmm6

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+        por     xmm0,xmm5

+        por     xmm12,xmm7

+        movdqa  xmm15,XMMWORD[64+rbp]

+        pxor    xmm1,xmm3

+        movdqa  xmm3,XMMWORD[((240-128))+rax]

+

+        movdqa  xmm8,xmm10

+        movdqa  xmm6,xmm13

+        pxor    xmm1,XMMWORD[((80-128))+rax]

+        paddd   xmm14,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm11

+

+        movdqa  xmm9,xmm10

+        movdqa  XMMWORD[(192-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        pxor    xmm1,xmm3

+        psrld   xmm9,27

+        pxor    xmm6,xmm12

+        movdqa  xmm7,xmm11

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm1

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm14,xmm6

+        paddd   xmm1,xmm1

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+        por     xmm1,xmm5

+        por     xmm11,xmm7

+        pxor    xmm2,xmm4

+        movdqa  xmm4,XMMWORD[((0-128))+rax]

+

+        movdqa  xmm8,xmm14

+        movdqa  xmm6,xmm12

+        pxor    xmm2,XMMWORD[((96-128))+rax]

+        paddd   xmm13,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm10

+

+        movdqa  xmm9,xmm14

+        movdqa  XMMWORD[(208-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        pxor    xmm2,xmm4

+        psrld   xmm9,27

+        pxor    xmm6,xmm11

+        movdqa  xmm7,xmm10

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm2

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm13,xmm6

+        paddd   xmm2,xmm2

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+        por     xmm2,xmm5

+        por     xmm10,xmm7

+        pxor    xmm3,xmm0

+        movdqa  xmm0,XMMWORD[((16-128))+rax]

+

+        movdqa  xmm8,xmm13

+        movdqa  xmm6,xmm11

+        pxor    xmm3,XMMWORD[((112-128))+rax]

+        paddd   xmm12,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm14

+

+        movdqa  xmm9,xmm13

+        movdqa  XMMWORD[(224-128)+rax],xmm2

+        paddd   xmm12,xmm2

+        pxor    xmm3,xmm0

+        psrld   xmm9,27

+        pxor    xmm6,xmm10

+        movdqa  xmm7,xmm14

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm3

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm12,xmm6

+        paddd   xmm3,xmm3

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+        por     xmm3,xmm5

+        por     xmm14,xmm7

+        pxor    xmm4,xmm1

+        movdqa  xmm1,XMMWORD[((32-128))+rax]

+

+        movdqa  xmm8,xmm12

+        movdqa  xmm6,xmm10

+        pxor    xmm4,XMMWORD[((128-128))+rax]

+        paddd   xmm11,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm13

+

+        movdqa  xmm9,xmm12

+        movdqa  XMMWORD[(240-128)+rax],xmm3

+        paddd   xmm11,xmm3

+        pxor    xmm4,xmm1

+        psrld   xmm9,27

+        pxor    xmm6,xmm14

+        movdqa  xmm7,xmm13

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm4

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm11,xmm6

+        paddd   xmm4,xmm4

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+        por     xmm4,xmm5

+        por     xmm13,xmm7

+        pxor    xmm0,xmm2

+        movdqa  xmm2,XMMWORD[((48-128))+rax]

+

+        movdqa  xmm8,xmm11

+        movdqa  xmm6,xmm14

+        pxor    xmm0,XMMWORD[((144-128))+rax]

+        paddd   xmm10,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm12

+

+        movdqa  xmm9,xmm11

+        movdqa  XMMWORD[(0-128)+rax],xmm4

+        paddd   xmm10,xmm4

+        pxor    xmm0,xmm2

+        psrld   xmm9,27

+        pxor    xmm6,xmm13

+        movdqa  xmm7,xmm12

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm0

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm10,xmm6

+        paddd   xmm0,xmm0

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+        por     xmm0,xmm5

+        por     xmm12,xmm7

+        pxor    xmm1,xmm3

+        movdqa  xmm3,XMMWORD[((64-128))+rax]

+

+        movdqa  xmm8,xmm10

+        movdqa  xmm6,xmm13

+        pxor    xmm1,XMMWORD[((160-128))+rax]

+        paddd   xmm14,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm11

+

+        movdqa  xmm9,xmm10

+        movdqa  XMMWORD[(16-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        pxor    xmm1,xmm3

+        psrld   xmm9,27

+        pxor    xmm6,xmm12

+        movdqa  xmm7,xmm11

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm1

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm14,xmm6

+        paddd   xmm1,xmm1

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+        por     xmm1,xmm5

+        por     xmm11,xmm7

+        pxor    xmm2,xmm4

+        movdqa  xmm4,XMMWORD[((80-128))+rax]

+

+        movdqa  xmm8,xmm14

+        movdqa  xmm6,xmm12

+        pxor    xmm2,XMMWORD[((176-128))+rax]

+        paddd   xmm13,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm10

+

+        movdqa  xmm9,xmm14

+        movdqa  XMMWORD[(32-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        pxor    xmm2,xmm4

+        psrld   xmm9,27

+        pxor    xmm6,xmm11

+        movdqa  xmm7,xmm10

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm2

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm13,xmm6

+        paddd   xmm2,xmm2

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+        por     xmm2,xmm5

+        por     xmm10,xmm7

+        pxor    xmm3,xmm0

+        movdqa  xmm0,XMMWORD[((96-128))+rax]

+

+        movdqa  xmm8,xmm13

+        movdqa  xmm6,xmm11

+        pxor    xmm3,XMMWORD[((192-128))+rax]

+        paddd   xmm12,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm14

+

+        movdqa  xmm9,xmm13

+        movdqa  XMMWORD[(48-128)+rax],xmm2

+        paddd   xmm12,xmm2

+        pxor    xmm3,xmm0

+        psrld   xmm9,27

+        pxor    xmm6,xmm10

+        movdqa  xmm7,xmm14

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm3

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm12,xmm6

+        paddd   xmm3,xmm3

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+        por     xmm3,xmm5

+        por     xmm14,xmm7

+        pxor    xmm4,xmm1

+        movdqa  xmm1,XMMWORD[((112-128))+rax]

+

+        movdqa  xmm8,xmm12

+        movdqa  xmm6,xmm10

+        pxor    xmm4,XMMWORD[((208-128))+rax]

+        paddd   xmm11,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm13

+

+        movdqa  xmm9,xmm12

+        movdqa  XMMWORD[(64-128)+rax],xmm3

+        paddd   xmm11,xmm3

+        pxor    xmm4,xmm1

+        psrld   xmm9,27

+        pxor    xmm6,xmm14

+        movdqa  xmm7,xmm13

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm4

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm11,xmm6

+        paddd   xmm4,xmm4

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+        por     xmm4,xmm5

+        por     xmm13,xmm7

+        pxor    xmm0,xmm2

+        movdqa  xmm2,XMMWORD[((128-128))+rax]

+

+        movdqa  xmm8,xmm11

+        movdqa  xmm6,xmm14

+        pxor    xmm0,XMMWORD[((224-128))+rax]

+        paddd   xmm10,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm12

+

+        movdqa  xmm9,xmm11

+        movdqa  XMMWORD[(80-128)+rax],xmm4

+        paddd   xmm10,xmm4

+        pxor    xmm0,xmm2

+        psrld   xmm9,27

+        pxor    xmm6,xmm13

+        movdqa  xmm7,xmm12

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm0

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm10,xmm6

+        paddd   xmm0,xmm0

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+        por     xmm0,xmm5

+        por     xmm12,xmm7

+        pxor    xmm1,xmm3

+        movdqa  xmm3,XMMWORD[((144-128))+rax]

+

+        movdqa  xmm8,xmm10

+        movdqa  xmm6,xmm13

+        pxor    xmm1,XMMWORD[((240-128))+rax]

+        paddd   xmm14,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm11

+

+        movdqa  xmm9,xmm10

+        movdqa  XMMWORD[(96-128)+rax],xmm0

+        paddd   xmm14,xmm0

+        pxor    xmm1,xmm3

+        psrld   xmm9,27

+        pxor    xmm6,xmm12

+        movdqa  xmm7,xmm11

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm1

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm14,xmm6

+        paddd   xmm1,xmm1

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+        por     xmm1,xmm5

+        por     xmm11,xmm7

+        pxor    xmm2,xmm4

+        movdqa  xmm4,XMMWORD[((160-128))+rax]

+

+        movdqa  xmm8,xmm14

+        movdqa  xmm6,xmm12

+        pxor    xmm2,XMMWORD[((0-128))+rax]

+        paddd   xmm13,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm10

+

+        movdqa  xmm9,xmm14

+        movdqa  XMMWORD[(112-128)+rax],xmm1

+        paddd   xmm13,xmm1

+        pxor    xmm2,xmm4

+        psrld   xmm9,27

+        pxor    xmm6,xmm11

+        movdqa  xmm7,xmm10

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm2

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm13,xmm6

+        paddd   xmm2,xmm2

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+        por     xmm2,xmm5

+        por     xmm10,xmm7

+        pxor    xmm3,xmm0

+        movdqa  xmm0,XMMWORD[((176-128))+rax]

+

+        movdqa  xmm8,xmm13

+        movdqa  xmm6,xmm11

+        pxor    xmm3,XMMWORD[((16-128))+rax]

+        paddd   xmm12,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm14

+

+        movdqa  xmm9,xmm13

+        paddd   xmm12,xmm2

+        pxor    xmm3,xmm0

+        psrld   xmm9,27

+        pxor    xmm6,xmm10

+        movdqa  xmm7,xmm14

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm3

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm12,xmm6

+        paddd   xmm3,xmm3

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+        por     xmm3,xmm5

+        por     xmm14,xmm7

+        pxor    xmm4,xmm1

+        movdqa  xmm1,XMMWORD[((192-128))+rax]

+

+        movdqa  xmm8,xmm12

+        movdqa  xmm6,xmm10

+        pxor    xmm4,XMMWORD[((32-128))+rax]

+        paddd   xmm11,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm13

+

+        movdqa  xmm9,xmm12

+        paddd   xmm11,xmm3

+        pxor    xmm4,xmm1

+        psrld   xmm9,27

+        pxor    xmm6,xmm14

+        movdqa  xmm7,xmm13

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm4

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm11,xmm6

+        paddd   xmm4,xmm4

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+        por     xmm4,xmm5

+        por     xmm13,xmm7

+        pxor    xmm0,xmm2

+        movdqa  xmm2,XMMWORD[((208-128))+rax]

+

+        movdqa  xmm8,xmm11

+        movdqa  xmm6,xmm14

+        pxor    xmm0,XMMWORD[((48-128))+rax]

+        paddd   xmm10,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm12

+

+        movdqa  xmm9,xmm11

+        paddd   xmm10,xmm4

+        pxor    xmm0,xmm2

+        psrld   xmm9,27

+        pxor    xmm6,xmm13

+        movdqa  xmm7,xmm12

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm0

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm10,xmm6

+        paddd   xmm0,xmm0

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+        por     xmm0,xmm5

+        por     xmm12,xmm7

+        pxor    xmm1,xmm3

+        movdqa  xmm3,XMMWORD[((224-128))+rax]

+

+        movdqa  xmm8,xmm10

+        movdqa  xmm6,xmm13

+        pxor    xmm1,XMMWORD[((64-128))+rax]

+        paddd   xmm14,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm11

+

+        movdqa  xmm9,xmm10

+        paddd   xmm14,xmm0

+        pxor    xmm1,xmm3

+        psrld   xmm9,27

+        pxor    xmm6,xmm12

+        movdqa  xmm7,xmm11

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm1

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm14,xmm6

+        paddd   xmm1,xmm1

+

+        psrld   xmm11,2

+        paddd   xmm14,xmm8

+        por     xmm1,xmm5

+        por     xmm11,xmm7

+        pxor    xmm2,xmm4

+        movdqa  xmm4,XMMWORD[((240-128))+rax]

+

+        movdqa  xmm8,xmm14

+        movdqa  xmm6,xmm12

+        pxor    xmm2,XMMWORD[((80-128))+rax]

+        paddd   xmm13,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm10

+

+        movdqa  xmm9,xmm14

+        paddd   xmm13,xmm1

+        pxor    xmm2,xmm4

+        psrld   xmm9,27

+        pxor    xmm6,xmm11

+        movdqa  xmm7,xmm10

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm2

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm13,xmm6

+        paddd   xmm2,xmm2

+

+        psrld   xmm10,2

+        paddd   xmm13,xmm8

+        por     xmm2,xmm5

+        por     xmm10,xmm7

+        pxor    xmm3,xmm0

+        movdqa  xmm0,XMMWORD[((0-128))+rax]

+

+        movdqa  xmm8,xmm13

+        movdqa  xmm6,xmm11

+        pxor    xmm3,XMMWORD[((96-128))+rax]

+        paddd   xmm12,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm14

+

+        movdqa  xmm9,xmm13

+        paddd   xmm12,xmm2

+        pxor    xmm3,xmm0

+        psrld   xmm9,27

+        pxor    xmm6,xmm10

+        movdqa  xmm7,xmm14

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm3

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm12,xmm6

+        paddd   xmm3,xmm3

+

+        psrld   xmm14,2

+        paddd   xmm12,xmm8

+        por     xmm3,xmm5

+        por     xmm14,xmm7

+        pxor    xmm4,xmm1

+        movdqa  xmm1,XMMWORD[((16-128))+rax]

+

+        movdqa  xmm8,xmm12

+        movdqa  xmm6,xmm10

+        pxor    xmm4,XMMWORD[((112-128))+rax]

+        paddd   xmm11,xmm15

+        pslld   xmm8,5

+        pxor    xmm6,xmm13

+

+        movdqa  xmm9,xmm12

+        paddd   xmm11,xmm3

+        pxor    xmm4,xmm1

+        psrld   xmm9,27

+        pxor    xmm6,xmm14

+        movdqa  xmm7,xmm13

+

+        pslld   xmm7,30

+        movdqa  xmm5,xmm4

+        por     xmm8,xmm9

+        psrld   xmm5,31

+        paddd   xmm11,xmm6

+        paddd   xmm4,xmm4

+

+        psrld   xmm13,2

+        paddd   xmm11,xmm8

+        por     xmm4,xmm5

+        por     xmm13,xmm7

+        movdqa  xmm8,xmm11

+        paddd   xmm10,xmm15

+        movdqa  xmm6,xmm14

+        pslld   xmm8,5

+        pxor    xmm6,xmm12

+

+        movdqa  xmm9,xmm11

+        paddd   xmm10,xmm4

+        psrld   xmm9,27

+        movdqa  xmm7,xmm12

+        pxor    xmm6,xmm13

+

+        pslld   xmm7,30

+        por     xmm8,xmm9

+        paddd   xmm10,xmm6

+

+        psrld   xmm12,2

+        paddd   xmm10,xmm8

+        por     xmm12,xmm7

+        movdqa  xmm0,XMMWORD[rbx]

+        mov     ecx,1

+        cmp     ecx,DWORD[rbx]

+        pxor    xmm8,xmm8

+        cmovge  r8,rbp

+        cmp     ecx,DWORD[4+rbx]

+        movdqa  xmm1,xmm0

+        cmovge  r9,rbp

+        cmp     ecx,DWORD[8+rbx]

+        pcmpgtd xmm1,xmm8

+        cmovge  r10,rbp

+        cmp     ecx,DWORD[12+rbx]

+        paddd   xmm0,xmm1

+        cmovge  r11,rbp

+

+        movdqu  xmm6,XMMWORD[rdi]

+        pand    xmm10,xmm1

+        movdqu  xmm7,XMMWORD[32+rdi]

+        pand    xmm11,xmm1

+        paddd   xmm10,xmm6

+        movdqu  xmm8,XMMWORD[64+rdi]

+        pand    xmm12,xmm1

+        paddd   xmm11,xmm7

+        movdqu  xmm9,XMMWORD[96+rdi]

+        pand    xmm13,xmm1

+        paddd   xmm12,xmm8

+        movdqu  xmm5,XMMWORD[128+rdi]

+        pand    xmm14,xmm1

+        movdqu  XMMWORD[rdi],xmm10

+        paddd   xmm13,xmm9

+        movdqu  XMMWORD[32+rdi],xmm11

+        paddd   xmm14,xmm5

+        movdqu  XMMWORD[64+rdi],xmm12

+        movdqu  XMMWORD[96+rdi],xmm13

+        movdqu  XMMWORD[128+rdi],xmm14

+

+        movdqa  XMMWORD[rbx],xmm0

+        movdqa  xmm5,XMMWORD[96+rbp]

+        movdqa  xmm15,XMMWORD[((-32))+rbp]

+        dec     edx

+        jnz     NEAR $L$oop

+

+        mov     edx,DWORD[280+rsp]

+        lea     rdi,[16+rdi]

+        lea     rsi,[64+rsi]

+        dec     edx

+        jnz     NEAR $L$oop_grande

+

+$L$done:

+        mov     rax,QWORD[272+rsp]

+

+        movaps  xmm6,XMMWORD[((-184))+rax]

+        movaps  xmm7,XMMWORD[((-168))+rax]

+        movaps  xmm8,XMMWORD[((-152))+rax]

+        movaps  xmm9,XMMWORD[((-136))+rax]

+        movaps  xmm10,XMMWORD[((-120))+rax]

+        movaps  xmm11,XMMWORD[((-104))+rax]

+        movaps  xmm12,XMMWORD[((-88))+rax]

+        movaps  xmm13,XMMWORD[((-72))+rax]

+        movaps  xmm14,XMMWORD[((-56))+rax]

+        movaps  xmm15,XMMWORD[((-40))+rax]

+        mov     rbp,QWORD[((-16))+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+

+        lea     rsp,[rax]

+

+$L$epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_sha1_multi_block:

+

+ALIGN   32

+sha1_multi_block_shaext:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_sha1_multi_block_shaext:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+

+_shaext_shortcut:

+        mov     rax,rsp

+

+        push    rbx

+

+        push    rbp

+

+        lea     rsp,[((-168))+rsp]

+        movaps  XMMWORD[rsp],xmm6

+        movaps  XMMWORD[16+rsp],xmm7

+        movaps  XMMWORD[32+rsp],xmm8

+        movaps  XMMWORD[48+rsp],xmm9

+        movaps  XMMWORD[(-120)+rax],xmm10

+        movaps  XMMWORD[(-104)+rax],xmm11

+        movaps  XMMWORD[(-88)+rax],xmm12

+        movaps  XMMWORD[(-72)+rax],xmm13

+        movaps  XMMWORD[(-56)+rax],xmm14

+        movaps  XMMWORD[(-40)+rax],xmm15

+        sub     rsp,288

+        shl     edx,1

+        and     rsp,-256

+        lea     rdi,[64+rdi]

+        mov     QWORD[272+rsp],rax

+$L$body_shaext:

+        lea     rbx,[256+rsp]

+        movdqa  xmm3,XMMWORD[((K_XX_XX+128))]

+

+$L$oop_grande_shaext:

+        mov     DWORD[280+rsp],edx

+        xor     edx,edx

+        mov     r8,QWORD[rsi]

+        mov     ecx,DWORD[8+rsi]

+        cmp     ecx,edx

+        cmovg   edx,ecx

+        test    ecx,ecx

+        mov     DWORD[rbx],ecx

+        cmovle  r8,rsp

+        mov     r9,QWORD[16+rsi]

+        mov     ecx,DWORD[24+rsi]

+        cmp     ecx,edx

+        cmovg   edx,ecx

+        test    ecx,ecx

+        mov     DWORD[4+rbx],ecx

+        cmovle  r9,rsp

+        test    edx,edx

+        jz      NEAR $L$done_shaext

+

+        movq    xmm0,QWORD[((0-64))+rdi]

+        movq    xmm4,QWORD[((32-64))+rdi]

+        movq    xmm5,QWORD[((64-64))+rdi]

+        movq    xmm6,QWORD[((96-64))+rdi]

+        movq    xmm7,QWORD[((128-64))+rdi]

+

+        punpckldq       xmm0,xmm4

+        punpckldq       xmm5,xmm6

+

+        movdqa  xmm8,xmm0

+        punpcklqdq      xmm0,xmm5

+        punpckhqdq      xmm8,xmm5

+

+        pshufd  xmm1,xmm7,63

+        pshufd  xmm9,xmm7,127

+        pshufd  xmm0,xmm0,27

+        pshufd  xmm8,xmm8,27

+        jmp     NEAR $L$oop_shaext

+

+ALIGN   32

+$L$oop_shaext:

+        movdqu  xmm4,XMMWORD[r8]

+        movdqu  xmm11,XMMWORD[r9]

+        movdqu  xmm5,XMMWORD[16+r8]

+        movdqu  xmm12,XMMWORD[16+r9]

+        movdqu  xmm6,XMMWORD[32+r8]

+DB      102,15,56,0,227

+        movdqu  xmm13,XMMWORD[32+r9]

+DB      102,68,15,56,0,219

+        movdqu  xmm7,XMMWORD[48+r8]

+        lea     r8,[64+r8]

+DB      102,15,56,0,235

+        movdqu  xmm14,XMMWORD[48+r9]

+        lea     r9,[64+r9]

+DB      102,68,15,56,0,227

+

+        movdqa  XMMWORD[80+rsp],xmm1

+        paddd   xmm1,xmm4

+        movdqa  XMMWORD[112+rsp],xmm9

+        paddd   xmm9,xmm11

+        movdqa  XMMWORD[64+rsp],xmm0

+        movdqa  xmm2,xmm0

+        movdqa  XMMWORD[96+rsp],xmm8

+        movdqa  xmm10,xmm8

+DB      15,58,204,193,0

+DB      15,56,200,213

+DB      69,15,58,204,193,0

+DB      69,15,56,200,212

+DB      102,15,56,0,243

+        prefetcht0      [127+r8]

+DB      15,56,201,229

+DB      102,68,15,56,0,235

+        prefetcht0      [127+r9]

+DB      69,15,56,201,220

+

+DB      102,15,56,0,251

+        movdqa  xmm1,xmm0

+DB      102,68,15,56,0,243

+        movdqa  xmm9,xmm8

+DB      15,58,204,194,0

+DB      15,56,200,206

+DB      69,15,58,204,194,0

+DB      69,15,56,200,205

+        pxor    xmm4,xmm6

+DB      15,56,201,238

+        pxor    xmm11,xmm13

+DB      69,15,56,201,229

+        movdqa  xmm2,xmm0

+        movdqa  xmm10,xmm8

+DB      15,58,204,193,0

+DB      15,56,200,215

+DB      69,15,58,204,193,0

+DB      69,15,56,200,214

+DB      15,56,202,231

+DB      69,15,56,202,222

+        pxor    xmm5,xmm7

+DB      15,56,201,247

+        pxor    xmm12,xmm14

+DB      69,15,56,201,238

+        movdqa  xmm1,xmm0

+        movdqa  xmm9,xmm8

+DB      15,58,204,194,0

+DB      15,56,200,204

+DB      69,15,58,204,194,0

+DB      69,15,56,200,203

+DB      15,56,202,236

+DB      69,15,56,202,227

+        pxor    xmm6,xmm4

+DB      15,56,201,252

+        pxor    xmm13,xmm11

+DB      69,15,56,201,243

+        movdqa  xmm2,xmm0

+        movdqa  xmm10,xmm8

+DB      15,58,204,193,0

+DB      15,56,200,213

+DB      69,15,58,204,193,0

+DB      69,15,56,200,212

+DB      15,56,202,245

+DB      69,15,56,202,236

+        pxor    xmm7,xmm5

+DB      15,56,201,229

+        pxor    xmm14,xmm12

+DB      69,15,56,201,220

+        movdqa  xmm1,xmm0

+        movdqa  xmm9,xmm8

+DB      15,58,204,194,1

+DB      15,56,200,206

+DB      69,15,58,204,194,1

+DB      69,15,56,200,205

+DB      15,56,202,254

+DB      69,15,56,202,245

+        pxor    xmm4,xmm6

+DB      15,56,201,238

+        pxor    xmm11,xmm13

+DB      69,15,56,201,229

+        movdqa  xmm2,xmm0

+        movdqa  xmm10,xmm8

+DB      15,58,204,193,1

+DB      15,56,200,215

+DB      69,15,58,204,193,1

+DB      69,15,56,200,214

+DB      15,56,202,231

+DB      69,15,56,202,222

+        pxor    xmm5,xmm7

+DB      15,56,201,247

+        pxor    xmm12,xmm14

+DB      69,15,56,201,238

+        movdqa  xmm1,xmm0

+        movdqa  xmm9,xmm8

+DB      15,58,204,194,1

+DB      15,56,200,204

+DB      69,15,58,204,194,1

+DB      69,15,56,200,203

+DB      15,56,202,236

+DB      69,15,56,202,227

+        pxor    xmm6,xmm4

+DB      15,56,201,252

+        pxor    xmm13,xmm11

+DB      69,15,56,201,243

+        movdqa  xmm2,xmm0

+        movdqa  xmm10,xmm8

+DB      15,58,204,193,1

+DB      15,56,200,213

+DB      69,15,58,204,193,1

+DB      69,15,56,200,212

+DB      15,56,202,245

+DB      69,15,56,202,236

+        pxor    xmm7,xmm5

+DB      15,56,201,229

+        pxor    xmm14,xmm12

+DB      69,15,56,201,220

+        movdqa  xmm1,xmm0

+        movdqa  xmm9,xmm8

+DB      15,58,204,194,1

+DB      15,56,200,206

+DB      69,15,58,204,194,1

+DB      69,15,56,200,205

+DB      15,56,202,254

+DB      69,15,56,202,245

+        pxor    xmm4,xmm6

+DB      15,56,201,238

+        pxor    xmm11,xmm13

+DB      69,15,56,201,229

+        movdqa  xmm2,xmm0

+        movdqa  xmm10,xmm8

+DB      15,58,204,193,2

+DB      15,56,200,215

+DB      69,15,58,204,193,2

+DB      69,15,56,200,214

+DB      15,56,202,231

+DB      69,15,56,202,222

+        pxor    xmm5,xmm7

+DB      15,56,201,247

+        pxor    xmm12,xmm14

+DB      69,15,56,201,238

+        movdqa  xmm1,xmm0

+        movdqa  xmm9,xmm8

+DB      15,58,204,194,2

+DB      15,56,200,204

+DB      69,15,58,204,194,2

+DB      69,15,56,200,203

+DB      15,56,202,236

+DB      69,15,56,202,227

+        pxor    xmm6,xmm4

+DB      15,56,201,252

+        pxor    xmm13,xmm11

+DB      69,15,56,201,243

+        movdqa  xmm2,xmm0

+        movdqa  xmm10,xmm8

+DB      15,58,204,193,2

+DB      15,56,200,213

+DB      69,15,58,204,193,2

+DB      69,15,56,200,212

+DB      15,56,202,245

+DB      69,15,56,202,236

+        pxor    xmm7,xmm5

+DB      15,56,201,229

+        pxor    xmm14,xmm12

+DB      69,15,56,201,220

+        movdqa  xmm1,xmm0

+        movdqa  xmm9,xmm8

+DB      15,58,204,194,2

+DB      15,56,200,206

+DB      69,15,58,204,194,2

+DB      69,15,56,200,205

+DB      15,56,202,254

+DB      69,15,56,202,245

+        pxor    xmm4,xmm6

+DB      15,56,201,238

+        pxor    xmm11,xmm13

+DB      69,15,56,201,229

+        movdqa  xmm2,xmm0

+        movdqa  xmm10,xmm8

+DB      15,58,204,193,2

+DB      15,56,200,215

+DB      69,15,58,204,193,2

+DB      69,15,56,200,214

+DB      15,56,202,231

+DB      69,15,56,202,222

+        pxor    xmm5,xmm7

+DB      15,56,201,247

+        pxor    xmm12,xmm14

+DB      69,15,56,201,238

+        movdqa  xmm1,xmm0

+        movdqa  xmm9,xmm8

+DB      15,58,204,194,3

+DB      15,56,200,204

+DB      69,15,58,204,194,3

+DB      69,15,56,200,203

+DB      15,56,202,236

+DB      69,15,56,202,227

+        pxor    xmm6,xmm4

+DB      15,56,201,252

+        pxor    xmm13,xmm11

+DB      69,15,56,201,243

+        movdqa  xmm2,xmm0

+        movdqa  xmm10,xmm8

+DB      15,58,204,193,3

+DB      15,56,200,213

+DB      69,15,58,204,193,3

+DB      69,15,56,200,212

+DB      15,56,202,245

+DB      69,15,56,202,236

+        pxor    xmm7,xmm5

+        pxor    xmm14,xmm12

+

+        mov     ecx,1

+        pxor    xmm4,xmm4

+        cmp     ecx,DWORD[rbx]

+        cmovge  r8,rsp

+

+        movdqa  xmm1,xmm0

+        movdqa  xmm9,xmm8

+DB      15,58,204,194,3

+DB      15,56,200,206

+DB      69,15,58,204,194,3

+DB      69,15,56,200,205

+DB      15,56,202,254

+DB      69,15,56,202,245

+

+        cmp     ecx,DWORD[4+rbx]

+        cmovge  r9,rsp

+        movq    xmm6,QWORD[rbx]

+

+        movdqa  xmm2,xmm0

+        movdqa  xmm10,xmm8

+DB      15,58,204,193,3

+DB      15,56,200,215

+DB      69,15,58,204,193,3

+DB      69,15,56,200,214

+

+        pshufd  xmm11,xmm6,0x00

+        pshufd  xmm12,xmm6,0x55

+        movdqa  xmm7,xmm6

+        pcmpgtd xmm11,xmm4

+        pcmpgtd xmm12,xmm4

+

+        movdqa  xmm1,xmm0

+        movdqa  xmm9,xmm8

+DB      15,58,204,194,3

+DB      15,56,200,204

+DB      69,15,58,204,194,3

+DB      68,15,56,200,204

+

+        pcmpgtd xmm7,xmm4

+        pand    xmm0,xmm11

+        pand    xmm1,xmm11

+        pand    xmm8,xmm12

+        pand    xmm9,xmm12

+        paddd   xmm6,xmm7

+

+        paddd   xmm0,XMMWORD[64+rsp]

+        paddd   xmm1,XMMWORD[80+rsp]

+        paddd   xmm8,XMMWORD[96+rsp]

+        paddd   xmm9,XMMWORD[112+rsp]

+

+        movq    QWORD[rbx],xmm6

+        dec     edx

+        jnz     NEAR $L$oop_shaext

+

+        mov     edx,DWORD[280+rsp]

+

+        pshufd  xmm0,xmm0,27

+        pshufd  xmm8,xmm8,27

+

+        movdqa  xmm6,xmm0

+        punpckldq       xmm0,xmm8

+        punpckhdq       xmm6,xmm8

+        punpckhdq       xmm1,xmm9

+        movq    QWORD[(0-64)+rdi],xmm0

+        psrldq  xmm0,8

+        movq    QWORD[(64-64)+rdi],xmm6

+        psrldq  xmm6,8

+        movq    QWORD[(32-64)+rdi],xmm0

+        psrldq  xmm1,8

+        movq    QWORD[(96-64)+rdi],xmm6

+        movq    QWORD[(128-64)+rdi],xmm1

+

+        lea     rdi,[8+rdi]

+        lea     rsi,[32+rsi]

+        dec     edx

+        jnz     NEAR $L$oop_grande_shaext

+

+$L$done_shaext:

+

+        movaps  xmm6,XMMWORD[((-184))+rax]

+        movaps  xmm7,XMMWORD[((-168))+rax]

+        movaps  xmm8,XMMWORD[((-152))+rax]

+        movaps  xmm9,XMMWORD[((-136))+rax]

+        movaps  xmm10,XMMWORD[((-120))+rax]

+        movaps  xmm11,XMMWORD[((-104))+rax]

+        movaps  xmm12,XMMWORD[((-88))+rax]

+        movaps  xmm13,XMMWORD[((-72))+rax]

+        movaps  xmm14,XMMWORD[((-56))+rax]

+        movaps  xmm15,XMMWORD[((-40))+rax]

+        mov     rbp,QWORD[((-16))+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+

+        lea     rsp,[rax]

+

+$L$epilogue_shaext:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_sha1_multi_block_shaext:

+

+ALIGN   256

+        DD      0x5a827999,0x5a827999,0x5a827999,0x5a827999

+        DD      0x5a827999,0x5a827999,0x5a827999,0x5a827999

+K_XX_XX:

+        DD      0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1

+        DD      0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1

+        DD      0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc

+        DD      0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc

+        DD      0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6

+        DD      0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6

+        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f

+        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f

+DB
0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0

+DB      83,72,65,49,32,109,117,108,116,105,45,98,108,111,99,107

+DB      32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120

+DB      56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77

+DB      83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110

+DB      115,115,108,46,111,114,103,62,0

+EXTERN  __imp_RtlVirtualUnwind

+

+ALIGN   16

+se_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        mov     rsi,QWORD[8+r9]

+        mov     r11,QWORD[56+r9]

+

+        mov     r10d,DWORD[r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jb      NEAR $L$in_prologue

+

+        mov     rax,QWORD[152+r8]

+

+        mov     r10d,DWORD[4+r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jae     NEAR $L$in_prologue

+

+        mov     rax,QWORD[272+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+        mov     rbp,QWORD[((-16))+rax]

+        mov     QWORD[144+r8],rbx

+        mov     QWORD[160+r8],rbp

+

+        lea     rsi,[((-24-160))+rax]

+        lea     rdi,[512+r8]

+        mov     ecx,20

+        DD      0xa548f3fc

+

+$L$in_prologue:

+        mov     rdi,QWORD[8+rax]

+        mov     rsi,QWORD[16+rax]

+        mov     QWORD[152+r8],rax

+        mov     QWORD[168+r8],rsi

+        mov     QWORD[176+r8],rdi

+

+        mov     rdi,QWORD[40+r9]

+        mov     rsi,r8

+        mov     ecx,154

+        DD      0xa548f3fc

+

+        mov     rsi,r9

+        xor     rcx,rcx

+        mov     rdx,QWORD[8+rsi]

+        mov     r8,QWORD[rsi]

+        mov     r9,QWORD[16+rsi]

+        mov     r10,QWORD[40+rsi]

+        lea     r11,[56+rsi]

+        lea     r12,[24+rsi]

+        mov     QWORD[32+rsp],r10

+        mov     QWORD[40+rsp],r11

+        mov     QWORD[48+rsp],r12

+        mov     QWORD[56+rsp],rcx

+        call    QWORD[__imp_RtlVirtualUnwind]

+

+        mov     eax,1

+        add     rsp,64

+        popfq

+        pop     r15

+        pop     r14

+        pop     r13

+        pop     r12

+        pop     rbp

+        pop     rbx

+        pop     rdi

+        pop     rsi

+        DB      0F3h,0C3h               ;repret

+

+section .pdata rdata align=4

+ALIGN   4

+        DD      $L$SEH_begin_sha1_multi_block wrt ..imagebase

+        DD      $L$SEH_end_sha1_multi_block wrt ..imagebase

+        DD      $L$SEH_info_sha1_multi_block wrt ..imagebase

+        DD      $L$SEH_begin_sha1_multi_block_shaext wrt ..imagebase

+        DD      $L$SEH_end_sha1_multi_block_shaext wrt ..imagebase

+        DD      $L$SEH_info_sha1_multi_block_shaext wrt ..imagebase

+section .xdata rdata align=8

+ALIGN   8

+$L$SEH_info_sha1_multi_block:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$body wrt ..imagebase,$L$epilogue wrt ..imagebase

+$L$SEH_info_sha1_multi_block_shaext:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$body_shaext wrt ..imagebase,$L$epilogue_shaext
wrt ..imagebase

diff --git a/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-
x86_64.nasm
b/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-x86_64.nasm
new file mode 100644
index 0000000000..c6d68d348f
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-x86_64.nasm
@@ -0,0 +1,2884 @@
+; WARNING: do not edit!

+; Generated from openssl/crypto/sha/asm/sha1-x86_64.pl

+;

+; Copyright 2006-2020 The OpenSSL Project Authors. All Rights
Reserved.

+;

+; Licensed under the OpenSSL license (the "License").  You may not use

+; this file except in compliance with the License.  You can obtain a
copy

+; in the file LICENSE in the source distribution or at

+; https://www.openssl.org/source/license.html

+

+default rel

+%define XMMWORD

+%define YMMWORD

+%define ZMMWORD

+section .text code align=64

+

+EXTERN  OPENSSL_ia32cap_P

+

+global  sha1_block_data_order

+

+ALIGN   16

+sha1_block_data_order:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_sha1_block_data_order:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+

+        mov     r9d,DWORD[((OPENSSL_ia32cap_P+0))]

+        mov     r8d,DWORD[((OPENSSL_ia32cap_P+4))]

+        mov     r10d,DWORD[((OPENSSL_ia32cap_P+8))]

+        test    r8d,512

+        jz      NEAR $L$ialu

+        test    r10d,536870912

+        jnz     NEAR _shaext_shortcut

+        jmp     NEAR _ssse3_shortcut

+

+ALIGN   16

+$L$ialu:

+        mov     rax,rsp

+

+        push    rbx

+

+        push    rbp

+

+        push    r12

+

+        push    r13

+

+        push    r14

+

+        mov     r8,rdi

+        sub     rsp,72

+        mov     r9,rsi

+        and     rsp,-64

+        mov     r10,rdx

+        mov     QWORD[64+rsp],rax

+

+$L$prologue:

+

+        mov     esi,DWORD[r8]

+        mov     edi,DWORD[4+r8]

+        mov     r11d,DWORD[8+r8]

+        mov     r12d,DWORD[12+r8]

+        mov     r13d,DWORD[16+r8]

+        jmp     NEAR $L$loop

+

+ALIGN   16

+$L$loop:

+        mov     edx,DWORD[r9]

+        bswap   edx

+        mov     ebp,DWORD[4+r9]

+        mov     eax,r12d

+        mov     DWORD[rsp],edx

+        mov     ecx,esi

+        bswap   ebp

+        xor     eax,r11d

+        rol     ecx,5

+        and     eax,edi

+        lea     r13d,[1518500249+r13*1+rdx]

+        add     r13d,ecx

+        xor     eax,r12d

+        rol     edi,30

+        add     r13d,eax

+        mov     r14d,DWORD[8+r9]

+        mov     eax,r11d

+        mov     DWORD[4+rsp],ebp

+        mov     ecx,r13d

+        bswap   r14d

+        xor     eax,edi

+        rol     ecx,5

+        and     eax,esi

+        lea     r12d,[1518500249+r12*1+rbp]

+        add     r12d,ecx

+        xor     eax,r11d

+        rol     esi,30

+        add     r12d,eax

+        mov     edx,DWORD[12+r9]

+        mov     eax,edi

+        mov     DWORD[8+rsp],r14d

+        mov     ecx,r12d

+        bswap   edx

+        xor     eax,esi

+        rol     ecx,5

+        and     eax,r13d

+        lea     r11d,[1518500249+r11*1+r14]

+        add     r11d,ecx

+        xor     eax,edi

+        rol     r13d,30

+        add     r11d,eax

+        mov     ebp,DWORD[16+r9]

+        mov     eax,esi

+        mov     DWORD[12+rsp],edx

+        mov     ecx,r11d

+        bswap   ebp

+        xor     eax,r13d

+        rol     ecx,5

+        and     eax,r12d

+        lea     edi,[1518500249+rdi*1+rdx]

+        add     edi,ecx

+        xor     eax,esi

+        rol     r12d,30

+        add     edi,eax

+        mov     r14d,DWORD[20+r9]

+        mov     eax,r13d

+        mov     DWORD[16+rsp],ebp

+        mov     ecx,edi

+        bswap   r14d

+        xor     eax,r12d

+        rol     ecx,5

+        and     eax,r11d

+        lea     esi,[1518500249+rsi*1+rbp]

+        add     esi,ecx

+        xor     eax,r13d

+        rol     r11d,30

+        add     esi,eax

+        mov     edx,DWORD[24+r9]

+        mov     eax,r12d

+        mov     DWORD[20+rsp],r14d

+        mov     ecx,esi

+        bswap   edx

+        xor     eax,r11d

+        rol     ecx,5

+        and     eax,edi

+        lea     r13d,[1518500249+r13*1+r14]

+        add     r13d,ecx

+        xor     eax,r12d

+        rol     edi,30

+        add     r13d,eax

+        mov     ebp,DWORD[28+r9]

+        mov     eax,r11d

+        mov     DWORD[24+rsp],edx

+        mov     ecx,r13d

+        bswap   ebp

+        xor     eax,edi

+        rol     ecx,5

+        and     eax,esi

+        lea     r12d,[1518500249+r12*1+rdx]

+        add     r12d,ecx

+        xor     eax,r11d

+        rol     esi,30

+        add     r12d,eax

+        mov     r14d,DWORD[32+r9]

+        mov     eax,edi

+        mov     DWORD[28+rsp],ebp

+        mov     ecx,r12d

+        bswap   r14d

+        xor     eax,esi

+        rol     ecx,5

+        and     eax,r13d

+        lea     r11d,[1518500249+r11*1+rbp]

+        add     r11d,ecx

+        xor     eax,edi

+        rol     r13d,30

+        add     r11d,eax

+        mov     edx,DWORD[36+r9]

+        mov     eax,esi

+        mov     DWORD[32+rsp],r14d

+        mov     ecx,r11d

+        bswap   edx

+        xor     eax,r13d

+        rol     ecx,5

+        and     eax,r12d

+        lea     edi,[1518500249+rdi*1+r14]

+        add     edi,ecx

+        xor     eax,esi

+        rol     r12d,30

+        add     edi,eax

+        mov     ebp,DWORD[40+r9]

+        mov     eax,r13d

+        mov     DWORD[36+rsp],edx

+        mov     ecx,edi

+        bswap   ebp

+        xor     eax,r12d

+        rol     ecx,5

+        and     eax,r11d

+        lea     esi,[1518500249+rsi*1+rdx]

+        add     esi,ecx

+        xor     eax,r13d

+        rol     r11d,30

+        add     esi,eax

+        mov     r14d,DWORD[44+r9]

+        mov     eax,r12d

+        mov     DWORD[40+rsp],ebp

+        mov     ecx,esi

+        bswap   r14d

+        xor     eax,r11d

+        rol     ecx,5

+        and     eax,edi

+        lea     r13d,[1518500249+r13*1+rbp]

+        add     r13d,ecx

+        xor     eax,r12d

+        rol     edi,30

+        add     r13d,eax

+        mov     edx,DWORD[48+r9]

+        mov     eax,r11d

+        mov     DWORD[44+rsp],r14d

+        mov     ecx,r13d

+        bswap   edx

+        xor     eax,edi

+        rol     ecx,5

+        and     eax,esi

+        lea     r12d,[1518500249+r12*1+r14]

+        add     r12d,ecx

+        xor     eax,r11d

+        rol     esi,30

+        add     r12d,eax

+        mov     ebp,DWORD[52+r9]

+        mov     eax,edi

+        mov     DWORD[48+rsp],edx

+        mov     ecx,r12d

+        bswap   ebp

+        xor     eax,esi

+        rol     ecx,5

+        and     eax,r13d

+        lea     r11d,[1518500249+r11*1+rdx]

+        add     r11d,ecx

+        xor     eax,edi

+        rol     r13d,30

+        add     r11d,eax

+        mov     r14d,DWORD[56+r9]

+        mov     eax,esi

+        mov     DWORD[52+rsp],ebp

+        mov     ecx,r11d

+        bswap   r14d

+        xor     eax,r13d

+        rol     ecx,5

+        and     eax,r12d

+        lea     edi,[1518500249+rdi*1+rbp]

+        add     edi,ecx

+        xor     eax,esi

+        rol     r12d,30

+        add     edi,eax

+        mov     edx,DWORD[60+r9]

+        mov     eax,r13d

+        mov     DWORD[56+rsp],r14d

+        mov     ecx,edi

+        bswap   edx

+        xor     eax,r12d

+        rol     ecx,5

+        and     eax,r11d

+        lea     esi,[1518500249+rsi*1+r14]

+        add     esi,ecx

+        xor     eax,r13d

+        rol     r11d,30

+        add     esi,eax

+        xor     ebp,DWORD[rsp]

+        mov     eax,r12d

+        mov     DWORD[60+rsp],edx

+        mov     ecx,esi

+        xor     ebp,DWORD[8+rsp]

+        xor     eax,r11d

+        rol     ecx,5

+        xor     ebp,DWORD[32+rsp]

+        and     eax,edi

+        lea     r13d,[1518500249+r13*1+rdx]

+        rol     edi,30

+        xor     eax,r12d

+        add     r13d,ecx

+        rol     ebp,1

+        add     r13d,eax

+        xor     r14d,DWORD[4+rsp]

+        mov     eax,r11d

+        mov     DWORD[rsp],ebp

+        mov     ecx,r13d

+        xor     r14d,DWORD[12+rsp]

+        xor     eax,edi

+        rol     ecx,5

+        xor     r14d,DWORD[36+rsp]

+        and     eax,esi

+        lea     r12d,[1518500249+r12*1+rbp]

+        rol     esi,30

+        xor     eax,r11d

+        add     r12d,ecx

+        rol     r14d,1

+        add     r12d,eax

+        xor     edx,DWORD[8+rsp]

+        mov     eax,edi

+        mov     DWORD[4+rsp],r14d

+        mov     ecx,r12d

+        xor     edx,DWORD[16+rsp]

+        xor     eax,esi

+        rol     ecx,5

+        xor     edx,DWORD[40+rsp]

+        and     eax,r13d

+        lea     r11d,[1518500249+r11*1+r14]

+        rol     r13d,30

+        xor     eax,edi

+        add     r11d,ecx

+        rol     edx,1

+        add     r11d,eax

+        xor     ebp,DWORD[12+rsp]

+        mov     eax,esi

+        mov     DWORD[8+rsp],edx

+        mov     ecx,r11d

+        xor     ebp,DWORD[20+rsp]

+        xor     eax,r13d

+        rol     ecx,5

+        xor     ebp,DWORD[44+rsp]

+        and     eax,r12d

+        lea     edi,[1518500249+rdi*1+rdx]

+        rol     r12d,30

+        xor     eax,esi

+        add     edi,ecx

+        rol     ebp,1

+        add     edi,eax

+        xor     r14d,DWORD[16+rsp]

+        mov     eax,r13d

+        mov     DWORD[12+rsp],ebp

+        mov     ecx,edi

+        xor     r14d,DWORD[24+rsp]

+        xor     eax,r12d

+        rol     ecx,5

+        xor     r14d,DWORD[48+rsp]

+        and     eax,r11d

+        lea     esi,[1518500249+rsi*1+rbp]

+        rol     r11d,30

+        xor     eax,r13d

+        add     esi,ecx

+        rol     r14d,1

+        add     esi,eax

+        xor     edx,DWORD[20+rsp]

+        mov     eax,edi

+        mov     DWORD[16+rsp],r14d

+        mov     ecx,esi

+        xor     edx,DWORD[28+rsp]

+        xor     eax,r12d

+        rol     ecx,5

+        xor     edx,DWORD[52+rsp]

+        lea     r13d,[1859775393+r13*1+r14]

+        xor     eax,r11d

+        add     r13d,ecx

+        rol     edi,30

+        add     r13d,eax

+        rol     edx,1

+        xor     ebp,DWORD[24+rsp]

+        mov     eax,esi

+        mov     DWORD[20+rsp],edx

+        mov     ecx,r13d

+        xor     ebp,DWORD[32+rsp]

+        xor     eax,r11d

+        rol     ecx,5

+        xor     ebp,DWORD[56+rsp]

+        lea     r12d,[1859775393+r12*1+rdx]

+        xor     eax,edi

+        add     r12d,ecx

+        rol     esi,30

+        add     r12d,eax

+        rol     ebp,1

+        xor     r14d,DWORD[28+rsp]

+        mov     eax,r13d

+        mov     DWORD[24+rsp],ebp

+        mov     ecx,r12d

+        xor     r14d,DWORD[36+rsp]

+        xor     eax,edi

+        rol     ecx,5

+        xor     r14d,DWORD[60+rsp]

+        lea     r11d,[1859775393+r11*1+rbp]

+        xor     eax,esi

+        add     r11d,ecx

+        rol     r13d,30

+        add     r11d,eax

+        rol     r14d,1

+        xor     edx,DWORD[32+rsp]

+        mov     eax,r12d

+        mov     DWORD[28+rsp],r14d

+        mov     ecx,r11d

+        xor     edx,DWORD[40+rsp]

+        xor     eax,esi

+        rol     ecx,5

+        xor     edx,DWORD[rsp]

+        lea     edi,[1859775393+rdi*1+r14]

+        xor     eax,r13d

+        add     edi,ecx

+        rol     r12d,30

+        add     edi,eax

+        rol     edx,1

+        xor     ebp,DWORD[36+rsp]

+        mov     eax,r11d

+        mov     DWORD[32+rsp],edx

+        mov     ecx,edi

+        xor     ebp,DWORD[44+rsp]

+        xor     eax,r13d

+        rol     ecx,5

+        xor     ebp,DWORD[4+rsp]

+        lea     esi,[1859775393+rsi*1+rdx]

+        xor     eax,r12d

+        add     esi,ecx

+        rol     r11d,30

+        add     esi,eax

+        rol     ebp,1

+        xor     r14d,DWORD[40+rsp]

+        mov     eax,edi

+        mov     DWORD[36+rsp],ebp

+        mov     ecx,esi

+        xor     r14d,DWORD[48+rsp]

+        xor     eax,r12d

+        rol     ecx,5

+        xor     r14d,DWORD[8+rsp]

+        lea     r13d,[1859775393+r13*1+rbp]

+        xor     eax,r11d

+        add     r13d,ecx

+        rol     edi,30

+        add     r13d,eax

+        rol     r14d,1

+        xor     edx,DWORD[44+rsp]

+        mov     eax,esi

+        mov     DWORD[40+rsp],r14d

+        mov     ecx,r13d

+        xor     edx,DWORD[52+rsp]

+        xor     eax,r11d

+        rol     ecx,5

+        xor     edx,DWORD[12+rsp]

+        lea     r12d,[1859775393+r12*1+r14]

+        xor     eax,edi

+        add     r12d,ecx

+        rol     esi,30

+        add     r12d,eax

+        rol     edx,1

+        xor     ebp,DWORD[48+rsp]

+        mov     eax,r13d

+        mov     DWORD[44+rsp],edx

+        mov     ecx,r12d

+        xor     ebp,DWORD[56+rsp]

+        xor     eax,edi

+        rol     ecx,5

+        xor     ebp,DWORD[16+rsp]

+        lea     r11d,[1859775393+r11*1+rdx]

+        xor     eax,esi

+        add     r11d,ecx

+        rol     r13d,30

+        add     r11d,eax

+        rol     ebp,1

+        xor     r14d,DWORD[52+rsp]

+        mov     eax,r12d

+        mov     DWORD[48+rsp],ebp

+        mov     ecx,r11d

+        xor     r14d,DWORD[60+rsp]

+        xor     eax,esi

+        rol     ecx,5

+        xor     r14d,DWORD[20+rsp]

+        lea     edi,[1859775393+rdi*1+rbp]

+        xor     eax,r13d

+        add     edi,ecx

+        rol     r12d,30

+        add     edi,eax

+        rol     r14d,1

+        xor     edx,DWORD[56+rsp]

+        mov     eax,r11d

+        mov     DWORD[52+rsp],r14d

+        mov     ecx,edi

+        xor     edx,DWORD[rsp]

+        xor     eax,r13d

+        rol     ecx,5

+        xor     edx,DWORD[24+rsp]

+        lea     esi,[1859775393+rsi*1+r14]

+        xor     eax,r12d

+        add     esi,ecx

+        rol     r11d,30

+        add     esi,eax

+        rol     edx,1

+        xor     ebp,DWORD[60+rsp]

+        mov     eax,edi

+        mov     DWORD[56+rsp],edx

+        mov     ecx,esi

+        xor     ebp,DWORD[4+rsp]

+        xor     eax,r12d

+        rol     ecx,5

+        xor     ebp,DWORD[28+rsp]

+        lea     r13d,[1859775393+r13*1+rdx]

+        xor     eax,r11d

+        add     r13d,ecx

+        rol     edi,30

+        add     r13d,eax

+        rol     ebp,1

+        xor     r14d,DWORD[rsp]

+        mov     eax,esi

+        mov     DWORD[60+rsp],ebp

+        mov     ecx,r13d

+        xor     r14d,DWORD[8+rsp]

+        xor     eax,r11d

+        rol     ecx,5

+        xor     r14d,DWORD[32+rsp]

+        lea     r12d,[1859775393+r12*1+rbp]

+        xor     eax,edi

+        add     r12d,ecx

+        rol     esi,30

+        add     r12d,eax

+        rol     r14d,1

+        xor     edx,DWORD[4+rsp]

+        mov     eax,r13d

+        mov     DWORD[rsp],r14d

+        mov     ecx,r12d

+        xor     edx,DWORD[12+rsp]

+        xor     eax,edi

+        rol     ecx,5

+        xor     edx,DWORD[36+rsp]

+        lea     r11d,[1859775393+r11*1+r14]

+        xor     eax,esi

+        add     r11d,ecx

+        rol     r13d,30

+        add     r11d,eax

+        rol     edx,1

+        xor     ebp,DWORD[8+rsp]

+        mov     eax,r12d

+        mov     DWORD[4+rsp],edx

+        mov     ecx,r11d

+        xor     ebp,DWORD[16+rsp]

+        xor     eax,esi

+        rol     ecx,5

+        xor     ebp,DWORD[40+rsp]

+        lea     edi,[1859775393+rdi*1+rdx]

+        xor     eax,r13d

+        add     edi,ecx

+        rol     r12d,30

+        add     edi,eax

+        rol     ebp,1

+        xor     r14d,DWORD[12+rsp]

+        mov     eax,r11d

+        mov     DWORD[8+rsp],ebp

+        mov     ecx,edi

+        xor     r14d,DWORD[20+rsp]

+        xor     eax,r13d

+        rol     ecx,5

+        xor     r14d,DWORD[44+rsp]

+        lea     esi,[1859775393+rsi*1+rbp]

+        xor     eax,r12d

+        add     esi,ecx

+        rol     r11d,30

+        add     esi,eax

+        rol     r14d,1

+        xor     edx,DWORD[16+rsp]

+        mov     eax,edi

+        mov     DWORD[12+rsp],r14d

+        mov     ecx,esi

+        xor     edx,DWORD[24+rsp]

+        xor     eax,r12d

+        rol     ecx,5

+        xor     edx,DWORD[48+rsp]

+        lea     r13d,[1859775393+r13*1+r14]

+        xor     eax,r11d

+        add     r13d,ecx

+        rol     edi,30

+        add     r13d,eax

+        rol     edx,1

+        xor     ebp,DWORD[20+rsp]

+        mov     eax,esi

+        mov     DWORD[16+rsp],edx

+        mov     ecx,r13d

+        xor     ebp,DWORD[28+rsp]

+        xor     eax,r11d

+        rol     ecx,5

+        xor     ebp,DWORD[52+rsp]

+        lea     r12d,[1859775393+r12*1+rdx]

+        xor     eax,edi

+        add     r12d,ecx

+        rol     esi,30

+        add     r12d,eax

+        rol     ebp,1

+        xor     r14d,DWORD[24+rsp]

+        mov     eax,r13d

+        mov     DWORD[20+rsp],ebp

+        mov     ecx,r12d

+        xor     r14d,DWORD[32+rsp]

+        xor     eax,edi

+        rol     ecx,5

+        xor     r14d,DWORD[56+rsp]

+        lea     r11d,[1859775393+r11*1+rbp]

+        xor     eax,esi

+        add     r11d,ecx

+        rol     r13d,30

+        add     r11d,eax

+        rol     r14d,1

+        xor     edx,DWORD[28+rsp]

+        mov     eax,r12d

+        mov     DWORD[24+rsp],r14d

+        mov     ecx,r11d

+        xor     edx,DWORD[36+rsp]

+        xor     eax,esi

+        rol     ecx,5

+        xor     edx,DWORD[60+rsp]

+        lea     edi,[1859775393+rdi*1+r14]

+        xor     eax,r13d

+        add     edi,ecx

+        rol     r12d,30

+        add     edi,eax

+        rol     edx,1

+        xor     ebp,DWORD[32+rsp]

+        mov     eax,r11d

+        mov     DWORD[28+rsp],edx

+        mov     ecx,edi

+        xor     ebp,DWORD[40+rsp]

+        xor     eax,r13d

+        rol     ecx,5

+        xor     ebp,DWORD[rsp]

+        lea     esi,[1859775393+rsi*1+rdx]

+        xor     eax,r12d

+        add     esi,ecx

+        rol     r11d,30

+        add     esi,eax

+        rol     ebp,1

+        xor     r14d,DWORD[36+rsp]

+        mov     eax,r12d

+        mov     DWORD[32+rsp],ebp

+        mov     ebx,r12d

+        xor     r14d,DWORD[44+rsp]

+        and     eax,r11d

+        mov     ecx,esi

+        xor     r14d,DWORD[4+rsp]

+        lea     r13d,[((-1894007588))+r13*1+rbp]

+        xor     ebx,r11d

+        rol     ecx,5

+        add     r13d,eax

+        rol     r14d,1

+        and     ebx,edi

+        add     r13d,ecx

+        rol     edi,30

+        add     r13d,ebx

+        xor     edx,DWORD[40+rsp]

+        mov     eax,r11d

+        mov     DWORD[36+rsp],r14d

+        mov     ebx,r11d

+        xor     edx,DWORD[48+rsp]

+        and     eax,edi

+        mov     ecx,r13d

+        xor     edx,DWORD[8+rsp]

+        lea     r12d,[((-1894007588))+r12*1+r14]

+        xor     ebx,edi

+        rol     ecx,5

+        add     r12d,eax

+        rol     edx,1

+        and     ebx,esi

+        add     r12d,ecx

+        rol     esi,30

+        add     r12d,ebx

+        xor     ebp,DWORD[44+rsp]

+        mov     eax,edi

+        mov     DWORD[40+rsp],edx

+        mov     ebx,edi

+        xor     ebp,DWORD[52+rsp]

+        and     eax,esi

+        mov     ecx,r12d

+        xor     ebp,DWORD[12+rsp]

+        lea     r11d,[((-1894007588))+r11*1+rdx]

+        xor     ebx,esi

+        rol     ecx,5

+        add     r11d,eax

+        rol     ebp,1

+        and     ebx,r13d

+        add     r11d,ecx

+        rol     r13d,30

+        add     r11d,ebx

+        xor     r14d,DWORD[48+rsp]

+        mov     eax,esi

+        mov     DWORD[44+rsp],ebp

+        mov     ebx,esi

+        xor     r14d,DWORD[56+rsp]

+        and     eax,r13d

+        mov     ecx,r11d

+        xor     r14d,DWORD[16+rsp]

+        lea     edi,[((-1894007588))+rdi*1+rbp]

+        xor     ebx,r13d

+        rol     ecx,5

+        add     edi,eax

+        rol     r14d,1

+        and     ebx,r12d

+        add     edi,ecx

+        rol     r12d,30

+        add     edi,ebx

+        xor     edx,DWORD[52+rsp]

+        mov     eax,r13d

+        mov     DWORD[48+rsp],r14d

+        mov     ebx,r13d

+        xor     edx,DWORD[60+rsp]

+        and     eax,r12d

+        mov     ecx,edi

+        xor     edx,DWORD[20+rsp]

+        lea     esi,[((-1894007588))+rsi*1+r14]

+        xor     ebx,r12d

+        rol     ecx,5

+        add     esi,eax

+        rol     edx,1

+        and     ebx,r11d

+        add     esi,ecx

+        rol     r11d,30

+        add     esi,ebx

+        xor     ebp,DWORD[56+rsp]

+        mov     eax,r12d

+        mov     DWORD[52+rsp],edx

+        mov     ebx,r12d

+        xor     ebp,DWORD[rsp]

+        and     eax,r11d

+        mov     ecx,esi

+        xor     ebp,DWORD[24+rsp]

+        lea     r13d,[((-1894007588))+r13*1+rdx]

+        xor     ebx,r11d

+        rol     ecx,5

+        add     r13d,eax

+        rol     ebp,1

+        and     ebx,edi

+        add     r13d,ecx

+        rol     edi,30

+        add     r13d,ebx

+        xor     r14d,DWORD[60+rsp]

+        mov     eax,r11d

+        mov     DWORD[56+rsp],ebp

+        mov     ebx,r11d

+        xor     r14d,DWORD[4+rsp]

+        and     eax,edi

+        mov     ecx,r13d

+        xor     r14d,DWORD[28+rsp]

+        lea     r12d,[((-1894007588))+r12*1+rbp]

+        xor     ebx,edi

+        rol     ecx,5

+        add     r12d,eax

+        rol     r14d,1

+        and     ebx,esi

+        add     r12d,ecx

+        rol     esi,30

+        add     r12d,ebx

+        xor     edx,DWORD[rsp]

+        mov     eax,edi

+        mov     DWORD[60+rsp],r14d

+        mov     ebx,edi

+        xor     edx,DWORD[8+rsp]

+        and     eax,esi

+        mov     ecx,r12d

+        xor     edx,DWORD[32+rsp]

+        lea     r11d,[((-1894007588))+r11*1+r14]

+        xor     ebx,esi

+        rol     ecx,5

+        add     r11d,eax

+        rol     edx,1

+        and     ebx,r13d

+        add     r11d,ecx

+        rol     r13d,30

+        add     r11d,ebx

+        xor     ebp,DWORD[4+rsp]

+        mov     eax,esi

+        mov     DWORD[rsp],edx

+        mov     ebx,esi

+        xor     ebp,DWORD[12+rsp]

+        and     eax,r13d

+        mov     ecx,r11d

+        xor     ebp,DWORD[36+rsp]

+        lea     edi,[((-1894007588))+rdi*1+rdx]

+        xor     ebx,r13d

+        rol     ecx,5

+        add     edi,eax

+        rol     ebp,1

+        and     ebx,r12d

+        add     edi,ecx

+        rol     r12d,30

+        add     edi,ebx

+        xor     r14d,DWORD[8+rsp]

+        mov     eax,r13d

+        mov     DWORD[4+rsp],ebp

+        mov     ebx,r13d

+        xor     r14d,DWORD[16+rsp]

+        and     eax,r12d

+        mov     ecx,edi

+        xor     r14d,DWORD[40+rsp]

+        lea     esi,[((-1894007588))+rsi*1+rbp]

+        xor     ebx,r12d

+        rol     ecx,5

+        add     esi,eax

+        rol     r14d,1

+        and     ebx,r11d

+        add     esi,ecx

+        rol     r11d,30

+        add     esi,ebx

+        xor     edx,DWORD[12+rsp]

+        mov     eax,r12d

+        mov     DWORD[8+rsp],r14d

+        mov     ebx,r12d

+        xor     edx,DWORD[20+rsp]

+        and     eax,r11d

+        mov     ecx,esi

+        xor     edx,DWORD[44+rsp]

+        lea     r13d,[((-1894007588))+r13*1+r14]

+        xor     ebx,r11d

+        rol     ecx,5

+        add     r13d,eax

+        rol     edx,1

+        and     ebx,edi

+        add     r13d,ecx

+        rol     edi,30

+        add     r13d,ebx

+        xor     ebp,DWORD[16+rsp]

+        mov     eax,r11d

+        mov     DWORD[12+rsp],edx

+        mov     ebx,r11d

+        xor     ebp,DWORD[24+rsp]

+        and     eax,edi

+        mov     ecx,r13d

+        xor     ebp,DWORD[48+rsp]

+        lea     r12d,[((-1894007588))+r12*1+rdx]

+        xor     ebx,edi

+        rol     ecx,5

+        add     r12d,eax

+        rol     ebp,1

+        and     ebx,esi

+        add     r12d,ecx

+        rol     esi,30

+        add     r12d,ebx

+        xor     r14d,DWORD[20+rsp]

+        mov     eax,edi

+        mov     DWORD[16+rsp],ebp

+        mov     ebx,edi

+        xor     r14d,DWORD[28+rsp]

+        and     eax,esi

+        mov     ecx,r12d

+        xor     r14d,DWORD[52+rsp]

+        lea     r11d,[((-1894007588))+r11*1+rbp]

+        xor     ebx,esi

+        rol     ecx,5

+        add     r11d,eax

+        rol     r14d,1

+        and     ebx,r13d

+        add     r11d,ecx

+        rol     r13d,30

+        add     r11d,ebx

+        xor     edx,DWORD[24+rsp]

+        mov     eax,esi

+        mov     DWORD[20+rsp],r14d

+        mov     ebx,esi

+        xor     edx,DWORD[32+rsp]

+        and     eax,r13d

+        mov     ecx,r11d

+        xor     edx,DWORD[56+rsp]

+        lea     edi,[((-1894007588))+rdi*1+r14]

+        xor     ebx,r13d

+        rol     ecx,5

+        add     edi,eax

+        rol     edx,1

+        and     ebx,r12d

+        add     edi,ecx

+        rol     r12d,30

+        add     edi,ebx

+        xor     ebp,DWORD[28+rsp]

+        mov     eax,r13d

+        mov     DWORD[24+rsp],edx

+        mov     ebx,r13d

+        xor     ebp,DWORD[36+rsp]

+        and     eax,r12d

+        mov     ecx,edi

+        xor     ebp,DWORD[60+rsp]

+        lea     esi,[((-1894007588))+rsi*1+rdx]

+        xor     ebx,r12d

+        rol     ecx,5

+        add     esi,eax

+        rol     ebp,1

+        and     ebx,r11d

+        add     esi,ecx

+        rol     r11d,30

+        add     esi,ebx

+        xor     r14d,DWORD[32+rsp]

+        mov     eax,r12d

+        mov     DWORD[28+rsp],ebp

+        mov     ebx,r12d

+        xor     r14d,DWORD[40+rsp]

+        and     eax,r11d

+        mov     ecx,esi

+        xor     r14d,DWORD[rsp]

+        lea     r13d,[((-1894007588))+r13*1+rbp]

+        xor     ebx,r11d

+        rol     ecx,5

+        add     r13d,eax

+        rol     r14d,1

+        and     ebx,edi

+        add     r13d,ecx

+        rol     edi,30

+        add     r13d,ebx

+        xor     edx,DWORD[36+rsp]

+        mov     eax,r11d

+        mov     DWORD[32+rsp],r14d

+        mov     ebx,r11d

+        xor     edx,DWORD[44+rsp]

+        and     eax,edi

+        mov     ecx,r13d

+        xor     edx,DWORD[4+rsp]

+        lea     r12d,[((-1894007588))+r12*1+r14]

+        xor     ebx,edi

+        rol     ecx,5

+        add     r12d,eax

+        rol     edx,1

+        and     ebx,esi

+        add     r12d,ecx

+        rol     esi,30

+        add     r12d,ebx

+        xor     ebp,DWORD[40+rsp]

+        mov     eax,edi

+        mov     DWORD[36+rsp],edx

+        mov     ebx,edi

+        xor     ebp,DWORD[48+rsp]

+        and     eax,esi

+        mov     ecx,r12d

+        xor     ebp,DWORD[8+rsp]

+        lea     r11d,[((-1894007588))+r11*1+rdx]

+        xor     ebx,esi

+        rol     ecx,5

+        add     r11d,eax

+        rol     ebp,1

+        and     ebx,r13d

+        add     r11d,ecx

+        rol     r13d,30

+        add     r11d,ebx

+        xor     r14d,DWORD[44+rsp]

+        mov     eax,esi

+        mov     DWORD[40+rsp],ebp

+        mov     ebx,esi

+        xor     r14d,DWORD[52+rsp]

+        and     eax,r13d

+        mov     ecx,r11d

+        xor     r14d,DWORD[12+rsp]

+        lea     edi,[((-1894007588))+rdi*1+rbp]

+        xor     ebx,r13d

+        rol     ecx,5

+        add     edi,eax

+        rol     r14d,1

+        and     ebx,r12d

+        add     edi,ecx

+        rol     r12d,30

+        add     edi,ebx

+        xor     edx,DWORD[48+rsp]

+        mov     eax,r13d

+        mov     DWORD[44+rsp],r14d

+        mov     ebx,r13d

+        xor     edx,DWORD[56+rsp]

+        and     eax,r12d

+        mov     ecx,edi

+        xor     edx,DWORD[16+rsp]

+        lea     esi,[((-1894007588))+rsi*1+r14]

+        xor     ebx,r12d

+        rol     ecx,5

+        add     esi,eax

+        rol     edx,1

+        and     ebx,r11d

+        add     esi,ecx

+        rol     r11d,30

+        add     esi,ebx

+        xor     ebp,DWORD[52+rsp]

+        mov     eax,edi

+        mov     DWORD[48+rsp],edx

+        mov     ecx,esi

+        xor     ebp,DWORD[60+rsp]

+        xor     eax,r12d

+        rol     ecx,5

+        xor     ebp,DWORD[20+rsp]

+        lea     r13d,[((-899497514))+r13*1+rdx]

+        xor     eax,r11d

+        add     r13d,ecx

+        rol     edi,30

+        add     r13d,eax

+        rol     ebp,1

+        xor     r14d,DWORD[56+rsp]

+        mov     eax,esi

+        mov     DWORD[52+rsp],ebp

+        mov     ecx,r13d

+        xor     r14d,DWORD[rsp]

+        xor     eax,r11d

+        rol     ecx,5

+        xor     r14d,DWORD[24+rsp]

+        lea     r12d,[((-899497514))+r12*1+rbp]

+        xor     eax,edi

+        add     r12d,ecx

+        rol     esi,30

+        add     r12d,eax

+        rol     r14d,1

+        xor     edx,DWORD[60+rsp]

+        mov     eax,r13d

+        mov     DWORD[56+rsp],r14d

+        mov     ecx,r12d

+        xor     edx,DWORD[4+rsp]

+        xor     eax,edi

+        rol     ecx,5

+        xor     edx,DWORD[28+rsp]

+        lea     r11d,[((-899497514))+r11*1+r14]

+        xor     eax,esi

+        add     r11d,ecx

+        rol     r13d,30

+        add     r11d,eax

+        rol     edx,1

+        xor     ebp,DWORD[rsp]

+        mov     eax,r12d

+        mov     DWORD[60+rsp],edx

+        mov     ecx,r11d

+        xor     ebp,DWORD[8+rsp]

+        xor     eax,esi

+        rol     ecx,5

+        xor     ebp,DWORD[32+rsp]

+        lea     edi,[((-899497514))+rdi*1+rdx]

+        xor     eax,r13d

+        add     edi,ecx

+        rol     r12d,30

+        add     edi,eax

+        rol     ebp,1

+        xor     r14d,DWORD[4+rsp]

+        mov     eax,r11d

+        mov     DWORD[rsp],ebp

+        mov     ecx,edi

+        xor     r14d,DWORD[12+rsp]

+        xor     eax,r13d

+        rol     ecx,5

+        xor     r14d,DWORD[36+rsp]

+        lea     esi,[((-899497514))+rsi*1+rbp]

+        xor     eax,r12d

+        add     esi,ecx

+        rol     r11d,30

+        add     esi,eax

+        rol     r14d,1

+        xor     edx,DWORD[8+rsp]

+        mov     eax,edi

+        mov     DWORD[4+rsp],r14d

+        mov     ecx,esi

+        xor     edx,DWORD[16+rsp]

+        xor     eax,r12d

+        rol     ecx,5

+        xor     edx,DWORD[40+rsp]

+        lea     r13d,[((-899497514))+r13*1+r14]

+        xor     eax,r11d

+        add     r13d,ecx

+        rol     edi,30

+        add     r13d,eax

+        rol     edx,1

+        xor     ebp,DWORD[12+rsp]

+        mov     eax,esi

+        mov     DWORD[8+rsp],edx

+        mov     ecx,r13d

+        xor     ebp,DWORD[20+rsp]

+        xor     eax,r11d

+        rol     ecx,5

+        xor     ebp,DWORD[44+rsp]

+        lea     r12d,[((-899497514))+r12*1+rdx]

+        xor     eax,edi

+        add     r12d,ecx

+        rol     esi,30

+        add     r12d,eax

+        rol     ebp,1

+        xor     r14d,DWORD[16+rsp]

+        mov     eax,r13d

+        mov     DWORD[12+rsp],ebp

+        mov     ecx,r12d

+        xor     r14d,DWORD[24+rsp]

+        xor     eax,edi

+        rol     ecx,5

+        xor     r14d,DWORD[48+rsp]

+        lea     r11d,[((-899497514))+r11*1+rbp]

+        xor     eax,esi

+        add     r11d,ecx

+        rol     r13d,30

+        add     r11d,eax

+        rol     r14d,1

+        xor     edx,DWORD[20+rsp]

+        mov     eax,r12d

+        mov     DWORD[16+rsp],r14d

+        mov     ecx,r11d

+        xor     edx,DWORD[28+rsp]

+        xor     eax,esi

+        rol     ecx,5

+        xor     edx,DWORD[52+rsp]

+        lea     edi,[((-899497514))+rdi*1+r14]

+        xor     eax,r13d

+        add     edi,ecx

+        rol     r12d,30

+        add     edi,eax

+        rol     edx,1

+        xor     ebp,DWORD[24+rsp]

+        mov     eax,r11d

+        mov     DWORD[20+rsp],edx

+        mov     ecx,edi

+        xor     ebp,DWORD[32+rsp]

+        xor     eax,r13d

+        rol     ecx,5

+        xor     ebp,DWORD[56+rsp]

+        lea     esi,[((-899497514))+rsi*1+rdx]

+        xor     eax,r12d

+        add     esi,ecx

+        rol     r11d,30

+        add     esi,eax

+        rol     ebp,1

+        xor     r14d,DWORD[28+rsp]

+        mov     eax,edi

+        mov     DWORD[24+rsp],ebp

+        mov     ecx,esi

+        xor     r14d,DWORD[36+rsp]

+        xor     eax,r12d

+        rol     ecx,5

+        xor     r14d,DWORD[60+rsp]

+        lea     r13d,[((-899497514))+r13*1+rbp]

+        xor     eax,r11d

+        add     r13d,ecx

+        rol     edi,30

+        add     r13d,eax

+        rol     r14d,1

+        xor     edx,DWORD[32+rsp]

+        mov     eax,esi

+        mov     DWORD[28+rsp],r14d

+        mov     ecx,r13d

+        xor     edx,DWORD[40+rsp]

+        xor     eax,r11d

+        rol     ecx,5

+        xor     edx,DWORD[rsp]

+        lea     r12d,[((-899497514))+r12*1+r14]

+        xor     eax,edi

+        add     r12d,ecx

+        rol     esi,30

+        add     r12d,eax

+        rol     edx,1

+        xor     ebp,DWORD[36+rsp]

+        mov     eax,r13d

+

+        mov     ecx,r12d

+        xor     ebp,DWORD[44+rsp]

+        xor     eax,edi

+        rol     ecx,5

+        xor     ebp,DWORD[4+rsp]

+        lea     r11d,[((-899497514))+r11*1+rdx]

+        xor     eax,esi

+        add     r11d,ecx

+        rol     r13d,30

+        add     r11d,eax

+        rol     ebp,1

+        xor     r14d,DWORD[40+rsp]

+        mov     eax,r12d

+

+        mov     ecx,r11d

+        xor     r14d,DWORD[48+rsp]

+        xor     eax,esi

+        rol     ecx,5

+        xor     r14d,DWORD[8+rsp]

+        lea     edi,[((-899497514))+rdi*1+rbp]

+        xor     eax,r13d

+        add     edi,ecx

+        rol     r12d,30

+        add     edi,eax

+        rol     r14d,1

+        xor     edx,DWORD[44+rsp]

+        mov     eax,r11d

+

+        mov     ecx,edi

+        xor     edx,DWORD[52+rsp]

+        xor     eax,r13d

+        rol     ecx,5

+        xor     edx,DWORD[12+rsp]

+        lea     esi,[((-899497514))+rsi*1+r14]

+        xor     eax,r12d

+        add     esi,ecx

+        rol     r11d,30

+        add     esi,eax

+        rol     edx,1

+        xor     ebp,DWORD[48+rsp]

+        mov     eax,edi

+

+        mov     ecx,esi

+        xor     ebp,DWORD[56+rsp]

+        xor     eax,r12d

+        rol     ecx,5

+        xor     ebp,DWORD[16+rsp]

+        lea     r13d,[((-899497514))+r13*1+rdx]

+        xor     eax,r11d

+        add     r13d,ecx

+        rol     edi,30

+        add     r13d,eax

+        rol     ebp,1

+        xor     r14d,DWORD[52+rsp]

+        mov     eax,esi

+

+        mov     ecx,r13d

+        xor     r14d,DWORD[60+rsp]

+        xor     eax,r11d

+        rol     ecx,5

+        xor     r14d,DWORD[20+rsp]

+        lea     r12d,[((-899497514))+r12*1+rbp]

+        xor     eax,edi

+        add     r12d,ecx

+        rol     esi,30

+        add     r12d,eax

+        rol     r14d,1

+        xor     edx,DWORD[56+rsp]

+        mov     eax,r13d

+

+        mov     ecx,r12d

+        xor     edx,DWORD[rsp]

+        xor     eax,edi

+        rol     ecx,5

+        xor     edx,DWORD[24+rsp]

+        lea     r11d,[((-899497514))+r11*1+r14]

+        xor     eax,esi

+        add     r11d,ecx

+        rol     r13d,30

+        add     r11d,eax

+        rol     edx,1

+        xor     ebp,DWORD[60+rsp]

+        mov     eax,r12d

+

+        mov     ecx,r11d

+        xor     ebp,DWORD[4+rsp]

+        xor     eax,esi

+        rol     ecx,5

+        xor     ebp,DWORD[28+rsp]

+        lea     edi,[((-899497514))+rdi*1+rdx]

+        xor     eax,r13d

+        add     edi,ecx

+        rol     r12d,30

+        add     edi,eax

+        rol     ebp,1

+        mov     eax,r11d

+        mov     ecx,edi

+        xor     eax,r13d

+        lea     esi,[((-899497514))+rsi*1+rbp]

+        rol     ecx,5

+        xor     eax,r12d

+        add     esi,ecx

+        rol     r11d,30

+        add     esi,eax

+        add     esi,DWORD[r8]

+        add     edi,DWORD[4+r8]

+        add     r11d,DWORD[8+r8]

+        add     r12d,DWORD[12+r8]

+        add     r13d,DWORD[16+r8]

+        mov     DWORD[r8],esi

+        mov     DWORD[4+r8],edi

+        mov     DWORD[8+r8],r11d

+        mov     DWORD[12+r8],r12d

+        mov     DWORD[16+r8],r13d

+

+        sub     r10,1

+        lea     r9,[64+r9]

+        jnz     NEAR $L$loop

+

+        mov     rsi,QWORD[64+rsp]

+

+        mov     r14,QWORD[((-40))+rsi]

+

+        mov     r13,QWORD[((-32))+rsi]

+

+        mov     r12,QWORD[((-24))+rsi]

+

+        mov     rbp,QWORD[((-16))+rsi]

+

+        mov     rbx,QWORD[((-8))+rsi]

+

+        lea     rsp,[rsi]

+

+$L$epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_sha1_block_data_order:

+

+ALIGN   32

+sha1_block_data_order_shaext:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_sha1_block_data_order_shaext:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+_shaext_shortcut:

+

+        lea     rsp,[((-72))+rsp]

+        movaps  XMMWORD[(-8-64)+rax],xmm6

+        movaps  XMMWORD[(-8-48)+rax],xmm7

+        movaps  XMMWORD[(-8-32)+rax],xmm8

+        movaps  XMMWORD[(-8-16)+rax],xmm9

+$L$prologue_shaext:

+        movdqu  xmm0,XMMWORD[rdi]

+        movd    xmm1,DWORD[16+rdi]

+        movdqa  xmm3,XMMWORD[((K_XX_XX+160))]

+

+        movdqu  xmm4,XMMWORD[rsi]

+        pshufd  xmm0,xmm0,27

+        movdqu  xmm5,XMMWORD[16+rsi]

+        pshufd  xmm1,xmm1,27

+        movdqu  xmm6,XMMWORD[32+rsi]

+DB      102,15,56,0,227

+        movdqu  xmm7,XMMWORD[48+rsi]

+DB      102,15,56,0,235

+DB      102,15,56,0,243

+        movdqa  xmm9,xmm1

+DB      102,15,56,0,251

+        jmp     NEAR $L$oop_shaext

+

+ALIGN   16

+$L$oop_shaext:

+        dec     rdx

+        lea     r8,[64+rsi]

+        paddd   xmm1,xmm4

+        cmovne  rsi,r8

+        movdqa  xmm8,xmm0

+DB      15,56,201,229

+        movdqa  xmm2,xmm0

+DB      15,58,204,193,0

+DB      15,56,200,213

+        pxor    xmm4,xmm6

+DB      15,56,201,238

+DB      15,56,202,231

+

+        movdqa  xmm1,xmm0

+DB      15,58,204,194,0

+DB      15,56,200,206

+        pxor    xmm5,xmm7

+DB      15,56,202,236

+DB      15,56,201,247

+        movdqa  xmm2,xmm0

+DB      15,58,204,193,0

+DB      15,56,200,215

+        pxor    xmm6,xmm4

+DB      15,56,201,252

+DB      15,56,202,245

+

+        movdqa  xmm1,xmm0

+DB      15,58,204,194,0

+DB      15,56,200,204

+        pxor    xmm7,xmm5

+DB      15,56,202,254

+DB      15,56,201,229

+        movdqa  xmm2,xmm0

+DB      15,58,204,193,0

+DB      15,56,200,213

+        pxor    xmm4,xmm6

+DB      15,56,201,238

+DB      15,56,202,231

+

+        movdqa  xmm1,xmm0

+DB      15,58,204,194,1

+DB      15,56,200,206

+        pxor    xmm5,xmm7

+DB      15,56,202,236

+DB      15,56,201,247

+        movdqa  xmm2,xmm0

+DB      15,58,204,193,1

+DB      15,56,200,215

+        pxor    xmm6,xmm4

+DB      15,56,201,252

+DB      15,56,202,245

+

+        movdqa  xmm1,xmm0

+DB      15,58,204,194,1

+DB      15,56,200,204

+        pxor    xmm7,xmm5

+DB      15,56,202,254

+DB      15,56,201,229

+        movdqa  xmm2,xmm0

+DB      15,58,204,193,1

+DB      15,56,200,213

+        pxor    xmm4,xmm6

+DB      15,56,201,238

+DB      15,56,202,231

+

+        movdqa  xmm1,xmm0

+DB      15,58,204,194,1

+DB      15,56,200,206

+        pxor    xmm5,xmm7

+DB      15,56,202,236

+DB      15,56,201,247

+        movdqa  xmm2,xmm0

+DB      15,58,204,193,2

+DB      15,56,200,215

+        pxor    xmm6,xmm4

+DB      15,56,201,252

+DB      15,56,202,245

+

+        movdqa  xmm1,xmm0

+DB      15,58,204,194,2

+DB      15,56,200,204

+        pxor    xmm7,xmm5

+DB      15,56,202,254

+DB      15,56,201,229

+        movdqa  xmm2,xmm0

+DB      15,58,204,193,2

+DB      15,56,200,213

+        pxor    xmm4,xmm6

+DB      15,56,201,238

+DB      15,56,202,231

+

+        movdqa  xmm1,xmm0

+DB      15,58,204,194,2

+DB      15,56,200,206

+        pxor    xmm5,xmm7

+DB      15,56,202,236

+DB      15,56,201,247

+        movdqa  xmm2,xmm0

+DB      15,58,204,193,2

+DB      15,56,200,215

+        pxor    xmm6,xmm4

+DB      15,56,201,252

+DB      15,56,202,245

+

+        movdqa  xmm1,xmm0

+DB      15,58,204,194,3

+DB      15,56,200,204

+        pxor    xmm7,xmm5

+DB      15,56,202,254

+        movdqu  xmm4,XMMWORD[rsi]

+        movdqa  xmm2,xmm0

+DB      15,58,204,193,3

+DB      15,56,200,213

+        movdqu  xmm5,XMMWORD[16+rsi]

+DB      102,15,56,0,227

+

+        movdqa  xmm1,xmm0

+DB      15,58,204,194,3

+DB      15,56,200,206

+        movdqu  xmm6,XMMWORD[32+rsi]

+DB      102,15,56,0,235

+

+        movdqa  xmm2,xmm0

+DB      15,58,204,193,3

+DB      15,56,200,215

+        movdqu  xmm7,XMMWORD[48+rsi]

+DB      102,15,56,0,243

+

+        movdqa  xmm1,xmm0

+DB      15,58,204,194,3

+DB      65,15,56,200,201

+DB      102,15,56,0,251

+

+        paddd   xmm0,xmm8

+        movdqa  xmm9,xmm1

+

+        jnz     NEAR $L$oop_shaext

+

+        pshufd  xmm0,xmm0,27

+        pshufd  xmm1,xmm1,27

+        movdqu  XMMWORD[rdi],xmm0

+        movd    DWORD[16+rdi],xmm1

+        movaps  xmm6,XMMWORD[((-8-64))+rax]

+        movaps  xmm7,XMMWORD[((-8-48))+rax]

+        movaps  xmm8,XMMWORD[((-8-32))+rax]

+        movaps  xmm9,XMMWORD[((-8-16))+rax]

+        mov     rsp,rax

+$L$epilogue_shaext:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_sha1_block_data_order_shaext:

+

+ALIGN   16

+sha1_block_data_order_ssse3:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_sha1_block_data_order_ssse3:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+_ssse3_shortcut:

+

+        mov     r11,rsp

+

+        push    rbx

+

+        push    rbp

+

+        push    r12

+

+        push    r13

+

+        push    r14

+

+        lea     rsp,[((-160))+rsp]

+        movaps  XMMWORD[(-40-96)+r11],xmm6

+        movaps  XMMWORD[(-40-80)+r11],xmm7

+        movaps  XMMWORD[(-40-64)+r11],xmm8

+        movaps  XMMWORD[(-40-48)+r11],xmm9

+        movaps  XMMWORD[(-40-32)+r11],xmm10

+        movaps  XMMWORD[(-40-16)+r11],xmm11

+$L$prologue_ssse3:

+        and     rsp,-64

+        mov     r8,rdi

+        mov     r9,rsi

+        mov     r10,rdx

+

+        shl     r10,6

+        add     r10,r9

+        lea     r14,[((K_XX_XX+64))]

+

+        mov     eax,DWORD[r8]

+        mov     ebx,DWORD[4+r8]

+        mov     ecx,DWORD[8+r8]

+        mov     edx,DWORD[12+r8]

+        mov     esi,ebx

+        mov     ebp,DWORD[16+r8]

+        mov     edi,ecx

+        xor     edi,edx

+        and     esi,edi

+

+        movdqa  xmm6,XMMWORD[64+r14]

+        movdqa  xmm9,XMMWORD[((-64))+r14]

+        movdqu  xmm0,XMMWORD[r9]

+        movdqu  xmm1,XMMWORD[16+r9]

+        movdqu  xmm2,XMMWORD[32+r9]

+        movdqu  xmm3,XMMWORD[48+r9]

+DB      102,15,56,0,198

+DB      102,15,56,0,206

+DB      102,15,56,0,214

+        add     r9,64

+        paddd   xmm0,xmm9

+DB      102,15,56,0,222

+        paddd   xmm1,xmm9

+        paddd   xmm2,xmm9

+        movdqa  XMMWORD[rsp],xmm0

+        psubd   xmm0,xmm9

+        movdqa  XMMWORD[16+rsp],xmm1

+        psubd   xmm1,xmm9

+        movdqa  XMMWORD[32+rsp],xmm2

+        psubd   xmm2,xmm9

+        jmp     NEAR $L$oop_ssse3

+ALIGN   16

+$L$oop_ssse3:

+        ror     ebx,2

+        pshufd  xmm4,xmm0,238

+        xor     esi,edx

+        movdqa  xmm8,xmm3

+        paddd   xmm9,xmm3

+        mov     edi,eax

+        add     ebp,DWORD[rsp]

+        punpcklqdq      xmm4,xmm1

+        xor     ebx,ecx

+        rol     eax,5

+        add     ebp,esi

+        psrldq  xmm8,4

+        and     edi,ebx

+        xor     ebx,ecx

+        pxor    xmm4,xmm0

+        add     ebp,eax

+        ror     eax,7

+        pxor    xmm8,xmm2

+        xor     edi,ecx

+        mov     esi,ebp

+        add     edx,DWORD[4+rsp]

+        pxor    xmm4,xmm8

+        xor     eax,ebx

+        rol     ebp,5

+        movdqa  XMMWORD[48+rsp],xmm9

+        add     edx,edi

+        and     esi,eax

+        movdqa  xmm10,xmm4

+        xor     eax,ebx

+        add     edx,ebp

+        ror     ebp,7

+        movdqa  xmm8,xmm4

+        xor     esi,ebx

+        pslldq  xmm10,12

+        paddd   xmm4,xmm4

+        mov     edi,edx

+        add     ecx,DWORD[8+rsp]

+        psrld   xmm8,31

+        xor     ebp,eax

+        rol     edx,5

+        add     ecx,esi

+        movdqa  xmm9,xmm10

+        and     edi,ebp

+        xor     ebp,eax

+        psrld   xmm10,30

+        add     ecx,edx

+        ror     edx,7

+        por     xmm4,xmm8

+        xor     edi,eax

+        mov     esi,ecx

+        add     ebx,DWORD[12+rsp]

+        pslld   xmm9,2

+        pxor    xmm4,xmm10

+        xor     edx,ebp

+        movdqa  xmm10,XMMWORD[((-64))+r14]

+        rol     ecx,5

+        add     ebx,edi

+        and     esi,edx

+        pxor    xmm4,xmm9

+        xor     edx,ebp

+        add     ebx,ecx

+        ror     ecx,7

+        pshufd  xmm5,xmm1,238

+        xor     esi,ebp

+        movdqa  xmm9,xmm4

+        paddd   xmm10,xmm4

+        mov     edi,ebx

+        add     eax,DWORD[16+rsp]

+        punpcklqdq      xmm5,xmm2

+        xor     ecx,edx

+        rol     ebx,5

+        add     eax,esi

+        psrldq  xmm9,4

+        and     edi,ecx

+        xor     ecx,edx

+        pxor    xmm5,xmm1

+        add     eax,ebx

+        ror     ebx,7

+        pxor    xmm9,xmm3

+        xor     edi,edx

+        mov     esi,eax

+        add     ebp,DWORD[20+rsp]

+        pxor    xmm5,xmm9

+        xor     ebx,ecx

+        rol     eax,5

+        movdqa  XMMWORD[rsp],xmm10

+        add     ebp,edi

+        and     esi,ebx

+        movdqa  xmm8,xmm5

+        xor     ebx,ecx

+        add     ebp,eax

+        ror     eax,7

+        movdqa  xmm9,xmm5

+        xor     esi,ecx

+        pslldq  xmm8,12

+        paddd   xmm5,xmm5

+        mov     edi,ebp

+        add     edx,DWORD[24+rsp]

+        psrld   xmm9,31

+        xor     eax,ebx

+        rol     ebp,5

+        add     edx,esi

+        movdqa  xmm10,xmm8

+        and     edi,eax

+        xor     eax,ebx

+        psrld   xmm8,30

+        add     edx,ebp

+        ror     ebp,7

+        por     xmm5,xmm9

+        xor     edi,ebx

+        mov     esi,edx

+        add     ecx,DWORD[28+rsp]

+        pslld   xmm10,2

+        pxor    xmm5,xmm8

+        xor     ebp,eax

+        movdqa  xmm8,XMMWORD[((-32))+r14]

+        rol     edx,5

+        add     ecx,edi

+        and     esi,ebp

+        pxor    xmm5,xmm10

+        xor     ebp,eax

+        add     ecx,edx

+        ror     edx,7

+        pshufd  xmm6,xmm2,238

+        xor     esi,eax

+        movdqa  xmm10,xmm5

+        paddd   xmm8,xmm5

+        mov     edi,ecx

+        add     ebx,DWORD[32+rsp]

+        punpcklqdq      xmm6,xmm3

+        xor     edx,ebp

+        rol     ecx,5

+        add     ebx,esi

+        psrldq  xmm10,4

+        and     edi,edx

+        xor     edx,ebp

+        pxor    xmm6,xmm2

+        add     ebx,ecx

+        ror     ecx,7

+        pxor    xmm10,xmm4

+        xor     edi,ebp

+        mov     esi,ebx

+        add     eax,DWORD[36+rsp]

+        pxor    xmm6,xmm10

+        xor     ecx,edx

+        rol     ebx,5

+        movdqa  XMMWORD[16+rsp],xmm8

+        add     eax,edi

+        and     esi,ecx

+        movdqa  xmm9,xmm6

+        xor     ecx,edx

+        add     eax,ebx

+        ror     ebx,7

+        movdqa  xmm10,xmm6

+        xor     esi,edx

+        pslldq  xmm9,12

+        paddd   xmm6,xmm6

+        mov     edi,eax

+        add     ebp,DWORD[40+rsp]

+        psrld   xmm10,31

+        xor     ebx,ecx

+        rol     eax,5

+        add     ebp,esi

+        movdqa  xmm8,xmm9

+        and     edi,ebx

+        xor     ebx,ecx

+        psrld   xmm9,30

+        add     ebp,eax

+        ror     eax,7

+        por     xmm6,xmm10

+        xor     edi,ecx

+        mov     esi,ebp

+        add     edx,DWORD[44+rsp]

+        pslld   xmm8,2

+        pxor    xmm6,xmm9

+        xor     eax,ebx

+        movdqa  xmm9,XMMWORD[((-32))+r14]

+        rol     ebp,5

+        add     edx,edi

+        and     esi,eax

+        pxor    xmm6,xmm8

+        xor     eax,ebx

+        add     edx,ebp

+        ror     ebp,7

+        pshufd  xmm7,xmm3,238

+        xor     esi,ebx

+        movdqa  xmm8,xmm6

+        paddd   xmm9,xmm6

+        mov     edi,edx

+        add     ecx,DWORD[48+rsp]

+        punpcklqdq      xmm7,xmm4

+        xor     ebp,eax

+        rol     edx,5

+        add     ecx,esi

+        psrldq  xmm8,4

+        and     edi,ebp

+        xor     ebp,eax

+        pxor    xmm7,xmm3

+        add     ecx,edx

+        ror     edx,7

+        pxor    xmm8,xmm5

+        xor     edi,eax

+        mov     esi,ecx

+        add     ebx,DWORD[52+rsp]

+        pxor    xmm7,xmm8

+        xor     edx,ebp

+        rol     ecx,5

+        movdqa  XMMWORD[32+rsp],xmm9

+        add     ebx,edi

+        and     esi,edx

+        movdqa  xmm10,xmm7

+        xor     edx,ebp

+        add     ebx,ecx

+        ror     ecx,7

+        movdqa  xmm8,xmm7

+        xor     esi,ebp

+        pslldq  xmm10,12

+        paddd   xmm7,xmm7

+        mov     edi,ebx

+        add     eax,DWORD[56+rsp]

+        psrld   xmm8,31

+        xor     ecx,edx

+        rol     ebx,5

+        add     eax,esi

+        movdqa  xmm9,xmm10

+        and     edi,ecx

+        xor     ecx,edx

+        psrld   xmm10,30

+        add     eax,ebx

+        ror     ebx,7

+        por     xmm7,xmm8

+        xor     edi,edx

+        mov     esi,eax

+        add     ebp,DWORD[60+rsp]

+        pslld   xmm9,2

+        pxor    xmm7,xmm10

+        xor     ebx,ecx

+        movdqa  xmm10,XMMWORD[((-32))+r14]

+        rol     eax,5

+        add     ebp,edi

+        and     esi,ebx

+        pxor    xmm7,xmm9

+        pshufd  xmm9,xmm6,238

+        xor     ebx,ecx

+        add     ebp,eax

+        ror     eax,7

+        pxor    xmm0,xmm4

+        xor     esi,ecx

+        mov     edi,ebp

+        add     edx,DWORD[rsp]

+        punpcklqdq      xmm9,xmm7

+        xor     eax,ebx

+        rol     ebp,5

+        pxor    xmm0,xmm1

+        add     edx,esi

+        and     edi,eax

+        movdqa  xmm8,xmm10

+        xor     eax,ebx

+        paddd   xmm10,xmm7

+        add     edx,ebp

+        pxor    xmm0,xmm9

+        ror     ebp,7

+        xor     edi,ebx

+        mov     esi,edx

+        add     ecx,DWORD[4+rsp]

+        movdqa  xmm9,xmm0

+        xor     ebp,eax

+        rol     edx,5

+        movdqa  XMMWORD[48+rsp],xmm10

+        add     ecx,edi

+        and     esi,ebp

+        xor     ebp,eax

+        pslld   xmm0,2

+        add     ecx,edx

+        ror     edx,7

+        psrld   xmm9,30

+        xor     esi,eax

+        mov     edi,ecx

+        add     ebx,DWORD[8+rsp]

+        por     xmm0,xmm9

+        xor     edx,ebp

+        rol     ecx,5

+        pshufd  xmm10,xmm7,238

+        add     ebx,esi

+        and     edi,edx

+        xor     edx,ebp

+        add     ebx,ecx

+        add     eax,DWORD[12+rsp]

+        xor     edi,ebp

+        mov     esi,ebx

+        rol     ebx,5

+        add     eax,edi

+        xor     esi,edx

+        ror     ecx,7

+        add     eax,ebx

+        pxor    xmm1,xmm5

+        add     ebp,DWORD[16+rsp]

+        xor     esi,ecx

+        punpcklqdq      xmm10,xmm0

+        mov     edi,eax

+        rol     eax,5

+        pxor    xmm1,xmm2

+        add     ebp,esi

+        xor     edi,ecx

+        movdqa  xmm9,xmm8

+        ror     ebx,7

+        paddd   xmm8,xmm0

+        add     ebp,eax

+        pxor    xmm1,xmm10

+        add     edx,DWORD[20+rsp]

+        xor     edi,ebx

+        mov     esi,ebp

+        rol     ebp,5

+        movdqa  xmm10,xmm1

+        add     edx,edi

+        xor     esi,ebx

+        movdqa  XMMWORD[rsp],xmm8

+        ror     eax,7

+        add     edx,ebp

+        add     ecx,DWORD[24+rsp]

+        pslld   xmm1,2

+        xor     esi,eax

+        mov     edi,edx

+        psrld   xmm10,30

+        rol     edx,5

+        add     ecx,esi

+        xor     edi,eax

+        ror     ebp,7

+        por     xmm1,xmm10

+        add     ecx,edx

+        add     ebx,DWORD[28+rsp]

+        pshufd  xmm8,xmm0,238

+        xor     edi,ebp

+        mov     esi,ecx

+        rol     ecx,5

+        add     ebx,edi

+        xor     esi,ebp

+        ror     edx,7

+        add     ebx,ecx

+        pxor    xmm2,xmm6

+        add     eax,DWORD[32+rsp]

+        xor     esi,edx

+        punpcklqdq      xmm8,xmm1

+        mov     edi,ebx

+        rol     ebx,5

+        pxor    xmm2,xmm3

+        add     eax,esi

+        xor     edi,edx

+        movdqa  xmm10,XMMWORD[r14]

+        ror     ecx,7

+        paddd   xmm9,xmm1

+        add     eax,ebx

+        pxor    xmm2,xmm8

+        add     ebp,DWORD[36+rsp]

+        xor     edi,ecx

+        mov     esi,eax

+        rol     eax,5

+        movdqa  xmm8,xmm2

+        add     ebp,edi

+        xor     esi,ecx

+        movdqa  XMMWORD[16+rsp],xmm9

+        ror     ebx,7

+        add     ebp,eax

+        add     edx,DWORD[40+rsp]

+        pslld   xmm2,2

+        xor     esi,ebx

+        mov     edi,ebp

+        psrld   xmm8,30

+        rol     ebp,5

+        add     edx,esi

+        xor     edi,ebx

+        ror     eax,7

+        por     xmm2,xmm8

+        add     edx,ebp

+        add     ecx,DWORD[44+rsp]

+        pshufd  xmm9,xmm1,238

+        xor     edi,eax

+        mov     esi,edx

+        rol     edx,5

+        add     ecx,edi

+        xor     esi,eax

+        ror     ebp,7

+        add     ecx,edx

+        pxor    xmm3,xmm7

+        add     ebx,DWORD[48+rsp]

+        xor     esi,ebp

+        punpcklqdq      xmm9,xmm2

+        mov     edi,ecx

+        rol     ecx,5

+        pxor    xmm3,xmm4

+        add     ebx,esi

+        xor     edi,ebp

+        movdqa  xmm8,xmm10

+        ror     edx,7

+        paddd   xmm10,xmm2

+        add     ebx,ecx

+        pxor    xmm3,xmm9

+        add     eax,DWORD[52+rsp]

+        xor     edi,edx

+        mov     esi,ebx

+        rol     ebx,5

+        movdqa  xmm9,xmm3

+        add     eax,edi

+        xor     esi,edx

+        movdqa  XMMWORD[32+rsp],xmm10

+        ror     ecx,7

+        add     eax,ebx

+        add     ebp,DWORD[56+rsp]

+        pslld   xmm3,2

+        xor     esi,ecx

+        mov     edi,eax

+        psrld   xmm9,30

+        rol     eax,5

+        add     ebp,esi

+        xor     edi,ecx

+        ror     ebx,7

+        por     xmm3,xmm9

+        add     ebp,eax

+        add     edx,DWORD[60+rsp]

+        pshufd  xmm10,xmm2,238

+        xor     edi,ebx

+        mov     esi,ebp

+        rol     ebp,5

+        add     edx,edi

+        xor     esi,ebx

+        ror     eax,7

+        add     edx,ebp

+        pxor    xmm4,xmm0

+        add     ecx,DWORD[rsp]

+        xor     esi,eax

+        punpcklqdq      xmm10,xmm3

+        mov     edi,edx

+        rol     edx,5

+        pxor    xmm4,xmm5

+        add     ecx,esi

+        xor     edi,eax

+        movdqa  xmm9,xmm8

+        ror     ebp,7

+        paddd   xmm8,xmm3

+        add     ecx,edx

+        pxor    xmm4,xmm10

+        add     ebx,DWORD[4+rsp]

+        xor     edi,ebp

+        mov     esi,ecx

+        rol     ecx,5

+        movdqa  xmm10,xmm4

+        add     ebx,edi

+        xor     esi,ebp

+        movdqa  XMMWORD[48+rsp],xmm8

+        ror     edx,7

+        add     ebx,ecx

+        add     eax,DWORD[8+rsp]

+        pslld   xmm4,2

+        xor     esi,edx

+        mov     edi,ebx

+        psrld   xmm10,30

+        rol     ebx,5

+        add     eax,esi

+        xor     edi,edx

+        ror     ecx,7

+        por     xmm4,xmm10

+        add     eax,ebx

+        add     ebp,DWORD[12+rsp]

+        pshufd  xmm8,xmm3,238

+        xor     edi,ecx

+        mov     esi,eax

+        rol     eax,5

+        add     ebp,edi

+        xor     esi,ecx

+        ror     ebx,7

+        add     ebp,eax

+        pxor    xmm5,xmm1

+        add     edx,DWORD[16+rsp]

+        xor     esi,ebx

+        punpcklqdq      xmm8,xmm4

+        mov     edi,ebp

+        rol     ebp,5

+        pxor    xmm5,xmm6

+        add     edx,esi

+        xor     edi,ebx

+        movdqa  xmm10,xmm9

+        ror     eax,7

+        paddd   xmm9,xmm4

+        add     edx,ebp

+        pxor    xmm5,xmm8

+        add     ecx,DWORD[20+rsp]

+        xor     edi,eax

+        mov     esi,edx

+        rol     edx,5

+        movdqa  xmm8,xmm5

+        add     ecx,edi

+        xor     esi,eax

+        movdqa  XMMWORD[rsp],xmm9

+        ror     ebp,7

+        add     ecx,edx

+        add     ebx,DWORD[24+rsp]

+        pslld   xmm5,2

+        xor     esi,ebp

+        mov     edi,ecx

+        psrld   xmm8,30

+        rol     ecx,5

+        add     ebx,esi

+        xor     edi,ebp

+        ror     edx,7

+        por     xmm5,xmm8

+        add     ebx,ecx

+        add     eax,DWORD[28+rsp]

+        pshufd  xmm9,xmm4,238

+        ror     ecx,7

+        mov     esi,ebx

+        xor     edi,edx

+        rol     ebx,5

+        add     eax,edi

+        xor     esi,ecx

+        xor     ecx,edx

+        add     eax,ebx

+        pxor    xmm6,xmm2

+        add     ebp,DWORD[32+rsp]

+        and     esi,ecx

+        xor     ecx,edx

+        ror     ebx,7

+        punpcklqdq      xmm9,xmm5

+        mov     edi,eax

+        xor     esi,ecx

+        pxor    xmm6,xmm7

+        rol     eax,5

+        add     ebp,esi

+        movdqa  xmm8,xmm10

+        xor     edi,ebx

+        paddd   xmm10,xmm5

+        xor     ebx,ecx

+        pxor    xmm6,xmm9

+        add     ebp,eax

+        add     edx,DWORD[36+rsp]

+        and     edi,ebx

+        xor     ebx,ecx

+        ror     eax,7

+        movdqa  xmm9,xmm6

+        mov     esi,ebp

+        xor     edi,ebx

+        movdqa  XMMWORD[16+rsp],xmm10

+        rol     ebp,5

+        add     edx,edi

+        xor     esi,eax

+        pslld   xmm6,2

+        xor     eax,ebx

+        add     edx,ebp

+        psrld   xmm9,30

+        add     ecx,DWORD[40+rsp]

+        and     esi,eax

+        xor     eax,ebx

+        por     xmm6,xmm9

+        ror     ebp,7

+        mov     edi,edx

+        xor     esi,eax

+        rol     edx,5

+        pshufd  xmm10,xmm5,238

+        add     ecx,esi

+        xor     edi,ebp

+        xor     ebp,eax

+        add     ecx,edx

+        add     ebx,DWORD[44+rsp]

+        and     edi,ebp

+        xor     ebp,eax

+        ror     edx,7

+        mov     esi,ecx

+        xor     edi,ebp

+        rol     ecx,5

+        add     ebx,edi

+        xor     esi,edx

+        xor     edx,ebp

+        add     ebx,ecx

+        pxor    xmm7,xmm3

+        add     eax,DWORD[48+rsp]

+        and     esi,edx

+        xor     edx,ebp

+        ror     ecx,7

+        punpcklqdq      xmm10,xmm6

+        mov     edi,ebx

+        xor     esi,edx

+        pxor    xmm7,xmm0

+        rol     ebx,5

+        add     eax,esi

+        movdqa  xmm9,XMMWORD[32+r14]

+        xor     edi,ecx

+        paddd   xmm8,xmm6

+        xor     ecx,edx

+        pxor    xmm7,xmm10

+        add     eax,ebx

+        add     ebp,DWORD[52+rsp]

+        and     edi,ecx

+        xor     ecx,edx

+        ror     ebx,7

+        movdqa  xmm10,xmm7

+        mov     esi,eax

+        xor     edi,ecx

+        movdqa  XMMWORD[32+rsp],xmm8

+        rol     eax,5

+        add     ebp,edi

+        xor     esi,ebx

+        pslld   xmm7,2

+        xor     ebx,ecx

+        add     ebp,eax

+        psrld   xmm10,30

+        add     edx,DWORD[56+rsp]

+        and     esi,ebx

+        xor     ebx,ecx

+        por     xmm7,xmm10

+        ror     eax,7

+        mov     edi,ebp

+        xor     esi,ebx

+        rol     ebp,5

+        pshufd  xmm8,xmm6,238

+        add     edx,esi

+        xor     edi,eax

+        xor     eax,ebx

+        add     edx,ebp

+        add     ecx,DWORD[60+rsp]

+        and     edi,eax

+        xor     eax,ebx

+        ror     ebp,7

+        mov     esi,edx

+        xor     edi,eax

+        rol     edx,5

+        add     ecx,edi

+        xor     esi,ebp

+        xor     ebp,eax

+        add     ecx,edx

+        pxor    xmm0,xmm4

+        add     ebx,DWORD[rsp]

+        and     esi,ebp

+        xor     ebp,eax

+        ror     edx,7

+        punpcklqdq      xmm8,xmm7

+        mov     edi,ecx

+        xor     esi,ebp

+        pxor    xmm0,xmm1

+        rol     ecx,5

+        add     ebx,esi

+        movdqa  xmm10,xmm9

+        xor     edi,edx

+        paddd   xmm9,xmm7

+        xor     edx,ebp

+        pxor    xmm0,xmm8

+        add     ebx,ecx

+        add     eax,DWORD[4+rsp]

+        and     edi,edx

+        xor     edx,ebp

+        ror     ecx,7

+        movdqa  xmm8,xmm0

+        mov     esi,ebx

+        xor     edi,edx

+        movdqa  XMMWORD[48+rsp],xmm9

+        rol     ebx,5

+        add     eax,edi

+        xor     esi,ecx

+        pslld   xmm0,2

+        xor     ecx,edx

+        add     eax,ebx

+        psrld   xmm8,30

+        add     ebp,DWORD[8+rsp]

+        and     esi,ecx

+        xor     ecx,edx

+        por     xmm0,xmm8

+        ror     ebx,7

+        mov     edi,eax

+        xor     esi,ecx

+        rol     eax,5

+        pshufd  xmm9,xmm7,238

+        add     ebp,esi

+        xor     edi,ebx

+        xor     ebx,ecx

+        add     ebp,eax

+        add     edx,DWORD[12+rsp]

+        and     edi,ebx

+        xor     ebx,ecx

+        ror     eax,7

+        mov     esi,ebp

+        xor     edi,ebx

+        rol     ebp,5

+        add     edx,edi

+        xor     esi,eax

+        xor     eax,ebx

+        add     edx,ebp

+        pxor    xmm1,xmm5

+        add     ecx,DWORD[16+rsp]

+        and     esi,eax

+        xor     eax,ebx

+        ror     ebp,7

+        punpcklqdq      xmm9,xmm0

+        mov     edi,edx

+        xor     esi,eax

+        pxor    xmm1,xmm2

+        rol     edx,5

+        add     ecx,esi

+        movdqa  xmm8,xmm10

+        xor     edi,ebp

+        paddd   xmm10,xmm0

+        xor     ebp,eax

+        pxor    xmm1,xmm9

+        add     ecx,edx

+        add     ebx,DWORD[20+rsp]

+        and     edi,ebp

+        xor     ebp,eax

+        ror     edx,7

+        movdqa  xmm9,xmm1

+        mov     esi,ecx

+        xor     edi,ebp

+        movdqa  XMMWORD[rsp],xmm10

+        rol     ecx,5

+        add     ebx,edi

+        xor     esi,edx

+        pslld   xmm1,2

+        xor     edx,ebp

+        add     ebx,ecx

+        psrld   xmm9,30

+        add     eax,DWORD[24+rsp]

+        and     esi,edx

+        xor     edx,ebp

+        por     xmm1,xmm9

+        ror     ecx,7

+        mov     edi,ebx

+        xor     esi,edx

+        rol     ebx,5

+        pshufd  xmm10,xmm0,238

+        add     eax,esi

+        xor     edi,ecx

+        xor     ecx,edx

+        add     eax,ebx

+        add     ebp,DWORD[28+rsp]

+        and     edi,ecx

+        xor     ecx,edx

+        ror     ebx,7

+        mov     esi,eax

+        xor     edi,ecx

+        rol     eax,5

+        add     ebp,edi

+        xor     esi,ebx

+        xor     ebx,ecx

+        add     ebp,eax

+        pxor    xmm2,xmm6

+        add     edx,DWORD[32+rsp]

+        and     esi,ebx

+        xor     ebx,ecx

+        ror     eax,7

+        punpcklqdq      xmm10,xmm1

+        mov     edi,ebp

+        xor     esi,ebx

+        pxor    xmm2,xmm3

+        rol     ebp,5

+        add     edx,esi

+        movdqa  xmm9,xmm8

+        xor     edi,eax

+        paddd   xmm8,xmm1

+        xor     eax,ebx

+        pxor    xmm2,xmm10

+        add     edx,ebp

+        add     ecx,DWORD[36+rsp]

+        and     edi,eax

+        xor     eax,ebx

+        ror     ebp,7

+        movdqa  xmm10,xmm2

+        mov     esi,edx

+        xor     edi,eax

+        movdqa  XMMWORD[16+rsp],xmm8

+        rol     edx,5

+        add     ecx,edi

+        xor     esi,ebp

+        pslld   xmm2,2

+        xor     ebp,eax

+        add     ecx,edx

+        psrld   xmm10,30

+        add     ebx,DWORD[40+rsp]

+        and     esi,ebp

+        xor     ebp,eax

+        por     xmm2,xmm10

+        ror     edx,7

+        mov     edi,ecx

+        xor     esi,ebp

+        rol     ecx,5

+        pshufd  xmm8,xmm1,238

+        add     ebx,esi

+        xor     edi,edx

+        xor     edx,ebp

+        add     ebx,ecx

+        add     eax,DWORD[44+rsp]

+        and     edi,edx

+        xor     edx,ebp

+        ror     ecx,7

+        mov     esi,ebx

+        xor     edi,edx

+        rol     ebx,5

+        add     eax,edi

+        xor     esi,edx

+        add     eax,ebx

+        pxor    xmm3,xmm7

+        add     ebp,DWORD[48+rsp]

+        xor     esi,ecx

+        punpcklqdq      xmm8,xmm2

+        mov     edi,eax

+        rol     eax,5

+        pxor    xmm3,xmm4

+        add     ebp,esi

+        xor     edi,ecx

+        movdqa  xmm10,xmm9

+        ror     ebx,7

+        paddd   xmm9,xmm2

+        add     ebp,eax

+        pxor    xmm3,xmm8

+        add     edx,DWORD[52+rsp]

+        xor     edi,ebx

+        mov     esi,ebp

+        rol     ebp,5

+        movdqa  xmm8,xmm3

+        add     edx,edi

+        xor     esi,ebx

+        movdqa  XMMWORD[32+rsp],xmm9

+        ror     eax,7

+        add     edx,ebp

+        add     ecx,DWORD[56+rsp]

+        pslld   xmm3,2

+        xor     esi,eax

+        mov     edi,edx

+        psrld   xmm8,30

+        rol     edx,5

+        add     ecx,esi

+        xor     edi,eax

+        ror     ebp,7

+        por     xmm3,xmm8

+        add     ecx,edx

+        add     ebx,DWORD[60+rsp]

+        xor     edi,ebp

+        mov     esi,ecx

+        rol     ecx,5

+        add     ebx,edi

+        xor     esi,ebp

+        ror     edx,7

+        add     ebx,ecx

+        add     eax,DWORD[rsp]

+        xor     esi,edx

+        mov     edi,ebx

+        rol     ebx,5

+        paddd   xmm10,xmm3

+        add     eax,esi

+        xor     edi,edx

+        movdqa  XMMWORD[48+rsp],xmm10

+        ror     ecx,7

+        add     eax,ebx

+        add     ebp,DWORD[4+rsp]

+        xor     edi,ecx

+        mov     esi,eax

+        rol     eax,5

+        add     ebp,edi

+        xor     esi,ecx

+        ror     ebx,7

+        add     ebp,eax

+        add     edx,DWORD[8+rsp]

+        xor     esi,ebx

+        mov     edi,ebp

+        rol     ebp,5

+        add     edx,esi

+        xor     edi,ebx

+        ror     eax,7

+        add     edx,ebp

+        add     ecx,DWORD[12+rsp]

+        xor     edi,eax

+        mov     esi,edx

+        rol     edx,5

+        add     ecx,edi

+        xor     esi,eax

+        ror     ebp,7

+        add     ecx,edx

+        cmp     r9,r10

+        je      NEAR $L$done_ssse3

+        movdqa  xmm6,XMMWORD[64+r14]

+        movdqa  xmm9,XMMWORD[((-64))+r14]

+        movdqu  xmm0,XMMWORD[r9]

+        movdqu  xmm1,XMMWORD[16+r9]

+        movdqu  xmm2,XMMWORD[32+r9]

+        movdqu  xmm3,XMMWORD[48+r9]

+DB      102,15,56,0,198

+        add     r9,64

+        add     ebx,DWORD[16+rsp]

+        xor     esi,ebp

+        mov     edi,ecx

+DB      102,15,56,0,206

+        rol     ecx,5

+        add     ebx,esi

+        xor     edi,ebp

+        ror     edx,7

+        paddd   xmm0,xmm9

+        add     ebx,ecx

+        add     eax,DWORD[20+rsp]

+        xor     edi,edx

+        mov     esi,ebx

+        movdqa  XMMWORD[rsp],xmm0

+        rol     ebx,5

+        add     eax,edi

+        xor     esi,edx

+        ror     ecx,7

+        psubd   xmm0,xmm9

+        add     eax,ebx

+        add     ebp,DWORD[24+rsp]

+        xor     esi,ecx

+        mov     edi,eax

+        rol     eax,5

+        add     ebp,esi

+        xor     edi,ecx

+        ror     ebx,7

+        add     ebp,eax

+        add     edx,DWORD[28+rsp]

+        xor     edi,ebx

+        mov     esi,ebp

+        rol     ebp,5

+        add     edx,edi

+        xor     esi,ebx

+        ror     eax,7

+        add     edx,ebp

+        add     ecx,DWORD[32+rsp]

+        xor     esi,eax

+        mov     edi,edx

+DB      102,15,56,0,214

+        rol     edx,5

+        add     ecx,esi

+        xor     edi,eax

+        ror     ebp,7

+        paddd   xmm1,xmm9

+        add     ecx,edx

+        add     ebx,DWORD[36+rsp]

+        xor     edi,ebp

+        mov     esi,ecx

+        movdqa  XMMWORD[16+rsp],xmm1

+        rol     ecx,5

+        add     ebx,edi

+        xor     esi,ebp

+        ror     edx,7

+        psubd   xmm1,xmm9

+        add     ebx,ecx

+        add     eax,DWORD[40+rsp]

+        xor     esi,edx

+        mov     edi,ebx

+        rol     ebx,5

+        add     eax,esi

+        xor     edi,edx

+        ror     ecx,7

+        add     eax,ebx

+        add     ebp,DWORD[44+rsp]

+        xor     edi,ecx

+        mov     esi,eax

+        rol     eax,5

+        add     ebp,edi

+        xor     esi,ecx

+        ror     ebx,7

+        add     ebp,eax

+        add     edx,DWORD[48+rsp]

+        xor     esi,ebx

+        mov     edi,ebp

+DB      102,15,56,0,222

+        rol     ebp,5

+        add     edx,esi

+        xor     edi,ebx

+        ror     eax,7

+        paddd   xmm2,xmm9

+        add     edx,ebp

+        add     ecx,DWORD[52+rsp]

+        xor     edi,eax

+        mov     esi,edx

+        movdqa  XMMWORD[32+rsp],xmm2

+        rol     edx,5

+        add     ecx,edi

+        xor     esi,eax

+        ror     ebp,7

+        psubd   xmm2,xmm9

+        add     ecx,edx

+        add     ebx,DWORD[56+rsp]

+        xor     esi,ebp

+        mov     edi,ecx

+        rol     ecx,5

+        add     ebx,esi

+        xor     edi,ebp

+        ror     edx,7

+        add     ebx,ecx

+        add     eax,DWORD[60+rsp]

+        xor     edi,edx

+        mov     esi,ebx

+        rol     ebx,5

+        add     eax,edi

+        ror     ecx,7

+        add     eax,ebx

+        add     eax,DWORD[r8]

+        add     esi,DWORD[4+r8]

+        add     ecx,DWORD[8+r8]

+        add     edx,DWORD[12+r8]

+        mov     DWORD[r8],eax

+        add     ebp,DWORD[16+r8]

+        mov     DWORD[4+r8],esi

+        mov     ebx,esi

+        mov     DWORD[8+r8],ecx

+        mov     edi,ecx

+        mov     DWORD[12+r8],edx

+        xor     edi,edx

+        mov     DWORD[16+r8],ebp

+        and     esi,edi

+        jmp     NEAR $L$oop_ssse3

+

+ALIGN   16

+$L$done_ssse3:

+        add     ebx,DWORD[16+rsp]

+        xor     esi,ebp

+        mov     edi,ecx

+        rol     ecx,5

+        add     ebx,esi

+        xor     edi,ebp

+        ror     edx,7

+        add     ebx,ecx

+        add     eax,DWORD[20+rsp]

+        xor     edi,edx

+        mov     esi,ebx

+        rol     ebx,5

+        add     eax,edi

+        xor     esi,edx

+        ror     ecx,7

+        add     eax,ebx

+        add     ebp,DWORD[24+rsp]

+        xor     esi,ecx

+        mov     edi,eax

+        rol     eax,5

+        add     ebp,esi

+        xor     edi,ecx

+        ror     ebx,7

+        add     ebp,eax

+        add     edx,DWORD[28+rsp]

+        xor     edi,ebx

+        mov     esi,ebp

+        rol     ebp,5

+        add     edx,edi

+        xor     esi,ebx

+        ror     eax,7

+        add     edx,ebp

+        add     ecx,DWORD[32+rsp]

+        xor     esi,eax

+        mov     edi,edx

+        rol     edx,5

+        add     ecx,esi

+        xor     edi,eax

+        ror     ebp,7

+        add     ecx,edx

+        add     ebx,DWORD[36+rsp]

+        xor     edi,ebp

+        mov     esi,ecx

+        rol     ecx,5

+        add     ebx,edi

+        xor     esi,ebp

+        ror     edx,7

+        add     ebx,ecx

+        add     eax,DWORD[40+rsp]

+        xor     esi,edx

+        mov     edi,ebx

+        rol     ebx,5

+        add     eax,esi

+        xor     edi,edx

+        ror     ecx,7

+        add     eax,ebx

+        add     ebp,DWORD[44+rsp]

+        xor     edi,ecx

+        mov     esi,eax

+        rol     eax,5

+        add     ebp,edi

+        xor     esi,ecx

+        ror     ebx,7

+        add     ebp,eax

+        add     edx,DWORD[48+rsp]

+        xor     esi,ebx

+        mov     edi,ebp

+        rol     ebp,5

+        add     edx,esi

+        xor     edi,ebx

+        ror     eax,7

+        add     edx,ebp

+        add     ecx,DWORD[52+rsp]

+        xor     edi,eax

+        mov     esi,edx

+        rol     edx,5

+        add     ecx,edi

+        xor     esi,eax

+        ror     ebp,7

+        add     ecx,edx

+        add     ebx,DWORD[56+rsp]

+        xor     esi,ebp

+        mov     edi,ecx

+        rol     ecx,5

+        add     ebx,esi

+        xor     edi,ebp

+        ror     edx,7

+        add     ebx,ecx

+        add     eax,DWORD[60+rsp]

+        xor     edi,edx

+        mov     esi,ebx

+        rol     ebx,5

+        add     eax,edi

+        ror     ecx,7

+        add     eax,ebx

+        add     eax,DWORD[r8]

+        add     esi,DWORD[4+r8]

+        add     ecx,DWORD[8+r8]

+        mov     DWORD[r8],eax

+        add     edx,DWORD[12+r8]

+        mov     DWORD[4+r8],esi

+        add     ebp,DWORD[16+r8]

+        mov     DWORD[8+r8],ecx

+        mov     DWORD[12+r8],edx

+        mov     DWORD[16+r8],ebp

+        movaps  xmm6,XMMWORD[((-40-96))+r11]

+        movaps  xmm7,XMMWORD[((-40-80))+r11]

+        movaps  xmm8,XMMWORD[((-40-64))+r11]

+        movaps  xmm9,XMMWORD[((-40-48))+r11]

+        movaps  xmm10,XMMWORD[((-40-32))+r11]

+        movaps  xmm11,XMMWORD[((-40-16))+r11]

+        mov     r14,QWORD[((-40))+r11]

+

+        mov     r13,QWORD[((-32))+r11]

+

+        mov     r12,QWORD[((-24))+r11]

+

+        mov     rbp,QWORD[((-16))+r11]

+

+        mov     rbx,QWORD[((-8))+r11]

+

+        lea     rsp,[r11]

+

+$L$epilogue_ssse3:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_sha1_block_data_order_ssse3:

+ALIGN   64

+K_XX_XX:

+        DD      0x5a827999,0x5a827999,0x5a827999,0x5a827999

+        DD      0x5a827999,0x5a827999,0x5a827999,0x5a827999

+        DD      0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1

+        DD      0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1

+        DD      0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc

+        DD      0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc

+        DD      0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6

+        DD      0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6

+        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f

+        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f

+DB
0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0

+DB      83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115

+DB      102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44

+DB      32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60

+DB      97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114

+DB      103,62,0

+ALIGN   64

+EXTERN  __imp_RtlVirtualUnwind

+

+ALIGN   16

+se_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        lea     r10,[$L$prologue]

+        cmp     rbx,r10

+        jb      NEAR $L$common_seh_tail

+

+        mov     rax,QWORD[152+r8]

+

+        lea     r10,[$L$epilogue]

+        cmp     rbx,r10

+        jae     NEAR $L$common_seh_tail

+

+        mov     rax,QWORD[64+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+        mov     rbp,QWORD[((-16))+rax]

+        mov     r12,QWORD[((-24))+rax]

+        mov     r13,QWORD[((-32))+rax]

+        mov     r14,QWORD[((-40))+rax]

+        mov     QWORD[144+r8],rbx

+        mov     QWORD[160+r8],rbp

+        mov     QWORD[216+r8],r12

+        mov     QWORD[224+r8],r13

+        mov     QWORD[232+r8],r14

+

+        jmp     NEAR $L$common_seh_tail

+

+

+ALIGN   16

+shaext_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        lea     r10,[$L$prologue_shaext]

+        cmp     rbx,r10

+        jb      NEAR $L$common_seh_tail

+

+        lea     r10,[$L$epilogue_shaext]

+        cmp     rbx,r10

+        jae     NEAR $L$common_seh_tail

+

+        lea     rsi,[((-8-64))+rax]

+        lea     rdi,[512+r8]

+        mov     ecx,8

+        DD      0xa548f3fc

+

+        jmp     NEAR $L$common_seh_tail

+

+

+ALIGN   16

+ssse3_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        mov     rsi,QWORD[8+r9]

+        mov     r11,QWORD[56+r9]

+

+        mov     r10d,DWORD[r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jb      NEAR $L$common_seh_tail

+

+        mov     rax,QWORD[208+r8]

+

+        mov     r10d,DWORD[4+r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jae     NEAR $L$common_seh_tail

+

+        lea     rsi,[((-40-96))+rax]

+        lea     rdi,[512+r8]

+        mov     ecx,12

+        DD      0xa548f3fc

+

+        mov     rbx,QWORD[((-8))+rax]

+        mov     rbp,QWORD[((-16))+rax]

+        mov     r12,QWORD[((-24))+rax]

+        mov     r13,QWORD[((-32))+rax]

+        mov     r14,QWORD[((-40))+rax]

+        mov     QWORD[144+r8],rbx

+        mov     QWORD[160+r8],rbp

+        mov     QWORD[216+r8],r12

+        mov     QWORD[224+r8],r13

+        mov     QWORD[232+r8],r14

+

+$L$common_seh_tail:

+        mov     rdi,QWORD[8+rax]

+        mov     rsi,QWORD[16+rax]

+        mov     QWORD[152+r8],rax

+        mov     QWORD[168+r8],rsi

+        mov     QWORD[176+r8],rdi

+

+        mov     rdi,QWORD[40+r9]

+        mov     rsi,r8

+        mov     ecx,154

+        DD      0xa548f3fc

+

+        mov     rsi,r9

+        xor     rcx,rcx

+        mov     rdx,QWORD[8+rsi]

+        mov     r8,QWORD[rsi]

+        mov     r9,QWORD[16+rsi]

+        mov     r10,QWORD[40+rsi]

+        lea     r11,[56+rsi]

+        lea     r12,[24+rsi]

+        mov     QWORD[32+rsp],r10

+        mov     QWORD[40+rsp],r11

+        mov     QWORD[48+rsp],r12

+        mov     QWORD[56+rsp],rcx

+        call    QWORD[__imp_RtlVirtualUnwind]

+

+        mov     eax,1

+        add     rsp,64

+        popfq

+        pop     r15

+        pop     r14

+        pop     r13

+        pop     r12

+        pop     rbp

+        pop     rbx

+        pop     rdi

+        pop     rsi

+        DB      0F3h,0C3h               ;repret

+

+

+section .pdata rdata align=4

+ALIGN   4

+        DD      $L$SEH_begin_sha1_block_data_order wrt ..imagebase

+        DD      $L$SEH_end_sha1_block_data_order wrt ..imagebase

+        DD      $L$SEH_info_sha1_block_data_order wrt ..imagebase

+        DD      $L$SEH_begin_sha1_block_data_order_shaext wrt
..imagebase

+        DD      $L$SEH_end_sha1_block_data_order_shaext wrt
..imagebase

+        DD      $L$SEH_info_sha1_block_data_order_shaext wrt
..imagebase

+        DD      $L$SEH_begin_sha1_block_data_order_ssse3 wrt
..imagebase

+        DD      $L$SEH_end_sha1_block_data_order_ssse3 wrt ..imagebase

+        DD      $L$SEH_info_sha1_block_data_order_ssse3 wrt
..imagebase

+section .xdata rdata align=8

+ALIGN   8

+$L$SEH_info_sha1_block_data_order:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+$L$SEH_info_sha1_block_data_order_shaext:

+DB      9,0,0,0

+        DD      shaext_handler wrt ..imagebase

+$L$SEH_info_sha1_block_data_order_ssse3:

+DB      9,0,0,0

+        DD      ssse3_handler wrt ..imagebase

+        DD      $L$prologue_ssse3 wrt ..imagebase,$L$epilogue_ssse3
wrt ..imagebase

diff --git a/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-mb-
x86_64.nasm b/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-
mb-
x86_64.nasm
new file mode 100644
index 0000000000..7cd5eae85c
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-mb-
x86_64.nasm
@@ -0,0 +1,3461 @@
+; WARNING: do not edit!

+; Generated from openssl/crypto/sha/asm/sha256-mb-x86_64.pl

+;

+; Copyright 2013-2020 The OpenSSL Project Authors. All Rights
Reserved.

+;

+; Licensed under the OpenSSL license (the "License").  You may not use

+; this file except in compliance with the License.  You can obtain a
copy

+; in the file LICENSE in the source distribution or at

+; https://www.openssl.org/source/license.html

+

+default rel

+%define XMMWORD

+%define YMMWORD

+%define ZMMWORD

+section .text code align=64

+

+

+EXTERN  OPENSSL_ia32cap_P

+

+global  sha256_multi_block

+

+ALIGN   32

+sha256_multi_block:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_sha256_multi_block:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+

+        mov     rcx,QWORD[((OPENSSL_ia32cap_P+4))]

+        bt      rcx,61

+        jc      NEAR _shaext_shortcut

+        mov     rax,rsp

+

+        push    rbx

+

+        push    rbp

+

+        lea     rsp,[((-168))+rsp]

+        movaps  XMMWORD[rsp],xmm6

+        movaps  XMMWORD[16+rsp],xmm7

+        movaps  XMMWORD[32+rsp],xmm8

+        movaps  XMMWORD[48+rsp],xmm9

+        movaps  XMMWORD[(-120)+rax],xmm10

+        movaps  XMMWORD[(-104)+rax],xmm11

+        movaps  XMMWORD[(-88)+rax],xmm12

+        movaps  XMMWORD[(-72)+rax],xmm13

+        movaps  XMMWORD[(-56)+rax],xmm14

+        movaps  XMMWORD[(-40)+rax],xmm15

+        sub     rsp,288

+        and     rsp,-256

+        mov     QWORD[272+rsp],rax

+

+$L$body:

+        lea     rbp,[((K256+128))]

+        lea     rbx,[256+rsp]

+        lea     rdi,[128+rdi]

+

+$L$oop_grande:

+        mov     DWORD[280+rsp],edx

+        xor     edx,edx

+        mov     r8,QWORD[rsi]

+        mov     ecx,DWORD[8+rsi]

+        cmp     ecx,edx

+        cmovg   edx,ecx

+        test    ecx,ecx

+        mov     DWORD[rbx],ecx

+        cmovle  r8,rbp

+        mov     r9,QWORD[16+rsi]

+        mov     ecx,DWORD[24+rsi]

+        cmp     ecx,edx

+        cmovg   edx,ecx

+        test    ecx,ecx

+        mov     DWORD[4+rbx],ecx

+        cmovle  r9,rbp

+        mov     r10,QWORD[32+rsi]

+        mov     ecx,DWORD[40+rsi]

+        cmp     ecx,edx

+        cmovg   edx,ecx

+        test    ecx,ecx

+        mov     DWORD[8+rbx],ecx

+        cmovle  r10,rbp

+        mov     r11,QWORD[48+rsi]

+        mov     ecx,DWORD[56+rsi]

+        cmp     ecx,edx

+        cmovg   edx,ecx

+        test    ecx,ecx

+        mov     DWORD[12+rbx],ecx

+        cmovle  r11,rbp

+        test    edx,edx

+        jz      NEAR $L$done

+

+        movdqu  xmm8,XMMWORD[((0-128))+rdi]

+        lea     rax,[128+rsp]

+        movdqu  xmm9,XMMWORD[((32-128))+rdi]

+        movdqu  xmm10,XMMWORD[((64-128))+rdi]

+        movdqu  xmm11,XMMWORD[((96-128))+rdi]

+        movdqu  xmm12,XMMWORD[((128-128))+rdi]

+        movdqu  xmm13,XMMWORD[((160-128))+rdi]

+        movdqu  xmm14,XMMWORD[((192-128))+rdi]

+        movdqu  xmm15,XMMWORD[((224-128))+rdi]

+        movdqu  xmm6,XMMWORD[$L$pbswap]

+        jmp     NEAR $L$oop

+

+ALIGN   32

+$L$oop:

+        movdqa  xmm4,xmm10

+        pxor    xmm4,xmm9

+        movd    xmm5,DWORD[r8]

+        movd    xmm0,DWORD[r9]

+        movd    xmm1,DWORD[r10]

+        movd    xmm2,DWORD[r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm12

+DB      102,15,56,0,238

+        movdqa  xmm2,xmm12

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm12

+        pslld   xmm2,7

+        movdqa  XMMWORD[(0-128)+rax],xmm5

+        paddd   xmm5,xmm15

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[((-128))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm12

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm12

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm14

+        pand    xmm3,xmm13

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm8

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm8

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm9

+        movdqa  xmm7,xmm8

+        pslld   xmm2,10

+        pxor    xmm3,xmm8

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm15,xmm9

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm15,xmm4

+        paddd   xmm11,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm15,xmm5

+        paddd   xmm15,xmm7

+        movd    xmm5,DWORD[4+r8]

+        movd    xmm0,DWORD[4+r9]

+        movd    xmm1,DWORD[4+r10]

+        movd    xmm2,DWORD[4+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm11

+

+        movdqa  xmm2,xmm11

+DB      102,15,56,0,238

+        psrld   xmm7,6

+        movdqa  xmm1,xmm11

+        pslld   xmm2,7

+        movdqa  XMMWORD[(16-128)+rax],xmm5

+        paddd   xmm5,xmm14

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[((-96))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm11

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm11

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm13

+        pand    xmm4,xmm12

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm15

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm15

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm8

+        movdqa  xmm7,xmm15

+        pslld   xmm2,10

+        pxor    xmm4,xmm15

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm14,xmm8

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm14,xmm3

+        paddd   xmm10,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm14,xmm5

+        paddd   xmm14,xmm7

+        movd    xmm5,DWORD[8+r8]

+        movd    xmm0,DWORD[8+r9]

+        movd    xmm1,DWORD[8+r10]

+        movd    xmm2,DWORD[8+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm10

+DB      102,15,56,0,238

+        movdqa  xmm2,xmm10

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm10

+        pslld   xmm2,7

+        movdqa  XMMWORD[(32-128)+rax],xmm5

+        paddd   xmm5,xmm13

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[((-64))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm10

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm10

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm12

+        pand    xmm3,xmm11

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm14

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm14

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm15

+        movdqa  xmm7,xmm14

+        pslld   xmm2,10

+        pxor    xmm3,xmm14

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm13,xmm15

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm13,xmm4

+        paddd   xmm9,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm13,xmm5

+        paddd   xmm13,xmm7

+        movd    xmm5,DWORD[12+r8]

+        movd    xmm0,DWORD[12+r9]

+        movd    xmm1,DWORD[12+r10]

+        movd    xmm2,DWORD[12+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm9

+

+        movdqa  xmm2,xmm9

+DB      102,15,56,0,238

+        psrld   xmm7,6

+        movdqa  xmm1,xmm9

+        pslld   xmm2,7

+        movdqa  XMMWORD[(48-128)+rax],xmm5

+        paddd   xmm5,xmm12

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[((-32))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm9

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm9

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm11

+        pand    xmm4,xmm10

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm13

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm13

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm14

+        movdqa  xmm7,xmm13

+        pslld   xmm2,10

+        pxor    xmm4,xmm13

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm12,xmm14

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm12,xmm3

+        paddd   xmm8,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm12,xmm5

+        paddd   xmm12,xmm7

+        movd    xmm5,DWORD[16+r8]

+        movd    xmm0,DWORD[16+r9]

+        movd    xmm1,DWORD[16+r10]

+        movd    xmm2,DWORD[16+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm8

+DB      102,15,56,0,238

+        movdqa  xmm2,xmm8

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm8

+        pslld   xmm2,7

+        movdqa  XMMWORD[(64-128)+rax],xmm5

+        paddd   xmm5,xmm11

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm8

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm8

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm10

+        pand    xmm3,xmm9

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm12

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm12

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm13

+        movdqa  xmm7,xmm12

+        pslld   xmm2,10

+        pxor    xmm3,xmm12

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm11,xmm13

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm11,xmm4

+        paddd   xmm15,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm11,xmm5

+        paddd   xmm11,xmm7

+        movd    xmm5,DWORD[20+r8]

+        movd    xmm0,DWORD[20+r9]

+        movd    xmm1,DWORD[20+r10]

+        movd    xmm2,DWORD[20+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm15

+

+        movdqa  xmm2,xmm15

+DB      102,15,56,0,238

+        psrld   xmm7,6

+        movdqa  xmm1,xmm15

+        pslld   xmm2,7

+        movdqa  XMMWORD[(80-128)+rax],xmm5

+        paddd   xmm5,xmm10

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[32+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm15

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm15

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm9

+        pand    xmm4,xmm8

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm11

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm11

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm12

+        movdqa  xmm7,xmm11

+        pslld   xmm2,10

+        pxor    xmm4,xmm11

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm10,xmm12

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm10,xmm3

+        paddd   xmm14,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm10,xmm5

+        paddd   xmm10,xmm7

+        movd    xmm5,DWORD[24+r8]

+        movd    xmm0,DWORD[24+r9]

+        movd    xmm1,DWORD[24+r10]

+        movd    xmm2,DWORD[24+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm14

+DB      102,15,56,0,238

+        movdqa  xmm2,xmm14

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm14

+        pslld   xmm2,7

+        movdqa  XMMWORD[(96-128)+rax],xmm5

+        paddd   xmm5,xmm9

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[64+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm14

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm14

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm8

+        pand    xmm3,xmm15

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm10

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm10

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm11

+        movdqa  xmm7,xmm10

+        pslld   xmm2,10

+        pxor    xmm3,xmm10

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm9,xmm11

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm9,xmm4

+        paddd   xmm13,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm9,xmm5

+        paddd   xmm9,xmm7

+        movd    xmm5,DWORD[28+r8]

+        movd    xmm0,DWORD[28+r9]

+        movd    xmm1,DWORD[28+r10]

+        movd    xmm2,DWORD[28+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm13

+

+        movdqa  xmm2,xmm13

+DB      102,15,56,0,238

+        psrld   xmm7,6

+        movdqa  xmm1,xmm13

+        pslld   xmm2,7

+        movdqa  XMMWORD[(112-128)+rax],xmm5

+        paddd   xmm5,xmm8

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[96+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm13

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm13

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm15

+        pand    xmm4,xmm14

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm9

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm9

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm10

+        movdqa  xmm7,xmm9

+        pslld   xmm2,10

+        pxor    xmm4,xmm9

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm8,xmm10

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm8,xmm3

+        paddd   xmm12,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm8,xmm5

+        paddd   xmm8,xmm7

+        lea     rbp,[256+rbp]

+        movd    xmm5,DWORD[32+r8]

+        movd    xmm0,DWORD[32+r9]

+        movd    xmm1,DWORD[32+r10]

+        movd    xmm2,DWORD[32+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm12

+DB      102,15,56,0,238

+        movdqa  xmm2,xmm12

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm12

+        pslld   xmm2,7

+        movdqa  XMMWORD[(128-128)+rax],xmm5

+        paddd   xmm5,xmm15

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[((-128))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm12

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm12

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm14

+        pand    xmm3,xmm13

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm8

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm8

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm9

+        movdqa  xmm7,xmm8

+        pslld   xmm2,10

+        pxor    xmm3,xmm8

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm15,xmm9

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm15,xmm4

+        paddd   xmm11,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm15,xmm5

+        paddd   xmm15,xmm7

+        movd    xmm5,DWORD[36+r8]

+        movd    xmm0,DWORD[36+r9]

+        movd    xmm1,DWORD[36+r10]

+        movd    xmm2,DWORD[36+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm11

+

+        movdqa  xmm2,xmm11

+DB      102,15,56,0,238

+        psrld   xmm7,6

+        movdqa  xmm1,xmm11

+        pslld   xmm2,7

+        movdqa  XMMWORD[(144-128)+rax],xmm5

+        paddd   xmm5,xmm14

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[((-96))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm11

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm11

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm13

+        pand    xmm4,xmm12

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm15

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm15

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm8

+        movdqa  xmm7,xmm15

+        pslld   xmm2,10

+        pxor    xmm4,xmm15

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm14,xmm8

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm14,xmm3

+        paddd   xmm10,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm14,xmm5

+        paddd   xmm14,xmm7

+        movd    xmm5,DWORD[40+r8]

+        movd    xmm0,DWORD[40+r9]

+        movd    xmm1,DWORD[40+r10]

+        movd    xmm2,DWORD[40+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm10

+DB      102,15,56,0,238

+        movdqa  xmm2,xmm10

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm10

+        pslld   xmm2,7

+        movdqa  XMMWORD[(160-128)+rax],xmm5

+        paddd   xmm5,xmm13

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[((-64))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm10

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm10

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm12

+        pand    xmm3,xmm11

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm14

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm14

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm15

+        movdqa  xmm7,xmm14

+        pslld   xmm2,10

+        pxor    xmm3,xmm14

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm13,xmm15

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm13,xmm4

+        paddd   xmm9,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm13,xmm5

+        paddd   xmm13,xmm7

+        movd    xmm5,DWORD[44+r8]

+        movd    xmm0,DWORD[44+r9]

+        movd    xmm1,DWORD[44+r10]

+        movd    xmm2,DWORD[44+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm9

+

+        movdqa  xmm2,xmm9

+DB      102,15,56,0,238

+        psrld   xmm7,6

+        movdqa  xmm1,xmm9

+        pslld   xmm2,7

+        movdqa  XMMWORD[(176-128)+rax],xmm5

+        paddd   xmm5,xmm12

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[((-32))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm9

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm9

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm11

+        pand    xmm4,xmm10

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm13

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm13

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm14

+        movdqa  xmm7,xmm13

+        pslld   xmm2,10

+        pxor    xmm4,xmm13

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm12,xmm14

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm12,xmm3

+        paddd   xmm8,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm12,xmm5

+        paddd   xmm12,xmm7

+        movd    xmm5,DWORD[48+r8]

+        movd    xmm0,DWORD[48+r9]

+        movd    xmm1,DWORD[48+r10]

+        movd    xmm2,DWORD[48+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm8

+DB      102,15,56,0,238

+        movdqa  xmm2,xmm8

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm8

+        pslld   xmm2,7

+        movdqa  XMMWORD[(192-128)+rax],xmm5

+        paddd   xmm5,xmm11

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm8

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm8

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm10

+        pand    xmm3,xmm9

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm12

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm12

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm13

+        movdqa  xmm7,xmm12

+        pslld   xmm2,10

+        pxor    xmm3,xmm12

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm11,xmm13

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm11,xmm4

+        paddd   xmm15,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm11,xmm5

+        paddd   xmm11,xmm7

+        movd    xmm5,DWORD[52+r8]

+        movd    xmm0,DWORD[52+r9]

+        movd    xmm1,DWORD[52+r10]

+        movd    xmm2,DWORD[52+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm15

+

+        movdqa  xmm2,xmm15

+DB      102,15,56,0,238

+        psrld   xmm7,6

+        movdqa  xmm1,xmm15

+        pslld   xmm2,7

+        movdqa  XMMWORD[(208-128)+rax],xmm5

+        paddd   xmm5,xmm10

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[32+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm15

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm15

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm9

+        pand    xmm4,xmm8

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm11

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm11

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm12

+        movdqa  xmm7,xmm11

+        pslld   xmm2,10

+        pxor    xmm4,xmm11

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm10,xmm12

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm10,xmm3

+        paddd   xmm14,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm10,xmm5

+        paddd   xmm10,xmm7

+        movd    xmm5,DWORD[56+r8]

+        movd    xmm0,DWORD[56+r9]

+        movd    xmm1,DWORD[56+r10]

+        movd    xmm2,DWORD[56+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm14

+DB      102,15,56,0,238

+        movdqa  xmm2,xmm14

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm14

+        pslld   xmm2,7

+        movdqa  XMMWORD[(224-128)+rax],xmm5

+        paddd   xmm5,xmm9

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[64+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm14

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm14

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm8

+        pand    xmm3,xmm15

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm10

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm10

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm11

+        movdqa  xmm7,xmm10

+        pslld   xmm2,10

+        pxor    xmm3,xmm10

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm9,xmm11

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm9,xmm4

+        paddd   xmm13,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm9,xmm5

+        paddd   xmm9,xmm7

+        movd    xmm5,DWORD[60+r8]

+        lea     r8,[64+r8]

+        movd    xmm0,DWORD[60+r9]

+        lea     r9,[64+r9]

+        movd    xmm1,DWORD[60+r10]

+        lea     r10,[64+r10]

+        movd    xmm2,DWORD[60+r11]

+        lea     r11,[64+r11]

+        punpckldq       xmm5,xmm1

+        punpckldq       xmm0,xmm2

+        punpckldq       xmm5,xmm0

+        movdqa  xmm7,xmm13

+

+        movdqa  xmm2,xmm13

+DB      102,15,56,0,238

+        psrld   xmm7,6

+        movdqa  xmm1,xmm13

+        pslld   xmm2,7

+        movdqa  XMMWORD[(240-128)+rax],xmm5

+        paddd   xmm5,xmm8

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[96+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm13

+        prefetcht0      [63+r8]

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm13

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm15

+        pand    xmm4,xmm14

+        pxor    xmm7,xmm1

+

+        prefetcht0      [63+r9]

+        movdqa  xmm1,xmm9

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm9

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm10

+        movdqa  xmm7,xmm9

+        pslld   xmm2,10

+        pxor    xmm4,xmm9

+

+        prefetcht0      [63+r10]

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+        prefetcht0      [63+r11]

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm8,xmm10

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm8,xmm3

+        paddd   xmm12,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm8,xmm5

+        paddd   xmm8,xmm7

+        lea     rbp,[256+rbp]

+        movdqu  xmm5,XMMWORD[((0-128))+rax]

+        mov     ecx,3

+        jmp     NEAR $L$oop_16_xx

+ALIGN   32

+$L$oop_16_xx:

+        movdqa  xmm6,XMMWORD[((16-128))+rax]

+        paddd   xmm5,XMMWORD[((144-128))+rax]

+

+        movdqa  xmm7,xmm6

+        movdqa  xmm1,xmm6

+        psrld   xmm7,3

+        movdqa  xmm2,xmm6

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((224-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm3,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm3

+

+        psrld   xmm3,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        psrld   xmm3,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm3

+        pxor    xmm0,xmm1

+        paddd   xmm5,xmm0

+        movdqa  xmm7,xmm12

+

+        movdqa  xmm2,xmm12

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm12

+        pslld   xmm2,7

+        movdqa  XMMWORD[(0-128)+rax],xmm5

+        paddd   xmm5,xmm15

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[((-128))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm12

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm12

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm14

+        pand    xmm3,xmm13

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm8

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm8

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm9

+        movdqa  xmm7,xmm8

+        pslld   xmm2,10

+        pxor    xmm3,xmm8

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm15,xmm9

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm15,xmm4

+        paddd   xmm11,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm15,xmm5

+        paddd   xmm15,xmm7

+        movdqa  xmm5,XMMWORD[((32-128))+rax]

+        paddd   xmm6,XMMWORD[((160-128))+rax]

+

+        movdqa  xmm7,xmm5

+        movdqa  xmm1,xmm5

+        psrld   xmm7,3

+        movdqa  xmm2,xmm5

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((240-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm4,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm4

+

+        psrld   xmm4,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        psrld   xmm4,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm4

+        pxor    xmm0,xmm1

+        paddd   xmm6,xmm0

+        movdqa  xmm7,xmm11

+

+        movdqa  xmm2,xmm11

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm11

+        pslld   xmm2,7

+        movdqa  XMMWORD[(16-128)+rax],xmm6

+        paddd   xmm6,xmm14

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm6,XMMWORD[((-96))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm11

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm11

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm13

+        pand    xmm4,xmm12

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm15

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm15

+        psrld   xmm1,2

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm8

+        movdqa  xmm7,xmm15

+        pslld   xmm2,10

+        pxor    xmm4,xmm15

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm6,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm14,xmm8

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm14,xmm3

+        paddd   xmm10,xmm6

+        pxor    xmm7,xmm2

+

+        paddd   xmm14,xmm6

+        paddd   xmm14,xmm7

+        movdqa  xmm6,XMMWORD[((48-128))+rax]

+        paddd   xmm5,XMMWORD[((176-128))+rax]

+

+        movdqa  xmm7,xmm6

+        movdqa  xmm1,xmm6

+        psrld   xmm7,3

+        movdqa  xmm2,xmm6

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((0-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm3,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm3

+

+        psrld   xmm3,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        psrld   xmm3,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm3

+        pxor    xmm0,xmm1

+        paddd   xmm5,xmm0

+        movdqa  xmm7,xmm10

+

+        movdqa  xmm2,xmm10

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm10

+        pslld   xmm2,7

+        movdqa  XMMWORD[(32-128)+rax],xmm5

+        paddd   xmm5,xmm13

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[((-64))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm10

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm10

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm12

+        pand    xmm3,xmm11

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm14

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm14

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm15

+        movdqa  xmm7,xmm14

+        pslld   xmm2,10

+        pxor    xmm3,xmm14

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm13,xmm15

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm13,xmm4

+        paddd   xmm9,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm13,xmm5

+        paddd   xmm13,xmm7

+        movdqa  xmm5,XMMWORD[((64-128))+rax]

+        paddd   xmm6,XMMWORD[((192-128))+rax]

+

+        movdqa  xmm7,xmm5

+        movdqa  xmm1,xmm5

+        psrld   xmm7,3

+        movdqa  xmm2,xmm5

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((16-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm4,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm4

+

+        psrld   xmm4,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        psrld   xmm4,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm4

+        pxor    xmm0,xmm1

+        paddd   xmm6,xmm0

+        movdqa  xmm7,xmm9

+

+        movdqa  xmm2,xmm9

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm9

+        pslld   xmm2,7

+        movdqa  XMMWORD[(48-128)+rax],xmm6

+        paddd   xmm6,xmm12

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm6,XMMWORD[((-32))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm9

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm9

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm11

+        pand    xmm4,xmm10

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm13

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm13

+        psrld   xmm1,2

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm14

+        movdqa  xmm7,xmm13

+        pslld   xmm2,10

+        pxor    xmm4,xmm13

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm6,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm12,xmm14

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm12,xmm3

+        paddd   xmm8,xmm6

+        pxor    xmm7,xmm2

+

+        paddd   xmm12,xmm6

+        paddd   xmm12,xmm7

+        movdqa  xmm6,XMMWORD[((80-128))+rax]

+        paddd   xmm5,XMMWORD[((208-128))+rax]

+

+        movdqa  xmm7,xmm6

+        movdqa  xmm1,xmm6

+        psrld   xmm7,3

+        movdqa  xmm2,xmm6

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((32-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm3,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm3

+

+        psrld   xmm3,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        psrld   xmm3,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm3

+        pxor    xmm0,xmm1

+        paddd   xmm5,xmm0

+        movdqa  xmm7,xmm8

+

+        movdqa  xmm2,xmm8

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm8

+        pslld   xmm2,7

+        movdqa  XMMWORD[(64-128)+rax],xmm5

+        paddd   xmm5,xmm11

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm8

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm8

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm10

+        pand    xmm3,xmm9

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm12

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm12

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm13

+        movdqa  xmm7,xmm12

+        pslld   xmm2,10

+        pxor    xmm3,xmm12

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm11,xmm13

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm11,xmm4

+        paddd   xmm15,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm11,xmm5

+        paddd   xmm11,xmm7

+        movdqa  xmm5,XMMWORD[((96-128))+rax]

+        paddd   xmm6,XMMWORD[((224-128))+rax]

+

+        movdqa  xmm7,xmm5

+        movdqa  xmm1,xmm5

+        psrld   xmm7,3

+        movdqa  xmm2,xmm5

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((48-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm4,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm4

+

+        psrld   xmm4,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        psrld   xmm4,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm4

+        pxor    xmm0,xmm1

+        paddd   xmm6,xmm0

+        movdqa  xmm7,xmm15

+

+        movdqa  xmm2,xmm15

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm15

+        pslld   xmm2,7

+        movdqa  XMMWORD[(80-128)+rax],xmm6

+        paddd   xmm6,xmm10

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm6,XMMWORD[32+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm15

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm15

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm9

+        pand    xmm4,xmm8

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm11

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm11

+        psrld   xmm1,2

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm12

+        movdqa  xmm7,xmm11

+        pslld   xmm2,10

+        pxor    xmm4,xmm11

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm6,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm10,xmm12

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm10,xmm3

+        paddd   xmm14,xmm6

+        pxor    xmm7,xmm2

+

+        paddd   xmm10,xmm6

+        paddd   xmm10,xmm7

+        movdqa  xmm6,XMMWORD[((112-128))+rax]

+        paddd   xmm5,XMMWORD[((240-128))+rax]

+

+        movdqa  xmm7,xmm6

+        movdqa  xmm1,xmm6

+        psrld   xmm7,3

+        movdqa  xmm2,xmm6

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((64-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm3,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm3

+

+        psrld   xmm3,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        psrld   xmm3,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm3

+        pxor    xmm0,xmm1

+        paddd   xmm5,xmm0

+        movdqa  xmm7,xmm14

+

+        movdqa  xmm2,xmm14

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm14

+        pslld   xmm2,7

+        movdqa  XMMWORD[(96-128)+rax],xmm5

+        paddd   xmm5,xmm9

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[64+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm14

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm14

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm8

+        pand    xmm3,xmm15

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm10

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm10

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm11

+        movdqa  xmm7,xmm10

+        pslld   xmm2,10

+        pxor    xmm3,xmm10

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm9,xmm11

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm9,xmm4

+        paddd   xmm13,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm9,xmm5

+        paddd   xmm9,xmm7

+        movdqa  xmm5,XMMWORD[((128-128))+rax]

+        paddd   xmm6,XMMWORD[((0-128))+rax]

+

+        movdqa  xmm7,xmm5

+        movdqa  xmm1,xmm5

+        psrld   xmm7,3

+        movdqa  xmm2,xmm5

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((80-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm4,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm4

+

+        psrld   xmm4,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        psrld   xmm4,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm4

+        pxor    xmm0,xmm1

+        paddd   xmm6,xmm0

+        movdqa  xmm7,xmm13

+

+        movdqa  xmm2,xmm13

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm13

+        pslld   xmm2,7

+        movdqa  XMMWORD[(112-128)+rax],xmm6

+        paddd   xmm6,xmm8

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm6,XMMWORD[96+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm13

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm13

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm15

+        pand    xmm4,xmm14

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm9

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm9

+        psrld   xmm1,2

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm10

+        movdqa  xmm7,xmm9

+        pslld   xmm2,10

+        pxor    xmm4,xmm9

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm6,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm8,xmm10

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm8,xmm3

+        paddd   xmm12,xmm6

+        pxor    xmm7,xmm2

+

+        paddd   xmm8,xmm6

+        paddd   xmm8,xmm7

+        lea     rbp,[256+rbp]

+        movdqa  xmm6,XMMWORD[((144-128))+rax]

+        paddd   xmm5,XMMWORD[((16-128))+rax]

+

+        movdqa  xmm7,xmm6

+        movdqa  xmm1,xmm6

+        psrld   xmm7,3

+        movdqa  xmm2,xmm6

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((96-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm3,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm3

+

+        psrld   xmm3,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        psrld   xmm3,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm3

+        pxor    xmm0,xmm1

+        paddd   xmm5,xmm0

+        movdqa  xmm7,xmm12

+

+        movdqa  xmm2,xmm12

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm12

+        pslld   xmm2,7

+        movdqa  XMMWORD[(128-128)+rax],xmm5

+        paddd   xmm5,xmm15

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[((-128))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm12

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm12

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm14

+        pand    xmm3,xmm13

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm8

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm8

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm9

+        movdqa  xmm7,xmm8

+        pslld   xmm2,10

+        pxor    xmm3,xmm8

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm15,xmm9

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm15,xmm4

+        paddd   xmm11,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm15,xmm5

+        paddd   xmm15,xmm7

+        movdqa  xmm5,XMMWORD[((160-128))+rax]

+        paddd   xmm6,XMMWORD[((32-128))+rax]

+

+        movdqa  xmm7,xmm5

+        movdqa  xmm1,xmm5

+        psrld   xmm7,3

+        movdqa  xmm2,xmm5

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((112-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm4,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm4

+

+        psrld   xmm4,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        psrld   xmm4,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm4

+        pxor    xmm0,xmm1

+        paddd   xmm6,xmm0

+        movdqa  xmm7,xmm11

+

+        movdqa  xmm2,xmm11

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm11

+        pslld   xmm2,7

+        movdqa  XMMWORD[(144-128)+rax],xmm6

+        paddd   xmm6,xmm14

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm6,XMMWORD[((-96))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm11

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm11

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm13

+        pand    xmm4,xmm12

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm15

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm15

+        psrld   xmm1,2

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm8

+        movdqa  xmm7,xmm15

+        pslld   xmm2,10

+        pxor    xmm4,xmm15

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm6,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm14,xmm8

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm14,xmm3

+        paddd   xmm10,xmm6

+        pxor    xmm7,xmm2

+

+        paddd   xmm14,xmm6

+        paddd   xmm14,xmm7

+        movdqa  xmm6,XMMWORD[((176-128))+rax]

+        paddd   xmm5,XMMWORD[((48-128))+rax]

+

+        movdqa  xmm7,xmm6

+        movdqa  xmm1,xmm6

+        psrld   xmm7,3

+        movdqa  xmm2,xmm6

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((128-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm3,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm3

+

+        psrld   xmm3,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        psrld   xmm3,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm3

+        pxor    xmm0,xmm1

+        paddd   xmm5,xmm0

+        movdqa  xmm7,xmm10

+

+        movdqa  xmm2,xmm10

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm10

+        pslld   xmm2,7

+        movdqa  XMMWORD[(160-128)+rax],xmm5

+        paddd   xmm5,xmm13

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[((-64))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm10

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm10

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm12

+        pand    xmm3,xmm11

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm14

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm14

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm15

+        movdqa  xmm7,xmm14

+        pslld   xmm2,10

+        pxor    xmm3,xmm14

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm13,xmm15

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm13,xmm4

+        paddd   xmm9,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm13,xmm5

+        paddd   xmm13,xmm7

+        movdqa  xmm5,XMMWORD[((192-128))+rax]

+        paddd   xmm6,XMMWORD[((64-128))+rax]

+

+        movdqa  xmm7,xmm5

+        movdqa  xmm1,xmm5

+        psrld   xmm7,3

+        movdqa  xmm2,xmm5

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((144-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm4,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm4

+

+        psrld   xmm4,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        psrld   xmm4,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm4

+        pxor    xmm0,xmm1

+        paddd   xmm6,xmm0

+        movdqa  xmm7,xmm9

+

+        movdqa  xmm2,xmm9

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm9

+        pslld   xmm2,7

+        movdqa  XMMWORD[(176-128)+rax],xmm6

+        paddd   xmm6,xmm12

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm6,XMMWORD[((-32))+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm9

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm9

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm11

+        pand    xmm4,xmm10

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm13

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm13

+        psrld   xmm1,2

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm14

+        movdqa  xmm7,xmm13

+        pslld   xmm2,10

+        pxor    xmm4,xmm13

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm6,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm12,xmm14

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm12,xmm3

+        paddd   xmm8,xmm6

+        pxor    xmm7,xmm2

+

+        paddd   xmm12,xmm6

+        paddd   xmm12,xmm7

+        movdqa  xmm6,XMMWORD[((208-128))+rax]

+        paddd   xmm5,XMMWORD[((80-128))+rax]

+

+        movdqa  xmm7,xmm6

+        movdqa  xmm1,xmm6

+        psrld   xmm7,3

+        movdqa  xmm2,xmm6

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((160-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm3,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm3

+

+        psrld   xmm3,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        psrld   xmm3,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm3

+        pxor    xmm0,xmm1

+        paddd   xmm5,xmm0

+        movdqa  xmm7,xmm8

+

+        movdqa  xmm2,xmm8

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm8

+        pslld   xmm2,7

+        movdqa  XMMWORD[(192-128)+rax],xmm5

+        paddd   xmm5,xmm11

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm8

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm8

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm10

+        pand    xmm3,xmm9

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm12

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm12

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm13

+        movdqa  xmm7,xmm12

+        pslld   xmm2,10

+        pxor    xmm3,xmm12

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm11,xmm13

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm11,xmm4

+        paddd   xmm15,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm11,xmm5

+        paddd   xmm11,xmm7

+        movdqa  xmm5,XMMWORD[((224-128))+rax]

+        paddd   xmm6,XMMWORD[((96-128))+rax]

+

+        movdqa  xmm7,xmm5

+        movdqa  xmm1,xmm5

+        psrld   xmm7,3

+        movdqa  xmm2,xmm5

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((176-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm4,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm4

+

+        psrld   xmm4,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        psrld   xmm4,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm4

+        pxor    xmm0,xmm1

+        paddd   xmm6,xmm0

+        movdqa  xmm7,xmm15

+

+        movdqa  xmm2,xmm15

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm15

+        pslld   xmm2,7

+        movdqa  XMMWORD[(208-128)+rax],xmm6

+        paddd   xmm6,xmm10

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm6,XMMWORD[32+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm15

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm15

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm9

+        pand    xmm4,xmm8

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm11

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm11

+        psrld   xmm1,2

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm12

+        movdqa  xmm7,xmm11

+        pslld   xmm2,10

+        pxor    xmm4,xmm11

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm6,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm10,xmm12

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm10,xmm3

+        paddd   xmm14,xmm6

+        pxor    xmm7,xmm2

+

+        paddd   xmm10,xmm6

+        paddd   xmm10,xmm7

+        movdqa  xmm6,XMMWORD[((240-128))+rax]

+        paddd   xmm5,XMMWORD[((112-128))+rax]

+

+        movdqa  xmm7,xmm6

+        movdqa  xmm1,xmm6

+        psrld   xmm7,3

+        movdqa  xmm2,xmm6

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((192-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm3,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm3

+

+        psrld   xmm3,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        psrld   xmm3,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm3

+        pxor    xmm0,xmm1

+        paddd   xmm5,xmm0

+        movdqa  xmm7,xmm14

+

+        movdqa  xmm2,xmm14

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm14

+        pslld   xmm2,7

+        movdqa  XMMWORD[(224-128)+rax],xmm5

+        paddd   xmm5,xmm9

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm5,XMMWORD[64+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm14

+

+        pxor    xmm7,xmm2

+        movdqa  xmm3,xmm14

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm8

+        pand    xmm3,xmm15

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm10

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm10

+        psrld   xmm1,2

+        paddd   xmm5,xmm7

+        pxor    xmm0,xmm3

+        movdqa  xmm3,xmm11

+        movdqa  xmm7,xmm10

+        pslld   xmm2,10

+        pxor    xmm3,xmm10

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm5,xmm0

+        pslld   xmm2,19-10

+        pand    xmm4,xmm3

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm9,xmm11

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm9,xmm4

+        paddd   xmm13,xmm5

+        pxor    xmm7,xmm2

+

+        paddd   xmm9,xmm5

+        paddd   xmm9,xmm7

+        movdqa  xmm5,XMMWORD[((0-128))+rax]

+        paddd   xmm6,XMMWORD[((128-128))+rax]

+

+        movdqa  xmm7,xmm5

+        movdqa  xmm1,xmm5

+        psrld   xmm7,3

+        movdqa  xmm2,xmm5

+

+        psrld   xmm1,7

+        movdqa  xmm0,XMMWORD[((208-128))+rax]

+        pslld   xmm2,14

+        pxor    xmm7,xmm1

+        psrld   xmm1,18-7

+        movdqa  xmm4,xmm0

+        pxor    xmm7,xmm2

+        pslld   xmm2,25-14

+        pxor    xmm7,xmm1

+        psrld   xmm0,10

+        movdqa  xmm1,xmm4

+

+        psrld   xmm4,17

+        pxor    xmm7,xmm2

+        pslld   xmm1,13

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        psrld   xmm4,19-17

+        pxor    xmm0,xmm1

+        pslld   xmm1,15-13

+        pxor    xmm0,xmm4

+        pxor    xmm0,xmm1

+        paddd   xmm6,xmm0

+        movdqa  xmm7,xmm13

+

+        movdqa  xmm2,xmm13

+

+        psrld   xmm7,6

+        movdqa  xmm1,xmm13

+        pslld   xmm2,7

+        movdqa  XMMWORD[(240-128)+rax],xmm6

+        paddd   xmm6,xmm8

+

+        psrld   xmm1,11

+        pxor    xmm7,xmm2

+        pslld   xmm2,21-7

+        paddd   xmm6,XMMWORD[96+rbp]

+        pxor    xmm7,xmm1

+

+        psrld   xmm1,25-11

+        movdqa  xmm0,xmm13

+

+        pxor    xmm7,xmm2

+        movdqa  xmm4,xmm13

+        pslld   xmm2,26-21

+        pandn   xmm0,xmm15

+        pand    xmm4,xmm14

+        pxor    xmm7,xmm1

+

+

+        movdqa  xmm1,xmm9

+        pxor    xmm7,xmm2

+        movdqa  xmm2,xmm9

+        psrld   xmm1,2

+        paddd   xmm6,xmm7

+        pxor    xmm0,xmm4

+        movdqa  xmm4,xmm10

+        movdqa  xmm7,xmm9

+        pslld   xmm2,10

+        pxor    xmm4,xmm9

+

+

+        psrld   xmm7,13

+        pxor    xmm1,xmm2

+        paddd   xmm6,xmm0

+        pslld   xmm2,19-10

+        pand    xmm3,xmm4

+        pxor    xmm1,xmm7

+

+

+        psrld   xmm7,22-13

+        pxor    xmm1,xmm2

+        movdqa  xmm8,xmm10

+        pslld   xmm2,30-19

+        pxor    xmm7,xmm1

+        pxor    xmm8,xmm3

+        paddd   xmm12,xmm6

+        pxor    xmm7,xmm2

+

+        paddd   xmm8,xmm6

+        paddd   xmm8,xmm7

+        lea     rbp,[256+rbp]

+        dec     ecx

+        jnz     NEAR $L$oop_16_xx

+

+        mov     ecx,1

+        lea     rbp,[((K256+128))]

+

+        movdqa  xmm7,XMMWORD[rbx]

+        cmp     ecx,DWORD[rbx]

+        pxor    xmm0,xmm0

+        cmovge  r8,rbp

+        cmp     ecx,DWORD[4+rbx]

+        movdqa  xmm6,xmm7

+        cmovge  r9,rbp

+        cmp     ecx,DWORD[8+rbx]

+        pcmpgtd xmm6,xmm0

+        cmovge  r10,rbp

+        cmp     ecx,DWORD[12+rbx]

+        paddd   xmm7,xmm6

+        cmovge  r11,rbp

+

+        movdqu  xmm0,XMMWORD[((0-128))+rdi]

+        pand    xmm8,xmm6

+        movdqu  xmm1,XMMWORD[((32-128))+rdi]

+        pand    xmm9,xmm6

+        movdqu  xmm2,XMMWORD[((64-128))+rdi]

+        pand    xmm10,xmm6

+        movdqu  xmm5,XMMWORD[((96-128))+rdi]

+        pand    xmm11,xmm6

+        paddd   xmm8,xmm0

+        movdqu  xmm0,XMMWORD[((128-128))+rdi]

+        pand    xmm12,xmm6

+        paddd   xmm9,xmm1

+        movdqu  xmm1,XMMWORD[((160-128))+rdi]

+        pand    xmm13,xmm6

+        paddd   xmm10,xmm2

+        movdqu  xmm2,XMMWORD[((192-128))+rdi]

+        pand    xmm14,xmm6

+        paddd   xmm11,xmm5

+        movdqu  xmm5,XMMWORD[((224-128))+rdi]

+        pand    xmm15,xmm6

+        paddd   xmm12,xmm0

+        paddd   xmm13,xmm1

+        movdqu  XMMWORD[(0-128)+rdi],xmm8

+        paddd   xmm14,xmm2

+        movdqu  XMMWORD[(32-128)+rdi],xmm9

+        paddd   xmm15,xmm5

+        movdqu  XMMWORD[(64-128)+rdi],xmm10

+        movdqu  XMMWORD[(96-128)+rdi],xmm11

+        movdqu  XMMWORD[(128-128)+rdi],xmm12

+        movdqu  XMMWORD[(160-128)+rdi],xmm13

+        movdqu  XMMWORD[(192-128)+rdi],xmm14

+        movdqu  XMMWORD[(224-128)+rdi],xmm15

+

+        movdqa  XMMWORD[rbx],xmm7

+        movdqa  xmm6,XMMWORD[$L$pbswap]

+        dec     edx

+        jnz     NEAR $L$oop

+

+        mov     edx,DWORD[280+rsp]

+        lea     rdi,[16+rdi]

+        lea     rsi,[64+rsi]

+        dec     edx

+        jnz     NEAR $L$oop_grande

+

+$L$done:

+        mov     rax,QWORD[272+rsp]

+

+        movaps  xmm6,XMMWORD[((-184))+rax]

+        movaps  xmm7,XMMWORD[((-168))+rax]

+        movaps  xmm8,XMMWORD[((-152))+rax]

+        movaps  xmm9,XMMWORD[((-136))+rax]

+        movaps  xmm10,XMMWORD[((-120))+rax]

+        movaps  xmm11,XMMWORD[((-104))+rax]

+        movaps  xmm12,XMMWORD[((-88))+rax]

+        movaps  xmm13,XMMWORD[((-72))+rax]

+        movaps  xmm14,XMMWORD[((-56))+rax]

+        movaps  xmm15,XMMWORD[((-40))+rax]

+        mov     rbp,QWORD[((-16))+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+

+        lea     rsp,[rax]

+

+$L$epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_sha256_multi_block:

+

+ALIGN   32

+sha256_multi_block_shaext:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_sha256_multi_block_shaext:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+

+_shaext_shortcut:

+        mov     rax,rsp

+

+        push    rbx

+

+        push    rbp

+

+        lea     rsp,[((-168))+rsp]

+        movaps  XMMWORD[rsp],xmm6

+        movaps  XMMWORD[16+rsp],xmm7

+        movaps  XMMWORD[32+rsp],xmm8

+        movaps  XMMWORD[48+rsp],xmm9

+        movaps  XMMWORD[(-120)+rax],xmm10

+        movaps  XMMWORD[(-104)+rax],xmm11

+        movaps  XMMWORD[(-88)+rax],xmm12

+        movaps  XMMWORD[(-72)+rax],xmm13

+        movaps  XMMWORD[(-56)+rax],xmm14

+        movaps  XMMWORD[(-40)+rax],xmm15

+        sub     rsp,288

+        shl     edx,1

+        and     rsp,-256

+        lea     rdi,[128+rdi]

+        mov     QWORD[272+rsp],rax

+$L$body_shaext:

+        lea     rbx,[256+rsp]

+        lea     rbp,[((K256_shaext+128))]

+

+$L$oop_grande_shaext:

+        mov     DWORD[280+rsp],edx

+        xor     edx,edx

+        mov     r8,QWORD[rsi]

+        mov     ecx,DWORD[8+rsi]

+        cmp     ecx,edx

+        cmovg   edx,ecx

+        test    ecx,ecx

+        mov     DWORD[rbx],ecx

+        cmovle  r8,rsp

+        mov     r9,QWORD[16+rsi]

+        mov     ecx,DWORD[24+rsi]

+        cmp     ecx,edx

+        cmovg   edx,ecx

+        test    ecx,ecx

+        mov     DWORD[4+rbx],ecx

+        cmovle  r9,rsp

+        test    edx,edx

+        jz      NEAR $L$done_shaext

+

+        movq    xmm12,QWORD[((0-128))+rdi]

+        movq    xmm4,QWORD[((32-128))+rdi]

+        movq    xmm13,QWORD[((64-128))+rdi]

+        movq    xmm5,QWORD[((96-128))+rdi]

+        movq    xmm8,QWORD[((128-128))+rdi]

+        movq    xmm9,QWORD[((160-128))+rdi]

+        movq    xmm10,QWORD[((192-128))+rdi]

+        movq    xmm11,QWORD[((224-128))+rdi]

+

+        punpckldq       xmm12,xmm4

+        punpckldq       xmm13,xmm5

+        punpckldq       xmm8,xmm9

+        punpckldq       xmm10,xmm11

+        movdqa  xmm3,XMMWORD[((K256_shaext-16))]

+

+        movdqa  xmm14,xmm12

+        movdqa  xmm15,xmm13

+        punpcklqdq      xmm12,xmm8

+        punpcklqdq      xmm13,xmm10

+        punpckhqdq      xmm14,xmm8

+        punpckhqdq      xmm15,xmm10

+

+        pshufd  xmm12,xmm12,27

+        pshufd  xmm13,xmm13,27

+        pshufd  xmm14,xmm14,27

+        pshufd  xmm15,xmm15,27

+        jmp     NEAR $L$oop_shaext

+

+ALIGN   32

+$L$oop_shaext:

+        movdqu  xmm4,XMMWORD[r8]

+        movdqu  xmm8,XMMWORD[r9]

+        movdqu  xmm5,XMMWORD[16+r8]

+        movdqu  xmm9,XMMWORD[16+r9]

+        movdqu  xmm6,XMMWORD[32+r8]

+DB      102,15,56,0,227

+        movdqu  xmm10,XMMWORD[32+r9]

+DB      102,68,15,56,0,195

+        movdqu  xmm7,XMMWORD[48+r8]

+        lea     r8,[64+r8]

+        movdqu  xmm11,XMMWORD[48+r9]

+        lea     r9,[64+r9]

+

+        movdqa  xmm0,XMMWORD[((0-128))+rbp]

+DB      102,15,56,0,235

+        paddd   xmm0,xmm4

+        pxor    xmm4,xmm12

+        movdqa  xmm1,xmm0

+        movdqa  xmm2,XMMWORD[((0-128))+rbp]

+DB      102,68,15,56,0,203

+        paddd   xmm2,xmm8

+        movdqa  XMMWORD[80+rsp],xmm13

+DB      69,15,56,203,236

+        pxor    xmm8,xmm14

+        movdqa  xmm0,xmm2

+        movdqa  XMMWORD[112+rsp],xmm15

+DB      69,15,56,203,254

+        pshufd  xmm0,xmm1,0x0e

+        pxor    xmm4,xmm12

+        movdqa  XMMWORD[64+rsp],xmm12

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        pxor    xmm8,xmm14

+        movdqa  XMMWORD[96+rsp],xmm14

+        movdqa  xmm1,XMMWORD[((16-128))+rbp]

+        paddd   xmm1,xmm5

+DB      102,15,56,0,243

+DB      69,15,56,203,247

+

+        movdqa  xmm0,xmm1

+        movdqa  xmm2,XMMWORD[((16-128))+rbp]

+        paddd   xmm2,xmm9

+DB      69,15,56,203,236

+        movdqa  xmm0,xmm2

+        prefetcht0      [127+r8]

+DB      102,15,56,0,251

+DB      102,68,15,56,0,211

+        prefetcht0      [127+r9]

+DB      69,15,56,203,254

+        pshufd  xmm0,xmm1,0x0e

+DB      102,68,15,56,0,219

+DB      15,56,204,229

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        movdqa  xmm1,XMMWORD[((32-128))+rbp]

+        paddd   xmm1,xmm6

+DB      69,15,56,203,247

+

+        movdqa  xmm0,xmm1

+        movdqa  xmm2,XMMWORD[((32-128))+rbp]

+        paddd   xmm2,xmm10

+DB      69,15,56,203,236

+DB      69,15,56,204,193

+        movdqa  xmm0,xmm2

+        movdqa  xmm3,xmm7

+DB      69,15,56,203,254

+        pshufd  xmm0,xmm1,0x0e

+DB      102,15,58,15,222,4

+        paddd   xmm4,xmm3

+        movdqa  xmm3,xmm11

+DB      102,65,15,58,15,218,4

+DB      15,56,204,238

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        movdqa  xmm1,XMMWORD[((48-128))+rbp]

+        paddd   xmm1,xmm7

+DB      69,15,56,203,247

+DB      69,15,56,204,202

+

+        movdqa  xmm0,xmm1

+        movdqa  xmm2,XMMWORD[((48-128))+rbp]

+        paddd   xmm8,xmm3

+        paddd   xmm2,xmm11

+DB      15,56,205,231

+DB      69,15,56,203,236

+        movdqa  xmm0,xmm2

+        movdqa  xmm3,xmm4

+DB      102,15,58,15,223,4

+DB      69,15,56,203,254

+DB      69,15,56,205,195

+        pshufd  xmm0,xmm1,0x0e

+        paddd   xmm5,xmm3

+        movdqa  xmm3,xmm8

+DB      102,65,15,58,15,219,4

+DB      15,56,204,247

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        movdqa  xmm1,XMMWORD[((64-128))+rbp]

+        paddd   xmm1,xmm4

+DB      69,15,56,203,247

+DB      69,15,56,204,211

+        movdqa  xmm0,xmm1

+        movdqa  xmm2,XMMWORD[((64-128))+rbp]

+        paddd   xmm9,xmm3

+        paddd   xmm2,xmm8

+DB      15,56,205,236

+DB      69,15,56,203,236

+        movdqa  xmm0,xmm2

+        movdqa  xmm3,xmm5

+DB      102,15,58,15,220,4

+DB      69,15,56,203,254

+DB      69,15,56,205,200

+        pshufd  xmm0,xmm1,0x0e

+        paddd   xmm6,xmm3

+        movdqa  xmm3,xmm9

+DB      102,65,15,58,15,216,4

+DB      15,56,204,252

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        movdqa  xmm1,XMMWORD[((80-128))+rbp]

+        paddd   xmm1,xmm5

+DB      69,15,56,203,247

+DB      69,15,56,204,216

+        movdqa  xmm0,xmm1

+        movdqa  xmm2,XMMWORD[((80-128))+rbp]

+        paddd   xmm10,xmm3

+        paddd   xmm2,xmm9

+DB      15,56,205,245

+DB      69,15,56,203,236

+        movdqa  xmm0,xmm2

+        movdqa  xmm3,xmm6

+DB      102,15,58,15,221,4

+DB      69,15,56,203,254

+DB      69,15,56,205,209

+        pshufd  xmm0,xmm1,0x0e

+        paddd   xmm7,xmm3

+        movdqa  xmm3,xmm10

+DB      102,65,15,58,15,217,4

+DB      15,56,204,229

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        movdqa  xmm1,XMMWORD[((96-128))+rbp]

+        paddd   xmm1,xmm6

+DB      69,15,56,203,247

+DB      69,15,56,204,193

+        movdqa  xmm0,xmm1

+        movdqa  xmm2,XMMWORD[((96-128))+rbp]

+        paddd   xmm11,xmm3

+        paddd   xmm2,xmm10

+DB      15,56,205,254

+DB      69,15,56,203,236

+        movdqa  xmm0,xmm2

+        movdqa  xmm3,xmm7

+DB      102,15,58,15,222,4

+DB      69,15,56,203,254

+DB      69,15,56,205,218

+        pshufd  xmm0,xmm1,0x0e

+        paddd   xmm4,xmm3

+        movdqa  xmm3,xmm11

+DB      102,65,15,58,15,218,4

+DB      15,56,204,238

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        movdqa  xmm1,XMMWORD[((112-128))+rbp]

+        paddd   xmm1,xmm7

+DB      69,15,56,203,247

+DB      69,15,56,204,202

+        movdqa  xmm0,xmm1

+        movdqa  xmm2,XMMWORD[((112-128))+rbp]

+        paddd   xmm8,xmm3

+        paddd   xmm2,xmm11

+DB      15,56,205,231

+DB      69,15,56,203,236

+        movdqa  xmm0,xmm2

+        movdqa  xmm3,xmm4

+DB      102,15,58,15,223,4

+DB      69,15,56,203,254

+DB      69,15,56,205,195

+        pshufd  xmm0,xmm1,0x0e

+        paddd   xmm5,xmm3

+        movdqa  xmm3,xmm8

+DB      102,65,15,58,15,219,4

+DB      15,56,204,247

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        movdqa  xmm1,XMMWORD[((128-128))+rbp]

+        paddd   xmm1,xmm4

+DB      69,15,56,203,247

+DB      69,15,56,204,211

+        movdqa  xmm0,xmm1

+        movdqa  xmm2,XMMWORD[((128-128))+rbp]

+        paddd   xmm9,xmm3

+        paddd   xmm2,xmm8

+DB      15,56,205,236

+DB      69,15,56,203,236

+        movdqa  xmm0,xmm2

+        movdqa  xmm3,xmm5

+DB      102,15,58,15,220,4

+DB      69,15,56,203,254

+DB      69,15,56,205,200

+        pshufd  xmm0,xmm1,0x0e

+        paddd   xmm6,xmm3

+        movdqa  xmm3,xmm9

+DB      102,65,15,58,15,216,4

+DB      15,56,204,252

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        movdqa  xmm1,XMMWORD[((144-128))+rbp]

+        paddd   xmm1,xmm5

+DB      69,15,56,203,247

+DB      69,15,56,204,216

+        movdqa  xmm0,xmm1

+        movdqa  xmm2,XMMWORD[((144-128))+rbp]

+        paddd   xmm10,xmm3

+        paddd   xmm2,xmm9

+DB      15,56,205,245

+DB      69,15,56,203,236

+        movdqa  xmm0,xmm2

+        movdqa  xmm3,xmm6

+DB      102,15,58,15,221,4

+DB      69,15,56,203,254

+DB      69,15,56,205,209

+        pshufd  xmm0,xmm1,0x0e

+        paddd   xmm7,xmm3

+        movdqa  xmm3,xmm10

+DB      102,65,15,58,15,217,4

+DB      15,56,204,229

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        movdqa  xmm1,XMMWORD[((160-128))+rbp]

+        paddd   xmm1,xmm6

+DB      69,15,56,203,247

+DB      69,15,56,204,193

+        movdqa  xmm0,xmm1

+        movdqa  xmm2,XMMWORD[((160-128))+rbp]

+        paddd   xmm11,xmm3

+        paddd   xmm2,xmm10

+DB      15,56,205,254

+DB      69,15,56,203,236

+        movdqa  xmm0,xmm2

+        movdqa  xmm3,xmm7

+DB      102,15,58,15,222,4

+DB      69,15,56,203,254

+DB      69,15,56,205,218

+        pshufd  xmm0,xmm1,0x0e

+        paddd   xmm4,xmm3

+        movdqa  xmm3,xmm11

+DB      102,65,15,58,15,218,4

+DB      15,56,204,238

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        movdqa  xmm1,XMMWORD[((176-128))+rbp]

+        paddd   xmm1,xmm7

+DB      69,15,56,203,247

+DB      69,15,56,204,202

+        movdqa  xmm0,xmm1

+        movdqa  xmm2,XMMWORD[((176-128))+rbp]

+        paddd   xmm8,xmm3

+        paddd   xmm2,xmm11

+DB      15,56,205,231

+DB      69,15,56,203,236

+        movdqa  xmm0,xmm2

+        movdqa  xmm3,xmm4

+DB      102,15,58,15,223,4

+DB      69,15,56,203,254

+DB      69,15,56,205,195

+        pshufd  xmm0,xmm1,0x0e

+        paddd   xmm5,xmm3

+        movdqa  xmm3,xmm8

+DB      102,65,15,58,15,219,4

+DB      15,56,204,247

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        movdqa  xmm1,XMMWORD[((192-128))+rbp]

+        paddd   xmm1,xmm4

+DB      69,15,56,203,247

+DB      69,15,56,204,211

+        movdqa  xmm0,xmm1

+        movdqa  xmm2,XMMWORD[((192-128))+rbp]

+        paddd   xmm9,xmm3

+        paddd   xmm2,xmm8

+DB      15,56,205,236

+DB      69,15,56,203,236

+        movdqa  xmm0,xmm2

+        movdqa  xmm3,xmm5

+DB      102,15,58,15,220,4

+DB      69,15,56,203,254

+DB      69,15,56,205,200

+        pshufd  xmm0,xmm1,0x0e

+        paddd   xmm6,xmm3

+        movdqa  xmm3,xmm9

+DB      102,65,15,58,15,216,4

+DB      15,56,204,252

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        movdqa  xmm1,XMMWORD[((208-128))+rbp]

+        paddd   xmm1,xmm5

+DB      69,15,56,203,247

+DB      69,15,56,204,216

+        movdqa  xmm0,xmm1

+        movdqa  xmm2,XMMWORD[((208-128))+rbp]

+        paddd   xmm10,xmm3

+        paddd   xmm2,xmm9

+DB      15,56,205,245

+DB      69,15,56,203,236

+        movdqa  xmm0,xmm2

+        movdqa  xmm3,xmm6

+DB      102,15,58,15,221,4

+DB      69,15,56,203,254

+DB      69,15,56,205,209

+        pshufd  xmm0,xmm1,0x0e

+        paddd   xmm7,xmm3

+        movdqa  xmm3,xmm10

+DB      102,65,15,58,15,217,4

+        nop

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        movdqa  xmm1,XMMWORD[((224-128))+rbp]

+        paddd   xmm1,xmm6

+DB      69,15,56,203,247

+

+        movdqa  xmm0,xmm1

+        movdqa  xmm2,XMMWORD[((224-128))+rbp]

+        paddd   xmm11,xmm3

+        paddd   xmm2,xmm10

+DB      15,56,205,254

+        nop

+DB      69,15,56,203,236

+        movdqa  xmm0,xmm2

+        mov     ecx,1

+        pxor    xmm6,xmm6

+DB      69,15,56,203,254

+DB      69,15,56,205,218

+        pshufd  xmm0,xmm1,0x0e

+        movdqa  xmm1,XMMWORD[((240-128))+rbp]

+        paddd   xmm1,xmm7

+        movq    xmm7,QWORD[rbx]

+        nop

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        movdqa  xmm2,XMMWORD[((240-128))+rbp]

+        paddd   xmm2,xmm11

+DB      69,15,56,203,247

+

+        movdqa  xmm0,xmm1

+        cmp     ecx,DWORD[rbx]

+        cmovge  r8,rsp

+        cmp     ecx,DWORD[4+rbx]

+        cmovge  r9,rsp

+        pshufd  xmm9,xmm7,0x00

+DB      69,15,56,203,236

+        movdqa  xmm0,xmm2

+        pshufd  xmm10,xmm7,0x55

+        movdqa  xmm11,xmm7

+DB      69,15,56,203,254

+        pshufd  xmm0,xmm1,0x0e

+        pcmpgtd xmm9,xmm6

+        pcmpgtd xmm10,xmm6

+DB      69,15,56,203,229

+        pshufd  xmm0,xmm2,0x0e

+        pcmpgtd xmm11,xmm6

+        movdqa  xmm3,XMMWORD[((K256_shaext-16))]

+DB      69,15,56,203,247

+

+        pand    xmm13,xmm9

+        pand    xmm15,xmm10

+        pand    xmm12,xmm9

+        pand    xmm14,xmm10

+        paddd   xmm11,xmm7

+

+        paddd   xmm13,XMMWORD[80+rsp]

+        paddd   xmm15,XMMWORD[112+rsp]

+        paddd   xmm12,XMMWORD[64+rsp]

+        paddd   xmm14,XMMWORD[96+rsp]

+

+        movq    QWORD[rbx],xmm11

+        dec     edx

+        jnz     NEAR $L$oop_shaext

+

+        mov     edx,DWORD[280+rsp]

+

+        pshufd  xmm12,xmm12,27

+        pshufd  xmm13,xmm13,27

+        pshufd  xmm14,xmm14,27

+        pshufd  xmm15,xmm15,27

+

+        movdqa  xmm5,xmm12

+        movdqa  xmm6,xmm13

+        punpckldq       xmm12,xmm14

+        punpckhdq       xmm5,xmm14

+        punpckldq       xmm13,xmm15

+        punpckhdq       xmm6,xmm15

+

+        movq    QWORD[(0-128)+rdi],xmm12

+        psrldq  xmm12,8

+        movq    QWORD[(128-128)+rdi],xmm5

+        psrldq  xmm5,8

+        movq    QWORD[(32-128)+rdi],xmm12

+        movq    QWORD[(160-128)+rdi],xmm5

+

+        movq    QWORD[(64-128)+rdi],xmm13

+        psrldq  xmm13,8

+        movq    QWORD[(192-128)+rdi],xmm6

+        psrldq  xmm6,8

+        movq    QWORD[(96-128)+rdi],xmm13

+        movq    QWORD[(224-128)+rdi],xmm6

+

+        lea     rdi,[8+rdi]

+        lea     rsi,[32+rsi]

+        dec     edx

+        jnz     NEAR $L$oop_grande_shaext

+

+$L$done_shaext:

+

+        movaps  xmm6,XMMWORD[((-184))+rax]

+        movaps  xmm7,XMMWORD[((-168))+rax]

+        movaps  xmm8,XMMWORD[((-152))+rax]

+        movaps  xmm9,XMMWORD[((-136))+rax]

+        movaps  xmm10,XMMWORD[((-120))+rax]

+        movaps  xmm11,XMMWORD[((-104))+rax]

+        movaps  xmm12,XMMWORD[((-88))+rax]

+        movaps  xmm13,XMMWORD[((-72))+rax]

+        movaps  xmm14,XMMWORD[((-56))+rax]

+        movaps  xmm15,XMMWORD[((-40))+rax]

+        mov     rbp,QWORD[((-16))+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+

+        lea     rsp,[rax]

+

+$L$epilogue_shaext:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_sha256_multi_block_shaext:

+ALIGN   256

+K256:

+        DD      1116352408,1116352408,1116352408,1116352408

+        DD      1116352408,1116352408,1116352408,1116352408

+        DD      1899447441,1899447441,1899447441,1899447441

+        DD      1899447441,1899447441,1899447441,1899447441

+        DD      3049323471,3049323471,3049323471,3049323471

+        DD      3049323471,3049323471,3049323471,3049323471

+        DD      3921009573,3921009573,3921009573,3921009573

+        DD      3921009573,3921009573,3921009573,3921009573

+        DD      961987163,961987163,961987163,961987163

+        DD      961987163,961987163,961987163,961987163

+        DD      1508970993,1508970993,1508970993,1508970993

+        DD      1508970993,1508970993,1508970993,1508970993

+        DD      2453635748,2453635748,2453635748,2453635748

+        DD      2453635748,2453635748,2453635748,2453635748

+        DD      2870763221,2870763221,2870763221,2870763221

+        DD      2870763221,2870763221,2870763221,2870763221

+        DD      3624381080,3624381080,3624381080,3624381080

+        DD      3624381080,3624381080,3624381080,3624381080

+        DD      310598401,310598401,310598401,310598401

+        DD      310598401,310598401,310598401,310598401

+        DD      607225278,607225278,607225278,607225278

+        DD      607225278,607225278,607225278,607225278

+        DD      1426881987,1426881987,1426881987,1426881987

+        DD      1426881987,1426881987,1426881987,1426881987

+        DD      1925078388,1925078388,1925078388,1925078388

+        DD      1925078388,1925078388,1925078388,1925078388

+        DD      2162078206,2162078206,2162078206,2162078206

+        DD      2162078206,2162078206,2162078206,2162078206

+        DD      2614888103,2614888103,2614888103,2614888103

+        DD      2614888103,2614888103,2614888103,2614888103

+        DD      3248222580,3248222580,3248222580,3248222580

+        DD      3248222580,3248222580,3248222580,3248222580

+        DD      3835390401,3835390401,3835390401,3835390401

+        DD      3835390401,3835390401,3835390401,3835390401

+        DD      4022224774,4022224774,4022224774,4022224774

+        DD      4022224774,4022224774,4022224774,4022224774

+        DD      264347078,264347078,264347078,264347078

+        DD      264347078,264347078,264347078,264347078

+        DD      604807628,604807628,604807628,604807628

+        DD      604807628,604807628,604807628,604807628

+        DD      770255983,770255983,770255983,770255983

+        DD      770255983,770255983,770255983,770255983

+        DD      1249150122,1249150122,1249150122,1249150122

+        DD      1249150122,1249150122,1249150122,1249150122

+        DD      1555081692,1555081692,1555081692,1555081692

+        DD      1555081692,1555081692,1555081692,1555081692

+        DD      1996064986,1996064986,1996064986,1996064986

+        DD      1996064986,1996064986,1996064986,1996064986

+        DD      2554220882,2554220882,2554220882,2554220882

+        DD      2554220882,2554220882,2554220882,2554220882

+        DD      2821834349,2821834349,2821834349,2821834349

+        DD      2821834349,2821834349,2821834349,2821834349

+        DD      2952996808,2952996808,2952996808,2952996808

+        DD      2952996808,2952996808,2952996808,2952996808

+        DD      3210313671,3210313671,3210313671,3210313671

+        DD      3210313671,3210313671,3210313671,3210313671

+        DD      3336571891,3336571891,3336571891,3336571891

+        DD      3336571891,3336571891,3336571891,3336571891

+        DD      3584528711,3584528711,3584528711,3584528711

+        DD      3584528711,3584528711,3584528711,3584528711

+        DD      113926993,113926993,113926993,113926993

+        DD      113926993,113926993,113926993,113926993

+        DD      338241895,338241895,338241895,338241895

+        DD      338241895,338241895,338241895,338241895

+        DD      666307205,666307205,666307205,666307205

+        DD      666307205,666307205,666307205,666307205

+        DD      773529912,773529912,773529912,773529912

+        DD      773529912,773529912,773529912,773529912

+        DD      1294757372,1294757372,1294757372,1294757372

+        DD      1294757372,1294757372,1294757372,1294757372

+        DD      1396182291,1396182291,1396182291,1396182291

+        DD      1396182291,1396182291,1396182291,1396182291

+        DD      1695183700,1695183700,1695183700,1695183700

+        DD      1695183700,1695183700,1695183700,1695183700

+        DD      1986661051,1986661051,1986661051,1986661051

+        DD      1986661051,1986661051,1986661051,1986661051

+        DD      2177026350,2177026350,2177026350,2177026350

+        DD      2177026350,2177026350,2177026350,2177026350

+        DD      2456956037,2456956037,2456956037,2456956037

+        DD      2456956037,2456956037,2456956037,2456956037

+        DD      2730485921,2730485921,2730485921,2730485921

+        DD      2730485921,2730485921,2730485921,2730485921

+        DD      2820302411,2820302411,2820302411,2820302411

+        DD      2820302411,2820302411,2820302411,2820302411

+        DD      3259730800,3259730800,3259730800,3259730800

+        DD      3259730800,3259730800,3259730800,3259730800

+        DD      3345764771,3345764771,3345764771,3345764771

+        DD      3345764771,3345764771,3345764771,3345764771

+        DD      3516065817,3516065817,3516065817,3516065817

+        DD      3516065817,3516065817,3516065817,3516065817

+        DD      3600352804,3600352804,3600352804,3600352804

+        DD      3600352804,3600352804,3600352804,3600352804

+        DD      4094571909,4094571909,4094571909,4094571909

+        DD      4094571909,4094571909,4094571909,4094571909

+        DD      275423344,275423344,275423344,275423344

+        DD      275423344,275423344,275423344,275423344

+        DD      430227734,430227734,430227734,430227734

+        DD      430227734,430227734,430227734,430227734

+        DD      506948616,506948616,506948616,506948616

+        DD      506948616,506948616,506948616,506948616

+        DD      659060556,659060556,659060556,659060556

+        DD      659060556,659060556,659060556,659060556

+        DD      883997877,883997877,883997877,883997877

+        DD      883997877,883997877,883997877,883997877

+        DD      958139571,958139571,958139571,958139571

+        DD      958139571,958139571,958139571,958139571

+        DD      1322822218,1322822218,1322822218,1322822218

+        DD      1322822218,1322822218,1322822218,1322822218

+        DD      1537002063,1537002063,1537002063,1537002063

+        DD      1537002063,1537002063,1537002063,1537002063

+        DD      1747873779,1747873779,1747873779,1747873779

+        DD      1747873779,1747873779,1747873779,1747873779

+        DD      1955562222,1955562222,1955562222,1955562222

+        DD      1955562222,1955562222,1955562222,1955562222

+        DD      2024104815,2024104815,2024104815,2024104815

+        DD      2024104815,2024104815,2024104815,2024104815

+        DD      2227730452,2227730452,2227730452,2227730452

+        DD      2227730452,2227730452,2227730452,2227730452

+        DD      2361852424,2361852424,2361852424,2361852424

+        DD      2361852424,2361852424,2361852424,2361852424

+        DD      2428436474,2428436474,2428436474,2428436474

+        DD      2428436474,2428436474,2428436474,2428436474

+        DD      2756734187,2756734187,2756734187,2756734187

+        DD      2756734187,2756734187,2756734187,2756734187

+        DD      3204031479,3204031479,3204031479,3204031479

+        DD      3204031479,3204031479,3204031479,3204031479

+        DD      3329325298,3329325298,3329325298,3329325298

+        DD      3329325298,3329325298,3329325298,3329325298

+$L$pbswap:

+        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f

+        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f

+K256_shaext:

+        DD      0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5

+        DD      0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5

+        DD      0xd807aa98,0x12835b01,0x243185be,0x550c7dc3

+        DD      0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174

+        DD      0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc

+        DD      0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da

+        DD      0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7

+        DD      0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967

+        DD      0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13

+        DD      0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85

+        DD      0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3

+        DD      0xd192e819,0xd6990624,0xf40e3585,0x106aa070

+        DD      0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5

+        DD      0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3

+        DD      0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208

+        DD      0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2

+DB      83,72,65,50,53,54,32,109,117,108,116,105,45,98,108,111

+DB      99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114

+DB      32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71

+DB      65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112

+DB      101,110,115,115,108,46,111,114,103,62,0

+EXTERN  __imp_RtlVirtualUnwind

+

+ALIGN   16

+se_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        mov     rsi,QWORD[8+r9]

+        mov     r11,QWORD[56+r9]

+

+        mov     r10d,DWORD[r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jb      NEAR $L$in_prologue

+

+        mov     rax,QWORD[152+r8]

+

+        mov     r10d,DWORD[4+r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jae     NEAR $L$in_prologue

+

+        mov     rax,QWORD[272+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+        mov     rbp,QWORD[((-16))+rax]

+        mov     QWORD[144+r8],rbx

+        mov     QWORD[160+r8],rbp

+

+        lea     rsi,[((-24-160))+rax]

+        lea     rdi,[512+r8]

+        mov     ecx,20

+        DD      0xa548f3fc

+

+$L$in_prologue:

+        mov     rdi,QWORD[8+rax]

+        mov     rsi,QWORD[16+rax]

+        mov     QWORD[152+r8],rax

+        mov     QWORD[168+r8],rsi

+        mov     QWORD[176+r8],rdi

+

+        mov     rdi,QWORD[40+r9]

+        mov     rsi,r8

+        mov     ecx,154

+        DD      0xa548f3fc

+

+        mov     rsi,r9

+        xor     rcx,rcx

+        mov     rdx,QWORD[8+rsi]

+        mov     r8,QWORD[rsi]

+        mov     r9,QWORD[16+rsi]

+        mov     r10,QWORD[40+rsi]

+        lea     r11,[56+rsi]

+        lea     r12,[24+rsi]

+        mov     QWORD[32+rsp],r10

+        mov     QWORD[40+rsp],r11

+        mov     QWORD[48+rsp],r12

+        mov     QWORD[56+rsp],rcx

+        call    QWORD[__imp_RtlVirtualUnwind]

+

+        mov     eax,1

+        add     rsp,64

+        popfq

+        pop     r15

+        pop     r14

+        pop     r13

+        pop     r12

+        pop     rbp

+        pop     rbx

+        pop     rdi

+        pop     rsi

+        DB      0F3h,0C3h               ;repret

+

+section .pdata rdata align=4

+ALIGN   4

+        DD      $L$SEH_begin_sha256_multi_block wrt ..imagebase

+        DD      $L$SEH_end_sha256_multi_block wrt ..imagebase

+        DD      $L$SEH_info_sha256_multi_block wrt ..imagebase

+        DD      $L$SEH_begin_sha256_multi_block_shaext wrt ..imagebase

+        DD      $L$SEH_end_sha256_multi_block_shaext wrt ..imagebase

+        DD      $L$SEH_info_sha256_multi_block_shaext wrt ..imagebase

+section .xdata rdata align=8

+ALIGN   8

+$L$SEH_info_sha256_multi_block:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$body wrt ..imagebase,$L$epilogue wrt ..imagebase

+$L$SEH_info_sha256_multi_block_shaext:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$body_shaext wrt ..imagebase,$L$epilogue_shaext
wrt ..imagebase

diff --git a/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-
x86_64.nasm
b/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-x86_64.nasm
new file mode 100644
index 0000000000..70e49862a3
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-
x86_64.nasm
@@ -0,0 +1,3313 @@
+; WARNING: do not edit!

+; Generated from openssl/crypto/sha/asm/sha512-x86_64.pl

+;

+; Copyright 2005-2020 The OpenSSL Project Authors. All Rights
Reserved.

+;

+; Licensed under the OpenSSL license (the "License").  You may not use

+; this file except in compliance with the License.  You can obtain a
copy

+; in the file LICENSE in the source distribution or at

+; https://www.openssl.org/source/license.html

+

+default rel

+%define XMMWORD

+%define YMMWORD

+%define ZMMWORD

+section .text code align=64

+

+

+EXTERN  OPENSSL_ia32cap_P

+global  sha256_block_data_order

+

+ALIGN   16

+sha256_block_data_order:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_sha256_block_data_order:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+

+        lea     r11,[OPENSSL_ia32cap_P]

+        mov     r9d,DWORD[r11]

+        mov     r10d,DWORD[4+r11]

+        mov     r11d,DWORD[8+r11]

+        test    r11d,536870912

+        jnz     NEAR _shaext_shortcut

+        test    r10d,512

+        jnz     NEAR $L$ssse3_shortcut

+        mov     rax,rsp

+

+        push    rbx

+

+        push    rbp

+

+        push    r12

+

+        push    r13

+

+        push    r14

+

+        push    r15

+

+        shl     rdx,4

+        sub     rsp,16*4+4*8

+        lea     rdx,[rdx*4+rsi]

+        and     rsp,-64

+        mov     QWORD[((64+0))+rsp],rdi

+        mov     QWORD[((64+8))+rsp],rsi

+        mov     QWORD[((64+16))+rsp],rdx

+        mov     QWORD[88+rsp],rax

+

+$L$prologue:

+

+        mov     eax,DWORD[rdi]

+        mov     ebx,DWORD[4+rdi]

+        mov     ecx,DWORD[8+rdi]

+        mov     edx,DWORD[12+rdi]

+        mov     r8d,DWORD[16+rdi]

+        mov     r9d,DWORD[20+rdi]

+        mov     r10d,DWORD[24+rdi]

+        mov     r11d,DWORD[28+rdi]

+        jmp     NEAR $L$loop

+

+ALIGN   16

+$L$loop:

+        mov     edi,ebx

+        lea     rbp,[K256]

+        xor     edi,ecx

+        mov     r12d,DWORD[rsi]

+        mov     r13d,r8d

+        mov     r14d,eax

+        bswap   r12d

+        ror     r13d,14

+        mov     r15d,r9d

+

+        xor     r13d,r8d

+        ror     r14d,9

+        xor     r15d,r10d

+

+        mov     DWORD[rsp],r12d

+        xor     r14d,eax

+        and     r15d,r8d

+

+        ror     r13d,5

+        add     r12d,r11d

+        xor     r15d,r10d

+

+        ror     r14d,11

+        xor     r13d,r8d

+        add     r12d,r15d

+

+        mov     r15d,eax

+        add     r12d,DWORD[rbp]

+        xor     r14d,eax

+

+        xor     r15d,ebx

+        ror     r13d,6

+        mov     r11d,ebx

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r11d,edi

+        add     edx,r12d

+        add     r11d,r12d

+

+        lea     rbp,[4+rbp]

+        add     r11d,r14d

+        mov     r12d,DWORD[4+rsi]

+        mov     r13d,edx

+        mov     r14d,r11d

+        bswap   r12d

+        ror     r13d,14

+        mov     edi,r8d

+

+        xor     r13d,edx

+        ror     r14d,9

+        xor     edi,r9d

+

+        mov     DWORD[4+rsp],r12d

+        xor     r14d,r11d

+        and     edi,edx

+

+        ror     r13d,5

+        add     r12d,r10d

+        xor     edi,r9d

+

+        ror     r14d,11

+        xor     r13d,edx

+        add     r12d,edi

+

+        mov     edi,r11d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r11d

+

+        xor     edi,eax

+        ror     r13d,6

+        mov     r10d,eax

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r10d,r15d

+        add     ecx,r12d

+        add     r10d,r12d

+

+        lea     rbp,[4+rbp]

+        add     r10d,r14d

+        mov     r12d,DWORD[8+rsi]

+        mov     r13d,ecx

+        mov     r14d,r10d

+        bswap   r12d

+        ror     r13d,14

+        mov     r15d,edx

+

+        xor     r13d,ecx

+        ror     r14d,9

+        xor     r15d,r8d

+

+        mov     DWORD[8+rsp],r12d

+        xor     r14d,r10d

+        and     r15d,ecx

+

+        ror     r13d,5

+        add     r12d,r9d

+        xor     r15d,r8d

+

+        ror     r14d,11

+        xor     r13d,ecx

+        add     r12d,r15d

+

+        mov     r15d,r10d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r10d

+

+        xor     r15d,r11d

+        ror     r13d,6

+        mov     r9d,r11d

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r9d,edi

+        add     ebx,r12d

+        add     r9d,r12d

+

+        lea     rbp,[4+rbp]

+        add     r9d,r14d

+        mov     r12d,DWORD[12+rsi]

+        mov     r13d,ebx

+        mov     r14d,r9d

+        bswap   r12d

+        ror     r13d,14

+        mov     edi,ecx

+

+        xor     r13d,ebx

+        ror     r14d,9

+        xor     edi,edx

+

+        mov     DWORD[12+rsp],r12d

+        xor     r14d,r9d

+        and     edi,ebx

+

+        ror     r13d,5

+        add     r12d,r8d

+        xor     edi,edx

+

+        ror     r14d,11

+        xor     r13d,ebx

+        add     r12d,edi

+

+        mov     edi,r9d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r9d

+

+        xor     edi,r10d

+        ror     r13d,6

+        mov     r8d,r10d

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r8d,r15d

+        add     eax,r12d

+        add     r8d,r12d

+

+        lea     rbp,[20+rbp]

+        add     r8d,r14d

+        mov     r12d,DWORD[16+rsi]

+        mov     r13d,eax

+        mov     r14d,r8d

+        bswap   r12d

+        ror     r13d,14

+        mov     r15d,ebx

+

+        xor     r13d,eax

+        ror     r14d,9

+        xor     r15d,ecx

+

+        mov     DWORD[16+rsp],r12d

+        xor     r14d,r8d

+        and     r15d,eax

+

+        ror     r13d,5

+        add     r12d,edx

+        xor     r15d,ecx

+

+        ror     r14d,11

+        xor     r13d,eax

+        add     r12d,r15d

+

+        mov     r15d,r8d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r8d

+

+        xor     r15d,r9d

+        ror     r13d,6

+        mov     edx,r9d

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     edx,edi

+        add     r11d,r12d

+        add     edx,r12d

+

+        lea     rbp,[4+rbp]

+        add     edx,r14d

+        mov     r12d,DWORD[20+rsi]

+        mov     r13d,r11d

+        mov     r14d,edx

+        bswap   r12d

+        ror     r13d,14

+        mov     edi,eax

+

+        xor     r13d,r11d

+        ror     r14d,9

+        xor     edi,ebx

+

+        mov     DWORD[20+rsp],r12d

+        xor     r14d,edx

+        and     edi,r11d

+

+        ror     r13d,5

+        add     r12d,ecx

+        xor     edi,ebx

+

+        ror     r14d,11

+        xor     r13d,r11d

+        add     r12d,edi

+

+        mov     edi,edx

+        add     r12d,DWORD[rbp]

+        xor     r14d,edx

+

+        xor     edi,r8d

+        ror     r13d,6

+        mov     ecx,r8d

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     ecx,r15d

+        add     r10d,r12d

+        add     ecx,r12d

+

+        lea     rbp,[4+rbp]

+        add     ecx,r14d

+        mov     r12d,DWORD[24+rsi]

+        mov     r13d,r10d

+        mov     r14d,ecx

+        bswap   r12d

+        ror     r13d,14

+        mov     r15d,r11d

+

+        xor     r13d,r10d

+        ror     r14d,9

+        xor     r15d,eax

+

+        mov     DWORD[24+rsp],r12d

+        xor     r14d,ecx

+        and     r15d,r10d

+

+        ror     r13d,5

+        add     r12d,ebx

+        xor     r15d,eax

+

+        ror     r14d,11

+        xor     r13d,r10d

+        add     r12d,r15d

+

+        mov     r15d,ecx

+        add     r12d,DWORD[rbp]

+        xor     r14d,ecx

+

+        xor     r15d,edx

+        ror     r13d,6

+        mov     ebx,edx

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     ebx,edi

+        add     r9d,r12d

+        add     ebx,r12d

+

+        lea     rbp,[4+rbp]

+        add     ebx,r14d

+        mov     r12d,DWORD[28+rsi]

+        mov     r13d,r9d

+        mov     r14d,ebx

+        bswap   r12d

+        ror     r13d,14

+        mov     edi,r10d

+

+        xor     r13d,r9d

+        ror     r14d,9

+        xor     edi,r11d

+

+        mov     DWORD[28+rsp],r12d

+        xor     r14d,ebx

+        and     edi,r9d

+

+        ror     r13d,5

+        add     r12d,eax

+        xor     edi,r11d

+

+        ror     r14d,11

+        xor     r13d,r9d

+        add     r12d,edi

+

+        mov     edi,ebx

+        add     r12d,DWORD[rbp]

+        xor     r14d,ebx

+

+        xor     edi,ecx

+        ror     r13d,6

+        mov     eax,ecx

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     eax,r15d

+        add     r8d,r12d

+        add     eax,r12d

+

+        lea     rbp,[20+rbp]

+        add     eax,r14d

+        mov     r12d,DWORD[32+rsi]

+        mov     r13d,r8d

+        mov     r14d,eax

+        bswap   r12d

+        ror     r13d,14

+        mov     r15d,r9d

+

+        xor     r13d,r8d

+        ror     r14d,9

+        xor     r15d,r10d

+

+        mov     DWORD[32+rsp],r12d

+        xor     r14d,eax

+        and     r15d,r8d

+

+        ror     r13d,5

+        add     r12d,r11d

+        xor     r15d,r10d

+

+        ror     r14d,11

+        xor     r13d,r8d

+        add     r12d,r15d

+

+        mov     r15d,eax

+        add     r12d,DWORD[rbp]

+        xor     r14d,eax

+

+        xor     r15d,ebx

+        ror     r13d,6

+        mov     r11d,ebx

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r11d,edi

+        add     edx,r12d

+        add     r11d,r12d

+

+        lea     rbp,[4+rbp]

+        add     r11d,r14d

+        mov     r12d,DWORD[36+rsi]

+        mov     r13d,edx

+        mov     r14d,r11d

+        bswap   r12d

+        ror     r13d,14

+        mov     edi,r8d

+

+        xor     r13d,edx

+        ror     r14d,9

+        xor     edi,r9d

+

+        mov     DWORD[36+rsp],r12d

+        xor     r14d,r11d

+        and     edi,edx

+

+        ror     r13d,5

+        add     r12d,r10d

+        xor     edi,r9d

+

+        ror     r14d,11

+        xor     r13d,edx

+        add     r12d,edi

+

+        mov     edi,r11d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r11d

+

+        xor     edi,eax

+        ror     r13d,6

+        mov     r10d,eax

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r10d,r15d

+        add     ecx,r12d

+        add     r10d,r12d

+

+        lea     rbp,[4+rbp]

+        add     r10d,r14d

+        mov     r12d,DWORD[40+rsi]

+        mov     r13d,ecx

+        mov     r14d,r10d

+        bswap   r12d

+        ror     r13d,14

+        mov     r15d,edx

+

+        xor     r13d,ecx

+        ror     r14d,9

+        xor     r15d,r8d

+

+        mov     DWORD[40+rsp],r12d

+        xor     r14d,r10d

+        and     r15d,ecx

+

+        ror     r13d,5

+        add     r12d,r9d

+        xor     r15d,r8d

+

+        ror     r14d,11

+        xor     r13d,ecx

+        add     r12d,r15d

+

+        mov     r15d,r10d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r10d

+

+        xor     r15d,r11d

+        ror     r13d,6

+        mov     r9d,r11d

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r9d,edi

+        add     ebx,r12d

+        add     r9d,r12d

+

+        lea     rbp,[4+rbp]

+        add     r9d,r14d

+        mov     r12d,DWORD[44+rsi]

+        mov     r13d,ebx

+        mov     r14d,r9d

+        bswap   r12d

+        ror     r13d,14

+        mov     edi,ecx

+

+        xor     r13d,ebx

+        ror     r14d,9

+        xor     edi,edx

+

+        mov     DWORD[44+rsp],r12d

+        xor     r14d,r9d

+        and     edi,ebx

+

+        ror     r13d,5

+        add     r12d,r8d

+        xor     edi,edx

+

+        ror     r14d,11

+        xor     r13d,ebx

+        add     r12d,edi

+

+        mov     edi,r9d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r9d

+

+        xor     edi,r10d

+        ror     r13d,6

+        mov     r8d,r10d

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r8d,r15d

+        add     eax,r12d

+        add     r8d,r12d

+

+        lea     rbp,[20+rbp]

+        add     r8d,r14d

+        mov     r12d,DWORD[48+rsi]

+        mov     r13d,eax

+        mov     r14d,r8d

+        bswap   r12d

+        ror     r13d,14

+        mov     r15d,ebx

+

+        xor     r13d,eax

+        ror     r14d,9

+        xor     r15d,ecx

+

+        mov     DWORD[48+rsp],r12d

+        xor     r14d,r8d

+        and     r15d,eax

+

+        ror     r13d,5

+        add     r12d,edx

+        xor     r15d,ecx

+

+        ror     r14d,11

+        xor     r13d,eax

+        add     r12d,r15d

+

+        mov     r15d,r8d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r8d

+

+        xor     r15d,r9d

+        ror     r13d,6

+        mov     edx,r9d

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     edx,edi

+        add     r11d,r12d

+        add     edx,r12d

+

+        lea     rbp,[4+rbp]

+        add     edx,r14d

+        mov     r12d,DWORD[52+rsi]

+        mov     r13d,r11d

+        mov     r14d,edx

+        bswap   r12d

+        ror     r13d,14

+        mov     edi,eax

+

+        xor     r13d,r11d

+        ror     r14d,9

+        xor     edi,ebx

+

+        mov     DWORD[52+rsp],r12d

+        xor     r14d,edx

+        and     edi,r11d

+

+        ror     r13d,5

+        add     r12d,ecx

+        xor     edi,ebx

+

+        ror     r14d,11

+        xor     r13d,r11d

+        add     r12d,edi

+

+        mov     edi,edx

+        add     r12d,DWORD[rbp]

+        xor     r14d,edx

+

+        xor     edi,r8d

+        ror     r13d,6

+        mov     ecx,r8d

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     ecx,r15d

+        add     r10d,r12d

+        add     ecx,r12d

+

+        lea     rbp,[4+rbp]

+        add     ecx,r14d

+        mov     r12d,DWORD[56+rsi]

+        mov     r13d,r10d

+        mov     r14d,ecx

+        bswap   r12d

+        ror     r13d,14

+        mov     r15d,r11d

+

+        xor     r13d,r10d

+        ror     r14d,9

+        xor     r15d,eax

+

+        mov     DWORD[56+rsp],r12d

+        xor     r14d,ecx

+        and     r15d,r10d

+

+        ror     r13d,5

+        add     r12d,ebx

+        xor     r15d,eax

+

+        ror     r14d,11

+        xor     r13d,r10d

+        add     r12d,r15d

+

+        mov     r15d,ecx

+        add     r12d,DWORD[rbp]

+        xor     r14d,ecx

+

+        xor     r15d,edx

+        ror     r13d,6

+        mov     ebx,edx

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     ebx,edi

+        add     r9d,r12d

+        add     ebx,r12d

+

+        lea     rbp,[4+rbp]

+        add     ebx,r14d

+        mov     r12d,DWORD[60+rsi]

+        mov     r13d,r9d

+        mov     r14d,ebx

+        bswap   r12d

+        ror     r13d,14

+        mov     edi,r10d

+

+        xor     r13d,r9d

+        ror     r14d,9

+        xor     edi,r11d

+

+        mov     DWORD[60+rsp],r12d

+        xor     r14d,ebx

+        and     edi,r9d

+

+        ror     r13d,5

+        add     r12d,eax

+        xor     edi,r11d

+

+        ror     r14d,11

+        xor     r13d,r9d

+        add     r12d,edi

+

+        mov     edi,ebx

+        add     r12d,DWORD[rbp]

+        xor     r14d,ebx

+

+        xor     edi,ecx

+        ror     r13d,6

+        mov     eax,ecx

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     eax,r15d

+        add     r8d,r12d

+        add     eax,r12d

+

+        lea     rbp,[20+rbp]

+        jmp     NEAR $L$rounds_16_xx

+ALIGN   16

+$L$rounds_16_xx:

+        mov     r13d,DWORD[4+rsp]

+        mov     r15d,DWORD[56+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     eax,r14d

+        mov     r14d,r15d

+        ror     r15d,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     r15d,r14d

+        shr     r14d,10

+

+        ror     r15d,17

+        xor     r12d,r13d

+        xor     r15d,r14d

+        add     r12d,DWORD[36+rsp]

+

+        add     r12d,DWORD[rsp]

+        mov     r13d,r8d

+        add     r12d,r15d

+        mov     r14d,eax

+        ror     r13d,14

+        mov     r15d,r9d

+

+        xor     r13d,r8d

+        ror     r14d,9

+        xor     r15d,r10d

+

+        mov     DWORD[rsp],r12d

+        xor     r14d,eax

+        and     r15d,r8d

+

+        ror     r13d,5

+        add     r12d,r11d

+        xor     r15d,r10d

+

+        ror     r14d,11

+        xor     r13d,r8d

+        add     r12d,r15d

+

+        mov     r15d,eax

+        add     r12d,DWORD[rbp]

+        xor     r14d,eax

+

+        xor     r15d,ebx

+        ror     r13d,6

+        mov     r11d,ebx

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r11d,edi

+        add     edx,r12d

+        add     r11d,r12d

+

+        lea     rbp,[4+rbp]

+        mov     r13d,DWORD[8+rsp]

+        mov     edi,DWORD[60+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     r11d,r14d

+        mov     r14d,edi

+        ror     edi,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     edi,r14d

+        shr     r14d,10

+

+        ror     edi,17

+        xor     r12d,r13d

+        xor     edi,r14d

+        add     r12d,DWORD[40+rsp]

+

+        add     r12d,DWORD[4+rsp]

+        mov     r13d,edx

+        add     r12d,edi

+        mov     r14d,r11d

+        ror     r13d,14

+        mov     edi,r8d

+

+        xor     r13d,edx

+        ror     r14d,9

+        xor     edi,r9d

+

+        mov     DWORD[4+rsp],r12d

+        xor     r14d,r11d

+        and     edi,edx

+

+        ror     r13d,5

+        add     r12d,r10d

+        xor     edi,r9d

+

+        ror     r14d,11

+        xor     r13d,edx

+        add     r12d,edi

+

+        mov     edi,r11d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r11d

+

+        xor     edi,eax

+        ror     r13d,6

+        mov     r10d,eax

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r10d,r15d

+        add     ecx,r12d

+        add     r10d,r12d

+

+        lea     rbp,[4+rbp]

+        mov     r13d,DWORD[12+rsp]

+        mov     r15d,DWORD[rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     r10d,r14d

+        mov     r14d,r15d

+        ror     r15d,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     r15d,r14d

+        shr     r14d,10

+

+        ror     r15d,17

+        xor     r12d,r13d

+        xor     r15d,r14d

+        add     r12d,DWORD[44+rsp]

+

+        add     r12d,DWORD[8+rsp]

+        mov     r13d,ecx

+        add     r12d,r15d

+        mov     r14d,r10d

+        ror     r13d,14

+        mov     r15d,edx

+

+        xor     r13d,ecx

+        ror     r14d,9

+        xor     r15d,r8d

+

+        mov     DWORD[8+rsp],r12d

+        xor     r14d,r10d

+        and     r15d,ecx

+

+        ror     r13d,5

+        add     r12d,r9d

+        xor     r15d,r8d

+

+        ror     r14d,11

+        xor     r13d,ecx

+        add     r12d,r15d

+

+        mov     r15d,r10d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r10d

+

+        xor     r15d,r11d

+        ror     r13d,6

+        mov     r9d,r11d

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r9d,edi

+        add     ebx,r12d

+        add     r9d,r12d

+

+        lea     rbp,[4+rbp]

+        mov     r13d,DWORD[16+rsp]

+        mov     edi,DWORD[4+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     r9d,r14d

+        mov     r14d,edi

+        ror     edi,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     edi,r14d

+        shr     r14d,10

+

+        ror     edi,17

+        xor     r12d,r13d

+        xor     edi,r14d

+        add     r12d,DWORD[48+rsp]

+

+        add     r12d,DWORD[12+rsp]

+        mov     r13d,ebx

+        add     r12d,edi

+        mov     r14d,r9d

+        ror     r13d,14

+        mov     edi,ecx

+

+        xor     r13d,ebx

+        ror     r14d,9

+        xor     edi,edx

+

+        mov     DWORD[12+rsp],r12d

+        xor     r14d,r9d

+        and     edi,ebx

+

+        ror     r13d,5

+        add     r12d,r8d

+        xor     edi,edx

+

+        ror     r14d,11

+        xor     r13d,ebx

+        add     r12d,edi

+

+        mov     edi,r9d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r9d

+

+        xor     edi,r10d

+        ror     r13d,6

+        mov     r8d,r10d

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r8d,r15d

+        add     eax,r12d

+        add     r8d,r12d

+

+        lea     rbp,[20+rbp]

+        mov     r13d,DWORD[20+rsp]

+        mov     r15d,DWORD[8+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     r8d,r14d

+        mov     r14d,r15d

+        ror     r15d,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     r15d,r14d

+        shr     r14d,10

+

+        ror     r15d,17

+        xor     r12d,r13d

+        xor     r15d,r14d

+        add     r12d,DWORD[52+rsp]

+

+        add     r12d,DWORD[16+rsp]

+        mov     r13d,eax

+        add     r12d,r15d

+        mov     r14d,r8d

+        ror     r13d,14

+        mov     r15d,ebx

+

+        xor     r13d,eax

+        ror     r14d,9

+        xor     r15d,ecx

+

+        mov     DWORD[16+rsp],r12d

+        xor     r14d,r8d

+        and     r15d,eax

+

+        ror     r13d,5

+        add     r12d,edx

+        xor     r15d,ecx

+

+        ror     r14d,11

+        xor     r13d,eax

+        add     r12d,r15d

+

+        mov     r15d,r8d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r8d

+

+        xor     r15d,r9d

+        ror     r13d,6

+        mov     edx,r9d

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     edx,edi

+        add     r11d,r12d

+        add     edx,r12d

+

+        lea     rbp,[4+rbp]

+        mov     r13d,DWORD[24+rsp]

+        mov     edi,DWORD[12+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     edx,r14d

+        mov     r14d,edi

+        ror     edi,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     edi,r14d

+        shr     r14d,10

+

+        ror     edi,17

+        xor     r12d,r13d

+        xor     edi,r14d

+        add     r12d,DWORD[56+rsp]

+

+        add     r12d,DWORD[20+rsp]

+        mov     r13d,r11d

+        add     r12d,edi

+        mov     r14d,edx

+        ror     r13d,14

+        mov     edi,eax

+

+        xor     r13d,r11d

+        ror     r14d,9

+        xor     edi,ebx

+

+        mov     DWORD[20+rsp],r12d

+        xor     r14d,edx

+        and     edi,r11d

+

+        ror     r13d,5

+        add     r12d,ecx

+        xor     edi,ebx

+

+        ror     r14d,11

+        xor     r13d,r11d

+        add     r12d,edi

+

+        mov     edi,edx

+        add     r12d,DWORD[rbp]

+        xor     r14d,edx

+

+        xor     edi,r8d

+        ror     r13d,6

+        mov     ecx,r8d

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     ecx,r15d

+        add     r10d,r12d

+        add     ecx,r12d

+

+        lea     rbp,[4+rbp]

+        mov     r13d,DWORD[28+rsp]

+        mov     r15d,DWORD[16+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     ecx,r14d

+        mov     r14d,r15d

+        ror     r15d,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     r15d,r14d

+        shr     r14d,10

+

+        ror     r15d,17

+        xor     r12d,r13d

+        xor     r15d,r14d

+        add     r12d,DWORD[60+rsp]

+

+        add     r12d,DWORD[24+rsp]

+        mov     r13d,r10d

+        add     r12d,r15d

+        mov     r14d,ecx

+        ror     r13d,14

+        mov     r15d,r11d

+

+        xor     r13d,r10d

+        ror     r14d,9

+        xor     r15d,eax

+

+        mov     DWORD[24+rsp],r12d

+        xor     r14d,ecx

+        and     r15d,r10d

+

+        ror     r13d,5

+        add     r12d,ebx

+        xor     r15d,eax

+

+        ror     r14d,11

+        xor     r13d,r10d

+        add     r12d,r15d

+

+        mov     r15d,ecx

+        add     r12d,DWORD[rbp]

+        xor     r14d,ecx

+

+        xor     r15d,edx

+        ror     r13d,6

+        mov     ebx,edx

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     ebx,edi

+        add     r9d,r12d

+        add     ebx,r12d

+

+        lea     rbp,[4+rbp]

+        mov     r13d,DWORD[32+rsp]

+        mov     edi,DWORD[20+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     ebx,r14d

+        mov     r14d,edi

+        ror     edi,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     edi,r14d

+        shr     r14d,10

+

+        ror     edi,17

+        xor     r12d,r13d

+        xor     edi,r14d

+        add     r12d,DWORD[rsp]

+

+        add     r12d,DWORD[28+rsp]

+        mov     r13d,r9d

+        add     r12d,edi

+        mov     r14d,ebx

+        ror     r13d,14

+        mov     edi,r10d

+

+        xor     r13d,r9d

+        ror     r14d,9

+        xor     edi,r11d

+

+        mov     DWORD[28+rsp],r12d

+        xor     r14d,ebx

+        and     edi,r9d

+

+        ror     r13d,5

+        add     r12d,eax

+        xor     edi,r11d

+

+        ror     r14d,11

+        xor     r13d,r9d

+        add     r12d,edi

+

+        mov     edi,ebx

+        add     r12d,DWORD[rbp]

+        xor     r14d,ebx

+

+        xor     edi,ecx

+        ror     r13d,6

+        mov     eax,ecx

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     eax,r15d

+        add     r8d,r12d

+        add     eax,r12d

+

+        lea     rbp,[20+rbp]

+        mov     r13d,DWORD[36+rsp]

+        mov     r15d,DWORD[24+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     eax,r14d

+        mov     r14d,r15d

+        ror     r15d,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     r15d,r14d

+        shr     r14d,10

+

+        ror     r15d,17

+        xor     r12d,r13d

+        xor     r15d,r14d

+        add     r12d,DWORD[4+rsp]

+

+        add     r12d,DWORD[32+rsp]

+        mov     r13d,r8d

+        add     r12d,r15d

+        mov     r14d,eax

+        ror     r13d,14

+        mov     r15d,r9d

+

+        xor     r13d,r8d

+        ror     r14d,9

+        xor     r15d,r10d

+

+        mov     DWORD[32+rsp],r12d

+        xor     r14d,eax

+        and     r15d,r8d

+

+        ror     r13d,5

+        add     r12d,r11d

+        xor     r15d,r10d

+

+        ror     r14d,11

+        xor     r13d,r8d

+        add     r12d,r15d

+

+        mov     r15d,eax

+        add     r12d,DWORD[rbp]

+        xor     r14d,eax

+

+        xor     r15d,ebx

+        ror     r13d,6

+        mov     r11d,ebx

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r11d,edi

+        add     edx,r12d

+        add     r11d,r12d

+

+        lea     rbp,[4+rbp]

+        mov     r13d,DWORD[40+rsp]

+        mov     edi,DWORD[28+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     r11d,r14d

+        mov     r14d,edi

+        ror     edi,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     edi,r14d

+        shr     r14d,10

+

+        ror     edi,17

+        xor     r12d,r13d

+        xor     edi,r14d

+        add     r12d,DWORD[8+rsp]

+

+        add     r12d,DWORD[36+rsp]

+        mov     r13d,edx

+        add     r12d,edi

+        mov     r14d,r11d

+        ror     r13d,14

+        mov     edi,r8d

+

+        xor     r13d,edx

+        ror     r14d,9

+        xor     edi,r9d

+

+        mov     DWORD[36+rsp],r12d

+        xor     r14d,r11d

+        and     edi,edx

+

+        ror     r13d,5

+        add     r12d,r10d

+        xor     edi,r9d

+

+        ror     r14d,11

+        xor     r13d,edx

+        add     r12d,edi

+

+        mov     edi,r11d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r11d

+

+        xor     edi,eax

+        ror     r13d,6

+        mov     r10d,eax

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r10d,r15d

+        add     ecx,r12d

+        add     r10d,r12d

+

+        lea     rbp,[4+rbp]

+        mov     r13d,DWORD[44+rsp]

+        mov     r15d,DWORD[32+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     r10d,r14d

+        mov     r14d,r15d

+        ror     r15d,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     r15d,r14d

+        shr     r14d,10

+

+        ror     r15d,17

+        xor     r12d,r13d

+        xor     r15d,r14d

+        add     r12d,DWORD[12+rsp]

+

+        add     r12d,DWORD[40+rsp]

+        mov     r13d,ecx

+        add     r12d,r15d

+        mov     r14d,r10d

+        ror     r13d,14

+        mov     r15d,edx

+

+        xor     r13d,ecx

+        ror     r14d,9

+        xor     r15d,r8d

+

+        mov     DWORD[40+rsp],r12d

+        xor     r14d,r10d

+        and     r15d,ecx

+

+        ror     r13d,5

+        add     r12d,r9d

+        xor     r15d,r8d

+

+        ror     r14d,11

+        xor     r13d,ecx

+        add     r12d,r15d

+

+        mov     r15d,r10d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r10d

+

+        xor     r15d,r11d

+        ror     r13d,6

+        mov     r9d,r11d

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r9d,edi

+        add     ebx,r12d

+        add     r9d,r12d

+

+        lea     rbp,[4+rbp]

+        mov     r13d,DWORD[48+rsp]

+        mov     edi,DWORD[36+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     r9d,r14d

+        mov     r14d,edi

+        ror     edi,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     edi,r14d

+        shr     r14d,10

+

+        ror     edi,17

+        xor     r12d,r13d

+        xor     edi,r14d

+        add     r12d,DWORD[16+rsp]

+

+        add     r12d,DWORD[44+rsp]

+        mov     r13d,ebx

+        add     r12d,edi

+        mov     r14d,r9d

+        ror     r13d,14

+        mov     edi,ecx

+

+        xor     r13d,ebx

+        ror     r14d,9

+        xor     edi,edx

+

+        mov     DWORD[44+rsp],r12d

+        xor     r14d,r9d

+        and     edi,ebx

+

+        ror     r13d,5

+        add     r12d,r8d

+        xor     edi,edx

+

+        ror     r14d,11

+        xor     r13d,ebx

+        add     r12d,edi

+

+        mov     edi,r9d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r9d

+

+        xor     edi,r10d

+        ror     r13d,6

+        mov     r8d,r10d

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     r8d,r15d

+        add     eax,r12d

+        add     r8d,r12d

+

+        lea     rbp,[20+rbp]

+        mov     r13d,DWORD[52+rsp]

+        mov     r15d,DWORD[40+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     r8d,r14d

+        mov     r14d,r15d

+        ror     r15d,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     r15d,r14d

+        shr     r14d,10

+

+        ror     r15d,17

+        xor     r12d,r13d

+        xor     r15d,r14d

+        add     r12d,DWORD[20+rsp]

+

+        add     r12d,DWORD[48+rsp]

+        mov     r13d,eax

+        add     r12d,r15d

+        mov     r14d,r8d

+        ror     r13d,14

+        mov     r15d,ebx

+

+        xor     r13d,eax

+        ror     r14d,9

+        xor     r15d,ecx

+

+        mov     DWORD[48+rsp],r12d

+        xor     r14d,r8d

+        and     r15d,eax

+

+        ror     r13d,5

+        add     r12d,edx

+        xor     r15d,ecx

+

+        ror     r14d,11

+        xor     r13d,eax

+        add     r12d,r15d

+

+        mov     r15d,r8d

+        add     r12d,DWORD[rbp]

+        xor     r14d,r8d

+

+        xor     r15d,r9d

+        ror     r13d,6

+        mov     edx,r9d

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     edx,edi

+        add     r11d,r12d

+        add     edx,r12d

+

+        lea     rbp,[4+rbp]

+        mov     r13d,DWORD[56+rsp]

+        mov     edi,DWORD[44+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     edx,r14d

+        mov     r14d,edi

+        ror     edi,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     edi,r14d

+        shr     r14d,10

+

+        ror     edi,17

+        xor     r12d,r13d

+        xor     edi,r14d

+        add     r12d,DWORD[24+rsp]

+

+        add     r12d,DWORD[52+rsp]

+        mov     r13d,r11d

+        add     r12d,edi

+        mov     r14d,edx

+        ror     r13d,14

+        mov     edi,eax

+

+        xor     r13d,r11d

+        ror     r14d,9

+        xor     edi,ebx

+

+        mov     DWORD[52+rsp],r12d

+        xor     r14d,edx

+        and     edi,r11d

+

+        ror     r13d,5

+        add     r12d,ecx

+        xor     edi,ebx

+

+        ror     r14d,11

+        xor     r13d,r11d

+        add     r12d,edi

+

+        mov     edi,edx

+        add     r12d,DWORD[rbp]

+        xor     r14d,edx

+

+        xor     edi,r8d

+        ror     r13d,6

+        mov     ecx,r8d

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     ecx,r15d

+        add     r10d,r12d

+        add     ecx,r12d

+

+        lea     rbp,[4+rbp]

+        mov     r13d,DWORD[60+rsp]

+        mov     r15d,DWORD[48+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     ecx,r14d

+        mov     r14d,r15d

+        ror     r15d,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     r15d,r14d

+        shr     r14d,10

+

+        ror     r15d,17

+        xor     r12d,r13d

+        xor     r15d,r14d

+        add     r12d,DWORD[28+rsp]

+

+        add     r12d,DWORD[56+rsp]

+        mov     r13d,r10d

+        add     r12d,r15d

+        mov     r14d,ecx

+        ror     r13d,14

+        mov     r15d,r11d

+

+        xor     r13d,r10d

+        ror     r14d,9

+        xor     r15d,eax

+

+        mov     DWORD[56+rsp],r12d

+        xor     r14d,ecx

+        and     r15d,r10d

+

+        ror     r13d,5

+        add     r12d,ebx

+        xor     r15d,eax

+

+        ror     r14d,11

+        xor     r13d,r10d

+        add     r12d,r15d

+

+        mov     r15d,ecx

+        add     r12d,DWORD[rbp]

+        xor     r14d,ecx

+

+        xor     r15d,edx

+        ror     r13d,6

+        mov     ebx,edx

+

+        and     edi,r15d

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     ebx,edi

+        add     r9d,r12d

+        add     ebx,r12d

+

+        lea     rbp,[4+rbp]

+        mov     r13d,DWORD[rsp]

+        mov     edi,DWORD[52+rsp]

+

+        mov     r12d,r13d

+        ror     r13d,11

+        add     ebx,r14d

+        mov     r14d,edi

+        ror     edi,2

+

+        xor     r13d,r12d

+        shr     r12d,3

+        ror     r13d,7

+        xor     edi,r14d

+        shr     r14d,10

+

+        ror     edi,17

+        xor     r12d,r13d

+        xor     edi,r14d

+        add     r12d,DWORD[32+rsp]

+

+        add     r12d,DWORD[60+rsp]

+        mov     r13d,r9d

+        add     r12d,edi

+        mov     r14d,ebx

+        ror     r13d,14

+        mov     edi,r10d

+

+        xor     r13d,r9d

+        ror     r14d,9

+        xor     edi,r11d

+

+        mov     DWORD[60+rsp],r12d

+        xor     r14d,ebx

+        and     edi,r9d

+

+        ror     r13d,5

+        add     r12d,eax

+        xor     edi,r11d

+

+        ror     r14d,11

+        xor     r13d,r9d

+        add     r12d,edi

+

+        mov     edi,ebx

+        add     r12d,DWORD[rbp]

+        xor     r14d,ebx

+

+        xor     edi,ecx

+        ror     r13d,6

+        mov     eax,ecx

+

+        and     r15d,edi

+        ror     r14d,2

+        add     r12d,r13d

+

+        xor     eax,r15d

+        add     r8d,r12d

+        add     eax,r12d

+

+        lea     rbp,[20+rbp]

+        cmp     BYTE[3+rbp],0

+        jnz     NEAR $L$rounds_16_xx

+

+        mov     rdi,QWORD[((64+0))+rsp]

+        add     eax,r14d

+        lea     rsi,[64+rsi]

+

+        add     eax,DWORD[rdi]

+        add     ebx,DWORD[4+rdi]

+        add     ecx,DWORD[8+rdi]

+        add     edx,DWORD[12+rdi]

+        add     r8d,DWORD[16+rdi]

+        add     r9d,DWORD[20+rdi]

+        add     r10d,DWORD[24+rdi]

+        add     r11d,DWORD[28+rdi]

+

+        cmp     rsi,QWORD[((64+16))+rsp]

+

+        mov     DWORD[rdi],eax

+        mov     DWORD[4+rdi],ebx

+        mov     DWORD[8+rdi],ecx

+        mov     DWORD[12+rdi],edx

+        mov     DWORD[16+rdi],r8d

+        mov     DWORD[20+rdi],r9d

+        mov     DWORD[24+rdi],r10d

+        mov     DWORD[28+rdi],r11d

+        jb      NEAR $L$loop

+

+        mov     rsi,QWORD[88+rsp]

+

+        mov     r15,QWORD[((-48))+rsi]

+

+        mov     r14,QWORD[((-40))+rsi]

+

+        mov     r13,QWORD[((-32))+rsi]

+

+        mov     r12,QWORD[((-24))+rsi]

+

+        mov     rbp,QWORD[((-16))+rsi]

+

+        mov     rbx,QWORD[((-8))+rsi]

+

+        lea     rsp,[rsi]

+

+$L$epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_sha256_block_data_order:

+ALIGN   64

+

+K256:

+        DD      0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5

+        DD      0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5

+        DD      0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5

+        DD      0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5

+        DD      0xd807aa98,0x12835b01,0x243185be,0x550c7dc3

+        DD      0xd807aa98,0x12835b01,0x243185be,0x550c7dc3

+        DD      0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174

+        DD      0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174

+        DD      0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc

+        DD      0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc

+        DD      0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da

+        DD      0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da

+        DD      0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7

+        DD      0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7

+        DD      0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967

+        DD      0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967

+        DD      0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13

+        DD      0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13

+        DD      0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85

+        DD      0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85

+        DD      0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3

+        DD      0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3

+        DD      0xd192e819,0xd6990624,0xf40e3585,0x106aa070

+        DD      0xd192e819,0xd6990624,0xf40e3585,0x106aa070

+        DD      0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5

+        DD      0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5

+        DD      0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3

+        DD      0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3

+        DD      0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208

+        DD      0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208

+        DD      0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2

+        DD      0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2

+

+        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f

+        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f

+        DD      0x03020100,0x0b0a0908,0xffffffff,0xffffffff

+        DD      0x03020100,0x0b0a0908,0xffffffff,0xffffffff

+        DD      0xffffffff,0xffffffff,0x03020100,0x0b0a0908

+        DD      0xffffffff,0xffffffff,0x03020100,0x0b0a0908

+DB      83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97

+DB      110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54

+DB      52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121

+DB      32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46

+DB      111,114,103,62,0

+

+ALIGN   64

+sha256_block_data_order_shaext:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_sha256_block_data_order_shaext:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+_shaext_shortcut:

+

+        lea     rsp,[((-88))+rsp]

+        movaps  XMMWORD[(-8-80)+rax],xmm6

+        movaps  XMMWORD[(-8-64)+rax],xmm7

+        movaps  XMMWORD[(-8-48)+rax],xmm8

+        movaps  XMMWORD[(-8-32)+rax],xmm9

+        movaps  XMMWORD[(-8-16)+rax],xmm10

+$L$prologue_shaext:

+        lea     rcx,[((K256+128))]

+        movdqu  xmm1,XMMWORD[rdi]

+        movdqu  xmm2,XMMWORD[16+rdi]

+        movdqa  xmm7,XMMWORD[((512-128))+rcx]

+

+        pshufd  xmm0,xmm1,0x1b

+        pshufd  xmm1,xmm1,0xb1

+        pshufd  xmm2,xmm2,0x1b

+        movdqa  xmm8,xmm7

+DB      102,15,58,15,202,8

+        punpcklqdq      xmm2,xmm0

+        jmp     NEAR $L$oop_shaext

+

+ALIGN   16

+$L$oop_shaext:

+        movdqu  xmm3,XMMWORD[rsi]

+        movdqu  xmm4,XMMWORD[16+rsi]

+        movdqu  xmm5,XMMWORD[32+rsi]

+DB      102,15,56,0,223

+        movdqu  xmm6,XMMWORD[48+rsi]

+

+        movdqa  xmm0,XMMWORD[((0-128))+rcx]

+        paddd   xmm0,xmm3

+DB      102,15,56,0,231

+        movdqa  xmm10,xmm2

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        nop

+        movdqa  xmm9,xmm1

+DB      15,56,203,202

+

+        movdqa  xmm0,XMMWORD[((32-128))+rcx]

+        paddd   xmm0,xmm4

+DB      102,15,56,0,239

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        lea     rsi,[64+rsi]

+DB      15,56,204,220

+DB      15,56,203,202

+

+        movdqa  xmm0,XMMWORD[((64-128))+rcx]

+        paddd   xmm0,xmm5

+DB      102,15,56,0,247

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        movdqa  xmm7,xmm6

+DB      102,15,58,15,253,4

+        nop

+        paddd   xmm3,xmm7

+DB      15,56,204,229

+DB      15,56,203,202

+

+        movdqa  xmm0,XMMWORD[((96-128))+rcx]

+        paddd   xmm0,xmm6

+DB      15,56,205,222

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        movdqa  xmm7,xmm3

+DB      102,15,58,15,254,4

+        nop

+        paddd   xmm4,xmm7

+DB      15,56,204,238

+DB      15,56,203,202

+        movdqa  xmm0,XMMWORD[((128-128))+rcx]

+        paddd   xmm0,xmm3

+DB      15,56,205,227

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        movdqa  xmm7,xmm4

+DB      102,15,58,15,251,4

+        nop

+        paddd   xmm5,xmm7

+DB      15,56,204,243

+DB      15,56,203,202

+        movdqa  xmm0,XMMWORD[((160-128))+rcx]

+        paddd   xmm0,xmm4

+DB      15,56,205,236

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        movdqa  xmm7,xmm5

+DB      102,15,58,15,252,4

+        nop

+        paddd   xmm6,xmm7

+DB      15,56,204,220

+DB      15,56,203,202

+        movdqa  xmm0,XMMWORD[((192-128))+rcx]

+        paddd   xmm0,xmm5

+DB      15,56,205,245

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        movdqa  xmm7,xmm6

+DB      102,15,58,15,253,4

+        nop

+        paddd   xmm3,xmm7

+DB      15,56,204,229

+DB      15,56,203,202

+        movdqa  xmm0,XMMWORD[((224-128))+rcx]

+        paddd   xmm0,xmm6

+DB      15,56,205,222

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        movdqa  xmm7,xmm3

+DB      102,15,58,15,254,4

+        nop

+        paddd   xmm4,xmm7

+DB      15,56,204,238

+DB      15,56,203,202

+        movdqa  xmm0,XMMWORD[((256-128))+rcx]

+        paddd   xmm0,xmm3

+DB      15,56,205,227

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        movdqa  xmm7,xmm4

+DB      102,15,58,15,251,4

+        nop

+        paddd   xmm5,xmm7

+DB      15,56,204,243

+DB      15,56,203,202

+        movdqa  xmm0,XMMWORD[((288-128))+rcx]

+        paddd   xmm0,xmm4

+DB      15,56,205,236

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        movdqa  xmm7,xmm5

+DB      102,15,58,15,252,4

+        nop

+        paddd   xmm6,xmm7

+DB      15,56,204,220

+DB      15,56,203,202

+        movdqa  xmm0,XMMWORD[((320-128))+rcx]

+        paddd   xmm0,xmm5

+DB      15,56,205,245

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        movdqa  xmm7,xmm6

+DB      102,15,58,15,253,4

+        nop

+        paddd   xmm3,xmm7

+DB      15,56,204,229

+DB      15,56,203,202

+        movdqa  xmm0,XMMWORD[((352-128))+rcx]

+        paddd   xmm0,xmm6

+DB      15,56,205,222

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        movdqa  xmm7,xmm3

+DB      102,15,58,15,254,4

+        nop

+        paddd   xmm4,xmm7

+DB      15,56,204,238

+DB      15,56,203,202

+        movdqa  xmm0,XMMWORD[((384-128))+rcx]

+        paddd   xmm0,xmm3

+DB      15,56,205,227

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        movdqa  xmm7,xmm4

+DB      102,15,58,15,251,4

+        nop

+        paddd   xmm5,xmm7

+DB      15,56,204,243

+DB      15,56,203,202

+        movdqa  xmm0,XMMWORD[((416-128))+rcx]

+        paddd   xmm0,xmm4

+DB      15,56,205,236

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        movdqa  xmm7,xmm5

+DB      102,15,58,15,252,4

+DB      15,56,203,202

+        paddd   xmm6,xmm7

+

+        movdqa  xmm0,XMMWORD[((448-128))+rcx]

+        paddd   xmm0,xmm5

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+DB      15,56,205,245

+        movdqa  xmm7,xmm8

+DB      15,56,203,202

+

+        movdqa  xmm0,XMMWORD[((480-128))+rcx]

+        paddd   xmm0,xmm6

+        nop

+DB      15,56,203,209

+        pshufd  xmm0,xmm0,0x0e

+        dec     rdx

+        nop

+DB      15,56,203,202

+

+        paddd   xmm2,xmm10

+        paddd   xmm1,xmm9

+        jnz     NEAR $L$oop_shaext

+

+        pshufd  xmm2,xmm2,0xb1

+        pshufd  xmm7,xmm1,0x1b

+        pshufd  xmm1,xmm1,0xb1

+        punpckhqdq      xmm1,xmm2

+DB      102,15,58,15,215,8

+

+        movdqu  XMMWORD[rdi],xmm1

+        movdqu  XMMWORD[16+rdi],xmm2

+        movaps  xmm6,XMMWORD[((-8-80))+rax]

+        movaps  xmm7,XMMWORD[((-8-64))+rax]

+        movaps  xmm8,XMMWORD[((-8-48))+rax]

+        movaps  xmm9,XMMWORD[((-8-32))+rax]

+        movaps  xmm10,XMMWORD[((-8-16))+rax]

+        mov     rsp,rax

+$L$epilogue_shaext:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_sha256_block_data_order_shaext:

+

+ALIGN   64

+sha256_block_data_order_ssse3:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_sha256_block_data_order_ssse3:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+

+$L$ssse3_shortcut:

+        mov     rax,rsp

+

+        push    rbx

+

+        push    rbp

+

+        push    r12

+

+        push    r13

+

+        push    r14

+

+        push    r15

+

+        shl     rdx,4

+        sub     rsp,160

+        lea     rdx,[rdx*4+rsi]

+        and     rsp,-64

+        mov     QWORD[((64+0))+rsp],rdi

+        mov     QWORD[((64+8))+rsp],rsi

+        mov     QWORD[((64+16))+rsp],rdx

+        mov     QWORD[88+rsp],rax

+

+        movaps  XMMWORD[(64+32)+rsp],xmm6

+        movaps  XMMWORD[(64+48)+rsp],xmm7

+        movaps  XMMWORD[(64+64)+rsp],xmm8

+        movaps  XMMWORD[(64+80)+rsp],xmm9

+$L$prologue_ssse3:

+

+        mov     eax,DWORD[rdi]

+        mov     ebx,DWORD[4+rdi]

+        mov     ecx,DWORD[8+rdi]

+        mov     edx,DWORD[12+rdi]

+        mov     r8d,DWORD[16+rdi]

+        mov     r9d,DWORD[20+rdi]

+        mov     r10d,DWORD[24+rdi]

+        mov     r11d,DWORD[28+rdi]

+

+

+        jmp     NEAR $L$loop_ssse3

+ALIGN   16

+$L$loop_ssse3:

+        movdqa  xmm7,XMMWORD[((K256+512))]

+        movdqu  xmm0,XMMWORD[rsi]

+        movdqu  xmm1,XMMWORD[16+rsi]

+        movdqu  xmm2,XMMWORD[32+rsi]

+DB      102,15,56,0,199

+        movdqu  xmm3,XMMWORD[48+rsi]

+        lea     rbp,[K256]

+DB      102,15,56,0,207

+        movdqa  xmm4,XMMWORD[rbp]

+        movdqa  xmm5,XMMWORD[32+rbp]

+DB      102,15,56,0,215

+        paddd   xmm4,xmm0

+        movdqa  xmm6,XMMWORD[64+rbp]

+DB      102,15,56,0,223

+        movdqa  xmm7,XMMWORD[96+rbp]

+        paddd   xmm5,xmm1

+        paddd   xmm6,xmm2

+        paddd   xmm7,xmm3

+        movdqa  XMMWORD[rsp],xmm4

+        mov     r14d,eax

+        movdqa  XMMWORD[16+rsp],xmm5

+        mov     edi,ebx

+        movdqa  XMMWORD[32+rsp],xmm6

+        xor     edi,ecx

+        movdqa  XMMWORD[48+rsp],xmm7

+        mov     r13d,r8d

+        jmp     NEAR $L$ssse3_00_47

+

+ALIGN   16

+$L$ssse3_00_47:

+        sub     rbp,-128

+        ror     r13d,14

+        movdqa  xmm4,xmm1

+        mov     eax,r14d

+        mov     r12d,r9d

+        movdqa  xmm7,xmm3

+        ror     r14d,9

+        xor     r13d,r8d

+        xor     r12d,r10d

+        ror     r13d,5

+        xor     r14d,eax

+DB      102,15,58,15,224,4

+        and     r12d,r8d

+        xor     r13d,r8d

+DB      102,15,58,15,250,4

+        add     r11d,DWORD[rsp]

+        mov     r15d,eax

+        xor     r12d,r10d

+        ror     r14d,11

+        movdqa  xmm5,xmm4

+        xor     r15d,ebx

+        add     r11d,r12d

+        movdqa  xmm6,xmm4

+        ror     r13d,6

+        and     edi,r15d

+        psrld   xmm4,3

+        xor     r14d,eax

+        add     r11d,r13d

+        xor     edi,ebx

+        paddd   xmm0,xmm7

+        ror     r14d,2

+        add     edx,r11d

+        psrld   xmm6,7

+        add     r11d,edi

+        mov     r13d,edx

+        pshufd  xmm7,xmm3,250

+        add     r14d,r11d

+        ror     r13d,14

+        pslld   xmm5,14

+        mov     r11d,r14d

+        mov     r12d,r8d

+        pxor    xmm4,xmm6

+        ror     r14d,9

+        xor     r13d,edx

+        xor     r12d,r9d

+        ror     r13d,5

+        psrld   xmm6,11

+        xor     r14d,r11d

+        pxor    xmm4,xmm5

+        and     r12d,edx

+        xor     r13d,edx

+        pslld   xmm5,11

+        add     r10d,DWORD[4+rsp]

+        mov     edi,r11d

+        pxor    xmm4,xmm6

+        xor     r12d,r9d

+        ror     r14d,11

+        movdqa  xmm6,xmm7

+        xor     edi,eax

+        add     r10d,r12d

+        pxor    xmm4,xmm5

+        ror     r13d,6

+        and     r15d,edi

+        xor     r14d,r11d

+        psrld   xmm7,10

+        add     r10d,r13d

+        xor     r15d,eax

+        paddd   xmm0,xmm4

+        ror     r14d,2

+        add     ecx,r10d

+        psrlq   xmm6,17

+        add     r10d,r15d

+        mov     r13d,ecx

+        add     r14d,r10d

+        pxor    xmm7,xmm6

+        ror     r13d,14

+        mov     r10d,r14d

+        mov     r12d,edx

+        ror     r14d,9

+        psrlq   xmm6,2

+        xor     r13d,ecx

+        xor     r12d,r8d

+        pxor    xmm7,xmm6

+        ror     r13d,5

+        xor     r14d,r10d

+        and     r12d,ecx

+        pshufd  xmm7,xmm7,128

+        xor     r13d,ecx

+        add     r9d,DWORD[8+rsp]

+        mov     r15d,r10d

+        psrldq  xmm7,8

+        xor     r12d,r8d

+        ror     r14d,11

+        xor     r15d,r11d

+        add     r9d,r12d

+        ror     r13d,6

+        paddd   xmm0,xmm7

+        and     edi,r15d

+        xor     r14d,r10d

+        add     r9d,r13d

+        pshufd  xmm7,xmm0,80

+        xor     edi,r11d

+        ror     r14d,2

+        add     ebx,r9d

+        movdqa  xmm6,xmm7

+        add     r9d,edi

+        mov     r13d,ebx

+        psrld   xmm7,10

+        add     r14d,r9d

+        ror     r13d,14

+        psrlq   xmm6,17

+        mov     r9d,r14d

+        mov     r12d,ecx

+        pxor    xmm7,xmm6

+        ror     r14d,9

+        xor     r13d,ebx

+        xor     r12d,edx

+        ror     r13d,5

+        xor     r14d,r9d

+        psrlq   xmm6,2

+        and     r12d,ebx

+        xor     r13d,ebx

+        add     r8d,DWORD[12+rsp]

+        pxor    xmm7,xmm6

+        mov     edi,r9d

+        xor     r12d,edx

+        ror     r14d,11

+        pshufd  xmm7,xmm7,8

+        xor     edi,r10d

+        add     r8d,r12d

+        movdqa  xmm6,XMMWORD[rbp]

+        ror     r13d,6

+        and     r15d,edi

+        pslldq  xmm7,8

+        xor     r14d,r9d

+        add     r8d,r13d

+        xor     r15d,r10d

+        paddd   xmm0,xmm7

+        ror     r14d,2

+        add     eax,r8d

+        add     r8d,r15d

+        paddd   xmm6,xmm0

+        mov     r13d,eax

+        add     r14d,r8d

+        movdqa  XMMWORD[rsp],xmm6

+        ror     r13d,14

+        movdqa  xmm4,xmm2

+        mov     r8d,r14d

+        mov     r12d,ebx

+        movdqa  xmm7,xmm0

+        ror     r14d,9

+        xor     r13d,eax

+        xor     r12d,ecx

+        ror     r13d,5

+        xor     r14d,r8d

+DB      102,15,58,15,225,4

+        and     r12d,eax

+        xor     r13d,eax

+DB      102,15,58,15,251,4

+        add     edx,DWORD[16+rsp]

+        mov     r15d,r8d

+        xor     r12d,ecx

+        ror     r14d,11

+        movdqa  xmm5,xmm4

+        xor     r15d,r9d

+        add     edx,r12d

+        movdqa  xmm6,xmm4

+        ror     r13d,6

+        and     edi,r15d

+        psrld   xmm4,3

+        xor     r14d,r8d

+        add     edx,r13d

+        xor     edi,r9d

+        paddd   xmm1,xmm7

+        ror     r14d,2

+        add     r11d,edx

+        psrld   xmm6,7

+        add     edx,edi

+        mov     r13d,r11d

+        pshufd  xmm7,xmm0,250

+        add     r14d,edx

+        ror     r13d,14

+        pslld   xmm5,14

+        mov     edx,r14d

+        mov     r12d,eax

+        pxor    xmm4,xmm6

+        ror     r14d,9

+        xor     r13d,r11d

+        xor     r12d,ebx

+        ror     r13d,5

+        psrld   xmm6,11

+        xor     r14d,edx

+        pxor    xmm4,xmm5

+        and     r12d,r11d

+        xor     r13d,r11d

+        pslld   xmm5,11

+        add     ecx,DWORD[20+rsp]

+        mov     edi,edx

+        pxor    xmm4,xmm6

+        xor     r12d,ebx

+        ror     r14d,11

+        movdqa  xmm6,xmm7

+        xor     edi,r8d

+        add     ecx,r12d

+        pxor    xmm4,xmm5

+        ror     r13d,6

+        and     r15d,edi

+        xor     r14d,edx

+        psrld   xmm7,10

+        add     ecx,r13d

+        xor     r15d,r8d

+        paddd   xmm1,xmm4

+        ror     r14d,2

+        add     r10d,ecx

+        psrlq   xmm6,17

+        add     ecx,r15d

+        mov     r13d,r10d

+        add     r14d,ecx

+        pxor    xmm7,xmm6

+        ror     r13d,14

+        mov     ecx,r14d

+        mov     r12d,r11d

+        ror     r14d,9

+        psrlq   xmm6,2

+        xor     r13d,r10d

+        xor     r12d,eax

+        pxor    xmm7,xmm6

+        ror     r13d,5

+        xor     r14d,ecx

+        and     r12d,r10d

+        pshufd  xmm7,xmm7,128

+        xor     r13d,r10d

+        add     ebx,DWORD[24+rsp]

+        mov     r15d,ecx

+        psrldq  xmm7,8

+        xor     r12d,eax

+        ror     r14d,11

+        xor     r15d,edx

+        add     ebx,r12d

+        ror     r13d,6

+        paddd   xmm1,xmm7

+        and     edi,r15d

+        xor     r14d,ecx

+        add     ebx,r13d

+        pshufd  xmm7,xmm1,80

+        xor     edi,edx

+        ror     r14d,2

+        add     r9d,ebx

+        movdqa  xmm6,xmm7

+        add     ebx,edi

+        mov     r13d,r9d

+        psrld   xmm7,10

+        add     r14d,ebx

+        ror     r13d,14

+        psrlq   xmm6,17

+        mov     ebx,r14d

+        mov     r12d,r10d

+        pxor    xmm7,xmm6

+        ror     r14d,9

+        xor     r13d,r9d

+        xor     r12d,r11d

+        ror     r13d,5

+        xor     r14d,ebx

+        psrlq   xmm6,2

+        and     r12d,r9d

+        xor     r13d,r9d

+        add     eax,DWORD[28+rsp]

+        pxor    xmm7,xmm6

+        mov     edi,ebx

+        xor     r12d,r11d

+        ror     r14d,11

+        pshufd  xmm7,xmm7,8

+        xor     edi,ecx

+        add     eax,r12d

+        movdqa  xmm6,XMMWORD[32+rbp]

+        ror     r13d,6

+        and     r15d,edi

+        pslldq  xmm7,8

+        xor     r14d,ebx

+        add     eax,r13d

+        xor     r15d,ecx

+        paddd   xmm1,xmm7

+        ror     r14d,2

+        add     r8d,eax

+        add     eax,r15d

+        paddd   xmm6,xmm1

+        mov     r13d,r8d

+        add     r14d,eax

+        movdqa  XMMWORD[16+rsp],xmm6

+        ror     r13d,14

+        movdqa  xmm4,xmm3

+        mov     eax,r14d

+        mov     r12d,r9d

+        movdqa  xmm7,xmm1

+        ror     r14d,9

+        xor     r13d,r8d

+        xor     r12d,r10d

+        ror     r13d,5

+        xor     r14d,eax

+DB      102,15,58,15,226,4

+        and     r12d,r8d

+        xor     r13d,r8d

+DB      102,15,58,15,248,4

+        add     r11d,DWORD[32+rsp]

+        mov     r15d,eax

+        xor     r12d,r10d

+        ror     r14d,11

+        movdqa  xmm5,xmm4

+        xor     r15d,ebx

+        add     r11d,r12d

+        movdqa  xmm6,xmm4

+        ror     r13d,6

+        and     edi,r15d

+        psrld   xmm4,3

+        xor     r14d,eax

+        add     r11d,r13d

+        xor     edi,ebx

+        paddd   xmm2,xmm7

+        ror     r14d,2

+        add     edx,r11d

+        psrld   xmm6,7

+        add     r11d,edi

+        mov     r13d,edx

+        pshufd  xmm7,xmm1,250

+        add     r14d,r11d

+        ror     r13d,14

+        pslld   xmm5,14

+        mov     r11d,r14d

+        mov     r12d,r8d

+        pxor    xmm4,xmm6

+        ror     r14d,9

+        xor     r13d,edx

+        xor     r12d,r9d

+        ror     r13d,5

+        psrld   xmm6,11

+        xor     r14d,r11d

+        pxor    xmm4,xmm5

+        and     r12d,edx

+        xor     r13d,edx

+        pslld   xmm5,11

+        add     r10d,DWORD[36+rsp]

+        mov     edi,r11d

+        pxor    xmm4,xmm6

+        xor     r12d,r9d

+        ror     r14d,11

+        movdqa  xmm6,xmm7

+        xor     edi,eax

+        add     r10d,r12d

+        pxor    xmm4,xmm5

+        ror     r13d,6

+        and     r15d,edi

+        xor     r14d,r11d

+        psrld   xmm7,10

+        add     r10d,r13d

+        xor     r15d,eax

+        paddd   xmm2,xmm4

+        ror     r14d,2

+        add     ecx,r10d

+        psrlq   xmm6,17

+        add     r10d,r15d

+        mov     r13d,ecx

+        add     r14d,r10d

+        pxor    xmm7,xmm6

+        ror     r13d,14

+        mov     r10d,r14d

+        mov     r12d,edx

+        ror     r14d,9

+        psrlq   xmm6,2

+        xor     r13d,ecx

+        xor     r12d,r8d

+        pxor    xmm7,xmm6

+        ror     r13d,5

+        xor     r14d,r10d

+        and     r12d,ecx

+        pshufd  xmm7,xmm7,128

+        xor     r13d,ecx

+        add     r9d,DWORD[40+rsp]

+        mov     r15d,r10d

+        psrldq  xmm7,8

+        xor     r12d,r8d

+        ror     r14d,11

+        xor     r15d,r11d

+        add     r9d,r12d

+        ror     r13d,6

+        paddd   xmm2,xmm7

+        and     edi,r15d

+        xor     r14d,r10d

+        add     r9d,r13d

+        pshufd  xmm7,xmm2,80

+        xor     edi,r11d

+        ror     r14d,2

+        add     ebx,r9d

+        movdqa  xmm6,xmm7

+        add     r9d,edi

+        mov     r13d,ebx

+        psrld   xmm7,10

+        add     r14d,r9d

+        ror     r13d,14

+        psrlq   xmm6,17

+        mov     r9d,r14d

+        mov     r12d,ecx

+        pxor    xmm7,xmm6

+        ror     r14d,9

+        xor     r13d,ebx

+        xor     r12d,edx

+        ror     r13d,5

+        xor     r14d,r9d

+        psrlq   xmm6,2

+        and     r12d,ebx

+        xor     r13d,ebx

+        add     r8d,DWORD[44+rsp]

+        pxor    xmm7,xmm6

+        mov     edi,r9d

+        xor     r12d,edx

+        ror     r14d,11

+        pshufd  xmm7,xmm7,8

+        xor     edi,r10d

+        add     r8d,r12d

+        movdqa  xmm6,XMMWORD[64+rbp]

+        ror     r13d,6

+        and     r15d,edi

+        pslldq  xmm7,8

+        xor     r14d,r9d

+        add     r8d,r13d

+        xor     r15d,r10d

+        paddd   xmm2,xmm7

+        ror     r14d,2

+        add     eax,r8d

+        add     r8d,r15d

+        paddd   xmm6,xmm2

+        mov     r13d,eax

+        add     r14d,r8d

+        movdqa  XMMWORD[32+rsp],xmm6

+        ror     r13d,14

+        movdqa  xmm4,xmm0

+        mov     r8d,r14d

+        mov     r12d,ebx

+        movdqa  xmm7,xmm2

+        ror     r14d,9

+        xor     r13d,eax

+        xor     r12d,ecx

+        ror     r13d,5

+        xor     r14d,r8d

+DB      102,15,58,15,227,4

+        and     r12d,eax

+        xor     r13d,eax

+DB      102,15,58,15,249,4

+        add     edx,DWORD[48+rsp]

+        mov     r15d,r8d

+        xor     r12d,ecx

+        ror     r14d,11

+        movdqa  xmm5,xmm4

+        xor     r15d,r9d

+        add     edx,r12d

+        movdqa  xmm6,xmm4

+        ror     r13d,6

+        and     edi,r15d

+        psrld   xmm4,3

+        xor     r14d,r8d

+        add     edx,r13d

+        xor     edi,r9d

+        paddd   xmm3,xmm7

+        ror     r14d,2

+        add     r11d,edx

+        psrld   xmm6,7

+        add     edx,edi

+        mov     r13d,r11d

+        pshufd  xmm7,xmm2,250

+        add     r14d,edx

+        ror     r13d,14

+        pslld   xmm5,14

+        mov     edx,r14d

+        mov     r12d,eax

+        pxor    xmm4,xmm6

+        ror     r14d,9

+        xor     r13d,r11d

+        xor     r12d,ebx

+        ror     r13d,5

+        psrld   xmm6,11

+        xor     r14d,edx

+        pxor    xmm4,xmm5

+        and     r12d,r11d

+        xor     r13d,r11d

+        pslld   xmm5,11

+        add     ecx,DWORD[52+rsp]

+        mov     edi,edx

+        pxor    xmm4,xmm6

+        xor     r12d,ebx

+        ror     r14d,11

+        movdqa  xmm6,xmm7

+        xor     edi,r8d

+        add     ecx,r12d

+        pxor    xmm4,xmm5

+        ror     r13d,6

+        and     r15d,edi

+        xor     r14d,edx

+        psrld   xmm7,10

+        add     ecx,r13d

+        xor     r15d,r8d

+        paddd   xmm3,xmm4

+        ror     r14d,2

+        add     r10d,ecx

+        psrlq   xmm6,17

+        add     ecx,r15d

+        mov     r13d,r10d

+        add     r14d,ecx

+        pxor    xmm7,xmm6

+        ror     r13d,14

+        mov     ecx,r14d

+        mov     r12d,r11d

+        ror     r14d,9

+        psrlq   xmm6,2

+        xor     r13d,r10d

+        xor     r12d,eax

+        pxor    xmm7,xmm6

+        ror     r13d,5

+        xor     r14d,ecx

+        and     r12d,r10d

+        pshufd  xmm7,xmm7,128

+        xor     r13d,r10d

+        add     ebx,DWORD[56+rsp]

+        mov     r15d,ecx

+        psrldq  xmm7,8

+        xor     r12d,eax

+        ror     r14d,11

+        xor     r15d,edx

+        add     ebx,r12d

+        ror     r13d,6

+        paddd   xmm3,xmm7

+        and     edi,r15d

+        xor     r14d,ecx

+        add     ebx,r13d

+        pshufd  xmm7,xmm3,80

+        xor     edi,edx

+        ror     r14d,2

+        add     r9d,ebx

+        movdqa  xmm6,xmm7

+        add     ebx,edi

+        mov     r13d,r9d

+        psrld   xmm7,10

+        add     r14d,ebx

+        ror     r13d,14

+        psrlq   xmm6,17

+        mov     ebx,r14d

+        mov     r12d,r10d

+        pxor    xmm7,xmm6

+        ror     r14d,9

+        xor     r13d,r9d

+        xor     r12d,r11d

+        ror     r13d,5

+        xor     r14d,ebx

+        psrlq   xmm6,2

+        and     r12d,r9d

+        xor     r13d,r9d

+        add     eax,DWORD[60+rsp]

+        pxor    xmm7,xmm6

+        mov     edi,ebx

+        xor     r12d,r11d

+        ror     r14d,11

+        pshufd  xmm7,xmm7,8

+        xor     edi,ecx

+        add     eax,r12d

+        movdqa  xmm6,XMMWORD[96+rbp]

+        ror     r13d,6

+        and     r15d,edi

+        pslldq  xmm7,8

+        xor     r14d,ebx

+        add     eax,r13d

+        xor     r15d,ecx

+        paddd   xmm3,xmm7

+        ror     r14d,2

+        add     r8d,eax

+        add     eax,r15d

+        paddd   xmm6,xmm3

+        mov     r13d,r8d

+        add     r14d,eax

+        movdqa  XMMWORD[48+rsp],xmm6

+        cmp     BYTE[131+rbp],0

+        jne     NEAR $L$ssse3_00_47

+        ror     r13d,14

+        mov     eax,r14d

+        mov     r12d,r9d

+        ror     r14d,9

+        xor     r13d,r8d

+        xor     r12d,r10d

+        ror     r13d,5

+        xor     r14d,eax

+        and     r12d,r8d

+        xor     r13d,r8d

+        add     r11d,DWORD[rsp]

+        mov     r15d,eax

+        xor     r12d,r10d

+        ror     r14d,11

+        xor     r15d,ebx

+        add     r11d,r12d

+        ror     r13d,6

+        and     edi,r15d

+        xor     r14d,eax

+        add     r11d,r13d

+        xor     edi,ebx

+        ror     r14d,2

+        add     edx,r11d

+        add     r11d,edi

+        mov     r13d,edx

+        add     r14d,r11d

+        ror     r13d,14

+        mov     r11d,r14d

+        mov     r12d,r8d

+        ror     r14d,9

+        xor     r13d,edx

+        xor     r12d,r9d

+        ror     r13d,5

+        xor     r14d,r11d

+        and     r12d,edx

+        xor     r13d,edx

+        add     r10d,DWORD[4+rsp]

+        mov     edi,r11d

+        xor     r12d,r9d

+        ror     r14d,11

+        xor     edi,eax

+        add     r10d,r12d

+        ror     r13d,6

+        and     r15d,edi

+        xor     r14d,r11d

+        add     r10d,r13d

+        xor     r15d,eax

+        ror     r14d,2

+        add     ecx,r10d

+        add     r10d,r15d

+        mov     r13d,ecx

+        add     r14d,r10d

+        ror     r13d,14

+        mov     r10d,r14d

+        mov     r12d,edx

+        ror     r14d,9

+        xor     r13d,ecx

+        xor     r12d,r8d

+        ror     r13d,5

+        xor     r14d,r10d

+        and     r12d,ecx

+        xor     r13d,ecx

+        add     r9d,DWORD[8+rsp]

+        mov     r15d,r10d

+        xor     r12d,r8d

+        ror     r14d,11

+        xor     r15d,r11d

+        add     r9d,r12d

+        ror     r13d,6

+        and     edi,r15d

+        xor     r14d,r10d

+        add     r9d,r13d

+        xor     edi,r11d

+        ror     r14d,2

+        add     ebx,r9d

+        add     r9d,edi

+        mov     r13d,ebx

+        add     r14d,r9d

+        ror     r13d,14

+        mov     r9d,r14d

+        mov     r12d,ecx

+        ror     r14d,9

+        xor     r13d,ebx

+        xor     r12d,edx

+        ror     r13d,5

+        xor     r14d,r9d

+        and     r12d,ebx

+        xor     r13d,ebx

+        add     r8d,DWORD[12+rsp]

+        mov     edi,r9d

+        xor     r12d,edx

+        ror     r14d,11

+        xor     edi,r10d

+        add     r8d,r12d

+        ror     r13d,6

+        and     r15d,edi

+        xor     r14d,r9d

+        add     r8d,r13d

+        xor     r15d,r10d

+        ror     r14d,2

+        add     eax,r8d

+        add     r8d,r15d

+        mov     r13d,eax

+        add     r14d,r8d

+        ror     r13d,14

+        mov     r8d,r14d

+        mov     r12d,ebx

+        ror     r14d,9

+        xor     r13d,eax

+        xor     r12d,ecx

+        ror     r13d,5

+        xor     r14d,r8d

+        and     r12d,eax

+        xor     r13d,eax

+        add     edx,DWORD[16+rsp]

+        mov     r15d,r8d

+        xor     r12d,ecx

+        ror     r14d,11

+        xor     r15d,r9d

+        add     edx,r12d

+        ror     r13d,6

+        and     edi,r15d

+        xor     r14d,r8d

+        add     edx,r13d

+        xor     edi,r9d

+        ror     r14d,2

+        add     r11d,edx

+        add     edx,edi

+        mov     r13d,r11d

+        add     r14d,edx

+        ror     r13d,14

+        mov     edx,r14d

+        mov     r12d,eax

+        ror     r14d,9

+        xor     r13d,r11d

+        xor     r12d,ebx

+        ror     r13d,5

+        xor     r14d,edx

+        and     r12d,r11d

+        xor     r13d,r11d

+        add     ecx,DWORD[20+rsp]

+        mov     edi,edx

+        xor     r12d,ebx

+        ror     r14d,11

+        xor     edi,r8d

+        add     ecx,r12d

+        ror     r13d,6

+        and     r15d,edi

+        xor     r14d,edx

+        add     ecx,r13d

+        xor     r15d,r8d

+        ror     r14d,2

+        add     r10d,ecx

+        add     ecx,r15d

+        mov     r13d,r10d

+        add     r14d,ecx

+        ror     r13d,14

+        mov     ecx,r14d

+        mov     r12d,r11d

+        ror     r14d,9

+        xor     r13d,r10d

+        xor     r12d,eax

+        ror     r13d,5

+        xor     r14d,ecx

+        and     r12d,r10d

+        xor     r13d,r10d

+        add     ebx,DWORD[24+rsp]

+        mov     r15d,ecx

+        xor     r12d,eax

+        ror     r14d,11

+        xor     r15d,edx

+        add     ebx,r12d

+        ror     r13d,6

+        and     edi,r15d

+        xor     r14d,ecx

+        add     ebx,r13d

+        xor     edi,edx

+        ror     r14d,2

+        add     r9d,ebx

+        add     ebx,edi

+        mov     r13d,r9d

+        add     r14d,ebx

+        ror     r13d,14

+        mov     ebx,r14d

+        mov     r12d,r10d

+        ror     r14d,9

+        xor     r13d,r9d

+        xor     r12d,r11d

+        ror     r13d,5

+        xor     r14d,ebx

+        and     r12d,r9d

+        xor     r13d,r9d

+        add     eax,DWORD[28+rsp]

+        mov     edi,ebx

+        xor     r12d,r11d

+        ror     r14d,11

+        xor     edi,ecx

+        add     eax,r12d

+        ror     r13d,6

+        and     r15d,edi

+        xor     r14d,ebx

+        add     eax,r13d

+        xor     r15d,ecx

+        ror     r14d,2

+        add     r8d,eax

+        add     eax,r15d

+        mov     r13d,r8d

+        add     r14d,eax

+        ror     r13d,14

+        mov     eax,r14d

+        mov     r12d,r9d

+        ror     r14d,9

+        xor     r13d,r8d

+        xor     r12d,r10d

+        ror     r13d,5

+        xor     r14d,eax

+        and     r12d,r8d

+        xor     r13d,r8d

+        add     r11d,DWORD[32+rsp]

+        mov     r15d,eax

+        xor     r12d,r10d

+        ror     r14d,11

+        xor     r15d,ebx

+        add     r11d,r12d

+        ror     r13d,6

+        and     edi,r15d

+        xor     r14d,eax

+        add     r11d,r13d

+        xor     edi,ebx

+        ror     r14d,2

+        add     edx,r11d

+        add     r11d,edi

+        mov     r13d,edx

+        add     r14d,r11d

+        ror     r13d,14

+        mov     r11d,r14d

+        mov     r12d,r8d

+        ror     r14d,9

+        xor     r13d,edx

+        xor     r12d,r9d

+        ror     r13d,5

+        xor     r14d,r11d

+        and     r12d,edx

+        xor     r13d,edx

+        add     r10d,DWORD[36+rsp]

+        mov     edi,r11d

+        xor     r12d,r9d

+        ror     r14d,11

+        xor     edi,eax

+        add     r10d,r12d

+        ror     r13d,6

+        and     r15d,edi

+        xor     r14d,r11d

+        add     r10d,r13d

+        xor     r15d,eax

+        ror     r14d,2

+        add     ecx,r10d

+        add     r10d,r15d

+        mov     r13d,ecx

+        add     r14d,r10d

+        ror     r13d,14

+        mov     r10d,r14d

+        mov     r12d,edx

+        ror     r14d,9

+        xor     r13d,ecx

+        xor     r12d,r8d

+        ror     r13d,5

+        xor     r14d,r10d

+        and     r12d,ecx

+        xor     r13d,ecx

+        add     r9d,DWORD[40+rsp]

+        mov     r15d,r10d

+        xor     r12d,r8d

+        ror     r14d,11

+        xor     r15d,r11d

+        add     r9d,r12d

+        ror     r13d,6

+        and     edi,r15d

+        xor     r14d,r10d

+        add     r9d,r13d

+        xor     edi,r11d

+        ror     r14d,2

+        add     ebx,r9d

+        add     r9d,edi

+        mov     r13d,ebx

+        add     r14d,r9d

+        ror     r13d,14

+        mov     r9d,r14d

+        mov     r12d,ecx

+        ror     r14d,9

+        xor     r13d,ebx

+        xor     r12d,edx

+        ror     r13d,5

+        xor     r14d,r9d

+        and     r12d,ebx

+        xor     r13d,ebx

+        add     r8d,DWORD[44+rsp]

+        mov     edi,r9d

+        xor     r12d,edx

+        ror     r14d,11

+        xor     edi,r10d

+        add     r8d,r12d

+        ror     r13d,6

+        and     r15d,edi

+        xor     r14d,r9d

+        add     r8d,r13d

+        xor     r15d,r10d

+        ror     r14d,2

+        add     eax,r8d

+        add     r8d,r15d

+        mov     r13d,eax

+        add     r14d,r8d

+        ror     r13d,14

+        mov     r8d,r14d

+        mov     r12d,ebx

+        ror     r14d,9

+        xor     r13d,eax

+        xor     r12d,ecx

+        ror     r13d,5

+        xor     r14d,r8d

+        and     r12d,eax

+        xor     r13d,eax

+        add     edx,DWORD[48+rsp]

+        mov     r15d,r8d

+        xor     r12d,ecx

+        ror     r14d,11

+        xor     r15d,r9d

+        add     edx,r12d

+        ror     r13d,6

+        and     edi,r15d

+        xor     r14d,r8d

+        add     edx,r13d

+        xor     edi,r9d

+        ror     r14d,2

+        add     r11d,edx

+        add     edx,edi

+        mov     r13d,r11d

+        add     r14d,edx

+        ror     r13d,14

+        mov     edx,r14d

+        mov     r12d,eax

+        ror     r14d,9

+        xor     r13d,r11d

+        xor     r12d,ebx

+        ror     r13d,5

+        xor     r14d,edx

+        and     r12d,r11d

+        xor     r13d,r11d

+        add     ecx,DWORD[52+rsp]

+        mov     edi,edx

+        xor     r12d,ebx

+        ror     r14d,11

+        xor     edi,r8d

+        add     ecx,r12d

+        ror     r13d,6

+        and     r15d,edi

+        xor     r14d,edx

+        add     ecx,r13d

+        xor     r15d,r8d

+        ror     r14d,2

+        add     r10d,ecx

+        add     ecx,r15d

+        mov     r13d,r10d

+        add     r14d,ecx

+        ror     r13d,14

+        mov     ecx,r14d

+        mov     r12d,r11d

+        ror     r14d,9

+        xor     r13d,r10d

+        xor     r12d,eax

+        ror     r13d,5

+        xor     r14d,ecx

+        and     r12d,r10d

+        xor     r13d,r10d

+        add     ebx,DWORD[56+rsp]

+        mov     r15d,ecx

+        xor     r12d,eax

+        ror     r14d,11

+        xor     r15d,edx

+        add     ebx,r12d

+        ror     r13d,6

+        and     edi,r15d

+        xor     r14d,ecx

+        add     ebx,r13d

+        xor     edi,edx

+        ror     r14d,2

+        add     r9d,ebx

+        add     ebx,edi

+        mov     r13d,r9d

+        add     r14d,ebx

+        ror     r13d,14

+        mov     ebx,r14d

+        mov     r12d,r10d

+        ror     r14d,9

+        xor     r13d,r9d

+        xor     r12d,r11d

+        ror     r13d,5

+        xor     r14d,ebx

+        and     r12d,r9d

+        xor     r13d,r9d

+        add     eax,DWORD[60+rsp]

+        mov     edi,ebx

+        xor     r12d,r11d

+        ror     r14d,11

+        xor     edi,ecx

+        add     eax,r12d

+        ror     r13d,6

+        and     r15d,edi

+        xor     r14d,ebx

+        add     eax,r13d

+        xor     r15d,ecx

+        ror     r14d,2

+        add     r8d,eax

+        add     eax,r15d

+        mov     r13d,r8d

+        add     r14d,eax

+        mov     rdi,QWORD[((64+0))+rsp]

+        mov     eax,r14d

+

+        add     eax,DWORD[rdi]

+        lea     rsi,[64+rsi]

+        add     ebx,DWORD[4+rdi]

+        add     ecx,DWORD[8+rdi]

+        add     edx,DWORD[12+rdi]

+        add     r8d,DWORD[16+rdi]

+        add     r9d,DWORD[20+rdi]

+        add     r10d,DWORD[24+rdi]

+        add     r11d,DWORD[28+rdi]

+

+        cmp     rsi,QWORD[((64+16))+rsp]

+

+        mov     DWORD[rdi],eax

+        mov     DWORD[4+rdi],ebx

+        mov     DWORD[8+rdi],ecx

+        mov     DWORD[12+rdi],edx

+        mov     DWORD[16+rdi],r8d

+        mov     DWORD[20+rdi],r9d

+        mov     DWORD[24+rdi],r10d

+        mov     DWORD[28+rdi],r11d

+        jb      NEAR $L$loop_ssse3

+

+        mov     rsi,QWORD[88+rsp]

+

+        movaps  xmm6,XMMWORD[((64+32))+rsp]

+        movaps  xmm7,XMMWORD[((64+48))+rsp]

+        movaps  xmm8,XMMWORD[((64+64))+rsp]

+        movaps  xmm9,XMMWORD[((64+80))+rsp]

+        mov     r15,QWORD[((-48))+rsi]

+

+        mov     r14,QWORD[((-40))+rsi]

+

+        mov     r13,QWORD[((-32))+rsi]

+

+        mov     r12,QWORD[((-24))+rsi]

+

+        mov     rbp,QWORD[((-16))+rsi]

+

+        mov     rbx,QWORD[((-8))+rsi]

+

+        lea     rsp,[rsi]

+

+$L$epilogue_ssse3:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_sha256_block_data_order_ssse3:

+EXTERN  __imp_RtlVirtualUnwind

+

+ALIGN   16

+se_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        mov     rsi,QWORD[8+r9]

+        mov     r11,QWORD[56+r9]

+

+        mov     r10d,DWORD[r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jb      NEAR $L$in_prologue

+

+        mov     rax,QWORD[152+r8]

+

+        mov     r10d,DWORD[4+r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jae     NEAR $L$in_prologue

+        mov     rsi,rax

+        mov     rax,QWORD[((64+24))+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+        mov     rbp,QWORD[((-16))+rax]

+        mov     r12,QWORD[((-24))+rax]

+        mov     r13,QWORD[((-32))+rax]

+        mov     r14,QWORD[((-40))+rax]

+        mov     r15,QWORD[((-48))+rax]

+        mov     QWORD[144+r8],rbx

+        mov     QWORD[160+r8],rbp

+        mov     QWORD[216+r8],r12

+        mov     QWORD[224+r8],r13

+        mov     QWORD[232+r8],r14

+        mov     QWORD[240+r8],r15

+

+        lea     r10,[$L$epilogue]

+        cmp     rbx,r10

+        jb      NEAR $L$in_prologue

+

+        lea     rsi,[((64+32))+rsi]

+        lea     rdi,[512+r8]

+        mov     ecx,8

+        DD      0xa548f3fc

+

+$L$in_prologue:

+        mov     rdi,QWORD[8+rax]

+        mov     rsi,QWORD[16+rax]

+        mov     QWORD[152+r8],rax

+        mov     QWORD[168+r8],rsi

+        mov     QWORD[176+r8],rdi

+

+        mov     rdi,QWORD[40+r9]

+        mov     rsi,r8

+        mov     ecx,154

+        DD      0xa548f3fc

+

+        mov     rsi,r9

+        xor     rcx,rcx

+        mov     rdx,QWORD[8+rsi]

+        mov     r8,QWORD[rsi]

+        mov     r9,QWORD[16+rsi]

+        mov     r10,QWORD[40+rsi]

+        lea     r11,[56+rsi]

+        lea     r12,[24+rsi]

+        mov     QWORD[32+rsp],r10

+        mov     QWORD[40+rsp],r11

+        mov     QWORD[48+rsp],r12

+        mov     QWORD[56+rsp],rcx

+        call    QWORD[__imp_RtlVirtualUnwind]

+

+        mov     eax,1

+        add     rsp,64

+        popfq

+        pop     r15

+        pop     r14

+        pop     r13

+        pop     r12

+        pop     rbp

+        pop     rbx

+        pop     rdi

+        pop     rsi

+        DB      0F3h,0C3h               ;repret

+

+

+ALIGN   16

+shaext_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        lea     r10,[$L$prologue_shaext]

+        cmp     rbx,r10

+        jb      NEAR $L$in_prologue

+

+        lea     r10,[$L$epilogue_shaext]

+        cmp     rbx,r10

+        jae     NEAR $L$in_prologue

+

+        lea     rsi,[((-8-80))+rax]

+        lea     rdi,[512+r8]

+        mov     ecx,10

+        DD      0xa548f3fc

+

+        jmp     NEAR $L$in_prologue

+

+section .pdata rdata align=4

+ALIGN   4

+        DD      $L$SEH_begin_sha256_block_data_order wrt ..imagebase

+        DD      $L$SEH_end_sha256_block_data_order wrt ..imagebase

+        DD      $L$SEH_info_sha256_block_data_order wrt ..imagebase

+        DD      $L$SEH_begin_sha256_block_data_order_shaext
wrt ..imagebase

+        DD      $L$SEH_end_sha256_block_data_order_shaext wrt
..imagebase

+        DD      $L$SEH_info_sha256_block_data_order_shaext wrt
..imagebase

+        DD      $L$SEH_begin_sha256_block_data_order_ssse3 wrt
..imagebase

+        DD      $L$SEH_end_sha256_block_data_order_ssse3 wrt
..imagebase

+        DD      $L$SEH_info_sha256_block_data_order_ssse3 wrt
..imagebase

+section .xdata rdata align=8

+ALIGN   8

+$L$SEH_info_sha256_block_data_order:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$prologue wrt ..imagebase,$L$epilogue wrt
..imagebase

+$L$SEH_info_sha256_block_data_order_shaext:

+DB      9,0,0,0

+        DD      shaext_handler wrt ..imagebase

+$L$SEH_info_sha256_block_data_order_ssse3:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$prologue_ssse3 wrt ..imagebase,$L$epilogue_ssse3
wrt ..imagebase

diff --git a/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha512-
x86_64.nasm
b/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha512-x86_64.nasm
new file mode 100644
index 0000000000..c6397d4393
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha512-
x86_64.nasm
@@ -0,0 +1,1938 @@
+; WARNING: do not edit!

+; Generated from openssl/crypto/sha/asm/sha512-x86_64.pl

+;

+; Copyright 2005-2020 The OpenSSL Project Authors. All Rights
Reserved.

+;

+; Licensed under the OpenSSL license (the "License").  You may not use

+; this file except in compliance with the License.  You can obtain a
copy

+; in the file LICENSE in the source distribution or at

+; https://www.openssl.org/source/license.html

+

+default rel

+%define XMMWORD

+%define YMMWORD

+%define ZMMWORD

+section .text code align=64

+

+

+EXTERN  OPENSSL_ia32cap_P

+global  sha512_block_data_order

+

+ALIGN   16

+sha512_block_data_order:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_sha512_block_data_order:

+        mov     rdi,rcx

+        mov     rsi,rdx

+        mov     rdx,r8

+

+

+

+        mov     rax,rsp

+

+        push    rbx

+

+        push    rbp

+

+        push    r12

+

+        push    r13

+

+        push    r14

+

+        push    r15

+

+        shl     rdx,4

+        sub     rsp,16*8+4*8

+        lea     rdx,[rdx*8+rsi]

+        and     rsp,-64

+        mov     QWORD[((128+0))+rsp],rdi

+        mov     QWORD[((128+8))+rsp],rsi

+        mov     QWORD[((128+16))+rsp],rdx

+        mov     QWORD[152+rsp],rax

+

+$L$prologue:

+

+        mov     rax,QWORD[rdi]

+        mov     rbx,QWORD[8+rdi]

+        mov     rcx,QWORD[16+rdi]

+        mov     rdx,QWORD[24+rdi]

+        mov     r8,QWORD[32+rdi]

+        mov     r9,QWORD[40+rdi]

+        mov     r10,QWORD[48+rdi]

+        mov     r11,QWORD[56+rdi]

+        jmp     NEAR $L$loop

+

+ALIGN   16

+$L$loop:

+        mov     rdi,rbx

+        lea     rbp,[K512]

+        xor     rdi,rcx

+        mov     r12,QWORD[rsi]

+        mov     r13,r8

+        mov     r14,rax

+        bswap   r12

+        ror     r13,23

+        mov     r15,r9

+

+        xor     r13,r8

+        ror     r14,5

+        xor     r15,r10

+

+        mov     QWORD[rsp],r12

+        xor     r14,rax

+        and     r15,r8

+

+        ror     r13,4

+        add     r12,r11

+        xor     r15,r10

+

+        ror     r14,6

+        xor     r13,r8

+        add     r12,r15

+

+        mov     r15,rax

+        add     r12,QWORD[rbp]

+        xor     r14,rax

+

+        xor     r15,rbx

+        ror     r13,14

+        mov     r11,rbx

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     r11,rdi

+        add     rdx,r12

+        add     r11,r12

+

+        lea     rbp,[8+rbp]

+        add     r11,r14

+        mov     r12,QWORD[8+rsi]

+        mov     r13,rdx

+        mov     r14,r11

+        bswap   r12

+        ror     r13,23

+        mov     rdi,r8

+

+        xor     r13,rdx

+        ror     r14,5

+        xor     rdi,r9

+

+        mov     QWORD[8+rsp],r12

+        xor     r14,r11

+        and     rdi,rdx

+

+        ror     r13,4

+        add     r12,r10

+        xor     rdi,r9

+

+        ror     r14,6

+        xor     r13,rdx

+        add     r12,rdi

+

+        mov     rdi,r11

+        add     r12,QWORD[rbp]

+        xor     r14,r11

+

+        xor     rdi,rax

+        ror     r13,14

+        mov     r10,rax

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     r10,r15

+        add     rcx,r12

+        add     r10,r12

+

+        lea     rbp,[24+rbp]

+        add     r10,r14

+        mov     r12,QWORD[16+rsi]

+        mov     r13,rcx

+        mov     r14,r10

+        bswap   r12

+        ror     r13,23

+        mov     r15,rdx

+

+        xor     r13,rcx

+        ror     r14,5

+        xor     r15,r8

+

+        mov     QWORD[16+rsp],r12

+        xor     r14,r10

+        and     r15,rcx

+

+        ror     r13,4

+        add     r12,r9

+        xor     r15,r8

+

+        ror     r14,6

+        xor     r13,rcx

+        add     r12,r15

+

+        mov     r15,r10

+        add     r12,QWORD[rbp]

+        xor     r14,r10

+

+        xor     r15,r11

+        ror     r13,14

+        mov     r9,r11

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     r9,rdi

+        add     rbx,r12

+        add     r9,r12

+

+        lea     rbp,[8+rbp]

+        add     r9,r14

+        mov     r12,QWORD[24+rsi]

+        mov     r13,rbx

+        mov     r14,r9

+        bswap   r12

+        ror     r13,23

+        mov     rdi,rcx

+

+        xor     r13,rbx

+        ror     r14,5

+        xor     rdi,rdx

+

+        mov     QWORD[24+rsp],r12

+        xor     r14,r9

+        and     rdi,rbx

+

+        ror     r13,4

+        add     r12,r8

+        xor     rdi,rdx

+

+        ror     r14,6

+        xor     r13,rbx

+        add     r12,rdi

+

+        mov     rdi,r9

+        add     r12,QWORD[rbp]

+        xor     r14,r9

+

+        xor     rdi,r10

+        ror     r13,14

+        mov     r8,r10

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     r8,r15

+        add     rax,r12

+        add     r8,r12

+

+        lea     rbp,[24+rbp]

+        add     r8,r14

+        mov     r12,QWORD[32+rsi]

+        mov     r13,rax

+        mov     r14,r8

+        bswap   r12

+        ror     r13,23

+        mov     r15,rbx

+

+        xor     r13,rax

+        ror     r14,5

+        xor     r15,rcx

+

+        mov     QWORD[32+rsp],r12

+        xor     r14,r8

+        and     r15,rax

+

+        ror     r13,4

+        add     r12,rdx

+        xor     r15,rcx

+

+        ror     r14,6

+        xor     r13,rax

+        add     r12,r15

+

+        mov     r15,r8

+        add     r12,QWORD[rbp]

+        xor     r14,r8

+

+        xor     r15,r9

+        ror     r13,14

+        mov     rdx,r9

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     rdx,rdi

+        add     r11,r12

+        add     rdx,r12

+

+        lea     rbp,[8+rbp]

+        add     rdx,r14

+        mov     r12,QWORD[40+rsi]

+        mov     r13,r11

+        mov     r14,rdx

+        bswap   r12

+        ror     r13,23

+        mov     rdi,rax

+

+        xor     r13,r11

+        ror     r14,5

+        xor     rdi,rbx

+

+        mov     QWORD[40+rsp],r12

+        xor     r14,rdx

+        and     rdi,r11

+

+        ror     r13,4

+        add     r12,rcx

+        xor     rdi,rbx

+

+        ror     r14,6

+        xor     r13,r11

+        add     r12,rdi

+

+        mov     rdi,rdx

+        add     r12,QWORD[rbp]

+        xor     r14,rdx

+

+        xor     rdi,r8

+        ror     r13,14

+        mov     rcx,r8

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     rcx,r15

+        add     r10,r12

+        add     rcx,r12

+

+        lea     rbp,[24+rbp]

+        add     rcx,r14

+        mov     r12,QWORD[48+rsi]

+        mov     r13,r10

+        mov     r14,rcx

+        bswap   r12

+        ror     r13,23

+        mov     r15,r11

+

+        xor     r13,r10

+        ror     r14,5

+        xor     r15,rax

+

+        mov     QWORD[48+rsp],r12

+        xor     r14,rcx

+        and     r15,r10

+

+        ror     r13,4

+        add     r12,rbx

+        xor     r15,rax

+

+        ror     r14,6

+        xor     r13,r10

+        add     r12,r15

+

+        mov     r15,rcx

+        add     r12,QWORD[rbp]

+        xor     r14,rcx

+

+        xor     r15,rdx

+        ror     r13,14

+        mov     rbx,rdx

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     rbx,rdi

+        add     r9,r12

+        add     rbx,r12

+

+        lea     rbp,[8+rbp]

+        add     rbx,r14

+        mov     r12,QWORD[56+rsi]

+        mov     r13,r9

+        mov     r14,rbx

+        bswap   r12

+        ror     r13,23

+        mov     rdi,r10

+

+        xor     r13,r9

+        ror     r14,5

+        xor     rdi,r11

+

+        mov     QWORD[56+rsp],r12

+        xor     r14,rbx

+        and     rdi,r9

+

+        ror     r13,4

+        add     r12,rax

+        xor     rdi,r11

+

+        ror     r14,6

+        xor     r13,r9

+        add     r12,rdi

+

+        mov     rdi,rbx

+        add     r12,QWORD[rbp]

+        xor     r14,rbx

+

+        xor     rdi,rcx

+        ror     r13,14

+        mov     rax,rcx

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     rax,r15

+        add     r8,r12

+        add     rax,r12

+

+        lea     rbp,[24+rbp]

+        add     rax,r14

+        mov     r12,QWORD[64+rsi]

+        mov     r13,r8

+        mov     r14,rax

+        bswap   r12

+        ror     r13,23

+        mov     r15,r9

+

+        xor     r13,r8

+        ror     r14,5

+        xor     r15,r10

+

+        mov     QWORD[64+rsp],r12

+        xor     r14,rax

+        and     r15,r8

+

+        ror     r13,4

+        add     r12,r11

+        xor     r15,r10

+

+        ror     r14,6

+        xor     r13,r8

+        add     r12,r15

+

+        mov     r15,rax

+        add     r12,QWORD[rbp]

+        xor     r14,rax

+

+        xor     r15,rbx

+        ror     r13,14

+        mov     r11,rbx

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     r11,rdi

+        add     rdx,r12

+        add     r11,r12

+

+        lea     rbp,[8+rbp]

+        add     r11,r14

+        mov     r12,QWORD[72+rsi]

+        mov     r13,rdx

+        mov     r14,r11

+        bswap   r12

+        ror     r13,23

+        mov     rdi,r8

+

+        xor     r13,rdx

+        ror     r14,5

+        xor     rdi,r9

+

+        mov     QWORD[72+rsp],r12

+        xor     r14,r11

+        and     rdi,rdx

+

+        ror     r13,4

+        add     r12,r10

+        xor     rdi,r9

+

+        ror     r14,6

+        xor     r13,rdx

+        add     r12,rdi

+

+        mov     rdi,r11

+        add     r12,QWORD[rbp]

+        xor     r14,r11

+

+        xor     rdi,rax

+        ror     r13,14

+        mov     r10,rax

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     r10,r15

+        add     rcx,r12

+        add     r10,r12

+

+        lea     rbp,[24+rbp]

+        add     r10,r14

+        mov     r12,QWORD[80+rsi]

+        mov     r13,rcx

+        mov     r14,r10

+        bswap   r12

+        ror     r13,23

+        mov     r15,rdx

+

+        xor     r13,rcx

+        ror     r14,5

+        xor     r15,r8

+

+        mov     QWORD[80+rsp],r12

+        xor     r14,r10

+        and     r15,rcx

+

+        ror     r13,4

+        add     r12,r9

+        xor     r15,r8

+

+        ror     r14,6

+        xor     r13,rcx

+        add     r12,r15

+

+        mov     r15,r10

+        add     r12,QWORD[rbp]

+        xor     r14,r10

+

+        xor     r15,r11

+        ror     r13,14

+        mov     r9,r11

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     r9,rdi

+        add     rbx,r12

+        add     r9,r12

+

+        lea     rbp,[8+rbp]

+        add     r9,r14

+        mov     r12,QWORD[88+rsi]

+        mov     r13,rbx

+        mov     r14,r9

+        bswap   r12

+        ror     r13,23

+        mov     rdi,rcx

+

+        xor     r13,rbx

+        ror     r14,5

+        xor     rdi,rdx

+

+        mov     QWORD[88+rsp],r12

+        xor     r14,r9

+        and     rdi,rbx

+

+        ror     r13,4

+        add     r12,r8

+        xor     rdi,rdx

+

+        ror     r14,6

+        xor     r13,rbx

+        add     r12,rdi

+

+        mov     rdi,r9

+        add     r12,QWORD[rbp]

+        xor     r14,r9

+

+        xor     rdi,r10

+        ror     r13,14

+        mov     r8,r10

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     r8,r15

+        add     rax,r12

+        add     r8,r12

+

+        lea     rbp,[24+rbp]

+        add     r8,r14

+        mov     r12,QWORD[96+rsi]

+        mov     r13,rax

+        mov     r14,r8

+        bswap   r12

+        ror     r13,23

+        mov     r15,rbx

+

+        xor     r13,rax

+        ror     r14,5

+        xor     r15,rcx

+

+        mov     QWORD[96+rsp],r12

+        xor     r14,r8

+        and     r15,rax

+

+        ror     r13,4

+        add     r12,rdx

+        xor     r15,rcx

+

+        ror     r14,6

+        xor     r13,rax

+        add     r12,r15

+

+        mov     r15,r8

+        add     r12,QWORD[rbp]

+        xor     r14,r8

+

+        xor     r15,r9

+        ror     r13,14

+        mov     rdx,r9

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     rdx,rdi

+        add     r11,r12

+        add     rdx,r12

+

+        lea     rbp,[8+rbp]

+        add     rdx,r14

+        mov     r12,QWORD[104+rsi]

+        mov     r13,r11

+        mov     r14,rdx

+        bswap   r12

+        ror     r13,23

+        mov     rdi,rax

+

+        xor     r13,r11

+        ror     r14,5

+        xor     rdi,rbx

+

+        mov     QWORD[104+rsp],r12

+        xor     r14,rdx

+        and     rdi,r11

+

+        ror     r13,4

+        add     r12,rcx

+        xor     rdi,rbx

+

+        ror     r14,6

+        xor     r13,r11

+        add     r12,rdi

+

+        mov     rdi,rdx

+        add     r12,QWORD[rbp]

+        xor     r14,rdx

+

+        xor     rdi,r8

+        ror     r13,14

+        mov     rcx,r8

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     rcx,r15

+        add     r10,r12

+        add     rcx,r12

+

+        lea     rbp,[24+rbp]

+        add     rcx,r14

+        mov     r12,QWORD[112+rsi]

+        mov     r13,r10

+        mov     r14,rcx

+        bswap   r12

+        ror     r13,23

+        mov     r15,r11

+

+        xor     r13,r10

+        ror     r14,5

+        xor     r15,rax

+

+        mov     QWORD[112+rsp],r12

+        xor     r14,rcx

+        and     r15,r10

+

+        ror     r13,4

+        add     r12,rbx

+        xor     r15,rax

+

+        ror     r14,6

+        xor     r13,r10

+        add     r12,r15

+

+        mov     r15,rcx

+        add     r12,QWORD[rbp]

+        xor     r14,rcx

+

+        xor     r15,rdx

+        ror     r13,14

+        mov     rbx,rdx

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     rbx,rdi

+        add     r9,r12

+        add     rbx,r12

+

+        lea     rbp,[8+rbp]

+        add     rbx,r14

+        mov     r12,QWORD[120+rsi]

+        mov     r13,r9

+        mov     r14,rbx

+        bswap   r12

+        ror     r13,23

+        mov     rdi,r10

+

+        xor     r13,r9

+        ror     r14,5

+        xor     rdi,r11

+

+        mov     QWORD[120+rsp],r12

+        xor     r14,rbx

+        and     rdi,r9

+

+        ror     r13,4

+        add     r12,rax

+        xor     rdi,r11

+

+        ror     r14,6

+        xor     r13,r9

+        add     r12,rdi

+

+        mov     rdi,rbx

+        add     r12,QWORD[rbp]

+        xor     r14,rbx

+

+        xor     rdi,rcx

+        ror     r13,14

+        mov     rax,rcx

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     rax,r15

+        add     r8,r12

+        add     rax,r12

+

+        lea     rbp,[24+rbp]

+        jmp     NEAR $L$rounds_16_xx

+ALIGN   16

+$L$rounds_16_xx:

+        mov     r13,QWORD[8+rsp]

+        mov     r15,QWORD[112+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     rax,r14

+        mov     r14,r15

+        ror     r15,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     r15,r14

+        shr     r14,6

+

+        ror     r15,19

+        xor     r12,r13

+        xor     r15,r14

+        add     r12,QWORD[72+rsp]

+

+        add     r12,QWORD[rsp]

+        mov     r13,r8

+        add     r12,r15

+        mov     r14,rax

+        ror     r13,23

+        mov     r15,r9

+

+        xor     r13,r8

+        ror     r14,5

+        xor     r15,r10

+

+        mov     QWORD[rsp],r12

+        xor     r14,rax

+        and     r15,r8

+

+        ror     r13,4

+        add     r12,r11

+        xor     r15,r10

+

+        ror     r14,6

+        xor     r13,r8

+        add     r12,r15

+

+        mov     r15,rax

+        add     r12,QWORD[rbp]

+        xor     r14,rax

+

+        xor     r15,rbx

+        ror     r13,14

+        mov     r11,rbx

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     r11,rdi

+        add     rdx,r12

+        add     r11,r12

+

+        lea     rbp,[8+rbp]

+        mov     r13,QWORD[16+rsp]

+        mov     rdi,QWORD[120+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     r11,r14

+        mov     r14,rdi

+        ror     rdi,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     rdi,r14

+        shr     r14,6

+

+        ror     rdi,19

+        xor     r12,r13

+        xor     rdi,r14

+        add     r12,QWORD[80+rsp]

+

+        add     r12,QWORD[8+rsp]

+        mov     r13,rdx

+        add     r12,rdi

+        mov     r14,r11

+        ror     r13,23

+        mov     rdi,r8

+

+        xor     r13,rdx

+        ror     r14,5

+        xor     rdi,r9

+

+        mov     QWORD[8+rsp],r12

+        xor     r14,r11

+        and     rdi,rdx

+

+        ror     r13,4

+        add     r12,r10

+        xor     rdi,r9

+

+        ror     r14,6

+        xor     r13,rdx

+        add     r12,rdi

+

+        mov     rdi,r11

+        add     r12,QWORD[rbp]

+        xor     r14,r11

+

+        xor     rdi,rax

+        ror     r13,14

+        mov     r10,rax

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     r10,r15

+        add     rcx,r12

+        add     r10,r12

+

+        lea     rbp,[24+rbp]

+        mov     r13,QWORD[24+rsp]

+        mov     r15,QWORD[rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     r10,r14

+        mov     r14,r15

+        ror     r15,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     r15,r14

+        shr     r14,6

+

+        ror     r15,19

+        xor     r12,r13

+        xor     r15,r14

+        add     r12,QWORD[88+rsp]

+

+        add     r12,QWORD[16+rsp]

+        mov     r13,rcx

+        add     r12,r15

+        mov     r14,r10

+        ror     r13,23

+        mov     r15,rdx

+

+        xor     r13,rcx

+        ror     r14,5

+        xor     r15,r8

+

+        mov     QWORD[16+rsp],r12

+        xor     r14,r10

+        and     r15,rcx

+

+        ror     r13,4

+        add     r12,r9

+        xor     r15,r8

+

+        ror     r14,6

+        xor     r13,rcx

+        add     r12,r15

+

+        mov     r15,r10

+        add     r12,QWORD[rbp]

+        xor     r14,r10

+

+        xor     r15,r11

+        ror     r13,14

+        mov     r9,r11

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     r9,rdi

+        add     rbx,r12

+        add     r9,r12

+

+        lea     rbp,[8+rbp]

+        mov     r13,QWORD[32+rsp]

+        mov     rdi,QWORD[8+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     r9,r14

+        mov     r14,rdi

+        ror     rdi,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     rdi,r14

+        shr     r14,6

+

+        ror     rdi,19

+        xor     r12,r13

+        xor     rdi,r14

+        add     r12,QWORD[96+rsp]

+

+        add     r12,QWORD[24+rsp]

+        mov     r13,rbx

+        add     r12,rdi

+        mov     r14,r9

+        ror     r13,23

+        mov     rdi,rcx

+

+        xor     r13,rbx

+        ror     r14,5

+        xor     rdi,rdx

+

+        mov     QWORD[24+rsp],r12

+        xor     r14,r9

+        and     rdi,rbx

+

+        ror     r13,4

+        add     r12,r8

+        xor     rdi,rdx

+

+        ror     r14,6

+        xor     r13,rbx

+        add     r12,rdi

+

+        mov     rdi,r9

+        add     r12,QWORD[rbp]

+        xor     r14,r9

+

+        xor     rdi,r10

+        ror     r13,14

+        mov     r8,r10

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     r8,r15

+        add     rax,r12

+        add     r8,r12

+

+        lea     rbp,[24+rbp]

+        mov     r13,QWORD[40+rsp]

+        mov     r15,QWORD[16+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     r8,r14

+        mov     r14,r15

+        ror     r15,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     r15,r14

+        shr     r14,6

+

+        ror     r15,19

+        xor     r12,r13

+        xor     r15,r14

+        add     r12,QWORD[104+rsp]

+

+        add     r12,QWORD[32+rsp]

+        mov     r13,rax

+        add     r12,r15

+        mov     r14,r8

+        ror     r13,23

+        mov     r15,rbx

+

+        xor     r13,rax

+        ror     r14,5

+        xor     r15,rcx

+

+        mov     QWORD[32+rsp],r12

+        xor     r14,r8

+        and     r15,rax

+

+        ror     r13,4

+        add     r12,rdx

+        xor     r15,rcx

+

+        ror     r14,6

+        xor     r13,rax

+        add     r12,r15

+

+        mov     r15,r8

+        add     r12,QWORD[rbp]

+        xor     r14,r8

+

+        xor     r15,r9

+        ror     r13,14

+        mov     rdx,r9

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     rdx,rdi

+        add     r11,r12

+        add     rdx,r12

+

+        lea     rbp,[8+rbp]

+        mov     r13,QWORD[48+rsp]

+        mov     rdi,QWORD[24+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     rdx,r14

+        mov     r14,rdi

+        ror     rdi,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     rdi,r14

+        shr     r14,6

+

+        ror     rdi,19

+        xor     r12,r13

+        xor     rdi,r14

+        add     r12,QWORD[112+rsp]

+

+        add     r12,QWORD[40+rsp]

+        mov     r13,r11

+        add     r12,rdi

+        mov     r14,rdx

+        ror     r13,23

+        mov     rdi,rax

+

+        xor     r13,r11

+        ror     r14,5

+        xor     rdi,rbx

+

+        mov     QWORD[40+rsp],r12

+        xor     r14,rdx

+        and     rdi,r11

+

+        ror     r13,4

+        add     r12,rcx

+        xor     rdi,rbx

+

+        ror     r14,6

+        xor     r13,r11

+        add     r12,rdi

+

+        mov     rdi,rdx

+        add     r12,QWORD[rbp]

+        xor     r14,rdx

+

+        xor     rdi,r8

+        ror     r13,14

+        mov     rcx,r8

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     rcx,r15

+        add     r10,r12

+        add     rcx,r12

+

+        lea     rbp,[24+rbp]

+        mov     r13,QWORD[56+rsp]

+        mov     r15,QWORD[32+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     rcx,r14

+        mov     r14,r15

+        ror     r15,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     r15,r14

+        shr     r14,6

+

+        ror     r15,19

+        xor     r12,r13

+        xor     r15,r14

+        add     r12,QWORD[120+rsp]

+

+        add     r12,QWORD[48+rsp]

+        mov     r13,r10

+        add     r12,r15

+        mov     r14,rcx

+        ror     r13,23

+        mov     r15,r11

+

+        xor     r13,r10

+        ror     r14,5

+        xor     r15,rax

+

+        mov     QWORD[48+rsp],r12

+        xor     r14,rcx

+        and     r15,r10

+

+        ror     r13,4

+        add     r12,rbx

+        xor     r15,rax

+

+        ror     r14,6

+        xor     r13,r10

+        add     r12,r15

+

+        mov     r15,rcx

+        add     r12,QWORD[rbp]

+        xor     r14,rcx

+

+        xor     r15,rdx

+        ror     r13,14

+        mov     rbx,rdx

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     rbx,rdi

+        add     r9,r12

+        add     rbx,r12

+

+        lea     rbp,[8+rbp]

+        mov     r13,QWORD[64+rsp]

+        mov     rdi,QWORD[40+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     rbx,r14

+        mov     r14,rdi

+        ror     rdi,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     rdi,r14

+        shr     r14,6

+

+        ror     rdi,19

+        xor     r12,r13

+        xor     rdi,r14

+        add     r12,QWORD[rsp]

+

+        add     r12,QWORD[56+rsp]

+        mov     r13,r9

+        add     r12,rdi

+        mov     r14,rbx

+        ror     r13,23

+        mov     rdi,r10

+

+        xor     r13,r9

+        ror     r14,5

+        xor     rdi,r11

+

+        mov     QWORD[56+rsp],r12

+        xor     r14,rbx

+        and     rdi,r9

+

+        ror     r13,4

+        add     r12,rax

+        xor     rdi,r11

+

+        ror     r14,6

+        xor     r13,r9

+        add     r12,rdi

+

+        mov     rdi,rbx

+        add     r12,QWORD[rbp]

+        xor     r14,rbx

+

+        xor     rdi,rcx

+        ror     r13,14

+        mov     rax,rcx

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     rax,r15

+        add     r8,r12

+        add     rax,r12

+

+        lea     rbp,[24+rbp]

+        mov     r13,QWORD[72+rsp]

+        mov     r15,QWORD[48+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     rax,r14

+        mov     r14,r15

+        ror     r15,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     r15,r14

+        shr     r14,6

+

+        ror     r15,19

+        xor     r12,r13

+        xor     r15,r14

+        add     r12,QWORD[8+rsp]

+

+        add     r12,QWORD[64+rsp]

+        mov     r13,r8

+        add     r12,r15

+        mov     r14,rax

+        ror     r13,23

+        mov     r15,r9

+

+        xor     r13,r8

+        ror     r14,5

+        xor     r15,r10

+

+        mov     QWORD[64+rsp],r12

+        xor     r14,rax

+        and     r15,r8

+

+        ror     r13,4

+        add     r12,r11

+        xor     r15,r10

+

+        ror     r14,6

+        xor     r13,r8

+        add     r12,r15

+

+        mov     r15,rax

+        add     r12,QWORD[rbp]

+        xor     r14,rax

+

+        xor     r15,rbx

+        ror     r13,14

+        mov     r11,rbx

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     r11,rdi

+        add     rdx,r12

+        add     r11,r12

+

+        lea     rbp,[8+rbp]

+        mov     r13,QWORD[80+rsp]

+        mov     rdi,QWORD[56+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     r11,r14

+        mov     r14,rdi

+        ror     rdi,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     rdi,r14

+        shr     r14,6

+

+        ror     rdi,19

+        xor     r12,r13

+        xor     rdi,r14

+        add     r12,QWORD[16+rsp]

+

+        add     r12,QWORD[72+rsp]

+        mov     r13,rdx

+        add     r12,rdi

+        mov     r14,r11

+        ror     r13,23

+        mov     rdi,r8

+

+        xor     r13,rdx

+        ror     r14,5

+        xor     rdi,r9

+

+        mov     QWORD[72+rsp],r12

+        xor     r14,r11

+        and     rdi,rdx

+

+        ror     r13,4

+        add     r12,r10

+        xor     rdi,r9

+

+        ror     r14,6

+        xor     r13,rdx

+        add     r12,rdi

+

+        mov     rdi,r11

+        add     r12,QWORD[rbp]

+        xor     r14,r11

+

+        xor     rdi,rax

+        ror     r13,14

+        mov     r10,rax

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     r10,r15

+        add     rcx,r12

+        add     r10,r12

+

+        lea     rbp,[24+rbp]

+        mov     r13,QWORD[88+rsp]

+        mov     r15,QWORD[64+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     r10,r14

+        mov     r14,r15

+        ror     r15,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     r15,r14

+        shr     r14,6

+

+        ror     r15,19

+        xor     r12,r13

+        xor     r15,r14

+        add     r12,QWORD[24+rsp]

+

+        add     r12,QWORD[80+rsp]

+        mov     r13,rcx

+        add     r12,r15

+        mov     r14,r10

+        ror     r13,23

+        mov     r15,rdx

+

+        xor     r13,rcx

+        ror     r14,5

+        xor     r15,r8

+

+        mov     QWORD[80+rsp],r12

+        xor     r14,r10

+        and     r15,rcx

+

+        ror     r13,4

+        add     r12,r9

+        xor     r15,r8

+

+        ror     r14,6

+        xor     r13,rcx

+        add     r12,r15

+

+        mov     r15,r10

+        add     r12,QWORD[rbp]

+        xor     r14,r10

+

+        xor     r15,r11

+        ror     r13,14

+        mov     r9,r11

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     r9,rdi

+        add     rbx,r12

+        add     r9,r12

+

+        lea     rbp,[8+rbp]

+        mov     r13,QWORD[96+rsp]

+        mov     rdi,QWORD[72+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     r9,r14

+        mov     r14,rdi

+        ror     rdi,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     rdi,r14

+        shr     r14,6

+

+        ror     rdi,19

+        xor     r12,r13

+        xor     rdi,r14

+        add     r12,QWORD[32+rsp]

+

+        add     r12,QWORD[88+rsp]

+        mov     r13,rbx

+        add     r12,rdi

+        mov     r14,r9

+        ror     r13,23

+        mov     rdi,rcx

+

+        xor     r13,rbx

+        ror     r14,5

+        xor     rdi,rdx

+

+        mov     QWORD[88+rsp],r12

+        xor     r14,r9

+        and     rdi,rbx

+

+        ror     r13,4

+        add     r12,r8

+        xor     rdi,rdx

+

+        ror     r14,6

+        xor     r13,rbx

+        add     r12,rdi

+

+        mov     rdi,r9

+        add     r12,QWORD[rbp]

+        xor     r14,r9

+

+        xor     rdi,r10

+        ror     r13,14

+        mov     r8,r10

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     r8,r15

+        add     rax,r12

+        add     r8,r12

+

+        lea     rbp,[24+rbp]

+        mov     r13,QWORD[104+rsp]

+        mov     r15,QWORD[80+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     r8,r14

+        mov     r14,r15

+        ror     r15,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     r15,r14

+        shr     r14,6

+

+        ror     r15,19

+        xor     r12,r13

+        xor     r15,r14

+        add     r12,QWORD[40+rsp]

+

+        add     r12,QWORD[96+rsp]

+        mov     r13,rax

+        add     r12,r15

+        mov     r14,r8

+        ror     r13,23

+        mov     r15,rbx

+

+        xor     r13,rax

+        ror     r14,5

+        xor     r15,rcx

+

+        mov     QWORD[96+rsp],r12

+        xor     r14,r8

+        and     r15,rax

+

+        ror     r13,4

+        add     r12,rdx

+        xor     r15,rcx

+

+        ror     r14,6

+        xor     r13,rax

+        add     r12,r15

+

+        mov     r15,r8

+        add     r12,QWORD[rbp]

+        xor     r14,r8

+

+        xor     r15,r9

+        ror     r13,14

+        mov     rdx,r9

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     rdx,rdi

+        add     r11,r12

+        add     rdx,r12

+

+        lea     rbp,[8+rbp]

+        mov     r13,QWORD[112+rsp]

+        mov     rdi,QWORD[88+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     rdx,r14

+        mov     r14,rdi

+        ror     rdi,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     rdi,r14

+        shr     r14,6

+

+        ror     rdi,19

+        xor     r12,r13

+        xor     rdi,r14

+        add     r12,QWORD[48+rsp]

+

+        add     r12,QWORD[104+rsp]

+        mov     r13,r11

+        add     r12,rdi

+        mov     r14,rdx

+        ror     r13,23

+        mov     rdi,rax

+

+        xor     r13,r11

+        ror     r14,5

+        xor     rdi,rbx

+

+        mov     QWORD[104+rsp],r12

+        xor     r14,rdx

+        and     rdi,r11

+

+        ror     r13,4

+        add     r12,rcx

+        xor     rdi,rbx

+

+        ror     r14,6

+        xor     r13,r11

+        add     r12,rdi

+

+        mov     rdi,rdx

+        add     r12,QWORD[rbp]

+        xor     r14,rdx

+

+        xor     rdi,r8

+        ror     r13,14

+        mov     rcx,r8

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     rcx,r15

+        add     r10,r12

+        add     rcx,r12

+

+        lea     rbp,[24+rbp]

+        mov     r13,QWORD[120+rsp]

+        mov     r15,QWORD[96+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     rcx,r14

+        mov     r14,r15

+        ror     r15,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     r15,r14

+        shr     r14,6

+

+        ror     r15,19

+        xor     r12,r13

+        xor     r15,r14

+        add     r12,QWORD[56+rsp]

+

+        add     r12,QWORD[112+rsp]

+        mov     r13,r10

+        add     r12,r15

+        mov     r14,rcx

+        ror     r13,23

+        mov     r15,r11

+

+        xor     r13,r10

+        ror     r14,5

+        xor     r15,rax

+

+        mov     QWORD[112+rsp],r12

+        xor     r14,rcx

+        and     r15,r10

+

+        ror     r13,4

+        add     r12,rbx

+        xor     r15,rax

+

+        ror     r14,6

+        xor     r13,r10

+        add     r12,r15

+

+        mov     r15,rcx

+        add     r12,QWORD[rbp]

+        xor     r14,rcx

+

+        xor     r15,rdx

+        ror     r13,14

+        mov     rbx,rdx

+

+        and     rdi,r15

+        ror     r14,28

+        add     r12,r13

+

+        xor     rbx,rdi

+        add     r9,r12

+        add     rbx,r12

+

+        lea     rbp,[8+rbp]

+        mov     r13,QWORD[rsp]

+        mov     rdi,QWORD[104+rsp]

+

+        mov     r12,r13

+        ror     r13,7

+        add     rbx,r14

+        mov     r14,rdi

+        ror     rdi,42

+

+        xor     r13,r12

+        shr     r12,7

+        ror     r13,1

+        xor     rdi,r14

+        shr     r14,6

+

+        ror     rdi,19

+        xor     r12,r13

+        xor     rdi,r14

+        add     r12,QWORD[64+rsp]

+

+        add     r12,QWORD[120+rsp]

+        mov     r13,r9

+        add     r12,rdi

+        mov     r14,rbx

+        ror     r13,23

+        mov     rdi,r10

+

+        xor     r13,r9

+        ror     r14,5

+        xor     rdi,r11

+

+        mov     QWORD[120+rsp],r12

+        xor     r14,rbx

+        and     rdi,r9

+

+        ror     r13,4

+        add     r12,rax

+        xor     rdi,r11

+

+        ror     r14,6

+        xor     r13,r9

+        add     r12,rdi

+

+        mov     rdi,rbx

+        add     r12,QWORD[rbp]

+        xor     r14,rbx

+

+        xor     rdi,rcx

+        ror     r13,14

+        mov     rax,rcx

+

+        and     r15,rdi

+        ror     r14,28

+        add     r12,r13

+

+        xor     rax,r15

+        add     r8,r12

+        add     rax,r12

+

+        lea     rbp,[24+rbp]

+        cmp     BYTE[7+rbp],0

+        jnz     NEAR $L$rounds_16_xx

+

+        mov     rdi,QWORD[((128+0))+rsp]

+        add     rax,r14

+        lea     rsi,[128+rsi]

+

+        add     rax,QWORD[rdi]

+        add     rbx,QWORD[8+rdi]

+        add     rcx,QWORD[16+rdi]

+        add     rdx,QWORD[24+rdi]

+        add     r8,QWORD[32+rdi]

+        add     r9,QWORD[40+rdi]

+        add     r10,QWORD[48+rdi]

+        add     r11,QWORD[56+rdi]

+

+        cmp     rsi,QWORD[((128+16))+rsp]

+

+        mov     QWORD[rdi],rax

+        mov     QWORD[8+rdi],rbx

+        mov     QWORD[16+rdi],rcx

+        mov     QWORD[24+rdi],rdx

+        mov     QWORD[32+rdi],r8

+        mov     QWORD[40+rdi],r9

+        mov     QWORD[48+rdi],r10

+        mov     QWORD[56+rdi],r11

+        jb      NEAR $L$loop

+

+        mov     rsi,QWORD[152+rsp]

+

+        mov     r15,QWORD[((-48))+rsi]

+

+        mov     r14,QWORD[((-40))+rsi]

+

+        mov     r13,QWORD[((-32))+rsi]

+

+        mov     r12,QWORD[((-24))+rsi]

+

+        mov     rbp,QWORD[((-16))+rsi]

+

+        mov     rbx,QWORD[((-8))+rsi]

+

+        lea     rsp,[rsi]

+

+$L$epilogue:

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_sha512_block_data_order:

+ALIGN   64

+

+K512:

+        DQ      0x428a2f98d728ae22,0x7137449123ef65cd

+        DQ      0x428a2f98d728ae22,0x7137449123ef65cd

+        DQ      0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc

+        DQ      0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc

+        DQ      0x3956c25bf348b538,0x59f111f1b605d019

+        DQ      0x3956c25bf348b538,0x59f111f1b605d019

+        DQ      0x923f82a4af194f9b,0xab1c5ed5da6d8118

+        DQ      0x923f82a4af194f9b,0xab1c5ed5da6d8118

+        DQ      0xd807aa98a3030242,0x12835b0145706fbe

+        DQ      0xd807aa98a3030242,0x12835b0145706fbe

+        DQ      0x243185be4ee4b28c,0x550c7dc3d5ffb4e2

+        DQ      0x243185be4ee4b28c,0x550c7dc3d5ffb4e2

+        DQ      0x72be5d74f27b896f,0x80deb1fe3b1696b1

+        DQ      0x72be5d74f27b896f,0x80deb1fe3b1696b1

+        DQ      0x9bdc06a725c71235,0xc19bf174cf692694

+        DQ      0x9bdc06a725c71235,0xc19bf174cf692694

+        DQ      0xe49b69c19ef14ad2,0xefbe4786384f25e3

+        DQ      0xe49b69c19ef14ad2,0xefbe4786384f25e3

+        DQ      0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65

+        DQ      0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65

+        DQ      0x2de92c6f592b0275,0x4a7484aa6ea6e483

+        DQ      0x2de92c6f592b0275,0x4a7484aa6ea6e483

+        DQ      0x5cb0a9dcbd41fbd4,0x76f988da831153b5

+        DQ      0x5cb0a9dcbd41fbd4,0x76f988da831153b5

+        DQ      0x983e5152ee66dfab,0xa831c66d2db43210

+        DQ      0x983e5152ee66dfab,0xa831c66d2db43210

+        DQ      0xb00327c898fb213f,0xbf597fc7beef0ee4

+        DQ      0xb00327c898fb213f,0xbf597fc7beef0ee4

+        DQ      0xc6e00bf33da88fc2,0xd5a79147930aa725

+        DQ      0xc6e00bf33da88fc2,0xd5a79147930aa725

+        DQ      0x06ca6351e003826f,0x142929670a0e6e70

+        DQ      0x06ca6351e003826f,0x142929670a0e6e70

+        DQ      0x27b70a8546d22ffc,0x2e1b21385c26c926

+        DQ      0x27b70a8546d22ffc,0x2e1b21385c26c926

+        DQ      0x4d2c6dfc5ac42aed,0x53380d139d95b3df

+        DQ      0x4d2c6dfc5ac42aed,0x53380d139d95b3df

+        DQ      0x650a73548baf63de,0x766a0abb3c77b2a8

+        DQ      0x650a73548baf63de,0x766a0abb3c77b2a8

+        DQ      0x81c2c92e47edaee6,0x92722c851482353b

+        DQ      0x81c2c92e47edaee6,0x92722c851482353b

+        DQ      0xa2bfe8a14cf10364,0xa81a664bbc423001

+        DQ      0xa2bfe8a14cf10364,0xa81a664bbc423001

+        DQ      0xc24b8b70d0f89791,0xc76c51a30654be30

+        DQ      0xc24b8b70d0f89791,0xc76c51a30654be30

+        DQ      0xd192e819d6ef5218,0xd69906245565a910

+        DQ      0xd192e819d6ef5218,0xd69906245565a910

+        DQ      0xf40e35855771202a,0x106aa07032bbd1b8

+        DQ      0xf40e35855771202a,0x106aa07032bbd1b8

+        DQ      0x19a4c116b8d2d0c8,0x1e376c085141ab53

+        DQ      0x19a4c116b8d2d0c8,0x1e376c085141ab53

+        DQ      0x2748774cdf8eeb99,0x34b0bcb5e19b48a8

+        DQ      0x2748774cdf8eeb99,0x34b0bcb5e19b48a8

+        DQ      0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb

+        DQ      0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb

+        DQ      0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3

+        DQ      0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3

+        DQ      0x748f82ee5defb2fc,0x78a5636f43172f60

+        DQ      0x748f82ee5defb2fc,0x78a5636f43172f60

+        DQ      0x84c87814a1f0ab72,0x8cc702081a6439ec

+        DQ      0x84c87814a1f0ab72,0x8cc702081a6439ec

+        DQ      0x90befffa23631e28,0xa4506cebde82bde9

+        DQ      0x90befffa23631e28,0xa4506cebde82bde9

+        DQ      0xbef9a3f7b2c67915,0xc67178f2e372532b

+        DQ      0xbef9a3f7b2c67915,0xc67178f2e372532b

+        DQ      0xca273eceea26619c,0xd186b8c721c0c207

+        DQ      0xca273eceea26619c,0xd186b8c721c0c207

+        DQ      0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178

+        DQ      0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178

+        DQ      0x06f067aa72176fba,0x0a637dc5a2c898a6

+        DQ      0x06f067aa72176fba,0x0a637dc5a2c898a6

+        DQ      0x113f9804bef90dae,0x1b710b35131c471b

+        DQ      0x113f9804bef90dae,0x1b710b35131c471b

+        DQ      0x28db77f523047d84,0x32caab7b40c72493

+        DQ      0x28db77f523047d84,0x32caab7b40c72493

+        DQ      0x3c9ebe0a15c9bebc,0x431d67c49c100d4c

+        DQ      0x3c9ebe0a15c9bebc,0x431d67c49c100d4c

+        DQ      0x4cc5d4becb3e42b6,0x597f299cfc657e2a

+        DQ      0x4cc5d4becb3e42b6,0x597f299cfc657e2a

+        DQ      0x5fcb6fab3ad6faec,0x6c44198c4a475817

+        DQ      0x5fcb6fab3ad6faec,0x6c44198c4a475817

+

+        DQ      0x0001020304050607,0x08090a0b0c0d0e0f

+        DQ      0x0001020304050607,0x08090a0b0c0d0e0f

+DB      83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97

+DB      110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54

+DB      52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121

+DB      32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46

+DB      111,114,103,62,0

+EXTERN  __imp_RtlVirtualUnwind

+

+ALIGN   16

+se_handler:

+        push    rsi

+        push    rdi

+        push    rbx

+        push    rbp

+        push    r12

+        push    r13

+        push    r14

+        push    r15

+        pushfq

+        sub     rsp,64

+

+        mov     rax,QWORD[120+r8]

+        mov     rbx,QWORD[248+r8]

+

+        mov     rsi,QWORD[8+r9]

+        mov     r11,QWORD[56+r9]

+

+        mov     r10d,DWORD[r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jb      NEAR $L$in_prologue

+

+        mov     rax,QWORD[152+r8]

+

+        mov     r10d,DWORD[4+r11]

+        lea     r10,[r10*1+rsi]

+        cmp     rbx,r10

+        jae     NEAR $L$in_prologue

+        mov     rsi,rax

+        mov     rax,QWORD[((128+24))+rax]

+

+        mov     rbx,QWORD[((-8))+rax]

+        mov     rbp,QWORD[((-16))+rax]

+        mov     r12,QWORD[((-24))+rax]

+        mov     r13,QWORD[((-32))+rax]

+        mov     r14,QWORD[((-40))+rax]

+        mov     r15,QWORD[((-48))+rax]

+        mov     QWORD[144+r8],rbx

+        mov     QWORD[160+r8],rbp

+        mov     QWORD[216+r8],r12

+        mov     QWORD[224+r8],r13

+        mov     QWORD[232+r8],r14

+        mov     QWORD[240+r8],r15

+

+        lea     r10,[$L$epilogue]

+        cmp     rbx,r10

+        jb      NEAR $L$in_prologue

+

+        lea     rsi,[((128+32))+rsi]

+        lea     rdi,[512+r8]

+        mov     ecx,12

+        DD      0xa548f3fc

+

+$L$in_prologue:

+        mov     rdi,QWORD[8+rax]

+        mov     rsi,QWORD[16+rax]

+        mov     QWORD[152+r8],rax

+        mov     QWORD[168+r8],rsi

+        mov     QWORD[176+r8],rdi

+

+        mov     rdi,QWORD[40+r9]

+        mov     rsi,r8

+        mov     ecx,154

+        DD      0xa548f3fc

+

+        mov     rsi,r9

+        xor     rcx,rcx

+        mov     rdx,QWORD[8+rsi]

+        mov     r8,QWORD[rsi]

+        mov     r9,QWORD[16+rsi]

+        mov     r10,QWORD[40+rsi]

+        lea     r11,[56+rsi]

+        lea     r12,[24+rsi]

+        mov     QWORD[32+rsp],r10

+        mov     QWORD[40+rsp],r11

+        mov     QWORD[48+rsp],r12

+        mov     QWORD[56+rsp],rcx

+        call    QWORD[__imp_RtlVirtualUnwind]

+

+        mov     eax,1

+        add     rsp,64

+        popfq

+        pop     r15

+        pop     r14

+        pop     r13

+        pop     r12

+        pop     rbp

+        pop     rbx

+        pop     rdi

+        pop     rsi

+        DB      0F3h,0C3h               ;repret

+

+section .pdata rdata align=4

+ALIGN   4

+        DD      $L$SEH_begin_sha512_block_data_order wrt ..imagebase

+        DD      $L$SEH_end_sha512_block_data_order wrt ..imagebase

+        DD      $L$SEH_info_sha512_block_data_order wrt ..imagebase

+section .xdata rdata align=8

+ALIGN   8

+$L$SEH_info_sha512_block_data_order:

+DB      9,0,0,0

+        DD      se_handler wrt ..imagebase

+        DD      $L$prologue wrt ..imagebase,$L$epilogue wrt
..imagebase

diff --git a/CryptoPkg/Library/OpensslLib/X64/crypto/x86_64cpuid.nasm
b/CryptoPkg/Library/OpensslLib/X64/crypto/x86_64cpuid.nasm
new file mode 100644
index 0000000000..2a3d5bcf72
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/X64/crypto/x86_64cpuid.nasm
@@ -0,0 +1,491 @@
+; WARNING: do not edit!

+; Generated from openssl/crypto/x86_64cpuid.pl

+;

+; Copyright 2005-2020 The OpenSSL Project Authors. All Rights
Reserved.

+;

+; Licensed under the OpenSSL license (the "License").  You may not use

+; this file except in compliance with the License.  You can obtain a
copy

+; in the file LICENSE in the source distribution or at

+; https://www.openssl.org/source/license.html

+

+default rel

+%define XMMWORD

+%define YMMWORD

+%define ZMMWORD

+EXTERN  OPENSSL_cpuid_setup

+

+section .CRT$XCU rdata align=8

+                DQ      OPENSSL_cpuid_setup

+

+

+common  OPENSSL_ia32cap_P 16

+

+section .text code align=64

+

+

+global  OPENSSL_atomic_add

+

+ALIGN   16

+OPENSSL_atomic_add:

+

+        mov     eax,DWORD[rcx]

+$L$spin:        lea     r8,[rax*1+rdx]

+DB      0xf0

+        cmpxchg DWORD[rcx],r8d

+        jne     NEAR $L$spin

+        mov     eax,r8d

+DB      0x48,0x98

+        DB      0F3h,0C3h               ;repret

+

+

+

+global  OPENSSL_rdtsc

+

+ALIGN   16

+OPENSSL_rdtsc:

+

+        rdtsc

+        shl     rdx,32

+        or      rax,rdx

+        DB      0F3h,0C3h               ;repret

+

+

+

+global  OPENSSL_ia32_cpuid

+

+ALIGN   16

+OPENSSL_ia32_cpuid:

+        mov     QWORD[8+rsp],rdi        ;WIN64 prologue

+        mov     QWORD[16+rsp],rsi

+        mov     rax,rsp

+$L$SEH_begin_OPENSSL_ia32_cpuid:

+        mov     rdi,rcx

+

+

+

+        mov     r8,rbx

+

+

+        xor     eax,eax

+        mov     QWORD[8+rdi],rax

+        cpuid

+        mov     r11d,eax

+

+        xor     eax,eax

+        cmp     ebx,0x756e6547

+        setne   al

+        mov     r9d,eax

+        cmp     edx,0x49656e69

+        setne   al

+        or      r9d,eax

+        cmp     ecx,0x6c65746e

+        setne   al

+        or      r9d,eax

+        jz      NEAR $L$intel

+

+        cmp     ebx,0x68747541

+        setne   al

+        mov     r10d,eax

+        cmp     edx,0x69746E65

+        setne   al

+        or      r10d,eax

+        cmp     ecx,0x444D4163

+        setne   al

+        or      r10d,eax

+        jnz     NEAR $L$intel

+

+

+        mov     eax,0x80000000

+        cpuid

+        cmp     eax,0x80000001

+        jb      NEAR $L$intel

+        mov     r10d,eax

+        mov     eax,0x80000001

+        cpuid

+        or      r9d,ecx

+        and     r9d,0x00000801

+

+        cmp     r10d,0x80000008

+        jb      NEAR $L$intel

+

+        mov     eax,0x80000008

+        cpuid

+        movzx   r10,cl

+        inc     r10

+

+        mov     eax,1

+        cpuid

+        bt      edx,28

+        jnc     NEAR $L$generic

+        shr     ebx,16

+        cmp     bl,r10b

+        ja      NEAR $L$generic

+        and     edx,0xefffffff

+        jmp     NEAR $L$generic

+

+$L$intel:

+        cmp     r11d,4

+        mov     r10d,-1

+        jb      NEAR $L$nocacheinfo

+

+        mov     eax,4

+        mov     ecx,0

+        cpuid

+        mov     r10d,eax

+        shr     r10d,14

+        and     r10d,0xfff

+

+$L$nocacheinfo:

+        mov     eax,1

+        cpuid

+        movd    xmm0,eax

+        and     edx,0xbfefffff

+        cmp     r9d,0

+        jne     NEAR $L$notintel

+        or      edx,0x40000000

+        and     ah,15

+        cmp     ah,15

+        jne     NEAR $L$notP4

+        or      edx,0x00100000

+$L$notP4:

+        cmp     ah,6

+        jne     NEAR $L$notintel

+        and     eax,0x0fff0ff0

+        cmp     eax,0x00050670

+        je      NEAR $L$knights

+        cmp     eax,0x00080650

+        jne     NEAR $L$notintel

+$L$knights:

+        and     ecx,0xfbffffff

+

+$L$notintel:

+        bt      edx,28

+        jnc     NEAR $L$generic

+        and     edx,0xefffffff

+        cmp     r10d,0

+        je      NEAR $L$generic

+

+        or      edx,0x10000000

+        shr     ebx,16

+        cmp     bl,1

+        ja      NEAR $L$generic

+        and     edx,0xefffffff

+$L$generic:

+        and     r9d,0x00000800

+        and     ecx,0xfffff7ff

+        or      r9d,ecx

+

+        mov     r10d,edx

+

+        cmp     r11d,7

+        jb      NEAR $L$no_extended_info

+        mov     eax,7

+        xor     ecx,ecx

+        cpuid

+        bt      r9d,26

+        jc      NEAR $L$notknights

+        and     ebx,0xfff7ffff

+$L$notknights:

+        movd    eax,xmm0

+        and     eax,0x0fff0ff0

+        cmp     eax,0x00050650

+        jne     NEAR $L$notskylakex

+        and     ebx,0xfffeffff

+

+$L$notskylakex:

+        mov     DWORD[8+rdi],ebx

+        mov     DWORD[12+rdi],ecx

+$L$no_extended_info:

+

+        bt      r9d,27

+        jnc     NEAR $L$clear_avx

+        xor     ecx,ecx

+DB      0x0f,0x01,0xd0

+        and     eax,0xe6

+        cmp     eax,0xe6

+        je      NEAR $L$done

+        and     DWORD[8+rdi],0x3fdeffff

+

+

+

+

+        and     eax,6

+        cmp     eax,6

+        je      NEAR $L$done

+$L$clear_avx:

+        mov     eax,0xefffe7ff

+        and     r9d,eax

+        mov     eax,0x3fdeffdf

+        and     DWORD[8+rdi],eax

+$L$done:

+        shl     r9,32

+        mov     eax,r10d

+        mov     rbx,r8

+

+        or      rax,r9

+        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue

+        mov     rsi,QWORD[16+rsp]

+        DB      0F3h,0C3h               ;repret

+

+$L$SEH_end_OPENSSL_ia32_cpuid:

+

+global  OPENSSL_cleanse

+

+ALIGN   16

+OPENSSL_cleanse:

+

+        xor     rax,rax

+        cmp     rdx,15

+        jae     NEAR $L$ot

+        cmp     rdx,0

+        je      NEAR $L$ret

+$L$ittle:

+        mov     BYTE[rcx],al

+        sub     rdx,1

+        lea     rcx,[1+rcx]

+        jnz     NEAR $L$ittle

+$L$ret:

+        DB      0F3h,0C3h               ;repret

+ALIGN   16

+$L$ot:

+        test    rcx,7

+        jz      NEAR $L$aligned

+        mov     BYTE[rcx],al

+        lea     rdx,[((-1))+rdx]

+        lea     rcx,[1+rcx]

+        jmp     NEAR $L$ot

+$L$aligned:

+        mov     QWORD[rcx],rax

+        lea     rdx,[((-8))+rdx]

+        test    rdx,-8

+        lea     rcx,[8+rcx]

+        jnz     NEAR $L$aligned

+        cmp     rdx,0

+        jne     NEAR $L$ittle

+        DB      0F3h,0C3h               ;repret

+

+

+

+global  CRYPTO_memcmp

+

+ALIGN   16

+CRYPTO_memcmp:

+

+        xor     rax,rax

+        xor     r10,r10

+        cmp     r8,0

+        je      NEAR $L$no_data

+        cmp     r8,16

+        jne     NEAR $L$oop_cmp

+        mov     r10,QWORD[rcx]

+        mov     r11,QWORD[8+rcx]

+        mov     r8,1

+        xor     r10,QWORD[rdx]

+        xor     r11,QWORD[8+rdx]

+        or      r10,r11

+        cmovnz  rax,r8

+        DB      0F3h,0C3h               ;repret

+

+ALIGN   16

+$L$oop_cmp:

+        mov     r10b,BYTE[rcx]

+        lea     rcx,[1+rcx]

+        xor     r10b,BYTE[rdx]

+        lea     rdx,[1+rdx]

+        or      al,r10b

+        dec     r8

+        jnz     NEAR $L$oop_cmp

+        neg     rax

+        shr     rax,63

+$L$no_data:

+        DB      0F3h,0C3h               ;repret

+

+

+global  OPENSSL_wipe_cpu

+

+ALIGN   16

+OPENSSL_wipe_cpu:

+        pxor    xmm0,xmm0

+        pxor    xmm1,xmm1

+        pxor    xmm2,xmm2

+        pxor    xmm3,xmm3

+        pxor    xmm4,xmm4

+        pxor    xmm5,xmm5

+        xor     rcx,rcx

+        xor     rdx,rdx

+        xor     r8,r8

+        xor     r9,r9

+        xor     r10,r10

+        xor     r11,r11

+        lea     rax,[8+rsp]

+        DB      0F3h,0C3h               ;repret

+

+global  OPENSSL_instrument_bus

+

+ALIGN   16

+OPENSSL_instrument_bus:

+

+        mov     r10,rcx

+        mov     rcx,rdx

+        mov     r11,rdx

+

+        rdtsc

+        mov     r8d,eax

+        mov     r9d,0

+        clflush [r10]

+DB      0xf0

+        add     DWORD[r10],r9d

+        jmp     NEAR $L$oop

+ALIGN   16

+$L$oop: rdtsc

+        mov     edx,eax

+        sub     eax,r8d

+        mov     r8d,edx

+        mov     r9d,eax

+        clflush [r10]

+DB      0xf0

+        add     DWORD[r10],eax

+        lea     r10,[4+r10]

+        sub     rcx,1

+        jnz     NEAR $L$oop

+

+        mov     rax,r11

+        DB      0F3h,0C3h               ;repret

+

+

+

+global  OPENSSL_instrument_bus2

+

+ALIGN   16

+OPENSSL_instrument_bus2:

+

+        mov     r10,rcx

+        mov     rcx,rdx

+        mov     r11,r8

+        mov     QWORD[8+rsp],rcx

+

+        rdtsc

+        mov     r8d,eax

+        mov     r9d,0

+

+        clflush [r10]

+DB      0xf0

+        add     DWORD[r10],r9d

+

+        rdtsc

+        mov     edx,eax

+        sub     eax,r8d

+        mov     r8d,edx

+        mov     r9d,eax

+$L$oop2:

+        clflush [r10]

+DB      0xf0

+        add     DWORD[r10],eax

+

+        sub     r11,1

+        jz      NEAR $L$done2

+

+        rdtsc

+        mov     edx,eax

+        sub     eax,r8d

+        mov     r8d,edx

+        cmp     eax,r9d

+        mov     r9d,eax

+        mov     edx,0

+        setne   dl

+        sub     rcx,rdx

+        lea     r10,[rdx*4+r10]

+        jnz     NEAR $L$oop2

+

+$L$done2:

+        mov     rax,QWORD[8+rsp]

+        sub     rax,rcx

+        DB      0F3h,0C3h               ;repret

+

+

+global  OPENSSL_ia32_rdrand_bytes

+

+ALIGN   16

+OPENSSL_ia32_rdrand_bytes:

+

+        xor     rax,rax

+        cmp     rdx,0

+        je      NEAR $L$done_rdrand_bytes

+

+        mov     r11,8

+$L$oop_rdrand_bytes:

+DB      73,15,199,242

+        jc      NEAR $L$break_rdrand_bytes

+        dec     r11

+        jnz     NEAR $L$oop_rdrand_bytes

+        jmp     NEAR $L$done_rdrand_bytes

+

+ALIGN   16

+$L$break_rdrand_bytes:

+        cmp     rdx,8

+        jb      NEAR $L$tail_rdrand_bytes

+        mov     QWORD[rcx],r10

+        lea     rcx,[8+rcx]

+        add     rax,8

+        sub     rdx,8

+        jz      NEAR $L$done_rdrand_bytes

+        mov     r11,8

+        jmp     NEAR $L$oop_rdrand_bytes

+

+ALIGN   16

+$L$tail_rdrand_bytes:

+        mov     BYTE[rcx],r10b

+        lea     rcx,[1+rcx]

+        inc     rax

+        shr     r10,8

+        dec     rdx

+        jnz     NEAR $L$tail_rdrand_bytes

+

+$L$done_rdrand_bytes:

+        xor     r10,r10

+        DB      0F3h,0C3h               ;repret

+

+

+global  OPENSSL_ia32_rdseed_bytes

+

+ALIGN   16

+OPENSSL_ia32_rdseed_bytes:

+

+        xor     rax,rax

+        cmp     rdx,0

+        je      NEAR $L$done_rdseed_bytes

+

+        mov     r11,8

+$L$oop_rdseed_bytes:

+DB      73,15,199,250

+        jc      NEAR $L$break_rdseed_bytes

+        dec     r11

+        jnz     NEAR $L$oop_rdseed_bytes

+        jmp     NEAR $L$done_rdseed_bytes

+

+ALIGN   16

+$L$break_rdseed_bytes:

+        cmp     rdx,8

+        jb      NEAR $L$tail_rdseed_bytes

+        mov     QWORD[rcx],r10

+        lea     rcx,[8+rcx]

+        add     rax,8

+        sub     rdx,8

+        jz      NEAR $L$done_rdseed_bytes

+        mov     r11,8

+        jmp     NEAR $L$oop_rdseed_bytes

+

+ALIGN   16

+$L$tail_rdseed_bytes:

+        mov     BYTE[rcx],r10b

+        lea     rcx,[1+rcx]

+        inc     rax

+        shr     r10,8

+        dec     rdx

+        jnz     NEAR $L$tail_rdseed_bytes

+

+$L$done_rdseed_bytes:

+        xor     r10,r10

+        DB      0F3h,0C3h               ;repret

+

+

--
2.28.0.windows.1