|
@@ -1,6 +1,6 @@
|
|
|
-/* wc_kyber_asm.S
|
|
|
- *
|
|
|
- * Copyright (C) 2006-2023 wolfSSL Inc.
|
|
|
+/* wc_kyber_asm.S */
|
|
|
+/*
|
|
|
+ * Copyright (C) 2006-2024 wolfSSL Inc.
|
|
|
*
|
|
|
* This file is part of wolfSSL.
|
|
|
*
|
|
@@ -19,9 +19,27807 @@
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
|
|
*/
|
|
|
|
|
|
-#include <wolfssl/wolfcrypt/settings.h>
|
|
|
+#ifdef WOLFSSL_USER_SETTINGS
|
|
|
+#ifdef WOLFSSL_USER_SETTINGS_ASM
|
|
|
+/*
|
|
|
+ * user_settings_asm.h is a file generated by the script user_settings_asm.sh.
|
|
|
+ * The script takes in a user_settings.h and produces user_settings_asm.h, which
|
|
|
+ * is a stripped down version of user_settings.h containing only preprocessor
|
|
|
+ * directives. This makes the header safe to include in assembly (.S) files.
|
|
|
+ */
|
|
|
+#include "user_settings_asm.h"
|
|
|
+#else
|
|
|
+/*
|
|
|
+ * Note: if user_settings.h contains any C code (e.g. a typedef or function
|
|
|
+ * prototype), including it here in an assembly (.S) file will cause an
|
|
|
+ * assembler failure. See user_settings_asm.h above.
|
|
|
+ */
|
|
|
+#include "user_settings.h"
|
|
|
+#endif /* WOLFSSL_USER_SETTINGS_ASM */
|
|
|
+#endif /* WOLFSSL_USER_SETTINGS */
|
|
|
+
|
|
|
+#ifndef HAVE_INTEL_AVX1
|
|
|
+#define HAVE_INTEL_AVX1
|
|
|
+#endif /* HAVE_INTEL_AVX1 */
|
|
|
+#ifndef NO_AVX2_SUPPORT
|
|
|
+#define HAVE_INTEL_AVX2
|
|
|
+#endif /* NO_AVX2_SUPPORT */
|
|
|
|
|
|
-#ifdef WOLFSSL_HAVE_KYBER
|
|
|
- #error "Contact wolfSSL to get the implementation of this file"
|
|
|
-#endif
|
|
|
+#ifdef WOLFSSL_WC_KYBER
|
|
|
+#ifdef HAVE_INTEL_AVX2
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+kyber_q:
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+kyber_qinv:
|
|
|
+.value 0xf301,0xf301
|
|
|
+.value 0xf301,0xf301
|
|
|
+.value 0xf301,0xf301
|
|
|
+.value 0xf301,0xf301
|
|
|
+.value 0xf301,0xf301
|
|
|
+.value 0xf301,0xf301
|
|
|
+.value 0xf301,0xf301
|
|
|
+.value 0xf301,0xf301
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+kyber_f:
|
|
|
+.value 0x549,0x549
|
|
|
+.value 0x549,0x549
|
|
|
+.value 0x549,0x549
|
|
|
+.value 0x549,0x549
|
|
|
+.value 0x549,0x549
|
|
|
+.value 0x549,0x549
|
|
|
+.value 0x549,0x549
|
|
|
+.value 0x549,0x549
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+kyber_f_qinv:
|
|
|
+.value 0x5049,0x5049
|
|
|
+.value 0x5049,0x5049
|
|
|
+.value 0x5049,0x5049
|
|
|
+.value 0x5049,0x5049
|
|
|
+.value 0x5049,0x5049
|
|
|
+.value 0x5049,0x5049
|
|
|
+.value 0x5049,0x5049
|
|
|
+.value 0x5049,0x5049
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+kyber_v:
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_avx2_zetas:
|
|
|
+.value 0xa0b,0xa0b
|
|
|
+.value 0xa0b,0xa0b
|
|
|
+.value 0xa0b,0xa0b
|
|
|
+.value 0xa0b,0xa0b
|
|
|
+.value 0xa0b,0xa0b
|
|
|
+.value 0xa0b,0xa0b
|
|
|
+.value 0xa0b,0xa0b
|
|
|
+.value 0xa0b,0xa0b
|
|
|
+.value 0x7b0b,0x7b0b
|
|
|
+.value 0x7b0b,0x7b0b
|
|
|
+.value 0x7b0b,0x7b0b
|
|
|
+.value 0x7b0b,0x7b0b
|
|
|
+.value 0x7b0b,0x7b0b
|
|
|
+.value 0x7b0b,0x7b0b
|
|
|
+.value 0x7b0b,0x7b0b
|
|
|
+.value 0x7b0b,0x7b0b
|
|
|
+.value 0xb9a,0xb9a
|
|
|
+.value 0xb9a,0xb9a
|
|
|
+.value 0xb9a,0xb9a
|
|
|
+.value 0xb9a,0xb9a
|
|
|
+.value 0xb9a,0xb9a
|
|
|
+.value 0xb9a,0xb9a
|
|
|
+.value 0xb9a,0xb9a
|
|
|
+.value 0xb9a,0xb9a
|
|
|
+.value 0x399a,0x399a
|
|
|
+.value 0x399a,0x399a
|
|
|
+.value 0x399a,0x399a
|
|
|
+.value 0x399a,0x399a
|
|
|
+.value 0x399a,0x399a
|
|
|
+.value 0x399a,0x399a
|
|
|
+.value 0x399a,0x399a
|
|
|
+.value 0x399a,0x399a
|
|
|
+.value 0x5d5,0x5d5
|
|
|
+.value 0x5d5,0x5d5
|
|
|
+.value 0x5d5,0x5d5
|
|
|
+.value 0x5d5,0x5d5
|
|
|
+.value 0x5d5,0x5d5
|
|
|
+.value 0x5d5,0x5d5
|
|
|
+.value 0x5d5,0x5d5
|
|
|
+.value 0x5d5,0x5d5
|
|
|
+.value 0x34d5,0x34d5
|
|
|
+.value 0x34d5,0x34d5
|
|
|
+.value 0x34d5,0x34d5
|
|
|
+.value 0x34d5,0x34d5
|
|
|
+.value 0x34d5,0x34d5
|
|
|
+.value 0x34d5,0x34d5
|
|
|
+.value 0x34d5,0x34d5
|
|
|
+.value 0x34d5,0x34d5
|
|
|
+.value 0x58e,0x58e
|
|
|
+.value 0x58e,0x58e
|
|
|
+.value 0x58e,0x58e
|
|
|
+.value 0x58e,0x58e
|
|
|
+.value 0x58e,0x58e
|
|
|
+.value 0x58e,0x58e
|
|
|
+.value 0x58e,0x58e
|
|
|
+.value 0x58e,0x58e
|
|
|
+.value 0xcf8e,0xcf8e
|
|
|
+.value 0xcf8e,0xcf8e
|
|
|
+.value 0xcf8e,0xcf8e
|
|
|
+.value 0xcf8e,0xcf8e
|
|
|
+.value 0xcf8e,0xcf8e
|
|
|
+.value 0xcf8e,0xcf8e
|
|
|
+.value 0xcf8e,0xcf8e
|
|
|
+.value 0xcf8e,0xcf8e
|
|
|
+.value 0xc56,0xc56
|
|
|
+.value 0xc56,0xc56
|
|
|
+.value 0xc56,0xc56
|
|
|
+.value 0xc56,0xc56
|
|
|
+.value 0xc56,0xc56
|
|
|
+.value 0xc56,0xc56
|
|
|
+.value 0xc56,0xc56
|
|
|
+.value 0xc56,0xc56
|
|
|
+.value 0xae56,0xae56
|
|
|
+.value 0xae56,0xae56
|
|
|
+.value 0xae56,0xae56
|
|
|
+.value 0xae56,0xae56
|
|
|
+.value 0xae56,0xae56
|
|
|
+.value 0xae56,0xae56
|
|
|
+.value 0xae56,0xae56
|
|
|
+.value 0xae56,0xae56
|
|
|
+.value 0x26e,0x26e
|
|
|
+.value 0x26e,0x26e
|
|
|
+.value 0x26e,0x26e
|
|
|
+.value 0x26e,0x26e
|
|
|
+.value 0x26e,0x26e
|
|
|
+.value 0x26e,0x26e
|
|
|
+.value 0x26e,0x26e
|
|
|
+.value 0x26e,0x26e
|
|
|
+.value 0x6c6e,0x6c6e
|
|
|
+.value 0x6c6e,0x6c6e
|
|
|
+.value 0x6c6e,0x6c6e
|
|
|
+.value 0x6c6e,0x6c6e
|
|
|
+.value 0x6c6e,0x6c6e
|
|
|
+.value 0x6c6e,0x6c6e
|
|
|
+.value 0x6c6e,0x6c6e
|
|
|
+.value 0x6c6e,0x6c6e
|
|
|
+.value 0x629,0x629
|
|
|
+.value 0x629,0x629
|
|
|
+.value 0x629,0x629
|
|
|
+.value 0x629,0x629
|
|
|
+.value 0x629,0x629
|
|
|
+.value 0x629,0x629
|
|
|
+.value 0x629,0x629
|
|
|
+.value 0x629,0x629
|
|
|
+.value 0xf129,0xf129
|
|
|
+.value 0xf129,0xf129
|
|
|
+.value 0xf129,0xf129
|
|
|
+.value 0xf129,0xf129
|
|
|
+.value 0xf129,0xf129
|
|
|
+.value 0xf129,0xf129
|
|
|
+.value 0xf129,0xf129
|
|
|
+.value 0xf129,0xf129
|
|
|
+.value 0xb6,0xb6
|
|
|
+.value 0xb6,0xb6
|
|
|
+.value 0xb6,0xb6
|
|
|
+.value 0xb6,0xb6
|
|
|
+.value 0xb6,0xb6
|
|
|
+.value 0xb6,0xb6
|
|
|
+.value 0xb6,0xb6
|
|
|
+.value 0xb6,0xb6
|
|
|
+.value 0xc2b6,0xc2b6
|
|
|
+.value 0xc2b6,0xc2b6
|
|
|
+.value 0xc2b6,0xc2b6
|
|
|
+.value 0xc2b6,0xc2b6
|
|
|
+.value 0xc2b6,0xc2b6
|
|
|
+.value 0xc2b6,0xc2b6
|
|
|
+.value 0xc2b6,0xc2b6
|
|
|
+.value 0xc2b6,0xc2b6
|
|
|
+.value 0x23d,0x23d
|
|
|
+.value 0x23d,0x23d
|
|
|
+.value 0x23d,0x23d
|
|
|
+.value 0x23d,0x23d
|
|
|
+.value 0x7d4,0x7d4
|
|
|
+.value 0x7d4,0x7d4
|
|
|
+.value 0x7d4,0x7d4
|
|
|
+.value 0x7d4,0x7d4
|
|
|
+.value 0xe93d,0xe93d
|
|
|
+.value 0xe93d,0xe93d
|
|
|
+.value 0xe93d,0xe93d
|
|
|
+.value 0xe93d,0xe93d
|
|
|
+.value 0x43d4,0x43d4
|
|
|
+.value 0x43d4,0x43d4
|
|
|
+.value 0x43d4,0x43d4
|
|
|
+.value 0x43d4,0x43d4
|
|
|
+.value 0x108,0x108
|
|
|
+.value 0x108,0x108
|
|
|
+.value 0x108,0x108
|
|
|
+.value 0x108,0x108
|
|
|
+.value 0x17f,0x17f
|
|
|
+.value 0x17f,0x17f
|
|
|
+.value 0x17f,0x17f
|
|
|
+.value 0x17f,0x17f
|
|
|
+.value 0x9908,0x9908
|
|
|
+.value 0x9908,0x9908
|
|
|
+.value 0x9908,0x9908
|
|
|
+.value 0x9908,0x9908
|
|
|
+.value 0x8e7f,0x8e7f
|
|
|
+.value 0x8e7f,0x8e7f
|
|
|
+.value 0x8e7f,0x8e7f
|
|
|
+.value 0x8e7f,0x8e7f
|
|
|
+.value 0x4c7,0x4c7
|
|
|
+.value 0x4c7,0x4c7
|
|
|
+.value 0x28c,0x28c
|
|
|
+.value 0x28c,0x28c
|
|
|
+.value 0xad9,0xad9
|
|
|
+.value 0xad9,0xad9
|
|
|
+.value 0x3f7,0x3f7
|
|
|
+.value 0x3f7,0x3f7
|
|
|
+.value 0xe9c7,0xe9c7
|
|
|
+.value 0xe9c7,0xe9c7
|
|
|
+.value 0xe68c,0xe68c
|
|
|
+.value 0xe68c,0xe68c
|
|
|
+.value 0x5d9,0x5d9
|
|
|
+.value 0x5d9,0x5d9
|
|
|
+.value 0x78f7,0x78f7
|
|
|
+.value 0x78f7,0x78f7
|
|
|
+.value 0x7f4,0x7f4
|
|
|
+.value 0x7f4,0x7f4
|
|
|
+.value 0x5d3,0x5d3
|
|
|
+.value 0x5d3,0x5d3
|
|
|
+.value 0xbe7,0xbe7
|
|
|
+.value 0xbe7,0xbe7
|
|
|
+.value 0x6f9,0x6f9
|
|
|
+.value 0x6f9,0x6f9
|
|
|
+.value 0xa3f4,0xa3f4
|
|
|
+.value 0xa3f4,0xa3f4
|
|
|
+.value 0x4ed3,0x4ed3
|
|
|
+.value 0x4ed3,0x4ed3
|
|
|
+.value 0x50e7,0x50e7
|
|
|
+.value 0x50e7,0x50e7
|
|
|
+.value 0x61f9,0x61f9
|
|
|
+.value 0x61f9,0x61f9
|
|
|
+.value 0x9c4,0x9c4
|
|
|
+.value 0x9c4,0x9c4
|
|
|
+.value 0x9c4,0x9c4
|
|
|
+.value 0x9c4,0x9c4
|
|
|
+.value 0x5b2,0x5b2
|
|
|
+.value 0x5b2,0x5b2
|
|
|
+.value 0x5b2,0x5b2
|
|
|
+.value 0x5b2,0x5b2
|
|
|
+.value 0x15c4,0x15c4
|
|
|
+.value 0x15c4,0x15c4
|
|
|
+.value 0x15c4,0x15c4
|
|
|
+.value 0x15c4,0x15c4
|
|
|
+.value 0xfbb2,0xfbb2
|
|
|
+.value 0xfbb2,0xfbb2
|
|
|
+.value 0xfbb2,0xfbb2
|
|
|
+.value 0xfbb2,0xfbb2
|
|
|
+.value 0x6bf,0x6bf
|
|
|
+.value 0x6bf,0x6bf
|
|
|
+.value 0x6bf,0x6bf
|
|
|
+.value 0x6bf,0x6bf
|
|
|
+.value 0xc7f,0xc7f
|
|
|
+.value 0xc7f,0xc7f
|
|
|
+.value 0xc7f,0xc7f
|
|
|
+.value 0xc7f,0xc7f
|
|
|
+.value 0x53bf,0x53bf
|
|
|
+.value 0x53bf,0x53bf
|
|
|
+.value 0x53bf,0x53bf
|
|
|
+.value 0x53bf,0x53bf
|
|
|
+.value 0x997f,0x997f
|
|
|
+.value 0x997f,0x997f
|
|
|
+.value 0x997f,0x997f
|
|
|
+.value 0x997f,0x997f
|
|
|
+.value 0x204,0x204
|
|
|
+.value 0x204,0x204
|
|
|
+.value 0xcf9,0xcf9
|
|
|
+.value 0xcf9,0xcf9
|
|
|
+.value 0xbc1,0xbc1
|
|
|
+.value 0xbc1,0xbc1
|
|
|
+.value 0xa67,0xa67
|
|
|
+.value 0xa67,0xa67
|
|
|
+.value 0xce04,0xce04
|
|
|
+.value 0xce04,0xce04
|
|
|
+.value 0x67f9,0x67f9
|
|
|
+.value 0x67f9,0x67f9
|
|
|
+.value 0x3ec1,0x3ec1
|
|
|
+.value 0x3ec1,0x3ec1
|
|
|
+.value 0xcf67,0xcf67
|
|
|
+.value 0xcf67,0xcf67
|
|
|
+.value 0x6af,0x6af
|
|
|
+.value 0x6af,0x6af
|
|
|
+.value 0x877,0x877
|
|
|
+.value 0x877,0x877
|
|
|
+.value 0x7e,0x7e
|
|
|
+.value 0x7e,0x7e
|
|
|
+.value 0x5bd,0x5bd
|
|
|
+.value 0x5bd,0x5bd
|
|
|
+.value 0x23af,0x23af
|
|
|
+.value 0x23af,0x23af
|
|
|
+.value 0xfd77,0xfd77
|
|
|
+.value 0xfd77,0xfd77
|
|
|
+.value 0x9a7e,0x9a7e
|
|
|
+.value 0x9a7e,0x9a7e
|
|
|
+.value 0x6cbd,0x6cbd
|
|
|
+.value 0x6cbd,0x6cbd
|
|
|
+.value 0x8b2,0x8b2
|
|
|
+.value 0x1ae,0x1ae
|
|
|
+.value 0x22b,0x22b
|
|
|
+.value 0x34b,0x34b
|
|
|
+.value 0x81e,0x81e
|
|
|
+.value 0x367,0x367
|
|
|
+.value 0x60e,0x60e
|
|
|
+.value 0x69,0x69
|
|
|
+.value 0xfeb2,0xfeb2
|
|
|
+.value 0x2bae,0x2bae
|
|
|
+.value 0xd32b,0xd32b
|
|
|
+.value 0x344b,0x344b
|
|
|
+.value 0x821e,0x821e
|
|
|
+.value 0xc867,0xc867
|
|
|
+.value 0x500e,0x500e
|
|
|
+.value 0xab69,0xab69
|
|
|
+.value 0x1a6,0x1a6
|
|
|
+.value 0x24b,0x24b
|
|
|
+.value 0xb1,0xb1
|
|
|
+.value 0xc16,0xc16
|
|
|
+.value 0xbde,0xbde
|
|
|
+.value 0xb35,0xb35
|
|
|
+.value 0x626,0x626
|
|
|
+.value 0x675,0x675
|
|
|
+.value 0x93a6,0x93a6
|
|
|
+.value 0x334b,0x334b
|
|
|
+.value 0x3b1,0x3b1
|
|
|
+.value 0xee16,0xee16
|
|
|
+.value 0xc5de,0xc5de
|
|
|
+.value 0x5a35,0x5a35
|
|
|
+.value 0x1826,0x1826
|
|
|
+.value 0x1575,0x1575
|
|
|
+.value 0xc0b,0xc0b
|
|
|
+.value 0x30a,0x30a
|
|
|
+.value 0x487,0x487
|
|
|
+.value 0xc6e,0xc6e
|
|
|
+.value 0x9f8,0x9f8
|
|
|
+.value 0x5cb,0x5cb
|
|
|
+.value 0xaa7,0xaa7
|
|
|
+.value 0x45f,0x45f
|
|
|
+.value 0x7d0b,0x7d0b
|
|
|
+.value 0x810a,0x810a
|
|
|
+.value 0x2987,0x2987
|
|
|
+.value 0x766e,0x766e
|
|
|
+.value 0x71f8,0x71f8
|
|
|
+.value 0xb6cb,0xb6cb
|
|
|
+.value 0x8fa7,0x8fa7
|
|
|
+.value 0x315f,0x315f
|
|
|
+.value 0x6cb,0x6cb
|
|
|
+.value 0x284,0x284
|
|
|
+.value 0x999,0x999
|
|
|
+.value 0x15d,0x15d
|
|
|
+.value 0x1a2,0x1a2
|
|
|
+.value 0x149,0x149
|
|
|
+.value 0xc65,0xc65
|
|
|
+.value 0xcb6,0xcb6
|
|
|
+.value 0xb7cb,0xb7cb
|
|
|
+.value 0x4e84,0x4e84
|
|
|
+.value 0x4499,0x4499
|
|
|
+.value 0x485d,0x485d
|
|
|
+.value 0xc7a2,0xc7a2
|
|
|
+.value 0x4c49,0x4c49
|
|
|
+.value 0xeb65,0xeb65
|
|
|
+.value 0xceb6,0xceb6
|
|
|
+.value 0x714,0x714
|
|
|
+.value 0x714,0x714
|
|
|
+.value 0x714,0x714
|
|
|
+.value 0x714,0x714
|
|
|
+.value 0x714,0x714
|
|
|
+.value 0x714,0x714
|
|
|
+.value 0x714,0x714
|
|
|
+.value 0x714,0x714
|
|
|
+.value 0x314,0x314
|
|
|
+.value 0x314,0x314
|
|
|
+.value 0x314,0x314
|
|
|
+.value 0x314,0x314
|
|
|
+.value 0x314,0x314
|
|
|
+.value 0x314,0x314
|
|
|
+.value 0x314,0x314
|
|
|
+.value 0x314,0x314
|
|
|
+.value 0x11f,0x11f
|
|
|
+.value 0x11f,0x11f
|
|
|
+.value 0x11f,0x11f
|
|
|
+.value 0x11f,0x11f
|
|
|
+.value 0x11f,0x11f
|
|
|
+.value 0x11f,0x11f
|
|
|
+.value 0x11f,0x11f
|
|
|
+.value 0x11f,0x11f
|
|
|
+.value 0x6e1f,0x6e1f
|
|
|
+.value 0x6e1f,0x6e1f
|
|
|
+.value 0x6e1f,0x6e1f
|
|
|
+.value 0x6e1f,0x6e1f
|
|
|
+.value 0x6e1f,0x6e1f
|
|
|
+.value 0x6e1f,0x6e1f
|
|
|
+.value 0x6e1f,0x6e1f
|
|
|
+.value 0x6e1f,0x6e1f
|
|
|
+.value 0xca,0xca
|
|
|
+.value 0xca,0xca
|
|
|
+.value 0xca,0xca
|
|
|
+.value 0xca,0xca
|
|
|
+.value 0xca,0xca
|
|
|
+.value 0xca,0xca
|
|
|
+.value 0xca,0xca
|
|
|
+.value 0xca,0xca
|
|
|
+.value 0xbeca,0xbeca
|
|
|
+.value 0xbeca,0xbeca
|
|
|
+.value 0xbeca,0xbeca
|
|
|
+.value 0xbeca,0xbeca
|
|
|
+.value 0xbeca,0xbeca
|
|
|
+.value 0xbeca,0xbeca
|
|
|
+.value 0xbeca,0xbeca
|
|
|
+.value 0xbeca,0xbeca
|
|
|
+.value 0x3c2,0x3c2
|
|
|
+.value 0x3c2,0x3c2
|
|
|
+.value 0x3c2,0x3c2
|
|
|
+.value 0x3c2,0x3c2
|
|
|
+.value 0x3c2,0x3c2
|
|
|
+.value 0x3c2,0x3c2
|
|
|
+.value 0x3c2,0x3c2
|
|
|
+.value 0x3c2,0x3c2
|
|
|
+.value 0x29c2,0x29c2
|
|
|
+.value 0x29c2,0x29c2
|
|
|
+.value 0x29c2,0x29c2
|
|
|
+.value 0x29c2,0x29c2
|
|
|
+.value 0x29c2,0x29c2
|
|
|
+.value 0x29c2,0x29c2
|
|
|
+.value 0x29c2,0x29c2
|
|
|
+.value 0x29c2,0x29c2
|
|
|
+.value 0x84f,0x84f
|
|
|
+.value 0x84f,0x84f
|
|
|
+.value 0x84f,0x84f
|
|
|
+.value 0x84f,0x84f
|
|
|
+.value 0x84f,0x84f
|
|
|
+.value 0x84f,0x84f
|
|
|
+.value 0x84f,0x84f
|
|
|
+.value 0x84f,0x84f
|
|
|
+.value 0x54f,0x54f
|
|
|
+.value 0x54f,0x54f
|
|
|
+.value 0x54f,0x54f
|
|
|
+.value 0x54f,0x54f
|
|
|
+.value 0x54f,0x54f
|
|
|
+.value 0x54f,0x54f
|
|
|
+.value 0x54f,0x54f
|
|
|
+.value 0x54f,0x54f
|
|
|
+.value 0x73f,0x73f
|
|
|
+.value 0x73f,0x73f
|
|
|
+.value 0x73f,0x73f
|
|
|
+.value 0x73f,0x73f
|
|
|
+.value 0x73f,0x73f
|
|
|
+.value 0x73f,0x73f
|
|
|
+.value 0x73f,0x73f
|
|
|
+.value 0x73f,0x73f
|
|
|
+.value 0xd43f,0xd43f
|
|
|
+.value 0xd43f,0xd43f
|
|
|
+.value 0xd43f,0xd43f
|
|
|
+.value 0xd43f,0xd43f
|
|
|
+.value 0xd43f,0xd43f
|
|
|
+.value 0xd43f,0xd43f
|
|
|
+.value 0xd43f,0xd43f
|
|
|
+.value 0xd43f,0xd43f
|
|
|
+.value 0x5bc,0x5bc
|
|
|
+.value 0x5bc,0x5bc
|
|
|
+.value 0x5bc,0x5bc
|
|
|
+.value 0x5bc,0x5bc
|
|
|
+.value 0x5bc,0x5bc
|
|
|
+.value 0x5bc,0x5bc
|
|
|
+.value 0x5bc,0x5bc
|
|
|
+.value 0x5bc,0x5bc
|
|
|
+.value 0x79bc,0x79bc
|
|
|
+.value 0x79bc,0x79bc
|
|
|
+.value 0x79bc,0x79bc
|
|
|
+.value 0x79bc,0x79bc
|
|
|
+.value 0x79bc,0x79bc
|
|
|
+.value 0x79bc,0x79bc
|
|
|
+.value 0x79bc,0x79bc
|
|
|
+.value 0x79bc,0x79bc
|
|
|
+.value 0xa58,0xa58
|
|
|
+.value 0xa58,0xa58
|
|
|
+.value 0xa58,0xa58
|
|
|
+.value 0xa58,0xa58
|
|
|
+.value 0x3f9,0x3f9
|
|
|
+.value 0x3f9,0x3f9
|
|
|
+.value 0x3f9,0x3f9
|
|
|
+.value 0x3f9,0x3f9
|
|
|
+.value 0x9258,0x9258
|
|
|
+.value 0x9258,0x9258
|
|
|
+.value 0x9258,0x9258
|
|
|
+.value 0x9258,0x9258
|
|
|
+.value 0x5ef9,0x5ef9
|
|
|
+.value 0x5ef9,0x5ef9
|
|
|
+.value 0x5ef9,0x5ef9
|
|
|
+.value 0x5ef9,0x5ef9
|
|
|
+.value 0x2dc,0x2dc
|
|
|
+.value 0x2dc,0x2dc
|
|
|
+.value 0x2dc,0x2dc
|
|
|
+.value 0x2dc,0x2dc
|
|
|
+.value 0x260,0x260
|
|
|
+.value 0x260,0x260
|
|
|
+.value 0x260,0x260
|
|
|
+.value 0x260,0x260
|
|
|
+.value 0xd6dc,0xd6dc
|
|
|
+.value 0xd6dc,0xd6dc
|
|
|
+.value 0xd6dc,0xd6dc
|
|
|
+.value 0xd6dc,0xd6dc
|
|
|
+.value 0x2260,0x2260
|
|
|
+.value 0x2260,0x2260
|
|
|
+.value 0x2260,0x2260
|
|
|
+.value 0x2260,0x2260
|
|
|
+.value 0x9ac,0x9ac
|
|
|
+.value 0x9ac,0x9ac
|
|
|
+.value 0xca7,0xca7
|
|
|
+.value 0xca7,0xca7
|
|
|
+.value 0xbf2,0xbf2
|
|
|
+.value 0xbf2,0xbf2
|
|
|
+.value 0x33e,0x33e
|
|
|
+.value 0x33e,0x33e
|
|
|
+.value 0x4dac,0x4dac
|
|
|
+.value 0x4dac,0x4dac
|
|
|
+.value 0x91a7,0x91a7
|
|
|
+.value 0x91a7,0x91a7
|
|
|
+.value 0xc1f2,0xc1f2
|
|
|
+.value 0xc1f2,0xc1f2
|
|
|
+.value 0xdd3e,0xdd3e
|
|
|
+.value 0xdd3e,0xdd3e
|
|
|
+.value 0x6b,0x6b
|
|
|
+.value 0x6b,0x6b
|
|
|
+.value 0x774,0x774
|
|
|
+.value 0x774,0x774
|
|
|
+.value 0xc0a,0xc0a
|
|
|
+.value 0xc0a,0xc0a
|
|
|
+.value 0x94a,0x94a
|
|
|
+.value 0x94a,0x94a
|
|
|
+.value 0x916b,0x916b
|
|
|
+.value 0x916b,0x916b
|
|
|
+.value 0x2374,0x2374
|
|
|
+.value 0x2374,0x2374
|
|
|
+.value 0x8a0a,0x8a0a
|
|
|
+.value 0x8a0a,0x8a0a
|
|
|
+.value 0x474a,0x474a
|
|
|
+.value 0x474a,0x474a
|
|
|
+.value 0x6fb,0x6fb
|
|
|
+.value 0x6fb,0x6fb
|
|
|
+.value 0x6fb,0x6fb
|
|
|
+.value 0x6fb,0x6fb
|
|
|
+.value 0x19b,0x19b
|
|
|
+.value 0x19b,0x19b
|
|
|
+.value 0x19b,0x19b
|
|
|
+.value 0x19b,0x19b
|
|
|
+.value 0x47fb,0x47fb
|
|
|
+.value 0x47fb,0x47fb
|
|
|
+.value 0x47fb,0x47fb
|
|
|
+.value 0x47fb,0x47fb
|
|
|
+.value 0x229b,0x229b
|
|
|
+.value 0x229b,0x229b
|
|
|
+.value 0x229b,0x229b
|
|
|
+.value 0x229b,0x229b
|
|
|
+.value 0xc34,0xc34
|
|
|
+.value 0xc34,0xc34
|
|
|
+.value 0xc34,0xc34
|
|
|
+.value 0xc34,0xc34
|
|
|
+.value 0x6de,0x6de
|
|
|
+.value 0x6de,0x6de
|
|
|
+.value 0x6de,0x6de
|
|
|
+.value 0x6de,0x6de
|
|
|
+.value 0x6834,0x6834
|
|
|
+.value 0x6834,0x6834
|
|
|
+.value 0x6834,0x6834
|
|
|
+.value 0x6834,0x6834
|
|
|
+.value 0xc0de,0xc0de
|
|
|
+.value 0xc0de,0xc0de
|
|
|
+.value 0xc0de,0xc0de
|
|
|
+.value 0xc0de,0xc0de
|
|
|
+.value 0xb73,0xb73
|
|
|
+.value 0xb73,0xb73
|
|
|
+.value 0x3c1,0x3c1
|
|
|
+.value 0x3c1,0x3c1
|
|
|
+.value 0x71d,0x71d
|
|
|
+.value 0x71d,0x71d
|
|
|
+.value 0xa2c,0xa2c
|
|
|
+.value 0xa2c,0xa2c
|
|
|
+.value 0x3473,0x3473
|
|
|
+.value 0x3473,0x3473
|
|
|
+.value 0x36c1,0x36c1
|
|
|
+.value 0x36c1,0x36c1
|
|
|
+.value 0x8e1d,0x8e1d
|
|
|
+.value 0x8e1d,0x8e1d
|
|
|
+.value 0xce2c,0xce2c
|
|
|
+.value 0xce2c,0xce2c
|
|
|
+.value 0x1c0,0x1c0
|
|
|
+.value 0x1c0,0x1c0
|
|
|
+.value 0x8d8,0x8d8
|
|
|
+.value 0x8d8,0x8d8
|
|
|
+.value 0x2a5,0x2a5
|
|
|
+.value 0x2a5,0x2a5
|
|
|
+.value 0x806,0x806
|
|
|
+.value 0x806,0x806
|
|
|
+.value 0x41c0,0x41c0
|
|
|
+.value 0x41c0,0x41c0
|
|
|
+.value 0x10d8,0x10d8
|
|
|
+.value 0x10d8,0x10d8
|
|
|
+.value 0xa1a5,0xa1a5
|
|
|
+.value 0xa1a5,0xa1a5
|
|
|
+.value 0xba06,0xba06
|
|
|
+.value 0xba06,0xba06
|
|
|
+.value 0x331,0x331
|
|
|
+.value 0x449,0x449
|
|
|
+.value 0x25b,0x25b
|
|
|
+.value 0x262,0x262
|
|
|
+.value 0x52a,0x52a
|
|
|
+.value 0x7fc,0x7fc
|
|
|
+.value 0x748,0x748
|
|
|
+.value 0x180,0x180
|
|
|
+.value 0x8631,0x8631
|
|
|
+.value 0x4f49,0x4f49
|
|
|
+.value 0x635b,0x635b
|
|
|
+.value 0x862,0x862
|
|
|
+.value 0xe32a,0xe32a
|
|
|
+.value 0x3bfc,0x3bfc
|
|
|
+.value 0x5f48,0x5f48
|
|
|
+.value 0x8180,0x8180
|
|
|
+.value 0x842,0x842
|
|
|
+.value 0xc79,0xc79
|
|
|
+.value 0x4c2,0x4c2
|
|
|
+.value 0x7ca,0x7ca
|
|
|
+.value 0x997,0x997
|
|
|
+.value 0xdc,0xdc
|
|
|
+.value 0x85e,0x85e
|
|
|
+.value 0x686,0x686
|
|
|
+.value 0xae42,0xae42
|
|
|
+.value 0xe779,0xe779
|
|
|
+.value 0x2ac2,0x2ac2
|
|
|
+.value 0xc5ca,0xc5ca
|
|
|
+.value 0x5e97,0x5e97
|
|
|
+.value 0xd4dc,0xd4dc
|
|
|
+.value 0x425e,0x425e
|
|
|
+.value 0x3886,0x3886
|
|
|
+.value 0x860,0x860
|
|
|
+.value 0x707,0x707
|
|
|
+.value 0x803,0x803
|
|
|
+.value 0x31a,0x31a
|
|
|
+.value 0x71b,0x71b
|
|
|
+.value 0x9ab,0x9ab
|
|
|
+.value 0x99b,0x99b
|
|
|
+.value 0x1de,0x1de
|
|
|
+.value 0x2860,0x2860
|
|
|
+.value 0xac07,0xac07
|
|
|
+.value 0xe103,0xe103
|
|
|
+.value 0xb11a,0xb11a
|
|
|
+.value 0xa81b,0xa81b
|
|
|
+.value 0x5aab,0x5aab
|
|
|
+.value 0x2a9b,0x2a9b
|
|
|
+.value 0xbbde,0xbbde
|
|
|
+.value 0xc95,0xc95
|
|
|
+.value 0xbcd,0xbcd
|
|
|
+.value 0x3e4,0x3e4
|
|
|
+.value 0x3df,0x3df
|
|
|
+.value 0x3be,0x3be
|
|
|
+.value 0x74d,0x74d
|
|
|
+.value 0x5f2,0x5f2
|
|
|
+.value 0x65c,0x65c
|
|
|
+.value 0x7b95,0x7b95
|
|
|
+.value 0xa2cd,0xa2cd
|
|
|
+.value 0x6fe4,0x6fe4
|
|
|
+.value 0xb0df,0xb0df
|
|
|
+.value 0x5dbe,0x5dbe
|
|
|
+.value 0x1e4d,0x1e4d
|
|
|
+.value 0xbbf2,0xbbf2
|
|
|
+.value 0x5a5c,0x5a5c
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_avx2_zetas_basemul:
|
|
|
+.value 0x8b2,0x81e
|
|
|
+.value 0xf74e,0xf7e2
|
|
|
+.value 0x1ae,0x367
|
|
|
+.value 0xfe52,0xfc99
|
|
|
+.value 0x22b,0x60e
|
|
|
+.value 0xfdd5,0xf9f2
|
|
|
+.value 0x34b,0x69
|
|
|
+.value 0xfcb5,0xff97
|
|
|
+.value 0xfeb2,0x821e
|
|
|
+.value 0x14e,0x7de2
|
|
|
+.value 0x2bae,0xc867
|
|
|
+.value 0xd452,0x3799
|
|
|
+.value 0xd32b,0x500e
|
|
|
+.value 0x2cd5,0xaff2
|
|
|
+.value 0x344b,0xab69
|
|
|
+.value 0xcbb5,0x5497
|
|
|
+.value 0x1a6,0xbde
|
|
|
+.value 0xfe5a,0xf422
|
|
|
+.value 0x24b,0xb35
|
|
|
+.value 0xfdb5,0xf4cb
|
|
|
+.value 0xb1,0x626
|
|
|
+.value 0xff4f,0xf9da
|
|
|
+.value 0xc16,0x675
|
|
|
+.value 0xf3ea,0xf98b
|
|
|
+.value 0x93a6,0xc5de
|
|
|
+.value 0x6c5a,0x3a22
|
|
|
+.value 0x334b,0x5a35
|
|
|
+.value 0xccb5,0xa5cb
|
|
|
+.value 0x3b1,0x1826
|
|
|
+.value 0xfc4f,0xe7da
|
|
|
+.value 0xee16,0x1575
|
|
|
+.value 0x11ea,0xea8b
|
|
|
+.value 0xc0b,0x9f8
|
|
|
+.value 0xf3f5,0xf608
|
|
|
+.value 0x30a,0x5cb
|
|
|
+.value 0xfcf6,0xfa35
|
|
|
+.value 0x487,0xaa7
|
|
|
+.value 0xfb79,0xf559
|
|
|
+.value 0xc6e,0x45f
|
|
|
+.value 0xf392,0xfba1
|
|
|
+.value 0x7d0b,0x71f8
|
|
|
+.value 0x82f5,0x8e08
|
|
|
+.value 0x810a,0xb6cb
|
|
|
+.value 0x7ef6,0x4935
|
|
|
+.value 0x2987,0x8fa7
|
|
|
+.value 0xd679,0x7059
|
|
|
+.value 0x766e,0x315f
|
|
|
+.value 0x8992,0xcea1
|
|
|
+.value 0x6cb,0x1a2
|
|
|
+.value 0xf935,0xfe5e
|
|
|
+.value 0x284,0x149
|
|
|
+.value 0xfd7c,0xfeb7
|
|
|
+.value 0x999,0xc65
|
|
|
+.value 0xf667,0xf39b
|
|
|
+.value 0x15d,0xcb6
|
|
|
+.value 0xfea3,0xf34a
|
|
|
+.value 0xb7cb,0xc7a2
|
|
|
+.value 0x4835,0x385e
|
|
|
+.value 0x4e84,0x4c49
|
|
|
+.value 0xb17c,0xb3b7
|
|
|
+.value 0x4499,0xeb65
|
|
|
+.value 0xbb67,0x149b
|
|
|
+.value 0x485d,0xceb6
|
|
|
+.value 0xb7a3,0x314a
|
|
|
+.value 0x331,0x52a
|
|
|
+.value 0xfccf,0xfad6
|
|
|
+.value 0x449,0x7fc
|
|
|
+.value 0xfbb7,0xf804
|
|
|
+.value 0x25b,0x748
|
|
|
+.value 0xfda5,0xf8b8
|
|
|
+.value 0x262,0x180
|
|
|
+.value 0xfd9e,0xfe80
|
|
|
+.value 0x8631,0xe32a
|
|
|
+.value 0x79cf,0x1cd6
|
|
|
+.value 0x4f49,0x3bfc
|
|
|
+.value 0xb0b7,0xc404
|
|
|
+.value 0x635b,0x5f48
|
|
|
+.value 0x9ca5,0xa0b8
|
|
|
+.value 0x862,0x8180
|
|
|
+.value 0xf79e,0x7e80
|
|
|
+.value 0x842,0x997
|
|
|
+.value 0xf7be,0xf669
|
|
|
+.value 0xc79,0xdc
|
|
|
+.value 0xf387,0xff24
|
|
|
+.value 0x4c2,0x85e
|
|
|
+.value 0xfb3e,0xf7a2
|
|
|
+.value 0x7ca,0x686
|
|
|
+.value 0xf836,0xf97a
|
|
|
+.value 0xae42,0x5e97
|
|
|
+.value 0x51be,0xa169
|
|
|
+.value 0xe779,0xd4dc
|
|
|
+.value 0x1887,0x2b24
|
|
|
+.value 0x2ac2,0x425e
|
|
|
+.value 0xd53e,0xbda2
|
|
|
+.value 0xc5ca,0x3886
|
|
|
+.value 0x3a36,0xc77a
|
|
|
+.value 0x860,0x71b
|
|
|
+.value 0xf7a0,0xf8e5
|
|
|
+.value 0x707,0x9ab
|
|
|
+.value 0xf8f9,0xf655
|
|
|
+.value 0x803,0x99b
|
|
|
+.value 0xf7fd,0xf665
|
|
|
+.value 0x31a,0x1de
|
|
|
+.value 0xfce6,0xfe22
|
|
|
+.value 0x2860,0xa81b
|
|
|
+.value 0xd7a0,0x57e5
|
|
|
+.value 0xac07,0x5aab
|
|
|
+.value 0x53f9,0xa555
|
|
|
+.value 0xe103,0x2a9b
|
|
|
+.value 0x1efd,0xd565
|
|
|
+.value 0xb11a,0xbbde
|
|
|
+.value 0x4ee6,0x4422
|
|
|
+.value 0xc95,0x3be
|
|
|
+.value 0xf36b,0xfc42
|
|
|
+.value 0xbcd,0x74d
|
|
|
+.value 0xf433,0xf8b3
|
|
|
+.value 0x3e4,0x5f2
|
|
|
+.value 0xfc1c,0xfa0e
|
|
|
+.value 0x3df,0x65c
|
|
|
+.value 0xfc21,0xf9a4
|
|
|
+.value 0x7b95,0x5dbe
|
|
|
+.value 0x846b,0xa242
|
|
|
+.value 0xa2cd,0x1e4d
|
|
|
+.value 0x5d33,0xe1b3
|
|
|
+.value 0x6fe4,0xbbf2
|
|
|
+.value 0x901c,0x440e
|
|
|
+.value 0xb0df,0x5a5c
|
|
|
+.value 0x4f21,0xa5a4
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_avx2_zetas_inv:
|
|
|
+.value 0x6a5,0x6a5
|
|
|
+.value 0x5b4,0x5b4
|
|
|
+.value 0x70f,0x70f
|
|
|
+.value 0x943,0x943
|
|
|
+.value 0x922,0x922
|
|
|
+.value 0x134,0x134
|
|
|
+.value 0x91d,0x91d
|
|
|
+.value 0x6c,0x6c
|
|
|
+.value 0xa5a5,0xa5a5
|
|
|
+.value 0xe1b4,0xe1b4
|
|
|
+.value 0x440f,0x440f
|
|
|
+.value 0xa243,0xa243
|
|
|
+.value 0x4f22,0x4f22
|
|
|
+.value 0x5d34,0x5d34
|
|
|
+.value 0x901d,0x901d
|
|
|
+.value 0x846c,0x846c
|
|
|
+.value 0xb23,0xb23
|
|
|
+.value 0x356,0x356
|
|
|
+.value 0x366,0x366
|
|
|
+.value 0x5e6,0x5e6
|
|
|
+.value 0x9e7,0x9e7
|
|
|
+.value 0x5fa,0x5fa
|
|
|
+.value 0x4fe,0x4fe
|
|
|
+.value 0x4a1,0x4a1
|
|
|
+.value 0x4423,0x4423
|
|
|
+.value 0xa556,0xa556
|
|
|
+.value 0xd566,0xd566
|
|
|
+.value 0x57e6,0x57e6
|
|
|
+.value 0x4ee7,0x4ee7
|
|
|
+.value 0x53fa,0x53fa
|
|
|
+.value 0x1efe,0x1efe
|
|
|
+.value 0xd7a1,0xd7a1
|
|
|
+.value 0x4fb,0x4fb
|
|
|
+.value 0x4fb,0x4fb
|
|
|
+.value 0xa5c,0xa5c
|
|
|
+.value 0xa5c,0xa5c
|
|
|
+.value 0x429,0x429
|
|
|
+.value 0x429,0x429
|
|
|
+.value 0xb41,0xb41
|
|
|
+.value 0xb41,0xb41
|
|
|
+.value 0x45fb,0x45fb
|
|
|
+.value 0x45fb,0x45fb
|
|
|
+.value 0x5e5c,0x5e5c
|
|
|
+.value 0x5e5c,0x5e5c
|
|
|
+.value 0xef29,0xef29
|
|
|
+.value 0xef29,0xef29
|
|
|
+.value 0xbe41,0xbe41
|
|
|
+.value 0xbe41,0xbe41
|
|
|
+.value 0x2d5,0x2d5
|
|
|
+.value 0x2d5,0x2d5
|
|
|
+.value 0x5e4,0x5e4
|
|
|
+.value 0x5e4,0x5e4
|
|
|
+.value 0x940,0x940
|
|
|
+.value 0x940,0x940
|
|
|
+.value 0x18e,0x18e
|
|
|
+.value 0x18e,0x18e
|
|
|
+.value 0x31d5,0x31d5
|
|
|
+.value 0x31d5,0x31d5
|
|
|
+.value 0x71e4,0x71e4
|
|
|
+.value 0x71e4,0x71e4
|
|
|
+.value 0xc940,0xc940
|
|
|
+.value 0xc940,0xc940
|
|
|
+.value 0xcb8e,0xcb8e
|
|
|
+.value 0xcb8e,0xcb8e
|
|
|
+.value 0x623,0x623
|
|
|
+.value 0x623,0x623
|
|
|
+.value 0x623,0x623
|
|
|
+.value 0x623,0x623
|
|
|
+.value 0xcd,0xcd
|
|
|
+.value 0xcd,0xcd
|
|
|
+.value 0xcd,0xcd
|
|
|
+.value 0xcd,0xcd
|
|
|
+.value 0x3f23,0x3f23
|
|
|
+.value 0x3f23,0x3f23
|
|
|
+.value 0x3f23,0x3f23
|
|
|
+.value 0x3f23,0x3f23
|
|
|
+.value 0x97cd,0x97cd
|
|
|
+.value 0x97cd,0x97cd
|
|
|
+.value 0x97cd,0x97cd
|
|
|
+.value 0x97cd,0x97cd
|
|
|
+.value 0xb66,0xb66
|
|
|
+.value 0xb66,0xb66
|
|
|
+.value 0xb66,0xb66
|
|
|
+.value 0xb66,0xb66
|
|
|
+.value 0x606,0x606
|
|
|
+.value 0x606,0x606
|
|
|
+.value 0x606,0x606
|
|
|
+.value 0x606,0x606
|
|
|
+.value 0xdd66,0xdd66
|
|
|
+.value 0xdd66,0xdd66
|
|
|
+.value 0xdd66,0xdd66
|
|
|
+.value 0xdd66,0xdd66
|
|
|
+.value 0xb806,0xb806
|
|
|
+.value 0xb806,0xb806
|
|
|
+.value 0xb806,0xb806
|
|
|
+.value 0xb806,0xb806
|
|
|
+.value 0x745,0x745
|
|
|
+.value 0x745,0x745
|
|
|
+.value 0x745,0x745
|
|
|
+.value 0x745,0x745
|
|
|
+.value 0x745,0x745
|
|
|
+.value 0x745,0x745
|
|
|
+.value 0x745,0x745
|
|
|
+.value 0x745,0x745
|
|
|
+.value 0x8645,0x8645
|
|
|
+.value 0x8645,0x8645
|
|
|
+.value 0x8645,0x8645
|
|
|
+.value 0x8645,0x8645
|
|
|
+.value 0x8645,0x8645
|
|
|
+.value 0x8645,0x8645
|
|
|
+.value 0x8645,0x8645
|
|
|
+.value 0x8645,0x8645
|
|
|
+.value 0x5c2,0x5c2
|
|
|
+.value 0x5c2,0x5c2
|
|
|
+.value 0x5c2,0x5c2
|
|
|
+.value 0x5c2,0x5c2
|
|
|
+.value 0x5c2,0x5c2
|
|
|
+.value 0x5c2,0x5c2
|
|
|
+.value 0x5c2,0x5c2
|
|
|
+.value 0x5c2,0x5c2
|
|
|
+.value 0x2bc2,0x2bc2
|
|
|
+.value 0x2bc2,0x2bc2
|
|
|
+.value 0x2bc2,0x2bc2
|
|
|
+.value 0x2bc2,0x2bc2
|
|
|
+.value 0x2bc2,0x2bc2
|
|
|
+.value 0x2bc2,0x2bc2
|
|
|
+.value 0x2bc2,0x2bc2
|
|
|
+.value 0x2bc2,0x2bc2
|
|
|
+.value 0xc37,0xc37
|
|
|
+.value 0xc37,0xc37
|
|
|
+.value 0xc37,0xc37
|
|
|
+.value 0xc37,0xc37
|
|
|
+.value 0xc37,0xc37
|
|
|
+.value 0xc37,0xc37
|
|
|
+.value 0xc37,0xc37
|
|
|
+.value 0xc37,0xc37
|
|
|
+.value 0x4137,0x4137
|
|
|
+.value 0x4137,0x4137
|
|
|
+.value 0x4137,0x4137
|
|
|
+.value 0x4137,0x4137
|
|
|
+.value 0x4137,0x4137
|
|
|
+.value 0x4137,0x4137
|
|
|
+.value 0x4137,0x4137
|
|
|
+.value 0x4137,0x4137
|
|
|
+.value 0x67b,0x67b
|
|
|
+.value 0xc25,0xc25
|
|
|
+.value 0x4a3,0x4a3
|
|
|
+.value 0x36a,0x36a
|
|
|
+.value 0x537,0x537
|
|
|
+.value 0x88,0x88
|
|
|
+.value 0x83f,0x83f
|
|
|
+.value 0x4bf,0x4bf
|
|
|
+.value 0xc77b,0xc77b
|
|
|
+.value 0x2b25,0x2b25
|
|
|
+.value 0xbda3,0xbda3
|
|
|
+.value 0xa16a,0xa16a
|
|
|
+.value 0x3a37,0x3a37
|
|
|
+.value 0x1888,0x1888
|
|
|
+.value 0xd53f,0xd53f
|
|
|
+.value 0x51bf,0x51bf
|
|
|
+.value 0xb81,0xb81
|
|
|
+.value 0x505,0x505
|
|
|
+.value 0x5b9,0x5b9
|
|
|
+.value 0x7d7,0x7d7
|
|
|
+.value 0xa9f,0xa9f
|
|
|
+.value 0x8b8,0x8b8
|
|
|
+.value 0xaa6,0xaa6
|
|
|
+.value 0x9d0,0x9d0
|
|
|
+.value 0x7e81,0x7e81
|
|
|
+.value 0xc405,0xc405
|
|
|
+.value 0xa0b9,0xa0b9
|
|
|
+.value 0x1cd7,0x1cd7
|
|
|
+.value 0xf79f,0xf79f
|
|
|
+.value 0xb0b8,0xb0b8
|
|
|
+.value 0x9ca6,0x9ca6
|
|
|
+.value 0x79d0,0x79d0
|
|
|
+.value 0x3b7,0x3b7
|
|
|
+.value 0x3b7,0x3b7
|
|
|
+.value 0xf7,0xf7
|
|
|
+.value 0xf7,0xf7
|
|
|
+.value 0x58d,0x58d
|
|
|
+.value 0x58d,0x58d
|
|
|
+.value 0xc96,0xc96
|
|
|
+.value 0xc96,0xc96
|
|
|
+.value 0xb8b7,0xb8b7
|
|
|
+.value 0xb8b7,0xb8b7
|
|
|
+.value 0x75f7,0x75f7
|
|
|
+.value 0x75f7,0x75f7
|
|
|
+.value 0xdc8d,0xdc8d
|
|
|
+.value 0xdc8d,0xdc8d
|
|
|
+.value 0x6e96,0x6e96
|
|
|
+.value 0x6e96,0x6e96
|
|
|
+.value 0x9c3,0x9c3
|
|
|
+.value 0x9c3,0x9c3
|
|
|
+.value 0x10f,0x10f
|
|
|
+.value 0x10f,0x10f
|
|
|
+.value 0x5a,0x5a
|
|
|
+.value 0x5a,0x5a
|
|
|
+.value 0x355,0x355
|
|
|
+.value 0x355,0x355
|
|
|
+.value 0x22c3,0x22c3
|
|
|
+.value 0x22c3,0x22c3
|
|
|
+.value 0x3e0f,0x3e0f
|
|
|
+.value 0x3e0f,0x3e0f
|
|
|
+.value 0x6e5a,0x6e5a
|
|
|
+.value 0x6e5a,0x6e5a
|
|
|
+.value 0xb255,0xb255
|
|
|
+.value 0xb255,0xb255
|
|
|
+.value 0xaa1,0xaa1
|
|
|
+.value 0xaa1,0xaa1
|
|
|
+.value 0xaa1,0xaa1
|
|
|
+.value 0xaa1,0xaa1
|
|
|
+.value 0xa25,0xa25
|
|
|
+.value 0xa25,0xa25
|
|
|
+.value 0xa25,0xa25
|
|
|
+.value 0xa25,0xa25
|
|
|
+.value 0xdda1,0xdda1
|
|
|
+.value 0xdda1,0xdda1
|
|
|
+.value 0xdda1,0xdda1
|
|
|
+.value 0xdda1,0xdda1
|
|
|
+.value 0x2925,0x2925
|
|
|
+.value 0x2925,0x2925
|
|
|
+.value 0x2925,0x2925
|
|
|
+.value 0x2925,0x2925
|
|
|
+.value 0x908,0x908
|
|
|
+.value 0x908,0x908
|
|
|
+.value 0x908,0x908
|
|
|
+.value 0x908,0x908
|
|
|
+.value 0x2a9,0x2a9
|
|
|
+.value 0x2a9,0x2a9
|
|
|
+.value 0x2a9,0x2a9
|
|
|
+.value 0x2a9,0x2a9
|
|
|
+.value 0xa108,0xa108
|
|
|
+.value 0xa108,0xa108
|
|
|
+.value 0xa108,0xa108
|
|
|
+.value 0xa108,0xa108
|
|
|
+.value 0x6da9,0x6da9
|
|
|
+.value 0x6da9,0x6da9
|
|
|
+.value 0x6da9,0x6da9
|
|
|
+.value 0x6da9,0x6da9
|
|
|
+.value 0x4b2,0x4b2
|
|
|
+.value 0x4b2,0x4b2
|
|
|
+.value 0x4b2,0x4b2
|
|
|
+.value 0x4b2,0x4b2
|
|
|
+.value 0x4b2,0x4b2
|
|
|
+.value 0x4b2,0x4b2
|
|
|
+.value 0x4b2,0x4b2
|
|
|
+.value 0x4b2,0x4b2
|
|
|
+.value 0xfab2,0xfab2
|
|
|
+.value 0xfab2,0xfab2
|
|
|
+.value 0xfab2,0xfab2
|
|
|
+.value 0xfab2,0xfab2
|
|
|
+.value 0xfab2,0xfab2
|
|
|
+.value 0xfab2,0xfab2
|
|
|
+.value 0xfab2,0xfab2
|
|
|
+.value 0xfab2,0xfab2
|
|
|
+.value 0x93f,0x93f
|
|
|
+.value 0x93f,0x93f
|
|
|
+.value 0x93f,0x93f
|
|
|
+.value 0x93f,0x93f
|
|
|
+.value 0x93f,0x93f
|
|
|
+.value 0x93f,0x93f
|
|
|
+.value 0x93f,0x93f
|
|
|
+.value 0x93f,0x93f
|
|
|
+.value 0xd63f,0xd63f
|
|
|
+.value 0xd63f,0xd63f
|
|
|
+.value 0xd63f,0xd63f
|
|
|
+.value 0xd63f,0xd63f
|
|
|
+.value 0xd63f,0xd63f
|
|
|
+.value 0xd63f,0xd63f
|
|
|
+.value 0xd63f,0xd63f
|
|
|
+.value 0xd63f,0xd63f
|
|
|
+.value 0xbe2,0xbe2
|
|
|
+.value 0xbe2,0xbe2
|
|
|
+.value 0xbe2,0xbe2
|
|
|
+.value 0xbe2,0xbe2
|
|
|
+.value 0xbe2,0xbe2
|
|
|
+.value 0xbe2,0xbe2
|
|
|
+.value 0xbe2,0xbe2
|
|
|
+.value 0xbe2,0xbe2
|
|
|
+.value 0x91e2,0x91e2
|
|
|
+.value 0x91e2,0x91e2
|
|
|
+.value 0x91e2,0x91e2
|
|
|
+.value 0x91e2,0x91e2
|
|
|
+.value 0x91e2,0x91e2
|
|
|
+.value 0x91e2,0x91e2
|
|
|
+.value 0x91e2,0x91e2
|
|
|
+.value 0x91e2,0x91e2
|
|
|
+.value 0x5ed,0x5ed
|
|
|
+.value 0x5ed,0x5ed
|
|
|
+.value 0x5ed,0x5ed
|
|
|
+.value 0x5ed,0x5ed
|
|
|
+.value 0x5ed,0x5ed
|
|
|
+.value 0x5ed,0x5ed
|
|
|
+.value 0x5ed,0x5ed
|
|
|
+.value 0x5ed,0x5ed
|
|
|
+.value 0xfced,0xfced
|
|
|
+.value 0xfced,0xfced
|
|
|
+.value 0xfced,0xfced
|
|
|
+.value 0xfced,0xfced
|
|
|
+.value 0xfced,0xfced
|
|
|
+.value 0xfced,0xfced
|
|
|
+.value 0xfced,0xfced
|
|
|
+.value 0xfced,0xfced
|
|
|
+.value 0x4b,0x4b
|
|
|
+.value 0xbb8,0xbb8
|
|
|
+.value 0x9c,0x9c
|
|
|
+.value 0xb5f,0xb5f
|
|
|
+.value 0xba4,0xba4
|
|
|
+.value 0xa7d,0xa7d
|
|
|
+.value 0x368,0x368
|
|
|
+.value 0x636,0x636
|
|
|
+.value 0x314b,0x314b
|
|
|
+.value 0xb3b8,0xb3b8
|
|
|
+.value 0x149c,0x149c
|
|
|
+.value 0x385f,0x385f
|
|
|
+.value 0xb7a4,0xb7a4
|
|
|
+.value 0xb17d,0xb17d
|
|
|
+.value 0xbb68,0xbb68
|
|
|
+.value 0x4836,0x4836
|
|
|
+.value 0x8a2,0x8a2
|
|
|
+.value 0x736,0x736
|
|
|
+.value 0x25a,0x25a
|
|
|
+.value 0x309,0x309
|
|
|
+.value 0x93,0x93
|
|
|
+.value 0x9f7,0x9f7
|
|
|
+.value 0x87a,0x87a
|
|
|
+.value 0xf6,0xf6
|
|
|
+.value 0xcea2,0xcea2
|
|
|
+.value 0x4936,0x4936
|
|
|
+.value 0x705a,0x705a
|
|
|
+.value 0x8e09,0x8e09
|
|
|
+.value 0x8993,0x8993
|
|
|
+.value 0x7ef7,0x7ef7
|
|
|
+.value 0xd67a,0xd67a
|
|
|
+.value 0x82f6,0x82f6
|
|
|
+.value 0x744,0x744
|
|
|
+.value 0x744,0x744
|
|
|
+.value 0xc83,0xc83
|
|
|
+.value 0xc83,0xc83
|
|
|
+.value 0x48a,0x48a
|
|
|
+.value 0x48a,0x48a
|
|
|
+.value 0x652,0x652
|
|
|
+.value 0x652,0x652
|
|
|
+.value 0x9344,0x9344
|
|
|
+.value 0x9344,0x9344
|
|
|
+.value 0x6583,0x6583
|
|
|
+.value 0x6583,0x6583
|
|
|
+.value 0x28a,0x28a
|
|
|
+.value 0x28a,0x28a
|
|
|
+.value 0xdc52,0xdc52
|
|
|
+.value 0xdc52,0xdc52
|
|
|
+.value 0x29a,0x29a
|
|
|
+.value 0x29a,0x29a
|
|
|
+.value 0x140,0x140
|
|
|
+.value 0x140,0x140
|
|
|
+.value 0x8,0x8
|
|
|
+.value 0x8,0x8
|
|
|
+.value 0xafd,0xafd
|
|
|
+.value 0xafd,0xafd
|
|
|
+.value 0x309a,0x309a
|
|
|
+.value 0x309a,0x309a
|
|
|
+.value 0xc140,0xc140
|
|
|
+.value 0xc140,0xc140
|
|
|
+.value 0x9808,0x9808
|
|
|
+.value 0x9808,0x9808
|
|
|
+.value 0x31fd,0x31fd
|
|
|
+.value 0x31fd,0x31fd
|
|
|
+.value 0x82,0x82
|
|
|
+.value 0x82,0x82
|
|
|
+.value 0x82,0x82
|
|
|
+.value 0x82,0x82
|
|
|
+.value 0x642,0x642
|
|
|
+.value 0x642,0x642
|
|
|
+.value 0x642,0x642
|
|
|
+.value 0x642,0x642
|
|
|
+.value 0x6682,0x6682
|
|
|
+.value 0x6682,0x6682
|
|
|
+.value 0x6682,0x6682
|
|
|
+.value 0x6682,0x6682
|
|
|
+.value 0xac42,0xac42
|
|
|
+.value 0xac42,0xac42
|
|
|
+.value 0xac42,0xac42
|
|
|
+.value 0xac42,0xac42
|
|
|
+.value 0x74f,0x74f
|
|
|
+.value 0x74f,0x74f
|
|
|
+.value 0x74f,0x74f
|
|
|
+.value 0x74f,0x74f
|
|
|
+.value 0x33d,0x33d
|
|
|
+.value 0x33d,0x33d
|
|
|
+.value 0x33d,0x33d
|
|
|
+.value 0x33d,0x33d
|
|
|
+.value 0x44f,0x44f
|
|
|
+.value 0x44f,0x44f
|
|
|
+.value 0x44f,0x44f
|
|
|
+.value 0x44f,0x44f
|
|
|
+.value 0xea3d,0xea3d
|
|
|
+.value 0xea3d,0xea3d
|
|
|
+.value 0xea3d,0xea3d
|
|
|
+.value 0xea3d,0xea3d
|
|
|
+.value 0xc4b,0xc4b
|
|
|
+.value 0xc4b,0xc4b
|
|
|
+.value 0xc4b,0xc4b
|
|
|
+.value 0xc4b,0xc4b
|
|
|
+.value 0xc4b,0xc4b
|
|
|
+.value 0xc4b,0xc4b
|
|
|
+.value 0xc4b,0xc4b
|
|
|
+.value 0xc4b,0xc4b
|
|
|
+.value 0x3d4b,0x3d4b
|
|
|
+.value 0x3d4b,0x3d4b
|
|
|
+.value 0x3d4b,0x3d4b
|
|
|
+.value 0x3d4b,0x3d4b
|
|
|
+.value 0x3d4b,0x3d4b
|
|
|
+.value 0x3d4b,0x3d4b
|
|
|
+.value 0x3d4b,0x3d4b
|
|
|
+.value 0x3d4b,0x3d4b
|
|
|
+.value 0x6d8,0x6d8
|
|
|
+.value 0x6d8,0x6d8
|
|
|
+.value 0x6d8,0x6d8
|
|
|
+.value 0x6d8,0x6d8
|
|
|
+.value 0x6d8,0x6d8
|
|
|
+.value 0x6d8,0x6d8
|
|
|
+.value 0x6d8,0x6d8
|
|
|
+.value 0x6d8,0x6d8
|
|
|
+.value 0xed8,0xed8
|
|
|
+.value 0xed8,0xed8
|
|
|
+.value 0xed8,0xed8
|
|
|
+.value 0xed8,0xed8
|
|
|
+.value 0xed8,0xed8
|
|
|
+.value 0xed8,0xed8
|
|
|
+.value 0xed8,0xed8
|
|
|
+.value 0xed8,0xed8
|
|
|
+.value 0x773,0x773
|
|
|
+.value 0x773,0x773
|
|
|
+.value 0x773,0x773
|
|
|
+.value 0x773,0x773
|
|
|
+.value 0x773,0x773
|
|
|
+.value 0x773,0x773
|
|
|
+.value 0x773,0x773
|
|
|
+.value 0x773,0x773
|
|
|
+.value 0x3073,0x3073
|
|
|
+.value 0x3073,0x3073
|
|
|
+.value 0x3073,0x3073
|
|
|
+.value 0x3073,0x3073
|
|
|
+.value 0x3073,0x3073
|
|
|
+.value 0x3073,0x3073
|
|
|
+.value 0x3073,0x3073
|
|
|
+.value 0x3073,0x3073
|
|
|
+.value 0x68c,0x68c
|
|
|
+.value 0x1cc,0x1cc
|
|
|
+.value 0x6db,0x6db
|
|
|
+.value 0x123,0x123
|
|
|
+.value 0xeb,0xeb
|
|
|
+.value 0xab6,0xab6
|
|
|
+.value 0xc50,0xc50
|
|
|
+.value 0xb5b,0xb5b
|
|
|
+.value 0xea8c,0xea8c
|
|
|
+.value 0xa5cc,0xa5cc
|
|
|
+.value 0xe7db,0xe7db
|
|
|
+.value 0x3a23,0x3a23
|
|
|
+.value 0x11eb,0x11eb
|
|
|
+.value 0xccb6,0xccb6
|
|
|
+.value 0xfc50,0xfc50
|
|
|
+.value 0x6c5b,0x6c5b
|
|
|
+.value 0xc98,0xc98
|
|
|
+.value 0x99a,0x99a
|
|
|
+.value 0x6f3,0x6f3
|
|
|
+.value 0x4e3,0x4e3
|
|
|
+.value 0x9b6,0x9b6
|
|
|
+.value 0xb53,0xb53
|
|
|
+.value 0xad6,0xad6
|
|
|
+.value 0x44f,0x44f
|
|
|
+.value 0x5498,0x5498
|
|
|
+.value 0x379a,0x379a
|
|
|
+.value 0xaff3,0xaff3
|
|
|
+.value 0x7de3,0x7de3
|
|
|
+.value 0xcbb6,0xcbb6
|
|
|
+.value 0xd453,0xd453
|
|
|
+.value 0x2cd6,0x2cd6
|
|
|
+.value 0x14f,0x14f
|
|
|
+.value 0x608,0x608
|
|
|
+.value 0x608,0x608
|
|
|
+.value 0x11a,0x11a
|
|
|
+.value 0x11a,0x11a
|
|
|
+.value 0x72e,0x72e
|
|
|
+.value 0x72e,0x72e
|
|
|
+.value 0x50d,0x50d
|
|
|
+.value 0x50d,0x50d
|
|
|
+.value 0x9e08,0x9e08
|
|
|
+.value 0x9e08,0x9e08
|
|
|
+.value 0xaf1a,0xaf1a
|
|
|
+.value 0xaf1a,0xaf1a
|
|
|
+.value 0xb12e,0xb12e
|
|
|
+.value 0xb12e,0xb12e
|
|
|
+.value 0x5c0d,0x5c0d
|
|
|
+.value 0x5c0d,0x5c0d
|
|
|
+.value 0x90a,0x90a
|
|
|
+.value 0x90a,0x90a
|
|
|
+.value 0x228,0x228
|
|
|
+.value 0x228,0x228
|
|
|
+.value 0xa75,0xa75
|
|
|
+.value 0xa75,0xa75
|
|
|
+.value 0x83a,0x83a
|
|
|
+.value 0x83a,0x83a
|
|
|
+.value 0x870a,0x870a
|
|
|
+.value 0x870a,0x870a
|
|
|
+.value 0xfa28,0xfa28
|
|
|
+.value 0xfa28,0xfa28
|
|
|
+.value 0x1975,0x1975
|
|
|
+.value 0x1975,0x1975
|
|
|
+.value 0x163a,0x163a
|
|
|
+.value 0x163a,0x163a
|
|
|
+.value 0xb82,0xb82
|
|
|
+.value 0xb82,0xb82
|
|
|
+.value 0xb82,0xb82
|
|
|
+.value 0xb82,0xb82
|
|
|
+.value 0xbf9,0xbf9
|
|
|
+.value 0xbf9,0xbf9
|
|
|
+.value 0xbf9,0xbf9
|
|
|
+.value 0xbf9,0xbf9
|
|
|
+.value 0x7182,0x7182
|
|
|
+.value 0x7182,0x7182
|
|
|
+.value 0x7182,0x7182
|
|
|
+.value 0x7182,0x7182
|
|
|
+.value 0x66f9,0x66f9
|
|
|
+.value 0x66f9,0x66f9
|
|
|
+.value 0x66f9,0x66f9
|
|
|
+.value 0x66f9,0x66f9
|
|
|
+.value 0x52d,0x52d
|
|
|
+.value 0x52d,0x52d
|
|
|
+.value 0x52d,0x52d
|
|
|
+.value 0x52d,0x52d
|
|
|
+.value 0xac4,0xac4
|
|
|
+.value 0xac4,0xac4
|
|
|
+.value 0xac4,0xac4
|
|
|
+.value 0xac4,0xac4
|
|
|
+.value 0xbc2d,0xbc2d
|
|
|
+.value 0xbc2d,0xbc2d
|
|
|
+.value 0xbc2d,0xbc2d
|
|
|
+.value 0xbc2d,0xbc2d
|
|
|
+.value 0x16c4,0x16c4
|
|
|
+.value 0x16c4,0x16c4
|
|
|
+.value 0x16c4,0x16c4
|
|
|
+.value 0x16c4,0x16c4
|
|
|
+.value 0xa93,0xa93
|
|
|
+.value 0xa93,0xa93
|
|
|
+.value 0xa93,0xa93
|
|
|
+.value 0xa93,0xa93
|
|
|
+.value 0xa93,0xa93
|
|
|
+.value 0xa93,0xa93
|
|
|
+.value 0xa93,0xa93
|
|
|
+.value 0xa93,0xa93
|
|
|
+.value 0x9393,0x9393
|
|
|
+.value 0x9393,0x9393
|
|
|
+.value 0x9393,0x9393
|
|
|
+.value 0x9393,0x9393
|
|
|
+.value 0x9393,0x9393
|
|
|
+.value 0x9393,0x9393
|
|
|
+.value 0x9393,0x9393
|
|
|
+.value 0x9393,0x9393
|
|
|
+.value 0xab,0xab
|
|
|
+.value 0xab,0xab
|
|
|
+.value 0xab,0xab
|
|
|
+.value 0xab,0xab
|
|
|
+.value 0xab,0xab
|
|
|
+.value 0xab,0xab
|
|
|
+.value 0xab,0xab
|
|
|
+.value 0xab,0xab
|
|
|
+.value 0x51ab,0x51ab
|
|
|
+.value 0x51ab,0x51ab
|
|
|
+.value 0x51ab,0x51ab
|
|
|
+.value 0x51ab,0x51ab
|
|
|
+.value 0x51ab,0x51ab
|
|
|
+.value 0x51ab,0x51ab
|
|
|
+.value 0x51ab,0x51ab
|
|
|
+.value 0x51ab,0x51ab
|
|
|
+.value 0x72c,0x72c
|
|
|
+.value 0x72c,0x72c
|
|
|
+.value 0x72c,0x72c
|
|
|
+.value 0x72c,0x72c
|
|
|
+.value 0x72c,0x72c
|
|
|
+.value 0x72c,0x72c
|
|
|
+.value 0x72c,0x72c
|
|
|
+.value 0x72c,0x72c
|
|
|
+.value 0xcb2c,0xcb2c
|
|
|
+.value 0xcb2c,0xcb2c
|
|
|
+.value 0xcb2c,0xcb2c
|
|
|
+.value 0xcb2c,0xcb2c
|
|
|
+.value 0xcb2c,0xcb2c
|
|
|
+.value 0xcb2c,0xcb2c
|
|
|
+.value 0xcb2c,0xcb2c
|
|
|
+.value 0xcb2c,0xcb2c
|
|
|
+.value 0x167,0x167
|
|
|
+.value 0x167,0x167
|
|
|
+.value 0x167,0x167
|
|
|
+.value 0x167,0x167
|
|
|
+.value 0x167,0x167
|
|
|
+.value 0x167,0x167
|
|
|
+.value 0x167,0x167
|
|
|
+.value 0x167,0x167
|
|
|
+.value 0xc667,0xc667
|
|
|
+.value 0xc667,0xc667
|
|
|
+.value 0xc667,0xc667
|
|
|
+.value 0xc667,0xc667
|
|
|
+.value 0xc667,0xc667
|
|
|
+.value 0xc667,0xc667
|
|
|
+.value 0xc667,0xc667
|
|
|
+.value 0xc667,0xc667
|
|
|
+.value 0x2f6,0x2f6
|
|
|
+.value 0x2f6,0x2f6
|
|
|
+.value 0x2f6,0x2f6
|
|
|
+.value 0x2f6,0x2f6
|
|
|
+.value 0x2f6,0x2f6
|
|
|
+.value 0x2f6,0x2f6
|
|
|
+.value 0x2f6,0x2f6
|
|
|
+.value 0x2f6,0x2f6
|
|
|
+.value 0x84f6,0x84f6
|
|
|
+.value 0x84f6,0x84f6
|
|
|
+.value 0x84f6,0x84f6
|
|
|
+.value 0x84f6,0x84f6
|
|
|
+.value 0x84f6,0x84f6
|
|
|
+.value 0x84f6,0x84f6
|
|
|
+.value 0x84f6,0x84f6
|
|
|
+.value 0x84f6,0x84f6
|
|
|
+.value 0x5a1,0x5a1
|
|
|
+.value 0x5a1,0x5a1
|
|
|
+.value 0x5a1,0x5a1
|
|
|
+.value 0x5a1,0x5a1
|
|
|
+.value 0x5a1,0x5a1
|
|
|
+.value 0x5a1,0x5a1
|
|
|
+.value 0x5a1,0x5a1
|
|
|
+.value 0x5a1,0x5a1
|
|
|
+.value 0xd8a1,0xd8a1
|
|
|
+.value 0xd8a1,0xd8a1
|
|
|
+.value 0xd8a1,0xd8a1
|
|
|
+.value 0xd8a1,0xd8a1
|
|
|
+.value 0xd8a1,0xd8a1
|
|
|
+.value 0xd8a1,0xd8a1
|
|
|
+.value 0xd8a1,0xd8a1
|
|
|
+.value 0xd8a1,0xd8a1
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_keygen_avx2
|
|
|
+.type kyber_keygen_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_keygen_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_keygen_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_keygen_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu kyber_q(%rip), %ymm14
|
|
|
+ vmovdqu kyber_v(%rip), %ymm15
|
|
|
+ movq %r8, %r9
|
|
|
+ movq %rdi, %r10
|
|
|
+L_kyber_keygen_avx2_priv:
|
|
|
+ # ntt
|
|
|
+ leaq L_kyber_avx2_zetas(%rip), %r11
|
|
|
+ vmovdqu (%r11), %ymm10
|
|
|
+ vmovdqu 32(%r11), %ymm12
|
|
|
+ vmovdqu 128(%r10), %ymm0
|
|
|
+ vmovdqu 160(%r10), %ymm1
|
|
|
+ vmovdqu 192(%r10), %ymm2
|
|
|
+ vmovdqu 224(%r10), %ymm3
|
|
|
+ vmovdqu 384(%r10), %ymm4
|
|
|
+ vmovdqu 416(%r10), %ymm5
|
|
|
+ vmovdqu 448(%r10), %ymm6
|
|
|
+ vmovdqu 480(%r10), %ymm7
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 128(%r10)
|
|
|
+ vmovdqu %ymm1, 160(%r10)
|
|
|
+ vmovdqu %ymm2, 192(%r10)
|
|
|
+ vmovdqu %ymm3, 224(%r10)
|
|
|
+ vmovdqu %ymm4, 384(%r10)
|
|
|
+ vmovdqu %ymm5, 416(%r10)
|
|
|
+ vmovdqu %ymm6, 448(%r10)
|
|
|
+ vmovdqu %ymm7, 480(%r10)
|
|
|
+ vmovdqu (%r10), %ymm0
|
|
|
+ vmovdqu 32(%r10), %ymm1
|
|
|
+ vmovdqu 64(%r10), %ymm2
|
|
|
+ vmovdqu 96(%r10), %ymm3
|
|
|
+ vmovdqu 256(%r10), %ymm4
|
|
|
+ vmovdqu 288(%r10), %ymm5
|
|
|
+ vmovdqu 320(%r10), %ymm6
|
|
|
+ vmovdqu 352(%r10), %ymm7
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm4, 256(%r10)
|
|
|
+ vmovdqu %ymm5, 288(%r10)
|
|
|
+ vmovdqu %ymm6, 320(%r10)
|
|
|
+ vmovdqu %ymm7, 352(%r10)
|
|
|
+ vmovdqu 128(%r10), %ymm4
|
|
|
+ vmovdqu 160(%r10), %ymm5
|
|
|
+ vmovdqu 192(%r10), %ymm6
|
|
|
+ vmovdqu 224(%r10), %ymm7
|
|
|
+ # 64: 0/3
|
|
|
+ vmovdqu 64(%r11), %ymm10
|
|
|
+ vmovdqu 96(%r11), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ # 32: 0/3
|
|
|
+ vmovdqu 128(%r11), %ymm10
|
|
|
+ vmovdqu 160(%r11), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ # 32: 0/3
|
|
|
+ vmovdqu 192(%r11), %ymm10
|
|
|
+ vmovdqu 224(%r11), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm5, %ymm5
|
|
|
+ # 16: 0/3
|
|
|
+ vmovdqu 256(%r11), %ymm10
|
|
|
+ vmovdqu 288(%r11), %ymm12
|
|
|
+ vmovdqu 320(%r11), %ymm11
|
|
|
+ vmovdqu 352(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 16: 0/3
|
|
|
+ vmovdqu 384(%r11), %ymm10
|
|
|
+ vmovdqu 416(%r11), %ymm12
|
|
|
+ vmovdqu 448(%r11), %ymm11
|
|
|
+ vmovdqu 480(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 8: 0/3
|
|
|
+ vperm2i128 $32, %ymm1, %ymm0, %ymm8
|
|
|
+ vmovdqu 512(%r11), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm0, %ymm1
|
|
|
+ vmovdqu 544(%r11), %ymm12
|
|
|
+ vperm2i128 $32, %ymm3, %ymm2, %ymm9
|
|
|
+ vmovdqu 576(%r11), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm2, %ymm3
|
|
|
+ vmovdqu 608(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm0
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm0, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm2, %ymm9, %ymm9
|
|
|
+ # 4: 0/3
|
|
|
+ vmovdqu 640(%r11), %ymm10
|
|
|
+ vmovdqu 672(%r11), %ymm12
|
|
|
+ vmovdqu 704(%r11), %ymm11
|
|
|
+ vmovdqu 736(%r11), %ymm13
|
|
|
+ vpunpcklqdq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhqdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpcklqdq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhqdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 8: 0/3
|
|
|
+ vperm2i128 $32, %ymm5, %ymm4, %ymm8
|
|
|
+ vmovdqu 768(%r11), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm4, %ymm5
|
|
|
+ vmovdqu 800(%r11), %ymm12
|
|
|
+ vperm2i128 $32, %ymm7, %ymm6, %ymm9
|
|
|
+ vmovdqu 832(%r11), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm6, %ymm7
|
|
|
+ vmovdqu 864(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm4
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm4, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm6, %ymm9, %ymm9
|
|
|
+ # 4: 0/3
|
|
|
+ vmovdqu 896(%r11), %ymm10
|
|
|
+ vmovdqu 928(%r11), %ymm12
|
|
|
+ vmovdqu 960(%r11), %ymm11
|
|
|
+ vmovdqu 992(%r11), %ymm13
|
|
|
+ vpunpcklqdq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhqdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpcklqdq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhqdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 2: 0/3
|
|
|
+ vmovdqu 1024(%r11), %ymm10
|
|
|
+ vmovdqu 1056(%r11), %ymm12
|
|
|
+ vmovdqu 1088(%r11), %ymm11
|
|
|
+ vmovdqu 1120(%r11), %ymm13
|
|
|
+ vpsllq $32, %ymm1, %ymm8
|
|
|
+ vpsrlq $32, %ymm0, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm0, %ymm0
|
|
|
+ vpblendd $0x55, %ymm9, %ymm1, %ymm1
|
|
|
+ vpsllq $32, %ymm3, %ymm8
|
|
|
+ vpsrlq $32, %ymm2, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm2, %ymm2
|
|
|
+ vpblendd $0x55, %ymm9, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 2: 0/3
|
|
|
+ vmovdqu 1152(%r11), %ymm10
|
|
|
+ vmovdqu 1184(%r11), %ymm12
|
|
|
+ vmovdqu 1216(%r11), %ymm11
|
|
|
+ vmovdqu 1248(%r11), %ymm13
|
|
|
+ vpsllq $32, %ymm5, %ymm8
|
|
|
+ vpsrlq $32, %ymm4, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm4, %ymm4
|
|
|
+ vpblendd $0x55, %ymm9, %ymm5, %ymm5
|
|
|
+ vpsllq $32, %ymm7, %ymm8
|
|
|
+ vpsrlq $32, %ymm6, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm6, %ymm6
|
|
|
+ vpblendd $0x55, %ymm9, %ymm7, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ vpunpckldq %ymm1, %ymm0, %ymm8
|
|
|
+ vpunpckhdq %ymm1, %ymm0, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm0
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm1
|
|
|
+ vpunpckldq %ymm3, %ymm2, %ymm8
|
|
|
+ vpunpckhdq %ymm3, %ymm2, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm2
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm3
|
|
|
+ vpunpckldq %ymm5, %ymm4, %ymm8
|
|
|
+ vpunpckhdq %ymm5, %ymm4, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm4
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm5
|
|
|
+ vpunpckldq %ymm7, %ymm6, %ymm8
|
|
|
+ vpunpckhdq %ymm7, %ymm6, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm6
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm0, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm1, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm9
|
|
|
+ vmovdqu %ymm8, (%r10)
|
|
|
+ vmovdqu %ymm9, 32(%r10)
|
|
|
+ vpmulhw %ymm15, %ymm2, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm3, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vmovdqu %ymm8, 64(%r10)
|
|
|
+ vmovdqu %ymm9, 96(%r10)
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vmovdqu %ymm8, 128(%r10)
|
|
|
+ vmovdqu %ymm9, 160(%r10)
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vmovdqu %ymm8, 192(%r10)
|
|
|
+ vmovdqu %ymm9, 224(%r10)
|
|
|
+ vmovdqu 256(%r10), %ymm0
|
|
|
+ vmovdqu 288(%r10), %ymm1
|
|
|
+ vmovdqu 320(%r10), %ymm2
|
|
|
+ vmovdqu 352(%r10), %ymm3
|
|
|
+ vmovdqu 384(%r10), %ymm4
|
|
|
+ vmovdqu 416(%r10), %ymm5
|
|
|
+ vmovdqu 448(%r10), %ymm6
|
|
|
+ vmovdqu 480(%r10), %ymm7
|
|
|
+ # 64: 1/3
|
|
|
+ vmovdqu 1280(%r11), %ymm10
|
|
|
+ vmovdqu 1312(%r11), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ # 32: 1/3
|
|
|
+ vmovdqu 1344(%r11), %ymm10
|
|
|
+ vmovdqu 1376(%r11), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ # 32: 1/3
|
|
|
+ vmovdqu 1408(%r11), %ymm10
|
|
|
+ vmovdqu 1440(%r11), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm5, %ymm5
|
|
|
+ # 16: 1/3
|
|
|
+ vmovdqu 1472(%r11), %ymm10
|
|
|
+ vmovdqu 1504(%r11), %ymm12
|
|
|
+ vmovdqu 1536(%r11), %ymm11
|
|
|
+ vmovdqu 1568(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 16: 1/3
|
|
|
+ vmovdqu 1600(%r11), %ymm10
|
|
|
+ vmovdqu 1632(%r11), %ymm12
|
|
|
+ vmovdqu 1664(%r11), %ymm11
|
|
|
+ vmovdqu 1696(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 8: 1/3
|
|
|
+ vperm2i128 $32, %ymm1, %ymm0, %ymm8
|
|
|
+ vmovdqu 1728(%r11), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm0, %ymm1
|
|
|
+ vmovdqu 1760(%r11), %ymm12
|
|
|
+ vperm2i128 $32, %ymm3, %ymm2, %ymm9
|
|
|
+ vmovdqu 1792(%r11), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm2, %ymm3
|
|
|
+ vmovdqu 1824(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm0
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm0, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm2, %ymm9, %ymm9
|
|
|
+ # 4: 1/3
|
|
|
+ vmovdqu 1856(%r11), %ymm10
|
|
|
+ vmovdqu 1888(%r11), %ymm12
|
|
|
+ vmovdqu 1920(%r11), %ymm11
|
|
|
+ vmovdqu 1952(%r11), %ymm13
|
|
|
+ vpunpcklqdq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhqdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpcklqdq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhqdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 8: 1/3
|
|
|
+ vperm2i128 $32, %ymm5, %ymm4, %ymm8
|
|
|
+ vmovdqu 1984(%r11), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm4, %ymm5
|
|
|
+ vmovdqu 2016(%r11), %ymm12
|
|
|
+ vperm2i128 $32, %ymm7, %ymm6, %ymm9
|
|
|
+ vmovdqu 2048(%r11), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm6, %ymm7
|
|
|
+ vmovdqu 2080(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm4
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm4, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm6, %ymm9, %ymm9
|
|
|
+ # 4: 1/3
|
|
|
+ vmovdqu 2112(%r11), %ymm10
|
|
|
+ vmovdqu 2144(%r11), %ymm12
|
|
|
+ vmovdqu 2176(%r11), %ymm11
|
|
|
+ vmovdqu 2208(%r11), %ymm13
|
|
|
+ vpunpcklqdq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhqdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpcklqdq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhqdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 2: 1/3
|
|
|
+ vmovdqu 2240(%r11), %ymm10
|
|
|
+ vmovdqu 2272(%r11), %ymm12
|
|
|
+ vmovdqu 2304(%r11), %ymm11
|
|
|
+ vmovdqu 2336(%r11), %ymm13
|
|
|
+ vpsllq $32, %ymm1, %ymm8
|
|
|
+ vpsrlq $32, %ymm0, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm0, %ymm0
|
|
|
+ vpblendd $0x55, %ymm9, %ymm1, %ymm1
|
|
|
+ vpsllq $32, %ymm3, %ymm8
|
|
|
+ vpsrlq $32, %ymm2, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm2, %ymm2
|
|
|
+ vpblendd $0x55, %ymm9, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 2: 1/3
|
|
|
+ vmovdqu 2368(%r11), %ymm10
|
|
|
+ vmovdqu 2400(%r11), %ymm12
|
|
|
+ vmovdqu 2432(%r11), %ymm11
|
|
|
+ vmovdqu 2464(%r11), %ymm13
|
|
|
+ vpsllq $32, %ymm5, %ymm8
|
|
|
+ vpsrlq $32, %ymm4, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm4, %ymm4
|
|
|
+ vpblendd $0x55, %ymm9, %ymm5, %ymm5
|
|
|
+ vpsllq $32, %ymm7, %ymm8
|
|
|
+ vpsrlq $32, %ymm6, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm6, %ymm6
|
|
|
+ vpblendd $0x55, %ymm9, %ymm7, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ vpunpckldq %ymm1, %ymm0, %ymm8
|
|
|
+ vpunpckhdq %ymm1, %ymm0, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm0
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm1
|
|
|
+ vpunpckldq %ymm3, %ymm2, %ymm8
|
|
|
+ vpunpckhdq %ymm3, %ymm2, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm2
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm3
|
|
|
+ vpunpckldq %ymm5, %ymm4, %ymm8
|
|
|
+ vpunpckhdq %ymm5, %ymm4, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm4
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm5
|
|
|
+ vpunpckldq %ymm7, %ymm6, %ymm8
|
|
|
+ vpunpckhdq %ymm7, %ymm6, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm6
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm0, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm1, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm9
|
|
|
+ vmovdqu %ymm8, 256(%r10)
|
|
|
+ vmovdqu %ymm9, 288(%r10)
|
|
|
+ vpmulhw %ymm15, %ymm2, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm3, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vmovdqu %ymm8, 320(%r10)
|
|
|
+ vmovdqu %ymm9, 352(%r10)
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vmovdqu %ymm8, 384(%r10)
|
|
|
+ vmovdqu %ymm9, 416(%r10)
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vmovdqu %ymm8, 448(%r10)
|
|
|
+ vmovdqu %ymm9, 480(%r10)
|
|
|
+ addq $0x200, %r10
|
|
|
+ subq $0x01, %r9
|
|
|
+ jg L_kyber_keygen_avx2_priv
|
|
|
+ vmovdqu kyber_qinv(%rip), %ymm13
|
|
|
+ movq %r8, %rax
|
|
|
+ movq %rsi, %r10
|
|
|
+L_kyber_keygen_avx2_acc:
|
|
|
+ # Pointwise acc mont
|
|
|
+ movq %r8, %r9
|
|
|
+ # Base mul mont
|
|
|
+ leaq L_kyber_avx2_zetas_basemul(%rip), %r11
|
|
|
+ vmovdqu (%rcx), %ymm2
|
|
|
+ vmovdqu 32(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu (%rdi), %ymm4
|
|
|
+ vmovdqu 32(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu (%r11), %ymm10
|
|
|
+ vmovdqu 32(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, (%r10)
|
|
|
+ vmovdqu %ymm1, 32(%r10)
|
|
|
+ vmovdqu 64(%rcx), %ymm2
|
|
|
+ vmovdqu 96(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 64(%rdi), %ymm4
|
|
|
+ vmovdqu 96(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 64(%r11), %ymm10
|
|
|
+ vmovdqu 96(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 64(%r10)
|
|
|
+ vmovdqu %ymm1, 96(%r10)
|
|
|
+ vmovdqu 128(%rcx), %ymm2
|
|
|
+ vmovdqu 160(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 128(%rdi), %ymm4
|
|
|
+ vmovdqu 160(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 128(%r11), %ymm10
|
|
|
+ vmovdqu 160(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 128(%r10)
|
|
|
+ vmovdqu %ymm1, 160(%r10)
|
|
|
+ vmovdqu 192(%rcx), %ymm2
|
|
|
+ vmovdqu 224(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 192(%rdi), %ymm4
|
|
|
+ vmovdqu 224(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 192(%r11), %ymm10
|
|
|
+ vmovdqu 224(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 192(%r10)
|
|
|
+ vmovdqu %ymm1, 224(%r10)
|
|
|
+ vmovdqu 256(%rcx), %ymm2
|
|
|
+ vmovdqu 288(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 256(%rdi), %ymm4
|
|
|
+ vmovdqu 288(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 256(%r11), %ymm10
|
|
|
+ vmovdqu 288(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 256(%r10)
|
|
|
+ vmovdqu %ymm1, 288(%r10)
|
|
|
+ vmovdqu 320(%rcx), %ymm2
|
|
|
+ vmovdqu 352(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 320(%rdi), %ymm4
|
|
|
+ vmovdqu 352(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 320(%r11), %ymm10
|
|
|
+ vmovdqu 352(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 320(%r10)
|
|
|
+ vmovdqu %ymm1, 352(%r10)
|
|
|
+ vmovdqu 384(%rcx), %ymm2
|
|
|
+ vmovdqu 416(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 384(%rdi), %ymm4
|
|
|
+ vmovdqu 416(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 384(%r11), %ymm10
|
|
|
+ vmovdqu 416(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 384(%r10)
|
|
|
+ vmovdqu %ymm1, 416(%r10)
|
|
|
+ vmovdqu 448(%rcx), %ymm2
|
|
|
+ vmovdqu 480(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 448(%rdi), %ymm4
|
|
|
+ vmovdqu 480(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 448(%r11), %ymm10
|
|
|
+ vmovdqu 480(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 448(%r10)
|
|
|
+ vmovdqu %ymm1, 480(%r10)
|
|
|
+ addq $0x200, %rcx
|
|
|
+ addq $0x200, %rdi
|
|
|
+ subq $2, %r9
|
|
|
+ jz L_pointwise_acc_mont_end_keygen
|
|
|
+L_pointwise_acc_mont_start_keygen:
|
|
|
+ # Base mul mont add
|
|
|
+ leaq L_kyber_avx2_zetas_basemul(%rip), %r11
|
|
|
+ vmovdqu (%rcx), %ymm2
|
|
|
+ vmovdqu 32(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu (%rdi), %ymm4
|
|
|
+ vmovdqu 32(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu (%r11), %ymm10
|
|
|
+ vmovdqu 32(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu (%r10), %ymm6
|
|
|
+ vmovdqu 32(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, (%r10)
|
|
|
+ vmovdqu %ymm1, 32(%r10)
|
|
|
+ vmovdqu 64(%rcx), %ymm2
|
|
|
+ vmovdqu 96(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 64(%rdi), %ymm4
|
|
|
+ vmovdqu 96(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 64(%r11), %ymm10
|
|
|
+ vmovdqu 96(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 64(%r10), %ymm6
|
|
|
+ vmovdqu 96(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 64(%r10)
|
|
|
+ vmovdqu %ymm1, 96(%r10)
|
|
|
+ vmovdqu 128(%rcx), %ymm2
|
|
|
+ vmovdqu 160(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 128(%rdi), %ymm4
|
|
|
+ vmovdqu 160(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 128(%r11), %ymm10
|
|
|
+ vmovdqu 160(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 128(%r10), %ymm6
|
|
|
+ vmovdqu 160(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 128(%r10)
|
|
|
+ vmovdqu %ymm1, 160(%r10)
|
|
|
+ vmovdqu 192(%rcx), %ymm2
|
|
|
+ vmovdqu 224(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 192(%rdi), %ymm4
|
|
|
+ vmovdqu 224(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 192(%r11), %ymm10
|
|
|
+ vmovdqu 224(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 192(%r10), %ymm6
|
|
|
+ vmovdqu 224(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 192(%r10)
|
|
|
+ vmovdqu %ymm1, 224(%r10)
|
|
|
+ vmovdqu 256(%rcx), %ymm2
|
|
|
+ vmovdqu 288(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 256(%rdi), %ymm4
|
|
|
+ vmovdqu 288(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 256(%r11), %ymm10
|
|
|
+ vmovdqu 288(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 256(%r10), %ymm6
|
|
|
+ vmovdqu 288(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 256(%r10)
|
|
|
+ vmovdqu %ymm1, 288(%r10)
|
|
|
+ vmovdqu 320(%rcx), %ymm2
|
|
|
+ vmovdqu 352(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 320(%rdi), %ymm4
|
|
|
+ vmovdqu 352(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 320(%r11), %ymm10
|
|
|
+ vmovdqu 352(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 320(%r10), %ymm6
|
|
|
+ vmovdqu 352(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 320(%r10)
|
|
|
+ vmovdqu %ymm1, 352(%r10)
|
|
|
+ vmovdqu 384(%rcx), %ymm2
|
|
|
+ vmovdqu 416(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 384(%rdi), %ymm4
|
|
|
+ vmovdqu 416(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 384(%r11), %ymm10
|
|
|
+ vmovdqu 416(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 384(%r10), %ymm6
|
|
|
+ vmovdqu 416(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 384(%r10)
|
|
|
+ vmovdqu %ymm1, 416(%r10)
|
|
|
+ vmovdqu 448(%rcx), %ymm2
|
|
|
+ vmovdqu 480(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 448(%rdi), %ymm4
|
|
|
+ vmovdqu 480(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 448(%r11), %ymm10
|
|
|
+ vmovdqu 480(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 448(%r10), %ymm6
|
|
|
+ vmovdqu 480(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 448(%r10)
|
|
|
+ vmovdqu %ymm1, 480(%r10)
|
|
|
+ addq $0x200, %rcx
|
|
|
+ addq $0x200, %rdi
|
|
|
+ subq $0x01, %r9
|
|
|
+ jg L_pointwise_acc_mont_start_keygen
|
|
|
+L_pointwise_acc_mont_end_keygen:
|
|
|
+ # Base mul mont add
|
|
|
+ leaq L_kyber_avx2_zetas_basemul(%rip), %r11
|
|
|
+ vmovdqu (%rcx), %ymm2
|
|
|
+ vmovdqu 32(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu (%rdi), %ymm4
|
|
|
+ vmovdqu 32(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu (%r11), %ymm10
|
|
|
+ vmovdqu 32(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu (%r10), %ymm6
|
|
|
+ vmovdqu 32(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, (%r10)
|
|
|
+ vmovdqu %ymm1, 32(%r10)
|
|
|
+ vmovdqu 64(%rcx), %ymm2
|
|
|
+ vmovdqu 96(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 64(%rdi), %ymm4
|
|
|
+ vmovdqu 96(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 64(%r11), %ymm10
|
|
|
+ vmovdqu 96(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 64(%r10), %ymm6
|
|
|
+ vmovdqu 96(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 64(%r10)
|
|
|
+ vmovdqu %ymm1, 96(%r10)
|
|
|
+ vmovdqu 128(%rcx), %ymm2
|
|
|
+ vmovdqu 160(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 128(%rdi), %ymm4
|
|
|
+ vmovdqu 160(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 128(%r11), %ymm10
|
|
|
+ vmovdqu 160(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 128(%r10), %ymm6
|
|
|
+ vmovdqu 160(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 128(%r10)
|
|
|
+ vmovdqu %ymm1, 160(%r10)
|
|
|
+ vmovdqu 192(%rcx), %ymm2
|
|
|
+ vmovdqu 224(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 192(%rdi), %ymm4
|
|
|
+ vmovdqu 224(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 192(%r11), %ymm10
|
|
|
+ vmovdqu 224(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 192(%r10), %ymm6
|
|
|
+ vmovdqu 224(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 192(%r10)
|
|
|
+ vmovdqu %ymm1, 224(%r10)
|
|
|
+ vmovdqu 256(%rcx), %ymm2
|
|
|
+ vmovdqu 288(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 256(%rdi), %ymm4
|
|
|
+ vmovdqu 288(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 256(%r11), %ymm10
|
|
|
+ vmovdqu 288(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 256(%r10), %ymm6
|
|
|
+ vmovdqu 288(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 256(%r10)
|
|
|
+ vmovdqu %ymm1, 288(%r10)
|
|
|
+ vmovdqu 320(%rcx), %ymm2
|
|
|
+ vmovdqu 352(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 320(%rdi), %ymm4
|
|
|
+ vmovdqu 352(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 320(%r11), %ymm10
|
|
|
+ vmovdqu 352(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 320(%r10), %ymm6
|
|
|
+ vmovdqu 352(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 320(%r10)
|
|
|
+ vmovdqu %ymm1, 352(%r10)
|
|
|
+ vmovdqu 384(%rcx), %ymm2
|
|
|
+ vmovdqu 416(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 384(%rdi), %ymm4
|
|
|
+ vmovdqu 416(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 384(%r11), %ymm10
|
|
|
+ vmovdqu 416(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 384(%r10), %ymm6
|
|
|
+ vmovdqu 416(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 384(%r10)
|
|
|
+ vmovdqu %ymm1, 416(%r10)
|
|
|
+ vmovdqu 448(%rcx), %ymm2
|
|
|
+ vmovdqu 480(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 448(%rdi), %ymm4
|
|
|
+ vmovdqu 480(%rdi), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 448(%r11), %ymm10
|
|
|
+ vmovdqu 480(%r11), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 448(%r10), %ymm6
|
|
|
+ vmovdqu 480(%r10), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 448(%r10)
|
|
|
+ vmovdqu %ymm1, 480(%r10)
|
|
|
+ addq $0x200, %rcx
|
|
|
+ addq $0x200, %rdi
|
|
|
+ movq %r8, %r9
|
|
|
+ shl $9, %r9d
|
|
|
+ subq %r9, %rdi
|
|
|
+ addq $0x200, %r10
|
|
|
+ subq $0x01, %rax
|
|
|
+ jg L_kyber_keygen_avx2_acc
|
|
|
+ movq %r8, %rax
|
|
|
+ vmovdqu kyber_f(%rip), %ymm12
|
|
|
+ vmovdqu kyber_f_qinv(%rip), %ymm13
|
|
|
+ movq %r8, %rax
|
|
|
+ movq %rsi, %r10
|
|
|
+L_kyber_keygen_avx2_to_mont:
|
|
|
+ # To Mont
|
|
|
+ vmovdqu (%r10), %ymm0
|
|
|
+ vmovdqu 32(%r10), %ymm1
|
|
|
+ vmovdqu 64(%r10), %ymm2
|
|
|
+ vmovdqu 96(%r10), %ymm3
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm0, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm2, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm2
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm3, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm3
|
|
|
+ vmovdqu %ymm0, (%r10)
|
|
|
+ vmovdqu %ymm1, 32(%r10)
|
|
|
+ vmovdqu %ymm2, 64(%r10)
|
|
|
+ vmovdqu %ymm3, 96(%r10)
|
|
|
+ vmovdqu 128(%r10), %ymm0
|
|
|
+ vmovdqu 160(%r10), %ymm1
|
|
|
+ vmovdqu 192(%r10), %ymm2
|
|
|
+ vmovdqu 224(%r10), %ymm3
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm0, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm2, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm2
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm3, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm3
|
|
|
+ vmovdqu %ymm0, 128(%r10)
|
|
|
+ vmovdqu %ymm1, 160(%r10)
|
|
|
+ vmovdqu %ymm2, 192(%r10)
|
|
|
+ vmovdqu %ymm3, 224(%r10)
|
|
|
+ vmovdqu 256(%r10), %ymm0
|
|
|
+ vmovdqu 288(%r10), %ymm1
|
|
|
+ vmovdqu 320(%r10), %ymm2
|
|
|
+ vmovdqu 352(%r10), %ymm3
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm0, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm2, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm2
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm3, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm3
|
|
|
+ vmovdqu %ymm0, 256(%r10)
|
|
|
+ vmovdqu %ymm1, 288(%r10)
|
|
|
+ vmovdqu %ymm2, 320(%r10)
|
|
|
+ vmovdqu %ymm3, 352(%r10)
|
|
|
+ vmovdqu 384(%r10), %ymm0
|
|
|
+ vmovdqu 416(%r10), %ymm1
|
|
|
+ vmovdqu 448(%r10), %ymm2
|
|
|
+ vmovdqu 480(%r10), %ymm3
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm0, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm2, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm2
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm4
|
|
|
+ vpmulhw %ymm12, %ymm3, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm3
|
|
|
+ vmovdqu %ymm0, 384(%r10)
|
|
|
+ vmovdqu %ymm1, 416(%r10)
|
|
|
+ vmovdqu %ymm2, 448(%r10)
|
|
|
+ vmovdqu %ymm3, 480(%r10)
|
|
|
+ addq $0x200, %r10
|
|
|
+ subq $0x01, %rax
|
|
|
+ jg L_kyber_keygen_avx2_to_mont
|
|
|
+ movq %r8, %rax
|
|
|
+L_kyber_keygen_avx2_to_mont_ntt_err:
|
|
|
+ # ntt
|
|
|
+ leaq L_kyber_avx2_zetas(%rip), %r11
|
|
|
+ vmovdqu (%r11), %ymm10
|
|
|
+ vmovdqu 32(%r11), %ymm12
|
|
|
+ vmovdqu 128(%rdx), %ymm0
|
|
|
+ vmovdqu 160(%rdx), %ymm1
|
|
|
+ vmovdqu 192(%rdx), %ymm2
|
|
|
+ vmovdqu 224(%rdx), %ymm3
|
|
|
+ vmovdqu 384(%rdx), %ymm4
|
|
|
+ vmovdqu 416(%rdx), %ymm5
|
|
|
+ vmovdqu 448(%rdx), %ymm6
|
|
|
+ vmovdqu 480(%rdx), %ymm7
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 128(%rdx)
|
|
|
+ vmovdqu %ymm1, 160(%rdx)
|
|
|
+ vmovdqu %ymm2, 192(%rdx)
|
|
|
+ vmovdqu %ymm3, 224(%rdx)
|
|
|
+ vmovdqu %ymm4, 384(%rdx)
|
|
|
+ vmovdqu %ymm5, 416(%rdx)
|
|
|
+ vmovdqu %ymm6, 448(%rdx)
|
|
|
+ vmovdqu %ymm7, 480(%rdx)
|
|
|
+ vmovdqu (%rdx), %ymm0
|
|
|
+ vmovdqu 32(%rdx), %ymm1
|
|
|
+ vmovdqu 64(%rdx), %ymm2
|
|
|
+ vmovdqu 96(%rdx), %ymm3
|
|
|
+ vmovdqu 256(%rdx), %ymm4
|
|
|
+ vmovdqu 288(%rdx), %ymm5
|
|
|
+ vmovdqu 320(%rdx), %ymm6
|
|
|
+ vmovdqu 352(%rdx), %ymm7
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm4, 256(%rdx)
|
|
|
+ vmovdqu %ymm5, 288(%rdx)
|
|
|
+ vmovdqu %ymm6, 320(%rdx)
|
|
|
+ vmovdqu %ymm7, 352(%rdx)
|
|
|
+ vmovdqu 128(%rdx), %ymm4
|
|
|
+ vmovdqu 160(%rdx), %ymm5
|
|
|
+ vmovdqu 192(%rdx), %ymm6
|
|
|
+ vmovdqu 224(%rdx), %ymm7
|
|
|
+ # 64: 0/3
|
|
|
+ vmovdqu 64(%r11), %ymm10
|
|
|
+ vmovdqu 96(%r11), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ # 32: 0/3
|
|
|
+ vmovdqu 128(%r11), %ymm10
|
|
|
+ vmovdqu 160(%r11), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ # 32: 0/3
|
|
|
+ vmovdqu 192(%r11), %ymm10
|
|
|
+ vmovdqu 224(%r11), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm5, %ymm5
|
|
|
+ # 16: 0/3
|
|
|
+ vmovdqu 256(%r11), %ymm10
|
|
|
+ vmovdqu 288(%r11), %ymm12
|
|
|
+ vmovdqu 320(%r11), %ymm11
|
|
|
+ vmovdqu 352(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 16: 0/3
|
|
|
+ vmovdqu 384(%r11), %ymm10
|
|
|
+ vmovdqu 416(%r11), %ymm12
|
|
|
+ vmovdqu 448(%r11), %ymm11
|
|
|
+ vmovdqu 480(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 8: 0/3
|
|
|
+ vperm2i128 $32, %ymm1, %ymm0, %ymm8
|
|
|
+ vmovdqu 512(%r11), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm0, %ymm1
|
|
|
+ vmovdqu 544(%r11), %ymm12
|
|
|
+ vperm2i128 $32, %ymm3, %ymm2, %ymm9
|
|
|
+ vmovdqu 576(%r11), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm2, %ymm3
|
|
|
+ vmovdqu 608(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm0
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm0, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm2, %ymm9, %ymm9
|
|
|
+ # 4: 0/3
|
|
|
+ vmovdqu 640(%r11), %ymm10
|
|
|
+ vmovdqu 672(%r11), %ymm12
|
|
|
+ vmovdqu 704(%r11), %ymm11
|
|
|
+ vmovdqu 736(%r11), %ymm13
|
|
|
+ vpunpcklqdq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhqdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpcklqdq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhqdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 8: 0/3
|
|
|
+ vperm2i128 $32, %ymm5, %ymm4, %ymm8
|
|
|
+ vmovdqu 768(%r11), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm4, %ymm5
|
|
|
+ vmovdqu 800(%r11), %ymm12
|
|
|
+ vperm2i128 $32, %ymm7, %ymm6, %ymm9
|
|
|
+ vmovdqu 832(%r11), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm6, %ymm7
|
|
|
+ vmovdqu 864(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm4
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm4, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm6, %ymm9, %ymm9
|
|
|
+ # 4: 0/3
|
|
|
+ vmovdqu 896(%r11), %ymm10
|
|
|
+ vmovdqu 928(%r11), %ymm12
|
|
|
+ vmovdqu 960(%r11), %ymm11
|
|
|
+ vmovdqu 992(%r11), %ymm13
|
|
|
+ vpunpcklqdq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhqdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpcklqdq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhqdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 2: 0/3
|
|
|
+ vmovdqu 1024(%r11), %ymm10
|
|
|
+ vmovdqu 1056(%r11), %ymm12
|
|
|
+ vmovdqu 1088(%r11), %ymm11
|
|
|
+ vmovdqu 1120(%r11), %ymm13
|
|
|
+ vpsllq $32, %ymm1, %ymm8
|
|
|
+ vpsrlq $32, %ymm0, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm0, %ymm0
|
|
|
+ vpblendd $0x55, %ymm9, %ymm1, %ymm1
|
|
|
+ vpsllq $32, %ymm3, %ymm8
|
|
|
+ vpsrlq $32, %ymm2, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm2, %ymm2
|
|
|
+ vpblendd $0x55, %ymm9, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 2: 0/3
|
|
|
+ vmovdqu 1152(%r11), %ymm10
|
|
|
+ vmovdqu 1184(%r11), %ymm12
|
|
|
+ vmovdqu 1216(%r11), %ymm11
|
|
|
+ vmovdqu 1248(%r11), %ymm13
|
|
|
+ vpsllq $32, %ymm5, %ymm8
|
|
|
+ vpsrlq $32, %ymm4, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm4, %ymm4
|
|
|
+ vpblendd $0x55, %ymm9, %ymm5, %ymm5
|
|
|
+ vpsllq $32, %ymm7, %ymm8
|
|
|
+ vpsrlq $32, %ymm6, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm6, %ymm6
|
|
|
+ vpblendd $0x55, %ymm9, %ymm7, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ vpunpckldq %ymm1, %ymm0, %ymm8
|
|
|
+ vpunpckhdq %ymm1, %ymm0, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm0
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm1
|
|
|
+ vpunpckldq %ymm3, %ymm2, %ymm8
|
|
|
+ vpunpckhdq %ymm3, %ymm2, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm2
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm3
|
|
|
+ vpunpckldq %ymm5, %ymm4, %ymm8
|
|
|
+ vpunpckhdq %ymm5, %ymm4, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm4
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm5
|
|
|
+ vpunpckldq %ymm7, %ymm6, %ymm8
|
|
|
+ vpunpckhdq %ymm7, %ymm6, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm6
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm7
|
|
|
+ vmovdqu %ymm0, (%rdx)
|
|
|
+ vmovdqu %ymm1, 32(%rdx)
|
|
|
+ vmovdqu %ymm2, 64(%rdx)
|
|
|
+ vmovdqu %ymm3, 96(%rdx)
|
|
|
+ vmovdqu %ymm4, 128(%rdx)
|
|
|
+ vmovdqu %ymm5, 160(%rdx)
|
|
|
+ vmovdqu %ymm6, 192(%rdx)
|
|
|
+ vmovdqu %ymm7, 224(%rdx)
|
|
|
+ vmovdqu 256(%rdx), %ymm0
|
|
|
+ vmovdqu 288(%rdx), %ymm1
|
|
|
+ vmovdqu 320(%rdx), %ymm2
|
|
|
+ vmovdqu 352(%rdx), %ymm3
|
|
|
+ vmovdqu 384(%rdx), %ymm4
|
|
|
+ vmovdqu 416(%rdx), %ymm5
|
|
|
+ vmovdqu 448(%rdx), %ymm6
|
|
|
+ vmovdqu 480(%rdx), %ymm7
|
|
|
+ # 64: 1/3
|
|
|
+ vmovdqu 1280(%r11), %ymm10
|
|
|
+ vmovdqu 1312(%r11), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ # 32: 1/3
|
|
|
+ vmovdqu 1344(%r11), %ymm10
|
|
|
+ vmovdqu 1376(%r11), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ # 32: 1/3
|
|
|
+ vmovdqu 1408(%r11), %ymm10
|
|
|
+ vmovdqu 1440(%r11), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm5, %ymm5
|
|
|
+ # 16: 1/3
|
|
|
+ vmovdqu 1472(%r11), %ymm10
|
|
|
+ vmovdqu 1504(%r11), %ymm12
|
|
|
+ vmovdqu 1536(%r11), %ymm11
|
|
|
+ vmovdqu 1568(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 16: 1/3
|
|
|
+ vmovdqu 1600(%r11), %ymm10
|
|
|
+ vmovdqu 1632(%r11), %ymm12
|
|
|
+ vmovdqu 1664(%r11), %ymm11
|
|
|
+ vmovdqu 1696(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 8: 1/3
|
|
|
+ vperm2i128 $32, %ymm1, %ymm0, %ymm8
|
|
|
+ vmovdqu 1728(%r11), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm0, %ymm1
|
|
|
+ vmovdqu 1760(%r11), %ymm12
|
|
|
+ vperm2i128 $32, %ymm3, %ymm2, %ymm9
|
|
|
+ vmovdqu 1792(%r11), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm2, %ymm3
|
|
|
+ vmovdqu 1824(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm0
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm0, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm2, %ymm9, %ymm9
|
|
|
+ # 4: 1/3
|
|
|
+ vmovdqu 1856(%r11), %ymm10
|
|
|
+ vmovdqu 1888(%r11), %ymm12
|
|
|
+ vmovdqu 1920(%r11), %ymm11
|
|
|
+ vmovdqu 1952(%r11), %ymm13
|
|
|
+ vpunpcklqdq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhqdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpcklqdq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhqdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 8: 1/3
|
|
|
+ vperm2i128 $32, %ymm5, %ymm4, %ymm8
|
|
|
+ vmovdqu 1984(%r11), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm4, %ymm5
|
|
|
+ vmovdqu 2016(%r11), %ymm12
|
|
|
+ vperm2i128 $32, %ymm7, %ymm6, %ymm9
|
|
|
+ vmovdqu 2048(%r11), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm6, %ymm7
|
|
|
+ vmovdqu 2080(%r11), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm4
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm4, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm6, %ymm9, %ymm9
|
|
|
+ # 4: 1/3
|
|
|
+ vmovdqu 2112(%r11), %ymm10
|
|
|
+ vmovdqu 2144(%r11), %ymm12
|
|
|
+ vmovdqu 2176(%r11), %ymm11
|
|
|
+ vmovdqu 2208(%r11), %ymm13
|
|
|
+ vpunpcklqdq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhqdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpcklqdq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhqdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 2: 1/3
|
|
|
+ vmovdqu 2240(%r11), %ymm10
|
|
|
+ vmovdqu 2272(%r11), %ymm12
|
|
|
+ vmovdqu 2304(%r11), %ymm11
|
|
|
+ vmovdqu 2336(%r11), %ymm13
|
|
|
+ vpsllq $32, %ymm1, %ymm8
|
|
|
+ vpsrlq $32, %ymm0, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm0, %ymm0
|
|
|
+ vpblendd $0x55, %ymm9, %ymm1, %ymm1
|
|
|
+ vpsllq $32, %ymm3, %ymm8
|
|
|
+ vpsrlq $32, %ymm2, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm2, %ymm2
|
|
|
+ vpblendd $0x55, %ymm9, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 2: 1/3
|
|
|
+ vmovdqu 2368(%r11), %ymm10
|
|
|
+ vmovdqu 2400(%r11), %ymm12
|
|
|
+ vmovdqu 2432(%r11), %ymm11
|
|
|
+ vmovdqu 2464(%r11), %ymm13
|
|
|
+ vpsllq $32, %ymm5, %ymm8
|
|
|
+ vpsrlq $32, %ymm4, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm4, %ymm4
|
|
|
+ vpblendd $0x55, %ymm9, %ymm5, %ymm5
|
|
|
+ vpsllq $32, %ymm7, %ymm8
|
|
|
+ vpsrlq $32, %ymm6, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm6, %ymm6
|
|
|
+ vpblendd $0x55, %ymm9, %ymm7, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ vpunpckldq %ymm1, %ymm0, %ymm8
|
|
|
+ vpunpckhdq %ymm1, %ymm0, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm0
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm1
|
|
|
+ vpunpckldq %ymm3, %ymm2, %ymm8
|
|
|
+ vpunpckhdq %ymm3, %ymm2, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm2
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm3
|
|
|
+ vpunpckldq %ymm5, %ymm4, %ymm8
|
|
|
+ vpunpckhdq %ymm5, %ymm4, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm4
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm5
|
|
|
+ vpunpckldq %ymm7, %ymm6, %ymm8
|
|
|
+ vpunpckhdq %ymm7, %ymm6, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm6
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm7
|
|
|
+ vmovdqu %ymm0, 256(%rdx)
|
|
|
+ vmovdqu %ymm1, 288(%rdx)
|
|
|
+ vmovdqu %ymm2, 320(%rdx)
|
|
|
+ vmovdqu %ymm3, 352(%rdx)
|
|
|
+ vmovdqu %ymm4, 384(%rdx)
|
|
|
+ vmovdqu %ymm5, 416(%rdx)
|
|
|
+ vmovdqu %ymm6, 448(%rdx)
|
|
|
+ vmovdqu %ymm7, 480(%rdx)
|
|
|
+ # Add Errors
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu 32(%rsi), %ymm1
|
|
|
+ vmovdqu 64(%rsi), %ymm2
|
|
|
+ vmovdqu 96(%rsi), %ymm3
|
|
|
+ vmovdqu (%rdx), %ymm4
|
|
|
+ vmovdqu 32(%rdx), %ymm5
|
|
|
+ vmovdqu 64(%rdx), %ymm6
|
|
|
+ vmovdqu 96(%rdx), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm4
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm6
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm1, 32(%rsi)
|
|
|
+ vmovdqu %ymm2, 64(%rsi)
|
|
|
+ vmovdqu %ymm3, 96(%rsi)
|
|
|
+ vmovdqu 128(%rsi), %ymm0
|
|
|
+ vmovdqu 160(%rsi), %ymm1
|
|
|
+ vmovdqu 192(%rsi), %ymm2
|
|
|
+ vmovdqu 224(%rsi), %ymm3
|
|
|
+ vmovdqu 128(%rdx), %ymm4
|
|
|
+ vmovdqu 160(%rdx), %ymm5
|
|
|
+ vmovdqu 192(%rdx), %ymm6
|
|
|
+ vmovdqu 224(%rdx), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm4
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm6
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, 128(%rsi)
|
|
|
+ vmovdqu %ymm1, 160(%rsi)
|
|
|
+ vmovdqu %ymm2, 192(%rsi)
|
|
|
+ vmovdqu %ymm3, 224(%rsi)
|
|
|
+ vmovdqu 256(%rsi), %ymm0
|
|
|
+ vmovdqu 288(%rsi), %ymm1
|
|
|
+ vmovdqu 320(%rsi), %ymm2
|
|
|
+ vmovdqu 352(%rsi), %ymm3
|
|
|
+ vmovdqu 256(%rdx), %ymm4
|
|
|
+ vmovdqu 288(%rdx), %ymm5
|
|
|
+ vmovdqu 320(%rdx), %ymm6
|
|
|
+ vmovdqu 352(%rdx), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm4
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm6
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, 256(%rsi)
|
|
|
+ vmovdqu %ymm1, 288(%rsi)
|
|
|
+ vmovdqu %ymm2, 320(%rsi)
|
|
|
+ vmovdqu %ymm3, 352(%rsi)
|
|
|
+ vmovdqu 384(%rsi), %ymm0
|
|
|
+ vmovdqu 416(%rsi), %ymm1
|
|
|
+ vmovdqu 448(%rsi), %ymm2
|
|
|
+ vmovdqu 480(%rsi), %ymm3
|
|
|
+ vmovdqu 384(%rdx), %ymm4
|
|
|
+ vmovdqu 416(%rdx), %ymm5
|
|
|
+ vmovdqu 448(%rdx), %ymm6
|
|
|
+ vmovdqu 480(%rdx), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm4
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm6
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, 384(%rsi)
|
|
|
+ vmovdqu %ymm1, 416(%rsi)
|
|
|
+ vmovdqu %ymm2, 448(%rsi)
|
|
|
+ vmovdqu %ymm3, 480(%rsi)
|
|
|
+ addq $0x200, %rdx
|
|
|
+ addq $0x200, %rsi
|
|
|
+ subq $0x01, %rax
|
|
|
+ jg L_kyber_keygen_avx2_to_mont_ntt_err
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_keygen_avx2,.-kyber_keygen_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_encapsulate_avx2
|
|
|
+.type kyber_encapsulate_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_encapsulate_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_encapsulate_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_encapsulate_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ pushq %r12
|
|
|
+ pushq %r13
|
|
|
+ pushq %r14
|
|
|
+ pushq %r15
|
|
|
+ movq 40(%rsp), %rax
|
|
|
+ movq 48(%rsp), %r10
|
|
|
+ movq 56(%rsp), %r11
|
|
|
+ subq $48, %rsp
|
|
|
+ vmovdqu kyber_q(%rip), %ymm14
|
|
|
+ vmovdqu kyber_v(%rip), %ymm15
|
|
|
+ movq %r11, %r13
|
|
|
+ movq %r8, %r14
|
|
|
+L_kyber_encapsulate_avx2_trans:
|
|
|
+ # ntt
|
|
|
+ leaq L_kyber_avx2_zetas(%rip), %r15
|
|
|
+ vmovdqu (%r15), %ymm10
|
|
|
+ vmovdqu 32(%r15), %ymm12
|
|
|
+ vmovdqu 128(%r14), %ymm0
|
|
|
+ vmovdqu 160(%r14), %ymm1
|
|
|
+ vmovdqu 192(%r14), %ymm2
|
|
|
+ vmovdqu 224(%r14), %ymm3
|
|
|
+ vmovdqu 384(%r14), %ymm4
|
|
|
+ vmovdqu 416(%r14), %ymm5
|
|
|
+ vmovdqu 448(%r14), %ymm6
|
|
|
+ vmovdqu 480(%r14), %ymm7
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 128(%r14)
|
|
|
+ vmovdqu %ymm1, 160(%r14)
|
|
|
+ vmovdqu %ymm2, 192(%r14)
|
|
|
+ vmovdqu %ymm3, 224(%r14)
|
|
|
+ vmovdqu %ymm4, 384(%r14)
|
|
|
+ vmovdqu %ymm5, 416(%r14)
|
|
|
+ vmovdqu %ymm6, 448(%r14)
|
|
|
+ vmovdqu %ymm7, 480(%r14)
|
|
|
+ vmovdqu (%r14), %ymm0
|
|
|
+ vmovdqu 32(%r14), %ymm1
|
|
|
+ vmovdqu 64(%r14), %ymm2
|
|
|
+ vmovdqu 96(%r14), %ymm3
|
|
|
+ vmovdqu 256(%r14), %ymm4
|
|
|
+ vmovdqu 288(%r14), %ymm5
|
|
|
+ vmovdqu 320(%r14), %ymm6
|
|
|
+ vmovdqu 352(%r14), %ymm7
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm4, 256(%r14)
|
|
|
+ vmovdqu %ymm5, 288(%r14)
|
|
|
+ vmovdqu %ymm6, 320(%r14)
|
|
|
+ vmovdqu %ymm7, 352(%r14)
|
|
|
+ vmovdqu 128(%r14), %ymm4
|
|
|
+ vmovdqu 160(%r14), %ymm5
|
|
|
+ vmovdqu 192(%r14), %ymm6
|
|
|
+ vmovdqu 224(%r14), %ymm7
|
|
|
+ # 64: 0/3
|
|
|
+ vmovdqu 64(%r15), %ymm10
|
|
|
+ vmovdqu 96(%r15), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ # 32: 0/3
|
|
|
+ vmovdqu 128(%r15), %ymm10
|
|
|
+ vmovdqu 160(%r15), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ # 32: 0/3
|
|
|
+ vmovdqu 192(%r15), %ymm10
|
|
|
+ vmovdqu 224(%r15), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm5, %ymm5
|
|
|
+ # 16: 0/3
|
|
|
+ vmovdqu 256(%r15), %ymm10
|
|
|
+ vmovdqu 288(%r15), %ymm12
|
|
|
+ vmovdqu 320(%r15), %ymm11
|
|
|
+ vmovdqu 352(%r15), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 16: 0/3
|
|
|
+ vmovdqu 384(%r15), %ymm10
|
|
|
+ vmovdqu 416(%r15), %ymm12
|
|
|
+ vmovdqu 448(%r15), %ymm11
|
|
|
+ vmovdqu 480(%r15), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 8: 0/3
|
|
|
+ vperm2i128 $32, %ymm1, %ymm0, %ymm8
|
|
|
+ vmovdqu 512(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm0, %ymm1
|
|
|
+ vmovdqu 544(%r15), %ymm12
|
|
|
+ vperm2i128 $32, %ymm3, %ymm2, %ymm9
|
|
|
+ vmovdqu 576(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm2, %ymm3
|
|
|
+ vmovdqu 608(%r15), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm0
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm0, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm2, %ymm9, %ymm9
|
|
|
+ # 4: 0/3
|
|
|
+ vmovdqu 640(%r15), %ymm10
|
|
|
+ vmovdqu 672(%r15), %ymm12
|
|
|
+ vmovdqu 704(%r15), %ymm11
|
|
|
+ vmovdqu 736(%r15), %ymm13
|
|
|
+ vpunpcklqdq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhqdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpcklqdq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhqdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 8: 0/3
|
|
|
+ vperm2i128 $32, %ymm5, %ymm4, %ymm8
|
|
|
+ vmovdqu 768(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm4, %ymm5
|
|
|
+ vmovdqu 800(%r15), %ymm12
|
|
|
+ vperm2i128 $32, %ymm7, %ymm6, %ymm9
|
|
|
+ vmovdqu 832(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm6, %ymm7
|
|
|
+ vmovdqu 864(%r15), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm4
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm4, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm6, %ymm9, %ymm9
|
|
|
+ # 4: 0/3
|
|
|
+ vmovdqu 896(%r15), %ymm10
|
|
|
+ vmovdqu 928(%r15), %ymm12
|
|
|
+ vmovdqu 960(%r15), %ymm11
|
|
|
+ vmovdqu 992(%r15), %ymm13
|
|
|
+ vpunpcklqdq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhqdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpcklqdq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhqdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 2: 0/3
|
|
|
+ vmovdqu 1024(%r15), %ymm10
|
|
|
+ vmovdqu 1056(%r15), %ymm12
|
|
|
+ vmovdqu 1088(%r15), %ymm11
|
|
|
+ vmovdqu 1120(%r15), %ymm13
|
|
|
+ vpsllq $32, %ymm1, %ymm8
|
|
|
+ vpsrlq $32, %ymm0, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm0, %ymm0
|
|
|
+ vpblendd $0x55, %ymm9, %ymm1, %ymm1
|
|
|
+ vpsllq $32, %ymm3, %ymm8
|
|
|
+ vpsrlq $32, %ymm2, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm2, %ymm2
|
|
|
+ vpblendd $0x55, %ymm9, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 2: 0/3
|
|
|
+ vmovdqu 1152(%r15), %ymm10
|
|
|
+ vmovdqu 1184(%r15), %ymm12
|
|
|
+ vmovdqu 1216(%r15), %ymm11
|
|
|
+ vmovdqu 1248(%r15), %ymm13
|
|
|
+ vpsllq $32, %ymm5, %ymm8
|
|
|
+ vpsrlq $32, %ymm4, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm4, %ymm4
|
|
|
+ vpblendd $0x55, %ymm9, %ymm5, %ymm5
|
|
|
+ vpsllq $32, %ymm7, %ymm8
|
|
|
+ vpsrlq $32, %ymm6, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm6, %ymm6
|
|
|
+ vpblendd $0x55, %ymm9, %ymm7, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ vpunpckldq %ymm1, %ymm0, %ymm8
|
|
|
+ vpunpckhdq %ymm1, %ymm0, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm0
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm1
|
|
|
+ vpunpckldq %ymm3, %ymm2, %ymm8
|
|
|
+ vpunpckhdq %ymm3, %ymm2, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm2
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm3
|
|
|
+ vpunpckldq %ymm5, %ymm4, %ymm8
|
|
|
+ vpunpckhdq %ymm5, %ymm4, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm4
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm5
|
|
|
+ vpunpckldq %ymm7, %ymm6, %ymm8
|
|
|
+ vpunpckhdq %ymm7, %ymm6, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm6
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm7
|
|
|
+ vmovdqu %ymm0, (%r14)
|
|
|
+ vmovdqu %ymm1, 32(%r14)
|
|
|
+ vmovdqu %ymm2, 64(%r14)
|
|
|
+ vmovdqu %ymm3, 96(%r14)
|
|
|
+ vmovdqu %ymm4, 128(%r14)
|
|
|
+ vmovdqu %ymm5, 160(%r14)
|
|
|
+ vmovdqu %ymm6, 192(%r14)
|
|
|
+ vmovdqu %ymm7, 224(%r14)
|
|
|
+ vmovdqu 256(%r14), %ymm0
|
|
|
+ vmovdqu 288(%r14), %ymm1
|
|
|
+ vmovdqu 320(%r14), %ymm2
|
|
|
+ vmovdqu 352(%r14), %ymm3
|
|
|
+ vmovdqu 384(%r14), %ymm4
|
|
|
+ vmovdqu 416(%r14), %ymm5
|
|
|
+ vmovdqu 448(%r14), %ymm6
|
|
|
+ vmovdqu 480(%r14), %ymm7
|
|
|
+ # 64: 1/3
|
|
|
+ vmovdqu 1280(%r15), %ymm10
|
|
|
+ vmovdqu 1312(%r15), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ # 32: 1/3
|
|
|
+ vmovdqu 1344(%r15), %ymm10
|
|
|
+ vmovdqu 1376(%r15), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ # 32: 1/3
|
|
|
+ vmovdqu 1408(%r15), %ymm10
|
|
|
+ vmovdqu 1440(%r15), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm5, %ymm5
|
|
|
+ # 16: 1/3
|
|
|
+ vmovdqu 1472(%r15), %ymm10
|
|
|
+ vmovdqu 1504(%r15), %ymm12
|
|
|
+ vmovdqu 1536(%r15), %ymm11
|
|
|
+ vmovdqu 1568(%r15), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 16: 1/3
|
|
|
+ vmovdqu 1600(%r15), %ymm10
|
|
|
+ vmovdqu 1632(%r15), %ymm12
|
|
|
+ vmovdqu 1664(%r15), %ymm11
|
|
|
+ vmovdqu 1696(%r15), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 8: 1/3
|
|
|
+ vperm2i128 $32, %ymm1, %ymm0, %ymm8
|
|
|
+ vmovdqu 1728(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm0, %ymm1
|
|
|
+ vmovdqu 1760(%r15), %ymm12
|
|
|
+ vperm2i128 $32, %ymm3, %ymm2, %ymm9
|
|
|
+ vmovdqu 1792(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm2, %ymm3
|
|
|
+ vmovdqu 1824(%r15), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm0
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm0, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm2, %ymm9, %ymm9
|
|
|
+ # 4: 1/3
|
|
|
+ vmovdqu 1856(%r15), %ymm10
|
|
|
+ vmovdqu 1888(%r15), %ymm12
|
|
|
+ vmovdqu 1920(%r15), %ymm11
|
|
|
+ vmovdqu 1952(%r15), %ymm13
|
|
|
+ vpunpcklqdq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhqdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpcklqdq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhqdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 8: 1/3
|
|
|
+ vperm2i128 $32, %ymm5, %ymm4, %ymm8
|
|
|
+ vmovdqu 1984(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm4, %ymm5
|
|
|
+ vmovdqu 2016(%r15), %ymm12
|
|
|
+ vperm2i128 $32, %ymm7, %ymm6, %ymm9
|
|
|
+ vmovdqu 2048(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm6, %ymm7
|
|
|
+ vmovdqu 2080(%r15), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm4
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm4, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm6, %ymm9, %ymm9
|
|
|
+ # 4: 1/3
|
|
|
+ vmovdqu 2112(%r15), %ymm10
|
|
|
+ vmovdqu 2144(%r15), %ymm12
|
|
|
+ vmovdqu 2176(%r15), %ymm11
|
|
|
+ vmovdqu 2208(%r15), %ymm13
|
|
|
+ vpunpcklqdq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhqdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpcklqdq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhqdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 2: 1/3
|
|
|
+ vmovdqu 2240(%r15), %ymm10
|
|
|
+ vmovdqu 2272(%r15), %ymm12
|
|
|
+ vmovdqu 2304(%r15), %ymm11
|
|
|
+ vmovdqu 2336(%r15), %ymm13
|
|
|
+ vpsllq $32, %ymm1, %ymm8
|
|
|
+ vpsrlq $32, %ymm0, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm0, %ymm0
|
|
|
+ vpblendd $0x55, %ymm9, %ymm1, %ymm1
|
|
|
+ vpsllq $32, %ymm3, %ymm8
|
|
|
+ vpsrlq $32, %ymm2, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm2, %ymm2
|
|
|
+ vpblendd $0x55, %ymm9, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 2: 1/3
|
|
|
+ vmovdqu 2368(%r15), %ymm10
|
|
|
+ vmovdqu 2400(%r15), %ymm12
|
|
|
+ vmovdqu 2432(%r15), %ymm11
|
|
|
+ vmovdqu 2464(%r15), %ymm13
|
|
|
+ vpsllq $32, %ymm5, %ymm8
|
|
|
+ vpsrlq $32, %ymm4, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm4, %ymm4
|
|
|
+ vpblendd $0x55, %ymm9, %ymm5, %ymm5
|
|
|
+ vpsllq $32, %ymm7, %ymm8
|
|
|
+ vpsrlq $32, %ymm6, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm6, %ymm6
|
|
|
+ vpblendd $0x55, %ymm9, %ymm7, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ vpunpckldq %ymm1, %ymm0, %ymm8
|
|
|
+ vpunpckhdq %ymm1, %ymm0, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm0
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm1
|
|
|
+ vpunpckldq %ymm3, %ymm2, %ymm8
|
|
|
+ vpunpckhdq %ymm3, %ymm2, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm2
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm3
|
|
|
+ vpunpckldq %ymm5, %ymm4, %ymm8
|
|
|
+ vpunpckhdq %ymm5, %ymm4, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm4
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm5
|
|
|
+ vpunpckldq %ymm7, %ymm6, %ymm8
|
|
|
+ vpunpckhdq %ymm7, %ymm6, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm6
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm7
|
|
|
+ vmovdqu %ymm0, 256(%r14)
|
|
|
+ vmovdqu %ymm1, 288(%r14)
|
|
|
+ vmovdqu %ymm2, 320(%r14)
|
|
|
+ vmovdqu %ymm3, 352(%r14)
|
|
|
+ vmovdqu %ymm4, 384(%r14)
|
|
|
+ vmovdqu %ymm5, 416(%r14)
|
|
|
+ vmovdqu %ymm6, 448(%r14)
|
|
|
+ vmovdqu %ymm7, 480(%r14)
|
|
|
+ addq $0x200, %r14
|
|
|
+ subq $0x01, %r13
|
|
|
+ jg L_kyber_encapsulate_avx2_trans
|
|
|
+ movq %r11, %r12
|
|
|
+L_kyber_encapsulate_avx2_calc:
|
|
|
+ vmovdqu kyber_qinv(%rip), %ymm12
|
|
|
+ # Pointwise acc mont
|
|
|
+ movq %r11, %r13
|
|
|
+ # Base mul mont
|
|
|
+ leaq L_kyber_avx2_zetas_basemul(%rip), %r15
|
|
|
+ vmovdqu (%rcx), %ymm2
|
|
|
+ vmovdqu 32(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu (%r8), %ymm4
|
|
|
+ vmovdqu 32(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu (%r15), %ymm10
|
|
|
+ vmovdqu 32(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm1, 32(%rsi)
|
|
|
+ vmovdqu 64(%rcx), %ymm2
|
|
|
+ vmovdqu 96(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 64(%r8), %ymm4
|
|
|
+ vmovdqu 96(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 64(%r15), %ymm10
|
|
|
+ vmovdqu 96(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 64(%rsi)
|
|
|
+ vmovdqu %ymm1, 96(%rsi)
|
|
|
+ vmovdqu 128(%rcx), %ymm2
|
|
|
+ vmovdqu 160(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 128(%r8), %ymm4
|
|
|
+ vmovdqu 160(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 128(%r15), %ymm10
|
|
|
+ vmovdqu 160(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 128(%rsi)
|
|
|
+ vmovdqu %ymm1, 160(%rsi)
|
|
|
+ vmovdqu 192(%rcx), %ymm2
|
|
|
+ vmovdqu 224(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 192(%r8), %ymm4
|
|
|
+ vmovdqu 224(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 192(%r15), %ymm10
|
|
|
+ vmovdqu 224(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 192(%rsi)
|
|
|
+ vmovdqu %ymm1, 224(%rsi)
|
|
|
+ vmovdqu 256(%rcx), %ymm2
|
|
|
+ vmovdqu 288(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 256(%r8), %ymm4
|
|
|
+ vmovdqu 288(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 256(%r15), %ymm10
|
|
|
+ vmovdqu 288(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 256(%rsi)
|
|
|
+ vmovdqu %ymm1, 288(%rsi)
|
|
|
+ vmovdqu 320(%rcx), %ymm2
|
|
|
+ vmovdqu 352(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 320(%r8), %ymm4
|
|
|
+ vmovdqu 352(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 320(%r15), %ymm10
|
|
|
+ vmovdqu 352(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 320(%rsi)
|
|
|
+ vmovdqu %ymm1, 352(%rsi)
|
|
|
+ vmovdqu 384(%rcx), %ymm2
|
|
|
+ vmovdqu 416(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 384(%r8), %ymm4
|
|
|
+ vmovdqu 416(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 384(%r15), %ymm10
|
|
|
+ vmovdqu 416(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 384(%rsi)
|
|
|
+ vmovdqu %ymm1, 416(%rsi)
|
|
|
+ vmovdqu 448(%rcx), %ymm2
|
|
|
+ vmovdqu 480(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 448(%r8), %ymm4
|
|
|
+ vmovdqu 480(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 448(%r15), %ymm10
|
|
|
+ vmovdqu 480(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 448(%rsi)
|
|
|
+ vmovdqu %ymm1, 480(%rsi)
|
|
|
+ addq $0x200, %rcx
|
|
|
+ addq $0x200, %r8
|
|
|
+ subq $2, %r13
|
|
|
+ jz L_pointwise_acc_mont_end_encap_bp
|
|
|
+L_pointwise_acc_mont_start_encap_bp:
|
|
|
+ # Base mul mont add
|
|
|
+ leaq L_kyber_avx2_zetas_basemul(%rip), %r15
|
|
|
+ vmovdqu (%rcx), %ymm2
|
|
|
+ vmovdqu 32(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu (%r8), %ymm4
|
|
|
+ vmovdqu 32(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu (%r15), %ymm10
|
|
|
+ vmovdqu 32(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu (%rsi), %ymm6
|
|
|
+ vmovdqu 32(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm1, 32(%rsi)
|
|
|
+ vmovdqu 64(%rcx), %ymm2
|
|
|
+ vmovdqu 96(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 64(%r8), %ymm4
|
|
|
+ vmovdqu 96(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 64(%r15), %ymm10
|
|
|
+ vmovdqu 96(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 64(%rsi), %ymm6
|
|
|
+ vmovdqu 96(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 64(%rsi)
|
|
|
+ vmovdqu %ymm1, 96(%rsi)
|
|
|
+ vmovdqu 128(%rcx), %ymm2
|
|
|
+ vmovdqu 160(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 128(%r8), %ymm4
|
|
|
+ vmovdqu 160(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 128(%r15), %ymm10
|
|
|
+ vmovdqu 160(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 128(%rsi), %ymm6
|
|
|
+ vmovdqu 160(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 128(%rsi)
|
|
|
+ vmovdqu %ymm1, 160(%rsi)
|
|
|
+ vmovdqu 192(%rcx), %ymm2
|
|
|
+ vmovdqu 224(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 192(%r8), %ymm4
|
|
|
+ vmovdqu 224(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 192(%r15), %ymm10
|
|
|
+ vmovdqu 224(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 192(%rsi), %ymm6
|
|
|
+ vmovdqu 224(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 192(%rsi)
|
|
|
+ vmovdqu %ymm1, 224(%rsi)
|
|
|
+ vmovdqu 256(%rcx), %ymm2
|
|
|
+ vmovdqu 288(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 256(%r8), %ymm4
|
|
|
+ vmovdqu 288(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 256(%r15), %ymm10
|
|
|
+ vmovdqu 288(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 256(%rsi), %ymm6
|
|
|
+ vmovdqu 288(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 256(%rsi)
|
|
|
+ vmovdqu %ymm1, 288(%rsi)
|
|
|
+ vmovdqu 320(%rcx), %ymm2
|
|
|
+ vmovdqu 352(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 320(%r8), %ymm4
|
|
|
+ vmovdqu 352(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 320(%r15), %ymm10
|
|
|
+ vmovdqu 352(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 320(%rsi), %ymm6
|
|
|
+ vmovdqu 352(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 320(%rsi)
|
|
|
+ vmovdqu %ymm1, 352(%rsi)
|
|
|
+ vmovdqu 384(%rcx), %ymm2
|
|
|
+ vmovdqu 416(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 384(%r8), %ymm4
|
|
|
+ vmovdqu 416(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 384(%r15), %ymm10
|
|
|
+ vmovdqu 416(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 384(%rsi), %ymm6
|
|
|
+ vmovdqu 416(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 384(%rsi)
|
|
|
+ vmovdqu %ymm1, 416(%rsi)
|
|
|
+ vmovdqu 448(%rcx), %ymm2
|
|
|
+ vmovdqu 480(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 448(%r8), %ymm4
|
|
|
+ vmovdqu 480(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 448(%r15), %ymm10
|
|
|
+ vmovdqu 480(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 448(%rsi), %ymm6
|
|
|
+ vmovdqu 480(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 448(%rsi)
|
|
|
+ vmovdqu %ymm1, 480(%rsi)
|
|
|
+ addq $0x200, %rcx
|
|
|
+ addq $0x200, %r8
|
|
|
+ subq $0x01, %r13
|
|
|
+ jg L_pointwise_acc_mont_start_encap_bp
|
|
|
+L_pointwise_acc_mont_end_encap_bp:
|
|
|
+ # Base mul mont add
|
|
|
+ leaq L_kyber_avx2_zetas_basemul(%rip), %r15
|
|
|
+ vmovdqu (%rcx), %ymm2
|
|
|
+ vmovdqu 32(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu (%r8), %ymm4
|
|
|
+ vmovdqu 32(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu (%r15), %ymm10
|
|
|
+ vmovdqu 32(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu (%rsi), %ymm6
|
|
|
+ vmovdqu 32(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm1, 32(%rsi)
|
|
|
+ vmovdqu 64(%rcx), %ymm2
|
|
|
+ vmovdqu 96(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 64(%r8), %ymm4
|
|
|
+ vmovdqu 96(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 64(%r15), %ymm10
|
|
|
+ vmovdqu 96(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 64(%rsi), %ymm6
|
|
|
+ vmovdqu 96(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 64(%rsi)
|
|
|
+ vmovdqu %ymm1, 96(%rsi)
|
|
|
+ vmovdqu 128(%rcx), %ymm2
|
|
|
+ vmovdqu 160(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 128(%r8), %ymm4
|
|
|
+ vmovdqu 160(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 128(%r15), %ymm10
|
|
|
+ vmovdqu 160(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 128(%rsi), %ymm6
|
|
|
+ vmovdqu 160(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 128(%rsi)
|
|
|
+ vmovdqu %ymm1, 160(%rsi)
|
|
|
+ vmovdqu 192(%rcx), %ymm2
|
|
|
+ vmovdqu 224(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 192(%r8), %ymm4
|
|
|
+ vmovdqu 224(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 192(%r15), %ymm10
|
|
|
+ vmovdqu 224(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 192(%rsi), %ymm6
|
|
|
+ vmovdqu 224(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 192(%rsi)
|
|
|
+ vmovdqu %ymm1, 224(%rsi)
|
|
|
+ vmovdqu 256(%rcx), %ymm2
|
|
|
+ vmovdqu 288(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 256(%r8), %ymm4
|
|
|
+ vmovdqu 288(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 256(%r15), %ymm10
|
|
|
+ vmovdqu 288(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 256(%rsi), %ymm6
|
|
|
+ vmovdqu 288(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 256(%rsi)
|
|
|
+ vmovdqu %ymm1, 288(%rsi)
|
|
|
+ vmovdqu 320(%rcx), %ymm2
|
|
|
+ vmovdqu 352(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 320(%r8), %ymm4
|
|
|
+ vmovdqu 352(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 320(%r15), %ymm10
|
|
|
+ vmovdqu 352(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 320(%rsi), %ymm6
|
|
|
+ vmovdqu 352(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 320(%rsi)
|
|
|
+ vmovdqu %ymm1, 352(%rsi)
|
|
|
+ vmovdqu 384(%rcx), %ymm2
|
|
|
+ vmovdqu 416(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 384(%r8), %ymm4
|
|
|
+ vmovdqu 416(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 384(%r15), %ymm10
|
|
|
+ vmovdqu 416(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 384(%rsi), %ymm6
|
|
|
+ vmovdqu 416(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 384(%rsi)
|
|
|
+ vmovdqu %ymm1, 416(%rsi)
|
|
|
+ vmovdqu 448(%rcx), %ymm2
|
|
|
+ vmovdqu 480(%rcx), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 448(%r8), %ymm4
|
|
|
+ vmovdqu 480(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 448(%r15), %ymm10
|
|
|
+ vmovdqu 480(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 448(%rsi), %ymm6
|
|
|
+ vmovdqu 480(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 448(%rsi)
|
|
|
+ vmovdqu %ymm1, 480(%rsi)
|
|
|
+ addq $0x200, %rcx
|
|
|
+ addq $0x200, %r8
|
|
|
+ movq %r11, %r13
|
|
|
+ shl $9, %r13d
|
|
|
+ subq %r13, %r8
|
|
|
+ # invntt
|
|
|
+ leaq L_kyber_avx2_zetas_inv(%rip), %r15
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu 32(%rsi), %ymm1
|
|
|
+ vmovdqu 64(%rsi), %ymm2
|
|
|
+ vmovdqu 96(%rsi), %ymm3
|
|
|
+ vmovdqu 128(%rsi), %ymm4
|
|
|
+ vmovdqu 160(%rsi), %ymm5
|
|
|
+ vmovdqu 192(%rsi), %ymm6
|
|
|
+ vmovdqu 224(%rsi), %ymm7
|
|
|
+ # 2: 1/2
|
|
|
+ vperm2i128 $32, %ymm1, %ymm0, %ymm8
|
|
|
+ vmovdqu (%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm0, %ymm9
|
|
|
+ vmovdqu 32(%r15), %ymm12
|
|
|
+ vpsllq $32, %ymm9, %ymm0
|
|
|
+ vpsrlq $32, %ymm8, %ymm1
|
|
|
+ vpblendd $0xaa, %ymm0, %ymm8, %ymm0
|
|
|
+ vpblendd $0x55, %ymm1, %ymm9, %ymm1
|
|
|
+ vperm2i128 $32, %ymm3, %ymm2, %ymm8
|
|
|
+ vmovdqu 64(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm2, %ymm9
|
|
|
+ vmovdqu 96(%r15), %ymm13
|
|
|
+ vpsllq $32, %ymm9, %ymm2
|
|
|
+ vpsrlq $32, %ymm8, %ymm3
|
|
|
+ vpblendd $0xaa, %ymm2, %ymm8, %ymm2
|
|
|
+ vpblendd $0x55, %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 4: 1/2
|
|
|
+ vmovdqu 128(%r15), %ymm10
|
|
|
+ vmovdqu 160(%r15), %ymm12
|
|
|
+ vmovdqu 192(%r15), %ymm11
|
|
|
+ vmovdqu 224(%r15), %ymm13
|
|
|
+ vpunpckldq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpckldq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm2
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm8
|
|
|
+ vpsubw %ymm2, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 8: 1/2
|
|
|
+ vmovdqu 256(%r15), %ymm10
|
|
|
+ vmovdqu 288(%r15), %ymm12
|
|
|
+ vmovdqu 320(%r15), %ymm11
|
|
|
+ vmovdqu 352(%r15), %ymm13
|
|
|
+ vpunpcklqdq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhqdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpcklqdq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhqdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 16: 1/2
|
|
|
+ vperm2i128 $32, %ymm1, %ymm8, %ymm0
|
|
|
+ vmovdqu 384(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm8, %ymm1
|
|
|
+ vmovdqu 416(%r15), %ymm12
|
|
|
+ vperm2i128 $32, %ymm3, %ymm9, %ymm2
|
|
|
+ vmovdqu 448(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm9, %ymm3
|
|
|
+ vmovdqu 480(%r15), %ymm13
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm9
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm9, %ymm3
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm11, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm1, %ymm8, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm9, %ymm3
|
|
|
+ # 32: 1/2
|
|
|
+ vmovdqu 512(%r15), %ymm10
|
|
|
+ vmovdqu 544(%r15), %ymm12
|
|
|
+ vpaddw %ymm2, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm1, %ymm9
|
|
|
+ vpsubw %ymm2, %ymm0, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm1, %ymm3
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm9, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm3
|
|
|
+ # 2: 1/2
|
|
|
+ vperm2i128 $32, %ymm5, %ymm4, %ymm8
|
|
|
+ vmovdqu 576(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm4, %ymm9
|
|
|
+ vmovdqu 608(%r15), %ymm12
|
|
|
+ vpsllq $32, %ymm9, %ymm4
|
|
|
+ vpsrlq $32, %ymm8, %ymm5
|
|
|
+ vpblendd $0xaa, %ymm4, %ymm8, %ymm4
|
|
|
+ vpblendd $0x55, %ymm5, %ymm9, %ymm5
|
|
|
+ vperm2i128 $32, %ymm7, %ymm6, %ymm8
|
|
|
+ vmovdqu 640(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm6, %ymm9
|
|
|
+ vmovdqu 672(%r15), %ymm13
|
|
|
+ vpsllq $32, %ymm9, %ymm6
|
|
|
+ vpsrlq $32, %ymm8, %ymm7
|
|
|
+ vpblendd $0xaa, %ymm6, %ymm8, %ymm6
|
|
|
+ vpblendd $0x55, %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 4: 1/2
|
|
|
+ vmovdqu 704(%r15), %ymm10
|
|
|
+ vmovdqu 736(%r15), %ymm12
|
|
|
+ vmovdqu 768(%r15), %ymm11
|
|
|
+ vmovdqu 800(%r15), %ymm13
|
|
|
+ vpunpckldq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpckldq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm4
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm6
|
|
|
+ vpsraw $10, %ymm4, %ymm4
|
|
|
+ vpsraw $10, %ymm6, %ymm6
|
|
|
+ vpmullw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmullw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm8
|
|
|
+ vpsubw %ymm6, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 8: 1/2
|
|
|
+ vmovdqu 832(%r15), %ymm10
|
|
|
+ vmovdqu 864(%r15), %ymm12
|
|
|
+ vmovdqu 896(%r15), %ymm11
|
|
|
+ vmovdqu 928(%r15), %ymm13
|
|
|
+ vpunpcklqdq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhqdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpcklqdq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhqdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 16: 1/2
|
|
|
+ vperm2i128 $32, %ymm5, %ymm8, %ymm4
|
|
|
+ vmovdqu 960(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm8, %ymm5
|
|
|
+ vmovdqu 992(%r15), %ymm12
|
|
|
+ vperm2i128 $32, %ymm7, %ymm9, %ymm6
|
|
|
+ vmovdqu 1024(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm9, %ymm7
|
|
|
+ vmovdqu 1056(%r15), %ymm13
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm9
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm5
|
|
|
+ vpmullw %ymm13, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm11, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm5, %ymm8, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ # 32: 1/2
|
|
|
+ vmovdqu 1088(%r15), %ymm10
|
|
|
+ vmovdqu 1120(%r15), %ymm12
|
|
|
+ vpaddw %ymm6, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm6, %ymm4, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm5, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm4
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm5
|
|
|
+ vpsraw $10, %ymm4, %ymm4
|
|
|
+ vpsraw $10, %ymm5, %ymm5
|
|
|
+ vpmullw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmullw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm7
|
|
|
+ # 64: 1/2
|
|
|
+ vmovdqu 1152(%r15), %ymm10
|
|
|
+ vmovdqu 1184(%r15), %ymm12
|
|
|
+ vpsubw %ymm4, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm5, %ymm1, %ymm9
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm4
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm5
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm3, %ymm9
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm6, %ymm8, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm1, 32(%rsi)
|
|
|
+ vmovdqu %ymm2, 64(%rsi)
|
|
|
+ vmovdqu %ymm3, 96(%rsi)
|
|
|
+ vmovdqu %ymm4, 128(%rsi)
|
|
|
+ vmovdqu %ymm5, 160(%rsi)
|
|
|
+ vmovdqu %ymm6, 192(%rsi)
|
|
|
+ vmovdqu %ymm7, 224(%rsi)
|
|
|
+ vmovdqu 256(%rsi), %ymm0
|
|
|
+ vmovdqu 288(%rsi), %ymm1
|
|
|
+ vmovdqu 320(%rsi), %ymm2
|
|
|
+ vmovdqu 352(%rsi), %ymm3
|
|
|
+ vmovdqu 384(%rsi), %ymm4
|
|
|
+ vmovdqu 416(%rsi), %ymm5
|
|
|
+ vmovdqu 448(%rsi), %ymm6
|
|
|
+ vmovdqu 480(%rsi), %ymm7
|
|
|
+ # 2: 2/2
|
|
|
+ vperm2i128 $32, %ymm1, %ymm0, %ymm8
|
|
|
+ vmovdqu 1216(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm0, %ymm9
|
|
|
+ vmovdqu 1248(%r15), %ymm12
|
|
|
+ vpsllq $32, %ymm9, %ymm0
|
|
|
+ vpsrlq $32, %ymm8, %ymm1
|
|
|
+ vpblendd $0xaa, %ymm0, %ymm8, %ymm0
|
|
|
+ vpblendd $0x55, %ymm1, %ymm9, %ymm1
|
|
|
+ vperm2i128 $32, %ymm3, %ymm2, %ymm8
|
|
|
+ vmovdqu 1280(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm2, %ymm9
|
|
|
+ vmovdqu 1312(%r15), %ymm13
|
|
|
+ vpsllq $32, %ymm9, %ymm2
|
|
|
+ vpsrlq $32, %ymm8, %ymm3
|
|
|
+ vpblendd $0xaa, %ymm2, %ymm8, %ymm2
|
|
|
+ vpblendd $0x55, %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 4: 2/2
|
|
|
+ vmovdqu 1344(%r15), %ymm10
|
|
|
+ vmovdqu 1376(%r15), %ymm12
|
|
|
+ vmovdqu 1408(%r15), %ymm11
|
|
|
+ vmovdqu 1440(%r15), %ymm13
|
|
|
+ vpunpckldq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpckldq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm2
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm8
|
|
|
+ vpsubw %ymm2, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 8: 2/2
|
|
|
+ vmovdqu 1472(%r15), %ymm10
|
|
|
+ vmovdqu 1504(%r15), %ymm12
|
|
|
+ vmovdqu 1536(%r15), %ymm11
|
|
|
+ vmovdqu 1568(%r15), %ymm13
|
|
|
+ vpunpcklqdq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhqdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpcklqdq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhqdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 16: 2/2
|
|
|
+ vperm2i128 $32, %ymm1, %ymm8, %ymm0
|
|
|
+ vmovdqu 1600(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm8, %ymm1
|
|
|
+ vmovdqu 1632(%r15), %ymm12
|
|
|
+ vperm2i128 $32, %ymm3, %ymm9, %ymm2
|
|
|
+ vmovdqu 1664(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm9, %ymm3
|
|
|
+ vmovdqu 1696(%r15), %ymm13
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm9
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm9, %ymm3
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm11, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm1, %ymm8, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm9, %ymm3
|
|
|
+ # 32: 2/2
|
|
|
+ vmovdqu 1728(%r15), %ymm10
|
|
|
+ vmovdqu 1760(%r15), %ymm12
|
|
|
+ vpaddw %ymm2, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm1, %ymm9
|
|
|
+ vpsubw %ymm2, %ymm0, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm1, %ymm3
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm9, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm3
|
|
|
+ # 2: 2/2
|
|
|
+ vperm2i128 $32, %ymm5, %ymm4, %ymm8
|
|
|
+ vmovdqu 1792(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm4, %ymm9
|
|
|
+ vmovdqu 1824(%r15), %ymm12
|
|
|
+ vpsllq $32, %ymm9, %ymm4
|
|
|
+ vpsrlq $32, %ymm8, %ymm5
|
|
|
+ vpblendd $0xaa, %ymm4, %ymm8, %ymm4
|
|
|
+ vpblendd $0x55, %ymm5, %ymm9, %ymm5
|
|
|
+ vperm2i128 $32, %ymm7, %ymm6, %ymm8
|
|
|
+ vmovdqu 1856(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm6, %ymm9
|
|
|
+ vmovdqu 1888(%r15), %ymm13
|
|
|
+ vpsllq $32, %ymm9, %ymm6
|
|
|
+ vpsrlq $32, %ymm8, %ymm7
|
|
|
+ vpblendd $0xaa, %ymm6, %ymm8, %ymm6
|
|
|
+ vpblendd $0x55, %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 4: 2/2
|
|
|
+ vmovdqu 1920(%r15), %ymm10
|
|
|
+ vmovdqu 1952(%r15), %ymm12
|
|
|
+ vmovdqu 1984(%r15), %ymm11
|
|
|
+ vmovdqu 2016(%r15), %ymm13
|
|
|
+ vpunpckldq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpckldq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm4
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm6
|
|
|
+ vpsraw $10, %ymm4, %ymm4
|
|
|
+ vpsraw $10, %ymm6, %ymm6
|
|
|
+ vpmullw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmullw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm8
|
|
|
+ vpsubw %ymm6, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 8: 2/2
|
|
|
+ vmovdqu 2048(%r15), %ymm10
|
|
|
+ vmovdqu 2080(%r15), %ymm12
|
|
|
+ vmovdqu 2112(%r15), %ymm11
|
|
|
+ vmovdqu 2144(%r15), %ymm13
|
|
|
+ vpunpcklqdq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhqdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpcklqdq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhqdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 16: 2/2
|
|
|
+ vperm2i128 $32, %ymm5, %ymm8, %ymm4
|
|
|
+ vmovdqu 2176(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm8, %ymm5
|
|
|
+ vmovdqu 2208(%r15), %ymm12
|
|
|
+ vperm2i128 $32, %ymm7, %ymm9, %ymm6
|
|
|
+ vmovdqu 2240(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm9, %ymm7
|
|
|
+ vmovdqu 2272(%r15), %ymm13
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm9
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm5
|
|
|
+ vpmullw %ymm13, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm11, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm5, %ymm8, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ # 32: 2/2
|
|
|
+ vmovdqu 2304(%r15), %ymm10
|
|
|
+ vmovdqu 2336(%r15), %ymm12
|
|
|
+ vpaddw %ymm6, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm6, %ymm4, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm5, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm4
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm5
|
|
|
+ vpsraw $10, %ymm4, %ymm4
|
|
|
+ vpsraw $10, %ymm5, %ymm5
|
|
|
+ vpmullw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmullw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm7
|
|
|
+ # 64: 2/2
|
|
|
+ vmovdqu 2368(%r15), %ymm10
|
|
|
+ vmovdqu 2400(%r15), %ymm12
|
|
|
+ vpsubw %ymm4, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm5, %ymm1, %ymm9
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm4
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm5
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm3, %ymm9
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm6, %ymm8, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ vmovdqu %ymm0, 256(%rsi)
|
|
|
+ vmovdqu %ymm1, 288(%rsi)
|
|
|
+ vmovdqu %ymm2, 320(%rsi)
|
|
|
+ vmovdqu %ymm3, 352(%rsi)
|
|
|
+ # 128
|
|
|
+ vmovdqu 2432(%r15), %ymm10
|
|
|
+ vmovdqu 2464(%r15), %ymm12
|
|
|
+ vmovdqu 2496(%r15), %ymm11
|
|
|
+ vmovdqu 2528(%r15), %ymm13
|
|
|
+ vmovdqu 128(%rsi), %ymm0
|
|
|
+ vmovdqu 160(%rsi), %ymm1
|
|
|
+ vmovdqu 192(%rsi), %ymm2
|
|
|
+ vmovdqu 224(%rsi), %ymm3
|
|
|
+ vpsubw %ymm4, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm5, %ymm1, %ymm9
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm4
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm5
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm3, %ymm9
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm6, %ymm8, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm11, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm13, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm11, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm5
|
|
|
+ vpmullw %ymm13, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm7
|
|
|
+ vmovdqu %ymm0, 128(%rsi)
|
|
|
+ vmovdqu %ymm1, 160(%rsi)
|
|
|
+ vmovdqu %ymm2, 192(%rsi)
|
|
|
+ vmovdqu %ymm3, 224(%rsi)
|
|
|
+ vmovdqu %ymm4, 384(%rsi)
|
|
|
+ vmovdqu %ymm5, 416(%rsi)
|
|
|
+ vmovdqu %ymm6, 448(%rsi)
|
|
|
+ vmovdqu %ymm7, 480(%rsi)
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu 32(%rsi), %ymm1
|
|
|
+ vmovdqu 64(%rsi), %ymm2
|
|
|
+ vmovdqu 96(%rsi), %ymm3
|
|
|
+ vmovdqu 256(%rsi), %ymm4
|
|
|
+ vmovdqu 288(%rsi), %ymm5
|
|
|
+ vmovdqu 320(%rsi), %ymm6
|
|
|
+ vmovdqu 352(%rsi), %ymm7
|
|
|
+ vpsubw %ymm4, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm5, %ymm1, %ymm9
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm4
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm5
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm3, %ymm9
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm6, %ymm8, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm11, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm13, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm11, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm5
|
|
|
+ vpmullw %ymm13, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm7
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm1, 32(%rsi)
|
|
|
+ vmovdqu %ymm2, 64(%rsi)
|
|
|
+ vmovdqu %ymm3, 96(%rsi)
|
|
|
+ vmovdqu %ymm4, 256(%rsi)
|
|
|
+ vmovdqu %ymm5, 288(%rsi)
|
|
|
+ vmovdqu %ymm6, 320(%rsi)
|
|
|
+ vmovdqu %ymm7, 352(%rsi)
|
|
|
+ # Add Errors
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu 32(%rsi), %ymm1
|
|
|
+ vmovdqu 64(%rsi), %ymm2
|
|
|
+ vmovdqu 96(%rsi), %ymm3
|
|
|
+ vmovdqu (%r9), %ymm4
|
|
|
+ vmovdqu 32(%r9), %ymm5
|
|
|
+ vmovdqu 64(%r9), %ymm6
|
|
|
+ vmovdqu 96(%r9), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm4
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm6
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm1, 32(%rsi)
|
|
|
+ vmovdqu %ymm2, 64(%rsi)
|
|
|
+ vmovdqu %ymm3, 96(%rsi)
|
|
|
+ vmovdqu 128(%rsi), %ymm0
|
|
|
+ vmovdqu 160(%rsi), %ymm1
|
|
|
+ vmovdqu 192(%rsi), %ymm2
|
|
|
+ vmovdqu 224(%rsi), %ymm3
|
|
|
+ vmovdqu 128(%r9), %ymm4
|
|
|
+ vmovdqu 160(%r9), %ymm5
|
|
|
+ vmovdqu 192(%r9), %ymm6
|
|
|
+ vmovdqu 224(%r9), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm4
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm6
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, 128(%rsi)
|
|
|
+ vmovdqu %ymm1, 160(%rsi)
|
|
|
+ vmovdqu %ymm2, 192(%rsi)
|
|
|
+ vmovdqu %ymm3, 224(%rsi)
|
|
|
+ vmovdqu 256(%rsi), %ymm0
|
|
|
+ vmovdqu 288(%rsi), %ymm1
|
|
|
+ vmovdqu 320(%rsi), %ymm2
|
|
|
+ vmovdqu 352(%rsi), %ymm3
|
|
|
+ vmovdqu 256(%r9), %ymm4
|
|
|
+ vmovdqu 288(%r9), %ymm5
|
|
|
+ vmovdqu 320(%r9), %ymm6
|
|
|
+ vmovdqu 352(%r9), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm4
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm6
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, 256(%rsi)
|
|
|
+ vmovdqu %ymm1, 288(%rsi)
|
|
|
+ vmovdqu %ymm2, 320(%rsi)
|
|
|
+ vmovdqu %ymm3, 352(%rsi)
|
|
|
+ vmovdqu 384(%rsi), %ymm0
|
|
|
+ vmovdqu 416(%rsi), %ymm1
|
|
|
+ vmovdqu 448(%rsi), %ymm2
|
|
|
+ vmovdqu 480(%rsi), %ymm3
|
|
|
+ vmovdqu 384(%r9), %ymm4
|
|
|
+ vmovdqu 416(%r9), %ymm5
|
|
|
+ vmovdqu 448(%r9), %ymm6
|
|
|
+ vmovdqu 480(%r9), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm4
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm6
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, 384(%rsi)
|
|
|
+ vmovdqu %ymm1, 416(%rsi)
|
|
|
+ vmovdqu %ymm2, 448(%rsi)
|
|
|
+ vmovdqu %ymm3, 480(%rsi)
|
|
|
+ addq $0x200, %r9
|
|
|
+ addq $0x200, %rsi
|
|
|
+ subq $0x01, %r12
|
|
|
+ jg L_kyber_encapsulate_avx2_calc
|
|
|
+ vmovdqu kyber_qinv(%rip), %ymm12
|
|
|
+ # Pointwise acc mont
|
|
|
+ movq %r11, %r13
|
|
|
+ # Base mul mont
|
|
|
+ leaq L_kyber_avx2_zetas_basemul(%rip), %r15
|
|
|
+ vmovdqu (%rdi), %ymm2
|
|
|
+ vmovdqu 32(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu (%r8), %ymm4
|
|
|
+ vmovdqu 32(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu (%r15), %ymm10
|
|
|
+ vmovdqu 32(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, (%rdx)
|
|
|
+ vmovdqu %ymm1, 32(%rdx)
|
|
|
+ vmovdqu 64(%rdi), %ymm2
|
|
|
+ vmovdqu 96(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 64(%r8), %ymm4
|
|
|
+ vmovdqu 96(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 64(%r15), %ymm10
|
|
|
+ vmovdqu 96(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 64(%rdx)
|
|
|
+ vmovdqu %ymm1, 96(%rdx)
|
|
|
+ vmovdqu 128(%rdi), %ymm2
|
|
|
+ vmovdqu 160(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 128(%r8), %ymm4
|
|
|
+ vmovdqu 160(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 128(%r15), %ymm10
|
|
|
+ vmovdqu 160(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 128(%rdx)
|
|
|
+ vmovdqu %ymm1, 160(%rdx)
|
|
|
+ vmovdqu 192(%rdi), %ymm2
|
|
|
+ vmovdqu 224(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 192(%r8), %ymm4
|
|
|
+ vmovdqu 224(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 192(%r15), %ymm10
|
|
|
+ vmovdqu 224(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 192(%rdx)
|
|
|
+ vmovdqu %ymm1, 224(%rdx)
|
|
|
+ vmovdqu 256(%rdi), %ymm2
|
|
|
+ vmovdqu 288(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 256(%r8), %ymm4
|
|
|
+ vmovdqu 288(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 256(%r15), %ymm10
|
|
|
+ vmovdqu 288(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 256(%rdx)
|
|
|
+ vmovdqu %ymm1, 288(%rdx)
|
|
|
+ vmovdqu 320(%rdi), %ymm2
|
|
|
+ vmovdqu 352(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 320(%r8), %ymm4
|
|
|
+ vmovdqu 352(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 320(%r15), %ymm10
|
|
|
+ vmovdqu 352(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 320(%rdx)
|
|
|
+ vmovdqu %ymm1, 352(%rdx)
|
|
|
+ vmovdqu 384(%rdi), %ymm2
|
|
|
+ vmovdqu 416(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 384(%r8), %ymm4
|
|
|
+ vmovdqu 416(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 384(%r15), %ymm10
|
|
|
+ vmovdqu 416(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 384(%rdx)
|
|
|
+ vmovdqu %ymm1, 416(%rdx)
|
|
|
+ vmovdqu 448(%rdi), %ymm2
|
|
|
+ vmovdqu 480(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 448(%r8), %ymm4
|
|
|
+ vmovdqu 480(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 448(%r15), %ymm10
|
|
|
+ vmovdqu 480(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 448(%rdx)
|
|
|
+ vmovdqu %ymm1, 480(%rdx)
|
|
|
+ addq $0x200, %rdi
|
|
|
+ addq $0x200, %r8
|
|
|
+ subq $2, %r13
|
|
|
+ jz L_pointwise_acc_mont_end_encap_v
|
|
|
+L_pointwise_acc_mont_start_encap_v:
|
|
|
+ # Base mul mont add
|
|
|
+ leaq L_kyber_avx2_zetas_basemul(%rip), %r15
|
|
|
+ vmovdqu (%rdi), %ymm2
|
|
|
+ vmovdqu 32(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu (%r8), %ymm4
|
|
|
+ vmovdqu 32(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu (%r15), %ymm10
|
|
|
+ vmovdqu 32(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu (%rdx), %ymm6
|
|
|
+ vmovdqu 32(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, (%rdx)
|
|
|
+ vmovdqu %ymm1, 32(%rdx)
|
|
|
+ vmovdqu 64(%rdi), %ymm2
|
|
|
+ vmovdqu 96(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 64(%r8), %ymm4
|
|
|
+ vmovdqu 96(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 64(%r15), %ymm10
|
|
|
+ vmovdqu 96(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 64(%rdx), %ymm6
|
|
|
+ vmovdqu 96(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 64(%rdx)
|
|
|
+ vmovdqu %ymm1, 96(%rdx)
|
|
|
+ vmovdqu 128(%rdi), %ymm2
|
|
|
+ vmovdqu 160(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 128(%r8), %ymm4
|
|
|
+ vmovdqu 160(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 128(%r15), %ymm10
|
|
|
+ vmovdqu 160(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 128(%rdx), %ymm6
|
|
|
+ vmovdqu 160(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 128(%rdx)
|
|
|
+ vmovdqu %ymm1, 160(%rdx)
|
|
|
+ vmovdqu 192(%rdi), %ymm2
|
|
|
+ vmovdqu 224(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 192(%r8), %ymm4
|
|
|
+ vmovdqu 224(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 192(%r15), %ymm10
|
|
|
+ vmovdqu 224(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 192(%rdx), %ymm6
|
|
|
+ vmovdqu 224(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 192(%rdx)
|
|
|
+ vmovdqu %ymm1, 224(%rdx)
|
|
|
+ vmovdqu 256(%rdi), %ymm2
|
|
|
+ vmovdqu 288(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 256(%r8), %ymm4
|
|
|
+ vmovdqu 288(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 256(%r15), %ymm10
|
|
|
+ vmovdqu 288(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 256(%rdx), %ymm6
|
|
|
+ vmovdqu 288(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 256(%rdx)
|
|
|
+ vmovdqu %ymm1, 288(%rdx)
|
|
|
+ vmovdqu 320(%rdi), %ymm2
|
|
|
+ vmovdqu 352(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 320(%r8), %ymm4
|
|
|
+ vmovdqu 352(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 320(%r15), %ymm10
|
|
|
+ vmovdqu 352(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 320(%rdx), %ymm6
|
|
|
+ vmovdqu 352(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 320(%rdx)
|
|
|
+ vmovdqu %ymm1, 352(%rdx)
|
|
|
+ vmovdqu 384(%rdi), %ymm2
|
|
|
+ vmovdqu 416(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 384(%r8), %ymm4
|
|
|
+ vmovdqu 416(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 384(%r15), %ymm10
|
|
|
+ vmovdqu 416(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 384(%rdx), %ymm6
|
|
|
+ vmovdqu 416(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 384(%rdx)
|
|
|
+ vmovdqu %ymm1, 416(%rdx)
|
|
|
+ vmovdqu 448(%rdi), %ymm2
|
|
|
+ vmovdqu 480(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 448(%r8), %ymm4
|
|
|
+ vmovdqu 480(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 448(%r15), %ymm10
|
|
|
+ vmovdqu 480(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 448(%rdx), %ymm6
|
|
|
+ vmovdqu 480(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 448(%rdx)
|
|
|
+ vmovdqu %ymm1, 480(%rdx)
|
|
|
+ addq $0x200, %rdi
|
|
|
+ addq $0x200, %r8
|
|
|
+ subq $0x01, %r13
|
|
|
+ jg L_pointwise_acc_mont_start_encap_v
|
|
|
+L_pointwise_acc_mont_end_encap_v:
|
|
|
+ # Base mul mont add
|
|
|
+ leaq L_kyber_avx2_zetas_basemul(%rip), %r15
|
|
|
+ vmovdqu (%rdi), %ymm2
|
|
|
+ vmovdqu 32(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu (%r8), %ymm4
|
|
|
+ vmovdqu 32(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu (%r15), %ymm10
|
|
|
+ vmovdqu 32(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu (%rdx), %ymm6
|
|
|
+ vmovdqu 32(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, (%rdx)
|
|
|
+ vmovdqu %ymm1, 32(%rdx)
|
|
|
+ vmovdqu 64(%rdi), %ymm2
|
|
|
+ vmovdqu 96(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 64(%r8), %ymm4
|
|
|
+ vmovdqu 96(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 64(%r15), %ymm10
|
|
|
+ vmovdqu 96(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 64(%rdx), %ymm6
|
|
|
+ vmovdqu 96(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 64(%rdx)
|
|
|
+ vmovdqu %ymm1, 96(%rdx)
|
|
|
+ vmovdqu 128(%rdi), %ymm2
|
|
|
+ vmovdqu 160(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 128(%r8), %ymm4
|
|
|
+ vmovdqu 160(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 128(%r15), %ymm10
|
|
|
+ vmovdqu 160(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 128(%rdx), %ymm6
|
|
|
+ vmovdqu 160(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 128(%rdx)
|
|
|
+ vmovdqu %ymm1, 160(%rdx)
|
|
|
+ vmovdqu 192(%rdi), %ymm2
|
|
|
+ vmovdqu 224(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 192(%r8), %ymm4
|
|
|
+ vmovdqu 224(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 192(%r15), %ymm10
|
|
|
+ vmovdqu 224(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 192(%rdx), %ymm6
|
|
|
+ vmovdqu 224(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 192(%rdx)
|
|
|
+ vmovdqu %ymm1, 224(%rdx)
|
|
|
+ vmovdqu 256(%rdi), %ymm2
|
|
|
+ vmovdqu 288(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 256(%r8), %ymm4
|
|
|
+ vmovdqu 288(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 256(%r15), %ymm10
|
|
|
+ vmovdqu 288(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 256(%rdx), %ymm6
|
|
|
+ vmovdqu 288(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 256(%rdx)
|
|
|
+ vmovdqu %ymm1, 288(%rdx)
|
|
|
+ vmovdqu 320(%rdi), %ymm2
|
|
|
+ vmovdqu 352(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 320(%r8), %ymm4
|
|
|
+ vmovdqu 352(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 320(%r15), %ymm10
|
|
|
+ vmovdqu 352(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 320(%rdx), %ymm6
|
|
|
+ vmovdqu 352(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 320(%rdx)
|
|
|
+ vmovdqu %ymm1, 352(%rdx)
|
|
|
+ vmovdqu 384(%rdi), %ymm2
|
|
|
+ vmovdqu 416(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 384(%r8), %ymm4
|
|
|
+ vmovdqu 416(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 384(%r15), %ymm10
|
|
|
+ vmovdqu 416(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 384(%rdx), %ymm6
|
|
|
+ vmovdqu 416(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 384(%rdx)
|
|
|
+ vmovdqu %ymm1, 416(%rdx)
|
|
|
+ vmovdqu 448(%rdi), %ymm2
|
|
|
+ vmovdqu 480(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 448(%r8), %ymm4
|
|
|
+ vmovdqu 480(%r8), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 448(%r15), %ymm10
|
|
|
+ vmovdqu 480(%r15), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 448(%rdx), %ymm6
|
|
|
+ vmovdqu 480(%rdx), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 448(%rdx)
|
|
|
+ vmovdqu %ymm1, 480(%rdx)
|
|
|
+ addq $0x200, %rdi
|
|
|
+ addq $0x200, %r8
|
|
|
+ movq %r11, %r13
|
|
|
+ shl $9, %r13d
|
|
|
+ subq %r13, %r8
|
|
|
+ # invntt
|
|
|
+ leaq L_kyber_avx2_zetas_inv(%rip), %r15
|
|
|
+ vmovdqu (%rdx), %ymm0
|
|
|
+ vmovdqu 32(%rdx), %ymm1
|
|
|
+ vmovdqu 64(%rdx), %ymm2
|
|
|
+ vmovdqu 96(%rdx), %ymm3
|
|
|
+ vmovdqu 128(%rdx), %ymm4
|
|
|
+ vmovdqu 160(%rdx), %ymm5
|
|
|
+ vmovdqu 192(%rdx), %ymm6
|
|
|
+ vmovdqu 224(%rdx), %ymm7
|
|
|
+ # 2: 1/2
|
|
|
+ vperm2i128 $32, %ymm1, %ymm0, %ymm8
|
|
|
+ vmovdqu (%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm0, %ymm9
|
|
|
+ vmovdqu 32(%r15), %ymm12
|
|
|
+ vpsllq $32, %ymm9, %ymm0
|
|
|
+ vpsrlq $32, %ymm8, %ymm1
|
|
|
+ vpblendd $0xaa, %ymm0, %ymm8, %ymm0
|
|
|
+ vpblendd $0x55, %ymm1, %ymm9, %ymm1
|
|
|
+ vperm2i128 $32, %ymm3, %ymm2, %ymm8
|
|
|
+ vmovdqu 64(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm2, %ymm9
|
|
|
+ vmovdqu 96(%r15), %ymm13
|
|
|
+ vpsllq $32, %ymm9, %ymm2
|
|
|
+ vpsrlq $32, %ymm8, %ymm3
|
|
|
+ vpblendd $0xaa, %ymm2, %ymm8, %ymm2
|
|
|
+ vpblendd $0x55, %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 4: 1/2
|
|
|
+ vmovdqu 128(%r15), %ymm10
|
|
|
+ vmovdqu 160(%r15), %ymm12
|
|
|
+ vmovdqu 192(%r15), %ymm11
|
|
|
+ vmovdqu 224(%r15), %ymm13
|
|
|
+ vpunpckldq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpckldq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm2
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm8
|
|
|
+ vpsubw %ymm2, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 8: 1/2
|
|
|
+ vmovdqu 256(%r15), %ymm10
|
|
|
+ vmovdqu 288(%r15), %ymm12
|
|
|
+ vmovdqu 320(%r15), %ymm11
|
|
|
+ vmovdqu 352(%r15), %ymm13
|
|
|
+ vpunpcklqdq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhqdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpcklqdq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhqdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 16: 1/2
|
|
|
+ vperm2i128 $32, %ymm1, %ymm8, %ymm0
|
|
|
+ vmovdqu 384(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm8, %ymm1
|
|
|
+ vmovdqu 416(%r15), %ymm12
|
|
|
+ vperm2i128 $32, %ymm3, %ymm9, %ymm2
|
|
|
+ vmovdqu 448(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm9, %ymm3
|
|
|
+ vmovdqu 480(%r15), %ymm13
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm9
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm9, %ymm3
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm11, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm1, %ymm8, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm9, %ymm3
|
|
|
+ # 32: 1/2
|
|
|
+ vmovdqu 512(%r15), %ymm10
|
|
|
+ vmovdqu 544(%r15), %ymm12
|
|
|
+ vpaddw %ymm2, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm1, %ymm9
|
|
|
+ vpsubw %ymm2, %ymm0, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm1, %ymm3
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm9, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm3
|
|
|
+ # 2: 1/2
|
|
|
+ vperm2i128 $32, %ymm5, %ymm4, %ymm8
|
|
|
+ vmovdqu 576(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm4, %ymm9
|
|
|
+ vmovdqu 608(%r15), %ymm12
|
|
|
+ vpsllq $32, %ymm9, %ymm4
|
|
|
+ vpsrlq $32, %ymm8, %ymm5
|
|
|
+ vpblendd $0xaa, %ymm4, %ymm8, %ymm4
|
|
|
+ vpblendd $0x55, %ymm5, %ymm9, %ymm5
|
|
|
+ vperm2i128 $32, %ymm7, %ymm6, %ymm8
|
|
|
+ vmovdqu 640(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm6, %ymm9
|
|
|
+ vmovdqu 672(%r15), %ymm13
|
|
|
+ vpsllq $32, %ymm9, %ymm6
|
|
|
+ vpsrlq $32, %ymm8, %ymm7
|
|
|
+ vpblendd $0xaa, %ymm6, %ymm8, %ymm6
|
|
|
+ vpblendd $0x55, %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 4: 1/2
|
|
|
+ vmovdqu 704(%r15), %ymm10
|
|
|
+ vmovdqu 736(%r15), %ymm12
|
|
|
+ vmovdqu 768(%r15), %ymm11
|
|
|
+ vmovdqu 800(%r15), %ymm13
|
|
|
+ vpunpckldq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpckldq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm4
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm6
|
|
|
+ vpsraw $10, %ymm4, %ymm4
|
|
|
+ vpsraw $10, %ymm6, %ymm6
|
|
|
+ vpmullw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmullw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm8
|
|
|
+ vpsubw %ymm6, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 8: 1/2
|
|
|
+ vmovdqu 832(%r15), %ymm10
|
|
|
+ vmovdqu 864(%r15), %ymm12
|
|
|
+ vmovdqu 896(%r15), %ymm11
|
|
|
+ vmovdqu 928(%r15), %ymm13
|
|
|
+ vpunpcklqdq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhqdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpcklqdq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhqdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 16: 1/2
|
|
|
+ vperm2i128 $32, %ymm5, %ymm8, %ymm4
|
|
|
+ vmovdqu 960(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm8, %ymm5
|
|
|
+ vmovdqu 992(%r15), %ymm12
|
|
|
+ vperm2i128 $32, %ymm7, %ymm9, %ymm6
|
|
|
+ vmovdqu 1024(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm9, %ymm7
|
|
|
+ vmovdqu 1056(%r15), %ymm13
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm9
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm5
|
|
|
+ vpmullw %ymm13, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm11, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm5, %ymm8, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ # 32: 1/2
|
|
|
+ vmovdqu 1088(%r15), %ymm10
|
|
|
+ vmovdqu 1120(%r15), %ymm12
|
|
|
+ vpaddw %ymm6, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm6, %ymm4, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm5, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm4
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm5
|
|
|
+ vpsraw $10, %ymm4, %ymm4
|
|
|
+ vpsraw $10, %ymm5, %ymm5
|
|
|
+ vpmullw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmullw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm7
|
|
|
+ # 64: 1/2
|
|
|
+ vmovdqu 1152(%r15), %ymm10
|
|
|
+ vmovdqu 1184(%r15), %ymm12
|
|
|
+ vpsubw %ymm4, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm5, %ymm1, %ymm9
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm4
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm5
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm3, %ymm9
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm6, %ymm8, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ vmovdqu %ymm0, (%rdx)
|
|
|
+ vmovdqu %ymm1, 32(%rdx)
|
|
|
+ vmovdqu %ymm2, 64(%rdx)
|
|
|
+ vmovdqu %ymm3, 96(%rdx)
|
|
|
+ vmovdqu %ymm4, 128(%rdx)
|
|
|
+ vmovdqu %ymm5, 160(%rdx)
|
|
|
+ vmovdqu %ymm6, 192(%rdx)
|
|
|
+ vmovdqu %ymm7, 224(%rdx)
|
|
|
+ vmovdqu 256(%rdx), %ymm0
|
|
|
+ vmovdqu 288(%rdx), %ymm1
|
|
|
+ vmovdqu 320(%rdx), %ymm2
|
|
|
+ vmovdqu 352(%rdx), %ymm3
|
|
|
+ vmovdqu 384(%rdx), %ymm4
|
|
|
+ vmovdqu 416(%rdx), %ymm5
|
|
|
+ vmovdqu 448(%rdx), %ymm6
|
|
|
+ vmovdqu 480(%rdx), %ymm7
|
|
|
+ # 2: 2/2
|
|
|
+ vperm2i128 $32, %ymm1, %ymm0, %ymm8
|
|
|
+ vmovdqu 1216(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm0, %ymm9
|
|
|
+ vmovdqu 1248(%r15), %ymm12
|
|
|
+ vpsllq $32, %ymm9, %ymm0
|
|
|
+ vpsrlq $32, %ymm8, %ymm1
|
|
|
+ vpblendd $0xaa, %ymm0, %ymm8, %ymm0
|
|
|
+ vpblendd $0x55, %ymm1, %ymm9, %ymm1
|
|
|
+ vperm2i128 $32, %ymm3, %ymm2, %ymm8
|
|
|
+ vmovdqu 1280(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm2, %ymm9
|
|
|
+ vmovdqu 1312(%r15), %ymm13
|
|
|
+ vpsllq $32, %ymm9, %ymm2
|
|
|
+ vpsrlq $32, %ymm8, %ymm3
|
|
|
+ vpblendd $0xaa, %ymm2, %ymm8, %ymm2
|
|
|
+ vpblendd $0x55, %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 4: 2/2
|
|
|
+ vmovdqu 1344(%r15), %ymm10
|
|
|
+ vmovdqu 1376(%r15), %ymm12
|
|
|
+ vmovdqu 1408(%r15), %ymm11
|
|
|
+ vmovdqu 1440(%r15), %ymm13
|
|
|
+ vpunpckldq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpckldq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm2
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm8
|
|
|
+ vpsubw %ymm2, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 8: 2/2
|
|
|
+ vmovdqu 1472(%r15), %ymm10
|
|
|
+ vmovdqu 1504(%r15), %ymm12
|
|
|
+ vmovdqu 1536(%r15), %ymm11
|
|
|
+ vmovdqu 1568(%r15), %ymm13
|
|
|
+ vpunpcklqdq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhqdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpcklqdq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhqdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 16: 2/2
|
|
|
+ vperm2i128 $32, %ymm1, %ymm8, %ymm0
|
|
|
+ vmovdqu 1600(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm8, %ymm1
|
|
|
+ vmovdqu 1632(%r15), %ymm12
|
|
|
+ vperm2i128 $32, %ymm3, %ymm9, %ymm2
|
|
|
+ vmovdqu 1664(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm9, %ymm3
|
|
|
+ vmovdqu 1696(%r15), %ymm13
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm9
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm9, %ymm3
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm11, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm1, %ymm8, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm9, %ymm3
|
|
|
+ # 32: 2/2
|
|
|
+ vmovdqu 1728(%r15), %ymm10
|
|
|
+ vmovdqu 1760(%r15), %ymm12
|
|
|
+ vpaddw %ymm2, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm1, %ymm9
|
|
|
+ vpsubw %ymm2, %ymm0, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm1, %ymm3
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm9, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm3
|
|
|
+ # 2: 2/2
|
|
|
+ vperm2i128 $32, %ymm5, %ymm4, %ymm8
|
|
|
+ vmovdqu 1792(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm4, %ymm9
|
|
|
+ vmovdqu 1824(%r15), %ymm12
|
|
|
+ vpsllq $32, %ymm9, %ymm4
|
|
|
+ vpsrlq $32, %ymm8, %ymm5
|
|
|
+ vpblendd $0xaa, %ymm4, %ymm8, %ymm4
|
|
|
+ vpblendd $0x55, %ymm5, %ymm9, %ymm5
|
|
|
+ vperm2i128 $32, %ymm7, %ymm6, %ymm8
|
|
|
+ vmovdqu 1856(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm6, %ymm9
|
|
|
+ vmovdqu 1888(%r15), %ymm13
|
|
|
+ vpsllq $32, %ymm9, %ymm6
|
|
|
+ vpsrlq $32, %ymm8, %ymm7
|
|
|
+ vpblendd $0xaa, %ymm6, %ymm8, %ymm6
|
|
|
+ vpblendd $0x55, %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 4: 2/2
|
|
|
+ vmovdqu 1920(%r15), %ymm10
|
|
|
+ vmovdqu 1952(%r15), %ymm12
|
|
|
+ vmovdqu 1984(%r15), %ymm11
|
|
|
+ vmovdqu 2016(%r15), %ymm13
|
|
|
+ vpunpckldq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpckldq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm4
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm6
|
|
|
+ vpsraw $10, %ymm4, %ymm4
|
|
|
+ vpsraw $10, %ymm6, %ymm6
|
|
|
+ vpmullw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmullw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm8
|
|
|
+ vpsubw %ymm6, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 8: 2/2
|
|
|
+ vmovdqu 2048(%r15), %ymm10
|
|
|
+ vmovdqu 2080(%r15), %ymm12
|
|
|
+ vmovdqu 2112(%r15), %ymm11
|
|
|
+ vmovdqu 2144(%r15), %ymm13
|
|
|
+ vpunpcklqdq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhqdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpcklqdq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhqdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 16: 2/2
|
|
|
+ vperm2i128 $32, %ymm5, %ymm8, %ymm4
|
|
|
+ vmovdqu 2176(%r15), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm8, %ymm5
|
|
|
+ vmovdqu 2208(%r15), %ymm12
|
|
|
+ vperm2i128 $32, %ymm7, %ymm9, %ymm6
|
|
|
+ vmovdqu 2240(%r15), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm9, %ymm7
|
|
|
+ vmovdqu 2272(%r15), %ymm13
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm9
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm5
|
|
|
+ vpmullw %ymm13, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm11, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm5, %ymm8, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ # 32: 2/2
|
|
|
+ vmovdqu 2304(%r15), %ymm10
|
|
|
+ vmovdqu 2336(%r15), %ymm12
|
|
|
+ vpaddw %ymm6, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm6, %ymm4, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm5, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm4
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm5
|
|
|
+ vpsraw $10, %ymm4, %ymm4
|
|
|
+ vpsraw $10, %ymm5, %ymm5
|
|
|
+ vpmullw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmullw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm7
|
|
|
+ # 64: 2/2
|
|
|
+ vmovdqu 2368(%r15), %ymm10
|
|
|
+ vmovdqu 2400(%r15), %ymm12
|
|
|
+ vpsubw %ymm4, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm5, %ymm1, %ymm9
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm4
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm5
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm3, %ymm9
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm6, %ymm8, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ vmovdqu %ymm0, 256(%rdx)
|
|
|
+ vmovdqu %ymm1, 288(%rdx)
|
|
|
+ vmovdqu %ymm2, 320(%rdx)
|
|
|
+ vmovdqu %ymm3, 352(%rdx)
|
|
|
+ # 128
|
|
|
+ vmovdqu 2432(%r15), %ymm10
|
|
|
+ vmovdqu 2464(%r15), %ymm12
|
|
|
+ vmovdqu 2496(%r15), %ymm11
|
|
|
+ vmovdqu 2528(%r15), %ymm13
|
|
|
+ vmovdqu 128(%rdx), %ymm0
|
|
|
+ vmovdqu 160(%rdx), %ymm1
|
|
|
+ vmovdqu 192(%rdx), %ymm2
|
|
|
+ vmovdqu 224(%rdx), %ymm3
|
|
|
+ vpsubw %ymm4, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm5, %ymm1, %ymm9
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm4
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm5
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm3, %ymm9
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm6, %ymm8, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm11, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm13, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm11, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm5
|
|
|
+ vpmullw %ymm13, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm7
|
|
|
+ vmovdqu %ymm0, 128(%rdx)
|
|
|
+ vmovdqu %ymm1, 160(%rdx)
|
|
|
+ vmovdqu %ymm2, 192(%rdx)
|
|
|
+ vmovdqu %ymm3, 224(%rdx)
|
|
|
+ vmovdqu %ymm4, 384(%rdx)
|
|
|
+ vmovdqu %ymm5, 416(%rdx)
|
|
|
+ vmovdqu %ymm6, 448(%rdx)
|
|
|
+ vmovdqu %ymm7, 480(%rdx)
|
|
|
+ vmovdqu (%rdx), %ymm0
|
|
|
+ vmovdqu 32(%rdx), %ymm1
|
|
|
+ vmovdqu 64(%rdx), %ymm2
|
|
|
+ vmovdqu 96(%rdx), %ymm3
|
|
|
+ vmovdqu 256(%rdx), %ymm4
|
|
|
+ vmovdqu 288(%rdx), %ymm5
|
|
|
+ vmovdqu 320(%rdx), %ymm6
|
|
|
+ vmovdqu 352(%rdx), %ymm7
|
|
|
+ vpsubw %ymm4, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm5, %ymm1, %ymm9
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm4
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm5
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm3, %ymm9
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm6, %ymm8, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm11, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm13, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm11, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm5
|
|
|
+ vpmullw %ymm13, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm7
|
|
|
+ vmovdqu %ymm0, (%rdx)
|
|
|
+ vmovdqu %ymm1, 32(%rdx)
|
|
|
+ vmovdqu %ymm2, 64(%rdx)
|
|
|
+ vmovdqu %ymm3, 96(%rdx)
|
|
|
+ vmovdqu %ymm4, 256(%rdx)
|
|
|
+ vmovdqu %ymm5, 288(%rdx)
|
|
|
+ vmovdqu %ymm6, 320(%rdx)
|
|
|
+ vmovdqu %ymm7, 352(%rdx)
|
|
|
+ # Add Errors
|
|
|
+ vmovdqu (%rdx), %ymm0
|
|
|
+ vmovdqu 32(%rdx), %ymm1
|
|
|
+ vmovdqu 64(%rdx), %ymm2
|
|
|
+ vmovdqu 96(%rdx), %ymm3
|
|
|
+ vmovdqu (%rax), %ymm4
|
|
|
+ vmovdqu 32(%rax), %ymm5
|
|
|
+ vmovdqu 64(%rax), %ymm6
|
|
|
+ vmovdqu 96(%rax), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, (%rdx)
|
|
|
+ vmovdqu %ymm1, 32(%rdx)
|
|
|
+ vmovdqu %ymm2, 64(%rdx)
|
|
|
+ vmovdqu %ymm3, 96(%rdx)
|
|
|
+ vmovdqu 128(%rdx), %ymm0
|
|
|
+ vmovdqu 160(%rdx), %ymm1
|
|
|
+ vmovdqu 192(%rdx), %ymm2
|
|
|
+ vmovdqu 224(%rdx), %ymm3
|
|
|
+ vmovdqu 128(%rax), %ymm4
|
|
|
+ vmovdqu 160(%rax), %ymm5
|
|
|
+ vmovdqu 192(%rax), %ymm6
|
|
|
+ vmovdqu 224(%rax), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 128(%rdx)
|
|
|
+ vmovdqu %ymm1, 160(%rdx)
|
|
|
+ vmovdqu %ymm2, 192(%rdx)
|
|
|
+ vmovdqu %ymm3, 224(%rdx)
|
|
|
+ vmovdqu 256(%rdx), %ymm0
|
|
|
+ vmovdqu 288(%rdx), %ymm1
|
|
|
+ vmovdqu 320(%rdx), %ymm2
|
|
|
+ vmovdqu 352(%rdx), %ymm3
|
|
|
+ vmovdqu 256(%rax), %ymm4
|
|
|
+ vmovdqu 288(%rax), %ymm5
|
|
|
+ vmovdqu 320(%rax), %ymm6
|
|
|
+ vmovdqu 352(%rax), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 256(%rdx)
|
|
|
+ vmovdqu %ymm1, 288(%rdx)
|
|
|
+ vmovdqu %ymm2, 320(%rdx)
|
|
|
+ vmovdqu %ymm3, 352(%rdx)
|
|
|
+ vmovdqu 384(%rdx), %ymm0
|
|
|
+ vmovdqu 416(%rdx), %ymm1
|
|
|
+ vmovdqu 448(%rdx), %ymm2
|
|
|
+ vmovdqu 480(%rdx), %ymm3
|
|
|
+ vmovdqu 384(%rax), %ymm4
|
|
|
+ vmovdqu 416(%rax), %ymm5
|
|
|
+ vmovdqu 448(%rax), %ymm6
|
|
|
+ vmovdqu 480(%rax), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 384(%rdx)
|
|
|
+ vmovdqu %ymm1, 416(%rdx)
|
|
|
+ vmovdqu %ymm2, 448(%rdx)
|
|
|
+ vmovdqu %ymm3, 480(%rdx)
|
|
|
+ # Add Errors
|
|
|
+ vmovdqu (%rdx), %ymm0
|
|
|
+ vmovdqu 32(%rdx), %ymm1
|
|
|
+ vmovdqu 64(%rdx), %ymm2
|
|
|
+ vmovdqu 96(%rdx), %ymm3
|
|
|
+ vmovdqu (%r10), %ymm4
|
|
|
+ vmovdqu 32(%r10), %ymm5
|
|
|
+ vmovdqu 64(%r10), %ymm6
|
|
|
+ vmovdqu 96(%r10), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm4
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm6
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, (%rdx)
|
|
|
+ vmovdqu %ymm1, 32(%rdx)
|
|
|
+ vmovdqu %ymm2, 64(%rdx)
|
|
|
+ vmovdqu %ymm3, 96(%rdx)
|
|
|
+ vmovdqu 128(%rdx), %ymm0
|
|
|
+ vmovdqu 160(%rdx), %ymm1
|
|
|
+ vmovdqu 192(%rdx), %ymm2
|
|
|
+ vmovdqu 224(%rdx), %ymm3
|
|
|
+ vmovdqu 128(%r10), %ymm4
|
|
|
+ vmovdqu 160(%r10), %ymm5
|
|
|
+ vmovdqu 192(%r10), %ymm6
|
|
|
+ vmovdqu 224(%r10), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm4
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm6
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, 128(%rdx)
|
|
|
+ vmovdqu %ymm1, 160(%rdx)
|
|
|
+ vmovdqu %ymm2, 192(%rdx)
|
|
|
+ vmovdqu %ymm3, 224(%rdx)
|
|
|
+ vmovdqu 256(%rdx), %ymm0
|
|
|
+ vmovdqu 288(%rdx), %ymm1
|
|
|
+ vmovdqu 320(%rdx), %ymm2
|
|
|
+ vmovdqu 352(%rdx), %ymm3
|
|
|
+ vmovdqu 256(%r10), %ymm4
|
|
|
+ vmovdqu 288(%r10), %ymm5
|
|
|
+ vmovdqu 320(%r10), %ymm6
|
|
|
+ vmovdqu 352(%r10), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm4
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm6
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, 256(%rdx)
|
|
|
+ vmovdqu %ymm1, 288(%rdx)
|
|
|
+ vmovdqu %ymm2, 320(%rdx)
|
|
|
+ vmovdqu %ymm3, 352(%rdx)
|
|
|
+ vmovdqu 384(%rdx), %ymm0
|
|
|
+ vmovdqu 416(%rdx), %ymm1
|
|
|
+ vmovdqu 448(%rdx), %ymm2
|
|
|
+ vmovdqu 480(%rdx), %ymm3
|
|
|
+ vmovdqu 384(%r10), %ymm4
|
|
|
+ vmovdqu 416(%r10), %ymm5
|
|
|
+ vmovdqu 448(%r10), %ymm6
|
|
|
+ vmovdqu 480(%r10), %ymm7
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm4
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm6
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, 384(%rdx)
|
|
|
+ vmovdqu %ymm1, 416(%rdx)
|
|
|
+ vmovdqu %ymm2, 448(%rdx)
|
|
|
+ vmovdqu %ymm3, 480(%rdx)
|
|
|
+ vzeroupper
|
|
|
+ addq $48, %rsp
|
|
|
+ popq %r15
|
|
|
+ popq %r14
|
|
|
+ popq %r13
|
|
|
+ popq %r12
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_encapsulate_avx2,.-kyber_encapsulate_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_decapsulate_avx2
|
|
|
+.type kyber_decapsulate_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_decapsulate_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_decapsulate_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_decapsulate_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu kyber_q(%rip), %ymm14
|
|
|
+ vmovdqu kyber_v(%rip), %ymm15
|
|
|
+ movq %r8, %rax
|
|
|
+ movq %rdx, %r9
|
|
|
+L_kyber_decapsulate_avx2_trans:
|
|
|
+ # ntt
|
|
|
+ leaq L_kyber_avx2_zetas(%rip), %r10
|
|
|
+ vmovdqu (%r10), %ymm10
|
|
|
+ vmovdqu 32(%r10), %ymm12
|
|
|
+ vmovdqu 128(%r9), %ymm0
|
|
|
+ vmovdqu 160(%r9), %ymm1
|
|
|
+ vmovdqu 192(%r9), %ymm2
|
|
|
+ vmovdqu 224(%r9), %ymm3
|
|
|
+ vmovdqu 384(%r9), %ymm4
|
|
|
+ vmovdqu 416(%r9), %ymm5
|
|
|
+ vmovdqu 448(%r9), %ymm6
|
|
|
+ vmovdqu 480(%r9), %ymm7
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 128(%r9)
|
|
|
+ vmovdqu %ymm1, 160(%r9)
|
|
|
+ vmovdqu %ymm2, 192(%r9)
|
|
|
+ vmovdqu %ymm3, 224(%r9)
|
|
|
+ vmovdqu %ymm4, 384(%r9)
|
|
|
+ vmovdqu %ymm5, 416(%r9)
|
|
|
+ vmovdqu %ymm6, 448(%r9)
|
|
|
+ vmovdqu %ymm7, 480(%r9)
|
|
|
+ vmovdqu (%r9), %ymm0
|
|
|
+ vmovdqu 32(%r9), %ymm1
|
|
|
+ vmovdqu 64(%r9), %ymm2
|
|
|
+ vmovdqu 96(%r9), %ymm3
|
|
|
+ vmovdqu 256(%r9), %ymm4
|
|
|
+ vmovdqu 288(%r9), %ymm5
|
|
|
+ vmovdqu 320(%r9), %ymm6
|
|
|
+ vmovdqu 352(%r9), %ymm7
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm4, 256(%r9)
|
|
|
+ vmovdqu %ymm5, 288(%r9)
|
|
|
+ vmovdqu %ymm6, 320(%r9)
|
|
|
+ vmovdqu %ymm7, 352(%r9)
|
|
|
+ vmovdqu 128(%r9), %ymm4
|
|
|
+ vmovdqu 160(%r9), %ymm5
|
|
|
+ vmovdqu 192(%r9), %ymm6
|
|
|
+ vmovdqu 224(%r9), %ymm7
|
|
|
+ # 64: 0/3
|
|
|
+ vmovdqu 64(%r10), %ymm10
|
|
|
+ vmovdqu 96(%r10), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ # 32: 0/3
|
|
|
+ vmovdqu 128(%r10), %ymm10
|
|
|
+ vmovdqu 160(%r10), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ # 32: 0/3
|
|
|
+ vmovdqu 192(%r10), %ymm10
|
|
|
+ vmovdqu 224(%r10), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm5, %ymm5
|
|
|
+ # 16: 0/3
|
|
|
+ vmovdqu 256(%r10), %ymm10
|
|
|
+ vmovdqu 288(%r10), %ymm12
|
|
|
+ vmovdqu 320(%r10), %ymm11
|
|
|
+ vmovdqu 352(%r10), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 16: 0/3
|
|
|
+ vmovdqu 384(%r10), %ymm10
|
|
|
+ vmovdqu 416(%r10), %ymm12
|
|
|
+ vmovdqu 448(%r10), %ymm11
|
|
|
+ vmovdqu 480(%r10), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 8: 0/3
|
|
|
+ vperm2i128 $32, %ymm1, %ymm0, %ymm8
|
|
|
+ vmovdqu 512(%r10), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm0, %ymm1
|
|
|
+ vmovdqu 544(%r10), %ymm12
|
|
|
+ vperm2i128 $32, %ymm3, %ymm2, %ymm9
|
|
|
+ vmovdqu 576(%r10), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm2, %ymm3
|
|
|
+ vmovdqu 608(%r10), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm0
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm0, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm2, %ymm9, %ymm9
|
|
|
+ # 4: 0/3
|
|
|
+ vmovdqu 640(%r10), %ymm10
|
|
|
+ vmovdqu 672(%r10), %ymm12
|
|
|
+ vmovdqu 704(%r10), %ymm11
|
|
|
+ vmovdqu 736(%r10), %ymm13
|
|
|
+ vpunpcklqdq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhqdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpcklqdq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhqdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 8: 0/3
|
|
|
+ vperm2i128 $32, %ymm5, %ymm4, %ymm8
|
|
|
+ vmovdqu 768(%r10), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm4, %ymm5
|
|
|
+ vmovdqu 800(%r10), %ymm12
|
|
|
+ vperm2i128 $32, %ymm7, %ymm6, %ymm9
|
|
|
+ vmovdqu 832(%r10), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm6, %ymm7
|
|
|
+ vmovdqu 864(%r10), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm4
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm4, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm6, %ymm9, %ymm9
|
|
|
+ # 4: 0/3
|
|
|
+ vmovdqu 896(%r10), %ymm10
|
|
|
+ vmovdqu 928(%r10), %ymm12
|
|
|
+ vmovdqu 960(%r10), %ymm11
|
|
|
+ vmovdqu 992(%r10), %ymm13
|
|
|
+ vpunpcklqdq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhqdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpcklqdq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhqdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 2: 0/3
|
|
|
+ vmovdqu 1024(%r10), %ymm10
|
|
|
+ vmovdqu 1056(%r10), %ymm12
|
|
|
+ vmovdqu 1088(%r10), %ymm11
|
|
|
+ vmovdqu 1120(%r10), %ymm13
|
|
|
+ vpsllq $32, %ymm1, %ymm8
|
|
|
+ vpsrlq $32, %ymm0, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm0, %ymm0
|
|
|
+ vpblendd $0x55, %ymm9, %ymm1, %ymm1
|
|
|
+ vpsllq $32, %ymm3, %ymm8
|
|
|
+ vpsrlq $32, %ymm2, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm2, %ymm2
|
|
|
+ vpblendd $0x55, %ymm9, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 2: 0/3
|
|
|
+ vmovdqu 1152(%r10), %ymm10
|
|
|
+ vmovdqu 1184(%r10), %ymm12
|
|
|
+ vmovdqu 1216(%r10), %ymm11
|
|
|
+ vmovdqu 1248(%r10), %ymm13
|
|
|
+ vpsllq $32, %ymm5, %ymm8
|
|
|
+ vpsrlq $32, %ymm4, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm4, %ymm4
|
|
|
+ vpblendd $0x55, %ymm9, %ymm5, %ymm5
|
|
|
+ vpsllq $32, %ymm7, %ymm8
|
|
|
+ vpsrlq $32, %ymm6, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm6, %ymm6
|
|
|
+ vpblendd $0x55, %ymm9, %ymm7, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ vpunpckldq %ymm1, %ymm0, %ymm8
|
|
|
+ vpunpckhdq %ymm1, %ymm0, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm0
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm1
|
|
|
+ vpunpckldq %ymm3, %ymm2, %ymm8
|
|
|
+ vpunpckhdq %ymm3, %ymm2, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm2
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm3
|
|
|
+ vpunpckldq %ymm5, %ymm4, %ymm8
|
|
|
+ vpunpckhdq %ymm5, %ymm4, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm4
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm5
|
|
|
+ vpunpckldq %ymm7, %ymm6, %ymm8
|
|
|
+ vpunpckhdq %ymm7, %ymm6, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm6
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm0, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm1, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm9
|
|
|
+ vmovdqu %ymm8, (%r9)
|
|
|
+ vmovdqu %ymm9, 32(%r9)
|
|
|
+ vpmulhw %ymm15, %ymm2, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm3, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vmovdqu %ymm8, 64(%r9)
|
|
|
+ vmovdqu %ymm9, 96(%r9)
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vmovdqu %ymm8, 128(%r9)
|
|
|
+ vmovdqu %ymm9, 160(%r9)
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vmovdqu %ymm8, 192(%r9)
|
|
|
+ vmovdqu %ymm9, 224(%r9)
|
|
|
+ vmovdqu 256(%r9), %ymm0
|
|
|
+ vmovdqu 288(%r9), %ymm1
|
|
|
+ vmovdqu 320(%r9), %ymm2
|
|
|
+ vmovdqu 352(%r9), %ymm3
|
|
|
+ vmovdqu 384(%r9), %ymm4
|
|
|
+ vmovdqu 416(%r9), %ymm5
|
|
|
+ vmovdqu 448(%r9), %ymm6
|
|
|
+ vmovdqu 480(%r9), %ymm7
|
|
|
+ # 64: 1/3
|
|
|
+ vmovdqu 1280(%r10), %ymm10
|
|
|
+ vmovdqu 1312(%r10), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm5
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ # 32: 1/3
|
|
|
+ vmovdqu 1344(%r10), %ymm10
|
|
|
+ vmovdqu 1376(%r10), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ # 32: 1/3
|
|
|
+ vmovdqu 1408(%r10), %ymm10
|
|
|
+ vmovdqu 1440(%r10), %ymm12
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm5, %ymm5
|
|
|
+ # 16: 1/3
|
|
|
+ vmovdqu 1472(%r10), %ymm10
|
|
|
+ vmovdqu 1504(%r10), %ymm12
|
|
|
+ vmovdqu 1536(%r10), %ymm11
|
|
|
+ vmovdqu 1568(%r10), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 16: 1/3
|
|
|
+ vmovdqu 1600(%r10), %ymm10
|
|
|
+ vmovdqu 1632(%r10), %ymm12
|
|
|
+ vmovdqu 1664(%r10), %ymm11
|
|
|
+ vmovdqu 1696(%r10), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 8: 1/3
|
|
|
+ vperm2i128 $32, %ymm1, %ymm0, %ymm8
|
|
|
+ vmovdqu 1728(%r10), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm0, %ymm1
|
|
|
+ vmovdqu 1760(%r10), %ymm12
|
|
|
+ vperm2i128 $32, %ymm3, %ymm2, %ymm9
|
|
|
+ vmovdqu 1792(%r10), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm2, %ymm3
|
|
|
+ vmovdqu 1824(%r10), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm0
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm0, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm2, %ymm9, %ymm9
|
|
|
+ # 4: 1/3
|
|
|
+ vmovdqu 1856(%r10), %ymm10
|
|
|
+ vmovdqu 1888(%r10), %ymm12
|
|
|
+ vmovdqu 1920(%r10), %ymm11
|
|
|
+ vmovdqu 1952(%r10), %ymm13
|
|
|
+ vpunpcklqdq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhqdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpcklqdq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhqdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 8: 1/3
|
|
|
+ vperm2i128 $32, %ymm5, %ymm4, %ymm8
|
|
|
+ vmovdqu 1984(%r10), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm4, %ymm5
|
|
|
+ vmovdqu 2016(%r10), %ymm12
|
|
|
+ vperm2i128 $32, %ymm7, %ymm6, %ymm9
|
|
|
+ vmovdqu 2048(%r10), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm6, %ymm7
|
|
|
+ vmovdqu 2080(%r10), %ymm13
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm4
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm4, %ymm8, %ymm8
|
|
|
+ vpaddw %ymm6, %ymm9, %ymm9
|
|
|
+ # 4: 1/3
|
|
|
+ vmovdqu 2112(%r10), %ymm10
|
|
|
+ vmovdqu 2144(%r10), %ymm12
|
|
|
+ vmovdqu 2176(%r10), %ymm11
|
|
|
+ vmovdqu 2208(%r10), %ymm13
|
|
|
+ vpunpcklqdq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhqdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpcklqdq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhqdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ # 2: 1/3
|
|
|
+ vmovdqu 2240(%r10), %ymm10
|
|
|
+ vmovdqu 2272(%r10), %ymm12
|
|
|
+ vmovdqu 2304(%r10), %ymm11
|
|
|
+ vmovdqu 2336(%r10), %ymm13
|
|
|
+ vpsllq $32, %ymm1, %ymm8
|
|
|
+ vpsrlq $32, %ymm0, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm0, %ymm0
|
|
|
+ vpblendd $0x55, %ymm9, %ymm1, %ymm1
|
|
|
+ vpsllq $32, %ymm3, %ymm8
|
|
|
+ vpsrlq $32, %ymm2, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm2, %ymm2
|
|
|
+ vpblendd $0x55, %ymm9, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm1, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm2, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ # 2: 1/3
|
|
|
+ vmovdqu 2368(%r10), %ymm10
|
|
|
+ vmovdqu 2400(%r10), %ymm12
|
|
|
+ vmovdqu 2432(%r10), %ymm11
|
|
|
+ vmovdqu 2464(%r10), %ymm13
|
|
|
+ vpsllq $32, %ymm5, %ymm8
|
|
|
+ vpsrlq $32, %ymm4, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm4, %ymm4
|
|
|
+ vpblendd $0x55, %ymm9, %ymm5, %ymm5
|
|
|
+ vpsllq $32, %ymm7, %ymm8
|
|
|
+ vpsrlq $32, %ymm6, %ymm9
|
|
|
+ vpblendd $0xaa, %ymm8, %ymm6, %ymm6
|
|
|
+ vpblendd $0x55, %ymm9, %ymm7, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm5, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm9, %ymm6, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm6, %ymm6
|
|
|
+ vpunpckldq %ymm1, %ymm0, %ymm8
|
|
|
+ vpunpckhdq %ymm1, %ymm0, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm0
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm1
|
|
|
+ vpunpckldq %ymm3, %ymm2, %ymm8
|
|
|
+ vpunpckhdq %ymm3, %ymm2, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm2
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm3
|
|
|
+ vpunpckldq %ymm5, %ymm4, %ymm8
|
|
|
+ vpunpckhdq %ymm5, %ymm4, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm4
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm5
|
|
|
+ vpunpckldq %ymm7, %ymm6, %ymm8
|
|
|
+ vpunpckhdq %ymm7, %ymm6, %ymm9
|
|
|
+ vperm2i128 $32, %ymm9, %ymm8, %ymm6
|
|
|
+ vperm2i128 $49, %ymm9, %ymm8, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm0, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm1, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm9
|
|
|
+ vmovdqu %ymm8, 256(%r9)
|
|
|
+ vmovdqu %ymm9, 288(%r9)
|
|
|
+ vpmulhw %ymm15, %ymm2, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm3, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm9
|
|
|
+ vmovdqu %ymm8, 320(%r9)
|
|
|
+ vmovdqu %ymm9, 352(%r9)
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm9
|
|
|
+ vmovdqu %ymm8, 384(%r9)
|
|
|
+ vmovdqu %ymm9, 416(%r9)
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm8
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm9
|
|
|
+ vpsraw $10, %ymm8, %ymm8
|
|
|
+ vpsraw $10, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmullw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm8
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm9
|
|
|
+ vmovdqu %ymm8, 448(%r9)
|
|
|
+ vmovdqu %ymm9, 480(%r9)
|
|
|
+ addq $0x200, %r9
|
|
|
+ subq $0x01, %rax
|
|
|
+ jg L_kyber_decapsulate_avx2_trans
|
|
|
+ vmovdqu kyber_qinv(%rip), %ymm12
|
|
|
+ # Pointwise acc mont
|
|
|
+ movq %r8, %rax
|
|
|
+ # Base mul mont
|
|
|
+ leaq L_kyber_avx2_zetas_basemul(%rip), %r10
|
|
|
+ vmovdqu (%rdi), %ymm2
|
|
|
+ vmovdqu 32(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu (%rdx), %ymm4
|
|
|
+ vmovdqu 32(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu (%r10), %ymm10
|
|
|
+ vmovdqu 32(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm1, 32(%rsi)
|
|
|
+ vmovdqu 64(%rdi), %ymm2
|
|
|
+ vmovdqu 96(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 64(%rdx), %ymm4
|
|
|
+ vmovdqu 96(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 64(%r10), %ymm10
|
|
|
+ vmovdqu 96(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 64(%rsi)
|
|
|
+ vmovdqu %ymm1, 96(%rsi)
|
|
|
+ vmovdqu 128(%rdi), %ymm2
|
|
|
+ vmovdqu 160(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 128(%rdx), %ymm4
|
|
|
+ vmovdqu 160(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 128(%r10), %ymm10
|
|
|
+ vmovdqu 160(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 128(%rsi)
|
|
|
+ vmovdqu %ymm1, 160(%rsi)
|
|
|
+ vmovdqu 192(%rdi), %ymm2
|
|
|
+ vmovdqu 224(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 192(%rdx), %ymm4
|
|
|
+ vmovdqu 224(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 192(%r10), %ymm10
|
|
|
+ vmovdqu 224(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 192(%rsi)
|
|
|
+ vmovdqu %ymm1, 224(%rsi)
|
|
|
+ vmovdqu 256(%rdi), %ymm2
|
|
|
+ vmovdqu 288(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 256(%rdx), %ymm4
|
|
|
+ vmovdqu 288(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 256(%r10), %ymm10
|
|
|
+ vmovdqu 288(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 256(%rsi)
|
|
|
+ vmovdqu %ymm1, 288(%rsi)
|
|
|
+ vmovdqu 320(%rdi), %ymm2
|
|
|
+ vmovdqu 352(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 320(%rdx), %ymm4
|
|
|
+ vmovdqu 352(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 320(%r10), %ymm10
|
|
|
+ vmovdqu 352(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 320(%rsi)
|
|
|
+ vmovdqu %ymm1, 352(%rsi)
|
|
|
+ vmovdqu 384(%rdi), %ymm2
|
|
|
+ vmovdqu 416(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 384(%rdx), %ymm4
|
|
|
+ vmovdqu 416(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 384(%r10), %ymm10
|
|
|
+ vmovdqu 416(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 384(%rsi)
|
|
|
+ vmovdqu %ymm1, 416(%rsi)
|
|
|
+ vmovdqu 448(%rdi), %ymm2
|
|
|
+ vmovdqu 480(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 448(%rdx), %ymm4
|
|
|
+ vmovdqu 480(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 448(%r10), %ymm10
|
|
|
+ vmovdqu 480(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 448(%rsi)
|
|
|
+ vmovdqu %ymm1, 480(%rsi)
|
|
|
+ addq $0x200, %rdi
|
|
|
+ addq $0x200, %rdx
|
|
|
+ subq $2, %rax
|
|
|
+ jz L_pointwise_acc_mont_end_decap
|
|
|
+L_pointwise_acc_mont_start_decap:
|
|
|
+ # Base mul mont add
|
|
|
+ leaq L_kyber_avx2_zetas_basemul(%rip), %r10
|
|
|
+ vmovdqu (%rdi), %ymm2
|
|
|
+ vmovdqu 32(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu (%rdx), %ymm4
|
|
|
+ vmovdqu 32(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu (%r10), %ymm10
|
|
|
+ vmovdqu 32(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu (%rsi), %ymm6
|
|
|
+ vmovdqu 32(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm1, 32(%rsi)
|
|
|
+ vmovdqu 64(%rdi), %ymm2
|
|
|
+ vmovdqu 96(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 64(%rdx), %ymm4
|
|
|
+ vmovdqu 96(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 64(%r10), %ymm10
|
|
|
+ vmovdqu 96(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 64(%rsi), %ymm6
|
|
|
+ vmovdqu 96(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 64(%rsi)
|
|
|
+ vmovdqu %ymm1, 96(%rsi)
|
|
|
+ vmovdqu 128(%rdi), %ymm2
|
|
|
+ vmovdqu 160(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 128(%rdx), %ymm4
|
|
|
+ vmovdqu 160(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 128(%r10), %ymm10
|
|
|
+ vmovdqu 160(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 128(%rsi), %ymm6
|
|
|
+ vmovdqu 160(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 128(%rsi)
|
|
|
+ vmovdqu %ymm1, 160(%rsi)
|
|
|
+ vmovdqu 192(%rdi), %ymm2
|
|
|
+ vmovdqu 224(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 192(%rdx), %ymm4
|
|
|
+ vmovdqu 224(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 192(%r10), %ymm10
|
|
|
+ vmovdqu 224(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 192(%rsi), %ymm6
|
|
|
+ vmovdqu 224(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 192(%rsi)
|
|
|
+ vmovdqu %ymm1, 224(%rsi)
|
|
|
+ vmovdqu 256(%rdi), %ymm2
|
|
|
+ vmovdqu 288(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 256(%rdx), %ymm4
|
|
|
+ vmovdqu 288(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 256(%r10), %ymm10
|
|
|
+ vmovdqu 288(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 256(%rsi), %ymm6
|
|
|
+ vmovdqu 288(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 256(%rsi)
|
|
|
+ vmovdqu %ymm1, 288(%rsi)
|
|
|
+ vmovdqu 320(%rdi), %ymm2
|
|
|
+ vmovdqu 352(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 320(%rdx), %ymm4
|
|
|
+ vmovdqu 352(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 320(%r10), %ymm10
|
|
|
+ vmovdqu 352(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 320(%rsi), %ymm6
|
|
|
+ vmovdqu 352(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 320(%rsi)
|
|
|
+ vmovdqu %ymm1, 352(%rsi)
|
|
|
+ vmovdqu 384(%rdi), %ymm2
|
|
|
+ vmovdqu 416(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 384(%rdx), %ymm4
|
|
|
+ vmovdqu 416(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 384(%r10), %ymm10
|
|
|
+ vmovdqu 416(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 384(%rsi), %ymm6
|
|
|
+ vmovdqu 416(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 384(%rsi)
|
|
|
+ vmovdqu %ymm1, 416(%rsi)
|
|
|
+ vmovdqu 448(%rdi), %ymm2
|
|
|
+ vmovdqu 480(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 448(%rdx), %ymm4
|
|
|
+ vmovdqu 480(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 448(%r10), %ymm10
|
|
|
+ vmovdqu 480(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 448(%rsi), %ymm6
|
|
|
+ vmovdqu 480(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 448(%rsi)
|
|
|
+ vmovdqu %ymm1, 480(%rsi)
|
|
|
+ addq $0x200, %rdi
|
|
|
+ addq $0x200, %rdx
|
|
|
+ subq $0x01, %rax
|
|
|
+ jg L_pointwise_acc_mont_start_decap
|
|
|
+L_pointwise_acc_mont_end_decap:
|
|
|
+ # Base mul mont add
|
|
|
+ leaq L_kyber_avx2_zetas_basemul(%rip), %r10
|
|
|
+ vmovdqu (%rdi), %ymm2
|
|
|
+ vmovdqu 32(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu (%rdx), %ymm4
|
|
|
+ vmovdqu 32(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu (%r10), %ymm10
|
|
|
+ vmovdqu 32(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu (%rsi), %ymm6
|
|
|
+ vmovdqu 32(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm1, 32(%rsi)
|
|
|
+ vmovdqu 64(%rdi), %ymm2
|
|
|
+ vmovdqu 96(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 64(%rdx), %ymm4
|
|
|
+ vmovdqu 96(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 64(%r10), %ymm10
|
|
|
+ vmovdqu 96(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 64(%rsi), %ymm6
|
|
|
+ vmovdqu 96(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 64(%rsi)
|
|
|
+ vmovdqu %ymm1, 96(%rsi)
|
|
|
+ vmovdqu 128(%rdi), %ymm2
|
|
|
+ vmovdqu 160(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 128(%rdx), %ymm4
|
|
|
+ vmovdqu 160(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 128(%r10), %ymm10
|
|
|
+ vmovdqu 160(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 128(%rsi), %ymm6
|
|
|
+ vmovdqu 160(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 128(%rsi)
|
|
|
+ vmovdqu %ymm1, 160(%rsi)
|
|
|
+ vmovdqu 192(%rdi), %ymm2
|
|
|
+ vmovdqu 224(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 192(%rdx), %ymm4
|
|
|
+ vmovdqu 224(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 192(%r10), %ymm10
|
|
|
+ vmovdqu 224(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 192(%rsi), %ymm6
|
|
|
+ vmovdqu 224(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 192(%rsi)
|
|
|
+ vmovdqu %ymm1, 224(%rsi)
|
|
|
+ vmovdqu 256(%rdi), %ymm2
|
|
|
+ vmovdqu 288(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 256(%rdx), %ymm4
|
|
|
+ vmovdqu 288(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 256(%r10), %ymm10
|
|
|
+ vmovdqu 288(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 256(%rsi), %ymm6
|
|
|
+ vmovdqu 288(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 256(%rsi)
|
|
|
+ vmovdqu %ymm1, 288(%rsi)
|
|
|
+ vmovdqu 320(%rdi), %ymm2
|
|
|
+ vmovdqu 352(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 320(%rdx), %ymm4
|
|
|
+ vmovdqu 352(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 320(%r10), %ymm10
|
|
|
+ vmovdqu 352(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 320(%rsi), %ymm6
|
|
|
+ vmovdqu 352(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 320(%rsi)
|
|
|
+ vmovdqu %ymm1, 352(%rsi)
|
|
|
+ vmovdqu 384(%rdi), %ymm2
|
|
|
+ vmovdqu 416(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 384(%rdx), %ymm4
|
|
|
+ vmovdqu 416(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 384(%r10), %ymm10
|
|
|
+ vmovdqu 416(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 384(%rsi), %ymm6
|
|
|
+ vmovdqu 416(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 384(%rsi)
|
|
|
+ vmovdqu %ymm1, 416(%rsi)
|
|
|
+ vmovdqu 448(%rdi), %ymm2
|
|
|
+ vmovdqu 480(%rdi), %ymm3
|
|
|
+ vpslld $16, %ymm3, %ymm6
|
|
|
+ vpsrld $16, %ymm2, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm2, %ymm2
|
|
|
+ vpblendw $0x55, %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu 448(%rdx), %ymm4
|
|
|
+ vmovdqu 480(%rdx), %ymm5
|
|
|
+ vpslld $16, %ymm5, %ymm6
|
|
|
+ vpsrld $16, %ymm4, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm4, %ymm4
|
|
|
+ vpblendw $0x55, %ymm7, %ymm5, %ymm5
|
|
|
+ vmovdqu 448(%r10), %ymm10
|
|
|
+ vmovdqu 480(%r10), %ymm11
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm0
|
|
|
+ vpmulhw %ymm5, %ymm3, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm4, %ymm2, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm1
|
|
|
+ vpmullw %ymm11, %ymm0, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm0, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm0
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm1
|
|
|
+ vpmulhw %ymm5, %ymm2, %ymm6
|
|
|
+ vpmullw %ymm4, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm4, %ymm3, %ymm7
|
|
|
+ # Mont Reduce
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm1
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm2
|
|
|
+ vpaddw %ymm2, %ymm1, %ymm1
|
|
|
+ vmovdqu 448(%rsi), %ymm6
|
|
|
+ vmovdqu 480(%rsi), %ymm7
|
|
|
+ vpaddw %ymm6, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm7, %ymm1, %ymm1
|
|
|
+ vpslld $16, %ymm1, %ymm6
|
|
|
+ vpsrld $16, %ymm0, %ymm7
|
|
|
+ vpblendw $0xaa, %ymm6, %ymm0, %ymm0
|
|
|
+ vpblendw $0x55, %ymm7, %ymm1, %ymm1
|
|
|
+ vmovdqu %ymm0, 448(%rsi)
|
|
|
+ vmovdqu %ymm1, 480(%rsi)
|
|
|
+ addq $0x200, %rdi
|
|
|
+ addq $0x200, %rdx
|
|
|
+ movq %r8, %rax
|
|
|
+ shl $9, %eax
|
|
|
+ subq %rax, %rdx
|
|
|
+ # invntt
|
|
|
+ leaq L_kyber_avx2_zetas_inv(%rip), %r10
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu 32(%rsi), %ymm1
|
|
|
+ vmovdqu 64(%rsi), %ymm2
|
|
|
+ vmovdqu 96(%rsi), %ymm3
|
|
|
+ vmovdqu 128(%rsi), %ymm4
|
|
|
+ vmovdqu 160(%rsi), %ymm5
|
|
|
+ vmovdqu 192(%rsi), %ymm6
|
|
|
+ vmovdqu 224(%rsi), %ymm7
|
|
|
+ # 2: 1/2
|
|
|
+ vperm2i128 $32, %ymm1, %ymm0, %ymm8
|
|
|
+ vmovdqu (%r10), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm0, %ymm9
|
|
|
+ vmovdqu 32(%r10), %ymm12
|
|
|
+ vpsllq $32, %ymm9, %ymm0
|
|
|
+ vpsrlq $32, %ymm8, %ymm1
|
|
|
+ vpblendd $0xaa, %ymm0, %ymm8, %ymm0
|
|
|
+ vpblendd $0x55, %ymm1, %ymm9, %ymm1
|
|
|
+ vperm2i128 $32, %ymm3, %ymm2, %ymm8
|
|
|
+ vmovdqu 64(%r10), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm2, %ymm9
|
|
|
+ vmovdqu 96(%r10), %ymm13
|
|
|
+ vpsllq $32, %ymm9, %ymm2
|
|
|
+ vpsrlq $32, %ymm8, %ymm3
|
|
|
+ vpblendd $0xaa, %ymm2, %ymm8, %ymm2
|
|
|
+ vpblendd $0x55, %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 4: 1/2
|
|
|
+ vmovdqu 128(%r10), %ymm10
|
|
|
+ vmovdqu 160(%r10), %ymm12
|
|
|
+ vmovdqu 192(%r10), %ymm11
|
|
|
+ vmovdqu 224(%r10), %ymm13
|
|
|
+ vpunpckldq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpckldq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm2
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm8
|
|
|
+ vpsubw %ymm2, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 8: 1/2
|
|
|
+ vmovdqu 256(%r10), %ymm10
|
|
|
+ vmovdqu 288(%r10), %ymm12
|
|
|
+ vmovdqu 320(%r10), %ymm11
|
|
|
+ vmovdqu 352(%r10), %ymm13
|
|
|
+ vpunpcklqdq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhqdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpcklqdq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhqdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 16: 1/2
|
|
|
+ vperm2i128 $32, %ymm1, %ymm8, %ymm0
|
|
|
+ vmovdqu 384(%r10), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm8, %ymm1
|
|
|
+ vmovdqu 416(%r10), %ymm12
|
|
|
+ vperm2i128 $32, %ymm3, %ymm9, %ymm2
|
|
|
+ vmovdqu 448(%r10), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm9, %ymm3
|
|
|
+ vmovdqu 480(%r10), %ymm13
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm9
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm9, %ymm3
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm11, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm1, %ymm8, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm9, %ymm3
|
|
|
+ # 32: 1/2
|
|
|
+ vmovdqu 512(%r10), %ymm10
|
|
|
+ vmovdqu 544(%r10), %ymm12
|
|
|
+ vpaddw %ymm2, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm1, %ymm9
|
|
|
+ vpsubw %ymm2, %ymm0, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm1, %ymm3
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm9, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm3
|
|
|
+ # 2: 1/2
|
|
|
+ vperm2i128 $32, %ymm5, %ymm4, %ymm8
|
|
|
+ vmovdqu 576(%r10), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm4, %ymm9
|
|
|
+ vmovdqu 608(%r10), %ymm12
|
|
|
+ vpsllq $32, %ymm9, %ymm4
|
|
|
+ vpsrlq $32, %ymm8, %ymm5
|
|
|
+ vpblendd $0xaa, %ymm4, %ymm8, %ymm4
|
|
|
+ vpblendd $0x55, %ymm5, %ymm9, %ymm5
|
|
|
+ vperm2i128 $32, %ymm7, %ymm6, %ymm8
|
|
|
+ vmovdqu 640(%r10), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm6, %ymm9
|
|
|
+ vmovdqu 672(%r10), %ymm13
|
|
|
+ vpsllq $32, %ymm9, %ymm6
|
|
|
+ vpsrlq $32, %ymm8, %ymm7
|
|
|
+ vpblendd $0xaa, %ymm6, %ymm8, %ymm6
|
|
|
+ vpblendd $0x55, %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 4: 1/2
|
|
|
+ vmovdqu 704(%r10), %ymm10
|
|
|
+ vmovdqu 736(%r10), %ymm12
|
|
|
+ vmovdqu 768(%r10), %ymm11
|
|
|
+ vmovdqu 800(%r10), %ymm13
|
|
|
+ vpunpckldq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpckldq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm4
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm6
|
|
|
+ vpsraw $10, %ymm4, %ymm4
|
|
|
+ vpsraw $10, %ymm6, %ymm6
|
|
|
+ vpmullw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmullw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm8
|
|
|
+ vpsubw %ymm6, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 8: 1/2
|
|
|
+ vmovdqu 832(%r10), %ymm10
|
|
|
+ vmovdqu 864(%r10), %ymm12
|
|
|
+ vmovdqu 896(%r10), %ymm11
|
|
|
+ vmovdqu 928(%r10), %ymm13
|
|
|
+ vpunpcklqdq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhqdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpcklqdq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhqdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 16: 1/2
|
|
|
+ vperm2i128 $32, %ymm5, %ymm8, %ymm4
|
|
|
+ vmovdqu 960(%r10), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm8, %ymm5
|
|
|
+ vmovdqu 992(%r10), %ymm12
|
|
|
+ vperm2i128 $32, %ymm7, %ymm9, %ymm6
|
|
|
+ vmovdqu 1024(%r10), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm9, %ymm7
|
|
|
+ vmovdqu 1056(%r10), %ymm13
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm9
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm5
|
|
|
+ vpmullw %ymm13, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm11, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm5, %ymm8, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ # 32: 1/2
|
|
|
+ vmovdqu 1088(%r10), %ymm10
|
|
|
+ vmovdqu 1120(%r10), %ymm12
|
|
|
+ vpaddw %ymm6, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm6, %ymm4, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm5, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm4
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm5
|
|
|
+ vpsraw $10, %ymm4, %ymm4
|
|
|
+ vpsraw $10, %ymm5, %ymm5
|
|
|
+ vpmullw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmullw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm7
|
|
|
+ # 64: 1/2
|
|
|
+ vmovdqu 1152(%r10), %ymm10
|
|
|
+ vmovdqu 1184(%r10), %ymm12
|
|
|
+ vpsubw %ymm4, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm5, %ymm1, %ymm9
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm4
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm5
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm3, %ymm9
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm6, %ymm8, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm1, 32(%rsi)
|
|
|
+ vmovdqu %ymm2, 64(%rsi)
|
|
|
+ vmovdqu %ymm3, 96(%rsi)
|
|
|
+ vmovdqu %ymm4, 128(%rsi)
|
|
|
+ vmovdqu %ymm5, 160(%rsi)
|
|
|
+ vmovdqu %ymm6, 192(%rsi)
|
|
|
+ vmovdqu %ymm7, 224(%rsi)
|
|
|
+ vmovdqu 256(%rsi), %ymm0
|
|
|
+ vmovdqu 288(%rsi), %ymm1
|
|
|
+ vmovdqu 320(%rsi), %ymm2
|
|
|
+ vmovdqu 352(%rsi), %ymm3
|
|
|
+ vmovdqu 384(%rsi), %ymm4
|
|
|
+ vmovdqu 416(%rsi), %ymm5
|
|
|
+ vmovdqu 448(%rsi), %ymm6
|
|
|
+ vmovdqu 480(%rsi), %ymm7
|
|
|
+ # 2: 2/2
|
|
|
+ vperm2i128 $32, %ymm1, %ymm0, %ymm8
|
|
|
+ vmovdqu 1216(%r10), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm0, %ymm9
|
|
|
+ vmovdqu 1248(%r10), %ymm12
|
|
|
+ vpsllq $32, %ymm9, %ymm0
|
|
|
+ vpsrlq $32, %ymm8, %ymm1
|
|
|
+ vpblendd $0xaa, %ymm0, %ymm8, %ymm0
|
|
|
+ vpblendd $0x55, %ymm1, %ymm9, %ymm1
|
|
|
+ vperm2i128 $32, %ymm3, %ymm2, %ymm8
|
|
|
+ vmovdqu 1280(%r10), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm2, %ymm9
|
|
|
+ vmovdqu 1312(%r10), %ymm13
|
|
|
+ vpsllq $32, %ymm9, %ymm2
|
|
|
+ vpsrlq $32, %ymm8, %ymm3
|
|
|
+ vpblendd $0xaa, %ymm2, %ymm8, %ymm2
|
|
|
+ vpblendd $0x55, %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 4: 2/2
|
|
|
+ vmovdqu 1344(%r10), %ymm10
|
|
|
+ vmovdqu 1376(%r10), %ymm12
|
|
|
+ vmovdqu 1408(%r10), %ymm11
|
|
|
+ vmovdqu 1440(%r10), %ymm13
|
|
|
+ vpunpckldq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpckldq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm2
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm8
|
|
|
+ vpsubw %ymm2, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 8: 2/2
|
|
|
+ vmovdqu 1472(%r10), %ymm10
|
|
|
+ vmovdqu 1504(%r10), %ymm12
|
|
|
+ vmovdqu 1536(%r10), %ymm11
|
|
|
+ vmovdqu 1568(%r10), %ymm13
|
|
|
+ vpunpcklqdq %ymm1, %ymm8, %ymm0
|
|
|
+ vpunpckhqdq %ymm1, %ymm8, %ymm1
|
|
|
+ vpunpcklqdq %ymm3, %ymm9, %ymm2
|
|
|
+ vpunpckhqdq %ymm3, %ymm9, %ymm3
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm9
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm1, %ymm0
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm14, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm0, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm3, %ymm3
|
|
|
+ # 16: 2/2
|
|
|
+ vperm2i128 $32, %ymm1, %ymm8, %ymm0
|
|
|
+ vmovdqu 1600(%r10), %ymm10
|
|
|
+ vperm2i128 $49, %ymm1, %ymm8, %ymm1
|
|
|
+ vmovdqu 1632(%r10), %ymm12
|
|
|
+ vperm2i128 $32, %ymm3, %ymm9, %ymm2
|
|
|
+ vmovdqu 1664(%r10), %ymm11
|
|
|
+ vperm2i128 $49, %ymm3, %ymm9, %ymm3
|
|
|
+ vmovdqu 1696(%r10), %ymm13
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm9
|
|
|
+ vpaddw %ymm1, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm3, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm9, %ymm3
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm11, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm1, %ymm8, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm9, %ymm3
|
|
|
+ # 32: 2/2
|
|
|
+ vmovdqu 1728(%r10), %ymm10
|
|
|
+ vmovdqu 1760(%r10), %ymm12
|
|
|
+ vpaddw %ymm2, %ymm0, %ymm8
|
|
|
+ vpaddw %ymm3, %ymm1, %ymm9
|
|
|
+ vpsubw %ymm2, %ymm0, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm1, %ymm3
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm8, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm9, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm10, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm3
|
|
|
+ # 2: 2/2
|
|
|
+ vperm2i128 $32, %ymm5, %ymm4, %ymm8
|
|
|
+ vmovdqu 1792(%r10), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm4, %ymm9
|
|
|
+ vmovdqu 1824(%r10), %ymm12
|
|
|
+ vpsllq $32, %ymm9, %ymm4
|
|
|
+ vpsrlq $32, %ymm8, %ymm5
|
|
|
+ vpblendd $0xaa, %ymm4, %ymm8, %ymm4
|
|
|
+ vpblendd $0x55, %ymm5, %ymm9, %ymm5
|
|
|
+ vperm2i128 $32, %ymm7, %ymm6, %ymm8
|
|
|
+ vmovdqu 1856(%r10), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm6, %ymm9
|
|
|
+ vmovdqu 1888(%r10), %ymm13
|
|
|
+ vpsllq $32, %ymm9, %ymm6
|
|
|
+ vpsrlq $32, %ymm8, %ymm7
|
|
|
+ vpblendd $0xaa, %ymm6, %ymm8, %ymm6
|
|
|
+ vpblendd $0x55, %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 4: 2/2
|
|
|
+ vmovdqu 1920(%r10), %ymm10
|
|
|
+ vmovdqu 1952(%r10), %ymm12
|
|
|
+ vmovdqu 1984(%r10), %ymm11
|
|
|
+ vmovdqu 2016(%r10), %ymm13
|
|
|
+ vpunpckldq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpckldq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm4
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm6
|
|
|
+ vpsraw $10, %ymm4, %ymm4
|
|
|
+ vpsraw $10, %ymm6, %ymm6
|
|
|
+ vpmullw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmullw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm8
|
|
|
+ vpsubw %ymm6, %ymm9, %ymm9
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 8: 2/2
|
|
|
+ vmovdqu 2048(%r10), %ymm10
|
|
|
+ vmovdqu 2080(%r10), %ymm12
|
|
|
+ vmovdqu 2112(%r10), %ymm11
|
|
|
+ vmovdqu 2144(%r10), %ymm13
|
|
|
+ vpunpcklqdq %ymm5, %ymm8, %ymm4
|
|
|
+ vpunpckhqdq %ymm5, %ymm8, %ymm5
|
|
|
+ vpunpcklqdq %ymm7, %ymm9, %ymm6
|
|
|
+ vpunpckhqdq %ymm7, %ymm9, %ymm7
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm9
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm7
|
|
|
+ vpmullw %ymm12, %ymm5, %ymm4
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm4, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm7, %ymm7
|
|
|
+ # 16: 2/2
|
|
|
+ vperm2i128 $32, %ymm5, %ymm8, %ymm4
|
|
|
+ vmovdqu 2176(%r10), %ymm10
|
|
|
+ vperm2i128 $49, %ymm5, %ymm8, %ymm5
|
|
|
+ vmovdqu 2208(%r10), %ymm12
|
|
|
+ vperm2i128 $32, %ymm7, %ymm9, %ymm6
|
|
|
+ vmovdqu 2240(%r10), %ymm11
|
|
|
+ vperm2i128 $49, %ymm7, %ymm9, %ymm7
|
|
|
+ vmovdqu 2272(%r10), %ymm13
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm6, %ymm9
|
|
|
+ vpaddw %ymm5, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm7, %ymm6, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm5
|
|
|
+ vpmullw %ymm13, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm11, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm5, %ymm8, %ymm5
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ # 32: 2/2
|
|
|
+ vmovdqu 2304(%r10), %ymm10
|
|
|
+ vmovdqu 2336(%r10), %ymm12
|
|
|
+ vpaddw %ymm6, %ymm4, %ymm8
|
|
|
+ vpaddw %ymm7, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm6, %ymm4, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm5, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm8, %ymm4
|
|
|
+ vpmulhw %ymm15, %ymm9, %ymm5
|
|
|
+ vpsraw $10, %ymm4, %ymm4
|
|
|
+ vpsraw $10, %ymm5, %ymm5
|
|
|
+ vpmullw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmullw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpmullw %ymm12, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm12, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm10, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm10, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm7
|
|
|
+ # 64: 2/2
|
|
|
+ vmovdqu 2368(%r10), %ymm10
|
|
|
+ vmovdqu 2400(%r10), %ymm12
|
|
|
+ vpsubw %ymm4, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm5, %ymm1, %ymm9
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm4
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm5
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm3, %ymm9
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm6, %ymm8, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ vmovdqu %ymm0, 256(%rsi)
|
|
|
+ vmovdqu %ymm1, 288(%rsi)
|
|
|
+ vmovdqu %ymm2, 320(%rsi)
|
|
|
+ vmovdqu %ymm3, 352(%rsi)
|
|
|
+ # 128
|
|
|
+ vmovdqu 2432(%r10), %ymm10
|
|
|
+ vmovdqu 2464(%r10), %ymm12
|
|
|
+ vmovdqu 2496(%r10), %ymm11
|
|
|
+ vmovdqu 2528(%r10), %ymm13
|
|
|
+ vmovdqu 128(%rsi), %ymm0
|
|
|
+ vmovdqu 160(%rsi), %ymm1
|
|
|
+ vmovdqu 192(%rsi), %ymm2
|
|
|
+ vmovdqu 224(%rsi), %ymm3
|
|
|
+ vpsubw %ymm4, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm5, %ymm1, %ymm9
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm4
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm5
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm3, %ymm9
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm6, %ymm8, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm11, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm13, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm11, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm5
|
|
|
+ vpmullw %ymm13, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm7
|
|
|
+ vmovdqu %ymm0, 128(%rsi)
|
|
|
+ vmovdqu %ymm1, 160(%rsi)
|
|
|
+ vmovdqu %ymm2, 192(%rsi)
|
|
|
+ vmovdqu %ymm3, 224(%rsi)
|
|
|
+ vmovdqu %ymm4, 384(%rsi)
|
|
|
+ vmovdqu %ymm5, 416(%rsi)
|
|
|
+ vmovdqu %ymm6, 448(%rsi)
|
|
|
+ vmovdqu %ymm7, 480(%rsi)
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu 32(%rsi), %ymm1
|
|
|
+ vmovdqu 64(%rsi), %ymm2
|
|
|
+ vmovdqu 96(%rsi), %ymm3
|
|
|
+ vmovdqu 256(%rsi), %ymm4
|
|
|
+ vmovdqu 288(%rsi), %ymm5
|
|
|
+ vmovdqu 320(%rsi), %ymm6
|
|
|
+ vmovdqu 352(%rsi), %ymm7
|
|
|
+ vpsubw %ymm4, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm5, %ymm1, %ymm9
|
|
|
+ vpaddw %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm4
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm5
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm14, %ymm5, %ymm5
|
|
|
+ vpsubw %ymm4, %ymm8, %ymm4
|
|
|
+ vpsubw %ymm5, %ymm9, %ymm5
|
|
|
+ vpsubw %ymm6, %ymm2, %ymm8
|
|
|
+ vpsubw %ymm7, %ymm3, %ymm9
|
|
|
+ vpaddw %ymm6, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm12, %ymm8, %ymm6
|
|
|
+ vpmullw %ymm12, %ymm9, %ymm7
|
|
|
+ vpmulhw %ymm10, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm10, %ymm9, %ymm9
|
|
|
+ vpmulhw %ymm14, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm14, %ymm7, %ymm7
|
|
|
+ vpsubw %ymm6, %ymm8, %ymm6
|
|
|
+ vpsubw %ymm7, %ymm9, %ymm7
|
|
|
+ vpmullw %ymm13, %ymm0, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm1, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm11, %ymm1, %ymm1
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm13, %ymm2, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm3, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm2, %ymm2
|
|
|
+ vpmulhw %ymm11, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm9, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm13, %ymm4, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm5, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm4, %ymm4
|
|
|
+ vpmulhw %ymm11, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm9, %ymm5, %ymm5
|
|
|
+ vpmullw %ymm13, %ymm6, %ymm8
|
|
|
+ vpmullw %ymm13, %ymm7, %ymm9
|
|
|
+ vpmulhw %ymm11, %ymm6, %ymm6
|
|
|
+ vpmulhw %ymm11, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm14, %ymm8, %ymm8
|
|
|
+ vpmulhw %ymm14, %ymm9, %ymm9
|
|
|
+ vpsubw %ymm8, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm9, %ymm7, %ymm7
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm1, 32(%rsi)
|
|
|
+ vmovdqu %ymm2, 64(%rsi)
|
|
|
+ vmovdqu %ymm3, 96(%rsi)
|
|
|
+ vmovdqu %ymm4, 256(%rsi)
|
|
|
+ vmovdqu %ymm5, 288(%rsi)
|
|
|
+ vmovdqu %ymm6, 320(%rsi)
|
|
|
+ vmovdqu %ymm7, 352(%rsi)
|
|
|
+ # Sub Errors
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu 32(%rsi), %ymm1
|
|
|
+ vmovdqu 64(%rsi), %ymm2
|
|
|
+ vmovdqu 96(%rsi), %ymm3
|
|
|
+ vmovdqu (%rcx), %ymm4
|
|
|
+ vmovdqu 32(%rcx), %ymm5
|
|
|
+ vmovdqu 64(%rcx), %ymm6
|
|
|
+ vmovdqu 96(%rcx), %ymm7
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm1, 32(%rsi)
|
|
|
+ vmovdqu %ymm2, 64(%rsi)
|
|
|
+ vmovdqu %ymm3, 96(%rsi)
|
|
|
+ vmovdqu 128(%rsi), %ymm0
|
|
|
+ vmovdqu 160(%rsi), %ymm1
|
|
|
+ vmovdqu 192(%rsi), %ymm2
|
|
|
+ vmovdqu 224(%rsi), %ymm3
|
|
|
+ vmovdqu 128(%rcx), %ymm4
|
|
|
+ vmovdqu 160(%rcx), %ymm5
|
|
|
+ vmovdqu 192(%rcx), %ymm6
|
|
|
+ vmovdqu 224(%rcx), %ymm7
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, 128(%rsi)
|
|
|
+ vmovdqu %ymm1, 160(%rsi)
|
|
|
+ vmovdqu %ymm2, 192(%rsi)
|
|
|
+ vmovdqu %ymm3, 224(%rsi)
|
|
|
+ vmovdqu 256(%rsi), %ymm0
|
|
|
+ vmovdqu 288(%rsi), %ymm1
|
|
|
+ vmovdqu 320(%rsi), %ymm2
|
|
|
+ vmovdqu 352(%rsi), %ymm3
|
|
|
+ vmovdqu 256(%rcx), %ymm4
|
|
|
+ vmovdqu 288(%rcx), %ymm5
|
|
|
+ vmovdqu 320(%rcx), %ymm6
|
|
|
+ vmovdqu 352(%rcx), %ymm7
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, 256(%rsi)
|
|
|
+ vmovdqu %ymm1, 288(%rsi)
|
|
|
+ vmovdqu %ymm2, 320(%rsi)
|
|
|
+ vmovdqu %ymm3, 352(%rsi)
|
|
|
+ vmovdqu 384(%rsi), %ymm0
|
|
|
+ vmovdqu 416(%rsi), %ymm1
|
|
|
+ vmovdqu 448(%rsi), %ymm2
|
|
|
+ vmovdqu 480(%rsi), %ymm3
|
|
|
+ vmovdqu 384(%rcx), %ymm4
|
|
|
+ vmovdqu 416(%rcx), %ymm5
|
|
|
+ vmovdqu 448(%rcx), %ymm6
|
|
|
+ vmovdqu 480(%rcx), %ymm7
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm5
|
|
|
+ vpmulhw %ymm15, %ymm4, %ymm0
|
|
|
+ vpmulhw %ymm15, %ymm5, %ymm1
|
|
|
+ vpsraw $10, %ymm0, %ymm0
|
|
|
+ vpsraw $10, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm14, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm14, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm0, %ymm4, %ymm0
|
|
|
+ vpsubw %ymm1, %ymm5, %ymm1
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm6
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm7
|
|
|
+ vpmulhw %ymm15, %ymm6, %ymm2
|
|
|
+ vpmulhw %ymm15, %ymm7, %ymm3
|
|
|
+ vpsraw $10, %ymm2, %ymm2
|
|
|
+ vpsraw $10, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm14, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm14, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm6, %ymm2
|
|
|
+ vpsubw %ymm3, %ymm7, %ymm3
|
|
|
+ vmovdqu %ymm0, 384(%rsi)
|
|
|
+ vmovdqu %ymm1, 416(%rsi)
|
|
|
+ vmovdqu %ymm2, 448(%rsi)
|
|
|
+ vmovdqu %ymm3, 480(%rsi)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_decapsulate_avx2,.-kyber_decapsulate_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_csubq_avx2
|
|
|
+.type kyber_csubq_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_csubq_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_csubq_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_csubq_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu kyber_q(%rip), %ymm12
|
|
|
+ vmovdqu (%rdi), %ymm0
|
|
|
+ vmovdqu 32(%rdi), %ymm1
|
|
|
+ vmovdqu 64(%rdi), %ymm2
|
|
|
+ vmovdqu 96(%rdi), %ymm3
|
|
|
+ vmovdqu 128(%rdi), %ymm4
|
|
|
+ vmovdqu 160(%rdi), %ymm5
|
|
|
+ vmovdqu 192(%rdi), %ymm6
|
|
|
+ vmovdqu 224(%rdi), %ymm7
|
|
|
+ vpsubw %ymm12, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm12, %ymm1, %ymm9
|
|
|
+ vpsubw %ymm12, %ymm2, %ymm10
|
|
|
+ vpsubw %ymm12, %ymm3, %ymm11
|
|
|
+ vpsraw $15, %ymm8, %ymm0
|
|
|
+ vpsraw $15, %ymm9, %ymm1
|
|
|
+ vpsraw $15, %ymm10, %ymm2
|
|
|
+ vpsraw $15, %ymm11, %ymm3
|
|
|
+ vpand %ymm12, %ymm0, %ymm0
|
|
|
+ vpand %ymm12, %ymm1, %ymm1
|
|
|
+ vpand %ymm12, %ymm2, %ymm2
|
|
|
+ vpand %ymm12, %ymm3, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm10, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm11, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm12, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm12, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm12, %ymm6, %ymm10
|
|
|
+ vpsubw %ymm12, %ymm7, %ymm11
|
|
|
+ vpsraw $15, %ymm8, %ymm4
|
|
|
+ vpsraw $15, %ymm9, %ymm5
|
|
|
+ vpsraw $15, %ymm10, %ymm6
|
|
|
+ vpsraw $15, %ymm11, %ymm7
|
|
|
+ vpand %ymm12, %ymm4, %ymm4
|
|
|
+ vpand %ymm12, %ymm5, %ymm5
|
|
|
+ vpand %ymm12, %ymm6, %ymm6
|
|
|
+ vpand %ymm12, %ymm7, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm5, %ymm5
|
|
|
+ vpaddw %ymm10, %ymm6, %ymm6
|
|
|
+ vpaddw %ymm11, %ymm7, %ymm7
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vmovdqu %ymm4, 128(%rdi)
|
|
|
+ vmovdqu %ymm5, 160(%rdi)
|
|
|
+ vmovdqu %ymm6, 192(%rdi)
|
|
|
+ vmovdqu %ymm7, 224(%rdi)
|
|
|
+ vmovdqu 256(%rdi), %ymm0
|
|
|
+ vmovdqu 288(%rdi), %ymm1
|
|
|
+ vmovdqu 320(%rdi), %ymm2
|
|
|
+ vmovdqu 352(%rdi), %ymm3
|
|
|
+ vmovdqu 384(%rdi), %ymm4
|
|
|
+ vmovdqu 416(%rdi), %ymm5
|
|
|
+ vmovdqu 448(%rdi), %ymm6
|
|
|
+ vmovdqu 480(%rdi), %ymm7
|
|
|
+ vpsubw %ymm12, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm12, %ymm1, %ymm9
|
|
|
+ vpsubw %ymm12, %ymm2, %ymm10
|
|
|
+ vpsubw %ymm12, %ymm3, %ymm11
|
|
|
+ vpsraw $15, %ymm8, %ymm0
|
|
|
+ vpsraw $15, %ymm9, %ymm1
|
|
|
+ vpsraw $15, %ymm10, %ymm2
|
|
|
+ vpsraw $15, %ymm11, %ymm3
|
|
|
+ vpand %ymm12, %ymm0, %ymm0
|
|
|
+ vpand %ymm12, %ymm1, %ymm1
|
|
|
+ vpand %ymm12, %ymm2, %ymm2
|
|
|
+ vpand %ymm12, %ymm3, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm10, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm11, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm12, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm12, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm12, %ymm6, %ymm10
|
|
|
+ vpsubw %ymm12, %ymm7, %ymm11
|
|
|
+ vpsraw $15, %ymm8, %ymm4
|
|
|
+ vpsraw $15, %ymm9, %ymm5
|
|
|
+ vpsraw $15, %ymm10, %ymm6
|
|
|
+ vpsraw $15, %ymm11, %ymm7
|
|
|
+ vpand %ymm12, %ymm4, %ymm4
|
|
|
+ vpand %ymm12, %ymm5, %ymm5
|
|
|
+ vpand %ymm12, %ymm6, %ymm6
|
|
|
+ vpand %ymm12, %ymm7, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm5, %ymm5
|
|
|
+ vpaddw %ymm10, %ymm6, %ymm6
|
|
|
+ vpaddw %ymm11, %ymm7, %ymm7
|
|
|
+ vmovdqu %ymm0, 256(%rdi)
|
|
|
+ vmovdqu %ymm1, 288(%rdi)
|
|
|
+ vmovdqu %ymm2, 320(%rdi)
|
|
|
+ vmovdqu %ymm3, 352(%rdi)
|
|
|
+ vmovdqu %ymm4, 384(%rdi)
|
|
|
+ vmovdqu %ymm5, 416(%rdi)
|
|
|
+ vmovdqu %ymm6, 448(%rdi)
|
|
|
+ vmovdqu %ymm7, 480(%rdi)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_csubq_avx2,.-kyber_csubq_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_rej_idx:
|
|
|
+.quad 0xffffffffffffffff,0xffffffffffffff00
|
|
|
+.quad 0xffffffffffffff02,0xffffffffffff0200
|
|
|
+.quad 0xffffffffffffff04,0xffffffffffff0400
|
|
|
+.quad 0xffffffffffff0402,0xffffffffff040200
|
|
|
+.quad 0xffffffffffffff06,0xffffffffffff0600
|
|
|
+.quad 0xffffffffffff0602,0xffffffffff060200
|
|
|
+.quad 0xffffffffffff0604,0xffffffffff060400
|
|
|
+.quad 0xffffffffff060402,0xffffffff06040200
|
|
|
+.quad 0xffffffffffffff08,0xffffffffffff0800
|
|
|
+.quad 0xffffffffffff0802,0xffffffffff080200
|
|
|
+.quad 0xffffffffffff0804,0xffffffffff080400
|
|
|
+.quad 0xffffffffff080402,0xffffffff08040200
|
|
|
+.quad 0xffffffffffff0806,0xffffffffff080600
|
|
|
+.quad 0xffffffffff080602,0xffffffff08060200
|
|
|
+.quad 0xffffffffff080604,0xffffffff08060400
|
|
|
+.quad 0xffffffff08060402,0xffffff0806040200
|
|
|
+.quad 0xffffffffffffff0a,0xffffffffffff0a00
|
|
|
+.quad 0xffffffffffff0a02,0xffffffffff0a0200
|
|
|
+.quad 0xffffffffffff0a04,0xffffffffff0a0400
|
|
|
+.quad 0xffffffffff0a0402,0xffffffff0a040200
|
|
|
+.quad 0xffffffffffff0a06,0xffffffffff0a0600
|
|
|
+.quad 0xffffffffff0a0602,0xffffffff0a060200
|
|
|
+.quad 0xffffffffff0a0604,0xffffffff0a060400
|
|
|
+.quad 0xffffffff0a060402,0xffffff0a06040200
|
|
|
+.quad 0xffffffffffff0a08,0xffffffffff0a0800
|
|
|
+.quad 0xffffffffff0a0802,0xffffffff0a080200
|
|
|
+.quad 0xffffffffff0a0804,0xffffffff0a080400
|
|
|
+.quad 0xffffffff0a080402,0xffffff0a08040200
|
|
|
+.quad 0xffffffffff0a0806,0xffffffff0a080600
|
|
|
+.quad 0xffffffff0a080602,0xffffff0a08060200
|
|
|
+.quad 0xffffffff0a080604,0xffffff0a08060400
|
|
|
+.quad 0xffffff0a08060402,0xffff0a0806040200
|
|
|
+.quad 0xffffffffffffff0c,0xffffffffffff0c00
|
|
|
+.quad 0xffffffffffff0c02,0xffffffffff0c0200
|
|
|
+.quad 0xffffffffffff0c04,0xffffffffff0c0400
|
|
|
+.quad 0xffffffffff0c0402,0xffffffff0c040200
|
|
|
+.quad 0xffffffffffff0c06,0xffffffffff0c0600
|
|
|
+.quad 0xffffffffff0c0602,0xffffffff0c060200
|
|
|
+.quad 0xffffffffff0c0604,0xffffffff0c060400
|
|
|
+.quad 0xffffffff0c060402,0xffffff0c06040200
|
|
|
+.quad 0xffffffffffff0c08,0xffffffffff0c0800
|
|
|
+.quad 0xffffffffff0c0802,0xffffffff0c080200
|
|
|
+.quad 0xffffffffff0c0804,0xffffffff0c080400
|
|
|
+.quad 0xffffffff0c080402,0xffffff0c08040200
|
|
|
+.quad 0xffffffffff0c0806,0xffffffff0c080600
|
|
|
+.quad 0xffffffff0c080602,0xffffff0c08060200
|
|
|
+.quad 0xffffffff0c080604,0xffffff0c08060400
|
|
|
+.quad 0xffffff0c08060402,0xffff0c0806040200
|
|
|
+.quad 0xffffffffffff0c0a,0xffffffffff0c0a00
|
|
|
+.quad 0xffffffffff0c0a02,0xffffffff0c0a0200
|
|
|
+.quad 0xffffffffff0c0a04,0xffffffff0c0a0400
|
|
|
+.quad 0xffffffff0c0a0402,0xffffff0c0a040200
|
|
|
+.quad 0xffffffffff0c0a06,0xffffffff0c0a0600
|
|
|
+.quad 0xffffffff0c0a0602,0xffffff0c0a060200
|
|
|
+.quad 0xffffffff0c0a0604,0xffffff0c0a060400
|
|
|
+.quad 0xffffff0c0a060402,0xffff0c0a06040200
|
|
|
+.quad 0xffffffffff0c0a08,0xffffffff0c0a0800
|
|
|
+.quad 0xffffffff0c0a0802,0xffffff0c0a080200
|
|
|
+.quad 0xffffffff0c0a0804,0xffffff0c0a080400
|
|
|
+.quad 0xffffff0c0a080402,0xffff0c0a08040200
|
|
|
+.quad 0xffffffff0c0a0806,0xffffff0c0a080600
|
|
|
+.quad 0xffffff0c0a080602,0xffff0c0a08060200
|
|
|
+.quad 0xffffff0c0a080604,0xffff0c0a08060400
|
|
|
+.quad 0xffff0c0a08060402,0xff0c0a0806040200
|
|
|
+.quad 0xffffffffffffff0e,0xffffffffffff0e00
|
|
|
+.quad 0xffffffffffff0e02,0xffffffffff0e0200
|
|
|
+.quad 0xffffffffffff0e04,0xffffffffff0e0400
|
|
|
+.quad 0xffffffffff0e0402,0xffffffff0e040200
|
|
|
+.quad 0xffffffffffff0e06,0xffffffffff0e0600
|
|
|
+.quad 0xffffffffff0e0602,0xffffffff0e060200
|
|
|
+.quad 0xffffffffff0e0604,0xffffffff0e060400
|
|
|
+.quad 0xffffffff0e060402,0xffffff0e06040200
|
|
|
+.quad 0xffffffffffff0e08,0xffffffffff0e0800
|
|
|
+.quad 0xffffffffff0e0802,0xffffffff0e080200
|
|
|
+.quad 0xffffffffff0e0804,0xffffffff0e080400
|
|
|
+.quad 0xffffffff0e080402,0xffffff0e08040200
|
|
|
+.quad 0xffffffffff0e0806,0xffffffff0e080600
|
|
|
+.quad 0xffffffff0e080602,0xffffff0e08060200
|
|
|
+.quad 0xffffffff0e080604,0xffffff0e08060400
|
|
|
+.quad 0xffffff0e08060402,0xffff0e0806040200
|
|
|
+.quad 0xffffffffffff0e0a,0xffffffffff0e0a00
|
|
|
+.quad 0xffffffffff0e0a02,0xffffffff0e0a0200
|
|
|
+.quad 0xffffffffff0e0a04,0xffffffff0e0a0400
|
|
|
+.quad 0xffffffff0e0a0402,0xffffff0e0a040200
|
|
|
+.quad 0xffffffffff0e0a06,0xffffffff0e0a0600
|
|
|
+.quad 0xffffffff0e0a0602,0xffffff0e0a060200
|
|
|
+.quad 0xffffffff0e0a0604,0xffffff0e0a060400
|
|
|
+.quad 0xffffff0e0a060402,0xffff0e0a06040200
|
|
|
+.quad 0xffffffffff0e0a08,0xffffffff0e0a0800
|
|
|
+.quad 0xffffffff0e0a0802,0xffffff0e0a080200
|
|
|
+.quad 0xffffffff0e0a0804,0xffffff0e0a080400
|
|
|
+.quad 0xffffff0e0a080402,0xffff0e0a08040200
|
|
|
+.quad 0xffffffff0e0a0806,0xffffff0e0a080600
|
|
|
+.quad 0xffffff0e0a080602,0xffff0e0a08060200
|
|
|
+.quad 0xffffff0e0a080604,0xffff0e0a08060400
|
|
|
+.quad 0xffff0e0a08060402,0xff0e0a0806040200
|
|
|
+.quad 0xffffffffffff0e0c,0xffffffffff0e0c00
|
|
|
+.quad 0xffffffffff0e0c02,0xffffffff0e0c0200
|
|
|
+.quad 0xffffffffff0e0c04,0xffffffff0e0c0400
|
|
|
+.quad 0xffffffff0e0c0402,0xffffff0e0c040200
|
|
|
+.quad 0xffffffffff0e0c06,0xffffffff0e0c0600
|
|
|
+.quad 0xffffffff0e0c0602,0xffffff0e0c060200
|
|
|
+.quad 0xffffffff0e0c0604,0xffffff0e0c060400
|
|
|
+.quad 0xffffff0e0c060402,0xffff0e0c06040200
|
|
|
+.quad 0xffffffffff0e0c08,0xffffffff0e0c0800
|
|
|
+.quad 0xffffffff0e0c0802,0xffffff0e0c080200
|
|
|
+.quad 0xffffffff0e0c0804,0xffffff0e0c080400
|
|
|
+.quad 0xffffff0e0c080402,0xffff0e0c08040200
|
|
|
+.quad 0xffffffff0e0c0806,0xffffff0e0c080600
|
|
|
+.quad 0xffffff0e0c080602,0xffff0e0c08060200
|
|
|
+.quad 0xffffff0e0c080604,0xffff0e0c08060400
|
|
|
+.quad 0xffff0e0c08060402,0xff0e0c0806040200
|
|
|
+.quad 0xffffffffff0e0c0a,0xffffffff0e0c0a00
|
|
|
+.quad 0xffffffff0e0c0a02,0xffffff0e0c0a0200
|
|
|
+.quad 0xffffffff0e0c0a04,0xffffff0e0c0a0400
|
|
|
+.quad 0xffffff0e0c0a0402,0xffff0e0c0a040200
|
|
|
+.quad 0xffffffff0e0c0a06,0xffffff0e0c0a0600
|
|
|
+.quad 0xffffff0e0c0a0602,0xffff0e0c0a060200
|
|
|
+.quad 0xffffff0e0c0a0604,0xffff0e0c0a060400
|
|
|
+.quad 0xffff0e0c0a060402,0xff0e0c0a06040200
|
|
|
+.quad 0xffffffff0e0c0a08,0xffffff0e0c0a0800
|
|
|
+.quad 0xffffff0e0c0a0802,0xffff0e0c0a080200
|
|
|
+.quad 0xffffff0e0c0a0804,0xffff0e0c0a080400
|
|
|
+.quad 0xffff0e0c0a080402,0xff0e0c0a08040200
|
|
|
+.quad 0xffffff0e0c0a0806,0xffff0e0c0a080600
|
|
|
+.quad 0xffff0e0c0a080602,0xff0e0c0a08060200
|
|
|
+.quad 0xffff0e0c0a080604,0xff0e0c0a08060400
|
|
|
+.quad 0xff0e0c0a08060402,0xe0c0a0806040200
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_rej_q:
|
|
|
+.quad 0xd010d010d010d01, 0xd010d010d010d01
|
|
|
+.quad 0xd010d010d010d01, 0xd010d010d010d01
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_rej_ones:
|
|
|
+.quad 0x101010101010101, 0x101010101010101
|
|
|
+.quad 0x101010101010101, 0x101010101010101
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_rej_mask:
|
|
|
+.quad 0xfff0fff0fff0fff, 0xfff0fff0fff0fff
|
|
|
+.quad 0xfff0fff0fff0fff, 0xfff0fff0fff0fff
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_rej_shuffle:
|
|
|
+.quad 0x504040302010100, 0xb0a0a0908070706
|
|
|
+.quad 0x908080706050504, 0xf0e0e0d0c0b0b0a
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_rej_uniform_n_avx2
|
|
|
+.type kyber_rej_uniform_n_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_rej_uniform_n_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_rej_uniform_n_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_rej_uniform_n_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ pushq %rbx
|
|
|
+ pushq %r12
|
|
|
+ pushq %r13
|
|
|
+ pushq %r14
|
|
|
+ pushq %r15
|
|
|
+ pushq %rbp
|
|
|
+ movq %rcx, %r8
|
|
|
+ movl %esi, %eax
|
|
|
+ vmovdqu L_kyber_rej_q(%rip), %ymm6
|
|
|
+ vmovdqu L_kyber_rej_ones(%rip), %ymm7
|
|
|
+ vmovdqu L_kyber_rej_mask(%rip), %ymm8
|
|
|
+ vmovdqu L_kyber_rej_shuffle(%rip), %ymm9
|
|
|
+ leaq L_kyber_rej_idx(%rip), %r9
|
|
|
+ movq $0x1111111111111111, %r14
|
|
|
+ movq $0xe0c0a0806040200, %rbp
|
|
|
+ movq $0x101010101010101, %r13
|
|
|
+ vpermq $0x94, (%rdx), %ymm0
|
|
|
+ vpermq $0x94, 24(%rdx), %ymm1
|
|
|
+ vpshufb %ymm9, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm9, %ymm1, %ymm1
|
|
|
+ vpsrlw $4, %ymm0, %ymm2
|
|
|
+ vpsrlw $4, %ymm1, %ymm3
|
|
|
+ vpblendw $0xaa, %ymm2, %ymm0, %ymm0
|
|
|
+ vpblendw $0xaa, %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpcmpgtw %ymm0, %ymm6, %ymm2
|
|
|
+ vpcmpgtw %ymm1, %ymm6, %ymm3
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm2, %rbx
|
|
|
+ movzbl %bl, %r10d
|
|
|
+ movzbl %bh, %ecx
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ shrq $16, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r11
|
|
|
+ andq $0xff, %r12
|
|
|
+ movq (%r9,%r10,8), %xmm2
|
|
|
+ movq (%r9,%rcx,8), %xmm3
|
|
|
+ movq (%r9,%r11,8), %xmm4
|
|
|
+ movq (%r9,%r12,8), %xmm5
|
|
|
+ vinserti128 $0x01, %xmm4, %ymm2, %ymm2
|
|
|
+ vinserti128 $0x01, %xmm5, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm7, %ymm2, %ymm4
|
|
|
+ vpaddb %ymm7, %ymm3, %ymm5
|
|
|
+ vpunpcklbw %ymm4, %ymm2, %ymm2
|
|
|
+ vpunpcklbw %ymm5, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm3, %ymm1, %ymm1
|
|
|
+ movq %rbx, %r10
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ andq $0xff, %rbx
|
|
|
+ shrq $16, %r10
|
|
|
+ shrq $8, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r10
|
|
|
+ andq $0xff, %r11
|
|
|
+ popcntl %ebx, %ebx
|
|
|
+ popcntl %r10d, %r10d
|
|
|
+ popcntl %r11d, %r11d
|
|
|
+ popcntl %r12d, %r12d
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm0
|
|
|
+ leaq (%rdi,%rbx,2), %rdi
|
|
|
+ subl %ebx, %esi
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ leaq (%rdi,%r10,2), %rdi
|
|
|
+ subl %r10d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm1
|
|
|
+ leaq (%rdi,%r11,2), %rdi
|
|
|
+ subl %r11d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ leaq (%rdi,%r12,2), %rdi
|
|
|
+ subl %r12d, %esi
|
|
|
+ vpermq $0x94, 48(%rdx), %ymm0
|
|
|
+ vpermq $0x94, 72(%rdx), %ymm1
|
|
|
+ vpshufb %ymm9, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm9, %ymm1, %ymm1
|
|
|
+ vpsrlw $4, %ymm0, %ymm2
|
|
|
+ vpsrlw $4, %ymm1, %ymm3
|
|
|
+ vpblendw $0xaa, %ymm2, %ymm0, %ymm0
|
|
|
+ vpblendw $0xaa, %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpcmpgtw %ymm0, %ymm6, %ymm2
|
|
|
+ vpcmpgtw %ymm1, %ymm6, %ymm3
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm2, %rbx
|
|
|
+ movzbl %bl, %r10d
|
|
|
+ movzbl %bh, %ecx
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ shrq $16, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r11
|
|
|
+ andq $0xff, %r12
|
|
|
+ movq (%r9,%r10,8), %xmm2
|
|
|
+ movq (%r9,%rcx,8), %xmm3
|
|
|
+ movq (%r9,%r11,8), %xmm4
|
|
|
+ movq (%r9,%r12,8), %xmm5
|
|
|
+ vinserti128 $0x01, %xmm4, %ymm2, %ymm2
|
|
|
+ vinserti128 $0x01, %xmm5, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm7, %ymm2, %ymm4
|
|
|
+ vpaddb %ymm7, %ymm3, %ymm5
|
|
|
+ vpunpcklbw %ymm4, %ymm2, %ymm2
|
|
|
+ vpunpcklbw %ymm5, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm3, %ymm1, %ymm1
|
|
|
+ movq %rbx, %r10
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ andq $0xff, %rbx
|
|
|
+ shrq $16, %r10
|
|
|
+ shrq $8, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r10
|
|
|
+ andq $0xff, %r11
|
|
|
+ popcntl %ebx, %ebx
|
|
|
+ popcntl %r10d, %r10d
|
|
|
+ popcntl %r11d, %r11d
|
|
|
+ popcntl %r12d, %r12d
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm0
|
|
|
+ leaq (%rdi,%rbx,2), %rdi
|
|
|
+ subl %ebx, %esi
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ leaq (%rdi,%r10,2), %rdi
|
|
|
+ subl %r10d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm1
|
|
|
+ leaq (%rdi,%r11,2), %rdi
|
|
|
+ subl %r11d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ leaq (%rdi,%r12,2), %rdi
|
|
|
+ subl %r12d, %esi
|
|
|
+ vpermq $0x94, 96(%rdx), %ymm0
|
|
|
+ vpermq $0x94, 120(%rdx), %ymm1
|
|
|
+ vpshufb %ymm9, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm9, %ymm1, %ymm1
|
|
|
+ vpsrlw $4, %ymm0, %ymm2
|
|
|
+ vpsrlw $4, %ymm1, %ymm3
|
|
|
+ vpblendw $0xaa, %ymm2, %ymm0, %ymm0
|
|
|
+ vpblendw $0xaa, %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpcmpgtw %ymm0, %ymm6, %ymm2
|
|
|
+ vpcmpgtw %ymm1, %ymm6, %ymm3
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm2, %rbx
|
|
|
+ movzbl %bl, %r10d
|
|
|
+ movzbl %bh, %ecx
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ shrq $16, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r11
|
|
|
+ andq $0xff, %r12
|
|
|
+ movq (%r9,%r10,8), %xmm2
|
|
|
+ movq (%r9,%rcx,8), %xmm3
|
|
|
+ movq (%r9,%r11,8), %xmm4
|
|
|
+ movq (%r9,%r12,8), %xmm5
|
|
|
+ vinserti128 $0x01, %xmm4, %ymm2, %ymm2
|
|
|
+ vinserti128 $0x01, %xmm5, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm7, %ymm2, %ymm4
|
|
|
+ vpaddb %ymm7, %ymm3, %ymm5
|
|
|
+ vpunpcklbw %ymm4, %ymm2, %ymm2
|
|
|
+ vpunpcklbw %ymm5, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm3, %ymm1, %ymm1
|
|
|
+ movq %rbx, %r10
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ andq $0xff, %rbx
|
|
|
+ shrq $16, %r10
|
|
|
+ shrq $8, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r10
|
|
|
+ andq $0xff, %r11
|
|
|
+ popcntl %ebx, %ebx
|
|
|
+ popcntl %r10d, %r10d
|
|
|
+ popcntl %r11d, %r11d
|
|
|
+ popcntl %r12d, %r12d
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm0
|
|
|
+ leaq (%rdi,%rbx,2), %rdi
|
|
|
+ subl %ebx, %esi
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ leaq (%rdi,%r10,2), %rdi
|
|
|
+ subl %r10d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm1
|
|
|
+ leaq (%rdi,%r11,2), %rdi
|
|
|
+ subl %r11d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ leaq (%rdi,%r12,2), %rdi
|
|
|
+ subl %r12d, %esi
|
|
|
+ vpermq $0x94, 144(%rdx), %ymm0
|
|
|
+ vpermq $0x94, 168(%rdx), %ymm1
|
|
|
+ vpshufb %ymm9, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm9, %ymm1, %ymm1
|
|
|
+ vpsrlw $4, %ymm0, %ymm2
|
|
|
+ vpsrlw $4, %ymm1, %ymm3
|
|
|
+ vpblendw $0xaa, %ymm2, %ymm0, %ymm0
|
|
|
+ vpblendw $0xaa, %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpcmpgtw %ymm0, %ymm6, %ymm2
|
|
|
+ vpcmpgtw %ymm1, %ymm6, %ymm3
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm2, %rbx
|
|
|
+ movzbl %bl, %r10d
|
|
|
+ movzbl %bh, %ecx
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ shrq $16, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r11
|
|
|
+ andq $0xff, %r12
|
|
|
+ movq (%r9,%r10,8), %xmm2
|
|
|
+ movq (%r9,%rcx,8), %xmm3
|
|
|
+ movq (%r9,%r11,8), %xmm4
|
|
|
+ movq (%r9,%r12,8), %xmm5
|
|
|
+ vinserti128 $0x01, %xmm4, %ymm2, %ymm2
|
|
|
+ vinserti128 $0x01, %xmm5, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm7, %ymm2, %ymm4
|
|
|
+ vpaddb %ymm7, %ymm3, %ymm5
|
|
|
+ vpunpcklbw %ymm4, %ymm2, %ymm2
|
|
|
+ vpunpcklbw %ymm5, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm3, %ymm1, %ymm1
|
|
|
+ movq %rbx, %r10
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ andq $0xff, %rbx
|
|
|
+ shrq $16, %r10
|
|
|
+ shrq $8, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r10
|
|
|
+ andq $0xff, %r11
|
|
|
+ popcntl %ebx, %ebx
|
|
|
+ popcntl %r10d, %r10d
|
|
|
+ popcntl %r11d, %r11d
|
|
|
+ popcntl %r12d, %r12d
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm0
|
|
|
+ leaq (%rdi,%rbx,2), %rdi
|
|
|
+ subl %ebx, %esi
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ leaq (%rdi,%r10,2), %rdi
|
|
|
+ subl %r10d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm1
|
|
|
+ leaq (%rdi,%r11,2), %rdi
|
|
|
+ subl %r11d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ leaq (%rdi,%r12,2), %rdi
|
|
|
+ subl %r12d, %esi
|
|
|
+ vpermq $0x94, 192(%rdx), %ymm0
|
|
|
+ vpermq $0x94, 216(%rdx), %ymm1
|
|
|
+ vpshufb %ymm9, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm9, %ymm1, %ymm1
|
|
|
+ vpsrlw $4, %ymm0, %ymm2
|
|
|
+ vpsrlw $4, %ymm1, %ymm3
|
|
|
+ vpblendw $0xaa, %ymm2, %ymm0, %ymm0
|
|
|
+ vpblendw $0xaa, %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpcmpgtw %ymm0, %ymm6, %ymm2
|
|
|
+ vpcmpgtw %ymm1, %ymm6, %ymm3
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm2, %rbx
|
|
|
+ movzbl %bl, %r10d
|
|
|
+ movzbl %bh, %ecx
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ shrq $16, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r11
|
|
|
+ andq $0xff, %r12
|
|
|
+ movq (%r9,%r10,8), %xmm2
|
|
|
+ movq (%r9,%rcx,8), %xmm3
|
|
|
+ movq (%r9,%r11,8), %xmm4
|
|
|
+ movq (%r9,%r12,8), %xmm5
|
|
|
+ vinserti128 $0x01, %xmm4, %ymm2, %ymm2
|
|
|
+ vinserti128 $0x01, %xmm5, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm7, %ymm2, %ymm4
|
|
|
+ vpaddb %ymm7, %ymm3, %ymm5
|
|
|
+ vpunpcklbw %ymm4, %ymm2, %ymm2
|
|
|
+ vpunpcklbw %ymm5, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm3, %ymm1, %ymm1
|
|
|
+ movq %rbx, %r10
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ andq $0xff, %rbx
|
|
|
+ shrq $16, %r10
|
|
|
+ shrq $8, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r10
|
|
|
+ andq $0xff, %r11
|
|
|
+ popcntl %ebx, %ebx
|
|
|
+ popcntl %r10d, %r10d
|
|
|
+ popcntl %r11d, %r11d
|
|
|
+ popcntl %r12d, %r12d
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm0
|
|
|
+ leaq (%rdi,%rbx,2), %rdi
|
|
|
+ subl %ebx, %esi
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ leaq (%rdi,%r10,2), %rdi
|
|
|
+ subl %r10d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm1
|
|
|
+ leaq (%rdi,%r11,2), %rdi
|
|
|
+ subl %r11d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ leaq (%rdi,%r12,2), %rdi
|
|
|
+ subl %r12d, %esi
|
|
|
+ vpermq $0x94, 240(%rdx), %ymm0
|
|
|
+ vpermq $0x94, 264(%rdx), %ymm1
|
|
|
+ vpshufb %ymm9, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm9, %ymm1, %ymm1
|
|
|
+ vpsrlw $4, %ymm0, %ymm2
|
|
|
+ vpsrlw $4, %ymm1, %ymm3
|
|
|
+ vpblendw $0xaa, %ymm2, %ymm0, %ymm0
|
|
|
+ vpblendw $0xaa, %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpcmpgtw %ymm0, %ymm6, %ymm2
|
|
|
+ vpcmpgtw %ymm1, %ymm6, %ymm3
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm2, %rbx
|
|
|
+ movzbl %bl, %r10d
|
|
|
+ movzbl %bh, %ecx
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ shrq $16, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r11
|
|
|
+ andq $0xff, %r12
|
|
|
+ movq (%r9,%r10,8), %xmm2
|
|
|
+ movq (%r9,%rcx,8), %xmm3
|
|
|
+ movq (%r9,%r11,8), %xmm4
|
|
|
+ movq (%r9,%r12,8), %xmm5
|
|
|
+ vinserti128 $0x01, %xmm4, %ymm2, %ymm2
|
|
|
+ vinserti128 $0x01, %xmm5, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm7, %ymm2, %ymm4
|
|
|
+ vpaddb %ymm7, %ymm3, %ymm5
|
|
|
+ vpunpcklbw %ymm4, %ymm2, %ymm2
|
|
|
+ vpunpcklbw %ymm5, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm3, %ymm1, %ymm1
|
|
|
+ movq %rbx, %r10
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ andq $0xff, %rbx
|
|
|
+ shrq $16, %r10
|
|
|
+ shrq $8, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r10
|
|
|
+ andq $0xff, %r11
|
|
|
+ popcntl %ebx, %ebx
|
|
|
+ popcntl %r10d, %r10d
|
|
|
+ popcntl %r11d, %r11d
|
|
|
+ popcntl %r12d, %r12d
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm0
|
|
|
+ leaq (%rdi,%rbx,2), %rdi
|
|
|
+ subl %ebx, %esi
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ leaq (%rdi,%r10,2), %rdi
|
|
|
+ subl %r10d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm1
|
|
|
+ leaq (%rdi,%r11,2), %rdi
|
|
|
+ subl %r11d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ leaq (%rdi,%r12,2), %rdi
|
|
|
+ subl %r12d, %esi
|
|
|
+ vpermq $0x94, 288(%rdx), %ymm0
|
|
|
+ vpermq $0x94, 312(%rdx), %ymm1
|
|
|
+ vpshufb %ymm9, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm9, %ymm1, %ymm1
|
|
|
+ vpsrlw $4, %ymm0, %ymm2
|
|
|
+ vpsrlw $4, %ymm1, %ymm3
|
|
|
+ vpblendw $0xaa, %ymm2, %ymm0, %ymm0
|
|
|
+ vpblendw $0xaa, %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpcmpgtw %ymm0, %ymm6, %ymm2
|
|
|
+ vpcmpgtw %ymm1, %ymm6, %ymm3
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm2, %rbx
|
|
|
+ movzbl %bl, %r10d
|
|
|
+ movzbl %bh, %ecx
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ shrq $16, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r11
|
|
|
+ andq $0xff, %r12
|
|
|
+ movq (%r9,%r10,8), %xmm2
|
|
|
+ movq (%r9,%rcx,8), %xmm3
|
|
|
+ movq (%r9,%r11,8), %xmm4
|
|
|
+ movq (%r9,%r12,8), %xmm5
|
|
|
+ vinserti128 $0x01, %xmm4, %ymm2, %ymm2
|
|
|
+ vinserti128 $0x01, %xmm5, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm7, %ymm2, %ymm4
|
|
|
+ vpaddb %ymm7, %ymm3, %ymm5
|
|
|
+ vpunpcklbw %ymm4, %ymm2, %ymm2
|
|
|
+ vpunpcklbw %ymm5, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm3, %ymm1, %ymm1
|
|
|
+ movq %rbx, %r10
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ andq $0xff, %rbx
|
|
|
+ shrq $16, %r10
|
|
|
+ shrq $8, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r10
|
|
|
+ andq $0xff, %r11
|
|
|
+ popcntl %ebx, %ebx
|
|
|
+ popcntl %r10d, %r10d
|
|
|
+ popcntl %r11d, %r11d
|
|
|
+ popcntl %r12d, %r12d
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm0
|
|
|
+ leaq (%rdi,%rbx,2), %rdi
|
|
|
+ subl %ebx, %esi
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ leaq (%rdi,%r10,2), %rdi
|
|
|
+ subl %r10d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm1
|
|
|
+ leaq (%rdi,%r11,2), %rdi
|
|
|
+ subl %r11d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ leaq (%rdi,%r12,2), %rdi
|
|
|
+ subl %r12d, %esi
|
|
|
+ addq $0x150, %rdx
|
|
|
+ subl $0x150, %r8d
|
|
|
+L_kyber_rej_uniform_n_avx2_start_256:
|
|
|
+ vpermq $0x94, (%rdx), %ymm0
|
|
|
+ vpermq $0x94, 24(%rdx), %ymm1
|
|
|
+ vpshufb %ymm9, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm9, %ymm1, %ymm1
|
|
|
+ vpsrlw $4, %ymm0, %ymm2
|
|
|
+ vpsrlw $4, %ymm1, %ymm3
|
|
|
+ vpblendw $0xaa, %ymm2, %ymm0, %ymm0
|
|
|
+ vpblendw $0xaa, %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpcmpgtw %ymm0, %ymm6, %ymm2
|
|
|
+ vpcmpgtw %ymm1, %ymm6, %ymm3
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm2, %rbx
|
|
|
+ movzbl %bl, %r10d
|
|
|
+ movzbl %bh, %ecx
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ shrq $16, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r11
|
|
|
+ andq $0xff, %r12
|
|
|
+ movq (%r9,%r10,8), %xmm2
|
|
|
+ movq (%r9,%rcx,8), %xmm3
|
|
|
+ movq (%r9,%r11,8), %xmm4
|
|
|
+ movq (%r9,%r12,8), %xmm5
|
|
|
+ vinserti128 $0x01, %xmm4, %ymm2, %ymm2
|
|
|
+ vinserti128 $0x01, %xmm5, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm7, %ymm2, %ymm4
|
|
|
+ vpaddb %ymm7, %ymm3, %ymm5
|
|
|
+ vpunpcklbw %ymm4, %ymm2, %ymm2
|
|
|
+ vpunpcklbw %ymm5, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm3, %ymm1, %ymm1
|
|
|
+ movq %rbx, %r10
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ andq $0xff, %rbx
|
|
|
+ shrq $16, %r10
|
|
|
+ shrq $8, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r10
|
|
|
+ andq $0xff, %r11
|
|
|
+ popcntl %ebx, %ebx
|
|
|
+ popcntl %r10d, %r10d
|
|
|
+ popcntl %r11d, %r11d
|
|
|
+ popcntl %r12d, %r12d
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm0
|
|
|
+ leaq (%rdi,%rbx,2), %rdi
|
|
|
+ subl %ebx, %esi
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ leaq (%rdi,%r10,2), %rdi
|
|
|
+ subl %r10d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm1
|
|
|
+ leaq (%rdi,%r11,2), %rdi
|
|
|
+ subl %r11d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ leaq (%rdi,%r12,2), %rdi
|
|
|
+ subl %r12d, %esi
|
|
|
+ addq $48, %rdx
|
|
|
+ subl $48, %r8d
|
|
|
+ cmpl $48, %r8d
|
|
|
+ jl L_kyber_rej_uniform_n_avx2_done_256
|
|
|
+ cmpl $32, %esi
|
|
|
+ jge L_kyber_rej_uniform_n_avx2_start_256
|
|
|
+L_kyber_rej_uniform_n_avx2_done_256:
|
|
|
+ cmpl $8, %esi
|
|
|
+ jl L_kyber_rej_uniform_n_avx2_done_128
|
|
|
+ cmpl $12, %r8d
|
|
|
+ jl L_kyber_rej_uniform_n_avx2_done_128
|
|
|
+L_kyber_rej_uniform_n_avx2_start_128:
|
|
|
+ vmovdqu (%rdx), %xmm0
|
|
|
+ vpshufb %xmm9, %xmm0, %xmm0
|
|
|
+ vpsrlw $4, %xmm0, %xmm2
|
|
|
+ vpblendw $0xaa, %xmm2, %xmm0, %xmm0
|
|
|
+ vpand %xmm8, %xmm0, %xmm0
|
|
|
+ vpcmpgtw %xmm0, %xmm6, %xmm2
|
|
|
+ vpmovmskb %xmm2, %rbx
|
|
|
+ movq $0x5555, %r10
|
|
|
+ pextl %r10d, %ebx, %ebx
|
|
|
+ movq (%r9,%rbx,8), %xmm3
|
|
|
+ vpaddb %xmm7, %xmm3, %xmm4
|
|
|
+ vpunpcklbw %xmm4, %xmm3, %xmm3
|
|
|
+ vpshufb %xmm3, %xmm0, %xmm0
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ popcntl %ebx, %ecx
|
|
|
+ leaq (%rdi,%rcx,2), %rdi
|
|
|
+ subl %ecx, %esi
|
|
|
+ addq $12, %rdx
|
|
|
+ subl $12, %r8d
|
|
|
+ cmpl $12, %r8d
|
|
|
+ jl L_kyber_rej_uniform_n_avx2_done_128
|
|
|
+ cmpl $8, %esi
|
|
|
+ jge L_kyber_rej_uniform_n_avx2_start_128
|
|
|
+L_kyber_rej_uniform_n_avx2_done_128:
|
|
|
+ cmpl $0x00, %r8d
|
|
|
+ je L_kyber_rej_uniform_n_avx2_done_64
|
|
|
+ cmpl $0x00, %esi
|
|
|
+ je L_kyber_rej_uniform_n_avx2_done_64
|
|
|
+ movq $0xfff0fff0fff0fff, %r15
|
|
|
+ movq $0x2000200020002000, %r10
|
|
|
+ movq $0xd010d010d010d01, %r11
|
|
|
+ movq $0x1000100010001000, %r12
|
|
|
+L_kyber_rej_uniform_n_avx2_start_64:
|
|
|
+ movq (%rdx), %rcx
|
|
|
+ pdepq %r15, %rcx, %rcx
|
|
|
+ cmpw $0xd01, %cx
|
|
|
+ jge L_kyber_rej_uniform_0_avx2_rej_large_0
|
|
|
+ movw %cx, (%rdi)
|
|
|
+ addq $2, %rdi
|
|
|
+ subl $0x01, %esi
|
|
|
+ je L_kyber_rej_uniform_n_avx2_done_64
|
|
|
+L_kyber_rej_uniform_0_avx2_rej_large_0:
|
|
|
+ shrq $16, %rcx
|
|
|
+ cmpw $0xd01, %cx
|
|
|
+ jge L_kyber_rej_uniform_0_avx2_rej_large_1
|
|
|
+ movw %cx, (%rdi)
|
|
|
+ addq $2, %rdi
|
|
|
+ subl $0x01, %esi
|
|
|
+ je L_kyber_rej_uniform_n_avx2_done_64
|
|
|
+L_kyber_rej_uniform_0_avx2_rej_large_1:
|
|
|
+ shrq $16, %rcx
|
|
|
+ cmpw $0xd01, %cx
|
|
|
+ jge L_kyber_rej_uniform_0_avx2_rej_large_2
|
|
|
+ movw %cx, (%rdi)
|
|
|
+ addq $2, %rdi
|
|
|
+ subl $0x01, %esi
|
|
|
+ je L_kyber_rej_uniform_n_avx2_done_64
|
|
|
+L_kyber_rej_uniform_0_avx2_rej_large_2:
|
|
|
+ shrq $16, %rcx
|
|
|
+ cmpw $0xd01, %cx
|
|
|
+ jge L_kyber_rej_uniform_0_avx2_rej_large_3
|
|
|
+ movw %cx, (%rdi)
|
|
|
+ addq $2, %rdi
|
|
|
+ subl $0x01, %esi
|
|
|
+ je L_kyber_rej_uniform_n_avx2_done_64
|
|
|
+L_kyber_rej_uniform_0_avx2_rej_large_3:
|
|
|
+ addq $6, %rdx
|
|
|
+ subl $6, %r8d
|
|
|
+ jle L_kyber_rej_uniform_n_avx2_done_64
|
|
|
+ cmpl $0x00, %esi
|
|
|
+ jg L_kyber_rej_uniform_n_avx2_start_64
|
|
|
+L_kyber_rej_uniform_n_avx2_done_64:
|
|
|
+ vzeroupper
|
|
|
+ subl %esi, %eax
|
|
|
+ popq %rbp
|
|
|
+ popq %r15
|
|
|
+ popq %r14
|
|
|
+ popq %r13
|
|
|
+ popq %r12
|
|
|
+ popq %rbx
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_rej_uniform_n_avx2,.-kyber_rej_uniform_n_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_rej_uniform_avx2
|
|
|
+.type kyber_rej_uniform_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_rej_uniform_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_rej_uniform_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_rej_uniform_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ pushq %rbx
|
|
|
+ pushq %r12
|
|
|
+ pushq %r13
|
|
|
+ pushq %r14
|
|
|
+ pushq %r15
|
|
|
+ pushq %rbp
|
|
|
+ movq %rcx, %r8
|
|
|
+ movl %esi, %eax
|
|
|
+ cmpl $0x00, %esi
|
|
|
+ je L_kyber_rej_uniform_avx2_done_64
|
|
|
+ cmpl $8, %esi
|
|
|
+ jl L_kyber_rej_uniform_avx2_done_128
|
|
|
+ vmovdqu L_kyber_rej_q(%rip), %ymm6
|
|
|
+ vmovdqu L_kyber_rej_ones(%rip), %ymm7
|
|
|
+ vmovdqu L_kyber_rej_mask(%rip), %ymm8
|
|
|
+ vmovdqu L_kyber_rej_shuffle(%rip), %ymm9
|
|
|
+ leaq L_kyber_rej_idx(%rip), %r9
|
|
|
+ movq $0x1111111111111111, %r14
|
|
|
+ movq $0xe0c0a0806040200, %rbp
|
|
|
+ movq $0x101010101010101, %r13
|
|
|
+ cmpl $32, %esi
|
|
|
+ jl L_kyber_rej_uniform_avx2_done_256
|
|
|
+ vpermq $0x94, (%rdx), %ymm0
|
|
|
+ vpermq $0x94, 24(%rdx), %ymm1
|
|
|
+ vpshufb %ymm9, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm9, %ymm1, %ymm1
|
|
|
+ vpsrlw $4, %ymm0, %ymm2
|
|
|
+ vpsrlw $4, %ymm1, %ymm3
|
|
|
+ vpblendw $0xaa, %ymm2, %ymm0, %ymm0
|
|
|
+ vpblendw $0xaa, %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpcmpgtw %ymm0, %ymm6, %ymm2
|
|
|
+ vpcmpgtw %ymm1, %ymm6, %ymm3
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm2, %rbx
|
|
|
+ movzbl %bl, %r10d
|
|
|
+ movzbl %bh, %ecx
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ shrq $16, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r11
|
|
|
+ andq $0xff, %r12
|
|
|
+ movq (%r9,%r10,8), %xmm2
|
|
|
+ movq (%r9,%rcx,8), %xmm3
|
|
|
+ movq (%r9,%r11,8), %xmm4
|
|
|
+ movq (%r9,%r12,8), %xmm5
|
|
|
+ vinserti128 $0x01, %xmm4, %ymm2, %ymm2
|
|
|
+ vinserti128 $0x01, %xmm5, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm7, %ymm2, %ymm4
|
|
|
+ vpaddb %ymm7, %ymm3, %ymm5
|
|
|
+ vpunpcklbw %ymm4, %ymm2, %ymm2
|
|
|
+ vpunpcklbw %ymm5, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm3, %ymm1, %ymm1
|
|
|
+ movq %rbx, %r10
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ andq $0xff, %rbx
|
|
|
+ shrq $16, %r10
|
|
|
+ shrq $8, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r10
|
|
|
+ andq $0xff, %r11
|
|
|
+ popcntl %ebx, %ebx
|
|
|
+ popcntl %r10d, %r10d
|
|
|
+ popcntl %r11d, %r11d
|
|
|
+ popcntl %r12d, %r12d
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm0
|
|
|
+ leaq (%rdi,%rbx,2), %rdi
|
|
|
+ subl %ebx, %esi
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ leaq (%rdi,%r10,2), %rdi
|
|
|
+ subl %r10d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm1
|
|
|
+ leaq (%rdi,%r11,2), %rdi
|
|
|
+ subl %r11d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ leaq (%rdi,%r12,2), %rdi
|
|
|
+ subl %r12d, %esi
|
|
|
+ addq $48, %rdx
|
|
|
+ subl $48, %r8d
|
|
|
+ cmpl $32, %esi
|
|
|
+ jl L_kyber_rej_uniform_avx2_done_256
|
|
|
+ vpermq $0x94, (%rdx), %ymm0
|
|
|
+ vpermq $0x94, 24(%rdx), %ymm1
|
|
|
+ vpshufb %ymm9, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm9, %ymm1, %ymm1
|
|
|
+ vpsrlw $4, %ymm0, %ymm2
|
|
|
+ vpsrlw $4, %ymm1, %ymm3
|
|
|
+ vpblendw $0xaa, %ymm2, %ymm0, %ymm0
|
|
|
+ vpblendw $0xaa, %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpcmpgtw %ymm0, %ymm6, %ymm2
|
|
|
+ vpcmpgtw %ymm1, %ymm6, %ymm3
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm2, %rbx
|
|
|
+ movzbl %bl, %r10d
|
|
|
+ movzbl %bh, %ecx
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ shrq $16, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r11
|
|
|
+ andq $0xff, %r12
|
|
|
+ movq (%r9,%r10,8), %xmm2
|
|
|
+ movq (%r9,%rcx,8), %xmm3
|
|
|
+ movq (%r9,%r11,8), %xmm4
|
|
|
+ movq (%r9,%r12,8), %xmm5
|
|
|
+ vinserti128 $0x01, %xmm4, %ymm2, %ymm2
|
|
|
+ vinserti128 $0x01, %xmm5, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm7, %ymm2, %ymm4
|
|
|
+ vpaddb %ymm7, %ymm3, %ymm5
|
|
|
+ vpunpcklbw %ymm4, %ymm2, %ymm2
|
|
|
+ vpunpcklbw %ymm5, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm3, %ymm1, %ymm1
|
|
|
+ movq %rbx, %r10
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ andq $0xff, %rbx
|
|
|
+ shrq $16, %r10
|
|
|
+ shrq $8, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r10
|
|
|
+ andq $0xff, %r11
|
|
|
+ popcntl %ebx, %ebx
|
|
|
+ popcntl %r10d, %r10d
|
|
|
+ popcntl %r11d, %r11d
|
|
|
+ popcntl %r12d, %r12d
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm0
|
|
|
+ leaq (%rdi,%rbx,2), %rdi
|
|
|
+ subl %ebx, %esi
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ leaq (%rdi,%r10,2), %rdi
|
|
|
+ subl %r10d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm1
|
|
|
+ leaq (%rdi,%r11,2), %rdi
|
|
|
+ subl %r11d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ leaq (%rdi,%r12,2), %rdi
|
|
|
+ subl %r12d, %esi
|
|
|
+ addq $48, %rdx
|
|
|
+ subl $48, %r8d
|
|
|
+ cmpl $32, %esi
|
|
|
+ jl L_kyber_rej_uniform_avx2_done_256
|
|
|
+L_kyber_rej_uniform_avx2_start_256:
|
|
|
+ vpermq $0x94, (%rdx), %ymm0
|
|
|
+ vpermq $0x94, 24(%rdx), %ymm1
|
|
|
+ vpshufb %ymm9, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm9, %ymm1, %ymm1
|
|
|
+ vpsrlw $4, %ymm0, %ymm2
|
|
|
+ vpsrlw $4, %ymm1, %ymm3
|
|
|
+ vpblendw $0xaa, %ymm2, %ymm0, %ymm0
|
|
|
+ vpblendw $0xaa, %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpcmpgtw %ymm0, %ymm6, %ymm2
|
|
|
+ vpcmpgtw %ymm1, %ymm6, %ymm3
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm2, %rbx
|
|
|
+ movzbl %bl, %r10d
|
|
|
+ movzbl %bh, %ecx
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ shrq $16, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r11
|
|
|
+ andq $0xff, %r12
|
|
|
+ movq (%r9,%r10,8), %xmm2
|
|
|
+ movq (%r9,%rcx,8), %xmm3
|
|
|
+ movq (%r9,%r11,8), %xmm4
|
|
|
+ movq (%r9,%r12,8), %xmm5
|
|
|
+ vinserti128 $0x01, %xmm4, %ymm2, %ymm2
|
|
|
+ vinserti128 $0x01, %xmm5, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm7, %ymm2, %ymm4
|
|
|
+ vpaddb %ymm7, %ymm3, %ymm5
|
|
|
+ vpunpcklbw %ymm4, %ymm2, %ymm2
|
|
|
+ vpunpcklbw %ymm5, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm3, %ymm1, %ymm1
|
|
|
+ movq %rbx, %r10
|
|
|
+ movq %rbx, %r11
|
|
|
+ movq %rbx, %r12
|
|
|
+ andq $0xff, %rbx
|
|
|
+ shrq $16, %r10
|
|
|
+ shrq $8, %r11
|
|
|
+ shrq $24, %r12
|
|
|
+ andq $0xff, %r10
|
|
|
+ andq $0xff, %r11
|
|
|
+ popcntl %ebx, %ebx
|
|
|
+ popcntl %r10d, %r10d
|
|
|
+ popcntl %r11d, %r11d
|
|
|
+ popcntl %r12d, %r12d
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm0
|
|
|
+ leaq (%rdi,%rbx,2), %rdi
|
|
|
+ subl %ebx, %esi
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ leaq (%rdi,%r10,2), %rdi
|
|
|
+ subl %r10d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm1
|
|
|
+ leaq (%rdi,%r11,2), %rdi
|
|
|
+ subl %r11d, %esi
|
|
|
+ vmovdqu %xmm1, (%rdi)
|
|
|
+ leaq (%rdi,%r12,2), %rdi
|
|
|
+ subl %r12d, %esi
|
|
|
+ addq $48, %rdx
|
|
|
+ subl $48, %r8d
|
|
|
+ cmpl $48, %r8d
|
|
|
+ jl L_kyber_rej_uniform_avx2_done_256
|
|
|
+ cmpl $32, %esi
|
|
|
+ jge L_kyber_rej_uniform_avx2_start_256
|
|
|
+L_kyber_rej_uniform_avx2_done_256:
|
|
|
+ cmpl $8, %esi
|
|
|
+ jl L_kyber_rej_uniform_avx2_done_128
|
|
|
+ cmpl $12, %r8d
|
|
|
+ jl L_kyber_rej_uniform_avx2_done_128
|
|
|
+L_kyber_rej_uniform_avx2_start_128:
|
|
|
+ vmovdqu (%rdx), %xmm0
|
|
|
+ vpshufb %xmm9, %xmm0, %xmm0
|
|
|
+ vpsrlw $4, %xmm0, %xmm2
|
|
|
+ vpblendw $0xaa, %xmm2, %xmm0, %xmm0
|
|
|
+ vpand %xmm8, %xmm0, %xmm0
|
|
|
+ vpcmpgtw %xmm0, %xmm6, %xmm2
|
|
|
+ vpmovmskb %xmm2, %rbx
|
|
|
+ movq $0x5555, %r10
|
|
|
+ pextl %r10d, %ebx, %ebx
|
|
|
+ movq (%r9,%rbx,8), %xmm3
|
|
|
+ vpaddb %xmm7, %xmm3, %xmm4
|
|
|
+ vpunpcklbw %xmm4, %xmm3, %xmm3
|
|
|
+ vpshufb %xmm3, %xmm0, %xmm0
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ popcntl %ebx, %ecx
|
|
|
+ leaq (%rdi,%rcx,2), %rdi
|
|
|
+ subl %ecx, %esi
|
|
|
+ addq $12, %rdx
|
|
|
+ subl $12, %r8d
|
|
|
+ cmpl $12, %r8d
|
|
|
+ jl L_kyber_rej_uniform_avx2_done_128
|
|
|
+ cmpl $8, %esi
|
|
|
+ jge L_kyber_rej_uniform_avx2_start_128
|
|
|
+L_kyber_rej_uniform_avx2_done_128:
|
|
|
+ cmpl $0x00, %r8d
|
|
|
+ je L_kyber_rej_uniform_avx2_done_64
|
|
|
+ cmpl $0x00, %esi
|
|
|
+ je L_kyber_rej_uniform_avx2_done_64
|
|
|
+ movq $0xfff0fff0fff0fff, %r15
|
|
|
+ movq $0x2000200020002000, %r10
|
|
|
+ movq $0xd010d010d010d01, %r11
|
|
|
+ movq $0x1000100010001000, %r12
|
|
|
+L_kyber_rej_uniform_avx2_start_64:
|
|
|
+ movq (%rdx), %rcx
|
|
|
+ pdepq %r15, %rcx, %rcx
|
|
|
+ cmpw $0xd01, %cx
|
|
|
+ jge L_kyber_rej_uniform_avx2_rej_large_0
|
|
|
+ movw %cx, (%rdi)
|
|
|
+ addq $2, %rdi
|
|
|
+ subl $0x01, %esi
|
|
|
+ je L_kyber_rej_uniform_avx2_done_64
|
|
|
+L_kyber_rej_uniform_avx2_rej_large_0:
|
|
|
+ shrq $16, %rcx
|
|
|
+ cmpw $0xd01, %cx
|
|
|
+ jge L_kyber_rej_uniform_avx2_rej_large_1
|
|
|
+ movw %cx, (%rdi)
|
|
|
+ addq $2, %rdi
|
|
|
+ subl $0x01, %esi
|
|
|
+ je L_kyber_rej_uniform_avx2_done_64
|
|
|
+L_kyber_rej_uniform_avx2_rej_large_1:
|
|
|
+ shrq $16, %rcx
|
|
|
+ cmpw $0xd01, %cx
|
|
|
+ jge L_kyber_rej_uniform_avx2_rej_large_2
|
|
|
+ movw %cx, (%rdi)
|
|
|
+ addq $2, %rdi
|
|
|
+ subl $0x01, %esi
|
|
|
+ je L_kyber_rej_uniform_avx2_done_64
|
|
|
+L_kyber_rej_uniform_avx2_rej_large_2:
|
|
|
+ shrq $16, %rcx
|
|
|
+ cmpw $0xd01, %cx
|
|
|
+ jge L_kyber_rej_uniform_avx2_rej_large_3
|
|
|
+ movw %cx, (%rdi)
|
|
|
+ addq $2, %rdi
|
|
|
+ subl $0x01, %esi
|
|
|
+ je L_kyber_rej_uniform_avx2_done_64
|
|
|
+L_kyber_rej_uniform_avx2_rej_large_3:
|
|
|
+ addq $6, %rdx
|
|
|
+ subl $6, %r8d
|
|
|
+ jle L_kyber_rej_uniform_avx2_done_64
|
|
|
+ cmpl $0x00, %esi
|
|
|
+ jg L_kyber_rej_uniform_avx2_start_64
|
|
|
+L_kyber_rej_uniform_avx2_done_64:
|
|
|
+ vzeroupper
|
|
|
+ subl %esi, %eax
|
|
|
+ popq %rbp
|
|
|
+ popq %r15
|
|
|
+ popq %r14
|
|
|
+ popq %r13
|
|
|
+ popq %r12
|
|
|
+ popq %rbx
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_rej_uniform_avx2,.-kyber_rej_uniform_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_mask_249:
|
|
|
+.quad 0x24924900249249, 0x24924900249249
|
|
|
+.quad 0x24924900249249, 0x24924900249249
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_mask_6db:
|
|
|
+.quad 0x6db6db006db6db, 0x6db6db006db6db
|
|
|
+.quad 0x6db6db006db6db, 0x6db6db006db6db
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_mask_07:
|
|
|
+.quad 0x700000007, 0x700000007
|
|
|
+.quad 0x700000007, 0x700000007
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_mask_70:
|
|
|
+.quad 0x7000000070000, 0x7000000070000
|
|
|
+.quad 0x7000000070000, 0x7000000070000
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_mask_3:
|
|
|
+.quad 0x3000300030003, 0x3000300030003
|
|
|
+.quad 0x3000300030003, 0x3000300030003
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_shuff:
|
|
|
+.quad 0xff050403ff020100, 0xff0b0a09ff080706
|
|
|
+.quad 0xff090807ff060504, 0xff0f0e0dff0c0b0a
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_cbd_eta3_avx2
|
|
|
+.type kyber_cbd_eta3_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_cbd_eta3_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_cbd_eta3_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_cbd_eta3_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu L_kyber_mask_249(%rip), %ymm8
|
|
|
+ vmovdqu L_kyber_mask_6db(%rip), %ymm9
|
|
|
+ vmovdqu L_kyber_mask_07(%rip), %ymm10
|
|
|
+ vmovdqu L_kyber_mask_70(%rip), %ymm11
|
|
|
+ vmovdqu L_kyber_mask_3(%rip), %ymm12
|
|
|
+ vmovdqu L_kyber_shuff(%rip), %ymm13
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu 24(%rsi), %ymm1
|
|
|
+ vpermq $0x94, %ymm0, %ymm0
|
|
|
+ vpermq $0x94, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm13, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm13, %ymm1, %ymm1
|
|
|
+ vpsrld $0x01, %ymm0, %ymm2
|
|
|
+ vpsrld $0x01, %ymm1, %ymm3
|
|
|
+ vpsrld $2, %ymm0, %ymm4
|
|
|
+ vpsrld $2, %ymm1, %ymm5
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm2, %ymm2
|
|
|
+ vpand %ymm8, %ymm3, %ymm3
|
|
|
+ vpand %ymm8, %ymm4, %ymm4
|
|
|
+ vpand %ymm8, %ymm5, %ymm5
|
|
|
+ vpaddd %ymm2, %ymm0, %ymm0
|
|
|
+ vpaddd %ymm3, %ymm1, %ymm1
|
|
|
+ vpaddd %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddd %ymm5, %ymm1, %ymm1
|
|
|
+ vpsrld $3, %ymm0, %ymm2
|
|
|
+ vpsrld $3, %ymm1, %ymm3
|
|
|
+ vpaddd %ymm9, %ymm0, %ymm0
|
|
|
+ vpaddd %ymm9, %ymm1, %ymm1
|
|
|
+ vpsubd %ymm2, %ymm0, %ymm0
|
|
|
+ vpsubd %ymm3, %ymm1, %ymm1
|
|
|
+ vpslld $10, %ymm0, %ymm2
|
|
|
+ vpslld $10, %ymm1, %ymm3
|
|
|
+ vpsrld $12, %ymm0, %ymm4
|
|
|
+ vpsrld $12, %ymm1, %ymm5
|
|
|
+ vpsrld $2, %ymm0, %ymm6
|
|
|
+ vpsrld $2, %ymm1, %ymm7
|
|
|
+ vpand %ymm10, %ymm0, %ymm0
|
|
|
+ vpand %ymm10, %ymm1, %ymm1
|
|
|
+ vpand %ymm11, %ymm2, %ymm2
|
|
|
+ vpand %ymm11, %ymm3, %ymm3
|
|
|
+ vpand %ymm10, %ymm4, %ymm4
|
|
|
+ vpand %ymm10, %ymm5, %ymm5
|
|
|
+ vpand %ymm11, %ymm6, %ymm6
|
|
|
+ vpand %ymm11, %ymm7, %ymm7
|
|
|
+ vpaddw %ymm2, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm3, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm4, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm5, %ymm3
|
|
|
+ vpsubw %ymm12, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm12, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm12, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm12, %ymm3, %ymm3
|
|
|
+ vpunpckldq %ymm2, %ymm0, %ymm4
|
|
|
+ vpunpckldq %ymm3, %ymm1, %ymm5
|
|
|
+ vpunpckhdq %ymm2, %ymm0, %ymm6
|
|
|
+ vpunpckhdq %ymm3, %ymm1, %ymm7
|
|
|
+ vperm2i128 $32, %ymm6, %ymm4, %ymm0
|
|
|
+ vperm2i128 $32, %ymm7, %ymm5, %ymm1
|
|
|
+ vperm2i128 $49, %ymm6, %ymm4, %ymm2
|
|
|
+ vperm2i128 $49, %ymm7, %ymm5, %ymm3
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm2, 32(%rdi)
|
|
|
+ vmovdqu %ymm1, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vmovdqu 48(%rsi), %ymm0
|
|
|
+ vmovdqu 72(%rsi), %ymm1
|
|
|
+ vpermq $0x94, %ymm0, %ymm0
|
|
|
+ vpermq $0x94, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm13, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm13, %ymm1, %ymm1
|
|
|
+ vpsrld $0x01, %ymm0, %ymm2
|
|
|
+ vpsrld $0x01, %ymm1, %ymm3
|
|
|
+ vpsrld $2, %ymm0, %ymm4
|
|
|
+ vpsrld $2, %ymm1, %ymm5
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm2, %ymm2
|
|
|
+ vpand %ymm8, %ymm3, %ymm3
|
|
|
+ vpand %ymm8, %ymm4, %ymm4
|
|
|
+ vpand %ymm8, %ymm5, %ymm5
|
|
|
+ vpaddd %ymm2, %ymm0, %ymm0
|
|
|
+ vpaddd %ymm3, %ymm1, %ymm1
|
|
|
+ vpaddd %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddd %ymm5, %ymm1, %ymm1
|
|
|
+ vpsrld $3, %ymm0, %ymm2
|
|
|
+ vpsrld $3, %ymm1, %ymm3
|
|
|
+ vpaddd %ymm9, %ymm0, %ymm0
|
|
|
+ vpaddd %ymm9, %ymm1, %ymm1
|
|
|
+ vpsubd %ymm2, %ymm0, %ymm0
|
|
|
+ vpsubd %ymm3, %ymm1, %ymm1
|
|
|
+ vpslld $10, %ymm0, %ymm2
|
|
|
+ vpslld $10, %ymm1, %ymm3
|
|
|
+ vpsrld $12, %ymm0, %ymm4
|
|
|
+ vpsrld $12, %ymm1, %ymm5
|
|
|
+ vpsrld $2, %ymm0, %ymm6
|
|
|
+ vpsrld $2, %ymm1, %ymm7
|
|
|
+ vpand %ymm10, %ymm0, %ymm0
|
|
|
+ vpand %ymm10, %ymm1, %ymm1
|
|
|
+ vpand %ymm11, %ymm2, %ymm2
|
|
|
+ vpand %ymm11, %ymm3, %ymm3
|
|
|
+ vpand %ymm10, %ymm4, %ymm4
|
|
|
+ vpand %ymm10, %ymm5, %ymm5
|
|
|
+ vpand %ymm11, %ymm6, %ymm6
|
|
|
+ vpand %ymm11, %ymm7, %ymm7
|
|
|
+ vpaddw %ymm2, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm3, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm4, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm5, %ymm3
|
|
|
+ vpsubw %ymm12, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm12, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm12, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm12, %ymm3, %ymm3
|
|
|
+ vpunpckldq %ymm2, %ymm0, %ymm4
|
|
|
+ vpunpckldq %ymm3, %ymm1, %ymm5
|
|
|
+ vpunpckhdq %ymm2, %ymm0, %ymm6
|
|
|
+ vpunpckhdq %ymm3, %ymm1, %ymm7
|
|
|
+ vperm2i128 $32, %ymm6, %ymm4, %ymm0
|
|
|
+ vperm2i128 $32, %ymm7, %ymm5, %ymm1
|
|
|
+ vperm2i128 $49, %ymm6, %ymm4, %ymm2
|
|
|
+ vperm2i128 $49, %ymm7, %ymm5, %ymm3
|
|
|
+ vmovdqu %ymm0, 128(%rdi)
|
|
|
+ vmovdqu %ymm2, 160(%rdi)
|
|
|
+ vmovdqu %ymm1, 192(%rdi)
|
|
|
+ vmovdqu %ymm3, 224(%rdi)
|
|
|
+ vmovdqu 96(%rsi), %ymm0
|
|
|
+ vmovdqu 120(%rsi), %ymm1
|
|
|
+ vpermq $0x94, %ymm0, %ymm0
|
|
|
+ vpermq $0x94, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm13, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm13, %ymm1, %ymm1
|
|
|
+ vpsrld $0x01, %ymm0, %ymm2
|
|
|
+ vpsrld $0x01, %ymm1, %ymm3
|
|
|
+ vpsrld $2, %ymm0, %ymm4
|
|
|
+ vpsrld $2, %ymm1, %ymm5
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm2, %ymm2
|
|
|
+ vpand %ymm8, %ymm3, %ymm3
|
|
|
+ vpand %ymm8, %ymm4, %ymm4
|
|
|
+ vpand %ymm8, %ymm5, %ymm5
|
|
|
+ vpaddd %ymm2, %ymm0, %ymm0
|
|
|
+ vpaddd %ymm3, %ymm1, %ymm1
|
|
|
+ vpaddd %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddd %ymm5, %ymm1, %ymm1
|
|
|
+ vpsrld $3, %ymm0, %ymm2
|
|
|
+ vpsrld $3, %ymm1, %ymm3
|
|
|
+ vpaddd %ymm9, %ymm0, %ymm0
|
|
|
+ vpaddd %ymm9, %ymm1, %ymm1
|
|
|
+ vpsubd %ymm2, %ymm0, %ymm0
|
|
|
+ vpsubd %ymm3, %ymm1, %ymm1
|
|
|
+ vpslld $10, %ymm0, %ymm2
|
|
|
+ vpslld $10, %ymm1, %ymm3
|
|
|
+ vpsrld $12, %ymm0, %ymm4
|
|
|
+ vpsrld $12, %ymm1, %ymm5
|
|
|
+ vpsrld $2, %ymm0, %ymm6
|
|
|
+ vpsrld $2, %ymm1, %ymm7
|
|
|
+ vpand %ymm10, %ymm0, %ymm0
|
|
|
+ vpand %ymm10, %ymm1, %ymm1
|
|
|
+ vpand %ymm11, %ymm2, %ymm2
|
|
|
+ vpand %ymm11, %ymm3, %ymm3
|
|
|
+ vpand %ymm10, %ymm4, %ymm4
|
|
|
+ vpand %ymm10, %ymm5, %ymm5
|
|
|
+ vpand %ymm11, %ymm6, %ymm6
|
|
|
+ vpand %ymm11, %ymm7, %ymm7
|
|
|
+ vpaddw %ymm2, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm3, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm4, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm5, %ymm3
|
|
|
+ vpsubw %ymm12, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm12, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm12, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm12, %ymm3, %ymm3
|
|
|
+ vpunpckldq %ymm2, %ymm0, %ymm4
|
|
|
+ vpunpckldq %ymm3, %ymm1, %ymm5
|
|
|
+ vpunpckhdq %ymm2, %ymm0, %ymm6
|
|
|
+ vpunpckhdq %ymm3, %ymm1, %ymm7
|
|
|
+ vperm2i128 $32, %ymm6, %ymm4, %ymm0
|
|
|
+ vperm2i128 $32, %ymm7, %ymm5, %ymm1
|
|
|
+ vperm2i128 $49, %ymm6, %ymm4, %ymm2
|
|
|
+ vperm2i128 $49, %ymm7, %ymm5, %ymm3
|
|
|
+ vmovdqu %ymm0, 256(%rdi)
|
|
|
+ vmovdqu %ymm2, 288(%rdi)
|
|
|
+ vmovdqu %ymm1, 320(%rdi)
|
|
|
+ vmovdqu %ymm3, 352(%rdi)
|
|
|
+ vmovdqu 144(%rsi), %ymm0
|
|
|
+ vmovdqu 168(%rsi), %ymm1
|
|
|
+ vpermq $0x94, %ymm0, %ymm0
|
|
|
+ vpermq $0x94, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm13, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm13, %ymm1, %ymm1
|
|
|
+ vpsrld $0x01, %ymm0, %ymm2
|
|
|
+ vpsrld $0x01, %ymm1, %ymm3
|
|
|
+ vpsrld $2, %ymm0, %ymm4
|
|
|
+ vpsrld $2, %ymm1, %ymm5
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm2, %ymm2
|
|
|
+ vpand %ymm8, %ymm3, %ymm3
|
|
|
+ vpand %ymm8, %ymm4, %ymm4
|
|
|
+ vpand %ymm8, %ymm5, %ymm5
|
|
|
+ vpaddd %ymm2, %ymm0, %ymm0
|
|
|
+ vpaddd %ymm3, %ymm1, %ymm1
|
|
|
+ vpaddd %ymm4, %ymm0, %ymm0
|
|
|
+ vpaddd %ymm5, %ymm1, %ymm1
|
|
|
+ vpsrld $3, %ymm0, %ymm2
|
|
|
+ vpsrld $3, %ymm1, %ymm3
|
|
|
+ vpaddd %ymm9, %ymm0, %ymm0
|
|
|
+ vpaddd %ymm9, %ymm1, %ymm1
|
|
|
+ vpsubd %ymm2, %ymm0, %ymm0
|
|
|
+ vpsubd %ymm3, %ymm1, %ymm1
|
|
|
+ vpslld $10, %ymm0, %ymm2
|
|
|
+ vpslld $10, %ymm1, %ymm3
|
|
|
+ vpsrld $12, %ymm0, %ymm4
|
|
|
+ vpsrld $12, %ymm1, %ymm5
|
|
|
+ vpsrld $2, %ymm0, %ymm6
|
|
|
+ vpsrld $2, %ymm1, %ymm7
|
|
|
+ vpand %ymm10, %ymm0, %ymm0
|
|
|
+ vpand %ymm10, %ymm1, %ymm1
|
|
|
+ vpand %ymm11, %ymm2, %ymm2
|
|
|
+ vpand %ymm11, %ymm3, %ymm3
|
|
|
+ vpand %ymm10, %ymm4, %ymm4
|
|
|
+ vpand %ymm10, %ymm5, %ymm5
|
|
|
+ vpand %ymm11, %ymm6, %ymm6
|
|
|
+ vpand %ymm11, %ymm7, %ymm7
|
|
|
+ vpaddw %ymm2, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm3, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm6, %ymm4, %ymm2
|
|
|
+ vpaddw %ymm7, %ymm5, %ymm3
|
|
|
+ vpsubw %ymm12, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm12, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm12, %ymm2, %ymm2
|
|
|
+ vpsubw %ymm12, %ymm3, %ymm3
|
|
|
+ vpunpckldq %ymm2, %ymm0, %ymm4
|
|
|
+ vpunpckldq %ymm3, %ymm1, %ymm5
|
|
|
+ vpunpckhdq %ymm2, %ymm0, %ymm6
|
|
|
+ vpunpckhdq %ymm3, %ymm1, %ymm7
|
|
|
+ vperm2i128 $32, %ymm6, %ymm4, %ymm0
|
|
|
+ vperm2i128 $32, %ymm7, %ymm5, %ymm1
|
|
|
+ vperm2i128 $49, %ymm6, %ymm4, %ymm2
|
|
|
+ vperm2i128 $49, %ymm7, %ymm5, %ymm3
|
|
|
+ vmovdqu %ymm0, 384(%rdi)
|
|
|
+ vmovdqu %ymm2, 416(%rdi)
|
|
|
+ vmovdqu %ymm1, 448(%rdi)
|
|
|
+ vmovdqu %ymm3, 480(%rdi)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_cbd_eta3_avx2,.-kyber_cbd_eta3_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_mask_55:
|
|
|
+.quad 0x5555555555555555, 0x5555555555555555
|
|
|
+.quad 0x5555555555555555, 0x5555555555555555
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_mask_33:
|
|
|
+.quad 0x3333333333333333, 0x3333333333333333
|
|
|
+.quad 0x3333333333333333, 0x3333333333333333
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_mask_03:
|
|
|
+.quad 0x303030303030303, 0x303030303030303
|
|
|
+.quad 0x303030303030303, 0x303030303030303
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_mask_0f:
|
|
|
+.quad 0xf0f0f0f0f0f0f0f, 0xf0f0f0f0f0f0f0f
|
|
|
+.quad 0xf0f0f0f0f0f0f0f, 0xf0f0f0f0f0f0f0f
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_cbd_eta2_avx2
|
|
|
+.type kyber_cbd_eta2_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_cbd_eta2_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_cbd_eta2_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_cbd_eta2_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu L_kyber_mask_55(%rip), %ymm8
|
|
|
+ vmovdqu L_kyber_mask_33(%rip), %ymm9
|
|
|
+ vmovdqu L_kyber_mask_03(%rip), %ymm10
|
|
|
+ vmovdqu L_kyber_mask_0f(%rip), %ymm11
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu 32(%rsi), %ymm1
|
|
|
+ vpsrlw $0x01, %ymm0, %ymm2
|
|
|
+ vpsrlw $0x01, %ymm1, %ymm3
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm2, %ymm2
|
|
|
+ vpand %ymm8, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm2, %ymm0, %ymm0
|
|
|
+ vpaddb %ymm3, %ymm1, %ymm1
|
|
|
+ vpsrlw $2, %ymm0, %ymm2
|
|
|
+ vpsrlw $2, %ymm1, %ymm3
|
|
|
+ vpand %ymm9, %ymm0, %ymm0
|
|
|
+ vpand %ymm9, %ymm1, %ymm1
|
|
|
+ vpand %ymm9, %ymm2, %ymm2
|
|
|
+ vpand %ymm9, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm9, %ymm0, %ymm0
|
|
|
+ vpaddb %ymm9, %ymm1, %ymm1
|
|
|
+ vpsubb %ymm2, %ymm0, %ymm0
|
|
|
+ vpsubb %ymm3, %ymm1, %ymm1
|
|
|
+ vpsrlw $4, %ymm0, %ymm2
|
|
|
+ vpsrlw $4, %ymm1, %ymm3
|
|
|
+ vpand %ymm11, %ymm0, %ymm0
|
|
|
+ vpand %ymm11, %ymm1, %ymm1
|
|
|
+ vpand %ymm11, %ymm2, %ymm2
|
|
|
+ vpand %ymm11, %ymm3, %ymm3
|
|
|
+ vpsubb %ymm10, %ymm0, %ymm0
|
|
|
+ vpsubb %ymm10, %ymm1, %ymm1
|
|
|
+ vpsubb %ymm10, %ymm2, %ymm2
|
|
|
+ vpsubb %ymm10, %ymm3, %ymm3
|
|
|
+ vpunpcklbw %ymm2, %ymm0, %ymm4
|
|
|
+ vpunpcklbw %ymm3, %ymm1, %ymm5
|
|
|
+ vpunpckhbw %ymm2, %ymm0, %ymm6
|
|
|
+ vpunpckhbw %ymm3, %ymm1, %ymm7
|
|
|
+ vpmovsxbw %xmm4, %ymm0
|
|
|
+ vpmovsxbw %xmm5, %ymm1
|
|
|
+ vextracti128 $0x01, %ymm4, %xmm2
|
|
|
+ vextracti128 $0x01, %ymm5, %xmm3
|
|
|
+ vpmovsxbw %xmm2, %ymm2
|
|
|
+ vpmovsxbw %xmm3, %ymm3
|
|
|
+ vpmovsxbw %xmm6, %ymm4
|
|
|
+ vpmovsxbw %xmm7, %ymm5
|
|
|
+ vextracti128 $0x01, %ymm6, %xmm6
|
|
|
+ vextracti128 $0x01, %ymm7, %xmm7
|
|
|
+ vpmovsxbw %xmm6, %ymm6
|
|
|
+ vpmovsxbw %xmm7, %ymm7
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm4, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm6, 96(%rdi)
|
|
|
+ vmovdqu %ymm1, 128(%rdi)
|
|
|
+ vmovdqu %ymm5, 160(%rdi)
|
|
|
+ vmovdqu %ymm3, 192(%rdi)
|
|
|
+ vmovdqu %ymm7, 224(%rdi)
|
|
|
+ vmovdqu 64(%rsi), %ymm0
|
|
|
+ vmovdqu 96(%rsi), %ymm1
|
|
|
+ vpsrlw $0x01, %ymm0, %ymm2
|
|
|
+ vpsrlw $0x01, %ymm1, %ymm3
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm2, %ymm2
|
|
|
+ vpand %ymm8, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm2, %ymm0, %ymm0
|
|
|
+ vpaddb %ymm3, %ymm1, %ymm1
|
|
|
+ vpsrlw $2, %ymm0, %ymm2
|
|
|
+ vpsrlw $2, %ymm1, %ymm3
|
|
|
+ vpand %ymm9, %ymm0, %ymm0
|
|
|
+ vpand %ymm9, %ymm1, %ymm1
|
|
|
+ vpand %ymm9, %ymm2, %ymm2
|
|
|
+ vpand %ymm9, %ymm3, %ymm3
|
|
|
+ vpaddb %ymm9, %ymm0, %ymm0
|
|
|
+ vpaddb %ymm9, %ymm1, %ymm1
|
|
|
+ vpsubb %ymm2, %ymm0, %ymm0
|
|
|
+ vpsubb %ymm3, %ymm1, %ymm1
|
|
|
+ vpsrlw $4, %ymm0, %ymm2
|
|
|
+ vpsrlw $4, %ymm1, %ymm3
|
|
|
+ vpand %ymm11, %ymm0, %ymm0
|
|
|
+ vpand %ymm11, %ymm1, %ymm1
|
|
|
+ vpand %ymm11, %ymm2, %ymm2
|
|
|
+ vpand %ymm11, %ymm3, %ymm3
|
|
|
+ vpsubb %ymm10, %ymm0, %ymm0
|
|
|
+ vpsubb %ymm10, %ymm1, %ymm1
|
|
|
+ vpsubb %ymm10, %ymm2, %ymm2
|
|
|
+ vpsubb %ymm10, %ymm3, %ymm3
|
|
|
+ vpunpcklbw %ymm2, %ymm0, %ymm4
|
|
|
+ vpunpcklbw %ymm3, %ymm1, %ymm5
|
|
|
+ vpunpckhbw %ymm2, %ymm0, %ymm6
|
|
|
+ vpunpckhbw %ymm3, %ymm1, %ymm7
|
|
|
+ vpmovsxbw %xmm4, %ymm0
|
|
|
+ vpmovsxbw %xmm5, %ymm1
|
|
|
+ vextracti128 $0x01, %ymm4, %xmm2
|
|
|
+ vextracti128 $0x01, %ymm5, %xmm3
|
|
|
+ vpmovsxbw %xmm2, %ymm2
|
|
|
+ vpmovsxbw %xmm3, %ymm3
|
|
|
+ vpmovsxbw %xmm6, %ymm4
|
|
|
+ vpmovsxbw %xmm7, %ymm5
|
|
|
+ vextracti128 $0x01, %ymm6, %xmm6
|
|
|
+ vextracti128 $0x01, %ymm7, %xmm7
|
|
|
+ vpmovsxbw %xmm6, %ymm6
|
|
|
+ vpmovsxbw %xmm7, %ymm7
|
|
|
+ vmovdqu %ymm0, 256(%rdi)
|
|
|
+ vmovdqu %ymm4, 288(%rdi)
|
|
|
+ vmovdqu %ymm2, 320(%rdi)
|
|
|
+ vmovdqu %ymm6, 352(%rdi)
|
|
|
+ vmovdqu %ymm1, 384(%rdi)
|
|
|
+ vmovdqu %ymm5, 416(%rdi)
|
|
|
+ vmovdqu %ymm3, 448(%rdi)
|
|
|
+ vmovdqu %ymm7, 480(%rdi)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_cbd_eta2_avx2,.-kyber_cbd_eta2_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_10_avx2_mask:
|
|
|
+.value 0x3ff,0x3ff
|
|
|
+.value 0x3ff,0x3ff
|
|
|
+.value 0x3ff,0x3ff
|
|
|
+.value 0x3ff,0x3ff
|
|
|
+.value 0x3ff,0x3ff
|
|
|
+.value 0x3ff,0x3ff
|
|
|
+.value 0x3ff,0x3ff
|
|
|
+.value 0x3ff,0x3ff
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_10_avx2_shift:
|
|
|
+.quad 0x400000104000001, 0x400000104000001
|
|
|
+.quad 0x400000104000001, 0x400000104000001
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_10_avx2_shlv:
|
|
|
+.quad 0xc, 0xc
|
|
|
+.quad 0xc, 0xc
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_10_avx2_shuf:
|
|
|
+.value 0x100,0x302
|
|
|
+.value 0x804,0xa09
|
|
|
+.value 0xc0b,0xffff
|
|
|
+.value 0xffff,0xffff
|
|
|
+.value 0xa09,0xc0b
|
|
|
+.value 0xffff,0xffff
|
|
|
+.value 0xffff,0x100
|
|
|
+.value 0x302,0x804
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_10_avx2_v:
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_10_avx2_offset:
|
|
|
+.value 0xf,0xf
|
|
|
+.value 0xf,0xf
|
|
|
+.value 0xf,0xf
|
|
|
+.value 0xf,0xf
|
|
|
+.value 0xf,0xf
|
|
|
+.value 0xf,0xf
|
|
|
+.value 0xf,0xf
|
|
|
+.value 0xf,0xf
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_10_avx2_shift12:
|
|
|
+.value 0x1000,0x1000
|
|
|
+.value 0x1000,0x1000
|
|
|
+.value 0x1000,0x1000
|
|
|
+.value 0x1000,0x1000
|
|
|
+.value 0x1000,0x1000
|
|
|
+.value 0x1000,0x1000
|
|
|
+.value 0x1000,0x1000
|
|
|
+.value 0x1000,0x1000
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_compress_10_avx2
|
|
|
+.type kyber_compress_10_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_compress_10_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_compress_10_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_compress_10_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu L_kyber_compress_10_avx2_mask(%rip), %ymm9
|
|
|
+ vmovdqu L_kyber_compress_10_avx2_shift(%rip), %ymm8
|
|
|
+ vmovdqu L_kyber_compress_10_avx2_shlv(%rip), %ymm10
|
|
|
+ vmovdqu L_kyber_compress_10_avx2_shuf(%rip), %ymm11
|
|
|
+ vmovdqu L_kyber_compress_10_avx2_v(%rip), %ymm6
|
|
|
+ vmovdqu L_kyber_compress_10_avx2_offset(%rip), %ymm12
|
|
|
+ vmovdqu L_kyber_compress_10_avx2_shift12(%rip), %ymm13
|
|
|
+ vpsllw $3, %ymm6, %ymm7
|
|
|
+L_kyber_compress_10_avx2_start:
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu 32(%rsi), %ymm1
|
|
|
+ vpmullw %ymm7, %ymm0, %ymm2
|
|
|
+ vpmullw %ymm7, %ymm1, %ymm4
|
|
|
+ vpaddw %ymm12, %ymm0, %ymm3
|
|
|
+ vpaddw %ymm12, %ymm1, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm1, %ymm1
|
|
|
+ vpmulhuw %ymm6, %ymm0, %ymm0
|
|
|
+ vpmulhuw %ymm6, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm3, %ymm2, %ymm2
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm2, %ymm2
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm2, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm13, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm13, %ymm1, %ymm1
|
|
|
+ vpand %ymm9, %ymm0, %ymm0
|
|
|
+ vpand %ymm9, %ymm1, %ymm1
|
|
|
+ vpmaddwd %ymm8, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm8, %ymm1, %ymm1
|
|
|
+ vpsllvd %ymm10, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm10, %ymm1, %ymm1
|
|
|
+ vpsrlq $12, %ymm0, %ymm0
|
|
|
+ vpsrlq $12, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm11, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm11, %ymm1, %ymm1
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm2
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm4
|
|
|
+ vpblendw $0xe0, %xmm2, %xmm0, %xmm0
|
|
|
+ vpblendw $0xe0, %xmm4, %xmm1, %xmm1
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ vmovdqu %xmm1, 20(%rdi)
|
|
|
+ vmovss %xmm2, 16(%rdi)
|
|
|
+ vmovss %xmm4, 36(%rdi)
|
|
|
+ vmovdqu 64(%rsi), %ymm0
|
|
|
+ vmovdqu 96(%rsi), %ymm1
|
|
|
+ vpmullw %ymm7, %ymm0, %ymm2
|
|
|
+ vpmullw %ymm7, %ymm1, %ymm4
|
|
|
+ vpaddw %ymm12, %ymm0, %ymm3
|
|
|
+ vpaddw %ymm12, %ymm1, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm1, %ymm1
|
|
|
+ vpmulhuw %ymm6, %ymm0, %ymm0
|
|
|
+ vpmulhuw %ymm6, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm3, %ymm2, %ymm2
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm2, %ymm2
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm2, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm13, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm13, %ymm1, %ymm1
|
|
|
+ vpand %ymm9, %ymm0, %ymm0
|
|
|
+ vpand %ymm9, %ymm1, %ymm1
|
|
|
+ vpmaddwd %ymm8, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm8, %ymm1, %ymm1
|
|
|
+ vpsllvd %ymm10, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm10, %ymm1, %ymm1
|
|
|
+ vpsrlq $12, %ymm0, %ymm0
|
|
|
+ vpsrlq $12, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm11, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm11, %ymm1, %ymm1
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm2
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm4
|
|
|
+ vpblendw $0xe0, %xmm2, %xmm0, %xmm0
|
|
|
+ vpblendw $0xe0, %xmm4, %xmm1, %xmm1
|
|
|
+ vmovdqu %xmm0, 40(%rdi)
|
|
|
+ vmovdqu %xmm1, 60(%rdi)
|
|
|
+ vmovss %xmm2, 56(%rdi)
|
|
|
+ vmovss %xmm4, 76(%rdi)
|
|
|
+ vmovdqu 128(%rsi), %ymm0
|
|
|
+ vmovdqu 160(%rsi), %ymm1
|
|
|
+ vpmullw %ymm7, %ymm0, %ymm2
|
|
|
+ vpmullw %ymm7, %ymm1, %ymm4
|
|
|
+ vpaddw %ymm12, %ymm0, %ymm3
|
|
|
+ vpaddw %ymm12, %ymm1, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm1, %ymm1
|
|
|
+ vpmulhuw %ymm6, %ymm0, %ymm0
|
|
|
+ vpmulhuw %ymm6, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm3, %ymm2, %ymm2
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm2, %ymm2
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm2, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm13, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm13, %ymm1, %ymm1
|
|
|
+ vpand %ymm9, %ymm0, %ymm0
|
|
|
+ vpand %ymm9, %ymm1, %ymm1
|
|
|
+ vpmaddwd %ymm8, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm8, %ymm1, %ymm1
|
|
|
+ vpsllvd %ymm10, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm10, %ymm1, %ymm1
|
|
|
+ vpsrlq $12, %ymm0, %ymm0
|
|
|
+ vpsrlq $12, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm11, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm11, %ymm1, %ymm1
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm2
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm4
|
|
|
+ vpblendw $0xe0, %xmm2, %xmm0, %xmm0
|
|
|
+ vpblendw $0xe0, %xmm4, %xmm1, %xmm1
|
|
|
+ vmovdqu %xmm0, 80(%rdi)
|
|
|
+ vmovdqu %xmm1, 100(%rdi)
|
|
|
+ vmovss %xmm2, 96(%rdi)
|
|
|
+ vmovss %xmm4, 116(%rdi)
|
|
|
+ vmovdqu 192(%rsi), %ymm0
|
|
|
+ vmovdqu 224(%rsi), %ymm1
|
|
|
+ vpmullw %ymm7, %ymm0, %ymm2
|
|
|
+ vpmullw %ymm7, %ymm1, %ymm4
|
|
|
+ vpaddw %ymm12, %ymm0, %ymm3
|
|
|
+ vpaddw %ymm12, %ymm1, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm1, %ymm1
|
|
|
+ vpmulhuw %ymm6, %ymm0, %ymm0
|
|
|
+ vpmulhuw %ymm6, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm3, %ymm2, %ymm2
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm2, %ymm2
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm2, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm13, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm13, %ymm1, %ymm1
|
|
|
+ vpand %ymm9, %ymm0, %ymm0
|
|
|
+ vpand %ymm9, %ymm1, %ymm1
|
|
|
+ vpmaddwd %ymm8, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm8, %ymm1, %ymm1
|
|
|
+ vpsllvd %ymm10, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm10, %ymm1, %ymm1
|
|
|
+ vpsrlq $12, %ymm0, %ymm0
|
|
|
+ vpsrlq $12, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm11, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm11, %ymm1, %ymm1
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm2
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm4
|
|
|
+ vpblendw $0xe0, %xmm2, %xmm0, %xmm0
|
|
|
+ vpblendw $0xe0, %xmm4, %xmm1, %xmm1
|
|
|
+ vmovdqu %xmm0, 120(%rdi)
|
|
|
+ vmovdqu %xmm1, 140(%rdi)
|
|
|
+ vmovss %xmm2, 136(%rdi)
|
|
|
+ vmovss %xmm4, 156(%rdi)
|
|
|
+ vmovdqu 256(%rsi), %ymm0
|
|
|
+ vmovdqu 288(%rsi), %ymm1
|
|
|
+ vpmullw %ymm7, %ymm0, %ymm2
|
|
|
+ vpmullw %ymm7, %ymm1, %ymm4
|
|
|
+ vpaddw %ymm12, %ymm0, %ymm3
|
|
|
+ vpaddw %ymm12, %ymm1, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm1, %ymm1
|
|
|
+ vpmulhuw %ymm6, %ymm0, %ymm0
|
|
|
+ vpmulhuw %ymm6, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm3, %ymm2, %ymm2
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm2, %ymm2
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm2, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm13, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm13, %ymm1, %ymm1
|
|
|
+ vpand %ymm9, %ymm0, %ymm0
|
|
|
+ vpand %ymm9, %ymm1, %ymm1
|
|
|
+ vpmaddwd %ymm8, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm8, %ymm1, %ymm1
|
|
|
+ vpsllvd %ymm10, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm10, %ymm1, %ymm1
|
|
|
+ vpsrlq $12, %ymm0, %ymm0
|
|
|
+ vpsrlq $12, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm11, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm11, %ymm1, %ymm1
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm2
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm4
|
|
|
+ vpblendw $0xe0, %xmm2, %xmm0, %xmm0
|
|
|
+ vpblendw $0xe0, %xmm4, %xmm1, %xmm1
|
|
|
+ vmovdqu %xmm0, 160(%rdi)
|
|
|
+ vmovdqu %xmm1, 180(%rdi)
|
|
|
+ vmovss %xmm2, 176(%rdi)
|
|
|
+ vmovss %xmm4, 196(%rdi)
|
|
|
+ vmovdqu 320(%rsi), %ymm0
|
|
|
+ vmovdqu 352(%rsi), %ymm1
|
|
|
+ vpmullw %ymm7, %ymm0, %ymm2
|
|
|
+ vpmullw %ymm7, %ymm1, %ymm4
|
|
|
+ vpaddw %ymm12, %ymm0, %ymm3
|
|
|
+ vpaddw %ymm12, %ymm1, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm1, %ymm1
|
|
|
+ vpmulhuw %ymm6, %ymm0, %ymm0
|
|
|
+ vpmulhuw %ymm6, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm3, %ymm2, %ymm2
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm2, %ymm2
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm2, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm13, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm13, %ymm1, %ymm1
|
|
|
+ vpand %ymm9, %ymm0, %ymm0
|
|
|
+ vpand %ymm9, %ymm1, %ymm1
|
|
|
+ vpmaddwd %ymm8, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm8, %ymm1, %ymm1
|
|
|
+ vpsllvd %ymm10, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm10, %ymm1, %ymm1
|
|
|
+ vpsrlq $12, %ymm0, %ymm0
|
|
|
+ vpsrlq $12, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm11, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm11, %ymm1, %ymm1
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm2
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm4
|
|
|
+ vpblendw $0xe0, %xmm2, %xmm0, %xmm0
|
|
|
+ vpblendw $0xe0, %xmm4, %xmm1, %xmm1
|
|
|
+ vmovdqu %xmm0, 200(%rdi)
|
|
|
+ vmovdqu %xmm1, 220(%rdi)
|
|
|
+ vmovss %xmm2, 216(%rdi)
|
|
|
+ vmovss %xmm4, 236(%rdi)
|
|
|
+ vmovdqu 384(%rsi), %ymm0
|
|
|
+ vmovdqu 416(%rsi), %ymm1
|
|
|
+ vpmullw %ymm7, %ymm0, %ymm2
|
|
|
+ vpmullw %ymm7, %ymm1, %ymm4
|
|
|
+ vpaddw %ymm12, %ymm0, %ymm3
|
|
|
+ vpaddw %ymm12, %ymm1, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm1, %ymm1
|
|
|
+ vpmulhuw %ymm6, %ymm0, %ymm0
|
|
|
+ vpmulhuw %ymm6, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm3, %ymm2, %ymm2
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm2, %ymm2
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm2, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm13, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm13, %ymm1, %ymm1
|
|
|
+ vpand %ymm9, %ymm0, %ymm0
|
|
|
+ vpand %ymm9, %ymm1, %ymm1
|
|
|
+ vpmaddwd %ymm8, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm8, %ymm1, %ymm1
|
|
|
+ vpsllvd %ymm10, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm10, %ymm1, %ymm1
|
|
|
+ vpsrlq $12, %ymm0, %ymm0
|
|
|
+ vpsrlq $12, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm11, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm11, %ymm1, %ymm1
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm2
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm4
|
|
|
+ vpblendw $0xe0, %xmm2, %xmm0, %xmm0
|
|
|
+ vpblendw $0xe0, %xmm4, %xmm1, %xmm1
|
|
|
+ vmovdqu %xmm0, 240(%rdi)
|
|
|
+ vmovdqu %xmm1, 260(%rdi)
|
|
|
+ vmovss %xmm2, 256(%rdi)
|
|
|
+ vmovss %xmm4, 276(%rdi)
|
|
|
+ vmovdqu 448(%rsi), %ymm0
|
|
|
+ vmovdqu 480(%rsi), %ymm1
|
|
|
+ vpmullw %ymm7, %ymm0, %ymm2
|
|
|
+ vpmullw %ymm7, %ymm1, %ymm4
|
|
|
+ vpaddw %ymm12, %ymm0, %ymm3
|
|
|
+ vpaddw %ymm12, %ymm1, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm1, %ymm1
|
|
|
+ vpmulhuw %ymm6, %ymm0, %ymm0
|
|
|
+ vpmulhuw %ymm6, %ymm1, %ymm1
|
|
|
+ vpsubw %ymm3, %ymm2, %ymm3
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm3, %ymm2, %ymm2
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm2, %ymm2
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm2, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm13, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm13, %ymm1, %ymm1
|
|
|
+ vpand %ymm9, %ymm0, %ymm0
|
|
|
+ vpand %ymm9, %ymm1, %ymm1
|
|
|
+ vpmaddwd %ymm8, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm8, %ymm1, %ymm1
|
|
|
+ vpsllvd %ymm10, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm10, %ymm1, %ymm1
|
|
|
+ vpsrlq $12, %ymm0, %ymm0
|
|
|
+ vpsrlq $12, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm11, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm11, %ymm1, %ymm1
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm2
|
|
|
+ vextracti128 $0x01, %ymm1, %xmm4
|
|
|
+ vpblendw $0xe0, %xmm2, %xmm0, %xmm0
|
|
|
+ vpblendw $0xe0, %xmm4, %xmm1, %xmm1
|
|
|
+ vmovdqu %xmm0, 280(%rdi)
|
|
|
+ vmovdqu %xmm1, 300(%rdi)
|
|
|
+ vmovss %xmm2, 296(%rdi)
|
|
|
+ vmovss %xmm4, 316(%rdi)
|
|
|
+ addq $0x140, %rdi
|
|
|
+ addq $0x200, %rsi
|
|
|
+ subl $0x01, %edx
|
|
|
+ jg L_kyber_compress_10_avx2_start
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_compress_10_avx2,.-kyber_compress_10_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_10_avx2_mask:
|
|
|
+.long 0x7fe01ff8,0x7fe01ff8,0x7fe01ff8,0x7fe01ff8
|
|
|
+.long 0x7fe01ff8,0x7fe01ff8,0x7fe01ff8,0x7fe01ff8
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_10_avx2_sllv:
|
|
|
+.quad 0x4, 0x4
|
|
|
+.quad 0x4, 0x4
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_10_avx2_q:
|
|
|
+.long 0xd013404,0xd013404,0xd013404,0xd013404
|
|
|
+.long 0xd013404,0xd013404,0xd013404,0xd013404
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_10_avx2_shuf:
|
|
|
+.value 0x100,0x201
|
|
|
+.value 0x302,0x403
|
|
|
+.value 0x605,0x706
|
|
|
+.value 0x807,0x908
|
|
|
+.value 0x302,0x403
|
|
|
+.value 0x504,0x605
|
|
|
+.value 0x807,0x908
|
|
|
+.value 0xa09,0xb0a
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_decompress_10_avx2
|
|
|
+.type kyber_decompress_10_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_decompress_10_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_decompress_10_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_decompress_10_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu L_kyber_decompress_10_avx2_mask(%rip), %ymm4
|
|
|
+ vmovdqu L_kyber_decompress_10_avx2_q(%rip), %ymm5
|
|
|
+ vmovdqu L_kyber_decompress_10_avx2_shuf(%rip), %ymm6
|
|
|
+ vmovdqu L_kyber_decompress_10_avx2_sllv(%rip), %ymm7
|
|
|
+L_kyber_decompress_10_avx2_start:
|
|
|
+ vpermq $0x94, (%rsi), %ymm0
|
|
|
+ vpermq $0x94, 20(%rsi), %ymm1
|
|
|
+ vpermq $0x94, 40(%rsi), %ymm2
|
|
|
+ vpermq $0x94, 60(%rsi), %ymm3
|
|
|
+ vpshufb %ymm6, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm6, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm6, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm6, %ymm3, %ymm3
|
|
|
+ vpsllvd %ymm7, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm7, %ymm1, %ymm1
|
|
|
+ vpsllvd %ymm7, %ymm2, %ymm2
|
|
|
+ vpsllvd %ymm7, %ymm3, %ymm3
|
|
|
+ vpsrlw $0x01, %ymm0, %ymm0
|
|
|
+ vpsrlw $0x01, %ymm1, %ymm1
|
|
|
+ vpsrlw $0x01, %ymm2, %ymm2
|
|
|
+ vpsrlw $0x01, %ymm3, %ymm3
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm2, %ymm2
|
|
|
+ vpand %ymm4, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm5, %ymm2, %ymm2
|
|
|
+ vpmulhrsw %ymm5, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vpermq $0x94, 80(%rsi), %ymm0
|
|
|
+ vpermq $0x94, 100(%rsi), %ymm1
|
|
|
+ vpermq $0x94, 120(%rsi), %ymm2
|
|
|
+ vpermq $0x94, 140(%rsi), %ymm3
|
|
|
+ vpshufb %ymm6, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm6, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm6, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm6, %ymm3, %ymm3
|
|
|
+ vpsllvd %ymm7, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm7, %ymm1, %ymm1
|
|
|
+ vpsllvd %ymm7, %ymm2, %ymm2
|
|
|
+ vpsllvd %ymm7, %ymm3, %ymm3
|
|
|
+ vpsrlw $0x01, %ymm0, %ymm0
|
|
|
+ vpsrlw $0x01, %ymm1, %ymm1
|
|
|
+ vpsrlw $0x01, %ymm2, %ymm2
|
|
|
+ vpsrlw $0x01, %ymm3, %ymm3
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm2, %ymm2
|
|
|
+ vpand %ymm4, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm5, %ymm2, %ymm2
|
|
|
+ vpmulhrsw %ymm5, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 128(%rdi)
|
|
|
+ vmovdqu %ymm1, 160(%rdi)
|
|
|
+ vmovdqu %ymm2, 192(%rdi)
|
|
|
+ vmovdqu %ymm3, 224(%rdi)
|
|
|
+ vpermq $0x94, 160(%rsi), %ymm0
|
|
|
+ vpermq $0x94, 180(%rsi), %ymm1
|
|
|
+ vpermq $0x94, 200(%rsi), %ymm2
|
|
|
+ vpermq $0x94, 220(%rsi), %ymm3
|
|
|
+ vpshufb %ymm6, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm6, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm6, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm6, %ymm3, %ymm3
|
|
|
+ vpsllvd %ymm7, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm7, %ymm1, %ymm1
|
|
|
+ vpsllvd %ymm7, %ymm2, %ymm2
|
|
|
+ vpsllvd %ymm7, %ymm3, %ymm3
|
|
|
+ vpsrlw $0x01, %ymm0, %ymm0
|
|
|
+ vpsrlw $0x01, %ymm1, %ymm1
|
|
|
+ vpsrlw $0x01, %ymm2, %ymm2
|
|
|
+ vpsrlw $0x01, %ymm3, %ymm3
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm2, %ymm2
|
|
|
+ vpand %ymm4, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm5, %ymm2, %ymm2
|
|
|
+ vpmulhrsw %ymm5, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 256(%rdi)
|
|
|
+ vmovdqu %ymm1, 288(%rdi)
|
|
|
+ vmovdqu %ymm2, 320(%rdi)
|
|
|
+ vmovdqu %ymm3, 352(%rdi)
|
|
|
+ vpermq $0x94, 240(%rsi), %ymm0
|
|
|
+ vpermq $0x94, 260(%rsi), %ymm1
|
|
|
+ vpermq $0x94, 280(%rsi), %ymm2
|
|
|
+ vpermq $0x94, 300(%rsi), %ymm3
|
|
|
+ vpshufb %ymm6, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm6, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm6, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm6, %ymm3, %ymm3
|
|
|
+ vpsllvd %ymm7, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm7, %ymm1, %ymm1
|
|
|
+ vpsllvd %ymm7, %ymm2, %ymm2
|
|
|
+ vpsllvd %ymm7, %ymm3, %ymm3
|
|
|
+ vpsrlw $0x01, %ymm0, %ymm0
|
|
|
+ vpsrlw $0x01, %ymm1, %ymm1
|
|
|
+ vpsrlw $0x01, %ymm2, %ymm2
|
|
|
+ vpsrlw $0x01, %ymm3, %ymm3
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm2, %ymm2
|
|
|
+ vpand %ymm4, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm5, %ymm2, %ymm2
|
|
|
+ vpmulhrsw %ymm5, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 384(%rdi)
|
|
|
+ vmovdqu %ymm1, 416(%rdi)
|
|
|
+ vmovdqu %ymm2, 448(%rdi)
|
|
|
+ vmovdqu %ymm3, 480(%rdi)
|
|
|
+ addq $0x140, %rsi
|
|
|
+ addq $0x200, %rdi
|
|
|
+ subl $0x01, %edx
|
|
|
+ jg L_kyber_decompress_10_avx2_start
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_decompress_10_avx2,.-kyber_decompress_10_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_11_avx2_v:
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_11_avx2_off:
|
|
|
+.value 0x24,0x24
|
|
|
+.value 0x24,0x24
|
|
|
+.value 0x24,0x24
|
|
|
+.value 0x24,0x24
|
|
|
+.value 0x24,0x24
|
|
|
+.value 0x24,0x24
|
|
|
+.value 0x24,0x24
|
|
|
+.value 0x24,0x24
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_11_avx2_shift13:
|
|
|
+.value 0x2000,0x2000
|
|
|
+.value 0x2000,0x2000
|
|
|
+.value 0x2000,0x2000
|
|
|
+.value 0x2000,0x2000
|
|
|
+.value 0x2000,0x2000
|
|
|
+.value 0x2000,0x2000
|
|
|
+.value 0x2000,0x2000
|
|
|
+.value 0x2000,0x2000
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_11_avx2_mask:
|
|
|
+.value 0x7ff,0x7ff
|
|
|
+.value 0x7ff,0x7ff
|
|
|
+.value 0x7ff,0x7ff
|
|
|
+.value 0x7ff,0x7ff
|
|
|
+.value 0x7ff,0x7ff
|
|
|
+.value 0x7ff,0x7ff
|
|
|
+.value 0x7ff,0x7ff
|
|
|
+.value 0x7ff,0x7ff
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_11_avx2_shift:
|
|
|
+.quad 0x800000108000001, 0x800000108000001
|
|
|
+.quad 0x800000108000001, 0x800000108000001
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_11_avx2_sllvd:
|
|
|
+.long 0xa,0x0,0xa,0x0
|
|
|
+.long 0xa,0x0,0xa,0x0
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_11_avx2_srlvq:
|
|
|
+.quad 0xa, 0x1e
|
|
|
+.quad 0xa, 0x1e
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_11_avx2_shuf:
|
|
|
+.value 0x100,0x302
|
|
|
+.value 0x504,0x706
|
|
|
+.value 0x908,0xff0a
|
|
|
+.value 0xffff,0xffff
|
|
|
+.value 0x605,0x807
|
|
|
+.value 0xa09,0xffff
|
|
|
+.value 0xffff,0x0
|
|
|
+.value 0x201,0x403
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_compress_11_avx2
|
|
|
+.type kyber_compress_11_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_compress_11_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_compress_11_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_compress_11_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu L_kyber_compress_11_avx2_v(%rip), %ymm7
|
|
|
+ vmovdqu L_kyber_compress_11_avx2_off(%rip), %ymm8
|
|
|
+ vmovdqu L_kyber_compress_11_avx2_shift13(%rip), %ymm9
|
|
|
+ vmovdqu L_kyber_compress_11_avx2_mask(%rip), %ymm10
|
|
|
+ vmovdqu L_kyber_compress_11_avx2_shift(%rip), %ymm11
|
|
|
+ vmovdqu L_kyber_compress_11_avx2_sllvd(%rip), %ymm12
|
|
|
+ vmovdqu L_kyber_compress_11_avx2_srlvq(%rip), %ymm13
|
|
|
+ vmovdqu L_kyber_compress_11_avx2_shuf(%rip), %ymm14
|
|
|
+ vpsllw $3, %ymm7, %ymm6
|
|
|
+L_kyber_compress_11_avx2_start:
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu 32(%rsi), %ymm3
|
|
|
+ vpmullw %ymm6, %ymm0, %ymm1
|
|
|
+ vpmullw %ymm6, %ymm3, %ymm4
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm2
|
|
|
+ vpaddw %ymm8, %ymm3, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm7, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm7, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm1, %ymm2
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm2, %ymm1, %ymm1
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm1, %ymm1
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm9, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm9, %ymm3, %ymm3
|
|
|
+ vpand %ymm10, %ymm0, %ymm0
|
|
|
+ vpand %ymm10, %ymm3, %ymm3
|
|
|
+ vpmaddwd %ymm11, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm11, %ymm3, %ymm3
|
|
|
+ vpsllvd %ymm12, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm12, %ymm3, %ymm3
|
|
|
+ vpsrldq $8, %ymm0, %ymm1
|
|
|
+ vpsrldq $8, %ymm3, %ymm4
|
|
|
+ vpsrlvq %ymm13, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm13, %ymm3, %ymm3
|
|
|
+ vpsllq $34, %ymm1, %ymm1
|
|
|
+ vpsllq $34, %ymm4, %ymm4
|
|
|
+ vpaddq %ymm1, %ymm0, %ymm0
|
|
|
+ vpaddq %ymm4, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm14, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm14, %ymm3, %ymm3
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vextracti128 $0x01, %ymm3, %xmm4
|
|
|
+ vpblendvb %xmm14, %xmm1, %xmm0, %xmm0
|
|
|
+ vpblendvb %xmm14, %xmm4, %xmm3, %xmm3
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ vmovq %xmm1, 16(%rdi)
|
|
|
+ vmovdqu %xmm3, 22(%rdi)
|
|
|
+ vmovq %xmm4, 38(%rdi)
|
|
|
+ vmovdqu 64(%rsi), %ymm0
|
|
|
+ vmovdqu 96(%rsi), %ymm3
|
|
|
+ vpmullw %ymm6, %ymm0, %ymm1
|
|
|
+ vpmullw %ymm6, %ymm3, %ymm4
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm2
|
|
|
+ vpaddw %ymm8, %ymm3, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm7, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm7, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm1, %ymm2
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm2, %ymm1, %ymm1
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm1, %ymm1
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm9, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm9, %ymm3, %ymm3
|
|
|
+ vpand %ymm10, %ymm0, %ymm0
|
|
|
+ vpand %ymm10, %ymm3, %ymm3
|
|
|
+ vpmaddwd %ymm11, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm11, %ymm3, %ymm3
|
|
|
+ vpsllvd %ymm12, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm12, %ymm3, %ymm3
|
|
|
+ vpsrldq $8, %ymm0, %ymm1
|
|
|
+ vpsrldq $8, %ymm3, %ymm4
|
|
|
+ vpsrlvq %ymm13, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm13, %ymm3, %ymm3
|
|
|
+ vpsllq $34, %ymm1, %ymm1
|
|
|
+ vpsllq $34, %ymm4, %ymm4
|
|
|
+ vpaddq %ymm1, %ymm0, %ymm0
|
|
|
+ vpaddq %ymm4, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm14, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm14, %ymm3, %ymm3
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vextracti128 $0x01, %ymm3, %xmm4
|
|
|
+ vpblendvb %xmm14, %xmm1, %xmm0, %xmm0
|
|
|
+ vpblendvb %xmm14, %xmm4, %xmm3, %xmm3
|
|
|
+ vmovdqu %xmm0, 44(%rdi)
|
|
|
+ vmovq %xmm1, 60(%rdi)
|
|
|
+ vmovdqu %xmm3, 66(%rdi)
|
|
|
+ vmovq %xmm4, 82(%rdi)
|
|
|
+ vmovdqu 128(%rsi), %ymm0
|
|
|
+ vmovdqu 160(%rsi), %ymm3
|
|
|
+ vpmullw %ymm6, %ymm0, %ymm1
|
|
|
+ vpmullw %ymm6, %ymm3, %ymm4
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm2
|
|
|
+ vpaddw %ymm8, %ymm3, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm7, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm7, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm1, %ymm2
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm2, %ymm1, %ymm1
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm1, %ymm1
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm9, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm9, %ymm3, %ymm3
|
|
|
+ vpand %ymm10, %ymm0, %ymm0
|
|
|
+ vpand %ymm10, %ymm3, %ymm3
|
|
|
+ vpmaddwd %ymm11, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm11, %ymm3, %ymm3
|
|
|
+ vpsllvd %ymm12, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm12, %ymm3, %ymm3
|
|
|
+ vpsrldq $8, %ymm0, %ymm1
|
|
|
+ vpsrldq $8, %ymm3, %ymm4
|
|
|
+ vpsrlvq %ymm13, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm13, %ymm3, %ymm3
|
|
|
+ vpsllq $34, %ymm1, %ymm1
|
|
|
+ vpsllq $34, %ymm4, %ymm4
|
|
|
+ vpaddq %ymm1, %ymm0, %ymm0
|
|
|
+ vpaddq %ymm4, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm14, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm14, %ymm3, %ymm3
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vextracti128 $0x01, %ymm3, %xmm4
|
|
|
+ vpblendvb %xmm14, %xmm1, %xmm0, %xmm0
|
|
|
+ vpblendvb %xmm14, %xmm4, %xmm3, %xmm3
|
|
|
+ vmovdqu %xmm0, 88(%rdi)
|
|
|
+ vmovq %xmm1, 104(%rdi)
|
|
|
+ vmovdqu %xmm3, 110(%rdi)
|
|
|
+ vmovq %xmm4, 126(%rdi)
|
|
|
+ vmovdqu 192(%rsi), %ymm0
|
|
|
+ vmovdqu 224(%rsi), %ymm3
|
|
|
+ vpmullw %ymm6, %ymm0, %ymm1
|
|
|
+ vpmullw %ymm6, %ymm3, %ymm4
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm2
|
|
|
+ vpaddw %ymm8, %ymm3, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm7, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm7, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm1, %ymm2
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm2, %ymm1, %ymm1
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm1, %ymm1
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm9, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm9, %ymm3, %ymm3
|
|
|
+ vpand %ymm10, %ymm0, %ymm0
|
|
|
+ vpand %ymm10, %ymm3, %ymm3
|
|
|
+ vpmaddwd %ymm11, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm11, %ymm3, %ymm3
|
|
|
+ vpsllvd %ymm12, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm12, %ymm3, %ymm3
|
|
|
+ vpsrldq $8, %ymm0, %ymm1
|
|
|
+ vpsrldq $8, %ymm3, %ymm4
|
|
|
+ vpsrlvq %ymm13, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm13, %ymm3, %ymm3
|
|
|
+ vpsllq $34, %ymm1, %ymm1
|
|
|
+ vpsllq $34, %ymm4, %ymm4
|
|
|
+ vpaddq %ymm1, %ymm0, %ymm0
|
|
|
+ vpaddq %ymm4, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm14, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm14, %ymm3, %ymm3
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vextracti128 $0x01, %ymm3, %xmm4
|
|
|
+ vpblendvb %xmm14, %xmm1, %xmm0, %xmm0
|
|
|
+ vpblendvb %xmm14, %xmm4, %xmm3, %xmm3
|
|
|
+ vmovdqu %xmm0, 132(%rdi)
|
|
|
+ vmovq %xmm1, 148(%rdi)
|
|
|
+ vmovdqu %xmm3, 154(%rdi)
|
|
|
+ vmovq %xmm4, 170(%rdi)
|
|
|
+ vmovdqu 256(%rsi), %ymm0
|
|
|
+ vmovdqu 288(%rsi), %ymm3
|
|
|
+ vpmullw %ymm6, %ymm0, %ymm1
|
|
|
+ vpmullw %ymm6, %ymm3, %ymm4
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm2
|
|
|
+ vpaddw %ymm8, %ymm3, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm7, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm7, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm1, %ymm2
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm2, %ymm1, %ymm1
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm1, %ymm1
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm9, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm9, %ymm3, %ymm3
|
|
|
+ vpand %ymm10, %ymm0, %ymm0
|
|
|
+ vpand %ymm10, %ymm3, %ymm3
|
|
|
+ vpmaddwd %ymm11, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm11, %ymm3, %ymm3
|
|
|
+ vpsllvd %ymm12, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm12, %ymm3, %ymm3
|
|
|
+ vpsrldq $8, %ymm0, %ymm1
|
|
|
+ vpsrldq $8, %ymm3, %ymm4
|
|
|
+ vpsrlvq %ymm13, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm13, %ymm3, %ymm3
|
|
|
+ vpsllq $34, %ymm1, %ymm1
|
|
|
+ vpsllq $34, %ymm4, %ymm4
|
|
|
+ vpaddq %ymm1, %ymm0, %ymm0
|
|
|
+ vpaddq %ymm4, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm14, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm14, %ymm3, %ymm3
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vextracti128 $0x01, %ymm3, %xmm4
|
|
|
+ vpblendvb %xmm14, %xmm1, %xmm0, %xmm0
|
|
|
+ vpblendvb %xmm14, %xmm4, %xmm3, %xmm3
|
|
|
+ vmovdqu %xmm0, 176(%rdi)
|
|
|
+ vmovq %xmm1, 192(%rdi)
|
|
|
+ vmovdqu %xmm3, 198(%rdi)
|
|
|
+ vmovq %xmm4, 214(%rdi)
|
|
|
+ vmovdqu 320(%rsi), %ymm0
|
|
|
+ vmovdqu 352(%rsi), %ymm3
|
|
|
+ vpmullw %ymm6, %ymm0, %ymm1
|
|
|
+ vpmullw %ymm6, %ymm3, %ymm4
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm2
|
|
|
+ vpaddw %ymm8, %ymm3, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm7, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm7, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm1, %ymm2
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm2, %ymm1, %ymm1
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm1, %ymm1
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm9, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm9, %ymm3, %ymm3
|
|
|
+ vpand %ymm10, %ymm0, %ymm0
|
|
|
+ vpand %ymm10, %ymm3, %ymm3
|
|
|
+ vpmaddwd %ymm11, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm11, %ymm3, %ymm3
|
|
|
+ vpsllvd %ymm12, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm12, %ymm3, %ymm3
|
|
|
+ vpsrldq $8, %ymm0, %ymm1
|
|
|
+ vpsrldq $8, %ymm3, %ymm4
|
|
|
+ vpsrlvq %ymm13, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm13, %ymm3, %ymm3
|
|
|
+ vpsllq $34, %ymm1, %ymm1
|
|
|
+ vpsllq $34, %ymm4, %ymm4
|
|
|
+ vpaddq %ymm1, %ymm0, %ymm0
|
|
|
+ vpaddq %ymm4, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm14, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm14, %ymm3, %ymm3
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vextracti128 $0x01, %ymm3, %xmm4
|
|
|
+ vpblendvb %xmm14, %xmm1, %xmm0, %xmm0
|
|
|
+ vpblendvb %xmm14, %xmm4, %xmm3, %xmm3
|
|
|
+ vmovdqu %xmm0, 220(%rdi)
|
|
|
+ vmovq %xmm1, 236(%rdi)
|
|
|
+ vmovdqu %xmm3, 242(%rdi)
|
|
|
+ vmovq %xmm4, 258(%rdi)
|
|
|
+ vmovdqu 384(%rsi), %ymm0
|
|
|
+ vmovdqu 416(%rsi), %ymm3
|
|
|
+ vpmullw %ymm6, %ymm0, %ymm1
|
|
|
+ vpmullw %ymm6, %ymm3, %ymm4
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm2
|
|
|
+ vpaddw %ymm8, %ymm3, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm7, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm7, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm1, %ymm2
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm2, %ymm1, %ymm1
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm1, %ymm1
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm9, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm9, %ymm3, %ymm3
|
|
|
+ vpand %ymm10, %ymm0, %ymm0
|
|
|
+ vpand %ymm10, %ymm3, %ymm3
|
|
|
+ vpmaddwd %ymm11, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm11, %ymm3, %ymm3
|
|
|
+ vpsllvd %ymm12, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm12, %ymm3, %ymm3
|
|
|
+ vpsrldq $8, %ymm0, %ymm1
|
|
|
+ vpsrldq $8, %ymm3, %ymm4
|
|
|
+ vpsrlvq %ymm13, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm13, %ymm3, %ymm3
|
|
|
+ vpsllq $34, %ymm1, %ymm1
|
|
|
+ vpsllq $34, %ymm4, %ymm4
|
|
|
+ vpaddq %ymm1, %ymm0, %ymm0
|
|
|
+ vpaddq %ymm4, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm14, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm14, %ymm3, %ymm3
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vextracti128 $0x01, %ymm3, %xmm4
|
|
|
+ vpblendvb %xmm14, %xmm1, %xmm0, %xmm0
|
|
|
+ vpblendvb %xmm14, %xmm4, %xmm3, %xmm3
|
|
|
+ vmovdqu %xmm0, 264(%rdi)
|
|
|
+ vmovq %xmm1, 280(%rdi)
|
|
|
+ vmovdqu %xmm3, 286(%rdi)
|
|
|
+ vmovq %xmm4, 302(%rdi)
|
|
|
+ vmovdqu 448(%rsi), %ymm0
|
|
|
+ vmovdqu 480(%rsi), %ymm3
|
|
|
+ vpmullw %ymm6, %ymm0, %ymm1
|
|
|
+ vpmullw %ymm6, %ymm3, %ymm4
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm2
|
|
|
+ vpaddw %ymm8, %ymm3, %ymm5
|
|
|
+ vpsllw $3, %ymm0, %ymm0
|
|
|
+ vpsllw $3, %ymm3, %ymm3
|
|
|
+ vpmulhw %ymm7, %ymm0, %ymm0
|
|
|
+ vpmulhw %ymm7, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm2, %ymm1, %ymm2
|
|
|
+ vpsubw %ymm5, %ymm4, %ymm5
|
|
|
+ vpandn %ymm2, %ymm1, %ymm1
|
|
|
+ vpandn %ymm5, %ymm4, %ymm4
|
|
|
+ vpsrlw $15, %ymm1, %ymm1
|
|
|
+ vpsrlw $15, %ymm4, %ymm4
|
|
|
+ vpsubw %ymm1, %ymm0, %ymm0
|
|
|
+ vpsubw %ymm4, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm9, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm9, %ymm3, %ymm3
|
|
|
+ vpand %ymm10, %ymm0, %ymm0
|
|
|
+ vpand %ymm10, %ymm3, %ymm3
|
|
|
+ vpmaddwd %ymm11, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm11, %ymm3, %ymm3
|
|
|
+ vpsllvd %ymm12, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm12, %ymm3, %ymm3
|
|
|
+ vpsrldq $8, %ymm0, %ymm1
|
|
|
+ vpsrldq $8, %ymm3, %ymm4
|
|
|
+ vpsrlvq %ymm13, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm13, %ymm3, %ymm3
|
|
|
+ vpsllq $34, %ymm1, %ymm1
|
|
|
+ vpsllq $34, %ymm4, %ymm4
|
|
|
+ vpaddq %ymm1, %ymm0, %ymm0
|
|
|
+ vpaddq %ymm4, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm14, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm14, %ymm3, %ymm3
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vextracti128 $0x01, %ymm3, %xmm4
|
|
|
+ vpblendvb %xmm14, %xmm1, %xmm0, %xmm0
|
|
|
+ vpblendvb %xmm14, %xmm4, %xmm3, %xmm3
|
|
|
+ vmovdqu %xmm0, 308(%rdi)
|
|
|
+ vmovq %xmm1, 324(%rdi)
|
|
|
+ vmovdqu %xmm3, 330(%rdi)
|
|
|
+ vmovq %xmm4, 346(%rdi)
|
|
|
+ addq $0x160, %rdi
|
|
|
+ addq $0x200, %rsi
|
|
|
+ subl $0x01, %edx
|
|
|
+ jg L_kyber_compress_11_avx2_start
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_compress_11_avx2,.-kyber_compress_11_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_11_avx2_q:
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_11_avx2_shuf:
|
|
|
+.value 0x100,0x201
|
|
|
+.value 0x302,0x504
|
|
|
+.value 0x605,0x706
|
|
|
+.value 0x908,0xa09
|
|
|
+.value 0x403,0x504
|
|
|
+.value 0x605,0x807
|
|
|
+.value 0x908,0xa09
|
|
|
+.value 0xc0b,0xd0c
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_11_avx2_sllv:
|
|
|
+.long 0x0,0x1,0x0,0x0
|
|
|
+.long 0x0,0x1,0x0,0x0
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_11_avx2_srlv:
|
|
|
+.quad 0x0, 0x2
|
|
|
+.quad 0x0, 0x2
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_11_avx2_shift:
|
|
|
+.value 0x20,0x4
|
|
|
+.value 0x1,0x20
|
|
|
+.value 0x8,0x1
|
|
|
+.value 0x20,0x4
|
|
|
+.value 0x20,0x4
|
|
|
+.value 0x1,0x20
|
|
|
+.value 0x8,0x1
|
|
|
+.value 0x20,0x4
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_11_avx2_mask:
|
|
|
+.value 0x7ff0,0x7ff0
|
|
|
+.value 0x7ff0,0x7ff0
|
|
|
+.value 0x7ff0,0x7ff0
|
|
|
+.value 0x7ff0,0x7ff0
|
|
|
+.value 0x7ff0,0x7ff0
|
|
|
+.value 0x7ff0,0x7ff0
|
|
|
+.value 0x7ff0,0x7ff0
|
|
|
+.value 0x7ff0,0x7ff0
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_decompress_11_avx2
|
|
|
+.type kyber_decompress_11_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_decompress_11_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_decompress_11_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_decompress_11_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu L_kyber_decompress_11_avx2_q(%rip), %ymm4
|
|
|
+ vmovdqu L_kyber_decompress_11_avx2_shuf(%rip), %ymm5
|
|
|
+ vmovdqu L_kyber_decompress_11_avx2_sllv(%rip), %ymm6
|
|
|
+ vmovdqu L_kyber_decompress_11_avx2_srlv(%rip), %ymm7
|
|
|
+ vmovdqu L_kyber_decompress_11_avx2_shift(%rip), %ymm8
|
|
|
+ vmovdqu L_kyber_decompress_11_avx2_mask(%rip), %ymm9
|
|
|
+L_kyber_decompress_11_avx2_start:
|
|
|
+ vpermq $0x94, (%rsi), %ymm0
|
|
|
+ vpermq $0x94, 22(%rsi), %ymm1
|
|
|
+ vpermq $0x94, 44(%rsi), %ymm2
|
|
|
+ vpermq $0x94, 66(%rsi), %ymm3
|
|
|
+ vpshufb %ymm5, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm5, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm5, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm5, %ymm3, %ymm3
|
|
|
+ vpsrlvd %ymm6, %ymm0, %ymm0
|
|
|
+ vpsrlvd %ymm6, %ymm1, %ymm1
|
|
|
+ vpsrlvd %ymm6, %ymm2, %ymm2
|
|
|
+ vpsrlvd %ymm6, %ymm3, %ymm3
|
|
|
+ vpsrlvq %ymm7, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm7, %ymm1, %ymm1
|
|
|
+ vpsrlvq %ymm7, %ymm2, %ymm2
|
|
|
+ vpsrlvq %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm8, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm8, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm8, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm8, %ymm3, %ymm3
|
|
|
+ vpsrlw $0x01, %ymm0, %ymm0
|
|
|
+ vpsrlw $0x01, %ymm1, %ymm1
|
|
|
+ vpsrlw $0x01, %ymm2, %ymm2
|
|
|
+ vpsrlw $0x01, %ymm3, %ymm3
|
|
|
+ vpand %ymm9, %ymm0, %ymm0
|
|
|
+ vpand %ymm9, %ymm1, %ymm1
|
|
|
+ vpand %ymm9, %ymm2, %ymm2
|
|
|
+ vpand %ymm9, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm4, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm4, %ymm2, %ymm2
|
|
|
+ vpmulhrsw %ymm4, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vpermq $0x94, 88(%rsi), %ymm0
|
|
|
+ vpermq $0x94, 110(%rsi), %ymm1
|
|
|
+ vpermq $0x94, 132(%rsi), %ymm2
|
|
|
+ vpermq $0x94, 154(%rsi), %ymm3
|
|
|
+ vpshufb %ymm5, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm5, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm5, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm5, %ymm3, %ymm3
|
|
|
+ vpsrlvd %ymm6, %ymm0, %ymm0
|
|
|
+ vpsrlvd %ymm6, %ymm1, %ymm1
|
|
|
+ vpsrlvd %ymm6, %ymm2, %ymm2
|
|
|
+ vpsrlvd %ymm6, %ymm3, %ymm3
|
|
|
+ vpsrlvq %ymm7, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm7, %ymm1, %ymm1
|
|
|
+ vpsrlvq %ymm7, %ymm2, %ymm2
|
|
|
+ vpsrlvq %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm8, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm8, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm8, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm8, %ymm3, %ymm3
|
|
|
+ vpsrlw $0x01, %ymm0, %ymm0
|
|
|
+ vpsrlw $0x01, %ymm1, %ymm1
|
|
|
+ vpsrlw $0x01, %ymm2, %ymm2
|
|
|
+ vpsrlw $0x01, %ymm3, %ymm3
|
|
|
+ vpand %ymm9, %ymm0, %ymm0
|
|
|
+ vpand %ymm9, %ymm1, %ymm1
|
|
|
+ vpand %ymm9, %ymm2, %ymm2
|
|
|
+ vpand %ymm9, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm4, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm4, %ymm2, %ymm2
|
|
|
+ vpmulhrsw %ymm4, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 128(%rdi)
|
|
|
+ vmovdqu %ymm1, 160(%rdi)
|
|
|
+ vmovdqu %ymm2, 192(%rdi)
|
|
|
+ vmovdqu %ymm3, 224(%rdi)
|
|
|
+ vpermq $0x94, 176(%rsi), %ymm0
|
|
|
+ vpermq $0x94, 198(%rsi), %ymm1
|
|
|
+ vpermq $0x94, 220(%rsi), %ymm2
|
|
|
+ vpermq $0x94, 242(%rsi), %ymm3
|
|
|
+ vpshufb %ymm5, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm5, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm5, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm5, %ymm3, %ymm3
|
|
|
+ vpsrlvd %ymm6, %ymm0, %ymm0
|
|
|
+ vpsrlvd %ymm6, %ymm1, %ymm1
|
|
|
+ vpsrlvd %ymm6, %ymm2, %ymm2
|
|
|
+ vpsrlvd %ymm6, %ymm3, %ymm3
|
|
|
+ vpsrlvq %ymm7, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm7, %ymm1, %ymm1
|
|
|
+ vpsrlvq %ymm7, %ymm2, %ymm2
|
|
|
+ vpsrlvq %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm8, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm8, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm8, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm8, %ymm3, %ymm3
|
|
|
+ vpsrlw $0x01, %ymm0, %ymm0
|
|
|
+ vpsrlw $0x01, %ymm1, %ymm1
|
|
|
+ vpsrlw $0x01, %ymm2, %ymm2
|
|
|
+ vpsrlw $0x01, %ymm3, %ymm3
|
|
|
+ vpand %ymm9, %ymm0, %ymm0
|
|
|
+ vpand %ymm9, %ymm1, %ymm1
|
|
|
+ vpand %ymm9, %ymm2, %ymm2
|
|
|
+ vpand %ymm9, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm4, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm4, %ymm2, %ymm2
|
|
|
+ vpmulhrsw %ymm4, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 256(%rdi)
|
|
|
+ vmovdqu %ymm1, 288(%rdi)
|
|
|
+ vmovdqu %ymm2, 320(%rdi)
|
|
|
+ vmovdqu %ymm3, 352(%rdi)
|
|
|
+ vpermq $0x94, 264(%rsi), %ymm0
|
|
|
+ vpermq $0x94, 286(%rsi), %ymm1
|
|
|
+ vpermq $0x94, 308(%rsi), %ymm2
|
|
|
+ vpermq $0x94, 330(%rsi), %ymm3
|
|
|
+ vpshufb %ymm5, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm5, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm5, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm5, %ymm3, %ymm3
|
|
|
+ vpsrlvd %ymm6, %ymm0, %ymm0
|
|
|
+ vpsrlvd %ymm6, %ymm1, %ymm1
|
|
|
+ vpsrlvd %ymm6, %ymm2, %ymm2
|
|
|
+ vpsrlvd %ymm6, %ymm3, %ymm3
|
|
|
+ vpsrlvq %ymm7, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm7, %ymm1, %ymm1
|
|
|
+ vpsrlvq %ymm7, %ymm2, %ymm2
|
|
|
+ vpsrlvq %ymm7, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm8, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm8, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm8, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm8, %ymm3, %ymm3
|
|
|
+ vpsrlw $0x01, %ymm0, %ymm0
|
|
|
+ vpsrlw $0x01, %ymm1, %ymm1
|
|
|
+ vpsrlw $0x01, %ymm2, %ymm2
|
|
|
+ vpsrlw $0x01, %ymm3, %ymm3
|
|
|
+ vpand %ymm9, %ymm0, %ymm0
|
|
|
+ vpand %ymm9, %ymm1, %ymm1
|
|
|
+ vpand %ymm9, %ymm2, %ymm2
|
|
|
+ vpand %ymm9, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm4, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm4, %ymm2, %ymm2
|
|
|
+ vpmulhrsw %ymm4, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 384(%rdi)
|
|
|
+ vmovdqu %ymm1, 416(%rdi)
|
|
|
+ vmovdqu %ymm2, 448(%rdi)
|
|
|
+ vmovdqu %ymm3, 480(%rdi)
|
|
|
+ addq $0x160, %rsi
|
|
|
+ addq $0x200, %rdi
|
|
|
+ subl $0x01, %edx
|
|
|
+ jg L_kyber_decompress_11_avx2_start
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_decompress_11_avx2,.-kyber_decompress_11_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_4_avx2_mask:
|
|
|
+.value 0xf,0xf
|
|
|
+.value 0xf,0xf
|
|
|
+.value 0xf,0xf
|
|
|
+.value 0xf,0xf
|
|
|
+.value 0xf,0xf
|
|
|
+.value 0xf,0xf
|
|
|
+.value 0xf,0xf
|
|
|
+.value 0xf,0xf
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_4_avx2_shift:
|
|
|
+.value 0x200,0x200
|
|
|
+.value 0x200,0x200
|
|
|
+.value 0x200,0x200
|
|
|
+.value 0x200,0x200
|
|
|
+.value 0x200,0x200
|
|
|
+.value 0x200,0x200
|
|
|
+.value 0x200,0x200
|
|
|
+.value 0x200,0x200
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_4_avx2_perm:
|
|
|
+.long 0x0,0x4,0x1,0x5
|
|
|
+.long 0x2,0x6,0x3,0x7
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_4_avx2_v:
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_4_avx2_shift12:
|
|
|
+.value 0x1001,0x1001
|
|
|
+.value 0x1001,0x1001
|
|
|
+.value 0x1001,0x1001
|
|
|
+.value 0x1001,0x1001
|
|
|
+.value 0x1001,0x1001
|
|
|
+.value 0x1001,0x1001
|
|
|
+.value 0x1001,0x1001
|
|
|
+.value 0x1001,0x1001
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_compress_4_avx2
|
|
|
+.type kyber_compress_4_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_compress_4_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_compress_4_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_compress_4_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu L_kyber_compress_4_avx2_mask(%rip), %ymm8
|
|
|
+ vmovdqu L_kyber_compress_4_avx2_shift(%rip), %ymm9
|
|
|
+ vmovdqu L_kyber_compress_4_avx2_perm(%rip), %ymm10
|
|
|
+ vmovdqu L_kyber_compress_4_avx2_v(%rip), %ymm11
|
|
|
+ vmovdqu L_kyber_compress_4_avx2_shift12(%rip), %ymm12
|
|
|
+ vpmulhw (%rsi), %ymm11, %ymm0
|
|
|
+ vpmulhw 32(%rsi), %ymm11, %ymm1
|
|
|
+ vpmulhw 64(%rsi), %ymm11, %ymm2
|
|
|
+ vpmulhw 96(%rsi), %ymm11, %ymm3
|
|
|
+ vpmulhrsw %ymm9, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm9, %ymm2, %ymm2
|
|
|
+ vpmulhrsw %ymm9, %ymm3, %ymm3
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm2, %ymm2
|
|
|
+ vpand %ymm8, %ymm3, %ymm3
|
|
|
+ vpackuswb %ymm1, %ymm0, %ymm0
|
|
|
+ vpackuswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpmaddubsw %ymm12, %ymm0, %ymm0
|
|
|
+ vpmaddubsw %ymm12, %ymm2, %ymm2
|
|
|
+ vpackuswb %ymm2, %ymm0, %ymm0
|
|
|
+ vpmulhw 128(%rsi), %ymm11, %ymm4
|
|
|
+ vpmulhw 160(%rsi), %ymm11, %ymm5
|
|
|
+ vpmulhw 192(%rsi), %ymm11, %ymm6
|
|
|
+ vpmulhw 224(%rsi), %ymm11, %ymm7
|
|
|
+ vpmulhrsw %ymm9, %ymm4, %ymm4
|
|
|
+ vpmulhrsw %ymm9, %ymm5, %ymm5
|
|
|
+ vpmulhrsw %ymm9, %ymm6, %ymm6
|
|
|
+ vpmulhrsw %ymm9, %ymm7, %ymm7
|
|
|
+ vpand %ymm8, %ymm4, %ymm4
|
|
|
+ vpand %ymm8, %ymm5, %ymm5
|
|
|
+ vpand %ymm8, %ymm6, %ymm6
|
|
|
+ vpand %ymm8, %ymm7, %ymm7
|
|
|
+ vpackuswb %ymm5, %ymm4, %ymm4
|
|
|
+ vpackuswb %ymm7, %ymm6, %ymm6
|
|
|
+ vpmaddubsw %ymm12, %ymm4, %ymm4
|
|
|
+ vpmaddubsw %ymm12, %ymm6, %ymm6
|
|
|
+ vpackuswb %ymm6, %ymm4, %ymm4
|
|
|
+ vpermd %ymm0, %ymm10, %ymm0
|
|
|
+ vpermd %ymm4, %ymm10, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm4, 32(%rdi)
|
|
|
+ vpmulhw 256(%rsi), %ymm11, %ymm0
|
|
|
+ vpmulhw 288(%rsi), %ymm11, %ymm1
|
|
|
+ vpmulhw 320(%rsi), %ymm11, %ymm2
|
|
|
+ vpmulhw 352(%rsi), %ymm11, %ymm3
|
|
|
+ vpmulhrsw %ymm9, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm9, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm9, %ymm2, %ymm2
|
|
|
+ vpmulhrsw %ymm9, %ymm3, %ymm3
|
|
|
+ vpand %ymm8, %ymm0, %ymm0
|
|
|
+ vpand %ymm8, %ymm1, %ymm1
|
|
|
+ vpand %ymm8, %ymm2, %ymm2
|
|
|
+ vpand %ymm8, %ymm3, %ymm3
|
|
|
+ vpackuswb %ymm1, %ymm0, %ymm0
|
|
|
+ vpackuswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpmaddubsw %ymm12, %ymm0, %ymm0
|
|
|
+ vpmaddubsw %ymm12, %ymm2, %ymm2
|
|
|
+ vpackuswb %ymm2, %ymm0, %ymm0
|
|
|
+ vpmulhw 384(%rsi), %ymm11, %ymm4
|
|
|
+ vpmulhw 416(%rsi), %ymm11, %ymm5
|
|
|
+ vpmulhw 448(%rsi), %ymm11, %ymm6
|
|
|
+ vpmulhw 480(%rsi), %ymm11, %ymm7
|
|
|
+ vpmulhrsw %ymm9, %ymm4, %ymm4
|
|
|
+ vpmulhrsw %ymm9, %ymm5, %ymm5
|
|
|
+ vpmulhrsw %ymm9, %ymm6, %ymm6
|
|
|
+ vpmulhrsw %ymm9, %ymm7, %ymm7
|
|
|
+ vpand %ymm8, %ymm4, %ymm4
|
|
|
+ vpand %ymm8, %ymm5, %ymm5
|
|
|
+ vpand %ymm8, %ymm6, %ymm6
|
|
|
+ vpand %ymm8, %ymm7, %ymm7
|
|
|
+ vpackuswb %ymm5, %ymm4, %ymm4
|
|
|
+ vpackuswb %ymm7, %ymm6, %ymm6
|
|
|
+ vpmaddubsw %ymm12, %ymm4, %ymm4
|
|
|
+ vpmaddubsw %ymm12, %ymm6, %ymm6
|
|
|
+ vpackuswb %ymm6, %ymm4, %ymm4
|
|
|
+ vpermd %ymm0, %ymm10, %ymm0
|
|
|
+ vpermd %ymm4, %ymm10, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rdi)
|
|
|
+ vmovdqu %ymm4, 96(%rdi)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_compress_4_avx2,.-kyber_compress_4_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_4_avx2_mask:
|
|
|
+.long 0xf0000f,0xf0000f,0xf0000f,0xf0000f
|
|
|
+.long 0xf0000f,0xf0000f,0xf0000f,0xf0000f
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_4_avx2_shift:
|
|
|
+.long 0x800800,0x800800,0x800800,0x800800
|
|
|
+.long 0x800800,0x800800,0x800800,0x800800
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_4_avx2_q:
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_4_avx2_shuf:
|
|
|
+.value 0x0,0x0
|
|
|
+.value 0x101,0x101
|
|
|
+.value 0x202,0x202
|
|
|
+.value 0x303,0x303
|
|
|
+.value 0x404,0x404
|
|
|
+.value 0x505,0x505
|
|
|
+.value 0x606,0x606
|
|
|
+.value 0x707,0x707
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_decompress_4_avx2
|
|
|
+.type kyber_decompress_4_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_decompress_4_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_decompress_4_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_decompress_4_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu L_kyber_decompress_4_avx2_mask(%rip), %ymm4
|
|
|
+ vmovdqu L_kyber_decompress_4_avx2_shift(%rip), %ymm5
|
|
|
+ vmovdqu L_kyber_decompress_4_avx2_shuf(%rip), %ymm6
|
|
|
+ vmovdqu L_kyber_decompress_4_avx2_q(%rip), %ymm7
|
|
|
+ vpbroadcastq (%rsi), %ymm0
|
|
|
+ vpbroadcastq 8(%rsi), %ymm1
|
|
|
+ vpbroadcastq 16(%rsi), %ymm2
|
|
|
+ vpbroadcastq 24(%rsi), %ymm3
|
|
|
+ vpshufb %ymm6, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm6, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm6, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm6, %ymm3, %ymm3
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm2, %ymm2
|
|
|
+ vpand %ymm4, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm7, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm7, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm7, %ymm2, %ymm2
|
|
|
+ vpmulhrsw %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vpbroadcastq 32(%rsi), %ymm0
|
|
|
+ vpbroadcastq 40(%rsi), %ymm1
|
|
|
+ vpbroadcastq 48(%rsi), %ymm2
|
|
|
+ vpbroadcastq 56(%rsi), %ymm3
|
|
|
+ vpshufb %ymm6, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm6, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm6, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm6, %ymm3, %ymm3
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm2, %ymm2
|
|
|
+ vpand %ymm4, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm7, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm7, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm7, %ymm2, %ymm2
|
|
|
+ vpmulhrsw %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 128(%rdi)
|
|
|
+ vmovdqu %ymm1, 160(%rdi)
|
|
|
+ vmovdqu %ymm2, 192(%rdi)
|
|
|
+ vmovdqu %ymm3, 224(%rdi)
|
|
|
+ vpbroadcastq 64(%rsi), %ymm0
|
|
|
+ vpbroadcastq 72(%rsi), %ymm1
|
|
|
+ vpbroadcastq 80(%rsi), %ymm2
|
|
|
+ vpbroadcastq 88(%rsi), %ymm3
|
|
|
+ vpshufb %ymm6, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm6, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm6, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm6, %ymm3, %ymm3
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm2, %ymm2
|
|
|
+ vpand %ymm4, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm7, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm7, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm7, %ymm2, %ymm2
|
|
|
+ vpmulhrsw %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 256(%rdi)
|
|
|
+ vmovdqu %ymm1, 288(%rdi)
|
|
|
+ vmovdqu %ymm2, 320(%rdi)
|
|
|
+ vmovdqu %ymm3, 352(%rdi)
|
|
|
+ vpbroadcastq 96(%rsi), %ymm0
|
|
|
+ vpbroadcastq 104(%rsi), %ymm1
|
|
|
+ vpbroadcastq 112(%rsi), %ymm2
|
|
|
+ vpbroadcastq 120(%rsi), %ymm3
|
|
|
+ vpshufb %ymm6, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm6, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm6, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm6, %ymm3, %ymm3
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm2, %ymm2
|
|
|
+ vpand %ymm4, %ymm3, %ymm3
|
|
|
+ vpmullw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm5, %ymm1, %ymm1
|
|
|
+ vpmullw %ymm5, %ymm2, %ymm2
|
|
|
+ vpmullw %ymm5, %ymm3, %ymm3
|
|
|
+ vpmulhrsw %ymm7, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm7, %ymm1, %ymm1
|
|
|
+ vpmulhrsw %ymm7, %ymm2, %ymm2
|
|
|
+ vpmulhrsw %ymm7, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm0, 384(%rdi)
|
|
|
+ vmovdqu %ymm1, 416(%rdi)
|
|
|
+ vmovdqu %ymm2, 448(%rdi)
|
|
|
+ vmovdqu %ymm3, 480(%rdi)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_decompress_4_avx2,.-kyber_decompress_4_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_5_avx2_v:
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+.value 0x4ebf,0x4ebf
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_5_avx2_shift:
|
|
|
+.value 0x400,0x400
|
|
|
+.value 0x400,0x400
|
|
|
+.value 0x400,0x400
|
|
|
+.value 0x400,0x400
|
|
|
+.value 0x400,0x400
|
|
|
+.value 0x400,0x400
|
|
|
+.value 0x400,0x400
|
|
|
+.value 0x400,0x400
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_5_avx2_mask:
|
|
|
+.value 0x1f,0x1f
|
|
|
+.value 0x1f,0x1f
|
|
|
+.value 0x1f,0x1f
|
|
|
+.value 0x1f,0x1f
|
|
|
+.value 0x1f,0x1f
|
|
|
+.value 0x1f,0x1f
|
|
|
+.value 0x1f,0x1f
|
|
|
+.value 0x1f,0x1f
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_5_avx2_shift1:
|
|
|
+.value 0x2001,0x2001
|
|
|
+.value 0x2001,0x2001
|
|
|
+.value 0x2001,0x2001
|
|
|
+.value 0x2001,0x2001
|
|
|
+.value 0x2001,0x2001
|
|
|
+.value 0x2001,0x2001
|
|
|
+.value 0x2001,0x2001
|
|
|
+.value 0x2001,0x2001
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_5_avx2_shift2:
|
|
|
+.long 0x4000001,0x4000001,0x4000001,0x4000001
|
|
|
+.long 0x4000001,0x4000001,0x4000001,0x4000001
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_5_avx2_shlv:
|
|
|
+.quad 0xc, 0xc
|
|
|
+.quad 0xc, 0xc
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_compress_5_avx2_shuffle:
|
|
|
+.value 0x100,0x302
|
|
|
+.value 0xff04,0xffff
|
|
|
+.value 0xffff,0x908
|
|
|
+.value 0xb0a,0xff0c
|
|
|
+.value 0xa09,0xc0b
|
|
|
+.value 0xff,0x201
|
|
|
+.value 0x403,0xffff
|
|
|
+.value 0xffff,0x8ff
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_compress_5_avx2
|
|
|
+.type kyber_compress_5_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_compress_5_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_compress_5_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_compress_5_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu L_kyber_compress_5_avx2_v(%rip), %ymm2
|
|
|
+ vmovdqu L_kyber_compress_5_avx2_shift(%rip), %ymm3
|
|
|
+ vmovdqu L_kyber_compress_5_avx2_mask(%rip), %ymm4
|
|
|
+ vmovdqu L_kyber_compress_5_avx2_shift1(%rip), %ymm5
|
|
|
+ vmovdqu L_kyber_compress_5_avx2_shift2(%rip), %ymm6
|
|
|
+ vmovdqu L_kyber_compress_5_avx2_shlv(%rip), %ymm7
|
|
|
+ vmovdqu L_kyber_compress_5_avx2_shuffle(%rip), %ymm8
|
|
|
+ vpmulhw (%rsi), %ymm2, %ymm0
|
|
|
+ vpmulhw 32(%rsi), %ymm2, %ymm1
|
|
|
+ vpmulhrsw %ymm3, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpackuswb %ymm1, %ymm0, %ymm0
|
|
|
+ vpmaddubsw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm6, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm7, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm7, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm8, %ymm0, %ymm0
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vpblendvb %xmm8, %xmm1, %xmm0, %xmm0
|
|
|
+ vmovdqu %xmm0, (%rdi)
|
|
|
+ movss %xmm1, 16(%rdi)
|
|
|
+ vpmulhw 64(%rsi), %ymm2, %ymm0
|
|
|
+ vpmulhw 96(%rsi), %ymm2, %ymm1
|
|
|
+ vpmulhrsw %ymm3, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpackuswb %ymm1, %ymm0, %ymm0
|
|
|
+ vpmaddubsw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm6, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm7, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm7, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm8, %ymm0, %ymm0
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vpblendvb %xmm8, %xmm1, %xmm0, %xmm0
|
|
|
+ vmovdqu %xmm0, 20(%rdi)
|
|
|
+ movss %xmm1, 36(%rdi)
|
|
|
+ vpmulhw 128(%rsi), %ymm2, %ymm0
|
|
|
+ vpmulhw 160(%rsi), %ymm2, %ymm1
|
|
|
+ vpmulhrsw %ymm3, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpackuswb %ymm1, %ymm0, %ymm0
|
|
|
+ vpmaddubsw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm6, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm7, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm7, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm8, %ymm0, %ymm0
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vpblendvb %xmm8, %xmm1, %xmm0, %xmm0
|
|
|
+ vmovdqu %xmm0, 40(%rdi)
|
|
|
+ movss %xmm1, 56(%rdi)
|
|
|
+ vpmulhw 192(%rsi), %ymm2, %ymm0
|
|
|
+ vpmulhw 224(%rsi), %ymm2, %ymm1
|
|
|
+ vpmulhrsw %ymm3, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpackuswb %ymm1, %ymm0, %ymm0
|
|
|
+ vpmaddubsw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm6, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm7, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm7, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm8, %ymm0, %ymm0
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vpblendvb %xmm8, %xmm1, %xmm0, %xmm0
|
|
|
+ vmovdqu %xmm0, 60(%rdi)
|
|
|
+ movss %xmm1, 76(%rdi)
|
|
|
+ vpmulhw 256(%rsi), %ymm2, %ymm0
|
|
|
+ vpmulhw 288(%rsi), %ymm2, %ymm1
|
|
|
+ vpmulhrsw %ymm3, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpackuswb %ymm1, %ymm0, %ymm0
|
|
|
+ vpmaddubsw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm6, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm7, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm7, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm8, %ymm0, %ymm0
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vpblendvb %xmm8, %xmm1, %xmm0, %xmm0
|
|
|
+ vmovdqu %xmm0, 80(%rdi)
|
|
|
+ movss %xmm1, 96(%rdi)
|
|
|
+ vpmulhw 320(%rsi), %ymm2, %ymm0
|
|
|
+ vpmulhw 352(%rsi), %ymm2, %ymm1
|
|
|
+ vpmulhrsw %ymm3, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpackuswb %ymm1, %ymm0, %ymm0
|
|
|
+ vpmaddubsw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm6, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm7, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm7, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm8, %ymm0, %ymm0
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vpblendvb %xmm8, %xmm1, %xmm0, %xmm0
|
|
|
+ vmovdqu %xmm0, 100(%rdi)
|
|
|
+ movss %xmm1, 116(%rdi)
|
|
|
+ vpmulhw 384(%rsi), %ymm2, %ymm0
|
|
|
+ vpmulhw 416(%rsi), %ymm2, %ymm1
|
|
|
+ vpmulhrsw %ymm3, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpackuswb %ymm1, %ymm0, %ymm0
|
|
|
+ vpmaddubsw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm6, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm7, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm7, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm8, %ymm0, %ymm0
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vpblendvb %xmm8, %xmm1, %xmm0, %xmm0
|
|
|
+ vmovdqu %xmm0, 120(%rdi)
|
|
|
+ movss %xmm1, 136(%rdi)
|
|
|
+ vpmulhw 448(%rsi), %ymm2, %ymm0
|
|
|
+ vpmulhw 480(%rsi), %ymm2, %ymm1
|
|
|
+ vpmulhrsw %ymm3, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm3, %ymm1, %ymm1
|
|
|
+ vpand %ymm4, %ymm0, %ymm0
|
|
|
+ vpand %ymm4, %ymm1, %ymm1
|
|
|
+ vpackuswb %ymm1, %ymm0, %ymm0
|
|
|
+ vpmaddubsw %ymm5, %ymm0, %ymm0
|
|
|
+ vpmaddwd %ymm6, %ymm0, %ymm0
|
|
|
+ vpsllvd %ymm7, %ymm0, %ymm0
|
|
|
+ vpsrlvq %ymm7, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm8, %ymm0, %ymm0
|
|
|
+ vextracti128 $0x01, %ymm0, %xmm1
|
|
|
+ vpblendvb %xmm8, %xmm1, %xmm0, %xmm0
|
|
|
+ vmovdqu %xmm0, 140(%rdi)
|
|
|
+ movss %xmm1, 156(%rdi)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_compress_5_avx2,.-kyber_compress_5_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_5_avx2_q:
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+.value 0xd01,0xd01
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_5_avx2_shuf:
|
|
|
+.value 0x0,0x100
|
|
|
+.value 0x101,0x201
|
|
|
+.value 0x302,0x303
|
|
|
+.value 0x403,0x404
|
|
|
+.value 0x505,0x605
|
|
|
+.value 0x606,0x706
|
|
|
+.value 0x807,0x808
|
|
|
+.value 0x908,0x909
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_5_avx2_mask:
|
|
|
+.value 0x1f,0x3e0
|
|
|
+.value 0x7c,0xf80
|
|
|
+.value 0x1f0,0x3e
|
|
|
+.value 0x7c0,0xfb
|
|
|
+.value 0x1f,0x3e0
|
|
|
+.value 0x7c,0xf80
|
|
|
+.value 0x1f0,0x3e
|
|
|
+.value 0x7c0,0xfb
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_decompress_5_avx2_shift:
|
|
|
+.value 0x400,0x20
|
|
|
+.value 0x100,0x8
|
|
|
+.value 0x40,0x200
|
|
|
+.value 0x10,0x80
|
|
|
+.value 0x400,0x20
|
|
|
+.value 0x100,0x8
|
|
|
+.value 0x40,0x200
|
|
|
+.value 0x10,0x80
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_decompress_5_avx2
|
|
|
+.type kyber_decompress_5_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_decompress_5_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_decompress_5_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_decompress_5_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu L_kyber_decompress_5_avx2_q(%rip), %ymm1
|
|
|
+ vmovdqu L_kyber_decompress_5_avx2_shuf(%rip), %ymm2
|
|
|
+ vmovdqu L_kyber_decompress_5_avx2_mask(%rip), %ymm3
|
|
|
+ vmovdqu L_kyber_decompress_5_avx2_shift(%rip), %ymm4
|
|
|
+ vbroadcasti128 (%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vbroadcasti128 10(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 32(%rdi)
|
|
|
+ vbroadcasti128 20(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 64(%rdi)
|
|
|
+ vbroadcasti128 30(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 96(%rdi)
|
|
|
+ vbroadcasti128 40(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 128(%rdi)
|
|
|
+ vbroadcasti128 50(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 160(%rdi)
|
|
|
+ vbroadcasti128 60(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 192(%rdi)
|
|
|
+ vbroadcasti128 70(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 224(%rdi)
|
|
|
+ vbroadcasti128 80(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 256(%rdi)
|
|
|
+ vbroadcasti128 90(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 288(%rdi)
|
|
|
+ vbroadcasti128 100(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 320(%rdi)
|
|
|
+ vbroadcasti128 110(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 352(%rdi)
|
|
|
+ vbroadcasti128 120(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 384(%rdi)
|
|
|
+ vbroadcasti128 130(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 416(%rdi)
|
|
|
+ vbroadcasti128 140(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 448(%rdi)
|
|
|
+ vbroadcasti128 150(%rsi), %ymm0
|
|
|
+ vpshufb %ymm2, %ymm0, %ymm0
|
|
|
+ vpand %ymm3, %ymm0, %ymm0
|
|
|
+ vpmullw %ymm4, %ymm0, %ymm0
|
|
|
+ vpmulhrsw %ymm1, %ymm0, %ymm0
|
|
|
+ vmovdqu %ymm0, 480(%rdi)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_decompress_5_avx2,.-kyber_decompress_5_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_from_msg_avx2_shift:
|
|
|
+.long 0x3,0x2,0x1,0x0
|
|
|
+.long 0x3,0x2,0x1,0x0
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_from_msg_avx2_shuf:
|
|
|
+.value 0x100,0x504
|
|
|
+.value 0x908,0xd0c
|
|
|
+.value 0x302,0x706
|
|
|
+.value 0xb0a,0xf0e
|
|
|
+.value 0x100,0x504
|
|
|
+.value 0x908,0xd0c
|
|
|
+.value 0x302,0x706
|
|
|
+.value 0xb0a,0xf0e
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_from_msg_avx2_hqs:
|
|
|
+.value 0x681,0x681
|
|
|
+.value 0x681,0x681
|
|
|
+.value 0x681,0x681
|
|
|
+.value 0x681,0x681
|
|
|
+.value 0x681,0x681
|
|
|
+.value 0x681,0x681
|
|
|
+.value 0x681,0x681
|
|
|
+.value 0x681,0x681
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_from_msg_avx2
|
|
|
+.type kyber_from_msg_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_from_msg_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_from_msg_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_from_msg_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu L_kyber_from_msg_avx2_shift(%rip), %ymm9
|
|
|
+ vmovdqu L_kyber_from_msg_avx2_shuf(%rip), %ymm10
|
|
|
+ vmovdqu L_kyber_from_msg_avx2_hqs(%rip), %ymm11
|
|
|
+ vpshufd $0x00, %ymm0, %ymm4
|
|
|
+ vpsllvd %ymm9, %ymm4, %ymm4
|
|
|
+ vpshufb %ymm10, %ymm4, %ymm4
|
|
|
+ vpsllw $12, %ymm4, %ymm1
|
|
|
+ vpsllw $8, %ymm4, %ymm2
|
|
|
+ vpsllw $4, %ymm4, %ymm3
|
|
|
+ vpsraw $15, %ymm1, %ymm1
|
|
|
+ vpsraw $15, %ymm2, %ymm2
|
|
|
+ vpsraw $15, %ymm3, %ymm3
|
|
|
+ vpsraw $15, %ymm4, %ymm4
|
|
|
+ vpand %ymm11, %ymm1, %ymm1
|
|
|
+ vpand %ymm11, %ymm2, %ymm2
|
|
|
+ vpand %ymm11, %ymm3, %ymm3
|
|
|
+ vpand %ymm11, %ymm4, %ymm4
|
|
|
+ vpunpcklqdq %ymm2, %ymm1, %ymm5
|
|
|
+ vpunpckhqdq %ymm2, %ymm1, %ymm7
|
|
|
+ vpunpcklqdq %ymm4, %ymm3, %ymm6
|
|
|
+ vpunpckhqdq %ymm4, %ymm3, %ymm8
|
|
|
+ vperm2i128 $32, %ymm6, %ymm5, %ymm1
|
|
|
+ vperm2i128 $49, %ymm6, %ymm5, %ymm3
|
|
|
+ vperm2i128 $32, %ymm8, %ymm7, %ymm2
|
|
|
+ vperm2i128 $49, %ymm8, %ymm7, %ymm4
|
|
|
+ vmovdqu %ymm1, (%rdi)
|
|
|
+ vmovdqu %ymm2, 32(%rdi)
|
|
|
+ vmovdqu %ymm3, 256(%rdi)
|
|
|
+ vmovdqu %ymm4, 288(%rdi)
|
|
|
+ vpshufd $0x55, %ymm0, %ymm4
|
|
|
+ vpsllvd %ymm9, %ymm4, %ymm4
|
|
|
+ vpshufb %ymm10, %ymm4, %ymm4
|
|
|
+ vpsllw $12, %ymm4, %ymm1
|
|
|
+ vpsllw $8, %ymm4, %ymm2
|
|
|
+ vpsllw $4, %ymm4, %ymm3
|
|
|
+ vpsraw $15, %ymm1, %ymm1
|
|
|
+ vpsraw $15, %ymm2, %ymm2
|
|
|
+ vpsraw $15, %ymm3, %ymm3
|
|
|
+ vpsraw $15, %ymm4, %ymm4
|
|
|
+ vpand %ymm11, %ymm1, %ymm1
|
|
|
+ vpand %ymm11, %ymm2, %ymm2
|
|
|
+ vpand %ymm11, %ymm3, %ymm3
|
|
|
+ vpand %ymm11, %ymm4, %ymm4
|
|
|
+ vpunpcklqdq %ymm2, %ymm1, %ymm5
|
|
|
+ vpunpckhqdq %ymm2, %ymm1, %ymm7
|
|
|
+ vpunpcklqdq %ymm4, %ymm3, %ymm6
|
|
|
+ vpunpckhqdq %ymm4, %ymm3, %ymm8
|
|
|
+ vperm2i128 $32, %ymm6, %ymm5, %ymm1
|
|
|
+ vperm2i128 $49, %ymm6, %ymm5, %ymm3
|
|
|
+ vperm2i128 $32, %ymm8, %ymm7, %ymm2
|
|
|
+ vperm2i128 $49, %ymm8, %ymm7, %ymm4
|
|
|
+ vmovdqu %ymm1, 64(%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rdi)
|
|
|
+ vmovdqu %ymm3, 320(%rdi)
|
|
|
+ vmovdqu %ymm4, 352(%rdi)
|
|
|
+ vpshufd $0xaa, %ymm0, %ymm4
|
|
|
+ vpsllvd %ymm9, %ymm4, %ymm4
|
|
|
+ vpshufb %ymm10, %ymm4, %ymm4
|
|
|
+ vpsllw $12, %ymm4, %ymm1
|
|
|
+ vpsllw $8, %ymm4, %ymm2
|
|
|
+ vpsllw $4, %ymm4, %ymm3
|
|
|
+ vpsraw $15, %ymm1, %ymm1
|
|
|
+ vpsraw $15, %ymm2, %ymm2
|
|
|
+ vpsraw $15, %ymm3, %ymm3
|
|
|
+ vpsraw $15, %ymm4, %ymm4
|
|
|
+ vpand %ymm11, %ymm1, %ymm1
|
|
|
+ vpand %ymm11, %ymm2, %ymm2
|
|
|
+ vpand %ymm11, %ymm3, %ymm3
|
|
|
+ vpand %ymm11, %ymm4, %ymm4
|
|
|
+ vpunpcklqdq %ymm2, %ymm1, %ymm5
|
|
|
+ vpunpckhqdq %ymm2, %ymm1, %ymm7
|
|
|
+ vpunpcklqdq %ymm4, %ymm3, %ymm6
|
|
|
+ vpunpckhqdq %ymm4, %ymm3, %ymm8
|
|
|
+ vperm2i128 $32, %ymm6, %ymm5, %ymm1
|
|
|
+ vperm2i128 $49, %ymm6, %ymm5, %ymm3
|
|
|
+ vperm2i128 $32, %ymm8, %ymm7, %ymm2
|
|
|
+ vperm2i128 $49, %ymm8, %ymm7, %ymm4
|
|
|
+ vmovdqu %ymm1, 128(%rdi)
|
|
|
+ vmovdqu %ymm2, 160(%rdi)
|
|
|
+ vmovdqu %ymm3, 384(%rdi)
|
|
|
+ vmovdqu %ymm4, 416(%rdi)
|
|
|
+ vpshufd $0xff, %ymm0, %ymm4
|
|
|
+ vpsllvd %ymm9, %ymm4, %ymm4
|
|
|
+ vpshufb %ymm10, %ymm4, %ymm4
|
|
|
+ vpsllw $12, %ymm4, %ymm1
|
|
|
+ vpsllw $8, %ymm4, %ymm2
|
|
|
+ vpsllw $4, %ymm4, %ymm3
|
|
|
+ vpsraw $15, %ymm1, %ymm1
|
|
|
+ vpsraw $15, %ymm2, %ymm2
|
|
|
+ vpsraw $15, %ymm3, %ymm3
|
|
|
+ vpsraw $15, %ymm4, %ymm4
|
|
|
+ vpand %ymm11, %ymm1, %ymm1
|
|
|
+ vpand %ymm11, %ymm2, %ymm2
|
|
|
+ vpand %ymm11, %ymm3, %ymm3
|
|
|
+ vpand %ymm11, %ymm4, %ymm4
|
|
|
+ vpunpcklqdq %ymm2, %ymm1, %ymm5
|
|
|
+ vpunpckhqdq %ymm2, %ymm1, %ymm7
|
|
|
+ vpunpcklqdq %ymm4, %ymm3, %ymm6
|
|
|
+ vpunpckhqdq %ymm4, %ymm3, %ymm8
|
|
|
+ vperm2i128 $32, %ymm6, %ymm5, %ymm1
|
|
|
+ vperm2i128 $49, %ymm6, %ymm5, %ymm3
|
|
|
+ vperm2i128 $32, %ymm8, %ymm7, %ymm2
|
|
|
+ vperm2i128 $49, %ymm8, %ymm7, %ymm4
|
|
|
+ vmovdqu %ymm1, 192(%rdi)
|
|
|
+ vmovdqu %ymm2, 224(%rdi)
|
|
|
+ vmovdqu %ymm3, 448(%rdi)
|
|
|
+ vmovdqu %ymm4, 480(%rdi)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_from_msg_avx2,.-kyber_from_msg_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_to_msg_avx2_hqs:
|
|
|
+.value 0x680,0x680
|
|
|
+.value 0x680,0x680
|
|
|
+.value 0x680,0x680
|
|
|
+.value 0x680,0x680
|
|
|
+.value 0x680,0x680
|
|
|
+.value 0x680,0x680
|
|
|
+.value 0x680,0x680
|
|
|
+.value 0x680,0x680
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_to_msg_avx2_hhqs:
|
|
|
+.value 0xfcc1,0xfcc1
|
|
|
+.value 0xfcc1,0xfcc1
|
|
|
+.value 0xfcc1,0xfcc1
|
|
|
+.value 0xfcc1,0xfcc1
|
|
|
+.value 0xfcc1,0xfcc1
|
|
|
+.value 0xfcc1,0xfcc1
|
|
|
+.value 0xfcc1,0xfcc1
|
|
|
+.value 0xfcc1,0xfcc1
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_to_msg_avx2
|
|
|
+.type kyber_to_msg_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_to_msg_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_to_msg_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_to_msg_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu L_kyber_to_msg_avx2_hqs(%rip), %ymm8
|
|
|
+ vmovdqu L_kyber_to_msg_avx2_hhqs(%rip), %ymm9
|
|
|
+ vpsubw (%rsi), %ymm8, %ymm0
|
|
|
+ vpsubw 32(%rsi), %ymm8, %ymm1
|
|
|
+ vpsubw 64(%rsi), %ymm8, %ymm2
|
|
|
+ vpsubw 96(%rsi), %ymm8, %ymm3
|
|
|
+ vpsraw $15, %ymm0, %ymm4
|
|
|
+ vpsraw $15, %ymm1, %ymm5
|
|
|
+ vpsraw $15, %ymm2, %ymm6
|
|
|
+ vpsraw $15, %ymm3, %ymm7
|
|
|
+ vpxor %ymm4, %ymm0, %ymm0
|
|
|
+ vpxor %ymm5, %ymm1, %ymm1
|
|
|
+ vpxor %ymm6, %ymm2, %ymm2
|
|
|
+ vpxor %ymm7, %ymm3, %ymm3
|
|
|
+ vpaddw %ymm9, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ vpacksswb %ymm1, %ymm0, %ymm0
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpermq $0xd8, %ymm0, %ymm0
|
|
|
+ vpermq $0xd8, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm0, %edx
|
|
|
+ vpmovmskb %ymm2, %eax
|
|
|
+ movl %edx, (%rdi)
|
|
|
+ movl %eax, 4(%rdi)
|
|
|
+ vpsubw 128(%rsi), %ymm8, %ymm0
|
|
|
+ vpsubw 160(%rsi), %ymm8, %ymm1
|
|
|
+ vpsubw 192(%rsi), %ymm8, %ymm2
|
|
|
+ vpsubw 224(%rsi), %ymm8, %ymm3
|
|
|
+ vpsraw $15, %ymm0, %ymm4
|
|
|
+ vpsraw $15, %ymm1, %ymm5
|
|
|
+ vpsraw $15, %ymm2, %ymm6
|
|
|
+ vpsraw $15, %ymm3, %ymm7
|
|
|
+ vpxor %ymm4, %ymm0, %ymm0
|
|
|
+ vpxor %ymm5, %ymm1, %ymm1
|
|
|
+ vpxor %ymm6, %ymm2, %ymm2
|
|
|
+ vpxor %ymm7, %ymm3, %ymm3
|
|
|
+ vpaddw %ymm9, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ vpacksswb %ymm1, %ymm0, %ymm0
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpermq $0xd8, %ymm0, %ymm0
|
|
|
+ vpermq $0xd8, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm0, %edx
|
|
|
+ vpmovmskb %ymm2, %eax
|
|
|
+ movl %edx, 8(%rdi)
|
|
|
+ movl %eax, 12(%rdi)
|
|
|
+ vpsubw 256(%rsi), %ymm8, %ymm0
|
|
|
+ vpsubw 288(%rsi), %ymm8, %ymm1
|
|
|
+ vpsubw 320(%rsi), %ymm8, %ymm2
|
|
|
+ vpsubw 352(%rsi), %ymm8, %ymm3
|
|
|
+ vpsraw $15, %ymm0, %ymm4
|
|
|
+ vpsraw $15, %ymm1, %ymm5
|
|
|
+ vpsraw $15, %ymm2, %ymm6
|
|
|
+ vpsraw $15, %ymm3, %ymm7
|
|
|
+ vpxor %ymm4, %ymm0, %ymm0
|
|
|
+ vpxor %ymm5, %ymm1, %ymm1
|
|
|
+ vpxor %ymm6, %ymm2, %ymm2
|
|
|
+ vpxor %ymm7, %ymm3, %ymm3
|
|
|
+ vpaddw %ymm9, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ vpacksswb %ymm1, %ymm0, %ymm0
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpermq $0xd8, %ymm0, %ymm0
|
|
|
+ vpermq $0xd8, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm0, %edx
|
|
|
+ vpmovmskb %ymm2, %eax
|
|
|
+ movl %edx, 16(%rdi)
|
|
|
+ movl %eax, 20(%rdi)
|
|
|
+ vpsubw 384(%rsi), %ymm8, %ymm0
|
|
|
+ vpsubw 416(%rsi), %ymm8, %ymm1
|
|
|
+ vpsubw 448(%rsi), %ymm8, %ymm2
|
|
|
+ vpsubw 480(%rsi), %ymm8, %ymm3
|
|
|
+ vpsraw $15, %ymm0, %ymm4
|
|
|
+ vpsraw $15, %ymm1, %ymm5
|
|
|
+ vpsraw $15, %ymm2, %ymm6
|
|
|
+ vpsraw $15, %ymm3, %ymm7
|
|
|
+ vpxor %ymm4, %ymm0, %ymm0
|
|
|
+ vpxor %ymm5, %ymm1, %ymm1
|
|
|
+ vpxor %ymm6, %ymm2, %ymm2
|
|
|
+ vpxor %ymm7, %ymm3, %ymm3
|
|
|
+ vpaddw %ymm9, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm9, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm9, %ymm3, %ymm3
|
|
|
+ vpacksswb %ymm1, %ymm0, %ymm0
|
|
|
+ vpacksswb %ymm3, %ymm2, %ymm2
|
|
|
+ vpermq $0xd8, %ymm0, %ymm0
|
|
|
+ vpermq $0xd8, %ymm2, %ymm2
|
|
|
+ vpmovmskb %ymm0, %edx
|
|
|
+ vpmovmskb %ymm2, %eax
|
|
|
+ movl %edx, 24(%rdi)
|
|
|
+ movl %eax, 28(%rdi)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_to_msg_avx2,.-kyber_to_msg_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_from_bytes_avx2_shuf:
|
|
|
+.value 0x100,0xff02
|
|
|
+.value 0x403,0xff05
|
|
|
+.value 0x706,0xff08
|
|
|
+.value 0xa09,0xff0b
|
|
|
+.value 0x504,0xff06
|
|
|
+.value 0x807,0xff09
|
|
|
+.value 0xb0a,0xff0c
|
|
|
+.value 0xe0d,0xff0f
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_from_bytes_avx2_mask:
|
|
|
+.long 0xfff,0xfff,0xfff,0xfff
|
|
|
+.long 0xfff,0xfff,0xfff,0xfff
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_from_bytes_avx2
|
|
|
+.type kyber_from_bytes_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_from_bytes_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_from_bytes_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_from_bytes_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu L_kyber_from_bytes_avx2_shuf(%rip), %ymm12
|
|
|
+ vmovdqu L_kyber_from_bytes_avx2_mask(%rip), %ymm13
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu 32(%rsi), %ymm1
|
|
|
+ vmovdqu 64(%rsi), %ymm2
|
|
|
+ vmovdqu 96(%rsi), %ymm3
|
|
|
+ vmovdqu 128(%rsi), %ymm4
|
|
|
+ vmovdqu 160(%rsi), %ymm5
|
|
|
+ vpermq $0xe9, %ymm5, %ymm7
|
|
|
+ vpermq $0x00, %ymm5, %ymm8
|
|
|
+ vpermq $62, %ymm4, %ymm6
|
|
|
+ vpermq $0x40, %ymm4, %ymm9
|
|
|
+ vpermq $3, %ymm3, %ymm5
|
|
|
+ vpermq $0x94, %ymm3, %ymm4
|
|
|
+ vpermq $0xe9, %ymm2, %ymm3
|
|
|
+ vpermq $0x00, %ymm2, %ymm10
|
|
|
+ vpermq $62, %ymm1, %ymm2
|
|
|
+ vpermq $0x40, %ymm1, %ymm11
|
|
|
+ vpermq $3, %ymm0, %ymm1
|
|
|
+ vpermq $0x94, %ymm0, %ymm0
|
|
|
+ vpblendd $0xc0, %ymm8, %ymm6, %ymm6
|
|
|
+ vpblendd $0xfc, %ymm9, %ymm5, %ymm5
|
|
|
+ vpblendd $0xc0, %ymm10, %ymm2, %ymm2
|
|
|
+ vpblendd $0xfc, %ymm11, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm12, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm12, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm12, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm12, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm12, %ymm4, %ymm4
|
|
|
+ vpshufb %ymm12, %ymm5, %ymm5
|
|
|
+ vpshufb %ymm12, %ymm6, %ymm6
|
|
|
+ vpshufb %ymm12, %ymm7, %ymm7
|
|
|
+ vpandn %ymm0, %ymm13, %ymm8
|
|
|
+ vpandn %ymm1, %ymm13, %ymm9
|
|
|
+ vpandn %ymm2, %ymm13, %ymm10
|
|
|
+ vpandn %ymm3, %ymm13, %ymm11
|
|
|
+ vpand %ymm0, %ymm13, %ymm0
|
|
|
+ vpand %ymm1, %ymm13, %ymm1
|
|
|
+ vpand %ymm2, %ymm13, %ymm2
|
|
|
+ vpand %ymm3, %ymm13, %ymm3
|
|
|
+ vpslld $4, %ymm8, %ymm8
|
|
|
+ vpslld $4, %ymm9, %ymm9
|
|
|
+ vpslld $4, %ymm10, %ymm10
|
|
|
+ vpslld $4, %ymm11, %ymm11
|
|
|
+ vpor %ymm8, %ymm0, %ymm0
|
|
|
+ vpor %ymm9, %ymm1, %ymm1
|
|
|
+ vpor %ymm10, %ymm2, %ymm2
|
|
|
+ vpor %ymm11, %ymm3, %ymm3
|
|
|
+ vpandn %ymm4, %ymm13, %ymm8
|
|
|
+ vpandn %ymm5, %ymm13, %ymm9
|
|
|
+ vpandn %ymm6, %ymm13, %ymm10
|
|
|
+ vpandn %ymm7, %ymm13, %ymm11
|
|
|
+ vpand %ymm4, %ymm13, %ymm4
|
|
|
+ vpand %ymm5, %ymm13, %ymm5
|
|
|
+ vpand %ymm6, %ymm13, %ymm6
|
|
|
+ vpand %ymm7, %ymm13, %ymm7
|
|
|
+ vpslld $4, %ymm8, %ymm8
|
|
|
+ vpslld $4, %ymm9, %ymm9
|
|
|
+ vpslld $4, %ymm10, %ymm10
|
|
|
+ vpslld $4, %ymm11, %ymm11
|
|
|
+ vpor %ymm8, %ymm4, %ymm4
|
|
|
+ vpor %ymm9, %ymm5, %ymm5
|
|
|
+ vpor %ymm10, %ymm6, %ymm6
|
|
|
+ vpor %ymm11, %ymm7, %ymm7
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vmovdqu %ymm4, 128(%rdi)
|
|
|
+ vmovdqu %ymm5, 160(%rdi)
|
|
|
+ vmovdqu %ymm6, 192(%rdi)
|
|
|
+ vmovdqu %ymm7, 224(%rdi)
|
|
|
+ vmovdqu 192(%rsi), %ymm0
|
|
|
+ vmovdqu 224(%rsi), %ymm1
|
|
|
+ vmovdqu 256(%rsi), %ymm2
|
|
|
+ vmovdqu 288(%rsi), %ymm3
|
|
|
+ vmovdqu 320(%rsi), %ymm4
|
|
|
+ vmovdqu 352(%rsi), %ymm5
|
|
|
+ vpermq $0xe9, %ymm5, %ymm7
|
|
|
+ vpermq $0x00, %ymm5, %ymm8
|
|
|
+ vpermq $62, %ymm4, %ymm6
|
|
|
+ vpermq $0x40, %ymm4, %ymm9
|
|
|
+ vpermq $3, %ymm3, %ymm5
|
|
|
+ vpermq $0x94, %ymm3, %ymm4
|
|
|
+ vpermq $0xe9, %ymm2, %ymm3
|
|
|
+ vpermq $0x00, %ymm2, %ymm10
|
|
|
+ vpermq $62, %ymm1, %ymm2
|
|
|
+ vpermq $0x40, %ymm1, %ymm11
|
|
|
+ vpermq $3, %ymm0, %ymm1
|
|
|
+ vpermq $0x94, %ymm0, %ymm0
|
|
|
+ vpblendd $0xc0, %ymm8, %ymm6, %ymm6
|
|
|
+ vpblendd $0xfc, %ymm9, %ymm5, %ymm5
|
|
|
+ vpblendd $0xc0, %ymm10, %ymm2, %ymm2
|
|
|
+ vpblendd $0xfc, %ymm11, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm12, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm12, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm12, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm12, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm12, %ymm4, %ymm4
|
|
|
+ vpshufb %ymm12, %ymm5, %ymm5
|
|
|
+ vpshufb %ymm12, %ymm6, %ymm6
|
|
|
+ vpshufb %ymm12, %ymm7, %ymm7
|
|
|
+ vpandn %ymm0, %ymm13, %ymm8
|
|
|
+ vpandn %ymm1, %ymm13, %ymm9
|
|
|
+ vpandn %ymm2, %ymm13, %ymm10
|
|
|
+ vpandn %ymm3, %ymm13, %ymm11
|
|
|
+ vpand %ymm0, %ymm13, %ymm0
|
|
|
+ vpand %ymm1, %ymm13, %ymm1
|
|
|
+ vpand %ymm2, %ymm13, %ymm2
|
|
|
+ vpand %ymm3, %ymm13, %ymm3
|
|
|
+ vpslld $4, %ymm8, %ymm8
|
|
|
+ vpslld $4, %ymm9, %ymm9
|
|
|
+ vpslld $4, %ymm10, %ymm10
|
|
|
+ vpslld $4, %ymm11, %ymm11
|
|
|
+ vpor %ymm8, %ymm0, %ymm0
|
|
|
+ vpor %ymm9, %ymm1, %ymm1
|
|
|
+ vpor %ymm10, %ymm2, %ymm2
|
|
|
+ vpor %ymm11, %ymm3, %ymm3
|
|
|
+ vpandn %ymm4, %ymm13, %ymm8
|
|
|
+ vpandn %ymm5, %ymm13, %ymm9
|
|
|
+ vpandn %ymm6, %ymm13, %ymm10
|
|
|
+ vpandn %ymm7, %ymm13, %ymm11
|
|
|
+ vpand %ymm4, %ymm13, %ymm4
|
|
|
+ vpand %ymm5, %ymm13, %ymm5
|
|
|
+ vpand %ymm6, %ymm13, %ymm6
|
|
|
+ vpand %ymm7, %ymm13, %ymm7
|
|
|
+ vpslld $4, %ymm8, %ymm8
|
|
|
+ vpslld $4, %ymm9, %ymm9
|
|
|
+ vpslld $4, %ymm10, %ymm10
|
|
|
+ vpslld $4, %ymm11, %ymm11
|
|
|
+ vpor %ymm8, %ymm4, %ymm4
|
|
|
+ vpor %ymm9, %ymm5, %ymm5
|
|
|
+ vpor %ymm10, %ymm6, %ymm6
|
|
|
+ vpor %ymm11, %ymm7, %ymm7
|
|
|
+ vmovdqu %ymm0, 256(%rdi)
|
|
|
+ vmovdqu %ymm1, 288(%rdi)
|
|
|
+ vmovdqu %ymm2, 320(%rdi)
|
|
|
+ vmovdqu %ymm3, 352(%rdi)
|
|
|
+ vmovdqu %ymm4, 384(%rdi)
|
|
|
+ vmovdqu %ymm5, 416(%rdi)
|
|
|
+ vmovdqu %ymm6, 448(%rdi)
|
|
|
+ vmovdqu %ymm7, 480(%rdi)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_from_bytes_avx2,.-kyber_from_bytes_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_to_bytes_avx2_mask:
|
|
|
+.long 0xfff,0xfff,0xfff,0xfff
|
|
|
+.long 0xfff,0xfff,0xfff,0xfff
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_to_bytes_avx2_shuf:
|
|
|
+.value 0x100,0x402
|
|
|
+.value 0x605,0x908
|
|
|
+.value 0xc0a,0xe0d
|
|
|
+.value 0xffff,0xffff
|
|
|
+.value 0x605,0x908
|
|
|
+.value 0xc0a,0xe0d
|
|
|
+.value 0xffff,0xffff
|
|
|
+.value 0x100,0x402
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_kyber_to_bytes_avx2_perm:
|
|
|
+.long 0x0,0x1,0x2,0x7
|
|
|
+.long 0x4,0x5,0x3,0x6
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_to_bytes_avx2
|
|
|
+.type kyber_to_bytes_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_to_bytes_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_to_bytes_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_to_bytes_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu kyber_q(%rip), %ymm12
|
|
|
+ vmovdqu L_kyber_to_bytes_avx2_mask(%rip), %ymm13
|
|
|
+ vmovdqu L_kyber_to_bytes_avx2_shuf(%rip), %ymm14
|
|
|
+ vmovdqu L_kyber_to_bytes_avx2_perm(%rip), %ymm15
|
|
|
+ vmovdqu (%rsi), %ymm0
|
|
|
+ vmovdqu 32(%rsi), %ymm1
|
|
|
+ vmovdqu 64(%rsi), %ymm2
|
|
|
+ vmovdqu 96(%rsi), %ymm3
|
|
|
+ vmovdqu 128(%rsi), %ymm4
|
|
|
+ vmovdqu 160(%rsi), %ymm5
|
|
|
+ vmovdqu 192(%rsi), %ymm6
|
|
|
+ vmovdqu 224(%rsi), %ymm7
|
|
|
+ vpsubw %ymm12, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm12, %ymm1, %ymm9
|
|
|
+ vpsubw %ymm12, %ymm2, %ymm10
|
|
|
+ vpsubw %ymm12, %ymm3, %ymm11
|
|
|
+ vpsraw $15, %ymm8, %ymm0
|
|
|
+ vpsraw $15, %ymm9, %ymm1
|
|
|
+ vpsraw $15, %ymm10, %ymm2
|
|
|
+ vpsraw $15, %ymm11, %ymm3
|
|
|
+ vpand %ymm12, %ymm0, %ymm0
|
|
|
+ vpand %ymm12, %ymm1, %ymm1
|
|
|
+ vpand %ymm12, %ymm2, %ymm2
|
|
|
+ vpand %ymm12, %ymm3, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm10, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm11, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm12, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm12, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm12, %ymm6, %ymm10
|
|
|
+ vpsubw %ymm12, %ymm7, %ymm11
|
|
|
+ vpsraw $15, %ymm8, %ymm4
|
|
|
+ vpsraw $15, %ymm9, %ymm5
|
|
|
+ vpsraw $15, %ymm10, %ymm6
|
|
|
+ vpsraw $15, %ymm11, %ymm7
|
|
|
+ vpand %ymm12, %ymm4, %ymm4
|
|
|
+ vpand %ymm12, %ymm5, %ymm5
|
|
|
+ vpand %ymm12, %ymm6, %ymm6
|
|
|
+ vpand %ymm12, %ymm7, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm5, %ymm5
|
|
|
+ vpaddw %ymm10, %ymm6, %ymm6
|
|
|
+ vpaddw %ymm11, %ymm7, %ymm7
|
|
|
+ vpsrld $16, %ymm0, %ymm8
|
|
|
+ vpsrld $16, %ymm1, %ymm9
|
|
|
+ vpsrld $16, %ymm2, %ymm10
|
|
|
+ vpsrld $16, %ymm3, %ymm11
|
|
|
+ vpand %ymm0, %ymm13, %ymm0
|
|
|
+ vpand %ymm1, %ymm13, %ymm1
|
|
|
+ vpand %ymm2, %ymm13, %ymm2
|
|
|
+ vpand %ymm3, %ymm13, %ymm3
|
|
|
+ vpslld $12, %ymm8, %ymm8
|
|
|
+ vpslld $12, %ymm9, %ymm9
|
|
|
+ vpslld $12, %ymm10, %ymm10
|
|
|
+ vpslld $12, %ymm11, %ymm11
|
|
|
+ vpor %ymm8, %ymm0, %ymm0
|
|
|
+ vpor %ymm9, %ymm1, %ymm1
|
|
|
+ vpor %ymm10, %ymm2, %ymm2
|
|
|
+ vpor %ymm11, %ymm3, %ymm3
|
|
|
+ vpsrld $16, %ymm4, %ymm8
|
|
|
+ vpsrld $16, %ymm5, %ymm9
|
|
|
+ vpsrld $16, %ymm6, %ymm10
|
|
|
+ vpsrld $16, %ymm7, %ymm11
|
|
|
+ vpand %ymm4, %ymm13, %ymm4
|
|
|
+ vpand %ymm5, %ymm13, %ymm5
|
|
|
+ vpand %ymm6, %ymm13, %ymm6
|
|
|
+ vpand %ymm7, %ymm13, %ymm7
|
|
|
+ vpslld $12, %ymm8, %ymm8
|
|
|
+ vpslld $12, %ymm9, %ymm9
|
|
|
+ vpslld $12, %ymm10, %ymm10
|
|
|
+ vpslld $12, %ymm11, %ymm11
|
|
|
+ vpor %ymm8, %ymm4, %ymm4
|
|
|
+ vpor %ymm9, %ymm5, %ymm5
|
|
|
+ vpor %ymm10, %ymm6, %ymm6
|
|
|
+ vpor %ymm11, %ymm7, %ymm7
|
|
|
+ vpshufb %ymm14, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm14, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm14, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm14, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm14, %ymm4, %ymm4
|
|
|
+ vpshufb %ymm14, %ymm5, %ymm5
|
|
|
+ vpshufb %ymm14, %ymm6, %ymm6
|
|
|
+ vpshufb %ymm14, %ymm7, %ymm7
|
|
|
+ vpermd %ymm0, %ymm15, %ymm0
|
|
|
+ vpermd %ymm1, %ymm15, %ymm1
|
|
|
+ vpermd %ymm2, %ymm15, %ymm2
|
|
|
+ vpermd %ymm3, %ymm15, %ymm3
|
|
|
+ vpermd %ymm4, %ymm15, %ymm4
|
|
|
+ vpermd %ymm5, %ymm15, %ymm5
|
|
|
+ vpermd %ymm6, %ymm15, %ymm6
|
|
|
+ vpermd %ymm7, %ymm15, %ymm7
|
|
|
+ vpermq $2, %ymm6, %ymm8
|
|
|
+ vpermq $0x90, %ymm7, %ymm7
|
|
|
+ vpermq $9, %ymm5, %ymm9
|
|
|
+ vpermq $0x40, %ymm6, %ymm6
|
|
|
+ vpermq $0x00, %ymm5, %ymm5
|
|
|
+ vpblendd $63, %ymm4, %ymm5, %ymm5
|
|
|
+ vpermq $2, %ymm2, %ymm10
|
|
|
+ vpermq $0x90, %ymm3, %ymm4
|
|
|
+ vpermq $9, %ymm1, %ymm11
|
|
|
+ vpermq $0x40, %ymm2, %ymm3
|
|
|
+ vpermq $0x00, %ymm1, %ymm2
|
|
|
+ vpblendd $63, %ymm0, %ymm2, %ymm2
|
|
|
+ vpblendd $3, %ymm8, %ymm7, %ymm7
|
|
|
+ vpblendd $15, %ymm9, %ymm6, %ymm6
|
|
|
+ vpblendd $3, %ymm10, %ymm4, %ymm4
|
|
|
+ vpblendd $15, %ymm11, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm2, (%rdi)
|
|
|
+ vmovdqu %ymm3, 32(%rdi)
|
|
|
+ vmovdqu %ymm4, 64(%rdi)
|
|
|
+ vmovdqu %ymm5, 96(%rdi)
|
|
|
+ vmovdqu %ymm6, 128(%rdi)
|
|
|
+ vmovdqu %ymm7, 160(%rdi)
|
|
|
+ vmovdqu 256(%rsi), %ymm0
|
|
|
+ vmovdqu 288(%rsi), %ymm1
|
|
|
+ vmovdqu 320(%rsi), %ymm2
|
|
|
+ vmovdqu 352(%rsi), %ymm3
|
|
|
+ vmovdqu 384(%rsi), %ymm4
|
|
|
+ vmovdqu 416(%rsi), %ymm5
|
|
|
+ vmovdqu 448(%rsi), %ymm6
|
|
|
+ vmovdqu 480(%rsi), %ymm7
|
|
|
+ vpsubw %ymm12, %ymm0, %ymm8
|
|
|
+ vpsubw %ymm12, %ymm1, %ymm9
|
|
|
+ vpsubw %ymm12, %ymm2, %ymm10
|
|
|
+ vpsubw %ymm12, %ymm3, %ymm11
|
|
|
+ vpsraw $15, %ymm8, %ymm0
|
|
|
+ vpsraw $15, %ymm9, %ymm1
|
|
|
+ vpsraw $15, %ymm10, %ymm2
|
|
|
+ vpsraw $15, %ymm11, %ymm3
|
|
|
+ vpand %ymm12, %ymm0, %ymm0
|
|
|
+ vpand %ymm12, %ymm1, %ymm1
|
|
|
+ vpand %ymm12, %ymm2, %ymm2
|
|
|
+ vpand %ymm12, %ymm3, %ymm3
|
|
|
+ vpaddw %ymm8, %ymm0, %ymm0
|
|
|
+ vpaddw %ymm9, %ymm1, %ymm1
|
|
|
+ vpaddw %ymm10, %ymm2, %ymm2
|
|
|
+ vpaddw %ymm11, %ymm3, %ymm3
|
|
|
+ vpsubw %ymm12, %ymm4, %ymm8
|
|
|
+ vpsubw %ymm12, %ymm5, %ymm9
|
|
|
+ vpsubw %ymm12, %ymm6, %ymm10
|
|
|
+ vpsubw %ymm12, %ymm7, %ymm11
|
|
|
+ vpsraw $15, %ymm8, %ymm4
|
|
|
+ vpsraw $15, %ymm9, %ymm5
|
|
|
+ vpsraw $15, %ymm10, %ymm6
|
|
|
+ vpsraw $15, %ymm11, %ymm7
|
|
|
+ vpand %ymm12, %ymm4, %ymm4
|
|
|
+ vpand %ymm12, %ymm5, %ymm5
|
|
|
+ vpand %ymm12, %ymm6, %ymm6
|
|
|
+ vpand %ymm12, %ymm7, %ymm7
|
|
|
+ vpaddw %ymm8, %ymm4, %ymm4
|
|
|
+ vpaddw %ymm9, %ymm5, %ymm5
|
|
|
+ vpaddw %ymm10, %ymm6, %ymm6
|
|
|
+ vpaddw %ymm11, %ymm7, %ymm7
|
|
|
+ vpsrld $16, %ymm0, %ymm8
|
|
|
+ vpsrld $16, %ymm1, %ymm9
|
|
|
+ vpsrld $16, %ymm2, %ymm10
|
|
|
+ vpsrld $16, %ymm3, %ymm11
|
|
|
+ vpand %ymm0, %ymm13, %ymm0
|
|
|
+ vpand %ymm1, %ymm13, %ymm1
|
|
|
+ vpand %ymm2, %ymm13, %ymm2
|
|
|
+ vpand %ymm3, %ymm13, %ymm3
|
|
|
+ vpslld $12, %ymm8, %ymm8
|
|
|
+ vpslld $12, %ymm9, %ymm9
|
|
|
+ vpslld $12, %ymm10, %ymm10
|
|
|
+ vpslld $12, %ymm11, %ymm11
|
|
|
+ vpor %ymm8, %ymm0, %ymm0
|
|
|
+ vpor %ymm9, %ymm1, %ymm1
|
|
|
+ vpor %ymm10, %ymm2, %ymm2
|
|
|
+ vpor %ymm11, %ymm3, %ymm3
|
|
|
+ vpsrld $16, %ymm4, %ymm8
|
|
|
+ vpsrld $16, %ymm5, %ymm9
|
|
|
+ vpsrld $16, %ymm6, %ymm10
|
|
|
+ vpsrld $16, %ymm7, %ymm11
|
|
|
+ vpand %ymm4, %ymm13, %ymm4
|
|
|
+ vpand %ymm5, %ymm13, %ymm5
|
|
|
+ vpand %ymm6, %ymm13, %ymm6
|
|
|
+ vpand %ymm7, %ymm13, %ymm7
|
|
|
+ vpslld $12, %ymm8, %ymm8
|
|
|
+ vpslld $12, %ymm9, %ymm9
|
|
|
+ vpslld $12, %ymm10, %ymm10
|
|
|
+ vpslld $12, %ymm11, %ymm11
|
|
|
+ vpor %ymm8, %ymm4, %ymm4
|
|
|
+ vpor %ymm9, %ymm5, %ymm5
|
|
|
+ vpor %ymm10, %ymm6, %ymm6
|
|
|
+ vpor %ymm11, %ymm7, %ymm7
|
|
|
+ vpshufb %ymm14, %ymm0, %ymm0
|
|
|
+ vpshufb %ymm14, %ymm1, %ymm1
|
|
|
+ vpshufb %ymm14, %ymm2, %ymm2
|
|
|
+ vpshufb %ymm14, %ymm3, %ymm3
|
|
|
+ vpshufb %ymm14, %ymm4, %ymm4
|
|
|
+ vpshufb %ymm14, %ymm5, %ymm5
|
|
|
+ vpshufb %ymm14, %ymm6, %ymm6
|
|
|
+ vpshufb %ymm14, %ymm7, %ymm7
|
|
|
+ vpermd %ymm0, %ymm15, %ymm0
|
|
|
+ vpermd %ymm1, %ymm15, %ymm1
|
|
|
+ vpermd %ymm2, %ymm15, %ymm2
|
|
|
+ vpermd %ymm3, %ymm15, %ymm3
|
|
|
+ vpermd %ymm4, %ymm15, %ymm4
|
|
|
+ vpermd %ymm5, %ymm15, %ymm5
|
|
|
+ vpermd %ymm6, %ymm15, %ymm6
|
|
|
+ vpermd %ymm7, %ymm15, %ymm7
|
|
|
+ vpermq $2, %ymm6, %ymm8
|
|
|
+ vpermq $0x90, %ymm7, %ymm7
|
|
|
+ vpermq $9, %ymm5, %ymm9
|
|
|
+ vpermq $0x40, %ymm6, %ymm6
|
|
|
+ vpermq $0x00, %ymm5, %ymm5
|
|
|
+ vpblendd $63, %ymm4, %ymm5, %ymm5
|
|
|
+ vpermq $2, %ymm2, %ymm10
|
|
|
+ vpermq $0x90, %ymm3, %ymm4
|
|
|
+ vpermq $9, %ymm1, %ymm11
|
|
|
+ vpermq $0x40, %ymm2, %ymm3
|
|
|
+ vpermq $0x00, %ymm1, %ymm2
|
|
|
+ vpblendd $63, %ymm0, %ymm2, %ymm2
|
|
|
+ vpblendd $3, %ymm8, %ymm7, %ymm7
|
|
|
+ vpblendd $15, %ymm9, %ymm6, %ymm6
|
|
|
+ vpblendd $3, %ymm10, %ymm4, %ymm4
|
|
|
+ vpblendd $15, %ymm11, %ymm3, %ymm3
|
|
|
+ vmovdqu %ymm2, 192(%rdi)
|
|
|
+ vmovdqu %ymm3, 224(%rdi)
|
|
|
+ vmovdqu %ymm4, 256(%rdi)
|
|
|
+ vmovdqu %ymm5, 288(%rdi)
|
|
|
+ vmovdqu %ymm6, 320(%rdi)
|
|
|
+ vmovdqu %ymm7, 352(%rdi)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_to_bytes_avx2,.-kyber_to_bytes_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_cmp_avx2
|
|
|
+.type kyber_cmp_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_cmp_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_cmp_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_cmp_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vpxor %ymm2, %ymm2, %ymm2
|
|
|
+ vpxor %ymm3, %ymm3, %ymm3
|
|
|
+ movl $0x00, %ecx
|
|
|
+ movl $-1, %r8d
|
|
|
+ vmovdqu (%rdi), %ymm0
|
|
|
+ vmovdqu 32(%rdi), %ymm1
|
|
|
+ vpxor (%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 32(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 64(%rdi), %ymm0
|
|
|
+ vmovdqu 96(%rdi), %ymm1
|
|
|
+ vpxor 64(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 96(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 128(%rdi), %ymm0
|
|
|
+ vmovdqu 160(%rdi), %ymm1
|
|
|
+ vpxor 128(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 160(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 192(%rdi), %ymm0
|
|
|
+ vmovdqu 224(%rdi), %ymm1
|
|
|
+ vpxor 192(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 224(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 256(%rdi), %ymm0
|
|
|
+ vmovdqu 288(%rdi), %ymm1
|
|
|
+ vpxor 256(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 288(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 320(%rdi), %ymm0
|
|
|
+ vmovdqu 352(%rdi), %ymm1
|
|
|
+ vpxor 320(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 352(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 384(%rdi), %ymm0
|
|
|
+ vmovdqu 416(%rdi), %ymm1
|
|
|
+ vpxor 384(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 416(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 448(%rdi), %ymm0
|
|
|
+ vmovdqu 480(%rdi), %ymm1
|
|
|
+ vpxor 448(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 480(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 512(%rdi), %ymm0
|
|
|
+ vmovdqu 544(%rdi), %ymm1
|
|
|
+ vpxor 512(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 544(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 576(%rdi), %ymm0
|
|
|
+ vmovdqu 608(%rdi), %ymm1
|
|
|
+ vpxor 576(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 608(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 640(%rdi), %ymm0
|
|
|
+ vmovdqu 672(%rdi), %ymm1
|
|
|
+ vpxor 640(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 672(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 704(%rdi), %ymm0
|
|
|
+ vmovdqu 736(%rdi), %ymm1
|
|
|
+ vpxor 704(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 736(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ subl $0x300, %edx
|
|
|
+ jz L_kyber_cmp_avx2_done
|
|
|
+ vmovdqu 768(%rdi), %ymm0
|
|
|
+ vmovdqu 800(%rdi), %ymm1
|
|
|
+ vpxor 768(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 800(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 832(%rdi), %ymm0
|
|
|
+ vmovdqu 864(%rdi), %ymm1
|
|
|
+ vpxor 832(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 864(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 896(%rdi), %ymm0
|
|
|
+ vmovdqu 928(%rdi), %ymm1
|
|
|
+ vpxor 896(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 928(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 960(%rdi), %ymm0
|
|
|
+ vmovdqu 992(%rdi), %ymm1
|
|
|
+ vpxor 960(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 992(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 1024(%rdi), %ymm0
|
|
|
+ vmovdqu 1056(%rdi), %ymm1
|
|
|
+ vpxor 1024(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 1056(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ subl $0x140, %edx
|
|
|
+ jz L_kyber_cmp_avx2_done
|
|
|
+ vmovdqu 1088(%rdi), %ymm0
|
|
|
+ vmovdqu 1120(%rdi), %ymm1
|
|
|
+ vpxor 1088(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 1120(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 1152(%rdi), %ymm0
|
|
|
+ vmovdqu 1184(%rdi), %ymm1
|
|
|
+ vpxor 1152(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 1184(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 1216(%rdi), %ymm0
|
|
|
+ vmovdqu 1248(%rdi), %ymm1
|
|
|
+ vpxor 1216(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 1248(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 1280(%rdi), %ymm0
|
|
|
+ vmovdqu 1312(%rdi), %ymm1
|
|
|
+ vpxor 1280(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 1312(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 1344(%rdi), %ymm0
|
|
|
+ vmovdqu 1376(%rdi), %ymm1
|
|
|
+ vpxor 1344(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 1376(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 1408(%rdi), %ymm0
|
|
|
+ vmovdqu 1440(%rdi), %ymm1
|
|
|
+ vpxor 1408(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 1440(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+ vmovdqu 1472(%rdi), %ymm0
|
|
|
+ vmovdqu 1504(%rdi), %ymm1
|
|
|
+ vpxor 1472(%rsi), %ymm0, %ymm0
|
|
|
+ vpxor 1504(%rsi), %ymm1, %ymm1
|
|
|
+ vpor %ymm0, %ymm2, %ymm2
|
|
|
+ vpor %ymm1, %ymm3, %ymm3
|
|
|
+L_kyber_cmp_avx2_done:
|
|
|
+ vpor %ymm3, %ymm2, %ymm2
|
|
|
+ vptest %ymm2, %ymm2
|
|
|
+ cmovzl %ecx, %eax
|
|
|
+ cmovnzl %r8d, %eax
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_cmp_avx2,.-kyber_cmp_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_redistribute_21_rand_avx2
|
|
|
+.type kyber_redistribute_21_rand_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_redistribute_21_rand_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_redistribute_21_rand_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_redistribute_21_rand_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu (%rdi), %ymm0
|
|
|
+ vmovdqu 32(%rdi), %ymm1
|
|
|
+ vmovdqu 64(%rdi), %ymm2
|
|
|
+ vmovdqu 96(%rdi), %ymm3
|
|
|
+ vmovdqu 128(%rdi), %ymm4
|
|
|
+ vmovdqu 160(%rdi), %ymm5
|
|
|
+ vmovdqu 192(%rdi), %ymm6
|
|
|
+ vmovdqu 224(%rdi), %ymm7
|
|
|
+ vmovdqu 256(%rdi), %ymm8
|
|
|
+ vmovdqu 288(%rdi), %ymm9
|
|
|
+ vmovdqu 320(%rdi), %ymm10
|
|
|
+ vmovdqu 352(%rdi), %ymm11
|
|
|
+ vpunpcklqdq %ymm1, %ymm0, %ymm12
|
|
|
+ vpunpckhqdq %ymm1, %ymm0, %ymm13
|
|
|
+ vpunpcklqdq %ymm3, %ymm2, %ymm14
|
|
|
+ vpunpckhqdq %ymm3, %ymm2, %ymm15
|
|
|
+ vperm2i128 $32, %ymm14, %ymm12, %ymm0
|
|
|
+ vperm2i128 $32, %ymm15, %ymm13, %ymm1
|
|
|
+ vperm2i128 $49, %ymm14, %ymm12, %ymm2
|
|
|
+ vperm2i128 $49, %ymm15, %ymm13, %ymm3
|
|
|
+ vpunpcklqdq %ymm5, %ymm4, %ymm12
|
|
|
+ vpunpckhqdq %ymm5, %ymm4, %ymm13
|
|
|
+ vpunpcklqdq %ymm7, %ymm6, %ymm14
|
|
|
+ vpunpckhqdq %ymm7, %ymm6, %ymm15
|
|
|
+ vperm2i128 $32, %ymm14, %ymm12, %ymm4
|
|
|
+ vperm2i128 $32, %ymm15, %ymm13, %ymm5
|
|
|
+ vperm2i128 $49, %ymm14, %ymm12, %ymm6
|
|
|
+ vperm2i128 $49, %ymm15, %ymm13, %ymm7
|
|
|
+ vpunpcklqdq %ymm9, %ymm8, %ymm12
|
|
|
+ vpunpckhqdq %ymm9, %ymm8, %ymm13
|
|
|
+ vpunpcklqdq %ymm11, %ymm10, %ymm14
|
|
|
+ vpunpckhqdq %ymm11, %ymm10, %ymm15
|
|
|
+ vperm2i128 $32, %ymm14, %ymm12, %ymm8
|
|
|
+ vperm2i128 $32, %ymm15, %ymm13, %ymm9
|
|
|
+ vperm2i128 $49, %ymm14, %ymm12, %ymm10
|
|
|
+ vperm2i128 $49, %ymm15, %ymm13, %ymm11
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm4, 32(%rsi)
|
|
|
+ vmovdqu %ymm8, 64(%rsi)
|
|
|
+ vmovdqu %ymm1, (%rdx)
|
|
|
+ vmovdqu %ymm5, 32(%rdx)
|
|
|
+ vmovdqu %ymm9, 64(%rdx)
|
|
|
+ vmovdqu %ymm2, (%rcx)
|
|
|
+ vmovdqu %ymm6, 32(%rcx)
|
|
|
+ vmovdqu %ymm10, 64(%rcx)
|
|
|
+ vmovdqu %ymm3, (%r8)
|
|
|
+ vmovdqu %ymm7, 32(%r8)
|
|
|
+ vmovdqu %ymm11, 64(%r8)
|
|
|
+ vmovdqu 384(%rdi), %ymm0
|
|
|
+ vmovdqu 416(%rdi), %ymm1
|
|
|
+ vmovdqu 448(%rdi), %ymm2
|
|
|
+ vmovdqu 480(%rdi), %ymm3
|
|
|
+ vmovdqu 512(%rdi), %ymm4
|
|
|
+ vmovdqu 544(%rdi), %ymm5
|
|
|
+ vmovdqu 576(%rdi), %ymm6
|
|
|
+ vmovdqu 608(%rdi), %ymm7
|
|
|
+ movq 640(%rdi), %rax
|
|
|
+ movq 648(%rdi), %r9
|
|
|
+ movq 656(%rdi), %r10
|
|
|
+ movq 664(%rdi), %r11
|
|
|
+ vpunpcklqdq %ymm1, %ymm0, %ymm12
|
|
|
+ vpunpckhqdq %ymm1, %ymm0, %ymm13
|
|
|
+ vpunpcklqdq %ymm3, %ymm2, %ymm14
|
|
|
+ vpunpckhqdq %ymm3, %ymm2, %ymm15
|
|
|
+ vperm2i128 $32, %ymm14, %ymm12, %ymm0
|
|
|
+ vperm2i128 $32, %ymm15, %ymm13, %ymm1
|
|
|
+ vperm2i128 $49, %ymm14, %ymm12, %ymm2
|
|
|
+ vperm2i128 $49, %ymm15, %ymm13, %ymm3
|
|
|
+ vpunpcklqdq %ymm5, %ymm4, %ymm12
|
|
|
+ vpunpckhqdq %ymm5, %ymm4, %ymm13
|
|
|
+ vpunpcklqdq %ymm7, %ymm6, %ymm14
|
|
|
+ vpunpckhqdq %ymm7, %ymm6, %ymm15
|
|
|
+ vperm2i128 $32, %ymm14, %ymm12, %ymm4
|
|
|
+ vperm2i128 $32, %ymm15, %ymm13, %ymm5
|
|
|
+ vperm2i128 $49, %ymm14, %ymm12, %ymm6
|
|
|
+ vperm2i128 $49, %ymm15, %ymm13, %ymm7
|
|
|
+ vmovdqu %ymm0, 96(%rsi)
|
|
|
+ vmovdqu %ymm4, 128(%rsi)
|
|
|
+ movq %rax, 160(%rsi)
|
|
|
+ vmovdqu %ymm1, 96(%rdx)
|
|
|
+ vmovdqu %ymm5, 128(%rdx)
|
|
|
+ movq %r9, 160(%rdx)
|
|
|
+ vmovdqu %ymm2, 96(%rcx)
|
|
|
+ vmovdqu %ymm6, 128(%rcx)
|
|
|
+ movq %r10, 160(%rcx)
|
|
|
+ vmovdqu %ymm3, 96(%r8)
|
|
|
+ vmovdqu %ymm7, 128(%r8)
|
|
|
+ movq %r11, 160(%r8)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_redistribute_21_rand_avx2,.-kyber_redistribute_21_rand_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_redistribute_17_rand_avx2
|
|
|
+.type kyber_redistribute_17_rand_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_redistribute_17_rand_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_redistribute_17_rand_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_redistribute_17_rand_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu (%rdi), %ymm0
|
|
|
+ vmovdqu 32(%rdi), %ymm1
|
|
|
+ vmovdqu 64(%rdi), %ymm2
|
|
|
+ vmovdqu 96(%rdi), %ymm3
|
|
|
+ vmovdqu 128(%rdi), %ymm4
|
|
|
+ vmovdqu 160(%rdi), %ymm5
|
|
|
+ vmovdqu 192(%rdi), %ymm6
|
|
|
+ vmovdqu 224(%rdi), %ymm7
|
|
|
+ vpunpcklqdq %ymm1, %ymm0, %ymm8
|
|
|
+ vpunpckhqdq %ymm1, %ymm0, %ymm9
|
|
|
+ vpunpcklqdq %ymm3, %ymm2, %ymm10
|
|
|
+ vpunpckhqdq %ymm3, %ymm2, %ymm11
|
|
|
+ vperm2i128 $32, %ymm10, %ymm8, %ymm0
|
|
|
+ vperm2i128 $32, %ymm11, %ymm9, %ymm1
|
|
|
+ vperm2i128 $49, %ymm10, %ymm8, %ymm2
|
|
|
+ vperm2i128 $49, %ymm11, %ymm9, %ymm3
|
|
|
+ vpunpcklqdq %ymm5, %ymm4, %ymm8
|
|
|
+ vpunpckhqdq %ymm5, %ymm4, %ymm9
|
|
|
+ vpunpcklqdq %ymm7, %ymm6, %ymm10
|
|
|
+ vpunpckhqdq %ymm7, %ymm6, %ymm11
|
|
|
+ vperm2i128 $32, %ymm10, %ymm8, %ymm4
|
|
|
+ vperm2i128 $32, %ymm11, %ymm9, %ymm5
|
|
|
+ vperm2i128 $49, %ymm10, %ymm8, %ymm6
|
|
|
+ vperm2i128 $49, %ymm11, %ymm9, %ymm7
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm4, 32(%rsi)
|
|
|
+ vmovdqu %ymm1, (%rdx)
|
|
|
+ vmovdqu %ymm5, 32(%rdx)
|
|
|
+ vmovdqu %ymm2, (%rcx)
|
|
|
+ vmovdqu %ymm6, 32(%rcx)
|
|
|
+ vmovdqu %ymm3, (%r8)
|
|
|
+ vmovdqu %ymm7, 32(%r8)
|
|
|
+ vmovdqu 256(%rdi), %ymm0
|
|
|
+ vmovdqu 288(%rdi), %ymm1
|
|
|
+ vmovdqu 320(%rdi), %ymm2
|
|
|
+ vmovdqu 352(%rdi), %ymm3
|
|
|
+ vmovdqu 384(%rdi), %ymm4
|
|
|
+ vmovdqu 416(%rdi), %ymm5
|
|
|
+ vmovdqu 448(%rdi), %ymm6
|
|
|
+ vmovdqu 480(%rdi), %ymm7
|
|
|
+ movq 512(%rdi), %rax
|
|
|
+ movq 520(%rdi), %r9
|
|
|
+ movq 528(%rdi), %r10
|
|
|
+ movq 536(%rdi), %r11
|
|
|
+ vpunpcklqdq %ymm1, %ymm0, %ymm8
|
|
|
+ vpunpckhqdq %ymm1, %ymm0, %ymm9
|
|
|
+ vpunpcklqdq %ymm3, %ymm2, %ymm10
|
|
|
+ vpunpckhqdq %ymm3, %ymm2, %ymm11
|
|
|
+ vperm2i128 $32, %ymm10, %ymm8, %ymm0
|
|
|
+ vperm2i128 $32, %ymm11, %ymm9, %ymm1
|
|
|
+ vperm2i128 $49, %ymm10, %ymm8, %ymm2
|
|
|
+ vperm2i128 $49, %ymm11, %ymm9, %ymm3
|
|
|
+ vpunpcklqdq %ymm5, %ymm4, %ymm8
|
|
|
+ vpunpckhqdq %ymm5, %ymm4, %ymm9
|
|
|
+ vpunpcklqdq %ymm7, %ymm6, %ymm10
|
|
|
+ vpunpckhqdq %ymm7, %ymm6, %ymm11
|
|
|
+ vperm2i128 $32, %ymm10, %ymm8, %ymm4
|
|
|
+ vperm2i128 $32, %ymm11, %ymm9, %ymm5
|
|
|
+ vperm2i128 $49, %ymm10, %ymm8, %ymm6
|
|
|
+ vperm2i128 $49, %ymm11, %ymm9, %ymm7
|
|
|
+ vmovdqu %ymm0, 64(%rsi)
|
|
|
+ vmovdqu %ymm4, 96(%rsi)
|
|
|
+ movq %rax, 128(%rsi)
|
|
|
+ vmovdqu %ymm1, 64(%rdx)
|
|
|
+ vmovdqu %ymm5, 96(%rdx)
|
|
|
+ movq %r9, 128(%rdx)
|
|
|
+ vmovdqu %ymm2, 64(%rcx)
|
|
|
+ vmovdqu %ymm6, 96(%rcx)
|
|
|
+ movq %r10, 128(%rcx)
|
|
|
+ vmovdqu %ymm3, 64(%r8)
|
|
|
+ vmovdqu %ymm7, 96(%r8)
|
|
|
+ movq %r11, 128(%r8)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_redistribute_17_rand_avx2,.-kyber_redistribute_17_rand_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_redistribute_16_rand_avx2
|
|
|
+.type kyber_redistribute_16_rand_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_redistribute_16_rand_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_redistribute_16_rand_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_redistribute_16_rand_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu (%rdi), %ymm0
|
|
|
+ vmovdqu 32(%rdi), %ymm1
|
|
|
+ vmovdqu 64(%rdi), %ymm2
|
|
|
+ vmovdqu 96(%rdi), %ymm3
|
|
|
+ vmovdqu 128(%rdi), %ymm4
|
|
|
+ vmovdqu 160(%rdi), %ymm5
|
|
|
+ vmovdqu 192(%rdi), %ymm6
|
|
|
+ vmovdqu 224(%rdi), %ymm7
|
|
|
+ vpunpcklqdq %ymm1, %ymm0, %ymm8
|
|
|
+ vpunpckhqdq %ymm1, %ymm0, %ymm9
|
|
|
+ vpunpcklqdq %ymm3, %ymm2, %ymm10
|
|
|
+ vpunpckhqdq %ymm3, %ymm2, %ymm11
|
|
|
+ vperm2i128 $32, %ymm10, %ymm8, %ymm0
|
|
|
+ vperm2i128 $32, %ymm11, %ymm9, %ymm1
|
|
|
+ vperm2i128 $49, %ymm10, %ymm8, %ymm2
|
|
|
+ vperm2i128 $49, %ymm11, %ymm9, %ymm3
|
|
|
+ vpunpcklqdq %ymm5, %ymm4, %ymm8
|
|
|
+ vpunpckhqdq %ymm5, %ymm4, %ymm9
|
|
|
+ vpunpcklqdq %ymm7, %ymm6, %ymm10
|
|
|
+ vpunpckhqdq %ymm7, %ymm6, %ymm11
|
|
|
+ vperm2i128 $32, %ymm10, %ymm8, %ymm4
|
|
|
+ vperm2i128 $32, %ymm11, %ymm9, %ymm5
|
|
|
+ vperm2i128 $49, %ymm10, %ymm8, %ymm6
|
|
|
+ vperm2i128 $49, %ymm11, %ymm9, %ymm7
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm4, 32(%rsi)
|
|
|
+ vmovdqu %ymm1, (%rdx)
|
|
|
+ vmovdqu %ymm5, 32(%rdx)
|
|
|
+ vmovdqu %ymm2, (%rcx)
|
|
|
+ vmovdqu %ymm6, 32(%rcx)
|
|
|
+ vmovdqu %ymm3, (%r8)
|
|
|
+ vmovdqu %ymm7, 32(%r8)
|
|
|
+ vmovdqu 256(%rdi), %ymm0
|
|
|
+ vmovdqu 288(%rdi), %ymm1
|
|
|
+ vmovdqu 320(%rdi), %ymm2
|
|
|
+ vmovdqu 352(%rdi), %ymm3
|
|
|
+ vmovdqu 384(%rdi), %ymm4
|
|
|
+ vmovdqu 416(%rdi), %ymm5
|
|
|
+ vmovdqu 448(%rdi), %ymm6
|
|
|
+ vmovdqu 480(%rdi), %ymm7
|
|
|
+ vpunpcklqdq %ymm1, %ymm0, %ymm8
|
|
|
+ vpunpckhqdq %ymm1, %ymm0, %ymm9
|
|
|
+ vpunpcklqdq %ymm3, %ymm2, %ymm10
|
|
|
+ vpunpckhqdq %ymm3, %ymm2, %ymm11
|
|
|
+ vperm2i128 $32, %ymm10, %ymm8, %ymm0
|
|
|
+ vperm2i128 $32, %ymm11, %ymm9, %ymm1
|
|
|
+ vperm2i128 $49, %ymm10, %ymm8, %ymm2
|
|
|
+ vperm2i128 $49, %ymm11, %ymm9, %ymm3
|
|
|
+ vpunpcklqdq %ymm5, %ymm4, %ymm8
|
|
|
+ vpunpckhqdq %ymm5, %ymm4, %ymm9
|
|
|
+ vpunpcklqdq %ymm7, %ymm6, %ymm10
|
|
|
+ vpunpckhqdq %ymm7, %ymm6, %ymm11
|
|
|
+ vperm2i128 $32, %ymm10, %ymm8, %ymm4
|
|
|
+ vperm2i128 $32, %ymm11, %ymm9, %ymm5
|
|
|
+ vperm2i128 $49, %ymm10, %ymm8, %ymm6
|
|
|
+ vperm2i128 $49, %ymm11, %ymm9, %ymm7
|
|
|
+ vmovdqu %ymm0, 64(%rsi)
|
|
|
+ vmovdqu %ymm4, 96(%rsi)
|
|
|
+ vmovdqu %ymm1, 64(%rdx)
|
|
|
+ vmovdqu %ymm5, 96(%rdx)
|
|
|
+ vmovdqu %ymm2, 64(%rcx)
|
|
|
+ vmovdqu %ymm6, 96(%rcx)
|
|
|
+ vmovdqu %ymm3, 64(%r8)
|
|
|
+ vmovdqu %ymm7, 96(%r8)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_redistribute_16_rand_avx2,.-kyber_redistribute_16_rand_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_redistribute_8_rand_avx2
|
|
|
+.type kyber_redistribute_8_rand_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_redistribute_8_rand_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_redistribute_8_rand_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_redistribute_8_rand_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ vmovdqu (%rdi), %ymm0
|
|
|
+ vmovdqu 32(%rdi), %ymm1
|
|
|
+ vmovdqu 64(%rdi), %ymm2
|
|
|
+ vmovdqu 96(%rdi), %ymm3
|
|
|
+ vmovdqu 128(%rdi), %ymm4
|
|
|
+ vmovdqu 160(%rdi), %ymm5
|
|
|
+ vmovdqu 192(%rdi), %ymm6
|
|
|
+ vmovdqu 224(%rdi), %ymm7
|
|
|
+ vpunpcklqdq %ymm1, %ymm0, %ymm8
|
|
|
+ vpunpckhqdq %ymm1, %ymm0, %ymm9
|
|
|
+ vpunpcklqdq %ymm3, %ymm2, %ymm10
|
|
|
+ vpunpckhqdq %ymm3, %ymm2, %ymm11
|
|
|
+ vperm2i128 $32, %ymm10, %ymm8, %ymm0
|
|
|
+ vperm2i128 $32, %ymm11, %ymm9, %ymm1
|
|
|
+ vperm2i128 $49, %ymm10, %ymm8, %ymm2
|
|
|
+ vperm2i128 $49, %ymm11, %ymm9, %ymm3
|
|
|
+ vpunpcklqdq %ymm5, %ymm4, %ymm8
|
|
|
+ vpunpckhqdq %ymm5, %ymm4, %ymm9
|
|
|
+ vpunpcklqdq %ymm7, %ymm6, %ymm10
|
|
|
+ vpunpckhqdq %ymm7, %ymm6, %ymm11
|
|
|
+ vperm2i128 $32, %ymm10, %ymm8, %ymm4
|
|
|
+ vperm2i128 $32, %ymm11, %ymm9, %ymm5
|
|
|
+ vperm2i128 $49, %ymm10, %ymm8, %ymm6
|
|
|
+ vperm2i128 $49, %ymm11, %ymm9, %ymm7
|
|
|
+ vmovdqu %ymm0, (%rsi)
|
|
|
+ vmovdqu %ymm4, 32(%rsi)
|
|
|
+ vmovdqu %ymm1, (%rdx)
|
|
|
+ vmovdqu %ymm5, 32(%rdx)
|
|
|
+ vmovdqu %ymm2, (%rcx)
|
|
|
+ vmovdqu %ymm6, 32(%rcx)
|
|
|
+ vmovdqu %ymm3, (%r8)
|
|
|
+ vmovdqu %ymm7, 32(%r8)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_redistribute_8_rand_avx2,.-kyber_redistribute_8_rand_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 16
|
|
|
+#else
|
|
|
+.p2align 4
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_sha3_parallel_4_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 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_sha3_128_blockx4_seed_avx2_end_mark:
|
|
|
+.quad 0x8000000000000000, 0x8000000000000000
|
|
|
+.quad 0x8000000000000000, 0x8000000000000000
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_sha3_128_blocksx4_seed_avx2
|
|
|
+.type kyber_sha3_128_blocksx4_seed_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_sha3_128_blocksx4_seed_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_sha3_128_blocksx4_seed_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_sha3_128_blocksx4_seed_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ leaq L_sha3_parallel_4_r(%rip), %rdx
|
|
|
+ movq %rdi, %rax
|
|
|
+ movq %rdi, %rcx
|
|
|
+ vpbroadcastq (%rsi), %ymm15
|
|
|
+ addq $0x80, %rdi
|
|
|
+ vpbroadcastq 8(%rsi), %ymm11
|
|
|
+ addq $0x180, %rax
|
|
|
+ vpbroadcastq 16(%rsi), %ymm12
|
|
|
+ addq $0x280, %rcx
|
|
|
+ vpbroadcastq 24(%rsi), %ymm13
|
|
|
+ vmovdqu L_sha3_128_blockx4_seed_avx2_end_mark(%rip), %ymm5
|
|
|
+ vpxor %ymm6, %ymm6, %ymm6
|
|
|
+ vmovdqu %ymm11, -96(%rdi)
|
|
|
+ vmovdqu %ymm12, -64(%rdi)
|
|
|
+ vmovdqu %ymm13, -32(%rdi)
|
|
|
+ vmovdqu (%rdi), %ymm14
|
|
|
+ vmovdqu %ymm6, 32(%rdi)
|
|
|
+ vmovdqu %ymm6, 64(%rdi)
|
|
|
+ vmovdqu %ymm6, 96(%rdi)
|
|
|
+ vmovdqu %ymm6, 128(%rdi)
|
|
|
+ vmovdqu %ymm6, -96(%rax)
|
|
|
+ vmovdqu %ymm6, -64(%rax)
|
|
|
+ vmovdqu %ymm6, -32(%rax)
|
|
|
+ vmovdqu %ymm6, (%rax)
|
|
|
+ vmovdqu %ymm6, 32(%rax)
|
|
|
+ vmovdqu %ymm6, 64(%rax)
|
|
|
+ vmovdqu %ymm6, 96(%rax)
|
|
|
+ vmovdqu %ymm6, 128(%rax)
|
|
|
+ vmovdqu %ymm6, -96(%rcx)
|
|
|
+ vmovdqu %ymm6, -64(%rcx)
|
|
|
+ vmovdqu %ymm6, -32(%rcx)
|
|
|
+ vmovdqu %ymm5, (%rcx)
|
|
|
+ vmovdqu %ymm6, 32(%rcx)
|
|
|
+ vmovdqu %ymm6, 64(%rcx)
|
|
|
+ vmovdqu %ymm6, 96(%rcx)
|
|
|
+ vmovdqu %ymm6, 128(%rcx)
|
|
|
+ vpxor %ymm5, %ymm15, %ymm10
|
|
|
+ # Round 0
|
|
|
+ # Calc b[0..4]
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm6, %ymm11
|
|
|
+ vpxor (%rax), %ymm7, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm8, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor (%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 64(%rdi)
|
|
|
+ vmovdqu %ymm2, (%rax)
|
|
|
+ vmovdqu %ymm3, -64(%rcx)
|
|
|
+ vmovdqu %ymm4, 128(%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor -32(%rdi), %ymm8, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm9, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm5, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm6, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rdi)
|
|
|
+ vmovdqu %ymm1, -96(%rax)
|
|
|
+ vmovdqu %ymm2, -64(%rax)
|
|
|
+ vmovdqu %ymm3, 128(%rax)
|
|
|
+ vmovdqu %ymm4, 64(%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor -96(%rdi), %ymm6, %ymm10
|
|
|
+ vpxor 96(%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm8, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm9, %ymm13
|
|
|
+ vpxor (%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rdi)
|
|
|
+ vmovdqu %ymm1, 96(%rdi)
|
|
|
+ vmovdqu %ymm2, 32(%rax)
|
|
|
+ vmovdqu %ymm3, -32(%rcx)
|
|
|
+ vmovdqu %ymm4, (%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor (%rdi), %ymm9, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm5, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm6, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm7, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, -32(%rax)
|
|
|
+ vmovdqu %ymm3, -96(%rcx)
|
|
|
+ vmovdqu %ymm4, 96(%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor -64(%rdi), %ymm7, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm8, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm9, %ymm12
|
|
|
+ vpxor 96(%rax), %ymm5, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rdi)
|
|
|
+ vmovdqu %ymm1, 128(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rax)
|
|
|
+ vmovdqu %ymm3, 96(%rax)
|
|
|
+ vmovdqu %ymm4, 32(%rcx)
|
|
|
+ # Round 1
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor (%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm2, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor (%rax), %ymm12, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm3, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor (%rcx), %ymm4, %ymm14
|
|
|
+ vpxor 64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rcx), %ymm14, %ymm14
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm6, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm7, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm8, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 32(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -96(%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rax)
|
|
|
+ vmovdqu %ymm3, -96(%rcx)
|
|
|
+ vmovdqu %ymm4, 32(%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor -64(%rcx), %ymm8, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm9, %ymm11
|
|
|
+ vpxor -96(%rdi), %ymm5, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm6, %ymm13
|
|
|
+ vpxor 64(%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rcx)
|
|
|
+ vmovdqu %ymm1, 64(%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rdi)
|
|
|
+ vmovdqu %ymm3, 32(%rdi)
|
|
|
+ vmovdqu %ymm4, 64(%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor 64(%rdi), %ymm6, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm7, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm8, %ymm12
|
|
|
+ vpxor 96(%rcx), %ymm9, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rdi)
|
|
|
+ vmovdqu %ymm1, -64(%rax)
|
|
|
+ vmovdqu %ymm2, -32(%rcx)
|
|
|
+ vmovdqu %ymm3, 96(%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor 128(%rcx), %ymm9, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm5, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm6, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm7, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rcx)
|
|
|
+ vmovdqu %ymm1, -32(%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rdi)
|
|
|
+ vmovdqu %ymm3, -32(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor (%rax), %ymm7, %ymm10
|
|
|
+ vpxor 128(%rax), %ymm8, %ymm11
|
|
|
+ vpxor (%rcx), %ymm9, %ymm12
|
|
|
+ vpxor (%rdi), %ymm5, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rax)
|
|
|
+ vmovdqu %ymm1, 128(%rax)
|
|
|
+ vmovdqu %ymm2, (%rcx)
|
|
|
+ vmovdqu %ymm3, (%rdi)
|
|
|
+ vmovdqu %ymm4, 128(%rdi)
|
|
|
+ # Round 2
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -32(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm10, %ymm10
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm6, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm7, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm8, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 64(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 64(%rcx)
|
|
|
+ vmovdqu %ymm2, -32(%rcx)
|
|
|
+ vmovdqu %ymm3, -32(%rax)
|
|
|
+ vmovdqu %ymm4, 128(%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor -96(%rcx), %ymm8, %ymm10
|
|
|
+ vpxor 64(%rax), %ymm9, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm5, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm6, %ymm13
|
|
|
+ vpxor (%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rcx)
|
|
|
+ vmovdqu %ymm1, 64(%rax)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, -32(%rdi)
|
|
|
+ vmovdqu %ymm4, (%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor -96(%rax), %ymm6, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm8, %ymm12
|
|
|
+ vpxor 96(%rax), %ymm9, %ymm13
|
|
|
+ vpxor (%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rax)
|
|
|
+ vmovdqu %ymm1, -96(%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rcx)
|
|
|
+ vmovdqu %ymm3, 96(%rax)
|
|
|
+ vmovdqu %ymm4, (%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor 32(%rcx), %ymm9, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm5, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm6, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm7, %ymm13
|
|
|
+ vpxor (%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rcx)
|
|
|
+ vmovdqu %ymm1, -64(%rcx)
|
|
|
+ vmovdqu %ymm2, -64(%rax)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vmovdqu %ymm4, (%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor 32(%rax), %ymm7, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm8, %ymm11
|
|
|
+ vpxor -64(%rdi), %ymm9, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm5, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rax)
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, -64(%rdi)
|
|
|
+ vmovdqu %ymm3, 128(%rcx)
|
|
|
+ vmovdqu %ymm4, 128(%rax)
|
|
|
+ # Round 3
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor (%rdi), %ymm4, %ymm14
|
|
|
+ vpxor 64(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor -96(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm13, %ymm13
|
|
|
+ vpxor (%rax), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor (%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 32(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm12, %ymm12
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 64(%rax), %ymm6, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm7, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm8, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 96(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 64(%rax)
|
|
|
+ vmovdqu %ymm2, 96(%rcx)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vmovdqu %ymm4, 128(%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor -32(%rax), %ymm8, %ymm10
|
|
|
+ vpxor (%rcx), %ymm9, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm5, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm6, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rax)
|
|
|
+ vmovdqu %ymm1, (%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rax)
|
|
|
+ vmovdqu %ymm3, -64(%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor 64(%rcx), %ymm6, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm8, %ymm12
|
|
|
+ vpxor (%rdi), %ymm9, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rcx)
|
|
|
+ vmovdqu %ymm1, 64(%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rax)
|
|
|
+ vmovdqu %ymm3, (%rdi)
|
|
|
+ vmovdqu %ymm4, 32(%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor 128(%rdi), %ymm9, %ymm10
|
|
|
+ vpxor -96(%rcx), %ymm5, %ymm11
|
|
|
+ vpxor -96(%rdi), %ymm6, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm7, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rdi)
|
|
|
+ vmovdqu %ymm1, -96(%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rdi)
|
|
|
+ vmovdqu %ymm3, -64(%rax)
|
|
|
+ vmovdqu %ymm4, 128(%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor -32(%rcx), %ymm7, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm8, %ymm11
|
|
|
+ vpxor (%rax), %ymm9, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm5, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rcx)
|
|
|
+ vmovdqu %ymm1, -32(%rdi)
|
|
|
+ vmovdqu %ymm2, (%rax)
|
|
|
+ vmovdqu %ymm3, 32(%rcx)
|
|
|
+ vmovdqu %ymm4, 32(%rdi)
|
|
|
+ # Round 4
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor (%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -96(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor (%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 64(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm14, %ymm14
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor (%rcx), %ymm6, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm7, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm8, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 128(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, (%rcx)
|
|
|
+ vmovdqu %ymm2, 96(%rax)
|
|
|
+ vmovdqu %ymm3, -64(%rax)
|
|
|
+ vmovdqu %ymm4, 32(%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor 96(%rdi), %ymm8, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm9, %ymm11
|
|
|
+ vpxor 64(%rcx), %ymm5, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm6, %ymm13
|
|
|
+ vpxor (%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rdi)
|
|
|
+ vmovdqu %ymm1, -64(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rcx)
|
|
|
+ vmovdqu %ymm3, -96(%rcx)
|
|
|
+ vmovdqu %ymm4, (%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor 64(%rax), %ymm6, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm7, %ymm11
|
|
|
+ vpxor (%rdi), %ymm8, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm9, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rax)
|
|
|
+ vmovdqu %ymm1, -96(%rax)
|
|
|
+ vmovdqu %ymm2, (%rdi)
|
|
|
+ vmovdqu %ymm3, 128(%rcx)
|
|
|
+ vmovdqu %ymm4, -32(%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor 128(%rax), %ymm9, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm5, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm6, %ymm12
|
|
|
+ vpxor -96(%rdi), %ymm7, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rax)
|
|
|
+ vmovdqu %ymm1, -32(%rax)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, -96(%rdi)
|
|
|
+ vmovdqu %ymm4, 32(%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor 96(%rcx), %ymm7, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm8, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm9, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm5, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rcx)
|
|
|
+ vmovdqu %ymm1, -64(%rcx)
|
|
|
+ vmovdqu %ymm2, 32(%rax)
|
|
|
+ vmovdqu %ymm3, 128(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rdi)
|
|
|
+ # Round 5
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor (%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor 64(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm11, %ymm11
|
|
|
+ vpxor (%rax), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor (%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm13, %ymm13
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm6, %ymm11
|
|
|
+ vpxor (%rdi), %ymm7, %ymm12
|
|
|
+ vpxor -96(%rdi), %ymm8, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 160(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -64(%rdi)
|
|
|
+ vmovdqu %ymm2, (%rdi)
|
|
|
+ vmovdqu %ymm3, -96(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor -64(%rax), %ymm8, %ymm10
|
|
|
+ vpxor (%rax), %ymm9, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm5, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm6, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rax)
|
|
|
+ vmovdqu %ymm1, (%rax)
|
|
|
+ vmovdqu %ymm2, 64(%rax)
|
|
|
+ vmovdqu %ymm3, -32(%rax)
|
|
|
+ vmovdqu %ymm4, 32(%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor (%rcx), %ymm6, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm7, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm8, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm9, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rcx)
|
|
|
+ vmovdqu %ymm1, 64(%rcx)
|
|
|
+ vmovdqu %ymm2, 128(%rcx)
|
|
|
+ vmovdqu %ymm3, 32(%rcx)
|
|
|
+ vmovdqu %ymm4, 96(%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor 32(%rdi), %ymm9, %ymm10
|
|
|
+ vpxor 96(%rdi), %ymm5, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm6, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm7, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rdi)
|
|
|
+ vmovdqu %ymm1, 96(%rdi)
|
|
|
+ vmovdqu %ymm2, -96(%rax)
|
|
|
+ vmovdqu %ymm3, 64(%rdi)
|
|
|
+ vmovdqu %ymm4, 128(%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor 96(%rax), %ymm7, %ymm10
|
|
|
+ vpxor -96(%rcx), %ymm8, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm9, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm5, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rax)
|
|
|
+ vmovdqu %ymm1, -96(%rcx)
|
|
|
+ vmovdqu %ymm2, -32(%rcx)
|
|
|
+ vmovdqu %ymm3, 128(%rax)
|
|
|
+ vmovdqu %ymm4, -64(%rcx)
|
|
|
+ # Round 6
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor (%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor -96(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm13, %ymm13
|
|
|
+ vpxor (%rax), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rax), %ymm12, %ymm12
|
|
|
+ vpxor (%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rcx), %ymm12, %ymm12
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor (%rax), %ymm6, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm7, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm8, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 192(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, (%rax)
|
|
|
+ vmovdqu %ymm2, 128(%rcx)
|
|
|
+ vmovdqu %ymm3, 64(%rdi)
|
|
|
+ vmovdqu %ymm4, -64(%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor -96(%rdi), %ymm8, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm9, %ymm11
|
|
|
+ vpxor (%rcx), %ymm5, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm6, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rdi)
|
|
|
+ vmovdqu %ymm1, 32(%rax)
|
|
|
+ vmovdqu %ymm2, (%rcx)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor -64(%rdi), %ymm6, %ymm10
|
|
|
+ vpxor 64(%rax), %ymm7, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm8, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm9, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rdi)
|
|
|
+ vmovdqu %ymm1, 64(%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rcx)
|
|
|
+ vmovdqu %ymm3, 128(%rdi)
|
|
|
+ vmovdqu %ymm4, 96(%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor -32(%rdi), %ymm9, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm5, %ymm11
|
|
|
+ vpxor 64(%rcx), %ymm6, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm7, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rdi)
|
|
|
+ vmovdqu %ymm1, -64(%rax)
|
|
|
+ vmovdqu %ymm2, 64(%rcx)
|
|
|
+ vmovdqu %ymm3, -96(%rax)
|
|
|
+ vmovdqu %ymm4, 128(%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor (%rdi), %ymm7, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm8, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm9, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm5, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm1, -32(%rax)
|
|
|
+ vmovdqu %ymm2, 96(%rcx)
|
|
|
+ vmovdqu %ymm3, 32(%rdi)
|
|
|
+ vmovdqu %ymm4, -96(%rcx)
|
|
|
+ # Round 7
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor -96(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm1, %ymm11
|
|
|
+ vpxor (%rax), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm4, %ymm14
|
|
|
+ vpxor 128(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor (%rcx), %ymm2, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm12, %ymm12
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm6, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm7, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm8, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 224(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 32(%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rcx)
|
|
|
+ vmovdqu %ymm3, -96(%rax)
|
|
|
+ vmovdqu %ymm4, -96(%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor 64(%rdi), %ymm8, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm9, %ymm11
|
|
|
+ vpxor -64(%rdi), %ymm5, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm6, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rdi)
|
|
|
+ vmovdqu %ymm1, -32(%rcx)
|
|
|
+ vmovdqu %ymm2, -64(%rdi)
|
|
|
+ vmovdqu %ymm3, -64(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor (%rax), %ymm6, %ymm10
|
|
|
+ vpxor (%rcx), %ymm7, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm8, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm9, %ymm13
|
|
|
+ vpxor (%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rax)
|
|
|
+ vmovdqu %ymm1, (%rcx)
|
|
|
+ vmovdqu %ymm2, 128(%rdi)
|
|
|
+ vmovdqu %ymm3, 128(%rax)
|
|
|
+ vmovdqu %ymm4, (%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor -64(%rcx), %ymm9, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm5, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm6, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm7, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rcx)
|
|
|
+ vmovdqu %ymm1, -96(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rax)
|
|
|
+ vmovdqu %ymm3, 64(%rcx)
|
|
|
+ vmovdqu %ymm4, 32(%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor 128(%rcx), %ymm7, %ymm10
|
|
|
+ vpxor 96(%rdi), %ymm8, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm9, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm5, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rcx)
|
|
|
+ vmovdqu %ymm1, 96(%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rax)
|
|
|
+ vmovdqu %ymm3, -32(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rax)
|
|
|
+ # Round 8
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor -64(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor (%rdi), %ymm4, %ymm14
|
|
|
+ vpxor 32(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm3, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor (%rax), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -64(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor (%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm14, %ymm14
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm6, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm7, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm8, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 256(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -32(%rcx)
|
|
|
+ vmovdqu %ymm2, 128(%rdi)
|
|
|
+ vmovdqu %ymm3, 64(%rcx)
|
|
|
+ vmovdqu %ymm4, -32(%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor -96(%rax), %ymm8, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm9, %ymm11
|
|
|
+ vpxor (%rax), %ymm5, %ymm12
|
|
|
+ vpxor -96(%rdi), %ymm6, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rax)
|
|
|
+ vmovdqu %ymm1, 96(%rcx)
|
|
|
+ vmovdqu %ymm2, (%rax)
|
|
|
+ vmovdqu %ymm3, -96(%rdi)
|
|
|
+ vmovdqu %ymm4, 96(%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor 32(%rax), %ymm6, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm8, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm9, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rax)
|
|
|
+ vmovdqu %ymm1, -64(%rdi)
|
|
|
+ vmovdqu %ymm2, 128(%rax)
|
|
|
+ vmovdqu %ymm3, 32(%rdi)
|
|
|
+ vmovdqu %ymm4, 128(%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor -96(%rcx), %ymm9, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm5, %ymm11
|
|
|
+ vpxor (%rcx), %ymm6, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm7, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rcx)
|
|
|
+ vmovdqu %ymm1, 64(%rdi)
|
|
|
+ vmovdqu %ymm2, (%rcx)
|
|
|
+ vmovdqu %ymm3, 64(%rax)
|
|
|
+ vmovdqu %ymm4, -32(%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor 32(%rcx), %ymm7, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm8, %ymm11
|
|
|
+ vpxor (%rdi), %ymm9, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm5, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rcx)
|
|
|
+ vmovdqu %ymm1, -64(%rax)
|
|
|
+ vmovdqu %ymm2, (%rdi)
|
|
|
+ vmovdqu %ymm3, -64(%rcx)
|
|
|
+ vmovdqu %ymm4, 96(%rdi)
|
|
|
+ # Round 9
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor 32(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor (%rax), %ymm12, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor (%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm14, %ymm14
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm6, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm7, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm8, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 288(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 96(%rcx)
|
|
|
+ vmovdqu %ymm2, 128(%rax)
|
|
|
+ vmovdqu %ymm3, 64(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor 64(%rcx), %ymm8, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm9, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm5, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm6, %ymm13
|
|
|
+ vpxor (%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rcx)
|
|
|
+ vmovdqu %ymm1, 96(%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rax)
|
|
|
+ vmovdqu %ymm3, 64(%rdi)
|
|
|
+ vmovdqu %ymm4, (%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor -32(%rcx), %ymm6, %ymm10
|
|
|
+ vpxor (%rax), %ymm7, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm8, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm9, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rcx)
|
|
|
+ vmovdqu %ymm1, (%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rdi)
|
|
|
+ vmovdqu %ymm3, -32(%rdi)
|
|
|
+ vmovdqu %ymm4, 32(%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor -32(%rax), %ymm9, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm5, %ymm11
|
|
|
+ vpxor -64(%rdi), %ymm6, %ymm12
|
|
|
+ vpxor (%rcx), %ymm7, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rax)
|
|
|
+ vmovdqu %ymm1, -96(%rax)
|
|
|
+ vmovdqu %ymm2, -64(%rdi)
|
|
|
+ vmovdqu %ymm3, (%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor 128(%rdi), %ymm7, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm8, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm9, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm5, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rdi)
|
|
|
+ vmovdqu %ymm1, -96(%rdi)
|
|
|
+ vmovdqu %ymm2, 128(%rcx)
|
|
|
+ vmovdqu %ymm3, -96(%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rax)
|
|
|
+ # Round 10
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor (%rdi), %ymm4, %ymm14
|
|
|
+ vpxor 32(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor -96(%rax), %ymm1, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm10, %ymm10
|
|
|
+ vpxor (%rax), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor (%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm11, %ymm11
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm6, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm7, %ymm12
|
|
|
+ vpxor (%rcx), %ymm8, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 320(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 96(%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rdi)
|
|
|
+ vmovdqu %ymm3, (%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor 64(%rax), %ymm8, %ymm10
|
|
|
+ vpxor (%rdi), %ymm9, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm5, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm6, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rax)
|
|
|
+ vmovdqu %ymm1, (%rdi)
|
|
|
+ vmovdqu %ymm2, -32(%rcx)
|
|
|
+ vmovdqu %ymm3, -96(%rax)
|
|
|
+ vmovdqu %ymm4, 128(%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor 96(%rcx), %ymm6, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm7, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm8, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm9, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rcx)
|
|
|
+ vmovdqu %ymm1, 32(%rax)
|
|
|
+ vmovdqu %ymm2, -32(%rdi)
|
|
|
+ vmovdqu %ymm3, -64(%rcx)
|
|
|
+ vmovdqu %ymm4, 128(%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor 96(%rdi), %ymm9, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm5, %ymm11
|
|
|
+ vpxor (%rax), %ymm6, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm7, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rdi)
|
|
|
+ vmovdqu %ymm1, 64(%rcx)
|
|
|
+ vmovdqu %ymm2, (%rax)
|
|
|
+ vmovdqu %ymm3, -64(%rdi)
|
|
|
+ vmovdqu %ymm4, -96(%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor 128(%rax), %ymm7, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm8, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm9, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm5, %ymm13
|
|
|
+ vpxor -96(%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rax)
|
|
|
+ vmovdqu %ymm1, 64(%rdi)
|
|
|
+ vmovdqu %ymm2, 32(%rcx)
|
|
|
+ vmovdqu %ymm3, -32(%rax)
|
|
|
+ vmovdqu %ymm4, -96(%rdi)
|
|
|
+ # Round 11
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor (%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -96(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm14, %ymm14
|
|
|
+ vpxor (%rax), %ymm12, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -64(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor (%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 128(%rcx), %ymm14, %ymm14
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor (%rdi), %ymm6, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm7, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm8, %ymm13
|
|
|
+ vpxor -96(%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 352(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, (%rdi)
|
|
|
+ vmovdqu %ymm2, -32(%rdi)
|
|
|
+ vmovdqu %ymm3, -64(%rdi)
|
|
|
+ vmovdqu %ymm4, -96(%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor (%rcx), %ymm8, %ymm10
|
|
|
+ vpxor 128(%rcx), %ymm9, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm5, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm6, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rcx)
|
|
|
+ vmovdqu %ymm1, 128(%rcx)
|
|
|
+ vmovdqu %ymm2, 96(%rcx)
|
|
|
+ vmovdqu %ymm3, 64(%rcx)
|
|
|
+ vmovdqu %ymm4, 32(%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor 96(%rax), %ymm6, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm7, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm8, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm9, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rax)
|
|
|
+ vmovdqu %ymm1, -32(%rcx)
|
|
|
+ vmovdqu %ymm2, -64(%rcx)
|
|
|
+ vmovdqu %ymm3, -96(%rcx)
|
|
|
+ vmovdqu %ymm4, 128(%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor -64(%rax), %ymm9, %ymm10
|
|
|
+ vpxor 64(%rax), %ymm5, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm6, %ymm12
|
|
|
+ vpxor (%rax), %ymm7, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rax)
|
|
|
+ vmovdqu %ymm1, 64(%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rax)
|
|
|
+ vmovdqu %ymm3, (%rax)
|
|
|
+ vmovdqu %ymm4, -32(%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor 32(%rdi), %ymm7, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm8, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm9, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm5, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rdi)
|
|
|
+ vmovdqu %ymm1, -96(%rax)
|
|
|
+ vmovdqu %ymm2, 128(%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vmovdqu %ymm4, 64(%rdi)
|
|
|
+ # Round 12
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -64(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor (%rdi), %ymm1, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor (%rax), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 128(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor (%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm11, %ymm11
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 128(%rcx), %ymm6, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm7, %ymm12
|
|
|
+ vpxor (%rax), %ymm8, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 384(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 128(%rcx)
|
|
|
+ vmovdqu %ymm2, -64(%rcx)
|
|
|
+ vmovdqu %ymm3, (%rax)
|
|
|
+ vmovdqu %ymm4, 64(%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor -64(%rdi), %ymm8, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm9, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm5, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm6, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rdi)
|
|
|
+ vmovdqu %ymm1, 32(%rcx)
|
|
|
+ vmovdqu %ymm2, 96(%rax)
|
|
|
+ vmovdqu %ymm3, 64(%rax)
|
|
|
+ vmovdqu %ymm4, 128(%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor (%rdi), %ymm6, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm7, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm8, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm9, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm1, 96(%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rcx)
|
|
|
+ vmovdqu %ymm3, -32(%rax)
|
|
|
+ vmovdqu %ymm4, 32(%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor -96(%rdi), %ymm9, %ymm10
|
|
|
+ vpxor (%rcx), %ymm5, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm6, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm7, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rdi)
|
|
|
+ vmovdqu %ymm1, (%rcx)
|
|
|
+ vmovdqu %ymm2, -32(%rcx)
|
|
|
+ vmovdqu %ymm3, 32(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor -32(%rdi), %ymm7, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm8, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm9, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm5, %ymm13
|
|
|
+ vpxor -96(%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rdi)
|
|
|
+ vmovdqu %ymm1, 64(%rcx)
|
|
|
+ vmovdqu %ymm2, 128(%rax)
|
|
|
+ vmovdqu %ymm3, -64(%rax)
|
|
|
+ vmovdqu %ymm4, -96(%rax)
|
|
|
+ # Round 13
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor (%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor 64(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rax), %ymm3, %ymm13
|
|
|
+ vpxor (%rax), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm2, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor (%rcx), %ymm1, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm11, %ymm11
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm6, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm7, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm8, %ymm13
|
|
|
+ vpxor -96(%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 416(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 32(%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rcx)
|
|
|
+ vmovdqu %ymm3, 32(%rax)
|
|
|
+ vmovdqu %ymm4, -96(%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor (%rax), %ymm8, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm9, %ymm11
|
|
|
+ vpxor (%rdi), %ymm5, %ymm12
|
|
|
+ vpxor (%rcx), %ymm6, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rax)
|
|
|
+ vmovdqu %ymm1, 128(%rdi)
|
|
|
+ vmovdqu %ymm2, (%rdi)
|
|
|
+ vmovdqu %ymm3, (%rcx)
|
|
|
+ vmovdqu %ymm4, 128(%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor 128(%rcx), %ymm6, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm7, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm8, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm9, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rcx)
|
|
|
+ vmovdqu %ymm1, 96(%rax)
|
|
|
+ vmovdqu %ymm2, -32(%rax)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor 64(%rdi), %ymm9, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm5, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm6, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm7, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rdi)
|
|
|
+ vmovdqu %ymm1, -64(%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rcx)
|
|
|
+ vmovdqu %ymm3, -32(%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor -64(%rcx), %ymm7, %ymm10
|
|
|
+ vpxor 64(%rax), %ymm8, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm9, %ymm12
|
|
|
+ vpxor -96(%rdi), %ymm5, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rcx)
|
|
|
+ vmovdqu %ymm1, 64(%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rdi)
|
|
|
+ vmovdqu %ymm3, -96(%rdi)
|
|
|
+ vmovdqu %ymm4, 64(%rcx)
|
|
|
+ # Round 14
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor (%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -64(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor (%rax), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -96(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor (%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm10, %ymm10
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm6, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm7, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm8, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 448(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 128(%rdi)
|
|
|
+ vmovdqu %ymm2, -32(%rax)
|
|
|
+ vmovdqu %ymm3, -32(%rcx)
|
|
|
+ vmovdqu %ymm4, 64(%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor 32(%rax), %ymm8, %ymm10
|
|
|
+ vpxor 128(%rax), %ymm9, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm5, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm6, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rax)
|
|
|
+ vmovdqu %ymm1, 128(%rax)
|
|
|
+ vmovdqu %ymm2, 128(%rcx)
|
|
|
+ vmovdqu %ymm3, -64(%rdi)
|
|
|
+ vmovdqu %ymm4, 32(%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor 32(%rcx), %ymm6, %ymm10
|
|
|
+ vpxor (%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm8, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm9, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rcx)
|
|
|
+ vmovdqu %ymm1, (%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rdi)
|
|
|
+ vmovdqu %ymm3, -64(%rax)
|
|
|
+ vmovdqu %ymm4, -64(%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor -96(%rax), %ymm9, %ymm10
|
|
|
+ vpxor (%rax), %ymm5, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm6, %ymm12
|
|
|
+ vpxor 96(%rcx), %ymm7, %ymm13
|
|
|
+ vpxor -96(%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rax)
|
|
|
+ vmovdqu %ymm1, (%rax)
|
|
|
+ vmovdqu %ymm2, 96(%rax)
|
|
|
+ vmovdqu %ymm3, 96(%rcx)
|
|
|
+ vmovdqu %ymm4, -96(%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor -96(%rcx), %ymm7, %ymm10
|
|
|
+ vpxor (%rcx), %ymm8, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm9, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm5, %ymm13
|
|
|
+ vpxor 64(%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rcx)
|
|
|
+ vmovdqu %ymm1, (%rcx)
|
|
|
+ vmovdqu %ymm2, -32(%rdi)
|
|
|
+ vmovdqu %ymm3, 64(%rdi)
|
|
|
+ vmovdqu %ymm4, 64(%rax)
|
|
|
+ # Round 15
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -64(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor (%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor (%rax), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm12, %ymm12
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 128(%rax), %ymm6, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm7, %ymm12
|
|
|
+ vpxor 96(%rcx), %ymm8, %ymm13
|
|
|
+ vpxor 64(%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 480(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 128(%rax)
|
|
|
+ vmovdqu %ymm2, 96(%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rcx)
|
|
|
+ vmovdqu %ymm4, 64(%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor -32(%rcx), %ymm8, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm9, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm5, %ymm12
|
|
|
+ vpxor (%rax), %ymm6, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rcx)
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, 32(%rcx)
|
|
|
+ vmovdqu %ymm3, (%rax)
|
|
|
+ vmovdqu %ymm4, -32(%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor 128(%rdi), %ymm6, %ymm10
|
|
|
+ vpxor 128(%rcx), %ymm7, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm8, %ymm12
|
|
|
+ vpxor -96(%rdi), %ymm9, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rdi)
|
|
|
+ vmovdqu %ymm1, 128(%rcx)
|
|
|
+ vmovdqu %ymm2, -64(%rax)
|
|
|
+ vmovdqu %ymm3, -96(%rdi)
|
|
|
+ vmovdqu %ymm4, -96(%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor 64(%rcx), %ymm9, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm5, %ymm11
|
|
|
+ vpxor (%rdi), %ymm6, %ymm12
|
|
|
+ vpxor 96(%rax), %ymm7, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rcx)
|
|
|
+ vmovdqu %ymm1, 32(%rax)
|
|
|
+ vmovdqu %ymm2, (%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rax)
|
|
|
+ vmovdqu %ymm4, 64(%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor -32(%rax), %ymm7, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm8, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm9, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm5, %ymm13
|
|
|
+ vpxor (%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rax)
|
|
|
+ vmovdqu %ymm1, -64(%rdi)
|
|
|
+ vmovdqu %ymm2, -64(%rcx)
|
|
|
+ vmovdqu %ymm3, -96(%rax)
|
|
|
+ vmovdqu %ymm4, (%rcx)
|
|
|
+ # Round 16
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor (%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm12, %ymm12
|
|
|
+ vpxor (%rax), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm11, %ymm11
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm6, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm7, %ymm12
|
|
|
+ vpxor 96(%rax), %ymm8, %ymm13
|
|
|
+ vpxor (%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 512(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, -64(%rax)
|
|
|
+ vmovdqu %ymm3, 96(%rax)
|
|
|
+ vmovdqu %ymm4, (%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor 96(%rcx), %ymm8, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm9, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm5, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm6, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rcx)
|
|
|
+ vmovdqu %ymm1, -32(%rdi)
|
|
|
+ vmovdqu %ymm2, 128(%rdi)
|
|
|
+ vmovdqu %ymm3, 32(%rax)
|
|
|
+ vmovdqu %ymm4, -64(%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor 128(%rax), %ymm6, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm7, %ymm11
|
|
|
+ vpxor -96(%rdi), %ymm8, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm9, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rax)
|
|
|
+ vmovdqu %ymm1, 32(%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rdi)
|
|
|
+ vmovdqu %ymm3, 64(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor 64(%rax), %ymm9, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm5, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm6, %ymm12
|
|
|
+ vpxor (%rdi), %ymm7, %ymm13
|
|
|
+ vpxor -96(%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rax)
|
|
|
+ vmovdqu %ymm1, -32(%rcx)
|
|
|
+ vmovdqu %ymm2, 128(%rcx)
|
|
|
+ vmovdqu %ymm3, (%rdi)
|
|
|
+ vmovdqu %ymm4, -96(%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor 96(%rdi), %ymm7, %ymm10
|
|
|
+ vpxor (%rax), %ymm8, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm9, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm5, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rdi)
|
|
|
+ vmovdqu %ymm1, (%rax)
|
|
|
+ vmovdqu %ymm2, -96(%rcx)
|
|
|
+ vmovdqu %ymm3, 64(%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rdi)
|
|
|
+ # Round 17
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor (%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm4, %ymm14
|
|
|
+ vpxor -64(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 32(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor (%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 128(%rcx), %ymm12, %ymm12
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm6, %ymm11
|
|
|
+ vpxor -96(%rdi), %ymm7, %ymm12
|
|
|
+ vpxor (%rdi), %ymm8, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 544(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -32(%rdi)
|
|
|
+ vmovdqu %ymm2, -96(%rdi)
|
|
|
+ vmovdqu %ymm3, (%rdi)
|
|
|
+ vmovdqu %ymm4, -64(%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor 96(%rax), %ymm8, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm9, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm5, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm6, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rax)
|
|
|
+ vmovdqu %ymm1, -64(%rcx)
|
|
|
+ vmovdqu %ymm2, 128(%rax)
|
|
|
+ vmovdqu %ymm3, -32(%rcx)
|
|
|
+ vmovdqu %ymm4, -96(%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor 32(%rdi), %ymm6, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm8, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm9, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rdi)
|
|
|
+ vmovdqu %ymm1, 128(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, -96(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor (%rcx), %ymm9, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm5, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm6, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm7, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rcx)
|
|
|
+ vmovdqu %ymm1, 96(%rcx)
|
|
|
+ vmovdqu %ymm2, 32(%rcx)
|
|
|
+ vmovdqu %ymm3, 128(%rcx)
|
|
|
+ vmovdqu %ymm4, 64(%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor -64(%rax), %ymm7, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm8, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm9, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm5, %ymm13
|
|
|
+ vpxor (%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rax)
|
|
|
+ vmovdqu %ymm1, 32(%rax)
|
|
|
+ vmovdqu %ymm2, -32(%rax)
|
|
|
+ vmovdqu %ymm3, 64(%rax)
|
|
|
+ vmovdqu %ymm4, (%rax)
|
|
|
+ # Round 18
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -32(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor (%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 128(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor (%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm13, %ymm13
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm6, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm7, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm8, %ymm13
|
|
|
+ vpxor (%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 576(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -64(%rcx)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, 128(%rcx)
|
|
|
+ vmovdqu %ymm4, (%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor (%rdi), %ymm8, %ymm10
|
|
|
+ vpxor -96(%rcx), %ymm9, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm5, %ymm12
|
|
|
+ vpxor 96(%rcx), %ymm6, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm1, -96(%rcx)
|
|
|
+ vmovdqu %ymm2, 32(%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rcx)
|
|
|
+ vmovdqu %ymm4, -32(%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor -32(%rdi), %ymm6, %ymm10
|
|
|
+ vpxor 128(%rax), %ymm7, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm8, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm9, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rdi)
|
|
|
+ vmovdqu %ymm1, 128(%rax)
|
|
|
+ vmovdqu %ymm2, -96(%rax)
|
|
|
+ vmovdqu %ymm3, 64(%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor -64(%rdi), %ymm9, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm5, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm6, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm7, %ymm13
|
|
|
+ vpxor 64(%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rdi)
|
|
|
+ vmovdqu %ymm1, 96(%rax)
|
|
|
+ vmovdqu %ymm2, 128(%rdi)
|
|
|
+ vmovdqu %ymm3, 32(%rcx)
|
|
|
+ vmovdqu %ymm4, 64(%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor -96(%rdi), %ymm7, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm8, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm9, %ymm12
|
|
|
+ vpxor (%rcx), %ymm5, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rdi)
|
|
|
+ vmovdqu %ymm1, -32(%rcx)
|
|
|
+ vmovdqu %ymm2, 96(%rdi)
|
|
|
+ vmovdqu %ymm3, (%rcx)
|
|
|
+ vmovdqu %ymm4, 32(%rax)
|
|
|
+ # Round 19
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor (%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm4, %ymm14
|
|
|
+ vpxor -32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor (%rax), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rax), %ymm1, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm3, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm13, %ymm13
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -96(%rcx), %ymm6, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm7, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm8, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 608(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -96(%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rax)
|
|
|
+ vmovdqu %ymm3, 32(%rcx)
|
|
|
+ vmovdqu %ymm4, 32(%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor 128(%rcx), %ymm8, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm9, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm5, %ymm12
|
|
|
+ vpxor 96(%rax), %ymm6, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rcx)
|
|
|
+ vmovdqu %ymm1, -32(%rax)
|
|
|
+ vmovdqu %ymm2, -32(%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor -64(%rcx), %ymm6, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 64(%rcx), %ymm8, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm9, %ymm13
|
|
|
+ vpxor -96(%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rcx)
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rcx)
|
|
|
+ vmovdqu %ymm3, 64(%rax)
|
|
|
+ vmovdqu %ymm4, -96(%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor (%rax), %ymm9, %ymm10
|
|
|
+ vpxor (%rdi), %ymm5, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm6, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm7, %ymm13
|
|
|
+ vpxor (%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rax)
|
|
|
+ vmovdqu %ymm1, (%rdi)
|
|
|
+ vmovdqu %ymm2, 128(%rax)
|
|
|
+ vmovdqu %ymm3, 128(%rdi)
|
|
|
+ vmovdqu %ymm4, (%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor 64(%rdi), %ymm7, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm8, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm9, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm5, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rdi)
|
|
|
+ vmovdqu %ymm1, 96(%rcx)
|
|
|
+ vmovdqu %ymm2, -64(%rax)
|
|
|
+ vmovdqu %ymm3, -64(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rcx)
|
|
|
+ # Round 20
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -32(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor (%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -96(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm11, %ymm11
|
|
|
+ vpxor (%rax), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor (%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 32(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm10, %ymm10
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm6, %ymm11
|
|
|
+ vpxor 64(%rcx), %ymm7, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm8, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 640(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -32(%rax)
|
|
|
+ vmovdqu %ymm2, 64(%rcx)
|
|
|
+ vmovdqu %ymm3, 128(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor 32(%rcx), %ymm8, %ymm10
|
|
|
+ vpxor 96(%rdi), %ymm9, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm5, %ymm12
|
|
|
+ vpxor (%rdi), %ymm6, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rcx)
|
|
|
+ vmovdqu %ymm1, 96(%rdi)
|
|
|
+ vmovdqu %ymm2, -64(%rcx)
|
|
|
+ vmovdqu %ymm3, (%rdi)
|
|
|
+ vmovdqu %ymm4, -64(%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor -96(%rcx), %ymm6, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm8, %ymm12
|
|
|
+ vpxor (%rcx), %ymm9, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rcx)
|
|
|
+ vmovdqu %ymm1, -32(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rax)
|
|
|
+ vmovdqu %ymm3, (%rcx)
|
|
|
+ vmovdqu %ymm4, 64(%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor 32(%rax), %ymm9, %ymm10
|
|
|
+ vpxor 128(%rcx), %ymm5, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm6, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm7, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rax)
|
|
|
+ vmovdqu %ymm1, 128(%rcx)
|
|
|
+ vmovdqu %ymm2, 32(%rdi)
|
|
|
+ vmovdqu %ymm3, 128(%rax)
|
|
|
+ vmovdqu %ymm4, -64(%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor -96(%rax), %ymm7, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm8, %ymm11
|
|
|
+ vpxor -96(%rdi), %ymm9, %ymm12
|
|
|
+ vpxor (%rax), %ymm5, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rax)
|
|
|
+ vmovdqu %ymm1, 96(%rax)
|
|
|
+ vmovdqu %ymm2, -96(%rdi)
|
|
|
+ vmovdqu %ymm3, (%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rcx)
|
|
|
+ # Round 21
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -32(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor (%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor (%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm11, %ymm11
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 96(%rdi), %ymm6, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm7, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm8, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 672(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 96(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rax)
|
|
|
+ vmovdqu %ymm3, 128(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor 128(%rdi), %ymm8, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm9, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm5, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm6, %ymm13
|
|
|
+ vpxor -96(%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rdi)
|
|
|
+ vmovdqu %ymm1, -64(%rax)
|
|
|
+ vmovdqu %ymm2, -96(%rcx)
|
|
|
+ vmovdqu %ymm3, 128(%rcx)
|
|
|
+ vmovdqu %ymm4, -96(%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor -32(%rax), %ymm6, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm7, %ymm11
|
|
|
+ vpxor (%rcx), %ymm8, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm9, %ymm13
|
|
|
+ vpxor -96(%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rax)
|
|
|
+ vmovdqu %ymm1, -64(%rcx)
|
|
|
+ vmovdqu %ymm2, (%rcx)
|
|
|
+ vmovdqu %ymm3, -64(%rdi)
|
|
|
+ vmovdqu %ymm4, -96(%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor -32(%rcx), %ymm9, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm5, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm6, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm7, %ymm13
|
|
|
+ vpxor (%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rcx)
|
|
|
+ vmovdqu %ymm1, 32(%rcx)
|
|
|
+ vmovdqu %ymm2, -32(%rdi)
|
|
|
+ vmovdqu %ymm3, 32(%rdi)
|
|
|
+ vmovdqu %ymm4, (%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor 64(%rcx), %ymm7, %ymm10
|
|
|
+ vpxor (%rdi), %ymm8, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm9, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm5, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rcx)
|
|
|
+ vmovdqu %ymm1, (%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, 32(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rax)
|
|
|
+ # Round 22
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -64(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -64(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm10, %ymm10
|
|
|
+ vpxor (%rax), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor (%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rcx), %ymm13, %ymm13
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm6, %ymm11
|
|
|
+ vpxor (%rcx), %ymm7, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm8, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 704(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -64(%rax)
|
|
|
+ vmovdqu %ymm2, (%rcx)
|
|
|
+ vmovdqu %ymm3, 32(%rdi)
|
|
|
+ vmovdqu %ymm4, 96(%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor 128(%rax), %ymm8, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm9, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm5, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm6, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rax)
|
|
|
+ vmovdqu %ymm1, -96(%rdi)
|
|
|
+ vmovdqu %ymm2, -32(%rax)
|
|
|
+ vmovdqu %ymm3, 32(%rcx)
|
|
|
+ vmovdqu %ymm4, 64(%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor 96(%rdi), %ymm6, %ymm10
|
|
|
+ vpxor -96(%rcx), %ymm7, %ymm11
|
|
|
+ vpxor -64(%rdi), %ymm8, %ymm12
|
|
|
+ vpxor (%rax), %ymm9, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rdi)
|
|
|
+ vmovdqu %ymm1, -96(%rcx)
|
|
|
+ vmovdqu %ymm2, -64(%rdi)
|
|
|
+ vmovdqu %ymm3, (%rax)
|
|
|
+ vmovdqu %ymm4, 64(%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor 96(%rcx), %ymm9, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm5, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm6, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm7, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rcx)
|
|
|
+ vmovdqu %ymm1, 128(%rdi)
|
|
|
+ vmovdqu %ymm2, -64(%rcx)
|
|
|
+ vmovdqu %ymm3, -32(%rdi)
|
|
|
+ vmovdqu %ymm4, 32(%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor 64(%rax), %ymm7, %ymm10
|
|
|
+ vpxor 128(%rcx), %ymm8, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm9, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm5, %ymm13
|
|
|
+ vpxor (%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rax)
|
|
|
+ vmovdqu %ymm1, 128(%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rax)
|
|
|
+ vmovdqu %ymm3, -32(%rcx)
|
|
|
+ vmovdqu %ymm4, (%rdi)
|
|
|
+ # Round 23
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor -64(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor 96(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor (%rax), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -96(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor (%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rcx), %ymm10, %ymm10
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm6, %ymm11
|
|
|
+ vpxor -64(%rdi), %ymm7, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm8, %ymm13
|
|
|
+ vpxor (%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 736(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -96(%rdi)
|
|
|
+ vmovdqu %ymm2, -64(%rdi)
|
|
|
+ vmovdqu %ymm3, -32(%rdi)
|
|
|
+ vmovdqu %ymm4, (%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor 32(%rdi), %ymm8, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm9, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm5, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm6, %ymm13
|
|
|
+ vpxor -96(%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rdi)
|
|
|
+ vmovdqu %ymm1, 64(%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rdi)
|
|
|
+ vmovdqu %ymm3, 128(%rdi)
|
|
|
+ vmovdqu %ymm4, -96(%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor -64(%rax), %ymm6, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm7, %ymm11
|
|
|
+ vpxor (%rax), %ymm8, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm9, %ymm13
|
|
|
+ vpxor 64(%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rax)
|
|
|
+ vmovdqu %ymm1, -32(%rax)
|
|
|
+ vmovdqu %ymm2, (%rax)
|
|
|
+ vmovdqu %ymm3, 32(%rax)
|
|
|
+ vmovdqu %ymm4, 64(%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor 96(%rax), %ymm9, %ymm10
|
|
|
+ vpxor 128(%rax), %ymm5, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm6, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm7, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rax)
|
|
|
+ vmovdqu %ymm1, 128(%rax)
|
|
|
+ vmovdqu %ymm2, -96(%rcx)
|
|
|
+ vmovdqu %ymm3, -64(%rcx)
|
|
|
+ vmovdqu %ymm4, -32(%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor (%rcx), %ymm7, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm8, %ymm11
|
|
|
+ vpxor 64(%rcx), %ymm9, %ymm12
|
|
|
+ vpxor 96(%rcx), %ymm5, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rcx)
|
|
|
+ vmovdqu %ymm1, 32(%rcx)
|
|
|
+ vmovdqu %ymm2, 64(%rcx)
|
|
|
+ vmovdqu %ymm3, 96(%rcx)
|
|
|
+ vmovdqu %ymm4, 128(%rcx)
|
|
|
+ subq $0x80, %rdi
|
|
|
+ vmovdqu %ymm15, (%rdi)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_sha3_128_blocksx4_seed_avx2,.-kyber_sha3_128_blocksx4_seed_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.data
|
|
|
+#else
|
|
|
+.section __DATA,__data
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#ifndef __APPLE__
|
|
|
+.align 32
|
|
|
+#else
|
|
|
+.p2align 5
|
|
|
+#endif /* __APPLE__ */
|
|
|
+L_sha3_256_blockx4_seed_avx2_end_mark:
|
|
|
+.quad 0x8000000000000000, 0x8000000000000000
|
|
|
+.quad 0x8000000000000000, 0x8000000000000000
|
|
|
+#ifndef __APPLE__
|
|
|
+.text
|
|
|
+.globl kyber_sha3_256_blocksx4_seed_avx2
|
|
|
+.type kyber_sha3_256_blocksx4_seed_avx2,@function
|
|
|
+.align 16
|
|
|
+kyber_sha3_256_blocksx4_seed_avx2:
|
|
|
+#else
|
|
|
+.section __TEXT,__text
|
|
|
+.globl _kyber_sha3_256_blocksx4_seed_avx2
|
|
|
+.p2align 4
|
|
|
+_kyber_sha3_256_blocksx4_seed_avx2:
|
|
|
+#endif /* __APPLE__ */
|
|
|
+ leaq L_sha3_parallel_4_r(%rip), %rdx
|
|
|
+ movq %rdi, %rax
|
|
|
+ movq %rdi, %rcx
|
|
|
+ vpbroadcastq (%rsi), %ymm15
|
|
|
+ addq $0x80, %rdi
|
|
|
+ vpbroadcastq 8(%rsi), %ymm11
|
|
|
+ addq $0x180, %rax
|
|
|
+ vpbroadcastq 16(%rsi), %ymm12
|
|
|
+ addq $0x280, %rcx
|
|
|
+ vpbroadcastq 24(%rsi), %ymm13
|
|
|
+ vmovdqu L_sha3_256_blockx4_seed_avx2_end_mark(%rip), %ymm5
|
|
|
+ vpxor %ymm6, %ymm6, %ymm6
|
|
|
+ vmovdqu %ymm11, -96(%rdi)
|
|
|
+ vmovdqu %ymm12, -64(%rdi)
|
|
|
+ vmovdqu %ymm13, -32(%rdi)
|
|
|
+ vmovdqu (%rdi), %ymm14
|
|
|
+ vmovdqu %ymm6, 32(%rdi)
|
|
|
+ vmovdqu %ymm6, 64(%rdi)
|
|
|
+ vmovdqu %ymm6, 96(%rdi)
|
|
|
+ vmovdqu %ymm6, 128(%rdi)
|
|
|
+ vmovdqu %ymm6, -96(%rax)
|
|
|
+ vmovdqu %ymm6, -64(%rax)
|
|
|
+ vmovdqu %ymm6, -32(%rax)
|
|
|
+ vmovdqu %ymm6, (%rax)
|
|
|
+ vmovdqu %ymm6, 32(%rax)
|
|
|
+ vmovdqu %ymm6, 64(%rax)
|
|
|
+ vmovdqu %ymm6, 96(%rax)
|
|
|
+ vmovdqu %ymm5, 128(%rax)
|
|
|
+ vmovdqu %ymm6, -96(%rcx)
|
|
|
+ vmovdqu %ymm6, -64(%rcx)
|
|
|
+ vmovdqu %ymm6, -32(%rcx)
|
|
|
+ vmovdqu %ymm6, (%rcx)
|
|
|
+ vmovdqu %ymm6, 32(%rcx)
|
|
|
+ vmovdqu %ymm6, 64(%rcx)
|
|
|
+ vmovdqu %ymm6, 96(%rcx)
|
|
|
+ vmovdqu %ymm6, 128(%rcx)
|
|
|
+ vmovdqu %ymm15, %ymm10
|
|
|
+ vpxor %ymm5, %ymm11, %ymm11
|
|
|
+ # Round 0
|
|
|
+ # Calc b[0..4]
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm6, %ymm11
|
|
|
+ vpxor (%rax), %ymm7, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm8, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor (%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 64(%rdi)
|
|
|
+ vmovdqu %ymm2, (%rax)
|
|
|
+ vmovdqu %ymm3, -64(%rcx)
|
|
|
+ vmovdqu %ymm4, 128(%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor -32(%rdi), %ymm8, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm9, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm5, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm6, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rdi)
|
|
|
+ vmovdqu %ymm1, -96(%rax)
|
|
|
+ vmovdqu %ymm2, -64(%rax)
|
|
|
+ vmovdqu %ymm3, 128(%rax)
|
|
|
+ vmovdqu %ymm4, 64(%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor -96(%rdi), %ymm6, %ymm10
|
|
|
+ vpxor 96(%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm8, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm9, %ymm13
|
|
|
+ vpxor (%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rdi)
|
|
|
+ vmovdqu %ymm1, 96(%rdi)
|
|
|
+ vmovdqu %ymm2, 32(%rax)
|
|
|
+ vmovdqu %ymm3, -32(%rcx)
|
|
|
+ vmovdqu %ymm4, (%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor (%rdi), %ymm9, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm5, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm6, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm7, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, -32(%rax)
|
|
|
+ vmovdqu %ymm3, -96(%rcx)
|
|
|
+ vmovdqu %ymm4, 96(%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor -64(%rdi), %ymm7, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm8, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm9, %ymm12
|
|
|
+ vpxor 96(%rax), %ymm5, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rdi)
|
|
|
+ vmovdqu %ymm1, 128(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rax)
|
|
|
+ vmovdqu %ymm3, 96(%rax)
|
|
|
+ vmovdqu %ymm4, 32(%rcx)
|
|
|
+ # Round 1
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor (%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm2, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor (%rax), %ymm12, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm3, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor (%rcx), %ymm4, %ymm14
|
|
|
+ vpxor 64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rcx), %ymm14, %ymm14
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm6, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm7, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm8, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 32(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -96(%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rax)
|
|
|
+ vmovdqu %ymm3, -96(%rcx)
|
|
|
+ vmovdqu %ymm4, 32(%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor -64(%rcx), %ymm8, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm9, %ymm11
|
|
|
+ vpxor -96(%rdi), %ymm5, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm6, %ymm13
|
|
|
+ vpxor 64(%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rcx)
|
|
|
+ vmovdqu %ymm1, 64(%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rdi)
|
|
|
+ vmovdqu %ymm3, 32(%rdi)
|
|
|
+ vmovdqu %ymm4, 64(%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor 64(%rdi), %ymm6, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm7, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm8, %ymm12
|
|
|
+ vpxor 96(%rcx), %ymm9, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rdi)
|
|
|
+ vmovdqu %ymm1, -64(%rax)
|
|
|
+ vmovdqu %ymm2, -32(%rcx)
|
|
|
+ vmovdqu %ymm3, 96(%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor 128(%rcx), %ymm9, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm5, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm6, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm7, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rcx)
|
|
|
+ vmovdqu %ymm1, -32(%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rdi)
|
|
|
+ vmovdqu %ymm3, -32(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor (%rax), %ymm7, %ymm10
|
|
|
+ vpxor 128(%rax), %ymm8, %ymm11
|
|
|
+ vpxor (%rcx), %ymm9, %ymm12
|
|
|
+ vpxor (%rdi), %ymm5, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rax)
|
|
|
+ vmovdqu %ymm1, 128(%rax)
|
|
|
+ vmovdqu %ymm2, (%rcx)
|
|
|
+ vmovdqu %ymm3, (%rdi)
|
|
|
+ vmovdqu %ymm4, 128(%rdi)
|
|
|
+ # Round 2
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -32(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm10, %ymm10
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm6, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm7, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm8, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 64(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 64(%rcx)
|
|
|
+ vmovdqu %ymm2, -32(%rcx)
|
|
|
+ vmovdqu %ymm3, -32(%rax)
|
|
|
+ vmovdqu %ymm4, 128(%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor -96(%rcx), %ymm8, %ymm10
|
|
|
+ vpxor 64(%rax), %ymm9, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm5, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm6, %ymm13
|
|
|
+ vpxor (%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rcx)
|
|
|
+ vmovdqu %ymm1, 64(%rax)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, -32(%rdi)
|
|
|
+ vmovdqu %ymm4, (%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor -96(%rax), %ymm6, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm8, %ymm12
|
|
|
+ vpxor 96(%rax), %ymm9, %ymm13
|
|
|
+ vpxor (%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rax)
|
|
|
+ vmovdqu %ymm1, -96(%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rcx)
|
|
|
+ vmovdqu %ymm3, 96(%rax)
|
|
|
+ vmovdqu %ymm4, (%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor 32(%rcx), %ymm9, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm5, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm6, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm7, %ymm13
|
|
|
+ vpxor (%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rcx)
|
|
|
+ vmovdqu %ymm1, -64(%rcx)
|
|
|
+ vmovdqu %ymm2, -64(%rax)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vmovdqu %ymm4, (%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor 32(%rax), %ymm7, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm8, %ymm11
|
|
|
+ vpxor -64(%rdi), %ymm9, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm5, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rax)
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, -64(%rdi)
|
|
|
+ vmovdqu %ymm3, 128(%rcx)
|
|
|
+ vmovdqu %ymm4, 128(%rax)
|
|
|
+ # Round 3
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor (%rdi), %ymm4, %ymm14
|
|
|
+ vpxor 64(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor -96(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm13, %ymm13
|
|
|
+ vpxor (%rax), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor (%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 32(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm12, %ymm12
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 64(%rax), %ymm6, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm7, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm8, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 96(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 64(%rax)
|
|
|
+ vmovdqu %ymm2, 96(%rcx)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vmovdqu %ymm4, 128(%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor -32(%rax), %ymm8, %ymm10
|
|
|
+ vpxor (%rcx), %ymm9, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm5, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm6, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rax)
|
|
|
+ vmovdqu %ymm1, (%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rax)
|
|
|
+ vmovdqu %ymm3, -64(%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor 64(%rcx), %ymm6, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm8, %ymm12
|
|
|
+ vpxor (%rdi), %ymm9, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rcx)
|
|
|
+ vmovdqu %ymm1, 64(%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rax)
|
|
|
+ vmovdqu %ymm3, (%rdi)
|
|
|
+ vmovdqu %ymm4, 32(%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor 128(%rdi), %ymm9, %ymm10
|
|
|
+ vpxor -96(%rcx), %ymm5, %ymm11
|
|
|
+ vpxor -96(%rdi), %ymm6, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm7, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rdi)
|
|
|
+ vmovdqu %ymm1, -96(%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rdi)
|
|
|
+ vmovdqu %ymm3, -64(%rax)
|
|
|
+ vmovdqu %ymm4, 128(%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor -32(%rcx), %ymm7, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm8, %ymm11
|
|
|
+ vpxor (%rax), %ymm9, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm5, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rcx)
|
|
|
+ vmovdqu %ymm1, -32(%rdi)
|
|
|
+ vmovdqu %ymm2, (%rax)
|
|
|
+ vmovdqu %ymm3, 32(%rcx)
|
|
|
+ vmovdqu %ymm4, 32(%rdi)
|
|
|
+ # Round 4
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor (%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -96(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor (%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 64(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm14, %ymm14
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor (%rcx), %ymm6, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm7, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm8, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 128(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, (%rcx)
|
|
|
+ vmovdqu %ymm2, 96(%rax)
|
|
|
+ vmovdqu %ymm3, -64(%rax)
|
|
|
+ vmovdqu %ymm4, 32(%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor 96(%rdi), %ymm8, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm9, %ymm11
|
|
|
+ vpxor 64(%rcx), %ymm5, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm6, %ymm13
|
|
|
+ vpxor (%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rdi)
|
|
|
+ vmovdqu %ymm1, -64(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rcx)
|
|
|
+ vmovdqu %ymm3, -96(%rcx)
|
|
|
+ vmovdqu %ymm4, (%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor 64(%rax), %ymm6, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm7, %ymm11
|
|
|
+ vpxor (%rdi), %ymm8, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm9, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rax)
|
|
|
+ vmovdqu %ymm1, -96(%rax)
|
|
|
+ vmovdqu %ymm2, (%rdi)
|
|
|
+ vmovdqu %ymm3, 128(%rcx)
|
|
|
+ vmovdqu %ymm4, -32(%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor 128(%rax), %ymm9, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm5, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm6, %ymm12
|
|
|
+ vpxor -96(%rdi), %ymm7, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rax)
|
|
|
+ vmovdqu %ymm1, -32(%rax)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, -96(%rdi)
|
|
|
+ vmovdqu %ymm4, 32(%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor 96(%rcx), %ymm7, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm8, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm9, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm5, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rcx)
|
|
|
+ vmovdqu %ymm1, -64(%rcx)
|
|
|
+ vmovdqu %ymm2, 32(%rax)
|
|
|
+ vmovdqu %ymm3, 128(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rdi)
|
|
|
+ # Round 5
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor (%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor 64(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm11, %ymm11
|
|
|
+ vpxor (%rax), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor (%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm13, %ymm13
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm6, %ymm11
|
|
|
+ vpxor (%rdi), %ymm7, %ymm12
|
|
|
+ vpxor -96(%rdi), %ymm8, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 160(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -64(%rdi)
|
|
|
+ vmovdqu %ymm2, (%rdi)
|
|
|
+ vmovdqu %ymm3, -96(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor -64(%rax), %ymm8, %ymm10
|
|
|
+ vpxor (%rax), %ymm9, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm5, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm6, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rax)
|
|
|
+ vmovdqu %ymm1, (%rax)
|
|
|
+ vmovdqu %ymm2, 64(%rax)
|
|
|
+ vmovdqu %ymm3, -32(%rax)
|
|
|
+ vmovdqu %ymm4, 32(%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor (%rcx), %ymm6, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm7, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm8, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm9, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rcx)
|
|
|
+ vmovdqu %ymm1, 64(%rcx)
|
|
|
+ vmovdqu %ymm2, 128(%rcx)
|
|
|
+ vmovdqu %ymm3, 32(%rcx)
|
|
|
+ vmovdqu %ymm4, 96(%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor 32(%rdi), %ymm9, %ymm10
|
|
|
+ vpxor 96(%rdi), %ymm5, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm6, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm7, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rdi)
|
|
|
+ vmovdqu %ymm1, 96(%rdi)
|
|
|
+ vmovdqu %ymm2, -96(%rax)
|
|
|
+ vmovdqu %ymm3, 64(%rdi)
|
|
|
+ vmovdqu %ymm4, 128(%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor 96(%rax), %ymm7, %ymm10
|
|
|
+ vpxor -96(%rcx), %ymm8, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm9, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm5, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rax)
|
|
|
+ vmovdqu %ymm1, -96(%rcx)
|
|
|
+ vmovdqu %ymm2, -32(%rcx)
|
|
|
+ vmovdqu %ymm3, 128(%rax)
|
|
|
+ vmovdqu %ymm4, -64(%rcx)
|
|
|
+ # Round 6
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor (%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor -96(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm13, %ymm13
|
|
|
+ vpxor (%rax), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rax), %ymm12, %ymm12
|
|
|
+ vpxor (%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rcx), %ymm12, %ymm12
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor (%rax), %ymm6, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm7, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm8, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 192(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, (%rax)
|
|
|
+ vmovdqu %ymm2, 128(%rcx)
|
|
|
+ vmovdqu %ymm3, 64(%rdi)
|
|
|
+ vmovdqu %ymm4, -64(%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor -96(%rdi), %ymm8, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm9, %ymm11
|
|
|
+ vpxor (%rcx), %ymm5, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm6, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rdi)
|
|
|
+ vmovdqu %ymm1, 32(%rax)
|
|
|
+ vmovdqu %ymm2, (%rcx)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor -64(%rdi), %ymm6, %ymm10
|
|
|
+ vpxor 64(%rax), %ymm7, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm8, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm9, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rdi)
|
|
|
+ vmovdqu %ymm1, 64(%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rcx)
|
|
|
+ vmovdqu %ymm3, 128(%rdi)
|
|
|
+ vmovdqu %ymm4, 96(%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor -32(%rdi), %ymm9, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm5, %ymm11
|
|
|
+ vpxor 64(%rcx), %ymm6, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm7, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rdi)
|
|
|
+ vmovdqu %ymm1, -64(%rax)
|
|
|
+ vmovdqu %ymm2, 64(%rcx)
|
|
|
+ vmovdqu %ymm3, -96(%rax)
|
|
|
+ vmovdqu %ymm4, 128(%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor (%rdi), %ymm7, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm8, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm9, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm5, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm1, -32(%rax)
|
|
|
+ vmovdqu %ymm2, 96(%rcx)
|
|
|
+ vmovdqu %ymm3, 32(%rdi)
|
|
|
+ vmovdqu %ymm4, -96(%rcx)
|
|
|
+ # Round 7
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor -96(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm1, %ymm11
|
|
|
+ vpxor (%rax), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm4, %ymm14
|
|
|
+ vpxor 128(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor (%rcx), %ymm2, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm12, %ymm12
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm6, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm7, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm8, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 224(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 32(%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rcx)
|
|
|
+ vmovdqu %ymm3, -96(%rax)
|
|
|
+ vmovdqu %ymm4, -96(%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor 64(%rdi), %ymm8, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm9, %ymm11
|
|
|
+ vpxor -64(%rdi), %ymm5, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm6, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rdi)
|
|
|
+ vmovdqu %ymm1, -32(%rcx)
|
|
|
+ vmovdqu %ymm2, -64(%rdi)
|
|
|
+ vmovdqu %ymm3, -64(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor (%rax), %ymm6, %ymm10
|
|
|
+ vpxor (%rcx), %ymm7, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm8, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm9, %ymm13
|
|
|
+ vpxor (%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rax)
|
|
|
+ vmovdqu %ymm1, (%rcx)
|
|
|
+ vmovdqu %ymm2, 128(%rdi)
|
|
|
+ vmovdqu %ymm3, 128(%rax)
|
|
|
+ vmovdqu %ymm4, (%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor -64(%rcx), %ymm9, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm5, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm6, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm7, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rcx)
|
|
|
+ vmovdqu %ymm1, -96(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rax)
|
|
|
+ vmovdqu %ymm3, 64(%rcx)
|
|
|
+ vmovdqu %ymm4, 32(%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor 128(%rcx), %ymm7, %ymm10
|
|
|
+ vpxor 96(%rdi), %ymm8, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm9, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm5, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rcx)
|
|
|
+ vmovdqu %ymm1, 96(%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rax)
|
|
|
+ vmovdqu %ymm3, -32(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rax)
|
|
|
+ # Round 8
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor -64(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor (%rdi), %ymm4, %ymm14
|
|
|
+ vpxor 32(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm3, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor (%rax), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -64(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor (%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm14, %ymm14
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm6, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm7, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm8, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 256(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -32(%rcx)
|
|
|
+ vmovdqu %ymm2, 128(%rdi)
|
|
|
+ vmovdqu %ymm3, 64(%rcx)
|
|
|
+ vmovdqu %ymm4, -32(%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor -96(%rax), %ymm8, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm9, %ymm11
|
|
|
+ vpxor (%rax), %ymm5, %ymm12
|
|
|
+ vpxor -96(%rdi), %ymm6, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rax)
|
|
|
+ vmovdqu %ymm1, 96(%rcx)
|
|
|
+ vmovdqu %ymm2, (%rax)
|
|
|
+ vmovdqu %ymm3, -96(%rdi)
|
|
|
+ vmovdqu %ymm4, 96(%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor 32(%rax), %ymm6, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm8, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm9, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rax)
|
|
|
+ vmovdqu %ymm1, -64(%rdi)
|
|
|
+ vmovdqu %ymm2, 128(%rax)
|
|
|
+ vmovdqu %ymm3, 32(%rdi)
|
|
|
+ vmovdqu %ymm4, 128(%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor -96(%rcx), %ymm9, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm5, %ymm11
|
|
|
+ vpxor (%rcx), %ymm6, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm7, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rcx)
|
|
|
+ vmovdqu %ymm1, 64(%rdi)
|
|
|
+ vmovdqu %ymm2, (%rcx)
|
|
|
+ vmovdqu %ymm3, 64(%rax)
|
|
|
+ vmovdqu %ymm4, -32(%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor 32(%rcx), %ymm7, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm8, %ymm11
|
|
|
+ vpxor (%rdi), %ymm9, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm5, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rcx)
|
|
|
+ vmovdqu %ymm1, -64(%rax)
|
|
|
+ vmovdqu %ymm2, (%rdi)
|
|
|
+ vmovdqu %ymm3, -64(%rcx)
|
|
|
+ vmovdqu %ymm4, 96(%rdi)
|
|
|
+ # Round 9
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor 32(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor (%rax), %ymm12, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor (%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm14, %ymm14
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm6, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm7, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm8, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 288(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 96(%rcx)
|
|
|
+ vmovdqu %ymm2, 128(%rax)
|
|
|
+ vmovdqu %ymm3, 64(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor 64(%rcx), %ymm8, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm9, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm5, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm6, %ymm13
|
|
|
+ vpxor (%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rcx)
|
|
|
+ vmovdqu %ymm1, 96(%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rax)
|
|
|
+ vmovdqu %ymm3, 64(%rdi)
|
|
|
+ vmovdqu %ymm4, (%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor -32(%rcx), %ymm6, %ymm10
|
|
|
+ vpxor (%rax), %ymm7, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm8, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm9, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rcx)
|
|
|
+ vmovdqu %ymm1, (%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rdi)
|
|
|
+ vmovdqu %ymm3, -32(%rdi)
|
|
|
+ vmovdqu %ymm4, 32(%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor -32(%rax), %ymm9, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm5, %ymm11
|
|
|
+ vpxor -64(%rdi), %ymm6, %ymm12
|
|
|
+ vpxor (%rcx), %ymm7, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rax)
|
|
|
+ vmovdqu %ymm1, -96(%rax)
|
|
|
+ vmovdqu %ymm2, -64(%rdi)
|
|
|
+ vmovdqu %ymm3, (%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor 128(%rdi), %ymm7, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm8, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm9, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm5, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rdi)
|
|
|
+ vmovdqu %ymm1, -96(%rdi)
|
|
|
+ vmovdqu %ymm2, 128(%rcx)
|
|
|
+ vmovdqu %ymm3, -96(%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rax)
|
|
|
+ # Round 10
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor (%rdi), %ymm4, %ymm14
|
|
|
+ vpxor 32(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor -96(%rax), %ymm1, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm10, %ymm10
|
|
|
+ vpxor (%rax), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor (%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm11, %ymm11
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm6, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm7, %ymm12
|
|
|
+ vpxor (%rcx), %ymm8, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 320(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 96(%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rdi)
|
|
|
+ vmovdqu %ymm3, (%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor 64(%rax), %ymm8, %ymm10
|
|
|
+ vpxor (%rdi), %ymm9, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm5, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm6, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rax)
|
|
|
+ vmovdqu %ymm1, (%rdi)
|
|
|
+ vmovdqu %ymm2, -32(%rcx)
|
|
|
+ vmovdqu %ymm3, -96(%rax)
|
|
|
+ vmovdqu %ymm4, 128(%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor 96(%rcx), %ymm6, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm7, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm8, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm9, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rcx)
|
|
|
+ vmovdqu %ymm1, 32(%rax)
|
|
|
+ vmovdqu %ymm2, -32(%rdi)
|
|
|
+ vmovdqu %ymm3, -64(%rcx)
|
|
|
+ vmovdqu %ymm4, 128(%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor 96(%rdi), %ymm9, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm5, %ymm11
|
|
|
+ vpxor (%rax), %ymm6, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm7, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rdi)
|
|
|
+ vmovdqu %ymm1, 64(%rcx)
|
|
|
+ vmovdqu %ymm2, (%rax)
|
|
|
+ vmovdqu %ymm3, -64(%rdi)
|
|
|
+ vmovdqu %ymm4, -96(%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor 128(%rax), %ymm7, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm8, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm9, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm5, %ymm13
|
|
|
+ vpxor -96(%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rax)
|
|
|
+ vmovdqu %ymm1, 64(%rdi)
|
|
|
+ vmovdqu %ymm2, 32(%rcx)
|
|
|
+ vmovdqu %ymm3, -32(%rax)
|
|
|
+ vmovdqu %ymm4, -96(%rdi)
|
|
|
+ # Round 11
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor (%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -96(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm14, %ymm14
|
|
|
+ vpxor (%rax), %ymm12, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -64(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor (%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 128(%rcx), %ymm14, %ymm14
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor (%rdi), %ymm6, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm7, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm8, %ymm13
|
|
|
+ vpxor -96(%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 352(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, (%rdi)
|
|
|
+ vmovdqu %ymm2, -32(%rdi)
|
|
|
+ vmovdqu %ymm3, -64(%rdi)
|
|
|
+ vmovdqu %ymm4, -96(%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor (%rcx), %ymm8, %ymm10
|
|
|
+ vpxor 128(%rcx), %ymm9, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm5, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm6, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rcx)
|
|
|
+ vmovdqu %ymm1, 128(%rcx)
|
|
|
+ vmovdqu %ymm2, 96(%rcx)
|
|
|
+ vmovdqu %ymm3, 64(%rcx)
|
|
|
+ vmovdqu %ymm4, 32(%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor 96(%rax), %ymm6, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm7, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm8, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm9, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rax)
|
|
|
+ vmovdqu %ymm1, -32(%rcx)
|
|
|
+ vmovdqu %ymm2, -64(%rcx)
|
|
|
+ vmovdqu %ymm3, -96(%rcx)
|
|
|
+ vmovdqu %ymm4, 128(%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor -64(%rax), %ymm9, %ymm10
|
|
|
+ vpxor 64(%rax), %ymm5, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm6, %ymm12
|
|
|
+ vpxor (%rax), %ymm7, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rax)
|
|
|
+ vmovdqu %ymm1, 64(%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rax)
|
|
|
+ vmovdqu %ymm3, (%rax)
|
|
|
+ vmovdqu %ymm4, -32(%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor 32(%rdi), %ymm7, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm8, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm9, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm5, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rdi)
|
|
|
+ vmovdqu %ymm1, -96(%rax)
|
|
|
+ vmovdqu %ymm2, 128(%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vmovdqu %ymm4, 64(%rdi)
|
|
|
+ # Round 12
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -64(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor (%rdi), %ymm1, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor (%rax), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 128(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor (%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm11, %ymm11
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 128(%rcx), %ymm6, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm7, %ymm12
|
|
|
+ vpxor (%rax), %ymm8, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 384(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 128(%rcx)
|
|
|
+ vmovdqu %ymm2, -64(%rcx)
|
|
|
+ vmovdqu %ymm3, (%rax)
|
|
|
+ vmovdqu %ymm4, 64(%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor -64(%rdi), %ymm8, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm9, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm5, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm6, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rdi)
|
|
|
+ vmovdqu %ymm1, 32(%rcx)
|
|
|
+ vmovdqu %ymm2, 96(%rax)
|
|
|
+ vmovdqu %ymm3, 64(%rax)
|
|
|
+ vmovdqu %ymm4, 128(%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor (%rdi), %ymm6, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm7, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm8, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm9, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm1, 96(%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rcx)
|
|
|
+ vmovdqu %ymm3, -32(%rax)
|
|
|
+ vmovdqu %ymm4, 32(%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor -96(%rdi), %ymm9, %ymm10
|
|
|
+ vpxor (%rcx), %ymm5, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm6, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm7, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rdi)
|
|
|
+ vmovdqu %ymm1, (%rcx)
|
|
|
+ vmovdqu %ymm2, -32(%rcx)
|
|
|
+ vmovdqu %ymm3, 32(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor -32(%rdi), %ymm7, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm8, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm9, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm5, %ymm13
|
|
|
+ vpxor -96(%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rdi)
|
|
|
+ vmovdqu %ymm1, 64(%rcx)
|
|
|
+ vmovdqu %ymm2, 128(%rax)
|
|
|
+ vmovdqu %ymm3, -64(%rax)
|
|
|
+ vmovdqu %ymm4, -96(%rax)
|
|
|
+ # Round 13
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor (%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor 64(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rax), %ymm3, %ymm13
|
|
|
+ vpxor (%rax), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm2, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor (%rcx), %ymm1, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm11, %ymm11
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm6, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm7, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm8, %ymm13
|
|
|
+ vpxor -96(%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 416(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 32(%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rcx)
|
|
|
+ vmovdqu %ymm3, 32(%rax)
|
|
|
+ vmovdqu %ymm4, -96(%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor (%rax), %ymm8, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm9, %ymm11
|
|
|
+ vpxor (%rdi), %ymm5, %ymm12
|
|
|
+ vpxor (%rcx), %ymm6, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rax)
|
|
|
+ vmovdqu %ymm1, 128(%rdi)
|
|
|
+ vmovdqu %ymm2, (%rdi)
|
|
|
+ vmovdqu %ymm3, (%rcx)
|
|
|
+ vmovdqu %ymm4, 128(%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor 128(%rcx), %ymm6, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm7, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm8, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm9, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rcx)
|
|
|
+ vmovdqu %ymm1, 96(%rax)
|
|
|
+ vmovdqu %ymm2, -32(%rax)
|
|
|
+ vmovdqu %ymm3, 96(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor 64(%rdi), %ymm9, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm5, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm6, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm7, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rdi)
|
|
|
+ vmovdqu %ymm1, -64(%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rcx)
|
|
|
+ vmovdqu %ymm3, -32(%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor -64(%rcx), %ymm7, %ymm10
|
|
|
+ vpxor 64(%rax), %ymm8, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm9, %ymm12
|
|
|
+ vpxor -96(%rdi), %ymm5, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rcx)
|
|
|
+ vmovdqu %ymm1, 64(%rax)
|
|
|
+ vmovdqu %ymm2, 32(%rdi)
|
|
|
+ vmovdqu %ymm3, -96(%rdi)
|
|
|
+ vmovdqu %ymm4, 64(%rcx)
|
|
|
+ # Round 14
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor (%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -64(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor (%rax), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -96(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor (%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm10, %ymm10
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm6, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm7, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm8, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 448(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 128(%rdi)
|
|
|
+ vmovdqu %ymm2, -32(%rax)
|
|
|
+ vmovdqu %ymm3, -32(%rcx)
|
|
|
+ vmovdqu %ymm4, 64(%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor 32(%rax), %ymm8, %ymm10
|
|
|
+ vpxor 128(%rax), %ymm9, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm5, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm6, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rax)
|
|
|
+ vmovdqu %ymm1, 128(%rax)
|
|
|
+ vmovdqu %ymm2, 128(%rcx)
|
|
|
+ vmovdqu %ymm3, -64(%rdi)
|
|
|
+ vmovdqu %ymm4, 32(%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor 32(%rcx), %ymm6, %ymm10
|
|
|
+ vpxor (%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm8, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm9, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rcx)
|
|
|
+ vmovdqu %ymm1, (%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rdi)
|
|
|
+ vmovdqu %ymm3, -64(%rax)
|
|
|
+ vmovdqu %ymm4, -64(%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor -96(%rax), %ymm9, %ymm10
|
|
|
+ vpxor (%rax), %ymm5, %ymm11
|
|
|
+ vpxor 96(%rax), %ymm6, %ymm12
|
|
|
+ vpxor 96(%rcx), %ymm7, %ymm13
|
|
|
+ vpxor -96(%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rax)
|
|
|
+ vmovdqu %ymm1, (%rax)
|
|
|
+ vmovdqu %ymm2, 96(%rax)
|
|
|
+ vmovdqu %ymm3, 96(%rcx)
|
|
|
+ vmovdqu %ymm4, -96(%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor -96(%rcx), %ymm7, %ymm10
|
|
|
+ vpxor (%rcx), %ymm8, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm9, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm5, %ymm13
|
|
|
+ vpxor 64(%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rcx)
|
|
|
+ vmovdqu %ymm1, (%rcx)
|
|
|
+ vmovdqu %ymm2, -32(%rdi)
|
|
|
+ vmovdqu %ymm3, 64(%rdi)
|
|
|
+ vmovdqu %ymm4, 64(%rax)
|
|
|
+ # Round 15
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -64(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor (%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor (%rax), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm12, %ymm12
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 128(%rax), %ymm6, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm7, %ymm12
|
|
|
+ vpxor 96(%rcx), %ymm8, %ymm13
|
|
|
+ vpxor 64(%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 480(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 128(%rax)
|
|
|
+ vmovdqu %ymm2, 96(%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rcx)
|
|
|
+ vmovdqu %ymm4, 64(%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor -32(%rcx), %ymm8, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm9, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm5, %ymm12
|
|
|
+ vpxor (%rax), %ymm6, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rcx)
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, 32(%rcx)
|
|
|
+ vmovdqu %ymm3, (%rax)
|
|
|
+ vmovdqu %ymm4, -32(%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor 128(%rdi), %ymm6, %ymm10
|
|
|
+ vpxor 128(%rcx), %ymm7, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm8, %ymm12
|
|
|
+ vpxor -96(%rdi), %ymm9, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rdi)
|
|
|
+ vmovdqu %ymm1, 128(%rcx)
|
|
|
+ vmovdqu %ymm2, -64(%rax)
|
|
|
+ vmovdqu %ymm3, -96(%rdi)
|
|
|
+ vmovdqu %ymm4, -96(%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor 64(%rcx), %ymm9, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm5, %ymm11
|
|
|
+ vpxor (%rdi), %ymm6, %ymm12
|
|
|
+ vpxor 96(%rax), %ymm7, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rcx)
|
|
|
+ vmovdqu %ymm1, 32(%rax)
|
|
|
+ vmovdqu %ymm2, (%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rax)
|
|
|
+ vmovdqu %ymm4, 64(%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor -32(%rax), %ymm7, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm8, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm9, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm5, %ymm13
|
|
|
+ vpxor (%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rax)
|
|
|
+ vmovdqu %ymm1, -64(%rdi)
|
|
|
+ vmovdqu %ymm2, -64(%rcx)
|
|
|
+ vmovdqu %ymm3, -96(%rax)
|
|
|
+ vmovdqu %ymm4, (%rcx)
|
|
|
+ # Round 16
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor (%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm12, %ymm12
|
|
|
+ vpxor (%rax), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm11, %ymm11
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm6, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm7, %ymm12
|
|
|
+ vpxor 96(%rax), %ymm8, %ymm13
|
|
|
+ vpxor (%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 512(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, -64(%rax)
|
|
|
+ vmovdqu %ymm3, 96(%rax)
|
|
|
+ vmovdqu %ymm4, (%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor 96(%rcx), %ymm8, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm9, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm5, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm6, %ymm13
|
|
|
+ vpxor -64(%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rcx)
|
|
|
+ vmovdqu %ymm1, -32(%rdi)
|
|
|
+ vmovdqu %ymm2, 128(%rdi)
|
|
|
+ vmovdqu %ymm3, 32(%rax)
|
|
|
+ vmovdqu %ymm4, -64(%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor 128(%rax), %ymm6, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm7, %ymm11
|
|
|
+ vpxor -96(%rdi), %ymm8, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm9, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rax)
|
|
|
+ vmovdqu %ymm1, 32(%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rdi)
|
|
|
+ vmovdqu %ymm3, 64(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor 64(%rax), %ymm9, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm5, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm6, %ymm12
|
|
|
+ vpxor (%rdi), %ymm7, %ymm13
|
|
|
+ vpxor -96(%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rax)
|
|
|
+ vmovdqu %ymm1, -32(%rcx)
|
|
|
+ vmovdqu %ymm2, 128(%rcx)
|
|
|
+ vmovdqu %ymm3, (%rdi)
|
|
|
+ vmovdqu %ymm4, -96(%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor 96(%rdi), %ymm7, %ymm10
|
|
|
+ vpxor (%rax), %ymm8, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm9, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm5, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rdi)
|
|
|
+ vmovdqu %ymm1, (%rax)
|
|
|
+ vmovdqu %ymm2, -96(%rcx)
|
|
|
+ vmovdqu %ymm3, 64(%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rdi)
|
|
|
+ # Round 17
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor (%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm4, %ymm14
|
|
|
+ vpxor -64(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 32(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor (%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 128(%rcx), %ymm12, %ymm12
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm6, %ymm11
|
|
|
+ vpxor -96(%rdi), %ymm7, %ymm12
|
|
|
+ vpxor (%rdi), %ymm8, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 544(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -32(%rdi)
|
|
|
+ vmovdqu %ymm2, -96(%rdi)
|
|
|
+ vmovdqu %ymm3, (%rdi)
|
|
|
+ vmovdqu %ymm4, -64(%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor 96(%rax), %ymm8, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm9, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm5, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm6, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rax)
|
|
|
+ vmovdqu %ymm1, -64(%rcx)
|
|
|
+ vmovdqu %ymm2, 128(%rax)
|
|
|
+ vmovdqu %ymm3, -32(%rcx)
|
|
|
+ vmovdqu %ymm4, -96(%rcx)
|
|
|
+ # Row 2
|
|
|
+ vpxor 32(%rdi), %ymm6, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm8, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm9, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rdi)
|
|
|
+ vmovdqu %ymm1, 128(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, -96(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor (%rcx), %ymm9, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm5, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm6, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm7, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rcx)
|
|
|
+ vmovdqu %ymm1, 96(%rcx)
|
|
|
+ vmovdqu %ymm2, 32(%rcx)
|
|
|
+ vmovdqu %ymm3, 128(%rcx)
|
|
|
+ vmovdqu %ymm4, 64(%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor -64(%rax), %ymm7, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm8, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm9, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm5, %ymm13
|
|
|
+ vpxor (%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rax)
|
|
|
+ vmovdqu %ymm1, 32(%rax)
|
|
|
+ vmovdqu %ymm2, -32(%rax)
|
|
|
+ vmovdqu %ymm3, 64(%rax)
|
|
|
+ vmovdqu %ymm4, (%rax)
|
|
|
+ # Round 18
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -32(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor (%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor 96(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 128(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor -64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor (%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rcx), %ymm13, %ymm13
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm6, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm7, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm8, %ymm13
|
|
|
+ vpxor (%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 576(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -64(%rcx)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, 128(%rcx)
|
|
|
+ vmovdqu %ymm4, (%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor (%rdi), %ymm8, %ymm10
|
|
|
+ vpxor -96(%rcx), %ymm9, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm5, %ymm12
|
|
|
+ vpxor 96(%rcx), %ymm6, %ymm13
|
|
|
+ vpxor -32(%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rdi)
|
|
|
+ vmovdqu %ymm1, -96(%rcx)
|
|
|
+ vmovdqu %ymm2, 32(%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rcx)
|
|
|
+ vmovdqu %ymm4, -32(%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor -32(%rdi), %ymm6, %ymm10
|
|
|
+ vpxor 128(%rax), %ymm7, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm8, %ymm12
|
|
|
+ vpxor 64(%rcx), %ymm9, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rdi)
|
|
|
+ vmovdqu %ymm1, 128(%rax)
|
|
|
+ vmovdqu %ymm2, -96(%rax)
|
|
|
+ vmovdqu %ymm3, 64(%rcx)
|
|
|
+ vmovdqu %ymm4, -64(%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor -64(%rdi), %ymm9, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm5, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm6, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm7, %ymm13
|
|
|
+ vpxor 64(%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rdi)
|
|
|
+ vmovdqu %ymm1, 96(%rax)
|
|
|
+ vmovdqu %ymm2, 128(%rdi)
|
|
|
+ vmovdqu %ymm3, 32(%rcx)
|
|
|
+ vmovdqu %ymm4, 64(%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor -96(%rdi), %ymm7, %ymm10
|
|
|
+ vpxor -32(%rcx), %ymm8, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm9, %ymm12
|
|
|
+ vpxor (%rcx), %ymm5, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rdi)
|
|
|
+ vmovdqu %ymm1, -32(%rcx)
|
|
|
+ vmovdqu %ymm2, 96(%rdi)
|
|
|
+ vmovdqu %ymm3, (%rcx)
|
|
|
+ vmovdqu %ymm4, 32(%rax)
|
|
|
+ # Round 19
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor (%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm12, %ymm12
|
|
|
+ vpxor -96(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -64(%rax), %ymm4, %ymm14
|
|
|
+ vpxor -32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor (%rax), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rax), %ymm1, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rcx), %ymm3, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm13, %ymm13
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -96(%rcx), %ymm6, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm7, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm8, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 608(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -96(%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rax)
|
|
|
+ vmovdqu %ymm3, 32(%rcx)
|
|
|
+ vmovdqu %ymm4, 32(%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor 128(%rcx), %ymm8, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm9, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm5, %ymm12
|
|
|
+ vpxor 96(%rax), %ymm6, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rcx)
|
|
|
+ vmovdqu %ymm1, -32(%rax)
|
|
|
+ vmovdqu %ymm2, -32(%rdi)
|
|
|
+ vmovdqu %ymm3, 96(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor -64(%rcx), %ymm6, %ymm10
|
|
|
+ vpxor 32(%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 64(%rcx), %ymm8, %ymm12
|
|
|
+ vpxor 64(%rax), %ymm9, %ymm13
|
|
|
+ vpxor -96(%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rcx)
|
|
|
+ vmovdqu %ymm1, 32(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rcx)
|
|
|
+ vmovdqu %ymm3, 64(%rax)
|
|
|
+ vmovdqu %ymm4, -96(%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor (%rax), %ymm9, %ymm10
|
|
|
+ vpxor (%rdi), %ymm5, %ymm11
|
|
|
+ vpxor 128(%rax), %ymm6, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm7, %ymm13
|
|
|
+ vpxor (%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rax)
|
|
|
+ vmovdqu %ymm1, (%rdi)
|
|
|
+ vmovdqu %ymm2, 128(%rax)
|
|
|
+ vmovdqu %ymm3, 128(%rdi)
|
|
|
+ vmovdqu %ymm4, (%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor 64(%rdi), %ymm7, %ymm10
|
|
|
+ vpxor 96(%rcx), %ymm8, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm9, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm5, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rdi)
|
|
|
+ vmovdqu %ymm1, 96(%rcx)
|
|
|
+ vmovdqu %ymm2, -64(%rax)
|
|
|
+ vmovdqu %ymm3, -64(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rcx)
|
|
|
+ # Round 20
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -32(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor (%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -96(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -32(%rax), %ymm11, %ymm11
|
|
|
+ vpxor (%rax), %ymm10, %ymm10
|
|
|
+ vpxor 32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm13, %ymm13
|
|
|
+ vpxor 128(%rax), %ymm12, %ymm12
|
|
|
+ vpxor -96(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor (%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 32(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm10, %ymm10
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm6, %ymm11
|
|
|
+ vpxor 64(%rcx), %ymm7, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm8, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 640(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -32(%rax)
|
|
|
+ vmovdqu %ymm2, 64(%rcx)
|
|
|
+ vmovdqu %ymm3, 128(%rdi)
|
|
|
+ vmovdqu %ymm4, -32(%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor 32(%rcx), %ymm8, %ymm10
|
|
|
+ vpxor 96(%rdi), %ymm9, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm5, %ymm12
|
|
|
+ vpxor (%rdi), %ymm6, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rcx)
|
|
|
+ vmovdqu %ymm1, 96(%rdi)
|
|
|
+ vmovdqu %ymm2, -64(%rcx)
|
|
|
+ vmovdqu %ymm3, (%rdi)
|
|
|
+ vmovdqu %ymm4, -64(%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor -96(%rcx), %ymm6, %ymm10
|
|
|
+ vpxor -32(%rdi), %ymm7, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm8, %ymm12
|
|
|
+ vpxor (%rcx), %ymm9, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rcx)
|
|
|
+ vmovdqu %ymm1, -32(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rax)
|
|
|
+ vmovdqu %ymm3, (%rcx)
|
|
|
+ vmovdqu %ymm4, 64(%rdi)
|
|
|
+ # Row 3
|
|
|
+ vpxor 32(%rax), %ymm9, %ymm10
|
|
|
+ vpxor 128(%rcx), %ymm5, %ymm11
|
|
|
+ vpxor 32(%rdi), %ymm6, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm7, %ymm13
|
|
|
+ vpxor -64(%rdi), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rax)
|
|
|
+ vmovdqu %ymm1, 128(%rcx)
|
|
|
+ vmovdqu %ymm2, 32(%rdi)
|
|
|
+ vmovdqu %ymm3, 128(%rax)
|
|
|
+ vmovdqu %ymm4, -64(%rdi)
|
|
|
+ # Row 4
|
|
|
+ vpxor -96(%rax), %ymm7, %ymm10
|
|
|
+ vpxor 96(%rax), %ymm8, %ymm11
|
|
|
+ vpxor -96(%rdi), %ymm9, %ymm12
|
|
|
+ vpxor (%rax), %ymm5, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -96(%rax)
|
|
|
+ vmovdqu %ymm1, 96(%rax)
|
|
|
+ vmovdqu %ymm2, -96(%rdi)
|
|
|
+ vmovdqu %ymm3, (%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rcx)
|
|
|
+ # Round 21
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -64(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -32(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor (%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 64(%rdi), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor -64(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -32(%rax), %ymm11, %ymm11
|
|
|
+ vpxor 32(%rax), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor (%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor 64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm11, %ymm11
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor 96(%rdi), %ymm6, %ymm11
|
|
|
+ vpxor 64(%rax), %ymm7, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm8, %ymm13
|
|
|
+ vpxor 96(%rcx), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 672(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, 96(%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rax)
|
|
|
+ vmovdqu %ymm3, 128(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rcx)
|
|
|
+ # Row 1
|
|
|
+ vpxor 128(%rdi), %ymm8, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm9, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm5, %ymm12
|
|
|
+ vpxor 128(%rcx), %ymm6, %ymm13
|
|
|
+ vpxor -96(%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rdi)
|
|
|
+ vmovdqu %ymm1, -64(%rax)
|
|
|
+ vmovdqu %ymm2, -96(%rcx)
|
|
|
+ vmovdqu %ymm3, 128(%rcx)
|
|
|
+ vmovdqu %ymm4, -96(%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor -32(%rax), %ymm6, %ymm10
|
|
|
+ vpxor -64(%rcx), %ymm7, %ymm11
|
|
|
+ vpxor (%rcx), %ymm8, %ymm12
|
|
|
+ vpxor -64(%rdi), %ymm9, %ymm13
|
|
|
+ vpxor -96(%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rax)
|
|
|
+ vmovdqu %ymm1, -64(%rcx)
|
|
|
+ vmovdqu %ymm2, (%rcx)
|
|
|
+ vmovdqu %ymm3, -64(%rdi)
|
|
|
+ vmovdqu %ymm4, -96(%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor -32(%rcx), %ymm9, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm5, %ymm11
|
|
|
+ vpxor -32(%rdi), %ymm6, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm7, %ymm13
|
|
|
+ vpxor (%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -32(%rcx)
|
|
|
+ vmovdqu %ymm1, 32(%rcx)
|
|
|
+ vmovdqu %ymm2, -32(%rdi)
|
|
|
+ vmovdqu %ymm3, 32(%rdi)
|
|
|
+ vmovdqu %ymm4, (%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor 64(%rcx), %ymm7, %ymm10
|
|
|
+ vpxor (%rdi), %ymm8, %ymm11
|
|
|
+ vpxor 64(%rdi), %ymm9, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm5, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rcx)
|
|
|
+ vmovdqu %ymm1, (%rdi)
|
|
|
+ vmovdqu %ymm2, 64(%rdi)
|
|
|
+ vmovdqu %ymm3, 32(%rax)
|
|
|
+ vmovdqu %ymm4, 96(%rax)
|
|
|
+ # Round 22
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor -64(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor -32(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 96(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor 128(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor -96(%rax), %ymm14, %ymm14
|
|
|
+ vpxor -64(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm10, %ymm10
|
|
|
+ vpxor (%rax), %ymm14, %ymm14
|
|
|
+ vpxor 64(%rax), %ymm12, %ymm12
|
|
|
+ vpxor 128(%rax), %ymm13, %ymm13
|
|
|
+ vpxor -96(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor -32(%rcx), %ymm10, %ymm10
|
|
|
+ vpxor (%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor 96(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rcx), %ymm13, %ymm13
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -64(%rax), %ymm6, %ymm11
|
|
|
+ vpxor (%rcx), %ymm7, %ymm12
|
|
|
+ vpxor 32(%rdi), %ymm8, %ymm13
|
|
|
+ vpxor 96(%rax), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 704(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -64(%rax)
|
|
|
+ vmovdqu %ymm2, (%rcx)
|
|
|
+ vmovdqu %ymm3, 32(%rdi)
|
|
|
+ vmovdqu %ymm4, 96(%rax)
|
|
|
+ # Row 1
|
|
|
+ vpxor 128(%rax), %ymm8, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm9, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm5, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm6, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 128(%rax)
|
|
|
+ vmovdqu %ymm1, -96(%rdi)
|
|
|
+ vmovdqu %ymm2, -32(%rax)
|
|
|
+ vmovdqu %ymm3, 32(%rcx)
|
|
|
+ vmovdqu %ymm4, 64(%rdi)
|
|
|
+ # Row 2
|
|
|
+ vpxor 96(%rdi), %ymm6, %ymm10
|
|
|
+ vpxor -96(%rcx), %ymm7, %ymm11
|
|
|
+ vpxor -64(%rdi), %ymm8, %ymm12
|
|
|
+ vpxor (%rax), %ymm9, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rdi)
|
|
|
+ vmovdqu %ymm1, -96(%rcx)
|
|
|
+ vmovdqu %ymm2, -64(%rdi)
|
|
|
+ vmovdqu %ymm3, (%rax)
|
|
|
+ vmovdqu %ymm4, 64(%rcx)
|
|
|
+ # Row 3
|
|
|
+ vpxor 96(%rcx), %ymm9, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm5, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm6, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm7, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rcx)
|
|
|
+ vmovdqu %ymm1, 128(%rdi)
|
|
|
+ vmovdqu %ymm2, -64(%rcx)
|
|
|
+ vmovdqu %ymm3, -32(%rdi)
|
|
|
+ vmovdqu %ymm4, 32(%rax)
|
|
|
+ # Row 4
|
|
|
+ vpxor 64(%rax), %ymm7, %ymm10
|
|
|
+ vpxor 128(%rcx), %ymm8, %ymm11
|
|
|
+ vpxor -96(%rax), %ymm9, %ymm12
|
|
|
+ vpxor -32(%rcx), %ymm5, %ymm13
|
|
|
+ vpxor (%rdi), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 64(%rax)
|
|
|
+ vmovdqu %ymm1, 128(%rcx)
|
|
|
+ vmovdqu %ymm2, -96(%rax)
|
|
|
+ vmovdqu %ymm3, -32(%rcx)
|
|
|
+ vmovdqu %ymm4, (%rdi)
|
|
|
+ # Round 23
|
|
|
+ # Calc b[0..4]
|
|
|
+ vpxor %ymm15, %ymm0, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm1, %ymm11
|
|
|
+ vpxor -64(%rdi), %ymm2, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm3, %ymm13
|
|
|
+ vpxor 32(%rdi), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rdi), %ymm4, %ymm14
|
|
|
+ vpxor 96(%rdi), %ymm10, %ymm10
|
|
|
+ vpxor 128(%rdi), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rax), %ymm11, %ymm11
|
|
|
+ vpxor -32(%rax), %ymm12, %ymm12
|
|
|
+ vpxor (%rax), %ymm13, %ymm13
|
|
|
+ vpxor 32(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rax), %ymm14, %ymm14
|
|
|
+ vpxor 128(%rax), %ymm10, %ymm10
|
|
|
+ vpxor -96(%rcx), %ymm11, %ymm11
|
|
|
+ vpxor -64(%rcx), %ymm12, %ymm12
|
|
|
+ vpxor (%rcx), %ymm12, %ymm12
|
|
|
+ vpxor 32(%rcx), %ymm13, %ymm13
|
|
|
+ vpxor 64(%rcx), %ymm14, %ymm14
|
|
|
+ vpxor 96(%rcx), %ymm10, %ymm10
|
|
|
+ # Calc t[0..4]
|
|
|
+ vpsrlq $63, %ymm11, %ymm0
|
|
|
+ vpsrlq $63, %ymm12, %ymm1
|
|
|
+ vpsrlq $63, %ymm13, %ymm2
|
|
|
+ vpsrlq $63, %ymm14, %ymm3
|
|
|
+ vpsrlq $63, %ymm10, %ymm4
|
|
|
+ vpaddq %ymm11, %ymm11, %ymm5
|
|
|
+ vpaddq %ymm12, %ymm12, %ymm6
|
|
|
+ vpaddq %ymm13, %ymm13, %ymm7
|
|
|
+ vpaddq %ymm14, %ymm14, %ymm8
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm9
|
|
|
+ vpor %ymm0, %ymm5, %ymm5
|
|
|
+ vpor %ymm1, %ymm6, %ymm6
|
|
|
+ vpor %ymm2, %ymm7, %ymm7
|
|
|
+ vpor %ymm3, %ymm8, %ymm8
|
|
|
+ vpor %ymm4, %ymm9, %ymm9
|
|
|
+ vpxor %ymm14, %ymm5, %ymm5
|
|
|
+ vpxor %ymm10, %ymm6, %ymm6
|
|
|
+ vpxor %ymm11, %ymm7, %ymm7
|
|
|
+ vpxor %ymm12, %ymm8, %ymm8
|
|
|
+ vpxor %ymm13, %ymm9, %ymm9
|
|
|
+ # Row Mix
|
|
|
+ # Row 0
|
|
|
+ vpxor %ymm15, %ymm5, %ymm10
|
|
|
+ vpxor -96(%rdi), %ymm6, %ymm11
|
|
|
+ vpxor -64(%rdi), %ymm7, %ymm12
|
|
|
+ vpxor -32(%rdi), %ymm8, %ymm13
|
|
|
+ vpxor (%rdi), %ymm9, %ymm14
|
|
|
+ vpsrlq $20, %ymm11, %ymm0
|
|
|
+ vpsrlq $21, %ymm12, %ymm1
|
|
|
+ vpsrlq $43, %ymm13, %ymm2
|
|
|
+ vpsrlq $50, %ymm14, %ymm3
|
|
|
+ vpsllq $44, %ymm11, %ymm11
|
|
|
+ vpsllq $43, %ymm12, %ymm12
|
|
|
+ vpsllq $21, %ymm13, %ymm13
|
|
|
+ vpsllq $14, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm11, %ymm11
|
|
|
+ vpor %ymm1, %ymm12, %ymm12
|
|
|
+ vpor %ymm2, %ymm13, %ymm13
|
|
|
+ vpor %ymm3, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm15
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm15, %ymm15
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ # XOR in constant
|
|
|
+ vpxor 736(%rdx), %ymm15, %ymm15
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm1, -96(%rdi)
|
|
|
+ vmovdqu %ymm2, -64(%rdi)
|
|
|
+ vmovdqu %ymm3, -32(%rdi)
|
|
|
+ vmovdqu %ymm4, (%rdi)
|
|
|
+ # Row 1
|
|
|
+ vpxor 32(%rdi), %ymm8, %ymm10
|
|
|
+ vpxor 64(%rdi), %ymm9, %ymm11
|
|
|
+ vpxor 96(%rdi), %ymm5, %ymm12
|
|
|
+ vpxor 128(%rdi), %ymm6, %ymm13
|
|
|
+ vpxor -96(%rax), %ymm7, %ymm14
|
|
|
+ vpsrlq $36, %ymm10, %ymm0
|
|
|
+ vpsrlq $44, %ymm11, %ymm1
|
|
|
+ vpsrlq $61, %ymm12, %ymm2
|
|
|
+ vpsrlq $19, %ymm13, %ymm3
|
|
|
+ vpsrlq $3, %ymm14, %ymm4
|
|
|
+ vpsllq $28, %ymm10, %ymm10
|
|
|
+ vpsllq $20, %ymm11, %ymm11
|
|
|
+ vpsllq $3, %ymm12, %ymm12
|
|
|
+ vpsllq $45, %ymm13, %ymm13
|
|
|
+ vpsllq $61, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 32(%rdi)
|
|
|
+ vmovdqu %ymm1, 64(%rdi)
|
|
|
+ vmovdqu %ymm2, 96(%rdi)
|
|
|
+ vmovdqu %ymm3, 128(%rdi)
|
|
|
+ vmovdqu %ymm4, -96(%rax)
|
|
|
+ # Row 2
|
|
|
+ vpxor -64(%rax), %ymm6, %ymm10
|
|
|
+ vpxor -32(%rax), %ymm7, %ymm11
|
|
|
+ vpxor (%rax), %ymm8, %ymm12
|
|
|
+ vpxor 32(%rax), %ymm9, %ymm13
|
|
|
+ vpxor 64(%rax), %ymm5, %ymm14
|
|
|
+ vpsrlq $63, %ymm10, %ymm0
|
|
|
+ vpsrlq $58, %ymm11, %ymm1
|
|
|
+ vpsrlq $39, %ymm12, %ymm2
|
|
|
+ vpsrlq $56, %ymm13, %ymm3
|
|
|
+ vpsrlq $46, %ymm14, %ymm4
|
|
|
+ vpaddq %ymm10, %ymm10, %ymm10
|
|
|
+ vpsllq $6, %ymm11, %ymm11
|
|
|
+ vpsllq $25, %ymm12, %ymm12
|
|
|
+ vpsllq $8, %ymm13, %ymm13
|
|
|
+ vpsllq $18, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, -64(%rax)
|
|
|
+ vmovdqu %ymm1, -32(%rax)
|
|
|
+ vmovdqu %ymm2, (%rax)
|
|
|
+ vmovdqu %ymm3, 32(%rax)
|
|
|
+ vmovdqu %ymm4, 64(%rax)
|
|
|
+ # Row 3
|
|
|
+ vpxor 96(%rax), %ymm9, %ymm10
|
|
|
+ vpxor 128(%rax), %ymm5, %ymm11
|
|
|
+ vpxor -96(%rcx), %ymm6, %ymm12
|
|
|
+ vpxor -64(%rcx), %ymm7, %ymm13
|
|
|
+ vpxor -32(%rcx), %ymm8, %ymm14
|
|
|
+ vpsrlq $37, %ymm10, %ymm0
|
|
|
+ vpsrlq $28, %ymm11, %ymm1
|
|
|
+ vpsrlq $54, %ymm12, %ymm2
|
|
|
+ vpsrlq $49, %ymm13, %ymm3
|
|
|
+ vpsrlq $8, %ymm14, %ymm4
|
|
|
+ vpsllq $27, %ymm10, %ymm10
|
|
|
+ vpsllq $36, %ymm11, %ymm11
|
|
|
+ vpsllq $10, %ymm12, %ymm12
|
|
|
+ vpsllq $15, %ymm13, %ymm13
|
|
|
+ vpsllq $56, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, 96(%rax)
|
|
|
+ vmovdqu %ymm1, 128(%rax)
|
|
|
+ vmovdqu %ymm2, -96(%rcx)
|
|
|
+ vmovdqu %ymm3, -64(%rcx)
|
|
|
+ vmovdqu %ymm4, -32(%rcx)
|
|
|
+ # Row 4
|
|
|
+ vpxor (%rcx), %ymm7, %ymm10
|
|
|
+ vpxor 32(%rcx), %ymm8, %ymm11
|
|
|
+ vpxor 64(%rcx), %ymm9, %ymm12
|
|
|
+ vpxor 96(%rcx), %ymm5, %ymm13
|
|
|
+ vpxor 128(%rcx), %ymm6, %ymm14
|
|
|
+ vpsrlq $2, %ymm10, %ymm0
|
|
|
+ vpsrlq $9, %ymm11, %ymm1
|
|
|
+ vpsrlq $25, %ymm12, %ymm2
|
|
|
+ vpsrlq $23, %ymm13, %ymm3
|
|
|
+ vpsrlq $62, %ymm14, %ymm4
|
|
|
+ vpsllq $62, %ymm10, %ymm10
|
|
|
+ vpsllq $55, %ymm11, %ymm11
|
|
|
+ vpsllq $39, %ymm12, %ymm12
|
|
|
+ vpsllq $41, %ymm13, %ymm13
|
|
|
+ vpsllq $2, %ymm14, %ymm14
|
|
|
+ vpor %ymm0, %ymm10, %ymm10
|
|
|
+ vpor %ymm1, %ymm11, %ymm11
|
|
|
+ vpor %ymm2, %ymm12, %ymm12
|
|
|
+ vpor %ymm3, %ymm13, %ymm13
|
|
|
+ vpor %ymm4, %ymm14, %ymm14
|
|
|
+ vpandn %ymm12, %ymm11, %ymm0
|
|
|
+ vpandn %ymm13, %ymm12, %ymm1
|
|
|
+ vpandn %ymm14, %ymm13, %ymm2
|
|
|
+ vpandn %ymm10, %ymm14, %ymm3
|
|
|
+ vpandn %ymm11, %ymm10, %ymm4
|
|
|
+ vpxor %ymm10, %ymm0, %ymm0
|
|
|
+ vpxor %ymm11, %ymm1, %ymm1
|
|
|
+ vpxor %ymm12, %ymm2, %ymm2
|
|
|
+ vpxor %ymm13, %ymm3, %ymm3
|
|
|
+ vpxor %ymm14, %ymm4, %ymm4
|
|
|
+ vmovdqu %ymm0, (%rcx)
|
|
|
+ vmovdqu %ymm1, 32(%rcx)
|
|
|
+ vmovdqu %ymm2, 64(%rcx)
|
|
|
+ vmovdqu %ymm3, 96(%rcx)
|
|
|
+ vmovdqu %ymm4, 128(%rcx)
|
|
|
+ subq $0x80, %rdi
|
|
|
+ vmovdqu %ymm15, (%rdi)
|
|
|
+ vzeroupper
|
|
|
+ repz retq
|
|
|
+#ifndef __APPLE__
|
|
|
+.size kyber_sha3_256_blocksx4_seed_avx2,.-kyber_sha3_256_blocksx4_seed_avx2
|
|
|
+#endif /* __APPLE__ */
|
|
|
+#endif /* HAVE_INTEL_AVX2 */
|
|
|
+#endif /* WOLFSSL_WC_KYBER */
|
|
|
|
|
|
+#if defined(__linux__) && defined(__ELF__)
|
|
|
+.section .note.GNU-stack,"",%progbits
|
|
|
+#endif
|