aboutsummaryrefslogtreecommitdiff
path: root/asm/out.S
diff options
context:
space:
mode:
authorJack O'Connor <[email protected]>2022-04-01 15:43:04 -0400
committerJack O'Connor <[email protected]>2022-04-09 13:31:19 -0700
commite17743e8fdf2845be6dc85ad339bf45feeefc564 (patch)
tree705b7204f9522a666476ad38f49393c31e11a2de /asm/out.S
parent35ad4ededdbf259c507c49b2e7ac529b43b61671 (diff)
kernel_3d_16 and xof functionskernel
Diffstat (limited to 'asm/out.S')
-rw-r--r--asm/out.S1491
1 files changed, 1310 insertions, 181 deletions
diff --git a/asm/out.S b/asm/out.S
index 9d5f77f..2c802e5 100644
--- a/asm/out.S
+++ b/asm/out.S
@@ -1,5 +1,5 @@
# This file is generated by asm.py. Don't edit this file directly.
-blake3_sse2_kernel2d_1:
+blake3_sse2_kernel_2d_1:
paddd xmm0, xmm4
paddd xmm0, xmm1
pxor xmm3, xmm0
@@ -531,7 +531,7 @@ blake3_sse2_compress:
pshufd xmm6, xmm6, 0x93
shufps xmm8, xmm7, 221
pshufd xmm7, xmm8, 0x93
- call blake3_sse2_kernel2d_1
+ call blake3_sse2_kernel_2d_1
movups xmmword ptr [rdi], xmm0
movups xmmword ptr [rdi+0x10], xmm1
ret
@@ -559,7 +559,7 @@ blake3_sse2_xof_stream_1:
pshufd xmm6, xmm6, 0x93
shufps xmm8, xmm7, 221
pshufd xmm7, xmm8, 0x93
- call blake3_sse2_kernel2d_1
+ call blake3_sse2_kernel_2d_1
movdqu xmm4, xmmword ptr [rdi]
movdqu xmm5, xmmword ptr [rdi+0x10]
pxor xmm2, xmm4
@@ -593,7 +593,7 @@ blake3_sse2_xof_xor_1:
pshufd xmm6, xmm6, 0x93
shufps xmm8, xmm7, 221
pshufd xmm7, xmm8, 0x93
- call blake3_sse2_kernel2d_1
+ call blake3_sse2_kernel_2d_1
movdqu xmm4, xmmword ptr [rdi]
movdqu xmm5, xmmword ptr [rdi+0x10]
pxor xmm2, xmm4
@@ -620,7 +620,7 @@ PBLENDW_0x3F_MASK:
.long 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000
PBLENDW_0xC0_MASK:
.long 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF
-blake3_sse41_kernel2d_1:
+blake3_sse41_kernel_2d_1:
movaps xmm14, xmmword ptr [ROT8+rip]
movaps xmm15, xmmword ptr [ROT16+rip]
paddd xmm0, xmm4
@@ -1068,7 +1068,7 @@ blake3_sse41_compress:
pshufd xmm6, xmm6, 0x93
shufps xmm8, xmm7, 221
pshufd xmm7, xmm8, 0x93
- call blake3_sse41_kernel2d_1
+ call blake3_sse41_kernel_2d_1
movups xmmword ptr [rdi], xmm0
movups xmmword ptr [rdi+0x10], xmm1
ret
@@ -1096,7 +1096,7 @@ blake3_sse41_xof_stream_1:
pshufd xmm6, xmm6, 0x93
shufps xmm8, xmm7, 221
pshufd xmm7, xmm8, 0x93
- call blake3_sse41_kernel2d_1
+ call blake3_sse41_kernel_2d_1
movdqu xmm4, xmmword ptr [rdi]
movdqu xmm5, xmmword ptr [rdi+0x10]
pxor xmm2, xmm4
@@ -1130,7 +1130,7 @@ blake3_sse41_xof_xor_1:
pshufd xmm6, xmm6, 0x93
shufps xmm8, xmm7, 221
pshufd xmm7, xmm8, 0x93
- call blake3_sse41_kernel2d_1
+ call blake3_sse41_kernel_2d_1
movdqu xmm4, xmmword ptr [rdi]
movdqu xmm5, xmmword ptr [rdi+0x10]
pxor xmm2, xmm4
@@ -1148,7 +1148,7 @@ blake3_sse41_xof_xor_1:
movups xmmword ptr [r9+0x20], xmm2
movups xmmword ptr [r9+0x30], xmm3
ret
-blake3_avx2_kernel2d_2:
+blake3_avx2_kernel_2d_2:
vbroadcasti128 ymm14, xmmword ptr [ROT16+rip]
vbroadcasti128 ymm15, xmmword ptr [ROT8+rip]
vpaddd ymm0, ymm0, ymm4
@@ -1549,7 +1549,7 @@ blake3_avx2_xof_stream_2:
vshufps ymm7, ymm8, ymm9, 221
vpshufd ymm6, ymm6, 0x93
vpshufd ymm7, ymm7, 0x93
- call blake3_avx2_kernel2d_2
+ call blake3_avx2_kernel_2d_2
vbroadcasti128 ymm4, xmmword ptr [rdi]
vpxor ymm2, ymm2, ymm4
vbroadcasti128 ymm5, xmmword ptr [rdi + 16]
@@ -1586,7 +1586,7 @@ blake3_avx2_xof_xor_2:
vshufps ymm7, ymm8, ymm9, 221
vpshufd ymm6, ymm6, 0x93
vpshufd ymm7, ymm7, 0x93
- call blake3_avx2_kernel2d_2
+ call blake3_avx2_kernel_2d_2
vbroadcasti128 ymm4, xmmword ptr [rdi]
vpxor ymm2, ymm2, ymm4
vbroadcasti128 ymm5, xmmword ptr [rdi + 16]
@@ -1604,7 +1604,7 @@ blake3_avx2_xof_xor_2:
vmovdqu ymmword ptr [r9 + 2 * 32], ymm6
vmovdqu ymmword ptr [r9 + 3 * 32], ymm7
ret
-blake3_avx512_kernel2d_1:
+blake3_avx512_kernel_2d_1:
vpaddd xmm0, xmm0, xmm4
vpaddd xmm0, xmm0, xmm1
vpxord xmm3, xmm3, xmm0
@@ -1924,7 +1924,94 @@ blake3_avx512_kernel2d_1:
vpxord xmm0, xmm0, xmm2
vpxord xmm1, xmm1, xmm3
ret
-blake3_avx512_kernel2d_2:
+.global blake3_avx512_compress
+blake3_avx512_compress:
+ vmovdqu xmm0, xmmword ptr [rdi]
+ vmovdqu xmm1, xmmword ptr [rdi+0x10]
+ shl r8, 32
+ mov ecx, ecx
+ or rcx, r8
+ vmovq xmm3, rdx
+ vmovq xmm4, rcx
+ vpunpcklqdq xmm3, xmm3, xmm4
+ vmovaps xmm2, xmmword ptr [BLAKE3_IV+rip]
+ vmovups xmm8, xmmword ptr [rsi]
+ vmovups xmm9, xmmword ptr [rsi+0x10]
+ vshufps xmm4, xmm8, xmm9, 136
+ vshufps xmm5, xmm8, xmm9, 221
+ vmovups xmm8, xmmword ptr [rsi+0x20]
+ vmovups xmm9, xmmword ptr [rsi+0x30]
+ vshufps xmm6, xmm8, xmm9, 136
+ vshufps xmm7, xmm8, xmm9, 221
+ vpshufd xmm6, xmm6, 0x93
+ vpshufd xmm7, xmm7, 0x93
+ call blake3_avx512_kernel_2d_1
+ vmovdqu xmmword ptr [rdi], xmm0
+ vmovdqu xmmword ptr [rdi+0x10], xmm1
+ ret
+.global blake3_avx512_xof_stream_1
+blake3_avx512_xof_stream_1:
+ vmovdqu xmm0, xmmword ptr [rdi]
+ vmovdqu xmm1, xmmword ptr [rdi+0x10]
+ shl r8, 32
+ mov ecx, ecx
+ or rcx, r8
+ vmovq xmm3, rdx
+ vmovq xmm4, rcx
+ vpunpcklqdq xmm3, xmm3, xmm4
+ vmovaps xmm2, xmmword ptr [BLAKE3_IV+rip]
+ vmovups xmm8, xmmword ptr [rsi]
+ vmovups xmm9, xmmword ptr [rsi+0x10]
+ vshufps xmm4, xmm8, xmm9, 136
+ vshufps xmm5, xmm8, xmm9, 221
+ vmovups xmm8, xmmword ptr [rsi+0x20]
+ vmovups xmm9, xmmword ptr [rsi+0x30]
+ vshufps xmm6, xmm8, xmm9, 136
+ vshufps xmm7, xmm8, xmm9, 221
+ vpshufd xmm6, xmm6, 0x93
+ vpshufd xmm7, xmm7, 0x93
+ call blake3_avx512_kernel_2d_1
+ vpxor xmm2, xmm2, [rdi]
+ vpxor xmm3, xmm3, [rdi+0x10]
+ vmovdqu xmmword ptr [r9], xmm0
+ vmovdqu xmmword ptr [r9+0x10], xmm1
+ vmovdqu xmmword ptr [r9+0x20], xmm2
+ vmovdqu xmmword ptr [r9+0x30], xmm3
+ ret
+.global blake3_avx512_xof_xor_1
+blake3_avx512_xof_xor_1:
+ vmovdqu xmm0, xmmword ptr [rdi]
+ vmovdqu xmm1, xmmword ptr [rdi+0x10]
+ shl r8, 32
+ mov ecx, ecx
+ or rcx, r8
+ vmovq xmm3, rdx
+ vmovq xmm4, rcx
+ vpunpcklqdq xmm3, xmm3, xmm4
+ vmovaps xmm2, xmmword ptr [BLAKE3_IV+rip]
+ vmovups xmm8, xmmword ptr [rsi]
+ vmovups xmm9, xmmword ptr [rsi+0x10]
+ vshufps xmm4, xmm8, xmm9, 136
+ vshufps xmm5, xmm8, xmm9, 221
+ vmovups xmm8, xmmword ptr [rsi+0x20]
+ vmovups xmm9, xmmword ptr [rsi+0x30]
+ vshufps xmm6, xmm8, xmm9, 136
+ vshufps xmm7, xmm8, xmm9, 221
+ vpshufd xmm6, xmm6, 0x93
+ vpshufd xmm7, xmm7, 0x93
+ call blake3_avx512_kernel_2d_1
+ vpxor xmm2, xmm2, [rdi]
+ vpxor xmm3, xmm3, [rdi+0x10]
+ vpxor xmm0, xmm0, [r9]
+ vpxor xmm1, xmm1, [r9+0x10]
+ vpxor xmm2, xmm2, [r9+0x20]
+ vpxor xmm3, xmm3, [r9+0x30]
+ vmovdqu xmmword ptr [r9], xmm0
+ vmovdqu xmmword ptr [r9+0x10], xmm1
+ vmovdqu xmmword ptr [r9+0x20], xmm2
+ vmovdqu xmmword ptr [r9+0x30], xmm3
+ ret
+blake3_avx512_kernel_2d_2:
vpaddd ymm0, ymm0, ymm4
vpaddd ymm0, ymm0, ymm1
vpxord ymm3, ymm3, ymm0
@@ -2244,7 +2331,85 @@ blake3_avx512_kernel2d_2:
vpxord ymm0, ymm0, ymm2
vpxord ymm1, ymm1, ymm3
ret
-blake3_avx512_kernel2d_4:
+.global blake3_avx512_xof_stream_2
+blake3_avx512_xof_stream_2:
+ vbroadcasti128 ymm0, xmmword ptr [rdi]
+ vbroadcasti128 ymm1, xmmword ptr [rdi+0x10]
+ vmovdqa ymm4, ymmword ptr [INCREMENT_2D+rip]
+ vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV+rip]
+ vpbroadcastq ymm5, rdx
+ vpaddq ymm6, ymm4, ymm5
+ shl r8, 32
+ mov ecx, ecx
+ or rcx, r8
+ vpbroadcastq ymm7, rcx
+ vpblendd ymm3, ymm6, ymm7, 0xCC
+ vbroadcasti128 ymm8, xmmword ptr [rsi]
+ vbroadcasti128 ymm9, xmmword ptr [rsi+0x10]
+ vshufps ymm4, ymm8, ymm9, 136
+ vshufps ymm5, ymm8, ymm9, 221
+ vbroadcasti128 ymm8, xmmword ptr [rsi+0x20]
+ vbroadcasti128 ymm9, xmmword ptr [rsi+0x30]
+ vshufps ymm6, ymm8, ymm9, 136
+ vshufps ymm7, ymm8, ymm9, 221
+ vpshufd ymm6, ymm6, 0x93
+ vpshufd ymm7, ymm7, 0x93
+ call blake3_avx512_kernel_2d_2
+ vbroadcasti128 ymm4, xmmword ptr [rdi]
+ vpxor ymm2, ymm2, ymm4
+ vbroadcasti128 ymm5, xmmword ptr [rdi + 16]
+ vpxor ymm3, ymm3, ymm5
+ vmovdqu xmmword ptr [r9 + 0 * 16], xmm0
+ vmovdqu xmmword ptr [r9 + 1 * 16], xmm1
+ vmovdqu xmmword ptr [r9 + 2 * 16], xmm2
+ vmovdqu xmmword ptr [r9 + 3 * 16], xmm3
+ vextracti128 xmmword ptr [r9+4*16], ymm0, 1
+ vextracti128 xmmword ptr [r9+5*16], ymm1, 1
+ vextracti128 xmmword ptr [r9+6*16], ymm2, 1
+ vextracti128 xmmword ptr [r9+7*16], ymm3, 1
+ ret
+.global blake3_avx512_xof_xor_2
+blake3_avx512_xof_xor_2:
+ vbroadcasti128 ymm0, xmmword ptr [rdi]
+ vbroadcasti128 ymm1, xmmword ptr [rdi+0x10]
+ vmovdqa ymm4, ymmword ptr [INCREMENT_2D+rip]
+ vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV+rip]
+ vpbroadcastq ymm5, rdx
+ vpaddq ymm6, ymm4, ymm5
+ shl r8, 32
+ mov ecx, ecx
+ or rcx, r8
+ vpbroadcastq ymm7, rcx
+ vpblendd ymm3, ymm6, ymm7, 0xCC
+ vbroadcasti128 ymm8, xmmword ptr [rsi]
+ vbroadcasti128 ymm9, xmmword ptr [rsi+0x10]
+ vshufps ymm4, ymm8, ymm9, 136
+ vshufps ymm5, ymm8, ymm9, 221
+ vbroadcasti128 ymm8, xmmword ptr [rsi+0x20]
+ vbroadcasti128 ymm9, xmmword ptr [rsi+0x30]
+ vshufps ymm6, ymm8, ymm9, 136
+ vshufps ymm7, ymm8, ymm9, 221
+ vpshufd ymm6, ymm6, 0x93
+ vpshufd ymm7, ymm7, 0x93
+ call blake3_avx512_kernel_2d_2
+ vbroadcasti128 ymm4, xmmword ptr [rdi]
+ vpxor ymm2, ymm2, ymm4
+ vbroadcasti128 ymm5, xmmword ptr [rdi + 16]
+ vpxor ymm3, ymm3, ymm5
+ vperm2f128 ymm4, ymm0, ymm1, 32
+ vperm2f128 ymm5, ymm2, ymm3, 32
+ vperm2f128 ymm6, ymm0, ymm1, 49
+ vperm2f128 ymm7, ymm2, ymm3, 49
+ vpxor ymm4, ymm4, ymmword ptr [r9 + 0 * 32]
+ vpxor ymm5, ymm5, ymmword ptr [r9 + 1 * 32]
+ vpxor ymm6, ymm6, ymmword ptr [r9 + 2 * 32]
+ vpxor ymm7, ymm7, ymmword ptr [r9 + 3 * 32]
+ vmovdqu ymmword ptr [r9 + 0 * 32], ymm4
+ vmovdqu ymmword ptr [r9 + 1 * 32], ymm5
+ vmovdqu ymmword ptr [r9 + 2 * 32], ymm6
+ vmovdqu ymmword ptr [r9 + 3 * 32], ymm7
+ ret
+blake3_avx512_kernel_2d_4:
mov eax, 43690
kmovw k3, eax
mov eax, 34952
@@ -2568,171 +2733,6 @@ blake3_avx512_kernel2d_4:
vpxord zmm0, zmm0, zmm2
vpxord zmm1, zmm1, zmm3
ret
-.global blake3_avx512_compress
-blake3_avx512_compress:
- vmovdqu xmm0, xmmword ptr [rdi]
- vmovdqu xmm1, xmmword ptr [rdi+0x10]
- shl r8, 32
- mov ecx, ecx
- or rcx, r8
- vmovq xmm3, rdx
- vmovq xmm4, rcx
- vpunpcklqdq xmm3, xmm3, xmm4
- vmovaps xmm2, xmmword ptr [BLAKE3_IV+rip]
- vmovups xmm8, xmmword ptr [rsi]
- vmovups xmm9, xmmword ptr [rsi+0x10]
- vshufps xmm4, xmm8, xmm9, 136
- vshufps xmm5, xmm8, xmm9, 221
- vmovups xmm8, xmmword ptr [rsi+0x20]
- vmovups xmm9, xmmword ptr [rsi+0x30]
- vshufps xmm6, xmm8, xmm9, 136
- vshufps xmm7, xmm8, xmm9, 221
- vpshufd xmm6, xmm6, 0x93
- vpshufd xmm7, xmm7, 0x93
- call blake3_avx512_kernel2d_1
- vmovdqu xmmword ptr [rdi], xmm0
- vmovdqu xmmword ptr [rdi+0x10], xmm1
- ret
-.global blake3_avx512_xof_stream_1
-blake3_avx512_xof_stream_1:
- vmovdqu xmm0, xmmword ptr [rdi]
- vmovdqu xmm1, xmmword ptr [rdi+0x10]
- shl r8, 32
- mov ecx, ecx
- or rcx, r8
- vmovq xmm3, rdx
- vmovq xmm4, rcx
- vpunpcklqdq xmm3, xmm3, xmm4
- vmovaps xmm2, xmmword ptr [BLAKE3_IV+rip]
- vmovups xmm8, xmmword ptr [rsi]
- vmovups xmm9, xmmword ptr [rsi+0x10]
- vshufps xmm4, xmm8, xmm9, 136
- vshufps xmm5, xmm8, xmm9, 221
- vmovups xmm8, xmmword ptr [rsi+0x20]
- vmovups xmm9, xmmword ptr [rsi+0x30]
- vshufps xmm6, xmm8, xmm9, 136
- vshufps xmm7, xmm8, xmm9, 221
- vpshufd xmm6, xmm6, 0x93
- vpshufd xmm7, xmm7, 0x93
- call blake3_avx512_kernel2d_1
- vpxor xmm2, xmm2, [rdi]
- vpxor xmm3, xmm3, [rdi+0x10]
- vmovdqu xmmword ptr [r9], xmm0
- vmovdqu xmmword ptr [r9+0x10], xmm1
- vmovdqu xmmword ptr [r9+0x20], xmm2
- vmovdqu xmmword ptr [r9+0x30], xmm3
- ret
-.global blake3_avx512_xof_xor_1
-blake3_avx512_xof_xor_1:
- vmovdqu xmm0, xmmword ptr [rdi]
- vmovdqu xmm1, xmmword ptr [rdi+0x10]
- shl r8, 32
- mov ecx, ecx
- or rcx, r8
- vmovq xmm3, rdx
- vmovq xmm4, rcx
- vpunpcklqdq xmm3, xmm3, xmm4
- vmovaps xmm2, xmmword ptr [BLAKE3_IV+rip]
- vmovups xmm8, xmmword ptr [rsi]
- vmovups xmm9, xmmword ptr [rsi+0x10]
- vshufps xmm4, xmm8, xmm9, 136
- vshufps xmm5, xmm8, xmm9, 221
- vmovups xmm8, xmmword ptr [rsi+0x20]
- vmovups xmm9, xmmword ptr [rsi+0x30]
- vshufps xmm6, xmm8, xmm9, 136
- vshufps xmm7, xmm8, xmm9, 221
- vpshufd xmm6, xmm6, 0x93
- vpshufd xmm7, xmm7, 0x93
- call blake3_avx512_kernel2d_1
- vpxor xmm2, xmm2, [rdi]
- vpxor xmm3, xmm3, [rdi+0x10]
- vpxor xmm0, xmm0, [r9]
- vpxor xmm1, xmm1, [r9+0x10]
- vpxor xmm2, xmm2, [r9+0x20]
- vpxor xmm3, xmm3, [r9+0x30]
- vmovdqu xmmword ptr [r9], xmm0
- vmovdqu xmmword ptr [r9+0x10], xmm1
- vmovdqu xmmword ptr [r9+0x20], xmm2
- vmovdqu xmmword ptr [r9+0x30], xmm3
- ret
-.global blake3_avx512_xof_stream_2
-blake3_avx512_xof_stream_2:
- vbroadcasti128 ymm0, xmmword ptr [rdi]
- vbroadcasti128 ymm1, xmmword ptr [rdi+0x10]
- vmovdqa ymm4, ymmword ptr [INCREMENT_2D+rip]
- vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV+rip]
- vpbroadcastq ymm5, rdx
- vpaddq ymm6, ymm4, ymm5
- shl r8, 32
- mov ecx, ecx
- or rcx, r8
- vpbroadcastq ymm7, rcx
- vpblendd ymm3, ymm6, ymm7, 0xCC
- vbroadcasti128 ymm8, xmmword ptr [rsi]
- vbroadcasti128 ymm9, xmmword ptr [rsi+0x10]
- vshufps ymm4, ymm8, ymm9, 136
- vshufps ymm5, ymm8, ymm9, 221
- vbroadcasti128 ymm8, xmmword ptr [rsi+0x20]
- vbroadcasti128 ymm9, xmmword ptr [rsi+0x30]
- vshufps ymm6, ymm8, ymm9, 136
- vshufps ymm7, ymm8, ymm9, 221
- vpshufd ymm6, ymm6, 0x93
- vpshufd ymm7, ymm7, 0x93
- call blake3_avx512_kernel2d_2
- vbroadcasti128 ymm4, xmmword ptr [rdi]
- vpxor ymm2, ymm2, ymm4
- vbroadcasti128 ymm5, xmmword ptr [rdi + 16]
- vpxor ymm3, ymm3, ymm5
- vmovdqu xmmword ptr [r9 + 0 * 16], xmm0
- vmovdqu xmmword ptr [r9 + 1 * 16], xmm1
- vmovdqu xmmword ptr [r9 + 2 * 16], xmm2
- vmovdqu xmmword ptr [r9 + 3 * 16], xmm3
- vextracti128 xmmword ptr [r9+4*16], ymm0, 1
- vextracti128 xmmword ptr [r9+5*16], ymm1, 1
- vextracti128 xmmword ptr [r9+6*16], ymm2, 1
- vextracti128 xmmword ptr [r9+7*16], ymm3, 1
- ret
-.global blake3_avx512_xof_xor_2
-blake3_avx512_xof_xor_2:
- vbroadcasti128 ymm0, xmmword ptr [rdi]
- vbroadcasti128 ymm1, xmmword ptr [rdi+0x10]
- vmovdqa ymm4, ymmword ptr [INCREMENT_2D+rip]
- vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV+rip]
- vpbroadcastq ymm5, rdx
- vpaddq ymm6, ymm4, ymm5
- shl r8, 32
- mov ecx, ecx
- or rcx, r8
- vpbroadcastq ymm7, rcx
- vpblendd ymm3, ymm6, ymm7, 0xCC
- vbroadcasti128 ymm8, xmmword ptr [rsi]
- vbroadcasti128 ymm9, xmmword ptr [rsi+0x10]
- vshufps ymm4, ymm8, ymm9, 136
- vshufps ymm5, ymm8, ymm9, 221
- vbroadcasti128 ymm8, xmmword ptr [rsi+0x20]
- vbroadcasti128 ymm9, xmmword ptr [rsi+0x30]
- vshufps ymm6, ymm8, ymm9, 136
- vshufps ymm7, ymm8, ymm9, 221
- vpshufd ymm6, ymm6, 0x93
- vpshufd ymm7, ymm7, 0x93
- call blake3_avx512_kernel2d_2
- vbroadcasti128 ymm4, xmmword ptr [rdi]
- vpxor ymm2, ymm2, ymm4
- vbroadcasti128 ymm5, xmmword ptr [rdi + 16]
- vpxor ymm3, ymm3, ymm5
- vperm2f128 ymm4, ymm0, ymm1, 32
- vperm2f128 ymm5, ymm2, ymm3, 32
- vperm2f128 ymm6, ymm0, ymm1, 49
- vperm2f128 ymm7, ymm2, ymm3, 49
- vpxor ymm4, ymm4, ymmword ptr [r9 + 0 * 32]
- vpxor ymm5, ymm5, ymmword ptr [r9 + 1 * 32]
- vpxor ymm6, ymm6, ymmword ptr [r9 + 2 * 32]
- vpxor ymm7, ymm7, ymmword ptr [r9 + 3 * 32]
- vmovdqu ymmword ptr [r9 + 0 * 32], ymm4
- vmovdqu ymmword ptr [r9 + 1 * 32], ymm5
- vmovdqu ymmword ptr [r9 + 2 * 32], ymm6
- vmovdqu ymmword ptr [r9 + 3 * 32], ymm7
- ret
.global blake3_avx512_xof_stream_4
blake3_avx512_xof_stream_4:
vbroadcasti32x4 zmm0, xmmword ptr [rdi]
@@ -2758,7 +2758,7 @@ blake3_avx512_xof_stream_4:
vshufps zmm7, zmm8, zmm9, 221
vpshufd zmm6, zmm6, 0x93
vpshufd zmm7, zmm7, 0x93
- call blake3_avx512_kernel2d_4
+ call blake3_avx512_kernel_2d_4
vbroadcasti32x4 zmm4, xmmword ptr [rdi]
vpxord zmm2, zmm2, zmm4
vbroadcasti32x4 zmm5, xmmword ptr [rdi + 16]
@@ -2805,7 +2805,7 @@ blake3_avx512_xof_xor_4:
vshufps zmm7, zmm8, zmm9, 221
vpshufd zmm6, zmm6, 0x93
vpshufd zmm7, zmm7, 0x93
- call blake3_avx512_kernel2d_4
+ call blake3_avx512_kernel_2d_4
vbroadcasti32x4 zmm4, xmmword ptr [rdi]
vpxord zmm2, zmm2, zmm4
vbroadcasti32x4 zmm5, xmmword ptr [rdi + 16]
@@ -2827,6 +2827,1128 @@ blake3_avx512_xof_xor_4:
vmovdqu32 zmmword ptr [r9 + 2*64], zmm2
vmovdqu32 zmmword ptr [r9 + 3*64], zmm3
ret
+blake3_avx512_kernel_3d_16:
+ 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
+ ret
+.global blake3_avx512_xof_stream_16
+blake3_avx512_xof_stream_16:
+ vmovdqa32 zmm12, zmmword ptr [rip + EVEN_INDEXES]
+ vmovdqa32 zmm13, zmmword ptr [rip + ODD_INDEXES]
+ vpbroadcastd zmm0, dword ptr [rdi+0]
+ vpbroadcastd zmm1, dword ptr [rdi+4]
+ vpbroadcastd zmm2, dword ptr [rdi+8]
+ vpbroadcastd zmm3, dword ptr [rdi+12]
+ vpbroadcastd zmm4, dword ptr [rdi+16]
+ vpbroadcastd zmm5, dword ptr [rdi+20]
+ vpbroadcastd zmm6, dword ptr [rdi+24]
+ vpbroadcastd zmm7, dword ptr [rdi+28]
+ vpbroadcastd zmm16, dword ptr [rsi+0]
+ vpbroadcastd zmm17, dword ptr [rsi+4]
+ vpbroadcastd zmm18, dword ptr [rsi+8]
+ vpbroadcastd zmm19, dword ptr [rsi+12]
+ vpbroadcastd zmm20, dword ptr [rsi+16]
+ vpbroadcastd zmm21, dword ptr [rsi+20]
+ vpbroadcastd zmm22, dword ptr [rsi+24]
+ vpbroadcastd zmm23, dword ptr [rsi+28]
+ vpbroadcastd zmm24, dword ptr [rsi+32]
+ vpbroadcastd zmm25, dword ptr [rsi+36]
+ vpbroadcastd zmm26, dword ptr [rsi+40]
+ vpbroadcastd zmm27, dword ptr [rsi+44]
+ vpbroadcastd zmm28, dword ptr [rsi+48]
+ vpbroadcastd zmm29, dword ptr [rsi+52]
+ vpbroadcastd zmm30, dword ptr [rsi+56]
+ vpbroadcastd zmm31, dword ptr [rsi+60]
+ vmovdqa64 zmm8, zmmword ptr [INCREMENT_3D+rip]
+ vpbroadcastq zmm9, rdx
+ vpaddq zmm9, zmm9, zmm8
+ add rdx, 8
+ vpbroadcastq zmm10, rdx
+ vpaddq zmm10, zmm10, zmm8
+ vpermi2d zmm12, zmm9, zmm10
+ vpermi2d zmm13, zmm9, zmm10
+ vpbroadcastd zmm14, ecx
+ vpbroadcastd zmm15, r8d
+ vpbroadcastd zmm8, dword ptr [BLAKE3_IV+rip+0]
+ vpbroadcastd zmm9, dword ptr [BLAKE3_IV+rip+4]
+ vpbroadcastd zmm10, dword ptr [BLAKE3_IV+rip+8]
+ vpbroadcastd zmm11, dword ptr [BLAKE3_IV+rip+12]
+ call blake3_avx512_kernel_3d_16
+ vpbroadcastd zmm16, dword ptr [rdi + 0 * 4]
+ vpxord zmm8, zmm8, zmm16
+ vpbroadcastd zmm17, dword ptr [rdi + 1 * 4]
+ vpxord zmm9, zmm9, zmm17
+ vpbroadcastd zmm18, dword ptr [rdi + 2 * 4]
+ vpxord zmm10, zmm10, zmm18
+ vpbroadcastd zmm19, dword ptr [rdi + 3 * 4]
+ vpxord zmm11, zmm11, zmm19
+ vpbroadcastd zmm20, dword ptr [rdi + 4 * 4]
+ vpxord zmm12, zmm12, zmm20
+ vpbroadcastd zmm21, dword ptr [rdi + 5 * 4]
+ vpxord zmm13, zmm13, zmm21
+ vpbroadcastd zmm22, dword ptr [rdi + 6 * 4]
+ vpxord zmm14, zmm14, zmm22
+ vpbroadcastd zmm23, dword ptr [rdi + 7 * 4]
+ vpxord zmm15, zmm15, zmm23
+ vpunpckldq zmm16, zmm0, zmm1
+ vpunpckhdq zmm17, zmm0, zmm1
+ vpunpckldq zmm18, zmm2, zmm3
+ vpunpckhdq zmm19, zmm2, zmm3
+ vpunpcklqdq zmm0, zmm16, zmm18
+ vmovdqu32 xmmword ptr [r9 + 0 * 16], xmm0
+ vextracti32x4 xmmword ptr [r9 + 16 * 16], zmm0, 1
+ vextracti32x4 xmmword ptr [r9 + 32 * 16], zmm0, 2
+ vextracti32x4 xmmword ptr [r9 + 48 * 16], zmm0, 3
+ vpunpckhqdq zmm1, zmm16, zmm18
+ vmovdqu32 xmmword ptr [r9 + 4 * 16], xmm1
+ vextracti32x4 xmmword ptr [r9 + 20 * 16], zmm1, 1
+ vextracti32x4 xmmword ptr [r9 + 36 * 16], zmm1, 2
+ vextracti32x4 xmmword ptr [r9 + 52 * 16], zmm1, 3
+ vpunpcklqdq zmm2, zmm17, zmm19
+ vmovdqu32 xmmword ptr [r9 + 8 * 16], xmm2
+ vextracti32x4 xmmword ptr [r9 + 24 * 16], zmm2, 1
+ vextracti32x4 xmmword ptr [r9 + 40 * 16], zmm2, 2
+ vextracti32x4 xmmword ptr [r9 + 56 * 16], zmm2, 3
+ vpunpckhqdq zmm3, zmm17, zmm19
+ vmovdqu32 xmmword ptr [r9 + 12 * 16], xmm3
+ vextracti32x4 xmmword ptr [r9 + 28 * 16], zmm3, 1
+ vextracti32x4 xmmword ptr [r9 + 44 * 16], zmm3, 2
+ vextracti32x4 xmmword ptr [r9 + 60 * 16], zmm3, 3
+ vpunpckldq zmm20, zmm4, zmm5
+ vpunpckhdq zmm21, zmm4, zmm5
+ vpunpckldq zmm22, zmm6, zmm7
+ vpunpckhdq zmm23, zmm6, zmm7
+ vpunpcklqdq zmm4, zmm20, zmm22
+ vmovdqu32 xmmword ptr [r9 + 1 * 16], xmm4
+ vextracti32x4 xmmword ptr [r9 + 17 * 16], zmm4, 1
+ vextracti32x4 xmmword ptr [r9 + 33 * 16], zmm4, 2
+ vextracti32x4 xmmword ptr [r9 + 49 * 16], zmm4, 3
+ vpunpckhqdq zmm5, zmm20, zmm22
+ vmovdqu32 xmmword ptr [r9 + 5 * 16], xmm5
+ vextracti32x4 xmmword ptr [r9 + 21 * 16], zmm5, 1
+ vextracti32x4 xmmword ptr [r9 + 37 * 16], zmm5, 2
+ vextracti32x4 xmmword ptr [r9 + 53 * 16], zmm5, 3
+ vpunpcklqdq zmm6, zmm21, zmm23
+ vmovdqu32 xmmword ptr [r9 + 9 * 16], xmm6
+ vextracti32x4 xmmword ptr [r9 + 25 * 16], zmm6, 1
+ vextracti32x4 xmmword ptr [r9 + 41 * 16], zmm6, 2
+ vextracti32x4 xmmword ptr [r9 + 57 * 16], zmm6, 3
+ vpunpckhqdq zmm7, zmm21, zmm23
+ vmovdqu32 xmmword ptr [r9 + 13 * 16], xmm7
+ vextracti32x4 xmmword ptr [r9 + 29 * 16], zmm7, 1
+ vextracti32x4 xmmword ptr [r9 + 45 * 16], zmm7, 2
+ vextracti32x4 xmmword ptr [r9 + 61 * 16], zmm7, 3
+ vpunpckldq zmm24, zmm8, zmm9
+ vpunpckhdq zmm25, zmm8, zmm9
+ vpunpckldq zmm26, zmm10, zmm11
+ vpunpckhdq zmm27, zmm10, zmm11
+ vpunpcklqdq zmm8, zmm24, zmm26
+ vmovdqu32 xmmword ptr [r9 + 2 * 16], xmm8
+ vextracti32x4 xmmword ptr [r9 + 18 * 16], zmm8, 1
+ vextracti32x4 xmmword ptr [r9 + 34 * 16], zmm8, 2
+ vextracti32x4 xmmword ptr [r9 + 50 * 16], zmm8, 3
+ vpunpckhqdq zmm9, zmm24, zmm26
+ vmovdqu32 xmmword ptr [r9 + 6 * 16], xmm9
+ vextracti32x4 xmmword ptr [r9 + 22 * 16], zmm9, 1
+ vextracti32x4 xmmword ptr [r9 + 38 * 16], zmm9, 2
+ vextracti32x4 xmmword ptr [r9 + 54 * 16], zmm9, 3
+ vpunpcklqdq zmm10, zmm25, zmm27
+ vmovdqu32 xmmword ptr [r9 + 10 * 16], xmm10
+ vextracti32x4 xmmword ptr [r9 + 26 * 16], zmm10, 1
+ vextracti32x4 xmmword ptr [r9 + 42 * 16], zmm10, 2
+ vextracti32x4 xmmword ptr [r9 + 58 * 16], zmm10, 3
+ vpunpckhqdq zmm11, zmm25, zmm27
+ vmovdqu32 xmmword ptr [r9 + 14 * 16], xmm11
+ vextracti32x4 xmmword ptr [r9 + 30 * 16], zmm11, 1
+ vextracti32x4 xmmword ptr [r9 + 46 * 16], zmm11, 2
+ vextracti32x4 xmmword ptr [r9 + 62 * 16], zmm11, 3
+ vpunpckldq zmm28, zmm12, zmm13
+ vpunpckhdq zmm29, zmm12, zmm13
+ vpunpckldq zmm30, zmm14, zmm15
+ vpunpckhdq zmm31, zmm14, zmm15
+ vpunpcklqdq zmm12, zmm28, zmm30
+ vmovdqu32 xmmword ptr [r9 + 3 * 16], xmm12
+ vextracti32x4 xmmword ptr [r9 + 19 * 16], zmm12, 1
+ vextracti32x4 xmmword ptr [r9 + 35 * 16], zmm12, 2
+ vextracti32x4 xmmword ptr [r9 + 51 * 16], zmm12, 3
+ vpunpckhqdq zmm13, zmm28, zmm30
+ vmovdqu32 xmmword ptr [r9 + 7 * 16], xmm13
+ vextracti32x4 xmmword ptr [r9 + 23 * 16], zmm13, 1
+ vextracti32x4 xmmword ptr [r9 + 39 * 16], zmm13, 2
+ vextracti32x4 xmmword ptr [r9 + 55 * 16], zmm13, 3
+ vpunpcklqdq zmm14, zmm29, zmm31
+ vmovdqu32 xmmword ptr [r9 + 11 * 16], xmm14
+ vextracti32x4 xmmword ptr [r9 + 27 * 16], zmm14, 1
+ vextracti32x4 xmmword ptr [r9 + 43 * 16], zmm14, 2
+ vextracti32x4 xmmword ptr [r9 + 59 * 16], zmm14, 3
+ vpunpckhqdq zmm15, zmm29, zmm31
+ vmovdqu32 xmmword ptr [r9 + 15 * 16], xmm15
+ vextracti32x4 xmmword ptr [r9 + 31 * 16], zmm15, 1
+ vextracti32x4 xmmword ptr [r9 + 47 * 16], zmm15, 2
+ vextracti32x4 xmmword ptr [r9 + 63 * 16], zmm15, 3
+ ret
+.global blake3_avx512_xof_xor_16
+blake3_avx512_xof_xor_16:
+ vmovdqa32 zmm12, zmmword ptr [rip + EVEN_INDEXES]
+ vmovdqa32 zmm13, zmmword ptr [rip + ODD_INDEXES]
+ vpbroadcastd zmm0, dword ptr [rdi+0]
+ vpbroadcastd zmm1, dword ptr [rdi+4]
+ vpbroadcastd zmm2, dword ptr [rdi+8]
+ vpbroadcastd zmm3, dword ptr [rdi+12]
+ vpbroadcastd zmm4, dword ptr [rdi+16]
+ vpbroadcastd zmm5, dword ptr [rdi+20]
+ vpbroadcastd zmm6, dword ptr [rdi+24]
+ vpbroadcastd zmm7, dword ptr [rdi+28]
+ vpbroadcastd zmm16, dword ptr [rsi+0]
+ vpbroadcastd zmm17, dword ptr [rsi+4]
+ vpbroadcastd zmm18, dword ptr [rsi+8]
+ vpbroadcastd zmm19, dword ptr [rsi+12]
+ vpbroadcastd zmm20, dword ptr [rsi+16]
+ vpbroadcastd zmm21, dword ptr [rsi+20]
+ vpbroadcastd zmm22, dword ptr [rsi+24]
+ vpbroadcastd zmm23, dword ptr [rsi+28]
+ vpbroadcastd zmm24, dword ptr [rsi+32]
+ vpbroadcastd zmm25, dword ptr [rsi+36]
+ vpbroadcastd zmm26, dword ptr [rsi+40]
+ vpbroadcastd zmm27, dword ptr [rsi+44]
+ vpbroadcastd zmm28, dword ptr [rsi+48]
+ vpbroadcastd zmm29, dword ptr [rsi+52]
+ vpbroadcastd zmm30, dword ptr [rsi+56]
+ vpbroadcastd zmm31, dword ptr [rsi+60]
+ vmovdqa64 zmm8, zmmword ptr [INCREMENT_3D+rip]
+ vpbroadcastq zmm9, rdx
+ vpaddq zmm9, zmm9, zmm8
+ add rdx, 8
+ vpbroadcastq zmm10, rdx
+ vpaddq zmm10, zmm10, zmm8
+ vpermi2d zmm12, zmm9, zmm10
+ vpermi2d zmm13, zmm9, zmm10
+ vpbroadcastd zmm14, ecx
+ vpbroadcastd zmm15, r8d
+ vpbroadcastd zmm8, dword ptr [BLAKE3_IV+rip+0]
+ vpbroadcastd zmm9, dword ptr [BLAKE3_IV+rip+4]
+ vpbroadcastd zmm10, dword ptr [BLAKE3_IV+rip+8]
+ vpbroadcastd zmm11, dword ptr [BLAKE3_IV+rip+12]
+ call blake3_avx512_kernel_3d_16
+ vpbroadcastd zmm16, dword ptr [rdi + 0 * 4]
+ vpxord zmm8, zmm8, zmm16
+ vpbroadcastd zmm17, dword ptr [rdi + 1 * 4]
+ vpxord zmm9, zmm9, zmm17
+ vpbroadcastd zmm18, dword ptr [rdi + 2 * 4]
+ vpxord zmm10, zmm10, zmm18
+ vpbroadcastd zmm19, dword ptr [rdi + 3 * 4]
+ vpxord zmm11, zmm11, zmm19
+ vpbroadcastd zmm20, dword ptr [rdi + 4 * 4]
+ vpxord zmm12, zmm12, zmm20
+ vpbroadcastd zmm21, dword ptr [rdi + 5 * 4]
+ vpxord zmm13, zmm13, zmm21
+ vpbroadcastd zmm22, dword ptr [rdi + 6 * 4]
+ vpxord zmm14, zmm14, zmm22
+ vpbroadcastd zmm23, dword ptr [rdi + 7 * 4]
+ vpxord zmm15, zmm15, zmm23
+ vpunpckldq zmm16, zmm0, zmm1
+ vpunpckhdq zmm17, zmm0, zmm1
+ vpunpckldq zmm18, zmm2, zmm3
+ vpunpckhdq zmm19, zmm2, zmm3
+ vpunpckldq zmm20, zmm4, zmm5
+ vpunpckhdq zmm21, zmm4, zmm5
+ vpunpckldq zmm22, zmm6, zmm7
+ vpunpckhdq zmm23, zmm6, zmm7
+ vpunpckldq zmm24, zmm8, zmm9
+ vpunpckhdq zmm25, zmm8, zmm9
+ vpunpckldq zmm26, zmm10, zmm11
+ vpunpckhdq zmm27, zmm10, zmm11
+ vpunpckldq zmm28, zmm12, zmm13
+ vpunpckhdq zmm29, zmm12, zmm13
+ vpunpckldq zmm30, zmm14, zmm15
+ vpunpckhdq zmm31, zmm14, zmm15
+ vpunpcklqdq zmm0, zmm16, zmm18
+ vpunpckhqdq zmm1, zmm16, zmm18
+ vpunpcklqdq zmm2, zmm17, zmm19
+ vpunpckhqdq zmm3, zmm17, zmm19
+ vpunpcklqdq zmm4, zmm20, zmm22
+ vpunpckhqdq zmm5, zmm20, zmm22
+ vpunpcklqdq zmm6, zmm21, zmm23
+ vpunpckhqdq zmm7, zmm21, zmm23
+ vpunpcklqdq zmm8, zmm24, zmm26
+ vpunpckhqdq zmm9, zmm24, zmm26
+ vpunpcklqdq zmm10, zmm25, zmm27
+ vpunpckhqdq zmm11, zmm25, zmm27
+ vpunpcklqdq zmm12, zmm28, zmm30
+ vpunpckhqdq zmm13, zmm28, zmm30
+ vpunpcklqdq zmm14, zmm29, zmm31
+ vpunpckhqdq zmm15, zmm29, zmm31
+ vshufi32x4 zmm16, zmm0, zmm4, 0x88
+ vshufi32x4 zmm17, zmm1, zmm5, 0x88
+ vshufi32x4 zmm18, zmm2, zmm6, 0x88
+ vshufi32x4 zmm19, zmm3, zmm7, 0x88
+ vshufi32x4 zmm20, zmm0, zmm4, 0xdd
+ vshufi32x4 zmm21, zmm1, zmm5, 0xdd
+ vshufi32x4 zmm22, zmm2, zmm6, 0xdd
+ vshufi32x4 zmm23, zmm3, zmm7, 0xdd
+ vshufi32x4 zmm24, zmm8, zmm12, 0x88
+ vshufi32x4 zmm25, zmm9, zmm13, 0x88
+ vshufi32x4 zmm26, zmm10, zmm14, 0x88
+ vshufi32x4 zmm27, zmm11, zmm15, 0x88
+ vshufi32x4 zmm28, zmm8, zmm12, 0xdd
+ vshufi32x4 zmm29, zmm9, zmm13, 0xdd
+ vshufi32x4 zmm30, zmm10, zmm14, 0xdd
+ vshufi32x4 zmm31, zmm11, zmm15, 0xdd
+ vshufi32x4 zmm0, zmm16, zmm24, 0x88
+ vshufi32x4 zmm1, zmm17, zmm25, 0x88
+ vshufi32x4 zmm2, zmm18, zmm26, 0x88
+ vshufi32x4 zmm3, zmm19, zmm27, 0x88
+ vshufi32x4 zmm4, zmm20, zmm28, 0x88
+ vshufi32x4 zmm5, zmm21, zmm29, 0x88
+ vshufi32x4 zmm6, zmm22, zmm30, 0x88
+ vshufi32x4 zmm7, zmm23, zmm31, 0x88
+ vshufi32x4 zmm8, zmm16, zmm24, 0xdd
+ vshufi32x4 zmm9, zmm17, zmm25, 0xdd
+ vshufi32x4 zmm10, zmm18, zmm26, 0xdd
+ vshufi32x4 zmm11, zmm19, zmm27, 0xdd
+ vshufi32x4 zmm12, zmm20, zmm28, 0xdd
+ vshufi32x4 zmm13, zmm21, zmm29, 0xdd
+ vshufi32x4 zmm14, zmm22, zmm30, 0xdd
+ vshufi32x4 zmm15, zmm23, zmm31, 0xdd
+ vmovdqu32 zmm16, zmmword ptr [r9 + 0 * 64]
+ vpxord zmm0, zmm0, zmm16
+ vmovdqu32 zmmword ptr [r9 + 0 * 64], zmm0
+ vmovdqu32 zmm17, zmmword ptr [r9 + 1 * 64]
+ vpxord zmm1, zmm1, zmm17
+ vmovdqu32 zmmword ptr [r9 + 1 * 64], zmm1
+ vmovdqu32 zmm18, zmmword ptr [r9 + 2 * 64]
+ vpxord zmm2, zmm2, zmm18
+ vmovdqu32 zmmword ptr [r9 + 2 * 64], zmm2
+ vmovdqu32 zmm19, zmmword ptr [r9 + 3 * 64]
+ vpxord zmm3, zmm3, zmm19
+ vmovdqu32 zmmword ptr [r9 + 3 * 64], zmm3
+ vmovdqu32 zmm20, zmmword ptr [r9 + 4 * 64]
+ vpxord zmm4, zmm4, zmm20
+ vmovdqu32 zmmword ptr [r9 + 4 * 64], zmm4
+ vmovdqu32 zmm21, zmmword ptr [r9 + 5 * 64]
+ vpxord zmm5, zmm5, zmm21
+ vmovdqu32 zmmword ptr [r9 + 5 * 64], zmm5
+ vmovdqu32 zmm22, zmmword ptr [r9 + 6 * 64]
+ vpxord zmm6, zmm6, zmm22
+ vmovdqu32 zmmword ptr [r9 + 6 * 64], zmm6
+ vmovdqu32 zmm23, zmmword ptr [r9 + 7 * 64]
+ vpxord zmm7, zmm7, zmm23
+ vmovdqu32 zmmword ptr [r9 + 7 * 64], zmm7
+ vmovdqu32 zmm24, zmmword ptr [r9 + 8 * 64]
+ vpxord zmm8, zmm8, zmm24
+ vmovdqu32 zmmword ptr [r9 + 8 * 64], zmm8
+ vmovdqu32 zmm25, zmmword ptr [r9 + 9 * 64]
+ vpxord zmm9, zmm9, zmm25
+ vmovdqu32 zmmword ptr [r9 + 9 * 64], zmm9
+ vmovdqu32 zmm26, zmmword ptr [r9 + 10 * 64]
+ vpxord zmm10, zmm10, zmm26
+ vmovdqu32 zmmword ptr [r9 + 10 * 64], zmm10
+ vmovdqu32 zmm27, zmmword ptr [r9 + 11 * 64]
+ vpxord zmm11, zmm11, zmm27
+ vmovdqu32 zmmword ptr [r9 + 11 * 64], zmm11
+ vmovdqu32 zmm28, zmmword ptr [r9 + 12 * 64]
+ vpxord zmm12, zmm12, zmm28
+ vmovdqu32 zmmword ptr [r9 + 12 * 64], zmm12
+ vmovdqu32 zmm29, zmmword ptr [r9 + 13 * 64]
+ vpxord zmm13, zmm13, zmm29
+ vmovdqu32 zmmword ptr [r9 + 13 * 64], zmm13
+ vmovdqu32 zmm30, zmmword ptr [r9 + 14 * 64]
+ vpxord zmm14, zmm14, zmm30
+ vmovdqu32 zmmword ptr [r9 + 14 * 64], zmm14
+ vmovdqu32 zmm31, zmmword ptr [r9 + 15 * 64]
+ vpxord zmm15, zmm15, zmm31
+ vmovdqu32 zmmword ptr [r9 + 15 * 64], zmm15
+ ret
.balign 16
BLAKE3_IV:
BLAKE3_IV_0:
@@ -2845,3 +3967,10 @@ ROT8:
.balign 64
INCREMENT_2D:
.quad 0, 0, 1, 0, 2, 0, 3, 0
+INCREMENT_3D:
+.quad 0, 1, 2, 3, 4, 5, 6, 7
+.balign 64
+EVEN_INDEXES:
+.long 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30
+ODD_INDEXES:
+.long 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31