# 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

.text



.globl  sha256_multi_block
.type   sha256_multi_block,@function
.align  32
sha256_multi_block:
.cfi_startproc
        movq    OPENSSL_ia32cap_P+4(%rip),%rcx
        btq     $61,%rcx
        jc      _shaext_shortcut
        movq    %rsp,%rax
.cfi_def_cfa_register   %rax
        pushq   %rbx
.cfi_offset     %rbx,-16
        pushq   %rbp
.cfi_offset     %rbp,-24
        subq    $288,%rsp
        andq    $-256,%rsp
        movq    %rax,272(%rsp)
.cfi_escape     0x0f,0x06,0x77,0x90,0x02,0x06,0x23,0x08
.Lbody:
        leaq    K256+128(%rip),%rbp
        leaq    256(%rsp),%rbx
        leaq    128(%rdi),%rdi

.Loop_grande:
        movl    %edx,280(%rsp)
        xorl    %edx,%edx
        movq    0(%rsi),%r8
        movl    8(%rsi),%ecx
        cmpl    %edx,%ecx
        cmovgl  %ecx,%edx
        testl   %ecx,%ecx
        movl    %ecx,0(%rbx)
        cmovleq %rbp,%r8
        movq    16(%rsi),%r9
        movl    24(%rsi),%ecx
        cmpl    %edx,%ecx
        cmovgl  %ecx,%edx
        testl   %ecx,%ecx
        movl    %ecx,4(%rbx)
        cmovleq %rbp,%r9
        movq    32(%rsi),%r10
        movl    40(%rsi),%ecx
        cmpl    %edx,%ecx
        cmovgl  %ecx,%edx
        testl   %ecx,%ecx
        movl    %ecx,8(%rbx)
        cmovleq %rbp,%r10
        movq    48(%rsi),%r11
        movl    56(%rsi),%ecx
        cmpl    %edx,%ecx
        cmovgl  %ecx,%edx
        testl   %ecx,%ecx
        movl    %ecx,12(%rbx)
        cmovleq %rbp,%r11
        testl   %edx,%edx
        jz      .Ldone

        movdqu  0-128(%rdi),%xmm8
        leaq    128(%rsp),%rax
        movdqu  32-128(%rdi),%xmm9
        movdqu  64-128(%rdi),%xmm10
        movdqu  96-128(%rdi),%xmm11
        movdqu  128-128(%rdi),%xmm12
        movdqu  160-128(%rdi),%xmm13
        movdqu  192-128(%rdi),%xmm14
        movdqu  224-128(%rdi),%xmm15
        movdqu  .Lpbswap(%rip),%xmm6
        jmp     .Loop

.align  32
.Loop:
        movdqa  %xmm10,%xmm4
        pxor    %xmm9,%xmm4
        movd    0(%r8),%xmm5
        movd    0(%r9),%xmm0
        movd    0(%r10),%xmm1
        movd    0(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm12,%xmm7
.byte   102,15,56,0,238
        movdqa  %xmm12,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm12,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,0-128(%rax)
        paddd   %xmm15,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -128(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm12,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm15
        paddd   %xmm7,%xmm15
        movd    4(%r8),%xmm5
        movd    4(%r9),%xmm0
        movd    4(%r10),%xmm1
        movd    4(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm11,%xmm7

        movdqa  %xmm11,%xmm2
.byte   102,15,56,0,238
        psrld   $6,%xmm7
        movdqa  %xmm11,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,16-128(%rax)
        paddd   %xmm14,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -96(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm11,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm14
        paddd   %xmm7,%xmm14
        movd    8(%r8),%xmm5
        movd    8(%r9),%xmm0
        movd    8(%r10),%xmm1
        movd    8(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm10,%xmm7
.byte   102,15,56,0,238
        movdqa  %xmm10,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm10,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,32-128(%rax)
        paddd   %xmm13,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -64(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm10,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm13
        paddd   %xmm7,%xmm13
        movd    12(%r8),%xmm5
        movd    12(%r9),%xmm0
        movd    12(%r10),%xmm1
        movd    12(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm9,%xmm7

        movdqa  %xmm9,%xmm2
.byte   102,15,56,0,238
        psrld   $6,%xmm7
        movdqa  %xmm9,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,48-128(%rax)
        paddd   %xmm12,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -32(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm9,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm12
        paddd   %xmm7,%xmm12
        movd    16(%r8),%xmm5
        movd    16(%r9),%xmm0
        movd    16(%r10),%xmm1
        movd    16(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm8,%xmm7
.byte   102,15,56,0,238
        movdqa  %xmm8,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm8,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,64-128(%rax)
        paddd   %xmm11,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   0(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm8,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm11
        paddd   %xmm7,%xmm11
        movd    20(%r8),%xmm5
        movd    20(%r9),%xmm0
        movd    20(%r10),%xmm1
        movd    20(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm15,%xmm7

        movdqa  %xmm15,%xmm2
.byte   102,15,56,0,238
        psrld   $6,%xmm7
        movdqa  %xmm15,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,80-128(%rax)
        paddd   %xmm10,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   32(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm15,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm10
        paddd   %xmm7,%xmm10
        movd    24(%r8),%xmm5
        movd    24(%r9),%xmm0
        movd    24(%r10),%xmm1
        movd    24(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm14,%xmm7
.byte   102,15,56,0,238
        movdqa  %xmm14,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm14,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,96-128(%rax)
        paddd   %xmm9,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   64(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm14,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm9
        paddd   %xmm7,%xmm9
        movd    28(%r8),%xmm5
        movd    28(%r9),%xmm0
        movd    28(%r10),%xmm1
        movd    28(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm13,%xmm7

        movdqa  %xmm13,%xmm2
.byte   102,15,56,0,238
        psrld   $6,%xmm7
        movdqa  %xmm13,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,112-128(%rax)
        paddd   %xmm8,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   96(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm13,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm8
        paddd   %xmm7,%xmm8
        leaq    256(%rbp),%rbp
        movd    32(%r8),%xmm5
        movd    32(%r9),%xmm0
        movd    32(%r10),%xmm1
        movd    32(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm12,%xmm7
.byte   102,15,56,0,238
        movdqa  %xmm12,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm12,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,128-128(%rax)
        paddd   %xmm15,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -128(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm12,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm15
        paddd   %xmm7,%xmm15
        movd    36(%r8),%xmm5
        movd    36(%r9),%xmm0
        movd    36(%r10),%xmm1
        movd    36(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm11,%xmm7

        movdqa  %xmm11,%xmm2
.byte   102,15,56,0,238
        psrld   $6,%xmm7
        movdqa  %xmm11,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,144-128(%rax)
        paddd   %xmm14,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -96(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm11,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm14
        paddd   %xmm7,%xmm14
        movd    40(%r8),%xmm5
        movd    40(%r9),%xmm0
        movd    40(%r10),%xmm1
        movd    40(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm10,%xmm7
.byte   102,15,56,0,238
        movdqa  %xmm10,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm10,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,160-128(%rax)
        paddd   %xmm13,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -64(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm10,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm13
        paddd   %xmm7,%xmm13
        movd    44(%r8),%xmm5
        movd    44(%r9),%xmm0
        movd    44(%r10),%xmm1
        movd    44(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm9,%xmm7

        movdqa  %xmm9,%xmm2
.byte   102,15,56,0,238
        psrld   $6,%xmm7
        movdqa  %xmm9,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,176-128(%rax)
        paddd   %xmm12,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -32(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm9,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm12
        paddd   %xmm7,%xmm12
        movd    48(%r8),%xmm5
        movd    48(%r9),%xmm0
        movd    48(%r10),%xmm1
        movd    48(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm8,%xmm7
.byte   102,15,56,0,238
        movdqa  %xmm8,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm8,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,192-128(%rax)
        paddd   %xmm11,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   0(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm8,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm11
        paddd   %xmm7,%xmm11
        movd    52(%r8),%xmm5
        movd    52(%r9),%xmm0
        movd    52(%r10),%xmm1
        movd    52(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm15,%xmm7

        movdqa  %xmm15,%xmm2
.byte   102,15,56,0,238
        psrld   $6,%xmm7
        movdqa  %xmm15,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,208-128(%rax)
        paddd   %xmm10,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   32(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm15,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm10
        paddd   %xmm7,%xmm10
        movd    56(%r8),%xmm5
        movd    56(%r9),%xmm0
        movd    56(%r10),%xmm1
        movd    56(%r11),%xmm2
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm14,%xmm7
.byte   102,15,56,0,238
        movdqa  %xmm14,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm14,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,224-128(%rax)
        paddd   %xmm9,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   64(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm14,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm9
        paddd   %xmm7,%xmm9
        movd    60(%r8),%xmm5
        leaq    64(%r8),%r8
        movd    60(%r9),%xmm0
        leaq    64(%r9),%r9
        movd    60(%r10),%xmm1
        leaq    64(%r10),%r10
        movd    60(%r11),%xmm2
        leaq    64(%r11),%r11
        punpckldq       %xmm1,%xmm5
        punpckldq       %xmm2,%xmm0
        punpckldq       %xmm0,%xmm5
        movdqa  %xmm13,%xmm7

        movdqa  %xmm13,%xmm2
.byte   102,15,56,0,238
        psrld   $6,%xmm7
        movdqa  %xmm13,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,240-128(%rax)
        paddd   %xmm8,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   96(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm13,%xmm0
        prefetcht0      63(%r8)
        pxor    %xmm2,%xmm7
        movdqa  %xmm13,%xmm4
        pslld   $26-21,%xmm2
        pandn   %xmm15,%xmm0
        pand    %xmm14,%xmm4
        pxor    %xmm1,%xmm7

        prefetcht0      63(%r9)
        movdqa  %xmm9,%xmm1
        pxor    %xmm2,%xmm7
        movdqa  %xmm9,%xmm2
        psrld   $2,%xmm1
        paddd   %xmm7,%xmm5
        pxor    %xmm4,%xmm0
        movdqa  %xmm10,%xmm4
        movdqa  %xmm9,%xmm7
        pslld   $10,%xmm2
        pxor    %xmm9,%xmm4

        prefetcht0      63(%r10)
        psrld   $13,%xmm7
        pxor    %xmm2,%xmm1
        paddd   %xmm0,%xmm5
        pslld   $19-10,%xmm2
        pand    %xmm4,%xmm3
        pxor    %xmm7,%xmm1

        prefetcht0      63(%r11)
        psrld   $22-13,%xmm7
        pxor    %xmm2,%xmm1
        movdqa  %xmm10,%xmm8
        pslld   $30-19,%xmm2
        pxor    %xmm1,%xmm7
        pxor    %xmm3,%xmm8
        paddd   %xmm5,%xmm12
        pxor    %xmm2,%xmm7

        paddd   %xmm5,%xmm8
        paddd   %xmm7,%xmm8
        leaq    256(%rbp),%rbp
        movdqu  0-128(%rax),%xmm5
        movl    $3,%ecx
        jmp     .Loop_16_xx
.align  32
.Loop_16_xx:
        movdqa  16-128(%rax),%xmm6
        paddd   144-128(%rax),%xmm5

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

        psrld   $7,%xmm1
        movdqa  224-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm3
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm3,%xmm1

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

        movdqa  %xmm12,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm12,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,0-128(%rax)
        paddd   %xmm15,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -128(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm12,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm15
        paddd   %xmm7,%xmm15
        movdqa  32-128(%rax),%xmm5
        paddd   160-128(%rax),%xmm6

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

        psrld   $7,%xmm1
        movdqa  240-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm4
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm4,%xmm1

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

        movdqa  %xmm11,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm11,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm6,16-128(%rax)
        paddd   %xmm14,%xmm6

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -96(%rbp),%xmm6
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm11,%xmm0

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


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


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


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

        paddd   %xmm6,%xmm14
        paddd   %xmm7,%xmm14
        movdqa  48-128(%rax),%xmm6
        paddd   176-128(%rax),%xmm5

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

        psrld   $7,%xmm1
        movdqa  0-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm3
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm3,%xmm1

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

        movdqa  %xmm10,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm10,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,32-128(%rax)
        paddd   %xmm13,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -64(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm10,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm13
        paddd   %xmm7,%xmm13
        movdqa  64-128(%rax),%xmm5
        paddd   192-128(%rax),%xmm6

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

        psrld   $7,%xmm1
        movdqa  16-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm4
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm4,%xmm1

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

        movdqa  %xmm9,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm9,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm6,48-128(%rax)
        paddd   %xmm12,%xmm6

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -32(%rbp),%xmm6
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm9,%xmm0

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


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


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


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

        paddd   %xmm6,%xmm12
        paddd   %xmm7,%xmm12
        movdqa  80-128(%rax),%xmm6
        paddd   208-128(%rax),%xmm5

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

        psrld   $7,%xmm1
        movdqa  32-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm3
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm3,%xmm1

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

        movdqa  %xmm8,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm8,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,64-128(%rax)
        paddd   %xmm11,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   0(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm8,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm11
        paddd   %xmm7,%xmm11
        movdqa  96-128(%rax),%xmm5
        paddd   224-128(%rax),%xmm6

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

        psrld   $7,%xmm1
        movdqa  48-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm4
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm4,%xmm1

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

        movdqa  %xmm15,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm15,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm6,80-128(%rax)
        paddd   %xmm10,%xmm6

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   32(%rbp),%xmm6
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm15,%xmm0

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


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


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


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

        paddd   %xmm6,%xmm10
        paddd   %xmm7,%xmm10
        movdqa  112-128(%rax),%xmm6
        paddd   240-128(%rax),%xmm5

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

        psrld   $7,%xmm1
        movdqa  64-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm3
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm3,%xmm1

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

        movdqa  %xmm14,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm14,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,96-128(%rax)
        paddd   %xmm9,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   64(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm14,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm9
        paddd   %xmm7,%xmm9
        movdqa  128-128(%rax),%xmm5
        paddd   0-128(%rax),%xmm6

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

        psrld   $7,%xmm1
        movdqa  80-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm4
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm4,%xmm1

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

        movdqa  %xmm13,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm13,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm6,112-128(%rax)
        paddd   %xmm8,%xmm6

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   96(%rbp),%xmm6
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm13,%xmm0

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


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


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


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

        paddd   %xmm6,%xmm8
        paddd   %xmm7,%xmm8
        leaq    256(%rbp),%rbp
        movdqa  144-128(%rax),%xmm6
        paddd   16-128(%rax),%xmm5

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

        psrld   $7,%xmm1
        movdqa  96-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm3
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm3,%xmm1

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

        movdqa  %xmm12,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm12,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,128-128(%rax)
        paddd   %xmm15,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -128(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm12,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm15
        paddd   %xmm7,%xmm15
        movdqa  160-128(%rax),%xmm5
        paddd   32-128(%rax),%xmm6

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

        psrld   $7,%xmm1
        movdqa  112-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm4
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm4,%xmm1

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

        movdqa  %xmm11,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm11,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm6,144-128(%rax)
        paddd   %xmm14,%xmm6

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -96(%rbp),%xmm6
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm11,%xmm0

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


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


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


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

        paddd   %xmm6,%xmm14
        paddd   %xmm7,%xmm14
        movdqa  176-128(%rax),%xmm6
        paddd   48-128(%rax),%xmm5

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

        psrld   $7,%xmm1
        movdqa  128-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm3
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm3,%xmm1

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

        movdqa  %xmm10,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm10,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,160-128(%rax)
        paddd   %xmm13,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -64(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm10,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm13
        paddd   %xmm7,%xmm13
        movdqa  192-128(%rax),%xmm5
        paddd   64-128(%rax),%xmm6

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

        psrld   $7,%xmm1
        movdqa  144-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm4
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm4,%xmm1

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

        movdqa  %xmm9,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm9,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm6,176-128(%rax)
        paddd   %xmm12,%xmm6

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   -32(%rbp),%xmm6
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm9,%xmm0

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


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


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


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

        paddd   %xmm6,%xmm12
        paddd   %xmm7,%xmm12
        movdqa  208-128(%rax),%xmm6
        paddd   80-128(%rax),%xmm5

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

        psrld   $7,%xmm1
        movdqa  160-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm3
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm3,%xmm1

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

        movdqa  %xmm8,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm8,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,192-128(%rax)
        paddd   %xmm11,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   0(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm8,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm11
        paddd   %xmm7,%xmm11
        movdqa  224-128(%rax),%xmm5
        paddd   96-128(%rax),%xmm6

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

        psrld   $7,%xmm1
        movdqa  176-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm4
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm4,%xmm1

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

        movdqa  %xmm15,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm15,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm6,208-128(%rax)
        paddd   %xmm10,%xmm6

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   32(%rbp),%xmm6
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm15,%xmm0

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


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


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


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

        paddd   %xmm6,%xmm10
        paddd   %xmm7,%xmm10
        movdqa  240-128(%rax),%xmm6
        paddd   112-128(%rax),%xmm5

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

        psrld   $7,%xmm1
        movdqa  192-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm3
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm3,%xmm1

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

        movdqa  %xmm14,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm14,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm5,224-128(%rax)
        paddd   %xmm9,%xmm5

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   64(%rbp),%xmm5
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm14,%xmm0

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


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


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


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

        paddd   %xmm5,%xmm9
        paddd   %xmm7,%xmm9
        movdqa  0-128(%rax),%xmm5
        paddd   128-128(%rax),%xmm6

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

        psrld   $7,%xmm1
        movdqa  208-128(%rax),%xmm0
        pslld   $14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $18-7,%xmm1
        movdqa  %xmm0,%xmm4
        pxor    %xmm2,%xmm7
        pslld   $25-14,%xmm2
        pxor    %xmm1,%xmm7
        psrld   $10,%xmm0
        movdqa  %xmm4,%xmm1

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

        movdqa  %xmm13,%xmm2

        psrld   $6,%xmm7
        movdqa  %xmm13,%xmm1
        pslld   $7,%xmm2
        movdqa  %xmm6,240-128(%rax)
        paddd   %xmm8,%xmm6

        psrld   $11,%xmm1
        pxor    %xmm2,%xmm7
        pslld   $21-7,%xmm2
        paddd   96(%rbp),%xmm6
        pxor    %xmm1,%xmm7

        psrld   $25-11,%xmm1
        movdqa  %xmm13,%xmm0

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


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


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


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

        paddd   %xmm6,%xmm8
        paddd   %xmm7,%xmm8
        leaq    256(%rbp),%rbp
        decl    %ecx
        jnz     .Loop_16_xx

        movl    $1,%ecx
        leaq    K256+128(%rip),%rbp

        movdqa  (%rbx),%xmm7
        cmpl    0(%rbx),%ecx
        pxor    %xmm0,%xmm0
        cmovgeq %rbp,%r8
        cmpl    4(%rbx),%ecx
        movdqa  %xmm7,%xmm6
        cmovgeq %rbp,%r9
        cmpl    8(%rbx),%ecx
        pcmpgtd %xmm0,%xmm6
        cmovgeq %rbp,%r10
        cmpl    12(%rbx),%ecx
        paddd   %xmm6,%xmm7
        cmovgeq %rbp,%r11

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

        movdqa  %xmm7,(%rbx)
        movdqa  .Lpbswap(%rip),%xmm6
        decl    %edx
        jnz     .Loop

        movl    280(%rsp),%edx
        leaq    16(%rdi),%rdi
        leaq    64(%rsi),%rsi
        decl    %edx
        jnz     .Loop_grande

.Ldone:
        movq    272(%rsp),%rax
.cfi_def_cfa    %rax,8
        movq    -16(%rax),%rbp
.cfi_restore    %rbp
        movq    -8(%rax),%rbx
.cfi_restore    %rbx
        leaq    (%rax),%rsp
.cfi_def_cfa_register   %rsp
.Lepilogue:
        .byte   0xf3,0xc3
.cfi_endproc
.size   sha256_multi_block,.-sha256_multi_block
.type   sha256_multi_block_shaext,@function
.align  32
sha256_multi_block_shaext:
.cfi_startproc
_shaext_shortcut:
        movq    %rsp,%rax
.cfi_def_cfa_register   %rax
        pushq   %rbx
.cfi_offset     %rbx,-16
        pushq   %rbp
.cfi_offset     %rbp,-24
        subq    $288,%rsp
        shll    $1,%edx
        andq    $-256,%rsp
        leaq    128(%rdi),%rdi
        movq    %rax,272(%rsp)
.Lbody_shaext:
        leaq    256(%rsp),%rbx
        leaq    K256_shaext+128(%rip),%rbp

.Loop_grande_shaext:
        movl    %edx,280(%rsp)
        xorl    %edx,%edx
        movq    0(%rsi),%r8
        movl    8(%rsi),%ecx
        cmpl    %edx,%ecx
        cmovgl  %ecx,%edx
        testl   %ecx,%ecx
        movl    %ecx,0(%rbx)
        cmovleq %rsp,%r8
        movq    16(%rsi),%r9
        movl    24(%rsi),%ecx
        cmpl    %edx,%ecx
        cmovgl  %ecx,%edx
        testl   %ecx,%ecx
        movl    %ecx,4(%rbx)
        cmovleq %rsp,%r9
        testl   %edx,%edx
        jz      .Ldone_shaext

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

        punpckldq       %xmm4,%xmm12
        punpckldq       %xmm5,%xmm13
        punpckldq       %xmm9,%xmm8
        punpckldq       %xmm11,%xmm10
        movdqa  K256_shaext-16(%rip),%xmm3

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

        pshufd  $27,%xmm12,%xmm12
        pshufd  $27,%xmm13,%xmm13
        pshufd  $27,%xmm14,%xmm14
        pshufd  $27,%xmm15,%xmm15
        jmp     .Loop_shaext

.align  32
.Loop_shaext:
        movdqu  0(%r8),%xmm4
        movdqu  0(%r9),%xmm8
        movdqu  16(%r8),%xmm5
        movdqu  16(%r9),%xmm9
        movdqu  32(%r8),%xmm6
.byte   102,15,56,0,227
        movdqu  32(%r9),%xmm10
.byte   102,68,15,56,0,195
        movdqu  48(%r8),%xmm7
        leaq    64(%r8),%r8
        movdqu  48(%r9),%xmm11
        leaq    64(%r9),%r9

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

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

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

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

        movdqa  %xmm1,%xmm0
        movdqa  224-128(%rbp),%xmm2
        paddd   %xmm3,%xmm11
        paddd   %xmm10,%xmm2
.byte   15,56,205,254
        nop
.byte   69,15,56,203,236
        movdqa  %xmm2,%xmm0
        movl    $1,%ecx
        pxor    %xmm6,%xmm6
.byte   69,15,56,203,254
.byte   69,15,56,205,218
        pshufd  $0x0e,%xmm1,%xmm0
        movdqa  240-128(%rbp),%xmm1
        paddd   %xmm7,%xmm1
        movq    (%rbx),%xmm7
        nop
.byte   69,15,56,203,229
        pshufd  $0x0e,%xmm2,%xmm0
        movdqa  240-128(%rbp),%xmm2
        paddd   %xmm11,%xmm2
.byte   69,15,56,203,247

        movdqa  %xmm1,%xmm0
        cmpl    0(%rbx),%ecx
        cmovgeq %rsp,%r8
        cmpl    4(%rbx),%ecx
        cmovgeq %rsp,%r9
        pshufd  $0x00,%xmm7,%xmm9
.byte   69,15,56,203,236
        movdqa  %xmm2,%xmm0
        pshufd  $0x55,%xmm7,%xmm10
        movdqa  %xmm7,%xmm11
.byte   69,15,56,203,254
        pshufd  $0x0e,%xmm1,%xmm0
        pcmpgtd %xmm6,%xmm9
        pcmpgtd %xmm6,%xmm10
.byte   69,15,56,203,229
        pshufd  $0x0e,%xmm2,%xmm0
        pcmpgtd %xmm6,%xmm11
        movdqa  K256_shaext-16(%rip),%xmm3
.byte   69,15,56,203,247

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

        paddd   80(%rsp),%xmm13
        paddd   112(%rsp),%xmm15
        paddd   64(%rsp),%xmm12
        paddd   96(%rsp),%xmm14

        movq    %xmm11,(%rbx)
        decl    %edx
        jnz     .Loop_shaext

        movl    280(%rsp),%edx

        pshufd  $27,%xmm12,%xmm12
        pshufd  $27,%xmm13,%xmm13
        pshufd  $27,%xmm14,%xmm14
        pshufd  $27,%xmm15,%xmm15

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

        movq    %xmm12,0-128(%rdi)
        psrldq  $8,%xmm12
        movq    %xmm5,128-128(%rdi)
        psrldq  $8,%xmm5
        movq    %xmm12,32-128(%rdi)
        movq    %xmm5,160-128(%rdi)

        movq    %xmm13,64-128(%rdi)
        psrldq  $8,%xmm13
        movq    %xmm6,192-128(%rdi)
        psrldq  $8,%xmm6
        movq    %xmm13,96-128(%rdi)
        movq    %xmm6,224-128(%rdi)

        leaq    8(%rdi),%rdi
        leaq    32(%rsi),%rsi
        decl    %edx
        jnz     .Loop_grande_shaext

.Ldone_shaext:

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