doublecmd/components/kascrypt/Hashes/blake2_avx.inc
2023-12-04 20:25:15 +03:00

1716 lines
52 KiB
PHP
Executable file

{
Implementations of BLAKE2b, BLAKE2s,
optimized for speed on CPUs supporting AVX
}
{$CODEALIGN CONSTMIN=32}
const
BLAKE2S_LC0: array[0..15] of cuint8 = (2, 3, 0, 1, 6, 7, 4, 5,
10, 11, 8, 9, 14, 15, 12, 13);
BLAKE2S_LC1: array[0..15] of cuint8 = (1, 2, 3, 0, 5, 6, 7, 4,
9, 10, 11, 8, 13, 14, 15, 12);
BLAKE2B_LC0: array[0..15] of cuint8 = (3, 4, 5, 6, 7, 0, 1, 2,
11, 12, 13, 14, 15, 8, 9, 10);
BLAKE2B_LC1: array[0..15] of cuint8 = (2, 3, 4, 5, 6, 7, 0, 1,
10, 11, 12, 13, 14, 15, 8, 9);
function blake2s_compress_avx( S: Pblake2s_state; const block: pcuint8 ): cint; assembler; nostackframe;
asm
.balign 32
{$IF DEFINED(UNIX)}
pushq %rcx
movq %rdi, %rcx
pushq %rdx
movq %rsi, %rdx
{$ENDIF}
subq $168, %rsp
vmovaps %xmm6, (%rsp)
vmovaps %xmm7, 16(%rsp)
vmovaps %xmm8, 32(%rsp)
vmovaps %xmm9, 48(%rsp)
vmovaps %xmm10, 64(%rsp)
vmovaps %xmm11, 80(%rsp)
vmovaps %xmm12, 96(%rsp)
vmovaps %xmm13, 112(%rsp)
vmovaps %xmm14, 128(%rsp)
vmovaps %xmm15, 144(%rsp)
vmovdqu (%rdx), %xmm4
vmovdqu 16(%rdx), %xmm3
vmovdqu 16(%rcx), %xmm9
vpaddd (%rcx), %xmm9, %xmm1
vshufps $136, %xmm3, %xmm4, %xmm0
vmovdqu 32(%rcx), %xmm7
vshufps $221, %xmm3, %xmm4, %xmm10
vpaddd %xmm0, %xmm1, %xmm1
vpxor blake2s_IV_2(%rip), %xmm7, %xmm0
vmovdqu 32(%rdx), %xmm2
vmovdqa BLAKE2S_LC0(%rip), %xmm7
vpxor %xmm1, %xmm0, %xmm0
vpaddd %xmm10, %xmm1, %xmm1
vmovdqu 48(%rdx), %xmm5
vpsrldq $4, %xmm2, %xmm15
vpshufb %xmm7, %xmm0, %xmm0
vpaddd blake2s_IV(%rip), %xmm0, %xmm8
vpshufd $30, %xmm5, %xmm13
vpblendw $12, %xmm3, %xmm5, %xmm14
vpxor %xmm8, %xmm9, %xmm6
vpslld $20, %xmm6, %xmm11
vpsrld $12, %xmm6, %xmm6
vpxor %xmm11, %xmm6, %xmm11
vmovdqa BLAKE2S_LC1(%rip), %xmm6
vpaddd %xmm11, %xmm1, %xmm1
vpxor %xmm1, %xmm0, %xmm0
vpshufb %xmm6, %xmm0, %xmm0
vpaddd %xmm0, %xmm8, %xmm8
vpshufd $78, %xmm0, %xmm0
vpxor %xmm8, %xmm11, %xmm11
vpslld $25, %xmm11, %xmm10
vpshufd $57, %xmm8, %xmm8
vpsrld $7, %xmm11, %xmm11
vpxor %xmm10, %xmm11, %xmm11
vpshufd $147, %xmm1, %xmm10
vpshufd $225, %xmm2, %xmm1
vpblendw $195, %xmm13, %xmm1, %xmm12
vpaddd %xmm12, %xmm10, %xmm10
vpblendw $60, %xmm13, %xmm1, %xmm1
vpblendw $192, %xmm5, %xmm3, %xmm13
vpaddd %xmm11, %xmm10, %xmm10
vpshufd $177, %xmm1, %xmm1
vpxor %xmm10, %xmm0, %xmm0
vpshufb %xmm7, %xmm0, %xmm0
vpaddd %xmm0, %xmm8, %xmm8
vpxor %xmm8, %xmm11, %xmm11
vpslld $20, %xmm11, %xmm12
vpsrld $12, %xmm11, %xmm11
vpxor %xmm12, %xmm11, %xmm11
vpaddd %xmm11, %xmm1, %xmm1
vpaddd %xmm10, %xmm1, %xmm1
vpxor %xmm1, %xmm0, %xmm0
vpshufb %xmm6, %xmm0, %xmm0
vpaddd %xmm0, %xmm8, %xmm8
vpshufd $57, %xmm1, %xmm10
vpxor %xmm8, %xmm11, %xmm11
vpslld $25, %xmm11, %xmm12
vpshufd $78, %xmm0, %xmm0
vpshufd $147, %xmm8, %xmm8
vpsrld $7, %xmm11, %xmm11
vpxor %xmm12, %xmm11, %xmm11
vpslldq $4, %xmm5, %xmm1
vpblendw $12, %xmm2, %xmm3, %xmm12
vpblendw $240, %xmm1, %xmm12, %xmm12
vpshufd $147, %xmm12, %xmm12
vpaddd %xmm12, %xmm10, %xmm10
vpaddd %xmm11, %xmm10, %xmm10
vpxor %xmm10, %xmm0, %xmm0
vpshufb %xmm7, %xmm0, %xmm0
vpaddd %xmm0, %xmm8, %xmm8
vpxor %xmm8, %xmm11, %xmm12
vpslld $20, %xmm12, %xmm11
vpsrld $12, %xmm12, %xmm12
vpxor %xmm11, %xmm12, %xmm12
vpshufd $8, %xmm2, %xmm11
vpblendw $240, %xmm13, %xmm11, %xmm11
vpshufd $177, %xmm11, %xmm11
vpaddd %xmm12, %xmm11, %xmm11
vpaddd %xmm10, %xmm11, %xmm10
vpxor %xmm10, %xmm0, %xmm0
vpshufb %xmm6, %xmm0, %xmm0
vpaddd %xmm0, %xmm8, %xmm8
vpshufd $147, %xmm10, %xmm10
vpxor %xmm8, %xmm12, %xmm12
vpslld $25, %xmm12, %xmm11
vpshufd $78, %xmm0, %xmm0
vpshufd $57, %xmm8, %xmm8
vpsrld $7, %xmm12, %xmm12
vpxor %xmm11, %xmm12, %xmm12
vpslldq $4, %xmm3, %xmm11
vpblendw $48, %xmm11, %xmm2, %xmm11
vpblendw $240, %xmm11, %xmm4, %xmm11
vpshufd $198, %xmm11, %xmm11
vpaddd %xmm11, %xmm10, %xmm11
vpaddd %xmm12, %xmm11, %xmm11
vpxor %xmm11, %xmm0, %xmm0
vpshufb %xmm7, %xmm0, %xmm0
vpaddd %xmm0, %xmm8, %xmm8
vpxor %xmm8, %xmm12, %xmm10
vpslld $20, %xmm10, %xmm12
vpsrld $12, %xmm10, %xmm10
vpxor %xmm12, %xmm10, %xmm10
vpunpckhdq %xmm3, %xmm4, %xmm12
vpblendw $12, %xmm1, %xmm12, %xmm13
vpshufd $198, %xmm13, %xmm13
vpaddd %xmm10, %xmm13, %xmm13
vpaddd %xmm11, %xmm13, %xmm11
vpxor %xmm11, %xmm0, %xmm0
vpshufb %xmm6, %xmm0, %xmm0
vpaddd %xmm0, %xmm8, %xmm8
vpshufd $57, %xmm11, %xmm11
vpxor %xmm8, %xmm10, %xmm10
vpslld $25, %xmm10, %xmm13
vpshufd $78, %xmm0, %xmm0
vpshufd $147, %xmm8, %xmm8
vpsrld $7, %xmm10, %xmm10
vpxor %xmm13, %xmm10, %xmm10
vpunpckhdq %xmm5, %xmm2, %xmm13
vpblendw $15, %xmm14, %xmm13, %xmm13
vpslldq $8, %xmm5, %xmm14
vpshufd $210, %xmm13, %xmm13
vpaddd %xmm13, %xmm11, %xmm11
vpaddd %xmm10, %xmm11, %xmm13
vpxor %xmm13, %xmm0, %xmm0
vpshufb %xmm7, %xmm0, %xmm0
vpaddd %xmm0, %xmm8, %xmm8
vpxor %xmm8, %xmm10, %xmm10
vpslld $20, %xmm10, %xmm11
vpsrld $12, %xmm10, %xmm10
vpxor %xmm11, %xmm10, %xmm10
vpunpckldq %xmm4, %xmm2, %xmm11
vpblendw $240, %xmm4, %xmm11, %xmm11
vpblendw $192, %xmm14, %xmm11, %xmm11
vpsrldq $12, %xmm3, %xmm14
vpaddd %xmm11, %xmm10, %xmm11
vpaddd %xmm13, %xmm11, %xmm11
vpxor %xmm11, %xmm0, %xmm0
vpshufb %xmm6, %xmm0, %xmm0
vpaddd %xmm0, %xmm8, %xmm8
vpshufd $147, %xmm11, %xmm11
vpxor %xmm8, %xmm10, %xmm10
vpslld $25, %xmm10, %xmm13
vpshufd $78, %xmm0, %xmm0
vpshufd $57, %xmm8, %xmm8
vpsrld $7, %xmm10, %xmm10
vpxor %xmm13, %xmm10, %xmm10
vpblendw $60, %xmm2, %xmm4, %xmm13
vpblendw $3, %xmm14, %xmm13, %xmm13
vpunpckhdq %xmm2, %xmm12, %xmm14
vpblendw $12, %xmm5, %xmm14, %xmm14
vpshufd $57, %xmm13, %xmm13
vpaddd %xmm13, %xmm11, %xmm11
vpshufd $210, %xmm14, %xmm14
vpaddd %xmm10, %xmm11, %xmm11
vpxor %xmm11, %xmm0, %xmm0
vpshufb %xmm7, %xmm0, %xmm0
vpaddd %xmm0, %xmm8, %xmm8
vpxor %xmm8, %xmm10, %xmm10
vpslld $20, %xmm10, %xmm13
vpsrld $12, %xmm10, %xmm10
vpxor %xmm13, %xmm10, %xmm10
vpblendw $51, %xmm3, %xmm4, %xmm13
vpblendw $192, %xmm1, %xmm13, %xmm1
vpshufd $108, %xmm1, %xmm1
vpaddd %xmm10, %xmm1, %xmm1
vpaddd %xmm11, %xmm1, %xmm11
vpxor %xmm11, %xmm0, %xmm0
vpshufb %xmm6, %xmm0, %xmm13
vpaddd %xmm13, %xmm8, %xmm8
vpshufd $57, %xmm11, %xmm11
vpxor %xmm8, %xmm10, %xmm10
vpaddd %xmm14, %xmm11, %xmm11
vpslld $25, %xmm10, %xmm0
vpshufd $78, %xmm13, %xmm13
vpsrld $7, %xmm10, %xmm10
vpshufd $147, %xmm8, %xmm8
vpxor %xmm0, %xmm10, %xmm10
vpaddd %xmm10, %xmm11, %xmm11
vpxor %xmm11, %xmm13, %xmm13
vpshufb %xmm7, %xmm13, %xmm1
vpaddd %xmm1, %xmm8, %xmm8
vpxor %xmm8, %xmm10, %xmm0
vpslld $20, %xmm0, %xmm13
vpblendw $12, %xmm4, %xmm5, %xmm10
vpsrld $12, %xmm0, %xmm0
vpxor %xmm13, %xmm0, %xmm0
vpslldq $8, %xmm2, %xmm13
vpblendw $192, %xmm13, %xmm10, %xmm10
vpshufd $135, %xmm10, %xmm10
vpaddd %xmm0, %xmm10, %xmm10
vpaddd %xmm11, %xmm10, %xmm10
vpxor %xmm10, %xmm1, %xmm1
vpshufb %xmm6, %xmm1, %xmm14
vpaddd %xmm14, %xmm8, %xmm8
vpshufd $147, %xmm10, %xmm10
vpxor %xmm8, %xmm0, %xmm0
vpslld $25, %xmm0, %xmm13
vpshufd $57, %xmm8, %xmm8
vpshufd $78, %xmm14, %xmm14
vpsrld $7, %xmm0, %xmm0
vpxor %xmm13, %xmm0, %xmm0
vpblendw $15, %xmm3, %xmm4, %xmm13
vpblendw $192, %xmm5, %xmm13, %xmm13
vpshufd $27, %xmm13, %xmm13
vpaddd %xmm13, %xmm10, %xmm10
vpaddd %xmm0, %xmm10, %xmm11
vpalignr $4, %xmm3, %xmm4, %xmm10
vpxor %xmm11, %xmm14, %xmm14
vpshufb %xmm7, %xmm14, %xmm14
vpaddd %xmm14, %xmm8, %xmm1
vpblendw $51, %xmm2, %xmm10, %xmm10
vpxor %xmm1, %xmm0, %xmm13
vpslld $20, %xmm13, %xmm0
vpsrld $12, %xmm13, %xmm13
vpxor %xmm0, %xmm13, %xmm13
vpaddd %xmm10, %xmm13, %xmm10
vpaddd %xmm11, %xmm10, %xmm10
vpunpcklqdq %xmm2, %xmm3, %xmm11
vpxor %xmm10, %xmm14, %xmm0
vpshufb %xmm6, %xmm0, %xmm0
vpaddd %xmm0, %xmm1, %xmm1
vpunpcklqdq %xmm3, %xmm4, %xmm14
vpxor %xmm1, %xmm13, %xmm13
vpslld $25, %xmm13, %xmm8
vpshufd $57, %xmm10, %xmm10
vpshufd $78, %xmm0, %xmm0
vpsrld $7, %xmm13, %xmm13
vpshufd $147, %xmm1, %xmm1
vpxor %xmm8, %xmm13, %xmm13
vpunpckhqdq %xmm2, %xmm4, %xmm8
vpblendw $51, %xmm8, %xmm11, %xmm8
vpshufd $135, %xmm8, %xmm8
vpaddd %xmm8, %xmm10, %xmm10
vpaddd %xmm13, %xmm10, %xmm10
vpxor %xmm10, %xmm0, %xmm0
vpshufb %xmm7, %xmm0, %xmm0
vpaddd %xmm0, %xmm1, %xmm1
vpxor %xmm1, %xmm13, %xmm13
vpslld $20, %xmm13, %xmm8
vpsrld $12, %xmm13, %xmm13
vpxor %xmm8, %xmm13, %xmm13
vpunpckhqdq %xmm5, %xmm3, %xmm8
vpblendw $51, %xmm14, %xmm8, %xmm8
vpunpckhqdq %xmm4, %xmm2, %xmm14
vpaddd %xmm8, %xmm13, %xmm8
vpaddd %xmm10, %xmm8, %xmm8
vpxor %xmm8, %xmm0, %xmm0
vpshufb %xmm6, %xmm0, %xmm0
vpaddd %xmm0, %xmm1, %xmm1
vpshufd $147, %xmm8, %xmm8
vpxor %xmm1, %xmm13, %xmm13
vpslld $25, %xmm13, %xmm10
vpshufd $78, %xmm0, %xmm0
vpshufd $57, %xmm1, %xmm1
vpsrld $7, %xmm13, %xmm13
vpxor %xmm10, %xmm13, %xmm13
vpunpckhqdq %xmm3, %xmm5, %xmm10
vpblendw $51, %xmm10, %xmm14, %xmm14
vpblendw $3, %xmm2, %xmm4, %xmm10
vpshufd $147, %xmm14, %xmm14
vpaddd %xmm14, %xmm8, %xmm8
vpaddd %xmm13, %xmm8, %xmm14
vpxor %xmm14, %xmm0, %xmm0
vpshufb %xmm7, %xmm0, %xmm0
vpaddd %xmm0, %xmm1, %xmm1
vpxor %xmm1, %xmm13, %xmm13
vpslld $20, %xmm13, %xmm8
vpsrld $12, %xmm13, %xmm13
vpxor %xmm8, %xmm13, %xmm13
vpslldq $8, %xmm10, %xmm8
vpblendw $15, %xmm5, %xmm8, %xmm8
vpshufd $141, %xmm8, %xmm8
vpaddd %xmm13, %xmm8, %xmm8
vpaddd %xmm14, %xmm8, %xmm8
vpxor %xmm8, %xmm0, %xmm0
vpshufb %xmm6, %xmm0, %xmm0
vpaddd %xmm0, %xmm1, %xmm1
vpshufd $57, %xmm8, %xmm8
vpxor %xmm1, %xmm13, %xmm13
vpslld $25, %xmm13, %xmm14
vpshufd $78, %xmm0, %xmm0
vpshufd $147, %xmm1, %xmm1
vpsrld $7, %xmm13, %xmm13
vpxor %xmm14, %xmm13, %xmm13
vpunpckldq %xmm2, %xmm4, %xmm14
vpunpcklqdq %xmm14, %xmm12, %xmm14
vpaddd %xmm14, %xmm8, %xmm8
vpaddd %xmm13, %xmm8, %xmm8
vpblendw $15, %xmm5, %xmm12, %xmm12
vpxor %xmm8, %xmm0, %xmm0
vpshufb %xmm7, %xmm0, %xmm0
vpaddd %xmm0, %xmm1, %xmm1
vpshufd $141, %xmm12, %xmm12
vpxor %xmm1, %xmm13, %xmm13
vpslld $20, %xmm13, %xmm14
vpsrld $12, %xmm13, %xmm13
vpxor %xmm14, %xmm13, %xmm13
vpblendw $3, %xmm5, %xmm4, %xmm14
vpblendw $60, %xmm15, %xmm14, %xmm14
vpaddd %xmm14, %xmm13, %xmm14
vpaddd %xmm8, %xmm14, %xmm8
vpxor %xmm8, %xmm0, %xmm0
vpshufb %xmm6, %xmm0, %xmm0
vpaddd %xmm0, %xmm1, %xmm1
vpshufd $147, %xmm8, %xmm8
vpxor %xmm1, %xmm13, %xmm13
vpslld $25, %xmm13, %xmm15
vpshufd $78, %xmm0, %xmm0
vpshufd $57, %xmm1, %xmm1
vpsrld $7, %xmm13, %xmm13
vpxor %xmm15, %xmm13, %xmm14
vpblendw $12, %xmm4, %xmm3, %xmm15
vpsrldq $4, %xmm5, %xmm13
vpblendw $48, %xmm13, %xmm15, %xmm15
vpshufd $177, %xmm15, %xmm15
vpaddd %xmm15, %xmm8, %xmm8
vpaddd %xmm14, %xmm8, %xmm15
vpxor %xmm15, %xmm0, %xmm0
vpshufb %xmm7, %xmm0, %xmm0
vpaddd %xmm0, %xmm1, %xmm1
vpxor %xmm1, %xmm14, %xmm14
vpslld $20, %xmm14, %xmm13
vpsrld $12, %xmm14, %xmm14
vpxor %xmm13, %xmm14, %xmm8
vpunpcklqdq %xmm3, %xmm2, %xmm13
vpsrldq $4, %xmm13, %xmm13
vpshufd $132, %xmm5, %xmm14
vpblendw $51, %xmm13, %xmm14, %xmm13
vpaddd %xmm13, %xmm8, %xmm13
vpaddd %xmm15, %xmm13, %xmm13
vpblendw $51, %xmm5, %xmm4, %xmm15
vpxor %xmm13, %xmm0, %xmm0
vpshufb %xmm6, %xmm0, %xmm0
vpaddd %xmm0, %xmm1, %xmm1
vpshufd $57, %xmm13, %xmm13
vpxor %xmm1, %xmm8, %xmm8
vpslld $25, %xmm8, %xmm14
vpshufd $78, %xmm0, %xmm0
vpshufd $147, %xmm1, %xmm1
vpsrld $7, %xmm8, %xmm8
vpxor %xmm14, %xmm8, %xmm8
vpslldq $12, %xmm3, %xmm14
vpblendw $192, %xmm14, %xmm15, %xmm15
vpsrldq $4, %xmm3, %xmm14
vpaddd %xmm15, %xmm13, %xmm13
vpaddd %xmm8, %xmm13, %xmm15
vpxor %xmm15, %xmm0, %xmm0
vpshufb %xmm7, %xmm0, %xmm0
vpaddd %xmm0, %xmm1, %xmm1
vpxor %xmm1, %xmm8, %xmm8
vpslld $20, %xmm8, %xmm13
vpsrld $12, %xmm8, %xmm8
vpxor %xmm13, %xmm8, %xmm8
vpblendw $48, %xmm2, %xmm5, %xmm13
vpblendw $3, %xmm14, %xmm13, %xmm13
vpshufd $156, %xmm13, %xmm13
vpaddd %xmm8, %xmm13, %xmm13
vpaddd %xmm15, %xmm13, %xmm13
vpxor %xmm13, %xmm0, %xmm0
vpshufb %xmm6, %xmm0, %xmm0
vpaddd %xmm0, %xmm1, %xmm1
vpshufd $147, %xmm13, %xmm13
vpxor %xmm1, %xmm8, %xmm8
vpslld $25, %xmm8, %xmm15
vpshufd $78, %xmm0, %xmm0
vpsrld $7, %xmm8, %xmm8
vpxor %xmm15, %xmm8, %xmm8
vpshufd $57, %xmm1, %xmm15
vpunpcklqdq %xmm2, %xmm4, %xmm1
vpblendw $12, %xmm14, %xmm1, %xmm1
vpshufd $210, %xmm1, %xmm1
vpaddd %xmm1, %xmm13, %xmm13
vpunpckhdq %xmm2, %xmm3, %xmm14
vpaddd %xmm8, %xmm13, %xmm13
vpxor %xmm13, %xmm0, %xmm0
vpshufb %xmm7, %xmm0, %xmm1
vpaddd %xmm1, %xmm15, %xmm15
vpxor %xmm15, %xmm8, %xmm8
vpslld $20, %xmm8, %xmm0
vpsrld $12, %xmm8, %xmm8
vpxor %xmm0, %xmm8, %xmm8
vpunpckhqdq %xmm14, %xmm4, %xmm0
vpshufd $27, %xmm0, %xmm0
vpaddd %xmm8, %xmm0, %xmm0
vpaddd %xmm13, %xmm0, %xmm13
vpxor %xmm13, %xmm1, %xmm1
vpshufb %xmm6, %xmm1, %xmm1
vpaddd %xmm1, %xmm15, %xmm15
vpshufd $57, %xmm13, %xmm13
vpxor %xmm15, %xmm8, %xmm8
vpaddd %xmm12, %xmm13, %xmm13
vpslld $25, %xmm8, %xmm0
vpshufd $147, %xmm15, %xmm15
vpsrld $7, %xmm8, %xmm8
vpshufd $78, %xmm1, %xmm1
vpxor %xmm0, %xmm8, %xmm8
vpaddd %xmm8, %xmm13, %xmm13
vpxor %xmm13, %xmm1, %xmm1
vpshufb %xmm7, %xmm1, %xmm12
vpaddd %xmm12, %xmm15, %xmm0
vpsrldq $4, %xmm4, %xmm15
vpxor %xmm0, %xmm8, %xmm8
vpslld $20, %xmm8, %xmm1
vpsrld $12, %xmm8, %xmm8
vpxor %xmm8, %xmm1, %xmm8
vpblendw $48, %xmm5, %xmm2, %xmm1
vpblendw $3, %xmm15, %xmm1, %xmm1
vmovaps 144(%rsp), %xmm15
vpshufd $75, %xmm1, %xmm1
vpaddd %xmm8, %xmm1, %xmm1
vpaddd %xmm13, %xmm1, %xmm13
vpxor %xmm12, %xmm13, %xmm12
vpshufb %xmm6, %xmm12, %xmm12
vpaddd %xmm12, %xmm0, %xmm0
vpshufd $147, %xmm13, %xmm13
vpxor %xmm0, %xmm8, %xmm8
vpslld $25, %xmm8, %xmm1
vpshufd $78, %xmm12, %xmm12
vpshufd $57, %xmm0, %xmm0
vpsrld $7, %xmm8, %xmm8
vpxor %xmm8, %xmm1, %xmm8
vpunpckhqdq %xmm5, %xmm4, %xmm1
vpblendw $60, %xmm11, %xmm1, %xmm11
vpshufd $180, %xmm11, %xmm11
vpaddd %xmm13, %xmm11, %xmm13
vpaddd %xmm8, %xmm13, %xmm13
vpxor %xmm12, %xmm13, %xmm12
vpshufb %xmm7, %xmm12, %xmm1
vpaddd %xmm1, %xmm0, %xmm0
vpunpckldq %xmm3, %xmm4, %xmm12
vpxor %xmm0, %xmm8, %xmm8
vpslld $20, %xmm8, %xmm11
vpunpcklqdq %xmm14, %xmm12, %xmm12
vpshufd $147, %xmm12, %xmm12
vpsrld $12, %xmm8, %xmm8
vpxor %xmm8, %xmm11, %xmm11
vpaddd %xmm11, %xmm12, %xmm12
vpsrldq $8, %xmm2, %xmm14
vpaddd %xmm13, %xmm12, %xmm12
vpxor %xmm1, %xmm12, %xmm8
vpshufb %xmm6, %xmm8, %xmm8
vpaddd %xmm8, %xmm0, %xmm1
vpshufd $57, %xmm12, %xmm12
vpxor %xmm1, %xmm11, %xmm0
vpslld $25, %xmm0, %xmm13
vpshufd $78, %xmm8, %xmm8
vpshufd $147, %xmm1, %xmm1
vpsrld $7, %xmm0, %xmm11
vpunpckhdq %xmm5, %xmm3, %xmm0
vpunpcklqdq %xmm4, %xmm0, %xmm0
vpblendw $192, %xmm2, %xmm0, %xmm0
vpshufhw $78, %xmm0, %xmm0
vpaddd %xmm0, %xmm12, %xmm12
vpxor %xmm11, %xmm13, %xmm11
vpaddd %xmm11, %xmm12, %xmm12
vpxor %xmm8, %xmm12, %xmm8
vpshufb %xmm7, %xmm8, %xmm8
vpaddd %xmm8, %xmm1, %xmm1
vpxor %xmm1, %xmm11, %xmm11
vpslld $20, %xmm11, %xmm13
vpsrld $12, %xmm11, %xmm11
vpxor %xmm11, %xmm13, %xmm13
vpunpckhdq %xmm5, %xmm4, %xmm11
vpblendw $240, %xmm11, %xmm2, %xmm0
vpshufd $39, %xmm0, %xmm0
vpaddd %xmm13, %xmm0, %xmm0
vpaddd %xmm12, %xmm0, %xmm12
vpxor %xmm8, %xmm12, %xmm8
vpshufb %xmm6, %xmm8, %xmm8
vpaddd %xmm8, %xmm1, %xmm1
vpshufd $147, %xmm12, %xmm12
vpxor %xmm1, %xmm13, %xmm13
vpslld $25, %xmm13, %xmm0
vpshufd $78, %xmm8, %xmm8
vpshufd $57, %xmm1, %xmm1
vpsrld $7, %xmm13, %xmm13
vpxor %xmm13, %xmm0, %xmm13
vpunpcklqdq %xmm5, %xmm4, %xmm0
vpblendw $3, %xmm14, %xmm0, %xmm0
vpshufd $120, %xmm0, %xmm0
vpaddd %xmm12, %xmm0, %xmm12
vpaddd %xmm13, %xmm12, %xmm12
vpxor %xmm8, %xmm12, %xmm8
vpshufb %xmm7, %xmm8, %xmm8
vpaddd %xmm8, %xmm1, %xmm1
vpxor %xmm1, %xmm13, %xmm13
vpslld $20, %xmm13, %xmm0
vpsrld $12, %xmm13, %xmm13
vpxor %xmm13, %xmm0, %xmm13
vpblendw $48, %xmm4, %xmm3, %xmm0
vpshufd $57, %xmm0, %xmm0
vpaddd %xmm13, %xmm0, %xmm0
vpaddd %xmm12, %xmm0, %xmm0
vpxor %xmm8, %xmm0, %xmm8
vpshufb %xmm6, %xmm8, %xmm8
vpaddd %xmm8, %xmm1, %xmm1
vpshufd $57, %xmm0, %xmm0
vpxor %xmm1, %xmm13, %xmm14
vpslld $25, %xmm14, %xmm12
vpshufd $78, %xmm8, %xmm8
vpshufd $147, %xmm1, %xmm1
vpsrld $7, %xmm14, %xmm13
vmovaps 128(%rsp), %xmm14
vpxor %xmm13, %xmm12, %xmm13
vpblendw $48, %xmm2, %xmm3, %xmm12
vpblendw $15, %xmm10, %xmm12, %xmm10
vpshufd $114, %xmm10, %xmm10
vpaddd %xmm0, %xmm10, %xmm0
vpaddd %xmm13, %xmm0, %xmm10
vpslldq $4, %xmm4, %xmm0
vpunpckldq %xmm5, %xmm4, %xmm4
vpxor %xmm8, %xmm10, %xmm8
vpshufb %xmm7, %xmm8, %xmm8
vpaddd %xmm8, %xmm1, %xmm1
vpblendw $192, %xmm0, %xmm3, %xmm0
vpxor %xmm1, %xmm13, %xmm13
vpslld $20, %xmm13, %xmm12
vpshufd $99, %xmm0, %xmm0
vpsrld $12, %xmm13, %xmm13
vpxor %xmm13, %xmm12, %xmm12
vpaddd %xmm12, %xmm0, %xmm0
vmovaps 112(%rsp), %xmm13
vpaddd %xmm10, %xmm0, %xmm0
vmovaps 64(%rsp), %xmm10
vpxor %xmm8, %xmm0, %xmm8
vpshufb %xmm6, %xmm8, %xmm8
vpaddd %xmm8, %xmm1, %xmm1
vpshufd $147, %xmm0, %xmm0
vpxor %xmm1, %xmm12, %xmm12
vpslld $25, %xmm12, %xmm3
vpshufd $78, %xmm8, %xmm8
vpshufd $57, %xmm1, %xmm1
vpsrld $7, %xmm12, %xmm12
vpxor %xmm12, %xmm3, %xmm12
vpunpckldq %xmm5, %xmm2, %xmm3
vpunpckhqdq %xmm3, %xmm11, %xmm11
vpshufd $39, %xmm11, %xmm11
vpaddd %xmm0, %xmm11, %xmm0
vpaddd %xmm12, %xmm0, %xmm11
vpblendw $192, %xmm2, %xmm5, %xmm0
vpxor %xmm8, %xmm11, %xmm8
vpshufb %xmm7, %xmm8, %xmm7
vpaddd %xmm7, %xmm1, %xmm1
vpblendw $15, %xmm4, %xmm0, %xmm0
vpxor %xmm1, %xmm12, %xmm12
vpslld $20, %xmm12, %xmm3
vpshufd $108, %xmm0, %xmm0
vmovaps 32(%rsp), %xmm8
vpsrld $12, %xmm12, %xmm12
vpxor %xmm12, %xmm3, %xmm3
vpaddd %xmm3, %xmm0, %xmm0
vmovaps 96(%rsp), %xmm12
vpaddd %xmm11, %xmm0, %xmm0
vmovaps 80(%rsp), %xmm11
vpxor %xmm7, %xmm0, %xmm7
vpshufb %xmm6, %xmm7, %xmm6
vpaddd %xmm6, %xmm1, %xmm1
vmovaps 16(%rsp), %xmm7
vpxor %xmm1, %xmm3, %xmm3
vpslld $25, %xmm3, %xmm2
vpshufd $78, %xmm6, %xmm6
vpxor %xmm6, %xmm9, %xmm6
vpsrld $7, %xmm3, %xmm3
vmovaps 48(%rsp), %xmm9
vpshufd $147, %xmm1, %xmm1
vpshufd $57, %xmm0, %xmm0
vpxor %xmm3, %xmm2, %xmm3
vpxor %xmm3, %xmm6, %xmm6
vmovups %xmm6, 16(%rcx)
vpxor %xmm0, %xmm1, %xmm0
vmovaps (%rsp), %xmm6
vpxor (%rcx), %xmm0, %xmm0
vmovups %xmm0, (%rcx)
addq $168, %rsp
{$IF DEFINED(UNIX)}
popq %rdx
popq %rcx
{$ENDIF}
end;
procedure blake2b_compress_avx( S: Pblake2b_state; const block: pcuint8 ); assembler; nostackframe;
asm
{$IF DEFINED(UNIX)}
pushq %rcx
movq %rdi, %rcx
pushq %rdx
movq %rsi, %rdx
{$ENDIF}
subq $568, %rsp
vmovaps %xmm6, 400(%rsp)
vmovaps %xmm7, 416(%rsp)
vmovaps %xmm8, 432(%rsp)
vmovaps %xmm9, 448(%rsp)
vmovaps %xmm10, 464(%rsp)
vmovaps %xmm11, 480(%rsp)
vmovaps %xmm12, 496(%rsp)
vmovaps %xmm13, 512(%rsp)
vmovaps %xmm14, 528(%rsp)
vmovaps %xmm15, 544(%rsp)
vmovdqu 112(%rdx), %xmm5
vmovdqu 16(%rdx), %xmm1
vmovdqu (%rdx), %xmm4
vmovdqu 32(%rcx), %xmm3
vpaddq (%rcx), %xmm3, %xmm9
vmovdqu 32(%rdx), %xmm13
vmovaps %xmm5, 80(%rsp)
vpunpcklqdq %xmm1, %xmm4, %xmm2
vmovdqu 48(%rdx), %xmm12
vpaddq %xmm2, %xmm9, %xmm9
vmovaps %xmm4, 48(%rsp)
vpunpckhqdq %xmm1, %xmm4, %xmm4
vmovdqa BLAKE2B_LC0(%rip), %xmm5
vmovaps %xmm1, (%rsp)
vmovdqu 48(%rcx), %xmm11
vpaddq 16(%rcx), %xmm11, %xmm11
vpunpcklqdq %xmm12, %xmm13, %xmm0
vmovaps %xmm2, 272(%rsp)
vmovdqu 64(%rcx), %xmm14
vpxor blake2b_IV_3(%rip), %xmm14, %xmm2
vpxor %xmm9, %xmm2, %xmm2
vmovaps %xmm0, 288(%rsp)
vpaddq %xmm0, %xmm11, %xmm11
vpshufd $177, %xmm2, %xmm2
vmovdqu 80(%rdx), %xmm6
vpaddq blake2b_IV(%rip), %xmm2, %xmm3
vpxor 32(%rcx), %xmm3, %xmm0
vpshufb %xmm5, %xmm0, %xmm0
vpaddq %xmm4, %xmm0, %xmm1
vmovaps %xmm4, 304(%rsp)
vmovdqu 64(%rdx), %xmm7
vmovaps %xmm12, 16(%rsp)
vpaddq %xmm9, %xmm1, %xmm9
vpunpckhqdq %xmm12, %xmm13, %xmm12
vmovdqu 80(%rcx), %xmm14
vpxor blake2b_IV_4(%rip), %xmm14, %xmm10
vpxor %xmm11, %xmm10, %xmm10
vpshufd $177, %xmm10, %xmm10
vmovdqu 96(%rdx), %xmm15
vpxor %xmm2, %xmm9, %xmm2
vpaddq blake2b_IV_2(%rip), %xmm10, %xmm14
vpxor 48(%rcx), %xmm14, %xmm8
vmovdqa BLAKE2B_LC1(%rip), %xmm4
vpshufb %xmm5, %xmm8, %xmm8
vpaddq %xmm12, %xmm8, %xmm1
vmovaps %xmm12, 320(%rsp)
vpaddq %xmm11, %xmm1, %xmm11
vmovaps %xmm13, 64(%rsp)
vpshufb %xmm4, %xmm2, %xmm2
vmovdqa %xmm2, %xmm12
vpaddq %xmm2, %xmm3, %xmm2
vpxor %xmm10, %xmm11, %xmm10
vpxor %xmm0, %xmm2, %xmm0
vpshufb %xmm4, %xmm10, %xmm10
vpsrlq $63, %xmm0, %xmm3
vmovdqa %xmm10, %xmm13
vpaddq %xmm0, %xmm0, %xmm0
vpaddq %xmm10, %xmm14, %xmm10
vpunpcklqdq %xmm6, %xmm7, %xmm14
vmovaps %xmm14, 112(%rsp)
vmovdqa %xmm15, %xmm14
vmovdqa 80(%rsp), %xmm15
vpxor %xmm3, %xmm0, %xmm1
vpxor %xmm8, %xmm10, %xmm8
vpsrlq $63, %xmm8, %xmm0
vpaddq %xmm8, %xmm8, %xmm8
vmovaps %xmm14, 32(%rsp)
vpunpcklqdq %xmm15, %xmm14, %xmm3
vpxor %xmm0, %xmm8, %xmm8
vpalignr $8, %xmm1, %xmm8, %xmm0
vpalignr $8, %xmm8, %xmm1, %xmm1
vpalignr $8, %xmm12, %xmm13, %xmm8
vpalignr $8, %xmm13, %xmm12, %xmm12
vmovdqa %xmm3, %xmm13
vpaddq 112(%rsp), %xmm0, %xmm3
vmovaps %xmm13, 128(%rsp)
vpaddq %xmm9, %xmm3, %xmm9
vpaddq %xmm13, %xmm1, %xmm3
vpunpckhqdq %xmm15, %xmm14, %xmm13
vmovaps %xmm13, 144(%rsp)
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm12, %xmm9, %xmm12
vpshufd $177, %xmm12, %xmm12
vpaddq %xmm12, %xmm10, %xmm10
vpxor %xmm8, %xmm11, %xmm8
vpshufd $177, %xmm8, %xmm8
vpaddq %xmm8, %xmm2, %xmm3
vpxor %xmm0, %xmm10, %xmm0
vpunpckhqdq %xmm6, %xmm7, %xmm2
vpshufb %xmm5, %xmm0, %xmm0
vpxor %xmm1, %xmm3, %xmm1
vpaddq %xmm2, %xmm0, %xmm13
vpshufb %xmm5, %xmm1, %xmm1
vpaddq %xmm9, %xmm13, %xmm9
vpunpcklqdq 64(%rsp), %xmm15, %xmm15
vmovaps %xmm2, 336(%rsp)
vpaddq 144(%rsp), %xmm1, %xmm2
vpxor %xmm12, %xmm9, %xmm12
vpshufb %xmm4, %xmm12, %xmm12
vpaddq %xmm12, %xmm10, %xmm10
vpxor %xmm0, %xmm10, %xmm0
vmovdqa %xmm12, %xmm13
vmovaps %xmm15, 160(%rsp)
vpaddq %xmm11, %xmm2, %xmm11
vpxor %xmm8, %xmm11, %xmm2
vpshufb %xmm4, %xmm2, %xmm2
vmovdqa %xmm2, %xmm8
vpaddq %xmm2, %xmm3, %xmm2
vpsrlq $63, %xmm0, %xmm3
vpaddq %xmm0, %xmm0, %xmm0
vpxor %xmm1, %xmm2, %xmm1
vpxor %xmm3, %xmm0, %xmm12
vpsrlq $63, %xmm1, %xmm3
vpaddq %xmm1, %xmm1, %xmm1
vpxor %xmm3, %xmm1, %xmm0
vpalignr $8, %xmm0, %xmm12, %xmm3
vpalignr $8, %xmm8, %xmm13, %xmm1
vpalignr $8, %xmm12, %xmm0, %xmm0
vpalignr $8, %xmm13, %xmm8, %xmm8
vpunpckhqdq %xmm14, %xmm7, %xmm13
vmovaps %xmm13, 176(%rsp)
vpaddq %xmm15, %xmm3, %xmm13
vpaddq 176(%rsp), %xmm0, %xmm15
vpaddq %xmm9, %xmm13, %xmm9
vpunpcklqdq %xmm7, %xmm6, %xmm13
vmovaps %xmm13, 192(%rsp)
vpxor %xmm8, %xmm9, %xmm8
vpshufd $177, %xmm8, %xmm8
vpaddq %xmm8, %xmm2, %xmm2
vpaddq %xmm11, %xmm15, %xmm11
vmovdqa 16(%rsp), %xmm15
vpxor %xmm3, %xmm2, %xmm3
vpalignr $8, 80(%rsp), %xmm15, %xmm12
vpxor %xmm1, %xmm11, %xmm1
vpshufd $177, %xmm1, %xmm1
vpaddq %xmm1, %xmm10, %xmm10
vpshufb %xmm5, %xmm3, %xmm3
vmovdqa %xmm12, %xmm15
vpaddq %xmm13, %xmm3, %xmm13
vpxor %xmm0, %xmm10, %xmm0
vpshufb %xmm5, %xmm0, %xmm0
vmovaps %xmm15, 208(%rsp)
vpaddq %xmm9, %xmm13, %xmm9
vpaddq 208(%rsp), %xmm0, %xmm15
vpxor %xmm8, %xmm9, %xmm13
vpshufb %xmm4, %xmm13, %xmm13
vpaddq %xmm13, %xmm2, %xmm2
vmovdqa %xmm13, %xmm8
vpaddq %xmm11, %xmm15, %xmm11
vpxor %xmm3, %xmm2, %xmm3
vpsrlq $63, %xmm3, %xmm13
vpaddq %xmm3, %xmm3, %xmm3
vpxor %xmm1, %xmm11, %xmm1
vpshufb %xmm4, %xmm1, %xmm1
vpaddq %xmm1, %xmm10, %xmm10
vmovdqa %xmm1, %xmm12
vpxor %xmm0, %xmm10, %xmm0
vpxor %xmm13, %xmm3, %xmm1
vpsrlq $63, %xmm0, %xmm3
vpaddq %xmm0, %xmm0, %xmm0
vpunpckhqdq 64(%rsp), %xmm6, %xmm13
vpxor %xmm3, %xmm0, %xmm0
vmovdqa %xmm13, %xmm15
vpalignr $8, %xmm1, %xmm0, %xmm3
vmovaps %xmm15, 352(%rsp)
vpalignr $8, %xmm0, %xmm1, %xmm1
vpalignr $8, %xmm8, %xmm12, %xmm0
vpaddq %xmm15, %xmm1, %xmm15
vpalignr $8, %xmm12, %xmm8, %xmm8
vpshufd $78, 48(%rsp), %xmm12
vpaddq %xmm11, %xmm15, %xmm11
vmovaps %xmm12, 224(%rsp)
vpaddq 224(%rsp), %xmm3, %xmm13
vpxor %xmm0, %xmm11, %xmm0
vpshufd $177, %xmm0, %xmm0
vpaddq %xmm0, %xmm2, %xmm2
vmovdqa 16(%rsp), %xmm12
vpxor %xmm1, %xmm2, %xmm1
vpshufb %xmm5, %xmm1, %xmm1
vpaddq %xmm9, %xmm13, %xmm9
vmovdqa (%rsp), %xmm13
vpxor %xmm8, %xmm9, %xmm8
vpshufd $177, %xmm8, %xmm8
vpaddq %xmm8, %xmm10, %xmm10
vpunpcklqdq %xmm13, %xmm14, %xmm14
vmovdqa %xmm14, %xmm15
vpxor %xmm3, %xmm10, %xmm3
vpunpckhqdq %xmm13, %xmm12, %xmm14
vpshufb %xmm5, %xmm3, %xmm3
vpaddq %xmm15, %xmm3, %xmm13
vmovaps %xmm14, 96(%rsp)
vmovaps %xmm15, 368(%rsp)
vpaddq %xmm9, %xmm13, %xmm13
vpaddq %xmm14, %xmm1, %xmm15
vpaddq %xmm11, %xmm15, %xmm11
vpxor %xmm8, %xmm13, %xmm8
vpshufb %xmm4, %xmm8, %xmm8
vpaddq %xmm8, %xmm10, %xmm10
vpxor %xmm3, %xmm10, %xmm3
vpxor %xmm0, %xmm11, %xmm0
vmovdqa %xmm8, %xmm9
vpshufb %xmm4, %xmm0, %xmm0
vpsrlq $63, %xmm3, %xmm12
vpaddq %xmm0, %xmm2, %xmm2
vpaddq %xmm3, %xmm3, %xmm3
vmovdqa 64(%rsp), %xmm15
vpxor %xmm12, %xmm3, %xmm8
vpxor %xmm1, %xmm2, %xmm1
vpsrlq $63, %xmm1, %xmm3
vpaddq %xmm1, %xmm1, %xmm1
vmovdqa %xmm0, %xmm14
vpxor %xmm3, %xmm1, %xmm0
vmovdqa 32(%rsp), %xmm1
vpalignr $8, %xmm0, %xmm8, %xmm3
vpalignr $8, %xmm8, %xmm0, %xmm0
vpalignr $8, %xmm6, %xmm1, %xmm12
vpunpckhqdq 80(%rsp), %xmm15, %xmm1
vpaddq %xmm1, %xmm0, %xmm15
vmovaps %xmm1, 240(%rsp)
vpalignr $8, %xmm14, %xmm9, %xmm8
vpaddq %xmm12, %xmm3, %xmm12
vpaddq %xmm11, %xmm15, %xmm15
vpalignr $8, %xmm9, %xmm14, %xmm14
vpxor %xmm8, %xmm15, %xmm8
vpaddq %xmm13, %xmm12, %xmm9
vpshufd $177, %xmm8, %xmm8
vpaddq %xmm8, %xmm10, %xmm1
vmovdqa (%rsp), %xmm10
vpxor %xmm14, %xmm9, %xmm14
vpshufd $177, %xmm14, %xmm14
vpaddq %xmm14, %xmm2, %xmm2
vpunpcklqdq 48(%rsp), %xmm7, %xmm12
vpxor %xmm0, %xmm1, %xmm0
vpshufb %xmm5, %xmm0, %xmm0
vpblendw $240, 32(%rsp), %xmm10, %xmm13
vpxor %xmm3, %xmm2, %xmm3
vpshufb %xmm5, %xmm3, %xmm3
vpaddq %xmm3, %xmm12, %xmm12
vpaddq %xmm9, %xmm12, %xmm12
vpaddq %xmm13, %xmm0, %xmm13
vpblendw $240, (%rsp), %xmm6, %xmm9
vpaddq %xmm15, %xmm13, %xmm11
vpxor %xmm14, %xmm12, %xmm13
vpshufb %xmm4, %xmm13, %xmm13
vpaddq %xmm13, %xmm2, %xmm2
vpxor %xmm3, %xmm2, %xmm3
vpxor %xmm8, %xmm11, %xmm8
vpshufb %xmm4, %xmm8, %xmm8
vmovdqa %xmm8, %xmm10
vpaddq %xmm8, %xmm1, %xmm1
vpsrlq $63, %xmm3, %xmm8
vpaddq %xmm3, %xmm3, %xmm3
vpxor %xmm0, %xmm1, %xmm0
vpxor %xmm8, %xmm3, %xmm3
vpsrlq $63, %xmm0, %xmm8
vpaddq %xmm0, %xmm0, %xmm0
vpxor %xmm8, %xmm0, %xmm0
vpalignr $8, %xmm3, %xmm0, %xmm14
vpalignr $8, %xmm0, %xmm3, %xmm3
vmovdqa 16(%rsp), %xmm0
vpaddq %xmm9, %xmm14, %xmm9
vpaddq %xmm12, %xmm9, %xmm12
vpalignr $8, %xmm13, %xmm10, %xmm8
vmovdqa 80(%rsp), %xmm9
vpunpcklqdq 16(%rsp), %xmm9, %xmm9
vpunpckhqdq %xmm7, %xmm0, %xmm15
vpalignr $8, %xmm10, %xmm13, %xmm10
vpaddq %xmm3, %xmm15, %xmm15
vpaddq %xmm11, %xmm15, %xmm13
vpxor %xmm10, %xmm12, %xmm10
vmovdqa 64(%rsp), %xmm11
vpshufd $177, %xmm10, %xmm10
vpalignr $8, 48(%rsp), %xmm11, %xmm11
vpaddq %xmm10, %xmm1, %xmm1
vpxor %xmm8, %xmm13, %xmm8
vpshufd $177, %xmm8, %xmm8
vpaddq %xmm8, %xmm2, %xmm0
vpxor %xmm14, %xmm1, %xmm2
vpshufb %xmm5, %xmm2, %xmm2
vpaddq %xmm2, %xmm9, %xmm9
vpaddq %xmm12, %xmm9, %xmm9
vpxor %xmm3, %xmm0, %xmm3
vpshufb %xmm5, %xmm3, %xmm3
vpaddq %xmm3, %xmm11, %xmm11
vpaddq %xmm13, %xmm11, %xmm15
vpxor %xmm10, %xmm9, %xmm10
vpshufb %xmm4, %xmm10, %xmm10
vpaddq %xmm10, %xmm1, %xmm1
vmovdqa %xmm10, %xmm12
vpxor %xmm2, %xmm1, %xmm2
vpxor %xmm8, %xmm15, %xmm8
vpsrlq $63, %xmm2, %xmm10
vpshufb %xmm4, %xmm8, %xmm8
vpaddq %xmm2, %xmm2, %xmm2
vpaddq %xmm8, %xmm0, %xmm0
vmovdqa %xmm8, %xmm13
vpxor %xmm3, %xmm0, %xmm3
vpxor %xmm10, %xmm2, %xmm8
vpsrlq $63, %xmm3, %xmm10
vpaddq %xmm3, %xmm3, %xmm3
vpxor %xmm10, %xmm3, %xmm2
vpalignr $8, %xmm2, %xmm8, %xmm3
vpaddq 96(%rsp), %xmm3, %xmm14
vpalignr $8, %xmm8, %xmm2, %xmm2
vmovdqa 32(%rsp), %xmm8
vpalignr $8, %xmm13, %xmm12, %xmm10
vpaddq %xmm9, %xmm14, %xmm14
vpunpckhqdq %xmm6, %xmm8, %xmm11
vpalignr $8, %xmm12, %xmm13, %xmm13
vpaddq %xmm2, %xmm11, %xmm11
vpunpckhqdq 48(%rsp), %xmm7, %xmm8
vpaddq %xmm15, %xmm11, %xmm11
vpxor %xmm13, %xmm14, %xmm13
vpshufd $177, %xmm13, %xmm13
vpaddq %xmm13, %xmm0, %xmm0
vpxor %xmm10, %xmm11, %xmm10
vpxor %xmm3, %xmm0, %xmm3
vpshufd $177, %xmm10, %xmm10
vpshufb %xmm5, %xmm3, %xmm3
vpaddq %xmm10, %xmm1, %xmm1
vpaddq %xmm3, %xmm8, %xmm8
vpaddq %xmm14, %xmm8, %xmm9
vpxor %xmm2, %xmm1, %xmm2
vpshufb %xmm5, %xmm2, %xmm2
vpaddq 128(%rsp), %xmm2, %xmm8
vpxor %xmm13, %xmm9, %xmm12
vpshufb %xmm4, %xmm12, %xmm12
vpaddq %xmm12, %xmm0, %xmm0
vmovdqa 48(%rsp), %xmm13
vpaddq %xmm11, %xmm8, %xmm11
vpxor %xmm3, %xmm0, %xmm3
vpxor %xmm10, %xmm11, %xmm10
vpshufb %xmm4, %xmm10, %xmm10
vmovdqa %xmm10, %xmm8
vpaddq %xmm10, %xmm1, %xmm1
vpsrlq $63, %xmm3, %xmm10
vpaddq %xmm3, %xmm3, %xmm3
vpxor %xmm2, %xmm1, %xmm2
vpxor %xmm10, %xmm3, %xmm3
vpsrlq $63, %xmm2, %xmm10
vpaddq %xmm2, %xmm2, %xmm2
vpxor %xmm10, %xmm2, %xmm10
vpalignr $8, %xmm12, %xmm8, %xmm14
vpalignr $8, %xmm3, %xmm10, %xmm2
vpalignr $8, %xmm8, %xmm12, %xmm15
vmovdqa (%rsp), %xmm8
vpalignr $8, %xmm10, %xmm3, %xmm3
vmovdqa 64(%rsp), %xmm10
vpblendw $240, %xmm10, %xmm8, %xmm12
vpblendw $240, 80(%rsp), %xmm10, %xmm10
vpaddq %xmm12, %xmm2, %xmm12
vpaddq %xmm9, %xmm12, %xmm8
vmovdqa 16(%rsp), %xmm12
vpaddq %xmm10, %xmm3, %xmm9
vpaddq %xmm11, %xmm9, %xmm11
vpxor %xmm15, %xmm8, %xmm15
vpshufd $177, %xmm15, %xmm15
vpaddq %xmm15, %xmm1, %xmm1
vpunpcklqdq %xmm6, %xmm12, %xmm9
vmovdqa %xmm9, %xmm12
vpxor %xmm14, %xmm11, %xmm14
vpxor %xmm2, %xmm1, %xmm2
vpshufd $177, %xmm14, %xmm14
vpshufb %xmm5, %xmm2, %xmm2
vpaddq %xmm14, %xmm0, %xmm0
vpunpcklqdq %xmm7, %xmm13, %xmm9
vmovaps %xmm12, 384(%rsp)
vpaddq %xmm12, %xmm2, %xmm12
vpxor %xmm3, %xmm0, %xmm3
vpshufb %xmm5, %xmm3, %xmm3
vpaddq %xmm8, %xmm12, %xmm12
vpaddq %xmm3, %xmm9, %xmm8
vpaddq %xmm11, %xmm8, %xmm11
vpxor %xmm15, %xmm12, %xmm15
vpshufb %xmm4, %xmm15, %xmm15
vpaddq %xmm15, %xmm1, %xmm1
vpxor %xmm2, %xmm1, %xmm2
vpxor %xmm14, %xmm11, %xmm14
vpshufb %xmm4, %xmm14, %xmm14
vmovdqa %xmm14, %xmm8
vpaddq %xmm14, %xmm0, %xmm14
vpsrlq $63, %xmm2, %xmm0
vpaddq %xmm2, %xmm2, %xmm2
vmovdqa %xmm15, %xmm13
vpxor %xmm3, %xmm14, %xmm3
vpxor %xmm0, %xmm2, %xmm15
vpsrlq $63, %xmm3, %xmm0
vpaddq %xmm3, %xmm3, %xmm3
vpxor %xmm0, %xmm3, %xmm2
vpalignr $8, %xmm8, %xmm13, %xmm3
vpalignr $8, %xmm2, %xmm15, %xmm0
vpalignr $8, %xmm13, %xmm8, %xmm8
vmovdqa (%rsp), %xmm13
vpalignr $8, %xmm15, %xmm2, %xmm2
vpunpckhqdq 64(%rsp), %xmm7, %xmm15
vpaddq %xmm0, %xmm15, %xmm15
vpaddq %xmm12, %xmm15, %xmm12
vpunpcklqdq %xmm6, %xmm13, %xmm13
vpaddq %xmm2, %xmm13, %xmm13
vpaddq %xmm11, %xmm13, %xmm11
vpxor %xmm8, %xmm12, %xmm8
vpshufd $177, %xmm8, %xmm8
vpaddq %xmm8, %xmm14, %xmm14
vpxor %xmm3, %xmm11, %xmm3
vpxor %xmm0, %xmm14, %xmm0
vpshufd $177, %xmm3, %xmm13
vpshufb %xmm5, %xmm0, %xmm3
vmovdqa 48(%rsp), %xmm0
vpaddq %xmm13, %xmm1, %xmm1
vpxor %xmm2, %xmm1, %xmm2
vpshufb %xmm5, %xmm2, %xmm2
vpaddq %xmm2, %xmm10, %xmm10
vpblendw $240, 16(%rsp), %xmm0, %xmm15
vpaddq %xmm11, %xmm10, %xmm11
vpaddq %xmm15, %xmm3, %xmm15
vpxor %xmm13, %xmm11, %xmm13
vpshufb %xmm4, %xmm13, %xmm13
vpaddq %xmm13, %xmm1, %xmm1
vpaddq %xmm12, %xmm15, %xmm12
vmovdqa %xmm13, %xmm15
vpxor %xmm8, %xmm12, %xmm8
vpshufb %xmm4, %xmm8, %xmm8
vmovdqa %xmm8, %xmm10
vpaddq %xmm8, %xmm14, %xmm14
vpxor %xmm2, %xmm1, %xmm8
vpsrlq $63, %xmm8, %xmm0
vpaddq %xmm8, %xmm8, %xmm2
vpxor %xmm3, %xmm14, %xmm3
vmovdqa 80(%rsp), %xmm8
vpsrlq $63, %xmm3, %xmm13
vpaddq %xmm3, %xmm3, %xmm3
vpxor %xmm0, %xmm2, %xmm2
vpxor %xmm13, %xmm3, %xmm3
vmovdqa (%rsp), %xmm13
vpalignr $8, %xmm3, %xmm2, %xmm0
vpalignr $8, %xmm2, %xmm3, %xmm2
vpalignr $8, %xmm10, %xmm15, %xmm3
vpalignr $8, %xmm15, %xmm10, %xmm10
vpblendw $240, %xmm6, %xmm8, %xmm15
vmovdqa 16(%rsp), %xmm8
vpaddq %xmm15, %xmm0, %xmm15
vpblendw $240, %xmm13, %xmm8, %xmm8
vpaddq %xmm12, %xmm15, %xmm12
vpaddq %xmm8, %xmm2, %xmm8
vpxor %xmm10, %xmm12, %xmm10
vpshufd $177, %xmm10, %xmm10
vpaddq %xmm10, %xmm1, %xmm1
vpaddq %xmm11, %xmm8, %xmm11
vmovdqa 32(%rsp), %xmm8
vpxor %xmm0, %xmm1, %xmm0
vpalignr $8, 48(%rsp), %xmm8, %xmm15
vpshufb %xmm5, %xmm0, %xmm0
vpblendw $240, 32(%rsp), %xmm7, %xmm8
vpxor %xmm3, %xmm11, %xmm3
vpshufd $177, %xmm3, %xmm3
vpaddq %xmm0, %xmm15, %xmm15
vpaddq %xmm3, %xmm14, %xmm14
vpaddq %xmm12, %xmm15, %xmm12
vpxor %xmm2, %xmm14, %xmm2
vpshufb %xmm5, %xmm2, %xmm2
vpaddq %xmm8, %xmm2, %xmm8
vpaddq %xmm11, %xmm8, %xmm11
vpxor %xmm10, %xmm12, %xmm10
vpshufb %xmm4, %xmm10, %xmm10
vpaddq %xmm10, %xmm1, %xmm1
vmovdqa %xmm10, %xmm15
vpxor %xmm3, %xmm11, %xmm3
vpxor %xmm0, %xmm1, %xmm0
vpshufb %xmm4, %xmm3, %xmm8
vpsrlq $63, %xmm0, %xmm10
vpaddq %xmm8, %xmm14, %xmm14
vpaddq %xmm0, %xmm0, %xmm0
vmovdqa %xmm8, %xmm3
vpxor %xmm2, %xmm14, %xmm2
vpxor %xmm10, %xmm0, %xmm8
vpsrlq $63, %xmm2, %xmm0
vpaddq %xmm2, %xmm2, %xmm2
vmovdqa 16(%rsp), %xmm10
vpxor %xmm0, %xmm2, %xmm2
vpalignr $8, %xmm2, %xmm8, %xmm0
vpalignr $8, %xmm8, %xmm2, %xmm2
vpaddq %xmm2, %xmm9, %xmm9
vpalignr $8, %xmm3, %xmm15, %xmm8
vpaddq %xmm11, %xmm9, %xmm11
vpalignr $8, %xmm15, %xmm3, %xmm15
vpunpcklqdq %xmm10, %xmm13, %xmm3
vpaddq %xmm0, %xmm3, %xmm3
vpaddq %xmm12, %xmm3, %xmm12
vpxor %xmm8, %xmm11, %xmm8
vpshufd $177, %xmm8, %xmm9
vpaddq %xmm9, %xmm1, %xmm1
vmovdqa 32(%rsp), %xmm8
vpxor %xmm15, %xmm12, %xmm15
vpunpckhqdq %xmm13, %xmm6, %xmm3
vpxor %xmm2, %xmm1, %xmm2
vpshufd $177, %xmm15, %xmm15
vpaddq %xmm15, %xmm14, %xmm14
vpshufb %xmm5, %xmm2, %xmm2
vpaddq %xmm2, %xmm3, %xmm3
vpxor %xmm0, %xmm14, %xmm0
vpunpcklqdq %xmm6, %xmm8, %xmm8
vpshufb %xmm5, %xmm0, %xmm0
vpaddq %xmm0, %xmm8, %xmm8
vpaddq %xmm12, %xmm8, %xmm12
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm15, %xmm12, %xmm15
vpshufb %xmm4, %xmm15, %xmm13
vpaddq %xmm13, %xmm14, %xmm14
vpxor %xmm9, %xmm11, %xmm9
vpxor %xmm0, %xmm14, %xmm0
vpshufb %xmm4, %xmm9, %xmm9
vpsrlq $63, %xmm0, %xmm8
vpaddq %xmm9, %xmm1, %xmm1
vpaddq %xmm0, %xmm0, %xmm0
vpxor %xmm2, %xmm1, %xmm2
vmovdqa 64(%rsp), %xmm15
vpalignr $8, %xmm9, %xmm13, %xmm3
vpxor %xmm8, %xmm0, %xmm0
vpsrlq $63, %xmm2, %xmm8
vpaddq %xmm2, %xmm2, %xmm2
vpxor %xmm8, %xmm2, %xmm2
vpalignr $8, %xmm0, %xmm2, %xmm8
vpblendw $240, 16(%rsp), %xmm15, %xmm10
vpalignr $8, %xmm2, %xmm0, %xmm0
vpaddq %xmm10, %xmm8, %xmm10
vpalignr $8, %xmm13, %xmm9, %xmm2
vmovdqa 80(%rsp), %xmm9
vpaddq %xmm12, %xmm10, %xmm12
vpunpckhqdq 48(%rsp), %xmm9, %xmm9
vpaddq %xmm0, %xmm9, %xmm9
vpxor %xmm3, %xmm12, %xmm3
vpshufd $177, %xmm3, %xmm3
vpaddq %xmm3, %xmm1, %xmm1
vpaddq %xmm11, %xmm9, %xmm11
vmovdqa 32(%rsp), %xmm9
vpxor %xmm8, %xmm1, %xmm8
vpshufb %xmm5, %xmm8, %xmm8
vpxor %xmm2, %xmm11, %xmm2
vpshufd $177, %xmm2, %xmm2
vpaddq %xmm2, %xmm14, %xmm14
vpunpckhqdq %xmm15, %xmm9, %xmm10
vmovdqa 80(%rsp), %xmm9
vpaddq %xmm8, %xmm10, %xmm10
vpxor %xmm0, %xmm14, %xmm0
vpaddq %xmm12, %xmm10, %xmm12
vpshufb %xmm5, %xmm0, %xmm0
vpblendw $240, %xmm7, %xmm9, %xmm9
vpxor %xmm3, %xmm12, %xmm3
vpshufb %xmm4, %xmm3, %xmm3
vpaddq %xmm3, %xmm1, %xmm1
vpaddq %xmm9, %xmm0, %xmm9
vpxor %xmm8, %xmm1, %xmm8
vmovdqa %xmm3, %xmm10
vpaddq %xmm11, %xmm9, %xmm11
vpsrlq $63, %xmm8, %xmm9
vpaddq %xmm8, %xmm8, %xmm8
vpxor %xmm2, %xmm11, %xmm2
vpshufb %xmm4, %xmm2, %xmm13
vpaddq %xmm13, %xmm14, %xmm14
vpxor %xmm9, %xmm8, %xmm3
vpxor %xmm0, %xmm14, %xmm0
vpsrlq $63, %xmm0, %xmm9
vpaddq %xmm0, %xmm0, %xmm0
vpxor %xmm9, %xmm0, %xmm8
vmovdqa 32(%rsp), %xmm9
vpalignr $8, %xmm8, %xmm3, %xmm0
vpalignr $8, %xmm13, %xmm10, %xmm15
vpblendw $240, 48(%rsp), %xmm9, %xmm2
vpalignr $8, %xmm3, %xmm8, %xmm8
vpaddq %xmm2, %xmm0, %xmm2
vpalignr $8, %xmm10, %xmm13, %xmm10
vpaddq %xmm12, %xmm2, %xmm12
vpaddq 160(%rsp), %xmm8, %xmm2
vpxor %xmm10, %xmm12, %xmm10
vpshufd $177, %xmm10, %xmm10
vpaddq %xmm10, %xmm14, %xmm14
vpaddq %xmm11, %xmm2, %xmm11
vpxor %xmm0, %xmm14, %xmm0
vpalignr $8, 32(%rsp), %xmm6, %xmm2
vpshufb %xmm5, %xmm0, %xmm0
vpaddq 240(%rsp), %xmm0, %xmm3
vpxor %xmm15, %xmm11, %xmm15
vpshufd $177, %xmm15, %xmm15
vpaddq %xmm15, %xmm1, %xmm1
vpxor %xmm8, %xmm1, %xmm8
vpshufb %xmm5, %xmm8, %xmm8
vpaddq %xmm8, %xmm2, %xmm2
vpaddq %xmm12, %xmm3, %xmm12
vpaddq %xmm11, %xmm2, %xmm11
vpxor %xmm10, %xmm12, %xmm10
vpshufb %xmm4, %xmm10, %xmm13
vpaddq %xmm13, %xmm14, %xmm14
vpxor %xmm15, %xmm11, %xmm15
vpxor %xmm0, %xmm14, %xmm0
vpshufb %xmm4, %xmm15, %xmm15
vpsrlq $63, %xmm0, %xmm3
vpaddq %xmm15, %xmm1, %xmm1
vpaddq %xmm0, %xmm0, %xmm0
vpxor %xmm8, %xmm1, %xmm8
vpalignr $8, %xmm15, %xmm13, %xmm2
vpxor %xmm3, %xmm0, %xmm0
vpsrlq $63, %xmm8, %xmm3
vpaddq %xmm8, %xmm8, %xmm8
vpxor %xmm3, %xmm8, %xmm8
vpalignr $8, %xmm0, %xmm8, %xmm9
vpshufd $78, %xmm7, %xmm3
vpalignr $8, %xmm8, %xmm0, %xmm0
vpalignr $8, %xmm13, %xmm15, %xmm8
vmovdqa 48(%rsp), %xmm13
vpaddq %xmm3, %xmm0, %xmm3
vpunpcklqdq 16(%rsp), %xmm13, %xmm10
vpaddq %xmm9, %xmm10, %xmm10
vpaddq %xmm11, %xmm3, %xmm11
vpaddq %xmm12, %xmm10, %xmm12
vmovdqa (%rsp), %xmm10
vpxor %xmm8, %xmm11, %xmm8
vpshufd $177, %xmm8, %xmm8
vpxor %xmm2, %xmm12, %xmm2
vpshufd $177, %xmm2, %xmm2
vpaddq %xmm2, %xmm1, %xmm1
vpaddq %xmm8, %xmm14, %xmm14
vpblendw $240, %xmm6, %xmm10, %xmm3
vpxor %xmm9, %xmm1, %xmm9
vpshufb %xmm5, %xmm9, %xmm9
vpaddq 96(%rsp), %xmm9, %xmm10
vpxor %xmm0, %xmm14, %xmm0
vpshufb %xmm5, %xmm0, %xmm0
vpaddq %xmm3, %xmm0, %xmm3
vpaddq %xmm12, %xmm10, %xmm12
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm2, %xmm12, %xmm2
vpshufb %xmm4, %xmm2, %xmm15
vpaddq %xmm15, %xmm1, %xmm1
vpxor %xmm8, %xmm11, %xmm8
vpxor %xmm9, %xmm1, %xmm9
vpshufb %xmm4, %xmm8, %xmm8
vpsrlq $63, %xmm9, %xmm10
vpaddq %xmm8, %xmm14, %xmm14
vpaddq %xmm9, %xmm9, %xmm9
vmovdqa %xmm8, %xmm2
vpxor %xmm0, %xmm14, %xmm0
vpxor %xmm10, %xmm9, %xmm8
vpsrlq $63, %xmm0, %xmm10
vpaddq %xmm0, %xmm0, %xmm0
vpxor %xmm10, %xmm0, %xmm9
vpalignr $8, %xmm9, %xmm8, %xmm0
vpalignr $8, %xmm2, %xmm15, %xmm10
vpalignr $8, %xmm8, %xmm9, %xmm9
vpalignr $8, %xmm15, %xmm2, %xmm3
vmovdqa 32(%rsp), %xmm2
vmovdqa %xmm13, %xmm15
vpunpckhqdq 16(%rsp), %xmm2, %xmm8
vpaddq %xmm0, %xmm8, %xmm8
vpaddq %xmm12, %xmm8, %xmm12
vmovdqa 80(%rsp), %xmm8
vpblendw $240, (%rsp), %xmm2, %xmm2
vpaddq %xmm2, %xmm9, %xmm2
vpxor %xmm3, %xmm12, %xmm3
vpshufd $177, %xmm3, %xmm3
vpaddq %xmm3, %xmm14, %xmm14
vpalignr $8, %xmm6, %xmm8, %xmm8
vpaddq %xmm11, %xmm2, %xmm11
vpxor %xmm0, %xmm14, %xmm0
vpshufb %xmm5, %xmm0, %xmm0
vmovaps %xmm8, 256(%rsp)
vpxor %xmm10, %xmm11, %xmm10
vpshufd $177, %xmm10, %xmm10
vpaddq %xmm10, %xmm1, %xmm1
vpaddq 256(%rsp), %xmm0, %xmm8
vpunpckhqdq %xmm7, %xmm13, %xmm2
vpxor %xmm9, %xmm1, %xmm9
vpshufb %xmm5, %xmm9, %xmm9
vpaddq %xmm9, %xmm2, %xmm2
vpaddq %xmm12, %xmm8, %xmm12
vpaddq %xmm11, %xmm2, %xmm11
vpxor %xmm3, %xmm12, %xmm3
vpshufb %xmm4, %xmm3, %xmm8
vpaddq %xmm8, %xmm14, %xmm14
vmovdqa %xmm8, %xmm2
vpxor %xmm0, %xmm14, %xmm0
vpxor %xmm10, %xmm11, %xmm10
vpsrlq $63, %xmm0, %xmm8
vpshufb %xmm4, %xmm10, %xmm10
vpaddq %xmm0, %xmm0, %xmm0
vpaddq %xmm10, %xmm1, %xmm1
vpunpcklqdq (%rsp), %xmm7, %xmm3
vpxor %xmm9, %xmm1, %xmm9
vpxor %xmm8, %xmm0, %xmm0
vpsrlq $63, %xmm9, %xmm8
vpaddq %xmm9, %xmm9, %xmm9
vpxor %xmm8, %xmm9, %xmm9
vpalignr $8, %xmm0, %xmm9, %xmm13
vpaddq 240(%rsp), %xmm13, %xmm8
vpalignr $8, %xmm9, %xmm0, %xmm0
vpaddq %xmm12, %xmm8, %xmm12
vpalignr $8, %xmm2, %xmm10, %xmm9
vpaddq %xmm0, %xmm3, %xmm3
vpalignr $8, %xmm10, %xmm2, %xmm2
vpaddq %xmm11, %xmm3, %xmm11
vpunpcklqdq 64(%rsp), %xmm15, %xmm3
vpxor %xmm2, %xmm12, %xmm2
vpshufd $177, %xmm2, %xmm2
vpaddq %xmm2, %xmm1, %xmm1
vpxor %xmm9, %xmm11, %xmm9
vpxor %xmm13, %xmm1, %xmm13
vpshufd $177, %xmm9, %xmm9
vpshufb %xmm5, %xmm13, %xmm13
vpaddq %xmm9, %xmm14, %xmm14
vpaddq %xmm13, %xmm3, %xmm3
vpxor %xmm0, %xmm14, %xmm0
vpshufb %xmm5, %xmm0, %xmm0
vpaddq %xmm12, %xmm3, %xmm12
vpaddq 384(%rsp), %xmm0, %xmm3
vpxor %xmm2, %xmm12, %xmm2
vpshufb %xmm4, %xmm2, %xmm10
vpaddq %xmm10, %xmm1, %xmm1
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm13, %xmm1, %xmm13
vpxor %xmm9, %xmm11, %xmm9
vpshufb %xmm4, %xmm9, %xmm9
vmovdqa %xmm9, %xmm2
vpaddq %xmm9, %xmm14, %xmm14
vpsrlq $63, %xmm13, %xmm9
vpaddq %xmm13, %xmm13, %xmm13
vpxor %xmm0, %xmm14, %xmm0
vpxor %xmm9, %xmm13, %xmm8
vpsrlq $63, %xmm0, %xmm9
vpaddq %xmm0, %xmm0, %xmm0
vpxor %xmm9, %xmm0, %xmm13
vmovdqa 48(%rsp), %xmm9
vpalignr $8, %xmm13, %xmm8, %xmm0
vpalignr $8, %xmm2, %xmm10, %xmm15
vpalignr $8, %xmm8, %xmm13, %xmm13
vpalignr $8, %xmm10, %xmm2, %xmm3
vmovdqa 16(%rsp), %xmm10
vpunpcklqdq 80(%rsp), %xmm10, %xmm8
vpaddq %xmm0, %xmm8, %xmm8
vpalignr $8, %xmm6, %xmm9, %xmm2
vpaddq %xmm12, %xmm8, %xmm12
vpaddq %xmm2, %xmm13, %xmm2
vpxor %xmm3, %xmm12, %xmm3
vpshufd $177, %xmm3, %xmm3
vpaddq %xmm3, %xmm14, %xmm14
vpaddq %xmm11, %xmm2, %xmm11
vpxor %xmm0, %xmm14, %xmm0
vpshufb %xmm5, %xmm0, %xmm0
vpalignr $8, %xmm9, %xmm6, %xmm6
vpxor %xmm15, %xmm11, %xmm15
vpshufd $177, %xmm15, %xmm15
vpaddq %xmm15, %xmm1, %xmm10
vmovdqa 80(%rsp), %xmm1
vpxor %xmm13, %xmm10, %xmm13
vpshufb %xmm5, %xmm13, %xmm13
vpunpckhqdq %xmm7, %xmm1, %xmm8
vpalignr $8, (%rsp), %xmm7, %xmm7
vpaddq %xmm0, %xmm8, %xmm1
vpaddq %xmm12, %xmm1, %xmm12
vpaddq %xmm13, %xmm7, %xmm7
vpxor %xmm3, %xmm12, %xmm3
vpshufb %xmm4, %xmm3, %xmm3
vpaddq %xmm3, %xmm14, %xmm14
vpaddq %xmm11, %xmm7, %xmm11
vpxor %xmm0, %xmm14, %xmm0
vpsrlq $63, %xmm0, %xmm7
vpaddq %xmm0, %xmm0, %xmm0
vpxor %xmm15, %xmm11, %xmm15
vpshufb %xmm4, %xmm15, %xmm15
vpaddq %xmm15, %xmm10, %xmm10
vpxor %xmm7, %xmm0, %xmm0
vmovdqa %xmm3, %xmm2
vpxor %xmm13, %xmm10, %xmm3
vpsrlq $63, %xmm3, %xmm7
vpaddq %xmm3, %xmm3, %xmm13
vpxor %xmm7, %xmm13, %xmm13
vpalignr $8, %xmm0, %xmm13, %xmm7
vpaddq 32(%rsp), %xmm7, %xmm1
vmovdqa %xmm9, %xmm3
vpalignr $8, %xmm13, %xmm0, %xmm13
vmovdqa (%rsp), %xmm9
vpaddq %xmm13, %xmm6, %xmm6
vpalignr $8, %xmm2, %xmm15, %xmm0
vpaddq %xmm12, %xmm1, %xmm12
vpaddq %xmm11, %xmm6, %xmm11
vpalignr $8, %xmm15, %xmm2, %xmm2
vpblendw $240, 16(%rsp), %xmm9, %xmm1
vpxor %xmm2, %xmm12, %xmm2
vpxor %xmm0, %xmm11, %xmm0
vpshufd $177, %xmm2, %xmm2
vpshufd $177, %xmm0, %xmm0
vpaddq %xmm2, %xmm10, %xmm10
vpaddq %xmm0, %xmm14, %xmm14
vpxor %xmm7, %xmm10, %xmm7
vpxor %xmm13, %xmm14, %xmm13
vpshufb %xmm5, %xmm7, %xmm7
vpshufb %xmm5, %xmm13, %xmm13
vpaddq %xmm1, %xmm7, %xmm1
vpaddq 64(%rsp), %xmm13, %xmm6
vpaddq %xmm12, %xmm1, %xmm12
vpaddq %xmm11, %xmm6, %xmm11
vpxor %xmm2, %xmm12, %xmm2
vpshufb %xmm4, %xmm2, %xmm15
vpaddq %xmm15, %xmm10, %xmm10
vpxor %xmm7, %xmm10, %xmm7
vpxor %xmm0, %xmm11, %xmm0
vpsrlq $63, %xmm7, %xmm1
vpshufb %xmm4, %xmm0, %xmm0
vpaddq %xmm7, %xmm7, %xmm7
vpaddq %xmm0, %xmm14, %xmm14
vmovdqa %xmm0, %xmm2
vpxor %xmm1, %xmm7, %xmm7
vpxor %xmm13, %xmm14, %xmm13
vpsrlq $63, %xmm13, %xmm1
vpaddq %xmm13, %xmm13, %xmm13
vpxor %xmm1, %xmm13, %xmm0
vmovdqa 16(%rsp), %xmm13
vpalignr $8, %xmm0, %xmm7, %xmm9
vpaddq 192(%rsp), %xmm9, %xmm6
vpalignr $8, %xmm7, %xmm0, %xmm0
vpalignr $8, %xmm2, %xmm15, %xmm1
vpaddq %xmm12, %xmm6, %xmm12
vmovdqa (%rsp), %xmm6
vpalignr $8, %xmm15, %xmm2, %xmm2
vmovdqa %xmm3, %xmm15
vpunpckhqdq %xmm3, %xmm13, %xmm3
vpaddq %xmm0, %xmm3, %xmm3
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm2, %xmm12, %xmm2
vpshufd $177, %xmm2, %xmm2
vpaddq %xmm2, %xmm14, %xmm14
vpxor %xmm1, %xmm11, %xmm1
vpshufd $177, %xmm1, %xmm1
vpaddq %xmm1, %xmm10, %xmm10
vpxor %xmm9, %xmm14, %xmm9
vpxor %xmm0, %xmm10, %xmm0
vpshufb %xmm5, %xmm0, %xmm7
vmovdqa 64(%rsp), %xmm0
vpshufb %xmm5, %xmm9, %xmm9
vpblendw $240, %xmm0, %xmm13, %xmm3
vpunpcklqdq %xmm0, %xmm6, %xmm6
vpaddq %xmm9, %xmm6, %xmm6
vpaddq %xmm3, %xmm7, %xmm3
vpaddq %xmm12, %xmm6, %xmm12
vmovdqa (%rsp), %xmm6
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm2, %xmm12, %xmm2
vpshufb %xmm4, %xmm2, %xmm2
vpaddq %xmm2, %xmm14, %xmm14
vpxor %xmm1, %xmm11, %xmm1
vpshufb %xmm4, %xmm1, %xmm1
vpaddq %xmm1, %xmm10, %xmm10
vmovdqa %xmm2, %xmm3
vpxor %xmm9, %xmm14, %xmm9
vpxor %xmm7, %xmm10, %xmm7
vpsrlq $63, %xmm9, %xmm0
vpaddq %xmm9, %xmm9, %xmm9
vpsrlq $63, %xmm7, %xmm2
vpaddq %xmm7, %xmm7, %xmm7
vmovdqa %xmm1, %xmm13
vpxor %xmm0, %xmm9, %xmm1
vpxor %xmm2, %xmm7, %xmm7
vpalignr $8, %xmm1, %xmm7, %xmm9
vpaddq %xmm9, %xmm8, %xmm8
vpalignr $8, %xmm7, %xmm1, %xmm7
vmovdqa 32(%rsp), %xmm1
vpalignr $8, %xmm3, %xmm13, %xmm0
vpaddq %xmm12, %xmm8, %xmm12
vpalignr $8, %xmm13, %xmm3, %xmm13
vpunpckhqdq %xmm1, %xmm6, %xmm3
vpaddq %xmm7, %xmm3, %xmm3
vpxor %xmm13, %xmm12, %xmm13
vpshufd $177, %xmm13, %xmm13
vpaddq %xmm13, %xmm10, %xmm10
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm9, %xmm10, %xmm9
vpshufb %xmm5, %xmm9, %xmm9
vpxor %xmm0, %xmm11, %xmm0
vpunpcklqdq %xmm15, %xmm1, %xmm3
vpaddq 256(%rsp), %xmm9, %xmm8
vpshufd $177, %xmm0, %xmm0
vpaddq %xmm0, %xmm14, %xmm14
vpxor %xmm7, %xmm14, %xmm7
vpshufb %xmm5, %xmm7, %xmm7
vpaddq %xmm7, %xmm3, %xmm3
vpaddq %xmm12, %xmm8, %xmm12
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm13, %xmm12, %xmm13
vpshufb %xmm4, %xmm13, %xmm13
vpaddq %xmm13, %xmm10, %xmm10
vpxor %xmm0, %xmm11, %xmm0
vpxor %xmm9, %xmm10, %xmm9
vpshufb %xmm4, %xmm0, %xmm0
vmovdqa %xmm0, %xmm15
vpaddq %xmm0, %xmm14, %xmm14
vpsrlq $63, %xmm9, %xmm0
vpaddq %xmm9, %xmm9, %xmm9
vpxor %xmm7, %xmm14, %xmm7
vpxor %xmm0, %xmm9, %xmm9
vpsrlq $63, %xmm7, %xmm0
vpaddq %xmm7, %xmm7, %xmm7
vpxor %xmm0, %xmm7, %xmm7
vpalignr $8, %xmm7, %xmm9, %xmm6
vpaddq 272(%rsp), %xmm6, %xmm8
vpalignr $8, %xmm9, %xmm7, %xmm7
vpaddq 288(%rsp), %xmm7, %xmm3
vpalignr $8, %xmm15, %xmm13, %xmm0
vpaddq %xmm12, %xmm8, %xmm12
vpalignr $8, %xmm13, %xmm15, %xmm15
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm15, %xmm12, %xmm15
vpshufd $177, %xmm15, %xmm15
vpaddq %xmm15, %xmm14, %xmm14
vpxor %xmm0, %xmm11, %xmm0
vpxor %xmm6, %xmm14, %xmm6
vpshufd $177, %xmm0, %xmm9
vpshufb %xmm5, %xmm6, %xmm6
vpaddq %xmm9, %xmm10, %xmm10
vpaddq 304(%rsp), %xmm6, %xmm8
vpxor %xmm7, %xmm10, %xmm7
vpshufb %xmm5, %xmm7, %xmm7
vpaddq 320(%rsp), %xmm7, %xmm3
vpaddq %xmm12, %xmm8, %xmm12
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm15, %xmm12, %xmm15
vpshufb %xmm4, %xmm15, %xmm15
vpaddq %xmm15, %xmm14, %xmm14
vpxor %xmm9, %xmm11, %xmm9
vpxor %xmm6, %xmm14, %xmm6
vpshufb %xmm4, %xmm9, %xmm9
vpsrlq $63, %xmm6, %xmm3
vpaddq %xmm9, %xmm10, %xmm10
vpaddq %xmm6, %xmm6, %xmm6
vpxor %xmm7, %xmm10, %xmm7
vpalignr $8, %xmm9, %xmm15, %xmm1
vpxor %xmm3, %xmm6, %xmm0
vpsrlq $63, %xmm7, %xmm3
vpaddq %xmm7, %xmm7, %xmm7
vpxor %xmm3, %xmm7, %xmm7
vpalignr $8, %xmm0, %xmm7, %xmm6
vpaddq 112(%rsp), %xmm6, %xmm8
vpalignr $8, %xmm7, %xmm0, %xmm7
vpaddq 128(%rsp), %xmm7, %xmm3
vpaddq %xmm12, %xmm8, %xmm12
vpalignr $8, %xmm15, %xmm9, %xmm0
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm1, %xmm12, %xmm1
vpshufd $177, %xmm1, %xmm1
vpaddq %xmm1, %xmm10, %xmm10
vpxor %xmm0, %xmm11, %xmm0
vpxor %xmm6, %xmm10, %xmm6
vpshufd $177, %xmm0, %xmm0
vpshufb %xmm5, %xmm6, %xmm6
vpaddq 336(%rsp), %xmm6, %xmm8
vpaddq %xmm0, %xmm14, %xmm14
vpxor %xmm7, %xmm14, %xmm7
vpshufb %xmm5, %xmm7, %xmm7
vpaddq 144(%rsp), %xmm7, %xmm3
vpaddq %xmm12, %xmm8, %xmm12
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm1, %xmm12, %xmm1
vpshufb %xmm4, %xmm1, %xmm1
vpaddq %xmm1, %xmm10, %xmm10
vmovdqa %xmm1, %xmm2
vpxor %xmm6, %xmm10, %xmm6
vpxor %xmm0, %xmm11, %xmm0
vpsrlq $63, %xmm6, %xmm1
vpshufb %xmm4, %xmm0, %xmm0
vpaddq %xmm6, %xmm6, %xmm6
vpaddq %xmm0, %xmm14, %xmm14
vmovdqa %xmm0, %xmm13
vpxor %xmm7, %xmm14, %xmm7
vpxor %xmm1, %xmm6, %xmm0
vpsrlq $63, %xmm7, %xmm1
vpaddq %xmm7, %xmm7, %xmm7
vpxor %xmm1, %xmm7, %xmm7
vpalignr $8, %xmm7, %xmm0, %xmm6
vpaddq 160(%rsp), %xmm6, %xmm8
vpalignr $8, %xmm0, %xmm7, %xmm7
vpaddq 176(%rsp), %xmm7, %xmm3
vpalignr $8, %xmm13, %xmm2, %xmm0
vpaddq %xmm12, %xmm8, %xmm12
vpalignr $8, %xmm2, %xmm13, %xmm13
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm13, %xmm12, %xmm13
vpshufd $177, %xmm13, %xmm13
vpaddq %xmm13, %xmm14, %xmm14
vpxor %xmm0, %xmm11, %xmm0
vpxor %xmm6, %xmm14, %xmm6
vpshufd $177, %xmm0, %xmm9
vpshufb %xmm5, %xmm6, %xmm6
vpaddq %xmm9, %xmm10, %xmm10
vpaddq 192(%rsp), %xmm6, %xmm8
vpxor %xmm7, %xmm10, %xmm7
vpshufb %xmm5, %xmm7, %xmm7
vpaddq 208(%rsp), %xmm7, %xmm3
vpaddq %xmm12, %xmm8, %xmm12
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm13, %xmm12, %xmm13
vpshufb %xmm4, %xmm13, %xmm13
vpaddq %xmm13, %xmm14, %xmm14
vpxor %xmm9, %xmm11, %xmm9
vpxor %xmm6, %xmm14, %xmm6
vpshufb %xmm4, %xmm9, %xmm9
vpsrlq $63, %xmm6, %xmm1
vpaddq %xmm9, %xmm10, %xmm10
vpaddq %xmm6, %xmm6, %xmm6
vpxor %xmm7, %xmm10, %xmm7
vpalignr $8, %xmm9, %xmm13, %xmm15
vpxor %xmm1, %xmm6, %xmm0
vpsrlq $63, %xmm7, %xmm1
vpaddq %xmm7, %xmm7, %xmm7
vpxor %xmm1, %xmm7, %xmm7
vpalignr $8, %xmm0, %xmm7, %xmm6
vpaddq 224(%rsp), %xmm6, %xmm8
vpalignr $8, %xmm7, %xmm0, %xmm7
vpaddq 352(%rsp), %xmm7, %xmm3
vpaddq %xmm12, %xmm8, %xmm12
vpalignr $8, %xmm13, %xmm9, %xmm0
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm15, %xmm12, %xmm15
vpshufd $177, %xmm15, %xmm15
vpaddq %xmm15, %xmm10, %xmm10
vpxor %xmm0, %xmm11, %xmm0
vpxor %xmm6, %xmm10, %xmm6
vpshufd $177, %xmm0, %xmm0
vpshufb %xmm5, %xmm6, %xmm6
vpaddq 368(%rsp), %xmm6, %xmm8
vpaddq %xmm0, %xmm14, %xmm14
vpxor %xmm7, %xmm14, %xmm7
vpshufb %xmm5, %xmm7, %xmm5
vpaddq 96(%rsp), %xmm5, %xmm3
vmovaps 416(%rsp), %xmm7
vpaddq %xmm12, %xmm8, %xmm12
vpaddq %xmm11, %xmm3, %xmm11
vpxor %xmm15, %xmm12, %xmm15
vpshufb %xmm4, %xmm15, %xmm15
vpaddq %xmm15, %xmm10, %xmm10
vpxor %xmm0, %xmm11, %xmm0
vpxor %xmm6, %xmm10, %xmm6
vpshufb %xmm4, %xmm0, %xmm4
vpsrlq $63, %xmm6, %xmm0
vpaddq %xmm4, %xmm14, %xmm14
vpaddq %xmm6, %xmm6, %xmm6
vpalignr $8, %xmm4, %xmm15, %xmm2
vpxor %xmm10, %xmm11, %xmm11
vpxor %xmm0, %xmm6, %xmm6
vpxor %xmm5, %xmm14, %xmm5
vpsrlq $63, %xmm5, %xmm0
vpaddq %xmm5, %xmm5, %xmm5
vpalignr $8, %xmm15, %xmm4, %xmm1
vpxor %xmm0, %xmm5, %xmm5
vpxor 16(%rcx), %xmm11, %xmm11
vpxor %xmm14, %xmm12, %xmm12
vpalignr $8, %xmm5, %xmm6, %xmm0
vpxor (%rcx), %xmm12, %xmm12
vmovups %xmm11, 16(%rcx)
vmovaps 432(%rsp), %xmm8
vpalignr $8, %xmm6, %xmm5, %xmm5
vmovups %xmm12, (%rcx)
vpxor %xmm0, %xmm1, %xmm1
vmovaps 400(%rsp), %xmm6
vpxor 32(%rcx), %xmm1, %xmm1
vpxor %xmm5, %xmm2, %xmm5
vmovups %xmm1, 32(%rcx)
vpxor 48(%rcx), %xmm5, %xmm5
vmovups %xmm5, 48(%rcx)
vmovaps 448(%rsp), %xmm9
vmovaps 464(%rsp), %xmm10
vmovaps 480(%rsp), %xmm11
vmovaps 496(%rsp), %xmm12
vmovaps 512(%rsp), %xmm13
vmovaps 528(%rsp), %xmm14
vmovaps 544(%rsp), %xmm15
addq $568, %rsp
{$IF DEFINED(UNIX)}
popq %rdx
popq %rcx
{$ENDIF}
end;