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

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


EXTERN  OPENSSL_ia32cap_P

global  sha256_multi_block

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



        mov     rcx,QWORD[((OPENSSL_ia32cap_P+4))]
        bt      rcx,61
        jc      NEAR _shaext_shortcut
        mov     rax,rsp

        push    rbx

        push    rbp

        lea     rsp,[((-168))+rsp]
        movaps  XMMWORD[rsp],xmm6
        movaps  XMMWORD[16+rsp],xmm7
        movaps  XMMWORD[32+rsp],xmm8
        movaps  XMMWORD[48+rsp],xmm9
        movaps  XMMWORD[(-120)+rax],xmm10
        movaps  XMMWORD[(-104)+rax],xmm11
        movaps  XMMWORD[(-88)+rax],xmm12
        movaps  XMMWORD[(-72)+rax],xmm13
        movaps  XMMWORD[(-56)+rax],xmm14
        movaps  XMMWORD[(-40)+rax],xmm15
        sub     rsp,288
        and     rsp,-256
        mov     QWORD[272+rsp],rax

$L$body:
        lea     rbp,[((K256+128))]
        lea     rbx,[256+rsp]
        lea     rdi,[128+rdi]

$L$oop_grande:
        mov     DWORD[280+rsp],edx
        xor     edx,edx
        mov     r8,QWORD[rsi]
        mov     ecx,DWORD[8+rsi]
        cmp     ecx,edx
        cmovg   edx,ecx
        test    ecx,ecx
        mov     DWORD[rbx],ecx
        cmovle  r8,rbp
        mov     r9,QWORD[16+rsi]
        mov     ecx,DWORD[24+rsi]
        cmp     ecx,edx
        cmovg   edx,ecx
        test    ecx,ecx
        mov     DWORD[4+rbx],ecx
        cmovle  r9,rbp
        mov     r10,QWORD[32+rsi]
        mov     ecx,DWORD[40+rsi]
        cmp     ecx,edx
        cmovg   edx,ecx
        test    ecx,ecx
        mov     DWORD[8+rbx],ecx
        cmovle  r10,rbp
        mov     r11,QWORD[48+rsi]
        mov     ecx,DWORD[56+rsi]
        cmp     ecx,edx
        cmovg   edx,ecx
        test    ecx,ecx
        mov     DWORD[12+rbx],ecx
        cmovle  r11,rbp
        test    edx,edx
        jz      NEAR $L$done

        movdqu  xmm8,XMMWORD[((0-128))+rdi]
        lea     rax,[128+rsp]
        movdqu  xmm9,XMMWORD[((32-128))+rdi]
        movdqu  xmm10,XMMWORD[((64-128))+rdi]
        movdqu  xmm11,XMMWORD[((96-128))+rdi]
        movdqu  xmm12,XMMWORD[((128-128))+rdi]
        movdqu  xmm13,XMMWORD[((160-128))+rdi]
        movdqu  xmm14,XMMWORD[((192-128))+rdi]
        movdqu  xmm15,XMMWORD[((224-128))+rdi]
        movdqu  xmm6,XMMWORD[$L$pbswap]
        jmp     NEAR $L$oop

ALIGN   32
$L$oop:
        movdqa  xmm4,xmm10
        pxor    xmm4,xmm9
        movd    xmm5,DWORD[r8]
        movd    xmm0,DWORD[r9]
        movd    xmm1,DWORD[r10]
        movd    xmm2,DWORD[r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm12
DB      102,15,56,0,238
        movdqa  xmm2,xmm12

        psrld   xmm7,6
        movdqa  xmm1,xmm12
        pslld   xmm2,7
        movdqa  XMMWORD[(0-128)+rax],xmm5
        paddd   xmm5,xmm15

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[((-128))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm12

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm12
        pslld   xmm2,26-21
        pandn   xmm0,xmm14
        pand    xmm3,xmm13
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm8
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm8
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm9
        movdqa  xmm7,xmm8
        pslld   xmm2,10
        pxor    xmm3,xmm8


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm15,xmm9
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm15,xmm4
        paddd   xmm11,xmm5
        pxor    xmm7,xmm2

        paddd   xmm15,xmm5
        paddd   xmm15,xmm7
        movd    xmm5,DWORD[4+r8]
        movd    xmm0,DWORD[4+r9]
        movd    xmm1,DWORD[4+r10]
        movd    xmm2,DWORD[4+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm11

        movdqa  xmm2,xmm11
DB      102,15,56,0,238
        psrld   xmm7,6
        movdqa  xmm1,xmm11
        pslld   xmm2,7
        movdqa  XMMWORD[(16-128)+rax],xmm5
        paddd   xmm5,xmm14

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[((-96))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm11

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm11
        pslld   xmm2,26-21
        pandn   xmm0,xmm13
        pand    xmm4,xmm12
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm15
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm15
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm8
        movdqa  xmm7,xmm15
        pslld   xmm2,10
        pxor    xmm4,xmm15


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm14,xmm8
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm14,xmm3
        paddd   xmm10,xmm5
        pxor    xmm7,xmm2

        paddd   xmm14,xmm5
        paddd   xmm14,xmm7
        movd    xmm5,DWORD[8+r8]
        movd    xmm0,DWORD[8+r9]
        movd    xmm1,DWORD[8+r10]
        movd    xmm2,DWORD[8+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm10
DB      102,15,56,0,238
        movdqa  xmm2,xmm10

        psrld   xmm7,6
        movdqa  xmm1,xmm10
        pslld   xmm2,7
        movdqa  XMMWORD[(32-128)+rax],xmm5
        paddd   xmm5,xmm13

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[((-64))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm10

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm10
        pslld   xmm2,26-21
        pandn   xmm0,xmm12
        pand    xmm3,xmm11
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm14
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm14
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm15
        movdqa  xmm7,xmm14
        pslld   xmm2,10
        pxor    xmm3,xmm14


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm13,xmm15
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm13,xmm4
        paddd   xmm9,xmm5
        pxor    xmm7,xmm2

        paddd   xmm13,xmm5
        paddd   xmm13,xmm7
        movd    xmm5,DWORD[12+r8]
        movd    xmm0,DWORD[12+r9]
        movd    xmm1,DWORD[12+r10]
        movd    xmm2,DWORD[12+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm9

        movdqa  xmm2,xmm9
DB      102,15,56,0,238
        psrld   xmm7,6
        movdqa  xmm1,xmm9
        pslld   xmm2,7
        movdqa  XMMWORD[(48-128)+rax],xmm5
        paddd   xmm5,xmm12

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[((-32))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm9

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm9
        pslld   xmm2,26-21
        pandn   xmm0,xmm11
        pand    xmm4,xmm10
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm13
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm13
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm14
        movdqa  xmm7,xmm13
        pslld   xmm2,10
        pxor    xmm4,xmm13


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm12,xmm14
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm12,xmm3
        paddd   xmm8,xmm5
        pxor    xmm7,xmm2

        paddd   xmm12,xmm5
        paddd   xmm12,xmm7
        movd    xmm5,DWORD[16+r8]
        movd    xmm0,DWORD[16+r9]
        movd    xmm1,DWORD[16+r10]
        movd    xmm2,DWORD[16+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm8
DB      102,15,56,0,238
        movdqa  xmm2,xmm8

        psrld   xmm7,6
        movdqa  xmm1,xmm8
        pslld   xmm2,7
        movdqa  XMMWORD[(64-128)+rax],xmm5
        paddd   xmm5,xmm11

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm8

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm8
        pslld   xmm2,26-21
        pandn   xmm0,xmm10
        pand    xmm3,xmm9
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm12
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm12
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm13
        movdqa  xmm7,xmm12
        pslld   xmm2,10
        pxor    xmm3,xmm12


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm11,xmm13
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm11,xmm4
        paddd   xmm15,xmm5
        pxor    xmm7,xmm2

        paddd   xmm11,xmm5
        paddd   xmm11,xmm7
        movd    xmm5,DWORD[20+r8]
        movd    xmm0,DWORD[20+r9]
        movd    xmm1,DWORD[20+r10]
        movd    xmm2,DWORD[20+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm15

        movdqa  xmm2,xmm15
DB      102,15,56,0,238
        psrld   xmm7,6
        movdqa  xmm1,xmm15
        pslld   xmm2,7
        movdqa  XMMWORD[(80-128)+rax],xmm5
        paddd   xmm5,xmm10

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[32+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm15

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm15
        pslld   xmm2,26-21
        pandn   xmm0,xmm9
        pand    xmm4,xmm8
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm11
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm11
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm12
        movdqa  xmm7,xmm11
        pslld   xmm2,10
        pxor    xmm4,xmm11


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm10,xmm12
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm10,xmm3
        paddd   xmm14,xmm5
        pxor    xmm7,xmm2

        paddd   xmm10,xmm5
        paddd   xmm10,xmm7
        movd    xmm5,DWORD[24+r8]
        movd    xmm0,DWORD[24+r9]
        movd    xmm1,DWORD[24+r10]
        movd    xmm2,DWORD[24+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm14
DB      102,15,56,0,238
        movdqa  xmm2,xmm14

        psrld   xmm7,6
        movdqa  xmm1,xmm14
        pslld   xmm2,7
        movdqa  XMMWORD[(96-128)+rax],xmm5
        paddd   xmm5,xmm9

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[64+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm14

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm14
        pslld   xmm2,26-21
        pandn   xmm0,xmm8
        pand    xmm3,xmm15
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm10
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm10
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm11
        movdqa  xmm7,xmm10
        pslld   xmm2,10
        pxor    xmm3,xmm10


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm9,xmm11
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm9,xmm4
        paddd   xmm13,xmm5
        pxor    xmm7,xmm2

        paddd   xmm9,xmm5
        paddd   xmm9,xmm7
        movd    xmm5,DWORD[28+r8]
        movd    xmm0,DWORD[28+r9]
        movd    xmm1,DWORD[28+r10]
        movd    xmm2,DWORD[28+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm13

        movdqa  xmm2,xmm13
DB      102,15,56,0,238
        psrld   xmm7,6
        movdqa  xmm1,xmm13
        pslld   xmm2,7
        movdqa  XMMWORD[(112-128)+rax],xmm5
        paddd   xmm5,xmm8

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[96+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm13

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm13
        pslld   xmm2,26-21
        pandn   xmm0,xmm15
        pand    xmm4,xmm14
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm9
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm9
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm10
        movdqa  xmm7,xmm9
        pslld   xmm2,10
        pxor    xmm4,xmm9


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm8,xmm10
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm8,xmm3
        paddd   xmm12,xmm5
        pxor    xmm7,xmm2

        paddd   xmm8,xmm5
        paddd   xmm8,xmm7
        lea     rbp,[256+rbp]
        movd    xmm5,DWORD[32+r8]
        movd    xmm0,DWORD[32+r9]
        movd    xmm1,DWORD[32+r10]
        movd    xmm2,DWORD[32+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm12
DB      102,15,56,0,238
        movdqa  xmm2,xmm12

        psrld   xmm7,6
        movdqa  xmm1,xmm12
        pslld   xmm2,7
        movdqa  XMMWORD[(128-128)+rax],xmm5
        paddd   xmm5,xmm15

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[((-128))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm12

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm12
        pslld   xmm2,26-21
        pandn   xmm0,xmm14
        pand    xmm3,xmm13
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm8
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm8
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm9
        movdqa  xmm7,xmm8
        pslld   xmm2,10
        pxor    xmm3,xmm8


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm15,xmm9
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm15,xmm4
        paddd   xmm11,xmm5
        pxor    xmm7,xmm2

        paddd   xmm15,xmm5
        paddd   xmm15,xmm7
        movd    xmm5,DWORD[36+r8]
        movd    xmm0,DWORD[36+r9]
        movd    xmm1,DWORD[36+r10]
        movd    xmm2,DWORD[36+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm11

        movdqa  xmm2,xmm11
DB      102,15,56,0,238
        psrld   xmm7,6
        movdqa  xmm1,xmm11
        pslld   xmm2,7
        movdqa  XMMWORD[(144-128)+rax],xmm5
        paddd   xmm5,xmm14

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[((-96))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm11

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm11
        pslld   xmm2,26-21
        pandn   xmm0,xmm13
        pand    xmm4,xmm12
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm15
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm15
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm8
        movdqa  xmm7,xmm15
        pslld   xmm2,10
        pxor    xmm4,xmm15


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm14,xmm8
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm14,xmm3
        paddd   xmm10,xmm5
        pxor    xmm7,xmm2

        paddd   xmm14,xmm5
        paddd   xmm14,xmm7
        movd    xmm5,DWORD[40+r8]
        movd    xmm0,DWORD[40+r9]
        movd    xmm1,DWORD[40+r10]
        movd    xmm2,DWORD[40+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm10
DB      102,15,56,0,238
        movdqa  xmm2,xmm10

        psrld   xmm7,6
        movdqa  xmm1,xmm10
        pslld   xmm2,7
        movdqa  XMMWORD[(160-128)+rax],xmm5
        paddd   xmm5,xmm13

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[((-64))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm10

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm10
        pslld   xmm2,26-21
        pandn   xmm0,xmm12
        pand    xmm3,xmm11
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm14
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm14
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm15
        movdqa  xmm7,xmm14
        pslld   xmm2,10
        pxor    xmm3,xmm14


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm13,xmm15
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm13,xmm4
        paddd   xmm9,xmm5
        pxor    xmm7,xmm2

        paddd   xmm13,xmm5
        paddd   xmm13,xmm7
        movd    xmm5,DWORD[44+r8]
        movd    xmm0,DWORD[44+r9]
        movd    xmm1,DWORD[44+r10]
        movd    xmm2,DWORD[44+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm9

        movdqa  xmm2,xmm9
DB      102,15,56,0,238
        psrld   xmm7,6
        movdqa  xmm1,xmm9
        pslld   xmm2,7
        movdqa  XMMWORD[(176-128)+rax],xmm5
        paddd   xmm5,xmm12

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[((-32))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm9

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm9
        pslld   xmm2,26-21
        pandn   xmm0,xmm11
        pand    xmm4,xmm10
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm13
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm13
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm14
        movdqa  xmm7,xmm13
        pslld   xmm2,10
        pxor    xmm4,xmm13


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm12,xmm14
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm12,xmm3
        paddd   xmm8,xmm5
        pxor    xmm7,xmm2

        paddd   xmm12,xmm5
        paddd   xmm12,xmm7
        movd    xmm5,DWORD[48+r8]
        movd    xmm0,DWORD[48+r9]
        movd    xmm1,DWORD[48+r10]
        movd    xmm2,DWORD[48+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm8
DB      102,15,56,0,238
        movdqa  xmm2,xmm8

        psrld   xmm7,6
        movdqa  xmm1,xmm8
        pslld   xmm2,7
        movdqa  XMMWORD[(192-128)+rax],xmm5
        paddd   xmm5,xmm11

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm8

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm8
        pslld   xmm2,26-21
        pandn   xmm0,xmm10
        pand    xmm3,xmm9
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm12
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm12
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm13
        movdqa  xmm7,xmm12
        pslld   xmm2,10
        pxor    xmm3,xmm12


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm11,xmm13
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm11,xmm4
        paddd   xmm15,xmm5
        pxor    xmm7,xmm2

        paddd   xmm11,xmm5
        paddd   xmm11,xmm7
        movd    xmm5,DWORD[52+r8]
        movd    xmm0,DWORD[52+r9]
        movd    xmm1,DWORD[52+r10]
        movd    xmm2,DWORD[52+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm15

        movdqa  xmm2,xmm15
DB      102,15,56,0,238
        psrld   xmm7,6
        movdqa  xmm1,xmm15
        pslld   xmm2,7
        movdqa  XMMWORD[(208-128)+rax],xmm5
        paddd   xmm5,xmm10

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[32+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm15

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm15
        pslld   xmm2,26-21
        pandn   xmm0,xmm9
        pand    xmm4,xmm8
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm11
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm11
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm12
        movdqa  xmm7,xmm11
        pslld   xmm2,10
        pxor    xmm4,xmm11


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm10,xmm12
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm10,xmm3
        paddd   xmm14,xmm5
        pxor    xmm7,xmm2

        paddd   xmm10,xmm5
        paddd   xmm10,xmm7
        movd    xmm5,DWORD[56+r8]
        movd    xmm0,DWORD[56+r9]
        movd    xmm1,DWORD[56+r10]
        movd    xmm2,DWORD[56+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm14
DB      102,15,56,0,238
        movdqa  xmm2,xmm14

        psrld   xmm7,6
        movdqa  xmm1,xmm14
        pslld   xmm2,7
        movdqa  XMMWORD[(224-128)+rax],xmm5
        paddd   xmm5,xmm9

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[64+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm14

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm14
        pslld   xmm2,26-21
        pandn   xmm0,xmm8
        pand    xmm3,xmm15
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm10
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm10
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm11
        movdqa  xmm7,xmm10
        pslld   xmm2,10
        pxor    xmm3,xmm10


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm9,xmm11
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm9,xmm4
        paddd   xmm13,xmm5
        pxor    xmm7,xmm2

        paddd   xmm9,xmm5
        paddd   xmm9,xmm7
        movd    xmm5,DWORD[60+r8]
        lea     r8,[64+r8]
        movd    xmm0,DWORD[60+r9]
        lea     r9,[64+r9]
        movd    xmm1,DWORD[60+r10]
        lea     r10,[64+r10]
        movd    xmm2,DWORD[60+r11]
        lea     r11,[64+r11]
        punpckldq       xmm5,xmm1
        punpckldq       xmm0,xmm2
        punpckldq       xmm5,xmm0
        movdqa  xmm7,xmm13

        movdqa  xmm2,xmm13
DB      102,15,56,0,238
        psrld   xmm7,6
        movdqa  xmm1,xmm13
        pslld   xmm2,7
        movdqa  XMMWORD[(240-128)+rax],xmm5
        paddd   xmm5,xmm8

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[96+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm13
        prefetcht0      [63+r8]
        pxor    xmm7,xmm2
        movdqa  xmm4,xmm13
        pslld   xmm2,26-21
        pandn   xmm0,xmm15
        pand    xmm4,xmm14
        pxor    xmm7,xmm1

        prefetcht0      [63+r9]
        movdqa  xmm1,xmm9
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm9
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm10
        movdqa  xmm7,xmm9
        pslld   xmm2,10
        pxor    xmm4,xmm9

        prefetcht0      [63+r10]
        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7

        prefetcht0      [63+r11]
        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm8,xmm10
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm8,xmm3
        paddd   xmm12,xmm5
        pxor    xmm7,xmm2

        paddd   xmm8,xmm5
        paddd   xmm8,xmm7
        lea     rbp,[256+rbp]
        movdqu  xmm5,XMMWORD[((0-128))+rax]
        mov     ecx,3
        jmp     NEAR $L$oop_16_xx
ALIGN   32
$L$oop_16_xx:
        movdqa  xmm6,XMMWORD[((16-128))+rax]
        paddd   xmm5,XMMWORD[((144-128))+rax]

        movdqa  xmm7,xmm6
        movdqa  xmm1,xmm6
        psrld   xmm7,3
        movdqa  xmm2,xmm6

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((224-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm3,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm3

        psrld   xmm3,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        psrld   xmm3,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm3
        pxor    xmm0,xmm1
        paddd   xmm5,xmm0
        movdqa  xmm7,xmm12

        movdqa  xmm2,xmm12

        psrld   xmm7,6
        movdqa  xmm1,xmm12
        pslld   xmm2,7
        movdqa  XMMWORD[(0-128)+rax],xmm5
        paddd   xmm5,xmm15

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[((-128))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm12

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm12
        pslld   xmm2,26-21
        pandn   xmm0,xmm14
        pand    xmm3,xmm13
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm8
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm8
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm9
        movdqa  xmm7,xmm8
        pslld   xmm2,10
        pxor    xmm3,xmm8


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm15,xmm9
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm15,xmm4
        paddd   xmm11,xmm5
        pxor    xmm7,xmm2

        paddd   xmm15,xmm5
        paddd   xmm15,xmm7
        movdqa  xmm5,XMMWORD[((32-128))+rax]
        paddd   xmm6,XMMWORD[((160-128))+rax]

        movdqa  xmm7,xmm5
        movdqa  xmm1,xmm5
        psrld   xmm7,3
        movdqa  xmm2,xmm5

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((240-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm4,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm4

        psrld   xmm4,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        psrld   xmm4,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm4
        pxor    xmm0,xmm1
        paddd   xmm6,xmm0
        movdqa  xmm7,xmm11

        movdqa  xmm2,xmm11

        psrld   xmm7,6
        movdqa  xmm1,xmm11
        pslld   xmm2,7
        movdqa  XMMWORD[(16-128)+rax],xmm6
        paddd   xmm6,xmm14

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm6,XMMWORD[((-96))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm11

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm11
        pslld   xmm2,26-21
        pandn   xmm0,xmm13
        pand    xmm4,xmm12
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm15
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm15
        psrld   xmm1,2
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm8
        movdqa  xmm7,xmm15
        pslld   xmm2,10
        pxor    xmm4,xmm15


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm6,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm14,xmm8
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm14,xmm3
        paddd   xmm10,xmm6
        pxor    xmm7,xmm2

        paddd   xmm14,xmm6
        paddd   xmm14,xmm7
        movdqa  xmm6,XMMWORD[((48-128))+rax]
        paddd   xmm5,XMMWORD[((176-128))+rax]

        movdqa  xmm7,xmm6
        movdqa  xmm1,xmm6
        psrld   xmm7,3
        movdqa  xmm2,xmm6

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((0-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm3,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm3

        psrld   xmm3,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        psrld   xmm3,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm3
        pxor    xmm0,xmm1
        paddd   xmm5,xmm0
        movdqa  xmm7,xmm10

        movdqa  xmm2,xmm10

        psrld   xmm7,6
        movdqa  xmm1,xmm10
        pslld   xmm2,7
        movdqa  XMMWORD[(32-128)+rax],xmm5
        paddd   xmm5,xmm13

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[((-64))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm10

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm10
        pslld   xmm2,26-21
        pandn   xmm0,xmm12
        pand    xmm3,xmm11
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm14
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm14
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm15
        movdqa  xmm7,xmm14
        pslld   xmm2,10
        pxor    xmm3,xmm14


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm13,xmm15
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm13,xmm4
        paddd   xmm9,xmm5
        pxor    xmm7,xmm2

        paddd   xmm13,xmm5
        paddd   xmm13,xmm7
        movdqa  xmm5,XMMWORD[((64-128))+rax]
        paddd   xmm6,XMMWORD[((192-128))+rax]

        movdqa  xmm7,xmm5
        movdqa  xmm1,xmm5
        psrld   xmm7,3
        movdqa  xmm2,xmm5

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((16-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm4,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm4

        psrld   xmm4,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        psrld   xmm4,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm4
        pxor    xmm0,xmm1
        paddd   xmm6,xmm0
        movdqa  xmm7,xmm9

        movdqa  xmm2,xmm9

        psrld   xmm7,6
        movdqa  xmm1,xmm9
        pslld   xmm2,7
        movdqa  XMMWORD[(48-128)+rax],xmm6
        paddd   xmm6,xmm12

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm6,XMMWORD[((-32))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm9

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm9
        pslld   xmm2,26-21
        pandn   xmm0,xmm11
        pand    xmm4,xmm10
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm13
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm13
        psrld   xmm1,2
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm14
        movdqa  xmm7,xmm13
        pslld   xmm2,10
        pxor    xmm4,xmm13


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm6,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm12,xmm14
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm12,xmm3
        paddd   xmm8,xmm6
        pxor    xmm7,xmm2

        paddd   xmm12,xmm6
        paddd   xmm12,xmm7
        movdqa  xmm6,XMMWORD[((80-128))+rax]
        paddd   xmm5,XMMWORD[((208-128))+rax]

        movdqa  xmm7,xmm6
        movdqa  xmm1,xmm6
        psrld   xmm7,3
        movdqa  xmm2,xmm6

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((32-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm3,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm3

        psrld   xmm3,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        psrld   xmm3,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm3
        pxor    xmm0,xmm1
        paddd   xmm5,xmm0
        movdqa  xmm7,xmm8

        movdqa  xmm2,xmm8

        psrld   xmm7,6
        movdqa  xmm1,xmm8
        pslld   xmm2,7
        movdqa  XMMWORD[(64-128)+rax],xmm5
        paddd   xmm5,xmm11

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm8

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm8
        pslld   xmm2,26-21
        pandn   xmm0,xmm10
        pand    xmm3,xmm9
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm12
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm12
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm13
        movdqa  xmm7,xmm12
        pslld   xmm2,10
        pxor    xmm3,xmm12


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm11,xmm13
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm11,xmm4
        paddd   xmm15,xmm5
        pxor    xmm7,xmm2

        paddd   xmm11,xmm5
        paddd   xmm11,xmm7
        movdqa  xmm5,XMMWORD[((96-128))+rax]
        paddd   xmm6,XMMWORD[((224-128))+rax]

        movdqa  xmm7,xmm5
        movdqa  xmm1,xmm5
        psrld   xmm7,3
        movdqa  xmm2,xmm5

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((48-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm4,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm4

        psrld   xmm4,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        psrld   xmm4,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm4
        pxor    xmm0,xmm1
        paddd   xmm6,xmm0
        movdqa  xmm7,xmm15

        movdqa  xmm2,xmm15

        psrld   xmm7,6
        movdqa  xmm1,xmm15
        pslld   xmm2,7
        movdqa  XMMWORD[(80-128)+rax],xmm6
        paddd   xmm6,xmm10

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm6,XMMWORD[32+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm15

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm15
        pslld   xmm2,26-21
        pandn   xmm0,xmm9
        pand    xmm4,xmm8
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm11
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm11
        psrld   xmm1,2
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm12
        movdqa  xmm7,xmm11
        pslld   xmm2,10
        pxor    xmm4,xmm11


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm6,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm10,xmm12
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm10,xmm3
        paddd   xmm14,xmm6
        pxor    xmm7,xmm2

        paddd   xmm10,xmm6
        paddd   xmm10,xmm7
        movdqa  xmm6,XMMWORD[((112-128))+rax]
        paddd   xmm5,XMMWORD[((240-128))+rax]

        movdqa  xmm7,xmm6
        movdqa  xmm1,xmm6
        psrld   xmm7,3
        movdqa  xmm2,xmm6

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((64-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm3,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm3

        psrld   xmm3,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        psrld   xmm3,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm3
        pxor    xmm0,xmm1
        paddd   xmm5,xmm0
        movdqa  xmm7,xmm14

        movdqa  xmm2,xmm14

        psrld   xmm7,6
        movdqa  xmm1,xmm14
        pslld   xmm2,7
        movdqa  XMMWORD[(96-128)+rax],xmm5
        paddd   xmm5,xmm9

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[64+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm14

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm14
        pslld   xmm2,26-21
        pandn   xmm0,xmm8
        pand    xmm3,xmm15
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm10
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm10
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm11
        movdqa  xmm7,xmm10
        pslld   xmm2,10
        pxor    xmm3,xmm10


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm9,xmm11
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm9,xmm4
        paddd   xmm13,xmm5
        pxor    xmm7,xmm2

        paddd   xmm9,xmm5
        paddd   xmm9,xmm7
        movdqa  xmm5,XMMWORD[((128-128))+rax]
        paddd   xmm6,XMMWORD[((0-128))+rax]

        movdqa  xmm7,xmm5
        movdqa  xmm1,xmm5
        psrld   xmm7,3
        movdqa  xmm2,xmm5

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((80-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm4,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm4

        psrld   xmm4,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        psrld   xmm4,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm4
        pxor    xmm0,xmm1
        paddd   xmm6,xmm0
        movdqa  xmm7,xmm13

        movdqa  xmm2,xmm13

        psrld   xmm7,6
        movdqa  xmm1,xmm13
        pslld   xmm2,7
        movdqa  XMMWORD[(112-128)+rax],xmm6
        paddd   xmm6,xmm8

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm6,XMMWORD[96+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm13

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm13
        pslld   xmm2,26-21
        pandn   xmm0,xmm15
        pand    xmm4,xmm14
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm9
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm9
        psrld   xmm1,2
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm10
        movdqa  xmm7,xmm9
        pslld   xmm2,10
        pxor    xmm4,xmm9


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm6,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm8,xmm10
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm8,xmm3
        paddd   xmm12,xmm6
        pxor    xmm7,xmm2

        paddd   xmm8,xmm6
        paddd   xmm8,xmm7
        lea     rbp,[256+rbp]
        movdqa  xmm6,XMMWORD[((144-128))+rax]
        paddd   xmm5,XMMWORD[((16-128))+rax]

        movdqa  xmm7,xmm6
        movdqa  xmm1,xmm6
        psrld   xmm7,3
        movdqa  xmm2,xmm6

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((96-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm3,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm3

        psrld   xmm3,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        psrld   xmm3,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm3
        pxor    xmm0,xmm1
        paddd   xmm5,xmm0
        movdqa  xmm7,xmm12

        movdqa  xmm2,xmm12

        psrld   xmm7,6
        movdqa  xmm1,xmm12
        pslld   xmm2,7
        movdqa  XMMWORD[(128-128)+rax],xmm5
        paddd   xmm5,xmm15

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[((-128))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm12

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm12
        pslld   xmm2,26-21
        pandn   xmm0,xmm14
        pand    xmm3,xmm13
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm8
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm8
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm9
        movdqa  xmm7,xmm8
        pslld   xmm2,10
        pxor    xmm3,xmm8


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm15,xmm9
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm15,xmm4
        paddd   xmm11,xmm5
        pxor    xmm7,xmm2

        paddd   xmm15,xmm5
        paddd   xmm15,xmm7
        movdqa  xmm5,XMMWORD[((160-128))+rax]
        paddd   xmm6,XMMWORD[((32-128))+rax]

        movdqa  xmm7,xmm5
        movdqa  xmm1,xmm5
        psrld   xmm7,3
        movdqa  xmm2,xmm5

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((112-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm4,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm4

        psrld   xmm4,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        psrld   xmm4,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm4
        pxor    xmm0,xmm1
        paddd   xmm6,xmm0
        movdqa  xmm7,xmm11

        movdqa  xmm2,xmm11

        psrld   xmm7,6
        movdqa  xmm1,xmm11
        pslld   xmm2,7
        movdqa  XMMWORD[(144-128)+rax],xmm6
        paddd   xmm6,xmm14

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm6,XMMWORD[((-96))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm11

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm11
        pslld   xmm2,26-21
        pandn   xmm0,xmm13
        pand    xmm4,xmm12
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm15
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm15
        psrld   xmm1,2
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm8
        movdqa  xmm7,xmm15
        pslld   xmm2,10
        pxor    xmm4,xmm15


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm6,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm14,xmm8
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm14,xmm3
        paddd   xmm10,xmm6
        pxor    xmm7,xmm2

        paddd   xmm14,xmm6
        paddd   xmm14,xmm7
        movdqa  xmm6,XMMWORD[((176-128))+rax]
        paddd   xmm5,XMMWORD[((48-128))+rax]

        movdqa  xmm7,xmm6
        movdqa  xmm1,xmm6
        psrld   xmm7,3
        movdqa  xmm2,xmm6

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((128-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm3,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm3

        psrld   xmm3,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        psrld   xmm3,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm3
        pxor    xmm0,xmm1
        paddd   xmm5,xmm0
        movdqa  xmm7,xmm10

        movdqa  xmm2,xmm10

        psrld   xmm7,6
        movdqa  xmm1,xmm10
        pslld   xmm2,7
        movdqa  XMMWORD[(160-128)+rax],xmm5
        paddd   xmm5,xmm13

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[((-64))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm10

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm10
        pslld   xmm2,26-21
        pandn   xmm0,xmm12
        pand    xmm3,xmm11
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm14
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm14
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm15
        movdqa  xmm7,xmm14
        pslld   xmm2,10
        pxor    xmm3,xmm14


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm13,xmm15
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm13,xmm4
        paddd   xmm9,xmm5
        pxor    xmm7,xmm2

        paddd   xmm13,xmm5
        paddd   xmm13,xmm7
        movdqa  xmm5,XMMWORD[((192-128))+rax]
        paddd   xmm6,XMMWORD[((64-128))+rax]

        movdqa  xmm7,xmm5
        movdqa  xmm1,xmm5
        psrld   xmm7,3
        movdqa  xmm2,xmm5

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((144-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm4,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm4

        psrld   xmm4,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        psrld   xmm4,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm4
        pxor    xmm0,xmm1
        paddd   xmm6,xmm0
        movdqa  xmm7,xmm9

        movdqa  xmm2,xmm9

        psrld   xmm7,6
        movdqa  xmm1,xmm9
        pslld   xmm2,7
        movdqa  XMMWORD[(176-128)+rax],xmm6
        paddd   xmm6,xmm12

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm6,XMMWORD[((-32))+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm9

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm9
        pslld   xmm2,26-21
        pandn   xmm0,xmm11
        pand    xmm4,xmm10
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm13
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm13
        psrld   xmm1,2
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm14
        movdqa  xmm7,xmm13
        pslld   xmm2,10
        pxor    xmm4,xmm13


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm6,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm12,xmm14
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm12,xmm3
        paddd   xmm8,xmm6
        pxor    xmm7,xmm2

        paddd   xmm12,xmm6
        paddd   xmm12,xmm7
        movdqa  xmm6,XMMWORD[((208-128))+rax]
        paddd   xmm5,XMMWORD[((80-128))+rax]

        movdqa  xmm7,xmm6
        movdqa  xmm1,xmm6
        psrld   xmm7,3
        movdqa  xmm2,xmm6

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((160-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm3,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm3

        psrld   xmm3,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        psrld   xmm3,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm3
        pxor    xmm0,xmm1
        paddd   xmm5,xmm0
        movdqa  xmm7,xmm8

        movdqa  xmm2,xmm8

        psrld   xmm7,6
        movdqa  xmm1,xmm8
        pslld   xmm2,7
        movdqa  XMMWORD[(192-128)+rax],xmm5
        paddd   xmm5,xmm11

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm8

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm8
        pslld   xmm2,26-21
        pandn   xmm0,xmm10
        pand    xmm3,xmm9
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm12
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm12
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm13
        movdqa  xmm7,xmm12
        pslld   xmm2,10
        pxor    xmm3,xmm12


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm11,xmm13
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm11,xmm4
        paddd   xmm15,xmm5
        pxor    xmm7,xmm2

        paddd   xmm11,xmm5
        paddd   xmm11,xmm7
        movdqa  xmm5,XMMWORD[((224-128))+rax]
        paddd   xmm6,XMMWORD[((96-128))+rax]

        movdqa  xmm7,xmm5
        movdqa  xmm1,xmm5
        psrld   xmm7,3
        movdqa  xmm2,xmm5

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((176-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm4,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm4

        psrld   xmm4,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        psrld   xmm4,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm4
        pxor    xmm0,xmm1
        paddd   xmm6,xmm0
        movdqa  xmm7,xmm15

        movdqa  xmm2,xmm15

        psrld   xmm7,6
        movdqa  xmm1,xmm15
        pslld   xmm2,7
        movdqa  XMMWORD[(208-128)+rax],xmm6
        paddd   xmm6,xmm10

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm6,XMMWORD[32+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm15

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm15
        pslld   xmm2,26-21
        pandn   xmm0,xmm9
        pand    xmm4,xmm8
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm11
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm11
        psrld   xmm1,2
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm12
        movdqa  xmm7,xmm11
        pslld   xmm2,10
        pxor    xmm4,xmm11


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm6,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm10,xmm12
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm10,xmm3
        paddd   xmm14,xmm6
        pxor    xmm7,xmm2

        paddd   xmm10,xmm6
        paddd   xmm10,xmm7
        movdqa  xmm6,XMMWORD[((240-128))+rax]
        paddd   xmm5,XMMWORD[((112-128))+rax]

        movdqa  xmm7,xmm6
        movdqa  xmm1,xmm6
        psrld   xmm7,3
        movdqa  xmm2,xmm6

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((192-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm3,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm3

        psrld   xmm3,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        psrld   xmm3,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm3
        pxor    xmm0,xmm1
        paddd   xmm5,xmm0
        movdqa  xmm7,xmm14

        movdqa  xmm2,xmm14

        psrld   xmm7,6
        movdqa  xmm1,xmm14
        pslld   xmm2,7
        movdqa  XMMWORD[(224-128)+rax],xmm5
        paddd   xmm5,xmm9

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm5,XMMWORD[64+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm14

        pxor    xmm7,xmm2
        movdqa  xmm3,xmm14
        pslld   xmm2,26-21
        pandn   xmm0,xmm8
        pand    xmm3,xmm15
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm10
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm10
        psrld   xmm1,2
        paddd   xmm5,xmm7
        pxor    xmm0,xmm3
        movdqa  xmm3,xmm11
        movdqa  xmm7,xmm10
        pslld   xmm2,10
        pxor    xmm3,xmm10


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm5,xmm0
        pslld   xmm2,19-10
        pand    xmm4,xmm3
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm9,xmm11
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm9,xmm4
        paddd   xmm13,xmm5
        pxor    xmm7,xmm2

        paddd   xmm9,xmm5
        paddd   xmm9,xmm7
        movdqa  xmm5,XMMWORD[((0-128))+rax]
        paddd   xmm6,XMMWORD[((128-128))+rax]

        movdqa  xmm7,xmm5
        movdqa  xmm1,xmm5
        psrld   xmm7,3
        movdqa  xmm2,xmm5

        psrld   xmm1,7
        movdqa  xmm0,XMMWORD[((208-128))+rax]
        pslld   xmm2,14
        pxor    xmm7,xmm1
        psrld   xmm1,18-7
        movdqa  xmm4,xmm0
        pxor    xmm7,xmm2
        pslld   xmm2,25-14
        pxor    xmm7,xmm1
        psrld   xmm0,10
        movdqa  xmm1,xmm4

        psrld   xmm4,17
        pxor    xmm7,xmm2
        pslld   xmm1,13
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        psrld   xmm4,19-17
        pxor    xmm0,xmm1
        pslld   xmm1,15-13
        pxor    xmm0,xmm4
        pxor    xmm0,xmm1
        paddd   xmm6,xmm0
        movdqa  xmm7,xmm13

        movdqa  xmm2,xmm13

        psrld   xmm7,6
        movdqa  xmm1,xmm13
        pslld   xmm2,7
        movdqa  XMMWORD[(240-128)+rax],xmm6
        paddd   xmm6,xmm8

        psrld   xmm1,11
        pxor    xmm7,xmm2
        pslld   xmm2,21-7
        paddd   xmm6,XMMWORD[96+rbp]
        pxor    xmm7,xmm1

        psrld   xmm1,25-11
        movdqa  xmm0,xmm13

        pxor    xmm7,xmm2
        movdqa  xmm4,xmm13
        pslld   xmm2,26-21
        pandn   xmm0,xmm15
        pand    xmm4,xmm14
        pxor    xmm7,xmm1


        movdqa  xmm1,xmm9
        pxor    xmm7,xmm2
        movdqa  xmm2,xmm9
        psrld   xmm1,2
        paddd   xmm6,xmm7
        pxor    xmm0,xmm4
        movdqa  xmm4,xmm10
        movdqa  xmm7,xmm9
        pslld   xmm2,10
        pxor    xmm4,xmm9


        psrld   xmm7,13
        pxor    xmm1,xmm2
        paddd   xmm6,xmm0
        pslld   xmm2,19-10
        pand    xmm3,xmm4
        pxor    xmm1,xmm7


        psrld   xmm7,22-13
        pxor    xmm1,xmm2
        movdqa  xmm8,xmm10
        pslld   xmm2,30-19
        pxor    xmm7,xmm1
        pxor    xmm8,xmm3
        paddd   xmm12,xmm6
        pxor    xmm7,xmm2

        paddd   xmm8,xmm6
        paddd   xmm8,xmm7
        lea     rbp,[256+rbp]
        dec     ecx
        jnz     NEAR $L$oop_16_xx

        mov     ecx,1
        lea     rbp,[((K256+128))]

        movdqa  xmm7,XMMWORD[rbx]
        cmp     ecx,DWORD[rbx]
        pxor    xmm0,xmm0
        cmovge  r8,rbp
        cmp     ecx,DWORD[4+rbx]
        movdqa  xmm6,xmm7
        cmovge  r9,rbp
        cmp     ecx,DWORD[8+rbx]
        pcmpgtd xmm6,xmm0
        cmovge  r10,rbp
        cmp     ecx,DWORD[12+rbx]
        paddd   xmm7,xmm6
        cmovge  r11,rbp

        movdqu  xmm0,XMMWORD[((0-128))+rdi]
        pand    xmm8,xmm6
        movdqu  xmm1,XMMWORD[((32-128))+rdi]
        pand    xmm9,xmm6
        movdqu  xmm2,XMMWORD[((64-128))+rdi]
        pand    xmm10,xmm6
        movdqu  xmm5,XMMWORD[((96-128))+rdi]
        pand    xmm11,xmm6
        paddd   xmm8,xmm0
        movdqu  xmm0,XMMWORD[((128-128))+rdi]
        pand    xmm12,xmm6
        paddd   xmm9,xmm1
        movdqu  xmm1,XMMWORD[((160-128))+rdi]
        pand    xmm13,xmm6
        paddd   xmm10,xmm2
        movdqu  xmm2,XMMWORD[((192-128))+rdi]
        pand    xmm14,xmm6
        paddd   xmm11,xmm5
        movdqu  xmm5,XMMWORD[((224-128))+rdi]
        pand    xmm15,xmm6
        paddd   xmm12,xmm0
        paddd   xmm13,xmm1
        movdqu  XMMWORD[(0-128)+rdi],xmm8
        paddd   xmm14,xmm2
        movdqu  XMMWORD[(32-128)+rdi],xmm9
        paddd   xmm15,xmm5
        movdqu  XMMWORD[(64-128)+rdi],xmm10
        movdqu  XMMWORD[(96-128)+rdi],xmm11
        movdqu  XMMWORD[(128-128)+rdi],xmm12
        movdqu  XMMWORD[(160-128)+rdi],xmm13
        movdqu  XMMWORD[(192-128)+rdi],xmm14
        movdqu  XMMWORD[(224-128)+rdi],xmm15

        movdqa  XMMWORD[rbx],xmm7
        movdqa  xmm6,XMMWORD[$L$pbswap]
        dec     edx
        jnz     NEAR $L$oop

        mov     edx,DWORD[280+rsp]
        lea     rdi,[16+rdi]
        lea     rsi,[64+rsi]
        dec     edx
        jnz     NEAR $L$oop_grande

$L$done:
        mov     rax,QWORD[272+rsp]

        movaps  xmm6,XMMWORD[((-184))+rax]
        movaps  xmm7,XMMWORD[((-168))+rax]
        movaps  xmm8,XMMWORD[((-152))+rax]
        movaps  xmm9,XMMWORD[((-136))+rax]
        movaps  xmm10,XMMWORD[((-120))+rax]
        movaps  xmm11,XMMWORD[((-104))+rax]
        movaps  xmm12,XMMWORD[((-88))+rax]
        movaps  xmm13,XMMWORD[((-72))+rax]
        movaps  xmm14,XMMWORD[((-56))+rax]
        movaps  xmm15,XMMWORD[((-40))+rax]
        mov     rbp,QWORD[((-16))+rax]

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

        lea     rsp,[rax]

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

$L$SEH_end_sha256_multi_block:

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



_shaext_shortcut:
        mov     rax,rsp

        push    rbx

        push    rbp

        lea     rsp,[((-168))+rsp]
        movaps  XMMWORD[rsp],xmm6
        movaps  XMMWORD[16+rsp],xmm7
        movaps  XMMWORD[32+rsp],xmm8
        movaps  XMMWORD[48+rsp],xmm9
        movaps  XMMWORD[(-120)+rax],xmm10
        movaps  XMMWORD[(-104)+rax],xmm11
        movaps  XMMWORD[(-88)+rax],xmm12
        movaps  XMMWORD[(-72)+rax],xmm13
        movaps  XMMWORD[(-56)+rax],xmm14
        movaps  XMMWORD[(-40)+rax],xmm15
        sub     rsp,288
        shl     edx,1
        and     rsp,-256
        lea     rdi,[128+rdi]
        mov     QWORD[272+rsp],rax
$L$body_shaext:
        lea     rbx,[256+rsp]
        lea     rbp,[((K256_shaext+128))]

$L$oop_grande_shaext:
        mov     DWORD[280+rsp],edx
        xor     edx,edx
        mov     r8,QWORD[rsi]
        mov     ecx,DWORD[8+rsi]
        cmp     ecx,edx
        cmovg   edx,ecx
        test    ecx,ecx
        mov     DWORD[rbx],ecx
        cmovle  r8,rsp
        mov     r9,QWORD[16+rsi]
        mov     ecx,DWORD[24+rsi]
        cmp     ecx,edx
        cmovg   edx,ecx
        test    ecx,ecx
        mov     DWORD[4+rbx],ecx
        cmovle  r9,rsp
        test    edx,edx
        jz      NEAR $L$done_shaext

        movq    xmm12,QWORD[((0-128))+rdi]
        movq    xmm4,QWORD[((32-128))+rdi]
        movq    xmm13,QWORD[((64-128))+rdi]
        movq    xmm5,QWORD[((96-128))+rdi]
        movq    xmm8,QWORD[((128-128))+rdi]
        movq    xmm9,QWORD[((160-128))+rdi]
        movq    xmm10,QWORD[((192-128))+rdi]
        movq    xmm11,QWORD[((224-128))+rdi]

        punpckldq       xmm12,xmm4
        punpckldq       xmm13,xmm5
        punpckldq       xmm8,xmm9
        punpckldq       xmm10,xmm11
        movdqa  xmm3,XMMWORD[((K256_shaext-16))]

        movdqa  xmm14,xmm12
        movdqa  xmm15,xmm13
        punpcklqdq      xmm12,xmm8
        punpcklqdq      xmm13,xmm10
        punpckhqdq      xmm14,xmm8
        punpckhqdq      xmm15,xmm10

        pshufd  xmm12,xmm12,27
        pshufd  xmm13,xmm13,27
        pshufd  xmm14,xmm14,27
        pshufd  xmm15,xmm15,27
        jmp     NEAR $L$oop_shaext

ALIGN   32
$L$oop_shaext:
        movdqu  xmm4,XMMWORD[r8]
        movdqu  xmm8,XMMWORD[r9]
        movdqu  xmm5,XMMWORD[16+r8]
        movdqu  xmm9,XMMWORD[16+r9]
        movdqu  xmm6,XMMWORD[32+r8]
DB      102,15,56,0,227
        movdqu  xmm10,XMMWORD[32+r9]
DB      102,68,15,56,0,195
        movdqu  xmm7,XMMWORD[48+r8]
        lea     r8,[64+r8]
        movdqu  xmm11,XMMWORD[48+r9]
        lea     r9,[64+r9]

        movdqa  xmm0,XMMWORD[((0-128))+rbp]
DB      102,15,56,0,235
        paddd   xmm0,xmm4
        pxor    xmm4,xmm12
        movdqa  xmm1,xmm0
        movdqa  xmm2,XMMWORD[((0-128))+rbp]
DB      102,68,15,56,0,203
        paddd   xmm2,xmm8
        movdqa  XMMWORD[80+rsp],xmm13
DB      69,15,56,203,236
        pxor    xmm8,xmm14
        movdqa  xmm0,xmm2
        movdqa  XMMWORD[112+rsp],xmm15
DB      69,15,56,203,254
        pshufd  xmm0,xmm1,0x0e
        pxor    xmm4,xmm12
        movdqa  XMMWORD[64+rsp],xmm12
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        pxor    xmm8,xmm14
        movdqa  XMMWORD[96+rsp],xmm14
        movdqa  xmm1,XMMWORD[((16-128))+rbp]
        paddd   xmm1,xmm5
DB      102,15,56,0,243
DB      69,15,56,203,247

        movdqa  xmm0,xmm1
        movdqa  xmm2,XMMWORD[((16-128))+rbp]
        paddd   xmm2,xmm9
DB      69,15,56,203,236
        movdqa  xmm0,xmm2
        prefetcht0      [127+r8]
DB      102,15,56,0,251
DB      102,68,15,56,0,211
        prefetcht0      [127+r9]
DB      69,15,56,203,254
        pshufd  xmm0,xmm1,0x0e
DB      102,68,15,56,0,219
DB      15,56,204,229
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        movdqa  xmm1,XMMWORD[((32-128))+rbp]
        paddd   xmm1,xmm6
DB      69,15,56,203,247

        movdqa  xmm0,xmm1
        movdqa  xmm2,XMMWORD[((32-128))+rbp]
        paddd   xmm2,xmm10
DB      69,15,56,203,236
DB      69,15,56,204,193
        movdqa  xmm0,xmm2
        movdqa  xmm3,xmm7
DB      69,15,56,203,254
        pshufd  xmm0,xmm1,0x0e
DB      102,15,58,15,222,4
        paddd   xmm4,xmm3
        movdqa  xmm3,xmm11
DB      102,65,15,58,15,218,4
DB      15,56,204,238
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        movdqa  xmm1,XMMWORD[((48-128))+rbp]
        paddd   xmm1,xmm7
DB      69,15,56,203,247
DB      69,15,56,204,202

        movdqa  xmm0,xmm1
        movdqa  xmm2,XMMWORD[((48-128))+rbp]
        paddd   xmm8,xmm3
        paddd   xmm2,xmm11
DB      15,56,205,231
DB      69,15,56,203,236
        movdqa  xmm0,xmm2
        movdqa  xmm3,xmm4
DB      102,15,58,15,223,4
DB      69,15,56,203,254
DB      69,15,56,205,195
        pshufd  xmm0,xmm1,0x0e
        paddd   xmm5,xmm3
        movdqa  xmm3,xmm8
DB      102,65,15,58,15,219,4
DB      15,56,204,247
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        movdqa  xmm1,XMMWORD[((64-128))+rbp]
        paddd   xmm1,xmm4
DB      69,15,56,203,247
DB      69,15,56,204,211
        movdqa  xmm0,xmm1
        movdqa  xmm2,XMMWORD[((64-128))+rbp]
        paddd   xmm9,xmm3
        paddd   xmm2,xmm8
DB      15,56,205,236
DB      69,15,56,203,236
        movdqa  xmm0,xmm2
        movdqa  xmm3,xmm5
DB      102,15,58,15,220,4
DB      69,15,56,203,254
DB      69,15,56,205,200
        pshufd  xmm0,xmm1,0x0e
        paddd   xmm6,xmm3
        movdqa  xmm3,xmm9
DB      102,65,15,58,15,216,4
DB      15,56,204,252
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        movdqa  xmm1,XMMWORD[((80-128))+rbp]
        paddd   xmm1,xmm5
DB      69,15,56,203,247
DB      69,15,56,204,216
        movdqa  xmm0,xmm1
        movdqa  xmm2,XMMWORD[((80-128))+rbp]
        paddd   xmm10,xmm3
        paddd   xmm2,xmm9
DB      15,56,205,245
DB      69,15,56,203,236
        movdqa  xmm0,xmm2
        movdqa  xmm3,xmm6
DB      102,15,58,15,221,4
DB      69,15,56,203,254
DB      69,15,56,205,209
        pshufd  xmm0,xmm1,0x0e
        paddd   xmm7,xmm3
        movdqa  xmm3,xmm10
DB      102,65,15,58,15,217,4
DB      15,56,204,229
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        movdqa  xmm1,XMMWORD[((96-128))+rbp]
        paddd   xmm1,xmm6
DB      69,15,56,203,247
DB      69,15,56,204,193
        movdqa  xmm0,xmm1
        movdqa  xmm2,XMMWORD[((96-128))+rbp]
        paddd   xmm11,xmm3
        paddd   xmm2,xmm10
DB      15,56,205,254
DB      69,15,56,203,236
        movdqa  xmm0,xmm2
        movdqa  xmm3,xmm7
DB      102,15,58,15,222,4
DB      69,15,56,203,254
DB      69,15,56,205,218
        pshufd  xmm0,xmm1,0x0e
        paddd   xmm4,xmm3
        movdqa  xmm3,xmm11
DB      102,65,15,58,15,218,4
DB      15,56,204,238
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        movdqa  xmm1,XMMWORD[((112-128))+rbp]
        paddd   xmm1,xmm7
DB      69,15,56,203,247
DB      69,15,56,204,202
        movdqa  xmm0,xmm1
        movdqa  xmm2,XMMWORD[((112-128))+rbp]
        paddd   xmm8,xmm3
        paddd   xmm2,xmm11
DB      15,56,205,231
DB      69,15,56,203,236
        movdqa  xmm0,xmm2
        movdqa  xmm3,xmm4
DB      102,15,58,15,223,4
DB      69,15,56,203,254
DB      69,15,56,205,195
        pshufd  xmm0,xmm1,0x0e
        paddd   xmm5,xmm3
        movdqa  xmm3,xmm8
DB      102,65,15,58,15,219,4
DB      15,56,204,247
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        movdqa  xmm1,XMMWORD[((128-128))+rbp]
        paddd   xmm1,xmm4
DB      69,15,56,203,247
DB      69,15,56,204,211
        movdqa  xmm0,xmm1
        movdqa  xmm2,XMMWORD[((128-128))+rbp]
        paddd   xmm9,xmm3
        paddd   xmm2,xmm8
DB      15,56,205,236
DB      69,15,56,203,236
        movdqa  xmm0,xmm2
        movdqa  xmm3,xmm5
DB      102,15,58,15,220,4
DB      69,15,56,203,254
DB      69,15,56,205,200
        pshufd  xmm0,xmm1,0x0e
        paddd   xmm6,xmm3
        movdqa  xmm3,xmm9
DB      102,65,15,58,15,216,4
DB      15,56,204,252
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        movdqa  xmm1,XMMWORD[((144-128))+rbp]
        paddd   xmm1,xmm5
DB      69,15,56,203,247
DB      69,15,56,204,216
        movdqa  xmm0,xmm1
        movdqa  xmm2,XMMWORD[((144-128))+rbp]
        paddd   xmm10,xmm3
        paddd   xmm2,xmm9
DB      15,56,205,245
DB      69,15,56,203,236
        movdqa  xmm0,xmm2
        movdqa  xmm3,xmm6
DB      102,15,58,15,221,4
DB      69,15,56,203,254
DB      69,15,56,205,209
        pshufd  xmm0,xmm1,0x0e
        paddd   xmm7,xmm3
        movdqa  xmm3,xmm10
DB      102,65,15,58,15,217,4
DB      15,56,204,229
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        movdqa  xmm1,XMMWORD[((160-128))+rbp]
        paddd   xmm1,xmm6
DB      69,15,56,203,247
DB      69,15,56,204,193
        movdqa  xmm0,xmm1
        movdqa  xmm2,XMMWORD[((160-128))+rbp]
        paddd   xmm11,xmm3
        paddd   xmm2,xmm10
DB      15,56,205,254
DB      69,15,56,203,236
        movdqa  xmm0,xmm2
        movdqa  xmm3,xmm7
DB      102,15,58,15,222,4
DB      69,15,56,203,254
DB      69,15,56,205,218
        pshufd  xmm0,xmm1,0x0e
        paddd   xmm4,xmm3
        movdqa  xmm3,xmm11
DB      102,65,15,58,15,218,4
DB      15,56,204,238
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        movdqa  xmm1,XMMWORD[((176-128))+rbp]
        paddd   xmm1,xmm7
DB      69,15,56,203,247
DB      69,15,56,204,202
        movdqa  xmm0,xmm1
        movdqa  xmm2,XMMWORD[((176-128))+rbp]
        paddd   xmm8,xmm3
        paddd   xmm2,xmm11
DB      15,56,205,231
DB      69,15,56,203,236
        movdqa  xmm0,xmm2
        movdqa  xmm3,xmm4
DB      102,15,58,15,223,4
DB      69,15,56,203,254
DB      69,15,56,205,195
        pshufd  xmm0,xmm1,0x0e
        paddd   xmm5,xmm3
        movdqa  xmm3,xmm8
DB      102,65,15,58,15,219,4
DB      15,56,204,247
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        movdqa  xmm1,XMMWORD[((192-128))+rbp]
        paddd   xmm1,xmm4
DB      69,15,56,203,247
DB      69,15,56,204,211
        movdqa  xmm0,xmm1
        movdqa  xmm2,XMMWORD[((192-128))+rbp]
        paddd   xmm9,xmm3
        paddd   xmm2,xmm8
DB      15,56,205,236
DB      69,15,56,203,236
        movdqa  xmm0,xmm2
        movdqa  xmm3,xmm5
DB      102,15,58,15,220,4
DB      69,15,56,203,254
DB      69,15,56,205,200
        pshufd  xmm0,xmm1,0x0e
        paddd   xmm6,xmm3
        movdqa  xmm3,xmm9
DB      102,65,15,58,15,216,4
DB      15,56,204,252
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        movdqa  xmm1,XMMWORD[((208-128))+rbp]
        paddd   xmm1,xmm5
DB      69,15,56,203,247
DB      69,15,56,204,216
        movdqa  xmm0,xmm1
        movdqa  xmm2,XMMWORD[((208-128))+rbp]
        paddd   xmm10,xmm3
        paddd   xmm2,xmm9
DB      15,56,205,245
DB      69,15,56,203,236
        movdqa  xmm0,xmm2
        movdqa  xmm3,xmm6
DB      102,15,58,15,221,4
DB      69,15,56,203,254
DB      69,15,56,205,209
        pshufd  xmm0,xmm1,0x0e
        paddd   xmm7,xmm3
        movdqa  xmm3,xmm10
DB      102,65,15,58,15,217,4
        nop
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        movdqa  xmm1,XMMWORD[((224-128))+rbp]
        paddd   xmm1,xmm6
DB      69,15,56,203,247

        movdqa  xmm0,xmm1
        movdqa  xmm2,XMMWORD[((224-128))+rbp]
        paddd   xmm11,xmm3
        paddd   xmm2,xmm10
DB      15,56,205,254
        nop
DB      69,15,56,203,236
        movdqa  xmm0,xmm2
        mov     ecx,1
        pxor    xmm6,xmm6
DB      69,15,56,203,254
DB      69,15,56,205,218
        pshufd  xmm0,xmm1,0x0e
        movdqa  xmm1,XMMWORD[((240-128))+rbp]
        paddd   xmm1,xmm7
        movq    xmm7,QWORD[rbx]
        nop
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        movdqa  xmm2,XMMWORD[((240-128))+rbp]
        paddd   xmm2,xmm11
DB      69,15,56,203,247

        movdqa  xmm0,xmm1
        cmp     ecx,DWORD[rbx]
        cmovge  r8,rsp
        cmp     ecx,DWORD[4+rbx]
        cmovge  r9,rsp
        pshufd  xmm9,xmm7,0x00
DB      69,15,56,203,236
        movdqa  xmm0,xmm2
        pshufd  xmm10,xmm7,0x55
        movdqa  xmm11,xmm7
DB      69,15,56,203,254
        pshufd  xmm0,xmm1,0x0e
        pcmpgtd xmm9,xmm6
        pcmpgtd xmm10,xmm6
DB      69,15,56,203,229
        pshufd  xmm0,xmm2,0x0e
        pcmpgtd xmm11,xmm6
        movdqa  xmm3,XMMWORD[((K256_shaext-16))]
DB      69,15,56,203,247

        pand    xmm13,xmm9
        pand    xmm15,xmm10
        pand    xmm12,xmm9
        pand    xmm14,xmm10
        paddd   xmm11,xmm7

        paddd   xmm13,XMMWORD[80+rsp]
        paddd   xmm15,XMMWORD[112+rsp]
        paddd   xmm12,XMMWORD[64+rsp]
        paddd   xmm14,XMMWORD[96+rsp]

        movq    QWORD[rbx],xmm11
        dec     edx
        jnz     NEAR $L$oop_shaext

        mov     edx,DWORD[280+rsp]

        pshufd  xmm12,xmm12,27
        pshufd  xmm13,xmm13,27
        pshufd  xmm14,xmm14,27
        pshufd  xmm15,xmm15,27

        movdqa  xmm5,xmm12
        movdqa  xmm6,xmm13
        punpckldq       xmm12,xmm14
        punpckhdq       xmm5,xmm14
        punpckldq       xmm13,xmm15
        punpckhdq       xmm6,xmm15

        movq    QWORD[(0-128)+rdi],xmm12
        psrldq  xmm12,8
        movq    QWORD[(128-128)+rdi],xmm5
        psrldq  xmm5,8
        movq    QWORD[(32-128)+rdi],xmm12
        movq    QWORD[(160-128)+rdi],xmm5

        movq    QWORD[(64-128)+rdi],xmm13
        psrldq  xmm13,8
        movq    QWORD[(192-128)+rdi],xmm6
        psrldq  xmm6,8
        movq    QWORD[(96-128)+rdi],xmm13
        movq    QWORD[(224-128)+rdi],xmm6

        lea     rdi,[8+rdi]
        lea     rsi,[32+rsi]
        dec     edx
        jnz     NEAR $L$oop_grande_shaext

$L$done_shaext:

        movaps  xmm6,XMMWORD[((-184))+rax]
        movaps  xmm7,XMMWORD[((-168))+rax]
        movaps  xmm8,XMMWORD[((-152))+rax]
        movaps  xmm9,XMMWORD[((-136))+rax]
        movaps  xmm10,XMMWORD[((-120))+rax]
        movaps  xmm11,XMMWORD[((-104))+rax]
        movaps  xmm12,XMMWORD[((-88))+rax]
        movaps  xmm13,XMMWORD[((-72))+rax]
        movaps  xmm14,XMMWORD[((-56))+rax]
        movaps  xmm15,XMMWORD[((-40))+rax]
        mov     rbp,QWORD[((-16))+rax]

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

        lea     rsp,[rax]

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

$L$SEH_end_sha256_multi_block_shaext:
ALIGN   256
K256:
        DD      1116352408,1116352408,1116352408,1116352408
        DD      1116352408,1116352408,1116352408,1116352408
        DD      1899447441,1899447441,1899447441,1899447441
        DD      1899447441,1899447441,1899447441,1899447441
        DD      3049323471,3049323471,3049323471,3049323471
        DD      3049323471,3049323471,3049323471,3049323471
        DD      3921009573,3921009573,3921009573,3921009573
        DD      3921009573,3921009573,3921009573,3921009573
        DD      961987163,961987163,961987163,961987163
        DD      961987163,961987163,961987163,961987163
        DD      1508970993,1508970993,1508970993,1508970993
        DD      1508970993,1508970993,1508970993,1508970993
        DD      2453635748,2453635748,2453635748,2453635748
        DD      2453635748,2453635748,2453635748,2453635748
        DD      2870763221,2870763221,2870763221,2870763221
        DD      2870763221,2870763221,2870763221,2870763221
        DD      3624381080,3624381080,3624381080,3624381080
        DD      3624381080,3624381080,3624381080,3624381080
        DD      310598401,310598401,310598401,310598401
        DD      310598401,310598401,310598401,310598401
        DD      607225278,607225278,607225278,607225278
        DD      607225278,607225278,607225278,607225278
        DD      1426881987,1426881987,1426881987,1426881987
        DD      1426881987,1426881987,1426881987,1426881987
        DD      1925078388,1925078388,1925078388,1925078388
        DD      1925078388,1925078388,1925078388,1925078388
        DD      2162078206,2162078206,2162078206,2162078206
        DD      2162078206,2162078206,2162078206,2162078206
        DD      2614888103,2614888103,2614888103,2614888103
        DD      2614888103,2614888103,2614888103,2614888103
        DD      3248222580,3248222580,3248222580,3248222580
        DD      3248222580,3248222580,3248222580,3248222580
        DD      3835390401,3835390401,3835390401,3835390401
        DD      3835390401,3835390401,3835390401,3835390401
        DD      4022224774,4022224774,4022224774,4022224774
        DD      4022224774,4022224774,4022224774,4022224774
        DD      264347078,264347078,264347078,264347078
        DD      264347078,264347078,264347078,264347078
        DD      604807628,604807628,604807628,604807628
        DD      604807628,604807628,604807628,604807628
        DD      770255983,770255983,770255983,770255983
        DD      770255983,770255983,770255983,770255983
        DD      1249150122,1249150122,1249150122,1249150122
        DD      1249150122,1249150122,1249150122,1249150122
        DD      1555081692,1555081692,1555081692,1555081692
        DD      1555081692,1555081692,1555081692,1555081692
        DD      1996064986,1996064986,1996064986,1996064986
        DD      1996064986,1996064986,1996064986,1996064986
        DD      2554220882,2554220882,2554220882,2554220882
        DD      2554220882,2554220882,2554220882,2554220882
        DD      2821834349,2821834349,2821834349,2821834349
        DD      2821834349,2821834349,2821834349,2821834349
        DD      2952996808,2952996808,2952996808,2952996808
        DD      2952996808,2952996808,2952996808,2952996808
        DD      3210313671,3210313671,3210313671,3210313671
        DD      3210313671,3210313671,3210313671,3210313671
        DD      3336571891,3336571891,3336571891,3336571891
        DD      3336571891,3336571891,3336571891,3336571891
        DD      3584528711,3584528711,3584528711,3584528711
        DD      3584528711,3584528711,3584528711,3584528711
        DD      113926993,113926993,113926993,113926993
        DD      113926993,113926993,113926993,113926993
        DD      338241895,338241895,338241895,338241895
        DD      338241895,338241895,338241895,338241895
        DD      666307205,666307205,666307205,666307205
        DD      666307205,666307205,666307205,666307205
        DD      773529912,773529912,773529912,773529912
        DD      773529912,773529912,773529912,773529912
        DD      1294757372,1294757372,1294757372,1294757372
        DD      1294757372,1294757372,1294757372,1294757372
        DD      1396182291,1396182291,1396182291,1396182291
        DD      1396182291,1396182291,1396182291,1396182291
        DD      1695183700,1695183700,1695183700,1695183700
        DD      1695183700,1695183700,1695183700,1695183700
        DD      1986661051,1986661051,1986661051,1986661051
        DD      1986661051,1986661051,1986661051,1986661051
        DD      2177026350,2177026350,2177026350,2177026350
        DD      2177026350,2177026350,2177026350,2177026350
        DD      2456956037,2456956037,2456956037,2456956037
        DD      2456956037,2456956037,2456956037,2456956037
        DD      2730485921,2730485921,2730485921,2730485921
        DD      2730485921,2730485921,2730485921,2730485921
        DD      2820302411,2820302411,2820302411,2820302411
        DD      2820302411,2820302411,2820302411,2820302411
        DD      3259730800,3259730800,3259730800,3259730800
        DD      3259730800,3259730800,3259730800,3259730800
        DD      3345764771,3345764771,3345764771,3345764771
        DD      3345764771,3345764771,3345764771,3345764771
        DD      3516065817,3516065817,3516065817,3516065817
        DD      3516065817,3516065817,3516065817,3516065817
        DD      3600352804,3600352804,3600352804,3600352804
        DD      3600352804,3600352804,3600352804,3600352804
        DD      4094571909,4094571909,4094571909,4094571909
        DD      4094571909,4094571909,4094571909,4094571909
        DD      275423344,275423344,275423344,275423344
        DD      275423344,275423344,275423344,275423344
        DD      430227734,430227734,430227734,430227734
        DD      430227734,430227734,430227734,430227734
        DD      506948616,506948616,506948616,506948616
        DD      506948616,506948616,506948616,506948616
        DD      659060556,659060556,659060556,659060556
        DD      659060556,659060556,659060556,659060556
        DD      883997877,883997877,883997877,883997877
        DD      883997877,883997877,883997877,883997877
        DD      958139571,958139571,958139571,958139571
        DD      958139571,958139571,958139571,958139571
        DD      1322822218,1322822218,1322822218,1322822218
        DD      1322822218,1322822218,1322822218,1322822218
        DD      1537002063,1537002063,1537002063,1537002063
        DD      1537002063,1537002063,1537002063,1537002063
        DD      1747873779,1747873779,1747873779,1747873779
        DD      1747873779,1747873779,1747873779,1747873779
        DD      1955562222,1955562222,1955562222,1955562222
        DD      1955562222,1955562222,1955562222,1955562222
        DD      2024104815,2024104815,2024104815,2024104815
        DD      2024104815,2024104815,2024104815,2024104815
        DD      2227730452,2227730452,2227730452,2227730452
        DD      2227730452,2227730452,2227730452,2227730452
        DD      2361852424,2361852424,2361852424,2361852424
        DD      2361852424,2361852424,2361852424,2361852424
        DD      2428436474,2428436474,2428436474,2428436474
        DD      2428436474,2428436474,2428436474,2428436474
        DD      2756734187,2756734187,2756734187,2756734187
        DD      2756734187,2756734187,2756734187,2756734187
        DD      3204031479,3204031479,3204031479,3204031479
        DD      3204031479,3204031479,3204031479,3204031479
        DD      3329325298,3329325298,3329325298,3329325298
        DD      3329325298,3329325298,3329325298,3329325298
$L$pbswap:
        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
        DD      0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
K256_shaext:
        DD      0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
        DD      0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
        DD      0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
        DD      0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
        DD      0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
        DD      0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
        DD      0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
        DD      0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
        DD      0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
        DD      0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
        DD      0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
        DD      0xd192e819,0xd6990624,0xf40e3585,0x106aa070
        DD      0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
        DD      0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
        DD      0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
        DD      0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
DB      83,72,65,50,53,54,32,109,117,108,116,105,45,98,108,111
DB      99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114
DB      32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71
DB      65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112
DB      101,110,115,115,108,46,111,114,103,62,0
EXTERN  __imp_RtlVirtualUnwind

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

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

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

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

        mov     rax,QWORD[152+r8]

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

        mov     rax,QWORD[272+rax]

        mov     rbx,QWORD[((-8))+rax]
        mov     rbp,QWORD[((-16))+rax]
        mov     QWORD[144+r8],rbx
        mov     QWORD[160+r8],rbp

        lea     rsi,[((-24-160))+rax]
        lea     rdi,[512+r8]
        mov     ecx,20
        DD      0xa548f3fc

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

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

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

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

section .pdata rdata align=4
ALIGN   4
        DD      $L$SEH_begin_sha256_multi_block wrt ..imagebase
        DD      $L$SEH_end_sha256_multi_block wrt ..imagebase
        DD      $L$SEH_info_sha256_multi_block wrt ..imagebase
        DD      $L$SEH_begin_sha256_multi_block_shaext wrt ..imagebase
        DD      $L$SEH_end_sha256_multi_block_shaext wrt ..imagebase
        DD      $L$SEH_info_sha256_multi_block_shaext wrt ..imagebase
section .xdata rdata align=8
ALIGN   8
$L$SEH_info_sha256_multi_block:
DB      9,0,0,0
        DD      se_handler wrt ..imagebase
        DD      $L$body wrt ..imagebase,$L$epilogue wrt ..imagebase
$L$SEH_info_sha256_multi_block_shaext:
DB      9,0,0,0
        DD      se_handler wrt ..imagebase
        DD      $L$body_shaext wrt ..imagebase,$L$epilogue_shaext wrt ..imagebase
