mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-07-09 17:10:50 +02:00
27898 lines
908 KiB
ArmAsm
27898 lines
908 KiB
ArmAsm
/* wc_mlkem_asm.S */
|
|
/*
|
|
* Copyright (C) 2006-2025 wolfSSL Inc.
|
|
*
|
|
* This file is part of wolfSSL.
|
|
*
|
|
* wolfSSL is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* wolfSSL is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
|
*/
|
|
|
|
#ifdef WOLFSSL_USER_SETTINGS
|
|
#ifdef WOLFSSL_USER_SETTINGS_ASM
|
|
/*
|
|
* user_settings_asm.h is a file generated by the script user_settings_asm.sh.
|
|
* The script takes in a user_settings.h and produces user_settings_asm.h, which
|
|
* is a stripped down version of user_settings.h containing only preprocessor
|
|
* directives. This makes the header safe to include in assembly (.S) files.
|
|
*/
|
|
#include "user_settings_asm.h"
|
|
#else
|
|
/*
|
|
* Note: if user_settings.h contains any C code (e.g. a typedef or function
|
|
* prototype), including it here in an assembly (.S) file will cause an
|
|
* assembler failure. See user_settings_asm.h above.
|
|
*/
|
|
#include "user_settings.h"
|
|
#endif /* WOLFSSL_USER_SETTINGS_ASM */
|
|
#endif /* WOLFSSL_USER_SETTINGS */
|
|
|
|
#ifndef HAVE_INTEL_AVX1
|
|
#define HAVE_INTEL_AVX1
|
|
#endif /* HAVE_INTEL_AVX1 */
|
|
#ifndef NO_AVX2_SUPPORT
|
|
#ifndef HAVE_INTEL_AVX2
|
|
#define HAVE_INTEL_AVX2
|
|
#endif /* HAVE_INTEL_AVX2 */
|
|
#endif /* NO_AVX2_SUPPORT */
|
|
|
|
#ifdef WOLFSSL_WC_MLKEM
|
|
#ifdef HAVE_INTEL_AVX2
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.align 16
|
|
#else
|
|
.p2align 4
|
|
#endif /* __APPLE__ */
|
|
mlkem_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__ */
|
|
mlkem_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__ */
|
|
mlkem_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__ */
|
|
mlkem_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__ */
|
|
mlkem_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_mlkem_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_mlkem_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_mlkem_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 mlkem_keygen_avx2
|
|
.type mlkem_keygen_avx2,@function
|
|
.align 16
|
|
mlkem_keygen_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_keygen_avx2
|
|
.p2align 4
|
|
_mlkem_keygen_avx2:
|
|
#endif /* __APPLE__ */
|
|
pushq %r12
|
|
vmovdqu mlkem_q(%rip), %ymm14
|
|
vmovdqu mlkem_v(%rip), %ymm15
|
|
movq %rdi, %r11
|
|
movslq %r8d, %r9
|
|
movq %rdi, %r10
|
|
L_mlkem_keygen_avx2_priv:
|
|
# ntt
|
|
leaq L_mlkem_avx2_zetas(%rip), %r12
|
|
vmovdqu (%r12), %ymm10
|
|
vmovdqu 32(%r12), %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(%r12), %ymm10
|
|
vmovdqu 96(%r12), %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(%r12), %ymm10
|
|
vmovdqu 160(%r12), %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(%r12), %ymm10
|
|
vmovdqu 224(%r12), %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(%r12), %ymm10
|
|
vmovdqu 288(%r12), %ymm12
|
|
vmovdqu 320(%r12), %ymm11
|
|
vmovdqu 352(%r12), %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(%r12), %ymm10
|
|
vmovdqu 416(%r12), %ymm12
|
|
vmovdqu 448(%r12), %ymm11
|
|
vmovdqu 480(%r12), %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(%r12), %ymm10
|
|
vperm2i128 $49, %ymm1, %ymm0, %ymm1
|
|
vmovdqu 544(%r12), %ymm12
|
|
vperm2i128 $32, %ymm3, %ymm2, %ymm9
|
|
vmovdqu 576(%r12), %ymm11
|
|
vperm2i128 $49, %ymm3, %ymm2, %ymm3
|
|
vmovdqu 608(%r12), %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(%r12), %ymm10
|
|
vmovdqu 672(%r12), %ymm12
|
|
vmovdqu 704(%r12), %ymm11
|
|
vmovdqu 736(%r12), %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(%r12), %ymm10
|
|
vperm2i128 $49, %ymm5, %ymm4, %ymm5
|
|
vmovdqu 800(%r12), %ymm12
|
|
vperm2i128 $32, %ymm7, %ymm6, %ymm9
|
|
vmovdqu 832(%r12), %ymm11
|
|
vperm2i128 $49, %ymm7, %ymm6, %ymm7
|
|
vmovdqu 864(%r12), %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(%r12), %ymm10
|
|
vmovdqu 928(%r12), %ymm12
|
|
vmovdqu 960(%r12), %ymm11
|
|
vmovdqu 992(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1056(%r12), %ymm12
|
|
vmovdqu 1088(%r12), %ymm11
|
|
vmovdqu 1120(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1184(%r12), %ymm12
|
|
vmovdqu 1216(%r12), %ymm11
|
|
vmovdqu 1248(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1312(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1376(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1440(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1504(%r12), %ymm12
|
|
vmovdqu 1536(%r12), %ymm11
|
|
vmovdqu 1568(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1632(%r12), %ymm12
|
|
vmovdqu 1664(%r12), %ymm11
|
|
vmovdqu 1696(%r12), %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(%r12), %ymm10
|
|
vperm2i128 $49, %ymm1, %ymm0, %ymm1
|
|
vmovdqu 1760(%r12), %ymm12
|
|
vperm2i128 $32, %ymm3, %ymm2, %ymm9
|
|
vmovdqu 1792(%r12), %ymm11
|
|
vperm2i128 $49, %ymm3, %ymm2, %ymm3
|
|
vmovdqu 1824(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1888(%r12), %ymm12
|
|
vmovdqu 1920(%r12), %ymm11
|
|
vmovdqu 1952(%r12), %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(%r12), %ymm10
|
|
vperm2i128 $49, %ymm5, %ymm4, %ymm5
|
|
vmovdqu 2016(%r12), %ymm12
|
|
vperm2i128 $32, %ymm7, %ymm6, %ymm9
|
|
vmovdqu 2048(%r12), %ymm11
|
|
vperm2i128 $49, %ymm7, %ymm6, %ymm7
|
|
vmovdqu 2080(%r12), %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(%r12), %ymm10
|
|
vmovdqu 2144(%r12), %ymm12
|
|
vmovdqu 2176(%r12), %ymm11
|
|
vmovdqu 2208(%r12), %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(%r12), %ymm10
|
|
vmovdqu 2272(%r12), %ymm12
|
|
vmovdqu 2304(%r12), %ymm11
|
|
vmovdqu 2336(%r12), %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(%r12), %ymm10
|
|
vmovdqu 2400(%r12), %ymm12
|
|
vmovdqu 2432(%r12), %ymm11
|
|
vmovdqu 2464(%r12), %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_mlkem_keygen_avx2_priv
|
|
vmovdqu mlkem_qinv(%rip), %ymm13
|
|
movslq %r8d, %rax
|
|
movq %rsi, %r10
|
|
L_mlkem_keygen_avx2_acc:
|
|
# Pointwise acc mont
|
|
movslq %r8d, %r9
|
|
# Base mul mont
|
|
leaq L_mlkem_avx2_zetas_basemul(%rip), %r12
|
|
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 (%r12), %ymm10
|
|
vmovdqu 32(%r12), %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(%r12), %ymm10
|
|
vmovdqu 96(%r12), %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(%r12), %ymm10
|
|
vmovdqu 160(%r12), %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(%r12), %ymm10
|
|
vmovdqu 224(%r12), %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(%r12), %ymm10
|
|
vmovdqu 288(%r12), %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(%r12), %ymm10
|
|
vmovdqu 352(%r12), %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(%r12), %ymm10
|
|
vmovdqu 416(%r12), %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(%r12), %ymm10
|
|
vmovdqu 480(%r12), %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_mlkem_avx2_zetas_basemul(%rip), %r12
|
|
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 (%r12), %ymm10
|
|
vmovdqu 32(%r12), %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(%r12), %ymm10
|
|
vmovdqu 96(%r12), %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(%r12), %ymm10
|
|
vmovdqu 160(%r12), %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(%r12), %ymm10
|
|
vmovdqu 224(%r12), %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(%r12), %ymm10
|
|
vmovdqu 288(%r12), %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(%r12), %ymm10
|
|
vmovdqu 352(%r12), %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(%r12), %ymm10
|
|
vmovdqu 416(%r12), %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(%r12), %ymm10
|
|
vmovdqu 480(%r12), %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_mlkem_avx2_zetas_basemul(%rip), %r12
|
|
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 (%r12), %ymm10
|
|
vmovdqu 32(%r12), %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(%r12), %ymm10
|
|
vmovdqu 96(%r12), %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(%r12), %ymm10
|
|
vmovdqu 160(%r12), %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(%r12), %ymm10
|
|
vmovdqu 224(%r12), %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(%r12), %ymm10
|
|
vmovdqu 288(%r12), %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(%r12), %ymm10
|
|
vmovdqu 352(%r12), %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(%r12), %ymm10
|
|
vmovdqu 416(%r12), %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(%r12), %ymm10
|
|
vmovdqu 480(%r12), %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
|
|
movq %r11, %rdi
|
|
addq $0x200, %r10
|
|
subq $0x01, %rax
|
|
jg L_mlkem_keygen_avx2_acc
|
|
movslq %r8d, %rax
|
|
vmovdqu mlkem_f(%rip), %ymm12
|
|
vmovdqu mlkem_f_qinv(%rip), %ymm13
|
|
movslq %r8d, %rax
|
|
movq %rsi, %r10
|
|
L_mlkem_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_mlkem_keygen_avx2_to_mont
|
|
movslq %r8d, %rax
|
|
L_mlkem_keygen_avx2_to_mont_ntt_err:
|
|
# ntt
|
|
leaq L_mlkem_avx2_zetas(%rip), %r12
|
|
vmovdqu (%r12), %ymm10
|
|
vmovdqu 32(%r12), %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(%r12), %ymm10
|
|
vmovdqu 96(%r12), %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(%r12), %ymm10
|
|
vmovdqu 160(%r12), %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(%r12), %ymm10
|
|
vmovdqu 224(%r12), %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(%r12), %ymm10
|
|
vmovdqu 288(%r12), %ymm12
|
|
vmovdqu 320(%r12), %ymm11
|
|
vmovdqu 352(%r12), %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(%r12), %ymm10
|
|
vmovdqu 416(%r12), %ymm12
|
|
vmovdqu 448(%r12), %ymm11
|
|
vmovdqu 480(%r12), %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(%r12), %ymm10
|
|
vperm2i128 $49, %ymm1, %ymm0, %ymm1
|
|
vmovdqu 544(%r12), %ymm12
|
|
vperm2i128 $32, %ymm3, %ymm2, %ymm9
|
|
vmovdqu 576(%r12), %ymm11
|
|
vperm2i128 $49, %ymm3, %ymm2, %ymm3
|
|
vmovdqu 608(%r12), %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(%r12), %ymm10
|
|
vmovdqu 672(%r12), %ymm12
|
|
vmovdqu 704(%r12), %ymm11
|
|
vmovdqu 736(%r12), %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(%r12), %ymm10
|
|
vperm2i128 $49, %ymm5, %ymm4, %ymm5
|
|
vmovdqu 800(%r12), %ymm12
|
|
vperm2i128 $32, %ymm7, %ymm6, %ymm9
|
|
vmovdqu 832(%r12), %ymm11
|
|
vperm2i128 $49, %ymm7, %ymm6, %ymm7
|
|
vmovdqu 864(%r12), %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(%r12), %ymm10
|
|
vmovdqu 928(%r12), %ymm12
|
|
vmovdqu 960(%r12), %ymm11
|
|
vmovdqu 992(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1056(%r12), %ymm12
|
|
vmovdqu 1088(%r12), %ymm11
|
|
vmovdqu 1120(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1184(%r12), %ymm12
|
|
vmovdqu 1216(%r12), %ymm11
|
|
vmovdqu 1248(%r12), %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 (%rsi), %ymm8
|
|
vmovdqu 32(%rsi), %ymm9
|
|
vpaddw %ymm8, %ymm0, %ymm0
|
|
vpaddw %ymm9, %ymm1, %ymm1
|
|
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, (%rsi)
|
|
vmovdqu %ymm9, 32(%rsi)
|
|
vmovdqu 64(%rsi), %ymm8
|
|
vmovdqu 96(%rsi), %ymm9
|
|
vpaddw %ymm8, %ymm2, %ymm2
|
|
vpaddw %ymm9, %ymm3, %ymm3
|
|
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(%rsi)
|
|
vmovdqu %ymm9, 96(%rsi)
|
|
vmovdqu 128(%rsi), %ymm8
|
|
vmovdqu 160(%rsi), %ymm9
|
|
vpaddw %ymm8, %ymm4, %ymm4
|
|
vpaddw %ymm9, %ymm5, %ymm5
|
|
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(%rsi)
|
|
vmovdqu %ymm9, 160(%rsi)
|
|
vmovdqu 192(%rsi), %ymm8
|
|
vmovdqu 224(%rsi), %ymm9
|
|
vpaddw %ymm8, %ymm6, %ymm6
|
|
vpaddw %ymm9, %ymm7, %ymm7
|
|
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(%rsi)
|
|
vmovdqu %ymm9, 224(%rsi)
|
|
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(%r12), %ymm10
|
|
vmovdqu 1312(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1376(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1440(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1504(%r12), %ymm12
|
|
vmovdqu 1536(%r12), %ymm11
|
|
vmovdqu 1568(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1632(%r12), %ymm12
|
|
vmovdqu 1664(%r12), %ymm11
|
|
vmovdqu 1696(%r12), %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(%r12), %ymm10
|
|
vperm2i128 $49, %ymm1, %ymm0, %ymm1
|
|
vmovdqu 1760(%r12), %ymm12
|
|
vperm2i128 $32, %ymm3, %ymm2, %ymm9
|
|
vmovdqu 1792(%r12), %ymm11
|
|
vperm2i128 $49, %ymm3, %ymm2, %ymm3
|
|
vmovdqu 1824(%r12), %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(%r12), %ymm10
|
|
vmovdqu 1888(%r12), %ymm12
|
|
vmovdqu 1920(%r12), %ymm11
|
|
vmovdqu 1952(%r12), %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(%r12), %ymm10
|
|
vperm2i128 $49, %ymm5, %ymm4, %ymm5
|
|
vmovdqu 2016(%r12), %ymm12
|
|
vperm2i128 $32, %ymm7, %ymm6, %ymm9
|
|
vmovdqu 2048(%r12), %ymm11
|
|
vperm2i128 $49, %ymm7, %ymm6, %ymm7
|
|
vmovdqu 2080(%r12), %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(%r12), %ymm10
|
|
vmovdqu 2144(%r12), %ymm12
|
|
vmovdqu 2176(%r12), %ymm11
|
|
vmovdqu 2208(%r12), %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(%r12), %ymm10
|
|
vmovdqu 2272(%r12), %ymm12
|
|
vmovdqu 2304(%r12), %ymm11
|
|
vmovdqu 2336(%r12), %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(%r12), %ymm10
|
|
vmovdqu 2400(%r12), %ymm12
|
|
vmovdqu 2432(%r12), %ymm11
|
|
vmovdqu 2464(%r12), %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 256(%rsi), %ymm8
|
|
vmovdqu 288(%rsi), %ymm9
|
|
vpaddw %ymm8, %ymm0, %ymm0
|
|
vpaddw %ymm9, %ymm1, %ymm1
|
|
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(%rsi)
|
|
vmovdqu %ymm9, 288(%rsi)
|
|
vmovdqu 320(%rsi), %ymm8
|
|
vmovdqu 352(%rsi), %ymm9
|
|
vpaddw %ymm8, %ymm2, %ymm2
|
|
vpaddw %ymm9, %ymm3, %ymm3
|
|
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(%rsi)
|
|
vmovdqu %ymm9, 352(%rsi)
|
|
vmovdqu 384(%rsi), %ymm8
|
|
vmovdqu 416(%rsi), %ymm9
|
|
vpaddw %ymm8, %ymm4, %ymm4
|
|
vpaddw %ymm9, %ymm5, %ymm5
|
|
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(%rsi)
|
|
vmovdqu %ymm9, 416(%rsi)
|
|
vmovdqu 448(%rsi), %ymm8
|
|
vmovdqu 480(%rsi), %ymm9
|
|
vpaddw %ymm8, %ymm6, %ymm6
|
|
vpaddw %ymm9, %ymm7, %ymm7
|
|
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(%rsi)
|
|
vmovdqu %ymm9, 480(%rsi)
|
|
addq $0x200, %rdx
|
|
addq $0x200, %rsi
|
|
subq $0x01, %rax
|
|
jg L_mlkem_keygen_avx2_to_mont_ntt_err
|
|
vzeroupper
|
|
popq %r12
|
|
repz retq
|
|
#ifndef __APPLE__
|
|
.size mlkem_keygen_avx2,.-mlkem_keygen_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.text
|
|
.globl mlkem_encapsulate_avx2
|
|
.type mlkem_encapsulate_avx2,@function
|
|
.align 16
|
|
mlkem_encapsulate_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_encapsulate_avx2
|
|
.p2align 4
|
|
_mlkem_encapsulate_avx2:
|
|
#endif /* __APPLE__ */
|
|
pushq %r12
|
|
pushq %r13
|
|
pushq %r14
|
|
pushq %r15
|
|
pushq %rbx
|
|
movq 48(%rsp), %rax
|
|
movq 56(%rsp), %r10
|
|
movq 64(%rsp), %r11
|
|
subq $48, %rsp
|
|
vmovdqu mlkem_q(%rip), %ymm14
|
|
vmovdqu mlkem_v(%rip), %ymm15
|
|
movq %r8, %r15
|
|
movslq %r11d, %r13
|
|
movq %r8, %r14
|
|
L_mlkem_encapsulate_avx2_trans:
|
|
# ntt
|
|
leaq L_mlkem_avx2_zetas(%rip), %rbx
|
|
vmovdqu (%rbx), %ymm10
|
|
vmovdqu 32(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 96(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 160(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 224(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 288(%rbx), %ymm12
|
|
vmovdqu 320(%rbx), %ymm11
|
|
vmovdqu 352(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 416(%rbx), %ymm12
|
|
vmovdqu 448(%rbx), %ymm11
|
|
vmovdqu 480(%rbx), %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(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm1, %ymm0, %ymm1
|
|
vmovdqu 544(%rbx), %ymm12
|
|
vperm2i128 $32, %ymm3, %ymm2, %ymm9
|
|
vmovdqu 576(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm3, %ymm2, %ymm3
|
|
vmovdqu 608(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 672(%rbx), %ymm12
|
|
vmovdqu 704(%rbx), %ymm11
|
|
vmovdqu 736(%rbx), %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(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm5, %ymm4, %ymm5
|
|
vmovdqu 800(%rbx), %ymm12
|
|
vperm2i128 $32, %ymm7, %ymm6, %ymm9
|
|
vmovdqu 832(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm7, %ymm6, %ymm7
|
|
vmovdqu 864(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 928(%rbx), %ymm12
|
|
vmovdqu 960(%rbx), %ymm11
|
|
vmovdqu 992(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 1056(%rbx), %ymm12
|
|
vmovdqu 1088(%rbx), %ymm11
|
|
vmovdqu 1120(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 1184(%rbx), %ymm12
|
|
vmovdqu 1216(%rbx), %ymm11
|
|
vmovdqu 1248(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 1312(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 1376(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 1440(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 1504(%rbx), %ymm12
|
|
vmovdqu 1536(%rbx), %ymm11
|
|
vmovdqu 1568(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 1632(%rbx), %ymm12
|
|
vmovdqu 1664(%rbx), %ymm11
|
|
vmovdqu 1696(%rbx), %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(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm1, %ymm0, %ymm1
|
|
vmovdqu 1760(%rbx), %ymm12
|
|
vperm2i128 $32, %ymm3, %ymm2, %ymm9
|
|
vmovdqu 1792(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm3, %ymm2, %ymm3
|
|
vmovdqu 1824(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 1888(%rbx), %ymm12
|
|
vmovdqu 1920(%rbx), %ymm11
|
|
vmovdqu 1952(%rbx), %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(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm5, %ymm4, %ymm5
|
|
vmovdqu 2016(%rbx), %ymm12
|
|
vperm2i128 $32, %ymm7, %ymm6, %ymm9
|
|
vmovdqu 2048(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm7, %ymm6, %ymm7
|
|
vmovdqu 2080(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 2144(%rbx), %ymm12
|
|
vmovdqu 2176(%rbx), %ymm11
|
|
vmovdqu 2208(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 2272(%rbx), %ymm12
|
|
vmovdqu 2304(%rbx), %ymm11
|
|
vmovdqu 2336(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 2400(%rbx), %ymm12
|
|
vmovdqu 2432(%rbx), %ymm11
|
|
vmovdqu 2464(%rbx), %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_mlkem_encapsulate_avx2_trans
|
|
movslq %r11d, %r12
|
|
L_mlkem_encapsulate_avx2_calc:
|
|
vmovdqu mlkem_qinv(%rip), %ymm12
|
|
# Pointwise acc mont
|
|
movslq %r11d, %r13
|
|
# Base mul mont
|
|
leaq L_mlkem_avx2_zetas_basemul(%rip), %rbx
|
|
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 (%rbx), %ymm10
|
|
vmovdqu 32(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 96(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 160(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 224(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 288(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 352(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 416(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 480(%rbx), %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_mlkem_avx2_zetas_basemul(%rip), %rbx
|
|
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 (%rbx), %ymm10
|
|
vmovdqu 32(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 96(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 160(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 224(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 288(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 352(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 416(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 480(%rbx), %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_mlkem_avx2_zetas_basemul(%rip), %rbx
|
|
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 (%rbx), %ymm10
|
|
vmovdqu 32(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 96(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 160(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 224(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 288(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 352(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 416(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 480(%rbx), %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
|
|
movq %r15, %r8
|
|
# invntt
|
|
leaq L_mlkem_avx2_zetas_inv(%rip), %rbx
|
|
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 (%rbx), %ymm10
|
|
vperm2i128 $49, %ymm1, %ymm0, %ymm9
|
|
vmovdqu 32(%rbx), %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(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm3, %ymm2, %ymm9
|
|
vmovdqu 96(%rbx), %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
|
|
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
|
|
# 4: 1/2
|
|
vmovdqu 128(%rbx), %ymm10
|
|
vmovdqu 160(%rbx), %ymm12
|
|
vmovdqu 192(%rbx), %ymm11
|
|
vmovdqu 224(%rbx), %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
|
|
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(%rbx), %ymm10
|
|
vmovdqu 288(%rbx), %ymm12
|
|
vmovdqu 320(%rbx), %ymm11
|
|
vmovdqu 352(%rbx), %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
|
|
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
|
|
# 16: 1/2
|
|
vperm2i128 $32, %ymm1, %ymm8, %ymm0
|
|
vmovdqu 384(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm1, %ymm8, %ymm1
|
|
vmovdqu 416(%rbx), %ymm12
|
|
vperm2i128 $32, %ymm3, %ymm9, %ymm2
|
|
vmovdqu 448(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm3, %ymm9, %ymm3
|
|
vmovdqu 480(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 544(%rbx), %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(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm5, %ymm4, %ymm9
|
|
vmovdqu 608(%rbx), %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(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm7, %ymm6, %ymm9
|
|
vmovdqu 672(%rbx), %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
|
|
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
|
|
# 4: 1/2
|
|
vmovdqu 704(%rbx), %ymm10
|
|
vmovdqu 736(%rbx), %ymm12
|
|
vmovdqu 768(%rbx), %ymm11
|
|
vmovdqu 800(%rbx), %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
|
|
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(%rbx), %ymm10
|
|
vmovdqu 864(%rbx), %ymm12
|
|
vmovdqu 896(%rbx), %ymm11
|
|
vmovdqu 928(%rbx), %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
|
|
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
|
|
# 16: 1/2
|
|
vperm2i128 $32, %ymm5, %ymm8, %ymm4
|
|
vmovdqu 960(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm5, %ymm8, %ymm5
|
|
vmovdqu 992(%rbx), %ymm12
|
|
vperm2i128 $32, %ymm7, %ymm9, %ymm6
|
|
vmovdqu 1024(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm7, %ymm9, %ymm7
|
|
vmovdqu 1056(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 1120(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 1184(%rbx), %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(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm1, %ymm0, %ymm9
|
|
vmovdqu 1248(%rbx), %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(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm3, %ymm2, %ymm9
|
|
vmovdqu 1312(%rbx), %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
|
|
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
|
|
# 4: 2/2
|
|
vmovdqu 1344(%rbx), %ymm10
|
|
vmovdqu 1376(%rbx), %ymm12
|
|
vmovdqu 1408(%rbx), %ymm11
|
|
vmovdqu 1440(%rbx), %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
|
|
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(%rbx), %ymm10
|
|
vmovdqu 1504(%rbx), %ymm12
|
|
vmovdqu 1536(%rbx), %ymm11
|
|
vmovdqu 1568(%rbx), %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
|
|
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
|
|
# 16: 2/2
|
|
vperm2i128 $32, %ymm1, %ymm8, %ymm0
|
|
vmovdqu 1600(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm1, %ymm8, %ymm1
|
|
vmovdqu 1632(%rbx), %ymm12
|
|
vperm2i128 $32, %ymm3, %ymm9, %ymm2
|
|
vmovdqu 1664(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm3, %ymm9, %ymm3
|
|
vmovdqu 1696(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 1760(%rbx), %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(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm5, %ymm4, %ymm9
|
|
vmovdqu 1824(%rbx), %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(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm7, %ymm6, %ymm9
|
|
vmovdqu 1888(%rbx), %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
|
|
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
|
|
# 4: 2/2
|
|
vmovdqu 1920(%rbx), %ymm10
|
|
vmovdqu 1952(%rbx), %ymm12
|
|
vmovdqu 1984(%rbx), %ymm11
|
|
vmovdqu 2016(%rbx), %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
|
|
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(%rbx), %ymm10
|
|
vmovdqu 2080(%rbx), %ymm12
|
|
vmovdqu 2112(%rbx), %ymm11
|
|
vmovdqu 2144(%rbx), %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
|
|
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
|
|
# 16: 2/2
|
|
vperm2i128 $32, %ymm5, %ymm8, %ymm4
|
|
vmovdqu 2176(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm5, %ymm8, %ymm5
|
|
vmovdqu 2208(%rbx), %ymm12
|
|
vperm2i128 $32, %ymm7, %ymm9, %ymm6
|
|
vmovdqu 2240(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm7, %ymm9, %ymm7
|
|
vmovdqu 2272(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 2336(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 2400(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 2464(%rbx), %ymm12
|
|
vmovdqu 2496(%rbx), %ymm11
|
|
vmovdqu 2528(%rbx), %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
|
|
vpaddw %ymm6, %ymm2, %ymm8
|
|
vpaddw %ymm7, %ymm3, %ymm9
|
|
vpsubw %ymm6, %ymm2, %ymm6
|
|
vpsubw %ymm7, %ymm3, %ymm7
|
|
vpmulhw %ymm15, %ymm8, %ymm2
|
|
vpmulhw %ymm15, %ymm9, %ymm3
|
|
vpsraw $10, %ymm2, %ymm2
|
|
vpsraw $10, %ymm3, %ymm3
|
|
vpmullw %ymm14, %ymm2, %ymm2
|
|
vpmullw %ymm14, %ymm3, %ymm3
|
|
vpsubw %ymm2, %ymm8, %ymm2
|
|
vpsubw %ymm3, %ymm9, %ymm3
|
|
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
|
|
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
|
|
vpaddw %ymm6, %ymm2, %ymm8
|
|
vpaddw %ymm7, %ymm3, %ymm9
|
|
vpsubw %ymm6, %ymm2, %ymm6
|
|
vpsubw %ymm7, %ymm3, %ymm7
|
|
vpmulhw %ymm15, %ymm8, %ymm2
|
|
vpmulhw %ymm15, %ymm9, %ymm3
|
|
vpsraw $10, %ymm2, %ymm2
|
|
vpsraw $10, %ymm3, %ymm3
|
|
vpmullw %ymm14, %ymm2, %ymm2
|
|
vpmullw %ymm14, %ymm3, %ymm3
|
|
vpsubw %ymm2, %ymm8, %ymm2
|
|
vpsubw %ymm3, %ymm9, %ymm3
|
|
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
|
|
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_mlkem_encapsulate_avx2_calc
|
|
vmovdqu mlkem_qinv(%rip), %ymm12
|
|
# Pointwise acc mont
|
|
movslq %r11d, %r13
|
|
# Base mul mont
|
|
leaq L_mlkem_avx2_zetas_basemul(%rip), %rbx
|
|
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 (%rbx), %ymm10
|
|
vmovdqu 32(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 96(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 160(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 224(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 288(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 352(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 416(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 480(%rbx), %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_mlkem_avx2_zetas_basemul(%rip), %rbx
|
|
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 (%rbx), %ymm10
|
|
vmovdqu 32(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 96(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 160(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 224(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 288(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 352(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 416(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 480(%rbx), %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_mlkem_avx2_zetas_basemul(%rip), %rbx
|
|
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 (%rbx), %ymm10
|
|
vmovdqu 32(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 96(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 160(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 224(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 288(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 352(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 416(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 480(%rbx), %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
|
|
# invntt
|
|
leaq L_mlkem_avx2_zetas_inv(%rip), %rbx
|
|
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 (%rbx), %ymm10
|
|
vperm2i128 $49, %ymm1, %ymm0, %ymm9
|
|
vmovdqu 32(%rbx), %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(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm3, %ymm2, %ymm9
|
|
vmovdqu 96(%rbx), %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
|
|
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
|
|
# 4: 1/2
|
|
vmovdqu 128(%rbx), %ymm10
|
|
vmovdqu 160(%rbx), %ymm12
|
|
vmovdqu 192(%rbx), %ymm11
|
|
vmovdqu 224(%rbx), %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
|
|
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(%rbx), %ymm10
|
|
vmovdqu 288(%rbx), %ymm12
|
|
vmovdqu 320(%rbx), %ymm11
|
|
vmovdqu 352(%rbx), %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
|
|
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
|
|
# 16: 1/2
|
|
vperm2i128 $32, %ymm1, %ymm8, %ymm0
|
|
vmovdqu 384(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm1, %ymm8, %ymm1
|
|
vmovdqu 416(%rbx), %ymm12
|
|
vperm2i128 $32, %ymm3, %ymm9, %ymm2
|
|
vmovdqu 448(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm3, %ymm9, %ymm3
|
|
vmovdqu 480(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 544(%rbx), %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(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm5, %ymm4, %ymm9
|
|
vmovdqu 608(%rbx), %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(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm7, %ymm6, %ymm9
|
|
vmovdqu 672(%rbx), %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
|
|
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
|
|
# 4: 1/2
|
|
vmovdqu 704(%rbx), %ymm10
|
|
vmovdqu 736(%rbx), %ymm12
|
|
vmovdqu 768(%rbx), %ymm11
|
|
vmovdqu 800(%rbx), %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
|
|
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(%rbx), %ymm10
|
|
vmovdqu 864(%rbx), %ymm12
|
|
vmovdqu 896(%rbx), %ymm11
|
|
vmovdqu 928(%rbx), %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
|
|
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
|
|
# 16: 1/2
|
|
vperm2i128 $32, %ymm5, %ymm8, %ymm4
|
|
vmovdqu 960(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm5, %ymm8, %ymm5
|
|
vmovdqu 992(%rbx), %ymm12
|
|
vperm2i128 $32, %ymm7, %ymm9, %ymm6
|
|
vmovdqu 1024(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm7, %ymm9, %ymm7
|
|
vmovdqu 1056(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 1120(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 1184(%rbx), %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(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm1, %ymm0, %ymm9
|
|
vmovdqu 1248(%rbx), %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(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm3, %ymm2, %ymm9
|
|
vmovdqu 1312(%rbx), %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
|
|
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
|
|
# 4: 2/2
|
|
vmovdqu 1344(%rbx), %ymm10
|
|
vmovdqu 1376(%rbx), %ymm12
|
|
vmovdqu 1408(%rbx), %ymm11
|
|
vmovdqu 1440(%rbx), %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
|
|
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(%rbx), %ymm10
|
|
vmovdqu 1504(%rbx), %ymm12
|
|
vmovdqu 1536(%rbx), %ymm11
|
|
vmovdqu 1568(%rbx), %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
|
|
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
|
|
# 16: 2/2
|
|
vperm2i128 $32, %ymm1, %ymm8, %ymm0
|
|
vmovdqu 1600(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm1, %ymm8, %ymm1
|
|
vmovdqu 1632(%rbx), %ymm12
|
|
vperm2i128 $32, %ymm3, %ymm9, %ymm2
|
|
vmovdqu 1664(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm3, %ymm9, %ymm3
|
|
vmovdqu 1696(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 1760(%rbx), %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(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm5, %ymm4, %ymm9
|
|
vmovdqu 1824(%rbx), %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(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm7, %ymm6, %ymm9
|
|
vmovdqu 1888(%rbx), %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
|
|
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
|
|
# 4: 2/2
|
|
vmovdqu 1920(%rbx), %ymm10
|
|
vmovdqu 1952(%rbx), %ymm12
|
|
vmovdqu 1984(%rbx), %ymm11
|
|
vmovdqu 2016(%rbx), %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
|
|
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(%rbx), %ymm10
|
|
vmovdqu 2080(%rbx), %ymm12
|
|
vmovdqu 2112(%rbx), %ymm11
|
|
vmovdqu 2144(%rbx), %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
|
|
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
|
|
# 16: 2/2
|
|
vperm2i128 $32, %ymm5, %ymm8, %ymm4
|
|
vmovdqu 2176(%rbx), %ymm10
|
|
vperm2i128 $49, %ymm5, %ymm8, %ymm5
|
|
vmovdqu 2208(%rbx), %ymm12
|
|
vperm2i128 $32, %ymm7, %ymm9, %ymm6
|
|
vmovdqu 2240(%rbx), %ymm11
|
|
vperm2i128 $49, %ymm7, %ymm9, %ymm7
|
|
vmovdqu 2272(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 2336(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 2400(%rbx), %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(%rbx), %ymm10
|
|
vmovdqu 2464(%rbx), %ymm12
|
|
vmovdqu 2496(%rbx), %ymm11
|
|
vmovdqu 2528(%rbx), %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
|
|
vpaddw %ymm6, %ymm2, %ymm8
|
|
vpaddw %ymm7, %ymm3, %ymm9
|
|
vpsubw %ymm6, %ymm2, %ymm6
|
|
vpsubw %ymm7, %ymm3, %ymm7
|
|
vpmulhw %ymm15, %ymm8, %ymm2
|
|
vpmulhw %ymm15, %ymm9, %ymm3
|
|
vpsraw $10, %ymm2, %ymm2
|
|
vpsraw $10, %ymm3, %ymm3
|
|
vpmullw %ymm14, %ymm2, %ymm2
|
|
vpmullw %ymm14, %ymm3, %ymm3
|
|
vpsubw %ymm2, %ymm8, %ymm2
|
|
vpsubw %ymm3, %ymm9, %ymm3
|
|
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
|
|
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
|
|
vpaddw %ymm6, %ymm2, %ymm8
|
|
vpaddw %ymm7, %ymm3, %ymm9
|
|
vpsubw %ymm6, %ymm2, %ymm6
|
|
vpsubw %ymm7, %ymm3, %ymm7
|
|
vpmulhw %ymm15, %ymm8, %ymm2
|
|
vpmulhw %ymm15, %ymm9, %ymm3
|
|
vpsraw $10, %ymm2, %ymm2
|
|
vpsraw $10, %ymm3, %ymm3
|
|
vpmullw %ymm14, %ymm2, %ymm2
|
|
vpmullw %ymm14, %ymm3, %ymm3
|
|
vpsubw %ymm2, %ymm8, %ymm2
|
|
vpsubw %ymm3, %ymm9, %ymm3
|
|
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
|
|
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 (%r10), %ymm0
|
|
vmovdqu 32(%r10), %ymm1
|
|
vmovdqu 64(%r10), %ymm2
|
|
vmovdqu 96(%r10), %ymm3
|
|
vmovdqu (%rax), %ymm4
|
|
vmovdqu 32(%rax), %ymm5
|
|
vmovdqu 64(%rax), %ymm6
|
|
vmovdqu 96(%rax), %ymm7
|
|
vpaddw %ymm0, %ymm4, %ymm4
|
|
vpaddw %ymm1, %ymm5, %ymm5
|
|
vpaddw %ymm2, %ymm6, %ymm6
|
|
vpaddw %ymm3, %ymm7, %ymm7
|
|
vmovdqu (%rdx), %ymm0
|
|
vmovdqu 32(%rdx), %ymm1
|
|
vmovdqu 64(%rdx), %ymm2
|
|
vmovdqu 96(%rdx), %ymm3
|
|
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(%r10), %ymm0
|
|
vmovdqu 160(%r10), %ymm1
|
|
vmovdqu 192(%r10), %ymm2
|
|
vmovdqu 224(%r10), %ymm3
|
|
vmovdqu 128(%rax), %ymm4
|
|
vmovdqu 160(%rax), %ymm5
|
|
vmovdqu 192(%rax), %ymm6
|
|
vmovdqu 224(%rax), %ymm7
|
|
vpaddw %ymm0, %ymm4, %ymm4
|
|
vpaddw %ymm1, %ymm5, %ymm5
|
|
vpaddw %ymm2, %ymm6, %ymm6
|
|
vpaddw %ymm3, %ymm7, %ymm7
|
|
vmovdqu 128(%rdx), %ymm0
|
|
vmovdqu 160(%rdx), %ymm1
|
|
vmovdqu 192(%rdx), %ymm2
|
|
vmovdqu 224(%rdx), %ymm3
|
|
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(%r10), %ymm0
|
|
vmovdqu 288(%r10), %ymm1
|
|
vmovdqu 320(%r10), %ymm2
|
|
vmovdqu 352(%r10), %ymm3
|
|
vmovdqu 256(%rax), %ymm4
|
|
vmovdqu 288(%rax), %ymm5
|
|
vmovdqu 320(%rax), %ymm6
|
|
vmovdqu 352(%rax), %ymm7
|
|
vpaddw %ymm0, %ymm4, %ymm4
|
|
vpaddw %ymm1, %ymm5, %ymm5
|
|
vpaddw %ymm2, %ymm6, %ymm6
|
|
vpaddw %ymm3, %ymm7, %ymm7
|
|
vmovdqu 256(%rdx), %ymm0
|
|
vmovdqu 288(%rdx), %ymm1
|
|
vmovdqu 320(%rdx), %ymm2
|
|
vmovdqu 352(%rdx), %ymm3
|
|
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(%r10), %ymm0
|
|
vmovdqu 416(%r10), %ymm1
|
|
vmovdqu 448(%r10), %ymm2
|
|
vmovdqu 480(%r10), %ymm3
|
|
vmovdqu 384(%rax), %ymm4
|
|
vmovdqu 416(%rax), %ymm5
|
|
vmovdqu 448(%rax), %ymm6
|
|
vmovdqu 480(%rax), %ymm7
|
|
vpaddw %ymm0, %ymm4, %ymm4
|
|
vpaddw %ymm1, %ymm5, %ymm5
|
|
vpaddw %ymm2, %ymm6, %ymm6
|
|
vpaddw %ymm3, %ymm7, %ymm7
|
|
vmovdqu 384(%rdx), %ymm0
|
|
vmovdqu 416(%rdx), %ymm1
|
|
vmovdqu 448(%rdx), %ymm2
|
|
vmovdqu 480(%rdx), %ymm3
|
|
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 %rbx
|
|
popq %r15
|
|
popq %r14
|
|
popq %r13
|
|
popq %r12
|
|
repz retq
|
|
#ifndef __APPLE__
|
|
.size mlkem_encapsulate_avx2,.-mlkem_encapsulate_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.text
|
|
.globl mlkem_decapsulate_avx2
|
|
.type mlkem_decapsulate_avx2,@function
|
|
.align 16
|
|
mlkem_decapsulate_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_decapsulate_avx2
|
|
.p2align 4
|
|
_mlkem_decapsulate_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu mlkem_q(%rip), %ymm14
|
|
vmovdqu mlkem_v(%rip), %ymm15
|
|
movslq %r8d, %rax
|
|
movq %rdx, %r9
|
|
L_mlkem_decapsulate_avx2_trans:
|
|
# ntt
|
|
leaq L_mlkem_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_mlkem_decapsulate_avx2_trans
|
|
vmovdqu mlkem_qinv(%rip), %ymm12
|
|
# Pointwise acc mont
|
|
movslq %r8d, %rax
|
|
# Base mul mont
|
|
leaq L_mlkem_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_mlkem_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_mlkem_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
|
|
# invntt
|
|
leaq L_mlkem_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
|
|
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
|
|
# 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
|
|
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
|
|
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
|
|
# 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
|
|
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
|
|
# 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
|
|
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
|
|
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
|
|
# 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
|
|
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
|
|
# 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
|
|
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
|
|
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
|
|
# 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
|
|
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
|
|
# 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
|
|
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
|
|
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
|
|
# 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
|
|
vpaddw %ymm6, %ymm2, %ymm8
|
|
vpaddw %ymm7, %ymm3, %ymm9
|
|
vpsubw %ymm6, %ymm2, %ymm6
|
|
vpsubw %ymm7, %ymm3, %ymm7
|
|
vpmulhw %ymm15, %ymm8, %ymm2
|
|
vpmulhw %ymm15, %ymm9, %ymm3
|
|
vpsraw $10, %ymm2, %ymm2
|
|
vpsraw $10, %ymm3, %ymm3
|
|
vpmullw %ymm14, %ymm2, %ymm2
|
|
vpmullw %ymm14, %ymm3, %ymm3
|
|
vpsubw %ymm2, %ymm8, %ymm2
|
|
vpsubw %ymm3, %ymm9, %ymm3
|
|
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
|
|
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
|
|
vpaddw %ymm6, %ymm2, %ymm8
|
|
vpaddw %ymm7, %ymm3, %ymm9
|
|
vpsubw %ymm6, %ymm2, %ymm6
|
|
vpsubw %ymm7, %ymm3, %ymm7
|
|
vpmulhw %ymm15, %ymm8, %ymm2
|
|
vpmulhw %ymm15, %ymm9, %ymm3
|
|
vpsraw $10, %ymm2, %ymm2
|
|
vpsraw $10, %ymm3, %ymm3
|
|
vpmullw %ymm14, %ymm2, %ymm2
|
|
vpmullw %ymm14, %ymm3, %ymm3
|
|
vpsubw %ymm2, %ymm8, %ymm2
|
|
vpsubw %ymm3, %ymm9, %ymm3
|
|
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
|
|
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 mlkem_decapsulate_avx2,.-mlkem_decapsulate_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.text
|
|
.globl mlkem_csubq_avx2
|
|
.type mlkem_csubq_avx2,@function
|
|
.align 16
|
|
mlkem_csubq_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_csubq_avx2
|
|
.p2align 4
|
|
_mlkem_csubq_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu mlkem_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 mlkem_csubq_avx2,.-mlkem_csubq_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.align 16
|
|
#else
|
|
.p2align 4
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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_mlkem_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_mlkem_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_mlkem_rej_shuffle:
|
|
.quad 0x504040302010100, 0xb0a0a0908070706
|
|
.quad 0x908080706050504, 0xf0e0e0d0c0b0b0a
|
|
#ifndef __APPLE__
|
|
.text
|
|
.globl mlkem_rej_uniform_n_avx2
|
|
.type mlkem_rej_uniform_n_avx2,@function
|
|
.align 16
|
|
mlkem_rej_uniform_n_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_rej_uniform_n_avx2
|
|
.p2align 4
|
|
_mlkem_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_mlkem_rej_q(%rip), %ymm6
|
|
vmovdqu L_mlkem_rej_ones(%rip), %ymm7
|
|
vmovdqu L_mlkem_rej_mask(%rip), %ymm8
|
|
vmovdqu L_mlkem_rej_shuffle(%rip), %ymm9
|
|
leaq L_mlkem_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_mlkem_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_mlkem_rej_uniform_n_avx2_done_256
|
|
cmpl $32, %esi
|
|
jge L_mlkem_rej_uniform_n_avx2_start_256
|
|
L_mlkem_rej_uniform_n_avx2_done_256:
|
|
cmpl $8, %esi
|
|
jl L_mlkem_rej_uniform_n_avx2_done_128
|
|
cmpl $12, %r8d
|
|
jl L_mlkem_rej_uniform_n_avx2_done_128
|
|
L_mlkem_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_mlkem_rej_uniform_n_avx2_done_128
|
|
cmpl $8, %esi
|
|
jge L_mlkem_rej_uniform_n_avx2_start_128
|
|
L_mlkem_rej_uniform_n_avx2_done_128:
|
|
cmpl $0x00, %r8d
|
|
je L_mlkem_rej_uniform_n_avx2_done_64
|
|
cmpl $0x00, %esi
|
|
je L_mlkem_rej_uniform_n_avx2_done_64
|
|
movq $0xfff0fff0fff0fff, %r15
|
|
movq $0x2000200020002000, %r10
|
|
movq $0xd010d010d010d01, %r11
|
|
movq $0x1000100010001000, %r12
|
|
L_mlkem_rej_uniform_n_avx2_start_64:
|
|
movq (%rdx), %rcx
|
|
pdepq %r15, %rcx, %rcx
|
|
cmpw $0xd01, %cx
|
|
jge L_mlkem_rej_uniform_0_avx2_rej_large_0
|
|
movw %cx, (%rdi)
|
|
addq $2, %rdi
|
|
subl $0x01, %esi
|
|
je L_mlkem_rej_uniform_n_avx2_done_64
|
|
L_mlkem_rej_uniform_0_avx2_rej_large_0:
|
|
shrq $16, %rcx
|
|
cmpw $0xd01, %cx
|
|
jge L_mlkem_rej_uniform_0_avx2_rej_large_1
|
|
movw %cx, (%rdi)
|
|
addq $2, %rdi
|
|
subl $0x01, %esi
|
|
je L_mlkem_rej_uniform_n_avx2_done_64
|
|
L_mlkem_rej_uniform_0_avx2_rej_large_1:
|
|
shrq $16, %rcx
|
|
cmpw $0xd01, %cx
|
|
jge L_mlkem_rej_uniform_0_avx2_rej_large_2
|
|
movw %cx, (%rdi)
|
|
addq $2, %rdi
|
|
subl $0x01, %esi
|
|
je L_mlkem_rej_uniform_n_avx2_done_64
|
|
L_mlkem_rej_uniform_0_avx2_rej_large_2:
|
|
shrq $16, %rcx
|
|
cmpw $0xd01, %cx
|
|
jge L_mlkem_rej_uniform_0_avx2_rej_large_3
|
|
movw %cx, (%rdi)
|
|
addq $2, %rdi
|
|
subl $0x01, %esi
|
|
je L_mlkem_rej_uniform_n_avx2_done_64
|
|
L_mlkem_rej_uniform_0_avx2_rej_large_3:
|
|
addq $6, %rdx
|
|
subl $6, %r8d
|
|
jle L_mlkem_rej_uniform_n_avx2_done_64
|
|
cmpl $0x00, %esi
|
|
jg L_mlkem_rej_uniform_n_avx2_start_64
|
|
L_mlkem_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 mlkem_rej_uniform_n_avx2,.-mlkem_rej_uniform_n_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.text
|
|
.globl mlkem_rej_uniform_avx2
|
|
.type mlkem_rej_uniform_avx2,@function
|
|
.align 16
|
|
mlkem_rej_uniform_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_rej_uniform_avx2
|
|
.p2align 4
|
|
_mlkem_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_mlkem_rej_uniform_avx2_done_64
|
|
cmpl $8, %esi
|
|
jl L_mlkem_rej_uniform_avx2_done_128
|
|
vmovdqu L_mlkem_rej_q(%rip), %ymm6
|
|
vmovdqu L_mlkem_rej_ones(%rip), %ymm7
|
|
vmovdqu L_mlkem_rej_mask(%rip), %ymm8
|
|
vmovdqu L_mlkem_rej_shuffle(%rip), %ymm9
|
|
leaq L_mlkem_rej_idx(%rip), %r9
|
|
movq $0x1111111111111111, %r14
|
|
movq $0xe0c0a0806040200, %rbp
|
|
movq $0x101010101010101, %r13
|
|
cmpl $32, %esi
|
|
jl L_mlkem_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_mlkem_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_mlkem_rej_uniform_avx2_done_256
|
|
L_mlkem_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_mlkem_rej_uniform_avx2_done_256
|
|
cmpl $32, %esi
|
|
jge L_mlkem_rej_uniform_avx2_start_256
|
|
L_mlkem_rej_uniform_avx2_done_256:
|
|
cmpl $8, %esi
|
|
jl L_mlkem_rej_uniform_avx2_done_128
|
|
cmpl $12, %r8d
|
|
jl L_mlkem_rej_uniform_avx2_done_128
|
|
L_mlkem_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_mlkem_rej_uniform_avx2_done_128
|
|
cmpl $8, %esi
|
|
jge L_mlkem_rej_uniform_avx2_start_128
|
|
L_mlkem_rej_uniform_avx2_done_128:
|
|
cmpl $0x00, %r8d
|
|
je L_mlkem_rej_uniform_avx2_done_64
|
|
cmpl $0x00, %esi
|
|
je L_mlkem_rej_uniform_avx2_done_64
|
|
movq $0xfff0fff0fff0fff, %r15
|
|
movq $0x2000200020002000, %r10
|
|
movq $0xd010d010d010d01, %r11
|
|
movq $0x1000100010001000, %r12
|
|
L_mlkem_rej_uniform_avx2_start_64:
|
|
movq (%rdx), %rcx
|
|
pdepq %r15, %rcx, %rcx
|
|
cmpw $0xd01, %cx
|
|
jge L_mlkem_rej_uniform_avx2_rej_large_0
|
|
movw %cx, (%rdi)
|
|
addq $2, %rdi
|
|
subl $0x01, %esi
|
|
je L_mlkem_rej_uniform_avx2_done_64
|
|
L_mlkem_rej_uniform_avx2_rej_large_0:
|
|
shrq $16, %rcx
|
|
cmpw $0xd01, %cx
|
|
jge L_mlkem_rej_uniform_avx2_rej_large_1
|
|
movw %cx, (%rdi)
|
|
addq $2, %rdi
|
|
subl $0x01, %esi
|
|
je L_mlkem_rej_uniform_avx2_done_64
|
|
L_mlkem_rej_uniform_avx2_rej_large_1:
|
|
shrq $16, %rcx
|
|
cmpw $0xd01, %cx
|
|
jge L_mlkem_rej_uniform_avx2_rej_large_2
|
|
movw %cx, (%rdi)
|
|
addq $2, %rdi
|
|
subl $0x01, %esi
|
|
je L_mlkem_rej_uniform_avx2_done_64
|
|
L_mlkem_rej_uniform_avx2_rej_large_2:
|
|
shrq $16, %rcx
|
|
cmpw $0xd01, %cx
|
|
jge L_mlkem_rej_uniform_avx2_rej_large_3
|
|
movw %cx, (%rdi)
|
|
addq $2, %rdi
|
|
subl $0x01, %esi
|
|
je L_mlkem_rej_uniform_avx2_done_64
|
|
L_mlkem_rej_uniform_avx2_rej_large_3:
|
|
addq $6, %rdx
|
|
subl $6, %r8d
|
|
jle L_mlkem_rej_uniform_avx2_done_64
|
|
cmpl $0x00, %esi
|
|
jg L_mlkem_rej_uniform_avx2_start_64
|
|
L_mlkem_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 mlkem_rej_uniform_avx2,.-mlkem_rej_uniform_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.align 32
|
|
#else
|
|
.p2align 5
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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_mlkem_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_mlkem_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_mlkem_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_mlkem_shuff:
|
|
.quad 0xff050403ff020100, 0xff0b0a09ff080706
|
|
.quad 0xff090807ff060504, 0xff0f0e0dff0c0b0a
|
|
#ifndef __APPLE__
|
|
.text
|
|
.globl mlkem_cbd_eta3_avx2
|
|
.type mlkem_cbd_eta3_avx2,@function
|
|
.align 16
|
|
mlkem_cbd_eta3_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_cbd_eta3_avx2
|
|
.p2align 4
|
|
_mlkem_cbd_eta3_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu L_mlkem_mask_249(%rip), %ymm8
|
|
vmovdqu L_mlkem_mask_6db(%rip), %ymm9
|
|
vmovdqu L_mlkem_mask_07(%rip), %ymm10
|
|
vmovdqu L_mlkem_mask_70(%rip), %ymm11
|
|
vmovdqu L_mlkem_mask_3(%rip), %ymm12
|
|
vmovdqu L_mlkem_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 mlkem_cbd_eta3_avx2,.-mlkem_cbd_eta3_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.align 32
|
|
#else
|
|
.p2align 5
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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_mlkem_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_mlkem_mask_0f:
|
|
.quad 0xf0f0f0f0f0f0f0f, 0xf0f0f0f0f0f0f0f
|
|
.quad 0xf0f0f0f0f0f0f0f, 0xf0f0f0f0f0f0f0f
|
|
#ifndef __APPLE__
|
|
.text
|
|
.globl mlkem_cbd_eta2_avx2
|
|
.type mlkem_cbd_eta2_avx2,@function
|
|
.align 16
|
|
mlkem_cbd_eta2_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_cbd_eta2_avx2
|
|
.p2align 4
|
|
_mlkem_cbd_eta2_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu L_mlkem_mask_55(%rip), %ymm8
|
|
vmovdqu L_mlkem_mask_33(%rip), %ymm9
|
|
vmovdqu L_mlkem_mask_03(%rip), %ymm10
|
|
vmovdqu L_mlkem_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 mlkem_cbd_eta2_avx2,.-mlkem_cbd_eta2_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.align 16
|
|
#else
|
|
.p2align 4
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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_mlkem_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_mlkem_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_mlkem_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_mlkem_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_mlkem_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 mlkem_compress_10_avx2
|
|
.type mlkem_compress_10_avx2,@function
|
|
.align 16
|
|
mlkem_compress_10_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_compress_10_avx2
|
|
.p2align 4
|
|
_mlkem_compress_10_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu (%rsi), %ymm0
|
|
vmovdqu L_mlkem_compress_10_avx2_mask(%rip), %ymm9
|
|
vmovdqu L_mlkem_compress_10_avx2_shift(%rip), %ymm8
|
|
vmovdqu L_mlkem_compress_10_avx2_shlv(%rip), %ymm10
|
|
vmovdqu L_mlkem_compress_10_avx2_shuf(%rip), %ymm11
|
|
vmovdqu L_mlkem_compress_10_avx2_v(%rip), %ymm6
|
|
vmovdqu L_mlkem_compress_10_avx2_offset(%rip), %ymm12
|
|
vmovdqu L_mlkem_compress_10_avx2_shift12(%rip), %ymm13
|
|
vpsllw $3, %ymm6, %ymm7
|
|
L_mlkem_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_mlkem_compress_10_avx2_start
|
|
vzeroupper
|
|
repz retq
|
|
#ifndef __APPLE__
|
|
.size mlkem_compress_10_avx2,.-mlkem_compress_10_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_decompress_10_avx2_sllv:
|
|
.quad 0x4, 0x4
|
|
.quad 0x4, 0x4
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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 mlkem_decompress_10_avx2
|
|
.type mlkem_decompress_10_avx2,@function
|
|
.align 16
|
|
mlkem_decompress_10_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_decompress_10_avx2
|
|
.p2align 4
|
|
_mlkem_decompress_10_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu L_mlkem_decompress_10_avx2_mask(%rip), %ymm4
|
|
vmovdqu L_mlkem_decompress_10_avx2_q(%rip), %ymm5
|
|
vmovdqu L_mlkem_decompress_10_avx2_shuf(%rip), %ymm6
|
|
vmovdqu L_mlkem_decompress_10_avx2_sllv(%rip), %ymm7
|
|
L_mlkem_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_mlkem_decompress_10_avx2_start
|
|
vzeroupper
|
|
repz retq
|
|
#ifndef __APPLE__
|
|
.size mlkem_decompress_10_avx2,.-mlkem_decompress_10_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.align 16
|
|
#else
|
|
.p2align 4
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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_mlkem_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_mlkem_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_mlkem_compress_11_avx2_shift:
|
|
.quad 0x800000108000001, 0x800000108000001
|
|
.quad 0x800000108000001, 0x800000108000001
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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_mlkem_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 mlkem_compress_11_avx2
|
|
.type mlkem_compress_11_avx2,@function
|
|
.align 16
|
|
mlkem_compress_11_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_compress_11_avx2
|
|
.p2align 4
|
|
_mlkem_compress_11_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu (%rsi), %ymm0
|
|
vmovdqu L_mlkem_compress_11_avx2_v(%rip), %ymm7
|
|
vmovdqu L_mlkem_compress_11_avx2_off(%rip), %ymm8
|
|
vmovdqu L_mlkem_compress_11_avx2_shift13(%rip), %ymm9
|
|
vmovdqu L_mlkem_compress_11_avx2_mask(%rip), %ymm10
|
|
vmovdqu L_mlkem_compress_11_avx2_shift(%rip), %ymm11
|
|
vmovdqu L_mlkem_compress_11_avx2_sllvd(%rip), %ymm12
|
|
vmovdqu L_mlkem_compress_11_avx2_srlvq(%rip), %ymm13
|
|
vmovdqu L_mlkem_compress_11_avx2_shuf(%rip), %ymm14
|
|
vpsllw $3, %ymm7, %ymm6
|
|
L_mlkem_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_mlkem_compress_11_avx2_start
|
|
vzeroupper
|
|
repz retq
|
|
#ifndef __APPLE__
|
|
.size mlkem_compress_11_avx2,.-mlkem_compress_11_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.align 16
|
|
#else
|
|
.p2align 4
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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_mlkem_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_mlkem_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_mlkem_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_mlkem_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 mlkem_decompress_11_avx2
|
|
.type mlkem_decompress_11_avx2,@function
|
|
.align 16
|
|
mlkem_decompress_11_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_decompress_11_avx2
|
|
.p2align 4
|
|
_mlkem_decompress_11_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu L_mlkem_decompress_11_avx2_q(%rip), %ymm4
|
|
vmovdqu L_mlkem_decompress_11_avx2_shuf(%rip), %ymm5
|
|
vmovdqu L_mlkem_decompress_11_avx2_sllv(%rip), %ymm6
|
|
vmovdqu L_mlkem_decompress_11_avx2_srlv(%rip), %ymm7
|
|
vmovdqu L_mlkem_decompress_11_avx2_shift(%rip), %ymm8
|
|
vmovdqu L_mlkem_decompress_11_avx2_mask(%rip), %ymm9
|
|
L_mlkem_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_mlkem_decompress_11_avx2_start
|
|
vzeroupper
|
|
repz retq
|
|
#ifndef __APPLE__
|
|
.size mlkem_decompress_11_avx2,.-mlkem_decompress_11_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.align 16
|
|
#else
|
|
.p2align 4
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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_mlkem_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_mlkem_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_mlkem_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 mlkem_compress_4_avx2
|
|
.type mlkem_compress_4_avx2,@function
|
|
.align 16
|
|
mlkem_compress_4_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_compress_4_avx2
|
|
.p2align 4
|
|
_mlkem_compress_4_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu L_mlkem_compress_4_avx2_mask(%rip), %ymm8
|
|
vmovdqu L_mlkem_compress_4_avx2_shift(%rip), %ymm9
|
|
vmovdqu L_mlkem_compress_4_avx2_perm(%rip), %ymm10
|
|
vmovdqu L_mlkem_compress_4_avx2_v(%rip), %ymm11
|
|
vmovdqu L_mlkem_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 mlkem_compress_4_avx2,.-mlkem_compress_4_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_decompress_4_avx2_mask:
|
|
.long 0xf0000f,0xf0000f,0xf0000f,0xf0000f
|
|
.long 0xf0000f,0xf0000f,0xf0000f,0xf0000f
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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_mlkem_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 mlkem_decompress_4_avx2
|
|
.type mlkem_decompress_4_avx2,@function
|
|
.align 16
|
|
mlkem_decompress_4_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_decompress_4_avx2
|
|
.p2align 4
|
|
_mlkem_decompress_4_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu L_mlkem_decompress_4_avx2_mask(%rip), %ymm4
|
|
vmovdqu L_mlkem_decompress_4_avx2_shift(%rip), %ymm5
|
|
vmovdqu L_mlkem_decompress_4_avx2_shuf(%rip), %ymm6
|
|
vmovdqu L_mlkem_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 mlkem_decompress_4_avx2,.-mlkem_decompress_4_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.align 16
|
|
#else
|
|
.p2align 4
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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_mlkem_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_mlkem_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_mlkem_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_mlkem_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_mlkem_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 mlkem_compress_5_avx2
|
|
.type mlkem_compress_5_avx2,@function
|
|
.align 16
|
|
mlkem_compress_5_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_compress_5_avx2
|
|
.p2align 4
|
|
_mlkem_compress_5_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu (%rsi), %ymm0
|
|
vmovdqu L_mlkem_compress_5_avx2_v(%rip), %ymm2
|
|
vmovdqu L_mlkem_compress_5_avx2_shift(%rip), %ymm3
|
|
vmovdqu L_mlkem_compress_5_avx2_mask(%rip), %ymm4
|
|
vmovdqu L_mlkem_compress_5_avx2_shift1(%rip), %ymm5
|
|
vmovdqu L_mlkem_compress_5_avx2_shift2(%rip), %ymm6
|
|
vmovdqu L_mlkem_compress_5_avx2_shlv(%rip), %ymm7
|
|
vmovdqu L_mlkem_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 mlkem_compress_5_avx2,.-mlkem_compress_5_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.align 16
|
|
#else
|
|
.p2align 4
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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_mlkem_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_mlkem_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 mlkem_decompress_5_avx2
|
|
.type mlkem_decompress_5_avx2,@function
|
|
.align 16
|
|
mlkem_decompress_5_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_decompress_5_avx2
|
|
.p2align 4
|
|
_mlkem_decompress_5_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu L_mlkem_decompress_5_avx2_q(%rip), %ymm1
|
|
vmovdqu L_mlkem_decompress_5_avx2_shuf(%rip), %ymm2
|
|
vmovdqu L_mlkem_decompress_5_avx2_mask(%rip), %ymm3
|
|
vmovdqu L_mlkem_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 mlkem_decompress_5_avx2,.-mlkem_decompress_5_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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_mlkem_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 mlkem_from_msg_avx2
|
|
.type mlkem_from_msg_avx2,@function
|
|
.align 16
|
|
mlkem_from_msg_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_from_msg_avx2
|
|
.p2align 4
|
|
_mlkem_from_msg_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu (%rsi), %ymm0
|
|
vmovdqu L_mlkem_from_msg_avx2_shift(%rip), %ymm9
|
|
vmovdqu L_mlkem_from_msg_avx2_shuf(%rip), %ymm10
|
|
vmovdqu L_mlkem_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 mlkem_from_msg_avx2,.-mlkem_from_msg_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.align 16
|
|
#else
|
|
.p2align 4
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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 mlkem_to_msg_avx2
|
|
.type mlkem_to_msg_avx2,@function
|
|
.align 16
|
|
mlkem_to_msg_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_to_msg_avx2
|
|
.p2align 4
|
|
_mlkem_to_msg_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu L_mlkem_to_msg_avx2_hqs(%rip), %ymm8
|
|
vmovdqu L_mlkem_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 mlkem_to_msg_avx2,.-mlkem_to_msg_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.align 16
|
|
#else
|
|
.p2align 4
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_from_bytes_avx2_mask:
|
|
.long 0xfff,0xfff,0xfff,0xfff
|
|
.long 0xfff,0xfff,0xfff,0xfff
|
|
#ifndef __APPLE__
|
|
.text
|
|
.globl mlkem_from_bytes_avx2
|
|
.type mlkem_from_bytes_avx2,@function
|
|
.align 16
|
|
mlkem_from_bytes_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_from_bytes_avx2
|
|
.p2align 4
|
|
_mlkem_from_bytes_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu (%rsi), %ymm0
|
|
vmovdqu L_mlkem_from_bytes_avx2_shuf(%rip), %ymm12
|
|
vmovdqu L_mlkem_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 mlkem_from_bytes_avx2,.-mlkem_from_bytes_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.data
|
|
#else
|
|
.section __DATA,__data
|
|
#endif /* __APPLE__ */
|
|
L_mlkem_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_mlkem_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_mlkem_to_bytes_avx2_perm:
|
|
.long 0x0,0x1,0x2,0x7
|
|
.long 0x4,0x5,0x3,0x6
|
|
#ifndef __APPLE__
|
|
.text
|
|
.globl mlkem_to_bytes_avx2
|
|
.type mlkem_to_bytes_avx2,@function
|
|
.align 16
|
|
mlkem_to_bytes_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_to_bytes_avx2
|
|
.p2align 4
|
|
_mlkem_to_bytes_avx2:
|
|
#endif /* __APPLE__ */
|
|
vmovdqu mlkem_q(%rip), %ymm12
|
|
vmovdqu L_mlkem_to_bytes_avx2_mask(%rip), %ymm13
|
|
vmovdqu L_mlkem_to_bytes_avx2_shuf(%rip), %ymm14
|
|
vmovdqu L_mlkem_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 mlkem_to_bytes_avx2,.-mlkem_to_bytes_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.text
|
|
.globl mlkem_cmp_avx2
|
|
.type mlkem_cmp_avx2,@function
|
|
.align 16
|
|
mlkem_cmp_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_cmp_avx2
|
|
.p2align 4
|
|
_mlkem_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_mlkem_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_mlkem_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_mlkem_cmp_avx2_done:
|
|
vpor %ymm3, %ymm2, %ymm2
|
|
vptest %ymm2, %ymm2
|
|
cmovzl %ecx, %eax
|
|
cmovnzl %r8d, %eax
|
|
vzeroupper
|
|
repz retq
|
|
#ifndef __APPLE__
|
|
.size mlkem_cmp_avx2,.-mlkem_cmp_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.text
|
|
.globl mlkem_redistribute_21_rand_avx2
|
|
.type mlkem_redistribute_21_rand_avx2,@function
|
|
.align 16
|
|
mlkem_redistribute_21_rand_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_redistribute_21_rand_avx2
|
|
.p2align 4
|
|
_mlkem_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 mlkem_redistribute_21_rand_avx2,.-mlkem_redistribute_21_rand_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.text
|
|
.globl mlkem_redistribute_17_rand_avx2
|
|
.type mlkem_redistribute_17_rand_avx2,@function
|
|
.align 16
|
|
mlkem_redistribute_17_rand_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_redistribute_17_rand_avx2
|
|
.p2align 4
|
|
_mlkem_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 mlkem_redistribute_17_rand_avx2,.-mlkem_redistribute_17_rand_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.text
|
|
.globl mlkem_redistribute_16_rand_avx2
|
|
.type mlkem_redistribute_16_rand_avx2,@function
|
|
.align 16
|
|
mlkem_redistribute_16_rand_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_redistribute_16_rand_avx2
|
|
.p2align 4
|
|
_mlkem_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 mlkem_redistribute_16_rand_avx2,.-mlkem_redistribute_16_rand_avx2
|
|
#endif /* __APPLE__ */
|
|
#ifndef __APPLE__
|
|
.text
|
|
.globl mlkem_redistribute_8_rand_avx2
|
|
.type mlkem_redistribute_8_rand_avx2,@function
|
|
.align 16
|
|
mlkem_redistribute_8_rand_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_redistribute_8_rand_avx2
|
|
.p2align 4
|
|
_mlkem_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 mlkem_redistribute_8_rand_avx2,.-mlkem_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 mlkem_sha3_128_blocksx4_seed_avx2
|
|
.type mlkem_sha3_128_blocksx4_seed_avx2,@function
|
|
.align 16
|
|
mlkem_sha3_128_blocksx4_seed_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_sha3_128_blocksx4_seed_avx2
|
|
.p2align 4
|
|
_mlkem_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 mlkem_sha3_128_blocksx4_seed_avx2,.-mlkem_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 mlkem_sha3_256_blocksx4_seed_avx2
|
|
.type mlkem_sha3_256_blocksx4_seed_avx2,@function
|
|
.align 16
|
|
mlkem_sha3_256_blocksx4_seed_avx2:
|
|
#else
|
|
.section __TEXT,__text
|
|
.globl _mlkem_sha3_256_blocksx4_seed_avx2
|
|
.p2align 4
|
|
_mlkem_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 mlkem_sha3_256_blocksx4_seed_avx2,.-mlkem_sha3_256_blocksx4_seed_avx2
|
|
#endif /* __APPLE__ */
|
|
#endif /* HAVE_INTEL_AVX2 */
|
|
#endif /* WOLFSSL_WC_MLKEM */
|
|
|
|
#if defined(__linux__) && defined(__ELF__)
|
|
.section .note.GNU-stack,"",%progbits
|
|
#endif
|