From 06ea23cf59006e654af53480fdb38ab30610c991 Mon Sep 17 00:00:00 2001 From: Samuel Neves Date: Mon, 2 Sep 2024 02:58:18 +0100 Subject: [PATCH] wip asm refresh --- c/blake3_avx512_x86-64_unix.S | 6368 +++++++---------------- c/blake3_avx512_x86-64_windows_gnu.S | 4257 +++++++-------- c/blake3_avx512_x86-64_windows_msvc.asm | 4353 +++++++--------- 3 files changed, 5754 insertions(+), 9224 deletions(-) diff --git a/c/blake3_avx512_x86-64_unix.S b/c/blake3_avx512_x86-64_unix.S index 9642e413a..9b8242473 100644 --- a/c/blake3_avx512_x86-64_unix.S +++ b/c/blake3_avx512_x86-64_unix.S @@ -31,2360 +31,1059 @@ _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 + push rbx + push rbp + push r12 + push r13 + push r14 + push r15 + mov rbp, rsp + sub rsp, 0x140 + and rsp, 0xFFFFFFFFFFFFFFC0 + movzx r9d, r9b + neg r9d + kmovw k1, r9d + vpbroadcastd ymm0, r8d + shr r8, 0x20 + vpbroadcastd ymm1, r8d + vmovdqa32 ymm2 {k1} {z}, ymmword ptr [rip+ADD0+ 0] + vmovdqa32 ymm3 {k1} {z}, ymmword ptr [rip+ADD0+32] + vpaddd ymm2, ymm0, ymm2 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 + vpaddd ymm3, ymm0, ymm3 + vmovdqa ymmword ptr [rsp+0x20], ymm3 + vpcmpud k2 {k1}, ymm2, ymm0, 0x01 + vpcmpud k3 {k1}, ymm3, ymm0, 0x01 + vmovdqa ymm2, ymm1 + vpaddd ymm2 {k2}, ymm2, dword ptr [rip+ADD1] {1to8} + vmovdqa ymmword ptr [rsp+0x40], ymm2 + vpaddd ymm1 {k3}, ymm1, dword ptr [rip+ADD1] {1to8} + vmovdqa ymmword ptr [rsp+0x60], ymm1 + shl rdx, 0x06 + mov qword ptr [rsp+0x100], rdx + cmp rsi, 0x10 + jb 5f +.p2align 5 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 + vpbroadcastd zmm1, dword ptr [rcx+0x04] + vpbroadcastd zmm2, dword ptr [rcx+0x08] + vpbroadcastd zmm3, dword ptr [rcx+0x0C] + vpbroadcastd zmm4, dword ptr [rcx+0x10] + vpbroadcastd zmm5, dword ptr [rcx+0x14] + vpbroadcastd zmm6, dword ptr [rcx+0x18] + vpbroadcastd zmm7, dword ptr [rcx+0x1C] + movzx eax, byte ptr [rbp+0x38] + movzx edx, byte ptr [rbp+0x40] + or eax, edx + xor edx, edx +3: + movzx ebx, byte ptr [rbp+0x48] + or ebx, eax + add rdx, 0x40 + cmp rdx, qword ptr [rsp+0x100] + cmovz eax, ebx + mov dword ptr [rsp+0x80], eax + mov rax, qword ptr [rdi] + mov rbx, qword ptr [rdi+0x08] + mov r8, qword ptr [rdi+0x10] + mov r9, qword ptr [rdi+0x18] + mov r10, qword ptr [rdi+0x40] + mov r11, qword ptr [rdi+0x48] + mov r12, qword ptr [rdi+0x50] + mov r13, qword ptr [rdi+0x58] + vmovdqu32 ymm8, ymmword ptr [rax+rdx*1-0x40] + vinserti64x4 zmm8, zmm8, ymmword ptr [r10+rdx*1-0x40], 0x01 + vmovdqu32 ymm9, ymmword ptr [rbx+rdx*1-0x40] + vinserti64x4 zmm9, zmm9, ymmword ptr [r11+rdx*1-0x40], 0x01 + vpunpckldq zmm10, zmm8, zmm9 + vpunpckhdq zmm11, zmm8, zmm9 + vmovdqu32 ymm8, ymmword ptr [r8+rdx*1-0x40] + vinserti64x4 zmm8, zmm8, ymmword ptr [r12+rdx*1-0x40], 0x01 + vmovdqu32 ymm9, ymmword ptr [r9+rdx*1-0x40] + vinserti64x4 zmm9, zmm9, ymmword ptr [r13+rdx*1-0x40], 0x01 + vpunpckldq zmm12, zmm8, zmm9 + vpunpckhdq zmm13, zmm8, zmm9 + mov rax, qword ptr [rdi+0x20] + mov rbx, qword ptr [rdi+0x28] + mov r8, qword ptr [rdi+0x30] + mov r9, qword ptr [rdi+0x38] + mov r10, qword ptr [rdi+0x60] + mov r11, qword ptr [rdi+0x68] + mov r12, qword ptr [rdi+0x70] + mov r13, qword ptr [rdi+0x78] + vmovdqu32 ymm8, ymmword ptr [rax+rdx*1-0x40] + vinserti64x4 zmm8, zmm8, ymmword ptr [r10+rdx*1-0x40], 0x01 + vmovdqu32 ymm9, ymmword ptr [rbx+rdx*1-0x40] + vinserti64x4 zmm9, zmm9, ymmword ptr [r11+rdx*1-0x40], 0x01 + vpunpckldq zmm14, zmm8, zmm9 + vpunpckhdq zmm15, zmm8, zmm9 + vmovdqu32 ymm8, ymmword ptr [r8+rdx*1-0x40] + vinserti64x4 zmm8, zmm8, ymmword ptr [r12+rdx*1-0x40], 0x01 + vmovdqu32 ymm9, ymmword ptr [r9+rdx*1-0x40] + vinserti64x4 zmm9, zmm9, ymmword ptr [r13+rdx*1-0x40], 0x01 + vpunpckldq zmm16, zmm8, zmm9 + vpunpckhdq zmm17, zmm8, zmm9 + vmovdqa32 zmm8, zmmword ptr [rip+INDEX0] + vmovdqa32 zmm9, zmmword ptr [rip+INDEX1] + vpunpcklqdq zmm18, zmm10, zmm12 + vpunpcklqdq zmm20, zmm14, zmm16 + vmovdqa32 zmm19, zmm18 + vpermt2d zmm18, zmm8, zmm20 + vpermt2d zmm19, zmm9, zmm20 + vpunpckhqdq zmm20, zmm10, zmm12 + vpunpckhqdq zmm22, zmm14, zmm16 + vmovdqa32 zmm21, zmm20 + vpermt2d zmm20, zmm8, zmm22 + vpermt2d zmm21, zmm9, zmm22 + vpunpcklqdq zmm10, zmm11, zmm13 + vpunpcklqdq zmm14, zmm15, zmm17 + vmovdqa32 zmm12, zmm10 + vpermt2d zmm10, zmm8, zmm14 + vpermt2d zmm12, zmm9, zmm14 + vpunpckhqdq zmm14, zmm11, zmm13 + vpunpckhqdq zmm22, zmm15, zmm17 + vmovdqa32 zmm16, zmm14 + vpermt2d zmm14, zmm8, zmm22 + vpermt2d zmm16, zmm9, zmm22 + mov rax, qword ptr [rdi] + mov rbx, qword ptr [rdi+0x08] + mov r8, qword ptr [rdi+0x10] + mov r9, qword ptr [rdi+0x18] + mov r10, qword ptr [rdi+0x40] + mov r11, qword ptr [rdi+0x48] + mov r12, qword ptr [rdi+0x50] + mov r13, qword ptr [rdi+0x58] + vmovdqu32 ymm11, ymmword ptr [rax+rdx*1-0x20] + vinserti64x4 zmm11, zmm11, ymmword ptr [r10+rdx*1-0x20], 0x01 + vmovdqu32 ymm13, ymmword ptr [rbx+rdx*1-0x20] + vinserti64x4 zmm13, zmm13, ymmword ptr [r11+rdx*1-0x20], 0x01 + vpunpckldq zmm15, zmm11, zmm13 + vpunpckhdq zmm17, zmm11, zmm13 + vmovdqu32 ymm11, ymmword ptr [r8+rdx*1-0x20] + vinserti64x4 zmm11, zmm11, ymmword ptr [r12+rdx*1-0x20], 0x01 + vmovdqu32 ymm13, ymmword ptr [r9+rdx*1-0x20] + vinserti64x4 zmm13, zmm13, ymmword ptr [r13+rdx*1-0x20], 0x01 + vpunpckldq zmm22, zmm11, zmm13 + vpunpckhdq zmm23, zmm11, zmm13 + prefetcht0 byte ptr [rax+rdx*1+0x80] + prefetcht0 byte ptr [rbx+rdx*1+0x80] + prefetcht0 byte ptr [r8+rdx*1+0x80] + prefetcht0 byte ptr [r9+rdx*1+0x80] + prefetcht0 byte ptr [r10+rdx*1+0x80] + prefetcht0 byte ptr [r11+rdx*1+0x80] + prefetcht0 byte ptr [r12+rdx*1+0x80] + prefetcht0 byte ptr [r13+rdx*1+0x80] + mov rax, qword ptr [rdi+0x20] + mov rbx, qword ptr [rdi+0x28] + mov r8, qword ptr [rdi+0x30] + mov r9, qword ptr [rdi+0x38] + mov r10, qword ptr [rdi+0x60] + mov r11, qword ptr [rdi+0x68] + mov r12, qword ptr [rdi+0x70] + mov r13, qword ptr [rdi+0x78] + vmovdqu32 ymm11, ymmword ptr [rax+rdx*1-0x20] + vinserti64x4 zmm11, zmm11, ymmword ptr [r10+rdx*1-0x20], 0x01 + vmovdqu32 ymm13, ymmword ptr [rbx+rdx*1-0x20] + vinserti64x4 zmm13, zmm13, ymmword ptr [r11+rdx*1-0x20], 0x01 + vpunpckldq zmm24, zmm11, zmm13 + vpunpckhdq zmm25, zmm11, zmm13 + vmovdqu32 ymm11, ymmword ptr [r8+rdx*1-0x20] + vinserti64x4 zmm11, zmm11, ymmword ptr [r12+rdx*1-0x20], 0x01 + vmovdqu32 ymm13, ymmword ptr [r9+rdx*1-0x20] + vinserti64x4 zmm13, zmm13, ymmword ptr [r13+rdx*1-0x20], 0x01 + vpunpckldq zmm26, zmm11, zmm13 + vpunpckhdq zmm27, zmm11, zmm13 + prefetcht0 byte ptr [rax+rdx*1+0x80] + prefetcht0 byte ptr [rbx+rdx*1+0x80] + prefetcht0 byte ptr [r8+rdx*1+0x80] + prefetcht0 byte ptr [r9+rdx*1+0x80] + prefetcht0 byte ptr [r10+rdx*1+0x80] + prefetcht0 byte ptr [r11+rdx*1+0x80] + prefetcht0 byte ptr [r12+rdx*1+0x80] + prefetcht0 byte ptr [r13+rdx*1+0x80] + vpunpcklqdq zmm11, zmm15, zmm22 + vpunpcklqdq zmm28, zmm24, zmm26 + vmovdqa32 zmm13, zmm11 + vpermt2d zmm11, zmm8, zmm28 + vpermt2d zmm13, zmm9, zmm28 + vpunpckhqdq zmm28, zmm15, zmm22 + vpunpckhqdq zmm30, zmm24, zmm26 + vmovdqa32 zmm29, zmm28 + vpermt2d zmm28, zmm8, zmm30 + vpermt2d zmm29, zmm9, zmm30 + vpunpcklqdq zmm15, zmm17, zmm23 + vpunpcklqdq zmm24, zmm25, zmm27 + vmovdqa32 zmm22, zmm15 + vpermt2d zmm15, zmm8, zmm24 + vpermt2d zmm22, zmm9, zmm24 + vpunpckhqdq zmm24, zmm17, zmm23 + vpunpckhqdq zmm26, zmm25, zmm27 + vpermi2d zmm8, zmm24, zmm26 + vpermi2d zmm9, zmm24, zmm26 + vpbroadcastd zmm17, dword ptr [rip+BLAKE3_IV_0] + vpbroadcastd zmm23, dword ptr [rip+BLAKE3_IV_1] + vpbroadcastd zmm24, dword ptr [rip+BLAKE3_IV_2] + vpbroadcastd zmm25, dword ptr [rip+BLAKE3_IV_3] + vmovdqa32 zmm26, zmmword ptr [rsp] + vmovdqa32 zmm27, zmmword ptr [rsp+0x40] + vpbroadcastd zmm30, dword ptr [rip+BLAKE3_BLOCK_LEN] + vpbroadcastd zmm31, dword ptr [rsp+0x80] + mov al, 0x07 4: + vpaddd zmm0, zmm0, zmm18 + vpaddd zmm1, zmm1, zmm10 + vpaddd zmm2, zmm2, zmm19 + vpaddd zmm3, zmm3, zmm12 + vmovdqa32 zmmword ptr [rsp+0x80], zmm18 + vmovdqa32 zmmword ptr [rsp+0xC0], zmm12 + vpaddd zmm0, zmm0, zmm4 + vpaddd zmm1, zmm1, zmm5 + vpaddd zmm2, zmm2, zmm6 + vpaddd zmm3, zmm3, zmm7 + vpxord zmm26, zmm26, zmm0 + vmovdqa32 zmm18, zmm10 + vpxord zmm27, zmm27, zmm1 + vpxord zmm30, zmm30, zmm2 + vpxord zmm31, zmm31, zmm3 + vprord zmm26, zmm26, 0x10 + vprord zmm27, zmm27, 0x10 + vprord zmm30, zmm30, 0x10 + vprord zmm31, zmm31, 0x10 + vpaddd zmm17, zmm17, zmm26 + vmovdqa32 zmm12, zmm19 + vpaddd zmm23, zmm23, zmm27 + vpaddd zmm24, zmm24, zmm30 + vpaddd zmm25, zmm25, zmm31 + vpxord zmm4, zmm4, zmm17 + vpxord zmm5, zmm5, zmm23 + vpxord zmm6, zmm6, zmm24 + vpxord zmm7, zmm7, zmm25 + vprord zmm4, zmm4, 0x0C + vprord zmm5, zmm5, 0x0C + vprord zmm6, zmm6, 0x0C + vprord zmm7, zmm7, 0x0C + vpaddd zmm0, zmm0, zmm20 + vpaddd zmm1, zmm1, zmm14 + vpaddd zmm2, zmm2, zmm21 + vpaddd zmm3, zmm3, zmm16 + vpaddd zmm0, zmm0, zmm4 + vmovdqa32 zmm10, zmm14 + vpaddd zmm1, zmm1, zmm5 + vpaddd zmm2, zmm2, zmm6 + vpaddd zmm3, zmm3, zmm7 + vpxord zmm26, zmm26, zmm0 + vpxord zmm27, zmm27, zmm1 + vpxord zmm30, zmm30, zmm2 + vpxord zmm31, zmm31, zmm3 + vprord zmm26, zmm26, 0x08 + vmovdqa32 zmm19, zmm16 + vprord zmm27, zmm27, 0x08 + vprord zmm30, zmm30, 0x08 + vprord zmm31, zmm31, 0x08 + vpaddd zmm17, zmm17, zmm26 + vpaddd zmm23, zmm23, zmm27 + vpaddd zmm24, zmm24, zmm30 + vpaddd zmm25, zmm25, zmm31 + vpxord zmm4, zmm4, zmm17 + vmovdqa32 zmm14, zmm15 + vpxord zmm5, zmm5, zmm23 + vpxord zmm6, zmm6, zmm24 + vpxord zmm7, zmm7, zmm25 + vprord zmm4, zmm4, 0x07 + vprord zmm5, zmm5, 0x07 + vprord zmm6, zmm6, 0x07 + vprord zmm7, zmm7, 0x07 + vpaddd zmm0, zmm0, zmm11 + vmovdqa32 zmm16, zmm29 + vpaddd zmm1, zmm1, zmm15 + vpaddd zmm2, zmm2, zmm13 + vpaddd zmm3, zmm3, zmm22 + vpaddd zmm0, zmm0, zmm5 + vpaddd zmm1, zmm1, zmm6 + vpaddd zmm2, zmm2, zmm7 + vpaddd zmm3, zmm3, zmm4 + vpxord zmm31, zmm31, zmm0 + vmovdqa32 zmm15, zmm13 + vpxord zmm26, zmm26, zmm1 + vpxord zmm27, zmm27, zmm2 + vpxord zmm30, zmm30, zmm3 + vprord zmm31, zmm31, 0x10 + vprord zmm26, zmm26, 0x10 + vprord zmm27, zmm27, 0x10 + vprord zmm30, zmm30, 0x10 + vpaddd zmm24, zmm24, zmm31 + vmovdqa32 zmm13, zmm28 + vpaddd zmm25, zmm25, zmm26 + vpaddd zmm17, zmm17, zmm27 + vpaddd zmm23, zmm23, zmm30 + vpxord zmm5, zmm5, zmm24 + vpxord zmm6, zmm6, zmm25 + vpxord zmm7, zmm7, zmm17 + vpxord zmm4, zmm4, zmm23 + vprord zmm5, zmm5, 0x0C + vprord zmm6, zmm6, 0x0C + vprord zmm7, zmm7, 0x0C + vprord zmm4, zmm4, 0x0C + vpaddd zmm0, zmm0, zmm28 + vpaddd zmm1, zmm1, zmm8 + vpaddd zmm2, zmm2, zmm29 + vmovdqa32 zmm29, zmm22 + vpaddd zmm3, zmm3, zmm9 + vpaddd zmm0, zmm0, zmm5 + vpaddd zmm1, zmm1, zmm6 + vpaddd zmm2, zmm2, zmm7 + vmovdqa32 zmm28, zmm8 + vpaddd zmm3, zmm3, zmm4 + vpxord zmm31, zmm31, zmm0 + vpxord zmm26, zmm26, zmm1 + vmovdqa32 zmm22, zmm9 + vpxord zmm27, zmm27, zmm2 + vpxord zmm30, zmm30, zmm3 + vprord zmm31, zmm31, 0x08 + vmovdqa32 zmm8, zmm21 + vprord zmm26, zmm26, 0x08 + vprord zmm27, zmm27, 0x08 + vprord zmm30, zmm30, 0x08 + vmovdqa32 zmm9, zmm11 + vpaddd zmm24, zmm24, zmm31 + vpaddd zmm25, zmm25, zmm26 + vpaddd zmm17, zmm17, zmm27 + vpaddd zmm23, zmm23, zmm30 + vmovdqa32 zmm11, zmm20 + vpxord zmm5, zmm5, zmm24 + vpxord zmm6, zmm6, zmm25 + vpxord zmm7, zmm7, zmm17 + vpxord zmm4, zmm4, zmm23 + vmovdqa32 zmm21, zmmword ptr [rsp+0x80] + vprord zmm5, zmm5, 0x07 + vprord zmm6, zmm6, 0x07 + vprord zmm7, zmm7, 0x07 + vprord zmm4, zmm4, 0x07 + vmovdqa32 zmm20, zmmword ptr [rsp+0xC0] + dec al + jnz 4b + vpxord zmm0, zmm0, zmm17 + vpxord zmm1, zmm1, zmm23 + vpxord zmm2, zmm2, zmm24 + vpxord zmm3, zmm3, zmm25 + vpxord zmm4, zmm4, zmm26 + vpxord zmm5, zmm5, zmm27 + vpxord zmm6, zmm6, zmm30 + vpxord zmm7, zmm7, zmm31 + movzx eax, byte ptr [rbp+0x38] + jb 3b + mov rbx, qword ptr [rbp+0x50] + vpunpckldq zmm8, zmm0, zmm2 + vpunpckhdq zmm9, zmm0, zmm2 + vpunpckldq zmm10, zmm1, zmm3 + vpunpckhdq zmm11, zmm1, zmm3 + vpunpckldq zmm12, zmm4, zmm6 + vpunpckhdq zmm13, zmm4, zmm6 + vpunpckldq zmm14, zmm5, zmm7 + vpunpckhdq zmm15, zmm5, zmm7 + vpunpckldq zmm0, zmm8, zmm10 + vpunpckhdq zmm1, zmm8, zmm10 + vpunpckldq zmm2, zmm9, zmm11 + vpunpckhdq zmm3, zmm9, zmm11 + vpunpckldq zmm4, zmm12, zmm14 + vpunpckhdq zmm5, zmm12, zmm14 + vpunpckldq zmm6, zmm13, zmm15 + vpunpckhdq zmm7, zmm13, zmm15 + vmovdqa32 zmm16, zmmword ptr [rip+INDEX0] + vmovdqa32 zmm18, zmmword ptr [rip+INDEX1] + vmovdqa32 zmm8, zmm0 + vpermt2d zmm8, zmm16, zmm4 + vpermt2d zmm0, zmm18, zmm4 + vmovdqa32 zmm10, zmm1 + vpermt2d zmm10, zmm16, zmm5 + vpermt2d zmm1, zmm18, zmm5 + vmovdqa32 zmm12, zmm2 + vpermt2d zmm12, zmm16, zmm6 + vpermt2d zmm2, zmm18, zmm6 + vmovdqa32 zmm14, zmm3 + vpermt2d zmm14, zmm16, zmm7 + vpermt2d zmm3, zmm18, zmm7 + vextracti64x4 ymmword ptr [rbx], zmm8, 0x00 + vextracti64x4 ymmword ptr [rbx+0x20], zmm10, 0x00 + vextracti64x4 ymmword ptr [rbx+0x40], zmm12, 0x00 + vextracti64x4 ymmword ptr [rbx+0x60], zmm14, 0x00 + vextracti64x4 ymmword ptr [rbx+0x80], zmm0, 0x00 + vextracti64x4 ymmword ptr [rbx+0xA0], zmm1, 0x00 + vextracti64x4 ymmword ptr [rbx+0xC0], zmm2, 0x00 + vextracti64x4 ymmword ptr [rbx+0xE0], zmm3, 0x00 + vextracti64x4 ymmword ptr [rbx+0x100], zmm8, 0x01 + vextracti64x4 ymmword ptr [rbx+0x120], zmm10, 0x01 + vextracti64x4 ymmword ptr [rbx+0x140], zmm12, 0x01 + vextracti64x4 ymmword ptr [rbx+0x160], zmm14, 0x01 + vextracti64x4 ymmword ptr [rbx+0x180], zmm0, 0x01 + vextracti64x4 ymmword ptr [rbx+0x1A0], zmm1, 0x01 + vextracti64x4 ymmword ptr [rbx+0x1C0], zmm2, 0x01 + vextracti64x4 ymmword ptr [rbx+0x1E0], zmm3, 0x01 + vmovdqa32 zmm8, zmmword ptr [rsp] + vmovdqa32 zmm9, zmmword ptr [rsp+0x40] + vmovdqa32 zmm10, zmm8 + vpaddd zmm10 {k1}, zmm8, dword ptr [rip+ADD16] {1to16} + vpcmpud k2 {k1}, zmm10, zmm8, 0x01 + vpaddd zmm9 {k2}, zmm9, dword ptr [rip+ADD1] {1to16} + vmovdqa32 zmmword ptr [rsp], zmm10 + vmovdqa32 zmmword ptr [rsp+0x40], zmm9 + add rbx, 0x200 + mov qword ptr [rbp+0x50], rbx + add rdi, 0x80 + sub rsi, 0x10 + cmp rsi, 0x10 + jnb 2b + test esi, esi + jnz 5f +9: vzeroupper - mov rsp, rbp - pop rbp - pop rbx - pop r12 - pop r13 - pop r14 - pop r15 + mov rsp, rbp + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp + pop rbx ret .p2align 6 -3: - test esi, 0x8 - je 3f +5: + mov rax, rsp + test sil, 0x08 + jz 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 ymm1, dword ptr [rcx+0x04] + vpbroadcastd ymm2, dword ptr [rcx+0x08] + vpbroadcastd ymm3, dword ptr [rcx+0x0C] 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 + movzx edx, byte ptr [rbp+0x38] + movzx ebx, byte ptr [rbp+0x40] + or edx, ebx + xor ebx, ebx 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] + movzx r8d, byte ptr [rbp+0x48] + or r8d, edx + add rbx, 0x40 + cmp rbx, qword ptr [rsp+0x100] + cmovz edx, r8d + mov dword ptr [rsp+0x80], edx + mov edx, 0xCC + kmovw k2, edx + mov edx, 0x33 + kmovw k3, edx + mov rdx, qword ptr [rdi] + mov r8, qword ptr [rdi+0x20] + vmovups xmm8, xmmword ptr [rdx+rbx*1-0x40] + vinserti32x4 ymm8, ymm8, xmmword ptr [r8+rbx*1-0x40], 0x01 + vmovups xmm12, xmmword ptr [rdx+rbx*1-0x30] + vinserti32x4 ymm12, ymm12, xmmword ptr [r8+rbx*1-0x30], 0x01 + mov rdx, qword ptr [rdi+0x08] + mov r8, qword ptr [rdi+0x28] + vmovups xmm9, xmmword ptr [rdx+rbx*1-0x40] + vinserti32x4 ymm9, ymm9, xmmword ptr [r8+rbx*1-0x40], 0x01 + vmovups xmm13, xmmword ptr [rdx+rbx*1-0x30] + vinserti32x4 ymm13, ymm13, xmmword ptr [r8+rbx*1-0x30], 0x01 + mov rdx, qword ptr [rdi+0x10] + mov r8, qword ptr [rdi+0x30] + vmovups xmm10, xmmword ptr [rdx+rbx*1-0x40] + vinserti32x4 ymm10, ymm10, xmmword ptr [r8+rbx*1-0x40], 0x01 + vmovups xmm14, xmmword ptr [rdx+rbx*1-0x30] + vinserti32x4 ymm14, ymm14, xmmword ptr [r8+rbx*1-0x30], 0x01 + mov rdx, qword ptr [rdi+0x18] + mov r8, qword ptr [rdi+0x38] + vmovups xmm11, xmmword ptr [rdx+rbx*1-0x40] + vinserti32x4 ymm11, ymm11, xmmword ptr [r8+rbx*1-0x40], 0x01 + vmovups xmm15, xmmword ptr [rdx+rbx*1-0x30] + vinserti32x4 ymm15, ymm15, xmmword ptr [r8+rbx*1-0x30], 0x01 + vpunpckldq ymm24, ymm8, ymm9 + vpunpckhdq ymm9, ymm8, ymm9 + vpunpckldq ymm8, ymm10, ymm11 + vpunpckhdq ymm11, ymm10, ymm11 + vpunpckldq ymm10, ymm12, ymm13 + vpunpckhdq ymm13, ymm12, ymm13 + vpunpckldq ymm12, ymm14, ymm15 + vpunpckhdq ymm15, ymm14, ymm15 + vshufps ymm14, ymm24, ymm8, 0x44 + vshufps ymm8, ymm24, ymm8, 0xEE + vshufps ymm24, ymm9, ymm11, 0x44 + vshufps ymm11, ymm9, ymm11, 0xEE + vshufps ymm9, ymm10, ymm12, 0x44 + vshufps ymm12, ymm10, ymm12, 0xEE + vshufps ymm10, ymm13, ymm15, 0x44 + vshufps ymm15, ymm13, ymm15, 0xEE + mov rdx, qword ptr [rdi] + mov r8, qword ptr [rdi+0x20] + vmovups xmm16, xmmword ptr [rdx+rbx*1-0x20] + vinserti32x4 ymm16, ymm16, xmmword ptr [r8+rbx*1-0x20], 0x01 + vmovups xmm20, xmmword ptr [rdx+rbx*1-0x10] + vinserti32x4 ymm20, ymm20, xmmword ptr [r8+rbx*1-0x10], 0x01 + mov rdx, qword ptr [rdi+0x08] + mov r8, qword ptr [rdi+0x28] + vmovups xmm17, xmmword ptr [rdx+rbx*1-0x20] + vinserti32x4 ymm17, ymm17, xmmword ptr [r8+rbx*1-0x20], 0x01 + vmovups xmm21, xmmword ptr [rdx+rbx*1-0x10] + vinserti32x4 ymm21, ymm21, xmmword ptr [r8+rbx*1-0x10], 0x01 + mov rdx, qword ptr [rdi+0x10] + mov r8, qword ptr [rdi+0x30] + vmovups xmm18, xmmword ptr [rdx+rbx*1-0x20] + vinserti32x4 ymm18, ymm18, xmmword ptr [r8+rbx*1-0x20], 0x01 + vmovups xmm22, xmmword ptr [rdx+rbx*1-0x10] + vinserti32x4 ymm22, ymm22, xmmword ptr [r8+rbx*1-0x10], 0x01 + mov rdx, qword ptr [rdi+0x18] + mov r8, qword ptr [rdi+0x38] + vmovups xmm19, xmmword ptr [rdx+rbx*1-0x20] + vinserti32x4 ymm19, ymm19, xmmword ptr [r8+rbx*1-0x20], 0x01 + vmovups xmm23, xmmword ptr [rdx+rbx*1-0x10] + vinserti32x4 ymm23, ymm23, xmmword ptr [r8+rbx*1-0x10], 0x01 + vpunpckldq ymm13, ymm16, ymm17 + vpunpckhdq ymm17, ymm16, ymm17 + vpunpckldq ymm16, ymm18, ymm19 + vpunpckhdq ymm19, ymm18, ymm19 + vpunpckldq ymm18, ymm20, ymm21 + vpunpckhdq ymm21, ymm20, ymm21 + vpunpckldq ymm20, ymm22, ymm23 + vpunpckhdq ymm23, ymm22, ymm23 + vshufps ymm22, ymm13, ymm16, 0x44 + vshufps ymm16, ymm13, ymm16, 0xEE + vshufps ymm13, ymm17, ymm19, 0x44 + vshufps ymm19, ymm17, ymm19, 0xEE + vshufps ymm17, ymm18, ymm20, 0x44 + vshufps ymm20, ymm18, ymm20, 0xEE + vshufps ymm18, ymm21, ymm23, 0x44 + vshufps ymm23, ymm21, ymm23, 0xEE + vpbroadcastd ymm21, dword ptr [rip+BLAKE3_IV_0] + vpbroadcastd ymm25, dword ptr [rip+BLAKE3_IV_1] + vpbroadcastd ymm26, dword ptr [rip+BLAKE3_IV_2] + vpbroadcastd ymm27, dword ptr [rip+BLAKE3_IV_3] + vmovdqa32 ymm28, ymmword ptr [rax] + vmovdqa32 ymm29, ymmword ptr [rax+0x40] + vpbroadcastd ymm30, dword ptr [rip+BLAKE3_BLOCK_LEN] + vpbroadcastd ymm31, dword ptr [rsp+0x80] + mov dl, 0x07 +4: + vpaddd ymm0, ymm0, ymm14 + vpaddd ymm1, ymm1, ymm24 + vpaddd ymm2, ymm2, ymm9 + vpaddd ymm3, ymm3, ymm10 + vmovdqa32 ymmword ptr [rsp+0x80], ymm14 + vmovdqa32 ymmword ptr [rsp+0xC0], ymm10 + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vpxord ymm28, ymm28, ymm0 + vmovdqa32 ymm14, ymm24 + vpxord ymm29, ymm29, ymm1 + vpxord ymm30, ymm30, ymm2 + vpxord ymm31, ymm31, ymm3 + vprord ymm28, ymm28, 0x10 + vprord ymm29, ymm29, 0x10 + vprord ymm30, ymm30, 0x10 + vprord ymm31, ymm31, 0x10 + vpaddd ymm21, ymm21, ymm28 + vmovdqa32 ymm10, ymm9 + vpaddd ymm25, ymm25, ymm29 + vpaddd ymm26, ymm26, ymm30 + vpaddd ymm27, ymm27, ymm31 + vpxord ymm4, ymm4, ymm21 + vpxord ymm5, ymm5, ymm25 + vpxord ymm6, ymm6, ymm26 + vpxord ymm7, ymm7, ymm27 + vprord ymm4, ymm4, 0x0C + vprord ymm5, ymm5, 0x0C + vprord ymm6, ymm6, 0x0C + vprord ymm7, ymm7, 0x0C + vpaddd ymm0, ymm0, ymm8 + vpaddd ymm1, ymm1, ymm11 + vpaddd ymm2, ymm2, ymm12 + vpaddd ymm3, ymm3, ymm15 + vpaddd ymm0, ymm0, ymm4 + vmovdqa32 ymm24, ymm11 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vpxord ymm28, ymm28, ymm0 + vpxord ymm29, ymm29, ymm1 + vpxord ymm30, ymm30, ymm2 + vpxord ymm31, ymm31, ymm3 + vprord ymm28, ymm28, 0x08 + vmovdqa32 ymm9, ymm15 + vprord ymm29, ymm29, 0x08 + vprord ymm30, ymm30, 0x08 + vprord ymm31, ymm31, 0x08 + vpaddd ymm21, ymm21, ymm28 + vpaddd ymm25, ymm25, ymm29 + vpaddd ymm26, ymm26, ymm30 + vpaddd ymm27, ymm27, ymm31 + vpxord ymm4, ymm4, ymm21 + vmovdqa32 ymm11, ymm13 + vpxord ymm5, ymm5, ymm25 + vpxord ymm6, ymm6, ymm26 + vpxord ymm7, ymm7, ymm27 + vprord ymm4, ymm4, 0x07 + vprord ymm5, ymm5, 0x07 + vprord ymm6, ymm6, 0x07 + vprord ymm7, ymm7, 0x07 + vpaddd ymm0, ymm0, ymm22 + vmovdqa32 ymm15, ymm20 + vpaddd ymm1, ymm1, ymm13 + vpaddd ymm2, ymm2, ymm17 + vpaddd ymm3, ymm3, ymm18 + vpaddd ymm0, ymm0, ymm5 + vpaddd ymm1, ymm1, ymm6 + vpaddd ymm2, ymm2, ymm7 + vpaddd ymm3, ymm3, ymm4 + vpxord ymm31, ymm31, ymm0 + vmovdqa32 ymm13, ymm17 + vpxord ymm28, ymm28, ymm1 + vpxord ymm29, ymm29, ymm2 + vpxord ymm30, ymm30, ymm3 + vprord ymm31, ymm31, 0x10 + vprord ymm28, ymm28, 0x10 + vprord ymm29, ymm29, 0x10 + vprord ymm30, ymm30, 0x10 + vpaddd ymm26, ymm26, ymm31 + vmovdqa32 ymm17, ymm16 + vpaddd ymm27, ymm27, ymm28 + vpaddd ymm21, ymm21, ymm29 + vpaddd ymm25, ymm25, ymm30 + vpxord ymm5, ymm5, ymm26 + vpxord ymm6, ymm6, ymm27 + vpxord ymm7, ymm7, ymm21 + vpxord ymm4, ymm4, ymm25 + vprord ymm5, ymm5, 0x0C + vprord ymm6, ymm6, 0x0C + vprord ymm7, ymm7, 0x0C + vprord ymm4, ymm4, 0x0C + vpaddd ymm0, ymm0, ymm16 + vpaddd ymm1, ymm1, ymm19 + vpaddd ymm2, ymm2, ymm20 + vmovdqa32 ymm20, ymm18 + vpaddd ymm3, ymm3, ymm23 + vpaddd ymm0, ymm0, ymm5 + vpaddd ymm1, ymm1, ymm6 + vpaddd ymm2, ymm2, ymm7 + vmovdqa32 ymm16, ymm19 + vpaddd ymm3, ymm3, ymm4 + vpxord ymm31, ymm31, ymm0 + vpxord ymm28, ymm28, ymm1 + vmovdqa32 ymm18, ymm23 + vpxord ymm29, ymm29, ymm2 + vpxord ymm30, ymm30, ymm3 + vprord ymm31, ymm31, 0x08 + vmovdqa32 ymm19, ymm12 + vprord ymm28, ymm28, 0x08 + vprord ymm29, ymm29, 0x08 + vprord ymm30, ymm30, 0x08 + vmovdqa32 ymm23, ymm22 + vpaddd ymm26, ymm26, ymm31 + vpaddd ymm27, ymm27, ymm28 + vpaddd ymm21, ymm21, ymm29 + vpaddd ymm25, ymm25, ymm30 + vmovdqa32 ymm22, ymm8 + vpxord ymm5, ymm5, ymm26 + vpxord ymm6, ymm6, ymm27 + vpxord ymm7, ymm7, ymm21 + vpxord ymm4, ymm4, ymm25 + vmovdqa32 ymm12, ymmword ptr [rsp+0x80] + vprord ymm5, ymm5, 0x07 + vprord ymm6, ymm6, 0x07 + vprord ymm7, ymm7, 0x07 + vprord ymm4, ymm4, 0x07 + vmovdqa32 ymm8, ymmword ptr [rsp+0xC0] + dec dl + jnz 4b + vpxord ymm0, ymm0, ymm21 + vpxord ymm1, ymm1, ymm25 + vpxord ymm2, ymm2, ymm26 + vpxord ymm3, ymm3, ymm27 + vpxord ymm4, ymm4, ymm28 + vpxord ymm5, ymm5, ymm29 + vpxord ymm6, ymm6, ymm30 + vpxord ymm7, ymm7, ymm31 + movzx edx, byte ptr [rbp+0x38] + jb 2b + mov r8, 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 + vshufps ymm12, ymm8, ymm9, 0x4E vblendps ymm1, ymm8, ymm12, 0xCC - vshufps ymm8, ymm11, ymm0, 78 + vshufps ymm8, ymm11, ymm0, 0x4E vunpckhps ymm13, ymm2, ymm3 vblendps ymm2, ymm11, ymm8, 0xCC vblendps ymm3, ymm12, ymm9, 0xCC vperm2f128 ymm12, ymm1, ymm2, 0x20 - vmovups ymmword ptr [rbx], ymm12 + vmovups ymmword ptr [r8], 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 + vmovups ymmword ptr [r8+0x20], ymm7 + vshufps ymm5, ymm10, ymm13, 0x4E vblendps ymm6, ymm5, ymm13, 0xCC - vshufps ymm13, ymm14, ymm15, 78 + vshufps ymm13, ymm14, ymm15, 0x4E vblendps ymm10, ymm10, ymm5, 0xCC vblendps ymm14, ymm14, ymm13, 0xCC vperm2f128 ymm8, ymm10, ymm14, 0x20 - vmovups ymmword ptr [rbx+0x40], ymm8 + vmovups ymmword ptr [r8+0x40], ymm8 vblendps ymm15, ymm13, ymm15, 0xCC vperm2f128 ymm13, ymm6, ymm15, 0x20 - vmovups ymmword ptr [rbx+0x60], ymm13 + vmovups ymmword ptr [r8+0x60], ymm13 vperm2f128 ymm9, ymm1, ymm2, 0x31 vperm2f128 ymm11, ymm3, ymm4, 0x31 - vmovups ymmword ptr [rbx+0x80], ymm9 + vmovups ymmword ptr [r8+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 + vmovups ymmword ptr [r8+0xA0], ymm11 + vmovups ymmword ptr [r8+0xC0], ymm14 + vmovups ymmword ptr [r8+0xE0], ymm15 + lea r9, qword ptr [rax+0x20] + kortestw k1, k1 + cmovnz rax, r9 + add r8, 0x100 + mov qword ptr [rbp+0x50], r8 + add rdi, 0x40 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 + mov rdx, qword ptr [rbp+0x50] + movzx ebx, byte ptr [rbp+0x38] + movzx r8d, byte ptr [rbp+0x48] + test sil, 0x04 + jz 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 + vbroadcasti32x4 zmm1, xmmword ptr [rcx+0x10] + vbroadcasti32x4 zmm4, xmmword ptr [rip+BLAKE3_IV] + mov r9d, 0x4444 + kmovw k2, r9d + vmovdqa xmm6, xmmword ptr [rax] + vmovdqa xmm7, xmmword ptr [rax+0x40] + vpunpckldq xmm8, xmm6, xmm7 + vpunpckhdq xmm9, xmm6, xmm7 + vpermq ymm8, ymm8, 0xDC + vpermq ymm9, ymm9, 0xDC + vpbroadcastd zmm6, dword ptr [rip+BLAKE3_BLOCK_LEN] + vinserti64x4 zmm5, zmm8, ymm9, 0x01 + vpblendmd zmm5 {k2}, zmm5, zmm6 + mov r9, qword ptr [rdi] + mov r10, qword ptr [rdi+0x08] + mov r11, qword ptr [rdi+0x10] + mov r12, qword ptr [rdi+0x18] + mov r13d, 0xAAAA + kmovw k2, r13d + mov r13d, 0x8888 + kmovw k3, r13d + movzx r13d, byte ptr [rbp+0x40] + or r13d, ebx + xor r14d, r14d 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 + movzx r15d, byte ptr [rbp+0x48] + or r15d, r13d + add r14, 0x40 + cmp r14, qword ptr [rsp+0x100] + cmovz r13d, r15d + mov dword ptr [rsp+0x80], r13d + vmovdqa32 zmm2, zmm4 + vpbroadcastd zmm6, dword ptr [rsp+0x80] + vpblendmd zmm3 {k3}, zmm5, zmm6 + vmovdqu32 zmm10, zmmword ptr [r9+r14*1-0x40] + vinserti32x4 zmm10, zmm10, xmmword ptr [r10+r14*1-0x40], 0x01 + vinserti32x4 zmm10, zmm10, xmmword ptr [r11+r14*1-0x40], 0x02 + vinserti32x4 zmm10, zmm10, xmmword ptr [r12+r14*1-0x40], 0x03 + vmovdqu32 zmm11, zmmword ptr [r9+r14*1-0x30] + vinserti32x4 zmm11, zmm11, xmmword ptr [r10+r14*1-0x30], 0x01 + vinserti32x4 zmm11, zmm11, xmmword ptr [r11+r14*1-0x30], 0x02 + vinserti32x4 zmm11, zmm11, xmmword ptr [r12+r14*1-0x30], 0x03 + vshufps zmm6, zmm10, zmm11, 0x88 + vshufps zmm7, zmm10, zmm11, 0xDD + vmovdqu32 zmm10, zmmword ptr [r9+r14*1-0x20] + vinserti32x4 zmm10, zmm10, xmmword ptr [r10+r14*1-0x20], 0x01 + vinserti32x4 zmm10, zmm10, xmmword ptr [r11+r14*1-0x20], 0x02 + vinserti32x4 zmm10, zmm10, xmmword ptr [r12+r14*1-0x20], 0x03 + vmovdqu32 zmm11, zmmword ptr [r9+r14*1-0x10] + vinserti32x4 zmm11, zmm11, xmmword ptr [r10+r14*1-0x10], 0x01 + vinserti32x4 zmm11, zmm11, xmmword ptr [r11+r14*1-0x10], 0x02 + vinserti32x4 zmm11, zmm11, xmmword ptr [r12+r14*1-0x10], 0x03 + vshufps zmm8, zmm10, zmm11, 0x88 + vshufps zmm9, zmm10, zmm11, 0xDD + vpshufd zmm8, zmm8, 0x93 + vpshufd zmm9, zmm9, 0x93 + mov r15b, 0x07 +4: + 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, 0x0C + vpaddd zmm0, zmm0, zmm7 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 0x08 + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 0x07 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 + vpaddd zmm0, zmm0, zmm8 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 0x10 + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 0x0C + vpaddd zmm0, zmm0, zmm9 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 0x08 + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 0x07 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 + dec r15b + jz 4f + vshufps zmm12, zmm6, zmm7, 0xD6 + vpshufd zmm13, zmm6, 0x0F + vpshufd zmm6, zmm12, 0x39 + vshufps zmm12, zmm8, zmm9, 0xFA + vpblendmd zmm13 {k2}, zmm13, zmm12 + vpunpcklqdq zmm12, zmm9, zmm7 + vpblendmd zmm12 {k3}, zmm12, zmm8 + vpshufd zmm12, zmm12, 0x78 + vpunpckhdq zmm7, zmm7, zmm9 + vpunpckldq zmm8, zmm8, zmm7 + vpshufd zmm9, zmm8, 0x1E + vmovdqa32 zmm7, zmm13 + vmovdqa32 zmm8, zmm12 + jmp 4b +4: + vpxord zmm0, zmm0, zmm2 + vpxord zmm1, zmm1, zmm3 + mov r13d, ebx + jb 2b + vmovdqu xmmword ptr [rdx], xmm0 + vmovdqu xmmword ptr [rdx+0x10], xmm1 + vextracti128 xmmword ptr [rdx+0x20], ymm0, 0x01 + vextracti128 xmmword ptr [rdx+0x30], ymm1, 0x01 + vextracti32x4 xmmword ptr [rdx+0x40], zmm0, 0x02 + vextracti32x4 xmmword ptr [rdx+0x50], zmm1, 0x02 + vextracti32x4 xmmword ptr [rdx+0x60], zmm0, 0x03 + vextracti32x4 xmmword ptr [rdx+0x70], zmm1, 0x03 + lea r15, qword ptr [rax+0x10] + kortestw k1, k1 + cmovnz rax, r15 + add rdx, 0x80 + add rdi, 0x20 3: - test esi, 0x2 - je 3f + test sil, 0x02 + jz 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 + vbroadcasti128 ymm4, xmmword ptr [rip+BLAKE3_IV] + vmovd xmm5, dword ptr [rax] + vpinsrd xmm5, xmm5, dword ptr [rax+0x40], 0x01 + vpinsrd xmm5, xmm5, dword ptr [rip+BLAKE3_BLOCK_LEN], 0x02 + vmovd xmm6, dword ptr [rax+0x04] + vpinsrd xmm6, xmm6, dword ptr [rax+0x44], 0x01 + vpinsrd xmm6, xmm6, dword ptr [rip+BLAKE3_BLOCK_LEN], 0x02 + vinserti128 ymm5, ymm5, xmm6, 0x01 + mov r9, qword ptr [rdi] + mov r10, qword ptr [rdi+0x08] + mov r11d, ebx + movzx r12d, byte ptr [rbp+0x40] + or r11d, r12d + xor r12d, r12d 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 + movzx r13d, byte ptr [rbp+0x48] + or r13d, r11d + add r12, 0x40 + cmp r12, qword ptr [rsp+0x100] + cmovz r11d, r13d + mov dword ptr [rsp+0x80], r11d + vmovdqa ymm2, ymm4 + vpbroadcastd ymm6, dword ptr [rsp+0x80] + vpblendd ymm3, ymm5, ymm6, 0x88 + vmovdqu ymm10, ymmword ptr [r9+r12*1-0x40] + vinserti128 ymm10, ymm10, xmmword ptr [r10+r12*1-0x40], 0x01 + vmovdqu ymm11, ymmword ptr [r9+r12*1-0x30] + vinserti128 ymm11, ymm11, xmmword ptr [r10+r12*1-0x30], 0x01 + vshufps ymm6, ymm10, ymm11, 0x88 + vshufps ymm7, ymm10, ymm11, 0xDD + vmovdqu ymm10, ymmword ptr [r9+r12*1-0x20] + vinserti128 ymm10, ymm10, xmmword ptr [r10+r12*1-0x20], 0x01 + vmovdqu ymm11, ymmword ptr [r9+r12*1-0x10] + vinserti128 ymm11, ymm11, xmmword ptr [r10+r12*1-0x10], 0x01 + vshufps ymm8, ymm10, ymm11, 0x88 + vshufps ymm9, ymm10, ymm11, 0xDD + vpshufd ymm8, ymm8, 0x93 + vpshufd ymm9, ymm9, 0x93 + mov r13b, 0x07 +4: + 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, 0x0C + vpaddd ymm0, ymm0, ymm7 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 0x08 + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 0x07 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 + vpaddd ymm0, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 0x10 + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 0x0C + vpaddd ymm0, ymm0, ymm9 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 0x08 + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 0x07 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 + dec r13b + jz 4f + vshufps ymm10, ymm6, ymm7, 0xD6 + vpshufd ymm11, ymm6, 0x0F + vpshufd ymm6, ymm10, 0x39 + vshufps ymm10, ymm8, ymm9, 0xFA + vpblendd ymm11, ymm11, ymm10, 0xAA + vpunpcklqdq ymm10, ymm9, ymm7 + vpblendd ymm10, ymm10, ymm8, 0x88 + vpshufd ymm10, ymm10, 0x78 + vpunpckhdq ymm7, ymm7, ymm9 + vpunpckldq ymm8, ymm8, ymm7 + vpshufd ymm9, ymm8, 0x1E + vmovdqa ymm7, ymm11 + vmovdqa ymm8, ymm10 + jmp 4b +4: + vpxor ymm0, ymm0, ymm2 + vpxor ymm1, ymm1, ymm3 + mov r11d, ebx + jb 2b + vmovdqu xmmword ptr [rdx], xmm0 + vmovdqu xmmword ptr [rdx+0x10], xmm1 + vextracti128 xmmword ptr [rdx+0x20], ymm0, 0x01 + vextracti128 xmmword ptr [rdx+0x30], ymm1, 0x01 + lea r13, qword ptr [rax+0x08] + kortestw k1, k1 + cmovnz rax, r13 + add rdx, 0x40 + add rdi, 0x10 3: - test esi, 0x1 - je 4b + test sil, 0x01 + jz 9b 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 + vmovdqa xmm4, xmmword ptr [rip+BLAKE3_IV] + vmovd xmm5, dword ptr [rax] + vpinsrd xmm5, xmm5, dword ptr [rax+0x40], 0x01 + vpinsrd xmm5, xmm5, dword ptr [rip+BLAKE3_BLOCK_LEN], 0x02 + mov r9, qword ptr [rdi] + mov r10d, ebx + movzx r11d, byte ptr [rbp+0x40] + or r10d, r11d + xor r11d, r11d 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 + movzx r12d, byte ptr [rbp+0x48] + or r12d, r10d + add r11, 0x40 + cmp r11, qword ptr [rsp+0x100] + cmovz r10d, r12d + vmovdqa xmm2, xmm4 + vpinsrd xmm3, xmm5, r10d, 0x03 + vmovdqu xmm10, xmmword ptr [r9+r11*1-0x40] + vmovdqu xmm11, xmmword ptr [r9+r11*1-0x30] + vshufps xmm6, xmm10, xmm11, 0x88 + vshufps xmm7, xmm10, xmm11, 0xDD + vmovdqu xmm10, xmmword ptr [r9+r11*1-0x20] + vmovdqu xmm11, xmmword ptr [r9+r11*1-0x10] + vshufps xmm8, xmm10, xmm11, 0x88 + vshufps xmm9, xmm10, xmm11, 0xDD + vpshufd xmm8, xmm8, 0x93 + vpshufd xmm9, xmm9, 0x93 + mov r12b, 0x07 +4: + 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, 0x0C + vpaddd xmm0, xmm0, xmm7 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 0x08 + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 0x07 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 + vpaddd xmm0, xmm0, xmm8 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 0x10 + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 0x0C + vpaddd xmm0, xmm0, xmm9 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 0x08 + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 0x07 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 + dec r12b + jz 4f + vshufps xmm10, xmm6, xmm7, 0xD6 + vpshufd xmm11, xmm6, 0x0F + vpshufd xmm6, xmm10, 0x39 + vshufps xmm10, xmm8, xmm9, 0xFA + vpblendd xmm11, xmm11, xmm10, 0xAA + vpunpcklqdq xmm10, xmm9, xmm7 + vpblendd xmm10, xmm10, xmm8, 0x88 + vpshufd xmm10, xmm10, 0x78 + vpunpckhdq xmm7, xmm7, xmm9 + vpunpckldq xmm8, xmm8, xmm7 + vpshufd xmm9, xmm8, 0x1E + vmovdqa xmm7, xmm11 + vmovdqa xmm8, xmm10 + jmp 4b +4: + vpxor xmm0, xmm0, xmm2 + vpxor xmm1, xmm1, xmm3 + mov r10d, ebx + jb 2b + vmovdqu xmmword ptr [rdx], xmm0 + vmovdqu xmmword ptr [rdx+0x10], xmm1 + jmp 9b + .p2align 6 _blake3_compress_in_place_avx512: blake3_compress_in_place_avx512: @@ -2559,2238 +1258,878 @@ blake3_compress_xof_avx512: 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 + mov rax, qword ptr [rsp+0x08] + cmp rax, 0x01 + jnbe 2f + vmovdqu xmm0, xmmword ptr [rdi] + vmovdqu xmm1, xmmword ptr [rdi+0x10] + movzx edx, dl + movzx r8d, r8b + shl r8, 0x20 + or rdx, r8 + vmovq xmm2, rdx + vmovq xmm3, rcx + vpunpcklqdq xmm3, xmm3, xmm2 + vmovaps xmm2, xmmword ptr [rip+BLAKE3_IV] + vmovdqu xmm8, xmmword ptr [rsi] + vmovdqu xmm9, xmmword ptr [rsi+0x10] + vshufps xmm4, xmm8, xmm9, 0x88 + vshufps xmm5, xmm8, xmm9, 0xDD + vmovdqu xmm8, xmmword ptr [rsi+0x20] + vmovdqu xmm9, xmmword ptr [rsi+0x30] + vshufps xmm6, xmm8, xmm9, 0x88 + vshufps xmm7, xmm8, xmm9, 0xDD + vpshufd xmm6, xmm6, 0x93 + vpshufd xmm7, xmm7, 0x93 + mov cl, 0x07 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 + 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, 0x0C + vpaddd xmm0, xmm0, xmm5 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 0x08 + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 0x07 + 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, 0x0C + vpaddd xmm0, xmm0, xmm7 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 0x08 + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 0x07 + vpshufd xmm0, xmm0, 0x39 + vpshufd xmm3, xmm3, 0x4E + vpshufd xmm2, xmm2, 0x93 + dec cl + jz 3f + vshufps xmm8, xmm4, xmm5, 0xD6 + vpshufd xmm9, xmm4, 0x0F + 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 + 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 + vzeroupper + ret 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 + push rbp + mov rbp, rsp + sub rsp, 0x100 + and rsp, 0xFFFFFFFFFFFFFFC0 + vpbroadcastd zmm0, ecx + shr rcx, 0x20 + vpbroadcastd zmm1, ecx + vpaddd zmm2, zmm0, zmmword ptr [rip+ADD0] + vpcmpud k1, zmm2, zmm0, 0x01 + vpaddd zmm1 {k1}, zmm1, dword ptr [rip+ADD1] {1to16} + vmovdqa32 zmmword ptr [rsp], zmm2 + vmovdqa32 zmmword ptr [rsp+0x40], zmm1 + movzx edx, dl + movzx r8d, r8b + cmp rax, 0x08 + jbe 2f +.p2align 5 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 + vpbroadcastd zmm0, dword ptr [rsi] + vpbroadcastd zmm1, dword ptr [rsi+0x04] + vpbroadcastd zmm2, dword ptr [rsi+0x08] + vpbroadcastd zmm3, dword ptr [rsi+0x0C] + vpbroadcastd zmm4, dword ptr [rsi+0x10] + vpbroadcastd zmm5, dword ptr [rsi+0x14] + vpbroadcastd zmm6, dword ptr [rsi+0x18] + vpbroadcastd zmm7, dword ptr [rsi+0x1C] + vpbroadcastd zmm8, dword ptr [rsi+0x20] + vpbroadcastd zmm9, dword ptr [rsi+0x24] + vpbroadcastd zmm10, dword ptr [rsi+0x28] + vpbroadcastd zmm11, dword ptr [rsi+0x2C] + vpbroadcastd zmm12, dword ptr [rsi+0x30] + vpbroadcastd zmm13, dword ptr [rsi+0x34] + vpbroadcastd zmm14, dword ptr [rsi+0x38] + vpbroadcastd zmm15, dword ptr [rsi+0x3C] + vpbroadcastd zmm16, dword ptr [rdi] + vpbroadcastd zmm17, dword ptr [rdi+0x04] + vpbroadcastd zmm18, dword ptr [rdi+0x08] + vpbroadcastd zmm19, dword ptr [rdi+0x0C] + vpbroadcastd zmm20, dword ptr [rdi+0x10] + vpbroadcastd zmm21, dword ptr [rdi+0x14] + vpbroadcastd zmm22, dword ptr [rdi+0x18] + vpbroadcastd zmm23, dword ptr [rdi+0x1C] + vpbroadcastd zmm24, dword ptr [rip+BLAKE3_IV_0] + vpbroadcastd zmm25, dword ptr [rip+BLAKE3_IV_1] + vpbroadcastd zmm26, dword ptr [rip+BLAKE3_IV_2] + vpbroadcastd zmm27, dword ptr [rip+BLAKE3_IV_3] + vmovdqa32 zmm28, zmmword ptr [rsp] + vmovdqa32 zmm29, zmmword ptr [rsp+0x40] + vpbroadcastd zmm30, edx + vpbroadcastd zmm31, r8d + mov cl, 0x07 +4: + vpaddd zmm16, zmm16, zmm0 + vpaddd zmm17, zmm17, zmm2 + vpaddd zmm18, zmm18, zmm4 + vpaddd zmm19, zmm19, zmm6 + vmovdqa32 zmmword ptr [rsp+0x80], zmm0 + vmovdqa32 zmmword ptr [rsp+0xC0], zmm6 + vpaddd zmm16, zmm16, zmm20 + vpaddd zmm17, zmm17, zmm21 + vpaddd zmm18, zmm18, zmm22 + vpaddd zmm19, zmm19, zmm23 + vpxord zmm28, zmm28, zmm16 + vmovdqa32 zmm0, zmm2 + vpxord zmm29, zmm29, zmm17 + vpxord zmm30, zmm30, zmm18 + vpxord zmm31, zmm31, zmm19 + vprord zmm28, zmm28, 0x10 + vprord zmm29, zmm29, 0x10 + vprord zmm30, zmm30, 0x10 + vprord zmm31, zmm31, 0x10 + vpaddd zmm24, zmm24, zmm28 + vmovdqa32 zmm6, zmm4 + vpaddd zmm25, zmm25, zmm29 + vpaddd zmm26, zmm26, zmm30 + vpaddd zmm27, zmm27, zmm31 + vpxord zmm20, zmm20, zmm24 + vpxord zmm21, zmm21, zmm25 + vpxord zmm22, zmm22, zmm26 + vpxord zmm23, zmm23, zmm27 + vprord zmm20, zmm20, 0x0C + vprord zmm21, zmm21, 0x0C + vprord zmm22, zmm22, 0x0C + vprord zmm23, zmm23, 0x0C + vpaddd zmm16, zmm16, zmm1 + vpaddd zmm17, zmm17, zmm3 + vpaddd zmm18, zmm18, zmm5 + vpaddd zmm19, zmm19, zmm7 + vpaddd zmm16, zmm16, zmm20 + vmovdqa32 zmm2, zmm3 + vpaddd zmm17, zmm17, zmm21 + vpaddd zmm18, zmm18, zmm22 + vpaddd zmm19, zmm19, zmm23 + vpxord zmm28, zmm28, zmm16 + vpxord zmm29, zmm29, zmm17 + vpxord zmm30, zmm30, zmm18 + vpxord zmm31, zmm31, zmm19 + vprord zmm28, zmm28, 0x08 + vmovdqa32 zmm4, zmm7 + vprord zmm29, zmm29, 0x08 + vprord zmm30, zmm30, 0x08 + vprord zmm31, zmm31, 0x08 + vpaddd zmm24, zmm24, zmm28 + vpaddd zmm25, zmm25, zmm29 + vpaddd zmm26, zmm26, zmm30 + vpaddd zmm27, zmm27, zmm31 + vpxord zmm20, zmm20, zmm24 + vmovdqa32 zmm3, zmm10 + vpxord zmm21, zmm21, zmm25 + vpxord zmm22, zmm22, zmm26 + vpxord zmm23, zmm23, zmm27 + vprord zmm20, zmm20, 0x07 + vprord zmm21, zmm21, 0x07 + vprord zmm22, zmm22, 0x07 + vprord zmm23, zmm23, 0x07 + vpaddd zmm16, zmm16, zmm8 + vmovdqa32 zmm7, zmm13 + vpaddd zmm17, zmm17, zmm10 + vpaddd zmm18, zmm18, zmm12 + vpaddd zmm19, zmm19, zmm14 + vpaddd zmm16, zmm16, zmm21 + vpaddd zmm17, zmm17, zmm22 + vpaddd zmm18, zmm18, zmm23 + vpaddd zmm19, zmm19, zmm20 + vpxord zmm31, zmm31, zmm16 + vmovdqa32 zmm10, zmm12 + vpxord zmm28, zmm28, zmm17 + vpxord zmm29, zmm29, zmm18 + vpxord zmm30, zmm30, zmm19 + vprord zmm31, zmm31, 0x10 + vprord zmm28, zmm28, 0x10 + vprord zmm29, zmm29, 0x10 + vprord zmm30, zmm30, 0x10 + vpaddd zmm26, zmm26, zmm31 + vmovdqa32 zmm12, zmm9 + vpaddd zmm27, zmm27, zmm28 + vpaddd zmm24, zmm24, zmm29 + vpaddd zmm25, zmm25, zmm30 + vpxord zmm21, zmm21, zmm26 + vpxord zmm22, zmm22, zmm27 + vpxord zmm23, zmm23, zmm24 + vpxord zmm20, zmm20, zmm25 + vprord zmm21, zmm21, 0x0C + vprord zmm22, zmm22, 0x0C + vprord zmm23, zmm23, 0x0C + vprord zmm20, zmm20, 0x0C + vpaddd zmm16, zmm16, zmm9 + vpaddd zmm17, zmm17, zmm11 + vpaddd zmm18, zmm18, zmm13 + vmovdqa32 zmm13, zmm14 + vpaddd zmm19, zmm19, zmm15 + vpaddd zmm16, zmm16, zmm21 + vpaddd zmm17, zmm17, zmm22 + vpaddd zmm18, zmm18, zmm23 + vmovdqa32 zmm9, zmm11 + vpaddd zmm19, zmm19, zmm20 + vpxord zmm31, zmm31, zmm16 + vpxord zmm28, zmm28, zmm17 + vmovdqa32 zmm14, zmm15 + vpxord zmm29, zmm29, zmm18 + vpxord zmm30, zmm30, zmm19 + vprord zmm31, zmm31, 0x08 + vmovdqa32 zmm11, zmm5 + vprord zmm28, zmm28, 0x08 + vprord zmm29, zmm29, 0x08 + vprord zmm30, zmm30, 0x08 + vmovdqa32 zmm15, zmm8 + vpaddd zmm26, zmm26, zmm31 + vpaddd zmm27, zmm27, zmm28 + vpaddd zmm24, zmm24, zmm29 + vpaddd zmm25, zmm25, zmm30 + vmovdqa32 zmm8, zmm1 + vpxord zmm21, zmm21, zmm26 + vpxord zmm22, zmm22, zmm27 + vpxord zmm23, zmm23, zmm24 + vpxord zmm20, zmm20, zmm25 + vmovdqa32 zmm5, zmmword ptr [rsp+0x80] + vprord zmm21, zmm21, 0x07 + vprord zmm22, zmm22, 0x07 + vprord zmm23, zmm23, 0x07 + vprord zmm20, zmm20, 0x07 + vmovdqa32 zmm1, zmmword ptr [rsp+0xC0] + dec cl + jnz 4b + vpxord zmm16, zmm16, zmm24 + vpxord zmm17, zmm17, zmm25 + vpxord zmm18, zmm18, zmm26 + vpxord zmm19, zmm19, zmm27 + vpxord zmm20, zmm20, zmm28 + vpxord zmm21, zmm21, zmm29 + vpxord zmm22, zmm22, zmm30 + vpxord zmm23, zmm23, zmm31 + vpunpckldq zmm0, zmm16, zmm18 + vpunpckhdq zmm1, zmm16, zmm18 + vpunpckldq zmm2, zmm17, zmm19 + vpunpckhdq zmm3, zmm17, zmm19 + vpunpckldq zmm4, zmm20, zmm22 + vpunpckhdq zmm5, zmm20, zmm22 + vpunpckldq zmm6, zmm21, zmm23 + vpunpckhdq zmm7, zmm21, zmm23 + vpunpckldq zmm16, zmm0, zmm2 + vpunpckhdq zmm17, zmm0, zmm2 + vpunpckldq zmm18, zmm1, zmm3 + vpunpckhdq zmm19, zmm1, zmm3 + vpunpckldq zmm20, zmm4, zmm6 + vpunpckhdq zmm21, zmm4, zmm6 + vpunpckldq zmm22, zmm5, zmm7 + vpunpckhdq zmm23, zmm5, zmm7 + vpunpckldq zmm0, zmm24, zmm26 + vpunpckhdq zmm1, zmm24, zmm26 + vpunpckldq zmm2, zmm25, zmm27 + vpunpckhdq zmm3, zmm25, zmm27 + vpunpckldq zmm4, zmm28, zmm30 + vpunpckhdq zmm5, zmm28, zmm30 + vpunpckldq zmm6, zmm29, zmm31 + vpunpckhdq zmm7, zmm29, zmm31 + vpunpckldq zmm24, zmm0, zmm2 + vpunpckhdq zmm25, zmm0, zmm2 + vpunpckldq zmm26, zmm1, zmm3 + vpunpckhdq zmm27, zmm1, zmm3 + vpunpckldq zmm28, zmm4, zmm6 + vpunpckhdq zmm29, zmm4, zmm6 + vpunpckldq zmm30, zmm5, zmm7 + vpunpckhdq zmm31, zmm5, zmm7 + vmovdqa32 zmm8, zmmword ptr [rip+INDEX0] + vmovdqa32 zmm9, zmmword ptr [rip+INDEX1] + vmovdqa32 zmm0, zmm16 + vpermt2d zmm0, zmm8, zmm20 + vpermt2d zmm16, zmm9, zmm20 + vmovdqa32 zmm1, zmm24 + vpermt2d zmm1, zmm8, zmm28 + vpermt2d zmm24, zmm9, zmm28 + vmovdqa32 zmm2, zmm17 + vpermt2d zmm2, zmm8, zmm21 + vpermt2d zmm17, zmm9, zmm21 + vmovdqa32 zmm3, zmm25 + vpermt2d zmm3, zmm8, zmm29 + vpermt2d zmm25, zmm9, zmm29 + vmovdqa32 zmm4, zmm18 + vpermt2d zmm4, zmm8, zmm22 + vpermt2d zmm18, zmm9, zmm22 + vmovdqa32 zmm5, zmm26 + vpermt2d zmm5, zmm8, zmm30 + vpermt2d zmm26, zmm9, zmm30 + vmovdqa32 zmm6, zmm19 + vpermt2d zmm6, zmm8, zmm23 + vpermt2d zmm19, zmm9, zmm23 + vmovdqa32 zmm7, zmm27 + vpermt2d zmm7, zmm8, zmm31 + vpermt2d zmm27, zmm9, zmm31 + vbroadcasti64x4 zmm8, ymmword ptr [rdi] + vpxord zmm1, zmm1, zmm8 + vpxord zmm3, zmm3, zmm8 + vpxord zmm5, zmm5, zmm8 + vpxord zmm7, zmm7, zmm8 + vpxord zmm24, zmm24, zmm8 + vpxord zmm25, zmm25, zmm8 + vpxord zmm26, zmm26, zmm8 + vpxord zmm27, zmm27, zmm8 + vextracti64x4 ymmword ptr [r9], zmm0, 0x00 + vextracti64x4 ymmword ptr [r9+0x20], zmm1, 0x00 + vextracti64x4 ymmword ptr [r9+0x40], zmm2, 0x00 + vextracti64x4 ymmword ptr [r9+0x60], zmm3, 0x00 + vextracti64x4 ymmword ptr [r9+0x80], zmm4, 0x00 + vextracti64x4 ymmword ptr [r9+0xA0], zmm5, 0x00 + vextracti64x4 ymmword ptr [r9+0xC0], zmm6, 0x00 + vextracti64x4 ymmword ptr [r9+0xE0], zmm7, 0x00 + vextracti64x4 ymmword ptr [r9+0x100], zmm16, 0x00 + vextracti64x4 ymmword ptr [r9+0x120], zmm24, 0x00 + vextracti64x4 ymmword ptr [r9+0x140], zmm17, 0x00 + vextracti64x4 ymmword ptr [r9+0x160], zmm25, 0x00 + vextracti64x4 ymmword ptr [r9+0x180], zmm18, 0x00 + vextracti64x4 ymmword ptr [r9+0x1A0], zmm26, 0x00 + vextracti64x4 ymmword ptr [r9+0x1C0], zmm19, 0x00 + vextracti64x4 ymmword ptr [r9+0x1E0], zmm27, 0x00 + vextracti64x4 ymmword ptr [r9+0x200], zmm0, 0x01 + vextracti64x4 ymmword ptr [r9+0x220], zmm1, 0x01 + cmp rax, 0x0A + jb 9f + vextracti64x4 ymmword ptr [r9+0x240], zmm2, 0x01 + vextracti64x4 ymmword ptr [r9+0x260], zmm3, 0x01 + cmp rax, 0x0B + jb 9f + vextracti64x4 ymmword ptr [r9+0x280], zmm4, 0x01 + vextracti64x4 ymmword ptr [r9+0x2A0], zmm5, 0x01 + cmp rax, 0x0C + jb 9f + vextracti64x4 ymmword ptr [r9+0x2C0], zmm6, 0x01 + vextracti64x4 ymmword ptr [r9+0x2E0], zmm7, 0x01 + cmp rax, 0x0D + jb 9f + vextracti64x4 ymmword ptr [r9+0x300], zmm16, 0x01 + vextracti64x4 ymmword ptr [r9+0x320], zmm24, 0x01 + cmp rax, 0x0E + jb 9f + vextracti64x4 ymmword ptr [r9+0x340], zmm17, 0x01 + vextracti64x4 ymmword ptr [r9+0x360], zmm25, 0x01 + cmp rax, 0x0F + jb 9f + vextracti64x4 ymmword ptr [r9+0x380], zmm18, 0x01 + vextracti64x4 ymmword ptr [r9+0x3A0], zmm26, 0x01 + cmp rax, 0x10 + jb 9f + vextracti64x4 ymmword ptr [r9+0x3C0], zmm19, 0x01 + vextracti64x4 ymmword ptr [r9+0x3E0], zmm27, 0x01 + vmovdqa32 zmm0, zmmword ptr [rsp] + vmovdqa32 zmm1, zmmword ptr [rsp+0x40] + vpaddd zmm2, zmm0, dword ptr [rip+ADD16] {1to16} + vpcmpud k1, zmm2, zmm0, 0x01 + vpaddd zmm1 {k1}, zmm1, dword ptr [rip+ADD1] {1to16} + vmovdqa32 zmmword ptr [rsp], zmm2 + vmovdqa32 zmmword ptr [rsp+0x40], zmm1 + add r9, 0x400 + cmp rax, 0x18 + lea rax, qword ptr [rax-0x10] + jnbe 3b + test al, al + jnz 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 + vzeroupper + mov rsp, rbp + pop rbp + ret 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 + cmp al, 0x04 + jbe 2f + vpbroadcastd ymm16, dword ptr [rsi] + vpbroadcastd ymm17, dword ptr [rsi+0x04] + vpbroadcastd ymm18, dword ptr [rsi+0x08] + vpbroadcastd ymm19, dword ptr [rsi+0x0C] + 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+0x04] + vpbroadcastd ymm2, dword ptr [rdi+0x08] + vpbroadcastd ymm3, dword ptr [rdi+0x0C] + 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 [rip+BLAKE3_IV_0] + vpbroadcastd ymm9, dword ptr [rip+BLAKE3_IV_1] + vpbroadcastd ymm10, dword ptr [rip+BLAKE3_IV_2] + vpbroadcastd ymm11, dword ptr [rip+BLAKE3_IV_3] + vmovdqa ymm12, ymmword ptr [rsp] + vmovdqa ymm13, ymmword ptr [rsp+0x40] + vpbroadcastd ymm14, edx + vpbroadcastd ymm15, r8d + mov cl, 0x07 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 + vpaddd ymm0, ymm0, ymm16 + vpaddd ymm1, ymm1, ymm18 + vpaddd ymm2, ymm2, ymm20 + vpaddd ymm3, ymm3, ymm22 + vmovdqa32 ymmword ptr [rsp+0x80], ymm16 + vmovdqa32 ymmword ptr [rsp+0xC0], ymm22 + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vpxord ymm12, ymm12, ymm0 + vmovdqa32 ymm16, ymm18 + 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 + vmovdqa32 ymm22, ymm20 + 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, 0x0C + vprord ymm5, ymm5, 0x0C + vprord ymm6, ymm6, 0x0C + vprord ymm7, ymm7, 0x0C + vpaddd ymm0, ymm0, ymm17 + vpaddd ymm1, ymm1, ymm19 + vpaddd ymm2, ymm2, ymm21 + vpaddd ymm3, ymm3, ymm23 + vpaddd ymm0, ymm0, ymm4 + vmovdqa32 ymm18, ymm19 + 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, 0x08 + vmovdqa32 ymm20, ymm23 + vprord ymm13, ymm13, 0x08 + vprord ymm14, ymm14, 0x08 + vprord ymm15, ymm15, 0x08 + vpaddd ymm8, ymm8, ymm12 + vpaddd ymm9, ymm9, ymm13 + vpaddd ymm10, ymm10, ymm14 + vpaddd ymm11, ymm11, ymm15 + vpxord ymm4, ymm4, ymm8 + vmovdqa32 ymm19, ymm26 + vpxord ymm5, ymm5, ymm9 + vpxord ymm6, ymm6, ymm10 + vpxord ymm7, ymm7, ymm11 + vprord ymm4, ymm4, 0x07 + vprord ymm5, ymm5, 0x07 + vprord ymm6, ymm6, 0x07 + vprord ymm7, ymm7, 0x07 + vpaddd ymm0, ymm0, ymm24 + vmovdqa32 ymm23, ymm29 + 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 + vmovdqa32 ymm26, ymm28 + 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 + vmovdqa32 ymm28, ymm25 + 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, 0x0C + vprord ymm6, ymm6, 0x0C + vprord ymm7, ymm7, 0x0C + vprord ymm4, ymm4, 0x0C + vpaddd ymm0, ymm0, ymm25 + vpaddd ymm1, ymm1, ymm27 + vpaddd ymm2, ymm2, ymm29 + vmovdqa32 ymm29, ymm30 + vpaddd ymm3, ymm3, ymm31 + vpaddd ymm0, ymm0, ymm5 + vpaddd ymm1, ymm1, ymm6 + vpaddd ymm2, ymm2, ymm7 + vmovdqa32 ymm25, ymm27 + vpaddd ymm3, ymm3, ymm4 + vpxord ymm15, ymm15, ymm0 + vpxord ymm12, ymm12, ymm1 + vmovdqa32 ymm30, ymm31 + vpxord ymm13, ymm13, ymm2 + vpxord ymm14, ymm14, ymm3 + vprord ymm15, ymm15, 0x08 + vmovdqa32 ymm27, ymm21 + vprord ymm12, ymm12, 0x08 + vprord ymm13, ymm13, 0x08 + vprord ymm14, ymm14, 0x08 + vmovdqa32 ymm31, ymm24 + vpaddd ymm10, ymm10, ymm15 + vpaddd ymm11, ymm11, ymm12 + vpaddd ymm8, ymm8, ymm13 + vpaddd ymm9, ymm9, ymm14 + vmovdqa32 ymm24, ymm17 + vpxord ymm5, ymm5, ymm10 + vpxord ymm6, ymm6, ymm11 + vpxord ymm7, ymm7, ymm8 + vpxord ymm4, ymm4, ymm9 + vmovdqa32 ymm21, ymmword ptr [rsp+0x80] + vprord ymm5, ymm5, 0x07 + vprord ymm6, ymm6, 0x07 + vprord ymm7, ymm7, 0x07 + vprord ymm4, ymm4, 0x07 + vmovdqa32 ymm17, ymmword ptr [rsp+0xC0] + dec cl + jnz 3b + vpxord ymm0, ymm0, ymm8 + vpxord ymm8, ymm8, dword ptr [rdi] {1to8} + vpxord ymm1, ymm1, ymm9 + vpxord ymm9, ymm9, dword ptr [rdi+0x04] {1to8} + vpxord ymm2, ymm2, ymm10 + vpxord ymm10, ymm10, dword ptr [rdi+0x08] {1to8} + vpxord ymm3, ymm3, ymm11 + vpxord ymm11, ymm11, dword ptr [rdi+0x0C] {1to8} + vpxord ymm4, ymm4, ymm12 + vpxord ymm12, ymm12, dword ptr [rdi+0x10] {1to8} + vpxord ymm5, ymm5, ymm13 + vpxord ymm13, ymm13, dword ptr [rdi+0x14] {1to8} + vpxord ymm6, ymm6, ymm14 + vpxord ymm14, ymm14, dword ptr [rdi+0x18] {1to8} + vpxord ymm7, ymm7, ymm15 + 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, 0x00 + vshufi32x4 ymm17, ymm8, ymm12, 0x00 + vshufi32x4 ymm18, ymm1, ymm5, 0x00 + vshufi32x4 ymm19, ymm9, ymm13, 0x00 + vshufi32x4 ymm20, ymm2, ymm6, 0x00 + vshufi32x4 ymm21, ymm10, ymm14, 0x00 + vshufi32x4 ymm22, ymm3, ymm7, 0x00 + vshufi32x4 ymm23, ymm11, ymm15, 0x00 + vshufi32x4 ymm24, ymm0, ymm4, 0x03 + vshufi32x4 ymm25, ymm8, ymm12, 0x03 + vshufi32x4 ymm26, ymm1, ymm5, 0x03 + vshufi32x4 ymm27, ymm9, ymm13, 0x03 + vshufi32x4 ymm28, ymm2, ymm6, 0x03 + vshufi32x4 ymm29, ymm10, ymm14, 0x03 + vshufi32x4 ymm30, ymm3, ymm7, 0x03 + vshufi32x4 ymm31, ymm11, ymm15, 0x03 + 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 + cmp al, 0x06 + jb 3f + vmovdqu32 ymmword ptr [r9+0x140], ymm26 + vmovdqu32 ymmword ptr [r9+0x160], ymm27 + cmp al, 0x07 + jb 3f + vmovdqu32 ymmword ptr [r9+0x180], ymm28 + vmovdqu32 ymmword ptr [r9+0x1A0], ymm29 + cmp al, 0x08 + jb 3f + vmovdqu32 ymmword ptr [r9+0x1C0], ymm30 + vmovdqu32 ymmword ptr [r9+0x1E0], ymm31 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 + jmp 9b 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 + mov ecx, 0xAAAA + kmovw k1, ecx + mov ecx, 0x8888 + kmovw k2, ecx + mov ecx, 0x55 + kmovw k3, ecx + mov ecx, r8d + shl rcx, 0x20 + or rcx, rdx + cmp al, 0x02 + jbe 2f + vbroadcasti32x4 zmm0, xmmword ptr [rdi] + vbroadcasti32x4 zmm1, xmmword ptr [rdi+0x10] + vbroadcasti32x4 zmm2, xmmword ptr [rip+BLAKE3_IV] + vmovdqa32 xmm4, xmmword ptr [rsp] + vmovdqa32 xmm5, xmmword ptr [rsp+0x40] + vpbroadcastq zmm3, rcx + vpunpckldq xmm6, xmm4, xmm5 + vpunpckhdq xmm5, xmm4, xmm5 + vinserti64x4 zmm6, zmm6, ymm5, 0x01 + vpermq zmm3 {k3}, zmm6, 0xDC + 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 dl, 0x07 +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, 0x0C + vpaddd zmm0, zmm0, zmm5 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 0x08 + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 0x07 + 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, 0x0C + vpaddd zmm0, zmm0, zmm7 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 0x08 + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 0x07 + vpshufd zmm0, zmm0, 0x39 + vpshufd zmm3, zmm3, 0x4E + vpshufd zmm2, zmm2, 0x93 + dec dl + jz 3f + vshufps zmm8, zmm4, zmm5, 0xD6 + vpshufd zmm9, zmm4, 0x0F + vpshufd zmm4, zmm8, 0x39 + vshufps zmm8, zmm6, zmm7, 0xFA + vpblendmd zmm9 {k1}, zmm9, zmm8 + vpunpcklqdq zmm8, zmm7, zmm5 + vpblendmd zmm8 {k2}, 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: - 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 + vpxord zmm0, zmm0, zmm2 + vpxord zmm1, zmm1, zmm3 + vbroadcasti32x4 zmm4, xmmword ptr [rdi] + vbroadcasti32x4 zmm5, xmmword ptr [rdi+0x10] + vpxord zmm2, zmm2, zmm4 + vpxord zmm3, zmm3, zmm5 + 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, 0x01 + vextracti128 xmmword ptr [r9+0x50], ymm1, 0x01 + vextracti128 xmmword ptr [r9+0x60], ymm2, 0x01 + vextracti128 xmmword ptr [r9+0x70], ymm3, 0x01 + vextracti32x4 xmmword ptr [r9+0x80], zmm0, 0x02 + vextracti32x4 xmmword ptr [r9+0x90], zmm1, 0x02 + vextracti32x4 xmmword ptr [r9+0xA0], zmm2, 0x02 + vextracti32x4 xmmword ptr [r9+0xB0], zmm3, 0x02 + cmp al, 0x04 + jb 3f + vextracti32x4 xmmword ptr [r9+0xC0], zmm0, 0x03 + vextracti32x4 xmmword ptr [r9+0xD0], zmm1, 0x03 + vextracti32x4 xmmword ptr [r9+0xE0], zmm2, 0x03 + vextracti32x4 xmmword ptr [r9+0xF0], zmm3, 0x03 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 + jmp 9b 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 + test al, al + jz 9b + vbroadcasti32x4 ymm0, xmmword ptr [rdi] + vbroadcasti32x4 ymm1, xmmword ptr [rdi+0x10] + vbroadcasti32x4 ymm2, xmmword ptr [rip+BLAKE3_IV] + vmovdqa xmm4, xmmword ptr [rsp] + vmovdqa xmm5, xmmword ptr [rsp+0x40] + vpbroadcastq ymm3, rcx + vpunpckldq xmm6, xmm4, xmm5 + vpunpckhdq xmm5, xmm4, xmm5 + vinserti128 ymm6, ymm6, xmm5, 0x01 + vpermq ymm3 {k3}, ymm6, 0xDC + vbroadcasti32x4 ymm8, xmmword ptr [rsi] + vbroadcasti32x4 ymm9, xmmword ptr [rsi+0x10] + vshufps ymm4, ymm8, ymm9, 0x88 + vshufps ymm5, ymm8, ymm9, 0xDD + vbroadcasti32x4 ymm8, xmmword ptr [rsi+0x20] + vbroadcasti32x4 ymm9, xmmword ptr [rsi+0x30] + vshufps ymm6, ymm8, ymm9, 0x88 + vshufps ymm7, ymm8, ymm9, 0xDD + vpshufd ymm6, ymm6, 0x93 + vpshufd ymm7, ymm7, 0x93 + mov dl, 0x07 +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, 0x0C + vpaddd ymm0, ymm0, ymm5 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 0x08 + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 0x07 + 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, 0x0C + vpaddd ymm0, ymm0, ymm7 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 0x08 + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 0x07 + vpshufd ymm0, ymm0, 0x39 + vpshufd ymm3, ymm3, 0x4E + vpshufd ymm2, ymm2, 0x93 + dec dl + jz 3f + vshufps ymm8, ymm4, ymm5, 0xD6 + vpshufd ymm9, ymm4, 0x0F + 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: - 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 + vpxord ymm0, ymm0, ymm2 + vpxord ymm1, ymm1, ymm3 + vbroadcasti128 ymm4, xmmword ptr [rdi] + vbroadcasti128 ymm5, xmmword ptr [rdi+0x10] + vpxord ymm2, ymm2, ymm4 + vpxord ymm3, ymm3, ymm5 + vmovdqu xmmword ptr [r9], xmm0 + vmovdqu xmmword ptr [r9+0x10], xmm1 + vmovdqu xmmword ptr [r9+0x20], xmm2 + vmovdqu xmmword ptr [r9+0x30], xmm3 + cmp al, 0x02 + jb 3f + vextracti128 xmmword ptr [r9+0x40], ymm0, 0x01 + vextracti128 xmmword ptr [r9+0x50], ymm1, 0x01 + vextracti128 xmmword ptr [r9+0x60], ymm2, 0x01 + vextracti128 xmmword ptr [r9+0x70], ymm3, 0x01 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 - + jmp 9b #ifdef __APPLE__ .static_data @@ -4798,21 +2137,15 @@ _blake3_xof_many_avx512: .section .rodata #endif .p2align 6 +ADD0: + .long 0, 1, 2, 3, 4, 5, 6, 7 + .long 8, 9, 10, 11, 12, 13, 14, 15 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 @@ -4822,3 +2155,8 @@ BLAKE3_IV_2: .long 0x3C6EF372 BLAKE3_IV_3: .long 0xA54FF53A +ADD1: .long 1 +ADD16: .long 16 +BLAKE3_BLOCK_LEN: + .long 64 + diff --git a/c/blake3_avx512_x86-64_windows_gnu.S b/c/blake3_avx512_x86-64_windows_gnu.S index ba4fc5fa9..089ba8366 100644 --- a/c/blake3_avx512_x86-64_windows_gnu.S +++ b/c/blake3_avx512_x86-64_windows_gnu.S @@ -6,2395 +6,1087 @@ .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 .section .text .p2align 6 _blake3_hash_many_avx512: blake3_hash_many_avx512: - push r15 - push r14 - push r13 - push r12 - push rdi - push rsi - push rbx - push rbp - mov rbp, rsp - sub rsp, 304 - and rsp, 0xFFFFFFFFFFFFFFC0 - vmovdqa xmmword ptr [rsp+0x90], xmm6 - vmovdqa xmmword ptr [rsp+0xA0], xmm7 - vmovdqa xmmword ptr [rsp+0xB0], xmm8 - vmovdqa xmmword ptr [rsp+0xC0], xmm9 - vmovdqa xmmword ptr [rsp+0xD0], xmm10 - vmovdqa xmmword ptr [rsp+0xE0], xmm11 - vmovdqa xmmword ptr [rsp+0xF0], xmm12 - vmovdqa xmmword ptr [rsp+0x100], xmm13 - vmovdqa xmmword ptr [rsp+0x110], xmm14 - vmovdqa xmmword ptr [rsp+0x120], xmm15 - mov rdi, rcx - mov rsi, rdx - mov rdx, r8 - mov rcx, r9 - mov r8, qword ptr [rbp+0x68] - movzx r9, byte ptr [rbp+0x70] - 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 + push rbx + push rbp + push rsi + push rdi + push r12 + push r13 + push r14 + push r15 + mov rbp, rsp + sub rsp, 0x1E8 + movdqa xmmword ptr [rbp-0xA8], xmm6 + movdqa xmmword ptr [rbp-0x98], xmm7 + movdqa xmmword ptr [rbp-0x88], xmm8 + movdqa xmmword ptr [rbp-0x78], xmm9 + movdqa xmmword ptr [rbp-0x68], xmm10 + movdqa xmmword ptr [rbp-0x58], xmm11 + movdqa xmmword ptr [rbp-0x48], xmm12 + movdqa xmmword ptr [rbp-0x38], xmm13 + movdqa xmmword ptr [rbp-0x28], xmm14 + movdqa xmmword ptr [rbp-0x18], xmm15 + and rsp, 0xFFFFFFFFFFFFFFC0 + mov rax, qword ptr [rbp+0x68] + movzx ebx, byte ptr [rbp+0x70] + neg ebx + kmovw k1, ebx + vpbroadcastd ymm0, eax + shr rax, 0x20 + vpbroadcastd ymm1, eax + vmovdqa32 ymm2 {k1} {z}, ymmword ptr [rip+ADD0] + vmovdqa32 ymm3 {k1} {z}, ymmword ptr [rip+ADD0+32] + vpaddd ymm2, ymm0, ymm2 vmovdqa ymmword ptr [rsp], ymm2 + vpaddd ymm3, ymm0, ymm3 vmovdqa ymmword ptr [rsp+0x20], ymm3 - vmovdqa ymmword ptr [rsp+0x40], ymm4 - vmovdqa ymmword ptr [rsp+0x60], 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+0x78] - movzx ebx, byte ptr [rbp+0x80] - or eax, ebx - xor edx, edx + vpcmpud k2 {k1}, ymm2, ymm0, 0x01 + vpcmpud k3 {k1}, ymm3, ymm0, 0x01 + vmovdqa ymm2, ymm1 + vpaddd ymm2 {k2}, ymm2, dword ptr [rip+ADD1] {1to8} + vmovdqa ymmword ptr [rsp+0x40], ymm2 + vpaddd ymm1 {k3}, ymm1, dword ptr [rip+ADD1] {1to8} + vmovdqa ymmword ptr [rsp+0x60], ymm1 + shl r8, 0x06 + mov qword ptr [rsp+0x100], r8 + cmp rdx, 0x10 + jb 5f .p2align 5 -9: - movzx ebx, byte ptr [rbp+0x88] - 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+0x78] - jne 9b - mov rbx, qword ptr [rbp+0x90] - 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+0x90], rbx - sub rsi, 16 - cmp rsi, 16 - jnc 2b - test rsi, rsi - jne 3f +2: + vpbroadcastd zmm0, dword ptr [r9] + vpbroadcastd zmm1, dword ptr [r9+0x04] + vpbroadcastd zmm2, dword ptr [r9+0x08] + vpbroadcastd zmm3, dword ptr [r9+0x0C] + vpbroadcastd zmm4, dword ptr [r9+0x10] + vpbroadcastd zmm5, dword ptr [r9+0x14] + vpbroadcastd zmm6, dword ptr [r9+0x18] + vpbroadcastd zmm7, dword ptr [r9+0x1C] + movzx eax, byte ptr [rbp+0x78] + movzx ebx, byte ptr [rbp+0x80] + or eax, ebx + xor ebx, ebx +3: + movzx esi, byte ptr [rbp+0x88] + or esi, eax + add rbx, 0x40 + cmp rbx, qword ptr [rsp+0x100] + cmovz eax, esi + mov dword ptr [rsp+0x80], eax + mov rax, qword ptr [rcx] + mov rsi, qword ptr [rcx+0x08] + mov rdi, qword ptr [rcx+0x10] + mov r8, qword ptr [rcx+0x18] + mov r10, qword ptr [rcx+0x40] + mov r11, qword ptr [rcx+0x48] + mov r12, qword ptr [rcx+0x50] + mov r13, qword ptr [rcx+0x58] + vmovdqu32 ymm8, ymmword ptr [rax+rbx*1-0x40] + vinserti64x4 zmm8, zmm8, ymmword ptr [r10+rbx*1-0x40], 0x01 + vmovdqu32 ymm9, ymmword ptr [rsi+rbx*1-0x40] + vinserti64x4 zmm9, zmm9, ymmword ptr [r11+rbx*1-0x40], 0x01 + vpunpckldq zmm10, zmm8, zmm9 + vpunpckhdq zmm11, zmm8, zmm9 + vmovdqu32 ymm8, ymmword ptr [rdi+rbx*1-0x40] + vinserti64x4 zmm8, zmm8, ymmword ptr [r12+rbx*1-0x40], 0x01 + vmovdqu32 ymm9, ymmword ptr [r8+rbx*1-0x40] + vinserti64x4 zmm9, zmm9, ymmword ptr [r13+rbx*1-0x40], 0x01 + vpunpckldq zmm12, zmm8, zmm9 + vpunpckhdq zmm13, zmm8, zmm9 + mov rax, qword ptr [rcx+0x20] + mov rsi, qword ptr [rcx+0x28] + mov rdi, qword ptr [rcx+0x30] + mov r8, qword ptr [rcx+0x38] + mov r10, qword ptr [rcx+0x60] + mov r11, qword ptr [rcx+0x68] + mov r12, qword ptr [rcx+0x70] + mov r13, qword ptr [rcx+0x78] + vmovdqu32 ymm8, ymmword ptr [rax+rbx*1-0x40] + vinserti64x4 zmm8, zmm8, ymmword ptr [r10+rbx*1-0x40], 0x01 + vmovdqu32 ymm9, ymmword ptr [rsi+rbx*1-0x40] + vinserti64x4 zmm9, zmm9, ymmword ptr [r11+rbx*1-0x40], 0x01 + vpunpckldq zmm14, zmm8, zmm9 + vpunpckhdq zmm15, zmm8, zmm9 + vmovdqu32 ymm8, ymmword ptr [rdi+rbx*1-0x40] + vinserti64x4 zmm8, zmm8, ymmword ptr [r12+rbx*1-0x40], 0x01 + vmovdqu32 ymm9, ymmword ptr [r8+rbx*1-0x40] + vinserti64x4 zmm9, zmm9, ymmword ptr [r13+rbx*1-0x40], 0x01 + vpunpckldq zmm16, zmm8, zmm9 + vpunpckhdq zmm17, zmm8, zmm9 + vmovdqa32 zmm8, zmmword ptr [0x0000000000000AC0] + vmovdqa32 zmm9, zmmword ptr [0x0000000000000B00] + vpunpcklqdq zmm18, zmm10, zmm12 + vpunpcklqdq zmm20, zmm14, zmm16 + vmovdqa32 zmm19, zmm18 + vpermt2d zmm18, zmm8, zmm20 + vpermt2d zmm19, zmm9, zmm20 + vpunpckhqdq zmm20, zmm10, zmm12 + vpunpckhqdq zmm22, zmm14, zmm16 + vmovdqa32 zmm21, zmm20 + vpermt2d zmm20, zmm8, zmm22 + vpermt2d zmm21, zmm9, zmm22 + vpunpcklqdq zmm10, zmm11, zmm13 + vpunpcklqdq zmm14, zmm15, zmm17 + vmovdqa32 zmm12, zmm10 + vpermt2d zmm10, zmm8, zmm14 + vpermt2d zmm12, zmm9, zmm14 + vpunpckhqdq zmm14, zmm11, zmm13 + vpunpckhqdq zmm22, zmm15, zmm17 + vmovdqa32 zmm16, zmm14 + vpermt2d zmm14, zmm8, zmm22 + vpermt2d zmm16, zmm9, zmm22 + mov rax, qword ptr [rcx] + mov rsi, qword ptr [rcx+0x08] + mov rdi, qword ptr [rcx+0x10] + mov r8, qword ptr [rcx+0x18] + mov r10, qword ptr [rcx+0x40] + mov r11, qword ptr [rcx+0x48] + mov r12, qword ptr [rcx+0x50] + mov r13, qword ptr [rcx+0x58] + vmovdqu32 ymm11, ymmword ptr [rax+rbx*1-0x20] + vinserti64x4 zmm11, zmm11, ymmword ptr [r10+rbx*1-0x20], 0x01 + vmovdqu32 ymm13, ymmword ptr [rsi+rbx*1-0x20] + vinserti64x4 zmm13, zmm13, ymmword ptr [r11+rbx*1-0x20], 0x01 + vpunpckldq zmm15, zmm11, zmm13 + vpunpckhdq zmm17, zmm11, zmm13 + vmovdqu32 ymm11, ymmword ptr [rdi+rbx*1-0x20] + vinserti64x4 zmm11, zmm11, ymmword ptr [r12+rbx*1-0x20], 0x01 + vmovdqu32 ymm13, ymmword ptr [r8+rbx*1-0x20] + vinserti64x4 zmm13, zmm13, ymmword ptr [r13+rbx*1-0x20], 0x01 + vpunpckldq zmm22, zmm11, zmm13 + vpunpckhdq zmm23, zmm11, zmm13 + prefetcht0 byte ptr [rax+rbx*1+0x80] + prefetcht0 byte ptr [rsi+rbx*1+0x80] + prefetcht0 byte ptr [rdi+rbx*1+0x80] + prefetcht0 byte ptr [r8+rbx*1+0x80] + prefetcht0 byte ptr [r10+rbx*1+0x80] + prefetcht0 byte ptr [r11+rbx*1+0x80] + prefetcht0 byte ptr [r12+rbx*1+0x80] + prefetcht0 byte ptr [r13+rbx*1+0x80] + mov rax, qword ptr [rcx+0x20] + mov rsi, qword ptr [rcx+0x28] + mov rdi, qword ptr [rcx+0x30] + mov r8, qword ptr [rcx+0x38] + mov r10, qword ptr [rcx+0x60] + mov r11, qword ptr [rcx+0x68] + mov r12, qword ptr [rcx+0x70] + mov r13, qword ptr [rcx+0x78] + vmovdqu32 ymm11, ymmword ptr [rax+rbx*1-0x20] + vinserti64x4 zmm11, zmm11, ymmword ptr [r10+rbx*1-0x20], 0x01 + vmovdqu32 ymm13, ymmword ptr [rsi+rbx*1-0x20] + vinserti64x4 zmm13, zmm13, ymmword ptr [r11+rbx*1-0x20], 0x01 + vpunpckldq zmm24, zmm11, zmm13 + vpunpckhdq zmm25, zmm11, zmm13 + vmovdqu32 ymm11, ymmword ptr [rdi+rbx*1-0x20] + vinserti64x4 zmm11, zmm11, ymmword ptr [r12+rbx*1-0x20], 0x01 + vmovdqu32 ymm13, ymmword ptr [r8+rbx*1-0x20] + vinserti64x4 zmm13, zmm13, ymmword ptr [r13+rbx*1-0x20], 0x01 + vpunpckldq zmm26, zmm11, zmm13 + vpunpckhdq zmm27, zmm11, zmm13 + prefetcht0 byte ptr [rax+rbx*1+0x80] + prefetcht0 byte ptr [rsi+rbx*1+0x80] + prefetcht0 byte ptr [rdi+rbx*1+0x80] + prefetcht0 byte ptr [r8+rbx*1+0x80] + prefetcht0 byte ptr [r10+rbx*1+0x80] + prefetcht0 byte ptr [r11+rbx*1+0x80] + prefetcht0 byte ptr [r12+rbx*1+0x80] + prefetcht0 byte ptr [r13+rbx*1+0x80] + vpunpcklqdq zmm11, zmm15, zmm22 + vpunpcklqdq zmm28, zmm24, zmm26 + vmovdqa32 zmm13, zmm11 + vpermt2d zmm11, zmm8, zmm28 + vpermt2d zmm13, zmm9, zmm28 + vpunpckhqdq zmm28, zmm15, zmm22 + vpunpckhqdq zmm30, zmm24, zmm26 + vmovdqa32 zmm29, zmm28 + vpermt2d zmm28, zmm8, zmm30 + vpermt2d zmm29, zmm9, zmm30 + vpunpcklqdq zmm15, zmm17, zmm23 + vpunpcklqdq zmm24, zmm25, zmm27 + vmovdqa32 zmm22, zmm15 + vpermt2d zmm15, zmm8, zmm24 + vpermt2d zmm22, zmm9, zmm24 + vpunpckhqdq zmm24, zmm17, zmm23 + vpunpckhqdq zmm26, zmm25, zmm27 + vpermi2d zmm8, zmm24, zmm26 + vpermi2d zmm9, zmm24, zmm26 + vpbroadcastd zmm17, dword ptr [0x0000000000000B80] + vpbroadcastd zmm23, dword ptr [0x0000000000000B84] + vpbroadcastd zmm24, dword ptr [0x0000000000000B88] + vpbroadcastd zmm25, dword ptr [0x0000000000000B8C] + vmovdqa32 zmm26, zmmword ptr [rsp] + vmovdqa32 zmm27, zmmword ptr [rsp+0x40] + vpbroadcastd zmm30, dword ptr [0x0000000000000B98] + vpbroadcastd zmm31, dword ptr [rsp+0x80] + mov al, 0x07 4: + vpaddd zmm0, zmm0, zmm18 + vpaddd zmm1, zmm1, zmm10 + vpaddd zmm2, zmm2, zmm19 + vpaddd zmm3, zmm3, zmm12 + vmovdqa32 zmmword ptr [rsp+0x80], zmm18 + vmovdqa32 zmmword ptr [rsp+0xC0], zmm12 + vpaddd zmm0, zmm0, zmm4 + vpaddd zmm1, zmm1, zmm5 + vpaddd zmm2, zmm2, zmm6 + vpaddd zmm3, zmm3, zmm7 + vpxord zmm26, zmm26, zmm0 + vmovdqa32 zmm18, zmm10 + vpxord zmm27, zmm27, zmm1 + vpxord zmm30, zmm30, zmm2 + vpxord zmm31, zmm31, zmm3 + vprord zmm26, zmm26, 0x10 + vprord zmm27, zmm27, 0x10 + vprord zmm30, zmm30, 0x10 + vprord zmm31, zmm31, 0x10 + vpaddd zmm17, zmm17, zmm26 + vmovdqa32 zmm12, zmm19 + vpaddd zmm23, zmm23, zmm27 + vpaddd zmm24, zmm24, zmm30 + vpaddd zmm25, zmm25, zmm31 + vpxord zmm4, zmm4, zmm17 + vpxord zmm5, zmm5, zmm23 + vpxord zmm6, zmm6, zmm24 + vpxord zmm7, zmm7, zmm25 + vprord zmm4, zmm4, 0x0C + vprord zmm5, zmm5, 0x0C + vprord zmm6, zmm6, 0x0C + vprord zmm7, zmm7, 0x0C + vpaddd zmm0, zmm0, zmm20 + vpaddd zmm1, zmm1, zmm14 + vpaddd zmm2, zmm2, zmm21 + vpaddd zmm3, zmm3, zmm16 + vpaddd zmm0, zmm0, zmm4 + vmovdqa32 zmm10, zmm14 + vpaddd zmm1, zmm1, zmm5 + vpaddd zmm2, zmm2, zmm6 + vpaddd zmm3, zmm3, zmm7 + vpxord zmm26, zmm26, zmm0 + vpxord zmm27, zmm27, zmm1 + vpxord zmm30, zmm30, zmm2 + vpxord zmm31, zmm31, zmm3 + vprord zmm26, zmm26, 0x08 + vmovdqa32 zmm19, zmm16 + vprord zmm27, zmm27, 0x08 + vprord zmm30, zmm30, 0x08 + vprord zmm31, zmm31, 0x08 + vpaddd zmm17, zmm17, zmm26 + vpaddd zmm23, zmm23, zmm27 + vpaddd zmm24, zmm24, zmm30 + vpaddd zmm25, zmm25, zmm31 + vpxord zmm4, zmm4, zmm17 + vmovdqa32 zmm14, zmm15 + vpxord zmm5, zmm5, zmm23 + vpxord zmm6, zmm6, zmm24 + vpxord zmm7, zmm7, zmm25 + vprord zmm4, zmm4, 0x07 + vprord zmm5, zmm5, 0x07 + vprord zmm6, zmm6, 0x07 + vprord zmm7, zmm7, 0x07 + vpaddd zmm0, zmm0, zmm11 + vmovdqa32 zmm16, zmm29 + vpaddd zmm1, zmm1, zmm15 + vpaddd zmm2, zmm2, zmm13 + vpaddd zmm3, zmm3, zmm22 + vpaddd zmm0, zmm0, zmm5 + vpaddd zmm1, zmm1, zmm6 + vpaddd zmm2, zmm2, zmm7 + vpaddd zmm3, zmm3, zmm4 + vpxord zmm31, zmm31, zmm0 + vmovdqa32 zmm15, zmm13 + vpxord zmm26, zmm26, zmm1 + vpxord zmm27, zmm27, zmm2 + vpxord zmm30, zmm30, zmm3 + vprord zmm31, zmm31, 0x10 + vprord zmm26, zmm26, 0x10 + vprord zmm27, zmm27, 0x10 + vprord zmm30, zmm30, 0x10 + vpaddd zmm24, zmm24, zmm31 + vmovdqa32 zmm13, zmm28 + vpaddd zmm25, zmm25, zmm26 + vpaddd zmm17, zmm17, zmm27 + vpaddd zmm23, zmm23, zmm30 + vpxord zmm5, zmm5, zmm24 + vpxord zmm6, zmm6, zmm25 + vpxord zmm7, zmm7, zmm17 + vpxord zmm4, zmm4, zmm23 + vprord zmm5, zmm5, 0x0C + vprord zmm6, zmm6, 0x0C + vprord zmm7, zmm7, 0x0C + vprord zmm4, zmm4, 0x0C + vpaddd zmm0, zmm0, zmm28 + vpaddd zmm1, zmm1, zmm8 + vpaddd zmm2, zmm2, zmm29 + vmovdqa32 zmm29, zmm22 + vpaddd zmm3, zmm3, zmm9 + vpaddd zmm0, zmm0, zmm5 + vpaddd zmm1, zmm1, zmm6 + vpaddd zmm2, zmm2, zmm7 + vmovdqa32 zmm28, zmm8 + vpaddd zmm3, zmm3, zmm4 + vpxord zmm31, zmm31, zmm0 + vpxord zmm26, zmm26, zmm1 + vmovdqa32 zmm22, zmm9 + vpxord zmm27, zmm27, zmm2 + vpxord zmm30, zmm30, zmm3 + vprord zmm31, zmm31, 0x08 + vmovdqa32 zmm8, zmm21 + vprord zmm26, zmm26, 0x08 + vprord zmm27, zmm27, 0x08 + vprord zmm30, zmm30, 0x08 + vmovdqa32 zmm9, zmm11 + vpaddd zmm24, zmm24, zmm31 + vpaddd zmm25, zmm25, zmm26 + vpaddd zmm17, zmm17, zmm27 + vpaddd zmm23, zmm23, zmm30 + vmovdqa32 zmm11, zmm20 + vpxord zmm5, zmm5, zmm24 + vpxord zmm6, zmm6, zmm25 + vpxord zmm7, zmm7, zmm17 + vpxord zmm4, zmm4, zmm23 + vmovdqa32 zmm21, zmmword ptr [rsp+0x80] + vprord zmm5, zmm5, 0x07 + vprord zmm6, zmm6, 0x07 + vprord zmm7, zmm7, 0x07 + vprord zmm4, zmm4, 0x07 + vmovdqa32 zmm20, zmmword ptr [rsp+0xC0] + dec al + jnz 4b + vpxord zmm0, zmm0, zmm17 + vpxord zmm1, zmm1, zmm23 + vpxord zmm2, zmm2, zmm24 + vpxord zmm3, zmm3, zmm25 + vpxord zmm4, zmm4, zmm26 + vpxord zmm5, zmm5, zmm27 + vpxord zmm6, zmm6, zmm30 + vpxord zmm7, zmm7, zmm31 + movzx eax, byte ptr [rbp+0x78] + jb 3b + mov rsi, qword ptr [rbp+0x90] + vpunpckldq zmm8, zmm0, zmm2 + vpunpckhdq zmm9, zmm0, zmm2 + vpunpckldq zmm10, zmm1, zmm3 + vpunpckhdq zmm11, zmm1, zmm3 + vpunpckldq zmm12, zmm4, zmm6 + vpunpckhdq zmm13, zmm4, zmm6 + vpunpckldq zmm14, zmm5, zmm7 + vpunpckhdq zmm15, zmm5, zmm7 + vpunpckldq zmm0, zmm8, zmm10 + vpunpckhdq zmm1, zmm8, zmm10 + vpunpckldq zmm2, zmm9, zmm11 + vpunpckhdq zmm3, zmm9, zmm11 + vpunpckldq zmm4, zmm12, zmm14 + vpunpckhdq zmm5, zmm12, zmm14 + vpunpckldq zmm6, zmm13, zmm15 + vpunpckhdq zmm7, zmm13, zmm15 + vmovdqa32 zmm16, zmmword ptr [rip+INDEX0] + vmovdqa32 zmm18, zmmword ptr [rip+INDEX1] + vmovdqa32 zmm8, zmm0 + vpermt2d zmm8, zmm16, zmm4 + vpermt2d zmm0, zmm18, zmm4 + vmovdqa32 zmm10, zmm1 + vpermt2d zmm10, zmm16, zmm5 + vpermt2d zmm1, zmm18, zmm5 + vmovdqa32 zmm12, zmm2 + vpermt2d zmm12, zmm16, zmm6 + vpermt2d zmm2, zmm18, zmm6 + vmovdqa32 zmm14, zmm3 + vpermt2d zmm14, zmm16, zmm7 + vpermt2d zmm3, zmm18, zmm7 + vextracti64x4 ymmword ptr [rsi], zmm8, 0x00 + vextracti64x4 ymmword ptr [rsi+0x20], zmm10, 0x00 + vextracti64x4 ymmword ptr [rsi+0x40], zmm12, 0x00 + vextracti64x4 ymmword ptr [rsi+0x60], zmm14, 0x00 + vextracti64x4 ymmword ptr [rsi+0x80], zmm0, 0x00 + vextracti64x4 ymmword ptr [rsi+0xA0], zmm1, 0x00 + vextracti64x4 ymmword ptr [rsi+0xC0], zmm2, 0x00 + vextracti64x4 ymmword ptr [rsi+0xE0], zmm3, 0x00 + vextracti64x4 ymmword ptr [rsi+0x100], zmm8, 0x01 + vextracti64x4 ymmword ptr [rsi+0x120], zmm10, 0x01 + vextracti64x4 ymmword ptr [rsi+0x140], zmm12, 0x01 + vextracti64x4 ymmword ptr [rsi+0x160], zmm14, 0x01 + vextracti64x4 ymmword ptr [rsi+0x180], zmm0, 0x01 + vextracti64x4 ymmword ptr [rsi+0x1A0], zmm1, 0x01 + vextracti64x4 ymmword ptr [rsi+0x1C0], zmm2, 0x01 + vextracti64x4 ymmword ptr [rsi+0x1E0], zmm3, 0x01 + vmovdqa32 zmm8, zmmword ptr [rsp] + vmovdqa32 zmm9, zmmword ptr [rsp+0x40] + vmovdqa32 zmm10, zmm8 + vpaddd zmm10 {k1}, zmm8, dword ptr [rip+ADD16] {1to16} + vpcmpud k2 {k1}, zmm10, zmm8, 0x01 + vpaddd zmm9 {k2}, zmm9, dword ptr [rip+ADD1] {1to16} + vmovdqa32 zmmword ptr [rsp], zmm10 + vmovdqa32 zmmword ptr [rsp+0x40], zmm9 + add rsi, 0x200 + mov qword ptr [rbp+0x90], rsi + add rcx, 0x80 + sub rdx, 0x10 + cmp rdx, 0x10 + jnb 2b + test rdx, rdx + jnz 5f +9: vzeroupper - vmovdqa xmm6, xmmword ptr [rsp+0x90] - vmovdqa xmm7, xmmword ptr [rsp+0xA0] - vmovdqa xmm8, xmmword ptr [rsp+0xB0] - vmovdqa xmm9, xmmword ptr [rsp+0xC0] - vmovdqa xmm10, xmmword ptr [rsp+0xD0] - vmovdqa xmm11, xmmword ptr [rsp+0xE0] - vmovdqa xmm12, xmmword ptr [rsp+0xF0] - vmovdqa xmm13, xmmword ptr [rsp+0x100] - vmovdqa xmm14, xmmword ptr [rsp+0x110] - vmovdqa xmm15, xmmword ptr [rsp+0x120] - mov rsp, rbp - pop rbp - pop rbx - pop rsi - pop rdi - pop r12 - pop r13 - pop r14 - pop r15 + movdqa xmm6, xmmword ptr [rbp-0xA8] + movdqa xmm7, xmmword ptr [rbp-0x98] + movdqa xmm8, xmmword ptr [rbp-0x88] + movdqa xmm9, xmmword ptr [rbp-0x78] + movdqa xmm10, xmmword ptr [rbp-0x68] + movdqa xmm11, xmmword ptr [rbp-0x58] + movdqa xmm12, xmmword ptr [rbp-0x48] + movdqa xmm13, xmmword ptr [rbp-0x38] + movdqa xmm14, xmmword ptr [rbp-0x28] + movdqa xmm15, xmmword ptr [rbp-0x18] + mov rsp, rbp + pop r15 + pop r14 + pop r13 + pop r12 + pop rdi + pop rsi + pop rbp + pop rbx 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+0x78] - movzx ebx, byte ptr [rbp+0x80] - or eax, ebx - xor edx, edx +5: + mov rax, rsp + test dl, 0x08 + jz 3f + vpbroadcastd ymm0, dword ptr [r9] + vpbroadcastd ymm1, dword ptr [r9+0x04] + vpbroadcastd ymm2, dword ptr [r9+0x08] + vpbroadcastd ymm3, dword ptr [r9+0x0C] + vpbroadcastd ymm4, dword ptr [r9+0x10] + vpbroadcastd ymm5, dword ptr [r9+0x14] + vpbroadcastd ymm6, dword ptr [r9+0x18] + vpbroadcastd ymm7, dword ptr [r9+0x1C] + movzx ebx, byte ptr [rbp+0x78] + movzx esi, byte ptr [rbp+0x80] + or ebx, esi + xor esi, esi 2: - movzx ebx, byte ptr [rbp+0x88] - 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+0x78] - jne 2b - mov rbx, qword ptr [rbp+0x90] + movzx edi, byte ptr [rbp+0x88] + or edi, ebx + add rsi, 0x40 + cmp rsi, qword ptr [rsp+0x100] + cmovz ebx, edi + mov dword ptr [rsp+0x80], ebx + mov ebx, 0xCC + kmovw k2, ebx + mov ebx, 0x33 + kmovw k3, ebx + mov rbx, qword ptr [rcx] + mov rdi, qword ptr [rcx+0x20] + vmovups xmm8, xmmword ptr [rbx+rsi*1-0x40] + vinserti32x4 ymm8, ymm8, xmmword ptr [rdi+rsi*1-0x40], 0x01 + vmovups xmm12, xmmword ptr [rbx+rsi*1-0x30] + vinserti32x4 ymm12, ymm12, xmmword ptr [rdi+rsi*1-0x30], 0x01 + mov rbx, qword ptr [rcx+0x08] + mov rdi, qword ptr [rcx+0x28] + vmovups xmm9, xmmword ptr [rbx+rsi*1-0x40] + vinserti32x4 ymm9, ymm9, xmmword ptr [rdi+rsi*1-0x40], 0x01 + vmovups xmm13, xmmword ptr [rbx+rsi*1-0x30] + vinserti32x4 ymm13, ymm13, xmmword ptr [rdi+rsi*1-0x30], 0x01 + mov rbx, qword ptr [rcx+0x10] + mov rdi, qword ptr [rcx+0x30] + vmovups xmm10, xmmword ptr [rbx+rsi*1-0x40] + vinserti32x4 ymm10, ymm10, xmmword ptr [rdi+rsi*1-0x40], 0x01 + vmovups xmm14, xmmword ptr [rbx+rsi*1-0x30] + vinserti32x4 ymm14, ymm14, xmmword ptr [rdi+rsi*1-0x30], 0x01 + mov rbx, qword ptr [rcx+0x18] + mov rdi, qword ptr [rcx+0x38] + vmovups xmm11, xmmword ptr [rbx+rsi*1-0x40] + vinserti32x4 ymm11, ymm11, xmmword ptr [rdi+rsi*1-0x40], 0x01 + vmovups xmm15, xmmword ptr [rbx+rsi*1-0x30] + vinserti32x4 ymm15, ymm15, xmmword ptr [rdi+rsi*1-0x30], 0x01 + vpunpckldq ymm24, ymm8, ymm9 + vpunpckhdq ymm9, ymm8, ymm9 + vpunpckldq ymm8, ymm10, ymm11 + vpunpckhdq ymm11, ymm10, ymm11 + vpunpckldq ymm10, ymm12, ymm13 + vpunpckhdq ymm13, ymm12, ymm13 + vpunpckldq ymm12, ymm14, ymm15 + vpunpckhdq ymm15, ymm14, ymm15 + vshufps ymm14, ymm24, ymm8, 0x44 + vshufps ymm8, ymm24, ymm8, 0xEE + vshufps ymm24, ymm9, ymm11, 0x44 + vshufps ymm11, ymm9, ymm11, 0xEE + vshufps ymm9, ymm10, ymm12, 0x44 + vshufps ymm12, ymm10, ymm12, 0xEE + vshufps ymm10, ymm13, ymm15, 0x44 + vshufps ymm15, ymm13, ymm15, 0xEE + mov rbx, qword ptr [rcx] + mov rdi, qword ptr [rcx+0x20] + vmovups xmm16, xmmword ptr [rbx+rsi*1-0x20] + vinserti32x4 ymm16, ymm16, xmmword ptr [rdi+rsi*1-0x20], 0x01 + vmovups xmm20, xmmword ptr [rbx+rsi*1-0x10] + vinserti32x4 ymm20, ymm20, xmmword ptr [rdi+rsi*1-0x10], 0x01 + mov rbx, qword ptr [rcx+0x08] + mov rdi, qword ptr [rcx+0x28] + vmovups xmm17, xmmword ptr [rbx+rsi*1-0x20] + vinserti32x4 ymm17, ymm17, xmmword ptr [rdi+rsi*1-0x20], 0x01 + vmovups xmm21, xmmword ptr [rbx+rsi*1-0x10] + vinserti32x4 ymm21, ymm21, xmmword ptr [rdi+rsi*1-0x10], 0x01 + mov rbx, qword ptr [rcx+0x10] + mov rdi, qword ptr [rcx+0x30] + vmovups xmm18, xmmword ptr [rbx+rsi*1-0x20] + vinserti32x4 ymm18, ymm18, xmmword ptr [rdi+rsi*1-0x20], 0x01 + vmovups xmm22, xmmword ptr [rbx+rsi*1-0x10] + vinserti32x4 ymm22, ymm22, xmmword ptr [rdi+rsi*1-0x10], 0x01 + mov rbx, qword ptr [rcx+0x18] + mov rdi, qword ptr [rcx+0x38] + vmovups xmm19, xmmword ptr [rbx+rsi*1-0x20] + vinserti32x4 ymm19, ymm19, xmmword ptr [rdi+rsi*1-0x20], 0x01 + vmovups xmm23, xmmword ptr [rbx+rsi*1-0x10] + vinserti32x4 ymm23, ymm23, xmmword ptr [rdi+rsi*1-0x10], 0x01 + vpunpckldq ymm13, ymm16, ymm17 + vpunpckhdq ymm17, ymm16, ymm17 + vpunpckldq ymm16, ymm18, ymm19 + vpunpckhdq ymm19, ymm18, ymm19 + vpunpckldq ymm18, ymm20, ymm21 + vpunpckhdq ymm21, ymm20, ymm21 + vpunpckldq ymm20, ymm22, ymm23 + vpunpckhdq ymm23, ymm22, ymm23 + vshufps ymm22, ymm13, ymm16, 0x44 + vshufps ymm16, ymm13, ymm16, 0xEE + vshufps ymm13, ymm17, ymm19, 0x44 + vshufps ymm19, ymm17, ymm19, 0xEE + vshufps ymm17, ymm18, ymm20, 0x44 + vshufps ymm20, ymm18, ymm20, 0xEE + vshufps ymm18, ymm21, ymm23, 0x44 + vshufps ymm23, ymm21, ymm23, 0xEE + vpbroadcastd ymm21, dword ptr [rip+BLAKE3_IV_0] + vpbroadcastd ymm25, dword ptr [rip+BLAKE3_IV_1] + vpbroadcastd ymm26, dword ptr [rip+BLAKE3_IV_2] + vpbroadcastd ymm27, dword ptr [rip+BLAKE3_IV_3] + vmovdqa32 ymm28, ymmword ptr [rax] + vmovdqa32 ymm29, ymmword ptr [rax+0x40] + vpbroadcastd ymm30, dword ptr [rip+BLAKE3_BLOCK_LEN] + vpbroadcastd ymm31, dword ptr [rsp+0x80] + mov bl, 0x07 +4: + vpaddd ymm0, ymm0, ymm14 + vpaddd ymm1, ymm1, ymm24 + vpaddd ymm2, ymm2, ymm9 + vpaddd ymm3, ymm3, ymm10 + vmovdqa32 ymmword ptr [rsp+0x80], ymm14 + vmovdqa32 ymmword ptr [rsp+0xC0], ymm10 + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vpxord ymm28, ymm28, ymm0 + vmovdqa32 ymm14, ymm24 + vpxord ymm29, ymm29, ymm1 + vpxord ymm30, ymm30, ymm2 + vpxord ymm31, ymm31, ymm3 + vprord ymm28, ymm28, 0x10 + vprord ymm29, ymm29, 0x10 + vprord ymm30, ymm30, 0x10 + vprord ymm31, ymm31, 0x10 + vpaddd ymm21, ymm21, ymm28 + vmovdqa32 ymm10, ymm9 + vpaddd ymm25, ymm25, ymm29 + vpaddd ymm26, ymm26, ymm30 + vpaddd ymm27, ymm27, ymm31 + vpxord ymm4, ymm4, ymm21 + vpxord ymm5, ymm5, ymm25 + vpxord ymm6, ymm6, ymm26 + vpxord ymm7, ymm7, ymm27 + vprord ymm4, ymm4, 0x0C + vprord ymm5, ymm5, 0x0C + vprord ymm6, ymm6, 0x0C + vprord ymm7, ymm7, 0x0C + vpaddd ymm0, ymm0, ymm8 + vpaddd ymm1, ymm1, ymm11 + vpaddd ymm2, ymm2, ymm12 + vpaddd ymm3, ymm3, ymm15 + vpaddd ymm0, ymm0, ymm4 + vmovdqa32 ymm24, ymm11 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vpxord ymm28, ymm28, ymm0 + vpxord ymm29, ymm29, ymm1 + vpxord ymm30, ymm30, ymm2 + vpxord ymm31, ymm31, ymm3 + vprord ymm28, ymm28, 0x08 + vmovdqa32 ymm9, ymm15 + vprord ymm29, ymm29, 0x08 + vprord ymm30, ymm30, 0x08 + vprord ymm31, ymm31, 0x08 + vpaddd ymm21, ymm21, ymm28 + vpaddd ymm25, ymm25, ymm29 + vpaddd ymm26, ymm26, ymm30 + vpaddd ymm27, ymm27, ymm31 + vpxord ymm4, ymm4, ymm21 + vmovdqa32 ymm11, ymm13 + vpxord ymm5, ymm5, ymm25 + vpxord ymm6, ymm6, ymm26 + vpxord ymm7, ymm7, ymm27 + vprord ymm4, ymm4, 0x07 + vprord ymm5, ymm5, 0x07 + vprord ymm6, ymm6, 0x07 + vprord ymm7, ymm7, 0x07 + vpaddd ymm0, ymm0, ymm22 + vmovdqa32 ymm15, ymm20 + vpaddd ymm1, ymm1, ymm13 + vpaddd ymm2, ymm2, ymm17 + vpaddd ymm3, ymm3, ymm18 + vpaddd ymm0, ymm0, ymm5 + vpaddd ymm1, ymm1, ymm6 + vpaddd ymm2, ymm2, ymm7 + vpaddd ymm3, ymm3, ymm4 + vpxord ymm31, ymm31, ymm0 + vmovdqa32 ymm13, ymm17 + vpxord ymm28, ymm28, ymm1 + vpxord ymm29, ymm29, ymm2 + vpxord ymm30, ymm30, ymm3 + vprord ymm31, ymm31, 0x10 + vprord ymm28, ymm28, 0x10 + vprord ymm29, ymm29, 0x10 + vprord ymm30, ymm30, 0x10 + vpaddd ymm26, ymm26, ymm31 + vmovdqa32 ymm17, ymm16 + vpaddd ymm27, ymm27, ymm28 + vpaddd ymm21, ymm21, ymm29 + vpaddd ymm25, ymm25, ymm30 + vpxord ymm5, ymm5, ymm26 + vpxord ymm6, ymm6, ymm27 + vpxord ymm7, ymm7, ymm21 + vpxord ymm4, ymm4, ymm25 + vprord ymm5, ymm5, 0x0C + vprord ymm6, ymm6, 0x0C + vprord ymm7, ymm7, 0x0C + vprord ymm4, ymm4, 0x0C + vpaddd ymm0, ymm0, ymm16 + vpaddd ymm1, ymm1, ymm19 + vpaddd ymm2, ymm2, ymm20 + vmovdqa32 ymm20, ymm18 + vpaddd ymm3, ymm3, ymm23 + vpaddd ymm0, ymm0, ymm5 + vpaddd ymm1, ymm1, ymm6 + vpaddd ymm2, ymm2, ymm7 + vmovdqa32 ymm16, ymm19 + vpaddd ymm3, ymm3, ymm4 + vpxord ymm31, ymm31, ymm0 + vpxord ymm28, ymm28, ymm1 + vmovdqa32 ymm18, ymm23 + vpxord ymm29, ymm29, ymm2 + vpxord ymm30, ymm30, ymm3 + vprord ymm31, ymm31, 0x08 + vmovdqa32 ymm19, ymm12 + vprord ymm28, ymm28, 0x08 + vprord ymm29, ymm29, 0x08 + vprord ymm30, ymm30, 0x08 + vmovdqa32 ymm23, ymm22 + vpaddd ymm26, ymm26, ymm31 + vpaddd ymm27, ymm27, ymm28 + vpaddd ymm21, ymm21, ymm29 + vpaddd ymm25, ymm25, ymm30 + vmovdqa32 ymm22, ymm8 + vpxord ymm5, ymm5, ymm26 + vpxord ymm6, ymm6, ymm27 + vpxord ymm7, ymm7, ymm21 + vpxord ymm4, ymm4, ymm25 + vmovdqa32 ymm12, ymmword ptr [rsp+0x80] + vprord ymm5, ymm5, 0x07 + vprord ymm6, ymm6, 0x07 + vprord ymm7, ymm7, 0x07 + vprord ymm4, ymm4, 0x07 + vmovdqa32 ymm8, ymmword ptr [rsp+0xC0] + dec bl + jnz 4b + vpxord ymm0, ymm0, ymm21 + vpxord ymm1, ymm1, ymm25 + vpxord ymm2, ymm2, ymm26 + vpxord ymm3, ymm3, ymm27 + vpxord ymm4, ymm4, ymm28 + vpxord ymm5, ymm5, ymm29 + vpxord ymm6, ymm6, ymm30 + vpxord ymm7, ymm7, ymm31 + movzx ebx, byte ptr [rbp+0x78] + jb 2b + mov rdi, qword ptr [rbp+0x90] 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 + vshufps ymm12, ymm8, ymm9, 0x4E vblendps ymm1, ymm8, ymm12, 0xCC - vshufps ymm8, ymm11, ymm0, 78 + vshufps ymm8, ymm11, ymm0, 0x4E vunpckhps ymm13, ymm2, ymm3 vblendps ymm2, ymm11, ymm8, 0xCC vblendps ymm3, ymm12, ymm9, 0xCC vperm2f128 ymm12, ymm1, ymm2, 0x20 - vmovups ymmword ptr [rbx], ymm12 + vmovups ymmword ptr [rdi], 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 + vmovups ymmword ptr [rdi+0x20], ymm7 + vshufps ymm5, ymm10, ymm13, 0x4E vblendps ymm6, ymm5, ymm13, 0xCC - vshufps ymm13, ymm14, ymm15, 78 + vshufps ymm13, ymm14, ymm15, 0x4E vblendps ymm10, ymm10, ymm5, 0xCC vblendps ymm14, ymm14, ymm13, 0xCC vperm2f128 ymm8, ymm10, ymm14, 0x20 - vmovups ymmword ptr [rbx+0x40], ymm8 + vmovups ymmword ptr [rdi+0x40], ymm8 vblendps ymm15, ymm13, ymm15, 0xCC vperm2f128 ymm13, ymm6, ymm15, 0x20 - vmovups ymmword ptr [rbx+0x60], ymm13 + vmovups ymmword ptr [rdi+0x60], ymm13 vperm2f128 ymm9, ymm1, ymm2, 0x31 vperm2f128 ymm11, ymm3, ymm4, 0x31 - vmovups ymmword ptr [rbx+0x80], ymm9 + vmovups ymmword ptr [rdi+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+0x40] - 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+0x40], ymm2 - add rbx, 256 - mov qword ptr [rbp+0x90], rbx - add rdi, 64 - sub rsi, 8 -3: - mov rbx, qword ptr [rbp+0x90] - mov r15, qword ptr [rsp+0x80] - movzx r13, byte ptr [rbp+0x78] - movzx r12, byte ptr [rbp+0x88] - 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+0x40] - 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+0x80] - or eax, r13d - xor edx, edx -.p2align 5 + vmovups ymmword ptr [rdi+0xA0], ymm11 + vmovups ymmword ptr [rdi+0xC0], ymm14 + vmovups ymmword ptr [rdi+0xE0], ymm15 + lea r8, qword ptr [rax+0x20] + kortestw k1, k1 + cmovnz rax, r8 + add rdi, 0x100 + mov qword ptr [rbp+0x90], rdi + add rcx, 0x40 + mov rbx, qword ptr [rbp+0x90] + movzx esi, byte ptr [rbp+0x78] + movzx edi, byte ptr [rbp+0x88] + test dl, 0x04 + jz 3f + vbroadcasti32x4 zmm0, xmmword ptr [r9] + vbroadcasti32x4 zmm1, xmmword ptr [r9+0x10] + vbroadcasti32x4 zmm4, xmmword ptr [rip+BLAKE3_IV] + mov r8d, 0x4444 + kmovw k2, r8d + vmovdqa xmm6, xmmword ptr [rax] + vmovdqa xmm7, xmmword ptr [rax+0x40] + vpunpckldq xmm8, xmm6, xmm7 + vpunpckhdq xmm9, xmm6, xmm7 + vpermq ymm8, ymm8, 0xDC + vpermq ymm9, ymm9, 0xDC + vpbroadcastd zmm6, dword ptr [rip+BLAKE3_BLOCK_LEN] + vinserti64x4 zmm5, zmm8, ymm9, 0x01 + vpblendmd zmm5 {k2}, zmm5, zmm6 + mov r8, qword ptr [rcx] + mov r10, qword ptr [rcx+0x08] + mov r11, qword ptr [rcx+0x10] + mov r12, qword ptr [rcx+0x18] + mov r13d, 0xAAAA + kmovw k2, r13d + mov r13d, 0x8888 + kmovw k3, r13d + movzx r13d, byte ptr [rbp+0x80] + or r13d, esi + xor r14d, r14d 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 + movzx r15d, byte ptr [rbp+0x88] + or r15d, r13d + add r14, 0x40 + cmp r14, qword ptr [rsp+0x100] + cmovz r13d, r15d + mov dword ptr [rsp+0x80], r13d + vmovdqa32 zmm2, zmm4 + vpbroadcastd zmm6, dword ptr [rsp+0x80] + vpblendmd zmm3 {k3}, zmm5, zmm6 + vmovdqu32 zmm10, zmmword ptr [r8+r14*1-0x40] + vinserti32x4 zmm10, zmm10, xmmword ptr [r10+r14*1-0x40], 0x01 + vinserti32x4 zmm10, zmm10, xmmword ptr [r11+r14*1-0x40], 0x02 + vinserti32x4 zmm10, zmm10, xmmword ptr [r12+r14*1-0x40], 0x03 + vmovdqu32 zmm11, zmmword ptr [r8+r14*1-0x30] + vinserti32x4 zmm11, zmm11, xmmword ptr [r10+r14*1-0x30], 0x01 + vinserti32x4 zmm11, zmm11, xmmword ptr [r11+r14*1-0x30], 0x02 + vinserti32x4 zmm11, zmm11, xmmword ptr [r12+r14*1-0x30], 0x03 + vshufps zmm6, zmm10, zmm11, 0x88 + vshufps zmm7, zmm10, zmm11, 0xDD + vmovdqu32 zmm10, zmmword ptr [r8+r14*1-0x20] + vinserti32x4 zmm10, zmm10, xmmword ptr [r10+r14*1-0x20], 0x01 + vinserti32x4 zmm10, zmm10, xmmword ptr [r11+r14*1-0x20], 0x02 + vinserti32x4 zmm10, zmm10, xmmword ptr [r12+r14*1-0x20], 0x03 + vmovdqu32 zmm11, zmmword ptr [r8+r14*1-0x10] + vinserti32x4 zmm11, zmm11, xmmword ptr [r10+r14*1-0x10], 0x01 + vinserti32x4 zmm11, zmm11, xmmword ptr [r11+r14*1-0x10], 0x02 + vinserti32x4 zmm11, zmm11, xmmword ptr [r12+r14*1-0x10], 0x03 + vshufps zmm8, zmm10, zmm11, 0x88 + vshufps zmm9, zmm10, zmm11, 0xDD + vpshufd zmm8, zmm8, 0x93 + vpshufd zmm9, zmm9, 0x93 + mov r15b, 0x07 +4: + 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, 0x0C + vpaddd zmm0, zmm0, zmm7 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 0x08 + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 0x07 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 + vpaddd zmm0, zmm0, zmm8 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 0x10 + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 0x0C + vpaddd zmm0, zmm0, zmm9 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 0x08 + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 0x07 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 + dec r15b + jz 4f + vshufps zmm12, zmm6, zmm7, 0xD6 + vpshufd zmm13, zmm6, 0x0F + vpshufd zmm6, zmm12, 0x39 + vshufps zmm12, zmm8, zmm9, 0xFA + vpblendmd zmm13 {k2}, zmm13, zmm12 + vpunpcklqdq zmm12, zmm9, zmm7 + vpblendmd zmm12 {k3}, zmm12, zmm8 + vpshufd zmm12, zmm12, 0x78 + vpunpckhdq zmm7, zmm7, zmm9 + vpunpckldq zmm8, zmm8, zmm7 + vpshufd zmm9, zmm8, 0x1E + vmovdqa32 zmm7, zmm13 + vmovdqa32 zmm8, zmm12 + jmp 4b +4: + vpxord zmm0, zmm0, zmm2 + vpxord zmm1, zmm1, zmm3 + mov r13d, esi + jb 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+0x80] - or eax, r13d - xor edx, edx -.p2align 5 + vextracti32x4 xmmword ptr [rbx+0x40], zmm0, 0x02 + vextracti32x4 xmmword ptr [rbx+0x50], zmm1, 0x02 + vextracti32x4 xmmword ptr [rbx+0x60], zmm0, 0x03 + vextracti32x4 xmmword ptr [rbx+0x70], zmm1, 0x03 + lea r15, qword ptr [rax+0x10] + kortestw k1, k1 + cmovnz rax, r15 + add rbx, 0x80 + add rcx, 0x20 + test dl, 0x02 + jz 3f + vbroadcasti128 ymm0, xmmword ptr [r9] + vbroadcasti128 ymm1, xmmword ptr [r9+0x10] + vbroadcasti128 ymm4, xmmword ptr [rip+BLAKE3_IV] + vmovd xmm5, dword ptr [rax] + vpinsrd xmm5, xmm5, dword ptr [rax+0x40], 0x01 + vpinsrd xmm5, xmm5, dword ptr [rip+BLAKE3_BLOCK_LEN], 0x02 + vmovd xmm6, dword ptr [rax+0x04] + vpinsrd xmm6, xmm6, dword ptr [rax+0x44], 0x01 + vpinsrd xmm6, xmm6, dword ptr [rip+BLAKE3_BLOCK_LEN], 0x02 + vinserti128 ymm5, ymm5, xmm6, 0x01 + mov r8, qword ptr [rcx] + mov r10, qword ptr [rcx+0x08] + mov r11d, esi + movzx r12d, byte ptr [rbp+0x80] + or r11d, r12d + xor r12d, r12d 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 + movzx r13d, byte ptr [rbp+0x88] + or r13d, r11d + add r12, 0x40 + cmp r12, qword ptr [rsp+0x100] + cmovz r11d, r13d + mov dword ptr [rsp+0x80], r11d + vmovdqa ymm2, ymm4 + vpbroadcastd ymm6, dword ptr [rsp+0x80] + vpblendd ymm3, ymm5, ymm6, 0x88 + vmovdqu ymm10, ymmword ptr [r8+r12*1-0x40] + vinserti128 ymm10, ymm10, xmmword ptr [r10+r12*1-0x40], 0x01 + vmovdqu ymm11, ymmword ptr [r8+r12*1-0x30] + vinserti128 ymm11, ymm11, xmmword ptr [r10+r12*1-0x30], 0x01 + vshufps ymm6, ymm10, ymm11, 0x88 + vshufps ymm7, ymm10, ymm11, 0xDD + vmovdqu ymm10, ymmword ptr [r8+r12*1-0x20] + vinserti128 ymm10, ymm10, xmmword ptr [r10+r12*1-0x20], 0x01 + vmovdqu ymm11, ymmword ptr [r8+r12*1-0x10] + vinserti128 ymm11, ymm11, xmmword ptr [r10+r12*1-0x10], 0x01 + vshufps ymm8, ymm10, ymm11, 0x88 + vshufps ymm9, ymm10, ymm11, 0xDD + vpshufd ymm8, ymm8, 0x93 + vpshufd ymm9, ymm9, 0x93 + mov r13b, 0x07 +4: + 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, 0x0C + vpaddd ymm0, ymm0, ymm7 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 0x08 + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 0x07 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 + vpaddd ymm0, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 0x10 + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 0x0C + vpaddd ymm0, ymm0, ymm9 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 0x08 + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 0x07 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 + dec r13b + jz 4f + vshufps ymm10, ymm6, ymm7, 0xD6 + vpshufd ymm11, ymm6, 0x0F + vpshufd ymm6, ymm10, 0x39 + vshufps ymm10, ymm8, ymm9, 0xFA + vpblendd ymm11, ymm11, ymm10, 0xAA + vpunpcklqdq ymm10, ymm9, ymm7 + vpblendd ymm10, ymm10, ymm8, 0x88 + vpshufd ymm10, ymm10, 0x78 + vpunpckhdq ymm7, ymm7, ymm9 + vpunpckldq ymm8, ymm8, ymm7 + vpshufd ymm9, ymm8, 0x1E + vmovdqa ymm7, ymm11 + vmovdqa ymm8, ymm10 + jmp 4b +4: + vpxor ymm0, ymm0, ymm2 + vpxor ymm1, ymm1, ymm3 + mov r11d, esi + jb 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+0x40] - vmovdqu32 xmm0 {k1}, xmmword ptr [rsp+0x8] - vmovdqu32 xmm2 {k1}, xmmword ptr [rsp+0x48] - vmovdqa xmmword ptr [rsp], xmm0 - vmovdqa xmmword ptr [rsp+0x40], 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+0x80] - or eax, r13d - xor edx, edx -.p2align 5 + lea r13, qword ptr [rax+0x08] + kortestw k1, k1 + cmovnz rax, r13 + add rbx, 0x40 + add rcx, 0x10 + test dl, 0x01 + jz 9b + vmovdqu xmm0, xmmword ptr [r9] + vmovdqu xmm1, xmmword ptr [r9+0x10] + vmovdqa xmm4, xmmword ptr [rip+BLAKE3_IV] + vmovd xmm5, dword ptr [rax] + vpinsrd xmm5, xmm5, dword ptr [rax+0x40], 0x01 + vpinsrd xmm5, xmm5, dword ptr [rip+BLAKE3_BLOCK_LEN], 0x02 + mov r8, qword ptr [rcx] + mov r10d, esi + movzx r11d, byte ptr [rbp+0x80] + or r10d, r11d + xor r11d, r11d 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 + movzx r12d, byte ptr [rbp+0x88] + or r12d, r10d + add r11, 0x40 + cmp r11, qword ptr [rsp+0x100] + cmovz r10d, r12d + vmovdqa xmm2, xmm4 + vpinsrd xmm3, xmm5, r10d, 0x03 + vmovdqu xmm10, xmmword ptr [r8+r11*1-0x40] + vmovdqu xmm11, xmmword ptr [r8+r11*1-0x30] + vshufps xmm6, xmm10, xmm11, 0x88 + vshufps xmm7, xmm10, xmm11, 0xDD + vmovdqu xmm10, xmmword ptr [r8+r11*1-0x20] + vmovdqu xmm11, xmmword ptr [r8+r11*1-0x10] + vshufps xmm8, xmm10, xmm11, 0x88 + vshufps xmm9, xmm10, xmm11, 0xDD + vpshufd xmm8, xmm8, 0x93 + vpshufd xmm9, xmm9, 0x93 + mov r12b, 0x07 +4: + 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, 0x0C + vpaddd xmm0, xmm0, xmm7 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 0x08 + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 0x07 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 + vpaddd xmm0, xmm0, xmm8 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 0x10 + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 0x0C + vpaddd xmm0, xmm0, xmm9 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 0x08 + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 0x07 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 + dec r12b + jz 4f + vshufps xmm10, xmm6, xmm7, 0xD6 + vpshufd xmm11, xmm6, 0x0F + vpshufd xmm6, xmm10, 0x39 + vshufps xmm10, xmm8, xmm9, 0xFA + vpblendd xmm11, xmm11, xmm10, 0xAA + vpunpcklqdq xmm10, xmm9, xmm7 + vpblendd xmm10, xmm10, xmm8, 0x88 + vpshufd xmm10, xmm10, 0x78 + vpunpckhdq xmm7, xmm7, xmm9 + vpunpckldq xmm8, xmm8, xmm7 + vpshufd xmm9, xmm8, 0x1E + vmovdqa xmm7, xmm11 + vmovdqa xmm8, xmm10 + jmp 4b +4: + vpxor xmm0, xmm0, xmm2 + vpxor xmm1, xmm1, xmm3 + mov r10d, esi + jb 2b vmovdqu xmmword ptr [rbx], xmm0 vmovdqu xmmword ptr [rbx+0x10], xmm1 - jmp 4b + jmp 9b .p2align 6 @@ -2587,23 +1279,924 @@ blake3_compress_xof_avx512: add rsp, 72 ret +.p2align 6 +blake3_xof_many_avx512: +_blake3_xof_many_avx512: + mov rax, qword ptr [rsp+0x38] + cmp rax, 0x01 + jnbe 2f + sub rsp, 0x48 + movdqa xmmword ptr [rsp], xmm6 + movdqa xmmword ptr [rsp+0x10], xmm7 + movdqa xmmword ptr [rsp+0x20], xmm8 + movdqa xmmword ptr [rsp+0x30], xmm9 + vmovdqu xmm0, xmmword ptr [rcx] + vmovdqu xmm1, xmmword ptr [rcx+0x10] + movzx r8d, r8b + movzx r10d, byte ptr [rsp+0x70] + shl r10, 0x20 + or r8, r10 + vmovq xmm2, r8 + vmovq xmm3, r9 + vpunpcklqdq xmm3, xmm3, xmm2 + vmovaps xmm2, xmmword ptr [rip+BLAKE3_IV] + vmovdqu xmm8, xmmword ptr [rdx] + vmovdqu xmm9, xmmword ptr [rdx+0x10] + vshufps xmm4, xmm8, xmm9, 0x88 + vshufps xmm5, xmm8, xmm9, 0xDD + vmovdqu xmm8, xmmword ptr [rdx+0x20] + vmovdqu xmm9, xmmword ptr [rdx+0x30] + vshufps xmm6, xmm8, xmm9, 0x88 + vshufps xmm7, xmm8, xmm9, 0xDD + vpshufd xmm6, xmm6, 0x93 + vpshufd xmm7, xmm7, 0x93 + mov r8b, 0x07 +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, 0x0C + vpaddd xmm0, xmm0, xmm5 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 0x08 + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 0x07 + 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, 0x0C + vpaddd xmm0, xmm0, xmm7 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 0x08 + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 0x07 + vpshufd xmm0, xmm0, 0x39 + vpshufd xmm3, xmm3, 0x4E + vpshufd xmm2, xmm2, 0x93 + dec r8b + jz 3f + vshufps xmm8, xmm4, xmm5, 0xD6 + vpshufd xmm9, xmm4, 0x0F + 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: + mov r8, qword ptr [rsp+0x78] + vpxor xmm0, xmm0, xmm2 + vpxor xmm1, xmm1, xmm3 + vpxor xmm2, xmm2, xmmword ptr [rcx] + vpxor xmm3, xmm3, xmmword ptr [rcx+0x10] + vmovdqu xmmword ptr [r8], xmm0 + vmovdqu xmmword ptr [r8+0x10], xmm1 + vmovdqu xmmword ptr [r8+0x20], xmm2 + vmovdqu xmmword ptr [r8+0x30], xmm3 + vzeroupper + movdqa xmm6, xmmword ptr [rsp] + movdqa xmm7, xmmword ptr [rsp+0x10] + movdqa xmm8, xmmword ptr [rsp+0x20] + movdqa xmm9, xmmword ptr [rsp+0x30] + add rsp, 0x48 + ret +2: + push rbp + mov rbp, rsp + sub rsp, 0x1A0 + movdqa xmmword ptr [rbp-0xA0], xmm6 + movdqa xmmword ptr [rbp-0x90], xmm7 + movdqa xmmword ptr [rbp-0x80], xmm8 + movdqa xmmword ptr [rbp-0x70], xmm9 + movdqa xmmword ptr [rbp-0x60], xmm10 + movdqa xmmword ptr [rbp-0x50], xmm11 + movdqa xmmword ptr [rbp-0x40], xmm12 + movdqa xmmword ptr [rbp-0x30], xmm13 + movdqa xmmword ptr [rbp-0x20], xmm14 + movdqa xmmword ptr [rbp-0x10], xmm15 + and rsp, 0xFFFFFFFFFFFFFFC0 + vpbroadcastd zmm0, r9d + shr r9, 0x20 + vpbroadcastd zmm1, r9d + vpaddd zmm2, zmm0, zmmword ptr [rip+ADD0] + vpcmpud k1, zmm2, zmm0, 0x01 + vpaddd zmm1 {k1}, zmm1, dword ptr [rip+ADD1] {1to16} + vmovdqa32 zmmword ptr [rsp], zmm2 + vmovdqa32 zmmword ptr [rsp+0x40], zmm1 + mov r9, qword ptr [rbp+0x38] + movzx r8d, r8b + movzx r10d, byte ptr [rbp+0x30] + cmp rax, 0x08 + jbe 2f +.p2align 5 +3: + vpbroadcastd zmm0, dword ptr [rdx] + vpbroadcastd zmm1, dword ptr [rdx+0x04] + vpbroadcastd zmm2, dword ptr [rdx+0x08] + vpbroadcastd zmm3, dword ptr [rdx+0x0C] + vpbroadcastd zmm4, dword ptr [rdx+0x10] + vpbroadcastd zmm5, dword ptr [rdx+0x14] + vpbroadcastd zmm6, dword ptr [rdx+0x18] + vpbroadcastd zmm7, dword ptr [rdx+0x1C] + vpbroadcastd zmm8, dword ptr [rdx+0x20] + vpbroadcastd zmm9, dword ptr [rdx+0x24] + vpbroadcastd zmm10, dword ptr [rdx+0x28] + vpbroadcastd zmm11, dword ptr [rdx+0x2C] + vpbroadcastd zmm12, dword ptr [rdx+0x30] + vpbroadcastd zmm13, dword ptr [rdx+0x34] + vpbroadcastd zmm14, dword ptr [rdx+0x38] + vpbroadcastd zmm15, dword ptr [rdx+0x3C] + vpbroadcastd zmm16, dword ptr [rcx] + vpbroadcastd zmm17, dword ptr [rcx+0x04] + vpbroadcastd zmm18, dword ptr [rcx+0x08] + vpbroadcastd zmm19, dword ptr [rcx+0x0C] + vpbroadcastd zmm20, dword ptr [rcx+0x10] + vpbroadcastd zmm21, dword ptr [rcx+0x14] + vpbroadcastd zmm22, dword ptr [rcx+0x18] + vpbroadcastd zmm23, dword ptr [rcx+0x1C] + vpbroadcastd zmm24, dword ptr [rip+BLAKE3_IV_0] + vpbroadcastd zmm25, dword ptr [rip+BLAKE3_IV_1] + vpbroadcastd zmm26, dword ptr [rip+BLAKE3_IV_2] + vpbroadcastd zmm27, dword ptr [rip+BLAKE3_IV_3] + vmovdqa32 zmm28, zmmword ptr [rsp] + vmovdqa32 zmm29, zmmword ptr [rsp+0x40] + vpbroadcastd zmm30, r8d + vpbroadcastd zmm31, r10d + mov r11b, 0x07 +4: + vpaddd zmm16, zmm16, zmm0 + vpaddd zmm17, zmm17, zmm2 + vpaddd zmm18, zmm18, zmm4 + vpaddd zmm19, zmm19, zmm6 + vmovdqa32 zmmword ptr [rsp+0x80], zmm0 + vmovdqa32 zmmword ptr [rsp+0xC0], zmm6 + vpaddd zmm16, zmm16, zmm20 + vpaddd zmm17, zmm17, zmm21 + vpaddd zmm18, zmm18, zmm22 + vpaddd zmm19, zmm19, zmm23 + vpxord zmm28, zmm28, zmm16 + vmovdqa32 zmm0, zmm2 + vpxord zmm29, zmm29, zmm17 + vpxord zmm30, zmm30, zmm18 + vpxord zmm31, zmm31, zmm19 + vprord zmm28, zmm28, 0x10 + vprord zmm29, zmm29, 0x10 + vprord zmm30, zmm30, 0x10 + vprord zmm31, zmm31, 0x10 + vpaddd zmm24, zmm24, zmm28 + vmovdqa32 zmm6, zmm4 + vpaddd zmm25, zmm25, zmm29 + vpaddd zmm26, zmm26, zmm30 + vpaddd zmm27, zmm27, zmm31 + vpxord zmm20, zmm20, zmm24 + vpxord zmm21, zmm21, zmm25 + vpxord zmm22, zmm22, zmm26 + vpxord zmm23, zmm23, zmm27 + vprord zmm20, zmm20, 0x0C + vprord zmm21, zmm21, 0x0C + vprord zmm22, zmm22, 0x0C + vprord zmm23, zmm23, 0x0C + vpaddd zmm16, zmm16, zmm1 + vpaddd zmm17, zmm17, zmm3 + vpaddd zmm18, zmm18, zmm5 + vpaddd zmm19, zmm19, zmm7 + vpaddd zmm16, zmm16, zmm20 + vmovdqa32 zmm2, zmm3 + vpaddd zmm17, zmm17, zmm21 + vpaddd zmm18, zmm18, zmm22 + vpaddd zmm19, zmm19, zmm23 + vpxord zmm28, zmm28, zmm16 + vpxord zmm29, zmm29, zmm17 + vpxord zmm30, zmm30, zmm18 + vpxord zmm31, zmm31, zmm19 + vprord zmm28, zmm28, 0x08 + vmovdqa32 zmm4, zmm7 + vprord zmm29, zmm29, 0x08 + vprord zmm30, zmm30, 0x08 + vprord zmm31, zmm31, 0x08 + vpaddd zmm24, zmm24, zmm28 + vpaddd zmm25, zmm25, zmm29 + vpaddd zmm26, zmm26, zmm30 + vpaddd zmm27, zmm27, zmm31 + vpxord zmm20, zmm20, zmm24 + vmovdqa32 zmm3, zmm10 + vpxord zmm21, zmm21, zmm25 + vpxord zmm22, zmm22, zmm26 + vpxord zmm23, zmm23, zmm27 + vprord zmm20, zmm20, 0x07 + vprord zmm21, zmm21, 0x07 + vprord zmm22, zmm22, 0x07 + vprord zmm23, zmm23, 0x07 + vpaddd zmm16, zmm16, zmm8 + vmovdqa32 zmm7, zmm13 + vpaddd zmm17, zmm17, zmm10 + vpaddd zmm18, zmm18, zmm12 + vpaddd zmm19, zmm19, zmm14 + vpaddd zmm16, zmm16, zmm21 + vpaddd zmm17, zmm17, zmm22 + vpaddd zmm18, zmm18, zmm23 + vpaddd zmm19, zmm19, zmm20 + vpxord zmm31, zmm31, zmm16 + vmovdqa32 zmm10, zmm12 + vpxord zmm28, zmm28, zmm17 + vpxord zmm29, zmm29, zmm18 + vpxord zmm30, zmm30, zmm19 + vprord zmm31, zmm31, 0x10 + vprord zmm28, zmm28, 0x10 + vprord zmm29, zmm29, 0x10 + vprord zmm30, zmm30, 0x10 + vpaddd zmm26, zmm26, zmm31 + vmovdqa32 zmm12, zmm9 + vpaddd zmm27, zmm27, zmm28 + vpaddd zmm24, zmm24, zmm29 + vpaddd zmm25, zmm25, zmm30 + vpxord zmm21, zmm21, zmm26 + vpxord zmm22, zmm22, zmm27 + vpxord zmm23, zmm23, zmm24 + vpxord zmm20, zmm20, zmm25 + vprord zmm21, zmm21, 0x0C + vprord zmm22, zmm22, 0x0C + vprord zmm23, zmm23, 0x0C + vprord zmm20, zmm20, 0x0C + vpaddd zmm16, zmm16, zmm9 + vpaddd zmm17, zmm17, zmm11 + vpaddd zmm18, zmm18, zmm13 + vmovdqa32 zmm13, zmm14 + vpaddd zmm19, zmm19, zmm15 + vpaddd zmm16, zmm16, zmm21 + vpaddd zmm17, zmm17, zmm22 + vpaddd zmm18, zmm18, zmm23 + vmovdqa32 zmm9, zmm11 + vpaddd zmm19, zmm19, zmm20 + vpxord zmm31, zmm31, zmm16 + vpxord zmm28, zmm28, zmm17 + vmovdqa32 zmm14, zmm15 + vpxord zmm29, zmm29, zmm18 + vpxord zmm30, zmm30, zmm19 + vprord zmm31, zmm31, 0x08 + vmovdqa32 zmm11, zmm5 + vprord zmm28, zmm28, 0x08 + vprord zmm29, zmm29, 0x08 + vprord zmm30, zmm30, 0x08 + vmovdqa32 zmm15, zmm8 + vpaddd zmm26, zmm26, zmm31 + vpaddd zmm27, zmm27, zmm28 + vpaddd zmm24, zmm24, zmm29 + vpaddd zmm25, zmm25, zmm30 + vmovdqa32 zmm8, zmm1 + vpxord zmm21, zmm21, zmm26 + vpxord zmm22, zmm22, zmm27 + vpxord zmm23, zmm23, zmm24 + vpxord zmm20, zmm20, zmm25 + vmovdqa32 zmm5, zmmword ptr [rsp+0x80] + vprord zmm21, zmm21, 0x07 + vprord zmm22, zmm22, 0x07 + vprord zmm23, zmm23, 0x07 + vprord zmm20, zmm20, 0x07 + vmovdqa32 zmm1, zmmword ptr [rsp+0xC0] + dec r11b + jnz 4b + vpxord zmm16, zmm16, zmm24 + vpxord zmm17, zmm17, zmm25 + vpxord zmm18, zmm18, zmm26 + vpxord zmm19, zmm19, zmm27 + vpxord zmm20, zmm20, zmm28 + vpxord zmm21, zmm21, zmm29 + vpxord zmm22, zmm22, zmm30 + vpxord zmm23, zmm23, zmm31 + vpunpckldq zmm0, zmm16, zmm18 + vpunpckhdq zmm1, zmm16, zmm18 + vpunpckldq zmm2, zmm17, zmm19 + vpunpckhdq zmm3, zmm17, zmm19 + vpunpckldq zmm4, zmm20, zmm22 + vpunpckhdq zmm5, zmm20, zmm22 + vpunpckldq zmm6, zmm21, zmm23 + vpunpckhdq zmm7, zmm21, zmm23 + vpunpckldq zmm16, zmm0, zmm2 + vpunpckhdq zmm17, zmm0, zmm2 + vpunpckldq zmm18, zmm1, zmm3 + vpunpckhdq zmm19, zmm1, zmm3 + vpunpckldq zmm20, zmm4, zmm6 + vpunpckhdq zmm21, zmm4, zmm6 + vpunpckldq zmm22, zmm5, zmm7 + vpunpckhdq zmm23, zmm5, zmm7 + vpunpckldq zmm0, zmm24, zmm26 + vpunpckhdq zmm1, zmm24, zmm26 + vpunpckldq zmm2, zmm25, zmm27 + vpunpckhdq zmm3, zmm25, zmm27 + vpunpckldq zmm4, zmm28, zmm30 + vpunpckhdq zmm5, zmm28, zmm30 + vpunpckldq zmm6, zmm29, zmm31 + vpunpckhdq zmm7, zmm29, zmm31 + vpunpckldq zmm24, zmm0, zmm2 + vpunpckhdq zmm25, zmm0, zmm2 + vpunpckldq zmm26, zmm1, zmm3 + vpunpckhdq zmm27, zmm1, zmm3 + vpunpckldq zmm28, zmm4, zmm6 + vpunpckhdq zmm29, zmm4, zmm6 + vpunpckldq zmm30, zmm5, zmm7 + vpunpckhdq zmm31, zmm5, zmm7 + vmovdqa32 zmm8, zmmword ptr [rip+INDEX0] + vmovdqa32 zmm9, zmmword ptr [rip+INDEX1] + vmovdqa32 zmm0, zmm16 + vpermt2d zmm0, zmm8, zmm20 + vpermt2d zmm16, zmm9, zmm20 + vmovdqa32 zmm1, zmm24 + vpermt2d zmm1, zmm8, zmm28 + vpermt2d zmm24, zmm9, zmm28 + vmovdqa32 zmm2, zmm17 + vpermt2d zmm2, zmm8, zmm21 + vpermt2d zmm17, zmm9, zmm21 + vmovdqa32 zmm3, zmm25 + vpermt2d zmm3, zmm8, zmm29 + vpermt2d zmm25, zmm9, zmm29 + vmovdqa32 zmm4, zmm18 + vpermt2d zmm4, zmm8, zmm22 + vpermt2d zmm18, zmm9, zmm22 + vmovdqa32 zmm5, zmm26 + vpermt2d zmm5, zmm8, zmm30 + vpermt2d zmm26, zmm9, zmm30 + vmovdqa32 zmm6, zmm19 + vpermt2d zmm6, zmm8, zmm23 + vpermt2d zmm19, zmm9, zmm23 + vmovdqa32 zmm7, zmm27 + vpermt2d zmm7, zmm8, zmm31 + vpermt2d zmm27, zmm9, zmm31 + vbroadcasti64x4 zmm8, ymmword ptr [rcx] + vpxord zmm1, zmm1, zmm8 + vpxord zmm3, zmm3, zmm8 + vpxord zmm5, zmm5, zmm8 + vpxord zmm7, zmm7, zmm8 + vpxord zmm24, zmm24, zmm8 + vpxord zmm25, zmm25, zmm8 + vpxord zmm26, zmm26, zmm8 + vpxord zmm27, zmm27, zmm8 + vextracti64x4 ymmword ptr [r9], zmm0, 0x00 + vextracti64x4 ymmword ptr [r9+0x20], zmm1, 0x00 + vextracti64x4 ymmword ptr [r9+0x40], zmm2, 0x00 + vextracti64x4 ymmword ptr [r9+0x60], zmm3, 0x00 + vextracti64x4 ymmword ptr [r9+0x80], zmm4, 0x00 + vextracti64x4 ymmword ptr [r9+0xA0], zmm5, 0x00 + vextracti64x4 ymmword ptr [r9+0xC0], zmm6, 0x00 + vextracti64x4 ymmword ptr [r9+0xE0], zmm7, 0x00 + vextracti64x4 ymmword ptr [r9+0x100], zmm16, 0x00 + vextracti64x4 ymmword ptr [r9+0x120], zmm24, 0x00 + vextracti64x4 ymmword ptr [r9+0x140], zmm17, 0x00 + vextracti64x4 ymmword ptr [r9+0x160], zmm25, 0x00 + vextracti64x4 ymmword ptr [r9+0x180], zmm18, 0x00 + vextracti64x4 ymmword ptr [r9+0x1A0], zmm26, 0x00 + vextracti64x4 ymmword ptr [r9+0x1C0], zmm19, 0x00 + vextracti64x4 ymmword ptr [r9+0x1E0], zmm27, 0x00 + vextracti64x4 ymmword ptr [r9+0x200], zmm0, 0x01 + vextracti64x4 ymmword ptr [r9+0x220], zmm1, 0x01 + cmp rax, 0x0A + jb 9f + vextracti64x4 ymmword ptr [r9+0x240], zmm2, 0x01 + vextracti64x4 ymmword ptr [r9+0x260], zmm3, 0x01 + cmp rax, 0x0B + jb 9f + vextracti64x4 ymmword ptr [r9+0x280], zmm4, 0x01 + vextracti64x4 ymmword ptr [r9+0x2A0], zmm5, 0x01 + cmp rax, 0x0C + jb 9f + vextracti64x4 ymmword ptr [r9+0x2C0], zmm6, 0x01 + vextracti64x4 ymmword ptr [r9+0x2E0], zmm7, 0x01 + cmp rax, 0x0D + jb 9f + vextracti64x4 ymmword ptr [r9+0x300], zmm16, 0x01 + vextracti64x4 ymmword ptr [r9+0x320], zmm24, 0x01 + cmp rax, 0x0E + jb 9f + vextracti64x4 ymmword ptr [r9+0x340], zmm17, 0x01 + vextracti64x4 ymmword ptr [r9+0x360], zmm25, 0x01 + cmp rax, 0x0F + jb 9f + vextracti64x4 ymmword ptr [r9+0x380], zmm18, 0x01 + vextracti64x4 ymmword ptr [r9+0x3A0], zmm26, 0x01 + cmp rax, 0x10 + jb 9f + vextracti64x4 ymmword ptr [r9+0x3C0], zmm19, 0x01 + vextracti64x4 ymmword ptr [r9+0x3E0], zmm27, 0x01 + vmovdqa32 zmm0, zmmword ptr [rsp] + vmovdqa32 zmm1, zmmword ptr [rsp+0x40] + vpaddd zmm2, zmm0, dword ptr [rip+ADD16] {1to16} + vpcmpud k1, zmm2, zmm0, 0x01 + vpaddd zmm1 {k1}, zmm1, dword ptr [rip+ADD1] {1to16} + vmovdqa32 zmmword ptr [rsp], zmm2 + vmovdqa32 zmmword ptr [rsp+0x40], zmm1 + add r9, 0x400 + cmp rax, 0x18 + lea rax, qword ptr [rax-0x10] + jnbe 3b + test al, al + jnz 2f +9: + vzeroupper + movdqa xmm6, xmmword ptr [rbp-0xA0] + movdqa xmm7, xmmword ptr [rbp-0x90] + movdqa xmm8, xmmword ptr [rbp-0x80] + movdqa xmm9, xmmword ptr [rbp-0x70] + movdqa xmm10, xmmword ptr [rbp-0x60] + movdqa xmm11, xmmword ptr [rbp-0x50] + movdqa xmm12, xmmword ptr [rbp-0x40] + movdqa xmm13, xmmword ptr [rbp-0x30] + movdqa xmm14, xmmword ptr [rbp-0x20] + movdqa xmm15, xmmword ptr [rbp-0x10] + mov rsp, rbp + pop rbp + ret +2: + cmp al, 0x04 + jbe 2f + vpbroadcastd ymm16, dword ptr [rdx] + vpbroadcastd ymm17, dword ptr [rdx+0x04] + vpbroadcastd ymm18, dword ptr [rdx+0x08] + vpbroadcastd ymm19, dword ptr [rdx+0x0C] + vpbroadcastd ymm20, dword ptr [rdx+0x10] + vpbroadcastd ymm21, dword ptr [rdx+0x14] + vpbroadcastd ymm22, dword ptr [rdx+0x18] + vpbroadcastd ymm23, dword ptr [rdx+0x1C] + vpbroadcastd ymm24, dword ptr [rdx+0x20] + vpbroadcastd ymm25, dword ptr [rdx+0x24] + vpbroadcastd ymm26, dword ptr [rdx+0x28] + vpbroadcastd ymm27, dword ptr [rdx+0x2C] + vpbroadcastd ymm28, dword ptr [rdx+0x30] + vpbroadcastd ymm29, dword ptr [rdx+0x34] + vpbroadcastd ymm30, dword ptr [rdx+0x38] + vpbroadcastd ymm31, dword ptr [rdx+0x3C] + vpbroadcastd ymm0, dword ptr [rcx] + vpbroadcastd ymm1, dword ptr [rcx+0x04] + vpbroadcastd ymm2, dword ptr [rcx+0x08] + vpbroadcastd ymm3, dword ptr [rcx+0x0C] + vpbroadcastd ymm4, dword ptr [rcx+0x10] + vpbroadcastd ymm5, dword ptr [rcx+0x14] + vpbroadcastd ymm6, dword ptr [rcx+0x18] + vpbroadcastd ymm7, dword ptr [rcx+0x1C] + vpbroadcastd ymm8, dword ptr [rip+BLAKE3_IV_0] + vpbroadcastd ymm9, dword ptr [rip+BLAKE3_IV_1] + vpbroadcastd ymm10, dword ptr [rip+BLAKE3_IV_2] + vpbroadcastd ymm11, dword ptr [rip+BLAKE3_IV_3] + vmovdqa ymm12, ymmword ptr [rsp] + vmovdqa ymm13, ymmword ptr [rsp+0x40] + vpbroadcastd ymm14, r8d + vpbroadcastd ymm15, r10d + mov r11b, 0x07 +3: + vpaddd ymm0, ymm0, ymm16 + vpaddd ymm1, ymm1, ymm18 + vpaddd ymm2, ymm2, ymm20 + vpaddd ymm3, ymm3, ymm22 + vmovdqa32 ymmword ptr [rsp+0x80], ymm16 + vmovdqa32 ymmword ptr [rsp+0xC0], ymm22 + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vpxord ymm12, ymm12, ymm0 + vmovdqa32 ymm16, ymm18 + 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 + vmovdqa32 ymm22, ymm20 + 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, 0x0C + vprord ymm5, ymm5, 0x0C + vprord ymm6, ymm6, 0x0C + vprord ymm7, ymm7, 0x0C + vpaddd ymm0, ymm0, ymm17 + vpaddd ymm1, ymm1, ymm19 + vpaddd ymm2, ymm2, ymm21 + vpaddd ymm3, ymm3, ymm23 + vpaddd ymm0, ymm0, ymm4 + vmovdqa32 ymm18, ymm19 + 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, 0x08 + vmovdqa32 ymm20, ymm23 + vprord ymm13, ymm13, 0x08 + vprord ymm14, ymm14, 0x08 + vprord ymm15, ymm15, 0x08 + vpaddd ymm8, ymm8, ymm12 + vpaddd ymm9, ymm9, ymm13 + vpaddd ymm10, ymm10, ymm14 + vpaddd ymm11, ymm11, ymm15 + vpxord ymm4, ymm4, ymm8 + vmovdqa32 ymm19, ymm26 + vpxord ymm5, ymm5, ymm9 + vpxord ymm6, ymm6, ymm10 + vpxord ymm7, ymm7, ymm11 + vprord ymm4, ymm4, 0x07 + vprord ymm5, ymm5, 0x07 + vprord ymm6, ymm6, 0x07 + vprord ymm7, ymm7, 0x07 + vpaddd ymm0, ymm0, ymm24 + vmovdqa32 ymm23, ymm29 + 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 + vmovdqa32 ymm26, ymm28 + 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 + vmovdqa32 ymm28, ymm25 + 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, 0x0C + vprord ymm6, ymm6, 0x0C + vprord ymm7, ymm7, 0x0C + vprord ymm4, ymm4, 0x0C + vpaddd ymm0, ymm0, ymm25 + vpaddd ymm1, ymm1, ymm27 + vpaddd ymm2, ymm2, ymm29 + vmovdqa32 ymm29, ymm30 + vpaddd ymm3, ymm3, ymm31 + vpaddd ymm0, ymm0, ymm5 + vpaddd ymm1, ymm1, ymm6 + vpaddd ymm2, ymm2, ymm7 + vmovdqa32 ymm25, ymm27 + vpaddd ymm3, ymm3, ymm4 + vpxord ymm15, ymm15, ymm0 + vpxord ymm12, ymm12, ymm1 + vmovdqa32 ymm30, ymm31 + vpxord ymm13, ymm13, ymm2 + vpxord ymm14, ymm14, ymm3 + vprord ymm15, ymm15, 0x08 + vmovdqa32 ymm27, ymm21 + vprord ymm12, ymm12, 0x08 + vprord ymm13, ymm13, 0x08 + vprord ymm14, ymm14, 0x08 + vmovdqa32 ymm31, ymm24 + vpaddd ymm10, ymm10, ymm15 + vpaddd ymm11, ymm11, ymm12 + vpaddd ymm8, ymm8, ymm13 + vpaddd ymm9, ymm9, ymm14 + vmovdqa32 ymm24, ymm17 + vpxord ymm5, ymm5, ymm10 + vpxord ymm6, ymm6, ymm11 + vpxord ymm7, ymm7, ymm8 + vpxord ymm4, ymm4, ymm9 + vmovdqa32 ymm21, ymmword ptr [rsp+0x80] + vprord ymm5, ymm5, 0x07 + vprord ymm6, ymm6, 0x07 + vprord ymm7, ymm7, 0x07 + vprord ymm4, ymm4, 0x07 + vmovdqa32 ymm17, ymmword ptr [rsp+0xC0] + dec r11b + jnz 3b + vpxord ymm0, ymm0, ymm8 + vpxord ymm8, ymm8, dword ptr [rcx] {1to8} + vpxord ymm1, ymm1, ymm9 + vpxord ymm9, ymm9, dword ptr [rcx+0x04] {1to8} + vpxord ymm2, ymm2, ymm10 + vpxord ymm10, ymm10, dword ptr [rcx+0x08] {1to8} + vpxord ymm3, ymm3, ymm11 + vpxord ymm11, ymm11, dword ptr [rcx+0x0C] {1to8} + vpxord ymm4, ymm4, ymm12 + vpxord ymm12, ymm12, dword ptr [rcx+0x10] {1to8} + vpxord ymm5, ymm5, ymm13 + vpxord ymm13, ymm13, dword ptr [rcx+0x14] {1to8} + vpxord ymm6, ymm6, ymm14 + vpxord ymm14, ymm14, dword ptr [rcx+0x18] {1to8} + vpxord ymm7, ymm7, ymm15 + vpxord ymm15, ymm15, dword ptr [rcx+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, 0x00 + vshufi32x4 ymm17, ymm8, ymm12, 0x00 + vshufi32x4 ymm18, ymm1, ymm5, 0x00 + vshufi32x4 ymm19, ymm9, ymm13, 0x00 + vshufi32x4 ymm20, ymm2, ymm6, 0x00 + vshufi32x4 ymm21, ymm10, ymm14, 0x00 + vshufi32x4 ymm22, ymm3, ymm7, 0x00 + vshufi32x4 ymm23, ymm11, ymm15, 0x00 + vshufi32x4 ymm24, ymm0, ymm4, 0x03 + vshufi32x4 ymm25, ymm8, ymm12, 0x03 + vshufi32x4 ymm26, ymm1, ymm5, 0x03 + vshufi32x4 ymm27, ymm9, ymm13, 0x03 + vshufi32x4 ymm28, ymm2, ymm6, 0x03 + vshufi32x4 ymm29, ymm10, ymm14, 0x03 + vshufi32x4 ymm30, ymm3, ymm7, 0x03 + vshufi32x4 ymm31, ymm11, ymm15, 0x03 + 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 + cmp al, 0x06 + jb 3f + vmovdqu32 ymmword ptr [r9+0x140], ymm26 + vmovdqu32 ymmword ptr [r9+0x160], ymm27 + cmp al, 0x07 + jb 3f + vmovdqu32 ymmword ptr [r9+0x180], ymm28 + vmovdqu32 ymmword ptr [r9+0x1A0], ymm29 + cmp al, 0x08 + jb 3f + vmovdqu32 ymmword ptr [r9+0x1C0], ymm30 + vmovdqu32 ymmword ptr [r9+0x1E0], ymm31 +3: + jmp 9b + mov r11d, 0xAAAA + kmovw k1, r11d + mov r11d, 0x8888 + kmovw k2, r11d + mov r11d, 0x55 + kmovw k3, r11d + mov r11d, r10d + shl r11, 0x20 + or r11, r8 + cmp al, 0x02 + jbe 2f + vbroadcasti32x4 zmm0, xmmword ptr [rcx] + vbroadcasti32x4 zmm1, xmmword ptr [rcx+0x10] + vbroadcasti32x4 zmm2, xmmword ptr [rip+BLAKE3_IV] + vmovdqa32 xmm4, xmmword ptr [rsp] + vmovdqa32 xmm5, xmmword ptr [rsp+0x40] + vpbroadcastq zmm3, r11 + vpunpckldq xmm6, xmm4, xmm5 + vpunpckhdq xmm5, xmm4, xmm5 + vinserti64x4 zmm6, zmm6, ymm5, 0x01 + vpermq zmm3 {k3}, zmm6, 0xDC + vbroadcasti32x4 zmm8, xmmword ptr [rdx] + vbroadcasti32x4 zmm9, xmmword ptr [rdx+0x10] + vshufps zmm4, zmm8, zmm9, 0x88 + vshufps zmm5, zmm8, zmm9, 0xDD + vbroadcasti32x4 zmm8, xmmword ptr [rdx+0x20] + vbroadcasti32x4 zmm9, xmmword ptr [rdx+0x30] + vshufps zmm6, zmm8, zmm9, 0x88 + vshufps zmm7, zmm8, zmm9, 0xDD + vpshufd zmm6, zmm6, 0x93 + vpshufd zmm7, zmm7, 0x93 + mov r8b, 0x07 +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, 0x0C + vpaddd zmm0, zmm0, zmm5 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 0x08 + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 0x07 + 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, 0x0C + vpaddd zmm0, zmm0, zmm7 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 0x08 + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 0x07 + vpshufd zmm0, zmm0, 0x39 + vpshufd zmm3, zmm3, 0x4E + vpshufd zmm2, zmm2, 0x93 + dec r8b + jz 3f + vshufps zmm8, zmm4, zmm5, 0xD6 + vpshufd zmm9, zmm4, 0x0F + vpshufd zmm4, zmm8, 0x39 + vshufps zmm8, zmm6, zmm7, 0xFA + vpblendmd zmm9 {k1}, zmm9, zmm8 + vpunpcklqdq zmm8, zmm7, zmm5 + vpblendmd zmm8 {k2}, 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 zmm4, xmmword ptr [rcx] + vbroadcasti32x4 zmm5, xmmword ptr [rcx+0x10] + vpxord zmm2, zmm2, zmm4 + vpxord zmm3, zmm3, zmm5 + 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, 0x01 + vextracti128 xmmword ptr [r9+0x50], ymm1, 0x01 + vextracti128 xmmword ptr [r9+0x60], ymm2, 0x01 + vextracti128 xmmword ptr [r9+0x70], ymm3, 0x01 + vextracti32x4 xmmword ptr [r9+0x80], zmm0, 0x02 + vextracti32x4 xmmword ptr [r9+0x90], zmm1, 0x02 + vextracti32x4 xmmword ptr [r9+0xA0], zmm2, 0x02 + vextracti32x4 xmmword ptr [r9+0xB0], zmm3, 0x02 + cmp al, 0x04 + jb 3f + vextracti32x4 xmmword ptr [r9+0xC0], zmm0, 0x03 + vextracti32x4 xmmword ptr [r9+0xD0], zmm1, 0x03 + vextracti32x4 xmmword ptr [r9+0xE0], zmm2, 0x03 + vextracti32x4 xmmword ptr [r9+0xF0], zmm3, 0x03 +3: + jmp 9b +2: + test al, al + jz 9b + vbroadcasti32x4 ymm0, xmmword ptr [rcx] + vbroadcasti32x4 ymm1, xmmword ptr [rcx+0x10] + vbroadcasti32x4 ymm2, xmmword ptr [rip+BLAKE3_IV] + vmovdqa xmm4, xmmword ptr [rsp] + vmovdqa xmm5, xmmword ptr [rsp+0x40] + vpbroadcastq ymm3, r11 + vpunpckldq xmm6, xmm4, xmm5 + vpunpckhdq xmm5, xmm4, xmm5 + vinserti128 ymm6, ymm6, xmm5, 0x01 + vpermq ymm3 {k3}, ymm6, 0xDC + vbroadcasti32x4 ymm8, xmmword ptr [rdx] + vbroadcasti32x4 ymm9, xmmword ptr [rdx+0x10] + vshufps ymm4, ymm8, ymm9, 0x88 + vshufps ymm5, ymm8, ymm9, 0xDD + vbroadcasti32x4 ymm8, xmmword ptr [rdx+0x20] + vbroadcasti32x4 ymm9, xmmword ptr [rdx+0x30] + vshufps ymm6, ymm8, ymm9, 0x88 + vshufps ymm7, ymm8, ymm9, 0xDD + vpshufd ymm6, ymm6, 0x93 + vpshufd ymm7, ymm7, 0x93 + mov r8b, 0x07 +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, 0x0C + vpaddd ymm0, ymm0, ymm5 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 0x08 + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 0x07 + 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, 0x0C + vpaddd ymm0, ymm0, ymm7 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 0x08 + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 0x07 + vpshufd ymm0, ymm0, 0x39 + vpshufd ymm3, ymm3, 0x4E + vpshufd ymm2, ymm2, 0x93 + dec r8b + jz 3f + vshufps ymm8, ymm4, ymm5, 0xD6 + vpshufd ymm9, ymm4, 0x0F + 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: + vpxord ymm0, ymm0, ymm2 + vpxord ymm1, ymm1, ymm3 + vbroadcasti128 ymm4, xmmword ptr [rcx] + vbroadcasti128 ymm5, xmmword ptr [rcx+0x10] + vpxord ymm2, ymm2, ymm4 + vpxord ymm3, ymm3, ymm5 + vmovdqu xmmword ptr [r9], xmm0 + vmovdqu xmmword ptr [r9+0x10], xmm1 + vmovdqu xmmword ptr [r9+0x20], xmm2 + vmovdqu xmmword ptr [r9+0x30], xmm3 + cmp al, 0x02 + jb 3f + vextracti128 xmmword ptr [r9+0x40], ymm0, 0x01 + vextracti128 xmmword ptr [r9+0x50], ymm1, 0x01 + vextracti128 xmmword ptr [r9+0x60], ymm2, 0x01 + vextracti128 xmmword ptr [r9+0x70], ymm3, 0x01 +3: + jmp 9b + .section .rdata .p2align 6 +ADD0: + .long 0, 1, 2, 3, 4, 5, 6, 7 + .long 8, 9, 10, 11, 12, 13, 14, 15 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 @@ -2613,3 +2206,7 @@ BLAKE3_IV_2: .long 0x3C6EF372 BLAKE3_IV_3: .long 0xA54FF53A +ADD1: .long 1 +ADD16: .long 16 +BLAKE3_BLOCK_LEN: + .long 64 diff --git a/c/blake3_avx512_x86-64_windows_msvc.asm b/c/blake3_avx512_x86-64_windows_msvc.asm index b19efbaae..caa772c58 100644 --- a/c/blake3_avx512_x86-64_windows_msvc.asm +++ b/c/blake3_avx512_x86-64_windows_msvc.asm @@ -4,2406 +4,1091 @@ public blake3_compress_in_place_avx512 public _blake3_compress_in_place_avx512 public blake3_compress_xof_avx512 public _blake3_compress_xof_avx512 +public _blake3_xof_many_avx512 +public blake3_xof_many_avx512 _TEXT SEGMENT ALIGN(16) 'CODE' ALIGN 16 blake3_hash_many_avx512 PROC _blake3_hash_many_avx512 PROC - push r15 - push r14 - push r13 - push r12 - push rdi - push rsi - push rbx - push rbp - mov rbp, rsp - sub rsp, 304 - and rsp, 0FFFFFFFFFFFFFFC0H - vmovdqa xmmword ptr [rsp+90H], xmm6 - vmovdqa xmmword ptr [rsp+0A0H], xmm7 - vmovdqa xmmword ptr [rsp+0B0H], xmm8 - vmovdqa xmmword ptr [rsp+0C0H], xmm9 - vmovdqa xmmword ptr [rsp+0D0H], xmm10 - vmovdqa xmmword ptr [rsp+0E0H], xmm11 - vmovdqa xmmword ptr [rsp+0F0H], xmm12 - vmovdqa xmmword ptr [rsp+100H], xmm13 - vmovdqa xmmword ptr [rsp+110H], xmm14 - vmovdqa xmmword ptr [rsp+120H], xmm15 - mov rdi, rcx - mov rsi, rdx - mov rdx, r8 - mov rcx, r9 - mov r8, qword ptr [rbp+68H] - movzx r9, byte ptr [rbp+70H] - 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] - vpaddd ymm3, ymm0, ymmword ptr [ADD0+32] - vpcmpud k2, ymm2, ymm0, 1 - vpcmpud k3, ymm3, ymm0, 1 - ; XXX: ml64.exe does not currently understand the syntax. We use a workaround. - vpbroadcastd ymm6, dword ptr [ADD1] - vpaddd ymm4 {k2}, ymm4, ymm6 - vpaddd ymm5 {k3}, ymm5, ymm6 - ; vpaddd ymm4 {k2}, ymm4, dword ptr [ADD1] {1to8} - ; vpaddd ymm5 {k3}, ymm5, dword ptr [ADD1] {1to8} - knotw k2, k1 - vmovdqa32 ymm2 {k2}, ymm0 - vmovdqa32 ymm3 {k2}, ymm0 - vmovdqa32 ymm4 {k2}, ymm1 - vmovdqa32 ymm5 {k2}, ymm1 + push rbx + push rbp + push rsi + push rdi + push r12 + push r13 + push r14 + push r15 + mov rbp, rsp + sub rsp, 1E8h + movdqa xmmword ptr [rbp-0A8h], xmm6 + movdqa xmmword ptr [rbp-98h], xmm7 + movdqa xmmword ptr [rbp-88h], xmm8 + movdqa xmmword ptr [rbp-78h], xmm9 + movdqa xmmword ptr [rbp-68h], xmm10 + movdqa xmmword ptr [rbp-58h], xmm11 + movdqa xmmword ptr [rbp-48h], xmm12 + movdqa xmmword ptr [rbp-38h], xmm13 + movdqa xmmword ptr [rbp-28h], xmm14 + movdqa xmmword ptr [rbp-18h], xmm15 + and rsp, -40h + mov rax, qword ptr [rbp+68h] + movzx ebx, byte ptr [rbp+70h] + neg ebx + kmovw k1, ebx + vpbroadcastd ymm0, eax + shr rax, 20h + vpbroadcastd ymm1, eax + vmovdqa32 ymm2 {k1} {z}, ymmword ptr [ADD0] + vmovdqa32 ymm3 {k1} {z}, ymmword ptr [ADD0+32] + vpaddd ymm2, ymm0, ymm2 vmovdqa ymmword ptr [rsp], ymm2 - vmovdqa ymmword ptr [rsp+20H], ymm3 - vmovdqa ymmword ptr [rsp+40H], ymm4 - vmovdqa ymmword ptr [rsp+60H], ymm5 - shl rdx, 6 - mov qword ptr [rsp+80H], rdx - cmp rsi, 16 - jc final15blocks -outerloop16: - vpbroadcastd zmm0, dword ptr [rcx] - vpbroadcastd zmm1, dword ptr [rcx+1H*4H] - vpbroadcastd zmm2, dword ptr [rcx+2H*4H] - vpbroadcastd zmm3, dword ptr [rcx+3H*4H] - vpbroadcastd zmm4, dword ptr [rcx+4H*4H] - vpbroadcastd zmm5, dword ptr [rcx+5H*4H] - vpbroadcastd zmm6, dword ptr [rcx+6H*4H] - vpbroadcastd zmm7, dword ptr [rcx+7H*4H] - movzx eax, byte ptr [rbp+78H] - movzx ebx, byte ptr [rbp+80H] - or eax, ebx - xor edx, edx + vpaddd ymm3, ymm0, ymm3 + vmovdqa ymmword ptr [rsp+20h], ymm3 + vpcmpud k2 {k1}, ymm2, ymm0, 1h + vpcmpud k3 {k1}, ymm3, ymm0, 1h + vmovdqa ymm2, ymm1 + vpaddd ymm2 {k2}, ymm2, dword bcst [ADD1] + vmovdqa ymmword ptr [rsp+40h], ymm2 + vpaddd ymm1 {k3}, ymm1, dword bcst [ADD1] + vmovdqa ymmword ptr [rsp+60h], ymm1 + shl r8, 6h + mov qword ptr [rsp+100h], r8 + cmp rdx, 10h + jb final15blocks ALIGN 16 +outerloop16: + vpbroadcastd zmm0, dword ptr [r9] + vpbroadcastd zmm1, dword ptr [r9+4h] + vpbroadcastd zmm2, dword ptr [r9+8h] + vpbroadcastd zmm3, dword ptr [r9+0Ch] + vpbroadcastd zmm4, dword ptr [r9+10h] + vpbroadcastd zmm5, dword ptr [r9+14h] + vpbroadcastd zmm6, dword ptr [r9+18h] + vpbroadcastd zmm7, dword ptr [r9+1Ch] + movzx eax, byte ptr [rbp+78h] + movzx ebx, byte ptr [rbp+80h] + or eax, ebx + xor ebx, ebx innerloop16: - movzx ebx, byte ptr [rbp+88H] - or ebx, eax - add rdx, 64 - cmp rdx, qword ptr [rsp+80H] - cmove eax, ebx - mov dword ptr [rsp+88H], eax - mov r8, qword ptr [rdi] - mov r9, qword ptr [rdi+8H] - mov r10, qword ptr [rdi+10H] - mov r11, qword ptr [rdi+18H] - mov r12, qword ptr [rdi+40H] - mov r13, qword ptr [rdi+48H] - mov r14, qword ptr [rdi+50H] - mov r15, qword ptr [rdi+58H] - vmovdqu32 ymm16, ymmword ptr [rdx+r8-2H*20H] - vinserti64x4 zmm16, zmm16, ymmword ptr [rdx+r12-2H*20H], 01H - vmovdqu32 ymm17, ymmword ptr [rdx+r9-2H*20H] - vinserti64x4 zmm17, zmm17, ymmword ptr [rdx+r13-2H*20H], 01H - vpunpcklqdq zmm8, zmm16, zmm17 - vpunpckhqdq zmm9, zmm16, zmm17 - vmovdqu32 ymm18, ymmword ptr [rdx+r10-2H*20H] - vinserti64x4 zmm18, zmm18, ymmword ptr [rdx+r14-2H*20H], 01H - vmovdqu32 ymm19, ymmword ptr [rdx+r11-2H*20H] - vinserti64x4 zmm19, zmm19, ymmword ptr [rdx+r15-2H*20H], 01H - vpunpcklqdq zmm10, zmm18, zmm19 - vpunpckhqdq zmm11, zmm18, zmm19 - mov r8, qword ptr [rdi+20H] - mov r9, qword ptr [rdi+28H] - mov r10, qword ptr [rdi+30H] - mov r11, qword ptr [rdi+38H] - mov r12, qword ptr [rdi+60H] - mov r13, qword ptr [rdi+68H] - mov r14, qword ptr [rdi+70H] - mov r15, qword ptr [rdi+78H] - vmovdqu32 ymm16, ymmword ptr [rdx+r8-2H*20H] - vinserti64x4 zmm16, zmm16, ymmword ptr [rdx+r12-2H*20H], 01H - vmovdqu32 ymm17, ymmword ptr [rdx+r9-2H*20H] - vinserti64x4 zmm17, zmm17, ymmword ptr [rdx+r13-2H*20H], 01H - vpunpcklqdq zmm12, zmm16, zmm17 - vpunpckhqdq zmm13, zmm16, zmm17 - vmovdqu32 ymm18, ymmword ptr [rdx+r10-2H*20H] - vinserti64x4 zmm18, zmm18, ymmword ptr [rdx+r14-2H*20H], 01H - vmovdqu32 ymm19, ymmword ptr [rdx+r11-2H*20H] - vinserti64x4 zmm19, zmm19, ymmword ptr [rdx+r15-2H*20H], 01H - vpunpcklqdq zmm14, zmm18, zmm19 - vpunpckhqdq zmm15, zmm18, zmm19 - vmovdqa32 zmm27, zmmword ptr [INDEX0] - vmovdqa32 zmm31, zmmword ptr [INDEX1] - 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+8H] - mov r10, qword ptr [rdi+10H] - mov r11, qword ptr [rdi+18H] - mov r12, qword ptr [rdi+40H] - mov r13, qword ptr [rdi+48H] - mov r14, qword ptr [rdi+50H] - mov r15, qword ptr [rdi+58H] - vmovdqu32 ymm24, ymmword ptr [r8+rdx-1H*20H] - vinserti64x4 zmm24, zmm24, ymmword ptr [r12+rdx-1H*20H], 01H - vmovdqu32 ymm25, ymmword ptr [r9+rdx-1H*20H] - vinserti64x4 zmm25, zmm25, ymmword ptr [r13+rdx-1H*20H], 01H - vpunpcklqdq zmm8, zmm24, zmm25 - vpunpckhqdq zmm9, zmm24, zmm25 - vmovdqu32 ymm24, ymmword ptr [r10+rdx-1H*20H] - vinserti64x4 zmm24, zmm24, ymmword ptr [r14+rdx-1H*20H], 01H - vmovdqu32 ymm25, ymmword ptr [r11+rdx-1H*20H] - vinserti64x4 zmm25, zmm25, ymmword ptr [r15+rdx-1H*20H], 01H - vpunpcklqdq zmm10, zmm24, zmm25 - vpunpckhqdq zmm11, zmm24, zmm25 - prefetcht0 byte ptr [r8+rdx+80H] - prefetcht0 byte ptr [r12+rdx+80H] - prefetcht0 byte ptr [r9+rdx+80H] - prefetcht0 byte ptr [r13+rdx+80H] - prefetcht0 byte ptr [r10+rdx+80H] - prefetcht0 byte ptr [r14+rdx+80H] - prefetcht0 byte ptr [r11+rdx+80H] - prefetcht0 byte ptr [r15+rdx+80H] - mov r8, qword ptr [rdi+20H] - mov r9, qword ptr [rdi+28H] - mov r10, qword ptr [rdi+30H] - mov r11, qword ptr [rdi+38H] - mov r12, qword ptr [rdi+60H] - mov r13, qword ptr [rdi+68H] - mov r14, qword ptr [rdi+70H] - mov r15, qword ptr [rdi+78H] - vmovdqu32 ymm24, ymmword ptr [r8+rdx-1H*20H] - vinserti64x4 zmm24, zmm24, ymmword ptr [r12+rdx-1H*20H], 01H - vmovdqu32 ymm25, ymmword ptr [r9+rdx-1H*20H] - vinserti64x4 zmm25, zmm25, ymmword ptr [r13+rdx-1H*20H], 01H - vpunpcklqdq zmm12, zmm24, zmm25 - vpunpckhqdq zmm13, zmm24, zmm25 - vmovdqu32 ymm24, ymmword ptr [r10+rdx-1H*20H] - vinserti64x4 zmm24, zmm24, ymmword ptr [r14+rdx-1H*20H], 01H - vmovdqu32 ymm25, ymmword ptr [r11+rdx-1H*20H] - vinserti64x4 zmm25, zmm25, ymmword ptr [r15+rdx-1H*20H], 01H - vpunpcklqdq zmm14, zmm24, zmm25 - vpunpckhqdq zmm15, zmm24, zmm25 - prefetcht0 byte ptr [r8+rdx+80H] - prefetcht0 byte ptr [r12+rdx+80H] - prefetcht0 byte ptr [r9+rdx+80H] - prefetcht0 byte ptr [r13+rdx+80H] - prefetcht0 byte ptr [r10+rdx+80H] - prefetcht0 byte ptr [r14+rdx+80H] - prefetcht0 byte ptr [r11+rdx+80H] - prefetcht0 byte ptr [r15+rdx+80H] - 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] - vpbroadcastd zmm9, dword ptr [BLAKE3_IV_1] - vpbroadcastd zmm10, dword ptr [BLAKE3_IV_2] - vpbroadcastd zmm11, dword ptr [BLAKE3_IV_3] - vmovdqa32 zmm12, zmmword ptr [rsp] - vmovdqa32 zmm13, zmmword ptr [rsp+1H*40H] - vpbroadcastd zmm14, dword ptr [BLAKE3_BLOCK_LEN] - vpbroadcastd zmm15, dword ptr [rsp+22H*4H] - 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+78H] - jne innerloop16 - mov rbx, qword ptr [rbp+90H] - 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, 88H - vshufi32x4 zmm17, zmm1, zmm5, 88H - vshufi32x4 zmm18, zmm2, zmm6, 88H - vshufi32x4 zmm19, zmm3, zmm7, 88H - vshufi32x4 zmm20, zmm0, zmm4, 0DDH - vshufi32x4 zmm21, zmm1, zmm5, 0DDH - vshufi32x4 zmm22, zmm2, zmm6, 0DDH - vshufi32x4 zmm23, zmm3, zmm7, 0DDH - vshufi32x4 zmm0, zmm16, zmm17, 88H - vshufi32x4 zmm1, zmm18, zmm19, 88H - vshufi32x4 zmm2, zmm20, zmm21, 88H - vshufi32x4 zmm3, zmm22, zmm23, 88H - vshufi32x4 zmm4, zmm16, zmm17, 0DDH - vshufi32x4 zmm5, zmm18, zmm19, 0DDH - vshufi32x4 zmm6, zmm20, zmm21, 0DDH - vshufi32x4 zmm7, zmm22, zmm23, 0DDH - vmovdqu32 zmmword ptr [rbx], zmm0 - vmovdqu32 zmmword ptr [rbx+1H*40H], zmm1 - vmovdqu32 zmmword ptr [rbx+2H*40H], zmm2 - vmovdqu32 zmmword ptr [rbx+3H*40H], zmm3 - vmovdqu32 zmmword ptr [rbx+4H*40H], zmm4 - vmovdqu32 zmmword ptr [rbx+5H*40H], zmm5 - vmovdqu32 zmmword ptr [rbx+6H*40H], zmm6 - vmovdqu32 zmmword ptr [rbx+7H*40H], zmm7 - vmovdqa32 zmm0, zmmword ptr [rsp] - vmovdqa32 zmm1, zmmword ptr [rsp+1H*40H] - vmovdqa32 zmm2, zmm0 - ; XXX: ml64.exe does not currently understand the syntax. We use a workaround. - vpbroadcastd zmm4, dword ptr [ADD16] - vpbroadcastd zmm5, dword ptr [ADD1] - vpaddd zmm2{k1}, zmm0, zmm4 - ; vpaddd zmm2{k1}, zmm0, dword ptr [ADD16] ; {1to16} - vpcmpud k2, zmm2, zmm0, 1 - vpaddd zmm1 {k2}, zmm1, zmm5 - ; vpaddd zmm1 {k2}, zmm1, dword ptr [ADD1] ; {1to16} - vmovdqa32 zmmword ptr [rsp], zmm2 - vmovdqa32 zmmword ptr [rsp+1H*40H], zmm1 - add rdi, 128 - add rbx, 512 - mov qword ptr [rbp+90H], rbx - sub rsi, 16 - cmp rsi, 16 - jnc outerloop16 - test rsi, rsi - jne final15blocks + movzx esi, byte ptr [rbp+88h] + or esi, eax + add rbx, 40h + cmp rbx, qword ptr [rsp+100h] + cmovz eax, esi + mov dword ptr [rsp+80h], eax + mov rax, qword ptr [rcx] + mov rsi, qword ptr [rcx+8h] + mov rdi, qword ptr [rcx+10h] + mov r8, qword ptr [rcx+18h] + mov r10, qword ptr [rcx+40h] + mov r11, qword ptr [rcx+48h] + mov r12, qword ptr [rcx+50h] + mov r13, qword ptr [rcx+58h] + vmovdqu32 ymm8, ymmword ptr [rax+rbx*1-40h] + vinserti64x4 zmm8, zmm8, ymmword ptr [r10+rbx*1-40h], 1h + vmovdqu32 ymm9, ymmword ptr [rsi+rbx*1-40h] + vinserti64x4 zmm9, zmm9, ymmword ptr [r11+rbx*1-40h], 1h + vpunpckldq zmm10, zmm8, zmm9 + vpunpckhdq zmm11, zmm8, zmm9 + vmovdqu32 ymm8, ymmword ptr [rdi+rbx*1-40h] + vinserti64x4 zmm8, zmm8, ymmword ptr [r12+rbx*1-40h], 1h + vmovdqu32 ymm9, ymmword ptr [r8+rbx*1-40h] + vinserti64x4 zmm9, zmm9, ymmword ptr [r13+rbx*1-40h], 1h + vpunpckldq zmm12, zmm8, zmm9 + vpunpckhdq zmm13, zmm8, zmm9 + mov rax, qword ptr [rcx+20h] + mov rsi, qword ptr [rcx+28h] + mov rdi, qword ptr [rcx+30h] + mov r8, qword ptr [rcx+38h] + mov r10, qword ptr [rcx+60h] + mov r11, qword ptr [rcx+68h] + mov r12, qword ptr [rcx+70h] + mov r13, qword ptr [rcx+78h] + vmovdqu32 ymm8, ymmword ptr [rax+rbx*1-40h] + vinserti64x4 zmm8, zmm8, ymmword ptr [r10+rbx*1-40h], 1h + vmovdqu32 ymm9, ymmword ptr [rsi+rbx*1-40h] + vinserti64x4 zmm9, zmm9, ymmword ptr [r11+rbx*1-40h], 1h + vpunpckldq zmm14, zmm8, zmm9 + vpunpckhdq zmm15, zmm8, zmm9 + vmovdqu32 ymm8, ymmword ptr [rdi+rbx*1-40h] + vinserti64x4 zmm8, zmm8, ymmword ptr [r12+rbx*1-40h], 1h + vmovdqu32 ymm9, ymmword ptr [r8+rbx*1-40h] + vinserti64x4 zmm9, zmm9, ymmword ptr [r13+rbx*1-40h], 1h + vpunpckldq zmm16, zmm8, zmm9 + vpunpckhdq zmm17, zmm8, zmm9 + vmovdqa32 zmm8, zmmword ptr [INDEX0] + vmovdqa32 zmm9, zmmword ptr [INDEX1] + vpunpcklqdq zmm18, zmm10, zmm12 + vpunpcklqdq zmm20, zmm14, zmm16 + vmovdqa32 zmm19, zmm18 + vpermt2d zmm18, zmm8, zmm20 + vpermt2d zmm19, zmm9, zmm20 + vpunpckhqdq zmm20, zmm10, zmm12 + vpunpckhqdq zmm22, zmm14, zmm16 + vmovdqa32 zmm21, zmm20 + vpermt2d zmm20, zmm8, zmm22 + vpermt2d zmm21, zmm9, zmm22 + vpunpcklqdq zmm10, zmm11, zmm13 + vpunpcklqdq zmm14, zmm15, zmm17 + vmovdqa32 zmm12, zmm10 + vpermt2d zmm10, zmm8, zmm14 + vpermt2d zmm12, zmm9, zmm14 + vpunpckhqdq zmm14, zmm11, zmm13 + vpunpckhqdq zmm22, zmm15, zmm17 + vmovdqa32 zmm16, zmm14 + vpermt2d zmm14, zmm8, zmm22 + vpermt2d zmm16, zmm9, zmm22 + mov rax, qword ptr [rcx] + mov rsi, qword ptr [rcx+8h] + mov rdi, qword ptr [rcx+10h] + mov r8, qword ptr [rcx+18h] + mov r10, qword ptr [rcx+40h] + mov r11, qword ptr [rcx+48h] + mov r12, qword ptr [rcx+50h] + mov r13, qword ptr [rcx+58h] + vmovdqu32 ymm11, ymmword ptr [rax+rbx*1-20h] + vinserti64x4 zmm11, zmm11, ymmword ptr [r10+rbx*1-20h], 1h + vmovdqu32 ymm13, ymmword ptr [rsi+rbx*1-20h] + vinserti64x4 zmm13, zmm13, ymmword ptr [r11+rbx*1-20h], 1h + vpunpckldq zmm15, zmm11, zmm13 + vpunpckhdq zmm17, zmm11, zmm13 + vmovdqu32 ymm11, ymmword ptr [rdi+rbx*1-20h] + vinserti64x4 zmm11, zmm11, ymmword ptr [r12+rbx*1-20h], 1h + vmovdqu32 ymm13, ymmword ptr [r8+rbx*1-20h] + vinserti64x4 zmm13, zmm13, ymmword ptr [r13+rbx*1-20h], 1h + vpunpckldq zmm22, zmm11, zmm13 + vpunpckhdq zmm23, zmm11, zmm13 + prefetcht0 byte ptr [rax+rbx*1+80h] + prefetcht0 byte ptr [rsi+rbx*1+80h] + prefetcht0 byte ptr [rdi+rbx*1+80h] + prefetcht0 byte ptr [r8+rbx*1+80h] + prefetcht0 byte ptr [r10+rbx*1+80h] + prefetcht0 byte ptr [r11+rbx*1+80h] + prefetcht0 byte ptr [r12+rbx*1+80h] + prefetcht0 byte ptr [r13+rbx*1+80h] + mov rax, qword ptr [rcx+20h] + mov rsi, qword ptr [rcx+28h] + mov rdi, qword ptr [rcx+30h] + mov r8, qword ptr [rcx+38h] + mov r10, qword ptr [rcx+60h] + mov r11, qword ptr [rcx+68h] + mov r12, qword ptr [rcx+70h] + mov r13, qword ptr [rcx+78h] + vmovdqu32 ymm11, ymmword ptr [rax+rbx*1-20h] + vinserti64x4 zmm11, zmm11, ymmword ptr [r10+rbx*1-20h], 1h + vmovdqu32 ymm13, ymmword ptr [rsi+rbx*1-20h] + vinserti64x4 zmm13, zmm13, ymmword ptr [r11+rbx*1-20h], 1h + vpunpckldq zmm24, zmm11, zmm13 + vpunpckhdq zmm25, zmm11, zmm13 + vmovdqu32 ymm11, ymmword ptr [rdi+rbx*1-20h] + vinserti64x4 zmm11, zmm11, ymmword ptr [r12+rbx*1-20h], 1h + vmovdqu32 ymm13, ymmword ptr [r8+rbx*1-20h] + vinserti64x4 zmm13, zmm13, ymmword ptr [r13+rbx*1-20h], 1h + vpunpckldq zmm26, zmm11, zmm13 + vpunpckhdq zmm27, zmm11, zmm13 + prefetcht0 byte ptr [rax+rbx*1+80h] + prefetcht0 byte ptr [rsi+rbx*1+80h] + prefetcht0 byte ptr [rdi+rbx*1+80h] + prefetcht0 byte ptr [r8+rbx*1+80h] + prefetcht0 byte ptr [r10+rbx*1+80h] + prefetcht0 byte ptr [r11+rbx*1+80h] + prefetcht0 byte ptr [r12+rbx*1+80h] + prefetcht0 byte ptr [r13+rbx*1+80h] + vpunpcklqdq zmm11, zmm15, zmm22 + vpunpcklqdq zmm28, zmm24, zmm26 + vmovdqa32 zmm13, zmm11 + vpermt2d zmm11, zmm8, zmm28 + vpermt2d zmm13, zmm9, zmm28 + vpunpckhqdq zmm28, zmm15, zmm22 + vpunpckhqdq zmm30, zmm24, zmm26 + vmovdqa32 zmm29, zmm28 + vpermt2d zmm28, zmm8, zmm30 + vpermt2d zmm29, zmm9, zmm30 + vpunpcklqdq zmm15, zmm17, zmm23 + vpunpcklqdq zmm24, zmm25, zmm27 + vmovdqa32 zmm22, zmm15 + vpermt2d zmm15, zmm8, zmm24 + vpermt2d zmm22, zmm9, zmm24 + vpunpckhqdq zmm24, zmm17, zmm23 + vpunpckhqdq zmm26, zmm25, zmm27 + vpermi2d zmm8, zmm24, zmm26 + vpermi2d zmm9, zmm24, zmm26 + vpbroadcastd zmm17, dword ptr [BLAKE3_IV_0] + vpbroadcastd zmm23, dword ptr [BLAKE3_IV_1] + vpbroadcastd zmm24, dword ptr [BLAKE3_IV_2] + vpbroadcastd zmm25, dword ptr [BLAKE3_IV_3] + vmovdqa32 zmm26, zmmword ptr [rsp] + vmovdqa32 zmm27, zmmword ptr [rsp+40h] + vpbroadcastd zmm30, dword ptr [BLAKE3_BLOCK_LEN] + vpbroadcastd zmm31, dword ptr [rsp+80h] + mov al, 7h +@@: + vpaddd zmm0, zmm0, zmm18 + vpaddd zmm1, zmm1, zmm10 + vpaddd zmm2, zmm2, zmm19 + vpaddd zmm3, zmm3, zmm12 + vmovdqa32 zmmword ptr [rsp+80h], zmm18 + vmovdqa32 zmmword ptr [rsp+0C0h], zmm12 + vpaddd zmm0, zmm0, zmm4 + vpaddd zmm1, zmm1, zmm5 + vpaddd zmm2, zmm2, zmm6 + vpaddd zmm3, zmm3, zmm7 + vpxord zmm26, zmm26, zmm0 + vmovdqa32 zmm18, zmm10 + vpxord zmm27, zmm27, zmm1 + vpxord zmm30, zmm30, zmm2 + vpxord zmm31, zmm31, zmm3 + vprord zmm26, zmm26, 10h + vprord zmm27, zmm27, 10h + vprord zmm30, zmm30, 10h + vprord zmm31, zmm31, 10h + vpaddd zmm17, zmm17, zmm26 + vmovdqa32 zmm12, zmm19 + vpaddd zmm23, zmm23, zmm27 + vpaddd zmm24, zmm24, zmm30 + vpaddd zmm25, zmm25, zmm31 + vpxord zmm4, zmm4, zmm17 + vpxord zmm5, zmm5, zmm23 + vpxord zmm6, zmm6, zmm24 + vpxord zmm7, zmm7, zmm25 + vprord zmm4, zmm4, 0Ch + vprord zmm5, zmm5, 0Ch + vprord zmm6, zmm6, 0Ch + vprord zmm7, zmm7, 0Ch + vpaddd zmm0, zmm0, zmm20 + vpaddd zmm1, zmm1, zmm14 + vpaddd zmm2, zmm2, zmm21 + vpaddd zmm3, zmm3, zmm16 + vpaddd zmm0, zmm0, zmm4 + vmovdqa32 zmm10, zmm14 + vpaddd zmm1, zmm1, zmm5 + vpaddd zmm2, zmm2, zmm6 + vpaddd zmm3, zmm3, zmm7 + vpxord zmm26, zmm26, zmm0 + vpxord zmm27, zmm27, zmm1 + vpxord zmm30, zmm30, zmm2 + vpxord zmm31, zmm31, zmm3 + vprord zmm26, zmm26, 8h + vmovdqa32 zmm19, zmm16 + vprord zmm27, zmm27, 8h + vprord zmm30, zmm30, 8h + vprord zmm31, zmm31, 8h + vpaddd zmm17, zmm17, zmm26 + vpaddd zmm23, zmm23, zmm27 + vpaddd zmm24, zmm24, zmm30 + vpaddd zmm25, zmm25, zmm31 + vpxord zmm4, zmm4, zmm17 + vmovdqa32 zmm14, zmm15 + vpxord zmm5, zmm5, zmm23 + vpxord zmm6, zmm6, zmm24 + vpxord zmm7, zmm7, zmm25 + vprord zmm4, zmm4, 7h + vprord zmm5, zmm5, 7h + vprord zmm6, zmm6, 7h + vprord zmm7, zmm7, 7h + vpaddd zmm0, zmm0, zmm11 + vmovdqa32 zmm16, zmm29 + vpaddd zmm1, zmm1, zmm15 + vpaddd zmm2, zmm2, zmm13 + vpaddd zmm3, zmm3, zmm22 + vpaddd zmm0, zmm0, zmm5 + vpaddd zmm1, zmm1, zmm6 + vpaddd zmm2, zmm2, zmm7 + vpaddd zmm3, zmm3, zmm4 + vpxord zmm31, zmm31, zmm0 + vmovdqa32 zmm15, zmm13 + vpxord zmm26, zmm26, zmm1 + vpxord zmm27, zmm27, zmm2 + vpxord zmm30, zmm30, zmm3 + vprord zmm31, zmm31, 10h + vprord zmm26, zmm26, 10h + vprord zmm27, zmm27, 10h + vprord zmm30, zmm30, 10h + vpaddd zmm24, zmm24, zmm31 + vmovdqa32 zmm13, zmm28 + vpaddd zmm25, zmm25, zmm26 + vpaddd zmm17, zmm17, zmm27 + vpaddd zmm23, zmm23, zmm30 + vpxord zmm5, zmm5, zmm24 + vpxord zmm6, zmm6, zmm25 + vpxord zmm7, zmm7, zmm17 + vpxord zmm4, zmm4, zmm23 + vprord zmm5, zmm5, 0Ch + vprord zmm6, zmm6, 0Ch + vprord zmm7, zmm7, 0Ch + vprord zmm4, zmm4, 0Ch + vpaddd zmm0, zmm0, zmm28 + vpaddd zmm1, zmm1, zmm8 + vpaddd zmm2, zmm2, zmm29 + vmovdqa32 zmm29, zmm22 + vpaddd zmm3, zmm3, zmm9 + vpaddd zmm0, zmm0, zmm5 + vpaddd zmm1, zmm1, zmm6 + vpaddd zmm2, zmm2, zmm7 + vmovdqa32 zmm28, zmm8 + vpaddd zmm3, zmm3, zmm4 + vpxord zmm31, zmm31, zmm0 + vpxord zmm26, zmm26, zmm1 + vmovdqa32 zmm22, zmm9 + vpxord zmm27, zmm27, zmm2 + vpxord zmm30, zmm30, zmm3 + vprord zmm31, zmm31, 8h + vmovdqa32 zmm8, zmm21 + vprord zmm26, zmm26, 8h + vprord zmm27, zmm27, 8h + vprord zmm30, zmm30, 8h + vmovdqa32 zmm9, zmm11 + vpaddd zmm24, zmm24, zmm31 + vpaddd zmm25, zmm25, zmm26 + vpaddd zmm17, zmm17, zmm27 + vpaddd zmm23, zmm23, zmm30 + vmovdqa32 zmm11, zmm20 + vpxord zmm5, zmm5, zmm24 + vpxord zmm6, zmm6, zmm25 + vpxord zmm7, zmm7, zmm17 + vpxord zmm4, zmm4, zmm23 + vmovdqa32 zmm21, zmmword ptr [rsp+80h] + vprord zmm5, zmm5, 7h + vprord zmm6, zmm6, 7h + vprord zmm7, zmm7, 7h + vprord zmm4, zmm4, 7h + vmovdqa32 zmm20, zmmword ptr [rsp+0C0h] + dec al + jnz @B + vpxord zmm0, zmm0, zmm17 + vpxord zmm1, zmm1, zmm23 + vpxord zmm2, zmm2, zmm24 + vpxord zmm3, zmm3, zmm25 + vpxord zmm4, zmm4, zmm26 + vpxord zmm5, zmm5, zmm27 + vpxord zmm6, zmm6, zmm30 + vpxord zmm7, zmm7, zmm31 + movzx eax, byte ptr [rbp+78h] + jb innerloop16 + mov rsi, qword ptr [rbp+90h] + vpunpckldq zmm8, zmm0, zmm2 + vpunpckhdq zmm9, zmm0, zmm2 + vpunpckldq zmm10, zmm1, zmm3 + vpunpckhdq zmm11, zmm1, zmm3 + vpunpckldq zmm12, zmm4, zmm6 + vpunpckhdq zmm13, zmm4, zmm6 + vpunpckldq zmm14, zmm5, zmm7 + vpunpckhdq zmm15, zmm5, zmm7 + vpunpckldq zmm0, zmm8, zmm10 + vpunpckhdq zmm1, zmm8, zmm10 + vpunpckldq zmm2, zmm9, zmm11 + vpunpckhdq zmm3, zmm9, zmm11 + vpunpckldq zmm4, zmm12, zmm14 + vpunpckhdq zmm5, zmm12, zmm14 + vpunpckldq zmm6, zmm13, zmm15 + vpunpckhdq zmm7, zmm13, zmm15 + vmovdqa32 zmm16, zmmword ptr [$+1BDh] + vmovdqa32 zmm18, zmmword ptr [$+1F3h] + vmovdqa32 zmm8, zmm0 + vpermt2d zmm8, zmm16, zmm4 + vpermt2d zmm0, zmm18, zmm4 + vmovdqa32 zmm10, zmm1 + vpermt2d zmm10, zmm16, zmm5 + vpermt2d zmm1, zmm18, zmm5 + vmovdqa32 zmm12, zmm2 + vpermt2d zmm12, zmm16, zmm6 + vpermt2d zmm2, zmm18, zmm6 + vmovdqa32 zmm14, zmm3 + vpermt2d zmm14, zmm16, zmm7 + vpermt2d zmm3, zmm18, zmm7 + vextracti64x4 ymmword ptr [rsi], zmm8, 0h + vextracti64x4 ymmword ptr [rsi+20h], zmm10, 0h + vextracti64x4 ymmword ptr [rsi+40h], zmm12, 0h + vextracti64x4 ymmword ptr [rsi+60h], zmm14, 0h + vextracti64x4 ymmword ptr [rsi+80h], zmm0, 0h + vextracti64x4 ymmword ptr [rsi+0A0h], zmm1, 0h + vextracti64x4 ymmword ptr [rsi+0C0h], zmm2, 0h + vextracti64x4 ymmword ptr [rsi+0E0h], zmm3, 0h + vextracti64x4 ymmword ptr [rsi+100h], zmm8, 1h + vextracti64x4 ymmword ptr [rsi+120h], zmm10, 1h + vextracti64x4 ymmword ptr [rsi+140h], zmm12, 1h + vextracti64x4 ymmword ptr [rsi+160h], zmm14, 1h + vextracti64x4 ymmword ptr [rsi+180h], zmm0, 1h + vextracti64x4 ymmword ptr [rsi+1A0h], zmm1, 1h + vextracti64x4 ymmword ptr [rsi+1C0h], zmm2, 1h + vextracti64x4 ymmword ptr [rsi+1E0h], zmm3, 1h + vmovdqa32 zmm8, zmmword ptr [rsp] + vmovdqa32 zmm9, zmmword ptr [rsp+40h] + vmovdqa32 zmm10, zmm8 + vpaddd zmm10 {k1}, zmm8, dword bcst [ADD16] + vpcmpud k2 {k1}, zmm10, zmm8, 1h + vpaddd zmm9 {k2}, zmm9, dword bcst [ADD1] + vmovdqa32 zmmword ptr [rsp], zmm10 + vmovdqa32 zmmword ptr [rsp+40h], zmm9 + add rsi, 200h + mov qword ptr [rbp+90h], rsi + add rcx, 80h + sub rdx, 10h + cmp rdx, 10h + jnb outerloop16 + test rdx, rdx + jnz final15blocks unwind: vzeroupper - vmovdqa xmm6, xmmword ptr [rsp+90H] - vmovdqa xmm7, xmmword ptr [rsp+0A0H] - vmovdqa xmm8, xmmword ptr [rsp+0B0H] - vmovdqa xmm9, xmmword ptr [rsp+0C0H] - vmovdqa xmm10, xmmword ptr [rsp+0D0H] - vmovdqa xmm11, xmmword ptr [rsp+0E0H] - vmovdqa xmm12, xmmword ptr [rsp+0F0H] - vmovdqa xmm13, xmmword ptr [rsp+100H] - vmovdqa xmm14, xmmword ptr [rsp+110H] - vmovdqa xmm15, xmmword ptr [rsp+120H] - mov rsp, rbp - pop rbp - pop rbx - pop rsi - pop rdi - pop r12 - pop r13 - pop r14 - pop r15 + movdqa xmm6, xmmword ptr [rbp-0A8h] + movdqa xmm7, xmmword ptr [rbp-98h] + movdqa xmm8, xmmword ptr [rbp-88h] + movdqa xmm9, xmmword ptr [rbp-78h] + movdqa xmm10, xmmword ptr [rbp-68h] + movdqa xmm11, xmmword ptr [rbp-58h] + movdqa xmm12, xmmword ptr [rbp-48h] + movdqa xmm13, xmmword ptr [rbp-38h] + movdqa xmm14, xmmword ptr [rbp-28h] + movdqa xmm15, xmmword ptr [rbp-18h] + mov rsp, rbp + pop r15 + pop r14 + pop r13 + pop r12 + pop rdi + pop rsi + pop rbp + pop rbx ret -ALIGN 16 +ALIGN 16 final15blocks: - test esi, 8H - je final7blocks - vpbroadcastd ymm0, dword ptr [rcx] - vpbroadcastd ymm1, dword ptr [rcx+4H] - vpbroadcastd ymm2, dword ptr [rcx+8H] - vpbroadcastd ymm3, dword ptr [rcx+0CH] - vpbroadcastd ymm4, dword ptr [rcx+10H] - vpbroadcastd ymm5, dword ptr [rcx+14H] - vpbroadcastd ymm6, dword ptr [rcx+18H] - vpbroadcastd ymm7, dword ptr [rcx+1CH] - mov r8, qword ptr [rdi] - mov r9, qword ptr [rdi+8H] - mov r10, qword ptr [rdi+10H] - mov r11, qword ptr [rdi+18H] - mov r12, qword ptr [rdi+20H] - mov r13, qword ptr [rdi+28H] - mov r14, qword ptr [rdi+30H] - mov r15, qword ptr [rdi+38H] - movzx eax, byte ptr [rbp+78H] - movzx ebx, byte ptr [rbp+80H] - or eax, ebx - xor edx, edx + mov rax, rsp + test dl, 8h + jz final7blocks + vpbroadcastd ymm0, dword ptr [r9] + vpbroadcastd ymm1, dword ptr [r9+4h] + vpbroadcastd ymm2, dword ptr [r9+8h] + vpbroadcastd ymm3, dword ptr [r9+0Ch] + vpbroadcastd ymm4, dword ptr [r9+10h] + vpbroadcastd ymm5, dword ptr [r9+14h] + vpbroadcastd ymm6, dword ptr [r9+18h] + vpbroadcastd ymm7, dword ptr [r9+1Ch] + movzx ebx, byte ptr [rbp+78h] + movzx esi, byte ptr [rbp+80h] + or ebx, esi + xor esi, esi innerloop8: - movzx ebx, byte ptr [rbp+88H] - or ebx, eax - add rdx, 64 - cmp rdx, qword ptr [rsp+80H] - cmove eax, ebx - mov dword ptr [rsp+88H], eax - vmovups xmm8, xmmword ptr [r8+rdx-40H] - vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-40H], 01H - vmovups xmm9, xmmword ptr [r9+rdx-40H] - vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-40H], 01H - vunpcklpd ymm12, ymm8, ymm9 - vunpckhpd ymm13, ymm8, ymm9 - vmovups xmm10, xmmword ptr [r10+rdx-40H] - vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-40H], 01H - vmovups xmm11, xmmword ptr [r11+rdx-40H] - vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-40H], 01H - 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-30H] - vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-30H], 01H - vmovups xmm9, xmmword ptr [r9+rdx-30H] - vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-30H], 01H - vunpcklpd ymm12, ymm8, ymm9 - vunpckhpd ymm13, ymm8, ymm9 - vmovups xmm10, xmmword ptr [r10+rdx-30H] - vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-30H], 01H - vmovups xmm11, xmmword ptr [r11+rdx-30H] - vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-30H], 01H - 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-20H] - vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-20H], 01H - vmovups xmm9, xmmword ptr [r9+rdx-20H] - vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-20H], 01H - vunpcklpd ymm12, ymm8, ymm9 - vunpckhpd ymm13, ymm8, ymm9 - vmovups xmm10, xmmword ptr [r10+rdx-20H] - vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-20H], 01H - vmovups xmm11, xmmword ptr [r11+rdx-20H] - vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-20H], 01H - 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-10H] - vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-10H], 01H - vmovups xmm9, xmmword ptr [r9+rdx-10H] - vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-10H], 01H - vunpcklpd ymm12, ymm8, ymm9 - vunpckhpd ymm13, ymm8, ymm9 - vmovups xmm10, xmmword ptr [r10+rdx-10H] - vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-10H], 01H - vmovups xmm11, xmmword ptr [r11+rdx-10H] - vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-10H], 01H - 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] - vpbroadcastd ymm9, dword ptr [BLAKE3_IV_1] - vpbroadcastd ymm10, dword ptr [BLAKE3_IV_2] - vpbroadcastd ymm11, dword ptr [BLAKE3_IV_3] - vmovdqa ymm12, ymmword ptr [rsp] - vmovdqa ymm13, ymmword ptr [rsp+40H] - vpbroadcastd ymm14, dword ptr [BLAKE3_BLOCK_LEN] - vpbroadcastd ymm15, dword ptr [rsp+88H] - 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+78H] - jne innerloop8 - mov rbx, qword ptr [rbp+90H] + movzx edi, byte ptr [rbp+88h] + or edi, ebx + add rsi, 40h + cmp rsi, qword ptr [rsp+100h] + cmovz ebx, edi + mov dword ptr [rsp+80h], ebx + mov ebx, 0CCh + kmovw k2, ebx + mov ebx, 33h + kmovw k3, ebx + mov rbx, qword ptr [rcx] + mov rdi, qword ptr [rcx+20h] + vmovups xmm8, xmmword ptr [rbx+rsi*1-40h] + vinserti32x4 ymm8, ymm8, xmmword ptr [rdi+rsi*1-40h], 1h + vmovups xmm12, xmmword ptr [rbx+rsi*1-30h] + vinserti32x4 ymm12, ymm12, xmmword ptr [rdi+rsi*1-30h], 1h + mov rbx, qword ptr [rcx+8h] + mov rdi, qword ptr [rcx+28h] + vmovups xmm9, xmmword ptr [rbx+rsi*1-40h] + vinserti32x4 ymm9, ymm9, xmmword ptr [rdi+rsi*1-40h], 1h + vmovups xmm13, xmmword ptr [rbx+rsi*1-30h] + vinserti32x4 ymm13, ymm13, xmmword ptr [rdi+rsi*1-30h], 1h + mov rbx, qword ptr [rcx+10h] + mov rdi, qword ptr [rcx+30h] + vmovups xmm10, xmmword ptr [rbx+rsi*1-40h] + vinserti32x4 ymm10, ymm10, xmmword ptr [rdi+rsi*1-40h], 1h + vmovups xmm14, xmmword ptr [rbx+rsi*1-30h] + vinserti32x4 ymm14, ymm14, xmmword ptr [rdi+rsi*1-30h], 1h + mov rbx, qword ptr [rcx+18h] + mov rdi, qword ptr [rcx+38h] + vmovups xmm11, xmmword ptr [rbx+rsi*1-40h] + vinserti32x4 ymm11, ymm11, xmmword ptr [rdi+rsi*1-40h], 1h + vmovups xmm15, xmmword ptr [rbx+rsi*1-30h] + vinserti32x4 ymm15, ymm15, xmmword ptr [rdi+rsi*1-30h], 1h + vpunpckldq ymm24, ymm8, ymm9 + vpunpckhdq ymm9, ymm8, ymm9 + vpunpckldq ymm8, ymm10, ymm11 + vpunpckhdq ymm11, ymm10, ymm11 + vpunpckldq ymm10, ymm12, ymm13 + vpunpckhdq ymm13, ymm12, ymm13 + vpunpckldq ymm12, ymm14, ymm15 + vpunpckhdq ymm15, ymm14, ymm15 + vshufps ymm14, ymm24, ymm8, 44h + vshufps ymm8, ymm24, ymm8, 0EEh + vshufps ymm24, ymm9, ymm11, 44h + vshufps ymm11, ymm9, ymm11, 0EEh + vshufps ymm9, ymm10, ymm12, 44h + vshufps ymm12, ymm10, ymm12, 0EEh + vshufps ymm10, ymm13, ymm15, 44h + vshufps ymm15, ymm13, ymm15, 0EEh + mov rbx, qword ptr [rcx] + mov rdi, qword ptr [rcx+20h] + vmovups xmm16, xmmword ptr [rbx+rsi*1-20h] + vinserti32x4 ymm16, ymm16, xmmword ptr [rdi+rsi*1-20h], 1h + vmovups xmm20, xmmword ptr [rbx+rsi*1-10h] + vinserti32x4 ymm20, ymm20, xmmword ptr [rdi+rsi*1-10h], 1h + mov rbx, qword ptr [rcx+8h] + mov rdi, qword ptr [rcx+28h] + vmovups xmm17, xmmword ptr [rbx+rsi*1-20h] + vinserti32x4 ymm17, ymm17, xmmword ptr [rdi+rsi*1-20h], 1h + vmovups xmm21, xmmword ptr [rbx+rsi*1-10h] + vinserti32x4 ymm21, ymm21, xmmword ptr [rdi+rsi*1-10h], 1h + mov rbx, qword ptr [rcx+10h] + mov rdi, qword ptr [rcx+30h] + vmovups xmm18, xmmword ptr [rbx+rsi*1-20h] + vinserti32x4 ymm18, ymm18, xmmword ptr [rdi+rsi*1-20h], 1h + vmovups xmm22, xmmword ptr [rbx+rsi*1-10h] + vinserti32x4 ymm22, ymm22, xmmword ptr [rdi+rsi*1-10h], 1h + mov rbx, qword ptr [rcx+18h] + mov rdi, qword ptr [rcx+38h] + vmovups xmm19, xmmword ptr [rbx+rsi*1-20h] + vinserti32x4 ymm19, ymm19, xmmword ptr [rdi+rsi*1-20h], 1h + vmovups xmm23, xmmword ptr [rbx+rsi*1-10h] + vinserti32x4 ymm23, ymm23, xmmword ptr [rdi+rsi*1-10h], 1h + vpunpckldq ymm13, ymm16, ymm17 + vpunpckhdq ymm17, ymm16, ymm17 + vpunpckldq ymm16, ymm18, ymm19 + vpunpckhdq ymm19, ymm18, ymm19 + vpunpckldq ymm18, ymm20, ymm21 + vpunpckhdq ymm21, ymm20, ymm21 + vpunpckldq ymm20, ymm22, ymm23 + vpunpckhdq ymm23, ymm22, ymm23 + vshufps ymm22, ymm13, ymm16, 44h + vshufps ymm16, ymm13, ymm16, 0EEh + vshufps ymm13, ymm17, ymm19, 44h + vshufps ymm19, ymm17, ymm19, 0EEh + vshufps ymm17, ymm18, ymm20, 44h + vshufps ymm20, ymm18, ymm20, 0EEh + vshufps ymm18, ymm21, ymm23, 44h + vshufps ymm23, ymm21, ymm23, 0EEh + vpbroadcastd ymm21, dword ptr [BLAKE3_IV_0] + vpbroadcastd ymm25, dword ptr [BLAKE3_IV_1] + vpbroadcastd ymm26, dword ptr [BLAKE3_IV_2] + vpbroadcastd ymm27, dword ptr [BLAKE3_IV_3] + vmovdqa32 ymm28, ymmword ptr [rax] + vmovdqa32 ymm29, ymmword ptr [rax+40h] + vpbroadcastd ymm30, dword ptr [BLAKE3_BLOCK_LEN] + vpbroadcastd ymm31, dword ptr [rsp+80h] + mov bl, 7h +@@: + vpaddd ymm0, ymm0, ymm14 + vpaddd ymm1, ymm1, ymm24 + vpaddd ymm2, ymm2, ymm9 + vpaddd ymm3, ymm3, ymm10 + vmovdqa32 ymmword ptr [rsp+80h], ymm14 + vmovdqa32 ymmword ptr [rsp+0C0h], ymm10 + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vpxord ymm28, ymm28, ymm0 + vmovdqa32 ymm14, ymm24 + vpxord ymm29, ymm29, ymm1 + vpxord ymm30, ymm30, ymm2 + vpxord ymm31, ymm31, ymm3 + vprord ymm28, ymm28, 10h + vprord ymm29, ymm29, 10h + vprord ymm30, ymm30, 10h + vprord ymm31, ymm31, 10h + vpaddd ymm21, ymm21, ymm28 + vmovdqa32 ymm10, ymm9 + vpaddd ymm25, ymm25, ymm29 + vpaddd ymm26, ymm26, ymm30 + vpaddd ymm27, ymm27, ymm31 + vpxord ymm4, ymm4, ymm21 + vpxord ymm5, ymm5, ymm25 + vpxord ymm6, ymm6, ymm26 + vpxord ymm7, ymm7, ymm27 + vprord ymm4, ymm4, 0Ch + vprord ymm5, ymm5, 0Ch + vprord ymm6, ymm6, 0Ch + vprord ymm7, ymm7, 0Ch + vpaddd ymm0, ymm0, ymm8 + vpaddd ymm1, ymm1, ymm11 + vpaddd ymm2, ymm2, ymm12 + vpaddd ymm3, ymm3, ymm15 + vpaddd ymm0, ymm0, ymm4 + vmovdqa32 ymm24, ymm11 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vpxord ymm28, ymm28, ymm0 + vpxord ymm29, ymm29, ymm1 + vpxord ymm30, ymm30, ymm2 + vpxord ymm31, ymm31, ymm3 + vprord ymm28, ymm28, 8h + vmovdqa32 ymm9, ymm15 + vprord ymm29, ymm29, 8h + vprord ymm30, ymm30, 8h + vprord ymm31, ymm31, 8h + vpaddd ymm21, ymm21, ymm28 + vpaddd ymm25, ymm25, ymm29 + vpaddd ymm26, ymm26, ymm30 + vpaddd ymm27, ymm27, ymm31 + vpxord ymm4, ymm4, ymm21 + vmovdqa32 ymm11, ymm13 + vpxord ymm5, ymm5, ymm25 + vpxord ymm6, ymm6, ymm26 + vpxord ymm7, ymm7, ymm27 + vprord ymm4, ymm4, 7h + vprord ymm5, ymm5, 7h + vprord ymm6, ymm6, 7h + vprord ymm7, ymm7, 7h + vpaddd ymm0, ymm0, ymm22 + vmovdqa32 ymm15, ymm20 + vpaddd ymm1, ymm1, ymm13 + vpaddd ymm2, ymm2, ymm17 + vpaddd ymm3, ymm3, ymm18 + vpaddd ymm0, ymm0, ymm5 + vpaddd ymm1, ymm1, ymm6 + vpaddd ymm2, ymm2, ymm7 + vpaddd ymm3, ymm3, ymm4 + vpxord ymm31, ymm31, ymm0 + vmovdqa32 ymm13, ymm17 + vpxord ymm28, ymm28, ymm1 + vpxord ymm29, ymm29, ymm2 + vpxord ymm30, ymm30, ymm3 + vprord ymm31, ymm31, 10h + vprord ymm28, ymm28, 10h + vprord ymm29, ymm29, 10h + vprord ymm30, ymm30, 10h + vpaddd ymm26, ymm26, ymm31 + vmovdqa32 ymm17, ymm16 + vpaddd ymm27, ymm27, ymm28 + vpaddd ymm21, ymm21, ymm29 + vpaddd ymm25, ymm25, ymm30 + vpxord ymm5, ymm5, ymm26 + vpxord ymm6, ymm6, ymm27 + vpxord ymm7, ymm7, ymm21 + vpxord ymm4, ymm4, ymm25 + vprord ymm5, ymm5, 0Ch + vprord ymm6, ymm6, 0Ch + vprord ymm7, ymm7, 0Ch + vprord ymm4, ymm4, 0Ch + vpaddd ymm0, ymm0, ymm16 + vpaddd ymm1, ymm1, ymm19 + vpaddd ymm2, ymm2, ymm20 + vmovdqa32 ymm20, ymm18 + vpaddd ymm3, ymm3, ymm23 + vpaddd ymm0, ymm0, ymm5 + vpaddd ymm1, ymm1, ymm6 + vpaddd ymm2, ymm2, ymm7 + vmovdqa32 ymm16, ymm19 + vpaddd ymm3, ymm3, ymm4 + vpxord ymm31, ymm31, ymm0 + vpxord ymm28, ymm28, ymm1 + vmovdqa32 ymm18, ymm23 + vpxord ymm29, ymm29, ymm2 + vpxord ymm30, ymm30, ymm3 + vprord ymm31, ymm31, 8h + vmovdqa32 ymm19, ymm12 + vprord ymm28, ymm28, 8h + vprord ymm29, ymm29, 8h + vprord ymm30, ymm30, 8h + vmovdqa32 ymm23, ymm22 + vpaddd ymm26, ymm26, ymm31 + vpaddd ymm27, ymm27, ymm28 + vpaddd ymm21, ymm21, ymm29 + vpaddd ymm25, ymm25, ymm30 + vmovdqa32 ymm22, ymm8 + vpxord ymm5, ymm5, ymm26 + vpxord ymm6, ymm6, ymm27 + vpxord ymm7, ymm7, ymm21 + vpxord ymm4, ymm4, ymm25 + vmovdqa32 ymm12, ymmword ptr [rsp+80h] + vprord ymm5, ymm5, 7h + vprord ymm6, ymm6, 7h + vprord ymm7, ymm7, 7h + vprord ymm4, ymm4, 7h + vmovdqa32 ymm8, ymmword ptr [rsp+0C0h] + dec bl + jnz @B + vpxord ymm0, ymm0, ymm21 + vpxord ymm1, ymm1, ymm25 + vpxord ymm2, ymm2, ymm26 + vpxord ymm3, ymm3, ymm27 + vpxord ymm4, ymm4, ymm28 + vpxord ymm5, ymm5, ymm29 + vpxord ymm6, ymm6, ymm30 + vpxord ymm7, ymm7, ymm31 + movzx ebx, byte ptr [rbp+78h] + jb innerloop8 + mov rdi, qword ptr [rbp+90h] 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, 0CCH - vshufps ymm8, ymm11, ymm0, 78 + vshufps ymm12, ymm8, ymm9, 4Eh + vblendps ymm1, ymm8, ymm12, 0CCh + vshufps ymm8, ymm11, ymm0, 4Eh vunpckhps ymm13, ymm2, ymm3 - vblendps ymm2, ymm11, ymm8, 0CCH - vblendps ymm3, ymm12, ymm9, 0CCH - vperm2f128 ymm12, ymm1, ymm2, 20H - vmovups ymmword ptr [rbx], ymm12 + vblendps ymm2, ymm11, ymm8, 0CCh + vblendps ymm3, ymm12, ymm9, 0CCh + vperm2f128 ymm12, ymm1, ymm2, 20h + vmovups ymmword ptr [rdi], ymm12 vunpckhps ymm14, ymm4, ymm5 - vblendps ymm4, ymm8, ymm0, 0CCH + vblendps ymm4, ymm8, ymm0, 0CCh vunpckhps ymm15, ymm6, ymm7 - vperm2f128 ymm7, ymm3, ymm4, 20H - vmovups ymmword ptr [rbx+20H], ymm7 - vshufps ymm5, ymm10, ymm13, 78 - vblendps ymm6, ymm5, ymm13, 0CCH - vshufps ymm13, ymm14, ymm15, 78 - vblendps ymm10, ymm10, ymm5, 0CCH - vblendps ymm14, ymm14, ymm13, 0CCH - vperm2f128 ymm8, ymm10, ymm14, 20H - vmovups ymmword ptr [rbx+40H], ymm8 - vblendps ymm15, ymm13, ymm15, 0CCH - vperm2f128 ymm13, ymm6, ymm15, 20H - vmovups ymmword ptr [rbx+60H], ymm13 - vperm2f128 ymm9, ymm1, ymm2, 31H - vperm2f128 ymm11, ymm3, ymm4, 31H - vmovups ymmword ptr [rbx+80H], ymm9 - vperm2f128 ymm14, ymm10, ymm14, 31H - vperm2f128 ymm15, ymm6, ymm15, 31H - vmovups ymmword ptr [rbx+0A0H], ymm11 - vmovups ymmword ptr [rbx+0C0H], ymm14 - vmovups ymmword ptr [rbx+0E0H], ymm15 - vmovdqa ymm0, ymmword ptr [rsp] - vmovdqa ymm2, ymmword ptr [rsp+40H] - vmovdqa32 ymm0 {k1}, ymmword ptr [rsp+1H*20H] - vmovdqa32 ymm2 {k1}, ymmword ptr [rsp+3H*20H] - vmovdqa ymmword ptr [rsp], ymm0 - vmovdqa ymmword ptr [rsp+40H], ymm2 - add rbx, 256 - mov qword ptr [rbp+90H], rbx - add rdi, 64 - sub rsi, 8 + vperm2f128 ymm7, ymm3, ymm4, 20h + vmovups ymmword ptr [rdi+20h], ymm7 + vshufps ymm5, ymm10, ymm13, 4Eh + vblendps ymm6, ymm5, ymm13, 0CCh + vshufps ymm13, ymm14, ymm15, 4Eh + vblendps ymm10, ymm10, ymm5, 0CCh + vblendps ymm14, ymm14, ymm13, 0CCh + vperm2f128 ymm8, ymm10, ymm14, 20h + vmovups ymmword ptr [rdi+40h], ymm8 + vblendps ymm15, ymm13, ymm15, 0CCh + vperm2f128 ymm13, ymm6, ymm15, 20h + vmovups ymmword ptr [rdi+60h], ymm13 + vperm2f128 ymm9, ymm1, ymm2, 31h + vperm2f128 ymm11, ymm3, ymm4, 31h + vmovups ymmword ptr [rdi+80h], ymm9 + vperm2f128 ymm14, ymm10, ymm14, 31h + vperm2f128 ymm15, ymm6, ymm15, 31h + vmovups ymmword ptr [rdi+0A0h], ymm11 + vmovups ymmword ptr [rdi+0C0h], ymm14 + vmovups ymmword ptr [rdi+0E0h], ymm15 + lea r8, qword ptr [rax+20h] + kortestw k1, k1 + cmovnz rax, r8 + add rdi, 100h + mov qword ptr [rbp+90h], rdi + add rcx, 40h final7blocks: - mov rbx, qword ptr [rbp+90H] - mov r15, qword ptr [rsp+80H] - movzx r13, byte ptr [rbp+78H] - movzx r12, byte ptr [rbp+88H] - test esi, 4H - je final3blocks - vbroadcasti32x4 zmm0, xmmword ptr [rcx] - vbroadcasti32x4 zmm1, xmmword ptr [rcx+1H*10H] - vmovdqa xmm12, xmmword ptr [rsp] - vmovdqa xmm13, xmmword ptr [rsp+40H] - vpunpckldq xmm14, xmm12, xmm13 - vpunpckhdq xmm15, xmm12, xmm13 - vpermq ymm14, ymm14, 0DCH - vpermq ymm15, ymm15, 0DCH - vpbroadcastd zmm12, dword ptr [BLAKE3_BLOCK_LEN] - vinserti64x4 zmm13, zmm14, ymm15, 01H - mov eax, 17476 - kmovw k2, eax - vpblendmd zmm13 {k2}, zmm13, zmm12 - vbroadcasti32x4 zmm15, xmmword ptr [BLAKE3_IV] - mov r8, qword ptr [rdi] - mov r9, qword ptr [rdi+8H] - mov r10, qword ptr [rdi+10H] - mov r11, qword ptr [rdi+18H] - mov eax, 43690 - kmovw k3, eax - mov eax, 34952 - kmovw k4, eax - movzx eax, byte ptr [rbp+80H] - or eax, r13d - xor edx, edx -ALIGN 16 + mov rbx, qword ptr [rbp+90h] + movzx esi, byte ptr [rbp+78h] + movzx edi, byte ptr [rbp+88h] + test dl, 4h + jz final3blocks + vbroadcasti32x4 zmm0, xmmword ptr [r9] + vbroadcasti32x4 zmm1, xmmword ptr [r9+10h] + vbroadcasti32x4 zmm4, xmmword ptr [BLAKE3_IV] + mov r8d, 4444h + kmovw k2, r8d + vmovdqa xmm6, xmmword ptr [rax] + vmovdqa xmm7, xmmword ptr [rax+40h] + vpunpckldq xmm8, xmm6, xmm7 + vpunpckhdq xmm9, xmm6, xmm7 + vpermq ymm8, ymm8, 0DCh + vpermq ymm9, ymm9, 0DCh + vpbroadcastd zmm6, dword ptr [BLAKE3_BLOCK_LEN] + vinserti64x4 zmm5, zmm8, ymm9, 1h + vpblendmd zmm5 {k2}, zmm5, zmm6 + mov r8, qword ptr [rcx] + mov r10, qword ptr [rcx+8h] + mov r11, qword ptr [rcx+10h] + mov r12, qword ptr [rcx+18h] + mov r13d, 0AAAAh + kmovw k2, r13d + mov r13d, 8888h + kmovw k3, r13d + movzx r13d, byte ptr [rbp+80h] + or r13d, esi + xor r14d, r14d innerloop4: - mov r14d, eax - or eax, r12d - add rdx, 64 - cmp rdx, r15 - cmovne eax, r14d - mov dword ptr [rsp+88H], eax - vmovdqa32 zmm2, zmm15 - vpbroadcastd zmm8, dword ptr [rsp+22H*4H] - vpblendmd zmm3 {k4}, zmm13, zmm8 - vmovups zmm8, zmmword ptr [r8+rdx-1H*40H] - vinserti32x4 zmm8, zmm8, xmmword ptr [r9+rdx-4H*10H], 01H - vinserti32x4 zmm8, zmm8, xmmword ptr [r10+rdx-4H*10H], 02H - vinserti32x4 zmm8, zmm8, xmmword ptr [r11+rdx-4H*10H], 03H - vmovups zmm9, zmmword ptr [r8+rdx-30H] - vinserti32x4 zmm9, zmm9, xmmword ptr [r9+rdx-3H*10H], 01H - vinserti32x4 zmm9, zmm9, xmmword ptr [r10+rdx-3H*10H], 02H - vinserti32x4 zmm9, zmm9, xmmword ptr [r11+rdx-3H*10H], 03H - vshufps zmm4, zmm8, zmm9, 136 - vshufps zmm5, zmm8, zmm9, 221 - vmovups zmm8, zmmword ptr [r8+rdx-20H] - vinserti32x4 zmm8, zmm8, xmmword ptr [r9+rdx-2H*10H], 01H - vinserti32x4 zmm8, zmm8, xmmword ptr [r10+rdx-2H*10H], 02H - vinserti32x4 zmm8, zmm8, xmmword ptr [r11+rdx-2H*10H], 03H - vmovups zmm9, zmmword ptr [r8+rdx-10H] - vinserti32x4 zmm9, zmm9, xmmword ptr [r9+rdx-1H*10H], 01H - vinserti32x4 zmm9, zmm9, xmmword ptr [r10+rdx-1H*10H], 02H - vinserti32x4 zmm9, zmm9, xmmword ptr [r11+rdx-1H*10H], 03H - vshufps zmm6, zmm8, zmm9, 136 - vshufps zmm7, zmm8, zmm9, 221 - vpshufd zmm6, zmm6, 93H - vpshufd zmm7, zmm7, 93H - mov al, 7 -roundloop4: - 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, 93H - vpshufd zmm3, zmm3, 4EH - vpshufd zmm2, zmm2, 39H - 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, 39H - vpshufd zmm3, zmm3, 4EH - vpshufd zmm2, zmm2, 93H - dec al - jz endroundloop4 - vshufps zmm8, zmm4, zmm5, 214 - vpshufd zmm9, zmm4, 0FH - vpshufd zmm4, zmm8, 39H - vshufps zmm8, zmm6, zmm7, 250 - vpblendmd zmm9 {k3}, zmm9, zmm8 - vpunpcklqdq zmm8, zmm7, zmm5 - vpblendmd zmm8 {k4}, zmm8, zmm6 - vpshufd zmm8, zmm8, 78H - vpunpckhdq zmm5, zmm5, zmm7 - vpunpckldq zmm6, zmm6, zmm5 - vpshufd zmm7, zmm6, 1EH - vmovdqa32 zmm5, zmm9 - vmovdqa32 zmm6, zmm8 - jmp roundloop4 -endroundloop4: - vpxord zmm0, zmm0, zmm2 - vpxord zmm1, zmm1, zmm3 - mov eax, r13d - cmp rdx, r15 - jne innerloop4 + movzx r15d, byte ptr [rbp+88h] + or r15d, r13d + add r14, 40h + cmp r14, qword ptr [rsp+100h] + cmovz r13d, r15d + mov dword ptr [rsp+80h], r13d + vmovdqa32 zmm2, zmm4 + vpbroadcastd zmm6, dword ptr [rsp+80h] + vpblendmd zmm3 {k3}, zmm5, zmm6 + vmovdqu32 zmm10, zmmword ptr [r8+r14*1-40h] + vinserti32x4 zmm10, zmm10, xmmword ptr [r10+r14*1-40h], 1h + vinserti32x4 zmm10, zmm10, xmmword ptr [r11+r14*1-40h], 2h + vinserti32x4 zmm10, zmm10, xmmword ptr [r12+r14*1-40h], 3h + vmovdqu32 zmm11, zmmword ptr [r8+r14*1-30h] + vinserti32x4 zmm11, zmm11, xmmword ptr [r10+r14*1-30h], 1h + vinserti32x4 zmm11, zmm11, xmmword ptr [r11+r14*1-30h], 2h + vinserti32x4 zmm11, zmm11, xmmword ptr [r12+r14*1-30h], 3h + vshufps zmm6, zmm10, zmm11, 88h + vshufps zmm7, zmm10, zmm11, 0DDh + vmovdqu32 zmm10, zmmword ptr [r8+r14*1-20h] + vinserti32x4 zmm10, zmm10, xmmword ptr [r10+r14*1-20h], 1h + vinserti32x4 zmm10, zmm10, xmmword ptr [r11+r14*1-20h], 2h + vinserti32x4 zmm10, zmm10, xmmword ptr [r12+r14*1-20h], 3h + vmovdqu32 zmm11, zmmword ptr [r8+r14*1-10h] + vinserti32x4 zmm11, zmm11, xmmword ptr [r10+r14*1-10h], 1h + vinserti32x4 zmm11, zmm11, xmmword ptr [r11+r14*1-10h], 2h + vinserti32x4 zmm11, zmm11, xmmword ptr [r12+r14*1-10h], 3h + vshufps zmm8, zmm10, zmm11, 88h + vshufps zmm9, zmm10, zmm11, 0DDh + vpshufd zmm8, zmm8, 93h + vpshufd zmm9, zmm9, 93h + mov r15b, 7h +@@: + vpaddd zmm0, zmm0, zmm6 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 10h + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 0Ch + vpaddd zmm0, zmm0, zmm7 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 8h + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 7h + vpshufd zmm0, zmm0, 93h + vpshufd zmm3, zmm3, 4Eh + vpshufd zmm2, zmm2, 39h + vpaddd zmm0, zmm0, zmm8 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 10h + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 0Ch + vpaddd zmm0, zmm0, zmm9 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 8h + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 7h + vpshufd zmm0, zmm0, 39h + vpshufd zmm3, zmm3, 4Eh + vpshufd zmm2, zmm2, 93h + dec r15b + jz @F + vshufps zmm12, zmm6, zmm7, 0D6h + vpshufd zmm13, zmm6, 0Fh + vpshufd zmm6, zmm12, 39h + vshufps zmm12, zmm8, zmm9, 0FAh + vpblendmd zmm13 {k2}, zmm13, zmm12 + vpunpcklqdq zmm12, zmm9, zmm7 + vpblendmd zmm12 {k3}, zmm12, zmm8 + vpshufd zmm12, zmm12, 78h + vpunpckhdq zmm7, zmm7, zmm9 + vpunpckldq zmm8, zmm8, zmm7 + vpshufd zmm9, zmm8, 1Eh + vmovdqa32 zmm7, zmm13 + vmovdqa32 zmm8, zmm12 + jmp @B +@@: + vpxord zmm0, zmm0, zmm2 + vpxord zmm1, zmm1, zmm3 + mov r13d, esi + jb innerloop4 vmovdqu xmmword ptr [rbx], xmm0 - vmovdqu xmmword ptr [rbx+10H], xmm1 - vextracti128 xmmword ptr [rbx+20H], ymm0, 01H - vextracti128 xmmword ptr [rbx+30H], ymm1, 01H - vextracti32x4 xmmword ptr [rbx+4H*10H], zmm0, 02H - vextracti32x4 xmmword ptr [rbx+5H*10H], zmm1, 02H - vextracti32x4 xmmword ptr [rbx+6H*10H], zmm0, 03H - vextracti32x4 xmmword ptr [rbx+7H*10H], zmm1, 03H - vmovdqa xmm0, xmmword ptr [rsp] - vmovdqa xmm2, xmmword ptr [rsp+40H] - vmovdqa32 xmm0 {k1}, xmmword ptr [rsp+1H*10H] - vmovdqa32 xmm2 {k1}, xmmword ptr [rsp+5H*10H] - vmovdqa xmmword ptr [rsp], xmm0 - vmovdqa xmmword ptr [rsp+40H], xmm2 - add rbx, 128 - add rdi, 32 - sub rsi, 4 + vmovdqu xmmword ptr [rbx+10h], xmm1 + vextracti128 xmmword ptr [rbx+20h], ymm0, 1h + vextracti128 xmmword ptr [rbx+30h], ymm1, 1h + vextracti32x4 xmmword ptr [rbx+40h], zmm0, 2h + vextracti32x4 xmmword ptr [rbx+50h], zmm1, 2h + vextracti32x4 xmmword ptr [rbx+60h], zmm0, 3h + vextracti32x4 xmmword ptr [rbx+70h], zmm1, 3h + lea r15, qword ptr [rax+10h] + kortestw k1, k1 + cmovnz rax, r15 + add rbx, 80h + add rcx, 20h final3blocks: - test esi, 2H - je final1block - vbroadcasti128 ymm0, xmmword ptr [rcx] - vbroadcasti128 ymm1, xmmword ptr [rcx+10H] - vmovd xmm13, dword ptr [rsp] - vpinsrd xmm13, xmm13, dword ptr [rsp+40H], 1 - vpinsrd xmm13, xmm13, dword ptr [BLAKE3_BLOCK_LEN], 2 - vmovd xmm14, dword ptr [rsp+4H] - vpinsrd xmm14, xmm14, dword ptr [rsp+44H], 1 - vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN], 2 - vinserti128 ymm13, ymm13, xmm14, 01H - mov r8, qword ptr [rdi] - mov r9, qword ptr [rdi+8H] - movzx eax, byte ptr [rbp+80H] - or eax, r13d - xor edx, edx -ALIGN 16 + test dl, 2h + jz final1block + vbroadcasti128 ymm0, xmmword ptr [r9] + vbroadcasti128 ymm1, xmmword ptr [r9+10h] + vbroadcasti128 ymm4, xmmword ptr [BLAKE3_IV] + vmovd xmm5, dword ptr [rax] + vpinsrd xmm5, xmm5, dword ptr [rax+40h], 1h + vpinsrd xmm5, xmm5, dword ptr [BLAKE3_BLOCK_LEN], 2h + vmovd xmm6, dword ptr [rax+4h] + vpinsrd xmm6, xmm6, dword ptr [rax+44h], 1h + vpinsrd xmm6, xmm6, dword ptr [BLAKE3_BLOCK_LEN], 2h + vinserti128 ymm5, ymm5, xmm6, 1h + mov r8, qword ptr [rcx] + mov r10, qword ptr [rcx+8h] + mov r11d, esi + movzx r12d, byte ptr [rbp+80h] + or r11d, r12d + xor r12d, r12d innerloop2: - mov r14d, eax - or eax, r12d - add rdx, 64 - cmp rdx, r15 - cmovne eax, r14d - mov dword ptr [rsp+88H], eax - vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV] - vpbroadcastd ymm8, dword ptr [rsp+88H] - vpblendd ymm3, ymm13, ymm8, 88H - vmovups ymm8, ymmword ptr [r8+rdx-40H] - vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-40H], 01H - vmovups ymm9, ymmword ptr [r8+rdx-30H] - vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-30H], 01H - vshufps ymm4, ymm8, ymm9, 136 - vshufps ymm5, ymm8, ymm9, 221 - vmovups ymm8, ymmword ptr [r8+rdx-20H] - vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-20H], 01H - vmovups ymm9, ymmword ptr [r8+rdx-10H] - vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-10H], 01H - vshufps ymm6, ymm8, ymm9, 136 - vshufps ymm7, ymm8, ymm9, 221 - vpshufd ymm6, ymm6, 93H - vpshufd ymm7, ymm7, 93H - mov al, 7 -roundloop2: - 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, 93H - vpshufd ymm3, ymm3, 4EH - vpshufd ymm2, ymm2, 39H - 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, 39H - vpshufd ymm3, ymm3, 4EH - vpshufd ymm2, ymm2, 93H - dec al - jz endroundloop2 - vshufps ymm8, ymm4, ymm5, 214 - vpshufd ymm9, ymm4, 0FH - vpshufd ymm4, ymm8, 39H - vshufps ymm8, ymm6, ymm7, 250 - vpblendd ymm9, ymm9, ymm8, 0AAH - vpunpcklqdq ymm8, ymm7, ymm5 - vpblendd ymm8, ymm8, ymm6, 88H - vpshufd ymm8, ymm8, 78H - vpunpckhdq ymm5, ymm5, ymm7 - vpunpckldq ymm6, ymm6, ymm5 - vpshufd ymm7, ymm6, 1EH - vmovdqa ymm5, ymm9 - vmovdqa ymm6, ymm8 - jmp roundloop2 -endroundloop2: - vpxor ymm0, ymm0, ymm2 - vpxor ymm1, ymm1, ymm3 - mov eax, r13d - cmp rdx, r15 - jne innerloop2 + movzx r13d, byte ptr [rbp+88h] + or r13d, r11d + add r12, 40h + cmp r12, qword ptr [rsp+100h] + cmovz r11d, r13d + mov dword ptr [rsp+80h], r11d + vmovdqa ymm2, ymm4 + vpbroadcastd ymm6, dword ptr [rsp+80h] + vpblendd ymm3, ymm5, ymm6, 88h + vmovdqu ymm10, ymmword ptr [r8+r12*1-40h] + vinserti128 ymm10, ymm10, xmmword ptr [r10+r12*1-40h], 1h + vmovdqu ymm11, ymmword ptr [r8+r12*1-30h] + vinserti128 ymm11, ymm11, xmmword ptr [r10+r12*1-30h], 1h + vshufps ymm6, ymm10, ymm11, 88h + vshufps ymm7, ymm10, ymm11, 0DDh + vmovdqu ymm10, ymmword ptr [r8+r12*1-20h] + vinserti128 ymm10, ymm10, xmmword ptr [r10+r12*1-20h], 1h + vmovdqu ymm11, ymmword ptr [r8+r12*1-10h] + vinserti128 ymm11, ymm11, xmmword ptr [r10+r12*1-10h], 1h + vshufps ymm8, ymm10, ymm11, 88h + vshufps ymm9, ymm10, ymm11, 0DDh + vpshufd ymm8, ymm8, 93h + vpshufd ymm9, ymm9, 93h + mov r13b, 7h +@@: + vpaddd ymm0, ymm0, ymm6 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 10h + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 0Ch + vpaddd ymm0, ymm0, ymm7 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 8h + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 7h + vpshufd ymm0, ymm0, 93h + vpshufd ymm3, ymm3, 4Eh + vpshufd ymm2, ymm2, 39h + vpaddd ymm0, ymm0, ymm8 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 10h + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 0Ch + vpaddd ymm0, ymm0, ymm9 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 8h + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 7h + vpshufd ymm0, ymm0, 39h + vpshufd ymm3, ymm3, 4Eh + vpshufd ymm2, ymm2, 93h + dec r13b + jz @F + vshufps ymm10, ymm6, ymm7, 0D6h + vpshufd ymm11, ymm6, 0Fh + vpshufd ymm6, ymm10, 39h + vshufps ymm10, ymm8, ymm9, 0FAh + vpblendd ymm11, ymm11, ymm10, 0AAh + vpunpcklqdq ymm10, ymm9, ymm7 + vpblendd ymm10, ymm10, ymm8, 88h + vpshufd ymm10, ymm10, 78h + vpunpckhdq ymm7, ymm7, ymm9 + vpunpckldq ymm8, ymm8, ymm7 + vpshufd ymm9, ymm8, 1Eh + vmovdqa ymm7, ymm11 + vmovdqa ymm8, ymm10 + jmp @B +@@: + vpxor ymm0, ymm0, ymm2 + vpxor ymm1, ymm1, ymm3 + mov r11d, esi + jb innerloop2 vmovdqu xmmword ptr [rbx], xmm0 - vmovdqu xmmword ptr [rbx+10H], xmm1 - vextracti128 xmmword ptr [rbx+20H], ymm0, 01H - vextracti128 xmmword ptr [rbx+30H], ymm1, 01H - vmovdqa xmm0, xmmword ptr [rsp] - vmovdqa xmm2, xmmword ptr [rsp+40H] - vmovdqu32 xmm0 {k1}, xmmword ptr [rsp+8H] - vmovdqu32 xmm2 {k1}, xmmword ptr [rsp+48H] - vmovdqa xmmword ptr [rsp], xmm0 - vmovdqa xmmword ptr [rsp+40H], xmm2 - add rbx, 64 - add rdi, 16 - sub rsi, 2 + vmovdqu xmmword ptr [rbx+10h], xmm1 + vextracti128 xmmword ptr [rbx+20h], ymm0, 1h + vextracti128 xmmword ptr [rbx+30h], ymm1, 1h + lea r13, qword ptr [rax+8h] + kortestw k1, k1 + cmovnz rax, r13 + add rbx, 40h + add rcx, 10h final1block: - test esi, 1H - je unwind - vmovdqu xmm0, xmmword ptr [rcx] - vmovdqu xmm1, xmmword ptr [rcx+10H] - vmovd xmm14, dword ptr [rsp] - vpinsrd xmm14, xmm14, dword ptr [rsp+40H], 1 - vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN], 2 - vmovdqa xmm15, xmmword ptr [BLAKE3_IV] - mov r8, qword ptr [rdi] - movzx eax, byte ptr [rbp+80H] - or eax, r13d - xor edx, edx -ALIGN 16 + test dl, 1h + jz unwind + vmovdqu xmm0, xmmword ptr [r9] + vmovdqu xmm1, xmmword ptr [r9+10h] + vmovdqa xmm4, xmmword ptr [BLAKE3_IV] + vmovd xmm5, dword ptr [rax] + vpinsrd xmm5, xmm5, dword ptr [rax+40h], 1h + vpinsrd xmm5, xmm5, dword ptr [BLAKE3_BLOCK_LEN], 2h + mov r8, qword ptr [rcx] + mov r10d, esi + movzx r11d, byte ptr [rbp+80h] + or r10d, r11d + xor r11d, r11d innerloop1: - 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-40H] - vmovups xmm9, xmmword ptr [r8+rdx-30H] - vshufps xmm4, xmm8, xmm9, 136 - vshufps xmm5, xmm8, xmm9, 221 - vmovups xmm8, xmmword ptr [r8+rdx-20H] - vmovups xmm9, xmmword ptr [r8+rdx-10H] - vshufps xmm6, xmm8, xmm9, 136 - vshufps xmm7, xmm8, xmm9, 221 - vpshufd xmm6, xmm6, 93H - vpshufd xmm7, xmm7, 93H - mov al, 7 -roundloop1: - 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, 93H - vpshufd xmm3, xmm3, 4EH - vpshufd xmm2, xmm2, 39H - 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, 39H - vpshufd xmm3, xmm3, 4EH - vpshufd xmm2, xmm2, 93H - dec al - jz endroundloop1 - vshufps xmm8, xmm4, xmm5, 214 - vpshufd xmm9, xmm4, 0FH - vpshufd xmm4, xmm8, 39H - vshufps xmm8, xmm6, xmm7, 250 - vpblendd xmm9, xmm9, xmm8, 0AAH - vpunpcklqdq xmm8, xmm7, xmm5 - vpblendd xmm8, xmm8, xmm6, 88H - vpshufd xmm8, xmm8, 78H - vpunpckhdq xmm5, xmm5, xmm7 - vpunpckldq xmm6, xmm6, xmm5 - vpshufd xmm7, xmm6, 1EH - vmovdqa xmm5, xmm9 - vmovdqa xmm6, xmm8 - jmp roundloop1 -endroundloop1: - vpxor xmm0, xmm0, xmm2 - vpxor xmm1, xmm1, xmm3 - mov eax, r13d - cmp rdx, r15 - jne innerloop1 + movzx r12d, byte ptr [rbp+88h] + or r12d, r10d + add r11, 40h + cmp r11, qword ptr [rsp+100h] + cmovz r10d, r12d + vmovdqa xmm2, xmm4 + vpinsrd xmm3, xmm5, r10d, 3h + vmovdqu xmm10, xmmword ptr [r8+r11*1-40h] + vmovdqu xmm11, xmmword ptr [r8+r11*1-30h] + vshufps xmm6, xmm10, xmm11, 88h + vshufps xmm7, xmm10, xmm11, 0DDh + vmovdqu xmm10, xmmword ptr [r8+r11*1-20h] + vmovdqu xmm11, xmmword ptr [r8+r11*1-10h] + vshufps xmm8, xmm10, xmm11, 88h + vshufps xmm9, xmm10, xmm11, 0DDh + vpshufd xmm8, xmm8, 93h + vpshufd xmm9, xmm9, 93h + mov r12b, 7h +@@: + vpaddd xmm0, xmm0, xmm6 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 10h + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 0Ch + vpaddd xmm0, xmm0, xmm7 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 8h + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 7h + vpshufd xmm0, xmm0, 93h + vpshufd xmm3, xmm3, 4Eh + vpshufd xmm2, xmm2, 39h + vpaddd xmm0, xmm0, xmm8 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 10h + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 0Ch + vpaddd xmm0, xmm0, xmm9 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 8h + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 7h + vpshufd xmm0, xmm0, 39h + vpshufd xmm3, xmm3, 4Eh + vpshufd xmm2, xmm2, 93h + dec r12b + jz @F + vshufps xmm10, xmm6, xmm7, 0D6h + vpshufd xmm11, xmm6, 0Fh + vpshufd xmm6, xmm10, 39h + vshufps xmm10, xmm8, xmm9, 0FAh + vpblendd xmm11, xmm11, xmm10, 0AAh + vpunpcklqdq xmm10, xmm9, xmm7 + vpblendd xmm10, xmm10, xmm8, 88h + vpshufd xmm10, xmm10, 78h + vpunpckhdq xmm7, xmm7, xmm9 + vpunpckldq xmm8, xmm8, xmm7 + vpshufd xmm9, xmm8, 1Eh + vmovdqa xmm7, xmm11 + vmovdqa xmm8, xmm10 + jmp @B +@@: + vpxor xmm0, xmm0, xmm2 + vpxor xmm1, xmm1, xmm3 + mov r10d, esi + jb innerloop1 vmovdqu xmmword ptr [rbx], xmm0 - vmovdqu xmmword ptr [rbx+10H], xmm1 - jmp unwind - + vmovdqu xmmword ptr [rbx+10h], xmm1 + jmp unwind _blake3_hash_many_avx512 ENDP blake3_hash_many_avx512 ENDP @@ -2600,26 +1285,930 @@ _blake3_compress_xof_avx512 PROC _blake3_compress_xof_avx512 ENDP blake3_compress_xof_avx512 ENDP + +ALIGN 16 +blake3_xof_many_avx512 PROC +_blake3_xof_many_avx512 PROC + mov rax, qword ptr [rsp+38h] + cmp rax, 1h + jnbe slowpath + sub rsp, 48h + movdqa xmmword ptr [rsp], xmm6 + movdqa xmmword ptr [rsp+10h], xmm7 + movdqa xmmword ptr [rsp+20h], xmm8 + movdqa xmmword ptr [rsp+30h], xmm9 + vmovdqu xmm0, xmmword ptr [rcx] + vmovdqu xmm1, xmmword ptr [rcx+10h] + movzx r8d, r8b + movzx r10d, byte ptr [rsp+70h] + shl r10, 20h + or r8, r10 + vmovq xmm2, r8 + vmovq xmm3, r9 + vpunpcklqdq xmm3, xmm3, xmm2 + vmovaps xmm2, xmmword ptr [BLAKE3_IV] + vmovdqu xmm8, xmmword ptr [rdx] + vmovdqu xmm9, xmmword ptr [rdx+10h] + vshufps xmm4, xmm8, xmm9, 88h + vshufps xmm5, xmm8, xmm9, 0DDh + vmovdqu xmm8, xmmword ptr [rdx+20h] + vmovdqu xmm9, xmmword ptr [rdx+30h] + vshufps xmm6, xmm8, xmm9, 88h + vshufps xmm7, xmm8, xmm9, 0DDh + vpshufd xmm6, xmm6, 93h + vpshufd xmm7, xmm7, 93h + mov r8b, 7h +@@: + vpaddd xmm0, xmm0, xmm4 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 10h + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 0Ch + vpaddd xmm0, xmm0, xmm5 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 8h + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 7h + vpshufd xmm0, xmm0, 93h + vpshufd xmm3, xmm3, 4Eh + vpshufd xmm2, xmm2, 39h + vpaddd xmm0, xmm0, xmm6 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 10h + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 0Ch + vpaddd xmm0, xmm0, xmm7 + vpaddd xmm0, xmm0, xmm1 + vpxord xmm3, xmm3, xmm0 + vprord xmm3, xmm3, 8h + vpaddd xmm2, xmm2, xmm3 + vpxord xmm1, xmm1, xmm2 + vprord xmm1, xmm1, 7h + vpshufd xmm0, xmm0, 39h + vpshufd xmm3, xmm3, 4Eh + vpshufd xmm2, xmm2, 93h + dec r8b + jz @F + vshufps xmm8, xmm4, xmm5, 0D6h + vpshufd xmm9, xmm4, 0Fh + vpshufd xmm4, xmm8, 39h + vshufps xmm8, xmm6, xmm7, 0FAh + vpblendd xmm9, xmm9, xmm8, 0AAh + vpunpcklqdq xmm8, xmm7, xmm5 + vpblendd xmm8, xmm8, xmm6, 88h + vpshufd xmm8, xmm8, 78h + vpunpckhdq xmm5, xmm5, xmm7 + vpunpckldq xmm6, xmm6, xmm5 + vpshufd xmm7, xmm6, 1Eh + vmovdqa xmm5, xmm9 + vmovdqa xmm6, xmm8 + jmp @B +@@: + mov r8, qword ptr [rsp+78h] + vpxor xmm0, xmm0, xmm2 + vpxor xmm1, xmm1, xmm3 + vpxor xmm2, xmm2, xmmword ptr [rcx] + vpxor xmm3, xmm3, xmmword ptr [rcx+10h] + vmovdqu xmmword ptr [r8], xmm0 + vmovdqu xmmword ptr [r8+10h], xmm1 + vmovdqu xmmword ptr [r8+20h], xmm2 + vmovdqu xmmword ptr [r8+30h], xmm3 + vzeroupper + movdqa xmm6, xmmword ptr [rsp] + movdqa xmm7, xmmword ptr [rsp+10h] + movdqa xmm8, xmmword ptr [rsp+20h] + movdqa xmm9, xmmword ptr [rsp+30h] + add rsp, 48h + ret +slowpath: + push rbp + mov rbp, rsp + sub rsp, 1A0h + movdqa xmmword ptr [rbp-0A0h], xmm6 + movdqa xmmword ptr [rbp-90h], xmm7 + movdqa xmmword ptr [rbp-80h], xmm8 + movdqa xmmword ptr [rbp-70h], xmm9 + movdqa xmmword ptr [rbp-60h], xmm10 + movdqa xmmword ptr [rbp-50h], xmm11 + movdqa xmmword ptr [rbp-40h], xmm12 + movdqa xmmword ptr [rbp-30h], xmm13 + movdqa xmmword ptr [rbp-20h], xmm14 + movdqa xmmword ptr [rbp-10h], xmm15 + and rsp, -40h + vpbroadcastd zmm0, r9d + shr r9, 20h + vpbroadcastd zmm1, r9d + vpaddd zmm2, zmm0, zmmword ptr [ADD0] + vpcmpud k1, zmm2, zmm0, 1h + vpaddd zmm1 {k1}, zmm1, dword bcst [ADD1] + vmovdqa32 zmmword ptr [rsp], zmm2 + vmovdqa32 zmmword ptr [rsp+40h], zmm1 + mov r9, qword ptr [rbp+38h] + movzx r8d, r8b + movzx r10d, byte ptr [rbp+30h] + cmp rax, 8h + jbe final8blocks +ALIGN 16 +innerloop16: + vpbroadcastd zmm0, dword ptr [rdx] + vpbroadcastd zmm1, dword ptr [rdx+4h] + vpbroadcastd zmm2, dword ptr [rdx+8h] + vpbroadcastd zmm3, dword ptr [rdx+0Ch] + vpbroadcastd zmm4, dword ptr [rdx+10h] + vpbroadcastd zmm5, dword ptr [rdx+14h] + vpbroadcastd zmm6, dword ptr [rdx+18h] + vpbroadcastd zmm7, dword ptr [rdx+1Ch] + vpbroadcastd zmm8, dword ptr [rdx+20h] + vpbroadcastd zmm9, dword ptr [rdx+24h] + vpbroadcastd zmm10, dword ptr [rdx+28h] + vpbroadcastd zmm11, dword ptr [rdx+2Ch] + vpbroadcastd zmm12, dword ptr [rdx+30h] + vpbroadcastd zmm13, dword ptr [rdx+34h] + vpbroadcastd zmm14, dword ptr [rdx+38h] + vpbroadcastd zmm15, dword ptr [rdx+3Ch] + vpbroadcastd zmm16, dword ptr [rcx] + vpbroadcastd zmm17, dword ptr [rcx+4h] + vpbroadcastd zmm18, dword ptr [rcx+8h] + vpbroadcastd zmm19, dword ptr [rcx+0Ch] + vpbroadcastd zmm20, dword ptr [rcx+10h] + vpbroadcastd zmm21, dword ptr [rcx+14h] + vpbroadcastd zmm22, dword ptr [rcx+18h] + vpbroadcastd zmm23, dword ptr [rcx+1Ch] + vpbroadcastd zmm24, dword ptr [BLAKE3_IV_0] + vpbroadcastd zmm25, dword ptr [BLAKE3_IV_1] + vpbroadcastd zmm26, dword ptr [BLAKE3_IV_2] + vpbroadcastd zmm27, dword ptr [BLAKE3_IV_3] + vmovdqa32 zmm28, zmmword ptr [rsp] + vmovdqa32 zmm29, zmmword ptr [rsp+40h] + vpbroadcastd zmm30, r8d + vpbroadcastd zmm31, r10d + mov r11b, 7h +@@: + vpaddd zmm16, zmm16, zmm0 + vpaddd zmm17, zmm17, zmm2 + vpaddd zmm18, zmm18, zmm4 + vpaddd zmm19, zmm19, zmm6 + vmovdqa32 zmmword ptr [rsp+80h], zmm0 + vmovdqa32 zmmword ptr [rsp+0C0h], zmm6 + vpaddd zmm16, zmm16, zmm20 + vpaddd zmm17, zmm17, zmm21 + vpaddd zmm18, zmm18, zmm22 + vpaddd zmm19, zmm19, zmm23 + vpxord zmm28, zmm28, zmm16 + vmovdqa32 zmm0, zmm2 + vpxord zmm29, zmm29, zmm17 + vpxord zmm30, zmm30, zmm18 + vpxord zmm31, zmm31, zmm19 + vprord zmm28, zmm28, 10h + vprord zmm29, zmm29, 10h + vprord zmm30, zmm30, 10h + vprord zmm31, zmm31, 10h + vpaddd zmm24, zmm24, zmm28 + vmovdqa32 zmm6, zmm4 + vpaddd zmm25, zmm25, zmm29 + vpaddd zmm26, zmm26, zmm30 + vpaddd zmm27, zmm27, zmm31 + vpxord zmm20, zmm20, zmm24 + vpxord zmm21, zmm21, zmm25 + vpxord zmm22, zmm22, zmm26 + vpxord zmm23, zmm23, zmm27 + vprord zmm20, zmm20, 0Ch + vprord zmm21, zmm21, 0Ch + vprord zmm22, zmm22, 0Ch + vprord zmm23, zmm23, 0Ch + vpaddd zmm16, zmm16, zmm1 + vpaddd zmm17, zmm17, zmm3 + vpaddd zmm18, zmm18, zmm5 + vpaddd zmm19, zmm19, zmm7 + vpaddd zmm16, zmm16, zmm20 + vmovdqa32 zmm2, zmm3 + vpaddd zmm17, zmm17, zmm21 + vpaddd zmm18, zmm18, zmm22 + vpaddd zmm19, zmm19, zmm23 + vpxord zmm28, zmm28, zmm16 + vpxord zmm29, zmm29, zmm17 + vpxord zmm30, zmm30, zmm18 + vpxord zmm31, zmm31, zmm19 + vprord zmm28, zmm28, 8h + vmovdqa32 zmm4, zmm7 + vprord zmm29, zmm29, 8h + vprord zmm30, zmm30, 8h + vprord zmm31, zmm31, 8h + vpaddd zmm24, zmm24, zmm28 + vpaddd zmm25, zmm25, zmm29 + vpaddd zmm26, zmm26, zmm30 + vpaddd zmm27, zmm27, zmm31 + vpxord zmm20, zmm20, zmm24 + vmovdqa32 zmm3, zmm10 + vpxord zmm21, zmm21, zmm25 + vpxord zmm22, zmm22, zmm26 + vpxord zmm23, zmm23, zmm27 + vprord zmm20, zmm20, 7h + vprord zmm21, zmm21, 7h + vprord zmm22, zmm22, 7h + vprord zmm23, zmm23, 7h + vpaddd zmm16, zmm16, zmm8 + vmovdqa32 zmm7, zmm13 + vpaddd zmm17, zmm17, zmm10 + vpaddd zmm18, zmm18, zmm12 + vpaddd zmm19, zmm19, zmm14 + vpaddd zmm16, zmm16, zmm21 + vpaddd zmm17, zmm17, zmm22 + vpaddd zmm18, zmm18, zmm23 + vpaddd zmm19, zmm19, zmm20 + vpxord zmm31, zmm31, zmm16 + vmovdqa32 zmm10, zmm12 + vpxord zmm28, zmm28, zmm17 + vpxord zmm29, zmm29, zmm18 + vpxord zmm30, zmm30, zmm19 + vprord zmm31, zmm31, 10h + vprord zmm28, zmm28, 10h + vprord zmm29, zmm29, 10h + vprord zmm30, zmm30, 10h + vpaddd zmm26, zmm26, zmm31 + vmovdqa32 zmm12, zmm9 + vpaddd zmm27, zmm27, zmm28 + vpaddd zmm24, zmm24, zmm29 + vpaddd zmm25, zmm25, zmm30 + vpxord zmm21, zmm21, zmm26 + vpxord zmm22, zmm22, zmm27 + vpxord zmm23, zmm23, zmm24 + vpxord zmm20, zmm20, zmm25 + vprord zmm21, zmm21, 0Ch + vprord zmm22, zmm22, 0Ch + vprord zmm23, zmm23, 0Ch + vprord zmm20, zmm20, 0Ch + vpaddd zmm16, zmm16, zmm9 + vpaddd zmm17, zmm17, zmm11 + vpaddd zmm18, zmm18, zmm13 + vmovdqa32 zmm13, zmm14 + vpaddd zmm19, zmm19, zmm15 + vpaddd zmm16, zmm16, zmm21 + vpaddd zmm17, zmm17, zmm22 + vpaddd zmm18, zmm18, zmm23 + vmovdqa32 zmm9, zmm11 + vpaddd zmm19, zmm19, zmm20 + vpxord zmm31, zmm31, zmm16 + vpxord zmm28, zmm28, zmm17 + vmovdqa32 zmm14, zmm15 + vpxord zmm29, zmm29, zmm18 + vpxord zmm30, zmm30, zmm19 + vprord zmm31, zmm31, 8h + vmovdqa32 zmm11, zmm5 + vprord zmm28, zmm28, 8h + vprord zmm29, zmm29, 8h + vprord zmm30, zmm30, 8h + vmovdqa32 zmm15, zmm8 + vpaddd zmm26, zmm26, zmm31 + vpaddd zmm27, zmm27, zmm28 + vpaddd zmm24, zmm24, zmm29 + vpaddd zmm25, zmm25, zmm30 + vmovdqa32 zmm8, zmm1 + vpxord zmm21, zmm21, zmm26 + vpxord zmm22, zmm22, zmm27 + vpxord zmm23, zmm23, zmm24 + vpxord zmm20, zmm20, zmm25 + vmovdqa32 zmm5, zmmword ptr [rsp+80h] + vprord zmm21, zmm21, 7h + vprord zmm22, zmm22, 7h + vprord zmm23, zmm23, 7h + vprord zmm20, zmm20, 7h + vmovdqa32 zmm1, zmmword ptr [rsp+0C0h] + dec r11b + jnz @B + vpxord zmm16, zmm16, zmm24 + vpxord zmm17, zmm17, zmm25 + vpxord zmm18, zmm18, zmm26 + vpxord zmm19, zmm19, zmm27 + vpxord zmm20, zmm20, zmm28 + vpxord zmm21, zmm21, zmm29 + vpxord zmm22, zmm22, zmm30 + vpxord zmm23, zmm23, zmm31 + vpunpckldq zmm0, zmm16, zmm18 + vpunpckhdq zmm1, zmm16, zmm18 + vpunpckldq zmm2, zmm17, zmm19 + vpunpckhdq zmm3, zmm17, zmm19 + vpunpckldq zmm4, zmm20, zmm22 + vpunpckhdq zmm5, zmm20, zmm22 + vpunpckldq zmm6, zmm21, zmm23 + vpunpckhdq zmm7, zmm21, zmm23 + vpunpckldq zmm16, zmm0, zmm2 + vpunpckhdq zmm17, zmm0, zmm2 + vpunpckldq zmm18, zmm1, zmm3 + vpunpckhdq zmm19, zmm1, zmm3 + vpunpckldq zmm20, zmm4, zmm6 + vpunpckhdq zmm21, zmm4, zmm6 + vpunpckldq zmm22, zmm5, zmm7 + vpunpckhdq zmm23, zmm5, zmm7 + vpunpckldq zmm0, zmm24, zmm26 + vpunpckhdq zmm1, zmm24, zmm26 + vpunpckldq zmm2, zmm25, zmm27 + vpunpckhdq zmm3, zmm25, zmm27 + vpunpckldq zmm4, zmm28, zmm30 + vpunpckhdq zmm5, zmm28, zmm30 + vpunpckldq zmm6, zmm29, zmm31 + vpunpckhdq zmm7, zmm29, zmm31 + vpunpckldq zmm24, zmm0, zmm2 + vpunpckhdq zmm25, zmm0, zmm2 + vpunpckldq zmm26, zmm1, zmm3 + vpunpckhdq zmm27, zmm1, zmm3 + vpunpckldq zmm28, zmm4, zmm6 + vpunpckhdq zmm29, zmm4, zmm6 + vpunpckldq zmm30, zmm5, zmm7 + vpunpckhdq zmm31, zmm5, zmm7 + vmovdqa32 zmm8, zmmword ptr [INDEX0] + vmovdqa32 zmm9, zmmword ptr [INDEX1] + vmovdqa32 zmm0, zmm16 + vpermt2d zmm0, zmm8, zmm20 + vpermt2d zmm16, zmm9, zmm20 + vmovdqa32 zmm1, zmm24 + vpermt2d zmm1, zmm8, zmm28 + vpermt2d zmm24, zmm9, zmm28 + vmovdqa32 zmm2, zmm17 + vpermt2d zmm2, zmm8, zmm21 + vpermt2d zmm17, zmm9, zmm21 + vmovdqa32 zmm3, zmm25 + vpermt2d zmm3, zmm8, zmm29 + vpermt2d zmm25, zmm9, zmm29 + vmovdqa32 zmm4, zmm18 + vpermt2d zmm4, zmm8, zmm22 + vpermt2d zmm18, zmm9, zmm22 + vmovdqa32 zmm5, zmm26 + vpermt2d zmm5, zmm8, zmm30 + vpermt2d zmm26, zmm9, zmm30 + vmovdqa32 zmm6, zmm19 + vpermt2d zmm6, zmm8, zmm23 + vpermt2d zmm19, zmm9, zmm23 + vmovdqa32 zmm7, zmm27 + vpermt2d zmm7, zmm8, zmm31 + vpermt2d zmm27, zmm9, zmm31 + vbroadcasti64x4 zmm8, ymmword ptr [rcx] + vpxord zmm1, zmm1, zmm8 + vpxord zmm3, zmm3, zmm8 + vpxord zmm5, zmm5, zmm8 + vpxord zmm7, zmm7, zmm8 + vpxord zmm24, zmm24, zmm8 + vpxord zmm25, zmm25, zmm8 + vpxord zmm26, zmm26, zmm8 + vpxord zmm27, zmm27, zmm8 + vextracti64x4 ymmword ptr [r9], zmm0, 0h + vextracti64x4 ymmword ptr [r9+20h], zmm1, 0h + vextracti64x4 ymmword ptr [r9+40h], zmm2, 0h + vextracti64x4 ymmword ptr [r9+60h], zmm3, 0h + vextracti64x4 ymmword ptr [r9+80h], zmm4, 0h + vextracti64x4 ymmword ptr [r9+0A0h], zmm5, 0h + vextracti64x4 ymmword ptr [r9+0C0h], zmm6, 0h + vextracti64x4 ymmword ptr [r9+0E0h], zmm7, 0h + vextracti64x4 ymmword ptr [r9+100h], zmm16, 0h + vextracti64x4 ymmword ptr [r9+120h], zmm24, 0h + vextracti64x4 ymmword ptr [r9+140h], zmm17, 0h + vextracti64x4 ymmword ptr [r9+160h], zmm25, 0h + vextracti64x4 ymmword ptr [r9+180h], zmm18, 0h + vextracti64x4 ymmword ptr [r9+1A0h], zmm26, 0h + vextracti64x4 ymmword ptr [r9+1C0h], zmm19, 0h + vextracti64x4 ymmword ptr [r9+1E0h], zmm27, 0h + vextracti64x4 ymmword ptr [r9+200h], zmm0, 1h + vextracti64x4 ymmword ptr [r9+220h], zmm1, 1h + cmp rax, 0Ah + jb unwind + vextracti64x4 ymmword ptr [r9+240h], zmm2, 1h + vextracti64x4 ymmword ptr [r9+260h], zmm3, 1h + cmp rax, 0Bh + jb unwind + vextracti64x4 ymmword ptr [r9+280h], zmm4, 1h + vextracti64x4 ymmword ptr [r9+2A0h], zmm5, 1h + cmp rax, 0Ch + jb unwind + vextracti64x4 ymmword ptr [r9+2C0h], zmm6, 1h + vextracti64x4 ymmword ptr [r9+2E0h], zmm7, 1h + cmp rax, 0Dh + jb unwind + vextracti64x4 ymmword ptr [r9+300h], zmm16, 1h + vextracti64x4 ymmword ptr [r9+320h], zmm24, 1h + cmp rax, 0Eh + jb unwind + vextracti64x4 ymmword ptr [r9+340h], zmm17, 1h + vextracti64x4 ymmword ptr [r9+360h], zmm25, 1h + cmp rax, 0Fh + jb unwind + vextracti64x4 ymmword ptr [r9+380h], zmm18, 1h + vextracti64x4 ymmword ptr [r9+3A0h], zmm26, 1h + cmp rax, 10h + jb unwind + vextracti64x4 ymmword ptr [r9+3C0h], zmm19, 1h + vextracti64x4 ymmword ptr [r9+3E0h], zmm27, 1h + vmovdqa32 zmm0, zmmword ptr [rsp] + vmovdqa32 zmm1, zmmword ptr [rsp+40h] + vpaddd zmm2, zmm0, dword bcst [ADD16] + vpcmpud k1, zmm2, zmm0, 1h + vpaddd zmm1 {k1}, zmm1, dword bcst [ADD1] + vmovdqa32 zmmword ptr [rsp], zmm2 + vmovdqa32 zmmword ptr [rsp+40h], zmm1 + add r9, 400h + cmp rax, 18h + lea rax, qword ptr [rax-10h] + jnbe innerloop16 + test al, al + jnz final8blocks +unwind: + vzeroupper + movdqa xmm6, xmmword ptr [rbp-0A0h] + movdqa xmm7, xmmword ptr [rbp-90h] + movdqa xmm8, xmmword ptr [rbp-80h] + movdqa xmm9, xmmword ptr [rbp-70h] + movdqa xmm10, xmmword ptr [rbp-60h] + movdqa xmm11, xmmword ptr [rbp-50h] + movdqa xmm12, xmmword ptr [rbp-40h] + movdqa xmm13, xmmword ptr [rbp-30h] + movdqa xmm14, xmmword ptr [rbp-20h] + movdqa xmm15, xmmword ptr [rbp-10h] + mov rsp, rbp + pop rbp + ret +final8blocks: + cmp al, 4h + jbe final4blocks + vpbroadcastd ymm16, dword ptr [rdx] + vpbroadcastd ymm17, dword ptr [rdx+4h] + vpbroadcastd ymm18, dword ptr [rdx+8h] + vpbroadcastd ymm19, dword ptr [rdx+0Ch] + vpbroadcastd ymm20, dword ptr [rdx+10h] + vpbroadcastd ymm21, dword ptr [rdx+14h] + vpbroadcastd ymm22, dword ptr [rdx+18h] + vpbroadcastd ymm23, dword ptr [rdx+1Ch] + vpbroadcastd ymm24, dword ptr [rdx+20h] + vpbroadcastd ymm25, dword ptr [rdx+24h] + vpbroadcastd ymm26, dword ptr [rdx+28h] + vpbroadcastd ymm27, dword ptr [rdx+2Ch] + vpbroadcastd ymm28, dword ptr [rdx+30h] + vpbroadcastd ymm29, dword ptr [rdx+34h] + vpbroadcastd ymm30, dword ptr [rdx+38h] + vpbroadcastd ymm31, dword ptr [rdx+3Ch] + vpbroadcastd ymm0, dword ptr [rcx] + vpbroadcastd ymm1, dword ptr [rcx+4h] + vpbroadcastd ymm2, dword ptr [rcx+8h] + vpbroadcastd ymm3, dword ptr [rcx+0Ch] + vpbroadcastd ymm4, dword ptr [rcx+10h] + vpbroadcastd ymm5, dword ptr [rcx+14h] + vpbroadcastd ymm6, dword ptr [rcx+18h] + vpbroadcastd ymm7, dword ptr [rcx+1Ch] + vpbroadcastd ymm8, dword ptr [BLAKE3_IV_0] + vpbroadcastd ymm9, dword ptr [BLAKE3_IV_1] + vpbroadcastd ymm10, dword ptr [BLAKE3_IV_2] + vpbroadcastd ymm11, dword ptr [BLAKE3_IV_3] + vmovdqa ymm12, ymmword ptr [rsp] + vmovdqa ymm13, ymmword ptr [rsp+40h] + vpbroadcastd ymm14, r8d + vpbroadcastd ymm15, r10d + mov r11b, 7h +@@: + vpaddd ymm0, ymm0, ymm16 + vpaddd ymm1, ymm1, ymm18 + vpaddd ymm2, ymm2, ymm20 + vpaddd ymm3, ymm3, ymm22 + vmovdqa32 ymmword ptr [rsp+80h], ymm16 + vmovdqa32 ymmword ptr [rsp+0C0h], ymm22 + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm1, ymm1, ymm5 + vpaddd ymm2, ymm2, ymm6 + vpaddd ymm3, ymm3, ymm7 + vpxord ymm12, ymm12, ymm0 + vmovdqa32 ymm16, ymm18 + vpxord ymm13, ymm13, ymm1 + vpxord ymm14, ymm14, ymm2 + vpxord ymm15, ymm15, ymm3 + vprord ymm12, ymm12, 10h + vprord ymm13, ymm13, 10h + vprord ymm14, ymm14, 10h + vprord ymm15, ymm15, 10h + vpaddd ymm8, ymm8, ymm12 + vmovdqa32 ymm22, ymm20 + 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, 0Ch + vprord ymm5, ymm5, 0Ch + vprord ymm6, ymm6, 0Ch + vprord ymm7, ymm7, 0Ch + vpaddd ymm0, ymm0, ymm17 + vpaddd ymm1, ymm1, ymm19 + vpaddd ymm2, ymm2, ymm21 + vpaddd ymm3, ymm3, ymm23 + vpaddd ymm0, ymm0, ymm4 + vmovdqa32 ymm18, ymm19 + 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, 8h + vmovdqa32 ymm20, ymm23 + vprord ymm13, ymm13, 8h + vprord ymm14, ymm14, 8h + vprord ymm15, ymm15, 8h + vpaddd ymm8, ymm8, ymm12 + vpaddd ymm9, ymm9, ymm13 + vpaddd ymm10, ymm10, ymm14 + vpaddd ymm11, ymm11, ymm15 + vpxord ymm4, ymm4, ymm8 + vmovdqa32 ymm19, ymm26 + vpxord ymm5, ymm5, ymm9 + vpxord ymm6, ymm6, ymm10 + vpxord ymm7, ymm7, ymm11 + vprord ymm4, ymm4, 7h + vprord ymm5, ymm5, 7h + vprord ymm6, ymm6, 7h + vprord ymm7, ymm7, 7h + vpaddd ymm0, ymm0, ymm24 + vmovdqa32 ymm23, ymm29 + 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 + vmovdqa32 ymm26, ymm28 + vpxord ymm12, ymm12, ymm1 + vpxord ymm13, ymm13, ymm2 + vpxord ymm14, ymm14, ymm3 + vprord ymm15, ymm15, 10h + vprord ymm12, ymm12, 10h + vprord ymm13, ymm13, 10h + vprord ymm14, ymm14, 10h + vpaddd ymm10, ymm10, ymm15 + vmovdqa32 ymm28, ymm25 + 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, 0Ch + vprord ymm6, ymm6, 0Ch + vprord ymm7, ymm7, 0Ch + vprord ymm4, ymm4, 0Ch + vpaddd ymm0, ymm0, ymm25 + vpaddd ymm1, ymm1, ymm27 + vpaddd ymm2, ymm2, ymm29 + vmovdqa32 ymm29, ymm30 + vpaddd ymm3, ymm3, ymm31 + vpaddd ymm0, ymm0, ymm5 + vpaddd ymm1, ymm1, ymm6 + vpaddd ymm2, ymm2, ymm7 + vmovdqa32 ymm25, ymm27 + vpaddd ymm3, ymm3, ymm4 + vpxord ymm15, ymm15, ymm0 + vpxord ymm12, ymm12, ymm1 + vmovdqa32 ymm30, ymm31 + vpxord ymm13, ymm13, ymm2 + vpxord ymm14, ymm14, ymm3 + vprord ymm15, ymm15, 8h + vmovdqa32 ymm27, ymm21 + vprord ymm12, ymm12, 8h + vprord ymm13, ymm13, 8h + vprord ymm14, ymm14, 8h + vmovdqa32 ymm31, ymm24 + vpaddd ymm10, ymm10, ymm15 + vpaddd ymm11, ymm11, ymm12 + vpaddd ymm8, ymm8, ymm13 + vpaddd ymm9, ymm9, ymm14 + vmovdqa32 ymm24, ymm17 + vpxord ymm5, ymm5, ymm10 + vpxord ymm6, ymm6, ymm11 + vpxord ymm7, ymm7, ymm8 + vpxord ymm4, ymm4, ymm9 + vmovdqa32 ymm21, ymmword ptr [rsp+80h] + vprord ymm5, ymm5, 7h + vprord ymm6, ymm6, 7h + vprord ymm7, ymm7, 7h + vprord ymm4, ymm4, 7h + vmovdqa32 ymm17, ymmword ptr [rsp+0C0h] + dec r11b + jnz @B + vpxord ymm0, ymm0, ymm8 + vpxord ymm8, ymm8, dword bcst [rcx] + vpxord ymm1, ymm1, ymm9 + vpxord ymm9, ymm9, dword bcst [rcx+4h] + vpxord ymm2, ymm2, ymm10 + vpxord ymm10, ymm10, dword bcst [rcx+8h] + vpxord ymm3, ymm3, ymm11 + vpxord ymm11, ymm11, dword bcst [rcx+0Ch] + vpxord ymm4, ymm4, ymm12 + vpxord ymm12, ymm12, dword bcst [rcx+10h] + vpxord ymm5, ymm5, ymm13 + vpxord ymm13, ymm13, dword bcst [rcx+14h] + vpxord ymm6, ymm6, ymm14 + vpxord ymm14, ymm14, dword bcst [rcx+18h] + vpxord ymm7, ymm7, ymm15 + vpxord ymm15, ymm15, dword bcst [rcx+1Ch] + 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, 0h + vshufi32x4 ymm17, ymm8, ymm12, 0h + vshufi32x4 ymm18, ymm1, ymm5, 0h + vshufi32x4 ymm19, ymm9, ymm13, 0h + vshufi32x4 ymm20, ymm2, ymm6, 0h + vshufi32x4 ymm21, ymm10, ymm14, 0h + vshufi32x4 ymm22, ymm3, ymm7, 0h + vshufi32x4 ymm23, ymm11, ymm15, 0h + vshufi32x4 ymm24, ymm0, ymm4, 3h + vshufi32x4 ymm25, ymm8, ymm12, 3h + vshufi32x4 ymm26, ymm1, ymm5, 3h + vshufi32x4 ymm27, ymm9, ymm13, 3h + vshufi32x4 ymm28, ymm2, ymm6, 3h + vshufi32x4 ymm29, ymm10, ymm14, 3h + vshufi32x4 ymm30, ymm3, ymm7, 3h + vshufi32x4 ymm31, ymm11, ymm15, 3h + vmovdqu32 ymmword ptr [r9], ymm16 + vmovdqu32 ymmword ptr [r9+20h], ymm17 + vmovdqu32 ymmword ptr [r9+40h], ymm18 + vmovdqu32 ymmword ptr [r9+60h], ymm19 + vmovdqu32 ymmword ptr [r9+80h], ymm20 + vmovdqu32 ymmword ptr [r9+0A0h], ymm21 + vmovdqu32 ymmword ptr [r9+0C0h], ymm22 + vmovdqu32 ymmword ptr [r9+0E0h], ymm23 + vmovdqu32 ymmword ptr [r9+100h], ymm24 + vmovdqu32 ymmword ptr [r9+120h], ymm25 + cmp al, 6h + jb @F + vmovdqu32 ymmword ptr [r9+140h], ymm26 + vmovdqu32 ymmword ptr [r9+160h], ymm27 + cmp al, 7h + jb @F + vmovdqu32 ymmword ptr [r9+180h], ymm28 + vmovdqu32 ymmword ptr [r9+1A0h], ymm29 + cmp al, 8h + jb @F + vmovdqu32 ymmword ptr [r9+1C0h], ymm30 + vmovdqu32 ymmword ptr [r9+1E0h], ymm31 +@@: + jmp unwind +final4blocks: + mov r11d, 0AAAAh + kmovw k1, r11d + mov r11d, 8888h + kmovw k2, r11d + mov r11d, 55h + kmovw k3, r11d + mov r11d, r10d + shl r11, 20h + or r11, r8 + cmp al, 2h + jbe final2blocks + vbroadcasti32x4 zmm0, xmmword ptr [rcx] + vbroadcasti32x4 zmm1, xmmword ptr [rcx+10h] + vbroadcasti32x4 zmm2, xmmword ptr [BLAKE3_IV] + vmovdqa32 xmm4, xmmword ptr [rsp] + vmovdqa32 xmm5, xmmword ptr [rsp+40h] + vpbroadcastq zmm3, r11 + vpunpckldq xmm6, xmm4, xmm5 + vpunpckhdq xmm5, xmm4, xmm5 + vinserti64x4 zmm6, zmm6, ymm5, 1h + vpermq zmm3 {k3}, zmm6, 0DCh + vbroadcasti32x4 zmm8, xmmword ptr [rdx] + vbroadcasti32x4 zmm9, xmmword ptr [rdx+10h] + vshufps zmm4, zmm8, zmm9, 88h + vshufps zmm5, zmm8, zmm9, 0DDh + vbroadcasti32x4 zmm8, xmmword ptr [rdx+20h] + vbroadcasti32x4 zmm9, xmmword ptr [rdx+30h] + vshufps zmm6, zmm8, zmm9, 88h + vshufps zmm7, zmm8, zmm9, 0DDh + vpshufd zmm6, zmm6, 93h + vpshufd zmm7, zmm7, 93h + mov r8b, 7h +@@: + vpaddd zmm0, zmm0, zmm4 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 10h + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 0Ch + vpaddd zmm0, zmm0, zmm5 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 8h + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 7h + vpshufd zmm0, zmm0, 93h + vpshufd zmm3, zmm3, 4Eh + vpshufd zmm2, zmm2, 39h + vpaddd zmm0, zmm0, zmm6 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 10h + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 0Ch + vpaddd zmm0, zmm0, zmm7 + vpaddd zmm0, zmm0, zmm1 + vpxord zmm3, zmm3, zmm0 + vprord zmm3, zmm3, 8h + vpaddd zmm2, zmm2, zmm3 + vpxord zmm1, zmm1, zmm2 + vprord zmm1, zmm1, 7h + vpshufd zmm0, zmm0, 39h + vpshufd zmm3, zmm3, 4Eh + vpshufd zmm2, zmm2, 93h + dec r8b + jz @F + vshufps zmm8, zmm4, zmm5, 0D6h + vpshufd zmm9, zmm4, 0Fh + vpshufd zmm4, zmm8, 39h + vshufps zmm8, zmm6, zmm7, 0FAh + vpblendmd zmm9 {k1}, zmm9, zmm8 + vpunpcklqdq zmm8, zmm7, zmm5 + vpblendmd zmm8 {k2}, zmm8, zmm6 + vpshufd zmm8, zmm8, 78h + vpunpckhdq zmm5, zmm5, zmm7 + vpunpckldq zmm6, zmm6, zmm5 + vpshufd zmm7, zmm6, 1Eh + vmovdqa32 zmm5, zmm9 + vmovdqa32 zmm6, zmm8 + jmp @B +@@: + vpxord zmm0, zmm0, zmm2 + vpxord zmm1, zmm1, zmm3 + vbroadcasti32x4 zmm4, xmmword ptr [rcx] + vbroadcasti32x4 zmm5, xmmword ptr [rcx+10h] + vpxord zmm2, zmm2, zmm4 + vpxord zmm3, zmm3, zmm5 + vmovdqu xmmword ptr [r9], xmm0 + vmovdqu xmmword ptr [r9+10h], xmm1 + vmovdqu xmmword ptr [r9+20h], xmm2 + vmovdqu xmmword ptr [r9+30h], xmm3 + vextracti128 xmmword ptr [r9+40h], ymm0, 1h + vextracti128 xmmword ptr [r9+50h], ymm1, 1h + vextracti128 xmmword ptr [r9+60h], ymm2, 1h + vextracti128 xmmword ptr [r9+70h], ymm3, 1h + vextracti32x4 xmmword ptr [r9+80h], zmm0, 2h + vextracti32x4 xmmword ptr [r9+90h], zmm1, 2h + vextracti32x4 xmmword ptr [r9+0A0h], zmm2, 2h + vextracti32x4 xmmword ptr [r9+0B0h], zmm3, 2h + cmp al, 4h + jb @F + vextracti32x4 xmmword ptr [r9+0C0h], zmm0, 3h + vextracti32x4 xmmword ptr [r9+0D0h], zmm1, 3h + vextracti32x4 xmmword ptr [r9+0E0h], zmm2, 3h + vextracti32x4 xmmword ptr [r9+0F0h], zmm3, 3h +@@: + jmp unwind +final2blocks: + test al, al + jz unwind + vbroadcasti32x4 ymm0, xmmword ptr [rcx] + vbroadcasti32x4 ymm1, xmmword ptr [rcx+10h] + vbroadcasti32x4 ymm2, xmmword ptr [BLAKE3_IV] + vmovdqa xmm4, xmmword ptr [rsp] + vmovdqa xmm5, xmmword ptr [rsp+40h] + vpbroadcastq ymm3, r11 + vpunpckldq xmm6, xmm4, xmm5 + vpunpckhdq xmm5, xmm4, xmm5 + vinserti128 ymm6, ymm6, xmm5, 1h + vpermq ymm3 {k3}, ymm6, 0DCh + vbroadcasti32x4 ymm8, xmmword ptr [rdx] + vbroadcasti32x4 ymm9, xmmword ptr [rdx+10h] + vshufps ymm4, ymm8, ymm9, 88h + vshufps ymm5, ymm8, ymm9, 0DDh + vbroadcasti32x4 ymm8, xmmword ptr [rdx+20h] + vbroadcasti32x4 ymm9, xmmword ptr [rdx+30h] + vshufps ymm6, ymm8, ymm9, 88h + vshufps ymm7, ymm8, ymm9, 0DDh + vpshufd ymm6, ymm6, 93h + vpshufd ymm7, ymm7, 93h + mov r8b, 7h +@@: + vpaddd ymm0, ymm0, ymm4 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 10h + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 0Ch + vpaddd ymm0, ymm0, ymm5 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 8h + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 7h + vpshufd ymm0, ymm0, 93h + vpshufd ymm3, ymm3, 4Eh + vpshufd ymm2, ymm2, 39h + vpaddd ymm0, ymm0, ymm6 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 10h + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 0Ch + vpaddd ymm0, ymm0, ymm7 + vpaddd ymm0, ymm0, ymm1 + vpxord ymm3, ymm3, ymm0 + vprord ymm3, ymm3, 8h + vpaddd ymm2, ymm2, ymm3 + vpxord ymm1, ymm1, ymm2 + vprord ymm1, ymm1, 7h + vpshufd ymm0, ymm0, 39h + vpshufd ymm3, ymm3, 4Eh + vpshufd ymm2, ymm2, 93h + dec r8b + jz @F + vshufps ymm8, ymm4, ymm5, 0D6h + vpshufd ymm9, ymm4, 0Fh + vpshufd ymm4, ymm8, 39h + vshufps ymm8, ymm6, ymm7, 0FAh + vpblendd ymm9, ymm9, ymm8, 0AAh + vpunpcklqdq ymm8, ymm7, ymm5 + vpblendd ymm8, ymm8, ymm6, 88h + vpshufd ymm8, ymm8, 78h + vpunpckhdq ymm5, ymm5, ymm7 + vpunpckldq ymm6, ymm6, ymm5 + vpshufd ymm7, ymm6, 1Eh + vmovdqa ymm5, ymm9 + vmovdqa ymm6, ymm8 + jmp @B +@@: + vpxord ymm0, ymm0, ymm2 + vpxord ymm1, ymm1, ymm3 + vbroadcasti128 ymm4, xmmword ptr [rcx] + vbroadcasti128 ymm5, xmmword ptr [rcx+10h] + vpxord ymm2, ymm2, ymm4 + vpxord ymm3, ymm3, ymm5 + vmovdqu xmmword ptr [r9], xmm0 + vmovdqu xmmword ptr [r9+10h], xmm1 + vmovdqu xmmword ptr [r9+20h], xmm2 + vmovdqu xmmword ptr [r9+30h], xmm3 + cmp al, 2h + jb @F + vextracti128 xmmword ptr [r9+40h], ymm0, 1h + vextracti128 xmmword ptr [r9+50h], ymm1, 1h + vextracti128 xmmword ptr [r9+60h], ymm2, 1h + vextracti128 xmmword ptr [r9+70h], ymm3, 1h +@@: + jmp unwind +_blake3_xof_many_avx512 ENDP +blake3_xof_many_avx512 ENDP + _TEXT ENDS _RDATA SEGMENT READONLY PAGE ALIAS(".rdata") 'CONST' ALIGN 64 +ADD0: + dd 0, 1, 2, 3, 4, 5, 6, 7 + dd 8, 9, 10, 11, 12, 13, 14, 15 INDEX0: dd 0, 1, 2, 3, 16, 17, 18, 19 dd 8, 9, 10, 11, 24, 25, 26, 27 INDEX1: dd 4, 5, 6, 7, 20, 21, 22, 23 dd 12, 13, 14, 15, 28, 29, 30, 31 -ADD0: - dd 0, 1, 2, 3, 4, 5, 6, 7 - dd 8, 9, 10, 11, 12, 13, 14, 15 -ADD1: - dd 1 -ADD16: - dd 16 -BLAKE3_BLOCK_LEN: - dd 64 -ALIGN 64 BLAKE3_IV: BLAKE3_IV_0: dd 06A09E667H @@ -2629,6 +2218,12 @@ BLAKE3_IV_2: dd 03C6EF372H BLAKE3_IV_3: dd 0A54FF53AH +ADD1: + dd 1 +ADD16: + dd 16 +BLAKE3_BLOCK_LEN: + dd 64 _RDATA ENDS END