; WARNING: do not edit!
; Generated from openssl/crypto/sha/asm/sha1-x86_64.pl
;
; Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
;
; Licensed under the OpenSSL license (the "License").  You may not use
; this file except in compliance with the License.  You can obtain a copy
; in the file LICENSE in the source distribution or at
; https://www.openssl.org/source/license.html

default rel
%define XMMWORD
%define YMMWORD
%define ZMMWORD
section .text code align=64

EXTERN  OPENSSL_ia32cap_P

global  sha1_block_data_order

ALIGN   16
sha1_block_data_order:
        mov     QWORD[8+rsp],rdi        ;WIN64 prologue
        mov     QWORD[16+rsp],rsi
        mov     rax,rsp
$L$SEH_begin_sha1_block_data_order:
        mov     rdi,rcx
        mov     rsi,rdx
        mov     rdx,r8



        mov     r9d,DWORD[((OPENSSL_ia32cap_P+0))]
        mov     r8d,DWORD[((OPENSSL_ia32cap_P+4))]
        mov     r10d,DWORD[((OPENSSL_ia32cap_P+8))]
        test    r8d,512
        jz      NEAR $L$ialu
        test    r10d,536870912
        jnz     NEAR _shaext_shortcut
        jmp     NEAR _ssse3_shortcut

ALIGN   16
$L$ialu:
        mov     rax,rsp

        push    rbx

        push    rbp

        push    r12

        push    r13

        push    r14

        mov     r8,rdi
        sub     rsp,72
        mov     r9,rsi
        and     rsp,-64
        mov     r10,rdx
        mov     QWORD[64+rsp],rax

$L$prologue:

        mov     esi,DWORD[r8]
        mov     edi,DWORD[4+r8]
        mov     r11d,DWORD[8+r8]
        mov     r12d,DWORD[12+r8]
        mov     r13d,DWORD[16+r8]
        jmp     NEAR $L$loop

ALIGN   16
$L$loop:
        mov     edx,DWORD[r9]
        bswap   edx
        mov     ebp,DWORD[4+r9]
        mov     eax,r12d
        mov     DWORD[rsp],edx
        mov     ecx,esi
        bswap   ebp
        xor     eax,r11d
        rol     ecx,5
        and     eax,edi
        lea     r13d,[1518500249+r13*1+rdx]
        add     r13d,ecx
        xor     eax,r12d
        rol     edi,30
        add     r13d,eax
        mov     r14d,DWORD[8+r9]
        mov     eax,r11d
        mov     DWORD[4+rsp],ebp
        mov     ecx,r13d
        bswap   r14d
        xor     eax,edi
        rol     ecx,5
        and     eax,esi
        lea     r12d,[1518500249+r12*1+rbp]
        add     r12d,ecx
        xor     eax,r11d
        rol     esi,30
        add     r12d,eax
        mov     edx,DWORD[12+r9]
        mov     eax,edi
        mov     DWORD[8+rsp],r14d
        mov     ecx,r12d
        bswap   edx
        xor     eax,esi
        rol     ecx,5
        and     eax,r13d
        lea     r11d,[1518500249+r11*1+r14]
        add     r11d,ecx
        xor     eax,edi
        rol     r13d,30
        add     r11d,eax
        mov     ebp,DWORD[16+r9]
        mov     eax,esi
        mov     DWORD[12+rsp],edx
        mov     ecx,r11d
        bswap   ebp
        xor     eax,r13d
        rol     ecx,5
        and     eax,r12d
        lea     edi,[1518500249+rdi*1+rdx]
        add     edi,ecx
        xor     eax,esi
        rol     r12d,30
        add     edi,eax
        mov     r14d,DWORD[20+r9]
        mov     eax,r13d
        mov     DWORD[16+rsp],ebp
        mov     ecx,edi
        bswap   r14d
        xor     eax,r12d
        rol     ecx,5
        and     eax,r11d
        lea     esi,[1518500249+rsi*1+rbp]
        add     esi,ecx
        xor     eax,r13d
        rol     r11d,30
        add     esi,eax
        mov     edx,DWORD[24+r9]
        mov     eax,r12d
        mov     DWORD[20+rsp],r14d
        mov     ecx,esi
        bswap   edx
        xor     eax,r11d
        rol     ecx,5
        and     eax,edi
        lea     r13d,[1518500249+r13*1+r14]
        add     r13d,ecx
        xor     eax,r12d
        rol     edi,30
        add     r13d,eax
        mov     ebp,DWORD[28+r9]
        mov     eax,r11d
        mov     DWORD[24+rsp],edx
        mov     ecx,r13d
        bswap   ebp
        xor     eax,edi
        rol     ecx,5
        and     eax,esi
        lea     r12d,[1518500249+r12*1+rdx]
        add     r12d,ecx
        xor     eax,r11d
        rol     esi,30
        add     r12d,eax
        mov     r14d,DWORD[32+r9]
        mov     eax,edi
        mov     DWORD[28+rsp],ebp
        mov     ecx,r12d
        bswap   r14d
        xor     eax,esi
        rol     ecx,5
        and     eax,r13d
        lea     r11d,[1518500249+r11*1+rbp]
        add     r11d,ecx
        xor     eax,edi
        rol     r13d,30
        add     r11d,eax
        mov     edx,DWORD[36+r9]
        mov     eax,esi
        mov     DWORD[32+rsp],r14d
        mov     ecx,r11d
        bswap   edx
        xor     eax,r13d
        rol     ecx,5
        and     eax,r12d
        lea     edi,[1518500249+rdi*1+r14]
        add     edi,ecx
        xor     eax,esi
        rol     r12d,30
        add     edi,eax
        mov     ebp,DWORD[40+r9]
        mov     eax,r13d
        mov     DWORD[36+rsp],edx
        mov     ecx,edi
        bswap   ebp
        xor     eax,r12d
        rol     ecx,5
        and     eax,r11d
        lea     esi,[1518500249+rsi*1+rdx]
        add     esi,ecx
        xor     eax,r13d
        rol     r11d,30
        add     esi,eax
        mov     r14d,DWORD[44+r9]
        mov     eax,r12d
        mov     DWORD[40+rsp],ebp
        mov     ecx,esi
        bswap   r14d
        xor     eax,r11d
        rol     ecx,5
        and     eax,edi
        lea     r13d,[1518500249+r13*1+rbp]
        add     r13d,ecx
        xor     eax,r12d
        rol     edi,30
        add     r13d,eax
        mov     edx,DWORD[48+r9]
        mov     eax,r11d
        mov     DWORD[44+rsp],r14d
        mov     ecx,r13d
        bswap   edx
        xor     eax,edi
        rol     ecx,5
        and     eax,esi
        lea     r12d,[1518500249+r12*1+r14]
        add     r12d,ecx
        xor     eax,r11d
        rol     esi,30
        add     r12d,eax
        mov     ebp,DWORD[52+r9]
        mov     eax,edi
        mov     DWORD[48+rsp],edx
        mov     ecx,r12d
        bswap   ebp
        xor     eax,esi
        rol     ecx,5
        and     eax,r13d
        lea     r11d,[1518500249+r11*1+rdx]
        add     r11d,ecx
        xor     eax,edi
        rol     r13d,30
        add     r11d,eax
        mov     r14d,DWORD[56+r9]
        mov     eax,esi
        mov     DWORD[52+rsp],ebp
        mov     ecx,r11d
        bswap   r14d
        xor     eax,r13d
        rol     ecx,5
        and     eax,r12d
        lea     edi,[1518500249+rdi*1+rbp]
        add     edi,ecx
        xor     eax,esi
        rol     r12d,30
        add     edi,eax
        mov     edx,DWORD[60+r9]
        mov     eax,r13d
        mov     DWORD[56+rsp],r14d
        mov     ecx,edi
        bswap   edx
        xor     eax,r12d
        rol     ecx,5
        and     eax,r11d
        lea     esi,[1518500249+rsi*1+r14]
        add     esi,ecx
        xor     eax,r13d
        rol     r11d,30
        add     esi,eax
        xor     ebp,DWORD[rsp]
        mov     eax,r12d
        mov     DWORD[60+rsp],edx
        mov     ecx,esi
        xor     ebp,DWORD[8+rsp]
        xor     eax,r11d
        rol     ecx,5
        xor     ebp,DWORD[32+rsp]
        and     eax,edi
        lea     r13d,[1518500249+r13*1+rdx]
        rol     edi,30
        xor     eax,r12d
        add     r13d,ecx
        rol     ebp,1
        add     r13d,eax
        xor     r14d,DWORD[4+rsp]
        mov     eax,r11d
        mov     DWORD[rsp],ebp
        mov     ecx,r13d
        xor     r14d,DWORD[12+rsp]
        xor     eax,edi
        rol     ecx,5
        xor     r14d,DWORD[36+rsp]
        and     eax,esi
        lea     r12d,[1518500249+r12*1+rbp]
        rol     esi,30
        xor     eax,r11d
        add     r12d,ecx
        rol     r14d,1
        add     r12d,eax
        xor     edx,DWORD[8+rsp]
        mov     eax,edi
        mov     DWORD[4+rsp],r14d
        mov     ecx,r12d
        xor     edx,DWORD[16+rsp]
        xor     eax,esi
        rol     ecx,5
        xor     edx,DWORD[40+rsp]
        and     eax,r13d
        lea     r11d,[1518500249+r11*1+r14]
        rol     r13d,30
        xor     eax,edi
        add     r11d,ecx
        rol     edx,1
        add     r11d,eax
        xor     ebp,DWORD[12+rsp]
        mov     eax,esi
        mov     DWORD[8+rsp],edx
        mov     ecx,r11d
        xor     ebp,DWORD[20+rsp]
        xor     eax,r13d
        rol     ecx,5
        xor     ebp,DWORD[44+rsp]
        and     eax,r12d
        lea     edi,[1518500249+rdi*1+rdx]
        rol     r12d,30
        xor     eax,esi
        add     edi,ecx
        rol     ebp,1
        add     edi,eax
        xor     r14d,DWORD[16+rsp]
        mov     eax,r13d
        mov     DWORD[12+rsp],ebp
        mov     ecx,edi
        xor     r14d,DWORD[24+rsp]
        xor     eax,r12d
        rol     ecx,5
        xor     r14d,DWORD[48+rsp]
        and     eax,r11d
        lea     esi,[1518500249+rsi*1+rbp]
        rol     r11d,30
        xor     eax,r13d
        add     esi,ecx
        rol     r14d,1
        add     esi,eax
        xor     edx,DWORD[20+rsp]
        mov     eax,edi
        mov     DWORD[16+rsp],r14d
        mov     ecx,esi
        xor     edx,DWORD[28+rsp]
        xor     eax,r12d
        rol     ecx,5
        xor     edx,DWORD[52+rsp]
        lea     r13d,[1859775393+r13*1+r14]
        xor     eax,r11d
        add     r13d,ecx
        rol     edi,30
        add     r13d,eax
        rol     edx,1
        xor     ebp,DWORD[24+rsp]
        mov     eax,esi
        mov     DWORD[20+rsp],edx
        mov     ecx,r13d
        xor     ebp,DWORD[32+rsp]
        xor     eax,r11d
        rol     ecx,5
        xor     ebp,DWORD[56+rsp]
        lea     r12d,[1859775393+r12*1+rdx]
        xor     eax,edi
        add     r12d,ecx
        rol     esi,30
        add     r12d,eax
        rol     ebp,1
        xor     r14d,DWORD[28+rsp]
        mov     eax,r13d
        mov     DWORD[24+rsp],ebp
        mov     ecx,r12d
        xor     r14d,DWORD[36+rsp]
        xor     eax,edi
        rol     ecx,5
        xor     r14d,DWORD[60+rsp]
        lea     r11d,[1859775393+r11*1+rbp]
        xor     eax,esi
        add     r11d,ecx
        rol     r13d,30
        add     r11d,eax
        rol     r14d,1
        xor     edx,DWORD[32+rsp]
        mov     eax,r12d
        mov     DWORD[28+rsp],r14d
        mov     ecx,r11d
        xor     edx,DWORD[40+rsp]
        xor     eax,esi
        rol     ecx,5
        xor     edx,DWORD[rsp]
        lea     edi,[1859775393+rdi*1+r14]
        xor     eax,r13d
        add     edi,ecx
        rol     r12d,30
        add     edi,eax
        rol     edx,1
        xor     ebp,DWORD[36+rsp]
        mov     eax,r11d
        mov     DWORD[32+rsp],edx
        mov     ecx,edi
        xor     ebp,DWORD[44+rsp]
        xor     eax,r13d
        rol     ecx,5
        xor     ebp,DWORD[4+rsp]
        lea     esi,[1859775393+rsi*1+rdx]
        xor     eax,r12d
        add     esi,ecx
        rol     r11d,30
        add     esi,eax
        rol     ebp,1
        xor     r14d,DWORD[40+rsp]
        mov     eax,edi
        mov     DWORD[36+rsp],ebp
        mov     ecx,esi
        xor     r14d,DWORD[48+rsp]
        xor     eax,r12d
        rol     ecx,5
        xor     r14d,DWORD[8+rsp]
        lea     r13d,[1859775393+r13*1+rbp]
        xor     eax,r11d
        add     r13d,ecx
        rol     edi,30
        add     r13d,eax
        rol     r14d,1
        xor     edx,DWORD[44+rsp]
        mov     eax,esi
        mov     DWORD[40+rsp],r14d
        mov     ecx,r13d
        xor     edx,DWORD[52+rsp]
        xor     eax,r11d
        rol     ecx,5
        xor     edx,DWORD[12+rsp]
        lea     r12d,[1859775393+r12*1+r14]
        xor     eax,edi
        add     r12d,ecx
        rol     esi,30
        add     r12d,eax
        rol     edx,1
        xor     ebp,DWORD[48+rsp]
        mov     eax,r13d
        mov     DWORD[44+rsp],edx
        mov     ecx,r12d
        xor     ebp,DWORD[56+rsp]
        xor     eax,edi
        rol     ecx,5
        xor     ebp,DWORD[16+rsp]
        lea     r11d,[1859775393+r11*1+rdx]
        xor     eax,esi
        add     r11d,ecx
        rol     r13d,30
        add     r11d,eax
        rol     ebp,1
        xor     r14d,DWORD[52+rsp]
        mov     eax,r12d
        mov     DWORD[48+rsp],ebp
        mov     ecx,r11d
        xor     r14d,DWORD[60+rsp]
        xor     eax,esi
        rol     ecx,5
        xor     r14d,DWORD[20+rsp]
        lea     edi,[1859775393+rdi*1+rbp]
        xor     eax,r13d
        add     edi,ecx
        rol     r12d,30
        add     edi,eax
        rol     r14d,1
        xor     edx,DWORD[56+rsp]
        mov     eax,r11d
        mov     DWORD[52+rsp],r14d
        mov     ecx,edi
        xor     edx,DWORD[rsp]
        xor     eax,r13d
        rol     ecx,5
        xor     edx,DWORD[24+rsp]
        lea     esi,[1859775393+rsi*1+r14]
        xor     eax,r12d
        add     esi,ecx
        rol     r11d,30
        add     esi,eax
        rol     edx,1
        xor     ebp,DWORD[60+rsp]
        mov     eax,edi
        mov     DWORD[56+rsp],edx
        mov     ecx,esi
        xor     ebp,DWORD[4+rsp]
        xor     eax,r12d
        rol     ecx,5
        xor     ebp,DWORD[28+rsp]
        lea     r13d,[1859775393+r13*1+rdx]
        xor     eax,r11d
        add     r13d,ecx
        rol     edi,30
        add     r13d,eax
        rol     ebp,1
        xor     r14d,DWORD[rsp]
        mov     eax,esi
        mov     DWORD[60+rsp],ebp
        mov     ecx,r13d
        xor     r14d,DWORD[8+rsp]
        xor     eax,r11d
        rol     ecx,5
        xor     r14d,DWORD[32+rsp]
        lea     r12d,[1859775393+r12*1+rbp]
        xor     eax,edi
        add     r12d,ecx
        rol     esi,30
        add     r12d,eax
        rol     r14d,1
        xor     edx,DWORD[4+rsp]
        mov     eax,r13d
        mov     DWORD[rsp],r14d
        mov     ecx,r12d
        xor     edx,DWORD[12+rsp]
        xor     eax,edi
        rol     ecx,5
        xor     edx,DWORD[36+rsp]
        lea     r11d,[1859775393+r11*1+r14]
        xor     eax,esi
        add     r11d,ecx
        rol     r13d,30
        add     r11d,eax
        rol     edx,1
        xor     ebp,DWORD[8+rsp]
        mov     eax,r12d
        mov     DWORD[4+rsp],edx
        mov     ecx,r11d
        xor     ebp,DWORD[16+rsp]
        xor     eax,esi
        rol     ecx,5
        xor     ebp,DWORD[40+rsp]
        lea     edi,[1859775393+rdi*1+rdx]
        xor     eax,r13d
        add     edi,ecx
        rol     r12d,30
        add     edi,eax
        rol     ebp,1
        xor     r14d,DWORD[12+rsp]
        mov     eax,r11d
        mov     DWORD[8+rsp],ebp
        mov     ecx,edi
        xor     r14d,DWORD[20+rsp]
        xor     eax,r13d
        rol     ecx,5
        xor     r14d,DWORD[44+rsp]
        lea     esi,[1859775393+rsi*1+rbp]
        xor     eax,r12d
        add     esi,ecx
        rol     r11d,30
        add     esi,eax
        rol     r14d,1
        xor     edx,DWORD[16+rsp]
        mov     eax,edi
        mov     DWORD[12+rsp],r14d
        mov     ecx,esi
        xor     edx,DWORD[24+rsp]
        xor     eax,r12d
        rol     ecx,5
        xor     edx,DWORD[48+rsp]
        lea     r13d,[1859775393+r13*1+r14]
        xor     eax,r11d
        add     r13d,ecx
        rol     edi,30
        add     r13d,eax
        rol     edx,1
        xor     ebp,DWORD[20+rsp]
        mov     eax,esi
        mov     DWORD[16+rsp],edx
        mov     ecx,r13d
        xor     ebp,DWORD[28+rsp]
        xor     eax,r11d
        rol     ecx,5
        xor     ebp,DWORD[52+rsp]
        lea     r12d,[1859775393+r12*1+rdx]
        xor     eax,edi
        add     r12d,ecx
        rol     esi,30
        add     r12d,eax
        rol     ebp,1
        xor     r14d,DWORD[24+rsp]
        mov     eax,r13d
        mov     DWORD[20+rsp],ebp
        mov     ecx,r12d
        xor     r14d,DWORD[32+rsp]
        xor     eax,edi
        rol     ecx,5
        xor     r14d,DWORD[56+rsp]
        lea     r11d,[1859775393+r11*1+rbp]
        xor     eax,esi
        add     r11d,ecx
        rol     r13d,30
        add     r11d,eax
        rol     r14d,1
        xor     edx,DWORD[28+rsp]
        mov     eax,r12d
        mov     DWORD[24+rsp],r14d
        mov     ecx,r11d
        xor     edx,DWORD[36+rsp]
        xor     eax,esi
        rol     ecx,5
        xor     edx,DWORD[60+rsp]
        lea     edi,[1859775393+rdi*1+r14]
        xor     eax,r13d
        add     edi,ecx
        rol     r12d,30
        add     edi,eax
        rol     edx,1
        xor     ebp,DWORD[32+rsp]
        mov     eax,r11d
        mov     DWORD[28+rsp],edx
        mov     ecx,edi
        xor     ebp,DWORD[40+rsp]
        xor     eax,r13d
        rol     ecx,5
        xor     ebp,DWORD[rsp]
        lea     esi,[1859775393+rsi*1+rdx]
        xor     eax,r12d
        add     esi,ecx
        rol     r11d,30
        add     esi,eax
        rol     ebp,1
        xor     r14d,DWORD[36+rsp]
        mov     eax,r12d
        mov     DWORD[32+rsp],ebp
        mov     ebx,r12d
        xor     r14d,DWORD[44+rsp]
        and     eax,r11d
        mov     ecx,esi
        xor     r14d,DWORD[4+rsp]
        lea     r13d,[((-1894007588))+r13*1+rbp]
        xor     ebx,r11d
        rol     ecx,5
        add     r13d,eax
        rol     r14d,1
        and     ebx,edi
        add     r13d,ecx
        rol     edi,30
        add     r13d,ebx
        xor     edx,DWORD[40+rsp]
        mov     eax,r11d
        mov     DWORD[36+rsp],r14d
        mov     ebx,r11d
        xor     edx,DWORD[48+rsp]
        and     eax,edi
        mov     ecx,r13d
        xor     edx,DWORD[8+rsp]
        lea     r12d,[((-1894007588))+r12*1+r14]
        xor     ebx,edi
        rol     ecx,5
        add     r12d,eax
        rol     edx,1
        and     ebx,esi
        add     r12d,ecx
        rol     esi,30
        add     r12d,ebx
        xor     ebp,DWORD[44+rsp]
        mov     eax,edi
        mov     DWORD[40+rsp],edx
        mov     ebx,edi
        xor     ebp,DWORD[52+rsp]
        and     eax,esi
        mov     ecx,r12d
        xor     ebp,DWORD[12+rsp]
        lea     r11d,[((-1894007588))+r11*1+rdx]
        xor     ebx,esi
        rol     ecx,5
        add     r11d,eax
        rol     ebp,1
        and     ebx,r13d
        add     r11d,ecx
        rol     r13d,30
        add     r11d,ebx
        xor     r14d,DWORD[48+rsp]
        mov     eax,esi
        mov     DWORD[44+rsp],ebp
        mov     ebx,esi
        xor     r14d,DWORD[56+rsp]
        and     eax,r13d
        mov     ecx,r11d
        xor     r14d,DWORD[16+rsp]
        lea     edi,[((-1894007588))+rdi*1+rbp]
        xor     ebx,r13d
        rol     ecx,5
        add     edi,eax
        rol     r14d,1
        and     ebx,r12d
        add     edi,ecx
        rol     r12d,30
        add     edi,ebx
        xor     edx,DWORD[52+rsp]
        mov     eax,r13d
        mov     DWORD[48+rsp],r14d
        mov     ebx,r13d
        xor     edx,DWORD[60+rsp]
        and     eax,r12d
        mov     ecx,edi
        xor     edx,DWORD[20+rsp]
        lea     esi,[((-1894007588))+rsi*1+r14]
        xor     ebx,r12d
        rol     ecx,5
        add     esi,eax
        rol     edx,1
        and     ebx,r11d
        add     esi,ecx
        rol     r11d,30
        add     esi,ebx
        xor     ebp,DWORD[56+rsp]
        mov     eax,r12d
        mov     DWORD[52+rsp],edx
        mov     ebx,r12d
        xor     ebp,DWORD[rsp]
        and     eax,r11d
        mov     ecx,esi
        xor     ebp,DWORD[24+rsp]
        lea     r13d,[((-1894007588))+r13*1+rdx]
        xor     ebx,r11d
        rol     ecx,5
        add     r13d,eax
        rol     ebp,1
        and     ebx,edi
        add     r13d,ecx
        rol     edi,30
        add     r13d,ebx
        xor     r14d,DWORD[60+rsp]
        mov     eax,r11d
        mov     DWORD[56+rsp],ebp
        mov     ebx,r11d
        xor     r14d,DWORD[4+rsp]
        and     eax,edi
        mov     ecx,r13d
        xor     r14d,DWORD[28+rsp]
        lea     r12d,[((-1894007588))+r12*1+rbp]
        xor     ebx,edi
        rol     ecx,5
        add     r12d,eax
        rol     r14d,1
        and     ebx,esi
        add     r12d,ecx
        rol     esi,30
        add     r12d,ebx
        xor     edx,DWORD[rsp]
        mov     eax,edi
        mov     DWORD[60+rsp],r14d
        mov     ebx,edi
        xor     edx,DWORD[8+rsp]
        and     eax,esi
        mov     ecx,r12d
        xor     edx,DWORD[32+rsp]
        lea     r11d,[((-1894007588))+r11*1+r14]
        xor     ebx,esi
        rol     ecx,5
        add     r11d,eax
        rol     edx,1
        and     ebx,r13d
        add     r11d,ecx
        rol     r13d,30
        add     r11d,ebx
        xor     ebp,DWORD[4+rsp]
        mov     eax,esi
        mov     DWORD[rsp],edx
        mov     ebx,esi
        xor     ebp,DWORD[12+rsp]
        and     eax,r13d
        mov     ecx,r11d
        xor     ebp,DWORD[36+rsp]
        lea     edi,[((-1894007588))+rdi*1+rdx]
        xor     ebx,r13d
        rol     ecx,5
        add     edi,eax
        rol     ebp,1
        and     ebx,r12d
        add     edi,ecx
        rol     r12d,30
        add     edi,ebx
        xor     r14d,DWORD[8+rsp]
        mov     eax,r13d
        mov     DWORD[4+rsp],ebp
        mov     ebx,r13d
        xor     r14d,DWORD[16+rsp]
        and     eax,r12d
        mov     ecx,edi
        xor     r14d,DWORD[40+rsp]
        lea     esi,[((-1894007588))+rsi*1+rbp]
        xor     ebx,r12d
        rol     ecx,5
        add     esi,eax
        rol     r14d,1
        and     ebx,r11d
        add     esi,ecx
        rol     r11d,30
        add     esi,ebx
        xor     edx,DWORD[12+rsp]
        mov     eax,r12d
        mov     DWORD[8+rsp],r14d
        mov     ebx,r12d
        xor     edx,DWORD[20+rsp]
        and     eax,r11d
        mov     ecx,esi
        xor     edx,DWORD[44+rsp]
        lea     r13d,[((-1894007588))+r13*1+r14]
        xor     ebx,r11d
        rol     ecx,5
        add     r13d,eax
        rol     edx,1
        and     ebx,edi
        add     r13d,ecx
        rol     edi,30
        add     r13d,ebx
        xor     ebp,DWORD[16+rsp]
        mov     eax,r11d
        mov     DWORD[12+rsp],edx
        mov     ebx,r11d
        xor     ebp,DWORD[24+rsp]
        and     eax,edi
        mov     ecx,r13d
        xor     ebp,DWORD[48+rsp]
        lea     r12d,[((-1894007588))+r12*1+rdx]
        xor     ebx,edi
        rol     ecx,5
        add     r12d,eax
        rol     ebp,1
        and     ebx,esi
        add     r12d,ecx
        rol     esi,30
        add     r12d,ebx
        xor     r14d,DWORD[20+rsp]
        mov     eax,edi
        mov     DWORD[16+rsp],ebp
        mov     ebx,edi
        xor     r14d,DWORD[28+rsp]
        and     eax,esi
        mov     ecx,r12d
        xor     r14d,DWORD[52+rsp]
        lea     r11d,[((-1894007588))+r11*1+rbp]
        xor     ebx,esi
        rol     ecx,5
        add     r11d,eax
        rol     r14d,1
        and     ebx,r13d
        add     r11d,ecx
        rol     r13d,30
        add     r11d,ebx
        xor     edx,DWORD[24+rsp]
        mov     eax,esi
        mov     DWORD[20+rsp],r14d
        mov     ebx,esi
        xor     edx,DWORD[32+rsp]
        and     eax,r13d
        mov     ecx,r11d
        xor     edx,DWORD[56+rsp]
        lea     edi,[((-1894007588))+rdi*1+r14]
        xor     ebx,r13d
        rol     ecx,5
        add     edi,eax
        rol     edx,1
        and     ebx,r12d
        add     edi,ecx
        rol     r12d,30
        add     edi,ebx
        xor     ebp,DWORD[28+rsp]
        mov     eax,r13d
        mov     DWORD[24+rsp],edx
        mov     ebx,r13d
        xor     ebp,DWORD[36+rsp]
        and     eax,r12d
        mov     ecx,edi
        xor     ebp,DWORD[60+rsp]
        lea     esi,[((-1894007588))+rsi*1+rdx]
        xor     ebx,r12d
        rol     ecx,5
        add     esi,eax
        rol     ebp,1
        and     ebx,r11d
        add     esi,ecx
        rol     r11d,30
        add     esi,ebx
        xor     r14d,DWORD[32+rsp]
        mov     eax,r12d
        mov     DWORD[28+rsp],ebp
        mov     ebx,r12d
        xor     r14d,DWORD[40+rsp]
        and     eax,r11d
        mov     ecx,esi
        xor     r14d,DWORD[rsp]
        lea     r13d,[((-1894007588))+r13*1+rbp]
        xor     ebx,r11d
        rol     ecx,5
        add     r13d,eax
        rol     r14d,1
        and     ebx,edi
        add     r13d,ecx
        rol     edi,30
        add     r13d,ebx
        xor     edx,DWORD[36+rsp]
        mov     eax,r11d
        mov     DWORD[32+rsp],r14d
        mov     ebx,r11d
        xor     edx,DWORD[44+rsp]
        and     eax,edi
        mov     ecx,r13d
        xor     edx,DWORD[4+rsp]
        lea     r12d,[((-1894007588))+r12*1+r14]
        xor     ebx,edi
        rol     ecx,5
        add     r12d,eax
        rol     edx,1
        and     ebx,esi
        add     r12d,ecx
        rol     esi,30
        add     r12d,ebx
        xor     ebp,DWORD[40+rsp]
        mov     eax,edi
        mov     DWORD[36+rsp],edx
        mov     ebx,edi
        xor     ebp,DWORD[48+rsp]
        and     eax,esi
        mov     ecx,r12d
        xor     ebp,DWORD[8+rsp]
        lea     r11d,[((-1894007588))+r11*1+rdx]
        xor     ebx,esi
        rol     ecx,5
        add     r11d,eax
        rol     ebp,1
        and     ebx,r13d
        add     r11d,ecx
        rol     r13d,30
        add     r11d,ebx
        xor     r14d,DWORD[44+rsp]
        mov     eax,esi
        mov     DWORD[40+rsp],ebp
        mov     ebx,esi
        xor     r14d,DWORD[52+rsp]
        and     eax,r13d
        mov     ecx,r11d
        xor     r14d,DWORD[12+rsp]
        lea     edi,[((-1894007588))+rdi*1+rbp]
        xor     ebx,r13d
        rol     ecx,5
        add     edi,eax
        rol     r14d,1
        and     ebx,r12d
        add     edi,ecx
        rol     r12d,30
        add     edi,ebx
        xor     edx,DWORD[48+rsp]
        mov     eax,r13d
        mov     DWORD[44+rsp],r14d
        mov     ebx,r13d
        xor     edx,DWORD[56+rsp]
        and     eax,r12d
        mov     ecx,edi
        xor     edx,DWORD[16+rsp]
        lea     esi,[((-1894007588))+rsi*1+r14]
        xor     ebx,r12d
        rol     ecx,5
        add     esi,eax
        rol     edx,1
        and     ebx,r11d
        add     esi,ecx
        rol     r11d,30
        add     esi,ebx
        xor     ebp,DWORD[52+rsp]
        mov     eax,edi
        mov     DWORD[48+rsp],edx
        mov     ecx,esi
        xor     ebp,DWORD[60+rsp]
        xor     eax,r12d
        rol     ecx,5
        xor     ebp,DWORD[20+rsp]
        lea     r13d,[((-899497514))+r13*1+rdx]
        xor     eax,r11d
        add     r13d,ecx
        rol     edi,30
        add     r13d,eax
        rol     ebp,1
        xor     r14d,DWORD[56+rsp]
        mov     eax,esi
        mov     DWORD[52+rsp],ebp
        mov     ecx,r13d
        xor     r14d,DWORD[rsp]
        xor     eax,r11d
        rol     ecx,5
        xor     r14d,DWORD[24+rsp]
        lea     r12d,[((-899497514))+r12*1+rbp]
        xor     eax,edi
        add     r12d,ecx
        rol     esi,30
        add     r12d,eax
        rol     r14d,1
        xor     edx,DWORD[60+rsp]
        mov     eax,r13d
        mov     DWORD[56+rsp],r14d
        mov     ecx,r12d
        xor     edx,DWORD[4+rsp]
        xor     eax,edi
        rol     ecx,5
        xor     edx,DWORD[28+rsp]
        lea     r11d,[((-899497514))+r11*1+r14]
        xor     eax,esi
        add     r11d,ecx
        rol     r13d,30
        add     r11d,eax
        rol     edx,1
        xor     ebp,DWORD[rsp]
        mov     eax,r12d
        mov     DWORD[60+rsp],edx
        mov     ecx,r11d
        xor     ebp,DWORD[8+rsp]
        xor     eax,esi
        rol     ecx,5
        xor     ebp,DWORD[32+rsp]
        lea     edi,[((-899497514))+rdi*1+rdx]
        xor     eax,r13d
        add     edi,ecx
        rol     r12d,30
        add     edi,eax
        rol     ebp,1
        xor     r14d,DWORD[4+rsp]
        mov     eax,r11d
        mov     DWORD[rsp],ebp
        mov     ecx,edi
        xor     r14d,DWORD[12+rsp]
        xor     eax,r13d
        rol     ecx,5
        xor     r14d,DWORD[36+rsp]
        lea     esi,[((-899497514))+rsi*1+rbp]
        xor     eax,r12d
        add     esi,ecx
        rol     r11d,30
        add     esi,eax
        rol     r14d,1
        xor     edx,DWORD[8+rsp]
        mov     eax,edi
        mov     DWORD[4+rsp],r14d
        mov     ecx,esi
        xor     edx,DWORD[16+rsp]
        xor     eax,r12d
        rol     ecx,5
        xor     edx,DWORD[40+rsp]
        lea     r13d,[((-899497514))+r13*1+r14]
        xor     eax,r11d
        add     r13d,ecx
        rol     edi,30
        add     r13d,eax
        rol     edx,1
        xor     ebp,DWORD[12+rsp]
        mov     eax,esi
        mov     DWORD[8+rsp],edx
        mov     ecx,r13d
        xor     ebp,DWORD[20+rsp]
        xor     eax,r11d
        rol     ecx,5
        xor     ebp,DWORD[44+rsp]
        lea     r12d,[((-899497514))+r12*1+rdx]
        xor     eax,edi
        add     r12d,ecx
        rol     esi,30
        add     r12d,eax
        rol     ebp,1
        xor     r14d,DWORD[16+rsp]
        mov     eax,r13d
        mov     DWORD[12+rsp],ebp
        mov     ecx,r12d
        xor     r14d,DWORD[24+rsp]
        xor     eax,edi
        rol     ecx,5
        xor     r14d,DWORD[48+rsp]
        lea     r11d,[((-899497514))+r11*1+rbp]
        xor     eax,esi
        add     r11d,ecx
        rol     r13d,30
        add     r11d,eax
        rol     r14d,1
        xor     edx,DWORD[20+rsp]
        mov     eax,r12d
        mov     DWORD[16+rsp],r14d
        mov     ecx,r11d
        xor     edx,DWORD[28+rsp]
        xor     eax,esi
        rol     ecx,5
        xor     edx,DWORD[52+rsp]
        lea     edi,[((-899497514))+rdi*1+r14]
        xor     eax,r13d
        add     edi,ecx
        rol     r12d,30
        add     edi,eax
        rol     edx,1
        xor     ebp,DWORD[24+rsp]
        mov     eax,r11d
        mov     DWORD[20+rsp],edx
        mov     ecx,edi
        xor     ebp,DWORD[32+rsp]
        xor     eax,r13d
        rol     ecx,5
        xor     ebp,DWORD[56+rsp]
        lea     esi,[((-899497514))+rsi*1+rdx]
        xor     eax,r12d
        add     esi,ecx
        rol     r11d,30
        add     esi,eax
        rol     ebp,1
        xor     r14d,DWORD[28+rsp]
        mov     eax,edi
        mov     DWORD[24+rsp],ebp
        mov     ecx,esi
        xor     r14d,DWORD[36+rsp]
        xor     eax,r12d
        rol     ecx,5
        xor     r14d,DWORD[60+rsp]
        lea     r13d,[((-899497514))+r13*1+rbp]
        xor     eax,r11d
        add     r13d,ecx
        rol     edi,30
        add     r13d,eax
        rol     r14d,1
        xor     edx,DWORD[32+rsp]
        mov     eax,esi
        mov     DWORD[28+rsp],r14d
        mov     ecx,r13d
        xor     edx,DWORD[40+rsp]
        xor     eax,r11d
        rol     ecx,5
        xor     edx,DWORD[rsp]
        lea     r12d,[((-899497514))+r12*1+r14]
        xor     eax,edi
        add     r12d,ecx
        rol     esi,30
        add     r12d,eax
        rol     edx,1
        xor     ebp,DWORD[36+rsp]
        mov     eax,r13d

        mov     ecx,r12d
        xor     ebp,DWORD[44+rsp]
        xor     eax,edi
        rol     ecx,5
        xor     ebp,DWORD[4+rsp]
        lea     r11d,[((-899497514))+r11*1+rdx]
        xor     eax,esi
        add     r11d,ecx
        rol     r13d,30
        add     r11d,eax
        rol     ebp,1
        xor     r14d,DWORD[40+rsp]
        mov     eax,r12d

        mov     ecx,r11d
        xor     r14d,DWORD[48+rsp]
        xor     eax,esi
        rol     ecx,5
        xor     r14d,DWORD[8+rsp]
        lea     edi,[((-899497514))+rdi*1+rbp]
        xor     eax,r13d
        add     edi,ecx
        rol     r12d,30
        add     edi,eax
        rol     r14d,1
        xor     edx,DWORD[44+rsp]
        mov     eax,r11d

        mov     ecx,edi
        xor     edx,DWORD[52+rsp]
        xor     eax,r13d
        rol     ecx,5
        xor     edx,DWORD[12+rsp]
        lea     esi,[((-899497514))+rsi*1+r14]
        xor     eax,r12d
        add     esi,ecx
        rol     r11d,30
        add     esi,eax
        rol     edx,1
        xor     ebp,DWORD[48+rsp]
        mov     eax,edi

        mov     ecx,esi
        xor     ebp,DWORD[56+rsp]
        xor     eax,r12d
        rol     ecx,5
        xor     ebp,DWORD[16+rsp]
        lea     r13d,[((-899497514))+r13*1+rdx]
        xor     eax,r11d
        add     r13d,ecx
        rol     edi,30
        add     r13d,eax
        rol     ebp,1
        xor     r14d,DWORD[52+rsp]
        mov     eax,esi

        mov     ecx,r13d
        xor     r14d,DWORD[60+rsp]
        xor     eax,r11d
        rol     ecx,5
        xor     r14d,DWORD[20+rsp]
        lea     r12d,[((-899497514))+r12*1+rbp]
        xor     eax,edi
        add     r12d,ecx
        rol     esi,30
        add     r12d,eax
        rol     r14d,1
        xor     edx,DWORD[56+rsp]
        mov     eax,r13d

        mov     ecx,r12d
        xor     edx,DWORD[rsp]
        xor     eax,edi
        rol     ecx,5
        xor     edx,DWORD[24+rsp]
        lea     r11d,[((-899497514))+r11*1+r14]
        xor     eax,esi
        add     r11d,ecx
        rol     r13d,30
        add     r11d,eax
        rol     edx,1
        xor     ebp,DWORD[60+rsp]
        mov     eax,r12d

        mov     ecx,r11d
        xor     ebp,DWORD[4+rsp]
        xor     eax,esi
        rol     ecx,5
        xor     ebp,DWORD[28+rsp]
        lea     edi,[((-899497514))+rdi*1+rdx]
        xor     eax,r13d
        add     edi,ecx
        rol     r12d,30
        add     edi,eax
        rol     ebp,1
        mov     eax,r11d
        mov     ecx,edi
        xor     eax,r13d
        lea     esi,[((-899497514))+rsi*1+rbp]
        rol     ecx,5
        xor     eax,r12d
        add     esi,ecx
        rol     r11d,30
        add     esi,eax
        add     esi,DWORD[r8]
        add     edi,DWORD[4+r8]
        add     r11d,DWORD[8+r8]
        add     r12d,DWORD[12+r8]
        add     r13d,DWORD[16+r8]
        mov     DWORD[r8],esi
        mov     DWORD[4+r8],edi
        mov     DWORD[8+r8],r11d
        mov     DWORD[12+r8],r12d
        mov     DWORD[16+r8],r13d

        sub     r10,1
        lea     r9,[64+r9]
        jnz     NEAR $L$loop

        mov     rsi,QWORD[64+rsp]

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

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

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

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

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

        lea     rsp,[rsi]

$L$epilogue:
        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
        mov     rsi,QWORD[16+rsp]
        DB      0F3h,0C3h               ;repret

$L$SEH_end_sha1_block_data_order:

ALIGN   32
sha1_block_data_order_shaext:
        mov     QWORD[8+rsp],rdi        ;WIN64 prologue
        mov     QWORD[16+rsp],rsi
        mov     rax,rsp
$L$SEH_begin_sha1_block_data_order_shaext:
        mov     rdi,rcx
        mov     rsi,rdx
        mov     rdx,r8


_shaext_shortcut:

        lea     rsp,[((-72))+rsp]
        movaps  XMMWORD[(-8-64)+rax],xmm6
        movaps  XMMWORD[(-8-48)+rax],xmm7
        movaps  XMMWORD[(-8-32)+rax],xmm8
        movaps  XMMWORD[(-8-16)+rax],xmm9
$L$prologue_shaext:
        movdqu  xmm0,XMMWORD[rdi]
        movd    xmm1,DWORD[16+rdi]
        movdqa  xmm3,XMMWORD[((K_XX_XX+160))]

        movdqu  xmm4,XMMWORD[rsi]
        pshufd  xmm0,xmm0,27
        movdqu  xmm5,XMMWORD[16+rsi]
        pshufd  xmm1,xmm1,27
        movdqu  xmm6,XMMWORD[32+rsi]
DB      102,15,56,0,227
        movdqu  xmm7,XMMWORD[48+rsi]
DB      102,15,56,0,235
DB      102,15,56,0,243
        movdqa  xmm9,xmm1
DB      102,15,56,0,251
        jmp     NEAR $L$oop_shaext

ALIGN   16
$L$oop_shaext:
        dec     rdx
        lea     r8,[64+rsi]
        paddd   xmm1,xmm4
        cmovne  rsi,r8
        movdqa  xmm8,xmm0
DB      15,56,201,229
        movdqa  xmm2,xmm0
DB      15,58,204,193,0
DB      15,56,200,213
        pxor    xmm4,xmm6
DB      15,56,201,238
DB      15,56,202,231

        movdqa  xmm1,xmm0
DB      15,58,204,194,0
DB      15,56,200,206
        pxor    xmm5,xmm7
DB      15,56,202,236
DB      15,56,201,247
        movdqa  xmm2,xmm0
DB      15,58,204,193,0
DB      15,56,200,215
        pxor    xmm6,xmm4
DB      15,56,201,252
DB      15,56,202,245

        movdqa  xmm1,xmm0
DB      15,58,204,194,0
DB      15,56,200,204
        pxor    xmm7,xmm5
DB      15,56,202,254
DB      15,56,201,229
        movdqa  xmm2,xmm0
DB      15,58,204,193,0
DB      15,56,200,213
        pxor    xmm4,xmm6
DB      15,56,201,238
DB      15,56,202,231

        movdqa  xmm1,xmm0
DB      15,58,204,194,1
DB      15,56,200,206
        pxor    xmm5,xmm7
DB      15,56,202,236
DB      15,56,201,247
        movdqa  xmm2,xmm0
DB      15,58,204,193,1
DB      15,56,200,215
        pxor    xmm6,xmm4
DB      15,56,201,252
DB      15,56,202,245

        movdqa  xmm1,xmm0
DB      15,58,204,194,1
DB      15,56,200,204
        pxor    xmm7,xmm5
DB      15,56,202,254
DB      15,56,201,229
        movdqa  xmm2,xmm0
DB      15,58,204,193,1
DB      15,56,200,213
        pxor    xmm4,xmm6
DB      15,56,201,238
DB      15,56,202,231

        movdqa  xmm1,xmm0
DB      15,58,204,194,1
DB      15,56,200,206
        pxor    xmm5,xmm7
DB      15,56,202,236
DB      15,56,201,247
        movdqa  xmm2,xmm0
DB      15,58,204,193,2
DB      15,56,200,215
        pxor    xmm6,xmm4
DB      15,56,201,252
DB      15,56,202,245

        movdqa  xmm1,xmm0
DB      15,58,204,194,2
DB      15,56,200,204
        pxor    xmm7,xmm5
DB      15,56,202,254
DB      15,56,201,229
        movdqa  xmm2,xmm0
DB      15,58,204,193,2
DB      15,56,200,213
        pxor    xmm4,xmm6
DB      15,56,201,238
DB      15,56,202,231

        movdqa  xmm1,xmm0
DB      15,58,204,194,2
DB      15,56,200,206
        pxor    xmm5,xmm7
DB      15,56,202,236
DB      15,56,201,247
        movdqa  xmm2,xmm0
DB      15,58,204,193,2
DB      15,56,200,215
        pxor    xmm6,xmm4
DB      15,56,201,252
DB      15,56,202,245

        movdqa  xmm1,xmm0
DB      15,58,204,194,3
DB      15,56,200,204
        pxor    xmm7,xmm5
DB      15,56,202,254
        movdqu  xmm4,XMMWORD[rsi]
        movdqa  xmm2,xmm0
DB      15,58,204,193,3
DB      15,56,200,213
        movdqu  xmm5,XMMWORD[16+rsi]
DB      102,15,56,0,227

        movdqa  xmm1,xmm0
DB      15,58,204,194,3
DB      15,56,200,206
        movdqu  xmm6,XMMWORD[32+rsi]
DB      102,15,56,0,235

        movdqa  xmm2,xmm0
DB      15,58,204,193,3
DB      15,56,200,215
        movdqu  xmm7,XMMWORD[48+rsi]
DB      102,15,56,0,243

        movdqa  xmm1,xmm0
DB      15,58,204,194,3
DB      65,15,56,200,201
DB      102,15,56,0,251

        paddd   xmm0,xmm8
        movdqa  xmm9,xmm1

        jnz     NEAR $L$oop_shaext

        pshufd  xmm0,xmm0,27
        pshufd  xmm1,xmm1,27
        movdqu  XMMWORD[rdi],xmm0
        movd    DWORD[16+rdi],xmm1
        movaps  xmm6,XMMWORD[((-8-64))+rax]
        movaps  xmm7,XMMWORD[((-8-48))+rax]
        movaps  xmm8,XMMWORD[((-8-32))+rax]
        movaps  xmm9,XMMWORD[((-8-16))+rax]
        mov     rsp,rax
$L$epilogue_shaext:
        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
        mov     rsi,QWORD[16+rsp]
        DB      0F3h,0C3h               ;repret

$L$SEH_end_sha1_block_data_order_shaext:

ALIGN   16
sha1_block_data_order_ssse3:
        mov     QWORD[8+rsp],rdi        ;WIN64 prologue
        mov     QWORD[16+rsp],rsi
        mov     rax,rsp
$L$SEH_begin_sha1_block_data_order_ssse3:
        mov     rdi,rcx
        mov     rsi,rdx
        mov     rdx,r8


_ssse3_shortcut:

        mov     r11,rsp

        push    rbx

        push    rbp

        push    r12

        push    r13

        push    r14

        lea     rsp,[((-160))+rsp]
        movaps  XMMWORD[(-40-96)+r11],xmm6
        movaps  XMMWORD[(-40-80)+r11],xmm7
        movaps  XMMWORD[(-40-64)+r11],xmm8
        movaps  XMMWORD[(-40-48)+r11],xmm9
        movaps  XMMWORD[(-40-32)+r11],xmm10
        movaps  XMMWORD[(-40-16)+r11],xmm11
$L$prologue_ssse3:
        and     rsp,-64
        mov     r8,rdi
        mov     r9,rsi
        mov     r10,rdx

        shl     r10,6
        add     r10,r9
        lea     r14,[((K_XX_XX+64))]

        mov     eax,DWORD[r8]
        mov     ebx,DWORD[4+r8]
        mov     ecx,DWORD[8+r8]
        mov     edx,DWORD[12+r8]
        mov     esi,ebx
        mov     ebp,DWORD[16+r8]
        mov     edi,ecx
        xor     edi,edx
        and     esi,edi

        movdqa  xmm6,XMMWORD[64+r14]
        movdqa  xmm9,XMMWORD[((-64))+r14]
        movdqu  xmm0,XMMWORD[r9]
        movdqu  xmm1,XMMWORD[16+r9]
        movdqu  xmm2,XMMWORD[32+r9]
        movdqu  xmm3,XMMWORD[48+r9]
DB      102,15,56,0,198
DB      102,15,56,0,206
DB      102,15,56,0,214
        add     r9,64
        paddd   xmm0,xmm9
DB      102,15,56,0,222
        paddd   xmm1,xmm9
        paddd   xmm2,xmm9
        movdqa  XMMWORD[rsp],xmm0
        psubd   xmm0,xmm9
        movdqa  XMMWORD[16+rsp],xmm1
        psubd   xmm1,xmm9
        movdqa  XMMWORD[32+rsp],xmm2
        psubd   xmm2,xmm9
        jmp     NEAR $L$oop_ssse3
ALIGN   16
$L$oop_ssse3:
        ror     ebx,2
        pshufd  xmm4,xmm0,238
        xor     esi,edx
        movdqa  xmm8,xmm3
        paddd   xmm9,xmm3
        mov     edi,eax
        add     ebp,DWORD[rsp]
        punpcklqdq      xmm4,xmm1
        xor     ebx,ecx
        rol     eax,5
        add     ebp,esi
        psrldq  xmm8,4
        and     edi,ebx
        xor     ebx,ecx
        pxor    xmm4,xmm0
        add     ebp,eax
        ror     eax,7
        pxor    xmm8,xmm2
        xor     edi,ecx
        mov     esi,ebp
        add     edx,DWORD[4+rsp]
        pxor    xmm4,xmm8
        xor     eax,ebx
        rol     ebp,5
        movdqa  XMMWORD[48+rsp],xmm9
        add     edx,edi
        and     esi,eax
        movdqa  xmm10,xmm4
        xor     eax,ebx
        add     edx,ebp
        ror     ebp,7
        movdqa  xmm8,xmm4
        xor     esi,ebx
        pslldq  xmm10,12
        paddd   xmm4,xmm4
        mov     edi,edx
        add     ecx,DWORD[8+rsp]
        psrld   xmm8,31
        xor     ebp,eax
        rol     edx,5
        add     ecx,esi
        movdqa  xmm9,xmm10
        and     edi,ebp
        xor     ebp,eax
        psrld   xmm10,30
        add     ecx,edx
        ror     edx,7
        por     xmm4,xmm8
        xor     edi,eax
        mov     esi,ecx
        add     ebx,DWORD[12+rsp]
        pslld   xmm9,2
        pxor    xmm4,xmm10
        xor     edx,ebp
        movdqa  xmm10,XMMWORD[((-64))+r14]
        rol     ecx,5
        add     ebx,edi
        and     esi,edx
        pxor    xmm4,xmm9
        xor     edx,ebp
        add     ebx,ecx
        ror     ecx,7
        pshufd  xmm5,xmm1,238
        xor     esi,ebp
        movdqa  xmm9,xmm4
        paddd   xmm10,xmm4
        mov     edi,ebx
        add     eax,DWORD[16+rsp]
        punpcklqdq      xmm5,xmm2
        xor     ecx,edx
        rol     ebx,5
        add     eax,esi
        psrldq  xmm9,4
        and     edi,ecx
        xor     ecx,edx
        pxor    xmm5,xmm1
        add     eax,ebx
        ror     ebx,7
        pxor    xmm9,xmm3
        xor     edi,edx
        mov     esi,eax
        add     ebp,DWORD[20+rsp]
        pxor    xmm5,xmm9
        xor     ebx,ecx
        rol     eax,5
        movdqa  XMMWORD[rsp],xmm10
        add     ebp,edi
        and     esi,ebx
        movdqa  xmm8,xmm5
        xor     ebx,ecx
        add     ebp,eax
        ror     eax,7
        movdqa  xmm9,xmm5
        xor     esi,ecx
        pslldq  xmm8,12
        paddd   xmm5,xmm5
        mov     edi,ebp
        add     edx,DWORD[24+rsp]
        psrld   xmm9,31
        xor     eax,ebx
        rol     ebp,5
        add     edx,esi
        movdqa  xmm10,xmm8
        and     edi,eax
        xor     eax,ebx
        psrld   xmm8,30
        add     edx,ebp
        ror     ebp,7
        por     xmm5,xmm9
        xor     edi,ebx
        mov     esi,edx
        add     ecx,DWORD[28+rsp]
        pslld   xmm10,2
        pxor    xmm5,xmm8
        xor     ebp,eax
        movdqa  xmm8,XMMWORD[((-32))+r14]
        rol     edx,5
        add     ecx,edi
        and     esi,ebp
        pxor    xmm5,xmm10
        xor     ebp,eax
        add     ecx,edx
        ror     edx,7
        pshufd  xmm6,xmm2,238
        xor     esi,eax
        movdqa  xmm10,xmm5
        paddd   xmm8,xmm5
        mov     edi,ecx
        add     ebx,DWORD[32+rsp]
        punpcklqdq      xmm6,xmm3
        xor     edx,ebp
        rol     ecx,5
        add     ebx,esi
        psrldq  xmm10,4
        and     edi,edx
        xor     edx,ebp
        pxor    xmm6,xmm2
        add     ebx,ecx
        ror     ecx,7
        pxor    xmm10,xmm4
        xor     edi,ebp
        mov     esi,ebx
        add     eax,DWORD[36+rsp]
        pxor    xmm6,xmm10
        xor     ecx,edx
        rol     ebx,5
        movdqa  XMMWORD[16+rsp],xmm8
        add     eax,edi
        and     esi,ecx
        movdqa  xmm9,xmm6
        xor     ecx,edx
        add     eax,ebx
        ror     ebx,7
        movdqa  xmm10,xmm6
        xor     esi,edx
        pslldq  xmm9,12
        paddd   xmm6,xmm6
        mov     edi,eax
        add     ebp,DWORD[40+rsp]
        psrld   xmm10,31
        xor     ebx,ecx
        rol     eax,5
        add     ebp,esi
        movdqa  xmm8,xmm9
        and     edi,ebx
        xor     ebx,ecx
        psrld   xmm9,30
        add     ebp,eax
        ror     eax,7
        por     xmm6,xmm10
        xor     edi,ecx
        mov     esi,ebp
        add     edx,DWORD[44+rsp]
        pslld   xmm8,2
        pxor    xmm6,xmm9
        xor     eax,ebx
        movdqa  xmm9,XMMWORD[((-32))+r14]
        rol     ebp,5
        add     edx,edi
        and     esi,eax
        pxor    xmm6,xmm8
        xor     eax,ebx
        add     edx,ebp
        ror     ebp,7
        pshufd  xmm7,xmm3,238
        xor     esi,ebx
        movdqa  xmm8,xmm6
        paddd   xmm9,xmm6
        mov     edi,edx
        add     ecx,DWORD[48+rsp]
        punpcklqdq      xmm7,xmm4
        xor     ebp,eax
        rol     edx,5
        add     ecx,esi
        psrldq  xmm8,4
        and     edi,ebp
        xor     ebp,eax
        pxor    xmm7,xmm3
        add     ecx,edx
        ror     edx,7
        pxor    xmm8,xmm5
        xor     edi,eax
        mov     esi,ecx
        add     ebx,DWORD[52+rsp]
        pxor    xmm7,xmm8
        xor     edx,ebp
        rol     ecx,5
        movdqa  XMMWORD[32+rsp],xmm9
        add     ebx,edi
        and     esi,edx
        movdqa  xmm10,xmm7
        xor     edx,ebp
        add     ebx,ecx
        ror     ecx,7
        movdqa  xmm8,xmm7
        xor     esi,ebp
        pslldq  xmm10,12
        paddd   xmm7,xmm7
        mov     edi,ebx
        add     eax,DWORD[56+rsp]
        psrld   xmm8,31
        xor     ecx,edx
        rol     ebx,5
        add     eax,esi
        movdqa  xmm9,xmm10
        and     edi,ecx
        xor     ecx,edx
        psrld   xmm10,30
        add     eax,ebx
        ror     ebx,7
        por     xmm7,xmm8
        xor     edi,edx
        mov     esi,eax
        add     ebp,DWORD[60+rsp]
        pslld   xmm9,2
        pxor    xmm7,xmm10
        xor     ebx,ecx
        movdqa  xmm10,XMMWORD[((-32))+r14]
        rol     eax,5
        add     ebp,edi
        and     esi,ebx
        pxor    xmm7,xmm9
        pshufd  xmm9,xmm6,238
        xor     ebx,ecx
        add     ebp,eax
        ror     eax,7
        pxor    xmm0,xmm4
        xor     esi,ecx
        mov     edi,ebp
        add     edx,DWORD[rsp]
        punpcklqdq      xmm9,xmm7
        xor     eax,ebx
        rol     ebp,5
        pxor    xmm0,xmm1
        add     edx,esi
        and     edi,eax
        movdqa  xmm8,xmm10
        xor     eax,ebx
        paddd   xmm10,xmm7
        add     edx,ebp
        pxor    xmm0,xmm9
        ror     ebp,7
        xor     edi,ebx
        mov     esi,edx
        add     ecx,DWORD[4+rsp]
        movdqa  xmm9,xmm0
        xor     ebp,eax
        rol     edx,5
        movdqa  XMMWORD[48+rsp],xmm10
        add     ecx,edi
        and     esi,ebp
        xor     ebp,eax
        pslld   xmm0,2
        add     ecx,edx
        ror     edx,7
        psrld   xmm9,30
        xor     esi,eax
        mov     edi,ecx
        add     ebx,DWORD[8+rsp]
        por     xmm0,xmm9
        xor     edx,ebp
        rol     ecx,5
        pshufd  xmm10,xmm7,238
        add     ebx,esi
        and     edi,edx
        xor     edx,ebp
        add     ebx,ecx
        add     eax,DWORD[12+rsp]
        xor     edi,ebp
        mov     esi,ebx
        rol     ebx,5
        add     eax,edi
        xor     esi,edx
        ror     ecx,7
        add     eax,ebx
        pxor    xmm1,xmm5
        add     ebp,DWORD[16+rsp]
        xor     esi,ecx
        punpcklqdq      xmm10,xmm0
        mov     edi,eax
        rol     eax,5
        pxor    xmm1,xmm2
        add     ebp,esi
        xor     edi,ecx
        movdqa  xmm9,xmm8
        ror     ebx,7
        paddd   xmm8,xmm0
        add     ebp,eax
        pxor    xmm1,xmm10
        add     edx,DWORD[20+rsp]
        xor     edi,ebx
        mov     esi,ebp
        rol     ebp,5
        movdqa  xmm10,xmm1
        add     edx,edi
        xor     esi,ebx
        movdqa  XMMWORD[rsp],xmm8
        ror     eax,7
        add     edx,ebp
        add     ecx,DWORD[24+rsp]
        pslld   xmm1,2
        xor     esi,eax
        mov     edi,edx
        psrld   xmm10,30
        rol     edx,5
        add     ecx,esi
        xor     edi,eax
        ror     ebp,7
        por     xmm1,xmm10
        add     ecx,edx
        add     ebx,DWORD[28+rsp]
        pshufd  xmm8,xmm0,238
        xor     edi,ebp
        mov     esi,ecx
        rol     ecx,5
        add     ebx,edi
        xor     esi,ebp
        ror     edx,7
        add     ebx,ecx
        pxor    xmm2,xmm6
        add     eax,DWORD[32+rsp]
        xor     esi,edx
        punpcklqdq      xmm8,xmm1
        mov     edi,ebx
        rol     ebx,5
        pxor    xmm2,xmm3
        add     eax,esi
        xor     edi,edx
        movdqa  xmm10,XMMWORD[r14]
        ror     ecx,7
        paddd   xmm9,xmm1
        add     eax,ebx
        pxor    xmm2,xmm8
        add     ebp,DWORD[36+rsp]
        xor     edi,ecx
        mov     esi,eax
        rol     eax,5
        movdqa  xmm8,xmm2
        add     ebp,edi
        xor     esi,ecx
        movdqa  XMMWORD[16+rsp],xmm9
        ror     ebx,7
        add     ebp,eax
        add     edx,DWORD[40+rsp]
        pslld   xmm2,2
        xor     esi,ebx
        mov     edi,ebp
        psrld   xmm8,30
        rol     ebp,5
        add     edx,esi
        xor     edi,ebx
        ror     eax,7
        por     xmm2,xmm8
        add     edx,ebp
        add     ecx,DWORD[44+rsp]
        pshufd  xmm9,xmm1,238
        xor     edi,eax
        mov     esi,edx
        rol     edx,5
        add     ecx,edi
        xor     esi,eax
        ror     ebp,7
        add     ecx,edx
        pxor    xmm3,xmm7
        add     ebx,DWORD[48+rsp]
        xor     esi,ebp
        punpcklqdq      xmm9,xmm2
        mov     edi,ecx
        rol     ecx,5
        pxor    xmm3,xmm4
        add     ebx,esi
        xor     edi,ebp
        movdqa  xmm8,xmm10
        ror     edx,7
        paddd   xmm10,xmm2
        add     ebx,ecx
        pxor    xmm3,xmm9
        add     eax,DWORD[52+rsp]
        xor     edi,edx
        mov     esi,ebx
        rol     ebx,5
        movdqa  xmm9,xmm3
        add     eax,edi
        xor     esi,edx
        movdqa  XMMWORD[32+rsp],xmm10
        ror     ecx,7
        add     eax,ebx
        add     ebp,DWORD[56+rsp]
        pslld   xmm3,2
        xor     esi,ecx
        mov     edi,eax
        psrld   xmm9,30
        rol     eax,5
        add     ebp,esi
        xor     edi,ecx
        ror     ebx,7
        por     xmm3,xmm9
        add     ebp,eax
        add     edx,DWORD[60+rsp]
        pshufd  xmm10,xmm2,238
        xor     edi,ebx
        mov     esi,ebp
        rol     ebp,5
        add     edx,edi
        xor     esi,ebx
        ror     eax,7
        add     edx,ebp
        pxor    xmm4,xmm0
        add     ecx,DWORD[rsp]
        xor     esi,eax
        punpcklqdq      xmm10,xmm3
        mov     edi,edx
        rol     edx,5
        pxor    xmm4,xmm5
        add     ecx,esi
        xor     edi,eax
        movdqa  xmm9,xmm8
        ror     ebp,7
        paddd   xmm8,xmm3
        add     ecx,edx
        pxor    xmm4,xmm10
        add     ebx,DWORD[4+rsp]
        xor     edi,ebp
        mov     esi,ecx
        rol     ecx,5
        movdqa  xmm10,xmm4
        add     ebx,edi
        xor     esi,ebp
        movdqa  XMMWORD[48+rsp],xmm8
        ror     edx,7
        add     ebx,ecx
        add     eax,DWORD[8+rsp]
        pslld   xmm4,2
        xor     esi,edx
        mov     edi,ebx
        psrld   xmm10,30
        rol     ebx,5
        add     eax,esi
        xor     edi,edx
        ror     ecx,7
        por     xmm4,xmm10
        add     eax,ebx
        add     ebp,DWORD[12+rsp]
        pshufd  xmm8,xmm3,238
        xor     edi,ecx
        mov     esi,eax
        rol     eax,5
        add     ebp,edi
        xor     esi,ecx
        ror     ebx,7
        add     ebp,eax
        pxor    xmm5,xmm1
        add     edx,DWORD[16+rsp]
        xor     esi,ebx
        punpcklqdq      xmm8,xmm4
        mov     edi,ebp
        rol     ebp,5
        pxor    xmm5,xmm6
        add     edx,esi
        xor     edi,ebx
        movdqa  xmm10,xmm9
        ror     eax,7
        paddd   xmm9,xmm4
        add     edx,ebp
        pxor    xmm5,xmm8
        add     ecx,DWORD[20+rsp]
        xor     edi,eax
        mov     esi,edx
        rol     edx,5
        movdqa  xmm8,xmm5
        add     ecx,edi
        xor     esi,eax
        movdqa  XMMWORD[rsp],xmm9
        ror     ebp,7
        add     ecx,edx
        add     ebx,DWORD[24+rsp]
        pslld   xmm5,2
        xor     esi,ebp
        mov     edi,ecx
        psrld   xmm8,30
        rol     ecx,5
        add     ebx,esi
        xor     edi,ebp
        ror     edx,7
        por     xmm5,xmm8
        add     ebx,ecx
        add     eax,DWORD[28+rsp]
        pshufd  xmm9,xmm4,238
        ror     ecx,7
        mov     esi,ebx
        xor     edi,edx
        rol     ebx,5
        add     eax,edi
        xor     esi,ecx
        xor     ecx,edx
        add     eax,ebx
        pxor    xmm6,xmm2
        add     ebp,DWORD[32+rsp]
        and     esi,ecx
        xor     ecx,edx
        ror     ebx,7
        punpcklqdq      xmm9,xmm5
        mov     edi,eax
        xor     esi,ecx
        pxor    xmm6,xmm7
        rol     eax,5
        add     ebp,esi
        movdqa  xmm8,xmm10
        xor     edi,ebx
        paddd   xmm10,xmm5
        xor     ebx,ecx
        pxor    xmm6,xmm9
        add     ebp,eax
        add     edx,DWORD[36+rsp]
        and     edi,ebx
        xor     ebx,ecx
        ror     eax,7
        movdqa  xmm9,xmm6
        mov     esi,ebp
        xor     edi,ebx
        movdqa  XMMWORD[16+rsp],xmm10
        rol     ebp,5
        add     edx,edi
        xor     esi,eax
        pslld   xmm6,2
        xor     eax,ebx
        add     edx,ebp
        psrld   xmm9,30
        add     ecx,DWORD[40+rsp]
        and     esi,eax
        xor     eax,ebx
        por     xmm6,xmm9
        ror     ebp,7
        mov     edi,edx
        xor     esi,eax
        rol     edx,5
        pshufd  xmm10,xmm5,238
        add     ecx,esi
        xor     edi,ebp
        xor     ebp,eax
        add     ecx,edx
        add     ebx,DWORD[44+rsp]
        and     edi,ebp
        xor     ebp,eax
        ror     edx,7
        mov     esi,ecx
        xor     edi,ebp
        rol     ecx,5
        add     ebx,edi
        xor     esi,edx
        xor     edx,ebp
        add     ebx,ecx
        pxor    xmm7,xmm3
        add     eax,DWORD[48+rsp]
        and     esi,edx
        xor     edx,ebp
        ror     ecx,7
        punpcklqdq      xmm10,xmm6
        mov     edi,ebx
        xor     esi,edx
        pxor    xmm7,xmm0
        rol     ebx,5
        add     eax,esi
        movdqa  xmm9,XMMWORD[32+r14]
        xor     edi,ecx
        paddd   xmm8,xmm6
        xor     ecx,edx
        pxor    xmm7,xmm10
        add     eax,ebx
        add     ebp,DWORD[52+rsp]
        and     edi,ecx
        xor     ecx,edx
        ror     ebx,7
        movdqa  xmm10,xmm7
        mov     esi,eax
        xor     edi,ecx
        movdqa  XMMWORD[32+rsp],xmm8
        rol     eax,5
        add     ebp,edi
        xor     esi,ebx
        pslld   xmm7,2
        xor     ebx,ecx
        add     ebp,eax
        psrld   xmm10,30
        add     edx,DWORD[56+rsp]
        and     esi,ebx
        xor     ebx,ecx
        por     xmm7,xmm10
        ror     eax,7
        mov     edi,ebp
        xor     esi,ebx
        rol     ebp,5
        pshufd  xmm8,xmm6,238
        add     edx,esi
        xor     edi,eax
        xor     eax,ebx
        add     edx,ebp
        add     ecx,DWORD[60+rsp]
        and     edi,eax
        xor     eax,ebx
        ror     ebp,7
        mov     esi,edx
        xor     edi,eax
        rol     edx,5
        add     ecx,edi
        xor     esi,ebp
        xor     ebp,eax
        add     ecx,edx
        pxor    xmm0,xmm4
        add     ebx,DWORD[rsp]
        and     esi,ebp
        xor     ebp,eax
        ror     edx,7
        punpcklqdq      xmm8,xmm7
        mov     edi,ecx
        xor     esi,ebp
        pxor    xmm0,xmm1
        rol     ecx,5
        add     ebx,esi
        movdqa  xmm10,xmm9
        xor     edi,edx
        paddd   xmm9,xmm7
        xor     edx,ebp
        pxor    xmm0,xmm8
        add     ebx,ecx
        add     eax,DWORD[4+rsp]
        and     edi,edx
        xor     edx,ebp
        ror     ecx,7
        movdqa  xmm8,xmm0
        mov     esi,ebx
        xor     edi,edx
        movdqa  XMMWORD[48+rsp],xmm9
        rol     ebx,5
        add     eax,edi
        xor     esi,ecx
        pslld   xmm0,2
        xor     ecx,edx
        add     eax,ebx
        psrld   xmm8,30
        add     ebp,DWORD[8+rsp]
        and     esi,ecx
        xor     ecx,edx
        por     xmm0,xmm8
        ror     ebx,7
        mov     edi,eax
        xor     esi,ecx
        rol     eax,5
        pshufd  xmm9,xmm7,238
        add     ebp,esi
        xor     edi,ebx
        xor     ebx,ecx
        add     ebp,eax
        add     edx,DWORD[12+rsp]
        and     edi,ebx
        xor     ebx,ecx
        ror     eax,7
        mov     esi,ebp
        xor     edi,ebx
        rol     ebp,5
        add     edx,edi
        xor     esi,eax
        xor     eax,ebx
        add     edx,ebp
        pxor    xmm1,xmm5
        add     ecx,DWORD[16+rsp]
        and     esi,eax
        xor     eax,ebx
        ror     ebp,7
        punpcklqdq      xmm9,xmm0
        mov     edi,edx
        xor     esi,eax
        pxor    xmm1,xmm2
        rol     edx,5
        add     ecx,esi
        movdqa  xmm8,xmm10
        xor     edi,ebp
        paddd   xmm10,xmm0
        xor     ebp,eax
        pxor    xmm1,xmm9
        add     ecx,edx
        add     ebx,DWORD[20+rsp]
        and     edi,ebp
        xor     ebp,eax
        ror     edx,7
        movdqa  xmm9,xmm1
        mov     esi,ecx
        xor     edi,ebp
        movdqa  XMMWORD[rsp],xmm10
        rol     ecx,5
        add     ebx,edi
        xor     esi,edx
        pslld   xmm1,2
        xor     edx,ebp
        add     ebx,ecx
        psrld   xmm9,30
        add     eax,DWORD[24+rsp]
        and     esi,edx
        xor     edx,ebp
        por     xmm1,xmm9
        ror     ecx,7
        mov     edi,ebx
        xor     esi,edx
        rol     ebx,5
        pshufd  xmm10,xmm0,238
        add     eax,esi
        xor     edi,ecx
        xor     ecx,edx
        add     eax,ebx
        add     ebp,DWORD[28+rsp]
        and     edi,ecx
        xor     ecx,edx
        ror     ebx,7
        mov     esi,eax
        xor     edi,ecx
        rol     eax,5
        add     ebp,edi
        xor     esi,ebx
        xor     ebx,ecx
        add     ebp,eax
        pxor    xmm2,xmm6
        add     edx,DWORD[32+rsp]
        and     esi,ebx
        xor     ebx,ecx
        ror     eax,7
        punpcklqdq      xmm10,xmm1
        mov     edi,ebp
        xor     esi,ebx
        pxor    xmm2,xmm3
        rol     ebp,5
        add     edx,esi
        movdqa  xmm9,xmm8
        xor     edi,eax
        paddd   xmm8,xmm1
        xor     eax,ebx
        pxor    xmm2,xmm10
        add     edx,ebp
        add     ecx,DWORD[36+rsp]
        and     edi,eax
        xor     eax,ebx
        ror     ebp,7
        movdqa  xmm10,xmm2
        mov     esi,edx
        xor     edi,eax
        movdqa  XMMWORD[16+rsp],xmm8
        rol     edx,5
        add     ecx,edi
        xor     esi,ebp
        pslld   xmm2,2
        xor     ebp,eax
        add     ecx,edx
        psrld   xmm10,30
        add     ebx,DWORD[40+rsp]
        and     esi,ebp
        xor     ebp,eax
        por     xmm2,xmm10
        ror     edx,7
        mov     edi,ecx
        xor     esi,ebp
        rol     ecx,5
        pshufd  xmm8,xmm1,238
        add     ebx,esi
        xor     edi,edx
        xor     edx,ebp
        add     ebx,ecx
        add     eax,DWORD[44+rsp]
        and     edi,edx
        xor     edx,ebp
        ror     ecx,7
        mov     esi,ebx
        xor     edi,edx
        rol     ebx,5
        add     eax,edi
        xor     esi,edx
        add     eax,ebx
        pxor    xmm3,xmm7
        add     ebp,DWORD[48+rsp]
        xor     esi,ecx
        punpcklqdq      xmm8,xmm2
        mov     edi,eax
        rol     eax,5
        pxor    xmm3,xmm4
        add     ebp,esi
        xor     edi,ecx
        movdqa  xmm10,xmm9
        ror     ebx,7
        paddd   xmm9,xmm2
        add     ebp,eax
        pxor    xmm3,xmm8
        add     edx,DWORD[52+rsp]
        xor     edi,ebx
        mov     esi,ebp
        rol     ebp,5
        movdqa  xmm8,xmm3
        add     edx,edi
        xor     esi,ebx
        movdqa  XMMWORD[32+rsp],xmm9
        ror     eax,7
        add     edx,ebp
        add     ecx,DWORD[56+rsp]
        pslld   xmm3,2
        xor     esi,eax
        mov     edi,edx
        psrld   xmm8,30
        rol     edx,5
        add     ecx,esi
        xor     edi,eax
        ror     ebp,7
        por     xmm3,xmm8
        add     ecx,edx
        add     ebx,DWORD[60+rsp]
        xor     edi,ebp
        mov     esi,ecx
        rol     ecx,5
        add     ebx,edi
        xor     esi,ebp
        ror     edx,7
        add     ebx,ecx
        add     eax,DWORD[rsp]
        xor     esi,edx
        mov     edi,ebx
        rol     ebx,5
        paddd   xmm10,xmm3
        add     eax,esi
        xor     edi,edx
        movdqa  XMMWORD[48+rsp],xmm10
        ror     ecx,7
        add     eax,ebx
        add     ebp,DWORD[4+rsp]
        xor     edi,ecx
        mov     esi,eax
        rol     eax,5
        add     ebp,edi
        xor     esi,ecx
        ror     ebx,7
        add     ebp,eax
        add     edx,DWORD[8+rsp]
        xor     esi,ebx
        mov     edi,ebp
        rol     ebp,5
        add     edx,esi
        xor     edi,ebx
        ror     eax,7
        add     edx,ebp
        add     ecx,DWORD[12+rsp]
        xor     edi,eax
        mov     esi,edx
        rol     edx,5
        add     ecx,edi
        xor     esi,eax
        ror     ebp,7
        add     ecx,edx
        cmp     r9,r10
        je      NEAR $L$done_ssse3
        movdqa  xmm6,XMMWORD[64+r14]
        movdqa  xmm9,XMMWORD[((-64))+r14]
        movdqu  xmm0,XMMWORD[r9]
        movdqu  xmm1,XMMWORD[16+r9]
        movdqu  xmm2,XMMWORD[32+r9]
        movdqu  xmm3,XMMWORD[48+r9]
DB      102,15,56,0,198
        add     r9,64
        add     ebx,DWORD[16+rsp]
        xor     esi,ebp
        mov     edi,ecx
DB      102,15,56,0,206
        rol     ecx,5
        add     ebx,esi
        xor     edi,ebp
        ror     edx,7
        paddd   xmm0,xmm9
        add     ebx,ecx
        add     eax,DWORD[20+rsp]
        xor     edi,edx
        mov     esi,ebx
        movdqa  XMMWORD[rsp],xmm0
        rol     ebx,5
        add     eax,edi
        xor     esi,edx
        ror     ecx,7
        psubd   xmm0,xmm9
        add     eax,ebx
        add     ebp,DWORD[24+rsp]
        xor     esi,ecx
        mov     edi,eax
        rol     eax,5
        add     ebp,esi
        xor     edi,ecx
        ror     ebx,7
        add     ebp,eax
        add     edx,DWORD[28+rsp]
        xor     edi,ebx
        mov     esi,ebp
        rol     ebp,5
        add     edx,edi
        xor     esi,ebx
        ror     eax,7
        add     edx,ebp
        add     ecx,DWORD[32+rsp]
        xor     esi,eax
        mov     edi,edx
DB      102,15,56,0,214
        rol     edx,5
        add     ecx,esi
        xor     edi,eax
        ror     ebp,7
        paddd   xmm1,xmm9
        add     ecx,edx
        add     ebx,DWORD[36+rsp]
        xor     edi,ebp
        mov     esi,ecx
        movdqa  XMMWORD[16+rsp],xmm1
        rol     ecx,5
        add     ebx,edi
        xor     esi,ebp
        ror     edx,7
        psubd   xmm1,xmm9
        add     ebx,ecx
        add     eax,DWORD[40+rsp]
        xor     esi,edx
        mov     edi,ebx
        rol     ebx,5
        add     eax,esi
        xor     edi,edx
        ror     ecx,7
        add     eax,ebx
        add     ebp,DWORD[44+rsp]
        xor     edi,ecx
        mov     esi,eax
        rol     eax,5
        add     ebp,edi
        xor     esi,ecx
        ror     ebx,7
        add     ebp,eax
        add     edx,DWORD[48+rsp]
        xor     esi,ebx
        mov     edi,ebp
DB      102,15,56,0,222
        rol     ebp,5
        add     edx,esi
        xor     edi,ebx
        ror     eax,7
        paddd   xmm2,xmm9
        add     edx,ebp
        add     ecx,DWORD[52+rsp]
        xor     edi,eax
        mov     esi,edx
        movdqa  XMMWORD[32+rsp],xmm2
        rol     edx,5
        add     ecx,edi
        xor     esi,eax
        ror     ebp,7
        psubd   xmm2,xmm9
        add     ecx,edx
        add     ebx,DWORD[56+rsp]
        xor     esi,ebp
        mov     edi,ecx
        rol     ecx,5
        add     ebx,esi
        xor     edi,ebp
        ror     edx,7
        add     ebx,ecx
        add     eax,DWORD[60+rsp]
        xor     edi,edx
        mov     esi,ebx
        rol     ebx,5
        add     eax,edi
        ror     ecx,7
        add     eax,ebx
        add     eax,DWORD[r8]
        add     esi,DWORD[4+r8]
        add     ecx,DWORD[8+r8]
        add     edx,DWORD[12+r8]
        mov     DWORD[r8],eax
        add     ebp,DWORD[16+r8]
        mov     DWORD[4+r8],esi
        mov     ebx,esi
        mov     DWORD[8+r8],ecx
        mov     edi,ecx
        mov     DWORD[12+r8],edx
        xor     edi,edx
        mov     DWORD[16+r8],ebp
        and     esi,edi
        jmp     NEAR $L$oop_ssse3

ALIGN   16
$L$done_ssse3:
        add     ebx,DWORD[16+rsp]
        xor     esi,ebp
        mov     edi,ecx
        rol     ecx,5
        add     ebx,esi
        xor     edi,ebp
        ror     edx,7
        add     ebx,ecx
        add     eax,DWORD[20+rsp]
        xor     edi,edx
        mov     esi,ebx
        rol     ebx,5
        add     eax,edi
        xor     esi,edx
        ror     ecx,7
        add     eax,ebx
        add     ebp,DWORD[24+rsp]
        xor     esi,ecx
        mov     edi,eax
        rol     eax,5
        add     ebp,esi
        xor     edi,ecx
        ror     ebx,7
        add     ebp,eax
        add     edx,DWORD[28+rsp]
        xor     edi,ebx
        mov     esi,ebp
        rol     ebp,5
        add     edx,edi
        xor     esi,ebx
        ror     eax,7
        add     edx,ebp
        add     ecx,DWORD[32+rsp]
        xor     esi,eax
        mov     edi,edx
        rol     edx,5
        add     ecx,esi
        xor     edi,eax
        ror     ebp,7
        add     ecx,edx
        add     ebx,DWORD[36+rsp]
        xor     edi,ebp
        mov     esi,ecx
        rol     ecx,5
        add     ebx,edi
        xor     esi,ebp
        ror     edx,7
        add     ebx,ecx
        add     eax,DWORD[40+rsp]
        xor     esi,edx
        mov     edi,ebx
        rol     ebx,5
        add     eax,esi
        xor     edi,edx
        ror     ecx,7
        add     eax,ebx
        add     ebp,DWORD[44+rsp]
        xor     edi,ecx
        mov     esi,eax
        rol     eax,5
        add     ebp,edi
        xor     esi,ecx
        ror     ebx,7
        add     ebp,eax
        add     edx,DWORD[48+rsp]
        xor     esi,ebx
        mov     edi,ebp
        rol     ebp,5
        add     edx,esi
        xor     edi,ebx
        ror     eax,7
        add     edx,ebp
        add     ecx,DWORD[52+rsp]
        xor     edi,eax
        mov     esi,edx
        rol     edx,5
        add     ecx,edi
        xor     esi,eax
        ror     ebp,7
        add     ecx,edx
        add     ebx,DWORD[56+rsp]
        xor     esi,ebp
        mov     edi,ecx
        rol     ecx,5
        add     ebx,esi
        xor     edi,ebp
        ror     edx,7
        add     ebx,ecx
        add     eax,DWORD[60+rsp]
        xor     edi,edx
        mov     esi,ebx
        rol     ebx,5
        add     eax,edi
        ror     ecx,7
        add     eax,ebx
        add     eax,DWORD[r8]
        add     esi,DWORD[4+r8]
        add     ecx,DWORD[8+r8]
        mov     DWORD[r8],eax
        add     edx,DWORD[12+r8]
        mov     DWORD[4+r8],esi
        add     ebp,DWORD[16+r8]
        mov     DWORD[8+r8],ecx
        mov     DWORD[12+r8],edx
        mov     DWORD[16+r8],ebp
        movaps  xmm6,XMMWORD[((-40-96))+r11]
        movaps  xmm7,XMMWORD[((-40-80))+r11]
        movaps  xmm8,XMMWORD[((-40-64))+r11]
        movaps  xmm9,XMMWORD[((-40-48))+r11]
        movaps  xmm10,XMMWORD[((-40-32))+r11]
        movaps  xmm11,XMMWORD[((-40-16))+r11]
        mov     r14,QWORD[((-40))+r11]

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

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

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

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

        lea     rsp,[r11]

$L$epilogue_ssse3:
        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
        mov     rsi,QWORD[16+rsp]
        DB      0F3h,0C3h               ;repret

$L$SEH_end_sha1_block_data_order_ssse3:
ALIGN   64
K_XX_XX:
        DD      0x5a827999,0x5a827999,0x5a827999,0x5a827999
        DD      0x5a827999,0x5a827999,0x5a827999,0x5a827999
        DD      0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1
        DD      0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1
        DD      0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc
        DD      0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc
        DD      0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6
        DD      0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6
        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
DB      0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0
DB      83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115
DB      102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44
DB      32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60
DB      97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114
DB      103,62,0
ALIGN   64
EXTERN  __imp_RtlVirtualUnwind

ALIGN   16
se_handler:
        push    rsi
        push    rdi
        push    rbx
        push    rbp
        push    r12
        push    r13
        push    r14
        push    r15
        pushfq
        sub     rsp,64

        mov     rax,QWORD[120+r8]
        mov     rbx,QWORD[248+r8]

        lea     r10,[$L$prologue]
        cmp     rbx,r10
        jb      NEAR $L$common_seh_tail

        mov     rax,QWORD[152+r8]

        lea     r10,[$L$epilogue]
        cmp     rbx,r10
        jae     NEAR $L$common_seh_tail

        mov     rax,QWORD[64+rax]

        mov     rbx,QWORD[((-8))+rax]
        mov     rbp,QWORD[((-16))+rax]
        mov     r12,QWORD[((-24))+rax]
        mov     r13,QWORD[((-32))+rax]
        mov     r14,QWORD[((-40))+rax]
        mov     QWORD[144+r8],rbx
        mov     QWORD[160+r8],rbp
        mov     QWORD[216+r8],r12
        mov     QWORD[224+r8],r13
        mov     QWORD[232+r8],r14

        jmp     NEAR $L$common_seh_tail


ALIGN   16
shaext_handler:
        push    rsi
        push    rdi
        push    rbx
        push    rbp
        push    r12
        push    r13
        push    r14
        push    r15
        pushfq
        sub     rsp,64

        mov     rax,QWORD[120+r8]
        mov     rbx,QWORD[248+r8]

        lea     r10,[$L$prologue_shaext]
        cmp     rbx,r10
        jb      NEAR $L$common_seh_tail

        lea     r10,[$L$epilogue_shaext]
        cmp     rbx,r10
        jae     NEAR $L$common_seh_tail

        lea     rsi,[((-8-64))+rax]
        lea     rdi,[512+r8]
        mov     ecx,8
        DD      0xa548f3fc

        jmp     NEAR $L$common_seh_tail


ALIGN   16
ssse3_handler:
        push    rsi
        push    rdi
        push    rbx
        push    rbp
        push    r12
        push    r13
        push    r14
        push    r15
        pushfq
        sub     rsp,64

        mov     rax,QWORD[120+r8]
        mov     rbx,QWORD[248+r8]

        mov     rsi,QWORD[8+r9]
        mov     r11,QWORD[56+r9]

        mov     r10d,DWORD[r11]
        lea     r10,[r10*1+rsi]
        cmp     rbx,r10
        jb      NEAR $L$common_seh_tail

        mov     rax,QWORD[208+r8]

        mov     r10d,DWORD[4+r11]
        lea     r10,[r10*1+rsi]
        cmp     rbx,r10
        jae     NEAR $L$common_seh_tail

        lea     rsi,[((-40-96))+rax]
        lea     rdi,[512+r8]
        mov     ecx,12
        DD      0xa548f3fc

        mov     rbx,QWORD[((-8))+rax]
        mov     rbp,QWORD[((-16))+rax]
        mov     r12,QWORD[((-24))+rax]
        mov     r13,QWORD[((-32))+rax]
        mov     r14,QWORD[((-40))+rax]
        mov     QWORD[144+r8],rbx
        mov     QWORD[160+r8],rbp
        mov     QWORD[216+r8],r12
        mov     QWORD[224+r8],r13
        mov     QWORD[232+r8],r14

$L$common_seh_tail:
        mov     rdi,QWORD[8+rax]
        mov     rsi,QWORD[16+rax]
        mov     QWORD[152+r8],rax
        mov     QWORD[168+r8],rsi
        mov     QWORD[176+r8],rdi

        mov     rdi,QWORD[40+r9]
        mov     rsi,r8
        mov     ecx,154
        DD      0xa548f3fc

        mov     rsi,r9
        xor     rcx,rcx
        mov     rdx,QWORD[8+rsi]
        mov     r8,QWORD[rsi]
        mov     r9,QWORD[16+rsi]
        mov     r10,QWORD[40+rsi]
        lea     r11,[56+rsi]
        lea     r12,[24+rsi]
        mov     QWORD[32+rsp],r10
        mov     QWORD[40+rsp],r11
        mov     QWORD[48+rsp],r12
        mov     QWORD[56+rsp],rcx
        call    QWORD[__imp_RtlVirtualUnwind]

        mov     eax,1
        add     rsp,64
        popfq
        pop     r15
        pop     r14
        pop     r13
        pop     r12
        pop     rbp
        pop     rbx
        pop     rdi
        pop     rsi
        DB      0F3h,0C3h               ;repret


section .pdata rdata align=4
ALIGN   4
        DD      $L$SEH_begin_sha1_block_data_order wrt ..imagebase
        DD      $L$SEH_end_sha1_block_data_order wrt ..imagebase
        DD      $L$SEH_info_sha1_block_data_order wrt ..imagebase
        DD      $L$SEH_begin_sha1_block_data_order_shaext wrt ..imagebase
        DD      $L$SEH_end_sha1_block_data_order_shaext wrt ..imagebase
        DD      $L$SEH_info_sha1_block_data_order_shaext wrt ..imagebase
        DD      $L$SEH_begin_sha1_block_data_order_ssse3 wrt ..imagebase
        DD      $L$SEH_end_sha1_block_data_order_ssse3 wrt ..imagebase
        DD      $L$SEH_info_sha1_block_data_order_ssse3 wrt ..imagebase
section .xdata rdata align=8
ALIGN   8
$L$SEH_info_sha1_block_data_order:
DB      9,0,0,0
        DD      se_handler wrt ..imagebase
$L$SEH_info_sha1_block_data_order_shaext:
DB      9,0,0,0
        DD      shaext_handler wrt ..imagebase
$L$SEH_info_sha1_block_data_order_ssse3:
DB      9,0,0,0
        DD      ssse3_handler wrt ..imagebase
        DD      $L$prologue_ssse3 wrt ..imagebase,$L$epilogue_ssse3 wrt ..imagebase
