[PATCH v2 2/2] CryptoPkg/OpensslLib: Commit the auto-generated assembly files for X64


Laszlo Ersek
 

On 08/25/20 02:55, Andrew Fish wrote:


On Aug 19, 2020, at 11:06 AM, Laszlo Ersek <lersek@redhat.com> wrote:

On 08/19/20 17:37, Andrew Fish via groups.io wrote:


On Aug 18, 2020, at 2:22 PM, Zurcher, Christopher J <christopher.j.zurcher@intel.com> wrote:

Per the added header comment in process_files.pl:

# Due to the script wrapping required to process the OpenSSL
# configuration data, each native architecture must be processed
# individually by the maintainer (in addition to the standard version):
# ./process_files.pl
Side note: process_file.pl is missing a copyright statement.
True :(

Andrew, could you please report a BZ about it?
https://bugzilla.tianocore.org/show_bug.cgi?id=2925
Thanks much!
Laszlo


Andrew Fish
 

On Aug 19, 2020, at 11:06 AM, Laszlo Ersek <lersek@redhat.com> wrote:

On 08/19/20 17:37, Andrew Fish via groups.io wrote:


On Aug 18, 2020, at 2:22 PM, Zurcher, Christopher J <christopher.j.zurcher@intel.com> wrote:

Per the added header comment in process_files.pl:

# Due to the script wrapping required to process the OpenSSL
# configuration data, each native architecture must be processed
# individually by the maintainer (in addition to the standard version):
# ./process_files.pl
Side note: process_file.pl is missing a copyright statement.
True :(

Andrew, could you please report a BZ about it?
https://bugzilla.tianocore.org/show_bug.cgi?id=2925

Thanks!
Laszlo




Laszlo Ersek
 

On 08/19/20 17:37, Andrew Fish via groups.io wrote:


On Aug 18, 2020, at 2:22 PM, Zurcher, Christopher J <christopher.j.zurcher@intel.com> wrote:

Per the added header comment in process_files.pl:

# Due to the script wrapping required to process the OpenSSL
# configuration data, each native architecture must be processed
# individually by the maintainer (in addition to the standard version):
# ./process_files.pl
Side note: process_file.pl is missing a copyright statement.
True :(

Andrew, could you please report a BZ about it?

Thanks!
Laszlo


Laszlo Ersek
 

On 08/19/20 18:08, Kinney, Michael D wrote:
Laszlo,

The current CryptoPkg DCS file with use of the CRYPTO_SERVICES define is cumbersome.

#
# Flavor of PEI, DXE, SMM modules to build.
# Must be one of ALL, NONE, MIN_PEI, MIN_DXE_MIN_SMM.
# Default is ALL that is used for package build verification.
# PACKAGE - Package verification build of all components. Null
# versions of libraries are used to minimize build times.
# ALL - Build PEIM, DXE, and SMM drivers. Protocols and PPIs
# publish all services.
# NONE - Build PEIM, DXE, and SMM drivers. Protocols and PPIs
# publish no services. Used to verify compiler/linker
# optimizations are working correctly.
# MIN_PEI - Build PEIM with PPI that publishes minimum required
# services.
# MIN_DXE_MIN_SMM - Build DXE and SMM drivers with Protocols that publish
# minimum required services.
#
DEFINE CRYPTO_SERVICES = PACKAGE

There is a known limitation for using structured PCDs in a module scope and
that limitation is what resulted in the use of this define. Bob Feng
has provided a BaseTools patch that attempts to address this limitation.

https://edk2.groups.io/g/devel/message/63906

This patch is functional, but has one open issue around the PCD report. Once
this issue is resolved we will be able to specify structured PCD field values
in the scope of a single module. I have a branch that simplifies the DSC and
allows all flavors of the crypto modules to be built in a single invocation
of the build command. There is more cleanup of the DSC possible, but I
wanted to share a quick test case for Bob's patch.

https://github.com/mdkinney/edk2/tree/Bug_xxx_CryptoPkg_UseModuleScopedPcds

This feature supports both the generation of standard flavors of the crypto
modules that a platform could consume as a pre-built binary and also allows
a platform to choose their own profile by specifying the specific crypto APIs
needed in PEI, DXE, SMM when building crypto modules from sources.
Yes, this resolves my first problem entirely!

Thanks!
Laszlo


Best regards,

Mike

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

Hi,

On 08/18/20 23:33, Sean 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.
Here I'd only like to comment on this one aspect (= build OpenSSL as a
statically linked library vs. as a crypto service driver / PEIM).

Recently I tried to evaluate the crypto driver for OVMF. I started with
the PEI phase. The configuration interface (the PCD) is baroque, *BUT*
that is a direct consequence of OpenSSL offering a huge range of
interfaces. So no complaints about the config interface.

I also reviewed the CryptoPkg.dsc "pre-sets" (i.e., CRYPTO_SERVICES
being one of PACKAGE / ALL / NONE / MIN_PEI / MIN_DXE_MIN_SMM). I had
two problems:

- These pre-sets are supremely suitable for a platform that is composed
of multiple build runs; that is, build the crypto PEIM, build the DXE /
SMM protocol drivers, package up the resultant binaries, and *then*
build the actual platforms (which will then include the crypto service
drivers in *binary* form). On the other hand, the pre-sets are not
useful to a platform that is supposed to be built in a single-shot.
Importantly, I'm not saying that the pre-sets are *detrimental* to such
platforms -- they aren't. It's just that the pre-sets target a different
use case.

- The other problem I had was the one that we had discussed when the
crypto service driver was being introduced. Namely, selecting the
OpenSSL interfaces (interface families) that the platform actually consumes.

Now, I carefully tracked down the modules in OVMF that needed crypto
support, by *not* resolving SmmCryptLib, RuntimeCryptLib, TlsLib in
general [LibraryClasses] sections in the OVMF DSC files. Then I re-added
those lib-class resolutions as module-scoped <LibraryClasses> overrides
to the actual modules that needed them.

However, I didn't know how to even *begin* evaluating the specific "API
needs" of the modules identified thusly. On a Windows or Linux OS, when
you have a dynamically linked executable, and it doesn't find a symbol
in a shared library, you get a nice error message, and the application
doesn't start. On the other hand, if a crypto protocol call fails in SMM
because we missed a feature bit in the config PCD, the results are
somewhat less user-friendly.

The expression "minimum required services" in CryptoPkg.dsc seems
relevant, but it didn't convince me that it would cover everything
needed by -- for example -- VariableSmm, VariableRuntimeDxe, and TlsDxe.

So, given that I couldn't construct a "tight profile", I started my
investigation (for OVMF's PEI phase) by including the crypto service
PEIM with *all* interfaces enabled.

This would be restricted to "TPM_ENABLE", because only that is when
OVMF's PEI phase needs crypto -- due to including the various TPM1 and
TPM2 PEIMs.

So basically this check would replace the statically linked -- and
accordingly trimmed! -- "thick" OpenSSL library copies in the TPM1/PTM2
PEIMs, with the thin wrapper lib
(BaseCryptLibOnProtocolPpi/PeiCryptLib.inf) *plus* the full-blown crypto
service PEIM.

The result was a *violent* size explosion in PEIFV; at least in the
NOOPT build. Before:

PEIFV [64%Full] 917504 total, 592456 used, 325048 free
after:

the required fv image size 0x132968 exceeds the set fv image size
0xe0000
The PEIFV footprint more than doubled, from 592,456 bytes to 1,255,784
bytes.

I gave up there. Until the "crypto profile" construction is not
automated for platforms, somehow, I don't know how I could maintain OVMF
consuming the crypto service PEIMs/drivers.

(I wonder if we should maintain a "required crypto services" bitmap for
each individual PEIM / DXE / SMM driver inside edk2. And then, when a
platform includes any one such PEIM or driver, they'd know to "OR" the
bitmap for that particular module into their platform PCD setting.)

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.
(OK, I guess I can comment on this too, after all.)

I agree.

While perl is readily available on Linux build hosts, I remember:
- accommodating the python3 BaseTools requirements on my RHEL7 laptop,
- (almost) bumping the NASM version so we could compile the VMGEXIT
instruction for IA32,
- the python virtual environment discussions for running CI locally.

So I agree that new build dependencies should be avoided as much as
possible.

Thanks
Laszlo



Liming Gao
 

I think this is the separate tool task to support extra build steps in early build process. I suggest to submit another BZ to track it, and let tool experts evaluate the solution. Seemly, this support needs some time. If so, how handle this patch set? I prefer to review this patch set without the external dependency.

 

Thanks

Liming

From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Andrew Fish via groups.io
Sent: 2020
819 7:30
To: devel@edk2.groups.io; spbrogan@...
Cc: Kinney, Michael D <michael.d.kinney@...>; Wang, Jian J <jian.j.wang@...>; Zurcher, Christopher J <christopher.j.zurcher@...>; Yao, Jiewen <jiewen.yao@...>; Lu, XiaoyuX <xiaoyux.lu@...>; Ard Biesheuvel <ard.biesheuvel@...>
Subject: Re: [edk2-devel] [PATCH v2 2/2] CryptoPkg/OpensslLib: Commit the auto-generated assembly files for X64

 

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@...> 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@...>
Sent: Monday, August 17, 2020 7:37 PM
To: Zurcher, Christopher J <
christopher.j.zurcher@...>; Yao, Jiewen <jiewen.yao@...>; Kinney, Michael D
<
michael.d.kinney@...>; devel@edk2.groups.io
Cc: Lu, XiaoyuX <
xiaoyux.lu@...>; Ard Biesheuvel <ard.biesheuvel@...>
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@...>
Sent: Saturday, August 15, 2020 3:35 AM
To: Yao, Jiewen <
jiewen.yao@...>; Kinney, Michael D
<
michael.d.kinney@...>; devel@edk2.groups.io
Cc: Wang, Jian J <
jian.j.wang@...>; Lu, XiaoyuX <xiaoyux.lu@...>;
Ard Biesheuvel <
ard.biesheuvel@...>
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@...>
Sent: Thursday, August 13, 2020 08:46
To: Kinney, Michael D <
michael.d.kinney@...>; Zurcher, Christopher J
<
christopher.j.zurcher@...>; devel@edk2.groups.io
Cc: Wang, Jian J <
jian.j.wang@...>; Lu, XiaoyuX

<xiaoyux.lu@...>;

Ard Biesheuvel <ard.biesheuvel@...>
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@...>
Sent: Thursday, August 13, 2020 11:38 PM
To: Yao, Jiewen <
jiewen.yao@...>; Zurcher, Christopher J
<
christopher.j.zurcher@...>; devel@edk2.groups.io; Kinney, Michael

D

<michael.d.kinney@...>
Cc: Wang, Jian J <
jian.j.wang@...>; Lu, XiaoyuX

<xiaoyux.lu@...>;

Ard Biesheuvel <ard.biesheuvel@...>
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@...>
Sent: Thursday, August 13, 2020 8:25 AM
To: Zurcher, Christopher J <
christopher.j.zurcher@...>;

devel@edk2.groups.io

Cc: Wang, Jian J <jian.j.wang@...>; Lu, XiaoyuX

<xiaoyux.lu@...>; Kinney, Michael D

<michael.d.kinney@...>; Ard Biesheuvel <ard.biesheuvel@...>
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@...>
Sent: Tuesday, August 4, 2020 8:24 AM
To:
devel@edk2.groups.io
Cc: Yao, Jiewen <
jiewen.yao@...>; Wang, Jian J

<jian.j.wang@...>;

Lu, XiaoyuX <xiaoyux.lu@...>; Ard Biesheuvel

<ard.biesheuvel@...>

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@...>
Cc: Jian J Wang <
jian.j.wang@...>
Cc: Xiaoyu Lu <
xiaoyux.lu@...>
Cc: Ard Biesheuvel <
ard.biesheuvel@...>
Signed-off-by: Christopher J Zurcher <
christopher.j.zurcher@...>
---
 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