#if defined(__ELF__) && defined(__linux__)
.section .note.GNU-stack,"",%progbits
#endif

#if defined(__ELF__) && defined(__CET__) && defined(__has_include)
#if __has_include(<cet.h>)
#include <cet.h>
#endif
#endif

#if !defined(_CET_ENDBR)
#define _CET_ENDBR
#endif

.intel_syntax noprefix
.global _blake3_hash_many_avx512
.global blake3_hash_many_avx512
.global blake3_compress_in_place_avx512
.global _blake3_compress_in_place_avx512
.global blake3_compress_xof_avx512
.global _blake3_compress_xof_avx512
.global blake3_xof_many_avx512
.global _blake3_xof_many_avx512

#ifdef __APPLE__
.text
#else
.section .text
#endif
.p2align  6
_blake3_hash_many_avx512:
blake3_hash_many_avx512:
        _CET_ENDBR
        push    r15
        push    r14
        push    r13
        push    r12
        push    rbx
        push    rbp
        mov     rbp, rsp
        sub     rsp, 144
        and     rsp, 0xFFFFFFFFFFFFFFC0
        neg     r9
        kmovw   k1, r9d
        vmovd   xmm0, r8d
        vpbroadcastd ymm0, xmm0
        shr     r8, 32
        vmovd   xmm1, r8d
        vpbroadcastd ymm1, xmm1
        vmovdqa ymm4, ymm1
        vmovdqa ymm5, ymm1
        vpaddd  ymm2, ymm0, ymmword ptr [ADD0+rip]
        vpaddd  ymm3, ymm0, ymmword ptr [ADD0+32+rip]
        vpcmpltud k2, ymm2, ymm0
        vpcmpltud k3, ymm3, ymm0
        vpaddd  ymm4 {k2}, ymm4, dword ptr [ADD1+rip] {1to8}
        vpaddd  ymm5 {k3}, ymm5, dword ptr [ADD1+rip] {1to8}
        knotw   k2, k1
        vmovdqa32 ymm2 {k2}, ymm0
        vmovdqa32 ymm3 {k2}, ymm0
        vmovdqa32 ymm4 {k2}, ymm1
        vmovdqa32 ymm5 {k2}, ymm1
        vmovdqa ymmword ptr [rsp], ymm2
        vmovdqa ymmword ptr [rsp+0x1*0x20], ymm3
        vmovdqa ymmword ptr [rsp+0x2*0x20], ymm4
        vmovdqa ymmword ptr [rsp+0x3*0x20], ymm5
        shl     rdx, 6
        mov     qword ptr [rsp+0x80], rdx
        cmp     rsi, 16
        jc      3f
2:
        vpbroadcastd zmm0, dword ptr [rcx]
        vpbroadcastd zmm1, dword ptr [rcx+0x1*0x4]
        vpbroadcastd zmm2, dword ptr [rcx+0x2*0x4]
        vpbroadcastd zmm3, dword ptr [rcx+0x3*0x4]
        vpbroadcastd zmm4, dword ptr [rcx+0x4*0x4]
        vpbroadcastd zmm5, dword ptr [rcx+0x5*0x4]
        vpbroadcastd zmm6, dword ptr [rcx+0x6*0x4]
        vpbroadcastd zmm7, dword ptr [rcx+0x7*0x4]
        movzx   eax, byte ptr [rbp+0x38]
        movzx   ebx, byte ptr [rbp+0x40]
        or      eax, ebx
        xor     edx, edx
.p2align 5
9:
        movzx   ebx, byte ptr [rbp+0x48]
        or      ebx, eax
        add     rdx, 64
        cmp     rdx, qword ptr [rsp+0x80]
        cmove   eax, ebx
        mov     dword ptr [rsp+0x88], eax
        mov     r8, qword ptr [rdi]
        mov     r9, qword ptr [rdi+0x8]
        mov     r10, qword ptr [rdi+0x10]
        mov     r11, qword ptr [rdi+0x18]
        mov     r12, qword ptr [rdi+0x40]
        mov     r13, qword ptr [rdi+0x48]
        mov     r14, qword ptr [rdi+0x50]
        mov     r15, qword ptr [rdi+0x58]
        vmovdqu32 ymm16, ymmword ptr [rdx+r8-0x2*0x20]
        vinserti64x4 zmm16, zmm16, ymmword ptr [rdx+r12-0x2*0x20], 0x01
        vmovdqu32 ymm17, ymmword ptr [rdx+r9-0x2*0x20]
        vinserti64x4 zmm17, zmm17, ymmword ptr [rdx+r13-0x2*0x20], 0x01
        vpunpcklqdq zmm8, zmm16, zmm17
        vpunpckhqdq zmm9, zmm16, zmm17
        vmovdqu32 ymm18, ymmword ptr [rdx+r10-0x2*0x20]
        vinserti64x4 zmm18, zmm18, ymmword ptr [rdx+r14-0x2*0x20], 0x01
        vmovdqu32 ymm19, ymmword ptr [rdx+r11-0x2*0x20]
        vinserti64x4 zmm19, zmm19, ymmword ptr [rdx+r15-0x2*0x20], 0x01
        vpunpcklqdq zmm10, zmm18, zmm19
        vpunpckhqdq zmm11, zmm18, zmm19
        mov     r8, qword ptr [rdi+0x20]
        mov     r9, qword ptr [rdi+0x28]
        mov     r10, qword ptr [rdi+0x30]
        mov     r11, qword ptr [rdi+0x38]
        mov     r12, qword ptr [rdi+0x60]
        mov     r13, qword ptr [rdi+0x68]
        mov     r14, qword ptr [rdi+0x70]
        mov     r15, qword ptr [rdi+0x78]
        vmovdqu32 ymm16, ymmword ptr [rdx+r8-0x2*0x20]
        vinserti64x4 zmm16, zmm16, ymmword ptr [rdx+r12-0x2*0x20], 0x01
        vmovdqu32 ymm17, ymmword ptr [rdx+r9-0x2*0x20]
        vinserti64x4 zmm17, zmm17, ymmword ptr [rdx+r13-0x2*0x20], 0x01
        vpunpcklqdq zmm12, zmm16, zmm17
        vpunpckhqdq zmm13, zmm16, zmm17
        vmovdqu32 ymm18, ymmword ptr [rdx+r10-0x2*0x20]
        vinserti64x4 zmm18, zmm18, ymmword ptr [rdx+r14-0x2*0x20], 0x01
        vmovdqu32 ymm19, ymmword ptr [rdx+r11-0x2*0x20]
        vinserti64x4 zmm19, zmm19, ymmword ptr [rdx+r15-0x2*0x20], 0x01
        vpunpcklqdq zmm14, zmm18, zmm19
        vpunpckhqdq zmm15, zmm18, zmm19
        vmovdqa32 zmm27, zmmword ptr [INDEX0+rip]
        vmovdqa32 zmm31, zmmword ptr [INDEX1+rip]
        vshufps zmm16, zmm8, zmm10, 136
        vshufps zmm17, zmm12, zmm14, 136
        vmovdqa32 zmm20, zmm16
        vpermt2d zmm16, zmm27, zmm17
        vpermt2d zmm20, zmm31, zmm17
        vshufps zmm17, zmm8, zmm10, 221
        vshufps zmm30, zmm12, zmm14, 221
        vmovdqa32 zmm21, zmm17
        vpermt2d zmm17, zmm27, zmm30
        vpermt2d zmm21, zmm31, zmm30
        vshufps zmm18, zmm9, zmm11, 136
        vshufps zmm8, zmm13, zmm15, 136
        vmovdqa32 zmm22, zmm18
        vpermt2d zmm18, zmm27, zmm8
        vpermt2d zmm22, zmm31, zmm8
        vshufps zmm19, zmm9, zmm11, 221
        vshufps zmm8, zmm13, zmm15, 221
        vmovdqa32 zmm23, zmm19
        vpermt2d zmm19, zmm27, zmm8
        vpermt2d zmm23, zmm31, zmm8
        mov     r8, qword ptr [rdi]
        mov     r9, qword ptr [rdi+0x8]
        mov     r10, qword ptr [rdi+0x10]
        mov     r11, qword ptr [rdi+0x18]
        mov     r12, qword ptr [rdi+0x40]
        mov     r13, qword ptr [rdi+0x48]
        mov     r14, qword ptr [rdi+0x50]
        mov     r15, qword ptr [rdi+0x58]
        vmovdqu32 ymm24, ymmword ptr [r8+rdx-0x1*0x20]
        vinserti64x4 zmm24, zmm24, ymmword ptr [r12+rdx-0x1*0x20], 0x01
        vmovdqu32 ymm25, ymmword ptr [r9+rdx-0x1*0x20]
        vinserti64x4 zmm25, zmm25, ymmword ptr [r13+rdx-0x1*0x20], 0x01
        vpunpcklqdq zmm8, zmm24, zmm25
        vpunpckhqdq zmm9, zmm24, zmm25
        vmovdqu32 ymm24, ymmword ptr [r10+rdx-0x1*0x20]
        vinserti64x4 zmm24, zmm24, ymmword ptr [r14+rdx-0x1*0x20], 0x01
        vmovdqu32 ymm25, ymmword ptr [r11+rdx-0x1*0x20]
        vinserti64x4 zmm25, zmm25, ymmword ptr [r15+rdx-0x1*0x20], 0x01
        vpunpcklqdq zmm10, zmm24, zmm25
        vpunpckhqdq zmm11, zmm24, zmm25
        prefetcht0 [r8+rdx+0x80]
        prefetcht0 [r12+rdx+0x80]
        prefetcht0 [r9+rdx+0x80]
        prefetcht0 [r13+rdx+0x80]
        prefetcht0 [r10+rdx+0x80]
        prefetcht0 [r14+rdx+0x80]
        prefetcht0 [r11+rdx+0x80]
        prefetcht0 [r15+rdx+0x80]
        mov     r8, qword ptr [rdi+0x20]
        mov     r9, qword ptr [rdi+0x28]
        mov     r10, qword ptr [rdi+0x30]
        mov     r11, qword ptr [rdi+0x38]
        mov     r12, qword ptr [rdi+0x60]
        mov     r13, qword ptr [rdi+0x68]
        mov     r14, qword ptr [rdi+0x70]
        mov     r15, qword ptr [rdi+0x78]
        vmovdqu32 ymm24, ymmword ptr [r8+rdx-0x1*0x20]
        vinserti64x4 zmm24, zmm24, ymmword ptr [r12+rdx-0x1*0x20], 0x01
        vmovdqu32 ymm25, ymmword ptr [r9+rdx-0x1*0x20]
        vinserti64x4 zmm25, zmm25, ymmword ptr [r13+rdx-0x1*0x20], 0x01
        vpunpcklqdq zmm12, zmm24, zmm25
        vpunpckhqdq zmm13, zmm24, zmm25
        vmovdqu32 ymm24, ymmword ptr [r10+rdx-0x1*0x20]
        vinserti64x4 zmm24, zmm24, ymmword ptr [r14+rdx-0x1*0x20], 0x01
        vmovdqu32 ymm25, ymmword ptr [r11+rdx-0x1*0x20]
        vinserti64x4 zmm25, zmm25, ymmword ptr [r15+rdx-0x1*0x20], 0x01
        vpunpcklqdq zmm14, zmm24, zmm25
        vpunpckhqdq zmm15, zmm24, zmm25
        prefetcht0 [r8+rdx+0x80]
        prefetcht0 [r12+rdx+0x80]
        prefetcht0 [r9+rdx+0x80]
        prefetcht0 [r13+rdx+0x80]
        prefetcht0 [r10+rdx+0x80]
        prefetcht0 [r14+rdx+0x80]
        prefetcht0 [r11+rdx+0x80]
        prefetcht0 [r15+rdx+0x80]
        vshufps zmm24, zmm8, zmm10, 136
        vshufps zmm30, zmm12, zmm14, 136
        vmovdqa32 zmm28, zmm24
        vpermt2d zmm24, zmm27, zmm30
        vpermt2d zmm28, zmm31, zmm30
        vshufps zmm25, zmm8, zmm10, 221
        vshufps zmm30, zmm12, zmm14, 221
        vmovdqa32 zmm29, zmm25
        vpermt2d zmm25, zmm27, zmm30
        vpermt2d zmm29, zmm31, zmm30
        vshufps zmm26, zmm9, zmm11, 136
        vshufps zmm8, zmm13, zmm15, 136
        vmovdqa32 zmm30, zmm26
        vpermt2d zmm26, zmm27, zmm8
        vpermt2d zmm30, zmm31, zmm8
        vshufps zmm8, zmm9, zmm11, 221
        vshufps zmm10, zmm13, zmm15, 221
        vpermi2d zmm27, zmm8, zmm10
        vpermi2d zmm31, zmm8, zmm10
        vpbroadcastd zmm8, dword ptr [BLAKE3_IV_0+rip]
        vpbroadcastd zmm9, dword ptr [BLAKE3_IV_1+rip]
        vpbroadcastd zmm10, dword ptr [BLAKE3_IV_2+rip]
        vpbroadcastd zmm11, dword ptr [BLAKE3_IV_3+rip]
        vmovdqa32 zmm12, zmmword ptr [rsp]
        vmovdqa32 zmm13, zmmword ptr [rsp+0x1*0x40]
        vpbroadcastd zmm14, dword ptr [BLAKE3_BLOCK_LEN+rip]
        vpbroadcastd zmm15, dword ptr [rsp+0x22*0x4]
        vpaddd  zmm0, zmm0, zmm16
        vpaddd  zmm1, zmm1, zmm18
        vpaddd  zmm2, zmm2, zmm20
        vpaddd  zmm3, zmm3, zmm22
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm1, zmm1, zmm5
        vpaddd  zmm2, zmm2, zmm6
        vpaddd  zmm3, zmm3, zmm7
        vpxord  zmm12, zmm12, zmm0
        vpxord  zmm13, zmm13, zmm1
        vpxord  zmm14, zmm14, zmm2
        vpxord  zmm15, zmm15, zmm3
        vprord  zmm12, zmm12, 16
        vprord  zmm13, zmm13, 16
        vprord  zmm14, zmm14, 16
        vprord  zmm15, zmm15, 16
        vpaddd  zmm8, zmm8, zmm12
        vpaddd  zmm9, zmm9, zmm13
        vpaddd  zmm10, zmm10, zmm14
        vpaddd  zmm11, zmm11, zmm15
        vpxord  zmm4, zmm4, zmm8
        vpxord  zmm5, zmm5, zmm9
        vpxord  zmm6, zmm6, zmm10
        vpxord  zmm7, zmm7, zmm11
        vprord  zmm4, zmm4, 12
        vprord  zmm5, zmm5, 12
        vprord  zmm6, zmm6, 12
        vprord  zmm7, zmm7, 12
        vpaddd  zmm0, zmm0, zmm17
        vpaddd  zmm1, zmm1, zmm19
        vpaddd  zmm2, zmm2, zmm21
        vpaddd  zmm3, zmm3, zmm23
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm1, zmm1, zmm5
        vpaddd  zmm2, zmm2, zmm6
        vpaddd  zmm3, zmm3, zmm7
        vpxord  zmm12, zmm12, zmm0
        vpxord  zmm13, zmm13, zmm1
        vpxord  zmm14, zmm14, zmm2
        vpxord  zmm15, zmm15, zmm3
        vprord  zmm12, zmm12, 8
        vprord  zmm13, zmm13, 8
        vprord  zmm14, zmm14, 8
        vprord  zmm15, zmm15, 8
        vpaddd  zmm8, zmm8, zmm12
        vpaddd  zmm9, zmm9, zmm13
        vpaddd  zmm10, zmm10, zmm14
        vpaddd  zmm11, zmm11, zmm15
        vpxord  zmm4, zmm4, zmm8
        vpxord  zmm5, zmm5, zmm9
        vpxord  zmm6, zmm6, zmm10
        vpxord  zmm7, zmm7, zmm11
        vprord  zmm4, zmm4, 7
        vprord  zmm5, zmm5, 7
        vprord  zmm6, zmm6, 7
        vprord  zmm7, zmm7, 7
        vpaddd  zmm0, zmm0, zmm24
        vpaddd  zmm1, zmm1, zmm26
        vpaddd  zmm2, zmm2, zmm28
        vpaddd  zmm3, zmm3, zmm30
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm1, zmm1, zmm6
        vpaddd  zmm2, zmm2, zmm7
        vpaddd  zmm3, zmm3, zmm4
        vpxord  zmm15, zmm15, zmm0
        vpxord  zmm12, zmm12, zmm1
        vpxord  zmm13, zmm13, zmm2
        vpxord  zmm14, zmm14, zmm3
        vprord  zmm15, zmm15, 16
        vprord  zmm12, zmm12, 16
        vprord  zmm13, zmm13, 16
        vprord  zmm14, zmm14, 16
        vpaddd  zmm10, zmm10, zmm15
        vpaddd  zmm11, zmm11, zmm12
        vpaddd  zmm8, zmm8, zmm13
        vpaddd  zmm9, zmm9, zmm14
        vpxord  zmm5, zmm5, zmm10
        vpxord  zmm6, zmm6, zmm11
        vpxord  zmm7, zmm7, zmm8
        vpxord  zmm4, zmm4, zmm9
        vprord  zmm5, zmm5, 12
        vprord  zmm6, zmm6, 12
        vprord  zmm7, zmm7, 12
        vprord  zmm4, zmm4, 12
        vpaddd  zmm0, zmm0, zmm25
        vpaddd  zmm1, zmm1, zmm27
        vpaddd  zmm2, zmm2, zmm29
        vpaddd  zmm3, zmm3, zmm31
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm1, zmm1, zmm6
        vpaddd  zmm2, zmm2, zmm7
        vpaddd  zmm3, zmm3, zmm4
        vpxord  zmm15, zmm15, zmm0
        vpxord  zmm12, zmm12, zmm1
        vpxord  zmm13, zmm13, zmm2
        vpxord  zmm14, zmm14, zmm3
        vprord  zmm15, zmm15, 8
        vprord  zmm12, zmm12, 8
        vprord  zmm13, zmm13, 8
        vprord  zmm14, zmm14, 8
        vpaddd  zmm10, zmm10, zmm15
        vpaddd  zmm11, zmm11, zmm12
        vpaddd  zmm8, zmm8, zmm13
        vpaddd  zmm9, zmm9, zmm14
        vpxord  zmm5, zmm5, zmm10
        vpxord  zmm6, zmm6, zmm11
        vpxord  zmm7, zmm7, zmm8
        vpxord  zmm4, zmm4, zmm9
        vprord  zmm5, zmm5, 7
        vprord  zmm6, zmm6, 7
        vprord  zmm7, zmm7, 7
        vprord  zmm4, zmm4, 7
        vpaddd  zmm0, zmm0, zmm18
        vpaddd  zmm1, zmm1, zmm19
        vpaddd  zmm2, zmm2, zmm23
        vpaddd  zmm3, zmm3, zmm20
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm1, zmm1, zmm5
        vpaddd  zmm2, zmm2, zmm6
        vpaddd  zmm3, zmm3, zmm7
        vpxord  zmm12, zmm12, zmm0
        vpxord  zmm13, zmm13, zmm1
        vpxord  zmm14, zmm14, zmm2
        vpxord  zmm15, zmm15, zmm3
        vprord  zmm12, zmm12, 16
        vprord  zmm13, zmm13, 16
        vprord  zmm14, zmm14, 16
        vprord  zmm15, zmm15, 16
        vpaddd  zmm8, zmm8, zmm12
        vpaddd  zmm9, zmm9, zmm13
        vpaddd  zmm10, zmm10, zmm14
        vpaddd  zmm11, zmm11, zmm15
        vpxord  zmm4, zmm4, zmm8
        vpxord  zmm5, zmm5, zmm9
        vpxord  zmm6, zmm6, zmm10
        vpxord  zmm7, zmm7, zmm11
        vprord  zmm4, zmm4, 12
        vprord  zmm5, zmm5, 12
        vprord  zmm6, zmm6, 12
        vprord  zmm7, zmm7, 12
        vpaddd  zmm0, zmm0, zmm22
        vpaddd  zmm1, zmm1, zmm26
        vpaddd  zmm2, zmm2, zmm16
        vpaddd  zmm3, zmm3, zmm29
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm1, zmm1, zmm5
        vpaddd  zmm2, zmm2, zmm6
        vpaddd  zmm3, zmm3, zmm7
        vpxord  zmm12, zmm12, zmm0
        vpxord  zmm13, zmm13, zmm1
        vpxord  zmm14, zmm14, zmm2
        vpxord  zmm15, zmm15, zmm3
        vprord  zmm12, zmm12, 8
        vprord  zmm13, zmm13, 8
        vprord  zmm14, zmm14, 8
        vprord  zmm15, zmm15, 8
        vpaddd  zmm8, zmm8, zmm12
        vpaddd  zmm9, zmm9, zmm13
        vpaddd  zmm10, zmm10, zmm14
        vpaddd  zmm11, zmm11, zmm15
        vpxord  zmm4, zmm4, zmm8
        vpxord  zmm5, zmm5, zmm9
        vpxord  zmm6, zmm6, zmm10
        vpxord  zmm7, zmm7, zmm11
        vprord  zmm4, zmm4, 7
        vprord  zmm5, zmm5, 7
        vprord  zmm6, zmm6, 7
        vprord  zmm7, zmm7, 7
        vpaddd  zmm0, zmm0, zmm17
        vpaddd  zmm1, zmm1, zmm28
        vpaddd  zmm2, zmm2, zmm25
        vpaddd  zmm3, zmm3, zmm31
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm1, zmm1, zmm6
        vpaddd  zmm2, zmm2, zmm7
        vpaddd  zmm3, zmm3, zmm4
        vpxord  zmm15, zmm15, zmm0
        vpxord  zmm12, zmm12, zmm1
        vpxord  zmm13, zmm13, zmm2
        vpxord  zmm14, zmm14, zmm3
        vprord  zmm15, zmm15, 16
        vprord  zmm12, zmm12, 16
        vprord  zmm13, zmm13, 16
        vprord  zmm14, zmm14, 16
        vpaddd  zmm10, zmm10, zmm15
        vpaddd  zmm11, zmm11, zmm12
        vpaddd  zmm8, zmm8, zmm13
        vpaddd  zmm9, zmm9, zmm14
        vpxord  zmm5, zmm5, zmm10
        vpxord  zmm6, zmm6, zmm11
        vpxord  zmm7, zmm7, zmm8
        vpxord  zmm4, zmm4, zmm9
        vprord  zmm5, zmm5, 12
        vprord  zmm6, zmm6, 12
        vprord  zmm7, zmm7, 12
        vprord  zmm4, zmm4, 12
        vpaddd  zmm0, zmm0, zmm27
        vpaddd  zmm1, zmm1, zmm21
        vpaddd  zmm2, zmm2, zmm30
        vpaddd  zmm3, zmm3, zmm24
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm1, zmm1, zmm6
        vpaddd  zmm2, zmm2, zmm7
        vpaddd  zmm3, zmm3, zmm4
        vpxord  zmm15, zmm15, zmm0
        vpxord  zmm12, zmm12, zmm1
        vpxord  zmm13, zmm13, zmm2
        vpxord  zmm14, zmm14, zmm3
        vprord  zmm15, zmm15, 8
        vprord  zmm12, zmm12, 8
        vprord  zmm13, zmm13, 8
        vprord  zmm14, zmm14, 8
        vpaddd  zmm10, zmm10, zmm15
        vpaddd  zmm11, zmm11, zmm12
        vpaddd  zmm8, zmm8, zmm13
        vpaddd  zmm9, zmm9, zmm14
        vpxord  zmm5, zmm5, zmm10
        vpxord  zmm6, zmm6, zmm11
        vpxord  zmm7, zmm7, zmm8
        vpxord  zmm4, zmm4, zmm9
        vprord  zmm5, zmm5, 7
        vprord  zmm6, zmm6, 7
        vprord  zmm7, zmm7, 7
        vprord  zmm4, zmm4, 7
        vpaddd  zmm0, zmm0, zmm19
        vpaddd  zmm1, zmm1, zmm26
        vpaddd  zmm2, zmm2, zmm29
        vpaddd  zmm3, zmm3, zmm23
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm1, zmm1, zmm5
        vpaddd  zmm2, zmm2, zmm6
        vpaddd  zmm3, zmm3, zmm7
        vpxord  zmm12, zmm12, zmm0
        vpxord  zmm13, zmm13, zmm1
        vpxord  zmm14, zmm14, zmm2
        vpxord  zmm15, zmm15, zmm3
        vprord  zmm12, zmm12, 16
        vprord  zmm13, zmm13, 16
        vprord  zmm14, zmm14, 16
        vprord  zmm15, zmm15, 16
        vpaddd  zmm8, zmm8, zmm12
        vpaddd  zmm9, zmm9, zmm13
        vpaddd  zmm10, zmm10, zmm14
        vpaddd  zmm11, zmm11, zmm15
        vpxord  zmm4, zmm4, zmm8
        vpxord  zmm5, zmm5, zmm9
        vpxord  zmm6, zmm6, zmm10
        vpxord  zmm7, zmm7, zmm11
        vprord  zmm4, zmm4, 12
        vprord  zmm5, zmm5, 12
        vprord  zmm6, zmm6, 12
        vprord  zmm7, zmm7, 12
        vpaddd  zmm0, zmm0, zmm20
        vpaddd  zmm1, zmm1, zmm28
        vpaddd  zmm2, zmm2, zmm18
        vpaddd  zmm3, zmm3, zmm30
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm1, zmm1, zmm5
        vpaddd  zmm2, zmm2, zmm6
        vpaddd  zmm3, zmm3, zmm7
        vpxord  zmm12, zmm12, zmm0
        vpxord  zmm13, zmm13, zmm1
        vpxord  zmm14, zmm14, zmm2
        vpxord  zmm15, zmm15, zmm3
        vprord  zmm12, zmm12, 8
        vprord  zmm13, zmm13, 8
        vprord  zmm14, zmm14, 8
        vprord  zmm15, zmm15, 8
        vpaddd  zmm8, zmm8, zmm12
        vpaddd  zmm9, zmm9, zmm13
        vpaddd  zmm10, zmm10, zmm14
        vpaddd  zmm11, zmm11, zmm15
        vpxord  zmm4, zmm4, zmm8
        vpxord  zmm5, zmm5, zmm9
        vpxord  zmm6, zmm6, zmm10
        vpxord  zmm7, zmm7, zmm11
        vprord  zmm4, zmm4, 7
        vprord  zmm5, zmm5, 7
        vprord  zmm6, zmm6, 7
        vprord  zmm7, zmm7, 7
        vpaddd  zmm0, zmm0, zmm22
        vpaddd  zmm1, zmm1, zmm25
        vpaddd  zmm2, zmm2, zmm27
        vpaddd  zmm3, zmm3, zmm24
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm1, zmm1, zmm6
        vpaddd  zmm2, zmm2, zmm7
        vpaddd  zmm3, zmm3, zmm4
        vpxord  zmm15, zmm15, zmm0
        vpxord  zmm12, zmm12, zmm1
        vpxord  zmm13, zmm13, zmm2
        vpxord  zmm14, zmm14, zmm3
        vprord  zmm15, zmm15, 16
        vprord  zmm12, zmm12, 16
        vprord  zmm13, zmm13, 16
        vprord  zmm14, zmm14, 16
        vpaddd  zmm10, zmm10, zmm15
        vpaddd  zmm11, zmm11, zmm12
        vpaddd  zmm8, zmm8, zmm13
        vpaddd  zmm9, zmm9, zmm14
        vpxord  zmm5, zmm5, zmm10
        vpxord  zmm6, zmm6, zmm11
        vpxord  zmm7, zmm7, zmm8
        vpxord  zmm4, zmm4, zmm9
        vprord  zmm5, zmm5, 12
        vprord  zmm6, zmm6, 12
        vprord  zmm7, zmm7, 12
        vprord  zmm4, zmm4, 12
        vpaddd  zmm0, zmm0, zmm21
        vpaddd  zmm1, zmm1, zmm16
        vpaddd  zmm2, zmm2, zmm31
        vpaddd  zmm3, zmm3, zmm17
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm1, zmm1, zmm6
        vpaddd  zmm2, zmm2, zmm7
        vpaddd  zmm3, zmm3, zmm4
        vpxord  zmm15, zmm15, zmm0
        vpxord  zmm12, zmm12, zmm1
        vpxord  zmm13, zmm13, zmm2
        vpxord  zmm14, zmm14, zmm3
        vprord  zmm15, zmm15, 8
        vprord  zmm12, zmm12, 8
        vprord  zmm13, zmm13, 8
        vprord  zmm14, zmm14, 8
        vpaddd  zmm10, zmm10, zmm15
        vpaddd  zmm11, zmm11, zmm12
        vpaddd  zmm8, zmm8, zmm13
        vpaddd  zmm9, zmm9, zmm14
        vpxord  zmm5, zmm5, zmm10
        vpxord  zmm6, zmm6, zmm11
        vpxord  zmm7, zmm7, zmm8
        vpxord  zmm4, zmm4, zmm9
        vprord  zmm5, zmm5, 7
        vprord  zmm6, zmm6, 7
        vprord  zmm7, zmm7, 7
        vprord  zmm4, zmm4, 7
        vpaddd  zmm0, zmm0, zmm26
        vpaddd  zmm1, zmm1, zmm28
        vpaddd  zmm2, zmm2, zmm30
        vpaddd  zmm3, zmm3, zmm29
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm1, zmm1, zmm5
        vpaddd  zmm2, zmm2, zmm6
        vpaddd  zmm3, zmm3, zmm7
        vpxord  zmm12, zmm12, zmm0
        vpxord  zmm13, zmm13, zmm1
        vpxord  zmm14, zmm14, zmm2
        vpxord  zmm15, zmm15, zmm3
        vprord  zmm12, zmm12, 16
        vprord  zmm13, zmm13, 16
        vprord  zmm14, zmm14, 16
        vprord  zmm15, zmm15, 16
        vpaddd  zmm8, zmm8, zmm12
        vpaddd  zmm9, zmm9, zmm13
        vpaddd  zmm10, zmm10, zmm14
        vpaddd  zmm11, zmm11, zmm15
        vpxord  zmm4, zmm4, zmm8
        vpxord  zmm5, zmm5, zmm9
        vpxord  zmm6, zmm6, zmm10
        vpxord  zmm7, zmm7, zmm11
        vprord  zmm4, zmm4, 12
        vprord  zmm5, zmm5, 12
        vprord  zmm6, zmm6, 12
        vprord  zmm7, zmm7, 12
        vpaddd  zmm0, zmm0, zmm23
        vpaddd  zmm1, zmm1, zmm25
        vpaddd  zmm2, zmm2, zmm19
        vpaddd  zmm3, zmm3, zmm31
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm1, zmm1, zmm5
        vpaddd  zmm2, zmm2, zmm6
        vpaddd  zmm3, zmm3, zmm7
        vpxord  zmm12, zmm12, zmm0
        vpxord  zmm13, zmm13, zmm1
        vpxord  zmm14, zmm14, zmm2
        vpxord  zmm15, zmm15, zmm3
        vprord  zmm12, zmm12, 8
        vprord  zmm13, zmm13, 8
        vprord  zmm14, zmm14, 8
        vprord  zmm15, zmm15, 8
        vpaddd  zmm8, zmm8, zmm12
        vpaddd  zmm9, zmm9, zmm13
        vpaddd  zmm10, zmm10, zmm14
        vpaddd  zmm11, zmm11, zmm15
        vpxord  zmm4, zmm4, zmm8
        vpxord  zmm5, zmm5, zmm9
        vpxord  zmm6, zmm6, zmm10
        vpxord  zmm7, zmm7, zmm11
        vprord  zmm4, zmm4, 7
        vprord  zmm5, zmm5, 7
        vprord  zmm6, zmm6, 7
        vprord  zmm7, zmm7, 7
        vpaddd  zmm0, zmm0, zmm20
        vpaddd  zmm1, zmm1, zmm27
        vpaddd  zmm2, zmm2, zmm21
        vpaddd  zmm3, zmm3, zmm17
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm1, zmm1, zmm6
        vpaddd  zmm2, zmm2, zmm7
        vpaddd  zmm3, zmm3, zmm4
        vpxord  zmm15, zmm15, zmm0
        vpxord  zmm12, zmm12, zmm1
        vpxord  zmm13, zmm13, zmm2
        vpxord  zmm14, zmm14, zmm3
        vprord  zmm15, zmm15, 16
        vprord  zmm12, zmm12, 16
        vprord  zmm13, zmm13, 16
        vprord  zmm14, zmm14, 16
        vpaddd  zmm10, zmm10, zmm15
        vpaddd  zmm11, zmm11, zmm12
        vpaddd  zmm8, zmm8, zmm13
        vpaddd  zmm9, zmm9, zmm14
        vpxord  zmm5, zmm5, zmm10
        vpxord  zmm6, zmm6, zmm11
        vpxord  zmm7, zmm7, zmm8
        vpxord  zmm4, zmm4, zmm9
        vprord  zmm5, zmm5, 12
        vprord  zmm6, zmm6, 12
        vprord  zmm7, zmm7, 12
        vprord  zmm4, zmm4, 12
        vpaddd  zmm0, zmm0, zmm16
        vpaddd  zmm1, zmm1, zmm18
        vpaddd  zmm2, zmm2, zmm24
        vpaddd  zmm3, zmm3, zmm22
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm1, zmm1, zmm6
        vpaddd  zmm2, zmm2, zmm7
        vpaddd  zmm3, zmm3, zmm4
        vpxord  zmm15, zmm15, zmm0
        vpxord  zmm12, zmm12, zmm1
        vpxord  zmm13, zmm13, zmm2
        vpxord  zmm14, zmm14, zmm3
        vprord  zmm15, zmm15, 8
        vprord  zmm12, zmm12, 8
        vprord  zmm13, zmm13, 8
        vprord  zmm14, zmm14, 8
        vpaddd  zmm10, zmm10, zmm15
        vpaddd  zmm11, zmm11, zmm12
        vpaddd  zmm8, zmm8, zmm13
        vpaddd  zmm9, zmm9, zmm14
        vpxord  zmm5, zmm5, zmm10
        vpxord  zmm6, zmm6, zmm11
        vpxord  zmm7, zmm7, zmm8
        vpxord  zmm4, zmm4, zmm9
        vprord  zmm5, zmm5, 7
        vprord  zmm6, zmm6, 7
        vprord  zmm7, zmm7, 7
        vprord  zmm4, zmm4, 7
        vpaddd  zmm0, zmm0, zmm28
        vpaddd  zmm1, zmm1, zmm25
        vpaddd  zmm2, zmm2, zmm31
        vpaddd  zmm3, zmm3, zmm30
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm1, zmm1, zmm5
        vpaddd  zmm2, zmm2, zmm6
        vpaddd  zmm3, zmm3, zmm7
        vpxord  zmm12, zmm12, zmm0
        vpxord  zmm13, zmm13, zmm1
        vpxord  zmm14, zmm14, zmm2
        vpxord  zmm15, zmm15, zmm3
        vprord  zmm12, zmm12, 16
        vprord  zmm13, zmm13, 16
        vprord  zmm14, zmm14, 16
        vprord  zmm15, zmm15, 16
        vpaddd  zmm8, zmm8, zmm12
        vpaddd  zmm9, zmm9, zmm13
        vpaddd  zmm10, zmm10, zmm14
        vpaddd  zmm11, zmm11, zmm15
        vpxord  zmm4, zmm4, zmm8
        vpxord  zmm5, zmm5, zmm9
        vpxord  zmm6, zmm6, zmm10
        vpxord  zmm7, zmm7, zmm11
        vprord  zmm4, zmm4, 12
        vprord  zmm5, zmm5, 12
        vprord  zmm6, zmm6, 12
        vprord  zmm7, zmm7, 12
        vpaddd  zmm0, zmm0, zmm29
        vpaddd  zmm1, zmm1, zmm27
        vpaddd  zmm2, zmm2, zmm26
        vpaddd  zmm3, zmm3, zmm24
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm1, zmm1, zmm5
        vpaddd  zmm2, zmm2, zmm6
        vpaddd  zmm3, zmm3, zmm7
        vpxord  zmm12, zmm12, zmm0
        vpxord  zmm13, zmm13, zmm1
        vpxord  zmm14, zmm14, zmm2
        vpxord  zmm15, zmm15, zmm3
        vprord  zmm12, zmm12, 8
        vprord  zmm13, zmm13, 8
        vprord  zmm14, zmm14, 8
        vprord  zmm15, zmm15, 8
        vpaddd  zmm8, zmm8, zmm12
        vpaddd  zmm9, zmm9, zmm13
        vpaddd  zmm10, zmm10, zmm14
        vpaddd  zmm11, zmm11, zmm15
        vpxord  zmm4, zmm4, zmm8
        vpxord  zmm5, zmm5, zmm9
        vpxord  zmm6, zmm6, zmm10
        vpxord  zmm7, zmm7, zmm11
        vprord  zmm4, zmm4, 7
        vprord  zmm5, zmm5, 7
        vprord  zmm6, zmm6, 7
        vprord  zmm7, zmm7, 7
        vpaddd  zmm0, zmm0, zmm23
        vpaddd  zmm1, zmm1, zmm21
        vpaddd  zmm2, zmm2, zmm16
        vpaddd  zmm3, zmm3, zmm22
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm1, zmm1, zmm6
        vpaddd  zmm2, zmm2, zmm7
        vpaddd  zmm3, zmm3, zmm4
        vpxord  zmm15, zmm15, zmm0
        vpxord  zmm12, zmm12, zmm1
        vpxord  zmm13, zmm13, zmm2
        vpxord  zmm14, zmm14, zmm3
        vprord  zmm15, zmm15, 16
        vprord  zmm12, zmm12, 16
        vprord  zmm13, zmm13, 16
        vprord  zmm14, zmm14, 16
        vpaddd  zmm10, zmm10, zmm15
        vpaddd  zmm11, zmm11, zmm12
        vpaddd  zmm8, zmm8, zmm13
        vpaddd  zmm9, zmm9, zmm14
        vpxord  zmm5, zmm5, zmm10
        vpxord  zmm6, zmm6, zmm11
        vpxord  zmm7, zmm7, zmm8
        vpxord  zmm4, zmm4, zmm9
        vprord  zmm5, zmm5, 12
        vprord  zmm6, zmm6, 12
        vprord  zmm7, zmm7, 12
        vprord  zmm4, zmm4, 12
        vpaddd  zmm0, zmm0, zmm18
        vpaddd  zmm1, zmm1, zmm19
        vpaddd  zmm2, zmm2, zmm17
        vpaddd  zmm3, zmm3, zmm20
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm1, zmm1, zmm6
        vpaddd  zmm2, zmm2, zmm7
        vpaddd  zmm3, zmm3, zmm4
        vpxord  zmm15, zmm15, zmm0
        vpxord  zmm12, zmm12, zmm1
        vpxord  zmm13, zmm13, zmm2
        vpxord  zmm14, zmm14, zmm3
        vprord  zmm15, zmm15, 8
        vprord  zmm12, zmm12, 8
        vprord  zmm13, zmm13, 8
        vprord  zmm14, zmm14, 8
        vpaddd  zmm10, zmm10, zmm15
        vpaddd  zmm11, zmm11, zmm12
        vpaddd  zmm8, zmm8, zmm13
        vpaddd  zmm9, zmm9, zmm14
        vpxord  zmm5, zmm5, zmm10
        vpxord  zmm6, zmm6, zmm11
        vpxord  zmm7, zmm7, zmm8
        vpxord  zmm4, zmm4, zmm9
        vprord  zmm5, zmm5, 7
        vprord  zmm6, zmm6, 7
        vprord  zmm7, zmm7, 7
        vprord  zmm4, zmm4, 7
        vpaddd  zmm0, zmm0, zmm25
        vpaddd  zmm1, zmm1, zmm27
        vpaddd  zmm2, zmm2, zmm24
        vpaddd  zmm3, zmm3, zmm31
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm1, zmm1, zmm5
        vpaddd  zmm2, zmm2, zmm6
        vpaddd  zmm3, zmm3, zmm7
        vpxord  zmm12, zmm12, zmm0
        vpxord  zmm13, zmm13, zmm1
        vpxord  zmm14, zmm14, zmm2
        vpxord  zmm15, zmm15, zmm3
        vprord  zmm12, zmm12, 16
        vprord  zmm13, zmm13, 16
        vprord  zmm14, zmm14, 16
        vprord  zmm15, zmm15, 16
        vpaddd  zmm8, zmm8, zmm12
        vpaddd  zmm9, zmm9, zmm13
        vpaddd  zmm10, zmm10, zmm14
        vpaddd  zmm11, zmm11, zmm15
        vpxord  zmm4, zmm4, zmm8
        vpxord  zmm5, zmm5, zmm9
        vpxord  zmm6, zmm6, zmm10
        vpxord  zmm7, zmm7, zmm11
        vprord  zmm4, zmm4, 12
        vprord  zmm5, zmm5, 12
        vprord  zmm6, zmm6, 12
        vprord  zmm7, zmm7, 12
        vpaddd  zmm0, zmm0, zmm30
        vpaddd  zmm1, zmm1, zmm21
        vpaddd  zmm2, zmm2, zmm28
        vpaddd  zmm3, zmm3, zmm17
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm1, zmm1, zmm5
        vpaddd  zmm2, zmm2, zmm6
        vpaddd  zmm3, zmm3, zmm7
        vpxord  zmm12, zmm12, zmm0
        vpxord  zmm13, zmm13, zmm1
        vpxord  zmm14, zmm14, zmm2
        vpxord  zmm15, zmm15, zmm3
        vprord  zmm12, zmm12, 8
        vprord  zmm13, zmm13, 8
        vprord  zmm14, zmm14, 8
        vprord  zmm15, zmm15, 8
        vpaddd  zmm8, zmm8, zmm12
        vpaddd  zmm9, zmm9, zmm13
        vpaddd  zmm10, zmm10, zmm14
        vpaddd  zmm11, zmm11, zmm15
        vpxord  zmm4, zmm4, zmm8
        vpxord  zmm5, zmm5, zmm9
        vpxord  zmm6, zmm6, zmm10
        vpxord  zmm7, zmm7, zmm11
        vprord  zmm4, zmm4, 7
        vprord  zmm5, zmm5, 7
        vprord  zmm6, zmm6, 7
        vprord  zmm7, zmm7, 7
        vpaddd  zmm0, zmm0, zmm29
        vpaddd  zmm1, zmm1, zmm16
        vpaddd  zmm2, zmm2, zmm18
        vpaddd  zmm3, zmm3, zmm20
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm1, zmm1, zmm6
        vpaddd  zmm2, zmm2, zmm7
        vpaddd  zmm3, zmm3, zmm4
        vpxord  zmm15, zmm15, zmm0
        vpxord  zmm12, zmm12, zmm1
        vpxord  zmm13, zmm13, zmm2
        vpxord  zmm14, zmm14, zmm3
        vprord  zmm15, zmm15, 16
        vprord  zmm12, zmm12, 16
        vprord  zmm13, zmm13, 16
        vprord  zmm14, zmm14, 16
        vpaddd  zmm10, zmm10, zmm15
        vpaddd  zmm11, zmm11, zmm12
        vpaddd  zmm8, zmm8, zmm13
        vpaddd  zmm9, zmm9, zmm14
        vpxord  zmm5, zmm5, zmm10
        vpxord  zmm6, zmm6, zmm11
        vpxord  zmm7, zmm7, zmm8
        vpxord  zmm4, zmm4, zmm9
        vprord  zmm5, zmm5, 12
        vprord  zmm6, zmm6, 12
        vprord  zmm7, zmm7, 12
        vprord  zmm4, zmm4, 12
        vpaddd  zmm0, zmm0, zmm19
        vpaddd  zmm1, zmm1, zmm26
        vpaddd  zmm2, zmm2, zmm22
        vpaddd  zmm3, zmm3, zmm23
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm1, zmm1, zmm6
        vpaddd  zmm2, zmm2, zmm7
        vpaddd  zmm3, zmm3, zmm4
        vpxord  zmm15, zmm15, zmm0
        vpxord  zmm12, zmm12, zmm1
        vpxord  zmm13, zmm13, zmm2
        vpxord  zmm14, zmm14, zmm3
        vprord  zmm15, zmm15, 8
        vprord  zmm12, zmm12, 8
        vprord  zmm13, zmm13, 8
        vprord  zmm14, zmm14, 8
        vpaddd  zmm10, zmm10, zmm15
        vpaddd  zmm11, zmm11, zmm12
        vpaddd  zmm8, zmm8, zmm13
        vpaddd  zmm9, zmm9, zmm14
        vpxord  zmm5, zmm5, zmm10
        vpxord  zmm6, zmm6, zmm11
        vpxord  zmm7, zmm7, zmm8
        vpxord  zmm4, zmm4, zmm9
        vprord  zmm5, zmm5, 7
        vprord  zmm6, zmm6, 7
        vprord  zmm7, zmm7, 7
        vprord  zmm4, zmm4, 7
        vpaddd  zmm0, zmm0, zmm27
        vpaddd  zmm1, zmm1, zmm21
        vpaddd  zmm2, zmm2, zmm17
        vpaddd  zmm3, zmm3, zmm24
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm1, zmm1, zmm5
        vpaddd  zmm2, zmm2, zmm6
        vpaddd  zmm3, zmm3, zmm7
        vpxord  zmm12, zmm12, zmm0
        vpxord  zmm13, zmm13, zmm1
        vpxord  zmm14, zmm14, zmm2
        vpxord  zmm15, zmm15, zmm3
        vprord  zmm12, zmm12, 16
        vprord  zmm13, zmm13, 16
        vprord  zmm14, zmm14, 16
        vprord  zmm15, zmm15, 16
        vpaddd  zmm8, zmm8, zmm12
        vpaddd  zmm9, zmm9, zmm13
        vpaddd  zmm10, zmm10, zmm14
        vpaddd  zmm11, zmm11, zmm15
        vpxord  zmm4, zmm4, zmm8
        vpxord  zmm5, zmm5, zmm9
        vpxord  zmm6, zmm6, zmm10
        vpxord  zmm7, zmm7, zmm11
        vprord  zmm4, zmm4, 12
        vprord  zmm5, zmm5, 12
        vprord  zmm6, zmm6, 12
        vprord  zmm7, zmm7, 12
        vpaddd  zmm0, zmm0, zmm31
        vpaddd  zmm1, zmm1, zmm16
        vpaddd  zmm2, zmm2, zmm25
        vpaddd  zmm3, zmm3, zmm22
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm1, zmm1, zmm5
        vpaddd  zmm2, zmm2, zmm6
        vpaddd  zmm3, zmm3, zmm7
        vpxord  zmm12, zmm12, zmm0
        vpxord  zmm13, zmm13, zmm1
        vpxord  zmm14, zmm14, zmm2
        vpxord  zmm15, zmm15, zmm3
        vprord  zmm12, zmm12, 8
        vprord  zmm13, zmm13, 8
        vprord  zmm14, zmm14, 8
        vprord  zmm15, zmm15, 8
        vpaddd  zmm8, zmm8, zmm12
        vpaddd  zmm9, zmm9, zmm13
        vpaddd  zmm10, zmm10, zmm14
        vpaddd  zmm11, zmm11, zmm15
        vpxord  zmm4, zmm4, zmm8
        vpxord  zmm5, zmm5, zmm9
        vpxord  zmm6, zmm6, zmm10
        vpxord  zmm7, zmm7, zmm11
        vprord  zmm4, zmm4, 7
        vprord  zmm5, zmm5, 7
        vprord  zmm6, zmm6, 7
        vprord  zmm7, zmm7, 7
        vpaddd  zmm0, zmm0, zmm30
        vpaddd  zmm1, zmm1, zmm18
        vpaddd  zmm2, zmm2, zmm19
        vpaddd  zmm3, zmm3, zmm23
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm1, zmm1, zmm6
        vpaddd  zmm2, zmm2, zmm7
        vpaddd  zmm3, zmm3, zmm4
        vpxord  zmm15, zmm15, zmm0
        vpxord  zmm12, zmm12, zmm1
        vpxord  zmm13, zmm13, zmm2
        vpxord  zmm14, zmm14, zmm3
        vprord  zmm15, zmm15, 16
        vprord  zmm12, zmm12, 16
        vprord  zmm13, zmm13, 16
        vprord  zmm14, zmm14, 16
        vpaddd  zmm10, zmm10, zmm15
        vpaddd  zmm11, zmm11, zmm12
        vpaddd  zmm8, zmm8, zmm13
        vpaddd  zmm9, zmm9, zmm14
        vpxord  zmm5, zmm5, zmm10
        vpxord  zmm6, zmm6, zmm11
        vpxord  zmm7, zmm7, zmm8
        vpxord  zmm4, zmm4, zmm9
        vprord  zmm5, zmm5, 12
        vprord  zmm6, zmm6, 12
        vprord  zmm7, zmm7, 12
        vprord  zmm4, zmm4, 12
        vpaddd  zmm0, zmm0, zmm26
        vpaddd  zmm1, zmm1, zmm28
        vpaddd  zmm2, zmm2, zmm20
        vpaddd  zmm3, zmm3, zmm29
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm1, zmm1, zmm6
        vpaddd  zmm2, zmm2, zmm7
        vpaddd  zmm3, zmm3, zmm4
        vpxord  zmm15, zmm15, zmm0
        vpxord  zmm12, zmm12, zmm1
        vpxord  zmm13, zmm13, zmm2
        vpxord  zmm14, zmm14, zmm3
        vprord  zmm15, zmm15, 8
        vprord  zmm12, zmm12, 8
        vprord  zmm13, zmm13, 8
        vprord  zmm14, zmm14, 8
        vpaddd  zmm10, zmm10, zmm15
        vpaddd  zmm11, zmm11, zmm12
        vpaddd  zmm8, zmm8, zmm13
        vpaddd  zmm9, zmm9, zmm14
        vpxord  zmm5, zmm5, zmm10
        vpxord  zmm6, zmm6, zmm11
        vpxord  zmm7, zmm7, zmm8
        vpxord  zmm4, zmm4, zmm9
        vprord  zmm5, zmm5, 7
        vprord  zmm6, zmm6, 7
        vprord  zmm7, zmm7, 7
        vprord  zmm4, zmm4, 7
        vpxord  zmm0, zmm0, zmm8
        vpxord  zmm1, zmm1, zmm9
        vpxord  zmm2, zmm2, zmm10
        vpxord  zmm3, zmm3, zmm11
        vpxord  zmm4, zmm4, zmm12
        vpxord  zmm5, zmm5, zmm13
        vpxord  zmm6, zmm6, zmm14
        vpxord  zmm7, zmm7, zmm15
        movzx   eax, byte ptr [rbp+0x38]
        jne     9b
        mov     rbx, qword ptr [rbp+0x50]
        vpunpckldq zmm16, zmm0, zmm1
        vpunpckhdq zmm17, zmm0, zmm1
        vpunpckldq zmm18, zmm2, zmm3
        vpunpckhdq zmm19, zmm2, zmm3
        vpunpckldq zmm20, zmm4, zmm5
        vpunpckhdq zmm21, zmm4, zmm5
        vpunpckldq zmm22, zmm6, zmm7
        vpunpckhdq zmm23, zmm6, zmm7
        vpunpcklqdq zmm0, zmm16, zmm18
        vpunpckhqdq zmm1, zmm16, zmm18
        vpunpcklqdq zmm2, zmm17, zmm19
        vpunpckhqdq zmm3, zmm17, zmm19
        vpunpcklqdq zmm4, zmm20, zmm22
        vpunpckhqdq zmm5, zmm20, zmm22
        vpunpcklqdq zmm6, zmm21, zmm23
        vpunpckhqdq zmm7, zmm21, zmm23
        vshufi32x4 zmm16, zmm0, zmm4, 0x88
        vshufi32x4 zmm17, zmm1, zmm5, 0x88
        vshufi32x4 zmm18, zmm2, zmm6, 0x88
        vshufi32x4 zmm19, zmm3, zmm7, 0x88
        vshufi32x4 zmm20, zmm0, zmm4, 0xDD
        vshufi32x4 zmm21, zmm1, zmm5, 0xDD
        vshufi32x4 zmm22, zmm2, zmm6, 0xDD
        vshufi32x4 zmm23, zmm3, zmm7, 0xDD
        vshufi32x4 zmm0, zmm16, zmm17, 0x88
        vshufi32x4 zmm1, zmm18, zmm19, 0x88
        vshufi32x4 zmm2, zmm20, zmm21, 0x88
        vshufi32x4 zmm3, zmm22, zmm23, 0x88
        vshufi32x4 zmm4, zmm16, zmm17, 0xDD
        vshufi32x4 zmm5, zmm18, zmm19, 0xDD
        vshufi32x4 zmm6, zmm20, zmm21, 0xDD
        vshufi32x4 zmm7, zmm22, zmm23, 0xDD
        vmovdqu32 zmmword ptr [rbx], zmm0
        vmovdqu32 zmmword ptr [rbx+0x1*0x40], zmm1
        vmovdqu32 zmmword ptr [rbx+0x2*0x40], zmm2
        vmovdqu32 zmmword ptr [rbx+0x3*0x40], zmm3
        vmovdqu32 zmmword ptr [rbx+0x4*0x40], zmm4
        vmovdqu32 zmmword ptr [rbx+0x5*0x40], zmm5
        vmovdqu32 zmmword ptr [rbx+0x6*0x40], zmm6
        vmovdqu32 zmmword ptr [rbx+0x7*0x40], zmm7
        vmovdqa32 zmm0, zmmword ptr [rsp]
        vmovdqa32 zmm1, zmmword ptr [rsp+0x1*0x40]
        vmovdqa32 zmm2, zmm0
        vpaddd  zmm2{k1}, zmm0, dword ptr [ADD16+rip] {1to16}
        vpcmpltud k2, zmm2, zmm0
        vpaddd  zmm1 {k2}, zmm1, dword ptr [ADD1+rip] {1to16}
        vmovdqa32 zmmword ptr [rsp], zmm2
        vmovdqa32 zmmword ptr [rsp+0x1*0x40], zmm1
        add     rdi, 128
        add     rbx, 512
        mov     qword ptr [rbp+0x50], rbx
        sub     rsi, 16
        cmp     rsi, 16
        jnc     2b
        test    rsi, rsi
        jnz     3f
4:
        vzeroupper
        mov     rsp, rbp
        pop     rbp
        pop     rbx
        pop     r12
        pop     r13
        pop     r14
        pop     r15
        ret
.p2align 6
3:
        test    esi, 0x8
        je      3f
        vpbroadcastd ymm0, dword ptr [rcx]
        vpbroadcastd ymm1, dword ptr [rcx+0x4]
        vpbroadcastd ymm2, dword ptr [rcx+0x8]
        vpbroadcastd ymm3, dword ptr [rcx+0xC]
        vpbroadcastd ymm4, dword ptr [rcx+0x10]
        vpbroadcastd ymm5, dword ptr [rcx+0x14]
        vpbroadcastd ymm6, dword ptr [rcx+0x18]
        vpbroadcastd ymm7, dword ptr [rcx+0x1C]
        mov     r8, qword ptr [rdi]
        mov     r9, qword ptr [rdi+0x8]
        mov     r10, qword ptr [rdi+0x10]
        mov     r11, qword ptr [rdi+0x18]
        mov     r12, qword ptr [rdi+0x20]
        mov     r13, qword ptr [rdi+0x28]
        mov     r14, qword ptr [rdi+0x30]
        mov     r15, qword ptr [rdi+0x38]
        movzx   eax, byte ptr [rbp+0x38]
        movzx   ebx, byte ptr [rbp+0x40]
        or      eax, ebx
        xor     edx, edx
2:
        movzx   ebx, byte ptr [rbp+0x48]
        or      ebx, eax
        add     rdx, 64
        cmp     rdx, qword ptr [rsp+0x80]
        cmove   eax, ebx
        mov     dword ptr [rsp+0x88], eax
        vmovups xmm8, xmmword ptr [r8+rdx-0x40]
        vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x40], 0x01
        vmovups xmm9, xmmword ptr [r9+rdx-0x40]
        vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x40], 0x01
        vunpcklpd ymm12, ymm8, ymm9
        vunpckhpd ymm13, ymm8, ymm9
        vmovups xmm10, xmmword ptr [r10+rdx-0x40]
        vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x40], 0x01
        vmovups xmm11, xmmword ptr [r11+rdx-0x40]
        vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x40], 0x01
        vunpcklpd ymm14, ymm10, ymm11
        vunpckhpd ymm15, ymm10, ymm11
        vshufps ymm16, ymm12, ymm14, 136
        vshufps ymm17, ymm12, ymm14, 221
        vshufps ymm18, ymm13, ymm15, 136
        vshufps ymm19, ymm13, ymm15, 221
        vmovups xmm8, xmmword ptr [r8+rdx-0x30]
        vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x30], 0x01
        vmovups xmm9, xmmword ptr [r9+rdx-0x30]
        vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x30], 0x01
        vunpcklpd ymm12, ymm8, ymm9
        vunpckhpd ymm13, ymm8, ymm9
        vmovups xmm10, xmmword ptr [r10+rdx-0x30]
        vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x30], 0x01
        vmovups xmm11, xmmword ptr [r11+rdx-0x30]
        vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x30], 0x01
        vunpcklpd ymm14, ymm10, ymm11
        vunpckhpd ymm15, ymm10, ymm11
        vshufps ymm20, ymm12, ymm14, 136
        vshufps ymm21, ymm12, ymm14, 221
        vshufps ymm22, ymm13, ymm15, 136
        vshufps ymm23, ymm13, ymm15, 221
        vmovups xmm8, xmmword ptr [r8+rdx-0x20]
        vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x20], 0x01
        vmovups xmm9, xmmword ptr [r9+rdx-0x20]
        vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x20], 0x01
        vunpcklpd ymm12, ymm8, ymm9
        vunpckhpd ymm13, ymm8, ymm9
        vmovups xmm10, xmmword ptr [r10+rdx-0x20]
        vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x20], 0x01
        vmovups xmm11, xmmword ptr [r11+rdx-0x20]
        vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x20], 0x01
        vunpcklpd ymm14, ymm10, ymm11
        vunpckhpd ymm15, ymm10, ymm11
        vshufps ymm24, ymm12, ymm14, 136
        vshufps ymm25, ymm12, ymm14, 221
        vshufps ymm26, ymm13, ymm15, 136
        vshufps ymm27, ymm13, ymm15, 221
        vmovups xmm8, xmmword ptr [r8+rdx-0x10]
        vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x10], 0x01
        vmovups xmm9, xmmword ptr [r9+rdx-0x10]
        vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x10], 0x01
        vunpcklpd ymm12, ymm8, ymm9
        vunpckhpd ymm13, ymm8, ymm9
        vmovups xmm10, xmmword ptr [r10+rdx-0x10]
        vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x10], 0x01
        vmovups xmm11, xmmword ptr [r11+rdx-0x10]
        vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x10], 0x01
        vunpcklpd ymm14, ymm10, ymm11
        vunpckhpd ymm15, ymm10, ymm11
        vshufps ymm28, ymm12, ymm14, 136
        vshufps ymm29, ymm12, ymm14, 221
        vshufps ymm30, ymm13, ymm15, 136
        vshufps ymm31, ymm13, ymm15, 221
        vpbroadcastd ymm8, dword ptr [BLAKE3_IV_0+rip]
        vpbroadcastd ymm9, dword ptr [BLAKE3_IV_1+rip]
        vpbroadcastd ymm10, dword ptr [BLAKE3_IV_2+rip]
        vpbroadcastd ymm11, dword ptr [BLAKE3_IV_3+rip]
        vmovdqa ymm12, ymmword ptr [rsp]
        vmovdqa ymm13, ymmword ptr [rsp+0x40]
        vpbroadcastd ymm14, dword ptr [BLAKE3_BLOCK_LEN+rip]
        vpbroadcastd ymm15, dword ptr [rsp+0x88]
        vpaddd  ymm0, ymm0, ymm16
        vpaddd  ymm1, ymm1, ymm18
        vpaddd  ymm2, ymm2, ymm20
        vpaddd  ymm3, ymm3, ymm22
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm1, ymm1, ymm5
        vpaddd  ymm2, ymm2, ymm6
        vpaddd  ymm3, ymm3, ymm7
        vpxord  ymm12, ymm12, ymm0
        vpxord  ymm13, ymm13, ymm1
        vpxord  ymm14, ymm14, ymm2
        vpxord  ymm15, ymm15, ymm3
        vprord  ymm12, ymm12, 16
        vprord  ymm13, ymm13, 16
        vprord  ymm14, ymm14, 16
        vprord  ymm15, ymm15, 16
        vpaddd  ymm8, ymm8, ymm12
        vpaddd  ymm9, ymm9, ymm13
        vpaddd  ymm10, ymm10, ymm14
        vpaddd  ymm11, ymm11, ymm15
        vpxord  ymm4, ymm4, ymm8
        vpxord  ymm5, ymm5, ymm9
        vpxord  ymm6, ymm6, ymm10
        vpxord  ymm7, ymm7, ymm11
        vprord  ymm4, ymm4, 12
        vprord  ymm5, ymm5, 12
        vprord  ymm6, ymm6, 12
        vprord  ymm7, ymm7, 12
        vpaddd  ymm0, ymm0, ymm17
        vpaddd  ymm1, ymm1, ymm19
        vpaddd  ymm2, ymm2, ymm21
        vpaddd  ymm3, ymm3, ymm23
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm1, ymm1, ymm5
        vpaddd  ymm2, ymm2, ymm6
        vpaddd  ymm3, ymm3, ymm7
        vpxord  ymm12, ymm12, ymm0
        vpxord  ymm13, ymm13, ymm1
        vpxord  ymm14, ymm14, ymm2
        vpxord  ymm15, ymm15, ymm3
        vprord  ymm12, ymm12, 8
        vprord  ymm13, ymm13, 8
        vprord  ymm14, ymm14, 8
        vprord  ymm15, ymm15, 8
        vpaddd  ymm8, ymm8, ymm12
        vpaddd  ymm9, ymm9, ymm13
        vpaddd  ymm10, ymm10, ymm14
        vpaddd  ymm11, ymm11, ymm15
        vpxord  ymm4, ymm4, ymm8
        vpxord  ymm5, ymm5, ymm9
        vpxord  ymm6, ymm6, ymm10
        vpxord  ymm7, ymm7, ymm11
        vprord  ymm4, ymm4, 7
        vprord  ymm5, ymm5, 7
        vprord  ymm6, ymm6, 7
        vprord  ymm7, ymm7, 7
        vpaddd  ymm0, ymm0, ymm24
        vpaddd  ymm1, ymm1, ymm26
        vpaddd  ymm2, ymm2, ymm28
        vpaddd  ymm3, ymm3, ymm30
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm1, ymm1, ymm6
        vpaddd  ymm2, ymm2, ymm7
        vpaddd  ymm3, ymm3, ymm4
        vpxord  ymm15, ymm15, ymm0
        vpxord  ymm12, ymm12, ymm1
        vpxord  ymm13, ymm13, ymm2
        vpxord  ymm14, ymm14, ymm3
        vprord  ymm15, ymm15, 16
        vprord  ymm12, ymm12, 16
        vprord  ymm13, ymm13, 16
        vprord  ymm14, ymm14, 16
        vpaddd  ymm10, ymm10, ymm15
        vpaddd  ymm11, ymm11, ymm12
        vpaddd  ymm8, ymm8, ymm13
        vpaddd  ymm9, ymm9, ymm14
        vpxord  ymm5, ymm5, ymm10
        vpxord  ymm6, ymm6, ymm11
        vpxord  ymm7, ymm7, ymm8
        vpxord  ymm4, ymm4, ymm9
        vprord  ymm5, ymm5, 12
        vprord  ymm6, ymm6, 12
        vprord  ymm7, ymm7, 12
        vprord  ymm4, ymm4, 12
        vpaddd  ymm0, ymm0, ymm25
        vpaddd  ymm1, ymm1, ymm27
        vpaddd  ymm2, ymm2, ymm29
        vpaddd  ymm3, ymm3, ymm31
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm1, ymm1, ymm6
        vpaddd  ymm2, ymm2, ymm7
        vpaddd  ymm3, ymm3, ymm4
        vpxord  ymm15, ymm15, ymm0
        vpxord  ymm12, ymm12, ymm1
        vpxord  ymm13, ymm13, ymm2
        vpxord  ymm14, ymm14, ymm3
        vprord  ymm15, ymm15, 8
        vprord  ymm12, ymm12, 8
        vprord  ymm13, ymm13, 8
        vprord  ymm14, ymm14, 8
        vpaddd  ymm10, ymm10, ymm15
        vpaddd  ymm11, ymm11, ymm12
        vpaddd  ymm8, ymm8, ymm13
        vpaddd  ymm9, ymm9, ymm14
        vpxord  ymm5, ymm5, ymm10
        vpxord  ymm6, ymm6, ymm11
        vpxord  ymm7, ymm7, ymm8
        vpxord  ymm4, ymm4, ymm9
        vprord  ymm5, ymm5, 7
        vprord  ymm6, ymm6, 7
        vprord  ymm7, ymm7, 7
        vprord  ymm4, ymm4, 7
        vpaddd  ymm0, ymm0, ymm18
        vpaddd  ymm1, ymm1, ymm19
        vpaddd  ymm2, ymm2, ymm23
        vpaddd  ymm3, ymm3, ymm20
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm1, ymm1, ymm5
        vpaddd  ymm2, ymm2, ymm6
        vpaddd  ymm3, ymm3, ymm7
        vpxord  ymm12, ymm12, ymm0
        vpxord  ymm13, ymm13, ymm1
        vpxord  ymm14, ymm14, ymm2
        vpxord  ymm15, ymm15, ymm3
        vprord  ymm12, ymm12, 16
        vprord  ymm13, ymm13, 16
        vprord  ymm14, ymm14, 16
        vprord  ymm15, ymm15, 16
        vpaddd  ymm8, ymm8, ymm12
        vpaddd  ymm9, ymm9, ymm13
        vpaddd  ymm10, ymm10, ymm14
        vpaddd  ymm11, ymm11, ymm15
        vpxord  ymm4, ymm4, ymm8
        vpxord  ymm5, ymm5, ymm9
        vpxord  ymm6, ymm6, ymm10
        vpxord  ymm7, ymm7, ymm11
        vprord  ymm4, ymm4, 12
        vprord  ymm5, ymm5, 12
        vprord  ymm6, ymm6, 12
        vprord  ymm7, ymm7, 12
        vpaddd  ymm0, ymm0, ymm22
        vpaddd  ymm1, ymm1, ymm26
        vpaddd  ymm2, ymm2, ymm16
        vpaddd  ymm3, ymm3, ymm29
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm1, ymm1, ymm5
        vpaddd  ymm2, ymm2, ymm6
        vpaddd  ymm3, ymm3, ymm7
        vpxord  ymm12, ymm12, ymm0
        vpxord  ymm13, ymm13, ymm1
        vpxord  ymm14, ymm14, ymm2
        vpxord  ymm15, ymm15, ymm3
        vprord  ymm12, ymm12, 8
        vprord  ymm13, ymm13, 8
        vprord  ymm14, ymm14, 8
        vprord  ymm15, ymm15, 8
        vpaddd  ymm8, ymm8, ymm12
        vpaddd  ymm9, ymm9, ymm13
        vpaddd  ymm10, ymm10, ymm14
        vpaddd  ymm11, ymm11, ymm15
        vpxord  ymm4, ymm4, ymm8
        vpxord  ymm5, ymm5, ymm9
        vpxord  ymm6, ymm6, ymm10
        vpxord  ymm7, ymm7, ymm11
        vprord  ymm4, ymm4, 7
        vprord  ymm5, ymm5, 7
        vprord  ymm6, ymm6, 7
        vprord  ymm7, ymm7, 7
        vpaddd  ymm0, ymm0, ymm17
        vpaddd  ymm1, ymm1, ymm28
        vpaddd  ymm2, ymm2, ymm25
        vpaddd  ymm3, ymm3, ymm31
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm1, ymm1, ymm6
        vpaddd  ymm2, ymm2, ymm7
        vpaddd  ymm3, ymm3, ymm4
        vpxord  ymm15, ymm15, ymm0
        vpxord  ymm12, ymm12, ymm1
        vpxord  ymm13, ymm13, ymm2
        vpxord  ymm14, ymm14, ymm3
        vprord  ymm15, ymm15, 16
        vprord  ymm12, ymm12, 16
        vprord  ymm13, ymm13, 16
        vprord  ymm14, ymm14, 16
        vpaddd  ymm10, ymm10, ymm15
        vpaddd  ymm11, ymm11, ymm12
        vpaddd  ymm8, ymm8, ymm13
        vpaddd  ymm9, ymm9, ymm14
        vpxord  ymm5, ymm5, ymm10
        vpxord  ymm6, ymm6, ymm11
        vpxord  ymm7, ymm7, ymm8
        vpxord  ymm4, ymm4, ymm9
        vprord  ymm5, ymm5, 12
        vprord  ymm6, ymm6, 12
        vprord  ymm7, ymm7, 12
        vprord  ymm4, ymm4, 12
        vpaddd  ymm0, ymm0, ymm27
        vpaddd  ymm1, ymm1, ymm21
        vpaddd  ymm2, ymm2, ymm30
        vpaddd  ymm3, ymm3, ymm24
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm1, ymm1, ymm6
        vpaddd  ymm2, ymm2, ymm7
        vpaddd  ymm3, ymm3, ymm4
        vpxord  ymm15, ymm15, ymm0
        vpxord  ymm12, ymm12, ymm1
        vpxord  ymm13, ymm13, ymm2
        vpxord  ymm14, ymm14, ymm3
        vprord  ymm15, ymm15, 8
        vprord  ymm12, ymm12, 8
        vprord  ymm13, ymm13, 8
        vprord  ymm14, ymm14, 8
        vpaddd  ymm10, ymm10, ymm15
        vpaddd  ymm11, ymm11, ymm12
        vpaddd  ymm8, ymm8, ymm13
        vpaddd  ymm9, ymm9, ymm14
        vpxord  ymm5, ymm5, ymm10
        vpxord  ymm6, ymm6, ymm11
        vpxord  ymm7, ymm7, ymm8
        vpxord  ymm4, ymm4, ymm9
        vprord  ymm5, ymm5, 7
        vprord  ymm6, ymm6, 7
        vprord  ymm7, ymm7, 7
        vprord  ymm4, ymm4, 7
        vpaddd  ymm0, ymm0, ymm19
        vpaddd  ymm1, ymm1, ymm26
        vpaddd  ymm2, ymm2, ymm29
        vpaddd  ymm3, ymm3, ymm23
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm1, ymm1, ymm5
        vpaddd  ymm2, ymm2, ymm6
        vpaddd  ymm3, ymm3, ymm7
        vpxord  ymm12, ymm12, ymm0
        vpxord  ymm13, ymm13, ymm1
        vpxord  ymm14, ymm14, ymm2
        vpxord  ymm15, ymm15, ymm3
        vprord  ymm12, ymm12, 16
        vprord  ymm13, ymm13, 16
        vprord  ymm14, ymm14, 16
        vprord  ymm15, ymm15, 16
        vpaddd  ymm8, ymm8, ymm12
        vpaddd  ymm9, ymm9, ymm13
        vpaddd  ymm10, ymm10, ymm14
        vpaddd  ymm11, ymm11, ymm15
        vpxord  ymm4, ymm4, ymm8
        vpxord  ymm5, ymm5, ymm9
        vpxord  ymm6, ymm6, ymm10
        vpxord  ymm7, ymm7, ymm11
        vprord  ymm4, ymm4, 12
        vprord  ymm5, ymm5, 12
        vprord  ymm6, ymm6, 12
        vprord  ymm7, ymm7, 12
        vpaddd  ymm0, ymm0, ymm20
        vpaddd  ymm1, ymm1, ymm28
        vpaddd  ymm2, ymm2, ymm18
        vpaddd  ymm3, ymm3, ymm30
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm1, ymm1, ymm5
        vpaddd  ymm2, ymm2, ymm6
        vpaddd  ymm3, ymm3, ymm7
        vpxord  ymm12, ymm12, ymm0
        vpxord  ymm13, ymm13, ymm1
        vpxord  ymm14, ymm14, ymm2
        vpxord  ymm15, ymm15, ymm3
        vprord  ymm12, ymm12, 8
        vprord  ymm13, ymm13, 8
        vprord  ymm14, ymm14, 8
        vprord  ymm15, ymm15, 8
        vpaddd  ymm8, ymm8, ymm12
        vpaddd  ymm9, ymm9, ymm13
        vpaddd  ymm10, ymm10, ymm14
        vpaddd  ymm11, ymm11, ymm15
        vpxord  ymm4, ymm4, ymm8
        vpxord  ymm5, ymm5, ymm9
        vpxord  ymm6, ymm6, ymm10
        vpxord  ymm7, ymm7, ymm11
        vprord  ymm4, ymm4, 7
        vprord  ymm5, ymm5, 7
        vprord  ymm6, ymm6, 7
        vprord  ymm7, ymm7, 7
        vpaddd  ymm0, ymm0, ymm22
        vpaddd  ymm1, ymm1, ymm25
        vpaddd  ymm2, ymm2, ymm27
        vpaddd  ymm3, ymm3, ymm24
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm1, ymm1, ymm6
        vpaddd  ymm2, ymm2, ymm7
        vpaddd  ymm3, ymm3, ymm4
        vpxord  ymm15, ymm15, ymm0
        vpxord  ymm12, ymm12, ymm1
        vpxord  ymm13, ymm13, ymm2
        vpxord  ymm14, ymm14, ymm3
        vprord  ymm15, ymm15, 16
        vprord  ymm12, ymm12, 16
        vprord  ymm13, ymm13, 16
        vprord  ymm14, ymm14, 16
        vpaddd  ymm10, ymm10, ymm15
        vpaddd  ymm11, ymm11, ymm12
        vpaddd  ymm8, ymm8, ymm13
        vpaddd  ymm9, ymm9, ymm14
        vpxord  ymm5, ymm5, ymm10
        vpxord  ymm6, ymm6, ymm11
        vpxord  ymm7, ymm7, ymm8
        vpxord  ymm4, ymm4, ymm9
        vprord  ymm5, ymm5, 12
        vprord  ymm6, ymm6, 12
        vprord  ymm7, ymm7, 12
        vprord  ymm4, ymm4, 12
        vpaddd  ymm0, ymm0, ymm21
        vpaddd  ymm1, ymm1, ymm16
        vpaddd  ymm2, ymm2, ymm31
        vpaddd  ymm3, ymm3, ymm17
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm1, ymm1, ymm6
        vpaddd  ymm2, ymm2, ymm7
        vpaddd  ymm3, ymm3, ymm4
        vpxord  ymm15, ymm15, ymm0
        vpxord  ymm12, ymm12, ymm1
        vpxord  ymm13, ymm13, ymm2
        vpxord  ymm14, ymm14, ymm3
        vprord  ymm15, ymm15, 8
        vprord  ymm12, ymm12, 8
        vprord  ymm13, ymm13, 8
        vprord  ymm14, ymm14, 8
        vpaddd  ymm10, ymm10, ymm15
        vpaddd  ymm11, ymm11, ymm12
        vpaddd  ymm8, ymm8, ymm13
        vpaddd  ymm9, ymm9, ymm14
        vpxord  ymm5, ymm5, ymm10
        vpxord  ymm6, ymm6, ymm11
        vpxord  ymm7, ymm7, ymm8
        vpxord  ymm4, ymm4, ymm9
        vprord  ymm5, ymm5, 7
        vprord  ymm6, ymm6, 7
        vprord  ymm7, ymm7, 7
        vprord  ymm4, ymm4, 7
        vpaddd  ymm0, ymm0, ymm26
        vpaddd  ymm1, ymm1, ymm28
        vpaddd  ymm2, ymm2, ymm30
        vpaddd  ymm3, ymm3, ymm29
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm1, ymm1, ymm5
        vpaddd  ymm2, ymm2, ymm6
        vpaddd  ymm3, ymm3, ymm7
        vpxord  ymm12, ymm12, ymm0
        vpxord  ymm13, ymm13, ymm1
        vpxord  ymm14, ymm14, ymm2
        vpxord  ymm15, ymm15, ymm3
        vprord  ymm12, ymm12, 16
        vprord  ymm13, ymm13, 16
        vprord  ymm14, ymm14, 16
        vprord  ymm15, ymm15, 16
        vpaddd  ymm8, ymm8, ymm12
        vpaddd  ymm9, ymm9, ymm13
        vpaddd  ymm10, ymm10, ymm14
        vpaddd  ymm11, ymm11, ymm15
        vpxord  ymm4, ymm4, ymm8
        vpxord  ymm5, ymm5, ymm9
        vpxord  ymm6, ymm6, ymm10
        vpxord  ymm7, ymm7, ymm11
        vprord  ymm4, ymm4, 12
        vprord  ymm5, ymm5, 12
        vprord  ymm6, ymm6, 12
        vprord  ymm7, ymm7, 12
        vpaddd  ymm0, ymm0, ymm23
        vpaddd  ymm1, ymm1, ymm25
        vpaddd  ymm2, ymm2, ymm19
        vpaddd  ymm3, ymm3, ymm31
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm1, ymm1, ymm5
        vpaddd  ymm2, ymm2, ymm6
        vpaddd  ymm3, ymm3, ymm7
        vpxord  ymm12, ymm12, ymm0
        vpxord  ymm13, ymm13, ymm1
        vpxord  ymm14, ymm14, ymm2
        vpxord  ymm15, ymm15, ymm3
        vprord  ymm12, ymm12, 8
        vprord  ymm13, ymm13, 8
        vprord  ymm14, ymm14, 8
        vprord  ymm15, ymm15, 8
        vpaddd  ymm8, ymm8, ymm12
        vpaddd  ymm9, ymm9, ymm13
        vpaddd  ymm10, ymm10, ymm14
        vpaddd  ymm11, ymm11, ymm15
        vpxord  ymm4, ymm4, ymm8
        vpxord  ymm5, ymm5, ymm9
        vpxord  ymm6, ymm6, ymm10
        vpxord  ymm7, ymm7, ymm11
        vprord  ymm4, ymm4, 7
        vprord  ymm5, ymm5, 7
        vprord  ymm6, ymm6, 7
        vprord  ymm7, ymm7, 7
        vpaddd  ymm0, ymm0, ymm20
        vpaddd  ymm1, ymm1, ymm27
        vpaddd  ymm2, ymm2, ymm21
        vpaddd  ymm3, ymm3, ymm17
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm1, ymm1, ymm6
        vpaddd  ymm2, ymm2, ymm7
        vpaddd  ymm3, ymm3, ymm4
        vpxord  ymm15, ymm15, ymm0
        vpxord  ymm12, ymm12, ymm1
        vpxord  ymm13, ymm13, ymm2
        vpxord  ymm14, ymm14, ymm3
        vprord  ymm15, ymm15, 16
        vprord  ymm12, ymm12, 16
        vprord  ymm13, ymm13, 16
        vprord  ymm14, ymm14, 16
        vpaddd  ymm10, ymm10, ymm15
        vpaddd  ymm11, ymm11, ymm12
        vpaddd  ymm8, ymm8, ymm13
        vpaddd  ymm9, ymm9, ymm14
        vpxord  ymm5, ymm5, ymm10
        vpxord  ymm6, ymm6, ymm11
        vpxord  ymm7, ymm7, ymm8
        vpxord  ymm4, ymm4, ymm9
        vprord  ymm5, ymm5, 12
        vprord  ymm6, ymm6, 12
        vprord  ymm7, ymm7, 12
        vprord  ymm4, ymm4, 12
        vpaddd  ymm0, ymm0, ymm16
        vpaddd  ymm1, ymm1, ymm18
        vpaddd  ymm2, ymm2, ymm24
        vpaddd  ymm3, ymm3, ymm22
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm1, ymm1, ymm6
        vpaddd  ymm2, ymm2, ymm7
        vpaddd  ymm3, ymm3, ymm4
        vpxord  ymm15, ymm15, ymm0
        vpxord  ymm12, ymm12, ymm1
        vpxord  ymm13, ymm13, ymm2
        vpxord  ymm14, ymm14, ymm3
        vprord  ymm15, ymm15, 8
        vprord  ymm12, ymm12, 8
        vprord  ymm13, ymm13, 8
        vprord  ymm14, ymm14, 8
        vpaddd  ymm10, ymm10, ymm15
        vpaddd  ymm11, ymm11, ymm12
        vpaddd  ymm8, ymm8, ymm13
        vpaddd  ymm9, ymm9, ymm14
        vpxord  ymm5, ymm5, ymm10
        vpxord  ymm6, ymm6, ymm11
        vpxord  ymm7, ymm7, ymm8
        vpxord  ymm4, ymm4, ymm9
        vprord  ymm5, ymm5, 7
        vprord  ymm6, ymm6, 7
        vprord  ymm7, ymm7, 7
        vprord  ymm4, ymm4, 7
        vpaddd  ymm0, ymm0, ymm28
        vpaddd  ymm1, ymm1, ymm25
        vpaddd  ymm2, ymm2, ymm31
        vpaddd  ymm3, ymm3, ymm30
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm1, ymm1, ymm5
        vpaddd  ymm2, ymm2, ymm6
        vpaddd  ymm3, ymm3, ymm7
        vpxord  ymm12, ymm12, ymm0
        vpxord  ymm13, ymm13, ymm1
        vpxord  ymm14, ymm14, ymm2
        vpxord  ymm15, ymm15, ymm3
        vprord  ymm12, ymm12, 16
        vprord  ymm13, ymm13, 16
        vprord  ymm14, ymm14, 16
        vprord  ymm15, ymm15, 16
        vpaddd  ymm8, ymm8, ymm12
        vpaddd  ymm9, ymm9, ymm13
        vpaddd  ymm10, ymm10, ymm14
        vpaddd  ymm11, ymm11, ymm15
        vpxord  ymm4, ymm4, ymm8
        vpxord  ymm5, ymm5, ymm9
        vpxord  ymm6, ymm6, ymm10
        vpxord  ymm7, ymm7, ymm11
        vprord  ymm4, ymm4, 12
        vprord  ymm5, ymm5, 12
        vprord  ymm6, ymm6, 12
        vprord  ymm7, ymm7, 12
        vpaddd  ymm0, ymm0, ymm29
        vpaddd  ymm1, ymm1, ymm27
        vpaddd  ymm2, ymm2, ymm26
        vpaddd  ymm3, ymm3, ymm24
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm1, ymm1, ymm5
        vpaddd  ymm2, ymm2, ymm6
        vpaddd  ymm3, ymm3, ymm7
        vpxord  ymm12, ymm12, ymm0
        vpxord  ymm13, ymm13, ymm1
        vpxord  ymm14, ymm14, ymm2
        vpxord  ymm15, ymm15, ymm3
        vprord  ymm12, ymm12, 8
        vprord  ymm13, ymm13, 8
        vprord  ymm14, ymm14, 8
        vprord  ymm15, ymm15, 8
        vpaddd  ymm8, ymm8, ymm12
        vpaddd  ymm9, ymm9, ymm13
        vpaddd  ymm10, ymm10, ymm14
        vpaddd  ymm11, ymm11, ymm15
        vpxord  ymm4, ymm4, ymm8
        vpxord  ymm5, ymm5, ymm9
        vpxord  ymm6, ymm6, ymm10
        vpxord  ymm7, ymm7, ymm11
        vprord  ymm4, ymm4, 7
        vprord  ymm5, ymm5, 7
        vprord  ymm6, ymm6, 7
        vprord  ymm7, ymm7, 7
        vpaddd  ymm0, ymm0, ymm23
        vpaddd  ymm1, ymm1, ymm21
        vpaddd  ymm2, ymm2, ymm16
        vpaddd  ymm3, ymm3, ymm22
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm1, ymm1, ymm6
        vpaddd  ymm2, ymm2, ymm7
        vpaddd  ymm3, ymm3, ymm4
        vpxord  ymm15, ymm15, ymm0
        vpxord  ymm12, ymm12, ymm1
        vpxord  ymm13, ymm13, ymm2
        vpxord  ymm14, ymm14, ymm3
        vprord  ymm15, ymm15, 16
        vprord  ymm12, ymm12, 16
        vprord  ymm13, ymm13, 16
        vprord  ymm14, ymm14, 16
        vpaddd  ymm10, ymm10, ymm15
        vpaddd  ymm11, ymm11, ymm12
        vpaddd  ymm8, ymm8, ymm13
        vpaddd  ymm9, ymm9, ymm14
        vpxord  ymm5, ymm5, ymm10
        vpxord  ymm6, ymm6, ymm11
        vpxord  ymm7, ymm7, ymm8
        vpxord  ymm4, ymm4, ymm9
        vprord  ymm5, ymm5, 12
        vprord  ymm6, ymm6, 12
        vprord  ymm7, ymm7, 12
        vprord  ymm4, ymm4, 12
        vpaddd  ymm0, ymm0, ymm18
        vpaddd  ymm1, ymm1, ymm19
        vpaddd  ymm2, ymm2, ymm17
        vpaddd  ymm3, ymm3, ymm20
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm1, ymm1, ymm6
        vpaddd  ymm2, ymm2, ymm7
        vpaddd  ymm3, ymm3, ymm4
        vpxord  ymm15, ymm15, ymm0
        vpxord  ymm12, ymm12, ymm1
        vpxord  ymm13, ymm13, ymm2
        vpxord  ymm14, ymm14, ymm3
        vprord  ymm15, ymm15, 8
        vprord  ymm12, ymm12, 8
        vprord  ymm13, ymm13, 8
        vprord  ymm14, ymm14, 8
        vpaddd  ymm10, ymm10, ymm15
        vpaddd  ymm11, ymm11, ymm12
        vpaddd  ymm8, ymm8, ymm13
        vpaddd  ymm9, ymm9, ymm14
        vpxord  ymm5, ymm5, ymm10
        vpxord  ymm6, ymm6, ymm11
        vpxord  ymm7, ymm7, ymm8
        vpxord  ymm4, ymm4, ymm9
        vprord  ymm5, ymm5, 7
        vprord  ymm6, ymm6, 7
        vprord  ymm7, ymm7, 7
        vprord  ymm4, ymm4, 7
        vpaddd  ymm0, ymm0, ymm25
        vpaddd  ymm1, ymm1, ymm27
        vpaddd  ymm2, ymm2, ymm24
        vpaddd  ymm3, ymm3, ymm31
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm1, ymm1, ymm5
        vpaddd  ymm2, ymm2, ymm6
        vpaddd  ymm3, ymm3, ymm7
        vpxord  ymm12, ymm12, ymm0
        vpxord  ymm13, ymm13, ymm1
        vpxord  ymm14, ymm14, ymm2
        vpxord  ymm15, ymm15, ymm3
        vprord  ymm12, ymm12, 16
        vprord  ymm13, ymm13, 16
        vprord  ymm14, ymm14, 16
        vprord  ymm15, ymm15, 16
        vpaddd  ymm8, ymm8, ymm12
        vpaddd  ymm9, ymm9, ymm13
        vpaddd  ymm10, ymm10, ymm14
        vpaddd  ymm11, ymm11, ymm15
        vpxord  ymm4, ymm4, ymm8
        vpxord  ymm5, ymm5, ymm9
        vpxord  ymm6, ymm6, ymm10
        vpxord  ymm7, ymm7, ymm11
        vprord  ymm4, ymm4, 12
        vprord  ymm5, ymm5, 12
        vprord  ymm6, ymm6, 12
        vprord  ymm7, ymm7, 12
        vpaddd  ymm0, ymm0, ymm30
        vpaddd  ymm1, ymm1, ymm21
        vpaddd  ymm2, ymm2, ymm28
        vpaddd  ymm3, ymm3, ymm17
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm1, ymm1, ymm5
        vpaddd  ymm2, ymm2, ymm6
        vpaddd  ymm3, ymm3, ymm7
        vpxord  ymm12, ymm12, ymm0
        vpxord  ymm13, ymm13, ymm1
        vpxord  ymm14, ymm14, ymm2
        vpxord  ymm15, ymm15, ymm3
        vprord  ymm12, ymm12, 8
        vprord  ymm13, ymm13, 8
        vprord  ymm14, ymm14, 8
        vprord  ymm15, ymm15, 8
        vpaddd  ymm8, ymm8, ymm12
        vpaddd  ymm9, ymm9, ymm13
        vpaddd  ymm10, ymm10, ymm14
        vpaddd  ymm11, ymm11, ymm15
        vpxord  ymm4, ymm4, ymm8
        vpxord  ymm5, ymm5, ymm9
        vpxord  ymm6, ymm6, ymm10
        vpxord  ymm7, ymm7, ymm11
        vprord  ymm4, ymm4, 7
        vprord  ymm5, ymm5, 7
        vprord  ymm6, ymm6, 7
        vprord  ymm7, ymm7, 7
        vpaddd  ymm0, ymm0, ymm29
        vpaddd  ymm1, ymm1, ymm16
        vpaddd  ymm2, ymm2, ymm18
        vpaddd  ymm3, ymm3, ymm20
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm1, ymm1, ymm6
        vpaddd  ymm2, ymm2, ymm7
        vpaddd  ymm3, ymm3, ymm4
        vpxord  ymm15, ymm15, ymm0
        vpxord  ymm12, ymm12, ymm1
        vpxord  ymm13, ymm13, ymm2
        vpxord  ymm14, ymm14, ymm3
        vprord  ymm15, ymm15, 16
        vprord  ymm12, ymm12, 16
        vprord  ymm13, ymm13, 16
        vprord  ymm14, ymm14, 16
        vpaddd  ymm10, ymm10, ymm15
        vpaddd  ymm11, ymm11, ymm12
        vpaddd  ymm8, ymm8, ymm13
        vpaddd  ymm9, ymm9, ymm14
        vpxord  ymm5, ymm5, ymm10
        vpxord  ymm6, ymm6, ymm11
        vpxord  ymm7, ymm7, ymm8
        vpxord  ymm4, ymm4, ymm9
        vprord  ymm5, ymm5, 12
        vprord  ymm6, ymm6, 12
        vprord  ymm7, ymm7, 12
        vprord  ymm4, ymm4, 12
        vpaddd  ymm0, ymm0, ymm19
        vpaddd  ymm1, ymm1, ymm26
        vpaddd  ymm2, ymm2, ymm22
        vpaddd  ymm3, ymm3, ymm23
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm1, ymm1, ymm6
        vpaddd  ymm2, ymm2, ymm7
        vpaddd  ymm3, ymm3, ymm4
        vpxord  ymm15, ymm15, ymm0
        vpxord  ymm12, ymm12, ymm1
        vpxord  ymm13, ymm13, ymm2
        vpxord  ymm14, ymm14, ymm3
        vprord  ymm15, ymm15, 8
        vprord  ymm12, ymm12, 8
        vprord  ymm13, ymm13, 8
        vprord  ymm14, ymm14, 8
        vpaddd  ymm10, ymm10, ymm15
        vpaddd  ymm11, ymm11, ymm12
        vpaddd  ymm8, ymm8, ymm13
        vpaddd  ymm9, ymm9, ymm14
        vpxord  ymm5, ymm5, ymm10
        vpxord  ymm6, ymm6, ymm11
        vpxord  ymm7, ymm7, ymm8
        vpxord  ymm4, ymm4, ymm9
        vprord  ymm5, ymm5, 7
        vprord  ymm6, ymm6, 7
        vprord  ymm7, ymm7, 7
        vprord  ymm4, ymm4, 7
        vpaddd  ymm0, ymm0, ymm27
        vpaddd  ymm1, ymm1, ymm21
        vpaddd  ymm2, ymm2, ymm17
        vpaddd  ymm3, ymm3, ymm24
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm1, ymm1, ymm5
        vpaddd  ymm2, ymm2, ymm6
        vpaddd  ymm3, ymm3, ymm7
        vpxord  ymm12, ymm12, ymm0
        vpxord  ymm13, ymm13, ymm1
        vpxord  ymm14, ymm14, ymm2
        vpxord  ymm15, ymm15, ymm3
        vprord  ymm12, ymm12, 16
        vprord  ymm13, ymm13, 16
        vprord  ymm14, ymm14, 16
        vprord  ymm15, ymm15, 16
        vpaddd  ymm8, ymm8, ymm12
        vpaddd  ymm9, ymm9, ymm13
        vpaddd  ymm10, ymm10, ymm14
        vpaddd  ymm11, ymm11, ymm15
        vpxord  ymm4, ymm4, ymm8
        vpxord  ymm5, ymm5, ymm9
        vpxord  ymm6, ymm6, ymm10
        vpxord  ymm7, ymm7, ymm11
        vprord  ymm4, ymm4, 12
        vprord  ymm5, ymm5, 12
        vprord  ymm6, ymm6, 12
        vprord  ymm7, ymm7, 12
        vpaddd  ymm0, ymm0, ymm31
        vpaddd  ymm1, ymm1, ymm16
        vpaddd  ymm2, ymm2, ymm25
        vpaddd  ymm3, ymm3, ymm22
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm1, ymm1, ymm5
        vpaddd  ymm2, ymm2, ymm6
        vpaddd  ymm3, ymm3, ymm7
        vpxord  ymm12, ymm12, ymm0
        vpxord  ymm13, ymm13, ymm1
        vpxord  ymm14, ymm14, ymm2
        vpxord  ymm15, ymm15, ymm3
        vprord  ymm12, ymm12, 8
        vprord  ymm13, ymm13, 8
        vprord  ymm14, ymm14, 8
        vprord  ymm15, ymm15, 8
        vpaddd  ymm8, ymm8, ymm12
        vpaddd  ymm9, ymm9, ymm13
        vpaddd  ymm10, ymm10, ymm14
        vpaddd  ymm11, ymm11, ymm15
        vpxord  ymm4, ymm4, ymm8
        vpxord  ymm5, ymm5, ymm9
        vpxord  ymm6, ymm6, ymm10
        vpxord  ymm7, ymm7, ymm11
        vprord  ymm4, ymm4, 7
        vprord  ymm5, ymm5, 7
        vprord  ymm6, ymm6, 7
        vprord  ymm7, ymm7, 7
        vpaddd  ymm0, ymm0, ymm30
        vpaddd  ymm1, ymm1, ymm18
        vpaddd  ymm2, ymm2, ymm19
        vpaddd  ymm3, ymm3, ymm23
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm1, ymm1, ymm6
        vpaddd  ymm2, ymm2, ymm7
        vpaddd  ymm3, ymm3, ymm4
        vpxord  ymm15, ymm15, ymm0
        vpxord  ymm12, ymm12, ymm1
        vpxord  ymm13, ymm13, ymm2
        vpxord  ymm14, ymm14, ymm3
        vprord  ymm15, ymm15, 16
        vprord  ymm12, ymm12, 16
        vprord  ymm13, ymm13, 16
        vprord  ymm14, ymm14, 16
        vpaddd  ymm10, ymm10, ymm15
        vpaddd  ymm11, ymm11, ymm12
        vpaddd  ymm8, ymm8, ymm13
        vpaddd  ymm9, ymm9, ymm14
        vpxord  ymm5, ymm5, ymm10
        vpxord  ymm6, ymm6, ymm11
        vpxord  ymm7, ymm7, ymm8
        vpxord  ymm4, ymm4, ymm9
        vprord  ymm5, ymm5, 12
        vprord  ymm6, ymm6, 12
        vprord  ymm7, ymm7, 12
        vprord  ymm4, ymm4, 12
        vpaddd  ymm0, ymm0, ymm26
        vpaddd  ymm1, ymm1, ymm28
        vpaddd  ymm2, ymm2, ymm20
        vpaddd  ymm3, ymm3, ymm29
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm1, ymm1, ymm6
        vpaddd  ymm2, ymm2, ymm7
        vpaddd  ymm3, ymm3, ymm4
        vpxord  ymm15, ymm15, ymm0
        vpxord  ymm12, ymm12, ymm1
        vpxord  ymm13, ymm13, ymm2
        vpxord  ymm14, ymm14, ymm3
        vprord  ymm15, ymm15, 8
        vprord  ymm12, ymm12, 8
        vprord  ymm13, ymm13, 8
        vprord  ymm14, ymm14, 8
        vpaddd  ymm10, ymm10, ymm15
        vpaddd  ymm11, ymm11, ymm12
        vpaddd  ymm8, ymm8, ymm13
        vpaddd  ymm9, ymm9, ymm14
        vpxord  ymm5, ymm5, ymm10
        vpxord  ymm6, ymm6, ymm11
        vpxord  ymm7, ymm7, ymm8
        vpxord  ymm4, ymm4, ymm9
        vprord  ymm5, ymm5, 7
        vprord  ymm6, ymm6, 7
        vprord  ymm7, ymm7, 7
        vprord  ymm4, ymm4, 7
        vpxor   ymm0, ymm0, ymm8
        vpxor   ymm1, ymm1, ymm9
        vpxor   ymm2, ymm2, ymm10
        vpxor   ymm3, ymm3, ymm11
        vpxor   ymm4, ymm4, ymm12
        vpxor   ymm5, ymm5, ymm13
        vpxor   ymm6, ymm6, ymm14
        vpxor   ymm7, ymm7, ymm15
        movzx   eax, byte ptr [rbp+0x38]
        jne     2b
        mov     rbx, qword ptr [rbp+0x50]
        vunpcklps ymm8, ymm0, ymm1
        vunpcklps ymm9, ymm2, ymm3
        vunpckhps ymm10, ymm0, ymm1
        vunpcklps ymm11, ymm4, ymm5
        vunpcklps ymm0, ymm6, ymm7
        vshufps ymm12, ymm8, ymm9, 78
        vblendps ymm1, ymm8, ymm12, 0xCC
        vshufps ymm8, ymm11, ymm0, 78
        vunpckhps ymm13, ymm2, ymm3
        vblendps ymm2, ymm11, ymm8, 0xCC
        vblendps ymm3, ymm12, ymm9, 0xCC
        vperm2f128 ymm12, ymm1, ymm2, 0x20
        vmovups ymmword ptr [rbx], ymm12
        vunpckhps ymm14, ymm4, ymm5
        vblendps ymm4, ymm8, ymm0, 0xCC
        vunpckhps ymm15, ymm6, ymm7
        vperm2f128 ymm7, ymm3, ymm4, 0x20
        vmovups ymmword ptr [rbx+0x20], ymm7
        vshufps ymm5, ymm10, ymm13, 78
        vblendps ymm6, ymm5, ymm13, 0xCC
        vshufps ymm13, ymm14, ymm15, 78
        vblendps ymm10, ymm10, ymm5, 0xCC
        vblendps ymm14, ymm14, ymm13, 0xCC
        vperm2f128 ymm8, ymm10, ymm14, 0x20
        vmovups ymmword ptr [rbx+0x40], ymm8
        vblendps ymm15, ymm13, ymm15, 0xCC
        vperm2f128 ymm13, ymm6, ymm15, 0x20
        vmovups ymmword ptr [rbx+0x60], ymm13
        vperm2f128 ymm9, ymm1, ymm2, 0x31
        vperm2f128 ymm11, ymm3, ymm4, 0x31
        vmovups ymmword ptr [rbx+0x80], ymm9
        vperm2f128 ymm14, ymm10, ymm14, 0x31
        vperm2f128 ymm15, ymm6, ymm15, 0x31
        vmovups ymmword ptr [rbx+0xA0], ymm11
        vmovups ymmword ptr [rbx+0xC0], ymm14
        vmovups ymmword ptr [rbx+0xE0], ymm15
        vmovdqa ymm0, ymmword ptr [rsp]
        vmovdqa ymm2, ymmword ptr [rsp+0x2*0x20]
        vmovdqa32 ymm0 {k1}, ymmword ptr [rsp+0x1*0x20]
        vmovdqa32 ymm2 {k1}, ymmword ptr [rsp+0x3*0x20]
        vmovdqa ymmword ptr [rsp], ymm0
        vmovdqa ymmword ptr [rsp+0x2*0x20], ymm2
        add     rbx, 256
        mov     qword ptr [rbp+0x50], rbx
        add     rdi, 64
        sub     rsi, 8
3:
        mov     rbx, qword ptr [rbp+0x50]
        mov     r15, qword ptr [rsp+0x80]
        movzx   r13, byte ptr [rbp+0x38]
        movzx   r12, byte ptr [rbp+0x48]
        test    esi, 0x4
        je      3f
        vbroadcasti32x4 zmm0, xmmword ptr [rcx]
        vbroadcasti32x4 zmm1, xmmword ptr [rcx+0x1*0x10]
        vmovdqa xmm12, xmmword ptr [rsp]
        vmovdqa xmm13, xmmword ptr [rsp+0x4*0x10]
        vpunpckldq xmm14, xmm12, xmm13
        vpunpckhdq xmm15, xmm12, xmm13
        vpermq  ymm14, ymm14, 0xDC
        vpermq  ymm15, ymm15, 0xDC
        vpbroadcastd zmm12, dword ptr [BLAKE3_BLOCK_LEN+rip]
        vinserti64x4 zmm13, zmm14, ymm15, 0x01
        mov     eax, 17476
        kmovw   k2, eax
        vpblendmd zmm13 {k2}, zmm13, zmm12
        vbroadcasti32x4 zmm15, xmmword ptr [BLAKE3_IV+rip]
        mov     r8, qword ptr [rdi]
        mov     r9, qword ptr [rdi+0x8]
        mov     r10, qword ptr [rdi+0x10]
        mov     r11, qword ptr [rdi+0x18]
        mov     eax, 43690
        kmovw   k3, eax
        mov     eax, 34952
        kmovw   k4, eax
        movzx   eax, byte ptr [rbp+0x40]
        or      eax, r13d
        xor     edx, edx
.p2align 5
2:
        mov     r14d, eax
        or      eax, r12d
        add     rdx, 64
        cmp     rdx, r15
        cmovne  eax, r14d
        mov     dword ptr [rsp+0x88], eax
        vmovdqa32 zmm2, zmm15
        vpbroadcastd zmm8, dword ptr [rsp+0x22*0x4]
        vpblendmd zmm3 {k4}, zmm13, zmm8
        vmovups zmm8, zmmword ptr [r8+rdx-0x1*0x40]
        vinserti32x4 zmm8, zmm8, xmmword ptr [r9+rdx-0x4*0x10], 0x01
        vinserti32x4 zmm8, zmm8, xmmword ptr [r10+rdx-0x4*0x10], 0x02
        vinserti32x4 zmm8, zmm8, xmmword ptr [r11+rdx-0x4*0x10], 0x03
        vmovups zmm9, zmmword ptr [r8+rdx-0x30]
        vinserti32x4 zmm9, zmm9, xmmword ptr [r9+rdx-0x3*0x10], 0x01
        vinserti32x4 zmm9, zmm9, xmmword ptr [r10+rdx-0x3*0x10], 0x02
        vinserti32x4 zmm9, zmm9, xmmword ptr [r11+rdx-0x3*0x10], 0x03
        vshufps zmm4, zmm8, zmm9, 136
        vshufps zmm5, zmm8, zmm9, 221
        vmovups zmm8, zmmword ptr [r8+rdx-0x20]
        vinserti32x4 zmm8, zmm8, xmmword ptr [r9+rdx-0x2*0x10], 0x01
        vinserti32x4 zmm8, zmm8, xmmword ptr [r10+rdx-0x2*0x10], 0x02
        vinserti32x4 zmm8, zmm8, xmmword ptr [r11+rdx-0x2*0x10], 0x03
        vmovups zmm9, zmmword ptr [r8+rdx-0x10]
        vinserti32x4 zmm9, zmm9, xmmword ptr [r9+rdx-0x1*0x10], 0x01
        vinserti32x4 zmm9, zmm9, xmmword ptr [r10+rdx-0x1*0x10], 0x02
        vinserti32x4 zmm9, zmm9, xmmword ptr [r11+rdx-0x1*0x10], 0x03
        vshufps zmm6, zmm8, zmm9, 136
        vshufps zmm7, zmm8, zmm9, 221
        vpshufd zmm6, zmm6, 0x93
        vpshufd zmm7, zmm7, 0x93
        mov     al, 7
9:
        vpaddd  zmm0, zmm0, zmm4
        vpaddd  zmm0, zmm0, zmm1
        vpxord  zmm3, zmm3, zmm0
        vprord  zmm3, zmm3, 16
        vpaddd  zmm2, zmm2, zmm3
        vpxord  zmm1, zmm1, zmm2
        vprord  zmm1, zmm1, 12
        vpaddd  zmm0, zmm0, zmm5
        vpaddd  zmm0, zmm0, zmm1
        vpxord  zmm3, zmm3, zmm0
        vprord  zmm3, zmm3, 8
        vpaddd  zmm2, zmm2, zmm3
        vpxord  zmm1, zmm1, zmm2
        vprord  zmm1, zmm1, 7
        vpshufd zmm0, zmm0, 0x93
        vpshufd zmm3, zmm3, 0x4E
        vpshufd zmm2, zmm2, 0x39
        vpaddd  zmm0, zmm0, zmm6
        vpaddd  zmm0, zmm0, zmm1
        vpxord  zmm3, zmm3, zmm0
        vprord  zmm3, zmm3, 16
        vpaddd  zmm2, zmm2, zmm3
        vpxord  zmm1, zmm1, zmm2
        vprord  zmm1, zmm1, 12
        vpaddd  zmm0, zmm0, zmm7
        vpaddd  zmm0, zmm0, zmm1
        vpxord  zmm3, zmm3, zmm0
        vprord  zmm3, zmm3, 8
        vpaddd  zmm2, zmm2, zmm3
        vpxord  zmm1, zmm1, zmm2
        vprord  zmm1, zmm1, 7
        vpshufd zmm0, zmm0, 0x39
        vpshufd zmm3, zmm3, 0x4E
        vpshufd zmm2, zmm2, 0x93
        dec     al
        jz      9f
        vshufps zmm8, zmm4, zmm5, 214
        vpshufd zmm9, zmm4, 0x0F
        vpshufd zmm4, zmm8, 0x39
        vshufps zmm8, zmm6, zmm7, 250
        vpblendmd zmm9 {k3}, zmm9, zmm8
        vpunpcklqdq zmm8, zmm7, zmm5
        vpblendmd zmm8 {k4}, zmm8, zmm6
        vpshufd zmm8, zmm8, 0x78
        vpunpckhdq zmm5, zmm5, zmm7
        vpunpckldq zmm6, zmm6, zmm5
        vpshufd zmm7, zmm6, 0x1E
        vmovdqa32 zmm5, zmm9
        vmovdqa32 zmm6, zmm8
        jmp     9b
9:
        vpxord  zmm0, zmm0, zmm2
        vpxord  zmm1, zmm1, zmm3
        mov     eax, r13d
        cmp     rdx, r15
        jne     2b
        vmovdqu xmmword ptr [rbx], xmm0
        vmovdqu xmmword ptr [rbx+0x10], xmm1
        vextracti128 xmmword ptr [rbx+0x20], ymm0, 0x01
        vextracti128 xmmword ptr [rbx+0x30], ymm1, 0x01
        vextracti32x4 xmmword ptr [rbx+0x4*0x10], zmm0, 0x02
        vextracti32x4 xmmword ptr [rbx+0x5*0x10], zmm1, 0x02
        vextracti32x4 xmmword ptr [rbx+0x6*0x10], zmm0, 0x03
        vextracti32x4 xmmword ptr [rbx+0x7*0x10], zmm1, 0x03
        vmovdqa xmm0, xmmword ptr [rsp]
        vmovdqa xmm2, xmmword ptr [rsp+0x40]
        vmovdqa32 xmm0 {k1}, xmmword ptr [rsp+0x1*0x10]
        vmovdqa32 xmm2 {k1}, xmmword ptr [rsp+0x5*0x10]
        vmovdqa xmmword ptr [rsp], xmm0
        vmovdqa xmmword ptr [rsp+0x40], xmm2
        add     rbx, 128
        add     rdi, 32
        sub     rsi, 4
3:
        test    esi, 0x2
        je      3f
        vbroadcasti128 ymm0, xmmword ptr [rcx]
        vbroadcasti128 ymm1, xmmword ptr [rcx+0x10]
        vmovd   xmm13, dword ptr [rsp]
        vpinsrd xmm13, xmm13, dword ptr [rsp+0x40], 1
        vpinsrd xmm13, xmm13, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
        vmovd   xmm14, dword ptr [rsp+0x4]
        vpinsrd xmm14, xmm14, dword ptr [rsp+0x44], 1
        vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
        vinserti128 ymm13, ymm13, xmm14, 0x01
        mov     r8, qword ptr [rdi]
        mov     r9, qword ptr [rdi+0x8]
        movzx   eax, byte ptr [rbp+0x40]
        or      eax, r13d
        xor     edx, edx
.p2align 5
2:
        mov     r14d, eax
        or      eax, r12d
        add     rdx, 64
        cmp     rdx, r15
        cmovne  eax, r14d
        mov     dword ptr [rsp+0x88], eax
        vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV+rip]
        vpbroadcastd ymm8, dword ptr [rsp+0x88]
        vpblendd ymm3, ymm13, ymm8, 0x88
        vmovups ymm8, ymmword ptr [r8+rdx-0x40]
        vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-0x40], 0x01
        vmovups ymm9, ymmword ptr [r8+rdx-0x30]
        vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-0x30], 0x01
        vshufps ymm4, ymm8, ymm9, 136
        vshufps ymm5, ymm8, ymm9, 221
        vmovups ymm8, ymmword ptr [r8+rdx-0x20]
        vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-0x20], 0x01
        vmovups ymm9, ymmword ptr [r8+rdx-0x10]
        vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-0x10], 0x01
        vshufps ymm6, ymm8, ymm9, 136
        vshufps ymm7, ymm8, ymm9, 221
        vpshufd ymm6, ymm6, 0x93
        vpshufd ymm7, ymm7, 0x93
        mov     al, 7
9:
        vpaddd  ymm0, ymm0, ymm4
        vpaddd  ymm0, ymm0, ymm1
        vpxord  ymm3, ymm3, ymm0
        vprord  ymm3, ymm3, 16
        vpaddd  ymm2, ymm2, ymm3
        vpxord  ymm1, ymm1, ymm2
        vprord  ymm1, ymm1, 12
        vpaddd  ymm0, ymm0, ymm5
        vpaddd  ymm0, ymm0, ymm1
        vpxord  ymm3, ymm3, ymm0
        vprord  ymm3, ymm3, 8
        vpaddd  ymm2, ymm2, ymm3
        vpxord  ymm1, ymm1, ymm2
        vprord  ymm1, ymm1, 7
        vpshufd ymm0, ymm0, 0x93
        vpshufd ymm3, ymm3, 0x4E
        vpshufd ymm2, ymm2, 0x39
        vpaddd  ymm0, ymm0, ymm6
        vpaddd  ymm0, ymm0, ymm1
        vpxord  ymm3, ymm3, ymm0
        vprord  ymm3, ymm3, 16
        vpaddd  ymm2, ymm2, ymm3
        vpxord  ymm1, ymm1, ymm2
        vprord  ymm1, ymm1, 12
        vpaddd  ymm0, ymm0, ymm7
        vpaddd  ymm0, ymm0, ymm1
        vpxord  ymm3, ymm3, ymm0
        vprord  ymm3, ymm3, 8
        vpaddd  ymm2, ymm2, ymm3
        vpxord  ymm1, ymm1, ymm2
        vprord  ymm1, ymm1, 7
        vpshufd ymm0, ymm0, 0x39
        vpshufd ymm3, ymm3, 0x4E
        vpshufd ymm2, ymm2, 0x93
        dec     al
        jz      9f
        vshufps ymm8, ymm4, ymm5, 214
        vpshufd ymm9, ymm4, 0x0F
        vpshufd ymm4, ymm8, 0x39
        vshufps ymm8, ymm6, ymm7, 250
        vpblendd ymm9, ymm9, ymm8, 0xAA
        vpunpcklqdq ymm8, ymm7, ymm5
        vpblendd ymm8, ymm8, ymm6, 0x88
        vpshufd ymm8, ymm8, 0x78
        vpunpckhdq ymm5, ymm5, ymm7
        vpunpckldq ymm6, ymm6, ymm5
        vpshufd ymm7, ymm6, 0x1E
        vmovdqa ymm5, ymm9
        vmovdqa ymm6, ymm8
        jmp     9b
9:
        vpxor   ymm0, ymm0, ymm2
        vpxor   ymm1, ymm1, ymm3
        mov     eax, r13d
        cmp     rdx, r15
        jne     2b
        vmovdqu xmmword ptr [rbx], xmm0
        vmovdqu xmmword ptr [rbx+0x10], xmm1
        vextracti128 xmmword ptr [rbx+0x20], ymm0, 0x01
        vextracti128 xmmword ptr [rbx+0x30], ymm1, 0x01
        vmovdqa xmm0, xmmword ptr [rsp]
        vmovdqa xmm2, xmmword ptr [rsp+0x4*0x10]
        vmovdqu32 xmm0 {k1}, xmmword ptr [rsp+0x8]
        vmovdqu32 xmm2 {k1}, xmmword ptr [rsp+0x48]
        vmovdqa xmmword ptr [rsp], xmm0
        vmovdqa xmmword ptr [rsp+0x4*0x10], xmm2
        add     rbx, 64
        add     rdi, 16
        sub     rsi, 2
3:
        test    esi, 0x1
        je      4b
        vmovdqu xmm0, xmmword ptr [rcx]
        vmovdqu xmm1, xmmword ptr [rcx+0x10]
        vmovd   xmm14, dword ptr [rsp]
        vpinsrd xmm14, xmm14, dword ptr [rsp+0x40], 1
        vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
        vmovdqa xmm15, xmmword ptr [BLAKE3_IV+rip]
        mov     r8, qword ptr [rdi]
        movzx   eax, byte ptr [rbp+0x40]
        or      eax, r13d
        xor     edx, edx
.p2align 5
2:
        mov     r14d, eax
        or      eax, r12d
        add     rdx, 64
        cmp     rdx, r15
        cmovne  eax, r14d
        vpinsrd xmm3, xmm14, eax, 3
        vmovdqa xmm2, xmm15
        vmovups xmm8, xmmword ptr [r8+rdx-0x40]
        vmovups xmm9, xmmword ptr [r8+rdx-0x30]
        vshufps xmm4, xmm8, xmm9, 136
        vshufps xmm5, xmm8, xmm9, 221
        vmovups xmm8, xmmword ptr [r8+rdx-0x20]
        vmovups xmm9, xmmword ptr [r8+rdx-0x10]
        vshufps xmm6, xmm8, xmm9, 136
        vshufps xmm7, xmm8, xmm9, 221
        vpshufd xmm6, xmm6, 0x93
        vpshufd xmm7, xmm7, 0x93
        mov     al, 7
9:
        vpaddd  xmm0, xmm0, xmm4
        vpaddd  xmm0, xmm0, xmm1
        vpxord  xmm3, xmm3, xmm0
        vprord  xmm3, xmm3, 16
        vpaddd  xmm2, xmm2, xmm3
        vpxord  xmm1, xmm1, xmm2
        vprord  xmm1, xmm1, 12
        vpaddd  xmm0, xmm0, xmm5
        vpaddd  xmm0, xmm0, xmm1
        vpxord  xmm3, xmm3, xmm0
        vprord  xmm3, xmm3, 8
        vpaddd  xmm2, xmm2, xmm3
        vpxord  xmm1, xmm1, xmm2
        vprord  xmm1, xmm1, 7
        vpshufd xmm0, xmm0, 0x93
        vpshufd xmm3, xmm3, 0x4E
        vpshufd xmm2, xmm2, 0x39
        vpaddd  xmm0, xmm0, xmm6
        vpaddd  xmm0, xmm0, xmm1
        vpxord  xmm3, xmm3, xmm0
        vprord  xmm3, xmm3, 16
        vpaddd  xmm2, xmm2, xmm3
        vpxord  xmm1, xmm1, xmm2
        vprord  xmm1, xmm1, 12
        vpaddd  xmm0, xmm0, xmm7
        vpaddd  xmm0, xmm0, xmm1
        vpxord  xmm3, xmm3, xmm0
        vprord  xmm3, xmm3, 8
        vpaddd  xmm2, xmm2, xmm3
        vpxord  xmm1, xmm1, xmm2
        vprord  xmm1, xmm1, 7
        vpshufd xmm0, xmm0, 0x39
        vpshufd xmm3, xmm3, 0x4E
        vpshufd xmm2, xmm2, 0x93
        dec     al
        jz      9f
        vshufps xmm8, xmm4, xmm5, 214
        vpshufd xmm9, xmm4, 0x0F
        vpshufd xmm4, xmm8, 0x39
        vshufps xmm8, xmm6, xmm7, 250
        vpblendd xmm9, xmm9, xmm8, 0xAA
        vpunpcklqdq xmm8, xmm7, xmm5
        vpblendd xmm8, xmm8, xmm6, 0x88
        vpshufd xmm8, xmm8, 0x78
        vpunpckhdq xmm5, xmm5, xmm7
        vpunpckldq xmm6, xmm6, xmm5
        vpshufd xmm7, xmm6, 0x1E
        vmovdqa xmm5, xmm9
        vmovdqa xmm6, xmm8
        jmp     9b
9:
        vpxor   xmm0, xmm0, xmm2
        vpxor   xmm1, xmm1, xmm3
        mov     eax, r13d
        cmp     rdx, r15
        jne     2b
        vmovdqu xmmword ptr [rbx], xmm0
        vmovdqu xmmword ptr [rbx+0x10], xmm1
        jmp     4b
.p2align 6
_blake3_compress_in_place_avx512:
blake3_compress_in_place_avx512:
        _CET_ENDBR
        vmovdqu xmm0, xmmword ptr [rdi]
        vmovdqu xmm1, xmmword ptr [rdi+0x10]
        movzx   eax, r8b
        movzx   edx, dl
        shl     rax, 32
        add     rdx, rax
        vmovq   xmm3, rcx
        vmovq   xmm4, rdx
        vpunpcklqdq xmm3, xmm3, xmm4
        vmovaps xmm2, xmmword ptr [BLAKE3_IV+rip]
        vmovups xmm8, xmmword ptr [rsi]
        vmovups xmm9, xmmword ptr [rsi+0x10]
        vshufps xmm4, xmm8, xmm9, 136
        vshufps xmm5, xmm8, xmm9, 221
        vmovups xmm8, xmmword ptr [rsi+0x20]
        vmovups xmm9, xmmword ptr [rsi+0x30]
        vshufps xmm6, xmm8, xmm9, 136
        vshufps xmm7, xmm8, xmm9, 221
        vpshufd xmm6, xmm6, 0x93
        vpshufd xmm7, xmm7, 0x93
        mov     al, 7
9:
        vpaddd  xmm0, xmm0, xmm4
        vpaddd  xmm0, xmm0, xmm1
        vpxord  xmm3, xmm3, xmm0
        vprord  xmm3, xmm3, 16
        vpaddd  xmm2, xmm2, xmm3
        vpxord  xmm1, xmm1, xmm2
        vprord  xmm1, xmm1, 12
        vpaddd  xmm0, xmm0, xmm5
        vpaddd  xmm0, xmm0, xmm1
        vpxord  xmm3, xmm3, xmm0
        vprord  xmm3, xmm3, 8
        vpaddd  xmm2, xmm2, xmm3
        vpxord  xmm1, xmm1, xmm2
        vprord  xmm1, xmm1, 7
        vpshufd xmm0, xmm0, 0x93
        vpshufd xmm3, xmm3, 0x4E
        vpshufd xmm2, xmm2, 0x39
        vpaddd  xmm0, xmm0, xmm6
        vpaddd  xmm0, xmm0, xmm1
        vpxord  xmm3, xmm3, xmm0
        vprord  xmm3, xmm3, 16
        vpaddd  xmm2, xmm2, xmm3
        vpxord  xmm1, xmm1, xmm2
        vprord  xmm1, xmm1, 12
        vpaddd  xmm0, xmm0, xmm7
        vpaddd  xmm0, xmm0, xmm1
        vpxord  xmm3, xmm3, xmm0
        vprord  xmm3, xmm3, 8
        vpaddd  xmm2, xmm2, xmm3
        vpxord  xmm1, xmm1, xmm2
        vprord  xmm1, xmm1, 7
        vpshufd xmm0, xmm0, 0x39
        vpshufd xmm3, xmm3, 0x4E
        vpshufd xmm2, xmm2, 0x93
        dec     al
        jz      9f
        vshufps xmm8, xmm4, xmm5, 214
        vpshufd xmm9, xmm4, 0x0F
        vpshufd xmm4, xmm8, 0x39
        vshufps xmm8, xmm6, xmm7, 250
        vpblendd xmm9, xmm9, xmm8, 0xAA
        vpunpcklqdq xmm8, xmm7, xmm5
        vpblendd xmm8, xmm8, xmm6, 0x88
        vpshufd xmm8, xmm8, 0x78
        vpunpckhdq xmm5, xmm5, xmm7
        vpunpckldq xmm6, xmm6, xmm5
        vpshufd xmm7, xmm6, 0x1E
        vmovdqa xmm5, xmm9
        vmovdqa xmm6, xmm8
        jmp     9b
9:
        vpxor   xmm0, xmm0, xmm2
        vpxor   xmm1, xmm1, xmm3
        vmovdqu xmmword ptr [rdi], xmm0
        vmovdqu xmmword ptr [rdi+0x10], xmm1
        ret

.p2align 6
_blake3_compress_xof_avx512:
blake3_compress_xof_avx512:
        _CET_ENDBR
        vmovdqu xmm0, xmmword ptr [rdi]
        vmovdqu xmm1, xmmword ptr [rdi+0x10]
        movzx   eax, r8b
        movzx   edx, dl
        shl     rax, 32
        add     rdx, rax
        vmovq   xmm3, rcx
        vmovq   xmm4, rdx
        vpunpcklqdq xmm3, xmm3, xmm4
        vmovaps xmm2, xmmword ptr [BLAKE3_IV+rip]
        vmovups xmm8, xmmword ptr [rsi]
        vmovups xmm9, xmmword ptr [rsi+0x10]
        vshufps xmm4, xmm8, xmm9, 136
        vshufps xmm5, xmm8, xmm9, 221
        vmovups xmm8, xmmword ptr [rsi+0x20]
        vmovups xmm9, xmmword ptr [rsi+0x30]
        vshufps xmm6, xmm8, xmm9, 136
        vshufps xmm7, xmm8, xmm9, 221
        vpshufd xmm6, xmm6, 0x93
        vpshufd xmm7, xmm7, 0x93
        mov     al, 7
9:
        vpaddd  xmm0, xmm0, xmm4
        vpaddd  xmm0, xmm0, xmm1
        vpxord  xmm3, xmm3, xmm0
        vprord  xmm3, xmm3, 16
        vpaddd  xmm2, xmm2, xmm3
        vpxord  xmm1, xmm1, xmm2
        vprord  xmm1, xmm1, 12
        vpaddd  xmm0, xmm0, xmm5
        vpaddd  xmm0, xmm0, xmm1
        vpxord  xmm3, xmm3, xmm0
        vprord  xmm3, xmm3, 8
        vpaddd  xmm2, xmm2, xmm3
        vpxord  xmm1, xmm1, xmm2
        vprord  xmm1, xmm1, 7
        vpshufd xmm0, xmm0, 0x93
        vpshufd xmm3, xmm3, 0x4E
        vpshufd xmm2, xmm2, 0x39
        vpaddd  xmm0, xmm0, xmm6
        vpaddd  xmm0, xmm0, xmm1
        vpxord  xmm3, xmm3, xmm0
        vprord  xmm3, xmm3, 16
        vpaddd  xmm2, xmm2, xmm3
        vpxord  xmm1, xmm1, xmm2
        vprord  xmm1, xmm1, 12
        vpaddd  xmm0, xmm0, xmm7
        vpaddd  xmm0, xmm0, xmm1
        vpxord  xmm3, xmm3, xmm0
        vprord  xmm3, xmm3, 8
        vpaddd  xmm2, xmm2, xmm3
        vpxord  xmm1, xmm1, xmm2
        vprord  xmm1, xmm1, 7
        vpshufd xmm0, xmm0, 0x39
        vpshufd xmm3, xmm3, 0x4E
        vpshufd xmm2, xmm2, 0x93
        dec     al
        jz      9f
        vshufps xmm8, xmm4, xmm5, 214
        vpshufd xmm9, xmm4, 0x0F
        vpshufd xmm4, xmm8, 0x39
        vshufps xmm8, xmm6, xmm7, 250
        vpblendd xmm9, xmm9, xmm8, 0xAA
        vpunpcklqdq xmm8, xmm7, xmm5
        vpblendd xmm8, xmm8, xmm6, 0x88
        vpshufd xmm8, xmm8, 0x78
        vpunpckhdq xmm5, xmm5, xmm7
        vpunpckldq xmm6, xmm6, xmm5
        vpshufd xmm7, xmm6, 0x1E
        vmovdqa xmm5, xmm9
        vmovdqa xmm6, xmm8
        jmp     9b
9:
        vpxor   xmm0, xmm0, xmm2
        vpxor   xmm1, xmm1, xmm3
        vpxor   xmm2, xmm2, [rdi]
        vpxor   xmm3, xmm3, [rdi+0x10]
        vmovdqu xmmword ptr [r9], xmm0
        vmovdqu xmmword ptr [r9+0x10], xmm1
        vmovdqu xmmword ptr [r9+0x20], xmm2
        vmovdqu xmmword ptr [r9+0x30], xmm3
        ret

.p2align 6
blake3_xof_many_avx512:
_blake3_xof_many_avx512:
        _CET_ENDBR
        mov    r10,QWORD PTR [rsp+0x8]
        cmp    r10,0x1
        ja     2f
        vmovdqu xmm0,XMMWORD PTR [rdi]
        vmovdqu xmm1,XMMWORD PTR [rdi+0x10]
        movzx  eax,r8b
        movzx  edx,dl
        shl    rax,0x20
        add    rdx,rax
        vmovq  xmm3,rcx
        vmovq  xmm4,rdx
        vpunpcklqdq xmm3,xmm3,xmm4
        vmovaps xmm2,XMMWORD PTR [BLAKE3_IV+rip]
        vmovups xmm8,XMMWORD PTR [rsi]
        vmovups xmm9,XMMWORD PTR [rsi+0x10]
        vshufps xmm4,xmm8,xmm9,0x88
        vshufps xmm5,xmm8,xmm9,0xdd
        vmovups xmm8,XMMWORD PTR [rsi+0x20]
        vmovups xmm9,XMMWORD PTR [rsi+0x30]
        vshufps xmm6,xmm8,xmm9,0x88
        vshufps xmm7,xmm8,xmm9,0xdd
        vpshufd xmm6,xmm6,0x93
        vpshufd xmm7,xmm7,0x93
        mov    al,0x7
3:
        vpaddd xmm0,xmm0,xmm4
        vpaddd xmm0,xmm0,xmm1
        vpxord xmm3,xmm3,xmm0
        vprord xmm3,xmm3,0x10
        vpaddd xmm2,xmm2,xmm3
        vpxord xmm1,xmm1,xmm2
        vprord xmm1,xmm1,0xc
        vpaddd xmm0,xmm0,xmm5
        vpaddd xmm0,xmm0,xmm1
        vpxord xmm3,xmm3,xmm0
        vprord xmm3,xmm3,0x8
        vpaddd xmm2,xmm2,xmm3
        vpxord xmm1,xmm1,xmm2
        vprord xmm1,xmm1,0x7
        vpshufd xmm0,xmm0,0x93
        vpshufd xmm3,xmm3,0x4e
        vpshufd xmm2,xmm2,0x39
        vpaddd xmm0,xmm0,xmm6
        vpaddd xmm0,xmm0,xmm1
        vpxord xmm3,xmm3,xmm0
        vprord xmm3,xmm3,0x10
        vpaddd xmm2,xmm2,xmm3
        vpxord xmm1,xmm1,xmm2
        vprord xmm1,xmm1,0xc
        vpaddd xmm0,xmm0,xmm7
        vpaddd xmm0,xmm0,xmm1
        vpxord xmm3,xmm3,xmm0
        vprord xmm3,xmm3,0x8
        vpaddd xmm2,xmm2,xmm3
        vpxord xmm1,xmm1,xmm2
        vprord xmm1,xmm1,0x7
        vpshufd xmm0,xmm0,0x39
        vpshufd xmm3,xmm3,0x4e
        vpshufd xmm2,xmm2,0x93
        dec    al
        je     3f
        vshufps xmm8,xmm4,xmm5,0xd6
        vpshufd xmm9,xmm4,0xf
        vpshufd xmm4,xmm8,0x39
        vshufps xmm8,xmm6,xmm7,0xfa
        vpblendd xmm9,xmm9,xmm8,0xaa
        vpunpcklqdq xmm8,xmm7,xmm5
        vpblendd xmm8,xmm8,xmm6,0x88
        vpshufd xmm8,xmm8,0x78
        vpunpckhdq xmm5,xmm5,xmm7
        vpunpckldq xmm6,xmm6,xmm5
        vpshufd xmm7,xmm6,0x1e
        vmovdqa xmm5,xmm9
        vmovdqa xmm6,xmm8
        jmp    3b
3:
        vpxor  xmm0,xmm0,xmm2
        vpxor  xmm1,xmm1,xmm3
        vpxor  xmm2,xmm2,XMMWORD PTR [rdi]
        vpxor  xmm3,xmm3,XMMWORD PTR [rdi+0x10]
        vmovdqu XMMWORD PTR [r9],xmm0
        vmovdqu XMMWORD PTR [r9+0x10],xmm1
        vmovdqu XMMWORD PTR [r9+0x20],xmm2
        vmovdqu XMMWORD PTR [r9+0x30],xmm3
        ret    
.p2align 6
2:
        push   rbp
        mov    rbp,rsp
        sub    rsp,0x90
        and    rsp,0xffffffffffffffc0
        vpbroadcastd zmm0,ecx
        shr    rcx,0x20
        vpbroadcastd zmm1,ecx
        vpaddd zmm2,zmm0,ZMMWORD PTR [ADD0+rip]
        vpcmpltud k1,zmm2,zmm0
        vpaddd zmm1{k1},zmm1,DWORD PTR [ADD1+rip]{1to16}
        vmovdqa32 ZMMWORD PTR [rsp],zmm2
        vmovdqa32 ZMMWORD PTR [rsp+0x40],zmm1
        cmp    r10,0x10
        jb     2f
3:
        vpbroadcastd zmm16,DWORD PTR [rsi]
        vpbroadcastd zmm17,DWORD PTR [rsi+0x4]
        vpbroadcastd zmm18,DWORD PTR [rsi+0x8]
        vpbroadcastd zmm19,DWORD PTR [rsi+0xc]
        vpbroadcastd zmm20,DWORD PTR [rsi+0x10]
        vpbroadcastd zmm21,DWORD PTR [rsi+0x14]
        vpbroadcastd zmm22,DWORD PTR [rsi+0x18]
        vpbroadcastd zmm23,DWORD PTR [rsi+0x1c]
        vpbroadcastd zmm24,DWORD PTR [rsi+0x20]
        vpbroadcastd zmm25,DWORD PTR [rsi+0x24]
        vpbroadcastd zmm26,DWORD PTR [rsi+0x28]
        vpbroadcastd zmm27,DWORD PTR [rsi+0x2c]
        vpbroadcastd zmm28,DWORD PTR [rsi+0x30]
        vpbroadcastd zmm29,DWORD PTR [rsi+0x34]
        vpbroadcastd zmm30,DWORD PTR [rsi+0x38]
        vpbroadcastd zmm31,DWORD PTR [rsi+0x3c]
        vpbroadcastd zmm0,DWORD PTR [rdi]
        vpbroadcastd zmm1,DWORD PTR [rdi+0x4]
        vpbroadcastd zmm2,DWORD PTR [rdi+0x8]
        vpbroadcastd zmm3,DWORD PTR [rdi+0xc]
        vpbroadcastd zmm4,DWORD PTR [rdi+0x10]
        vpbroadcastd zmm5,DWORD PTR [rdi+0x14]
        vpbroadcastd zmm6,DWORD PTR [rdi+0x18]
        vpbroadcastd zmm7,DWORD PTR [rdi+0x1c]
        vpbroadcastd zmm8,DWORD PTR [BLAKE3_IV_0+rip]
        vpbroadcastd zmm9,DWORD PTR [BLAKE3_IV_1+rip]
        vpbroadcastd zmm10,DWORD PTR [BLAKE3_IV_2+rip]
        vpbroadcastd zmm11,DWORD PTR [BLAKE3_IV_3+rip]
        vmovdqa32 zmm12,ZMMWORD PTR [rsp]
        vmovdqa32 zmm13,ZMMWORD PTR [rsp+0x40]
        vpbroadcastd zmm14,edx
        vpbroadcastd zmm15,r8d
        vpaddd zmm0,zmm0,zmm16
        vpaddd zmm1,zmm1,zmm18
        vpaddd zmm2,zmm2,zmm20
        vpaddd zmm3,zmm3,zmm22
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm1,zmm1,zmm5
        vpaddd zmm2,zmm2,zmm6
        vpaddd zmm3,zmm3,zmm7
        vpxord zmm12,zmm12,zmm0
        vpxord zmm13,zmm13,zmm1
        vpxord zmm14,zmm14,zmm2
        vpxord zmm15,zmm15,zmm3
        vprord zmm12,zmm12,0x10
        vprord zmm13,zmm13,0x10
        vprord zmm14,zmm14,0x10
        vprord zmm15,zmm15,0x10
        vpaddd zmm8,zmm8,zmm12
        vpaddd zmm9,zmm9,zmm13
        vpaddd zmm10,zmm10,zmm14
        vpaddd zmm11,zmm11,zmm15
        vpxord zmm4,zmm4,zmm8
        vpxord zmm5,zmm5,zmm9
        vpxord zmm6,zmm6,zmm10
        vpxord zmm7,zmm7,zmm11
        vprord zmm4,zmm4,0xc
        vprord zmm5,zmm5,0xc
        vprord zmm6,zmm6,0xc
        vprord zmm7,zmm7,0xc
        vpaddd zmm0,zmm0,zmm17
        vpaddd zmm1,zmm1,zmm19
        vpaddd zmm2,zmm2,zmm21
        vpaddd zmm3,zmm3,zmm23
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm1,zmm1,zmm5
        vpaddd zmm2,zmm2,zmm6
        vpaddd zmm3,zmm3,zmm7
        vpxord zmm12,zmm12,zmm0
        vpxord zmm13,zmm13,zmm1
        vpxord zmm14,zmm14,zmm2
        vpxord zmm15,zmm15,zmm3
        vprord zmm12,zmm12,0x8
        vprord zmm13,zmm13,0x8
        vprord zmm14,zmm14,0x8
        vprord zmm15,zmm15,0x8
        vpaddd zmm8,zmm8,zmm12
        vpaddd zmm9,zmm9,zmm13
        vpaddd zmm10,zmm10,zmm14
        vpaddd zmm11,zmm11,zmm15
        vpxord zmm4,zmm4,zmm8
        vpxord zmm5,zmm5,zmm9
        vpxord zmm6,zmm6,zmm10
        vpxord zmm7,zmm7,zmm11
        vprord zmm4,zmm4,0x7
        vprord zmm5,zmm5,0x7
        vprord zmm6,zmm6,0x7
        vprord zmm7,zmm7,0x7
        vpaddd zmm0,zmm0,zmm24
        vpaddd zmm1,zmm1,zmm26
        vpaddd zmm2,zmm2,zmm28
        vpaddd zmm3,zmm3,zmm30
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm1,zmm1,zmm6
        vpaddd zmm2,zmm2,zmm7
        vpaddd zmm3,zmm3,zmm4
        vpxord zmm15,zmm15,zmm0
        vpxord zmm12,zmm12,zmm1
        vpxord zmm13,zmm13,zmm2
        vpxord zmm14,zmm14,zmm3
        vprord zmm15,zmm15,0x10
        vprord zmm12,zmm12,0x10
        vprord zmm13,zmm13,0x10
        vprord zmm14,zmm14,0x10
        vpaddd zmm10,zmm10,zmm15
        vpaddd zmm11,zmm11,zmm12
        vpaddd zmm8,zmm8,zmm13
        vpaddd zmm9,zmm9,zmm14
        vpxord zmm5,zmm5,zmm10
        vpxord zmm6,zmm6,zmm11
        vpxord zmm7,zmm7,zmm8
        vpxord zmm4,zmm4,zmm9
        vprord zmm5,zmm5,0xc
        vprord zmm6,zmm6,0xc
        vprord zmm7,zmm7,0xc
        vprord zmm4,zmm4,0xc
        vpaddd zmm0,zmm0,zmm25
        vpaddd zmm1,zmm1,zmm27
        vpaddd zmm2,zmm2,zmm29
        vpaddd zmm3,zmm3,zmm31
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm1,zmm1,zmm6
        vpaddd zmm2,zmm2,zmm7
        vpaddd zmm3,zmm3,zmm4
        vpxord zmm15,zmm15,zmm0
        vpxord zmm12,zmm12,zmm1
        vpxord zmm13,zmm13,zmm2
        vpxord zmm14,zmm14,zmm3
        vprord zmm15,zmm15,0x8
        vprord zmm12,zmm12,0x8
        vprord zmm13,zmm13,0x8
        vprord zmm14,zmm14,0x8
        vpaddd zmm10,zmm10,zmm15
        vpaddd zmm11,zmm11,zmm12
        vpaddd zmm8,zmm8,zmm13
        vpaddd zmm9,zmm9,zmm14
        vpxord zmm5,zmm5,zmm10
        vpxord zmm6,zmm6,zmm11
        vpxord zmm7,zmm7,zmm8
        vpxord zmm4,zmm4,zmm9
        vprord zmm5,zmm5,0x7
        vprord zmm6,zmm6,0x7
        vprord zmm7,zmm7,0x7
        vprord zmm4,zmm4,0x7
        vpaddd zmm0,zmm0,zmm18
        vpaddd zmm1,zmm1,zmm19
        vpaddd zmm2,zmm2,zmm23
        vpaddd zmm3,zmm3,zmm20
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm1,zmm1,zmm5
        vpaddd zmm2,zmm2,zmm6
        vpaddd zmm3,zmm3,zmm7
        vpxord zmm12,zmm12,zmm0
        vpxord zmm13,zmm13,zmm1
        vpxord zmm14,zmm14,zmm2
        vpxord zmm15,zmm15,zmm3
        vprord zmm12,zmm12,0x10
        vprord zmm13,zmm13,0x10
        vprord zmm14,zmm14,0x10
        vprord zmm15,zmm15,0x10
        vpaddd zmm8,zmm8,zmm12
        vpaddd zmm9,zmm9,zmm13
        vpaddd zmm10,zmm10,zmm14
        vpaddd zmm11,zmm11,zmm15
        vpxord zmm4,zmm4,zmm8
        vpxord zmm5,zmm5,zmm9
        vpxord zmm6,zmm6,zmm10
        vpxord zmm7,zmm7,zmm11
        vprord zmm4,zmm4,0xc
        vprord zmm5,zmm5,0xc
        vprord zmm6,zmm6,0xc
        vprord zmm7,zmm7,0xc
        vpaddd zmm0,zmm0,zmm22
        vpaddd zmm1,zmm1,zmm26
        vpaddd zmm2,zmm2,zmm16
        vpaddd zmm3,zmm3,zmm29
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm1,zmm1,zmm5
        vpaddd zmm2,zmm2,zmm6
        vpaddd zmm3,zmm3,zmm7
        vpxord zmm12,zmm12,zmm0
        vpxord zmm13,zmm13,zmm1
        vpxord zmm14,zmm14,zmm2
        vpxord zmm15,zmm15,zmm3
        vprord zmm12,zmm12,0x8
        vprord zmm13,zmm13,0x8
        vprord zmm14,zmm14,0x8
        vprord zmm15,zmm15,0x8
        vpaddd zmm8,zmm8,zmm12
        vpaddd zmm9,zmm9,zmm13
        vpaddd zmm10,zmm10,zmm14
        vpaddd zmm11,zmm11,zmm15
        vpxord zmm4,zmm4,zmm8
        vpxord zmm5,zmm5,zmm9
        vpxord zmm6,zmm6,zmm10
        vpxord zmm7,zmm7,zmm11
        vprord zmm4,zmm4,0x7
        vprord zmm5,zmm5,0x7
        vprord zmm6,zmm6,0x7
        vprord zmm7,zmm7,0x7
        vpaddd zmm0,zmm0,zmm17
        vpaddd zmm1,zmm1,zmm28
        vpaddd zmm2,zmm2,zmm25
        vpaddd zmm3,zmm3,zmm31
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm1,zmm1,zmm6
        vpaddd zmm2,zmm2,zmm7
        vpaddd zmm3,zmm3,zmm4
        vpxord zmm15,zmm15,zmm0
        vpxord zmm12,zmm12,zmm1
        vpxord zmm13,zmm13,zmm2
        vpxord zmm14,zmm14,zmm3
        vprord zmm15,zmm15,0x10
        vprord zmm12,zmm12,0x10
        vprord zmm13,zmm13,0x10
        vprord zmm14,zmm14,0x10
        vpaddd zmm10,zmm10,zmm15
        vpaddd zmm11,zmm11,zmm12
        vpaddd zmm8,zmm8,zmm13
        vpaddd zmm9,zmm9,zmm14
        vpxord zmm5,zmm5,zmm10
        vpxord zmm6,zmm6,zmm11
        vpxord zmm7,zmm7,zmm8
        vpxord zmm4,zmm4,zmm9
        vprord zmm5,zmm5,0xc
        vprord zmm6,zmm6,0xc
        vprord zmm7,zmm7,0xc
        vprord zmm4,zmm4,0xc
        vpaddd zmm0,zmm0,zmm27
        vpaddd zmm1,zmm1,zmm21
        vpaddd zmm2,zmm2,zmm30
        vpaddd zmm3,zmm3,zmm24
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm1,zmm1,zmm6
        vpaddd zmm2,zmm2,zmm7
        vpaddd zmm3,zmm3,zmm4
        vpxord zmm15,zmm15,zmm0
        vpxord zmm12,zmm12,zmm1
        vpxord zmm13,zmm13,zmm2
        vpxord zmm14,zmm14,zmm3
        vprord zmm15,zmm15,0x8
        vprord zmm12,zmm12,0x8
        vprord zmm13,zmm13,0x8
        vprord zmm14,zmm14,0x8
        vpaddd zmm10,zmm10,zmm15
        vpaddd zmm11,zmm11,zmm12
        vpaddd zmm8,zmm8,zmm13
        vpaddd zmm9,zmm9,zmm14
        vpxord zmm5,zmm5,zmm10
        vpxord zmm6,zmm6,zmm11
        vpxord zmm7,zmm7,zmm8
        vpxord zmm4,zmm4,zmm9
        vprord zmm5,zmm5,0x7
        vprord zmm6,zmm6,0x7
        vprord zmm7,zmm7,0x7
        vprord zmm4,zmm4,0x7
        vpaddd zmm0,zmm0,zmm19
        vpaddd zmm1,zmm1,zmm26
        vpaddd zmm2,zmm2,zmm29
        vpaddd zmm3,zmm3,zmm23
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm1,zmm1,zmm5
        vpaddd zmm2,zmm2,zmm6
        vpaddd zmm3,zmm3,zmm7
        vpxord zmm12,zmm12,zmm0
        vpxord zmm13,zmm13,zmm1
        vpxord zmm14,zmm14,zmm2
        vpxord zmm15,zmm15,zmm3
        vprord zmm12,zmm12,0x10
        vprord zmm13,zmm13,0x10
        vprord zmm14,zmm14,0x10
        vprord zmm15,zmm15,0x10
        vpaddd zmm8,zmm8,zmm12
        vpaddd zmm9,zmm9,zmm13
        vpaddd zmm10,zmm10,zmm14
        vpaddd zmm11,zmm11,zmm15
        vpxord zmm4,zmm4,zmm8
        vpxord zmm5,zmm5,zmm9
        vpxord zmm6,zmm6,zmm10
        vpxord zmm7,zmm7,zmm11
        vprord zmm4,zmm4,0xc
        vprord zmm5,zmm5,0xc
        vprord zmm6,zmm6,0xc
        vprord zmm7,zmm7,0xc
        vpaddd zmm0,zmm0,zmm20
        vpaddd zmm1,zmm1,zmm28
        vpaddd zmm2,zmm2,zmm18
        vpaddd zmm3,zmm3,zmm30
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm1,zmm1,zmm5
        vpaddd zmm2,zmm2,zmm6
        vpaddd zmm3,zmm3,zmm7
        vpxord zmm12,zmm12,zmm0
        vpxord zmm13,zmm13,zmm1
        vpxord zmm14,zmm14,zmm2
        vpxord zmm15,zmm15,zmm3
        vprord zmm12,zmm12,0x8
        vprord zmm13,zmm13,0x8
        vprord zmm14,zmm14,0x8
        vprord zmm15,zmm15,0x8
        vpaddd zmm8,zmm8,zmm12
        vpaddd zmm9,zmm9,zmm13
        vpaddd zmm10,zmm10,zmm14
        vpaddd zmm11,zmm11,zmm15
        vpxord zmm4,zmm4,zmm8
        vpxord zmm5,zmm5,zmm9
        vpxord zmm6,zmm6,zmm10
        vpxord zmm7,zmm7,zmm11
        vprord zmm4,zmm4,0x7
        vprord zmm5,zmm5,0x7
        vprord zmm6,zmm6,0x7
        vprord zmm7,zmm7,0x7
        vpaddd zmm0,zmm0,zmm22
        vpaddd zmm1,zmm1,zmm25
        vpaddd zmm2,zmm2,zmm27
        vpaddd zmm3,zmm3,zmm24
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm1,zmm1,zmm6
        vpaddd zmm2,zmm2,zmm7
        vpaddd zmm3,zmm3,zmm4
        vpxord zmm15,zmm15,zmm0
        vpxord zmm12,zmm12,zmm1
        vpxord zmm13,zmm13,zmm2
        vpxord zmm14,zmm14,zmm3
        vprord zmm15,zmm15,0x10
        vprord zmm12,zmm12,0x10
        vprord zmm13,zmm13,0x10
        vprord zmm14,zmm14,0x10
        vpaddd zmm10,zmm10,zmm15
        vpaddd zmm11,zmm11,zmm12
        vpaddd zmm8,zmm8,zmm13
        vpaddd zmm9,zmm9,zmm14
        vpxord zmm5,zmm5,zmm10
        vpxord zmm6,zmm6,zmm11
        vpxord zmm7,zmm7,zmm8
        vpxord zmm4,zmm4,zmm9
        vprord zmm5,zmm5,0xc
        vprord zmm6,zmm6,0xc
        vprord zmm7,zmm7,0xc
        vprord zmm4,zmm4,0xc
        vpaddd zmm0,zmm0,zmm21
        vpaddd zmm1,zmm1,zmm16
        vpaddd zmm2,zmm2,zmm31
        vpaddd zmm3,zmm3,zmm17
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm1,zmm1,zmm6
        vpaddd zmm2,zmm2,zmm7
        vpaddd zmm3,zmm3,zmm4
        vpxord zmm15,zmm15,zmm0
        vpxord zmm12,zmm12,zmm1
        vpxord zmm13,zmm13,zmm2
        vpxord zmm14,zmm14,zmm3
        vprord zmm15,zmm15,0x8
        vprord zmm12,zmm12,0x8
        vprord zmm13,zmm13,0x8
        vprord zmm14,zmm14,0x8
        vpaddd zmm10,zmm10,zmm15
        vpaddd zmm11,zmm11,zmm12
        vpaddd zmm8,zmm8,zmm13
        vpaddd zmm9,zmm9,zmm14
        vpxord zmm5,zmm5,zmm10
        vpxord zmm6,zmm6,zmm11
        vpxord zmm7,zmm7,zmm8
        vpxord zmm4,zmm4,zmm9
        vprord zmm5,zmm5,0x7
        vprord zmm6,zmm6,0x7
        vprord zmm7,zmm7,0x7
        vprord zmm4,zmm4,0x7
        vpaddd zmm0,zmm0,zmm26
        vpaddd zmm1,zmm1,zmm28
        vpaddd zmm2,zmm2,zmm30
        vpaddd zmm3,zmm3,zmm29
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm1,zmm1,zmm5
        vpaddd zmm2,zmm2,zmm6
        vpaddd zmm3,zmm3,zmm7
        vpxord zmm12,zmm12,zmm0
        vpxord zmm13,zmm13,zmm1
        vpxord zmm14,zmm14,zmm2
        vpxord zmm15,zmm15,zmm3
        vprord zmm12,zmm12,0x10
        vprord zmm13,zmm13,0x10
        vprord zmm14,zmm14,0x10
        vprord zmm15,zmm15,0x10
        vpaddd zmm8,zmm8,zmm12
        vpaddd zmm9,zmm9,zmm13
        vpaddd zmm10,zmm10,zmm14
        vpaddd zmm11,zmm11,zmm15
        vpxord zmm4,zmm4,zmm8
        vpxord zmm5,zmm5,zmm9
        vpxord zmm6,zmm6,zmm10
        vpxord zmm7,zmm7,zmm11
        vprord zmm4,zmm4,0xc
        vprord zmm5,zmm5,0xc
        vprord zmm6,zmm6,0xc
        vprord zmm7,zmm7,0xc
        vpaddd zmm0,zmm0,zmm23
        vpaddd zmm1,zmm1,zmm25
        vpaddd zmm2,zmm2,zmm19
        vpaddd zmm3,zmm3,zmm31
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm1,zmm1,zmm5
        vpaddd zmm2,zmm2,zmm6
        vpaddd zmm3,zmm3,zmm7
        vpxord zmm12,zmm12,zmm0
        vpxord zmm13,zmm13,zmm1
        vpxord zmm14,zmm14,zmm2
        vpxord zmm15,zmm15,zmm3
        vprord zmm12,zmm12,0x8
        vprord zmm13,zmm13,0x8
        vprord zmm14,zmm14,0x8
        vprord zmm15,zmm15,0x8
        vpaddd zmm8,zmm8,zmm12
        vpaddd zmm9,zmm9,zmm13
        vpaddd zmm10,zmm10,zmm14
        vpaddd zmm11,zmm11,zmm15
        vpxord zmm4,zmm4,zmm8
        vpxord zmm5,zmm5,zmm9
        vpxord zmm6,zmm6,zmm10
        vpxord zmm7,zmm7,zmm11
        vprord zmm4,zmm4,0x7
        vprord zmm5,zmm5,0x7
        vprord zmm6,zmm6,0x7
        vprord zmm7,zmm7,0x7
        vpaddd zmm0,zmm0,zmm20
        vpaddd zmm1,zmm1,zmm27
        vpaddd zmm2,zmm2,zmm21
        vpaddd zmm3,zmm3,zmm17
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm1,zmm1,zmm6
        vpaddd zmm2,zmm2,zmm7
        vpaddd zmm3,zmm3,zmm4
        vpxord zmm15,zmm15,zmm0
        vpxord zmm12,zmm12,zmm1
        vpxord zmm13,zmm13,zmm2
        vpxord zmm14,zmm14,zmm3
        vprord zmm15,zmm15,0x10
        vprord zmm12,zmm12,0x10
        vprord zmm13,zmm13,0x10
        vprord zmm14,zmm14,0x10
        vpaddd zmm10,zmm10,zmm15
        vpaddd zmm11,zmm11,zmm12
        vpaddd zmm8,zmm8,zmm13
        vpaddd zmm9,zmm9,zmm14
        vpxord zmm5,zmm5,zmm10
        vpxord zmm6,zmm6,zmm11
        vpxord zmm7,zmm7,zmm8
        vpxord zmm4,zmm4,zmm9
        vprord zmm5,zmm5,0xc
        vprord zmm6,zmm6,0xc
        vprord zmm7,zmm7,0xc
        vprord zmm4,zmm4,0xc
        vpaddd zmm0,zmm0,zmm16
        vpaddd zmm1,zmm1,zmm18
        vpaddd zmm2,zmm2,zmm24
        vpaddd zmm3,zmm3,zmm22
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm1,zmm1,zmm6
        vpaddd zmm2,zmm2,zmm7
        vpaddd zmm3,zmm3,zmm4
        vpxord zmm15,zmm15,zmm0
        vpxord zmm12,zmm12,zmm1
        vpxord zmm13,zmm13,zmm2
        vpxord zmm14,zmm14,zmm3
        vprord zmm15,zmm15,0x8
        vprord zmm12,zmm12,0x8
        vprord zmm13,zmm13,0x8
        vprord zmm14,zmm14,0x8
        vpaddd zmm10,zmm10,zmm15
        vpaddd zmm11,zmm11,zmm12
        vpaddd zmm8,zmm8,zmm13
        vpaddd zmm9,zmm9,zmm14
        vpxord zmm5,zmm5,zmm10
        vpxord zmm6,zmm6,zmm11
        vpxord zmm7,zmm7,zmm8
        vpxord zmm4,zmm4,zmm9
        vprord zmm5,zmm5,0x7
        vprord zmm6,zmm6,0x7
        vprord zmm7,zmm7,0x7
        vprord zmm4,zmm4,0x7
        vpaddd zmm0,zmm0,zmm28
        vpaddd zmm1,zmm1,zmm25
        vpaddd zmm2,zmm2,zmm31
        vpaddd zmm3,zmm3,zmm30
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm1,zmm1,zmm5
        vpaddd zmm2,zmm2,zmm6
        vpaddd zmm3,zmm3,zmm7
        vpxord zmm12,zmm12,zmm0
        vpxord zmm13,zmm13,zmm1
        vpxord zmm14,zmm14,zmm2
        vpxord zmm15,zmm15,zmm3
        vprord zmm12,zmm12,0x10
        vprord zmm13,zmm13,0x10
        vprord zmm14,zmm14,0x10
        vprord zmm15,zmm15,0x10
        vpaddd zmm8,zmm8,zmm12
        vpaddd zmm9,zmm9,zmm13
        vpaddd zmm10,zmm10,zmm14
        vpaddd zmm11,zmm11,zmm15
        vpxord zmm4,zmm4,zmm8
        vpxord zmm5,zmm5,zmm9
        vpxord zmm6,zmm6,zmm10
        vpxord zmm7,zmm7,zmm11
        vprord zmm4,zmm4,0xc
        vprord zmm5,zmm5,0xc
        vprord zmm6,zmm6,0xc
        vprord zmm7,zmm7,0xc
        vpaddd zmm0,zmm0,zmm29
        vpaddd zmm1,zmm1,zmm27
        vpaddd zmm2,zmm2,zmm26
        vpaddd zmm3,zmm3,zmm24
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm1,zmm1,zmm5
        vpaddd zmm2,zmm2,zmm6
        vpaddd zmm3,zmm3,zmm7
        vpxord zmm12,zmm12,zmm0
        vpxord zmm13,zmm13,zmm1
        vpxord zmm14,zmm14,zmm2
        vpxord zmm15,zmm15,zmm3
        vprord zmm12,zmm12,0x8
        vprord zmm13,zmm13,0x8
        vprord zmm14,zmm14,0x8
        vprord zmm15,zmm15,0x8
        vpaddd zmm8,zmm8,zmm12
        vpaddd zmm9,zmm9,zmm13
        vpaddd zmm10,zmm10,zmm14
        vpaddd zmm11,zmm11,zmm15
        vpxord zmm4,zmm4,zmm8
        vpxord zmm5,zmm5,zmm9
        vpxord zmm6,zmm6,zmm10
        vpxord zmm7,zmm7,zmm11
        vprord zmm4,zmm4,0x7
        vprord zmm5,zmm5,0x7
        vprord zmm6,zmm6,0x7
        vprord zmm7,zmm7,0x7
        vpaddd zmm0,zmm0,zmm23
        vpaddd zmm1,zmm1,zmm21
        vpaddd zmm2,zmm2,zmm16
        vpaddd zmm3,zmm3,zmm22
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm1,zmm1,zmm6
        vpaddd zmm2,zmm2,zmm7
        vpaddd zmm3,zmm3,zmm4
        vpxord zmm15,zmm15,zmm0
        vpxord zmm12,zmm12,zmm1
        vpxord zmm13,zmm13,zmm2
        vpxord zmm14,zmm14,zmm3
        vprord zmm15,zmm15,0x10
        vprord zmm12,zmm12,0x10
        vprord zmm13,zmm13,0x10
        vprord zmm14,zmm14,0x10
        vpaddd zmm10,zmm10,zmm15
        vpaddd zmm11,zmm11,zmm12
        vpaddd zmm8,zmm8,zmm13
        vpaddd zmm9,zmm9,zmm14
        vpxord zmm5,zmm5,zmm10
        vpxord zmm6,zmm6,zmm11
        vpxord zmm7,zmm7,zmm8
        vpxord zmm4,zmm4,zmm9
        vprord zmm5,zmm5,0xc
        vprord zmm6,zmm6,0xc
        vprord zmm7,zmm7,0xc
        vprord zmm4,zmm4,0xc
        vpaddd zmm0,zmm0,zmm18
        vpaddd zmm1,zmm1,zmm19
        vpaddd zmm2,zmm2,zmm17
        vpaddd zmm3,zmm3,zmm20
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm1,zmm1,zmm6
        vpaddd zmm2,zmm2,zmm7
        vpaddd zmm3,zmm3,zmm4
        vpxord zmm15,zmm15,zmm0
        vpxord zmm12,zmm12,zmm1
        vpxord zmm13,zmm13,zmm2
        vpxord zmm14,zmm14,zmm3
        vprord zmm15,zmm15,0x8
        vprord zmm12,zmm12,0x8
        vprord zmm13,zmm13,0x8
        vprord zmm14,zmm14,0x8
        vpaddd zmm10,zmm10,zmm15
        vpaddd zmm11,zmm11,zmm12
        vpaddd zmm8,zmm8,zmm13
        vpaddd zmm9,zmm9,zmm14
        vpxord zmm5,zmm5,zmm10
        vpxord zmm6,zmm6,zmm11
        vpxord zmm7,zmm7,zmm8
        vpxord zmm4,zmm4,zmm9
        vprord zmm5,zmm5,0x7
        vprord zmm6,zmm6,0x7
        vprord zmm7,zmm7,0x7
        vprord zmm4,zmm4,0x7
        vpaddd zmm0,zmm0,zmm25
        vpaddd zmm1,zmm1,zmm27
        vpaddd zmm2,zmm2,zmm24
        vpaddd zmm3,zmm3,zmm31
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm1,zmm1,zmm5
        vpaddd zmm2,zmm2,zmm6
        vpaddd zmm3,zmm3,zmm7
        vpxord zmm12,zmm12,zmm0
        vpxord zmm13,zmm13,zmm1
        vpxord zmm14,zmm14,zmm2
        vpxord zmm15,zmm15,zmm3
        vprord zmm12,zmm12,0x10
        vprord zmm13,zmm13,0x10
        vprord zmm14,zmm14,0x10
        vprord zmm15,zmm15,0x10
        vpaddd zmm8,zmm8,zmm12
        vpaddd zmm9,zmm9,zmm13
        vpaddd zmm10,zmm10,zmm14
        vpaddd zmm11,zmm11,zmm15
        vpxord zmm4,zmm4,zmm8
        vpxord zmm5,zmm5,zmm9
        vpxord zmm6,zmm6,zmm10
        vpxord zmm7,zmm7,zmm11
        vprord zmm4,zmm4,0xc
        vprord zmm5,zmm5,0xc
        vprord zmm6,zmm6,0xc
        vprord zmm7,zmm7,0xc
        vpaddd zmm0,zmm0,zmm30
        vpaddd zmm1,zmm1,zmm21
        vpaddd zmm2,zmm2,zmm28
        vpaddd zmm3,zmm3,zmm17
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm1,zmm1,zmm5
        vpaddd zmm2,zmm2,zmm6
        vpaddd zmm3,zmm3,zmm7
        vpxord zmm12,zmm12,zmm0
        vpxord zmm13,zmm13,zmm1
        vpxord zmm14,zmm14,zmm2
        vpxord zmm15,zmm15,zmm3
        vprord zmm12,zmm12,0x8
        vprord zmm13,zmm13,0x8
        vprord zmm14,zmm14,0x8
        vprord zmm15,zmm15,0x8
        vpaddd zmm8,zmm8,zmm12
        vpaddd zmm9,zmm9,zmm13
        vpaddd zmm10,zmm10,zmm14
        vpaddd zmm11,zmm11,zmm15
        vpxord zmm4,zmm4,zmm8
        vpxord zmm5,zmm5,zmm9
        vpxord zmm6,zmm6,zmm10
        vpxord zmm7,zmm7,zmm11
        vprord zmm4,zmm4,0x7
        vprord zmm5,zmm5,0x7
        vprord zmm6,zmm6,0x7
        vprord zmm7,zmm7,0x7
        vpaddd zmm0,zmm0,zmm29
        vpaddd zmm1,zmm1,zmm16
        vpaddd zmm2,zmm2,zmm18
        vpaddd zmm3,zmm3,zmm20
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm1,zmm1,zmm6
        vpaddd zmm2,zmm2,zmm7
        vpaddd zmm3,zmm3,zmm4
        vpxord zmm15,zmm15,zmm0
        vpxord zmm12,zmm12,zmm1
        vpxord zmm13,zmm13,zmm2
        vpxord zmm14,zmm14,zmm3
        vprord zmm15,zmm15,0x10
        vprord zmm12,zmm12,0x10
        vprord zmm13,zmm13,0x10
        vprord zmm14,zmm14,0x10
        vpaddd zmm10,zmm10,zmm15
        vpaddd zmm11,zmm11,zmm12
        vpaddd zmm8,zmm8,zmm13
        vpaddd zmm9,zmm9,zmm14
        vpxord zmm5,zmm5,zmm10
        vpxord zmm6,zmm6,zmm11
        vpxord zmm7,zmm7,zmm8
        vpxord zmm4,zmm4,zmm9
        vprord zmm5,zmm5,0xc
        vprord zmm6,zmm6,0xc
        vprord zmm7,zmm7,0xc
        vprord zmm4,zmm4,0xc
        vpaddd zmm0,zmm0,zmm19
        vpaddd zmm1,zmm1,zmm26
        vpaddd zmm2,zmm2,zmm22
        vpaddd zmm3,zmm3,zmm23
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm1,zmm1,zmm6
        vpaddd zmm2,zmm2,zmm7
        vpaddd zmm3,zmm3,zmm4
        vpxord zmm15,zmm15,zmm0
        vpxord zmm12,zmm12,zmm1
        vpxord zmm13,zmm13,zmm2
        vpxord zmm14,zmm14,zmm3
        vprord zmm15,zmm15,0x8
        vprord zmm12,zmm12,0x8
        vprord zmm13,zmm13,0x8
        vprord zmm14,zmm14,0x8
        vpaddd zmm10,zmm10,zmm15
        vpaddd zmm11,zmm11,zmm12
        vpaddd zmm8,zmm8,zmm13
        vpaddd zmm9,zmm9,zmm14
        vpxord zmm5,zmm5,zmm10
        vpxord zmm6,zmm6,zmm11
        vpxord zmm7,zmm7,zmm8
        vpxord zmm4,zmm4,zmm9
        vprord zmm5,zmm5,0x7
        vprord zmm6,zmm6,0x7
        vprord zmm7,zmm7,0x7
        vprord zmm4,zmm4,0x7
        vpaddd zmm0,zmm0,zmm27
        vpaddd zmm1,zmm1,zmm21
        vpaddd zmm2,zmm2,zmm17
        vpaddd zmm3,zmm3,zmm24
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm1,zmm1,zmm5
        vpaddd zmm2,zmm2,zmm6
        vpaddd zmm3,zmm3,zmm7
        vpxord zmm12,zmm12,zmm0
        vpxord zmm13,zmm13,zmm1
        vpxord zmm14,zmm14,zmm2
        vpxord zmm15,zmm15,zmm3
        vprord zmm12,zmm12,0x10
        vprord zmm13,zmm13,0x10
        vprord zmm14,zmm14,0x10
        vprord zmm15,zmm15,0x10
        vpaddd zmm8,zmm8,zmm12
        vpaddd zmm9,zmm9,zmm13
        vpaddd zmm10,zmm10,zmm14
        vpaddd zmm11,zmm11,zmm15
        vpxord zmm4,zmm4,zmm8
        vpxord zmm5,zmm5,zmm9
        vpxord zmm6,zmm6,zmm10
        vpxord zmm7,zmm7,zmm11
        vprord zmm4,zmm4,0xc
        vprord zmm5,zmm5,0xc
        vprord zmm6,zmm6,0xc
        vprord zmm7,zmm7,0xc
        vpaddd zmm0,zmm0,zmm31
        vpaddd zmm1,zmm1,zmm16
        vpaddd zmm2,zmm2,zmm25
        vpaddd zmm3,zmm3,zmm22
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm1,zmm1,zmm5
        vpaddd zmm2,zmm2,zmm6
        vpaddd zmm3,zmm3,zmm7
        vpxord zmm12,zmm12,zmm0
        vpxord zmm13,zmm13,zmm1
        vpxord zmm14,zmm14,zmm2
        vpxord zmm15,zmm15,zmm3
        vprord zmm12,zmm12,0x8
        vprord zmm13,zmm13,0x8
        vprord zmm14,zmm14,0x8
        vprord zmm15,zmm15,0x8
        vpaddd zmm8,zmm8,zmm12
        vpaddd zmm9,zmm9,zmm13
        vpaddd zmm10,zmm10,zmm14
        vpaddd zmm11,zmm11,zmm15
        vpxord zmm4,zmm4,zmm8
        vpxord zmm5,zmm5,zmm9
        vpxord zmm6,zmm6,zmm10
        vpxord zmm7,zmm7,zmm11
        vprord zmm4,zmm4,0x7
        vprord zmm5,zmm5,0x7
        vprord zmm6,zmm6,0x7
        vprord zmm7,zmm7,0x7
        vpaddd zmm0,zmm0,zmm30
        vpaddd zmm1,zmm1,zmm18
        vpaddd zmm2,zmm2,zmm19
        vpaddd zmm3,zmm3,zmm23
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm1,zmm1,zmm6
        vpaddd zmm2,zmm2,zmm7
        vpaddd zmm3,zmm3,zmm4
        vpxord zmm15,zmm15,zmm0
        vpxord zmm12,zmm12,zmm1
        vpxord zmm13,zmm13,zmm2
        vpxord zmm14,zmm14,zmm3
        vprord zmm15,zmm15,0x10
        vprord zmm12,zmm12,0x10
        vprord zmm13,zmm13,0x10
        vprord zmm14,zmm14,0x10
        vpaddd zmm10,zmm10,zmm15
        vpaddd zmm11,zmm11,zmm12
        vpaddd zmm8,zmm8,zmm13
        vpaddd zmm9,zmm9,zmm14
        vpxord zmm5,zmm5,zmm10
        vpxord zmm6,zmm6,zmm11
        vpxord zmm7,zmm7,zmm8
        vpxord zmm4,zmm4,zmm9
        vprord zmm5,zmm5,0xc
        vprord zmm6,zmm6,0xc
        vprord zmm7,zmm7,0xc
        vprord zmm4,zmm4,0xc
        vpaddd zmm0,zmm0,zmm26
        vpaddd zmm1,zmm1,zmm28
        vpaddd zmm2,zmm2,zmm20
        vpaddd zmm3,zmm3,zmm29
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm1,zmm1,zmm6
        vpaddd zmm2,zmm2,zmm7
        vpaddd zmm3,zmm3,zmm4
        vpxord zmm15,zmm15,zmm0
        vpxord zmm12,zmm12,zmm1
        vpxord zmm13,zmm13,zmm2
        vpxord zmm14,zmm14,zmm3
        vprord zmm15,zmm15,0x8
        vprord zmm12,zmm12,0x8
        vprord zmm13,zmm13,0x8
        vprord zmm14,zmm14,0x8
        vpaddd zmm10,zmm10,zmm15
        vpaddd zmm11,zmm11,zmm12
        vpaddd zmm8,zmm8,zmm13
        vpaddd zmm9,zmm9,zmm14
        vpxord zmm5,zmm5,zmm10
        vpxord zmm6,zmm6,zmm11
        vpxord zmm7,zmm7,zmm8
        vpxord zmm4,zmm4,zmm9
        vprord zmm5,zmm5,0x7
        vprord zmm6,zmm6,0x7
        vprord zmm7,zmm7,0x7
        vprord zmm4,zmm4,0x7
        vpxord zmm0,zmm0,zmm8
        vpxord zmm1,zmm1,zmm9
        vpxord zmm2,zmm2,zmm10
        vpxord zmm3,zmm3,zmm11
        vpxord zmm4,zmm4,zmm12
        vpxord zmm5,zmm5,zmm13
        vpxord zmm6,zmm6,zmm14
        vpxord zmm7,zmm7,zmm15
        vpxord zmm8,zmm8,DWORD PTR [rdi]{1to16}
        vpxord zmm9,zmm9,DWORD PTR [rdi+0x4]{1to16}
        vpxord zmm10,zmm10,DWORD PTR [rdi+0x8]{1to16}
        vpxord zmm11,zmm11,DWORD PTR [rdi+0xc]{1to16}
        vpxord zmm12,zmm12,DWORD PTR [rdi+0x10]{1to16}
        vpxord zmm13,zmm13,DWORD PTR [rdi+0x14]{1to16}
        vpxord zmm14,zmm14,DWORD PTR [rdi+0x18]{1to16}
        vpxord zmm15,zmm15,DWORD PTR [rdi+0x1c]{1to16}
        vpunpckldq zmm16,zmm0,zmm1
        vpunpckhdq zmm17,zmm0,zmm1
        vpunpckldq zmm18,zmm2,zmm3
        vpunpckhdq zmm19,zmm2,zmm3
        vpunpckldq zmm20,zmm4,zmm5
        vpunpckhdq zmm21,zmm4,zmm5
        vpunpckldq zmm22,zmm6,zmm7
        vpunpckhdq zmm23,zmm6,zmm7
        vpunpckldq zmm24,zmm8,zmm9
        vpunpckhdq zmm25,zmm8,zmm9
        vpunpckldq zmm26,zmm10,zmm11
        vpunpckhdq zmm27,zmm10,zmm11
        vpunpckldq zmm28,zmm12,zmm13
        vpunpckhdq zmm29,zmm12,zmm13
        vpunpckldq zmm30,zmm14,zmm15
        vpunpckhdq zmm31,zmm14,zmm15
        vpunpcklqdq zmm0,zmm16,zmm18
        vpunpckhqdq zmm1,zmm16,zmm18
        vpunpcklqdq zmm2,zmm17,zmm19
        vpunpckhqdq zmm3,zmm17,zmm19
        vpunpcklqdq zmm4,zmm20,zmm22
        vpunpckhqdq zmm5,zmm20,zmm22
        vpunpcklqdq zmm6,zmm21,zmm23
        vpunpckhqdq zmm7,zmm21,zmm23
        vpunpcklqdq zmm8,zmm24,zmm26
        vpunpckhqdq zmm9,zmm24,zmm26
        vpunpcklqdq zmm10,zmm25,zmm27
        vpunpckhqdq zmm11,zmm25,zmm27
        vpunpcklqdq zmm12,zmm28,zmm30
        vpunpckhqdq zmm13,zmm28,zmm30
        vpunpcklqdq zmm14,zmm29,zmm31
        vpunpckhqdq zmm15,zmm29,zmm31
        vshufi32x4 zmm16,zmm0,zmm4,0x88
        vshufi32x4 zmm17,zmm1,zmm5,0x88
        vshufi32x4 zmm18,zmm2,zmm6,0x88
        vshufi32x4 zmm19,zmm3,zmm7,0x88
        vshufi32x4 zmm20,zmm0,zmm4,0xdd
        vshufi32x4 zmm21,zmm1,zmm5,0xdd
        vshufi32x4 zmm22,zmm2,zmm6,0xdd
        vshufi32x4 zmm23,zmm3,zmm7,0xdd
        vshufi32x4 zmm24,zmm8,zmm12,0x88
        vshufi32x4 zmm25,zmm9,zmm13,0x88
        vshufi32x4 zmm26,zmm10,zmm14,0x88
        vshufi32x4 zmm27,zmm11,zmm15,0x88
        vshufi32x4 zmm28,zmm8,zmm12,0xdd
        vshufi32x4 zmm29,zmm9,zmm13,0xdd
        vshufi32x4 zmm30,zmm10,zmm14,0xdd
        vshufi32x4 zmm31,zmm11,zmm15,0xdd
        vshufi32x4 zmm0,zmm16,zmm24,0x88
        vshufi32x4 zmm1,zmm17,zmm25,0x88
        vshufi32x4 zmm2,zmm18,zmm26,0x88
        vshufi32x4 zmm3,zmm19,zmm27,0x88
        vshufi32x4 zmm4,zmm20,zmm28,0x88
        vshufi32x4 zmm5,zmm21,zmm29,0x88
        vshufi32x4 zmm6,zmm22,zmm30,0x88
        vshufi32x4 zmm7,zmm23,zmm31,0x88
        vshufi32x4 zmm8,zmm16,zmm24,0xdd
        vshufi32x4 zmm9,zmm17,zmm25,0xdd
        vshufi32x4 zmm10,zmm18,zmm26,0xdd
        vshufi32x4 zmm11,zmm19,zmm27,0xdd
        vshufi32x4 zmm12,zmm20,zmm28,0xdd
        vshufi32x4 zmm13,zmm21,zmm29,0xdd
        vshufi32x4 zmm14,zmm22,zmm30,0xdd
        vshufi32x4 zmm15,zmm23,zmm31,0xdd
        vmovdqu32 ZMMWORD PTR [r9],zmm0
        vmovdqu32 ZMMWORD PTR [r9+0x40],zmm1
        vmovdqu32 ZMMWORD PTR [r9+0x80],zmm2
        vmovdqu32 ZMMWORD PTR [r9+0xc0],zmm3
        vmovdqu32 ZMMWORD PTR [r9+0x100],zmm4
        vmovdqu32 ZMMWORD PTR [r9+0x140],zmm5
        vmovdqu32 ZMMWORD PTR [r9+0x180],zmm6
        vmovdqu32 ZMMWORD PTR [r9+0x1c0],zmm7
        vmovdqu32 ZMMWORD PTR [r9+0x200],zmm8
        vmovdqu32 ZMMWORD PTR [r9+0x240],zmm9
        vmovdqu32 ZMMWORD PTR [r9+0x280],zmm10
        vmovdqu32 ZMMWORD PTR [r9+0x2c0],zmm11
        vmovdqu32 ZMMWORD PTR [r9+0x300],zmm12
        vmovdqu32 ZMMWORD PTR [r9+0x340],zmm13
        vmovdqu32 ZMMWORD PTR [r9+0x380],zmm14
        vmovdqu32 ZMMWORD PTR [r9+0x3c0],zmm15
        vmovdqa32 zmm0,ZMMWORD PTR [rsp]
        vmovdqa32 zmm1,ZMMWORD PTR [rsp+0x40]
        vpaddd zmm2,zmm0,DWORD PTR [ADD16+rip]{1to16}
        vpcmpltud k1,zmm2,zmm0
        vpaddd zmm1{k1},zmm1,DWORD PTR [ADD1+rip]{1to16}
        vmovdqa32 ZMMWORD PTR [rsp],zmm2
        vmovdqa32 ZMMWORD PTR [rsp+0x40],zmm1
        add    r9,0x400
        sub    r10,0x10
        cmp    r10,0x10
        jae    3b
        test   r10,r10
        jne    2f
9:
        vzeroupper 
        mov    rsp,rbp
        pop    rbp
        ret    
2:
        test   r10,0x8
        je     2f
        vpbroadcastd ymm16,DWORD PTR [rsi]
        vpbroadcastd ymm17,DWORD PTR [rsi+0x4]
        vpbroadcastd ymm18,DWORD PTR [rsi+0x8]
        vpbroadcastd ymm19,DWORD PTR [rsi+0xc]
        vpbroadcastd ymm20,DWORD PTR [rsi+0x10]
        vpbroadcastd ymm21,DWORD PTR [rsi+0x14]
        vpbroadcastd ymm22,DWORD PTR [rsi+0x18]
        vpbroadcastd ymm23,DWORD PTR [rsi+0x1c]
        vpbroadcastd ymm24,DWORD PTR [rsi+0x20]
        vpbroadcastd ymm25,DWORD PTR [rsi+0x24]
        vpbroadcastd ymm26,DWORD PTR [rsi+0x28]
        vpbroadcastd ymm27,DWORD PTR [rsi+0x2c]
        vpbroadcastd ymm28,DWORD PTR [rsi+0x30]
        vpbroadcastd ymm29,DWORD PTR [rsi+0x34]
        vpbroadcastd ymm30,DWORD PTR [rsi+0x38]
        vpbroadcastd ymm31,DWORD PTR [rsi+0x3c]
        vpbroadcastd ymm0,DWORD PTR [rdi]
        vpbroadcastd ymm1,DWORD PTR [rdi+0x4]
        vpbroadcastd ymm2,DWORD PTR [rdi+0x8]
        vpbroadcastd ymm3,DWORD PTR [rdi+0xc]
        vpbroadcastd ymm4,DWORD PTR [rdi+0x10]
        vpbroadcastd ymm5,DWORD PTR [rdi+0x14]
        vpbroadcastd ymm6,DWORD PTR [rdi+0x18]
        vpbroadcastd ymm7,DWORD PTR [rdi+0x1c]
        vpbroadcastd ymm8,DWORD PTR [BLAKE3_IV_0+rip]
        vpbroadcastd ymm9,DWORD PTR [BLAKE3_IV_1+rip]
        vpbroadcastd ymm10,DWORD PTR [BLAKE3_IV_2+rip]
        vpbroadcastd ymm11,DWORD PTR [BLAKE3_IV_3+rip]
        vmovdqa ymm12,YMMWORD PTR [rsp]
        vmovdqa ymm13,YMMWORD PTR [rsp+0x40]
        vpbroadcastd ymm14,edx
        vpbroadcastd ymm15,r8d
        vpaddd ymm0,ymm0,ymm16
        vpaddd ymm1,ymm1,ymm18
        vpaddd ymm2,ymm2,ymm20
        vpaddd ymm3,ymm3,ymm22
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm1,ymm1,ymm5
        vpaddd ymm2,ymm2,ymm6
        vpaddd ymm3,ymm3,ymm7
        vpxord ymm12,ymm12,ymm0
        vpxord ymm13,ymm13,ymm1
        vpxord ymm14,ymm14,ymm2
        vpxord ymm15,ymm15,ymm3
        vprord ymm12,ymm12,0x10
        vprord ymm13,ymm13,0x10
        vprord ymm14,ymm14,0x10
        vprord ymm15,ymm15,0x10
        vpaddd ymm8,ymm8,ymm12
        vpaddd ymm9,ymm9,ymm13
        vpaddd ymm10,ymm10,ymm14
        vpaddd ymm11,ymm11,ymm15
        vpxord ymm4,ymm4,ymm8
        vpxord ymm5,ymm5,ymm9
        vpxord ymm6,ymm6,ymm10
        vpxord ymm7,ymm7,ymm11
        vprord ymm4,ymm4,0xc
        vprord ymm5,ymm5,0xc
        vprord ymm6,ymm6,0xc
        vprord ymm7,ymm7,0xc
        vpaddd ymm0,ymm0,ymm17
        vpaddd ymm1,ymm1,ymm19
        vpaddd ymm2,ymm2,ymm21
        vpaddd ymm3,ymm3,ymm23
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm1,ymm1,ymm5
        vpaddd ymm2,ymm2,ymm6
        vpaddd ymm3,ymm3,ymm7
        vpxord ymm12,ymm12,ymm0
        vpxord ymm13,ymm13,ymm1
        vpxord ymm14,ymm14,ymm2
        vpxord ymm15,ymm15,ymm3
        vprord ymm12,ymm12,0x8
        vprord ymm13,ymm13,0x8
        vprord ymm14,ymm14,0x8
        vprord ymm15,ymm15,0x8
        vpaddd ymm8,ymm8,ymm12
        vpaddd ymm9,ymm9,ymm13
        vpaddd ymm10,ymm10,ymm14
        vpaddd ymm11,ymm11,ymm15
        vpxord ymm4,ymm4,ymm8
        vpxord ymm5,ymm5,ymm9
        vpxord ymm6,ymm6,ymm10
        vpxord ymm7,ymm7,ymm11
        vprord ymm4,ymm4,0x7
        vprord ymm5,ymm5,0x7
        vprord ymm6,ymm6,0x7
        vprord ymm7,ymm7,0x7
        vpaddd ymm0,ymm0,ymm24
        vpaddd ymm1,ymm1,ymm26
        vpaddd ymm2,ymm2,ymm28
        vpaddd ymm3,ymm3,ymm30
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm1,ymm1,ymm6
        vpaddd ymm2,ymm2,ymm7
        vpaddd ymm3,ymm3,ymm4
        vpxord ymm15,ymm15,ymm0
        vpxord ymm12,ymm12,ymm1
        vpxord ymm13,ymm13,ymm2
        vpxord ymm14,ymm14,ymm3
        vprord ymm15,ymm15,0x10
        vprord ymm12,ymm12,0x10
        vprord ymm13,ymm13,0x10
        vprord ymm14,ymm14,0x10
        vpaddd ymm10,ymm10,ymm15
        vpaddd ymm11,ymm11,ymm12
        vpaddd ymm8,ymm8,ymm13
        vpaddd ymm9,ymm9,ymm14
        vpxord ymm5,ymm5,ymm10
        vpxord ymm6,ymm6,ymm11
        vpxord ymm7,ymm7,ymm8
        vpxord ymm4,ymm4,ymm9
        vprord ymm5,ymm5,0xc
        vprord ymm6,ymm6,0xc
        vprord ymm7,ymm7,0xc
        vprord ymm4,ymm4,0xc
        vpaddd ymm0,ymm0,ymm25
        vpaddd ymm1,ymm1,ymm27
        vpaddd ymm2,ymm2,ymm29
        vpaddd ymm3,ymm3,ymm31
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm1,ymm1,ymm6
        vpaddd ymm2,ymm2,ymm7
        vpaddd ymm3,ymm3,ymm4
        vpxord ymm15,ymm15,ymm0
        vpxord ymm12,ymm12,ymm1
        vpxord ymm13,ymm13,ymm2
        vpxord ymm14,ymm14,ymm3
        vprord ymm15,ymm15,0x8
        vprord ymm12,ymm12,0x8
        vprord ymm13,ymm13,0x8
        vprord ymm14,ymm14,0x8
        vpaddd ymm10,ymm10,ymm15
        vpaddd ymm11,ymm11,ymm12
        vpaddd ymm8,ymm8,ymm13
        vpaddd ymm9,ymm9,ymm14
        vpxord ymm5,ymm5,ymm10
        vpxord ymm6,ymm6,ymm11
        vpxord ymm7,ymm7,ymm8
        vpxord ymm4,ymm4,ymm9
        vprord ymm5,ymm5,0x7
        vprord ymm6,ymm6,0x7
        vprord ymm7,ymm7,0x7
        vprord ymm4,ymm4,0x7
        vpaddd ymm0,ymm0,ymm18
        vpaddd ymm1,ymm1,ymm19
        vpaddd ymm2,ymm2,ymm23
        vpaddd ymm3,ymm3,ymm20
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm1,ymm1,ymm5
        vpaddd ymm2,ymm2,ymm6
        vpaddd ymm3,ymm3,ymm7
        vpxord ymm12,ymm12,ymm0
        vpxord ymm13,ymm13,ymm1
        vpxord ymm14,ymm14,ymm2
        vpxord ymm15,ymm15,ymm3
        vprord ymm12,ymm12,0x10
        vprord ymm13,ymm13,0x10
        vprord ymm14,ymm14,0x10
        vprord ymm15,ymm15,0x10
        vpaddd ymm8,ymm8,ymm12
        vpaddd ymm9,ymm9,ymm13
        vpaddd ymm10,ymm10,ymm14
        vpaddd ymm11,ymm11,ymm15
        vpxord ymm4,ymm4,ymm8
        vpxord ymm5,ymm5,ymm9
        vpxord ymm6,ymm6,ymm10
        vpxord ymm7,ymm7,ymm11
        vprord ymm4,ymm4,0xc
        vprord ymm5,ymm5,0xc
        vprord ymm6,ymm6,0xc
        vprord ymm7,ymm7,0xc
        vpaddd ymm0,ymm0,ymm22
        vpaddd ymm1,ymm1,ymm26
        vpaddd ymm2,ymm2,ymm16
        vpaddd ymm3,ymm3,ymm29
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm1,ymm1,ymm5
        vpaddd ymm2,ymm2,ymm6
        vpaddd ymm3,ymm3,ymm7
        vpxord ymm12,ymm12,ymm0
        vpxord ymm13,ymm13,ymm1
        vpxord ymm14,ymm14,ymm2
        vpxord ymm15,ymm15,ymm3
        vprord ymm12,ymm12,0x8
        vprord ymm13,ymm13,0x8
        vprord ymm14,ymm14,0x8
        vprord ymm15,ymm15,0x8
        vpaddd ymm8,ymm8,ymm12
        vpaddd ymm9,ymm9,ymm13
        vpaddd ymm10,ymm10,ymm14
        vpaddd ymm11,ymm11,ymm15
        vpxord ymm4,ymm4,ymm8
        vpxord ymm5,ymm5,ymm9
        vpxord ymm6,ymm6,ymm10
        vpxord ymm7,ymm7,ymm11
        vprord ymm4,ymm4,0x7
        vprord ymm5,ymm5,0x7
        vprord ymm6,ymm6,0x7
        vprord ymm7,ymm7,0x7
        vpaddd ymm0,ymm0,ymm17
        vpaddd ymm1,ymm1,ymm28
        vpaddd ymm2,ymm2,ymm25
        vpaddd ymm3,ymm3,ymm31
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm1,ymm1,ymm6
        vpaddd ymm2,ymm2,ymm7
        vpaddd ymm3,ymm3,ymm4
        vpxord ymm15,ymm15,ymm0
        vpxord ymm12,ymm12,ymm1
        vpxord ymm13,ymm13,ymm2
        vpxord ymm14,ymm14,ymm3
        vprord ymm15,ymm15,0x10
        vprord ymm12,ymm12,0x10
        vprord ymm13,ymm13,0x10
        vprord ymm14,ymm14,0x10
        vpaddd ymm10,ymm10,ymm15
        vpaddd ymm11,ymm11,ymm12
        vpaddd ymm8,ymm8,ymm13
        vpaddd ymm9,ymm9,ymm14
        vpxord ymm5,ymm5,ymm10
        vpxord ymm6,ymm6,ymm11
        vpxord ymm7,ymm7,ymm8
        vpxord ymm4,ymm4,ymm9
        vprord ymm5,ymm5,0xc
        vprord ymm6,ymm6,0xc
        vprord ymm7,ymm7,0xc
        vprord ymm4,ymm4,0xc
        vpaddd ymm0,ymm0,ymm27
        vpaddd ymm1,ymm1,ymm21
        vpaddd ymm2,ymm2,ymm30
        vpaddd ymm3,ymm3,ymm24
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm1,ymm1,ymm6
        vpaddd ymm2,ymm2,ymm7
        vpaddd ymm3,ymm3,ymm4
        vpxord ymm15,ymm15,ymm0
        vpxord ymm12,ymm12,ymm1
        vpxord ymm13,ymm13,ymm2
        vpxord ymm14,ymm14,ymm3
        vprord ymm15,ymm15,0x8
        vprord ymm12,ymm12,0x8
        vprord ymm13,ymm13,0x8
        vprord ymm14,ymm14,0x8
        vpaddd ymm10,ymm10,ymm15
        vpaddd ymm11,ymm11,ymm12
        vpaddd ymm8,ymm8,ymm13
        vpaddd ymm9,ymm9,ymm14
        vpxord ymm5,ymm5,ymm10
        vpxord ymm6,ymm6,ymm11
        vpxord ymm7,ymm7,ymm8
        vpxord ymm4,ymm4,ymm9
        vprord ymm5,ymm5,0x7
        vprord ymm6,ymm6,0x7
        vprord ymm7,ymm7,0x7
        vprord ymm4,ymm4,0x7
        vpaddd ymm0,ymm0,ymm19
        vpaddd ymm1,ymm1,ymm26
        vpaddd ymm2,ymm2,ymm29
        vpaddd ymm3,ymm3,ymm23
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm1,ymm1,ymm5
        vpaddd ymm2,ymm2,ymm6
        vpaddd ymm3,ymm3,ymm7
        vpxord ymm12,ymm12,ymm0
        vpxord ymm13,ymm13,ymm1
        vpxord ymm14,ymm14,ymm2
        vpxord ymm15,ymm15,ymm3
        vprord ymm12,ymm12,0x10
        vprord ymm13,ymm13,0x10
        vprord ymm14,ymm14,0x10
        vprord ymm15,ymm15,0x10
        vpaddd ymm8,ymm8,ymm12
        vpaddd ymm9,ymm9,ymm13
        vpaddd ymm10,ymm10,ymm14
        vpaddd ymm11,ymm11,ymm15
        vpxord ymm4,ymm4,ymm8
        vpxord ymm5,ymm5,ymm9
        vpxord ymm6,ymm6,ymm10
        vpxord ymm7,ymm7,ymm11
        vprord ymm4,ymm4,0xc
        vprord ymm5,ymm5,0xc
        vprord ymm6,ymm6,0xc
        vprord ymm7,ymm7,0xc
        vpaddd ymm0,ymm0,ymm20
        vpaddd ymm1,ymm1,ymm28
        vpaddd ymm2,ymm2,ymm18
        vpaddd ymm3,ymm3,ymm30
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm1,ymm1,ymm5
        vpaddd ymm2,ymm2,ymm6
        vpaddd ymm3,ymm3,ymm7
        vpxord ymm12,ymm12,ymm0
        vpxord ymm13,ymm13,ymm1
        vpxord ymm14,ymm14,ymm2
        vpxord ymm15,ymm15,ymm3
        vprord ymm12,ymm12,0x8
        vprord ymm13,ymm13,0x8
        vprord ymm14,ymm14,0x8
        vprord ymm15,ymm15,0x8
        vpaddd ymm8,ymm8,ymm12
        vpaddd ymm9,ymm9,ymm13
        vpaddd ymm10,ymm10,ymm14
        vpaddd ymm11,ymm11,ymm15
        vpxord ymm4,ymm4,ymm8
        vpxord ymm5,ymm5,ymm9
        vpxord ymm6,ymm6,ymm10
        vpxord ymm7,ymm7,ymm11
        vprord ymm4,ymm4,0x7
        vprord ymm5,ymm5,0x7
        vprord ymm6,ymm6,0x7
        vprord ymm7,ymm7,0x7
        vpaddd ymm0,ymm0,ymm22
        vpaddd ymm1,ymm1,ymm25
        vpaddd ymm2,ymm2,ymm27
        vpaddd ymm3,ymm3,ymm24
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm1,ymm1,ymm6
        vpaddd ymm2,ymm2,ymm7
        vpaddd ymm3,ymm3,ymm4
        vpxord ymm15,ymm15,ymm0
        vpxord ymm12,ymm12,ymm1
        vpxord ymm13,ymm13,ymm2
        vpxord ymm14,ymm14,ymm3
        vprord ymm15,ymm15,0x10
        vprord ymm12,ymm12,0x10
        vprord ymm13,ymm13,0x10
        vprord ymm14,ymm14,0x10
        vpaddd ymm10,ymm10,ymm15
        vpaddd ymm11,ymm11,ymm12
        vpaddd ymm8,ymm8,ymm13
        vpaddd ymm9,ymm9,ymm14
        vpxord ymm5,ymm5,ymm10
        vpxord ymm6,ymm6,ymm11
        vpxord ymm7,ymm7,ymm8
        vpxord ymm4,ymm4,ymm9
        vprord ymm5,ymm5,0xc
        vprord ymm6,ymm6,0xc
        vprord ymm7,ymm7,0xc
        vprord ymm4,ymm4,0xc
        vpaddd ymm0,ymm0,ymm21
        vpaddd ymm1,ymm1,ymm16
        vpaddd ymm2,ymm2,ymm31
        vpaddd ymm3,ymm3,ymm17
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm1,ymm1,ymm6
        vpaddd ymm2,ymm2,ymm7
        vpaddd ymm3,ymm3,ymm4
        vpxord ymm15,ymm15,ymm0
        vpxord ymm12,ymm12,ymm1
        vpxord ymm13,ymm13,ymm2
        vpxord ymm14,ymm14,ymm3
        vprord ymm15,ymm15,0x8
        vprord ymm12,ymm12,0x8
        vprord ymm13,ymm13,0x8
        vprord ymm14,ymm14,0x8
        vpaddd ymm10,ymm10,ymm15
        vpaddd ymm11,ymm11,ymm12
        vpaddd ymm8,ymm8,ymm13
        vpaddd ymm9,ymm9,ymm14
        vpxord ymm5,ymm5,ymm10
        vpxord ymm6,ymm6,ymm11
        vpxord ymm7,ymm7,ymm8
        vpxord ymm4,ymm4,ymm9
        vprord ymm5,ymm5,0x7
        vprord ymm6,ymm6,0x7
        vprord ymm7,ymm7,0x7
        vprord ymm4,ymm4,0x7
        vpaddd ymm0,ymm0,ymm26
        vpaddd ymm1,ymm1,ymm28
        vpaddd ymm2,ymm2,ymm30
        vpaddd ymm3,ymm3,ymm29
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm1,ymm1,ymm5
        vpaddd ymm2,ymm2,ymm6
        vpaddd ymm3,ymm3,ymm7
        vpxord ymm12,ymm12,ymm0
        vpxord ymm13,ymm13,ymm1
        vpxord ymm14,ymm14,ymm2
        vpxord ymm15,ymm15,ymm3
        vprord ymm12,ymm12,0x10
        vprord ymm13,ymm13,0x10
        vprord ymm14,ymm14,0x10
        vprord ymm15,ymm15,0x10
        vpaddd ymm8,ymm8,ymm12
        vpaddd ymm9,ymm9,ymm13
        vpaddd ymm10,ymm10,ymm14
        vpaddd ymm11,ymm11,ymm15
        vpxord ymm4,ymm4,ymm8
        vpxord ymm5,ymm5,ymm9
        vpxord ymm6,ymm6,ymm10
        vpxord ymm7,ymm7,ymm11
        vprord ymm4,ymm4,0xc
        vprord ymm5,ymm5,0xc
        vprord ymm6,ymm6,0xc
        vprord ymm7,ymm7,0xc
        vpaddd ymm0,ymm0,ymm23
        vpaddd ymm1,ymm1,ymm25
        vpaddd ymm2,ymm2,ymm19
        vpaddd ymm3,ymm3,ymm31
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm1,ymm1,ymm5
        vpaddd ymm2,ymm2,ymm6
        vpaddd ymm3,ymm3,ymm7
        vpxord ymm12,ymm12,ymm0
        vpxord ymm13,ymm13,ymm1
        vpxord ymm14,ymm14,ymm2
        vpxord ymm15,ymm15,ymm3
        vprord ymm12,ymm12,0x8
        vprord ymm13,ymm13,0x8
        vprord ymm14,ymm14,0x8
        vprord ymm15,ymm15,0x8
        vpaddd ymm8,ymm8,ymm12
        vpaddd ymm9,ymm9,ymm13
        vpaddd ymm10,ymm10,ymm14
        vpaddd ymm11,ymm11,ymm15
        vpxord ymm4,ymm4,ymm8
        vpxord ymm5,ymm5,ymm9
        vpxord ymm6,ymm6,ymm10
        vpxord ymm7,ymm7,ymm11
        vprord ymm4,ymm4,0x7
        vprord ymm5,ymm5,0x7
        vprord ymm6,ymm6,0x7
        vprord ymm7,ymm7,0x7
        vpaddd ymm0,ymm0,ymm20
        vpaddd ymm1,ymm1,ymm27
        vpaddd ymm2,ymm2,ymm21
        vpaddd ymm3,ymm3,ymm17
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm1,ymm1,ymm6
        vpaddd ymm2,ymm2,ymm7
        vpaddd ymm3,ymm3,ymm4
        vpxord ymm15,ymm15,ymm0
        vpxord ymm12,ymm12,ymm1
        vpxord ymm13,ymm13,ymm2
        vpxord ymm14,ymm14,ymm3
        vprord ymm15,ymm15,0x10
        vprord ymm12,ymm12,0x10
        vprord ymm13,ymm13,0x10
        vprord ymm14,ymm14,0x10
        vpaddd ymm10,ymm10,ymm15
        vpaddd ymm11,ymm11,ymm12
        vpaddd ymm8,ymm8,ymm13
        vpaddd ymm9,ymm9,ymm14
        vpxord ymm5,ymm5,ymm10
        vpxord ymm6,ymm6,ymm11
        vpxord ymm7,ymm7,ymm8
        vpxord ymm4,ymm4,ymm9
        vprord ymm5,ymm5,0xc
        vprord ymm6,ymm6,0xc
        vprord ymm7,ymm7,0xc
        vprord ymm4,ymm4,0xc
        vpaddd ymm0,ymm0,ymm16
        vpaddd ymm1,ymm1,ymm18
        vpaddd ymm2,ymm2,ymm24
        vpaddd ymm3,ymm3,ymm22
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm1,ymm1,ymm6
        vpaddd ymm2,ymm2,ymm7
        vpaddd ymm3,ymm3,ymm4
        vpxord ymm15,ymm15,ymm0
        vpxord ymm12,ymm12,ymm1
        vpxord ymm13,ymm13,ymm2
        vpxord ymm14,ymm14,ymm3
        vprord ymm15,ymm15,0x8
        vprord ymm12,ymm12,0x8
        vprord ymm13,ymm13,0x8
        vprord ymm14,ymm14,0x8
        vpaddd ymm10,ymm10,ymm15
        vpaddd ymm11,ymm11,ymm12
        vpaddd ymm8,ymm8,ymm13
        vpaddd ymm9,ymm9,ymm14
        vpxord ymm5,ymm5,ymm10
        vpxord ymm6,ymm6,ymm11
        vpxord ymm7,ymm7,ymm8
        vpxord ymm4,ymm4,ymm9
        vprord ymm5,ymm5,0x7
        vprord ymm6,ymm6,0x7
        vprord ymm7,ymm7,0x7
        vprord ymm4,ymm4,0x7
        vpaddd ymm0,ymm0,ymm28
        vpaddd ymm1,ymm1,ymm25
        vpaddd ymm2,ymm2,ymm31
        vpaddd ymm3,ymm3,ymm30
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm1,ymm1,ymm5
        vpaddd ymm2,ymm2,ymm6
        vpaddd ymm3,ymm3,ymm7
        vpxord ymm12,ymm12,ymm0
        vpxord ymm13,ymm13,ymm1
        vpxord ymm14,ymm14,ymm2
        vpxord ymm15,ymm15,ymm3
        vprord ymm12,ymm12,0x10
        vprord ymm13,ymm13,0x10
        vprord ymm14,ymm14,0x10
        vprord ymm15,ymm15,0x10
        vpaddd ymm8,ymm8,ymm12
        vpaddd ymm9,ymm9,ymm13
        vpaddd ymm10,ymm10,ymm14
        vpaddd ymm11,ymm11,ymm15
        vpxord ymm4,ymm4,ymm8
        vpxord ymm5,ymm5,ymm9
        vpxord ymm6,ymm6,ymm10
        vpxord ymm7,ymm7,ymm11
        vprord ymm4,ymm4,0xc
        vprord ymm5,ymm5,0xc
        vprord ymm6,ymm6,0xc
        vprord ymm7,ymm7,0xc
        vpaddd ymm0,ymm0,ymm29
        vpaddd ymm1,ymm1,ymm27
        vpaddd ymm2,ymm2,ymm26
        vpaddd ymm3,ymm3,ymm24
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm1,ymm1,ymm5
        vpaddd ymm2,ymm2,ymm6
        vpaddd ymm3,ymm3,ymm7
        vpxord ymm12,ymm12,ymm0
        vpxord ymm13,ymm13,ymm1
        vpxord ymm14,ymm14,ymm2
        vpxord ymm15,ymm15,ymm3
        vprord ymm12,ymm12,0x8
        vprord ymm13,ymm13,0x8
        vprord ymm14,ymm14,0x8
        vprord ymm15,ymm15,0x8
        vpaddd ymm8,ymm8,ymm12
        vpaddd ymm9,ymm9,ymm13
        vpaddd ymm10,ymm10,ymm14
        vpaddd ymm11,ymm11,ymm15
        vpxord ymm4,ymm4,ymm8
        vpxord ymm5,ymm5,ymm9
        vpxord ymm6,ymm6,ymm10
        vpxord ymm7,ymm7,ymm11
        vprord ymm4,ymm4,0x7
        vprord ymm5,ymm5,0x7
        vprord ymm6,ymm6,0x7
        vprord ymm7,ymm7,0x7
        vpaddd ymm0,ymm0,ymm23
        vpaddd ymm1,ymm1,ymm21
        vpaddd ymm2,ymm2,ymm16
        vpaddd ymm3,ymm3,ymm22
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm1,ymm1,ymm6
        vpaddd ymm2,ymm2,ymm7
        vpaddd ymm3,ymm3,ymm4
        vpxord ymm15,ymm15,ymm0
        vpxord ymm12,ymm12,ymm1
        vpxord ymm13,ymm13,ymm2
        vpxord ymm14,ymm14,ymm3
        vprord ymm15,ymm15,0x10
        vprord ymm12,ymm12,0x10
        vprord ymm13,ymm13,0x10
        vprord ymm14,ymm14,0x10
        vpaddd ymm10,ymm10,ymm15
        vpaddd ymm11,ymm11,ymm12
        vpaddd ymm8,ymm8,ymm13
        vpaddd ymm9,ymm9,ymm14
        vpxord ymm5,ymm5,ymm10
        vpxord ymm6,ymm6,ymm11
        vpxord ymm7,ymm7,ymm8
        vpxord ymm4,ymm4,ymm9
        vprord ymm5,ymm5,0xc
        vprord ymm6,ymm6,0xc
        vprord ymm7,ymm7,0xc
        vprord ymm4,ymm4,0xc
        vpaddd ymm0,ymm0,ymm18
        vpaddd ymm1,ymm1,ymm19
        vpaddd ymm2,ymm2,ymm17
        vpaddd ymm3,ymm3,ymm20
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm1,ymm1,ymm6
        vpaddd ymm2,ymm2,ymm7
        vpaddd ymm3,ymm3,ymm4
        vpxord ymm15,ymm15,ymm0
        vpxord ymm12,ymm12,ymm1
        vpxord ymm13,ymm13,ymm2
        vpxord ymm14,ymm14,ymm3
        vprord ymm15,ymm15,0x8
        vprord ymm12,ymm12,0x8
        vprord ymm13,ymm13,0x8
        vprord ymm14,ymm14,0x8
        vpaddd ymm10,ymm10,ymm15
        vpaddd ymm11,ymm11,ymm12
        vpaddd ymm8,ymm8,ymm13
        vpaddd ymm9,ymm9,ymm14
        vpxord ymm5,ymm5,ymm10
        vpxord ymm6,ymm6,ymm11
        vpxord ymm7,ymm7,ymm8
        vpxord ymm4,ymm4,ymm9
        vprord ymm5,ymm5,0x7
        vprord ymm6,ymm6,0x7
        vprord ymm7,ymm7,0x7
        vprord ymm4,ymm4,0x7
        vpaddd ymm0,ymm0,ymm25
        vpaddd ymm1,ymm1,ymm27
        vpaddd ymm2,ymm2,ymm24
        vpaddd ymm3,ymm3,ymm31
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm1,ymm1,ymm5
        vpaddd ymm2,ymm2,ymm6
        vpaddd ymm3,ymm3,ymm7
        vpxord ymm12,ymm12,ymm0
        vpxord ymm13,ymm13,ymm1
        vpxord ymm14,ymm14,ymm2
        vpxord ymm15,ymm15,ymm3
        vprord ymm12,ymm12,0x10
        vprord ymm13,ymm13,0x10
        vprord ymm14,ymm14,0x10
        vprord ymm15,ymm15,0x10
        vpaddd ymm8,ymm8,ymm12
        vpaddd ymm9,ymm9,ymm13
        vpaddd ymm10,ymm10,ymm14
        vpaddd ymm11,ymm11,ymm15
        vpxord ymm4,ymm4,ymm8
        vpxord ymm5,ymm5,ymm9
        vpxord ymm6,ymm6,ymm10
        vpxord ymm7,ymm7,ymm11
        vprord ymm4,ymm4,0xc
        vprord ymm5,ymm5,0xc
        vprord ymm6,ymm6,0xc
        vprord ymm7,ymm7,0xc
        vpaddd ymm0,ymm0,ymm30
        vpaddd ymm1,ymm1,ymm21
        vpaddd ymm2,ymm2,ymm28
        vpaddd ymm3,ymm3,ymm17
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm1,ymm1,ymm5
        vpaddd ymm2,ymm2,ymm6
        vpaddd ymm3,ymm3,ymm7
        vpxord ymm12,ymm12,ymm0
        vpxord ymm13,ymm13,ymm1
        vpxord ymm14,ymm14,ymm2
        vpxord ymm15,ymm15,ymm3
        vprord ymm12,ymm12,0x8
        vprord ymm13,ymm13,0x8
        vprord ymm14,ymm14,0x8
        vprord ymm15,ymm15,0x8
        vpaddd ymm8,ymm8,ymm12
        vpaddd ymm9,ymm9,ymm13
        vpaddd ymm10,ymm10,ymm14
        vpaddd ymm11,ymm11,ymm15
        vpxord ymm4,ymm4,ymm8
        vpxord ymm5,ymm5,ymm9
        vpxord ymm6,ymm6,ymm10
        vpxord ymm7,ymm7,ymm11
        vprord ymm4,ymm4,0x7
        vprord ymm5,ymm5,0x7
        vprord ymm6,ymm6,0x7
        vprord ymm7,ymm7,0x7
        vpaddd ymm0,ymm0,ymm29
        vpaddd ymm1,ymm1,ymm16
        vpaddd ymm2,ymm2,ymm18
        vpaddd ymm3,ymm3,ymm20
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm1,ymm1,ymm6
        vpaddd ymm2,ymm2,ymm7
        vpaddd ymm3,ymm3,ymm4
        vpxord ymm15,ymm15,ymm0
        vpxord ymm12,ymm12,ymm1
        vpxord ymm13,ymm13,ymm2
        vpxord ymm14,ymm14,ymm3
        vprord ymm15,ymm15,0x10
        vprord ymm12,ymm12,0x10
        vprord ymm13,ymm13,0x10
        vprord ymm14,ymm14,0x10
        vpaddd ymm10,ymm10,ymm15
        vpaddd ymm11,ymm11,ymm12
        vpaddd ymm8,ymm8,ymm13
        vpaddd ymm9,ymm9,ymm14
        vpxord ymm5,ymm5,ymm10
        vpxord ymm6,ymm6,ymm11
        vpxord ymm7,ymm7,ymm8
        vpxord ymm4,ymm4,ymm9
        vprord ymm5,ymm5,0xc
        vprord ymm6,ymm6,0xc
        vprord ymm7,ymm7,0xc
        vprord ymm4,ymm4,0xc
        vpaddd ymm0,ymm0,ymm19
        vpaddd ymm1,ymm1,ymm26
        vpaddd ymm2,ymm2,ymm22
        vpaddd ymm3,ymm3,ymm23
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm1,ymm1,ymm6
        vpaddd ymm2,ymm2,ymm7
        vpaddd ymm3,ymm3,ymm4
        vpxord ymm15,ymm15,ymm0
        vpxord ymm12,ymm12,ymm1
        vpxord ymm13,ymm13,ymm2
        vpxord ymm14,ymm14,ymm3
        vprord ymm15,ymm15,0x8
        vprord ymm12,ymm12,0x8
        vprord ymm13,ymm13,0x8
        vprord ymm14,ymm14,0x8
        vpaddd ymm10,ymm10,ymm15
        vpaddd ymm11,ymm11,ymm12
        vpaddd ymm8,ymm8,ymm13
        vpaddd ymm9,ymm9,ymm14
        vpxord ymm5,ymm5,ymm10
        vpxord ymm6,ymm6,ymm11
        vpxord ymm7,ymm7,ymm8
        vpxord ymm4,ymm4,ymm9
        vprord ymm5,ymm5,0x7
        vprord ymm6,ymm6,0x7
        vprord ymm7,ymm7,0x7
        vprord ymm4,ymm4,0x7
        vpaddd ymm0,ymm0,ymm27
        vpaddd ymm1,ymm1,ymm21
        vpaddd ymm2,ymm2,ymm17
        vpaddd ymm3,ymm3,ymm24
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm1,ymm1,ymm5
        vpaddd ymm2,ymm2,ymm6
        vpaddd ymm3,ymm3,ymm7
        vpxord ymm12,ymm12,ymm0
        vpxord ymm13,ymm13,ymm1
        vpxord ymm14,ymm14,ymm2
        vpxord ymm15,ymm15,ymm3
        vprord ymm12,ymm12,0x10
        vprord ymm13,ymm13,0x10
        vprord ymm14,ymm14,0x10
        vprord ymm15,ymm15,0x10
        vpaddd ymm8,ymm8,ymm12
        vpaddd ymm9,ymm9,ymm13
        vpaddd ymm10,ymm10,ymm14
        vpaddd ymm11,ymm11,ymm15
        vpxord ymm4,ymm4,ymm8
        vpxord ymm5,ymm5,ymm9
        vpxord ymm6,ymm6,ymm10
        vpxord ymm7,ymm7,ymm11
        vprord ymm4,ymm4,0xc
        vprord ymm5,ymm5,0xc
        vprord ymm6,ymm6,0xc
        vprord ymm7,ymm7,0xc
        vpaddd ymm0,ymm0,ymm31
        vpaddd ymm1,ymm1,ymm16
        vpaddd ymm2,ymm2,ymm25
        vpaddd ymm3,ymm3,ymm22
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm1,ymm1,ymm5
        vpaddd ymm2,ymm2,ymm6
        vpaddd ymm3,ymm3,ymm7
        vpxord ymm12,ymm12,ymm0
        vpxord ymm13,ymm13,ymm1
        vpxord ymm14,ymm14,ymm2
        vpxord ymm15,ymm15,ymm3
        vprord ymm12,ymm12,0x8
        vprord ymm13,ymm13,0x8
        vprord ymm14,ymm14,0x8
        vprord ymm15,ymm15,0x8
        vpaddd ymm8,ymm8,ymm12
        vpaddd ymm9,ymm9,ymm13
        vpaddd ymm10,ymm10,ymm14
        vpaddd ymm11,ymm11,ymm15
        vpxord ymm4,ymm4,ymm8
        vpxord ymm5,ymm5,ymm9
        vpxord ymm6,ymm6,ymm10
        vpxord ymm7,ymm7,ymm11
        vprord ymm4,ymm4,0x7
        vprord ymm5,ymm5,0x7
        vprord ymm6,ymm6,0x7
        vprord ymm7,ymm7,0x7
        vpaddd ymm0,ymm0,ymm30
        vpaddd ymm1,ymm1,ymm18
        vpaddd ymm2,ymm2,ymm19
        vpaddd ymm3,ymm3,ymm23
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm1,ymm1,ymm6
        vpaddd ymm2,ymm2,ymm7
        vpaddd ymm3,ymm3,ymm4
        vpxord ymm15,ymm15,ymm0
        vpxord ymm12,ymm12,ymm1
        vpxord ymm13,ymm13,ymm2
        vpxord ymm14,ymm14,ymm3
        vprord ymm15,ymm15,0x10
        vprord ymm12,ymm12,0x10
        vprord ymm13,ymm13,0x10
        vprord ymm14,ymm14,0x10
        vpaddd ymm10,ymm10,ymm15
        vpaddd ymm11,ymm11,ymm12
        vpaddd ymm8,ymm8,ymm13
        vpaddd ymm9,ymm9,ymm14
        vpxord ymm5,ymm5,ymm10
        vpxord ymm6,ymm6,ymm11
        vpxord ymm7,ymm7,ymm8
        vpxord ymm4,ymm4,ymm9
        vprord ymm5,ymm5,0xc
        vprord ymm6,ymm6,0xc
        vprord ymm7,ymm7,0xc
        vprord ymm4,ymm4,0xc
        vpaddd ymm0,ymm0,ymm26
        vpaddd ymm1,ymm1,ymm28
        vpaddd ymm2,ymm2,ymm20
        vpaddd ymm3,ymm3,ymm29
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm1,ymm1,ymm6
        vpaddd ymm2,ymm2,ymm7
        vpaddd ymm3,ymm3,ymm4
        vpxord ymm15,ymm15,ymm0
        vpxord ymm12,ymm12,ymm1
        vpxord ymm13,ymm13,ymm2
        vpxord ymm14,ymm14,ymm3
        vprord ymm15,ymm15,0x8
        vprord ymm12,ymm12,0x8
        vprord ymm13,ymm13,0x8
        vprord ymm14,ymm14,0x8
        vpaddd ymm10,ymm10,ymm15
        vpaddd ymm11,ymm11,ymm12
        vpaddd ymm8,ymm8,ymm13
        vpaddd ymm9,ymm9,ymm14
        vpxord ymm5,ymm5,ymm10
        vpxord ymm6,ymm6,ymm11
        vpxord ymm7,ymm7,ymm8
        vpxord ymm4,ymm4,ymm9
        vprord ymm5,ymm5,0x7
        vprord ymm6,ymm6,0x7
        vprord ymm7,ymm7,0x7
        vprord ymm4,ymm4,0x7
        vpxor  ymm0,ymm0,ymm8
        vpxor  ymm1,ymm1,ymm9
        vpxor  ymm2,ymm2,ymm10
        vpxor  ymm3,ymm3,ymm11
        vpxor  ymm4,ymm4,ymm12
        vpxor  ymm5,ymm5,ymm13
        vpxor  ymm6,ymm6,ymm14
        vpxor  ymm7,ymm7,ymm15
        vpxord ymm8,ymm8,DWORD PTR [rdi]{1to8}
        vpxord ymm9,ymm9,DWORD PTR [rdi+0x4]{1to8}
        vpxord ymm10,ymm10,DWORD PTR [rdi+0x8]{1to8}
        vpxord ymm11,ymm11,DWORD PTR [rdi+0xc]{1to8}
        vpxord ymm12,ymm12,DWORD PTR [rdi+0x10]{1to8}
        vpxord ymm13,ymm13,DWORD PTR [rdi+0x14]{1to8}
        vpxord ymm14,ymm14,DWORD PTR [rdi+0x18]{1to8}
        vpxord ymm15,ymm15,DWORD PTR [rdi+0x1c]{1to8}
        vpunpckldq ymm16,ymm0,ymm1
        vpunpckhdq ymm17,ymm0,ymm1
        vpunpckldq ymm18,ymm2,ymm3
        vpunpckhdq ymm19,ymm2,ymm3
        vpunpckldq ymm20,ymm4,ymm5
        vpunpckhdq ymm21,ymm4,ymm5
        vpunpckldq ymm22,ymm6,ymm7
        vpunpckhdq ymm23,ymm6,ymm7
        vpunpckldq ymm24,ymm8,ymm9
        vpunpckhdq ymm25,ymm8,ymm9
        vpunpckldq ymm26,ymm10,ymm11
        vpunpckhdq ymm27,ymm10,ymm11
        vpunpckldq ymm28,ymm12,ymm13
        vpunpckhdq ymm29,ymm12,ymm13
        vpunpckldq ymm30,ymm14,ymm15
        vpunpckhdq ymm31,ymm14,ymm15
        vpunpcklqdq ymm0,ymm16,ymm18
        vpunpckhqdq ymm1,ymm16,ymm18
        vpunpcklqdq ymm2,ymm17,ymm19
        vpunpckhqdq ymm3,ymm17,ymm19
        vpunpcklqdq ymm4,ymm20,ymm22
        vpunpckhqdq ymm5,ymm20,ymm22
        vpunpcklqdq ymm6,ymm21,ymm23
        vpunpckhqdq ymm7,ymm21,ymm23
        vpunpcklqdq ymm8,ymm24,ymm26
        vpunpckhqdq ymm9,ymm24,ymm26
        vpunpcklqdq ymm10,ymm25,ymm27
        vpunpckhqdq ymm11,ymm25,ymm27
        vpunpcklqdq ymm12,ymm28,ymm30
        vpunpckhqdq ymm13,ymm28,ymm30
        vpunpcklqdq ymm14,ymm29,ymm31
        vpunpckhqdq ymm15,ymm29,ymm31
        vshufi32x4 ymm16,ymm0,ymm4,0x0
        vshufi32x4 ymm17,ymm8,ymm12,0x0
        vshufi32x4 ymm18,ymm1,ymm5,0x0
        vshufi32x4 ymm19,ymm9,ymm13,0x0
        vshufi32x4 ymm20,ymm2,ymm6,0x0
        vshufi32x4 ymm21,ymm10,ymm14,0x0
        vshufi32x4 ymm22,ymm3,ymm7,0x0
        vshufi32x4 ymm23,ymm11,ymm15,0x0
        vshufi32x4 ymm24,ymm0,ymm4,0x3
        vshufi32x4 ymm25,ymm8,ymm12,0x3
        vshufi32x4 ymm26,ymm1,ymm5,0x3
        vshufi32x4 ymm27,ymm9,ymm13,0x3
        vshufi32x4 ymm28,ymm2,ymm6,0x3
        vshufi32x4 ymm29,ymm10,ymm14,0x3
        vshufi32x4 ymm30,ymm3,ymm7,0x3
        vshufi32x4 ymm31,ymm11,ymm15,0x3
        vmovdqu32 YMMWORD PTR [r9],ymm16
        vmovdqu32 YMMWORD PTR [r9+0x20],ymm17
        vmovdqu32 YMMWORD PTR [r9+0x40],ymm18
        vmovdqu32 YMMWORD PTR [r9+0x60],ymm19
        vmovdqu32 YMMWORD PTR [r9+0x80],ymm20
        vmovdqu32 YMMWORD PTR [r9+0xa0],ymm21
        vmovdqu32 YMMWORD PTR [r9+0xc0],ymm22
        vmovdqu32 YMMWORD PTR [r9+0xe0],ymm23
        vmovdqu32 YMMWORD PTR [r9+0x100],ymm24
        vmovdqu32 YMMWORD PTR [r9+0x120],ymm25
        vmovdqu32 YMMWORD PTR [r9+0x140],ymm26
        vmovdqu32 YMMWORD PTR [r9+0x160],ymm27
        vmovdqu32 YMMWORD PTR [r9+0x180],ymm28
        vmovdqu32 YMMWORD PTR [r9+0x1a0],ymm29
        vmovdqu32 YMMWORD PTR [r9+0x1c0],ymm30
        vmovdqu32 YMMWORD PTR [r9+0x1e0],ymm31
        vmovdqa ymm0,YMMWORD PTR [rsp+0x20]
        vmovdqa ymm1,YMMWORD PTR [rsp+0x60]
        vmovdqa YMMWORD PTR [rsp],ymm0
        vmovdqa YMMWORD PTR [rsp+0x40],ymm1
        add    r9,0x200
        sub    r10,0x8
2:
        test   r10,0x4
        je     2f
        vbroadcasti32x4 zmm0,XMMWORD PTR [rdi]
        vbroadcasti32x4 zmm1,XMMWORD PTR [rdi+0x10]
        vbroadcasti32x4 zmm2,XMMWORD PTR [BLAKE3_IV+rip]
        vmovdqa xmm12,XMMWORD PTR [rsp]
        vmovdqa xmm13,XMMWORD PTR [rsp+0x40]
        vpunpckldq xmm14,xmm12,xmm13
        vpunpckhdq xmm15,xmm12,xmm13
        vpermq ymm14,ymm14,0xdc
        vpermq ymm15,ymm15,0xdc
        vpbroadcastd zmm12,edx
        vinserti64x4 zmm13,zmm14,ymm15,0x1
        mov    eax,0x4444
        kmovw  k2,eax
        vpblendmd zmm13{k2},zmm13,zmm12
        vpbroadcastd zmm15,r8d
        mov    eax,0x8888
        kmovw  k4,eax
        vpblendmd zmm3{k4},zmm13,zmm15
        mov    eax,0xaaaa
        kmovw  k3,eax
        vbroadcasti32x4 zmm8,XMMWORD PTR [rsi]
        vbroadcasti32x4 zmm9,XMMWORD PTR [rsi+0x10]
        vshufps zmm4,zmm8,zmm9,0x88
        vshufps zmm5,zmm8,zmm9,0xdd
        vbroadcasti32x4 zmm8,XMMWORD PTR [rsi+0x20]
        vbroadcasti32x4 zmm9,XMMWORD PTR [rsi+0x30]
        vshufps zmm6,zmm8,zmm9,0x88
        vshufps zmm7,zmm8,zmm9,0xdd
        vpshufd zmm6,zmm6,0x93
        vpshufd zmm7,zmm7,0x93
        mov    al,0x7
3:
        vpaddd zmm0,zmm0,zmm4
        vpaddd zmm0,zmm0,zmm1
        vpxord zmm3,zmm3,zmm0
        vprord zmm3,zmm3,0x10
        vpaddd zmm2,zmm2,zmm3
        vpxord zmm1,zmm1,zmm2
        vprord zmm1,zmm1,0xc
        vpaddd zmm0,zmm0,zmm5
        vpaddd zmm0,zmm0,zmm1
        vpxord zmm3,zmm3,zmm0
        vprord zmm3,zmm3,0x8
        vpaddd zmm2,zmm2,zmm3
        vpxord zmm1,zmm1,zmm2
        vprord zmm1,zmm1,0x7
        vpshufd zmm0,zmm0,0x93
        vpshufd zmm3,zmm3,0x4e
        vpshufd zmm2,zmm2,0x39
        vpaddd zmm0,zmm0,zmm6
        vpaddd zmm0,zmm0,zmm1
        vpxord zmm3,zmm3,zmm0
        vprord zmm3,zmm3,0x10
        vpaddd zmm2,zmm2,zmm3
        vpxord zmm1,zmm1,zmm2
        vprord zmm1,zmm1,0xc
        vpaddd zmm0,zmm0,zmm7
        vpaddd zmm0,zmm0,zmm1
        vpxord zmm3,zmm3,zmm0
        vprord zmm3,zmm3,0x8
        vpaddd zmm2,zmm2,zmm3
        vpxord zmm1,zmm1,zmm2
        vprord zmm1,zmm1,0x7
        vpshufd zmm0,zmm0,0x39
        vpshufd zmm3,zmm3,0x4e
        vpshufd zmm2,zmm2,0x93
        dec    al
        je     3f
        vshufps zmm8,zmm4,zmm5,0xd6
        vpshufd zmm9,zmm4,0xf
        vpshufd zmm4,zmm8,0x39
        vshufps zmm8,zmm6,zmm7,0xfa
        vpblendmd zmm9{k3},zmm9,zmm8
        vpunpcklqdq zmm8,zmm7,zmm5
        vpblendmd zmm8{k4},zmm8,zmm6
        vpshufd zmm8,zmm8,0x78
        vpunpckhdq zmm5,zmm5,zmm7
        vpunpckldq zmm6,zmm6,zmm5
        vpshufd zmm7,zmm6,0x1e
        vmovdqa32 zmm5,zmm9
        vmovdqa32 zmm6,zmm8
        jmp    3b
3:
        vpxord zmm0,zmm0,zmm2
        vpxord zmm1,zmm1,zmm3
        vbroadcasti32x4 zmm8,XMMWORD PTR [rdi]
        vbroadcasti32x4 zmm9,XMMWORD PTR [rdi+0x10]
        vpxord zmm2,zmm2,zmm8
        vpxord zmm3,zmm3,zmm9
        vmovdqu XMMWORD PTR [r9],xmm0
        vmovdqu XMMWORD PTR [r9+0x10],xmm1
        vmovdqu XMMWORD PTR [r9+0x20],xmm2
        vmovdqu XMMWORD PTR [r9+0x30],xmm3
        vextracti128 XMMWORD PTR [r9+0x40],ymm0,0x1
        vextracti128 XMMWORD PTR [r9+0x50],ymm1,0x1
        vextracti128 XMMWORD PTR [r9+0x60],ymm2,0x1
        vextracti128 XMMWORD PTR [r9+0x70],ymm3,0x1
        vextracti32x4 XMMWORD PTR [r9+0x80],zmm0,0x2
        vextracti32x4 XMMWORD PTR [r9+0x90],zmm1,0x2
        vextracti32x4 XMMWORD PTR [r9+0xa0],zmm2,0x2
        vextracti32x4 XMMWORD PTR [r9+0xb0],zmm3,0x2
        vextracti32x4 XMMWORD PTR [r9+0xc0],zmm0,0x3
        vextracti32x4 XMMWORD PTR [r9+0xd0],zmm1,0x3
        vextracti32x4 XMMWORD PTR [r9+0xe0],zmm2,0x3
        vextracti32x4 XMMWORD PTR [r9+0xf0],zmm3,0x3
        vmovdqa xmm0,XMMWORD PTR [rsp+0x10]
        vmovdqa xmm1,XMMWORD PTR [rsp+0x50]
        vmovdqa XMMWORD PTR [rsp],xmm0
        vmovdqa XMMWORD PTR [rsp+0x40],xmm1
        add    r9,0x100
        sub    r10,0x4
2:
        test   r10,0x2
        je     2f
        vbroadcasti128 ymm0,XMMWORD PTR [rdi]
        vbroadcasti128 ymm1,XMMWORD PTR [rdi+0x10]
        vmovd  xmm13,DWORD PTR [rsp]
        vpinsrd xmm13,xmm13,DWORD PTR [rsp+0x40],0x1
        vpinsrd xmm13,xmm13,edx,0x2
        vmovd  xmm14,DWORD PTR [rsp+0x4]
        vpinsrd xmm14,xmm14,DWORD PTR [rsp+0x44],0x1
        vpinsrd xmm14,xmm14,edx,0x2
        vinserti128 ymm13,ymm13,xmm14,0x1
        vbroadcasti128 ymm2,XMMWORD PTR [BLAKE3_IV+rip]
        vpbroadcastd ymm8,r8d
        vpblendd ymm3,ymm13,ymm8,0x88
        vbroadcasti128 ymm8,XMMWORD PTR [rsi]
        vbroadcasti128 ymm9,XMMWORD PTR [rsi+0x10]
        vshufps ymm4,ymm8,ymm9,0x88
        vshufps ymm5,ymm8,ymm9,0xdd
        vbroadcasti128 ymm8,XMMWORD PTR [rsi+0x20]
        vbroadcasti128 ymm9,XMMWORD PTR [rsi+0x30]
        vshufps ymm6,ymm8,ymm9,0x88
        vshufps ymm7,ymm8,ymm9,0xdd
        vpshufd ymm6,ymm6,0x93
        vpshufd ymm7,ymm7,0x93
        mov    al,0x7
3:
        vpaddd ymm0,ymm0,ymm4
        vpaddd ymm0,ymm0,ymm1
        vpxord ymm3,ymm3,ymm0
        vprord ymm3,ymm3,0x10
        vpaddd ymm2,ymm2,ymm3
        vpxord ymm1,ymm1,ymm2
        vprord ymm1,ymm1,0xc
        vpaddd ymm0,ymm0,ymm5
        vpaddd ymm0,ymm0,ymm1
        vpxord ymm3,ymm3,ymm0
        vprord ymm3,ymm3,0x8
        vpaddd ymm2,ymm2,ymm3
        vpxord ymm1,ymm1,ymm2
        vprord ymm1,ymm1,0x7
        vpshufd ymm0,ymm0,0x93
        vpshufd ymm3,ymm3,0x4e
        vpshufd ymm2,ymm2,0x39
        vpaddd ymm0,ymm0,ymm6
        vpaddd ymm0,ymm0,ymm1
        vpxord ymm3,ymm3,ymm0
        vprord ymm3,ymm3,0x10
        vpaddd ymm2,ymm2,ymm3
        vpxord ymm1,ymm1,ymm2
        vprord ymm1,ymm1,0xc
        vpaddd ymm0,ymm0,ymm7
        vpaddd ymm0,ymm0,ymm1
        vpxord ymm3,ymm3,ymm0
        vprord ymm3,ymm3,0x8
        vpaddd ymm2,ymm2,ymm3
        vpxord ymm1,ymm1,ymm2
        vprord ymm1,ymm1,0x7
        vpshufd ymm0,ymm0,0x39
        vpshufd ymm3,ymm3,0x4e
        vpshufd ymm2,ymm2,0x93
        dec    al
        je     3f
        vshufps ymm8,ymm4,ymm5,0xd6
        vpshufd ymm9,ymm4,0xf
        vpshufd ymm4,ymm8,0x39
        vshufps ymm8,ymm6,ymm7,0xfa
        vpblendd ymm9,ymm9,ymm8,0xaa
        vpunpcklqdq ymm8,ymm7,ymm5
        vpblendd ymm8,ymm8,ymm6,0x88
        vpshufd ymm8,ymm8,0x78
        vpunpckhdq ymm5,ymm5,ymm7
        vpunpckldq ymm6,ymm6,ymm5
        vpshufd ymm7,ymm6,0x1e
        vmovdqa ymm5,ymm9
        vmovdqa ymm6,ymm8
        jmp    3b
3:
        vpxor  ymm0,ymm0,ymm2
        vpxor  ymm1,ymm1,ymm3
        vbroadcasti128 ymm8,XMMWORD PTR [rdi]
        vbroadcasti128 ymm9,XMMWORD PTR [rdi+0x10]
        vpxor  ymm2,ymm2,ymm8
        vpxor  ymm3,ymm3,ymm9
        vmovdqu XMMWORD PTR [r9],xmm0
        vmovdqu XMMWORD PTR [r9+0x10],xmm1
        vmovdqu XMMWORD PTR [r9+0x20],xmm2
        vmovdqu XMMWORD PTR [r9+0x30],xmm3
        vextracti128 XMMWORD PTR [r9+0x40],ymm0,0x1
        vextracti128 XMMWORD PTR [r9+0x50],ymm1,0x1
        vextracti128 XMMWORD PTR [r9+0x60],ymm2,0x1
        vextracti128 XMMWORD PTR [r9+0x70],ymm3,0x1
        vmovdqu xmm0,XMMWORD PTR [rsp+0x8]
        vmovdqu xmm1,XMMWORD PTR [rsp+0x48]
        vmovdqa XMMWORD PTR [rsp],xmm0
        vmovdqa XMMWORD PTR [rsp+0x40],xmm1
        add    r9,0x80
        sub    r10,0x2
2:
        test   r10,0x1
        je     9b
        vmovdqu xmm0,XMMWORD PTR [rdi]
        vmovdqu xmm1,XMMWORD PTR [rdi+0x10]
        vmovd  xmm14,DWORD PTR [rsp]
        vpinsrd xmm14,xmm14,DWORD PTR [rsp+0x40],0x1
        vpinsrd xmm14,xmm14,edx,0x2
        vmovdqa xmm2,XMMWORD PTR [BLAKE3_IV+rip]
        vpinsrd xmm3,xmm14,r8d,0x3
        vmovups xmm8,XMMWORD PTR [rsi]
        vmovups xmm9,XMMWORD PTR [rsi+0x10]
        vshufps xmm4,xmm8,xmm9,0x88
        vshufps xmm5,xmm8,xmm9,0xdd
        vmovups xmm8,XMMWORD PTR [rsi+0x20]
        vmovups xmm9,XMMWORD PTR [rsi+0x30]
        vshufps xmm6,xmm8,xmm9,0x88
        vshufps xmm7,xmm8,xmm9,0xdd
        vpshufd xmm6,xmm6,0x93
        vpshufd xmm7,xmm7,0x93
        mov    al,0x7
3:
        vpaddd xmm0,xmm0,xmm4
        vpaddd xmm0,xmm0,xmm1
        vpxord xmm3,xmm3,xmm0
        vprord xmm3,xmm3,0x10
        vpaddd xmm2,xmm2,xmm3
        vpxord xmm1,xmm1,xmm2
        vprord xmm1,xmm1,0xc
        vpaddd xmm0,xmm0,xmm5
        vpaddd xmm0,xmm0,xmm1
        vpxord xmm3,xmm3,xmm0
        vprord xmm3,xmm3,0x8
        vpaddd xmm2,xmm2,xmm3
        vpxord xmm1,xmm1,xmm2
        vprord xmm1,xmm1,0x7
        vpshufd xmm0,xmm0,0x93
        vpshufd xmm3,xmm3,0x4e
        vpshufd xmm2,xmm2,0x39
        vpaddd xmm0,xmm0,xmm6
        vpaddd xmm0,xmm0,xmm1
        vpxord xmm3,xmm3,xmm0
        vprord xmm3,xmm3,0x10
        vpaddd xmm2,xmm2,xmm3
        vpxord xmm1,xmm1,xmm2
        vprord xmm1,xmm1,0xc
        vpaddd xmm0,xmm0,xmm7
        vpaddd xmm0,xmm0,xmm1
        vpxord xmm3,xmm3,xmm0
        vprord xmm3,xmm3,0x8
        vpaddd xmm2,xmm2,xmm3
        vpxord xmm1,xmm1,xmm2
        vprord xmm1,xmm1,0x7
        vpshufd xmm0,xmm0,0x39
        vpshufd xmm3,xmm3,0x4e
        vpshufd xmm2,xmm2,0x93
        dec    al
        je     3f
        vshufps xmm8,xmm4,xmm5,0xd6
        vpshufd xmm9,xmm4,0xf
        vpshufd xmm4,xmm8,0x39
        vshufps xmm8,xmm6,xmm7,0xfa
        vpblendd xmm9,xmm9,xmm8,0xaa
        vpunpcklqdq xmm8,xmm7,xmm5
        vpblendd xmm8,xmm8,xmm6,0x88
        vpshufd xmm8,xmm8,0x78
        vpunpckhdq xmm5,xmm5,xmm7
        vpunpckldq xmm6,xmm6,xmm5
        vpshufd xmm7,xmm6,0x1e
        vmovdqa xmm5,xmm9
        vmovdqa xmm6,xmm8
        jmp    3b
3:
        vpxor  xmm0,xmm0,xmm2
        vpxor  xmm1,xmm1,xmm3
        vpxor  xmm2,xmm2,XMMWORD PTR [rdi]
        vpxor  xmm3,xmm3,XMMWORD PTR [rdi+0x10]
        vmovdqu XMMWORD PTR [r9],xmm0
        vmovdqu XMMWORD PTR [r9+0x10],xmm1
        vmovdqu XMMWORD PTR [r9+0x20],xmm2
        vmovdqu XMMWORD PTR [r9+0x30],xmm3
        jmp    9b


#ifdef __APPLE__
.static_data
#else
.section .rodata
#endif
.p2align  6
INDEX0:
        .long    0,  1,  2,  3, 16, 17, 18, 19
        .long    8,  9, 10, 11, 24, 25, 26, 27
INDEX1:
        .long    4,  5,  6,  7, 20, 21, 22, 23
        .long   12, 13, 14, 15, 28, 29, 30, 31
ADD0:
        .long    0,  1,  2,  3,  4,  5,  6,  7
        .long    8,  9, 10, 11, 12, 13, 14, 15
ADD1:   .long    1

ADD16:  .long   16
BLAKE3_BLOCK_LEN:
        .long   64
.p2align 6
BLAKE3_IV:
BLAKE3_IV_0:
        .long   0x6A09E667
BLAKE3_IV_1:
        .long   0xBB67AE85
BLAKE3_IV_2:
        .long   0x3C6EF372
BLAKE3_IV_3:
        .long   0xA54FF53A
