diff options
Diffstat (limited to 'c/blake3_avx512_x86-64_windows_msvc.asm')
| -rw-r--r-- | c/blake3_avx512_x86-64_windows_msvc.asm | 4353 |
1 files changed, 1974 insertions, 2379 deletions
diff --git a/c/blake3_avx512_x86-64_windows_msvc.asm b/c/blake3_avx512_x86-64_windows_msvc.asm index b19efba..caa772c 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 |
