]> git.proxmox.com Git - mirror_edk2.git/commitdiff
CryptoPkg/OpensslLib: Commit the auto-generated assembly files for IA32
authorChristopher Zurcher <zurcher@gmail.com>
Wed, 21 Sep 2022 20:25:40 +0000 (04:25 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Fri, 23 Sep 2022 11:07:54 +0000 (11:07 +0000)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3654

Adding the auto-generated assembly files for IA32 architectures.

Cc: Yi Li <yi1.li@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Xiaoyu Lu <xiaoyu1.lu@intel.com>
Cc: Guomin Jiang <guomin.jiang@intel.com>
Signed-off-by: Christopher Zurcher <christopher.zurcher@microsoft.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
14 files changed:
CryptoPkg/Library/OpensslLib/IA32/crypto/aes/aesni-x86.nasm [new file with mode: 0644]
CryptoPkg/Library/OpensslLib/IA32/crypto/aes/vpaes-x86.nasm [new file with mode: 0644]
CryptoPkg/Library/OpensslLib/IA32/crypto/modes/ghash-x86.nasm [new file with mode: 0644]
CryptoPkg/Library/OpensslLib/IA32/crypto/sha/sha1-586.nasm [new file with mode: 0644]
CryptoPkg/Library/OpensslLib/IA32/crypto/sha/sha256-586.nasm [new file with mode: 0644]
CryptoPkg/Library/OpensslLib/IA32/crypto/sha/sha512-586.nasm [new file with mode: 0644]
CryptoPkg/Library/OpensslLib/IA32/crypto/x86cpuid.nasm [new file with mode: 0644]
CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/aes/aesni-x86.S [new file with mode: 0644]
CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/aes/vpaes-x86.S [new file with mode: 0644]
CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/modes/ghash-x86.S [new file with mode: 0644]
CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/sha/sha1-586.S [new file with mode: 0644]
CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/sha/sha256-586.S [new file with mode: 0644]
CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/sha/sha512-586.S [new file with mode: 0644]
CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/x86cpuid.S [new file with mode: 0644]

diff --git a/CryptoPkg/Library/OpensslLib/IA32/crypto/aes/aesni-x86.nasm b/CryptoPkg/Library/OpensslLib/IA32/crypto/aes/aesni-x86.nasm
new file mode 100644 (file)
index 0000000..e0b5058
--- /dev/null
@@ -0,0 +1,3212 @@
+; WARNING: do not edit!\r
+; Generated from openssl/crypto/aes/asm/aesni-x86.pl\r
+;\r
+; Copyright 2009-2020 The OpenSSL Project Authors. All Rights Reserved.\r
+;\r
+; Licensed under the OpenSSL license (the "License").  You may not use\r
+; this file except in compliance with the License.  You can obtain a copy\r
+; in the file LICENSE in the source distribution or at\r
+; https://www.openssl.org/source/license.html\r
+\r
+%ifidn __OUTPUT_FORMAT__,obj\r
+section code    use32 class=code align=64\r
+%elifidn __OUTPUT_FORMAT__,win32\r
+$@feat.00 equ 1\r
+section .text   code align=64\r
+%else\r
+section .text   code\r
+%endif\r
+;extern _OPENSSL_ia32cap_P\r
+global  _aesni_encrypt\r
+align   16\r
+_aesni_encrypt:\r
+L$_aesni_encrypt_begin:\r
+        mov     eax,DWORD [4+esp]\r
+        mov     edx,DWORD [12+esp]\r
+        movups  xmm2,[eax]\r
+        mov     ecx,DWORD [240+edx]\r
+        mov     eax,DWORD [8+esp]\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$000enc1_loop_1:\r
+db      102,15,56,220,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$000enc1_loop_1\r
+db      102,15,56,221,209\r
+        pxor    xmm0,xmm0\r
+        pxor    xmm1,xmm1\r
+        movups  [eax],xmm2\r
+        pxor    xmm2,xmm2\r
+        ret\r
+global  _aesni_decrypt\r
+align   16\r
+_aesni_decrypt:\r
+L$_aesni_decrypt_begin:\r
+        mov     eax,DWORD [4+esp]\r
+        mov     edx,DWORD [12+esp]\r
+        movups  xmm2,[eax]\r
+        mov     ecx,DWORD [240+edx]\r
+        mov     eax,DWORD [8+esp]\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$001dec1_loop_2:\r
+db      102,15,56,222,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$001dec1_loop_2\r
+db      102,15,56,223,209\r
+        pxor    xmm0,xmm0\r
+        pxor    xmm1,xmm1\r
+        movups  [eax],xmm2\r
+        pxor    xmm2,xmm2\r
+        ret\r
+align   16\r
+__aesni_encrypt2:\r
+        movups  xmm0,[edx]\r
+        shl     ecx,4\r
+        movups  xmm1,[16+edx]\r
+        xorps   xmm2,xmm0\r
+        pxor    xmm3,xmm0\r
+        movups  xmm0,[32+edx]\r
+        lea     edx,[32+ecx*1+edx]\r
+        neg     ecx\r
+        add     ecx,16\r
+L$002enc2_loop:\r
+db      102,15,56,220,209\r
+db      102,15,56,220,217\r
+        movups  xmm1,[ecx*1+edx]\r
+        add     ecx,32\r
+db      102,15,56,220,208\r
+db      102,15,56,220,216\r
+        movups  xmm0,[ecx*1+edx-16]\r
+        jnz     NEAR L$002enc2_loop\r
+db      102,15,56,220,209\r
+db      102,15,56,220,217\r
+db      102,15,56,221,208\r
+db      102,15,56,221,216\r
+        ret\r
+align   16\r
+__aesni_decrypt2:\r
+        movups  xmm0,[edx]\r
+        shl     ecx,4\r
+        movups  xmm1,[16+edx]\r
+        xorps   xmm2,xmm0\r
+        pxor    xmm3,xmm0\r
+        movups  xmm0,[32+edx]\r
+        lea     edx,[32+ecx*1+edx]\r
+        neg     ecx\r
+        add     ecx,16\r
+L$003dec2_loop:\r
+db      102,15,56,222,209\r
+db      102,15,56,222,217\r
+        movups  xmm1,[ecx*1+edx]\r
+        add     ecx,32\r
+db      102,15,56,222,208\r
+db      102,15,56,222,216\r
+        movups  xmm0,[ecx*1+edx-16]\r
+        jnz     NEAR L$003dec2_loop\r
+db      102,15,56,222,209\r
+db      102,15,56,222,217\r
+db      102,15,56,223,208\r
+db      102,15,56,223,216\r
+        ret\r
+align   16\r
+__aesni_encrypt3:\r
+        movups  xmm0,[edx]\r
+        shl     ecx,4\r
+        movups  xmm1,[16+edx]\r
+        xorps   xmm2,xmm0\r
+        pxor    xmm3,xmm0\r
+        pxor    xmm4,xmm0\r
+        movups  xmm0,[32+edx]\r
+        lea     edx,[32+ecx*1+edx]\r
+        neg     ecx\r
+        add     ecx,16\r
+L$004enc3_loop:\r
+db      102,15,56,220,209\r
+db      102,15,56,220,217\r
+db      102,15,56,220,225\r
+        movups  xmm1,[ecx*1+edx]\r
+        add     ecx,32\r
+db      102,15,56,220,208\r
+db      102,15,56,220,216\r
+db      102,15,56,220,224\r
+        movups  xmm0,[ecx*1+edx-16]\r
+        jnz     NEAR L$004enc3_loop\r
+db      102,15,56,220,209\r
+db      102,15,56,220,217\r
+db      102,15,56,220,225\r
+db      102,15,56,221,208\r
+db      102,15,56,221,216\r
+db      102,15,56,221,224\r
+        ret\r
+align   16\r
+__aesni_decrypt3:\r
+        movups  xmm0,[edx]\r
+        shl     ecx,4\r
+        movups  xmm1,[16+edx]\r
+        xorps   xmm2,xmm0\r
+        pxor    xmm3,xmm0\r
+        pxor    xmm4,xmm0\r
+        movups  xmm0,[32+edx]\r
+        lea     edx,[32+ecx*1+edx]\r
+        neg     ecx\r
+        add     ecx,16\r
+L$005dec3_loop:\r
+db      102,15,56,222,209\r
+db      102,15,56,222,217\r
+db      102,15,56,222,225\r
+        movups  xmm1,[ecx*1+edx]\r
+        add     ecx,32\r
+db      102,15,56,222,208\r
+db      102,15,56,222,216\r
+db      102,15,56,222,224\r
+        movups  xmm0,[ecx*1+edx-16]\r
+        jnz     NEAR L$005dec3_loop\r
+db      102,15,56,222,209\r
+db      102,15,56,222,217\r
+db      102,15,56,222,225\r
+db      102,15,56,223,208\r
+db      102,15,56,223,216\r
+db      102,15,56,223,224\r
+        ret\r
+align   16\r
+__aesni_encrypt4:\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        shl     ecx,4\r
+        xorps   xmm2,xmm0\r
+        pxor    xmm3,xmm0\r
+        pxor    xmm4,xmm0\r
+        pxor    xmm5,xmm0\r
+        movups  xmm0,[32+edx]\r
+        lea     edx,[32+ecx*1+edx]\r
+        neg     ecx\r
+db      15,31,64,0\r
+        add     ecx,16\r
+L$006enc4_loop:\r
+db      102,15,56,220,209\r
+db      102,15,56,220,217\r
+db      102,15,56,220,225\r
+db      102,15,56,220,233\r
+        movups  xmm1,[ecx*1+edx]\r
+        add     ecx,32\r
+db      102,15,56,220,208\r
+db      102,15,56,220,216\r
+db      102,15,56,220,224\r
+db      102,15,56,220,232\r
+        movups  xmm0,[ecx*1+edx-16]\r
+        jnz     NEAR L$006enc4_loop\r
+db      102,15,56,220,209\r
+db      102,15,56,220,217\r
+db      102,15,56,220,225\r
+db      102,15,56,220,233\r
+db      102,15,56,221,208\r
+db      102,15,56,221,216\r
+db      102,15,56,221,224\r
+db      102,15,56,221,232\r
+        ret\r
+align   16\r
+__aesni_decrypt4:\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        shl     ecx,4\r
+        xorps   xmm2,xmm0\r
+        pxor    xmm3,xmm0\r
+        pxor    xmm4,xmm0\r
+        pxor    xmm5,xmm0\r
+        movups  xmm0,[32+edx]\r
+        lea     edx,[32+ecx*1+edx]\r
+        neg     ecx\r
+db      15,31,64,0\r
+        add     ecx,16\r
+L$007dec4_loop:\r
+db      102,15,56,222,209\r
+db      102,15,56,222,217\r
+db      102,15,56,222,225\r
+db      102,15,56,222,233\r
+        movups  xmm1,[ecx*1+edx]\r
+        add     ecx,32\r
+db      102,15,56,222,208\r
+db      102,15,56,222,216\r
+db      102,15,56,222,224\r
+db      102,15,56,222,232\r
+        movups  xmm0,[ecx*1+edx-16]\r
+        jnz     NEAR L$007dec4_loop\r
+db      102,15,56,222,209\r
+db      102,15,56,222,217\r
+db      102,15,56,222,225\r
+db      102,15,56,222,233\r
+db      102,15,56,223,208\r
+db      102,15,56,223,216\r
+db      102,15,56,223,224\r
+db      102,15,56,223,232\r
+        ret\r
+align   16\r
+__aesni_encrypt6:\r
+        movups  xmm0,[edx]\r
+        shl     ecx,4\r
+        movups  xmm1,[16+edx]\r
+        xorps   xmm2,xmm0\r
+        pxor    xmm3,xmm0\r
+        pxor    xmm4,xmm0\r
+db      102,15,56,220,209\r
+        pxor    xmm5,xmm0\r
+        pxor    xmm6,xmm0\r
+db      102,15,56,220,217\r
+        lea     edx,[32+ecx*1+edx]\r
+        neg     ecx\r
+db      102,15,56,220,225\r
+        pxor    xmm7,xmm0\r
+        movups  xmm0,[ecx*1+edx]\r
+        add     ecx,16\r
+        jmp     NEAR L$008_aesni_encrypt6_inner\r
+align   16\r
+L$009enc6_loop:\r
+db      102,15,56,220,209\r
+db      102,15,56,220,217\r
+db      102,15,56,220,225\r
+L$008_aesni_encrypt6_inner:\r
+db      102,15,56,220,233\r
+db      102,15,56,220,241\r
+db      102,15,56,220,249\r
+L$_aesni_encrypt6_enter:\r
+        movups  xmm1,[ecx*1+edx]\r
+        add     ecx,32\r
+db      102,15,56,220,208\r
+db      102,15,56,220,216\r
+db      102,15,56,220,224\r
+db      102,15,56,220,232\r
+db      102,15,56,220,240\r
+db      102,15,56,220,248\r
+        movups  xmm0,[ecx*1+edx-16]\r
+        jnz     NEAR L$009enc6_loop\r
+db      102,15,56,220,209\r
+db      102,15,56,220,217\r
+db      102,15,56,220,225\r
+db      102,15,56,220,233\r
+db      102,15,56,220,241\r
+db      102,15,56,220,249\r
+db      102,15,56,221,208\r
+db      102,15,56,221,216\r
+db      102,15,56,221,224\r
+db      102,15,56,221,232\r
+db      102,15,56,221,240\r
+db      102,15,56,221,248\r
+        ret\r
+align   16\r
+__aesni_decrypt6:\r
+        movups  xmm0,[edx]\r
+        shl     ecx,4\r
+        movups  xmm1,[16+edx]\r
+        xorps   xmm2,xmm0\r
+        pxor    xmm3,xmm0\r
+        pxor    xmm4,xmm0\r
+db      102,15,56,222,209\r
+        pxor    xmm5,xmm0\r
+        pxor    xmm6,xmm0\r
+db      102,15,56,222,217\r
+        lea     edx,[32+ecx*1+edx]\r
+        neg     ecx\r
+db      102,15,56,222,225\r
+        pxor    xmm7,xmm0\r
+        movups  xmm0,[ecx*1+edx]\r
+        add     ecx,16\r
+        jmp     NEAR L$010_aesni_decrypt6_inner\r
+align   16\r
+L$011dec6_loop:\r
+db      102,15,56,222,209\r
+db      102,15,56,222,217\r
+db      102,15,56,222,225\r
+L$010_aesni_decrypt6_inner:\r
+db      102,15,56,222,233\r
+db      102,15,56,222,241\r
+db      102,15,56,222,249\r
+L$_aesni_decrypt6_enter:\r
+        movups  xmm1,[ecx*1+edx]\r
+        add     ecx,32\r
+db      102,15,56,222,208\r
+db      102,15,56,222,216\r
+db      102,15,56,222,224\r
+db      102,15,56,222,232\r
+db      102,15,56,222,240\r
+db      102,15,56,222,248\r
+        movups  xmm0,[ecx*1+edx-16]\r
+        jnz     NEAR L$011dec6_loop\r
+db      102,15,56,222,209\r
+db      102,15,56,222,217\r
+db      102,15,56,222,225\r
+db      102,15,56,222,233\r
+db      102,15,56,222,241\r
+db      102,15,56,222,249\r
+db      102,15,56,223,208\r
+db      102,15,56,223,216\r
+db      102,15,56,223,224\r
+db      102,15,56,223,232\r
+db      102,15,56,223,240\r
+db      102,15,56,223,248\r
+        ret\r
+global  _aesni_ecb_encrypt\r
+align   16\r
+_aesni_ecb_encrypt:\r
+L$_aesni_ecb_encrypt_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     esi,DWORD [20+esp]\r
+        mov     edi,DWORD [24+esp]\r
+        mov     eax,DWORD [28+esp]\r
+        mov     edx,DWORD [32+esp]\r
+        mov     ebx,DWORD [36+esp]\r
+        and     eax,-16\r
+        jz      NEAR L$012ecb_ret\r
+        mov     ecx,DWORD [240+edx]\r
+        test    ebx,ebx\r
+        jz      NEAR L$013ecb_decrypt\r
+        mov     ebp,edx\r
+        mov     ebx,ecx\r
+        cmp     eax,96\r
+        jb      NEAR L$014ecb_enc_tail\r
+        movdqu  xmm2,[esi]\r
+        movdqu  xmm3,[16+esi]\r
+        movdqu  xmm4,[32+esi]\r
+        movdqu  xmm5,[48+esi]\r
+        movdqu  xmm6,[64+esi]\r
+        movdqu  xmm7,[80+esi]\r
+        lea     esi,[96+esi]\r
+        sub     eax,96\r
+        jmp     NEAR L$015ecb_enc_loop6_enter\r
+align   16\r
+L$016ecb_enc_loop6:\r
+        movups  [edi],xmm2\r
+        movdqu  xmm2,[esi]\r
+        movups  [16+edi],xmm3\r
+        movdqu  xmm3,[16+esi]\r
+        movups  [32+edi],xmm4\r
+        movdqu  xmm4,[32+esi]\r
+        movups  [48+edi],xmm5\r
+        movdqu  xmm5,[48+esi]\r
+        movups  [64+edi],xmm6\r
+        movdqu  xmm6,[64+esi]\r
+        movups  [80+edi],xmm7\r
+        lea     edi,[96+edi]\r
+        movdqu  xmm7,[80+esi]\r
+        lea     esi,[96+esi]\r
+L$015ecb_enc_loop6_enter:\r
+        call    __aesni_encrypt6\r
+        mov     edx,ebp\r
+        mov     ecx,ebx\r
+        sub     eax,96\r
+        jnc     NEAR L$016ecb_enc_loop6\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        movups  [48+edi],xmm5\r
+        movups  [64+edi],xmm6\r
+        movups  [80+edi],xmm7\r
+        lea     edi,[96+edi]\r
+        add     eax,96\r
+        jz      NEAR L$012ecb_ret\r
+L$014ecb_enc_tail:\r
+        movups  xmm2,[esi]\r
+        cmp     eax,32\r
+        jb      NEAR L$017ecb_enc_one\r
+        movups  xmm3,[16+esi]\r
+        je      NEAR L$018ecb_enc_two\r
+        movups  xmm4,[32+esi]\r
+        cmp     eax,64\r
+        jb      NEAR L$019ecb_enc_three\r
+        movups  xmm5,[48+esi]\r
+        je      NEAR L$020ecb_enc_four\r
+        movups  xmm6,[64+esi]\r
+        xorps   xmm7,xmm7\r
+        call    __aesni_encrypt6\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        movups  [48+edi],xmm5\r
+        movups  [64+edi],xmm6\r
+        jmp     NEAR L$012ecb_ret\r
+align   16\r
+L$017ecb_enc_one:\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$021enc1_loop_3:\r
+db      102,15,56,220,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$021enc1_loop_3\r
+db      102,15,56,221,209\r
+        movups  [edi],xmm2\r
+        jmp     NEAR L$012ecb_ret\r
+align   16\r
+L$018ecb_enc_two:\r
+        call    __aesni_encrypt2\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        jmp     NEAR L$012ecb_ret\r
+align   16\r
+L$019ecb_enc_three:\r
+        call    __aesni_encrypt3\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        jmp     NEAR L$012ecb_ret\r
+align   16\r
+L$020ecb_enc_four:\r
+        call    __aesni_encrypt4\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        movups  [48+edi],xmm5\r
+        jmp     NEAR L$012ecb_ret\r
+align   16\r
+L$013ecb_decrypt:\r
+        mov     ebp,edx\r
+        mov     ebx,ecx\r
+        cmp     eax,96\r
+        jb      NEAR L$022ecb_dec_tail\r
+        movdqu  xmm2,[esi]\r
+        movdqu  xmm3,[16+esi]\r
+        movdqu  xmm4,[32+esi]\r
+        movdqu  xmm5,[48+esi]\r
+        movdqu  xmm6,[64+esi]\r
+        movdqu  xmm7,[80+esi]\r
+        lea     esi,[96+esi]\r
+        sub     eax,96\r
+        jmp     NEAR L$023ecb_dec_loop6_enter\r
+align   16\r
+L$024ecb_dec_loop6:\r
+        movups  [edi],xmm2\r
+        movdqu  xmm2,[esi]\r
+        movups  [16+edi],xmm3\r
+        movdqu  xmm3,[16+esi]\r
+        movups  [32+edi],xmm4\r
+        movdqu  xmm4,[32+esi]\r
+        movups  [48+edi],xmm5\r
+        movdqu  xmm5,[48+esi]\r
+        movups  [64+edi],xmm6\r
+        movdqu  xmm6,[64+esi]\r
+        movups  [80+edi],xmm7\r
+        lea     edi,[96+edi]\r
+        movdqu  xmm7,[80+esi]\r
+        lea     esi,[96+esi]\r
+L$023ecb_dec_loop6_enter:\r
+        call    __aesni_decrypt6\r
+        mov     edx,ebp\r
+        mov     ecx,ebx\r
+        sub     eax,96\r
+        jnc     NEAR L$024ecb_dec_loop6\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        movups  [48+edi],xmm5\r
+        movups  [64+edi],xmm6\r
+        movups  [80+edi],xmm7\r
+        lea     edi,[96+edi]\r
+        add     eax,96\r
+        jz      NEAR L$012ecb_ret\r
+L$022ecb_dec_tail:\r
+        movups  xmm2,[esi]\r
+        cmp     eax,32\r
+        jb      NEAR L$025ecb_dec_one\r
+        movups  xmm3,[16+esi]\r
+        je      NEAR L$026ecb_dec_two\r
+        movups  xmm4,[32+esi]\r
+        cmp     eax,64\r
+        jb      NEAR L$027ecb_dec_three\r
+        movups  xmm5,[48+esi]\r
+        je      NEAR L$028ecb_dec_four\r
+        movups  xmm6,[64+esi]\r
+        xorps   xmm7,xmm7\r
+        call    __aesni_decrypt6\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        movups  [48+edi],xmm5\r
+        movups  [64+edi],xmm6\r
+        jmp     NEAR L$012ecb_ret\r
+align   16\r
+L$025ecb_dec_one:\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$029dec1_loop_4:\r
+db      102,15,56,222,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$029dec1_loop_4\r
+db      102,15,56,223,209\r
+        movups  [edi],xmm2\r
+        jmp     NEAR L$012ecb_ret\r
+align   16\r
+L$026ecb_dec_two:\r
+        call    __aesni_decrypt2\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        jmp     NEAR L$012ecb_ret\r
+align   16\r
+L$027ecb_dec_three:\r
+        call    __aesni_decrypt3\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        jmp     NEAR L$012ecb_ret\r
+align   16\r
+L$028ecb_dec_four:\r
+        call    __aesni_decrypt4\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        movups  [48+edi],xmm5\r
+L$012ecb_ret:\r
+        pxor    xmm0,xmm0\r
+        pxor    xmm1,xmm1\r
+        pxor    xmm2,xmm2\r
+        pxor    xmm3,xmm3\r
+        pxor    xmm4,xmm4\r
+        pxor    xmm5,xmm5\r
+        pxor    xmm6,xmm6\r
+        pxor    xmm7,xmm7\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _aesni_ccm64_encrypt_blocks\r
+align   16\r
+_aesni_ccm64_encrypt_blocks:\r
+L$_aesni_ccm64_encrypt_blocks_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     esi,DWORD [20+esp]\r
+        mov     edi,DWORD [24+esp]\r
+        mov     eax,DWORD [28+esp]\r
+        mov     edx,DWORD [32+esp]\r
+        mov     ebx,DWORD [36+esp]\r
+        mov     ecx,DWORD [40+esp]\r
+        mov     ebp,esp\r
+        sub     esp,60\r
+        and     esp,-16\r
+        mov     DWORD [48+esp],ebp\r
+        movdqu  xmm7,[ebx]\r
+        movdqu  xmm3,[ecx]\r
+        mov     ecx,DWORD [240+edx]\r
+        mov     DWORD [esp],202182159\r
+        mov     DWORD [4+esp],134810123\r
+        mov     DWORD [8+esp],67438087\r
+        mov     DWORD [12+esp],66051\r
+        mov     ebx,1\r
+        xor     ebp,ebp\r
+        mov     DWORD [16+esp],ebx\r
+        mov     DWORD [20+esp],ebp\r
+        mov     DWORD [24+esp],ebp\r
+        mov     DWORD [28+esp],ebp\r
+        shl     ecx,4\r
+        mov     ebx,16\r
+        lea     ebp,[edx]\r
+        movdqa  xmm5,[esp]\r
+        movdqa  xmm2,xmm7\r
+        lea     edx,[32+ecx*1+edx]\r
+        sub     ebx,ecx\r
+db      102,15,56,0,253\r
+L$030ccm64_enc_outer:\r
+        movups  xmm0,[ebp]\r
+        mov     ecx,ebx\r
+        movups  xmm6,[esi]\r
+        xorps   xmm2,xmm0\r
+        movups  xmm1,[16+ebp]\r
+        xorps   xmm0,xmm6\r
+        xorps   xmm3,xmm0\r
+        movups  xmm0,[32+ebp]\r
+L$031ccm64_enc2_loop:\r
+db      102,15,56,220,209\r
+db      102,15,56,220,217\r
+        movups  xmm1,[ecx*1+edx]\r
+        add     ecx,32\r
+db      102,15,56,220,208\r
+db      102,15,56,220,216\r
+        movups  xmm0,[ecx*1+edx-16]\r
+        jnz     NEAR L$031ccm64_enc2_loop\r
+db      102,15,56,220,209\r
+db      102,15,56,220,217\r
+        paddq   xmm7,[16+esp]\r
+        dec     eax\r
+db      102,15,56,221,208\r
+db      102,15,56,221,216\r
+        lea     esi,[16+esi]\r
+        xorps   xmm6,xmm2\r
+        movdqa  xmm2,xmm7\r
+        movups  [edi],xmm6\r
+db      102,15,56,0,213\r
+        lea     edi,[16+edi]\r
+        jnz     NEAR L$030ccm64_enc_outer\r
+        mov     esp,DWORD [48+esp]\r
+        mov     edi,DWORD [40+esp]\r
+        movups  [edi],xmm3\r
+        pxor    xmm0,xmm0\r
+        pxor    xmm1,xmm1\r
+        pxor    xmm2,xmm2\r
+        pxor    xmm3,xmm3\r
+        pxor    xmm4,xmm4\r
+        pxor    xmm5,xmm5\r
+        pxor    xmm6,xmm6\r
+        pxor    xmm7,xmm7\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _aesni_ccm64_decrypt_blocks\r
+align   16\r
+_aesni_ccm64_decrypt_blocks:\r
+L$_aesni_ccm64_decrypt_blocks_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     esi,DWORD [20+esp]\r
+        mov     edi,DWORD [24+esp]\r
+        mov     eax,DWORD [28+esp]\r
+        mov     edx,DWORD [32+esp]\r
+        mov     ebx,DWORD [36+esp]\r
+        mov     ecx,DWORD [40+esp]\r
+        mov     ebp,esp\r
+        sub     esp,60\r
+        and     esp,-16\r
+        mov     DWORD [48+esp],ebp\r
+        movdqu  xmm7,[ebx]\r
+        movdqu  xmm3,[ecx]\r
+        mov     ecx,DWORD [240+edx]\r
+        mov     DWORD [esp],202182159\r
+        mov     DWORD [4+esp],134810123\r
+        mov     DWORD [8+esp],67438087\r
+        mov     DWORD [12+esp],66051\r
+        mov     ebx,1\r
+        xor     ebp,ebp\r
+        mov     DWORD [16+esp],ebx\r
+        mov     DWORD [20+esp],ebp\r
+        mov     DWORD [24+esp],ebp\r
+        mov     DWORD [28+esp],ebp\r
+        movdqa  xmm5,[esp]\r
+        movdqa  xmm2,xmm7\r
+        mov     ebp,edx\r
+        mov     ebx,ecx\r
+db      102,15,56,0,253\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$032enc1_loop_5:\r
+db      102,15,56,220,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$032enc1_loop_5\r
+db      102,15,56,221,209\r
+        shl     ebx,4\r
+        mov     ecx,16\r
+        movups  xmm6,[esi]\r
+        paddq   xmm7,[16+esp]\r
+        lea     esi,[16+esi]\r
+        sub     ecx,ebx\r
+        lea     edx,[32+ebx*1+ebp]\r
+        mov     ebx,ecx\r
+        jmp     NEAR L$033ccm64_dec_outer\r
+align   16\r
+L$033ccm64_dec_outer:\r
+        xorps   xmm6,xmm2\r
+        movdqa  xmm2,xmm7\r
+        movups  [edi],xmm6\r
+        lea     edi,[16+edi]\r
+db      102,15,56,0,213\r
+        sub     eax,1\r
+        jz      NEAR L$034ccm64_dec_break\r
+        movups  xmm0,[ebp]\r
+        mov     ecx,ebx\r
+        movups  xmm1,[16+ebp]\r
+        xorps   xmm6,xmm0\r
+        xorps   xmm2,xmm0\r
+        xorps   xmm3,xmm6\r
+        movups  xmm0,[32+ebp]\r
+L$035ccm64_dec2_loop:\r
+db      102,15,56,220,209\r
+db      102,15,56,220,217\r
+        movups  xmm1,[ecx*1+edx]\r
+        add     ecx,32\r
+db      102,15,56,220,208\r
+db      102,15,56,220,216\r
+        movups  xmm0,[ecx*1+edx-16]\r
+        jnz     NEAR L$035ccm64_dec2_loop\r
+        movups  xmm6,[esi]\r
+        paddq   xmm7,[16+esp]\r
+db      102,15,56,220,209\r
+db      102,15,56,220,217\r
+db      102,15,56,221,208\r
+db      102,15,56,221,216\r
+        lea     esi,[16+esi]\r
+        jmp     NEAR L$033ccm64_dec_outer\r
+align   16\r
+L$034ccm64_dec_break:\r
+        mov     ecx,DWORD [240+ebp]\r
+        mov     edx,ebp\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        xorps   xmm6,xmm0\r
+        lea     edx,[32+edx]\r
+        xorps   xmm3,xmm6\r
+L$036enc1_loop_6:\r
+db      102,15,56,220,217\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$036enc1_loop_6\r
+db      102,15,56,221,217\r
+        mov     esp,DWORD [48+esp]\r
+        mov     edi,DWORD [40+esp]\r
+        movups  [edi],xmm3\r
+        pxor    xmm0,xmm0\r
+        pxor    xmm1,xmm1\r
+        pxor    xmm2,xmm2\r
+        pxor    xmm3,xmm3\r
+        pxor    xmm4,xmm4\r
+        pxor    xmm5,xmm5\r
+        pxor    xmm6,xmm6\r
+        pxor    xmm7,xmm7\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _aesni_ctr32_encrypt_blocks\r
+align   16\r
+_aesni_ctr32_encrypt_blocks:\r
+L$_aesni_ctr32_encrypt_blocks_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     esi,DWORD [20+esp]\r
+        mov     edi,DWORD [24+esp]\r
+        mov     eax,DWORD [28+esp]\r
+        mov     edx,DWORD [32+esp]\r
+        mov     ebx,DWORD [36+esp]\r
+        mov     ebp,esp\r
+        sub     esp,88\r
+        and     esp,-16\r
+        mov     DWORD [80+esp],ebp\r
+        cmp     eax,1\r
+        je      NEAR L$037ctr32_one_shortcut\r
+        movdqu  xmm7,[ebx]\r
+        mov     DWORD [esp],202182159\r
+        mov     DWORD [4+esp],134810123\r
+        mov     DWORD [8+esp],67438087\r
+        mov     DWORD [12+esp],66051\r
+        mov     ecx,6\r
+        xor     ebp,ebp\r
+        mov     DWORD [16+esp],ecx\r
+        mov     DWORD [20+esp],ecx\r
+        mov     DWORD [24+esp],ecx\r
+        mov     DWORD [28+esp],ebp\r
+db      102,15,58,22,251,3\r
+db      102,15,58,34,253,3\r
+        mov     ecx,DWORD [240+edx]\r
+        bswap   ebx\r
+        pxor    xmm0,xmm0\r
+        pxor    xmm1,xmm1\r
+        movdqa  xmm2,[esp]\r
+db      102,15,58,34,195,0\r
+        lea     ebp,[3+ebx]\r
+db      102,15,58,34,205,0\r
+        inc     ebx\r
+db      102,15,58,34,195,1\r
+        inc     ebp\r
+db      102,15,58,34,205,1\r
+        inc     ebx\r
+db      102,15,58,34,195,2\r
+        inc     ebp\r
+db      102,15,58,34,205,2\r
+        movdqa  [48+esp],xmm0\r
+db      102,15,56,0,194\r
+        movdqu  xmm6,[edx]\r
+        movdqa  [64+esp],xmm1\r
+db      102,15,56,0,202\r
+        pshufd  xmm2,xmm0,192\r
+        pshufd  xmm3,xmm0,128\r
+        cmp     eax,6\r
+        jb      NEAR L$038ctr32_tail\r
+        pxor    xmm7,xmm6\r
+        shl     ecx,4\r
+        mov     ebx,16\r
+        movdqa  [32+esp],xmm7\r
+        mov     ebp,edx\r
+        sub     ebx,ecx\r
+        lea     edx,[32+ecx*1+edx]\r
+        sub     eax,6\r
+        jmp     NEAR L$039ctr32_loop6\r
+align   16\r
+L$039ctr32_loop6:\r
+        pshufd  xmm4,xmm0,64\r
+        movdqa  xmm0,[32+esp]\r
+        pshufd  xmm5,xmm1,192\r
+        pxor    xmm2,xmm0\r
+        pshufd  xmm6,xmm1,128\r
+        pxor    xmm3,xmm0\r
+        pshufd  xmm7,xmm1,64\r
+        movups  xmm1,[16+ebp]\r
+        pxor    xmm4,xmm0\r
+        pxor    xmm5,xmm0\r
+db      102,15,56,220,209\r
+        pxor    xmm6,xmm0\r
+        pxor    xmm7,xmm0\r
+db      102,15,56,220,217\r
+        movups  xmm0,[32+ebp]\r
+        mov     ecx,ebx\r
+db      102,15,56,220,225\r
+db      102,15,56,220,233\r
+db      102,15,56,220,241\r
+db      102,15,56,220,249\r
+        call    L$_aesni_encrypt6_enter\r
+        movups  xmm1,[esi]\r
+        movups  xmm0,[16+esi]\r
+        xorps   xmm2,xmm1\r
+        movups  xmm1,[32+esi]\r
+        xorps   xmm3,xmm0\r
+        movups  [edi],xmm2\r
+        movdqa  xmm0,[16+esp]\r
+        xorps   xmm4,xmm1\r
+        movdqa  xmm1,[64+esp]\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        paddd   xmm1,xmm0\r
+        paddd   xmm0,[48+esp]\r
+        movdqa  xmm2,[esp]\r
+        movups  xmm3,[48+esi]\r
+        movups  xmm4,[64+esi]\r
+        xorps   xmm5,xmm3\r
+        movups  xmm3,[80+esi]\r
+        lea     esi,[96+esi]\r
+        movdqa  [48+esp],xmm0\r
+db      102,15,56,0,194\r
+        xorps   xmm6,xmm4\r
+        movups  [48+edi],xmm5\r
+        xorps   xmm7,xmm3\r
+        movdqa  [64+esp],xmm1\r
+db      102,15,56,0,202\r
+        movups  [64+edi],xmm6\r
+        pshufd  xmm2,xmm0,192\r
+        movups  [80+edi],xmm7\r
+        lea     edi,[96+edi]\r
+        pshufd  xmm3,xmm0,128\r
+        sub     eax,6\r
+        jnc     NEAR L$039ctr32_loop6\r
+        add     eax,6\r
+        jz      NEAR L$040ctr32_ret\r
+        movdqu  xmm7,[ebp]\r
+        mov     edx,ebp\r
+        pxor    xmm7,[32+esp]\r
+        mov     ecx,DWORD [240+ebp]\r
+L$038ctr32_tail:\r
+        por     xmm2,xmm7\r
+        cmp     eax,2\r
+        jb      NEAR L$041ctr32_one\r
+        pshufd  xmm4,xmm0,64\r
+        por     xmm3,xmm7\r
+        je      NEAR L$042ctr32_two\r
+        pshufd  xmm5,xmm1,192\r
+        por     xmm4,xmm7\r
+        cmp     eax,4\r
+        jb      NEAR L$043ctr32_three\r
+        pshufd  xmm6,xmm1,128\r
+        por     xmm5,xmm7\r
+        je      NEAR L$044ctr32_four\r
+        por     xmm6,xmm7\r
+        call    __aesni_encrypt6\r
+        movups  xmm1,[esi]\r
+        movups  xmm0,[16+esi]\r
+        xorps   xmm2,xmm1\r
+        movups  xmm1,[32+esi]\r
+        xorps   xmm3,xmm0\r
+        movups  xmm0,[48+esi]\r
+        xorps   xmm4,xmm1\r
+        movups  xmm1,[64+esi]\r
+        xorps   xmm5,xmm0\r
+        movups  [edi],xmm2\r
+        xorps   xmm6,xmm1\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        movups  [48+edi],xmm5\r
+        movups  [64+edi],xmm6\r
+        jmp     NEAR L$040ctr32_ret\r
+align   16\r
+L$037ctr32_one_shortcut:\r
+        movups  xmm2,[ebx]\r
+        mov     ecx,DWORD [240+edx]\r
+L$041ctr32_one:\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$045enc1_loop_7:\r
+db      102,15,56,220,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$045enc1_loop_7\r
+db      102,15,56,221,209\r
+        movups  xmm6,[esi]\r
+        xorps   xmm6,xmm2\r
+        movups  [edi],xmm6\r
+        jmp     NEAR L$040ctr32_ret\r
+align   16\r
+L$042ctr32_two:\r
+        call    __aesni_encrypt2\r
+        movups  xmm5,[esi]\r
+        movups  xmm6,[16+esi]\r
+        xorps   xmm2,xmm5\r
+        xorps   xmm3,xmm6\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        jmp     NEAR L$040ctr32_ret\r
+align   16\r
+L$043ctr32_three:\r
+        call    __aesni_encrypt3\r
+        movups  xmm5,[esi]\r
+        movups  xmm6,[16+esi]\r
+        xorps   xmm2,xmm5\r
+        movups  xmm7,[32+esi]\r
+        xorps   xmm3,xmm6\r
+        movups  [edi],xmm2\r
+        xorps   xmm4,xmm7\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        jmp     NEAR L$040ctr32_ret\r
+align   16\r
+L$044ctr32_four:\r
+        call    __aesni_encrypt4\r
+        movups  xmm6,[esi]\r
+        movups  xmm7,[16+esi]\r
+        movups  xmm1,[32+esi]\r
+        xorps   xmm2,xmm6\r
+        movups  xmm0,[48+esi]\r
+        xorps   xmm3,xmm7\r
+        movups  [edi],xmm2\r
+        xorps   xmm4,xmm1\r
+        movups  [16+edi],xmm3\r
+        xorps   xmm5,xmm0\r
+        movups  [32+edi],xmm4\r
+        movups  [48+edi],xmm5\r
+L$040ctr32_ret:\r
+        pxor    xmm0,xmm0\r
+        pxor    xmm1,xmm1\r
+        pxor    xmm2,xmm2\r
+        pxor    xmm3,xmm3\r
+        pxor    xmm4,xmm4\r
+        movdqa  [32+esp],xmm0\r
+        pxor    xmm5,xmm5\r
+        movdqa  [48+esp],xmm0\r
+        pxor    xmm6,xmm6\r
+        movdqa  [64+esp],xmm0\r
+        pxor    xmm7,xmm7\r
+        mov     esp,DWORD [80+esp]\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _aesni_xts_encrypt\r
+align   16\r
+_aesni_xts_encrypt:\r
+L$_aesni_xts_encrypt_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     edx,DWORD [36+esp]\r
+        mov     esi,DWORD [40+esp]\r
+        mov     ecx,DWORD [240+edx]\r
+        movups  xmm2,[esi]\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$046enc1_loop_8:\r
+db      102,15,56,220,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$046enc1_loop_8\r
+db      102,15,56,221,209\r
+        mov     esi,DWORD [20+esp]\r
+        mov     edi,DWORD [24+esp]\r
+        mov     eax,DWORD [28+esp]\r
+        mov     edx,DWORD [32+esp]\r
+        mov     ebp,esp\r
+        sub     esp,120\r
+        mov     ecx,DWORD [240+edx]\r
+        and     esp,-16\r
+        mov     DWORD [96+esp],135\r
+        mov     DWORD [100+esp],0\r
+        mov     DWORD [104+esp],1\r
+        mov     DWORD [108+esp],0\r
+        mov     DWORD [112+esp],eax\r
+        mov     DWORD [116+esp],ebp\r
+        movdqa  xmm1,xmm2\r
+        pxor    xmm0,xmm0\r
+        movdqa  xmm3,[96+esp]\r
+        pcmpgtd xmm0,xmm1\r
+        and     eax,-16\r
+        mov     ebp,edx\r
+        mov     ebx,ecx\r
+        sub     eax,96\r
+        jc      NEAR L$047xts_enc_short\r
+        shl     ecx,4\r
+        mov     ebx,16\r
+        sub     ebx,ecx\r
+        lea     edx,[32+ecx*1+edx]\r
+        jmp     NEAR L$048xts_enc_loop6\r
+align   16\r
+L$048xts_enc_loop6:\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        movdqa  [esp],xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        movdqa  [16+esp],xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        movdqa  [32+esp],xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        movdqa  [48+esp],xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        pshufd  xmm7,xmm0,19\r
+        movdqa  [64+esp],xmm1\r
+        paddq   xmm1,xmm1\r
+        movups  xmm0,[ebp]\r
+        pand    xmm7,xmm3\r
+        movups  xmm2,[esi]\r
+        pxor    xmm7,xmm1\r
+        mov     ecx,ebx\r
+        movdqu  xmm3,[16+esi]\r
+        xorps   xmm2,xmm0\r
+        movdqu  xmm4,[32+esi]\r
+        pxor    xmm3,xmm0\r
+        movdqu  xmm5,[48+esi]\r
+        pxor    xmm4,xmm0\r
+        movdqu  xmm6,[64+esi]\r
+        pxor    xmm5,xmm0\r
+        movdqu  xmm1,[80+esi]\r
+        pxor    xmm6,xmm0\r
+        lea     esi,[96+esi]\r
+        pxor    xmm2,[esp]\r
+        movdqa  [80+esp],xmm7\r
+        pxor    xmm7,xmm1\r
+        movups  xmm1,[16+ebp]\r
+        pxor    xmm3,[16+esp]\r
+        pxor    xmm4,[32+esp]\r
+db      102,15,56,220,209\r
+        pxor    xmm5,[48+esp]\r
+        pxor    xmm6,[64+esp]\r
+db      102,15,56,220,217\r
+        pxor    xmm7,xmm0\r
+        movups  xmm0,[32+ebp]\r
+db      102,15,56,220,225\r
+db      102,15,56,220,233\r
+db      102,15,56,220,241\r
+db      102,15,56,220,249\r
+        call    L$_aesni_encrypt6_enter\r
+        movdqa  xmm1,[80+esp]\r
+        pxor    xmm0,xmm0\r
+        xorps   xmm2,[esp]\r
+        pcmpgtd xmm0,xmm1\r
+        xorps   xmm3,[16+esp]\r
+        movups  [edi],xmm2\r
+        xorps   xmm4,[32+esp]\r
+        movups  [16+edi],xmm3\r
+        xorps   xmm5,[48+esp]\r
+        movups  [32+edi],xmm4\r
+        xorps   xmm6,[64+esp]\r
+        movups  [48+edi],xmm5\r
+        xorps   xmm7,xmm1\r
+        movups  [64+edi],xmm6\r
+        pshufd  xmm2,xmm0,19\r
+        movups  [80+edi],xmm7\r
+        lea     edi,[96+edi]\r
+        movdqa  xmm3,[96+esp]\r
+        pxor    xmm0,xmm0\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        sub     eax,96\r
+        jnc     NEAR L$048xts_enc_loop6\r
+        mov     ecx,DWORD [240+ebp]\r
+        mov     edx,ebp\r
+        mov     ebx,ecx\r
+L$047xts_enc_short:\r
+        add     eax,96\r
+        jz      NEAR L$049xts_enc_done6x\r
+        movdqa  xmm5,xmm1\r
+        cmp     eax,32\r
+        jb      NEAR L$050xts_enc_one\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        je      NEAR L$051xts_enc_two\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        movdqa  xmm6,xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        cmp     eax,64\r
+        jb      NEAR L$052xts_enc_three\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        movdqa  xmm7,xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        movdqa  [esp],xmm5\r
+        movdqa  [16+esp],xmm6\r
+        je      NEAR L$053xts_enc_four\r
+        movdqa  [32+esp],xmm7\r
+        pshufd  xmm7,xmm0,19\r
+        movdqa  [48+esp],xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm7,xmm3\r
+        pxor    xmm7,xmm1\r
+        movdqu  xmm2,[esi]\r
+        movdqu  xmm3,[16+esi]\r
+        movdqu  xmm4,[32+esi]\r
+        pxor    xmm2,[esp]\r
+        movdqu  xmm5,[48+esi]\r
+        pxor    xmm3,[16+esp]\r
+        movdqu  xmm6,[64+esi]\r
+        pxor    xmm4,[32+esp]\r
+        lea     esi,[80+esi]\r
+        pxor    xmm5,[48+esp]\r
+        movdqa  [64+esp],xmm7\r
+        pxor    xmm6,xmm7\r
+        call    __aesni_encrypt6\r
+        movaps  xmm1,[64+esp]\r
+        xorps   xmm2,[esp]\r
+        xorps   xmm3,[16+esp]\r
+        xorps   xmm4,[32+esp]\r
+        movups  [edi],xmm2\r
+        xorps   xmm5,[48+esp]\r
+        movups  [16+edi],xmm3\r
+        xorps   xmm6,xmm1\r
+        movups  [32+edi],xmm4\r
+        movups  [48+edi],xmm5\r
+        movups  [64+edi],xmm6\r
+        lea     edi,[80+edi]\r
+        jmp     NEAR L$054xts_enc_done\r
+align   16\r
+L$050xts_enc_one:\r
+        movups  xmm2,[esi]\r
+        lea     esi,[16+esi]\r
+        xorps   xmm2,xmm5\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$055enc1_loop_9:\r
+db      102,15,56,220,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$055enc1_loop_9\r
+db      102,15,56,221,209\r
+        xorps   xmm2,xmm5\r
+        movups  [edi],xmm2\r
+        lea     edi,[16+edi]\r
+        movdqa  xmm1,xmm5\r
+        jmp     NEAR L$054xts_enc_done\r
+align   16\r
+L$051xts_enc_two:\r
+        movaps  xmm6,xmm1\r
+        movups  xmm2,[esi]\r
+        movups  xmm3,[16+esi]\r
+        lea     esi,[32+esi]\r
+        xorps   xmm2,xmm5\r
+        xorps   xmm3,xmm6\r
+        call    __aesni_encrypt2\r
+        xorps   xmm2,xmm5\r
+        xorps   xmm3,xmm6\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        lea     edi,[32+edi]\r
+        movdqa  xmm1,xmm6\r
+        jmp     NEAR L$054xts_enc_done\r
+align   16\r
+L$052xts_enc_three:\r
+        movaps  xmm7,xmm1\r
+        movups  xmm2,[esi]\r
+        movups  xmm3,[16+esi]\r
+        movups  xmm4,[32+esi]\r
+        lea     esi,[48+esi]\r
+        xorps   xmm2,xmm5\r
+        xorps   xmm3,xmm6\r
+        xorps   xmm4,xmm7\r
+        call    __aesni_encrypt3\r
+        xorps   xmm2,xmm5\r
+        xorps   xmm3,xmm6\r
+        xorps   xmm4,xmm7\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        lea     edi,[48+edi]\r
+        movdqa  xmm1,xmm7\r
+        jmp     NEAR L$054xts_enc_done\r
+align   16\r
+L$053xts_enc_four:\r
+        movaps  xmm6,xmm1\r
+        movups  xmm2,[esi]\r
+        movups  xmm3,[16+esi]\r
+        movups  xmm4,[32+esi]\r
+        xorps   xmm2,[esp]\r
+        movups  xmm5,[48+esi]\r
+        lea     esi,[64+esi]\r
+        xorps   xmm3,[16+esp]\r
+        xorps   xmm4,xmm7\r
+        xorps   xmm5,xmm6\r
+        call    __aesni_encrypt4\r
+        xorps   xmm2,[esp]\r
+        xorps   xmm3,[16+esp]\r
+        xorps   xmm4,xmm7\r
+        movups  [edi],xmm2\r
+        xorps   xmm5,xmm6\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        movups  [48+edi],xmm5\r
+        lea     edi,[64+edi]\r
+        movdqa  xmm1,xmm6\r
+        jmp     NEAR L$054xts_enc_done\r
+align   16\r
+L$049xts_enc_done6x:\r
+        mov     eax,DWORD [112+esp]\r
+        and     eax,15\r
+        jz      NEAR L$056xts_enc_ret\r
+        movdqa  xmm5,xmm1\r
+        mov     DWORD [112+esp],eax\r
+        jmp     NEAR L$057xts_enc_steal\r
+align   16\r
+L$054xts_enc_done:\r
+        mov     eax,DWORD [112+esp]\r
+        pxor    xmm0,xmm0\r
+        and     eax,15\r
+        jz      NEAR L$056xts_enc_ret\r
+        pcmpgtd xmm0,xmm1\r
+        mov     DWORD [112+esp],eax\r
+        pshufd  xmm5,xmm0,19\r
+        paddq   xmm1,xmm1\r
+        pand    xmm5,[96+esp]\r
+        pxor    xmm5,xmm1\r
+L$057xts_enc_steal:\r
+        movzx   ecx,BYTE [esi]\r
+        movzx   edx,BYTE [edi-16]\r
+        lea     esi,[1+esi]\r
+        mov     BYTE [edi-16],cl\r
+        mov     BYTE [edi],dl\r
+        lea     edi,[1+edi]\r
+        sub     eax,1\r
+        jnz     NEAR L$057xts_enc_steal\r
+        sub     edi,DWORD [112+esp]\r
+        mov     edx,ebp\r
+        mov     ecx,ebx\r
+        movups  xmm2,[edi-16]\r
+        xorps   xmm2,xmm5\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$058enc1_loop_10:\r
+db      102,15,56,220,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$058enc1_loop_10\r
+db      102,15,56,221,209\r
+        xorps   xmm2,xmm5\r
+        movups  [edi-16],xmm2\r
+L$056xts_enc_ret:\r
+        pxor    xmm0,xmm0\r
+        pxor    xmm1,xmm1\r
+        pxor    xmm2,xmm2\r
+        movdqa  [esp],xmm0\r
+        pxor    xmm3,xmm3\r
+        movdqa  [16+esp],xmm0\r
+        pxor    xmm4,xmm4\r
+        movdqa  [32+esp],xmm0\r
+        pxor    xmm5,xmm5\r
+        movdqa  [48+esp],xmm0\r
+        pxor    xmm6,xmm6\r
+        movdqa  [64+esp],xmm0\r
+        pxor    xmm7,xmm7\r
+        movdqa  [80+esp],xmm0\r
+        mov     esp,DWORD [116+esp]\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _aesni_xts_decrypt\r
+align   16\r
+_aesni_xts_decrypt:\r
+L$_aesni_xts_decrypt_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     edx,DWORD [36+esp]\r
+        mov     esi,DWORD [40+esp]\r
+        mov     ecx,DWORD [240+edx]\r
+        movups  xmm2,[esi]\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$059enc1_loop_11:\r
+db      102,15,56,220,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$059enc1_loop_11\r
+db      102,15,56,221,209\r
+        mov     esi,DWORD [20+esp]\r
+        mov     edi,DWORD [24+esp]\r
+        mov     eax,DWORD [28+esp]\r
+        mov     edx,DWORD [32+esp]\r
+        mov     ebp,esp\r
+        sub     esp,120\r
+        and     esp,-16\r
+        xor     ebx,ebx\r
+        test    eax,15\r
+        setnz   bl\r
+        shl     ebx,4\r
+        sub     eax,ebx\r
+        mov     DWORD [96+esp],135\r
+        mov     DWORD [100+esp],0\r
+        mov     DWORD [104+esp],1\r
+        mov     DWORD [108+esp],0\r
+        mov     DWORD [112+esp],eax\r
+        mov     DWORD [116+esp],ebp\r
+        mov     ecx,DWORD [240+edx]\r
+        mov     ebp,edx\r
+        mov     ebx,ecx\r
+        movdqa  xmm1,xmm2\r
+        pxor    xmm0,xmm0\r
+        movdqa  xmm3,[96+esp]\r
+        pcmpgtd xmm0,xmm1\r
+        and     eax,-16\r
+        sub     eax,96\r
+        jc      NEAR L$060xts_dec_short\r
+        shl     ecx,4\r
+        mov     ebx,16\r
+        sub     ebx,ecx\r
+        lea     edx,[32+ecx*1+edx]\r
+        jmp     NEAR L$061xts_dec_loop6\r
+align   16\r
+L$061xts_dec_loop6:\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        movdqa  [esp],xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        movdqa  [16+esp],xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        movdqa  [32+esp],xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        movdqa  [48+esp],xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        pshufd  xmm7,xmm0,19\r
+        movdqa  [64+esp],xmm1\r
+        paddq   xmm1,xmm1\r
+        movups  xmm0,[ebp]\r
+        pand    xmm7,xmm3\r
+        movups  xmm2,[esi]\r
+        pxor    xmm7,xmm1\r
+        mov     ecx,ebx\r
+        movdqu  xmm3,[16+esi]\r
+        xorps   xmm2,xmm0\r
+        movdqu  xmm4,[32+esi]\r
+        pxor    xmm3,xmm0\r
+        movdqu  xmm5,[48+esi]\r
+        pxor    xmm4,xmm0\r
+        movdqu  xmm6,[64+esi]\r
+        pxor    xmm5,xmm0\r
+        movdqu  xmm1,[80+esi]\r
+        pxor    xmm6,xmm0\r
+        lea     esi,[96+esi]\r
+        pxor    xmm2,[esp]\r
+        movdqa  [80+esp],xmm7\r
+        pxor    xmm7,xmm1\r
+        movups  xmm1,[16+ebp]\r
+        pxor    xmm3,[16+esp]\r
+        pxor    xmm4,[32+esp]\r
+db      102,15,56,222,209\r
+        pxor    xmm5,[48+esp]\r
+        pxor    xmm6,[64+esp]\r
+db      102,15,56,222,217\r
+        pxor    xmm7,xmm0\r
+        movups  xmm0,[32+ebp]\r
+db      102,15,56,222,225\r
+db      102,15,56,222,233\r
+db      102,15,56,222,241\r
+db      102,15,56,222,249\r
+        call    L$_aesni_decrypt6_enter\r
+        movdqa  xmm1,[80+esp]\r
+        pxor    xmm0,xmm0\r
+        xorps   xmm2,[esp]\r
+        pcmpgtd xmm0,xmm1\r
+        xorps   xmm3,[16+esp]\r
+        movups  [edi],xmm2\r
+        xorps   xmm4,[32+esp]\r
+        movups  [16+edi],xmm3\r
+        xorps   xmm5,[48+esp]\r
+        movups  [32+edi],xmm4\r
+        xorps   xmm6,[64+esp]\r
+        movups  [48+edi],xmm5\r
+        xorps   xmm7,xmm1\r
+        movups  [64+edi],xmm6\r
+        pshufd  xmm2,xmm0,19\r
+        movups  [80+edi],xmm7\r
+        lea     edi,[96+edi]\r
+        movdqa  xmm3,[96+esp]\r
+        pxor    xmm0,xmm0\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        sub     eax,96\r
+        jnc     NEAR L$061xts_dec_loop6\r
+        mov     ecx,DWORD [240+ebp]\r
+        mov     edx,ebp\r
+        mov     ebx,ecx\r
+L$060xts_dec_short:\r
+        add     eax,96\r
+        jz      NEAR L$062xts_dec_done6x\r
+        movdqa  xmm5,xmm1\r
+        cmp     eax,32\r
+        jb      NEAR L$063xts_dec_one\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        je      NEAR L$064xts_dec_two\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        movdqa  xmm6,xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        cmp     eax,64\r
+        jb      NEAR L$065xts_dec_three\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        movdqa  xmm7,xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+        movdqa  [esp],xmm5\r
+        movdqa  [16+esp],xmm6\r
+        je      NEAR L$066xts_dec_four\r
+        movdqa  [32+esp],xmm7\r
+        pshufd  xmm7,xmm0,19\r
+        movdqa  [48+esp],xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm7,xmm3\r
+        pxor    xmm7,xmm1\r
+        movdqu  xmm2,[esi]\r
+        movdqu  xmm3,[16+esi]\r
+        movdqu  xmm4,[32+esi]\r
+        pxor    xmm2,[esp]\r
+        movdqu  xmm5,[48+esi]\r
+        pxor    xmm3,[16+esp]\r
+        movdqu  xmm6,[64+esi]\r
+        pxor    xmm4,[32+esp]\r
+        lea     esi,[80+esi]\r
+        pxor    xmm5,[48+esp]\r
+        movdqa  [64+esp],xmm7\r
+        pxor    xmm6,xmm7\r
+        call    __aesni_decrypt6\r
+        movaps  xmm1,[64+esp]\r
+        xorps   xmm2,[esp]\r
+        xorps   xmm3,[16+esp]\r
+        xorps   xmm4,[32+esp]\r
+        movups  [edi],xmm2\r
+        xorps   xmm5,[48+esp]\r
+        movups  [16+edi],xmm3\r
+        xorps   xmm6,xmm1\r
+        movups  [32+edi],xmm4\r
+        movups  [48+edi],xmm5\r
+        movups  [64+edi],xmm6\r
+        lea     edi,[80+edi]\r
+        jmp     NEAR L$067xts_dec_done\r
+align   16\r
+L$063xts_dec_one:\r
+        movups  xmm2,[esi]\r
+        lea     esi,[16+esi]\r
+        xorps   xmm2,xmm5\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$068dec1_loop_12:\r
+db      102,15,56,222,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$068dec1_loop_12\r
+db      102,15,56,223,209\r
+        xorps   xmm2,xmm5\r
+        movups  [edi],xmm2\r
+        lea     edi,[16+edi]\r
+        movdqa  xmm1,xmm5\r
+        jmp     NEAR L$067xts_dec_done\r
+align   16\r
+L$064xts_dec_two:\r
+        movaps  xmm6,xmm1\r
+        movups  xmm2,[esi]\r
+        movups  xmm3,[16+esi]\r
+        lea     esi,[32+esi]\r
+        xorps   xmm2,xmm5\r
+        xorps   xmm3,xmm6\r
+        call    __aesni_decrypt2\r
+        xorps   xmm2,xmm5\r
+        xorps   xmm3,xmm6\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        lea     edi,[32+edi]\r
+        movdqa  xmm1,xmm6\r
+        jmp     NEAR L$067xts_dec_done\r
+align   16\r
+L$065xts_dec_three:\r
+        movaps  xmm7,xmm1\r
+        movups  xmm2,[esi]\r
+        movups  xmm3,[16+esi]\r
+        movups  xmm4,[32+esi]\r
+        lea     esi,[48+esi]\r
+        xorps   xmm2,xmm5\r
+        xorps   xmm3,xmm6\r
+        xorps   xmm4,xmm7\r
+        call    __aesni_decrypt3\r
+        xorps   xmm2,xmm5\r
+        xorps   xmm3,xmm6\r
+        xorps   xmm4,xmm7\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        lea     edi,[48+edi]\r
+        movdqa  xmm1,xmm7\r
+        jmp     NEAR L$067xts_dec_done\r
+align   16\r
+L$066xts_dec_four:\r
+        movaps  xmm6,xmm1\r
+        movups  xmm2,[esi]\r
+        movups  xmm3,[16+esi]\r
+        movups  xmm4,[32+esi]\r
+        xorps   xmm2,[esp]\r
+        movups  xmm5,[48+esi]\r
+        lea     esi,[64+esi]\r
+        xorps   xmm3,[16+esp]\r
+        xorps   xmm4,xmm7\r
+        xorps   xmm5,xmm6\r
+        call    __aesni_decrypt4\r
+        xorps   xmm2,[esp]\r
+        xorps   xmm3,[16+esp]\r
+        xorps   xmm4,xmm7\r
+        movups  [edi],xmm2\r
+        xorps   xmm5,xmm6\r
+        movups  [16+edi],xmm3\r
+        movups  [32+edi],xmm4\r
+        movups  [48+edi],xmm5\r
+        lea     edi,[64+edi]\r
+        movdqa  xmm1,xmm6\r
+        jmp     NEAR L$067xts_dec_done\r
+align   16\r
+L$062xts_dec_done6x:\r
+        mov     eax,DWORD [112+esp]\r
+        and     eax,15\r
+        jz      NEAR L$069xts_dec_ret\r
+        mov     DWORD [112+esp],eax\r
+        jmp     NEAR L$070xts_dec_only_one_more\r
+align   16\r
+L$067xts_dec_done:\r
+        mov     eax,DWORD [112+esp]\r
+        pxor    xmm0,xmm0\r
+        and     eax,15\r
+        jz      NEAR L$069xts_dec_ret\r
+        pcmpgtd xmm0,xmm1\r
+        mov     DWORD [112+esp],eax\r
+        pshufd  xmm2,xmm0,19\r
+        pxor    xmm0,xmm0\r
+        movdqa  xmm3,[96+esp]\r
+        paddq   xmm1,xmm1\r
+        pand    xmm2,xmm3\r
+        pcmpgtd xmm0,xmm1\r
+        pxor    xmm1,xmm2\r
+L$070xts_dec_only_one_more:\r
+        pshufd  xmm5,xmm0,19\r
+        movdqa  xmm6,xmm1\r
+        paddq   xmm1,xmm1\r
+        pand    xmm5,xmm3\r
+        pxor    xmm5,xmm1\r
+        mov     edx,ebp\r
+        mov     ecx,ebx\r
+        movups  xmm2,[esi]\r
+        xorps   xmm2,xmm5\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$071dec1_loop_13:\r
+db      102,15,56,222,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$071dec1_loop_13\r
+db      102,15,56,223,209\r
+        xorps   xmm2,xmm5\r
+        movups  [edi],xmm2\r
+L$072xts_dec_steal:\r
+        movzx   ecx,BYTE [16+esi]\r
+        movzx   edx,BYTE [edi]\r
+        lea     esi,[1+esi]\r
+        mov     BYTE [edi],cl\r
+        mov     BYTE [16+edi],dl\r
+        lea     edi,[1+edi]\r
+        sub     eax,1\r
+        jnz     NEAR L$072xts_dec_steal\r
+        sub     edi,DWORD [112+esp]\r
+        mov     edx,ebp\r
+        mov     ecx,ebx\r
+        movups  xmm2,[edi]\r
+        xorps   xmm2,xmm6\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$073dec1_loop_14:\r
+db      102,15,56,222,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$073dec1_loop_14\r
+db      102,15,56,223,209\r
+        xorps   xmm2,xmm6\r
+        movups  [edi],xmm2\r
+L$069xts_dec_ret:\r
+        pxor    xmm0,xmm0\r
+        pxor    xmm1,xmm1\r
+        pxor    xmm2,xmm2\r
+        movdqa  [esp],xmm0\r
+        pxor    xmm3,xmm3\r
+        movdqa  [16+esp],xmm0\r
+        pxor    xmm4,xmm4\r
+        movdqa  [32+esp],xmm0\r
+        pxor    xmm5,xmm5\r
+        movdqa  [48+esp],xmm0\r
+        pxor    xmm6,xmm6\r
+        movdqa  [64+esp],xmm0\r
+        pxor    xmm7,xmm7\r
+        movdqa  [80+esp],xmm0\r
+        mov     esp,DWORD [116+esp]\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _aesni_ocb_encrypt\r
+align   16\r
+_aesni_ocb_encrypt:\r
+L$_aesni_ocb_encrypt_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     ecx,DWORD [40+esp]\r
+        mov     ebx,DWORD [48+esp]\r
+        mov     esi,DWORD [20+esp]\r
+        mov     edi,DWORD [24+esp]\r
+        mov     eax,DWORD [28+esp]\r
+        mov     edx,DWORD [32+esp]\r
+        movdqu  xmm0,[ecx]\r
+        mov     ebp,DWORD [36+esp]\r
+        movdqu  xmm1,[ebx]\r
+        mov     ebx,DWORD [44+esp]\r
+        mov     ecx,esp\r
+        sub     esp,132\r
+        and     esp,-16\r
+        sub     edi,esi\r
+        shl     eax,4\r
+        lea     eax,[eax*1+esi-96]\r
+        mov     DWORD [120+esp],edi\r
+        mov     DWORD [124+esp],eax\r
+        mov     DWORD [128+esp],ecx\r
+        mov     ecx,DWORD [240+edx]\r
+        test    ebp,1\r
+        jnz     NEAR L$074odd\r
+        bsf     eax,ebp\r
+        add     ebp,1\r
+        shl     eax,4\r
+        movdqu  xmm7,[eax*1+ebx]\r
+        mov     eax,edx\r
+        movdqu  xmm2,[esi]\r
+        lea     esi,[16+esi]\r
+        pxor    xmm7,xmm0\r
+        pxor    xmm1,xmm2\r
+        pxor    xmm2,xmm7\r
+        movdqa  xmm6,xmm1\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$075enc1_loop_15:\r
+db      102,15,56,220,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$075enc1_loop_15\r
+db      102,15,56,221,209\r
+        xorps   xmm2,xmm7\r
+        movdqa  xmm0,xmm7\r
+        movdqa  xmm1,xmm6\r
+        movups  [esi*1+edi-16],xmm2\r
+        mov     ecx,DWORD [240+eax]\r
+        mov     edx,eax\r
+        mov     eax,DWORD [124+esp]\r
+L$074odd:\r
+        shl     ecx,4\r
+        mov     edi,16\r
+        sub     edi,ecx\r
+        mov     DWORD [112+esp],edx\r
+        lea     edx,[32+ecx*1+edx]\r
+        mov     DWORD [116+esp],edi\r
+        cmp     esi,eax\r
+        ja      NEAR L$076short\r
+        jmp     NEAR L$077grandloop\r
+align   32\r
+L$077grandloop:\r
+        lea     ecx,[1+ebp]\r
+        lea     eax,[3+ebp]\r
+        lea     edi,[5+ebp]\r
+        add     ebp,6\r
+        bsf     ecx,ecx\r
+        bsf     eax,eax\r
+        bsf     edi,edi\r
+        shl     ecx,4\r
+        shl     eax,4\r
+        shl     edi,4\r
+        movdqu  xmm2,[ebx]\r
+        movdqu  xmm3,[ecx*1+ebx]\r
+        mov     ecx,DWORD [116+esp]\r
+        movdqa  xmm4,xmm2\r
+        movdqu  xmm5,[eax*1+ebx]\r
+        movdqa  xmm6,xmm2\r
+        movdqu  xmm7,[edi*1+ebx]\r
+        pxor    xmm2,xmm0\r
+        pxor    xmm3,xmm2\r
+        movdqa  [esp],xmm2\r
+        pxor    xmm4,xmm3\r
+        movdqa  [16+esp],xmm3\r
+        pxor    xmm5,xmm4\r
+        movdqa  [32+esp],xmm4\r
+        pxor    xmm6,xmm5\r
+        movdqa  [48+esp],xmm5\r
+        pxor    xmm7,xmm6\r
+        movdqa  [64+esp],xmm6\r
+        movdqa  [80+esp],xmm7\r
+        movups  xmm0,[ecx*1+edx-48]\r
+        movdqu  xmm2,[esi]\r
+        movdqu  xmm3,[16+esi]\r
+        movdqu  xmm4,[32+esi]\r
+        movdqu  xmm5,[48+esi]\r
+        movdqu  xmm6,[64+esi]\r
+        movdqu  xmm7,[80+esi]\r
+        lea     esi,[96+esi]\r
+        pxor    xmm1,xmm2\r
+        pxor    xmm2,xmm0\r
+        pxor    xmm1,xmm3\r
+        pxor    xmm3,xmm0\r
+        pxor    xmm1,xmm4\r
+        pxor    xmm4,xmm0\r
+        pxor    xmm1,xmm5\r
+        pxor    xmm5,xmm0\r
+        pxor    xmm1,xmm6\r
+        pxor    xmm6,xmm0\r
+        pxor    xmm1,xmm7\r
+        pxor    xmm7,xmm0\r
+        movdqa  [96+esp],xmm1\r
+        movups  xmm1,[ecx*1+edx-32]\r
+        pxor    xmm2,[esp]\r
+        pxor    xmm3,[16+esp]\r
+        pxor    xmm4,[32+esp]\r
+        pxor    xmm5,[48+esp]\r
+        pxor    xmm6,[64+esp]\r
+        pxor    xmm7,[80+esp]\r
+        movups  xmm0,[ecx*1+edx-16]\r
+db      102,15,56,220,209\r
+db      102,15,56,220,217\r
+db      102,15,56,220,225\r
+db      102,15,56,220,233\r
+db      102,15,56,220,241\r
+db      102,15,56,220,249\r
+        mov     edi,DWORD [120+esp]\r
+        mov     eax,DWORD [124+esp]\r
+        call    L$_aesni_encrypt6_enter\r
+        movdqa  xmm0,[80+esp]\r
+        pxor    xmm2,[esp]\r
+        pxor    xmm3,[16+esp]\r
+        pxor    xmm4,[32+esp]\r
+        pxor    xmm5,[48+esp]\r
+        pxor    xmm6,[64+esp]\r
+        pxor    xmm7,xmm0\r
+        movdqa  xmm1,[96+esp]\r
+        movdqu  [esi*1+edi-96],xmm2\r
+        movdqu  [esi*1+edi-80],xmm3\r
+        movdqu  [esi*1+edi-64],xmm4\r
+        movdqu  [esi*1+edi-48],xmm5\r
+        movdqu  [esi*1+edi-32],xmm6\r
+        movdqu  [esi*1+edi-16],xmm7\r
+        cmp     esi,eax\r
+        jb      NEAR L$077grandloop\r
+L$076short:\r
+        add     eax,96\r
+        sub     eax,esi\r
+        jz      NEAR L$078done\r
+        cmp     eax,32\r
+        jb      NEAR L$079one\r
+        je      NEAR L$080two\r
+        cmp     eax,64\r
+        jb      NEAR L$081three\r
+        je      NEAR L$082four\r
+        lea     ecx,[1+ebp]\r
+        lea     eax,[3+ebp]\r
+        bsf     ecx,ecx\r
+        bsf     eax,eax\r
+        shl     ecx,4\r
+        shl     eax,4\r
+        movdqu  xmm2,[ebx]\r
+        movdqu  xmm3,[ecx*1+ebx]\r
+        mov     ecx,DWORD [116+esp]\r
+        movdqa  xmm4,xmm2\r
+        movdqu  xmm5,[eax*1+ebx]\r
+        movdqa  xmm6,xmm2\r
+        pxor    xmm2,xmm0\r
+        pxor    xmm3,xmm2\r
+        movdqa  [esp],xmm2\r
+        pxor    xmm4,xmm3\r
+        movdqa  [16+esp],xmm3\r
+        pxor    xmm5,xmm4\r
+        movdqa  [32+esp],xmm4\r
+        pxor    xmm6,xmm5\r
+        movdqa  [48+esp],xmm5\r
+        pxor    xmm7,xmm6\r
+        movdqa  [64+esp],xmm6\r
+        movups  xmm0,[ecx*1+edx-48]\r
+        movdqu  xmm2,[esi]\r
+        movdqu  xmm3,[16+esi]\r
+        movdqu  xmm4,[32+esi]\r
+        movdqu  xmm5,[48+esi]\r
+        movdqu  xmm6,[64+esi]\r
+        pxor    xmm7,xmm7\r
+        pxor    xmm1,xmm2\r
+        pxor    xmm2,xmm0\r
+        pxor    xmm1,xmm3\r
+        pxor    xmm3,xmm0\r
+        pxor    xmm1,xmm4\r
+        pxor    xmm4,xmm0\r
+        pxor    xmm1,xmm5\r
+        pxor    xmm5,xmm0\r
+        pxor    xmm1,xmm6\r
+        pxor    xmm6,xmm0\r
+        movdqa  [96+esp],xmm1\r
+        movups  xmm1,[ecx*1+edx-32]\r
+        pxor    xmm2,[esp]\r
+        pxor    xmm3,[16+esp]\r
+        pxor    xmm4,[32+esp]\r
+        pxor    xmm5,[48+esp]\r
+        pxor    xmm6,[64+esp]\r
+        movups  xmm0,[ecx*1+edx-16]\r
+db      102,15,56,220,209\r
+db      102,15,56,220,217\r
+db      102,15,56,220,225\r
+db      102,15,56,220,233\r
+db      102,15,56,220,241\r
+db      102,15,56,220,249\r
+        mov     edi,DWORD [120+esp]\r
+        call    L$_aesni_encrypt6_enter\r
+        movdqa  xmm0,[64+esp]\r
+        pxor    xmm2,[esp]\r
+        pxor    xmm3,[16+esp]\r
+        pxor    xmm4,[32+esp]\r
+        pxor    xmm5,[48+esp]\r
+        pxor    xmm6,xmm0\r
+        movdqa  xmm1,[96+esp]\r
+        movdqu  [esi*1+edi],xmm2\r
+        movdqu  [16+esi*1+edi],xmm3\r
+        movdqu  [32+esi*1+edi],xmm4\r
+        movdqu  [48+esi*1+edi],xmm5\r
+        movdqu  [64+esi*1+edi],xmm6\r
+        jmp     NEAR L$078done\r
+align   16\r
+L$079one:\r
+        movdqu  xmm7,[ebx]\r
+        mov     edx,DWORD [112+esp]\r
+        movdqu  xmm2,[esi]\r
+        mov     ecx,DWORD [240+edx]\r
+        pxor    xmm7,xmm0\r
+        pxor    xmm1,xmm2\r
+        pxor    xmm2,xmm7\r
+        movdqa  xmm6,xmm1\r
+        mov     edi,DWORD [120+esp]\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$083enc1_loop_16:\r
+db      102,15,56,220,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$083enc1_loop_16\r
+db      102,15,56,221,209\r
+        xorps   xmm2,xmm7\r
+        movdqa  xmm0,xmm7\r
+        movdqa  xmm1,xmm6\r
+        movups  [esi*1+edi],xmm2\r
+        jmp     NEAR L$078done\r
+align   16\r
+L$080two:\r
+        lea     ecx,[1+ebp]\r
+        mov     edx,DWORD [112+esp]\r
+        bsf     ecx,ecx\r
+        shl     ecx,4\r
+        movdqu  xmm6,[ebx]\r
+        movdqu  xmm7,[ecx*1+ebx]\r
+        movdqu  xmm2,[esi]\r
+        movdqu  xmm3,[16+esi]\r
+        mov     ecx,DWORD [240+edx]\r
+        pxor    xmm6,xmm0\r
+        pxor    xmm7,xmm6\r
+        pxor    xmm1,xmm2\r
+        pxor    xmm2,xmm6\r
+        pxor    xmm1,xmm3\r
+        pxor    xmm3,xmm7\r
+        movdqa  xmm5,xmm1\r
+        mov     edi,DWORD [120+esp]\r
+        call    __aesni_encrypt2\r
+        xorps   xmm2,xmm6\r
+        xorps   xmm3,xmm7\r
+        movdqa  xmm0,xmm7\r
+        movdqa  xmm1,xmm5\r
+        movups  [esi*1+edi],xmm2\r
+        movups  [16+esi*1+edi],xmm3\r
+        jmp     NEAR L$078done\r
+align   16\r
+L$081three:\r
+        lea     ecx,[1+ebp]\r
+        mov     edx,DWORD [112+esp]\r
+        bsf     ecx,ecx\r
+        shl     ecx,4\r
+        movdqu  xmm5,[ebx]\r
+        movdqu  xmm6,[ecx*1+ebx]\r
+        movdqa  xmm7,xmm5\r
+        movdqu  xmm2,[esi]\r
+        movdqu  xmm3,[16+esi]\r
+        movdqu  xmm4,[32+esi]\r
+        mov     ecx,DWORD [240+edx]\r
+        pxor    xmm5,xmm0\r
+        pxor    xmm6,xmm5\r
+        pxor    xmm7,xmm6\r
+        pxor    xmm1,xmm2\r
+        pxor    xmm2,xmm5\r
+        pxor    xmm1,xmm3\r
+        pxor    xmm3,xmm6\r
+        pxor    xmm1,xmm4\r
+        pxor    xmm4,xmm7\r
+        movdqa  [96+esp],xmm1\r
+        mov     edi,DWORD [120+esp]\r
+        call    __aesni_encrypt3\r
+        xorps   xmm2,xmm5\r
+        xorps   xmm3,xmm6\r
+        xorps   xmm4,xmm7\r
+        movdqa  xmm0,xmm7\r
+        movdqa  xmm1,[96+esp]\r
+        movups  [esi*1+edi],xmm2\r
+        movups  [16+esi*1+edi],xmm3\r
+        movups  [32+esi*1+edi],xmm4\r
+        jmp     NEAR L$078done\r
+align   16\r
+L$082four:\r
+        lea     ecx,[1+ebp]\r
+        lea     eax,[3+ebp]\r
+        bsf     ecx,ecx\r
+        bsf     eax,eax\r
+        mov     edx,DWORD [112+esp]\r
+        shl     ecx,4\r
+        shl     eax,4\r
+        movdqu  xmm4,[ebx]\r
+        movdqu  xmm5,[ecx*1+ebx]\r
+        movdqa  xmm6,xmm4\r
+        movdqu  xmm7,[eax*1+ebx]\r
+        pxor    xmm4,xmm0\r
+        movdqu  xmm2,[esi]\r
+        pxor    xmm5,xmm4\r
+        movdqu  xmm3,[16+esi]\r
+        pxor    xmm6,xmm5\r
+        movdqa  [esp],xmm4\r
+        pxor    xmm7,xmm6\r
+        movdqa  [16+esp],xmm5\r
+        movdqu  xmm4,[32+esi]\r
+        movdqu  xmm5,[48+esi]\r
+        mov     ecx,DWORD [240+edx]\r
+        pxor    xmm1,xmm2\r
+        pxor    xmm2,[esp]\r
+        pxor    xmm1,xmm3\r
+        pxor    xmm3,[16+esp]\r
+        pxor    xmm1,xmm4\r
+        pxor    xmm4,xmm6\r
+        pxor    xmm1,xmm5\r
+        pxor    xmm5,xmm7\r
+        movdqa  [96+esp],xmm1\r
+        mov     edi,DWORD [120+esp]\r
+        call    __aesni_encrypt4\r
+        xorps   xmm2,[esp]\r
+        xorps   xmm3,[16+esp]\r
+        xorps   xmm4,xmm6\r
+        movups  [esi*1+edi],xmm2\r
+        xorps   xmm5,xmm7\r
+        movups  [16+esi*1+edi],xmm3\r
+        movdqa  xmm0,xmm7\r
+        movups  [32+esi*1+edi],xmm4\r
+        movdqa  xmm1,[96+esp]\r
+        movups  [48+esi*1+edi],xmm5\r
+L$078done:\r
+        mov     edx,DWORD [128+esp]\r
+        pxor    xmm2,xmm2\r
+        pxor    xmm3,xmm3\r
+        movdqa  [esp],xmm2\r
+        pxor    xmm4,xmm4\r
+        movdqa  [16+esp],xmm2\r
+        pxor    xmm5,xmm5\r
+        movdqa  [32+esp],xmm2\r
+        pxor    xmm6,xmm6\r
+        movdqa  [48+esp],xmm2\r
+        pxor    xmm7,xmm7\r
+        movdqa  [64+esp],xmm2\r
+        movdqa  [80+esp],xmm2\r
+        movdqa  [96+esp],xmm2\r
+        lea     esp,[edx]\r
+        mov     ecx,DWORD [40+esp]\r
+        mov     ebx,DWORD [48+esp]\r
+        movdqu  [ecx],xmm0\r
+        pxor    xmm0,xmm0\r
+        movdqu  [ebx],xmm1\r
+        pxor    xmm1,xmm1\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _aesni_ocb_decrypt\r
+align   16\r
+_aesni_ocb_decrypt:\r
+L$_aesni_ocb_decrypt_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     ecx,DWORD [40+esp]\r
+        mov     ebx,DWORD [48+esp]\r
+        mov     esi,DWORD [20+esp]\r
+        mov     edi,DWORD [24+esp]\r
+        mov     eax,DWORD [28+esp]\r
+        mov     edx,DWORD [32+esp]\r
+        movdqu  xmm0,[ecx]\r
+        mov     ebp,DWORD [36+esp]\r
+        movdqu  xmm1,[ebx]\r
+        mov     ebx,DWORD [44+esp]\r
+        mov     ecx,esp\r
+        sub     esp,132\r
+        and     esp,-16\r
+        sub     edi,esi\r
+        shl     eax,4\r
+        lea     eax,[eax*1+esi-96]\r
+        mov     DWORD [120+esp],edi\r
+        mov     DWORD [124+esp],eax\r
+        mov     DWORD [128+esp],ecx\r
+        mov     ecx,DWORD [240+edx]\r
+        test    ebp,1\r
+        jnz     NEAR L$084odd\r
+        bsf     eax,ebp\r
+        add     ebp,1\r
+        shl     eax,4\r
+        movdqu  xmm7,[eax*1+ebx]\r
+        mov     eax,edx\r
+        movdqu  xmm2,[esi]\r
+        lea     esi,[16+esi]\r
+        pxor    xmm7,xmm0\r
+        pxor    xmm2,xmm7\r
+        movdqa  xmm6,xmm1\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$085dec1_loop_17:\r
+db      102,15,56,222,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$085dec1_loop_17\r
+db      102,15,56,223,209\r
+        xorps   xmm2,xmm7\r
+        movaps  xmm1,xmm6\r
+        movdqa  xmm0,xmm7\r
+        xorps   xmm1,xmm2\r
+        movups  [esi*1+edi-16],xmm2\r
+        mov     ecx,DWORD [240+eax]\r
+        mov     edx,eax\r
+        mov     eax,DWORD [124+esp]\r
+L$084odd:\r
+        shl     ecx,4\r
+        mov     edi,16\r
+        sub     edi,ecx\r
+        mov     DWORD [112+esp],edx\r
+        lea     edx,[32+ecx*1+edx]\r
+        mov     DWORD [116+esp],edi\r
+        cmp     esi,eax\r
+        ja      NEAR L$086short\r
+        jmp     NEAR L$087grandloop\r
+align   32\r
+L$087grandloop:\r
+        lea     ecx,[1+ebp]\r
+        lea     eax,[3+ebp]\r
+        lea     edi,[5+ebp]\r
+        add     ebp,6\r
+        bsf     ecx,ecx\r
+        bsf     eax,eax\r
+        bsf     edi,edi\r
+        shl     ecx,4\r
+        shl     eax,4\r
+        shl     edi,4\r
+        movdqu  xmm2,[ebx]\r
+        movdqu  xmm3,[ecx*1+ebx]\r
+        mov     ecx,DWORD [116+esp]\r
+        movdqa  xmm4,xmm2\r
+        movdqu  xmm5,[eax*1+ebx]\r
+        movdqa  xmm6,xmm2\r
+        movdqu  xmm7,[edi*1+ebx]\r
+        pxor    xmm2,xmm0\r
+        pxor    xmm3,xmm2\r
+        movdqa  [esp],xmm2\r
+        pxor    xmm4,xmm3\r
+        movdqa  [16+esp],xmm3\r
+        pxor    xmm5,xmm4\r
+        movdqa  [32+esp],xmm4\r
+        pxor    xmm6,xmm5\r
+        movdqa  [48+esp],xmm5\r
+        pxor    xmm7,xmm6\r
+        movdqa  [64+esp],xmm6\r
+        movdqa  [80+esp],xmm7\r
+        movups  xmm0,[ecx*1+edx-48]\r
+        movdqu  xmm2,[esi]\r
+        movdqu  xmm3,[16+esi]\r
+        movdqu  xmm4,[32+esi]\r
+        movdqu  xmm5,[48+esi]\r
+        movdqu  xmm6,[64+esi]\r
+        movdqu  xmm7,[80+esi]\r
+        lea     esi,[96+esi]\r
+        movdqa  [96+esp],xmm1\r
+        pxor    xmm2,xmm0\r
+        pxor    xmm3,xmm0\r
+        pxor    xmm4,xmm0\r
+        pxor    xmm5,xmm0\r
+        pxor    xmm6,xmm0\r
+        pxor    xmm7,xmm0\r
+        movups  xmm1,[ecx*1+edx-32]\r
+        pxor    xmm2,[esp]\r
+        pxor    xmm3,[16+esp]\r
+        pxor    xmm4,[32+esp]\r
+        pxor    xmm5,[48+esp]\r
+        pxor    xmm6,[64+esp]\r
+        pxor    xmm7,[80+esp]\r
+        movups  xmm0,[ecx*1+edx-16]\r
+db      102,15,56,222,209\r
+db      102,15,56,222,217\r
+db      102,15,56,222,225\r
+db      102,15,56,222,233\r
+db      102,15,56,222,241\r
+db      102,15,56,222,249\r
+        mov     edi,DWORD [120+esp]\r
+        mov     eax,DWORD [124+esp]\r
+        call    L$_aesni_decrypt6_enter\r
+        movdqa  xmm0,[80+esp]\r
+        pxor    xmm2,[esp]\r
+        movdqa  xmm1,[96+esp]\r
+        pxor    xmm3,[16+esp]\r
+        pxor    xmm4,[32+esp]\r
+        pxor    xmm5,[48+esp]\r
+        pxor    xmm6,[64+esp]\r
+        pxor    xmm7,xmm0\r
+        pxor    xmm1,xmm2\r
+        movdqu  [esi*1+edi-96],xmm2\r
+        pxor    xmm1,xmm3\r
+        movdqu  [esi*1+edi-80],xmm3\r
+        pxor    xmm1,xmm4\r
+        movdqu  [esi*1+edi-64],xmm4\r
+        pxor    xmm1,xmm5\r
+        movdqu  [esi*1+edi-48],xmm5\r
+        pxor    xmm1,xmm6\r
+        movdqu  [esi*1+edi-32],xmm6\r
+        pxor    xmm1,xmm7\r
+        movdqu  [esi*1+edi-16],xmm7\r
+        cmp     esi,eax\r
+        jb      NEAR L$087grandloop\r
+L$086short:\r
+        add     eax,96\r
+        sub     eax,esi\r
+        jz      NEAR L$088done\r
+        cmp     eax,32\r
+        jb      NEAR L$089one\r
+        je      NEAR L$090two\r
+        cmp     eax,64\r
+        jb      NEAR L$091three\r
+        je      NEAR L$092four\r
+        lea     ecx,[1+ebp]\r
+        lea     eax,[3+ebp]\r
+        bsf     ecx,ecx\r
+        bsf     eax,eax\r
+        shl     ecx,4\r
+        shl     eax,4\r
+        movdqu  xmm2,[ebx]\r
+        movdqu  xmm3,[ecx*1+ebx]\r
+        mov     ecx,DWORD [116+esp]\r
+        movdqa  xmm4,xmm2\r
+        movdqu  xmm5,[eax*1+ebx]\r
+        movdqa  xmm6,xmm2\r
+        pxor    xmm2,xmm0\r
+        pxor    xmm3,xmm2\r
+        movdqa  [esp],xmm2\r
+        pxor    xmm4,xmm3\r
+        movdqa  [16+esp],xmm3\r
+        pxor    xmm5,xmm4\r
+        movdqa  [32+esp],xmm4\r
+        pxor    xmm6,xmm5\r
+        movdqa  [48+esp],xmm5\r
+        pxor    xmm7,xmm6\r
+        movdqa  [64+esp],xmm6\r
+        movups  xmm0,[ecx*1+edx-48]\r
+        movdqu  xmm2,[esi]\r
+        movdqu  xmm3,[16+esi]\r
+        movdqu  xmm4,[32+esi]\r
+        movdqu  xmm5,[48+esi]\r
+        movdqu  xmm6,[64+esi]\r
+        pxor    xmm7,xmm7\r
+        movdqa  [96+esp],xmm1\r
+        pxor    xmm2,xmm0\r
+        pxor    xmm3,xmm0\r
+        pxor    xmm4,xmm0\r
+        pxor    xmm5,xmm0\r
+        pxor    xmm6,xmm0\r
+        movups  xmm1,[ecx*1+edx-32]\r
+        pxor    xmm2,[esp]\r
+        pxor    xmm3,[16+esp]\r
+        pxor    xmm4,[32+esp]\r
+        pxor    xmm5,[48+esp]\r
+        pxor    xmm6,[64+esp]\r
+        movups  xmm0,[ecx*1+edx-16]\r
+db      102,15,56,222,209\r
+db      102,15,56,222,217\r
+db      102,15,56,222,225\r
+db      102,15,56,222,233\r
+db      102,15,56,222,241\r
+db      102,15,56,222,249\r
+        mov     edi,DWORD [120+esp]\r
+        call    L$_aesni_decrypt6_enter\r
+        movdqa  xmm0,[64+esp]\r
+        pxor    xmm2,[esp]\r
+        movdqa  xmm1,[96+esp]\r
+        pxor    xmm3,[16+esp]\r
+        pxor    xmm4,[32+esp]\r
+        pxor    xmm5,[48+esp]\r
+        pxor    xmm6,xmm0\r
+        pxor    xmm1,xmm2\r
+        movdqu  [esi*1+edi],xmm2\r
+        pxor    xmm1,xmm3\r
+        movdqu  [16+esi*1+edi],xmm3\r
+        pxor    xmm1,xmm4\r
+        movdqu  [32+esi*1+edi],xmm4\r
+        pxor    xmm1,xmm5\r
+        movdqu  [48+esi*1+edi],xmm5\r
+        pxor    xmm1,xmm6\r
+        movdqu  [64+esi*1+edi],xmm6\r
+        jmp     NEAR L$088done\r
+align   16\r
+L$089one:\r
+        movdqu  xmm7,[ebx]\r
+        mov     edx,DWORD [112+esp]\r
+        movdqu  xmm2,[esi]\r
+        mov     ecx,DWORD [240+edx]\r
+        pxor    xmm7,xmm0\r
+        pxor    xmm2,xmm7\r
+        movdqa  xmm6,xmm1\r
+        mov     edi,DWORD [120+esp]\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$093dec1_loop_18:\r
+db      102,15,56,222,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$093dec1_loop_18\r
+db      102,15,56,223,209\r
+        xorps   xmm2,xmm7\r
+        movaps  xmm1,xmm6\r
+        movdqa  xmm0,xmm7\r
+        xorps   xmm1,xmm2\r
+        movups  [esi*1+edi],xmm2\r
+        jmp     NEAR L$088done\r
+align   16\r
+L$090two:\r
+        lea     ecx,[1+ebp]\r
+        mov     edx,DWORD [112+esp]\r
+        bsf     ecx,ecx\r
+        shl     ecx,4\r
+        movdqu  xmm6,[ebx]\r
+        movdqu  xmm7,[ecx*1+ebx]\r
+        movdqu  xmm2,[esi]\r
+        movdqu  xmm3,[16+esi]\r
+        mov     ecx,DWORD [240+edx]\r
+        movdqa  xmm5,xmm1\r
+        pxor    xmm6,xmm0\r
+        pxor    xmm7,xmm6\r
+        pxor    xmm2,xmm6\r
+        pxor    xmm3,xmm7\r
+        mov     edi,DWORD [120+esp]\r
+        call    __aesni_decrypt2\r
+        xorps   xmm2,xmm6\r
+        xorps   xmm3,xmm7\r
+        movdqa  xmm0,xmm7\r
+        xorps   xmm5,xmm2\r
+        movups  [esi*1+edi],xmm2\r
+        xorps   xmm5,xmm3\r
+        movups  [16+esi*1+edi],xmm3\r
+        movaps  xmm1,xmm5\r
+        jmp     NEAR L$088done\r
+align   16\r
+L$091three:\r
+        lea     ecx,[1+ebp]\r
+        mov     edx,DWORD [112+esp]\r
+        bsf     ecx,ecx\r
+        shl     ecx,4\r
+        movdqu  xmm5,[ebx]\r
+        movdqu  xmm6,[ecx*1+ebx]\r
+        movdqa  xmm7,xmm5\r
+        movdqu  xmm2,[esi]\r
+        movdqu  xmm3,[16+esi]\r
+        movdqu  xmm4,[32+esi]\r
+        mov     ecx,DWORD [240+edx]\r
+        movdqa  [96+esp],xmm1\r
+        pxor    xmm5,xmm0\r
+        pxor    xmm6,xmm5\r
+        pxor    xmm7,xmm6\r
+        pxor    xmm2,xmm5\r
+        pxor    xmm3,xmm6\r
+        pxor    xmm4,xmm7\r
+        mov     edi,DWORD [120+esp]\r
+        call    __aesni_decrypt3\r
+        movdqa  xmm1,[96+esp]\r
+        xorps   xmm2,xmm5\r
+        xorps   xmm3,xmm6\r
+        xorps   xmm4,xmm7\r
+        movups  [esi*1+edi],xmm2\r
+        pxor    xmm1,xmm2\r
+        movdqa  xmm0,xmm7\r
+        movups  [16+esi*1+edi],xmm3\r
+        pxor    xmm1,xmm3\r
+        movups  [32+esi*1+edi],xmm4\r
+        pxor    xmm1,xmm4\r
+        jmp     NEAR L$088done\r
+align   16\r
+L$092four:\r
+        lea     ecx,[1+ebp]\r
+        lea     eax,[3+ebp]\r
+        bsf     ecx,ecx\r
+        bsf     eax,eax\r
+        mov     edx,DWORD [112+esp]\r
+        shl     ecx,4\r
+        shl     eax,4\r
+        movdqu  xmm4,[ebx]\r
+        movdqu  xmm5,[ecx*1+ebx]\r
+        movdqa  xmm6,xmm4\r
+        movdqu  xmm7,[eax*1+ebx]\r
+        pxor    xmm4,xmm0\r
+        movdqu  xmm2,[esi]\r
+        pxor    xmm5,xmm4\r
+        movdqu  xmm3,[16+esi]\r
+        pxor    xmm6,xmm5\r
+        movdqa  [esp],xmm4\r
+        pxor    xmm7,xmm6\r
+        movdqa  [16+esp],xmm5\r
+        movdqu  xmm4,[32+esi]\r
+        movdqu  xmm5,[48+esi]\r
+        mov     ecx,DWORD [240+edx]\r
+        movdqa  [96+esp],xmm1\r
+        pxor    xmm2,[esp]\r
+        pxor    xmm3,[16+esp]\r
+        pxor    xmm4,xmm6\r
+        pxor    xmm5,xmm7\r
+        mov     edi,DWORD [120+esp]\r
+        call    __aesni_decrypt4\r
+        movdqa  xmm1,[96+esp]\r
+        xorps   xmm2,[esp]\r
+        xorps   xmm3,[16+esp]\r
+        xorps   xmm4,xmm6\r
+        movups  [esi*1+edi],xmm2\r
+        pxor    xmm1,xmm2\r
+        xorps   xmm5,xmm7\r
+        movups  [16+esi*1+edi],xmm3\r
+        pxor    xmm1,xmm3\r
+        movdqa  xmm0,xmm7\r
+        movups  [32+esi*1+edi],xmm4\r
+        pxor    xmm1,xmm4\r
+        movups  [48+esi*1+edi],xmm5\r
+        pxor    xmm1,xmm5\r
+L$088done:\r
+        mov     edx,DWORD [128+esp]\r
+        pxor    xmm2,xmm2\r
+        pxor    xmm3,xmm3\r
+        movdqa  [esp],xmm2\r
+        pxor    xmm4,xmm4\r
+        movdqa  [16+esp],xmm2\r
+        pxor    xmm5,xmm5\r
+        movdqa  [32+esp],xmm2\r
+        pxor    xmm6,xmm6\r
+        movdqa  [48+esp],xmm2\r
+        pxor    xmm7,xmm7\r
+        movdqa  [64+esp],xmm2\r
+        movdqa  [80+esp],xmm2\r
+        movdqa  [96+esp],xmm2\r
+        lea     esp,[edx]\r
+        mov     ecx,DWORD [40+esp]\r
+        mov     ebx,DWORD [48+esp]\r
+        movdqu  [ecx],xmm0\r
+        pxor    xmm0,xmm0\r
+        movdqu  [ebx],xmm1\r
+        pxor    xmm1,xmm1\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _aesni_cbc_encrypt\r
+align   16\r
+_aesni_cbc_encrypt:\r
+L$_aesni_cbc_encrypt_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     esi,DWORD [20+esp]\r
+        mov     ebx,esp\r
+        mov     edi,DWORD [24+esp]\r
+        sub     ebx,24\r
+        mov     eax,DWORD [28+esp]\r
+        and     ebx,-16\r
+        mov     edx,DWORD [32+esp]\r
+        mov     ebp,DWORD [36+esp]\r
+        test    eax,eax\r
+        jz      NEAR L$094cbc_abort\r
+        cmp     DWORD [40+esp],0\r
+        xchg    ebx,esp\r
+        movups  xmm7,[ebp]\r
+        mov     ecx,DWORD [240+edx]\r
+        mov     ebp,edx\r
+        mov     DWORD [16+esp],ebx\r
+        mov     ebx,ecx\r
+        je      NEAR L$095cbc_decrypt\r
+        movaps  xmm2,xmm7\r
+        cmp     eax,16\r
+        jb      NEAR L$096cbc_enc_tail\r
+        sub     eax,16\r
+        jmp     NEAR L$097cbc_enc_loop\r
+align   16\r
+L$097cbc_enc_loop:\r
+        movups  xmm7,[esi]\r
+        lea     esi,[16+esi]\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        xorps   xmm7,xmm0\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm7\r
+L$098enc1_loop_19:\r
+db      102,15,56,220,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$098enc1_loop_19\r
+db      102,15,56,221,209\r
+        mov     ecx,ebx\r
+        mov     edx,ebp\r
+        movups  [edi],xmm2\r
+        lea     edi,[16+edi]\r
+        sub     eax,16\r
+        jnc     NEAR L$097cbc_enc_loop\r
+        add     eax,16\r
+        jnz     NEAR L$096cbc_enc_tail\r
+        movaps  xmm7,xmm2\r
+        pxor    xmm2,xmm2\r
+        jmp     NEAR L$099cbc_ret\r
+L$096cbc_enc_tail:\r
+        mov     ecx,eax\r
+dd      2767451785\r
+        mov     ecx,16\r
+        sub     ecx,eax\r
+        xor     eax,eax\r
+dd      2868115081\r
+        lea     edi,[edi-16]\r
+        mov     ecx,ebx\r
+        mov     esi,edi\r
+        mov     edx,ebp\r
+        jmp     NEAR L$097cbc_enc_loop\r
+align   16\r
+L$095cbc_decrypt:\r
+        cmp     eax,80\r
+        jbe     NEAR L$100cbc_dec_tail\r
+        movaps  [esp],xmm7\r
+        sub     eax,80\r
+        jmp     NEAR L$101cbc_dec_loop6_enter\r
+align   16\r
+L$102cbc_dec_loop6:\r
+        movaps  [esp],xmm0\r
+        movups  [edi],xmm7\r
+        lea     edi,[16+edi]\r
+L$101cbc_dec_loop6_enter:\r
+        movdqu  xmm2,[esi]\r
+        movdqu  xmm3,[16+esi]\r
+        movdqu  xmm4,[32+esi]\r
+        movdqu  xmm5,[48+esi]\r
+        movdqu  xmm6,[64+esi]\r
+        movdqu  xmm7,[80+esi]\r
+        call    __aesni_decrypt6\r
+        movups  xmm1,[esi]\r
+        movups  xmm0,[16+esi]\r
+        xorps   xmm2,[esp]\r
+        xorps   xmm3,xmm1\r
+        movups  xmm1,[32+esi]\r
+        xorps   xmm4,xmm0\r
+        movups  xmm0,[48+esi]\r
+        xorps   xmm5,xmm1\r
+        movups  xmm1,[64+esi]\r
+        xorps   xmm6,xmm0\r
+        movups  xmm0,[80+esi]\r
+        xorps   xmm7,xmm1\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        lea     esi,[96+esi]\r
+        movups  [32+edi],xmm4\r
+        mov     ecx,ebx\r
+        movups  [48+edi],xmm5\r
+        mov     edx,ebp\r
+        movups  [64+edi],xmm6\r
+        lea     edi,[80+edi]\r
+        sub     eax,96\r
+        ja      NEAR L$102cbc_dec_loop6\r
+        movaps  xmm2,xmm7\r
+        movaps  xmm7,xmm0\r
+        add     eax,80\r
+        jle     NEAR L$103cbc_dec_clear_tail_collected\r
+        movups  [edi],xmm2\r
+        lea     edi,[16+edi]\r
+L$100cbc_dec_tail:\r
+        movups  xmm2,[esi]\r
+        movaps  xmm6,xmm2\r
+        cmp     eax,16\r
+        jbe     NEAR L$104cbc_dec_one\r
+        movups  xmm3,[16+esi]\r
+        movaps  xmm5,xmm3\r
+        cmp     eax,32\r
+        jbe     NEAR L$105cbc_dec_two\r
+        movups  xmm4,[32+esi]\r
+        cmp     eax,48\r
+        jbe     NEAR L$106cbc_dec_three\r
+        movups  xmm5,[48+esi]\r
+        cmp     eax,64\r
+        jbe     NEAR L$107cbc_dec_four\r
+        movups  xmm6,[64+esi]\r
+        movaps  [esp],xmm7\r
+        movups  xmm2,[esi]\r
+        xorps   xmm7,xmm7\r
+        call    __aesni_decrypt6\r
+        movups  xmm1,[esi]\r
+        movups  xmm0,[16+esi]\r
+        xorps   xmm2,[esp]\r
+        xorps   xmm3,xmm1\r
+        movups  xmm1,[32+esi]\r
+        xorps   xmm4,xmm0\r
+        movups  xmm0,[48+esi]\r
+        xorps   xmm5,xmm1\r
+        movups  xmm7,[64+esi]\r
+        xorps   xmm6,xmm0\r
+        movups  [edi],xmm2\r
+        movups  [16+edi],xmm3\r
+        pxor    xmm3,xmm3\r
+        movups  [32+edi],xmm4\r
+        pxor    xmm4,xmm4\r
+        movups  [48+edi],xmm5\r
+        pxor    xmm5,xmm5\r
+        lea     edi,[64+edi]\r
+        movaps  xmm2,xmm6\r
+        pxor    xmm6,xmm6\r
+        sub     eax,80\r
+        jmp     NEAR L$108cbc_dec_tail_collected\r
+align   16\r
+L$104cbc_dec_one:\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[16+edx]\r
+        lea     edx,[32+edx]\r
+        xorps   xmm2,xmm0\r
+L$109dec1_loop_20:\r
+db      102,15,56,222,209\r
+        dec     ecx\r
+        movups  xmm1,[edx]\r
+        lea     edx,[16+edx]\r
+        jnz     NEAR L$109dec1_loop_20\r
+db      102,15,56,223,209\r
+        xorps   xmm2,xmm7\r
+        movaps  xmm7,xmm6\r
+        sub     eax,16\r
+        jmp     NEAR L$108cbc_dec_tail_collected\r
+align   16\r
+L$105cbc_dec_two:\r
+        call    __aesni_decrypt2\r
+        xorps   xmm2,xmm7\r
+        xorps   xmm3,xmm6\r
+        movups  [edi],xmm2\r
+        movaps  xmm2,xmm3\r
+        pxor    xmm3,xmm3\r
+        lea     edi,[16+edi]\r
+        movaps  xmm7,xmm5\r
+        sub     eax,32\r
+        jmp     NEAR L$108cbc_dec_tail_collected\r
+align   16\r
+L$106cbc_dec_three:\r
+        call    __aesni_decrypt3\r
+        xorps   xmm2,xmm7\r
+        xorps   xmm3,xmm6\r
+        xorps   xmm4,xmm5\r
+        movups  [edi],xmm2\r
+        movaps  xmm2,xmm4\r
+        pxor    xmm4,xmm4\r
+        movups  [16+edi],xmm3\r
+        pxor    xmm3,xmm3\r
+        lea     edi,[32+edi]\r
+        movups  xmm7,[32+esi]\r
+        sub     eax,48\r
+        jmp     NEAR L$108cbc_dec_tail_collected\r
+align   16\r
+L$107cbc_dec_four:\r
+        call    __aesni_decrypt4\r
+        movups  xmm1,[16+esi]\r
+        movups  xmm0,[32+esi]\r
+        xorps   xmm2,xmm7\r
+        movups  xmm7,[48+esi]\r
+        xorps   xmm3,xmm6\r
+        movups  [edi],xmm2\r
+        xorps   xmm4,xmm1\r
+        movups  [16+edi],xmm3\r
+        pxor    xmm3,xmm3\r
+        xorps   xmm5,xmm0\r
+        movups  [32+edi],xmm4\r
+        pxor    xmm4,xmm4\r
+        lea     edi,[48+edi]\r
+        movaps  xmm2,xmm5\r
+        pxor    xmm5,xmm5\r
+        sub     eax,64\r
+        jmp     NEAR L$108cbc_dec_tail_collected\r
+align   16\r
+L$103cbc_dec_clear_tail_collected:\r
+        pxor    xmm3,xmm3\r
+        pxor    xmm4,xmm4\r
+        pxor    xmm5,xmm5\r
+        pxor    xmm6,xmm6\r
+L$108cbc_dec_tail_collected:\r
+        and     eax,15\r
+        jnz     NEAR L$110cbc_dec_tail_partial\r
+        movups  [edi],xmm2\r
+        pxor    xmm0,xmm0\r
+        jmp     NEAR L$099cbc_ret\r
+align   16\r
+L$110cbc_dec_tail_partial:\r
+        movaps  [esp],xmm2\r
+        pxor    xmm0,xmm0\r
+        mov     ecx,16\r
+        mov     esi,esp\r
+        sub     ecx,eax\r
+dd      2767451785\r
+        movdqa  [esp],xmm2\r
+L$099cbc_ret:\r
+        mov     esp,DWORD [16+esp]\r
+        mov     ebp,DWORD [36+esp]\r
+        pxor    xmm2,xmm2\r
+        pxor    xmm1,xmm1\r
+        movups  [ebp],xmm7\r
+        pxor    xmm7,xmm7\r
+L$094cbc_abort:\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+align   16\r
+__aesni_set_encrypt_key:\r
+        push    ebp\r
+        push    ebx\r
+        test    eax,eax\r
+        jz      NEAR L$111bad_pointer\r
+        test    edx,edx\r
+        jz      NEAR L$111bad_pointer\r
+        call    L$112pic\r
+L$112pic:\r
+        pop     ebx\r
+        lea     ebx,[(L$key_const-L$112pic)+ebx]\r
+        lea     ebp,[_OPENSSL_ia32cap_P]\r
+        movups  xmm0,[eax]\r
+        xorps   xmm4,xmm4\r
+        mov     ebp,DWORD [4+ebp]\r
+        lea     edx,[16+edx]\r
+        and     ebp,268437504\r
+        cmp     ecx,256\r
+        je      NEAR L$11314rounds\r
+        cmp     ecx,192\r
+        je      NEAR L$11412rounds\r
+        cmp     ecx,128\r
+        jne     NEAR L$115bad_keybits\r
+align   16\r
+L$11610rounds:\r
+        cmp     ebp,268435456\r
+        je      NEAR L$11710rounds_alt\r
+        mov     ecx,9\r
+        movups  [edx-16],xmm0\r
+db      102,15,58,223,200,1\r
+        call    L$118key_128_cold\r
+db      102,15,58,223,200,2\r
+        call    L$119key_128\r
+db      102,15,58,223,200,4\r
+        call    L$119key_128\r
+db      102,15,58,223,200,8\r
+        call    L$119key_128\r
+db      102,15,58,223,200,16\r
+        call    L$119key_128\r
+db      102,15,58,223,200,32\r
+        call    L$119key_128\r
+db      102,15,58,223,200,64\r
+        call    L$119key_128\r
+db      102,15,58,223,200,128\r
+        call    L$119key_128\r
+db      102,15,58,223,200,27\r
+        call    L$119key_128\r
+db      102,15,58,223,200,54\r
+        call    L$119key_128\r
+        movups  [edx],xmm0\r
+        mov     DWORD [80+edx],ecx\r
+        jmp     NEAR L$120good_key\r
+align   16\r
+L$119key_128:\r
+        movups  [edx],xmm0\r
+        lea     edx,[16+edx]\r
+L$118key_128_cold:\r
+        shufps  xmm4,xmm0,16\r
+        xorps   xmm0,xmm4\r
+        shufps  xmm4,xmm0,140\r
+        xorps   xmm0,xmm4\r
+        shufps  xmm1,xmm1,255\r
+        xorps   xmm0,xmm1\r
+        ret\r
+align   16\r
+L$11710rounds_alt:\r
+        movdqa  xmm5,[ebx]\r
+        mov     ecx,8\r
+        movdqa  xmm4,[32+ebx]\r
+        movdqa  xmm2,xmm0\r
+        movdqu  [edx-16],xmm0\r
+L$121loop_key128:\r
+db      102,15,56,0,197\r
+db      102,15,56,221,196\r
+        pslld   xmm4,1\r
+        lea     edx,[16+edx]\r
+        movdqa  xmm3,xmm2\r
+        pslldq  xmm2,4\r
+        pxor    xmm3,xmm2\r
+        pslldq  xmm2,4\r
+        pxor    xmm3,xmm2\r
+        pslldq  xmm2,4\r
+        pxor    xmm2,xmm3\r
+        pxor    xmm0,xmm2\r
+        movdqu  [edx-16],xmm0\r
+        movdqa  xmm2,xmm0\r
+        dec     ecx\r
+        jnz     NEAR L$121loop_key128\r
+        movdqa  xmm4,[48+ebx]\r
+db      102,15,56,0,197\r
+db      102,15,56,221,196\r
+        pslld   xmm4,1\r
+        movdqa  xmm3,xmm2\r
+        pslldq  xmm2,4\r
+        pxor    xmm3,xmm2\r
+        pslldq  xmm2,4\r
+        pxor    xmm3,xmm2\r
+        pslldq  xmm2,4\r
+        pxor    xmm2,xmm3\r
+        pxor    xmm0,xmm2\r
+        movdqu  [edx],xmm0\r
+        movdqa  xmm2,xmm0\r
+db      102,15,56,0,197\r
+db      102,15,56,221,196\r
+        movdqa  xmm3,xmm2\r
+        pslldq  xmm2,4\r
+        pxor    xmm3,xmm2\r
+        pslldq  xmm2,4\r
+        pxor    xmm3,xmm2\r
+        pslldq  xmm2,4\r
+        pxor    xmm2,xmm3\r
+        pxor    xmm0,xmm2\r
+        movdqu  [16+edx],xmm0\r
+        mov     ecx,9\r
+        mov     DWORD [96+edx],ecx\r
+        jmp     NEAR L$120good_key\r
+align   16\r
+L$11412rounds:\r
+        movq    xmm2,[16+eax]\r
+        cmp     ebp,268435456\r
+        je      NEAR L$12212rounds_alt\r
+        mov     ecx,11\r
+        movups  [edx-16],xmm0\r
+db      102,15,58,223,202,1\r
+        call    L$123key_192a_cold\r
+db      102,15,58,223,202,2\r
+        call    L$124key_192b\r
+db      102,15,58,223,202,4\r
+        call    L$125key_192a\r
+db      102,15,58,223,202,8\r
+        call    L$124key_192b\r
+db      102,15,58,223,202,16\r
+        call    L$125key_192a\r
+db      102,15,58,223,202,32\r
+        call    L$124key_192b\r
+db      102,15,58,223,202,64\r
+        call    L$125key_192a\r
+db      102,15,58,223,202,128\r
+        call    L$124key_192b\r
+        movups  [edx],xmm0\r
+        mov     DWORD [48+edx],ecx\r
+        jmp     NEAR L$120good_key\r
+align   16\r
+L$125key_192a:\r
+        movups  [edx],xmm0\r
+        lea     edx,[16+edx]\r
+align   16\r
+L$123key_192a_cold:\r
+        movaps  xmm5,xmm2\r
+L$126key_192b_warm:\r
+        shufps  xmm4,xmm0,16\r
+        movdqa  xmm3,xmm2\r
+        xorps   xmm0,xmm4\r
+        shufps  xmm4,xmm0,140\r
+        pslldq  xmm3,4\r
+        xorps   xmm0,xmm4\r
+        pshufd  xmm1,xmm1,85\r
+        pxor    xmm2,xmm3\r
+        pxor    xmm0,xmm1\r
+        pshufd  xmm3,xmm0,255\r
+        pxor    xmm2,xmm3\r
+        ret\r
+align   16\r
+L$124key_192b:\r
+        movaps  xmm3,xmm0\r
+        shufps  xmm5,xmm0,68\r
+        movups  [edx],xmm5\r
+        shufps  xmm3,xmm2,78\r
+        movups  [16+edx],xmm3\r
+        lea     edx,[32+edx]\r
+        jmp     NEAR L$126key_192b_warm\r
+align   16\r
+L$12212rounds_alt:\r
+        movdqa  xmm5,[16+ebx]\r
+        movdqa  xmm4,[32+ebx]\r
+        mov     ecx,8\r
+        movdqu  [edx-16],xmm0\r
+L$127loop_key192:\r
+        movq    [edx],xmm2\r
+        movdqa  xmm1,xmm2\r
+db      102,15,56,0,213\r
+db      102,15,56,221,212\r
+        pslld   xmm4,1\r
+        lea     edx,[24+edx]\r
+        movdqa  xmm3,xmm0\r
+        pslldq  xmm0,4\r
+        pxor    xmm3,xmm0\r
+        pslldq  xmm0,4\r
+        pxor    xmm3,xmm0\r
+        pslldq  xmm0,4\r
+        pxor    xmm0,xmm3\r
+        pshufd  xmm3,xmm0,255\r
+        pxor    xmm3,xmm1\r
+        pslldq  xmm1,4\r
+        pxor    xmm3,xmm1\r
+        pxor    xmm0,xmm2\r
+        pxor    xmm2,xmm3\r
+        movdqu  [edx-16],xmm0\r
+        dec     ecx\r
+        jnz     NEAR L$127loop_key192\r
+        mov     ecx,11\r
+        mov     DWORD [32+edx],ecx\r
+        jmp     NEAR L$120good_key\r
+align   16\r
+L$11314rounds:\r
+        movups  xmm2,[16+eax]\r
+        lea     edx,[16+edx]\r
+        cmp     ebp,268435456\r
+        je      NEAR L$12814rounds_alt\r
+        mov     ecx,13\r
+        movups  [edx-32],xmm0\r
+        movups  [edx-16],xmm2\r
+db      102,15,58,223,202,1\r
+        call    L$129key_256a_cold\r
+db      102,15,58,223,200,1\r
+        call    L$130key_256b\r
+db      102,15,58,223,202,2\r
+        call    L$131key_256a\r
+db      102,15,58,223,200,2\r
+        call    L$130key_256b\r
+db      102,15,58,223,202,4\r
+        call    L$131key_256a\r
+db      102,15,58,223,200,4\r
+        call    L$130key_256b\r
+db      102,15,58,223,202,8\r
+        call    L$131key_256a\r
+db      102,15,58,223,200,8\r
+        call    L$130key_256b\r
+db      102,15,58,223,202,16\r
+        call    L$131key_256a\r
+db      102,15,58,223,200,16\r
+        call    L$130key_256b\r
+db      102,15,58,223,202,32\r
+        call    L$131key_256a\r
+db      102,15,58,223,200,32\r
+        call    L$130key_256b\r
+db      102,15,58,223,202,64\r
+        call    L$131key_256a\r
+        movups  [edx],xmm0\r
+        mov     DWORD [16+edx],ecx\r
+        xor     eax,eax\r
+        jmp     NEAR L$120good_key\r
+align   16\r
+L$131key_256a:\r
+        movups  [edx],xmm2\r
+        lea     edx,[16+edx]\r
+L$129key_256a_cold:\r
+        shufps  xmm4,xmm0,16\r
+        xorps   xmm0,xmm4\r
+        shufps  xmm4,xmm0,140\r
+        xorps   xmm0,xmm4\r
+        shufps  xmm1,xmm1,255\r
+        xorps   xmm0,xmm1\r
+        ret\r
+align   16\r
+L$130key_256b:\r
+        movups  [edx],xmm0\r
+        lea     edx,[16+edx]\r
+        shufps  xmm4,xmm2,16\r
+        xorps   xmm2,xmm4\r
+        shufps  xmm4,xmm2,140\r
+        xorps   xmm2,xmm4\r
+        shufps  xmm1,xmm1,170\r
+        xorps   xmm2,xmm1\r
+        ret\r
+align   16\r
+L$12814rounds_alt:\r
+        movdqa  xmm5,[ebx]\r
+        movdqa  xmm4,[32+ebx]\r
+        mov     ecx,7\r
+        movdqu  [edx-32],xmm0\r
+        movdqa  xmm1,xmm2\r
+        movdqu  [edx-16],xmm2\r
+L$132loop_key256:\r
+db      102,15,56,0,213\r
+db      102,15,56,221,212\r
+        movdqa  xmm3,xmm0\r
+        pslldq  xmm0,4\r
+        pxor    xmm3,xmm0\r
+        pslldq  xmm0,4\r
+        pxor    xmm3,xmm0\r
+        pslldq  xmm0,4\r
+        pxor    xmm0,xmm3\r
+        pslld   xmm4,1\r
+        pxor    xmm0,xmm2\r
+        movdqu  [edx],xmm0\r
+        dec     ecx\r
+        jz      NEAR L$133done_key256\r
+        pshufd  xmm2,xmm0,255\r
+        pxor    xmm3,xmm3\r
+db      102,15,56,221,211\r
+        movdqa  xmm3,xmm1\r
+        pslldq  xmm1,4\r
+        pxor    xmm3,xmm1\r
+        pslldq  xmm1,4\r
+        pxor    xmm3,xmm1\r
+        pslldq  xmm1,4\r
+        pxor    xmm1,xmm3\r
+        pxor    xmm2,xmm1\r
+        movdqu  [16+edx],xmm2\r
+        lea     edx,[32+edx]\r
+        movdqa  xmm1,xmm2\r
+        jmp     NEAR L$132loop_key256\r
+L$133done_key256:\r
+        mov     ecx,13\r
+        mov     DWORD [16+edx],ecx\r
+L$120good_key:\r
+        pxor    xmm0,xmm0\r
+        pxor    xmm1,xmm1\r
+        pxor    xmm2,xmm2\r
+        pxor    xmm3,xmm3\r
+        pxor    xmm4,xmm4\r
+        pxor    xmm5,xmm5\r
+        xor     eax,eax\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+align   4\r
+L$111bad_pointer:\r
+        mov     eax,-1\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+align   4\r
+L$115bad_keybits:\r
+        pxor    xmm0,xmm0\r
+        mov     eax,-2\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _aesni_set_encrypt_key\r
+align   16\r
+_aesni_set_encrypt_key:\r
+L$_aesni_set_encrypt_key_begin:\r
+        mov     eax,DWORD [4+esp]\r
+        mov     ecx,DWORD [8+esp]\r
+        mov     edx,DWORD [12+esp]\r
+        call    __aesni_set_encrypt_key\r
+        ret\r
+global  _aesni_set_decrypt_key\r
+align   16\r
+_aesni_set_decrypt_key:\r
+L$_aesni_set_decrypt_key_begin:\r
+        mov     eax,DWORD [4+esp]\r
+        mov     ecx,DWORD [8+esp]\r
+        mov     edx,DWORD [12+esp]\r
+        call    __aesni_set_encrypt_key\r
+        mov     edx,DWORD [12+esp]\r
+        shl     ecx,4\r
+        test    eax,eax\r
+        jnz     NEAR L$134dec_key_ret\r
+        lea     eax,[16+ecx*1+edx]\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[eax]\r
+        movups  [eax],xmm0\r
+        movups  [edx],xmm1\r
+        lea     edx,[16+edx]\r
+        lea     eax,[eax-16]\r
+L$135dec_key_inverse:\r
+        movups  xmm0,[edx]\r
+        movups  xmm1,[eax]\r
+db      102,15,56,219,192\r
+db      102,15,56,219,201\r
+        lea     edx,[16+edx]\r
+        lea     eax,[eax-16]\r
+        movups  [16+eax],xmm0\r
+        movups  [edx-16],xmm1\r
+        cmp     eax,edx\r
+        ja      NEAR L$135dec_key_inverse\r
+        movups  xmm0,[edx]\r
+db      102,15,56,219,192\r
+        movups  [edx],xmm0\r
+        pxor    xmm0,xmm0\r
+        pxor    xmm1,xmm1\r
+        xor     eax,eax\r
+L$134dec_key_ret:\r
+        ret\r
+align   64\r
+L$key_const:\r
+dd      202313229,202313229,202313229,202313229\r
+dd      67569157,67569157,67569157,67569157\r
+dd      1,1,1,1\r
+dd      27,27,27,27\r
+db      65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69\r
+db      83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83\r
+db      32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115\r
+db      115,108,46,111,114,103,62,0\r
+segment .bss\r
+common  _OPENSSL_ia32cap_P 16\r
diff --git a/CryptoPkg/Library/OpensslLib/IA32/crypto/aes/vpaes-x86.nasm b/CryptoPkg/Library/OpensslLib/IA32/crypto/aes/vpaes-x86.nasm
new file mode 100644 (file)
index 0000000..cf2e13f
--- /dev/null
@@ -0,0 +1,651 @@
+; WARNING: do not edit!\r
+; Generated from openssl/crypto/aes/asm/vpaes-x86.pl\r
+;\r
+; Copyright 2011-2020 The OpenSSL Project Authors. All Rights Reserved.\r
+;\r
+; Licensed under the OpenSSL license (the "License").  You may not use\r
+; this file except in compliance with the License.  You can obtain a copy\r
+; in the file LICENSE in the source distribution or at\r
+; https://www.openssl.org/source/license.html\r
+\r
+%ifidn __OUTPUT_FORMAT__,obj\r
+section code    use32 class=code align=64\r
+%elifidn __OUTPUT_FORMAT__,win32\r
+$@feat.00 equ 1\r
+section .text   code align=64\r
+%else\r
+section .text   code\r
+%endif\r
+align   64\r
+L$_vpaes_consts:\r
+dd      218628480,235210255,168496130,67568393\r
+dd      252381056,17041926,33884169,51187212\r
+dd      252645135,252645135,252645135,252645135\r
+dd      1512730624,3266504856,1377990664,3401244816\r
+dd      830229760,1275146365,2969422977,3447763452\r
+dd      3411033600,2979783055,338359620,2782886510\r
+dd      4209124096,907596821,221174255,1006095553\r
+dd      191964160,3799684038,3164090317,1589111125\r
+dd      182528256,1777043520,2877432650,3265356744\r
+dd      1874708224,3503451415,3305285752,363511674\r
+dd      1606117888,3487855781,1093350906,2384367825\r
+dd      197121,67569157,134941193,202313229\r
+dd      67569157,134941193,202313229,197121\r
+dd      134941193,202313229,197121,67569157\r
+dd      202313229,197121,67569157,134941193\r
+dd      33619971,100992007,168364043,235736079\r
+dd      235736079,33619971,100992007,168364043\r
+dd      168364043,235736079,33619971,100992007\r
+dd      100992007,168364043,235736079,33619971\r
+dd      50462976,117835012,185207048,252579084\r
+dd      252314880,51251460,117574920,184942860\r
+dd      184682752,252054788,50987272,118359308\r
+dd      118099200,185467140,251790600,50727180\r
+dd      2946363062,528716217,1300004225,1881839624\r
+dd      1532713819,1532713819,1532713819,1532713819\r
+dd      3602276352,4288629033,3737020424,4153884961\r
+dd      1354558464,32357713,2958822624,3775749553\r
+dd      1201988352,132424512,1572796698,503232858\r
+dd      2213177600,1597421020,4103937655,675398315\r
+dd      2749646592,4273543773,1511898873,121693092\r
+dd      3040248576,1103263732,2871565598,1608280554\r
+dd      2236667136,2588920351,482954393,64377734\r
+dd      3069987328,291237287,2117370568,3650299247\r
+dd      533321216,3573750986,2572112006,1401264716\r
+dd      1339849704,2721158661,548607111,3445553514\r
+dd      2128193280,3054596040,2183486460,1257083700\r
+dd      655635200,1165381986,3923443150,2344132524\r
+dd      190078720,256924420,290342170,357187870\r
+dd      1610966272,2263057382,4103205268,309794674\r
+dd      2592527872,2233205587,1335446729,3402964816\r
+dd      3973531904,3225098121,3002836325,1918774430\r
+dd      3870401024,2102906079,2284471353,4117666579\r
+dd      617007872,1021508343,366931923,691083277\r
+dd      2528395776,3491914898,2968704004,1613121270\r
+dd      3445188352,3247741094,844474987,4093578302\r
+dd      651481088,1190302358,1689581232,574775300\r
+dd      4289380608,206939853,2555985458,2489840491\r
+dd      2130264064,327674451,3566485037,3349835193\r
+dd      2470714624,316102159,3636825756,3393945945\r
+db      86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105\r
+db      111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83\r
+db      83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117\r
+db      114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105\r
+db      118,101,114,115,105,116,121,41,0\r
+align   64\r
+align   16\r
+__vpaes_preheat:\r
+        add     ebp,DWORD [esp]\r
+        movdqa  xmm7,[ebp-48]\r
+        movdqa  xmm6,[ebp-16]\r
+        ret\r
+align   16\r
+__vpaes_encrypt_core:\r
+        mov     ecx,16\r
+        mov     eax,DWORD [240+edx]\r
+        movdqa  xmm1,xmm6\r
+        movdqa  xmm2,[ebp]\r
+        pandn   xmm1,xmm0\r
+        pand    xmm0,xmm6\r
+        movdqu  xmm5,[edx]\r
+db      102,15,56,0,208\r
+        movdqa  xmm0,[16+ebp]\r
+        pxor    xmm2,xmm5\r
+        psrld   xmm1,4\r
+        add     edx,16\r
+db      102,15,56,0,193\r
+        lea     ebx,[192+ebp]\r
+        pxor    xmm0,xmm2\r
+        jmp     NEAR L$000enc_entry\r
+align   16\r
+L$001enc_loop:\r
+        movdqa  xmm4,[32+ebp]\r
+        movdqa  xmm0,[48+ebp]\r
+db      102,15,56,0,226\r
+db      102,15,56,0,195\r
+        pxor    xmm4,xmm5\r
+        movdqa  xmm5,[64+ebp]\r
+        pxor    xmm0,xmm4\r
+        movdqa  xmm1,[ecx*1+ebx-64]\r
+db      102,15,56,0,234\r
+        movdqa  xmm2,[80+ebp]\r
+        movdqa  xmm4,[ecx*1+ebx]\r
+db      102,15,56,0,211\r
+        movdqa  xmm3,xmm0\r
+        pxor    xmm2,xmm5\r
+db      102,15,56,0,193\r
+        add     edx,16\r
+        pxor    xmm0,xmm2\r
+db      102,15,56,0,220\r
+        add     ecx,16\r
+        pxor    xmm3,xmm0\r
+db      102,15,56,0,193\r
+        and     ecx,48\r
+        sub     eax,1\r
+        pxor    xmm0,xmm3\r
+L$000enc_entry:\r
+        movdqa  xmm1,xmm6\r
+        movdqa  xmm5,[ebp-32]\r
+        pandn   xmm1,xmm0\r
+        psrld   xmm1,4\r
+        pand    xmm0,xmm6\r
+db      102,15,56,0,232\r
+        movdqa  xmm3,xmm7\r
+        pxor    xmm0,xmm1\r
+db      102,15,56,0,217\r
+        movdqa  xmm4,xmm7\r
+        pxor    xmm3,xmm5\r
+db      102,15,56,0,224\r
+        movdqa  xmm2,xmm7\r
+        pxor    xmm4,xmm5\r
+db      102,15,56,0,211\r
+        movdqa  xmm3,xmm7\r
+        pxor    xmm2,xmm0\r
+db      102,15,56,0,220\r
+        movdqu  xmm5,[edx]\r
+        pxor    xmm3,xmm1\r
+        jnz     NEAR L$001enc_loop\r
+        movdqa  xmm4,[96+ebp]\r
+        movdqa  xmm0,[112+ebp]\r
+db      102,15,56,0,226\r
+        pxor    xmm4,xmm5\r
+db      102,15,56,0,195\r
+        movdqa  xmm1,[64+ecx*1+ebx]\r
+        pxor    xmm0,xmm4\r
+db      102,15,56,0,193\r
+        ret\r
+align   16\r
+__vpaes_decrypt_core:\r
+        lea     ebx,[608+ebp]\r
+        mov     eax,DWORD [240+edx]\r
+        movdqa  xmm1,xmm6\r
+        movdqa  xmm2,[ebx-64]\r
+        pandn   xmm1,xmm0\r
+        mov     ecx,eax\r
+        psrld   xmm1,4\r
+        movdqu  xmm5,[edx]\r
+        shl     ecx,4\r
+        pand    xmm0,xmm6\r
+db      102,15,56,0,208\r
+        movdqa  xmm0,[ebx-48]\r
+        xor     ecx,48\r
+db      102,15,56,0,193\r
+        and     ecx,48\r
+        pxor    xmm2,xmm5\r
+        movdqa  xmm5,[176+ebp]\r
+        pxor    xmm0,xmm2\r
+        add     edx,16\r
+        lea     ecx,[ecx*1+ebx-352]\r
+        jmp     NEAR L$002dec_entry\r
+align   16\r
+L$003dec_loop:\r
+        movdqa  xmm4,[ebx-32]\r
+        movdqa  xmm1,[ebx-16]\r
+db      102,15,56,0,226\r
+db      102,15,56,0,203\r
+        pxor    xmm0,xmm4\r
+        movdqa  xmm4,[ebx]\r
+        pxor    xmm0,xmm1\r
+        movdqa  xmm1,[16+ebx]\r
+db      102,15,56,0,226\r
+db      102,15,56,0,197\r
+db      102,15,56,0,203\r
+        pxor    xmm0,xmm4\r
+        movdqa  xmm4,[32+ebx]\r
+        pxor    xmm0,xmm1\r
+        movdqa  xmm1,[48+ebx]\r
+db      102,15,56,0,226\r
+db      102,15,56,0,197\r
+db      102,15,56,0,203\r
+        pxor    xmm0,xmm4\r
+        movdqa  xmm4,[64+ebx]\r
+        pxor    xmm0,xmm1\r
+        movdqa  xmm1,[80+ebx]\r
+db      102,15,56,0,226\r
+db      102,15,56,0,197\r
+db      102,15,56,0,203\r
+        pxor    xmm0,xmm4\r
+        add     edx,16\r
+db      102,15,58,15,237,12\r
+        pxor    xmm0,xmm1\r
+        sub     eax,1\r
+L$002dec_entry:\r
+        movdqa  xmm1,xmm6\r
+        movdqa  xmm2,[ebp-32]\r
+        pandn   xmm1,xmm0\r
+        pand    xmm0,xmm6\r
+        psrld   xmm1,4\r
+db      102,15,56,0,208\r
+        movdqa  xmm3,xmm7\r
+        pxor    xmm0,xmm1\r
+db      102,15,56,0,217\r
+        movdqa  xmm4,xmm7\r
+        pxor    xmm3,xmm2\r
+db      102,15,56,0,224\r
+        pxor    xmm4,xmm2\r
+        movdqa  xmm2,xmm7\r
+db      102,15,56,0,211\r
+        movdqa  xmm3,xmm7\r
+        pxor    xmm2,xmm0\r
+db      102,15,56,0,220\r
+        movdqu  xmm0,[edx]\r
+        pxor    xmm3,xmm1\r
+        jnz     NEAR L$003dec_loop\r
+        movdqa  xmm4,[96+ebx]\r
+db      102,15,56,0,226\r
+        pxor    xmm4,xmm0\r
+        movdqa  xmm0,[112+ebx]\r
+        movdqa  xmm2,[ecx]\r
+db      102,15,56,0,195\r
+        pxor    xmm0,xmm4\r
+db      102,15,56,0,194\r
+        ret\r
+align   16\r
+__vpaes_schedule_core:\r
+        add     ebp,DWORD [esp]\r
+        movdqu  xmm0,[esi]\r
+        movdqa  xmm2,[320+ebp]\r
+        movdqa  xmm3,xmm0\r
+        lea     ebx,[ebp]\r
+        movdqa  [4+esp],xmm2\r
+        call    __vpaes_schedule_transform\r
+        movdqa  xmm7,xmm0\r
+        test    edi,edi\r
+        jnz     NEAR L$004schedule_am_decrypting\r
+        movdqu  [edx],xmm0\r
+        jmp     NEAR L$005schedule_go\r
+L$004schedule_am_decrypting:\r
+        movdqa  xmm1,[256+ecx*1+ebp]\r
+db      102,15,56,0,217\r
+        movdqu  [edx],xmm3\r
+        xor     ecx,48\r
+L$005schedule_go:\r
+        cmp     eax,192\r
+        ja      NEAR L$006schedule_256\r
+        je      NEAR L$007schedule_192\r
+L$008schedule_128:\r
+        mov     eax,10\r
+L$009loop_schedule_128:\r
+        call    __vpaes_schedule_round\r
+        dec     eax\r
+        jz      NEAR L$010schedule_mangle_last\r
+        call    __vpaes_schedule_mangle\r
+        jmp     NEAR L$009loop_schedule_128\r
+align   16\r
+L$007schedule_192:\r
+        movdqu  xmm0,[8+esi]\r
+        call    __vpaes_schedule_transform\r
+        movdqa  xmm6,xmm0\r
+        pxor    xmm4,xmm4\r
+        movhlps xmm6,xmm4\r
+        mov     eax,4\r
+L$011loop_schedule_192:\r
+        call    __vpaes_schedule_round\r
+db      102,15,58,15,198,8\r
+        call    __vpaes_schedule_mangle\r
+        call    __vpaes_schedule_192_smear\r
+        call    __vpaes_schedule_mangle\r
+        call    __vpaes_schedule_round\r
+        dec     eax\r
+        jz      NEAR L$010schedule_mangle_last\r
+        call    __vpaes_schedule_mangle\r
+        call    __vpaes_schedule_192_smear\r
+        jmp     NEAR L$011loop_schedule_192\r
+align   16\r
+L$006schedule_256:\r
+        movdqu  xmm0,[16+esi]\r
+        call    __vpaes_schedule_transform\r
+        mov     eax,7\r
+L$012loop_schedule_256:\r
+        call    __vpaes_schedule_mangle\r
+        movdqa  xmm6,xmm0\r
+        call    __vpaes_schedule_round\r
+        dec     eax\r
+        jz      NEAR L$010schedule_mangle_last\r
+        call    __vpaes_schedule_mangle\r
+        pshufd  xmm0,xmm0,255\r
+        movdqa  [20+esp],xmm7\r
+        movdqa  xmm7,xmm6\r
+        call    L$_vpaes_schedule_low_round\r
+        movdqa  xmm7,[20+esp]\r
+        jmp     NEAR L$012loop_schedule_256\r
+align   16\r
+L$010schedule_mangle_last:\r
+        lea     ebx,[384+ebp]\r
+        test    edi,edi\r
+        jnz     NEAR L$013schedule_mangle_last_dec\r
+        movdqa  xmm1,[256+ecx*1+ebp]\r
+db      102,15,56,0,193\r
+        lea     ebx,[352+ebp]\r
+        add     edx,32\r
+L$013schedule_mangle_last_dec:\r
+        add     edx,-16\r
+        pxor    xmm0,[336+ebp]\r
+        call    __vpaes_schedule_transform\r
+        movdqu  [edx],xmm0\r
+        pxor    xmm0,xmm0\r
+        pxor    xmm1,xmm1\r
+        pxor    xmm2,xmm2\r
+        pxor    xmm3,xmm3\r
+        pxor    xmm4,xmm4\r
+        pxor    xmm5,xmm5\r
+        pxor    xmm6,xmm6\r
+        pxor    xmm7,xmm7\r
+        ret\r
+align   16\r
+__vpaes_schedule_192_smear:\r
+        pshufd  xmm1,xmm6,128\r
+        pshufd  xmm0,xmm7,254\r
+        pxor    xmm6,xmm1\r
+        pxor    xmm1,xmm1\r
+        pxor    xmm6,xmm0\r
+        movdqa  xmm0,xmm6\r
+        movhlps xmm6,xmm1\r
+        ret\r
+align   16\r
+__vpaes_schedule_round:\r
+        movdqa  xmm2,[8+esp]\r
+        pxor    xmm1,xmm1\r
+db      102,15,58,15,202,15\r
+db      102,15,58,15,210,15\r
+        pxor    xmm7,xmm1\r
+        pshufd  xmm0,xmm0,255\r
+db      102,15,58,15,192,1\r
+        movdqa  [8+esp],xmm2\r
+L$_vpaes_schedule_low_round:\r
+        movdqa  xmm1,xmm7\r
+        pslldq  xmm7,4\r
+        pxor    xmm7,xmm1\r
+        movdqa  xmm1,xmm7\r
+        pslldq  xmm7,8\r
+        pxor    xmm7,xmm1\r
+        pxor    xmm7,[336+ebp]\r
+        movdqa  xmm4,[ebp-16]\r
+        movdqa  xmm5,[ebp-48]\r
+        movdqa  xmm1,xmm4\r
+        pandn   xmm1,xmm0\r
+        psrld   xmm1,4\r
+        pand    xmm0,xmm4\r
+        movdqa  xmm2,[ebp-32]\r
+db      102,15,56,0,208\r
+        pxor    xmm0,xmm1\r
+        movdqa  xmm3,xmm5\r
+db      102,15,56,0,217\r
+        pxor    xmm3,xmm2\r
+        movdqa  xmm4,xmm5\r
+db      102,15,56,0,224\r
+        pxor    xmm4,xmm2\r
+        movdqa  xmm2,xmm5\r
+db      102,15,56,0,211\r
+        pxor    xmm2,xmm0\r
+        movdqa  xmm3,xmm5\r
+db      102,15,56,0,220\r
+        pxor    xmm3,xmm1\r
+        movdqa  xmm4,[32+ebp]\r
+db      102,15,56,0,226\r
+        movdqa  xmm0,[48+ebp]\r
+db      102,15,56,0,195\r
+        pxor    xmm0,xmm4\r
+        pxor    xmm0,xmm7\r
+        movdqa  xmm7,xmm0\r
+        ret\r
+align   16\r
+__vpaes_schedule_transform:\r
+        movdqa  xmm2,[ebp-16]\r
+        movdqa  xmm1,xmm2\r
+        pandn   xmm1,xmm0\r
+        psrld   xmm1,4\r
+        pand    xmm0,xmm2\r
+        movdqa  xmm2,[ebx]\r
+db      102,15,56,0,208\r
+        movdqa  xmm0,[16+ebx]\r
+db      102,15,56,0,193\r
+        pxor    xmm0,xmm2\r
+        ret\r
+align   16\r
+__vpaes_schedule_mangle:\r
+        movdqa  xmm4,xmm0\r
+        movdqa  xmm5,[128+ebp]\r
+        test    edi,edi\r
+        jnz     NEAR L$014schedule_mangle_dec\r
+        add     edx,16\r
+        pxor    xmm4,[336+ebp]\r
+db      102,15,56,0,229\r
+        movdqa  xmm3,xmm4\r
+db      102,15,56,0,229\r
+        pxor    xmm3,xmm4\r
+db      102,15,56,0,229\r
+        pxor    xmm3,xmm4\r
+        jmp     NEAR L$015schedule_mangle_both\r
+align   16\r
+L$014schedule_mangle_dec:\r
+        movdqa  xmm2,[ebp-16]\r
+        lea     esi,[416+ebp]\r
+        movdqa  xmm1,xmm2\r
+        pandn   xmm1,xmm4\r
+        psrld   xmm1,4\r
+        pand    xmm4,xmm2\r
+        movdqa  xmm2,[esi]\r
+db      102,15,56,0,212\r
+        movdqa  xmm3,[16+esi]\r
+db      102,15,56,0,217\r
+        pxor    xmm3,xmm2\r
+db      102,15,56,0,221\r
+        movdqa  xmm2,[32+esi]\r
+db      102,15,56,0,212\r
+        pxor    xmm2,xmm3\r
+        movdqa  xmm3,[48+esi]\r
+db      102,15,56,0,217\r
+        pxor    xmm3,xmm2\r
+db      102,15,56,0,221\r
+        movdqa  xmm2,[64+esi]\r
+db      102,15,56,0,212\r
+        pxor    xmm2,xmm3\r
+        movdqa  xmm3,[80+esi]\r
+db      102,15,56,0,217\r
+        pxor    xmm3,xmm2\r
+db      102,15,56,0,221\r
+        movdqa  xmm2,[96+esi]\r
+db      102,15,56,0,212\r
+        pxor    xmm2,xmm3\r
+        movdqa  xmm3,[112+esi]\r
+db      102,15,56,0,217\r
+        pxor    xmm3,xmm2\r
+        add     edx,-16\r
+L$015schedule_mangle_both:\r
+        movdqa  xmm1,[256+ecx*1+ebp]\r
+db      102,15,56,0,217\r
+        add     ecx,-16\r
+        and     ecx,48\r
+        movdqu  [edx],xmm3\r
+        ret\r
+global  _vpaes_set_encrypt_key\r
+align   16\r
+_vpaes_set_encrypt_key:\r
+L$_vpaes_set_encrypt_key_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     esi,DWORD [20+esp]\r
+        lea     ebx,[esp-56]\r
+        mov     eax,DWORD [24+esp]\r
+        and     ebx,-16\r
+        mov     edx,DWORD [28+esp]\r
+        xchg    ebx,esp\r
+        mov     DWORD [48+esp],ebx\r
+        mov     ebx,eax\r
+        shr     ebx,5\r
+        add     ebx,5\r
+        mov     DWORD [240+edx],ebx\r
+        mov     ecx,48\r
+        mov     edi,0\r
+        lea     ebp,[(L$_vpaes_consts+0x30-L$016pic_point)]\r
+        call    __vpaes_schedule_core\r
+L$016pic_point:\r
+        mov     esp,DWORD [48+esp]\r
+        xor     eax,eax\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _vpaes_set_decrypt_key\r
+align   16\r
+_vpaes_set_decrypt_key:\r
+L$_vpaes_set_decrypt_key_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     esi,DWORD [20+esp]\r
+        lea     ebx,[esp-56]\r
+        mov     eax,DWORD [24+esp]\r
+        and     ebx,-16\r
+        mov     edx,DWORD [28+esp]\r
+        xchg    ebx,esp\r
+        mov     DWORD [48+esp],ebx\r
+        mov     ebx,eax\r
+        shr     ebx,5\r
+        add     ebx,5\r
+        mov     DWORD [240+edx],ebx\r
+        shl     ebx,4\r
+        lea     edx,[16+ebx*1+edx]\r
+        mov     edi,1\r
+        mov     ecx,eax\r
+        shr     ecx,1\r
+        and     ecx,32\r
+        xor     ecx,32\r
+        lea     ebp,[(L$_vpaes_consts+0x30-L$017pic_point)]\r
+        call    __vpaes_schedule_core\r
+L$017pic_point:\r
+        mov     esp,DWORD [48+esp]\r
+        xor     eax,eax\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _vpaes_encrypt\r
+align   16\r
+_vpaes_encrypt:\r
+L$_vpaes_encrypt_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        lea     ebp,[(L$_vpaes_consts+0x30-L$018pic_point)]\r
+        call    __vpaes_preheat\r
+L$018pic_point:\r
+        mov     esi,DWORD [20+esp]\r
+        lea     ebx,[esp-56]\r
+        mov     edi,DWORD [24+esp]\r
+        and     ebx,-16\r
+        mov     edx,DWORD [28+esp]\r
+        xchg    ebx,esp\r
+        mov     DWORD [48+esp],ebx\r
+        movdqu  xmm0,[esi]\r
+        call    __vpaes_encrypt_core\r
+        movdqu  [edi],xmm0\r
+        mov     esp,DWORD [48+esp]\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _vpaes_decrypt\r
+align   16\r
+_vpaes_decrypt:\r
+L$_vpaes_decrypt_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        lea     ebp,[(L$_vpaes_consts+0x30-L$019pic_point)]\r
+        call    __vpaes_preheat\r
+L$019pic_point:\r
+        mov     esi,DWORD [20+esp]\r
+        lea     ebx,[esp-56]\r
+        mov     edi,DWORD [24+esp]\r
+        and     ebx,-16\r
+        mov     edx,DWORD [28+esp]\r
+        xchg    ebx,esp\r
+        mov     DWORD [48+esp],ebx\r
+        movdqu  xmm0,[esi]\r
+        call    __vpaes_decrypt_core\r
+        movdqu  [edi],xmm0\r
+        mov     esp,DWORD [48+esp]\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _vpaes_cbc_encrypt\r
+align   16\r
+_vpaes_cbc_encrypt:\r
+L$_vpaes_cbc_encrypt_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     esi,DWORD [20+esp]\r
+        mov     edi,DWORD [24+esp]\r
+        mov     eax,DWORD [28+esp]\r
+        mov     edx,DWORD [32+esp]\r
+        sub     eax,16\r
+        jc      NEAR L$020cbc_abort\r
+        lea     ebx,[esp-56]\r
+        mov     ebp,DWORD [36+esp]\r
+        and     ebx,-16\r
+        mov     ecx,DWORD [40+esp]\r
+        xchg    ebx,esp\r
+        movdqu  xmm1,[ebp]\r
+        sub     edi,esi\r
+        mov     DWORD [48+esp],ebx\r
+        mov     DWORD [esp],edi\r
+        mov     DWORD [4+esp],edx\r
+        mov     DWORD [8+esp],ebp\r
+        mov     edi,eax\r
+        lea     ebp,[(L$_vpaes_consts+0x30-L$021pic_point)]\r
+        call    __vpaes_preheat\r
+L$021pic_point:\r
+        cmp     ecx,0\r
+        je      NEAR L$022cbc_dec_loop\r
+        jmp     NEAR L$023cbc_enc_loop\r
+align   16\r
+L$023cbc_enc_loop:\r
+        movdqu  xmm0,[esi]\r
+        pxor    xmm0,xmm1\r
+        call    __vpaes_encrypt_core\r
+        mov     ebx,DWORD [esp]\r
+        mov     edx,DWORD [4+esp]\r
+        movdqa  xmm1,xmm0\r
+        movdqu  [esi*1+ebx],xmm0\r
+        lea     esi,[16+esi]\r
+        sub     edi,16\r
+        jnc     NEAR L$023cbc_enc_loop\r
+        jmp     NEAR L$024cbc_done\r
+align   16\r
+L$022cbc_dec_loop:\r
+        movdqu  xmm0,[esi]\r
+        movdqa  [16+esp],xmm1\r
+        movdqa  [32+esp],xmm0\r
+        call    __vpaes_decrypt_core\r
+        mov     ebx,DWORD [esp]\r
+        mov     edx,DWORD [4+esp]\r
+        pxor    xmm0,[16+esp]\r
+        movdqa  xmm1,[32+esp]\r
+        movdqu  [esi*1+ebx],xmm0\r
+        lea     esi,[16+esi]\r
+        sub     edi,16\r
+        jnc     NEAR L$022cbc_dec_loop\r
+L$024cbc_done:\r
+        mov     ebx,DWORD [8+esp]\r
+        mov     esp,DWORD [48+esp]\r
+        movdqu  [ebx],xmm1\r
+L$020cbc_abort:\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
diff --git a/CryptoPkg/Library/OpensslLib/IA32/crypto/modes/ghash-x86.nasm b/CryptoPkg/Library/OpensslLib/IA32/crypto/modes/ghash-x86.nasm
new file mode 100644 (file)
index 0000000..88c52f7
--- /dev/null
@@ -0,0 +1,700 @@
+; WARNING: do not edit!\r
+; Generated from openssl/crypto/modes/asm/ghash-x86.pl\r
+;\r
+; Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved.\r
+;\r
+; Licensed under the OpenSSL license (the "License").  You may not use\r
+; this file except in compliance with the License.  You can obtain a copy\r
+; in the file LICENSE in the source distribution or at\r
+; https://www.openssl.org/source/license.html\r
+\r
+%ifidn __OUTPUT_FORMAT__,obj\r
+section code    use32 class=code align=64\r
+%elifidn __OUTPUT_FORMAT__,win32\r
+$@feat.00 equ 1\r
+section .text   code align=64\r
+%else\r
+section .text   code\r
+%endif\r
+global  _gcm_gmult_4bit_x86\r
+align   16\r
+_gcm_gmult_4bit_x86:\r
+L$_gcm_gmult_4bit_x86_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        sub     esp,84\r
+        mov     edi,DWORD [104+esp]\r
+        mov     esi,DWORD [108+esp]\r
+        mov     ebp,DWORD [edi]\r
+        mov     edx,DWORD [4+edi]\r
+        mov     ecx,DWORD [8+edi]\r
+        mov     ebx,DWORD [12+edi]\r
+        mov     DWORD [16+esp],0\r
+        mov     DWORD [20+esp],471859200\r
+        mov     DWORD [24+esp],943718400\r
+        mov     DWORD [28+esp],610271232\r
+        mov     DWORD [32+esp],1887436800\r
+        mov     DWORD [36+esp],1822425088\r
+        mov     DWORD [40+esp],1220542464\r
+        mov     DWORD [44+esp],1423966208\r
+        mov     DWORD [48+esp],3774873600\r
+        mov     DWORD [52+esp],4246732800\r
+        mov     DWORD [56+esp],3644850176\r
+        mov     DWORD [60+esp],3311403008\r
+        mov     DWORD [64+esp],2441084928\r
+        mov     DWORD [68+esp],2376073216\r
+        mov     DWORD [72+esp],2847932416\r
+        mov     DWORD [76+esp],3051356160\r
+        mov     DWORD [esp],ebp\r
+        mov     DWORD [4+esp],edx\r
+        mov     DWORD [8+esp],ecx\r
+        mov     DWORD [12+esp],ebx\r
+        shr     ebx,20\r
+        and     ebx,240\r
+        mov     ebp,DWORD [4+ebx*1+esi]\r
+        mov     edx,DWORD [ebx*1+esi]\r
+        mov     ecx,DWORD [12+ebx*1+esi]\r
+        mov     ebx,DWORD [8+ebx*1+esi]\r
+        xor     eax,eax\r
+        mov     edi,15\r
+        jmp     NEAR L$000x86_loop\r
+align   16\r
+L$000x86_loop:\r
+        mov     al,bl\r
+        shrd    ebx,ecx,4\r
+        and     al,15\r
+        shrd    ecx,edx,4\r
+        shrd    edx,ebp,4\r
+        shr     ebp,4\r
+        xor     ebp,DWORD [16+eax*4+esp]\r
+        mov     al,BYTE [edi*1+esp]\r
+        and     al,240\r
+        xor     ebx,DWORD [8+eax*1+esi]\r
+        xor     ecx,DWORD [12+eax*1+esi]\r
+        xor     edx,DWORD [eax*1+esi]\r
+        xor     ebp,DWORD [4+eax*1+esi]\r
+        dec     edi\r
+        js      NEAR L$001x86_break\r
+        mov     al,bl\r
+        shrd    ebx,ecx,4\r
+        and     al,15\r
+        shrd    ecx,edx,4\r
+        shrd    edx,ebp,4\r
+        shr     ebp,4\r
+        xor     ebp,DWORD [16+eax*4+esp]\r
+        mov     al,BYTE [edi*1+esp]\r
+        shl     al,4\r
+        xor     ebx,DWORD [8+eax*1+esi]\r
+        xor     ecx,DWORD [12+eax*1+esi]\r
+        xor     edx,DWORD [eax*1+esi]\r
+        xor     ebp,DWORD [4+eax*1+esi]\r
+        jmp     NEAR L$000x86_loop\r
+align   16\r
+L$001x86_break:\r
+        bswap   ebx\r
+        bswap   ecx\r
+        bswap   edx\r
+        bswap   ebp\r
+        mov     edi,DWORD [104+esp]\r
+        mov     DWORD [12+edi],ebx\r
+        mov     DWORD [8+edi],ecx\r
+        mov     DWORD [4+edi],edx\r
+        mov     DWORD [edi],ebp\r
+        add     esp,84\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _gcm_ghash_4bit_x86\r
+align   16\r
+_gcm_ghash_4bit_x86:\r
+L$_gcm_ghash_4bit_x86_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        sub     esp,84\r
+        mov     ebx,DWORD [104+esp]\r
+        mov     esi,DWORD [108+esp]\r
+        mov     edi,DWORD [112+esp]\r
+        mov     ecx,DWORD [116+esp]\r
+        add     ecx,edi\r
+        mov     DWORD [116+esp],ecx\r
+        mov     ebp,DWORD [ebx]\r
+        mov     edx,DWORD [4+ebx]\r
+        mov     ecx,DWORD [8+ebx]\r
+        mov     ebx,DWORD [12+ebx]\r
+        mov     DWORD [16+esp],0\r
+        mov     DWORD [20+esp],471859200\r
+        mov     DWORD [24+esp],943718400\r
+        mov     DWORD [28+esp],610271232\r
+        mov     DWORD [32+esp],1887436800\r
+        mov     DWORD [36+esp],1822425088\r
+        mov     DWORD [40+esp],1220542464\r
+        mov     DWORD [44+esp],1423966208\r
+        mov     DWORD [48+esp],3774873600\r
+        mov     DWORD [52+esp],4246732800\r
+        mov     DWORD [56+esp],3644850176\r
+        mov     DWORD [60+esp],3311403008\r
+        mov     DWORD [64+esp],2441084928\r
+        mov     DWORD [68+esp],2376073216\r
+        mov     DWORD [72+esp],2847932416\r
+        mov     DWORD [76+esp],3051356160\r
+align   16\r
+L$002x86_outer_loop:\r
+        xor     ebx,DWORD [12+edi]\r
+        xor     ecx,DWORD [8+edi]\r
+        xor     edx,DWORD [4+edi]\r
+        xor     ebp,DWORD [edi]\r
+        mov     DWORD [12+esp],ebx\r
+        mov     DWORD [8+esp],ecx\r
+        mov     DWORD [4+esp],edx\r
+        mov     DWORD [esp],ebp\r
+        shr     ebx,20\r
+        and     ebx,240\r
+        mov     ebp,DWORD [4+ebx*1+esi]\r
+        mov     edx,DWORD [ebx*1+esi]\r
+        mov     ecx,DWORD [12+ebx*1+esi]\r
+        mov     ebx,DWORD [8+ebx*1+esi]\r
+        xor     eax,eax\r
+        mov     edi,15\r
+        jmp     NEAR L$003x86_loop\r
+align   16\r
+L$003x86_loop:\r
+        mov     al,bl\r
+        shrd    ebx,ecx,4\r
+        and     al,15\r
+        shrd    ecx,edx,4\r
+        shrd    edx,ebp,4\r
+        shr     ebp,4\r
+        xor     ebp,DWORD [16+eax*4+esp]\r
+        mov     al,BYTE [edi*1+esp]\r
+        and     al,240\r
+        xor     ebx,DWORD [8+eax*1+esi]\r
+        xor     ecx,DWORD [12+eax*1+esi]\r
+        xor     edx,DWORD [eax*1+esi]\r
+        xor     ebp,DWORD [4+eax*1+esi]\r
+        dec     edi\r
+        js      NEAR L$004x86_break\r
+        mov     al,bl\r
+        shrd    ebx,ecx,4\r
+        and     al,15\r
+        shrd    ecx,edx,4\r
+        shrd    edx,ebp,4\r
+        shr     ebp,4\r
+        xor     ebp,DWORD [16+eax*4+esp]\r
+        mov     al,BYTE [edi*1+esp]\r
+        shl     al,4\r
+        xor     ebx,DWORD [8+eax*1+esi]\r
+        xor     ecx,DWORD [12+eax*1+esi]\r
+        xor     edx,DWORD [eax*1+esi]\r
+        xor     ebp,DWORD [4+eax*1+esi]\r
+        jmp     NEAR L$003x86_loop\r
+align   16\r
+L$004x86_break:\r
+        bswap   ebx\r
+        bswap   ecx\r
+        bswap   edx\r
+        bswap   ebp\r
+        mov     edi,DWORD [112+esp]\r
+        lea     edi,[16+edi]\r
+        cmp     edi,DWORD [116+esp]\r
+        mov     DWORD [112+esp],edi\r
+        jb      NEAR L$002x86_outer_loop\r
+        mov     edi,DWORD [104+esp]\r
+        mov     DWORD [12+edi],ebx\r
+        mov     DWORD [8+edi],ecx\r
+        mov     DWORD [4+edi],edx\r
+        mov     DWORD [edi],ebp\r
+        add     esp,84\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+align   16\r
+__mmx_gmult_4bit_inner:\r
+        xor     ecx,ecx\r
+        mov     edx,ebx\r
+        mov     cl,dl\r
+        shl     cl,4\r
+        and     edx,240\r
+        movq    mm0,[8+ecx*1+esi]\r
+        movq    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [14+edi]\r
+        psllq   mm2,60\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [13+edi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [12+edi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [11+edi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [10+edi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [9+edi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [8+edi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [7+edi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [6+edi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [5+edi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [4+edi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [3+edi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [2+edi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [1+edi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        mov     cl,BYTE [edi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        mov     edx,ecx\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        shl     cl,4\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+ecx*1+esi]\r
+        psllq   mm2,60\r
+        and     edx,240\r
+        pxor    mm1,[ebp*8+eax]\r
+        and     ebx,15\r
+        pxor    mm1,[ecx*1+esi]\r
+        movd    ebp,mm0\r
+        pxor    mm0,mm2\r
+        psrlq   mm0,4\r
+        movq    mm2,mm1\r
+        psrlq   mm1,4\r
+        pxor    mm0,[8+edx*1+esi]\r
+        psllq   mm2,60\r
+        pxor    mm1,[ebx*8+eax]\r
+        and     ebp,15\r
+        pxor    mm1,[edx*1+esi]\r
+        movd    ebx,mm0\r
+        pxor    mm0,mm2\r
+        mov     edi,DWORD [4+ebp*8+eax]\r
+        psrlq   mm0,32\r
+        movd    edx,mm1\r
+        psrlq   mm1,32\r
+        movd    ecx,mm0\r
+        movd    ebp,mm1\r
+        shl     edi,4\r
+        bswap   ebx\r
+        bswap   edx\r
+        bswap   ecx\r
+        xor     ebp,edi\r
+        bswap   ebp\r
+        ret\r
+global  _gcm_gmult_4bit_mmx\r
+align   16\r
+_gcm_gmult_4bit_mmx:\r
+L$_gcm_gmult_4bit_mmx_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     edi,DWORD [20+esp]\r
+        mov     esi,DWORD [24+esp]\r
+        call    L$005pic_point\r
+L$005pic_point:\r
+        pop     eax\r
+        lea     eax,[(L$rem_4bit-L$005pic_point)+eax]\r
+        movzx   ebx,BYTE [15+edi]\r
+        call    __mmx_gmult_4bit_inner\r
+        mov     edi,DWORD [20+esp]\r
+        emms\r
+        mov     DWORD [12+edi],ebx\r
+        mov     DWORD [4+edi],edx\r
+        mov     DWORD [8+edi],ecx\r
+        mov     DWORD [edi],ebp\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _gcm_ghash_4bit_mmx\r
+align   16\r
+_gcm_ghash_4bit_mmx:\r
+L$_gcm_ghash_4bit_mmx_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     ebp,DWORD [20+esp]\r
+        mov     esi,DWORD [24+esp]\r
+        mov     edi,DWORD [28+esp]\r
+        mov     ecx,DWORD [32+esp]\r
+        call    L$006pic_point\r
+L$006pic_point:\r
+        pop     eax\r
+        lea     eax,[(L$rem_4bit-L$006pic_point)+eax]\r
+        add     ecx,edi\r
+        mov     DWORD [32+esp],ecx\r
+        sub     esp,20\r
+        mov     ebx,DWORD [12+ebp]\r
+        mov     edx,DWORD [4+ebp]\r
+        mov     ecx,DWORD [8+ebp]\r
+        mov     ebp,DWORD [ebp]\r
+        jmp     NEAR L$007mmx_outer_loop\r
+align   16\r
+L$007mmx_outer_loop:\r
+        xor     ebx,DWORD [12+edi]\r
+        xor     edx,DWORD [4+edi]\r
+        xor     ecx,DWORD [8+edi]\r
+        xor     ebp,DWORD [edi]\r
+        mov     DWORD [48+esp],edi\r
+        mov     DWORD [12+esp],ebx\r
+        mov     DWORD [4+esp],edx\r
+        mov     DWORD [8+esp],ecx\r
+        mov     DWORD [esp],ebp\r
+        mov     edi,esp\r
+        shr     ebx,24\r
+        call    __mmx_gmult_4bit_inner\r
+        mov     edi,DWORD [48+esp]\r
+        lea     edi,[16+edi]\r
+        cmp     edi,DWORD [52+esp]\r
+        jb      NEAR L$007mmx_outer_loop\r
+        mov     edi,DWORD [40+esp]\r
+        emms\r
+        mov     DWORD [12+edi],ebx\r
+        mov     DWORD [4+edi],edx\r
+        mov     DWORD [8+edi],ecx\r
+        mov     DWORD [edi],ebp\r
+        add     esp,20\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+align   64\r
+L$rem_4bit:\r
+dd      0,0,0,29491200,0,58982400,0,38141952\r
+dd      0,117964800,0,113901568,0,76283904,0,88997888\r
+dd      0,235929600,0,265420800,0,227803136,0,206962688\r
+dd      0,152567808,0,148504576,0,177995776,0,190709760\r
+db      71,72,65,83,72,32,102,111,114,32,120,56,54,44,32,67\r
+db      82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112\r
+db      112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62\r
+db      0\r
diff --git a/CryptoPkg/Library/OpensslLib/IA32/crypto/sha/sha1-586.nasm b/CryptoPkg/Library/OpensslLib/IA32/crypto/sha/sha1-586.nasm
new file mode 100644 (file)
index 0000000..bf2831e
--- /dev/null
@@ -0,0 +1,1394 @@
+; WARNING: do not edit!\r
+; Generated from openssl/crypto/sha/asm/sha1-586.pl\r
+;\r
+; Copyright 1998-2020 The OpenSSL Project Authors. All Rights Reserved.\r
+;\r
+; Licensed under the OpenSSL license (the "License").  You may not use\r
+; this file except in compliance with the License.  You can obtain a copy\r
+; in the file LICENSE in the source distribution or at\r
+; https://www.openssl.org/source/license.html\r
+\r
+%ifidn __OUTPUT_FORMAT__,obj\r
+section code    use32 class=code align=64\r
+%elifidn __OUTPUT_FORMAT__,win32\r
+$@feat.00 equ 1\r
+section .text   code align=64\r
+%else\r
+section .text   code\r
+%endif\r
+global  _sha1_block_data_order\r
+align   16\r
+_sha1_block_data_order:\r
+L$_sha1_block_data_order_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     ebp,DWORD [20+esp]\r
+        mov     esi,DWORD [24+esp]\r
+        mov     eax,DWORD [28+esp]\r
+        sub     esp,76\r
+        shl     eax,6\r
+        add     eax,esi\r
+        mov     DWORD [104+esp],eax\r
+        mov     edi,DWORD [16+ebp]\r
+        jmp     NEAR L$000loop\r
+align   16\r
+L$000loop:\r
+        mov     eax,DWORD [esi]\r
+        mov     ebx,DWORD [4+esi]\r
+        mov     ecx,DWORD [8+esi]\r
+        mov     edx,DWORD [12+esi]\r
+        bswap   eax\r
+        bswap   ebx\r
+        bswap   ecx\r
+        bswap   edx\r
+        mov     DWORD [esp],eax\r
+        mov     DWORD [4+esp],ebx\r
+        mov     DWORD [8+esp],ecx\r
+        mov     DWORD [12+esp],edx\r
+        mov     eax,DWORD [16+esi]\r
+        mov     ebx,DWORD [20+esi]\r
+        mov     ecx,DWORD [24+esi]\r
+        mov     edx,DWORD [28+esi]\r
+        bswap   eax\r
+        bswap   ebx\r
+        bswap   ecx\r
+        bswap   edx\r
+        mov     DWORD [16+esp],eax\r
+        mov     DWORD [20+esp],ebx\r
+        mov     DWORD [24+esp],ecx\r
+        mov     DWORD [28+esp],edx\r
+        mov     eax,DWORD [32+esi]\r
+        mov     ebx,DWORD [36+esi]\r
+        mov     ecx,DWORD [40+esi]\r
+        mov     edx,DWORD [44+esi]\r
+        bswap   eax\r
+        bswap   ebx\r
+        bswap   ecx\r
+        bswap   edx\r
+        mov     DWORD [32+esp],eax\r
+        mov     DWORD [36+esp],ebx\r
+        mov     DWORD [40+esp],ecx\r
+        mov     DWORD [44+esp],edx\r
+        mov     eax,DWORD [48+esi]\r
+        mov     ebx,DWORD [52+esi]\r
+        mov     ecx,DWORD [56+esi]\r
+        mov     edx,DWORD [60+esi]\r
+        bswap   eax\r
+        bswap   ebx\r
+        bswap   ecx\r
+        bswap   edx\r
+        mov     DWORD [48+esp],eax\r
+        mov     DWORD [52+esp],ebx\r
+        mov     DWORD [56+esp],ecx\r
+        mov     DWORD [60+esp],edx\r
+        mov     DWORD [100+esp],esi\r
+        mov     eax,DWORD [ebp]\r
+        mov     ebx,DWORD [4+ebp]\r
+        mov     ecx,DWORD [8+ebp]\r
+        mov     edx,DWORD [12+ebp]\r
+        ; 00_15 0\r
+        mov     esi,ecx\r
+        mov     ebp,eax\r
+        rol     ebp,5\r
+        xor     esi,edx\r
+        add     ebp,edi\r
+        mov     edi,DWORD [esp]\r
+        and     esi,ebx\r
+        ror     ebx,2\r
+        xor     esi,edx\r
+        lea     ebp,[1518500249+edi*1+ebp]\r
+        add     ebp,esi\r
+        ; 00_15 1\r
+        mov     edi,ebx\r
+        mov     esi,ebp\r
+        rol     ebp,5\r
+        xor     edi,ecx\r
+        add     ebp,edx\r
+        mov     edx,DWORD [4+esp]\r
+        and     edi,eax\r
+        ror     eax,2\r
+        xor     edi,ecx\r
+        lea     ebp,[1518500249+edx*1+ebp]\r
+        add     ebp,edi\r
+        ; 00_15 2\r
+        mov     edx,eax\r
+        mov     edi,ebp\r
+        rol     ebp,5\r
+        xor     edx,ebx\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [8+esp]\r
+        and     edx,esi\r
+        ror     esi,2\r
+        xor     edx,ebx\r
+        lea     ebp,[1518500249+ecx*1+ebp]\r
+        add     ebp,edx\r
+        ; 00_15 3\r
+        mov     ecx,esi\r
+        mov     edx,ebp\r
+        rol     ebp,5\r
+        xor     ecx,eax\r
+        add     ebp,ebx\r
+        mov     ebx,DWORD [12+esp]\r
+        and     ecx,edi\r
+        ror     edi,2\r
+        xor     ecx,eax\r
+        lea     ebp,[1518500249+ebx*1+ebp]\r
+        add     ebp,ecx\r
+        ; 00_15 4\r
+        mov     ebx,edi\r
+        mov     ecx,ebp\r
+        rol     ebp,5\r
+        xor     ebx,esi\r
+        add     ebp,eax\r
+        mov     eax,DWORD [16+esp]\r
+        and     ebx,edx\r
+        ror     edx,2\r
+        xor     ebx,esi\r
+        lea     ebp,[1518500249+eax*1+ebp]\r
+        add     ebp,ebx\r
+        ; 00_15 5\r
+        mov     eax,edx\r
+        mov     ebx,ebp\r
+        rol     ebp,5\r
+        xor     eax,edi\r
+        add     ebp,esi\r
+        mov     esi,DWORD [20+esp]\r
+        and     eax,ecx\r
+        ror     ecx,2\r
+        xor     eax,edi\r
+        lea     ebp,[1518500249+esi*1+ebp]\r
+        add     ebp,eax\r
+        ; 00_15 6\r
+        mov     esi,ecx\r
+        mov     eax,ebp\r
+        rol     ebp,5\r
+        xor     esi,edx\r
+        add     ebp,edi\r
+        mov     edi,DWORD [24+esp]\r
+        and     esi,ebx\r
+        ror     ebx,2\r
+        xor     esi,edx\r
+        lea     ebp,[1518500249+edi*1+ebp]\r
+        add     ebp,esi\r
+        ; 00_15 7\r
+        mov     edi,ebx\r
+        mov     esi,ebp\r
+        rol     ebp,5\r
+        xor     edi,ecx\r
+        add     ebp,edx\r
+        mov     edx,DWORD [28+esp]\r
+        and     edi,eax\r
+        ror     eax,2\r
+        xor     edi,ecx\r
+        lea     ebp,[1518500249+edx*1+ebp]\r
+        add     ebp,edi\r
+        ; 00_15 8\r
+        mov     edx,eax\r
+        mov     edi,ebp\r
+        rol     ebp,5\r
+        xor     edx,ebx\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [32+esp]\r
+        and     edx,esi\r
+        ror     esi,2\r
+        xor     edx,ebx\r
+        lea     ebp,[1518500249+ecx*1+ebp]\r
+        add     ebp,edx\r
+        ; 00_15 9\r
+        mov     ecx,esi\r
+        mov     edx,ebp\r
+        rol     ebp,5\r
+        xor     ecx,eax\r
+        add     ebp,ebx\r
+        mov     ebx,DWORD [36+esp]\r
+        and     ecx,edi\r
+        ror     edi,2\r
+        xor     ecx,eax\r
+        lea     ebp,[1518500249+ebx*1+ebp]\r
+        add     ebp,ecx\r
+        ; 00_15 10\r
+        mov     ebx,edi\r
+        mov     ecx,ebp\r
+        rol     ebp,5\r
+        xor     ebx,esi\r
+        add     ebp,eax\r
+        mov     eax,DWORD [40+esp]\r
+        and     ebx,edx\r
+        ror     edx,2\r
+        xor     ebx,esi\r
+        lea     ebp,[1518500249+eax*1+ebp]\r
+        add     ebp,ebx\r
+        ; 00_15 11\r
+        mov     eax,edx\r
+        mov     ebx,ebp\r
+        rol     ebp,5\r
+        xor     eax,edi\r
+        add     ebp,esi\r
+        mov     esi,DWORD [44+esp]\r
+        and     eax,ecx\r
+        ror     ecx,2\r
+        xor     eax,edi\r
+        lea     ebp,[1518500249+esi*1+ebp]\r
+        add     ebp,eax\r
+        ; 00_15 12\r
+        mov     esi,ecx\r
+        mov     eax,ebp\r
+        rol     ebp,5\r
+        xor     esi,edx\r
+        add     ebp,edi\r
+        mov     edi,DWORD [48+esp]\r
+        and     esi,ebx\r
+        ror     ebx,2\r
+        xor     esi,edx\r
+        lea     ebp,[1518500249+edi*1+ebp]\r
+        add     ebp,esi\r
+        ; 00_15 13\r
+        mov     edi,ebx\r
+        mov     esi,ebp\r
+        rol     ebp,5\r
+        xor     edi,ecx\r
+        add     ebp,edx\r
+        mov     edx,DWORD [52+esp]\r
+        and     edi,eax\r
+        ror     eax,2\r
+        xor     edi,ecx\r
+        lea     ebp,[1518500249+edx*1+ebp]\r
+        add     ebp,edi\r
+        ; 00_15 14\r
+        mov     edx,eax\r
+        mov     edi,ebp\r
+        rol     ebp,5\r
+        xor     edx,ebx\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [56+esp]\r
+        and     edx,esi\r
+        ror     esi,2\r
+        xor     edx,ebx\r
+        lea     ebp,[1518500249+ecx*1+ebp]\r
+        add     ebp,edx\r
+        ; 00_15 15\r
+        mov     ecx,esi\r
+        mov     edx,ebp\r
+        rol     ebp,5\r
+        xor     ecx,eax\r
+        add     ebp,ebx\r
+        mov     ebx,DWORD [60+esp]\r
+        and     ecx,edi\r
+        ror     edi,2\r
+        xor     ecx,eax\r
+        lea     ebp,[1518500249+ebx*1+ebp]\r
+        mov     ebx,DWORD [esp]\r
+        add     ecx,ebp\r
+        ; 16_19 16\r
+        mov     ebp,edi\r
+        xor     ebx,DWORD [8+esp]\r
+        xor     ebp,esi\r
+        xor     ebx,DWORD [32+esp]\r
+        and     ebp,edx\r
+        xor     ebx,DWORD [52+esp]\r
+        rol     ebx,1\r
+        xor     ebp,esi\r
+        add     eax,ebp\r
+        mov     ebp,ecx\r
+        ror     edx,2\r
+        mov     DWORD [esp],ebx\r
+        rol     ebp,5\r
+        lea     ebx,[1518500249+eax*1+ebx]\r
+        mov     eax,DWORD [4+esp]\r
+        add     ebx,ebp\r
+        ; 16_19 17\r
+        mov     ebp,edx\r
+        xor     eax,DWORD [12+esp]\r
+        xor     ebp,edi\r
+        xor     eax,DWORD [36+esp]\r
+        and     ebp,ecx\r
+        xor     eax,DWORD [56+esp]\r
+        rol     eax,1\r
+        xor     ebp,edi\r
+        add     esi,ebp\r
+        mov     ebp,ebx\r
+        ror     ecx,2\r
+        mov     DWORD [4+esp],eax\r
+        rol     ebp,5\r
+        lea     eax,[1518500249+esi*1+eax]\r
+        mov     esi,DWORD [8+esp]\r
+        add     eax,ebp\r
+        ; 16_19 18\r
+        mov     ebp,ecx\r
+        xor     esi,DWORD [16+esp]\r
+        xor     ebp,edx\r
+        xor     esi,DWORD [40+esp]\r
+        and     ebp,ebx\r
+        xor     esi,DWORD [60+esp]\r
+        rol     esi,1\r
+        xor     ebp,edx\r
+        add     edi,ebp\r
+        mov     ebp,eax\r
+        ror     ebx,2\r
+        mov     DWORD [8+esp],esi\r
+        rol     ebp,5\r
+        lea     esi,[1518500249+edi*1+esi]\r
+        mov     edi,DWORD [12+esp]\r
+        add     esi,ebp\r
+        ; 16_19 19\r
+        mov     ebp,ebx\r
+        xor     edi,DWORD [20+esp]\r
+        xor     ebp,ecx\r
+        xor     edi,DWORD [44+esp]\r
+        and     ebp,eax\r
+        xor     edi,DWORD [esp]\r
+        rol     edi,1\r
+        xor     ebp,ecx\r
+        add     edx,ebp\r
+        mov     ebp,esi\r
+        ror     eax,2\r
+        mov     DWORD [12+esp],edi\r
+        rol     ebp,5\r
+        lea     edi,[1518500249+edx*1+edi]\r
+        mov     edx,DWORD [16+esp]\r
+        add     edi,ebp\r
+        ; 20_39 20\r
+        mov     ebp,esi\r
+        xor     edx,DWORD [24+esp]\r
+        xor     ebp,eax\r
+        xor     edx,DWORD [48+esp]\r
+        xor     ebp,ebx\r
+        xor     edx,DWORD [4+esp]\r
+        rol     edx,1\r
+        add     ecx,ebp\r
+        ror     esi,2\r
+        mov     ebp,edi\r
+        rol     ebp,5\r
+        mov     DWORD [16+esp],edx\r
+        lea     edx,[1859775393+ecx*1+edx]\r
+        mov     ecx,DWORD [20+esp]\r
+        add     edx,ebp\r
+        ; 20_39 21\r
+        mov     ebp,edi\r
+        xor     ecx,DWORD [28+esp]\r
+        xor     ebp,esi\r
+        xor     ecx,DWORD [52+esp]\r
+        xor     ebp,eax\r
+        xor     ecx,DWORD [8+esp]\r
+        rol     ecx,1\r
+        add     ebx,ebp\r
+        ror     edi,2\r
+        mov     ebp,edx\r
+        rol     ebp,5\r
+        mov     DWORD [20+esp],ecx\r
+        lea     ecx,[1859775393+ebx*1+ecx]\r
+        mov     ebx,DWORD [24+esp]\r
+        add     ecx,ebp\r
+        ; 20_39 22\r
+        mov     ebp,edx\r
+        xor     ebx,DWORD [32+esp]\r
+        xor     ebp,edi\r
+        xor     ebx,DWORD [56+esp]\r
+        xor     ebp,esi\r
+        xor     ebx,DWORD [12+esp]\r
+        rol     ebx,1\r
+        add     eax,ebp\r
+        ror     edx,2\r
+        mov     ebp,ecx\r
+        rol     ebp,5\r
+        mov     DWORD [24+esp],ebx\r
+        lea     ebx,[1859775393+eax*1+ebx]\r
+        mov     eax,DWORD [28+esp]\r
+        add     ebx,ebp\r
+        ; 20_39 23\r
+        mov     ebp,ecx\r
+        xor     eax,DWORD [36+esp]\r
+        xor     ebp,edx\r
+        xor     eax,DWORD [60+esp]\r
+        xor     ebp,edi\r
+        xor     eax,DWORD [16+esp]\r
+        rol     eax,1\r
+        add     esi,ebp\r
+        ror     ecx,2\r
+        mov     ebp,ebx\r
+        rol     ebp,5\r
+        mov     DWORD [28+esp],eax\r
+        lea     eax,[1859775393+esi*1+eax]\r
+        mov     esi,DWORD [32+esp]\r
+        add     eax,ebp\r
+        ; 20_39 24\r
+        mov     ebp,ebx\r
+        xor     esi,DWORD [40+esp]\r
+        xor     ebp,ecx\r
+        xor     esi,DWORD [esp]\r
+        xor     ebp,edx\r
+        xor     esi,DWORD [20+esp]\r
+        rol     esi,1\r
+        add     edi,ebp\r
+        ror     ebx,2\r
+        mov     ebp,eax\r
+        rol     ebp,5\r
+        mov     DWORD [32+esp],esi\r
+        lea     esi,[1859775393+edi*1+esi]\r
+        mov     edi,DWORD [36+esp]\r
+        add     esi,ebp\r
+        ; 20_39 25\r
+        mov     ebp,eax\r
+        xor     edi,DWORD [44+esp]\r
+        xor     ebp,ebx\r
+        xor     edi,DWORD [4+esp]\r
+        xor     ebp,ecx\r
+        xor     edi,DWORD [24+esp]\r
+        rol     edi,1\r
+        add     edx,ebp\r
+        ror     eax,2\r
+        mov     ebp,esi\r
+        rol     ebp,5\r
+        mov     DWORD [36+esp],edi\r
+        lea     edi,[1859775393+edx*1+edi]\r
+        mov     edx,DWORD [40+esp]\r
+        add     edi,ebp\r
+        ; 20_39 26\r
+        mov     ebp,esi\r
+        xor     edx,DWORD [48+esp]\r
+        xor     ebp,eax\r
+        xor     edx,DWORD [8+esp]\r
+        xor     ebp,ebx\r
+        xor     edx,DWORD [28+esp]\r
+        rol     edx,1\r
+        add     ecx,ebp\r
+        ror     esi,2\r
+        mov     ebp,edi\r
+        rol     ebp,5\r
+        mov     DWORD [40+esp],edx\r
+        lea     edx,[1859775393+ecx*1+edx]\r
+        mov     ecx,DWORD [44+esp]\r
+        add     edx,ebp\r
+        ; 20_39 27\r
+        mov     ebp,edi\r
+        xor     ecx,DWORD [52+esp]\r
+        xor     ebp,esi\r
+        xor     ecx,DWORD [12+esp]\r
+        xor     ebp,eax\r
+        xor     ecx,DWORD [32+esp]\r
+        rol     ecx,1\r
+        add     ebx,ebp\r
+        ror     edi,2\r
+        mov     ebp,edx\r
+        rol     ebp,5\r
+        mov     DWORD [44+esp],ecx\r
+        lea     ecx,[1859775393+ebx*1+ecx]\r
+        mov     ebx,DWORD [48+esp]\r
+        add     ecx,ebp\r
+        ; 20_39 28\r
+        mov     ebp,edx\r
+        xor     ebx,DWORD [56+esp]\r
+        xor     ebp,edi\r
+        xor     ebx,DWORD [16+esp]\r
+        xor     ebp,esi\r
+        xor     ebx,DWORD [36+esp]\r
+        rol     ebx,1\r
+        add     eax,ebp\r
+        ror     edx,2\r
+        mov     ebp,ecx\r
+        rol     ebp,5\r
+        mov     DWORD [48+esp],ebx\r
+        lea     ebx,[1859775393+eax*1+ebx]\r
+        mov     eax,DWORD [52+esp]\r
+        add     ebx,ebp\r
+        ; 20_39 29\r
+        mov     ebp,ecx\r
+        xor     eax,DWORD [60+esp]\r
+        xor     ebp,edx\r
+        xor     eax,DWORD [20+esp]\r
+        xor     ebp,edi\r
+        xor     eax,DWORD [40+esp]\r
+        rol     eax,1\r
+        add     esi,ebp\r
+        ror     ecx,2\r
+        mov     ebp,ebx\r
+        rol     ebp,5\r
+        mov     DWORD [52+esp],eax\r
+        lea     eax,[1859775393+esi*1+eax]\r
+        mov     esi,DWORD [56+esp]\r
+        add     eax,ebp\r
+        ; 20_39 30\r
+        mov     ebp,ebx\r
+        xor     esi,DWORD [esp]\r
+        xor     ebp,ecx\r
+        xor     esi,DWORD [24+esp]\r
+        xor     ebp,edx\r
+        xor     esi,DWORD [44+esp]\r
+        rol     esi,1\r
+        add     edi,ebp\r
+        ror     ebx,2\r
+        mov     ebp,eax\r
+        rol     ebp,5\r
+        mov     DWORD [56+esp],esi\r
+        lea     esi,[1859775393+edi*1+esi]\r
+        mov     edi,DWORD [60+esp]\r
+        add     esi,ebp\r
+        ; 20_39 31\r
+        mov     ebp,eax\r
+        xor     edi,DWORD [4+esp]\r
+        xor     ebp,ebx\r
+        xor     edi,DWORD [28+esp]\r
+        xor     ebp,ecx\r
+        xor     edi,DWORD [48+esp]\r
+        rol     edi,1\r
+        add     edx,ebp\r
+        ror     eax,2\r
+        mov     ebp,esi\r
+        rol     ebp,5\r
+        mov     DWORD [60+esp],edi\r
+        lea     edi,[1859775393+edx*1+edi]\r
+        mov     edx,DWORD [esp]\r
+        add     edi,ebp\r
+        ; 20_39 32\r
+        mov     ebp,esi\r
+        xor     edx,DWORD [8+esp]\r
+        xor     ebp,eax\r
+        xor     edx,DWORD [32+esp]\r
+        xor     ebp,ebx\r
+        xor     edx,DWORD [52+esp]\r
+        rol     edx,1\r
+        add     ecx,ebp\r
+        ror     esi,2\r
+        mov     ebp,edi\r
+        rol     ebp,5\r
+        mov     DWORD [esp],edx\r
+        lea     edx,[1859775393+ecx*1+edx]\r
+        mov     ecx,DWORD [4+esp]\r
+        add     edx,ebp\r
+        ; 20_39 33\r
+        mov     ebp,edi\r
+        xor     ecx,DWORD [12+esp]\r
+        xor     ebp,esi\r
+        xor     ecx,DWORD [36+esp]\r
+        xor     ebp,eax\r
+        xor     ecx,DWORD [56+esp]\r
+        rol     ecx,1\r
+        add     ebx,ebp\r
+        ror     edi,2\r
+        mov     ebp,edx\r
+        rol     ebp,5\r
+        mov     DWORD [4+esp],ecx\r
+        lea     ecx,[1859775393+ebx*1+ecx]\r
+        mov     ebx,DWORD [8+esp]\r
+        add     ecx,ebp\r
+        ; 20_39 34\r
+        mov     ebp,edx\r
+        xor     ebx,DWORD [16+esp]\r
+        xor     ebp,edi\r
+        xor     ebx,DWORD [40+esp]\r
+        xor     ebp,esi\r
+        xor     ebx,DWORD [60+esp]\r
+        rol     ebx,1\r
+        add     eax,ebp\r
+        ror     edx,2\r
+        mov     ebp,ecx\r
+        rol     ebp,5\r
+        mov     DWORD [8+esp],ebx\r
+        lea     ebx,[1859775393+eax*1+ebx]\r
+        mov     eax,DWORD [12+esp]\r
+        add     ebx,ebp\r
+        ; 20_39 35\r
+        mov     ebp,ecx\r
+        xor     eax,DWORD [20+esp]\r
+        xor     ebp,edx\r
+        xor     eax,DWORD [44+esp]\r
+        xor     ebp,edi\r
+        xor     eax,DWORD [esp]\r
+        rol     eax,1\r
+        add     esi,ebp\r
+        ror     ecx,2\r
+        mov     ebp,ebx\r
+        rol     ebp,5\r
+        mov     DWORD [12+esp],eax\r
+        lea     eax,[1859775393+esi*1+eax]\r
+        mov     esi,DWORD [16+esp]\r
+        add     eax,ebp\r
+        ; 20_39 36\r
+        mov     ebp,ebx\r
+        xor     esi,DWORD [24+esp]\r
+        xor     ebp,ecx\r
+        xor     esi,DWORD [48+esp]\r
+        xor     ebp,edx\r
+        xor     esi,DWORD [4+esp]\r
+        rol     esi,1\r
+        add     edi,ebp\r
+        ror     ebx,2\r
+        mov     ebp,eax\r
+        rol     ebp,5\r
+        mov     DWORD [16+esp],esi\r
+        lea     esi,[1859775393+edi*1+esi]\r
+        mov     edi,DWORD [20+esp]\r
+        add     esi,ebp\r
+        ; 20_39 37\r
+        mov     ebp,eax\r
+        xor     edi,DWORD [28+esp]\r
+        xor     ebp,ebx\r
+        xor     edi,DWORD [52+esp]\r
+        xor     ebp,ecx\r
+        xor     edi,DWORD [8+esp]\r
+        rol     edi,1\r
+        add     edx,ebp\r
+        ror     eax,2\r
+        mov     ebp,esi\r
+        rol     ebp,5\r
+        mov     DWORD [20+esp],edi\r
+        lea     edi,[1859775393+edx*1+edi]\r
+        mov     edx,DWORD [24+esp]\r
+        add     edi,ebp\r
+        ; 20_39 38\r
+        mov     ebp,esi\r
+        xor     edx,DWORD [32+esp]\r
+        xor     ebp,eax\r
+        xor     edx,DWORD [56+esp]\r
+        xor     ebp,ebx\r
+        xor     edx,DWORD [12+esp]\r
+        rol     edx,1\r
+        add     ecx,ebp\r
+        ror     esi,2\r
+        mov     ebp,edi\r
+        rol     ebp,5\r
+        mov     DWORD [24+esp],edx\r
+        lea     edx,[1859775393+ecx*1+edx]\r
+        mov     ecx,DWORD [28+esp]\r
+        add     edx,ebp\r
+        ; 20_39 39\r
+        mov     ebp,edi\r
+        xor     ecx,DWORD [36+esp]\r
+        xor     ebp,esi\r
+        xor     ecx,DWORD [60+esp]\r
+        xor     ebp,eax\r
+        xor     ecx,DWORD [16+esp]\r
+        rol     ecx,1\r
+        add     ebx,ebp\r
+        ror     edi,2\r
+        mov     ebp,edx\r
+        rol     ebp,5\r
+        mov     DWORD [28+esp],ecx\r
+        lea     ecx,[1859775393+ebx*1+ecx]\r
+        mov     ebx,DWORD [32+esp]\r
+        add     ecx,ebp\r
+        ; 40_59 40\r
+        mov     ebp,edi\r
+        xor     ebx,DWORD [40+esp]\r
+        xor     ebp,esi\r
+        xor     ebx,DWORD [esp]\r
+        and     ebp,edx\r
+        xor     ebx,DWORD [20+esp]\r
+        rol     ebx,1\r
+        add     ebp,eax\r
+        ror     edx,2\r
+        mov     eax,ecx\r
+        rol     eax,5\r
+        mov     DWORD [32+esp],ebx\r
+        lea     ebx,[2400959708+ebp*1+ebx]\r
+        mov     ebp,edi\r
+        add     ebx,eax\r
+        and     ebp,esi\r
+        mov     eax,DWORD [36+esp]\r
+        add     ebx,ebp\r
+        ; 40_59 41\r
+        mov     ebp,edx\r
+        xor     eax,DWORD [44+esp]\r
+        xor     ebp,edi\r
+        xor     eax,DWORD [4+esp]\r
+        and     ebp,ecx\r
+        xor     eax,DWORD [24+esp]\r
+        rol     eax,1\r
+        add     ebp,esi\r
+        ror     ecx,2\r
+        mov     esi,ebx\r
+        rol     esi,5\r
+        mov     DWORD [36+esp],eax\r
+        lea     eax,[2400959708+ebp*1+eax]\r
+        mov     ebp,edx\r
+        add     eax,esi\r
+        and     ebp,edi\r
+        mov     esi,DWORD [40+esp]\r
+        add     eax,ebp\r
+        ; 40_59 42\r
+        mov     ebp,ecx\r
+        xor     esi,DWORD [48+esp]\r
+        xor     ebp,edx\r
+        xor     esi,DWORD [8+esp]\r
+        and     ebp,ebx\r
+        xor     esi,DWORD [28+esp]\r
+        rol     esi,1\r
+        add     ebp,edi\r
+        ror     ebx,2\r
+        mov     edi,eax\r
+        rol     edi,5\r
+        mov     DWORD [40+esp],esi\r
+        lea     esi,[2400959708+ebp*1+esi]\r
+        mov     ebp,ecx\r
+        add     esi,edi\r
+        and     ebp,edx\r
+        mov     edi,DWORD [44+esp]\r
+        add     esi,ebp\r
+        ; 40_59 43\r
+        mov     ebp,ebx\r
+        xor     edi,DWORD [52+esp]\r
+        xor     ebp,ecx\r
+        xor     edi,DWORD [12+esp]\r
+        and     ebp,eax\r
+        xor     edi,DWORD [32+esp]\r
+        rol     edi,1\r
+        add     ebp,edx\r
+        ror     eax,2\r
+        mov     edx,esi\r
+        rol     edx,5\r
+        mov     DWORD [44+esp],edi\r
+        lea     edi,[2400959708+ebp*1+edi]\r
+        mov     ebp,ebx\r
+        add     edi,edx\r
+        and     ebp,ecx\r
+        mov     edx,DWORD [48+esp]\r
+        add     edi,ebp\r
+        ; 40_59 44\r
+        mov     ebp,eax\r
+        xor     edx,DWORD [56+esp]\r
+        xor     ebp,ebx\r
+        xor     edx,DWORD [16+esp]\r
+        and     ebp,esi\r
+        xor     edx,DWORD [36+esp]\r
+        rol     edx,1\r
+        add     ebp,ecx\r
+        ror     esi,2\r
+        mov     ecx,edi\r
+        rol     ecx,5\r
+        mov     DWORD [48+esp],edx\r
+        lea     edx,[2400959708+ebp*1+edx]\r
+        mov     ebp,eax\r
+        add     edx,ecx\r
+        and     ebp,ebx\r
+        mov     ecx,DWORD [52+esp]\r
+        add     edx,ebp\r
+        ; 40_59 45\r
+        mov     ebp,esi\r
+        xor     ecx,DWORD [60+esp]\r
+        xor     ebp,eax\r
+        xor     ecx,DWORD [20+esp]\r
+        and     ebp,edi\r
+        xor     ecx,DWORD [40+esp]\r
+        rol     ecx,1\r
+        add     ebp,ebx\r
+        ror     edi,2\r
+        mov     ebx,edx\r
+        rol     ebx,5\r
+        mov     DWORD [52+esp],ecx\r
+        lea     ecx,[2400959708+ebp*1+ecx]\r
+        mov     ebp,esi\r
+        add     ecx,ebx\r
+        and     ebp,eax\r
+        mov     ebx,DWORD [56+esp]\r
+        add     ecx,ebp\r
+        ; 40_59 46\r
+        mov     ebp,edi\r
+        xor     ebx,DWORD [esp]\r
+        xor     ebp,esi\r
+        xor     ebx,DWORD [24+esp]\r
+        and     ebp,edx\r
+        xor     ebx,DWORD [44+esp]\r
+        rol     ebx,1\r
+        add     ebp,eax\r
+        ror     edx,2\r
+        mov     eax,ecx\r
+        rol     eax,5\r
+        mov     DWORD [56+esp],ebx\r
+        lea     ebx,[2400959708+ebp*1+ebx]\r
+        mov     ebp,edi\r
+        add     ebx,eax\r
+        and     ebp,esi\r
+        mov     eax,DWORD [60+esp]\r
+        add     ebx,ebp\r
+        ; 40_59 47\r
+        mov     ebp,edx\r
+        xor     eax,DWORD [4+esp]\r
+        xor     ebp,edi\r
+        xor     eax,DWORD [28+esp]\r
+        and     ebp,ecx\r
+        xor     eax,DWORD [48+esp]\r
+        rol     eax,1\r
+        add     ebp,esi\r
+        ror     ecx,2\r
+        mov     esi,ebx\r
+        rol     esi,5\r
+        mov     DWORD [60+esp],eax\r
+        lea     eax,[2400959708+ebp*1+eax]\r
+        mov     ebp,edx\r
+        add     eax,esi\r
+        and     ebp,edi\r
+        mov     esi,DWORD [esp]\r
+        add     eax,ebp\r
+        ; 40_59 48\r
+        mov     ebp,ecx\r
+        xor     esi,DWORD [8+esp]\r
+        xor     ebp,edx\r
+        xor     esi,DWORD [32+esp]\r
+        and     ebp,ebx\r
+        xor     esi,DWORD [52+esp]\r
+        rol     esi,1\r
+        add     ebp,edi\r
+        ror     ebx,2\r
+        mov     edi,eax\r
+        rol     edi,5\r
+        mov     DWORD [esp],esi\r
+        lea     esi,[2400959708+ebp*1+esi]\r
+        mov     ebp,ecx\r
+        add     esi,edi\r
+        and     ebp,edx\r
+        mov     edi,DWORD [4+esp]\r
+        add     esi,ebp\r
+        ; 40_59 49\r
+        mov     ebp,ebx\r
+        xor     edi,DWORD [12+esp]\r
+        xor     ebp,ecx\r
+        xor     edi,DWORD [36+esp]\r
+        and     ebp,eax\r
+        xor     edi,DWORD [56+esp]\r
+        rol     edi,1\r
+        add     ebp,edx\r
+        ror     eax,2\r
+        mov     edx,esi\r
+        rol     edx,5\r
+        mov     DWORD [4+esp],edi\r
+        lea     edi,[2400959708+ebp*1+edi]\r
+        mov     ebp,ebx\r
+        add     edi,edx\r
+        and     ebp,ecx\r
+        mov     edx,DWORD [8+esp]\r
+        add     edi,ebp\r
+        ; 40_59 50\r
+        mov     ebp,eax\r
+        xor     edx,DWORD [16+esp]\r
+        xor     ebp,ebx\r
+        xor     edx,DWORD [40+esp]\r
+        and     ebp,esi\r
+        xor     edx,DWORD [60+esp]\r
+        rol     edx,1\r
+        add     ebp,ecx\r
+        ror     esi,2\r
+        mov     ecx,edi\r
+        rol     ecx,5\r
+        mov     DWORD [8+esp],edx\r
+        lea     edx,[2400959708+ebp*1+edx]\r
+        mov     ebp,eax\r
+        add     edx,ecx\r
+        and     ebp,ebx\r
+        mov     ecx,DWORD [12+esp]\r
+        add     edx,ebp\r
+        ; 40_59 51\r
+        mov     ebp,esi\r
+        xor     ecx,DWORD [20+esp]\r
+        xor     ebp,eax\r
+        xor     ecx,DWORD [44+esp]\r
+        and     ebp,edi\r
+        xor     ecx,DWORD [esp]\r
+        rol     ecx,1\r
+        add     ebp,ebx\r
+        ror     edi,2\r
+        mov     ebx,edx\r
+        rol     ebx,5\r
+        mov     DWORD [12+esp],ecx\r
+        lea     ecx,[2400959708+ebp*1+ecx]\r
+        mov     ebp,esi\r
+        add     ecx,ebx\r
+        and     ebp,eax\r
+        mov     ebx,DWORD [16+esp]\r
+        add     ecx,ebp\r
+        ; 40_59 52\r
+        mov     ebp,edi\r
+        xor     ebx,DWORD [24+esp]\r
+        xor     ebp,esi\r
+        xor     ebx,DWORD [48+esp]\r
+        and     ebp,edx\r
+        xor     ebx,DWORD [4+esp]\r
+        rol     ebx,1\r
+        add     ebp,eax\r
+        ror     edx,2\r
+        mov     eax,ecx\r
+        rol     eax,5\r
+        mov     DWORD [16+esp],ebx\r
+        lea     ebx,[2400959708+ebp*1+ebx]\r
+        mov     ebp,edi\r
+        add     ebx,eax\r
+        and     ebp,esi\r
+        mov     eax,DWORD [20+esp]\r
+        add     ebx,ebp\r
+        ; 40_59 53\r
+        mov     ebp,edx\r
+        xor     eax,DWORD [28+esp]\r
+        xor     ebp,edi\r
+        xor     eax,DWORD [52+esp]\r
+        and     ebp,ecx\r
+        xor     eax,DWORD [8+esp]\r
+        rol     eax,1\r
+        add     ebp,esi\r
+        ror     ecx,2\r
+        mov     esi,ebx\r
+        rol     esi,5\r
+        mov     DWORD [20+esp],eax\r
+        lea     eax,[2400959708+ebp*1+eax]\r
+        mov     ebp,edx\r
+        add     eax,esi\r
+        and     ebp,edi\r
+        mov     esi,DWORD [24+esp]\r
+        add     eax,ebp\r
+        ; 40_59 54\r
+        mov     ebp,ecx\r
+        xor     esi,DWORD [32+esp]\r
+        xor     ebp,edx\r
+        xor     esi,DWORD [56+esp]\r
+        and     ebp,ebx\r
+        xor     esi,DWORD [12+esp]\r
+        rol     esi,1\r
+        add     ebp,edi\r
+        ror     ebx,2\r
+        mov     edi,eax\r
+        rol     edi,5\r
+        mov     DWORD [24+esp],esi\r
+        lea     esi,[2400959708+ebp*1+esi]\r
+        mov     ebp,ecx\r
+        add     esi,edi\r
+        and     ebp,edx\r
+        mov     edi,DWORD [28+esp]\r
+        add     esi,ebp\r
+        ; 40_59 55\r
+        mov     ebp,ebx\r
+        xor     edi,DWORD [36+esp]\r
+        xor     ebp,ecx\r
+        xor     edi,DWORD [60+esp]\r
+        and     ebp,eax\r
+        xor     edi,DWORD [16+esp]\r
+        rol     edi,1\r
+        add     ebp,edx\r
+        ror     eax,2\r
+        mov     edx,esi\r
+        rol     edx,5\r
+        mov     DWORD [28+esp],edi\r
+        lea     edi,[2400959708+ebp*1+edi]\r
+        mov     ebp,ebx\r
+        add     edi,edx\r
+        and     ebp,ecx\r
+        mov     edx,DWORD [32+esp]\r
+        add     edi,ebp\r
+        ; 40_59 56\r
+        mov     ebp,eax\r
+        xor     edx,DWORD [40+esp]\r
+        xor     ebp,ebx\r
+        xor     edx,DWORD [esp]\r
+        and     ebp,esi\r
+        xor     edx,DWORD [20+esp]\r
+        rol     edx,1\r
+        add     ebp,ecx\r
+        ror     esi,2\r
+        mov     ecx,edi\r
+        rol     ecx,5\r
+        mov     DWORD [32+esp],edx\r
+        lea     edx,[2400959708+ebp*1+edx]\r
+        mov     ebp,eax\r
+        add     edx,ecx\r
+        and     ebp,ebx\r
+        mov     ecx,DWORD [36+esp]\r
+        add     edx,ebp\r
+        ; 40_59 57\r
+        mov     ebp,esi\r
+        xor     ecx,DWORD [44+esp]\r
+        xor     ebp,eax\r
+        xor     ecx,DWORD [4+esp]\r
+        and     ebp,edi\r
+        xor     ecx,DWORD [24+esp]\r
+        rol     ecx,1\r
+        add     ebp,ebx\r
+        ror     edi,2\r
+        mov     ebx,edx\r
+        rol     ebx,5\r
+        mov     DWORD [36+esp],ecx\r
+        lea     ecx,[2400959708+ebp*1+ecx]\r
+        mov     ebp,esi\r
+        add     ecx,ebx\r
+        and     ebp,eax\r
+        mov     ebx,DWORD [40+esp]\r
+        add     ecx,ebp\r
+        ; 40_59 58\r
+        mov     ebp,edi\r
+        xor     ebx,DWORD [48+esp]\r
+        xor     ebp,esi\r
+        xor     ebx,DWORD [8+esp]\r
+        and     ebp,edx\r
+        xor     ebx,DWORD [28+esp]\r
+        rol     ebx,1\r
+        add     ebp,eax\r
+        ror     edx,2\r
+        mov     eax,ecx\r
+        rol     eax,5\r
+        mov     DWORD [40+esp],ebx\r
+        lea     ebx,[2400959708+ebp*1+ebx]\r
+        mov     ebp,edi\r
+        add     ebx,eax\r
+        and     ebp,esi\r
+        mov     eax,DWORD [44+esp]\r
+        add     ebx,ebp\r
+        ; 40_59 59\r
+        mov     ebp,edx\r
+        xor     eax,DWORD [52+esp]\r
+        xor     ebp,edi\r
+        xor     eax,DWORD [12+esp]\r
+        and     ebp,ecx\r
+        xor     eax,DWORD [32+esp]\r
+        rol     eax,1\r
+        add     ebp,esi\r
+        ror     ecx,2\r
+        mov     esi,ebx\r
+        rol     esi,5\r
+        mov     DWORD [44+esp],eax\r
+        lea     eax,[2400959708+ebp*1+eax]\r
+        mov     ebp,edx\r
+        add     eax,esi\r
+        and     ebp,edi\r
+        mov     esi,DWORD [48+esp]\r
+        add     eax,ebp\r
+        ; 20_39 60\r
+        mov     ebp,ebx\r
+        xor     esi,DWORD [56+esp]\r
+        xor     ebp,ecx\r
+        xor     esi,DWORD [16+esp]\r
+        xor     ebp,edx\r
+        xor     esi,DWORD [36+esp]\r
+        rol     esi,1\r
+        add     edi,ebp\r
+        ror     ebx,2\r
+        mov     ebp,eax\r
+        rol     ebp,5\r
+        mov     DWORD [48+esp],esi\r
+        lea     esi,[3395469782+edi*1+esi]\r
+        mov     edi,DWORD [52+esp]\r
+        add     esi,ebp\r
+        ; 20_39 61\r
+        mov     ebp,eax\r
+        xor     edi,DWORD [60+esp]\r
+        xor     ebp,ebx\r
+        xor     edi,DWORD [20+esp]\r
+        xor     ebp,ecx\r
+        xor     edi,DWORD [40+esp]\r
+        rol     edi,1\r
+        add     edx,ebp\r
+        ror     eax,2\r
+        mov     ebp,esi\r
+        rol     ebp,5\r
+        mov     DWORD [52+esp],edi\r
+        lea     edi,[3395469782+edx*1+edi]\r
+        mov     edx,DWORD [56+esp]\r
+        add     edi,ebp\r
+        ; 20_39 62\r
+        mov     ebp,esi\r
+        xor     edx,DWORD [esp]\r
+        xor     ebp,eax\r
+        xor     edx,DWORD [24+esp]\r
+        xor     ebp,ebx\r
+        xor     edx,DWORD [44+esp]\r
+        rol     edx,1\r
+        add     ecx,ebp\r
+        ror     esi,2\r
+        mov     ebp,edi\r
+        rol     ebp,5\r
+        mov     DWORD [56+esp],edx\r
+        lea     edx,[3395469782+ecx*1+edx]\r
+        mov     ecx,DWORD [60+esp]\r
+        add     edx,ebp\r
+        ; 20_39 63\r
+        mov     ebp,edi\r
+        xor     ecx,DWORD [4+esp]\r
+        xor     ebp,esi\r
+        xor     ecx,DWORD [28+esp]\r
+        xor     ebp,eax\r
+        xor     ecx,DWORD [48+esp]\r
+        rol     ecx,1\r
+        add     ebx,ebp\r
+        ror     edi,2\r
+        mov     ebp,edx\r
+        rol     ebp,5\r
+        mov     DWORD [60+esp],ecx\r
+        lea     ecx,[3395469782+ebx*1+ecx]\r
+        mov     ebx,DWORD [esp]\r
+        add     ecx,ebp\r
+        ; 20_39 64\r
+        mov     ebp,edx\r
+        xor     ebx,DWORD [8+esp]\r
+        xor     ebp,edi\r
+        xor     ebx,DWORD [32+esp]\r
+        xor     ebp,esi\r
+        xor     ebx,DWORD [52+esp]\r
+        rol     ebx,1\r
+        add     eax,ebp\r
+        ror     edx,2\r
+        mov     ebp,ecx\r
+        rol     ebp,5\r
+        mov     DWORD [esp],ebx\r
+        lea     ebx,[3395469782+eax*1+ebx]\r
+        mov     eax,DWORD [4+esp]\r
+        add     ebx,ebp\r
+        ; 20_39 65\r
+        mov     ebp,ecx\r
+        xor     eax,DWORD [12+esp]\r
+        xor     ebp,edx\r
+        xor     eax,DWORD [36+esp]\r
+        xor     ebp,edi\r
+        xor     eax,DWORD [56+esp]\r
+        rol     eax,1\r
+        add     esi,ebp\r
+        ror     ecx,2\r
+        mov     ebp,ebx\r
+        rol     ebp,5\r
+        mov     DWORD [4+esp],eax\r
+        lea     eax,[3395469782+esi*1+eax]\r
+        mov     esi,DWORD [8+esp]\r
+        add     eax,ebp\r
+        ; 20_39 66\r
+        mov     ebp,ebx\r
+        xor     esi,DWORD [16+esp]\r
+        xor     ebp,ecx\r
+        xor     esi,DWORD [40+esp]\r
+        xor     ebp,edx\r
+        xor     esi,DWORD [60+esp]\r
+        rol     esi,1\r
+        add     edi,ebp\r
+        ror     ebx,2\r
+        mov     ebp,eax\r
+        rol     ebp,5\r
+        mov     DWORD [8+esp],esi\r
+        lea     esi,[3395469782+edi*1+esi]\r
+        mov     edi,DWORD [12+esp]\r
+        add     esi,ebp\r
+        ; 20_39 67\r
+        mov     ebp,eax\r
+        xor     edi,DWORD [20+esp]\r
+        xor     ebp,ebx\r
+        xor     edi,DWORD [44+esp]\r
+        xor     ebp,ecx\r
+        xor     edi,DWORD [esp]\r
+        rol     edi,1\r
+        add     edx,ebp\r
+        ror     eax,2\r
+        mov     ebp,esi\r
+        rol     ebp,5\r
+        mov     DWORD [12+esp],edi\r
+        lea     edi,[3395469782+edx*1+edi]\r
+        mov     edx,DWORD [16+esp]\r
+        add     edi,ebp\r
+        ; 20_39 68\r
+        mov     ebp,esi\r
+        xor     edx,DWORD [24+esp]\r
+        xor     ebp,eax\r
+        xor     edx,DWORD [48+esp]\r
+        xor     ebp,ebx\r
+        xor     edx,DWORD [4+esp]\r
+        rol     edx,1\r
+        add     ecx,ebp\r
+        ror     esi,2\r
+        mov     ebp,edi\r
+        rol     ebp,5\r
+        mov     DWORD [16+esp],edx\r
+        lea     edx,[3395469782+ecx*1+edx]\r
+        mov     ecx,DWORD [20+esp]\r
+        add     edx,ebp\r
+        ; 20_39 69\r
+        mov     ebp,edi\r
+        xor     ecx,DWORD [28+esp]\r
+        xor     ebp,esi\r
+        xor     ecx,DWORD [52+esp]\r
+        xor     ebp,eax\r
+        xor     ecx,DWORD [8+esp]\r
+        rol     ecx,1\r
+        add     ebx,ebp\r
+        ror     edi,2\r
+        mov     ebp,edx\r
+        rol     ebp,5\r
+        mov     DWORD [20+esp],ecx\r
+        lea     ecx,[3395469782+ebx*1+ecx]\r
+        mov     ebx,DWORD [24+esp]\r
+        add     ecx,ebp\r
+        ; 20_39 70\r
+        mov     ebp,edx\r
+        xor     ebx,DWORD [32+esp]\r
+        xor     ebp,edi\r
+        xor     ebx,DWORD [56+esp]\r
+        xor     ebp,esi\r
+        xor     ebx,DWORD [12+esp]\r
+        rol     ebx,1\r
+        add     eax,ebp\r
+        ror     edx,2\r
+        mov     ebp,ecx\r
+        rol     ebp,5\r
+        mov     DWORD [24+esp],ebx\r
+        lea     ebx,[3395469782+eax*1+ebx]\r
+        mov     eax,DWORD [28+esp]\r
+        add     ebx,ebp\r
+        ; 20_39 71\r
+        mov     ebp,ecx\r
+        xor     eax,DWORD [36+esp]\r
+        xor     ebp,edx\r
+        xor     eax,DWORD [60+esp]\r
+        xor     ebp,edi\r
+        xor     eax,DWORD [16+esp]\r
+        rol     eax,1\r
+        add     esi,ebp\r
+        ror     ecx,2\r
+        mov     ebp,ebx\r
+        rol     ebp,5\r
+        mov     DWORD [28+esp],eax\r
+        lea     eax,[3395469782+esi*1+eax]\r
+        mov     esi,DWORD [32+esp]\r
+        add     eax,ebp\r
+        ; 20_39 72\r
+        mov     ebp,ebx\r
+        xor     esi,DWORD [40+esp]\r
+        xor     ebp,ecx\r
+        xor     esi,DWORD [esp]\r
+        xor     ebp,edx\r
+        xor     esi,DWORD [20+esp]\r
+        rol     esi,1\r
+        add     edi,ebp\r
+        ror     ebx,2\r
+        mov     ebp,eax\r
+        rol     ebp,5\r
+        mov     DWORD [32+esp],esi\r
+        lea     esi,[3395469782+edi*1+esi]\r
+        mov     edi,DWORD [36+esp]\r
+        add     esi,ebp\r
+        ; 20_39 73\r
+        mov     ebp,eax\r
+        xor     edi,DWORD [44+esp]\r
+        xor     ebp,ebx\r
+        xor     edi,DWORD [4+esp]\r
+        xor     ebp,ecx\r
+        xor     edi,DWORD [24+esp]\r
+        rol     edi,1\r
+        add     edx,ebp\r
+        ror     eax,2\r
+        mov     ebp,esi\r
+        rol     ebp,5\r
+        mov     DWORD [36+esp],edi\r
+        lea     edi,[3395469782+edx*1+edi]\r
+        mov     edx,DWORD [40+esp]\r
+        add     edi,ebp\r
+        ; 20_39 74\r
+        mov     ebp,esi\r
+        xor     edx,DWORD [48+esp]\r
+        xor     ebp,eax\r
+        xor     edx,DWORD [8+esp]\r
+        xor     ebp,ebx\r
+        xor     edx,DWORD [28+esp]\r
+        rol     edx,1\r
+        add     ecx,ebp\r
+        ror     esi,2\r
+        mov     ebp,edi\r
+        rol     ebp,5\r
+        mov     DWORD [40+esp],edx\r
+        lea     edx,[3395469782+ecx*1+edx]\r
+        mov     ecx,DWORD [44+esp]\r
+        add     edx,ebp\r
+        ; 20_39 75\r
+        mov     ebp,edi\r
+        xor     ecx,DWORD [52+esp]\r
+        xor     ebp,esi\r
+        xor     ecx,DWORD [12+esp]\r
+        xor     ebp,eax\r
+        xor     ecx,DWORD [32+esp]\r
+        rol     ecx,1\r
+        add     ebx,ebp\r
+        ror     edi,2\r
+        mov     ebp,edx\r
+        rol     ebp,5\r
+        mov     DWORD [44+esp],ecx\r
+        lea     ecx,[3395469782+ebx*1+ecx]\r
+        mov     ebx,DWORD [48+esp]\r
+        add     ecx,ebp\r
+        ; 20_39 76\r
+        mov     ebp,edx\r
+        xor     ebx,DWORD [56+esp]\r
+        xor     ebp,edi\r
+        xor     ebx,DWORD [16+esp]\r
+        xor     ebp,esi\r
+        xor     ebx,DWORD [36+esp]\r
+        rol     ebx,1\r
+        add     eax,ebp\r
+        ror     edx,2\r
+        mov     ebp,ecx\r
+        rol     ebp,5\r
+        mov     DWORD [48+esp],ebx\r
+        lea     ebx,[3395469782+eax*1+ebx]\r
+        mov     eax,DWORD [52+esp]\r
+        add     ebx,ebp\r
+        ; 20_39 77\r
+        mov     ebp,ecx\r
+        xor     eax,DWORD [60+esp]\r
+        xor     ebp,edx\r
+        xor     eax,DWORD [20+esp]\r
+        xor     ebp,edi\r
+        xor     eax,DWORD [40+esp]\r
+        rol     eax,1\r
+        add     esi,ebp\r
+        ror     ecx,2\r
+        mov     ebp,ebx\r
+        rol     ebp,5\r
+        lea     eax,[3395469782+esi*1+eax]\r
+        mov     esi,DWORD [56+esp]\r
+        add     eax,ebp\r
+        ; 20_39 78\r
+        mov     ebp,ebx\r
+        xor     esi,DWORD [esp]\r
+        xor     ebp,ecx\r
+        xor     esi,DWORD [24+esp]\r
+        xor     ebp,edx\r
+        xor     esi,DWORD [44+esp]\r
+        rol     esi,1\r
+        add     edi,ebp\r
+        ror     ebx,2\r
+        mov     ebp,eax\r
+        rol     ebp,5\r
+        lea     esi,[3395469782+edi*1+esi]\r
+        mov     edi,DWORD [60+esp]\r
+        add     esi,ebp\r
+        ; 20_39 79\r
+        mov     ebp,eax\r
+        xor     edi,DWORD [4+esp]\r
+        xor     ebp,ebx\r
+        xor     edi,DWORD [28+esp]\r
+        xor     ebp,ecx\r
+        xor     edi,DWORD [48+esp]\r
+        rol     edi,1\r
+        add     edx,ebp\r
+        ror     eax,2\r
+        mov     ebp,esi\r
+        rol     ebp,5\r
+        lea     edi,[3395469782+edx*1+edi]\r
+        add     edi,ebp\r
+        mov     ebp,DWORD [96+esp]\r
+        mov     edx,DWORD [100+esp]\r
+        add     edi,DWORD [ebp]\r
+        add     esi,DWORD [4+ebp]\r
+        add     eax,DWORD [8+ebp]\r
+        add     ebx,DWORD [12+ebp]\r
+        add     ecx,DWORD [16+ebp]\r
+        mov     DWORD [ebp],edi\r
+        add     edx,64\r
+        mov     DWORD [4+ebp],esi\r
+        cmp     edx,DWORD [104+esp]\r
+        mov     DWORD [8+ebp],eax\r
+        mov     edi,ecx\r
+        mov     DWORD [12+ebp],ebx\r
+        mov     esi,edx\r
+        mov     DWORD [16+ebp],ecx\r
+        jb      NEAR L$000loop\r
+        add     esp,76\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+db      83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115\r
+db      102,111,114,109,32,102,111,114,32,120,56,54,44,32,67,82\r
+db      89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112\r
+db      114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0\r
diff --git a/CryptoPkg/Library/OpensslLib/IA32/crypto/sha/sha256-586.nasm b/CryptoPkg/Library/OpensslLib/IA32/crypto/sha/sha256-586.nasm
new file mode 100644 (file)
index 0000000..4598dae
--- /dev/null
@@ -0,0 +1,3364 @@
+; WARNING: do not edit!\r
+; Generated from openssl/crypto/sha/asm/sha256-586.pl\r
+;\r
+; Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved.\r
+;\r
+; Licensed under the OpenSSL license (the "License").  You may not use\r
+; this file except in compliance with the License.  You can obtain a copy\r
+; in the file LICENSE in the source distribution or at\r
+; https://www.openssl.org/source/license.html\r
+\r
+%ifidn __OUTPUT_FORMAT__,obj\r
+section code    use32 class=code align=64\r
+%elifidn __OUTPUT_FORMAT__,win32\r
+$@feat.00 equ 1\r
+section .text   code align=64\r
+%else\r
+section .text   code\r
+%endif\r
+;extern _OPENSSL_ia32cap_P\r
+global  _sha256_block_data_order\r
+align   16\r
+_sha256_block_data_order:\r
+L$_sha256_block_data_order_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     esi,DWORD [20+esp]\r
+        mov     edi,DWORD [24+esp]\r
+        mov     eax,DWORD [28+esp]\r
+        mov     ebx,esp\r
+        call    L$000pic_point\r
+L$000pic_point:\r
+        pop     ebp\r
+        lea     ebp,[(L$001K256-L$000pic_point)+ebp]\r
+        sub     esp,16\r
+        and     esp,-64\r
+        shl     eax,6\r
+        add     eax,edi\r
+        mov     DWORD [esp],esi\r
+        mov     DWORD [4+esp],edi\r
+        mov     DWORD [8+esp],eax\r
+        mov     DWORD [12+esp],ebx\r
+        jmp     NEAR L$002loop\r
+align   16\r
+L$002loop:\r
+        mov     eax,DWORD [edi]\r
+        mov     ebx,DWORD [4+edi]\r
+        mov     ecx,DWORD [8+edi]\r
+        bswap   eax\r
+        mov     edx,DWORD [12+edi]\r
+        bswap   ebx\r
+        push    eax\r
+        bswap   ecx\r
+        push    ebx\r
+        bswap   edx\r
+        push    ecx\r
+        push    edx\r
+        mov     eax,DWORD [16+edi]\r
+        mov     ebx,DWORD [20+edi]\r
+        mov     ecx,DWORD [24+edi]\r
+        bswap   eax\r
+        mov     edx,DWORD [28+edi]\r
+        bswap   ebx\r
+        push    eax\r
+        bswap   ecx\r
+        push    ebx\r
+        bswap   edx\r
+        push    ecx\r
+        push    edx\r
+        mov     eax,DWORD [32+edi]\r
+        mov     ebx,DWORD [36+edi]\r
+        mov     ecx,DWORD [40+edi]\r
+        bswap   eax\r
+        mov     edx,DWORD [44+edi]\r
+        bswap   ebx\r
+        push    eax\r
+        bswap   ecx\r
+        push    ebx\r
+        bswap   edx\r
+        push    ecx\r
+        push    edx\r
+        mov     eax,DWORD [48+edi]\r
+        mov     ebx,DWORD [52+edi]\r
+        mov     ecx,DWORD [56+edi]\r
+        bswap   eax\r
+        mov     edx,DWORD [60+edi]\r
+        bswap   ebx\r
+        push    eax\r
+        bswap   ecx\r
+        push    ebx\r
+        bswap   edx\r
+        push    ecx\r
+        push    edx\r
+        add     edi,64\r
+        lea     esp,[esp-36]\r
+        mov     DWORD [104+esp],edi\r
+        mov     eax,DWORD [esi]\r
+        mov     ebx,DWORD [4+esi]\r
+        mov     ecx,DWORD [8+esi]\r
+        mov     edi,DWORD [12+esi]\r
+        mov     DWORD [8+esp],ebx\r
+        xor     ebx,ecx\r
+        mov     DWORD [12+esp],ecx\r
+        mov     DWORD [16+esp],edi\r
+        mov     DWORD [esp],ebx\r
+        mov     edx,DWORD [16+esi]\r
+        mov     ebx,DWORD [20+esi]\r
+        mov     ecx,DWORD [24+esi]\r
+        mov     edi,DWORD [28+esi]\r
+        mov     DWORD [24+esp],ebx\r
+        mov     DWORD [28+esp],ecx\r
+        mov     DWORD [32+esp],edi\r
+align   16\r
+L$00300_15:\r
+        mov     ecx,edx\r
+        mov     esi,DWORD [24+esp]\r
+        ror     ecx,14\r
+        mov     edi,DWORD [28+esp]\r
+        xor     ecx,edx\r
+        xor     esi,edi\r
+        mov     ebx,DWORD [96+esp]\r
+        ror     ecx,5\r
+        and     esi,edx\r
+        mov     DWORD [20+esp],edx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [32+esp]\r
+        xor     esi,edi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,esi\r
+        ror     ecx,9\r
+        add     ebx,edx\r
+        mov     edi,DWORD [8+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [4+esp],eax\r
+        lea     esp,[esp-4]\r
+        ror     ecx,11\r
+        mov     esi,DWORD [ebp]\r
+        xor     ecx,eax\r
+        mov     edx,DWORD [20+esp]\r
+        xor     eax,edi\r
+        ror     ecx,2\r
+        add     ebx,esi\r
+        mov     DWORD [esp],eax\r
+        add     edx,ebx\r
+        and     eax,DWORD [4+esp]\r
+        add     ebx,ecx\r
+        xor     eax,edi\r
+        add     ebp,4\r
+        add     eax,ebx\r
+        cmp     esi,3248222580\r
+        jne     NEAR L$00300_15\r
+        mov     ecx,DWORD [156+esp]\r
+        jmp     NEAR L$00416_63\r
+align   16\r
+L$00416_63:\r
+        mov     ebx,ecx\r
+        mov     esi,DWORD [104+esp]\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [160+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [124+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [24+esp]\r
+        ror     ecx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [28+esp]\r
+        xor     ecx,edx\r
+        xor     esi,edi\r
+        mov     DWORD [96+esp],ebx\r
+        ror     ecx,5\r
+        and     esi,edx\r
+        mov     DWORD [20+esp],edx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [32+esp]\r
+        xor     esi,edi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,esi\r
+        ror     ecx,9\r
+        add     ebx,edx\r
+        mov     edi,DWORD [8+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [4+esp],eax\r
+        lea     esp,[esp-4]\r
+        ror     ecx,11\r
+        mov     esi,DWORD [ebp]\r
+        xor     ecx,eax\r
+        mov     edx,DWORD [20+esp]\r
+        xor     eax,edi\r
+        ror     ecx,2\r
+        add     ebx,esi\r
+        mov     DWORD [esp],eax\r
+        add     edx,ebx\r
+        and     eax,DWORD [4+esp]\r
+        add     ebx,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [156+esp]\r
+        add     ebp,4\r
+        add     eax,ebx\r
+        cmp     esi,3329325298\r
+        jne     NEAR L$00416_63\r
+        mov     esi,DWORD [356+esp]\r
+        mov     ebx,DWORD [8+esp]\r
+        mov     ecx,DWORD [16+esp]\r
+        add     eax,DWORD [esi]\r
+        add     ebx,DWORD [4+esi]\r
+        add     edi,DWORD [8+esi]\r
+        add     ecx,DWORD [12+esi]\r
+        mov     DWORD [esi],eax\r
+        mov     DWORD [4+esi],ebx\r
+        mov     DWORD [8+esi],edi\r
+        mov     DWORD [12+esi],ecx\r
+        mov     eax,DWORD [24+esp]\r
+        mov     ebx,DWORD [28+esp]\r
+        mov     ecx,DWORD [32+esp]\r
+        mov     edi,DWORD [360+esp]\r
+        add     edx,DWORD [16+esi]\r
+        add     eax,DWORD [20+esi]\r
+        add     ebx,DWORD [24+esi]\r
+        add     ecx,DWORD [28+esi]\r
+        mov     DWORD [16+esi],edx\r
+        mov     DWORD [20+esi],eax\r
+        mov     DWORD [24+esi],ebx\r
+        mov     DWORD [28+esi],ecx\r
+        lea     esp,[356+esp]\r
+        sub     ebp,256\r
+        cmp     edi,DWORD [8+esp]\r
+        jb      NEAR L$002loop\r
+        mov     esp,DWORD [12+esp]\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+align   32\r
+L$005loop_shrd:\r
+        mov     eax,DWORD [edi]\r
+        mov     ebx,DWORD [4+edi]\r
+        mov     ecx,DWORD [8+edi]\r
+        bswap   eax\r
+        mov     edx,DWORD [12+edi]\r
+        bswap   ebx\r
+        push    eax\r
+        bswap   ecx\r
+        push    ebx\r
+        bswap   edx\r
+        push    ecx\r
+        push    edx\r
+        mov     eax,DWORD [16+edi]\r
+        mov     ebx,DWORD [20+edi]\r
+        mov     ecx,DWORD [24+edi]\r
+        bswap   eax\r
+        mov     edx,DWORD [28+edi]\r
+        bswap   ebx\r
+        push    eax\r
+        bswap   ecx\r
+        push    ebx\r
+        bswap   edx\r
+        push    ecx\r
+        push    edx\r
+        mov     eax,DWORD [32+edi]\r
+        mov     ebx,DWORD [36+edi]\r
+        mov     ecx,DWORD [40+edi]\r
+        bswap   eax\r
+        mov     edx,DWORD [44+edi]\r
+        bswap   ebx\r
+        push    eax\r
+        bswap   ecx\r
+        push    ebx\r
+        bswap   edx\r
+        push    ecx\r
+        push    edx\r
+        mov     eax,DWORD [48+edi]\r
+        mov     ebx,DWORD [52+edi]\r
+        mov     ecx,DWORD [56+edi]\r
+        bswap   eax\r
+        mov     edx,DWORD [60+edi]\r
+        bswap   ebx\r
+        push    eax\r
+        bswap   ecx\r
+        push    ebx\r
+        bswap   edx\r
+        push    ecx\r
+        push    edx\r
+        add     edi,64\r
+        lea     esp,[esp-36]\r
+        mov     DWORD [104+esp],edi\r
+        mov     eax,DWORD [esi]\r
+        mov     ebx,DWORD [4+esi]\r
+        mov     ecx,DWORD [8+esi]\r
+        mov     edi,DWORD [12+esi]\r
+        mov     DWORD [8+esp],ebx\r
+        xor     ebx,ecx\r
+        mov     DWORD [12+esp],ecx\r
+        mov     DWORD [16+esp],edi\r
+        mov     DWORD [esp],ebx\r
+        mov     edx,DWORD [16+esi]\r
+        mov     ebx,DWORD [20+esi]\r
+        mov     ecx,DWORD [24+esi]\r
+        mov     edi,DWORD [28+esi]\r
+        mov     DWORD [24+esp],ebx\r
+        mov     DWORD [28+esp],ecx\r
+        mov     DWORD [32+esp],edi\r
+align   16\r
+L$00600_15_shrd:\r
+        mov     ecx,edx\r
+        mov     esi,DWORD [24+esp]\r
+        shrd    ecx,ecx,14\r
+        mov     edi,DWORD [28+esp]\r
+        xor     ecx,edx\r
+        xor     esi,edi\r
+        mov     ebx,DWORD [96+esp]\r
+        shrd    ecx,ecx,5\r
+        and     esi,edx\r
+        mov     DWORD [20+esp],edx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [32+esp]\r
+        xor     esi,edi\r
+        shrd    edx,edx,6\r
+        mov     ecx,eax\r
+        add     ebx,esi\r
+        shrd    ecx,ecx,9\r
+        add     ebx,edx\r
+        mov     edi,DWORD [8+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [4+esp],eax\r
+        lea     esp,[esp-4]\r
+        shrd    ecx,ecx,11\r
+        mov     esi,DWORD [ebp]\r
+        xor     ecx,eax\r
+        mov     edx,DWORD [20+esp]\r
+        xor     eax,edi\r
+        shrd    ecx,ecx,2\r
+        add     ebx,esi\r
+        mov     DWORD [esp],eax\r
+        add     edx,ebx\r
+        and     eax,DWORD [4+esp]\r
+        add     ebx,ecx\r
+        xor     eax,edi\r
+        add     ebp,4\r
+        add     eax,ebx\r
+        cmp     esi,3248222580\r
+        jne     NEAR L$00600_15_shrd\r
+        mov     ecx,DWORD [156+esp]\r
+        jmp     NEAR L$00716_63_shrd\r
+align   16\r
+L$00716_63_shrd:\r
+        mov     ebx,ecx\r
+        mov     esi,DWORD [104+esp]\r
+        shrd    ecx,ecx,11\r
+        mov     edi,esi\r
+        shrd    esi,esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        shrd    ecx,ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        shrd    esi,esi,17\r
+        add     ebx,DWORD [160+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [124+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [24+esp]\r
+        shrd    ecx,ecx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [28+esp]\r
+        xor     ecx,edx\r
+        xor     esi,edi\r
+        mov     DWORD [96+esp],ebx\r
+        shrd    ecx,ecx,5\r
+        and     esi,edx\r
+        mov     DWORD [20+esp],edx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [32+esp]\r
+        xor     esi,edi\r
+        shrd    edx,edx,6\r
+        mov     ecx,eax\r
+        add     ebx,esi\r
+        shrd    ecx,ecx,9\r
+        add     ebx,edx\r
+        mov     edi,DWORD [8+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [4+esp],eax\r
+        lea     esp,[esp-4]\r
+        shrd    ecx,ecx,11\r
+        mov     esi,DWORD [ebp]\r
+        xor     ecx,eax\r
+        mov     edx,DWORD [20+esp]\r
+        xor     eax,edi\r
+        shrd    ecx,ecx,2\r
+        add     ebx,esi\r
+        mov     DWORD [esp],eax\r
+        add     edx,ebx\r
+        and     eax,DWORD [4+esp]\r
+        add     ebx,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [156+esp]\r
+        add     ebp,4\r
+        add     eax,ebx\r
+        cmp     esi,3329325298\r
+        jne     NEAR L$00716_63_shrd\r
+        mov     esi,DWORD [356+esp]\r
+        mov     ebx,DWORD [8+esp]\r
+        mov     ecx,DWORD [16+esp]\r
+        add     eax,DWORD [esi]\r
+        add     ebx,DWORD [4+esi]\r
+        add     edi,DWORD [8+esi]\r
+        add     ecx,DWORD [12+esi]\r
+        mov     DWORD [esi],eax\r
+        mov     DWORD [4+esi],ebx\r
+        mov     DWORD [8+esi],edi\r
+        mov     DWORD [12+esi],ecx\r
+        mov     eax,DWORD [24+esp]\r
+        mov     ebx,DWORD [28+esp]\r
+        mov     ecx,DWORD [32+esp]\r
+        mov     edi,DWORD [360+esp]\r
+        add     edx,DWORD [16+esi]\r
+        add     eax,DWORD [20+esi]\r
+        add     ebx,DWORD [24+esi]\r
+        add     ecx,DWORD [28+esi]\r
+        mov     DWORD [16+esi],edx\r
+        mov     DWORD [20+esi],eax\r
+        mov     DWORD [24+esi],ebx\r
+        mov     DWORD [28+esi],ecx\r
+        lea     esp,[356+esp]\r
+        sub     ebp,256\r
+        cmp     edi,DWORD [8+esp]\r
+        jb      NEAR L$005loop_shrd\r
+        mov     esp,DWORD [12+esp]\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+align   64\r
+L$001K256:\r
+dd      1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298\r
+dd      66051,67438087,134810123,202182159\r
+db      83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97\r
+db      110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32\r
+db      67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97\r
+db      112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103\r
+db      62,0\r
+align   16\r
+L$008unrolled:\r
+        lea     esp,[esp-96]\r
+        mov     eax,DWORD [esi]\r
+        mov     ebp,DWORD [4+esi]\r
+        mov     ecx,DWORD [8+esi]\r
+        mov     ebx,DWORD [12+esi]\r
+        mov     DWORD [4+esp],ebp\r
+        xor     ebp,ecx\r
+        mov     DWORD [8+esp],ecx\r
+        mov     DWORD [12+esp],ebx\r
+        mov     edx,DWORD [16+esi]\r
+        mov     ebx,DWORD [20+esi]\r
+        mov     ecx,DWORD [24+esi]\r
+        mov     esi,DWORD [28+esi]\r
+        mov     DWORD [20+esp],ebx\r
+        mov     DWORD [24+esp],ecx\r
+        mov     DWORD [28+esp],esi\r
+        jmp     NEAR L$009grand_loop\r
+align   16\r
+L$009grand_loop:\r
+        mov     ebx,DWORD [edi]\r
+        mov     ecx,DWORD [4+edi]\r
+        bswap   ebx\r
+        mov     esi,DWORD [8+edi]\r
+        bswap   ecx\r
+        mov     DWORD [32+esp],ebx\r
+        bswap   esi\r
+        mov     DWORD [36+esp],ecx\r
+        mov     DWORD [40+esp],esi\r
+        mov     ebx,DWORD [12+edi]\r
+        mov     ecx,DWORD [16+edi]\r
+        bswap   ebx\r
+        mov     esi,DWORD [20+edi]\r
+        bswap   ecx\r
+        mov     DWORD [44+esp],ebx\r
+        bswap   esi\r
+        mov     DWORD [48+esp],ecx\r
+        mov     DWORD [52+esp],esi\r
+        mov     ebx,DWORD [24+edi]\r
+        mov     ecx,DWORD [28+edi]\r
+        bswap   ebx\r
+        mov     esi,DWORD [32+edi]\r
+        bswap   ecx\r
+        mov     DWORD [56+esp],ebx\r
+        bswap   esi\r
+        mov     DWORD [60+esp],ecx\r
+        mov     DWORD [64+esp],esi\r
+        mov     ebx,DWORD [36+edi]\r
+        mov     ecx,DWORD [40+edi]\r
+        bswap   ebx\r
+        mov     esi,DWORD [44+edi]\r
+        bswap   ecx\r
+        mov     DWORD [68+esp],ebx\r
+        bswap   esi\r
+        mov     DWORD [72+esp],ecx\r
+        mov     DWORD [76+esp],esi\r
+        mov     ebx,DWORD [48+edi]\r
+        mov     ecx,DWORD [52+edi]\r
+        bswap   ebx\r
+        mov     esi,DWORD [56+edi]\r
+        bswap   ecx\r
+        mov     DWORD [80+esp],ebx\r
+        bswap   esi\r
+        mov     DWORD [84+esp],ecx\r
+        mov     DWORD [88+esp],esi\r
+        mov     ebx,DWORD [60+edi]\r
+        add     edi,64\r
+        bswap   ebx\r
+        mov     DWORD [100+esp],edi\r
+        mov     DWORD [92+esp],ebx\r
+        mov     ecx,edx\r
+        mov     esi,DWORD [20+esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [24+esp]\r
+        xor     edx,ecx\r
+        mov     ebx,DWORD [32+esp]\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [16+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [28+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [4+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[1116352408+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [12+esp]\r
+        add     ebp,ecx\r
+        mov     esi,edx\r
+        mov     ecx,DWORD [16+esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [20+esp]\r
+        xor     edx,esi\r
+        mov     ebx,DWORD [36+esp]\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [12+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [24+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [28+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[1899447441+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [8+esp]\r
+        add     eax,esi\r
+        mov     ecx,edx\r
+        mov     esi,DWORD [12+esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [16+esp]\r
+        xor     edx,ecx\r
+        mov     ebx,DWORD [40+esp]\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [8+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [20+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [28+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [24+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[3049323471+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [4+esp]\r
+        add     ebp,ecx\r
+        mov     esi,edx\r
+        mov     ecx,DWORD [8+esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [12+esp]\r
+        xor     edx,esi\r
+        mov     ebx,DWORD [44+esp]\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [4+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [16+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [24+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [20+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[3921009573+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [esp]\r
+        add     eax,esi\r
+        mov     ecx,edx\r
+        mov     esi,DWORD [4+esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [8+esp]\r
+        xor     edx,ecx\r
+        mov     ebx,DWORD [48+esp]\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [12+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [20+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [16+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[961987163+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [28+esp]\r
+        add     ebp,ecx\r
+        mov     esi,edx\r
+        mov     ecx,DWORD [esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [4+esp]\r
+        xor     edx,esi\r
+        mov     ebx,DWORD [52+esp]\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [28+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [8+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [16+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [12+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[1508970993+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [24+esp]\r
+        add     eax,esi\r
+        mov     ecx,edx\r
+        mov     esi,DWORD [28+esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [esp]\r
+        xor     edx,ecx\r
+        mov     ebx,DWORD [56+esp]\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [24+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [4+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [12+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [8+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[2453635748+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [20+esp]\r
+        add     ebp,ecx\r
+        mov     esi,edx\r
+        mov     ecx,DWORD [24+esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [28+esp]\r
+        xor     edx,esi\r
+        mov     ebx,DWORD [60+esp]\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [20+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [8+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [4+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[2870763221+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [16+esp]\r
+        add     eax,esi\r
+        mov     ecx,edx\r
+        mov     esi,DWORD [20+esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [24+esp]\r
+        xor     edx,ecx\r
+        mov     ebx,DWORD [64+esp]\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [16+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [28+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [4+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[3624381080+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [12+esp]\r
+        add     ebp,ecx\r
+        mov     esi,edx\r
+        mov     ecx,DWORD [16+esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [20+esp]\r
+        xor     edx,esi\r
+        mov     ebx,DWORD [68+esp]\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [12+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [24+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [28+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[310598401+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [8+esp]\r
+        add     eax,esi\r
+        mov     ecx,edx\r
+        mov     esi,DWORD [12+esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [16+esp]\r
+        xor     edx,ecx\r
+        mov     ebx,DWORD [72+esp]\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [8+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [20+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [28+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [24+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[607225278+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [4+esp]\r
+        add     ebp,ecx\r
+        mov     esi,edx\r
+        mov     ecx,DWORD [8+esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [12+esp]\r
+        xor     edx,esi\r
+        mov     ebx,DWORD [76+esp]\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [4+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [16+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [24+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [20+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[1426881987+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [esp]\r
+        add     eax,esi\r
+        mov     ecx,edx\r
+        mov     esi,DWORD [4+esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [8+esp]\r
+        xor     edx,ecx\r
+        mov     ebx,DWORD [80+esp]\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [12+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [20+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [16+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[1925078388+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [28+esp]\r
+        add     ebp,ecx\r
+        mov     esi,edx\r
+        mov     ecx,DWORD [esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [4+esp]\r
+        xor     edx,esi\r
+        mov     ebx,DWORD [84+esp]\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [28+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [8+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [16+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [12+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[2162078206+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [24+esp]\r
+        add     eax,esi\r
+        mov     ecx,edx\r
+        mov     esi,DWORD [28+esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [esp]\r
+        xor     edx,ecx\r
+        mov     ebx,DWORD [88+esp]\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [24+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [4+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [12+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [8+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[2614888103+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [20+esp]\r
+        add     ebp,ecx\r
+        mov     esi,edx\r
+        mov     ecx,DWORD [24+esp]\r
+        ror     edx,14\r
+        mov     edi,DWORD [28+esp]\r
+        xor     edx,esi\r
+        mov     ebx,DWORD [92+esp]\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [20+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [8+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [4+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[3248222580+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [36+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [16+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [88+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [32+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [68+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [20+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [24+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [32+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [16+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [28+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [4+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[3835390401+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [40+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [12+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [92+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [36+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [72+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [16+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [20+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [36+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [12+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [24+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [28+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[4022224774+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [44+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [8+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [32+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [40+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [76+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [12+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [16+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [40+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [8+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [20+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [28+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [24+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[264347078+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [48+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [4+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [36+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [44+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [80+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [8+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [12+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [44+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [4+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [16+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [24+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [20+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[604807628+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [52+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [40+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [48+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [84+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [4+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [8+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [48+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [12+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [20+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [16+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[770255983+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [56+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [28+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [44+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [52+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [88+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [4+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [52+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [28+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [8+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [16+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [12+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[1249150122+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [60+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [24+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [48+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [56+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [92+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [28+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [56+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [24+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [4+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [12+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [8+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[1555081692+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [64+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [20+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [52+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [60+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [32+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [24+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [28+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [60+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [20+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [8+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [4+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[1996064986+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [68+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [16+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [56+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [64+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [36+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [20+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [24+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [64+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [16+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [28+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [4+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[2554220882+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [72+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [12+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [60+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [68+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [40+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [16+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [20+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [68+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [12+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [24+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [28+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[2821834349+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [76+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [8+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [64+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [72+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [44+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [12+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [16+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [72+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [8+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [20+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [28+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [24+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[2952996808+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [80+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [4+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [68+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [76+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [48+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [8+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [12+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [76+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [4+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [16+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [24+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [20+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[3210313671+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [84+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [72+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [80+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [52+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [4+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [8+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [80+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [12+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [20+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [16+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[3336571891+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [88+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [28+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [76+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [84+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [56+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [4+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [84+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [28+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [8+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [16+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [12+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[3584528711+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [92+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [24+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [80+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [88+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [60+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [28+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [88+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [24+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [4+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [12+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [8+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[113926993+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [32+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [20+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [84+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [92+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [64+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [24+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [28+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [92+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [20+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [8+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [4+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[338241895+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [36+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [16+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [88+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [32+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [68+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [20+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [24+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [32+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [16+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [28+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [4+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[666307205+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [40+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [12+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [92+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [36+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [72+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [16+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [20+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [36+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [12+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [24+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [28+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[773529912+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [44+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [8+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [32+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [40+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [76+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [12+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [16+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [40+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [8+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [20+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [28+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [24+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[1294757372+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [48+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [4+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [36+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [44+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [80+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [8+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [12+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [44+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [4+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [16+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [24+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [20+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[1396182291+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [52+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [40+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [48+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [84+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [4+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [8+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [48+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [12+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [20+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [16+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[1695183700+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [56+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [28+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [44+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [52+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [88+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [4+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [52+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [28+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [8+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [16+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [12+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[1986661051+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [60+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [24+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [48+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [56+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [92+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [28+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [56+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [24+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [4+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [12+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [8+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[2177026350+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [64+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [20+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [52+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [60+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [32+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [24+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [28+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [60+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [20+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [8+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [4+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[2456956037+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [68+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [16+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [56+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [64+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [36+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [20+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [24+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [64+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [16+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [28+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [4+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[2730485921+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [72+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [12+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [60+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [68+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [40+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [16+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [20+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [68+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [12+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [24+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [28+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[2820302411+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [76+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [8+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [64+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [72+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [44+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [12+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [16+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [72+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [8+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [20+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [28+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [24+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[3259730800+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [80+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [4+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [68+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [76+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [48+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [8+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [12+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [76+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [4+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [16+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [24+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [20+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[3345764771+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [84+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [72+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [80+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [52+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [4+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [8+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [80+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [12+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [20+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [16+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[3516065817+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [88+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [28+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [76+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [84+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [56+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [4+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [84+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [28+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [8+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [16+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [12+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[3600352804+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [92+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [24+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [80+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [88+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [60+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [28+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [88+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [24+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [4+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [12+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [8+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[4094571909+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [32+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [20+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [84+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [92+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [64+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [24+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [28+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [92+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [20+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [8+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [4+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[275423344+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [36+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [16+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [88+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [32+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [68+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [20+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [24+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [32+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [16+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [28+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [4+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[430227734+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [40+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [12+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [92+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [36+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [72+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [16+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [20+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [36+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [12+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [24+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [28+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[506948616+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [44+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [8+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [32+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [40+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [76+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [12+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [16+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [40+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [8+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [20+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [28+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [24+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[659060556+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [48+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [4+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [36+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [44+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [80+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [8+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [12+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [44+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [4+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [16+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [24+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [20+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[883997877+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [52+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [40+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [48+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [84+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [4+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [8+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [48+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [12+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [20+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [16+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[958139571+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [56+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [28+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [44+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [52+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [88+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [4+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [52+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [28+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [8+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [16+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [12+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[1322822218+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [60+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [24+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [48+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [56+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [92+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [28+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [56+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [24+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [4+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [12+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [8+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[1537002063+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [64+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [20+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [52+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [60+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [32+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [24+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [28+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [60+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [20+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [8+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [4+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[1747873779+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [68+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [16+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [56+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [64+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [36+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [20+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [24+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [64+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [16+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [28+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [4+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[1955562222+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [72+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [12+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [60+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [68+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [40+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [16+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [20+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [68+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [12+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [24+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [28+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[2024104815+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [76+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [8+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [64+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [72+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [44+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [12+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [16+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [72+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [8+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [20+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [28+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [24+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[2227730452+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [80+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [4+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [68+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [76+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [48+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [8+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [12+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [76+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [4+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [16+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [24+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [20+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[2361852424+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [84+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [72+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [80+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [52+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [4+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [8+esp]\r
+        xor     edx,ecx\r
+        mov     DWORD [80+esp],ebx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [12+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [20+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [16+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[2428436474+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [88+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [28+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [76+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [84+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [56+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [4+esp]\r
+        xor     edx,esi\r
+        mov     DWORD [84+esp],ebx\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [28+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [8+esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [16+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [12+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[2756734187+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [92+esp]\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [24+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [80+esp]\r
+        mov     ebx,ecx\r
+        ror     ecx,11\r
+        mov     edi,esi\r
+        ror     esi,2\r
+        xor     ecx,ebx\r
+        shr     ebx,3\r
+        ror     ecx,7\r
+        xor     esi,edi\r
+        xor     ebx,ecx\r
+        ror     esi,17\r
+        add     ebx,DWORD [88+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [60+esp]\r
+        mov     ecx,edx\r
+        xor     edi,esi\r
+        mov     esi,DWORD [28+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [esp]\r
+        xor     edx,ecx\r
+        xor     esi,edi\r
+        ror     edx,5\r
+        and     esi,ecx\r
+        mov     DWORD [24+esp],ecx\r
+        xor     edx,ecx\r
+        add     ebx,DWORD [4+esp]\r
+        xor     edi,esi\r
+        ror     edx,6\r
+        mov     ecx,eax\r
+        add     ebx,edi\r
+        ror     ecx,9\r
+        mov     esi,eax\r
+        mov     edi,DWORD [12+esp]\r
+        xor     ecx,eax\r
+        mov     DWORD [8+esp],eax\r
+        xor     eax,edi\r
+        ror     ecx,11\r
+        and     ebp,eax\r
+        lea     edx,[3204031479+edx*1+ebx]\r
+        xor     ecx,esi\r
+        xor     ebp,edi\r
+        mov     esi,DWORD [32+esp]\r
+        ror     ecx,2\r
+        add     ebp,edx\r
+        add     edx,DWORD [20+esp]\r
+        add     ebp,ecx\r
+        mov     ecx,DWORD [84+esp]\r
+        mov     ebx,esi\r
+        ror     esi,11\r
+        mov     edi,ecx\r
+        ror     ecx,2\r
+        xor     esi,ebx\r
+        shr     ebx,3\r
+        ror     esi,7\r
+        xor     ecx,edi\r
+        xor     ebx,esi\r
+        ror     ecx,17\r
+        add     ebx,DWORD [92+esp]\r
+        shr     edi,10\r
+        add     ebx,DWORD [64+esp]\r
+        mov     esi,edx\r
+        xor     edi,ecx\r
+        mov     ecx,DWORD [24+esp]\r
+        ror     edx,14\r
+        add     ebx,edi\r
+        mov     edi,DWORD [28+esp]\r
+        xor     edx,esi\r
+        xor     ecx,edi\r
+        ror     edx,5\r
+        and     ecx,esi\r
+        mov     DWORD [20+esp],esi\r
+        xor     edx,esi\r
+        add     ebx,DWORD [esp]\r
+        xor     edi,ecx\r
+        ror     edx,6\r
+        mov     esi,ebp\r
+        add     ebx,edi\r
+        ror     esi,9\r
+        mov     ecx,ebp\r
+        mov     edi,DWORD [8+esp]\r
+        xor     esi,ebp\r
+        mov     DWORD [4+esp],ebp\r
+        xor     ebp,edi\r
+        ror     esi,11\r
+        and     eax,ebp\r
+        lea     edx,[3329325298+edx*1+ebx]\r
+        xor     esi,ecx\r
+        xor     eax,edi\r
+        ror     esi,2\r
+        add     eax,edx\r
+        add     edx,DWORD [16+esp]\r
+        add     eax,esi\r
+        mov     esi,DWORD [96+esp]\r
+        xor     ebp,edi\r
+        mov     ecx,DWORD [12+esp]\r
+        add     eax,DWORD [esi]\r
+        add     ebp,DWORD [4+esi]\r
+        add     edi,DWORD [8+esi]\r
+        add     ecx,DWORD [12+esi]\r
+        mov     DWORD [esi],eax\r
+        mov     DWORD [4+esi],ebp\r
+        mov     DWORD [8+esi],edi\r
+        mov     DWORD [12+esi],ecx\r
+        mov     DWORD [4+esp],ebp\r
+        xor     ebp,edi\r
+        mov     DWORD [8+esp],edi\r
+        mov     DWORD [12+esp],ecx\r
+        mov     edi,DWORD [20+esp]\r
+        mov     ebx,DWORD [24+esp]\r
+        mov     ecx,DWORD [28+esp]\r
+        add     edx,DWORD [16+esi]\r
+        add     edi,DWORD [20+esi]\r
+        add     ebx,DWORD [24+esi]\r
+        add     ecx,DWORD [28+esi]\r
+        mov     DWORD [16+esi],edx\r
+        mov     DWORD [20+esi],edi\r
+        mov     DWORD [24+esi],ebx\r
+        mov     DWORD [28+esi],ecx\r
+        mov     DWORD [20+esp],edi\r
+        mov     edi,DWORD [100+esp]\r
+        mov     DWORD [24+esp],ebx\r
+        mov     DWORD [28+esp],ecx\r
+        cmp     edi,DWORD [104+esp]\r
+        jb      NEAR L$009grand_loop\r
+        mov     esp,DWORD [108+esp]\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+segment .bss\r
+common  _OPENSSL_ia32cap_P 16\r
diff --git a/CryptoPkg/Library/OpensslLib/IA32/crypto/sha/sha512-586.nasm b/CryptoPkg/Library/OpensslLib/IA32/crypto/sha/sha512-586.nasm
new file mode 100644 (file)
index 0000000..a168b4a
--- /dev/null
@@ -0,0 +1,579 @@
+; WARNING: do not edit!\r
+; Generated from openssl/crypto/sha/asm/sha512-586.pl\r
+;\r
+; Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved.\r
+;\r
+; Licensed under the OpenSSL license (the "License").  You may not use\r
+; this file except in compliance with the License.  You can obtain a copy\r
+; in the file LICENSE in the source distribution or at\r
+; https://www.openssl.org/source/license.html\r
+\r
+%ifidn __OUTPUT_FORMAT__,obj\r
+section code    use32 class=code align=64\r
+%elifidn __OUTPUT_FORMAT__,win32\r
+$@feat.00 equ 1\r
+section .text   code align=64\r
+%else\r
+section .text   code\r
+%endif\r
+global  _sha512_block_data_order\r
+align   16\r
+_sha512_block_data_order:\r
+L$_sha512_block_data_order_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     esi,DWORD [20+esp]\r
+        mov     edi,DWORD [24+esp]\r
+        mov     eax,DWORD [28+esp]\r
+        mov     ebx,esp\r
+        call    L$000pic_point\r
+L$000pic_point:\r
+        pop     ebp\r
+        lea     ebp,[(L$001K512-L$000pic_point)+ebp]\r
+        sub     esp,16\r
+        and     esp,-64\r
+        shl     eax,7\r
+        add     eax,edi\r
+        mov     DWORD [esp],esi\r
+        mov     DWORD [4+esp],edi\r
+        mov     DWORD [8+esp],eax\r
+        mov     DWORD [12+esp],ebx\r
+align   16\r
+L$002loop_x86:\r
+        mov     eax,DWORD [edi]\r
+        mov     ebx,DWORD [4+edi]\r
+        mov     ecx,DWORD [8+edi]\r
+        mov     edx,DWORD [12+edi]\r
+        bswap   eax\r
+        bswap   ebx\r
+        bswap   ecx\r
+        bswap   edx\r
+        push    eax\r
+        push    ebx\r
+        push    ecx\r
+        push    edx\r
+        mov     eax,DWORD [16+edi]\r
+        mov     ebx,DWORD [20+edi]\r
+        mov     ecx,DWORD [24+edi]\r
+        mov     edx,DWORD [28+edi]\r
+        bswap   eax\r
+        bswap   ebx\r
+        bswap   ecx\r
+        bswap   edx\r
+        push    eax\r
+        push    ebx\r
+        push    ecx\r
+        push    edx\r
+        mov     eax,DWORD [32+edi]\r
+        mov     ebx,DWORD [36+edi]\r
+        mov     ecx,DWORD [40+edi]\r
+        mov     edx,DWORD [44+edi]\r
+        bswap   eax\r
+        bswap   ebx\r
+        bswap   ecx\r
+        bswap   edx\r
+        push    eax\r
+        push    ebx\r
+        push    ecx\r
+        push    edx\r
+        mov     eax,DWORD [48+edi]\r
+        mov     ebx,DWORD [52+edi]\r
+        mov     ecx,DWORD [56+edi]\r
+        mov     edx,DWORD [60+edi]\r
+        bswap   eax\r
+        bswap   ebx\r
+        bswap   ecx\r
+        bswap   edx\r
+        push    eax\r
+        push    ebx\r
+        push    ecx\r
+        push    edx\r
+        mov     eax,DWORD [64+edi]\r
+        mov     ebx,DWORD [68+edi]\r
+        mov     ecx,DWORD [72+edi]\r
+        mov     edx,DWORD [76+edi]\r
+        bswap   eax\r
+        bswap   ebx\r
+        bswap   ecx\r
+        bswap   edx\r
+        push    eax\r
+        push    ebx\r
+        push    ecx\r
+        push    edx\r
+        mov     eax,DWORD [80+edi]\r
+        mov     ebx,DWORD [84+edi]\r
+        mov     ecx,DWORD [88+edi]\r
+        mov     edx,DWORD [92+edi]\r
+        bswap   eax\r
+        bswap   ebx\r
+        bswap   ecx\r
+        bswap   edx\r
+        push    eax\r
+        push    ebx\r
+        push    ecx\r
+        push    edx\r
+        mov     eax,DWORD [96+edi]\r
+        mov     ebx,DWORD [100+edi]\r
+        mov     ecx,DWORD [104+edi]\r
+        mov     edx,DWORD [108+edi]\r
+        bswap   eax\r
+        bswap   ebx\r
+        bswap   ecx\r
+        bswap   edx\r
+        push    eax\r
+        push    ebx\r
+        push    ecx\r
+        push    edx\r
+        mov     eax,DWORD [112+edi]\r
+        mov     ebx,DWORD [116+edi]\r
+        mov     ecx,DWORD [120+edi]\r
+        mov     edx,DWORD [124+edi]\r
+        bswap   eax\r
+        bswap   ebx\r
+        bswap   ecx\r
+        bswap   edx\r
+        push    eax\r
+        push    ebx\r
+        push    ecx\r
+        push    edx\r
+        add     edi,128\r
+        sub     esp,72\r
+        mov     DWORD [204+esp],edi\r
+        lea     edi,[8+esp]\r
+        mov     ecx,16\r
+dd      2784229001\r
+align   16\r
+L$00300_15_x86:\r
+        mov     ecx,DWORD [40+esp]\r
+        mov     edx,DWORD [44+esp]\r
+        mov     esi,ecx\r
+        shr     ecx,9\r
+        mov     edi,edx\r
+        shr     edx,9\r
+        mov     ebx,ecx\r
+        shl     esi,14\r
+        mov     eax,edx\r
+        shl     edi,14\r
+        xor     ebx,esi\r
+        shr     ecx,5\r
+        xor     eax,edi\r
+        shr     edx,5\r
+        xor     eax,ecx\r
+        shl     esi,4\r
+        xor     ebx,edx\r
+        shl     edi,4\r
+        xor     ebx,esi\r
+        shr     ecx,4\r
+        xor     eax,edi\r
+        shr     edx,4\r
+        xor     eax,ecx\r
+        shl     esi,5\r
+        xor     ebx,edx\r
+        shl     edi,5\r
+        xor     eax,esi\r
+        xor     ebx,edi\r
+        mov     ecx,DWORD [48+esp]\r
+        mov     edx,DWORD [52+esp]\r
+        mov     esi,DWORD [56+esp]\r
+        mov     edi,DWORD [60+esp]\r
+        add     eax,DWORD [64+esp]\r
+        adc     ebx,DWORD [68+esp]\r
+        xor     ecx,esi\r
+        xor     edx,edi\r
+        and     ecx,DWORD [40+esp]\r
+        and     edx,DWORD [44+esp]\r
+        add     eax,DWORD [192+esp]\r
+        adc     ebx,DWORD [196+esp]\r
+        xor     ecx,esi\r
+        xor     edx,edi\r
+        mov     esi,DWORD [ebp]\r
+        mov     edi,DWORD [4+ebp]\r
+        add     eax,ecx\r
+        adc     ebx,edx\r
+        mov     ecx,DWORD [32+esp]\r
+        mov     edx,DWORD [36+esp]\r
+        add     eax,esi\r
+        adc     ebx,edi\r
+        mov     DWORD [esp],eax\r
+        mov     DWORD [4+esp],ebx\r
+        add     eax,ecx\r
+        adc     ebx,edx\r
+        mov     ecx,DWORD [8+esp]\r
+        mov     edx,DWORD [12+esp]\r
+        mov     DWORD [32+esp],eax\r
+        mov     DWORD [36+esp],ebx\r
+        mov     esi,ecx\r
+        shr     ecx,2\r
+        mov     edi,edx\r
+        shr     edx,2\r
+        mov     ebx,ecx\r
+        shl     esi,4\r
+        mov     eax,edx\r
+        shl     edi,4\r
+        xor     ebx,esi\r
+        shr     ecx,5\r
+        xor     eax,edi\r
+        shr     edx,5\r
+        xor     ebx,ecx\r
+        shl     esi,21\r
+        xor     eax,edx\r
+        shl     edi,21\r
+        xor     eax,esi\r
+        shr     ecx,21\r
+        xor     ebx,edi\r
+        shr     edx,21\r
+        xor     eax,ecx\r
+        shl     esi,5\r
+        xor     ebx,edx\r
+        shl     edi,5\r
+        xor     eax,esi\r
+        xor     ebx,edi\r
+        mov     ecx,DWORD [8+esp]\r
+        mov     edx,DWORD [12+esp]\r
+        mov     esi,DWORD [16+esp]\r
+        mov     edi,DWORD [20+esp]\r
+        add     eax,DWORD [esp]\r
+        adc     ebx,DWORD [4+esp]\r
+        or      ecx,esi\r
+        or      edx,edi\r
+        and     ecx,DWORD [24+esp]\r
+        and     edx,DWORD [28+esp]\r
+        and     esi,DWORD [8+esp]\r
+        and     edi,DWORD [12+esp]\r
+        or      ecx,esi\r
+        or      edx,edi\r
+        add     eax,ecx\r
+        adc     ebx,edx\r
+        mov     DWORD [esp],eax\r
+        mov     DWORD [4+esp],ebx\r
+        mov     dl,BYTE [ebp]\r
+        sub     esp,8\r
+        lea     ebp,[8+ebp]\r
+        cmp     dl,148\r
+        jne     NEAR L$00300_15_x86\r
+align   16\r
+L$00416_79_x86:\r
+        mov     ecx,DWORD [312+esp]\r
+        mov     edx,DWORD [316+esp]\r
+        mov     esi,ecx\r
+        shr     ecx,1\r
+        mov     edi,edx\r
+        shr     edx,1\r
+        mov     eax,ecx\r
+        shl     esi,24\r
+        mov     ebx,edx\r
+        shl     edi,24\r
+        xor     ebx,esi\r
+        shr     ecx,6\r
+        xor     eax,edi\r
+        shr     edx,6\r
+        xor     eax,ecx\r
+        shl     esi,7\r
+        xor     ebx,edx\r
+        shl     edi,1\r
+        xor     ebx,esi\r
+        shr     ecx,1\r
+        xor     eax,edi\r
+        shr     edx,1\r
+        xor     eax,ecx\r
+        shl     edi,6\r
+        xor     ebx,edx\r
+        xor     eax,edi\r
+        mov     DWORD [esp],eax\r
+        mov     DWORD [4+esp],ebx\r
+        mov     ecx,DWORD [208+esp]\r
+        mov     edx,DWORD [212+esp]\r
+        mov     esi,ecx\r
+        shr     ecx,6\r
+        mov     edi,edx\r
+        shr     edx,6\r
+        mov     eax,ecx\r
+        shl     esi,3\r
+        mov     ebx,edx\r
+        shl     edi,3\r
+        xor     eax,esi\r
+        shr     ecx,13\r
+        xor     ebx,edi\r
+        shr     edx,13\r
+        xor     eax,ecx\r
+        shl     esi,10\r
+        xor     ebx,edx\r
+        shl     edi,10\r
+        xor     ebx,esi\r
+        shr     ecx,10\r
+        xor     eax,edi\r
+        shr     edx,10\r
+        xor     ebx,ecx\r
+        shl     edi,13\r
+        xor     eax,edx\r
+        xor     eax,edi\r
+        mov     ecx,DWORD [320+esp]\r
+        mov     edx,DWORD [324+esp]\r
+        add     eax,DWORD [esp]\r
+        adc     ebx,DWORD [4+esp]\r
+        mov     esi,DWORD [248+esp]\r
+        mov     edi,DWORD [252+esp]\r
+        add     eax,ecx\r
+        adc     ebx,edx\r
+        add     eax,esi\r
+        adc     ebx,edi\r
+        mov     DWORD [192+esp],eax\r
+        mov     DWORD [196+esp],ebx\r
+        mov     ecx,DWORD [40+esp]\r
+        mov     edx,DWORD [44+esp]\r
+        mov     esi,ecx\r
+        shr     ecx,9\r
+        mov     edi,edx\r
+        shr     edx,9\r
+        mov     ebx,ecx\r
+        shl     esi,14\r
+        mov     eax,edx\r
+        shl     edi,14\r
+        xor     ebx,esi\r
+        shr     ecx,5\r
+        xor     eax,edi\r
+        shr     edx,5\r
+        xor     eax,ecx\r
+        shl     esi,4\r
+        xor     ebx,edx\r
+        shl     edi,4\r
+        xor     ebx,esi\r
+        shr     ecx,4\r
+        xor     eax,edi\r
+        shr     edx,4\r
+        xor     eax,ecx\r
+        shl     esi,5\r
+        xor     ebx,edx\r
+        shl     edi,5\r
+        xor     eax,esi\r
+        xor     ebx,edi\r
+        mov     ecx,DWORD [48+esp]\r
+        mov     edx,DWORD [52+esp]\r
+        mov     esi,DWORD [56+esp]\r
+        mov     edi,DWORD [60+esp]\r
+        add     eax,DWORD [64+esp]\r
+        adc     ebx,DWORD [68+esp]\r
+        xor     ecx,esi\r
+        xor     edx,edi\r
+        and     ecx,DWORD [40+esp]\r
+        and     edx,DWORD [44+esp]\r
+        add     eax,DWORD [192+esp]\r
+        adc     ebx,DWORD [196+esp]\r
+        xor     ecx,esi\r
+        xor     edx,edi\r
+        mov     esi,DWORD [ebp]\r
+        mov     edi,DWORD [4+ebp]\r
+        add     eax,ecx\r
+        adc     ebx,edx\r
+        mov     ecx,DWORD [32+esp]\r
+        mov     edx,DWORD [36+esp]\r
+        add     eax,esi\r
+        adc     ebx,edi\r
+        mov     DWORD [esp],eax\r
+        mov     DWORD [4+esp],ebx\r
+        add     eax,ecx\r
+        adc     ebx,edx\r
+        mov     ecx,DWORD [8+esp]\r
+        mov     edx,DWORD [12+esp]\r
+        mov     DWORD [32+esp],eax\r
+        mov     DWORD [36+esp],ebx\r
+        mov     esi,ecx\r
+        shr     ecx,2\r
+        mov     edi,edx\r
+        shr     edx,2\r
+        mov     ebx,ecx\r
+        shl     esi,4\r
+        mov     eax,edx\r
+        shl     edi,4\r
+        xor     ebx,esi\r
+        shr     ecx,5\r
+        xor     eax,edi\r
+        shr     edx,5\r
+        xor     ebx,ecx\r
+        shl     esi,21\r
+        xor     eax,edx\r
+        shl     edi,21\r
+        xor     eax,esi\r
+        shr     ecx,21\r
+        xor     ebx,edi\r
+        shr     edx,21\r
+        xor     eax,ecx\r
+        shl     esi,5\r
+        xor     ebx,edx\r
+        shl     edi,5\r
+        xor     eax,esi\r
+        xor     ebx,edi\r
+        mov     ecx,DWORD [8+esp]\r
+        mov     edx,DWORD [12+esp]\r
+        mov     esi,DWORD [16+esp]\r
+        mov     edi,DWORD [20+esp]\r
+        add     eax,DWORD [esp]\r
+        adc     ebx,DWORD [4+esp]\r
+        or      ecx,esi\r
+        or      edx,edi\r
+        and     ecx,DWORD [24+esp]\r
+        and     edx,DWORD [28+esp]\r
+        and     esi,DWORD [8+esp]\r
+        and     edi,DWORD [12+esp]\r
+        or      ecx,esi\r
+        or      edx,edi\r
+        add     eax,ecx\r
+        adc     ebx,edx\r
+        mov     DWORD [esp],eax\r
+        mov     DWORD [4+esp],ebx\r
+        mov     dl,BYTE [ebp]\r
+        sub     esp,8\r
+        lea     ebp,[8+ebp]\r
+        cmp     dl,23\r
+        jne     NEAR L$00416_79_x86\r
+        mov     esi,DWORD [840+esp]\r
+        mov     edi,DWORD [844+esp]\r
+        mov     eax,DWORD [esi]\r
+        mov     ebx,DWORD [4+esi]\r
+        mov     ecx,DWORD [8+esi]\r
+        mov     edx,DWORD [12+esi]\r
+        add     eax,DWORD [8+esp]\r
+        adc     ebx,DWORD [12+esp]\r
+        mov     DWORD [esi],eax\r
+        mov     DWORD [4+esi],ebx\r
+        add     ecx,DWORD [16+esp]\r
+        adc     edx,DWORD [20+esp]\r
+        mov     DWORD [8+esi],ecx\r
+        mov     DWORD [12+esi],edx\r
+        mov     eax,DWORD [16+esi]\r
+        mov     ebx,DWORD [20+esi]\r
+        mov     ecx,DWORD [24+esi]\r
+        mov     edx,DWORD [28+esi]\r
+        add     eax,DWORD [24+esp]\r
+        adc     ebx,DWORD [28+esp]\r
+        mov     DWORD [16+esi],eax\r
+        mov     DWORD [20+esi],ebx\r
+        add     ecx,DWORD [32+esp]\r
+        adc     edx,DWORD [36+esp]\r
+        mov     DWORD [24+esi],ecx\r
+        mov     DWORD [28+esi],edx\r
+        mov     eax,DWORD [32+esi]\r
+        mov     ebx,DWORD [36+esi]\r
+        mov     ecx,DWORD [40+esi]\r
+        mov     edx,DWORD [44+esi]\r
+        add     eax,DWORD [40+esp]\r
+        adc     ebx,DWORD [44+esp]\r
+        mov     DWORD [32+esi],eax\r
+        mov     DWORD [36+esi],ebx\r
+        add     ecx,DWORD [48+esp]\r
+        adc     edx,DWORD [52+esp]\r
+        mov     DWORD [40+esi],ecx\r
+        mov     DWORD [44+esi],edx\r
+        mov     eax,DWORD [48+esi]\r
+        mov     ebx,DWORD [52+esi]\r
+        mov     ecx,DWORD [56+esi]\r
+        mov     edx,DWORD [60+esi]\r
+        add     eax,DWORD [56+esp]\r
+        adc     ebx,DWORD [60+esp]\r
+        mov     DWORD [48+esi],eax\r
+        mov     DWORD [52+esi],ebx\r
+        add     ecx,DWORD [64+esp]\r
+        adc     edx,DWORD [68+esp]\r
+        mov     DWORD [56+esi],ecx\r
+        mov     DWORD [60+esi],edx\r
+        add     esp,840\r
+        sub     ebp,640\r
+        cmp     edi,DWORD [8+esp]\r
+        jb      NEAR L$002loop_x86\r
+        mov     esp,DWORD [12+esp]\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+align   64\r
+L$001K512:\r
+dd      3609767458,1116352408\r
+dd      602891725,1899447441\r
+dd      3964484399,3049323471\r
+dd      2173295548,3921009573\r
+dd      4081628472,961987163\r
+dd      3053834265,1508970993\r
+dd      2937671579,2453635748\r
+dd      3664609560,2870763221\r
+dd      2734883394,3624381080\r
+dd      1164996542,310598401\r
+dd      1323610764,607225278\r
+dd      3590304994,1426881987\r
+dd      4068182383,1925078388\r
+dd      991336113,2162078206\r
+dd      633803317,2614888103\r
+dd      3479774868,3248222580\r
+dd      2666613458,3835390401\r
+dd      944711139,4022224774\r
+dd      2341262773,264347078\r
+dd      2007800933,604807628\r
+dd      1495990901,770255983\r
+dd      1856431235,1249150122\r
+dd      3175218132,1555081692\r
+dd      2198950837,1996064986\r
+dd      3999719339,2554220882\r
+dd      766784016,2821834349\r
+dd      2566594879,2952996808\r
+dd      3203337956,3210313671\r
+dd      1034457026,3336571891\r
+dd      2466948901,3584528711\r
+dd      3758326383,113926993\r
+dd      168717936,338241895\r
+dd      1188179964,666307205\r
+dd      1546045734,773529912\r
+dd      1522805485,1294757372\r
+dd      2643833823,1396182291\r
+dd      2343527390,1695183700\r
+dd      1014477480,1986661051\r
+dd      1206759142,2177026350\r
+dd      344077627,2456956037\r
+dd      1290863460,2730485921\r
+dd      3158454273,2820302411\r
+dd      3505952657,3259730800\r
+dd      106217008,3345764771\r
+dd      3606008344,3516065817\r
+dd      1432725776,3600352804\r
+dd      1467031594,4094571909\r
+dd      851169720,275423344\r
+dd      3100823752,430227734\r
+dd      1363258195,506948616\r
+dd      3750685593,659060556\r
+dd      3785050280,883997877\r
+dd      3318307427,958139571\r
+dd      3812723403,1322822218\r
+dd      2003034995,1537002063\r
+dd      3602036899,1747873779\r
+dd      1575990012,1955562222\r
+dd      1125592928,2024104815\r
+dd      2716904306,2227730452\r
+dd      442776044,2361852424\r
+dd      593698344,2428436474\r
+dd      3733110249,2756734187\r
+dd      2999351573,3204031479\r
+dd      3815920427,3329325298\r
+dd      3928383900,3391569614\r
+dd      566280711,3515267271\r
+dd      3454069534,3940187606\r
+dd      4000239992,4118630271\r
+dd      1914138554,116418474\r
+dd      2731055270,174292421\r
+dd      3203993006,289380356\r
+dd      320620315,460393269\r
+dd      587496836,685471733\r
+dd      1086792851,852142971\r
+dd      365543100,1017036298\r
+dd      2618297676,1126000580\r
+dd      3409855158,1288033470\r
+dd      4234509866,1501505948\r
+dd      987167468,1607167915\r
+dd      1246189591,1816402316\r
+dd      67438087,66051\r
+dd      202182159,134810123\r
+db      83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97\r
+db      110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32\r
+db      67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97\r
+db      112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103\r
+db      62,0\r
diff --git a/CryptoPkg/Library/OpensslLib/IA32/crypto/x86cpuid.nasm b/CryptoPkg/Library/OpensslLib/IA32/crypto/x86cpuid.nasm
new file mode 100644 (file)
index 0000000..542e759
--- /dev/null
@@ -0,0 +1,433 @@
+; WARNING: do not edit!\r
+; Generated from openssl/crypto/x86cpuid.pl\r
+;\r
+; Copyright 2004-2020 The OpenSSL Project Authors. All Rights Reserved.\r
+;\r
+; Licensed under the OpenSSL license (the "License").  You may not use\r
+; this file except in compliance with the License.  You can obtain a copy\r
+; in the file LICENSE in the source distribution or at\r
+; https://www.openssl.org/source/license.html\r
+\r
+%ifidn __OUTPUT_FORMAT__,obj\r
+section code    use32 class=code align=64\r
+%elifidn __OUTPUT_FORMAT__,win32\r
+$@feat.00 equ 1\r
+section .text   code align=64\r
+%else\r
+section .text   code\r
+%endif\r
+global  _OPENSSL_ia32_cpuid\r
+align   16\r
+_OPENSSL_ia32_cpuid:\r
+L$_OPENSSL_ia32_cpuid_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        xor     edx,edx\r
+        pushfd\r
+        pop     eax\r
+        mov     ecx,eax\r
+        xor     eax,2097152\r
+        push    eax\r
+        popfd\r
+        pushfd\r
+        pop     eax\r
+        xor     ecx,eax\r
+        xor     eax,eax\r
+        mov     esi,DWORD [20+esp]\r
+        mov     DWORD [8+esi],eax\r
+        bt      ecx,21\r
+        jnc     NEAR L$000nocpuid\r
+        cpuid\r
+        mov     edi,eax\r
+        xor     eax,eax\r
+        cmp     ebx,1970169159\r
+        setne   al\r
+        mov     ebp,eax\r
+        cmp     edx,1231384169\r
+        setne   al\r
+        or      ebp,eax\r
+        cmp     ecx,1818588270\r
+        setne   al\r
+        or      ebp,eax\r
+        jz      NEAR L$001intel\r
+        cmp     ebx,1752462657\r
+        setne   al\r
+        mov     esi,eax\r
+        cmp     edx,1769238117\r
+        setne   al\r
+        or      esi,eax\r
+        cmp     ecx,1145913699\r
+        setne   al\r
+        or      esi,eax\r
+        jnz     NEAR L$001intel\r
+        mov     eax,2147483648\r
+        cpuid\r
+        cmp     eax,2147483649\r
+        jb      NEAR L$001intel\r
+        mov     esi,eax\r
+        mov     eax,2147483649\r
+        cpuid\r
+        or      ebp,ecx\r
+        and     ebp,2049\r
+        cmp     esi,2147483656\r
+        jb      NEAR L$001intel\r
+        mov     eax,2147483656\r
+        cpuid\r
+        movzx   esi,cl\r
+        inc     esi\r
+        mov     eax,1\r
+        xor     ecx,ecx\r
+        cpuid\r
+        bt      edx,28\r
+        jnc     NEAR L$002generic\r
+        shr     ebx,16\r
+        and     ebx,255\r
+        cmp     ebx,esi\r
+        ja      NEAR L$002generic\r
+        and     edx,4026531839\r
+        jmp     NEAR L$002generic\r
+L$001intel:\r
+        cmp     edi,4\r
+        mov     esi,-1\r
+        jb      NEAR L$003nocacheinfo\r
+        mov     eax,4\r
+        mov     ecx,0\r
+        cpuid\r
+        mov     esi,eax\r
+        shr     esi,14\r
+        and     esi,4095\r
+L$003nocacheinfo:\r
+        mov     eax,1\r
+        xor     ecx,ecx\r
+        cpuid\r
+        and     edx,3220176895\r
+        cmp     ebp,0\r
+        jne     NEAR L$004notintel\r
+        or      edx,1073741824\r
+        and     ah,15\r
+        cmp     ah,15\r
+        jne     NEAR L$004notintel\r
+        or      edx,1048576\r
+L$004notintel:\r
+        bt      edx,28\r
+        jnc     NEAR L$002generic\r
+        and     edx,4026531839\r
+        cmp     esi,0\r
+        je      NEAR L$002generic\r
+        or      edx,268435456\r
+        shr     ebx,16\r
+        cmp     bl,1\r
+        ja      NEAR L$002generic\r
+        and     edx,4026531839\r
+L$002generic:\r
+        and     ebp,2048\r
+        and     ecx,4294965247\r
+        mov     esi,edx\r
+        or      ebp,ecx\r
+        cmp     edi,7\r
+        mov     edi,DWORD [20+esp]\r
+        jb      NEAR L$005no_extended_info\r
+        mov     eax,7\r
+        xor     ecx,ecx\r
+        cpuid\r
+        mov     DWORD [8+edi],ebx\r
+L$005no_extended_info:\r
+        bt      ebp,27\r
+        jnc     NEAR L$006clear_avx\r
+        xor     ecx,ecx\r
+db      15,1,208\r
+        and     eax,6\r
+        cmp     eax,6\r
+        je      NEAR L$007done\r
+        cmp     eax,2\r
+        je      NEAR L$006clear_avx\r
+L$008clear_xmm:\r
+        and     ebp,4261412861\r
+        and     esi,4278190079\r
+L$006clear_avx:\r
+        and     ebp,4026525695\r
+        and     DWORD [8+edi],4294967263\r
+L$007done:\r
+        mov     eax,esi\r
+        mov     edx,ebp\r
+L$000nocpuid:\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+;extern _OPENSSL_ia32cap_P\r
+global  _OPENSSL_rdtsc\r
+align   16\r
+_OPENSSL_rdtsc:\r
+L$_OPENSSL_rdtsc_begin:\r
+        xor     eax,eax\r
+        xor     edx,edx\r
+        lea     ecx,[_OPENSSL_ia32cap_P]\r
+        bt      DWORD [ecx],4\r
+        jnc     NEAR L$009notsc\r
+        rdtsc\r
+L$009notsc:\r
+        ret\r
+global  _OPENSSL_instrument_halt\r
+align   16\r
+_OPENSSL_instrument_halt:\r
+L$_OPENSSL_instrument_halt_begin:\r
+        lea     ecx,[_OPENSSL_ia32cap_P]\r
+        bt      DWORD [ecx],4\r
+        jnc     NEAR L$010nohalt\r
+dd      2421723150\r
+        and     eax,3\r
+        jnz     NEAR L$010nohalt\r
+        pushfd\r
+        pop     eax\r
+        bt      eax,9\r
+        jnc     NEAR L$010nohalt\r
+        rdtsc\r
+        push    edx\r
+        push    eax\r
+        hlt\r
+        rdtsc\r
+        sub     eax,DWORD [esp]\r
+        sbb     edx,DWORD [4+esp]\r
+        add     esp,8\r
+        ret\r
+L$010nohalt:\r
+        xor     eax,eax\r
+        xor     edx,edx\r
+        ret\r
+global  _OPENSSL_far_spin\r
+align   16\r
+_OPENSSL_far_spin:\r
+L$_OPENSSL_far_spin_begin:\r
+        pushfd\r
+        pop     eax\r
+        bt      eax,9\r
+        jnc     NEAR L$011nospin\r
+        mov     eax,DWORD [4+esp]\r
+        mov     ecx,DWORD [8+esp]\r
+dd      2430111262\r
+        xor     eax,eax\r
+        mov     edx,DWORD [ecx]\r
+        jmp     NEAR L$012spin\r
+align   16\r
+L$012spin:\r
+        inc     eax\r
+        cmp     edx,DWORD [ecx]\r
+        je      NEAR L$012spin\r
+dd      529567888\r
+        ret\r
+L$011nospin:\r
+        xor     eax,eax\r
+        xor     edx,edx\r
+        ret\r
+global  _OPENSSL_wipe_cpu\r
+align   16\r
+_OPENSSL_wipe_cpu:\r
+L$_OPENSSL_wipe_cpu_begin:\r
+        xor     eax,eax\r
+        xor     edx,edx\r
+        lea     ecx,[_OPENSSL_ia32cap_P]\r
+        mov     ecx,DWORD [ecx]\r
+        bt      DWORD [ecx],1\r
+        jnc     NEAR L$013no_x87\r
+dd      4007259865,4007259865,4007259865,4007259865,2430851995\r
+L$013no_x87:\r
+        lea     eax,[4+esp]\r
+        ret\r
+global  _OPENSSL_atomic_add\r
+align   16\r
+_OPENSSL_atomic_add:\r
+L$_OPENSSL_atomic_add_begin:\r
+        mov     edx,DWORD [4+esp]\r
+        mov     ecx,DWORD [8+esp]\r
+        push    ebx\r
+        nop\r
+        mov     eax,DWORD [edx]\r
+L$014spin:\r
+        lea     ebx,[ecx*1+eax]\r
+        nop\r
+dd      447811568\r
+        jne     NEAR L$014spin\r
+        mov     eax,ebx\r
+        pop     ebx\r
+        ret\r
+global  _OPENSSL_cleanse\r
+align   16\r
+_OPENSSL_cleanse:\r
+L$_OPENSSL_cleanse_begin:\r
+        mov     edx,DWORD [4+esp]\r
+        mov     ecx,DWORD [8+esp]\r
+        xor     eax,eax\r
+        cmp     ecx,7\r
+        jae     NEAR L$015lot\r
+        cmp     ecx,0\r
+        je      NEAR L$016ret\r
+L$017little:\r
+        mov     BYTE [edx],al\r
+        sub     ecx,1\r
+        lea     edx,[1+edx]\r
+        jnz     NEAR L$017little\r
+L$016ret:\r
+        ret\r
+align   16\r
+L$015lot:\r
+        test    edx,3\r
+        jz      NEAR L$018aligned\r
+        mov     BYTE [edx],al\r
+        lea     ecx,[ecx-1]\r
+        lea     edx,[1+edx]\r
+        jmp     NEAR L$015lot\r
+L$018aligned:\r
+        mov     DWORD [edx],eax\r
+        lea     ecx,[ecx-4]\r
+        test    ecx,-4\r
+        lea     edx,[4+edx]\r
+        jnz     NEAR L$018aligned\r
+        cmp     ecx,0\r
+        jne     NEAR L$017little\r
+        ret\r
+global  _CRYPTO_memcmp\r
+align   16\r
+_CRYPTO_memcmp:\r
+L$_CRYPTO_memcmp_begin:\r
+        push    esi\r
+        push    edi\r
+        mov     esi,DWORD [12+esp]\r
+        mov     edi,DWORD [16+esp]\r
+        mov     ecx,DWORD [20+esp]\r
+        xor     eax,eax\r
+        xor     edx,edx\r
+        cmp     ecx,0\r
+        je      NEAR L$019no_data\r
+L$020loop:\r
+        mov     dl,BYTE [esi]\r
+        lea     esi,[1+esi]\r
+        xor     dl,BYTE [edi]\r
+        lea     edi,[1+edi]\r
+        or      al,dl\r
+        dec     ecx\r
+        jnz     NEAR L$020loop\r
+        neg     eax\r
+        shr     eax,31\r
+L$019no_data:\r
+        pop     edi\r
+        pop     esi\r
+        ret\r
+global  _OPENSSL_instrument_bus\r
+align   16\r
+_OPENSSL_instrument_bus:\r
+L$_OPENSSL_instrument_bus_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     eax,0\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _OPENSSL_instrument_bus2\r
+align   16\r
+_OPENSSL_instrument_bus2:\r
+L$_OPENSSL_instrument_bus2_begin:\r
+        push    ebp\r
+        push    ebx\r
+        push    esi\r
+        push    edi\r
+        mov     eax,0\r
+        pop     edi\r
+        pop     esi\r
+        pop     ebx\r
+        pop     ebp\r
+        ret\r
+global  _OPENSSL_ia32_rdrand_bytes\r
+align   16\r
+_OPENSSL_ia32_rdrand_bytes:\r
+L$_OPENSSL_ia32_rdrand_bytes_begin:\r
+        push    edi\r
+        push    ebx\r
+        xor     eax,eax\r
+        mov     edi,DWORD [12+esp]\r
+        mov     ebx,DWORD [16+esp]\r
+        cmp     ebx,0\r
+        je      NEAR L$021done\r
+        mov     ecx,8\r
+L$022loop:\r
+db      15,199,242\r
+        jc      NEAR L$023break\r
+        loop    L$022loop\r
+        jmp     NEAR L$021done\r
+align   16\r
+L$023break:\r
+        cmp     ebx,4\r
+        jb      NEAR L$024tail\r
+        mov     DWORD [edi],edx\r
+        lea     edi,[4+edi]\r
+        add     eax,4\r
+        sub     ebx,4\r
+        jz      NEAR L$021done\r
+        mov     ecx,8\r
+        jmp     NEAR L$022loop\r
+align   16\r
+L$024tail:\r
+        mov     BYTE [edi],dl\r
+        lea     edi,[1+edi]\r
+        inc     eax\r
+        shr     edx,8\r
+        dec     ebx\r
+        jnz     NEAR L$024tail\r
+L$021done:\r
+        xor     edx,edx\r
+        pop     ebx\r
+        pop     edi\r
+        ret\r
+global  _OPENSSL_ia32_rdseed_bytes\r
+align   16\r
+_OPENSSL_ia32_rdseed_bytes:\r
+L$_OPENSSL_ia32_rdseed_bytes_begin:\r
+        push    edi\r
+        push    ebx\r
+        xor     eax,eax\r
+        mov     edi,DWORD [12+esp]\r
+        mov     ebx,DWORD [16+esp]\r
+        cmp     ebx,0\r
+        je      NEAR L$025done\r
+        mov     ecx,8\r
+L$026loop:\r
+db      15,199,250\r
+        jc      NEAR L$027break\r
+        loop    L$026loop\r
+        jmp     NEAR L$025done\r
+align   16\r
+L$027break:\r
+        cmp     ebx,4\r
+        jb      NEAR L$028tail\r
+        mov     DWORD [edi],edx\r
+        lea     edi,[4+edi]\r
+        add     eax,4\r
+        sub     ebx,4\r
+        jz      NEAR L$025done\r
+        mov     ecx,8\r
+        jmp     NEAR L$026loop\r
+align   16\r
+L$028tail:\r
+        mov     BYTE [edi],dl\r
+        lea     edi,[1+edi]\r
+        inc     eax\r
+        shr     edx,8\r
+        dec     ebx\r
+        jnz     NEAR L$028tail\r
+L$025done:\r
+        xor     edx,edx\r
+        pop     ebx\r
+        pop     edi\r
+        ret\r
+segment .bss\r
+common  _OPENSSL_ia32cap_P 16\r
+segment .CRT$XCU data align=4\r
+extern  _OPENSSL_cpuid_setup\r
+dd      _OPENSSL_cpuid_setup\r
diff --git a/CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/aes/aesni-x86.S b/CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/aes/aesni-x86.S
new file mode 100644 (file)
index 0000000..836e831
--- /dev/null
@@ -0,0 +1,3247 @@
+# WARNING: do not edit!\r
+# Generated from openssl/crypto/aes/asm/aesni-x86.pl\r
+#\r
+# Copyright 2009-2020 The OpenSSL Project Authors. All Rights Reserved.\r
+#\r
+# Licensed under the OpenSSL license (the "License").  You may not use\r
+# this file except in compliance with the License.  You can obtain a copy\r
+# in the file LICENSE in the source distribution or at\r
+# https://www.openssl.org/source/license.html\r
+\r
+.text\r
+.globl  aesni_encrypt\r
+.type   aesni_encrypt,@function\r
+.align  16\r
+aesni_encrypt:\r
+.L_aesni_encrypt_begin:\r
+        movl    4(%esp),%eax\r
+        movl    12(%esp),%edx\r
+        movups  (%eax),%xmm2\r
+        movl    240(%edx),%ecx\r
+        movl    8(%esp),%eax\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L000enc1_loop_1:\r
+.byte   102,15,56,220,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L000enc1_loop_1\r
+.byte   102,15,56,221,209\r
+        pxor    %xmm0,%xmm0\r
+        pxor    %xmm1,%xmm1\r
+        movups  %xmm2,(%eax)\r
+        pxor    %xmm2,%xmm2\r
+        ret\r
+.size   aesni_encrypt,.-.L_aesni_encrypt_begin\r
+.globl  aesni_decrypt\r
+.type   aesni_decrypt,@function\r
+.align  16\r
+aesni_decrypt:\r
+.L_aesni_decrypt_begin:\r
+        movl    4(%esp),%eax\r
+        movl    12(%esp),%edx\r
+        movups  (%eax),%xmm2\r
+        movl    240(%edx),%ecx\r
+        movl    8(%esp),%eax\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L001dec1_loop_2:\r
+.byte   102,15,56,222,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L001dec1_loop_2\r
+.byte   102,15,56,223,209\r
+        pxor    %xmm0,%xmm0\r
+        pxor    %xmm1,%xmm1\r
+        movups  %xmm2,(%eax)\r
+        pxor    %xmm2,%xmm2\r
+        ret\r
+.size   aesni_decrypt,.-.L_aesni_decrypt_begin\r
+.type   _aesni_encrypt2,@function\r
+.align  16\r
+_aesni_encrypt2:\r
+        movups  (%edx),%xmm0\r
+        shll    $4,%ecx\r
+        movups  16(%edx),%xmm1\r
+        xorps   %xmm0,%xmm2\r
+        pxor    %xmm0,%xmm3\r
+        movups  32(%edx),%xmm0\r
+        leal    32(%edx,%ecx,1),%edx\r
+        negl    %ecx\r
+        addl    $16,%ecx\r
+.L002enc2_loop:\r
+.byte   102,15,56,220,209\r
+.byte   102,15,56,220,217\r
+        movups  (%edx,%ecx,1),%xmm1\r
+        addl    $32,%ecx\r
+.byte   102,15,56,220,208\r
+.byte   102,15,56,220,216\r
+        movups  -16(%edx,%ecx,1),%xmm0\r
+        jnz     .L002enc2_loop\r
+.byte   102,15,56,220,209\r
+.byte   102,15,56,220,217\r
+.byte   102,15,56,221,208\r
+.byte   102,15,56,221,216\r
+        ret\r
+.size   _aesni_encrypt2,.-_aesni_encrypt2\r
+.type   _aesni_decrypt2,@function\r
+.align  16\r
+_aesni_decrypt2:\r
+        movups  (%edx),%xmm0\r
+        shll    $4,%ecx\r
+        movups  16(%edx),%xmm1\r
+        xorps   %xmm0,%xmm2\r
+        pxor    %xmm0,%xmm3\r
+        movups  32(%edx),%xmm0\r
+        leal    32(%edx,%ecx,1),%edx\r
+        negl    %ecx\r
+        addl    $16,%ecx\r
+.L003dec2_loop:\r
+.byte   102,15,56,222,209\r
+.byte   102,15,56,222,217\r
+        movups  (%edx,%ecx,1),%xmm1\r
+        addl    $32,%ecx\r
+.byte   102,15,56,222,208\r
+.byte   102,15,56,222,216\r
+        movups  -16(%edx,%ecx,1),%xmm0\r
+        jnz     .L003dec2_loop\r
+.byte   102,15,56,222,209\r
+.byte   102,15,56,222,217\r
+.byte   102,15,56,223,208\r
+.byte   102,15,56,223,216\r
+        ret\r
+.size   _aesni_decrypt2,.-_aesni_decrypt2\r
+.type   _aesni_encrypt3,@function\r
+.align  16\r
+_aesni_encrypt3:\r
+        movups  (%edx),%xmm0\r
+        shll    $4,%ecx\r
+        movups  16(%edx),%xmm1\r
+        xorps   %xmm0,%xmm2\r
+        pxor    %xmm0,%xmm3\r
+        pxor    %xmm0,%xmm4\r
+        movups  32(%edx),%xmm0\r
+        leal    32(%edx,%ecx,1),%edx\r
+        negl    %ecx\r
+        addl    $16,%ecx\r
+.L004enc3_loop:\r
+.byte   102,15,56,220,209\r
+.byte   102,15,56,220,217\r
+.byte   102,15,56,220,225\r
+        movups  (%edx,%ecx,1),%xmm1\r
+        addl    $32,%ecx\r
+.byte   102,15,56,220,208\r
+.byte   102,15,56,220,216\r
+.byte   102,15,56,220,224\r
+        movups  -16(%edx,%ecx,1),%xmm0\r
+        jnz     .L004enc3_loop\r
+.byte   102,15,56,220,209\r
+.byte   102,15,56,220,217\r
+.byte   102,15,56,220,225\r
+.byte   102,15,56,221,208\r
+.byte   102,15,56,221,216\r
+.byte   102,15,56,221,224\r
+        ret\r
+.size   _aesni_encrypt3,.-_aesni_encrypt3\r
+.type   _aesni_decrypt3,@function\r
+.align  16\r
+_aesni_decrypt3:\r
+        movups  (%edx),%xmm0\r
+        shll    $4,%ecx\r
+        movups  16(%edx),%xmm1\r
+        xorps   %xmm0,%xmm2\r
+        pxor    %xmm0,%xmm3\r
+        pxor    %xmm0,%xmm4\r
+        movups  32(%edx),%xmm0\r
+        leal    32(%edx,%ecx,1),%edx\r
+        negl    %ecx\r
+        addl    $16,%ecx\r
+.L005dec3_loop:\r
+.byte   102,15,56,222,209\r
+.byte   102,15,56,222,217\r
+.byte   102,15,56,222,225\r
+        movups  (%edx,%ecx,1),%xmm1\r
+        addl    $32,%ecx\r
+.byte   102,15,56,222,208\r
+.byte   102,15,56,222,216\r
+.byte   102,15,56,222,224\r
+        movups  -16(%edx,%ecx,1),%xmm0\r
+        jnz     .L005dec3_loop\r
+.byte   102,15,56,222,209\r
+.byte   102,15,56,222,217\r
+.byte   102,15,56,222,225\r
+.byte   102,15,56,223,208\r
+.byte   102,15,56,223,216\r
+.byte   102,15,56,223,224\r
+        ret\r
+.size   _aesni_decrypt3,.-_aesni_decrypt3\r
+.type   _aesni_encrypt4,@function\r
+.align  16\r
+_aesni_encrypt4:\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        shll    $4,%ecx\r
+        xorps   %xmm0,%xmm2\r
+        pxor    %xmm0,%xmm3\r
+        pxor    %xmm0,%xmm4\r
+        pxor    %xmm0,%xmm5\r
+        movups  32(%edx),%xmm0\r
+        leal    32(%edx,%ecx,1),%edx\r
+        negl    %ecx\r
+.byte   15,31,64,0\r
+        addl    $16,%ecx\r
+.L006enc4_loop:\r
+.byte   102,15,56,220,209\r
+.byte   102,15,56,220,217\r
+.byte   102,15,56,220,225\r
+.byte   102,15,56,220,233\r
+        movups  (%edx,%ecx,1),%xmm1\r
+        addl    $32,%ecx\r
+.byte   102,15,56,220,208\r
+.byte   102,15,56,220,216\r
+.byte   102,15,56,220,224\r
+.byte   102,15,56,220,232\r
+        movups  -16(%edx,%ecx,1),%xmm0\r
+        jnz     .L006enc4_loop\r
+.byte   102,15,56,220,209\r
+.byte   102,15,56,220,217\r
+.byte   102,15,56,220,225\r
+.byte   102,15,56,220,233\r
+.byte   102,15,56,221,208\r
+.byte   102,15,56,221,216\r
+.byte   102,15,56,221,224\r
+.byte   102,15,56,221,232\r
+        ret\r
+.size   _aesni_encrypt4,.-_aesni_encrypt4\r
+.type   _aesni_decrypt4,@function\r
+.align  16\r
+_aesni_decrypt4:\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        shll    $4,%ecx\r
+        xorps   %xmm0,%xmm2\r
+        pxor    %xmm0,%xmm3\r
+        pxor    %xmm0,%xmm4\r
+        pxor    %xmm0,%xmm5\r
+        movups  32(%edx),%xmm0\r
+        leal    32(%edx,%ecx,1),%edx\r
+        negl    %ecx\r
+.byte   15,31,64,0\r
+        addl    $16,%ecx\r
+.L007dec4_loop:\r
+.byte   102,15,56,222,209\r
+.byte   102,15,56,222,217\r
+.byte   102,15,56,222,225\r
+.byte   102,15,56,222,233\r
+        movups  (%edx,%ecx,1),%xmm1\r
+        addl    $32,%ecx\r
+.byte   102,15,56,222,208\r
+.byte   102,15,56,222,216\r
+.byte   102,15,56,222,224\r
+.byte   102,15,56,222,232\r
+        movups  -16(%edx,%ecx,1),%xmm0\r
+        jnz     .L007dec4_loop\r
+.byte   102,15,56,222,209\r
+.byte   102,15,56,222,217\r
+.byte   102,15,56,222,225\r
+.byte   102,15,56,222,233\r
+.byte   102,15,56,223,208\r
+.byte   102,15,56,223,216\r
+.byte   102,15,56,223,224\r
+.byte   102,15,56,223,232\r
+        ret\r
+.size   _aesni_decrypt4,.-_aesni_decrypt4\r
+.type   _aesni_encrypt6,@function\r
+.align  16\r
+_aesni_encrypt6:\r
+        movups  (%edx),%xmm0\r
+        shll    $4,%ecx\r
+        movups  16(%edx),%xmm1\r
+        xorps   %xmm0,%xmm2\r
+        pxor    %xmm0,%xmm3\r
+        pxor    %xmm0,%xmm4\r
+.byte   102,15,56,220,209\r
+        pxor    %xmm0,%xmm5\r
+        pxor    %xmm0,%xmm6\r
+.byte   102,15,56,220,217\r
+        leal    32(%edx,%ecx,1),%edx\r
+        negl    %ecx\r
+.byte   102,15,56,220,225\r
+        pxor    %xmm0,%xmm7\r
+        movups  (%edx,%ecx,1),%xmm0\r
+        addl    $16,%ecx\r
+        jmp     .L008_aesni_encrypt6_inner\r
+.align  16\r
+.L009enc6_loop:\r
+.byte   102,15,56,220,209\r
+.byte   102,15,56,220,217\r
+.byte   102,15,56,220,225\r
+.L008_aesni_encrypt6_inner:\r
+.byte   102,15,56,220,233\r
+.byte   102,15,56,220,241\r
+.byte   102,15,56,220,249\r
+.L_aesni_encrypt6_enter:\r
+        movups  (%edx,%ecx,1),%xmm1\r
+        addl    $32,%ecx\r
+.byte   102,15,56,220,208\r
+.byte   102,15,56,220,216\r
+.byte   102,15,56,220,224\r
+.byte   102,15,56,220,232\r
+.byte   102,15,56,220,240\r
+.byte   102,15,56,220,248\r
+        movups  -16(%edx,%ecx,1),%xmm0\r
+        jnz     .L009enc6_loop\r
+.byte   102,15,56,220,209\r
+.byte   102,15,56,220,217\r
+.byte   102,15,56,220,225\r
+.byte   102,15,56,220,233\r
+.byte   102,15,56,220,241\r
+.byte   102,15,56,220,249\r
+.byte   102,15,56,221,208\r
+.byte   102,15,56,221,216\r
+.byte   102,15,56,221,224\r
+.byte   102,15,56,221,232\r
+.byte   102,15,56,221,240\r
+.byte   102,15,56,221,248\r
+        ret\r
+.size   _aesni_encrypt6,.-_aesni_encrypt6\r
+.type   _aesni_decrypt6,@function\r
+.align  16\r
+_aesni_decrypt6:\r
+        movups  (%edx),%xmm0\r
+        shll    $4,%ecx\r
+        movups  16(%edx),%xmm1\r
+        xorps   %xmm0,%xmm2\r
+        pxor    %xmm0,%xmm3\r
+        pxor    %xmm0,%xmm4\r
+.byte   102,15,56,222,209\r
+        pxor    %xmm0,%xmm5\r
+        pxor    %xmm0,%xmm6\r
+.byte   102,15,56,222,217\r
+        leal    32(%edx,%ecx,1),%edx\r
+        negl    %ecx\r
+.byte   102,15,56,222,225\r
+        pxor    %xmm0,%xmm7\r
+        movups  (%edx,%ecx,1),%xmm0\r
+        addl    $16,%ecx\r
+        jmp     .L010_aesni_decrypt6_inner\r
+.align  16\r
+.L011dec6_loop:\r
+.byte   102,15,56,222,209\r
+.byte   102,15,56,222,217\r
+.byte   102,15,56,222,225\r
+.L010_aesni_decrypt6_inner:\r
+.byte   102,15,56,222,233\r
+.byte   102,15,56,222,241\r
+.byte   102,15,56,222,249\r
+.L_aesni_decrypt6_enter:\r
+        movups  (%edx,%ecx,1),%xmm1\r
+        addl    $32,%ecx\r
+.byte   102,15,56,222,208\r
+.byte   102,15,56,222,216\r
+.byte   102,15,56,222,224\r
+.byte   102,15,56,222,232\r
+.byte   102,15,56,222,240\r
+.byte   102,15,56,222,248\r
+        movups  -16(%edx,%ecx,1),%xmm0\r
+        jnz     .L011dec6_loop\r
+.byte   102,15,56,222,209\r
+.byte   102,15,56,222,217\r
+.byte   102,15,56,222,225\r
+.byte   102,15,56,222,233\r
+.byte   102,15,56,222,241\r
+.byte   102,15,56,222,249\r
+.byte   102,15,56,223,208\r
+.byte   102,15,56,223,216\r
+.byte   102,15,56,223,224\r
+.byte   102,15,56,223,232\r
+.byte   102,15,56,223,240\r
+.byte   102,15,56,223,248\r
+        ret\r
+.size   _aesni_decrypt6,.-_aesni_decrypt6\r
+.globl  aesni_ecb_encrypt\r
+.type   aesni_ecb_encrypt,@function\r
+.align  16\r
+aesni_ecb_encrypt:\r
+.L_aesni_ecb_encrypt_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    20(%esp),%esi\r
+        movl    24(%esp),%edi\r
+        movl    28(%esp),%eax\r
+        movl    32(%esp),%edx\r
+        movl    36(%esp),%ebx\r
+        andl    $-16,%eax\r
+        jz      .L012ecb_ret\r
+        movl    240(%edx),%ecx\r
+        testl   %ebx,%ebx\r
+        jz      .L013ecb_decrypt\r
+        movl    %edx,%ebp\r
+        movl    %ecx,%ebx\r
+        cmpl    $96,%eax\r
+        jb      .L014ecb_enc_tail\r
+        movdqu  (%esi),%xmm2\r
+        movdqu  16(%esi),%xmm3\r
+        movdqu  32(%esi),%xmm4\r
+        movdqu  48(%esi),%xmm5\r
+        movdqu  64(%esi),%xmm6\r
+        movdqu  80(%esi),%xmm7\r
+        leal    96(%esi),%esi\r
+        subl    $96,%eax\r
+        jmp     .L015ecb_enc_loop6_enter\r
+.align  16\r
+.L016ecb_enc_loop6:\r
+        movups  %xmm2,(%edi)\r
+        movdqu  (%esi),%xmm2\r
+        movups  %xmm3,16(%edi)\r
+        movdqu  16(%esi),%xmm3\r
+        movups  %xmm4,32(%edi)\r
+        movdqu  32(%esi),%xmm4\r
+        movups  %xmm5,48(%edi)\r
+        movdqu  48(%esi),%xmm5\r
+        movups  %xmm6,64(%edi)\r
+        movdqu  64(%esi),%xmm6\r
+        movups  %xmm7,80(%edi)\r
+        leal    96(%edi),%edi\r
+        movdqu  80(%esi),%xmm7\r
+        leal    96(%esi),%esi\r
+.L015ecb_enc_loop6_enter:\r
+        call    _aesni_encrypt6\r
+        movl    %ebp,%edx\r
+        movl    %ebx,%ecx\r
+        subl    $96,%eax\r
+        jnc     .L016ecb_enc_loop6\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        movups  %xmm5,48(%edi)\r
+        movups  %xmm6,64(%edi)\r
+        movups  %xmm7,80(%edi)\r
+        leal    96(%edi),%edi\r
+        addl    $96,%eax\r
+        jz      .L012ecb_ret\r
+.L014ecb_enc_tail:\r
+        movups  (%esi),%xmm2\r
+        cmpl    $32,%eax\r
+        jb      .L017ecb_enc_one\r
+        movups  16(%esi),%xmm3\r
+        je      .L018ecb_enc_two\r
+        movups  32(%esi),%xmm4\r
+        cmpl    $64,%eax\r
+        jb      .L019ecb_enc_three\r
+        movups  48(%esi),%xmm5\r
+        je      .L020ecb_enc_four\r
+        movups  64(%esi),%xmm6\r
+        xorps   %xmm7,%xmm7\r
+        call    _aesni_encrypt6\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        movups  %xmm5,48(%edi)\r
+        movups  %xmm6,64(%edi)\r
+        jmp     .L012ecb_ret\r
+.align  16\r
+.L017ecb_enc_one:\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L021enc1_loop_3:\r
+.byte   102,15,56,220,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L021enc1_loop_3\r
+.byte   102,15,56,221,209\r
+        movups  %xmm2,(%edi)\r
+        jmp     .L012ecb_ret\r
+.align  16\r
+.L018ecb_enc_two:\r
+        call    _aesni_encrypt2\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        jmp     .L012ecb_ret\r
+.align  16\r
+.L019ecb_enc_three:\r
+        call    _aesni_encrypt3\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        jmp     .L012ecb_ret\r
+.align  16\r
+.L020ecb_enc_four:\r
+        call    _aesni_encrypt4\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        movups  %xmm5,48(%edi)\r
+        jmp     .L012ecb_ret\r
+.align  16\r
+.L013ecb_decrypt:\r
+        movl    %edx,%ebp\r
+        movl    %ecx,%ebx\r
+        cmpl    $96,%eax\r
+        jb      .L022ecb_dec_tail\r
+        movdqu  (%esi),%xmm2\r
+        movdqu  16(%esi),%xmm3\r
+        movdqu  32(%esi),%xmm4\r
+        movdqu  48(%esi),%xmm5\r
+        movdqu  64(%esi),%xmm6\r
+        movdqu  80(%esi),%xmm7\r
+        leal    96(%esi),%esi\r
+        subl    $96,%eax\r
+        jmp     .L023ecb_dec_loop6_enter\r
+.align  16\r
+.L024ecb_dec_loop6:\r
+        movups  %xmm2,(%edi)\r
+        movdqu  (%esi),%xmm2\r
+        movups  %xmm3,16(%edi)\r
+        movdqu  16(%esi),%xmm3\r
+        movups  %xmm4,32(%edi)\r
+        movdqu  32(%esi),%xmm4\r
+        movups  %xmm5,48(%edi)\r
+        movdqu  48(%esi),%xmm5\r
+        movups  %xmm6,64(%edi)\r
+        movdqu  64(%esi),%xmm6\r
+        movups  %xmm7,80(%edi)\r
+        leal    96(%edi),%edi\r
+        movdqu  80(%esi),%xmm7\r
+        leal    96(%esi),%esi\r
+.L023ecb_dec_loop6_enter:\r
+        call    _aesni_decrypt6\r
+        movl    %ebp,%edx\r
+        movl    %ebx,%ecx\r
+        subl    $96,%eax\r
+        jnc     .L024ecb_dec_loop6\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        movups  %xmm5,48(%edi)\r
+        movups  %xmm6,64(%edi)\r
+        movups  %xmm7,80(%edi)\r
+        leal    96(%edi),%edi\r
+        addl    $96,%eax\r
+        jz      .L012ecb_ret\r
+.L022ecb_dec_tail:\r
+        movups  (%esi),%xmm2\r
+        cmpl    $32,%eax\r
+        jb      .L025ecb_dec_one\r
+        movups  16(%esi),%xmm3\r
+        je      .L026ecb_dec_two\r
+        movups  32(%esi),%xmm4\r
+        cmpl    $64,%eax\r
+        jb      .L027ecb_dec_three\r
+        movups  48(%esi),%xmm5\r
+        je      .L028ecb_dec_four\r
+        movups  64(%esi),%xmm6\r
+        xorps   %xmm7,%xmm7\r
+        call    _aesni_decrypt6\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        movups  %xmm5,48(%edi)\r
+        movups  %xmm6,64(%edi)\r
+        jmp     .L012ecb_ret\r
+.align  16\r
+.L025ecb_dec_one:\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L029dec1_loop_4:\r
+.byte   102,15,56,222,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L029dec1_loop_4\r
+.byte   102,15,56,223,209\r
+        movups  %xmm2,(%edi)\r
+        jmp     .L012ecb_ret\r
+.align  16\r
+.L026ecb_dec_two:\r
+        call    _aesni_decrypt2\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        jmp     .L012ecb_ret\r
+.align  16\r
+.L027ecb_dec_three:\r
+        call    _aesni_decrypt3\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        jmp     .L012ecb_ret\r
+.align  16\r
+.L028ecb_dec_four:\r
+        call    _aesni_decrypt4\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        movups  %xmm5,48(%edi)\r
+.L012ecb_ret:\r
+        pxor    %xmm0,%xmm0\r
+        pxor    %xmm1,%xmm1\r
+        pxor    %xmm2,%xmm2\r
+        pxor    %xmm3,%xmm3\r
+        pxor    %xmm4,%xmm4\r
+        pxor    %xmm5,%xmm5\r
+        pxor    %xmm6,%xmm6\r
+        pxor    %xmm7,%xmm7\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   aesni_ecb_encrypt,.-.L_aesni_ecb_encrypt_begin\r
+.globl  aesni_ccm64_encrypt_blocks\r
+.type   aesni_ccm64_encrypt_blocks,@function\r
+.align  16\r
+aesni_ccm64_encrypt_blocks:\r
+.L_aesni_ccm64_encrypt_blocks_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    20(%esp),%esi\r
+        movl    24(%esp),%edi\r
+        movl    28(%esp),%eax\r
+        movl    32(%esp),%edx\r
+        movl    36(%esp),%ebx\r
+        movl    40(%esp),%ecx\r
+        movl    %esp,%ebp\r
+        subl    $60,%esp\r
+        andl    $-16,%esp\r
+        movl    %ebp,48(%esp)\r
+        movdqu  (%ebx),%xmm7\r
+        movdqu  (%ecx),%xmm3\r
+        movl    240(%edx),%ecx\r
+        movl    $202182159,(%esp)\r
+        movl    $134810123,4(%esp)\r
+        movl    $67438087,8(%esp)\r
+        movl    $66051,12(%esp)\r
+        movl    $1,%ebx\r
+        xorl    %ebp,%ebp\r
+        movl    %ebx,16(%esp)\r
+        movl    %ebp,20(%esp)\r
+        movl    %ebp,24(%esp)\r
+        movl    %ebp,28(%esp)\r
+        shll    $4,%ecx\r
+        movl    $16,%ebx\r
+        leal    (%edx),%ebp\r
+        movdqa  (%esp),%xmm5\r
+        movdqa  %xmm7,%xmm2\r
+        leal    32(%edx,%ecx,1),%edx\r
+        subl    %ecx,%ebx\r
+.byte   102,15,56,0,253\r
+.L030ccm64_enc_outer:\r
+        movups  (%ebp),%xmm0\r
+        movl    %ebx,%ecx\r
+        movups  (%esi),%xmm6\r
+        xorps   %xmm0,%xmm2\r
+        movups  16(%ebp),%xmm1\r
+        xorps   %xmm6,%xmm0\r
+        xorps   %xmm0,%xmm3\r
+        movups  32(%ebp),%xmm0\r
+.L031ccm64_enc2_loop:\r
+.byte   102,15,56,220,209\r
+.byte   102,15,56,220,217\r
+        movups  (%edx,%ecx,1),%xmm1\r
+        addl    $32,%ecx\r
+.byte   102,15,56,220,208\r
+.byte   102,15,56,220,216\r
+        movups  -16(%edx,%ecx,1),%xmm0\r
+        jnz     .L031ccm64_enc2_loop\r
+.byte   102,15,56,220,209\r
+.byte   102,15,56,220,217\r
+        paddq   16(%esp),%xmm7\r
+        decl    %eax\r
+.byte   102,15,56,221,208\r
+.byte   102,15,56,221,216\r
+        leal    16(%esi),%esi\r
+        xorps   %xmm2,%xmm6\r
+        movdqa  %xmm7,%xmm2\r
+        movups  %xmm6,(%edi)\r
+.byte   102,15,56,0,213\r
+        leal    16(%edi),%edi\r
+        jnz     .L030ccm64_enc_outer\r
+        movl    48(%esp),%esp\r
+        movl    40(%esp),%edi\r
+        movups  %xmm3,(%edi)\r
+        pxor    %xmm0,%xmm0\r
+        pxor    %xmm1,%xmm1\r
+        pxor    %xmm2,%xmm2\r
+        pxor    %xmm3,%xmm3\r
+        pxor    %xmm4,%xmm4\r
+        pxor    %xmm5,%xmm5\r
+        pxor    %xmm6,%xmm6\r
+        pxor    %xmm7,%xmm7\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   aesni_ccm64_encrypt_blocks,.-.L_aesni_ccm64_encrypt_blocks_begin\r
+.globl  aesni_ccm64_decrypt_blocks\r
+.type   aesni_ccm64_decrypt_blocks,@function\r
+.align  16\r
+aesni_ccm64_decrypt_blocks:\r
+.L_aesni_ccm64_decrypt_blocks_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    20(%esp),%esi\r
+        movl    24(%esp),%edi\r
+        movl    28(%esp),%eax\r
+        movl    32(%esp),%edx\r
+        movl    36(%esp),%ebx\r
+        movl    40(%esp),%ecx\r
+        movl    %esp,%ebp\r
+        subl    $60,%esp\r
+        andl    $-16,%esp\r
+        movl    %ebp,48(%esp)\r
+        movdqu  (%ebx),%xmm7\r
+        movdqu  (%ecx),%xmm3\r
+        movl    240(%edx),%ecx\r
+        movl    $202182159,(%esp)\r
+        movl    $134810123,4(%esp)\r
+        movl    $67438087,8(%esp)\r
+        movl    $66051,12(%esp)\r
+        movl    $1,%ebx\r
+        xorl    %ebp,%ebp\r
+        movl    %ebx,16(%esp)\r
+        movl    %ebp,20(%esp)\r
+        movl    %ebp,24(%esp)\r
+        movl    %ebp,28(%esp)\r
+        movdqa  (%esp),%xmm5\r
+        movdqa  %xmm7,%xmm2\r
+        movl    %edx,%ebp\r
+        movl    %ecx,%ebx\r
+.byte   102,15,56,0,253\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L032enc1_loop_5:\r
+.byte   102,15,56,220,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L032enc1_loop_5\r
+.byte   102,15,56,221,209\r
+        shll    $4,%ebx\r
+        movl    $16,%ecx\r
+        movups  (%esi),%xmm6\r
+        paddq   16(%esp),%xmm7\r
+        leal    16(%esi),%esi\r
+        subl    %ebx,%ecx\r
+        leal    32(%ebp,%ebx,1),%edx\r
+        movl    %ecx,%ebx\r
+        jmp     .L033ccm64_dec_outer\r
+.align  16\r
+.L033ccm64_dec_outer:\r
+        xorps   %xmm2,%xmm6\r
+        movdqa  %xmm7,%xmm2\r
+        movups  %xmm6,(%edi)\r
+        leal    16(%edi),%edi\r
+.byte   102,15,56,0,213\r
+        subl    $1,%eax\r
+        jz      .L034ccm64_dec_break\r
+        movups  (%ebp),%xmm0\r
+        movl    %ebx,%ecx\r
+        movups  16(%ebp),%xmm1\r
+        xorps   %xmm0,%xmm6\r
+        xorps   %xmm0,%xmm2\r
+        xorps   %xmm6,%xmm3\r
+        movups  32(%ebp),%xmm0\r
+.L035ccm64_dec2_loop:\r
+.byte   102,15,56,220,209\r
+.byte   102,15,56,220,217\r
+        movups  (%edx,%ecx,1),%xmm1\r
+        addl    $32,%ecx\r
+.byte   102,15,56,220,208\r
+.byte   102,15,56,220,216\r
+        movups  -16(%edx,%ecx,1),%xmm0\r
+        jnz     .L035ccm64_dec2_loop\r
+        movups  (%esi),%xmm6\r
+        paddq   16(%esp),%xmm7\r
+.byte   102,15,56,220,209\r
+.byte   102,15,56,220,217\r
+.byte   102,15,56,221,208\r
+.byte   102,15,56,221,216\r
+        leal    16(%esi),%esi\r
+        jmp     .L033ccm64_dec_outer\r
+.align  16\r
+.L034ccm64_dec_break:\r
+        movl    240(%ebp),%ecx\r
+        movl    %ebp,%edx\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        xorps   %xmm0,%xmm6\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm6,%xmm3\r
+.L036enc1_loop_6:\r
+.byte   102,15,56,220,217\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L036enc1_loop_6\r
+.byte   102,15,56,221,217\r
+        movl    48(%esp),%esp\r
+        movl    40(%esp),%edi\r
+        movups  %xmm3,(%edi)\r
+        pxor    %xmm0,%xmm0\r
+        pxor    %xmm1,%xmm1\r
+        pxor    %xmm2,%xmm2\r
+        pxor    %xmm3,%xmm3\r
+        pxor    %xmm4,%xmm4\r
+        pxor    %xmm5,%xmm5\r
+        pxor    %xmm6,%xmm6\r
+        pxor    %xmm7,%xmm7\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   aesni_ccm64_decrypt_blocks,.-.L_aesni_ccm64_decrypt_blocks_begin\r
+.globl  aesni_ctr32_encrypt_blocks\r
+.type   aesni_ctr32_encrypt_blocks,@function\r
+.align  16\r
+aesni_ctr32_encrypt_blocks:\r
+.L_aesni_ctr32_encrypt_blocks_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    20(%esp),%esi\r
+        movl    24(%esp),%edi\r
+        movl    28(%esp),%eax\r
+        movl    32(%esp),%edx\r
+        movl    36(%esp),%ebx\r
+        movl    %esp,%ebp\r
+        subl    $88,%esp\r
+        andl    $-16,%esp\r
+        movl    %ebp,80(%esp)\r
+        cmpl    $1,%eax\r
+        je      .L037ctr32_one_shortcut\r
+        movdqu  (%ebx),%xmm7\r
+        movl    $202182159,(%esp)\r
+        movl    $134810123,4(%esp)\r
+        movl    $67438087,8(%esp)\r
+        movl    $66051,12(%esp)\r
+        movl    $6,%ecx\r
+        xorl    %ebp,%ebp\r
+        movl    %ecx,16(%esp)\r
+        movl    %ecx,20(%esp)\r
+        movl    %ecx,24(%esp)\r
+        movl    %ebp,28(%esp)\r
+.byte   102,15,58,22,251,3\r
+.byte   102,15,58,34,253,3\r
+        movl    240(%edx),%ecx\r
+        bswap   %ebx\r
+        pxor    %xmm0,%xmm0\r
+        pxor    %xmm1,%xmm1\r
+        movdqa  (%esp),%xmm2\r
+.byte   102,15,58,34,195,0\r
+        leal    3(%ebx),%ebp\r
+.byte   102,15,58,34,205,0\r
+        incl    %ebx\r
+.byte   102,15,58,34,195,1\r
+        incl    %ebp\r
+.byte   102,15,58,34,205,1\r
+        incl    %ebx\r
+.byte   102,15,58,34,195,2\r
+        incl    %ebp\r
+.byte   102,15,58,34,205,2\r
+        movdqa  %xmm0,48(%esp)\r
+.byte   102,15,56,0,194\r
+        movdqu  (%edx),%xmm6\r
+        movdqa  %xmm1,64(%esp)\r
+.byte   102,15,56,0,202\r
+        pshufd  $192,%xmm0,%xmm2\r
+        pshufd  $128,%xmm0,%xmm3\r
+        cmpl    $6,%eax\r
+        jb      .L038ctr32_tail\r
+        pxor    %xmm6,%xmm7\r
+        shll    $4,%ecx\r
+        movl    $16,%ebx\r
+        movdqa  %xmm7,32(%esp)\r
+        movl    %edx,%ebp\r
+        subl    %ecx,%ebx\r
+        leal    32(%edx,%ecx,1),%edx\r
+        subl    $6,%eax\r
+        jmp     .L039ctr32_loop6\r
+.align  16\r
+.L039ctr32_loop6:\r
+        pshufd  $64,%xmm0,%xmm4\r
+        movdqa  32(%esp),%xmm0\r
+        pshufd  $192,%xmm1,%xmm5\r
+        pxor    %xmm0,%xmm2\r
+        pshufd  $128,%xmm1,%xmm6\r
+        pxor    %xmm0,%xmm3\r
+        pshufd  $64,%xmm1,%xmm7\r
+        movups  16(%ebp),%xmm1\r
+        pxor    %xmm0,%xmm4\r
+        pxor    %xmm0,%xmm5\r
+.byte   102,15,56,220,209\r
+        pxor    %xmm0,%xmm6\r
+        pxor    %xmm0,%xmm7\r
+.byte   102,15,56,220,217\r
+        movups  32(%ebp),%xmm0\r
+        movl    %ebx,%ecx\r
+.byte   102,15,56,220,225\r
+.byte   102,15,56,220,233\r
+.byte   102,15,56,220,241\r
+.byte   102,15,56,220,249\r
+        call    .L_aesni_encrypt6_enter\r
+        movups  (%esi),%xmm1\r
+        movups  16(%esi),%xmm0\r
+        xorps   %xmm1,%xmm2\r
+        movups  32(%esi),%xmm1\r
+        xorps   %xmm0,%xmm3\r
+        movups  %xmm2,(%edi)\r
+        movdqa  16(%esp),%xmm0\r
+        xorps   %xmm1,%xmm4\r
+        movdqa  64(%esp),%xmm1\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        paddd   %xmm0,%xmm1\r
+        paddd   48(%esp),%xmm0\r
+        movdqa  (%esp),%xmm2\r
+        movups  48(%esi),%xmm3\r
+        movups  64(%esi),%xmm4\r
+        xorps   %xmm3,%xmm5\r
+        movups  80(%esi),%xmm3\r
+        leal    96(%esi),%esi\r
+        movdqa  %xmm0,48(%esp)\r
+.byte   102,15,56,0,194\r
+        xorps   %xmm4,%xmm6\r
+        movups  %xmm5,48(%edi)\r
+        xorps   %xmm3,%xmm7\r
+        movdqa  %xmm1,64(%esp)\r
+.byte   102,15,56,0,202\r
+        movups  %xmm6,64(%edi)\r
+        pshufd  $192,%xmm0,%xmm2\r
+        movups  %xmm7,80(%edi)\r
+        leal    96(%edi),%edi\r
+        pshufd  $128,%xmm0,%xmm3\r
+        subl    $6,%eax\r
+        jnc     .L039ctr32_loop6\r
+        addl    $6,%eax\r
+        jz      .L040ctr32_ret\r
+        movdqu  (%ebp),%xmm7\r
+        movl    %ebp,%edx\r
+        pxor    32(%esp),%xmm7\r
+        movl    240(%ebp),%ecx\r
+.L038ctr32_tail:\r
+        por     %xmm7,%xmm2\r
+        cmpl    $2,%eax\r
+        jb      .L041ctr32_one\r
+        pshufd  $64,%xmm0,%xmm4\r
+        por     %xmm7,%xmm3\r
+        je      .L042ctr32_two\r
+        pshufd  $192,%xmm1,%xmm5\r
+        por     %xmm7,%xmm4\r
+        cmpl    $4,%eax\r
+        jb      .L043ctr32_three\r
+        pshufd  $128,%xmm1,%xmm6\r
+        por     %xmm7,%xmm5\r
+        je      .L044ctr32_four\r
+        por     %xmm7,%xmm6\r
+        call    _aesni_encrypt6\r
+        movups  (%esi),%xmm1\r
+        movups  16(%esi),%xmm0\r
+        xorps   %xmm1,%xmm2\r
+        movups  32(%esi),%xmm1\r
+        xorps   %xmm0,%xmm3\r
+        movups  48(%esi),%xmm0\r
+        xorps   %xmm1,%xmm4\r
+        movups  64(%esi),%xmm1\r
+        xorps   %xmm0,%xmm5\r
+        movups  %xmm2,(%edi)\r
+        xorps   %xmm1,%xmm6\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        movups  %xmm5,48(%edi)\r
+        movups  %xmm6,64(%edi)\r
+        jmp     .L040ctr32_ret\r
+.align  16\r
+.L037ctr32_one_shortcut:\r
+        movups  (%ebx),%xmm2\r
+        movl    240(%edx),%ecx\r
+.L041ctr32_one:\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L045enc1_loop_7:\r
+.byte   102,15,56,220,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L045enc1_loop_7\r
+.byte   102,15,56,221,209\r
+        movups  (%esi),%xmm6\r
+        xorps   %xmm2,%xmm6\r
+        movups  %xmm6,(%edi)\r
+        jmp     .L040ctr32_ret\r
+.align  16\r
+.L042ctr32_two:\r
+        call    _aesni_encrypt2\r
+        movups  (%esi),%xmm5\r
+        movups  16(%esi),%xmm6\r
+        xorps   %xmm5,%xmm2\r
+        xorps   %xmm6,%xmm3\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        jmp     .L040ctr32_ret\r
+.align  16\r
+.L043ctr32_three:\r
+        call    _aesni_encrypt3\r
+        movups  (%esi),%xmm5\r
+        movups  16(%esi),%xmm6\r
+        xorps   %xmm5,%xmm2\r
+        movups  32(%esi),%xmm7\r
+        xorps   %xmm6,%xmm3\r
+        movups  %xmm2,(%edi)\r
+        xorps   %xmm7,%xmm4\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        jmp     .L040ctr32_ret\r
+.align  16\r
+.L044ctr32_four:\r
+        call    _aesni_encrypt4\r
+        movups  (%esi),%xmm6\r
+        movups  16(%esi),%xmm7\r
+        movups  32(%esi),%xmm1\r
+        xorps   %xmm6,%xmm2\r
+        movups  48(%esi),%xmm0\r
+        xorps   %xmm7,%xmm3\r
+        movups  %xmm2,(%edi)\r
+        xorps   %xmm1,%xmm4\r
+        movups  %xmm3,16(%edi)\r
+        xorps   %xmm0,%xmm5\r
+        movups  %xmm4,32(%edi)\r
+        movups  %xmm5,48(%edi)\r
+.L040ctr32_ret:\r
+        pxor    %xmm0,%xmm0\r
+        pxor    %xmm1,%xmm1\r
+        pxor    %xmm2,%xmm2\r
+        pxor    %xmm3,%xmm3\r
+        pxor    %xmm4,%xmm4\r
+        movdqa  %xmm0,32(%esp)\r
+        pxor    %xmm5,%xmm5\r
+        movdqa  %xmm0,48(%esp)\r
+        pxor    %xmm6,%xmm6\r
+        movdqa  %xmm0,64(%esp)\r
+        pxor    %xmm7,%xmm7\r
+        movl    80(%esp),%esp\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   aesni_ctr32_encrypt_blocks,.-.L_aesni_ctr32_encrypt_blocks_begin\r
+.globl  aesni_xts_encrypt\r
+.type   aesni_xts_encrypt,@function\r
+.align  16\r
+aesni_xts_encrypt:\r
+.L_aesni_xts_encrypt_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    36(%esp),%edx\r
+        movl    40(%esp),%esi\r
+        movl    240(%edx),%ecx\r
+        movups  (%esi),%xmm2\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L046enc1_loop_8:\r
+.byte   102,15,56,220,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L046enc1_loop_8\r
+.byte   102,15,56,221,209\r
+        movl    20(%esp),%esi\r
+        movl    24(%esp),%edi\r
+        movl    28(%esp),%eax\r
+        movl    32(%esp),%edx\r
+        movl    %esp,%ebp\r
+        subl    $120,%esp\r
+        movl    240(%edx),%ecx\r
+        andl    $-16,%esp\r
+        movl    $135,96(%esp)\r
+        movl    $0,100(%esp)\r
+        movl    $1,104(%esp)\r
+        movl    $0,108(%esp)\r
+        movl    %eax,112(%esp)\r
+        movl    %ebp,116(%esp)\r
+        movdqa  %xmm2,%xmm1\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  96(%esp),%xmm3\r
+        pcmpgtd %xmm1,%xmm0\r
+        andl    $-16,%eax\r
+        movl    %edx,%ebp\r
+        movl    %ecx,%ebx\r
+        subl    $96,%eax\r
+        jc      .L047xts_enc_short\r
+        shll    $4,%ecx\r
+        movl    $16,%ebx\r
+        subl    %ecx,%ebx\r
+        leal    32(%edx,%ecx,1),%edx\r
+        jmp     .L048xts_enc_loop6\r
+.align  16\r
+.L048xts_enc_loop6:\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  %xmm1,(%esp)\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  %xmm1,16(%esp)\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  %xmm1,32(%esp)\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  %xmm1,48(%esp)\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        pshufd  $19,%xmm0,%xmm7\r
+        movdqa  %xmm1,64(%esp)\r
+        paddq   %xmm1,%xmm1\r
+        movups  (%ebp),%xmm0\r
+        pand    %xmm3,%xmm7\r
+        movups  (%esi),%xmm2\r
+        pxor    %xmm1,%xmm7\r
+        movl    %ebx,%ecx\r
+        movdqu  16(%esi),%xmm3\r
+        xorps   %xmm0,%xmm2\r
+        movdqu  32(%esi),%xmm4\r
+        pxor    %xmm0,%xmm3\r
+        movdqu  48(%esi),%xmm5\r
+        pxor    %xmm0,%xmm4\r
+        movdqu  64(%esi),%xmm6\r
+        pxor    %xmm0,%xmm5\r
+        movdqu  80(%esi),%xmm1\r
+        pxor    %xmm0,%xmm6\r
+        leal    96(%esi),%esi\r
+        pxor    (%esp),%xmm2\r
+        movdqa  %xmm7,80(%esp)\r
+        pxor    %xmm1,%xmm7\r
+        movups  16(%ebp),%xmm1\r
+        pxor    16(%esp),%xmm3\r
+        pxor    32(%esp),%xmm4\r
+.byte   102,15,56,220,209\r
+        pxor    48(%esp),%xmm5\r
+        pxor    64(%esp),%xmm6\r
+.byte   102,15,56,220,217\r
+        pxor    %xmm0,%xmm7\r
+        movups  32(%ebp),%xmm0\r
+.byte   102,15,56,220,225\r
+.byte   102,15,56,220,233\r
+.byte   102,15,56,220,241\r
+.byte   102,15,56,220,249\r
+        call    .L_aesni_encrypt6_enter\r
+        movdqa  80(%esp),%xmm1\r
+        pxor    %xmm0,%xmm0\r
+        xorps   (%esp),%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        xorps   16(%esp),%xmm3\r
+        movups  %xmm2,(%edi)\r
+        xorps   32(%esp),%xmm4\r
+        movups  %xmm3,16(%edi)\r
+        xorps   48(%esp),%xmm5\r
+        movups  %xmm4,32(%edi)\r
+        xorps   64(%esp),%xmm6\r
+        movups  %xmm5,48(%edi)\r
+        xorps   %xmm1,%xmm7\r
+        movups  %xmm6,64(%edi)\r
+        pshufd  $19,%xmm0,%xmm2\r
+        movups  %xmm7,80(%edi)\r
+        leal    96(%edi),%edi\r
+        movdqa  96(%esp),%xmm3\r
+        pxor    %xmm0,%xmm0\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        subl    $96,%eax\r
+        jnc     .L048xts_enc_loop6\r
+        movl    240(%ebp),%ecx\r
+        movl    %ebp,%edx\r
+        movl    %ecx,%ebx\r
+.L047xts_enc_short:\r
+        addl    $96,%eax\r
+        jz      .L049xts_enc_done6x\r
+        movdqa  %xmm1,%xmm5\r
+        cmpl    $32,%eax\r
+        jb      .L050xts_enc_one\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        je      .L051xts_enc_two\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  %xmm1,%xmm6\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        cmpl    $64,%eax\r
+        jb      .L052xts_enc_three\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  %xmm1,%xmm7\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        movdqa  %xmm5,(%esp)\r
+        movdqa  %xmm6,16(%esp)\r
+        je      .L053xts_enc_four\r
+        movdqa  %xmm7,32(%esp)\r
+        pshufd  $19,%xmm0,%xmm7\r
+        movdqa  %xmm1,48(%esp)\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm7\r
+        pxor    %xmm1,%xmm7\r
+        movdqu  (%esi),%xmm2\r
+        movdqu  16(%esi),%xmm3\r
+        movdqu  32(%esi),%xmm4\r
+        pxor    (%esp),%xmm2\r
+        movdqu  48(%esi),%xmm5\r
+        pxor    16(%esp),%xmm3\r
+        movdqu  64(%esi),%xmm6\r
+        pxor    32(%esp),%xmm4\r
+        leal    80(%esi),%esi\r
+        pxor    48(%esp),%xmm5\r
+        movdqa  %xmm7,64(%esp)\r
+        pxor    %xmm7,%xmm6\r
+        call    _aesni_encrypt6\r
+        movaps  64(%esp),%xmm1\r
+        xorps   (%esp),%xmm2\r
+        xorps   16(%esp),%xmm3\r
+        xorps   32(%esp),%xmm4\r
+        movups  %xmm2,(%edi)\r
+        xorps   48(%esp),%xmm5\r
+        movups  %xmm3,16(%edi)\r
+        xorps   %xmm1,%xmm6\r
+        movups  %xmm4,32(%edi)\r
+        movups  %xmm5,48(%edi)\r
+        movups  %xmm6,64(%edi)\r
+        leal    80(%edi),%edi\r
+        jmp     .L054xts_enc_done\r
+.align  16\r
+.L050xts_enc_one:\r
+        movups  (%esi),%xmm2\r
+        leal    16(%esi),%esi\r
+        xorps   %xmm5,%xmm2\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L055enc1_loop_9:\r
+.byte   102,15,56,220,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L055enc1_loop_9\r
+.byte   102,15,56,221,209\r
+        xorps   %xmm5,%xmm2\r
+        movups  %xmm2,(%edi)\r
+        leal    16(%edi),%edi\r
+        movdqa  %xmm5,%xmm1\r
+        jmp     .L054xts_enc_done\r
+.align  16\r
+.L051xts_enc_two:\r
+        movaps  %xmm1,%xmm6\r
+        movups  (%esi),%xmm2\r
+        movups  16(%esi),%xmm3\r
+        leal    32(%esi),%esi\r
+        xorps   %xmm5,%xmm2\r
+        xorps   %xmm6,%xmm3\r
+        call    _aesni_encrypt2\r
+        xorps   %xmm5,%xmm2\r
+        xorps   %xmm6,%xmm3\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        leal    32(%edi),%edi\r
+        movdqa  %xmm6,%xmm1\r
+        jmp     .L054xts_enc_done\r
+.align  16\r
+.L052xts_enc_three:\r
+        movaps  %xmm1,%xmm7\r
+        movups  (%esi),%xmm2\r
+        movups  16(%esi),%xmm3\r
+        movups  32(%esi),%xmm4\r
+        leal    48(%esi),%esi\r
+        xorps   %xmm5,%xmm2\r
+        xorps   %xmm6,%xmm3\r
+        xorps   %xmm7,%xmm4\r
+        call    _aesni_encrypt3\r
+        xorps   %xmm5,%xmm2\r
+        xorps   %xmm6,%xmm3\r
+        xorps   %xmm7,%xmm4\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        leal    48(%edi),%edi\r
+        movdqa  %xmm7,%xmm1\r
+        jmp     .L054xts_enc_done\r
+.align  16\r
+.L053xts_enc_four:\r
+        movaps  %xmm1,%xmm6\r
+        movups  (%esi),%xmm2\r
+        movups  16(%esi),%xmm3\r
+        movups  32(%esi),%xmm4\r
+        xorps   (%esp),%xmm2\r
+        movups  48(%esi),%xmm5\r
+        leal    64(%esi),%esi\r
+        xorps   16(%esp),%xmm3\r
+        xorps   %xmm7,%xmm4\r
+        xorps   %xmm6,%xmm5\r
+        call    _aesni_encrypt4\r
+        xorps   (%esp),%xmm2\r
+        xorps   16(%esp),%xmm3\r
+        xorps   %xmm7,%xmm4\r
+        movups  %xmm2,(%edi)\r
+        xorps   %xmm6,%xmm5\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        movups  %xmm5,48(%edi)\r
+        leal    64(%edi),%edi\r
+        movdqa  %xmm6,%xmm1\r
+        jmp     .L054xts_enc_done\r
+.align  16\r
+.L049xts_enc_done6x:\r
+        movl    112(%esp),%eax\r
+        andl    $15,%eax\r
+        jz      .L056xts_enc_ret\r
+        movdqa  %xmm1,%xmm5\r
+        movl    %eax,112(%esp)\r
+        jmp     .L057xts_enc_steal\r
+.align  16\r
+.L054xts_enc_done:\r
+        movl    112(%esp),%eax\r
+        pxor    %xmm0,%xmm0\r
+        andl    $15,%eax\r
+        jz      .L056xts_enc_ret\r
+        pcmpgtd %xmm1,%xmm0\r
+        movl    %eax,112(%esp)\r
+        pshufd  $19,%xmm0,%xmm5\r
+        paddq   %xmm1,%xmm1\r
+        pand    96(%esp),%xmm5\r
+        pxor    %xmm1,%xmm5\r
+.L057xts_enc_steal:\r
+        movzbl  (%esi),%ecx\r
+        movzbl  -16(%edi),%edx\r
+        leal    1(%esi),%esi\r
+        movb    %cl,-16(%edi)\r
+        movb    %dl,(%edi)\r
+        leal    1(%edi),%edi\r
+        subl    $1,%eax\r
+        jnz     .L057xts_enc_steal\r
+        subl    112(%esp),%edi\r
+        movl    %ebp,%edx\r
+        movl    %ebx,%ecx\r
+        movups  -16(%edi),%xmm2\r
+        xorps   %xmm5,%xmm2\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L058enc1_loop_10:\r
+.byte   102,15,56,220,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L058enc1_loop_10\r
+.byte   102,15,56,221,209\r
+        xorps   %xmm5,%xmm2\r
+        movups  %xmm2,-16(%edi)\r
+.L056xts_enc_ret:\r
+        pxor    %xmm0,%xmm0\r
+        pxor    %xmm1,%xmm1\r
+        pxor    %xmm2,%xmm2\r
+        movdqa  %xmm0,(%esp)\r
+        pxor    %xmm3,%xmm3\r
+        movdqa  %xmm0,16(%esp)\r
+        pxor    %xmm4,%xmm4\r
+        movdqa  %xmm0,32(%esp)\r
+        pxor    %xmm5,%xmm5\r
+        movdqa  %xmm0,48(%esp)\r
+        pxor    %xmm6,%xmm6\r
+        movdqa  %xmm0,64(%esp)\r
+        pxor    %xmm7,%xmm7\r
+        movdqa  %xmm0,80(%esp)\r
+        movl    116(%esp),%esp\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   aesni_xts_encrypt,.-.L_aesni_xts_encrypt_begin\r
+.globl  aesni_xts_decrypt\r
+.type   aesni_xts_decrypt,@function\r
+.align  16\r
+aesni_xts_decrypt:\r
+.L_aesni_xts_decrypt_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    36(%esp),%edx\r
+        movl    40(%esp),%esi\r
+        movl    240(%edx),%ecx\r
+        movups  (%esi),%xmm2\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L059enc1_loop_11:\r
+.byte   102,15,56,220,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L059enc1_loop_11\r
+.byte   102,15,56,221,209\r
+        movl    20(%esp),%esi\r
+        movl    24(%esp),%edi\r
+        movl    28(%esp),%eax\r
+        movl    32(%esp),%edx\r
+        movl    %esp,%ebp\r
+        subl    $120,%esp\r
+        andl    $-16,%esp\r
+        xorl    %ebx,%ebx\r
+        testl   $15,%eax\r
+        setnz   %bl\r
+        shll    $4,%ebx\r
+        subl    %ebx,%eax\r
+        movl    $135,96(%esp)\r
+        movl    $0,100(%esp)\r
+        movl    $1,104(%esp)\r
+        movl    $0,108(%esp)\r
+        movl    %eax,112(%esp)\r
+        movl    %ebp,116(%esp)\r
+        movl    240(%edx),%ecx\r
+        movl    %edx,%ebp\r
+        movl    %ecx,%ebx\r
+        movdqa  %xmm2,%xmm1\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  96(%esp),%xmm3\r
+        pcmpgtd %xmm1,%xmm0\r
+        andl    $-16,%eax\r
+        subl    $96,%eax\r
+        jc      .L060xts_dec_short\r
+        shll    $4,%ecx\r
+        movl    $16,%ebx\r
+        subl    %ecx,%ebx\r
+        leal    32(%edx,%ecx,1),%edx\r
+        jmp     .L061xts_dec_loop6\r
+.align  16\r
+.L061xts_dec_loop6:\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  %xmm1,(%esp)\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  %xmm1,16(%esp)\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  %xmm1,32(%esp)\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  %xmm1,48(%esp)\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        pshufd  $19,%xmm0,%xmm7\r
+        movdqa  %xmm1,64(%esp)\r
+        paddq   %xmm1,%xmm1\r
+        movups  (%ebp),%xmm0\r
+        pand    %xmm3,%xmm7\r
+        movups  (%esi),%xmm2\r
+        pxor    %xmm1,%xmm7\r
+        movl    %ebx,%ecx\r
+        movdqu  16(%esi),%xmm3\r
+        xorps   %xmm0,%xmm2\r
+        movdqu  32(%esi),%xmm4\r
+        pxor    %xmm0,%xmm3\r
+        movdqu  48(%esi),%xmm5\r
+        pxor    %xmm0,%xmm4\r
+        movdqu  64(%esi),%xmm6\r
+        pxor    %xmm0,%xmm5\r
+        movdqu  80(%esi),%xmm1\r
+        pxor    %xmm0,%xmm6\r
+        leal    96(%esi),%esi\r
+        pxor    (%esp),%xmm2\r
+        movdqa  %xmm7,80(%esp)\r
+        pxor    %xmm1,%xmm7\r
+        movups  16(%ebp),%xmm1\r
+        pxor    16(%esp),%xmm3\r
+        pxor    32(%esp),%xmm4\r
+.byte   102,15,56,222,209\r
+        pxor    48(%esp),%xmm5\r
+        pxor    64(%esp),%xmm6\r
+.byte   102,15,56,222,217\r
+        pxor    %xmm0,%xmm7\r
+        movups  32(%ebp),%xmm0\r
+.byte   102,15,56,222,225\r
+.byte   102,15,56,222,233\r
+.byte   102,15,56,222,241\r
+.byte   102,15,56,222,249\r
+        call    .L_aesni_decrypt6_enter\r
+        movdqa  80(%esp),%xmm1\r
+        pxor    %xmm0,%xmm0\r
+        xorps   (%esp),%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        xorps   16(%esp),%xmm3\r
+        movups  %xmm2,(%edi)\r
+        xorps   32(%esp),%xmm4\r
+        movups  %xmm3,16(%edi)\r
+        xorps   48(%esp),%xmm5\r
+        movups  %xmm4,32(%edi)\r
+        xorps   64(%esp),%xmm6\r
+        movups  %xmm5,48(%edi)\r
+        xorps   %xmm1,%xmm7\r
+        movups  %xmm6,64(%edi)\r
+        pshufd  $19,%xmm0,%xmm2\r
+        movups  %xmm7,80(%edi)\r
+        leal    96(%edi),%edi\r
+        movdqa  96(%esp),%xmm3\r
+        pxor    %xmm0,%xmm0\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        subl    $96,%eax\r
+        jnc     .L061xts_dec_loop6\r
+        movl    240(%ebp),%ecx\r
+        movl    %ebp,%edx\r
+        movl    %ecx,%ebx\r
+.L060xts_dec_short:\r
+        addl    $96,%eax\r
+        jz      .L062xts_dec_done6x\r
+        movdqa  %xmm1,%xmm5\r
+        cmpl    $32,%eax\r
+        jb      .L063xts_dec_one\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        je      .L064xts_dec_two\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  %xmm1,%xmm6\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        cmpl    $64,%eax\r
+        jb      .L065xts_dec_three\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  %xmm1,%xmm7\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+        movdqa  %xmm5,(%esp)\r
+        movdqa  %xmm6,16(%esp)\r
+        je      .L066xts_dec_four\r
+        movdqa  %xmm7,32(%esp)\r
+        pshufd  $19,%xmm0,%xmm7\r
+        movdqa  %xmm1,48(%esp)\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm7\r
+        pxor    %xmm1,%xmm7\r
+        movdqu  (%esi),%xmm2\r
+        movdqu  16(%esi),%xmm3\r
+        movdqu  32(%esi),%xmm4\r
+        pxor    (%esp),%xmm2\r
+        movdqu  48(%esi),%xmm5\r
+        pxor    16(%esp),%xmm3\r
+        movdqu  64(%esi),%xmm6\r
+        pxor    32(%esp),%xmm4\r
+        leal    80(%esi),%esi\r
+        pxor    48(%esp),%xmm5\r
+        movdqa  %xmm7,64(%esp)\r
+        pxor    %xmm7,%xmm6\r
+        call    _aesni_decrypt6\r
+        movaps  64(%esp),%xmm1\r
+        xorps   (%esp),%xmm2\r
+        xorps   16(%esp),%xmm3\r
+        xorps   32(%esp),%xmm4\r
+        movups  %xmm2,(%edi)\r
+        xorps   48(%esp),%xmm5\r
+        movups  %xmm3,16(%edi)\r
+        xorps   %xmm1,%xmm6\r
+        movups  %xmm4,32(%edi)\r
+        movups  %xmm5,48(%edi)\r
+        movups  %xmm6,64(%edi)\r
+        leal    80(%edi),%edi\r
+        jmp     .L067xts_dec_done\r
+.align  16\r
+.L063xts_dec_one:\r
+        movups  (%esi),%xmm2\r
+        leal    16(%esi),%esi\r
+        xorps   %xmm5,%xmm2\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L068dec1_loop_12:\r
+.byte   102,15,56,222,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L068dec1_loop_12\r
+.byte   102,15,56,223,209\r
+        xorps   %xmm5,%xmm2\r
+        movups  %xmm2,(%edi)\r
+        leal    16(%edi),%edi\r
+        movdqa  %xmm5,%xmm1\r
+        jmp     .L067xts_dec_done\r
+.align  16\r
+.L064xts_dec_two:\r
+        movaps  %xmm1,%xmm6\r
+        movups  (%esi),%xmm2\r
+        movups  16(%esi),%xmm3\r
+        leal    32(%esi),%esi\r
+        xorps   %xmm5,%xmm2\r
+        xorps   %xmm6,%xmm3\r
+        call    _aesni_decrypt2\r
+        xorps   %xmm5,%xmm2\r
+        xorps   %xmm6,%xmm3\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        leal    32(%edi),%edi\r
+        movdqa  %xmm6,%xmm1\r
+        jmp     .L067xts_dec_done\r
+.align  16\r
+.L065xts_dec_three:\r
+        movaps  %xmm1,%xmm7\r
+        movups  (%esi),%xmm2\r
+        movups  16(%esi),%xmm3\r
+        movups  32(%esi),%xmm4\r
+        leal    48(%esi),%esi\r
+        xorps   %xmm5,%xmm2\r
+        xorps   %xmm6,%xmm3\r
+        xorps   %xmm7,%xmm4\r
+        call    _aesni_decrypt3\r
+        xorps   %xmm5,%xmm2\r
+        xorps   %xmm6,%xmm3\r
+        xorps   %xmm7,%xmm4\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        leal    48(%edi),%edi\r
+        movdqa  %xmm7,%xmm1\r
+        jmp     .L067xts_dec_done\r
+.align  16\r
+.L066xts_dec_four:\r
+        movaps  %xmm1,%xmm6\r
+        movups  (%esi),%xmm2\r
+        movups  16(%esi),%xmm3\r
+        movups  32(%esi),%xmm4\r
+        xorps   (%esp),%xmm2\r
+        movups  48(%esi),%xmm5\r
+        leal    64(%esi),%esi\r
+        xorps   16(%esp),%xmm3\r
+        xorps   %xmm7,%xmm4\r
+        xorps   %xmm6,%xmm5\r
+        call    _aesni_decrypt4\r
+        xorps   (%esp),%xmm2\r
+        xorps   16(%esp),%xmm3\r
+        xorps   %xmm7,%xmm4\r
+        movups  %xmm2,(%edi)\r
+        xorps   %xmm6,%xmm5\r
+        movups  %xmm3,16(%edi)\r
+        movups  %xmm4,32(%edi)\r
+        movups  %xmm5,48(%edi)\r
+        leal    64(%edi),%edi\r
+        movdqa  %xmm6,%xmm1\r
+        jmp     .L067xts_dec_done\r
+.align  16\r
+.L062xts_dec_done6x:\r
+        movl    112(%esp),%eax\r
+        andl    $15,%eax\r
+        jz      .L069xts_dec_ret\r
+        movl    %eax,112(%esp)\r
+        jmp     .L070xts_dec_only_one_more\r
+.align  16\r
+.L067xts_dec_done:\r
+        movl    112(%esp),%eax\r
+        pxor    %xmm0,%xmm0\r
+        andl    $15,%eax\r
+        jz      .L069xts_dec_ret\r
+        pcmpgtd %xmm1,%xmm0\r
+        movl    %eax,112(%esp)\r
+        pshufd  $19,%xmm0,%xmm2\r
+        pxor    %xmm0,%xmm0\r
+        movdqa  96(%esp),%xmm3\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm2\r
+        pcmpgtd %xmm1,%xmm0\r
+        pxor    %xmm2,%xmm1\r
+.L070xts_dec_only_one_more:\r
+        pshufd  $19,%xmm0,%xmm5\r
+        movdqa  %xmm1,%xmm6\r
+        paddq   %xmm1,%xmm1\r
+        pand    %xmm3,%xmm5\r
+        pxor    %xmm1,%xmm5\r
+        movl    %ebp,%edx\r
+        movl    %ebx,%ecx\r
+        movups  (%esi),%xmm2\r
+        xorps   %xmm5,%xmm2\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L071dec1_loop_13:\r
+.byte   102,15,56,222,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L071dec1_loop_13\r
+.byte   102,15,56,223,209\r
+        xorps   %xmm5,%xmm2\r
+        movups  %xmm2,(%edi)\r
+.L072xts_dec_steal:\r
+        movzbl  16(%esi),%ecx\r
+        movzbl  (%edi),%edx\r
+        leal    1(%esi),%esi\r
+        movb    %cl,(%edi)\r
+        movb    %dl,16(%edi)\r
+        leal    1(%edi),%edi\r
+        subl    $1,%eax\r
+        jnz     .L072xts_dec_steal\r
+        subl    112(%esp),%edi\r
+        movl    %ebp,%edx\r
+        movl    %ebx,%ecx\r
+        movups  (%edi),%xmm2\r
+        xorps   %xmm6,%xmm2\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L073dec1_loop_14:\r
+.byte   102,15,56,222,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L073dec1_loop_14\r
+.byte   102,15,56,223,209\r
+        xorps   %xmm6,%xmm2\r
+        movups  %xmm2,(%edi)\r
+.L069xts_dec_ret:\r
+        pxor    %xmm0,%xmm0\r
+        pxor    %xmm1,%xmm1\r
+        pxor    %xmm2,%xmm2\r
+        movdqa  %xmm0,(%esp)\r
+        pxor    %xmm3,%xmm3\r
+        movdqa  %xmm0,16(%esp)\r
+        pxor    %xmm4,%xmm4\r
+        movdqa  %xmm0,32(%esp)\r
+        pxor    %xmm5,%xmm5\r
+        movdqa  %xmm0,48(%esp)\r
+        pxor    %xmm6,%xmm6\r
+        movdqa  %xmm0,64(%esp)\r
+        pxor    %xmm7,%xmm7\r
+        movdqa  %xmm0,80(%esp)\r
+        movl    116(%esp),%esp\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   aesni_xts_decrypt,.-.L_aesni_xts_decrypt_begin\r
+.globl  aesni_ocb_encrypt\r
+.type   aesni_ocb_encrypt,@function\r
+.align  16\r
+aesni_ocb_encrypt:\r
+.L_aesni_ocb_encrypt_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    40(%esp),%ecx\r
+        movl    48(%esp),%ebx\r
+        movl    20(%esp),%esi\r
+        movl    24(%esp),%edi\r
+        movl    28(%esp),%eax\r
+        movl    32(%esp),%edx\r
+        movdqu  (%ecx),%xmm0\r
+        movl    36(%esp),%ebp\r
+        movdqu  (%ebx),%xmm1\r
+        movl    44(%esp),%ebx\r
+        movl    %esp,%ecx\r
+        subl    $132,%esp\r
+        andl    $-16,%esp\r
+        subl    %esi,%edi\r
+        shll    $4,%eax\r
+        leal    -96(%esi,%eax,1),%eax\r
+        movl    %edi,120(%esp)\r
+        movl    %eax,124(%esp)\r
+        movl    %ecx,128(%esp)\r
+        movl    240(%edx),%ecx\r
+        testl   $1,%ebp\r
+        jnz     .L074odd\r
+        bsfl    %ebp,%eax\r
+        addl    $1,%ebp\r
+        shll    $4,%eax\r
+        movdqu  (%ebx,%eax,1),%xmm7\r
+        movl    %edx,%eax\r
+        movdqu  (%esi),%xmm2\r
+        leal    16(%esi),%esi\r
+        pxor    %xmm0,%xmm7\r
+        pxor    %xmm2,%xmm1\r
+        pxor    %xmm7,%xmm2\r
+        movdqa  %xmm1,%xmm6\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L075enc1_loop_15:\r
+.byte   102,15,56,220,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L075enc1_loop_15\r
+.byte   102,15,56,221,209\r
+        xorps   %xmm7,%xmm2\r
+        movdqa  %xmm7,%xmm0\r
+        movdqa  %xmm6,%xmm1\r
+        movups  %xmm2,-16(%edi,%esi,1)\r
+        movl    240(%eax),%ecx\r
+        movl    %eax,%edx\r
+        movl    124(%esp),%eax\r
+.L074odd:\r
+        shll    $4,%ecx\r
+        movl    $16,%edi\r
+        subl    %ecx,%edi\r
+        movl    %edx,112(%esp)\r
+        leal    32(%edx,%ecx,1),%edx\r
+        movl    %edi,116(%esp)\r
+        cmpl    %eax,%esi\r
+        ja      .L076short\r
+        jmp     .L077grandloop\r
+.align  32\r
+.L077grandloop:\r
+        leal    1(%ebp),%ecx\r
+        leal    3(%ebp),%eax\r
+        leal    5(%ebp),%edi\r
+        addl    $6,%ebp\r
+        bsfl    %ecx,%ecx\r
+        bsfl    %eax,%eax\r
+        bsfl    %edi,%edi\r
+        shll    $4,%ecx\r
+        shll    $4,%eax\r
+        shll    $4,%edi\r
+        movdqu  (%ebx),%xmm2\r
+        movdqu  (%ebx,%ecx,1),%xmm3\r
+        movl    116(%esp),%ecx\r
+        movdqa  %xmm2,%xmm4\r
+        movdqu  (%ebx,%eax,1),%xmm5\r
+        movdqa  %xmm2,%xmm6\r
+        movdqu  (%ebx,%edi,1),%xmm7\r
+        pxor    %xmm0,%xmm2\r
+        pxor    %xmm2,%xmm3\r
+        movdqa  %xmm2,(%esp)\r
+        pxor    %xmm3,%xmm4\r
+        movdqa  %xmm3,16(%esp)\r
+        pxor    %xmm4,%xmm5\r
+        movdqa  %xmm4,32(%esp)\r
+        pxor    %xmm5,%xmm6\r
+        movdqa  %xmm5,48(%esp)\r
+        pxor    %xmm6,%xmm7\r
+        movdqa  %xmm6,64(%esp)\r
+        movdqa  %xmm7,80(%esp)\r
+        movups  -48(%edx,%ecx,1),%xmm0\r
+        movdqu  (%esi),%xmm2\r
+        movdqu  16(%esi),%xmm3\r
+        movdqu  32(%esi),%xmm4\r
+        movdqu  48(%esi),%xmm5\r
+        movdqu  64(%esi),%xmm6\r
+        movdqu  80(%esi),%xmm7\r
+        leal    96(%esi),%esi\r
+        pxor    %xmm2,%xmm1\r
+        pxor    %xmm0,%xmm2\r
+        pxor    %xmm3,%xmm1\r
+        pxor    %xmm0,%xmm3\r
+        pxor    %xmm4,%xmm1\r
+        pxor    %xmm0,%xmm4\r
+        pxor    %xmm5,%xmm1\r
+        pxor    %xmm0,%xmm5\r
+        pxor    %xmm6,%xmm1\r
+        pxor    %xmm0,%xmm6\r
+        pxor    %xmm7,%xmm1\r
+        pxor    %xmm0,%xmm7\r
+        movdqa  %xmm1,96(%esp)\r
+        movups  -32(%edx,%ecx,1),%xmm1\r
+        pxor    (%esp),%xmm2\r
+        pxor    16(%esp),%xmm3\r
+        pxor    32(%esp),%xmm4\r
+        pxor    48(%esp),%xmm5\r
+        pxor    64(%esp),%xmm6\r
+        pxor    80(%esp),%xmm7\r
+        movups  -16(%edx,%ecx,1),%xmm0\r
+.byte   102,15,56,220,209\r
+.byte   102,15,56,220,217\r
+.byte   102,15,56,220,225\r
+.byte   102,15,56,220,233\r
+.byte   102,15,56,220,241\r
+.byte   102,15,56,220,249\r
+        movl    120(%esp),%edi\r
+        movl    124(%esp),%eax\r
+        call    .L_aesni_encrypt6_enter\r
+        movdqa  80(%esp),%xmm0\r
+        pxor    (%esp),%xmm2\r
+        pxor    16(%esp),%xmm3\r
+        pxor    32(%esp),%xmm4\r
+        pxor    48(%esp),%xmm5\r
+        pxor    64(%esp),%xmm6\r
+        pxor    %xmm0,%xmm7\r
+        movdqa  96(%esp),%xmm1\r
+        movdqu  %xmm2,-96(%edi,%esi,1)\r
+        movdqu  %xmm3,-80(%edi,%esi,1)\r
+        movdqu  %xmm4,-64(%edi,%esi,1)\r
+        movdqu  %xmm5,-48(%edi,%esi,1)\r
+        movdqu  %xmm6,-32(%edi,%esi,1)\r
+        movdqu  %xmm7,-16(%edi,%esi,1)\r
+        cmpl    %eax,%esi\r
+        jb      .L077grandloop\r
+.L076short:\r
+        addl    $96,%eax\r
+        subl    %esi,%eax\r
+        jz      .L078done\r
+        cmpl    $32,%eax\r
+        jb      .L079one\r
+        je      .L080two\r
+        cmpl    $64,%eax\r
+        jb      .L081three\r
+        je      .L082four\r
+        leal    1(%ebp),%ecx\r
+        leal    3(%ebp),%eax\r
+        bsfl    %ecx,%ecx\r
+        bsfl    %eax,%eax\r
+        shll    $4,%ecx\r
+        shll    $4,%eax\r
+        movdqu  (%ebx),%xmm2\r
+        movdqu  (%ebx,%ecx,1),%xmm3\r
+        movl    116(%esp),%ecx\r
+        movdqa  %xmm2,%xmm4\r
+        movdqu  (%ebx,%eax,1),%xmm5\r
+        movdqa  %xmm2,%xmm6\r
+        pxor    %xmm0,%xmm2\r
+        pxor    %xmm2,%xmm3\r
+        movdqa  %xmm2,(%esp)\r
+        pxor    %xmm3,%xmm4\r
+        movdqa  %xmm3,16(%esp)\r
+        pxor    %xmm4,%xmm5\r
+        movdqa  %xmm4,32(%esp)\r
+        pxor    %xmm5,%xmm6\r
+        movdqa  %xmm5,48(%esp)\r
+        pxor    %xmm6,%xmm7\r
+        movdqa  %xmm6,64(%esp)\r
+        movups  -48(%edx,%ecx,1),%xmm0\r
+        movdqu  (%esi),%xmm2\r
+        movdqu  16(%esi),%xmm3\r
+        movdqu  32(%esi),%xmm4\r
+        movdqu  48(%esi),%xmm5\r
+        movdqu  64(%esi),%xmm6\r
+        pxor    %xmm7,%xmm7\r
+        pxor    %xmm2,%xmm1\r
+        pxor    %xmm0,%xmm2\r
+        pxor    %xmm3,%xmm1\r
+        pxor    %xmm0,%xmm3\r
+        pxor    %xmm4,%xmm1\r
+        pxor    %xmm0,%xmm4\r
+        pxor    %xmm5,%xmm1\r
+        pxor    %xmm0,%xmm5\r
+        pxor    %xmm6,%xmm1\r
+        pxor    %xmm0,%xmm6\r
+        movdqa  %xmm1,96(%esp)\r
+        movups  -32(%edx,%ecx,1),%xmm1\r
+        pxor    (%esp),%xmm2\r
+        pxor    16(%esp),%xmm3\r
+        pxor    32(%esp),%xmm4\r
+        pxor    48(%esp),%xmm5\r
+        pxor    64(%esp),%xmm6\r
+        movups  -16(%edx,%ecx,1),%xmm0\r
+.byte   102,15,56,220,209\r
+.byte   102,15,56,220,217\r
+.byte   102,15,56,220,225\r
+.byte   102,15,56,220,233\r
+.byte   102,15,56,220,241\r
+.byte   102,15,56,220,249\r
+        movl    120(%esp),%edi\r
+        call    .L_aesni_encrypt6_enter\r
+        movdqa  64(%esp),%xmm0\r
+        pxor    (%esp),%xmm2\r
+        pxor    16(%esp),%xmm3\r
+        pxor    32(%esp),%xmm4\r
+        pxor    48(%esp),%xmm5\r
+        pxor    %xmm0,%xmm6\r
+        movdqa  96(%esp),%xmm1\r
+        movdqu  %xmm2,(%edi,%esi,1)\r
+        movdqu  %xmm3,16(%edi,%esi,1)\r
+        movdqu  %xmm4,32(%edi,%esi,1)\r
+        movdqu  %xmm5,48(%edi,%esi,1)\r
+        movdqu  %xmm6,64(%edi,%esi,1)\r
+        jmp     .L078done\r
+.align  16\r
+.L079one:\r
+        movdqu  (%ebx),%xmm7\r
+        movl    112(%esp),%edx\r
+        movdqu  (%esi),%xmm2\r
+        movl    240(%edx),%ecx\r
+        pxor    %xmm0,%xmm7\r
+        pxor    %xmm2,%xmm1\r
+        pxor    %xmm7,%xmm2\r
+        movdqa  %xmm1,%xmm6\r
+        movl    120(%esp),%edi\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L083enc1_loop_16:\r
+.byte   102,15,56,220,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L083enc1_loop_16\r
+.byte   102,15,56,221,209\r
+        xorps   %xmm7,%xmm2\r
+        movdqa  %xmm7,%xmm0\r
+        movdqa  %xmm6,%xmm1\r
+        movups  %xmm2,(%edi,%esi,1)\r
+        jmp     .L078done\r
+.align  16\r
+.L080two:\r
+        leal    1(%ebp),%ecx\r
+        movl    112(%esp),%edx\r
+        bsfl    %ecx,%ecx\r
+        shll    $4,%ecx\r
+        movdqu  (%ebx),%xmm6\r
+        movdqu  (%ebx,%ecx,1),%xmm7\r
+        movdqu  (%esi),%xmm2\r
+        movdqu  16(%esi),%xmm3\r
+        movl    240(%edx),%ecx\r
+        pxor    %xmm0,%xmm6\r
+        pxor    %xmm6,%xmm7\r
+        pxor    %xmm2,%xmm1\r
+        pxor    %xmm6,%xmm2\r
+        pxor    %xmm3,%xmm1\r
+        pxor    %xmm7,%xmm3\r
+        movdqa  %xmm1,%xmm5\r
+        movl    120(%esp),%edi\r
+        call    _aesni_encrypt2\r
+        xorps   %xmm6,%xmm2\r
+        xorps   %xmm7,%xmm3\r
+        movdqa  %xmm7,%xmm0\r
+        movdqa  %xmm5,%xmm1\r
+        movups  %xmm2,(%edi,%esi,1)\r
+        movups  %xmm3,16(%edi,%esi,1)\r
+        jmp     .L078done\r
+.align  16\r
+.L081three:\r
+        leal    1(%ebp),%ecx\r
+        movl    112(%esp),%edx\r
+        bsfl    %ecx,%ecx\r
+        shll    $4,%ecx\r
+        movdqu  (%ebx),%xmm5\r
+        movdqu  (%ebx,%ecx,1),%xmm6\r
+        movdqa  %xmm5,%xmm7\r
+        movdqu  (%esi),%xmm2\r
+        movdqu  16(%esi),%xmm3\r
+        movdqu  32(%esi),%xmm4\r
+        movl    240(%edx),%ecx\r
+        pxor    %xmm0,%xmm5\r
+        pxor    %xmm5,%xmm6\r
+        pxor    %xmm6,%xmm7\r
+        pxor    %xmm2,%xmm1\r
+        pxor    %xmm5,%xmm2\r
+        pxor    %xmm3,%xmm1\r
+        pxor    %xmm6,%xmm3\r
+        pxor    %xmm4,%xmm1\r
+        pxor    %xmm7,%xmm4\r
+        movdqa  %xmm1,96(%esp)\r
+        movl    120(%esp),%edi\r
+        call    _aesni_encrypt3\r
+        xorps   %xmm5,%xmm2\r
+        xorps   %xmm6,%xmm3\r
+        xorps   %xmm7,%xmm4\r
+        movdqa  %xmm7,%xmm0\r
+        movdqa  96(%esp),%xmm1\r
+        movups  %xmm2,(%edi,%esi,1)\r
+        movups  %xmm3,16(%edi,%esi,1)\r
+        movups  %xmm4,32(%edi,%esi,1)\r
+        jmp     .L078done\r
+.align  16\r
+.L082four:\r
+        leal    1(%ebp),%ecx\r
+        leal    3(%ebp),%eax\r
+        bsfl    %ecx,%ecx\r
+        bsfl    %eax,%eax\r
+        movl    112(%esp),%edx\r
+        shll    $4,%ecx\r
+        shll    $4,%eax\r
+        movdqu  (%ebx),%xmm4\r
+        movdqu  (%ebx,%ecx,1),%xmm5\r
+        movdqa  %xmm4,%xmm6\r
+        movdqu  (%ebx,%eax,1),%xmm7\r
+        pxor    %xmm0,%xmm4\r
+        movdqu  (%esi),%xmm2\r
+        pxor    %xmm4,%xmm5\r
+        movdqu  16(%esi),%xmm3\r
+        pxor    %xmm5,%xmm6\r
+        movdqa  %xmm4,(%esp)\r
+        pxor    %xmm6,%xmm7\r
+        movdqa  %xmm5,16(%esp)\r
+        movdqu  32(%esi),%xmm4\r
+        movdqu  48(%esi),%xmm5\r
+        movl    240(%edx),%ecx\r
+        pxor    %xmm2,%xmm1\r
+        pxor    (%esp),%xmm2\r
+        pxor    %xmm3,%xmm1\r
+        pxor    16(%esp),%xmm3\r
+        pxor    %xmm4,%xmm1\r
+        pxor    %xmm6,%xmm4\r
+        pxor    %xmm5,%xmm1\r
+        pxor    %xmm7,%xmm5\r
+        movdqa  %xmm1,96(%esp)\r
+        movl    120(%esp),%edi\r
+        call    _aesni_encrypt4\r
+        xorps   (%esp),%xmm2\r
+        xorps   16(%esp),%xmm3\r
+        xorps   %xmm6,%xmm4\r
+        movups  %xmm2,(%edi,%esi,1)\r
+        xorps   %xmm7,%xmm5\r
+        movups  %xmm3,16(%edi,%esi,1)\r
+        movdqa  %xmm7,%xmm0\r
+        movups  %xmm4,32(%edi,%esi,1)\r
+        movdqa  96(%esp),%xmm1\r
+        movups  %xmm5,48(%edi,%esi,1)\r
+.L078done:\r
+        movl    128(%esp),%edx\r
+        pxor    %xmm2,%xmm2\r
+        pxor    %xmm3,%xmm3\r
+        movdqa  %xmm2,(%esp)\r
+        pxor    %xmm4,%xmm4\r
+        movdqa  %xmm2,16(%esp)\r
+        pxor    %xmm5,%xmm5\r
+        movdqa  %xmm2,32(%esp)\r
+        pxor    %xmm6,%xmm6\r
+        movdqa  %xmm2,48(%esp)\r
+        pxor    %xmm7,%xmm7\r
+        movdqa  %xmm2,64(%esp)\r
+        movdqa  %xmm2,80(%esp)\r
+        movdqa  %xmm2,96(%esp)\r
+        leal    (%edx),%esp\r
+        movl    40(%esp),%ecx\r
+        movl    48(%esp),%ebx\r
+        movdqu  %xmm0,(%ecx)\r
+        pxor    %xmm0,%xmm0\r
+        movdqu  %xmm1,(%ebx)\r
+        pxor    %xmm1,%xmm1\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   aesni_ocb_encrypt,.-.L_aesni_ocb_encrypt_begin\r
+.globl  aesni_ocb_decrypt\r
+.type   aesni_ocb_decrypt,@function\r
+.align  16\r
+aesni_ocb_decrypt:\r
+.L_aesni_ocb_decrypt_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    40(%esp),%ecx\r
+        movl    48(%esp),%ebx\r
+        movl    20(%esp),%esi\r
+        movl    24(%esp),%edi\r
+        movl    28(%esp),%eax\r
+        movl    32(%esp),%edx\r
+        movdqu  (%ecx),%xmm0\r
+        movl    36(%esp),%ebp\r
+        movdqu  (%ebx),%xmm1\r
+        movl    44(%esp),%ebx\r
+        movl    %esp,%ecx\r
+        subl    $132,%esp\r
+        andl    $-16,%esp\r
+        subl    %esi,%edi\r
+        shll    $4,%eax\r
+        leal    -96(%esi,%eax,1),%eax\r
+        movl    %edi,120(%esp)\r
+        movl    %eax,124(%esp)\r
+        movl    %ecx,128(%esp)\r
+        movl    240(%edx),%ecx\r
+        testl   $1,%ebp\r
+        jnz     .L084odd\r
+        bsfl    %ebp,%eax\r
+        addl    $1,%ebp\r
+        shll    $4,%eax\r
+        movdqu  (%ebx,%eax,1),%xmm7\r
+        movl    %edx,%eax\r
+        movdqu  (%esi),%xmm2\r
+        leal    16(%esi),%esi\r
+        pxor    %xmm0,%xmm7\r
+        pxor    %xmm7,%xmm2\r
+        movdqa  %xmm1,%xmm6\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L085dec1_loop_17:\r
+.byte   102,15,56,222,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L085dec1_loop_17\r
+.byte   102,15,56,223,209\r
+        xorps   %xmm7,%xmm2\r
+        movaps  %xmm6,%xmm1\r
+        movdqa  %xmm7,%xmm0\r
+        xorps   %xmm2,%xmm1\r
+        movups  %xmm2,-16(%edi,%esi,1)\r
+        movl    240(%eax),%ecx\r
+        movl    %eax,%edx\r
+        movl    124(%esp),%eax\r
+.L084odd:\r
+        shll    $4,%ecx\r
+        movl    $16,%edi\r
+        subl    %ecx,%edi\r
+        movl    %edx,112(%esp)\r
+        leal    32(%edx,%ecx,1),%edx\r
+        movl    %edi,116(%esp)\r
+        cmpl    %eax,%esi\r
+        ja      .L086short\r
+        jmp     .L087grandloop\r
+.align  32\r
+.L087grandloop:\r
+        leal    1(%ebp),%ecx\r
+        leal    3(%ebp),%eax\r
+        leal    5(%ebp),%edi\r
+        addl    $6,%ebp\r
+        bsfl    %ecx,%ecx\r
+        bsfl    %eax,%eax\r
+        bsfl    %edi,%edi\r
+        shll    $4,%ecx\r
+        shll    $4,%eax\r
+        shll    $4,%edi\r
+        movdqu  (%ebx),%xmm2\r
+        movdqu  (%ebx,%ecx,1),%xmm3\r
+        movl    116(%esp),%ecx\r
+        movdqa  %xmm2,%xmm4\r
+        movdqu  (%ebx,%eax,1),%xmm5\r
+        movdqa  %xmm2,%xmm6\r
+        movdqu  (%ebx,%edi,1),%xmm7\r
+        pxor    %xmm0,%xmm2\r
+        pxor    %xmm2,%xmm3\r
+        movdqa  %xmm2,(%esp)\r
+        pxor    %xmm3,%xmm4\r
+        movdqa  %xmm3,16(%esp)\r
+        pxor    %xmm4,%xmm5\r
+        movdqa  %xmm4,32(%esp)\r
+        pxor    %xmm5,%xmm6\r
+        movdqa  %xmm5,48(%esp)\r
+        pxor    %xmm6,%xmm7\r
+        movdqa  %xmm6,64(%esp)\r
+        movdqa  %xmm7,80(%esp)\r
+        movups  -48(%edx,%ecx,1),%xmm0\r
+        movdqu  (%esi),%xmm2\r
+        movdqu  16(%esi),%xmm3\r
+        movdqu  32(%esi),%xmm4\r
+        movdqu  48(%esi),%xmm5\r
+        movdqu  64(%esi),%xmm6\r
+        movdqu  80(%esi),%xmm7\r
+        leal    96(%esi),%esi\r
+        movdqa  %xmm1,96(%esp)\r
+        pxor    %xmm0,%xmm2\r
+        pxor    %xmm0,%xmm3\r
+        pxor    %xmm0,%xmm4\r
+        pxor    %xmm0,%xmm5\r
+        pxor    %xmm0,%xmm6\r
+        pxor    %xmm0,%xmm7\r
+        movups  -32(%edx,%ecx,1),%xmm1\r
+        pxor    (%esp),%xmm2\r
+        pxor    16(%esp),%xmm3\r
+        pxor    32(%esp),%xmm4\r
+        pxor    48(%esp),%xmm5\r
+        pxor    64(%esp),%xmm6\r
+        pxor    80(%esp),%xmm7\r
+        movups  -16(%edx,%ecx,1),%xmm0\r
+.byte   102,15,56,222,209\r
+.byte   102,15,56,222,217\r
+.byte   102,15,56,222,225\r
+.byte   102,15,56,222,233\r
+.byte   102,15,56,222,241\r
+.byte   102,15,56,222,249\r
+        movl    120(%esp),%edi\r
+        movl    124(%esp),%eax\r
+        call    .L_aesni_decrypt6_enter\r
+        movdqa  80(%esp),%xmm0\r
+        pxor    (%esp),%xmm2\r
+        movdqa  96(%esp),%xmm1\r
+        pxor    16(%esp),%xmm3\r
+        pxor    32(%esp),%xmm4\r
+        pxor    48(%esp),%xmm5\r
+        pxor    64(%esp),%xmm6\r
+        pxor    %xmm0,%xmm7\r
+        pxor    %xmm2,%xmm1\r
+        movdqu  %xmm2,-96(%edi,%esi,1)\r
+        pxor    %xmm3,%xmm1\r
+        movdqu  %xmm3,-80(%edi,%esi,1)\r
+        pxor    %xmm4,%xmm1\r
+        movdqu  %xmm4,-64(%edi,%esi,1)\r
+        pxor    %xmm5,%xmm1\r
+        movdqu  %xmm5,-48(%edi,%esi,1)\r
+        pxor    %xmm6,%xmm1\r
+        movdqu  %xmm6,-32(%edi,%esi,1)\r
+        pxor    %xmm7,%xmm1\r
+        movdqu  %xmm7,-16(%edi,%esi,1)\r
+        cmpl    %eax,%esi\r
+        jb      .L087grandloop\r
+.L086short:\r
+        addl    $96,%eax\r
+        subl    %esi,%eax\r
+        jz      .L088done\r
+        cmpl    $32,%eax\r
+        jb      .L089one\r
+        je      .L090two\r
+        cmpl    $64,%eax\r
+        jb      .L091three\r
+        je      .L092four\r
+        leal    1(%ebp),%ecx\r
+        leal    3(%ebp),%eax\r
+        bsfl    %ecx,%ecx\r
+        bsfl    %eax,%eax\r
+        shll    $4,%ecx\r
+        shll    $4,%eax\r
+        movdqu  (%ebx),%xmm2\r
+        movdqu  (%ebx,%ecx,1),%xmm3\r
+        movl    116(%esp),%ecx\r
+        movdqa  %xmm2,%xmm4\r
+        movdqu  (%ebx,%eax,1),%xmm5\r
+        movdqa  %xmm2,%xmm6\r
+        pxor    %xmm0,%xmm2\r
+        pxor    %xmm2,%xmm3\r
+        movdqa  %xmm2,(%esp)\r
+        pxor    %xmm3,%xmm4\r
+        movdqa  %xmm3,16(%esp)\r
+        pxor    %xmm4,%xmm5\r
+        movdqa  %xmm4,32(%esp)\r
+        pxor    %xmm5,%xmm6\r
+        movdqa  %xmm5,48(%esp)\r
+        pxor    %xmm6,%xmm7\r
+        movdqa  %xmm6,64(%esp)\r
+        movups  -48(%edx,%ecx,1),%xmm0\r
+        movdqu  (%esi),%xmm2\r
+        movdqu  16(%esi),%xmm3\r
+        movdqu  32(%esi),%xmm4\r
+        movdqu  48(%esi),%xmm5\r
+        movdqu  64(%esi),%xmm6\r
+        pxor    %xmm7,%xmm7\r
+        movdqa  %xmm1,96(%esp)\r
+        pxor    %xmm0,%xmm2\r
+        pxor    %xmm0,%xmm3\r
+        pxor    %xmm0,%xmm4\r
+        pxor    %xmm0,%xmm5\r
+        pxor    %xmm0,%xmm6\r
+        movups  -32(%edx,%ecx,1),%xmm1\r
+        pxor    (%esp),%xmm2\r
+        pxor    16(%esp),%xmm3\r
+        pxor    32(%esp),%xmm4\r
+        pxor    48(%esp),%xmm5\r
+        pxor    64(%esp),%xmm6\r
+        movups  -16(%edx,%ecx,1),%xmm0\r
+.byte   102,15,56,222,209\r
+.byte   102,15,56,222,217\r
+.byte   102,15,56,222,225\r
+.byte   102,15,56,222,233\r
+.byte   102,15,56,222,241\r
+.byte   102,15,56,222,249\r
+        movl    120(%esp),%edi\r
+        call    .L_aesni_decrypt6_enter\r
+        movdqa  64(%esp),%xmm0\r
+        pxor    (%esp),%xmm2\r
+        movdqa  96(%esp),%xmm1\r
+        pxor    16(%esp),%xmm3\r
+        pxor    32(%esp),%xmm4\r
+        pxor    48(%esp),%xmm5\r
+        pxor    %xmm0,%xmm6\r
+        pxor    %xmm2,%xmm1\r
+        movdqu  %xmm2,(%edi,%esi,1)\r
+        pxor    %xmm3,%xmm1\r
+        movdqu  %xmm3,16(%edi,%esi,1)\r
+        pxor    %xmm4,%xmm1\r
+        movdqu  %xmm4,32(%edi,%esi,1)\r
+        pxor    %xmm5,%xmm1\r
+        movdqu  %xmm5,48(%edi,%esi,1)\r
+        pxor    %xmm6,%xmm1\r
+        movdqu  %xmm6,64(%edi,%esi,1)\r
+        jmp     .L088done\r
+.align  16\r
+.L089one:\r
+        movdqu  (%ebx),%xmm7\r
+        movl    112(%esp),%edx\r
+        movdqu  (%esi),%xmm2\r
+        movl    240(%edx),%ecx\r
+        pxor    %xmm0,%xmm7\r
+        pxor    %xmm7,%xmm2\r
+        movdqa  %xmm1,%xmm6\r
+        movl    120(%esp),%edi\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L093dec1_loop_18:\r
+.byte   102,15,56,222,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L093dec1_loop_18\r
+.byte   102,15,56,223,209\r
+        xorps   %xmm7,%xmm2\r
+        movaps  %xmm6,%xmm1\r
+        movdqa  %xmm7,%xmm0\r
+        xorps   %xmm2,%xmm1\r
+        movups  %xmm2,(%edi,%esi,1)\r
+        jmp     .L088done\r
+.align  16\r
+.L090two:\r
+        leal    1(%ebp),%ecx\r
+        movl    112(%esp),%edx\r
+        bsfl    %ecx,%ecx\r
+        shll    $4,%ecx\r
+        movdqu  (%ebx),%xmm6\r
+        movdqu  (%ebx,%ecx,1),%xmm7\r
+        movdqu  (%esi),%xmm2\r
+        movdqu  16(%esi),%xmm3\r
+        movl    240(%edx),%ecx\r
+        movdqa  %xmm1,%xmm5\r
+        pxor    %xmm0,%xmm6\r
+        pxor    %xmm6,%xmm7\r
+        pxor    %xmm6,%xmm2\r
+        pxor    %xmm7,%xmm3\r
+        movl    120(%esp),%edi\r
+        call    _aesni_decrypt2\r
+        xorps   %xmm6,%xmm2\r
+        xorps   %xmm7,%xmm3\r
+        movdqa  %xmm7,%xmm0\r
+        xorps   %xmm2,%xmm5\r
+        movups  %xmm2,(%edi,%esi,1)\r
+        xorps   %xmm3,%xmm5\r
+        movups  %xmm3,16(%edi,%esi,1)\r
+        movaps  %xmm5,%xmm1\r
+        jmp     .L088done\r
+.align  16\r
+.L091three:\r
+        leal    1(%ebp),%ecx\r
+        movl    112(%esp),%edx\r
+        bsfl    %ecx,%ecx\r
+        shll    $4,%ecx\r
+        movdqu  (%ebx),%xmm5\r
+        movdqu  (%ebx,%ecx,1),%xmm6\r
+        movdqa  %xmm5,%xmm7\r
+        movdqu  (%esi),%xmm2\r
+        movdqu  16(%esi),%xmm3\r
+        movdqu  32(%esi),%xmm4\r
+        movl    240(%edx),%ecx\r
+        movdqa  %xmm1,96(%esp)\r
+        pxor    %xmm0,%xmm5\r
+        pxor    %xmm5,%xmm6\r
+        pxor    %xmm6,%xmm7\r
+        pxor    %xmm5,%xmm2\r
+        pxor    %xmm6,%xmm3\r
+        pxor    %xmm7,%xmm4\r
+        movl    120(%esp),%edi\r
+        call    _aesni_decrypt3\r
+        movdqa  96(%esp),%xmm1\r
+        xorps   %xmm5,%xmm2\r
+        xorps   %xmm6,%xmm3\r
+        xorps   %xmm7,%xmm4\r
+        movups  %xmm2,(%edi,%esi,1)\r
+        pxor    %xmm2,%xmm1\r
+        movdqa  %xmm7,%xmm0\r
+        movups  %xmm3,16(%edi,%esi,1)\r
+        pxor    %xmm3,%xmm1\r
+        movups  %xmm4,32(%edi,%esi,1)\r
+        pxor    %xmm4,%xmm1\r
+        jmp     .L088done\r
+.align  16\r
+.L092four:\r
+        leal    1(%ebp),%ecx\r
+        leal    3(%ebp),%eax\r
+        bsfl    %ecx,%ecx\r
+        bsfl    %eax,%eax\r
+        movl    112(%esp),%edx\r
+        shll    $4,%ecx\r
+        shll    $4,%eax\r
+        movdqu  (%ebx),%xmm4\r
+        movdqu  (%ebx,%ecx,1),%xmm5\r
+        movdqa  %xmm4,%xmm6\r
+        movdqu  (%ebx,%eax,1),%xmm7\r
+        pxor    %xmm0,%xmm4\r
+        movdqu  (%esi),%xmm2\r
+        pxor    %xmm4,%xmm5\r
+        movdqu  16(%esi),%xmm3\r
+        pxor    %xmm5,%xmm6\r
+        movdqa  %xmm4,(%esp)\r
+        pxor    %xmm6,%xmm7\r
+        movdqa  %xmm5,16(%esp)\r
+        movdqu  32(%esi),%xmm4\r
+        movdqu  48(%esi),%xmm5\r
+        movl    240(%edx),%ecx\r
+        movdqa  %xmm1,96(%esp)\r
+        pxor    (%esp),%xmm2\r
+        pxor    16(%esp),%xmm3\r
+        pxor    %xmm6,%xmm4\r
+        pxor    %xmm7,%xmm5\r
+        movl    120(%esp),%edi\r
+        call    _aesni_decrypt4\r
+        movdqa  96(%esp),%xmm1\r
+        xorps   (%esp),%xmm2\r
+        xorps   16(%esp),%xmm3\r
+        xorps   %xmm6,%xmm4\r
+        movups  %xmm2,(%edi,%esi,1)\r
+        pxor    %xmm2,%xmm1\r
+        xorps   %xmm7,%xmm5\r
+        movups  %xmm3,16(%edi,%esi,1)\r
+        pxor    %xmm3,%xmm1\r
+        movdqa  %xmm7,%xmm0\r
+        movups  %xmm4,32(%edi,%esi,1)\r
+        pxor    %xmm4,%xmm1\r
+        movups  %xmm5,48(%edi,%esi,1)\r
+        pxor    %xmm5,%xmm1\r
+.L088done:\r
+        movl    128(%esp),%edx\r
+        pxor    %xmm2,%xmm2\r
+        pxor    %xmm3,%xmm3\r
+        movdqa  %xmm2,(%esp)\r
+        pxor    %xmm4,%xmm4\r
+        movdqa  %xmm2,16(%esp)\r
+        pxor    %xmm5,%xmm5\r
+        movdqa  %xmm2,32(%esp)\r
+        pxor    %xmm6,%xmm6\r
+        movdqa  %xmm2,48(%esp)\r
+        pxor    %xmm7,%xmm7\r
+        movdqa  %xmm2,64(%esp)\r
+        movdqa  %xmm2,80(%esp)\r
+        movdqa  %xmm2,96(%esp)\r
+        leal    (%edx),%esp\r
+        movl    40(%esp),%ecx\r
+        movl    48(%esp),%ebx\r
+        movdqu  %xmm0,(%ecx)\r
+        pxor    %xmm0,%xmm0\r
+        movdqu  %xmm1,(%ebx)\r
+        pxor    %xmm1,%xmm1\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   aesni_ocb_decrypt,.-.L_aesni_ocb_decrypt_begin\r
+.globl  aesni_cbc_encrypt\r
+.type   aesni_cbc_encrypt,@function\r
+.align  16\r
+aesni_cbc_encrypt:\r
+.L_aesni_cbc_encrypt_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    20(%esp),%esi\r
+        movl    %esp,%ebx\r
+        movl    24(%esp),%edi\r
+        subl    $24,%ebx\r
+        movl    28(%esp),%eax\r
+        andl    $-16,%ebx\r
+        movl    32(%esp),%edx\r
+        movl    36(%esp),%ebp\r
+        testl   %eax,%eax\r
+        jz      .L094cbc_abort\r
+        cmpl    $0,40(%esp)\r
+        xchgl   %esp,%ebx\r
+        movups  (%ebp),%xmm7\r
+        movl    240(%edx),%ecx\r
+        movl    %edx,%ebp\r
+        movl    %ebx,16(%esp)\r
+        movl    %ecx,%ebx\r
+        je      .L095cbc_decrypt\r
+        movaps  %xmm7,%xmm2\r
+        cmpl    $16,%eax\r
+        jb      .L096cbc_enc_tail\r
+        subl    $16,%eax\r
+        jmp     .L097cbc_enc_loop\r
+.align  16\r
+.L097cbc_enc_loop:\r
+        movups  (%esi),%xmm7\r
+        leal    16(%esi),%esi\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        xorps   %xmm0,%xmm7\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm7,%xmm2\r
+.L098enc1_loop_19:\r
+.byte   102,15,56,220,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L098enc1_loop_19\r
+.byte   102,15,56,221,209\r
+        movl    %ebx,%ecx\r
+        movl    %ebp,%edx\r
+        movups  %xmm2,(%edi)\r
+        leal    16(%edi),%edi\r
+        subl    $16,%eax\r
+        jnc     .L097cbc_enc_loop\r
+        addl    $16,%eax\r
+        jnz     .L096cbc_enc_tail\r
+        movaps  %xmm2,%xmm7\r
+        pxor    %xmm2,%xmm2\r
+        jmp     .L099cbc_ret\r
+.L096cbc_enc_tail:\r
+        movl    %eax,%ecx\r
+.long   2767451785\r
+        movl    $16,%ecx\r
+        subl    %eax,%ecx\r
+        xorl    %eax,%eax\r
+.long   2868115081\r
+        leal    -16(%edi),%edi\r
+        movl    %ebx,%ecx\r
+        movl    %edi,%esi\r
+        movl    %ebp,%edx\r
+        jmp     .L097cbc_enc_loop\r
+.align  16\r
+.L095cbc_decrypt:\r
+        cmpl    $80,%eax\r
+        jbe     .L100cbc_dec_tail\r
+        movaps  %xmm7,(%esp)\r
+        subl    $80,%eax\r
+        jmp     .L101cbc_dec_loop6_enter\r
+.align  16\r
+.L102cbc_dec_loop6:\r
+        movaps  %xmm0,(%esp)\r
+        movups  %xmm7,(%edi)\r
+        leal    16(%edi),%edi\r
+.L101cbc_dec_loop6_enter:\r
+        movdqu  (%esi),%xmm2\r
+        movdqu  16(%esi),%xmm3\r
+        movdqu  32(%esi),%xmm4\r
+        movdqu  48(%esi),%xmm5\r
+        movdqu  64(%esi),%xmm6\r
+        movdqu  80(%esi),%xmm7\r
+        call    _aesni_decrypt6\r
+        movups  (%esi),%xmm1\r
+        movups  16(%esi),%xmm0\r
+        xorps   (%esp),%xmm2\r
+        xorps   %xmm1,%xmm3\r
+        movups  32(%esi),%xmm1\r
+        xorps   %xmm0,%xmm4\r
+        movups  48(%esi),%xmm0\r
+        xorps   %xmm1,%xmm5\r
+        movups  64(%esi),%xmm1\r
+        xorps   %xmm0,%xmm6\r
+        movups  80(%esi),%xmm0\r
+        xorps   %xmm1,%xmm7\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        leal    96(%esi),%esi\r
+        movups  %xmm4,32(%edi)\r
+        movl    %ebx,%ecx\r
+        movups  %xmm5,48(%edi)\r
+        movl    %ebp,%edx\r
+        movups  %xmm6,64(%edi)\r
+        leal    80(%edi),%edi\r
+        subl    $96,%eax\r
+        ja      .L102cbc_dec_loop6\r
+        movaps  %xmm7,%xmm2\r
+        movaps  %xmm0,%xmm7\r
+        addl    $80,%eax\r
+        jle     .L103cbc_dec_clear_tail_collected\r
+        movups  %xmm2,(%edi)\r
+        leal    16(%edi),%edi\r
+.L100cbc_dec_tail:\r
+        movups  (%esi),%xmm2\r
+        movaps  %xmm2,%xmm6\r
+        cmpl    $16,%eax\r
+        jbe     .L104cbc_dec_one\r
+        movups  16(%esi),%xmm3\r
+        movaps  %xmm3,%xmm5\r
+        cmpl    $32,%eax\r
+        jbe     .L105cbc_dec_two\r
+        movups  32(%esi),%xmm4\r
+        cmpl    $48,%eax\r
+        jbe     .L106cbc_dec_three\r
+        movups  48(%esi),%xmm5\r
+        cmpl    $64,%eax\r
+        jbe     .L107cbc_dec_four\r
+        movups  64(%esi),%xmm6\r
+        movaps  %xmm7,(%esp)\r
+        movups  (%esi),%xmm2\r
+        xorps   %xmm7,%xmm7\r
+        call    _aesni_decrypt6\r
+        movups  (%esi),%xmm1\r
+        movups  16(%esi),%xmm0\r
+        xorps   (%esp),%xmm2\r
+        xorps   %xmm1,%xmm3\r
+        movups  32(%esi),%xmm1\r
+        xorps   %xmm0,%xmm4\r
+        movups  48(%esi),%xmm0\r
+        xorps   %xmm1,%xmm5\r
+        movups  64(%esi),%xmm7\r
+        xorps   %xmm0,%xmm6\r
+        movups  %xmm2,(%edi)\r
+        movups  %xmm3,16(%edi)\r
+        pxor    %xmm3,%xmm3\r
+        movups  %xmm4,32(%edi)\r
+        pxor    %xmm4,%xmm4\r
+        movups  %xmm5,48(%edi)\r
+        pxor    %xmm5,%xmm5\r
+        leal    64(%edi),%edi\r
+        movaps  %xmm6,%xmm2\r
+        pxor    %xmm6,%xmm6\r
+        subl    $80,%eax\r
+        jmp     .L108cbc_dec_tail_collected\r
+.align  16\r
+.L104cbc_dec_one:\r
+        movups  (%edx),%xmm0\r
+        movups  16(%edx),%xmm1\r
+        leal    32(%edx),%edx\r
+        xorps   %xmm0,%xmm2\r
+.L109dec1_loop_20:\r
+.byte   102,15,56,222,209\r
+        decl    %ecx\r
+        movups  (%edx),%xmm1\r
+        leal    16(%edx),%edx\r
+        jnz     .L109dec1_loop_20\r
+.byte   102,15,56,223,209\r
+        xorps   %xmm7,%xmm2\r
+        movaps  %xmm6,%xmm7\r
+        subl    $16,%eax\r
+        jmp     .L108cbc_dec_tail_collected\r
+.align  16\r
+.L105cbc_dec_two:\r
+        call    _aesni_decrypt2\r
+        xorps   %xmm7,%xmm2\r
+        xorps   %xmm6,%xmm3\r
+        movups  %xmm2,(%edi)\r
+        movaps  %xmm3,%xmm2\r
+        pxor    %xmm3,%xmm3\r
+        leal    16(%edi),%edi\r
+        movaps  %xmm5,%xmm7\r
+        subl    $32,%eax\r
+        jmp     .L108cbc_dec_tail_collected\r
+.align  16\r
+.L106cbc_dec_three:\r
+        call    _aesni_decrypt3\r
+        xorps   %xmm7,%xmm2\r
+        xorps   %xmm6,%xmm3\r
+        xorps   %xmm5,%xmm4\r
+        movups  %xmm2,(%edi)\r
+        movaps  %xmm4,%xmm2\r
+        pxor    %xmm4,%xmm4\r
+        movups  %xmm3,16(%edi)\r
+        pxor    %xmm3,%xmm3\r
+        leal    32(%edi),%edi\r
+        movups  32(%esi),%xmm7\r
+        subl    $48,%eax\r
+        jmp     .L108cbc_dec_tail_collected\r
+.align  16\r
+.L107cbc_dec_four:\r
+        call    _aesni_decrypt4\r
+        movups  16(%esi),%xmm1\r
+        movups  32(%esi),%xmm0\r
+        xorps   %xmm7,%xmm2\r
+        movups  48(%esi),%xmm7\r
+        xorps   %xmm6,%xmm3\r
+        movups  %xmm2,(%edi)\r
+        xorps   %xmm1,%xmm4\r
+        movups  %xmm3,16(%edi)\r
+        pxor    %xmm3,%xmm3\r
+        xorps   %xmm0,%xmm5\r
+        movups  %xmm4,32(%edi)\r
+        pxor    %xmm4,%xmm4\r
+        leal    48(%edi),%edi\r
+        movaps  %xmm5,%xmm2\r
+        pxor    %xmm5,%xmm5\r
+        subl    $64,%eax\r
+        jmp     .L108cbc_dec_tail_collected\r
+.align  16\r
+.L103cbc_dec_clear_tail_collected:\r
+        pxor    %xmm3,%xmm3\r
+        pxor    %xmm4,%xmm4\r
+        pxor    %xmm5,%xmm5\r
+        pxor    %xmm6,%xmm6\r
+.L108cbc_dec_tail_collected:\r
+        andl    $15,%eax\r
+        jnz     .L110cbc_dec_tail_partial\r
+        movups  %xmm2,(%edi)\r
+        pxor    %xmm0,%xmm0\r
+        jmp     .L099cbc_ret\r
+.align  16\r
+.L110cbc_dec_tail_partial:\r
+        movaps  %xmm2,(%esp)\r
+        pxor    %xmm0,%xmm0\r
+        movl    $16,%ecx\r
+        movl    %esp,%esi\r
+        subl    %eax,%ecx\r
+.long   2767451785\r
+        movdqa  %xmm2,(%esp)\r
+.L099cbc_ret:\r
+        movl    16(%esp),%esp\r
+        movl    36(%esp),%ebp\r
+        pxor    %xmm2,%xmm2\r
+        pxor    %xmm1,%xmm1\r
+        movups  %xmm7,(%ebp)\r
+        pxor    %xmm7,%xmm7\r
+.L094cbc_abort:\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   aesni_cbc_encrypt,.-.L_aesni_cbc_encrypt_begin\r
+.type   _aesni_set_encrypt_key,@function\r
+.align  16\r
+_aesni_set_encrypt_key:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        testl   %eax,%eax\r
+        jz      .L111bad_pointer\r
+        testl   %edx,%edx\r
+        jz      .L111bad_pointer\r
+        call    .L112pic\r
+.L112pic:\r
+        popl    %ebx\r
+        leal    .Lkey_const-.L112pic(%ebx),%ebx\r
+        leal    OPENSSL_ia32cap_P,%ebp\r
+        movups  (%eax),%xmm0\r
+        xorps   %xmm4,%xmm4\r
+        movl    4(%ebp),%ebp\r
+        leal    16(%edx),%edx\r
+        andl    $268437504,%ebp\r
+        cmpl    $256,%ecx\r
+        je      .L11314rounds\r
+        cmpl    $192,%ecx\r
+        je      .L11412rounds\r
+        cmpl    $128,%ecx\r
+        jne     .L115bad_keybits\r
+.align  16\r
+.L11610rounds:\r
+        cmpl    $268435456,%ebp\r
+        je      .L11710rounds_alt\r
+        movl    $9,%ecx\r
+        movups  %xmm0,-16(%edx)\r
+.byte   102,15,58,223,200,1\r
+        call    .L118key_128_cold\r
+.byte   102,15,58,223,200,2\r
+        call    .L119key_128\r
+.byte   102,15,58,223,200,4\r
+        call    .L119key_128\r
+.byte   102,15,58,223,200,8\r
+        call    .L119key_128\r
+.byte   102,15,58,223,200,16\r
+        call    .L119key_128\r
+.byte   102,15,58,223,200,32\r
+        call    .L119key_128\r
+.byte   102,15,58,223,200,64\r
+        call    .L119key_128\r
+.byte   102,15,58,223,200,128\r
+        call    .L119key_128\r
+.byte   102,15,58,223,200,27\r
+        call    .L119key_128\r
+.byte   102,15,58,223,200,54\r
+        call    .L119key_128\r
+        movups  %xmm0,(%edx)\r
+        movl    %ecx,80(%edx)\r
+        jmp     .L120good_key\r
+.align  16\r
+.L119key_128:\r
+        movups  %xmm0,(%edx)\r
+        leal    16(%edx),%edx\r
+.L118key_128_cold:\r
+        shufps  $16,%xmm0,%xmm4\r
+        xorps   %xmm4,%xmm0\r
+        shufps  $140,%xmm0,%xmm4\r
+        xorps   %xmm4,%xmm0\r
+        shufps  $255,%xmm1,%xmm1\r
+        xorps   %xmm1,%xmm0\r
+        ret\r
+.align  16\r
+.L11710rounds_alt:\r
+        movdqa  (%ebx),%xmm5\r
+        movl    $8,%ecx\r
+        movdqa  32(%ebx),%xmm4\r
+        movdqa  %xmm0,%xmm2\r
+        movdqu  %xmm0,-16(%edx)\r
+.L121loop_key128:\r
+.byte   102,15,56,0,197\r
+.byte   102,15,56,221,196\r
+        pslld   $1,%xmm4\r
+        leal    16(%edx),%edx\r
+        movdqa  %xmm2,%xmm3\r
+        pslldq  $4,%xmm2\r
+        pxor    %xmm2,%xmm3\r
+        pslldq  $4,%xmm2\r
+        pxor    %xmm2,%xmm3\r
+        pslldq  $4,%xmm2\r
+        pxor    %xmm3,%xmm2\r
+        pxor    %xmm2,%xmm0\r
+        movdqu  %xmm0,-16(%edx)\r
+        movdqa  %xmm0,%xmm2\r
+        decl    %ecx\r
+        jnz     .L121loop_key128\r
+        movdqa  48(%ebx),%xmm4\r
+.byte   102,15,56,0,197\r
+.byte   102,15,56,221,196\r
+        pslld   $1,%xmm4\r
+        movdqa  %xmm2,%xmm3\r
+        pslldq  $4,%xmm2\r
+        pxor    %xmm2,%xmm3\r
+        pslldq  $4,%xmm2\r
+        pxor    %xmm2,%xmm3\r
+        pslldq  $4,%xmm2\r
+        pxor    %xmm3,%xmm2\r
+        pxor    %xmm2,%xmm0\r
+        movdqu  %xmm0,(%edx)\r
+        movdqa  %xmm0,%xmm2\r
+.byte   102,15,56,0,197\r
+.byte   102,15,56,221,196\r
+        movdqa  %xmm2,%xmm3\r
+        pslldq  $4,%xmm2\r
+        pxor    %xmm2,%xmm3\r
+        pslldq  $4,%xmm2\r
+        pxor    %xmm2,%xmm3\r
+        pslldq  $4,%xmm2\r
+        pxor    %xmm3,%xmm2\r
+        pxor    %xmm2,%xmm0\r
+        movdqu  %xmm0,16(%edx)\r
+        movl    $9,%ecx\r
+        movl    %ecx,96(%edx)\r
+        jmp     .L120good_key\r
+.align  16\r
+.L11412rounds:\r
+        movq    16(%eax),%xmm2\r
+        cmpl    $268435456,%ebp\r
+        je      .L12212rounds_alt\r
+        movl    $11,%ecx\r
+        movups  %xmm0,-16(%edx)\r
+.byte   102,15,58,223,202,1\r
+        call    .L123key_192a_cold\r
+.byte   102,15,58,223,202,2\r
+        call    .L124key_192b\r
+.byte   102,15,58,223,202,4\r
+        call    .L125key_192a\r
+.byte   102,15,58,223,202,8\r
+        call    .L124key_192b\r
+.byte   102,15,58,223,202,16\r
+        call    .L125key_192a\r
+.byte   102,15,58,223,202,32\r
+        call    .L124key_192b\r
+.byte   102,15,58,223,202,64\r
+        call    .L125key_192a\r
+.byte   102,15,58,223,202,128\r
+        call    .L124key_192b\r
+        movups  %xmm0,(%edx)\r
+        movl    %ecx,48(%edx)\r
+        jmp     .L120good_key\r
+.align  16\r
+.L125key_192a:\r
+        movups  %xmm0,(%edx)\r
+        leal    16(%edx),%edx\r
+.align  16\r
+.L123key_192a_cold:\r
+        movaps  %xmm2,%xmm5\r
+.L126key_192b_warm:\r
+        shufps  $16,%xmm0,%xmm4\r
+        movdqa  %xmm2,%xmm3\r
+        xorps   %xmm4,%xmm0\r
+        shufps  $140,%xmm0,%xmm4\r
+        pslldq  $4,%xmm3\r
+        xorps   %xmm4,%xmm0\r
+        pshufd  $85,%xmm1,%xmm1\r
+        pxor    %xmm3,%xmm2\r
+        pxor    %xmm1,%xmm0\r
+        pshufd  $255,%xmm0,%xmm3\r
+        pxor    %xmm3,%xmm2\r
+        ret\r
+.align  16\r
+.L124key_192b:\r
+        movaps  %xmm0,%xmm3\r
+        shufps  $68,%xmm0,%xmm5\r
+        movups  %xmm5,(%edx)\r
+        shufps  $78,%xmm2,%xmm3\r
+        movups  %xmm3,16(%edx)\r
+        leal    32(%edx),%edx\r
+        jmp     .L126key_192b_warm\r
+.align  16\r
+.L12212rounds_alt:\r
+        movdqa  16(%ebx),%xmm5\r
+        movdqa  32(%ebx),%xmm4\r
+        movl    $8,%ecx\r
+        movdqu  %xmm0,-16(%edx)\r
+.L127loop_key192:\r
+        movq    %xmm2,(%edx)\r
+        movdqa  %xmm2,%xmm1\r
+.byte   102,15,56,0,213\r
+.byte   102,15,56,221,212\r
+        pslld   $1,%xmm4\r
+        leal    24(%edx),%edx\r
+        movdqa  %xmm0,%xmm3\r
+        pslldq  $4,%xmm0\r
+        pxor    %xmm0,%xmm3\r
+        pslldq  $4,%xmm0\r
+        pxor    %xmm0,%xmm3\r
+        pslldq  $4,%xmm0\r
+        pxor    %xmm3,%xmm0\r
+        pshufd  $255,%xmm0,%xmm3\r
+        pxor    %xmm1,%xmm3\r
+        pslldq  $4,%xmm1\r
+        pxor    %xmm1,%xmm3\r
+        pxor    %xmm2,%xmm0\r
+        pxor    %xmm3,%xmm2\r
+        movdqu  %xmm0,-16(%edx)\r
+        decl    %ecx\r
+        jnz     .L127loop_key192\r
+        movl    $11,%ecx\r
+        movl    %ecx,32(%edx)\r
+        jmp     .L120good_key\r
+.align  16\r
+.L11314rounds:\r
+        movups  16(%eax),%xmm2\r
+        leal    16(%edx),%edx\r
+        cmpl    $268435456,%ebp\r
+        je      .L12814rounds_alt\r
+        movl    $13,%ecx\r
+        movups  %xmm0,-32(%edx)\r
+        movups  %xmm2,-16(%edx)\r
+.byte   102,15,58,223,202,1\r
+        call    .L129key_256a_cold\r
+.byte   102,15,58,223,200,1\r
+        call    .L130key_256b\r
+.byte   102,15,58,223,202,2\r
+        call    .L131key_256a\r
+.byte   102,15,58,223,200,2\r
+        call    .L130key_256b\r
+.byte   102,15,58,223,202,4\r
+        call    .L131key_256a\r
+.byte   102,15,58,223,200,4\r
+        call    .L130key_256b\r
+.byte   102,15,58,223,202,8\r
+        call    .L131key_256a\r
+.byte   102,15,58,223,200,8\r
+        call    .L130key_256b\r
+.byte   102,15,58,223,202,16\r
+        call    .L131key_256a\r
+.byte   102,15,58,223,200,16\r
+        call    .L130key_256b\r
+.byte   102,15,58,223,202,32\r
+        call    .L131key_256a\r
+.byte   102,15,58,223,200,32\r
+        call    .L130key_256b\r
+.byte   102,15,58,223,202,64\r
+        call    .L131key_256a\r
+        movups  %xmm0,(%edx)\r
+        movl    %ecx,16(%edx)\r
+        xorl    %eax,%eax\r
+        jmp     .L120good_key\r
+.align  16\r
+.L131key_256a:\r
+        movups  %xmm2,(%edx)\r
+        leal    16(%edx),%edx\r
+.L129key_256a_cold:\r
+        shufps  $16,%xmm0,%xmm4\r
+        xorps   %xmm4,%xmm0\r
+        shufps  $140,%xmm0,%xmm4\r
+        xorps   %xmm4,%xmm0\r
+        shufps  $255,%xmm1,%xmm1\r
+        xorps   %xmm1,%xmm0\r
+        ret\r
+.align  16\r
+.L130key_256b:\r
+        movups  %xmm0,(%edx)\r
+        leal    16(%edx),%edx\r
+        shufps  $16,%xmm2,%xmm4\r
+        xorps   %xmm4,%xmm2\r
+        shufps  $140,%xmm2,%xmm4\r
+        xorps   %xmm4,%xmm2\r
+        shufps  $170,%xmm1,%xmm1\r
+        xorps   %xmm1,%xmm2\r
+        ret\r
+.align  16\r
+.L12814rounds_alt:\r
+        movdqa  (%ebx),%xmm5\r
+        movdqa  32(%ebx),%xmm4\r
+        movl    $7,%ecx\r
+        movdqu  %xmm0,-32(%edx)\r
+        movdqa  %xmm2,%xmm1\r
+        movdqu  %xmm2,-16(%edx)\r
+.L132loop_key256:\r
+.byte   102,15,56,0,213\r
+.byte   102,15,56,221,212\r
+        movdqa  %xmm0,%xmm3\r
+        pslldq  $4,%xmm0\r
+        pxor    %xmm0,%xmm3\r
+        pslldq  $4,%xmm0\r
+        pxor    %xmm0,%xmm3\r
+        pslldq  $4,%xmm0\r
+        pxor    %xmm3,%xmm0\r
+        pslld   $1,%xmm4\r
+        pxor    %xmm2,%xmm0\r
+        movdqu  %xmm0,(%edx)\r
+        decl    %ecx\r
+        jz      .L133done_key256\r
+        pshufd  $255,%xmm0,%xmm2\r
+        pxor    %xmm3,%xmm3\r
+.byte   102,15,56,221,211\r
+        movdqa  %xmm1,%xmm3\r
+        pslldq  $4,%xmm1\r
+        pxor    %xmm1,%xmm3\r
+        pslldq  $4,%xmm1\r
+        pxor    %xmm1,%xmm3\r
+        pslldq  $4,%xmm1\r
+        pxor    %xmm3,%xmm1\r
+        pxor    %xmm1,%xmm2\r
+        movdqu  %xmm2,16(%edx)\r
+        leal    32(%edx),%edx\r
+        movdqa  %xmm2,%xmm1\r
+        jmp     .L132loop_key256\r
+.L133done_key256:\r
+        movl    $13,%ecx\r
+        movl    %ecx,16(%edx)\r
+.L120good_key:\r
+        pxor    %xmm0,%xmm0\r
+        pxor    %xmm1,%xmm1\r
+        pxor    %xmm2,%xmm2\r
+        pxor    %xmm3,%xmm3\r
+        pxor    %xmm4,%xmm4\r
+        pxor    %xmm5,%xmm5\r
+        xorl    %eax,%eax\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.align  4\r
+.L111bad_pointer:\r
+        movl    $-1,%eax\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.align  4\r
+.L115bad_keybits:\r
+        pxor    %xmm0,%xmm0\r
+        movl    $-2,%eax\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   _aesni_set_encrypt_key,.-_aesni_set_encrypt_key\r
+.globl  aesni_set_encrypt_key\r
+.type   aesni_set_encrypt_key,@function\r
+.align  16\r
+aesni_set_encrypt_key:\r
+.L_aesni_set_encrypt_key_begin:\r
+        movl    4(%esp),%eax\r
+        movl    8(%esp),%ecx\r
+        movl    12(%esp),%edx\r
+        call    _aesni_set_encrypt_key\r
+        ret\r
+.size   aesni_set_encrypt_key,.-.L_aesni_set_encrypt_key_begin\r
+.globl  aesni_set_decrypt_key\r
+.type   aesni_set_decrypt_key,@function\r
+.align  16\r
+aesni_set_decrypt_key:\r
+.L_aesni_set_decrypt_key_begin:\r
+        movl    4(%esp),%eax\r
+        movl    8(%esp),%ecx\r
+        movl    12(%esp),%edx\r
+        call    _aesni_set_encrypt_key\r
+        movl    12(%esp),%edx\r
+        shll    $4,%ecx\r
+        testl   %eax,%eax\r
+        jnz     .L134dec_key_ret\r
+        leal    16(%edx,%ecx,1),%eax\r
+        movups  (%edx),%xmm0\r
+        movups  (%eax),%xmm1\r
+        movups  %xmm0,(%eax)\r
+        movups  %xmm1,(%edx)\r
+        leal    16(%edx),%edx\r
+        leal    -16(%eax),%eax\r
+.L135dec_key_inverse:\r
+        movups  (%edx),%xmm0\r
+        movups  (%eax),%xmm1\r
+.byte   102,15,56,219,192\r
+.byte   102,15,56,219,201\r
+        leal    16(%edx),%edx\r
+        leal    -16(%eax),%eax\r
+        movups  %xmm0,16(%eax)\r
+        movups  %xmm1,-16(%edx)\r
+        cmpl    %edx,%eax\r
+        ja      .L135dec_key_inverse\r
+        movups  (%edx),%xmm0\r
+.byte   102,15,56,219,192\r
+        movups  %xmm0,(%edx)\r
+        pxor    %xmm0,%xmm0\r
+        pxor    %xmm1,%xmm1\r
+        xorl    %eax,%eax\r
+.L134dec_key_ret:\r
+        ret\r
+.size   aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin\r
+.align  64\r
+.Lkey_const:\r
+.long   202313229,202313229,202313229,202313229\r
+.long   67569157,67569157,67569157,67569157\r
+.long   1,1,1,1\r
+.long   27,27,27,27\r
+.byte   65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69\r
+.byte   83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83\r
+.byte   32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115\r
+.byte   115,108,46,111,114,103,62,0\r
+.comm   OPENSSL_ia32cap_P,16,4\r
diff --git a/CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/aes/vpaes-x86.S b/CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/aes/vpaes-x86.S
new file mode 100644 (file)
index 0000000..6f62534
--- /dev/null
@@ -0,0 +1,670 @@
+# WARNING: do not edit!\r
+# Generated from openssl/crypto/aes/asm/vpaes-x86.pl\r
+#\r
+# Copyright 2011-2020 The OpenSSL Project Authors. All Rights Reserved.\r
+#\r
+# Licensed under the OpenSSL license (the "License").  You may not use\r
+# this file except in compliance with the License.  You can obtain a copy\r
+# in the file LICENSE in the source distribution or at\r
+# https://www.openssl.org/source/license.html\r
+\r
+.text\r
+.align  64\r
+.L_vpaes_consts:\r
+.long   218628480,235210255,168496130,67568393\r
+.long   252381056,17041926,33884169,51187212\r
+.long   252645135,252645135,252645135,252645135\r
+.long   1512730624,3266504856,1377990664,3401244816\r
+.long   830229760,1275146365,2969422977,3447763452\r
+.long   3411033600,2979783055,338359620,2782886510\r
+.long   4209124096,907596821,221174255,1006095553\r
+.long   191964160,3799684038,3164090317,1589111125\r
+.long   182528256,1777043520,2877432650,3265356744\r
+.long   1874708224,3503451415,3305285752,363511674\r
+.long   1606117888,3487855781,1093350906,2384367825\r
+.long   197121,67569157,134941193,202313229\r
+.long   67569157,134941193,202313229,197121\r
+.long   134941193,202313229,197121,67569157\r
+.long   202313229,197121,67569157,134941193\r
+.long   33619971,100992007,168364043,235736079\r
+.long   235736079,33619971,100992007,168364043\r
+.long   168364043,235736079,33619971,100992007\r
+.long   100992007,168364043,235736079,33619971\r
+.long   50462976,117835012,185207048,252579084\r
+.long   252314880,51251460,117574920,184942860\r
+.long   184682752,252054788,50987272,118359308\r
+.long   118099200,185467140,251790600,50727180\r
+.long   2946363062,528716217,1300004225,1881839624\r
+.long   1532713819,1532713819,1532713819,1532713819\r
+.long   3602276352,4288629033,3737020424,4153884961\r
+.long   1354558464,32357713,2958822624,3775749553\r
+.long   1201988352,132424512,1572796698,503232858\r
+.long   2213177600,1597421020,4103937655,675398315\r
+.long   2749646592,4273543773,1511898873,121693092\r
+.long   3040248576,1103263732,2871565598,1608280554\r
+.long   2236667136,2588920351,482954393,64377734\r
+.long   3069987328,291237287,2117370568,3650299247\r
+.long   533321216,3573750986,2572112006,1401264716\r
+.long   1339849704,2721158661,548607111,3445553514\r
+.long   2128193280,3054596040,2183486460,1257083700\r
+.long   655635200,1165381986,3923443150,2344132524\r
+.long   190078720,256924420,290342170,357187870\r
+.long   1610966272,2263057382,4103205268,309794674\r
+.long   2592527872,2233205587,1335446729,3402964816\r
+.long   3973531904,3225098121,3002836325,1918774430\r
+.long   3870401024,2102906079,2284471353,4117666579\r
+.long   617007872,1021508343,366931923,691083277\r
+.long   2528395776,3491914898,2968704004,1613121270\r
+.long   3445188352,3247741094,844474987,4093578302\r
+.long   651481088,1190302358,1689581232,574775300\r
+.long   4289380608,206939853,2555985458,2489840491\r
+.long   2130264064,327674451,3566485037,3349835193\r
+.long   2470714624,316102159,3636825756,3393945945\r
+.byte   86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105\r
+.byte   111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83\r
+.byte   83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117\r
+.byte   114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105\r
+.byte   118,101,114,115,105,116,121,41,0\r
+.align  64\r
+.type   _vpaes_preheat,@function\r
+.align  16\r
+_vpaes_preheat:\r
+        addl    (%esp),%ebp\r
+        movdqa  -48(%ebp),%xmm7\r
+        movdqa  -16(%ebp),%xmm6\r
+        ret\r
+.size   _vpaes_preheat,.-_vpaes_preheat\r
+.type   _vpaes_encrypt_core,@function\r
+.align  16\r
+_vpaes_encrypt_core:\r
+        movl    $16,%ecx\r
+        movl    240(%edx),%eax\r
+        movdqa  %xmm6,%xmm1\r
+        movdqa  (%ebp),%xmm2\r
+        pandn   %xmm0,%xmm1\r
+        pand    %xmm6,%xmm0\r
+        movdqu  (%edx),%xmm5\r
+.byte   102,15,56,0,208\r
+        movdqa  16(%ebp),%xmm0\r
+        pxor    %xmm5,%xmm2\r
+        psrld   $4,%xmm1\r
+        addl    $16,%edx\r
+.byte   102,15,56,0,193\r
+        leal    192(%ebp),%ebx\r
+        pxor    %xmm2,%xmm0\r
+        jmp     .L000enc_entry\r
+.align  16\r
+.L001enc_loop:\r
+        movdqa  32(%ebp),%xmm4\r
+        movdqa  48(%ebp),%xmm0\r
+.byte   102,15,56,0,226\r
+.byte   102,15,56,0,195\r
+        pxor    %xmm5,%xmm4\r
+        movdqa  64(%ebp),%xmm5\r
+        pxor    %xmm4,%xmm0\r
+        movdqa  -64(%ebx,%ecx,1),%xmm1\r
+.byte   102,15,56,0,234\r
+        movdqa  80(%ebp),%xmm2\r
+        movdqa  (%ebx,%ecx,1),%xmm4\r
+.byte   102,15,56,0,211\r
+        movdqa  %xmm0,%xmm3\r
+        pxor    %xmm5,%xmm2\r
+.byte   102,15,56,0,193\r
+        addl    $16,%edx\r
+        pxor    %xmm2,%xmm0\r
+.byte   102,15,56,0,220\r
+        addl    $16,%ecx\r
+        pxor    %xmm0,%xmm3\r
+.byte   102,15,56,0,193\r
+        andl    $48,%ecx\r
+        subl    $1,%eax\r
+        pxor    %xmm3,%xmm0\r
+.L000enc_entry:\r
+        movdqa  %xmm6,%xmm1\r
+        movdqa  -32(%ebp),%xmm5\r
+        pandn   %xmm0,%xmm1\r
+        psrld   $4,%xmm1\r
+        pand    %xmm6,%xmm0\r
+.byte   102,15,56,0,232\r
+        movdqa  %xmm7,%xmm3\r
+        pxor    %xmm1,%xmm0\r
+.byte   102,15,56,0,217\r
+        movdqa  %xmm7,%xmm4\r
+        pxor    %xmm5,%xmm3\r
+.byte   102,15,56,0,224\r
+        movdqa  %xmm7,%xmm2\r
+        pxor    %xmm5,%xmm4\r
+.byte   102,15,56,0,211\r
+        movdqa  %xmm7,%xmm3\r
+        pxor    %xmm0,%xmm2\r
+.byte   102,15,56,0,220\r
+        movdqu  (%edx),%xmm5\r
+        pxor    %xmm1,%xmm3\r
+        jnz     .L001enc_loop\r
+        movdqa  96(%ebp),%xmm4\r
+        movdqa  112(%ebp),%xmm0\r
+.byte   102,15,56,0,226\r
+        pxor    %xmm5,%xmm4\r
+.byte   102,15,56,0,195\r
+        movdqa  64(%ebx,%ecx,1),%xmm1\r
+        pxor    %xmm4,%xmm0\r
+.byte   102,15,56,0,193\r
+        ret\r
+.size   _vpaes_encrypt_core,.-_vpaes_encrypt_core\r
+.type   _vpaes_decrypt_core,@function\r
+.align  16\r
+_vpaes_decrypt_core:\r
+        leal    608(%ebp),%ebx\r
+        movl    240(%edx),%eax\r
+        movdqa  %xmm6,%xmm1\r
+        movdqa  -64(%ebx),%xmm2\r
+        pandn   %xmm0,%xmm1\r
+        movl    %eax,%ecx\r
+        psrld   $4,%xmm1\r
+        movdqu  (%edx),%xmm5\r
+        shll    $4,%ecx\r
+        pand    %xmm6,%xmm0\r
+.byte   102,15,56,0,208\r
+        movdqa  -48(%ebx),%xmm0\r
+        xorl    $48,%ecx\r
+.byte   102,15,56,0,193\r
+        andl    $48,%ecx\r
+        pxor    %xmm5,%xmm2\r
+        movdqa  176(%ebp),%xmm5\r
+        pxor    %xmm2,%xmm0\r
+        addl    $16,%edx\r
+        leal    -352(%ebx,%ecx,1),%ecx\r
+        jmp     .L002dec_entry\r
+.align  16\r
+.L003dec_loop:\r
+        movdqa  -32(%ebx),%xmm4\r
+        movdqa  -16(%ebx),%xmm1\r
+.byte   102,15,56,0,226\r
+.byte   102,15,56,0,203\r
+        pxor    %xmm4,%xmm0\r
+        movdqa  (%ebx),%xmm4\r
+        pxor    %xmm1,%xmm0\r
+        movdqa  16(%ebx),%xmm1\r
+.byte   102,15,56,0,226\r
+.byte   102,15,56,0,197\r
+.byte   102,15,56,0,203\r
+        pxor    %xmm4,%xmm0\r
+        movdqa  32(%ebx),%xmm4\r
+        pxor    %xmm1,%xmm0\r
+        movdqa  48(%ebx),%xmm1\r
+.byte   102,15,56,0,226\r
+.byte   102,15,56,0,197\r
+.byte   102,15,56,0,203\r
+        pxor    %xmm4,%xmm0\r
+        movdqa  64(%ebx),%xmm4\r
+        pxor    %xmm1,%xmm0\r
+        movdqa  80(%ebx),%xmm1\r
+.byte   102,15,56,0,226\r
+.byte   102,15,56,0,197\r
+.byte   102,15,56,0,203\r
+        pxor    %xmm4,%xmm0\r
+        addl    $16,%edx\r
+.byte   102,15,58,15,237,12\r
+        pxor    %xmm1,%xmm0\r
+        subl    $1,%eax\r
+.L002dec_entry:\r
+        movdqa  %xmm6,%xmm1\r
+        movdqa  -32(%ebp),%xmm2\r
+        pandn   %xmm0,%xmm1\r
+        pand    %xmm6,%xmm0\r
+        psrld   $4,%xmm1\r
+.byte   102,15,56,0,208\r
+        movdqa  %xmm7,%xmm3\r
+        pxor    %xmm1,%xmm0\r
+.byte   102,15,56,0,217\r
+        movdqa  %xmm7,%xmm4\r
+        pxor    %xmm2,%xmm3\r
+.byte   102,15,56,0,224\r
+        pxor    %xmm2,%xmm4\r
+        movdqa  %xmm7,%xmm2\r
+.byte   102,15,56,0,211\r
+        movdqa  %xmm7,%xmm3\r
+        pxor    %xmm0,%xmm2\r
+.byte   102,15,56,0,220\r
+        movdqu  (%edx),%xmm0\r
+        pxor    %xmm1,%xmm3\r
+        jnz     .L003dec_loop\r
+        movdqa  96(%ebx),%xmm4\r
+.byte   102,15,56,0,226\r
+        pxor    %xmm0,%xmm4\r
+        movdqa  112(%ebx),%xmm0\r
+        movdqa  (%ecx),%xmm2\r
+.byte   102,15,56,0,195\r
+        pxor    %xmm4,%xmm0\r
+.byte   102,15,56,0,194\r
+        ret\r
+.size   _vpaes_decrypt_core,.-_vpaes_decrypt_core\r
+.type   _vpaes_schedule_core,@function\r
+.align  16\r
+_vpaes_schedule_core:\r
+        addl    (%esp),%ebp\r
+        movdqu  (%esi),%xmm0\r
+        movdqa  320(%ebp),%xmm2\r
+        movdqa  %xmm0,%xmm3\r
+        leal    (%ebp),%ebx\r
+        movdqa  %xmm2,4(%esp)\r
+        call    _vpaes_schedule_transform\r
+        movdqa  %xmm0,%xmm7\r
+        testl   %edi,%edi\r
+        jnz     .L004schedule_am_decrypting\r
+        movdqu  %xmm0,(%edx)\r
+        jmp     .L005schedule_go\r
+.L004schedule_am_decrypting:\r
+        movdqa  256(%ebp,%ecx,1),%xmm1\r
+.byte   102,15,56,0,217\r
+        movdqu  %xmm3,(%edx)\r
+        xorl    $48,%ecx\r
+.L005schedule_go:\r
+        cmpl    $192,%eax\r
+        ja      .L006schedule_256\r
+        je      .L007schedule_192\r
+.L008schedule_128:\r
+        movl    $10,%eax\r
+.L009loop_schedule_128:\r
+        call    _vpaes_schedule_round\r
+        decl    %eax\r
+        jz      .L010schedule_mangle_last\r
+        call    _vpaes_schedule_mangle\r
+        jmp     .L009loop_schedule_128\r
+.align  16\r
+.L007schedule_192:\r
+        movdqu  8(%esi),%xmm0\r
+        call    _vpaes_schedule_transform\r
+        movdqa  %xmm0,%xmm6\r
+        pxor    %xmm4,%xmm4\r
+        movhlps %xmm4,%xmm6\r
+        movl    $4,%eax\r
+.L011loop_schedule_192:\r
+        call    _vpaes_schedule_round\r
+.byte   102,15,58,15,198,8\r
+        call    _vpaes_schedule_mangle\r
+        call    _vpaes_schedule_192_smear\r
+        call    _vpaes_schedule_mangle\r
+        call    _vpaes_schedule_round\r
+        decl    %eax\r
+        jz      .L010schedule_mangle_last\r
+        call    _vpaes_schedule_mangle\r
+        call    _vpaes_schedule_192_smear\r
+        jmp     .L011loop_schedule_192\r
+.align  16\r
+.L006schedule_256:\r
+        movdqu  16(%esi),%xmm0\r
+        call    _vpaes_schedule_transform\r
+        movl    $7,%eax\r
+.L012loop_schedule_256:\r
+        call    _vpaes_schedule_mangle\r
+        movdqa  %xmm0,%xmm6\r
+        call    _vpaes_schedule_round\r
+        decl    %eax\r
+        jz      .L010schedule_mangle_last\r
+        call    _vpaes_schedule_mangle\r
+        pshufd  $255,%xmm0,%xmm0\r
+        movdqa  %xmm7,20(%esp)\r
+        movdqa  %xmm6,%xmm7\r
+        call    .L_vpaes_schedule_low_round\r
+        movdqa  20(%esp),%xmm7\r
+        jmp     .L012loop_schedule_256\r
+.align  16\r
+.L010schedule_mangle_last:\r
+        leal    384(%ebp),%ebx\r
+        testl   %edi,%edi\r
+        jnz     .L013schedule_mangle_last_dec\r
+        movdqa  256(%ebp,%ecx,1),%xmm1\r
+.byte   102,15,56,0,193\r
+        leal    352(%ebp),%ebx\r
+        addl    $32,%edx\r
+.L013schedule_mangle_last_dec:\r
+        addl    $-16,%edx\r
+        pxor    336(%ebp),%xmm0\r
+        call    _vpaes_schedule_transform\r
+        movdqu  %xmm0,(%edx)\r
+        pxor    %xmm0,%xmm0\r
+        pxor    %xmm1,%xmm1\r
+        pxor    %xmm2,%xmm2\r
+        pxor    %xmm3,%xmm3\r
+        pxor    %xmm4,%xmm4\r
+        pxor    %xmm5,%xmm5\r
+        pxor    %xmm6,%xmm6\r
+        pxor    %xmm7,%xmm7\r
+        ret\r
+.size   _vpaes_schedule_core,.-_vpaes_schedule_core\r
+.type   _vpaes_schedule_192_smear,@function\r
+.align  16\r
+_vpaes_schedule_192_smear:\r
+        pshufd  $128,%xmm6,%xmm1\r
+        pshufd  $254,%xmm7,%xmm0\r
+        pxor    %xmm1,%xmm6\r
+        pxor    %xmm1,%xmm1\r
+        pxor    %xmm0,%xmm6\r
+        movdqa  %xmm6,%xmm0\r
+        movhlps %xmm1,%xmm6\r
+        ret\r
+.size   _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear\r
+.type   _vpaes_schedule_round,@function\r
+.align  16\r
+_vpaes_schedule_round:\r
+        movdqa  8(%esp),%xmm2\r
+        pxor    %xmm1,%xmm1\r
+.byte   102,15,58,15,202,15\r
+.byte   102,15,58,15,210,15\r
+        pxor    %xmm1,%xmm7\r
+        pshufd  $255,%xmm0,%xmm0\r
+.byte   102,15,58,15,192,1\r
+        movdqa  %xmm2,8(%esp)\r
+.L_vpaes_schedule_low_round:\r
+        movdqa  %xmm7,%xmm1\r
+        pslldq  $4,%xmm7\r
+        pxor    %xmm1,%xmm7\r
+        movdqa  %xmm7,%xmm1\r
+        pslldq  $8,%xmm7\r
+        pxor    %xmm1,%xmm7\r
+        pxor    336(%ebp),%xmm7\r
+        movdqa  -16(%ebp),%xmm4\r
+        movdqa  -48(%ebp),%xmm5\r
+        movdqa  %xmm4,%xmm1\r
+        pandn   %xmm0,%xmm1\r
+        psrld   $4,%xmm1\r
+        pand    %xmm4,%xmm0\r
+        movdqa  -32(%ebp),%xmm2\r
+.byte   102,15,56,0,208\r
+        pxor    %xmm1,%xmm0\r
+        movdqa  %xmm5,%xmm3\r
+.byte   102,15,56,0,217\r
+        pxor    %xmm2,%xmm3\r
+        movdqa  %xmm5,%xmm4\r
+.byte   102,15,56,0,224\r
+        pxor    %xmm2,%xmm4\r
+        movdqa  %xmm5,%xmm2\r
+.byte   102,15,56,0,211\r
+        pxor    %xmm0,%xmm2\r
+        movdqa  %xmm5,%xmm3\r
+.byte   102,15,56,0,220\r
+        pxor    %xmm1,%xmm3\r
+        movdqa  32(%ebp),%xmm4\r
+.byte   102,15,56,0,226\r
+        movdqa  48(%ebp),%xmm0\r
+.byte   102,15,56,0,195\r
+        pxor    %xmm4,%xmm0\r
+        pxor    %xmm7,%xmm0\r
+        movdqa  %xmm0,%xmm7\r
+        ret\r
+.size   _vpaes_schedule_round,.-_vpaes_schedule_round\r
+.type   _vpaes_schedule_transform,@function\r
+.align  16\r
+_vpaes_schedule_transform:\r
+        movdqa  -16(%ebp),%xmm2\r
+        movdqa  %xmm2,%xmm1\r
+        pandn   %xmm0,%xmm1\r
+        psrld   $4,%xmm1\r
+        pand    %xmm2,%xmm0\r
+        movdqa  (%ebx),%xmm2\r
+.byte   102,15,56,0,208\r
+        movdqa  16(%ebx),%xmm0\r
+.byte   102,15,56,0,193\r
+        pxor    %xmm2,%xmm0\r
+        ret\r
+.size   _vpaes_schedule_transform,.-_vpaes_schedule_transform\r
+.type   _vpaes_schedule_mangle,@function\r
+.align  16\r
+_vpaes_schedule_mangle:\r
+        movdqa  %xmm0,%xmm4\r
+        movdqa  128(%ebp),%xmm5\r
+        testl   %edi,%edi\r
+        jnz     .L014schedule_mangle_dec\r
+        addl    $16,%edx\r
+        pxor    336(%ebp),%xmm4\r
+.byte   102,15,56,0,229\r
+        movdqa  %xmm4,%xmm3\r
+.byte   102,15,56,0,229\r
+        pxor    %xmm4,%xmm3\r
+.byte   102,15,56,0,229\r
+        pxor    %xmm4,%xmm3\r
+        jmp     .L015schedule_mangle_both\r
+.align  16\r
+.L014schedule_mangle_dec:\r
+        movdqa  -16(%ebp),%xmm2\r
+        leal    416(%ebp),%esi\r
+        movdqa  %xmm2,%xmm1\r
+        pandn   %xmm4,%xmm1\r
+        psrld   $4,%xmm1\r
+        pand    %xmm2,%xmm4\r
+        movdqa  (%esi),%xmm2\r
+.byte   102,15,56,0,212\r
+        movdqa  16(%esi),%xmm3\r
+.byte   102,15,56,0,217\r
+        pxor    %xmm2,%xmm3\r
+.byte   102,15,56,0,221\r
+        movdqa  32(%esi),%xmm2\r
+.byte   102,15,56,0,212\r
+        pxor    %xmm3,%xmm2\r
+        movdqa  48(%esi),%xmm3\r
+.byte   102,15,56,0,217\r
+        pxor    %xmm2,%xmm3\r
+.byte   102,15,56,0,221\r
+        movdqa  64(%esi),%xmm2\r
+.byte   102,15,56,0,212\r
+        pxor    %xmm3,%xmm2\r
+        movdqa  80(%esi),%xmm3\r
+.byte   102,15,56,0,217\r
+        pxor    %xmm2,%xmm3\r
+.byte   102,15,56,0,221\r
+        movdqa  96(%esi),%xmm2\r
+.byte   102,15,56,0,212\r
+        pxor    %xmm3,%xmm2\r
+        movdqa  112(%esi),%xmm3\r
+.byte   102,15,56,0,217\r
+        pxor    %xmm2,%xmm3\r
+        addl    $-16,%edx\r
+.L015schedule_mangle_both:\r
+        movdqa  256(%ebp,%ecx,1),%xmm1\r
+.byte   102,15,56,0,217\r
+        addl    $-16,%ecx\r
+        andl    $48,%ecx\r
+        movdqu  %xmm3,(%edx)\r
+        ret\r
+.size   _vpaes_schedule_mangle,.-_vpaes_schedule_mangle\r
+.globl  vpaes_set_encrypt_key\r
+.type   vpaes_set_encrypt_key,@function\r
+.align  16\r
+vpaes_set_encrypt_key:\r
+.L_vpaes_set_encrypt_key_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    20(%esp),%esi\r
+        leal    -56(%esp),%ebx\r
+        movl    24(%esp),%eax\r
+        andl    $-16,%ebx\r
+        movl    28(%esp),%edx\r
+        xchgl   %esp,%ebx\r
+        movl    %ebx,48(%esp)\r
+        movl    %eax,%ebx\r
+        shrl    $5,%ebx\r
+        addl    $5,%ebx\r
+        movl    %ebx,240(%edx)\r
+        movl    $48,%ecx\r
+        movl    $0,%edi\r
+        leal    .L_vpaes_consts+0x30-.L016pic_point,%ebp\r
+        call    _vpaes_schedule_core\r
+.L016pic_point:\r
+        movl    48(%esp),%esp\r
+        xorl    %eax,%eax\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin\r
+.globl  vpaes_set_decrypt_key\r
+.type   vpaes_set_decrypt_key,@function\r
+.align  16\r
+vpaes_set_decrypt_key:\r
+.L_vpaes_set_decrypt_key_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    20(%esp),%esi\r
+        leal    -56(%esp),%ebx\r
+        movl    24(%esp),%eax\r
+        andl    $-16,%ebx\r
+        movl    28(%esp),%edx\r
+        xchgl   %esp,%ebx\r
+        movl    %ebx,48(%esp)\r
+        movl    %eax,%ebx\r
+        shrl    $5,%ebx\r
+        addl    $5,%ebx\r
+        movl    %ebx,240(%edx)\r
+        shll    $4,%ebx\r
+        leal    16(%edx,%ebx,1),%edx\r
+        movl    $1,%edi\r
+        movl    %eax,%ecx\r
+        shrl    $1,%ecx\r
+        andl    $32,%ecx\r
+        xorl    $32,%ecx\r
+        leal    .L_vpaes_consts+0x30-.L017pic_point,%ebp\r
+        call    _vpaes_schedule_core\r
+.L017pic_point:\r
+        movl    48(%esp),%esp\r
+        xorl    %eax,%eax\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   vpaes_set_decrypt_key,.-.L_vpaes_set_decrypt_key_begin\r
+.globl  vpaes_encrypt\r
+.type   vpaes_encrypt,@function\r
+.align  16\r
+vpaes_encrypt:\r
+.L_vpaes_encrypt_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        leal    .L_vpaes_consts+0x30-.L018pic_point,%ebp\r
+        call    _vpaes_preheat\r
+.L018pic_point:\r
+        movl    20(%esp),%esi\r
+        leal    -56(%esp),%ebx\r
+        movl    24(%esp),%edi\r
+        andl    $-16,%ebx\r
+        movl    28(%esp),%edx\r
+        xchgl   %esp,%ebx\r
+        movl    %ebx,48(%esp)\r
+        movdqu  (%esi),%xmm0\r
+        call    _vpaes_encrypt_core\r
+        movdqu  %xmm0,(%edi)\r
+        movl    48(%esp),%esp\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   vpaes_encrypt,.-.L_vpaes_encrypt_begin\r
+.globl  vpaes_decrypt\r
+.type   vpaes_decrypt,@function\r
+.align  16\r
+vpaes_decrypt:\r
+.L_vpaes_decrypt_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        leal    .L_vpaes_consts+0x30-.L019pic_point,%ebp\r
+        call    _vpaes_preheat\r
+.L019pic_point:\r
+        movl    20(%esp),%esi\r
+        leal    -56(%esp),%ebx\r
+        movl    24(%esp),%edi\r
+        andl    $-16,%ebx\r
+        movl    28(%esp),%edx\r
+        xchgl   %esp,%ebx\r
+        movl    %ebx,48(%esp)\r
+        movdqu  (%esi),%xmm0\r
+        call    _vpaes_decrypt_core\r
+        movdqu  %xmm0,(%edi)\r
+        movl    48(%esp),%esp\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   vpaes_decrypt,.-.L_vpaes_decrypt_begin\r
+.globl  vpaes_cbc_encrypt\r
+.type   vpaes_cbc_encrypt,@function\r
+.align  16\r
+vpaes_cbc_encrypt:\r
+.L_vpaes_cbc_encrypt_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    20(%esp),%esi\r
+        movl    24(%esp),%edi\r
+        movl    28(%esp),%eax\r
+        movl    32(%esp),%edx\r
+        subl    $16,%eax\r
+        jc      .L020cbc_abort\r
+        leal    -56(%esp),%ebx\r
+        movl    36(%esp),%ebp\r
+        andl    $-16,%ebx\r
+        movl    40(%esp),%ecx\r
+        xchgl   %esp,%ebx\r
+        movdqu  (%ebp),%xmm1\r
+        subl    %esi,%edi\r
+        movl    %ebx,48(%esp)\r
+        movl    %edi,(%esp)\r
+        movl    %edx,4(%esp)\r
+        movl    %ebp,8(%esp)\r
+        movl    %eax,%edi\r
+        leal    .L_vpaes_consts+0x30-.L021pic_point,%ebp\r
+        call    _vpaes_preheat\r
+.L021pic_point:\r
+        cmpl    $0,%ecx\r
+        je      .L022cbc_dec_loop\r
+        jmp     .L023cbc_enc_loop\r
+.align  16\r
+.L023cbc_enc_loop:\r
+        movdqu  (%esi),%xmm0\r
+        pxor    %xmm1,%xmm0\r
+        call    _vpaes_encrypt_core\r
+        movl    (%esp),%ebx\r
+        movl    4(%esp),%edx\r
+        movdqa  %xmm0,%xmm1\r
+        movdqu  %xmm0,(%ebx,%esi,1)\r
+        leal    16(%esi),%esi\r
+        subl    $16,%edi\r
+        jnc     .L023cbc_enc_loop\r
+        jmp     .L024cbc_done\r
+.align  16\r
+.L022cbc_dec_loop:\r
+        movdqu  (%esi),%xmm0\r
+        movdqa  %xmm1,16(%esp)\r
+        movdqa  %xmm0,32(%esp)\r
+        call    _vpaes_decrypt_core\r
+        movl    (%esp),%ebx\r
+        movl    4(%esp),%edx\r
+        pxor    16(%esp),%xmm0\r
+        movdqa  32(%esp),%xmm1\r
+        movdqu  %xmm0,(%ebx,%esi,1)\r
+        leal    16(%esi),%esi\r
+        subl    $16,%edi\r
+        jnc     .L022cbc_dec_loop\r
+.L024cbc_done:\r
+        movl    8(%esp),%ebx\r
+        movl    48(%esp),%esp\r
+        movdqu  %xmm1,(%ebx)\r
+.L020cbc_abort:\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   vpaes_cbc_encrypt,.-.L_vpaes_cbc_encrypt_begin\r
diff --git a/CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/modes/ghash-x86.S b/CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/modes/ghash-x86.S
new file mode 100644 (file)
index 0000000..f52b445
--- /dev/null
@@ -0,0 +1,703 @@
+# WARNING: do not edit!\r
+# Generated from openssl/crypto/modes/asm/ghash-x86.pl\r
+#\r
+# Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved.\r
+#\r
+# Licensed under the OpenSSL license (the "License").  You may not use\r
+# this file except in compliance with the License.  You can obtain a copy\r
+# in the file LICENSE in the source distribution or at\r
+# https://www.openssl.org/source/license.html\r
+\r
+.text\r
+.globl  gcm_gmult_4bit_x86\r
+.type   gcm_gmult_4bit_x86,@function\r
+.align  16\r
+gcm_gmult_4bit_x86:\r
+.L_gcm_gmult_4bit_x86_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        subl    $84,%esp\r
+        movl    104(%esp),%edi\r
+        movl    108(%esp),%esi\r
+        movl    (%edi),%ebp\r
+        movl    4(%edi),%edx\r
+        movl    8(%edi),%ecx\r
+        movl    12(%edi),%ebx\r
+        movl    $0,16(%esp)\r
+        movl    $471859200,20(%esp)\r
+        movl    $943718400,24(%esp)\r
+        movl    $610271232,28(%esp)\r
+        movl    $1887436800,32(%esp)\r
+        movl    $1822425088,36(%esp)\r
+        movl    $1220542464,40(%esp)\r
+        movl    $1423966208,44(%esp)\r
+        movl    $3774873600,48(%esp)\r
+        movl    $4246732800,52(%esp)\r
+        movl    $3644850176,56(%esp)\r
+        movl    $3311403008,60(%esp)\r
+        movl    $2441084928,64(%esp)\r
+        movl    $2376073216,68(%esp)\r
+        movl    $2847932416,72(%esp)\r
+        movl    $3051356160,76(%esp)\r
+        movl    %ebp,(%esp)\r
+        movl    %edx,4(%esp)\r
+        movl    %ecx,8(%esp)\r
+        movl    %ebx,12(%esp)\r
+        shrl    $20,%ebx\r
+        andl    $240,%ebx\r
+        movl    4(%esi,%ebx,1),%ebp\r
+        movl    (%esi,%ebx,1),%edx\r
+        movl    12(%esi,%ebx,1),%ecx\r
+        movl    8(%esi,%ebx,1),%ebx\r
+        xorl    %eax,%eax\r
+        movl    $15,%edi\r
+        jmp     .L000x86_loop\r
+.align  16\r
+.L000x86_loop:\r
+        movb    %bl,%al\r
+        shrdl   $4,%ecx,%ebx\r
+        andb    $15,%al\r
+        shrdl   $4,%edx,%ecx\r
+        shrdl   $4,%ebp,%edx\r
+        shrl    $4,%ebp\r
+        xorl    16(%esp,%eax,4),%ebp\r
+        movb    (%esp,%edi,1),%al\r
+        andb    $240,%al\r
+        xorl    8(%esi,%eax,1),%ebx\r
+        xorl    12(%esi,%eax,1),%ecx\r
+        xorl    (%esi,%eax,1),%edx\r
+        xorl    4(%esi,%eax,1),%ebp\r
+        decl    %edi\r
+        js      .L001x86_break\r
+        movb    %bl,%al\r
+        shrdl   $4,%ecx,%ebx\r
+        andb    $15,%al\r
+        shrdl   $4,%edx,%ecx\r
+        shrdl   $4,%ebp,%edx\r
+        shrl    $4,%ebp\r
+        xorl    16(%esp,%eax,4),%ebp\r
+        movb    (%esp,%edi,1),%al\r
+        shlb    $4,%al\r
+        xorl    8(%esi,%eax,1),%ebx\r
+        xorl    12(%esi,%eax,1),%ecx\r
+        xorl    (%esi,%eax,1),%edx\r
+        xorl    4(%esi,%eax,1),%ebp\r
+        jmp     .L000x86_loop\r
+.align  16\r
+.L001x86_break:\r
+        bswap   %ebx\r
+        bswap   %ecx\r
+        bswap   %edx\r
+        bswap   %ebp\r
+        movl    104(%esp),%edi\r
+        movl    %ebx,12(%edi)\r
+        movl    %ecx,8(%edi)\r
+        movl    %edx,4(%edi)\r
+        movl    %ebp,(%edi)\r
+        addl    $84,%esp\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   gcm_gmult_4bit_x86,.-.L_gcm_gmult_4bit_x86_begin\r
+.globl  gcm_ghash_4bit_x86\r
+.type   gcm_ghash_4bit_x86,@function\r
+.align  16\r
+gcm_ghash_4bit_x86:\r
+.L_gcm_ghash_4bit_x86_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        subl    $84,%esp\r
+        movl    104(%esp),%ebx\r
+        movl    108(%esp),%esi\r
+        movl    112(%esp),%edi\r
+        movl    116(%esp),%ecx\r
+        addl    %edi,%ecx\r
+        movl    %ecx,116(%esp)\r
+        movl    (%ebx),%ebp\r
+        movl    4(%ebx),%edx\r
+        movl    8(%ebx),%ecx\r
+        movl    12(%ebx),%ebx\r
+        movl    $0,16(%esp)\r
+        movl    $471859200,20(%esp)\r
+        movl    $943718400,24(%esp)\r
+        movl    $610271232,28(%esp)\r
+        movl    $1887436800,32(%esp)\r
+        movl    $1822425088,36(%esp)\r
+        movl    $1220542464,40(%esp)\r
+        movl    $1423966208,44(%esp)\r
+        movl    $3774873600,48(%esp)\r
+        movl    $4246732800,52(%esp)\r
+        movl    $3644850176,56(%esp)\r
+        movl    $3311403008,60(%esp)\r
+        movl    $2441084928,64(%esp)\r
+        movl    $2376073216,68(%esp)\r
+        movl    $2847932416,72(%esp)\r
+        movl    $3051356160,76(%esp)\r
+.align  16\r
+.L002x86_outer_loop:\r
+        xorl    12(%edi),%ebx\r
+        xorl    8(%edi),%ecx\r
+        xorl    4(%edi),%edx\r
+        xorl    (%edi),%ebp\r
+        movl    %ebx,12(%esp)\r
+        movl    %ecx,8(%esp)\r
+        movl    %edx,4(%esp)\r
+        movl    %ebp,(%esp)\r
+        shrl    $20,%ebx\r
+        andl    $240,%ebx\r
+        movl    4(%esi,%ebx,1),%ebp\r
+        movl    (%esi,%ebx,1),%edx\r
+        movl    12(%esi,%ebx,1),%ecx\r
+        movl    8(%esi,%ebx,1),%ebx\r
+        xorl    %eax,%eax\r
+        movl    $15,%edi\r
+        jmp     .L003x86_loop\r
+.align  16\r
+.L003x86_loop:\r
+        movb    %bl,%al\r
+        shrdl   $4,%ecx,%ebx\r
+        andb    $15,%al\r
+        shrdl   $4,%edx,%ecx\r
+        shrdl   $4,%ebp,%edx\r
+        shrl    $4,%ebp\r
+        xorl    16(%esp,%eax,4),%ebp\r
+        movb    (%esp,%edi,1),%al\r
+        andb    $240,%al\r
+        xorl    8(%esi,%eax,1),%ebx\r
+        xorl    12(%esi,%eax,1),%ecx\r
+        xorl    (%esi,%eax,1),%edx\r
+        xorl    4(%esi,%eax,1),%ebp\r
+        decl    %edi\r
+        js      .L004x86_break\r
+        movb    %bl,%al\r
+        shrdl   $4,%ecx,%ebx\r
+        andb    $15,%al\r
+        shrdl   $4,%edx,%ecx\r
+        shrdl   $4,%ebp,%edx\r
+        shrl    $4,%ebp\r
+        xorl    16(%esp,%eax,4),%ebp\r
+        movb    (%esp,%edi,1),%al\r
+        shlb    $4,%al\r
+        xorl    8(%esi,%eax,1),%ebx\r
+        xorl    12(%esi,%eax,1),%ecx\r
+        xorl    (%esi,%eax,1),%edx\r
+        xorl    4(%esi,%eax,1),%ebp\r
+        jmp     .L003x86_loop\r
+.align  16\r
+.L004x86_break:\r
+        bswap   %ebx\r
+        bswap   %ecx\r
+        bswap   %edx\r
+        bswap   %ebp\r
+        movl    112(%esp),%edi\r
+        leal    16(%edi),%edi\r
+        cmpl    116(%esp),%edi\r
+        movl    %edi,112(%esp)\r
+        jb      .L002x86_outer_loop\r
+        movl    104(%esp),%edi\r
+        movl    %ebx,12(%edi)\r
+        movl    %ecx,8(%edi)\r
+        movl    %edx,4(%edi)\r
+        movl    %ebp,(%edi)\r
+        addl    $84,%esp\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   gcm_ghash_4bit_x86,.-.L_gcm_ghash_4bit_x86_begin\r
+.type   _mmx_gmult_4bit_inner,@function\r
+.align  16\r
+_mmx_gmult_4bit_inner:\r
+        xorl    %ecx,%ecx\r
+        movl    %ebx,%edx\r
+        movb    %dl,%cl\r
+        shlb    $4,%cl\r
+        andl    $240,%edx\r
+        movq    8(%esi,%ecx,1),%mm0\r
+        movq    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    14(%edi),%cl\r
+        psllq   $60,%mm2\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    13(%edi),%cl\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    12(%edi),%cl\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    11(%edi),%cl\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    10(%edi),%cl\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    9(%edi),%cl\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    8(%edi),%cl\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    7(%edi),%cl\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    6(%edi),%cl\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    5(%edi),%cl\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    4(%edi),%cl\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    3(%edi),%cl\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    2(%edi),%cl\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    1(%edi),%cl\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        movb    (%edi),%cl\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movl    %ecx,%edx\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        shlb    $4,%cl\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%ecx,1),%mm0\r
+        psllq   $60,%mm2\r
+        andl    $240,%edx\r
+        pxor    (%eax,%ebp,8),%mm1\r
+        andl    $15,%ebx\r
+        pxor    (%esi,%ecx,1),%mm1\r
+        movd    %mm0,%ebp\r
+        pxor    %mm2,%mm0\r
+        psrlq   $4,%mm0\r
+        movq    %mm1,%mm2\r
+        psrlq   $4,%mm1\r
+        pxor    8(%esi,%edx,1),%mm0\r
+        psllq   $60,%mm2\r
+        pxor    (%eax,%ebx,8),%mm1\r
+        andl    $15,%ebp\r
+        pxor    (%esi,%edx,1),%mm1\r
+        movd    %mm0,%ebx\r
+        pxor    %mm2,%mm0\r
+        movl    4(%eax,%ebp,8),%edi\r
+        psrlq   $32,%mm0\r
+        movd    %mm1,%edx\r
+        psrlq   $32,%mm1\r
+        movd    %mm0,%ecx\r
+        movd    %mm1,%ebp\r
+        shll    $4,%edi\r
+        bswap   %ebx\r
+        bswap   %edx\r
+        bswap   %ecx\r
+        xorl    %edi,%ebp\r
+        bswap   %ebp\r
+        ret\r
+.size   _mmx_gmult_4bit_inner,.-_mmx_gmult_4bit_inner\r
+.globl  gcm_gmult_4bit_mmx\r
+.type   gcm_gmult_4bit_mmx,@function\r
+.align  16\r
+gcm_gmult_4bit_mmx:\r
+.L_gcm_gmult_4bit_mmx_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    20(%esp),%edi\r
+        movl    24(%esp),%esi\r
+        call    .L005pic_point\r
+.L005pic_point:\r
+        popl    %eax\r
+        leal    .Lrem_4bit-.L005pic_point(%eax),%eax\r
+        movzbl  15(%edi),%ebx\r
+        call    _mmx_gmult_4bit_inner\r
+        movl    20(%esp),%edi\r
+        emms\r
+        movl    %ebx,12(%edi)\r
+        movl    %edx,4(%edi)\r
+        movl    %ecx,8(%edi)\r
+        movl    %ebp,(%edi)\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   gcm_gmult_4bit_mmx,.-.L_gcm_gmult_4bit_mmx_begin\r
+.globl  gcm_ghash_4bit_mmx\r
+.type   gcm_ghash_4bit_mmx,@function\r
+.align  16\r
+gcm_ghash_4bit_mmx:\r
+.L_gcm_ghash_4bit_mmx_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    20(%esp),%ebp\r
+        movl    24(%esp),%esi\r
+        movl    28(%esp),%edi\r
+        movl    32(%esp),%ecx\r
+        call    .L006pic_point\r
+.L006pic_point:\r
+        popl    %eax\r
+        leal    .Lrem_4bit-.L006pic_point(%eax),%eax\r
+        addl    %edi,%ecx\r
+        movl    %ecx,32(%esp)\r
+        subl    $20,%esp\r
+        movl    12(%ebp),%ebx\r
+        movl    4(%ebp),%edx\r
+        movl    8(%ebp),%ecx\r
+        movl    (%ebp),%ebp\r
+        jmp     .L007mmx_outer_loop\r
+.align  16\r
+.L007mmx_outer_loop:\r
+        xorl    12(%edi),%ebx\r
+        xorl    4(%edi),%edx\r
+        xorl    8(%edi),%ecx\r
+        xorl    (%edi),%ebp\r
+        movl    %edi,48(%esp)\r
+        movl    %ebx,12(%esp)\r
+        movl    %edx,4(%esp)\r
+        movl    %ecx,8(%esp)\r
+        movl    %ebp,(%esp)\r
+        movl    %esp,%edi\r
+        shrl    $24,%ebx\r
+        call    _mmx_gmult_4bit_inner\r
+        movl    48(%esp),%edi\r
+        leal    16(%edi),%edi\r
+        cmpl    52(%esp),%edi\r
+        jb      .L007mmx_outer_loop\r
+        movl    40(%esp),%edi\r
+        emms\r
+        movl    %ebx,12(%edi)\r
+        movl    %edx,4(%edi)\r
+        movl    %ecx,8(%edi)\r
+        movl    %ebp,(%edi)\r
+        addl    $20,%esp\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   gcm_ghash_4bit_mmx,.-.L_gcm_ghash_4bit_mmx_begin\r
+.align  64\r
+.Lrem_4bit:\r
+.long   0,0,0,29491200,0,58982400,0,38141952\r
+.long   0,117964800,0,113901568,0,76283904,0,88997888\r
+.long   0,235929600,0,265420800,0,227803136,0,206962688\r
+.long   0,152567808,0,148504576,0,177995776,0,190709760\r
+.byte   71,72,65,83,72,32,102,111,114,32,120,56,54,44,32,67\r
+.byte   82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112\r
+.byte   112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62\r
+.byte   0\r
diff --git a/CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/sha/sha1-586.S b/CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/sha/sha1-586.S
new file mode 100644 (file)
index 0000000..0b22a3e
--- /dev/null
@@ -0,0 +1,1389 @@
+# WARNING: do not edit!\r
+# Generated from openssl/crypto/sha/asm/sha1-586.pl\r
+#\r
+# Copyright 1998-2020 The OpenSSL Project Authors. All Rights Reserved.\r
+#\r
+# Licensed under the OpenSSL license (the "License").  You may not use\r
+# this file except in compliance with the License.  You can obtain a copy\r
+# in the file LICENSE in the source distribution or at\r
+# https://www.openssl.org/source/license.html\r
+\r
+.text\r
+.globl  sha1_block_data_order\r
+.type   sha1_block_data_order,@function\r
+.align  16\r
+sha1_block_data_order:\r
+.L_sha1_block_data_order_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    20(%esp),%ebp\r
+        movl    24(%esp),%esi\r
+        movl    28(%esp),%eax\r
+        subl    $76,%esp\r
+        shll    $6,%eax\r
+        addl    %esi,%eax\r
+        movl    %eax,104(%esp)\r
+        movl    16(%ebp),%edi\r
+        jmp     .L000loop\r
+.align  16\r
+.L000loop:\r
+        movl    (%esi),%eax\r
+        movl    4(%esi),%ebx\r
+        movl    8(%esi),%ecx\r
+        movl    12(%esi),%edx\r
+        bswap   %eax\r
+        bswap   %ebx\r
+        bswap   %ecx\r
+        bswap   %edx\r
+        movl    %eax,(%esp)\r
+        movl    %ebx,4(%esp)\r
+        movl    %ecx,8(%esp)\r
+        movl    %edx,12(%esp)\r
+        movl    16(%esi),%eax\r
+        movl    20(%esi),%ebx\r
+        movl    24(%esi),%ecx\r
+        movl    28(%esi),%edx\r
+        bswap   %eax\r
+        bswap   %ebx\r
+        bswap   %ecx\r
+        bswap   %edx\r
+        movl    %eax,16(%esp)\r
+        movl    %ebx,20(%esp)\r
+        movl    %ecx,24(%esp)\r
+        movl    %edx,28(%esp)\r
+        movl    32(%esi),%eax\r
+        movl    36(%esi),%ebx\r
+        movl    40(%esi),%ecx\r
+        movl    44(%esi),%edx\r
+        bswap   %eax\r
+        bswap   %ebx\r
+        bswap   %ecx\r
+        bswap   %edx\r
+        movl    %eax,32(%esp)\r
+        movl    %ebx,36(%esp)\r
+        movl    %ecx,40(%esp)\r
+        movl    %edx,44(%esp)\r
+        movl    48(%esi),%eax\r
+        movl    52(%esi),%ebx\r
+        movl    56(%esi),%ecx\r
+        movl    60(%esi),%edx\r
+        bswap   %eax\r
+        bswap   %ebx\r
+        bswap   %ecx\r
+        bswap   %edx\r
+        movl    %eax,48(%esp)\r
+        movl    %ebx,52(%esp)\r
+        movl    %ecx,56(%esp)\r
+        movl    %edx,60(%esp)\r
+        movl    %esi,100(%esp)\r
+        movl    (%ebp),%eax\r
+        movl    4(%ebp),%ebx\r
+        movl    8(%ebp),%ecx\r
+        movl    12(%ebp),%edx\r
+\r
+        movl    %ecx,%esi\r
+        movl    %eax,%ebp\r
+        roll    $5,%ebp\r
+        xorl    %edx,%esi\r
+        addl    %edi,%ebp\r
+        movl    (%esp),%edi\r
+        andl    %ebx,%esi\r
+        rorl    $2,%ebx\r
+        xorl    %edx,%esi\r
+        leal    1518500249(%ebp,%edi,1),%ebp\r
+        addl    %esi,%ebp\r
+\r
+        movl    %ebx,%edi\r
+        movl    %ebp,%esi\r
+        roll    $5,%ebp\r
+        xorl    %ecx,%edi\r
+        addl    %edx,%ebp\r
+        movl    4(%esp),%edx\r
+        andl    %eax,%edi\r
+        rorl    $2,%eax\r
+        xorl    %ecx,%edi\r
+        leal    1518500249(%ebp,%edx,1),%ebp\r
+        addl    %edi,%ebp\r
+\r
+        movl    %eax,%edx\r
+        movl    %ebp,%edi\r
+        roll    $5,%ebp\r
+        xorl    %ebx,%edx\r
+        addl    %ecx,%ebp\r
+        movl    8(%esp),%ecx\r
+        andl    %esi,%edx\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%edx\r
+        leal    1518500249(%ebp,%ecx,1),%ebp\r
+        addl    %edx,%ebp\r
+\r
+        movl    %esi,%ecx\r
+        movl    %ebp,%edx\r
+        roll    $5,%ebp\r
+        xorl    %eax,%ecx\r
+        addl    %ebx,%ebp\r
+        movl    12(%esp),%ebx\r
+        andl    %edi,%ecx\r
+        rorl    $2,%edi\r
+        xorl    %eax,%ecx\r
+        leal    1518500249(%ebp,%ebx,1),%ebp\r
+        addl    %ecx,%ebp\r
+\r
+        movl    %edi,%ebx\r
+        movl    %ebp,%ecx\r
+        roll    $5,%ebp\r
+        xorl    %esi,%ebx\r
+        addl    %eax,%ebp\r
+        movl    16(%esp),%eax\r
+        andl    %edx,%ebx\r
+        rorl    $2,%edx\r
+        xorl    %esi,%ebx\r
+        leal    1518500249(%ebp,%eax,1),%ebp\r
+        addl    %ebx,%ebp\r
+\r
+        movl    %edx,%eax\r
+        movl    %ebp,%ebx\r
+        roll    $5,%ebp\r
+        xorl    %edi,%eax\r
+        addl    %esi,%ebp\r
+        movl    20(%esp),%esi\r
+        andl    %ecx,%eax\r
+        rorl    $2,%ecx\r
+        xorl    %edi,%eax\r
+        leal    1518500249(%ebp,%esi,1),%ebp\r
+        addl    %eax,%ebp\r
+\r
+        movl    %ecx,%esi\r
+        movl    %ebp,%eax\r
+        roll    $5,%ebp\r
+        xorl    %edx,%esi\r
+        addl    %edi,%ebp\r
+        movl    24(%esp),%edi\r
+        andl    %ebx,%esi\r
+        rorl    $2,%ebx\r
+        xorl    %edx,%esi\r
+        leal    1518500249(%ebp,%edi,1),%ebp\r
+        addl    %esi,%ebp\r
+\r
+        movl    %ebx,%edi\r
+        movl    %ebp,%esi\r
+        roll    $5,%ebp\r
+        xorl    %ecx,%edi\r
+        addl    %edx,%ebp\r
+        movl    28(%esp),%edx\r
+        andl    %eax,%edi\r
+        rorl    $2,%eax\r
+        xorl    %ecx,%edi\r
+        leal    1518500249(%ebp,%edx,1),%ebp\r
+        addl    %edi,%ebp\r
+\r
+        movl    %eax,%edx\r
+        movl    %ebp,%edi\r
+        roll    $5,%ebp\r
+        xorl    %ebx,%edx\r
+        addl    %ecx,%ebp\r
+        movl    32(%esp),%ecx\r
+        andl    %esi,%edx\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%edx\r
+        leal    1518500249(%ebp,%ecx,1),%ebp\r
+        addl    %edx,%ebp\r
+\r
+        movl    %esi,%ecx\r
+        movl    %ebp,%edx\r
+        roll    $5,%ebp\r
+        xorl    %eax,%ecx\r
+        addl    %ebx,%ebp\r
+        movl    36(%esp),%ebx\r
+        andl    %edi,%ecx\r
+        rorl    $2,%edi\r
+        xorl    %eax,%ecx\r
+        leal    1518500249(%ebp,%ebx,1),%ebp\r
+        addl    %ecx,%ebp\r
+\r
+        movl    %edi,%ebx\r
+        movl    %ebp,%ecx\r
+        roll    $5,%ebp\r
+        xorl    %esi,%ebx\r
+        addl    %eax,%ebp\r
+        movl    40(%esp),%eax\r
+        andl    %edx,%ebx\r
+        rorl    $2,%edx\r
+        xorl    %esi,%ebx\r
+        leal    1518500249(%ebp,%eax,1),%ebp\r
+        addl    %ebx,%ebp\r
+\r
+        movl    %edx,%eax\r
+        movl    %ebp,%ebx\r
+        roll    $5,%ebp\r
+        xorl    %edi,%eax\r
+        addl    %esi,%ebp\r
+        movl    44(%esp),%esi\r
+        andl    %ecx,%eax\r
+        rorl    $2,%ecx\r
+        xorl    %edi,%eax\r
+        leal    1518500249(%ebp,%esi,1),%ebp\r
+        addl    %eax,%ebp\r
+\r
+        movl    %ecx,%esi\r
+        movl    %ebp,%eax\r
+        roll    $5,%ebp\r
+        xorl    %edx,%esi\r
+        addl    %edi,%ebp\r
+        movl    48(%esp),%edi\r
+        andl    %ebx,%esi\r
+        rorl    $2,%ebx\r
+        xorl    %edx,%esi\r
+        leal    1518500249(%ebp,%edi,1),%ebp\r
+        addl    %esi,%ebp\r
+\r
+        movl    %ebx,%edi\r
+        movl    %ebp,%esi\r
+        roll    $5,%ebp\r
+        xorl    %ecx,%edi\r
+        addl    %edx,%ebp\r
+        movl    52(%esp),%edx\r
+        andl    %eax,%edi\r
+        rorl    $2,%eax\r
+        xorl    %ecx,%edi\r
+        leal    1518500249(%ebp,%edx,1),%ebp\r
+        addl    %edi,%ebp\r
+\r
+        movl    %eax,%edx\r
+        movl    %ebp,%edi\r
+        roll    $5,%ebp\r
+        xorl    %ebx,%edx\r
+        addl    %ecx,%ebp\r
+        movl    56(%esp),%ecx\r
+        andl    %esi,%edx\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%edx\r
+        leal    1518500249(%ebp,%ecx,1),%ebp\r
+        addl    %edx,%ebp\r
+\r
+        movl    %esi,%ecx\r
+        movl    %ebp,%edx\r
+        roll    $5,%ebp\r
+        xorl    %eax,%ecx\r
+        addl    %ebx,%ebp\r
+        movl    60(%esp),%ebx\r
+        andl    %edi,%ecx\r
+        rorl    $2,%edi\r
+        xorl    %eax,%ecx\r
+        leal    1518500249(%ebp,%ebx,1),%ebp\r
+        movl    (%esp),%ebx\r
+        addl    %ebp,%ecx\r
+\r
+        movl    %edi,%ebp\r
+        xorl    8(%esp),%ebx\r
+        xorl    %esi,%ebp\r
+        xorl    32(%esp),%ebx\r
+        andl    %edx,%ebp\r
+        xorl    52(%esp),%ebx\r
+        roll    $1,%ebx\r
+        xorl    %esi,%ebp\r
+        addl    %ebp,%eax\r
+        movl    %ecx,%ebp\r
+        rorl    $2,%edx\r
+        movl    %ebx,(%esp)\r
+        roll    $5,%ebp\r
+        leal    1518500249(%ebx,%eax,1),%ebx\r
+        movl    4(%esp),%eax\r
+        addl    %ebp,%ebx\r
+\r
+        movl    %edx,%ebp\r
+        xorl    12(%esp),%eax\r
+        xorl    %edi,%ebp\r
+        xorl    36(%esp),%eax\r
+        andl    %ecx,%ebp\r
+        xorl    56(%esp),%eax\r
+        roll    $1,%eax\r
+        xorl    %edi,%ebp\r
+        addl    %ebp,%esi\r
+        movl    %ebx,%ebp\r
+        rorl    $2,%ecx\r
+        movl    %eax,4(%esp)\r
+        roll    $5,%ebp\r
+        leal    1518500249(%eax,%esi,1),%eax\r
+        movl    8(%esp),%esi\r
+        addl    %ebp,%eax\r
+\r
+        movl    %ecx,%ebp\r
+        xorl    16(%esp),%esi\r
+        xorl    %edx,%ebp\r
+        xorl    40(%esp),%esi\r
+        andl    %ebx,%ebp\r
+        xorl    60(%esp),%esi\r
+        roll    $1,%esi\r
+        xorl    %edx,%ebp\r
+        addl    %ebp,%edi\r
+        movl    %eax,%ebp\r
+        rorl    $2,%ebx\r
+        movl    %esi,8(%esp)\r
+        roll    $5,%ebp\r
+        leal    1518500249(%esi,%edi,1),%esi\r
+        movl    12(%esp),%edi\r
+        addl    %ebp,%esi\r
+\r
+        movl    %ebx,%ebp\r
+        xorl    20(%esp),%edi\r
+        xorl    %ecx,%ebp\r
+        xorl    44(%esp),%edi\r
+        andl    %eax,%ebp\r
+        xorl    (%esp),%edi\r
+        roll    $1,%edi\r
+        xorl    %ecx,%ebp\r
+        addl    %ebp,%edx\r
+        movl    %esi,%ebp\r
+        rorl    $2,%eax\r
+        movl    %edi,12(%esp)\r
+        roll    $5,%ebp\r
+        leal    1518500249(%edi,%edx,1),%edi\r
+        movl    16(%esp),%edx\r
+        addl    %ebp,%edi\r
+\r
+        movl    %esi,%ebp\r
+        xorl    24(%esp),%edx\r
+        xorl    %eax,%ebp\r
+        xorl    48(%esp),%edx\r
+        xorl    %ebx,%ebp\r
+        xorl    4(%esp),%edx\r
+        roll    $1,%edx\r
+        addl    %ebp,%ecx\r
+        rorl    $2,%esi\r
+        movl    %edi,%ebp\r
+        roll    $5,%ebp\r
+        movl    %edx,16(%esp)\r
+        leal    1859775393(%edx,%ecx,1),%edx\r
+        movl    20(%esp),%ecx\r
+        addl    %ebp,%edx\r
+\r
+        movl    %edi,%ebp\r
+        xorl    28(%esp),%ecx\r
+        xorl    %esi,%ebp\r
+        xorl    52(%esp),%ecx\r
+        xorl    %eax,%ebp\r
+        xorl    8(%esp),%ecx\r
+        roll    $1,%ecx\r
+        addl    %ebp,%ebx\r
+        rorl    $2,%edi\r
+        movl    %edx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %ecx,20(%esp)\r
+        leal    1859775393(%ecx,%ebx,1),%ecx\r
+        movl    24(%esp),%ebx\r
+        addl    %ebp,%ecx\r
+\r
+        movl    %edx,%ebp\r
+        xorl    32(%esp),%ebx\r
+        xorl    %edi,%ebp\r
+        xorl    56(%esp),%ebx\r
+        xorl    %esi,%ebp\r
+        xorl    12(%esp),%ebx\r
+        roll    $1,%ebx\r
+        addl    %ebp,%eax\r
+        rorl    $2,%edx\r
+        movl    %ecx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %ebx,24(%esp)\r
+        leal    1859775393(%ebx,%eax,1),%ebx\r
+        movl    28(%esp),%eax\r
+        addl    %ebp,%ebx\r
+\r
+        movl    %ecx,%ebp\r
+        xorl    36(%esp),%eax\r
+        xorl    %edx,%ebp\r
+        xorl    60(%esp),%eax\r
+        xorl    %edi,%ebp\r
+        xorl    16(%esp),%eax\r
+        roll    $1,%eax\r
+        addl    %ebp,%esi\r
+        rorl    $2,%ecx\r
+        movl    %ebx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %eax,28(%esp)\r
+        leal    1859775393(%eax,%esi,1),%eax\r
+        movl    32(%esp),%esi\r
+        addl    %ebp,%eax\r
+\r
+        movl    %ebx,%ebp\r
+        xorl    40(%esp),%esi\r
+        xorl    %ecx,%ebp\r
+        xorl    (%esp),%esi\r
+        xorl    %edx,%ebp\r
+        xorl    20(%esp),%esi\r
+        roll    $1,%esi\r
+        addl    %ebp,%edi\r
+        rorl    $2,%ebx\r
+        movl    %eax,%ebp\r
+        roll    $5,%ebp\r
+        movl    %esi,32(%esp)\r
+        leal    1859775393(%esi,%edi,1),%esi\r
+        movl    36(%esp),%edi\r
+        addl    %ebp,%esi\r
+\r
+        movl    %eax,%ebp\r
+        xorl    44(%esp),%edi\r
+        xorl    %ebx,%ebp\r
+        xorl    4(%esp),%edi\r
+        xorl    %ecx,%ebp\r
+        xorl    24(%esp),%edi\r
+        roll    $1,%edi\r
+        addl    %ebp,%edx\r
+        rorl    $2,%eax\r
+        movl    %esi,%ebp\r
+        roll    $5,%ebp\r
+        movl    %edi,36(%esp)\r
+        leal    1859775393(%edi,%edx,1),%edi\r
+        movl    40(%esp),%edx\r
+        addl    %ebp,%edi\r
+\r
+        movl    %esi,%ebp\r
+        xorl    48(%esp),%edx\r
+        xorl    %eax,%ebp\r
+        xorl    8(%esp),%edx\r
+        xorl    %ebx,%ebp\r
+        xorl    28(%esp),%edx\r
+        roll    $1,%edx\r
+        addl    %ebp,%ecx\r
+        rorl    $2,%esi\r
+        movl    %edi,%ebp\r
+        roll    $5,%ebp\r
+        movl    %edx,40(%esp)\r
+        leal    1859775393(%edx,%ecx,1),%edx\r
+        movl    44(%esp),%ecx\r
+        addl    %ebp,%edx\r
+\r
+        movl    %edi,%ebp\r
+        xorl    52(%esp),%ecx\r
+        xorl    %esi,%ebp\r
+        xorl    12(%esp),%ecx\r
+        xorl    %eax,%ebp\r
+        xorl    32(%esp),%ecx\r
+        roll    $1,%ecx\r
+        addl    %ebp,%ebx\r
+        rorl    $2,%edi\r
+        movl    %edx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %ecx,44(%esp)\r
+        leal    1859775393(%ecx,%ebx,1),%ecx\r
+        movl    48(%esp),%ebx\r
+        addl    %ebp,%ecx\r
+\r
+        movl    %edx,%ebp\r
+        xorl    56(%esp),%ebx\r
+        xorl    %edi,%ebp\r
+        xorl    16(%esp),%ebx\r
+        xorl    %esi,%ebp\r
+        xorl    36(%esp),%ebx\r
+        roll    $1,%ebx\r
+        addl    %ebp,%eax\r
+        rorl    $2,%edx\r
+        movl    %ecx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %ebx,48(%esp)\r
+        leal    1859775393(%ebx,%eax,1),%ebx\r
+        movl    52(%esp),%eax\r
+        addl    %ebp,%ebx\r
+\r
+        movl    %ecx,%ebp\r
+        xorl    60(%esp),%eax\r
+        xorl    %edx,%ebp\r
+        xorl    20(%esp),%eax\r
+        xorl    %edi,%ebp\r
+        xorl    40(%esp),%eax\r
+        roll    $1,%eax\r
+        addl    %ebp,%esi\r
+        rorl    $2,%ecx\r
+        movl    %ebx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %eax,52(%esp)\r
+        leal    1859775393(%eax,%esi,1),%eax\r
+        movl    56(%esp),%esi\r
+        addl    %ebp,%eax\r
+\r
+        movl    %ebx,%ebp\r
+        xorl    (%esp),%esi\r
+        xorl    %ecx,%ebp\r
+        xorl    24(%esp),%esi\r
+        xorl    %edx,%ebp\r
+        xorl    44(%esp),%esi\r
+        roll    $1,%esi\r
+        addl    %ebp,%edi\r
+        rorl    $2,%ebx\r
+        movl    %eax,%ebp\r
+        roll    $5,%ebp\r
+        movl    %esi,56(%esp)\r
+        leal    1859775393(%esi,%edi,1),%esi\r
+        movl    60(%esp),%edi\r
+        addl    %ebp,%esi\r
+\r
+        movl    %eax,%ebp\r
+        xorl    4(%esp),%edi\r
+        xorl    %ebx,%ebp\r
+        xorl    28(%esp),%edi\r
+        xorl    %ecx,%ebp\r
+        xorl    48(%esp),%edi\r
+        roll    $1,%edi\r
+        addl    %ebp,%edx\r
+        rorl    $2,%eax\r
+        movl    %esi,%ebp\r
+        roll    $5,%ebp\r
+        movl    %edi,60(%esp)\r
+        leal    1859775393(%edi,%edx,1),%edi\r
+        movl    (%esp),%edx\r
+        addl    %ebp,%edi\r
+\r
+        movl    %esi,%ebp\r
+        xorl    8(%esp),%edx\r
+        xorl    %eax,%ebp\r
+        xorl    32(%esp),%edx\r
+        xorl    %ebx,%ebp\r
+        xorl    52(%esp),%edx\r
+        roll    $1,%edx\r
+        addl    %ebp,%ecx\r
+        rorl    $2,%esi\r
+        movl    %edi,%ebp\r
+        roll    $5,%ebp\r
+        movl    %edx,(%esp)\r
+        leal    1859775393(%edx,%ecx,1),%edx\r
+        movl    4(%esp),%ecx\r
+        addl    %ebp,%edx\r
+\r
+        movl    %edi,%ebp\r
+        xorl    12(%esp),%ecx\r
+        xorl    %esi,%ebp\r
+        xorl    36(%esp),%ecx\r
+        xorl    %eax,%ebp\r
+        xorl    56(%esp),%ecx\r
+        roll    $1,%ecx\r
+        addl    %ebp,%ebx\r
+        rorl    $2,%edi\r
+        movl    %edx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %ecx,4(%esp)\r
+        leal    1859775393(%ecx,%ebx,1),%ecx\r
+        movl    8(%esp),%ebx\r
+        addl    %ebp,%ecx\r
+\r
+        movl    %edx,%ebp\r
+        xorl    16(%esp),%ebx\r
+        xorl    %edi,%ebp\r
+        xorl    40(%esp),%ebx\r
+        xorl    %esi,%ebp\r
+        xorl    60(%esp),%ebx\r
+        roll    $1,%ebx\r
+        addl    %ebp,%eax\r
+        rorl    $2,%edx\r
+        movl    %ecx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %ebx,8(%esp)\r
+        leal    1859775393(%ebx,%eax,1),%ebx\r
+        movl    12(%esp),%eax\r
+        addl    %ebp,%ebx\r
+\r
+        movl    %ecx,%ebp\r
+        xorl    20(%esp),%eax\r
+        xorl    %edx,%ebp\r
+        xorl    44(%esp),%eax\r
+        xorl    %edi,%ebp\r
+        xorl    (%esp),%eax\r
+        roll    $1,%eax\r
+        addl    %ebp,%esi\r
+        rorl    $2,%ecx\r
+        movl    %ebx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %eax,12(%esp)\r
+        leal    1859775393(%eax,%esi,1),%eax\r
+        movl    16(%esp),%esi\r
+        addl    %ebp,%eax\r
+\r
+        movl    %ebx,%ebp\r
+        xorl    24(%esp),%esi\r
+        xorl    %ecx,%ebp\r
+        xorl    48(%esp),%esi\r
+        xorl    %edx,%ebp\r
+        xorl    4(%esp),%esi\r
+        roll    $1,%esi\r
+        addl    %ebp,%edi\r
+        rorl    $2,%ebx\r
+        movl    %eax,%ebp\r
+        roll    $5,%ebp\r
+        movl    %esi,16(%esp)\r
+        leal    1859775393(%esi,%edi,1),%esi\r
+        movl    20(%esp),%edi\r
+        addl    %ebp,%esi\r
+\r
+        movl    %eax,%ebp\r
+        xorl    28(%esp),%edi\r
+        xorl    %ebx,%ebp\r
+        xorl    52(%esp),%edi\r
+        xorl    %ecx,%ebp\r
+        xorl    8(%esp),%edi\r
+        roll    $1,%edi\r
+        addl    %ebp,%edx\r
+        rorl    $2,%eax\r
+        movl    %esi,%ebp\r
+        roll    $5,%ebp\r
+        movl    %edi,20(%esp)\r
+        leal    1859775393(%edi,%edx,1),%edi\r
+        movl    24(%esp),%edx\r
+        addl    %ebp,%edi\r
+\r
+        movl    %esi,%ebp\r
+        xorl    32(%esp),%edx\r
+        xorl    %eax,%ebp\r
+        xorl    56(%esp),%edx\r
+        xorl    %ebx,%ebp\r
+        xorl    12(%esp),%edx\r
+        roll    $1,%edx\r
+        addl    %ebp,%ecx\r
+        rorl    $2,%esi\r
+        movl    %edi,%ebp\r
+        roll    $5,%ebp\r
+        movl    %edx,24(%esp)\r
+        leal    1859775393(%edx,%ecx,1),%edx\r
+        movl    28(%esp),%ecx\r
+        addl    %ebp,%edx\r
+\r
+        movl    %edi,%ebp\r
+        xorl    36(%esp),%ecx\r
+        xorl    %esi,%ebp\r
+        xorl    60(%esp),%ecx\r
+        xorl    %eax,%ebp\r
+        xorl    16(%esp),%ecx\r
+        roll    $1,%ecx\r
+        addl    %ebp,%ebx\r
+        rorl    $2,%edi\r
+        movl    %edx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %ecx,28(%esp)\r
+        leal    1859775393(%ecx,%ebx,1),%ecx\r
+        movl    32(%esp),%ebx\r
+        addl    %ebp,%ecx\r
+\r
+        movl    %edi,%ebp\r
+        xorl    40(%esp),%ebx\r
+        xorl    %esi,%ebp\r
+        xorl    (%esp),%ebx\r
+        andl    %edx,%ebp\r
+        xorl    20(%esp),%ebx\r
+        roll    $1,%ebx\r
+        addl    %eax,%ebp\r
+        rorl    $2,%edx\r
+        movl    %ecx,%eax\r
+        roll    $5,%eax\r
+        movl    %ebx,32(%esp)\r
+        leal    2400959708(%ebx,%ebp,1),%ebx\r
+        movl    %edi,%ebp\r
+        addl    %eax,%ebx\r
+        andl    %esi,%ebp\r
+        movl    36(%esp),%eax\r
+        addl    %ebp,%ebx\r
+\r
+        movl    %edx,%ebp\r
+        xorl    44(%esp),%eax\r
+        xorl    %edi,%ebp\r
+        xorl    4(%esp),%eax\r
+        andl    %ecx,%ebp\r
+        xorl    24(%esp),%eax\r
+        roll    $1,%eax\r
+        addl    %esi,%ebp\r
+        rorl    $2,%ecx\r
+        movl    %ebx,%esi\r
+        roll    $5,%esi\r
+        movl    %eax,36(%esp)\r
+        leal    2400959708(%eax,%ebp,1),%eax\r
+        movl    %edx,%ebp\r
+        addl    %esi,%eax\r
+        andl    %edi,%ebp\r
+        movl    40(%esp),%esi\r
+        addl    %ebp,%eax\r
+\r
+        movl    %ecx,%ebp\r
+        xorl    48(%esp),%esi\r
+        xorl    %edx,%ebp\r
+        xorl    8(%esp),%esi\r
+        andl    %ebx,%ebp\r
+        xorl    28(%esp),%esi\r
+        roll    $1,%esi\r
+        addl    %edi,%ebp\r
+        rorl    $2,%ebx\r
+        movl    %eax,%edi\r
+        roll    $5,%edi\r
+        movl    %esi,40(%esp)\r
+        leal    2400959708(%esi,%ebp,1),%esi\r
+        movl    %ecx,%ebp\r
+        addl    %edi,%esi\r
+        andl    %edx,%ebp\r
+        movl    44(%esp),%edi\r
+        addl    %ebp,%esi\r
+\r
+        movl    %ebx,%ebp\r
+        xorl    52(%esp),%edi\r
+        xorl    %ecx,%ebp\r
+        xorl    12(%esp),%edi\r
+        andl    %eax,%ebp\r
+        xorl    32(%esp),%edi\r
+        roll    $1,%edi\r
+        addl    %edx,%ebp\r
+        rorl    $2,%eax\r
+        movl    %esi,%edx\r
+        roll    $5,%edx\r
+        movl    %edi,44(%esp)\r
+        leal    2400959708(%edi,%ebp,1),%edi\r
+        movl    %ebx,%ebp\r
+        addl    %edx,%edi\r
+        andl    %ecx,%ebp\r
+        movl    48(%esp),%edx\r
+        addl    %ebp,%edi\r
+\r
+        movl    %eax,%ebp\r
+        xorl    56(%esp),%edx\r
+        xorl    %ebx,%ebp\r
+        xorl    16(%esp),%edx\r
+        andl    %esi,%ebp\r
+        xorl    36(%esp),%edx\r
+        roll    $1,%edx\r
+        addl    %ecx,%ebp\r
+        rorl    $2,%esi\r
+        movl    %edi,%ecx\r
+        roll    $5,%ecx\r
+        movl    %edx,48(%esp)\r
+        leal    2400959708(%edx,%ebp,1),%edx\r
+        movl    %eax,%ebp\r
+        addl    %ecx,%edx\r
+        andl    %ebx,%ebp\r
+        movl    52(%esp),%ecx\r
+        addl    %ebp,%edx\r
+\r
+        movl    %esi,%ebp\r
+        xorl    60(%esp),%ecx\r
+        xorl    %eax,%ebp\r
+        xorl    20(%esp),%ecx\r
+        andl    %edi,%ebp\r
+        xorl    40(%esp),%ecx\r
+        roll    $1,%ecx\r
+        addl    %ebx,%ebp\r
+        rorl    $2,%edi\r
+        movl    %edx,%ebx\r
+        roll    $5,%ebx\r
+        movl    %ecx,52(%esp)\r
+        leal    2400959708(%ecx,%ebp,1),%ecx\r
+        movl    %esi,%ebp\r
+        addl    %ebx,%ecx\r
+        andl    %eax,%ebp\r
+        movl    56(%esp),%ebx\r
+        addl    %ebp,%ecx\r
+\r
+        movl    %edi,%ebp\r
+        xorl    (%esp),%ebx\r
+        xorl    %esi,%ebp\r
+        xorl    24(%esp),%ebx\r
+        andl    %edx,%ebp\r
+        xorl    44(%esp),%ebx\r
+        roll    $1,%ebx\r
+        addl    %eax,%ebp\r
+        rorl    $2,%edx\r
+        movl    %ecx,%eax\r
+        roll    $5,%eax\r
+        movl    %ebx,56(%esp)\r
+        leal    2400959708(%ebx,%ebp,1),%ebx\r
+        movl    %edi,%ebp\r
+        addl    %eax,%ebx\r
+        andl    %esi,%ebp\r
+        movl    60(%esp),%eax\r
+        addl    %ebp,%ebx\r
+\r
+        movl    %edx,%ebp\r
+        xorl    4(%esp),%eax\r
+        xorl    %edi,%ebp\r
+        xorl    28(%esp),%eax\r
+        andl    %ecx,%ebp\r
+        xorl    48(%esp),%eax\r
+        roll    $1,%eax\r
+        addl    %esi,%ebp\r
+        rorl    $2,%ecx\r
+        movl    %ebx,%esi\r
+        roll    $5,%esi\r
+        movl    %eax,60(%esp)\r
+        leal    2400959708(%eax,%ebp,1),%eax\r
+        movl    %edx,%ebp\r
+        addl    %esi,%eax\r
+        andl    %edi,%ebp\r
+        movl    (%esp),%esi\r
+        addl    %ebp,%eax\r
+\r
+        movl    %ecx,%ebp\r
+        xorl    8(%esp),%esi\r
+        xorl    %edx,%ebp\r
+        xorl    32(%esp),%esi\r
+        andl    %ebx,%ebp\r
+        xorl    52(%esp),%esi\r
+        roll    $1,%esi\r
+        addl    %edi,%ebp\r
+        rorl    $2,%ebx\r
+        movl    %eax,%edi\r
+        roll    $5,%edi\r
+        movl    %esi,(%esp)\r
+        leal    2400959708(%esi,%ebp,1),%esi\r
+        movl    %ecx,%ebp\r
+        addl    %edi,%esi\r
+        andl    %edx,%ebp\r
+        movl    4(%esp),%edi\r
+        addl    %ebp,%esi\r
+\r
+        movl    %ebx,%ebp\r
+        xorl    12(%esp),%edi\r
+        xorl    %ecx,%ebp\r
+        xorl    36(%esp),%edi\r
+        andl    %eax,%ebp\r
+        xorl    56(%esp),%edi\r
+        roll    $1,%edi\r
+        addl    %edx,%ebp\r
+        rorl    $2,%eax\r
+        movl    %esi,%edx\r
+        roll    $5,%edx\r
+        movl    %edi,4(%esp)\r
+        leal    2400959708(%edi,%ebp,1),%edi\r
+        movl    %ebx,%ebp\r
+        addl    %edx,%edi\r
+        andl    %ecx,%ebp\r
+        movl    8(%esp),%edx\r
+        addl    %ebp,%edi\r
+\r
+        movl    %eax,%ebp\r
+        xorl    16(%esp),%edx\r
+        xorl    %ebx,%ebp\r
+        xorl    40(%esp),%edx\r
+        andl    %esi,%ebp\r
+        xorl    60(%esp),%edx\r
+        roll    $1,%edx\r
+        addl    %ecx,%ebp\r
+        rorl    $2,%esi\r
+        movl    %edi,%ecx\r
+        roll    $5,%ecx\r
+        movl    %edx,8(%esp)\r
+        leal    2400959708(%edx,%ebp,1),%edx\r
+        movl    %eax,%ebp\r
+        addl    %ecx,%edx\r
+        andl    %ebx,%ebp\r
+        movl    12(%esp),%ecx\r
+        addl    %ebp,%edx\r
+\r
+        movl    %esi,%ebp\r
+        xorl    20(%esp),%ecx\r
+        xorl    %eax,%ebp\r
+        xorl    44(%esp),%ecx\r
+        andl    %edi,%ebp\r
+        xorl    (%esp),%ecx\r
+        roll    $1,%ecx\r
+        addl    %ebx,%ebp\r
+        rorl    $2,%edi\r
+        movl    %edx,%ebx\r
+        roll    $5,%ebx\r
+        movl    %ecx,12(%esp)\r
+        leal    2400959708(%ecx,%ebp,1),%ecx\r
+        movl    %esi,%ebp\r
+        addl    %ebx,%ecx\r
+        andl    %eax,%ebp\r
+        movl    16(%esp),%ebx\r
+        addl    %ebp,%ecx\r
+\r
+        movl    %edi,%ebp\r
+        xorl    24(%esp),%ebx\r
+        xorl    %esi,%ebp\r
+        xorl    48(%esp),%ebx\r
+        andl    %edx,%ebp\r
+        xorl    4(%esp),%ebx\r
+        roll    $1,%ebx\r
+        addl    %eax,%ebp\r
+        rorl    $2,%edx\r
+        movl    %ecx,%eax\r
+        roll    $5,%eax\r
+        movl    %ebx,16(%esp)\r
+        leal    2400959708(%ebx,%ebp,1),%ebx\r
+        movl    %edi,%ebp\r
+        addl    %eax,%ebx\r
+        andl    %esi,%ebp\r
+        movl    20(%esp),%eax\r
+        addl    %ebp,%ebx\r
+\r
+        movl    %edx,%ebp\r
+        xorl    28(%esp),%eax\r
+        xorl    %edi,%ebp\r
+        xorl    52(%esp),%eax\r
+        andl    %ecx,%ebp\r
+        xorl    8(%esp),%eax\r
+        roll    $1,%eax\r
+        addl    %esi,%ebp\r
+        rorl    $2,%ecx\r
+        movl    %ebx,%esi\r
+        roll    $5,%esi\r
+        movl    %eax,20(%esp)\r
+        leal    2400959708(%eax,%ebp,1),%eax\r
+        movl    %edx,%ebp\r
+        addl    %esi,%eax\r
+        andl    %edi,%ebp\r
+        movl    24(%esp),%esi\r
+        addl    %ebp,%eax\r
+\r
+        movl    %ecx,%ebp\r
+        xorl    32(%esp),%esi\r
+        xorl    %edx,%ebp\r
+        xorl    56(%esp),%esi\r
+        andl    %ebx,%ebp\r
+        xorl    12(%esp),%esi\r
+        roll    $1,%esi\r
+        addl    %edi,%ebp\r
+        rorl    $2,%ebx\r
+        movl    %eax,%edi\r
+        roll    $5,%edi\r
+        movl    %esi,24(%esp)\r
+        leal    2400959708(%esi,%ebp,1),%esi\r
+        movl    %ecx,%ebp\r
+        addl    %edi,%esi\r
+        andl    %edx,%ebp\r
+        movl    28(%esp),%edi\r
+        addl    %ebp,%esi\r
+\r
+        movl    %ebx,%ebp\r
+        xorl    36(%esp),%edi\r
+        xorl    %ecx,%ebp\r
+        xorl    60(%esp),%edi\r
+        andl    %eax,%ebp\r
+        xorl    16(%esp),%edi\r
+        roll    $1,%edi\r
+        addl    %edx,%ebp\r
+        rorl    $2,%eax\r
+        movl    %esi,%edx\r
+        roll    $5,%edx\r
+        movl    %edi,28(%esp)\r
+        leal    2400959708(%edi,%ebp,1),%edi\r
+        movl    %ebx,%ebp\r
+        addl    %edx,%edi\r
+        andl    %ecx,%ebp\r
+        movl    32(%esp),%edx\r
+        addl    %ebp,%edi\r
+\r
+        movl    %eax,%ebp\r
+        xorl    40(%esp),%edx\r
+        xorl    %ebx,%ebp\r
+        xorl    (%esp),%edx\r
+        andl    %esi,%ebp\r
+        xorl    20(%esp),%edx\r
+        roll    $1,%edx\r
+        addl    %ecx,%ebp\r
+        rorl    $2,%esi\r
+        movl    %edi,%ecx\r
+        roll    $5,%ecx\r
+        movl    %edx,32(%esp)\r
+        leal    2400959708(%edx,%ebp,1),%edx\r
+        movl    %eax,%ebp\r
+        addl    %ecx,%edx\r
+        andl    %ebx,%ebp\r
+        movl    36(%esp),%ecx\r
+        addl    %ebp,%edx\r
+\r
+        movl    %esi,%ebp\r
+        xorl    44(%esp),%ecx\r
+        xorl    %eax,%ebp\r
+        xorl    4(%esp),%ecx\r
+        andl    %edi,%ebp\r
+        xorl    24(%esp),%ecx\r
+        roll    $1,%ecx\r
+        addl    %ebx,%ebp\r
+        rorl    $2,%edi\r
+        movl    %edx,%ebx\r
+        roll    $5,%ebx\r
+        movl    %ecx,36(%esp)\r
+        leal    2400959708(%ecx,%ebp,1),%ecx\r
+        movl    %esi,%ebp\r
+        addl    %ebx,%ecx\r
+        andl    %eax,%ebp\r
+        movl    40(%esp),%ebx\r
+        addl    %ebp,%ecx\r
+\r
+        movl    %edi,%ebp\r
+        xorl    48(%esp),%ebx\r
+        xorl    %esi,%ebp\r
+        xorl    8(%esp),%ebx\r
+        andl    %edx,%ebp\r
+        xorl    28(%esp),%ebx\r
+        roll    $1,%ebx\r
+        addl    %eax,%ebp\r
+        rorl    $2,%edx\r
+        movl    %ecx,%eax\r
+        roll    $5,%eax\r
+        movl    %ebx,40(%esp)\r
+        leal    2400959708(%ebx,%ebp,1),%ebx\r
+        movl    %edi,%ebp\r
+        addl    %eax,%ebx\r
+        andl    %esi,%ebp\r
+        movl    44(%esp),%eax\r
+        addl    %ebp,%ebx\r
+\r
+        movl    %edx,%ebp\r
+        xorl    52(%esp),%eax\r
+        xorl    %edi,%ebp\r
+        xorl    12(%esp),%eax\r
+        andl    %ecx,%ebp\r
+        xorl    32(%esp),%eax\r
+        roll    $1,%eax\r
+        addl    %esi,%ebp\r
+        rorl    $2,%ecx\r
+        movl    %ebx,%esi\r
+        roll    $5,%esi\r
+        movl    %eax,44(%esp)\r
+        leal    2400959708(%eax,%ebp,1),%eax\r
+        movl    %edx,%ebp\r
+        addl    %esi,%eax\r
+        andl    %edi,%ebp\r
+        movl    48(%esp),%esi\r
+        addl    %ebp,%eax\r
+\r
+        movl    %ebx,%ebp\r
+        xorl    56(%esp),%esi\r
+        xorl    %ecx,%ebp\r
+        xorl    16(%esp),%esi\r
+        xorl    %edx,%ebp\r
+        xorl    36(%esp),%esi\r
+        roll    $1,%esi\r
+        addl    %ebp,%edi\r
+        rorl    $2,%ebx\r
+        movl    %eax,%ebp\r
+        roll    $5,%ebp\r
+        movl    %esi,48(%esp)\r
+        leal    3395469782(%esi,%edi,1),%esi\r
+        movl    52(%esp),%edi\r
+        addl    %ebp,%esi\r
+\r
+        movl    %eax,%ebp\r
+        xorl    60(%esp),%edi\r
+        xorl    %ebx,%ebp\r
+        xorl    20(%esp),%edi\r
+        xorl    %ecx,%ebp\r
+        xorl    40(%esp),%edi\r
+        roll    $1,%edi\r
+        addl    %ebp,%edx\r
+        rorl    $2,%eax\r
+        movl    %esi,%ebp\r
+        roll    $5,%ebp\r
+        movl    %edi,52(%esp)\r
+        leal    3395469782(%edi,%edx,1),%edi\r
+        movl    56(%esp),%edx\r
+        addl    %ebp,%edi\r
+\r
+        movl    %esi,%ebp\r
+        xorl    (%esp),%edx\r
+        xorl    %eax,%ebp\r
+        xorl    24(%esp),%edx\r
+        xorl    %ebx,%ebp\r
+        xorl    44(%esp),%edx\r
+        roll    $1,%edx\r
+        addl    %ebp,%ecx\r
+        rorl    $2,%esi\r
+        movl    %edi,%ebp\r
+        roll    $5,%ebp\r
+        movl    %edx,56(%esp)\r
+        leal    3395469782(%edx,%ecx,1),%edx\r
+        movl    60(%esp),%ecx\r
+        addl    %ebp,%edx\r
+\r
+        movl    %edi,%ebp\r
+        xorl    4(%esp),%ecx\r
+        xorl    %esi,%ebp\r
+        xorl    28(%esp),%ecx\r
+        xorl    %eax,%ebp\r
+        xorl    48(%esp),%ecx\r
+        roll    $1,%ecx\r
+        addl    %ebp,%ebx\r
+        rorl    $2,%edi\r
+        movl    %edx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %ecx,60(%esp)\r
+        leal    3395469782(%ecx,%ebx,1),%ecx\r
+        movl    (%esp),%ebx\r
+        addl    %ebp,%ecx\r
+\r
+        movl    %edx,%ebp\r
+        xorl    8(%esp),%ebx\r
+        xorl    %edi,%ebp\r
+        xorl    32(%esp),%ebx\r
+        xorl    %esi,%ebp\r
+        xorl    52(%esp),%ebx\r
+        roll    $1,%ebx\r
+        addl    %ebp,%eax\r
+        rorl    $2,%edx\r
+        movl    %ecx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %ebx,(%esp)\r
+        leal    3395469782(%ebx,%eax,1),%ebx\r
+        movl    4(%esp),%eax\r
+        addl    %ebp,%ebx\r
+\r
+        movl    %ecx,%ebp\r
+        xorl    12(%esp),%eax\r
+        xorl    %edx,%ebp\r
+        xorl    36(%esp),%eax\r
+        xorl    %edi,%ebp\r
+        xorl    56(%esp),%eax\r
+        roll    $1,%eax\r
+        addl    %ebp,%esi\r
+        rorl    $2,%ecx\r
+        movl    %ebx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %eax,4(%esp)\r
+        leal    3395469782(%eax,%esi,1),%eax\r
+        movl    8(%esp),%esi\r
+        addl    %ebp,%eax\r
+\r
+        movl    %ebx,%ebp\r
+        xorl    16(%esp),%esi\r
+        xorl    %ecx,%ebp\r
+        xorl    40(%esp),%esi\r
+        xorl    %edx,%ebp\r
+        xorl    60(%esp),%esi\r
+        roll    $1,%esi\r
+        addl    %ebp,%edi\r
+        rorl    $2,%ebx\r
+        movl    %eax,%ebp\r
+        roll    $5,%ebp\r
+        movl    %esi,8(%esp)\r
+        leal    3395469782(%esi,%edi,1),%esi\r
+        movl    12(%esp),%edi\r
+        addl    %ebp,%esi\r
+\r
+        movl    %eax,%ebp\r
+        xorl    20(%esp),%edi\r
+        xorl    %ebx,%ebp\r
+        xorl    44(%esp),%edi\r
+        xorl    %ecx,%ebp\r
+        xorl    (%esp),%edi\r
+        roll    $1,%edi\r
+        addl    %ebp,%edx\r
+        rorl    $2,%eax\r
+        movl    %esi,%ebp\r
+        roll    $5,%ebp\r
+        movl    %edi,12(%esp)\r
+        leal    3395469782(%edi,%edx,1),%edi\r
+        movl    16(%esp),%edx\r
+        addl    %ebp,%edi\r
+\r
+        movl    %esi,%ebp\r
+        xorl    24(%esp),%edx\r
+        xorl    %eax,%ebp\r
+        xorl    48(%esp),%edx\r
+        xorl    %ebx,%ebp\r
+        xorl    4(%esp),%edx\r
+        roll    $1,%edx\r
+        addl    %ebp,%ecx\r
+        rorl    $2,%esi\r
+        movl    %edi,%ebp\r
+        roll    $5,%ebp\r
+        movl    %edx,16(%esp)\r
+        leal    3395469782(%edx,%ecx,1),%edx\r
+        movl    20(%esp),%ecx\r
+        addl    %ebp,%edx\r
+\r
+        movl    %edi,%ebp\r
+        xorl    28(%esp),%ecx\r
+        xorl    %esi,%ebp\r
+        xorl    52(%esp),%ecx\r
+        xorl    %eax,%ebp\r
+        xorl    8(%esp),%ecx\r
+        roll    $1,%ecx\r
+        addl    %ebp,%ebx\r
+        rorl    $2,%edi\r
+        movl    %edx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %ecx,20(%esp)\r
+        leal    3395469782(%ecx,%ebx,1),%ecx\r
+        movl    24(%esp),%ebx\r
+        addl    %ebp,%ecx\r
+\r
+        movl    %edx,%ebp\r
+        xorl    32(%esp),%ebx\r
+        xorl    %edi,%ebp\r
+        xorl    56(%esp),%ebx\r
+        xorl    %esi,%ebp\r
+        xorl    12(%esp),%ebx\r
+        roll    $1,%ebx\r
+        addl    %ebp,%eax\r
+        rorl    $2,%edx\r
+        movl    %ecx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %ebx,24(%esp)\r
+        leal    3395469782(%ebx,%eax,1),%ebx\r
+        movl    28(%esp),%eax\r
+        addl    %ebp,%ebx\r
+\r
+        movl    %ecx,%ebp\r
+        xorl    36(%esp),%eax\r
+        xorl    %edx,%ebp\r
+        xorl    60(%esp),%eax\r
+        xorl    %edi,%ebp\r
+        xorl    16(%esp),%eax\r
+        roll    $1,%eax\r
+        addl    %ebp,%esi\r
+        rorl    $2,%ecx\r
+        movl    %ebx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %eax,28(%esp)\r
+        leal    3395469782(%eax,%esi,1),%eax\r
+        movl    32(%esp),%esi\r
+        addl    %ebp,%eax\r
+\r
+        movl    %ebx,%ebp\r
+        xorl    40(%esp),%esi\r
+        xorl    %ecx,%ebp\r
+        xorl    (%esp),%esi\r
+        xorl    %edx,%ebp\r
+        xorl    20(%esp),%esi\r
+        roll    $1,%esi\r
+        addl    %ebp,%edi\r
+        rorl    $2,%ebx\r
+        movl    %eax,%ebp\r
+        roll    $5,%ebp\r
+        movl    %esi,32(%esp)\r
+        leal    3395469782(%esi,%edi,1),%esi\r
+        movl    36(%esp),%edi\r
+        addl    %ebp,%esi\r
+\r
+        movl    %eax,%ebp\r
+        xorl    44(%esp),%edi\r
+        xorl    %ebx,%ebp\r
+        xorl    4(%esp),%edi\r
+        xorl    %ecx,%ebp\r
+        xorl    24(%esp),%edi\r
+        roll    $1,%edi\r
+        addl    %ebp,%edx\r
+        rorl    $2,%eax\r
+        movl    %esi,%ebp\r
+        roll    $5,%ebp\r
+        movl    %edi,36(%esp)\r
+        leal    3395469782(%edi,%edx,1),%edi\r
+        movl    40(%esp),%edx\r
+        addl    %ebp,%edi\r
+\r
+        movl    %esi,%ebp\r
+        xorl    48(%esp),%edx\r
+        xorl    %eax,%ebp\r
+        xorl    8(%esp),%edx\r
+        xorl    %ebx,%ebp\r
+        xorl    28(%esp),%edx\r
+        roll    $1,%edx\r
+        addl    %ebp,%ecx\r
+        rorl    $2,%esi\r
+        movl    %edi,%ebp\r
+        roll    $5,%ebp\r
+        movl    %edx,40(%esp)\r
+        leal    3395469782(%edx,%ecx,1),%edx\r
+        movl    44(%esp),%ecx\r
+        addl    %ebp,%edx\r
+\r
+        movl    %edi,%ebp\r
+        xorl    52(%esp),%ecx\r
+        xorl    %esi,%ebp\r
+        xorl    12(%esp),%ecx\r
+        xorl    %eax,%ebp\r
+        xorl    32(%esp),%ecx\r
+        roll    $1,%ecx\r
+        addl    %ebp,%ebx\r
+        rorl    $2,%edi\r
+        movl    %edx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %ecx,44(%esp)\r
+        leal    3395469782(%ecx,%ebx,1),%ecx\r
+        movl    48(%esp),%ebx\r
+        addl    %ebp,%ecx\r
+\r
+        movl    %edx,%ebp\r
+        xorl    56(%esp),%ebx\r
+        xorl    %edi,%ebp\r
+        xorl    16(%esp),%ebx\r
+        xorl    %esi,%ebp\r
+        xorl    36(%esp),%ebx\r
+        roll    $1,%ebx\r
+        addl    %ebp,%eax\r
+        rorl    $2,%edx\r
+        movl    %ecx,%ebp\r
+        roll    $5,%ebp\r
+        movl    %ebx,48(%esp)\r
+        leal    3395469782(%ebx,%eax,1),%ebx\r
+        movl    52(%esp),%eax\r
+        addl    %ebp,%ebx\r
+\r
+        movl    %ecx,%ebp\r
+        xorl    60(%esp),%eax\r
+        xorl    %edx,%ebp\r
+        xorl    20(%esp),%eax\r
+        xorl    %edi,%ebp\r
+        xorl    40(%esp),%eax\r
+        roll    $1,%eax\r
+        addl    %ebp,%esi\r
+        rorl    $2,%ecx\r
+        movl    %ebx,%ebp\r
+        roll    $5,%ebp\r
+        leal    3395469782(%eax,%esi,1),%eax\r
+        movl    56(%esp),%esi\r
+        addl    %ebp,%eax\r
+\r
+        movl    %ebx,%ebp\r
+        xorl    (%esp),%esi\r
+        xorl    %ecx,%ebp\r
+        xorl    24(%esp),%esi\r
+        xorl    %edx,%ebp\r
+        xorl    44(%esp),%esi\r
+        roll    $1,%esi\r
+        addl    %ebp,%edi\r
+        rorl    $2,%ebx\r
+        movl    %eax,%ebp\r
+        roll    $5,%ebp\r
+        leal    3395469782(%esi,%edi,1),%esi\r
+        movl    60(%esp),%edi\r
+        addl    %ebp,%esi\r
+\r
+        movl    %eax,%ebp\r
+        xorl    4(%esp),%edi\r
+        xorl    %ebx,%ebp\r
+        xorl    28(%esp),%edi\r
+        xorl    %ecx,%ebp\r
+        xorl    48(%esp),%edi\r
+        roll    $1,%edi\r
+        addl    %ebp,%edx\r
+        rorl    $2,%eax\r
+        movl    %esi,%ebp\r
+        roll    $5,%ebp\r
+        leal    3395469782(%edi,%edx,1),%edi\r
+        addl    %ebp,%edi\r
+        movl    96(%esp),%ebp\r
+        movl    100(%esp),%edx\r
+        addl    (%ebp),%edi\r
+        addl    4(%ebp),%esi\r
+        addl    8(%ebp),%eax\r
+        addl    12(%ebp),%ebx\r
+        addl    16(%ebp),%ecx\r
+        movl    %edi,(%ebp)\r
+        addl    $64,%edx\r
+        movl    %esi,4(%ebp)\r
+        cmpl    104(%esp),%edx\r
+        movl    %eax,8(%ebp)\r
+        movl    %ecx,%edi\r
+        movl    %ebx,12(%ebp)\r
+        movl    %edx,%esi\r
+        movl    %ecx,16(%ebp)\r
+        jb      .L000loop\r
+        addl    $76,%esp\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   sha1_block_data_order,.-.L_sha1_block_data_order_begin\r
+.byte   83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115\r
+.byte   102,111,114,109,32,102,111,114,32,120,56,54,44,32,67,82\r
+.byte   89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112\r
+.byte   114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0\r
diff --git a/CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/sha/sha256-586.S b/CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/sha/sha256-586.S
new file mode 100644 (file)
index 0000000..260dde7
--- /dev/null
@@ -0,0 +1,3356 @@
+# WARNING: do not edit!\r
+# Generated from openssl/crypto/sha/asm/sha256-586.pl\r
+#\r
+# Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved.\r
+#\r
+# Licensed under the OpenSSL license (the "License").  You may not use\r
+# this file except in compliance with the License.  You can obtain a copy\r
+# in the file LICENSE in the source distribution or at\r
+# https://www.openssl.org/source/license.html\r
+\r
+.text\r
+.globl  sha256_block_data_order\r
+.type   sha256_block_data_order,@function\r
+.align  16\r
+sha256_block_data_order:\r
+.L_sha256_block_data_order_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    20(%esp),%esi\r
+        movl    24(%esp),%edi\r
+        movl    28(%esp),%eax\r
+        movl    %esp,%ebx\r
+        call    .L000pic_point\r
+.L000pic_point:\r
+        popl    %ebp\r
+        leal    .L001K256-.L000pic_point(%ebp),%ebp\r
+        subl    $16,%esp\r
+        andl    $-64,%esp\r
+        shll    $6,%eax\r
+        addl    %edi,%eax\r
+        movl    %esi,(%esp)\r
+        movl    %edi,4(%esp)\r
+        movl    %eax,8(%esp)\r
+        movl    %ebx,12(%esp)\r
+        jmp     .L002loop\r
+.align  16\r
+.L002loop:\r
+        movl    (%edi),%eax\r
+        movl    4(%edi),%ebx\r
+        movl    8(%edi),%ecx\r
+        bswap   %eax\r
+        movl    12(%edi),%edx\r
+        bswap   %ebx\r
+        pushl   %eax\r
+        bswap   %ecx\r
+        pushl   %ebx\r
+        bswap   %edx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        movl    16(%edi),%eax\r
+        movl    20(%edi),%ebx\r
+        movl    24(%edi),%ecx\r
+        bswap   %eax\r
+        movl    28(%edi),%edx\r
+        bswap   %ebx\r
+        pushl   %eax\r
+        bswap   %ecx\r
+        pushl   %ebx\r
+        bswap   %edx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        movl    32(%edi),%eax\r
+        movl    36(%edi),%ebx\r
+        movl    40(%edi),%ecx\r
+        bswap   %eax\r
+        movl    44(%edi),%edx\r
+        bswap   %ebx\r
+        pushl   %eax\r
+        bswap   %ecx\r
+        pushl   %ebx\r
+        bswap   %edx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        movl    48(%edi),%eax\r
+        movl    52(%edi),%ebx\r
+        movl    56(%edi),%ecx\r
+        bswap   %eax\r
+        movl    60(%edi),%edx\r
+        bswap   %ebx\r
+        pushl   %eax\r
+        bswap   %ecx\r
+        pushl   %ebx\r
+        bswap   %edx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        addl    $64,%edi\r
+        leal    -36(%esp),%esp\r
+        movl    %edi,104(%esp)\r
+        movl    (%esi),%eax\r
+        movl    4(%esi),%ebx\r
+        movl    8(%esi),%ecx\r
+        movl    12(%esi),%edi\r
+        movl    %ebx,8(%esp)\r
+        xorl    %ecx,%ebx\r
+        movl    %ecx,12(%esp)\r
+        movl    %edi,16(%esp)\r
+        movl    %ebx,(%esp)\r
+        movl    16(%esi),%edx\r
+        movl    20(%esi),%ebx\r
+        movl    24(%esi),%ecx\r
+        movl    28(%esi),%edi\r
+        movl    %ebx,24(%esp)\r
+        movl    %ecx,28(%esp)\r
+        movl    %edi,32(%esp)\r
+.align  16\r
+.L00300_15:\r
+        movl    %edx,%ecx\r
+        movl    24(%esp),%esi\r
+        rorl    $14,%ecx\r
+        movl    28(%esp),%edi\r
+        xorl    %edx,%ecx\r
+        xorl    %edi,%esi\r
+        movl    96(%esp),%ebx\r
+        rorl    $5,%ecx\r
+        andl    %edx,%esi\r
+        movl    %edx,20(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    32(%esp),%ebx\r
+        xorl    %edi,%esi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %esi,%ebx\r
+        rorl    $9,%ecx\r
+        addl    %edx,%ebx\r
+        movl    8(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,4(%esp)\r
+        leal    -4(%esp),%esp\r
+        rorl    $11,%ecx\r
+        movl    (%ebp),%esi\r
+        xorl    %eax,%ecx\r
+        movl    20(%esp),%edx\r
+        xorl    %edi,%eax\r
+        rorl    $2,%ecx\r
+        addl    %esi,%ebx\r
+        movl    %eax,(%esp)\r
+        addl    %ebx,%edx\r
+        andl    4(%esp),%eax\r
+        addl    %ecx,%ebx\r
+        xorl    %edi,%eax\r
+        addl    $4,%ebp\r
+        addl    %ebx,%eax\r
+        cmpl    $3248222580,%esi\r
+        jne     .L00300_15\r
+        movl    156(%esp),%ecx\r
+        jmp     .L00416_63\r
+.align  16\r
+.L00416_63:\r
+        movl    %ecx,%ebx\r
+        movl    104(%esp),%esi\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    160(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    124(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    24(%esp),%esi\r
+        rorl    $14,%ecx\r
+        addl    %edi,%ebx\r
+        movl    28(%esp),%edi\r
+        xorl    %edx,%ecx\r
+        xorl    %edi,%esi\r
+        movl    %ebx,96(%esp)\r
+        rorl    $5,%ecx\r
+        andl    %edx,%esi\r
+        movl    %edx,20(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    32(%esp),%ebx\r
+        xorl    %edi,%esi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %esi,%ebx\r
+        rorl    $9,%ecx\r
+        addl    %edx,%ebx\r
+        movl    8(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,4(%esp)\r
+        leal    -4(%esp),%esp\r
+        rorl    $11,%ecx\r
+        movl    (%ebp),%esi\r
+        xorl    %eax,%ecx\r
+        movl    20(%esp),%edx\r
+        xorl    %edi,%eax\r
+        rorl    $2,%ecx\r
+        addl    %esi,%ebx\r
+        movl    %eax,(%esp)\r
+        addl    %ebx,%edx\r
+        andl    4(%esp),%eax\r
+        addl    %ecx,%ebx\r
+        xorl    %edi,%eax\r
+        movl    156(%esp),%ecx\r
+        addl    $4,%ebp\r
+        addl    %ebx,%eax\r
+        cmpl    $3329325298,%esi\r
+        jne     .L00416_63\r
+        movl    356(%esp),%esi\r
+        movl    8(%esp),%ebx\r
+        movl    16(%esp),%ecx\r
+        addl    (%esi),%eax\r
+        addl    4(%esi),%ebx\r
+        addl    8(%esi),%edi\r
+        addl    12(%esi),%ecx\r
+        movl    %eax,(%esi)\r
+        movl    %ebx,4(%esi)\r
+        movl    %edi,8(%esi)\r
+        movl    %ecx,12(%esi)\r
+        movl    24(%esp),%eax\r
+        movl    28(%esp),%ebx\r
+        movl    32(%esp),%ecx\r
+        movl    360(%esp),%edi\r
+        addl    16(%esi),%edx\r
+        addl    20(%esi),%eax\r
+        addl    24(%esi),%ebx\r
+        addl    28(%esi),%ecx\r
+        movl    %edx,16(%esi)\r
+        movl    %eax,20(%esi)\r
+        movl    %ebx,24(%esi)\r
+        movl    %ecx,28(%esi)\r
+        leal    356(%esp),%esp\r
+        subl    $256,%ebp\r
+        cmpl    8(%esp),%edi\r
+        jb      .L002loop\r
+        movl    12(%esp),%esp\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.align  32\r
+.L005loop_shrd:\r
+        movl    (%edi),%eax\r
+        movl    4(%edi),%ebx\r
+        movl    8(%edi),%ecx\r
+        bswap   %eax\r
+        movl    12(%edi),%edx\r
+        bswap   %ebx\r
+        pushl   %eax\r
+        bswap   %ecx\r
+        pushl   %ebx\r
+        bswap   %edx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        movl    16(%edi),%eax\r
+        movl    20(%edi),%ebx\r
+        movl    24(%edi),%ecx\r
+        bswap   %eax\r
+        movl    28(%edi),%edx\r
+        bswap   %ebx\r
+        pushl   %eax\r
+        bswap   %ecx\r
+        pushl   %ebx\r
+        bswap   %edx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        movl    32(%edi),%eax\r
+        movl    36(%edi),%ebx\r
+        movl    40(%edi),%ecx\r
+        bswap   %eax\r
+        movl    44(%edi),%edx\r
+        bswap   %ebx\r
+        pushl   %eax\r
+        bswap   %ecx\r
+        pushl   %ebx\r
+        bswap   %edx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        movl    48(%edi),%eax\r
+        movl    52(%edi),%ebx\r
+        movl    56(%edi),%ecx\r
+        bswap   %eax\r
+        movl    60(%edi),%edx\r
+        bswap   %ebx\r
+        pushl   %eax\r
+        bswap   %ecx\r
+        pushl   %ebx\r
+        bswap   %edx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        addl    $64,%edi\r
+        leal    -36(%esp),%esp\r
+        movl    %edi,104(%esp)\r
+        movl    (%esi),%eax\r
+        movl    4(%esi),%ebx\r
+        movl    8(%esi),%ecx\r
+        movl    12(%esi),%edi\r
+        movl    %ebx,8(%esp)\r
+        xorl    %ecx,%ebx\r
+        movl    %ecx,12(%esp)\r
+        movl    %edi,16(%esp)\r
+        movl    %ebx,(%esp)\r
+        movl    16(%esi),%edx\r
+        movl    20(%esi),%ebx\r
+        movl    24(%esi),%ecx\r
+        movl    28(%esi),%edi\r
+        movl    %ebx,24(%esp)\r
+        movl    %ecx,28(%esp)\r
+        movl    %edi,32(%esp)\r
+.align  16\r
+.L00600_15_shrd:\r
+        movl    %edx,%ecx\r
+        movl    24(%esp),%esi\r
+        shrdl   $14,%ecx,%ecx\r
+        movl    28(%esp),%edi\r
+        xorl    %edx,%ecx\r
+        xorl    %edi,%esi\r
+        movl    96(%esp),%ebx\r
+        shrdl   $5,%ecx,%ecx\r
+        andl    %edx,%esi\r
+        movl    %edx,20(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    32(%esp),%ebx\r
+        xorl    %edi,%esi\r
+        shrdl   $6,%edx,%edx\r
+        movl    %eax,%ecx\r
+        addl    %esi,%ebx\r
+        shrdl   $9,%ecx,%ecx\r
+        addl    %edx,%ebx\r
+        movl    8(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,4(%esp)\r
+        leal    -4(%esp),%esp\r
+        shrdl   $11,%ecx,%ecx\r
+        movl    (%ebp),%esi\r
+        xorl    %eax,%ecx\r
+        movl    20(%esp),%edx\r
+        xorl    %edi,%eax\r
+        shrdl   $2,%ecx,%ecx\r
+        addl    %esi,%ebx\r
+        movl    %eax,(%esp)\r
+        addl    %ebx,%edx\r
+        andl    4(%esp),%eax\r
+        addl    %ecx,%ebx\r
+        xorl    %edi,%eax\r
+        addl    $4,%ebp\r
+        addl    %ebx,%eax\r
+        cmpl    $3248222580,%esi\r
+        jne     .L00600_15_shrd\r
+        movl    156(%esp),%ecx\r
+        jmp     .L00716_63_shrd\r
+.align  16\r
+.L00716_63_shrd:\r
+        movl    %ecx,%ebx\r
+        movl    104(%esp),%esi\r
+        shrdl   $11,%ecx,%ecx\r
+        movl    %esi,%edi\r
+        shrdl   $2,%esi,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        shrdl   $7,%ecx,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        shrdl   $17,%esi,%esi\r
+        addl    160(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    124(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    24(%esp),%esi\r
+        shrdl   $14,%ecx,%ecx\r
+        addl    %edi,%ebx\r
+        movl    28(%esp),%edi\r
+        xorl    %edx,%ecx\r
+        xorl    %edi,%esi\r
+        movl    %ebx,96(%esp)\r
+        shrdl   $5,%ecx,%ecx\r
+        andl    %edx,%esi\r
+        movl    %edx,20(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    32(%esp),%ebx\r
+        xorl    %edi,%esi\r
+        shrdl   $6,%edx,%edx\r
+        movl    %eax,%ecx\r
+        addl    %esi,%ebx\r
+        shrdl   $9,%ecx,%ecx\r
+        addl    %edx,%ebx\r
+        movl    8(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,4(%esp)\r
+        leal    -4(%esp),%esp\r
+        shrdl   $11,%ecx,%ecx\r
+        movl    (%ebp),%esi\r
+        xorl    %eax,%ecx\r
+        movl    20(%esp),%edx\r
+        xorl    %edi,%eax\r
+        shrdl   $2,%ecx,%ecx\r
+        addl    %esi,%ebx\r
+        movl    %eax,(%esp)\r
+        addl    %ebx,%edx\r
+        andl    4(%esp),%eax\r
+        addl    %ecx,%ebx\r
+        xorl    %edi,%eax\r
+        movl    156(%esp),%ecx\r
+        addl    $4,%ebp\r
+        addl    %ebx,%eax\r
+        cmpl    $3329325298,%esi\r
+        jne     .L00716_63_shrd\r
+        movl    356(%esp),%esi\r
+        movl    8(%esp),%ebx\r
+        movl    16(%esp),%ecx\r
+        addl    (%esi),%eax\r
+        addl    4(%esi),%ebx\r
+        addl    8(%esi),%edi\r
+        addl    12(%esi),%ecx\r
+        movl    %eax,(%esi)\r
+        movl    %ebx,4(%esi)\r
+        movl    %edi,8(%esi)\r
+        movl    %ecx,12(%esi)\r
+        movl    24(%esp),%eax\r
+        movl    28(%esp),%ebx\r
+        movl    32(%esp),%ecx\r
+        movl    360(%esp),%edi\r
+        addl    16(%esi),%edx\r
+        addl    20(%esi),%eax\r
+        addl    24(%esi),%ebx\r
+        addl    28(%esi),%ecx\r
+        movl    %edx,16(%esi)\r
+        movl    %eax,20(%esi)\r
+        movl    %ebx,24(%esi)\r
+        movl    %ecx,28(%esi)\r
+        leal    356(%esp),%esp\r
+        subl    $256,%ebp\r
+        cmpl    8(%esp),%edi\r
+        jb      .L005loop_shrd\r
+        movl    12(%esp),%esp\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.align  64\r
+.L001K256:\r
+.long   1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298\r
+.long   66051,67438087,134810123,202182159\r
+.byte   83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97\r
+.byte   110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32\r
+.byte   67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97\r
+.byte   112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103\r
+.byte   62,0\r
+.align  16\r
+.L008unrolled:\r
+        leal    -96(%esp),%esp\r
+        movl    (%esi),%eax\r
+        movl    4(%esi),%ebp\r
+        movl    8(%esi),%ecx\r
+        movl    12(%esi),%ebx\r
+        movl    %ebp,4(%esp)\r
+        xorl    %ecx,%ebp\r
+        movl    %ecx,8(%esp)\r
+        movl    %ebx,12(%esp)\r
+        movl    16(%esi),%edx\r
+        movl    20(%esi),%ebx\r
+        movl    24(%esi),%ecx\r
+        movl    28(%esi),%esi\r
+        movl    %ebx,20(%esp)\r
+        movl    %ecx,24(%esp)\r
+        movl    %esi,28(%esp)\r
+        jmp     .L009grand_loop\r
+.align  16\r
+.L009grand_loop:\r
+        movl    (%edi),%ebx\r
+        movl    4(%edi),%ecx\r
+        bswap   %ebx\r
+        movl    8(%edi),%esi\r
+        bswap   %ecx\r
+        movl    %ebx,32(%esp)\r
+        bswap   %esi\r
+        movl    %ecx,36(%esp)\r
+        movl    %esi,40(%esp)\r
+        movl    12(%edi),%ebx\r
+        movl    16(%edi),%ecx\r
+        bswap   %ebx\r
+        movl    20(%edi),%esi\r
+        bswap   %ecx\r
+        movl    %ebx,44(%esp)\r
+        bswap   %esi\r
+        movl    %ecx,48(%esp)\r
+        movl    %esi,52(%esp)\r
+        movl    24(%edi),%ebx\r
+        movl    28(%edi),%ecx\r
+        bswap   %ebx\r
+        movl    32(%edi),%esi\r
+        bswap   %ecx\r
+        movl    %ebx,56(%esp)\r
+        bswap   %esi\r
+        movl    %ecx,60(%esp)\r
+        movl    %esi,64(%esp)\r
+        movl    36(%edi),%ebx\r
+        movl    40(%edi),%ecx\r
+        bswap   %ebx\r
+        movl    44(%edi),%esi\r
+        bswap   %ecx\r
+        movl    %ebx,68(%esp)\r
+        bswap   %esi\r
+        movl    %ecx,72(%esp)\r
+        movl    %esi,76(%esp)\r
+        movl    48(%edi),%ebx\r
+        movl    52(%edi),%ecx\r
+        bswap   %ebx\r
+        movl    56(%edi),%esi\r
+        bswap   %ecx\r
+        movl    %ebx,80(%esp)\r
+        bswap   %esi\r
+        movl    %ecx,84(%esp)\r
+        movl    %esi,88(%esp)\r
+        movl    60(%edi),%ebx\r
+        addl    $64,%edi\r
+        bswap   %ebx\r
+        movl    %edi,100(%esp)\r
+        movl    %ebx,92(%esp)\r
+        movl    %edx,%ecx\r
+        movl    20(%esp),%esi\r
+        rorl    $14,%edx\r
+        movl    24(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    32(%esp),%ebx\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,16(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    28(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    4(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    1116352408(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    12(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    %edx,%esi\r
+        movl    16(%esp),%ecx\r
+        rorl    $14,%edx\r
+        movl    20(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    36(%esp),%ebx\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,12(%esp)\r
+        xorl    %esi,%edx\r
+        addl    24(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    (%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,28(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    1899447441(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    8(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    %edx,%ecx\r
+        movl    12(%esp),%esi\r
+        rorl    $14,%edx\r
+        movl    16(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    40(%esp),%ebx\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,8(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    20(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    28(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,24(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    3049323471(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    4(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    %edx,%esi\r
+        movl    8(%esp),%ecx\r
+        rorl    $14,%edx\r
+        movl    12(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    44(%esp),%ebx\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,4(%esp)\r
+        xorl    %esi,%edx\r
+        addl    16(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    24(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,20(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    3921009573(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    (%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    %edx,%ecx\r
+        movl    4(%esp),%esi\r
+        rorl    $14,%edx\r
+        movl    8(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    48(%esp),%ebx\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    12(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    20(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,16(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    961987163(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    28(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    %edx,%esi\r
+        movl    (%esp),%ecx\r
+        rorl    $14,%edx\r
+        movl    4(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    52(%esp),%ebx\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,28(%esp)\r
+        xorl    %esi,%edx\r
+        addl    8(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    16(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,12(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    1508970993(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    24(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    %edx,%ecx\r
+        movl    28(%esp),%esi\r
+        rorl    $14,%edx\r
+        movl    (%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    56(%esp),%ebx\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,24(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    4(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    12(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,8(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    2453635748(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    20(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    %edx,%esi\r
+        movl    24(%esp),%ecx\r
+        rorl    $14,%edx\r
+        movl    28(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    60(%esp),%ebx\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,20(%esp)\r
+        xorl    %esi,%edx\r
+        addl    (%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    8(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,4(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    2870763221(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    16(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    %edx,%ecx\r
+        movl    20(%esp),%esi\r
+        rorl    $14,%edx\r
+        movl    24(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    64(%esp),%ebx\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,16(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    28(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    4(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    3624381080(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    12(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    %edx,%esi\r
+        movl    16(%esp),%ecx\r
+        rorl    $14,%edx\r
+        movl    20(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    68(%esp),%ebx\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,12(%esp)\r
+        xorl    %esi,%edx\r
+        addl    24(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    (%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,28(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    310598401(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    8(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    %edx,%ecx\r
+        movl    12(%esp),%esi\r
+        rorl    $14,%edx\r
+        movl    16(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    72(%esp),%ebx\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,8(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    20(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    28(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,24(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    607225278(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    4(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    %edx,%esi\r
+        movl    8(%esp),%ecx\r
+        rorl    $14,%edx\r
+        movl    12(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    76(%esp),%ebx\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,4(%esp)\r
+        xorl    %esi,%edx\r
+        addl    16(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    24(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,20(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    1426881987(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    (%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    %edx,%ecx\r
+        movl    4(%esp),%esi\r
+        rorl    $14,%edx\r
+        movl    8(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    80(%esp),%ebx\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    12(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    20(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,16(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    1925078388(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    28(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    %edx,%esi\r
+        movl    (%esp),%ecx\r
+        rorl    $14,%edx\r
+        movl    4(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    84(%esp),%ebx\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,28(%esp)\r
+        xorl    %esi,%edx\r
+        addl    8(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    16(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,12(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    2162078206(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    24(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    %edx,%ecx\r
+        movl    28(%esp),%esi\r
+        rorl    $14,%edx\r
+        movl    (%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    88(%esp),%ebx\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,24(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    4(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    12(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,8(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    2614888103(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    20(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    %edx,%esi\r
+        movl    24(%esp),%ecx\r
+        rorl    $14,%edx\r
+        movl    28(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    92(%esp),%ebx\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,20(%esp)\r
+        xorl    %esi,%edx\r
+        addl    (%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    8(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,4(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    3248222580(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    36(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    16(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    88(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    32(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    68(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    20(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    24(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,32(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,16(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    28(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    4(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    3835390401(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    40(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    12(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    92(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    36(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    72(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    16(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    20(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,36(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,12(%esp)\r
+        xorl    %esi,%edx\r
+        addl    24(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    (%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,28(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    4022224774(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    44(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    8(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    32(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    40(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    76(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    12(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    16(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,40(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,8(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    20(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    28(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,24(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    264347078(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    48(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    4(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    36(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    44(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    80(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    8(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    12(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,44(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,4(%esp)\r
+        xorl    %esi,%edx\r
+        addl    16(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    24(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,20(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    604807628(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    52(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    (%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    40(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    48(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    84(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    4(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    8(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,48(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    12(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    20(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,16(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    770255983(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    56(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    28(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    44(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    52(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    88(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    (%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    4(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,52(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,28(%esp)\r
+        xorl    %esi,%edx\r
+        addl    8(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    16(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,12(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    1249150122(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    60(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    24(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    48(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    56(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    92(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    28(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    (%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,56(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,24(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    4(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    12(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,8(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    1555081692(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    64(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    20(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    52(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    60(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    32(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    24(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    28(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,60(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,20(%esp)\r
+        xorl    %esi,%edx\r
+        addl    (%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    8(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,4(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    1996064986(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    68(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    16(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    56(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    64(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    36(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    20(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    24(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,64(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,16(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    28(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    4(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    2554220882(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    72(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    12(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    60(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    68(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    40(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    16(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    20(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,68(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,12(%esp)\r
+        xorl    %esi,%edx\r
+        addl    24(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    (%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,28(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    2821834349(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    76(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    8(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    64(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    72(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    44(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    12(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    16(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,72(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,8(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    20(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    28(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,24(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    2952996808(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    80(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    4(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    68(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    76(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    48(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    8(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    12(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,76(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,4(%esp)\r
+        xorl    %esi,%edx\r
+        addl    16(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    24(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,20(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    3210313671(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    84(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    (%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    72(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    80(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    52(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    4(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    8(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,80(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    12(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    20(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,16(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    3336571891(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    88(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    28(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    76(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    84(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    56(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    (%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    4(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,84(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,28(%esp)\r
+        xorl    %esi,%edx\r
+        addl    8(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    16(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,12(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    3584528711(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    92(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    24(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    80(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    88(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    60(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    28(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    (%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,88(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,24(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    4(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    12(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,8(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    113926993(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    32(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    20(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    84(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    92(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    64(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    24(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    28(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,92(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,20(%esp)\r
+        xorl    %esi,%edx\r
+        addl    (%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    8(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,4(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    338241895(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    36(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    16(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    88(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    32(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    68(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    20(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    24(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,32(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,16(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    28(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    4(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    666307205(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    40(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    12(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    92(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    36(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    72(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    16(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    20(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,36(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,12(%esp)\r
+        xorl    %esi,%edx\r
+        addl    24(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    (%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,28(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    773529912(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    44(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    8(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    32(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    40(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    76(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    12(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    16(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,40(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,8(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    20(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    28(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,24(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    1294757372(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    48(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    4(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    36(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    44(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    80(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    8(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    12(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,44(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,4(%esp)\r
+        xorl    %esi,%edx\r
+        addl    16(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    24(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,20(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    1396182291(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    52(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    (%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    40(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    48(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    84(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    4(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    8(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,48(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    12(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    20(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,16(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    1695183700(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    56(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    28(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    44(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    52(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    88(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    (%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    4(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,52(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,28(%esp)\r
+        xorl    %esi,%edx\r
+        addl    8(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    16(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,12(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    1986661051(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    60(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    24(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    48(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    56(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    92(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    28(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    (%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,56(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,24(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    4(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    12(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,8(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    2177026350(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    64(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    20(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    52(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    60(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    32(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    24(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    28(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,60(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,20(%esp)\r
+        xorl    %esi,%edx\r
+        addl    (%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    8(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,4(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    2456956037(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    68(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    16(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    56(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    64(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    36(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    20(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    24(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,64(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,16(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    28(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    4(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    2730485921(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    72(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    12(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    60(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    68(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    40(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    16(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    20(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,68(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,12(%esp)\r
+        xorl    %esi,%edx\r
+        addl    24(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    (%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,28(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    2820302411(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    76(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    8(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    64(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    72(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    44(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    12(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    16(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,72(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,8(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    20(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    28(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,24(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    3259730800(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    80(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    4(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    68(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    76(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    48(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    8(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    12(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,76(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,4(%esp)\r
+        xorl    %esi,%edx\r
+        addl    16(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    24(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,20(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    3345764771(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    84(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    (%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    72(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    80(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    52(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    4(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    8(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,80(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    12(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    20(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,16(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    3516065817(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    88(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    28(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    76(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    84(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    56(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    (%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    4(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,84(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,28(%esp)\r
+        xorl    %esi,%edx\r
+        addl    8(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    16(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,12(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    3600352804(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    92(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    24(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    80(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    88(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    60(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    28(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    (%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,88(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,24(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    4(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    12(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,8(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    4094571909(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    32(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    20(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    84(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    92(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    64(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    24(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    28(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,92(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,20(%esp)\r
+        xorl    %esi,%edx\r
+        addl    (%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    8(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,4(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    275423344(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    36(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    16(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    88(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    32(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    68(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    20(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    24(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,32(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,16(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    28(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    4(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    430227734(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    40(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    12(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    92(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    36(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    72(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    16(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    20(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,36(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,12(%esp)\r
+        xorl    %esi,%edx\r
+        addl    24(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    (%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,28(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    506948616(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    44(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    8(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    32(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    40(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    76(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    12(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    16(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,40(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,8(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    20(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    28(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,24(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    659060556(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    48(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    4(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    36(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    44(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    80(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    8(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    12(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,44(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,4(%esp)\r
+        xorl    %esi,%edx\r
+        addl    16(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    24(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,20(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    883997877(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    52(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    (%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    40(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    48(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    84(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    4(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    8(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,48(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    12(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    20(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,16(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    958139571(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    56(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    28(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    44(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    52(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    88(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    (%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    4(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,52(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,28(%esp)\r
+        xorl    %esi,%edx\r
+        addl    8(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    16(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,12(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    1322822218(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    60(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    24(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    48(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    56(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    92(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    28(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    (%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,56(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,24(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    4(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    12(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,8(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    1537002063(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    64(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    20(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    52(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    60(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    32(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    24(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    28(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,60(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,20(%esp)\r
+        xorl    %esi,%edx\r
+        addl    (%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    8(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,4(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    1747873779(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    68(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    16(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    56(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    64(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    36(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    20(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    24(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,64(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,16(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    28(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    4(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    1955562222(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    72(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    12(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    60(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    68(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    40(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    16(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    20(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,68(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,12(%esp)\r
+        xorl    %esi,%edx\r
+        addl    24(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    (%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,28(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    2024104815(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    76(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    8(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    64(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    72(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    44(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    12(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    16(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,72(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,8(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    20(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    28(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,24(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    2227730452(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    80(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    4(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    68(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    76(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    48(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    8(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    12(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,76(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,4(%esp)\r
+        xorl    %esi,%edx\r
+        addl    16(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    24(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,20(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    2361852424(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    84(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    (%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    72(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    80(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    52(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    4(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    8(%esp),%edi\r
+        xorl    %ecx,%edx\r
+        movl    %ebx,80(%esp)\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    12(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    20(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,16(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    2428436474(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    88(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    28(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    76(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    84(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    56(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    (%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    4(%esp),%edi\r
+        xorl    %esi,%edx\r
+        movl    %ebx,84(%esp)\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,28(%esp)\r
+        xorl    %esi,%edx\r
+        addl    8(%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    16(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,12(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    2756734187(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        movl    92(%esp),%ecx\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    24(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    80(%esp),%esi\r
+        movl    %ecx,%ebx\r
+        rorl    $11,%ecx\r
+        movl    %esi,%edi\r
+        rorl    $2,%esi\r
+        xorl    %ebx,%ecx\r
+        shrl    $3,%ebx\r
+        rorl    $7,%ecx\r
+        xorl    %edi,%esi\r
+        xorl    %ecx,%ebx\r
+        rorl    $17,%esi\r
+        addl    88(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    60(%esp),%ebx\r
+        movl    %edx,%ecx\r
+        xorl    %esi,%edi\r
+        movl    28(%esp),%esi\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    (%esp),%edi\r
+        xorl    %ecx,%edx\r
+        xorl    %edi,%esi\r
+        rorl    $5,%edx\r
+        andl    %ecx,%esi\r
+        movl    %ecx,24(%esp)\r
+        xorl    %ecx,%edx\r
+        addl    4(%esp),%ebx\r
+        xorl    %esi,%edi\r
+        rorl    $6,%edx\r
+        movl    %eax,%ecx\r
+        addl    %edi,%ebx\r
+        rorl    $9,%ecx\r
+        movl    %eax,%esi\r
+        movl    12(%esp),%edi\r
+        xorl    %eax,%ecx\r
+        movl    %eax,8(%esp)\r
+        xorl    %edi,%eax\r
+        rorl    $11,%ecx\r
+        andl    %eax,%ebp\r
+        leal    3204031479(%ebx,%edx,1),%edx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%ebp\r
+        movl    32(%esp),%esi\r
+        rorl    $2,%ecx\r
+        addl    %edx,%ebp\r
+        addl    20(%esp),%edx\r
+        addl    %ecx,%ebp\r
+        movl    84(%esp),%ecx\r
+        movl    %esi,%ebx\r
+        rorl    $11,%esi\r
+        movl    %ecx,%edi\r
+        rorl    $2,%ecx\r
+        xorl    %ebx,%esi\r
+        shrl    $3,%ebx\r
+        rorl    $7,%esi\r
+        xorl    %edi,%ecx\r
+        xorl    %esi,%ebx\r
+        rorl    $17,%ecx\r
+        addl    92(%esp),%ebx\r
+        shrl    $10,%edi\r
+        addl    64(%esp),%ebx\r
+        movl    %edx,%esi\r
+        xorl    %ecx,%edi\r
+        movl    24(%esp),%ecx\r
+        rorl    $14,%edx\r
+        addl    %edi,%ebx\r
+        movl    28(%esp),%edi\r
+        xorl    %esi,%edx\r
+        xorl    %edi,%ecx\r
+        rorl    $5,%edx\r
+        andl    %esi,%ecx\r
+        movl    %esi,20(%esp)\r
+        xorl    %esi,%edx\r
+        addl    (%esp),%ebx\r
+        xorl    %ecx,%edi\r
+        rorl    $6,%edx\r
+        movl    %ebp,%esi\r
+        addl    %edi,%ebx\r
+        rorl    $9,%esi\r
+        movl    %ebp,%ecx\r
+        movl    8(%esp),%edi\r
+        xorl    %ebp,%esi\r
+        movl    %ebp,4(%esp)\r
+        xorl    %edi,%ebp\r
+        rorl    $11,%esi\r
+        andl    %ebp,%eax\r
+        leal    3329325298(%ebx,%edx,1),%edx\r
+        xorl    %ecx,%esi\r
+        xorl    %edi,%eax\r
+        rorl    $2,%esi\r
+        addl    %edx,%eax\r
+        addl    16(%esp),%edx\r
+        addl    %esi,%eax\r
+        movl    96(%esp),%esi\r
+        xorl    %edi,%ebp\r
+        movl    12(%esp),%ecx\r
+        addl    (%esi),%eax\r
+        addl    4(%esi),%ebp\r
+        addl    8(%esi),%edi\r
+        addl    12(%esi),%ecx\r
+        movl    %eax,(%esi)\r
+        movl    %ebp,4(%esi)\r
+        movl    %edi,8(%esi)\r
+        movl    %ecx,12(%esi)\r
+        movl    %ebp,4(%esp)\r
+        xorl    %edi,%ebp\r
+        movl    %edi,8(%esp)\r
+        movl    %ecx,12(%esp)\r
+        movl    20(%esp),%edi\r
+        movl    24(%esp),%ebx\r
+        movl    28(%esp),%ecx\r
+        addl    16(%esi),%edx\r
+        addl    20(%esi),%edi\r
+        addl    24(%esi),%ebx\r
+        addl    28(%esi),%ecx\r
+        movl    %edx,16(%esi)\r
+        movl    %edi,20(%esi)\r
+        movl    %ebx,24(%esi)\r
+        movl    %ecx,28(%esi)\r
+        movl    %edi,20(%esp)\r
+        movl    100(%esp),%edi\r
+        movl    %ebx,24(%esp)\r
+        movl    %ecx,28(%esp)\r
+        cmpl    104(%esp),%edi\r
+        jb      .L009grand_loop\r
+        movl    108(%esp),%esp\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   sha256_block_data_order,.-.L_sha256_block_data_order_begin\r
diff --git a/CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/sha/sha512-586.S b/CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/sha/sha512-586.S
new file mode 100644 (file)
index 0000000..c01cc2b
--- /dev/null
@@ -0,0 +1,574 @@
+# WARNING: do not edit!\r
+# Generated from openssl/crypto/sha/asm/sha512-586.pl\r
+#\r
+# Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved.\r
+#\r
+# Licensed under the OpenSSL license (the "License").  You may not use\r
+# this file except in compliance with the License.  You can obtain a copy\r
+# in the file LICENSE in the source distribution or at\r
+# https://www.openssl.org/source/license.html\r
+\r
+.text\r
+.globl  sha512_block_data_order\r
+.type   sha512_block_data_order,@function\r
+.align  16\r
+sha512_block_data_order:\r
+.L_sha512_block_data_order_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    20(%esp),%esi\r
+        movl    24(%esp),%edi\r
+        movl    28(%esp),%eax\r
+        movl    %esp,%ebx\r
+        call    .L000pic_point\r
+.L000pic_point:\r
+        popl    %ebp\r
+        leal    .L001K512-.L000pic_point(%ebp),%ebp\r
+        subl    $16,%esp\r
+        andl    $-64,%esp\r
+        shll    $7,%eax\r
+        addl    %edi,%eax\r
+        movl    %esi,(%esp)\r
+        movl    %edi,4(%esp)\r
+        movl    %eax,8(%esp)\r
+        movl    %ebx,12(%esp)\r
+.align  16\r
+.L002loop_x86:\r
+        movl    (%edi),%eax\r
+        movl    4(%edi),%ebx\r
+        movl    8(%edi),%ecx\r
+        movl    12(%edi),%edx\r
+        bswap   %eax\r
+        bswap   %ebx\r
+        bswap   %ecx\r
+        bswap   %edx\r
+        pushl   %eax\r
+        pushl   %ebx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        movl    16(%edi),%eax\r
+        movl    20(%edi),%ebx\r
+        movl    24(%edi),%ecx\r
+        movl    28(%edi),%edx\r
+        bswap   %eax\r
+        bswap   %ebx\r
+        bswap   %ecx\r
+        bswap   %edx\r
+        pushl   %eax\r
+        pushl   %ebx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        movl    32(%edi),%eax\r
+        movl    36(%edi),%ebx\r
+        movl    40(%edi),%ecx\r
+        movl    44(%edi),%edx\r
+        bswap   %eax\r
+        bswap   %ebx\r
+        bswap   %ecx\r
+        bswap   %edx\r
+        pushl   %eax\r
+        pushl   %ebx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        movl    48(%edi),%eax\r
+        movl    52(%edi),%ebx\r
+        movl    56(%edi),%ecx\r
+        movl    60(%edi),%edx\r
+        bswap   %eax\r
+        bswap   %ebx\r
+        bswap   %ecx\r
+        bswap   %edx\r
+        pushl   %eax\r
+        pushl   %ebx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        movl    64(%edi),%eax\r
+        movl    68(%edi),%ebx\r
+        movl    72(%edi),%ecx\r
+        movl    76(%edi),%edx\r
+        bswap   %eax\r
+        bswap   %ebx\r
+        bswap   %ecx\r
+        bswap   %edx\r
+        pushl   %eax\r
+        pushl   %ebx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        movl    80(%edi),%eax\r
+        movl    84(%edi),%ebx\r
+        movl    88(%edi),%ecx\r
+        movl    92(%edi),%edx\r
+        bswap   %eax\r
+        bswap   %ebx\r
+        bswap   %ecx\r
+        bswap   %edx\r
+        pushl   %eax\r
+        pushl   %ebx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        movl    96(%edi),%eax\r
+        movl    100(%edi),%ebx\r
+        movl    104(%edi),%ecx\r
+        movl    108(%edi),%edx\r
+        bswap   %eax\r
+        bswap   %ebx\r
+        bswap   %ecx\r
+        bswap   %edx\r
+        pushl   %eax\r
+        pushl   %ebx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        movl    112(%edi),%eax\r
+        movl    116(%edi),%ebx\r
+        movl    120(%edi),%ecx\r
+        movl    124(%edi),%edx\r
+        bswap   %eax\r
+        bswap   %ebx\r
+        bswap   %ecx\r
+        bswap   %edx\r
+        pushl   %eax\r
+        pushl   %ebx\r
+        pushl   %ecx\r
+        pushl   %edx\r
+        addl    $128,%edi\r
+        subl    $72,%esp\r
+        movl    %edi,204(%esp)\r
+        leal    8(%esp),%edi\r
+        movl    $16,%ecx\r
+.long   2784229001\r
+.align  16\r
+.L00300_15_x86:\r
+        movl    40(%esp),%ecx\r
+        movl    44(%esp),%edx\r
+        movl    %ecx,%esi\r
+        shrl    $9,%ecx\r
+        movl    %edx,%edi\r
+        shrl    $9,%edx\r
+        movl    %ecx,%ebx\r
+        shll    $14,%esi\r
+        movl    %edx,%eax\r
+        shll    $14,%edi\r
+        xorl    %esi,%ebx\r
+        shrl    $5,%ecx\r
+        xorl    %edi,%eax\r
+        shrl    $5,%edx\r
+        xorl    %ecx,%eax\r
+        shll    $4,%esi\r
+        xorl    %edx,%ebx\r
+        shll    $4,%edi\r
+        xorl    %esi,%ebx\r
+        shrl    $4,%ecx\r
+        xorl    %edi,%eax\r
+        shrl    $4,%edx\r
+        xorl    %ecx,%eax\r
+        shll    $5,%esi\r
+        xorl    %edx,%ebx\r
+        shll    $5,%edi\r
+        xorl    %esi,%eax\r
+        xorl    %edi,%ebx\r
+        movl    48(%esp),%ecx\r
+        movl    52(%esp),%edx\r
+        movl    56(%esp),%esi\r
+        movl    60(%esp),%edi\r
+        addl    64(%esp),%eax\r
+        adcl    68(%esp),%ebx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%edx\r
+        andl    40(%esp),%ecx\r
+        andl    44(%esp),%edx\r
+        addl    192(%esp),%eax\r
+        adcl    196(%esp),%ebx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%edx\r
+        movl    (%ebp),%esi\r
+        movl    4(%ebp),%edi\r
+        addl    %ecx,%eax\r
+        adcl    %edx,%ebx\r
+        movl    32(%esp),%ecx\r
+        movl    36(%esp),%edx\r
+        addl    %esi,%eax\r
+        adcl    %edi,%ebx\r
+        movl    %eax,(%esp)\r
+        movl    %ebx,4(%esp)\r
+        addl    %ecx,%eax\r
+        adcl    %edx,%ebx\r
+        movl    8(%esp),%ecx\r
+        movl    12(%esp),%edx\r
+        movl    %eax,32(%esp)\r
+        movl    %ebx,36(%esp)\r
+        movl    %ecx,%esi\r
+        shrl    $2,%ecx\r
+        movl    %edx,%edi\r
+        shrl    $2,%edx\r
+        movl    %ecx,%ebx\r
+        shll    $4,%esi\r
+        movl    %edx,%eax\r
+        shll    $4,%edi\r
+        xorl    %esi,%ebx\r
+        shrl    $5,%ecx\r
+        xorl    %edi,%eax\r
+        shrl    $5,%edx\r
+        xorl    %ecx,%ebx\r
+        shll    $21,%esi\r
+        xorl    %edx,%eax\r
+        shll    $21,%edi\r
+        xorl    %esi,%eax\r
+        shrl    $21,%ecx\r
+        xorl    %edi,%ebx\r
+        shrl    $21,%edx\r
+        xorl    %ecx,%eax\r
+        shll    $5,%esi\r
+        xorl    %edx,%ebx\r
+        shll    $5,%edi\r
+        xorl    %esi,%eax\r
+        xorl    %edi,%ebx\r
+        movl    8(%esp),%ecx\r
+        movl    12(%esp),%edx\r
+        movl    16(%esp),%esi\r
+        movl    20(%esp),%edi\r
+        addl    (%esp),%eax\r
+        adcl    4(%esp),%ebx\r
+        orl     %esi,%ecx\r
+        orl     %edi,%edx\r
+        andl    24(%esp),%ecx\r
+        andl    28(%esp),%edx\r
+        andl    8(%esp),%esi\r
+        andl    12(%esp),%edi\r
+        orl     %esi,%ecx\r
+        orl     %edi,%edx\r
+        addl    %ecx,%eax\r
+        adcl    %edx,%ebx\r
+        movl    %eax,(%esp)\r
+        movl    %ebx,4(%esp)\r
+        movb    (%ebp),%dl\r
+        subl    $8,%esp\r
+        leal    8(%ebp),%ebp\r
+        cmpb    $148,%dl\r
+        jne     .L00300_15_x86\r
+.align  16\r
+.L00416_79_x86:\r
+        movl    312(%esp),%ecx\r
+        movl    316(%esp),%edx\r
+        movl    %ecx,%esi\r
+        shrl    $1,%ecx\r
+        movl    %edx,%edi\r
+        shrl    $1,%edx\r
+        movl    %ecx,%eax\r
+        shll    $24,%esi\r
+        movl    %edx,%ebx\r
+        shll    $24,%edi\r
+        xorl    %esi,%ebx\r
+        shrl    $6,%ecx\r
+        xorl    %edi,%eax\r
+        shrl    $6,%edx\r
+        xorl    %ecx,%eax\r
+        shll    $7,%esi\r
+        xorl    %edx,%ebx\r
+        shll    $1,%edi\r
+        xorl    %esi,%ebx\r
+        shrl    $1,%ecx\r
+        xorl    %edi,%eax\r
+        shrl    $1,%edx\r
+        xorl    %ecx,%eax\r
+        shll    $6,%edi\r
+        xorl    %edx,%ebx\r
+        xorl    %edi,%eax\r
+        movl    %eax,(%esp)\r
+        movl    %ebx,4(%esp)\r
+        movl    208(%esp),%ecx\r
+        movl    212(%esp),%edx\r
+        movl    %ecx,%esi\r
+        shrl    $6,%ecx\r
+        movl    %edx,%edi\r
+        shrl    $6,%edx\r
+        movl    %ecx,%eax\r
+        shll    $3,%esi\r
+        movl    %edx,%ebx\r
+        shll    $3,%edi\r
+        xorl    %esi,%eax\r
+        shrl    $13,%ecx\r
+        xorl    %edi,%ebx\r
+        shrl    $13,%edx\r
+        xorl    %ecx,%eax\r
+        shll    $10,%esi\r
+        xorl    %edx,%ebx\r
+        shll    $10,%edi\r
+        xorl    %esi,%ebx\r
+        shrl    $10,%ecx\r
+        xorl    %edi,%eax\r
+        shrl    $10,%edx\r
+        xorl    %ecx,%ebx\r
+        shll    $13,%edi\r
+        xorl    %edx,%eax\r
+        xorl    %edi,%eax\r
+        movl    320(%esp),%ecx\r
+        movl    324(%esp),%edx\r
+        addl    (%esp),%eax\r
+        adcl    4(%esp),%ebx\r
+        movl    248(%esp),%esi\r
+        movl    252(%esp),%edi\r
+        addl    %ecx,%eax\r
+        adcl    %edx,%ebx\r
+        addl    %esi,%eax\r
+        adcl    %edi,%ebx\r
+        movl    %eax,192(%esp)\r
+        movl    %ebx,196(%esp)\r
+        movl    40(%esp),%ecx\r
+        movl    44(%esp),%edx\r
+        movl    %ecx,%esi\r
+        shrl    $9,%ecx\r
+        movl    %edx,%edi\r
+        shrl    $9,%edx\r
+        movl    %ecx,%ebx\r
+        shll    $14,%esi\r
+        movl    %edx,%eax\r
+        shll    $14,%edi\r
+        xorl    %esi,%ebx\r
+        shrl    $5,%ecx\r
+        xorl    %edi,%eax\r
+        shrl    $5,%edx\r
+        xorl    %ecx,%eax\r
+        shll    $4,%esi\r
+        xorl    %edx,%ebx\r
+        shll    $4,%edi\r
+        xorl    %esi,%ebx\r
+        shrl    $4,%ecx\r
+        xorl    %edi,%eax\r
+        shrl    $4,%edx\r
+        xorl    %ecx,%eax\r
+        shll    $5,%esi\r
+        xorl    %edx,%ebx\r
+        shll    $5,%edi\r
+        xorl    %esi,%eax\r
+        xorl    %edi,%ebx\r
+        movl    48(%esp),%ecx\r
+        movl    52(%esp),%edx\r
+        movl    56(%esp),%esi\r
+        movl    60(%esp),%edi\r
+        addl    64(%esp),%eax\r
+        adcl    68(%esp),%ebx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%edx\r
+        andl    40(%esp),%ecx\r
+        andl    44(%esp),%edx\r
+        addl    192(%esp),%eax\r
+        adcl    196(%esp),%ebx\r
+        xorl    %esi,%ecx\r
+        xorl    %edi,%edx\r
+        movl    (%ebp),%esi\r
+        movl    4(%ebp),%edi\r
+        addl    %ecx,%eax\r
+        adcl    %edx,%ebx\r
+        movl    32(%esp),%ecx\r
+        movl    36(%esp),%edx\r
+        addl    %esi,%eax\r
+        adcl    %edi,%ebx\r
+        movl    %eax,(%esp)\r
+        movl    %ebx,4(%esp)\r
+        addl    %ecx,%eax\r
+        adcl    %edx,%ebx\r
+        movl    8(%esp),%ecx\r
+        movl    12(%esp),%edx\r
+        movl    %eax,32(%esp)\r
+        movl    %ebx,36(%esp)\r
+        movl    %ecx,%esi\r
+        shrl    $2,%ecx\r
+        movl    %edx,%edi\r
+        shrl    $2,%edx\r
+        movl    %ecx,%ebx\r
+        shll    $4,%esi\r
+        movl    %edx,%eax\r
+        shll    $4,%edi\r
+        xorl    %esi,%ebx\r
+        shrl    $5,%ecx\r
+        xorl    %edi,%eax\r
+        shrl    $5,%edx\r
+        xorl    %ecx,%ebx\r
+        shll    $21,%esi\r
+        xorl    %edx,%eax\r
+        shll    $21,%edi\r
+        xorl    %esi,%eax\r
+        shrl    $21,%ecx\r
+        xorl    %edi,%ebx\r
+        shrl    $21,%edx\r
+        xorl    %ecx,%eax\r
+        shll    $5,%esi\r
+        xorl    %edx,%ebx\r
+        shll    $5,%edi\r
+        xorl    %esi,%eax\r
+        xorl    %edi,%ebx\r
+        movl    8(%esp),%ecx\r
+        movl    12(%esp),%edx\r
+        movl    16(%esp),%esi\r
+        movl    20(%esp),%edi\r
+        addl    (%esp),%eax\r
+        adcl    4(%esp),%ebx\r
+        orl     %esi,%ecx\r
+        orl     %edi,%edx\r
+        andl    24(%esp),%ecx\r
+        andl    28(%esp),%edx\r
+        andl    8(%esp),%esi\r
+        andl    12(%esp),%edi\r
+        orl     %esi,%ecx\r
+        orl     %edi,%edx\r
+        addl    %ecx,%eax\r
+        adcl    %edx,%ebx\r
+        movl    %eax,(%esp)\r
+        movl    %ebx,4(%esp)\r
+        movb    (%ebp),%dl\r
+        subl    $8,%esp\r
+        leal    8(%ebp),%ebp\r
+        cmpb    $23,%dl\r
+        jne     .L00416_79_x86\r
+        movl    840(%esp),%esi\r
+        movl    844(%esp),%edi\r
+        movl    (%esi),%eax\r
+        movl    4(%esi),%ebx\r
+        movl    8(%esi),%ecx\r
+        movl    12(%esi),%edx\r
+        addl    8(%esp),%eax\r
+        adcl    12(%esp),%ebx\r
+        movl    %eax,(%esi)\r
+        movl    %ebx,4(%esi)\r
+        addl    16(%esp),%ecx\r
+        adcl    20(%esp),%edx\r
+        movl    %ecx,8(%esi)\r
+        movl    %edx,12(%esi)\r
+        movl    16(%esi),%eax\r
+        movl    20(%esi),%ebx\r
+        movl    24(%esi),%ecx\r
+        movl    28(%esi),%edx\r
+        addl    24(%esp),%eax\r
+        adcl    28(%esp),%ebx\r
+        movl    %eax,16(%esi)\r
+        movl    %ebx,20(%esi)\r
+        addl    32(%esp),%ecx\r
+        adcl    36(%esp),%edx\r
+        movl    %ecx,24(%esi)\r
+        movl    %edx,28(%esi)\r
+        movl    32(%esi),%eax\r
+        movl    36(%esi),%ebx\r
+        movl    40(%esi),%ecx\r
+        movl    44(%esi),%edx\r
+        addl    40(%esp),%eax\r
+        adcl    44(%esp),%ebx\r
+        movl    %eax,32(%esi)\r
+        movl    %ebx,36(%esi)\r
+        addl    48(%esp),%ecx\r
+        adcl    52(%esp),%edx\r
+        movl    %ecx,40(%esi)\r
+        movl    %edx,44(%esi)\r
+        movl    48(%esi),%eax\r
+        movl    52(%esi),%ebx\r
+        movl    56(%esi),%ecx\r
+        movl    60(%esi),%edx\r
+        addl    56(%esp),%eax\r
+        adcl    60(%esp),%ebx\r
+        movl    %eax,48(%esi)\r
+        movl    %ebx,52(%esi)\r
+        addl    64(%esp),%ecx\r
+        adcl    68(%esp),%edx\r
+        movl    %ecx,56(%esi)\r
+        movl    %edx,60(%esi)\r
+        addl    $840,%esp\r
+        subl    $640,%ebp\r
+        cmpl    8(%esp),%edi\r
+        jb      .L002loop_x86\r
+        movl    12(%esp),%esp\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.align  64\r
+.L001K512:\r
+.long   3609767458,1116352408\r
+.long   602891725,1899447441\r
+.long   3964484399,3049323471\r
+.long   2173295548,3921009573\r
+.long   4081628472,961987163\r
+.long   3053834265,1508970993\r
+.long   2937671579,2453635748\r
+.long   3664609560,2870763221\r
+.long   2734883394,3624381080\r
+.long   1164996542,310598401\r
+.long   1323610764,607225278\r
+.long   3590304994,1426881987\r
+.long   4068182383,1925078388\r
+.long   991336113,2162078206\r
+.long   633803317,2614888103\r
+.long   3479774868,3248222580\r
+.long   2666613458,3835390401\r
+.long   944711139,4022224774\r
+.long   2341262773,264347078\r
+.long   2007800933,604807628\r
+.long   1495990901,770255983\r
+.long   1856431235,1249150122\r
+.long   3175218132,1555081692\r
+.long   2198950837,1996064986\r
+.long   3999719339,2554220882\r
+.long   766784016,2821834349\r
+.long   2566594879,2952996808\r
+.long   3203337956,3210313671\r
+.long   1034457026,3336571891\r
+.long   2466948901,3584528711\r
+.long   3758326383,113926993\r
+.long   168717936,338241895\r
+.long   1188179964,666307205\r
+.long   1546045734,773529912\r
+.long   1522805485,1294757372\r
+.long   2643833823,1396182291\r
+.long   2343527390,1695183700\r
+.long   1014477480,1986661051\r
+.long   1206759142,2177026350\r
+.long   344077627,2456956037\r
+.long   1290863460,2730485921\r
+.long   3158454273,2820302411\r
+.long   3505952657,3259730800\r
+.long   106217008,3345764771\r
+.long   3606008344,3516065817\r
+.long   1432725776,3600352804\r
+.long   1467031594,4094571909\r
+.long   851169720,275423344\r
+.long   3100823752,430227734\r
+.long   1363258195,506948616\r
+.long   3750685593,659060556\r
+.long   3785050280,883997877\r
+.long   3318307427,958139571\r
+.long   3812723403,1322822218\r
+.long   2003034995,1537002063\r
+.long   3602036899,1747873779\r
+.long   1575990012,1955562222\r
+.long   1125592928,2024104815\r
+.long   2716904306,2227730452\r
+.long   442776044,2361852424\r
+.long   593698344,2428436474\r
+.long   3733110249,2756734187\r
+.long   2999351573,3204031479\r
+.long   3815920427,3329325298\r
+.long   3928383900,3391569614\r
+.long   566280711,3515267271\r
+.long   3454069534,3940187606\r
+.long   4000239992,4118630271\r
+.long   1914138554,116418474\r
+.long   2731055270,174292421\r
+.long   3203993006,289380356\r
+.long   320620315,460393269\r
+.long   587496836,685471733\r
+.long   1086792851,852142971\r
+.long   365543100,1017036298\r
+.long   2618297676,1126000580\r
+.long   3409855158,1288033470\r
+.long   4234509866,1501505948\r
+.long   987167468,1607167915\r
+.long   1246189591,1816402316\r
+.long   67438087,66051\r
+.long   202182159,134810123\r
+.size   sha512_block_data_order,.-.L_sha512_block_data_order_begin\r
+.byte   83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97\r
+.byte   110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32\r
+.byte   67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97\r
+.byte   112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103\r
+.byte   62,0\r
diff --git a/CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/x86cpuid.S b/CryptoPkg/Library/OpensslLib/IA32Gcc/crypto/x86cpuid.S
new file mode 100644 (file)
index 0000000..a1934cb
--- /dev/null
@@ -0,0 +1,449 @@
+# WARNING: do not edit!\r
+# Generated from openssl/crypto/x86cpuid.pl\r
+#\r
+# Copyright 2004-2020 The OpenSSL Project Authors. All Rights Reserved.\r
+#\r
+# Licensed under the OpenSSL license (the "License").  You may not use\r
+# this file except in compliance with the License.  You can obtain a copy\r
+# in the file LICENSE in the source distribution or at\r
+# https://www.openssl.org/source/license.html\r
+\r
+.text\r
+.globl  OPENSSL_ia32_cpuid\r
+.type   OPENSSL_ia32_cpuid,@function\r
+.align  16\r
+OPENSSL_ia32_cpuid:\r
+.L_OPENSSL_ia32_cpuid_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        xorl    %edx,%edx\r
+        pushfl\r
+        popl    %eax\r
+        movl    %eax,%ecx\r
+        xorl    $2097152,%eax\r
+        pushl   %eax\r
+        popfl\r
+        pushfl\r
+        popl    %eax\r
+        xorl    %eax,%ecx\r
+        xorl    %eax,%eax\r
+        movl    20(%esp),%esi\r
+        movl    %eax,8(%esi)\r
+        btl     $21,%ecx\r
+        jnc     .L000nocpuid\r
+        .byte   0x0f,0xa2\r
+        movl    %eax,%edi\r
+        xorl    %eax,%eax\r
+        cmpl    $1970169159,%ebx\r
+        setne   %al\r
+        movl    %eax,%ebp\r
+        cmpl    $1231384169,%edx\r
+        setne   %al\r
+        orl     %eax,%ebp\r
+        cmpl    $1818588270,%ecx\r
+        setne   %al\r
+        orl     %eax,%ebp\r
+        jz      .L001intel\r
+        cmpl    $1752462657,%ebx\r
+        setne   %al\r
+        movl    %eax,%esi\r
+        cmpl    $1769238117,%edx\r
+        setne   %al\r
+        orl     %eax,%esi\r
+        cmpl    $1145913699,%ecx\r
+        setne   %al\r
+        orl     %eax,%esi\r
+        jnz     .L001intel\r
+        movl    $2147483648,%eax\r
+        .byte   0x0f,0xa2\r
+        cmpl    $2147483649,%eax\r
+        jb      .L001intel\r
+        movl    %eax,%esi\r
+        movl    $2147483649,%eax\r
+        .byte   0x0f,0xa2\r
+        orl     %ecx,%ebp\r
+        andl    $2049,%ebp\r
+        cmpl    $2147483656,%esi\r
+        jb      .L001intel\r
+        movl    $2147483656,%eax\r
+        .byte   0x0f,0xa2\r
+        movzbl  %cl,%esi\r
+        incl    %esi\r
+        movl    $1,%eax\r
+        xorl    %ecx,%ecx\r
+        .byte   0x0f,0xa2\r
+        btl     $28,%edx\r
+        jnc     .L002generic\r
+        shrl    $16,%ebx\r
+        andl    $255,%ebx\r
+        cmpl    %esi,%ebx\r
+        ja      .L002generic\r
+        andl    $4026531839,%edx\r
+        jmp     .L002generic\r
+.L001intel:\r
+        cmpl    $4,%edi\r
+        movl    $-1,%esi\r
+        jb      .L003nocacheinfo\r
+        movl    $4,%eax\r
+        movl    $0,%ecx\r
+        .byte   0x0f,0xa2\r
+        movl    %eax,%esi\r
+        shrl    $14,%esi\r
+        andl    $4095,%esi\r
+.L003nocacheinfo:\r
+        movl    $1,%eax\r
+        xorl    %ecx,%ecx\r
+        .byte   0x0f,0xa2\r
+        andl    $3220176895,%edx\r
+        cmpl    $0,%ebp\r
+        jne     .L004notintel\r
+        orl     $1073741824,%edx\r
+        andb    $15,%ah\r
+        cmpb    $15,%ah\r
+        jne     .L004notintel\r
+        orl     $1048576,%edx\r
+.L004notintel:\r
+        btl     $28,%edx\r
+        jnc     .L002generic\r
+        andl    $4026531839,%edx\r
+        cmpl    $0,%esi\r
+        je      .L002generic\r
+        orl     $268435456,%edx\r
+        shrl    $16,%ebx\r
+        cmpb    $1,%bl\r
+        ja      .L002generic\r
+        andl    $4026531839,%edx\r
+.L002generic:\r
+        andl    $2048,%ebp\r
+        andl    $4294965247,%ecx\r
+        movl    %edx,%esi\r
+        orl     %ecx,%ebp\r
+        cmpl    $7,%edi\r
+        movl    20(%esp),%edi\r
+        jb      .L005no_extended_info\r
+        movl    $7,%eax\r
+        xorl    %ecx,%ecx\r
+        .byte   0x0f,0xa2\r
+        movl    %ebx,8(%edi)\r
+.L005no_extended_info:\r
+        btl     $27,%ebp\r
+        jnc     .L006clear_avx\r
+        xorl    %ecx,%ecx\r
+.byte   15,1,208\r
+        andl    $6,%eax\r
+        cmpl    $6,%eax\r
+        je      .L007done\r
+        cmpl    $2,%eax\r
+        je      .L006clear_avx\r
+.L008clear_xmm:\r
+        andl    $4261412861,%ebp\r
+        andl    $4278190079,%esi\r
+.L006clear_avx:\r
+        andl    $4026525695,%ebp\r
+        andl    $4294967263,8(%edi)\r
+.L007done:\r
+        movl    %esi,%eax\r
+        movl    %ebp,%edx\r
+.L000nocpuid:\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin\r
+.globl  OPENSSL_rdtsc\r
+.type   OPENSSL_rdtsc,@function\r
+.align  16\r
+OPENSSL_rdtsc:\r
+.L_OPENSSL_rdtsc_begin:\r
+        xorl    %eax,%eax\r
+        xorl    %edx,%edx\r
+        leal    OPENSSL_ia32cap_P,%ecx\r
+        btl     $4,(%ecx)\r
+        jnc     .L009notsc\r
+        .byte   0x0f,0x31\r
+.L009notsc:\r
+        ret\r
+.size   OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin\r
+.globl  OPENSSL_instrument_halt\r
+.type   OPENSSL_instrument_halt,@function\r
+.align  16\r
+OPENSSL_instrument_halt:\r
+.L_OPENSSL_instrument_halt_begin:\r
+        leal    OPENSSL_ia32cap_P,%ecx\r
+        btl     $4,(%ecx)\r
+        jnc     .L010nohalt\r
+.long   2421723150\r
+        andl    $3,%eax\r
+        jnz     .L010nohalt\r
+        pushfl\r
+        popl    %eax\r
+        btl     $9,%eax\r
+        jnc     .L010nohalt\r
+        .byte   0x0f,0x31\r
+        pushl   %edx\r
+        pushl   %eax\r
+        hlt\r
+        .byte   0x0f,0x31\r
+        subl    (%esp),%eax\r
+        sbbl    4(%esp),%edx\r
+        addl    $8,%esp\r
+        ret\r
+.L010nohalt:\r
+        xorl    %eax,%eax\r
+        xorl    %edx,%edx\r
+        ret\r
+.size   OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin\r
+.globl  OPENSSL_far_spin\r
+.type   OPENSSL_far_spin,@function\r
+.align  16\r
+OPENSSL_far_spin:\r
+.L_OPENSSL_far_spin_begin:\r
+        pushfl\r
+        popl    %eax\r
+        btl     $9,%eax\r
+        jnc     .L011nospin\r
+        movl    4(%esp),%eax\r
+        movl    8(%esp),%ecx\r
+.long   2430111262\r
+        xorl    %eax,%eax\r
+        movl    (%ecx),%edx\r
+        jmp     .L012spin\r
+.align  16\r
+.L012spin:\r
+        incl    %eax\r
+        cmpl    (%ecx),%edx\r
+        je      .L012spin\r
+.long   529567888\r
+        ret\r
+.L011nospin:\r
+        xorl    %eax,%eax\r
+        xorl    %edx,%edx\r
+        ret\r
+.size   OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin\r
+.globl  OPENSSL_wipe_cpu\r
+.type   OPENSSL_wipe_cpu,@function\r
+.align  16\r
+OPENSSL_wipe_cpu:\r
+.L_OPENSSL_wipe_cpu_begin:\r
+        xorl    %eax,%eax\r
+        xorl    %edx,%edx\r
+        leal    OPENSSL_ia32cap_P,%ecx\r
+        movl    (%ecx),%ecx\r
+        btl     $1,(%ecx)\r
+        jnc     .L013no_x87\r
+.long   4007259865,4007259865,4007259865,4007259865,2430851995\r
+.L013no_x87:\r
+        leal    4(%esp),%eax\r
+        ret\r
+.size   OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin\r
+.globl  OPENSSL_atomic_add\r
+.type   OPENSSL_atomic_add,@function\r
+.align  16\r
+OPENSSL_atomic_add:\r
+.L_OPENSSL_atomic_add_begin:\r
+        movl    4(%esp),%edx\r
+        movl    8(%esp),%ecx\r
+        pushl   %ebx\r
+        nop\r
+        movl    (%edx),%eax\r
+.L014spin:\r
+        leal    (%eax,%ecx,1),%ebx\r
+        nop\r
+.long   447811568\r
+        jne     .L014spin\r
+        movl    %ebx,%eax\r
+        popl    %ebx\r
+        ret\r
+.size   OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin\r
+.globl  OPENSSL_cleanse\r
+.type   OPENSSL_cleanse,@function\r
+.align  16\r
+OPENSSL_cleanse:\r
+.L_OPENSSL_cleanse_begin:\r
+        movl    4(%esp),%edx\r
+        movl    8(%esp),%ecx\r
+        xorl    %eax,%eax\r
+        cmpl    $7,%ecx\r
+        jae     .L015lot\r
+        cmpl    $0,%ecx\r
+        je      .L016ret\r
+.L017little:\r
+        movb    %al,(%edx)\r
+        subl    $1,%ecx\r
+        leal    1(%edx),%edx\r
+        jnz     .L017little\r
+.L016ret:\r
+        ret\r
+.align  16\r
+.L015lot:\r
+        testl   $3,%edx\r
+        jz      .L018aligned\r
+        movb    %al,(%edx)\r
+        leal    -1(%ecx),%ecx\r
+        leal    1(%edx),%edx\r
+        jmp     .L015lot\r
+.L018aligned:\r
+        movl    %eax,(%edx)\r
+        leal    -4(%ecx),%ecx\r
+        testl   $-4,%ecx\r
+        leal    4(%edx),%edx\r
+        jnz     .L018aligned\r
+        cmpl    $0,%ecx\r
+        jne     .L017little\r
+        ret\r
+.size   OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin\r
+.globl  CRYPTO_memcmp\r
+.type   CRYPTO_memcmp,@function\r
+.align  16\r
+CRYPTO_memcmp:\r
+.L_CRYPTO_memcmp_begin:\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    12(%esp),%esi\r
+        movl    16(%esp),%edi\r
+        movl    20(%esp),%ecx\r
+        xorl    %eax,%eax\r
+        xorl    %edx,%edx\r
+        cmpl    $0,%ecx\r
+        je      .L019no_data\r
+.L020loop:\r
+        movb    (%esi),%dl\r
+        leal    1(%esi),%esi\r
+        xorb    (%edi),%dl\r
+        leal    1(%edi),%edi\r
+        orb     %dl,%al\r
+        decl    %ecx\r
+        jnz     .L020loop\r
+        negl    %eax\r
+        shrl    $31,%eax\r
+.L019no_data:\r
+        popl    %edi\r
+        popl    %esi\r
+        ret\r
+.size   CRYPTO_memcmp,.-.L_CRYPTO_memcmp_begin\r
+.globl  OPENSSL_instrument_bus\r
+.type   OPENSSL_instrument_bus,@function\r
+.align  16\r
+OPENSSL_instrument_bus:\r
+.L_OPENSSL_instrument_bus_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    $0,%eax\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   OPENSSL_instrument_bus,.-.L_OPENSSL_instrument_bus_begin\r
+.globl  OPENSSL_instrument_bus2\r
+.type   OPENSSL_instrument_bus2,@function\r
+.align  16\r
+OPENSSL_instrument_bus2:\r
+.L_OPENSSL_instrument_bus2_begin:\r
+        pushl   %ebp\r
+        pushl   %ebx\r
+        pushl   %esi\r
+        pushl   %edi\r
+        movl    $0,%eax\r
+        popl    %edi\r
+        popl    %esi\r
+        popl    %ebx\r
+        popl    %ebp\r
+        ret\r
+.size   OPENSSL_instrument_bus2,.-.L_OPENSSL_instrument_bus2_begin\r
+.globl  OPENSSL_ia32_rdrand_bytes\r
+.type   OPENSSL_ia32_rdrand_bytes,@function\r
+.align  16\r
+OPENSSL_ia32_rdrand_bytes:\r
+.L_OPENSSL_ia32_rdrand_bytes_begin:\r
+        pushl   %edi\r
+        pushl   %ebx\r
+        xorl    %eax,%eax\r
+        movl    12(%esp),%edi\r
+        movl    16(%esp),%ebx\r
+        cmpl    $0,%ebx\r
+        je      .L021done\r
+        movl    $8,%ecx\r
+.L022loop:\r
+.byte   15,199,242\r
+        jc      .L023break\r
+        loop    .L022loop\r
+        jmp     .L021done\r
+.align  16\r
+.L023break:\r
+        cmpl    $4,%ebx\r
+        jb      .L024tail\r
+        movl    %edx,(%edi)\r
+        leal    4(%edi),%edi\r
+        addl    $4,%eax\r
+        subl    $4,%ebx\r
+        jz      .L021done\r
+        movl    $8,%ecx\r
+        jmp     .L022loop\r
+.align  16\r
+.L024tail:\r
+        movb    %dl,(%edi)\r
+        leal    1(%edi),%edi\r
+        incl    %eax\r
+        shrl    $8,%edx\r
+        decl    %ebx\r
+        jnz     .L024tail\r
+.L021done:\r
+        xorl    %edx,%edx\r
+        popl    %ebx\r
+        popl    %edi\r
+        ret\r
+.size   OPENSSL_ia32_rdrand_bytes,.-.L_OPENSSL_ia32_rdrand_bytes_begin\r
+.globl  OPENSSL_ia32_rdseed_bytes\r
+.type   OPENSSL_ia32_rdseed_bytes,@function\r
+.align  16\r
+OPENSSL_ia32_rdseed_bytes:\r
+.L_OPENSSL_ia32_rdseed_bytes_begin:\r
+        pushl   %edi\r
+        pushl   %ebx\r
+        xorl    %eax,%eax\r
+        movl    12(%esp),%edi\r
+        movl    16(%esp),%ebx\r
+        cmpl    $0,%ebx\r
+        je      .L025done\r
+        movl    $8,%ecx\r
+.L026loop:\r
+.byte   15,199,250\r
+        jc      .L027break\r
+        loop    .L026loop\r
+        jmp     .L025done\r
+.align  16\r
+.L027break:\r
+        cmpl    $4,%ebx\r
+        jb      .L028tail\r
+        movl    %edx,(%edi)\r
+        leal    4(%edi),%edi\r
+        addl    $4,%eax\r
+        subl    $4,%ebx\r
+        jz      .L025done\r
+        movl    $8,%ecx\r
+        jmp     .L026loop\r
+.align  16\r
+.L028tail:\r
+        movb    %dl,(%edi)\r
+        leal    1(%edi),%edi\r
+        incl    %eax\r
+        shrl    $8,%edx\r
+        decl    %ebx\r
+        jnz     .L028tail\r
+.L025done:\r
+        xorl    %edx,%edx\r
+        popl    %ebx\r
+        popl    %edi\r
+        ret\r
+.size   OPENSSL_ia32_rdseed_bytes,.-.L_OPENSSL_ia32_rdseed_bytes_begin\r
+.hidden OPENSSL_cpuid_setup\r
+.hidden OPENSSL_ia32cap_P\r
+.comm   OPENSSL_ia32cap_P,16,4\r
+.section        .init\r
+        call    OPENSSL_cpuid_setup\r