/* sha3_asm.S */
/*
 * Copyright (C) 2006-2025 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 2 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	0x1,0x1
.quad	0x1,0x1
.quad	0x8082,0x8082
.quad	0x8082,0x8082
.quad	0x800000000000808a,0x800000000000808a
.quad	0x800000000000808a,0x800000000000808a
.quad	0x8000000080008000,0x8000000080008000
.quad	0x8000000080008000,0x8000000080008000
.quad	0x808b,0x808b
.quad	0x808b,0x808b
.quad	0x80000001,0x80000001
.quad	0x80000001,0x80000001
.quad	0x8000000080008081,0x8000000080008081
.quad	0x8000000080008081,0x8000000080008081
.quad	0x8000000000008009,0x8000000000008009
.quad	0x8000000000008009,0x8000000000008009
.quad	0x8a,0x8a
.quad	0x8a,0x8a
.quad	0x88,0x88
.quad	0x88,0x88
.quad	0x80008009,0x80008009
.quad	0x80008009,0x80008009
.quad	0x8000000a,0x8000000a
.quad	0x8000000a,0x8000000a
.quad	0x8000808b,0x8000808b
.quad	0x8000808b,0x8000808b
.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	0x800a,0x800a
.quad	0x800a,0x800a
.quad	0x800000008000000a,0x800000008000000a
.quad	0x800000008000000a,0x800000008000000a
.quad	0x8000000080008081,0x8000000080008081
.quad	0x8000000080008081,0x8000000080008081
.quad	0x8000000000008080,0x8000000000008080
.quad	0x8000000000008080,0x8000000000008080
.quad	0x80000001,0x80000001
.quad	0x80000001,0x80000001
.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	0x1,0x1
.quad	0x1,0x1
.quad	0x8082,0x8082
.quad	0x8082,0x8082
.quad	0x800000000000808a,0x800000000000808a
.quad	0x800000000000808a,0x800000000000808a
.quad	0x8000000080008000,0x8000000080008000
.quad	0x8000000080008000,0x8000000080008000
.quad	0x808b,0x808b
.quad	0x808b,0x808b
.quad	0x80000001,0x80000001
.quad	0x80000001,0x80000001
.quad	0x8000000080008081,0x8000000080008081
.quad	0x8000000080008081,0x8000000080008081
.quad	0x8000000000008009,0x8000000000008009
.quad	0x8000000000008009,0x8000000000008009
.quad	0x8a,0x8a
.quad	0x8a,0x8a
.quad	0x88,0x88
.quad	0x88,0x88
.quad	0x80008009,0x80008009
.quad	0x80008009,0x80008009
.quad	0x8000000a,0x8000000a
.quad	0x8000000a,0x8000000a
.quad	0x8000808b,0x8000808b
.quad	0x8000808b,0x8000808b
.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	0x800a,0x800a
.quad	0x800a,0x800a
.quad	0x800000008000000a,0x800000008000000a
.quad	0x800000008000000a,0x800000008000000a
.quad	0x8000000080008081,0x8000000080008081
.quad	0x8000000080008081,0x8000000080008081
.quad	0x8000000000008080,0x8000000000008080
.quad	0x8000000000008080,0x8000000000008080
.quad	0x80000001,0x80000001
.quad	0x80000001,0x80000001
.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	0x1,0x3e
.quad	0x1c,0x1b
.quad	0x2c,0x6
.quad	0x37,0x14
.quad	0xa,0x2b
.quad	0x19,0x27
.quad	0x2d,0xf
.quad	0x15,0x8
.quad	0x24,0x3
.quad	0x29,0x12
.quad	0x2,0x3d
.quad	0x38,0xe
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_sha3_block_avx2_rotr:
.quad	0x3f,0x2
.quad	0x24,0x25
.quad	0x14,0x3a
.quad	0x9,0x2c
.quad	0x36,0x15
.quad	0x27,0x19
.quad	0x13,0x31
.quad	0x2b,0x38
.quad	0x1c,0x3d
.quad	0x17,0x2e
.quad	0x3e,0x3
.quad	0x8,0x32
#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	%ymm7, %ymm5, %ymm14
        vpxor	%ymm2, %ymm1, %ymm15
        vpermq	$0xaa, %ymm14, %ymm7
        vpxor	%ymm0, %ymm14, %ymm14
        vpxor	%ymm4, %ymm3, %ymm12
        vpxor	%ymm7, %ymm14, %ymm14
        vpermq	$0x00, %ymm14, %ymm14
        vpxor	%ymm6, %ymm15, %ymm15
        vpxor	%ymm12, %ymm15, %ymm15
        # XOR in b[x+4]
        vpermq	$0x93, %ymm15, %ymm7
        vpermq	$57, %ymm15, %ymm9
        vpermq	$0xff, %ymm15, %ymm8
        vpermq	$0x00, %ymm15, %ymm10
        vpblendd	$3, %ymm14, %ymm7, %ymm7
        vpblendd	$0xc0, %ymm14, %ymm9, %ymm9
        vpxor	%ymm8, %ymm0, %ymm0
        vpxor	%ymm7, %ymm1, %ymm1
        vpxor	%ymm7, %ymm2, %ymm2
        vpxor	%ymm7, %ymm3, %ymm3
        vpxor	%ymm7, %ymm4, %ymm4
        vpxor	%ymm8, %ymm5, %ymm5
        vpxor	%ymm7, %ymm6, %ymm6
        # Rotate left 1
        vpsrlq	$63, %ymm9, %ymm7
        vpsrlq	$63, %ymm10, %ymm8
        vpaddq	%ymm9, %ymm9, %ymm9
        vpaddq	%ymm10, %ymm10, %ymm10
        vpor	%ymm7, %ymm9, %ymm9
        vpor	%ymm8, %ymm10, %ymm10
        # 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
        vpsrlvq	-64(%rcx), %ymm1, %ymm8
        vpsrlvq	-32(%rcx), %ymm2, %ymm9
        vpsrlvq	(%rcx), %ymm3, %ymm10
        vpsrlvq	32(%rcx), %ymm4, %ymm11
        vpsrlvq	64(%rcx), %ymm5, %ymm12
        vpsrlvq	96(%rcx), %ymm6, %ymm13
        vpsllvq	-64(%rax), %ymm1, %ymm1
        vpsllvq	-32(%rax), %ymm2, %ymm2
        vpsllvq	(%rax), %ymm3, %ymm3
        vpsllvq	32(%rax), %ymm4, %ymm4
        vpsllvq	64(%rax), %ymm5, %ymm5
        vpsllvq	96(%rax), %ymm6, %ymm6
        vpor	%ymm8, %ymm1, %ymm1
        vpor	%ymm9, %ymm2, %ymm2
        vpor	%ymm10, %ymm3, %ymm3
        vpor	%ymm11, %ymm4, %ymm4
        vpor	%ymm12, %ymm5, %ymm5
        vpor	%ymm13, %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
        vpunpcklqdq	%ymm13, %ymm12, %ymm2
        vpunpckhqdq	%ymm13, %ymm12, %ymm3
        vpunpcklqdq	%ymm15, %ymm14, %ymm7
        vpunpckhqdq	%ymm15, %ymm14, %ymm8
        vperm2i128	$49, %ymm7, %ymm2, %ymm4
        vperm2i128	$49, %ymm8, %ymm3, %ymm6
        vperm2i128	$32, %ymm7, %ymm2, %ymm2
        vperm2i128	$32, %ymm8, %ymm3, %ymm3
        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__
.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__ */
#endif /* HAVE_INTEL_AVX2 */

#if defined(__linux__) && defined(__ELF__)
.section	.note.GNU-stack,"",%progbits
#endif
