mirror of
https://github.com/BLAKE3-team/BLAKE3
synced 2024-09-12 15:50:47 +02:00
1829 lines
64 KiB
NASM
1829 lines
64 KiB
NASM
public _blake3_hash_many_avx2
|
|
public blake3_hash_many_avx2
|
|
|
|
_TEXT SEGMENT ALIGN(16) 'CODE'
|
|
|
|
ALIGN 16
|
|
blake3_hash_many_avx2 PROC
|
|
_blake3_hash_many_avx2 PROC
|
|
push r15
|
|
push r14
|
|
push r13
|
|
push r12
|
|
push rsi
|
|
push rdi
|
|
push rbx
|
|
push rbp
|
|
mov rbp, rsp
|
|
sub rsp, 880
|
|
and rsp, 0FFFFFFFFFFFFFFC0H
|
|
vmovdqa xmmword ptr [rsp+2D0H], xmm6
|
|
vmovdqa xmmword ptr [rsp+2E0H], xmm7
|
|
vmovdqa xmmword ptr [rsp+2F0H], xmm8
|
|
vmovdqa xmmword ptr [rsp+300H], xmm9
|
|
vmovdqa xmmword ptr [rsp+310H], xmm10
|
|
vmovdqa xmmword ptr [rsp+320H], xmm11
|
|
vmovdqa xmmword ptr [rsp+330H], xmm12
|
|
vmovdqa xmmword ptr [rsp+340H], xmm13
|
|
vmovdqa xmmword ptr [rsp+350H], xmm14
|
|
vmovdqa xmmword ptr [rsp+360H], 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 r9d
|
|
vmovd xmm0, r9d
|
|
vpbroadcastd ymm0, xmm0
|
|
vmovdqa ymmword ptr [rsp+260H], ymm0
|
|
vpand ymm1, ymm0, ymmword ptr [ADD0]
|
|
vpand ymm2, ymm0, ymmword ptr [ADD1]
|
|
vmovdqa ymmword ptr [rsp+2A0H], ymm2
|
|
vmovd xmm2, r8d
|
|
vpbroadcastd ymm2, xmm2
|
|
vpaddd ymm2, ymm2, ymm1
|
|
vmovdqa ymmword ptr [rsp+220H], ymm2
|
|
vpxor ymm1, ymm1, ymmword ptr [CMP_MSB_MASK]
|
|
vpxor ymm2, ymm2, ymmword ptr [CMP_MSB_MASK]
|
|
vpcmpgtd ymm2, ymm1, ymm2
|
|
shr r8, 32
|
|
vmovd xmm3, r8d
|
|
vpbroadcastd ymm3, xmm3
|
|
vpsubd ymm3, ymm3, ymm2
|
|
vmovdqa ymmword ptr [rsp+240H], ymm3
|
|
shl rdx, 6
|
|
mov qword ptr [rsp+2C0H], rdx
|
|
cmp rsi, 8
|
|
jc final7blocks
|
|
outerloop8:
|
|
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
|
|
ALIGN 16
|
|
innerloop8:
|
|
movzx ebx, byte ptr [rbp+88H]
|
|
or ebx, eax
|
|
add rdx, 64
|
|
cmp rdx, qword ptr [rsp+2C0H]
|
|
cmove eax, ebx
|
|
mov dword ptr [rsp+200H], 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 ymm8, ymm12, ymm14, 136
|
|
vmovaps ymmword ptr [rsp], ymm8
|
|
vshufps ymm9, ymm12, ymm14, 221
|
|
vmovaps ymmword ptr [rsp+20H], ymm9
|
|
vshufps ymm10, ymm13, ymm15, 136
|
|
vmovaps ymmword ptr [rsp+40H], ymm10
|
|
vshufps ymm11, ymm13, ymm15, 221
|
|
vmovaps ymmword ptr [rsp+60H], ymm11
|
|
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 ymm8, ymm12, ymm14, 136
|
|
vmovaps ymmword ptr [rsp+80H], ymm8
|
|
vshufps ymm9, ymm12, ymm14, 221
|
|
vmovaps ymmword ptr [rsp+0A0H], ymm9
|
|
vshufps ymm10, ymm13, ymm15, 136
|
|
vmovaps ymmword ptr [rsp+0C0H], ymm10
|
|
vshufps ymm11, ymm13, ymm15, 221
|
|
vmovaps ymmword ptr [rsp+0E0H], ymm11
|
|
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 ymm8, ymm12, ymm14, 136
|
|
vmovaps ymmword ptr [rsp+100H], ymm8
|
|
vshufps ymm9, ymm12, ymm14, 221
|
|
vmovaps ymmword ptr [rsp+120H], ymm9
|
|
vshufps ymm10, ymm13, ymm15, 136
|
|
vmovaps ymmword ptr [rsp+140H], ymm10
|
|
vshufps ymm11, ymm13, ymm15, 221
|
|
vmovaps ymmword ptr [rsp+160H], ymm11
|
|
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 ymm8, ymm12, ymm14, 136
|
|
vmovaps ymmword ptr [rsp+180H], ymm8
|
|
vshufps ymm9, ymm12, ymm14, 221
|
|
vmovaps ymmword ptr [rsp+1A0H], ymm9
|
|
vshufps ymm10, ymm13, ymm15, 136
|
|
vmovaps ymmword ptr [rsp+1C0H], ymm10
|
|
vshufps ymm11, ymm13, ymm15, 221
|
|
vmovaps ymmword ptr [rsp+1E0H], ymm11
|
|
vpbroadcastd ymm15, dword ptr [rsp+200H]
|
|
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]
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+40H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+80H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+0C0H]
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm1, ymm1, ymm5
|
|
vpaddd ymm2, ymm2, ymm6
|
|
vpaddd ymm3, ymm3, ymm7
|
|
vpxor ymm12, ymm0, ymmword ptr [rsp+220H]
|
|
vpxor ymm13, ymm1, ymmword ptr [rsp+240H]
|
|
vpxor ymm14, ymm2, ymmword ptr [BLAKE3_BLOCK_LEN]
|
|
vpxor ymm15, ymm3, ymm15
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT16]
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpaddd ymm8, ymm12, ymmword ptr [BLAKE3_IV_0]
|
|
vpaddd ymm9, ymm13, ymmword ptr [BLAKE3_IV_1]
|
|
vpaddd ymm10, ymm14, ymmword ptr [BLAKE3_IV_2]
|
|
vpaddd ymm11, ymm15, ymmword ptr [BLAKE3_IV_3]
|
|
vpxor ymm4, ymm4, ymm8
|
|
vpxor ymm5, ymm5, ymm9
|
|
vpxor ymm6, ymm6, ymm10
|
|
vpxor ymm7, ymm7, ymm11
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm4, 12
|
|
vpslld ymm4, ymm4, 20
|
|
vpor ymm4, ymm4, ymm8
|
|
vpsrld ymm8, ymm5, 12
|
|
vpslld ymm5, ymm5, 20
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 12
|
|
vpslld ymm6, ymm6, 20
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 12
|
|
vpslld ymm7, ymm7, 20
|
|
vpor ymm7, ymm7, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+20H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+60H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+0A0H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+0E0H]
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm1, ymm1, ymm5
|
|
vpaddd ymm2, ymm2, ymm6
|
|
vpaddd ymm3, ymm3, ymm7
|
|
vpxor ymm12, ymm12, ymm0
|
|
vpxor ymm13, ymm13, ymm1
|
|
vpxor ymm14, ymm14, ymm2
|
|
vpxor ymm15, ymm15, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT8]
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm13
|
|
vpaddd ymm10, ymm10, ymm14
|
|
vpaddd ymm11, ymm11, ymm15
|
|
vpxor ymm4, ymm4, ymm8
|
|
vpxor ymm5, ymm5, ymm9
|
|
vpxor ymm6, ymm6, ymm10
|
|
vpxor ymm7, ymm7, ymm11
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm4, 7
|
|
vpslld ymm4, ymm4, 25
|
|
vpor ymm4, ymm4, ymm8
|
|
vpsrld ymm8, ymm5, 7
|
|
vpslld ymm5, ymm5, 25
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 7
|
|
vpslld ymm6, ymm6, 25
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 7
|
|
vpslld ymm7, ymm7, 25
|
|
vpor ymm7, ymm7, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+100H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+140H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+180H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+1C0H]
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm1, ymm1, ymm6
|
|
vpaddd ymm2, ymm2, ymm7
|
|
vpaddd ymm3, ymm3, ymm4
|
|
vpxor ymm15, ymm15, ymm0
|
|
vpxor ymm12, ymm12, ymm1
|
|
vpxor ymm13, ymm13, ymm2
|
|
vpxor ymm14, ymm14, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT16]
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpaddd ymm10, ymm10, ymm15
|
|
vpaddd ymm11, ymm11, ymm12
|
|
vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm14
|
|
vpxor ymm5, ymm5, ymm10
|
|
vpxor ymm6, ymm6, ymm11
|
|
vpxor ymm7, ymm7, ymm8
|
|
vpxor ymm4, ymm4, ymm9
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm5, 12
|
|
vpslld ymm5, ymm5, 20
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 12
|
|
vpslld ymm6, ymm6, 20
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 12
|
|
vpslld ymm7, ymm7, 20
|
|
vpor ymm7, ymm7, ymm8
|
|
vpsrld ymm8, ymm4, 12
|
|
vpslld ymm4, ymm4, 20
|
|
vpor ymm4, ymm4, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+120H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+160H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+1A0H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+1E0H]
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm1, ymm1, ymm6
|
|
vpaddd ymm2, ymm2, ymm7
|
|
vpaddd ymm3, ymm3, ymm4
|
|
vpxor ymm15, ymm15, ymm0
|
|
vpxor ymm12, ymm12, ymm1
|
|
vpxor ymm13, ymm13, ymm2
|
|
vpxor ymm14, ymm14, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT8]
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpaddd ymm10, ymm10, ymm15
|
|
vpaddd ymm11, ymm11, ymm12
|
|
vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm14
|
|
vpxor ymm5, ymm5, ymm10
|
|
vpxor ymm6, ymm6, ymm11
|
|
vpxor ymm7, ymm7, ymm8
|
|
vpxor ymm4, ymm4, ymm9
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm5, 7
|
|
vpslld ymm5, ymm5, 25
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 7
|
|
vpslld ymm6, ymm6, 25
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 7
|
|
vpslld ymm7, ymm7, 25
|
|
vpor ymm7, ymm7, ymm8
|
|
vpsrld ymm8, ymm4, 7
|
|
vpslld ymm4, ymm4, 25
|
|
vpor ymm4, ymm4, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+40H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+60H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+0E0H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+80H]
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm1, ymm1, ymm5
|
|
vpaddd ymm2, ymm2, ymm6
|
|
vpaddd ymm3, ymm3, ymm7
|
|
vpxor ymm12, ymm12, ymm0
|
|
vpxor ymm13, ymm13, ymm1
|
|
vpxor ymm14, ymm14, ymm2
|
|
vpxor ymm15, ymm15, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT16]
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm13
|
|
vpaddd ymm10, ymm10, ymm14
|
|
vpaddd ymm11, ymm11, ymm15
|
|
vpxor ymm4, ymm4, ymm8
|
|
vpxor ymm5, ymm5, ymm9
|
|
vpxor ymm6, ymm6, ymm10
|
|
vpxor ymm7, ymm7, ymm11
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm4, 12
|
|
vpslld ymm4, ymm4, 20
|
|
vpor ymm4, ymm4, ymm8
|
|
vpsrld ymm8, ymm5, 12
|
|
vpslld ymm5, ymm5, 20
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 12
|
|
vpslld ymm6, ymm6, 20
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 12
|
|
vpslld ymm7, ymm7, 20
|
|
vpor ymm7, ymm7, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+0C0H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+140H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+1A0H]
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm1, ymm1, ymm5
|
|
vpaddd ymm2, ymm2, ymm6
|
|
vpaddd ymm3, ymm3, ymm7
|
|
vpxor ymm12, ymm12, ymm0
|
|
vpxor ymm13, ymm13, ymm1
|
|
vpxor ymm14, ymm14, ymm2
|
|
vpxor ymm15, ymm15, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT8]
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm13
|
|
vpaddd ymm10, ymm10, ymm14
|
|
vpaddd ymm11, ymm11, ymm15
|
|
vpxor ymm4, ymm4, ymm8
|
|
vpxor ymm5, ymm5, ymm9
|
|
vpxor ymm6, ymm6, ymm10
|
|
vpxor ymm7, ymm7, ymm11
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm4, 7
|
|
vpslld ymm4, ymm4, 25
|
|
vpor ymm4, ymm4, ymm8
|
|
vpsrld ymm8, ymm5, 7
|
|
vpslld ymm5, ymm5, 25
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 7
|
|
vpslld ymm6, ymm6, 25
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 7
|
|
vpslld ymm7, ymm7, 25
|
|
vpor ymm7, ymm7, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+20H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+180H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+120H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+1E0H]
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm1, ymm1, ymm6
|
|
vpaddd ymm2, ymm2, ymm7
|
|
vpaddd ymm3, ymm3, ymm4
|
|
vpxor ymm15, ymm15, ymm0
|
|
vpxor ymm12, ymm12, ymm1
|
|
vpxor ymm13, ymm13, ymm2
|
|
vpxor ymm14, ymm14, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT16]
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpaddd ymm10, ymm10, ymm15
|
|
vpaddd ymm11, ymm11, ymm12
|
|
vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm14
|
|
vpxor ymm5, ymm5, ymm10
|
|
vpxor ymm6, ymm6, ymm11
|
|
vpxor ymm7, ymm7, ymm8
|
|
vpxor ymm4, ymm4, ymm9
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm5, 12
|
|
vpslld ymm5, ymm5, 20
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 12
|
|
vpslld ymm6, ymm6, 20
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 12
|
|
vpslld ymm7, ymm7, 20
|
|
vpor ymm7, ymm7, ymm8
|
|
vpsrld ymm8, ymm4, 12
|
|
vpslld ymm4, ymm4, 20
|
|
vpor ymm4, ymm4, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+160H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+0A0H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+1C0H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+100H]
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm1, ymm1, ymm6
|
|
vpaddd ymm2, ymm2, ymm7
|
|
vpaddd ymm3, ymm3, ymm4
|
|
vpxor ymm15, ymm15, ymm0
|
|
vpxor ymm12, ymm12, ymm1
|
|
vpxor ymm13, ymm13, ymm2
|
|
vpxor ymm14, ymm14, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT8]
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpaddd ymm10, ymm10, ymm15
|
|
vpaddd ymm11, ymm11, ymm12
|
|
vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm14
|
|
vpxor ymm5, ymm5, ymm10
|
|
vpxor ymm6, ymm6, ymm11
|
|
vpxor ymm7, ymm7, ymm8
|
|
vpxor ymm4, ymm4, ymm9
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm5, 7
|
|
vpslld ymm5, ymm5, 25
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 7
|
|
vpslld ymm6, ymm6, 25
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 7
|
|
vpslld ymm7, ymm7, 25
|
|
vpor ymm7, ymm7, ymm8
|
|
vpsrld ymm8, ymm4, 7
|
|
vpslld ymm4, ymm4, 25
|
|
vpor ymm4, ymm4, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+60H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+140H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+1A0H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+0E0H]
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm1, ymm1, ymm5
|
|
vpaddd ymm2, ymm2, ymm6
|
|
vpaddd ymm3, ymm3, ymm7
|
|
vpxor ymm12, ymm12, ymm0
|
|
vpxor ymm13, ymm13, ymm1
|
|
vpxor ymm14, ymm14, ymm2
|
|
vpxor ymm15, ymm15, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT16]
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm13
|
|
vpaddd ymm10, ymm10, ymm14
|
|
vpaddd ymm11, ymm11, ymm15
|
|
vpxor ymm4, ymm4, ymm8
|
|
vpxor ymm5, ymm5, ymm9
|
|
vpxor ymm6, ymm6, ymm10
|
|
vpxor ymm7, ymm7, ymm11
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm4, 12
|
|
vpslld ymm4, ymm4, 20
|
|
vpor ymm4, ymm4, ymm8
|
|
vpsrld ymm8, ymm5, 12
|
|
vpslld ymm5, ymm5, 20
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 12
|
|
vpslld ymm6, ymm6, 20
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 12
|
|
vpslld ymm7, ymm7, 20
|
|
vpor ymm7, ymm7, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+80H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+180H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+40H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+1C0H]
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm1, ymm1, ymm5
|
|
vpaddd ymm2, ymm2, ymm6
|
|
vpaddd ymm3, ymm3, ymm7
|
|
vpxor ymm12, ymm12, ymm0
|
|
vpxor ymm13, ymm13, ymm1
|
|
vpxor ymm14, ymm14, ymm2
|
|
vpxor ymm15, ymm15, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT8]
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm13
|
|
vpaddd ymm10, ymm10, ymm14
|
|
vpaddd ymm11, ymm11, ymm15
|
|
vpxor ymm4, ymm4, ymm8
|
|
vpxor ymm5, ymm5, ymm9
|
|
vpxor ymm6, ymm6, ymm10
|
|
vpxor ymm7, ymm7, ymm11
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm4, 7
|
|
vpslld ymm4, ymm4, 25
|
|
vpor ymm4, ymm4, ymm8
|
|
vpsrld ymm8, ymm5, 7
|
|
vpslld ymm5, ymm5, 25
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 7
|
|
vpslld ymm6, ymm6, 25
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 7
|
|
vpslld ymm7, ymm7, 25
|
|
vpor ymm7, ymm7, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+0C0H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+120H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+160H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+100H]
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm1, ymm1, ymm6
|
|
vpaddd ymm2, ymm2, ymm7
|
|
vpaddd ymm3, ymm3, ymm4
|
|
vpxor ymm15, ymm15, ymm0
|
|
vpxor ymm12, ymm12, ymm1
|
|
vpxor ymm13, ymm13, ymm2
|
|
vpxor ymm14, ymm14, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT16]
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpaddd ymm10, ymm10, ymm15
|
|
vpaddd ymm11, ymm11, ymm12
|
|
vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm14
|
|
vpxor ymm5, ymm5, ymm10
|
|
vpxor ymm6, ymm6, ymm11
|
|
vpxor ymm7, ymm7, ymm8
|
|
vpxor ymm4, ymm4, ymm9
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm5, 12
|
|
vpslld ymm5, ymm5, 20
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 12
|
|
vpslld ymm6, ymm6, 20
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 12
|
|
vpslld ymm7, ymm7, 20
|
|
vpor ymm7, ymm7, ymm8
|
|
vpsrld ymm8, ymm4, 12
|
|
vpslld ymm4, ymm4, 20
|
|
vpor ymm4, ymm4, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+0A0H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+1E0H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+20H]
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm1, ymm1, ymm6
|
|
vpaddd ymm2, ymm2, ymm7
|
|
vpaddd ymm3, ymm3, ymm4
|
|
vpxor ymm15, ymm15, ymm0
|
|
vpxor ymm12, ymm12, ymm1
|
|
vpxor ymm13, ymm13, ymm2
|
|
vpxor ymm14, ymm14, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT8]
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpaddd ymm10, ymm10, ymm15
|
|
vpaddd ymm11, ymm11, ymm12
|
|
vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm14
|
|
vpxor ymm5, ymm5, ymm10
|
|
vpxor ymm6, ymm6, ymm11
|
|
vpxor ymm7, ymm7, ymm8
|
|
vpxor ymm4, ymm4, ymm9
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm5, 7
|
|
vpslld ymm5, ymm5, 25
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 7
|
|
vpslld ymm6, ymm6, 25
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 7
|
|
vpslld ymm7, ymm7, 25
|
|
vpor ymm7, ymm7, ymm8
|
|
vpsrld ymm8, ymm4, 7
|
|
vpslld ymm4, ymm4, 25
|
|
vpor ymm4, ymm4, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+140H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+180H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+1C0H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+1A0H]
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm1, ymm1, ymm5
|
|
vpaddd ymm2, ymm2, ymm6
|
|
vpaddd ymm3, ymm3, ymm7
|
|
vpxor ymm12, ymm12, ymm0
|
|
vpxor ymm13, ymm13, ymm1
|
|
vpxor ymm14, ymm14, ymm2
|
|
vpxor ymm15, ymm15, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT16]
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm13
|
|
vpaddd ymm10, ymm10, ymm14
|
|
vpaddd ymm11, ymm11, ymm15
|
|
vpxor ymm4, ymm4, ymm8
|
|
vpxor ymm5, ymm5, ymm9
|
|
vpxor ymm6, ymm6, ymm10
|
|
vpxor ymm7, ymm7, ymm11
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm4, 12
|
|
vpslld ymm4, ymm4, 20
|
|
vpor ymm4, ymm4, ymm8
|
|
vpsrld ymm8, ymm5, 12
|
|
vpslld ymm5, ymm5, 20
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 12
|
|
vpslld ymm6, ymm6, 20
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 12
|
|
vpslld ymm7, ymm7, 20
|
|
vpor ymm7, ymm7, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+0E0H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+120H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+60H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+1E0H]
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm1, ymm1, ymm5
|
|
vpaddd ymm2, ymm2, ymm6
|
|
vpaddd ymm3, ymm3, ymm7
|
|
vpxor ymm12, ymm12, ymm0
|
|
vpxor ymm13, ymm13, ymm1
|
|
vpxor ymm14, ymm14, ymm2
|
|
vpxor ymm15, ymm15, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT8]
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm13
|
|
vpaddd ymm10, ymm10, ymm14
|
|
vpaddd ymm11, ymm11, ymm15
|
|
vpxor ymm4, ymm4, ymm8
|
|
vpxor ymm5, ymm5, ymm9
|
|
vpxor ymm6, ymm6, ymm10
|
|
vpxor ymm7, ymm7, ymm11
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm4, 7
|
|
vpslld ymm4, ymm4, 25
|
|
vpor ymm4, ymm4, ymm8
|
|
vpsrld ymm8, ymm5, 7
|
|
vpslld ymm5, ymm5, 25
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 7
|
|
vpslld ymm6, ymm6, 25
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 7
|
|
vpslld ymm7, ymm7, 25
|
|
vpor ymm7, ymm7, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+80H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+160H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+0A0H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+20H]
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm1, ymm1, ymm6
|
|
vpaddd ymm2, ymm2, ymm7
|
|
vpaddd ymm3, ymm3, ymm4
|
|
vpxor ymm15, ymm15, ymm0
|
|
vpxor ymm12, ymm12, ymm1
|
|
vpxor ymm13, ymm13, ymm2
|
|
vpxor ymm14, ymm14, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT16]
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpaddd ymm10, ymm10, ymm15
|
|
vpaddd ymm11, ymm11, ymm12
|
|
vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm14
|
|
vpxor ymm5, ymm5, ymm10
|
|
vpxor ymm6, ymm6, ymm11
|
|
vpxor ymm7, ymm7, ymm8
|
|
vpxor ymm4, ymm4, ymm9
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm5, 12
|
|
vpslld ymm5, ymm5, 20
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 12
|
|
vpslld ymm6, ymm6, 20
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 12
|
|
vpslld ymm7, ymm7, 20
|
|
vpor ymm7, ymm7, ymm8
|
|
vpsrld ymm8, ymm4, 12
|
|
vpslld ymm4, ymm4, 20
|
|
vpor ymm4, ymm4, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+40H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+100H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+0C0H]
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm1, ymm1, ymm6
|
|
vpaddd ymm2, ymm2, ymm7
|
|
vpaddd ymm3, ymm3, ymm4
|
|
vpxor ymm15, ymm15, ymm0
|
|
vpxor ymm12, ymm12, ymm1
|
|
vpxor ymm13, ymm13, ymm2
|
|
vpxor ymm14, ymm14, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT8]
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpaddd ymm10, ymm10, ymm15
|
|
vpaddd ymm11, ymm11, ymm12
|
|
vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm14
|
|
vpxor ymm5, ymm5, ymm10
|
|
vpxor ymm6, ymm6, ymm11
|
|
vpxor ymm7, ymm7, ymm8
|
|
vpxor ymm4, ymm4, ymm9
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm5, 7
|
|
vpslld ymm5, ymm5, 25
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 7
|
|
vpslld ymm6, ymm6, 25
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 7
|
|
vpslld ymm7, ymm7, 25
|
|
vpor ymm7, ymm7, ymm8
|
|
vpsrld ymm8, ymm4, 7
|
|
vpslld ymm4, ymm4, 25
|
|
vpor ymm4, ymm4, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+180H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+120H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+1E0H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+1C0H]
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm1, ymm1, ymm5
|
|
vpaddd ymm2, ymm2, ymm6
|
|
vpaddd ymm3, ymm3, ymm7
|
|
vpxor ymm12, ymm12, ymm0
|
|
vpxor ymm13, ymm13, ymm1
|
|
vpxor ymm14, ymm14, ymm2
|
|
vpxor ymm15, ymm15, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT16]
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm13
|
|
vpaddd ymm10, ymm10, ymm14
|
|
vpaddd ymm11, ymm11, ymm15
|
|
vpxor ymm4, ymm4, ymm8
|
|
vpxor ymm5, ymm5, ymm9
|
|
vpxor ymm6, ymm6, ymm10
|
|
vpxor ymm7, ymm7, ymm11
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm4, 12
|
|
vpslld ymm4, ymm4, 20
|
|
vpor ymm4, ymm4, ymm8
|
|
vpsrld ymm8, ymm5, 12
|
|
vpslld ymm5, ymm5, 20
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 12
|
|
vpslld ymm6, ymm6, 20
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 12
|
|
vpslld ymm7, ymm7, 20
|
|
vpor ymm7, ymm7, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+1A0H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+160H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+140H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+100H]
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm1, ymm1, ymm5
|
|
vpaddd ymm2, ymm2, ymm6
|
|
vpaddd ymm3, ymm3, ymm7
|
|
vpxor ymm12, ymm12, ymm0
|
|
vpxor ymm13, ymm13, ymm1
|
|
vpxor ymm14, ymm14, ymm2
|
|
vpxor ymm15, ymm15, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT8]
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm13
|
|
vpaddd ymm10, ymm10, ymm14
|
|
vpaddd ymm11, ymm11, ymm15
|
|
vpxor ymm4, ymm4, ymm8
|
|
vpxor ymm5, ymm5, ymm9
|
|
vpxor ymm6, ymm6, ymm10
|
|
vpxor ymm7, ymm7, ymm11
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm4, 7
|
|
vpslld ymm4, ymm4, 25
|
|
vpor ymm4, ymm4, ymm8
|
|
vpsrld ymm8, ymm5, 7
|
|
vpslld ymm5, ymm5, 25
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 7
|
|
vpslld ymm6, ymm6, 25
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 7
|
|
vpslld ymm7, ymm7, 25
|
|
vpor ymm7, ymm7, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+0E0H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+0A0H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+0C0H]
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm1, ymm1, ymm6
|
|
vpaddd ymm2, ymm2, ymm7
|
|
vpaddd ymm3, ymm3, ymm4
|
|
vpxor ymm15, ymm15, ymm0
|
|
vpxor ymm12, ymm12, ymm1
|
|
vpxor ymm13, ymm13, ymm2
|
|
vpxor ymm14, ymm14, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT16]
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpaddd ymm10, ymm10, ymm15
|
|
vpaddd ymm11, ymm11, ymm12
|
|
vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm14
|
|
vpxor ymm5, ymm5, ymm10
|
|
vpxor ymm6, ymm6, ymm11
|
|
vpxor ymm7, ymm7, ymm8
|
|
vpxor ymm4, ymm4, ymm9
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm5, 12
|
|
vpslld ymm5, ymm5, 20
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 12
|
|
vpslld ymm6, ymm6, 20
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 12
|
|
vpslld ymm7, ymm7, 20
|
|
vpor ymm7, ymm7, ymm8
|
|
vpsrld ymm8, ymm4, 12
|
|
vpslld ymm4, ymm4, 20
|
|
vpor ymm4, ymm4, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+40H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+60H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+20H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+80H]
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm1, ymm1, ymm6
|
|
vpaddd ymm2, ymm2, ymm7
|
|
vpaddd ymm3, ymm3, ymm4
|
|
vpxor ymm15, ymm15, ymm0
|
|
vpxor ymm12, ymm12, ymm1
|
|
vpxor ymm13, ymm13, ymm2
|
|
vpxor ymm14, ymm14, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT8]
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpaddd ymm10, ymm10, ymm15
|
|
vpaddd ymm11, ymm11, ymm12
|
|
vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm14
|
|
vpxor ymm5, ymm5, ymm10
|
|
vpxor ymm6, ymm6, ymm11
|
|
vpxor ymm7, ymm7, ymm8
|
|
vpxor ymm4, ymm4, ymm9
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm5, 7
|
|
vpslld ymm5, ymm5, 25
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 7
|
|
vpslld ymm6, ymm6, 25
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 7
|
|
vpslld ymm7, ymm7, 25
|
|
vpor ymm7, ymm7, ymm8
|
|
vpsrld ymm8, ymm4, 7
|
|
vpslld ymm4, ymm4, 25
|
|
vpor ymm4, ymm4, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+120H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+160H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+100H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+1E0H]
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm1, ymm1, ymm5
|
|
vpaddd ymm2, ymm2, ymm6
|
|
vpaddd ymm3, ymm3, ymm7
|
|
vpxor ymm12, ymm12, ymm0
|
|
vpxor ymm13, ymm13, ymm1
|
|
vpxor ymm14, ymm14, ymm2
|
|
vpxor ymm15, ymm15, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT16]
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm13
|
|
vpaddd ymm10, ymm10, ymm14
|
|
vpaddd ymm11, ymm11, ymm15
|
|
vpxor ymm4, ymm4, ymm8
|
|
vpxor ymm5, ymm5, ymm9
|
|
vpxor ymm6, ymm6, ymm10
|
|
vpxor ymm7, ymm7, ymm11
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm4, 12
|
|
vpslld ymm4, ymm4, 20
|
|
vpor ymm4, ymm4, ymm8
|
|
vpsrld ymm8, ymm5, 12
|
|
vpslld ymm5, ymm5, 20
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 12
|
|
vpslld ymm6, ymm6, 20
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 12
|
|
vpslld ymm7, ymm7, 20
|
|
vpor ymm7, ymm7, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+1C0H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+0A0H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+180H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+20H]
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm1, ymm1, ymm5
|
|
vpaddd ymm2, ymm2, ymm6
|
|
vpaddd ymm3, ymm3, ymm7
|
|
vpxor ymm12, ymm12, ymm0
|
|
vpxor ymm13, ymm13, ymm1
|
|
vpxor ymm14, ymm14, ymm2
|
|
vpxor ymm15, ymm15, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT8]
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm13
|
|
vpaddd ymm10, ymm10, ymm14
|
|
vpaddd ymm11, ymm11, ymm15
|
|
vpxor ymm4, ymm4, ymm8
|
|
vpxor ymm5, ymm5, ymm9
|
|
vpxor ymm6, ymm6, ymm10
|
|
vpxor ymm7, ymm7, ymm11
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm4, 7
|
|
vpslld ymm4, ymm4, 25
|
|
vpor ymm4, ymm4, ymm8
|
|
vpsrld ymm8, ymm5, 7
|
|
vpslld ymm5, ymm5, 25
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 7
|
|
vpslld ymm6, ymm6, 25
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 7
|
|
vpslld ymm7, ymm7, 25
|
|
vpor ymm7, ymm7, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+1A0H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+40H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+80H]
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm1, ymm1, ymm6
|
|
vpaddd ymm2, ymm2, ymm7
|
|
vpaddd ymm3, ymm3, ymm4
|
|
vpxor ymm15, ymm15, ymm0
|
|
vpxor ymm12, ymm12, ymm1
|
|
vpxor ymm13, ymm13, ymm2
|
|
vpxor ymm14, ymm14, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT16]
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpaddd ymm10, ymm10, ymm15
|
|
vpaddd ymm11, ymm11, ymm12
|
|
vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm14
|
|
vpxor ymm5, ymm5, ymm10
|
|
vpxor ymm6, ymm6, ymm11
|
|
vpxor ymm7, ymm7, ymm8
|
|
vpxor ymm4, ymm4, ymm9
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm5, 12
|
|
vpslld ymm5, ymm5, 20
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 12
|
|
vpslld ymm6, ymm6, 20
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 12
|
|
vpslld ymm7, ymm7, 20
|
|
vpor ymm7, ymm7, ymm8
|
|
vpsrld ymm8, ymm4, 12
|
|
vpslld ymm4, ymm4, 20
|
|
vpor ymm4, ymm4, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+60H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+140H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+0C0H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+0E0H]
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm1, ymm1, ymm6
|
|
vpaddd ymm2, ymm2, ymm7
|
|
vpaddd ymm3, ymm3, ymm4
|
|
vpxor ymm15, ymm15, ymm0
|
|
vpxor ymm12, ymm12, ymm1
|
|
vpxor ymm13, ymm13, ymm2
|
|
vpxor ymm14, ymm14, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT8]
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpaddd ymm10, ymm10, ymm15
|
|
vpaddd ymm11, ymm11, ymm12
|
|
vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm14
|
|
vpxor ymm5, ymm5, ymm10
|
|
vpxor ymm6, ymm6, ymm11
|
|
vpxor ymm7, ymm7, ymm8
|
|
vpxor ymm4, ymm4, ymm9
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm5, 7
|
|
vpslld ymm5, ymm5, 25
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 7
|
|
vpslld ymm6, ymm6, 25
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 7
|
|
vpslld ymm7, ymm7, 25
|
|
vpor ymm7, ymm7, ymm8
|
|
vpsrld ymm8, ymm4, 7
|
|
vpslld ymm4, ymm4, 25
|
|
vpor ymm4, ymm4, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+160H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+0A0H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+20H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+100H]
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm1, ymm1, ymm5
|
|
vpaddd ymm2, ymm2, ymm6
|
|
vpaddd ymm3, ymm3, ymm7
|
|
vpxor ymm12, ymm12, ymm0
|
|
vpxor ymm13, ymm13, ymm1
|
|
vpxor ymm14, ymm14, ymm2
|
|
vpxor ymm15, ymm15, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT16]
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm13
|
|
vpaddd ymm10, ymm10, ymm14
|
|
vpaddd ymm11, ymm11, ymm15
|
|
vpxor ymm4, ymm4, ymm8
|
|
vpxor ymm5, ymm5, ymm9
|
|
vpxor ymm6, ymm6, ymm10
|
|
vpxor ymm7, ymm7, ymm11
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm4, 12
|
|
vpslld ymm4, ymm4, 20
|
|
vpor ymm4, ymm4, ymm8
|
|
vpsrld ymm8, ymm5, 12
|
|
vpslld ymm5, ymm5, 20
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 12
|
|
vpslld ymm6, ymm6, 20
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 12
|
|
vpslld ymm7, ymm7, 20
|
|
vpor ymm7, ymm7, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+1E0H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+120H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+0C0H]
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm1, ymm1, ymm5
|
|
vpaddd ymm2, ymm2, ymm6
|
|
vpaddd ymm3, ymm3, ymm7
|
|
vpxor ymm12, ymm12, ymm0
|
|
vpxor ymm13, ymm13, ymm1
|
|
vpxor ymm14, ymm14, ymm2
|
|
vpxor ymm15, ymm15, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT8]
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm13
|
|
vpaddd ymm10, ymm10, ymm14
|
|
vpaddd ymm11, ymm11, ymm15
|
|
vpxor ymm4, ymm4, ymm8
|
|
vpxor ymm5, ymm5, ymm9
|
|
vpxor ymm6, ymm6, ymm10
|
|
vpxor ymm7, ymm7, ymm11
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm4, 7
|
|
vpslld ymm4, ymm4, 25
|
|
vpor ymm4, ymm4, ymm8
|
|
vpsrld ymm8, ymm5, 7
|
|
vpslld ymm5, ymm5, 25
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 7
|
|
vpslld ymm6, ymm6, 25
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 7
|
|
vpslld ymm7, ymm7, 25
|
|
vpor ymm7, ymm7, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+1C0H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+40H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+60H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+0E0H]
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm1, ymm1, ymm6
|
|
vpaddd ymm2, ymm2, ymm7
|
|
vpaddd ymm3, ymm3, ymm4
|
|
vpxor ymm15, ymm15, ymm0
|
|
vpxor ymm12, ymm12, ymm1
|
|
vpxor ymm13, ymm13, ymm2
|
|
vpxor ymm14, ymm14, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT16]
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpaddd ymm10, ymm10, ymm15
|
|
vpaddd ymm11, ymm11, ymm12
|
|
vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm14
|
|
vpxor ymm5, ymm5, ymm10
|
|
vpxor ymm6, ymm6, ymm11
|
|
vpxor ymm7, ymm7, ymm8
|
|
vpxor ymm4, ymm4, ymm9
|
|
vmovdqa ymmword ptr [rsp+200H], ymm8
|
|
vpsrld ymm8, ymm5, 12
|
|
vpslld ymm5, ymm5, 20
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 12
|
|
vpslld ymm6, ymm6, 20
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 12
|
|
vpslld ymm7, ymm7, 20
|
|
vpor ymm7, ymm7, ymm8
|
|
vpsrld ymm8, ymm4, 12
|
|
vpslld ymm4, ymm4, 20
|
|
vpor ymm4, ymm4, ymm8
|
|
vpaddd ymm0, ymm0, ymmword ptr [rsp+140H]
|
|
vpaddd ymm1, ymm1, ymmword ptr [rsp+180H]
|
|
vpaddd ymm2, ymm2, ymmword ptr [rsp+80H]
|
|
vpaddd ymm3, ymm3, ymmword ptr [rsp+1A0H]
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm1, ymm1, ymm6
|
|
vpaddd ymm2, ymm2, ymm7
|
|
vpaddd ymm3, ymm3, ymm4
|
|
vpxor ymm15, ymm15, ymm0
|
|
vpxor ymm12, ymm12, ymm1
|
|
vpxor ymm13, ymm13, ymm2
|
|
vpxor ymm14, ymm14, ymm3
|
|
vbroadcasti128 ymm8, xmmword ptr [ROT8]
|
|
vpshufb ymm15, ymm15, ymm8
|
|
vpshufb ymm12, ymm12, ymm8
|
|
vpshufb ymm13, ymm13, ymm8
|
|
vpshufb ymm14, ymm14, ymm8
|
|
vpaddd ymm10, ymm10, ymm15
|
|
vpaddd ymm11, ymm11, ymm12
|
|
vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
|
|
vpaddd ymm9, ymm9, ymm14
|
|
vpxor ymm5, ymm5, ymm10
|
|
vpxor ymm6, ymm6, ymm11
|
|
vpxor ymm7, ymm7, ymm8
|
|
vpxor ymm4, ymm4, ymm9
|
|
vpxor ymm0, ymm0, ymm8
|
|
vpxor ymm1, ymm1, ymm9
|
|
vpxor ymm2, ymm2, ymm10
|
|
vpxor ymm3, ymm3, ymm11
|
|
vpsrld ymm8, ymm5, 7
|
|
vpslld ymm5, ymm5, 25
|
|
vpor ymm5, ymm5, ymm8
|
|
vpsrld ymm8, ymm6, 7
|
|
vpslld ymm6, ymm6, 25
|
|
vpor ymm6, ymm6, ymm8
|
|
vpsrld ymm8, ymm7, 7
|
|
vpslld ymm7, ymm7, 25
|
|
vpor ymm7, ymm7, ymm8
|
|
vpsrld ymm8, ymm4, 7
|
|
vpslld ymm4, ymm4, 25
|
|
vpor ymm4, ymm4, ymm8
|
|
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]
|
|
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
|
|
vunpckhps ymm13, ymm2, ymm3
|
|
vblendps ymm2, ymm11, ymm8, 0CCH
|
|
vblendps ymm3, ymm12, ymm9, 0CCH
|
|
vperm2f128 ymm12, ymm1, ymm2, 20H
|
|
vmovups ymmword ptr [rbx], ymm12
|
|
vunpckhps ymm14, ymm4, ymm5
|
|
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+2A0H]
|
|
vpaddd ymm1, ymm0, ymmword ptr [rsp+220H]
|
|
vmovdqa ymmword ptr [rsp+220H], ymm1
|
|
vpxor ymm0, ymm0, ymmword ptr [CMP_MSB_MASK]
|
|
vpxor ymm2, ymm1, ymmword ptr [CMP_MSB_MASK]
|
|
vpcmpgtd ymm2, ymm0, ymm2
|
|
vmovdqa ymm0, ymmword ptr [rsp+240H]
|
|
vpsubd ymm2, ymm0, ymm2
|
|
vmovdqa ymmword ptr [rsp+240H], ymm2
|
|
add rdi, 64
|
|
add rbx, 256
|
|
mov qword ptr [rbp+90H], rbx
|
|
sub rsi, 8
|
|
cmp rsi, 8
|
|
jnc outerloop8
|
|
test rsi, rsi
|
|
jnz final7blocks
|
|
unwind:
|
|
vzeroupper
|
|
vmovdqa xmm6, xmmword ptr [rsp+2D0H]
|
|
vmovdqa xmm7, xmmword ptr [rsp+2E0H]
|
|
vmovdqa xmm8, xmmword ptr [rsp+2F0H]
|
|
vmovdqa xmm9, xmmword ptr [rsp+300H]
|
|
vmovdqa xmm10, xmmword ptr [rsp+310H]
|
|
vmovdqa xmm11, xmmword ptr [rsp+320H]
|
|
vmovdqa xmm12, xmmword ptr [rsp+330H]
|
|
vmovdqa xmm13, xmmword ptr [rsp+340H]
|
|
vmovdqa xmm14, xmmword ptr [rsp+350H]
|
|
vmovdqa xmm15, xmmword ptr [rsp+360H]
|
|
mov rsp, rbp
|
|
pop rbp
|
|
pop rbx
|
|
pop rdi
|
|
pop rsi
|
|
pop r12
|
|
pop r13
|
|
pop r14
|
|
pop r15
|
|
ret
|
|
ALIGN 16
|
|
final7blocks:
|
|
mov rbx, qword ptr [rbp+90H]
|
|
mov r15, qword ptr [rsp+2C0H]
|
|
movzx r13d, byte ptr [rbp+78H]
|
|
movzx r12d, byte ptr [rbp+88H]
|
|
test rsi, 4H
|
|
je final3blocks
|
|
vbroadcasti128 ymm0, xmmword ptr [rcx]
|
|
vbroadcasti128 ymm1, xmmword ptr [rcx+10H]
|
|
vmovdqa ymm8, ymm0
|
|
vmovdqa ymm9, ymm1
|
|
vbroadcasti128 ymm12, xmmword ptr [rsp+220H]
|
|
vbroadcasti128 ymm13, xmmword ptr [rsp+240H]
|
|
vpunpckldq ymm14, ymm12, ymm13
|
|
vpunpckhdq ymm15, ymm12, ymm13
|
|
vpermq ymm14, ymm14, 50H
|
|
vpermq ymm15, ymm15, 50H
|
|
vbroadcasti128 ymm12, xmmword ptr [BLAKE3_BLOCK_LEN]
|
|
vpblendd ymm14, ymm14, ymm12, 44H
|
|
vpblendd ymm15, ymm15, ymm12, 44H
|
|
vmovdqa ymmword ptr [rsp], ymm14
|
|
vmovdqa ymmword ptr [rsp+20H], ymm15
|
|
mov r8, qword ptr [rdi]
|
|
mov r9, qword ptr [rdi+8H]
|
|
mov r10, qword ptr [rdi+10H]
|
|
mov r11, qword ptr [rdi+18H]
|
|
movzx eax, byte ptr [rbp+80H]
|
|
or eax, r13d
|
|
xor edx, edx
|
|
ALIGN 16
|
|
innerloop4:
|
|
mov r14d, eax
|
|
or eax, r12d
|
|
add rdx, 64
|
|
cmp rdx, r15
|
|
cmovne eax, r14d
|
|
mov dword ptr [rsp+200H], eax
|
|
vmovups ymm2, ymmword ptr [r8+rdx-40H]
|
|
vinsertf128 ymm2, ymm2, xmmword ptr [r9+rdx-40H], 01H
|
|
vmovups ymm3, ymmword ptr [r8+rdx-30H]
|
|
vinsertf128 ymm3, ymm3, xmmword ptr [r9+rdx-30H], 01H
|
|
vshufps ymm4, ymm2, ymm3, 136
|
|
vshufps ymm5, ymm2, ymm3, 221
|
|
vmovups ymm2, ymmword ptr [r8+rdx-20H]
|
|
vinsertf128 ymm2, ymm2, xmmword ptr [r9+rdx-20H], 01H
|
|
vmovups ymm3, ymmword ptr [r8+rdx-10H]
|
|
vinsertf128 ymm3, ymm3, xmmword ptr [r9+rdx-10H], 01H
|
|
vshufps ymm6, ymm2, ymm3, 136
|
|
vshufps ymm7, ymm2, ymm3, 221
|
|
vpshufd ymm6, ymm6, 93H
|
|
vpshufd ymm7, ymm7, 93H
|
|
vmovups ymm10, ymmword ptr [r10+rdx-40H]
|
|
vinsertf128 ymm10, ymm10, xmmword ptr [r11+rdx-40H], 01H
|
|
vmovups ymm11, ymmword ptr [r10+rdx-30H]
|
|
vinsertf128 ymm11, ymm11, xmmword ptr [r11+rdx-30H], 01H
|
|
vshufps ymm12, ymm10, ymm11, 136
|
|
vshufps ymm13, ymm10, ymm11, 221
|
|
vmovups ymm10, ymmword ptr [r10+rdx-20H]
|
|
vinsertf128 ymm10, ymm10, xmmword ptr [r11+rdx-20H], 01H
|
|
vmovups ymm11, ymmword ptr [r10+rdx-10H]
|
|
vinsertf128 ymm11, ymm11, xmmword ptr [r11+rdx-10H], 01H
|
|
vshufps ymm14, ymm10, ymm11, 136
|
|
vshufps ymm15, ymm10, ymm11, 221
|
|
vpshufd ymm14, ymm14, 93H
|
|
vpshufd ymm15, ymm15, 93H
|
|
vpbroadcastd ymm2, dword ptr [rsp+200H]
|
|
vmovdqa ymm3, ymmword ptr [rsp]
|
|
vmovdqa ymm11, ymmword ptr [rsp+20H]
|
|
vpblendd ymm3, ymm3, ymm2, 88H
|
|
vpblendd ymm11, ymm11, ymm2, 88H
|
|
vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV]
|
|
vmovdqa ymm10, ymm2
|
|
mov al, 7
|
|
roundloop4:
|
|
vpaddd ymm0, ymm0, ymm4
|
|
vpaddd ymm8, ymm8, ymm12
|
|
vmovdqa ymmword ptr [rsp+40H], ymm4
|
|
nop
|
|
vmovdqa ymmword ptr [rsp+60H], ymm12
|
|
nop
|
|
vpaddd ymm0, ymm0, ymm1
|
|
vpaddd ymm8, ymm8, ymm9
|
|
vpxor ymm3, ymm3, ymm0
|
|
vpxor ymm11, ymm11, ymm8
|
|
vbroadcasti128 ymm4, xmmword ptr [ROT16]
|
|
vpshufb ymm3, ymm3, ymm4
|
|
vpshufb ymm11, ymm11, ymm4
|
|
vpaddd ymm2, ymm2, ymm3
|
|
vpaddd ymm10, ymm10, ymm11
|
|
vpxor ymm1, ymm1, ymm2
|
|
vpxor ymm9, ymm9, ymm10
|
|
vpsrld ymm4, ymm1, 12
|
|
vpslld ymm1, ymm1, 20
|
|
vpor ymm1, ymm1, ymm4
|
|
vpsrld ymm4, ymm9, 12
|
|
vpslld ymm9, ymm9, 20
|
|
vpor ymm9, ymm9, ymm4
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm8, ymm8, ymm13
|
|
vpaddd ymm0, ymm0, ymm1
|
|
vpaddd ymm8, ymm8, ymm9
|
|
vmovdqa ymmword ptr [rsp+80H], ymm5
|
|
vmovdqa ymmword ptr [rsp+0A0H], ymm13
|
|
vpxor ymm3, ymm3, ymm0
|
|
vpxor ymm11, ymm11, ymm8
|
|
vbroadcasti128 ymm4, xmmword ptr [ROT8]
|
|
vpshufb ymm3, ymm3, ymm4
|
|
vpshufb ymm11, ymm11, ymm4
|
|
vpaddd ymm2, ymm2, ymm3
|
|
vpaddd ymm10, ymm10, ymm11
|
|
vpxor ymm1, ymm1, ymm2
|
|
vpxor ymm9, ymm9, ymm10
|
|
vpsrld ymm4, ymm1, 7
|
|
vpslld ymm1, ymm1, 25
|
|
vpor ymm1, ymm1, ymm4
|
|
vpsrld ymm4, ymm9, 7
|
|
vpslld ymm9, ymm9, 25
|
|
vpor ymm9, ymm9, ymm4
|
|
vpshufd ymm0, ymm0, 93H
|
|
vpshufd ymm8, ymm8, 93H
|
|
vpshufd ymm3, ymm3, 4EH
|
|
vpshufd ymm11, ymm11, 4EH
|
|
vpshufd ymm2, ymm2, 39H
|
|
vpshufd ymm10, ymm10, 39H
|
|
vpaddd ymm0, ymm0, ymm6
|
|
vpaddd ymm8, ymm8, ymm14
|
|
vpaddd ymm0, ymm0, ymm1
|
|
vpaddd ymm8, ymm8, ymm9
|
|
vpxor ymm3, ymm3, ymm0
|
|
vpxor ymm11, ymm11, ymm8
|
|
vbroadcasti128 ymm4, xmmword ptr [ROT16]
|
|
vpshufb ymm3, ymm3, ymm4
|
|
vpshufb ymm11, ymm11, ymm4
|
|
vpaddd ymm2, ymm2, ymm3
|
|
vpaddd ymm10, ymm10, ymm11
|
|
vpxor ymm1, ymm1, ymm2
|
|
vpxor ymm9, ymm9, ymm10
|
|
vpsrld ymm4, ymm1, 12
|
|
vpslld ymm1, ymm1, 20
|
|
vpor ymm1, ymm1, ymm4
|
|
vpsrld ymm4, ymm9, 12
|
|
vpslld ymm9, ymm9, 20
|
|
vpor ymm9, ymm9, ymm4
|
|
vpaddd ymm0, ymm0, ymm7
|
|
vpaddd ymm8, ymm8, ymm15
|
|
vpaddd ymm0, ymm0, ymm1
|
|
vpaddd ymm8, ymm8, ymm9
|
|
vpxor ymm3, ymm3, ymm0
|
|
vpxor ymm11, ymm11, ymm8
|
|
vbroadcasti128 ymm4, xmmword ptr [ROT8]
|
|
vpshufb ymm3, ymm3, ymm4
|
|
vpshufb ymm11, ymm11, ymm4
|
|
vpaddd ymm2, ymm2, ymm3
|
|
vpaddd ymm10, ymm10, ymm11
|
|
vpxor ymm1, ymm1, ymm2
|
|
vpxor ymm9, ymm9, ymm10
|
|
vpsrld ymm4, ymm1, 7
|
|
vpslld ymm1, ymm1, 25
|
|
vpor ymm1, ymm1, ymm4
|
|
vpsrld ymm4, ymm9, 7
|
|
vpslld ymm9, ymm9, 25
|
|
vpor ymm9, ymm9, ymm4
|
|
vpshufd ymm0, ymm0, 39H
|
|
vpshufd ymm8, ymm8, 39H
|
|
vpshufd ymm3, ymm3, 4EH
|
|
vpshufd ymm11, ymm11, 4EH
|
|
vpshufd ymm2, ymm2, 93H
|
|
vpshufd ymm10, ymm10, 93H
|
|
dec al
|
|
je endroundloop4
|
|
vmovdqa ymm4, ymmword ptr [rsp+40H]
|
|
vmovdqa ymm5, ymmword ptr [rsp+80H]
|
|
vshufps ymm12, ymm4, ymm5, 214
|
|
vpshufd ymm13, ymm4, 0FH
|
|
vpshufd ymm4, ymm12, 39H
|
|
vshufps ymm12, ymm6, ymm7, 250
|
|
vpblendd ymm13, ymm13, ymm12, 0AAH
|
|
vpunpcklqdq ymm12, ymm7, ymm5
|
|
vpblendd ymm12, ymm12, ymm6, 88H
|
|
vpshufd ymm12, ymm12, 78H
|
|
vpunpckhdq ymm5, ymm5, ymm7
|
|
vpunpckldq ymm6, ymm6, ymm5
|
|
vpshufd ymm7, ymm6, 1EH
|
|
vmovdqa ymmword ptr [rsp+40H], ymm13
|
|
vmovdqa ymmword ptr [rsp+80H], ymm12
|
|
vmovdqa ymm12, ymmword ptr [rsp+60H]
|
|
vmovdqa ymm13, ymmword ptr [rsp+0A0H]
|
|
vshufps ymm5, ymm12, ymm13, 214
|
|
vpshufd ymm6, ymm12, 0FH
|
|
vpshufd ymm12, ymm5, 39H
|
|
vshufps ymm5, ymm14, ymm15, 250
|
|
vpblendd ymm6, ymm6, ymm5, 0AAH
|
|
vpunpcklqdq ymm5, ymm15, ymm13
|
|
vpblendd ymm5, ymm5, ymm14, 88H
|
|
vpshufd ymm5, ymm5, 78H
|
|
vpunpckhdq ymm13, ymm13, ymm15
|
|
vpunpckldq ymm14, ymm14, ymm13
|
|
vpshufd ymm15, ymm14, 1EH
|
|
vmovdqa ymm13, ymm6
|
|
vmovdqa ymm14, ymm5
|
|
vmovdqa ymm5, ymmword ptr [rsp+40H]
|
|
vmovdqa ymm6, ymmword ptr [rsp+80H]
|
|
jmp roundloop4
|
|
endroundloop4:
|
|
vpxor ymm0, ymm0, ymm2
|
|
vpxor ymm1, ymm1, ymm3
|
|
vpxor ymm8, ymm8, ymm10
|
|
vpxor ymm9, ymm9, ymm11
|
|
mov eax, r13d
|
|
cmp rdx, r15
|
|
jne 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
|
|
vmovdqu xmmword ptr [rbx+40H], xmm8
|
|
vmovdqu xmmword ptr [rbx+50H], xmm9
|
|
vextracti128 xmmword ptr [rbx+60H], ymm8, 01H
|
|
vextracti128 xmmword ptr [rbx+70H], ymm9, 01H
|
|
vmovaps xmm8, xmmword ptr [rsp+260H]
|
|
vmovaps xmm0, xmmword ptr [rsp+220H]
|
|
vmovaps xmm1, xmmword ptr [rsp+230H]
|
|
vmovaps xmm2, xmmword ptr [rsp+240H]
|
|
vmovaps xmm3, xmmword ptr [rsp+250H]
|
|
vblendvps xmm0, xmm0, xmm1, xmm8
|
|
vblendvps xmm2, xmm2, xmm3, xmm8
|
|
vmovaps xmmword ptr [rsp+220H], xmm0
|
|
vmovaps xmmword ptr [rsp+240H], xmm2
|
|
add rbx, 128
|
|
add rdi, 32
|
|
sub rsi, 4
|
|
final3blocks:
|
|
test rsi, 2H
|
|
je final1blocks
|
|
vbroadcasti128 ymm0, xmmword ptr [rcx]
|
|
vbroadcasti128 ymm1, xmmword ptr [rcx+10H]
|
|
vmovd xmm13, dword ptr [rsp+220H]
|
|
vpinsrd xmm13, xmm13, dword ptr [rsp+240H], 1
|
|
vpinsrd xmm13, xmm13, dword ptr [BLAKE3_BLOCK_LEN], 2
|
|
vmovd xmm14, dword ptr [rsp+224H]
|
|
vpinsrd xmm14, xmm14, dword ptr [rsp+244H], 1
|
|
vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN], 2
|
|
vinserti128 ymm13, ymm13, xmm14, 01H
|
|
vbroadcasti128 ymm14, xmmword ptr [ROT16]
|
|
vbroadcasti128 ymm15, xmmword ptr [ROT8]
|
|
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
|
|
innerloop2:
|
|
mov r14d, eax
|
|
or eax, r12d
|
|
add rdx, 64
|
|
cmp rdx, r15
|
|
cmovne eax, r14d
|
|
mov dword ptr [rsp+200H], eax
|
|
vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV]
|
|
vpbroadcastd ymm8, dword ptr [rsp+200H]
|
|
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
|
|
vpxor ymm3, ymm3, ymm0
|
|
vpshufb ymm3, ymm3, ymm14
|
|
vpaddd ymm2, ymm2, ymm3
|
|
vpxor ymm1, ymm1, ymm2
|
|
vpsrld ymm8, ymm1, 12
|
|
vpslld ymm1, ymm1, 20
|
|
vpor ymm1, ymm1, ymm8
|
|
vpaddd ymm0, ymm0, ymm5
|
|
vpaddd ymm0, ymm0, ymm1
|
|
vpxor ymm3, ymm3, ymm0
|
|
vpshufb ymm3, ymm3, ymm15
|
|
vpaddd ymm2, ymm2, ymm3
|
|
vpxor ymm1, ymm1, ymm2
|
|
vpsrld ymm8, ymm1, 7
|
|
vpslld ymm1, ymm1, 25
|
|
vpor ymm1, ymm1, ymm8
|
|
vpshufd ymm0, ymm0, 93H
|
|
vpshufd ymm3, ymm3, 4EH
|
|
vpshufd ymm2, ymm2, 39H
|
|
vpaddd ymm0, ymm0, ymm6
|
|
vpaddd ymm0, ymm0, ymm1
|
|
vpxor ymm3, ymm3, ymm0
|
|
vpshufb ymm3, ymm3, ymm14
|
|
vpaddd ymm2, ymm2, ymm3
|
|
vpxor ymm1, ymm1, ymm2
|
|
vpsrld ymm8, ymm1, 12
|
|
vpslld ymm1, ymm1, 20
|
|
vpor ymm1, ymm1, ymm8
|
|
vpaddd ymm0, ymm0, ymm7
|
|
vpaddd ymm0, ymm0, ymm1
|
|
vpxor ymm3, ymm3, ymm0
|
|
vpshufb ymm3, ymm3, ymm15
|
|
vpaddd ymm2, ymm2, ymm3
|
|
vpxor ymm1, ymm1, ymm2
|
|
vpsrld ymm8, ymm1, 7
|
|
vpslld ymm1, ymm1, 25
|
|
vpor ymm1, ymm1, ymm8
|
|
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
|
|
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
|
|
vmovaps ymm8, ymmword ptr [rsp+260H]
|
|
vmovaps ymm0, ymmword ptr [rsp+220H]
|
|
vmovups ymm1, ymmword ptr [rsp+228H]
|
|
vmovaps ymm2, ymmword ptr [rsp+240H]
|
|
vmovups ymm3, ymmword ptr [rsp+248H]
|
|
vblendvps ymm0, ymm0, ymm1, ymm8
|
|
vblendvps ymm2, ymm2, ymm3, ymm8
|
|
vmovaps ymmword ptr [rsp+220H], ymm0
|
|
vmovaps ymmword ptr [rsp+240H], ymm2
|
|
add rbx, 64
|
|
add rdi, 16
|
|
sub rsi, 2
|
|
final1blocks:
|
|
test rsi, 1H
|
|
je unwind
|
|
vmovdqu xmm0, xmmword ptr [rcx]
|
|
vmovdqu xmm1, xmmword ptr [rcx+10H]
|
|
vmovd xmm3, dword ptr [rsp+220H]
|
|
vpinsrd xmm3, xmm3, dword ptr [rsp+240H], 1
|
|
vpinsrd xmm13, xmm3, dword ptr [BLAKE3_BLOCK_LEN], 2
|
|
vmovdqa xmm14, xmmword ptr [ROT16]
|
|
vmovdqa xmm15, xmmword ptr [ROT8]
|
|
mov r8, qword ptr [rdi]
|
|
movzx eax, byte ptr [rbp+80H]
|
|
or eax, r13d
|
|
xor edx, edx
|
|
ALIGN 16
|
|
innerloop1:
|
|
mov r14d, eax
|
|
or eax, r12d
|
|
add rdx, 64
|
|
cmp rdx, r15
|
|
cmovne eax, r14d
|
|
vmovdqa xmm2, xmmword ptr [BLAKE3_IV]
|
|
vmovdqa xmm3, xmm13
|
|
vpinsrd xmm3, xmm3, eax, 3
|
|
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
|
|
vpxor xmm3, xmm3, xmm0
|
|
vpshufb xmm3, xmm3, xmm14
|
|
vpaddd xmm2, xmm2, xmm3
|
|
vpxor xmm1, xmm1, xmm2
|
|
vpsrld xmm8, xmm1, 12
|
|
vpslld xmm1, xmm1, 20
|
|
vpor xmm1, xmm1, xmm8
|
|
vpaddd xmm0, xmm0, xmm5
|
|
vpaddd xmm0, xmm0, xmm1
|
|
vpxor xmm3, xmm3, xmm0
|
|
vpshufb xmm3, xmm3, xmm15
|
|
vpaddd xmm2, xmm2, xmm3
|
|
vpxor xmm1, xmm1, xmm2
|
|
vpsrld xmm8, xmm1, 7
|
|
vpslld xmm1, xmm1, 25
|
|
vpor xmm1, xmm1, xmm8
|
|
vpshufd xmm0, xmm0, 93H
|
|
vpshufd xmm3, xmm3, 4EH
|
|
vpshufd xmm2, xmm2, 39H
|
|
vpaddd xmm0, xmm0, xmm6
|
|
vpaddd xmm0, xmm0, xmm1
|
|
vpxor xmm3, xmm3, xmm0
|
|
vpshufb xmm3, xmm3, xmm14
|
|
vpaddd xmm2, xmm2, xmm3
|
|
vpxor xmm1, xmm1, xmm2
|
|
vpsrld xmm8, xmm1, 12
|
|
vpslld xmm1, xmm1, 20
|
|
vpor xmm1, xmm1, xmm8
|
|
vpaddd xmm0, xmm0, xmm7
|
|
vpaddd xmm0, xmm0, xmm1
|
|
vpxor xmm3, xmm3, xmm0
|
|
vpshufb xmm3, xmm3, xmm15
|
|
vpaddd xmm2, xmm2, xmm3
|
|
vpxor xmm1, xmm1, xmm2
|
|
vpsrld xmm8, xmm1, 7
|
|
vpslld xmm1, xmm1, 25
|
|
vpor xmm1, xmm1, xmm8
|
|
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
|
|
vmovdqu xmmword ptr [rbx], xmm0
|
|
vmovdqu xmmword ptr [rbx+10H], xmm1
|
|
jmp unwind
|
|
|
|
_blake3_hash_many_avx2 ENDP
|
|
blake3_hash_many_avx2 ENDP
|
|
_TEXT ENDS
|
|
|
|
_RDATA SEGMENT READONLY PAGE ALIAS(".rdata") 'CONST'
|
|
ALIGN 64
|
|
ADD0:
|
|
dd 0, 1, 2, 3, 4, 5, 6, 7
|
|
|
|
ADD1:
|
|
dd 8 dup (8)
|
|
|
|
BLAKE3_IV_0:
|
|
dd 8 dup (6A09E667H)
|
|
|
|
BLAKE3_IV_1:
|
|
dd 8 dup (0BB67AE85H)
|
|
|
|
BLAKE3_IV_2:
|
|
dd 8 dup (3C6EF372H)
|
|
|
|
BLAKE3_IV_3:
|
|
dd 8 dup (0A54FF53AH)
|
|
|
|
BLAKE3_BLOCK_LEN:
|
|
dd 8 dup (64)
|
|
|
|
ROT16:
|
|
db 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13
|
|
|
|
ROT8:
|
|
db 1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12
|
|
|
|
CMP_MSB_MASK:
|
|
dd 8 dup(80000000H)
|
|
|
|
BLAKE3_IV:
|
|
dd 6A09E667H, 0BB67AE85H, 3C6EF372H, 0A54FF53AH
|
|
|
|
_RDATA ENDS
|
|
END
|