/* sha3_asm.S */
/*
* Copyright (C) 2006-2026 wolfSSL Inc.
*
* This file is part of wolfSSL.
*
* wolfSSL is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* wolfSSL is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
*/
#ifdef WOLFSSL_USER_SETTINGS
#ifdef WOLFSSL_USER_SETTINGS_ASM
/*
* user_settings_asm.h is a file generated by the script user_settings_asm.sh.
* The script takes in a user_settings.h and produces user_settings_asm.h, which
* is a stripped down version of user_settings.h containing only preprocessor
* directives. This makes the header safe to include in assembly (.S) files.
*/
#include "user_settings_asm.h"
#else
/*
* Note: if user_settings.h contains any C code (e.g. a typedef or function
* prototype), including it here in an assembly (.S) file will cause an
* assembler failure. See user_settings_asm.h above.
*/
#include "user_settings.h"
#endif /* WOLFSSL_USER_SETTINGS_ASM */
#endif /* WOLFSSL_USER_SETTINGS */
#ifndef HAVE_INTEL_AVX1
#define HAVE_INTEL_AVX1
#endif /* HAVE_INTEL_AVX1 */
#ifndef NO_AVX2_SUPPORT
#ifndef HAVE_INTEL_AVX2
#define HAVE_INTEL_AVX2
#endif /* HAVE_INTEL_AVX2 */
#endif /* NO_AVX2_SUPPORT */
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_sha3_avx2_r:
.quad 0x0000000000000001,0x0000000000000001
.quad 0x0000000000000001,0x0000000000000001
.quad 0x0000000000008082,0x0000000000008082
.quad 0x0000000000008082,0x0000000000008082
.quad 0x800000000000808a,0x800000000000808a
.quad 0x800000000000808a,0x800000000000808a
.quad 0x8000000080008000,0x8000000080008000
.quad 0x8000000080008000,0x8000000080008000
.quad 0x000000000000808b,0x000000000000808b
.quad 0x000000000000808b,0x000000000000808b
.quad 0x0000000080000001,0x0000000080000001
.quad 0x0000000080000001,0x0000000080000001
.quad 0x8000000080008081,0x8000000080008081
.quad 0x8000000080008081,0x8000000080008081
.quad 0x8000000000008009,0x8000000000008009
.quad 0x8000000000008009,0x8000000000008009
.quad 0x000000000000008a,0x000000000000008a
.quad 0x000000000000008a,0x000000000000008a
.quad 0x0000000000000088,0x0000000000000088
.quad 0x0000000000000088,0x0000000000000088
.quad 0x0000000080008009,0x0000000080008009
.quad 0x0000000080008009,0x0000000080008009
.quad 0x000000008000000a,0x000000008000000a
.quad 0x000000008000000a,0x000000008000000a
.quad 0x000000008000808b,0x000000008000808b
.quad 0x000000008000808b,0x000000008000808b
.quad 0x800000000000008b,0x800000000000008b
.quad 0x800000000000008b,0x800000000000008b
.quad 0x8000000000008089,0x8000000000008089
.quad 0x8000000000008089,0x8000000000008089
.quad 0x8000000000008003,0x8000000000008003
.quad 0x8000000000008003,0x8000000000008003
.quad 0x8000000000008002,0x8000000000008002
.quad 0x8000000000008002,0x8000000000008002
.quad 0x8000000000000080,0x8000000000000080
.quad 0x8000000000000080,0x8000000000000080
.quad 0x000000000000800a,0x000000000000800a
.quad 0x000000000000800a,0x000000000000800a
.quad 0x800000008000000a,0x800000008000000a
.quad 0x800000008000000a,0x800000008000000a
.quad 0x8000000080008081,0x8000000080008081
.quad 0x8000000080008081,0x8000000080008081
.quad 0x8000000000008080,0x8000000000008080
.quad 0x8000000000008080,0x8000000000008080
.quad 0x0000000080000001,0x0000000080000001
.quad 0x0000000080000001,0x0000000080000001
.quad 0x8000000080008008,0x8000000080008008
.quad 0x8000000080008008,0x8000000080008008
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_sha3_x4_avx2_r:
.quad 0x0000000000000001,0x0000000000000001
.quad 0x0000000000000001,0x0000000000000001
.quad 0x0000000000008082,0x0000000000008082
.quad 0x0000000000008082,0x0000000000008082
.quad 0x800000000000808a,0x800000000000808a
.quad 0x800000000000808a,0x800000000000808a
.quad 0x8000000080008000,0x8000000080008000
.quad 0x8000000080008000,0x8000000080008000
.quad 0x000000000000808b,0x000000000000808b
.quad 0x000000000000808b,0x000000000000808b
.quad 0x0000000080000001,0x0000000080000001
.quad 0x0000000080000001,0x0000000080000001
.quad 0x8000000080008081,0x8000000080008081
.quad 0x8000000080008081,0x8000000080008081
.quad 0x8000000000008009,0x8000000000008009
.quad 0x8000000000008009,0x8000000000008009
.quad 0x000000000000008a,0x000000000000008a
.quad 0x000000000000008a,0x000000000000008a
.quad 0x0000000000000088,0x0000000000000088
.quad 0x0000000000000088,0x0000000000000088
.quad 0x0000000080008009,0x0000000080008009
.quad 0x0000000080008009,0x0000000080008009
.quad 0x000000008000000a,0x000000008000000a
.quad 0x000000008000000a,0x000000008000000a
.quad 0x000000008000808b,0x000000008000808b
.quad 0x000000008000808b,0x000000008000808b
.quad 0x800000000000008b,0x800000000000008b
.quad 0x800000000000008b,0x800000000000008b
.quad 0x8000000000008089,0x8000000000008089
.quad 0x8000000000008089,0x8000000000008089
.quad 0x8000000000008003,0x8000000000008003
.quad 0x8000000000008003,0x8000000000008003
.quad 0x8000000000008002,0x8000000000008002
.quad 0x8000000000008002,0x8000000000008002
.quad 0x8000000000000080,0x8000000000000080
.quad 0x8000000000000080,0x8000000000000080
.quad 0x000000000000800a,0x000000000000800a
.quad 0x000000000000800a,0x000000000000800a
.quad 0x800000008000000a,0x800000008000000a
.quad 0x800000008000000a,0x800000008000000a
.quad 0x8000000080008081,0x8000000080008081
.quad 0x8000000080008081,0x8000000080008081
.quad 0x8000000000008080,0x8000000000008080
.quad 0x8000000000008080,0x8000000000008080
.quad 0x0000000080000001,0x0000000080000001
.quad 0x0000000080000001,0x0000000080000001
.quad 0x8000000080008008,0x8000000080008008
.quad 0x8000000080008008,0x8000000080008008
#ifdef HAVE_INTEL_AVX2
#ifndef __APPLE__
.text
.globl sha3_block_bmi2
.type sha3_block_bmi2,@function
.align 16
sha3_block_bmi2:
#else
.section __TEXT,__text
.globl _sha3_block_bmi2
.p2align 4
_sha3_block_bmi2:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq (%rdi), %rsi
addq $0x60, %rdi
# Round 0
movq %rsi, %r10
movq -88(%rdi), %r11
movq -80(%rdi), %r12
movq -72(%rdi), %r13
movq -64(%rdi), %r14
xorq -56(%rdi), %r10
xorq -48(%rdi), %r11
xorq -40(%rdi), %r12
xorq -32(%rdi), %r13
xorq -24(%rdi), %r14
xorq -16(%rdi), %r10
xorq -8(%rdi), %r11
xorq (%rdi), %r12
xorq 8(%rdi), %r13
xorq 16(%rdi), %r14
xorq 24(%rdi), %r10
xorq 32(%rdi), %r11
xorq 40(%rdi), %r12
xorq 48(%rdi), %r13
xorq 56(%rdi), %r14
xorq 64(%rdi), %r10
xorq 72(%rdi), %r11
xorq 80(%rdi), %r12
xorq 88(%rdi), %r13
xorq 96(%rdi), %r14
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq -48(%rdi), %r11
movq (%rdi), %r12
movq 48(%rdi), %r13
movq 96(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -48(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, (%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 48(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, 96(%rdi)
# XOR in constant
xorq $0x01, %rsi
# Row 1
movq -72(%rdi), %r10
movq -24(%rdi), %r11
movq -16(%rdi), %r12
movq 32(%rdi), %r13
movq 80(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -24(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -16(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 32(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 80(%rdi)
movq %r13, -72(%rdi)
# Row 2
movq -88(%rdi), %r10
movq -40(%rdi), %r11
movq 8(%rdi), %r12
movq 56(%rdi), %r13
movq 64(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -40(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 8(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 56(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 64(%rdi)
movq %r13, -88(%rdi)
# Row 3
movq -64(%rdi), %r10
movq -56(%rdi), %r11
movq -8(%rdi), %r12
movq 40(%rdi), %r13
movq 88(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -56(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -8(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 40(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 88(%rdi)
movq %r13, -64(%rdi)
# Row 4
xorq -80(%rdi), %rcx
xorq -32(%rdi), %r8
xorq 16(%rdi), %r9
xorq 24(%rdi), %rdx
xorq 72(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, -80(%rdi)
movq %r11, -32(%rdi)
movq %r12, 16(%rdi)
movq %r13, 24(%rdi)
movq %r14, 72(%rdi)
# Round 1
xorq %rsi, %r10
xorq -88(%rdi), %r10
xorq -72(%rdi), %r10
xorq -64(%rdi), %r10
xorq -56(%rdi), %r11
xorq -48(%rdi), %r11
xorq -40(%rdi), %r11
xorq -24(%rdi), %r11
xorq -16(%rdi), %r12
xorq -8(%rdi), %r12
xorq (%rdi), %r12
xorq 8(%rdi), %r12
xorq 32(%rdi), %r13
xorq 40(%rdi), %r13
xorq 48(%rdi), %r13
xorq 56(%rdi), %r13
xorq 64(%rdi), %r14
xorq 80(%rdi), %r14
xorq 88(%rdi), %r14
xorq 96(%rdi), %r14
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq -24(%rdi), %r11
movq 8(%rdi), %r12
movq 40(%rdi), %r13
movq 72(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -24(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 8(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 40(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, 72(%rdi)
# XOR in constant
xorq $0x8082, %rsi
# Row 1
movq 48(%rdi), %r10
movq 80(%rdi), %r11
movq -88(%rdi), %r12
movq -56(%rdi), %r13
movq 16(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 80(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -88(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -56(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 16(%rdi)
movq %r13, 48(%rdi)
# Row 2
movq -48(%rdi), %r10
movq -16(%rdi), %r11
movq 56(%rdi), %r12
movq 88(%rdi), %r13
movq -80(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -16(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 56(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 88(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -80(%rdi)
movq %r13, -48(%rdi)
# Row 3
movq 96(%rdi), %r10
movq -72(%rdi), %r11
movq -40(%rdi), %r12
movq -8(%rdi), %r13
movq 24(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -72(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -40(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -8(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 24(%rdi)
movq %r13, 96(%rdi)
# Row 4
xorq (%rdi), %rcx
xorq 32(%rdi), %r8
xorq 64(%rdi), %r9
xorq -64(%rdi), %rdx
xorq -32(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, (%rdi)
movq %r11, 32(%rdi)
movq %r12, 64(%rdi)
movq %r13, -64(%rdi)
movq %r14, -32(%rdi)
# Round 2
xorq %rsi, %r10
xorq -88(%rdi), %r12
xorq -80(%rdi), %r14
xorq -72(%rdi), %r11
xorq -56(%rdi), %r13
xorq -48(%rdi), %r10
xorq -40(%rdi), %r12
xorq -24(%rdi), %r11
xorq -16(%rdi), %r11
xorq -8(%rdi), %r13
xorq 8(%rdi), %r12
xorq 16(%rdi), %r14
xorq 24(%rdi), %r14
xorq 40(%rdi), %r13
xorq 48(%rdi), %r10
xorq 56(%rdi), %r12
xorq 72(%rdi), %r14
xorq 80(%rdi), %r11
xorq 88(%rdi), %r13
xorq 96(%rdi), %r10
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq 80(%rdi), %r11
movq 56(%rdi), %r12
movq -8(%rdi), %r13
movq -32(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 80(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 56(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -8(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, -32(%rdi)
# XOR in constant
movq $0x800000000000808a, %r14
xorq %r14, %rsi
# Row 1
movq 40(%rdi), %r10
movq 16(%rdi), %r11
movq -48(%rdi), %r12
movq -72(%rdi), %r13
movq 64(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 16(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -48(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -72(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 64(%rdi)
movq %r13, 40(%rdi)
# Row 2
movq -24(%rdi), %r10
movq -88(%rdi), %r11
movq 88(%rdi), %r12
movq 24(%rdi), %r13
movq (%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -88(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 88(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 24(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, (%rdi)
movq %r13, -24(%rdi)
# Row 3
movq 72(%rdi), %r10
movq 48(%rdi), %r11
movq -16(%rdi), %r12
movq -40(%rdi), %r13
movq -64(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 48(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -16(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -40(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -64(%rdi)
movq %r13, 72(%rdi)
# Row 4
xorq 8(%rdi), %rcx
xorq -56(%rdi), %r8
xorq -80(%rdi), %r9
xorq 96(%rdi), %rdx
xorq 32(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, 8(%rdi)
movq %r11, -56(%rdi)
movq %r12, -80(%rdi)
movq %r13, 96(%rdi)
movq %r14, 32(%rdi)
# Round 3
xorq %rsi, %r10
xorq -88(%rdi), %r11
xorq -72(%rdi), %r13
xorq -64(%rdi), %r14
xorq -48(%rdi), %r12
xorq -40(%rdi), %r13
xorq -32(%rdi), %r14
xorq -24(%rdi), %r10
xorq -16(%rdi), %r12
xorq -8(%rdi), %r13
xorq (%rdi), %r14
xorq 16(%rdi), %r11
xorq 24(%rdi), %r13
xorq 40(%rdi), %r10
xorq 48(%rdi), %r11
xorq 56(%rdi), %r12
xorq 64(%rdi), %r14
xorq 72(%rdi), %r10
xorq 80(%rdi), %r11
xorq 88(%rdi), %r12
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq 16(%rdi), %r11
movq 88(%rdi), %r12
movq -40(%rdi), %r13
movq 32(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 16(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 88(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -40(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, 32(%rdi)
# XOR in constant
movq $0x8000000080008000, %r14
xorq %r14, %rsi
# Row 1
movq -8(%rdi), %r10
movq 64(%rdi), %r11
movq -24(%rdi), %r12
movq 48(%rdi), %r13
movq -80(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 64(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -24(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 48(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -80(%rdi)
movq %r13, -8(%rdi)
# Row 2
movq 80(%rdi), %r10
movq -48(%rdi), %r11
movq 24(%rdi), %r12
movq -64(%rdi), %r13
movq 8(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -48(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 24(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -64(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 8(%rdi)
movq %r13, 80(%rdi)
# Row 3
movq -32(%rdi), %r10
movq 40(%rdi), %r11
movq -88(%rdi), %r12
movq -16(%rdi), %r13
movq 96(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 40(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -88(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -16(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 96(%rdi)
movq %r13, -32(%rdi)
# Row 4
xorq 56(%rdi), %rcx
xorq -72(%rdi), %r8
xorq (%rdi), %r9
xorq 72(%rdi), %rdx
xorq -56(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, 56(%rdi)
movq %r11, -72(%rdi)
movq %r12, (%rdi)
movq %r13, 72(%rdi)
movq %r14, -56(%rdi)
# Round 4
xorq %rsi, %r10
xorq -88(%rdi), %r12
xorq -80(%rdi), %r14
xorq -64(%rdi), %r13
xorq -48(%rdi), %r11
xorq -40(%rdi), %r13
xorq -32(%rdi), %r10
xorq -24(%rdi), %r12
xorq -16(%rdi), %r13
xorq -8(%rdi), %r10
xorq 8(%rdi), %r14
xorq 16(%rdi), %r11
xorq 24(%rdi), %r12
xorq 32(%rdi), %r14
xorq 40(%rdi), %r11
xorq 48(%rdi), %r13
xorq 64(%rdi), %r11
xorq 80(%rdi), %r10
xorq 88(%rdi), %r12
xorq 96(%rdi), %r14
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq 64(%rdi), %r11
movq 24(%rdi), %r12
movq -16(%rdi), %r13
movq -56(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 64(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 24(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -16(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, -56(%rdi)
# XOR in constant
xorq $0x808b, %rsi
# Row 1
movq -40(%rdi), %r10
movq -80(%rdi), %r11
movq 80(%rdi), %r12
movq 40(%rdi), %r13
movq (%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -80(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 80(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 40(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, (%rdi)
movq %r13, -40(%rdi)
# Row 2
movq 16(%rdi), %r10
movq -24(%rdi), %r11
movq -64(%rdi), %r12
movq 96(%rdi), %r13
movq 56(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -24(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -64(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 96(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 56(%rdi)
movq %r13, 16(%rdi)
# Row 3
movq 32(%rdi), %r10
movq -8(%rdi), %r11
movq -48(%rdi), %r12
movq -88(%rdi), %r13
movq 72(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -8(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -48(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -88(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 72(%rdi)
movq %r13, 32(%rdi)
# Row 4
xorq 88(%rdi), %rcx
xorq 48(%rdi), %r8
xorq 8(%rdi), %r9
xorq -32(%rdi), %rdx
xorq -72(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, 88(%rdi)
movq %r11, 48(%rdi)
movq %r12, 8(%rdi)
movq %r13, -32(%rdi)
movq %r14, -72(%rdi)
# Round 5
xorq %rsi, %r10
xorq -88(%rdi), %r13
xorq -80(%rdi), %r11
xorq -64(%rdi), %r12
xorq -56(%rdi), %r14
xorq -48(%rdi), %r12
xorq -40(%rdi), %r10
xorq -24(%rdi), %r11
xorq -16(%rdi), %r13
xorq -8(%rdi), %r11
xorq (%rdi), %r14
xorq 16(%rdi), %r10
xorq 24(%rdi), %r12
xorq 32(%rdi), %r10
xorq 40(%rdi), %r13
xorq 56(%rdi), %r14
xorq 64(%rdi), %r11
xorq 72(%rdi), %r14
xorq 80(%rdi), %r12
xorq 96(%rdi), %r13
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq -80(%rdi), %r11
movq -64(%rdi), %r12
movq -88(%rdi), %r13
movq -72(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -80(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -64(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -88(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, -72(%rdi)
# XOR in constant
movq $0x80000001, %r14
xorq %r14, %rsi
# Row 1
movq -16(%rdi), %r10
movq (%rdi), %r11
movq 16(%rdi), %r12
movq -8(%rdi), %r13
movq 8(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, (%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 16(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -8(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 8(%rdi)
movq %r13, -16(%rdi)
# Row 2
movq 64(%rdi), %r10
movq 80(%rdi), %r11
movq 96(%rdi), %r12
movq 72(%rdi), %r13
movq 88(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 80(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 96(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 72(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 88(%rdi)
movq %r13, 64(%rdi)
# Row 3
movq -56(%rdi), %r10
movq -40(%rdi), %r11
movq -24(%rdi), %r12
movq -48(%rdi), %r13
movq -32(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -40(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -24(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -48(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -32(%rdi)
movq %r13, -56(%rdi)
# Row 4
xorq 24(%rdi), %rcx
xorq 40(%rdi), %r8
xorq 56(%rdi), %r9
xorq 32(%rdi), %rdx
xorq 48(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, 24(%rdi)
movq %r11, 40(%rdi)
movq %r12, 56(%rdi)
movq %r13, 32(%rdi)
movq %r14, 48(%rdi)
# Round 6
xorq %rsi, %r10
xorq -88(%rdi), %r13
xorq -80(%rdi), %r11
xorq -72(%rdi), %r14
xorq -64(%rdi), %r12
xorq -56(%rdi), %r10
xorq -48(%rdi), %r13
xorq -40(%rdi), %r11
xorq -32(%rdi), %r14
xorq -24(%rdi), %r12
xorq -16(%rdi), %r10
xorq -8(%rdi), %r13
xorq (%rdi), %r11
xorq 8(%rdi), %r14
xorq 16(%rdi), %r12
xorq 64(%rdi), %r10
xorq 72(%rdi), %r13
xorq 80(%rdi), %r11
xorq 88(%rdi), %r14
xorq 96(%rdi), %r12
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq (%rdi), %r11
movq 96(%rdi), %r12
movq -48(%rdi), %r13
movq 48(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, (%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 96(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -48(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, 48(%rdi)
# XOR in constant
movq $0x8000000080008081, %r14
xorq %r14, %rsi
# Row 1
movq -88(%rdi), %r10
movq 8(%rdi), %r11
movq 64(%rdi), %r12
movq -40(%rdi), %r13
movq 56(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 8(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 64(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -40(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 56(%rdi)
movq %r13, -88(%rdi)
# Row 2
movq -80(%rdi), %r10
movq 16(%rdi), %r11
movq 72(%rdi), %r12
movq -32(%rdi), %r13
movq 24(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 16(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 72(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -32(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 24(%rdi)
movq %r13, -80(%rdi)
# Row 3
movq -72(%rdi), %r10
movq -16(%rdi), %r11
movq 80(%rdi), %r12
movq -24(%rdi), %r13
movq 32(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -16(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 80(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -24(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 32(%rdi)
movq %r13, -72(%rdi)
# Row 4
xorq -64(%rdi), %rcx
xorq -8(%rdi), %r8
xorq 88(%rdi), %r9
xorq -56(%rdi), %rdx
xorq 40(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, -64(%rdi)
movq %r11, -8(%rdi)
movq %r12, 88(%rdi)
movq %r13, -56(%rdi)
movq %r14, 40(%rdi)
# Round 7
xorq %rsi, %r10
xorq -88(%rdi), %r10
xorq -80(%rdi), %r10
xorq -72(%rdi), %r10
xorq -48(%rdi), %r13
xorq -40(%rdi), %r13
xorq -32(%rdi), %r13
xorq -24(%rdi), %r13
xorq -16(%rdi), %r11
xorq (%rdi), %r11
xorq 8(%rdi), %r11
xorq 16(%rdi), %r11
xorq 24(%rdi), %r14
xorq 32(%rdi), %r14
xorq 48(%rdi), %r14
xorq 56(%rdi), %r14
xorq 64(%rdi), %r12
xorq 72(%rdi), %r12
xorq 80(%rdi), %r12
xorq 96(%rdi), %r12
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq 8(%rdi), %r11
movq 72(%rdi), %r12
movq -24(%rdi), %r13
movq 40(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 8(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 72(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -24(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, 40(%rdi)
# XOR in constant
movq $0x8000000000008009, %r14
xorq %r14, %rsi
# Row 1
movq -48(%rdi), %r10
movq 56(%rdi), %r11
movq -80(%rdi), %r12
movq -16(%rdi), %r13
movq 88(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 56(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -80(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -16(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 88(%rdi)
movq %r13, -48(%rdi)
# Row 2
movq (%rdi), %r10
movq 64(%rdi), %r11
movq -32(%rdi), %r12
movq 32(%rdi), %r13
movq -64(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 64(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -32(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 32(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -64(%rdi)
movq %r13, (%rdi)
# Row 3
movq 48(%rdi), %r10
movq -88(%rdi), %r11
movq 16(%rdi), %r12
movq 80(%rdi), %r13
movq -56(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -88(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 16(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 80(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -56(%rdi)
movq %r13, 48(%rdi)
# Row 4
xorq 96(%rdi), %rcx
xorq -40(%rdi), %r8
xorq 24(%rdi), %r9
xorq -72(%rdi), %rdx
xorq -8(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, 96(%rdi)
movq %r11, -40(%rdi)
movq %r12, 24(%rdi)
movq %r13, -72(%rdi)
movq %r14, -8(%rdi)
# Round 8
xorq %rsi, %r10
xorq -88(%rdi), %r11
xorq -80(%rdi), %r12
xorq -64(%rdi), %r14
xorq -56(%rdi), %r14
xorq -48(%rdi), %r10
xorq -32(%rdi), %r12
xorq -24(%rdi), %r13
xorq -16(%rdi), %r13
xorq (%rdi), %r10
xorq 8(%rdi), %r11
xorq 16(%rdi), %r12
xorq 32(%rdi), %r13
xorq 40(%rdi), %r14
xorq 48(%rdi), %r10
xorq 56(%rdi), %r11
xorq 64(%rdi), %r11
xorq 72(%rdi), %r12
xorq 80(%rdi), %r13
xorq 88(%rdi), %r14
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq 56(%rdi), %r11
movq -32(%rdi), %r12
movq 80(%rdi), %r13
movq -8(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 56(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -32(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 80(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, -8(%rdi)
# XOR in constant
xorq $0x8a, %rsi
# Row 1
movq -24(%rdi), %r10
movq 88(%rdi), %r11
movq (%rdi), %r12
movq -88(%rdi), %r13
movq 24(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 88(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, (%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -88(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 24(%rdi)
movq %r13, -24(%rdi)
# Row 2
movq 8(%rdi), %r10
movq -80(%rdi), %r11
movq 32(%rdi), %r12
movq -56(%rdi), %r13
movq 96(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -80(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 32(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -56(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 96(%rdi)
movq %r13, 8(%rdi)
# Row 3
movq 40(%rdi), %r10
movq -48(%rdi), %r11
movq 64(%rdi), %r12
movq 16(%rdi), %r13
movq -72(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -48(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 64(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 16(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -72(%rdi)
movq %r13, 40(%rdi)
# Row 4
xorq 72(%rdi), %rcx
xorq -16(%rdi), %r8
xorq -64(%rdi), %r9
xorq 48(%rdi), %rdx
xorq -40(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, 72(%rdi)
movq %r11, -16(%rdi)
movq %r12, -64(%rdi)
movq %r13, 48(%rdi)
movq %r14, -40(%rdi)
# Round 9
xorq %rsi, %r10
xorq -88(%rdi), %r13
xorq -80(%rdi), %r11
xorq -72(%rdi), %r14
xorq -56(%rdi), %r13
xorq -48(%rdi), %r11
xorq -32(%rdi), %r12
xorq -24(%rdi), %r10
xorq -8(%rdi), %r14
xorq (%rdi), %r12
xorq 8(%rdi), %r10
xorq 16(%rdi), %r13
xorq 24(%rdi), %r14
xorq 32(%rdi), %r12
xorq 40(%rdi), %r10
xorq 56(%rdi), %r11
xorq 64(%rdi), %r12
xorq 80(%rdi), %r13
xorq 88(%rdi), %r11
xorq 96(%rdi), %r14
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq 88(%rdi), %r11
movq 32(%rdi), %r12
movq 16(%rdi), %r13
movq -40(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 88(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 32(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 16(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, -40(%rdi)
# XOR in constant
xorq $0x88, %rsi
# Row 1
movq 80(%rdi), %r10
movq 24(%rdi), %r11
movq 8(%rdi), %r12
movq -48(%rdi), %r13
movq -64(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 24(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 8(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -48(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -64(%rdi)
movq %r13, 80(%rdi)
# Row 2
movq 56(%rdi), %r10
movq (%rdi), %r11
movq -56(%rdi), %r12
movq -72(%rdi), %r13
movq 72(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, (%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -56(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -72(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 72(%rdi)
movq %r13, 56(%rdi)
# Row 3
movq -8(%rdi), %r10
movq -24(%rdi), %r11
movq -80(%rdi), %r12
movq 64(%rdi), %r13
movq 48(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -24(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -80(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 64(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 48(%rdi)
movq %r13, -8(%rdi)
# Row 4
xorq -32(%rdi), %rcx
xorq -88(%rdi), %r8
xorq 96(%rdi), %r9
xorq 40(%rdi), %rdx
xorq -16(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, -32(%rdi)
movq %r11, -88(%rdi)
movq %r12, 96(%rdi)
movq %r13, 40(%rdi)
movq %r14, -16(%rdi)
# Round 10
xorq %rsi, %r10
xorq -80(%rdi), %r12
xorq -72(%rdi), %r13
xorq -64(%rdi), %r14
xorq -56(%rdi), %r12
xorq -48(%rdi), %r13
xorq -40(%rdi), %r14
xorq -24(%rdi), %r11
xorq -8(%rdi), %r10
xorq (%rdi), %r11
xorq 8(%rdi), %r12
xorq 16(%rdi), %r13
xorq 24(%rdi), %r11
xorq 32(%rdi), %r12
xorq 48(%rdi), %r14
xorq 56(%rdi), %r10
xorq 64(%rdi), %r13
xorq 72(%rdi), %r14
xorq 80(%rdi), %r10
xorq 88(%rdi), %r11
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq 24(%rdi), %r11
movq -56(%rdi), %r12
movq 64(%rdi), %r13
movq -16(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 24(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -56(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 64(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, -16(%rdi)
# XOR in constant
movq $0x80008009, %r14
xorq %r14, %rsi
# Row 1
movq 16(%rdi), %r10
movq -64(%rdi), %r11
movq 56(%rdi), %r12
movq -24(%rdi), %r13
movq 96(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -64(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 56(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -24(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 96(%rdi)
movq %r13, 16(%rdi)
# Row 2
movq 88(%rdi), %r10
movq 8(%rdi), %r11
movq -72(%rdi), %r12
movq 48(%rdi), %r13
movq -32(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 8(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -72(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 48(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -32(%rdi)
movq %r13, 88(%rdi)
# Row 3
movq -40(%rdi), %r10
movq 80(%rdi), %r11
movq (%rdi), %r12
movq -80(%rdi), %r13
movq 40(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 80(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, (%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -80(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 40(%rdi)
movq %r13, -40(%rdi)
# Row 4
xorq 32(%rdi), %rcx
xorq -48(%rdi), %r8
xorq 72(%rdi), %r9
xorq -8(%rdi), %rdx
xorq -88(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, 32(%rdi)
movq %r11, -48(%rdi)
movq %r12, 72(%rdi)
movq %r13, -8(%rdi)
movq %r14, -88(%rdi)
# Round 11
xorq %rsi, %r10
xorq -80(%rdi), %r13
xorq -72(%rdi), %r12
xorq -64(%rdi), %r11
xorq -56(%rdi), %r12
xorq -40(%rdi), %r10
xorq -32(%rdi), %r14
xorq -24(%rdi), %r13
xorq -16(%rdi), %r14
xorq (%rdi), %r12
xorq 8(%rdi), %r11
xorq 16(%rdi), %r10
xorq 24(%rdi), %r11
xorq 40(%rdi), %r14
xorq 48(%rdi), %r13
xorq 56(%rdi), %r12
xorq 64(%rdi), %r13
xorq 80(%rdi), %r11
xorq 88(%rdi), %r10
xorq 96(%rdi), %r14
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq -64(%rdi), %r11
movq -72(%rdi), %r12
movq -80(%rdi), %r13
movq -88(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -64(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -72(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -80(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, -88(%rdi)
# XOR in constant
movq $0x8000000a, %r14
xorq %r14, %rsi
# Row 1
movq 64(%rdi), %r10
movq 96(%rdi), %r11
movq 88(%rdi), %r12
movq 80(%rdi), %r13
movq 72(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 96(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 88(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 80(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 72(%rdi)
movq %r13, 64(%rdi)
# Row 2
movq 24(%rdi), %r10
movq 56(%rdi), %r11
movq 48(%rdi), %r12
movq 40(%rdi), %r13
movq 32(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 56(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 48(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 40(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 32(%rdi)
movq %r13, 24(%rdi)
# Row 3
movq -16(%rdi), %r10
movq 16(%rdi), %r11
movq 8(%rdi), %r12
movq (%rdi), %r13
movq -8(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 16(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 8(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, (%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -8(%rdi)
movq %r13, -16(%rdi)
# Row 4
xorq -56(%rdi), %rcx
xorq -24(%rdi), %r8
xorq -32(%rdi), %r9
xorq -40(%rdi), %rdx
xorq -48(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, -56(%rdi)
movq %r11, -24(%rdi)
movq %r12, -32(%rdi)
movq %r13, -40(%rdi)
movq %r14, -48(%rdi)
# Round 12
xorq %rsi, %r10
xorq -88(%rdi), %r14
xorq -80(%rdi), %r13
xorq -72(%rdi), %r12
xorq -64(%rdi), %r11
xorq -16(%rdi), %r10
xorq -8(%rdi), %r14
xorq (%rdi), %r13
xorq 8(%rdi), %r12
xorq 16(%rdi), %r11
xorq 24(%rdi), %r10
xorq 32(%rdi), %r14
xorq 40(%rdi), %r13
xorq 48(%rdi), %r12
xorq 56(%rdi), %r11
xorq 64(%rdi), %r10
xorq 72(%rdi), %r14
xorq 80(%rdi), %r13
xorq 88(%rdi), %r12
xorq 96(%rdi), %r11
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq 96(%rdi), %r11
movq 48(%rdi), %r12
movq (%rdi), %r13
movq -48(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 96(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 48(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, (%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, -48(%rdi)
# XOR in constant
movq $0x8000808b, %r14
xorq %r14, %rsi
# Row 1
movq -80(%rdi), %r10
movq 72(%rdi), %r11
movq 24(%rdi), %r12
movq 16(%rdi), %r13
movq -32(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 72(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 24(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 16(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -32(%rdi)
movq %r13, -80(%rdi)
# Row 2
movq -64(%rdi), %r10
movq 88(%rdi), %r11
movq 40(%rdi), %r12
movq -8(%rdi), %r13
movq -56(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 88(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 40(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -8(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -56(%rdi)
movq %r13, -64(%rdi)
# Row 3
movq -88(%rdi), %r10
movq 64(%rdi), %r11
movq 56(%rdi), %r12
movq 8(%rdi), %r13
movq -40(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 64(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 56(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 8(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -40(%rdi)
movq %r13, -88(%rdi)
# Row 4
xorq -72(%rdi), %rcx
xorq 80(%rdi), %r8
xorq 32(%rdi), %r9
xorq -16(%rdi), %rdx
xorq -24(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, -72(%rdi)
movq %r11, 80(%rdi)
movq %r12, 32(%rdi)
movq %r13, -16(%rdi)
movq %r14, -24(%rdi)
# Round 13
xorq %rsi, %r10
xorq -88(%rdi), %r10
xorq -80(%rdi), %r10
xorq -64(%rdi), %r10
xorq -56(%rdi), %r14
xorq -48(%rdi), %r14
xorq -40(%rdi), %r14
xorq -32(%rdi), %r14
xorq -8(%rdi), %r13
xorq (%rdi), %r13
xorq 8(%rdi), %r13
xorq 16(%rdi), %r13
xorq 24(%rdi), %r12
xorq 40(%rdi), %r12
xorq 48(%rdi), %r12
xorq 56(%rdi), %r12
xorq 64(%rdi), %r11
xorq 72(%rdi), %r11
xorq 88(%rdi), %r11
xorq 96(%rdi), %r11
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq 72(%rdi), %r11
movq 40(%rdi), %r12
movq 8(%rdi), %r13
movq -24(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 72(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 40(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 8(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, -24(%rdi)
# XOR in constant
movq $0x800000000000008b, %r14
xorq %r14, %rsi
# Row 1
movq (%rdi), %r10
movq -32(%rdi), %r11
movq -64(%rdi), %r12
movq 64(%rdi), %r13
movq 32(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -32(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -64(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 64(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 32(%rdi)
movq %r13, (%rdi)
# Row 2
movq 96(%rdi), %r10
movq 24(%rdi), %r11
movq -8(%rdi), %r12
movq -40(%rdi), %r13
movq -72(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 24(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -8(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -40(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -72(%rdi)
movq %r13, 96(%rdi)
# Row 3
movq -48(%rdi), %r10
movq -80(%rdi), %r11
movq 88(%rdi), %r12
movq 56(%rdi), %r13
movq -16(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -80(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 88(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 56(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -16(%rdi)
movq %r13, -48(%rdi)
# Row 4
xorq 48(%rdi), %rcx
xorq 16(%rdi), %r8
xorq -56(%rdi), %r9
xorq -88(%rdi), %rdx
xorq 80(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, 48(%rdi)
movq %r11, 16(%rdi)
movq %r12, -56(%rdi)
movq %r13, -88(%rdi)
movq %r14, 80(%rdi)
# Round 14
xorq %rsi, %r10
xorq -80(%rdi), %r11
xorq -72(%rdi), %r14
xorq -64(%rdi), %r12
xorq -48(%rdi), %r10
xorq -40(%rdi), %r13
xorq -32(%rdi), %r11
xorq -24(%rdi), %r14
xorq -16(%rdi), %r14
xorq -8(%rdi), %r12
xorq (%rdi), %r10
xorq 8(%rdi), %r13
xorq 24(%rdi), %r11
xorq 32(%rdi), %r14
xorq 40(%rdi), %r12
xorq 56(%rdi), %r13
xorq 64(%rdi), %r13
xorq 72(%rdi), %r11
xorq 88(%rdi), %r12
xorq 96(%rdi), %r10
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq -32(%rdi), %r11
movq -8(%rdi), %r12
movq 56(%rdi), %r13
movq 80(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -32(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -8(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 56(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, 80(%rdi)
# XOR in constant
movq $0x8000000000008089, %r14
xorq %r14, %rsi
# Row 1
movq 8(%rdi), %r10
movq 32(%rdi), %r11
movq 96(%rdi), %r12
movq -80(%rdi), %r13
movq -56(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 32(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 96(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -80(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -56(%rdi)
movq %r13, 8(%rdi)
# Row 2
movq 72(%rdi), %r10
movq -64(%rdi), %r11
movq -40(%rdi), %r12
movq -16(%rdi), %r13
movq 48(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -64(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -40(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -16(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 48(%rdi)
movq %r13, 72(%rdi)
# Row 3
movq -24(%rdi), %r10
movq (%rdi), %r11
movq 24(%rdi), %r12
movq 88(%rdi), %r13
movq -88(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, (%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 24(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 88(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -88(%rdi)
movq %r13, -24(%rdi)
# Row 4
xorq 40(%rdi), %rcx
xorq 64(%rdi), %r8
xorq -72(%rdi), %r9
xorq -48(%rdi), %rdx
xorq 16(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, 40(%rdi)
movq %r11, 64(%rdi)
movq %r12, -72(%rdi)
movq %r13, -48(%rdi)
movq %r14, 16(%rdi)
# Round 15
xorq %rsi, %r10
xorq -88(%rdi), %r14
xorq -80(%rdi), %r13
xorq -64(%rdi), %r11
xorq -56(%rdi), %r14
xorq -40(%rdi), %r12
xorq -32(%rdi), %r11
xorq -24(%rdi), %r10
xorq -16(%rdi), %r13
xorq -8(%rdi), %r12
xorq (%rdi), %r11
xorq 8(%rdi), %r10
xorq 24(%rdi), %r12
xorq 32(%rdi), %r11
xorq 48(%rdi), %r14
xorq 56(%rdi), %r13
xorq 72(%rdi), %r10
xorq 80(%rdi), %r14
xorq 88(%rdi), %r13
xorq 96(%rdi), %r12
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq 32(%rdi), %r11
movq -40(%rdi), %r12
movq 88(%rdi), %r13
movq 16(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 32(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -40(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 88(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, 16(%rdi)
# XOR in constant
movq $0x8000000000008003, %r14
xorq %r14, %rsi
# Row 1
movq 56(%rdi), %r10
movq -56(%rdi), %r11
movq 72(%rdi), %r12
movq (%rdi), %r13
movq -72(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -56(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 72(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, (%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -72(%rdi)
movq %r13, 56(%rdi)
# Row 2
movq -32(%rdi), %r10
movq 96(%rdi), %r11
movq -16(%rdi), %r12
movq -88(%rdi), %r13
movq 40(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 96(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -16(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -88(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 40(%rdi)
movq %r13, -32(%rdi)
# Row 3
movq 80(%rdi), %r10
movq 8(%rdi), %r11
movq -64(%rdi), %r12
movq 24(%rdi), %r13
movq -48(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 8(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -64(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 24(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -48(%rdi)
movq %r13, 80(%rdi)
# Row 4
xorq -8(%rdi), %rcx
xorq -80(%rdi), %r8
xorq 48(%rdi), %r9
xorq -24(%rdi), %rdx
xorq 64(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, -8(%rdi)
movq %r11, -80(%rdi)
movq %r12, 48(%rdi)
movq %r13, -24(%rdi)
movq %r14, 64(%rdi)
# Round 16
xorq %rsi, %r10
xorq -88(%rdi), %r13
xorq -72(%rdi), %r14
xorq -64(%rdi), %r12
xorq -56(%rdi), %r11
xorq -48(%rdi), %r14
xorq -40(%rdi), %r12
xorq -32(%rdi), %r10
xorq -16(%rdi), %r12
xorq (%rdi), %r13
xorq 8(%rdi), %r11
xorq 16(%rdi), %r14
xorq 24(%rdi), %r13
xorq 32(%rdi), %r11
xorq 40(%rdi), %r14
xorq 56(%rdi), %r10
xorq 72(%rdi), %r12
xorq 80(%rdi), %r10
xorq 88(%rdi), %r13
xorq 96(%rdi), %r11
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq -56(%rdi), %r11
movq -16(%rdi), %r12
movq 24(%rdi), %r13
movq 64(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -56(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -16(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 24(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, 64(%rdi)
# XOR in constant
movq $0x8000000000008002, %r14
xorq %r14, %rsi
# Row 1
movq 88(%rdi), %r10
movq -72(%rdi), %r11
movq -32(%rdi), %r12
movq 8(%rdi), %r13
movq 48(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -72(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -32(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 8(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 48(%rdi)
movq %r13, 88(%rdi)
# Row 2
movq 32(%rdi), %r10
movq 72(%rdi), %r11
movq -88(%rdi), %r12
movq -48(%rdi), %r13
movq -8(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 72(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -88(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -48(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -8(%rdi)
movq %r13, 32(%rdi)
# Row 3
movq 16(%rdi), %r10
movq 56(%rdi), %r11
movq 96(%rdi), %r12
movq -64(%rdi), %r13
movq -24(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 56(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 96(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -64(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -24(%rdi)
movq %r13, 16(%rdi)
# Row 4
xorq -40(%rdi), %rcx
xorq (%rdi), %r8
xorq 40(%rdi), %r9
xorq 80(%rdi), %rdx
xorq -80(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, -40(%rdi)
movq %r11, (%rdi)
movq %r12, 40(%rdi)
movq %r13, 80(%rdi)
movq %r14, -80(%rdi)
# Round 17
xorq %rsi, %r10
xorq -88(%rdi), %r12
xorq -72(%rdi), %r11
xorq -64(%rdi), %r13
xorq -56(%rdi), %r11
xorq -48(%rdi), %r13
xorq -32(%rdi), %r12
xorq -24(%rdi), %r14
xorq -16(%rdi), %r12
xorq -8(%rdi), %r14
xorq 8(%rdi), %r13
xorq 16(%rdi), %r10
xorq 24(%rdi), %r13
xorq 32(%rdi), %r10
xorq 48(%rdi), %r14
xorq 56(%rdi), %r11
xorq 64(%rdi), %r14
xorq 72(%rdi), %r11
xorq 88(%rdi), %r10
xorq 96(%rdi), %r12
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq -72(%rdi), %r11
movq -88(%rdi), %r12
movq -64(%rdi), %r13
movq -80(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -72(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -88(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -64(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, -80(%rdi)
# XOR in constant
movq $0x8000000000000080, %r14
xorq %r14, %rsi
# Row 1
movq 24(%rdi), %r10
movq 48(%rdi), %r11
movq 32(%rdi), %r12
movq 56(%rdi), %r13
movq 40(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 48(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 32(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 56(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 40(%rdi)
movq %r13, 24(%rdi)
# Row 2
movq -56(%rdi), %r10
movq -32(%rdi), %r11
movq -48(%rdi), %r12
movq -24(%rdi), %r13
movq -40(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -32(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -48(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -24(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -40(%rdi)
movq %r13, -56(%rdi)
# Row 3
movq 64(%rdi), %r10
movq 88(%rdi), %r11
movq 72(%rdi), %r12
movq 96(%rdi), %r13
movq 80(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 88(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 72(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 96(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 80(%rdi)
movq %r13, 64(%rdi)
# Row 4
xorq -16(%rdi), %rcx
xorq 8(%rdi), %r8
xorq -8(%rdi), %r9
xorq 16(%rdi), %rdx
xorq (%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, -16(%rdi)
movq %r11, 8(%rdi)
movq %r12, -8(%rdi)
movq %r13, 16(%rdi)
movq %r14, (%rdi)
# Round 18
xorq %rsi, %r10
xorq -88(%rdi), %r12
xorq -80(%rdi), %r14
xorq -72(%rdi), %r11
xorq -64(%rdi), %r13
xorq -56(%rdi), %r10
xorq -48(%rdi), %r12
xorq -40(%rdi), %r14
xorq -32(%rdi), %r11
xorq -24(%rdi), %r13
xorq 24(%rdi), %r10
xorq 32(%rdi), %r12
xorq 40(%rdi), %r14
xorq 48(%rdi), %r11
xorq 56(%rdi), %r13
xorq 64(%rdi), %r10
xorq 72(%rdi), %r12
xorq 80(%rdi), %r14
xorq 88(%rdi), %r11
xorq 96(%rdi), %r13
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq 48(%rdi), %r11
movq -48(%rdi), %r12
movq 96(%rdi), %r13
movq (%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 48(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -48(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 96(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, (%rdi)
# XOR in constant
xorq $0x800a, %rsi
# Row 1
movq -64(%rdi), %r10
movq 40(%rdi), %r11
movq -56(%rdi), %r12
movq 88(%rdi), %r13
movq -8(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 40(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -56(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 88(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -8(%rdi)
movq %r13, -64(%rdi)
# Row 2
movq -72(%rdi), %r10
movq 32(%rdi), %r11
movq -24(%rdi), %r12
movq 80(%rdi), %r13
movq -16(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 32(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -24(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 80(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -16(%rdi)
movq %r13, -72(%rdi)
# Row 3
movq -80(%rdi), %r10
movq 24(%rdi), %r11
movq -32(%rdi), %r12
movq 72(%rdi), %r13
movq 16(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 24(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -32(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 72(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 16(%rdi)
movq %r13, -80(%rdi)
# Row 4
xorq -88(%rdi), %rcx
xorq 56(%rdi), %r8
xorq -40(%rdi), %r9
xorq 64(%rdi), %rdx
xorq 8(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, -88(%rdi)
movq %r11, 56(%rdi)
movq %r12, -40(%rdi)
movq %r13, 64(%rdi)
movq %r14, 8(%rdi)
# Round 19
xorq %rsi, %r10
xorq -80(%rdi), %r10
xorq -72(%rdi), %r10
xorq -64(%rdi), %r10
xorq -56(%rdi), %r12
xorq -48(%rdi), %r12
xorq -32(%rdi), %r12
xorq -24(%rdi), %r12
xorq -16(%rdi), %r14
xorq -8(%rdi), %r14
xorq (%rdi), %r14
xorq 16(%rdi), %r14
xorq 24(%rdi), %r11
xorq 32(%rdi), %r11
xorq 40(%rdi), %r11
xorq 48(%rdi), %r11
xorq 72(%rdi), %r13
xorq 80(%rdi), %r13
xorq 88(%rdi), %r13
xorq 96(%rdi), %r13
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq 40(%rdi), %r11
movq -24(%rdi), %r12
movq 72(%rdi), %r13
movq 8(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 40(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -24(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 72(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, 8(%rdi)
# XOR in constant
movq $0x800000008000000a, %r14
xorq %r14, %rsi
# Row 1
movq 96(%rdi), %r10
movq -8(%rdi), %r11
movq -72(%rdi), %r12
movq 24(%rdi), %r13
movq -40(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -8(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -72(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 24(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -40(%rdi)
movq %r13, 96(%rdi)
# Row 2
movq 48(%rdi), %r10
movq -56(%rdi), %r11
movq 80(%rdi), %r12
movq 16(%rdi), %r13
movq -88(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -56(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 80(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 16(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -88(%rdi)
movq %r13, 48(%rdi)
# Row 3
movq (%rdi), %r10
movq -64(%rdi), %r11
movq 32(%rdi), %r12
movq -32(%rdi), %r13
movq 64(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -64(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 32(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -32(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 64(%rdi)
movq %r13, (%rdi)
# Row 4
xorq -48(%rdi), %rcx
xorq 88(%rdi), %r8
xorq -16(%rdi), %r9
xorq -80(%rdi), %rdx
xorq 56(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, -48(%rdi)
movq %r11, 88(%rdi)
movq %r12, -16(%rdi)
movq %r13, -80(%rdi)
movq %r14, 56(%rdi)
# Round 20
xorq %rsi, %r10
xorq -88(%rdi), %r14
xorq -72(%rdi), %r12
xorq -64(%rdi), %r11
xorq -56(%rdi), %r11
xorq -40(%rdi), %r14
xorq -32(%rdi), %r13
xorq -24(%rdi), %r12
xorq -8(%rdi), %r11
xorq (%rdi), %r10
xorq 8(%rdi), %r14
xorq 16(%rdi), %r13
xorq 24(%rdi), %r13
xorq 32(%rdi), %r12
xorq 40(%rdi), %r11
xorq 48(%rdi), %r10
xorq 64(%rdi), %r14
xorq 72(%rdi), %r13
xorq 80(%rdi), %r12
xorq 96(%rdi), %r10
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq -8(%rdi), %r11
movq 80(%rdi), %r12
movq -32(%rdi), %r13
movq 56(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -8(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 80(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -32(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, 56(%rdi)
# XOR in constant
movq $0x8000000080008081, %r14
xorq %r14, %rsi
# Row 1
movq 72(%rdi), %r10
movq -40(%rdi), %r11
movq 48(%rdi), %r12
movq -64(%rdi), %r13
movq -16(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -40(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 48(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -64(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -16(%rdi)
movq %r13, 72(%rdi)
# Row 2
movq 40(%rdi), %r10
movq -72(%rdi), %r11
movq 16(%rdi), %r12
movq 64(%rdi), %r13
movq -48(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -72(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 16(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 64(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -48(%rdi)
movq %r13, 40(%rdi)
# Row 3
movq 8(%rdi), %r10
movq 96(%rdi), %r11
movq -56(%rdi), %r12
movq 32(%rdi), %r13
movq -80(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 96(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -56(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 32(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -80(%rdi)
movq %r13, 8(%rdi)
# Row 4
xorq -24(%rdi), %rcx
xorq 24(%rdi), %r8
xorq -88(%rdi), %r9
xorq (%rdi), %rdx
xorq 88(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, -24(%rdi)
movq %r11, 24(%rdi)
movq %r12, -88(%rdi)
movq %r13, (%rdi)
movq %r14, 88(%rdi)
# Round 21
xorq %rsi, %r10
xorq -80(%rdi), %r14
xorq -72(%rdi), %r11
xorq -64(%rdi), %r13
xorq -56(%rdi), %r12
xorq -48(%rdi), %r14
xorq -40(%rdi), %r11
xorq -32(%rdi), %r13
xorq -16(%rdi), %r14
xorq -8(%rdi), %r11
xorq 8(%rdi), %r10
xorq 16(%rdi), %r12
xorq 32(%rdi), %r13
xorq 40(%rdi), %r10
xorq 48(%rdi), %r12
xorq 56(%rdi), %r14
xorq 64(%rdi), %r13
xorq 72(%rdi), %r10
xorq 80(%rdi), %r12
xorq 96(%rdi), %r11
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq -40(%rdi), %r11
movq 16(%rdi), %r12
movq 32(%rdi), %r13
movq 88(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -40(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 16(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 32(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, 88(%rdi)
# XOR in constant
movq $0x8000000000008080, %r14
xorq %r14, %rsi
# Row 1
movq -32(%rdi), %r10
movq -16(%rdi), %r11
movq 40(%rdi), %r12
movq 96(%rdi), %r13
movq -88(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -16(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 40(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 96(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -88(%rdi)
movq %r13, -32(%rdi)
# Row 2
movq -8(%rdi), %r10
movq 48(%rdi), %r11
movq 64(%rdi), %r12
movq -80(%rdi), %r13
movq -24(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 48(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 64(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -80(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -24(%rdi)
movq %r13, -8(%rdi)
# Row 3
movq 56(%rdi), %r10
movq 72(%rdi), %r11
movq -72(%rdi), %r12
movq -56(%rdi), %r13
movq (%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 72(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -72(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -56(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, (%rdi)
movq %r13, 56(%rdi)
# Row 4
xorq 80(%rdi), %rcx
xorq -64(%rdi), %r8
xorq -48(%rdi), %r9
xorq 8(%rdi), %rdx
xorq 24(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, 80(%rdi)
movq %r11, -64(%rdi)
movq %r12, -48(%rdi)
movq %r13, 8(%rdi)
movq %r14, 24(%rdi)
# Round 22
xorq %rsi, %r10
xorq -88(%rdi), %r14
xorq -80(%rdi), %r13
xorq -72(%rdi), %r12
xorq -56(%rdi), %r13
xorq -40(%rdi), %r11
xorq -32(%rdi), %r10
xorq -24(%rdi), %r14
xorq -16(%rdi), %r11
xorq -8(%rdi), %r10
xorq (%rdi), %r14
xorq 16(%rdi), %r12
xorq 32(%rdi), %r13
xorq 40(%rdi), %r12
xorq 48(%rdi), %r11
xorq 56(%rdi), %r10
xorq 64(%rdi), %r12
xorq 72(%rdi), %r11
xorq 88(%rdi), %r14
xorq 96(%rdi), %r13
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq -16(%rdi), %r11
movq 64(%rdi), %r12
movq -56(%rdi), %r13
movq 24(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -16(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 64(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -56(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, 24(%rdi)
# XOR in constant
movq $0x80000001, %r14
xorq %r14, %rsi
# Row 1
movq 32(%rdi), %r10
movq -88(%rdi), %r11
movq -8(%rdi), %r12
movq 72(%rdi), %r13
movq -48(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -88(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -8(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 72(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -48(%rdi)
movq %r13, 32(%rdi)
# Row 2
movq -40(%rdi), %r10
movq 40(%rdi), %r11
movq -80(%rdi), %r12
movq (%rdi), %r13
movq 80(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 40(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -80(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, (%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 80(%rdi)
movq %r13, -40(%rdi)
# Row 3
movq 88(%rdi), %r10
movq -32(%rdi), %r11
movq 48(%rdi), %r12
movq -72(%rdi), %r13
movq 8(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -32(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 48(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -72(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 8(%rdi)
movq %r13, 88(%rdi)
# Row 4
xorq 16(%rdi), %rcx
xorq 96(%rdi), %r8
xorq -24(%rdi), %r9
xorq 56(%rdi), %rdx
xorq -64(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, 16(%rdi)
movq %r11, 96(%rdi)
movq %r12, -24(%rdi)
movq %r13, 56(%rdi)
movq %r14, -64(%rdi)
# Round 23
xorq %rsi, %r10
xorq -88(%rdi), %r11
xorq -80(%rdi), %r12
xorq -72(%rdi), %r13
xorq -56(%rdi), %r13
xorq -48(%rdi), %r14
xorq -40(%rdi), %r10
xorq -32(%rdi), %r11
xorq -16(%rdi), %r11
xorq -8(%rdi), %r12
xorq (%rdi), %r13
xorq 8(%rdi), %r14
xorq 24(%rdi), %r14
xorq 32(%rdi), %r10
xorq 40(%rdi), %r11
xorq 48(%rdi), %r12
xorq 64(%rdi), %r12
xorq 72(%rdi), %r13
xorq 80(%rdi), %r14
xorq 88(%rdi), %r10
# Calc t[0..4]
rorxq $63, %r11, %rdx
rorxq $63, %r12, %rax
rorxq $63, %r13, %rcx
rorxq $63, %r14, %r8
rorxq $63, %r10, %r9
xorq %r14, %rdx
xorq %r10, %rax
xorq %r11, %rcx
xorq %r12, %r8
xorq %r13, %r9
# Row Mix
# Row 0
movq %rsi, %r10
movq -88(%rdi), %r11
movq -80(%rdi), %r12
movq -72(%rdi), %r13
movq -64(%rdi), %r14
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
rolq $44, %r11
rolq $43, %r12
rolq $21, %r13
rolq $14, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -88(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -80(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -72(%rdi)
andnq %r11, %r10, %r13
andnq %r12, %r11, %rsi
xorq %r14, %r13
xorq %r10, %rsi
movq %r13, -64(%rdi)
# XOR in constant
movq $0x8000000080008008, %r14
xorq %r14, %rsi
# Row 1
movq -56(%rdi), %r10
movq -48(%rdi), %r11
movq -40(%rdi), %r12
movq -32(%rdi), %r13
movq -24(%rdi), %r14
xorq %r8, %r10
xorq %r9, %r11
xorq %rdx, %r12
xorq %rax, %r13
xorq %rcx, %r14
rolq $28, %r10
rolq $20, %r11
rolq $3, %r12
rolq $45, %r13
rolq $61, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -48(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, -40(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, -32(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, -24(%rdi)
movq %r13, -56(%rdi)
# Row 2
movq -16(%rdi), %r10
movq -8(%rdi), %r11
movq (%rdi), %r12
movq 8(%rdi), %r13
movq 16(%rdi), %r14
xorq %rax, %r10
xorq %rcx, %r11
xorq %r8, %r12
xorq %r9, %r13
xorq %rdx, %r14
rolq $0x01, %r10
rolq $6, %r11
rolq $25, %r12
rolq $8, %r13
rolq $18, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, -8(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, (%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 8(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 16(%rdi)
movq %r13, -16(%rdi)
# Row 3
movq 24(%rdi), %r10
movq 32(%rdi), %r11
movq 40(%rdi), %r12
movq 48(%rdi), %r13
movq 56(%rdi), %r14
xorq %r9, %r10
xorq %rdx, %r11
xorq %rax, %r12
xorq %rcx, %r13
xorq %r8, %r14
rolq $27, %r10
rolq $36, %r11
rolq $10, %r12
rolq $15, %r13
rolq $56, %r14
andnq %r13, %r12, %r15
xorq %r11, %r15
movq %r15, 32(%rdi)
andnq %r14, %r13, %r15
xorq %r12, %r15
movq %r15, 40(%rdi)
andnq %r10, %r14, %r15
xorq %r13, %r15
movq %r15, 48(%rdi)
andnq %r11, %r10, %r15
andnq %r12, %r11, %r13
xorq %r14, %r15
xorq %r10, %r13
movq %r15, 56(%rdi)
movq %r13, 24(%rdi)
# Row 4
xorq 64(%rdi), %rcx
xorq 72(%rdi), %r8
xorq 80(%rdi), %r9
xorq 88(%rdi), %rdx
xorq 96(%rdi), %rax
rorxq $2, %rcx, %r10
rorxq $9, %r8, %r11
rorxq $25, %r9, %r12
rorxq $23, %rdx, %r13
rorxq $62, %rax, %r14
andnq %r12, %r11, %rdx
andnq %r13, %r12, %rax
andnq %r14, %r13, %rcx
andnq %r10, %r14, %r8
andnq %r11, %r10, %r9
xorq %rdx, %r10
xorq %rax, %r11
xorq %rcx, %r12
xorq %r8, %r13
xorq %r9, %r14
movq %r10, 64(%rdi)
movq %r11, 72(%rdi)
movq %r12, 80(%rdi)
movq %r13, 88(%rdi)
movq %r14, 96(%rdi)
movq %rsi, -96(%rdi)
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sha3_block_bmi2,.-sha3_block_bmi2
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl sha3_block_n_bmi2
.type sha3_block_n_bmi2,@function
.align 16
sha3_block_n_bmi2:
#else
.section __TEXT,__text
.globl _sha3_block_n_bmi2
.p2align 4
_sha3_block_n_bmi2:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
pushq %rbp
pushq %rcx
movq %rcx, %rbp
movq (%rdi), %rcx
addq $0x60, %rdi
L_sha3_block_n_bmi2_start:
cmpq $0x88, %rbp
je L_sha3_block_n_bmi2_load_256
cmpq $0xa8, %rbp
je L_sha3_block_n_bmi2_load_128
cmpq $0x90, %rbp
je L_sha3_block_n_bmi2_load_224
cmpq $0x68, %rbp
je L_sha3_block_n_bmi2_load_384
movq (%rsi), %r12
movq 8(%rsi), %r13
movq 16(%rsi), %r14
movq 24(%rsi), %r15
movq 32(%rsi), %rbx
movq 40(%rsi), %rax
movq 48(%rsi), %r8
movq 56(%rsi), %r9
movq 64(%rsi), %r10
xorq %rcx, %r12
xorq -88(%rdi), %r13
xorq -80(%rdi), %r14
xorq -72(%rdi), %r15
xorq -64(%rdi), %rbx
xorq -56(%rdi), %rax
xorq -48(%rdi), %r8
xorq -40(%rdi), %r9
xorq -32(%rdi), %r10
movq %r12, %rcx
movq %r13, -88(%rdi)
movq %r14, -80(%rdi)
movq %r15, -72(%rdi)
movq %rbx, -64(%rdi)
movq %rax, -56(%rdi)
movq %r8, -48(%rdi)
movq %r9, -40(%rdi)
movq %r10, -32(%rdi)
jmp L_sha3_block_n_bmi2_rounds
L_sha3_block_n_bmi2_load_128:
movq (%rsi), %r12
movq 8(%rsi), %r13
movq 16(%rsi), %r14
movq 24(%rsi), %r15
movq 32(%rsi), %rbx
xorq %rcx, %r12
xorq -88(%rdi), %r13
xorq -80(%rdi), %r14
xorq -72(%rdi), %r15
xorq -64(%rdi), %rbx
movq %r12, %rcx
movq %r13, -88(%rdi)
movq %r14, -80(%rdi)
movq %r15, -72(%rdi)
movq %rbx, -64(%rdi)
movq 40(%rsi), %rax
movq 48(%rsi), %r8
movq 56(%rsi), %r9
movq 64(%rsi), %r10
movq 72(%rsi), %r11
movq 80(%rsi), %rbp
xorq -56(%rdi), %rax
xorq -48(%rdi), %r8
xorq -40(%rdi), %r9
xorq -32(%rdi), %r10
xorq -24(%rdi), %r11
xorq -16(%rdi), %rbp
movq %rax, -56(%rdi)
movq %r8, -48(%rdi)
movq %r9, -40(%rdi)
movq %r10, -32(%rdi)
movq %r11, -24(%rdi)
movq %rbp, -16(%rdi)
movq 88(%rsi), %rax
movq 96(%rsi), %r8
movq 104(%rsi), %r9
movq 112(%rsi), %r10
movq 120(%rsi), %r11
movq 128(%rsi), %rbp
xorq -8(%rdi), %rax
xorq (%rdi), %r8
xorq 8(%rdi), %r9
xorq 16(%rdi), %r10
xorq 24(%rdi), %r11
xorq 32(%rdi), %rbp
movq %rax, -8(%rdi)
movq %r8, (%rdi)
movq %r9, 8(%rdi)
movq %r10, 16(%rdi)
movq %r11, 24(%rdi)
movq %rbp, 32(%rdi)
movq 136(%rsi), %rax
movq 144(%rsi), %r8
movq 152(%rsi), %r9
movq 160(%rsi), %r10
xorq 40(%rdi), %rax
xorq 48(%rdi), %r8
xorq 56(%rdi), %r9
xorq 64(%rdi), %r10
movq %rax, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq %r10, 64(%rdi)
jmp L_sha3_block_n_bmi2_rounds
L_sha3_block_n_bmi2_load_224:
movq 40(%rsi), %r12
movq 48(%rsi), %r13
movq 56(%rsi), %r14
movq 64(%rsi), %r15
movq 72(%rsi), %rbx
movq 80(%rsi), %rax
movq 88(%rsi), %r8
movq 96(%rsi), %r9
movq 104(%rsi), %r10
movq 112(%rsi), %r11
xorq -56(%rdi), %r12
xorq -48(%rdi), %r13
xorq -40(%rdi), %r14
xorq -32(%rdi), %r15
xorq -24(%rdi), %rbx
xorq -16(%rdi), %rax
xorq -8(%rdi), %r8
xorq (%rdi), %r9
xorq 8(%rdi), %r10
xorq 16(%rdi), %r11
movq %r12, -56(%rdi)
movq %r13, -48(%rdi)
movq %r14, -40(%rdi)
movq %r15, -32(%rdi)
movq %rbx, -24(%rdi)
movq %rax, -16(%rdi)
movq %r8, -8(%rdi)
movq %r9, (%rdi)
movq %r10, 8(%rdi)
movq %r11, 16(%rdi)
movq (%rsi), %r12
movq 8(%rsi), %r13
movq 16(%rsi), %r14
movq 24(%rsi), %r15
movq 32(%rsi), %rbx
movq 120(%rsi), %rax
movq 128(%rsi), %r8
movq 136(%rsi), %r9
xorq %rcx, %r12
xorq -88(%rdi), %r13
xorq -80(%rdi), %r14
xorq -72(%rdi), %r15
xorq -64(%rdi), %rbx
xorq 24(%rdi), %rax
xorq 32(%rdi), %r8
xorq 40(%rdi), %r9
movq %r12, %rcx
movq %r13, -88(%rdi)
movq %r14, -80(%rdi)
movq %r15, -72(%rdi)
movq %rbx, -64(%rdi)
movq %rax, 24(%rdi)
movq %r8, 32(%rdi)
movq %r9, 40(%rdi)
jmp L_sha3_block_n_bmi2_rounds
L_sha3_block_n_bmi2_load_384:
movq (%rsi), %r12
movq 8(%rsi), %r13
movq 16(%rsi), %r14
movq 24(%rsi), %r15
movq 32(%rsi), %rbx
movq 40(%rsi), %rax
movq 48(%rsi), %r8
movq 56(%rsi), %r9
movq 64(%rsi), %r10
xorq %rcx, %r12
xorq -88(%rdi), %r13
xorq -80(%rdi), %r14
xorq -72(%rdi), %r15
xorq -64(%rdi), %rbx
xorq -56(%rdi), %rax
xorq -48(%rdi), %r8
xorq -40(%rdi), %r9
xorq -32(%rdi), %r10
movq %r12, %rcx
movq %r13, -88(%rdi)
movq %r14, -80(%rdi)
movq %r15, -72(%rdi)
movq %rbx, -64(%rdi)
movq %rax, -56(%rdi)
movq %r8, -48(%rdi)
movq %r9, -40(%rdi)
movq %r10, -32(%rdi)
movq 72(%rsi), %rax
movq 80(%rsi), %r8
movq 88(%rsi), %r9
movq 96(%rsi), %r10
xorq -24(%rdi), %rax
xorq -16(%rdi), %r8
xorq -8(%rdi), %r9
xorq (%rdi), %r10
movq %rax, -24(%rdi)
movq %r8, -16(%rdi)
movq %r9, -8(%rdi)
movq %r10, (%rdi)
jmp L_sha3_block_n_bmi2_rounds
L_sha3_block_n_bmi2_load_256:
movq (%rsi), %r12
movq 8(%rsi), %r13
movq 16(%rsi), %r14
movq 24(%rsi), %r15
movq 32(%rsi), %rbx
movq 40(%rsi), %rax
movq 48(%rsi), %r8
movq 56(%rsi), %r9
movq 64(%rsi), %r10
movq 72(%rsi), %r11
movq 80(%rsi), %rbp
xorq %rcx, %r12
xorq -88(%rdi), %r13
xorq -80(%rdi), %r14
xorq -72(%rdi), %r15
xorq -64(%rdi), %rbx
xorq -56(%rdi), %rax
xorq -48(%rdi), %r8
xorq -40(%rdi), %r9
xorq -32(%rdi), %r10
xorq -24(%rdi), %r11
xorq -16(%rdi), %rbp
movq %r12, %rcx
movq %r13, -88(%rdi)
movq %r14, -80(%rdi)
movq %r15, -72(%rdi)
movq %rbx, -64(%rdi)
movq %rax, -56(%rdi)
movq %r8, -48(%rdi)
movq %r9, -40(%rdi)
movq %r10, -32(%rdi)
movq %r11, -24(%rdi)
movq %rbp, -16(%rdi)
movq 88(%rsi), %rax
movq 96(%rsi), %r8
movq 104(%rsi), %r9
movq 112(%rsi), %r10
movq 120(%rsi), %r11
movq 128(%rsi), %rbp
xorq -8(%rdi), %rax
xorq (%rdi), %r8
xorq 8(%rdi), %r9
xorq 16(%rdi), %r10
xorq 24(%rdi), %r11
xorq 32(%rdi), %rbp
movq %rax, -8(%rdi)
movq %r8, (%rdi)
movq %r9, 8(%rdi)
movq %r10, 16(%rdi)
movq %r11, 24(%rdi)
movq %rbp, 32(%rdi)
L_sha3_block_n_bmi2_rounds:
# Round 0
xorq -56(%rdi), %r12
xorq -48(%rdi), %r13
xorq -40(%rdi), %r14
xorq -32(%rdi), %r15
xorq -24(%rdi), %rbx
xorq -16(%rdi), %r12
xorq -8(%rdi), %r13
xorq (%rdi), %r14
xorq 8(%rdi), %r15
xorq 16(%rdi), %rbx
xorq 24(%rdi), %r12
xorq 32(%rdi), %r13
xorq 40(%rdi), %r14
xorq 48(%rdi), %r15
xorq 56(%rdi), %rbx
xorq 64(%rdi), %r12
xorq 72(%rdi), %r13
xorq 80(%rdi), %r14
xorq 88(%rdi), %r15
xorq 96(%rdi), %rbx
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq -48(%rdi), %r13
movq (%rdi), %r14
movq 48(%rdi), %r15
movq 96(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -48(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, (%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 48(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, 96(%rdi)
# XOR in constant
xorq $0x01, %rcx
# Row 1
movq -72(%rdi), %r12
movq -24(%rdi), %r13
movq -16(%rdi), %r14
movq 32(%rdi), %r15
movq 80(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -24(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -16(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 32(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 80(%rdi)
movq %r15, -72(%rdi)
# Row 2
movq -88(%rdi), %r12
movq -40(%rdi), %r13
movq 8(%rdi), %r14
movq 56(%rdi), %r15
movq 64(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -40(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 8(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 56(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 64(%rdi)
movq %r15, -88(%rdi)
# Row 3
movq -64(%rdi), %r12
movq -56(%rdi), %r13
movq -8(%rdi), %r14
movq 40(%rdi), %r15
movq 88(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -56(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -8(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 40(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 88(%rdi)
movq %r15, -64(%rdi)
# Row 4
xorq -80(%rdi), %r9
xorq -32(%rdi), %r10
xorq 16(%rdi), %r11
xorq 24(%rdi), %rax
xorq 72(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, -80(%rdi)
movq %r13, -32(%rdi)
movq %r14, 16(%rdi)
movq %r15, 24(%rdi)
movq %rbx, 72(%rdi)
# Round 1
xorq %rcx, %r12
xorq -88(%rdi), %r12
xorq -72(%rdi), %r12
xorq -64(%rdi), %r12
xorq -56(%rdi), %r13
xorq -48(%rdi), %r13
xorq -40(%rdi), %r13
xorq -24(%rdi), %r13
xorq -16(%rdi), %r14
xorq -8(%rdi), %r14
xorq (%rdi), %r14
xorq 8(%rdi), %r14
xorq 32(%rdi), %r15
xorq 40(%rdi), %r15
xorq 48(%rdi), %r15
xorq 56(%rdi), %r15
xorq 64(%rdi), %rbx
xorq 80(%rdi), %rbx
xorq 88(%rdi), %rbx
xorq 96(%rdi), %rbx
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq -24(%rdi), %r13
movq 8(%rdi), %r14
movq 40(%rdi), %r15
movq 72(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -24(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 8(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 40(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, 72(%rdi)
# XOR in constant
xorq $0x8082, %rcx
# Row 1
movq 48(%rdi), %r12
movq 80(%rdi), %r13
movq -88(%rdi), %r14
movq -56(%rdi), %r15
movq 16(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 80(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -88(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -56(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 16(%rdi)
movq %r15, 48(%rdi)
# Row 2
movq -48(%rdi), %r12
movq -16(%rdi), %r13
movq 56(%rdi), %r14
movq 88(%rdi), %r15
movq -80(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -16(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 56(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 88(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -80(%rdi)
movq %r15, -48(%rdi)
# Row 3
movq 96(%rdi), %r12
movq -72(%rdi), %r13
movq -40(%rdi), %r14
movq -8(%rdi), %r15
movq 24(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -72(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -40(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -8(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 24(%rdi)
movq %r15, 96(%rdi)
# Row 4
xorq (%rdi), %r9
xorq 32(%rdi), %r10
xorq 64(%rdi), %r11
xorq -64(%rdi), %rax
xorq -32(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, (%rdi)
movq %r13, 32(%rdi)
movq %r14, 64(%rdi)
movq %r15, -64(%rdi)
movq %rbx, -32(%rdi)
# Round 2
xorq %rcx, %r12
xorq -88(%rdi), %r14
xorq -80(%rdi), %rbx
xorq -72(%rdi), %r13
xorq -56(%rdi), %r15
xorq -48(%rdi), %r12
xorq -40(%rdi), %r14
xorq -24(%rdi), %r13
xorq -16(%rdi), %r13
xorq -8(%rdi), %r15
xorq 8(%rdi), %r14
xorq 16(%rdi), %rbx
xorq 24(%rdi), %rbx
xorq 40(%rdi), %r15
xorq 48(%rdi), %r12
xorq 56(%rdi), %r14
xorq 72(%rdi), %rbx
xorq 80(%rdi), %r13
xorq 88(%rdi), %r15
xorq 96(%rdi), %r12
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq 80(%rdi), %r13
movq 56(%rdi), %r14
movq -8(%rdi), %r15
movq -32(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 80(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 56(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -8(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, -32(%rdi)
# XOR in constant
movq $0x800000000000808a, %rbx
xorq %rbx, %rcx
# Row 1
movq 40(%rdi), %r12
movq 16(%rdi), %r13
movq -48(%rdi), %r14
movq -72(%rdi), %r15
movq 64(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 16(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -48(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -72(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 64(%rdi)
movq %r15, 40(%rdi)
# Row 2
movq -24(%rdi), %r12
movq -88(%rdi), %r13
movq 88(%rdi), %r14
movq 24(%rdi), %r15
movq (%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -88(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 88(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 24(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, (%rdi)
movq %r15, -24(%rdi)
# Row 3
movq 72(%rdi), %r12
movq 48(%rdi), %r13
movq -16(%rdi), %r14
movq -40(%rdi), %r15
movq -64(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 48(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -16(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -40(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -64(%rdi)
movq %r15, 72(%rdi)
# Row 4
xorq 8(%rdi), %r9
xorq -56(%rdi), %r10
xorq -80(%rdi), %r11
xorq 96(%rdi), %rax
xorq 32(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, 8(%rdi)
movq %r13, -56(%rdi)
movq %r14, -80(%rdi)
movq %r15, 96(%rdi)
movq %rbx, 32(%rdi)
# Round 3
xorq %rcx, %r12
xorq -88(%rdi), %r13
xorq -72(%rdi), %r15
xorq -64(%rdi), %rbx
xorq -48(%rdi), %r14
xorq -40(%rdi), %r15
xorq -32(%rdi), %rbx
xorq -24(%rdi), %r12
xorq -16(%rdi), %r14
xorq -8(%rdi), %r15
xorq (%rdi), %rbx
xorq 16(%rdi), %r13
xorq 24(%rdi), %r15
xorq 40(%rdi), %r12
xorq 48(%rdi), %r13
xorq 56(%rdi), %r14
xorq 64(%rdi), %rbx
xorq 72(%rdi), %r12
xorq 80(%rdi), %r13
xorq 88(%rdi), %r14
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq 16(%rdi), %r13
movq 88(%rdi), %r14
movq -40(%rdi), %r15
movq 32(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 16(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 88(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -40(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, 32(%rdi)
# XOR in constant
movq $0x8000000080008000, %rbx
xorq %rbx, %rcx
# Row 1
movq -8(%rdi), %r12
movq 64(%rdi), %r13
movq -24(%rdi), %r14
movq 48(%rdi), %r15
movq -80(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 64(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -24(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 48(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -80(%rdi)
movq %r15, -8(%rdi)
# Row 2
movq 80(%rdi), %r12
movq -48(%rdi), %r13
movq 24(%rdi), %r14
movq -64(%rdi), %r15
movq 8(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -48(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 24(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -64(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 8(%rdi)
movq %r15, 80(%rdi)
# Row 3
movq -32(%rdi), %r12
movq 40(%rdi), %r13
movq -88(%rdi), %r14
movq -16(%rdi), %r15
movq 96(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 40(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -88(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -16(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 96(%rdi)
movq %r15, -32(%rdi)
# Row 4
xorq 56(%rdi), %r9
xorq -72(%rdi), %r10
xorq (%rdi), %r11
xorq 72(%rdi), %rax
xorq -56(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, 56(%rdi)
movq %r13, -72(%rdi)
movq %r14, (%rdi)
movq %r15, 72(%rdi)
movq %rbx, -56(%rdi)
# Round 4
xorq %rcx, %r12
xorq -88(%rdi), %r14
xorq -80(%rdi), %rbx
xorq -64(%rdi), %r15
xorq -48(%rdi), %r13
xorq -40(%rdi), %r15
xorq -32(%rdi), %r12
xorq -24(%rdi), %r14
xorq -16(%rdi), %r15
xorq -8(%rdi), %r12
xorq 8(%rdi), %rbx
xorq 16(%rdi), %r13
xorq 24(%rdi), %r14
xorq 32(%rdi), %rbx
xorq 40(%rdi), %r13
xorq 48(%rdi), %r15
xorq 64(%rdi), %r13
xorq 80(%rdi), %r12
xorq 88(%rdi), %r14
xorq 96(%rdi), %rbx
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq 64(%rdi), %r13
movq 24(%rdi), %r14
movq -16(%rdi), %r15
movq -56(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 64(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 24(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -16(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, -56(%rdi)
# XOR in constant
xorq $0x808b, %rcx
# Row 1
movq -40(%rdi), %r12
movq -80(%rdi), %r13
movq 80(%rdi), %r14
movq 40(%rdi), %r15
movq (%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -80(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 80(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 40(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, (%rdi)
movq %r15, -40(%rdi)
# Row 2
movq 16(%rdi), %r12
movq -24(%rdi), %r13
movq -64(%rdi), %r14
movq 96(%rdi), %r15
movq 56(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -24(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -64(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 96(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 56(%rdi)
movq %r15, 16(%rdi)
# Row 3
movq 32(%rdi), %r12
movq -8(%rdi), %r13
movq -48(%rdi), %r14
movq -88(%rdi), %r15
movq 72(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -8(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -48(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -88(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 72(%rdi)
movq %r15, 32(%rdi)
# Row 4
xorq 88(%rdi), %r9
xorq 48(%rdi), %r10
xorq 8(%rdi), %r11
xorq -32(%rdi), %rax
xorq -72(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, 88(%rdi)
movq %r13, 48(%rdi)
movq %r14, 8(%rdi)
movq %r15, -32(%rdi)
movq %rbx, -72(%rdi)
# Round 5
xorq %rcx, %r12
xorq -88(%rdi), %r15
xorq -80(%rdi), %r13
xorq -64(%rdi), %r14
xorq -56(%rdi), %rbx
xorq -48(%rdi), %r14
xorq -40(%rdi), %r12
xorq -24(%rdi), %r13
xorq -16(%rdi), %r15
xorq -8(%rdi), %r13
xorq (%rdi), %rbx
xorq 16(%rdi), %r12
xorq 24(%rdi), %r14
xorq 32(%rdi), %r12
xorq 40(%rdi), %r15
xorq 56(%rdi), %rbx
xorq 64(%rdi), %r13
xorq 72(%rdi), %rbx
xorq 80(%rdi), %r14
xorq 96(%rdi), %r15
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq -80(%rdi), %r13
movq -64(%rdi), %r14
movq -88(%rdi), %r15
movq -72(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -80(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -64(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -88(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, -72(%rdi)
# XOR in constant
movq $0x80000001, %rbx
xorq %rbx, %rcx
# Row 1
movq -16(%rdi), %r12
movq (%rdi), %r13
movq 16(%rdi), %r14
movq -8(%rdi), %r15
movq 8(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, (%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 16(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -8(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 8(%rdi)
movq %r15, -16(%rdi)
# Row 2
movq 64(%rdi), %r12
movq 80(%rdi), %r13
movq 96(%rdi), %r14
movq 72(%rdi), %r15
movq 88(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 80(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 96(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 72(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 88(%rdi)
movq %r15, 64(%rdi)
# Row 3
movq -56(%rdi), %r12
movq -40(%rdi), %r13
movq -24(%rdi), %r14
movq -48(%rdi), %r15
movq -32(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -40(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -24(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -48(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -32(%rdi)
movq %r15, -56(%rdi)
# Row 4
xorq 24(%rdi), %r9
xorq 40(%rdi), %r10
xorq 56(%rdi), %r11
xorq 32(%rdi), %rax
xorq 48(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, 24(%rdi)
movq %r13, 40(%rdi)
movq %r14, 56(%rdi)
movq %r15, 32(%rdi)
movq %rbx, 48(%rdi)
# Round 6
xorq %rcx, %r12
xorq -88(%rdi), %r15
xorq -80(%rdi), %r13
xorq -72(%rdi), %rbx
xorq -64(%rdi), %r14
xorq -56(%rdi), %r12
xorq -48(%rdi), %r15
xorq -40(%rdi), %r13
xorq -32(%rdi), %rbx
xorq -24(%rdi), %r14
xorq -16(%rdi), %r12
xorq -8(%rdi), %r15
xorq (%rdi), %r13
xorq 8(%rdi), %rbx
xorq 16(%rdi), %r14
xorq 64(%rdi), %r12
xorq 72(%rdi), %r15
xorq 80(%rdi), %r13
xorq 88(%rdi), %rbx
xorq 96(%rdi), %r14
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq (%rdi), %r13
movq 96(%rdi), %r14
movq -48(%rdi), %r15
movq 48(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, (%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 96(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -48(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, 48(%rdi)
# XOR in constant
movq $0x8000000080008081, %rbx
xorq %rbx, %rcx
# Row 1
movq -88(%rdi), %r12
movq 8(%rdi), %r13
movq 64(%rdi), %r14
movq -40(%rdi), %r15
movq 56(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 8(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 64(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -40(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 56(%rdi)
movq %r15, -88(%rdi)
# Row 2
movq -80(%rdi), %r12
movq 16(%rdi), %r13
movq 72(%rdi), %r14
movq -32(%rdi), %r15
movq 24(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 16(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 72(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -32(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 24(%rdi)
movq %r15, -80(%rdi)
# Row 3
movq -72(%rdi), %r12
movq -16(%rdi), %r13
movq 80(%rdi), %r14
movq -24(%rdi), %r15
movq 32(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -16(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 80(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -24(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 32(%rdi)
movq %r15, -72(%rdi)
# Row 4
xorq -64(%rdi), %r9
xorq -8(%rdi), %r10
xorq 88(%rdi), %r11
xorq -56(%rdi), %rax
xorq 40(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, -64(%rdi)
movq %r13, -8(%rdi)
movq %r14, 88(%rdi)
movq %r15, -56(%rdi)
movq %rbx, 40(%rdi)
# Round 7
xorq %rcx, %r12
xorq -88(%rdi), %r12
xorq -80(%rdi), %r12
xorq -72(%rdi), %r12
xorq -48(%rdi), %r15
xorq -40(%rdi), %r15
xorq -32(%rdi), %r15
xorq -24(%rdi), %r15
xorq -16(%rdi), %r13
xorq (%rdi), %r13
xorq 8(%rdi), %r13
xorq 16(%rdi), %r13
xorq 24(%rdi), %rbx
xorq 32(%rdi), %rbx
xorq 48(%rdi), %rbx
xorq 56(%rdi), %rbx
xorq 64(%rdi), %r14
xorq 72(%rdi), %r14
xorq 80(%rdi), %r14
xorq 96(%rdi), %r14
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq 8(%rdi), %r13
movq 72(%rdi), %r14
movq -24(%rdi), %r15
movq 40(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 8(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 72(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -24(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, 40(%rdi)
# XOR in constant
movq $0x8000000000008009, %rbx
xorq %rbx, %rcx
# Row 1
movq -48(%rdi), %r12
movq 56(%rdi), %r13
movq -80(%rdi), %r14
movq -16(%rdi), %r15
movq 88(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 56(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -80(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -16(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 88(%rdi)
movq %r15, -48(%rdi)
# Row 2
movq (%rdi), %r12
movq 64(%rdi), %r13
movq -32(%rdi), %r14
movq 32(%rdi), %r15
movq -64(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 64(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -32(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 32(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -64(%rdi)
movq %r15, (%rdi)
# Row 3
movq 48(%rdi), %r12
movq -88(%rdi), %r13
movq 16(%rdi), %r14
movq 80(%rdi), %r15
movq -56(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -88(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 16(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 80(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -56(%rdi)
movq %r15, 48(%rdi)
# Row 4
xorq 96(%rdi), %r9
xorq -40(%rdi), %r10
xorq 24(%rdi), %r11
xorq -72(%rdi), %rax
xorq -8(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, 96(%rdi)
movq %r13, -40(%rdi)
movq %r14, 24(%rdi)
movq %r15, -72(%rdi)
movq %rbx, -8(%rdi)
# Round 8
xorq %rcx, %r12
xorq -88(%rdi), %r13
xorq -80(%rdi), %r14
xorq -64(%rdi), %rbx
xorq -56(%rdi), %rbx
xorq -48(%rdi), %r12
xorq -32(%rdi), %r14
xorq -24(%rdi), %r15
xorq -16(%rdi), %r15
xorq (%rdi), %r12
xorq 8(%rdi), %r13
xorq 16(%rdi), %r14
xorq 32(%rdi), %r15
xorq 40(%rdi), %rbx
xorq 48(%rdi), %r12
xorq 56(%rdi), %r13
xorq 64(%rdi), %r13
xorq 72(%rdi), %r14
xorq 80(%rdi), %r15
xorq 88(%rdi), %rbx
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq 56(%rdi), %r13
movq -32(%rdi), %r14
movq 80(%rdi), %r15
movq -8(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 56(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -32(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 80(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, -8(%rdi)
# XOR in constant
xorq $0x8a, %rcx
# Row 1
movq -24(%rdi), %r12
movq 88(%rdi), %r13
movq (%rdi), %r14
movq -88(%rdi), %r15
movq 24(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 88(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, (%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -88(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 24(%rdi)
movq %r15, -24(%rdi)
# Row 2
movq 8(%rdi), %r12
movq -80(%rdi), %r13
movq 32(%rdi), %r14
movq -56(%rdi), %r15
movq 96(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -80(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 32(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -56(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 96(%rdi)
movq %r15, 8(%rdi)
# Row 3
movq 40(%rdi), %r12
movq -48(%rdi), %r13
movq 64(%rdi), %r14
movq 16(%rdi), %r15
movq -72(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -48(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 64(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 16(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -72(%rdi)
movq %r15, 40(%rdi)
# Row 4
xorq 72(%rdi), %r9
xorq -16(%rdi), %r10
xorq -64(%rdi), %r11
xorq 48(%rdi), %rax
xorq -40(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, 72(%rdi)
movq %r13, -16(%rdi)
movq %r14, -64(%rdi)
movq %r15, 48(%rdi)
movq %rbx, -40(%rdi)
# Round 9
xorq %rcx, %r12
xorq -88(%rdi), %r15
xorq -80(%rdi), %r13
xorq -72(%rdi), %rbx
xorq -56(%rdi), %r15
xorq -48(%rdi), %r13
xorq -32(%rdi), %r14
xorq -24(%rdi), %r12
xorq -8(%rdi), %rbx
xorq (%rdi), %r14
xorq 8(%rdi), %r12
xorq 16(%rdi), %r15
xorq 24(%rdi), %rbx
xorq 32(%rdi), %r14
xorq 40(%rdi), %r12
xorq 56(%rdi), %r13
xorq 64(%rdi), %r14
xorq 80(%rdi), %r15
xorq 88(%rdi), %r13
xorq 96(%rdi), %rbx
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq 88(%rdi), %r13
movq 32(%rdi), %r14
movq 16(%rdi), %r15
movq -40(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 88(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 32(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 16(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, -40(%rdi)
# XOR in constant
xorq $0x88, %rcx
# Row 1
movq 80(%rdi), %r12
movq 24(%rdi), %r13
movq 8(%rdi), %r14
movq -48(%rdi), %r15
movq -64(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 24(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 8(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -48(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -64(%rdi)
movq %r15, 80(%rdi)
# Row 2
movq 56(%rdi), %r12
movq (%rdi), %r13
movq -56(%rdi), %r14
movq -72(%rdi), %r15
movq 72(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, (%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -56(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -72(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 72(%rdi)
movq %r15, 56(%rdi)
# Row 3
movq -8(%rdi), %r12
movq -24(%rdi), %r13
movq -80(%rdi), %r14
movq 64(%rdi), %r15
movq 48(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -24(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -80(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 64(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 48(%rdi)
movq %r15, -8(%rdi)
# Row 4
xorq -32(%rdi), %r9
xorq -88(%rdi), %r10
xorq 96(%rdi), %r11
xorq 40(%rdi), %rax
xorq -16(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, -32(%rdi)
movq %r13, -88(%rdi)
movq %r14, 96(%rdi)
movq %r15, 40(%rdi)
movq %rbx, -16(%rdi)
# Round 10
xorq %rcx, %r12
xorq -80(%rdi), %r14
xorq -72(%rdi), %r15
xorq -64(%rdi), %rbx
xorq -56(%rdi), %r14
xorq -48(%rdi), %r15
xorq -40(%rdi), %rbx
xorq -24(%rdi), %r13
xorq -8(%rdi), %r12
xorq (%rdi), %r13
xorq 8(%rdi), %r14
xorq 16(%rdi), %r15
xorq 24(%rdi), %r13
xorq 32(%rdi), %r14
xorq 48(%rdi), %rbx
xorq 56(%rdi), %r12
xorq 64(%rdi), %r15
xorq 72(%rdi), %rbx
xorq 80(%rdi), %r12
xorq 88(%rdi), %r13
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq 24(%rdi), %r13
movq -56(%rdi), %r14
movq 64(%rdi), %r15
movq -16(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 24(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -56(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 64(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, -16(%rdi)
# XOR in constant
movq $0x80008009, %rbx
xorq %rbx, %rcx
# Row 1
movq 16(%rdi), %r12
movq -64(%rdi), %r13
movq 56(%rdi), %r14
movq -24(%rdi), %r15
movq 96(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -64(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 56(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -24(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 96(%rdi)
movq %r15, 16(%rdi)
# Row 2
movq 88(%rdi), %r12
movq 8(%rdi), %r13
movq -72(%rdi), %r14
movq 48(%rdi), %r15
movq -32(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 8(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -72(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 48(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -32(%rdi)
movq %r15, 88(%rdi)
# Row 3
movq -40(%rdi), %r12
movq 80(%rdi), %r13
movq (%rdi), %r14
movq -80(%rdi), %r15
movq 40(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 80(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, (%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -80(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 40(%rdi)
movq %r15, -40(%rdi)
# Row 4
xorq 32(%rdi), %r9
xorq -48(%rdi), %r10
xorq 72(%rdi), %r11
xorq -8(%rdi), %rax
xorq -88(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, 32(%rdi)
movq %r13, -48(%rdi)
movq %r14, 72(%rdi)
movq %r15, -8(%rdi)
movq %rbx, -88(%rdi)
# Round 11
xorq %rcx, %r12
xorq -80(%rdi), %r15
xorq -72(%rdi), %r14
xorq -64(%rdi), %r13
xorq -56(%rdi), %r14
xorq -40(%rdi), %r12
xorq -32(%rdi), %rbx
xorq -24(%rdi), %r15
xorq -16(%rdi), %rbx
xorq (%rdi), %r14
xorq 8(%rdi), %r13
xorq 16(%rdi), %r12
xorq 24(%rdi), %r13
xorq 40(%rdi), %rbx
xorq 48(%rdi), %r15
xorq 56(%rdi), %r14
xorq 64(%rdi), %r15
xorq 80(%rdi), %r13
xorq 88(%rdi), %r12
xorq 96(%rdi), %rbx
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq -64(%rdi), %r13
movq -72(%rdi), %r14
movq -80(%rdi), %r15
movq -88(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -64(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -72(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -80(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, -88(%rdi)
# XOR in constant
movq $0x8000000a, %rbx
xorq %rbx, %rcx
# Row 1
movq 64(%rdi), %r12
movq 96(%rdi), %r13
movq 88(%rdi), %r14
movq 80(%rdi), %r15
movq 72(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 96(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 88(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 80(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 72(%rdi)
movq %r15, 64(%rdi)
# Row 2
movq 24(%rdi), %r12
movq 56(%rdi), %r13
movq 48(%rdi), %r14
movq 40(%rdi), %r15
movq 32(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 56(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 48(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 40(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 32(%rdi)
movq %r15, 24(%rdi)
# Row 3
movq -16(%rdi), %r12
movq 16(%rdi), %r13
movq 8(%rdi), %r14
movq (%rdi), %r15
movq -8(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 16(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 8(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, (%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -8(%rdi)
movq %r15, -16(%rdi)
# Row 4
xorq -56(%rdi), %r9
xorq -24(%rdi), %r10
xorq -32(%rdi), %r11
xorq -40(%rdi), %rax
xorq -48(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, -56(%rdi)
movq %r13, -24(%rdi)
movq %r14, -32(%rdi)
movq %r15, -40(%rdi)
movq %rbx, -48(%rdi)
# Round 12
xorq %rcx, %r12
xorq -88(%rdi), %rbx
xorq -80(%rdi), %r15
xorq -72(%rdi), %r14
xorq -64(%rdi), %r13
xorq -16(%rdi), %r12
xorq -8(%rdi), %rbx
xorq (%rdi), %r15
xorq 8(%rdi), %r14
xorq 16(%rdi), %r13
xorq 24(%rdi), %r12
xorq 32(%rdi), %rbx
xorq 40(%rdi), %r15
xorq 48(%rdi), %r14
xorq 56(%rdi), %r13
xorq 64(%rdi), %r12
xorq 72(%rdi), %rbx
xorq 80(%rdi), %r15
xorq 88(%rdi), %r14
xorq 96(%rdi), %r13
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq 96(%rdi), %r13
movq 48(%rdi), %r14
movq (%rdi), %r15
movq -48(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 96(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 48(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, (%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, -48(%rdi)
# XOR in constant
movq $0x8000808b, %rbx
xorq %rbx, %rcx
# Row 1
movq -80(%rdi), %r12
movq 72(%rdi), %r13
movq 24(%rdi), %r14
movq 16(%rdi), %r15
movq -32(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 72(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 24(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 16(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -32(%rdi)
movq %r15, -80(%rdi)
# Row 2
movq -64(%rdi), %r12
movq 88(%rdi), %r13
movq 40(%rdi), %r14
movq -8(%rdi), %r15
movq -56(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 88(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 40(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -8(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -56(%rdi)
movq %r15, -64(%rdi)
# Row 3
movq -88(%rdi), %r12
movq 64(%rdi), %r13
movq 56(%rdi), %r14
movq 8(%rdi), %r15
movq -40(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 64(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 56(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 8(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -40(%rdi)
movq %r15, -88(%rdi)
# Row 4
xorq -72(%rdi), %r9
xorq 80(%rdi), %r10
xorq 32(%rdi), %r11
xorq -16(%rdi), %rax
xorq -24(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, -72(%rdi)
movq %r13, 80(%rdi)
movq %r14, 32(%rdi)
movq %r15, -16(%rdi)
movq %rbx, -24(%rdi)
# Round 13
xorq %rcx, %r12
xorq -88(%rdi), %r12
xorq -80(%rdi), %r12
xorq -64(%rdi), %r12
xorq -56(%rdi), %rbx
xorq -48(%rdi), %rbx
xorq -40(%rdi), %rbx
xorq -32(%rdi), %rbx
xorq -8(%rdi), %r15
xorq (%rdi), %r15
xorq 8(%rdi), %r15
xorq 16(%rdi), %r15
xorq 24(%rdi), %r14
xorq 40(%rdi), %r14
xorq 48(%rdi), %r14
xorq 56(%rdi), %r14
xorq 64(%rdi), %r13
xorq 72(%rdi), %r13
xorq 88(%rdi), %r13
xorq 96(%rdi), %r13
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq 72(%rdi), %r13
movq 40(%rdi), %r14
movq 8(%rdi), %r15
movq -24(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 72(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 40(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 8(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, -24(%rdi)
# XOR in constant
movq $0x800000000000008b, %rbx
xorq %rbx, %rcx
# Row 1
movq (%rdi), %r12
movq -32(%rdi), %r13
movq -64(%rdi), %r14
movq 64(%rdi), %r15
movq 32(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -32(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -64(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 64(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 32(%rdi)
movq %r15, (%rdi)
# Row 2
movq 96(%rdi), %r12
movq 24(%rdi), %r13
movq -8(%rdi), %r14
movq -40(%rdi), %r15
movq -72(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 24(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -8(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -40(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -72(%rdi)
movq %r15, 96(%rdi)
# Row 3
movq -48(%rdi), %r12
movq -80(%rdi), %r13
movq 88(%rdi), %r14
movq 56(%rdi), %r15
movq -16(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -80(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 88(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 56(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -16(%rdi)
movq %r15, -48(%rdi)
# Row 4
xorq 48(%rdi), %r9
xorq 16(%rdi), %r10
xorq -56(%rdi), %r11
xorq -88(%rdi), %rax
xorq 80(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, 48(%rdi)
movq %r13, 16(%rdi)
movq %r14, -56(%rdi)
movq %r15, -88(%rdi)
movq %rbx, 80(%rdi)
# Round 14
xorq %rcx, %r12
xorq -80(%rdi), %r13
xorq -72(%rdi), %rbx
xorq -64(%rdi), %r14
xorq -48(%rdi), %r12
xorq -40(%rdi), %r15
xorq -32(%rdi), %r13
xorq -24(%rdi), %rbx
xorq -16(%rdi), %rbx
xorq -8(%rdi), %r14
xorq (%rdi), %r12
xorq 8(%rdi), %r15
xorq 24(%rdi), %r13
xorq 32(%rdi), %rbx
xorq 40(%rdi), %r14
xorq 56(%rdi), %r15
xorq 64(%rdi), %r15
xorq 72(%rdi), %r13
xorq 88(%rdi), %r14
xorq 96(%rdi), %r12
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq -32(%rdi), %r13
movq -8(%rdi), %r14
movq 56(%rdi), %r15
movq 80(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -32(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -8(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 56(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, 80(%rdi)
# XOR in constant
movq $0x8000000000008089, %rbx
xorq %rbx, %rcx
# Row 1
movq 8(%rdi), %r12
movq 32(%rdi), %r13
movq 96(%rdi), %r14
movq -80(%rdi), %r15
movq -56(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 32(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 96(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -80(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -56(%rdi)
movq %r15, 8(%rdi)
# Row 2
movq 72(%rdi), %r12
movq -64(%rdi), %r13
movq -40(%rdi), %r14
movq -16(%rdi), %r15
movq 48(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -64(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -40(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -16(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 48(%rdi)
movq %r15, 72(%rdi)
# Row 3
movq -24(%rdi), %r12
movq (%rdi), %r13
movq 24(%rdi), %r14
movq 88(%rdi), %r15
movq -88(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, (%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 24(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 88(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -88(%rdi)
movq %r15, -24(%rdi)
# Row 4
xorq 40(%rdi), %r9
xorq 64(%rdi), %r10
xorq -72(%rdi), %r11
xorq -48(%rdi), %rax
xorq 16(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, 40(%rdi)
movq %r13, 64(%rdi)
movq %r14, -72(%rdi)
movq %r15, -48(%rdi)
movq %rbx, 16(%rdi)
# Round 15
xorq %rcx, %r12
xorq -88(%rdi), %rbx
xorq -80(%rdi), %r15
xorq -64(%rdi), %r13
xorq -56(%rdi), %rbx
xorq -40(%rdi), %r14
xorq -32(%rdi), %r13
xorq -24(%rdi), %r12
xorq -16(%rdi), %r15
xorq -8(%rdi), %r14
xorq (%rdi), %r13
xorq 8(%rdi), %r12
xorq 24(%rdi), %r14
xorq 32(%rdi), %r13
xorq 48(%rdi), %rbx
xorq 56(%rdi), %r15
xorq 72(%rdi), %r12
xorq 80(%rdi), %rbx
xorq 88(%rdi), %r15
xorq 96(%rdi), %r14
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq 32(%rdi), %r13
movq -40(%rdi), %r14
movq 88(%rdi), %r15
movq 16(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 32(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -40(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 88(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, 16(%rdi)
# XOR in constant
movq $0x8000000000008003, %rbx
xorq %rbx, %rcx
# Row 1
movq 56(%rdi), %r12
movq -56(%rdi), %r13
movq 72(%rdi), %r14
movq (%rdi), %r15
movq -72(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -56(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 72(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, (%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -72(%rdi)
movq %r15, 56(%rdi)
# Row 2
movq -32(%rdi), %r12
movq 96(%rdi), %r13
movq -16(%rdi), %r14
movq -88(%rdi), %r15
movq 40(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 96(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -16(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -88(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 40(%rdi)
movq %r15, -32(%rdi)
# Row 3
movq 80(%rdi), %r12
movq 8(%rdi), %r13
movq -64(%rdi), %r14
movq 24(%rdi), %r15
movq -48(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 8(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -64(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 24(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -48(%rdi)
movq %r15, 80(%rdi)
# Row 4
xorq -8(%rdi), %r9
xorq -80(%rdi), %r10
xorq 48(%rdi), %r11
xorq -24(%rdi), %rax
xorq 64(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, -8(%rdi)
movq %r13, -80(%rdi)
movq %r14, 48(%rdi)
movq %r15, -24(%rdi)
movq %rbx, 64(%rdi)
# Round 16
xorq %rcx, %r12
xorq -88(%rdi), %r15
xorq -72(%rdi), %rbx
xorq -64(%rdi), %r14
xorq -56(%rdi), %r13
xorq -48(%rdi), %rbx
xorq -40(%rdi), %r14
xorq -32(%rdi), %r12
xorq -16(%rdi), %r14
xorq (%rdi), %r15
xorq 8(%rdi), %r13
xorq 16(%rdi), %rbx
xorq 24(%rdi), %r15
xorq 32(%rdi), %r13
xorq 40(%rdi), %rbx
xorq 56(%rdi), %r12
xorq 72(%rdi), %r14
xorq 80(%rdi), %r12
xorq 88(%rdi), %r15
xorq 96(%rdi), %r13
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq -56(%rdi), %r13
movq -16(%rdi), %r14
movq 24(%rdi), %r15
movq 64(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -56(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -16(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 24(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, 64(%rdi)
# XOR in constant
movq $0x8000000000008002, %rbx
xorq %rbx, %rcx
# Row 1
movq 88(%rdi), %r12
movq -72(%rdi), %r13
movq -32(%rdi), %r14
movq 8(%rdi), %r15
movq 48(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -72(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -32(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 8(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 48(%rdi)
movq %r15, 88(%rdi)
# Row 2
movq 32(%rdi), %r12
movq 72(%rdi), %r13
movq -88(%rdi), %r14
movq -48(%rdi), %r15
movq -8(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 72(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -88(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -48(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -8(%rdi)
movq %r15, 32(%rdi)
# Row 3
movq 16(%rdi), %r12
movq 56(%rdi), %r13
movq 96(%rdi), %r14
movq -64(%rdi), %r15
movq -24(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 56(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 96(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -64(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -24(%rdi)
movq %r15, 16(%rdi)
# Row 4
xorq -40(%rdi), %r9
xorq (%rdi), %r10
xorq 40(%rdi), %r11
xorq 80(%rdi), %rax
xorq -80(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, -40(%rdi)
movq %r13, (%rdi)
movq %r14, 40(%rdi)
movq %r15, 80(%rdi)
movq %rbx, -80(%rdi)
# Round 17
xorq %rcx, %r12
xorq -88(%rdi), %r14
xorq -72(%rdi), %r13
xorq -64(%rdi), %r15
xorq -56(%rdi), %r13
xorq -48(%rdi), %r15
xorq -32(%rdi), %r14
xorq -24(%rdi), %rbx
xorq -16(%rdi), %r14
xorq -8(%rdi), %rbx
xorq 8(%rdi), %r15
xorq 16(%rdi), %r12
xorq 24(%rdi), %r15
xorq 32(%rdi), %r12
xorq 48(%rdi), %rbx
xorq 56(%rdi), %r13
xorq 64(%rdi), %rbx
xorq 72(%rdi), %r13
xorq 88(%rdi), %r12
xorq 96(%rdi), %r14
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq -72(%rdi), %r13
movq -88(%rdi), %r14
movq -64(%rdi), %r15
movq -80(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -72(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -88(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -64(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, -80(%rdi)
# XOR in constant
movq $0x8000000000000080, %rbx
xorq %rbx, %rcx
# Row 1
movq 24(%rdi), %r12
movq 48(%rdi), %r13
movq 32(%rdi), %r14
movq 56(%rdi), %r15
movq 40(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 48(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 32(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 56(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 40(%rdi)
movq %r15, 24(%rdi)
# Row 2
movq -56(%rdi), %r12
movq -32(%rdi), %r13
movq -48(%rdi), %r14
movq -24(%rdi), %r15
movq -40(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -32(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -48(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -24(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -40(%rdi)
movq %r15, -56(%rdi)
# Row 3
movq 64(%rdi), %r12
movq 88(%rdi), %r13
movq 72(%rdi), %r14
movq 96(%rdi), %r15
movq 80(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 88(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 72(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 96(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 80(%rdi)
movq %r15, 64(%rdi)
# Row 4
xorq -16(%rdi), %r9
xorq 8(%rdi), %r10
xorq -8(%rdi), %r11
xorq 16(%rdi), %rax
xorq (%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, -16(%rdi)
movq %r13, 8(%rdi)
movq %r14, -8(%rdi)
movq %r15, 16(%rdi)
movq %rbx, (%rdi)
# Round 18
xorq %rcx, %r12
xorq -88(%rdi), %r14
xorq -80(%rdi), %rbx
xorq -72(%rdi), %r13
xorq -64(%rdi), %r15
xorq -56(%rdi), %r12
xorq -48(%rdi), %r14
xorq -40(%rdi), %rbx
xorq -32(%rdi), %r13
xorq -24(%rdi), %r15
xorq 24(%rdi), %r12
xorq 32(%rdi), %r14
xorq 40(%rdi), %rbx
xorq 48(%rdi), %r13
xorq 56(%rdi), %r15
xorq 64(%rdi), %r12
xorq 72(%rdi), %r14
xorq 80(%rdi), %rbx
xorq 88(%rdi), %r13
xorq 96(%rdi), %r15
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq 48(%rdi), %r13
movq -48(%rdi), %r14
movq 96(%rdi), %r15
movq (%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 48(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -48(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 96(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, (%rdi)
# XOR in constant
xorq $0x800a, %rcx
# Row 1
movq -64(%rdi), %r12
movq 40(%rdi), %r13
movq -56(%rdi), %r14
movq 88(%rdi), %r15
movq -8(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 40(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -56(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 88(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -8(%rdi)
movq %r15, -64(%rdi)
# Row 2
movq -72(%rdi), %r12
movq 32(%rdi), %r13
movq -24(%rdi), %r14
movq 80(%rdi), %r15
movq -16(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 32(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -24(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 80(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -16(%rdi)
movq %r15, -72(%rdi)
# Row 3
movq -80(%rdi), %r12
movq 24(%rdi), %r13
movq -32(%rdi), %r14
movq 72(%rdi), %r15
movq 16(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 24(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -32(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 72(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 16(%rdi)
movq %r15, -80(%rdi)
# Row 4
xorq -88(%rdi), %r9
xorq 56(%rdi), %r10
xorq -40(%rdi), %r11
xorq 64(%rdi), %rax
xorq 8(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, -88(%rdi)
movq %r13, 56(%rdi)
movq %r14, -40(%rdi)
movq %r15, 64(%rdi)
movq %rbx, 8(%rdi)
# Round 19
xorq %rcx, %r12
xorq -80(%rdi), %r12
xorq -72(%rdi), %r12
xorq -64(%rdi), %r12
xorq -56(%rdi), %r14
xorq -48(%rdi), %r14
xorq -32(%rdi), %r14
xorq -24(%rdi), %r14
xorq -16(%rdi), %rbx
xorq -8(%rdi), %rbx
xorq (%rdi), %rbx
xorq 16(%rdi), %rbx
xorq 24(%rdi), %r13
xorq 32(%rdi), %r13
xorq 40(%rdi), %r13
xorq 48(%rdi), %r13
xorq 72(%rdi), %r15
xorq 80(%rdi), %r15
xorq 88(%rdi), %r15
xorq 96(%rdi), %r15
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq 40(%rdi), %r13
movq -24(%rdi), %r14
movq 72(%rdi), %r15
movq 8(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 40(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -24(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 72(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, 8(%rdi)
# XOR in constant
movq $0x800000008000000a, %rbx
xorq %rbx, %rcx
# Row 1
movq 96(%rdi), %r12
movq -8(%rdi), %r13
movq -72(%rdi), %r14
movq 24(%rdi), %r15
movq -40(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -8(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -72(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 24(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -40(%rdi)
movq %r15, 96(%rdi)
# Row 2
movq 48(%rdi), %r12
movq -56(%rdi), %r13
movq 80(%rdi), %r14
movq 16(%rdi), %r15
movq -88(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -56(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 80(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 16(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -88(%rdi)
movq %r15, 48(%rdi)
# Row 3
movq (%rdi), %r12
movq -64(%rdi), %r13
movq 32(%rdi), %r14
movq -32(%rdi), %r15
movq 64(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -64(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 32(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -32(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 64(%rdi)
movq %r15, (%rdi)
# Row 4
xorq -48(%rdi), %r9
xorq 88(%rdi), %r10
xorq -16(%rdi), %r11
xorq -80(%rdi), %rax
xorq 56(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, -48(%rdi)
movq %r13, 88(%rdi)
movq %r14, -16(%rdi)
movq %r15, -80(%rdi)
movq %rbx, 56(%rdi)
# Round 20
xorq %rcx, %r12
xorq -88(%rdi), %rbx
xorq -72(%rdi), %r14
xorq -64(%rdi), %r13
xorq -56(%rdi), %r13
xorq -40(%rdi), %rbx
xorq -32(%rdi), %r15
xorq -24(%rdi), %r14
xorq -8(%rdi), %r13
xorq (%rdi), %r12
xorq 8(%rdi), %rbx
xorq 16(%rdi), %r15
xorq 24(%rdi), %r15
xorq 32(%rdi), %r14
xorq 40(%rdi), %r13
xorq 48(%rdi), %r12
xorq 64(%rdi), %rbx
xorq 72(%rdi), %r15
xorq 80(%rdi), %r14
xorq 96(%rdi), %r12
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq -8(%rdi), %r13
movq 80(%rdi), %r14
movq -32(%rdi), %r15
movq 56(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -8(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 80(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -32(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, 56(%rdi)
# XOR in constant
movq $0x8000000080008081, %rbx
xorq %rbx, %rcx
# Row 1
movq 72(%rdi), %r12
movq -40(%rdi), %r13
movq 48(%rdi), %r14
movq -64(%rdi), %r15
movq -16(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -40(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 48(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -64(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -16(%rdi)
movq %r15, 72(%rdi)
# Row 2
movq 40(%rdi), %r12
movq -72(%rdi), %r13
movq 16(%rdi), %r14
movq 64(%rdi), %r15
movq -48(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -72(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 16(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 64(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -48(%rdi)
movq %r15, 40(%rdi)
# Row 3
movq 8(%rdi), %r12
movq 96(%rdi), %r13
movq -56(%rdi), %r14
movq 32(%rdi), %r15
movq -80(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 96(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -56(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 32(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -80(%rdi)
movq %r15, 8(%rdi)
# Row 4
xorq -24(%rdi), %r9
xorq 24(%rdi), %r10
xorq -88(%rdi), %r11
xorq (%rdi), %rax
xorq 88(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, -24(%rdi)
movq %r13, 24(%rdi)
movq %r14, -88(%rdi)
movq %r15, (%rdi)
movq %rbx, 88(%rdi)
# Round 21
xorq %rcx, %r12
xorq -80(%rdi), %rbx
xorq -72(%rdi), %r13
xorq -64(%rdi), %r15
xorq -56(%rdi), %r14
xorq -48(%rdi), %rbx
xorq -40(%rdi), %r13
xorq -32(%rdi), %r15
xorq -16(%rdi), %rbx
xorq -8(%rdi), %r13
xorq 8(%rdi), %r12
xorq 16(%rdi), %r14
xorq 32(%rdi), %r15
xorq 40(%rdi), %r12
xorq 48(%rdi), %r14
xorq 56(%rdi), %rbx
xorq 64(%rdi), %r15
xorq 72(%rdi), %r12
xorq 80(%rdi), %r14
xorq 96(%rdi), %r13
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq -40(%rdi), %r13
movq 16(%rdi), %r14
movq 32(%rdi), %r15
movq 88(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -40(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 16(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 32(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, 88(%rdi)
# XOR in constant
movq $0x8000000000008080, %rbx
xorq %rbx, %rcx
# Row 1
movq -32(%rdi), %r12
movq -16(%rdi), %r13
movq 40(%rdi), %r14
movq 96(%rdi), %r15
movq -88(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -16(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 40(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 96(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -88(%rdi)
movq %r15, -32(%rdi)
# Row 2
movq -8(%rdi), %r12
movq 48(%rdi), %r13
movq 64(%rdi), %r14
movq -80(%rdi), %r15
movq -24(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 48(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 64(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -80(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -24(%rdi)
movq %r15, -8(%rdi)
# Row 3
movq 56(%rdi), %r12
movq 72(%rdi), %r13
movq -72(%rdi), %r14
movq -56(%rdi), %r15
movq (%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 72(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -72(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -56(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, (%rdi)
movq %r15, 56(%rdi)
# Row 4
xorq 80(%rdi), %r9
xorq -64(%rdi), %r10
xorq -48(%rdi), %r11
xorq 8(%rdi), %rax
xorq 24(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, 80(%rdi)
movq %r13, -64(%rdi)
movq %r14, -48(%rdi)
movq %r15, 8(%rdi)
movq %rbx, 24(%rdi)
# Round 22
xorq %rcx, %r12
xorq -88(%rdi), %rbx
xorq -80(%rdi), %r15
xorq -72(%rdi), %r14
xorq -56(%rdi), %r15
xorq -40(%rdi), %r13
xorq -32(%rdi), %r12
xorq -24(%rdi), %rbx
xorq -16(%rdi), %r13
xorq -8(%rdi), %r12
xorq (%rdi), %rbx
xorq 16(%rdi), %r14
xorq 32(%rdi), %r15
xorq 40(%rdi), %r14
xorq 48(%rdi), %r13
xorq 56(%rdi), %r12
xorq 64(%rdi), %r14
xorq 72(%rdi), %r13
xorq 88(%rdi), %rbx
xorq 96(%rdi), %r15
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq -16(%rdi), %r13
movq 64(%rdi), %r14
movq -56(%rdi), %r15
movq 24(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -16(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 64(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -56(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, 24(%rdi)
# XOR in constant
movq $0x80000001, %rbx
xorq %rbx, %rcx
# Row 1
movq 32(%rdi), %r12
movq -88(%rdi), %r13
movq -8(%rdi), %r14
movq 72(%rdi), %r15
movq -48(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -88(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -8(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 72(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -48(%rdi)
movq %r15, 32(%rdi)
# Row 2
movq -40(%rdi), %r12
movq 40(%rdi), %r13
movq -80(%rdi), %r14
movq (%rdi), %r15
movq 80(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 40(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -80(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, (%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 80(%rdi)
movq %r15, -40(%rdi)
# Row 3
movq 88(%rdi), %r12
movq -32(%rdi), %r13
movq 48(%rdi), %r14
movq -72(%rdi), %r15
movq 8(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -32(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 48(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -72(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 8(%rdi)
movq %r15, 88(%rdi)
# Row 4
xorq 16(%rdi), %r9
xorq 96(%rdi), %r10
xorq -24(%rdi), %r11
xorq 56(%rdi), %rax
xorq -64(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, 16(%rdi)
movq %r13, 96(%rdi)
movq %r14, -24(%rdi)
movq %r15, 56(%rdi)
movq %rbx, -64(%rdi)
# Round 23
xorq %rcx, %r12
xorq -88(%rdi), %r13
xorq -80(%rdi), %r14
xorq -72(%rdi), %r15
xorq -56(%rdi), %r15
xorq -48(%rdi), %rbx
xorq -40(%rdi), %r12
xorq -32(%rdi), %r13
xorq -16(%rdi), %r13
xorq -8(%rdi), %r14
xorq (%rdi), %r15
xorq 8(%rdi), %rbx
xorq 24(%rdi), %rbx
xorq 32(%rdi), %r12
xorq 40(%rdi), %r13
xorq 48(%rdi), %r14
xorq 64(%rdi), %r14
xorq 72(%rdi), %r15
xorq 80(%rdi), %rbx
xorq 88(%rdi), %r12
# Calc t[0..4]
rorxq $63, %r13, %rax
rorxq $63, %r14, %r8
rorxq $63, %r15, %r9
rorxq $63, %rbx, %r10
rorxq $63, %r12, %r11
xorq %rbx, %rax
xorq %r12, %r8
xorq %r13, %r9
xorq %r14, %r10
xorq %r15, %r11
# Row Mix
# Row 0
movq %rcx, %r12
movq -88(%rdi), %r13
movq -80(%rdi), %r14
movq -72(%rdi), %r15
movq -64(%rdi), %rbx
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
rolq $44, %r13
rolq $43, %r14
rolq $21, %r15
rolq $14, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -88(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -80(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -72(%rdi)
andnq %r13, %r12, %r15
andnq %r14, %r13, %rcx
xorq %rbx, %r15
xorq %r12, %rcx
movq %r15, -64(%rdi)
# XOR in constant
movq $0x8000000080008008, %rbx
xorq %rbx, %rcx
# Row 1
movq -56(%rdi), %r12
movq -48(%rdi), %r13
movq -40(%rdi), %r14
movq -32(%rdi), %r15
movq -24(%rdi), %rbx
xorq %r10, %r12
xorq %r11, %r13
xorq %rax, %r14
xorq %r8, %r15
xorq %r9, %rbx
rolq $28, %r12
rolq $20, %r13
rolq $3, %r14
rolq $45, %r15
rolq $61, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -48(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, -40(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, -32(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, -24(%rdi)
movq %r15, -56(%rdi)
# Row 2
movq -16(%rdi), %r12
movq -8(%rdi), %r13
movq (%rdi), %r14
movq 8(%rdi), %r15
movq 16(%rdi), %rbx
xorq %r8, %r12
xorq %r9, %r13
xorq %r10, %r14
xorq %r11, %r15
xorq %rax, %rbx
rolq $0x01, %r12
rolq $6, %r13
rolq $25, %r14
rolq $8, %r15
rolq $18, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, -8(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, (%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 8(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 16(%rdi)
movq %r15, -16(%rdi)
# Row 3
movq 24(%rdi), %r12
movq 32(%rdi), %r13
movq 40(%rdi), %r14
movq 48(%rdi), %r15
movq 56(%rdi), %rbx
xorq %r11, %r12
xorq %rax, %r13
xorq %r8, %r14
xorq %r9, %r15
xorq %r10, %rbx
rolq $27, %r12
rolq $36, %r13
rolq $10, %r14
rolq $15, %r15
rolq $56, %rbx
andnq %r15, %r14, %rbp
xorq %r13, %rbp
movq %rbp, 32(%rdi)
andnq %rbx, %r15, %rbp
xorq %r14, %rbp
movq %rbp, 40(%rdi)
andnq %r12, %rbx, %rbp
xorq %r15, %rbp
movq %rbp, 48(%rdi)
andnq %r13, %r12, %rbp
andnq %r14, %r13, %r15
xorq %rbx, %rbp
xorq %r12, %r15
movq %rbp, 56(%rdi)
movq %r15, 24(%rdi)
# Row 4
xorq 64(%rdi), %r9
xorq 72(%rdi), %r10
xorq 80(%rdi), %r11
xorq 88(%rdi), %rax
xorq 96(%rdi), %r8
rorxq $2, %r9, %r12
rorxq $9, %r10, %r13
rorxq $25, %r11, %r14
rorxq $23, %rax, %r15
rorxq $62, %r8, %rbx
andnq %r14, %r13, %rax
andnq %r15, %r14, %r8
andnq %rbx, %r15, %r9
andnq %r12, %rbx, %r10
andnq %r13, %r12, %r11
xorq %rax, %r12
xorq %r8, %r13
xorq %r9, %r14
xorq %r10, %r15
xorq %r11, %rbx
movq %r12, 64(%rdi)
movq %r13, 72(%rdi)
movq %r14, 80(%rdi)
movq %r15, 88(%rdi)
movq %rbx, 96(%rdi)
addq (%rsp), %rsi
subl $0x01, %edx
movq (%rsp), %rbp
jg L_sha3_block_n_bmi2_start
movq %rcx, -96(%rdi)
popq %rbp
popq %rbp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sha3_block_n_bmi2,.-sha3_block_n_bmi2
#endif /* __APPLE__ */
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_sha3_block_avx2_rotl:
.quad 0x0000000000000001,0x000000000000003e
.quad 0x000000000000001c,0x000000000000001b
.quad 0x000000000000002c,0x0000000000000006
.quad 0x0000000000000037,0x0000000000000014
.quad 0x000000000000000a,0x000000000000002b
.quad 0x0000000000000019,0x0000000000000027
.quad 0x000000000000002d,0x000000000000000f
.quad 0x0000000000000015,0x0000000000000008
.quad 0x0000000000000024,0x0000000000000003
.quad 0x0000000000000029,0x0000000000000012
.quad 0x0000000000000002,0x000000000000003d
.quad 0x0000000000000038,0x000000000000000e
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_sha3_block_avx2_rotr:
.quad 0x000000000000003f,0x0000000000000002
.quad 0x0000000000000024,0x0000000000000025
.quad 0x0000000000000014,0x000000000000003a
.quad 0x0000000000000009,0x000000000000002c
.quad 0x0000000000000036,0x0000000000000015
.quad 0x0000000000000027,0x0000000000000019
.quad 0x0000000000000013,0x0000000000000031
.quad 0x000000000000002b,0x0000000000000038
.quad 0x000000000000001c,0x000000000000003d
.quad 0x0000000000000017,0x000000000000002e
.quad 0x000000000000003e,0x0000000000000003
.quad 0x0000000000000008,0x0000000000000032
#ifndef __APPLE__
.text
.globl sha3_block_avx2
.type sha3_block_avx2,@function
.align 16
sha3_block_avx2:
#else
.section __TEXT,__text
.globl _sha3_block_avx2
.p2align 4
_sha3_block_avx2:
#endif /* __APPLE__ */
leaq L_sha3_avx2_r(%rip), %rdx
leaq L_sha3_block_avx2_rotl(%rip), %rax
addq $0x40, %rax
leaq L_sha3_block_avx2_rotr(%rip), %rcx
addq $0x40, %rcx
movq $24, %r8
vpbroadcastq (%rdi), %ymm0
vmovdqu 8(%rdi), %ymm1
vmovdqu 40(%rdi), %ymm2
vmovdqu 72(%rdi), %ymm3
vmovdqu 104(%rdi), %ymm4
vmovdqu 136(%rdi), %ymm5
vmovdqu 168(%rdi), %ymm6
vpermq $57, %ymm2, %ymm7
vpermq $30, %ymm3, %ymm8
vpermq $0x4b, %ymm4, %ymm9
vpermq $0x93, %ymm5, %ymm10
vpblendd $12, %ymm3, %ymm2, %ymm11
vpblendd $0xc0, %ymm5, %ymm4, %ymm12
vpblendd $0xc0, %ymm8, %ymm7, %ymm2
vpblendd $0xf0, %ymm9, %ymm8, %ymm3
vpblendd $3, %ymm9, %ymm10, %ymm4
vpblendd $0xf0, %ymm12, %ymm11, %ymm5
L_sha3_block_avx2_start:
# Calc b[0..4]
vpshufd $0xee, %ymm5, %ymm7
vpxor %ymm2, %ymm1, %ymm15
vpxor %ymm7, %ymm5, %ymm14
vpxor %ymm4, %ymm3, %ymm12
vpermq $0xaa, %ymm14, %ymm7
vpxor %ymm0, %ymm14, %ymm14
vpxor %ymm7, %ymm14, %ymm14
vpxor %ymm6, %ymm15, %ymm15
vpxor %ymm12, %ymm15, %ymm15
vpermq $0x00, %ymm14, %ymm14
# XOR in b[x+4]
vpermq $0x93, %ymm15, %ymm7
vpermq $57, %ymm15, %ymm9
vpermq $0x00, %ymm15, %ymm10
vpermq $0xff, %ymm15, %ymm15
vpblendd $0xc0, %ymm14, %ymm9, %ymm9
vpblendd $3, %ymm14, %ymm7, %ymm14
# Rotate left 1
vpsrlq $63, %ymm10, %ymm8
vpaddq %ymm10, %ymm10, %ymm10
vpsrlq $63, %ymm9, %ymm7
vpaddq %ymm9, %ymm9, %ymm9
vpor %ymm8, %ymm10, %ymm10
vpor %ymm7, %ymm9, %ymm9
vpxor %ymm15, %ymm10, %ymm10
vpxor %ymm14, %ymm9, %ymm9
# XOR in ROTL64(b[x+1])
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm9, %ymm1, %ymm1
vpxor %ymm9, %ymm2, %ymm2
vpxor %ymm9, %ymm3, %ymm3
vpxor %ymm9, %ymm4, %ymm4
vpxor %ymm10, %ymm5, %ymm5
vpxor %ymm9, %ymm6, %ymm6
# Shuffle - Rotate
vmovdqu -64(%rcx), %ymm7
vmovdqu -32(%rcx), %ymm9
vmovdqu (%rcx), %ymm11
vmovdqu -64(%rax), %ymm8
vmovdqu -32(%rax), %ymm10
vmovdqu (%rax), %ymm12
vpsrlvq %ymm7, %ymm1, %ymm7
vpsrlvq %ymm9, %ymm2, %ymm9
vpsrlvq %ymm11, %ymm3, %ymm11
vpsllvq %ymm8, %ymm1, %ymm1
vpsllvq %ymm10, %ymm2, %ymm2
vpsllvq %ymm12, %ymm3, %ymm3
vpor %ymm7, %ymm1, %ymm1
vpor %ymm9, %ymm2, %ymm2
vpor %ymm11, %ymm3, %ymm3
vmovdqu 32(%rcx), %ymm7
vmovdqu 64(%rcx), %ymm9
vmovdqu 96(%rcx), %ymm11
vmovdqu 32(%rax), %ymm8
vmovdqu 64(%rax), %ymm10
vmovdqu 96(%rax), %ymm12
vpsrlvq %ymm7, %ymm4, %ymm7
vpsrlvq %ymm9, %ymm5, %ymm9
vpsrlvq %ymm11, %ymm6, %ymm11
vpsllvq %ymm8, %ymm4, %ymm4
vpsllvq %ymm10, %ymm5, %ymm5
vpsllvq %ymm12, %ymm6, %ymm6
vpor %ymm7, %ymm4, %ymm4
vpor %ymm9, %ymm5, %ymm5
vpor %ymm11, %ymm6, %ymm6
# Row Mix
vpermq $0x00, %ymm2, %ymm12
vpermq $0x55, %ymm3, %ymm13
vpermq $0xaa, %ymm4, %ymm14
vpermq $0xff, %ymm6, %ymm15
vpandn %ymm14, %ymm13, %ymm7
vpandn %ymm15, %ymm14, %ymm8
vpandn %ymm0, %ymm15, %ymm9
vpandn %ymm12, %ymm0, %ymm10
vpandn %ymm13, %ymm12, %ymm11
vpxor %ymm7, %ymm12, %ymm12
vpxor %ymm8, %ymm13, %ymm13
vpxor %ymm9, %ymm14, %ymm14
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm0, %ymm0
vpermq $0x8d, %ymm5, %ymm7
vpblendd $12, %ymm13, %ymm12, %ymm10
vpermq $0x72, %ymm1, %ymm11
vpblendd $0xc0, %ymm15, %ymm14, %ymm9
vpermq $0x87, %ymm2, %ymm12
vpblendd $0xf0, %ymm9, %ymm10, %ymm1
vpermq $0xc9, %ymm3, %ymm13
vpermq $0x9c, %ymm4, %ymm14
vpermq $45, %ymm6, %ymm15
vpblendd $48, %ymm7, %ymm12, %ymm12
vpblendd $3, %ymm7, %ymm13, %ymm13
vpblendd $0xc0, %ymm7, %ymm14, %ymm14
vpblendd $12, %ymm7, %ymm15, %ymm15
vpandn %ymm13, %ymm12, %ymm5
vpandn %ymm14, %ymm13, %ymm7
vpandn %ymm15, %ymm14, %ymm2
vpandn %ymm11, %ymm15, %ymm3
vpandn %ymm12, %ymm11, %ymm4
vpxor %ymm5, %ymm11, %ymm5
vpxor %ymm7, %ymm12, %ymm12
vpxor %ymm2, %ymm13, %ymm13
vpxor %ymm3, %ymm14, %ymm14
vpxor %ymm4, %ymm15, %ymm15
vperm2i128 $32, %ymm14, %ymm12, %ymm3
vperm2i128 $32, %ymm15, %ymm13, %ymm7
vperm2i128 $49, %ymm14, %ymm12, %ymm6
vperm2i128 $49, %ymm15, %ymm13, %ymm8
vpunpcklqdq %ymm7, %ymm3, %ymm2
vpunpckhqdq %ymm7, %ymm3, %ymm3
vpunpcklqdq %ymm8, %ymm6, %ymm4
vpunpckhqdq %ymm8, %ymm6, %ymm6
vpxor (%rdx), %ymm0, %ymm0
addq $32, %rdx
subq $0x01, %r8
jnz L_sha3_block_avx2_start
vpermq $0x93, %ymm2, %ymm7
vpermq $0x4e, %ymm3, %ymm8
vpermq $57, %ymm4, %ymm9
vpblendd $3, %ymm5, %ymm7, %ymm2
vpblendd $3, %ymm7, %ymm8, %ymm3
vpblendd $12, %ymm5, %ymm3, %ymm3
vpblendd $0xc0, %ymm9, %ymm8, %ymm4
vpblendd $48, %ymm5, %ymm4, %ymm4
vpblendd $0xc0, %ymm5, %ymm9, %ymm5
vmovq %xmm0, (%rdi)
vmovdqu %ymm1, 8(%rdi)
vmovdqu %ymm2, 40(%rdi)
vmovdqu %ymm3, 72(%rdi)
vmovdqu %ymm4, 104(%rdi)
vmovdqu %ymm5, 136(%rdi)
vmovdqu %ymm6, 168(%rdi)
vzeroupper
repz retq
#ifndef __APPLE__
.size sha3_block_avx2,.-sha3_block_avx2
#endif /* __APPLE__ */
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_sha3_block_n_avx2_rotl:
.quad 0x0000000000000001,0x000000000000003e
.quad 0x000000000000001c,0x000000000000001b
.quad 0x000000000000002c,0x0000000000000006
.quad 0x0000000000000037,0x0000000000000014
.quad 0x000000000000000a,0x000000000000002b
.quad 0x0000000000000019,0x0000000000000027
.quad 0x000000000000002d,0x000000000000000f
.quad 0x0000000000000015,0x0000000000000008
.quad 0x0000000000000024,0x0000000000000003
.quad 0x0000000000000029,0x0000000000000012
.quad 0x0000000000000002,0x000000000000003d
.quad 0x0000000000000038,0x000000000000000e
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_sha3_block_n_avx2_rotr:
.quad 0x000000000000003f,0x0000000000000002
.quad 0x0000000000000024,0x0000000000000025
.quad 0x0000000000000014,0x000000000000003a
.quad 0x0000000000000009,0x000000000000002c
.quad 0x0000000000000036,0x0000000000000015
.quad 0x0000000000000027,0x0000000000000019
.quad 0x0000000000000013,0x0000000000000031
.quad 0x000000000000002b,0x0000000000000038
.quad 0x000000000000001c,0x000000000000003d
.quad 0x0000000000000017,0x000000000000002e
.quad 0x000000000000003e,0x0000000000000003
.quad 0x0000000000000008,0x0000000000000032
#ifndef __APPLE__
.text
.globl sha3_block_n_avx2
.type sha3_block_n_avx2,@function
.align 16
sha3_block_n_avx2:
#else
.section __TEXT,__text
.globl _sha3_block_n_avx2
.p2align 4
_sha3_block_n_avx2:
#endif /* __APPLE__ */
leaq L_sha3_avx2_r(%rip), %rax
leaq L_sha3_block_n_avx2_rotl(%rip), %r8
addq $0x40, %r8
leaq L_sha3_block_n_avx2_rotr(%rip), %r9
addq $0x40, %r9
vpbroadcastq (%rdi), %ymm0
vmovdqu 8(%rdi), %ymm1
vmovdqu 40(%rdi), %ymm2
vmovdqu 72(%rdi), %ymm3
vmovdqu 104(%rdi), %ymm4
vmovdqu 136(%rdi), %ymm5
vmovdqu 168(%rdi), %ymm6
movq $24, %r10
cmpq $0x88, %rcx
je L_sha3_block_n_avx2_load_256_1
cmpq $0xa8, %rcx
je L_sha3_block_n_avx2_load_128_1
cmpq $0x90, %rcx
je L_sha3_block_n_avx2_load_224_1
cmpq $0x68, %rcx
je L_sha3_block_n_avx2_load_384_1
vpbroadcastq (%rsi), %ymm7
vmovdqu 8(%rsi), %ymm8
vmovdqu 40(%rsi), %ymm9
vpxor %ymm7, %ymm0, %ymm0
vpxor %ymm8, %ymm1, %ymm1
vpxor %ymm9, %ymm2, %ymm2
jmp L_sha3_block_n_avx2_start_1
L_sha3_block_n_avx2_load_128_1:
vpbroadcastq (%rsi), %ymm7
vmovdqu 8(%rsi), %ymm8
vmovdqu 40(%rsi), %ymm9
vmovdqu 72(%rsi), %ymm10
vmovdqu 104(%rsi), %ymm11
vmovdqu 136(%rsi), %ymm12
vpxor %ymm7, %ymm0, %ymm0
vpxor %ymm8, %ymm1, %ymm1
vpxor %ymm9, %ymm2, %ymm2
vpxor %ymm10, %ymm3, %ymm3
vpxor %ymm11, %ymm4, %ymm4
vpxor %ymm12, %ymm5, %ymm5
jmp L_sha3_block_n_avx2_start_1
L_sha3_block_n_avx2_load_224_1:
vpxor %ymm12, %ymm12, %ymm12
vpbroadcastq (%rsi), %ymm7
vmovdqu 8(%rsi), %ymm8
vmovdqu 40(%rsi), %ymm9
vmovdqu 72(%rsi), %ymm10
vmovdqu 104(%rsi), %ymm11
vmovq 136(%rsi), %xmm12
vpxor %ymm7, %ymm0, %ymm0
vpxor %ymm8, %ymm1, %ymm1
vpxor %ymm9, %ymm2, %ymm2
vpxor %ymm10, %ymm3, %ymm3
vpxor %ymm11, %ymm4, %ymm4
vpxor %ymm12, %ymm5, %ymm5
jmp L_sha3_block_n_avx2_start_1
L_sha3_block_n_avx2_load_384_1:
vpbroadcastq (%rsi), %ymm7
vmovdqu 8(%rsi), %ymm8
vmovdqu 40(%rsi), %ymm9
vmovdqu 72(%rsi), %ymm10
vpxor %ymm7, %ymm0, %ymm0
vpxor %ymm8, %ymm1, %ymm1
vpxor %ymm9, %ymm2, %ymm2
vpxor %ymm10, %ymm3, %ymm3
jmp L_sha3_block_n_avx2_start_1
L_sha3_block_n_avx2_load_256_1:
vpbroadcastq (%rsi), %ymm7
vmovdqu 8(%rsi), %ymm8
vmovdqu 40(%rsi), %ymm9
vmovdqu 72(%rsi), %ymm10
vmovdqu 104(%rsi), %ymm11
vpxor %ymm7, %ymm0, %ymm0
vpxor %ymm8, %ymm1, %ymm1
vpxor %ymm9, %ymm2, %ymm2
vpxor %ymm10, %ymm3, %ymm3
vpxor %ymm11, %ymm4, %ymm4
L_sha3_block_n_avx2_start_1:
vpermq $57, %ymm2, %ymm7
vpermq $30, %ymm3, %ymm8
vpermq $0x4b, %ymm4, %ymm9
vpermq $0x93, %ymm5, %ymm10
vpblendd $12, %ymm3, %ymm2, %ymm11
vpblendd $0xc0, %ymm5, %ymm4, %ymm12
vpblendd $0xc0, %ymm8, %ymm7, %ymm2
vpblendd $0xf0, %ymm9, %ymm8, %ymm3
vpblendd $3, %ymm9, %ymm10, %ymm4
vpblendd $0xf0, %ymm12, %ymm11, %ymm5
jmp L_sha3_block_n_avx2_rounds
L_sha3_block_n_avx2_start:
movq $24, %r10
cmpq $0x88, %rcx
je L_sha3_block_n_avx2_load_256
cmpq $0xa8, %rcx
je L_sha3_block_n_avx2_load_128
cmpq $0x90, %rcx
je L_sha3_block_n_avx2_load_224
cmpq $0x68, %rcx
je L_sha3_block_n_avx2_load_384
vpbroadcastq (%rsi), %ymm7
vmovdqu 8(%rsi), %ymm8
vmovdqu 40(%rsi), %ymm9
vpxor %ymm12, %ymm12, %ymm12
vpxor %ymm7, %ymm0, %ymm0
vpxor %ymm8, %ymm1, %ymm1
vpermq $57, %ymm9, %ymm7
vpblendd $0xfc, %ymm12, %ymm9, %ymm15
vpblendd $0xc0, %ymm12, %ymm7, %ymm7
vpxor %ymm7, %ymm2, %ymm2
vpxor %ymm15, %ymm5, %ymm5
jmp L_sha3_block_n_avx2_rounds
L_sha3_block_n_avx2_load_128:
vpbroadcastq (%rsi), %ymm7
vmovdqu 8(%rsi), %ymm8
vmovdqu 40(%rsi), %ymm9
vmovdqu 72(%rsi), %ymm10
vmovdqu 104(%rsi), %ymm11
vmovdqu 136(%rsi), %ymm12
vpxor %ymm7, %ymm0, %ymm0
vpxor %ymm8, %ymm1, %ymm1
vpermq $57, %ymm9, %ymm7
vpermq $30, %ymm10, %ymm8
vpermq $0x4b, %ymm11, %ymm13
vpermq $0x93, %ymm12, %ymm14
vpblendd $12, %ymm10, %ymm9, %ymm15
vpblendd $0xc0, %ymm12, %ymm11, %ymm11
vpblendd $0xc0, %ymm8, %ymm7, %ymm7
vpblendd $0xf0, %ymm13, %ymm8, %ymm8
vpblendd $3, %ymm13, %ymm14, %ymm13
vpblendd $0xf0, %ymm11, %ymm15, %ymm11
vpxor %ymm7, %ymm2, %ymm2
vpxor %ymm8, %ymm3, %ymm3
vpxor %ymm13, %ymm4, %ymm4
vpxor %ymm11, %ymm5, %ymm5
jmp L_sha3_block_n_avx2_rounds
L_sha3_block_n_avx2_load_224:
vpxor %ymm12, %ymm12, %ymm12
vpbroadcastq (%rsi), %ymm7
vmovdqu 8(%rsi), %ymm8
vmovdqu 40(%rsi), %ymm9
vmovdqu 72(%rsi), %ymm10
vmovdqu 104(%rsi), %ymm11
vmovq 136(%rsi), %xmm12
vpxor %ymm7, %ymm0, %ymm0
vpxor %ymm8, %ymm1, %ymm1
vpermq $57, %ymm9, %ymm7
vpermq $30, %ymm10, %ymm8
vpermq $0x4b, %ymm11, %ymm13
vpermq $0x93, %ymm12, %ymm14
vpblendd $12, %ymm10, %ymm9, %ymm15
vpblendd $0xc0, %ymm12, %ymm11, %ymm11
vpblendd $0xc0, %ymm8, %ymm7, %ymm7
vpblendd $0xf0, %ymm13, %ymm8, %ymm8
vpblendd $3, %ymm13, %ymm14, %ymm13
vpblendd $0xf0, %ymm11, %ymm15, %ymm11
vpxor %ymm7, %ymm2, %ymm2
vpxor %ymm8, %ymm3, %ymm3
vpxor %ymm13, %ymm4, %ymm4
vpxor %ymm11, %ymm5, %ymm5
jmp L_sha3_block_n_avx2_rounds
L_sha3_block_n_avx2_load_384:
vpbroadcastq (%rsi), %ymm7
vmovdqu 8(%rsi), %ymm8
vmovdqu 40(%rsi), %ymm9
vmovdqu 72(%rsi), %ymm10
vpxor %ymm12, %ymm12, %ymm12
vpxor %ymm7, %ymm0, %ymm0
vpxor %ymm8, %ymm1, %ymm1
vpermq $57, %ymm9, %ymm7
vpermq $30, %ymm10, %ymm8
vpblendd $0xf3, %ymm12, %ymm10, %ymm13
vpblendd $0xfc, %ymm13, %ymm9, %ymm15
vpblendd $0xc0, %ymm8, %ymm7, %ymm7
vpblendd $0xf0, %ymm12, %ymm8, %ymm8
vpxor %ymm7, %ymm2, %ymm2
vpxor %ymm8, %ymm3, %ymm3
vpxor %ymm15, %ymm5, %ymm5
jmp L_sha3_block_n_avx2_rounds
L_sha3_block_n_avx2_load_256:
vpbroadcastq (%rsi), %ymm7
vmovdqu 8(%rsi), %ymm8
vmovdqu 40(%rsi), %ymm9
vmovdqu 72(%rsi), %ymm10
vmovdqu 104(%rsi), %ymm11
vpxor %ymm12, %ymm12, %ymm12
vpxor %ymm7, %ymm0, %ymm0
vpxor %ymm8, %ymm1, %ymm1
vpermq $57, %ymm9, %ymm7
vpermq $30, %ymm10, %ymm8
vpermq $0x4b, %ymm11, %ymm13
vpblendd $12, %ymm10, %ymm9, %ymm15
vpblendd $0xcf, %ymm12, %ymm11, %ymm11
vpblendd $0xc0, %ymm8, %ymm7, %ymm7
vpblendd $0xf0, %ymm13, %ymm8, %ymm8
vpblendd $0xfc, %ymm12, %ymm13, %ymm13
vpblendd $0xf0, %ymm11, %ymm15, %ymm11
vpxor %ymm7, %ymm2, %ymm2
vpxor %ymm8, %ymm3, %ymm3
vpxor %ymm13, %ymm4, %ymm4
vpxor %ymm11, %ymm5, %ymm5
L_sha3_block_n_avx2_rounds:
# Calc b[0..4]
vpshufd $0xee, %ymm5, %ymm7
vpxor %ymm2, %ymm1, %ymm15
vpxor %ymm7, %ymm5, %ymm14
vpxor %ymm4, %ymm3, %ymm12
vpermq $0xaa, %ymm14, %ymm7
vpxor %ymm0, %ymm14, %ymm14
vpxor %ymm7, %ymm14, %ymm14
vpxor %ymm6, %ymm15, %ymm15
vpxor %ymm12, %ymm15, %ymm15
vpermq $0x00, %ymm14, %ymm14
# XOR in b[x+4]
vpermq $0x93, %ymm15, %ymm7
vpermq $57, %ymm15, %ymm9
vpermq $0x00, %ymm15, %ymm10
vpermq $0xff, %ymm15, %ymm15
vpblendd $0xc0, %ymm14, %ymm9, %ymm9
vpblendd $3, %ymm14, %ymm7, %ymm14
# Rotate left 1
vpsrlq $63, %ymm10, %ymm8
vpaddq %ymm10, %ymm10, %ymm10
vpsrlq $63, %ymm9, %ymm7
vpaddq %ymm9, %ymm9, %ymm9
vpor %ymm8, %ymm10, %ymm10
vpor %ymm7, %ymm9, %ymm9
vpxor %ymm15, %ymm10, %ymm10
vpxor %ymm14, %ymm9, %ymm9
# XOR in ROTL64(b[x+1])
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm9, %ymm1, %ymm1
vpxor %ymm9, %ymm2, %ymm2
vpxor %ymm9, %ymm3, %ymm3
vpxor %ymm9, %ymm4, %ymm4
vpxor %ymm10, %ymm5, %ymm5
vpxor %ymm9, %ymm6, %ymm6
# Shuffle - Rotate
vmovdqu -64(%r9), %ymm7
vmovdqu -32(%r9), %ymm9
vmovdqu (%r9), %ymm11
vmovdqu -64(%r8), %ymm8
vmovdqu -32(%r8), %ymm10
vmovdqu (%r8), %ymm12
vpsrlvq %ymm7, %ymm1, %ymm7
vpsrlvq %ymm9, %ymm2, %ymm9
vpsrlvq %ymm11, %ymm3, %ymm11
vpsllvq %ymm8, %ymm1, %ymm1
vpsllvq %ymm10, %ymm2, %ymm2
vpsllvq %ymm12, %ymm3, %ymm3
vpor %ymm7, %ymm1, %ymm1
vpor %ymm9, %ymm2, %ymm2
vpor %ymm11, %ymm3, %ymm3
vmovdqu 32(%r9), %ymm7
vmovdqu 64(%r9), %ymm9
vmovdqu 96(%r9), %ymm11
vmovdqu 32(%r8), %ymm8
vmovdqu 64(%r8), %ymm10
vmovdqu 96(%r8), %ymm12
vpsrlvq %ymm7, %ymm4, %ymm7
vpsrlvq %ymm9, %ymm5, %ymm9
vpsrlvq %ymm11, %ymm6, %ymm11
vpsllvq %ymm8, %ymm4, %ymm4
vpsllvq %ymm10, %ymm5, %ymm5
vpsllvq %ymm12, %ymm6, %ymm6
vpor %ymm7, %ymm4, %ymm4
vpor %ymm9, %ymm5, %ymm5
vpor %ymm11, %ymm6, %ymm6
# Row Mix
vpermq $0x00, %ymm2, %ymm12
vpermq $0x55, %ymm3, %ymm13
vpermq $0xaa, %ymm4, %ymm14
vpermq $0xff, %ymm6, %ymm15
vpandn %ymm14, %ymm13, %ymm7
vpandn %ymm15, %ymm14, %ymm8
vpandn %ymm0, %ymm15, %ymm9
vpandn %ymm12, %ymm0, %ymm10
vpandn %ymm13, %ymm12, %ymm11
vpxor %ymm7, %ymm12, %ymm12
vpxor %ymm8, %ymm13, %ymm13
vpxor %ymm9, %ymm14, %ymm14
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm0, %ymm0
vpermq $0x8d, %ymm5, %ymm7
vpblendd $12, %ymm13, %ymm12, %ymm10
vpermq $0x72, %ymm1, %ymm11
vpblendd $0xc0, %ymm15, %ymm14, %ymm9
vpermq $0x87, %ymm2, %ymm12
vpblendd $0xf0, %ymm9, %ymm10, %ymm1
vpermq $0xc9, %ymm3, %ymm13
vpermq $0x9c, %ymm4, %ymm14
vpermq $45, %ymm6, %ymm15
vpblendd $48, %ymm7, %ymm12, %ymm12
vpblendd $3, %ymm7, %ymm13, %ymm13
vpblendd $0xc0, %ymm7, %ymm14, %ymm14
vpblendd $12, %ymm7, %ymm15, %ymm15
vpandn %ymm13, %ymm12, %ymm5
vpandn %ymm14, %ymm13, %ymm7
vpandn %ymm15, %ymm14, %ymm2
vpandn %ymm11, %ymm15, %ymm3
vpandn %ymm12, %ymm11, %ymm4
vpxor %ymm5, %ymm11, %ymm5
vpxor %ymm7, %ymm12, %ymm12
vpxor %ymm2, %ymm13, %ymm13
vpxor %ymm3, %ymm14, %ymm14
vpxor %ymm4, %ymm15, %ymm15
vperm2i128 $32, %ymm14, %ymm12, %ymm3
vperm2i128 $32, %ymm15, %ymm13, %ymm7
vperm2i128 $49, %ymm14, %ymm12, %ymm6
vperm2i128 $49, %ymm15, %ymm13, %ymm8
vpunpcklqdq %ymm7, %ymm3, %ymm2
vpunpckhqdq %ymm7, %ymm3, %ymm3
vpunpcklqdq %ymm8, %ymm6, %ymm4
vpunpckhqdq %ymm8, %ymm6, %ymm6
vpxor (%rax), %ymm0, %ymm0
addq $32, %rax
subq $0x01, %r10
jnz L_sha3_block_n_avx2_rounds
subq $0x300, %rax
addq %rcx, %rsi
subl $0x01, %edx
jnz L_sha3_block_n_avx2_start
vpermq $0x93, %ymm2, %ymm7
vpermq $0x4e, %ymm3, %ymm8
vpermq $57, %ymm4, %ymm9
vpblendd $3, %ymm5, %ymm7, %ymm2
vpblendd $3, %ymm7, %ymm8, %ymm3
vpblendd $12, %ymm5, %ymm3, %ymm3
vpblendd $0xc0, %ymm9, %ymm8, %ymm4
vpblendd $48, %ymm5, %ymm4, %ymm4
vpblendd $0xc0, %ymm5, %ymm9, %ymm5
vmovq %xmm0, (%rdi)
vmovdqu %ymm1, 8(%rdi)
vmovdqu %ymm2, 40(%rdi)
vmovdqu %ymm3, 72(%rdi)
vmovdqu %ymm4, 104(%rdi)
vmovdqu %ymm5, 136(%rdi)
vmovdqu %ymm6, 168(%rdi)
vzeroupper
repz retq
#ifndef __APPLE__
.size sha3_block_n_avx2,.-sha3_block_n_avx2
#endif /* __APPLE__ */
#if defined(WOLFSSL_WC_MLKEM) || defined(WOLFSSL_WC_DILITHIUM) || defined(WOLFSSL_HAVE_SLHDSA)
#ifndef __APPLE__
.text
.globl sha3_blocksx4_avx2
.type sha3_blocksx4_avx2,@function
.align 16
sha3_blocksx4_avx2:
#else
.section __TEXT,__text
.globl _sha3_blocksx4_avx2
.p2align 4
_sha3_blocksx4_avx2:
#endif /* __APPLE__ */
leaq L_sha3_x4_avx2_r(%rip), %rdx
vmovdqu (%rdi), %ymm15
movq %rdi, %rax
movq %rdi, %rcx
addq $0x80, %rdi
addq $0x180, %rax
addq $0x280, %rcx
# Round 0
# Calc b[0..4]
vmovdqu -96(%rdi), %ymm11
vmovdqu -64(%rdi), %ymm12
vmovdqu -32(%rdi), %ymm13
vmovdqu (%rdi), %ymm14
vpxor 32(%rdi), %ymm15, %ymm10
vpxor 64(%rdi), %ymm11, %ymm11
vpxor 96(%rdi), %ymm12, %ymm12
vpxor 128(%rdi), %ymm13, %ymm13
vpxor -96(%rax), %ymm14, %ymm14
vpxor -64(%rax), %ymm10, %ymm10
vpxor -32(%rax), %ymm11, %ymm11
vpxor (%rax), %ymm12, %ymm12
vpxor 32(%rax), %ymm13, %ymm13
vpxor 64(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm10, %ymm10
vpxor 128(%rax), %ymm11, %ymm11
vpxor -96(%rcx), %ymm12, %ymm12
vpxor -64(%rcx), %ymm13, %ymm13
vpxor -32(%rcx), %ymm14, %ymm14
vpxor (%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 64(%rdi), %ymm6, %ymm11
vpxor (%rax), %ymm7, %ymm12
vpxor -64(%rcx), %ymm8, %ymm13
vpxor 128(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor (%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, 128(%rcx)
# Row 1
vpxor -32(%rdi), %ymm8, %ymm10
vpxor -96(%rax), %ymm9, %ymm11
vpxor -64(%rax), %ymm5, %ymm12
vpxor 128(%rax), %ymm6, %ymm13
vpxor 64(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, 64(%rcx)
# Row 2
vpxor -96(%rdi), %ymm6, %ymm10
vpxor 96(%rdi), %ymm7, %ymm11
vpxor 32(%rax), %ymm8, %ymm12
vpxor -32(%rcx), %ymm9, %ymm13
vpxor (%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, (%rcx)
# Row 3
vpxor (%rdi), %ymm9, %ymm10
vpxor 32(%rdi), %ymm5, %ymm11
vpxor -32(%rax), %ymm6, %ymm12
vpxor -96(%rcx), %ymm7, %ymm13
vpxor 96(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, 96(%rcx)
# Row 4
vpxor -64(%rdi), %ymm7, %ymm10
vpxor 128(%rdi), %ymm8, %ymm11
vpxor 64(%rax), %ymm9, %ymm12
vpxor 96(%rax), %ymm5, %ymm13
vpxor 32(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, 32(%rcx)
# Round 1
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm10, %ymm10
vpxor -32(%rdi), %ymm10, %ymm10
vpxor (%rdi), %ymm10, %ymm10
vpxor 32(%rdi), %ymm1, %ymm11
vpxor 64(%rdi), %ymm11, %ymm11
vpxor 96(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm11, %ymm11
vpxor -64(%rax), %ymm2, %ymm12
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm12, %ymm12
vpxor 32(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm3, %ymm13
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -64(%rcx), %ymm13, %ymm13
vpxor -32(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm4, %ymm14
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm14, %ymm14
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -96(%rax), %ymm6, %ymm11
vpxor 32(%rax), %ymm7, %ymm12
vpxor -96(%rcx), %ymm8, %ymm13
vpxor 32(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 32(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, 32(%rcx)
# Row 1
vpxor -64(%rcx), %ymm8, %ymm10
vpxor 64(%rcx), %ymm9, %ymm11
vpxor -96(%rdi), %ymm5, %ymm12
vpxor 32(%rdi), %ymm6, %ymm13
vpxor 64(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, 64(%rax)
# Row 2
vpxor 64(%rdi), %ymm6, %ymm10
vpxor -64(%rax), %ymm7, %ymm11
vpxor -32(%rcx), %ymm8, %ymm12
vpxor 96(%rcx), %ymm9, %ymm13
vpxor -64(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, -64(%rdi)
# Row 3
vpxor 128(%rcx), %ymm9, %ymm10
vpxor -32(%rdi), %ymm5, %ymm11
vpxor 96(%rdi), %ymm6, %ymm12
vpxor -32(%rax), %ymm7, %ymm13
vpxor 96(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 96(%rax)
# Row 4
vpxor (%rax), %ymm7, %ymm10
vpxor 128(%rax), %ymm8, %ymm11
vpxor (%rcx), %ymm9, %ymm12
vpxor (%rdi), %ymm5, %ymm13
vpxor 128(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, 128(%rdi)
# Round 2
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -64(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm3, %ymm13
vpxor 64(%rdi), %ymm10, %ymm10
vpxor 96(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm11, %ymm11
vpxor -64(%rax), %ymm11, %ymm11
vpxor -32(%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm12, %ymm12
vpxor 64(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -64(%rcx), %ymm10, %ymm10
vpxor -32(%rcx), %ymm12, %ymm12
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 64(%rcx), %ymm6, %ymm11
vpxor -32(%rcx), %ymm7, %ymm12
vpxor -32(%rax), %ymm8, %ymm13
vpxor 128(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 64(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 128(%rdi)
# Row 1
vpxor -96(%rcx), %ymm8, %ymm10
vpxor 64(%rax), %ymm9, %ymm11
vpxor 64(%rdi), %ymm5, %ymm12
vpxor -32(%rdi), %ymm6, %ymm13
vpxor (%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, (%rcx)
# Row 2
vpxor -96(%rax), %ymm6, %ymm10
vpxor -96(%rdi), %ymm7, %ymm11
vpxor 96(%rcx), %ymm8, %ymm12
vpxor 96(%rax), %ymm9, %ymm13
vpxor (%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, (%rax)
# Row 3
vpxor 32(%rcx), %ymm9, %ymm10
vpxor -64(%rcx), %ymm5, %ymm11
vpxor -64(%rax), %ymm6, %ymm12
vpxor 96(%rdi), %ymm7, %ymm13
vpxor (%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, (%rdi)
# Row 4
vpxor 32(%rax), %ymm7, %ymm10
vpxor 32(%rdi), %ymm8, %ymm11
vpxor -64(%rdi), %ymm9, %ymm12
vpxor 128(%rcx), %ymm5, %ymm13
vpxor 128(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, 128(%rax)
# Round 3
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm3, %ymm13
vpxor (%rdi), %ymm4, %ymm14
vpxor 64(%rdi), %ymm2, %ymm12
vpxor 96(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm14, %ymm14
vpxor -96(%rax), %ymm10, %ymm10
vpxor -64(%rax), %ymm12, %ymm12
vpxor -32(%rax), %ymm13, %ymm13
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm10, %ymm10
vpxor -64(%rcx), %ymm11, %ymm11
vpxor -32(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm14, %ymm14
vpxor 32(%rcx), %ymm10, %ymm10
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 64(%rax), %ymm6, %ymm11
vpxor 96(%rcx), %ymm7, %ymm12
vpxor 96(%rdi), %ymm8, %ymm13
vpxor 128(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 96(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, 128(%rax)
# Row 1
vpxor -32(%rax), %ymm8, %ymm10
vpxor (%rcx), %ymm9, %ymm11
vpxor -96(%rax), %ymm5, %ymm12
vpxor -64(%rcx), %ymm6, %ymm13
vpxor -64(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, -64(%rdi)
# Row 2
vpxor 64(%rcx), %ymm6, %ymm10
vpxor 64(%rdi), %ymm7, %ymm11
vpxor 96(%rax), %ymm8, %ymm12
vpxor (%rdi), %ymm9, %ymm13
vpxor 32(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, 32(%rax)
# Row 3
vpxor 128(%rdi), %ymm9, %ymm10
vpxor -96(%rcx), %ymm5, %ymm11
vpxor -96(%rdi), %ymm6, %ymm12
vpxor -64(%rax), %ymm7, %ymm13
vpxor 128(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, 128(%rcx)
# Row 4
vpxor -32(%rcx), %ymm7, %ymm10
vpxor -32(%rdi), %ymm8, %ymm11
vpxor (%rax), %ymm9, %ymm12
vpxor 32(%rcx), %ymm5, %ymm13
vpxor 32(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 32(%rdi)
# Round 4
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -64(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm3, %ymm13
vpxor 64(%rdi), %ymm1, %ymm11
vpxor 96(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm10, %ymm10
vpxor -96(%rax), %ymm12, %ymm12
vpxor -64(%rax), %ymm13, %ymm13
vpxor -32(%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm11, %ymm11
vpxor 64(%rcx), %ymm10, %ymm10
vpxor 96(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor (%rcx), %ymm6, %ymm11
vpxor 96(%rax), %ymm7, %ymm12
vpxor -64(%rax), %ymm8, %ymm13
vpxor 32(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 128(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, 32(%rdi)
# Row 1
vpxor 96(%rdi), %ymm8, %ymm10
vpxor -64(%rdi), %ymm9, %ymm11
vpxor 64(%rcx), %ymm5, %ymm12
vpxor -96(%rcx), %ymm6, %ymm13
vpxor (%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, (%rax)
# Row 2
vpxor 64(%rax), %ymm6, %ymm10
vpxor -96(%rax), %ymm7, %ymm11
vpxor (%rdi), %ymm8, %ymm12
vpxor 128(%rcx), %ymm9, %ymm13
vpxor -32(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, -32(%rcx)
# Row 3
vpxor 128(%rax), %ymm9, %ymm10
vpxor -32(%rax), %ymm5, %ymm11
vpxor 64(%rdi), %ymm6, %ymm12
vpxor -96(%rdi), %ymm7, %ymm13
vpxor 32(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, 32(%rcx)
# Row 4
vpxor 96(%rcx), %ymm7, %ymm10
vpxor -64(%rcx), %ymm8, %ymm11
vpxor 32(%rax), %ymm9, %ymm12
vpxor 128(%rdi), %ymm5, %ymm13
vpxor -32(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, -32(%rdi)
# Round 5
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -64(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm4, %ymm14
vpxor 64(%rdi), %ymm12, %ymm12
vpxor 96(%rdi), %ymm10, %ymm10
vpxor -96(%rax), %ymm11, %ymm11
vpxor -64(%rax), %ymm13, %ymm13
vpxor -32(%rax), %ymm11, %ymm11
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm10, %ymm10
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -32(%rcx), %ymm14, %ymm14
vpxor (%rcx), %ymm11, %ymm11
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -64(%rdi), %ymm6, %ymm11
vpxor (%rdi), %ymm7, %ymm12
vpxor -96(%rdi), %ymm8, %ymm13
vpxor -32(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 160(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, -32(%rdi)
# Row 1
vpxor -64(%rax), %ymm8, %ymm10
vpxor (%rax), %ymm9, %ymm11
vpxor 64(%rax), %ymm5, %ymm12
vpxor -32(%rax), %ymm6, %ymm13
vpxor 32(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 32(%rax)
# Row 2
vpxor (%rcx), %ymm6, %ymm10
vpxor 64(%rcx), %ymm7, %ymm11
vpxor 128(%rcx), %ymm8, %ymm12
vpxor 32(%rcx), %ymm9, %ymm13
vpxor 96(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 96(%rcx)
# Row 3
vpxor 32(%rdi), %ymm9, %ymm10
vpxor 96(%rdi), %ymm5, %ymm11
vpxor -96(%rax), %ymm6, %ymm12
vpxor 64(%rdi), %ymm7, %ymm13
vpxor 128(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, 128(%rdi)
# Row 4
vpxor 96(%rax), %ymm7, %ymm10
vpxor -96(%rcx), %ymm8, %ymm11
vpxor -32(%rcx), %ymm9, %ymm12
vpxor 128(%rax), %ymm5, %ymm13
vpxor -64(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, -64(%rcx)
# Round 6
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -64(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm10, %ymm10
vpxor 64(%rdi), %ymm13, %ymm13
vpxor 96(%rdi), %ymm11, %ymm11
vpxor 128(%rdi), %ymm14, %ymm14
vpxor -96(%rax), %ymm12, %ymm12
vpxor -64(%rax), %ymm10, %ymm10
vpxor -32(%rax), %ymm13, %ymm13
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm12, %ymm12
vpxor (%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm14, %ymm14
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor (%rax), %ymm6, %ymm11
vpxor 128(%rcx), %ymm7, %ymm12
vpxor 64(%rdi), %ymm8, %ymm13
vpxor -64(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 192(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, -64(%rcx)
# Row 1
vpxor -96(%rdi), %ymm8, %ymm10
vpxor 32(%rax), %ymm9, %ymm11
vpxor (%rcx), %ymm5, %ymm12
vpxor 96(%rdi), %ymm6, %ymm13
vpxor -32(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, -32(%rcx)
# Row 2
vpxor -64(%rdi), %ymm6, %ymm10
vpxor 64(%rax), %ymm7, %ymm11
vpxor 32(%rcx), %ymm8, %ymm12
vpxor 128(%rdi), %ymm9, %ymm13
vpxor 96(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, 96(%rax)
# Row 3
vpxor -32(%rdi), %ymm9, %ymm10
vpxor -64(%rax), %ymm5, %ymm11
vpxor 64(%rcx), %ymm6, %ymm12
vpxor -96(%rax), %ymm7, %ymm13
vpxor 128(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, 128(%rax)
# Row 4
vpxor (%rdi), %ymm7, %ymm10
vpxor -32(%rax), %ymm8, %ymm11
vpxor 96(%rcx), %ymm9, %ymm12
vpxor 32(%rdi), %ymm5, %ymm13
vpxor -96(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, -96(%rcx)
# Round 7
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm10, %ymm10
vpxor -64(%rdi), %ymm10, %ymm10
vpxor -32(%rdi), %ymm10, %ymm10
vpxor 64(%rdi), %ymm3, %ymm13
vpxor 96(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm13, %ymm13
vpxor -96(%rax), %ymm13, %ymm13
vpxor -64(%rax), %ymm1, %ymm11
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm4, %ymm14
vpxor 128(%rax), %ymm14, %ymm14
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm14, %ymm14
vpxor (%rcx), %ymm2, %ymm12
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 32(%rax), %ymm6, %ymm11
vpxor 32(%rcx), %ymm7, %ymm12
vpxor -96(%rax), %ymm8, %ymm13
vpxor -96(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 224(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, -96(%rcx)
# Row 1
vpxor 64(%rdi), %ymm8, %ymm10
vpxor -32(%rcx), %ymm9, %ymm11
vpxor -64(%rdi), %ymm5, %ymm12
vpxor -64(%rax), %ymm6, %ymm13
vpxor 96(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, 96(%rcx)
# Row 2
vpxor (%rax), %ymm6, %ymm10
vpxor (%rcx), %ymm7, %ymm11
vpxor 128(%rdi), %ymm8, %ymm12
vpxor 128(%rax), %ymm9, %ymm13
vpxor (%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, (%rdi)
# Row 3
vpxor -64(%rcx), %ymm9, %ymm10
vpxor -96(%rdi), %ymm5, %ymm11
vpxor 64(%rax), %ymm6, %ymm12
vpxor 64(%rcx), %ymm7, %ymm13
vpxor 32(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, 32(%rdi)
# Row 4
vpxor 128(%rcx), %ymm7, %ymm10
vpxor 96(%rdi), %ymm8, %ymm11
vpxor 96(%rax), %ymm9, %ymm12
vpxor -32(%rdi), %ymm5, %ymm13
vpxor -32(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, -32(%rax)
# Round 8
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm1, %ymm11
vpxor -64(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm4, %ymm14
vpxor 32(%rdi), %ymm14, %ymm14
vpxor 64(%rdi), %ymm10, %ymm10
vpxor 128(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm3, %ymm13
vpxor -64(%rax), %ymm13, %ymm13
vpxor (%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -64(%rcx), %ymm10, %ymm10
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm11, %ymm11
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -32(%rcx), %ymm6, %ymm11
vpxor 128(%rdi), %ymm7, %ymm12
vpxor 64(%rcx), %ymm8, %ymm13
vpxor -32(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 256(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, -32(%rax)
# Row 1
vpxor -96(%rax), %ymm8, %ymm10
vpxor 96(%rcx), %ymm9, %ymm11
vpxor (%rax), %ymm5, %ymm12
vpxor -96(%rdi), %ymm6, %ymm13
vpxor 96(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, 96(%rax)
# Row 2
vpxor 32(%rax), %ymm6, %ymm10
vpxor -64(%rdi), %ymm7, %ymm11
vpxor 128(%rax), %ymm8, %ymm12
vpxor 32(%rdi), %ymm9, %ymm13
vpxor 128(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, 128(%rcx)
# Row 3
vpxor -96(%rcx), %ymm9, %ymm10
vpxor 64(%rdi), %ymm5, %ymm11
vpxor (%rcx), %ymm6, %ymm12
vpxor 64(%rax), %ymm7, %ymm13
vpxor -32(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, -32(%rdi)
# Row 4
vpxor 32(%rcx), %ymm7, %ymm10
vpxor -64(%rax), %ymm8, %ymm11
vpxor (%rdi), %ymm9, %ymm12
vpxor -64(%rcx), %ymm5, %ymm13
vpxor 96(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, 96(%rdi)
# Round 9
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -64(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm4, %ymm14
vpxor 32(%rdi), %ymm13, %ymm13
vpxor 64(%rdi), %ymm11, %ymm11
vpxor 128(%rdi), %ymm2, %ymm12
vpxor -96(%rax), %ymm10, %ymm10
vpxor -32(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm12, %ymm12
vpxor 32(%rax), %ymm10, %ymm10
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm14, %ymm14
vpxor 128(%rax), %ymm12, %ymm12
vpxor -96(%rcx), %ymm10, %ymm10
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm11, %ymm11
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 96(%rcx), %ymm6, %ymm11
vpxor 128(%rax), %ymm7, %ymm12
vpxor 64(%rax), %ymm8, %ymm13
vpxor 96(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 288(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 1
vpxor 64(%rcx), %ymm8, %ymm10
vpxor 96(%rax), %ymm9, %ymm11
vpxor 32(%rax), %ymm5, %ymm12
vpxor 64(%rdi), %ymm6, %ymm13
vpxor (%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, (%rdi)
# Row 2
vpxor -32(%rcx), %ymm6, %ymm10
vpxor (%rax), %ymm7, %ymm11
vpxor 32(%rdi), %ymm8, %ymm12
vpxor -32(%rdi), %ymm9, %ymm13
vpxor 32(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, 32(%rcx)
# Row 3
vpxor -32(%rax), %ymm9, %ymm10
vpxor -96(%rax), %ymm5, %ymm11
vpxor -64(%rdi), %ymm6, %ymm12
vpxor (%rcx), %ymm7, %ymm13
vpxor -64(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, -64(%rcx)
# Row 4
vpxor 128(%rdi), %ymm7, %ymm10
vpxor -96(%rdi), %ymm8, %ymm11
vpxor 128(%rcx), %ymm9, %ymm12
vpxor -96(%rcx), %ymm5, %ymm13
vpxor -64(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, -64(%rax)
# Round 10
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm2, %ymm12
vpxor -32(%rdi), %ymm3, %ymm13
vpxor (%rdi), %ymm4, %ymm14
vpxor 32(%rdi), %ymm12, %ymm12
vpxor 64(%rdi), %ymm13, %ymm13
vpxor 96(%rdi), %ymm14, %ymm14
vpxor -96(%rax), %ymm1, %ymm11
vpxor -32(%rax), %ymm10, %ymm10
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm12, %ymm12
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm11, %ymm11
vpxor 128(%rax), %ymm12, %ymm12
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm10, %ymm10
vpxor (%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm10, %ymm10
vpxor 96(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 96(%rax), %ymm6, %ymm11
vpxor 32(%rdi), %ymm7, %ymm12
vpxor (%rcx), %ymm8, %ymm13
vpxor -64(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 320(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, -64(%rax)
# Row 1
vpxor 64(%rax), %ymm8, %ymm10
vpxor (%rdi), %ymm9, %ymm11
vpxor -32(%rcx), %ymm5, %ymm12
vpxor -96(%rax), %ymm6, %ymm13
vpxor 128(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, 128(%rcx)
# Row 2
vpxor 96(%rcx), %ymm6, %ymm10
vpxor 32(%rax), %ymm7, %ymm11
vpxor -32(%rdi), %ymm8, %ymm12
vpxor -64(%rcx), %ymm9, %ymm13
vpxor 128(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, 128(%rdi)
# Row 3
vpxor 96(%rdi), %ymm9, %ymm10
vpxor 64(%rcx), %ymm5, %ymm11
vpxor (%rax), %ymm6, %ymm12
vpxor -64(%rdi), %ymm7, %ymm13
vpxor -96(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -96(%rcx)
# Row 4
vpxor 128(%rax), %ymm7, %ymm10
vpxor 64(%rdi), %ymm8, %ymm11
vpxor 32(%rcx), %ymm9, %ymm12
vpxor -32(%rax), %ymm5, %ymm13
vpxor -96(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, -96(%rdi)
# Round 11
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm12, %ymm12
vpxor 96(%rdi), %ymm10, %ymm10
vpxor 128(%rdi), %ymm4, %ymm14
vpxor -96(%rax), %ymm13, %ymm13
vpxor -64(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm12, %ymm12
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm11, %ymm11
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -64(%rcx), %ymm13, %ymm13
vpxor -32(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm10, %ymm10
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor (%rdi), %ymm6, %ymm11
vpxor -32(%rdi), %ymm7, %ymm12
vpxor -64(%rdi), %ymm8, %ymm13
vpxor -96(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 352(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -96(%rdi)
# Row 1
vpxor (%rcx), %ymm8, %ymm10
vpxor 128(%rcx), %ymm9, %ymm11
vpxor 96(%rcx), %ymm5, %ymm12
vpxor 64(%rcx), %ymm6, %ymm13
vpxor 32(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, 32(%rcx)
# Row 2
vpxor 96(%rax), %ymm6, %ymm10
vpxor -32(%rcx), %ymm7, %ymm11
vpxor -64(%rcx), %ymm8, %ymm12
vpxor -96(%rcx), %ymm9, %ymm13
vpxor 128(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, 128(%rax)
# Row 3
vpxor -64(%rax), %ymm9, %ymm10
vpxor 64(%rax), %ymm5, %ymm11
vpxor 32(%rax), %ymm6, %ymm12
vpxor (%rax), %ymm7, %ymm13
vpxor -32(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, -32(%rax)
# Row 4
vpxor 32(%rdi), %ymm7, %ymm10
vpxor -96(%rax), %ymm8, %ymm11
vpxor 128(%rdi), %ymm9, %ymm12
vpxor 96(%rdi), %ymm5, %ymm13
vpxor 64(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, 64(%rdi)
# Round 12
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -64(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm1, %ymm11
vpxor -64(%rax), %ymm10, %ymm10
vpxor -32(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm12, %ymm12
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm10, %ymm10
vpxor 128(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -64(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 128(%rcx), %ymm6, %ymm11
vpxor -64(%rcx), %ymm7, %ymm12
vpxor (%rax), %ymm8, %ymm13
vpxor 64(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 384(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, 64(%rdi)
# Row 1
vpxor -64(%rdi), %ymm8, %ymm10
vpxor 32(%rcx), %ymm9, %ymm11
vpxor 96(%rax), %ymm5, %ymm12
vpxor 64(%rax), %ymm6, %ymm13
vpxor 128(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, 128(%rdi)
# Row 2
vpxor (%rdi), %ymm6, %ymm10
vpxor 96(%rcx), %ymm7, %ymm11
vpxor -96(%rcx), %ymm8, %ymm12
vpxor -32(%rax), %ymm9, %ymm13
vpxor 32(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 32(%rdi)
# Row 3
vpxor -96(%rdi), %ymm9, %ymm10
vpxor (%rcx), %ymm5, %ymm11
vpxor -32(%rcx), %ymm6, %ymm12
vpxor 32(%rax), %ymm7, %ymm13
vpxor 96(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 4
vpxor -32(%rdi), %ymm7, %ymm10
vpxor 64(%rcx), %ymm8, %ymm11
vpxor 128(%rax), %ymm9, %ymm12
vpxor -64(%rax), %ymm5, %ymm13
vpxor -96(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, -96(%rax)
# Round 13
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm10, %ymm10
vpxor -64(%rdi), %ymm10, %ymm10
vpxor (%rdi), %ymm10, %ymm10
vpxor 32(%rdi), %ymm4, %ymm14
vpxor 64(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm14, %ymm14
vpxor 128(%rdi), %ymm14, %ymm14
vpxor -32(%rax), %ymm3, %ymm13
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm13, %ymm13
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm2, %ymm12
vpxor -96(%rcx), %ymm12, %ymm12
vpxor -64(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm1, %ymm11
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm11, %ymm11
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 32(%rcx), %ymm6, %ymm11
vpxor -96(%rcx), %ymm7, %ymm12
vpxor 32(%rax), %ymm8, %ymm13
vpxor -96(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 416(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, -96(%rax)
# Row 1
vpxor (%rax), %ymm8, %ymm10
vpxor 128(%rdi), %ymm9, %ymm11
vpxor (%rdi), %ymm5, %ymm12
vpxor (%rcx), %ymm6, %ymm13
vpxor 128(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, 128(%rax)
# Row 2
vpxor 128(%rcx), %ymm6, %ymm10
vpxor 96(%rax), %ymm7, %ymm11
vpxor -32(%rax), %ymm8, %ymm12
vpxor 96(%rdi), %ymm9, %ymm13
vpxor -32(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, -32(%rdi)
# Row 3
vpxor 64(%rdi), %ymm9, %ymm10
vpxor -64(%rdi), %ymm5, %ymm11
vpxor 96(%rcx), %ymm6, %ymm12
vpxor -32(%rcx), %ymm7, %ymm13
vpxor -64(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, -64(%rax)
# Row 4
vpxor -64(%rcx), %ymm7, %ymm10
vpxor 64(%rax), %ymm8, %ymm11
vpxor 32(%rdi), %ymm9, %ymm12
vpxor -96(%rdi), %ymm5, %ymm13
vpxor 64(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, 64(%rcx)
# Round 14
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm2, %ymm12
vpxor 64(%rdi), %ymm10, %ymm10
vpxor 96(%rdi), %ymm3, %ymm13
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm14, %ymm14
vpxor -64(%rax), %ymm14, %ymm14
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm11, %ymm11
vpxor 128(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 128(%rdi), %ymm6, %ymm11
vpxor -32(%rax), %ymm7, %ymm12
vpxor -32(%rcx), %ymm8, %ymm13
vpxor 64(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 448(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, 64(%rcx)
# Row 1
vpxor 32(%rax), %ymm8, %ymm10
vpxor 128(%rax), %ymm9, %ymm11
vpxor 128(%rcx), %ymm5, %ymm12
vpxor -64(%rdi), %ymm6, %ymm13
vpxor 32(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, 32(%rdi)
# Row 2
vpxor 32(%rcx), %ymm6, %ymm10
vpxor (%rdi), %ymm7, %ymm11
vpxor 96(%rdi), %ymm8, %ymm12
vpxor -64(%rax), %ymm9, %ymm13
vpxor -64(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, -64(%rcx)
# Row 3
vpxor -96(%rax), %ymm9, %ymm10
vpxor (%rax), %ymm5, %ymm11
vpxor 96(%rax), %ymm6, %ymm12
vpxor 96(%rcx), %ymm7, %ymm13
vpxor -96(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, -96(%rdi)
# Row 4
vpxor -96(%rcx), %ymm7, %ymm10
vpxor (%rcx), %ymm8, %ymm11
vpxor -32(%rdi), %ymm9, %ymm12
vpxor 64(%rdi), %ymm5, %ymm13
vpxor 64(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, 64(%rax)
# Round 15
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -64(%rdi), %ymm3, %ymm13
vpxor (%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm2, %ymm12
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm10, %ymm10
vpxor -64(%rax), %ymm13, %ymm13
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm11, %ymm11
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm10, %ymm10
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 128(%rax), %ymm6, %ymm11
vpxor 96(%rdi), %ymm7, %ymm12
vpxor 96(%rcx), %ymm8, %ymm13
vpxor 64(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 480(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, 64(%rax)
# Row 1
vpxor -32(%rcx), %ymm8, %ymm10
vpxor 32(%rdi), %ymm9, %ymm11
vpxor 32(%rcx), %ymm5, %ymm12
vpxor (%rax), %ymm6, %ymm13
vpxor -32(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, -32(%rdi)
# Row 2
vpxor 128(%rdi), %ymm6, %ymm10
vpxor 128(%rcx), %ymm7, %ymm11
vpxor -64(%rax), %ymm8, %ymm12
vpxor -96(%rdi), %ymm9, %ymm13
vpxor -96(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, -96(%rcx)
# Row 3
vpxor 64(%rcx), %ymm9, %ymm10
vpxor 32(%rax), %ymm5, %ymm11
vpxor (%rdi), %ymm6, %ymm12
vpxor 96(%rax), %ymm7, %ymm13
vpxor 64(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, 64(%rdi)
# Row 4
vpxor -32(%rax), %ymm7, %ymm10
vpxor -64(%rdi), %ymm8, %ymm11
vpxor -64(%rcx), %ymm9, %ymm12
vpxor -96(%rax), %ymm5, %ymm13
vpxor (%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, (%rcx)
# Round 16
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm1, %ymm11
vpxor 64(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm12, %ymm12
vpxor 128(%rdi), %ymm10, %ymm10
vpxor -64(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm13, %ymm13
vpxor 128(%rax), %ymm11, %ymm11
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm10, %ymm10
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 32(%rdi), %ymm6, %ymm11
vpxor -64(%rax), %ymm7, %ymm12
vpxor 96(%rax), %ymm8, %ymm13
vpxor (%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 512(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, (%rcx)
# Row 1
vpxor 96(%rcx), %ymm8, %ymm10
vpxor -32(%rdi), %ymm9, %ymm11
vpxor 128(%rdi), %ymm5, %ymm12
vpxor 32(%rax), %ymm6, %ymm13
vpxor -64(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, -64(%rcx)
# Row 2
vpxor 128(%rax), %ymm6, %ymm10
vpxor 32(%rcx), %ymm7, %ymm11
vpxor -96(%rdi), %ymm8, %ymm12
vpxor 64(%rdi), %ymm9, %ymm13
vpxor -32(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, -32(%rax)
# Row 3
vpxor 64(%rax), %ymm9, %ymm10
vpxor -32(%rcx), %ymm5, %ymm11
vpxor 128(%rcx), %ymm6, %ymm12
vpxor (%rdi), %ymm7, %ymm13
vpxor -96(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, -96(%rax)
# Row 4
vpxor 96(%rdi), %ymm7, %ymm10
vpxor (%rax), %ymm8, %ymm11
vpxor -96(%rcx), %ymm9, %ymm12
vpxor 64(%rcx), %ymm5, %ymm13
vpxor -64(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, -64(%rdi)
# Round 17
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -32(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm11, %ymm11
vpxor 64(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm4, %ymm14
vpxor -64(%rax), %ymm12, %ymm12
vpxor -32(%rax), %ymm14, %ymm14
vpxor 32(%rax), %ymm13, %ymm13
vpxor 64(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm13, %ymm13
vpxor 128(%rax), %ymm10, %ymm10
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm14, %ymm14
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm10, %ymm10
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -32(%rdi), %ymm6, %ymm11
vpxor -96(%rdi), %ymm7, %ymm12
vpxor (%rdi), %ymm8, %ymm13
vpxor -64(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 544(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, -64(%rdi)
# Row 1
vpxor 96(%rax), %ymm8, %ymm10
vpxor -64(%rcx), %ymm9, %ymm11
vpxor 128(%rax), %ymm5, %ymm12
vpxor -32(%rcx), %ymm6, %ymm13
vpxor -96(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, -96(%rcx)
# Row 2
vpxor 32(%rdi), %ymm6, %ymm10
vpxor 128(%rdi), %ymm7, %ymm11
vpxor 64(%rdi), %ymm8, %ymm12
vpxor -96(%rax), %ymm9, %ymm13
vpxor 96(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 3
vpxor (%rcx), %ymm9, %ymm10
vpxor 96(%rcx), %ymm5, %ymm11
vpxor 32(%rcx), %ymm6, %ymm12
vpxor 128(%rcx), %ymm7, %ymm13
vpxor 64(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, 64(%rcx)
# Row 4
vpxor -64(%rax), %ymm7, %ymm10
vpxor 32(%rax), %ymm8, %ymm11
vpxor -32(%rax), %ymm9, %ymm12
vpxor 64(%rax), %ymm5, %ymm13
vpxor (%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, (%rax)
# Round 18
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -64(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm10, %ymm10
vpxor 64(%rdi), %ymm12, %ymm12
vpxor 96(%rdi), %ymm14, %ymm14
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm10, %ymm10
vpxor 128(%rax), %ymm12, %ymm12
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -64(%rcx), %ymm11, %ymm11
vpxor -32(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm11, %ymm11
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -64(%rcx), %ymm6, %ymm11
vpxor 64(%rdi), %ymm7, %ymm12
vpxor 128(%rcx), %ymm8, %ymm13
vpxor (%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 576(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, (%rax)
# Row 1
vpxor (%rdi), %ymm8, %ymm10
vpxor -96(%rcx), %ymm9, %ymm11
vpxor 32(%rdi), %ymm5, %ymm12
vpxor 96(%rcx), %ymm6, %ymm13
vpxor -32(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, -32(%rax)
# Row 2
vpxor -32(%rdi), %ymm6, %ymm10
vpxor 128(%rax), %ymm7, %ymm11
vpxor -96(%rax), %ymm8, %ymm12
vpxor 64(%rcx), %ymm9, %ymm13
vpxor -64(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, -64(%rax)
# Row 3
vpxor -64(%rdi), %ymm9, %ymm10
vpxor 96(%rax), %ymm5, %ymm11
vpxor 128(%rdi), %ymm6, %ymm12
vpxor 32(%rcx), %ymm7, %ymm13
vpxor 64(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 64(%rax)
# Row 4
vpxor -96(%rdi), %ymm7, %ymm10
vpxor -32(%rcx), %ymm8, %ymm11
vpxor 96(%rdi), %ymm9, %ymm12
vpxor (%rcx), %ymm5, %ymm13
vpxor 32(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, 32(%rax)
# Round 19
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm10, %ymm10
vpxor -32(%rdi), %ymm10, %ymm10
vpxor (%rdi), %ymm10, %ymm10
vpxor 32(%rdi), %ymm2, %ymm12
vpxor 64(%rdi), %ymm12, %ymm12
vpxor 128(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm12, %ymm12
vpxor -64(%rax), %ymm4, %ymm14
vpxor -32(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm1, %ymm11
vpxor 128(%rax), %ymm11, %ymm11
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm11, %ymm11
vpxor 32(%rcx), %ymm3, %ymm13
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -96(%rcx), %ymm6, %ymm11
vpxor -96(%rax), %ymm7, %ymm12
vpxor 32(%rcx), %ymm8, %ymm13
vpxor 32(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 608(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 32(%rax)
# Row 1
vpxor 128(%rcx), %ymm8, %ymm10
vpxor -32(%rax), %ymm9, %ymm11
vpxor -32(%rdi), %ymm5, %ymm12
vpxor 96(%rax), %ymm6, %ymm13
vpxor 96(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 2
vpxor -64(%rcx), %ymm6, %ymm10
vpxor 32(%rdi), %ymm7, %ymm11
vpxor 64(%rcx), %ymm8, %ymm12
vpxor 64(%rax), %ymm9, %ymm13
vpxor -96(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, -96(%rdi)
# Row 3
vpxor (%rax), %ymm9, %ymm10
vpxor (%rdi), %ymm5, %ymm11
vpxor 128(%rax), %ymm6, %ymm12
vpxor 128(%rdi), %ymm7, %ymm13
vpxor (%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, (%rcx)
# Row 4
vpxor 64(%rdi), %ymm7, %ymm10
vpxor 96(%rcx), %ymm8, %ymm11
vpxor -64(%rax), %ymm9, %ymm12
vpxor -64(%rdi), %ymm5, %ymm13
vpxor -32(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -32(%rcx)
# Round 20
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm11, %ymm11
vpxor 96(%rdi), %ymm14, %ymm14
vpxor 128(%rdi), %ymm3, %ymm13
vpxor -96(%rax), %ymm12, %ymm12
vpxor -32(%rax), %ymm11, %ymm11
vpxor (%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm13, %ymm13
vpxor 128(%rax), %ymm12, %ymm12
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm10, %ymm10
vpxor (%rcx), %ymm14, %ymm14
vpxor 32(%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -32(%rax), %ymm6, %ymm11
vpxor 64(%rcx), %ymm7, %ymm12
vpxor 128(%rdi), %ymm8, %ymm13
vpxor -32(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 640(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, -32(%rcx)
# Row 1
vpxor 32(%rcx), %ymm8, %ymm10
vpxor 96(%rdi), %ymm9, %ymm11
vpxor -64(%rcx), %ymm5, %ymm12
vpxor (%rdi), %ymm6, %ymm13
vpxor -64(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, -64(%rax)
# Row 2
vpxor -96(%rcx), %ymm6, %ymm10
vpxor -32(%rdi), %ymm7, %ymm11
vpxor 64(%rax), %ymm8, %ymm12
vpxor (%rcx), %ymm9, %ymm13
vpxor 64(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, 64(%rdi)
# Row 3
vpxor 32(%rax), %ymm9, %ymm10
vpxor 128(%rcx), %ymm5, %ymm11
vpxor 32(%rdi), %ymm6, %ymm12
vpxor 128(%rax), %ymm7, %ymm13
vpxor -64(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, -64(%rdi)
# Row 4
vpxor -96(%rax), %ymm7, %ymm10
vpxor 96(%rax), %ymm8, %ymm11
vpxor -96(%rdi), %ymm9, %ymm12
vpxor (%rax), %ymm5, %ymm13
vpxor 96(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, 96(%rcx)
# Round 21
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm2, %ymm12
vpxor 64(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm11, %ymm11
vpxor 128(%rdi), %ymm13, %ymm13
vpxor -64(%rax), %ymm14, %ymm14
vpxor -32(%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm10, %ymm10
vpxor 64(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm10, %ymm10
vpxor -64(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm14, %ymm14
vpxor (%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm10, %ymm10
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 96(%rdi), %ymm6, %ymm11
vpxor 64(%rax), %ymm7, %ymm12
vpxor 128(%rax), %ymm8, %ymm13
vpxor 96(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 672(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, 96(%rcx)
# Row 1
vpxor 128(%rdi), %ymm8, %ymm10
vpxor -64(%rax), %ymm9, %ymm11
vpxor -96(%rcx), %ymm5, %ymm12
vpxor 128(%rcx), %ymm6, %ymm13
vpxor -96(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, -96(%rdi)
# Row 2
vpxor -32(%rax), %ymm6, %ymm10
vpxor -64(%rcx), %ymm7, %ymm11
vpxor (%rcx), %ymm8, %ymm12
vpxor -64(%rdi), %ymm9, %ymm13
vpxor -96(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -96(%rax)
# Row 3
vpxor -32(%rcx), %ymm9, %ymm10
vpxor 32(%rcx), %ymm5, %ymm11
vpxor -32(%rdi), %ymm6, %ymm12
vpxor 32(%rdi), %ymm7, %ymm13
vpxor (%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, (%rax)
# Row 4
vpxor 64(%rcx), %ymm7, %ymm10
vpxor (%rdi), %ymm8, %ymm11
vpxor 64(%rdi), %ymm9, %ymm12
vpxor 32(%rax), %ymm5, %ymm13
vpxor 96(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, 96(%rax)
# Round 22
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -64(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm13, %ymm13
vpxor 96(%rdi), %ymm1, %ymm11
vpxor 128(%rdi), %ymm10, %ymm10
vpxor -96(%rax), %ymm14, %ymm14
vpxor -64(%rax), %ymm11, %ymm11
vpxor -32(%rax), %ymm10, %ymm10
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm12, %ymm12
vpxor -64(%rcx), %ymm11, %ymm11
vpxor -32(%rcx), %ymm10, %ymm10
vpxor (%rcx), %ymm12, %ymm12
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm14, %ymm14
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -64(%rax), %ymm6, %ymm11
vpxor (%rcx), %ymm7, %ymm12
vpxor 32(%rdi), %ymm8, %ymm13
vpxor 96(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 704(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, 96(%rax)
# Row 1
vpxor 128(%rax), %ymm8, %ymm10
vpxor -96(%rdi), %ymm9, %ymm11
vpxor -32(%rax), %ymm5, %ymm12
vpxor 32(%rcx), %ymm6, %ymm13
vpxor 64(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 64(%rdi)
# Row 2
vpxor 96(%rdi), %ymm6, %ymm10
vpxor -96(%rcx), %ymm7, %ymm11
vpxor -64(%rdi), %ymm8, %ymm12
vpxor (%rax), %ymm9, %ymm13
vpxor 64(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, 64(%rcx)
# Row 3
vpxor 96(%rcx), %ymm9, %ymm10
vpxor 128(%rdi), %ymm5, %ymm11
vpxor -64(%rcx), %ymm6, %ymm12
vpxor -32(%rdi), %ymm7, %ymm13
vpxor 32(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, 32(%rax)
# Row 4
vpxor 64(%rax), %ymm7, %ymm10
vpxor 128(%rcx), %ymm8, %ymm11
vpxor -96(%rax), %ymm9, %ymm12
vpxor -32(%rcx), %ymm5, %ymm13
vpxor (%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, (%rdi)
# Round 23
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm1, %ymm11
vpxor -64(%rdi), %ymm2, %ymm12
vpxor -32(%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm13, %ymm13
vpxor 64(%rdi), %ymm4, %ymm14
vpxor 96(%rdi), %ymm10, %ymm10
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -64(%rax), %ymm11, %ymm11
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm14, %ymm14
vpxor 128(%rax), %ymm10, %ymm10
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm12, %ymm12
vpxor 32(%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -96(%rdi), %ymm6, %ymm11
vpxor -64(%rdi), %ymm7, %ymm12
vpxor -32(%rdi), %ymm8, %ymm13
vpxor (%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 736(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, (%rdi)
# Row 1
vpxor 32(%rdi), %ymm8, %ymm10
vpxor 64(%rdi), %ymm9, %ymm11
vpxor 96(%rdi), %ymm5, %ymm12
vpxor 128(%rdi), %ymm6, %ymm13
vpxor -96(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, -96(%rax)
# Row 2
vpxor -64(%rax), %ymm6, %ymm10
vpxor -32(%rax), %ymm7, %ymm11
vpxor (%rax), %ymm8, %ymm12
vpxor 32(%rax), %ymm9, %ymm13
vpxor 64(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, 64(%rax)
# Row 3
vpxor 96(%rax), %ymm9, %ymm10
vpxor 128(%rax), %ymm5, %ymm11
vpxor -96(%rcx), %ymm6, %ymm12
vpxor -64(%rcx), %ymm7, %ymm13
vpxor -32(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, -32(%rcx)
# Row 4
vpxor (%rcx), %ymm7, %ymm10
vpxor 32(%rcx), %ymm8, %ymm11
vpxor 64(%rcx), %ymm9, %ymm12
vpxor 96(%rcx), %ymm5, %ymm13
vpxor 128(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, 128(%rcx)
subq $0x80, %rdi
vmovdqu %ymm15, (%rdi)
vzeroupper
repz retq
#ifndef __APPLE__
.size sha3_blocksx4_avx2,.-sha3_blocksx4_avx2
#endif /* __APPLE__ */
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 32
#else
.p2align 5
#endif /* __APPLE__ */
L_sha3_128_blockx4_seed_avx2_end_mark:
.quad 0x8000000000000000, 0x8000000000000000
.quad 0x8000000000000000, 0x8000000000000000
#ifndef __APPLE__
.text
.globl sha3_128_blocksx4_seed_avx2
.type sha3_128_blocksx4_seed_avx2,@function
.align 16
sha3_128_blocksx4_seed_avx2:
#else
.section __TEXT,__text
.globl _sha3_128_blocksx4_seed_avx2
.p2align 4
_sha3_128_blocksx4_seed_avx2:
#endif /* __APPLE__ */
leaq L_sha3_x4_avx2_r(%rip), %rdx
movq %rdi, %rax
movq %rdi, %rcx
vpbroadcastq (%rsi), %ymm15
addq $0x80, %rdi
vpbroadcastq 8(%rsi), %ymm11
addq $0x180, %rax
vpbroadcastq 16(%rsi), %ymm12
addq $0x280, %rcx
vpbroadcastq 24(%rsi), %ymm13
vmovdqu L_sha3_128_blockx4_seed_avx2_end_mark(%rip), %ymm5
vpxor %ymm6, %ymm6, %ymm6
vmovdqu %ymm11, -96(%rdi)
vmovdqu %ymm12, -64(%rdi)
vmovdqu %ymm13, -32(%rdi)
vmovdqu (%rdi), %ymm14
vmovdqu %ymm6, 32(%rdi)
vmovdqu %ymm6, 64(%rdi)
vmovdqu %ymm6, 96(%rdi)
vmovdqu %ymm6, 128(%rdi)
vmovdqu %ymm6, -96(%rax)
vmovdqu %ymm6, -64(%rax)
vmovdqu %ymm6, -32(%rax)
vmovdqu %ymm6, (%rax)
vmovdqu %ymm6, 32(%rax)
vmovdqu %ymm6, 64(%rax)
vmovdqu %ymm6, 96(%rax)
vmovdqu %ymm6, 128(%rax)
vmovdqu %ymm6, -96(%rcx)
vmovdqu %ymm6, -64(%rcx)
vmovdqu %ymm6, -32(%rcx)
vmovdqu %ymm5, (%rcx)
vmovdqu %ymm6, 32(%rcx)
vmovdqu %ymm6, 64(%rcx)
vmovdqu %ymm6, 96(%rcx)
vmovdqu %ymm6, 128(%rcx)
vpxor %ymm5, %ymm15, %ymm10
# Round 0
# Calc b[0..4]
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 64(%rdi), %ymm6, %ymm11
vpxor (%rax), %ymm7, %ymm12
vpxor -64(%rcx), %ymm8, %ymm13
vpxor 128(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor (%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, 128(%rcx)
# Row 1
vpxor -32(%rdi), %ymm8, %ymm10
vpxor -96(%rax), %ymm9, %ymm11
vpxor -64(%rax), %ymm5, %ymm12
vpxor 128(%rax), %ymm6, %ymm13
vpxor 64(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, 64(%rcx)
# Row 2
vpxor -96(%rdi), %ymm6, %ymm10
vpxor 96(%rdi), %ymm7, %ymm11
vpxor 32(%rax), %ymm8, %ymm12
vpxor -32(%rcx), %ymm9, %ymm13
vpxor (%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, (%rcx)
# Row 3
vpxor (%rdi), %ymm9, %ymm10
vpxor 32(%rdi), %ymm5, %ymm11
vpxor -32(%rax), %ymm6, %ymm12
vpxor -96(%rcx), %ymm7, %ymm13
vpxor 96(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, 96(%rcx)
# Row 4
vpxor -64(%rdi), %ymm7, %ymm10
vpxor 128(%rdi), %ymm8, %ymm11
vpxor 64(%rax), %ymm9, %ymm12
vpxor 96(%rax), %ymm5, %ymm13
vpxor 32(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, 32(%rcx)
# Round 1
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm10, %ymm10
vpxor -32(%rdi), %ymm10, %ymm10
vpxor (%rdi), %ymm10, %ymm10
vpxor 32(%rdi), %ymm1, %ymm11
vpxor 64(%rdi), %ymm11, %ymm11
vpxor 96(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm11, %ymm11
vpxor -64(%rax), %ymm2, %ymm12
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm12, %ymm12
vpxor 32(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm3, %ymm13
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -64(%rcx), %ymm13, %ymm13
vpxor -32(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm4, %ymm14
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm14, %ymm14
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -96(%rax), %ymm6, %ymm11
vpxor 32(%rax), %ymm7, %ymm12
vpxor -96(%rcx), %ymm8, %ymm13
vpxor 32(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 32(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, 32(%rcx)
# Row 1
vpxor -64(%rcx), %ymm8, %ymm10
vpxor 64(%rcx), %ymm9, %ymm11
vpxor -96(%rdi), %ymm5, %ymm12
vpxor 32(%rdi), %ymm6, %ymm13
vpxor 64(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, 64(%rax)
# Row 2
vpxor 64(%rdi), %ymm6, %ymm10
vpxor -64(%rax), %ymm7, %ymm11
vpxor -32(%rcx), %ymm8, %ymm12
vpxor 96(%rcx), %ymm9, %ymm13
vpxor -64(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, -64(%rdi)
# Row 3
vpxor 128(%rcx), %ymm9, %ymm10
vpxor -32(%rdi), %ymm5, %ymm11
vpxor 96(%rdi), %ymm6, %ymm12
vpxor -32(%rax), %ymm7, %ymm13
vpxor 96(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 96(%rax)
# Row 4
vpxor (%rax), %ymm7, %ymm10
vpxor 128(%rax), %ymm8, %ymm11
vpxor (%rcx), %ymm9, %ymm12
vpxor (%rdi), %ymm5, %ymm13
vpxor 128(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, 128(%rdi)
# Round 2
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -64(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm3, %ymm13
vpxor 64(%rdi), %ymm10, %ymm10
vpxor 96(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm11, %ymm11
vpxor -64(%rax), %ymm11, %ymm11
vpxor -32(%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm12, %ymm12
vpxor 64(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -64(%rcx), %ymm10, %ymm10
vpxor -32(%rcx), %ymm12, %ymm12
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 64(%rcx), %ymm6, %ymm11
vpxor -32(%rcx), %ymm7, %ymm12
vpxor -32(%rax), %ymm8, %ymm13
vpxor 128(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 64(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 128(%rdi)
# Row 1
vpxor -96(%rcx), %ymm8, %ymm10
vpxor 64(%rax), %ymm9, %ymm11
vpxor 64(%rdi), %ymm5, %ymm12
vpxor -32(%rdi), %ymm6, %ymm13
vpxor (%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, (%rcx)
# Row 2
vpxor -96(%rax), %ymm6, %ymm10
vpxor -96(%rdi), %ymm7, %ymm11
vpxor 96(%rcx), %ymm8, %ymm12
vpxor 96(%rax), %ymm9, %ymm13
vpxor (%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, (%rax)
# Row 3
vpxor 32(%rcx), %ymm9, %ymm10
vpxor -64(%rcx), %ymm5, %ymm11
vpxor -64(%rax), %ymm6, %ymm12
vpxor 96(%rdi), %ymm7, %ymm13
vpxor (%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, (%rdi)
# Row 4
vpxor 32(%rax), %ymm7, %ymm10
vpxor 32(%rdi), %ymm8, %ymm11
vpxor -64(%rdi), %ymm9, %ymm12
vpxor 128(%rcx), %ymm5, %ymm13
vpxor 128(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, 128(%rax)
# Round 3
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm3, %ymm13
vpxor (%rdi), %ymm4, %ymm14
vpxor 64(%rdi), %ymm2, %ymm12
vpxor 96(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm14, %ymm14
vpxor -96(%rax), %ymm10, %ymm10
vpxor -64(%rax), %ymm12, %ymm12
vpxor -32(%rax), %ymm13, %ymm13
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm10, %ymm10
vpxor -64(%rcx), %ymm11, %ymm11
vpxor -32(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm14, %ymm14
vpxor 32(%rcx), %ymm10, %ymm10
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 64(%rax), %ymm6, %ymm11
vpxor 96(%rcx), %ymm7, %ymm12
vpxor 96(%rdi), %ymm8, %ymm13
vpxor 128(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 96(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, 128(%rax)
# Row 1
vpxor -32(%rax), %ymm8, %ymm10
vpxor (%rcx), %ymm9, %ymm11
vpxor -96(%rax), %ymm5, %ymm12
vpxor -64(%rcx), %ymm6, %ymm13
vpxor -64(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, -64(%rdi)
# Row 2
vpxor 64(%rcx), %ymm6, %ymm10
vpxor 64(%rdi), %ymm7, %ymm11
vpxor 96(%rax), %ymm8, %ymm12
vpxor (%rdi), %ymm9, %ymm13
vpxor 32(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, 32(%rax)
# Row 3
vpxor 128(%rdi), %ymm9, %ymm10
vpxor -96(%rcx), %ymm5, %ymm11
vpxor -96(%rdi), %ymm6, %ymm12
vpxor -64(%rax), %ymm7, %ymm13
vpxor 128(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, 128(%rcx)
# Row 4
vpxor -32(%rcx), %ymm7, %ymm10
vpxor -32(%rdi), %ymm8, %ymm11
vpxor (%rax), %ymm9, %ymm12
vpxor 32(%rcx), %ymm5, %ymm13
vpxor 32(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 32(%rdi)
# Round 4
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -64(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm3, %ymm13
vpxor 64(%rdi), %ymm1, %ymm11
vpxor 96(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm10, %ymm10
vpxor -96(%rax), %ymm12, %ymm12
vpxor -64(%rax), %ymm13, %ymm13
vpxor -32(%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm11, %ymm11
vpxor 64(%rcx), %ymm10, %ymm10
vpxor 96(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor (%rcx), %ymm6, %ymm11
vpxor 96(%rax), %ymm7, %ymm12
vpxor -64(%rax), %ymm8, %ymm13
vpxor 32(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 128(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, 32(%rdi)
# Row 1
vpxor 96(%rdi), %ymm8, %ymm10
vpxor -64(%rdi), %ymm9, %ymm11
vpxor 64(%rcx), %ymm5, %ymm12
vpxor -96(%rcx), %ymm6, %ymm13
vpxor (%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, (%rax)
# Row 2
vpxor 64(%rax), %ymm6, %ymm10
vpxor -96(%rax), %ymm7, %ymm11
vpxor (%rdi), %ymm8, %ymm12
vpxor 128(%rcx), %ymm9, %ymm13
vpxor -32(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, -32(%rcx)
# Row 3
vpxor 128(%rax), %ymm9, %ymm10
vpxor -32(%rax), %ymm5, %ymm11
vpxor 64(%rdi), %ymm6, %ymm12
vpxor -96(%rdi), %ymm7, %ymm13
vpxor 32(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, 32(%rcx)
# Row 4
vpxor 96(%rcx), %ymm7, %ymm10
vpxor -64(%rcx), %ymm8, %ymm11
vpxor 32(%rax), %ymm9, %ymm12
vpxor 128(%rdi), %ymm5, %ymm13
vpxor -32(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, -32(%rdi)
# Round 5
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -64(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm4, %ymm14
vpxor 64(%rdi), %ymm12, %ymm12
vpxor 96(%rdi), %ymm10, %ymm10
vpxor -96(%rax), %ymm11, %ymm11
vpxor -64(%rax), %ymm13, %ymm13
vpxor -32(%rax), %ymm11, %ymm11
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm10, %ymm10
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -32(%rcx), %ymm14, %ymm14
vpxor (%rcx), %ymm11, %ymm11
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -64(%rdi), %ymm6, %ymm11
vpxor (%rdi), %ymm7, %ymm12
vpxor -96(%rdi), %ymm8, %ymm13
vpxor -32(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 160(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, -32(%rdi)
# Row 1
vpxor -64(%rax), %ymm8, %ymm10
vpxor (%rax), %ymm9, %ymm11
vpxor 64(%rax), %ymm5, %ymm12
vpxor -32(%rax), %ymm6, %ymm13
vpxor 32(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 32(%rax)
# Row 2
vpxor (%rcx), %ymm6, %ymm10
vpxor 64(%rcx), %ymm7, %ymm11
vpxor 128(%rcx), %ymm8, %ymm12
vpxor 32(%rcx), %ymm9, %ymm13
vpxor 96(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 96(%rcx)
# Row 3
vpxor 32(%rdi), %ymm9, %ymm10
vpxor 96(%rdi), %ymm5, %ymm11
vpxor -96(%rax), %ymm6, %ymm12
vpxor 64(%rdi), %ymm7, %ymm13
vpxor 128(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, 128(%rdi)
# Row 4
vpxor 96(%rax), %ymm7, %ymm10
vpxor -96(%rcx), %ymm8, %ymm11
vpxor -32(%rcx), %ymm9, %ymm12
vpxor 128(%rax), %ymm5, %ymm13
vpxor -64(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, -64(%rcx)
# Round 6
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -64(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm10, %ymm10
vpxor 64(%rdi), %ymm13, %ymm13
vpxor 96(%rdi), %ymm11, %ymm11
vpxor 128(%rdi), %ymm14, %ymm14
vpxor -96(%rax), %ymm12, %ymm12
vpxor -64(%rax), %ymm10, %ymm10
vpxor -32(%rax), %ymm13, %ymm13
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm12, %ymm12
vpxor (%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm14, %ymm14
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor (%rax), %ymm6, %ymm11
vpxor 128(%rcx), %ymm7, %ymm12
vpxor 64(%rdi), %ymm8, %ymm13
vpxor -64(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 192(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, -64(%rcx)
# Row 1
vpxor -96(%rdi), %ymm8, %ymm10
vpxor 32(%rax), %ymm9, %ymm11
vpxor (%rcx), %ymm5, %ymm12
vpxor 96(%rdi), %ymm6, %ymm13
vpxor -32(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, -32(%rcx)
# Row 2
vpxor -64(%rdi), %ymm6, %ymm10
vpxor 64(%rax), %ymm7, %ymm11
vpxor 32(%rcx), %ymm8, %ymm12
vpxor 128(%rdi), %ymm9, %ymm13
vpxor 96(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, 96(%rax)
# Row 3
vpxor -32(%rdi), %ymm9, %ymm10
vpxor -64(%rax), %ymm5, %ymm11
vpxor 64(%rcx), %ymm6, %ymm12
vpxor -96(%rax), %ymm7, %ymm13
vpxor 128(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, 128(%rax)
# Row 4
vpxor (%rdi), %ymm7, %ymm10
vpxor -32(%rax), %ymm8, %ymm11
vpxor 96(%rcx), %ymm9, %ymm12
vpxor 32(%rdi), %ymm5, %ymm13
vpxor -96(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, -96(%rcx)
# Round 7
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm10, %ymm10
vpxor -64(%rdi), %ymm10, %ymm10
vpxor -32(%rdi), %ymm10, %ymm10
vpxor 64(%rdi), %ymm3, %ymm13
vpxor 96(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm13, %ymm13
vpxor -96(%rax), %ymm13, %ymm13
vpxor -64(%rax), %ymm1, %ymm11
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm4, %ymm14
vpxor 128(%rax), %ymm14, %ymm14
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm14, %ymm14
vpxor (%rcx), %ymm2, %ymm12
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 32(%rax), %ymm6, %ymm11
vpxor 32(%rcx), %ymm7, %ymm12
vpxor -96(%rax), %ymm8, %ymm13
vpxor -96(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 224(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, -96(%rcx)
# Row 1
vpxor 64(%rdi), %ymm8, %ymm10
vpxor -32(%rcx), %ymm9, %ymm11
vpxor -64(%rdi), %ymm5, %ymm12
vpxor -64(%rax), %ymm6, %ymm13
vpxor 96(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, 96(%rcx)
# Row 2
vpxor (%rax), %ymm6, %ymm10
vpxor (%rcx), %ymm7, %ymm11
vpxor 128(%rdi), %ymm8, %ymm12
vpxor 128(%rax), %ymm9, %ymm13
vpxor (%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, (%rdi)
# Row 3
vpxor -64(%rcx), %ymm9, %ymm10
vpxor -96(%rdi), %ymm5, %ymm11
vpxor 64(%rax), %ymm6, %ymm12
vpxor 64(%rcx), %ymm7, %ymm13
vpxor 32(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, 32(%rdi)
# Row 4
vpxor 128(%rcx), %ymm7, %ymm10
vpxor 96(%rdi), %ymm8, %ymm11
vpxor 96(%rax), %ymm9, %ymm12
vpxor -32(%rdi), %ymm5, %ymm13
vpxor -32(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, -32(%rax)
# Round 8
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm1, %ymm11
vpxor -64(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm4, %ymm14
vpxor 32(%rdi), %ymm14, %ymm14
vpxor 64(%rdi), %ymm10, %ymm10
vpxor 128(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm3, %ymm13
vpxor -64(%rax), %ymm13, %ymm13
vpxor (%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -64(%rcx), %ymm10, %ymm10
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm11, %ymm11
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -32(%rcx), %ymm6, %ymm11
vpxor 128(%rdi), %ymm7, %ymm12
vpxor 64(%rcx), %ymm8, %ymm13
vpxor -32(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 256(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, -32(%rax)
# Row 1
vpxor -96(%rax), %ymm8, %ymm10
vpxor 96(%rcx), %ymm9, %ymm11
vpxor (%rax), %ymm5, %ymm12
vpxor -96(%rdi), %ymm6, %ymm13
vpxor 96(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, 96(%rax)
# Row 2
vpxor 32(%rax), %ymm6, %ymm10
vpxor -64(%rdi), %ymm7, %ymm11
vpxor 128(%rax), %ymm8, %ymm12
vpxor 32(%rdi), %ymm9, %ymm13
vpxor 128(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, 128(%rcx)
# Row 3
vpxor -96(%rcx), %ymm9, %ymm10
vpxor 64(%rdi), %ymm5, %ymm11
vpxor (%rcx), %ymm6, %ymm12
vpxor 64(%rax), %ymm7, %ymm13
vpxor -32(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, -32(%rdi)
# Row 4
vpxor 32(%rcx), %ymm7, %ymm10
vpxor -64(%rax), %ymm8, %ymm11
vpxor (%rdi), %ymm9, %ymm12
vpxor -64(%rcx), %ymm5, %ymm13
vpxor 96(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, 96(%rdi)
# Round 9
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -64(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm4, %ymm14
vpxor 32(%rdi), %ymm13, %ymm13
vpxor 64(%rdi), %ymm11, %ymm11
vpxor 128(%rdi), %ymm2, %ymm12
vpxor -96(%rax), %ymm10, %ymm10
vpxor -32(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm12, %ymm12
vpxor 32(%rax), %ymm10, %ymm10
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm14, %ymm14
vpxor 128(%rax), %ymm12, %ymm12
vpxor -96(%rcx), %ymm10, %ymm10
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm11, %ymm11
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 96(%rcx), %ymm6, %ymm11
vpxor 128(%rax), %ymm7, %ymm12
vpxor 64(%rax), %ymm8, %ymm13
vpxor 96(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 288(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 1
vpxor 64(%rcx), %ymm8, %ymm10
vpxor 96(%rax), %ymm9, %ymm11
vpxor 32(%rax), %ymm5, %ymm12
vpxor 64(%rdi), %ymm6, %ymm13
vpxor (%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, (%rdi)
# Row 2
vpxor -32(%rcx), %ymm6, %ymm10
vpxor (%rax), %ymm7, %ymm11
vpxor 32(%rdi), %ymm8, %ymm12
vpxor -32(%rdi), %ymm9, %ymm13
vpxor 32(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, 32(%rcx)
# Row 3
vpxor -32(%rax), %ymm9, %ymm10
vpxor -96(%rax), %ymm5, %ymm11
vpxor -64(%rdi), %ymm6, %ymm12
vpxor (%rcx), %ymm7, %ymm13
vpxor -64(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, -64(%rcx)
# Row 4
vpxor 128(%rdi), %ymm7, %ymm10
vpxor -96(%rdi), %ymm8, %ymm11
vpxor 128(%rcx), %ymm9, %ymm12
vpxor -96(%rcx), %ymm5, %ymm13
vpxor -64(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, -64(%rax)
# Round 10
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm2, %ymm12
vpxor -32(%rdi), %ymm3, %ymm13
vpxor (%rdi), %ymm4, %ymm14
vpxor 32(%rdi), %ymm12, %ymm12
vpxor 64(%rdi), %ymm13, %ymm13
vpxor 96(%rdi), %ymm14, %ymm14
vpxor -96(%rax), %ymm1, %ymm11
vpxor -32(%rax), %ymm10, %ymm10
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm12, %ymm12
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm11, %ymm11
vpxor 128(%rax), %ymm12, %ymm12
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm10, %ymm10
vpxor (%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm10, %ymm10
vpxor 96(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 96(%rax), %ymm6, %ymm11
vpxor 32(%rdi), %ymm7, %ymm12
vpxor (%rcx), %ymm8, %ymm13
vpxor -64(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 320(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, -64(%rax)
# Row 1
vpxor 64(%rax), %ymm8, %ymm10
vpxor (%rdi), %ymm9, %ymm11
vpxor -32(%rcx), %ymm5, %ymm12
vpxor -96(%rax), %ymm6, %ymm13
vpxor 128(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, 128(%rcx)
# Row 2
vpxor 96(%rcx), %ymm6, %ymm10
vpxor 32(%rax), %ymm7, %ymm11
vpxor -32(%rdi), %ymm8, %ymm12
vpxor -64(%rcx), %ymm9, %ymm13
vpxor 128(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, 128(%rdi)
# Row 3
vpxor 96(%rdi), %ymm9, %ymm10
vpxor 64(%rcx), %ymm5, %ymm11
vpxor (%rax), %ymm6, %ymm12
vpxor -64(%rdi), %ymm7, %ymm13
vpxor -96(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -96(%rcx)
# Row 4
vpxor 128(%rax), %ymm7, %ymm10
vpxor 64(%rdi), %ymm8, %ymm11
vpxor 32(%rcx), %ymm9, %ymm12
vpxor -32(%rax), %ymm5, %ymm13
vpxor -96(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, -96(%rdi)
# Round 11
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm12, %ymm12
vpxor 96(%rdi), %ymm10, %ymm10
vpxor 128(%rdi), %ymm4, %ymm14
vpxor -96(%rax), %ymm13, %ymm13
vpxor -64(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm12, %ymm12
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm11, %ymm11
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -64(%rcx), %ymm13, %ymm13
vpxor -32(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm10, %ymm10
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor (%rdi), %ymm6, %ymm11
vpxor -32(%rdi), %ymm7, %ymm12
vpxor -64(%rdi), %ymm8, %ymm13
vpxor -96(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 352(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -96(%rdi)
# Row 1
vpxor (%rcx), %ymm8, %ymm10
vpxor 128(%rcx), %ymm9, %ymm11
vpxor 96(%rcx), %ymm5, %ymm12
vpxor 64(%rcx), %ymm6, %ymm13
vpxor 32(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, 32(%rcx)
# Row 2
vpxor 96(%rax), %ymm6, %ymm10
vpxor -32(%rcx), %ymm7, %ymm11
vpxor -64(%rcx), %ymm8, %ymm12
vpxor -96(%rcx), %ymm9, %ymm13
vpxor 128(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, 128(%rax)
# Row 3
vpxor -64(%rax), %ymm9, %ymm10
vpxor 64(%rax), %ymm5, %ymm11
vpxor 32(%rax), %ymm6, %ymm12
vpxor (%rax), %ymm7, %ymm13
vpxor -32(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, -32(%rax)
# Row 4
vpxor 32(%rdi), %ymm7, %ymm10
vpxor -96(%rax), %ymm8, %ymm11
vpxor 128(%rdi), %ymm9, %ymm12
vpxor 96(%rdi), %ymm5, %ymm13
vpxor 64(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, 64(%rdi)
# Round 12
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -64(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm1, %ymm11
vpxor -64(%rax), %ymm10, %ymm10
vpxor -32(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm12, %ymm12
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm10, %ymm10
vpxor 128(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -64(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 128(%rcx), %ymm6, %ymm11
vpxor -64(%rcx), %ymm7, %ymm12
vpxor (%rax), %ymm8, %ymm13
vpxor 64(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 384(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, 64(%rdi)
# Row 1
vpxor -64(%rdi), %ymm8, %ymm10
vpxor 32(%rcx), %ymm9, %ymm11
vpxor 96(%rax), %ymm5, %ymm12
vpxor 64(%rax), %ymm6, %ymm13
vpxor 128(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, 128(%rdi)
# Row 2
vpxor (%rdi), %ymm6, %ymm10
vpxor 96(%rcx), %ymm7, %ymm11
vpxor -96(%rcx), %ymm8, %ymm12
vpxor -32(%rax), %ymm9, %ymm13
vpxor 32(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 32(%rdi)
# Row 3
vpxor -96(%rdi), %ymm9, %ymm10
vpxor (%rcx), %ymm5, %ymm11
vpxor -32(%rcx), %ymm6, %ymm12
vpxor 32(%rax), %ymm7, %ymm13
vpxor 96(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 4
vpxor -32(%rdi), %ymm7, %ymm10
vpxor 64(%rcx), %ymm8, %ymm11
vpxor 128(%rax), %ymm9, %ymm12
vpxor -64(%rax), %ymm5, %ymm13
vpxor -96(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, -96(%rax)
# Round 13
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm10, %ymm10
vpxor -64(%rdi), %ymm10, %ymm10
vpxor (%rdi), %ymm10, %ymm10
vpxor 32(%rdi), %ymm4, %ymm14
vpxor 64(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm14, %ymm14
vpxor 128(%rdi), %ymm14, %ymm14
vpxor -32(%rax), %ymm3, %ymm13
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm13, %ymm13
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm2, %ymm12
vpxor -96(%rcx), %ymm12, %ymm12
vpxor -64(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm1, %ymm11
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm11, %ymm11
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 32(%rcx), %ymm6, %ymm11
vpxor -96(%rcx), %ymm7, %ymm12
vpxor 32(%rax), %ymm8, %ymm13
vpxor -96(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 416(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, -96(%rax)
# Row 1
vpxor (%rax), %ymm8, %ymm10
vpxor 128(%rdi), %ymm9, %ymm11
vpxor (%rdi), %ymm5, %ymm12
vpxor (%rcx), %ymm6, %ymm13
vpxor 128(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, 128(%rax)
# Row 2
vpxor 128(%rcx), %ymm6, %ymm10
vpxor 96(%rax), %ymm7, %ymm11
vpxor -32(%rax), %ymm8, %ymm12
vpxor 96(%rdi), %ymm9, %ymm13
vpxor -32(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, -32(%rdi)
# Row 3
vpxor 64(%rdi), %ymm9, %ymm10
vpxor -64(%rdi), %ymm5, %ymm11
vpxor 96(%rcx), %ymm6, %ymm12
vpxor -32(%rcx), %ymm7, %ymm13
vpxor -64(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, -64(%rax)
# Row 4
vpxor -64(%rcx), %ymm7, %ymm10
vpxor 64(%rax), %ymm8, %ymm11
vpxor 32(%rdi), %ymm9, %ymm12
vpxor -96(%rdi), %ymm5, %ymm13
vpxor 64(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, 64(%rcx)
# Round 14
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm2, %ymm12
vpxor 64(%rdi), %ymm10, %ymm10
vpxor 96(%rdi), %ymm3, %ymm13
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm14, %ymm14
vpxor -64(%rax), %ymm14, %ymm14
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm11, %ymm11
vpxor 128(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 128(%rdi), %ymm6, %ymm11
vpxor -32(%rax), %ymm7, %ymm12
vpxor -32(%rcx), %ymm8, %ymm13
vpxor 64(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 448(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, 64(%rcx)
# Row 1
vpxor 32(%rax), %ymm8, %ymm10
vpxor 128(%rax), %ymm9, %ymm11
vpxor 128(%rcx), %ymm5, %ymm12
vpxor -64(%rdi), %ymm6, %ymm13
vpxor 32(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, 32(%rdi)
# Row 2
vpxor 32(%rcx), %ymm6, %ymm10
vpxor (%rdi), %ymm7, %ymm11
vpxor 96(%rdi), %ymm8, %ymm12
vpxor -64(%rax), %ymm9, %ymm13
vpxor -64(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, -64(%rcx)
# Row 3
vpxor -96(%rax), %ymm9, %ymm10
vpxor (%rax), %ymm5, %ymm11
vpxor 96(%rax), %ymm6, %ymm12
vpxor 96(%rcx), %ymm7, %ymm13
vpxor -96(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, -96(%rdi)
# Row 4
vpxor -96(%rcx), %ymm7, %ymm10
vpxor (%rcx), %ymm8, %ymm11
vpxor -32(%rdi), %ymm9, %ymm12
vpxor 64(%rdi), %ymm5, %ymm13
vpxor 64(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, 64(%rax)
# Round 15
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -64(%rdi), %ymm3, %ymm13
vpxor (%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm2, %ymm12
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm10, %ymm10
vpxor -64(%rax), %ymm13, %ymm13
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm11, %ymm11
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm10, %ymm10
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 128(%rax), %ymm6, %ymm11
vpxor 96(%rdi), %ymm7, %ymm12
vpxor 96(%rcx), %ymm8, %ymm13
vpxor 64(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 480(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, 64(%rax)
# Row 1
vpxor -32(%rcx), %ymm8, %ymm10
vpxor 32(%rdi), %ymm9, %ymm11
vpxor 32(%rcx), %ymm5, %ymm12
vpxor (%rax), %ymm6, %ymm13
vpxor -32(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, -32(%rdi)
# Row 2
vpxor 128(%rdi), %ymm6, %ymm10
vpxor 128(%rcx), %ymm7, %ymm11
vpxor -64(%rax), %ymm8, %ymm12
vpxor -96(%rdi), %ymm9, %ymm13
vpxor -96(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, -96(%rcx)
# Row 3
vpxor 64(%rcx), %ymm9, %ymm10
vpxor 32(%rax), %ymm5, %ymm11
vpxor (%rdi), %ymm6, %ymm12
vpxor 96(%rax), %ymm7, %ymm13
vpxor 64(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, 64(%rdi)
# Row 4
vpxor -32(%rax), %ymm7, %ymm10
vpxor -64(%rdi), %ymm8, %ymm11
vpxor -64(%rcx), %ymm9, %ymm12
vpxor -96(%rax), %ymm5, %ymm13
vpxor (%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, (%rcx)
# Round 16
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm1, %ymm11
vpxor 64(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm12, %ymm12
vpxor 128(%rdi), %ymm10, %ymm10
vpxor -64(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm13, %ymm13
vpxor 128(%rax), %ymm11, %ymm11
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm10, %ymm10
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 32(%rdi), %ymm6, %ymm11
vpxor -64(%rax), %ymm7, %ymm12
vpxor 96(%rax), %ymm8, %ymm13
vpxor (%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 512(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, (%rcx)
# Row 1
vpxor 96(%rcx), %ymm8, %ymm10
vpxor -32(%rdi), %ymm9, %ymm11
vpxor 128(%rdi), %ymm5, %ymm12
vpxor 32(%rax), %ymm6, %ymm13
vpxor -64(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, -64(%rcx)
# Row 2
vpxor 128(%rax), %ymm6, %ymm10
vpxor 32(%rcx), %ymm7, %ymm11
vpxor -96(%rdi), %ymm8, %ymm12
vpxor 64(%rdi), %ymm9, %ymm13
vpxor -32(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, -32(%rax)
# Row 3
vpxor 64(%rax), %ymm9, %ymm10
vpxor -32(%rcx), %ymm5, %ymm11
vpxor 128(%rcx), %ymm6, %ymm12
vpxor (%rdi), %ymm7, %ymm13
vpxor -96(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, -96(%rax)
# Row 4
vpxor 96(%rdi), %ymm7, %ymm10
vpxor (%rax), %ymm8, %ymm11
vpxor -96(%rcx), %ymm9, %ymm12
vpxor 64(%rcx), %ymm5, %ymm13
vpxor -64(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, -64(%rdi)
# Round 17
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -32(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm11, %ymm11
vpxor 64(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm4, %ymm14
vpxor -64(%rax), %ymm12, %ymm12
vpxor -32(%rax), %ymm14, %ymm14
vpxor 32(%rax), %ymm13, %ymm13
vpxor 64(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm13, %ymm13
vpxor 128(%rax), %ymm10, %ymm10
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm14, %ymm14
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm10, %ymm10
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -32(%rdi), %ymm6, %ymm11
vpxor -96(%rdi), %ymm7, %ymm12
vpxor (%rdi), %ymm8, %ymm13
vpxor -64(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 544(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, -64(%rdi)
# Row 1
vpxor 96(%rax), %ymm8, %ymm10
vpxor -64(%rcx), %ymm9, %ymm11
vpxor 128(%rax), %ymm5, %ymm12
vpxor -32(%rcx), %ymm6, %ymm13
vpxor -96(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, -96(%rcx)
# Row 2
vpxor 32(%rdi), %ymm6, %ymm10
vpxor 128(%rdi), %ymm7, %ymm11
vpxor 64(%rdi), %ymm8, %ymm12
vpxor -96(%rax), %ymm9, %ymm13
vpxor 96(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 3
vpxor (%rcx), %ymm9, %ymm10
vpxor 96(%rcx), %ymm5, %ymm11
vpxor 32(%rcx), %ymm6, %ymm12
vpxor 128(%rcx), %ymm7, %ymm13
vpxor 64(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, 64(%rcx)
# Row 4
vpxor -64(%rax), %ymm7, %ymm10
vpxor 32(%rax), %ymm8, %ymm11
vpxor -32(%rax), %ymm9, %ymm12
vpxor 64(%rax), %ymm5, %ymm13
vpxor (%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, (%rax)
# Round 18
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -64(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm10, %ymm10
vpxor 64(%rdi), %ymm12, %ymm12
vpxor 96(%rdi), %ymm14, %ymm14
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm10, %ymm10
vpxor 128(%rax), %ymm12, %ymm12
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -64(%rcx), %ymm11, %ymm11
vpxor -32(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm11, %ymm11
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -64(%rcx), %ymm6, %ymm11
vpxor 64(%rdi), %ymm7, %ymm12
vpxor 128(%rcx), %ymm8, %ymm13
vpxor (%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 576(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, (%rax)
# Row 1
vpxor (%rdi), %ymm8, %ymm10
vpxor -96(%rcx), %ymm9, %ymm11
vpxor 32(%rdi), %ymm5, %ymm12
vpxor 96(%rcx), %ymm6, %ymm13
vpxor -32(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, -32(%rax)
# Row 2
vpxor -32(%rdi), %ymm6, %ymm10
vpxor 128(%rax), %ymm7, %ymm11
vpxor -96(%rax), %ymm8, %ymm12
vpxor 64(%rcx), %ymm9, %ymm13
vpxor -64(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, -64(%rax)
# Row 3
vpxor -64(%rdi), %ymm9, %ymm10
vpxor 96(%rax), %ymm5, %ymm11
vpxor 128(%rdi), %ymm6, %ymm12
vpxor 32(%rcx), %ymm7, %ymm13
vpxor 64(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 64(%rax)
# Row 4
vpxor -96(%rdi), %ymm7, %ymm10
vpxor -32(%rcx), %ymm8, %ymm11
vpxor 96(%rdi), %ymm9, %ymm12
vpxor (%rcx), %ymm5, %ymm13
vpxor 32(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, 32(%rax)
# Round 19
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm10, %ymm10
vpxor -32(%rdi), %ymm10, %ymm10
vpxor (%rdi), %ymm10, %ymm10
vpxor 32(%rdi), %ymm2, %ymm12
vpxor 64(%rdi), %ymm12, %ymm12
vpxor 128(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm12, %ymm12
vpxor -64(%rax), %ymm4, %ymm14
vpxor -32(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm1, %ymm11
vpxor 128(%rax), %ymm11, %ymm11
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm11, %ymm11
vpxor 32(%rcx), %ymm3, %ymm13
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -96(%rcx), %ymm6, %ymm11
vpxor -96(%rax), %ymm7, %ymm12
vpxor 32(%rcx), %ymm8, %ymm13
vpxor 32(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 608(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 32(%rax)
# Row 1
vpxor 128(%rcx), %ymm8, %ymm10
vpxor -32(%rax), %ymm9, %ymm11
vpxor -32(%rdi), %ymm5, %ymm12
vpxor 96(%rax), %ymm6, %ymm13
vpxor 96(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 2
vpxor -64(%rcx), %ymm6, %ymm10
vpxor 32(%rdi), %ymm7, %ymm11
vpxor 64(%rcx), %ymm8, %ymm12
vpxor 64(%rax), %ymm9, %ymm13
vpxor -96(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, -96(%rdi)
# Row 3
vpxor (%rax), %ymm9, %ymm10
vpxor (%rdi), %ymm5, %ymm11
vpxor 128(%rax), %ymm6, %ymm12
vpxor 128(%rdi), %ymm7, %ymm13
vpxor (%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, (%rcx)
# Row 4
vpxor 64(%rdi), %ymm7, %ymm10
vpxor 96(%rcx), %ymm8, %ymm11
vpxor -64(%rax), %ymm9, %ymm12
vpxor -64(%rdi), %ymm5, %ymm13
vpxor -32(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -32(%rcx)
# Round 20
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm11, %ymm11
vpxor 96(%rdi), %ymm14, %ymm14
vpxor 128(%rdi), %ymm3, %ymm13
vpxor -96(%rax), %ymm12, %ymm12
vpxor -32(%rax), %ymm11, %ymm11
vpxor (%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm13, %ymm13
vpxor 128(%rax), %ymm12, %ymm12
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm10, %ymm10
vpxor (%rcx), %ymm14, %ymm14
vpxor 32(%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -32(%rax), %ymm6, %ymm11
vpxor 64(%rcx), %ymm7, %ymm12
vpxor 128(%rdi), %ymm8, %ymm13
vpxor -32(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 640(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, -32(%rcx)
# Row 1
vpxor 32(%rcx), %ymm8, %ymm10
vpxor 96(%rdi), %ymm9, %ymm11
vpxor -64(%rcx), %ymm5, %ymm12
vpxor (%rdi), %ymm6, %ymm13
vpxor -64(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, -64(%rax)
# Row 2
vpxor -96(%rcx), %ymm6, %ymm10
vpxor -32(%rdi), %ymm7, %ymm11
vpxor 64(%rax), %ymm8, %ymm12
vpxor (%rcx), %ymm9, %ymm13
vpxor 64(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, 64(%rdi)
# Row 3
vpxor 32(%rax), %ymm9, %ymm10
vpxor 128(%rcx), %ymm5, %ymm11
vpxor 32(%rdi), %ymm6, %ymm12
vpxor 128(%rax), %ymm7, %ymm13
vpxor -64(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, -64(%rdi)
# Row 4
vpxor -96(%rax), %ymm7, %ymm10
vpxor 96(%rax), %ymm8, %ymm11
vpxor -96(%rdi), %ymm9, %ymm12
vpxor (%rax), %ymm5, %ymm13
vpxor 96(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, 96(%rcx)
# Round 21
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm2, %ymm12
vpxor 64(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm11, %ymm11
vpxor 128(%rdi), %ymm13, %ymm13
vpxor -64(%rax), %ymm14, %ymm14
vpxor -32(%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm10, %ymm10
vpxor 64(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm10, %ymm10
vpxor -64(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm14, %ymm14
vpxor (%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm10, %ymm10
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 96(%rdi), %ymm6, %ymm11
vpxor 64(%rax), %ymm7, %ymm12
vpxor 128(%rax), %ymm8, %ymm13
vpxor 96(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 672(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, 96(%rcx)
# Row 1
vpxor 128(%rdi), %ymm8, %ymm10
vpxor -64(%rax), %ymm9, %ymm11
vpxor -96(%rcx), %ymm5, %ymm12
vpxor 128(%rcx), %ymm6, %ymm13
vpxor -96(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, -96(%rdi)
# Row 2
vpxor -32(%rax), %ymm6, %ymm10
vpxor -64(%rcx), %ymm7, %ymm11
vpxor (%rcx), %ymm8, %ymm12
vpxor -64(%rdi), %ymm9, %ymm13
vpxor -96(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -96(%rax)
# Row 3
vpxor -32(%rcx), %ymm9, %ymm10
vpxor 32(%rcx), %ymm5, %ymm11
vpxor -32(%rdi), %ymm6, %ymm12
vpxor 32(%rdi), %ymm7, %ymm13
vpxor (%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, (%rax)
# Row 4
vpxor 64(%rcx), %ymm7, %ymm10
vpxor (%rdi), %ymm8, %ymm11
vpxor 64(%rdi), %ymm9, %ymm12
vpxor 32(%rax), %ymm5, %ymm13
vpxor 96(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, 96(%rax)
# Round 22
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -64(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm13, %ymm13
vpxor 96(%rdi), %ymm1, %ymm11
vpxor 128(%rdi), %ymm10, %ymm10
vpxor -96(%rax), %ymm14, %ymm14
vpxor -64(%rax), %ymm11, %ymm11
vpxor -32(%rax), %ymm10, %ymm10
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm12, %ymm12
vpxor -64(%rcx), %ymm11, %ymm11
vpxor -32(%rcx), %ymm10, %ymm10
vpxor (%rcx), %ymm12, %ymm12
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm14, %ymm14
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -64(%rax), %ymm6, %ymm11
vpxor (%rcx), %ymm7, %ymm12
vpxor 32(%rdi), %ymm8, %ymm13
vpxor 96(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 704(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, 96(%rax)
# Row 1
vpxor 128(%rax), %ymm8, %ymm10
vpxor -96(%rdi), %ymm9, %ymm11
vpxor -32(%rax), %ymm5, %ymm12
vpxor 32(%rcx), %ymm6, %ymm13
vpxor 64(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 64(%rdi)
# Row 2
vpxor 96(%rdi), %ymm6, %ymm10
vpxor -96(%rcx), %ymm7, %ymm11
vpxor -64(%rdi), %ymm8, %ymm12
vpxor (%rax), %ymm9, %ymm13
vpxor 64(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, 64(%rcx)
# Row 3
vpxor 96(%rcx), %ymm9, %ymm10
vpxor 128(%rdi), %ymm5, %ymm11
vpxor -64(%rcx), %ymm6, %ymm12
vpxor -32(%rdi), %ymm7, %ymm13
vpxor 32(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, 32(%rax)
# Row 4
vpxor 64(%rax), %ymm7, %ymm10
vpxor 128(%rcx), %ymm8, %ymm11
vpxor -96(%rax), %ymm9, %ymm12
vpxor -32(%rcx), %ymm5, %ymm13
vpxor (%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, (%rdi)
# Round 23
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm1, %ymm11
vpxor -64(%rdi), %ymm2, %ymm12
vpxor -32(%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm13, %ymm13
vpxor 64(%rdi), %ymm4, %ymm14
vpxor 96(%rdi), %ymm10, %ymm10
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -64(%rax), %ymm11, %ymm11
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm14, %ymm14
vpxor 128(%rax), %ymm10, %ymm10
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm12, %ymm12
vpxor 32(%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -96(%rdi), %ymm6, %ymm11
vpxor -64(%rdi), %ymm7, %ymm12
vpxor -32(%rdi), %ymm8, %ymm13
vpxor (%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 736(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, (%rdi)
# Row 1
vpxor 32(%rdi), %ymm8, %ymm10
vpxor 64(%rdi), %ymm9, %ymm11
vpxor 96(%rdi), %ymm5, %ymm12
vpxor 128(%rdi), %ymm6, %ymm13
vpxor -96(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, -96(%rax)
# Row 2
vpxor -64(%rax), %ymm6, %ymm10
vpxor -32(%rax), %ymm7, %ymm11
vpxor (%rax), %ymm8, %ymm12
vpxor 32(%rax), %ymm9, %ymm13
vpxor 64(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, 64(%rax)
# Row 3
vpxor 96(%rax), %ymm9, %ymm10
vpxor 128(%rax), %ymm5, %ymm11
vpxor -96(%rcx), %ymm6, %ymm12
vpxor -64(%rcx), %ymm7, %ymm13
vpxor -32(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, -32(%rcx)
# Row 4
vpxor (%rcx), %ymm7, %ymm10
vpxor 32(%rcx), %ymm8, %ymm11
vpxor 64(%rcx), %ymm9, %ymm12
vpxor 96(%rcx), %ymm5, %ymm13
vpxor 128(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, 128(%rcx)
subq $0x80, %rdi
vmovdqu %ymm15, (%rdi)
vzeroupper
repz retq
#ifndef __APPLE__
.size sha3_128_blocksx4_seed_avx2,.-sha3_128_blocksx4_seed_avx2
#endif /* __APPLE__ */
#endif /* defined(WOLFSSL_WC_MLKEM) || defined(WOLFSSL_WC_DILITHIUM) || defined(WOLFSSL_HAVE_SLHDSA) */
#ifdef WOLFSSL_WC_MLKEM
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 32
#else
.p2align 5
#endif /* __APPLE__ */
L_sha3_256_blockx4_seed_avx2_end_mark:
.quad 0x8000000000000000, 0x8000000000000000
.quad 0x8000000000000000, 0x8000000000000000
#ifndef __APPLE__
.text
.globl sha3_256_blocksx4_seed_avx2
.type sha3_256_blocksx4_seed_avx2,@function
.align 16
sha3_256_blocksx4_seed_avx2:
#else
.section __TEXT,__text
.globl _sha3_256_blocksx4_seed_avx2
.p2align 4
_sha3_256_blocksx4_seed_avx2:
#endif /* __APPLE__ */
leaq L_sha3_x4_avx2_r(%rip), %rdx
movq %rdi, %rax
movq %rdi, %rcx
vpbroadcastq (%rsi), %ymm15
addq $0x80, %rdi
vpbroadcastq 8(%rsi), %ymm11
addq $0x180, %rax
vpbroadcastq 16(%rsi), %ymm12
addq $0x280, %rcx
vpbroadcastq 24(%rsi), %ymm13
vmovdqu L_sha3_256_blockx4_seed_avx2_end_mark(%rip), %ymm5
vpxor %ymm6, %ymm6, %ymm6
vmovdqu %ymm11, -96(%rdi)
vmovdqu %ymm12, -64(%rdi)
vmovdqu %ymm13, -32(%rdi)
vmovdqu (%rdi), %ymm14
vmovdqu %ymm6, 32(%rdi)
vmovdqu %ymm6, 64(%rdi)
vmovdqu %ymm6, 96(%rdi)
vmovdqu %ymm6, 128(%rdi)
vmovdqu %ymm6, -96(%rax)
vmovdqu %ymm6, -64(%rax)
vmovdqu %ymm6, -32(%rax)
vmovdqu %ymm6, (%rax)
vmovdqu %ymm6, 32(%rax)
vmovdqu %ymm6, 64(%rax)
vmovdqu %ymm6, 96(%rax)
vmovdqu %ymm5, 128(%rax)
vmovdqu %ymm6, -96(%rcx)
vmovdqu %ymm6, -64(%rcx)
vmovdqu %ymm6, -32(%rcx)
vmovdqu %ymm6, (%rcx)
vmovdqu %ymm6, 32(%rcx)
vmovdqu %ymm6, 64(%rcx)
vmovdqu %ymm6, 96(%rcx)
vmovdqu %ymm6, 128(%rcx)
vmovdqu %ymm15, %ymm10
vpxor %ymm5, %ymm11, %ymm11
# Round 0
# Calc b[0..4]
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 64(%rdi), %ymm6, %ymm11
vpxor (%rax), %ymm7, %ymm12
vpxor -64(%rcx), %ymm8, %ymm13
vpxor 128(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor (%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, 128(%rcx)
# Row 1
vpxor -32(%rdi), %ymm8, %ymm10
vpxor -96(%rax), %ymm9, %ymm11
vpxor -64(%rax), %ymm5, %ymm12
vpxor 128(%rax), %ymm6, %ymm13
vpxor 64(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, 64(%rcx)
# Row 2
vpxor -96(%rdi), %ymm6, %ymm10
vpxor 96(%rdi), %ymm7, %ymm11
vpxor 32(%rax), %ymm8, %ymm12
vpxor -32(%rcx), %ymm9, %ymm13
vpxor (%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, (%rcx)
# Row 3
vpxor (%rdi), %ymm9, %ymm10
vpxor 32(%rdi), %ymm5, %ymm11
vpxor -32(%rax), %ymm6, %ymm12
vpxor -96(%rcx), %ymm7, %ymm13
vpxor 96(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, 96(%rcx)
# Row 4
vpxor -64(%rdi), %ymm7, %ymm10
vpxor 128(%rdi), %ymm8, %ymm11
vpxor 64(%rax), %ymm9, %ymm12
vpxor 96(%rax), %ymm5, %ymm13
vpxor 32(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, 32(%rcx)
# Round 1
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm10, %ymm10
vpxor -32(%rdi), %ymm10, %ymm10
vpxor (%rdi), %ymm10, %ymm10
vpxor 32(%rdi), %ymm1, %ymm11
vpxor 64(%rdi), %ymm11, %ymm11
vpxor 96(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm11, %ymm11
vpxor -64(%rax), %ymm2, %ymm12
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm12, %ymm12
vpxor 32(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm3, %ymm13
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -64(%rcx), %ymm13, %ymm13
vpxor -32(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm4, %ymm14
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm14, %ymm14
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -96(%rax), %ymm6, %ymm11
vpxor 32(%rax), %ymm7, %ymm12
vpxor -96(%rcx), %ymm8, %ymm13
vpxor 32(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 32(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, 32(%rcx)
# Row 1
vpxor -64(%rcx), %ymm8, %ymm10
vpxor 64(%rcx), %ymm9, %ymm11
vpxor -96(%rdi), %ymm5, %ymm12
vpxor 32(%rdi), %ymm6, %ymm13
vpxor 64(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, 64(%rax)
# Row 2
vpxor 64(%rdi), %ymm6, %ymm10
vpxor -64(%rax), %ymm7, %ymm11
vpxor -32(%rcx), %ymm8, %ymm12
vpxor 96(%rcx), %ymm9, %ymm13
vpxor -64(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, -64(%rdi)
# Row 3
vpxor 128(%rcx), %ymm9, %ymm10
vpxor -32(%rdi), %ymm5, %ymm11
vpxor 96(%rdi), %ymm6, %ymm12
vpxor -32(%rax), %ymm7, %ymm13
vpxor 96(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 96(%rax)
# Row 4
vpxor (%rax), %ymm7, %ymm10
vpxor 128(%rax), %ymm8, %ymm11
vpxor (%rcx), %ymm9, %ymm12
vpxor (%rdi), %ymm5, %ymm13
vpxor 128(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, 128(%rdi)
# Round 2
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -64(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm3, %ymm13
vpxor 64(%rdi), %ymm10, %ymm10
vpxor 96(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm11, %ymm11
vpxor -64(%rax), %ymm11, %ymm11
vpxor -32(%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm12, %ymm12
vpxor 64(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -64(%rcx), %ymm10, %ymm10
vpxor -32(%rcx), %ymm12, %ymm12
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 64(%rcx), %ymm6, %ymm11
vpxor -32(%rcx), %ymm7, %ymm12
vpxor -32(%rax), %ymm8, %ymm13
vpxor 128(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 64(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 128(%rdi)
# Row 1
vpxor -96(%rcx), %ymm8, %ymm10
vpxor 64(%rax), %ymm9, %ymm11
vpxor 64(%rdi), %ymm5, %ymm12
vpxor -32(%rdi), %ymm6, %ymm13
vpxor (%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, (%rcx)
# Row 2
vpxor -96(%rax), %ymm6, %ymm10
vpxor -96(%rdi), %ymm7, %ymm11
vpxor 96(%rcx), %ymm8, %ymm12
vpxor 96(%rax), %ymm9, %ymm13
vpxor (%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, (%rax)
# Row 3
vpxor 32(%rcx), %ymm9, %ymm10
vpxor -64(%rcx), %ymm5, %ymm11
vpxor -64(%rax), %ymm6, %ymm12
vpxor 96(%rdi), %ymm7, %ymm13
vpxor (%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, (%rdi)
# Row 4
vpxor 32(%rax), %ymm7, %ymm10
vpxor 32(%rdi), %ymm8, %ymm11
vpxor -64(%rdi), %ymm9, %ymm12
vpxor 128(%rcx), %ymm5, %ymm13
vpxor 128(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, 128(%rax)
# Round 3
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm3, %ymm13
vpxor (%rdi), %ymm4, %ymm14
vpxor 64(%rdi), %ymm2, %ymm12
vpxor 96(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm14, %ymm14
vpxor -96(%rax), %ymm10, %ymm10
vpxor -64(%rax), %ymm12, %ymm12
vpxor -32(%rax), %ymm13, %ymm13
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm10, %ymm10
vpxor -64(%rcx), %ymm11, %ymm11
vpxor -32(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm14, %ymm14
vpxor 32(%rcx), %ymm10, %ymm10
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 64(%rax), %ymm6, %ymm11
vpxor 96(%rcx), %ymm7, %ymm12
vpxor 96(%rdi), %ymm8, %ymm13
vpxor 128(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 96(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, 128(%rax)
# Row 1
vpxor -32(%rax), %ymm8, %ymm10
vpxor (%rcx), %ymm9, %ymm11
vpxor -96(%rax), %ymm5, %ymm12
vpxor -64(%rcx), %ymm6, %ymm13
vpxor -64(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, -64(%rdi)
# Row 2
vpxor 64(%rcx), %ymm6, %ymm10
vpxor 64(%rdi), %ymm7, %ymm11
vpxor 96(%rax), %ymm8, %ymm12
vpxor (%rdi), %ymm9, %ymm13
vpxor 32(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, 32(%rax)
# Row 3
vpxor 128(%rdi), %ymm9, %ymm10
vpxor -96(%rcx), %ymm5, %ymm11
vpxor -96(%rdi), %ymm6, %ymm12
vpxor -64(%rax), %ymm7, %ymm13
vpxor 128(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, 128(%rcx)
# Row 4
vpxor -32(%rcx), %ymm7, %ymm10
vpxor -32(%rdi), %ymm8, %ymm11
vpxor (%rax), %ymm9, %ymm12
vpxor 32(%rcx), %ymm5, %ymm13
vpxor 32(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 32(%rdi)
# Round 4
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -64(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm3, %ymm13
vpxor 64(%rdi), %ymm1, %ymm11
vpxor 96(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm10, %ymm10
vpxor -96(%rax), %ymm12, %ymm12
vpxor -64(%rax), %ymm13, %ymm13
vpxor -32(%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm11, %ymm11
vpxor 64(%rcx), %ymm10, %ymm10
vpxor 96(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor (%rcx), %ymm6, %ymm11
vpxor 96(%rax), %ymm7, %ymm12
vpxor -64(%rax), %ymm8, %ymm13
vpxor 32(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 128(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, 32(%rdi)
# Row 1
vpxor 96(%rdi), %ymm8, %ymm10
vpxor -64(%rdi), %ymm9, %ymm11
vpxor 64(%rcx), %ymm5, %ymm12
vpxor -96(%rcx), %ymm6, %ymm13
vpxor (%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, (%rax)
# Row 2
vpxor 64(%rax), %ymm6, %ymm10
vpxor -96(%rax), %ymm7, %ymm11
vpxor (%rdi), %ymm8, %ymm12
vpxor 128(%rcx), %ymm9, %ymm13
vpxor -32(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, -32(%rcx)
# Row 3
vpxor 128(%rax), %ymm9, %ymm10
vpxor -32(%rax), %ymm5, %ymm11
vpxor 64(%rdi), %ymm6, %ymm12
vpxor -96(%rdi), %ymm7, %ymm13
vpxor 32(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, 32(%rcx)
# Row 4
vpxor 96(%rcx), %ymm7, %ymm10
vpxor -64(%rcx), %ymm8, %ymm11
vpxor 32(%rax), %ymm9, %ymm12
vpxor 128(%rdi), %ymm5, %ymm13
vpxor -32(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, -32(%rdi)
# Round 5
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -64(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm4, %ymm14
vpxor 64(%rdi), %ymm12, %ymm12
vpxor 96(%rdi), %ymm10, %ymm10
vpxor -96(%rax), %ymm11, %ymm11
vpxor -64(%rax), %ymm13, %ymm13
vpxor -32(%rax), %ymm11, %ymm11
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm10, %ymm10
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -32(%rcx), %ymm14, %ymm14
vpxor (%rcx), %ymm11, %ymm11
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -64(%rdi), %ymm6, %ymm11
vpxor (%rdi), %ymm7, %ymm12
vpxor -96(%rdi), %ymm8, %ymm13
vpxor -32(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 160(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, -32(%rdi)
# Row 1
vpxor -64(%rax), %ymm8, %ymm10
vpxor (%rax), %ymm9, %ymm11
vpxor 64(%rax), %ymm5, %ymm12
vpxor -32(%rax), %ymm6, %ymm13
vpxor 32(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 32(%rax)
# Row 2
vpxor (%rcx), %ymm6, %ymm10
vpxor 64(%rcx), %ymm7, %ymm11
vpxor 128(%rcx), %ymm8, %ymm12
vpxor 32(%rcx), %ymm9, %ymm13
vpxor 96(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 96(%rcx)
# Row 3
vpxor 32(%rdi), %ymm9, %ymm10
vpxor 96(%rdi), %ymm5, %ymm11
vpxor -96(%rax), %ymm6, %ymm12
vpxor 64(%rdi), %ymm7, %ymm13
vpxor 128(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, 128(%rdi)
# Row 4
vpxor 96(%rax), %ymm7, %ymm10
vpxor -96(%rcx), %ymm8, %ymm11
vpxor -32(%rcx), %ymm9, %ymm12
vpxor 128(%rax), %ymm5, %ymm13
vpxor -64(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, -64(%rcx)
# Round 6
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -64(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm10, %ymm10
vpxor 64(%rdi), %ymm13, %ymm13
vpxor 96(%rdi), %ymm11, %ymm11
vpxor 128(%rdi), %ymm14, %ymm14
vpxor -96(%rax), %ymm12, %ymm12
vpxor -64(%rax), %ymm10, %ymm10
vpxor -32(%rax), %ymm13, %ymm13
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm12, %ymm12
vpxor (%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm14, %ymm14
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor (%rax), %ymm6, %ymm11
vpxor 128(%rcx), %ymm7, %ymm12
vpxor 64(%rdi), %ymm8, %ymm13
vpxor -64(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 192(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, -64(%rcx)
# Row 1
vpxor -96(%rdi), %ymm8, %ymm10
vpxor 32(%rax), %ymm9, %ymm11
vpxor (%rcx), %ymm5, %ymm12
vpxor 96(%rdi), %ymm6, %ymm13
vpxor -32(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, -32(%rcx)
# Row 2
vpxor -64(%rdi), %ymm6, %ymm10
vpxor 64(%rax), %ymm7, %ymm11
vpxor 32(%rcx), %ymm8, %ymm12
vpxor 128(%rdi), %ymm9, %ymm13
vpxor 96(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, 96(%rax)
# Row 3
vpxor -32(%rdi), %ymm9, %ymm10
vpxor -64(%rax), %ymm5, %ymm11
vpxor 64(%rcx), %ymm6, %ymm12
vpxor -96(%rax), %ymm7, %ymm13
vpxor 128(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, 128(%rax)
# Row 4
vpxor (%rdi), %ymm7, %ymm10
vpxor -32(%rax), %ymm8, %ymm11
vpxor 96(%rcx), %ymm9, %ymm12
vpxor 32(%rdi), %ymm5, %ymm13
vpxor -96(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, -96(%rcx)
# Round 7
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm10, %ymm10
vpxor -64(%rdi), %ymm10, %ymm10
vpxor -32(%rdi), %ymm10, %ymm10
vpxor 64(%rdi), %ymm3, %ymm13
vpxor 96(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm13, %ymm13
vpxor -96(%rax), %ymm13, %ymm13
vpxor -64(%rax), %ymm1, %ymm11
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm4, %ymm14
vpxor 128(%rax), %ymm14, %ymm14
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm14, %ymm14
vpxor (%rcx), %ymm2, %ymm12
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 32(%rax), %ymm6, %ymm11
vpxor 32(%rcx), %ymm7, %ymm12
vpxor -96(%rax), %ymm8, %ymm13
vpxor -96(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 224(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, -96(%rcx)
# Row 1
vpxor 64(%rdi), %ymm8, %ymm10
vpxor -32(%rcx), %ymm9, %ymm11
vpxor -64(%rdi), %ymm5, %ymm12
vpxor -64(%rax), %ymm6, %ymm13
vpxor 96(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, 96(%rcx)
# Row 2
vpxor (%rax), %ymm6, %ymm10
vpxor (%rcx), %ymm7, %ymm11
vpxor 128(%rdi), %ymm8, %ymm12
vpxor 128(%rax), %ymm9, %ymm13
vpxor (%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, (%rdi)
# Row 3
vpxor -64(%rcx), %ymm9, %ymm10
vpxor -96(%rdi), %ymm5, %ymm11
vpxor 64(%rax), %ymm6, %ymm12
vpxor 64(%rcx), %ymm7, %ymm13
vpxor 32(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, 32(%rdi)
# Row 4
vpxor 128(%rcx), %ymm7, %ymm10
vpxor 96(%rdi), %ymm8, %ymm11
vpxor 96(%rax), %ymm9, %ymm12
vpxor -32(%rdi), %ymm5, %ymm13
vpxor -32(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, -32(%rax)
# Round 8
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm1, %ymm11
vpxor -64(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm4, %ymm14
vpxor 32(%rdi), %ymm14, %ymm14
vpxor 64(%rdi), %ymm10, %ymm10
vpxor 128(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm3, %ymm13
vpxor -64(%rax), %ymm13, %ymm13
vpxor (%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -64(%rcx), %ymm10, %ymm10
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm11, %ymm11
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -32(%rcx), %ymm6, %ymm11
vpxor 128(%rdi), %ymm7, %ymm12
vpxor 64(%rcx), %ymm8, %ymm13
vpxor -32(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 256(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, -32(%rax)
# Row 1
vpxor -96(%rax), %ymm8, %ymm10
vpxor 96(%rcx), %ymm9, %ymm11
vpxor (%rax), %ymm5, %ymm12
vpxor -96(%rdi), %ymm6, %ymm13
vpxor 96(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, 96(%rax)
# Row 2
vpxor 32(%rax), %ymm6, %ymm10
vpxor -64(%rdi), %ymm7, %ymm11
vpxor 128(%rax), %ymm8, %ymm12
vpxor 32(%rdi), %ymm9, %ymm13
vpxor 128(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, 128(%rcx)
# Row 3
vpxor -96(%rcx), %ymm9, %ymm10
vpxor 64(%rdi), %ymm5, %ymm11
vpxor (%rcx), %ymm6, %ymm12
vpxor 64(%rax), %ymm7, %ymm13
vpxor -32(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, -32(%rdi)
# Row 4
vpxor 32(%rcx), %ymm7, %ymm10
vpxor -64(%rax), %ymm8, %ymm11
vpxor (%rdi), %ymm9, %ymm12
vpxor -64(%rcx), %ymm5, %ymm13
vpxor 96(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, 96(%rdi)
# Round 9
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -64(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm4, %ymm14
vpxor 32(%rdi), %ymm13, %ymm13
vpxor 64(%rdi), %ymm11, %ymm11
vpxor 128(%rdi), %ymm2, %ymm12
vpxor -96(%rax), %ymm10, %ymm10
vpxor -32(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm12, %ymm12
vpxor 32(%rax), %ymm10, %ymm10
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm14, %ymm14
vpxor 128(%rax), %ymm12, %ymm12
vpxor -96(%rcx), %ymm10, %ymm10
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm11, %ymm11
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 96(%rcx), %ymm6, %ymm11
vpxor 128(%rax), %ymm7, %ymm12
vpxor 64(%rax), %ymm8, %ymm13
vpxor 96(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 288(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 1
vpxor 64(%rcx), %ymm8, %ymm10
vpxor 96(%rax), %ymm9, %ymm11
vpxor 32(%rax), %ymm5, %ymm12
vpxor 64(%rdi), %ymm6, %ymm13
vpxor (%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, (%rdi)
# Row 2
vpxor -32(%rcx), %ymm6, %ymm10
vpxor (%rax), %ymm7, %ymm11
vpxor 32(%rdi), %ymm8, %ymm12
vpxor -32(%rdi), %ymm9, %ymm13
vpxor 32(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, 32(%rcx)
# Row 3
vpxor -32(%rax), %ymm9, %ymm10
vpxor -96(%rax), %ymm5, %ymm11
vpxor -64(%rdi), %ymm6, %ymm12
vpxor (%rcx), %ymm7, %ymm13
vpxor -64(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, -64(%rcx)
# Row 4
vpxor 128(%rdi), %ymm7, %ymm10
vpxor -96(%rdi), %ymm8, %ymm11
vpxor 128(%rcx), %ymm9, %ymm12
vpxor -96(%rcx), %ymm5, %ymm13
vpxor -64(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, -64(%rax)
# Round 10
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm2, %ymm12
vpxor -32(%rdi), %ymm3, %ymm13
vpxor (%rdi), %ymm4, %ymm14
vpxor 32(%rdi), %ymm12, %ymm12
vpxor 64(%rdi), %ymm13, %ymm13
vpxor 96(%rdi), %ymm14, %ymm14
vpxor -96(%rax), %ymm1, %ymm11
vpxor -32(%rax), %ymm10, %ymm10
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm12, %ymm12
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm11, %ymm11
vpxor 128(%rax), %ymm12, %ymm12
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm10, %ymm10
vpxor (%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm10, %ymm10
vpxor 96(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 96(%rax), %ymm6, %ymm11
vpxor 32(%rdi), %ymm7, %ymm12
vpxor (%rcx), %ymm8, %ymm13
vpxor -64(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 320(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, -64(%rax)
# Row 1
vpxor 64(%rax), %ymm8, %ymm10
vpxor (%rdi), %ymm9, %ymm11
vpxor -32(%rcx), %ymm5, %ymm12
vpxor -96(%rax), %ymm6, %ymm13
vpxor 128(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, 128(%rcx)
# Row 2
vpxor 96(%rcx), %ymm6, %ymm10
vpxor 32(%rax), %ymm7, %ymm11
vpxor -32(%rdi), %ymm8, %ymm12
vpxor -64(%rcx), %ymm9, %ymm13
vpxor 128(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, 128(%rdi)
# Row 3
vpxor 96(%rdi), %ymm9, %ymm10
vpxor 64(%rcx), %ymm5, %ymm11
vpxor (%rax), %ymm6, %ymm12
vpxor -64(%rdi), %ymm7, %ymm13
vpxor -96(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -96(%rcx)
# Row 4
vpxor 128(%rax), %ymm7, %ymm10
vpxor 64(%rdi), %ymm8, %ymm11
vpxor 32(%rcx), %ymm9, %ymm12
vpxor -32(%rax), %ymm5, %ymm13
vpxor -96(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, -96(%rdi)
# Round 11
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm12, %ymm12
vpxor 96(%rdi), %ymm10, %ymm10
vpxor 128(%rdi), %ymm4, %ymm14
vpxor -96(%rax), %ymm13, %ymm13
vpxor -64(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm12, %ymm12
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm11, %ymm11
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -64(%rcx), %ymm13, %ymm13
vpxor -32(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm10, %ymm10
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor (%rdi), %ymm6, %ymm11
vpxor -32(%rdi), %ymm7, %ymm12
vpxor -64(%rdi), %ymm8, %ymm13
vpxor -96(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 352(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -96(%rdi)
# Row 1
vpxor (%rcx), %ymm8, %ymm10
vpxor 128(%rcx), %ymm9, %ymm11
vpxor 96(%rcx), %ymm5, %ymm12
vpxor 64(%rcx), %ymm6, %ymm13
vpxor 32(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, 32(%rcx)
# Row 2
vpxor 96(%rax), %ymm6, %ymm10
vpxor -32(%rcx), %ymm7, %ymm11
vpxor -64(%rcx), %ymm8, %ymm12
vpxor -96(%rcx), %ymm9, %ymm13
vpxor 128(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, 128(%rax)
# Row 3
vpxor -64(%rax), %ymm9, %ymm10
vpxor 64(%rax), %ymm5, %ymm11
vpxor 32(%rax), %ymm6, %ymm12
vpxor (%rax), %ymm7, %ymm13
vpxor -32(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, -32(%rax)
# Row 4
vpxor 32(%rdi), %ymm7, %ymm10
vpxor -96(%rax), %ymm8, %ymm11
vpxor 128(%rdi), %ymm9, %ymm12
vpxor 96(%rdi), %ymm5, %ymm13
vpxor 64(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, 64(%rdi)
# Round 12
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -64(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm1, %ymm11
vpxor -64(%rax), %ymm10, %ymm10
vpxor -32(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm12, %ymm12
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm10, %ymm10
vpxor 128(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -64(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 128(%rcx), %ymm6, %ymm11
vpxor -64(%rcx), %ymm7, %ymm12
vpxor (%rax), %ymm8, %ymm13
vpxor 64(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 384(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, 64(%rdi)
# Row 1
vpxor -64(%rdi), %ymm8, %ymm10
vpxor 32(%rcx), %ymm9, %ymm11
vpxor 96(%rax), %ymm5, %ymm12
vpxor 64(%rax), %ymm6, %ymm13
vpxor 128(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, 128(%rdi)
# Row 2
vpxor (%rdi), %ymm6, %ymm10
vpxor 96(%rcx), %ymm7, %ymm11
vpxor -96(%rcx), %ymm8, %ymm12
vpxor -32(%rax), %ymm9, %ymm13
vpxor 32(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 32(%rdi)
# Row 3
vpxor -96(%rdi), %ymm9, %ymm10
vpxor (%rcx), %ymm5, %ymm11
vpxor -32(%rcx), %ymm6, %ymm12
vpxor 32(%rax), %ymm7, %ymm13
vpxor 96(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 4
vpxor -32(%rdi), %ymm7, %ymm10
vpxor 64(%rcx), %ymm8, %ymm11
vpxor 128(%rax), %ymm9, %ymm12
vpxor -64(%rax), %ymm5, %ymm13
vpxor -96(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, -96(%rax)
# Round 13
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm10, %ymm10
vpxor -64(%rdi), %ymm10, %ymm10
vpxor (%rdi), %ymm10, %ymm10
vpxor 32(%rdi), %ymm4, %ymm14
vpxor 64(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm14, %ymm14
vpxor 128(%rdi), %ymm14, %ymm14
vpxor -32(%rax), %ymm3, %ymm13
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm13, %ymm13
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm2, %ymm12
vpxor -96(%rcx), %ymm12, %ymm12
vpxor -64(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm1, %ymm11
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm11, %ymm11
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 32(%rcx), %ymm6, %ymm11
vpxor -96(%rcx), %ymm7, %ymm12
vpxor 32(%rax), %ymm8, %ymm13
vpxor -96(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 416(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, -96(%rax)
# Row 1
vpxor (%rax), %ymm8, %ymm10
vpxor 128(%rdi), %ymm9, %ymm11
vpxor (%rdi), %ymm5, %ymm12
vpxor (%rcx), %ymm6, %ymm13
vpxor 128(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, 128(%rax)
# Row 2
vpxor 128(%rcx), %ymm6, %ymm10
vpxor 96(%rax), %ymm7, %ymm11
vpxor -32(%rax), %ymm8, %ymm12
vpxor 96(%rdi), %ymm9, %ymm13
vpxor -32(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, -32(%rdi)
# Row 3
vpxor 64(%rdi), %ymm9, %ymm10
vpxor -64(%rdi), %ymm5, %ymm11
vpxor 96(%rcx), %ymm6, %ymm12
vpxor -32(%rcx), %ymm7, %ymm13
vpxor -64(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, -64(%rax)
# Row 4
vpxor -64(%rcx), %ymm7, %ymm10
vpxor 64(%rax), %ymm8, %ymm11
vpxor 32(%rdi), %ymm9, %ymm12
vpxor -96(%rdi), %ymm5, %ymm13
vpxor 64(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, 64(%rcx)
# Round 14
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm2, %ymm12
vpxor 64(%rdi), %ymm10, %ymm10
vpxor 96(%rdi), %ymm3, %ymm13
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm14, %ymm14
vpxor -64(%rax), %ymm14, %ymm14
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm11, %ymm11
vpxor 128(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 128(%rdi), %ymm6, %ymm11
vpxor -32(%rax), %ymm7, %ymm12
vpxor -32(%rcx), %ymm8, %ymm13
vpxor 64(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 448(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, 64(%rcx)
# Row 1
vpxor 32(%rax), %ymm8, %ymm10
vpxor 128(%rax), %ymm9, %ymm11
vpxor 128(%rcx), %ymm5, %ymm12
vpxor -64(%rdi), %ymm6, %ymm13
vpxor 32(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, 32(%rdi)
# Row 2
vpxor 32(%rcx), %ymm6, %ymm10
vpxor (%rdi), %ymm7, %ymm11
vpxor 96(%rdi), %ymm8, %ymm12
vpxor -64(%rax), %ymm9, %ymm13
vpxor -64(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, -64(%rcx)
# Row 3
vpxor -96(%rax), %ymm9, %ymm10
vpxor (%rax), %ymm5, %ymm11
vpxor 96(%rax), %ymm6, %ymm12
vpxor 96(%rcx), %ymm7, %ymm13
vpxor -96(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, -96(%rdi)
# Row 4
vpxor -96(%rcx), %ymm7, %ymm10
vpxor (%rcx), %ymm8, %ymm11
vpxor -32(%rdi), %ymm9, %ymm12
vpxor 64(%rdi), %ymm5, %ymm13
vpxor 64(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, 64(%rax)
# Round 15
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -64(%rdi), %ymm3, %ymm13
vpxor (%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm2, %ymm12
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm10, %ymm10
vpxor -64(%rax), %ymm13, %ymm13
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm11, %ymm11
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm10, %ymm10
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 128(%rax), %ymm6, %ymm11
vpxor 96(%rdi), %ymm7, %ymm12
vpxor 96(%rcx), %ymm8, %ymm13
vpxor 64(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 480(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, 64(%rax)
# Row 1
vpxor -32(%rcx), %ymm8, %ymm10
vpxor 32(%rdi), %ymm9, %ymm11
vpxor 32(%rcx), %ymm5, %ymm12
vpxor (%rax), %ymm6, %ymm13
vpxor -32(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, -32(%rdi)
# Row 2
vpxor 128(%rdi), %ymm6, %ymm10
vpxor 128(%rcx), %ymm7, %ymm11
vpxor -64(%rax), %ymm8, %ymm12
vpxor -96(%rdi), %ymm9, %ymm13
vpxor -96(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, -96(%rcx)
# Row 3
vpxor 64(%rcx), %ymm9, %ymm10
vpxor 32(%rax), %ymm5, %ymm11
vpxor (%rdi), %ymm6, %ymm12
vpxor 96(%rax), %ymm7, %ymm13
vpxor 64(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, 64(%rdi)
# Row 4
vpxor -32(%rax), %ymm7, %ymm10
vpxor -64(%rdi), %ymm8, %ymm11
vpxor -64(%rcx), %ymm9, %ymm12
vpxor -96(%rax), %ymm5, %ymm13
vpxor (%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, (%rcx)
# Round 16
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm1, %ymm11
vpxor 64(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm12, %ymm12
vpxor 128(%rdi), %ymm10, %ymm10
vpxor -64(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm13, %ymm13
vpxor 128(%rax), %ymm11, %ymm11
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm10, %ymm10
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 32(%rdi), %ymm6, %ymm11
vpxor -64(%rax), %ymm7, %ymm12
vpxor 96(%rax), %ymm8, %ymm13
vpxor (%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 512(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, (%rcx)
# Row 1
vpxor 96(%rcx), %ymm8, %ymm10
vpxor -32(%rdi), %ymm9, %ymm11
vpxor 128(%rdi), %ymm5, %ymm12
vpxor 32(%rax), %ymm6, %ymm13
vpxor -64(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, -64(%rcx)
# Row 2
vpxor 128(%rax), %ymm6, %ymm10
vpxor 32(%rcx), %ymm7, %ymm11
vpxor -96(%rdi), %ymm8, %ymm12
vpxor 64(%rdi), %ymm9, %ymm13
vpxor -32(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, -32(%rax)
# Row 3
vpxor 64(%rax), %ymm9, %ymm10
vpxor -32(%rcx), %ymm5, %ymm11
vpxor 128(%rcx), %ymm6, %ymm12
vpxor (%rdi), %ymm7, %ymm13
vpxor -96(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, -96(%rax)
# Row 4
vpxor 96(%rdi), %ymm7, %ymm10
vpxor (%rax), %ymm8, %ymm11
vpxor -96(%rcx), %ymm9, %ymm12
vpxor 64(%rcx), %ymm5, %ymm13
vpxor -64(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, -64(%rdi)
# Round 17
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -32(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm11, %ymm11
vpxor 64(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm4, %ymm14
vpxor -64(%rax), %ymm12, %ymm12
vpxor -32(%rax), %ymm14, %ymm14
vpxor 32(%rax), %ymm13, %ymm13
vpxor 64(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm13, %ymm13
vpxor 128(%rax), %ymm10, %ymm10
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm14, %ymm14
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm10, %ymm10
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -32(%rdi), %ymm6, %ymm11
vpxor -96(%rdi), %ymm7, %ymm12
vpxor (%rdi), %ymm8, %ymm13
vpxor -64(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 544(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, -64(%rdi)
# Row 1
vpxor 96(%rax), %ymm8, %ymm10
vpxor -64(%rcx), %ymm9, %ymm11
vpxor 128(%rax), %ymm5, %ymm12
vpxor -32(%rcx), %ymm6, %ymm13
vpxor -96(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, -96(%rcx)
# Row 2
vpxor 32(%rdi), %ymm6, %ymm10
vpxor 128(%rdi), %ymm7, %ymm11
vpxor 64(%rdi), %ymm8, %ymm12
vpxor -96(%rax), %ymm9, %ymm13
vpxor 96(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 3
vpxor (%rcx), %ymm9, %ymm10
vpxor 96(%rcx), %ymm5, %ymm11
vpxor 32(%rcx), %ymm6, %ymm12
vpxor 128(%rcx), %ymm7, %ymm13
vpxor 64(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, 64(%rcx)
# Row 4
vpxor -64(%rax), %ymm7, %ymm10
vpxor 32(%rax), %ymm8, %ymm11
vpxor -32(%rax), %ymm9, %ymm12
vpxor 64(%rax), %ymm5, %ymm13
vpxor (%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, (%rax)
# Round 18
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -64(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm10, %ymm10
vpxor 64(%rdi), %ymm12, %ymm12
vpxor 96(%rdi), %ymm14, %ymm14
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm10, %ymm10
vpxor 128(%rax), %ymm12, %ymm12
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -64(%rcx), %ymm11, %ymm11
vpxor -32(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm11, %ymm11
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -64(%rcx), %ymm6, %ymm11
vpxor 64(%rdi), %ymm7, %ymm12
vpxor 128(%rcx), %ymm8, %ymm13
vpxor (%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 576(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, (%rax)
# Row 1
vpxor (%rdi), %ymm8, %ymm10
vpxor -96(%rcx), %ymm9, %ymm11
vpxor 32(%rdi), %ymm5, %ymm12
vpxor 96(%rcx), %ymm6, %ymm13
vpxor -32(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, -32(%rax)
# Row 2
vpxor -32(%rdi), %ymm6, %ymm10
vpxor 128(%rax), %ymm7, %ymm11
vpxor -96(%rax), %ymm8, %ymm12
vpxor 64(%rcx), %ymm9, %ymm13
vpxor -64(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, -64(%rax)
# Row 3
vpxor -64(%rdi), %ymm9, %ymm10
vpxor 96(%rax), %ymm5, %ymm11
vpxor 128(%rdi), %ymm6, %ymm12
vpxor 32(%rcx), %ymm7, %ymm13
vpxor 64(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 64(%rax)
# Row 4
vpxor -96(%rdi), %ymm7, %ymm10
vpxor -32(%rcx), %ymm8, %ymm11
vpxor 96(%rdi), %ymm9, %ymm12
vpxor (%rcx), %ymm5, %ymm13
vpxor 32(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, 32(%rax)
# Round 19
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm10, %ymm10
vpxor -32(%rdi), %ymm10, %ymm10
vpxor (%rdi), %ymm10, %ymm10
vpxor 32(%rdi), %ymm2, %ymm12
vpxor 64(%rdi), %ymm12, %ymm12
vpxor 128(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm12, %ymm12
vpxor -64(%rax), %ymm4, %ymm14
vpxor -32(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm1, %ymm11
vpxor 128(%rax), %ymm11, %ymm11
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm11, %ymm11
vpxor 32(%rcx), %ymm3, %ymm13
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -96(%rcx), %ymm6, %ymm11
vpxor -96(%rax), %ymm7, %ymm12
vpxor 32(%rcx), %ymm8, %ymm13
vpxor 32(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 608(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 32(%rax)
# Row 1
vpxor 128(%rcx), %ymm8, %ymm10
vpxor -32(%rax), %ymm9, %ymm11
vpxor -32(%rdi), %ymm5, %ymm12
vpxor 96(%rax), %ymm6, %ymm13
vpxor 96(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 2
vpxor -64(%rcx), %ymm6, %ymm10
vpxor 32(%rdi), %ymm7, %ymm11
vpxor 64(%rcx), %ymm8, %ymm12
vpxor 64(%rax), %ymm9, %ymm13
vpxor -96(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, -96(%rdi)
# Row 3
vpxor (%rax), %ymm9, %ymm10
vpxor (%rdi), %ymm5, %ymm11
vpxor 128(%rax), %ymm6, %ymm12
vpxor 128(%rdi), %ymm7, %ymm13
vpxor (%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, (%rcx)
# Row 4
vpxor 64(%rdi), %ymm7, %ymm10
vpxor 96(%rcx), %ymm8, %ymm11
vpxor -64(%rax), %ymm9, %ymm12
vpxor -64(%rdi), %ymm5, %ymm13
vpxor -32(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -32(%rcx)
# Round 20
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm11, %ymm11
vpxor 96(%rdi), %ymm14, %ymm14
vpxor 128(%rdi), %ymm3, %ymm13
vpxor -96(%rax), %ymm12, %ymm12
vpxor -32(%rax), %ymm11, %ymm11
vpxor (%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm13, %ymm13
vpxor 128(%rax), %ymm12, %ymm12
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm10, %ymm10
vpxor (%rcx), %ymm14, %ymm14
vpxor 32(%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -32(%rax), %ymm6, %ymm11
vpxor 64(%rcx), %ymm7, %ymm12
vpxor 128(%rdi), %ymm8, %ymm13
vpxor -32(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 640(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, -32(%rcx)
# Row 1
vpxor 32(%rcx), %ymm8, %ymm10
vpxor 96(%rdi), %ymm9, %ymm11
vpxor -64(%rcx), %ymm5, %ymm12
vpxor (%rdi), %ymm6, %ymm13
vpxor -64(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, -64(%rax)
# Row 2
vpxor -96(%rcx), %ymm6, %ymm10
vpxor -32(%rdi), %ymm7, %ymm11
vpxor 64(%rax), %ymm8, %ymm12
vpxor (%rcx), %ymm9, %ymm13
vpxor 64(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, 64(%rdi)
# Row 3
vpxor 32(%rax), %ymm9, %ymm10
vpxor 128(%rcx), %ymm5, %ymm11
vpxor 32(%rdi), %ymm6, %ymm12
vpxor 128(%rax), %ymm7, %ymm13
vpxor -64(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, -64(%rdi)
# Row 4
vpxor -96(%rax), %ymm7, %ymm10
vpxor 96(%rax), %ymm8, %ymm11
vpxor -96(%rdi), %ymm9, %ymm12
vpxor (%rax), %ymm5, %ymm13
vpxor 96(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, 96(%rcx)
# Round 21
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm2, %ymm12
vpxor 64(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm11, %ymm11
vpxor 128(%rdi), %ymm13, %ymm13
vpxor -64(%rax), %ymm14, %ymm14
vpxor -32(%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm10, %ymm10
vpxor 64(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm10, %ymm10
vpxor -64(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm14, %ymm14
vpxor (%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm10, %ymm10
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 96(%rdi), %ymm6, %ymm11
vpxor 64(%rax), %ymm7, %ymm12
vpxor 128(%rax), %ymm8, %ymm13
vpxor 96(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 672(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, 96(%rcx)
# Row 1
vpxor 128(%rdi), %ymm8, %ymm10
vpxor -64(%rax), %ymm9, %ymm11
vpxor -96(%rcx), %ymm5, %ymm12
vpxor 128(%rcx), %ymm6, %ymm13
vpxor -96(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, -96(%rdi)
# Row 2
vpxor -32(%rax), %ymm6, %ymm10
vpxor -64(%rcx), %ymm7, %ymm11
vpxor (%rcx), %ymm8, %ymm12
vpxor -64(%rdi), %ymm9, %ymm13
vpxor -96(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -96(%rax)
# Row 3
vpxor -32(%rcx), %ymm9, %ymm10
vpxor 32(%rcx), %ymm5, %ymm11
vpxor -32(%rdi), %ymm6, %ymm12
vpxor 32(%rdi), %ymm7, %ymm13
vpxor (%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, (%rax)
# Row 4
vpxor 64(%rcx), %ymm7, %ymm10
vpxor (%rdi), %ymm8, %ymm11
vpxor 64(%rdi), %ymm9, %ymm12
vpxor 32(%rax), %ymm5, %ymm13
vpxor 96(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, 96(%rax)
# Round 22
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -64(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm13, %ymm13
vpxor 96(%rdi), %ymm1, %ymm11
vpxor 128(%rdi), %ymm10, %ymm10
vpxor -96(%rax), %ymm14, %ymm14
vpxor -64(%rax), %ymm11, %ymm11
vpxor -32(%rax), %ymm10, %ymm10
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm12, %ymm12
vpxor -64(%rcx), %ymm11, %ymm11
vpxor -32(%rcx), %ymm10, %ymm10
vpxor (%rcx), %ymm12, %ymm12
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm14, %ymm14
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -64(%rax), %ymm6, %ymm11
vpxor (%rcx), %ymm7, %ymm12
vpxor 32(%rdi), %ymm8, %ymm13
vpxor 96(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 704(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, 96(%rax)
# Row 1
vpxor 128(%rax), %ymm8, %ymm10
vpxor -96(%rdi), %ymm9, %ymm11
vpxor -32(%rax), %ymm5, %ymm12
vpxor 32(%rcx), %ymm6, %ymm13
vpxor 64(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 64(%rdi)
# Row 2
vpxor 96(%rdi), %ymm6, %ymm10
vpxor -96(%rcx), %ymm7, %ymm11
vpxor -64(%rdi), %ymm8, %ymm12
vpxor (%rax), %ymm9, %ymm13
vpxor 64(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, 64(%rcx)
# Row 3
vpxor 96(%rcx), %ymm9, %ymm10
vpxor 128(%rdi), %ymm5, %ymm11
vpxor -64(%rcx), %ymm6, %ymm12
vpxor -32(%rdi), %ymm7, %ymm13
vpxor 32(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, 32(%rax)
# Row 4
vpxor 64(%rax), %ymm7, %ymm10
vpxor 128(%rcx), %ymm8, %ymm11
vpxor -96(%rax), %ymm9, %ymm12
vpxor -32(%rcx), %ymm5, %ymm13
vpxor (%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, (%rdi)
# Round 23
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm1, %ymm11
vpxor -64(%rdi), %ymm2, %ymm12
vpxor -32(%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm13, %ymm13
vpxor 64(%rdi), %ymm4, %ymm14
vpxor 96(%rdi), %ymm10, %ymm10
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -64(%rax), %ymm11, %ymm11
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm14, %ymm14
vpxor 128(%rax), %ymm10, %ymm10
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm12, %ymm12
vpxor 32(%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -96(%rdi), %ymm6, %ymm11
vpxor -64(%rdi), %ymm7, %ymm12
vpxor -32(%rdi), %ymm8, %ymm13
vpxor (%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 736(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, (%rdi)
# Row 1
vpxor 32(%rdi), %ymm8, %ymm10
vpxor 64(%rdi), %ymm9, %ymm11
vpxor 96(%rdi), %ymm5, %ymm12
vpxor 128(%rdi), %ymm6, %ymm13
vpxor -96(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, -96(%rax)
# Row 2
vpxor -64(%rax), %ymm6, %ymm10
vpxor -32(%rax), %ymm7, %ymm11
vpxor (%rax), %ymm8, %ymm12
vpxor 32(%rax), %ymm9, %ymm13
vpxor 64(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, 64(%rax)
# Row 3
vpxor 96(%rax), %ymm9, %ymm10
vpxor 128(%rax), %ymm5, %ymm11
vpxor -96(%rcx), %ymm6, %ymm12
vpxor -64(%rcx), %ymm7, %ymm13
vpxor -32(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, -32(%rcx)
# Row 4
vpxor (%rcx), %ymm7, %ymm10
vpxor 32(%rcx), %ymm8, %ymm11
vpxor 64(%rcx), %ymm9, %ymm12
vpxor 96(%rcx), %ymm5, %ymm13
vpxor 128(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, 128(%rcx)
subq $0x80, %rdi
vmovdqu %ymm15, (%rdi)
vzeroupper
repz retq
#ifndef __APPLE__
.size sha3_256_blocksx4_seed_avx2,.-sha3_256_blocksx4_seed_avx2
#endif /* __APPLE__ */
#endif /* WOLFSSL_WC_MLKEM */
#ifdef WOLFSSL_WC_DILITHIUM
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 32
#else
.p2align 5
#endif /* __APPLE__ */
L_sha3_256_blockx4_seed_64_avx2_end_mark:
.quad 0x8000000000000000, 0x8000000000000000
.quad 0x8000000000000000, 0x8000000000000000
#ifndef __APPLE__
.text
.globl sha3_256_blocksx4_seed_64_avx2
.type sha3_256_blocksx4_seed_64_avx2,@function
.align 16
sha3_256_blocksx4_seed_64_avx2:
#else
.section __TEXT,__text
.globl _sha3_256_blocksx4_seed_64_avx2
.p2align 4
_sha3_256_blocksx4_seed_64_avx2:
#endif /* __APPLE__ */
leaq L_sha3_x4_avx2_r(%rip), %rdx
movq %rdi, %rax
movq %rdi, %rcx
vpbroadcastq (%rsi), %ymm15
addq $0x80, %rdi
vpbroadcastq 8(%rsi), %ymm11
addq $0x180, %rax
vpbroadcastq 16(%rsi), %ymm12
addq $0x280, %rcx
vpbroadcastq 24(%rsi), %ymm13
vpbroadcastq 32(%rsi), %ymm14
vpbroadcastq 40(%rsi), %ymm0
vpbroadcastq 48(%rsi), %ymm1
vpbroadcastq 56(%rsi), %ymm2
vmovdqu 128(%rdi), %ymm3
vmovdqu %ymm11, -96(%rdi)
vmovdqu %ymm12, -64(%rdi)
vmovdqu %ymm13, -32(%rdi)
vmovdqu %ymm14, (%rdi)
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, 96(%rdi)
vpxor %ymm4, %ymm4, %ymm4
vpxor %ymm6, %ymm6, %ymm6
vmovdqu L_sha3_256_blockx4_seed_64_avx2_end_mark(%rip), %ymm5
vmovdqu %ymm6, -96(%rax)
vmovdqu %ymm6, -64(%rax)
vmovdqu %ymm6, -32(%rax)
vmovdqu %ymm6, (%rax)
vmovdqu %ymm6, 32(%rax)
vmovdqu %ymm6, 64(%rax)
vmovdqu %ymm6, 96(%rax)
vmovdqu %ymm5, 128(%rax)
vmovdqu %ymm6, -96(%rcx)
vmovdqu %ymm6, -64(%rcx)
vmovdqu %ymm6, -32(%rcx)
vmovdqu %ymm6, (%rcx)
vmovdqu %ymm6, 32(%rcx)
vmovdqu %ymm6, 64(%rcx)
vmovdqu %ymm6, 96(%rcx)
vmovdqu %ymm6, 128(%rcx)
vmovdqu %ymm15, %ymm10
# Round 0
# Calc b[0..4]
vpxor %ymm0, %ymm15, %ymm10
vpxor %ymm1, %ymm11, %ymm11
vpxor %ymm2, %ymm12, %ymm12
vpxor %ymm3, %ymm13, %ymm13
vpxor %ymm4, %ymm14, %ymm14
vpxor -64(%rax), %ymm10, %ymm10
vpxor -32(%rax), %ymm11, %ymm11
vpxor (%rax), %ymm12, %ymm12
vpxor 32(%rax), %ymm13, %ymm13
vpxor 64(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm10, %ymm10
vpxor 128(%rax), %ymm11, %ymm11
vpxor -96(%rcx), %ymm12, %ymm12
vpxor -64(%rcx), %ymm13, %ymm13
vpxor -32(%rcx), %ymm14, %ymm14
vpxor (%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 64(%rdi), %ymm6, %ymm11
vpxor (%rax), %ymm7, %ymm12
vpxor -64(%rcx), %ymm8, %ymm13
vpxor 128(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor (%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, 128(%rcx)
# Row 1
vpxor -32(%rdi), %ymm8, %ymm10
vpxor -96(%rax), %ymm9, %ymm11
vpxor -64(%rax), %ymm5, %ymm12
vpxor 128(%rax), %ymm6, %ymm13
vpxor 64(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, 64(%rcx)
# Row 2
vpxor -96(%rdi), %ymm6, %ymm10
vpxor 96(%rdi), %ymm7, %ymm11
vpxor 32(%rax), %ymm8, %ymm12
vpxor -32(%rcx), %ymm9, %ymm13
vpxor (%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, (%rcx)
# Row 3
vpxor (%rdi), %ymm9, %ymm10
vpxor 32(%rdi), %ymm5, %ymm11
vpxor -32(%rax), %ymm6, %ymm12
vpxor -96(%rcx), %ymm7, %ymm13
vpxor 96(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, 96(%rcx)
# Row 4
vpxor -64(%rdi), %ymm7, %ymm10
vpxor 128(%rdi), %ymm8, %ymm11
vpxor 64(%rax), %ymm9, %ymm12
vpxor 96(%rax), %ymm5, %ymm13
vpxor 32(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, 32(%rcx)
# Round 1
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm10, %ymm10
vpxor -32(%rdi), %ymm10, %ymm10
vpxor (%rdi), %ymm10, %ymm10
vpxor 32(%rdi), %ymm1, %ymm11
vpxor 64(%rdi), %ymm11, %ymm11
vpxor 96(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm11, %ymm11
vpxor -64(%rax), %ymm2, %ymm12
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm12, %ymm12
vpxor 32(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm3, %ymm13
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -64(%rcx), %ymm13, %ymm13
vpxor -32(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm4, %ymm14
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm14, %ymm14
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -96(%rax), %ymm6, %ymm11
vpxor 32(%rax), %ymm7, %ymm12
vpxor -96(%rcx), %ymm8, %ymm13
vpxor 32(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 32(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, 32(%rcx)
# Row 1
vpxor -64(%rcx), %ymm8, %ymm10
vpxor 64(%rcx), %ymm9, %ymm11
vpxor -96(%rdi), %ymm5, %ymm12
vpxor 32(%rdi), %ymm6, %ymm13
vpxor 64(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, 64(%rax)
# Row 2
vpxor 64(%rdi), %ymm6, %ymm10
vpxor -64(%rax), %ymm7, %ymm11
vpxor -32(%rcx), %ymm8, %ymm12
vpxor 96(%rcx), %ymm9, %ymm13
vpxor -64(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, -64(%rdi)
# Row 3
vpxor 128(%rcx), %ymm9, %ymm10
vpxor -32(%rdi), %ymm5, %ymm11
vpxor 96(%rdi), %ymm6, %ymm12
vpxor -32(%rax), %ymm7, %ymm13
vpxor 96(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 96(%rax)
# Row 4
vpxor (%rax), %ymm7, %ymm10
vpxor 128(%rax), %ymm8, %ymm11
vpxor (%rcx), %ymm9, %ymm12
vpxor (%rdi), %ymm5, %ymm13
vpxor 128(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, 128(%rdi)
# Round 2
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -64(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm3, %ymm13
vpxor 64(%rdi), %ymm10, %ymm10
vpxor 96(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm11, %ymm11
vpxor -64(%rax), %ymm11, %ymm11
vpxor -32(%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm12, %ymm12
vpxor 64(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -64(%rcx), %ymm10, %ymm10
vpxor -32(%rcx), %ymm12, %ymm12
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 64(%rcx), %ymm6, %ymm11
vpxor -32(%rcx), %ymm7, %ymm12
vpxor -32(%rax), %ymm8, %ymm13
vpxor 128(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 64(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 128(%rdi)
# Row 1
vpxor -96(%rcx), %ymm8, %ymm10
vpxor 64(%rax), %ymm9, %ymm11
vpxor 64(%rdi), %ymm5, %ymm12
vpxor -32(%rdi), %ymm6, %ymm13
vpxor (%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, (%rcx)
# Row 2
vpxor -96(%rax), %ymm6, %ymm10
vpxor -96(%rdi), %ymm7, %ymm11
vpxor 96(%rcx), %ymm8, %ymm12
vpxor 96(%rax), %ymm9, %ymm13
vpxor (%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, (%rax)
# Row 3
vpxor 32(%rcx), %ymm9, %ymm10
vpxor -64(%rcx), %ymm5, %ymm11
vpxor -64(%rax), %ymm6, %ymm12
vpxor 96(%rdi), %ymm7, %ymm13
vpxor (%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, (%rdi)
# Row 4
vpxor 32(%rax), %ymm7, %ymm10
vpxor 32(%rdi), %ymm8, %ymm11
vpxor -64(%rdi), %ymm9, %ymm12
vpxor 128(%rcx), %ymm5, %ymm13
vpxor 128(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, 128(%rax)
# Round 3
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm3, %ymm13
vpxor (%rdi), %ymm4, %ymm14
vpxor 64(%rdi), %ymm2, %ymm12
vpxor 96(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm14, %ymm14
vpxor -96(%rax), %ymm10, %ymm10
vpxor -64(%rax), %ymm12, %ymm12
vpxor -32(%rax), %ymm13, %ymm13
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm10, %ymm10
vpxor -64(%rcx), %ymm11, %ymm11
vpxor -32(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm14, %ymm14
vpxor 32(%rcx), %ymm10, %ymm10
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 64(%rax), %ymm6, %ymm11
vpxor 96(%rcx), %ymm7, %ymm12
vpxor 96(%rdi), %ymm8, %ymm13
vpxor 128(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 96(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, 128(%rax)
# Row 1
vpxor -32(%rax), %ymm8, %ymm10
vpxor (%rcx), %ymm9, %ymm11
vpxor -96(%rax), %ymm5, %ymm12
vpxor -64(%rcx), %ymm6, %ymm13
vpxor -64(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, -64(%rdi)
# Row 2
vpxor 64(%rcx), %ymm6, %ymm10
vpxor 64(%rdi), %ymm7, %ymm11
vpxor 96(%rax), %ymm8, %ymm12
vpxor (%rdi), %ymm9, %ymm13
vpxor 32(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, 32(%rax)
# Row 3
vpxor 128(%rdi), %ymm9, %ymm10
vpxor -96(%rcx), %ymm5, %ymm11
vpxor -96(%rdi), %ymm6, %ymm12
vpxor -64(%rax), %ymm7, %ymm13
vpxor 128(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, 128(%rcx)
# Row 4
vpxor -32(%rcx), %ymm7, %ymm10
vpxor -32(%rdi), %ymm8, %ymm11
vpxor (%rax), %ymm9, %ymm12
vpxor 32(%rcx), %ymm5, %ymm13
vpxor 32(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 32(%rdi)
# Round 4
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -64(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm3, %ymm13
vpxor 64(%rdi), %ymm1, %ymm11
vpxor 96(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm10, %ymm10
vpxor -96(%rax), %ymm12, %ymm12
vpxor -64(%rax), %ymm13, %ymm13
vpxor -32(%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm11, %ymm11
vpxor 64(%rcx), %ymm10, %ymm10
vpxor 96(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor (%rcx), %ymm6, %ymm11
vpxor 96(%rax), %ymm7, %ymm12
vpxor -64(%rax), %ymm8, %ymm13
vpxor 32(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 128(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, 32(%rdi)
# Row 1
vpxor 96(%rdi), %ymm8, %ymm10
vpxor -64(%rdi), %ymm9, %ymm11
vpxor 64(%rcx), %ymm5, %ymm12
vpxor -96(%rcx), %ymm6, %ymm13
vpxor (%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, (%rax)
# Row 2
vpxor 64(%rax), %ymm6, %ymm10
vpxor -96(%rax), %ymm7, %ymm11
vpxor (%rdi), %ymm8, %ymm12
vpxor 128(%rcx), %ymm9, %ymm13
vpxor -32(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, -32(%rcx)
# Row 3
vpxor 128(%rax), %ymm9, %ymm10
vpxor -32(%rax), %ymm5, %ymm11
vpxor 64(%rdi), %ymm6, %ymm12
vpxor -96(%rdi), %ymm7, %ymm13
vpxor 32(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, 32(%rcx)
# Row 4
vpxor 96(%rcx), %ymm7, %ymm10
vpxor -64(%rcx), %ymm8, %ymm11
vpxor 32(%rax), %ymm9, %ymm12
vpxor 128(%rdi), %ymm5, %ymm13
vpxor -32(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, -32(%rdi)
# Round 5
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -64(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm4, %ymm14
vpxor 64(%rdi), %ymm12, %ymm12
vpxor 96(%rdi), %ymm10, %ymm10
vpxor -96(%rax), %ymm11, %ymm11
vpxor -64(%rax), %ymm13, %ymm13
vpxor -32(%rax), %ymm11, %ymm11
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm10, %ymm10
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -32(%rcx), %ymm14, %ymm14
vpxor (%rcx), %ymm11, %ymm11
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -64(%rdi), %ymm6, %ymm11
vpxor (%rdi), %ymm7, %ymm12
vpxor -96(%rdi), %ymm8, %ymm13
vpxor -32(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 160(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, -32(%rdi)
# Row 1
vpxor -64(%rax), %ymm8, %ymm10
vpxor (%rax), %ymm9, %ymm11
vpxor 64(%rax), %ymm5, %ymm12
vpxor -32(%rax), %ymm6, %ymm13
vpxor 32(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 32(%rax)
# Row 2
vpxor (%rcx), %ymm6, %ymm10
vpxor 64(%rcx), %ymm7, %ymm11
vpxor 128(%rcx), %ymm8, %ymm12
vpxor 32(%rcx), %ymm9, %ymm13
vpxor 96(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 96(%rcx)
# Row 3
vpxor 32(%rdi), %ymm9, %ymm10
vpxor 96(%rdi), %ymm5, %ymm11
vpxor -96(%rax), %ymm6, %ymm12
vpxor 64(%rdi), %ymm7, %ymm13
vpxor 128(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, 128(%rdi)
# Row 4
vpxor 96(%rax), %ymm7, %ymm10
vpxor -96(%rcx), %ymm8, %ymm11
vpxor -32(%rcx), %ymm9, %ymm12
vpxor 128(%rax), %ymm5, %ymm13
vpxor -64(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, -64(%rcx)
# Round 6
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -64(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm10, %ymm10
vpxor 64(%rdi), %ymm13, %ymm13
vpxor 96(%rdi), %ymm11, %ymm11
vpxor 128(%rdi), %ymm14, %ymm14
vpxor -96(%rax), %ymm12, %ymm12
vpxor -64(%rax), %ymm10, %ymm10
vpxor -32(%rax), %ymm13, %ymm13
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm12, %ymm12
vpxor (%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm14, %ymm14
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor (%rax), %ymm6, %ymm11
vpxor 128(%rcx), %ymm7, %ymm12
vpxor 64(%rdi), %ymm8, %ymm13
vpxor -64(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 192(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, -64(%rcx)
# Row 1
vpxor -96(%rdi), %ymm8, %ymm10
vpxor 32(%rax), %ymm9, %ymm11
vpxor (%rcx), %ymm5, %ymm12
vpxor 96(%rdi), %ymm6, %ymm13
vpxor -32(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, -32(%rcx)
# Row 2
vpxor -64(%rdi), %ymm6, %ymm10
vpxor 64(%rax), %ymm7, %ymm11
vpxor 32(%rcx), %ymm8, %ymm12
vpxor 128(%rdi), %ymm9, %ymm13
vpxor 96(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, 96(%rax)
# Row 3
vpxor -32(%rdi), %ymm9, %ymm10
vpxor -64(%rax), %ymm5, %ymm11
vpxor 64(%rcx), %ymm6, %ymm12
vpxor -96(%rax), %ymm7, %ymm13
vpxor 128(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, 128(%rax)
# Row 4
vpxor (%rdi), %ymm7, %ymm10
vpxor -32(%rax), %ymm8, %ymm11
vpxor 96(%rcx), %ymm9, %ymm12
vpxor 32(%rdi), %ymm5, %ymm13
vpxor -96(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, -96(%rcx)
# Round 7
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm10, %ymm10
vpxor -64(%rdi), %ymm10, %ymm10
vpxor -32(%rdi), %ymm10, %ymm10
vpxor 64(%rdi), %ymm3, %ymm13
vpxor 96(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm13, %ymm13
vpxor -96(%rax), %ymm13, %ymm13
vpxor -64(%rax), %ymm1, %ymm11
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm4, %ymm14
vpxor 128(%rax), %ymm14, %ymm14
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm14, %ymm14
vpxor (%rcx), %ymm2, %ymm12
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 32(%rax), %ymm6, %ymm11
vpxor 32(%rcx), %ymm7, %ymm12
vpxor -96(%rax), %ymm8, %ymm13
vpxor -96(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 224(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, -96(%rcx)
# Row 1
vpxor 64(%rdi), %ymm8, %ymm10
vpxor -32(%rcx), %ymm9, %ymm11
vpxor -64(%rdi), %ymm5, %ymm12
vpxor -64(%rax), %ymm6, %ymm13
vpxor 96(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, 96(%rcx)
# Row 2
vpxor (%rax), %ymm6, %ymm10
vpxor (%rcx), %ymm7, %ymm11
vpxor 128(%rdi), %ymm8, %ymm12
vpxor 128(%rax), %ymm9, %ymm13
vpxor (%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, (%rdi)
# Row 3
vpxor -64(%rcx), %ymm9, %ymm10
vpxor -96(%rdi), %ymm5, %ymm11
vpxor 64(%rax), %ymm6, %ymm12
vpxor 64(%rcx), %ymm7, %ymm13
vpxor 32(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, 32(%rdi)
# Row 4
vpxor 128(%rcx), %ymm7, %ymm10
vpxor 96(%rdi), %ymm8, %ymm11
vpxor 96(%rax), %ymm9, %ymm12
vpxor -32(%rdi), %ymm5, %ymm13
vpxor -32(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, -32(%rax)
# Round 8
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm1, %ymm11
vpxor -64(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm4, %ymm14
vpxor 32(%rdi), %ymm14, %ymm14
vpxor 64(%rdi), %ymm10, %ymm10
vpxor 128(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm3, %ymm13
vpxor -64(%rax), %ymm13, %ymm13
vpxor (%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -64(%rcx), %ymm10, %ymm10
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm11, %ymm11
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -32(%rcx), %ymm6, %ymm11
vpxor 128(%rdi), %ymm7, %ymm12
vpxor 64(%rcx), %ymm8, %ymm13
vpxor -32(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 256(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, -32(%rax)
# Row 1
vpxor -96(%rax), %ymm8, %ymm10
vpxor 96(%rcx), %ymm9, %ymm11
vpxor (%rax), %ymm5, %ymm12
vpxor -96(%rdi), %ymm6, %ymm13
vpxor 96(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, 96(%rax)
# Row 2
vpxor 32(%rax), %ymm6, %ymm10
vpxor -64(%rdi), %ymm7, %ymm11
vpxor 128(%rax), %ymm8, %ymm12
vpxor 32(%rdi), %ymm9, %ymm13
vpxor 128(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, 128(%rcx)
# Row 3
vpxor -96(%rcx), %ymm9, %ymm10
vpxor 64(%rdi), %ymm5, %ymm11
vpxor (%rcx), %ymm6, %ymm12
vpxor 64(%rax), %ymm7, %ymm13
vpxor -32(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, -32(%rdi)
# Row 4
vpxor 32(%rcx), %ymm7, %ymm10
vpxor -64(%rax), %ymm8, %ymm11
vpxor (%rdi), %ymm9, %ymm12
vpxor -64(%rcx), %ymm5, %ymm13
vpxor 96(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, 96(%rdi)
# Round 9
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -64(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm4, %ymm14
vpxor 32(%rdi), %ymm13, %ymm13
vpxor 64(%rdi), %ymm11, %ymm11
vpxor 128(%rdi), %ymm2, %ymm12
vpxor -96(%rax), %ymm10, %ymm10
vpxor -32(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm12, %ymm12
vpxor 32(%rax), %ymm10, %ymm10
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm14, %ymm14
vpxor 128(%rax), %ymm12, %ymm12
vpxor -96(%rcx), %ymm10, %ymm10
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm11, %ymm11
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 96(%rcx), %ymm6, %ymm11
vpxor 128(%rax), %ymm7, %ymm12
vpxor 64(%rax), %ymm8, %ymm13
vpxor 96(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 288(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 1
vpxor 64(%rcx), %ymm8, %ymm10
vpxor 96(%rax), %ymm9, %ymm11
vpxor 32(%rax), %ymm5, %ymm12
vpxor 64(%rdi), %ymm6, %ymm13
vpxor (%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, (%rdi)
# Row 2
vpxor -32(%rcx), %ymm6, %ymm10
vpxor (%rax), %ymm7, %ymm11
vpxor 32(%rdi), %ymm8, %ymm12
vpxor -32(%rdi), %ymm9, %ymm13
vpxor 32(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, 32(%rcx)
# Row 3
vpxor -32(%rax), %ymm9, %ymm10
vpxor -96(%rax), %ymm5, %ymm11
vpxor -64(%rdi), %ymm6, %ymm12
vpxor (%rcx), %ymm7, %ymm13
vpxor -64(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, -64(%rcx)
# Row 4
vpxor 128(%rdi), %ymm7, %ymm10
vpxor -96(%rdi), %ymm8, %ymm11
vpxor 128(%rcx), %ymm9, %ymm12
vpxor -96(%rcx), %ymm5, %ymm13
vpxor -64(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, -64(%rax)
# Round 10
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm2, %ymm12
vpxor -32(%rdi), %ymm3, %ymm13
vpxor (%rdi), %ymm4, %ymm14
vpxor 32(%rdi), %ymm12, %ymm12
vpxor 64(%rdi), %ymm13, %ymm13
vpxor 96(%rdi), %ymm14, %ymm14
vpxor -96(%rax), %ymm1, %ymm11
vpxor -32(%rax), %ymm10, %ymm10
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm12, %ymm12
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm11, %ymm11
vpxor 128(%rax), %ymm12, %ymm12
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm10, %ymm10
vpxor (%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm10, %ymm10
vpxor 96(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 96(%rax), %ymm6, %ymm11
vpxor 32(%rdi), %ymm7, %ymm12
vpxor (%rcx), %ymm8, %ymm13
vpxor -64(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 320(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, -64(%rax)
# Row 1
vpxor 64(%rax), %ymm8, %ymm10
vpxor (%rdi), %ymm9, %ymm11
vpxor -32(%rcx), %ymm5, %ymm12
vpxor -96(%rax), %ymm6, %ymm13
vpxor 128(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, 128(%rcx)
# Row 2
vpxor 96(%rcx), %ymm6, %ymm10
vpxor 32(%rax), %ymm7, %ymm11
vpxor -32(%rdi), %ymm8, %ymm12
vpxor -64(%rcx), %ymm9, %ymm13
vpxor 128(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, 128(%rdi)
# Row 3
vpxor 96(%rdi), %ymm9, %ymm10
vpxor 64(%rcx), %ymm5, %ymm11
vpxor (%rax), %ymm6, %ymm12
vpxor -64(%rdi), %ymm7, %ymm13
vpxor -96(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -96(%rcx)
# Row 4
vpxor 128(%rax), %ymm7, %ymm10
vpxor 64(%rdi), %ymm8, %ymm11
vpxor 32(%rcx), %ymm9, %ymm12
vpxor -32(%rax), %ymm5, %ymm13
vpxor -96(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, -96(%rdi)
# Round 11
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm12, %ymm12
vpxor 96(%rdi), %ymm10, %ymm10
vpxor 128(%rdi), %ymm4, %ymm14
vpxor -96(%rax), %ymm13, %ymm13
vpxor -64(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm12, %ymm12
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm11, %ymm11
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -64(%rcx), %ymm13, %ymm13
vpxor -32(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm10, %ymm10
vpxor 128(%rcx), %ymm14, %ymm14
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor (%rdi), %ymm6, %ymm11
vpxor -32(%rdi), %ymm7, %ymm12
vpxor -64(%rdi), %ymm8, %ymm13
vpxor -96(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 352(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -96(%rdi)
# Row 1
vpxor (%rcx), %ymm8, %ymm10
vpxor 128(%rcx), %ymm9, %ymm11
vpxor 96(%rcx), %ymm5, %ymm12
vpxor 64(%rcx), %ymm6, %ymm13
vpxor 32(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, 32(%rcx)
# Row 2
vpxor 96(%rax), %ymm6, %ymm10
vpxor -32(%rcx), %ymm7, %ymm11
vpxor -64(%rcx), %ymm8, %ymm12
vpxor -96(%rcx), %ymm9, %ymm13
vpxor 128(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, -96(%rcx)
vmovdqu %ymm4, 128(%rax)
# Row 3
vpxor -64(%rax), %ymm9, %ymm10
vpxor 64(%rax), %ymm5, %ymm11
vpxor 32(%rax), %ymm6, %ymm12
vpxor (%rax), %ymm7, %ymm13
vpxor -32(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 32(%rax)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, -32(%rax)
# Row 4
vpxor 32(%rdi), %ymm7, %ymm10
vpxor -96(%rax), %ymm8, %ymm11
vpxor 128(%rdi), %ymm9, %ymm12
vpxor 96(%rdi), %ymm5, %ymm13
vpxor 64(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, -96(%rax)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, 64(%rdi)
# Round 12
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -64(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm1, %ymm11
vpxor -64(%rax), %ymm10, %ymm10
vpxor -32(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm12, %ymm12
vpxor 64(%rax), %ymm11, %ymm11
vpxor 96(%rax), %ymm10, %ymm10
vpxor 128(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm13, %ymm13
vpxor -64(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm14, %ymm14
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 128(%rcx), %ymm6, %ymm11
vpxor -64(%rcx), %ymm7, %ymm12
vpxor (%rax), %ymm8, %ymm13
vpxor 64(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 384(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, 64(%rdi)
# Row 1
vpxor -64(%rdi), %ymm8, %ymm10
vpxor 32(%rcx), %ymm9, %ymm11
vpxor 96(%rax), %ymm5, %ymm12
vpxor 64(%rax), %ymm6, %ymm13
vpxor 128(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, 128(%rdi)
# Row 2
vpxor (%rdi), %ymm6, %ymm10
vpxor 96(%rcx), %ymm7, %ymm11
vpxor -96(%rcx), %ymm8, %ymm12
vpxor -32(%rax), %ymm9, %ymm13
vpxor 32(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, -32(%rax)
vmovdqu %ymm4, 32(%rdi)
# Row 3
vpxor -96(%rdi), %ymm9, %ymm10
vpxor (%rcx), %ymm5, %ymm11
vpxor -32(%rcx), %ymm6, %ymm12
vpxor 32(%rax), %ymm7, %ymm13
vpxor 96(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, -32(%rcx)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 4
vpxor -32(%rdi), %ymm7, %ymm10
vpxor 64(%rcx), %ymm8, %ymm11
vpxor 128(%rax), %ymm9, %ymm12
vpxor -64(%rax), %ymm5, %ymm13
vpxor -96(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, 64(%rcx)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, -96(%rax)
# Round 13
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm10, %ymm10
vpxor -64(%rdi), %ymm10, %ymm10
vpxor (%rdi), %ymm10, %ymm10
vpxor 32(%rdi), %ymm4, %ymm14
vpxor 64(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm14, %ymm14
vpxor 128(%rdi), %ymm14, %ymm14
vpxor -32(%rax), %ymm3, %ymm13
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm13, %ymm13
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm2, %ymm12
vpxor -96(%rcx), %ymm12, %ymm12
vpxor -64(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm1, %ymm11
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm11, %ymm11
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 32(%rcx), %ymm6, %ymm11
vpxor -96(%rcx), %ymm7, %ymm12
vpxor 32(%rax), %ymm8, %ymm13
vpxor -96(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 416(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, -96(%rax)
# Row 1
vpxor (%rax), %ymm8, %ymm10
vpxor 128(%rdi), %ymm9, %ymm11
vpxor (%rdi), %ymm5, %ymm12
vpxor (%rcx), %ymm6, %ymm13
vpxor 128(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, 128(%rax)
# Row 2
vpxor 128(%rcx), %ymm6, %ymm10
vpxor 96(%rax), %ymm7, %ymm11
vpxor -32(%rax), %ymm8, %ymm12
vpxor 96(%rdi), %ymm9, %ymm13
vpxor -32(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, 96(%rdi)
vmovdqu %ymm4, -32(%rdi)
# Row 3
vpxor 64(%rdi), %ymm9, %ymm10
vpxor -64(%rdi), %ymm5, %ymm11
vpxor 96(%rcx), %ymm6, %ymm12
vpxor -32(%rcx), %ymm7, %ymm13
vpxor -64(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, 96(%rcx)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, -64(%rax)
# Row 4
vpxor -64(%rcx), %ymm7, %ymm10
vpxor 64(%rax), %ymm8, %ymm11
vpxor 32(%rdi), %ymm9, %ymm12
vpxor -96(%rdi), %ymm5, %ymm13
vpxor 64(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, 64(%rax)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, 64(%rcx)
# Round 14
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm1, %ymm11
vpxor -32(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm2, %ymm12
vpxor 64(%rdi), %ymm10, %ymm10
vpxor 96(%rdi), %ymm3, %ymm13
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm14, %ymm14
vpxor -64(%rax), %ymm14, %ymm14
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm11, %ymm11
vpxor 128(%rax), %ymm14, %ymm14
vpxor -96(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 128(%rdi), %ymm6, %ymm11
vpxor -32(%rax), %ymm7, %ymm12
vpxor -32(%rcx), %ymm8, %ymm13
vpxor 64(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 448(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, 64(%rcx)
# Row 1
vpxor 32(%rax), %ymm8, %ymm10
vpxor 128(%rax), %ymm9, %ymm11
vpxor 128(%rcx), %ymm5, %ymm12
vpxor -64(%rdi), %ymm6, %ymm13
vpxor 32(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, 32(%rdi)
# Row 2
vpxor 32(%rcx), %ymm6, %ymm10
vpxor (%rdi), %ymm7, %ymm11
vpxor 96(%rdi), %ymm8, %ymm12
vpxor -64(%rax), %ymm9, %ymm13
vpxor -64(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, -64(%rax)
vmovdqu %ymm4, -64(%rcx)
# Row 3
vpxor -96(%rax), %ymm9, %ymm10
vpxor (%rax), %ymm5, %ymm11
vpxor 96(%rax), %ymm6, %ymm12
vpxor 96(%rcx), %ymm7, %ymm13
vpxor -96(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, 96(%rax)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, -96(%rdi)
# Row 4
vpxor -96(%rcx), %ymm7, %ymm10
vpxor (%rcx), %ymm8, %ymm11
vpxor -32(%rdi), %ymm9, %ymm12
vpxor 64(%rdi), %ymm5, %ymm13
vpxor 64(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, (%rcx)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, 64(%rax)
# Round 15
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -64(%rdi), %ymm3, %ymm13
vpxor (%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm2, %ymm12
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm10, %ymm10
vpxor -64(%rax), %ymm13, %ymm13
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm11, %ymm11
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm10, %ymm10
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 128(%rax), %ymm6, %ymm11
vpxor 96(%rdi), %ymm7, %ymm12
vpxor 96(%rcx), %ymm8, %ymm13
vpxor 64(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 480(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, 64(%rax)
# Row 1
vpxor -32(%rcx), %ymm8, %ymm10
vpxor 32(%rdi), %ymm9, %ymm11
vpxor 32(%rcx), %ymm5, %ymm12
vpxor (%rax), %ymm6, %ymm13
vpxor -32(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, -32(%rdi)
# Row 2
vpxor 128(%rdi), %ymm6, %ymm10
vpxor 128(%rcx), %ymm7, %ymm11
vpxor -64(%rax), %ymm8, %ymm12
vpxor -96(%rdi), %ymm9, %ymm13
vpxor -96(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, -96(%rdi)
vmovdqu %ymm4, -96(%rcx)
# Row 3
vpxor 64(%rcx), %ymm9, %ymm10
vpxor 32(%rax), %ymm5, %ymm11
vpxor (%rdi), %ymm6, %ymm12
vpxor 96(%rax), %ymm7, %ymm13
vpxor 64(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, (%rdi)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, 64(%rdi)
# Row 4
vpxor -32(%rax), %ymm7, %ymm10
vpxor -64(%rdi), %ymm8, %ymm11
vpxor -64(%rcx), %ymm9, %ymm12
vpxor -96(%rax), %ymm5, %ymm13
vpxor (%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, -64(%rdi)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, (%rcx)
# Round 16
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm4, %ymm14
vpxor (%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm1, %ymm11
vpxor 64(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm12, %ymm12
vpxor 128(%rdi), %ymm10, %ymm10
vpxor -64(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm11, %ymm11
vpxor 64(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm13, %ymm13
vpxor 128(%rax), %ymm11, %ymm11
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm10, %ymm10
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 32(%rdi), %ymm6, %ymm11
vpxor -64(%rax), %ymm7, %ymm12
vpxor 96(%rax), %ymm8, %ymm13
vpxor (%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 512(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, (%rcx)
# Row 1
vpxor 96(%rcx), %ymm8, %ymm10
vpxor -32(%rdi), %ymm9, %ymm11
vpxor 128(%rdi), %ymm5, %ymm12
vpxor 32(%rax), %ymm6, %ymm13
vpxor -64(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, -64(%rcx)
# Row 2
vpxor 128(%rax), %ymm6, %ymm10
vpxor 32(%rcx), %ymm7, %ymm11
vpxor -96(%rdi), %ymm8, %ymm12
vpxor 64(%rdi), %ymm9, %ymm13
vpxor -32(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, 64(%rdi)
vmovdqu %ymm4, -32(%rax)
# Row 3
vpxor 64(%rax), %ymm9, %ymm10
vpxor -32(%rcx), %ymm5, %ymm11
vpxor 128(%rcx), %ymm6, %ymm12
vpxor (%rdi), %ymm7, %ymm13
vpxor -96(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, 128(%rcx)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, -96(%rax)
# Row 4
vpxor 96(%rdi), %ymm7, %ymm10
vpxor (%rax), %ymm8, %ymm11
vpxor -96(%rcx), %ymm9, %ymm12
vpxor 64(%rcx), %ymm5, %ymm13
vpxor -64(%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, (%rax)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, -64(%rdi)
# Round 17
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -32(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm11, %ymm11
vpxor 64(%rdi), %ymm13, %ymm13
vpxor 128(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm4, %ymm14
vpxor -64(%rax), %ymm12, %ymm12
vpxor -32(%rax), %ymm14, %ymm14
vpxor 32(%rax), %ymm13, %ymm13
vpxor 64(%rax), %ymm10, %ymm10
vpxor 96(%rax), %ymm13, %ymm13
vpxor 128(%rax), %ymm10, %ymm10
vpxor -64(%rcx), %ymm14, %ymm14
vpxor -32(%rcx), %ymm11, %ymm11
vpxor (%rcx), %ymm14, %ymm14
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm10, %ymm10
vpxor 128(%rcx), %ymm12, %ymm12
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -32(%rdi), %ymm6, %ymm11
vpxor -96(%rdi), %ymm7, %ymm12
vpxor (%rdi), %ymm8, %ymm13
vpxor -64(%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 544(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, -64(%rdi)
# Row 1
vpxor 96(%rax), %ymm8, %ymm10
vpxor -64(%rcx), %ymm9, %ymm11
vpxor 128(%rax), %ymm5, %ymm12
vpxor -32(%rcx), %ymm6, %ymm13
vpxor -96(%rcx), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, -96(%rcx)
# Row 2
vpxor 32(%rdi), %ymm6, %ymm10
vpxor 128(%rdi), %ymm7, %ymm11
vpxor 64(%rdi), %ymm8, %ymm12
vpxor -96(%rax), %ymm9, %ymm13
vpxor 96(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, -96(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 3
vpxor (%rcx), %ymm9, %ymm10
vpxor 96(%rcx), %ymm5, %ymm11
vpxor 32(%rcx), %ymm6, %ymm12
vpxor 128(%rcx), %ymm7, %ymm13
vpxor 64(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, 32(%rcx)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, 64(%rcx)
# Row 4
vpxor -64(%rax), %ymm7, %ymm10
vpxor 32(%rax), %ymm8, %ymm11
vpxor -32(%rax), %ymm9, %ymm12
vpxor 64(%rax), %ymm5, %ymm13
vpxor (%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, 32(%rax)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, (%rax)
# Round 18
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm2, %ymm12
vpxor -64(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm10, %ymm10
vpxor 64(%rdi), %ymm12, %ymm12
vpxor 96(%rdi), %ymm14, %ymm14
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -96(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm10, %ymm10
vpxor 128(%rax), %ymm12, %ymm12
vpxor -96(%rcx), %ymm14, %ymm14
vpxor -64(%rcx), %ymm11, %ymm11
vpxor -32(%rcx), %ymm13, %ymm13
vpxor (%rcx), %ymm10, %ymm10
vpxor 32(%rcx), %ymm12, %ymm12
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm11, %ymm11
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -64(%rcx), %ymm6, %ymm11
vpxor 64(%rdi), %ymm7, %ymm12
vpxor 128(%rcx), %ymm8, %ymm13
vpxor (%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 576(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, (%rax)
# Row 1
vpxor (%rdi), %ymm8, %ymm10
vpxor -96(%rcx), %ymm9, %ymm11
vpxor 32(%rdi), %ymm5, %ymm12
vpxor 96(%rcx), %ymm6, %ymm13
vpxor -32(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rdi)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, -32(%rax)
# Row 2
vpxor -32(%rdi), %ymm6, %ymm10
vpxor 128(%rax), %ymm7, %ymm11
vpxor -96(%rax), %ymm8, %ymm12
vpxor 64(%rcx), %ymm9, %ymm13
vpxor -64(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rdi)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, 64(%rcx)
vmovdqu %ymm4, -64(%rax)
# Row 3
vpxor -64(%rdi), %ymm9, %ymm10
vpxor 96(%rax), %ymm5, %ymm11
vpxor 128(%rdi), %ymm6, %ymm12
vpxor 32(%rcx), %ymm7, %ymm13
vpxor 64(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rdi)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, 128(%rdi)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 64(%rax)
# Row 4
vpxor -96(%rdi), %ymm7, %ymm10
vpxor -32(%rcx), %ymm8, %ymm11
vpxor 96(%rdi), %ymm9, %ymm12
vpxor (%rcx), %ymm5, %ymm13
vpxor 32(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rdi)
vmovdqu %ymm1, -32(%rcx)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, 32(%rax)
# Round 19
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm10, %ymm10
vpxor -32(%rdi), %ymm10, %ymm10
vpxor (%rdi), %ymm10, %ymm10
vpxor 32(%rdi), %ymm2, %ymm12
vpxor 64(%rdi), %ymm12, %ymm12
vpxor 128(%rdi), %ymm12, %ymm12
vpxor -96(%rax), %ymm12, %ymm12
vpxor -64(%rax), %ymm4, %ymm14
vpxor -32(%rax), %ymm14, %ymm14
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm1, %ymm11
vpxor 128(%rax), %ymm11, %ymm11
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm11, %ymm11
vpxor 32(%rcx), %ymm3, %ymm13
vpxor 64(%rcx), %ymm13, %ymm13
vpxor 96(%rcx), %ymm13, %ymm13
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -96(%rcx), %ymm6, %ymm11
vpxor -96(%rax), %ymm7, %ymm12
vpxor 32(%rcx), %ymm8, %ymm13
vpxor 32(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 608(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 32(%rax)
# Row 1
vpxor 128(%rcx), %ymm8, %ymm10
vpxor -32(%rax), %ymm9, %ymm11
vpxor -32(%rdi), %ymm5, %ymm12
vpxor 96(%rax), %ymm6, %ymm13
vpxor 96(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rcx)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, 96(%rax)
vmovdqu %ymm4, 96(%rdi)
# Row 2
vpxor -64(%rcx), %ymm6, %ymm10
vpxor 32(%rdi), %ymm7, %ymm11
vpxor 64(%rcx), %ymm8, %ymm12
vpxor 64(%rax), %ymm9, %ymm13
vpxor -96(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rcx)
vmovdqu %ymm1, 32(%rdi)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, 64(%rax)
vmovdqu %ymm4, -96(%rdi)
# Row 3
vpxor (%rax), %ymm9, %ymm10
vpxor (%rdi), %ymm5, %ymm11
vpxor 128(%rax), %ymm6, %ymm12
vpxor 128(%rdi), %ymm7, %ymm13
vpxor (%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rax)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, 128(%rax)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, (%rcx)
# Row 4
vpxor 64(%rdi), %ymm7, %ymm10
vpxor 96(%rcx), %ymm8, %ymm11
vpxor -64(%rax), %ymm9, %ymm12
vpxor -64(%rdi), %ymm5, %ymm13
vpxor -32(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rdi)
vmovdqu %ymm1, 96(%rcx)
vmovdqu %ymm2, -64(%rax)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -32(%rcx)
# Round 20
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm2, %ymm12
vpxor (%rdi), %ymm1, %ymm11
vpxor 32(%rdi), %ymm11, %ymm11
vpxor 96(%rdi), %ymm14, %ymm14
vpxor 128(%rdi), %ymm3, %ymm13
vpxor -96(%rax), %ymm12, %ymm12
vpxor -32(%rax), %ymm11, %ymm11
vpxor (%rax), %ymm10, %ymm10
vpxor 32(%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm13, %ymm13
vpxor 96(%rax), %ymm13, %ymm13
vpxor 128(%rax), %ymm12, %ymm12
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm10, %ymm10
vpxor (%rcx), %ymm14, %ymm14
vpxor 32(%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -32(%rax), %ymm6, %ymm11
vpxor 64(%rcx), %ymm7, %ymm12
vpxor 128(%rdi), %ymm8, %ymm13
vpxor -32(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 640(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, -32(%rcx)
# Row 1
vpxor 32(%rcx), %ymm8, %ymm10
vpxor 96(%rdi), %ymm9, %ymm11
vpxor -64(%rcx), %ymm5, %ymm12
vpxor (%rdi), %ymm6, %ymm13
vpxor -64(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rcx)
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, (%rdi)
vmovdqu %ymm4, -64(%rax)
# Row 2
vpxor -96(%rcx), %ymm6, %ymm10
vpxor -32(%rdi), %ymm7, %ymm11
vpxor 64(%rax), %ymm8, %ymm12
vpxor (%rcx), %ymm9, %ymm13
vpxor 64(%rdi), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rcx)
vmovdqu %ymm1, -32(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, (%rcx)
vmovdqu %ymm4, 64(%rdi)
# Row 3
vpxor 32(%rax), %ymm9, %ymm10
vpxor 128(%rcx), %ymm5, %ymm11
vpxor 32(%rdi), %ymm6, %ymm12
vpxor 128(%rax), %ymm7, %ymm13
vpxor -64(%rdi), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rax)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, 32(%rdi)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, -64(%rdi)
# Row 4
vpxor -96(%rax), %ymm7, %ymm10
vpxor 96(%rax), %ymm8, %ymm11
vpxor -96(%rdi), %ymm9, %ymm12
vpxor (%rax), %ymm5, %ymm13
vpxor 96(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -96(%rax)
vmovdqu %ymm1, 96(%rax)
vmovdqu %ymm2, -96(%rdi)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, 96(%rcx)
# Round 21
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -64(%rdi), %ymm4, %ymm14
vpxor -32(%rdi), %ymm1, %ymm11
vpxor (%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm2, %ymm12
vpxor 64(%rdi), %ymm14, %ymm14
vpxor 96(%rdi), %ymm11, %ymm11
vpxor 128(%rdi), %ymm13, %ymm13
vpxor -64(%rax), %ymm14, %ymm14
vpxor -32(%rax), %ymm11, %ymm11
vpxor 32(%rax), %ymm10, %ymm10
vpxor 64(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm10, %ymm10
vpxor -64(%rcx), %ymm12, %ymm12
vpxor -32(%rcx), %ymm14, %ymm14
vpxor (%rcx), %ymm13, %ymm13
vpxor 32(%rcx), %ymm10, %ymm10
vpxor 64(%rcx), %ymm12, %ymm12
vpxor 128(%rcx), %ymm11, %ymm11
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor 96(%rdi), %ymm6, %ymm11
vpxor 64(%rax), %ymm7, %ymm12
vpxor 128(%rax), %ymm8, %ymm13
vpxor 96(%rcx), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 672(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, 96(%rdi)
vmovdqu %ymm2, 64(%rax)
vmovdqu %ymm3, 128(%rax)
vmovdqu %ymm4, 96(%rcx)
# Row 1
vpxor 128(%rdi), %ymm8, %ymm10
vpxor -64(%rax), %ymm9, %ymm11
vpxor -96(%rcx), %ymm5, %ymm12
vpxor 128(%rcx), %ymm6, %ymm13
vpxor -96(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rdi)
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, 128(%rcx)
vmovdqu %ymm4, -96(%rdi)
# Row 2
vpxor -32(%rax), %ymm6, %ymm10
vpxor -64(%rcx), %ymm7, %ymm11
vpxor (%rcx), %ymm8, %ymm12
vpxor -64(%rdi), %ymm9, %ymm13
vpxor -96(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rax)
vmovdqu %ymm1, -64(%rcx)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, -64(%rdi)
vmovdqu %ymm4, -96(%rax)
# Row 3
vpxor -32(%rcx), %ymm9, %ymm10
vpxor 32(%rcx), %ymm5, %ymm11
vpxor -32(%rdi), %ymm6, %ymm12
vpxor 32(%rdi), %ymm7, %ymm13
vpxor (%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -32(%rcx)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, -32(%rdi)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, (%rax)
# Row 4
vpxor 64(%rcx), %ymm7, %ymm10
vpxor (%rdi), %ymm8, %ymm11
vpxor 64(%rdi), %ymm9, %ymm12
vpxor 32(%rax), %ymm5, %ymm13
vpxor 96(%rax), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rcx)
vmovdqu %ymm1, (%rdi)
vmovdqu %ymm2, 64(%rdi)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, 96(%rax)
# Round 22
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm4, %ymm14
vpxor -64(%rdi), %ymm3, %ymm13
vpxor -32(%rdi), %ymm2, %ymm12
vpxor 32(%rdi), %ymm13, %ymm13
vpxor 96(%rdi), %ymm1, %ymm11
vpxor 128(%rdi), %ymm10, %ymm10
vpxor -96(%rax), %ymm14, %ymm14
vpxor -64(%rax), %ymm11, %ymm11
vpxor -32(%rax), %ymm10, %ymm10
vpxor (%rax), %ymm14, %ymm14
vpxor 64(%rax), %ymm12, %ymm12
vpxor 128(%rax), %ymm13, %ymm13
vpxor -96(%rcx), %ymm12, %ymm12
vpxor -64(%rcx), %ymm11, %ymm11
vpxor -32(%rcx), %ymm10, %ymm10
vpxor (%rcx), %ymm12, %ymm12
vpxor 32(%rcx), %ymm11, %ymm11
vpxor 96(%rcx), %ymm14, %ymm14
vpxor 128(%rcx), %ymm13, %ymm13
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -64(%rax), %ymm6, %ymm11
vpxor (%rcx), %ymm7, %ymm12
vpxor 32(%rdi), %ymm8, %ymm13
vpxor 96(%rax), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 704(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -64(%rax)
vmovdqu %ymm2, (%rcx)
vmovdqu %ymm3, 32(%rdi)
vmovdqu %ymm4, 96(%rax)
# Row 1
vpxor 128(%rax), %ymm8, %ymm10
vpxor -96(%rdi), %ymm9, %ymm11
vpxor -32(%rax), %ymm5, %ymm12
vpxor 32(%rcx), %ymm6, %ymm13
vpxor 64(%rdi), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 128(%rax)
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, -32(%rax)
vmovdqu %ymm3, 32(%rcx)
vmovdqu %ymm4, 64(%rdi)
# Row 2
vpxor 96(%rdi), %ymm6, %ymm10
vpxor -96(%rcx), %ymm7, %ymm11
vpxor -64(%rdi), %ymm8, %ymm12
vpxor (%rax), %ymm9, %ymm13
vpxor 64(%rcx), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rdi)
vmovdqu %ymm1, -96(%rcx)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, (%rax)
vmovdqu %ymm4, 64(%rcx)
# Row 3
vpxor 96(%rcx), %ymm9, %ymm10
vpxor 128(%rdi), %ymm5, %ymm11
vpxor -64(%rcx), %ymm6, %ymm12
vpxor -32(%rdi), %ymm7, %ymm13
vpxor 32(%rax), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rcx)
vmovdqu %ymm1, 128(%rdi)
vmovdqu %ymm2, -64(%rcx)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, 32(%rax)
# Row 4
vpxor 64(%rax), %ymm7, %ymm10
vpxor 128(%rcx), %ymm8, %ymm11
vpxor -96(%rax), %ymm9, %ymm12
vpxor -32(%rcx), %ymm5, %ymm13
vpxor (%rdi), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 64(%rax)
vmovdqu %ymm1, 128(%rcx)
vmovdqu %ymm2, -96(%rax)
vmovdqu %ymm3, -32(%rcx)
vmovdqu %ymm4, (%rdi)
# Round 23
# Calc b[0..4]
vpxor %ymm15, %ymm0, %ymm10
vpxor -96(%rdi), %ymm1, %ymm11
vpxor -64(%rdi), %ymm2, %ymm12
vpxor -32(%rdi), %ymm3, %ymm13
vpxor 32(%rdi), %ymm13, %ymm13
vpxor 64(%rdi), %ymm4, %ymm14
vpxor 96(%rdi), %ymm10, %ymm10
vpxor 128(%rdi), %ymm11, %ymm11
vpxor -64(%rax), %ymm11, %ymm11
vpxor -32(%rax), %ymm12, %ymm12
vpxor (%rax), %ymm13, %ymm13
vpxor 32(%rax), %ymm14, %ymm14
vpxor 96(%rax), %ymm14, %ymm14
vpxor 128(%rax), %ymm10, %ymm10
vpxor -96(%rcx), %ymm11, %ymm11
vpxor -64(%rcx), %ymm12, %ymm12
vpxor (%rcx), %ymm12, %ymm12
vpxor 32(%rcx), %ymm13, %ymm13
vpxor 64(%rcx), %ymm14, %ymm14
vpxor 96(%rcx), %ymm10, %ymm10
# Calc t[0..4]
vpsrlq $63, %ymm11, %ymm0
vpsrlq $63, %ymm12, %ymm1
vpsrlq $63, %ymm13, %ymm2
vpsrlq $63, %ymm14, %ymm3
vpsrlq $63, %ymm10, %ymm4
vpaddq %ymm11, %ymm11, %ymm5
vpaddq %ymm12, %ymm12, %ymm6
vpaddq %ymm13, %ymm13, %ymm7
vpaddq %ymm14, %ymm14, %ymm8
vpaddq %ymm10, %ymm10, %ymm9
vpor %ymm0, %ymm5, %ymm5
vpor %ymm1, %ymm6, %ymm6
vpor %ymm2, %ymm7, %ymm7
vpor %ymm3, %ymm8, %ymm8
vpor %ymm4, %ymm9, %ymm9
vpxor %ymm14, %ymm5, %ymm5
vpxor %ymm10, %ymm6, %ymm6
vpxor %ymm11, %ymm7, %ymm7
vpxor %ymm12, %ymm8, %ymm8
vpxor %ymm13, %ymm9, %ymm9
# Row Mix
# Row 0
vpxor %ymm15, %ymm5, %ymm10
vpxor -96(%rdi), %ymm6, %ymm11
vpxor -64(%rdi), %ymm7, %ymm12
vpxor -32(%rdi), %ymm8, %ymm13
vpxor (%rdi), %ymm9, %ymm14
vpsrlq $20, %ymm11, %ymm0
vpsrlq $21, %ymm12, %ymm1
vpsrlq $43, %ymm13, %ymm2
vpsrlq $50, %ymm14, %ymm3
vpsllq $44, %ymm11, %ymm11
vpsllq $43, %ymm12, %ymm12
vpsllq $21, %ymm13, %ymm13
vpsllq $14, %ymm14, %ymm14
vpor %ymm0, %ymm11, %ymm11
vpor %ymm1, %ymm12, %ymm12
vpor %ymm2, %ymm13, %ymm13
vpor %ymm3, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm15
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm15, %ymm15
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
# XOR in constant
vpxor 736(%rdx), %ymm15, %ymm15
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm1, -96(%rdi)
vmovdqu %ymm2, -64(%rdi)
vmovdqu %ymm3, -32(%rdi)
vmovdqu %ymm4, (%rdi)
# Row 1
vpxor 32(%rdi), %ymm8, %ymm10
vpxor 64(%rdi), %ymm9, %ymm11
vpxor 96(%rdi), %ymm5, %ymm12
vpxor 128(%rdi), %ymm6, %ymm13
vpxor -96(%rax), %ymm7, %ymm14
vpsrlq $36, %ymm10, %ymm0
vpsrlq $44, %ymm11, %ymm1
vpsrlq $61, %ymm12, %ymm2
vpsrlq $19, %ymm13, %ymm3
vpsrlq $3, %ymm14, %ymm4
vpsllq $28, %ymm10, %ymm10
vpsllq $20, %ymm11, %ymm11
vpsllq $3, %ymm12, %ymm12
vpsllq $45, %ymm13, %ymm13
vpsllq $61, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 32(%rdi)
vmovdqu %ymm1, 64(%rdi)
vmovdqu %ymm2, 96(%rdi)
vmovdqu %ymm3, 128(%rdi)
vmovdqu %ymm4, -96(%rax)
# Row 2
vpxor -64(%rax), %ymm6, %ymm10
vpxor -32(%rax), %ymm7, %ymm11
vpxor (%rax), %ymm8, %ymm12
vpxor 32(%rax), %ymm9, %ymm13
vpxor 64(%rax), %ymm5, %ymm14
vpsrlq $63, %ymm10, %ymm0
vpsrlq $58, %ymm11, %ymm1
vpsrlq $39, %ymm12, %ymm2
vpsrlq $56, %ymm13, %ymm3
vpsrlq $46, %ymm14, %ymm4
vpaddq %ymm10, %ymm10, %ymm10
vpsllq $6, %ymm11, %ymm11
vpsllq $25, %ymm12, %ymm12
vpsllq $8, %ymm13, %ymm13
vpsllq $18, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, -64(%rax)
vmovdqu %ymm1, -32(%rax)
vmovdqu %ymm2, (%rax)
vmovdqu %ymm3, 32(%rax)
vmovdqu %ymm4, 64(%rax)
# Row 3
vpxor 96(%rax), %ymm9, %ymm10
vpxor 128(%rax), %ymm5, %ymm11
vpxor -96(%rcx), %ymm6, %ymm12
vpxor -64(%rcx), %ymm7, %ymm13
vpxor -32(%rcx), %ymm8, %ymm14
vpsrlq $37, %ymm10, %ymm0
vpsrlq $28, %ymm11, %ymm1
vpsrlq $54, %ymm12, %ymm2
vpsrlq $49, %ymm13, %ymm3
vpsrlq $8, %ymm14, %ymm4
vpsllq $27, %ymm10, %ymm10
vpsllq $36, %ymm11, %ymm11
vpsllq $10, %ymm12, %ymm12
vpsllq $15, %ymm13, %ymm13
vpsllq $56, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, 96(%rax)
vmovdqu %ymm1, 128(%rax)
vmovdqu %ymm2, -96(%rcx)
vmovdqu %ymm3, -64(%rcx)
vmovdqu %ymm4, -32(%rcx)
# Row 4
vpxor (%rcx), %ymm7, %ymm10
vpxor 32(%rcx), %ymm8, %ymm11
vpxor 64(%rcx), %ymm9, %ymm12
vpxor 96(%rcx), %ymm5, %ymm13
vpxor 128(%rcx), %ymm6, %ymm14
vpsrlq $2, %ymm10, %ymm0
vpsrlq $9, %ymm11, %ymm1
vpsrlq $25, %ymm12, %ymm2
vpsrlq $23, %ymm13, %ymm3
vpsrlq $62, %ymm14, %ymm4
vpsllq $62, %ymm10, %ymm10
vpsllq $55, %ymm11, %ymm11
vpsllq $39, %ymm12, %ymm12
vpsllq $41, %ymm13, %ymm13
vpsllq $2, %ymm14, %ymm14
vpor %ymm0, %ymm10, %ymm10
vpor %ymm1, %ymm11, %ymm11
vpor %ymm2, %ymm12, %ymm12
vpor %ymm3, %ymm13, %ymm13
vpor %ymm4, %ymm14, %ymm14
vpandn %ymm12, %ymm11, %ymm0
vpandn %ymm13, %ymm12, %ymm1
vpandn %ymm14, %ymm13, %ymm2
vpandn %ymm10, %ymm14, %ymm3
vpandn %ymm11, %ymm10, %ymm4
vpxor %ymm10, %ymm0, %ymm0
vpxor %ymm11, %ymm1, %ymm1
vpxor %ymm12, %ymm2, %ymm2
vpxor %ymm13, %ymm3, %ymm3
vpxor %ymm14, %ymm4, %ymm4
vmovdqu %ymm0, (%rcx)
vmovdqu %ymm1, 32(%rcx)
vmovdqu %ymm2, 64(%rcx)
vmovdqu %ymm3, 96(%rcx)
vmovdqu %ymm4, 128(%rcx)
subq $0x80, %rdi
vmovdqu %ymm15, (%rdi)
vzeroupper
repz retq
#ifndef __APPLE__
.size sha3_256_blocksx4_seed_64_avx2,.-sha3_256_blocksx4_seed_64_avx2
#endif /* __APPLE__ */
#endif /* WOLFSSL_WC_DILITHIUM */
#endif /* HAVE_INTEL_AVX2 */
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif