|
@@ -0,0 +1,14868 @@
|
|
|
+/* sha3_asm
|
|
|
+ *
|
|
|
+ * Copyright (C) 2006-2022 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
|
|
|
+#include "wolfssl/wolfcrypt/settings.h"
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef HAVE_INTEL_AVX1
|
|
|
+#define HAVE_INTEL_AVX1
|
|
|
+#endif /* HAVE_INTEL_AVX1 */
|
|
|
+#ifndef NO_AVX2_SUPPORT
|
|
|
+#define 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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 96(%rdi)
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 80(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 64(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 88(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 72(%rdi)
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 16(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -80(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 24(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -32(%rdi)
|
|
|
+ movq $0x800000000000808a, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 64(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, (%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -64(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 32(%rdi)
|
|
|
+ movq $0x8000000080008000, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -80(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 8(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 96(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -56(%rdi)
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, (%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 56(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 72(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -72(%rdi)
|
|
|
+ movq $0x80000001, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 8(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 88(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -32(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 48(%rdi)
|
|
|
+ movq $0x8000000080008081, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 56(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 24(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 32(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 40(%rdi)
|
|
|
+ movq $0x8000000000008009, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 88(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -64(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, (%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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -56(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -8(%rdi)
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 24(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 96(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -72(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -40(%rdi)
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -64(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 72(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 48(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -16(%rdi)
|
|
|
+ movq $0x80008009, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 96(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -32(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 40(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -88(%rdi)
|
|
|
+ movq $0x8000000a, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 72(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 32(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -8(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -48(%rdi)
|
|
|
+ movq $0x8000808b, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -32(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -56(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -40(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -24(%rdi)
|
|
|
+ movq $0x800000000000008b, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 32(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, (%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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -72(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -16(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 80(%rdi)
|
|
|
+ movq $0x8000000000008089, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -56(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 48(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -88(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 16(%rdi)
|
|
|
+ movq $0x8000000000008003, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -72(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 40(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -48(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 64(%rdi)
|
|
|
+ movq $0x8000000000008002, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 48(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -8(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -24(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -80(%rdi)
|
|
|
+ movq $0x8000000000000080, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 40(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -40(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 80(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, (%rdi)
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -8(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -16(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 16(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 8(%rdi)
|
|
|
+ movq $0x800000008000000a, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -40(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -88(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 64(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, (%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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 56(%rdi)
|
|
|
+ movq $0x8000000080008081, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -16(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -48(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -80(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 88(%rdi)
|
|
|
+ movq $0x8000000000008080, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -88(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -24(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, (%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 24(%rdi)
|
|
|
+ movq $0x80000001, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -48(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 80(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 8(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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, %r15
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -64(%rdi)
|
|
|
+ movq $0x8000000080008008, %r14
|
|
|
+ andnq %r12, %r11, %rsi
|
|
|
+ xorq %r10, %rsi
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, -24(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 16(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, -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
|
|
|
+ xorq %r14, %r15
|
|
|
+ movq %r15, 56(%rdi)
|
|
|
+ andnq %r12, %r11, %r15
|
|
|
+ xorq %r10, %r15
|
|
|
+ movq %r15, 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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 96(%rdi)
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 80(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 64(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 88(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 72(%rdi)
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 16(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -80(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 24(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -32(%rdi)
|
|
|
+ movq $0x800000000000808a, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 64(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, (%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -64(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 32(%rdi)
|
|
|
+ movq $0x8000000080008000, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -80(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 8(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 96(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -56(%rdi)
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, (%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 56(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 72(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -72(%rdi)
|
|
|
+ movq $0x80000001, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 8(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 88(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -32(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 48(%rdi)
|
|
|
+ movq $0x8000000080008081, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 56(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 24(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 32(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 40(%rdi)
|
|
|
+ movq $0x8000000000008009, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 88(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -64(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, (%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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -56(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -8(%rdi)
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 24(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 96(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -72(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -40(%rdi)
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -64(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 72(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 48(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -16(%rdi)
|
|
|
+ movq $0x80008009, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 96(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -32(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 40(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -88(%rdi)
|
|
|
+ movq $0x8000000a, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 72(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 32(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -8(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -48(%rdi)
|
|
|
+ movq $0x8000808b, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -32(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -56(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -40(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -24(%rdi)
|
|
|
+ movq $0x800000000000008b, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 32(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, (%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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -72(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -16(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 80(%rdi)
|
|
|
+ movq $0x8000000000008089, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -56(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 48(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -88(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 16(%rdi)
|
|
|
+ movq $0x8000000000008003, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -72(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 40(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -48(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 64(%rdi)
|
|
|
+ movq $0x8000000000008002, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 48(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -8(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -24(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -80(%rdi)
|
|
|
+ movq $0x8000000000000080, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 40(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -40(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 80(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, (%rdi)
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -8(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -16(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 16(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 8(%rdi)
|
|
|
+ movq $0x800000008000000a, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -40(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -88(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 64(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, (%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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 56(%rdi)
|
|
|
+ movq $0x8000000080008081, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -16(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -48(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -80(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 88(%rdi)
|
|
|
+ movq $0x8000000000008080, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -88(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -24(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, (%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 24(%rdi)
|
|
|
+ movq $0x80000001, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -48(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 80(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 8(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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, %rbp
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -64(%rdi)
|
|
|
+ movq $0x8000000080008008, %rbx
|
|
|
+ andnq %r14, %r13, %rcx
|
|
|
+ xorq %r12, %rcx
|
|
|
+ # XOR in constant
|
|
|
+ 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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, -24(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 16(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, -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
|
|
|
+ xorq %rbx, %rbp
|
|
|
+ movq %rbp, 56(%rdi)
|
|
|
+ andnq %r14, %r13, %rbp
|
|
|
+ xorq %r12, %rbp
|
|
|
+ movq %rbp, 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 kyber_sha3_blocksx4_avx2
|
|
|
+.type kyber_sha3_blocksx4_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_sha3_blocksx4_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_sha3_blocksx4_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_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 kyber_sha3_blocksx4_avx2,.-kyber_sha3_blocksx4_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#endif /* HAVE_INTEL_AVX2 */
|
|
|
+
|
|
|
+#if defined(__linux__) && defined(__ELF__)
|
|
|
+.section .note.GNU-stack,"",%progbits
|
|
|
+#endif
|