diff --git a/.wolfssl_known_macro_extras b/.wolfssl_known_macro_extras index 70aea15d73..5a41e2cd06 100644 --- a/.wolfssl_known_macro_extras +++ b/.wolfssl_known_macro_extras @@ -399,6 +399,7 @@ NO_ARDUINO_DEFAULT NO_ASM NO_ASN_OLD_TYPE_NAMES NO_AVX512_SUPPORT +NO_AVX512_VBMI_SUPPORT NO_CAMELLIA_CBC NO_CERT NO_CERT_IN_TICKET diff --git a/wolfcrypt/src/cpuid.c b/wolfcrypt/src/cpuid.c index 854a34ff53..4e93e820c6 100644 --- a/wolfcrypt/src/cpuid.c +++ b/wolfcrypt/src/cpuid.c @@ -150,6 +150,12 @@ if (cpuid_flag(7, 0, EBX, 29)) { new_cpuid_flags |= CPUID_SHA ; } if (cpuid_flag(7, 0, ECX, 9)) { new_cpuid_flags |= CPUID_VAES ; } if (cpuid_flag(7, 0, EBX, 16)) { new_cpuid_flags |= CPUID_AVX512; } + if (cpuid_flag(7, 0, ECX, 1)) { + new_cpuid_flags |= CPUID_AVX512_VBMI; + } + if (cpuid_flag(7, 0, ECX, 6)) { + new_cpuid_flags |= CPUID_AVX512_VBMI2; + } if (cpuid_is_intel()) { new_cpuid_flags |= CPUID_INTEL ; } if (cpuid_is_amd()) { new_cpuid_flags |= CPUID_AMD ; } (void)wolfSSL_Atomic_Uint_CompareExchange diff --git a/wolfcrypt/src/sha3_asm.S b/wolfcrypt/src/sha3_asm.S index ce57189e8e..6ba0a22e47 100644 --- a/wolfcrypt/src/sha3_asm.S +++ b/wolfcrypt/src/sha3_asm.S @@ -36860,8 +36860,13 @@ _sha3_256_blocksx4_seed_64_avx2: .size sha3_256_blocksx4_seed_64_avx2,.-sha3_256_blocksx4_seed_64_avx2 #endif /* __APPLE__ */ #endif /* WOLFSSL_HAVE_MLDSA */ +#ifndef NO_AVX512_SUPPORT +#ifndef HAVE_INTEL_AVX512 +#define HAVE_INTEL_AVX512 +#endif /* HAVE_INTEL_AVX512 */ +#endif /* NO_AVX512_SUPPORT */ #ifdef HAVE_INTEL_AVX512 -#ifdef WOLFSSL_HAVE_FRODOKEM +#if defined(WOLFSSL_HAVE_FRODOKEM) || defined(WOLFSSL_HAVE_MLKEM) #ifndef __APPLE__ .data #else @@ -36969,6 +36974,8 @@ L_sha3_x8_avx512_r: .quad 0x8000000080008008,0x8000000080008008 .quad 0x8000000080008008,0x8000000080008008 .quad 0x8000000080008008,0x8000000080008008 +#endif /* defined(WOLFSSL_HAVE_FRODOKEM) || defined(WOLFSSL_HAVE_MLKEM) */ +#ifdef WOLFSSL_HAVE_FRODOKEM #ifndef __APPLE__ .text .globl sha3_blocksx8_out_avx512 @@ -39909,6 +39916,8666 @@ L_sha3_blocksx8_out_avx512_done: .size sha3_blocksx8_out_avx512,.-sha3_blocksx8_out_avx512 #endif /* __APPLE__ */ #endif /* WOLFSSL_HAVE_FRODOKEM */ +#ifdef WOLFSSL_HAVE_MLKEM +#ifndef __APPLE__ +.text +.globl sha3_blocksx8_avx512 +.type sha3_blocksx8_avx512,@function +.align 16 +sha3_blocksx8_avx512: +#else +.section __TEXT,__text +.globl _sha3_blocksx8_avx512 +.p2align 4 +_sha3_blocksx8_avx512: +#endif /* __APPLE__ */ + leaq L_sha3_x8_avx512_r(%rip), %rdx + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vmovdqu64 512(%rdi), %zmm8 + vmovdqu64 576(%rdi), %zmm9 + vmovdqu64 640(%rdi), %zmm10 + vmovdqu64 704(%rdi), %zmm11 + vmovdqu64 768(%rdi), %zmm12 + vmovdqu64 832(%rdi), %zmm13 + vmovdqu64 896(%rdi), %zmm14 + vmovdqu64 960(%rdi), %zmm15 + vmovdqu64 1024(%rdi), %zmm16 + vmovdqu64 1088(%rdi), %zmm17 + vmovdqu64 1152(%rdi), %zmm18 + vmovdqu64 1216(%rdi), %zmm19 + vmovdqu64 1280(%rdi), %zmm20 + vmovdqu64 1344(%rdi), %zmm21 + vmovdqu64 1408(%rdi), %zmm22 + vmovdqu64 1472(%rdi), %zmm23 + vmovdqu64 1536(%rdi), %zmm24 + # Round 0 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm10, %zmm5, %zmm25 + vpternlogq $0x96, %zmm20, %zmm15, %zmm25 + vmovdqu64 %zmm1, %zmm26 + vpternlogq $0x96, %zmm11, %zmm6, %zmm26 + vpternlogq $0x96, %zmm21, %zmm16, %zmm26 + vmovdqu64 %zmm2, %zmm27 + vpternlogq $0x96, %zmm12, %zmm7, %zmm27 + vpternlogq $0x96, %zmm22, %zmm17, %zmm27 + vmovdqu64 %zmm3, %zmm28 + vpternlogq $0x96, %zmm13, %zmm8, %zmm28 + vpternlogq $0x96, %zmm23, %zmm18, %zmm28 + vmovdqu64 %zmm4, %zmm29 + vpternlogq $0x96, %zmm14, %zmm9, %zmm29 + vpternlogq $0x96, %zmm24, %zmm19, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm24, %zmm24 + # Rho - rotate each lane in place + vprolq $0x01, %zmm1, %zmm1 + vprolq $62, %zmm2, %zmm2 + vprolq $28, %zmm3, %zmm3 + vprolq $27, %zmm4, %zmm4 + vprolq $36, %zmm5, %zmm5 + vprolq $44, %zmm6, %zmm6 + vprolq $6, %zmm7, %zmm7 + vprolq $55, %zmm8, %zmm8 + vprolq $20, %zmm9, %zmm9 + vprolq $3, %zmm10, %zmm10 + vprolq $10, %zmm11, %zmm11 + vprolq $43, %zmm12, %zmm12 + vprolq $25, %zmm13, %zmm13 + vprolq $39, %zmm14, %zmm14 + vprolq $41, %zmm15, %zmm15 + vprolq $45, %zmm16, %zmm16 + vprolq $15, %zmm17, %zmm17 + vprolq $21, %zmm18, %zmm18 + vprolq $8, %zmm19, %zmm19 + vprolq $18, %zmm20, %zmm20 + vprolq $2, %zmm21, %zmm21 + vprolq $61, %zmm22, %zmm22 + vprolq $56, %zmm23, %zmm23 + vprolq $14, %zmm24, %zmm24 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm6, %zmm0 + vpternlogq $0xd2, %zmm18, %zmm12, %zmm6 + vpternlogq $0xd2, %zmm24, %zmm18, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm9, %zmm3 + vpternlogq $0xd2, %zmm16, %zmm10, %zmm9 + vpternlogq $0xd2, %zmm22, %zmm16, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm7, %zmm1 + vpternlogq $0xd2, %zmm19, %zmm13, %zmm7 + vpternlogq $0xd2, %zmm20, %zmm19, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm5, %zmm4 + vpternlogq $0xd2, %zmm17, %zmm11, %zmm5 + vpternlogq $0xd2, %zmm23, %zmm17, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm8, %zmm2 + vpternlogq $0xd2, %zmm15, %zmm14, %zmm8 + vpternlogq $0xd2, %zmm21, %zmm15, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + # Iota + vpxorq (%rdx), %zmm0, %zmm0 + # Round 1 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm1, %zmm3, %zmm25 + vpternlogq $0x96, %zmm2, %zmm4, %zmm25 + vmovdqu64 %zmm6, %zmm26 + vpternlogq $0x96, %zmm7, %zmm9, %zmm26 + vpternlogq $0x96, %zmm8, %zmm5, %zmm26 + vmovdqu64 %zmm12, %zmm27 + vpternlogq $0x96, %zmm13, %zmm10, %zmm27 + vpternlogq $0x96, %zmm14, %zmm11, %zmm27 + vmovdqu64 %zmm18, %zmm28 + vpternlogq $0x96, %zmm19, %zmm16, %zmm28 + vpternlogq $0x96, %zmm15, %zmm17, %zmm28 + vmovdqu64 %zmm24, %zmm29 + vpternlogq $0x96, %zmm20, %zmm22, %zmm29 + vpternlogq $0x96, %zmm21, %zmm23, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm21, %zmm21 + # Rho - rotate each lane in place + vprolq $0x01, %zmm6, %zmm6 + vprolq $62, %zmm12, %zmm12 + vprolq $28, %zmm18, %zmm18 + vprolq $27, %zmm24, %zmm24 + vprolq $36, %zmm3, %zmm3 + vprolq $44, %zmm9, %zmm9 + vprolq $6, %zmm10, %zmm10 + vprolq $55, %zmm16, %zmm16 + vprolq $20, %zmm22, %zmm22 + vprolq $3, %zmm1, %zmm1 + vprolq $10, %zmm7, %zmm7 + vprolq $43, %zmm13, %zmm13 + vprolq $25, %zmm19, %zmm19 + vprolq $39, %zmm20, %zmm20 + vprolq $41, %zmm4, %zmm4 + vprolq $45, %zmm5, %zmm5 + vprolq $15, %zmm11, %zmm11 + vprolq $21, %zmm17, %zmm17 + vprolq $8, %zmm23, %zmm23 + vprolq $18, %zmm2, %zmm2 + vprolq $2, %zmm8, %zmm8 + vprolq $61, %zmm14, %zmm14 + vprolq $56, %zmm15, %zmm15 + vprolq $14, %zmm21, %zmm21 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm9, %zmm0 + vpternlogq $0xd2, %zmm17, %zmm13, %zmm9 + vpternlogq $0xd2, %zmm21, %zmm17, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm22, %zmm18 + vpternlogq $0xd2, %zmm5, %zmm1, %zmm22 + vpternlogq $0xd2, %zmm14, %zmm5, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm10, %zmm6 + vpternlogq $0xd2, %zmm23, %zmm19, %zmm10 + vpternlogq $0xd2, %zmm2, %zmm23, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm3, %zmm24 + vpternlogq $0xd2, %zmm11, %zmm7, %zmm3 + vpternlogq $0xd2, %zmm15, %zmm11, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm16, %zmm12 + vpternlogq $0xd2, %zmm4, %zmm20, %zmm16 + vpternlogq $0xd2, %zmm8, %zmm4, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + # Iota + vpxorq 64(%rdx), %zmm0, %zmm0 + # Round 2 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm6, %zmm18, %zmm25 + vpternlogq $0x96, %zmm12, %zmm24, %zmm25 + vmovdqu64 %zmm9, %zmm26 + vpternlogq $0x96, %zmm10, %zmm22, %zmm26 + vpternlogq $0x96, %zmm16, %zmm3, %zmm26 + vmovdqu64 %zmm13, %zmm27 + vpternlogq $0x96, %zmm19, %zmm1, %zmm27 + vpternlogq $0x96, %zmm20, %zmm7, %zmm27 + vmovdqu64 %zmm17, %zmm28 + vpternlogq $0x96, %zmm23, %zmm5, %zmm28 + vpternlogq $0x96, %zmm4, %zmm11, %zmm28 + vmovdqu64 %zmm21, %zmm29 + vpternlogq $0x96, %zmm2, %zmm14, %zmm29 + vpternlogq $0x96, %zmm8, %zmm15, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm8, %zmm8 + # Rho - rotate each lane in place + vprolq $0x01, %zmm9, %zmm9 + vprolq $62, %zmm13, %zmm13 + vprolq $28, %zmm17, %zmm17 + vprolq $27, %zmm21, %zmm21 + vprolq $36, %zmm18, %zmm18 + vprolq $44, %zmm22, %zmm22 + vprolq $6, %zmm1, %zmm1 + vprolq $55, %zmm5, %zmm5 + vprolq $20, %zmm14, %zmm14 + vprolq $3, %zmm6, %zmm6 + vprolq $10, %zmm10, %zmm10 + vprolq $43, %zmm19, %zmm19 + vprolq $25, %zmm23, %zmm23 + vprolq $39, %zmm2, %zmm2 + vprolq $41, %zmm24, %zmm24 + vprolq $45, %zmm3, %zmm3 + vprolq $15, %zmm7, %zmm7 + vprolq $21, %zmm11, %zmm11 + vprolq $8, %zmm15, %zmm15 + vprolq $18, %zmm12, %zmm12 + vprolq $2, %zmm16, %zmm16 + vprolq $61, %zmm20, %zmm20 + vprolq $56, %zmm4, %zmm4 + vprolq $14, %zmm8, %zmm8 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm22, %zmm0 + vpternlogq $0xd2, %zmm11, %zmm19, %zmm22 + vpternlogq $0xd2, %zmm8, %zmm11, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm14, %zmm17 + vpternlogq $0xd2, %zmm3, %zmm6, %zmm14 + vpternlogq $0xd2, %zmm20, %zmm3, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm1, %zmm9 + vpternlogq $0xd2, %zmm15, %zmm23, %zmm1 + vpternlogq $0xd2, %zmm12, %zmm15, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm18, %zmm21 + vpternlogq $0xd2, %zmm7, %zmm10, %zmm18 + vpternlogq $0xd2, %zmm4, %zmm7, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm5, %zmm13 + vpternlogq $0xd2, %zmm24, %zmm2, %zmm5 + vpternlogq $0xd2, %zmm16, %zmm24, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + # Iota + vpxorq 128(%rdx), %zmm0, %zmm0 + # Round 3 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm9, %zmm17, %zmm25 + vpternlogq $0x96, %zmm13, %zmm21, %zmm25 + vmovdqu64 %zmm22, %zmm26 + vpternlogq $0x96, %zmm1, %zmm14, %zmm26 + vpternlogq $0x96, %zmm5, %zmm18, %zmm26 + vmovdqu64 %zmm19, %zmm27 + vpternlogq $0x96, %zmm23, %zmm6, %zmm27 + vpternlogq $0x96, %zmm2, %zmm10, %zmm27 + vmovdqu64 %zmm11, %zmm28 + vpternlogq $0x96, %zmm15, %zmm3, %zmm28 + vpternlogq $0x96, %zmm24, %zmm7, %zmm28 + vmovdqu64 %zmm8, %zmm29 + vpternlogq $0x96, %zmm12, %zmm20, %zmm29 + vpternlogq $0x96, %zmm16, %zmm4, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm16, %zmm16 + # Rho - rotate each lane in place + vprolq $0x01, %zmm22, %zmm22 + vprolq $62, %zmm19, %zmm19 + vprolq $28, %zmm11, %zmm11 + vprolq $27, %zmm8, %zmm8 + vprolq $36, %zmm17, %zmm17 + vprolq $44, %zmm14, %zmm14 + vprolq $6, %zmm6, %zmm6 + vprolq $55, %zmm3, %zmm3 + vprolq $20, %zmm20, %zmm20 + vprolq $3, %zmm9, %zmm9 + vprolq $10, %zmm1, %zmm1 + vprolq $43, %zmm23, %zmm23 + vprolq $25, %zmm15, %zmm15 + vprolq $39, %zmm12, %zmm12 + vprolq $41, %zmm21, %zmm21 + vprolq $45, %zmm18, %zmm18 + vprolq $15, %zmm10, %zmm10 + vprolq $21, %zmm7, %zmm7 + vprolq $8, %zmm4, %zmm4 + vprolq $18, %zmm13, %zmm13 + vprolq $2, %zmm5, %zmm5 + vprolq $61, %zmm2, %zmm2 + vprolq $56, %zmm24, %zmm24 + vprolq $14, %zmm16, %zmm16 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm14, %zmm0 + vpternlogq $0xd2, %zmm7, %zmm23, %zmm14 + vpternlogq $0xd2, %zmm16, %zmm7, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm20, %zmm11 + vpternlogq $0xd2, %zmm18, %zmm9, %zmm20 + vpternlogq $0xd2, %zmm2, %zmm18, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm6, %zmm22 + vpternlogq $0xd2, %zmm4, %zmm15, %zmm6 + vpternlogq $0xd2, %zmm13, %zmm4, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm17, %zmm8 + vpternlogq $0xd2, %zmm10, %zmm1, %zmm17 + vpternlogq $0xd2, %zmm24, %zmm10, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm3, %zmm19 + vpternlogq $0xd2, %zmm21, %zmm12, %zmm3 + vpternlogq $0xd2, %zmm5, %zmm21, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + # Iota + vpxorq 192(%rdx), %zmm0, %zmm0 + # Round 4 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm22, %zmm11, %zmm25 + vpternlogq $0x96, %zmm19, %zmm8, %zmm25 + vmovdqu64 %zmm14, %zmm26 + vpternlogq $0x96, %zmm6, %zmm20, %zmm26 + vpternlogq $0x96, %zmm3, %zmm17, %zmm26 + vmovdqu64 %zmm23, %zmm27 + vpternlogq $0x96, %zmm15, %zmm9, %zmm27 + vpternlogq $0x96, %zmm12, %zmm1, %zmm27 + vmovdqu64 %zmm7, %zmm28 + vpternlogq $0x96, %zmm4, %zmm18, %zmm28 + vpternlogq $0x96, %zmm21, %zmm10, %zmm28 + vmovdqu64 %zmm16, %zmm29 + vpternlogq $0x96, %zmm13, %zmm2, %zmm29 + vpternlogq $0x96, %zmm5, %zmm24, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm5, %zmm5 + # Rho - rotate each lane in place + vprolq $0x01, %zmm14, %zmm14 + vprolq $62, %zmm23, %zmm23 + vprolq $28, %zmm7, %zmm7 + vprolq $27, %zmm16, %zmm16 + vprolq $36, %zmm11, %zmm11 + vprolq $44, %zmm20, %zmm20 + vprolq $6, %zmm9, %zmm9 + vprolq $55, %zmm18, %zmm18 + vprolq $20, %zmm2, %zmm2 + vprolq $3, %zmm22, %zmm22 + vprolq $10, %zmm6, %zmm6 + vprolq $43, %zmm15, %zmm15 + vprolq $25, %zmm4, %zmm4 + vprolq $39, %zmm13, %zmm13 + vprolq $41, %zmm8, %zmm8 + vprolq $45, %zmm17, %zmm17 + vprolq $15, %zmm1, %zmm1 + vprolq $21, %zmm10, %zmm10 + vprolq $8, %zmm24, %zmm24 + vprolq $18, %zmm19, %zmm19 + vprolq $2, %zmm3, %zmm3 + vprolq $61, %zmm12, %zmm12 + vprolq $56, %zmm21, %zmm21 + vprolq $14, %zmm5, %zmm5 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm20, %zmm0 + vpternlogq $0xd2, %zmm10, %zmm15, %zmm20 + vpternlogq $0xd2, %zmm5, %zmm10, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm2, %zmm7 + vpternlogq $0xd2, %zmm17, %zmm22, %zmm2 + vpternlogq $0xd2, %zmm12, %zmm17, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm9, %zmm14 + vpternlogq $0xd2, %zmm24, %zmm4, %zmm9 + vpternlogq $0xd2, %zmm19, %zmm24, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm11, %zmm16 + vpternlogq $0xd2, %zmm1, %zmm6, %zmm11 + vpternlogq $0xd2, %zmm21, %zmm1, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm18, %zmm23 + vpternlogq $0xd2, %zmm8, %zmm13, %zmm18 + vpternlogq $0xd2, %zmm3, %zmm8, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + # Iota + vpxorq 256(%rdx), %zmm0, %zmm0 + # Round 5 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm14, %zmm7, %zmm25 + vpternlogq $0x96, %zmm23, %zmm16, %zmm25 + vmovdqu64 %zmm20, %zmm26 + vpternlogq $0x96, %zmm9, %zmm2, %zmm26 + vpternlogq $0x96, %zmm18, %zmm11, %zmm26 + vmovdqu64 %zmm15, %zmm27 + vpternlogq $0x96, %zmm4, %zmm22, %zmm27 + vpternlogq $0x96, %zmm13, %zmm6, %zmm27 + vmovdqu64 %zmm10, %zmm28 + vpternlogq $0x96, %zmm24, %zmm17, %zmm28 + vpternlogq $0x96, %zmm8, %zmm1, %zmm28 + vmovdqu64 %zmm5, %zmm29 + vpternlogq $0x96, %zmm19, %zmm12, %zmm29 + vpternlogq $0x96, %zmm3, %zmm21, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm3, %zmm3 + # Rho - rotate each lane in place + vprolq $0x01, %zmm20, %zmm20 + vprolq $62, %zmm15, %zmm15 + vprolq $28, %zmm10, %zmm10 + vprolq $27, %zmm5, %zmm5 + vprolq $36, %zmm7, %zmm7 + vprolq $44, %zmm2, %zmm2 + vprolq $6, %zmm22, %zmm22 + vprolq $55, %zmm17, %zmm17 + vprolq $20, %zmm12, %zmm12 + vprolq $3, %zmm14, %zmm14 + vprolq $10, %zmm9, %zmm9 + vprolq $43, %zmm4, %zmm4 + vprolq $25, %zmm24, %zmm24 + vprolq $39, %zmm19, %zmm19 + vprolq $41, %zmm16, %zmm16 + vprolq $45, %zmm11, %zmm11 + vprolq $15, %zmm6, %zmm6 + vprolq $21, %zmm1, %zmm1 + vprolq $8, %zmm21, %zmm21 + vprolq $18, %zmm23, %zmm23 + vprolq $2, %zmm18, %zmm18 + vprolq $61, %zmm13, %zmm13 + vprolq $56, %zmm8, %zmm8 + vprolq $14, %zmm3, %zmm3 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm2, %zmm0 + vpternlogq $0xd2, %zmm1, %zmm4, %zmm2 + vpternlogq $0xd2, %zmm3, %zmm1, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm12, %zmm10 + vpternlogq $0xd2, %zmm11, %zmm14, %zmm12 + vpternlogq $0xd2, %zmm13, %zmm11, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm22, %zmm20 + vpternlogq $0xd2, %zmm21, %zmm24, %zmm22 + vpternlogq $0xd2, %zmm23, %zmm21, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm7, %zmm5 + vpternlogq $0xd2, %zmm6, %zmm9, %zmm7 + vpternlogq $0xd2, %zmm8, %zmm6, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm17, %zmm15 + vpternlogq $0xd2, %zmm16, %zmm19, %zmm17 + vpternlogq $0xd2, %zmm18, %zmm16, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + # Iota + vpxorq 320(%rdx), %zmm0, %zmm0 + # Round 6 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm20, %zmm10, %zmm25 + vpternlogq $0x96, %zmm15, %zmm5, %zmm25 + vmovdqu64 %zmm2, %zmm26 + vpternlogq $0x96, %zmm22, %zmm12, %zmm26 + vpternlogq $0x96, %zmm17, %zmm7, %zmm26 + vmovdqu64 %zmm4, %zmm27 + vpternlogq $0x96, %zmm24, %zmm14, %zmm27 + vpternlogq $0x96, %zmm19, %zmm9, %zmm27 + vmovdqu64 %zmm1, %zmm28 + vpternlogq $0x96, %zmm21, %zmm11, %zmm28 + vpternlogq $0x96, %zmm16, %zmm6, %zmm28 + vmovdqu64 %zmm3, %zmm29 + vpternlogq $0x96, %zmm23, %zmm13, %zmm29 + vpternlogq $0x96, %zmm18, %zmm8, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm18, %zmm18 + # Rho - rotate each lane in place + vprolq $0x01, %zmm2, %zmm2 + vprolq $62, %zmm4, %zmm4 + vprolq $28, %zmm1, %zmm1 + vprolq $27, %zmm3, %zmm3 + vprolq $36, %zmm10, %zmm10 + vprolq $44, %zmm12, %zmm12 + vprolq $6, %zmm14, %zmm14 + vprolq $55, %zmm11, %zmm11 + vprolq $20, %zmm13, %zmm13 + vprolq $3, %zmm20, %zmm20 + vprolq $10, %zmm22, %zmm22 + vprolq $43, %zmm24, %zmm24 + vprolq $25, %zmm21, %zmm21 + vprolq $39, %zmm23, %zmm23 + vprolq $41, %zmm5, %zmm5 + vprolq $45, %zmm7, %zmm7 + vprolq $15, %zmm9, %zmm9 + vprolq $21, %zmm6, %zmm6 + vprolq $8, %zmm8, %zmm8 + vprolq $18, %zmm15, %zmm15 + vprolq $2, %zmm17, %zmm17 + vprolq $61, %zmm19, %zmm19 + vprolq $56, %zmm16, %zmm16 + vprolq $14, %zmm18, %zmm18 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm12, %zmm0 + vpternlogq $0xd2, %zmm6, %zmm24, %zmm12 + vpternlogq $0xd2, %zmm18, %zmm6, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm13, %zmm1 + vpternlogq $0xd2, %zmm7, %zmm20, %zmm13 + vpternlogq $0xd2, %zmm19, %zmm7, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm14, %zmm2 + vpternlogq $0xd2, %zmm8, %zmm21, %zmm14 + vpternlogq $0xd2, %zmm15, %zmm8, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm10, %zmm3 + vpternlogq $0xd2, %zmm9, %zmm22, %zmm10 + vpternlogq $0xd2, %zmm16, %zmm9, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm11, %zmm4 + vpternlogq $0xd2, %zmm5, %zmm23, %zmm11 + vpternlogq $0xd2, %zmm17, %zmm5, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + # Iota + vpxorq 384(%rdx), %zmm0, %zmm0 + # Round 7 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm2, %zmm1, %zmm25 + vpternlogq $0x96, %zmm4, %zmm3, %zmm25 + vmovdqu64 %zmm12, %zmm26 + vpternlogq $0x96, %zmm14, %zmm13, %zmm26 + vpternlogq $0x96, %zmm11, %zmm10, %zmm26 + vmovdqu64 %zmm24, %zmm27 + vpternlogq $0x96, %zmm21, %zmm20, %zmm27 + vpternlogq $0x96, %zmm23, %zmm22, %zmm27 + vmovdqu64 %zmm6, %zmm28 + vpternlogq $0x96, %zmm8, %zmm7, %zmm28 + vpternlogq $0x96, %zmm5, %zmm9, %zmm28 + vmovdqu64 %zmm18, %zmm29 + vpternlogq $0x96, %zmm15, %zmm19, %zmm29 + vpternlogq $0x96, %zmm17, %zmm16, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm17, %zmm17 + # Rho - rotate each lane in place + vprolq $0x01, %zmm12, %zmm12 + vprolq $62, %zmm24, %zmm24 + vprolq $28, %zmm6, %zmm6 + vprolq $27, %zmm18, %zmm18 + vprolq $36, %zmm1, %zmm1 + vprolq $44, %zmm13, %zmm13 + vprolq $6, %zmm20, %zmm20 + vprolq $55, %zmm7, %zmm7 + vprolq $20, %zmm19, %zmm19 + vprolq $3, %zmm2, %zmm2 + vprolq $10, %zmm14, %zmm14 + vprolq $43, %zmm21, %zmm21 + vprolq $25, %zmm8, %zmm8 + vprolq $39, %zmm15, %zmm15 + vprolq $41, %zmm3, %zmm3 + vprolq $45, %zmm10, %zmm10 + vprolq $15, %zmm22, %zmm22 + vprolq $21, %zmm9, %zmm9 + vprolq $8, %zmm16, %zmm16 + vprolq $18, %zmm4, %zmm4 + vprolq $2, %zmm11, %zmm11 + vprolq $61, %zmm23, %zmm23 + vprolq $56, %zmm5, %zmm5 + vprolq $14, %zmm17, %zmm17 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm13, %zmm0 + vpternlogq $0xd2, %zmm9, %zmm21, %zmm13 + vpternlogq $0xd2, %zmm17, %zmm9, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm19, %zmm6 + vpternlogq $0xd2, %zmm10, %zmm2, %zmm19 + vpternlogq $0xd2, %zmm23, %zmm10, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm20, %zmm12 + vpternlogq $0xd2, %zmm16, %zmm8, %zmm20 + vpternlogq $0xd2, %zmm4, %zmm16, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm1, %zmm18 + vpternlogq $0xd2, %zmm22, %zmm14, %zmm1 + vpternlogq $0xd2, %zmm5, %zmm22, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm7, %zmm24 + vpternlogq $0xd2, %zmm3, %zmm15, %zmm7 + vpternlogq $0xd2, %zmm11, %zmm3, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + # Iota + vpxorq 448(%rdx), %zmm0, %zmm0 + # Round 8 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm12, %zmm6, %zmm25 + vpternlogq $0x96, %zmm24, %zmm18, %zmm25 + vmovdqu64 %zmm13, %zmm26 + vpternlogq $0x96, %zmm20, %zmm19, %zmm26 + vpternlogq $0x96, %zmm7, %zmm1, %zmm26 + vmovdqu64 %zmm21, %zmm27 + vpternlogq $0x96, %zmm8, %zmm2, %zmm27 + vpternlogq $0x96, %zmm15, %zmm14, %zmm27 + vmovdqu64 %zmm9, %zmm28 + vpternlogq $0x96, %zmm16, %zmm10, %zmm28 + vpternlogq $0x96, %zmm3, %zmm22, %zmm28 + vmovdqu64 %zmm17, %zmm29 + vpternlogq $0x96, %zmm4, %zmm23, %zmm29 + vpternlogq $0x96, %zmm11, %zmm5, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm11, %zmm11 + # Rho - rotate each lane in place + vprolq $0x01, %zmm13, %zmm13 + vprolq $62, %zmm21, %zmm21 + vprolq $28, %zmm9, %zmm9 + vprolq $27, %zmm17, %zmm17 + vprolq $36, %zmm6, %zmm6 + vprolq $44, %zmm19, %zmm19 + vprolq $6, %zmm2, %zmm2 + vprolq $55, %zmm10, %zmm10 + vprolq $20, %zmm23, %zmm23 + vprolq $3, %zmm12, %zmm12 + vprolq $10, %zmm20, %zmm20 + vprolq $43, %zmm8, %zmm8 + vprolq $25, %zmm16, %zmm16 + vprolq $39, %zmm4, %zmm4 + vprolq $41, %zmm18, %zmm18 + vprolq $45, %zmm1, %zmm1 + vprolq $15, %zmm14, %zmm14 + vprolq $21, %zmm22, %zmm22 + vprolq $8, %zmm5, %zmm5 + vprolq $18, %zmm24, %zmm24 + vprolq $2, %zmm7, %zmm7 + vprolq $61, %zmm15, %zmm15 + vprolq $56, %zmm3, %zmm3 + vprolq $14, %zmm11, %zmm11 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm19, %zmm0 + vpternlogq $0xd2, %zmm22, %zmm8, %zmm19 + vpternlogq $0xd2, %zmm11, %zmm22, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm23, %zmm9 + vpternlogq $0xd2, %zmm1, %zmm12, %zmm23 + vpternlogq $0xd2, %zmm15, %zmm1, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm2, %zmm13 + vpternlogq $0xd2, %zmm5, %zmm16, %zmm2 + vpternlogq $0xd2, %zmm24, %zmm5, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm6, %zmm17 + vpternlogq $0xd2, %zmm14, %zmm20, %zmm6 + vpternlogq $0xd2, %zmm3, %zmm14, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm10, %zmm21 + vpternlogq $0xd2, %zmm18, %zmm4, %zmm10 + vpternlogq $0xd2, %zmm7, %zmm18, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + # Iota + vpxorq 512(%rdx), %zmm0, %zmm0 + # Round 9 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm13, %zmm9, %zmm25 + vpternlogq $0x96, %zmm21, %zmm17, %zmm25 + vmovdqu64 %zmm19, %zmm26 + vpternlogq $0x96, %zmm2, %zmm23, %zmm26 + vpternlogq $0x96, %zmm10, %zmm6, %zmm26 + vmovdqu64 %zmm8, %zmm27 + vpternlogq $0x96, %zmm16, %zmm12, %zmm27 + vpternlogq $0x96, %zmm4, %zmm20, %zmm27 + vmovdqu64 %zmm22, %zmm28 + vpternlogq $0x96, %zmm5, %zmm1, %zmm28 + vpternlogq $0x96, %zmm18, %zmm14, %zmm28 + vmovdqu64 %zmm11, %zmm29 + vpternlogq $0x96, %zmm24, %zmm15, %zmm29 + vpternlogq $0x96, %zmm7, %zmm3, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm7, %zmm7 + # Rho - rotate each lane in place + vprolq $0x01, %zmm19, %zmm19 + vprolq $62, %zmm8, %zmm8 + vprolq $28, %zmm22, %zmm22 + vprolq $27, %zmm11, %zmm11 + vprolq $36, %zmm9, %zmm9 + vprolq $44, %zmm23, %zmm23 + vprolq $6, %zmm12, %zmm12 + vprolq $55, %zmm1, %zmm1 + vprolq $20, %zmm15, %zmm15 + vprolq $3, %zmm13, %zmm13 + vprolq $10, %zmm2, %zmm2 + vprolq $43, %zmm16, %zmm16 + vprolq $25, %zmm5, %zmm5 + vprolq $39, %zmm24, %zmm24 + vprolq $41, %zmm17, %zmm17 + vprolq $45, %zmm6, %zmm6 + vprolq $15, %zmm20, %zmm20 + vprolq $21, %zmm14, %zmm14 + vprolq $8, %zmm3, %zmm3 + vprolq $18, %zmm21, %zmm21 + vprolq $2, %zmm10, %zmm10 + vprolq $61, %zmm4, %zmm4 + vprolq $56, %zmm18, %zmm18 + vprolq $14, %zmm7, %zmm7 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm23, %zmm0 + vpternlogq $0xd2, %zmm14, %zmm16, %zmm23 + vpternlogq $0xd2, %zmm7, %zmm14, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm15, %zmm22 + vpternlogq $0xd2, %zmm6, %zmm13, %zmm15 + vpternlogq $0xd2, %zmm4, %zmm6, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm12, %zmm19 + vpternlogq $0xd2, %zmm3, %zmm5, %zmm12 + vpternlogq $0xd2, %zmm21, %zmm3, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm9, %zmm11 + vpternlogq $0xd2, %zmm20, %zmm2, %zmm9 + vpternlogq $0xd2, %zmm18, %zmm20, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm1, %zmm8 + vpternlogq $0xd2, %zmm17, %zmm24, %zmm1 + vpternlogq $0xd2, %zmm10, %zmm17, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + # Iota + vpxorq 576(%rdx), %zmm0, %zmm0 + # Round 10 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm19, %zmm22, %zmm25 + vpternlogq $0x96, %zmm8, %zmm11, %zmm25 + vmovdqu64 %zmm23, %zmm26 + vpternlogq $0x96, %zmm12, %zmm15, %zmm26 + vpternlogq $0x96, %zmm1, %zmm9, %zmm26 + vmovdqu64 %zmm16, %zmm27 + vpternlogq $0x96, %zmm5, %zmm13, %zmm27 + vpternlogq $0x96, %zmm24, %zmm2, %zmm27 + vmovdqu64 %zmm14, %zmm28 + vpternlogq $0x96, %zmm3, %zmm6, %zmm28 + vpternlogq $0x96, %zmm17, %zmm20, %zmm28 + vmovdqu64 %zmm7, %zmm29 + vpternlogq $0x96, %zmm21, %zmm4, %zmm29 + vpternlogq $0x96, %zmm10, %zmm18, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm10, %zmm10 + # Rho - rotate each lane in place + vprolq $0x01, %zmm23, %zmm23 + vprolq $62, %zmm16, %zmm16 + vprolq $28, %zmm14, %zmm14 + vprolq $27, %zmm7, %zmm7 + vprolq $36, %zmm22, %zmm22 + vprolq $44, %zmm15, %zmm15 + vprolq $6, %zmm13, %zmm13 + vprolq $55, %zmm6, %zmm6 + vprolq $20, %zmm4, %zmm4 + vprolq $3, %zmm19, %zmm19 + vprolq $10, %zmm12, %zmm12 + vprolq $43, %zmm5, %zmm5 + vprolq $25, %zmm3, %zmm3 + vprolq $39, %zmm21, %zmm21 + vprolq $41, %zmm11, %zmm11 + vprolq $45, %zmm9, %zmm9 + vprolq $15, %zmm2, %zmm2 + vprolq $21, %zmm20, %zmm20 + vprolq $8, %zmm18, %zmm18 + vprolq $18, %zmm8, %zmm8 + vprolq $2, %zmm1, %zmm1 + vprolq $61, %zmm24, %zmm24 + vprolq $56, %zmm17, %zmm17 + vprolq $14, %zmm10, %zmm10 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm15, %zmm0 + vpternlogq $0xd2, %zmm20, %zmm5, %zmm15 + vpternlogq $0xd2, %zmm10, %zmm20, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm4, %zmm14 + vpternlogq $0xd2, %zmm9, %zmm19, %zmm4 + vpternlogq $0xd2, %zmm24, %zmm9, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm13, %zmm23 + vpternlogq $0xd2, %zmm18, %zmm3, %zmm13 + vpternlogq $0xd2, %zmm8, %zmm18, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm22, %zmm7 + vpternlogq $0xd2, %zmm2, %zmm12, %zmm22 + vpternlogq $0xd2, %zmm17, %zmm2, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm6, %zmm16 + vpternlogq $0xd2, %zmm11, %zmm21, %zmm6 + vpternlogq $0xd2, %zmm1, %zmm11, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + # Iota + vpxorq 640(%rdx), %zmm0, %zmm0 + # Round 11 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm23, %zmm14, %zmm25 + vpternlogq $0x96, %zmm16, %zmm7, %zmm25 + vmovdqu64 %zmm15, %zmm26 + vpternlogq $0x96, %zmm13, %zmm4, %zmm26 + vpternlogq $0x96, %zmm6, %zmm22, %zmm26 + vmovdqu64 %zmm5, %zmm27 + vpternlogq $0x96, %zmm3, %zmm19, %zmm27 + vpternlogq $0x96, %zmm21, %zmm12, %zmm27 + vmovdqu64 %zmm20, %zmm28 + vpternlogq $0x96, %zmm18, %zmm9, %zmm28 + vpternlogq $0x96, %zmm11, %zmm2, %zmm28 + vmovdqu64 %zmm10, %zmm29 + vpternlogq $0x96, %zmm8, %zmm24, %zmm29 + vpternlogq $0x96, %zmm1, %zmm17, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm1, %zmm1 + # Rho - rotate each lane in place + vprolq $0x01, %zmm15, %zmm15 + vprolq $62, %zmm5, %zmm5 + vprolq $28, %zmm20, %zmm20 + vprolq $27, %zmm10, %zmm10 + vprolq $36, %zmm14, %zmm14 + vprolq $44, %zmm4, %zmm4 + vprolq $6, %zmm19, %zmm19 + vprolq $55, %zmm9, %zmm9 + vprolq $20, %zmm24, %zmm24 + vprolq $3, %zmm23, %zmm23 + vprolq $10, %zmm13, %zmm13 + vprolq $43, %zmm3, %zmm3 + vprolq $25, %zmm18, %zmm18 + vprolq $39, %zmm8, %zmm8 + vprolq $41, %zmm7, %zmm7 + vprolq $45, %zmm22, %zmm22 + vprolq $15, %zmm12, %zmm12 + vprolq $21, %zmm2, %zmm2 + vprolq $8, %zmm17, %zmm17 + vprolq $18, %zmm16, %zmm16 + vprolq $2, %zmm6, %zmm6 + vprolq $61, %zmm21, %zmm21 + vprolq $56, %zmm11, %zmm11 + vprolq $14, %zmm1, %zmm1 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm4, %zmm0 + vpternlogq $0xd2, %zmm2, %zmm3, %zmm4 + vpternlogq $0xd2, %zmm1, %zmm2, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm24, %zmm20 + vpternlogq $0xd2, %zmm22, %zmm23, %zmm24 + vpternlogq $0xd2, %zmm21, %zmm22, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm19, %zmm15 + vpternlogq $0xd2, %zmm17, %zmm18, %zmm19 + vpternlogq $0xd2, %zmm16, %zmm17, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm14, %zmm10 + vpternlogq $0xd2, %zmm12, %zmm13, %zmm14 + vpternlogq $0xd2, %zmm11, %zmm12, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm9, %zmm5 + vpternlogq $0xd2, %zmm7, %zmm8, %zmm9 + vpternlogq $0xd2, %zmm6, %zmm7, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + # Iota + vpxorq 704(%rdx), %zmm0, %zmm0 + # Round 12 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm15, %zmm20, %zmm25 + vpternlogq $0x96, %zmm5, %zmm10, %zmm25 + vmovdqu64 %zmm4, %zmm26 + vpternlogq $0x96, %zmm19, %zmm24, %zmm26 + vpternlogq $0x96, %zmm9, %zmm14, %zmm26 + vmovdqu64 %zmm3, %zmm27 + vpternlogq $0x96, %zmm18, %zmm23, %zmm27 + vpternlogq $0x96, %zmm8, %zmm13, %zmm27 + vmovdqu64 %zmm2, %zmm28 + vpternlogq $0x96, %zmm17, %zmm22, %zmm28 + vpternlogq $0x96, %zmm7, %zmm12, %zmm28 + vmovdqu64 %zmm1, %zmm29 + vpternlogq $0x96, %zmm16, %zmm21, %zmm29 + vpternlogq $0x96, %zmm6, %zmm11, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm6, %zmm6 + # Rho - rotate each lane in place + vprolq $0x01, %zmm4, %zmm4 + vprolq $62, %zmm3, %zmm3 + vprolq $28, %zmm2, %zmm2 + vprolq $27, %zmm1, %zmm1 + vprolq $36, %zmm20, %zmm20 + vprolq $44, %zmm24, %zmm24 + vprolq $6, %zmm23, %zmm23 + vprolq $55, %zmm22, %zmm22 + vprolq $20, %zmm21, %zmm21 + vprolq $3, %zmm15, %zmm15 + vprolq $10, %zmm19, %zmm19 + vprolq $43, %zmm18, %zmm18 + vprolq $25, %zmm17, %zmm17 + vprolq $39, %zmm16, %zmm16 + vprolq $41, %zmm10, %zmm10 + vprolq $45, %zmm14, %zmm14 + vprolq $15, %zmm13, %zmm13 + vprolq $21, %zmm12, %zmm12 + vprolq $8, %zmm11, %zmm11 + vprolq $18, %zmm5, %zmm5 + vprolq $2, %zmm9, %zmm9 + vprolq $61, %zmm8, %zmm8 + vprolq $56, %zmm7, %zmm7 + vprolq $14, %zmm6, %zmm6 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm24, %zmm0 + vpternlogq $0xd2, %zmm12, %zmm18, %zmm24 + vpternlogq $0xd2, %zmm6, %zmm12, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm21, %zmm2 + vpternlogq $0xd2, %zmm14, %zmm15, %zmm21 + vpternlogq $0xd2, %zmm8, %zmm14, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm23, %zmm4 + vpternlogq $0xd2, %zmm11, %zmm17, %zmm23 + vpternlogq $0xd2, %zmm5, %zmm11, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm20, %zmm1 + vpternlogq $0xd2, %zmm13, %zmm19, %zmm20 + vpternlogq $0xd2, %zmm7, %zmm13, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm22, %zmm3 + vpternlogq $0xd2, %zmm10, %zmm16, %zmm22 + vpternlogq $0xd2, %zmm9, %zmm10, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + # Iota + vpxorq 768(%rdx), %zmm0, %zmm0 + # Round 13 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm4, %zmm2, %zmm25 + vpternlogq $0x96, %zmm3, %zmm1, %zmm25 + vmovdqu64 %zmm24, %zmm26 + vpternlogq $0x96, %zmm23, %zmm21, %zmm26 + vpternlogq $0x96, %zmm22, %zmm20, %zmm26 + vmovdqu64 %zmm18, %zmm27 + vpternlogq $0x96, %zmm17, %zmm15, %zmm27 + vpternlogq $0x96, %zmm16, %zmm19, %zmm27 + vmovdqu64 %zmm12, %zmm28 + vpternlogq $0x96, %zmm11, %zmm14, %zmm28 + vpternlogq $0x96, %zmm10, %zmm13, %zmm28 + vmovdqu64 %zmm6, %zmm29 + vpternlogq $0x96, %zmm5, %zmm8, %zmm29 + vpternlogq $0x96, %zmm9, %zmm7, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm9, %zmm9 + # Rho - rotate each lane in place + vprolq $0x01, %zmm24, %zmm24 + vprolq $62, %zmm18, %zmm18 + vprolq $28, %zmm12, %zmm12 + vprolq $27, %zmm6, %zmm6 + vprolq $36, %zmm2, %zmm2 + vprolq $44, %zmm21, %zmm21 + vprolq $6, %zmm15, %zmm15 + vprolq $55, %zmm14, %zmm14 + vprolq $20, %zmm8, %zmm8 + vprolq $3, %zmm4, %zmm4 + vprolq $10, %zmm23, %zmm23 + vprolq $43, %zmm17, %zmm17 + vprolq $25, %zmm11, %zmm11 + vprolq $39, %zmm5, %zmm5 + vprolq $41, %zmm1, %zmm1 + vprolq $45, %zmm20, %zmm20 + vprolq $15, %zmm19, %zmm19 + vprolq $21, %zmm13, %zmm13 + vprolq $8, %zmm7, %zmm7 + vprolq $18, %zmm3, %zmm3 + vprolq $2, %zmm22, %zmm22 + vprolq $61, %zmm16, %zmm16 + vprolq $56, %zmm10, %zmm10 + vprolq $14, %zmm9, %zmm9 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm21, %zmm0 + vpternlogq $0xd2, %zmm13, %zmm17, %zmm21 + vpternlogq $0xd2, %zmm9, %zmm13, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm8, %zmm12 + vpternlogq $0xd2, %zmm20, %zmm4, %zmm8 + vpternlogq $0xd2, %zmm16, %zmm20, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm15, %zmm24 + vpternlogq $0xd2, %zmm7, %zmm11, %zmm15 + vpternlogq $0xd2, %zmm3, %zmm7, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm2, %zmm6 + vpternlogq $0xd2, %zmm19, %zmm23, %zmm2 + vpternlogq $0xd2, %zmm10, %zmm19, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm14, %zmm18 + vpternlogq $0xd2, %zmm1, %zmm5, %zmm14 + vpternlogq $0xd2, %zmm22, %zmm1, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + # Iota + vpxorq 832(%rdx), %zmm0, %zmm0 + # Round 14 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm24, %zmm12, %zmm25 + vpternlogq $0x96, %zmm18, %zmm6, %zmm25 + vmovdqu64 %zmm21, %zmm26 + vpternlogq $0x96, %zmm15, %zmm8, %zmm26 + vpternlogq $0x96, %zmm14, %zmm2, %zmm26 + vmovdqu64 %zmm17, %zmm27 + vpternlogq $0x96, %zmm11, %zmm4, %zmm27 + vpternlogq $0x96, %zmm5, %zmm23, %zmm27 + vmovdqu64 %zmm13, %zmm28 + vpternlogq $0x96, %zmm7, %zmm20, %zmm28 + vpternlogq $0x96, %zmm1, %zmm19, %zmm28 + vmovdqu64 %zmm9, %zmm29 + vpternlogq $0x96, %zmm3, %zmm16, %zmm29 + vpternlogq $0x96, %zmm22, %zmm10, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm22, %zmm22 + # Rho - rotate each lane in place + vprolq $0x01, %zmm21, %zmm21 + vprolq $62, %zmm17, %zmm17 + vprolq $28, %zmm13, %zmm13 + vprolq $27, %zmm9, %zmm9 + vprolq $36, %zmm12, %zmm12 + vprolq $44, %zmm8, %zmm8 + vprolq $6, %zmm4, %zmm4 + vprolq $55, %zmm20, %zmm20 + vprolq $20, %zmm16, %zmm16 + vprolq $3, %zmm24, %zmm24 + vprolq $10, %zmm15, %zmm15 + vprolq $43, %zmm11, %zmm11 + vprolq $25, %zmm7, %zmm7 + vprolq $39, %zmm3, %zmm3 + vprolq $41, %zmm6, %zmm6 + vprolq $45, %zmm2, %zmm2 + vprolq $15, %zmm23, %zmm23 + vprolq $21, %zmm19, %zmm19 + vprolq $8, %zmm10, %zmm10 + vprolq $18, %zmm18, %zmm18 + vprolq $2, %zmm14, %zmm14 + vprolq $61, %zmm5, %zmm5 + vprolq $56, %zmm1, %zmm1 + vprolq $14, %zmm22, %zmm22 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm8, %zmm0 + vpternlogq $0xd2, %zmm19, %zmm11, %zmm8 + vpternlogq $0xd2, %zmm22, %zmm19, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm16, %zmm13 + vpternlogq $0xd2, %zmm2, %zmm24, %zmm16 + vpternlogq $0xd2, %zmm5, %zmm2, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm4, %zmm21 + vpternlogq $0xd2, %zmm10, %zmm7, %zmm4 + vpternlogq $0xd2, %zmm18, %zmm10, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm12, %zmm9 + vpternlogq $0xd2, %zmm23, %zmm15, %zmm12 + vpternlogq $0xd2, %zmm1, %zmm23, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm20, %zmm17 + vpternlogq $0xd2, %zmm6, %zmm3, %zmm20 + vpternlogq $0xd2, %zmm14, %zmm6, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + # Iota + vpxorq 896(%rdx), %zmm0, %zmm0 + # Round 15 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm21, %zmm13, %zmm25 + vpternlogq $0x96, %zmm17, %zmm9, %zmm25 + vmovdqu64 %zmm8, %zmm26 + vpternlogq $0x96, %zmm4, %zmm16, %zmm26 + vpternlogq $0x96, %zmm20, %zmm12, %zmm26 + vmovdqu64 %zmm11, %zmm27 + vpternlogq $0x96, %zmm7, %zmm24, %zmm27 + vpternlogq $0x96, %zmm3, %zmm15, %zmm27 + vmovdqu64 %zmm19, %zmm28 + vpternlogq $0x96, %zmm10, %zmm2, %zmm28 + vpternlogq $0x96, %zmm6, %zmm23, %zmm28 + vmovdqu64 %zmm22, %zmm29 + vpternlogq $0x96, %zmm18, %zmm5, %zmm29 + vpternlogq $0x96, %zmm14, %zmm1, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm14, %zmm14 + # Rho - rotate each lane in place + vprolq $0x01, %zmm8, %zmm8 + vprolq $62, %zmm11, %zmm11 + vprolq $28, %zmm19, %zmm19 + vprolq $27, %zmm22, %zmm22 + vprolq $36, %zmm13, %zmm13 + vprolq $44, %zmm16, %zmm16 + vprolq $6, %zmm24, %zmm24 + vprolq $55, %zmm2, %zmm2 + vprolq $20, %zmm5, %zmm5 + vprolq $3, %zmm21, %zmm21 + vprolq $10, %zmm4, %zmm4 + vprolq $43, %zmm7, %zmm7 + vprolq $25, %zmm10, %zmm10 + vprolq $39, %zmm18, %zmm18 + vprolq $41, %zmm9, %zmm9 + vprolq $45, %zmm12, %zmm12 + vprolq $15, %zmm15, %zmm15 + vprolq $21, %zmm23, %zmm23 + vprolq $8, %zmm1, %zmm1 + vprolq $18, %zmm17, %zmm17 + vprolq $2, %zmm20, %zmm20 + vprolq $61, %zmm3, %zmm3 + vprolq $56, %zmm6, %zmm6 + vprolq $14, %zmm14, %zmm14 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm16, %zmm0 + vpternlogq $0xd2, %zmm23, %zmm7, %zmm16 + vpternlogq $0xd2, %zmm14, %zmm23, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm5, %zmm19 + vpternlogq $0xd2, %zmm12, %zmm21, %zmm5 + vpternlogq $0xd2, %zmm3, %zmm12, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm24, %zmm8 + vpternlogq $0xd2, %zmm1, %zmm10, %zmm24 + vpternlogq $0xd2, %zmm17, %zmm1, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm13, %zmm22 + vpternlogq $0xd2, %zmm15, %zmm4, %zmm13 + vpternlogq $0xd2, %zmm6, %zmm15, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm2, %zmm11 + vpternlogq $0xd2, %zmm9, %zmm18, %zmm2 + vpternlogq $0xd2, %zmm20, %zmm9, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + # Iota + vpxorq 960(%rdx), %zmm0, %zmm0 + # Round 16 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm8, %zmm19, %zmm25 + vpternlogq $0x96, %zmm11, %zmm22, %zmm25 + vmovdqu64 %zmm16, %zmm26 + vpternlogq $0x96, %zmm24, %zmm5, %zmm26 + vpternlogq $0x96, %zmm2, %zmm13, %zmm26 + vmovdqu64 %zmm7, %zmm27 + vpternlogq $0x96, %zmm10, %zmm21, %zmm27 + vpternlogq $0x96, %zmm18, %zmm4, %zmm27 + vmovdqu64 %zmm23, %zmm28 + vpternlogq $0x96, %zmm1, %zmm12, %zmm28 + vpternlogq $0x96, %zmm9, %zmm15, %zmm28 + vmovdqu64 %zmm14, %zmm29 + vpternlogq $0x96, %zmm17, %zmm3, %zmm29 + vpternlogq $0x96, %zmm20, %zmm6, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm20, %zmm20 + # Rho - rotate each lane in place + vprolq $0x01, %zmm16, %zmm16 + vprolq $62, %zmm7, %zmm7 + vprolq $28, %zmm23, %zmm23 + vprolq $27, %zmm14, %zmm14 + vprolq $36, %zmm19, %zmm19 + vprolq $44, %zmm5, %zmm5 + vprolq $6, %zmm21, %zmm21 + vprolq $55, %zmm12, %zmm12 + vprolq $20, %zmm3, %zmm3 + vprolq $3, %zmm8, %zmm8 + vprolq $10, %zmm24, %zmm24 + vprolq $43, %zmm10, %zmm10 + vprolq $25, %zmm1, %zmm1 + vprolq $39, %zmm17, %zmm17 + vprolq $41, %zmm22, %zmm22 + vprolq $45, %zmm13, %zmm13 + vprolq $15, %zmm4, %zmm4 + vprolq $21, %zmm15, %zmm15 + vprolq $8, %zmm6, %zmm6 + vprolq $18, %zmm11, %zmm11 + vprolq $2, %zmm2, %zmm2 + vprolq $61, %zmm18, %zmm18 + vprolq $56, %zmm9, %zmm9 + vprolq $14, %zmm20, %zmm20 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm5, %zmm0 + vpternlogq $0xd2, %zmm15, %zmm10, %zmm5 + vpternlogq $0xd2, %zmm20, %zmm15, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm3, %zmm23 + vpternlogq $0xd2, %zmm13, %zmm8, %zmm3 + vpternlogq $0xd2, %zmm18, %zmm13, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm21, %zmm16 + vpternlogq $0xd2, %zmm6, %zmm1, %zmm21 + vpternlogq $0xd2, %zmm11, %zmm6, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm19, %zmm14 + vpternlogq $0xd2, %zmm4, %zmm24, %zmm19 + vpternlogq $0xd2, %zmm9, %zmm4, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm12, %zmm7 + vpternlogq $0xd2, %zmm22, %zmm17, %zmm12 + vpternlogq $0xd2, %zmm2, %zmm22, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + # Iota + vpxorq 1024(%rdx), %zmm0, %zmm0 + # Round 17 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm16, %zmm23, %zmm25 + vpternlogq $0x96, %zmm7, %zmm14, %zmm25 + vmovdqu64 %zmm5, %zmm26 + vpternlogq $0x96, %zmm21, %zmm3, %zmm26 + vpternlogq $0x96, %zmm12, %zmm19, %zmm26 + vmovdqu64 %zmm10, %zmm27 + vpternlogq $0x96, %zmm1, %zmm8, %zmm27 + vpternlogq $0x96, %zmm17, %zmm24, %zmm27 + vmovdqu64 %zmm15, %zmm28 + vpternlogq $0x96, %zmm6, %zmm13, %zmm28 + vpternlogq $0x96, %zmm22, %zmm4, %zmm28 + vmovdqu64 %zmm20, %zmm29 + vpternlogq $0x96, %zmm11, %zmm18, %zmm29 + vpternlogq $0x96, %zmm2, %zmm9, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm2, %zmm2 + # Rho - rotate each lane in place + vprolq $0x01, %zmm5, %zmm5 + vprolq $62, %zmm10, %zmm10 + vprolq $28, %zmm15, %zmm15 + vprolq $27, %zmm20, %zmm20 + vprolq $36, %zmm23, %zmm23 + vprolq $44, %zmm3, %zmm3 + vprolq $6, %zmm8, %zmm8 + vprolq $55, %zmm13, %zmm13 + vprolq $20, %zmm18, %zmm18 + vprolq $3, %zmm16, %zmm16 + vprolq $10, %zmm21, %zmm21 + vprolq $43, %zmm1, %zmm1 + vprolq $25, %zmm6, %zmm6 + vprolq $39, %zmm11, %zmm11 + vprolq $41, %zmm14, %zmm14 + vprolq $45, %zmm19, %zmm19 + vprolq $15, %zmm24, %zmm24 + vprolq $21, %zmm4, %zmm4 + vprolq $8, %zmm9, %zmm9 + vprolq $18, %zmm7, %zmm7 + vprolq $2, %zmm12, %zmm12 + vprolq $61, %zmm17, %zmm17 + vprolq $56, %zmm22, %zmm22 + vprolq $14, %zmm2, %zmm2 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm3, %zmm0 + vpternlogq $0xd2, %zmm4, %zmm1, %zmm3 + vpternlogq $0xd2, %zmm2, %zmm4, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm18, %zmm15 + vpternlogq $0xd2, %zmm19, %zmm16, %zmm18 + vpternlogq $0xd2, %zmm17, %zmm19, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm8, %zmm5 + vpternlogq $0xd2, %zmm9, %zmm6, %zmm8 + vpternlogq $0xd2, %zmm7, %zmm9, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm23, %zmm20 + vpternlogq $0xd2, %zmm24, %zmm21, %zmm23 + vpternlogq $0xd2, %zmm22, %zmm24, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm13, %zmm10 + vpternlogq $0xd2, %zmm14, %zmm11, %zmm13 + vpternlogq $0xd2, %zmm12, %zmm14, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + # Iota + vpxorq 1088(%rdx), %zmm0, %zmm0 + # Round 18 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm5, %zmm15, %zmm25 + vpternlogq $0x96, %zmm10, %zmm20, %zmm25 + vmovdqu64 %zmm3, %zmm26 + vpternlogq $0x96, %zmm8, %zmm18, %zmm26 + vpternlogq $0x96, %zmm13, %zmm23, %zmm26 + vmovdqu64 %zmm1, %zmm27 + vpternlogq $0x96, %zmm6, %zmm16, %zmm27 + vpternlogq $0x96, %zmm11, %zmm21, %zmm27 + vmovdqu64 %zmm4, %zmm28 + vpternlogq $0x96, %zmm9, %zmm19, %zmm28 + vpternlogq $0x96, %zmm14, %zmm24, %zmm28 + vmovdqu64 %zmm2, %zmm29 + vpternlogq $0x96, %zmm7, %zmm17, %zmm29 + vpternlogq $0x96, %zmm12, %zmm22, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm12, %zmm12 + # Rho - rotate each lane in place + vprolq $0x01, %zmm3, %zmm3 + vprolq $62, %zmm1, %zmm1 + vprolq $28, %zmm4, %zmm4 + vprolq $27, %zmm2, %zmm2 + vprolq $36, %zmm15, %zmm15 + vprolq $44, %zmm18, %zmm18 + vprolq $6, %zmm16, %zmm16 + vprolq $55, %zmm19, %zmm19 + vprolq $20, %zmm17, %zmm17 + vprolq $3, %zmm5, %zmm5 + vprolq $10, %zmm8, %zmm8 + vprolq $43, %zmm6, %zmm6 + vprolq $25, %zmm9, %zmm9 + vprolq $39, %zmm7, %zmm7 + vprolq $41, %zmm20, %zmm20 + vprolq $45, %zmm23, %zmm23 + vprolq $15, %zmm21, %zmm21 + vprolq $21, %zmm24, %zmm24 + vprolq $8, %zmm22, %zmm22 + vprolq $18, %zmm10, %zmm10 + vprolq $2, %zmm13, %zmm13 + vprolq $61, %zmm11, %zmm11 + vprolq $56, %zmm14, %zmm14 + vprolq $14, %zmm12, %zmm12 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm18, %zmm0 + vpternlogq $0xd2, %zmm24, %zmm6, %zmm18 + vpternlogq $0xd2, %zmm12, %zmm24, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm17, %zmm4 + vpternlogq $0xd2, %zmm23, %zmm5, %zmm17 + vpternlogq $0xd2, %zmm11, %zmm23, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm16, %zmm3 + vpternlogq $0xd2, %zmm22, %zmm9, %zmm16 + vpternlogq $0xd2, %zmm10, %zmm22, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm15, %zmm2 + vpternlogq $0xd2, %zmm21, %zmm8, %zmm15 + vpternlogq $0xd2, %zmm14, %zmm21, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm19, %zmm1 + vpternlogq $0xd2, %zmm20, %zmm7, %zmm19 + vpternlogq $0xd2, %zmm13, %zmm20, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + # Iota + vpxorq 1152(%rdx), %zmm0, %zmm0 + # Round 19 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm3, %zmm4, %zmm25 + vpternlogq $0x96, %zmm1, %zmm2, %zmm25 + vmovdqu64 %zmm18, %zmm26 + vpternlogq $0x96, %zmm16, %zmm17, %zmm26 + vpternlogq $0x96, %zmm19, %zmm15, %zmm26 + vmovdqu64 %zmm6, %zmm27 + vpternlogq $0x96, %zmm9, %zmm5, %zmm27 + vpternlogq $0x96, %zmm7, %zmm8, %zmm27 + vmovdqu64 %zmm24, %zmm28 + vpternlogq $0x96, %zmm22, %zmm23, %zmm28 + vpternlogq $0x96, %zmm20, %zmm21, %zmm28 + vmovdqu64 %zmm12, %zmm29 + vpternlogq $0x96, %zmm10, %zmm11, %zmm29 + vpternlogq $0x96, %zmm13, %zmm14, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm13, %zmm13 + # Rho - rotate each lane in place + vprolq $0x01, %zmm18, %zmm18 + vprolq $62, %zmm6, %zmm6 + vprolq $28, %zmm24, %zmm24 + vprolq $27, %zmm12, %zmm12 + vprolq $36, %zmm4, %zmm4 + vprolq $44, %zmm17, %zmm17 + vprolq $6, %zmm5, %zmm5 + vprolq $55, %zmm23, %zmm23 + vprolq $20, %zmm11, %zmm11 + vprolq $3, %zmm3, %zmm3 + vprolq $10, %zmm16, %zmm16 + vprolq $43, %zmm9, %zmm9 + vprolq $25, %zmm22, %zmm22 + vprolq $39, %zmm10, %zmm10 + vprolq $41, %zmm2, %zmm2 + vprolq $45, %zmm15, %zmm15 + vprolq $15, %zmm8, %zmm8 + vprolq $21, %zmm21, %zmm21 + vprolq $8, %zmm14, %zmm14 + vprolq $18, %zmm1, %zmm1 + vprolq $2, %zmm19, %zmm19 + vprolq $61, %zmm7, %zmm7 + vprolq $56, %zmm20, %zmm20 + vprolq $14, %zmm13, %zmm13 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm17, %zmm0 + vpternlogq $0xd2, %zmm21, %zmm9, %zmm17 + vpternlogq $0xd2, %zmm13, %zmm21, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm11, %zmm24 + vpternlogq $0xd2, %zmm15, %zmm3, %zmm11 + vpternlogq $0xd2, %zmm7, %zmm15, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm5, %zmm18 + vpternlogq $0xd2, %zmm14, %zmm22, %zmm5 + vpternlogq $0xd2, %zmm1, %zmm14, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm4, %zmm12 + vpternlogq $0xd2, %zmm8, %zmm16, %zmm4 + vpternlogq $0xd2, %zmm20, %zmm8, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm23, %zmm6 + vpternlogq $0xd2, %zmm2, %zmm10, %zmm23 + vpternlogq $0xd2, %zmm19, %zmm2, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + # Iota + vpxorq 1216(%rdx), %zmm0, %zmm0 + # Round 20 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm18, %zmm24, %zmm25 + vpternlogq $0x96, %zmm6, %zmm12, %zmm25 + vmovdqu64 %zmm17, %zmm26 + vpternlogq $0x96, %zmm5, %zmm11, %zmm26 + vpternlogq $0x96, %zmm23, %zmm4, %zmm26 + vmovdqu64 %zmm9, %zmm27 + vpternlogq $0x96, %zmm22, %zmm3, %zmm27 + vpternlogq $0x96, %zmm10, %zmm16, %zmm27 + vmovdqu64 %zmm21, %zmm28 + vpternlogq $0x96, %zmm14, %zmm15, %zmm28 + vpternlogq $0x96, %zmm2, %zmm8, %zmm28 + vmovdqu64 %zmm13, %zmm29 + vpternlogq $0x96, %zmm1, %zmm7, %zmm29 + vpternlogq $0x96, %zmm19, %zmm20, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm19, %zmm19 + # Rho - rotate each lane in place + vprolq $0x01, %zmm17, %zmm17 + vprolq $62, %zmm9, %zmm9 + vprolq $28, %zmm21, %zmm21 + vprolq $27, %zmm13, %zmm13 + vprolq $36, %zmm24, %zmm24 + vprolq $44, %zmm11, %zmm11 + vprolq $6, %zmm3, %zmm3 + vprolq $55, %zmm15, %zmm15 + vprolq $20, %zmm7, %zmm7 + vprolq $3, %zmm18, %zmm18 + vprolq $10, %zmm5, %zmm5 + vprolq $43, %zmm22, %zmm22 + vprolq $25, %zmm14, %zmm14 + vprolq $39, %zmm1, %zmm1 + vprolq $41, %zmm12, %zmm12 + vprolq $45, %zmm4, %zmm4 + vprolq $15, %zmm16, %zmm16 + vprolq $21, %zmm8, %zmm8 + vprolq $8, %zmm20, %zmm20 + vprolq $18, %zmm6, %zmm6 + vprolq $2, %zmm23, %zmm23 + vprolq $61, %zmm10, %zmm10 + vprolq $56, %zmm2, %zmm2 + vprolq $14, %zmm19, %zmm19 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm11, %zmm0 + vpternlogq $0xd2, %zmm8, %zmm22, %zmm11 + vpternlogq $0xd2, %zmm19, %zmm8, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm7, %zmm21 + vpternlogq $0xd2, %zmm4, %zmm18, %zmm7 + vpternlogq $0xd2, %zmm10, %zmm4, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm3, %zmm17 + vpternlogq $0xd2, %zmm20, %zmm14, %zmm3 + vpternlogq $0xd2, %zmm6, %zmm20, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm24, %zmm13 + vpternlogq $0xd2, %zmm16, %zmm5, %zmm24 + vpternlogq $0xd2, %zmm2, %zmm16, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm15, %zmm9 + vpternlogq $0xd2, %zmm12, %zmm1, %zmm15 + vpternlogq $0xd2, %zmm23, %zmm12, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + # Iota + vpxorq 1280(%rdx), %zmm0, %zmm0 + # Round 21 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm17, %zmm21, %zmm25 + vpternlogq $0x96, %zmm9, %zmm13, %zmm25 + vmovdqu64 %zmm11, %zmm26 + vpternlogq $0x96, %zmm3, %zmm7, %zmm26 + vpternlogq $0x96, %zmm15, %zmm24, %zmm26 + vmovdqu64 %zmm22, %zmm27 + vpternlogq $0x96, %zmm14, %zmm18, %zmm27 + vpternlogq $0x96, %zmm1, %zmm5, %zmm27 + vmovdqu64 %zmm8, %zmm28 + vpternlogq $0x96, %zmm20, %zmm4, %zmm28 + vpternlogq $0x96, %zmm12, %zmm16, %zmm28 + vmovdqu64 %zmm19, %zmm29 + vpternlogq $0x96, %zmm6, %zmm10, %zmm29 + vpternlogq $0x96, %zmm23, %zmm2, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm23, %zmm23 + # Rho - rotate each lane in place + vprolq $0x01, %zmm11, %zmm11 + vprolq $62, %zmm22, %zmm22 + vprolq $28, %zmm8, %zmm8 + vprolq $27, %zmm19, %zmm19 + vprolq $36, %zmm21, %zmm21 + vprolq $44, %zmm7, %zmm7 + vprolq $6, %zmm18, %zmm18 + vprolq $55, %zmm4, %zmm4 + vprolq $20, %zmm10, %zmm10 + vprolq $3, %zmm17, %zmm17 + vprolq $10, %zmm3, %zmm3 + vprolq $43, %zmm14, %zmm14 + vprolq $25, %zmm20, %zmm20 + vprolq $39, %zmm6, %zmm6 + vprolq $41, %zmm13, %zmm13 + vprolq $45, %zmm24, %zmm24 + vprolq $15, %zmm5, %zmm5 + vprolq $21, %zmm16, %zmm16 + vprolq $8, %zmm2, %zmm2 + vprolq $18, %zmm9, %zmm9 + vprolq $2, %zmm15, %zmm15 + vprolq $61, %zmm1, %zmm1 + vprolq $56, %zmm12, %zmm12 + vprolq $14, %zmm23, %zmm23 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm7, %zmm0 + vpternlogq $0xd2, %zmm16, %zmm14, %zmm7 + vpternlogq $0xd2, %zmm23, %zmm16, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm10, %zmm8 + vpternlogq $0xd2, %zmm24, %zmm17, %zmm10 + vpternlogq $0xd2, %zmm1, %zmm24, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm18, %zmm11 + vpternlogq $0xd2, %zmm2, %zmm20, %zmm18 + vpternlogq $0xd2, %zmm9, %zmm2, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm21, %zmm19 + vpternlogq $0xd2, %zmm5, %zmm3, %zmm21 + vpternlogq $0xd2, %zmm12, %zmm5, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm4, %zmm22 + vpternlogq $0xd2, %zmm13, %zmm6, %zmm4 + vpternlogq $0xd2, %zmm15, %zmm13, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + # Iota + vpxorq 1344(%rdx), %zmm0, %zmm0 + # Round 22 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm11, %zmm8, %zmm25 + vpternlogq $0x96, %zmm22, %zmm19, %zmm25 + vmovdqu64 %zmm7, %zmm26 + vpternlogq $0x96, %zmm18, %zmm10, %zmm26 + vpternlogq $0x96, %zmm4, %zmm21, %zmm26 + vmovdqu64 %zmm14, %zmm27 + vpternlogq $0x96, %zmm20, %zmm17, %zmm27 + vpternlogq $0x96, %zmm6, %zmm3, %zmm27 + vmovdqu64 %zmm16, %zmm28 + vpternlogq $0x96, %zmm2, %zmm24, %zmm28 + vpternlogq $0x96, %zmm13, %zmm5, %zmm28 + vmovdqu64 %zmm23, %zmm29 + vpternlogq $0x96, %zmm9, %zmm1, %zmm29 + vpternlogq $0x96, %zmm15, %zmm12, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm15, %zmm15 + # Rho - rotate each lane in place + vprolq $0x01, %zmm7, %zmm7 + vprolq $62, %zmm14, %zmm14 + vprolq $28, %zmm16, %zmm16 + vprolq $27, %zmm23, %zmm23 + vprolq $36, %zmm8, %zmm8 + vprolq $44, %zmm10, %zmm10 + vprolq $6, %zmm17, %zmm17 + vprolq $55, %zmm24, %zmm24 + vprolq $20, %zmm1, %zmm1 + vprolq $3, %zmm11, %zmm11 + vprolq $10, %zmm18, %zmm18 + vprolq $43, %zmm20, %zmm20 + vprolq $25, %zmm2, %zmm2 + vprolq $39, %zmm9, %zmm9 + vprolq $41, %zmm19, %zmm19 + vprolq $45, %zmm21, %zmm21 + vprolq $15, %zmm3, %zmm3 + vprolq $21, %zmm5, %zmm5 + vprolq $8, %zmm12, %zmm12 + vprolq $18, %zmm22, %zmm22 + vprolq $2, %zmm4, %zmm4 + vprolq $61, %zmm6, %zmm6 + vprolq $56, %zmm13, %zmm13 + vprolq $14, %zmm15, %zmm15 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm10, %zmm0 + vpternlogq $0xd2, %zmm5, %zmm20, %zmm10 + vpternlogq $0xd2, %zmm15, %zmm5, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm1, %zmm16 + vpternlogq $0xd2, %zmm21, %zmm11, %zmm1 + vpternlogq $0xd2, %zmm6, %zmm21, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm17, %zmm7 + vpternlogq $0xd2, %zmm12, %zmm2, %zmm17 + vpternlogq $0xd2, %zmm22, %zmm12, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm8, %zmm23 + vpternlogq $0xd2, %zmm3, %zmm18, %zmm8 + vpternlogq $0xd2, %zmm13, %zmm3, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm24, %zmm14 + vpternlogq $0xd2, %zmm19, %zmm9, %zmm24 + vpternlogq $0xd2, %zmm4, %zmm19, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + # Iota + vpxorq 1408(%rdx), %zmm0, %zmm0 + # Round 23 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm7, %zmm16, %zmm25 + vpternlogq $0x96, %zmm14, %zmm23, %zmm25 + vmovdqu64 %zmm10, %zmm26 + vpternlogq $0x96, %zmm17, %zmm1, %zmm26 + vpternlogq $0x96, %zmm24, %zmm8, %zmm26 + vmovdqu64 %zmm20, %zmm27 + vpternlogq $0x96, %zmm2, %zmm11, %zmm27 + vpternlogq $0x96, %zmm9, %zmm18, %zmm27 + vmovdqu64 %zmm5, %zmm28 + vpternlogq $0x96, %zmm12, %zmm21, %zmm28 + vpternlogq $0x96, %zmm19, %zmm3, %zmm28 + vmovdqu64 %zmm15, %zmm29 + vpternlogq $0x96, %zmm22, %zmm6, %zmm29 + vpternlogq $0x96, %zmm4, %zmm13, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm4, %zmm4 + # Rho - rotate each lane in place + vprolq $0x01, %zmm10, %zmm10 + vprolq $62, %zmm20, %zmm20 + vprolq $28, %zmm5, %zmm5 + vprolq $27, %zmm15, %zmm15 + vprolq $36, %zmm16, %zmm16 + vprolq $44, %zmm1, %zmm1 + vprolq $6, %zmm11, %zmm11 + vprolq $55, %zmm21, %zmm21 + vprolq $20, %zmm6, %zmm6 + vprolq $3, %zmm7, %zmm7 + vprolq $10, %zmm17, %zmm17 + vprolq $43, %zmm2, %zmm2 + vprolq $25, %zmm12, %zmm12 + vprolq $39, %zmm22, %zmm22 + vprolq $41, %zmm23, %zmm23 + vprolq $45, %zmm8, %zmm8 + vprolq $15, %zmm18, %zmm18 + vprolq $21, %zmm3, %zmm3 + vprolq $8, %zmm13, %zmm13 + vprolq $18, %zmm14, %zmm14 + vprolq $2, %zmm24, %zmm24 + vprolq $61, %zmm9, %zmm9 + vprolq $56, %zmm19, %zmm19 + vprolq $14, %zmm4, %zmm4 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm1, %zmm0 + vpternlogq $0xd2, %zmm3, %zmm2, %zmm1 + vpternlogq $0xd2, %zmm4, %zmm3, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm6, %zmm5 + vpternlogq $0xd2, %zmm8, %zmm7, %zmm6 + vpternlogq $0xd2, %zmm9, %zmm8, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm11, %zmm10 + vpternlogq $0xd2, %zmm13, %zmm12, %zmm11 + vpternlogq $0xd2, %zmm14, %zmm13, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm16, %zmm15 + vpternlogq $0xd2, %zmm18, %zmm17, %zmm16 + vpternlogq $0xd2, %zmm19, %zmm18, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm21, %zmm20 + vpternlogq $0xd2, %zmm23, %zmm22, %zmm21 + vpternlogq $0xd2, %zmm24, %zmm23, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + # Iota + vpxorq 1472(%rdx), %zmm0, %zmm0 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vmovdqu64 %zmm8, 512(%rdi) + vmovdqu64 %zmm9, 576(%rdi) + vmovdqu64 %zmm10, 640(%rdi) + vmovdqu64 %zmm11, 704(%rdi) + vmovdqu64 %zmm12, 768(%rdi) + vmovdqu64 %zmm13, 832(%rdi) + vmovdqu64 %zmm14, 896(%rdi) + vmovdqu64 %zmm15, 960(%rdi) + vmovdqu64 %zmm16, 1024(%rdi) + vmovdqu64 %zmm17, 1088(%rdi) + vmovdqu64 %zmm18, 1152(%rdi) + vmovdqu64 %zmm19, 1216(%rdi) + vmovdqu64 %zmm20, 1280(%rdi) + vmovdqu64 %zmm21, 1344(%rdi) + vmovdqu64 %zmm22, 1408(%rdi) + vmovdqu64 %zmm23, 1472(%rdi) + vmovdqu64 %zmm24, 1536(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size sha3_blocksx8_avx512,.-sha3_blocksx8_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_sha3_128_blocksx8_seed_avx512_end_mark: +.quad 0x8000000000000000,0x8000000000000000 +.quad 0x8000000000000000,0x8000000000000000 +.quad 0x8000000000000000,0x8000000000000000 +.quad 0x8000000000000000,0x8000000000000000 +#ifndef __APPLE__ +.text +.globl sha3_128_blocksx8_seed_avx512 +.type sha3_128_blocksx8_seed_avx512,@function +.align 16 +sha3_128_blocksx8_seed_avx512: +#else +.section __TEXT,__text +.globl _sha3_128_blocksx8_seed_avx512 +.p2align 4 +_sha3_128_blocksx8_seed_avx512: +#endif /* __APPLE__ */ + leaq L_sha3_x8_avx512_r(%rip), %rdx + vpbroadcastq (%rsi), %zmm0 + vpbroadcastq 8(%rsi), %zmm1 + vpbroadcastq 16(%rsi), %zmm2 + vpbroadcastq 24(%rsi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vpxorq %zmm5, %zmm5, %zmm5 + vmovdqu64 %zmm5, %zmm6 + vmovdqu64 %zmm5, %zmm7 + vmovdqu64 %zmm5, %zmm8 + vmovdqu64 %zmm5, %zmm9 + vmovdqu64 %zmm5, %zmm10 + vmovdqu64 %zmm5, %zmm11 + vmovdqu64 %zmm5, %zmm12 + vmovdqu64 %zmm5, %zmm13 + vmovdqu64 %zmm5, %zmm14 + vmovdqu64 %zmm5, %zmm15 + vmovdqu64 %zmm5, %zmm16 + vmovdqu64 %zmm5, %zmm17 + vmovdqu64 %zmm5, %zmm18 + vmovdqu64 %zmm5, %zmm19 + vmovdqu64 L_sha3_128_blocksx8_seed_avx512_end_mark(%rip), %zmm20 + vmovdqu64 %zmm5, %zmm21 + vmovdqu64 %zmm5, %zmm22 + vmovdqu64 %zmm5, %zmm23 + vmovdqu64 %zmm5, %zmm24 + # Round 0 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm10, %zmm5, %zmm25 + vpternlogq $0x96, %zmm20, %zmm15, %zmm25 + vmovdqu64 %zmm1, %zmm26 + vpternlogq $0x96, %zmm11, %zmm6, %zmm26 + vpternlogq $0x96, %zmm21, %zmm16, %zmm26 + vmovdqu64 %zmm2, %zmm27 + vpternlogq $0x96, %zmm12, %zmm7, %zmm27 + vpternlogq $0x96, %zmm22, %zmm17, %zmm27 + vmovdqu64 %zmm3, %zmm28 + vpternlogq $0x96, %zmm13, %zmm8, %zmm28 + vpternlogq $0x96, %zmm23, %zmm18, %zmm28 + vmovdqu64 %zmm4, %zmm29 + vpternlogq $0x96, %zmm14, %zmm9, %zmm29 + vpternlogq $0x96, %zmm24, %zmm19, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm24, %zmm24 + # Rho - rotate each lane in place + vprolq $0x01, %zmm1, %zmm1 + vprolq $62, %zmm2, %zmm2 + vprolq $28, %zmm3, %zmm3 + vprolq $27, %zmm4, %zmm4 + vprolq $36, %zmm5, %zmm5 + vprolq $44, %zmm6, %zmm6 + vprolq $6, %zmm7, %zmm7 + vprolq $55, %zmm8, %zmm8 + vprolq $20, %zmm9, %zmm9 + vprolq $3, %zmm10, %zmm10 + vprolq $10, %zmm11, %zmm11 + vprolq $43, %zmm12, %zmm12 + vprolq $25, %zmm13, %zmm13 + vprolq $39, %zmm14, %zmm14 + vprolq $41, %zmm15, %zmm15 + vprolq $45, %zmm16, %zmm16 + vprolq $15, %zmm17, %zmm17 + vprolq $21, %zmm18, %zmm18 + vprolq $8, %zmm19, %zmm19 + vprolq $18, %zmm20, %zmm20 + vprolq $2, %zmm21, %zmm21 + vprolq $61, %zmm22, %zmm22 + vprolq $56, %zmm23, %zmm23 + vprolq $14, %zmm24, %zmm24 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm6, %zmm0 + vpternlogq $0xd2, %zmm18, %zmm12, %zmm6 + vpternlogq $0xd2, %zmm24, %zmm18, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm9, %zmm3 + vpternlogq $0xd2, %zmm16, %zmm10, %zmm9 + vpternlogq $0xd2, %zmm22, %zmm16, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm7, %zmm1 + vpternlogq $0xd2, %zmm19, %zmm13, %zmm7 + vpternlogq $0xd2, %zmm20, %zmm19, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm5, %zmm4 + vpternlogq $0xd2, %zmm17, %zmm11, %zmm5 + vpternlogq $0xd2, %zmm23, %zmm17, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm8, %zmm2 + vpternlogq $0xd2, %zmm15, %zmm14, %zmm8 + vpternlogq $0xd2, %zmm21, %zmm15, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + # Iota + vpxorq (%rdx), %zmm0, %zmm0 + # Round 1 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm1, %zmm3, %zmm25 + vpternlogq $0x96, %zmm2, %zmm4, %zmm25 + vmovdqu64 %zmm6, %zmm26 + vpternlogq $0x96, %zmm7, %zmm9, %zmm26 + vpternlogq $0x96, %zmm8, %zmm5, %zmm26 + vmovdqu64 %zmm12, %zmm27 + vpternlogq $0x96, %zmm13, %zmm10, %zmm27 + vpternlogq $0x96, %zmm14, %zmm11, %zmm27 + vmovdqu64 %zmm18, %zmm28 + vpternlogq $0x96, %zmm19, %zmm16, %zmm28 + vpternlogq $0x96, %zmm15, %zmm17, %zmm28 + vmovdqu64 %zmm24, %zmm29 + vpternlogq $0x96, %zmm20, %zmm22, %zmm29 + vpternlogq $0x96, %zmm21, %zmm23, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm21, %zmm21 + # Rho - rotate each lane in place + vprolq $0x01, %zmm6, %zmm6 + vprolq $62, %zmm12, %zmm12 + vprolq $28, %zmm18, %zmm18 + vprolq $27, %zmm24, %zmm24 + vprolq $36, %zmm3, %zmm3 + vprolq $44, %zmm9, %zmm9 + vprolq $6, %zmm10, %zmm10 + vprolq $55, %zmm16, %zmm16 + vprolq $20, %zmm22, %zmm22 + vprolq $3, %zmm1, %zmm1 + vprolq $10, %zmm7, %zmm7 + vprolq $43, %zmm13, %zmm13 + vprolq $25, %zmm19, %zmm19 + vprolq $39, %zmm20, %zmm20 + vprolq $41, %zmm4, %zmm4 + vprolq $45, %zmm5, %zmm5 + vprolq $15, %zmm11, %zmm11 + vprolq $21, %zmm17, %zmm17 + vprolq $8, %zmm23, %zmm23 + vprolq $18, %zmm2, %zmm2 + vprolq $2, %zmm8, %zmm8 + vprolq $61, %zmm14, %zmm14 + vprolq $56, %zmm15, %zmm15 + vprolq $14, %zmm21, %zmm21 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm9, %zmm0 + vpternlogq $0xd2, %zmm17, %zmm13, %zmm9 + vpternlogq $0xd2, %zmm21, %zmm17, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm22, %zmm18 + vpternlogq $0xd2, %zmm5, %zmm1, %zmm22 + vpternlogq $0xd2, %zmm14, %zmm5, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm10, %zmm6 + vpternlogq $0xd2, %zmm23, %zmm19, %zmm10 + vpternlogq $0xd2, %zmm2, %zmm23, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm3, %zmm24 + vpternlogq $0xd2, %zmm11, %zmm7, %zmm3 + vpternlogq $0xd2, %zmm15, %zmm11, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm16, %zmm12 + vpternlogq $0xd2, %zmm4, %zmm20, %zmm16 + vpternlogq $0xd2, %zmm8, %zmm4, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + # Iota + vpxorq 64(%rdx), %zmm0, %zmm0 + # Round 2 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm6, %zmm18, %zmm25 + vpternlogq $0x96, %zmm12, %zmm24, %zmm25 + vmovdqu64 %zmm9, %zmm26 + vpternlogq $0x96, %zmm10, %zmm22, %zmm26 + vpternlogq $0x96, %zmm16, %zmm3, %zmm26 + vmovdqu64 %zmm13, %zmm27 + vpternlogq $0x96, %zmm19, %zmm1, %zmm27 + vpternlogq $0x96, %zmm20, %zmm7, %zmm27 + vmovdqu64 %zmm17, %zmm28 + vpternlogq $0x96, %zmm23, %zmm5, %zmm28 + vpternlogq $0x96, %zmm4, %zmm11, %zmm28 + vmovdqu64 %zmm21, %zmm29 + vpternlogq $0x96, %zmm2, %zmm14, %zmm29 + vpternlogq $0x96, %zmm8, %zmm15, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm8, %zmm8 + # Rho - rotate each lane in place + vprolq $0x01, %zmm9, %zmm9 + vprolq $62, %zmm13, %zmm13 + vprolq $28, %zmm17, %zmm17 + vprolq $27, %zmm21, %zmm21 + vprolq $36, %zmm18, %zmm18 + vprolq $44, %zmm22, %zmm22 + vprolq $6, %zmm1, %zmm1 + vprolq $55, %zmm5, %zmm5 + vprolq $20, %zmm14, %zmm14 + vprolq $3, %zmm6, %zmm6 + vprolq $10, %zmm10, %zmm10 + vprolq $43, %zmm19, %zmm19 + vprolq $25, %zmm23, %zmm23 + vprolq $39, %zmm2, %zmm2 + vprolq $41, %zmm24, %zmm24 + vprolq $45, %zmm3, %zmm3 + vprolq $15, %zmm7, %zmm7 + vprolq $21, %zmm11, %zmm11 + vprolq $8, %zmm15, %zmm15 + vprolq $18, %zmm12, %zmm12 + vprolq $2, %zmm16, %zmm16 + vprolq $61, %zmm20, %zmm20 + vprolq $56, %zmm4, %zmm4 + vprolq $14, %zmm8, %zmm8 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm22, %zmm0 + vpternlogq $0xd2, %zmm11, %zmm19, %zmm22 + vpternlogq $0xd2, %zmm8, %zmm11, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm14, %zmm17 + vpternlogq $0xd2, %zmm3, %zmm6, %zmm14 + vpternlogq $0xd2, %zmm20, %zmm3, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm1, %zmm9 + vpternlogq $0xd2, %zmm15, %zmm23, %zmm1 + vpternlogq $0xd2, %zmm12, %zmm15, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm18, %zmm21 + vpternlogq $0xd2, %zmm7, %zmm10, %zmm18 + vpternlogq $0xd2, %zmm4, %zmm7, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm5, %zmm13 + vpternlogq $0xd2, %zmm24, %zmm2, %zmm5 + vpternlogq $0xd2, %zmm16, %zmm24, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + # Iota + vpxorq 128(%rdx), %zmm0, %zmm0 + # Round 3 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm9, %zmm17, %zmm25 + vpternlogq $0x96, %zmm13, %zmm21, %zmm25 + vmovdqu64 %zmm22, %zmm26 + vpternlogq $0x96, %zmm1, %zmm14, %zmm26 + vpternlogq $0x96, %zmm5, %zmm18, %zmm26 + vmovdqu64 %zmm19, %zmm27 + vpternlogq $0x96, %zmm23, %zmm6, %zmm27 + vpternlogq $0x96, %zmm2, %zmm10, %zmm27 + vmovdqu64 %zmm11, %zmm28 + vpternlogq $0x96, %zmm15, %zmm3, %zmm28 + vpternlogq $0x96, %zmm24, %zmm7, %zmm28 + vmovdqu64 %zmm8, %zmm29 + vpternlogq $0x96, %zmm12, %zmm20, %zmm29 + vpternlogq $0x96, %zmm16, %zmm4, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm16, %zmm16 + # Rho - rotate each lane in place + vprolq $0x01, %zmm22, %zmm22 + vprolq $62, %zmm19, %zmm19 + vprolq $28, %zmm11, %zmm11 + vprolq $27, %zmm8, %zmm8 + vprolq $36, %zmm17, %zmm17 + vprolq $44, %zmm14, %zmm14 + vprolq $6, %zmm6, %zmm6 + vprolq $55, %zmm3, %zmm3 + vprolq $20, %zmm20, %zmm20 + vprolq $3, %zmm9, %zmm9 + vprolq $10, %zmm1, %zmm1 + vprolq $43, %zmm23, %zmm23 + vprolq $25, %zmm15, %zmm15 + vprolq $39, %zmm12, %zmm12 + vprolq $41, %zmm21, %zmm21 + vprolq $45, %zmm18, %zmm18 + vprolq $15, %zmm10, %zmm10 + vprolq $21, %zmm7, %zmm7 + vprolq $8, %zmm4, %zmm4 + vprolq $18, %zmm13, %zmm13 + vprolq $2, %zmm5, %zmm5 + vprolq $61, %zmm2, %zmm2 + vprolq $56, %zmm24, %zmm24 + vprolq $14, %zmm16, %zmm16 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm14, %zmm0 + vpternlogq $0xd2, %zmm7, %zmm23, %zmm14 + vpternlogq $0xd2, %zmm16, %zmm7, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm20, %zmm11 + vpternlogq $0xd2, %zmm18, %zmm9, %zmm20 + vpternlogq $0xd2, %zmm2, %zmm18, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm6, %zmm22 + vpternlogq $0xd2, %zmm4, %zmm15, %zmm6 + vpternlogq $0xd2, %zmm13, %zmm4, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm17, %zmm8 + vpternlogq $0xd2, %zmm10, %zmm1, %zmm17 + vpternlogq $0xd2, %zmm24, %zmm10, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm3, %zmm19 + vpternlogq $0xd2, %zmm21, %zmm12, %zmm3 + vpternlogq $0xd2, %zmm5, %zmm21, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + # Iota + vpxorq 192(%rdx), %zmm0, %zmm0 + # Round 4 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm22, %zmm11, %zmm25 + vpternlogq $0x96, %zmm19, %zmm8, %zmm25 + vmovdqu64 %zmm14, %zmm26 + vpternlogq $0x96, %zmm6, %zmm20, %zmm26 + vpternlogq $0x96, %zmm3, %zmm17, %zmm26 + vmovdqu64 %zmm23, %zmm27 + vpternlogq $0x96, %zmm15, %zmm9, %zmm27 + vpternlogq $0x96, %zmm12, %zmm1, %zmm27 + vmovdqu64 %zmm7, %zmm28 + vpternlogq $0x96, %zmm4, %zmm18, %zmm28 + vpternlogq $0x96, %zmm21, %zmm10, %zmm28 + vmovdqu64 %zmm16, %zmm29 + vpternlogq $0x96, %zmm13, %zmm2, %zmm29 + vpternlogq $0x96, %zmm5, %zmm24, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm5, %zmm5 + # Rho - rotate each lane in place + vprolq $0x01, %zmm14, %zmm14 + vprolq $62, %zmm23, %zmm23 + vprolq $28, %zmm7, %zmm7 + vprolq $27, %zmm16, %zmm16 + vprolq $36, %zmm11, %zmm11 + vprolq $44, %zmm20, %zmm20 + vprolq $6, %zmm9, %zmm9 + vprolq $55, %zmm18, %zmm18 + vprolq $20, %zmm2, %zmm2 + vprolq $3, %zmm22, %zmm22 + vprolq $10, %zmm6, %zmm6 + vprolq $43, %zmm15, %zmm15 + vprolq $25, %zmm4, %zmm4 + vprolq $39, %zmm13, %zmm13 + vprolq $41, %zmm8, %zmm8 + vprolq $45, %zmm17, %zmm17 + vprolq $15, %zmm1, %zmm1 + vprolq $21, %zmm10, %zmm10 + vprolq $8, %zmm24, %zmm24 + vprolq $18, %zmm19, %zmm19 + vprolq $2, %zmm3, %zmm3 + vprolq $61, %zmm12, %zmm12 + vprolq $56, %zmm21, %zmm21 + vprolq $14, %zmm5, %zmm5 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm20, %zmm0 + vpternlogq $0xd2, %zmm10, %zmm15, %zmm20 + vpternlogq $0xd2, %zmm5, %zmm10, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm2, %zmm7 + vpternlogq $0xd2, %zmm17, %zmm22, %zmm2 + vpternlogq $0xd2, %zmm12, %zmm17, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm9, %zmm14 + vpternlogq $0xd2, %zmm24, %zmm4, %zmm9 + vpternlogq $0xd2, %zmm19, %zmm24, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm11, %zmm16 + vpternlogq $0xd2, %zmm1, %zmm6, %zmm11 + vpternlogq $0xd2, %zmm21, %zmm1, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm18, %zmm23 + vpternlogq $0xd2, %zmm8, %zmm13, %zmm18 + vpternlogq $0xd2, %zmm3, %zmm8, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + # Iota + vpxorq 256(%rdx), %zmm0, %zmm0 + # Round 5 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm14, %zmm7, %zmm25 + vpternlogq $0x96, %zmm23, %zmm16, %zmm25 + vmovdqu64 %zmm20, %zmm26 + vpternlogq $0x96, %zmm9, %zmm2, %zmm26 + vpternlogq $0x96, %zmm18, %zmm11, %zmm26 + vmovdqu64 %zmm15, %zmm27 + vpternlogq $0x96, %zmm4, %zmm22, %zmm27 + vpternlogq $0x96, %zmm13, %zmm6, %zmm27 + vmovdqu64 %zmm10, %zmm28 + vpternlogq $0x96, %zmm24, %zmm17, %zmm28 + vpternlogq $0x96, %zmm8, %zmm1, %zmm28 + vmovdqu64 %zmm5, %zmm29 + vpternlogq $0x96, %zmm19, %zmm12, %zmm29 + vpternlogq $0x96, %zmm3, %zmm21, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm3, %zmm3 + # Rho - rotate each lane in place + vprolq $0x01, %zmm20, %zmm20 + vprolq $62, %zmm15, %zmm15 + vprolq $28, %zmm10, %zmm10 + vprolq $27, %zmm5, %zmm5 + vprolq $36, %zmm7, %zmm7 + vprolq $44, %zmm2, %zmm2 + vprolq $6, %zmm22, %zmm22 + vprolq $55, %zmm17, %zmm17 + vprolq $20, %zmm12, %zmm12 + vprolq $3, %zmm14, %zmm14 + vprolq $10, %zmm9, %zmm9 + vprolq $43, %zmm4, %zmm4 + vprolq $25, %zmm24, %zmm24 + vprolq $39, %zmm19, %zmm19 + vprolq $41, %zmm16, %zmm16 + vprolq $45, %zmm11, %zmm11 + vprolq $15, %zmm6, %zmm6 + vprolq $21, %zmm1, %zmm1 + vprolq $8, %zmm21, %zmm21 + vprolq $18, %zmm23, %zmm23 + vprolq $2, %zmm18, %zmm18 + vprolq $61, %zmm13, %zmm13 + vprolq $56, %zmm8, %zmm8 + vprolq $14, %zmm3, %zmm3 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm2, %zmm0 + vpternlogq $0xd2, %zmm1, %zmm4, %zmm2 + vpternlogq $0xd2, %zmm3, %zmm1, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm12, %zmm10 + vpternlogq $0xd2, %zmm11, %zmm14, %zmm12 + vpternlogq $0xd2, %zmm13, %zmm11, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm22, %zmm20 + vpternlogq $0xd2, %zmm21, %zmm24, %zmm22 + vpternlogq $0xd2, %zmm23, %zmm21, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm7, %zmm5 + vpternlogq $0xd2, %zmm6, %zmm9, %zmm7 + vpternlogq $0xd2, %zmm8, %zmm6, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm17, %zmm15 + vpternlogq $0xd2, %zmm16, %zmm19, %zmm17 + vpternlogq $0xd2, %zmm18, %zmm16, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + # Iota + vpxorq 320(%rdx), %zmm0, %zmm0 + # Round 6 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm20, %zmm10, %zmm25 + vpternlogq $0x96, %zmm15, %zmm5, %zmm25 + vmovdqu64 %zmm2, %zmm26 + vpternlogq $0x96, %zmm22, %zmm12, %zmm26 + vpternlogq $0x96, %zmm17, %zmm7, %zmm26 + vmovdqu64 %zmm4, %zmm27 + vpternlogq $0x96, %zmm24, %zmm14, %zmm27 + vpternlogq $0x96, %zmm19, %zmm9, %zmm27 + vmovdqu64 %zmm1, %zmm28 + vpternlogq $0x96, %zmm21, %zmm11, %zmm28 + vpternlogq $0x96, %zmm16, %zmm6, %zmm28 + vmovdqu64 %zmm3, %zmm29 + vpternlogq $0x96, %zmm23, %zmm13, %zmm29 + vpternlogq $0x96, %zmm18, %zmm8, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm18, %zmm18 + # Rho - rotate each lane in place + vprolq $0x01, %zmm2, %zmm2 + vprolq $62, %zmm4, %zmm4 + vprolq $28, %zmm1, %zmm1 + vprolq $27, %zmm3, %zmm3 + vprolq $36, %zmm10, %zmm10 + vprolq $44, %zmm12, %zmm12 + vprolq $6, %zmm14, %zmm14 + vprolq $55, %zmm11, %zmm11 + vprolq $20, %zmm13, %zmm13 + vprolq $3, %zmm20, %zmm20 + vprolq $10, %zmm22, %zmm22 + vprolq $43, %zmm24, %zmm24 + vprolq $25, %zmm21, %zmm21 + vprolq $39, %zmm23, %zmm23 + vprolq $41, %zmm5, %zmm5 + vprolq $45, %zmm7, %zmm7 + vprolq $15, %zmm9, %zmm9 + vprolq $21, %zmm6, %zmm6 + vprolq $8, %zmm8, %zmm8 + vprolq $18, %zmm15, %zmm15 + vprolq $2, %zmm17, %zmm17 + vprolq $61, %zmm19, %zmm19 + vprolq $56, %zmm16, %zmm16 + vprolq $14, %zmm18, %zmm18 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm12, %zmm0 + vpternlogq $0xd2, %zmm6, %zmm24, %zmm12 + vpternlogq $0xd2, %zmm18, %zmm6, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm13, %zmm1 + vpternlogq $0xd2, %zmm7, %zmm20, %zmm13 + vpternlogq $0xd2, %zmm19, %zmm7, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm14, %zmm2 + vpternlogq $0xd2, %zmm8, %zmm21, %zmm14 + vpternlogq $0xd2, %zmm15, %zmm8, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm10, %zmm3 + vpternlogq $0xd2, %zmm9, %zmm22, %zmm10 + vpternlogq $0xd2, %zmm16, %zmm9, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm11, %zmm4 + vpternlogq $0xd2, %zmm5, %zmm23, %zmm11 + vpternlogq $0xd2, %zmm17, %zmm5, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + # Iota + vpxorq 384(%rdx), %zmm0, %zmm0 + # Round 7 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm2, %zmm1, %zmm25 + vpternlogq $0x96, %zmm4, %zmm3, %zmm25 + vmovdqu64 %zmm12, %zmm26 + vpternlogq $0x96, %zmm14, %zmm13, %zmm26 + vpternlogq $0x96, %zmm11, %zmm10, %zmm26 + vmovdqu64 %zmm24, %zmm27 + vpternlogq $0x96, %zmm21, %zmm20, %zmm27 + vpternlogq $0x96, %zmm23, %zmm22, %zmm27 + vmovdqu64 %zmm6, %zmm28 + vpternlogq $0x96, %zmm8, %zmm7, %zmm28 + vpternlogq $0x96, %zmm5, %zmm9, %zmm28 + vmovdqu64 %zmm18, %zmm29 + vpternlogq $0x96, %zmm15, %zmm19, %zmm29 + vpternlogq $0x96, %zmm17, %zmm16, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm17, %zmm17 + # Rho - rotate each lane in place + vprolq $0x01, %zmm12, %zmm12 + vprolq $62, %zmm24, %zmm24 + vprolq $28, %zmm6, %zmm6 + vprolq $27, %zmm18, %zmm18 + vprolq $36, %zmm1, %zmm1 + vprolq $44, %zmm13, %zmm13 + vprolq $6, %zmm20, %zmm20 + vprolq $55, %zmm7, %zmm7 + vprolq $20, %zmm19, %zmm19 + vprolq $3, %zmm2, %zmm2 + vprolq $10, %zmm14, %zmm14 + vprolq $43, %zmm21, %zmm21 + vprolq $25, %zmm8, %zmm8 + vprolq $39, %zmm15, %zmm15 + vprolq $41, %zmm3, %zmm3 + vprolq $45, %zmm10, %zmm10 + vprolq $15, %zmm22, %zmm22 + vprolq $21, %zmm9, %zmm9 + vprolq $8, %zmm16, %zmm16 + vprolq $18, %zmm4, %zmm4 + vprolq $2, %zmm11, %zmm11 + vprolq $61, %zmm23, %zmm23 + vprolq $56, %zmm5, %zmm5 + vprolq $14, %zmm17, %zmm17 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm13, %zmm0 + vpternlogq $0xd2, %zmm9, %zmm21, %zmm13 + vpternlogq $0xd2, %zmm17, %zmm9, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm19, %zmm6 + vpternlogq $0xd2, %zmm10, %zmm2, %zmm19 + vpternlogq $0xd2, %zmm23, %zmm10, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm20, %zmm12 + vpternlogq $0xd2, %zmm16, %zmm8, %zmm20 + vpternlogq $0xd2, %zmm4, %zmm16, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm1, %zmm18 + vpternlogq $0xd2, %zmm22, %zmm14, %zmm1 + vpternlogq $0xd2, %zmm5, %zmm22, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm7, %zmm24 + vpternlogq $0xd2, %zmm3, %zmm15, %zmm7 + vpternlogq $0xd2, %zmm11, %zmm3, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + # Iota + vpxorq 448(%rdx), %zmm0, %zmm0 + # Round 8 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm12, %zmm6, %zmm25 + vpternlogq $0x96, %zmm24, %zmm18, %zmm25 + vmovdqu64 %zmm13, %zmm26 + vpternlogq $0x96, %zmm20, %zmm19, %zmm26 + vpternlogq $0x96, %zmm7, %zmm1, %zmm26 + vmovdqu64 %zmm21, %zmm27 + vpternlogq $0x96, %zmm8, %zmm2, %zmm27 + vpternlogq $0x96, %zmm15, %zmm14, %zmm27 + vmovdqu64 %zmm9, %zmm28 + vpternlogq $0x96, %zmm16, %zmm10, %zmm28 + vpternlogq $0x96, %zmm3, %zmm22, %zmm28 + vmovdqu64 %zmm17, %zmm29 + vpternlogq $0x96, %zmm4, %zmm23, %zmm29 + vpternlogq $0x96, %zmm11, %zmm5, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm11, %zmm11 + # Rho - rotate each lane in place + vprolq $0x01, %zmm13, %zmm13 + vprolq $62, %zmm21, %zmm21 + vprolq $28, %zmm9, %zmm9 + vprolq $27, %zmm17, %zmm17 + vprolq $36, %zmm6, %zmm6 + vprolq $44, %zmm19, %zmm19 + vprolq $6, %zmm2, %zmm2 + vprolq $55, %zmm10, %zmm10 + vprolq $20, %zmm23, %zmm23 + vprolq $3, %zmm12, %zmm12 + vprolq $10, %zmm20, %zmm20 + vprolq $43, %zmm8, %zmm8 + vprolq $25, %zmm16, %zmm16 + vprolq $39, %zmm4, %zmm4 + vprolq $41, %zmm18, %zmm18 + vprolq $45, %zmm1, %zmm1 + vprolq $15, %zmm14, %zmm14 + vprolq $21, %zmm22, %zmm22 + vprolq $8, %zmm5, %zmm5 + vprolq $18, %zmm24, %zmm24 + vprolq $2, %zmm7, %zmm7 + vprolq $61, %zmm15, %zmm15 + vprolq $56, %zmm3, %zmm3 + vprolq $14, %zmm11, %zmm11 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm19, %zmm0 + vpternlogq $0xd2, %zmm22, %zmm8, %zmm19 + vpternlogq $0xd2, %zmm11, %zmm22, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm23, %zmm9 + vpternlogq $0xd2, %zmm1, %zmm12, %zmm23 + vpternlogq $0xd2, %zmm15, %zmm1, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm2, %zmm13 + vpternlogq $0xd2, %zmm5, %zmm16, %zmm2 + vpternlogq $0xd2, %zmm24, %zmm5, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm6, %zmm17 + vpternlogq $0xd2, %zmm14, %zmm20, %zmm6 + vpternlogq $0xd2, %zmm3, %zmm14, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm10, %zmm21 + vpternlogq $0xd2, %zmm18, %zmm4, %zmm10 + vpternlogq $0xd2, %zmm7, %zmm18, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + # Iota + vpxorq 512(%rdx), %zmm0, %zmm0 + # Round 9 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm13, %zmm9, %zmm25 + vpternlogq $0x96, %zmm21, %zmm17, %zmm25 + vmovdqu64 %zmm19, %zmm26 + vpternlogq $0x96, %zmm2, %zmm23, %zmm26 + vpternlogq $0x96, %zmm10, %zmm6, %zmm26 + vmovdqu64 %zmm8, %zmm27 + vpternlogq $0x96, %zmm16, %zmm12, %zmm27 + vpternlogq $0x96, %zmm4, %zmm20, %zmm27 + vmovdqu64 %zmm22, %zmm28 + vpternlogq $0x96, %zmm5, %zmm1, %zmm28 + vpternlogq $0x96, %zmm18, %zmm14, %zmm28 + vmovdqu64 %zmm11, %zmm29 + vpternlogq $0x96, %zmm24, %zmm15, %zmm29 + vpternlogq $0x96, %zmm7, %zmm3, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm7, %zmm7 + # Rho - rotate each lane in place + vprolq $0x01, %zmm19, %zmm19 + vprolq $62, %zmm8, %zmm8 + vprolq $28, %zmm22, %zmm22 + vprolq $27, %zmm11, %zmm11 + vprolq $36, %zmm9, %zmm9 + vprolq $44, %zmm23, %zmm23 + vprolq $6, %zmm12, %zmm12 + vprolq $55, %zmm1, %zmm1 + vprolq $20, %zmm15, %zmm15 + vprolq $3, %zmm13, %zmm13 + vprolq $10, %zmm2, %zmm2 + vprolq $43, %zmm16, %zmm16 + vprolq $25, %zmm5, %zmm5 + vprolq $39, %zmm24, %zmm24 + vprolq $41, %zmm17, %zmm17 + vprolq $45, %zmm6, %zmm6 + vprolq $15, %zmm20, %zmm20 + vprolq $21, %zmm14, %zmm14 + vprolq $8, %zmm3, %zmm3 + vprolq $18, %zmm21, %zmm21 + vprolq $2, %zmm10, %zmm10 + vprolq $61, %zmm4, %zmm4 + vprolq $56, %zmm18, %zmm18 + vprolq $14, %zmm7, %zmm7 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm23, %zmm0 + vpternlogq $0xd2, %zmm14, %zmm16, %zmm23 + vpternlogq $0xd2, %zmm7, %zmm14, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm15, %zmm22 + vpternlogq $0xd2, %zmm6, %zmm13, %zmm15 + vpternlogq $0xd2, %zmm4, %zmm6, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm12, %zmm19 + vpternlogq $0xd2, %zmm3, %zmm5, %zmm12 + vpternlogq $0xd2, %zmm21, %zmm3, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm9, %zmm11 + vpternlogq $0xd2, %zmm20, %zmm2, %zmm9 + vpternlogq $0xd2, %zmm18, %zmm20, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm1, %zmm8 + vpternlogq $0xd2, %zmm17, %zmm24, %zmm1 + vpternlogq $0xd2, %zmm10, %zmm17, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + # Iota + vpxorq 576(%rdx), %zmm0, %zmm0 + # Round 10 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm19, %zmm22, %zmm25 + vpternlogq $0x96, %zmm8, %zmm11, %zmm25 + vmovdqu64 %zmm23, %zmm26 + vpternlogq $0x96, %zmm12, %zmm15, %zmm26 + vpternlogq $0x96, %zmm1, %zmm9, %zmm26 + vmovdqu64 %zmm16, %zmm27 + vpternlogq $0x96, %zmm5, %zmm13, %zmm27 + vpternlogq $0x96, %zmm24, %zmm2, %zmm27 + vmovdqu64 %zmm14, %zmm28 + vpternlogq $0x96, %zmm3, %zmm6, %zmm28 + vpternlogq $0x96, %zmm17, %zmm20, %zmm28 + vmovdqu64 %zmm7, %zmm29 + vpternlogq $0x96, %zmm21, %zmm4, %zmm29 + vpternlogq $0x96, %zmm10, %zmm18, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm10, %zmm10 + # Rho - rotate each lane in place + vprolq $0x01, %zmm23, %zmm23 + vprolq $62, %zmm16, %zmm16 + vprolq $28, %zmm14, %zmm14 + vprolq $27, %zmm7, %zmm7 + vprolq $36, %zmm22, %zmm22 + vprolq $44, %zmm15, %zmm15 + vprolq $6, %zmm13, %zmm13 + vprolq $55, %zmm6, %zmm6 + vprolq $20, %zmm4, %zmm4 + vprolq $3, %zmm19, %zmm19 + vprolq $10, %zmm12, %zmm12 + vprolq $43, %zmm5, %zmm5 + vprolq $25, %zmm3, %zmm3 + vprolq $39, %zmm21, %zmm21 + vprolq $41, %zmm11, %zmm11 + vprolq $45, %zmm9, %zmm9 + vprolq $15, %zmm2, %zmm2 + vprolq $21, %zmm20, %zmm20 + vprolq $8, %zmm18, %zmm18 + vprolq $18, %zmm8, %zmm8 + vprolq $2, %zmm1, %zmm1 + vprolq $61, %zmm24, %zmm24 + vprolq $56, %zmm17, %zmm17 + vprolq $14, %zmm10, %zmm10 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm15, %zmm0 + vpternlogq $0xd2, %zmm20, %zmm5, %zmm15 + vpternlogq $0xd2, %zmm10, %zmm20, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm4, %zmm14 + vpternlogq $0xd2, %zmm9, %zmm19, %zmm4 + vpternlogq $0xd2, %zmm24, %zmm9, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm13, %zmm23 + vpternlogq $0xd2, %zmm18, %zmm3, %zmm13 + vpternlogq $0xd2, %zmm8, %zmm18, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm22, %zmm7 + vpternlogq $0xd2, %zmm2, %zmm12, %zmm22 + vpternlogq $0xd2, %zmm17, %zmm2, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm6, %zmm16 + vpternlogq $0xd2, %zmm11, %zmm21, %zmm6 + vpternlogq $0xd2, %zmm1, %zmm11, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + # Iota + vpxorq 640(%rdx), %zmm0, %zmm0 + # Round 11 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm23, %zmm14, %zmm25 + vpternlogq $0x96, %zmm16, %zmm7, %zmm25 + vmovdqu64 %zmm15, %zmm26 + vpternlogq $0x96, %zmm13, %zmm4, %zmm26 + vpternlogq $0x96, %zmm6, %zmm22, %zmm26 + vmovdqu64 %zmm5, %zmm27 + vpternlogq $0x96, %zmm3, %zmm19, %zmm27 + vpternlogq $0x96, %zmm21, %zmm12, %zmm27 + vmovdqu64 %zmm20, %zmm28 + vpternlogq $0x96, %zmm18, %zmm9, %zmm28 + vpternlogq $0x96, %zmm11, %zmm2, %zmm28 + vmovdqu64 %zmm10, %zmm29 + vpternlogq $0x96, %zmm8, %zmm24, %zmm29 + vpternlogq $0x96, %zmm1, %zmm17, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm1, %zmm1 + # Rho - rotate each lane in place + vprolq $0x01, %zmm15, %zmm15 + vprolq $62, %zmm5, %zmm5 + vprolq $28, %zmm20, %zmm20 + vprolq $27, %zmm10, %zmm10 + vprolq $36, %zmm14, %zmm14 + vprolq $44, %zmm4, %zmm4 + vprolq $6, %zmm19, %zmm19 + vprolq $55, %zmm9, %zmm9 + vprolq $20, %zmm24, %zmm24 + vprolq $3, %zmm23, %zmm23 + vprolq $10, %zmm13, %zmm13 + vprolq $43, %zmm3, %zmm3 + vprolq $25, %zmm18, %zmm18 + vprolq $39, %zmm8, %zmm8 + vprolq $41, %zmm7, %zmm7 + vprolq $45, %zmm22, %zmm22 + vprolq $15, %zmm12, %zmm12 + vprolq $21, %zmm2, %zmm2 + vprolq $8, %zmm17, %zmm17 + vprolq $18, %zmm16, %zmm16 + vprolq $2, %zmm6, %zmm6 + vprolq $61, %zmm21, %zmm21 + vprolq $56, %zmm11, %zmm11 + vprolq $14, %zmm1, %zmm1 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm4, %zmm0 + vpternlogq $0xd2, %zmm2, %zmm3, %zmm4 + vpternlogq $0xd2, %zmm1, %zmm2, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm24, %zmm20 + vpternlogq $0xd2, %zmm22, %zmm23, %zmm24 + vpternlogq $0xd2, %zmm21, %zmm22, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm19, %zmm15 + vpternlogq $0xd2, %zmm17, %zmm18, %zmm19 + vpternlogq $0xd2, %zmm16, %zmm17, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm14, %zmm10 + vpternlogq $0xd2, %zmm12, %zmm13, %zmm14 + vpternlogq $0xd2, %zmm11, %zmm12, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm9, %zmm5 + vpternlogq $0xd2, %zmm7, %zmm8, %zmm9 + vpternlogq $0xd2, %zmm6, %zmm7, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + # Iota + vpxorq 704(%rdx), %zmm0, %zmm0 + # Round 12 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm15, %zmm20, %zmm25 + vpternlogq $0x96, %zmm5, %zmm10, %zmm25 + vmovdqu64 %zmm4, %zmm26 + vpternlogq $0x96, %zmm19, %zmm24, %zmm26 + vpternlogq $0x96, %zmm9, %zmm14, %zmm26 + vmovdqu64 %zmm3, %zmm27 + vpternlogq $0x96, %zmm18, %zmm23, %zmm27 + vpternlogq $0x96, %zmm8, %zmm13, %zmm27 + vmovdqu64 %zmm2, %zmm28 + vpternlogq $0x96, %zmm17, %zmm22, %zmm28 + vpternlogq $0x96, %zmm7, %zmm12, %zmm28 + vmovdqu64 %zmm1, %zmm29 + vpternlogq $0x96, %zmm16, %zmm21, %zmm29 + vpternlogq $0x96, %zmm6, %zmm11, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm6, %zmm6 + # Rho - rotate each lane in place + vprolq $0x01, %zmm4, %zmm4 + vprolq $62, %zmm3, %zmm3 + vprolq $28, %zmm2, %zmm2 + vprolq $27, %zmm1, %zmm1 + vprolq $36, %zmm20, %zmm20 + vprolq $44, %zmm24, %zmm24 + vprolq $6, %zmm23, %zmm23 + vprolq $55, %zmm22, %zmm22 + vprolq $20, %zmm21, %zmm21 + vprolq $3, %zmm15, %zmm15 + vprolq $10, %zmm19, %zmm19 + vprolq $43, %zmm18, %zmm18 + vprolq $25, %zmm17, %zmm17 + vprolq $39, %zmm16, %zmm16 + vprolq $41, %zmm10, %zmm10 + vprolq $45, %zmm14, %zmm14 + vprolq $15, %zmm13, %zmm13 + vprolq $21, %zmm12, %zmm12 + vprolq $8, %zmm11, %zmm11 + vprolq $18, %zmm5, %zmm5 + vprolq $2, %zmm9, %zmm9 + vprolq $61, %zmm8, %zmm8 + vprolq $56, %zmm7, %zmm7 + vprolq $14, %zmm6, %zmm6 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm24, %zmm0 + vpternlogq $0xd2, %zmm12, %zmm18, %zmm24 + vpternlogq $0xd2, %zmm6, %zmm12, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm21, %zmm2 + vpternlogq $0xd2, %zmm14, %zmm15, %zmm21 + vpternlogq $0xd2, %zmm8, %zmm14, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm23, %zmm4 + vpternlogq $0xd2, %zmm11, %zmm17, %zmm23 + vpternlogq $0xd2, %zmm5, %zmm11, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm20, %zmm1 + vpternlogq $0xd2, %zmm13, %zmm19, %zmm20 + vpternlogq $0xd2, %zmm7, %zmm13, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm22, %zmm3 + vpternlogq $0xd2, %zmm10, %zmm16, %zmm22 + vpternlogq $0xd2, %zmm9, %zmm10, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + # Iota + vpxorq 768(%rdx), %zmm0, %zmm0 + # Round 13 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm4, %zmm2, %zmm25 + vpternlogq $0x96, %zmm3, %zmm1, %zmm25 + vmovdqu64 %zmm24, %zmm26 + vpternlogq $0x96, %zmm23, %zmm21, %zmm26 + vpternlogq $0x96, %zmm22, %zmm20, %zmm26 + vmovdqu64 %zmm18, %zmm27 + vpternlogq $0x96, %zmm17, %zmm15, %zmm27 + vpternlogq $0x96, %zmm16, %zmm19, %zmm27 + vmovdqu64 %zmm12, %zmm28 + vpternlogq $0x96, %zmm11, %zmm14, %zmm28 + vpternlogq $0x96, %zmm10, %zmm13, %zmm28 + vmovdqu64 %zmm6, %zmm29 + vpternlogq $0x96, %zmm5, %zmm8, %zmm29 + vpternlogq $0x96, %zmm9, %zmm7, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm9, %zmm9 + # Rho - rotate each lane in place + vprolq $0x01, %zmm24, %zmm24 + vprolq $62, %zmm18, %zmm18 + vprolq $28, %zmm12, %zmm12 + vprolq $27, %zmm6, %zmm6 + vprolq $36, %zmm2, %zmm2 + vprolq $44, %zmm21, %zmm21 + vprolq $6, %zmm15, %zmm15 + vprolq $55, %zmm14, %zmm14 + vprolq $20, %zmm8, %zmm8 + vprolq $3, %zmm4, %zmm4 + vprolq $10, %zmm23, %zmm23 + vprolq $43, %zmm17, %zmm17 + vprolq $25, %zmm11, %zmm11 + vprolq $39, %zmm5, %zmm5 + vprolq $41, %zmm1, %zmm1 + vprolq $45, %zmm20, %zmm20 + vprolq $15, %zmm19, %zmm19 + vprolq $21, %zmm13, %zmm13 + vprolq $8, %zmm7, %zmm7 + vprolq $18, %zmm3, %zmm3 + vprolq $2, %zmm22, %zmm22 + vprolq $61, %zmm16, %zmm16 + vprolq $56, %zmm10, %zmm10 + vprolq $14, %zmm9, %zmm9 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm21, %zmm0 + vpternlogq $0xd2, %zmm13, %zmm17, %zmm21 + vpternlogq $0xd2, %zmm9, %zmm13, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm8, %zmm12 + vpternlogq $0xd2, %zmm20, %zmm4, %zmm8 + vpternlogq $0xd2, %zmm16, %zmm20, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm15, %zmm24 + vpternlogq $0xd2, %zmm7, %zmm11, %zmm15 + vpternlogq $0xd2, %zmm3, %zmm7, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm2, %zmm6 + vpternlogq $0xd2, %zmm19, %zmm23, %zmm2 + vpternlogq $0xd2, %zmm10, %zmm19, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm14, %zmm18 + vpternlogq $0xd2, %zmm1, %zmm5, %zmm14 + vpternlogq $0xd2, %zmm22, %zmm1, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + # Iota + vpxorq 832(%rdx), %zmm0, %zmm0 + # Round 14 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm24, %zmm12, %zmm25 + vpternlogq $0x96, %zmm18, %zmm6, %zmm25 + vmovdqu64 %zmm21, %zmm26 + vpternlogq $0x96, %zmm15, %zmm8, %zmm26 + vpternlogq $0x96, %zmm14, %zmm2, %zmm26 + vmovdqu64 %zmm17, %zmm27 + vpternlogq $0x96, %zmm11, %zmm4, %zmm27 + vpternlogq $0x96, %zmm5, %zmm23, %zmm27 + vmovdqu64 %zmm13, %zmm28 + vpternlogq $0x96, %zmm7, %zmm20, %zmm28 + vpternlogq $0x96, %zmm1, %zmm19, %zmm28 + vmovdqu64 %zmm9, %zmm29 + vpternlogq $0x96, %zmm3, %zmm16, %zmm29 + vpternlogq $0x96, %zmm22, %zmm10, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm22, %zmm22 + # Rho - rotate each lane in place + vprolq $0x01, %zmm21, %zmm21 + vprolq $62, %zmm17, %zmm17 + vprolq $28, %zmm13, %zmm13 + vprolq $27, %zmm9, %zmm9 + vprolq $36, %zmm12, %zmm12 + vprolq $44, %zmm8, %zmm8 + vprolq $6, %zmm4, %zmm4 + vprolq $55, %zmm20, %zmm20 + vprolq $20, %zmm16, %zmm16 + vprolq $3, %zmm24, %zmm24 + vprolq $10, %zmm15, %zmm15 + vprolq $43, %zmm11, %zmm11 + vprolq $25, %zmm7, %zmm7 + vprolq $39, %zmm3, %zmm3 + vprolq $41, %zmm6, %zmm6 + vprolq $45, %zmm2, %zmm2 + vprolq $15, %zmm23, %zmm23 + vprolq $21, %zmm19, %zmm19 + vprolq $8, %zmm10, %zmm10 + vprolq $18, %zmm18, %zmm18 + vprolq $2, %zmm14, %zmm14 + vprolq $61, %zmm5, %zmm5 + vprolq $56, %zmm1, %zmm1 + vprolq $14, %zmm22, %zmm22 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm8, %zmm0 + vpternlogq $0xd2, %zmm19, %zmm11, %zmm8 + vpternlogq $0xd2, %zmm22, %zmm19, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm16, %zmm13 + vpternlogq $0xd2, %zmm2, %zmm24, %zmm16 + vpternlogq $0xd2, %zmm5, %zmm2, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm4, %zmm21 + vpternlogq $0xd2, %zmm10, %zmm7, %zmm4 + vpternlogq $0xd2, %zmm18, %zmm10, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm12, %zmm9 + vpternlogq $0xd2, %zmm23, %zmm15, %zmm12 + vpternlogq $0xd2, %zmm1, %zmm23, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm20, %zmm17 + vpternlogq $0xd2, %zmm6, %zmm3, %zmm20 + vpternlogq $0xd2, %zmm14, %zmm6, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + # Iota + vpxorq 896(%rdx), %zmm0, %zmm0 + # Round 15 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm21, %zmm13, %zmm25 + vpternlogq $0x96, %zmm17, %zmm9, %zmm25 + vmovdqu64 %zmm8, %zmm26 + vpternlogq $0x96, %zmm4, %zmm16, %zmm26 + vpternlogq $0x96, %zmm20, %zmm12, %zmm26 + vmovdqu64 %zmm11, %zmm27 + vpternlogq $0x96, %zmm7, %zmm24, %zmm27 + vpternlogq $0x96, %zmm3, %zmm15, %zmm27 + vmovdqu64 %zmm19, %zmm28 + vpternlogq $0x96, %zmm10, %zmm2, %zmm28 + vpternlogq $0x96, %zmm6, %zmm23, %zmm28 + vmovdqu64 %zmm22, %zmm29 + vpternlogq $0x96, %zmm18, %zmm5, %zmm29 + vpternlogq $0x96, %zmm14, %zmm1, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm14, %zmm14 + # Rho - rotate each lane in place + vprolq $0x01, %zmm8, %zmm8 + vprolq $62, %zmm11, %zmm11 + vprolq $28, %zmm19, %zmm19 + vprolq $27, %zmm22, %zmm22 + vprolq $36, %zmm13, %zmm13 + vprolq $44, %zmm16, %zmm16 + vprolq $6, %zmm24, %zmm24 + vprolq $55, %zmm2, %zmm2 + vprolq $20, %zmm5, %zmm5 + vprolq $3, %zmm21, %zmm21 + vprolq $10, %zmm4, %zmm4 + vprolq $43, %zmm7, %zmm7 + vprolq $25, %zmm10, %zmm10 + vprolq $39, %zmm18, %zmm18 + vprolq $41, %zmm9, %zmm9 + vprolq $45, %zmm12, %zmm12 + vprolq $15, %zmm15, %zmm15 + vprolq $21, %zmm23, %zmm23 + vprolq $8, %zmm1, %zmm1 + vprolq $18, %zmm17, %zmm17 + vprolq $2, %zmm20, %zmm20 + vprolq $61, %zmm3, %zmm3 + vprolq $56, %zmm6, %zmm6 + vprolq $14, %zmm14, %zmm14 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm16, %zmm0 + vpternlogq $0xd2, %zmm23, %zmm7, %zmm16 + vpternlogq $0xd2, %zmm14, %zmm23, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm5, %zmm19 + vpternlogq $0xd2, %zmm12, %zmm21, %zmm5 + vpternlogq $0xd2, %zmm3, %zmm12, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm24, %zmm8 + vpternlogq $0xd2, %zmm1, %zmm10, %zmm24 + vpternlogq $0xd2, %zmm17, %zmm1, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm13, %zmm22 + vpternlogq $0xd2, %zmm15, %zmm4, %zmm13 + vpternlogq $0xd2, %zmm6, %zmm15, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm2, %zmm11 + vpternlogq $0xd2, %zmm9, %zmm18, %zmm2 + vpternlogq $0xd2, %zmm20, %zmm9, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + # Iota + vpxorq 960(%rdx), %zmm0, %zmm0 + # Round 16 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm8, %zmm19, %zmm25 + vpternlogq $0x96, %zmm11, %zmm22, %zmm25 + vmovdqu64 %zmm16, %zmm26 + vpternlogq $0x96, %zmm24, %zmm5, %zmm26 + vpternlogq $0x96, %zmm2, %zmm13, %zmm26 + vmovdqu64 %zmm7, %zmm27 + vpternlogq $0x96, %zmm10, %zmm21, %zmm27 + vpternlogq $0x96, %zmm18, %zmm4, %zmm27 + vmovdqu64 %zmm23, %zmm28 + vpternlogq $0x96, %zmm1, %zmm12, %zmm28 + vpternlogq $0x96, %zmm9, %zmm15, %zmm28 + vmovdqu64 %zmm14, %zmm29 + vpternlogq $0x96, %zmm17, %zmm3, %zmm29 + vpternlogq $0x96, %zmm20, %zmm6, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm20, %zmm20 + # Rho - rotate each lane in place + vprolq $0x01, %zmm16, %zmm16 + vprolq $62, %zmm7, %zmm7 + vprolq $28, %zmm23, %zmm23 + vprolq $27, %zmm14, %zmm14 + vprolq $36, %zmm19, %zmm19 + vprolq $44, %zmm5, %zmm5 + vprolq $6, %zmm21, %zmm21 + vprolq $55, %zmm12, %zmm12 + vprolq $20, %zmm3, %zmm3 + vprolq $3, %zmm8, %zmm8 + vprolq $10, %zmm24, %zmm24 + vprolq $43, %zmm10, %zmm10 + vprolq $25, %zmm1, %zmm1 + vprolq $39, %zmm17, %zmm17 + vprolq $41, %zmm22, %zmm22 + vprolq $45, %zmm13, %zmm13 + vprolq $15, %zmm4, %zmm4 + vprolq $21, %zmm15, %zmm15 + vprolq $8, %zmm6, %zmm6 + vprolq $18, %zmm11, %zmm11 + vprolq $2, %zmm2, %zmm2 + vprolq $61, %zmm18, %zmm18 + vprolq $56, %zmm9, %zmm9 + vprolq $14, %zmm20, %zmm20 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm5, %zmm0 + vpternlogq $0xd2, %zmm15, %zmm10, %zmm5 + vpternlogq $0xd2, %zmm20, %zmm15, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm3, %zmm23 + vpternlogq $0xd2, %zmm13, %zmm8, %zmm3 + vpternlogq $0xd2, %zmm18, %zmm13, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm21, %zmm16 + vpternlogq $0xd2, %zmm6, %zmm1, %zmm21 + vpternlogq $0xd2, %zmm11, %zmm6, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm19, %zmm14 + vpternlogq $0xd2, %zmm4, %zmm24, %zmm19 + vpternlogq $0xd2, %zmm9, %zmm4, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm12, %zmm7 + vpternlogq $0xd2, %zmm22, %zmm17, %zmm12 + vpternlogq $0xd2, %zmm2, %zmm22, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + # Iota + vpxorq 1024(%rdx), %zmm0, %zmm0 + # Round 17 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm16, %zmm23, %zmm25 + vpternlogq $0x96, %zmm7, %zmm14, %zmm25 + vmovdqu64 %zmm5, %zmm26 + vpternlogq $0x96, %zmm21, %zmm3, %zmm26 + vpternlogq $0x96, %zmm12, %zmm19, %zmm26 + vmovdqu64 %zmm10, %zmm27 + vpternlogq $0x96, %zmm1, %zmm8, %zmm27 + vpternlogq $0x96, %zmm17, %zmm24, %zmm27 + vmovdqu64 %zmm15, %zmm28 + vpternlogq $0x96, %zmm6, %zmm13, %zmm28 + vpternlogq $0x96, %zmm22, %zmm4, %zmm28 + vmovdqu64 %zmm20, %zmm29 + vpternlogq $0x96, %zmm11, %zmm18, %zmm29 + vpternlogq $0x96, %zmm2, %zmm9, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm2, %zmm2 + # Rho - rotate each lane in place + vprolq $0x01, %zmm5, %zmm5 + vprolq $62, %zmm10, %zmm10 + vprolq $28, %zmm15, %zmm15 + vprolq $27, %zmm20, %zmm20 + vprolq $36, %zmm23, %zmm23 + vprolq $44, %zmm3, %zmm3 + vprolq $6, %zmm8, %zmm8 + vprolq $55, %zmm13, %zmm13 + vprolq $20, %zmm18, %zmm18 + vprolq $3, %zmm16, %zmm16 + vprolq $10, %zmm21, %zmm21 + vprolq $43, %zmm1, %zmm1 + vprolq $25, %zmm6, %zmm6 + vprolq $39, %zmm11, %zmm11 + vprolq $41, %zmm14, %zmm14 + vprolq $45, %zmm19, %zmm19 + vprolq $15, %zmm24, %zmm24 + vprolq $21, %zmm4, %zmm4 + vprolq $8, %zmm9, %zmm9 + vprolq $18, %zmm7, %zmm7 + vprolq $2, %zmm12, %zmm12 + vprolq $61, %zmm17, %zmm17 + vprolq $56, %zmm22, %zmm22 + vprolq $14, %zmm2, %zmm2 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm3, %zmm0 + vpternlogq $0xd2, %zmm4, %zmm1, %zmm3 + vpternlogq $0xd2, %zmm2, %zmm4, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm18, %zmm15 + vpternlogq $0xd2, %zmm19, %zmm16, %zmm18 + vpternlogq $0xd2, %zmm17, %zmm19, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm8, %zmm5 + vpternlogq $0xd2, %zmm9, %zmm6, %zmm8 + vpternlogq $0xd2, %zmm7, %zmm9, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm23, %zmm20 + vpternlogq $0xd2, %zmm24, %zmm21, %zmm23 + vpternlogq $0xd2, %zmm22, %zmm24, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm13, %zmm10 + vpternlogq $0xd2, %zmm14, %zmm11, %zmm13 + vpternlogq $0xd2, %zmm12, %zmm14, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + # Iota + vpxorq 1088(%rdx), %zmm0, %zmm0 + # Round 18 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm5, %zmm15, %zmm25 + vpternlogq $0x96, %zmm10, %zmm20, %zmm25 + vmovdqu64 %zmm3, %zmm26 + vpternlogq $0x96, %zmm8, %zmm18, %zmm26 + vpternlogq $0x96, %zmm13, %zmm23, %zmm26 + vmovdqu64 %zmm1, %zmm27 + vpternlogq $0x96, %zmm6, %zmm16, %zmm27 + vpternlogq $0x96, %zmm11, %zmm21, %zmm27 + vmovdqu64 %zmm4, %zmm28 + vpternlogq $0x96, %zmm9, %zmm19, %zmm28 + vpternlogq $0x96, %zmm14, %zmm24, %zmm28 + vmovdqu64 %zmm2, %zmm29 + vpternlogq $0x96, %zmm7, %zmm17, %zmm29 + vpternlogq $0x96, %zmm12, %zmm22, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm12, %zmm12 + # Rho - rotate each lane in place + vprolq $0x01, %zmm3, %zmm3 + vprolq $62, %zmm1, %zmm1 + vprolq $28, %zmm4, %zmm4 + vprolq $27, %zmm2, %zmm2 + vprolq $36, %zmm15, %zmm15 + vprolq $44, %zmm18, %zmm18 + vprolq $6, %zmm16, %zmm16 + vprolq $55, %zmm19, %zmm19 + vprolq $20, %zmm17, %zmm17 + vprolq $3, %zmm5, %zmm5 + vprolq $10, %zmm8, %zmm8 + vprolq $43, %zmm6, %zmm6 + vprolq $25, %zmm9, %zmm9 + vprolq $39, %zmm7, %zmm7 + vprolq $41, %zmm20, %zmm20 + vprolq $45, %zmm23, %zmm23 + vprolq $15, %zmm21, %zmm21 + vprolq $21, %zmm24, %zmm24 + vprolq $8, %zmm22, %zmm22 + vprolq $18, %zmm10, %zmm10 + vprolq $2, %zmm13, %zmm13 + vprolq $61, %zmm11, %zmm11 + vprolq $56, %zmm14, %zmm14 + vprolq $14, %zmm12, %zmm12 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm18, %zmm0 + vpternlogq $0xd2, %zmm24, %zmm6, %zmm18 + vpternlogq $0xd2, %zmm12, %zmm24, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm17, %zmm4 + vpternlogq $0xd2, %zmm23, %zmm5, %zmm17 + vpternlogq $0xd2, %zmm11, %zmm23, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm16, %zmm3 + vpternlogq $0xd2, %zmm22, %zmm9, %zmm16 + vpternlogq $0xd2, %zmm10, %zmm22, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm15, %zmm2 + vpternlogq $0xd2, %zmm21, %zmm8, %zmm15 + vpternlogq $0xd2, %zmm14, %zmm21, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm19, %zmm1 + vpternlogq $0xd2, %zmm20, %zmm7, %zmm19 + vpternlogq $0xd2, %zmm13, %zmm20, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + # Iota + vpxorq 1152(%rdx), %zmm0, %zmm0 + # Round 19 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm3, %zmm4, %zmm25 + vpternlogq $0x96, %zmm1, %zmm2, %zmm25 + vmovdqu64 %zmm18, %zmm26 + vpternlogq $0x96, %zmm16, %zmm17, %zmm26 + vpternlogq $0x96, %zmm19, %zmm15, %zmm26 + vmovdqu64 %zmm6, %zmm27 + vpternlogq $0x96, %zmm9, %zmm5, %zmm27 + vpternlogq $0x96, %zmm7, %zmm8, %zmm27 + vmovdqu64 %zmm24, %zmm28 + vpternlogq $0x96, %zmm22, %zmm23, %zmm28 + vpternlogq $0x96, %zmm20, %zmm21, %zmm28 + vmovdqu64 %zmm12, %zmm29 + vpternlogq $0x96, %zmm10, %zmm11, %zmm29 + vpternlogq $0x96, %zmm13, %zmm14, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm13, %zmm13 + # Rho - rotate each lane in place + vprolq $0x01, %zmm18, %zmm18 + vprolq $62, %zmm6, %zmm6 + vprolq $28, %zmm24, %zmm24 + vprolq $27, %zmm12, %zmm12 + vprolq $36, %zmm4, %zmm4 + vprolq $44, %zmm17, %zmm17 + vprolq $6, %zmm5, %zmm5 + vprolq $55, %zmm23, %zmm23 + vprolq $20, %zmm11, %zmm11 + vprolq $3, %zmm3, %zmm3 + vprolq $10, %zmm16, %zmm16 + vprolq $43, %zmm9, %zmm9 + vprolq $25, %zmm22, %zmm22 + vprolq $39, %zmm10, %zmm10 + vprolq $41, %zmm2, %zmm2 + vprolq $45, %zmm15, %zmm15 + vprolq $15, %zmm8, %zmm8 + vprolq $21, %zmm21, %zmm21 + vprolq $8, %zmm14, %zmm14 + vprolq $18, %zmm1, %zmm1 + vprolq $2, %zmm19, %zmm19 + vprolq $61, %zmm7, %zmm7 + vprolq $56, %zmm20, %zmm20 + vprolq $14, %zmm13, %zmm13 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm17, %zmm0 + vpternlogq $0xd2, %zmm21, %zmm9, %zmm17 + vpternlogq $0xd2, %zmm13, %zmm21, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm11, %zmm24 + vpternlogq $0xd2, %zmm15, %zmm3, %zmm11 + vpternlogq $0xd2, %zmm7, %zmm15, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm5, %zmm18 + vpternlogq $0xd2, %zmm14, %zmm22, %zmm5 + vpternlogq $0xd2, %zmm1, %zmm14, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm4, %zmm12 + vpternlogq $0xd2, %zmm8, %zmm16, %zmm4 + vpternlogq $0xd2, %zmm20, %zmm8, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm23, %zmm6 + vpternlogq $0xd2, %zmm2, %zmm10, %zmm23 + vpternlogq $0xd2, %zmm19, %zmm2, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + # Iota + vpxorq 1216(%rdx), %zmm0, %zmm0 + # Round 20 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm18, %zmm24, %zmm25 + vpternlogq $0x96, %zmm6, %zmm12, %zmm25 + vmovdqu64 %zmm17, %zmm26 + vpternlogq $0x96, %zmm5, %zmm11, %zmm26 + vpternlogq $0x96, %zmm23, %zmm4, %zmm26 + vmovdqu64 %zmm9, %zmm27 + vpternlogq $0x96, %zmm22, %zmm3, %zmm27 + vpternlogq $0x96, %zmm10, %zmm16, %zmm27 + vmovdqu64 %zmm21, %zmm28 + vpternlogq $0x96, %zmm14, %zmm15, %zmm28 + vpternlogq $0x96, %zmm2, %zmm8, %zmm28 + vmovdqu64 %zmm13, %zmm29 + vpternlogq $0x96, %zmm1, %zmm7, %zmm29 + vpternlogq $0x96, %zmm19, %zmm20, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm19, %zmm19 + # Rho - rotate each lane in place + vprolq $0x01, %zmm17, %zmm17 + vprolq $62, %zmm9, %zmm9 + vprolq $28, %zmm21, %zmm21 + vprolq $27, %zmm13, %zmm13 + vprolq $36, %zmm24, %zmm24 + vprolq $44, %zmm11, %zmm11 + vprolq $6, %zmm3, %zmm3 + vprolq $55, %zmm15, %zmm15 + vprolq $20, %zmm7, %zmm7 + vprolq $3, %zmm18, %zmm18 + vprolq $10, %zmm5, %zmm5 + vprolq $43, %zmm22, %zmm22 + vprolq $25, %zmm14, %zmm14 + vprolq $39, %zmm1, %zmm1 + vprolq $41, %zmm12, %zmm12 + vprolq $45, %zmm4, %zmm4 + vprolq $15, %zmm16, %zmm16 + vprolq $21, %zmm8, %zmm8 + vprolq $8, %zmm20, %zmm20 + vprolq $18, %zmm6, %zmm6 + vprolq $2, %zmm23, %zmm23 + vprolq $61, %zmm10, %zmm10 + vprolq $56, %zmm2, %zmm2 + vprolq $14, %zmm19, %zmm19 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm11, %zmm0 + vpternlogq $0xd2, %zmm8, %zmm22, %zmm11 + vpternlogq $0xd2, %zmm19, %zmm8, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm7, %zmm21 + vpternlogq $0xd2, %zmm4, %zmm18, %zmm7 + vpternlogq $0xd2, %zmm10, %zmm4, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm3, %zmm17 + vpternlogq $0xd2, %zmm20, %zmm14, %zmm3 + vpternlogq $0xd2, %zmm6, %zmm20, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm24, %zmm13 + vpternlogq $0xd2, %zmm16, %zmm5, %zmm24 + vpternlogq $0xd2, %zmm2, %zmm16, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm15, %zmm9 + vpternlogq $0xd2, %zmm12, %zmm1, %zmm15 + vpternlogq $0xd2, %zmm23, %zmm12, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + # Iota + vpxorq 1280(%rdx), %zmm0, %zmm0 + # Round 21 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm17, %zmm21, %zmm25 + vpternlogq $0x96, %zmm9, %zmm13, %zmm25 + vmovdqu64 %zmm11, %zmm26 + vpternlogq $0x96, %zmm3, %zmm7, %zmm26 + vpternlogq $0x96, %zmm15, %zmm24, %zmm26 + vmovdqu64 %zmm22, %zmm27 + vpternlogq $0x96, %zmm14, %zmm18, %zmm27 + vpternlogq $0x96, %zmm1, %zmm5, %zmm27 + vmovdqu64 %zmm8, %zmm28 + vpternlogq $0x96, %zmm20, %zmm4, %zmm28 + vpternlogq $0x96, %zmm12, %zmm16, %zmm28 + vmovdqu64 %zmm19, %zmm29 + vpternlogq $0x96, %zmm6, %zmm10, %zmm29 + vpternlogq $0x96, %zmm23, %zmm2, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm23, %zmm23 + # Rho - rotate each lane in place + vprolq $0x01, %zmm11, %zmm11 + vprolq $62, %zmm22, %zmm22 + vprolq $28, %zmm8, %zmm8 + vprolq $27, %zmm19, %zmm19 + vprolq $36, %zmm21, %zmm21 + vprolq $44, %zmm7, %zmm7 + vprolq $6, %zmm18, %zmm18 + vprolq $55, %zmm4, %zmm4 + vprolq $20, %zmm10, %zmm10 + vprolq $3, %zmm17, %zmm17 + vprolq $10, %zmm3, %zmm3 + vprolq $43, %zmm14, %zmm14 + vprolq $25, %zmm20, %zmm20 + vprolq $39, %zmm6, %zmm6 + vprolq $41, %zmm13, %zmm13 + vprolq $45, %zmm24, %zmm24 + vprolq $15, %zmm5, %zmm5 + vprolq $21, %zmm16, %zmm16 + vprolq $8, %zmm2, %zmm2 + vprolq $18, %zmm9, %zmm9 + vprolq $2, %zmm15, %zmm15 + vprolq $61, %zmm1, %zmm1 + vprolq $56, %zmm12, %zmm12 + vprolq $14, %zmm23, %zmm23 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm7, %zmm0 + vpternlogq $0xd2, %zmm16, %zmm14, %zmm7 + vpternlogq $0xd2, %zmm23, %zmm16, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm10, %zmm8 + vpternlogq $0xd2, %zmm24, %zmm17, %zmm10 + vpternlogq $0xd2, %zmm1, %zmm24, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm18, %zmm11 + vpternlogq $0xd2, %zmm2, %zmm20, %zmm18 + vpternlogq $0xd2, %zmm9, %zmm2, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm21, %zmm19 + vpternlogq $0xd2, %zmm5, %zmm3, %zmm21 + vpternlogq $0xd2, %zmm12, %zmm5, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm4, %zmm22 + vpternlogq $0xd2, %zmm13, %zmm6, %zmm4 + vpternlogq $0xd2, %zmm15, %zmm13, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + # Iota + vpxorq 1344(%rdx), %zmm0, %zmm0 + # Round 22 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm11, %zmm8, %zmm25 + vpternlogq $0x96, %zmm22, %zmm19, %zmm25 + vmovdqu64 %zmm7, %zmm26 + vpternlogq $0x96, %zmm18, %zmm10, %zmm26 + vpternlogq $0x96, %zmm4, %zmm21, %zmm26 + vmovdqu64 %zmm14, %zmm27 + vpternlogq $0x96, %zmm20, %zmm17, %zmm27 + vpternlogq $0x96, %zmm6, %zmm3, %zmm27 + vmovdqu64 %zmm16, %zmm28 + vpternlogq $0x96, %zmm2, %zmm24, %zmm28 + vpternlogq $0x96, %zmm13, %zmm5, %zmm28 + vmovdqu64 %zmm23, %zmm29 + vpternlogq $0x96, %zmm9, %zmm1, %zmm29 + vpternlogq $0x96, %zmm15, %zmm12, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm15, %zmm15 + # Rho - rotate each lane in place + vprolq $0x01, %zmm7, %zmm7 + vprolq $62, %zmm14, %zmm14 + vprolq $28, %zmm16, %zmm16 + vprolq $27, %zmm23, %zmm23 + vprolq $36, %zmm8, %zmm8 + vprolq $44, %zmm10, %zmm10 + vprolq $6, %zmm17, %zmm17 + vprolq $55, %zmm24, %zmm24 + vprolq $20, %zmm1, %zmm1 + vprolq $3, %zmm11, %zmm11 + vprolq $10, %zmm18, %zmm18 + vprolq $43, %zmm20, %zmm20 + vprolq $25, %zmm2, %zmm2 + vprolq $39, %zmm9, %zmm9 + vprolq $41, %zmm19, %zmm19 + vprolq $45, %zmm21, %zmm21 + vprolq $15, %zmm3, %zmm3 + vprolq $21, %zmm5, %zmm5 + vprolq $8, %zmm12, %zmm12 + vprolq $18, %zmm22, %zmm22 + vprolq $2, %zmm4, %zmm4 + vprolq $61, %zmm6, %zmm6 + vprolq $56, %zmm13, %zmm13 + vprolq $14, %zmm15, %zmm15 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm10, %zmm0 + vpternlogq $0xd2, %zmm5, %zmm20, %zmm10 + vpternlogq $0xd2, %zmm15, %zmm5, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm1, %zmm16 + vpternlogq $0xd2, %zmm21, %zmm11, %zmm1 + vpternlogq $0xd2, %zmm6, %zmm21, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm17, %zmm7 + vpternlogq $0xd2, %zmm12, %zmm2, %zmm17 + vpternlogq $0xd2, %zmm22, %zmm12, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm8, %zmm23 + vpternlogq $0xd2, %zmm3, %zmm18, %zmm8 + vpternlogq $0xd2, %zmm13, %zmm3, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm24, %zmm14 + vpternlogq $0xd2, %zmm19, %zmm9, %zmm24 + vpternlogq $0xd2, %zmm4, %zmm19, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + # Iota + vpxorq 1408(%rdx), %zmm0, %zmm0 + # Round 23 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm7, %zmm16, %zmm25 + vpternlogq $0x96, %zmm14, %zmm23, %zmm25 + vmovdqu64 %zmm10, %zmm26 + vpternlogq $0x96, %zmm17, %zmm1, %zmm26 + vpternlogq $0x96, %zmm24, %zmm8, %zmm26 + vmovdqu64 %zmm20, %zmm27 + vpternlogq $0x96, %zmm2, %zmm11, %zmm27 + vpternlogq $0x96, %zmm9, %zmm18, %zmm27 + vmovdqu64 %zmm5, %zmm28 + vpternlogq $0x96, %zmm12, %zmm21, %zmm28 + vpternlogq $0x96, %zmm19, %zmm3, %zmm28 + vmovdqu64 %zmm15, %zmm29 + vpternlogq $0x96, %zmm22, %zmm6, %zmm29 + vpternlogq $0x96, %zmm4, %zmm13, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm4, %zmm4 + # Rho - rotate each lane in place + vprolq $0x01, %zmm10, %zmm10 + vprolq $62, %zmm20, %zmm20 + vprolq $28, %zmm5, %zmm5 + vprolq $27, %zmm15, %zmm15 + vprolq $36, %zmm16, %zmm16 + vprolq $44, %zmm1, %zmm1 + vprolq $6, %zmm11, %zmm11 + vprolq $55, %zmm21, %zmm21 + vprolq $20, %zmm6, %zmm6 + vprolq $3, %zmm7, %zmm7 + vprolq $10, %zmm17, %zmm17 + vprolq $43, %zmm2, %zmm2 + vprolq $25, %zmm12, %zmm12 + vprolq $39, %zmm22, %zmm22 + vprolq $41, %zmm23, %zmm23 + vprolq $45, %zmm8, %zmm8 + vprolq $15, %zmm18, %zmm18 + vprolq $21, %zmm3, %zmm3 + vprolq $8, %zmm13, %zmm13 + vprolq $18, %zmm14, %zmm14 + vprolq $2, %zmm24, %zmm24 + vprolq $61, %zmm9, %zmm9 + vprolq $56, %zmm19, %zmm19 + vprolq $14, %zmm4, %zmm4 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm1, %zmm0 + vpternlogq $0xd2, %zmm3, %zmm2, %zmm1 + vpternlogq $0xd2, %zmm4, %zmm3, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm6, %zmm5 + vpternlogq $0xd2, %zmm8, %zmm7, %zmm6 + vpternlogq $0xd2, %zmm9, %zmm8, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm11, %zmm10 + vpternlogq $0xd2, %zmm13, %zmm12, %zmm11 + vpternlogq $0xd2, %zmm14, %zmm13, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm16, %zmm15 + vpternlogq $0xd2, %zmm18, %zmm17, %zmm16 + vpternlogq $0xd2, %zmm19, %zmm18, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm21, %zmm20 + vpternlogq $0xd2, %zmm23, %zmm22, %zmm21 + vpternlogq $0xd2, %zmm24, %zmm23, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + # Iota + vpxorq 1472(%rdx), %zmm0, %zmm0 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vmovdqu64 %zmm8, 512(%rdi) + vmovdqu64 %zmm9, 576(%rdi) + vmovdqu64 %zmm10, 640(%rdi) + vmovdqu64 %zmm11, 704(%rdi) + vmovdqu64 %zmm12, 768(%rdi) + vmovdqu64 %zmm13, 832(%rdi) + vmovdqu64 %zmm14, 896(%rdi) + vmovdqu64 %zmm15, 960(%rdi) + vmovdqu64 %zmm16, 1024(%rdi) + vmovdqu64 %zmm17, 1088(%rdi) + vmovdqu64 %zmm18, 1152(%rdi) + vmovdqu64 %zmm19, 1216(%rdi) + vmovdqu64 %zmm20, 1280(%rdi) + vmovdqu64 %zmm21, 1344(%rdi) + vmovdqu64 %zmm22, 1408(%rdi) + vmovdqu64 %zmm23, 1472(%rdi) + vmovdqu64 %zmm24, 1536(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size sha3_128_blocksx8_seed_avx512,.-sha3_128_blocksx8_seed_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_sha3_256_blocksx8_seed_avx512_end_mark: +.quad 0x8000000000000000,0x8000000000000000 +.quad 0x8000000000000000,0x8000000000000000 +.quad 0x8000000000000000,0x8000000000000000 +.quad 0x8000000000000000,0x8000000000000000 +#ifndef __APPLE__ +.text +.globl sha3_256_blocksx8_seed_avx512 +.type sha3_256_blocksx8_seed_avx512,@function +.align 16 +sha3_256_blocksx8_seed_avx512: +#else +.section __TEXT,__text +.globl _sha3_256_blocksx8_seed_avx512 +.p2align 4 +_sha3_256_blocksx8_seed_avx512: +#endif /* __APPLE__ */ + leaq L_sha3_x8_avx512_r(%rip), %rdx + vpbroadcastq (%rsi), %zmm0 + vpbroadcastq 8(%rsi), %zmm1 + vpbroadcastq 16(%rsi), %zmm2 + vpbroadcastq 24(%rsi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vpxorq %zmm5, %zmm5, %zmm5 + vmovdqu64 %zmm5, %zmm6 + vmovdqu64 %zmm5, %zmm7 + vmovdqu64 %zmm5, %zmm8 + vmovdqu64 %zmm5, %zmm9 + vmovdqu64 %zmm5, %zmm10 + vmovdqu64 %zmm5, %zmm11 + vmovdqu64 %zmm5, %zmm12 + vmovdqu64 %zmm5, %zmm13 + vmovdqu64 %zmm5, %zmm14 + vmovdqu64 %zmm5, %zmm15 + vmovdqu64 L_sha3_256_blocksx8_seed_avx512_end_mark(%rip), %zmm16 + vmovdqu64 %zmm5, %zmm17 + vmovdqu64 %zmm5, %zmm18 + vmovdqu64 %zmm5, %zmm19 + vmovdqu64 %zmm5, %zmm20 + vmovdqu64 %zmm5, %zmm21 + vmovdqu64 %zmm5, %zmm22 + vmovdqu64 %zmm5, %zmm23 + vmovdqu64 %zmm5, %zmm24 + # Round 0 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm10, %zmm5, %zmm25 + vpternlogq $0x96, %zmm20, %zmm15, %zmm25 + vmovdqu64 %zmm1, %zmm26 + vpternlogq $0x96, %zmm11, %zmm6, %zmm26 + vpternlogq $0x96, %zmm21, %zmm16, %zmm26 + vmovdqu64 %zmm2, %zmm27 + vpternlogq $0x96, %zmm12, %zmm7, %zmm27 + vpternlogq $0x96, %zmm22, %zmm17, %zmm27 + vmovdqu64 %zmm3, %zmm28 + vpternlogq $0x96, %zmm13, %zmm8, %zmm28 + vpternlogq $0x96, %zmm23, %zmm18, %zmm28 + vmovdqu64 %zmm4, %zmm29 + vpternlogq $0x96, %zmm14, %zmm9, %zmm29 + vpternlogq $0x96, %zmm24, %zmm19, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm24, %zmm24 + # Rho - rotate each lane in place + vprolq $0x01, %zmm1, %zmm1 + vprolq $62, %zmm2, %zmm2 + vprolq $28, %zmm3, %zmm3 + vprolq $27, %zmm4, %zmm4 + vprolq $36, %zmm5, %zmm5 + vprolq $44, %zmm6, %zmm6 + vprolq $6, %zmm7, %zmm7 + vprolq $55, %zmm8, %zmm8 + vprolq $20, %zmm9, %zmm9 + vprolq $3, %zmm10, %zmm10 + vprolq $10, %zmm11, %zmm11 + vprolq $43, %zmm12, %zmm12 + vprolq $25, %zmm13, %zmm13 + vprolq $39, %zmm14, %zmm14 + vprolq $41, %zmm15, %zmm15 + vprolq $45, %zmm16, %zmm16 + vprolq $15, %zmm17, %zmm17 + vprolq $21, %zmm18, %zmm18 + vprolq $8, %zmm19, %zmm19 + vprolq $18, %zmm20, %zmm20 + vprolq $2, %zmm21, %zmm21 + vprolq $61, %zmm22, %zmm22 + vprolq $56, %zmm23, %zmm23 + vprolq $14, %zmm24, %zmm24 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm6, %zmm0 + vpternlogq $0xd2, %zmm18, %zmm12, %zmm6 + vpternlogq $0xd2, %zmm24, %zmm18, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm9, %zmm3 + vpternlogq $0xd2, %zmm16, %zmm10, %zmm9 + vpternlogq $0xd2, %zmm22, %zmm16, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm7, %zmm1 + vpternlogq $0xd2, %zmm19, %zmm13, %zmm7 + vpternlogq $0xd2, %zmm20, %zmm19, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm5, %zmm4 + vpternlogq $0xd2, %zmm17, %zmm11, %zmm5 + vpternlogq $0xd2, %zmm23, %zmm17, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm8, %zmm2 + vpternlogq $0xd2, %zmm15, %zmm14, %zmm8 + vpternlogq $0xd2, %zmm21, %zmm15, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + # Iota + vpxorq (%rdx), %zmm0, %zmm0 + # Round 1 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm1, %zmm3, %zmm25 + vpternlogq $0x96, %zmm2, %zmm4, %zmm25 + vmovdqu64 %zmm6, %zmm26 + vpternlogq $0x96, %zmm7, %zmm9, %zmm26 + vpternlogq $0x96, %zmm8, %zmm5, %zmm26 + vmovdqu64 %zmm12, %zmm27 + vpternlogq $0x96, %zmm13, %zmm10, %zmm27 + vpternlogq $0x96, %zmm14, %zmm11, %zmm27 + vmovdqu64 %zmm18, %zmm28 + vpternlogq $0x96, %zmm19, %zmm16, %zmm28 + vpternlogq $0x96, %zmm15, %zmm17, %zmm28 + vmovdqu64 %zmm24, %zmm29 + vpternlogq $0x96, %zmm20, %zmm22, %zmm29 + vpternlogq $0x96, %zmm21, %zmm23, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm21, %zmm21 + # Rho - rotate each lane in place + vprolq $0x01, %zmm6, %zmm6 + vprolq $62, %zmm12, %zmm12 + vprolq $28, %zmm18, %zmm18 + vprolq $27, %zmm24, %zmm24 + vprolq $36, %zmm3, %zmm3 + vprolq $44, %zmm9, %zmm9 + vprolq $6, %zmm10, %zmm10 + vprolq $55, %zmm16, %zmm16 + vprolq $20, %zmm22, %zmm22 + vprolq $3, %zmm1, %zmm1 + vprolq $10, %zmm7, %zmm7 + vprolq $43, %zmm13, %zmm13 + vprolq $25, %zmm19, %zmm19 + vprolq $39, %zmm20, %zmm20 + vprolq $41, %zmm4, %zmm4 + vprolq $45, %zmm5, %zmm5 + vprolq $15, %zmm11, %zmm11 + vprolq $21, %zmm17, %zmm17 + vprolq $8, %zmm23, %zmm23 + vprolq $18, %zmm2, %zmm2 + vprolq $2, %zmm8, %zmm8 + vprolq $61, %zmm14, %zmm14 + vprolq $56, %zmm15, %zmm15 + vprolq $14, %zmm21, %zmm21 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm9, %zmm0 + vpternlogq $0xd2, %zmm17, %zmm13, %zmm9 + vpternlogq $0xd2, %zmm21, %zmm17, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm22, %zmm18 + vpternlogq $0xd2, %zmm5, %zmm1, %zmm22 + vpternlogq $0xd2, %zmm14, %zmm5, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm10, %zmm6 + vpternlogq $0xd2, %zmm23, %zmm19, %zmm10 + vpternlogq $0xd2, %zmm2, %zmm23, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm3, %zmm24 + vpternlogq $0xd2, %zmm11, %zmm7, %zmm3 + vpternlogq $0xd2, %zmm15, %zmm11, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm16, %zmm12 + vpternlogq $0xd2, %zmm4, %zmm20, %zmm16 + vpternlogq $0xd2, %zmm8, %zmm4, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + # Iota + vpxorq 64(%rdx), %zmm0, %zmm0 + # Round 2 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm6, %zmm18, %zmm25 + vpternlogq $0x96, %zmm12, %zmm24, %zmm25 + vmovdqu64 %zmm9, %zmm26 + vpternlogq $0x96, %zmm10, %zmm22, %zmm26 + vpternlogq $0x96, %zmm16, %zmm3, %zmm26 + vmovdqu64 %zmm13, %zmm27 + vpternlogq $0x96, %zmm19, %zmm1, %zmm27 + vpternlogq $0x96, %zmm20, %zmm7, %zmm27 + vmovdqu64 %zmm17, %zmm28 + vpternlogq $0x96, %zmm23, %zmm5, %zmm28 + vpternlogq $0x96, %zmm4, %zmm11, %zmm28 + vmovdqu64 %zmm21, %zmm29 + vpternlogq $0x96, %zmm2, %zmm14, %zmm29 + vpternlogq $0x96, %zmm8, %zmm15, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm8, %zmm8 + # Rho - rotate each lane in place + vprolq $0x01, %zmm9, %zmm9 + vprolq $62, %zmm13, %zmm13 + vprolq $28, %zmm17, %zmm17 + vprolq $27, %zmm21, %zmm21 + vprolq $36, %zmm18, %zmm18 + vprolq $44, %zmm22, %zmm22 + vprolq $6, %zmm1, %zmm1 + vprolq $55, %zmm5, %zmm5 + vprolq $20, %zmm14, %zmm14 + vprolq $3, %zmm6, %zmm6 + vprolq $10, %zmm10, %zmm10 + vprolq $43, %zmm19, %zmm19 + vprolq $25, %zmm23, %zmm23 + vprolq $39, %zmm2, %zmm2 + vprolq $41, %zmm24, %zmm24 + vprolq $45, %zmm3, %zmm3 + vprolq $15, %zmm7, %zmm7 + vprolq $21, %zmm11, %zmm11 + vprolq $8, %zmm15, %zmm15 + vprolq $18, %zmm12, %zmm12 + vprolq $2, %zmm16, %zmm16 + vprolq $61, %zmm20, %zmm20 + vprolq $56, %zmm4, %zmm4 + vprolq $14, %zmm8, %zmm8 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm22, %zmm0 + vpternlogq $0xd2, %zmm11, %zmm19, %zmm22 + vpternlogq $0xd2, %zmm8, %zmm11, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm14, %zmm17 + vpternlogq $0xd2, %zmm3, %zmm6, %zmm14 + vpternlogq $0xd2, %zmm20, %zmm3, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm1, %zmm9 + vpternlogq $0xd2, %zmm15, %zmm23, %zmm1 + vpternlogq $0xd2, %zmm12, %zmm15, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm18, %zmm21 + vpternlogq $0xd2, %zmm7, %zmm10, %zmm18 + vpternlogq $0xd2, %zmm4, %zmm7, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm5, %zmm13 + vpternlogq $0xd2, %zmm24, %zmm2, %zmm5 + vpternlogq $0xd2, %zmm16, %zmm24, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + # Iota + vpxorq 128(%rdx), %zmm0, %zmm0 + # Round 3 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm9, %zmm17, %zmm25 + vpternlogq $0x96, %zmm13, %zmm21, %zmm25 + vmovdqu64 %zmm22, %zmm26 + vpternlogq $0x96, %zmm1, %zmm14, %zmm26 + vpternlogq $0x96, %zmm5, %zmm18, %zmm26 + vmovdqu64 %zmm19, %zmm27 + vpternlogq $0x96, %zmm23, %zmm6, %zmm27 + vpternlogq $0x96, %zmm2, %zmm10, %zmm27 + vmovdqu64 %zmm11, %zmm28 + vpternlogq $0x96, %zmm15, %zmm3, %zmm28 + vpternlogq $0x96, %zmm24, %zmm7, %zmm28 + vmovdqu64 %zmm8, %zmm29 + vpternlogq $0x96, %zmm12, %zmm20, %zmm29 + vpternlogq $0x96, %zmm16, %zmm4, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm16, %zmm16 + # Rho - rotate each lane in place + vprolq $0x01, %zmm22, %zmm22 + vprolq $62, %zmm19, %zmm19 + vprolq $28, %zmm11, %zmm11 + vprolq $27, %zmm8, %zmm8 + vprolq $36, %zmm17, %zmm17 + vprolq $44, %zmm14, %zmm14 + vprolq $6, %zmm6, %zmm6 + vprolq $55, %zmm3, %zmm3 + vprolq $20, %zmm20, %zmm20 + vprolq $3, %zmm9, %zmm9 + vprolq $10, %zmm1, %zmm1 + vprolq $43, %zmm23, %zmm23 + vprolq $25, %zmm15, %zmm15 + vprolq $39, %zmm12, %zmm12 + vprolq $41, %zmm21, %zmm21 + vprolq $45, %zmm18, %zmm18 + vprolq $15, %zmm10, %zmm10 + vprolq $21, %zmm7, %zmm7 + vprolq $8, %zmm4, %zmm4 + vprolq $18, %zmm13, %zmm13 + vprolq $2, %zmm5, %zmm5 + vprolq $61, %zmm2, %zmm2 + vprolq $56, %zmm24, %zmm24 + vprolq $14, %zmm16, %zmm16 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm14, %zmm0 + vpternlogq $0xd2, %zmm7, %zmm23, %zmm14 + vpternlogq $0xd2, %zmm16, %zmm7, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm20, %zmm11 + vpternlogq $0xd2, %zmm18, %zmm9, %zmm20 + vpternlogq $0xd2, %zmm2, %zmm18, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm6, %zmm22 + vpternlogq $0xd2, %zmm4, %zmm15, %zmm6 + vpternlogq $0xd2, %zmm13, %zmm4, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm17, %zmm8 + vpternlogq $0xd2, %zmm10, %zmm1, %zmm17 + vpternlogq $0xd2, %zmm24, %zmm10, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm3, %zmm19 + vpternlogq $0xd2, %zmm21, %zmm12, %zmm3 + vpternlogq $0xd2, %zmm5, %zmm21, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + # Iota + vpxorq 192(%rdx), %zmm0, %zmm0 + # Round 4 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm22, %zmm11, %zmm25 + vpternlogq $0x96, %zmm19, %zmm8, %zmm25 + vmovdqu64 %zmm14, %zmm26 + vpternlogq $0x96, %zmm6, %zmm20, %zmm26 + vpternlogq $0x96, %zmm3, %zmm17, %zmm26 + vmovdqu64 %zmm23, %zmm27 + vpternlogq $0x96, %zmm15, %zmm9, %zmm27 + vpternlogq $0x96, %zmm12, %zmm1, %zmm27 + vmovdqu64 %zmm7, %zmm28 + vpternlogq $0x96, %zmm4, %zmm18, %zmm28 + vpternlogq $0x96, %zmm21, %zmm10, %zmm28 + vmovdqu64 %zmm16, %zmm29 + vpternlogq $0x96, %zmm13, %zmm2, %zmm29 + vpternlogq $0x96, %zmm5, %zmm24, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm5, %zmm5 + # Rho - rotate each lane in place + vprolq $0x01, %zmm14, %zmm14 + vprolq $62, %zmm23, %zmm23 + vprolq $28, %zmm7, %zmm7 + vprolq $27, %zmm16, %zmm16 + vprolq $36, %zmm11, %zmm11 + vprolq $44, %zmm20, %zmm20 + vprolq $6, %zmm9, %zmm9 + vprolq $55, %zmm18, %zmm18 + vprolq $20, %zmm2, %zmm2 + vprolq $3, %zmm22, %zmm22 + vprolq $10, %zmm6, %zmm6 + vprolq $43, %zmm15, %zmm15 + vprolq $25, %zmm4, %zmm4 + vprolq $39, %zmm13, %zmm13 + vprolq $41, %zmm8, %zmm8 + vprolq $45, %zmm17, %zmm17 + vprolq $15, %zmm1, %zmm1 + vprolq $21, %zmm10, %zmm10 + vprolq $8, %zmm24, %zmm24 + vprolq $18, %zmm19, %zmm19 + vprolq $2, %zmm3, %zmm3 + vprolq $61, %zmm12, %zmm12 + vprolq $56, %zmm21, %zmm21 + vprolq $14, %zmm5, %zmm5 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm20, %zmm0 + vpternlogq $0xd2, %zmm10, %zmm15, %zmm20 + vpternlogq $0xd2, %zmm5, %zmm10, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm2, %zmm7 + vpternlogq $0xd2, %zmm17, %zmm22, %zmm2 + vpternlogq $0xd2, %zmm12, %zmm17, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm9, %zmm14 + vpternlogq $0xd2, %zmm24, %zmm4, %zmm9 + vpternlogq $0xd2, %zmm19, %zmm24, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm11, %zmm16 + vpternlogq $0xd2, %zmm1, %zmm6, %zmm11 + vpternlogq $0xd2, %zmm21, %zmm1, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm18, %zmm23 + vpternlogq $0xd2, %zmm8, %zmm13, %zmm18 + vpternlogq $0xd2, %zmm3, %zmm8, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + # Iota + vpxorq 256(%rdx), %zmm0, %zmm0 + # Round 5 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm14, %zmm7, %zmm25 + vpternlogq $0x96, %zmm23, %zmm16, %zmm25 + vmovdqu64 %zmm20, %zmm26 + vpternlogq $0x96, %zmm9, %zmm2, %zmm26 + vpternlogq $0x96, %zmm18, %zmm11, %zmm26 + vmovdqu64 %zmm15, %zmm27 + vpternlogq $0x96, %zmm4, %zmm22, %zmm27 + vpternlogq $0x96, %zmm13, %zmm6, %zmm27 + vmovdqu64 %zmm10, %zmm28 + vpternlogq $0x96, %zmm24, %zmm17, %zmm28 + vpternlogq $0x96, %zmm8, %zmm1, %zmm28 + vmovdqu64 %zmm5, %zmm29 + vpternlogq $0x96, %zmm19, %zmm12, %zmm29 + vpternlogq $0x96, %zmm3, %zmm21, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm3, %zmm3 + # Rho - rotate each lane in place + vprolq $0x01, %zmm20, %zmm20 + vprolq $62, %zmm15, %zmm15 + vprolq $28, %zmm10, %zmm10 + vprolq $27, %zmm5, %zmm5 + vprolq $36, %zmm7, %zmm7 + vprolq $44, %zmm2, %zmm2 + vprolq $6, %zmm22, %zmm22 + vprolq $55, %zmm17, %zmm17 + vprolq $20, %zmm12, %zmm12 + vprolq $3, %zmm14, %zmm14 + vprolq $10, %zmm9, %zmm9 + vprolq $43, %zmm4, %zmm4 + vprolq $25, %zmm24, %zmm24 + vprolq $39, %zmm19, %zmm19 + vprolq $41, %zmm16, %zmm16 + vprolq $45, %zmm11, %zmm11 + vprolq $15, %zmm6, %zmm6 + vprolq $21, %zmm1, %zmm1 + vprolq $8, %zmm21, %zmm21 + vprolq $18, %zmm23, %zmm23 + vprolq $2, %zmm18, %zmm18 + vprolq $61, %zmm13, %zmm13 + vprolq $56, %zmm8, %zmm8 + vprolq $14, %zmm3, %zmm3 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm2, %zmm0 + vpternlogq $0xd2, %zmm1, %zmm4, %zmm2 + vpternlogq $0xd2, %zmm3, %zmm1, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm12, %zmm10 + vpternlogq $0xd2, %zmm11, %zmm14, %zmm12 + vpternlogq $0xd2, %zmm13, %zmm11, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm22, %zmm20 + vpternlogq $0xd2, %zmm21, %zmm24, %zmm22 + vpternlogq $0xd2, %zmm23, %zmm21, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm7, %zmm5 + vpternlogq $0xd2, %zmm6, %zmm9, %zmm7 + vpternlogq $0xd2, %zmm8, %zmm6, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm17, %zmm15 + vpternlogq $0xd2, %zmm16, %zmm19, %zmm17 + vpternlogq $0xd2, %zmm18, %zmm16, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + # Iota + vpxorq 320(%rdx), %zmm0, %zmm0 + # Round 6 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm20, %zmm10, %zmm25 + vpternlogq $0x96, %zmm15, %zmm5, %zmm25 + vmovdqu64 %zmm2, %zmm26 + vpternlogq $0x96, %zmm22, %zmm12, %zmm26 + vpternlogq $0x96, %zmm17, %zmm7, %zmm26 + vmovdqu64 %zmm4, %zmm27 + vpternlogq $0x96, %zmm24, %zmm14, %zmm27 + vpternlogq $0x96, %zmm19, %zmm9, %zmm27 + vmovdqu64 %zmm1, %zmm28 + vpternlogq $0x96, %zmm21, %zmm11, %zmm28 + vpternlogq $0x96, %zmm16, %zmm6, %zmm28 + vmovdqu64 %zmm3, %zmm29 + vpternlogq $0x96, %zmm23, %zmm13, %zmm29 + vpternlogq $0x96, %zmm18, %zmm8, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm18, %zmm18 + # Rho - rotate each lane in place + vprolq $0x01, %zmm2, %zmm2 + vprolq $62, %zmm4, %zmm4 + vprolq $28, %zmm1, %zmm1 + vprolq $27, %zmm3, %zmm3 + vprolq $36, %zmm10, %zmm10 + vprolq $44, %zmm12, %zmm12 + vprolq $6, %zmm14, %zmm14 + vprolq $55, %zmm11, %zmm11 + vprolq $20, %zmm13, %zmm13 + vprolq $3, %zmm20, %zmm20 + vprolq $10, %zmm22, %zmm22 + vprolq $43, %zmm24, %zmm24 + vprolq $25, %zmm21, %zmm21 + vprolq $39, %zmm23, %zmm23 + vprolq $41, %zmm5, %zmm5 + vprolq $45, %zmm7, %zmm7 + vprolq $15, %zmm9, %zmm9 + vprolq $21, %zmm6, %zmm6 + vprolq $8, %zmm8, %zmm8 + vprolq $18, %zmm15, %zmm15 + vprolq $2, %zmm17, %zmm17 + vprolq $61, %zmm19, %zmm19 + vprolq $56, %zmm16, %zmm16 + vprolq $14, %zmm18, %zmm18 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm12, %zmm0 + vpternlogq $0xd2, %zmm6, %zmm24, %zmm12 + vpternlogq $0xd2, %zmm18, %zmm6, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm13, %zmm1 + vpternlogq $0xd2, %zmm7, %zmm20, %zmm13 + vpternlogq $0xd2, %zmm19, %zmm7, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm14, %zmm2 + vpternlogq $0xd2, %zmm8, %zmm21, %zmm14 + vpternlogq $0xd2, %zmm15, %zmm8, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm10, %zmm3 + vpternlogq $0xd2, %zmm9, %zmm22, %zmm10 + vpternlogq $0xd2, %zmm16, %zmm9, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm11, %zmm4 + vpternlogq $0xd2, %zmm5, %zmm23, %zmm11 + vpternlogq $0xd2, %zmm17, %zmm5, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + # Iota + vpxorq 384(%rdx), %zmm0, %zmm0 + # Round 7 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm2, %zmm1, %zmm25 + vpternlogq $0x96, %zmm4, %zmm3, %zmm25 + vmovdqu64 %zmm12, %zmm26 + vpternlogq $0x96, %zmm14, %zmm13, %zmm26 + vpternlogq $0x96, %zmm11, %zmm10, %zmm26 + vmovdqu64 %zmm24, %zmm27 + vpternlogq $0x96, %zmm21, %zmm20, %zmm27 + vpternlogq $0x96, %zmm23, %zmm22, %zmm27 + vmovdqu64 %zmm6, %zmm28 + vpternlogq $0x96, %zmm8, %zmm7, %zmm28 + vpternlogq $0x96, %zmm5, %zmm9, %zmm28 + vmovdqu64 %zmm18, %zmm29 + vpternlogq $0x96, %zmm15, %zmm19, %zmm29 + vpternlogq $0x96, %zmm17, %zmm16, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm17, %zmm17 + # Rho - rotate each lane in place + vprolq $0x01, %zmm12, %zmm12 + vprolq $62, %zmm24, %zmm24 + vprolq $28, %zmm6, %zmm6 + vprolq $27, %zmm18, %zmm18 + vprolq $36, %zmm1, %zmm1 + vprolq $44, %zmm13, %zmm13 + vprolq $6, %zmm20, %zmm20 + vprolq $55, %zmm7, %zmm7 + vprolq $20, %zmm19, %zmm19 + vprolq $3, %zmm2, %zmm2 + vprolq $10, %zmm14, %zmm14 + vprolq $43, %zmm21, %zmm21 + vprolq $25, %zmm8, %zmm8 + vprolq $39, %zmm15, %zmm15 + vprolq $41, %zmm3, %zmm3 + vprolq $45, %zmm10, %zmm10 + vprolq $15, %zmm22, %zmm22 + vprolq $21, %zmm9, %zmm9 + vprolq $8, %zmm16, %zmm16 + vprolq $18, %zmm4, %zmm4 + vprolq $2, %zmm11, %zmm11 + vprolq $61, %zmm23, %zmm23 + vprolq $56, %zmm5, %zmm5 + vprolq $14, %zmm17, %zmm17 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm13, %zmm0 + vpternlogq $0xd2, %zmm9, %zmm21, %zmm13 + vpternlogq $0xd2, %zmm17, %zmm9, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm19, %zmm6 + vpternlogq $0xd2, %zmm10, %zmm2, %zmm19 + vpternlogq $0xd2, %zmm23, %zmm10, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm20, %zmm12 + vpternlogq $0xd2, %zmm16, %zmm8, %zmm20 + vpternlogq $0xd2, %zmm4, %zmm16, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm1, %zmm18 + vpternlogq $0xd2, %zmm22, %zmm14, %zmm1 + vpternlogq $0xd2, %zmm5, %zmm22, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm7, %zmm24 + vpternlogq $0xd2, %zmm3, %zmm15, %zmm7 + vpternlogq $0xd2, %zmm11, %zmm3, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + # Iota + vpxorq 448(%rdx), %zmm0, %zmm0 + # Round 8 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm12, %zmm6, %zmm25 + vpternlogq $0x96, %zmm24, %zmm18, %zmm25 + vmovdqu64 %zmm13, %zmm26 + vpternlogq $0x96, %zmm20, %zmm19, %zmm26 + vpternlogq $0x96, %zmm7, %zmm1, %zmm26 + vmovdqu64 %zmm21, %zmm27 + vpternlogq $0x96, %zmm8, %zmm2, %zmm27 + vpternlogq $0x96, %zmm15, %zmm14, %zmm27 + vmovdqu64 %zmm9, %zmm28 + vpternlogq $0x96, %zmm16, %zmm10, %zmm28 + vpternlogq $0x96, %zmm3, %zmm22, %zmm28 + vmovdqu64 %zmm17, %zmm29 + vpternlogq $0x96, %zmm4, %zmm23, %zmm29 + vpternlogq $0x96, %zmm11, %zmm5, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm11, %zmm11 + # Rho - rotate each lane in place + vprolq $0x01, %zmm13, %zmm13 + vprolq $62, %zmm21, %zmm21 + vprolq $28, %zmm9, %zmm9 + vprolq $27, %zmm17, %zmm17 + vprolq $36, %zmm6, %zmm6 + vprolq $44, %zmm19, %zmm19 + vprolq $6, %zmm2, %zmm2 + vprolq $55, %zmm10, %zmm10 + vprolq $20, %zmm23, %zmm23 + vprolq $3, %zmm12, %zmm12 + vprolq $10, %zmm20, %zmm20 + vprolq $43, %zmm8, %zmm8 + vprolq $25, %zmm16, %zmm16 + vprolq $39, %zmm4, %zmm4 + vprolq $41, %zmm18, %zmm18 + vprolq $45, %zmm1, %zmm1 + vprolq $15, %zmm14, %zmm14 + vprolq $21, %zmm22, %zmm22 + vprolq $8, %zmm5, %zmm5 + vprolq $18, %zmm24, %zmm24 + vprolq $2, %zmm7, %zmm7 + vprolq $61, %zmm15, %zmm15 + vprolq $56, %zmm3, %zmm3 + vprolq $14, %zmm11, %zmm11 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm19, %zmm0 + vpternlogq $0xd2, %zmm22, %zmm8, %zmm19 + vpternlogq $0xd2, %zmm11, %zmm22, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm23, %zmm9 + vpternlogq $0xd2, %zmm1, %zmm12, %zmm23 + vpternlogq $0xd2, %zmm15, %zmm1, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm2, %zmm13 + vpternlogq $0xd2, %zmm5, %zmm16, %zmm2 + vpternlogq $0xd2, %zmm24, %zmm5, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm6, %zmm17 + vpternlogq $0xd2, %zmm14, %zmm20, %zmm6 + vpternlogq $0xd2, %zmm3, %zmm14, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm10, %zmm21 + vpternlogq $0xd2, %zmm18, %zmm4, %zmm10 + vpternlogq $0xd2, %zmm7, %zmm18, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + # Iota + vpxorq 512(%rdx), %zmm0, %zmm0 + # Round 9 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm13, %zmm9, %zmm25 + vpternlogq $0x96, %zmm21, %zmm17, %zmm25 + vmovdqu64 %zmm19, %zmm26 + vpternlogq $0x96, %zmm2, %zmm23, %zmm26 + vpternlogq $0x96, %zmm10, %zmm6, %zmm26 + vmovdqu64 %zmm8, %zmm27 + vpternlogq $0x96, %zmm16, %zmm12, %zmm27 + vpternlogq $0x96, %zmm4, %zmm20, %zmm27 + vmovdqu64 %zmm22, %zmm28 + vpternlogq $0x96, %zmm5, %zmm1, %zmm28 + vpternlogq $0x96, %zmm18, %zmm14, %zmm28 + vmovdqu64 %zmm11, %zmm29 + vpternlogq $0x96, %zmm24, %zmm15, %zmm29 + vpternlogq $0x96, %zmm7, %zmm3, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm7, %zmm7 + # Rho - rotate each lane in place + vprolq $0x01, %zmm19, %zmm19 + vprolq $62, %zmm8, %zmm8 + vprolq $28, %zmm22, %zmm22 + vprolq $27, %zmm11, %zmm11 + vprolq $36, %zmm9, %zmm9 + vprolq $44, %zmm23, %zmm23 + vprolq $6, %zmm12, %zmm12 + vprolq $55, %zmm1, %zmm1 + vprolq $20, %zmm15, %zmm15 + vprolq $3, %zmm13, %zmm13 + vprolq $10, %zmm2, %zmm2 + vprolq $43, %zmm16, %zmm16 + vprolq $25, %zmm5, %zmm5 + vprolq $39, %zmm24, %zmm24 + vprolq $41, %zmm17, %zmm17 + vprolq $45, %zmm6, %zmm6 + vprolq $15, %zmm20, %zmm20 + vprolq $21, %zmm14, %zmm14 + vprolq $8, %zmm3, %zmm3 + vprolq $18, %zmm21, %zmm21 + vprolq $2, %zmm10, %zmm10 + vprolq $61, %zmm4, %zmm4 + vprolq $56, %zmm18, %zmm18 + vprolq $14, %zmm7, %zmm7 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm23, %zmm0 + vpternlogq $0xd2, %zmm14, %zmm16, %zmm23 + vpternlogq $0xd2, %zmm7, %zmm14, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm15, %zmm22 + vpternlogq $0xd2, %zmm6, %zmm13, %zmm15 + vpternlogq $0xd2, %zmm4, %zmm6, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm12, %zmm19 + vpternlogq $0xd2, %zmm3, %zmm5, %zmm12 + vpternlogq $0xd2, %zmm21, %zmm3, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm9, %zmm11 + vpternlogq $0xd2, %zmm20, %zmm2, %zmm9 + vpternlogq $0xd2, %zmm18, %zmm20, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm1, %zmm8 + vpternlogq $0xd2, %zmm17, %zmm24, %zmm1 + vpternlogq $0xd2, %zmm10, %zmm17, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + # Iota + vpxorq 576(%rdx), %zmm0, %zmm0 + # Round 10 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm19, %zmm22, %zmm25 + vpternlogq $0x96, %zmm8, %zmm11, %zmm25 + vmovdqu64 %zmm23, %zmm26 + vpternlogq $0x96, %zmm12, %zmm15, %zmm26 + vpternlogq $0x96, %zmm1, %zmm9, %zmm26 + vmovdqu64 %zmm16, %zmm27 + vpternlogq $0x96, %zmm5, %zmm13, %zmm27 + vpternlogq $0x96, %zmm24, %zmm2, %zmm27 + vmovdqu64 %zmm14, %zmm28 + vpternlogq $0x96, %zmm3, %zmm6, %zmm28 + vpternlogq $0x96, %zmm17, %zmm20, %zmm28 + vmovdqu64 %zmm7, %zmm29 + vpternlogq $0x96, %zmm21, %zmm4, %zmm29 + vpternlogq $0x96, %zmm10, %zmm18, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm10, %zmm10 + # Rho - rotate each lane in place + vprolq $0x01, %zmm23, %zmm23 + vprolq $62, %zmm16, %zmm16 + vprolq $28, %zmm14, %zmm14 + vprolq $27, %zmm7, %zmm7 + vprolq $36, %zmm22, %zmm22 + vprolq $44, %zmm15, %zmm15 + vprolq $6, %zmm13, %zmm13 + vprolq $55, %zmm6, %zmm6 + vprolq $20, %zmm4, %zmm4 + vprolq $3, %zmm19, %zmm19 + vprolq $10, %zmm12, %zmm12 + vprolq $43, %zmm5, %zmm5 + vprolq $25, %zmm3, %zmm3 + vprolq $39, %zmm21, %zmm21 + vprolq $41, %zmm11, %zmm11 + vprolq $45, %zmm9, %zmm9 + vprolq $15, %zmm2, %zmm2 + vprolq $21, %zmm20, %zmm20 + vprolq $8, %zmm18, %zmm18 + vprolq $18, %zmm8, %zmm8 + vprolq $2, %zmm1, %zmm1 + vprolq $61, %zmm24, %zmm24 + vprolq $56, %zmm17, %zmm17 + vprolq $14, %zmm10, %zmm10 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm15, %zmm0 + vpternlogq $0xd2, %zmm20, %zmm5, %zmm15 + vpternlogq $0xd2, %zmm10, %zmm20, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm4, %zmm14 + vpternlogq $0xd2, %zmm9, %zmm19, %zmm4 + vpternlogq $0xd2, %zmm24, %zmm9, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm13, %zmm23 + vpternlogq $0xd2, %zmm18, %zmm3, %zmm13 + vpternlogq $0xd2, %zmm8, %zmm18, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm22, %zmm7 + vpternlogq $0xd2, %zmm2, %zmm12, %zmm22 + vpternlogq $0xd2, %zmm17, %zmm2, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm6, %zmm16 + vpternlogq $0xd2, %zmm11, %zmm21, %zmm6 + vpternlogq $0xd2, %zmm1, %zmm11, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + # Iota + vpxorq 640(%rdx), %zmm0, %zmm0 + # Round 11 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm23, %zmm14, %zmm25 + vpternlogq $0x96, %zmm16, %zmm7, %zmm25 + vmovdqu64 %zmm15, %zmm26 + vpternlogq $0x96, %zmm13, %zmm4, %zmm26 + vpternlogq $0x96, %zmm6, %zmm22, %zmm26 + vmovdqu64 %zmm5, %zmm27 + vpternlogq $0x96, %zmm3, %zmm19, %zmm27 + vpternlogq $0x96, %zmm21, %zmm12, %zmm27 + vmovdqu64 %zmm20, %zmm28 + vpternlogq $0x96, %zmm18, %zmm9, %zmm28 + vpternlogq $0x96, %zmm11, %zmm2, %zmm28 + vmovdqu64 %zmm10, %zmm29 + vpternlogq $0x96, %zmm8, %zmm24, %zmm29 + vpternlogq $0x96, %zmm1, %zmm17, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm21, %zmm21 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm1, %zmm1 + # Rho - rotate each lane in place + vprolq $0x01, %zmm15, %zmm15 + vprolq $62, %zmm5, %zmm5 + vprolq $28, %zmm20, %zmm20 + vprolq $27, %zmm10, %zmm10 + vprolq $36, %zmm14, %zmm14 + vprolq $44, %zmm4, %zmm4 + vprolq $6, %zmm19, %zmm19 + vprolq $55, %zmm9, %zmm9 + vprolq $20, %zmm24, %zmm24 + vprolq $3, %zmm23, %zmm23 + vprolq $10, %zmm13, %zmm13 + vprolq $43, %zmm3, %zmm3 + vprolq $25, %zmm18, %zmm18 + vprolq $39, %zmm8, %zmm8 + vprolq $41, %zmm7, %zmm7 + vprolq $45, %zmm22, %zmm22 + vprolq $15, %zmm12, %zmm12 + vprolq $21, %zmm2, %zmm2 + vprolq $8, %zmm17, %zmm17 + vprolq $18, %zmm16, %zmm16 + vprolq $2, %zmm6, %zmm6 + vprolq $61, %zmm21, %zmm21 + vprolq $56, %zmm11, %zmm11 + vprolq $14, %zmm1, %zmm1 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm4, %zmm0 + vpternlogq $0xd2, %zmm2, %zmm3, %zmm4 + vpternlogq $0xd2, %zmm1, %zmm2, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm24, %zmm20 + vpternlogq $0xd2, %zmm22, %zmm23, %zmm24 + vpternlogq $0xd2, %zmm21, %zmm22, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm21, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm21 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm19, %zmm15 + vpternlogq $0xd2, %zmm17, %zmm18, %zmm19 + vpternlogq $0xd2, %zmm16, %zmm17, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm17 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm13, %zmm14, %zmm10 + vpternlogq $0xd2, %zmm12, %zmm13, %zmm14 + vpternlogq $0xd2, %zmm11, %zmm12, %zmm13 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm9, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm9, %zmm5 + vpternlogq $0xd2, %zmm7, %zmm8, %zmm9 + vpternlogq $0xd2, %zmm6, %zmm7, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + # Iota + vpxorq 704(%rdx), %zmm0, %zmm0 + # Round 12 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm15, %zmm20, %zmm25 + vpternlogq $0x96, %zmm5, %zmm10, %zmm25 + vmovdqu64 %zmm4, %zmm26 + vpternlogq $0x96, %zmm19, %zmm24, %zmm26 + vpternlogq $0x96, %zmm9, %zmm14, %zmm26 + vmovdqu64 %zmm3, %zmm27 + vpternlogq $0x96, %zmm18, %zmm23, %zmm27 + vpternlogq $0x96, %zmm8, %zmm13, %zmm27 + vmovdqu64 %zmm2, %zmm28 + vpternlogq $0x96, %zmm17, %zmm22, %zmm28 + vpternlogq $0x96, %zmm7, %zmm12, %zmm28 + vmovdqu64 %zmm1, %zmm29 + vpternlogq $0x96, %zmm16, %zmm21, %zmm29 + vpternlogq $0x96, %zmm6, %zmm11, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm8, %zmm8 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm6, %zmm6 + # Rho - rotate each lane in place + vprolq $0x01, %zmm4, %zmm4 + vprolq $62, %zmm3, %zmm3 + vprolq $28, %zmm2, %zmm2 + vprolq $27, %zmm1, %zmm1 + vprolq $36, %zmm20, %zmm20 + vprolq $44, %zmm24, %zmm24 + vprolq $6, %zmm23, %zmm23 + vprolq $55, %zmm22, %zmm22 + vprolq $20, %zmm21, %zmm21 + vprolq $3, %zmm15, %zmm15 + vprolq $10, %zmm19, %zmm19 + vprolq $43, %zmm18, %zmm18 + vprolq $25, %zmm17, %zmm17 + vprolq $39, %zmm16, %zmm16 + vprolq $41, %zmm10, %zmm10 + vprolq $45, %zmm14, %zmm14 + vprolq $15, %zmm13, %zmm13 + vprolq $21, %zmm12, %zmm12 + vprolq $8, %zmm11, %zmm11 + vprolq $18, %zmm5, %zmm5 + vprolq $2, %zmm9, %zmm9 + vprolq $61, %zmm8, %zmm8 + vprolq $56, %zmm7, %zmm7 + vprolq $14, %zmm6, %zmm6 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm24, %zmm0 + vpternlogq $0xd2, %zmm12, %zmm18, %zmm24 + vpternlogq $0xd2, %zmm6, %zmm12, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm21, %zmm2 + vpternlogq $0xd2, %zmm14, %zmm15, %zmm21 + vpternlogq $0xd2, %zmm8, %zmm14, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm8, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm8 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm23, %zmm4 + vpternlogq $0xd2, %zmm11, %zmm17, %zmm23 + vpternlogq $0xd2, %zmm5, %zmm11, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm11 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm19, %zmm20, %zmm1 + vpternlogq $0xd2, %zmm13, %zmm19, %zmm20 + vpternlogq $0xd2, %zmm7, %zmm13, %zmm19 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm22, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm22, %zmm3 + vpternlogq $0xd2, %zmm10, %zmm16, %zmm22 + vpternlogq $0xd2, %zmm9, %zmm10, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + # Iota + vpxorq 768(%rdx), %zmm0, %zmm0 + # Round 13 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm4, %zmm2, %zmm25 + vpternlogq $0x96, %zmm3, %zmm1, %zmm25 + vmovdqu64 %zmm24, %zmm26 + vpternlogq $0x96, %zmm23, %zmm21, %zmm26 + vpternlogq $0x96, %zmm22, %zmm20, %zmm26 + vmovdqu64 %zmm18, %zmm27 + vpternlogq $0x96, %zmm17, %zmm15, %zmm27 + vpternlogq $0x96, %zmm16, %zmm19, %zmm27 + vmovdqu64 %zmm12, %zmm28 + vpternlogq $0x96, %zmm11, %zmm14, %zmm28 + vpternlogq $0x96, %zmm10, %zmm13, %zmm28 + vmovdqu64 %zmm6, %zmm29 + vpternlogq $0x96, %zmm5, %zmm8, %zmm29 + vpternlogq $0x96, %zmm9, %zmm7, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm16, %zmm16 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm9, %zmm9 + # Rho - rotate each lane in place + vprolq $0x01, %zmm24, %zmm24 + vprolq $62, %zmm18, %zmm18 + vprolq $28, %zmm12, %zmm12 + vprolq $27, %zmm6, %zmm6 + vprolq $36, %zmm2, %zmm2 + vprolq $44, %zmm21, %zmm21 + vprolq $6, %zmm15, %zmm15 + vprolq $55, %zmm14, %zmm14 + vprolq $20, %zmm8, %zmm8 + vprolq $3, %zmm4, %zmm4 + vprolq $10, %zmm23, %zmm23 + vprolq $43, %zmm17, %zmm17 + vprolq $25, %zmm11, %zmm11 + vprolq $39, %zmm5, %zmm5 + vprolq $41, %zmm1, %zmm1 + vprolq $45, %zmm20, %zmm20 + vprolq $15, %zmm19, %zmm19 + vprolq $21, %zmm13, %zmm13 + vprolq $8, %zmm7, %zmm7 + vprolq $18, %zmm3, %zmm3 + vprolq $2, %zmm22, %zmm22 + vprolq $61, %zmm16, %zmm16 + vprolq $56, %zmm10, %zmm10 + vprolq $14, %zmm9, %zmm9 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm21, %zmm0 + vpternlogq $0xd2, %zmm13, %zmm17, %zmm21 + vpternlogq $0xd2, %zmm9, %zmm13, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm8, %zmm12 + vpternlogq $0xd2, %zmm20, %zmm4, %zmm8 + vpternlogq $0xd2, %zmm16, %zmm20, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm16, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm16 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm15, %zmm24 + vpternlogq $0xd2, %zmm7, %zmm11, %zmm15 + vpternlogq $0xd2, %zmm3, %zmm7, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm7 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm23, %zmm2, %zmm6 + vpternlogq $0xd2, %zmm19, %zmm23, %zmm2 + vpternlogq $0xd2, %zmm10, %zmm19, %zmm23 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm14, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm14, %zmm18 + vpternlogq $0xd2, %zmm1, %zmm5, %zmm14 + vpternlogq $0xd2, %zmm22, %zmm1, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + # Iota + vpxorq 832(%rdx), %zmm0, %zmm0 + # Round 14 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm24, %zmm12, %zmm25 + vpternlogq $0x96, %zmm18, %zmm6, %zmm25 + vmovdqu64 %zmm21, %zmm26 + vpternlogq $0x96, %zmm15, %zmm8, %zmm26 + vpternlogq $0x96, %zmm14, %zmm2, %zmm26 + vmovdqu64 %zmm17, %zmm27 + vpternlogq $0x96, %zmm11, %zmm4, %zmm27 + vpternlogq $0x96, %zmm5, %zmm23, %zmm27 + vmovdqu64 %zmm13, %zmm28 + vpternlogq $0x96, %zmm7, %zmm20, %zmm28 + vpternlogq $0x96, %zmm1, %zmm19, %zmm28 + vmovdqu64 %zmm9, %zmm29 + vpternlogq $0x96, %zmm3, %zmm16, %zmm29 + vpternlogq $0x96, %zmm22, %zmm10, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm5, %zmm5 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm22, %zmm22 + # Rho - rotate each lane in place + vprolq $0x01, %zmm21, %zmm21 + vprolq $62, %zmm17, %zmm17 + vprolq $28, %zmm13, %zmm13 + vprolq $27, %zmm9, %zmm9 + vprolq $36, %zmm12, %zmm12 + vprolq $44, %zmm8, %zmm8 + vprolq $6, %zmm4, %zmm4 + vprolq $55, %zmm20, %zmm20 + vprolq $20, %zmm16, %zmm16 + vprolq $3, %zmm24, %zmm24 + vprolq $10, %zmm15, %zmm15 + vprolq $43, %zmm11, %zmm11 + vprolq $25, %zmm7, %zmm7 + vprolq $39, %zmm3, %zmm3 + vprolq $41, %zmm6, %zmm6 + vprolq $45, %zmm2, %zmm2 + vprolq $15, %zmm23, %zmm23 + vprolq $21, %zmm19, %zmm19 + vprolq $8, %zmm10, %zmm10 + vprolq $18, %zmm18, %zmm18 + vprolq $2, %zmm14, %zmm14 + vprolq $61, %zmm5, %zmm5 + vprolq $56, %zmm1, %zmm1 + vprolq $14, %zmm22, %zmm22 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm8, %zmm0 + vpternlogq $0xd2, %zmm19, %zmm11, %zmm8 + vpternlogq $0xd2, %zmm22, %zmm19, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm16, %zmm13 + vpternlogq $0xd2, %zmm2, %zmm24, %zmm16 + vpternlogq $0xd2, %zmm5, %zmm2, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm5, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm5 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm4, %zmm21 + vpternlogq $0xd2, %zmm10, %zmm7, %zmm4 + vpternlogq $0xd2, %zmm18, %zmm10, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm10 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm15, %zmm12, %zmm9 + vpternlogq $0xd2, %zmm23, %zmm15, %zmm12 + vpternlogq $0xd2, %zmm1, %zmm23, %zmm15 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm20, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm20, %zmm17 + vpternlogq $0xd2, %zmm6, %zmm3, %zmm20 + vpternlogq $0xd2, %zmm14, %zmm6, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + # Iota + vpxorq 896(%rdx), %zmm0, %zmm0 + # Round 15 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm21, %zmm13, %zmm25 + vpternlogq $0x96, %zmm17, %zmm9, %zmm25 + vmovdqu64 %zmm8, %zmm26 + vpternlogq $0x96, %zmm4, %zmm16, %zmm26 + vpternlogq $0x96, %zmm20, %zmm12, %zmm26 + vmovdqu64 %zmm11, %zmm27 + vpternlogq $0x96, %zmm7, %zmm24, %zmm27 + vpternlogq $0x96, %zmm3, %zmm15, %zmm27 + vmovdqu64 %zmm19, %zmm28 + vpternlogq $0x96, %zmm10, %zmm2, %zmm28 + vpternlogq $0x96, %zmm6, %zmm23, %zmm28 + vmovdqu64 %zmm22, %zmm29 + vpternlogq $0x96, %zmm18, %zmm5, %zmm29 + vpternlogq $0x96, %zmm14, %zmm1, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm3, %zmm3 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm14, %zmm14 + # Rho - rotate each lane in place + vprolq $0x01, %zmm8, %zmm8 + vprolq $62, %zmm11, %zmm11 + vprolq $28, %zmm19, %zmm19 + vprolq $27, %zmm22, %zmm22 + vprolq $36, %zmm13, %zmm13 + vprolq $44, %zmm16, %zmm16 + vprolq $6, %zmm24, %zmm24 + vprolq $55, %zmm2, %zmm2 + vprolq $20, %zmm5, %zmm5 + vprolq $3, %zmm21, %zmm21 + vprolq $10, %zmm4, %zmm4 + vprolq $43, %zmm7, %zmm7 + vprolq $25, %zmm10, %zmm10 + vprolq $39, %zmm18, %zmm18 + vprolq $41, %zmm9, %zmm9 + vprolq $45, %zmm12, %zmm12 + vprolq $15, %zmm15, %zmm15 + vprolq $21, %zmm23, %zmm23 + vprolq $8, %zmm1, %zmm1 + vprolq $18, %zmm17, %zmm17 + vprolq $2, %zmm20, %zmm20 + vprolq $61, %zmm3, %zmm3 + vprolq $56, %zmm6, %zmm6 + vprolq $14, %zmm14, %zmm14 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm16, %zmm0 + vpternlogq $0xd2, %zmm23, %zmm7, %zmm16 + vpternlogq $0xd2, %zmm14, %zmm23, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm5, %zmm19 + vpternlogq $0xd2, %zmm12, %zmm21, %zmm5 + vpternlogq $0xd2, %zmm3, %zmm12, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm3, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm3 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm24, %zmm8 + vpternlogq $0xd2, %zmm1, %zmm10, %zmm24 + vpternlogq $0xd2, %zmm17, %zmm1, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm1 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm4, %zmm13, %zmm22 + vpternlogq $0xd2, %zmm15, %zmm4, %zmm13 + vpternlogq $0xd2, %zmm6, %zmm15, %zmm4 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm2, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm2, %zmm11 + vpternlogq $0xd2, %zmm9, %zmm18, %zmm2 + vpternlogq $0xd2, %zmm20, %zmm9, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + # Iota + vpxorq 960(%rdx), %zmm0, %zmm0 + # Round 16 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm8, %zmm19, %zmm25 + vpternlogq $0x96, %zmm11, %zmm22, %zmm25 + vmovdqu64 %zmm16, %zmm26 + vpternlogq $0x96, %zmm24, %zmm5, %zmm26 + vpternlogq $0x96, %zmm2, %zmm13, %zmm26 + vmovdqu64 %zmm7, %zmm27 + vpternlogq $0x96, %zmm10, %zmm21, %zmm27 + vpternlogq $0x96, %zmm18, %zmm4, %zmm27 + vmovdqu64 %zmm23, %zmm28 + vpternlogq $0x96, %zmm1, %zmm12, %zmm28 + vpternlogq $0x96, %zmm9, %zmm15, %zmm28 + vmovdqu64 %zmm14, %zmm29 + vpternlogq $0x96, %zmm17, %zmm3, %zmm29 + vpternlogq $0x96, %zmm20, %zmm6, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm18, %zmm18 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm20, %zmm20 + # Rho - rotate each lane in place + vprolq $0x01, %zmm16, %zmm16 + vprolq $62, %zmm7, %zmm7 + vprolq $28, %zmm23, %zmm23 + vprolq $27, %zmm14, %zmm14 + vprolq $36, %zmm19, %zmm19 + vprolq $44, %zmm5, %zmm5 + vprolq $6, %zmm21, %zmm21 + vprolq $55, %zmm12, %zmm12 + vprolq $20, %zmm3, %zmm3 + vprolq $3, %zmm8, %zmm8 + vprolq $10, %zmm24, %zmm24 + vprolq $43, %zmm10, %zmm10 + vprolq $25, %zmm1, %zmm1 + vprolq $39, %zmm17, %zmm17 + vprolq $41, %zmm22, %zmm22 + vprolq $45, %zmm13, %zmm13 + vprolq $15, %zmm4, %zmm4 + vprolq $21, %zmm15, %zmm15 + vprolq $8, %zmm6, %zmm6 + vprolq $18, %zmm11, %zmm11 + vprolq $2, %zmm2, %zmm2 + vprolq $61, %zmm18, %zmm18 + vprolq $56, %zmm9, %zmm9 + vprolq $14, %zmm20, %zmm20 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm5, %zmm0 + vpternlogq $0xd2, %zmm15, %zmm10, %zmm5 + vpternlogq $0xd2, %zmm20, %zmm15, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm3, %zmm23 + vpternlogq $0xd2, %zmm13, %zmm8, %zmm3 + vpternlogq $0xd2, %zmm18, %zmm13, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm18, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm18 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm21, %zmm16 + vpternlogq $0xd2, %zmm6, %zmm1, %zmm21 + vpternlogq $0xd2, %zmm11, %zmm6, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm6 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm24, %zmm19, %zmm14 + vpternlogq $0xd2, %zmm4, %zmm24, %zmm19 + vpternlogq $0xd2, %zmm9, %zmm4, %zmm24 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm12, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm12, %zmm7 + vpternlogq $0xd2, %zmm22, %zmm17, %zmm12 + vpternlogq $0xd2, %zmm2, %zmm22, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + # Iota + vpxorq 1024(%rdx), %zmm0, %zmm0 + # Round 17 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm16, %zmm23, %zmm25 + vpternlogq $0x96, %zmm7, %zmm14, %zmm25 + vmovdqu64 %zmm5, %zmm26 + vpternlogq $0x96, %zmm21, %zmm3, %zmm26 + vpternlogq $0x96, %zmm12, %zmm19, %zmm26 + vmovdqu64 %zmm10, %zmm27 + vpternlogq $0x96, %zmm1, %zmm8, %zmm27 + vpternlogq $0x96, %zmm17, %zmm24, %zmm27 + vmovdqu64 %zmm15, %zmm28 + vpternlogq $0x96, %zmm6, %zmm13, %zmm28 + vpternlogq $0x96, %zmm22, %zmm4, %zmm28 + vmovdqu64 %zmm20, %zmm29 + vpternlogq $0x96, %zmm11, %zmm18, %zmm29 + vpternlogq $0x96, %zmm2, %zmm9, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm17, %zmm17 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm2, %zmm2 + # Rho - rotate each lane in place + vprolq $0x01, %zmm5, %zmm5 + vprolq $62, %zmm10, %zmm10 + vprolq $28, %zmm15, %zmm15 + vprolq $27, %zmm20, %zmm20 + vprolq $36, %zmm23, %zmm23 + vprolq $44, %zmm3, %zmm3 + vprolq $6, %zmm8, %zmm8 + vprolq $55, %zmm13, %zmm13 + vprolq $20, %zmm18, %zmm18 + vprolq $3, %zmm16, %zmm16 + vprolq $10, %zmm21, %zmm21 + vprolq $43, %zmm1, %zmm1 + vprolq $25, %zmm6, %zmm6 + vprolq $39, %zmm11, %zmm11 + vprolq $41, %zmm14, %zmm14 + vprolq $45, %zmm19, %zmm19 + vprolq $15, %zmm24, %zmm24 + vprolq $21, %zmm4, %zmm4 + vprolq $8, %zmm9, %zmm9 + vprolq $18, %zmm7, %zmm7 + vprolq $2, %zmm12, %zmm12 + vprolq $61, %zmm17, %zmm17 + vprolq $56, %zmm22, %zmm22 + vprolq $14, %zmm2, %zmm2 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm3, %zmm0 + vpternlogq $0xd2, %zmm4, %zmm1, %zmm3 + vpternlogq $0xd2, %zmm2, %zmm4, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm18, %zmm15 + vpternlogq $0xd2, %zmm19, %zmm16, %zmm18 + vpternlogq $0xd2, %zmm17, %zmm19, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm17, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm17 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm8, %zmm5 + vpternlogq $0xd2, %zmm9, %zmm6, %zmm8 + vpternlogq $0xd2, %zmm7, %zmm9, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm9 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm21, %zmm23, %zmm20 + vpternlogq $0xd2, %zmm24, %zmm21, %zmm23 + vpternlogq $0xd2, %zmm22, %zmm24, %zmm21 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm13, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm13, %zmm10 + vpternlogq $0xd2, %zmm14, %zmm11, %zmm13 + vpternlogq $0xd2, %zmm12, %zmm14, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + # Iota + vpxorq 1088(%rdx), %zmm0, %zmm0 + # Round 18 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm5, %zmm15, %zmm25 + vpternlogq $0x96, %zmm10, %zmm20, %zmm25 + vmovdqu64 %zmm3, %zmm26 + vpternlogq $0x96, %zmm8, %zmm18, %zmm26 + vpternlogq $0x96, %zmm13, %zmm23, %zmm26 + vmovdqu64 %zmm1, %zmm27 + vpternlogq $0x96, %zmm6, %zmm16, %zmm27 + vpternlogq $0x96, %zmm11, %zmm21, %zmm27 + vmovdqu64 %zmm4, %zmm28 + vpternlogq $0x96, %zmm9, %zmm19, %zmm28 + vpternlogq $0x96, %zmm14, %zmm24, %zmm28 + vmovdqu64 %zmm2, %zmm29 + vpternlogq $0x96, %zmm7, %zmm17, %zmm29 + vpternlogq $0x96, %zmm12, %zmm22, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm11, %zmm11 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm12, %zmm12 + # Rho - rotate each lane in place + vprolq $0x01, %zmm3, %zmm3 + vprolq $62, %zmm1, %zmm1 + vprolq $28, %zmm4, %zmm4 + vprolq $27, %zmm2, %zmm2 + vprolq $36, %zmm15, %zmm15 + vprolq $44, %zmm18, %zmm18 + vprolq $6, %zmm16, %zmm16 + vprolq $55, %zmm19, %zmm19 + vprolq $20, %zmm17, %zmm17 + vprolq $3, %zmm5, %zmm5 + vprolq $10, %zmm8, %zmm8 + vprolq $43, %zmm6, %zmm6 + vprolq $25, %zmm9, %zmm9 + vprolq $39, %zmm7, %zmm7 + vprolq $41, %zmm20, %zmm20 + vprolq $45, %zmm23, %zmm23 + vprolq $15, %zmm21, %zmm21 + vprolq $21, %zmm24, %zmm24 + vprolq $8, %zmm22, %zmm22 + vprolq $18, %zmm10, %zmm10 + vprolq $2, %zmm13, %zmm13 + vprolq $61, %zmm11, %zmm11 + vprolq $56, %zmm14, %zmm14 + vprolq $14, %zmm12, %zmm12 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm18, %zmm0 + vpternlogq $0xd2, %zmm24, %zmm6, %zmm18 + vpternlogq $0xd2, %zmm12, %zmm24, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm4, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm17, %zmm4 + vpternlogq $0xd2, %zmm23, %zmm5, %zmm17 + vpternlogq $0xd2, %zmm11, %zmm23, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm11, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm11 + vmovdqu64 %zmm3, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm16, %zmm3 + vpternlogq $0xd2, %zmm22, %zmm9, %zmm16 + vpternlogq $0xd2, %zmm10, %zmm22, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm22 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm2, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm8, %zmm15, %zmm2 + vpternlogq $0xd2, %zmm21, %zmm8, %zmm15 + vpternlogq $0xd2, %zmm14, %zmm21, %zmm8 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm1, %zmm30 + vmovdqu64 %zmm19, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm19, %zmm1 + vpternlogq $0xd2, %zmm20, %zmm7, %zmm19 + vpternlogq $0xd2, %zmm13, %zmm20, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + # Iota + vpxorq 1152(%rdx), %zmm0, %zmm0 + # Round 19 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm3, %zmm4, %zmm25 + vpternlogq $0x96, %zmm1, %zmm2, %zmm25 + vmovdqu64 %zmm18, %zmm26 + vpternlogq $0x96, %zmm16, %zmm17, %zmm26 + vpternlogq $0x96, %zmm19, %zmm15, %zmm26 + vmovdqu64 %zmm6, %zmm27 + vpternlogq $0x96, %zmm9, %zmm5, %zmm27 + vpternlogq $0x96, %zmm7, %zmm8, %zmm27 + vmovdqu64 %zmm24, %zmm28 + vpternlogq $0x96, %zmm22, %zmm23, %zmm28 + vpternlogq $0x96, %zmm20, %zmm21, %zmm28 + vmovdqu64 %zmm12, %zmm29 + vpternlogq $0x96, %zmm10, %zmm11, %zmm29 + vpternlogq $0x96, %zmm13, %zmm14, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm7, %zmm7 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm20, %zmm20 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm13, %zmm13 + # Rho - rotate each lane in place + vprolq $0x01, %zmm18, %zmm18 + vprolq $62, %zmm6, %zmm6 + vprolq $28, %zmm24, %zmm24 + vprolq $27, %zmm12, %zmm12 + vprolq $36, %zmm4, %zmm4 + vprolq $44, %zmm17, %zmm17 + vprolq $6, %zmm5, %zmm5 + vprolq $55, %zmm23, %zmm23 + vprolq $20, %zmm11, %zmm11 + vprolq $3, %zmm3, %zmm3 + vprolq $10, %zmm16, %zmm16 + vprolq $43, %zmm9, %zmm9 + vprolq $25, %zmm22, %zmm22 + vprolq $39, %zmm10, %zmm10 + vprolq $41, %zmm2, %zmm2 + vprolq $45, %zmm15, %zmm15 + vprolq $15, %zmm8, %zmm8 + vprolq $21, %zmm21, %zmm21 + vprolq $8, %zmm14, %zmm14 + vprolq $18, %zmm1, %zmm1 + vprolq $2, %zmm19, %zmm19 + vprolq $61, %zmm7, %zmm7 + vprolq $56, %zmm20, %zmm20 + vprolq $14, %zmm13, %zmm13 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm17, %zmm0 + vpternlogq $0xd2, %zmm21, %zmm9, %zmm17 + vpternlogq $0xd2, %zmm13, %zmm21, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm24, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm11, %zmm24 + vpternlogq $0xd2, %zmm15, %zmm3, %zmm11 + vpternlogq $0xd2, %zmm7, %zmm15, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm7, %zmm15 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm7 + vmovdqu64 %zmm18, %zmm30 + vmovdqu64 %zmm5, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm5, %zmm18 + vpternlogq $0xd2, %zmm14, %zmm22, %zmm5 + vpternlogq $0xd2, %zmm1, %zmm14, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm14 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm12, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm16, %zmm4, %zmm12 + vpternlogq $0xd2, %zmm8, %zmm16, %zmm4 + vpternlogq $0xd2, %zmm20, %zmm8, %zmm16 + vpternlogq $0xd2, %zmm30, %zmm20, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm20 + vmovdqu64 %zmm6, %zmm30 + vmovdqu64 %zmm23, %zmm31 + vpternlogq $0xd2, %zmm10, %zmm23, %zmm6 + vpternlogq $0xd2, %zmm2, %zmm10, %zmm23 + vpternlogq $0xd2, %zmm19, %zmm2, %zmm10 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + # Iota + vpxorq 1216(%rdx), %zmm0, %zmm0 + # Round 20 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm18, %zmm24, %zmm25 + vpternlogq $0x96, %zmm6, %zmm12, %zmm25 + vmovdqu64 %zmm17, %zmm26 + vpternlogq $0x96, %zmm5, %zmm11, %zmm26 + vpternlogq $0x96, %zmm23, %zmm4, %zmm26 + vmovdqu64 %zmm9, %zmm27 + vpternlogq $0x96, %zmm22, %zmm3, %zmm27 + vpternlogq $0x96, %zmm10, %zmm16, %zmm27 + vmovdqu64 %zmm21, %zmm28 + vpternlogq $0x96, %zmm14, %zmm15, %zmm28 + vpternlogq $0x96, %zmm2, %zmm8, %zmm28 + vmovdqu64 %zmm13, %zmm29 + vpternlogq $0x96, %zmm1, %zmm7, %zmm29 + vpternlogq $0x96, %zmm19, %zmm20, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm23, %zmm23 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm10, %zmm10 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm2, %zmm2 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm19, %zmm19 + # Rho - rotate each lane in place + vprolq $0x01, %zmm17, %zmm17 + vprolq $62, %zmm9, %zmm9 + vprolq $28, %zmm21, %zmm21 + vprolq $27, %zmm13, %zmm13 + vprolq $36, %zmm24, %zmm24 + vprolq $44, %zmm11, %zmm11 + vprolq $6, %zmm3, %zmm3 + vprolq $55, %zmm15, %zmm15 + vprolq $20, %zmm7, %zmm7 + vprolq $3, %zmm18, %zmm18 + vprolq $10, %zmm5, %zmm5 + vprolq $43, %zmm22, %zmm22 + vprolq $25, %zmm14, %zmm14 + vprolq $39, %zmm1, %zmm1 + vprolq $41, %zmm12, %zmm12 + vprolq $45, %zmm4, %zmm4 + vprolq $15, %zmm16, %zmm16 + vprolq $21, %zmm8, %zmm8 + vprolq $8, %zmm20, %zmm20 + vprolq $18, %zmm6, %zmm6 + vprolq $2, %zmm23, %zmm23 + vprolq $61, %zmm10, %zmm10 + vprolq $56, %zmm2, %zmm2 + vprolq $14, %zmm19, %zmm19 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm11, %zmm0 + vpternlogq $0xd2, %zmm8, %zmm22, %zmm11 + vpternlogq $0xd2, %zmm19, %zmm8, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm21, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm7, %zmm21 + vpternlogq $0xd2, %zmm4, %zmm18, %zmm7 + vpternlogq $0xd2, %zmm10, %zmm4, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm10, %zmm4 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm10 + vmovdqu64 %zmm17, %zmm30 + vmovdqu64 %zmm3, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm3, %zmm17 + vpternlogq $0xd2, %zmm20, %zmm14, %zmm3 + vpternlogq $0xd2, %zmm6, %zmm20, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm20 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm13, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm5, %zmm24, %zmm13 + vpternlogq $0xd2, %zmm16, %zmm5, %zmm24 + vpternlogq $0xd2, %zmm2, %zmm16, %zmm5 + vpternlogq $0xd2, %zmm30, %zmm2, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm2 + vmovdqu64 %zmm9, %zmm30 + vmovdqu64 %zmm15, %zmm31 + vpternlogq $0xd2, %zmm1, %zmm15, %zmm9 + vpternlogq $0xd2, %zmm12, %zmm1, %zmm15 + vpternlogq $0xd2, %zmm23, %zmm12, %zmm1 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + # Iota + vpxorq 1280(%rdx), %zmm0, %zmm0 + # Round 21 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm17, %zmm21, %zmm25 + vpternlogq $0x96, %zmm9, %zmm13, %zmm25 + vmovdqu64 %zmm11, %zmm26 + vpternlogq $0x96, %zmm3, %zmm7, %zmm26 + vpternlogq $0x96, %zmm15, %zmm24, %zmm26 + vmovdqu64 %zmm22, %zmm27 + vpternlogq $0x96, %zmm14, %zmm18, %zmm27 + vpternlogq $0x96, %zmm1, %zmm5, %zmm27 + vmovdqu64 %zmm8, %zmm28 + vpternlogq $0x96, %zmm20, %zmm4, %zmm28 + vpternlogq $0x96, %zmm12, %zmm16, %zmm28 + vmovdqu64 %zmm19, %zmm29 + vpternlogq $0x96, %zmm6, %zmm10, %zmm29 + vpternlogq $0x96, %zmm23, %zmm2, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm15, %zmm15 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm1, %zmm1 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm4, %zmm4 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm12, %zmm12 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm23, %zmm23 + # Rho - rotate each lane in place + vprolq $0x01, %zmm11, %zmm11 + vprolq $62, %zmm22, %zmm22 + vprolq $28, %zmm8, %zmm8 + vprolq $27, %zmm19, %zmm19 + vprolq $36, %zmm21, %zmm21 + vprolq $44, %zmm7, %zmm7 + vprolq $6, %zmm18, %zmm18 + vprolq $55, %zmm4, %zmm4 + vprolq $20, %zmm10, %zmm10 + vprolq $3, %zmm17, %zmm17 + vprolq $10, %zmm3, %zmm3 + vprolq $43, %zmm14, %zmm14 + vprolq $25, %zmm20, %zmm20 + vprolq $39, %zmm6, %zmm6 + vprolq $41, %zmm13, %zmm13 + vprolq $45, %zmm24, %zmm24 + vprolq $15, %zmm5, %zmm5 + vprolq $21, %zmm16, %zmm16 + vprolq $8, %zmm2, %zmm2 + vprolq $18, %zmm9, %zmm9 + vprolq $2, %zmm15, %zmm15 + vprolq $61, %zmm1, %zmm1 + vprolq $56, %zmm12, %zmm12 + vprolq $14, %zmm23, %zmm23 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm7, %zmm31 + vpternlogq $0xd2, %zmm14, %zmm7, %zmm0 + vpternlogq $0xd2, %zmm16, %zmm14, %zmm7 + vpternlogq $0xd2, %zmm23, %zmm16, %zmm14 + vpternlogq $0xd2, %zmm30, %zmm23, %zmm16 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm23 + vmovdqu64 %zmm8, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm10, %zmm8 + vpternlogq $0xd2, %zmm24, %zmm17, %zmm10 + vpternlogq $0xd2, %zmm1, %zmm24, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm1, %zmm24 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm1 + vmovdqu64 %zmm11, %zmm30 + vmovdqu64 %zmm18, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm18, %zmm11 + vpternlogq $0xd2, %zmm2, %zmm20, %zmm18 + vpternlogq $0xd2, %zmm9, %zmm2, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm2 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm19, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm3, %zmm21, %zmm19 + vpternlogq $0xd2, %zmm5, %zmm3, %zmm21 + vpternlogq $0xd2, %zmm12, %zmm5, %zmm3 + vpternlogq $0xd2, %zmm30, %zmm12, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm12 + vmovdqu64 %zmm22, %zmm30 + vmovdqu64 %zmm4, %zmm31 + vpternlogq $0xd2, %zmm6, %zmm4, %zmm22 + vpternlogq $0xd2, %zmm13, %zmm6, %zmm4 + vpternlogq $0xd2, %zmm15, %zmm13, %zmm6 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + # Iota + vpxorq 1344(%rdx), %zmm0, %zmm0 + # Round 22 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm11, %zmm8, %zmm25 + vpternlogq $0x96, %zmm22, %zmm19, %zmm25 + vmovdqu64 %zmm7, %zmm26 + vpternlogq $0x96, %zmm18, %zmm10, %zmm26 + vpternlogq $0x96, %zmm4, %zmm21, %zmm26 + vmovdqu64 %zmm14, %zmm27 + vpternlogq $0x96, %zmm20, %zmm17, %zmm27 + vpternlogq $0x96, %zmm6, %zmm3, %zmm27 + vmovdqu64 %zmm16, %zmm28 + vpternlogq $0x96, %zmm2, %zmm24, %zmm28 + vpternlogq $0x96, %zmm13, %zmm5, %zmm28 + vmovdqu64 %zmm23, %zmm29 + vpternlogq $0x96, %zmm9, %zmm1, %zmm29 + vpternlogq $0x96, %zmm15, %zmm12, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm19, %zmm19 + vpxorq %zmm30, %zmm22, %zmm22 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm4, %zmm4 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm14, %zmm14 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm6, %zmm6 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm24, %zmm24 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm13, %zmm13 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm9, %zmm9 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm15, %zmm15 + # Rho - rotate each lane in place + vprolq $0x01, %zmm7, %zmm7 + vprolq $62, %zmm14, %zmm14 + vprolq $28, %zmm16, %zmm16 + vprolq $27, %zmm23, %zmm23 + vprolq $36, %zmm8, %zmm8 + vprolq $44, %zmm10, %zmm10 + vprolq $6, %zmm17, %zmm17 + vprolq $55, %zmm24, %zmm24 + vprolq $20, %zmm1, %zmm1 + vprolq $3, %zmm11, %zmm11 + vprolq $10, %zmm18, %zmm18 + vprolq $43, %zmm20, %zmm20 + vprolq $25, %zmm2, %zmm2 + vprolq $39, %zmm9, %zmm9 + vprolq $41, %zmm19, %zmm19 + vprolq $45, %zmm21, %zmm21 + vprolq $15, %zmm3, %zmm3 + vprolq $21, %zmm5, %zmm5 + vprolq $8, %zmm12, %zmm12 + vprolq $18, %zmm22, %zmm22 + vprolq $2, %zmm4, %zmm4 + vprolq $61, %zmm6, %zmm6 + vprolq $56, %zmm13, %zmm13 + vprolq $14, %zmm15, %zmm15 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm10, %zmm31 + vpternlogq $0xd2, %zmm20, %zmm10, %zmm0 + vpternlogq $0xd2, %zmm5, %zmm20, %zmm10 + vpternlogq $0xd2, %zmm15, %zmm5, %zmm20 + vpternlogq $0xd2, %zmm30, %zmm15, %zmm5 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm15 + vmovdqu64 %zmm16, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm11, %zmm1, %zmm16 + vpternlogq $0xd2, %zmm21, %zmm11, %zmm1 + vpternlogq $0xd2, %zmm6, %zmm21, %zmm11 + vpternlogq $0xd2, %zmm30, %zmm6, %zmm21 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm6 + vmovdqu64 %zmm7, %zmm30 + vmovdqu64 %zmm17, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm17, %zmm7 + vpternlogq $0xd2, %zmm12, %zmm2, %zmm17 + vpternlogq $0xd2, %zmm22, %zmm12, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm22, %zmm12 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm22 + vmovdqu64 %zmm23, %zmm30 + vmovdqu64 %zmm8, %zmm31 + vpternlogq $0xd2, %zmm18, %zmm8, %zmm23 + vpternlogq $0xd2, %zmm3, %zmm18, %zmm8 + vpternlogq $0xd2, %zmm13, %zmm3, %zmm18 + vpternlogq $0xd2, %zmm30, %zmm13, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm13 + vmovdqu64 %zmm14, %zmm30 + vmovdqu64 %zmm24, %zmm31 + vpternlogq $0xd2, %zmm9, %zmm24, %zmm14 + vpternlogq $0xd2, %zmm19, %zmm9, %zmm24 + vpternlogq $0xd2, %zmm4, %zmm19, %zmm9 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm19 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + # Iota + vpxorq 1408(%rdx), %zmm0, %zmm0 + # Round 23 + # Theta - column parity + vmovdqu64 %zmm0, %zmm25 + vpternlogq $0x96, %zmm7, %zmm16, %zmm25 + vpternlogq $0x96, %zmm14, %zmm23, %zmm25 + vmovdqu64 %zmm10, %zmm26 + vpternlogq $0x96, %zmm17, %zmm1, %zmm26 + vpternlogq $0x96, %zmm24, %zmm8, %zmm26 + vmovdqu64 %zmm20, %zmm27 + vpternlogq $0x96, %zmm2, %zmm11, %zmm27 + vpternlogq $0x96, %zmm9, %zmm18, %zmm27 + vmovdqu64 %zmm5, %zmm28 + vpternlogq $0x96, %zmm12, %zmm21, %zmm28 + vpternlogq $0x96, %zmm19, %zmm3, %zmm28 + vmovdqu64 %zmm15, %zmm29 + vpternlogq $0x96, %zmm22, %zmm6, %zmm29 + vpternlogq $0x96, %zmm4, %zmm13, %zmm29 + # Theta - D and apply in place + vprolq $0x01, %zmm26, %zmm30 + vpxorq %zmm29, %zmm30, %zmm30 + vpxorq %zmm30, %zmm0, %zmm0 + vpxorq %zmm30, %zmm16, %zmm16 + vpxorq %zmm30, %zmm7, %zmm7 + vpxorq %zmm30, %zmm23, %zmm23 + vpxorq %zmm30, %zmm14, %zmm14 + vprolq $0x01, %zmm27, %zmm30 + vpxorq %zmm25, %zmm30, %zmm30 + vpxorq %zmm30, %zmm10, %zmm10 + vpxorq %zmm30, %zmm1, %zmm1 + vpxorq %zmm30, %zmm17, %zmm17 + vpxorq %zmm30, %zmm8, %zmm8 + vpxorq %zmm30, %zmm24, %zmm24 + vprolq $0x01, %zmm28, %zmm30 + vpxorq %zmm26, %zmm30, %zmm30 + vpxorq %zmm30, %zmm20, %zmm20 + vpxorq %zmm30, %zmm11, %zmm11 + vpxorq %zmm30, %zmm2, %zmm2 + vpxorq %zmm30, %zmm18, %zmm18 + vpxorq %zmm30, %zmm9, %zmm9 + vprolq $0x01, %zmm29, %zmm30 + vpxorq %zmm27, %zmm30, %zmm30 + vpxorq %zmm30, %zmm5, %zmm5 + vpxorq %zmm30, %zmm21, %zmm21 + vpxorq %zmm30, %zmm12, %zmm12 + vpxorq %zmm30, %zmm3, %zmm3 + vpxorq %zmm30, %zmm19, %zmm19 + vprolq $0x01, %zmm25, %zmm30 + vpxorq %zmm28, %zmm30, %zmm30 + vpxorq %zmm30, %zmm15, %zmm15 + vpxorq %zmm30, %zmm6, %zmm6 + vpxorq %zmm30, %zmm22, %zmm22 + vpxorq %zmm30, %zmm13, %zmm13 + vpxorq %zmm30, %zmm4, %zmm4 + # Rho - rotate each lane in place + vprolq $0x01, %zmm10, %zmm10 + vprolq $62, %zmm20, %zmm20 + vprolq $28, %zmm5, %zmm5 + vprolq $27, %zmm15, %zmm15 + vprolq $36, %zmm16, %zmm16 + vprolq $44, %zmm1, %zmm1 + vprolq $6, %zmm11, %zmm11 + vprolq $55, %zmm21, %zmm21 + vprolq $20, %zmm6, %zmm6 + vprolq $3, %zmm7, %zmm7 + vprolq $10, %zmm17, %zmm17 + vprolq $43, %zmm2, %zmm2 + vprolq $25, %zmm12, %zmm12 + vprolq $39, %zmm22, %zmm22 + vprolq $41, %zmm23, %zmm23 + vprolq $45, %zmm8, %zmm8 + vprolq $15, %zmm18, %zmm18 + vprolq $21, %zmm3, %zmm3 + vprolq $8, %zmm13, %zmm13 + vprolq $18, %zmm14, %zmm14 + vprolq $2, %zmm24, %zmm24 + vprolq $61, %zmm9, %zmm9 + vprolq $56, %zmm19, %zmm19 + vprolq $14, %zmm4, %zmm4 + # Pi - relabel logical -> physical + # Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 %zmm0, %zmm30 + vmovdqu64 %zmm1, %zmm31 + vpternlogq $0xd2, %zmm2, %zmm1, %zmm0 + vpternlogq $0xd2, %zmm3, %zmm2, %zmm1 + vpternlogq $0xd2, %zmm4, %zmm3, %zmm2 + vpternlogq $0xd2, %zmm30, %zmm4, %zmm3 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm4 + vmovdqu64 %zmm5, %zmm30 + vmovdqu64 %zmm6, %zmm31 + vpternlogq $0xd2, %zmm7, %zmm6, %zmm5 + vpternlogq $0xd2, %zmm8, %zmm7, %zmm6 + vpternlogq $0xd2, %zmm9, %zmm8, %zmm7 + vpternlogq $0xd2, %zmm30, %zmm9, %zmm8 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm9 + vmovdqu64 %zmm10, %zmm30 + vmovdqu64 %zmm11, %zmm31 + vpternlogq $0xd2, %zmm12, %zmm11, %zmm10 + vpternlogq $0xd2, %zmm13, %zmm12, %zmm11 + vpternlogq $0xd2, %zmm14, %zmm13, %zmm12 + vpternlogq $0xd2, %zmm30, %zmm14, %zmm13 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm14 + vmovdqu64 %zmm15, %zmm30 + vmovdqu64 %zmm16, %zmm31 + vpternlogq $0xd2, %zmm17, %zmm16, %zmm15 + vpternlogq $0xd2, %zmm18, %zmm17, %zmm16 + vpternlogq $0xd2, %zmm19, %zmm18, %zmm17 + vpternlogq $0xd2, %zmm30, %zmm19, %zmm18 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm19 + vmovdqu64 %zmm20, %zmm30 + vmovdqu64 %zmm21, %zmm31 + vpternlogq $0xd2, %zmm22, %zmm21, %zmm20 + vpternlogq $0xd2, %zmm23, %zmm22, %zmm21 + vpternlogq $0xd2, %zmm24, %zmm23, %zmm22 + vpternlogq $0xd2, %zmm30, %zmm24, %zmm23 + vpternlogq $0xd2, %zmm31, %zmm30, %zmm24 + # Iota + vpxorq 1472(%rdx), %zmm0, %zmm0 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vmovdqu64 %zmm8, 512(%rdi) + vmovdqu64 %zmm9, 576(%rdi) + vmovdqu64 %zmm10, 640(%rdi) + vmovdqu64 %zmm11, 704(%rdi) + vmovdqu64 %zmm12, 768(%rdi) + vmovdqu64 %zmm13, 832(%rdi) + vmovdqu64 %zmm14, 896(%rdi) + vmovdqu64 %zmm15, 960(%rdi) + vmovdqu64 %zmm16, 1024(%rdi) + vmovdqu64 %zmm17, 1088(%rdi) + vmovdqu64 %zmm18, 1152(%rdi) + vmovdqu64 %zmm19, 1216(%rdi) + vmovdqu64 %zmm20, 1280(%rdi) + vmovdqu64 %zmm21, 1344(%rdi) + vmovdqu64 %zmm22, 1408(%rdi) + vmovdqu64 %zmm23, 1472(%rdi) + vmovdqu64 %zmm24, 1536(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size sha3_256_blocksx8_seed_avx512,.-sha3_256_blocksx8_seed_avx512 +#endif /* __APPLE__ */ +#endif /* WOLFSSL_HAVE_MLKEM */ #endif /* HAVE_INTEL_AVX512 */ #endif /* HAVE_INTEL_AVX2 */ diff --git a/wolfcrypt/src/sha3_asm.asm b/wolfcrypt/src/sha3_asm.asm index 874875b3df..2e4836fc39 100644 --- a/wolfcrypt/src/sha3_asm.asm +++ b/wolfcrypt/src/sha3_asm.asm @@ -154,6 +154,7 @@ sha3_block_bmi2 PROC push r15 push rdi push rsi + sub rsp, 8 mov rsi, QWORD PTR [rcx] add rcx, 96 ; Round 0 @@ -4572,6 +4573,7 @@ sha3_block_bmi2 PROC mov QWORD PTR [rcx+88], r14 mov QWORD PTR [rcx+96], r15 mov QWORD PTR [rcx+-96], rsi + add rsp, 8 pop rsi pop rdi pop r15 @@ -4591,6 +4593,7 @@ sha3_block_n_bmi2 PROC push rsi push rbx push rbp + sub rsp, 8 push r9 mov rbp, r9 mov r9, QWORD PTR [rcx] @@ -9263,6 +9266,7 @@ L_sha3_block_n_bmi2_rounds: jg L_sha3_block_n_bmi2_start mov QWORD PTR [rcx+-96], r9 pop rbp + add rsp, 8 pop rbp pop rbx pop rsi @@ -9308,17 +9312,17 @@ ptr_L_sha3_block_avx2_rotr QWORD L_sha3_block_avx2_rotr _DATA ENDS _TEXT SEGMENT READONLY PARA sha3_block_avx2 PROC - sub rsp, 160 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 - vmovdqu OWORD PTR [rsp+128], xmm14 - vmovdqu OWORD PTR [rsp+144], xmm15 + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 mov rdx, QWORD PTR [ptr_L_sha3_avx2_r] mov rax, QWORD PTR [ptr_L_sha3_block_avx2_rotl] add rax, 64 @@ -9476,17 +9480,17 @@ L_sha3_block_avx2_start: vmovdqu YMMWORD PTR [rcx+136], ymm5 vmovdqu YMMWORD PTR [rcx+168], ymm6 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - vmovdqu xmm14, OWORD PTR [rsp+128] - vmovdqu xmm15, OWORD PTR [rsp+144] - add rsp, 160 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 ret sha3_block_avx2 ENDP _TEXT ENDS @@ -9906,17 +9910,17 @@ ENDIF IF wc_masm_cond_0 _TEXT SEGMENT READONLY PARA sha3_blocksx4_avx2 PROC - sub rsp, 160 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 - vmovdqu OWORD PTR [rsp+128], xmm14 - vmovdqu OWORD PTR [rsp+144], xmm15 + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 mov rdx, QWORD PTR [ptr_L_sha3_x4_avx2_r] vmovdqu ymm15, YMMWORD PTR [rcx] mov rax, rcx @@ -15259,17 +15263,17 @@ sha3_blocksx4_avx2 PROC sub rcx, 128 vmovdqu YMMWORD PTR [rcx], ymm15 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - vmovdqu xmm14, OWORD PTR [rsp+128] - vmovdqu xmm15, OWORD PTR [rsp+144] - add rsp, 160 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 ret sha3_blocksx4_avx2 ENDP _TEXT ENDS @@ -15293,17 +15297,17 @@ ptr_L_sha3_128_blockx4_seed_avx2_end_mark QWORD L_sha3_128_blockx4_seed_avx2_end _DATA ENDS _TEXT SEGMENT READONLY PARA sha3_128_blocksx4_seed_avx2 PROC - sub rsp, 160 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 - vmovdqu OWORD PTR [rsp+128], xmm14 - vmovdqu OWORD PTR [rsp+144], xmm15 + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 mov rax, QWORD PTR [ptr_L_sha3_x4_avx2_r] mov r8, rcx mov r9, rcx @@ -20652,17 +20656,17 @@ sha3_128_blocksx4_seed_avx2 PROC sub rcx, 128 vmovdqu YMMWORD PTR [rcx], ymm15 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - vmovdqu xmm14, OWORD PTR [rsp+128] - vmovdqu xmm15, OWORD PTR [rsp+144] - add rsp, 160 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 ret sha3_128_blocksx4_seed_avx2 ENDP _TEXT ENDS @@ -20676,17 +20680,17 @@ sha3_blocksx4_out_avx2 PROC push r15 push rdi push rsi - sub rsp, 160 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 - vmovdqu OWORD PTR [rsp+128], xmm14 - vmovdqu OWORD PTR [rsp+144], xmm15 + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 mov rax, QWORD PTR [ptr_L_sha3_x4_avx2_r] mov r14d, r8d mov r11, rdx @@ -26060,17 +26064,17 @@ L_sha3_blocksx4_out_avx2_word: jmp L_sha3_blocksx4_out_avx2_block L_sha3_blocksx4_out_avx2_done: vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - vmovdqu xmm14, OWORD PTR [rsp+128] - vmovdqu xmm15, OWORD PTR [rsp+144] - add rsp, 160 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 pop rsi pop rdi pop r15 @@ -26090,17 +26094,17 @@ ptr_L_sha3_256_blockx4_seed_avx2_end_mark QWORD L_sha3_256_blockx4_seed_avx2_end _DATA ENDS _TEXT SEGMENT READONLY PARA sha3_256_blocksx4_seed_avx2 PROC - sub rsp, 160 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 - vmovdqu OWORD PTR [rsp+128], xmm14 - vmovdqu OWORD PTR [rsp+144], xmm15 + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 mov rax, QWORD PTR [ptr_L_sha3_x4_avx2_r] mov r8, rcx mov r9, rcx @@ -31450,17 +31454,17 @@ sha3_256_blocksx4_seed_avx2 PROC sub rcx, 128 vmovdqu YMMWORD PTR [rcx], ymm15 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - vmovdqu xmm14, OWORD PTR [rsp+128] - vmovdqu xmm15, OWORD PTR [rsp+144] - add rsp, 160 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 ret sha3_256_blocksx4_seed_avx2 ENDP _TEXT ENDS @@ -31474,17 +31478,17 @@ ptr_L_sha3_256_blockx4_seed_64_avx2_end_mark QWORD L_sha3_256_blockx4_seed_64_av _DATA ENDS _TEXT SEGMENT READONLY PARA sha3_256_blocksx4_seed_64_avx2 PROC - sub rsp, 160 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 - vmovdqu OWORD PTR [rsp+128], xmm14 - vmovdqu OWORD PTR [rsp+144], xmm15 + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 mov rax, QWORD PTR [ptr_L_sha3_x4_avx2_r] mov r8, rcx mov r9, rcx @@ -36858,23 +36862,35 @@ sha3_256_blocksx4_seed_64_avx2 PROC sub rcx, 128 vmovdqu YMMWORD PTR [rcx], ymm15 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - vmovdqu xmm14, OWORD PTR [rsp+128] - vmovdqu xmm15, OWORD PTR [rsp+144] - add rsp, 160 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 ret sha3_256_blocksx4_seed_64_avx2 ENDP _TEXT ENDS ENDIF +IFNDEF NO_AVX512_SUPPORT +IFNDEF HAVE_INTEL_AVX512 +HAVE_INTEL_AVX512 = 1 +ENDIF +ENDIF IFDEF HAVE_INTEL_AVX512 +wc_masm_cond_2 = 0 IFDEF WOLFSSL_HAVE_FRODOKEM +wc_masm_cond_2 = 1 +ENDIF +IFDEF WOLFSSL_HAVE_MLKEM +wc_masm_cond_2 = 1 +ENDIF +IF wc_masm_cond_2 _DATA SEGMENT ALIGN 16 L_sha3_x8_avx512_r QWORD 0000000000000001h, 0000000000000001h @@ -36975,6 +36991,8 @@ L_sha3_x8_avx512_r QWORD 0000000000000001h, 0000000000000001h QWORD 8000000080008008h, 8000000080008008h ptr_L_sha3_x8_avx512_r QWORD L_sha3_x8_avx512_r _DATA ENDS +ENDIF +IFDEF WOLFSSL_HAVE_FRODOKEM _TEXT SEGMENT READONLY PARA sha3_blocksx8_out_avx512 PROC push r12 @@ -36985,17 +37003,17 @@ sha3_blocksx8_out_avx512 PROC push rsi push rbx push rbp - sub rsp, 160 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 - vmovdqu OWORD PTR [rsp+128], xmm14 - vmovdqu OWORD PTR [rsp+144], xmm15 + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 mov rax, QWORD PTR [ptr_L_sha3_x8_avx512_r] mov edi, r8d mov r9, rdx @@ -39907,17 +39925,17 @@ L_sha3_blocksx8_out_avx512_word: jmp L_sha3_blocksx8_out_avx512_block L_sha3_blocksx8_out_avx512_done: vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - vmovdqu xmm14, OWORD PTR [rsp+128] - vmovdqu xmm15, OWORD PTR [rsp+144] - add rsp, 160 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 pop rbp pop rbx pop rsi @@ -39930,6 +39948,8685 @@ L_sha3_blocksx8_out_avx512_done: sha3_blocksx8_out_avx512 ENDP _TEXT ENDS ENDIF +IFDEF WOLFSSL_HAVE_MLKEM +_TEXT SEGMENT READONLY PARA +sha3_blocksx8_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + mov rdx, QWORD PTR [ptr_L_sha3_x8_avx512_r] + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vmovdqu64 zmm8, [rcx+512] + vmovdqu64 zmm9, [rcx+576] + vmovdqu64 zmm10, [rcx+640] + vmovdqu64 zmm11, [rcx+704] + vmovdqu64 zmm12, [rcx+768] + vmovdqu64 zmm13, [rcx+832] + vmovdqu64 zmm14, [rcx+896] + vmovdqu64 zmm15, [rcx+960] + vmovdqu64 zmm16, [rcx+1024] + vmovdqu64 zmm17, [rcx+1088] + vmovdqu64 zmm18, [rcx+1152] + vmovdqu64 zmm19, [rcx+1216] + vmovdqu64 zmm20, [rcx+1280] + vmovdqu64 zmm21, [rcx+1344] + vmovdqu64 zmm22, [rcx+1408] + vmovdqu64 zmm23, [rcx+1472] + vmovdqu64 zmm24, [rcx+1536] + ; Round 0 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm5, zmm10, 150 + vpternlogq zmm25, zmm15, zmm20, 150 + vmovdqu64 zmm26, zmm1 + vpternlogq zmm26, zmm6, zmm11, 150 + vpternlogq zmm26, zmm16, zmm21, 150 + vmovdqu64 zmm27, zmm2 + vpternlogq zmm27, zmm7, zmm12, 150 + vpternlogq zmm27, zmm17, zmm22, 150 + vmovdqu64 zmm28, zmm3 + vpternlogq zmm28, zmm8, zmm13, 150 + vpternlogq zmm28, zmm18, zmm23, 150 + vmovdqu64 zmm29, zmm4 + vpternlogq zmm29, zmm9, zmm14, 150 + vpternlogq zmm29, zmm19, zmm24, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm24, zmm24, zmm30 + ; Rho - rotate each lane in place + vprolq zmm1, zmm1, 1 + vprolq zmm2, zmm2, 62 + vprolq zmm3, zmm3, 28 + vprolq zmm4, zmm4, 27 + vprolq zmm5, zmm5, 36 + vprolq zmm6, zmm6, 44 + vprolq zmm7, zmm7, 6 + vprolq zmm8, zmm8, 55 + vprolq zmm9, zmm9, 20 + vprolq zmm10, zmm10, 3 + vprolq zmm11, zmm11, 10 + vprolq zmm12, zmm12, 43 + vprolq zmm13, zmm13, 25 + vprolq zmm14, zmm14, 39 + vprolq zmm15, zmm15, 41 + vprolq zmm16, zmm16, 45 + vprolq zmm17, zmm17, 15 + vprolq zmm18, zmm18, 21 + vprolq zmm19, zmm19, 8 + vprolq zmm20, zmm20, 18 + vprolq zmm21, zmm21, 2 + vprolq zmm22, zmm22, 61 + vprolq zmm23, zmm23, 56 + vprolq zmm24, zmm24, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm0, zmm6, zmm12, 210 + vpternlogq zmm6, zmm12, zmm18, 210 + vpternlogq zmm12, zmm18, zmm24, 210 + vpternlogq zmm18, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm3, zmm9, zmm10, 210 + vpternlogq zmm9, zmm10, zmm16, 210 + vpternlogq zmm10, zmm16, zmm22, 210 + vpternlogq zmm16, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm1, zmm7, zmm13, 210 + vpternlogq zmm7, zmm13, zmm19, 210 + vpternlogq zmm13, zmm19, zmm20, 210 + vpternlogq zmm19, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm4, zmm5, zmm11, 210 + vpternlogq zmm5, zmm11, zmm17, 210 + vpternlogq zmm11, zmm17, zmm23, 210 + vpternlogq zmm17, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm2, zmm8, zmm14, 210 + vpternlogq zmm8, zmm14, zmm15, 210 + vpternlogq zmm14, zmm15, zmm21, 210 + vpternlogq zmm15, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx] + ; Round 1 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm3, zmm1, 150 + vpternlogq zmm25, zmm4, zmm2, 150 + vmovdqu64 zmm26, zmm6 + vpternlogq zmm26, zmm9, zmm7, 150 + vpternlogq zmm26, zmm5, zmm8, 150 + vmovdqu64 zmm27, zmm12 + vpternlogq zmm27, zmm10, zmm13, 150 + vpternlogq zmm27, zmm11, zmm14, 150 + vmovdqu64 zmm28, zmm18 + vpternlogq zmm28, zmm16, zmm19, 150 + vpternlogq zmm28, zmm17, zmm15, 150 + vmovdqu64 zmm29, zmm24 + vpternlogq zmm29, zmm22, zmm20, 150 + vpternlogq zmm29, zmm23, zmm21, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm21, zmm21, zmm30 + ; Rho - rotate each lane in place + vprolq zmm6, zmm6, 1 + vprolq zmm12, zmm12, 62 + vprolq zmm18, zmm18, 28 + vprolq zmm24, zmm24, 27 + vprolq zmm3, zmm3, 36 + vprolq zmm9, zmm9, 44 + vprolq zmm10, zmm10, 6 + vprolq zmm16, zmm16, 55 + vprolq zmm22, zmm22, 20 + vprolq zmm1, zmm1, 3 + vprolq zmm7, zmm7, 10 + vprolq zmm13, zmm13, 43 + vprolq zmm19, zmm19, 25 + vprolq zmm20, zmm20, 39 + vprolq zmm4, zmm4, 41 + vprolq zmm5, zmm5, 45 + vprolq zmm11, zmm11, 15 + vprolq zmm17, zmm17, 21 + vprolq zmm23, zmm23, 8 + vprolq zmm2, zmm2, 18 + vprolq zmm8, zmm8, 2 + vprolq zmm14, zmm14, 61 + vprolq zmm15, zmm15, 56 + vprolq zmm21, zmm21, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm0, zmm9, zmm13, 210 + vpternlogq zmm9, zmm13, zmm17, 210 + vpternlogq zmm13, zmm17, zmm21, 210 + vpternlogq zmm17, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm18, zmm22, zmm1, 210 + vpternlogq zmm22, zmm1, zmm5, 210 + vpternlogq zmm1, zmm5, zmm14, 210 + vpternlogq zmm5, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm6, zmm10, zmm19, 210 + vpternlogq zmm10, zmm19, zmm23, 210 + vpternlogq zmm19, zmm23, zmm2, 210 + vpternlogq zmm23, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm24, zmm3, zmm7, 210 + vpternlogq zmm3, zmm7, zmm11, 210 + vpternlogq zmm7, zmm11, zmm15, 210 + vpternlogq zmm11, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm12, zmm16, zmm20, 210 + vpternlogq zmm16, zmm20, zmm4, 210 + vpternlogq zmm20, zmm4, zmm8, 210 + vpternlogq zmm4, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+64] + ; Round 2 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm18, zmm6, 150 + vpternlogq zmm25, zmm24, zmm12, 150 + vmovdqu64 zmm26, zmm9 + vpternlogq zmm26, zmm22, zmm10, 150 + vpternlogq zmm26, zmm3, zmm16, 150 + vmovdqu64 zmm27, zmm13 + vpternlogq zmm27, zmm1, zmm19, 150 + vpternlogq zmm27, zmm7, zmm20, 150 + vmovdqu64 zmm28, zmm17 + vpternlogq zmm28, zmm5, zmm23, 150 + vpternlogq zmm28, zmm11, zmm4, 150 + vmovdqu64 zmm29, zmm21 + vpternlogq zmm29, zmm14, zmm2, 150 + vpternlogq zmm29, zmm15, zmm8, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm8, zmm8, zmm30 + ; Rho - rotate each lane in place + vprolq zmm9, zmm9, 1 + vprolq zmm13, zmm13, 62 + vprolq zmm17, zmm17, 28 + vprolq zmm21, zmm21, 27 + vprolq zmm18, zmm18, 36 + vprolq zmm22, zmm22, 44 + vprolq zmm1, zmm1, 6 + vprolq zmm5, zmm5, 55 + vprolq zmm14, zmm14, 20 + vprolq zmm6, zmm6, 3 + vprolq zmm10, zmm10, 10 + vprolq zmm19, zmm19, 43 + vprolq zmm23, zmm23, 25 + vprolq zmm2, zmm2, 39 + vprolq zmm24, zmm24, 41 + vprolq zmm3, zmm3, 45 + vprolq zmm7, zmm7, 15 + vprolq zmm11, zmm11, 21 + vprolq zmm15, zmm15, 8 + vprolq zmm12, zmm12, 18 + vprolq zmm16, zmm16, 2 + vprolq zmm20, zmm20, 61 + vprolq zmm4, zmm4, 56 + vprolq zmm8, zmm8, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm0, zmm22, zmm19, 210 + vpternlogq zmm22, zmm19, zmm11, 210 + vpternlogq zmm19, zmm11, zmm8, 210 + vpternlogq zmm11, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm17, zmm14, zmm6, 210 + vpternlogq zmm14, zmm6, zmm3, 210 + vpternlogq zmm6, zmm3, zmm20, 210 + vpternlogq zmm3, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm9, zmm1, zmm23, 210 + vpternlogq zmm1, zmm23, zmm15, 210 + vpternlogq zmm23, zmm15, zmm12, 210 + vpternlogq zmm15, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm21, zmm18, zmm10, 210 + vpternlogq zmm18, zmm10, zmm7, 210 + vpternlogq zmm10, zmm7, zmm4, 210 + vpternlogq zmm7, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm13, zmm5, zmm2, 210 + vpternlogq zmm5, zmm2, zmm24, 210 + vpternlogq zmm2, zmm24, zmm16, 210 + vpternlogq zmm24, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+128] + ; Round 3 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm17, zmm9, 150 + vpternlogq zmm25, zmm21, zmm13, 150 + vmovdqu64 zmm26, zmm22 + vpternlogq zmm26, zmm14, zmm1, 150 + vpternlogq zmm26, zmm18, zmm5, 150 + vmovdqu64 zmm27, zmm19 + vpternlogq zmm27, zmm6, zmm23, 150 + vpternlogq zmm27, zmm10, zmm2, 150 + vmovdqu64 zmm28, zmm11 + vpternlogq zmm28, zmm3, zmm15, 150 + vpternlogq zmm28, zmm7, zmm24, 150 + vmovdqu64 zmm29, zmm8 + vpternlogq zmm29, zmm20, zmm12, 150 + vpternlogq zmm29, zmm4, zmm16, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm16, zmm16, zmm30 + ; Rho - rotate each lane in place + vprolq zmm22, zmm22, 1 + vprolq zmm19, zmm19, 62 + vprolq zmm11, zmm11, 28 + vprolq zmm8, zmm8, 27 + vprolq zmm17, zmm17, 36 + vprolq zmm14, zmm14, 44 + vprolq zmm6, zmm6, 6 + vprolq zmm3, zmm3, 55 + vprolq zmm20, zmm20, 20 + vprolq zmm9, zmm9, 3 + vprolq zmm1, zmm1, 10 + vprolq zmm23, zmm23, 43 + vprolq zmm15, zmm15, 25 + vprolq zmm12, zmm12, 39 + vprolq zmm21, zmm21, 41 + vprolq zmm18, zmm18, 45 + vprolq zmm10, zmm10, 15 + vprolq zmm7, zmm7, 21 + vprolq zmm4, zmm4, 8 + vprolq zmm13, zmm13, 18 + vprolq zmm5, zmm5, 2 + vprolq zmm2, zmm2, 61 + vprolq zmm24, zmm24, 56 + vprolq zmm16, zmm16, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm0, zmm14, zmm23, 210 + vpternlogq zmm14, zmm23, zmm7, 210 + vpternlogq zmm23, zmm7, zmm16, 210 + vpternlogq zmm7, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm11, zmm20, zmm9, 210 + vpternlogq zmm20, zmm9, zmm18, 210 + vpternlogq zmm9, zmm18, zmm2, 210 + vpternlogq zmm18, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm22, zmm6, zmm15, 210 + vpternlogq zmm6, zmm15, zmm4, 210 + vpternlogq zmm15, zmm4, zmm13, 210 + vpternlogq zmm4, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm8, zmm17, zmm1, 210 + vpternlogq zmm17, zmm1, zmm10, 210 + vpternlogq zmm1, zmm10, zmm24, 210 + vpternlogq zmm10, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm19, zmm3, zmm12, 210 + vpternlogq zmm3, zmm12, zmm21, 210 + vpternlogq zmm12, zmm21, zmm5, 210 + vpternlogq zmm21, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+192] + ; Round 4 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm11, zmm22, 150 + vpternlogq zmm25, zmm8, zmm19, 150 + vmovdqu64 zmm26, zmm14 + vpternlogq zmm26, zmm20, zmm6, 150 + vpternlogq zmm26, zmm17, zmm3, 150 + vmovdqu64 zmm27, zmm23 + vpternlogq zmm27, zmm9, zmm15, 150 + vpternlogq zmm27, zmm1, zmm12, 150 + vmovdqu64 zmm28, zmm7 + vpternlogq zmm28, zmm18, zmm4, 150 + vpternlogq zmm28, zmm10, zmm21, 150 + vmovdqu64 zmm29, zmm16 + vpternlogq zmm29, zmm2, zmm13, 150 + vpternlogq zmm29, zmm24, zmm5, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm5, zmm5, zmm30 + ; Rho - rotate each lane in place + vprolq zmm14, zmm14, 1 + vprolq zmm23, zmm23, 62 + vprolq zmm7, zmm7, 28 + vprolq zmm16, zmm16, 27 + vprolq zmm11, zmm11, 36 + vprolq zmm20, zmm20, 44 + vprolq zmm9, zmm9, 6 + vprolq zmm18, zmm18, 55 + vprolq zmm2, zmm2, 20 + vprolq zmm22, zmm22, 3 + vprolq zmm6, zmm6, 10 + vprolq zmm15, zmm15, 43 + vprolq zmm4, zmm4, 25 + vprolq zmm13, zmm13, 39 + vprolq zmm8, zmm8, 41 + vprolq zmm17, zmm17, 45 + vprolq zmm1, zmm1, 15 + vprolq zmm10, zmm10, 21 + vprolq zmm24, zmm24, 8 + vprolq zmm19, zmm19, 18 + vprolq zmm3, zmm3, 2 + vprolq zmm12, zmm12, 61 + vprolq zmm21, zmm21, 56 + vprolq zmm5, zmm5, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm0, zmm20, zmm15, 210 + vpternlogq zmm20, zmm15, zmm10, 210 + vpternlogq zmm15, zmm10, zmm5, 210 + vpternlogq zmm10, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm7, zmm2, zmm22, 210 + vpternlogq zmm2, zmm22, zmm17, 210 + vpternlogq zmm22, zmm17, zmm12, 210 + vpternlogq zmm17, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm14, zmm9, zmm4, 210 + vpternlogq zmm9, zmm4, zmm24, 210 + vpternlogq zmm4, zmm24, zmm19, 210 + vpternlogq zmm24, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm16, zmm11, zmm6, 210 + vpternlogq zmm11, zmm6, zmm1, 210 + vpternlogq zmm6, zmm1, zmm21, 210 + vpternlogq zmm1, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm23, zmm18, zmm13, 210 + vpternlogq zmm18, zmm13, zmm8, 210 + vpternlogq zmm13, zmm8, zmm3, 210 + vpternlogq zmm8, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+256] + ; Round 5 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm7, zmm14, 150 + vpternlogq zmm25, zmm16, zmm23, 150 + vmovdqu64 zmm26, zmm20 + vpternlogq zmm26, zmm2, zmm9, 150 + vpternlogq zmm26, zmm11, zmm18, 150 + vmovdqu64 zmm27, zmm15 + vpternlogq zmm27, zmm22, zmm4, 150 + vpternlogq zmm27, zmm6, zmm13, 150 + vmovdqu64 zmm28, zmm10 + vpternlogq zmm28, zmm17, zmm24, 150 + vpternlogq zmm28, zmm1, zmm8, 150 + vmovdqu64 zmm29, zmm5 + vpternlogq zmm29, zmm12, zmm19, 150 + vpternlogq zmm29, zmm21, zmm3, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm3, zmm3, zmm30 + ; Rho - rotate each lane in place + vprolq zmm20, zmm20, 1 + vprolq zmm15, zmm15, 62 + vprolq zmm10, zmm10, 28 + vprolq zmm5, zmm5, 27 + vprolq zmm7, zmm7, 36 + vprolq zmm2, zmm2, 44 + vprolq zmm22, zmm22, 6 + vprolq zmm17, zmm17, 55 + vprolq zmm12, zmm12, 20 + vprolq zmm14, zmm14, 3 + vprolq zmm9, zmm9, 10 + vprolq zmm4, zmm4, 43 + vprolq zmm24, zmm24, 25 + vprolq zmm19, zmm19, 39 + vprolq zmm16, zmm16, 41 + vprolq zmm11, zmm11, 45 + vprolq zmm6, zmm6, 15 + vprolq zmm1, zmm1, 21 + vprolq zmm21, zmm21, 8 + vprolq zmm23, zmm23, 18 + vprolq zmm18, zmm18, 2 + vprolq zmm13, zmm13, 61 + vprolq zmm8, zmm8, 56 + vprolq zmm3, zmm3, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm0, zmm2, zmm4, 210 + vpternlogq zmm2, zmm4, zmm1, 210 + vpternlogq zmm4, zmm1, zmm3, 210 + vpternlogq zmm1, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm10, zmm12, zmm14, 210 + vpternlogq zmm12, zmm14, zmm11, 210 + vpternlogq zmm14, zmm11, zmm13, 210 + vpternlogq zmm11, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm20, zmm22, zmm24, 210 + vpternlogq zmm22, zmm24, zmm21, 210 + vpternlogq zmm24, zmm21, zmm23, 210 + vpternlogq zmm21, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm5, zmm7, zmm9, 210 + vpternlogq zmm7, zmm9, zmm6, 210 + vpternlogq zmm9, zmm6, zmm8, 210 + vpternlogq zmm6, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm15, zmm17, zmm19, 210 + vpternlogq zmm17, zmm19, zmm16, 210 + vpternlogq zmm19, zmm16, zmm18, 210 + vpternlogq zmm16, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+320] + ; Round 6 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm10, zmm20, 150 + vpternlogq zmm25, zmm5, zmm15, 150 + vmovdqu64 zmm26, zmm2 + vpternlogq zmm26, zmm12, zmm22, 150 + vpternlogq zmm26, zmm7, zmm17, 150 + vmovdqu64 zmm27, zmm4 + vpternlogq zmm27, zmm14, zmm24, 150 + vpternlogq zmm27, zmm9, zmm19, 150 + vmovdqu64 zmm28, zmm1 + vpternlogq zmm28, zmm11, zmm21, 150 + vpternlogq zmm28, zmm6, zmm16, 150 + vmovdqu64 zmm29, zmm3 + vpternlogq zmm29, zmm13, zmm23, 150 + vpternlogq zmm29, zmm8, zmm18, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm18, zmm18, zmm30 + ; Rho - rotate each lane in place + vprolq zmm2, zmm2, 1 + vprolq zmm4, zmm4, 62 + vprolq zmm1, zmm1, 28 + vprolq zmm3, zmm3, 27 + vprolq zmm10, zmm10, 36 + vprolq zmm12, zmm12, 44 + vprolq zmm14, zmm14, 6 + vprolq zmm11, zmm11, 55 + vprolq zmm13, zmm13, 20 + vprolq zmm20, zmm20, 3 + vprolq zmm22, zmm22, 10 + vprolq zmm24, zmm24, 43 + vprolq zmm21, zmm21, 25 + vprolq zmm23, zmm23, 39 + vprolq zmm5, zmm5, 41 + vprolq zmm7, zmm7, 45 + vprolq zmm9, zmm9, 15 + vprolq zmm6, zmm6, 21 + vprolq zmm8, zmm8, 8 + vprolq zmm15, zmm15, 18 + vprolq zmm17, zmm17, 2 + vprolq zmm19, zmm19, 61 + vprolq zmm16, zmm16, 56 + vprolq zmm18, zmm18, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm0, zmm12, zmm24, 210 + vpternlogq zmm12, zmm24, zmm6, 210 + vpternlogq zmm24, zmm6, zmm18, 210 + vpternlogq zmm6, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm1, zmm13, zmm20, 210 + vpternlogq zmm13, zmm20, zmm7, 210 + vpternlogq zmm20, zmm7, zmm19, 210 + vpternlogq zmm7, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm2, zmm14, zmm21, 210 + vpternlogq zmm14, zmm21, zmm8, 210 + vpternlogq zmm21, zmm8, zmm15, 210 + vpternlogq zmm8, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm3, zmm10, zmm22, 210 + vpternlogq zmm10, zmm22, zmm9, 210 + vpternlogq zmm22, zmm9, zmm16, 210 + vpternlogq zmm9, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm4, zmm11, zmm23, 210 + vpternlogq zmm11, zmm23, zmm5, 210 + vpternlogq zmm23, zmm5, zmm17, 210 + vpternlogq zmm5, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+384] + ; Round 7 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm1, zmm2, 150 + vpternlogq zmm25, zmm3, zmm4, 150 + vmovdqu64 zmm26, zmm12 + vpternlogq zmm26, zmm13, zmm14, 150 + vpternlogq zmm26, zmm10, zmm11, 150 + vmovdqu64 zmm27, zmm24 + vpternlogq zmm27, zmm20, zmm21, 150 + vpternlogq zmm27, zmm22, zmm23, 150 + vmovdqu64 zmm28, zmm6 + vpternlogq zmm28, zmm7, zmm8, 150 + vpternlogq zmm28, zmm9, zmm5, 150 + vmovdqu64 zmm29, zmm18 + vpternlogq zmm29, zmm19, zmm15, 150 + vpternlogq zmm29, zmm16, zmm17, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm17, zmm17, zmm30 + ; Rho - rotate each lane in place + vprolq zmm12, zmm12, 1 + vprolq zmm24, zmm24, 62 + vprolq zmm6, zmm6, 28 + vprolq zmm18, zmm18, 27 + vprolq zmm1, zmm1, 36 + vprolq zmm13, zmm13, 44 + vprolq zmm20, zmm20, 6 + vprolq zmm7, zmm7, 55 + vprolq zmm19, zmm19, 20 + vprolq zmm2, zmm2, 3 + vprolq zmm14, zmm14, 10 + vprolq zmm21, zmm21, 43 + vprolq zmm8, zmm8, 25 + vprolq zmm15, zmm15, 39 + vprolq zmm3, zmm3, 41 + vprolq zmm10, zmm10, 45 + vprolq zmm22, zmm22, 15 + vprolq zmm9, zmm9, 21 + vprolq zmm16, zmm16, 8 + vprolq zmm4, zmm4, 18 + vprolq zmm11, zmm11, 2 + vprolq zmm23, zmm23, 61 + vprolq zmm5, zmm5, 56 + vprolq zmm17, zmm17, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm0, zmm13, zmm21, 210 + vpternlogq zmm13, zmm21, zmm9, 210 + vpternlogq zmm21, zmm9, zmm17, 210 + vpternlogq zmm9, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm6, zmm19, zmm2, 210 + vpternlogq zmm19, zmm2, zmm10, 210 + vpternlogq zmm2, zmm10, zmm23, 210 + vpternlogq zmm10, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm12, zmm20, zmm8, 210 + vpternlogq zmm20, zmm8, zmm16, 210 + vpternlogq zmm8, zmm16, zmm4, 210 + vpternlogq zmm16, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm18, zmm1, zmm14, 210 + vpternlogq zmm1, zmm14, zmm22, 210 + vpternlogq zmm14, zmm22, zmm5, 210 + vpternlogq zmm22, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm24, zmm7, zmm15, 210 + vpternlogq zmm7, zmm15, zmm3, 210 + vpternlogq zmm15, zmm3, zmm11, 210 + vpternlogq zmm3, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+448] + ; Round 8 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm6, zmm12, 150 + vpternlogq zmm25, zmm18, zmm24, 150 + vmovdqu64 zmm26, zmm13 + vpternlogq zmm26, zmm19, zmm20, 150 + vpternlogq zmm26, zmm1, zmm7, 150 + vmovdqu64 zmm27, zmm21 + vpternlogq zmm27, zmm2, zmm8, 150 + vpternlogq zmm27, zmm14, zmm15, 150 + vmovdqu64 zmm28, zmm9 + vpternlogq zmm28, zmm10, zmm16, 150 + vpternlogq zmm28, zmm22, zmm3, 150 + vmovdqu64 zmm29, zmm17 + vpternlogq zmm29, zmm23, zmm4, 150 + vpternlogq zmm29, zmm5, zmm11, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm11, zmm11, zmm30 + ; Rho - rotate each lane in place + vprolq zmm13, zmm13, 1 + vprolq zmm21, zmm21, 62 + vprolq zmm9, zmm9, 28 + vprolq zmm17, zmm17, 27 + vprolq zmm6, zmm6, 36 + vprolq zmm19, zmm19, 44 + vprolq zmm2, zmm2, 6 + vprolq zmm10, zmm10, 55 + vprolq zmm23, zmm23, 20 + vprolq zmm12, zmm12, 3 + vprolq zmm20, zmm20, 10 + vprolq zmm8, zmm8, 43 + vprolq zmm16, zmm16, 25 + vprolq zmm4, zmm4, 39 + vprolq zmm18, zmm18, 41 + vprolq zmm1, zmm1, 45 + vprolq zmm14, zmm14, 15 + vprolq zmm22, zmm22, 21 + vprolq zmm5, zmm5, 8 + vprolq zmm24, zmm24, 18 + vprolq zmm7, zmm7, 2 + vprolq zmm15, zmm15, 61 + vprolq zmm3, zmm3, 56 + vprolq zmm11, zmm11, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm0, zmm19, zmm8, 210 + vpternlogq zmm19, zmm8, zmm22, 210 + vpternlogq zmm8, zmm22, zmm11, 210 + vpternlogq zmm22, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm9, zmm23, zmm12, 210 + vpternlogq zmm23, zmm12, zmm1, 210 + vpternlogq zmm12, zmm1, zmm15, 210 + vpternlogq zmm1, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm13, zmm2, zmm16, 210 + vpternlogq zmm2, zmm16, zmm5, 210 + vpternlogq zmm16, zmm5, zmm24, 210 + vpternlogq zmm5, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm17, zmm6, zmm20, 210 + vpternlogq zmm6, zmm20, zmm14, 210 + vpternlogq zmm20, zmm14, zmm3, 210 + vpternlogq zmm14, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm21, zmm10, zmm4, 210 + vpternlogq zmm10, zmm4, zmm18, 210 + vpternlogq zmm4, zmm18, zmm7, 210 + vpternlogq zmm18, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+512] + ; Round 9 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm9, zmm13, 150 + vpternlogq zmm25, zmm17, zmm21, 150 + vmovdqu64 zmm26, zmm19 + vpternlogq zmm26, zmm23, zmm2, 150 + vpternlogq zmm26, zmm6, zmm10, 150 + vmovdqu64 zmm27, zmm8 + vpternlogq zmm27, zmm12, zmm16, 150 + vpternlogq zmm27, zmm20, zmm4, 150 + vmovdqu64 zmm28, zmm22 + vpternlogq zmm28, zmm1, zmm5, 150 + vpternlogq zmm28, zmm14, zmm18, 150 + vmovdqu64 zmm29, zmm11 + vpternlogq zmm29, zmm15, zmm24, 150 + vpternlogq zmm29, zmm3, zmm7, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm7, zmm7, zmm30 + ; Rho - rotate each lane in place + vprolq zmm19, zmm19, 1 + vprolq zmm8, zmm8, 62 + vprolq zmm22, zmm22, 28 + vprolq zmm11, zmm11, 27 + vprolq zmm9, zmm9, 36 + vprolq zmm23, zmm23, 44 + vprolq zmm12, zmm12, 6 + vprolq zmm1, zmm1, 55 + vprolq zmm15, zmm15, 20 + vprolq zmm13, zmm13, 3 + vprolq zmm2, zmm2, 10 + vprolq zmm16, zmm16, 43 + vprolq zmm5, zmm5, 25 + vprolq zmm24, zmm24, 39 + vprolq zmm17, zmm17, 41 + vprolq zmm6, zmm6, 45 + vprolq zmm20, zmm20, 15 + vprolq zmm14, zmm14, 21 + vprolq zmm3, zmm3, 8 + vprolq zmm21, zmm21, 18 + vprolq zmm10, zmm10, 2 + vprolq zmm4, zmm4, 61 + vprolq zmm18, zmm18, 56 + vprolq zmm7, zmm7, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm0, zmm23, zmm16, 210 + vpternlogq zmm23, zmm16, zmm14, 210 + vpternlogq zmm16, zmm14, zmm7, 210 + vpternlogq zmm14, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm22, zmm15, zmm13, 210 + vpternlogq zmm15, zmm13, zmm6, 210 + vpternlogq zmm13, zmm6, zmm4, 210 + vpternlogq zmm6, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm19, zmm12, zmm5, 210 + vpternlogq zmm12, zmm5, zmm3, 210 + vpternlogq zmm5, zmm3, zmm21, 210 + vpternlogq zmm3, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm11, zmm9, zmm2, 210 + vpternlogq zmm9, zmm2, zmm20, 210 + vpternlogq zmm2, zmm20, zmm18, 210 + vpternlogq zmm20, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm8, zmm1, zmm24, 210 + vpternlogq zmm1, zmm24, zmm17, 210 + vpternlogq zmm24, zmm17, zmm10, 210 + vpternlogq zmm17, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+576] + ; Round 10 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm22, zmm19, 150 + vpternlogq zmm25, zmm11, zmm8, 150 + vmovdqu64 zmm26, zmm23 + vpternlogq zmm26, zmm15, zmm12, 150 + vpternlogq zmm26, zmm9, zmm1, 150 + vmovdqu64 zmm27, zmm16 + vpternlogq zmm27, zmm13, zmm5, 150 + vpternlogq zmm27, zmm2, zmm24, 150 + vmovdqu64 zmm28, zmm14 + vpternlogq zmm28, zmm6, zmm3, 150 + vpternlogq zmm28, zmm20, zmm17, 150 + vmovdqu64 zmm29, zmm7 + vpternlogq zmm29, zmm4, zmm21, 150 + vpternlogq zmm29, zmm18, zmm10, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm10, zmm10, zmm30 + ; Rho - rotate each lane in place + vprolq zmm23, zmm23, 1 + vprolq zmm16, zmm16, 62 + vprolq zmm14, zmm14, 28 + vprolq zmm7, zmm7, 27 + vprolq zmm22, zmm22, 36 + vprolq zmm15, zmm15, 44 + vprolq zmm13, zmm13, 6 + vprolq zmm6, zmm6, 55 + vprolq zmm4, zmm4, 20 + vprolq zmm19, zmm19, 3 + vprolq zmm12, zmm12, 10 + vprolq zmm5, zmm5, 43 + vprolq zmm3, zmm3, 25 + vprolq zmm21, zmm21, 39 + vprolq zmm11, zmm11, 41 + vprolq zmm9, zmm9, 45 + vprolq zmm2, zmm2, 15 + vprolq zmm20, zmm20, 21 + vprolq zmm18, zmm18, 8 + vprolq zmm8, zmm8, 18 + vprolq zmm1, zmm1, 2 + vprolq zmm24, zmm24, 61 + vprolq zmm17, zmm17, 56 + vprolq zmm10, zmm10, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm0, zmm15, zmm5, 210 + vpternlogq zmm15, zmm5, zmm20, 210 + vpternlogq zmm5, zmm20, zmm10, 210 + vpternlogq zmm20, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm14, zmm4, zmm19, 210 + vpternlogq zmm4, zmm19, zmm9, 210 + vpternlogq zmm19, zmm9, zmm24, 210 + vpternlogq zmm9, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm23, zmm13, zmm3, 210 + vpternlogq zmm13, zmm3, zmm18, 210 + vpternlogq zmm3, zmm18, zmm8, 210 + vpternlogq zmm18, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm7, zmm22, zmm12, 210 + vpternlogq zmm22, zmm12, zmm2, 210 + vpternlogq zmm12, zmm2, zmm17, 210 + vpternlogq zmm2, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm16, zmm6, zmm21, 210 + vpternlogq zmm6, zmm21, zmm11, 210 + vpternlogq zmm21, zmm11, zmm1, 210 + vpternlogq zmm11, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+640] + ; Round 11 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm14, zmm23, 150 + vpternlogq zmm25, zmm7, zmm16, 150 + vmovdqu64 zmm26, zmm15 + vpternlogq zmm26, zmm4, zmm13, 150 + vpternlogq zmm26, zmm22, zmm6, 150 + vmovdqu64 zmm27, zmm5 + vpternlogq zmm27, zmm19, zmm3, 150 + vpternlogq zmm27, zmm12, zmm21, 150 + vmovdqu64 zmm28, zmm20 + vpternlogq zmm28, zmm9, zmm18, 150 + vpternlogq zmm28, zmm2, zmm11, 150 + vmovdqu64 zmm29, zmm10 + vpternlogq zmm29, zmm24, zmm8, 150 + vpternlogq zmm29, zmm17, zmm1, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm1, zmm1, zmm30 + ; Rho - rotate each lane in place + vprolq zmm15, zmm15, 1 + vprolq zmm5, zmm5, 62 + vprolq zmm20, zmm20, 28 + vprolq zmm10, zmm10, 27 + vprolq zmm14, zmm14, 36 + vprolq zmm4, zmm4, 44 + vprolq zmm19, zmm19, 6 + vprolq zmm9, zmm9, 55 + vprolq zmm24, zmm24, 20 + vprolq zmm23, zmm23, 3 + vprolq zmm13, zmm13, 10 + vprolq zmm3, zmm3, 43 + vprolq zmm18, zmm18, 25 + vprolq zmm8, zmm8, 39 + vprolq zmm7, zmm7, 41 + vprolq zmm22, zmm22, 45 + vprolq zmm12, zmm12, 15 + vprolq zmm2, zmm2, 21 + vprolq zmm17, zmm17, 8 + vprolq zmm16, zmm16, 18 + vprolq zmm6, zmm6, 2 + vprolq zmm21, zmm21, 61 + vprolq zmm11, zmm11, 56 + vprolq zmm1, zmm1, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm0, zmm4, zmm3, 210 + vpternlogq zmm4, zmm3, zmm2, 210 + vpternlogq zmm3, zmm2, zmm1, 210 + vpternlogq zmm2, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm20, zmm24, zmm23, 210 + vpternlogq zmm24, zmm23, zmm22, 210 + vpternlogq zmm23, zmm22, zmm21, 210 + vpternlogq zmm22, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm15, zmm19, zmm18, 210 + vpternlogq zmm19, zmm18, zmm17, 210 + vpternlogq zmm18, zmm17, zmm16, 210 + vpternlogq zmm17, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm10, zmm14, zmm13, 210 + vpternlogq zmm14, zmm13, zmm12, 210 + vpternlogq zmm13, zmm12, zmm11, 210 + vpternlogq zmm12, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm5, zmm9, zmm8, 210 + vpternlogq zmm9, zmm8, zmm7, 210 + vpternlogq zmm8, zmm7, zmm6, 210 + vpternlogq zmm7, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+704] + ; Round 12 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm20, zmm15, 150 + vpternlogq zmm25, zmm10, zmm5, 150 + vmovdqu64 zmm26, zmm4 + vpternlogq zmm26, zmm24, zmm19, 150 + vpternlogq zmm26, zmm14, zmm9, 150 + vmovdqu64 zmm27, zmm3 + vpternlogq zmm27, zmm23, zmm18, 150 + vpternlogq zmm27, zmm13, zmm8, 150 + vmovdqu64 zmm28, zmm2 + vpternlogq zmm28, zmm22, zmm17, 150 + vpternlogq zmm28, zmm12, zmm7, 150 + vmovdqu64 zmm29, zmm1 + vpternlogq zmm29, zmm21, zmm16, 150 + vpternlogq zmm29, zmm11, zmm6, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm6, zmm6, zmm30 + ; Rho - rotate each lane in place + vprolq zmm4, zmm4, 1 + vprolq zmm3, zmm3, 62 + vprolq zmm2, zmm2, 28 + vprolq zmm1, zmm1, 27 + vprolq zmm20, zmm20, 36 + vprolq zmm24, zmm24, 44 + vprolq zmm23, zmm23, 6 + vprolq zmm22, zmm22, 55 + vprolq zmm21, zmm21, 20 + vprolq zmm15, zmm15, 3 + vprolq zmm19, zmm19, 10 + vprolq zmm18, zmm18, 43 + vprolq zmm17, zmm17, 25 + vprolq zmm16, zmm16, 39 + vprolq zmm10, zmm10, 41 + vprolq zmm14, zmm14, 45 + vprolq zmm13, zmm13, 15 + vprolq zmm12, zmm12, 21 + vprolq zmm11, zmm11, 8 + vprolq zmm5, zmm5, 18 + vprolq zmm9, zmm9, 2 + vprolq zmm8, zmm8, 61 + vprolq zmm7, zmm7, 56 + vprolq zmm6, zmm6, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm0, zmm24, zmm18, 210 + vpternlogq zmm24, zmm18, zmm12, 210 + vpternlogq zmm18, zmm12, zmm6, 210 + vpternlogq zmm12, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm2, zmm21, zmm15, 210 + vpternlogq zmm21, zmm15, zmm14, 210 + vpternlogq zmm15, zmm14, zmm8, 210 + vpternlogq zmm14, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm4, zmm23, zmm17, 210 + vpternlogq zmm23, zmm17, zmm11, 210 + vpternlogq zmm17, zmm11, zmm5, 210 + vpternlogq zmm11, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm1, zmm20, zmm19, 210 + vpternlogq zmm20, zmm19, zmm13, 210 + vpternlogq zmm19, zmm13, zmm7, 210 + vpternlogq zmm13, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm3, zmm22, zmm16, 210 + vpternlogq zmm22, zmm16, zmm10, 210 + vpternlogq zmm16, zmm10, zmm9, 210 + vpternlogq zmm10, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+768] + ; Round 13 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm2, zmm4, 150 + vpternlogq zmm25, zmm1, zmm3, 150 + vmovdqu64 zmm26, zmm24 + vpternlogq zmm26, zmm21, zmm23, 150 + vpternlogq zmm26, zmm20, zmm22, 150 + vmovdqu64 zmm27, zmm18 + vpternlogq zmm27, zmm15, zmm17, 150 + vpternlogq zmm27, zmm19, zmm16, 150 + vmovdqu64 zmm28, zmm12 + vpternlogq zmm28, zmm14, zmm11, 150 + vpternlogq zmm28, zmm13, zmm10, 150 + vmovdqu64 zmm29, zmm6 + vpternlogq zmm29, zmm8, zmm5, 150 + vpternlogq zmm29, zmm7, zmm9, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm9, zmm9, zmm30 + ; Rho - rotate each lane in place + vprolq zmm24, zmm24, 1 + vprolq zmm18, zmm18, 62 + vprolq zmm12, zmm12, 28 + vprolq zmm6, zmm6, 27 + vprolq zmm2, zmm2, 36 + vprolq zmm21, zmm21, 44 + vprolq zmm15, zmm15, 6 + vprolq zmm14, zmm14, 55 + vprolq zmm8, zmm8, 20 + vprolq zmm4, zmm4, 3 + vprolq zmm23, zmm23, 10 + vprolq zmm17, zmm17, 43 + vprolq zmm11, zmm11, 25 + vprolq zmm5, zmm5, 39 + vprolq zmm1, zmm1, 41 + vprolq zmm20, zmm20, 45 + vprolq zmm19, zmm19, 15 + vprolq zmm13, zmm13, 21 + vprolq zmm7, zmm7, 8 + vprolq zmm3, zmm3, 18 + vprolq zmm22, zmm22, 2 + vprolq zmm16, zmm16, 61 + vprolq zmm10, zmm10, 56 + vprolq zmm9, zmm9, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm0, zmm21, zmm17, 210 + vpternlogq zmm21, zmm17, zmm13, 210 + vpternlogq zmm17, zmm13, zmm9, 210 + vpternlogq zmm13, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm12, zmm8, zmm4, 210 + vpternlogq zmm8, zmm4, zmm20, 210 + vpternlogq zmm4, zmm20, zmm16, 210 + vpternlogq zmm20, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm24, zmm15, zmm11, 210 + vpternlogq zmm15, zmm11, zmm7, 210 + vpternlogq zmm11, zmm7, zmm3, 210 + vpternlogq zmm7, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm6, zmm2, zmm23, 210 + vpternlogq zmm2, zmm23, zmm19, 210 + vpternlogq zmm23, zmm19, zmm10, 210 + vpternlogq zmm19, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm18, zmm14, zmm5, 210 + vpternlogq zmm14, zmm5, zmm1, 210 + vpternlogq zmm5, zmm1, zmm22, 210 + vpternlogq zmm1, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+832] + ; Round 14 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm12, zmm24, 150 + vpternlogq zmm25, zmm6, zmm18, 150 + vmovdqu64 zmm26, zmm21 + vpternlogq zmm26, zmm8, zmm15, 150 + vpternlogq zmm26, zmm2, zmm14, 150 + vmovdqu64 zmm27, zmm17 + vpternlogq zmm27, zmm4, zmm11, 150 + vpternlogq zmm27, zmm23, zmm5, 150 + vmovdqu64 zmm28, zmm13 + vpternlogq zmm28, zmm20, zmm7, 150 + vpternlogq zmm28, zmm19, zmm1, 150 + vmovdqu64 zmm29, zmm9 + vpternlogq zmm29, zmm16, zmm3, 150 + vpternlogq zmm29, zmm10, zmm22, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm22, zmm22, zmm30 + ; Rho - rotate each lane in place + vprolq zmm21, zmm21, 1 + vprolq zmm17, zmm17, 62 + vprolq zmm13, zmm13, 28 + vprolq zmm9, zmm9, 27 + vprolq zmm12, zmm12, 36 + vprolq zmm8, zmm8, 44 + vprolq zmm4, zmm4, 6 + vprolq zmm20, zmm20, 55 + vprolq zmm16, zmm16, 20 + vprolq zmm24, zmm24, 3 + vprolq zmm15, zmm15, 10 + vprolq zmm11, zmm11, 43 + vprolq zmm7, zmm7, 25 + vprolq zmm3, zmm3, 39 + vprolq zmm6, zmm6, 41 + vprolq zmm2, zmm2, 45 + vprolq zmm23, zmm23, 15 + vprolq zmm19, zmm19, 21 + vprolq zmm10, zmm10, 8 + vprolq zmm18, zmm18, 18 + vprolq zmm14, zmm14, 2 + vprolq zmm5, zmm5, 61 + vprolq zmm1, zmm1, 56 + vprolq zmm22, zmm22, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm0, zmm8, zmm11, 210 + vpternlogq zmm8, zmm11, zmm19, 210 + vpternlogq zmm11, zmm19, zmm22, 210 + vpternlogq zmm19, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm13, zmm16, zmm24, 210 + vpternlogq zmm16, zmm24, zmm2, 210 + vpternlogq zmm24, zmm2, zmm5, 210 + vpternlogq zmm2, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm21, zmm4, zmm7, 210 + vpternlogq zmm4, zmm7, zmm10, 210 + vpternlogq zmm7, zmm10, zmm18, 210 + vpternlogq zmm10, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm9, zmm12, zmm15, 210 + vpternlogq zmm12, zmm15, zmm23, 210 + vpternlogq zmm15, zmm23, zmm1, 210 + vpternlogq zmm23, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm17, zmm20, zmm3, 210 + vpternlogq zmm20, zmm3, zmm6, 210 + vpternlogq zmm3, zmm6, zmm14, 210 + vpternlogq zmm6, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+896] + ; Round 15 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm13, zmm21, 150 + vpternlogq zmm25, zmm9, zmm17, 150 + vmovdqu64 zmm26, zmm8 + vpternlogq zmm26, zmm16, zmm4, 150 + vpternlogq zmm26, zmm12, zmm20, 150 + vmovdqu64 zmm27, zmm11 + vpternlogq zmm27, zmm24, zmm7, 150 + vpternlogq zmm27, zmm15, zmm3, 150 + vmovdqu64 zmm28, zmm19 + vpternlogq zmm28, zmm2, zmm10, 150 + vpternlogq zmm28, zmm23, zmm6, 150 + vmovdqu64 zmm29, zmm22 + vpternlogq zmm29, zmm5, zmm18, 150 + vpternlogq zmm29, zmm1, zmm14, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm14, zmm14, zmm30 + ; Rho - rotate each lane in place + vprolq zmm8, zmm8, 1 + vprolq zmm11, zmm11, 62 + vprolq zmm19, zmm19, 28 + vprolq zmm22, zmm22, 27 + vprolq zmm13, zmm13, 36 + vprolq zmm16, zmm16, 44 + vprolq zmm24, zmm24, 6 + vprolq zmm2, zmm2, 55 + vprolq zmm5, zmm5, 20 + vprolq zmm21, zmm21, 3 + vprolq zmm4, zmm4, 10 + vprolq zmm7, zmm7, 43 + vprolq zmm10, zmm10, 25 + vprolq zmm18, zmm18, 39 + vprolq zmm9, zmm9, 41 + vprolq zmm12, zmm12, 45 + vprolq zmm15, zmm15, 15 + vprolq zmm23, zmm23, 21 + vprolq zmm1, zmm1, 8 + vprolq zmm17, zmm17, 18 + vprolq zmm20, zmm20, 2 + vprolq zmm3, zmm3, 61 + vprolq zmm6, zmm6, 56 + vprolq zmm14, zmm14, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm0, zmm16, zmm7, 210 + vpternlogq zmm16, zmm7, zmm23, 210 + vpternlogq zmm7, zmm23, zmm14, 210 + vpternlogq zmm23, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm19, zmm5, zmm21, 210 + vpternlogq zmm5, zmm21, zmm12, 210 + vpternlogq zmm21, zmm12, zmm3, 210 + vpternlogq zmm12, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm8, zmm24, zmm10, 210 + vpternlogq zmm24, zmm10, zmm1, 210 + vpternlogq zmm10, zmm1, zmm17, 210 + vpternlogq zmm1, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm22, zmm13, zmm4, 210 + vpternlogq zmm13, zmm4, zmm15, 210 + vpternlogq zmm4, zmm15, zmm6, 210 + vpternlogq zmm15, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm11, zmm2, zmm18, 210 + vpternlogq zmm2, zmm18, zmm9, 210 + vpternlogq zmm18, zmm9, zmm20, 210 + vpternlogq zmm9, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+960] + ; Round 16 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm19, zmm8, 150 + vpternlogq zmm25, zmm22, zmm11, 150 + vmovdqu64 zmm26, zmm16 + vpternlogq zmm26, zmm5, zmm24, 150 + vpternlogq zmm26, zmm13, zmm2, 150 + vmovdqu64 zmm27, zmm7 + vpternlogq zmm27, zmm21, zmm10, 150 + vpternlogq zmm27, zmm4, zmm18, 150 + vmovdqu64 zmm28, zmm23 + vpternlogq zmm28, zmm12, zmm1, 150 + vpternlogq zmm28, zmm15, zmm9, 150 + vmovdqu64 zmm29, zmm14 + vpternlogq zmm29, zmm3, zmm17, 150 + vpternlogq zmm29, zmm6, zmm20, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm20, zmm20, zmm30 + ; Rho - rotate each lane in place + vprolq zmm16, zmm16, 1 + vprolq zmm7, zmm7, 62 + vprolq zmm23, zmm23, 28 + vprolq zmm14, zmm14, 27 + vprolq zmm19, zmm19, 36 + vprolq zmm5, zmm5, 44 + vprolq zmm21, zmm21, 6 + vprolq zmm12, zmm12, 55 + vprolq zmm3, zmm3, 20 + vprolq zmm8, zmm8, 3 + vprolq zmm24, zmm24, 10 + vprolq zmm10, zmm10, 43 + vprolq zmm1, zmm1, 25 + vprolq zmm17, zmm17, 39 + vprolq zmm22, zmm22, 41 + vprolq zmm13, zmm13, 45 + vprolq zmm4, zmm4, 15 + vprolq zmm15, zmm15, 21 + vprolq zmm6, zmm6, 8 + vprolq zmm11, zmm11, 18 + vprolq zmm2, zmm2, 2 + vprolq zmm18, zmm18, 61 + vprolq zmm9, zmm9, 56 + vprolq zmm20, zmm20, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm0, zmm5, zmm10, 210 + vpternlogq zmm5, zmm10, zmm15, 210 + vpternlogq zmm10, zmm15, zmm20, 210 + vpternlogq zmm15, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm23, zmm3, zmm8, 210 + vpternlogq zmm3, zmm8, zmm13, 210 + vpternlogq zmm8, zmm13, zmm18, 210 + vpternlogq zmm13, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm16, zmm21, zmm1, 210 + vpternlogq zmm21, zmm1, zmm6, 210 + vpternlogq zmm1, zmm6, zmm11, 210 + vpternlogq zmm6, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm14, zmm19, zmm24, 210 + vpternlogq zmm19, zmm24, zmm4, 210 + vpternlogq zmm24, zmm4, zmm9, 210 + vpternlogq zmm4, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm7, zmm12, zmm17, 210 + vpternlogq zmm12, zmm17, zmm22, 210 + vpternlogq zmm17, zmm22, zmm2, 210 + vpternlogq zmm22, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+1024] + ; Round 17 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm23, zmm16, 150 + vpternlogq zmm25, zmm14, zmm7, 150 + vmovdqu64 zmm26, zmm5 + vpternlogq zmm26, zmm3, zmm21, 150 + vpternlogq zmm26, zmm19, zmm12, 150 + vmovdqu64 zmm27, zmm10 + vpternlogq zmm27, zmm8, zmm1, 150 + vpternlogq zmm27, zmm24, zmm17, 150 + vmovdqu64 zmm28, zmm15 + vpternlogq zmm28, zmm13, zmm6, 150 + vpternlogq zmm28, zmm4, zmm22, 150 + vmovdqu64 zmm29, zmm20 + vpternlogq zmm29, zmm18, zmm11, 150 + vpternlogq zmm29, zmm9, zmm2, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm2, zmm2, zmm30 + ; Rho - rotate each lane in place + vprolq zmm5, zmm5, 1 + vprolq zmm10, zmm10, 62 + vprolq zmm15, zmm15, 28 + vprolq zmm20, zmm20, 27 + vprolq zmm23, zmm23, 36 + vprolq zmm3, zmm3, 44 + vprolq zmm8, zmm8, 6 + vprolq zmm13, zmm13, 55 + vprolq zmm18, zmm18, 20 + vprolq zmm16, zmm16, 3 + vprolq zmm21, zmm21, 10 + vprolq zmm1, zmm1, 43 + vprolq zmm6, zmm6, 25 + vprolq zmm11, zmm11, 39 + vprolq zmm14, zmm14, 41 + vprolq zmm19, zmm19, 45 + vprolq zmm24, zmm24, 15 + vprolq zmm4, zmm4, 21 + vprolq zmm9, zmm9, 8 + vprolq zmm7, zmm7, 18 + vprolq zmm12, zmm12, 2 + vprolq zmm17, zmm17, 61 + vprolq zmm22, zmm22, 56 + vprolq zmm2, zmm2, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm0, zmm3, zmm1, 210 + vpternlogq zmm3, zmm1, zmm4, 210 + vpternlogq zmm1, zmm4, zmm2, 210 + vpternlogq zmm4, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm15, zmm18, zmm16, 210 + vpternlogq zmm18, zmm16, zmm19, 210 + vpternlogq zmm16, zmm19, zmm17, 210 + vpternlogq zmm19, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm5, zmm8, zmm6, 210 + vpternlogq zmm8, zmm6, zmm9, 210 + vpternlogq zmm6, zmm9, zmm7, 210 + vpternlogq zmm9, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm20, zmm23, zmm21, 210 + vpternlogq zmm23, zmm21, zmm24, 210 + vpternlogq zmm21, zmm24, zmm22, 210 + vpternlogq zmm24, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm10, zmm13, zmm11, 210 + vpternlogq zmm13, zmm11, zmm14, 210 + vpternlogq zmm11, zmm14, zmm12, 210 + vpternlogq zmm14, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+1088] + ; Round 18 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm15, zmm5, 150 + vpternlogq zmm25, zmm20, zmm10, 150 + vmovdqu64 zmm26, zmm3 + vpternlogq zmm26, zmm18, zmm8, 150 + vpternlogq zmm26, zmm23, zmm13, 150 + vmovdqu64 zmm27, zmm1 + vpternlogq zmm27, zmm16, zmm6, 150 + vpternlogq zmm27, zmm21, zmm11, 150 + vmovdqu64 zmm28, zmm4 + vpternlogq zmm28, zmm19, zmm9, 150 + vpternlogq zmm28, zmm24, zmm14, 150 + vmovdqu64 zmm29, zmm2 + vpternlogq zmm29, zmm17, zmm7, 150 + vpternlogq zmm29, zmm22, zmm12, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm12, zmm12, zmm30 + ; Rho - rotate each lane in place + vprolq zmm3, zmm3, 1 + vprolq zmm1, zmm1, 62 + vprolq zmm4, zmm4, 28 + vprolq zmm2, zmm2, 27 + vprolq zmm15, zmm15, 36 + vprolq zmm18, zmm18, 44 + vprolq zmm16, zmm16, 6 + vprolq zmm19, zmm19, 55 + vprolq zmm17, zmm17, 20 + vprolq zmm5, zmm5, 3 + vprolq zmm8, zmm8, 10 + vprolq zmm6, zmm6, 43 + vprolq zmm9, zmm9, 25 + vprolq zmm7, zmm7, 39 + vprolq zmm20, zmm20, 41 + vprolq zmm23, zmm23, 45 + vprolq zmm21, zmm21, 15 + vprolq zmm24, zmm24, 21 + vprolq zmm22, zmm22, 8 + vprolq zmm10, zmm10, 18 + vprolq zmm13, zmm13, 2 + vprolq zmm11, zmm11, 61 + vprolq zmm14, zmm14, 56 + vprolq zmm12, zmm12, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm0, zmm18, zmm6, 210 + vpternlogq zmm18, zmm6, zmm24, 210 + vpternlogq zmm6, zmm24, zmm12, 210 + vpternlogq zmm24, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm4, zmm17, zmm5, 210 + vpternlogq zmm17, zmm5, zmm23, 210 + vpternlogq zmm5, zmm23, zmm11, 210 + vpternlogq zmm23, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm3, zmm16, zmm9, 210 + vpternlogq zmm16, zmm9, zmm22, 210 + vpternlogq zmm9, zmm22, zmm10, 210 + vpternlogq zmm22, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm2, zmm15, zmm8, 210 + vpternlogq zmm15, zmm8, zmm21, 210 + vpternlogq zmm8, zmm21, zmm14, 210 + vpternlogq zmm21, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm1, zmm19, zmm7, 210 + vpternlogq zmm19, zmm7, zmm20, 210 + vpternlogq zmm7, zmm20, zmm13, 210 + vpternlogq zmm20, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+1152] + ; Round 19 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm4, zmm3, 150 + vpternlogq zmm25, zmm2, zmm1, 150 + vmovdqu64 zmm26, zmm18 + vpternlogq zmm26, zmm17, zmm16, 150 + vpternlogq zmm26, zmm15, zmm19, 150 + vmovdqu64 zmm27, zmm6 + vpternlogq zmm27, zmm5, zmm9, 150 + vpternlogq zmm27, zmm8, zmm7, 150 + vmovdqu64 zmm28, zmm24 + vpternlogq zmm28, zmm23, zmm22, 150 + vpternlogq zmm28, zmm21, zmm20, 150 + vmovdqu64 zmm29, zmm12 + vpternlogq zmm29, zmm11, zmm10, 150 + vpternlogq zmm29, zmm14, zmm13, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm13, zmm13, zmm30 + ; Rho - rotate each lane in place + vprolq zmm18, zmm18, 1 + vprolq zmm6, zmm6, 62 + vprolq zmm24, zmm24, 28 + vprolq zmm12, zmm12, 27 + vprolq zmm4, zmm4, 36 + vprolq zmm17, zmm17, 44 + vprolq zmm5, zmm5, 6 + vprolq zmm23, zmm23, 55 + vprolq zmm11, zmm11, 20 + vprolq zmm3, zmm3, 3 + vprolq zmm16, zmm16, 10 + vprolq zmm9, zmm9, 43 + vprolq zmm22, zmm22, 25 + vprolq zmm10, zmm10, 39 + vprolq zmm2, zmm2, 41 + vprolq zmm15, zmm15, 45 + vprolq zmm8, zmm8, 15 + vprolq zmm21, zmm21, 21 + vprolq zmm14, zmm14, 8 + vprolq zmm1, zmm1, 18 + vprolq zmm19, zmm19, 2 + vprolq zmm7, zmm7, 61 + vprolq zmm20, zmm20, 56 + vprolq zmm13, zmm13, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm0, zmm17, zmm9, 210 + vpternlogq zmm17, zmm9, zmm21, 210 + vpternlogq zmm9, zmm21, zmm13, 210 + vpternlogq zmm21, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm24, zmm11, zmm3, 210 + vpternlogq zmm11, zmm3, zmm15, 210 + vpternlogq zmm3, zmm15, zmm7, 210 + vpternlogq zmm15, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm18, zmm5, zmm22, 210 + vpternlogq zmm5, zmm22, zmm14, 210 + vpternlogq zmm22, zmm14, zmm1, 210 + vpternlogq zmm14, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm12, zmm4, zmm16, 210 + vpternlogq zmm4, zmm16, zmm8, 210 + vpternlogq zmm16, zmm8, zmm20, 210 + vpternlogq zmm8, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm6, zmm23, zmm10, 210 + vpternlogq zmm23, zmm10, zmm2, 210 + vpternlogq zmm10, zmm2, zmm19, 210 + vpternlogq zmm2, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+1216] + ; Round 20 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm24, zmm18, 150 + vpternlogq zmm25, zmm12, zmm6, 150 + vmovdqu64 zmm26, zmm17 + vpternlogq zmm26, zmm11, zmm5, 150 + vpternlogq zmm26, zmm4, zmm23, 150 + vmovdqu64 zmm27, zmm9 + vpternlogq zmm27, zmm3, zmm22, 150 + vpternlogq zmm27, zmm16, zmm10, 150 + vmovdqu64 zmm28, zmm21 + vpternlogq zmm28, zmm15, zmm14, 150 + vpternlogq zmm28, zmm8, zmm2, 150 + vmovdqu64 zmm29, zmm13 + vpternlogq zmm29, zmm7, zmm1, 150 + vpternlogq zmm29, zmm20, zmm19, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm19, zmm19, zmm30 + ; Rho - rotate each lane in place + vprolq zmm17, zmm17, 1 + vprolq zmm9, zmm9, 62 + vprolq zmm21, zmm21, 28 + vprolq zmm13, zmm13, 27 + vprolq zmm24, zmm24, 36 + vprolq zmm11, zmm11, 44 + vprolq zmm3, zmm3, 6 + vprolq zmm15, zmm15, 55 + vprolq zmm7, zmm7, 20 + vprolq zmm18, zmm18, 3 + vprolq zmm5, zmm5, 10 + vprolq zmm22, zmm22, 43 + vprolq zmm14, zmm14, 25 + vprolq zmm1, zmm1, 39 + vprolq zmm12, zmm12, 41 + vprolq zmm4, zmm4, 45 + vprolq zmm16, zmm16, 15 + vprolq zmm8, zmm8, 21 + vprolq zmm20, zmm20, 8 + vprolq zmm6, zmm6, 18 + vprolq zmm23, zmm23, 2 + vprolq zmm10, zmm10, 61 + vprolq zmm2, zmm2, 56 + vprolq zmm19, zmm19, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm0, zmm11, zmm22, 210 + vpternlogq zmm11, zmm22, zmm8, 210 + vpternlogq zmm22, zmm8, zmm19, 210 + vpternlogq zmm8, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm21, zmm7, zmm18, 210 + vpternlogq zmm7, zmm18, zmm4, 210 + vpternlogq zmm18, zmm4, zmm10, 210 + vpternlogq zmm4, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm17, zmm3, zmm14, 210 + vpternlogq zmm3, zmm14, zmm20, 210 + vpternlogq zmm14, zmm20, zmm6, 210 + vpternlogq zmm20, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm13, zmm24, zmm5, 210 + vpternlogq zmm24, zmm5, zmm16, 210 + vpternlogq zmm5, zmm16, zmm2, 210 + vpternlogq zmm16, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm9, zmm15, zmm1, 210 + vpternlogq zmm15, zmm1, zmm12, 210 + vpternlogq zmm1, zmm12, zmm23, 210 + vpternlogq zmm12, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+1280] + ; Round 21 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm21, zmm17, 150 + vpternlogq zmm25, zmm13, zmm9, 150 + vmovdqu64 zmm26, zmm11 + vpternlogq zmm26, zmm7, zmm3, 150 + vpternlogq zmm26, zmm24, zmm15, 150 + vmovdqu64 zmm27, zmm22 + vpternlogq zmm27, zmm18, zmm14, 150 + vpternlogq zmm27, zmm5, zmm1, 150 + vmovdqu64 zmm28, zmm8 + vpternlogq zmm28, zmm4, zmm20, 150 + vpternlogq zmm28, zmm16, zmm12, 150 + vmovdqu64 zmm29, zmm19 + vpternlogq zmm29, zmm10, zmm6, 150 + vpternlogq zmm29, zmm2, zmm23, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm23, zmm23, zmm30 + ; Rho - rotate each lane in place + vprolq zmm11, zmm11, 1 + vprolq zmm22, zmm22, 62 + vprolq zmm8, zmm8, 28 + vprolq zmm19, zmm19, 27 + vprolq zmm21, zmm21, 36 + vprolq zmm7, zmm7, 44 + vprolq zmm18, zmm18, 6 + vprolq zmm4, zmm4, 55 + vprolq zmm10, zmm10, 20 + vprolq zmm17, zmm17, 3 + vprolq zmm3, zmm3, 10 + vprolq zmm14, zmm14, 43 + vprolq zmm20, zmm20, 25 + vprolq zmm6, zmm6, 39 + vprolq zmm13, zmm13, 41 + vprolq zmm24, zmm24, 45 + vprolq zmm5, zmm5, 15 + vprolq zmm16, zmm16, 21 + vprolq zmm2, zmm2, 8 + vprolq zmm9, zmm9, 18 + vprolq zmm15, zmm15, 2 + vprolq zmm1, zmm1, 61 + vprolq zmm12, zmm12, 56 + vprolq zmm23, zmm23, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm0, zmm7, zmm14, 210 + vpternlogq zmm7, zmm14, zmm16, 210 + vpternlogq zmm14, zmm16, zmm23, 210 + vpternlogq zmm16, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm8, zmm10, zmm17, 210 + vpternlogq zmm10, zmm17, zmm24, 210 + vpternlogq zmm17, zmm24, zmm1, 210 + vpternlogq zmm24, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm11, zmm18, zmm20, 210 + vpternlogq zmm18, zmm20, zmm2, 210 + vpternlogq zmm20, zmm2, zmm9, 210 + vpternlogq zmm2, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm19, zmm21, zmm3, 210 + vpternlogq zmm21, zmm3, zmm5, 210 + vpternlogq zmm3, zmm5, zmm12, 210 + vpternlogq zmm5, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm22, zmm4, zmm6, 210 + vpternlogq zmm4, zmm6, zmm13, 210 + vpternlogq zmm6, zmm13, zmm15, 210 + vpternlogq zmm13, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+1344] + ; Round 22 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm8, zmm11, 150 + vpternlogq zmm25, zmm19, zmm22, 150 + vmovdqu64 zmm26, zmm7 + vpternlogq zmm26, zmm10, zmm18, 150 + vpternlogq zmm26, zmm21, zmm4, 150 + vmovdqu64 zmm27, zmm14 + vpternlogq zmm27, zmm17, zmm20, 150 + vpternlogq zmm27, zmm3, zmm6, 150 + vmovdqu64 zmm28, zmm16 + vpternlogq zmm28, zmm24, zmm2, 150 + vpternlogq zmm28, zmm5, zmm13, 150 + vmovdqu64 zmm29, zmm23 + vpternlogq zmm29, zmm1, zmm9, 150 + vpternlogq zmm29, zmm12, zmm15, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm15, zmm15, zmm30 + ; Rho - rotate each lane in place + vprolq zmm7, zmm7, 1 + vprolq zmm14, zmm14, 62 + vprolq zmm16, zmm16, 28 + vprolq zmm23, zmm23, 27 + vprolq zmm8, zmm8, 36 + vprolq zmm10, zmm10, 44 + vprolq zmm17, zmm17, 6 + vprolq zmm24, zmm24, 55 + vprolq zmm1, zmm1, 20 + vprolq zmm11, zmm11, 3 + vprolq zmm18, zmm18, 10 + vprolq zmm20, zmm20, 43 + vprolq zmm2, zmm2, 25 + vprolq zmm9, zmm9, 39 + vprolq zmm19, zmm19, 41 + vprolq zmm21, zmm21, 45 + vprolq zmm3, zmm3, 15 + vprolq zmm5, zmm5, 21 + vprolq zmm12, zmm12, 8 + vprolq zmm22, zmm22, 18 + vprolq zmm4, zmm4, 2 + vprolq zmm6, zmm6, 61 + vprolq zmm13, zmm13, 56 + vprolq zmm15, zmm15, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm0, zmm10, zmm20, 210 + vpternlogq zmm10, zmm20, zmm5, 210 + vpternlogq zmm20, zmm5, zmm15, 210 + vpternlogq zmm5, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm16, zmm1, zmm11, 210 + vpternlogq zmm1, zmm11, zmm21, 210 + vpternlogq zmm11, zmm21, zmm6, 210 + vpternlogq zmm21, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm7, zmm17, zmm2, 210 + vpternlogq zmm17, zmm2, zmm12, 210 + vpternlogq zmm2, zmm12, zmm22, 210 + vpternlogq zmm12, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm23, zmm8, zmm18, 210 + vpternlogq zmm8, zmm18, zmm3, 210 + vpternlogq zmm18, zmm3, zmm13, 210 + vpternlogq zmm3, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm14, zmm24, zmm9, 210 + vpternlogq zmm24, zmm9, zmm19, 210 + vpternlogq zmm9, zmm19, zmm4, 210 + vpternlogq zmm19, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+1408] + ; Round 23 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm16, zmm7, 150 + vpternlogq zmm25, zmm23, zmm14, 150 + vmovdqu64 zmm26, zmm10 + vpternlogq zmm26, zmm1, zmm17, 150 + vpternlogq zmm26, zmm8, zmm24, 150 + vmovdqu64 zmm27, zmm20 + vpternlogq zmm27, zmm11, zmm2, 150 + vpternlogq zmm27, zmm18, zmm9, 150 + vmovdqu64 zmm28, zmm5 + vpternlogq zmm28, zmm21, zmm12, 150 + vpternlogq zmm28, zmm3, zmm19, 150 + vmovdqu64 zmm29, zmm15 + vpternlogq zmm29, zmm6, zmm22, 150 + vpternlogq zmm29, zmm13, zmm4, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm4, zmm4, zmm30 + ; Rho - rotate each lane in place + vprolq zmm10, zmm10, 1 + vprolq zmm20, zmm20, 62 + vprolq zmm5, zmm5, 28 + vprolq zmm15, zmm15, 27 + vprolq zmm16, zmm16, 36 + vprolq zmm1, zmm1, 44 + vprolq zmm11, zmm11, 6 + vprolq zmm21, zmm21, 55 + vprolq zmm6, zmm6, 20 + vprolq zmm7, zmm7, 3 + vprolq zmm17, zmm17, 10 + vprolq zmm2, zmm2, 43 + vprolq zmm12, zmm12, 25 + vprolq zmm22, zmm22, 39 + vprolq zmm23, zmm23, 41 + vprolq zmm8, zmm8, 45 + vprolq zmm18, zmm18, 15 + vprolq zmm3, zmm3, 21 + vprolq zmm13, zmm13, 8 + vprolq zmm14, zmm14, 18 + vprolq zmm24, zmm24, 2 + vprolq zmm9, zmm9, 61 + vprolq zmm19, zmm19, 56 + vprolq zmm4, zmm4, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm0, zmm1, zmm2, 210 + vpternlogq zmm1, zmm2, zmm3, 210 + vpternlogq zmm2, zmm3, zmm4, 210 + vpternlogq zmm3, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm5, zmm6, zmm7, 210 + vpternlogq zmm6, zmm7, zmm8, 210 + vpternlogq zmm7, zmm8, zmm9, 210 + vpternlogq zmm8, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm10, zmm11, zmm12, 210 + vpternlogq zmm11, zmm12, zmm13, 210 + vpternlogq zmm12, zmm13, zmm14, 210 + vpternlogq zmm13, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm15, zmm16, zmm17, 210 + vpternlogq zmm16, zmm17, zmm18, 210 + vpternlogq zmm17, zmm18, zmm19, 210 + vpternlogq zmm18, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm20, zmm21, zmm22, 210 + vpternlogq zmm21, zmm22, zmm23, 210 + vpternlogq zmm22, zmm23, zmm24, 210 + vpternlogq zmm23, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rdx+1472] + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vmovdqu64 [rcx+512], zmm8 + vmovdqu64 [rcx+576], zmm9 + vmovdqu64 [rcx+640], zmm10 + vmovdqu64 [rcx+704], zmm11 + vmovdqu64 [rcx+768], zmm12 + vmovdqu64 [rcx+832], zmm13 + vmovdqu64 [rcx+896], zmm14 + vmovdqu64 [rcx+960], zmm15 + vmovdqu64 [rcx+1024], zmm16 + vmovdqu64 [rcx+1088], zmm17 + vmovdqu64 [rcx+1152], zmm18 + vmovdqu64 [rcx+1216], zmm19 + vmovdqu64 [rcx+1280], zmm20 + vmovdqu64 [rcx+1344], zmm21 + vmovdqu64 [rcx+1408], zmm22 + vmovdqu64 [rcx+1472], zmm23 + vmovdqu64 [rcx+1536], zmm24 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +sha3_blocksx8_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_sha3_128_blocksx8_seed_avx512_end_mark QWORD 8000000000000000h, 8000000000000000h + QWORD 8000000000000000h, 8000000000000000h + QWORD 8000000000000000h, 8000000000000000h + QWORD 8000000000000000h, 8000000000000000h +ptr_L_sha3_128_blocksx8_seed_avx512_end_mark QWORD L_sha3_128_blocksx8_seed_avx512_end_mark +_DATA ENDS +_TEXT SEGMENT READONLY PARA +sha3_128_blocksx8_seed_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + mov rax, QWORD PTR [ptr_L_sha3_x8_avx512_r] + vpbroadcastq zmm0, QWORD PTR [rdx] + vpbroadcastq zmm1, QWORD PTR [rdx+8] + vpbroadcastq zmm2, QWORD PTR [rdx+16] + vpbroadcastq zmm3, QWORD PTR [rdx+24] + vmovdqu64 zmm4, [rcx+256] + vpxorq zmm5, zmm5, zmm5 + vmovdqu64 zmm6, zmm5 + vmovdqu64 zmm7, zmm5 + vmovdqu64 zmm8, zmm5 + vmovdqu64 zmm9, zmm5 + vmovdqu64 zmm10, zmm5 + vmovdqu64 zmm11, zmm5 + vmovdqu64 zmm12, zmm5 + vmovdqu64 zmm13, zmm5 + vmovdqu64 zmm14, zmm5 + vmovdqu64 zmm15, zmm5 + vmovdqu64 zmm16, zmm5 + vmovdqu64 zmm17, zmm5 + vmovdqu64 zmm18, zmm5 + vmovdqu64 zmm19, zmm5 + vmovdqu64 zmm20, ptr_L_sha3_128_blocksx8_seed_avx512_end_mark + vmovdqu64 zmm21, zmm5 + vmovdqu64 zmm22, zmm5 + vmovdqu64 zmm23, zmm5 + vmovdqu64 zmm24, zmm5 + ; Round 0 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm5, zmm10, 150 + vpternlogq zmm25, zmm15, zmm20, 150 + vmovdqu64 zmm26, zmm1 + vpternlogq zmm26, zmm6, zmm11, 150 + vpternlogq zmm26, zmm16, zmm21, 150 + vmovdqu64 zmm27, zmm2 + vpternlogq zmm27, zmm7, zmm12, 150 + vpternlogq zmm27, zmm17, zmm22, 150 + vmovdqu64 zmm28, zmm3 + vpternlogq zmm28, zmm8, zmm13, 150 + vpternlogq zmm28, zmm18, zmm23, 150 + vmovdqu64 zmm29, zmm4 + vpternlogq zmm29, zmm9, zmm14, 150 + vpternlogq zmm29, zmm19, zmm24, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm24, zmm24, zmm30 + ; Rho - rotate each lane in place + vprolq zmm1, zmm1, 1 + vprolq zmm2, zmm2, 62 + vprolq zmm3, zmm3, 28 + vprolq zmm4, zmm4, 27 + vprolq zmm5, zmm5, 36 + vprolq zmm6, zmm6, 44 + vprolq zmm7, zmm7, 6 + vprolq zmm8, zmm8, 55 + vprolq zmm9, zmm9, 20 + vprolq zmm10, zmm10, 3 + vprolq zmm11, zmm11, 10 + vprolq zmm12, zmm12, 43 + vprolq zmm13, zmm13, 25 + vprolq zmm14, zmm14, 39 + vprolq zmm15, zmm15, 41 + vprolq zmm16, zmm16, 45 + vprolq zmm17, zmm17, 15 + vprolq zmm18, zmm18, 21 + vprolq zmm19, zmm19, 8 + vprolq zmm20, zmm20, 18 + vprolq zmm21, zmm21, 2 + vprolq zmm22, zmm22, 61 + vprolq zmm23, zmm23, 56 + vprolq zmm24, zmm24, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm0, zmm6, zmm12, 210 + vpternlogq zmm6, zmm12, zmm18, 210 + vpternlogq zmm12, zmm18, zmm24, 210 + vpternlogq zmm18, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm3, zmm9, zmm10, 210 + vpternlogq zmm9, zmm10, zmm16, 210 + vpternlogq zmm10, zmm16, zmm22, 210 + vpternlogq zmm16, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm1, zmm7, zmm13, 210 + vpternlogq zmm7, zmm13, zmm19, 210 + vpternlogq zmm13, zmm19, zmm20, 210 + vpternlogq zmm19, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm4, zmm5, zmm11, 210 + vpternlogq zmm5, zmm11, zmm17, 210 + vpternlogq zmm11, zmm17, zmm23, 210 + vpternlogq zmm17, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm2, zmm8, zmm14, 210 + vpternlogq zmm8, zmm14, zmm15, 210 + vpternlogq zmm14, zmm15, zmm21, 210 + vpternlogq zmm15, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax] + ; Round 1 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm3, zmm1, 150 + vpternlogq zmm25, zmm4, zmm2, 150 + vmovdqu64 zmm26, zmm6 + vpternlogq zmm26, zmm9, zmm7, 150 + vpternlogq zmm26, zmm5, zmm8, 150 + vmovdqu64 zmm27, zmm12 + vpternlogq zmm27, zmm10, zmm13, 150 + vpternlogq zmm27, zmm11, zmm14, 150 + vmovdqu64 zmm28, zmm18 + vpternlogq zmm28, zmm16, zmm19, 150 + vpternlogq zmm28, zmm17, zmm15, 150 + vmovdqu64 zmm29, zmm24 + vpternlogq zmm29, zmm22, zmm20, 150 + vpternlogq zmm29, zmm23, zmm21, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm21, zmm21, zmm30 + ; Rho - rotate each lane in place + vprolq zmm6, zmm6, 1 + vprolq zmm12, zmm12, 62 + vprolq zmm18, zmm18, 28 + vprolq zmm24, zmm24, 27 + vprolq zmm3, zmm3, 36 + vprolq zmm9, zmm9, 44 + vprolq zmm10, zmm10, 6 + vprolq zmm16, zmm16, 55 + vprolq zmm22, zmm22, 20 + vprolq zmm1, zmm1, 3 + vprolq zmm7, zmm7, 10 + vprolq zmm13, zmm13, 43 + vprolq zmm19, zmm19, 25 + vprolq zmm20, zmm20, 39 + vprolq zmm4, zmm4, 41 + vprolq zmm5, zmm5, 45 + vprolq zmm11, zmm11, 15 + vprolq zmm17, zmm17, 21 + vprolq zmm23, zmm23, 8 + vprolq zmm2, zmm2, 18 + vprolq zmm8, zmm8, 2 + vprolq zmm14, zmm14, 61 + vprolq zmm15, zmm15, 56 + vprolq zmm21, zmm21, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm0, zmm9, zmm13, 210 + vpternlogq zmm9, zmm13, zmm17, 210 + vpternlogq zmm13, zmm17, zmm21, 210 + vpternlogq zmm17, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm18, zmm22, zmm1, 210 + vpternlogq zmm22, zmm1, zmm5, 210 + vpternlogq zmm1, zmm5, zmm14, 210 + vpternlogq zmm5, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm6, zmm10, zmm19, 210 + vpternlogq zmm10, zmm19, zmm23, 210 + vpternlogq zmm19, zmm23, zmm2, 210 + vpternlogq zmm23, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm24, zmm3, zmm7, 210 + vpternlogq zmm3, zmm7, zmm11, 210 + vpternlogq zmm7, zmm11, zmm15, 210 + vpternlogq zmm11, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm12, zmm16, zmm20, 210 + vpternlogq zmm16, zmm20, zmm4, 210 + vpternlogq zmm20, zmm4, zmm8, 210 + vpternlogq zmm4, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+64] + ; Round 2 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm18, zmm6, 150 + vpternlogq zmm25, zmm24, zmm12, 150 + vmovdqu64 zmm26, zmm9 + vpternlogq zmm26, zmm22, zmm10, 150 + vpternlogq zmm26, zmm3, zmm16, 150 + vmovdqu64 zmm27, zmm13 + vpternlogq zmm27, zmm1, zmm19, 150 + vpternlogq zmm27, zmm7, zmm20, 150 + vmovdqu64 zmm28, zmm17 + vpternlogq zmm28, zmm5, zmm23, 150 + vpternlogq zmm28, zmm11, zmm4, 150 + vmovdqu64 zmm29, zmm21 + vpternlogq zmm29, zmm14, zmm2, 150 + vpternlogq zmm29, zmm15, zmm8, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm8, zmm8, zmm30 + ; Rho - rotate each lane in place + vprolq zmm9, zmm9, 1 + vprolq zmm13, zmm13, 62 + vprolq zmm17, zmm17, 28 + vprolq zmm21, zmm21, 27 + vprolq zmm18, zmm18, 36 + vprolq zmm22, zmm22, 44 + vprolq zmm1, zmm1, 6 + vprolq zmm5, zmm5, 55 + vprolq zmm14, zmm14, 20 + vprolq zmm6, zmm6, 3 + vprolq zmm10, zmm10, 10 + vprolq zmm19, zmm19, 43 + vprolq zmm23, zmm23, 25 + vprolq zmm2, zmm2, 39 + vprolq zmm24, zmm24, 41 + vprolq zmm3, zmm3, 45 + vprolq zmm7, zmm7, 15 + vprolq zmm11, zmm11, 21 + vprolq zmm15, zmm15, 8 + vprolq zmm12, zmm12, 18 + vprolq zmm16, zmm16, 2 + vprolq zmm20, zmm20, 61 + vprolq zmm4, zmm4, 56 + vprolq zmm8, zmm8, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm0, zmm22, zmm19, 210 + vpternlogq zmm22, zmm19, zmm11, 210 + vpternlogq zmm19, zmm11, zmm8, 210 + vpternlogq zmm11, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm17, zmm14, zmm6, 210 + vpternlogq zmm14, zmm6, zmm3, 210 + vpternlogq zmm6, zmm3, zmm20, 210 + vpternlogq zmm3, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm9, zmm1, zmm23, 210 + vpternlogq zmm1, zmm23, zmm15, 210 + vpternlogq zmm23, zmm15, zmm12, 210 + vpternlogq zmm15, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm21, zmm18, zmm10, 210 + vpternlogq zmm18, zmm10, zmm7, 210 + vpternlogq zmm10, zmm7, zmm4, 210 + vpternlogq zmm7, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm13, zmm5, zmm2, 210 + vpternlogq zmm5, zmm2, zmm24, 210 + vpternlogq zmm2, zmm24, zmm16, 210 + vpternlogq zmm24, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+128] + ; Round 3 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm17, zmm9, 150 + vpternlogq zmm25, zmm21, zmm13, 150 + vmovdqu64 zmm26, zmm22 + vpternlogq zmm26, zmm14, zmm1, 150 + vpternlogq zmm26, zmm18, zmm5, 150 + vmovdqu64 zmm27, zmm19 + vpternlogq zmm27, zmm6, zmm23, 150 + vpternlogq zmm27, zmm10, zmm2, 150 + vmovdqu64 zmm28, zmm11 + vpternlogq zmm28, zmm3, zmm15, 150 + vpternlogq zmm28, zmm7, zmm24, 150 + vmovdqu64 zmm29, zmm8 + vpternlogq zmm29, zmm20, zmm12, 150 + vpternlogq zmm29, zmm4, zmm16, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm16, zmm16, zmm30 + ; Rho - rotate each lane in place + vprolq zmm22, zmm22, 1 + vprolq zmm19, zmm19, 62 + vprolq zmm11, zmm11, 28 + vprolq zmm8, zmm8, 27 + vprolq zmm17, zmm17, 36 + vprolq zmm14, zmm14, 44 + vprolq zmm6, zmm6, 6 + vprolq zmm3, zmm3, 55 + vprolq zmm20, zmm20, 20 + vprolq zmm9, zmm9, 3 + vprolq zmm1, zmm1, 10 + vprolq zmm23, zmm23, 43 + vprolq zmm15, zmm15, 25 + vprolq zmm12, zmm12, 39 + vprolq zmm21, zmm21, 41 + vprolq zmm18, zmm18, 45 + vprolq zmm10, zmm10, 15 + vprolq zmm7, zmm7, 21 + vprolq zmm4, zmm4, 8 + vprolq zmm13, zmm13, 18 + vprolq zmm5, zmm5, 2 + vprolq zmm2, zmm2, 61 + vprolq zmm24, zmm24, 56 + vprolq zmm16, zmm16, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm0, zmm14, zmm23, 210 + vpternlogq zmm14, zmm23, zmm7, 210 + vpternlogq zmm23, zmm7, zmm16, 210 + vpternlogq zmm7, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm11, zmm20, zmm9, 210 + vpternlogq zmm20, zmm9, zmm18, 210 + vpternlogq zmm9, zmm18, zmm2, 210 + vpternlogq zmm18, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm22, zmm6, zmm15, 210 + vpternlogq zmm6, zmm15, zmm4, 210 + vpternlogq zmm15, zmm4, zmm13, 210 + vpternlogq zmm4, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm8, zmm17, zmm1, 210 + vpternlogq zmm17, zmm1, zmm10, 210 + vpternlogq zmm1, zmm10, zmm24, 210 + vpternlogq zmm10, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm19, zmm3, zmm12, 210 + vpternlogq zmm3, zmm12, zmm21, 210 + vpternlogq zmm12, zmm21, zmm5, 210 + vpternlogq zmm21, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+192] + ; Round 4 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm11, zmm22, 150 + vpternlogq zmm25, zmm8, zmm19, 150 + vmovdqu64 zmm26, zmm14 + vpternlogq zmm26, zmm20, zmm6, 150 + vpternlogq zmm26, zmm17, zmm3, 150 + vmovdqu64 zmm27, zmm23 + vpternlogq zmm27, zmm9, zmm15, 150 + vpternlogq zmm27, zmm1, zmm12, 150 + vmovdqu64 zmm28, zmm7 + vpternlogq zmm28, zmm18, zmm4, 150 + vpternlogq zmm28, zmm10, zmm21, 150 + vmovdqu64 zmm29, zmm16 + vpternlogq zmm29, zmm2, zmm13, 150 + vpternlogq zmm29, zmm24, zmm5, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm5, zmm5, zmm30 + ; Rho - rotate each lane in place + vprolq zmm14, zmm14, 1 + vprolq zmm23, zmm23, 62 + vprolq zmm7, zmm7, 28 + vprolq zmm16, zmm16, 27 + vprolq zmm11, zmm11, 36 + vprolq zmm20, zmm20, 44 + vprolq zmm9, zmm9, 6 + vprolq zmm18, zmm18, 55 + vprolq zmm2, zmm2, 20 + vprolq zmm22, zmm22, 3 + vprolq zmm6, zmm6, 10 + vprolq zmm15, zmm15, 43 + vprolq zmm4, zmm4, 25 + vprolq zmm13, zmm13, 39 + vprolq zmm8, zmm8, 41 + vprolq zmm17, zmm17, 45 + vprolq zmm1, zmm1, 15 + vprolq zmm10, zmm10, 21 + vprolq zmm24, zmm24, 8 + vprolq zmm19, zmm19, 18 + vprolq zmm3, zmm3, 2 + vprolq zmm12, zmm12, 61 + vprolq zmm21, zmm21, 56 + vprolq zmm5, zmm5, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm0, zmm20, zmm15, 210 + vpternlogq zmm20, zmm15, zmm10, 210 + vpternlogq zmm15, zmm10, zmm5, 210 + vpternlogq zmm10, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm7, zmm2, zmm22, 210 + vpternlogq zmm2, zmm22, zmm17, 210 + vpternlogq zmm22, zmm17, zmm12, 210 + vpternlogq zmm17, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm14, zmm9, zmm4, 210 + vpternlogq zmm9, zmm4, zmm24, 210 + vpternlogq zmm4, zmm24, zmm19, 210 + vpternlogq zmm24, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm16, zmm11, zmm6, 210 + vpternlogq zmm11, zmm6, zmm1, 210 + vpternlogq zmm6, zmm1, zmm21, 210 + vpternlogq zmm1, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm23, zmm18, zmm13, 210 + vpternlogq zmm18, zmm13, zmm8, 210 + vpternlogq zmm13, zmm8, zmm3, 210 + vpternlogq zmm8, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+256] + ; Round 5 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm7, zmm14, 150 + vpternlogq zmm25, zmm16, zmm23, 150 + vmovdqu64 zmm26, zmm20 + vpternlogq zmm26, zmm2, zmm9, 150 + vpternlogq zmm26, zmm11, zmm18, 150 + vmovdqu64 zmm27, zmm15 + vpternlogq zmm27, zmm22, zmm4, 150 + vpternlogq zmm27, zmm6, zmm13, 150 + vmovdqu64 zmm28, zmm10 + vpternlogq zmm28, zmm17, zmm24, 150 + vpternlogq zmm28, zmm1, zmm8, 150 + vmovdqu64 zmm29, zmm5 + vpternlogq zmm29, zmm12, zmm19, 150 + vpternlogq zmm29, zmm21, zmm3, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm3, zmm3, zmm30 + ; Rho - rotate each lane in place + vprolq zmm20, zmm20, 1 + vprolq zmm15, zmm15, 62 + vprolq zmm10, zmm10, 28 + vprolq zmm5, zmm5, 27 + vprolq zmm7, zmm7, 36 + vprolq zmm2, zmm2, 44 + vprolq zmm22, zmm22, 6 + vprolq zmm17, zmm17, 55 + vprolq zmm12, zmm12, 20 + vprolq zmm14, zmm14, 3 + vprolq zmm9, zmm9, 10 + vprolq zmm4, zmm4, 43 + vprolq zmm24, zmm24, 25 + vprolq zmm19, zmm19, 39 + vprolq zmm16, zmm16, 41 + vprolq zmm11, zmm11, 45 + vprolq zmm6, zmm6, 15 + vprolq zmm1, zmm1, 21 + vprolq zmm21, zmm21, 8 + vprolq zmm23, zmm23, 18 + vprolq zmm18, zmm18, 2 + vprolq zmm13, zmm13, 61 + vprolq zmm8, zmm8, 56 + vprolq zmm3, zmm3, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm0, zmm2, zmm4, 210 + vpternlogq zmm2, zmm4, zmm1, 210 + vpternlogq zmm4, zmm1, zmm3, 210 + vpternlogq zmm1, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm10, zmm12, zmm14, 210 + vpternlogq zmm12, zmm14, zmm11, 210 + vpternlogq zmm14, zmm11, zmm13, 210 + vpternlogq zmm11, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm20, zmm22, zmm24, 210 + vpternlogq zmm22, zmm24, zmm21, 210 + vpternlogq zmm24, zmm21, zmm23, 210 + vpternlogq zmm21, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm5, zmm7, zmm9, 210 + vpternlogq zmm7, zmm9, zmm6, 210 + vpternlogq zmm9, zmm6, zmm8, 210 + vpternlogq zmm6, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm15, zmm17, zmm19, 210 + vpternlogq zmm17, zmm19, zmm16, 210 + vpternlogq zmm19, zmm16, zmm18, 210 + vpternlogq zmm16, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+320] + ; Round 6 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm10, zmm20, 150 + vpternlogq zmm25, zmm5, zmm15, 150 + vmovdqu64 zmm26, zmm2 + vpternlogq zmm26, zmm12, zmm22, 150 + vpternlogq zmm26, zmm7, zmm17, 150 + vmovdqu64 zmm27, zmm4 + vpternlogq zmm27, zmm14, zmm24, 150 + vpternlogq zmm27, zmm9, zmm19, 150 + vmovdqu64 zmm28, zmm1 + vpternlogq zmm28, zmm11, zmm21, 150 + vpternlogq zmm28, zmm6, zmm16, 150 + vmovdqu64 zmm29, zmm3 + vpternlogq zmm29, zmm13, zmm23, 150 + vpternlogq zmm29, zmm8, zmm18, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm18, zmm18, zmm30 + ; Rho - rotate each lane in place + vprolq zmm2, zmm2, 1 + vprolq zmm4, zmm4, 62 + vprolq zmm1, zmm1, 28 + vprolq zmm3, zmm3, 27 + vprolq zmm10, zmm10, 36 + vprolq zmm12, zmm12, 44 + vprolq zmm14, zmm14, 6 + vprolq zmm11, zmm11, 55 + vprolq zmm13, zmm13, 20 + vprolq zmm20, zmm20, 3 + vprolq zmm22, zmm22, 10 + vprolq zmm24, zmm24, 43 + vprolq zmm21, zmm21, 25 + vprolq zmm23, zmm23, 39 + vprolq zmm5, zmm5, 41 + vprolq zmm7, zmm7, 45 + vprolq zmm9, zmm9, 15 + vprolq zmm6, zmm6, 21 + vprolq zmm8, zmm8, 8 + vprolq zmm15, zmm15, 18 + vprolq zmm17, zmm17, 2 + vprolq zmm19, zmm19, 61 + vprolq zmm16, zmm16, 56 + vprolq zmm18, zmm18, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm0, zmm12, zmm24, 210 + vpternlogq zmm12, zmm24, zmm6, 210 + vpternlogq zmm24, zmm6, zmm18, 210 + vpternlogq zmm6, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm1, zmm13, zmm20, 210 + vpternlogq zmm13, zmm20, zmm7, 210 + vpternlogq zmm20, zmm7, zmm19, 210 + vpternlogq zmm7, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm2, zmm14, zmm21, 210 + vpternlogq zmm14, zmm21, zmm8, 210 + vpternlogq zmm21, zmm8, zmm15, 210 + vpternlogq zmm8, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm3, zmm10, zmm22, 210 + vpternlogq zmm10, zmm22, zmm9, 210 + vpternlogq zmm22, zmm9, zmm16, 210 + vpternlogq zmm9, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm4, zmm11, zmm23, 210 + vpternlogq zmm11, zmm23, zmm5, 210 + vpternlogq zmm23, zmm5, zmm17, 210 + vpternlogq zmm5, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+384] + ; Round 7 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm1, zmm2, 150 + vpternlogq zmm25, zmm3, zmm4, 150 + vmovdqu64 zmm26, zmm12 + vpternlogq zmm26, zmm13, zmm14, 150 + vpternlogq zmm26, zmm10, zmm11, 150 + vmovdqu64 zmm27, zmm24 + vpternlogq zmm27, zmm20, zmm21, 150 + vpternlogq zmm27, zmm22, zmm23, 150 + vmovdqu64 zmm28, zmm6 + vpternlogq zmm28, zmm7, zmm8, 150 + vpternlogq zmm28, zmm9, zmm5, 150 + vmovdqu64 zmm29, zmm18 + vpternlogq zmm29, zmm19, zmm15, 150 + vpternlogq zmm29, zmm16, zmm17, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm17, zmm17, zmm30 + ; Rho - rotate each lane in place + vprolq zmm12, zmm12, 1 + vprolq zmm24, zmm24, 62 + vprolq zmm6, zmm6, 28 + vprolq zmm18, zmm18, 27 + vprolq zmm1, zmm1, 36 + vprolq zmm13, zmm13, 44 + vprolq zmm20, zmm20, 6 + vprolq zmm7, zmm7, 55 + vprolq zmm19, zmm19, 20 + vprolq zmm2, zmm2, 3 + vprolq zmm14, zmm14, 10 + vprolq zmm21, zmm21, 43 + vprolq zmm8, zmm8, 25 + vprolq zmm15, zmm15, 39 + vprolq zmm3, zmm3, 41 + vprolq zmm10, zmm10, 45 + vprolq zmm22, zmm22, 15 + vprolq zmm9, zmm9, 21 + vprolq zmm16, zmm16, 8 + vprolq zmm4, zmm4, 18 + vprolq zmm11, zmm11, 2 + vprolq zmm23, zmm23, 61 + vprolq zmm5, zmm5, 56 + vprolq zmm17, zmm17, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm0, zmm13, zmm21, 210 + vpternlogq zmm13, zmm21, zmm9, 210 + vpternlogq zmm21, zmm9, zmm17, 210 + vpternlogq zmm9, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm6, zmm19, zmm2, 210 + vpternlogq zmm19, zmm2, zmm10, 210 + vpternlogq zmm2, zmm10, zmm23, 210 + vpternlogq zmm10, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm12, zmm20, zmm8, 210 + vpternlogq zmm20, zmm8, zmm16, 210 + vpternlogq zmm8, zmm16, zmm4, 210 + vpternlogq zmm16, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm18, zmm1, zmm14, 210 + vpternlogq zmm1, zmm14, zmm22, 210 + vpternlogq zmm14, zmm22, zmm5, 210 + vpternlogq zmm22, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm24, zmm7, zmm15, 210 + vpternlogq zmm7, zmm15, zmm3, 210 + vpternlogq zmm15, zmm3, zmm11, 210 + vpternlogq zmm3, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+448] + ; Round 8 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm6, zmm12, 150 + vpternlogq zmm25, zmm18, zmm24, 150 + vmovdqu64 zmm26, zmm13 + vpternlogq zmm26, zmm19, zmm20, 150 + vpternlogq zmm26, zmm1, zmm7, 150 + vmovdqu64 zmm27, zmm21 + vpternlogq zmm27, zmm2, zmm8, 150 + vpternlogq zmm27, zmm14, zmm15, 150 + vmovdqu64 zmm28, zmm9 + vpternlogq zmm28, zmm10, zmm16, 150 + vpternlogq zmm28, zmm22, zmm3, 150 + vmovdqu64 zmm29, zmm17 + vpternlogq zmm29, zmm23, zmm4, 150 + vpternlogq zmm29, zmm5, zmm11, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm11, zmm11, zmm30 + ; Rho - rotate each lane in place + vprolq zmm13, zmm13, 1 + vprolq zmm21, zmm21, 62 + vprolq zmm9, zmm9, 28 + vprolq zmm17, zmm17, 27 + vprolq zmm6, zmm6, 36 + vprolq zmm19, zmm19, 44 + vprolq zmm2, zmm2, 6 + vprolq zmm10, zmm10, 55 + vprolq zmm23, zmm23, 20 + vprolq zmm12, zmm12, 3 + vprolq zmm20, zmm20, 10 + vprolq zmm8, zmm8, 43 + vprolq zmm16, zmm16, 25 + vprolq zmm4, zmm4, 39 + vprolq zmm18, zmm18, 41 + vprolq zmm1, zmm1, 45 + vprolq zmm14, zmm14, 15 + vprolq zmm22, zmm22, 21 + vprolq zmm5, zmm5, 8 + vprolq zmm24, zmm24, 18 + vprolq zmm7, zmm7, 2 + vprolq zmm15, zmm15, 61 + vprolq zmm3, zmm3, 56 + vprolq zmm11, zmm11, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm0, zmm19, zmm8, 210 + vpternlogq zmm19, zmm8, zmm22, 210 + vpternlogq zmm8, zmm22, zmm11, 210 + vpternlogq zmm22, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm9, zmm23, zmm12, 210 + vpternlogq zmm23, zmm12, zmm1, 210 + vpternlogq zmm12, zmm1, zmm15, 210 + vpternlogq zmm1, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm13, zmm2, zmm16, 210 + vpternlogq zmm2, zmm16, zmm5, 210 + vpternlogq zmm16, zmm5, zmm24, 210 + vpternlogq zmm5, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm17, zmm6, zmm20, 210 + vpternlogq zmm6, zmm20, zmm14, 210 + vpternlogq zmm20, zmm14, zmm3, 210 + vpternlogq zmm14, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm21, zmm10, zmm4, 210 + vpternlogq zmm10, zmm4, zmm18, 210 + vpternlogq zmm4, zmm18, zmm7, 210 + vpternlogq zmm18, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+512] + ; Round 9 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm9, zmm13, 150 + vpternlogq zmm25, zmm17, zmm21, 150 + vmovdqu64 zmm26, zmm19 + vpternlogq zmm26, zmm23, zmm2, 150 + vpternlogq zmm26, zmm6, zmm10, 150 + vmovdqu64 zmm27, zmm8 + vpternlogq zmm27, zmm12, zmm16, 150 + vpternlogq zmm27, zmm20, zmm4, 150 + vmovdqu64 zmm28, zmm22 + vpternlogq zmm28, zmm1, zmm5, 150 + vpternlogq zmm28, zmm14, zmm18, 150 + vmovdqu64 zmm29, zmm11 + vpternlogq zmm29, zmm15, zmm24, 150 + vpternlogq zmm29, zmm3, zmm7, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm7, zmm7, zmm30 + ; Rho - rotate each lane in place + vprolq zmm19, zmm19, 1 + vprolq zmm8, zmm8, 62 + vprolq zmm22, zmm22, 28 + vprolq zmm11, zmm11, 27 + vprolq zmm9, zmm9, 36 + vprolq zmm23, zmm23, 44 + vprolq zmm12, zmm12, 6 + vprolq zmm1, zmm1, 55 + vprolq zmm15, zmm15, 20 + vprolq zmm13, zmm13, 3 + vprolq zmm2, zmm2, 10 + vprolq zmm16, zmm16, 43 + vprolq zmm5, zmm5, 25 + vprolq zmm24, zmm24, 39 + vprolq zmm17, zmm17, 41 + vprolq zmm6, zmm6, 45 + vprolq zmm20, zmm20, 15 + vprolq zmm14, zmm14, 21 + vprolq zmm3, zmm3, 8 + vprolq zmm21, zmm21, 18 + vprolq zmm10, zmm10, 2 + vprolq zmm4, zmm4, 61 + vprolq zmm18, zmm18, 56 + vprolq zmm7, zmm7, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm0, zmm23, zmm16, 210 + vpternlogq zmm23, zmm16, zmm14, 210 + vpternlogq zmm16, zmm14, zmm7, 210 + vpternlogq zmm14, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm22, zmm15, zmm13, 210 + vpternlogq zmm15, zmm13, zmm6, 210 + vpternlogq zmm13, zmm6, zmm4, 210 + vpternlogq zmm6, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm19, zmm12, zmm5, 210 + vpternlogq zmm12, zmm5, zmm3, 210 + vpternlogq zmm5, zmm3, zmm21, 210 + vpternlogq zmm3, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm11, zmm9, zmm2, 210 + vpternlogq zmm9, zmm2, zmm20, 210 + vpternlogq zmm2, zmm20, zmm18, 210 + vpternlogq zmm20, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm8, zmm1, zmm24, 210 + vpternlogq zmm1, zmm24, zmm17, 210 + vpternlogq zmm24, zmm17, zmm10, 210 + vpternlogq zmm17, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+576] + ; Round 10 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm22, zmm19, 150 + vpternlogq zmm25, zmm11, zmm8, 150 + vmovdqu64 zmm26, zmm23 + vpternlogq zmm26, zmm15, zmm12, 150 + vpternlogq zmm26, zmm9, zmm1, 150 + vmovdqu64 zmm27, zmm16 + vpternlogq zmm27, zmm13, zmm5, 150 + vpternlogq zmm27, zmm2, zmm24, 150 + vmovdqu64 zmm28, zmm14 + vpternlogq zmm28, zmm6, zmm3, 150 + vpternlogq zmm28, zmm20, zmm17, 150 + vmovdqu64 zmm29, zmm7 + vpternlogq zmm29, zmm4, zmm21, 150 + vpternlogq zmm29, zmm18, zmm10, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm10, zmm10, zmm30 + ; Rho - rotate each lane in place + vprolq zmm23, zmm23, 1 + vprolq zmm16, zmm16, 62 + vprolq zmm14, zmm14, 28 + vprolq zmm7, zmm7, 27 + vprolq zmm22, zmm22, 36 + vprolq zmm15, zmm15, 44 + vprolq zmm13, zmm13, 6 + vprolq zmm6, zmm6, 55 + vprolq zmm4, zmm4, 20 + vprolq zmm19, zmm19, 3 + vprolq zmm12, zmm12, 10 + vprolq zmm5, zmm5, 43 + vprolq zmm3, zmm3, 25 + vprolq zmm21, zmm21, 39 + vprolq zmm11, zmm11, 41 + vprolq zmm9, zmm9, 45 + vprolq zmm2, zmm2, 15 + vprolq zmm20, zmm20, 21 + vprolq zmm18, zmm18, 8 + vprolq zmm8, zmm8, 18 + vprolq zmm1, zmm1, 2 + vprolq zmm24, zmm24, 61 + vprolq zmm17, zmm17, 56 + vprolq zmm10, zmm10, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm0, zmm15, zmm5, 210 + vpternlogq zmm15, zmm5, zmm20, 210 + vpternlogq zmm5, zmm20, zmm10, 210 + vpternlogq zmm20, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm14, zmm4, zmm19, 210 + vpternlogq zmm4, zmm19, zmm9, 210 + vpternlogq zmm19, zmm9, zmm24, 210 + vpternlogq zmm9, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm23, zmm13, zmm3, 210 + vpternlogq zmm13, zmm3, zmm18, 210 + vpternlogq zmm3, zmm18, zmm8, 210 + vpternlogq zmm18, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm7, zmm22, zmm12, 210 + vpternlogq zmm22, zmm12, zmm2, 210 + vpternlogq zmm12, zmm2, zmm17, 210 + vpternlogq zmm2, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm16, zmm6, zmm21, 210 + vpternlogq zmm6, zmm21, zmm11, 210 + vpternlogq zmm21, zmm11, zmm1, 210 + vpternlogq zmm11, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+640] + ; Round 11 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm14, zmm23, 150 + vpternlogq zmm25, zmm7, zmm16, 150 + vmovdqu64 zmm26, zmm15 + vpternlogq zmm26, zmm4, zmm13, 150 + vpternlogq zmm26, zmm22, zmm6, 150 + vmovdqu64 zmm27, zmm5 + vpternlogq zmm27, zmm19, zmm3, 150 + vpternlogq zmm27, zmm12, zmm21, 150 + vmovdqu64 zmm28, zmm20 + vpternlogq zmm28, zmm9, zmm18, 150 + vpternlogq zmm28, zmm2, zmm11, 150 + vmovdqu64 zmm29, zmm10 + vpternlogq zmm29, zmm24, zmm8, 150 + vpternlogq zmm29, zmm17, zmm1, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm1, zmm1, zmm30 + ; Rho - rotate each lane in place + vprolq zmm15, zmm15, 1 + vprolq zmm5, zmm5, 62 + vprolq zmm20, zmm20, 28 + vprolq zmm10, zmm10, 27 + vprolq zmm14, zmm14, 36 + vprolq zmm4, zmm4, 44 + vprolq zmm19, zmm19, 6 + vprolq zmm9, zmm9, 55 + vprolq zmm24, zmm24, 20 + vprolq zmm23, zmm23, 3 + vprolq zmm13, zmm13, 10 + vprolq zmm3, zmm3, 43 + vprolq zmm18, zmm18, 25 + vprolq zmm8, zmm8, 39 + vprolq zmm7, zmm7, 41 + vprolq zmm22, zmm22, 45 + vprolq zmm12, zmm12, 15 + vprolq zmm2, zmm2, 21 + vprolq zmm17, zmm17, 8 + vprolq zmm16, zmm16, 18 + vprolq zmm6, zmm6, 2 + vprolq zmm21, zmm21, 61 + vprolq zmm11, zmm11, 56 + vprolq zmm1, zmm1, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm0, zmm4, zmm3, 210 + vpternlogq zmm4, zmm3, zmm2, 210 + vpternlogq zmm3, zmm2, zmm1, 210 + vpternlogq zmm2, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm20, zmm24, zmm23, 210 + vpternlogq zmm24, zmm23, zmm22, 210 + vpternlogq zmm23, zmm22, zmm21, 210 + vpternlogq zmm22, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm15, zmm19, zmm18, 210 + vpternlogq zmm19, zmm18, zmm17, 210 + vpternlogq zmm18, zmm17, zmm16, 210 + vpternlogq zmm17, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm10, zmm14, zmm13, 210 + vpternlogq zmm14, zmm13, zmm12, 210 + vpternlogq zmm13, zmm12, zmm11, 210 + vpternlogq zmm12, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm5, zmm9, zmm8, 210 + vpternlogq zmm9, zmm8, zmm7, 210 + vpternlogq zmm8, zmm7, zmm6, 210 + vpternlogq zmm7, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+704] + ; Round 12 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm20, zmm15, 150 + vpternlogq zmm25, zmm10, zmm5, 150 + vmovdqu64 zmm26, zmm4 + vpternlogq zmm26, zmm24, zmm19, 150 + vpternlogq zmm26, zmm14, zmm9, 150 + vmovdqu64 zmm27, zmm3 + vpternlogq zmm27, zmm23, zmm18, 150 + vpternlogq zmm27, zmm13, zmm8, 150 + vmovdqu64 zmm28, zmm2 + vpternlogq zmm28, zmm22, zmm17, 150 + vpternlogq zmm28, zmm12, zmm7, 150 + vmovdqu64 zmm29, zmm1 + vpternlogq zmm29, zmm21, zmm16, 150 + vpternlogq zmm29, zmm11, zmm6, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm6, zmm6, zmm30 + ; Rho - rotate each lane in place + vprolq zmm4, zmm4, 1 + vprolq zmm3, zmm3, 62 + vprolq zmm2, zmm2, 28 + vprolq zmm1, zmm1, 27 + vprolq zmm20, zmm20, 36 + vprolq zmm24, zmm24, 44 + vprolq zmm23, zmm23, 6 + vprolq zmm22, zmm22, 55 + vprolq zmm21, zmm21, 20 + vprolq zmm15, zmm15, 3 + vprolq zmm19, zmm19, 10 + vprolq zmm18, zmm18, 43 + vprolq zmm17, zmm17, 25 + vprolq zmm16, zmm16, 39 + vprolq zmm10, zmm10, 41 + vprolq zmm14, zmm14, 45 + vprolq zmm13, zmm13, 15 + vprolq zmm12, zmm12, 21 + vprolq zmm11, zmm11, 8 + vprolq zmm5, zmm5, 18 + vprolq zmm9, zmm9, 2 + vprolq zmm8, zmm8, 61 + vprolq zmm7, zmm7, 56 + vprolq zmm6, zmm6, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm0, zmm24, zmm18, 210 + vpternlogq zmm24, zmm18, zmm12, 210 + vpternlogq zmm18, zmm12, zmm6, 210 + vpternlogq zmm12, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm2, zmm21, zmm15, 210 + vpternlogq zmm21, zmm15, zmm14, 210 + vpternlogq zmm15, zmm14, zmm8, 210 + vpternlogq zmm14, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm4, zmm23, zmm17, 210 + vpternlogq zmm23, zmm17, zmm11, 210 + vpternlogq zmm17, zmm11, zmm5, 210 + vpternlogq zmm11, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm1, zmm20, zmm19, 210 + vpternlogq zmm20, zmm19, zmm13, 210 + vpternlogq zmm19, zmm13, zmm7, 210 + vpternlogq zmm13, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm3, zmm22, zmm16, 210 + vpternlogq zmm22, zmm16, zmm10, 210 + vpternlogq zmm16, zmm10, zmm9, 210 + vpternlogq zmm10, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+768] + ; Round 13 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm2, zmm4, 150 + vpternlogq zmm25, zmm1, zmm3, 150 + vmovdqu64 zmm26, zmm24 + vpternlogq zmm26, zmm21, zmm23, 150 + vpternlogq zmm26, zmm20, zmm22, 150 + vmovdqu64 zmm27, zmm18 + vpternlogq zmm27, zmm15, zmm17, 150 + vpternlogq zmm27, zmm19, zmm16, 150 + vmovdqu64 zmm28, zmm12 + vpternlogq zmm28, zmm14, zmm11, 150 + vpternlogq zmm28, zmm13, zmm10, 150 + vmovdqu64 zmm29, zmm6 + vpternlogq zmm29, zmm8, zmm5, 150 + vpternlogq zmm29, zmm7, zmm9, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm9, zmm9, zmm30 + ; Rho - rotate each lane in place + vprolq zmm24, zmm24, 1 + vprolq zmm18, zmm18, 62 + vprolq zmm12, zmm12, 28 + vprolq zmm6, zmm6, 27 + vprolq zmm2, zmm2, 36 + vprolq zmm21, zmm21, 44 + vprolq zmm15, zmm15, 6 + vprolq zmm14, zmm14, 55 + vprolq zmm8, zmm8, 20 + vprolq zmm4, zmm4, 3 + vprolq zmm23, zmm23, 10 + vprolq zmm17, zmm17, 43 + vprolq zmm11, zmm11, 25 + vprolq zmm5, zmm5, 39 + vprolq zmm1, zmm1, 41 + vprolq zmm20, zmm20, 45 + vprolq zmm19, zmm19, 15 + vprolq zmm13, zmm13, 21 + vprolq zmm7, zmm7, 8 + vprolq zmm3, zmm3, 18 + vprolq zmm22, zmm22, 2 + vprolq zmm16, zmm16, 61 + vprolq zmm10, zmm10, 56 + vprolq zmm9, zmm9, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm0, zmm21, zmm17, 210 + vpternlogq zmm21, zmm17, zmm13, 210 + vpternlogq zmm17, zmm13, zmm9, 210 + vpternlogq zmm13, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm12, zmm8, zmm4, 210 + vpternlogq zmm8, zmm4, zmm20, 210 + vpternlogq zmm4, zmm20, zmm16, 210 + vpternlogq zmm20, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm24, zmm15, zmm11, 210 + vpternlogq zmm15, zmm11, zmm7, 210 + vpternlogq zmm11, zmm7, zmm3, 210 + vpternlogq zmm7, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm6, zmm2, zmm23, 210 + vpternlogq zmm2, zmm23, zmm19, 210 + vpternlogq zmm23, zmm19, zmm10, 210 + vpternlogq zmm19, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm18, zmm14, zmm5, 210 + vpternlogq zmm14, zmm5, zmm1, 210 + vpternlogq zmm5, zmm1, zmm22, 210 + vpternlogq zmm1, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+832] + ; Round 14 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm12, zmm24, 150 + vpternlogq zmm25, zmm6, zmm18, 150 + vmovdqu64 zmm26, zmm21 + vpternlogq zmm26, zmm8, zmm15, 150 + vpternlogq zmm26, zmm2, zmm14, 150 + vmovdqu64 zmm27, zmm17 + vpternlogq zmm27, zmm4, zmm11, 150 + vpternlogq zmm27, zmm23, zmm5, 150 + vmovdqu64 zmm28, zmm13 + vpternlogq zmm28, zmm20, zmm7, 150 + vpternlogq zmm28, zmm19, zmm1, 150 + vmovdqu64 zmm29, zmm9 + vpternlogq zmm29, zmm16, zmm3, 150 + vpternlogq zmm29, zmm10, zmm22, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm22, zmm22, zmm30 + ; Rho - rotate each lane in place + vprolq zmm21, zmm21, 1 + vprolq zmm17, zmm17, 62 + vprolq zmm13, zmm13, 28 + vprolq zmm9, zmm9, 27 + vprolq zmm12, zmm12, 36 + vprolq zmm8, zmm8, 44 + vprolq zmm4, zmm4, 6 + vprolq zmm20, zmm20, 55 + vprolq zmm16, zmm16, 20 + vprolq zmm24, zmm24, 3 + vprolq zmm15, zmm15, 10 + vprolq zmm11, zmm11, 43 + vprolq zmm7, zmm7, 25 + vprolq zmm3, zmm3, 39 + vprolq zmm6, zmm6, 41 + vprolq zmm2, zmm2, 45 + vprolq zmm23, zmm23, 15 + vprolq zmm19, zmm19, 21 + vprolq zmm10, zmm10, 8 + vprolq zmm18, zmm18, 18 + vprolq zmm14, zmm14, 2 + vprolq zmm5, zmm5, 61 + vprolq zmm1, zmm1, 56 + vprolq zmm22, zmm22, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm0, zmm8, zmm11, 210 + vpternlogq zmm8, zmm11, zmm19, 210 + vpternlogq zmm11, zmm19, zmm22, 210 + vpternlogq zmm19, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm13, zmm16, zmm24, 210 + vpternlogq zmm16, zmm24, zmm2, 210 + vpternlogq zmm24, zmm2, zmm5, 210 + vpternlogq zmm2, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm21, zmm4, zmm7, 210 + vpternlogq zmm4, zmm7, zmm10, 210 + vpternlogq zmm7, zmm10, zmm18, 210 + vpternlogq zmm10, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm9, zmm12, zmm15, 210 + vpternlogq zmm12, zmm15, zmm23, 210 + vpternlogq zmm15, zmm23, zmm1, 210 + vpternlogq zmm23, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm17, zmm20, zmm3, 210 + vpternlogq zmm20, zmm3, zmm6, 210 + vpternlogq zmm3, zmm6, zmm14, 210 + vpternlogq zmm6, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+896] + ; Round 15 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm13, zmm21, 150 + vpternlogq zmm25, zmm9, zmm17, 150 + vmovdqu64 zmm26, zmm8 + vpternlogq zmm26, zmm16, zmm4, 150 + vpternlogq zmm26, zmm12, zmm20, 150 + vmovdqu64 zmm27, zmm11 + vpternlogq zmm27, zmm24, zmm7, 150 + vpternlogq zmm27, zmm15, zmm3, 150 + vmovdqu64 zmm28, zmm19 + vpternlogq zmm28, zmm2, zmm10, 150 + vpternlogq zmm28, zmm23, zmm6, 150 + vmovdqu64 zmm29, zmm22 + vpternlogq zmm29, zmm5, zmm18, 150 + vpternlogq zmm29, zmm1, zmm14, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm14, zmm14, zmm30 + ; Rho - rotate each lane in place + vprolq zmm8, zmm8, 1 + vprolq zmm11, zmm11, 62 + vprolq zmm19, zmm19, 28 + vprolq zmm22, zmm22, 27 + vprolq zmm13, zmm13, 36 + vprolq zmm16, zmm16, 44 + vprolq zmm24, zmm24, 6 + vprolq zmm2, zmm2, 55 + vprolq zmm5, zmm5, 20 + vprolq zmm21, zmm21, 3 + vprolq zmm4, zmm4, 10 + vprolq zmm7, zmm7, 43 + vprolq zmm10, zmm10, 25 + vprolq zmm18, zmm18, 39 + vprolq zmm9, zmm9, 41 + vprolq zmm12, zmm12, 45 + vprolq zmm15, zmm15, 15 + vprolq zmm23, zmm23, 21 + vprolq zmm1, zmm1, 8 + vprolq zmm17, zmm17, 18 + vprolq zmm20, zmm20, 2 + vprolq zmm3, zmm3, 61 + vprolq zmm6, zmm6, 56 + vprolq zmm14, zmm14, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm0, zmm16, zmm7, 210 + vpternlogq zmm16, zmm7, zmm23, 210 + vpternlogq zmm7, zmm23, zmm14, 210 + vpternlogq zmm23, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm19, zmm5, zmm21, 210 + vpternlogq zmm5, zmm21, zmm12, 210 + vpternlogq zmm21, zmm12, zmm3, 210 + vpternlogq zmm12, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm8, zmm24, zmm10, 210 + vpternlogq zmm24, zmm10, zmm1, 210 + vpternlogq zmm10, zmm1, zmm17, 210 + vpternlogq zmm1, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm22, zmm13, zmm4, 210 + vpternlogq zmm13, zmm4, zmm15, 210 + vpternlogq zmm4, zmm15, zmm6, 210 + vpternlogq zmm15, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm11, zmm2, zmm18, 210 + vpternlogq zmm2, zmm18, zmm9, 210 + vpternlogq zmm18, zmm9, zmm20, 210 + vpternlogq zmm9, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+960] + ; Round 16 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm19, zmm8, 150 + vpternlogq zmm25, zmm22, zmm11, 150 + vmovdqu64 zmm26, zmm16 + vpternlogq zmm26, zmm5, zmm24, 150 + vpternlogq zmm26, zmm13, zmm2, 150 + vmovdqu64 zmm27, zmm7 + vpternlogq zmm27, zmm21, zmm10, 150 + vpternlogq zmm27, zmm4, zmm18, 150 + vmovdqu64 zmm28, zmm23 + vpternlogq zmm28, zmm12, zmm1, 150 + vpternlogq zmm28, zmm15, zmm9, 150 + vmovdqu64 zmm29, zmm14 + vpternlogq zmm29, zmm3, zmm17, 150 + vpternlogq zmm29, zmm6, zmm20, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm20, zmm20, zmm30 + ; Rho - rotate each lane in place + vprolq zmm16, zmm16, 1 + vprolq zmm7, zmm7, 62 + vprolq zmm23, zmm23, 28 + vprolq zmm14, zmm14, 27 + vprolq zmm19, zmm19, 36 + vprolq zmm5, zmm5, 44 + vprolq zmm21, zmm21, 6 + vprolq zmm12, zmm12, 55 + vprolq zmm3, zmm3, 20 + vprolq zmm8, zmm8, 3 + vprolq zmm24, zmm24, 10 + vprolq zmm10, zmm10, 43 + vprolq zmm1, zmm1, 25 + vprolq zmm17, zmm17, 39 + vprolq zmm22, zmm22, 41 + vprolq zmm13, zmm13, 45 + vprolq zmm4, zmm4, 15 + vprolq zmm15, zmm15, 21 + vprolq zmm6, zmm6, 8 + vprolq zmm11, zmm11, 18 + vprolq zmm2, zmm2, 2 + vprolq zmm18, zmm18, 61 + vprolq zmm9, zmm9, 56 + vprolq zmm20, zmm20, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm0, zmm5, zmm10, 210 + vpternlogq zmm5, zmm10, zmm15, 210 + vpternlogq zmm10, zmm15, zmm20, 210 + vpternlogq zmm15, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm23, zmm3, zmm8, 210 + vpternlogq zmm3, zmm8, zmm13, 210 + vpternlogq zmm8, zmm13, zmm18, 210 + vpternlogq zmm13, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm16, zmm21, zmm1, 210 + vpternlogq zmm21, zmm1, zmm6, 210 + vpternlogq zmm1, zmm6, zmm11, 210 + vpternlogq zmm6, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm14, zmm19, zmm24, 210 + vpternlogq zmm19, zmm24, zmm4, 210 + vpternlogq zmm24, zmm4, zmm9, 210 + vpternlogq zmm4, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm7, zmm12, zmm17, 210 + vpternlogq zmm12, zmm17, zmm22, 210 + vpternlogq zmm17, zmm22, zmm2, 210 + vpternlogq zmm22, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1024] + ; Round 17 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm23, zmm16, 150 + vpternlogq zmm25, zmm14, zmm7, 150 + vmovdqu64 zmm26, zmm5 + vpternlogq zmm26, zmm3, zmm21, 150 + vpternlogq zmm26, zmm19, zmm12, 150 + vmovdqu64 zmm27, zmm10 + vpternlogq zmm27, zmm8, zmm1, 150 + vpternlogq zmm27, zmm24, zmm17, 150 + vmovdqu64 zmm28, zmm15 + vpternlogq zmm28, zmm13, zmm6, 150 + vpternlogq zmm28, zmm4, zmm22, 150 + vmovdqu64 zmm29, zmm20 + vpternlogq zmm29, zmm18, zmm11, 150 + vpternlogq zmm29, zmm9, zmm2, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm2, zmm2, zmm30 + ; Rho - rotate each lane in place + vprolq zmm5, zmm5, 1 + vprolq zmm10, zmm10, 62 + vprolq zmm15, zmm15, 28 + vprolq zmm20, zmm20, 27 + vprolq zmm23, zmm23, 36 + vprolq zmm3, zmm3, 44 + vprolq zmm8, zmm8, 6 + vprolq zmm13, zmm13, 55 + vprolq zmm18, zmm18, 20 + vprolq zmm16, zmm16, 3 + vprolq zmm21, zmm21, 10 + vprolq zmm1, zmm1, 43 + vprolq zmm6, zmm6, 25 + vprolq zmm11, zmm11, 39 + vprolq zmm14, zmm14, 41 + vprolq zmm19, zmm19, 45 + vprolq zmm24, zmm24, 15 + vprolq zmm4, zmm4, 21 + vprolq zmm9, zmm9, 8 + vprolq zmm7, zmm7, 18 + vprolq zmm12, zmm12, 2 + vprolq zmm17, zmm17, 61 + vprolq zmm22, zmm22, 56 + vprolq zmm2, zmm2, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm0, zmm3, zmm1, 210 + vpternlogq zmm3, zmm1, zmm4, 210 + vpternlogq zmm1, zmm4, zmm2, 210 + vpternlogq zmm4, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm15, zmm18, zmm16, 210 + vpternlogq zmm18, zmm16, zmm19, 210 + vpternlogq zmm16, zmm19, zmm17, 210 + vpternlogq zmm19, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm5, zmm8, zmm6, 210 + vpternlogq zmm8, zmm6, zmm9, 210 + vpternlogq zmm6, zmm9, zmm7, 210 + vpternlogq zmm9, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm20, zmm23, zmm21, 210 + vpternlogq zmm23, zmm21, zmm24, 210 + vpternlogq zmm21, zmm24, zmm22, 210 + vpternlogq zmm24, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm10, zmm13, zmm11, 210 + vpternlogq zmm13, zmm11, zmm14, 210 + vpternlogq zmm11, zmm14, zmm12, 210 + vpternlogq zmm14, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1088] + ; Round 18 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm15, zmm5, 150 + vpternlogq zmm25, zmm20, zmm10, 150 + vmovdqu64 zmm26, zmm3 + vpternlogq zmm26, zmm18, zmm8, 150 + vpternlogq zmm26, zmm23, zmm13, 150 + vmovdqu64 zmm27, zmm1 + vpternlogq zmm27, zmm16, zmm6, 150 + vpternlogq zmm27, zmm21, zmm11, 150 + vmovdqu64 zmm28, zmm4 + vpternlogq zmm28, zmm19, zmm9, 150 + vpternlogq zmm28, zmm24, zmm14, 150 + vmovdqu64 zmm29, zmm2 + vpternlogq zmm29, zmm17, zmm7, 150 + vpternlogq zmm29, zmm22, zmm12, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm12, zmm12, zmm30 + ; Rho - rotate each lane in place + vprolq zmm3, zmm3, 1 + vprolq zmm1, zmm1, 62 + vprolq zmm4, zmm4, 28 + vprolq zmm2, zmm2, 27 + vprolq zmm15, zmm15, 36 + vprolq zmm18, zmm18, 44 + vprolq zmm16, zmm16, 6 + vprolq zmm19, zmm19, 55 + vprolq zmm17, zmm17, 20 + vprolq zmm5, zmm5, 3 + vprolq zmm8, zmm8, 10 + vprolq zmm6, zmm6, 43 + vprolq zmm9, zmm9, 25 + vprolq zmm7, zmm7, 39 + vprolq zmm20, zmm20, 41 + vprolq zmm23, zmm23, 45 + vprolq zmm21, zmm21, 15 + vprolq zmm24, zmm24, 21 + vprolq zmm22, zmm22, 8 + vprolq zmm10, zmm10, 18 + vprolq zmm13, zmm13, 2 + vprolq zmm11, zmm11, 61 + vprolq zmm14, zmm14, 56 + vprolq zmm12, zmm12, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm0, zmm18, zmm6, 210 + vpternlogq zmm18, zmm6, zmm24, 210 + vpternlogq zmm6, zmm24, zmm12, 210 + vpternlogq zmm24, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm4, zmm17, zmm5, 210 + vpternlogq zmm17, zmm5, zmm23, 210 + vpternlogq zmm5, zmm23, zmm11, 210 + vpternlogq zmm23, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm3, zmm16, zmm9, 210 + vpternlogq zmm16, zmm9, zmm22, 210 + vpternlogq zmm9, zmm22, zmm10, 210 + vpternlogq zmm22, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm2, zmm15, zmm8, 210 + vpternlogq zmm15, zmm8, zmm21, 210 + vpternlogq zmm8, zmm21, zmm14, 210 + vpternlogq zmm21, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm1, zmm19, zmm7, 210 + vpternlogq zmm19, zmm7, zmm20, 210 + vpternlogq zmm7, zmm20, zmm13, 210 + vpternlogq zmm20, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1152] + ; Round 19 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm4, zmm3, 150 + vpternlogq zmm25, zmm2, zmm1, 150 + vmovdqu64 zmm26, zmm18 + vpternlogq zmm26, zmm17, zmm16, 150 + vpternlogq zmm26, zmm15, zmm19, 150 + vmovdqu64 zmm27, zmm6 + vpternlogq zmm27, zmm5, zmm9, 150 + vpternlogq zmm27, zmm8, zmm7, 150 + vmovdqu64 zmm28, zmm24 + vpternlogq zmm28, zmm23, zmm22, 150 + vpternlogq zmm28, zmm21, zmm20, 150 + vmovdqu64 zmm29, zmm12 + vpternlogq zmm29, zmm11, zmm10, 150 + vpternlogq zmm29, zmm14, zmm13, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm13, zmm13, zmm30 + ; Rho - rotate each lane in place + vprolq zmm18, zmm18, 1 + vprolq zmm6, zmm6, 62 + vprolq zmm24, zmm24, 28 + vprolq zmm12, zmm12, 27 + vprolq zmm4, zmm4, 36 + vprolq zmm17, zmm17, 44 + vprolq zmm5, zmm5, 6 + vprolq zmm23, zmm23, 55 + vprolq zmm11, zmm11, 20 + vprolq zmm3, zmm3, 3 + vprolq zmm16, zmm16, 10 + vprolq zmm9, zmm9, 43 + vprolq zmm22, zmm22, 25 + vprolq zmm10, zmm10, 39 + vprolq zmm2, zmm2, 41 + vprolq zmm15, zmm15, 45 + vprolq zmm8, zmm8, 15 + vprolq zmm21, zmm21, 21 + vprolq zmm14, zmm14, 8 + vprolq zmm1, zmm1, 18 + vprolq zmm19, zmm19, 2 + vprolq zmm7, zmm7, 61 + vprolq zmm20, zmm20, 56 + vprolq zmm13, zmm13, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm0, zmm17, zmm9, 210 + vpternlogq zmm17, zmm9, zmm21, 210 + vpternlogq zmm9, zmm21, zmm13, 210 + vpternlogq zmm21, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm24, zmm11, zmm3, 210 + vpternlogq zmm11, zmm3, zmm15, 210 + vpternlogq zmm3, zmm15, zmm7, 210 + vpternlogq zmm15, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm18, zmm5, zmm22, 210 + vpternlogq zmm5, zmm22, zmm14, 210 + vpternlogq zmm22, zmm14, zmm1, 210 + vpternlogq zmm14, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm12, zmm4, zmm16, 210 + vpternlogq zmm4, zmm16, zmm8, 210 + vpternlogq zmm16, zmm8, zmm20, 210 + vpternlogq zmm8, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm6, zmm23, zmm10, 210 + vpternlogq zmm23, zmm10, zmm2, 210 + vpternlogq zmm10, zmm2, zmm19, 210 + vpternlogq zmm2, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1216] + ; Round 20 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm24, zmm18, 150 + vpternlogq zmm25, zmm12, zmm6, 150 + vmovdqu64 zmm26, zmm17 + vpternlogq zmm26, zmm11, zmm5, 150 + vpternlogq zmm26, zmm4, zmm23, 150 + vmovdqu64 zmm27, zmm9 + vpternlogq zmm27, zmm3, zmm22, 150 + vpternlogq zmm27, zmm16, zmm10, 150 + vmovdqu64 zmm28, zmm21 + vpternlogq zmm28, zmm15, zmm14, 150 + vpternlogq zmm28, zmm8, zmm2, 150 + vmovdqu64 zmm29, zmm13 + vpternlogq zmm29, zmm7, zmm1, 150 + vpternlogq zmm29, zmm20, zmm19, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm19, zmm19, zmm30 + ; Rho - rotate each lane in place + vprolq zmm17, zmm17, 1 + vprolq zmm9, zmm9, 62 + vprolq zmm21, zmm21, 28 + vprolq zmm13, zmm13, 27 + vprolq zmm24, zmm24, 36 + vprolq zmm11, zmm11, 44 + vprolq zmm3, zmm3, 6 + vprolq zmm15, zmm15, 55 + vprolq zmm7, zmm7, 20 + vprolq zmm18, zmm18, 3 + vprolq zmm5, zmm5, 10 + vprolq zmm22, zmm22, 43 + vprolq zmm14, zmm14, 25 + vprolq zmm1, zmm1, 39 + vprolq zmm12, zmm12, 41 + vprolq zmm4, zmm4, 45 + vprolq zmm16, zmm16, 15 + vprolq zmm8, zmm8, 21 + vprolq zmm20, zmm20, 8 + vprolq zmm6, zmm6, 18 + vprolq zmm23, zmm23, 2 + vprolq zmm10, zmm10, 61 + vprolq zmm2, zmm2, 56 + vprolq zmm19, zmm19, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm0, zmm11, zmm22, 210 + vpternlogq zmm11, zmm22, zmm8, 210 + vpternlogq zmm22, zmm8, zmm19, 210 + vpternlogq zmm8, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm21, zmm7, zmm18, 210 + vpternlogq zmm7, zmm18, zmm4, 210 + vpternlogq zmm18, zmm4, zmm10, 210 + vpternlogq zmm4, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm17, zmm3, zmm14, 210 + vpternlogq zmm3, zmm14, zmm20, 210 + vpternlogq zmm14, zmm20, zmm6, 210 + vpternlogq zmm20, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm13, zmm24, zmm5, 210 + vpternlogq zmm24, zmm5, zmm16, 210 + vpternlogq zmm5, zmm16, zmm2, 210 + vpternlogq zmm16, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm9, zmm15, zmm1, 210 + vpternlogq zmm15, zmm1, zmm12, 210 + vpternlogq zmm1, zmm12, zmm23, 210 + vpternlogq zmm12, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1280] + ; Round 21 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm21, zmm17, 150 + vpternlogq zmm25, zmm13, zmm9, 150 + vmovdqu64 zmm26, zmm11 + vpternlogq zmm26, zmm7, zmm3, 150 + vpternlogq zmm26, zmm24, zmm15, 150 + vmovdqu64 zmm27, zmm22 + vpternlogq zmm27, zmm18, zmm14, 150 + vpternlogq zmm27, zmm5, zmm1, 150 + vmovdqu64 zmm28, zmm8 + vpternlogq zmm28, zmm4, zmm20, 150 + vpternlogq zmm28, zmm16, zmm12, 150 + vmovdqu64 zmm29, zmm19 + vpternlogq zmm29, zmm10, zmm6, 150 + vpternlogq zmm29, zmm2, zmm23, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm23, zmm23, zmm30 + ; Rho - rotate each lane in place + vprolq zmm11, zmm11, 1 + vprolq zmm22, zmm22, 62 + vprolq zmm8, zmm8, 28 + vprolq zmm19, zmm19, 27 + vprolq zmm21, zmm21, 36 + vprolq zmm7, zmm7, 44 + vprolq zmm18, zmm18, 6 + vprolq zmm4, zmm4, 55 + vprolq zmm10, zmm10, 20 + vprolq zmm17, zmm17, 3 + vprolq zmm3, zmm3, 10 + vprolq zmm14, zmm14, 43 + vprolq zmm20, zmm20, 25 + vprolq zmm6, zmm6, 39 + vprolq zmm13, zmm13, 41 + vprolq zmm24, zmm24, 45 + vprolq zmm5, zmm5, 15 + vprolq zmm16, zmm16, 21 + vprolq zmm2, zmm2, 8 + vprolq zmm9, zmm9, 18 + vprolq zmm15, zmm15, 2 + vprolq zmm1, zmm1, 61 + vprolq zmm12, zmm12, 56 + vprolq zmm23, zmm23, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm0, zmm7, zmm14, 210 + vpternlogq zmm7, zmm14, zmm16, 210 + vpternlogq zmm14, zmm16, zmm23, 210 + vpternlogq zmm16, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm8, zmm10, zmm17, 210 + vpternlogq zmm10, zmm17, zmm24, 210 + vpternlogq zmm17, zmm24, zmm1, 210 + vpternlogq zmm24, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm11, zmm18, zmm20, 210 + vpternlogq zmm18, zmm20, zmm2, 210 + vpternlogq zmm20, zmm2, zmm9, 210 + vpternlogq zmm2, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm19, zmm21, zmm3, 210 + vpternlogq zmm21, zmm3, zmm5, 210 + vpternlogq zmm3, zmm5, zmm12, 210 + vpternlogq zmm5, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm22, zmm4, zmm6, 210 + vpternlogq zmm4, zmm6, zmm13, 210 + vpternlogq zmm6, zmm13, zmm15, 210 + vpternlogq zmm13, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1344] + ; Round 22 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm8, zmm11, 150 + vpternlogq zmm25, zmm19, zmm22, 150 + vmovdqu64 zmm26, zmm7 + vpternlogq zmm26, zmm10, zmm18, 150 + vpternlogq zmm26, zmm21, zmm4, 150 + vmovdqu64 zmm27, zmm14 + vpternlogq zmm27, zmm17, zmm20, 150 + vpternlogq zmm27, zmm3, zmm6, 150 + vmovdqu64 zmm28, zmm16 + vpternlogq zmm28, zmm24, zmm2, 150 + vpternlogq zmm28, zmm5, zmm13, 150 + vmovdqu64 zmm29, zmm23 + vpternlogq zmm29, zmm1, zmm9, 150 + vpternlogq zmm29, zmm12, zmm15, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm15, zmm15, zmm30 + ; Rho - rotate each lane in place + vprolq zmm7, zmm7, 1 + vprolq zmm14, zmm14, 62 + vprolq zmm16, zmm16, 28 + vprolq zmm23, zmm23, 27 + vprolq zmm8, zmm8, 36 + vprolq zmm10, zmm10, 44 + vprolq zmm17, zmm17, 6 + vprolq zmm24, zmm24, 55 + vprolq zmm1, zmm1, 20 + vprolq zmm11, zmm11, 3 + vprolq zmm18, zmm18, 10 + vprolq zmm20, zmm20, 43 + vprolq zmm2, zmm2, 25 + vprolq zmm9, zmm9, 39 + vprolq zmm19, zmm19, 41 + vprolq zmm21, zmm21, 45 + vprolq zmm3, zmm3, 15 + vprolq zmm5, zmm5, 21 + vprolq zmm12, zmm12, 8 + vprolq zmm22, zmm22, 18 + vprolq zmm4, zmm4, 2 + vprolq zmm6, zmm6, 61 + vprolq zmm13, zmm13, 56 + vprolq zmm15, zmm15, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm0, zmm10, zmm20, 210 + vpternlogq zmm10, zmm20, zmm5, 210 + vpternlogq zmm20, zmm5, zmm15, 210 + vpternlogq zmm5, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm16, zmm1, zmm11, 210 + vpternlogq zmm1, zmm11, zmm21, 210 + vpternlogq zmm11, zmm21, zmm6, 210 + vpternlogq zmm21, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm7, zmm17, zmm2, 210 + vpternlogq zmm17, zmm2, zmm12, 210 + vpternlogq zmm2, zmm12, zmm22, 210 + vpternlogq zmm12, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm23, zmm8, zmm18, 210 + vpternlogq zmm8, zmm18, zmm3, 210 + vpternlogq zmm18, zmm3, zmm13, 210 + vpternlogq zmm3, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm14, zmm24, zmm9, 210 + vpternlogq zmm24, zmm9, zmm19, 210 + vpternlogq zmm9, zmm19, zmm4, 210 + vpternlogq zmm19, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1408] + ; Round 23 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm16, zmm7, 150 + vpternlogq zmm25, zmm23, zmm14, 150 + vmovdqu64 zmm26, zmm10 + vpternlogq zmm26, zmm1, zmm17, 150 + vpternlogq zmm26, zmm8, zmm24, 150 + vmovdqu64 zmm27, zmm20 + vpternlogq zmm27, zmm11, zmm2, 150 + vpternlogq zmm27, zmm18, zmm9, 150 + vmovdqu64 zmm28, zmm5 + vpternlogq zmm28, zmm21, zmm12, 150 + vpternlogq zmm28, zmm3, zmm19, 150 + vmovdqu64 zmm29, zmm15 + vpternlogq zmm29, zmm6, zmm22, 150 + vpternlogq zmm29, zmm13, zmm4, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm4, zmm4, zmm30 + ; Rho - rotate each lane in place + vprolq zmm10, zmm10, 1 + vprolq zmm20, zmm20, 62 + vprolq zmm5, zmm5, 28 + vprolq zmm15, zmm15, 27 + vprolq zmm16, zmm16, 36 + vprolq zmm1, zmm1, 44 + vprolq zmm11, zmm11, 6 + vprolq zmm21, zmm21, 55 + vprolq zmm6, zmm6, 20 + vprolq zmm7, zmm7, 3 + vprolq zmm17, zmm17, 10 + vprolq zmm2, zmm2, 43 + vprolq zmm12, zmm12, 25 + vprolq zmm22, zmm22, 39 + vprolq zmm23, zmm23, 41 + vprolq zmm8, zmm8, 45 + vprolq zmm18, zmm18, 15 + vprolq zmm3, zmm3, 21 + vprolq zmm13, zmm13, 8 + vprolq zmm14, zmm14, 18 + vprolq zmm24, zmm24, 2 + vprolq zmm9, zmm9, 61 + vprolq zmm19, zmm19, 56 + vprolq zmm4, zmm4, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm0, zmm1, zmm2, 210 + vpternlogq zmm1, zmm2, zmm3, 210 + vpternlogq zmm2, zmm3, zmm4, 210 + vpternlogq zmm3, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm5, zmm6, zmm7, 210 + vpternlogq zmm6, zmm7, zmm8, 210 + vpternlogq zmm7, zmm8, zmm9, 210 + vpternlogq zmm8, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm10, zmm11, zmm12, 210 + vpternlogq zmm11, zmm12, zmm13, 210 + vpternlogq zmm12, zmm13, zmm14, 210 + vpternlogq zmm13, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm15, zmm16, zmm17, 210 + vpternlogq zmm16, zmm17, zmm18, 210 + vpternlogq zmm17, zmm18, zmm19, 210 + vpternlogq zmm18, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm20, zmm21, zmm22, 210 + vpternlogq zmm21, zmm22, zmm23, 210 + vpternlogq zmm22, zmm23, zmm24, 210 + vpternlogq zmm23, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1472] + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vmovdqu64 [rcx+512], zmm8 + vmovdqu64 [rcx+576], zmm9 + vmovdqu64 [rcx+640], zmm10 + vmovdqu64 [rcx+704], zmm11 + vmovdqu64 [rcx+768], zmm12 + vmovdqu64 [rcx+832], zmm13 + vmovdqu64 [rcx+896], zmm14 + vmovdqu64 [rcx+960], zmm15 + vmovdqu64 [rcx+1024], zmm16 + vmovdqu64 [rcx+1088], zmm17 + vmovdqu64 [rcx+1152], zmm18 + vmovdqu64 [rcx+1216], zmm19 + vmovdqu64 [rcx+1280], zmm20 + vmovdqu64 [rcx+1344], zmm21 + vmovdqu64 [rcx+1408], zmm22 + vmovdqu64 [rcx+1472], zmm23 + vmovdqu64 [rcx+1536], zmm24 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +sha3_128_blocksx8_seed_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_sha3_256_blocksx8_seed_avx512_end_mark QWORD 8000000000000000h, 8000000000000000h + QWORD 8000000000000000h, 8000000000000000h + QWORD 8000000000000000h, 8000000000000000h + QWORD 8000000000000000h, 8000000000000000h +ptr_L_sha3_256_blocksx8_seed_avx512_end_mark QWORD L_sha3_256_blocksx8_seed_avx512_end_mark +_DATA ENDS +_TEXT SEGMENT READONLY PARA +sha3_256_blocksx8_seed_avx512 PROC + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 + mov rax, QWORD PTR [ptr_L_sha3_x8_avx512_r] + vpbroadcastq zmm0, QWORD PTR [rdx] + vpbroadcastq zmm1, QWORD PTR [rdx+8] + vpbroadcastq zmm2, QWORD PTR [rdx+16] + vpbroadcastq zmm3, QWORD PTR [rdx+24] + vmovdqu64 zmm4, [rcx+256] + vpxorq zmm5, zmm5, zmm5 + vmovdqu64 zmm6, zmm5 + vmovdqu64 zmm7, zmm5 + vmovdqu64 zmm8, zmm5 + vmovdqu64 zmm9, zmm5 + vmovdqu64 zmm10, zmm5 + vmovdqu64 zmm11, zmm5 + vmovdqu64 zmm12, zmm5 + vmovdqu64 zmm13, zmm5 + vmovdqu64 zmm14, zmm5 + vmovdqu64 zmm15, zmm5 + vmovdqu64 zmm16, ptr_L_sha3_256_blocksx8_seed_avx512_end_mark + vmovdqu64 zmm17, zmm5 + vmovdqu64 zmm18, zmm5 + vmovdqu64 zmm19, zmm5 + vmovdqu64 zmm20, zmm5 + vmovdqu64 zmm21, zmm5 + vmovdqu64 zmm22, zmm5 + vmovdqu64 zmm23, zmm5 + vmovdqu64 zmm24, zmm5 + ; Round 0 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm5, zmm10, 150 + vpternlogq zmm25, zmm15, zmm20, 150 + vmovdqu64 zmm26, zmm1 + vpternlogq zmm26, zmm6, zmm11, 150 + vpternlogq zmm26, zmm16, zmm21, 150 + vmovdqu64 zmm27, zmm2 + vpternlogq zmm27, zmm7, zmm12, 150 + vpternlogq zmm27, zmm17, zmm22, 150 + vmovdqu64 zmm28, zmm3 + vpternlogq zmm28, zmm8, zmm13, 150 + vpternlogq zmm28, zmm18, zmm23, 150 + vmovdqu64 zmm29, zmm4 + vpternlogq zmm29, zmm9, zmm14, 150 + vpternlogq zmm29, zmm19, zmm24, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm24, zmm24, zmm30 + ; Rho - rotate each lane in place + vprolq zmm1, zmm1, 1 + vprolq zmm2, zmm2, 62 + vprolq zmm3, zmm3, 28 + vprolq zmm4, zmm4, 27 + vprolq zmm5, zmm5, 36 + vprolq zmm6, zmm6, 44 + vprolq zmm7, zmm7, 6 + vprolq zmm8, zmm8, 55 + vprolq zmm9, zmm9, 20 + vprolq zmm10, zmm10, 3 + vprolq zmm11, zmm11, 10 + vprolq zmm12, zmm12, 43 + vprolq zmm13, zmm13, 25 + vprolq zmm14, zmm14, 39 + vprolq zmm15, zmm15, 41 + vprolq zmm16, zmm16, 45 + vprolq zmm17, zmm17, 15 + vprolq zmm18, zmm18, 21 + vprolq zmm19, zmm19, 8 + vprolq zmm20, zmm20, 18 + vprolq zmm21, zmm21, 2 + vprolq zmm22, zmm22, 61 + vprolq zmm23, zmm23, 56 + vprolq zmm24, zmm24, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm0, zmm6, zmm12, 210 + vpternlogq zmm6, zmm12, zmm18, 210 + vpternlogq zmm12, zmm18, zmm24, 210 + vpternlogq zmm18, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm3, zmm9, zmm10, 210 + vpternlogq zmm9, zmm10, zmm16, 210 + vpternlogq zmm10, zmm16, zmm22, 210 + vpternlogq zmm16, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm1, zmm7, zmm13, 210 + vpternlogq zmm7, zmm13, zmm19, 210 + vpternlogq zmm13, zmm19, zmm20, 210 + vpternlogq zmm19, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm4, zmm5, zmm11, 210 + vpternlogq zmm5, zmm11, zmm17, 210 + vpternlogq zmm11, zmm17, zmm23, 210 + vpternlogq zmm17, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm2, zmm8, zmm14, 210 + vpternlogq zmm8, zmm14, zmm15, 210 + vpternlogq zmm14, zmm15, zmm21, 210 + vpternlogq zmm15, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax] + ; Round 1 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm3, zmm1, 150 + vpternlogq zmm25, zmm4, zmm2, 150 + vmovdqu64 zmm26, zmm6 + vpternlogq zmm26, zmm9, zmm7, 150 + vpternlogq zmm26, zmm5, zmm8, 150 + vmovdqu64 zmm27, zmm12 + vpternlogq zmm27, zmm10, zmm13, 150 + vpternlogq zmm27, zmm11, zmm14, 150 + vmovdqu64 zmm28, zmm18 + vpternlogq zmm28, zmm16, zmm19, 150 + vpternlogq zmm28, zmm17, zmm15, 150 + vmovdqu64 zmm29, zmm24 + vpternlogq zmm29, zmm22, zmm20, 150 + vpternlogq zmm29, zmm23, zmm21, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm21, zmm21, zmm30 + ; Rho - rotate each lane in place + vprolq zmm6, zmm6, 1 + vprolq zmm12, zmm12, 62 + vprolq zmm18, zmm18, 28 + vprolq zmm24, zmm24, 27 + vprolq zmm3, zmm3, 36 + vprolq zmm9, zmm9, 44 + vprolq zmm10, zmm10, 6 + vprolq zmm16, zmm16, 55 + vprolq zmm22, zmm22, 20 + vprolq zmm1, zmm1, 3 + vprolq zmm7, zmm7, 10 + vprolq zmm13, zmm13, 43 + vprolq zmm19, zmm19, 25 + vprolq zmm20, zmm20, 39 + vprolq zmm4, zmm4, 41 + vprolq zmm5, zmm5, 45 + vprolq zmm11, zmm11, 15 + vprolq zmm17, zmm17, 21 + vprolq zmm23, zmm23, 8 + vprolq zmm2, zmm2, 18 + vprolq zmm8, zmm8, 2 + vprolq zmm14, zmm14, 61 + vprolq zmm15, zmm15, 56 + vprolq zmm21, zmm21, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm0, zmm9, zmm13, 210 + vpternlogq zmm9, zmm13, zmm17, 210 + vpternlogq zmm13, zmm17, zmm21, 210 + vpternlogq zmm17, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm18, zmm22, zmm1, 210 + vpternlogq zmm22, zmm1, zmm5, 210 + vpternlogq zmm1, zmm5, zmm14, 210 + vpternlogq zmm5, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm6, zmm10, zmm19, 210 + vpternlogq zmm10, zmm19, zmm23, 210 + vpternlogq zmm19, zmm23, zmm2, 210 + vpternlogq zmm23, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm24, zmm3, zmm7, 210 + vpternlogq zmm3, zmm7, zmm11, 210 + vpternlogq zmm7, zmm11, zmm15, 210 + vpternlogq zmm11, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm12, zmm16, zmm20, 210 + vpternlogq zmm16, zmm20, zmm4, 210 + vpternlogq zmm20, zmm4, zmm8, 210 + vpternlogq zmm4, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+64] + ; Round 2 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm18, zmm6, 150 + vpternlogq zmm25, zmm24, zmm12, 150 + vmovdqu64 zmm26, zmm9 + vpternlogq zmm26, zmm22, zmm10, 150 + vpternlogq zmm26, zmm3, zmm16, 150 + vmovdqu64 zmm27, zmm13 + vpternlogq zmm27, zmm1, zmm19, 150 + vpternlogq zmm27, zmm7, zmm20, 150 + vmovdqu64 zmm28, zmm17 + vpternlogq zmm28, zmm5, zmm23, 150 + vpternlogq zmm28, zmm11, zmm4, 150 + vmovdqu64 zmm29, zmm21 + vpternlogq zmm29, zmm14, zmm2, 150 + vpternlogq zmm29, zmm15, zmm8, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm8, zmm8, zmm30 + ; Rho - rotate each lane in place + vprolq zmm9, zmm9, 1 + vprolq zmm13, zmm13, 62 + vprolq zmm17, zmm17, 28 + vprolq zmm21, zmm21, 27 + vprolq zmm18, zmm18, 36 + vprolq zmm22, zmm22, 44 + vprolq zmm1, zmm1, 6 + vprolq zmm5, zmm5, 55 + vprolq zmm14, zmm14, 20 + vprolq zmm6, zmm6, 3 + vprolq zmm10, zmm10, 10 + vprolq zmm19, zmm19, 43 + vprolq zmm23, zmm23, 25 + vprolq zmm2, zmm2, 39 + vprolq zmm24, zmm24, 41 + vprolq zmm3, zmm3, 45 + vprolq zmm7, zmm7, 15 + vprolq zmm11, zmm11, 21 + vprolq zmm15, zmm15, 8 + vprolq zmm12, zmm12, 18 + vprolq zmm16, zmm16, 2 + vprolq zmm20, zmm20, 61 + vprolq zmm4, zmm4, 56 + vprolq zmm8, zmm8, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm0, zmm22, zmm19, 210 + vpternlogq zmm22, zmm19, zmm11, 210 + vpternlogq zmm19, zmm11, zmm8, 210 + vpternlogq zmm11, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm17, zmm14, zmm6, 210 + vpternlogq zmm14, zmm6, zmm3, 210 + vpternlogq zmm6, zmm3, zmm20, 210 + vpternlogq zmm3, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm9, zmm1, zmm23, 210 + vpternlogq zmm1, zmm23, zmm15, 210 + vpternlogq zmm23, zmm15, zmm12, 210 + vpternlogq zmm15, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm21, zmm18, zmm10, 210 + vpternlogq zmm18, zmm10, zmm7, 210 + vpternlogq zmm10, zmm7, zmm4, 210 + vpternlogq zmm7, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm13, zmm5, zmm2, 210 + vpternlogq zmm5, zmm2, zmm24, 210 + vpternlogq zmm2, zmm24, zmm16, 210 + vpternlogq zmm24, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+128] + ; Round 3 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm17, zmm9, 150 + vpternlogq zmm25, zmm21, zmm13, 150 + vmovdqu64 zmm26, zmm22 + vpternlogq zmm26, zmm14, zmm1, 150 + vpternlogq zmm26, zmm18, zmm5, 150 + vmovdqu64 zmm27, zmm19 + vpternlogq zmm27, zmm6, zmm23, 150 + vpternlogq zmm27, zmm10, zmm2, 150 + vmovdqu64 zmm28, zmm11 + vpternlogq zmm28, zmm3, zmm15, 150 + vpternlogq zmm28, zmm7, zmm24, 150 + vmovdqu64 zmm29, zmm8 + vpternlogq zmm29, zmm20, zmm12, 150 + vpternlogq zmm29, zmm4, zmm16, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm16, zmm16, zmm30 + ; Rho - rotate each lane in place + vprolq zmm22, zmm22, 1 + vprolq zmm19, zmm19, 62 + vprolq zmm11, zmm11, 28 + vprolq zmm8, zmm8, 27 + vprolq zmm17, zmm17, 36 + vprolq zmm14, zmm14, 44 + vprolq zmm6, zmm6, 6 + vprolq zmm3, zmm3, 55 + vprolq zmm20, zmm20, 20 + vprolq zmm9, zmm9, 3 + vprolq zmm1, zmm1, 10 + vprolq zmm23, zmm23, 43 + vprolq zmm15, zmm15, 25 + vprolq zmm12, zmm12, 39 + vprolq zmm21, zmm21, 41 + vprolq zmm18, zmm18, 45 + vprolq zmm10, zmm10, 15 + vprolq zmm7, zmm7, 21 + vprolq zmm4, zmm4, 8 + vprolq zmm13, zmm13, 18 + vprolq zmm5, zmm5, 2 + vprolq zmm2, zmm2, 61 + vprolq zmm24, zmm24, 56 + vprolq zmm16, zmm16, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm0, zmm14, zmm23, 210 + vpternlogq zmm14, zmm23, zmm7, 210 + vpternlogq zmm23, zmm7, zmm16, 210 + vpternlogq zmm7, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm11, zmm20, zmm9, 210 + vpternlogq zmm20, zmm9, zmm18, 210 + vpternlogq zmm9, zmm18, zmm2, 210 + vpternlogq zmm18, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm22, zmm6, zmm15, 210 + vpternlogq zmm6, zmm15, zmm4, 210 + vpternlogq zmm15, zmm4, zmm13, 210 + vpternlogq zmm4, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm8, zmm17, zmm1, 210 + vpternlogq zmm17, zmm1, zmm10, 210 + vpternlogq zmm1, zmm10, zmm24, 210 + vpternlogq zmm10, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm19, zmm3, zmm12, 210 + vpternlogq zmm3, zmm12, zmm21, 210 + vpternlogq zmm12, zmm21, zmm5, 210 + vpternlogq zmm21, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+192] + ; Round 4 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm11, zmm22, 150 + vpternlogq zmm25, zmm8, zmm19, 150 + vmovdqu64 zmm26, zmm14 + vpternlogq zmm26, zmm20, zmm6, 150 + vpternlogq zmm26, zmm17, zmm3, 150 + vmovdqu64 zmm27, zmm23 + vpternlogq zmm27, zmm9, zmm15, 150 + vpternlogq zmm27, zmm1, zmm12, 150 + vmovdqu64 zmm28, zmm7 + vpternlogq zmm28, zmm18, zmm4, 150 + vpternlogq zmm28, zmm10, zmm21, 150 + vmovdqu64 zmm29, zmm16 + vpternlogq zmm29, zmm2, zmm13, 150 + vpternlogq zmm29, zmm24, zmm5, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm5, zmm5, zmm30 + ; Rho - rotate each lane in place + vprolq zmm14, zmm14, 1 + vprolq zmm23, zmm23, 62 + vprolq zmm7, zmm7, 28 + vprolq zmm16, zmm16, 27 + vprolq zmm11, zmm11, 36 + vprolq zmm20, zmm20, 44 + vprolq zmm9, zmm9, 6 + vprolq zmm18, zmm18, 55 + vprolq zmm2, zmm2, 20 + vprolq zmm22, zmm22, 3 + vprolq zmm6, zmm6, 10 + vprolq zmm15, zmm15, 43 + vprolq zmm4, zmm4, 25 + vprolq zmm13, zmm13, 39 + vprolq zmm8, zmm8, 41 + vprolq zmm17, zmm17, 45 + vprolq zmm1, zmm1, 15 + vprolq zmm10, zmm10, 21 + vprolq zmm24, zmm24, 8 + vprolq zmm19, zmm19, 18 + vprolq zmm3, zmm3, 2 + vprolq zmm12, zmm12, 61 + vprolq zmm21, zmm21, 56 + vprolq zmm5, zmm5, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm0, zmm20, zmm15, 210 + vpternlogq zmm20, zmm15, zmm10, 210 + vpternlogq zmm15, zmm10, zmm5, 210 + vpternlogq zmm10, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm7, zmm2, zmm22, 210 + vpternlogq zmm2, zmm22, zmm17, 210 + vpternlogq zmm22, zmm17, zmm12, 210 + vpternlogq zmm17, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm14, zmm9, zmm4, 210 + vpternlogq zmm9, zmm4, zmm24, 210 + vpternlogq zmm4, zmm24, zmm19, 210 + vpternlogq zmm24, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm16, zmm11, zmm6, 210 + vpternlogq zmm11, zmm6, zmm1, 210 + vpternlogq zmm6, zmm1, zmm21, 210 + vpternlogq zmm1, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm23, zmm18, zmm13, 210 + vpternlogq zmm18, zmm13, zmm8, 210 + vpternlogq zmm13, zmm8, zmm3, 210 + vpternlogq zmm8, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+256] + ; Round 5 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm7, zmm14, 150 + vpternlogq zmm25, zmm16, zmm23, 150 + vmovdqu64 zmm26, zmm20 + vpternlogq zmm26, zmm2, zmm9, 150 + vpternlogq zmm26, zmm11, zmm18, 150 + vmovdqu64 zmm27, zmm15 + vpternlogq zmm27, zmm22, zmm4, 150 + vpternlogq zmm27, zmm6, zmm13, 150 + vmovdqu64 zmm28, zmm10 + vpternlogq zmm28, zmm17, zmm24, 150 + vpternlogq zmm28, zmm1, zmm8, 150 + vmovdqu64 zmm29, zmm5 + vpternlogq zmm29, zmm12, zmm19, 150 + vpternlogq zmm29, zmm21, zmm3, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm3, zmm3, zmm30 + ; Rho - rotate each lane in place + vprolq zmm20, zmm20, 1 + vprolq zmm15, zmm15, 62 + vprolq zmm10, zmm10, 28 + vprolq zmm5, zmm5, 27 + vprolq zmm7, zmm7, 36 + vprolq zmm2, zmm2, 44 + vprolq zmm22, zmm22, 6 + vprolq zmm17, zmm17, 55 + vprolq zmm12, zmm12, 20 + vprolq zmm14, zmm14, 3 + vprolq zmm9, zmm9, 10 + vprolq zmm4, zmm4, 43 + vprolq zmm24, zmm24, 25 + vprolq zmm19, zmm19, 39 + vprolq zmm16, zmm16, 41 + vprolq zmm11, zmm11, 45 + vprolq zmm6, zmm6, 15 + vprolq zmm1, zmm1, 21 + vprolq zmm21, zmm21, 8 + vprolq zmm23, zmm23, 18 + vprolq zmm18, zmm18, 2 + vprolq zmm13, zmm13, 61 + vprolq zmm8, zmm8, 56 + vprolq zmm3, zmm3, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm0, zmm2, zmm4, 210 + vpternlogq zmm2, zmm4, zmm1, 210 + vpternlogq zmm4, zmm1, zmm3, 210 + vpternlogq zmm1, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm10, zmm12, zmm14, 210 + vpternlogq zmm12, zmm14, zmm11, 210 + vpternlogq zmm14, zmm11, zmm13, 210 + vpternlogq zmm11, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm20, zmm22, zmm24, 210 + vpternlogq zmm22, zmm24, zmm21, 210 + vpternlogq zmm24, zmm21, zmm23, 210 + vpternlogq zmm21, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm5, zmm7, zmm9, 210 + vpternlogq zmm7, zmm9, zmm6, 210 + vpternlogq zmm9, zmm6, zmm8, 210 + vpternlogq zmm6, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm15, zmm17, zmm19, 210 + vpternlogq zmm17, zmm19, zmm16, 210 + vpternlogq zmm19, zmm16, zmm18, 210 + vpternlogq zmm16, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+320] + ; Round 6 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm10, zmm20, 150 + vpternlogq zmm25, zmm5, zmm15, 150 + vmovdqu64 zmm26, zmm2 + vpternlogq zmm26, zmm12, zmm22, 150 + vpternlogq zmm26, zmm7, zmm17, 150 + vmovdqu64 zmm27, zmm4 + vpternlogq zmm27, zmm14, zmm24, 150 + vpternlogq zmm27, zmm9, zmm19, 150 + vmovdqu64 zmm28, zmm1 + vpternlogq zmm28, zmm11, zmm21, 150 + vpternlogq zmm28, zmm6, zmm16, 150 + vmovdqu64 zmm29, zmm3 + vpternlogq zmm29, zmm13, zmm23, 150 + vpternlogq zmm29, zmm8, zmm18, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm18, zmm18, zmm30 + ; Rho - rotate each lane in place + vprolq zmm2, zmm2, 1 + vprolq zmm4, zmm4, 62 + vprolq zmm1, zmm1, 28 + vprolq zmm3, zmm3, 27 + vprolq zmm10, zmm10, 36 + vprolq zmm12, zmm12, 44 + vprolq zmm14, zmm14, 6 + vprolq zmm11, zmm11, 55 + vprolq zmm13, zmm13, 20 + vprolq zmm20, zmm20, 3 + vprolq zmm22, zmm22, 10 + vprolq zmm24, zmm24, 43 + vprolq zmm21, zmm21, 25 + vprolq zmm23, zmm23, 39 + vprolq zmm5, zmm5, 41 + vprolq zmm7, zmm7, 45 + vprolq zmm9, zmm9, 15 + vprolq zmm6, zmm6, 21 + vprolq zmm8, zmm8, 8 + vprolq zmm15, zmm15, 18 + vprolq zmm17, zmm17, 2 + vprolq zmm19, zmm19, 61 + vprolq zmm16, zmm16, 56 + vprolq zmm18, zmm18, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm0, zmm12, zmm24, 210 + vpternlogq zmm12, zmm24, zmm6, 210 + vpternlogq zmm24, zmm6, zmm18, 210 + vpternlogq zmm6, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm1, zmm13, zmm20, 210 + vpternlogq zmm13, zmm20, zmm7, 210 + vpternlogq zmm20, zmm7, zmm19, 210 + vpternlogq zmm7, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm2, zmm14, zmm21, 210 + vpternlogq zmm14, zmm21, zmm8, 210 + vpternlogq zmm21, zmm8, zmm15, 210 + vpternlogq zmm8, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm3, zmm10, zmm22, 210 + vpternlogq zmm10, zmm22, zmm9, 210 + vpternlogq zmm22, zmm9, zmm16, 210 + vpternlogq zmm9, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm4, zmm11, zmm23, 210 + vpternlogq zmm11, zmm23, zmm5, 210 + vpternlogq zmm23, zmm5, zmm17, 210 + vpternlogq zmm5, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+384] + ; Round 7 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm1, zmm2, 150 + vpternlogq zmm25, zmm3, zmm4, 150 + vmovdqu64 zmm26, zmm12 + vpternlogq zmm26, zmm13, zmm14, 150 + vpternlogq zmm26, zmm10, zmm11, 150 + vmovdqu64 zmm27, zmm24 + vpternlogq zmm27, zmm20, zmm21, 150 + vpternlogq zmm27, zmm22, zmm23, 150 + vmovdqu64 zmm28, zmm6 + vpternlogq zmm28, zmm7, zmm8, 150 + vpternlogq zmm28, zmm9, zmm5, 150 + vmovdqu64 zmm29, zmm18 + vpternlogq zmm29, zmm19, zmm15, 150 + vpternlogq zmm29, zmm16, zmm17, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm17, zmm17, zmm30 + ; Rho - rotate each lane in place + vprolq zmm12, zmm12, 1 + vprolq zmm24, zmm24, 62 + vprolq zmm6, zmm6, 28 + vprolq zmm18, zmm18, 27 + vprolq zmm1, zmm1, 36 + vprolq zmm13, zmm13, 44 + vprolq zmm20, zmm20, 6 + vprolq zmm7, zmm7, 55 + vprolq zmm19, zmm19, 20 + vprolq zmm2, zmm2, 3 + vprolq zmm14, zmm14, 10 + vprolq zmm21, zmm21, 43 + vprolq zmm8, zmm8, 25 + vprolq zmm15, zmm15, 39 + vprolq zmm3, zmm3, 41 + vprolq zmm10, zmm10, 45 + vprolq zmm22, zmm22, 15 + vprolq zmm9, zmm9, 21 + vprolq zmm16, zmm16, 8 + vprolq zmm4, zmm4, 18 + vprolq zmm11, zmm11, 2 + vprolq zmm23, zmm23, 61 + vprolq zmm5, zmm5, 56 + vprolq zmm17, zmm17, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm0, zmm13, zmm21, 210 + vpternlogq zmm13, zmm21, zmm9, 210 + vpternlogq zmm21, zmm9, zmm17, 210 + vpternlogq zmm9, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm6, zmm19, zmm2, 210 + vpternlogq zmm19, zmm2, zmm10, 210 + vpternlogq zmm2, zmm10, zmm23, 210 + vpternlogq zmm10, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm12, zmm20, zmm8, 210 + vpternlogq zmm20, zmm8, zmm16, 210 + vpternlogq zmm8, zmm16, zmm4, 210 + vpternlogq zmm16, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm18, zmm1, zmm14, 210 + vpternlogq zmm1, zmm14, zmm22, 210 + vpternlogq zmm14, zmm22, zmm5, 210 + vpternlogq zmm22, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm24, zmm7, zmm15, 210 + vpternlogq zmm7, zmm15, zmm3, 210 + vpternlogq zmm15, zmm3, zmm11, 210 + vpternlogq zmm3, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+448] + ; Round 8 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm6, zmm12, 150 + vpternlogq zmm25, zmm18, zmm24, 150 + vmovdqu64 zmm26, zmm13 + vpternlogq zmm26, zmm19, zmm20, 150 + vpternlogq zmm26, zmm1, zmm7, 150 + vmovdqu64 zmm27, zmm21 + vpternlogq zmm27, zmm2, zmm8, 150 + vpternlogq zmm27, zmm14, zmm15, 150 + vmovdqu64 zmm28, zmm9 + vpternlogq zmm28, zmm10, zmm16, 150 + vpternlogq zmm28, zmm22, zmm3, 150 + vmovdqu64 zmm29, zmm17 + vpternlogq zmm29, zmm23, zmm4, 150 + vpternlogq zmm29, zmm5, zmm11, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm11, zmm11, zmm30 + ; Rho - rotate each lane in place + vprolq zmm13, zmm13, 1 + vprolq zmm21, zmm21, 62 + vprolq zmm9, zmm9, 28 + vprolq zmm17, zmm17, 27 + vprolq zmm6, zmm6, 36 + vprolq zmm19, zmm19, 44 + vprolq zmm2, zmm2, 6 + vprolq zmm10, zmm10, 55 + vprolq zmm23, zmm23, 20 + vprolq zmm12, zmm12, 3 + vprolq zmm20, zmm20, 10 + vprolq zmm8, zmm8, 43 + vprolq zmm16, zmm16, 25 + vprolq zmm4, zmm4, 39 + vprolq zmm18, zmm18, 41 + vprolq zmm1, zmm1, 45 + vprolq zmm14, zmm14, 15 + vprolq zmm22, zmm22, 21 + vprolq zmm5, zmm5, 8 + vprolq zmm24, zmm24, 18 + vprolq zmm7, zmm7, 2 + vprolq zmm15, zmm15, 61 + vprolq zmm3, zmm3, 56 + vprolq zmm11, zmm11, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm0, zmm19, zmm8, 210 + vpternlogq zmm19, zmm8, zmm22, 210 + vpternlogq zmm8, zmm22, zmm11, 210 + vpternlogq zmm22, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm9, zmm23, zmm12, 210 + vpternlogq zmm23, zmm12, zmm1, 210 + vpternlogq zmm12, zmm1, zmm15, 210 + vpternlogq zmm1, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm13, zmm2, zmm16, 210 + vpternlogq zmm2, zmm16, zmm5, 210 + vpternlogq zmm16, zmm5, zmm24, 210 + vpternlogq zmm5, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm17, zmm6, zmm20, 210 + vpternlogq zmm6, zmm20, zmm14, 210 + vpternlogq zmm20, zmm14, zmm3, 210 + vpternlogq zmm14, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm21, zmm10, zmm4, 210 + vpternlogq zmm10, zmm4, zmm18, 210 + vpternlogq zmm4, zmm18, zmm7, 210 + vpternlogq zmm18, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+512] + ; Round 9 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm9, zmm13, 150 + vpternlogq zmm25, zmm17, zmm21, 150 + vmovdqu64 zmm26, zmm19 + vpternlogq zmm26, zmm23, zmm2, 150 + vpternlogq zmm26, zmm6, zmm10, 150 + vmovdqu64 zmm27, zmm8 + vpternlogq zmm27, zmm12, zmm16, 150 + vpternlogq zmm27, zmm20, zmm4, 150 + vmovdqu64 zmm28, zmm22 + vpternlogq zmm28, zmm1, zmm5, 150 + vpternlogq zmm28, zmm14, zmm18, 150 + vmovdqu64 zmm29, zmm11 + vpternlogq zmm29, zmm15, zmm24, 150 + vpternlogq zmm29, zmm3, zmm7, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm7, zmm7, zmm30 + ; Rho - rotate each lane in place + vprolq zmm19, zmm19, 1 + vprolq zmm8, zmm8, 62 + vprolq zmm22, zmm22, 28 + vprolq zmm11, zmm11, 27 + vprolq zmm9, zmm9, 36 + vprolq zmm23, zmm23, 44 + vprolq zmm12, zmm12, 6 + vprolq zmm1, zmm1, 55 + vprolq zmm15, zmm15, 20 + vprolq zmm13, zmm13, 3 + vprolq zmm2, zmm2, 10 + vprolq zmm16, zmm16, 43 + vprolq zmm5, zmm5, 25 + vprolq zmm24, zmm24, 39 + vprolq zmm17, zmm17, 41 + vprolq zmm6, zmm6, 45 + vprolq zmm20, zmm20, 15 + vprolq zmm14, zmm14, 21 + vprolq zmm3, zmm3, 8 + vprolq zmm21, zmm21, 18 + vprolq zmm10, zmm10, 2 + vprolq zmm4, zmm4, 61 + vprolq zmm18, zmm18, 56 + vprolq zmm7, zmm7, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm0, zmm23, zmm16, 210 + vpternlogq zmm23, zmm16, zmm14, 210 + vpternlogq zmm16, zmm14, zmm7, 210 + vpternlogq zmm14, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm22, zmm15, zmm13, 210 + vpternlogq zmm15, zmm13, zmm6, 210 + vpternlogq zmm13, zmm6, zmm4, 210 + vpternlogq zmm6, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm19, zmm12, zmm5, 210 + vpternlogq zmm12, zmm5, zmm3, 210 + vpternlogq zmm5, zmm3, zmm21, 210 + vpternlogq zmm3, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm11, zmm9, zmm2, 210 + vpternlogq zmm9, zmm2, zmm20, 210 + vpternlogq zmm2, zmm20, zmm18, 210 + vpternlogq zmm20, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm8, zmm1, zmm24, 210 + vpternlogq zmm1, zmm24, zmm17, 210 + vpternlogq zmm24, zmm17, zmm10, 210 + vpternlogq zmm17, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+576] + ; Round 10 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm22, zmm19, 150 + vpternlogq zmm25, zmm11, zmm8, 150 + vmovdqu64 zmm26, zmm23 + vpternlogq zmm26, zmm15, zmm12, 150 + vpternlogq zmm26, zmm9, zmm1, 150 + vmovdqu64 zmm27, zmm16 + vpternlogq zmm27, zmm13, zmm5, 150 + vpternlogq zmm27, zmm2, zmm24, 150 + vmovdqu64 zmm28, zmm14 + vpternlogq zmm28, zmm6, zmm3, 150 + vpternlogq zmm28, zmm20, zmm17, 150 + vmovdqu64 zmm29, zmm7 + vpternlogq zmm29, zmm4, zmm21, 150 + vpternlogq zmm29, zmm18, zmm10, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm10, zmm10, zmm30 + ; Rho - rotate each lane in place + vprolq zmm23, zmm23, 1 + vprolq zmm16, zmm16, 62 + vprolq zmm14, zmm14, 28 + vprolq zmm7, zmm7, 27 + vprolq zmm22, zmm22, 36 + vprolq zmm15, zmm15, 44 + vprolq zmm13, zmm13, 6 + vprolq zmm6, zmm6, 55 + vprolq zmm4, zmm4, 20 + vprolq zmm19, zmm19, 3 + vprolq zmm12, zmm12, 10 + vprolq zmm5, zmm5, 43 + vprolq zmm3, zmm3, 25 + vprolq zmm21, zmm21, 39 + vprolq zmm11, zmm11, 41 + vprolq zmm9, zmm9, 45 + vprolq zmm2, zmm2, 15 + vprolq zmm20, zmm20, 21 + vprolq zmm18, zmm18, 8 + vprolq zmm8, zmm8, 18 + vprolq zmm1, zmm1, 2 + vprolq zmm24, zmm24, 61 + vprolq zmm17, zmm17, 56 + vprolq zmm10, zmm10, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm0, zmm15, zmm5, 210 + vpternlogq zmm15, zmm5, zmm20, 210 + vpternlogq zmm5, zmm20, zmm10, 210 + vpternlogq zmm20, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm14, zmm4, zmm19, 210 + vpternlogq zmm4, zmm19, zmm9, 210 + vpternlogq zmm19, zmm9, zmm24, 210 + vpternlogq zmm9, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm23, zmm13, zmm3, 210 + vpternlogq zmm13, zmm3, zmm18, 210 + vpternlogq zmm3, zmm18, zmm8, 210 + vpternlogq zmm18, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm7, zmm22, zmm12, 210 + vpternlogq zmm22, zmm12, zmm2, 210 + vpternlogq zmm12, zmm2, zmm17, 210 + vpternlogq zmm2, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm16, zmm6, zmm21, 210 + vpternlogq zmm6, zmm21, zmm11, 210 + vpternlogq zmm21, zmm11, zmm1, 210 + vpternlogq zmm11, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+640] + ; Round 11 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm14, zmm23, 150 + vpternlogq zmm25, zmm7, zmm16, 150 + vmovdqu64 zmm26, zmm15 + vpternlogq zmm26, zmm4, zmm13, 150 + vpternlogq zmm26, zmm22, zmm6, 150 + vmovdqu64 zmm27, zmm5 + vpternlogq zmm27, zmm19, zmm3, 150 + vpternlogq zmm27, zmm12, zmm21, 150 + vmovdqu64 zmm28, zmm20 + vpternlogq zmm28, zmm9, zmm18, 150 + vpternlogq zmm28, zmm2, zmm11, 150 + vmovdqu64 zmm29, zmm10 + vpternlogq zmm29, zmm24, zmm8, 150 + vpternlogq zmm29, zmm17, zmm1, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm21, zmm21, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm1, zmm1, zmm30 + ; Rho - rotate each lane in place + vprolq zmm15, zmm15, 1 + vprolq zmm5, zmm5, 62 + vprolq zmm20, zmm20, 28 + vprolq zmm10, zmm10, 27 + vprolq zmm14, zmm14, 36 + vprolq zmm4, zmm4, 44 + vprolq zmm19, zmm19, 6 + vprolq zmm9, zmm9, 55 + vprolq zmm24, zmm24, 20 + vprolq zmm23, zmm23, 3 + vprolq zmm13, zmm13, 10 + vprolq zmm3, zmm3, 43 + vprolq zmm18, zmm18, 25 + vprolq zmm8, zmm8, 39 + vprolq zmm7, zmm7, 41 + vprolq zmm22, zmm22, 45 + vprolq zmm12, zmm12, 15 + vprolq zmm2, zmm2, 21 + vprolq zmm17, zmm17, 8 + vprolq zmm16, zmm16, 18 + vprolq zmm6, zmm6, 2 + vprolq zmm21, zmm21, 61 + vprolq zmm11, zmm11, 56 + vprolq zmm1, zmm1, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm0, zmm4, zmm3, 210 + vpternlogq zmm4, zmm3, zmm2, 210 + vpternlogq zmm3, zmm2, zmm1, 210 + vpternlogq zmm2, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm20, zmm24, zmm23, 210 + vpternlogq zmm24, zmm23, zmm22, 210 + vpternlogq zmm23, zmm22, zmm21, 210 + vpternlogq zmm22, zmm21, zmm30, 210 + vpternlogq zmm21, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm15, zmm19, zmm18, 210 + vpternlogq zmm19, zmm18, zmm17, 210 + vpternlogq zmm18, zmm17, zmm16, 210 + vpternlogq zmm17, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm10, zmm14, zmm13, 210 + vpternlogq zmm14, zmm13, zmm12, 210 + vpternlogq zmm13, zmm12, zmm11, 210 + vpternlogq zmm12, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm9 + vpternlogq zmm5, zmm9, zmm8, 210 + vpternlogq zmm9, zmm8, zmm7, 210 + vpternlogq zmm8, zmm7, zmm6, 210 + vpternlogq zmm7, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+704] + ; Round 12 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm20, zmm15, 150 + vpternlogq zmm25, zmm10, zmm5, 150 + vmovdqu64 zmm26, zmm4 + vpternlogq zmm26, zmm24, zmm19, 150 + vpternlogq zmm26, zmm14, zmm9, 150 + vmovdqu64 zmm27, zmm3 + vpternlogq zmm27, zmm23, zmm18, 150 + vpternlogq zmm27, zmm13, zmm8, 150 + vmovdqu64 zmm28, zmm2 + vpternlogq zmm28, zmm22, zmm17, 150 + vpternlogq zmm28, zmm12, zmm7, 150 + vmovdqu64 zmm29, zmm1 + vpternlogq zmm29, zmm21, zmm16, 150 + vpternlogq zmm29, zmm11, zmm6, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm8, zmm8, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm6, zmm6, zmm30 + ; Rho - rotate each lane in place + vprolq zmm4, zmm4, 1 + vprolq zmm3, zmm3, 62 + vprolq zmm2, zmm2, 28 + vprolq zmm1, zmm1, 27 + vprolq zmm20, zmm20, 36 + vprolq zmm24, zmm24, 44 + vprolq zmm23, zmm23, 6 + vprolq zmm22, zmm22, 55 + vprolq zmm21, zmm21, 20 + vprolq zmm15, zmm15, 3 + vprolq zmm19, zmm19, 10 + vprolq zmm18, zmm18, 43 + vprolq zmm17, zmm17, 25 + vprolq zmm16, zmm16, 39 + vprolq zmm10, zmm10, 41 + vprolq zmm14, zmm14, 45 + vprolq zmm13, zmm13, 15 + vprolq zmm12, zmm12, 21 + vprolq zmm11, zmm11, 8 + vprolq zmm5, zmm5, 18 + vprolq zmm9, zmm9, 2 + vprolq zmm8, zmm8, 61 + vprolq zmm7, zmm7, 56 + vprolq zmm6, zmm6, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm0, zmm24, zmm18, 210 + vpternlogq zmm24, zmm18, zmm12, 210 + vpternlogq zmm18, zmm12, zmm6, 210 + vpternlogq zmm12, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm2, zmm21, zmm15, 210 + vpternlogq zmm21, zmm15, zmm14, 210 + vpternlogq zmm15, zmm14, zmm8, 210 + vpternlogq zmm14, zmm8, zmm30, 210 + vpternlogq zmm8, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm4, zmm23, zmm17, 210 + vpternlogq zmm23, zmm17, zmm11, 210 + vpternlogq zmm17, zmm11, zmm5, 210 + vpternlogq zmm11, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm1, zmm20, zmm19, 210 + vpternlogq zmm20, zmm19, zmm13, 210 + vpternlogq zmm19, zmm13, zmm7, 210 + vpternlogq zmm13, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm22 + vpternlogq zmm3, zmm22, zmm16, 210 + vpternlogq zmm22, zmm16, zmm10, 210 + vpternlogq zmm16, zmm10, zmm9, 210 + vpternlogq zmm10, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+768] + ; Round 13 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm2, zmm4, 150 + vpternlogq zmm25, zmm1, zmm3, 150 + vmovdqu64 zmm26, zmm24 + vpternlogq zmm26, zmm21, zmm23, 150 + vpternlogq zmm26, zmm20, zmm22, 150 + vmovdqu64 zmm27, zmm18 + vpternlogq zmm27, zmm15, zmm17, 150 + vpternlogq zmm27, zmm19, zmm16, 150 + vmovdqu64 zmm28, zmm12 + vpternlogq zmm28, zmm14, zmm11, 150 + vpternlogq zmm28, zmm13, zmm10, 150 + vmovdqu64 zmm29, zmm6 + vpternlogq zmm29, zmm8, zmm5, 150 + vpternlogq zmm29, zmm7, zmm9, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm16, zmm16, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm9, zmm9, zmm30 + ; Rho - rotate each lane in place + vprolq zmm24, zmm24, 1 + vprolq zmm18, zmm18, 62 + vprolq zmm12, zmm12, 28 + vprolq zmm6, zmm6, 27 + vprolq zmm2, zmm2, 36 + vprolq zmm21, zmm21, 44 + vprolq zmm15, zmm15, 6 + vprolq zmm14, zmm14, 55 + vprolq zmm8, zmm8, 20 + vprolq zmm4, zmm4, 3 + vprolq zmm23, zmm23, 10 + vprolq zmm17, zmm17, 43 + vprolq zmm11, zmm11, 25 + vprolq zmm5, zmm5, 39 + vprolq zmm1, zmm1, 41 + vprolq zmm20, zmm20, 45 + vprolq zmm19, zmm19, 15 + vprolq zmm13, zmm13, 21 + vprolq zmm7, zmm7, 8 + vprolq zmm3, zmm3, 18 + vprolq zmm22, zmm22, 2 + vprolq zmm16, zmm16, 61 + vprolq zmm10, zmm10, 56 + vprolq zmm9, zmm9, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm0, zmm21, zmm17, 210 + vpternlogq zmm21, zmm17, zmm13, 210 + vpternlogq zmm17, zmm13, zmm9, 210 + vpternlogq zmm13, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm12, zmm8, zmm4, 210 + vpternlogq zmm8, zmm4, zmm20, 210 + vpternlogq zmm4, zmm20, zmm16, 210 + vpternlogq zmm20, zmm16, zmm30, 210 + vpternlogq zmm16, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm24, zmm15, zmm11, 210 + vpternlogq zmm15, zmm11, zmm7, 210 + vpternlogq zmm11, zmm7, zmm3, 210 + vpternlogq zmm7, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm6, zmm2, zmm23, 210 + vpternlogq zmm2, zmm23, zmm19, 210 + vpternlogq zmm23, zmm19, zmm10, 210 + vpternlogq zmm19, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm14 + vpternlogq zmm18, zmm14, zmm5, 210 + vpternlogq zmm14, zmm5, zmm1, 210 + vpternlogq zmm5, zmm1, zmm22, 210 + vpternlogq zmm1, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+832] + ; Round 14 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm12, zmm24, 150 + vpternlogq zmm25, zmm6, zmm18, 150 + vmovdqu64 zmm26, zmm21 + vpternlogq zmm26, zmm8, zmm15, 150 + vpternlogq zmm26, zmm2, zmm14, 150 + vmovdqu64 zmm27, zmm17 + vpternlogq zmm27, zmm4, zmm11, 150 + vpternlogq zmm27, zmm23, zmm5, 150 + vmovdqu64 zmm28, zmm13 + vpternlogq zmm28, zmm20, zmm7, 150 + vpternlogq zmm28, zmm19, zmm1, 150 + vmovdqu64 zmm29, zmm9 + vpternlogq zmm29, zmm16, zmm3, 150 + vpternlogq zmm29, zmm10, zmm22, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm5, zmm5, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm22, zmm22, zmm30 + ; Rho - rotate each lane in place + vprolq zmm21, zmm21, 1 + vprolq zmm17, zmm17, 62 + vprolq zmm13, zmm13, 28 + vprolq zmm9, zmm9, 27 + vprolq zmm12, zmm12, 36 + vprolq zmm8, zmm8, 44 + vprolq zmm4, zmm4, 6 + vprolq zmm20, zmm20, 55 + vprolq zmm16, zmm16, 20 + vprolq zmm24, zmm24, 3 + vprolq zmm15, zmm15, 10 + vprolq zmm11, zmm11, 43 + vprolq zmm7, zmm7, 25 + vprolq zmm3, zmm3, 39 + vprolq zmm6, zmm6, 41 + vprolq zmm2, zmm2, 45 + vprolq zmm23, zmm23, 15 + vprolq zmm19, zmm19, 21 + vprolq zmm10, zmm10, 8 + vprolq zmm18, zmm18, 18 + vprolq zmm14, zmm14, 2 + vprolq zmm5, zmm5, 61 + vprolq zmm1, zmm1, 56 + vprolq zmm22, zmm22, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm0, zmm8, zmm11, 210 + vpternlogq zmm8, zmm11, zmm19, 210 + vpternlogq zmm11, zmm19, zmm22, 210 + vpternlogq zmm19, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm13, zmm16, zmm24, 210 + vpternlogq zmm16, zmm24, zmm2, 210 + vpternlogq zmm24, zmm2, zmm5, 210 + vpternlogq zmm2, zmm5, zmm30, 210 + vpternlogq zmm5, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm21, zmm4, zmm7, 210 + vpternlogq zmm4, zmm7, zmm10, 210 + vpternlogq zmm7, zmm10, zmm18, 210 + vpternlogq zmm10, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm9, zmm12, zmm15, 210 + vpternlogq zmm12, zmm15, zmm23, 210 + vpternlogq zmm15, zmm23, zmm1, 210 + vpternlogq zmm23, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm20 + vpternlogq zmm17, zmm20, zmm3, 210 + vpternlogq zmm20, zmm3, zmm6, 210 + vpternlogq zmm3, zmm6, zmm14, 210 + vpternlogq zmm6, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+896] + ; Round 15 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm13, zmm21, 150 + vpternlogq zmm25, zmm9, zmm17, 150 + vmovdqu64 zmm26, zmm8 + vpternlogq zmm26, zmm16, zmm4, 150 + vpternlogq zmm26, zmm12, zmm20, 150 + vmovdqu64 zmm27, zmm11 + vpternlogq zmm27, zmm24, zmm7, 150 + vpternlogq zmm27, zmm15, zmm3, 150 + vmovdqu64 zmm28, zmm19 + vpternlogq zmm28, zmm2, zmm10, 150 + vpternlogq zmm28, zmm23, zmm6, 150 + vmovdqu64 zmm29, zmm22 + vpternlogq zmm29, zmm5, zmm18, 150 + vpternlogq zmm29, zmm1, zmm14, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm3, zmm3, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm14, zmm14, zmm30 + ; Rho - rotate each lane in place + vprolq zmm8, zmm8, 1 + vprolq zmm11, zmm11, 62 + vprolq zmm19, zmm19, 28 + vprolq zmm22, zmm22, 27 + vprolq zmm13, zmm13, 36 + vprolq zmm16, zmm16, 44 + vprolq zmm24, zmm24, 6 + vprolq zmm2, zmm2, 55 + vprolq zmm5, zmm5, 20 + vprolq zmm21, zmm21, 3 + vprolq zmm4, zmm4, 10 + vprolq zmm7, zmm7, 43 + vprolq zmm10, zmm10, 25 + vprolq zmm18, zmm18, 39 + vprolq zmm9, zmm9, 41 + vprolq zmm12, zmm12, 45 + vprolq zmm15, zmm15, 15 + vprolq zmm23, zmm23, 21 + vprolq zmm1, zmm1, 8 + vprolq zmm17, zmm17, 18 + vprolq zmm20, zmm20, 2 + vprolq zmm3, zmm3, 61 + vprolq zmm6, zmm6, 56 + vprolq zmm14, zmm14, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm0, zmm16, zmm7, 210 + vpternlogq zmm16, zmm7, zmm23, 210 + vpternlogq zmm7, zmm23, zmm14, 210 + vpternlogq zmm23, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm19, zmm5, zmm21, 210 + vpternlogq zmm5, zmm21, zmm12, 210 + vpternlogq zmm21, zmm12, zmm3, 210 + vpternlogq zmm12, zmm3, zmm30, 210 + vpternlogq zmm3, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm8, zmm24, zmm10, 210 + vpternlogq zmm24, zmm10, zmm1, 210 + vpternlogq zmm10, zmm1, zmm17, 210 + vpternlogq zmm1, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm22, zmm13, zmm4, 210 + vpternlogq zmm13, zmm4, zmm15, 210 + vpternlogq zmm4, zmm15, zmm6, 210 + vpternlogq zmm15, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm2 + vpternlogq zmm11, zmm2, zmm18, 210 + vpternlogq zmm2, zmm18, zmm9, 210 + vpternlogq zmm18, zmm9, zmm20, 210 + vpternlogq zmm9, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+960] + ; Round 16 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm19, zmm8, 150 + vpternlogq zmm25, zmm22, zmm11, 150 + vmovdqu64 zmm26, zmm16 + vpternlogq zmm26, zmm5, zmm24, 150 + vpternlogq zmm26, zmm13, zmm2, 150 + vmovdqu64 zmm27, zmm7 + vpternlogq zmm27, zmm21, zmm10, 150 + vpternlogq zmm27, zmm4, zmm18, 150 + vmovdqu64 zmm28, zmm23 + vpternlogq zmm28, zmm12, zmm1, 150 + vpternlogq zmm28, zmm15, zmm9, 150 + vmovdqu64 zmm29, zmm14 + vpternlogq zmm29, zmm3, zmm17, 150 + vpternlogq zmm29, zmm6, zmm20, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm18, zmm18, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm20, zmm20, zmm30 + ; Rho - rotate each lane in place + vprolq zmm16, zmm16, 1 + vprolq zmm7, zmm7, 62 + vprolq zmm23, zmm23, 28 + vprolq zmm14, zmm14, 27 + vprolq zmm19, zmm19, 36 + vprolq zmm5, zmm5, 44 + vprolq zmm21, zmm21, 6 + vprolq zmm12, zmm12, 55 + vprolq zmm3, zmm3, 20 + vprolq zmm8, zmm8, 3 + vprolq zmm24, zmm24, 10 + vprolq zmm10, zmm10, 43 + vprolq zmm1, zmm1, 25 + vprolq zmm17, zmm17, 39 + vprolq zmm22, zmm22, 41 + vprolq zmm13, zmm13, 45 + vprolq zmm4, zmm4, 15 + vprolq zmm15, zmm15, 21 + vprolq zmm6, zmm6, 8 + vprolq zmm11, zmm11, 18 + vprolq zmm2, zmm2, 2 + vprolq zmm18, zmm18, 61 + vprolq zmm9, zmm9, 56 + vprolq zmm20, zmm20, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm0, zmm5, zmm10, 210 + vpternlogq zmm5, zmm10, zmm15, 210 + vpternlogq zmm10, zmm15, zmm20, 210 + vpternlogq zmm15, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm23, zmm3, zmm8, 210 + vpternlogq zmm3, zmm8, zmm13, 210 + vpternlogq zmm8, zmm13, zmm18, 210 + vpternlogq zmm13, zmm18, zmm30, 210 + vpternlogq zmm18, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm16, zmm21, zmm1, 210 + vpternlogq zmm21, zmm1, zmm6, 210 + vpternlogq zmm1, zmm6, zmm11, 210 + vpternlogq zmm6, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm14, zmm19, zmm24, 210 + vpternlogq zmm19, zmm24, zmm4, 210 + vpternlogq zmm24, zmm4, zmm9, 210 + vpternlogq zmm4, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm12 + vpternlogq zmm7, zmm12, zmm17, 210 + vpternlogq zmm12, zmm17, zmm22, 210 + vpternlogq zmm17, zmm22, zmm2, 210 + vpternlogq zmm22, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1024] + ; Round 17 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm23, zmm16, 150 + vpternlogq zmm25, zmm14, zmm7, 150 + vmovdqu64 zmm26, zmm5 + vpternlogq zmm26, zmm3, zmm21, 150 + vpternlogq zmm26, zmm19, zmm12, 150 + vmovdqu64 zmm27, zmm10 + vpternlogq zmm27, zmm8, zmm1, 150 + vpternlogq zmm27, zmm24, zmm17, 150 + vmovdqu64 zmm28, zmm15 + vpternlogq zmm28, zmm13, zmm6, 150 + vpternlogq zmm28, zmm4, zmm22, 150 + vmovdqu64 zmm29, zmm20 + vpternlogq zmm29, zmm18, zmm11, 150 + vpternlogq zmm29, zmm9, zmm2, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm17, zmm17, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm2, zmm2, zmm30 + ; Rho - rotate each lane in place + vprolq zmm5, zmm5, 1 + vprolq zmm10, zmm10, 62 + vprolq zmm15, zmm15, 28 + vprolq zmm20, zmm20, 27 + vprolq zmm23, zmm23, 36 + vprolq zmm3, zmm3, 44 + vprolq zmm8, zmm8, 6 + vprolq zmm13, zmm13, 55 + vprolq zmm18, zmm18, 20 + vprolq zmm16, zmm16, 3 + vprolq zmm21, zmm21, 10 + vprolq zmm1, zmm1, 43 + vprolq zmm6, zmm6, 25 + vprolq zmm11, zmm11, 39 + vprolq zmm14, zmm14, 41 + vprolq zmm19, zmm19, 45 + vprolq zmm24, zmm24, 15 + vprolq zmm4, zmm4, 21 + vprolq zmm9, zmm9, 8 + vprolq zmm7, zmm7, 18 + vprolq zmm12, zmm12, 2 + vprolq zmm17, zmm17, 61 + vprolq zmm22, zmm22, 56 + vprolq zmm2, zmm2, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm0, zmm3, zmm1, 210 + vpternlogq zmm3, zmm1, zmm4, 210 + vpternlogq zmm1, zmm4, zmm2, 210 + vpternlogq zmm4, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm15, zmm18, zmm16, 210 + vpternlogq zmm18, zmm16, zmm19, 210 + vpternlogq zmm16, zmm19, zmm17, 210 + vpternlogq zmm19, zmm17, zmm30, 210 + vpternlogq zmm17, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm5, zmm8, zmm6, 210 + vpternlogq zmm8, zmm6, zmm9, 210 + vpternlogq zmm6, zmm9, zmm7, 210 + vpternlogq zmm9, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm20, zmm23, zmm21, 210 + vpternlogq zmm23, zmm21, zmm24, 210 + vpternlogq zmm21, zmm24, zmm22, 210 + vpternlogq zmm24, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm13 + vpternlogq zmm10, zmm13, zmm11, 210 + vpternlogq zmm13, zmm11, zmm14, 210 + vpternlogq zmm11, zmm14, zmm12, 210 + vpternlogq zmm14, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1088] + ; Round 18 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm15, zmm5, 150 + vpternlogq zmm25, zmm20, zmm10, 150 + vmovdqu64 zmm26, zmm3 + vpternlogq zmm26, zmm18, zmm8, 150 + vpternlogq zmm26, zmm23, zmm13, 150 + vmovdqu64 zmm27, zmm1 + vpternlogq zmm27, zmm16, zmm6, 150 + vpternlogq zmm27, zmm21, zmm11, 150 + vmovdqu64 zmm28, zmm4 + vpternlogq zmm28, zmm19, zmm9, 150 + vpternlogq zmm28, zmm24, zmm14, 150 + vmovdqu64 zmm29, zmm2 + vpternlogq zmm29, zmm17, zmm7, 150 + vpternlogq zmm29, zmm22, zmm12, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm11, zmm11, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm12, zmm12, zmm30 + ; Rho - rotate each lane in place + vprolq zmm3, zmm3, 1 + vprolq zmm1, zmm1, 62 + vprolq zmm4, zmm4, 28 + vprolq zmm2, zmm2, 27 + vprolq zmm15, zmm15, 36 + vprolq zmm18, zmm18, 44 + vprolq zmm16, zmm16, 6 + vprolq zmm19, zmm19, 55 + vprolq zmm17, zmm17, 20 + vprolq zmm5, zmm5, 3 + vprolq zmm8, zmm8, 10 + vprolq zmm6, zmm6, 43 + vprolq zmm9, zmm9, 25 + vprolq zmm7, zmm7, 39 + vprolq zmm20, zmm20, 41 + vprolq zmm23, zmm23, 45 + vprolq zmm21, zmm21, 15 + vprolq zmm24, zmm24, 21 + vprolq zmm22, zmm22, 8 + vprolq zmm10, zmm10, 18 + vprolq zmm13, zmm13, 2 + vprolq zmm11, zmm11, 61 + vprolq zmm14, zmm14, 56 + vprolq zmm12, zmm12, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm0, zmm18, zmm6, 210 + vpternlogq zmm18, zmm6, zmm24, 210 + vpternlogq zmm6, zmm24, zmm12, 210 + vpternlogq zmm24, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm4 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm4, zmm17, zmm5, 210 + vpternlogq zmm17, zmm5, zmm23, 210 + vpternlogq zmm5, zmm23, zmm11, 210 + vpternlogq zmm23, zmm11, zmm30, 210 + vpternlogq zmm11, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm3 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm3, zmm16, zmm9, 210 + vpternlogq zmm16, zmm9, zmm22, 210 + vpternlogq zmm9, zmm22, zmm10, 210 + vpternlogq zmm22, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm2 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm2, zmm15, zmm8, 210 + vpternlogq zmm15, zmm8, zmm21, 210 + vpternlogq zmm8, zmm21, zmm14, 210 + vpternlogq zmm21, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm1 + vmovdqu64 zmm31, zmm19 + vpternlogq zmm1, zmm19, zmm7, 210 + vpternlogq zmm19, zmm7, zmm20, 210 + vpternlogq zmm7, zmm20, zmm13, 210 + vpternlogq zmm20, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1152] + ; Round 19 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm4, zmm3, 150 + vpternlogq zmm25, zmm2, zmm1, 150 + vmovdqu64 zmm26, zmm18 + vpternlogq zmm26, zmm17, zmm16, 150 + vpternlogq zmm26, zmm15, zmm19, 150 + vmovdqu64 zmm27, zmm6 + vpternlogq zmm27, zmm5, zmm9, 150 + vpternlogq zmm27, zmm8, zmm7, 150 + vmovdqu64 zmm28, zmm24 + vpternlogq zmm28, zmm23, zmm22, 150 + vpternlogq zmm28, zmm21, zmm20, 150 + vmovdqu64 zmm29, zmm12 + vpternlogq zmm29, zmm11, zmm10, 150 + vpternlogq zmm29, zmm14, zmm13, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm7, zmm7, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm20, zmm20, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm13, zmm13, zmm30 + ; Rho - rotate each lane in place + vprolq zmm18, zmm18, 1 + vprolq zmm6, zmm6, 62 + vprolq zmm24, zmm24, 28 + vprolq zmm12, zmm12, 27 + vprolq zmm4, zmm4, 36 + vprolq zmm17, zmm17, 44 + vprolq zmm5, zmm5, 6 + vprolq zmm23, zmm23, 55 + vprolq zmm11, zmm11, 20 + vprolq zmm3, zmm3, 3 + vprolq zmm16, zmm16, 10 + vprolq zmm9, zmm9, 43 + vprolq zmm22, zmm22, 25 + vprolq zmm10, zmm10, 39 + vprolq zmm2, zmm2, 41 + vprolq zmm15, zmm15, 45 + vprolq zmm8, zmm8, 15 + vprolq zmm21, zmm21, 21 + vprolq zmm14, zmm14, 8 + vprolq zmm1, zmm1, 18 + vprolq zmm19, zmm19, 2 + vprolq zmm7, zmm7, 61 + vprolq zmm20, zmm20, 56 + vprolq zmm13, zmm13, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm0, zmm17, zmm9, 210 + vpternlogq zmm17, zmm9, zmm21, 210 + vpternlogq zmm9, zmm21, zmm13, 210 + vpternlogq zmm21, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm24 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm24, zmm11, zmm3, 210 + vpternlogq zmm11, zmm3, zmm15, 210 + vpternlogq zmm3, zmm15, zmm7, 210 + vpternlogq zmm15, zmm7, zmm30, 210 + vpternlogq zmm7, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm18 + vmovdqu64 zmm31, zmm5 + vpternlogq zmm18, zmm5, zmm22, 210 + vpternlogq zmm5, zmm22, zmm14, 210 + vpternlogq zmm22, zmm14, zmm1, 210 + vpternlogq zmm14, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm12 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm12, zmm4, zmm16, 210 + vpternlogq zmm4, zmm16, zmm8, 210 + vpternlogq zmm16, zmm8, zmm20, 210 + vpternlogq zmm8, zmm20, zmm30, 210 + vpternlogq zmm20, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm6 + vmovdqu64 zmm31, zmm23 + vpternlogq zmm6, zmm23, zmm10, 210 + vpternlogq zmm23, zmm10, zmm2, 210 + vpternlogq zmm10, zmm2, zmm19, 210 + vpternlogq zmm2, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1216] + ; Round 20 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm24, zmm18, 150 + vpternlogq zmm25, zmm12, zmm6, 150 + vmovdqu64 zmm26, zmm17 + vpternlogq zmm26, zmm11, zmm5, 150 + vpternlogq zmm26, zmm4, zmm23, 150 + vmovdqu64 zmm27, zmm9 + vpternlogq zmm27, zmm3, zmm22, 150 + vpternlogq zmm27, zmm16, zmm10, 150 + vmovdqu64 zmm28, zmm21 + vpternlogq zmm28, zmm15, zmm14, 150 + vpternlogq zmm28, zmm8, zmm2, 150 + vmovdqu64 zmm29, zmm13 + vpternlogq zmm29, zmm7, zmm1, 150 + vpternlogq zmm29, zmm20, zmm19, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm23, zmm23, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm10, zmm10, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm2, zmm2, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm19, zmm19, zmm30 + ; Rho - rotate each lane in place + vprolq zmm17, zmm17, 1 + vprolq zmm9, zmm9, 62 + vprolq zmm21, zmm21, 28 + vprolq zmm13, zmm13, 27 + vprolq zmm24, zmm24, 36 + vprolq zmm11, zmm11, 44 + vprolq zmm3, zmm3, 6 + vprolq zmm15, zmm15, 55 + vprolq zmm7, zmm7, 20 + vprolq zmm18, zmm18, 3 + vprolq zmm5, zmm5, 10 + vprolq zmm22, zmm22, 43 + vprolq zmm14, zmm14, 25 + vprolq zmm1, zmm1, 39 + vprolq zmm12, zmm12, 41 + vprolq zmm4, zmm4, 45 + vprolq zmm16, zmm16, 15 + vprolq zmm8, zmm8, 21 + vprolq zmm20, zmm20, 8 + vprolq zmm6, zmm6, 18 + vprolq zmm23, zmm23, 2 + vprolq zmm10, zmm10, 61 + vprolq zmm2, zmm2, 56 + vprolq zmm19, zmm19, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm0, zmm11, zmm22, 210 + vpternlogq zmm11, zmm22, zmm8, 210 + vpternlogq zmm22, zmm8, zmm19, 210 + vpternlogq zmm8, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm21 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm21, zmm7, zmm18, 210 + vpternlogq zmm7, zmm18, zmm4, 210 + vpternlogq zmm18, zmm4, zmm10, 210 + vpternlogq zmm4, zmm10, zmm30, 210 + vpternlogq zmm10, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm17 + vmovdqu64 zmm31, zmm3 + vpternlogq zmm17, zmm3, zmm14, 210 + vpternlogq zmm3, zmm14, zmm20, 210 + vpternlogq zmm14, zmm20, zmm6, 210 + vpternlogq zmm20, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm13 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm13, zmm24, zmm5, 210 + vpternlogq zmm24, zmm5, zmm16, 210 + vpternlogq zmm5, zmm16, zmm2, 210 + vpternlogq zmm16, zmm2, zmm30, 210 + vpternlogq zmm2, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm9 + vmovdqu64 zmm31, zmm15 + vpternlogq zmm9, zmm15, zmm1, 210 + vpternlogq zmm15, zmm1, zmm12, 210 + vpternlogq zmm1, zmm12, zmm23, 210 + vpternlogq zmm12, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1280] + ; Round 21 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm21, zmm17, 150 + vpternlogq zmm25, zmm13, zmm9, 150 + vmovdqu64 zmm26, zmm11 + vpternlogq zmm26, zmm7, zmm3, 150 + vpternlogq zmm26, zmm24, zmm15, 150 + vmovdqu64 zmm27, zmm22 + vpternlogq zmm27, zmm18, zmm14, 150 + vpternlogq zmm27, zmm5, zmm1, 150 + vmovdqu64 zmm28, zmm8 + vpternlogq zmm28, zmm4, zmm20, 150 + vpternlogq zmm28, zmm16, zmm12, 150 + vmovdqu64 zmm29, zmm19 + vpternlogq zmm29, zmm10, zmm6, 150 + vpternlogq zmm29, zmm2, zmm23, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm15, zmm15, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm1, zmm1, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm4, zmm4, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm12, zmm12, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm23, zmm23, zmm30 + ; Rho - rotate each lane in place + vprolq zmm11, zmm11, 1 + vprolq zmm22, zmm22, 62 + vprolq zmm8, zmm8, 28 + vprolq zmm19, zmm19, 27 + vprolq zmm21, zmm21, 36 + vprolq zmm7, zmm7, 44 + vprolq zmm18, zmm18, 6 + vprolq zmm4, zmm4, 55 + vprolq zmm10, zmm10, 20 + vprolq zmm17, zmm17, 3 + vprolq zmm3, zmm3, 10 + vprolq zmm14, zmm14, 43 + vprolq zmm20, zmm20, 25 + vprolq zmm6, zmm6, 39 + vprolq zmm13, zmm13, 41 + vprolq zmm24, zmm24, 45 + vprolq zmm5, zmm5, 15 + vprolq zmm16, zmm16, 21 + vprolq zmm2, zmm2, 8 + vprolq zmm9, zmm9, 18 + vprolq zmm15, zmm15, 2 + vprolq zmm1, zmm1, 61 + vprolq zmm12, zmm12, 56 + vprolq zmm23, zmm23, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm7 + vpternlogq zmm0, zmm7, zmm14, 210 + vpternlogq zmm7, zmm14, zmm16, 210 + vpternlogq zmm14, zmm16, zmm23, 210 + vpternlogq zmm16, zmm23, zmm30, 210 + vpternlogq zmm23, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm8 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm8, zmm10, zmm17, 210 + vpternlogq zmm10, zmm17, zmm24, 210 + vpternlogq zmm17, zmm24, zmm1, 210 + vpternlogq zmm24, zmm1, zmm30, 210 + vpternlogq zmm1, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm11 + vmovdqu64 zmm31, zmm18 + vpternlogq zmm11, zmm18, zmm20, 210 + vpternlogq zmm18, zmm20, zmm2, 210 + vpternlogq zmm20, zmm2, zmm9, 210 + vpternlogq zmm2, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm19 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm19, zmm21, zmm3, 210 + vpternlogq zmm21, zmm3, zmm5, 210 + vpternlogq zmm3, zmm5, zmm12, 210 + vpternlogq zmm5, zmm12, zmm30, 210 + vpternlogq zmm12, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm22 + vmovdqu64 zmm31, zmm4 + vpternlogq zmm22, zmm4, zmm6, 210 + vpternlogq zmm4, zmm6, zmm13, 210 + vpternlogq zmm6, zmm13, zmm15, 210 + vpternlogq zmm13, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1344] + ; Round 22 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm8, zmm11, 150 + vpternlogq zmm25, zmm19, zmm22, 150 + vmovdqu64 zmm26, zmm7 + vpternlogq zmm26, zmm10, zmm18, 150 + vpternlogq zmm26, zmm21, zmm4, 150 + vmovdqu64 zmm27, zmm14 + vpternlogq zmm27, zmm17, zmm20, 150 + vpternlogq zmm27, zmm3, zmm6, 150 + vmovdqu64 zmm28, zmm16 + vpternlogq zmm28, zmm24, zmm2, 150 + vpternlogq zmm28, zmm5, zmm13, 150 + vmovdqu64 zmm29, zmm23 + vpternlogq zmm29, zmm1, zmm9, 150 + vpternlogq zmm29, zmm12, zmm15, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm19, zmm19, zmm30 + vpxorq zmm22, zmm22, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm4, zmm4, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm14, zmm14, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm6, zmm6, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm24, zmm24, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm13, zmm13, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm9, zmm9, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm15, zmm15, zmm30 + ; Rho - rotate each lane in place + vprolq zmm7, zmm7, 1 + vprolq zmm14, zmm14, 62 + vprolq zmm16, zmm16, 28 + vprolq zmm23, zmm23, 27 + vprolq zmm8, zmm8, 36 + vprolq zmm10, zmm10, 44 + vprolq zmm17, zmm17, 6 + vprolq zmm24, zmm24, 55 + vprolq zmm1, zmm1, 20 + vprolq zmm11, zmm11, 3 + vprolq zmm18, zmm18, 10 + vprolq zmm20, zmm20, 43 + vprolq zmm2, zmm2, 25 + vprolq zmm9, zmm9, 39 + vprolq zmm19, zmm19, 41 + vprolq zmm21, zmm21, 45 + vprolq zmm3, zmm3, 15 + vprolq zmm5, zmm5, 21 + vprolq zmm12, zmm12, 8 + vprolq zmm22, zmm22, 18 + vprolq zmm4, zmm4, 2 + vprolq zmm6, zmm6, 61 + vprolq zmm13, zmm13, 56 + vprolq zmm15, zmm15, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm10 + vpternlogq zmm0, zmm10, zmm20, 210 + vpternlogq zmm10, zmm20, zmm5, 210 + vpternlogq zmm20, zmm5, zmm15, 210 + vpternlogq zmm5, zmm15, zmm30, 210 + vpternlogq zmm15, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm16 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm16, zmm1, zmm11, 210 + vpternlogq zmm1, zmm11, zmm21, 210 + vpternlogq zmm11, zmm21, zmm6, 210 + vpternlogq zmm21, zmm6, zmm30, 210 + vpternlogq zmm6, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm7 + vmovdqu64 zmm31, zmm17 + vpternlogq zmm7, zmm17, zmm2, 210 + vpternlogq zmm17, zmm2, zmm12, 210 + vpternlogq zmm2, zmm12, zmm22, 210 + vpternlogq zmm12, zmm22, zmm30, 210 + vpternlogq zmm22, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm23 + vmovdqu64 zmm31, zmm8 + vpternlogq zmm23, zmm8, zmm18, 210 + vpternlogq zmm8, zmm18, zmm3, 210 + vpternlogq zmm18, zmm3, zmm13, 210 + vpternlogq zmm3, zmm13, zmm30, 210 + vpternlogq zmm13, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm14 + vmovdqu64 zmm31, zmm24 + vpternlogq zmm14, zmm24, zmm9, 210 + vpternlogq zmm24, zmm9, zmm19, 210 + vpternlogq zmm9, zmm19, zmm4, 210 + vpternlogq zmm19, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1408] + ; Round 23 + ; Theta - column parity + vmovdqu64 zmm25, zmm0 + vpternlogq zmm25, zmm16, zmm7, 150 + vpternlogq zmm25, zmm23, zmm14, 150 + vmovdqu64 zmm26, zmm10 + vpternlogq zmm26, zmm1, zmm17, 150 + vpternlogq zmm26, zmm8, zmm24, 150 + vmovdqu64 zmm27, zmm20 + vpternlogq zmm27, zmm11, zmm2, 150 + vpternlogq zmm27, zmm18, zmm9, 150 + vmovdqu64 zmm28, zmm5 + vpternlogq zmm28, zmm21, zmm12, 150 + vpternlogq zmm28, zmm3, zmm19, 150 + vmovdqu64 zmm29, zmm15 + vpternlogq zmm29, zmm6, zmm22, 150 + vpternlogq zmm29, zmm13, zmm4, 150 + ; Theta - D and apply in place + vprolq zmm30, zmm26, 1 + vpxorq zmm30, zmm30, zmm29 + vpxorq zmm0, zmm0, zmm30 + vpxorq zmm16, zmm16, zmm30 + vpxorq zmm7, zmm7, zmm30 + vpxorq zmm23, zmm23, zmm30 + vpxorq zmm14, zmm14, zmm30 + vprolq zmm30, zmm27, 1 + vpxorq zmm30, zmm30, zmm25 + vpxorq zmm10, zmm10, zmm30 + vpxorq zmm1, zmm1, zmm30 + vpxorq zmm17, zmm17, zmm30 + vpxorq zmm8, zmm8, zmm30 + vpxorq zmm24, zmm24, zmm30 + vprolq zmm30, zmm28, 1 + vpxorq zmm30, zmm30, zmm26 + vpxorq zmm20, zmm20, zmm30 + vpxorq zmm11, zmm11, zmm30 + vpxorq zmm2, zmm2, zmm30 + vpxorq zmm18, zmm18, zmm30 + vpxorq zmm9, zmm9, zmm30 + vprolq zmm30, zmm29, 1 + vpxorq zmm30, zmm30, zmm27 + vpxorq zmm5, zmm5, zmm30 + vpxorq zmm21, zmm21, zmm30 + vpxorq zmm12, zmm12, zmm30 + vpxorq zmm3, zmm3, zmm30 + vpxorq zmm19, zmm19, zmm30 + vprolq zmm30, zmm25, 1 + vpxorq zmm30, zmm30, zmm28 + vpxorq zmm15, zmm15, zmm30 + vpxorq zmm6, zmm6, zmm30 + vpxorq zmm22, zmm22, zmm30 + vpxorq zmm13, zmm13, zmm30 + vpxorq zmm4, zmm4, zmm30 + ; Rho - rotate each lane in place + vprolq zmm10, zmm10, 1 + vprolq zmm20, zmm20, 62 + vprolq zmm5, zmm5, 28 + vprolq zmm15, zmm15, 27 + vprolq zmm16, zmm16, 36 + vprolq zmm1, zmm1, 44 + vprolq zmm11, zmm11, 6 + vprolq zmm21, zmm21, 55 + vprolq zmm6, zmm6, 20 + vprolq zmm7, zmm7, 3 + vprolq zmm17, zmm17, 10 + vprolq zmm2, zmm2, 43 + vprolq zmm12, zmm12, 25 + vprolq zmm22, zmm22, 39 + vprolq zmm23, zmm23, 41 + vprolq zmm8, zmm8, 45 + vprolq zmm18, zmm18, 15 + vprolq zmm3, zmm3, 21 + vprolq zmm13, zmm13, 8 + vprolq zmm14, zmm14, 18 + vprolq zmm24, zmm24, 2 + vprolq zmm9, zmm9, 61 + vprolq zmm19, zmm19, 56 + vprolq zmm4, zmm4, 14 + ; Pi - relabel logical -> physical + ; Chi - per row, in place, fused with vpternlogq (imm 0xd2) + vmovdqu64 zmm30, zmm0 + vmovdqu64 zmm31, zmm1 + vpternlogq zmm0, zmm1, zmm2, 210 + vpternlogq zmm1, zmm2, zmm3, 210 + vpternlogq zmm2, zmm3, zmm4, 210 + vpternlogq zmm3, zmm4, zmm30, 210 + vpternlogq zmm4, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm5 + vmovdqu64 zmm31, zmm6 + vpternlogq zmm5, zmm6, zmm7, 210 + vpternlogq zmm6, zmm7, zmm8, 210 + vpternlogq zmm7, zmm8, zmm9, 210 + vpternlogq zmm8, zmm9, zmm30, 210 + vpternlogq zmm9, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm10 + vmovdqu64 zmm31, zmm11 + vpternlogq zmm10, zmm11, zmm12, 210 + vpternlogq zmm11, zmm12, zmm13, 210 + vpternlogq zmm12, zmm13, zmm14, 210 + vpternlogq zmm13, zmm14, zmm30, 210 + vpternlogq zmm14, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm15 + vmovdqu64 zmm31, zmm16 + vpternlogq zmm15, zmm16, zmm17, 210 + vpternlogq zmm16, zmm17, zmm18, 210 + vpternlogq zmm17, zmm18, zmm19, 210 + vpternlogq zmm18, zmm19, zmm30, 210 + vpternlogq zmm19, zmm30, zmm31, 210 + vmovdqu64 zmm30, zmm20 + vmovdqu64 zmm31, zmm21 + vpternlogq zmm20, zmm21, zmm22, 210 + vpternlogq zmm21, zmm22, zmm23, 210 + vpternlogq zmm22, zmm23, zmm24, 210 + vpternlogq zmm23, zmm24, zmm30, 210 + vpternlogq zmm24, zmm30, zmm31, 210 + ; Iota + vpxorq zmm0, zmm0, [rax+1472] + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vmovdqu64 [rcx+512], zmm8 + vmovdqu64 [rcx+576], zmm9 + vmovdqu64 [rcx+640], zmm10 + vmovdqu64 [rcx+704], zmm11 + vmovdqu64 [rcx+768], zmm12 + vmovdqu64 [rcx+832], zmm13 + vmovdqu64 [rcx+896], zmm14 + vmovdqu64 [rcx+960], zmm15 + vmovdqu64 [rcx+1024], zmm16 + vmovdqu64 [rcx+1088], zmm17 + vmovdqu64 [rcx+1152], zmm18 + vmovdqu64 [rcx+1216], zmm19 + vmovdqu64 [rcx+1280], zmm20 + vmovdqu64 [rcx+1344], zmm21 + vmovdqu64 [rcx+1408], zmm22 + vmovdqu64 [rcx+1472], zmm23 + vmovdqu64 [rcx+1536], zmm24 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 + ret +sha3_256_blocksx8_seed_avx512 ENDP +_TEXT ENDS +ENDIF ENDIF ENDIF END diff --git a/wolfcrypt/src/wc_mlkem_asm.S b/wolfcrypt/src/wc_mlkem_asm.S index b399218dfd..578ec2ca42 100644 --- a/wolfcrypt/src/wc_mlkem_asm.S +++ b/wolfcrypt/src/wc_mlkem_asm.S @@ -15883,6 +15883,20395 @@ _mlkem_redistribute_8_rand_avx2: #endif /* __APPLE__ */ #endif /* HAVE_INTEL_AVX2 */ #endif /* WOLFSSL_HAVE_MLKEM */ +#ifdef WOLFSSL_HAVE_MLKEM +#ifndef NO_AVX512_SUPPORT +#ifndef HAVE_INTEL_AVX512 +#define HAVE_INTEL_AVX512 +#endif /* HAVE_INTEL_AVX512 */ +#endif /* NO_AVX512_SUPPORT */ +#ifdef HAVE_INTEL_AVX512 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_avx512_zetas: +.short 0x0a0b,0x0a0b,0x0a0b,0x0a0b,0x0a0b,0x0a0b,0x0a0b,0x0a0b +.short 0x0a0b,0x0a0b,0x0a0b,0x0a0b,0x0a0b,0x0a0b,0x0a0b,0x0a0b +.short 0x7b0b,0x7b0b,0x7b0b,0x7b0b,0x7b0b,0x7b0b,0x7b0b,0x7b0b +.short 0x7b0b,0x7b0b,0x7b0b,0x7b0b,0x7b0b,0x7b0b,0x7b0b,0x7b0b +.short 0x0b9a,0x0b9a,0x0b9a,0x0b9a,0x0b9a,0x0b9a,0x0b9a,0x0b9a +.short 0x0b9a,0x0b9a,0x0b9a,0x0b9a,0x0b9a,0x0b9a,0x0b9a,0x0b9a +.short 0x399a,0x399a,0x399a,0x399a,0x399a,0x399a,0x399a,0x399a +.short 0x399a,0x399a,0x399a,0x399a,0x399a,0x399a,0x399a,0x399a +.short 0x05d5,0x05d5,0x05d5,0x05d5,0x05d5,0x05d5,0x05d5,0x05d5 +.short 0x05d5,0x05d5,0x05d5,0x05d5,0x05d5,0x05d5,0x05d5,0x05d5 +.short 0x34d5,0x34d5,0x34d5,0x34d5,0x34d5,0x34d5,0x34d5,0x34d5 +.short 0x34d5,0x34d5,0x34d5,0x34d5,0x34d5,0x34d5,0x34d5,0x34d5 +.short 0x058e,0x058e,0x058e,0x058e,0x058e,0x058e,0x058e,0x058e +.short 0x058e,0x058e,0x058e,0x058e,0x058e,0x058e,0x058e,0x058e +.short 0xcf8e,0xcf8e,0xcf8e,0xcf8e,0xcf8e,0xcf8e,0xcf8e,0xcf8e +.short 0xcf8e,0xcf8e,0xcf8e,0xcf8e,0xcf8e,0xcf8e,0xcf8e,0xcf8e +.short 0x0c56,0x0c56,0x0c56,0x0c56,0x0c56,0x0c56,0x0c56,0x0c56 +.short 0x0c56,0x0c56,0x0c56,0x0c56,0x0c56,0x0c56,0x0c56,0x0c56 +.short 0xae56,0xae56,0xae56,0xae56,0xae56,0xae56,0xae56,0xae56 +.short 0xae56,0xae56,0xae56,0xae56,0xae56,0xae56,0xae56,0xae56 +.short 0x026e,0x026e,0x026e,0x026e,0x026e,0x026e,0x026e,0x026e +.short 0x026e,0x026e,0x026e,0x026e,0x026e,0x026e,0x026e,0x026e +.short 0x6c6e,0x6c6e,0x6c6e,0x6c6e,0x6c6e,0x6c6e,0x6c6e,0x6c6e +.short 0x6c6e,0x6c6e,0x6c6e,0x6c6e,0x6c6e,0x6c6e,0x6c6e,0x6c6e +.short 0x0629,0x0629,0x0629,0x0629,0x0629,0x0629,0x0629,0x0629 +.short 0x0629,0x0629,0x0629,0x0629,0x0629,0x0629,0x0629,0x0629 +.short 0xf129,0xf129,0xf129,0xf129,0xf129,0xf129,0xf129,0xf129 +.short 0xf129,0xf129,0xf129,0xf129,0xf129,0xf129,0xf129,0xf129 +.short 0x00b6,0x00b6,0x00b6,0x00b6,0x00b6,0x00b6,0x00b6,0x00b6 +.short 0x00b6,0x00b6,0x00b6,0x00b6,0x00b6,0x00b6,0x00b6,0x00b6 +.short 0xc2b6,0xc2b6,0xc2b6,0xc2b6,0xc2b6,0xc2b6,0xc2b6,0xc2b6 +.short 0xc2b6,0xc2b6,0xc2b6,0xc2b6,0xc2b6,0xc2b6,0xc2b6,0xc2b6 +.short 0x023d,0x023d,0x023d,0x023d,0x023d,0x023d,0x023d,0x023d +.short 0x07d4,0x07d4,0x07d4,0x07d4,0x07d4,0x07d4,0x07d4,0x07d4 +.short 0xe93d,0xe93d,0xe93d,0xe93d,0xe93d,0xe93d,0xe93d,0xe93d +.short 0x43d4,0x43d4,0x43d4,0x43d4,0x43d4,0x43d4,0x43d4,0x43d4 +.short 0x0108,0x0108,0x0108,0x0108,0x0108,0x0108,0x0108,0x0108 +.short 0x017f,0x017f,0x017f,0x017f,0x017f,0x017f,0x017f,0x017f +.short 0x9908,0x9908,0x9908,0x9908,0x9908,0x9908,0x9908,0x9908 +.short 0x8e7f,0x8e7f,0x8e7f,0x8e7f,0x8e7f,0x8e7f,0x8e7f,0x8e7f +.short 0x04c7,0x04c7,0x04c7,0x04c7,0x028c,0x028c,0x028c,0x028c +.short 0x0ad9,0x0ad9,0x0ad9,0x0ad9,0x03f7,0x03f7,0x03f7,0x03f7 +.short 0xe9c7,0xe9c7,0xe9c7,0xe9c7,0xe68c,0xe68c,0xe68c,0xe68c +.short 0x05d9,0x05d9,0x05d9,0x05d9,0x78f7,0x78f7,0x78f7,0x78f7 +.short 0x07f4,0x07f4,0x07f4,0x07f4,0x05d3,0x05d3,0x05d3,0x05d3 +.short 0x0be7,0x0be7,0x0be7,0x0be7,0x06f9,0x06f9,0x06f9,0x06f9 +.short 0xa3f4,0xa3f4,0xa3f4,0xa3f4,0x4ed3,0x4ed3,0x4ed3,0x4ed3 +.short 0x50e7,0x50e7,0x50e7,0x50e7,0x61f9,0x61f9,0x61f9,0x61f9 +.short 0x09c4,0x09c4,0x09c4,0x09c4,0x09c4,0x09c4,0x09c4,0x09c4 +.short 0x05b2,0x05b2,0x05b2,0x05b2,0x05b2,0x05b2,0x05b2,0x05b2 +.short 0x15c4,0x15c4,0x15c4,0x15c4,0x15c4,0x15c4,0x15c4,0x15c4 +.short 0xfbb2,0xfbb2,0xfbb2,0xfbb2,0xfbb2,0xfbb2,0xfbb2,0xfbb2 +.short 0x06bf,0x06bf,0x06bf,0x06bf,0x06bf,0x06bf,0x06bf,0x06bf +.short 0x0c7f,0x0c7f,0x0c7f,0x0c7f,0x0c7f,0x0c7f,0x0c7f,0x0c7f +.short 0x53bf,0x53bf,0x53bf,0x53bf,0x53bf,0x53bf,0x53bf,0x53bf +.short 0x997f,0x997f,0x997f,0x997f,0x997f,0x997f,0x997f,0x997f +.short 0x0204,0x0204,0x0204,0x0204,0x0cf9,0x0cf9,0x0cf9,0x0cf9 +.short 0x0bc1,0x0bc1,0x0bc1,0x0bc1,0x0a67,0x0a67,0x0a67,0x0a67 +.short 0xce04,0xce04,0xce04,0xce04,0x67f9,0x67f9,0x67f9,0x67f9 +.short 0x3ec1,0x3ec1,0x3ec1,0x3ec1,0xcf67,0xcf67,0xcf67,0xcf67 +.short 0x06af,0x06af,0x06af,0x06af,0x0877,0x0877,0x0877,0x0877 +.short 0x007e,0x007e,0x007e,0x007e,0x05bd,0x05bd,0x05bd,0x05bd +.short 0x23af,0x23af,0x23af,0x23af,0xfd77,0xfd77,0xfd77,0xfd77 +.short 0x9a7e,0x9a7e,0x9a7e,0x9a7e,0x6cbd,0x6cbd,0x6cbd,0x6cbd +.short 0x08b2,0x08b2,0x01ae,0x01ae,0x022b,0x022b,0x034b,0x034b +.short 0x081e,0x081e,0x0367,0x0367,0x060e,0x060e,0x0069,0x0069 +.short 0xfeb2,0xfeb2,0x2bae,0x2bae,0xd32b,0xd32b,0x344b,0x344b +.short 0x821e,0x821e,0xc867,0xc867,0x500e,0x500e,0xab69,0xab69 +.short 0x01a6,0x01a6,0x024b,0x024b,0x00b1,0x00b1,0x0c16,0x0c16 +.short 0x0bde,0x0bde,0x0b35,0x0b35,0x0626,0x0626,0x0675,0x0675 +.short 0x93a6,0x93a6,0x334b,0x334b,0x03b1,0x03b1,0xee16,0xee16 +.short 0xc5de,0xc5de,0x5a35,0x5a35,0x1826,0x1826,0x1575,0x1575 +.short 0x0c0b,0x0c0b,0x030a,0x030a,0x0487,0x0487,0x0c6e,0x0c6e +.short 0x09f8,0x09f8,0x05cb,0x05cb,0x0aa7,0x0aa7,0x045f,0x045f +.short 0x7d0b,0x7d0b,0x810a,0x810a,0x2987,0x2987,0x766e,0x766e +.short 0x71f8,0x71f8,0xb6cb,0xb6cb,0x8fa7,0x8fa7,0x315f,0x315f +.short 0x06cb,0x06cb,0x0284,0x0284,0x0999,0x0999,0x015d,0x015d +.short 0x01a2,0x01a2,0x0149,0x0149,0x0c65,0x0c65,0x0cb6,0x0cb6 +.short 0xb7cb,0xb7cb,0x4e84,0x4e84,0x4499,0x4499,0x485d,0x485d +.short 0xc7a2,0xc7a2,0x4c49,0x4c49,0xeb65,0xeb65,0xceb6,0xceb6 +.short 0x0714,0x0714,0x0714,0x0714,0x0714,0x0714,0x0714,0x0714 +.short 0x0714,0x0714,0x0714,0x0714,0x0714,0x0714,0x0714,0x0714 +.short 0x0314,0x0314,0x0314,0x0314,0x0314,0x0314,0x0314,0x0314 +.short 0x0314,0x0314,0x0314,0x0314,0x0314,0x0314,0x0314,0x0314 +.short 0x011f,0x011f,0x011f,0x011f,0x011f,0x011f,0x011f,0x011f +.short 0x011f,0x011f,0x011f,0x011f,0x011f,0x011f,0x011f,0x011f +.short 0x6e1f,0x6e1f,0x6e1f,0x6e1f,0x6e1f,0x6e1f,0x6e1f,0x6e1f +.short 0x6e1f,0x6e1f,0x6e1f,0x6e1f,0x6e1f,0x6e1f,0x6e1f,0x6e1f +.short 0x00ca,0x00ca,0x00ca,0x00ca,0x00ca,0x00ca,0x00ca,0x00ca +.short 0x00ca,0x00ca,0x00ca,0x00ca,0x00ca,0x00ca,0x00ca,0x00ca +.short 0xbeca,0xbeca,0xbeca,0xbeca,0xbeca,0xbeca,0xbeca,0xbeca +.short 0xbeca,0xbeca,0xbeca,0xbeca,0xbeca,0xbeca,0xbeca,0xbeca +.short 0x03c2,0x03c2,0x03c2,0x03c2,0x03c2,0x03c2,0x03c2,0x03c2 +.short 0x03c2,0x03c2,0x03c2,0x03c2,0x03c2,0x03c2,0x03c2,0x03c2 +.short 0x29c2,0x29c2,0x29c2,0x29c2,0x29c2,0x29c2,0x29c2,0x29c2 +.short 0x29c2,0x29c2,0x29c2,0x29c2,0x29c2,0x29c2,0x29c2,0x29c2 +.short 0x084f,0x084f,0x084f,0x084f,0x084f,0x084f,0x084f,0x084f +.short 0x084f,0x084f,0x084f,0x084f,0x084f,0x084f,0x084f,0x084f +.short 0x054f,0x054f,0x054f,0x054f,0x054f,0x054f,0x054f,0x054f +.short 0x054f,0x054f,0x054f,0x054f,0x054f,0x054f,0x054f,0x054f +.short 0x073f,0x073f,0x073f,0x073f,0x073f,0x073f,0x073f,0x073f +.short 0x073f,0x073f,0x073f,0x073f,0x073f,0x073f,0x073f,0x073f +.short 0xd43f,0xd43f,0xd43f,0xd43f,0xd43f,0xd43f,0xd43f,0xd43f +.short 0xd43f,0xd43f,0xd43f,0xd43f,0xd43f,0xd43f,0xd43f,0xd43f +.short 0x05bc,0x05bc,0x05bc,0x05bc,0x05bc,0x05bc,0x05bc,0x05bc +.short 0x05bc,0x05bc,0x05bc,0x05bc,0x05bc,0x05bc,0x05bc,0x05bc +.short 0x79bc,0x79bc,0x79bc,0x79bc,0x79bc,0x79bc,0x79bc,0x79bc +.short 0x79bc,0x79bc,0x79bc,0x79bc,0x79bc,0x79bc,0x79bc,0x79bc +.short 0x0a58,0x0a58,0x0a58,0x0a58,0x0a58,0x0a58,0x0a58,0x0a58 +.short 0x03f9,0x03f9,0x03f9,0x03f9,0x03f9,0x03f9,0x03f9,0x03f9 +.short 0x9258,0x9258,0x9258,0x9258,0x9258,0x9258,0x9258,0x9258 +.short 0x5ef9,0x5ef9,0x5ef9,0x5ef9,0x5ef9,0x5ef9,0x5ef9,0x5ef9 +.short 0x02dc,0x02dc,0x02dc,0x02dc,0x02dc,0x02dc,0x02dc,0x02dc +.short 0x0260,0x0260,0x0260,0x0260,0x0260,0x0260,0x0260,0x0260 +.short 0xd6dc,0xd6dc,0xd6dc,0xd6dc,0xd6dc,0xd6dc,0xd6dc,0xd6dc +.short 0x2260,0x2260,0x2260,0x2260,0x2260,0x2260,0x2260,0x2260 +.short 0x09ac,0x09ac,0x09ac,0x09ac,0x0ca7,0x0ca7,0x0ca7,0x0ca7 +.short 0x0bf2,0x0bf2,0x0bf2,0x0bf2,0x033e,0x033e,0x033e,0x033e +.short 0x4dac,0x4dac,0x4dac,0x4dac,0x91a7,0x91a7,0x91a7,0x91a7 +.short 0xc1f2,0xc1f2,0xc1f2,0xc1f2,0xdd3e,0xdd3e,0xdd3e,0xdd3e +.short 0x006b,0x006b,0x006b,0x006b,0x0774,0x0774,0x0774,0x0774 +.short 0x0c0a,0x0c0a,0x0c0a,0x0c0a,0x094a,0x094a,0x094a,0x094a +.short 0x916b,0x916b,0x916b,0x916b,0x2374,0x2374,0x2374,0x2374 +.short 0x8a0a,0x8a0a,0x8a0a,0x8a0a,0x474a,0x474a,0x474a,0x474a +.short 0x06fb,0x06fb,0x06fb,0x06fb,0x06fb,0x06fb,0x06fb,0x06fb +.short 0x019b,0x019b,0x019b,0x019b,0x019b,0x019b,0x019b,0x019b +.short 0x47fb,0x47fb,0x47fb,0x47fb,0x47fb,0x47fb,0x47fb,0x47fb +.short 0x229b,0x229b,0x229b,0x229b,0x229b,0x229b,0x229b,0x229b +.short 0x0c34,0x0c34,0x0c34,0x0c34,0x0c34,0x0c34,0x0c34,0x0c34 +.short 0x06de,0x06de,0x06de,0x06de,0x06de,0x06de,0x06de,0x06de +.short 0x6834,0x6834,0x6834,0x6834,0x6834,0x6834,0x6834,0x6834 +.short 0xc0de,0xc0de,0xc0de,0xc0de,0xc0de,0xc0de,0xc0de,0xc0de +.short 0x0b73,0x0b73,0x0b73,0x0b73,0x03c1,0x03c1,0x03c1,0x03c1 +.short 0x071d,0x071d,0x071d,0x071d,0x0a2c,0x0a2c,0x0a2c,0x0a2c +.short 0x3473,0x3473,0x3473,0x3473,0x36c1,0x36c1,0x36c1,0x36c1 +.short 0x8e1d,0x8e1d,0x8e1d,0x8e1d,0xce2c,0xce2c,0xce2c,0xce2c +.short 0x01c0,0x01c0,0x01c0,0x01c0,0x08d8,0x08d8,0x08d8,0x08d8 +.short 0x02a5,0x02a5,0x02a5,0x02a5,0x0806,0x0806,0x0806,0x0806 +.short 0x41c0,0x41c0,0x41c0,0x41c0,0x10d8,0x10d8,0x10d8,0x10d8 +.short 0xa1a5,0xa1a5,0xa1a5,0xa1a5,0xba06,0xba06,0xba06,0xba06 +.short 0x0331,0x0331,0x0449,0x0449,0x025b,0x025b,0x0262,0x0262 +.short 0x052a,0x052a,0x07fc,0x07fc,0x0748,0x0748,0x0180,0x0180 +.short 0x8631,0x8631,0x4f49,0x4f49,0x635b,0x635b,0x0862,0x0862 +.short 0xe32a,0xe32a,0x3bfc,0x3bfc,0x5f48,0x5f48,0x8180,0x8180 +.short 0x0842,0x0842,0x0c79,0x0c79,0x04c2,0x04c2,0x07ca,0x07ca +.short 0x0997,0x0997,0x00dc,0x00dc,0x085e,0x085e,0x0686,0x0686 +.short 0xae42,0xae42,0xe779,0xe779,0x2ac2,0x2ac2,0xc5ca,0xc5ca +.short 0x5e97,0x5e97,0xd4dc,0xd4dc,0x425e,0x425e,0x3886,0x3886 +.short 0x0860,0x0860,0x0707,0x0707,0x0803,0x0803,0x031a,0x031a +.short 0x071b,0x071b,0x09ab,0x09ab,0x099b,0x099b,0x01de,0x01de +.short 0x2860,0x2860,0xac07,0xac07,0xe103,0xe103,0xb11a,0xb11a +.short 0xa81b,0xa81b,0x5aab,0x5aab,0x2a9b,0x2a9b,0xbbde,0xbbde +.short 0x0c95,0x0c95,0x0bcd,0x0bcd,0x03e4,0x03e4,0x03df,0x03df +.short 0x03be,0x03be,0x074d,0x074d,0x05f2,0x05f2,0x065c,0x065c +.short 0x7b95,0x7b95,0xa2cd,0xa2cd,0x6fe4,0x6fe4,0xb0df,0xb0df +.short 0x5dbe,0x5dbe,0x1e4d,0x1e4d,0xbbf2,0xbbf2,0x5a5c,0x5a5c +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_avx512_perm20: +.quad 0x0000000000000000,0x0000000000000001 +.quad 0x0000000000000008,0x0000000000000009 +.quad 0x0000000000000004,0x0000000000000005 +.quad 0x000000000000000c,0x000000000000000d +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_avx512_perm31: +.quad 0x0000000000000002,0x0000000000000003 +.quad 0x000000000000000a,0x000000000000000b +.quad 0x0000000000000006,0x0000000000000007 +.quad 0x000000000000000e,0x000000000000000f +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_avx512_zetas_basemul: +.short 0x08b2,0x081e,0xf74e,0xf7e2,0x01ae,0x0367,0xfe52,0xfc99 +.short 0x022b,0x060e,0xfdd5,0xf9f2,0x034b,0x0069,0xfcb5,0xff97 +.short 0xfeb2,0x821e,0x014e,0x7de2,0x2bae,0xc867,0xd452,0x3799 +.short 0xd32b,0x500e,0x2cd5,0xaff2,0x344b,0xab69,0xcbb5,0x5497 +.short 0x01a6,0x0bde,0xfe5a,0xf422,0x024b,0x0b35,0xfdb5,0xf4cb +.short 0x00b1,0x0626,0xff4f,0xf9da,0x0c16,0x0675,0xf3ea,0xf98b +.short 0x93a6,0xc5de,0x6c5a,0x3a22,0x334b,0x5a35,0xccb5,0xa5cb +.short 0x03b1,0x1826,0xfc4f,0xe7da,0xee16,0x1575,0x11ea,0xea8b +.short 0x0c0b,0x09f8,0xf3f5,0xf608,0x030a,0x05cb,0xfcf6,0xfa35 +.short 0x0487,0x0aa7,0xfb79,0xf559,0x0c6e,0x045f,0xf392,0xfba1 +.short 0x7d0b,0x71f8,0x82f5,0x8e08,0x810a,0xb6cb,0x7ef6,0x4935 +.short 0x2987,0x8fa7,0xd679,0x7059,0x766e,0x315f,0x8992,0xcea1 +.short 0x06cb,0x01a2,0xf935,0xfe5e,0x0284,0x0149,0xfd7c,0xfeb7 +.short 0x0999,0x0c65,0xf667,0xf39b,0x015d,0x0cb6,0xfea3,0xf34a +.short 0xb7cb,0xc7a2,0x4835,0x385e,0x4e84,0x4c49,0xb17c,0xb3b7 +.short 0x4499,0xeb65,0xbb67,0x149b,0x485d,0xceb6,0xb7a3,0x314a +.short 0x0331,0x052a,0xfccf,0xfad6,0x0449,0x07fc,0xfbb7,0xf804 +.short 0x025b,0x0748,0xfda5,0xf8b8,0x0262,0x0180,0xfd9e,0xfe80 +.short 0x8631,0xe32a,0x79cf,0x1cd6,0x4f49,0x3bfc,0xb0b7,0xc404 +.short 0x635b,0x5f48,0x9ca5,0xa0b8,0x0862,0x8180,0xf79e,0x7e80 +.short 0x0842,0x0997,0xf7be,0xf669,0x0c79,0x00dc,0xf387,0xff24 +.short 0x04c2,0x085e,0xfb3e,0xf7a2,0x07ca,0x0686,0xf836,0xf97a +.short 0xae42,0x5e97,0x51be,0xa169,0xe779,0xd4dc,0x1887,0x2b24 +.short 0x2ac2,0x425e,0xd53e,0xbda2,0xc5ca,0x3886,0x3a36,0xc77a +.short 0x0860,0x071b,0xf7a0,0xf8e5,0x0707,0x09ab,0xf8f9,0xf655 +.short 0x0803,0x099b,0xf7fd,0xf665,0x031a,0x01de,0xfce6,0xfe22 +.short 0x2860,0xa81b,0xd7a0,0x57e5,0xac07,0x5aab,0x53f9,0xa555 +.short 0xe103,0x2a9b,0x1efd,0xd565,0xb11a,0xbbde,0x4ee6,0x4422 +.short 0x0c95,0x03be,0xf36b,0xfc42,0x0bcd,0x074d,0xf433,0xf8b3 +.short 0x03e4,0x05f2,0xfc1c,0xfa0e,0x03df,0x065c,0xfc21,0xf9a4 +.short 0x7b95,0x5dbe,0x846b,0xa242,0xa2cd,0x1e4d,0x5d33,0xe1b3 +.short 0x6fe4,0xbbf2,0x901c,0x440e,0xb0df,0x5a5c,0x4f21,0xa5a4 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_avx512_zetas_inv: +.short 0x06a5,0x06a5,0x05b4,0x05b4,0x070f,0x070f,0x0943,0x0943 +.short 0x0922,0x0922,0x0134,0x0134,0x091d,0x091d,0x006c,0x006c +.short 0xa5a5,0xa5a5,0xe1b4,0xe1b4,0x440f,0x440f,0xa243,0xa243 +.short 0x4f22,0x4f22,0x5d34,0x5d34,0x901d,0x901d,0x846c,0x846c +.short 0x0b23,0x0b23,0x0356,0x0356,0x0366,0x0366,0x05e6,0x05e6 +.short 0x09e7,0x09e7,0x05fa,0x05fa,0x04fe,0x04fe,0x04a1,0x04a1 +.short 0x4423,0x4423,0xa556,0xa556,0xd566,0xd566,0x57e6,0x57e6 +.short 0x4ee7,0x4ee7,0x53fa,0x53fa,0x1efe,0x1efe,0xd7a1,0xd7a1 +.short 0x04fb,0x04fb,0x04fb,0x04fb,0x0a5c,0x0a5c,0x0a5c,0x0a5c +.short 0x0429,0x0429,0x0429,0x0429,0x0b41,0x0b41,0x0b41,0x0b41 +.short 0x45fb,0x45fb,0x45fb,0x45fb,0x5e5c,0x5e5c,0x5e5c,0x5e5c +.short 0xef29,0xef29,0xef29,0xef29,0xbe41,0xbe41,0xbe41,0xbe41 +.short 0x02d5,0x02d5,0x02d5,0x02d5,0x05e4,0x05e4,0x05e4,0x05e4 +.short 0x0940,0x0940,0x0940,0x0940,0x018e,0x018e,0x018e,0x018e +.short 0x31d5,0x31d5,0x31d5,0x31d5,0x71e4,0x71e4,0x71e4,0x71e4 +.short 0xc940,0xc940,0xc940,0xc940,0xcb8e,0xcb8e,0xcb8e,0xcb8e +.short 0x0623,0x0623,0x0623,0x0623,0x0623,0x0623,0x0623,0x0623 +.short 0x00cd,0x00cd,0x00cd,0x00cd,0x00cd,0x00cd,0x00cd,0x00cd +.short 0x3f23,0x3f23,0x3f23,0x3f23,0x3f23,0x3f23,0x3f23,0x3f23 +.short 0x97cd,0x97cd,0x97cd,0x97cd,0x97cd,0x97cd,0x97cd,0x97cd +.short 0x0b66,0x0b66,0x0b66,0x0b66,0x0b66,0x0b66,0x0b66,0x0b66 +.short 0x0606,0x0606,0x0606,0x0606,0x0606,0x0606,0x0606,0x0606 +.short 0xdd66,0xdd66,0xdd66,0xdd66,0xdd66,0xdd66,0xdd66,0xdd66 +.short 0xb806,0xb806,0xb806,0xb806,0xb806,0xb806,0xb806,0xb806 +.short 0x0745,0x0745,0x0745,0x0745,0x0745,0x0745,0x0745,0x0745 +.short 0x0745,0x0745,0x0745,0x0745,0x0745,0x0745,0x0745,0x0745 +.short 0x8645,0x8645,0x8645,0x8645,0x8645,0x8645,0x8645,0x8645 +.short 0x8645,0x8645,0x8645,0x8645,0x8645,0x8645,0x8645,0x8645 +.short 0x05c2,0x05c2,0x05c2,0x05c2,0x05c2,0x05c2,0x05c2,0x05c2 +.short 0x05c2,0x05c2,0x05c2,0x05c2,0x05c2,0x05c2,0x05c2,0x05c2 +.short 0x2bc2,0x2bc2,0x2bc2,0x2bc2,0x2bc2,0x2bc2,0x2bc2,0x2bc2 +.short 0x2bc2,0x2bc2,0x2bc2,0x2bc2,0x2bc2,0x2bc2,0x2bc2,0x2bc2 +.short 0x0c37,0x0c37,0x0c37,0x0c37,0x0c37,0x0c37,0x0c37,0x0c37 +.short 0x0c37,0x0c37,0x0c37,0x0c37,0x0c37,0x0c37,0x0c37,0x0c37 +.short 0x4137,0x4137,0x4137,0x4137,0x4137,0x4137,0x4137,0x4137 +.short 0x4137,0x4137,0x4137,0x4137,0x4137,0x4137,0x4137,0x4137 +.short 0x067b,0x067b,0x0c25,0x0c25,0x04a3,0x04a3,0x036a,0x036a +.short 0x0537,0x0537,0x0088,0x0088,0x083f,0x083f,0x04bf,0x04bf +.short 0xc77b,0xc77b,0x2b25,0x2b25,0xbda3,0xbda3,0xa16a,0xa16a +.short 0x3a37,0x3a37,0x1888,0x1888,0xd53f,0xd53f,0x51bf,0x51bf +.short 0x0b81,0x0b81,0x0505,0x0505,0x05b9,0x05b9,0x07d7,0x07d7 +.short 0x0a9f,0x0a9f,0x08b8,0x08b8,0x0aa6,0x0aa6,0x09d0,0x09d0 +.short 0x7e81,0x7e81,0xc405,0xc405,0xa0b9,0xa0b9,0x1cd7,0x1cd7 +.short 0xf79f,0xf79f,0xb0b8,0xb0b8,0x9ca6,0x9ca6,0x79d0,0x79d0 +.short 0x03b7,0x03b7,0x03b7,0x03b7,0x00f7,0x00f7,0x00f7,0x00f7 +.short 0x058d,0x058d,0x058d,0x058d,0x0c96,0x0c96,0x0c96,0x0c96 +.short 0xb8b7,0xb8b7,0xb8b7,0xb8b7,0x75f7,0x75f7,0x75f7,0x75f7 +.short 0xdc8d,0xdc8d,0xdc8d,0xdc8d,0x6e96,0x6e96,0x6e96,0x6e96 +.short 0x09c3,0x09c3,0x09c3,0x09c3,0x010f,0x010f,0x010f,0x010f +.short 0x005a,0x005a,0x005a,0x005a,0x0355,0x0355,0x0355,0x0355 +.short 0x22c3,0x22c3,0x22c3,0x22c3,0x3e0f,0x3e0f,0x3e0f,0x3e0f +.short 0x6e5a,0x6e5a,0x6e5a,0x6e5a,0xb255,0xb255,0xb255,0xb255 +.short 0x0aa1,0x0aa1,0x0aa1,0x0aa1,0x0aa1,0x0aa1,0x0aa1,0x0aa1 +.short 0x0a25,0x0a25,0x0a25,0x0a25,0x0a25,0x0a25,0x0a25,0x0a25 +.short 0xdda1,0xdda1,0xdda1,0xdda1,0xdda1,0xdda1,0xdda1,0xdda1 +.short 0x2925,0x2925,0x2925,0x2925,0x2925,0x2925,0x2925,0x2925 +.short 0x0908,0x0908,0x0908,0x0908,0x0908,0x0908,0x0908,0x0908 +.short 0x02a9,0x02a9,0x02a9,0x02a9,0x02a9,0x02a9,0x02a9,0x02a9 +.short 0xa108,0xa108,0xa108,0xa108,0xa108,0xa108,0xa108,0xa108 +.short 0x6da9,0x6da9,0x6da9,0x6da9,0x6da9,0x6da9,0x6da9,0x6da9 +.short 0x04b2,0x04b2,0x04b2,0x04b2,0x04b2,0x04b2,0x04b2,0x04b2 +.short 0x04b2,0x04b2,0x04b2,0x04b2,0x04b2,0x04b2,0x04b2,0x04b2 +.short 0xfab2,0xfab2,0xfab2,0xfab2,0xfab2,0xfab2,0xfab2,0xfab2 +.short 0xfab2,0xfab2,0xfab2,0xfab2,0xfab2,0xfab2,0xfab2,0xfab2 +.short 0x093f,0x093f,0x093f,0x093f,0x093f,0x093f,0x093f,0x093f +.short 0x093f,0x093f,0x093f,0x093f,0x093f,0x093f,0x093f,0x093f +.short 0xd63f,0xd63f,0xd63f,0xd63f,0xd63f,0xd63f,0xd63f,0xd63f +.short 0xd63f,0xd63f,0xd63f,0xd63f,0xd63f,0xd63f,0xd63f,0xd63f +.short 0x0be2,0x0be2,0x0be2,0x0be2,0x0be2,0x0be2,0x0be2,0x0be2 +.short 0x0be2,0x0be2,0x0be2,0x0be2,0x0be2,0x0be2,0x0be2,0x0be2 +.short 0x91e2,0x91e2,0x91e2,0x91e2,0x91e2,0x91e2,0x91e2,0x91e2 +.short 0x91e2,0x91e2,0x91e2,0x91e2,0x91e2,0x91e2,0x91e2,0x91e2 +.short 0x05ed,0x05ed,0x05ed,0x05ed,0x05ed,0x05ed,0x05ed,0x05ed +.short 0x05ed,0x05ed,0x05ed,0x05ed,0x05ed,0x05ed,0x05ed,0x05ed +.short 0xfced,0xfced,0xfced,0xfced,0xfced,0xfced,0xfced,0xfced +.short 0xfced,0xfced,0xfced,0xfced,0xfced,0xfced,0xfced,0xfced +.short 0x004b,0x004b,0x0bb8,0x0bb8,0x009c,0x009c,0x0b5f,0x0b5f +.short 0x0ba4,0x0ba4,0x0a7d,0x0a7d,0x0368,0x0368,0x0636,0x0636 +.short 0x314b,0x314b,0xb3b8,0xb3b8,0x149c,0x149c,0x385f,0x385f +.short 0xb7a4,0xb7a4,0xb17d,0xb17d,0xbb68,0xbb68,0x4836,0x4836 +.short 0x08a2,0x08a2,0x0736,0x0736,0x025a,0x025a,0x0309,0x0309 +.short 0x0093,0x0093,0x09f7,0x09f7,0x087a,0x087a,0x00f6,0x00f6 +.short 0xcea2,0xcea2,0x4936,0x4936,0x705a,0x705a,0x8e09,0x8e09 +.short 0x8993,0x8993,0x7ef7,0x7ef7,0xd67a,0xd67a,0x82f6,0x82f6 +.short 0x0744,0x0744,0x0744,0x0744,0x0c83,0x0c83,0x0c83,0x0c83 +.short 0x048a,0x048a,0x048a,0x048a,0x0652,0x0652,0x0652,0x0652 +.short 0x9344,0x9344,0x9344,0x9344,0x6583,0x6583,0x6583,0x6583 +.short 0x028a,0x028a,0x028a,0x028a,0xdc52,0xdc52,0xdc52,0xdc52 +.short 0x029a,0x029a,0x029a,0x029a,0x0140,0x0140,0x0140,0x0140 +.short 0x0008,0x0008,0x0008,0x0008,0x0afd,0x0afd,0x0afd,0x0afd +.short 0x309a,0x309a,0x309a,0x309a,0xc140,0xc140,0xc140,0xc140 +.short 0x9808,0x9808,0x9808,0x9808,0x31fd,0x31fd,0x31fd,0x31fd +.short 0x0082,0x0082,0x0082,0x0082,0x0082,0x0082,0x0082,0x0082 +.short 0x0642,0x0642,0x0642,0x0642,0x0642,0x0642,0x0642,0x0642 +.short 0x6682,0x6682,0x6682,0x6682,0x6682,0x6682,0x6682,0x6682 +.short 0xac42,0xac42,0xac42,0xac42,0xac42,0xac42,0xac42,0xac42 +.short 0x074f,0x074f,0x074f,0x074f,0x074f,0x074f,0x074f,0x074f +.short 0x033d,0x033d,0x033d,0x033d,0x033d,0x033d,0x033d,0x033d +.short 0x044f,0x044f,0x044f,0x044f,0x044f,0x044f,0x044f,0x044f +.short 0xea3d,0xea3d,0xea3d,0xea3d,0xea3d,0xea3d,0xea3d,0xea3d +.short 0x0c4b,0x0c4b,0x0c4b,0x0c4b,0x0c4b,0x0c4b,0x0c4b,0x0c4b +.short 0x0c4b,0x0c4b,0x0c4b,0x0c4b,0x0c4b,0x0c4b,0x0c4b,0x0c4b +.short 0x3d4b,0x3d4b,0x3d4b,0x3d4b,0x3d4b,0x3d4b,0x3d4b,0x3d4b +.short 0x3d4b,0x3d4b,0x3d4b,0x3d4b,0x3d4b,0x3d4b,0x3d4b,0x3d4b +.short 0x06d8,0x06d8,0x06d8,0x06d8,0x06d8,0x06d8,0x06d8,0x06d8 +.short 0x06d8,0x06d8,0x06d8,0x06d8,0x06d8,0x06d8,0x06d8,0x06d8 +.short 0x0ed8,0x0ed8,0x0ed8,0x0ed8,0x0ed8,0x0ed8,0x0ed8,0x0ed8 +.short 0x0ed8,0x0ed8,0x0ed8,0x0ed8,0x0ed8,0x0ed8,0x0ed8,0x0ed8 +.short 0x0773,0x0773,0x0773,0x0773,0x0773,0x0773,0x0773,0x0773 +.short 0x0773,0x0773,0x0773,0x0773,0x0773,0x0773,0x0773,0x0773 +.short 0x3073,0x3073,0x3073,0x3073,0x3073,0x3073,0x3073,0x3073 +.short 0x3073,0x3073,0x3073,0x3073,0x3073,0x3073,0x3073,0x3073 +.short 0x068c,0x068c,0x01cc,0x01cc,0x06db,0x06db,0x0123,0x0123 +.short 0x00eb,0x00eb,0x0ab6,0x0ab6,0x0c50,0x0c50,0x0b5b,0x0b5b +.short 0xea8c,0xea8c,0xa5cc,0xa5cc,0xe7db,0xe7db,0x3a23,0x3a23 +.short 0x11eb,0x11eb,0xccb6,0xccb6,0xfc50,0xfc50,0x6c5b,0x6c5b +.short 0x0c98,0x0c98,0x099a,0x099a,0x06f3,0x06f3,0x04e3,0x04e3 +.short 0x09b6,0x09b6,0x0b53,0x0b53,0x0ad6,0x0ad6,0x044f,0x044f +.short 0x5498,0x5498,0x379a,0x379a,0xaff3,0xaff3,0x7de3,0x7de3 +.short 0xcbb6,0xcbb6,0xd453,0xd453,0x2cd6,0x2cd6,0x014f,0x014f +.short 0x0608,0x0608,0x0608,0x0608,0x011a,0x011a,0x011a,0x011a +.short 0x072e,0x072e,0x072e,0x072e,0x050d,0x050d,0x050d,0x050d +.short 0x9e08,0x9e08,0x9e08,0x9e08,0xaf1a,0xaf1a,0xaf1a,0xaf1a +.short 0xb12e,0xb12e,0xb12e,0xb12e,0x5c0d,0x5c0d,0x5c0d,0x5c0d +.short 0x090a,0x090a,0x090a,0x090a,0x0228,0x0228,0x0228,0x0228 +.short 0x0a75,0x0a75,0x0a75,0x0a75,0x083a,0x083a,0x083a,0x083a +.short 0x870a,0x870a,0x870a,0x870a,0xfa28,0xfa28,0xfa28,0xfa28 +.short 0x1975,0x1975,0x1975,0x1975,0x163a,0x163a,0x163a,0x163a +.short 0x0b82,0x0b82,0x0b82,0x0b82,0x0b82,0x0b82,0x0b82,0x0b82 +.short 0x0bf9,0x0bf9,0x0bf9,0x0bf9,0x0bf9,0x0bf9,0x0bf9,0x0bf9 +.short 0x7182,0x7182,0x7182,0x7182,0x7182,0x7182,0x7182,0x7182 +.short 0x66f9,0x66f9,0x66f9,0x66f9,0x66f9,0x66f9,0x66f9,0x66f9 +.short 0x052d,0x052d,0x052d,0x052d,0x052d,0x052d,0x052d,0x052d +.short 0x0ac4,0x0ac4,0x0ac4,0x0ac4,0x0ac4,0x0ac4,0x0ac4,0x0ac4 +.short 0xbc2d,0xbc2d,0xbc2d,0xbc2d,0xbc2d,0xbc2d,0xbc2d,0xbc2d +.short 0x16c4,0x16c4,0x16c4,0x16c4,0x16c4,0x16c4,0x16c4,0x16c4 +.short 0x0a93,0x0a93,0x0a93,0x0a93,0x0a93,0x0a93,0x0a93,0x0a93 +.short 0x0a93,0x0a93,0x0a93,0x0a93,0x0a93,0x0a93,0x0a93,0x0a93 +.short 0x9393,0x9393,0x9393,0x9393,0x9393,0x9393,0x9393,0x9393 +.short 0x9393,0x9393,0x9393,0x9393,0x9393,0x9393,0x9393,0x9393 +.short 0x00ab,0x00ab,0x00ab,0x00ab,0x00ab,0x00ab,0x00ab,0x00ab +.short 0x00ab,0x00ab,0x00ab,0x00ab,0x00ab,0x00ab,0x00ab,0x00ab +.short 0x51ab,0x51ab,0x51ab,0x51ab,0x51ab,0x51ab,0x51ab,0x51ab +.short 0x51ab,0x51ab,0x51ab,0x51ab,0x51ab,0x51ab,0x51ab,0x51ab +.short 0x072c,0x072c,0x072c,0x072c,0x072c,0x072c,0x072c,0x072c +.short 0x072c,0x072c,0x072c,0x072c,0x072c,0x072c,0x072c,0x072c +.short 0xcb2c,0xcb2c,0xcb2c,0xcb2c,0xcb2c,0xcb2c,0xcb2c,0xcb2c +.short 0xcb2c,0xcb2c,0xcb2c,0xcb2c,0xcb2c,0xcb2c,0xcb2c,0xcb2c +.short 0x0167,0x0167,0x0167,0x0167,0x0167,0x0167,0x0167,0x0167 +.short 0x0167,0x0167,0x0167,0x0167,0x0167,0x0167,0x0167,0x0167 +.short 0xc667,0xc667,0xc667,0xc667,0xc667,0xc667,0xc667,0xc667 +.short 0xc667,0xc667,0xc667,0xc667,0xc667,0xc667,0xc667,0xc667 +.short 0x02f6,0x02f6,0x02f6,0x02f6,0x02f6,0x02f6,0x02f6,0x02f6 +.short 0x02f6,0x02f6,0x02f6,0x02f6,0x02f6,0x02f6,0x02f6,0x02f6 +.short 0x84f6,0x84f6,0x84f6,0x84f6,0x84f6,0x84f6,0x84f6,0x84f6 +.short 0x84f6,0x84f6,0x84f6,0x84f6,0x84f6,0x84f6,0x84f6,0x84f6 +.short 0x05a1,0x05a1,0x05a1,0x05a1,0x05a1,0x05a1,0x05a1,0x05a1 +.short 0x05a1,0x05a1,0x05a1,0x05a1,0x05a1,0x05a1,0x05a1,0x05a1 +.short 0xd8a1,0xd8a1,0xd8a1,0xd8a1,0xd8a1,0xd8a1,0xd8a1,0xd8a1 +.short 0xd8a1,0xd8a1,0xd8a1,0xd8a1,0xd8a1,0xd8a1,0xd8a1,0xd8a1 +#ifndef __APPLE__ +.text +.globl mlkem_keygen_avx512 +.type mlkem_keygen_avx512,@function +.align 16 +mlkem_keygen_avx512: +#else +.section __TEXT,__text +.globl _mlkem_keygen_avx512 +.p2align 4 +_mlkem_keygen_avx512: +#endif /* __APPLE__ */ + pushq %r12 + pushq %r13 + pushq %r14 + subq $0x400, %rsp + movq $0xd01, %r14 + vmovd %r14d, %xmm14 + vpbroadcastw %xmm14, %zmm14 + movq $0x4ebf, %r14 + vmovd %r14d, %xmm15 + vpbroadcastw %xmm15, %zmm15 + movl $0xaaaa, %r14d + kmovw %r14d, %k1 + movl $0x5555, %r14d + kmovw %r14d, %k2 + movl $0xaaaaaaaa, %r14d + kmovd %r14d, %k3 + movl $0x55555555, %r14d + kmovd %r14d, %k4 + vmovdqu64 L_mlkem_avx512_perm20(%rip), %zmm17 + vmovdqu64 L_mlkem_avx512_perm31(%rip), %zmm18 + movq %rdi, %r12 + movslq %r8d, %r9 + movq %rdi, %r10 +L_keygen_avx512_priv: + cmpq $2, %r9 + jl L_keygen_avx512_priv_odd + movq %r10, %r11 + addq $0x200, %r11 + leaq L_mlkem_avx512_zetas(%rip), %r13 + vmovdqu64 (%r10), %ymm0 + vinserti64x4 $0x01, (%r11), %zmm0, %zmm0 + vmovdqu64 32(%r10), %ymm1 + vinserti64x4 $0x01, 32(%r11), %zmm1, %zmm1 + vmovdqu64 64(%r10), %ymm2 + vinserti64x4 $0x01, 64(%r11), %zmm2, %zmm2 + vmovdqu64 96(%r10), %ymm3 + vinserti64x4 $0x01, 96(%r11), %zmm3, %zmm3 + vmovdqu64 128(%r10), %ymm4 + vinserti64x4 $0x01, 128(%r11), %zmm4, %zmm4 + vmovdqu64 160(%r10), %ymm5 + vinserti64x4 $0x01, 160(%r11), %zmm5, %zmm5 + vmovdqu64 192(%r10), %ymm6 + vinserti64x4 $0x01, 192(%r11), %zmm6, %zmm6 + vmovdqu64 224(%r10), %ymm7 + vinserti64x4 $0x01, 224(%r11), %zmm7, %zmm7 + vmovdqu64 256(%r10), %ymm19 + vinserti64x4 $0x01, 256(%r11), %zmm19, %zmm19 + vmovdqu64 288(%r10), %ymm20 + vinserti64x4 $0x01, 288(%r11), %zmm20, %zmm20 + vmovdqu64 320(%r10), %ymm21 + vinserti64x4 $0x01, 320(%r11), %zmm21, %zmm21 + vmovdqu64 352(%r10), %ymm22 + vinserti64x4 $0x01, 352(%r11), %zmm22, %zmm22 + vmovdqu64 384(%r10), %ymm23 + vinserti64x4 $0x01, 384(%r11), %zmm23, %zmm23 + vmovdqu64 416(%r10), %ymm24 + vinserti64x4 $0x01, 416(%r11), %zmm24, %zmm24 + vmovdqu64 448(%r10), %ymm25 + vinserti64x4 $0x01, 448(%r11), %zmm25, %zmm25 + vmovdqu64 480(%r10), %ymm26 + vinserti64x4 $0x01, 480(%r11), %zmm26, %zmm26 + vbroadcasti64x4 (%r13), %zmm10 + vbroadcasti64x4 32(%r13), %zmm12 + vpmullw %zmm12, %zmm19, %zmm8 + vpmullw %zmm12, %zmm20, %zmm9 + vpmulhw %zmm10, %zmm19, %zmm19 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm8 + vpsubw %zmm9, %zmm20, %zmm9 + vpsubw %zmm8, %zmm0, %zmm19 + vpsubw %zmm9, %zmm1, %zmm20 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm2, %zmm21 + vpsubw %zmm9, %zmm3, %zmm22 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm4, %zmm23 + vpsubw %zmm9, %zmm5, %zmm24 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm6, %zmm25 + vpsubw %zmm9, %zmm7, %zmm26 + vpaddw %zmm8, %zmm6, %zmm6 + vpaddw %zmm9, %zmm7, %zmm7 + vbroadcasti64x4 64(%r13), %zmm10 + vbroadcasti64x4 96(%r13), %zmm12 + vpmullw %zmm12, %zmm4, %zmm8 + vpmullw %zmm12, %zmm5, %zmm9 + vpmulhw %zmm10, %zmm4, %zmm4 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm8 + vpsubw %zmm9, %zmm5, %zmm9 + vpsubw %zmm8, %zmm0, %zmm4 + vpsubw %zmm9, %zmm1, %zmm5 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm2, %zmm6 + vpsubw %zmm9, %zmm3, %zmm7 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vbroadcasti64x4 1280(%r13), %zmm10 + vbroadcasti64x4 1312(%r13), %zmm12 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm19, %zmm23 + vpsubw %zmm9, %zmm20, %zmm24 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm21, %zmm25 + vpsubw %zmm9, %zmm22, %zmm26 + vpaddw %zmm8, %zmm21, %zmm21 + vpaddw %zmm9, %zmm22, %zmm22 + vbroadcasti64x4 128(%r13), %zmm10 + vbroadcasti64x4 160(%r13), %zmm12 + vpmullw %zmm12, %zmm2, %zmm8 + vpmullw %zmm12, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm2, %zmm2 + vpmulhw %zmm10, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm2 + vpsubw %zmm9, %zmm1, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vbroadcasti64x4 1344(%r13), %zmm10 + vbroadcasti64x4 1376(%r13), %zmm12 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm21 + vpsubw %zmm9, %zmm20, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vbroadcasti64x4 192(%r13), %zmm10 + vbroadcasti64x4 224(%r13), %zmm12 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm6 + vpsubw %zmm9, %zmm5, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vbroadcasti64x4 1408(%r13), %zmm10 + vbroadcasti64x4 1440(%r13), %zmm12 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm25 + vpsubw %zmm9, %zmm24, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm24, %zmm24 + vbroadcasti64x4 256(%r13), %zmm10 + vbroadcasti64x4 288(%r13), %zmm12 + vbroadcasti64x4 320(%r13), %zmm11 + vbroadcasti64x4 352(%r13), %zmm13 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 1472(%r13), %zmm10 + vbroadcasti64x4 1504(%r13), %zmm12 + vbroadcasti64x4 1536(%r13), %zmm11 + vbroadcasti64x4 1568(%r13), %zmm13 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 384(%r13), %zmm10 + vbroadcasti64x4 416(%r13), %zmm12 + vbroadcasti64x4 448(%r13), %zmm11 + vbroadcasti64x4 480(%r13), %zmm13 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vbroadcasti64x4 1600(%r13), %zmm10 + vbroadcasti64x4 1632(%r13), %zmm12 + vbroadcasti64x4 1664(%r13), %zmm11 + vbroadcasti64x4 1696(%r13), %zmm13 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm1, %zmm0, %zmm8 + vbroadcasti64x4 512(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm16, %zmm1 + vbroadcasti64x4 544(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm3, %zmm2, %zmm9 + vbroadcasti64x4 576(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm16, %zmm3 + vbroadcasti64x4 608(%r13), %zmm13 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm0 + vpsubw %zmm2, %zmm3, %zmm2 + vpsubw %zmm0, %zmm8, %zmm1 + vpsubw %zmm2, %zmm9, %zmm3 + vpaddw %zmm0, %zmm8, %zmm8 + vpaddw %zmm2, %zmm9, %zmm9 + vbroadcasti64x4 640(%r13), %zmm10 + vbroadcasti64x4 672(%r13), %zmm12 + vbroadcasti64x4 704(%r13), %zmm11 + vbroadcasti64x4 736(%r13), %zmm13 + vpunpcklqdq %zmm1, %zmm8, %zmm0 + vpunpckhqdq %zmm1, %zmm8, %zmm1 + vpunpcklqdq %zmm3, %zmm9, %zmm2 + vpunpckhqdq %zmm3, %zmm9, %zmm3 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm20, %zmm19, %zmm8 + vbroadcasti64x4 1728(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm20, %zmm19, %zmm16 + vmovdqa64 %zmm16, %zmm20 + vbroadcasti64x4 1760(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm22, %zmm21, %zmm9 + vbroadcasti64x4 1792(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm22, %zmm21, %zmm16 + vmovdqa64 %zmm16, %zmm22 + vbroadcasti64x4 1824(%r13), %zmm13 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm19 + vpsubw %zmm21, %zmm22, %zmm21 + vpsubw %zmm19, %zmm8, %zmm20 + vpsubw %zmm21, %zmm9, %zmm22 + vpaddw %zmm19, %zmm8, %zmm8 + vpaddw %zmm21, %zmm9, %zmm9 + vbroadcasti64x4 1856(%r13), %zmm10 + vbroadcasti64x4 1888(%r13), %zmm12 + vbroadcasti64x4 1920(%r13), %zmm11 + vbroadcasti64x4 1952(%r13), %zmm13 + vpunpcklqdq %zmm20, %zmm8, %zmm19 + vpunpckhqdq %zmm20, %zmm8, %zmm20 + vpunpcklqdq %zmm22, %zmm9, %zmm21 + vpunpckhqdq %zmm22, %zmm9, %zmm22 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm5, %zmm4, %zmm8 + vbroadcasti64x4 768(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm16, %zmm5 + vbroadcasti64x4 800(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm7, %zmm6, %zmm9 + vbroadcasti64x4 832(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm16, %zmm7 + vbroadcasti64x4 864(%r13), %zmm13 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm4 + vpsubw %zmm6, %zmm7, %zmm6 + vpsubw %zmm4, %zmm8, %zmm5 + vpsubw %zmm6, %zmm9, %zmm7 + vpaddw %zmm4, %zmm8, %zmm8 + vpaddw %zmm6, %zmm9, %zmm9 + vbroadcasti64x4 896(%r13), %zmm10 + vbroadcasti64x4 928(%r13), %zmm12 + vbroadcasti64x4 960(%r13), %zmm11 + vbroadcasti64x4 992(%r13), %zmm13 + vpunpcklqdq %zmm5, %zmm8, %zmm4 + vpunpckhqdq %zmm5, %zmm8, %zmm5 + vpunpcklqdq %zmm7, %zmm9, %zmm6 + vpunpckhqdq %zmm7, %zmm9, %zmm7 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm24, %zmm23, %zmm8 + vbroadcasti64x4 1984(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm24, %zmm23, %zmm16 + vmovdqa64 %zmm16, %zmm24 + vbroadcasti64x4 2016(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm26, %zmm25, %zmm9 + vbroadcasti64x4 2048(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm26, %zmm25, %zmm16 + vmovdqa64 %zmm16, %zmm26 + vbroadcasti64x4 2080(%r13), %zmm13 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm23 + vpsubw %zmm25, %zmm26, %zmm25 + vpsubw %zmm23, %zmm8, %zmm24 + vpsubw %zmm25, %zmm9, %zmm26 + vpaddw %zmm23, %zmm8, %zmm8 + vpaddw %zmm25, %zmm9, %zmm9 + vbroadcasti64x4 2112(%r13), %zmm10 + vbroadcasti64x4 2144(%r13), %zmm12 + vbroadcasti64x4 2176(%r13), %zmm11 + vbroadcasti64x4 2208(%r13), %zmm13 + vpunpcklqdq %zmm24, %zmm8, %zmm23 + vpunpckhqdq %zmm24, %zmm8, %zmm24 + vpunpcklqdq %zmm26, %zmm9, %zmm25 + vpunpckhqdq %zmm26, %zmm9, %zmm26 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vbroadcasti64x4 1024(%r13), %zmm10 + vbroadcasti64x4 1056(%r13), %zmm12 + vbroadcasti64x4 1088(%r13), %zmm11 + vbroadcasti64x4 1120(%r13), %zmm13 + vpsllq $32, %zmm1, %zmm8 + vpsrlq $32, %zmm0, %zmm9 + vpblendmd %zmm8, %zmm0, %zmm0{%k1} + vpblendmd %zmm9, %zmm1, %zmm1{%k2} + vpsllq $32, %zmm3, %zmm8 + vpsrlq $32, %zmm2, %zmm9 + vpblendmd %zmm8, %zmm2, %zmm2{%k1} + vpblendmd %zmm9, %zmm3, %zmm3{%k2} + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 2240(%r13), %zmm10 + vbroadcasti64x4 2272(%r13), %zmm12 + vbroadcasti64x4 2304(%r13), %zmm11 + vbroadcasti64x4 2336(%r13), %zmm13 + vpsllq $32, %zmm20, %zmm8 + vpsrlq $32, %zmm19, %zmm9 + vpblendmd %zmm8, %zmm19, %zmm19{%k1} + vpblendmd %zmm9, %zmm20, %zmm20{%k2} + vpsllq $32, %zmm22, %zmm8 + vpsrlq $32, %zmm21, %zmm9 + vpblendmd %zmm8, %zmm21, %zmm21{%k1} + vpblendmd %zmm9, %zmm22, %zmm22{%k2} + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 1152(%r13), %zmm10 + vbroadcasti64x4 1184(%r13), %zmm12 + vbroadcasti64x4 1216(%r13), %zmm11 + vbroadcasti64x4 1248(%r13), %zmm13 + vpsllq $32, %zmm5, %zmm8 + vpsrlq $32, %zmm4, %zmm9 + vpblendmd %zmm8, %zmm4, %zmm4{%k1} + vpblendmd %zmm9, %zmm5, %zmm5{%k2} + vpsllq $32, %zmm7, %zmm8 + vpsrlq $32, %zmm6, %zmm9 + vpblendmd %zmm8, %zmm6, %zmm6{%k1} + vpblendmd %zmm9, %zmm7, %zmm7{%k2} + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vbroadcasti64x4 2368(%r13), %zmm10 + vbroadcasti64x4 2400(%r13), %zmm12 + vbroadcasti64x4 2432(%r13), %zmm11 + vbroadcasti64x4 2464(%r13), %zmm13 + vpsllq $32, %zmm24, %zmm8 + vpsrlq $32, %zmm23, %zmm9 + vpblendmd %zmm8, %zmm23, %zmm23{%k1} + vpblendmd %zmm9, %zmm24, %zmm24{%k2} + vpsllq $32, %zmm26, %zmm8 + vpsrlq $32, %zmm25, %zmm9 + vpblendmd %zmm8, %zmm25, %zmm25{%k1} + vpblendmd %zmm9, %zmm26, %zmm26{%k2} + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vpunpckldq %zmm1, %zmm0, %zmm8 + vpunpckhdq %zmm1, %zmm0, %zmm9 + vmovdqa64 %zmm17, %zmm0 + vpermi2q %zmm9, %zmm8, %zmm0 + vmovdqa64 %zmm18, %zmm1 + vpermi2q %zmm9, %zmm8, %zmm1 + vpunpckldq %zmm3, %zmm2, %zmm8 + vpunpckhdq %zmm3, %zmm2, %zmm9 + vmovdqa64 %zmm17, %zmm2 + vpermi2q %zmm9, %zmm8, %zmm2 + vmovdqa64 %zmm18, %zmm3 + vpermi2q %zmm9, %zmm8, %zmm3 + vpunpckldq %zmm20, %zmm19, %zmm8 + vpunpckhdq %zmm20, %zmm19, %zmm9 + vmovdqa64 %zmm17, %zmm19 + vpermi2q %zmm9, %zmm8, %zmm19 + vmovdqa64 %zmm18, %zmm20 + vpermi2q %zmm9, %zmm8, %zmm20 + vpunpckldq %zmm22, %zmm21, %zmm8 + vpunpckhdq %zmm22, %zmm21, %zmm9 + vmovdqa64 %zmm17, %zmm21 + vpermi2q %zmm9, %zmm8, %zmm21 + vmovdqa64 %zmm18, %zmm22 + vpermi2q %zmm9, %zmm8, %zmm22 + vpunpckldq %zmm5, %zmm4, %zmm8 + vpunpckhdq %zmm5, %zmm4, %zmm9 + vmovdqa64 %zmm17, %zmm4 + vpermi2q %zmm9, %zmm8, %zmm4 + vmovdqa64 %zmm18, %zmm5 + vpermi2q %zmm9, %zmm8, %zmm5 + vpunpckldq %zmm7, %zmm6, %zmm8 + vpunpckhdq %zmm7, %zmm6, %zmm9 + vmovdqa64 %zmm17, %zmm6 + vpermi2q %zmm9, %zmm8, %zmm6 + vmovdqa64 %zmm18, %zmm7 + vpermi2q %zmm9, %zmm8, %zmm7 + vpunpckldq %zmm24, %zmm23, %zmm8 + vpunpckhdq %zmm24, %zmm23, %zmm9 + vmovdqa64 %zmm17, %zmm23 + vpermi2q %zmm9, %zmm8, %zmm23 + vmovdqa64 %zmm18, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vpunpckldq %zmm26, %zmm25, %zmm8 + vpunpckhdq %zmm26, %zmm25, %zmm9 + vmovdqa64 %zmm17, %zmm25 + vpermi2q %zmm9, %zmm8, %zmm25 + vmovdqa64 %zmm18, %zmm26 + vpermi2q %zmm9, %zmm8, %zmm26 + vpmulhw %zmm15, %zmm0, %zmm8 + vpmulhw %zmm15, %zmm1, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm0, %zmm8 + vpsubw %zmm9, %zmm1, %zmm9 + vmovdqu64 %ymm8, (%r10) + vextracti64x4 $0x01, %zmm8, (%r11) + vmovdqu64 %ymm9, 32(%r10) + vextracti64x4 $0x01, %zmm9, 32(%r11) + vpmulhw %zmm15, %zmm2, %zmm8 + vpmulhw %zmm15, %zmm3, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vmovdqu64 %ymm8, 64(%r10) + vextracti64x4 $0x01, %zmm8, 64(%r11) + vmovdqu64 %ymm9, 96(%r10) + vextracti64x4 $0x01, %zmm9, 96(%r11) + vpmulhw %zmm15, %zmm19, %zmm8 + vpmulhw %zmm15, %zmm20, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm8 + vpsubw %zmm9, %zmm20, %zmm9 + vmovdqu64 %ymm8, 256(%r10) + vextracti64x4 $0x01, %zmm8, 256(%r11) + vmovdqu64 %ymm9, 288(%r10) + vextracti64x4 $0x01, %zmm9, 288(%r11) + vpmulhw %zmm15, %zmm21, %zmm8 + vpmulhw %zmm15, %zmm22, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vmovdqu64 %ymm8, 320(%r10) + vextracti64x4 $0x01, %zmm8, 320(%r11) + vmovdqu64 %ymm9, 352(%r10) + vextracti64x4 $0x01, %zmm9, 352(%r11) + vpmulhw %zmm15, %zmm4, %zmm8 + vpmulhw %zmm15, %zmm5, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm8 + vpsubw %zmm9, %zmm5, %zmm9 + vmovdqu64 %ymm8, 128(%r10) + vextracti64x4 $0x01, %zmm8, 128(%r11) + vmovdqu64 %ymm9, 160(%r10) + vextracti64x4 $0x01, %zmm9, 160(%r11) + vpmulhw %zmm15, %zmm6, %zmm8 + vpmulhw %zmm15, %zmm7, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vmovdqu64 %ymm8, 192(%r10) + vextracti64x4 $0x01, %zmm8, 192(%r11) + vmovdqu64 %ymm9, 224(%r10) + vextracti64x4 $0x01, %zmm9, 224(%r11) + vpmulhw %zmm15, %zmm23, %zmm8 + vpmulhw %zmm15, %zmm24, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vmovdqu64 %ymm8, 384(%r10) + vextracti64x4 $0x01, %zmm8, 384(%r11) + vmovdqu64 %ymm9, 416(%r10) + vextracti64x4 $0x01, %zmm9, 416(%r11) + vpmulhw %zmm15, %zmm25, %zmm8 + vpmulhw %zmm15, %zmm26, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vmovdqu64 %ymm8, 448(%r10) + vextracti64x4 $0x01, %zmm8, 448(%r11) + vmovdqu64 %ymm9, 480(%r10) + vextracti64x4 $0x01, %zmm9, 480(%r11) + addq $0x400, %r10 + subq $2, %r9 + jmp L_keygen_avx512_priv +L_keygen_avx512_priv_odd: + cmpq $0x01, %r9 + jne L_keygen_avx512_priv_done + leaq L_mlkem_avx512_zetas(%rip), %r13 + vmovdqu64 (%r10), %ymm0 + vinserti64x4 $0x01, (%r10), %zmm0, %zmm0 + vmovdqu64 32(%r10), %ymm1 + vinserti64x4 $0x01, 32(%r10), %zmm1, %zmm1 + vmovdqu64 64(%r10), %ymm2 + vinserti64x4 $0x01, 64(%r10), %zmm2, %zmm2 + vmovdqu64 96(%r10), %ymm3 + vinserti64x4 $0x01, 96(%r10), %zmm3, %zmm3 + vmovdqu64 128(%r10), %ymm4 + vinserti64x4 $0x01, 128(%r10), %zmm4, %zmm4 + vmovdqu64 160(%r10), %ymm5 + vinserti64x4 $0x01, 160(%r10), %zmm5, %zmm5 + vmovdqu64 192(%r10), %ymm6 + vinserti64x4 $0x01, 192(%r10), %zmm6, %zmm6 + vmovdqu64 224(%r10), %ymm7 + vinserti64x4 $0x01, 224(%r10), %zmm7, %zmm7 + vmovdqu64 256(%r10), %ymm19 + vinserti64x4 $0x01, 256(%r10), %zmm19, %zmm19 + vmovdqu64 288(%r10), %ymm20 + vinserti64x4 $0x01, 288(%r10), %zmm20, %zmm20 + vmovdqu64 320(%r10), %ymm21 + vinserti64x4 $0x01, 320(%r10), %zmm21, %zmm21 + vmovdqu64 352(%r10), %ymm22 + vinserti64x4 $0x01, 352(%r10), %zmm22, %zmm22 + vmovdqu64 384(%r10), %ymm23 + vinserti64x4 $0x01, 384(%r10), %zmm23, %zmm23 + vmovdqu64 416(%r10), %ymm24 + vinserti64x4 $0x01, 416(%r10), %zmm24, %zmm24 + vmovdqu64 448(%r10), %ymm25 + vinserti64x4 $0x01, 448(%r10), %zmm25, %zmm25 + vmovdqu64 480(%r10), %ymm26 + vinserti64x4 $0x01, 480(%r10), %zmm26, %zmm26 + vbroadcasti64x4 (%r13), %zmm10 + vbroadcasti64x4 32(%r13), %zmm12 + vpmullw %zmm12, %zmm19, %zmm8 + vpmullw %zmm12, %zmm20, %zmm9 + vpmulhw %zmm10, %zmm19, %zmm19 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm8 + vpsubw %zmm9, %zmm20, %zmm9 + vpsubw %zmm8, %zmm0, %zmm19 + vpsubw %zmm9, %zmm1, %zmm20 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm2, %zmm21 + vpsubw %zmm9, %zmm3, %zmm22 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm4, %zmm23 + vpsubw %zmm9, %zmm5, %zmm24 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm6, %zmm25 + vpsubw %zmm9, %zmm7, %zmm26 + vpaddw %zmm8, %zmm6, %zmm6 + vpaddw %zmm9, %zmm7, %zmm7 + vbroadcasti64x4 64(%r13), %zmm10 + vbroadcasti64x4 96(%r13), %zmm12 + vpmullw %zmm12, %zmm4, %zmm8 + vpmullw %zmm12, %zmm5, %zmm9 + vpmulhw %zmm10, %zmm4, %zmm4 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm8 + vpsubw %zmm9, %zmm5, %zmm9 + vpsubw %zmm8, %zmm0, %zmm4 + vpsubw %zmm9, %zmm1, %zmm5 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm2, %zmm6 + vpsubw %zmm9, %zmm3, %zmm7 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vbroadcasti64x4 1280(%r13), %zmm10 + vbroadcasti64x4 1312(%r13), %zmm12 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm19, %zmm23 + vpsubw %zmm9, %zmm20, %zmm24 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm21, %zmm25 + vpsubw %zmm9, %zmm22, %zmm26 + vpaddw %zmm8, %zmm21, %zmm21 + vpaddw %zmm9, %zmm22, %zmm22 + vbroadcasti64x4 128(%r13), %zmm10 + vbroadcasti64x4 160(%r13), %zmm12 + vpmullw %zmm12, %zmm2, %zmm8 + vpmullw %zmm12, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm2, %zmm2 + vpmulhw %zmm10, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm2 + vpsubw %zmm9, %zmm1, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vbroadcasti64x4 1344(%r13), %zmm10 + vbroadcasti64x4 1376(%r13), %zmm12 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm21 + vpsubw %zmm9, %zmm20, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vbroadcasti64x4 192(%r13), %zmm10 + vbroadcasti64x4 224(%r13), %zmm12 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm6 + vpsubw %zmm9, %zmm5, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vbroadcasti64x4 1408(%r13), %zmm10 + vbroadcasti64x4 1440(%r13), %zmm12 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm25 + vpsubw %zmm9, %zmm24, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm24, %zmm24 + vbroadcasti64x4 256(%r13), %zmm10 + vbroadcasti64x4 288(%r13), %zmm12 + vbroadcasti64x4 320(%r13), %zmm11 + vbroadcasti64x4 352(%r13), %zmm13 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 1472(%r13), %zmm10 + vbroadcasti64x4 1504(%r13), %zmm12 + vbroadcasti64x4 1536(%r13), %zmm11 + vbroadcasti64x4 1568(%r13), %zmm13 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 384(%r13), %zmm10 + vbroadcasti64x4 416(%r13), %zmm12 + vbroadcasti64x4 448(%r13), %zmm11 + vbroadcasti64x4 480(%r13), %zmm13 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vbroadcasti64x4 1600(%r13), %zmm10 + vbroadcasti64x4 1632(%r13), %zmm12 + vbroadcasti64x4 1664(%r13), %zmm11 + vbroadcasti64x4 1696(%r13), %zmm13 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm1, %zmm0, %zmm8 + vbroadcasti64x4 512(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm16, %zmm1 + vbroadcasti64x4 544(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm3, %zmm2, %zmm9 + vbroadcasti64x4 576(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm16, %zmm3 + vbroadcasti64x4 608(%r13), %zmm13 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm0 + vpsubw %zmm2, %zmm3, %zmm2 + vpsubw %zmm0, %zmm8, %zmm1 + vpsubw %zmm2, %zmm9, %zmm3 + vpaddw %zmm0, %zmm8, %zmm8 + vpaddw %zmm2, %zmm9, %zmm9 + vbroadcasti64x4 640(%r13), %zmm10 + vbroadcasti64x4 672(%r13), %zmm12 + vbroadcasti64x4 704(%r13), %zmm11 + vbroadcasti64x4 736(%r13), %zmm13 + vpunpcklqdq %zmm1, %zmm8, %zmm0 + vpunpckhqdq %zmm1, %zmm8, %zmm1 + vpunpcklqdq %zmm3, %zmm9, %zmm2 + vpunpckhqdq %zmm3, %zmm9, %zmm3 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm20, %zmm19, %zmm8 + vbroadcasti64x4 1728(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm20, %zmm19, %zmm16 + vmovdqa64 %zmm16, %zmm20 + vbroadcasti64x4 1760(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm22, %zmm21, %zmm9 + vbroadcasti64x4 1792(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm22, %zmm21, %zmm16 + vmovdqa64 %zmm16, %zmm22 + vbroadcasti64x4 1824(%r13), %zmm13 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm19 + vpsubw %zmm21, %zmm22, %zmm21 + vpsubw %zmm19, %zmm8, %zmm20 + vpsubw %zmm21, %zmm9, %zmm22 + vpaddw %zmm19, %zmm8, %zmm8 + vpaddw %zmm21, %zmm9, %zmm9 + vbroadcasti64x4 1856(%r13), %zmm10 + vbroadcasti64x4 1888(%r13), %zmm12 + vbroadcasti64x4 1920(%r13), %zmm11 + vbroadcasti64x4 1952(%r13), %zmm13 + vpunpcklqdq %zmm20, %zmm8, %zmm19 + vpunpckhqdq %zmm20, %zmm8, %zmm20 + vpunpcklqdq %zmm22, %zmm9, %zmm21 + vpunpckhqdq %zmm22, %zmm9, %zmm22 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm5, %zmm4, %zmm8 + vbroadcasti64x4 768(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm16, %zmm5 + vbroadcasti64x4 800(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm7, %zmm6, %zmm9 + vbroadcasti64x4 832(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm16, %zmm7 + vbroadcasti64x4 864(%r13), %zmm13 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm4 + vpsubw %zmm6, %zmm7, %zmm6 + vpsubw %zmm4, %zmm8, %zmm5 + vpsubw %zmm6, %zmm9, %zmm7 + vpaddw %zmm4, %zmm8, %zmm8 + vpaddw %zmm6, %zmm9, %zmm9 + vbroadcasti64x4 896(%r13), %zmm10 + vbroadcasti64x4 928(%r13), %zmm12 + vbroadcasti64x4 960(%r13), %zmm11 + vbroadcasti64x4 992(%r13), %zmm13 + vpunpcklqdq %zmm5, %zmm8, %zmm4 + vpunpckhqdq %zmm5, %zmm8, %zmm5 + vpunpcklqdq %zmm7, %zmm9, %zmm6 + vpunpckhqdq %zmm7, %zmm9, %zmm7 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm24, %zmm23, %zmm8 + vbroadcasti64x4 1984(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm24, %zmm23, %zmm16 + vmovdqa64 %zmm16, %zmm24 + vbroadcasti64x4 2016(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm26, %zmm25, %zmm9 + vbroadcasti64x4 2048(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm26, %zmm25, %zmm16 + vmovdqa64 %zmm16, %zmm26 + vbroadcasti64x4 2080(%r13), %zmm13 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm23 + vpsubw %zmm25, %zmm26, %zmm25 + vpsubw %zmm23, %zmm8, %zmm24 + vpsubw %zmm25, %zmm9, %zmm26 + vpaddw %zmm23, %zmm8, %zmm8 + vpaddw %zmm25, %zmm9, %zmm9 + vbroadcasti64x4 2112(%r13), %zmm10 + vbroadcasti64x4 2144(%r13), %zmm12 + vbroadcasti64x4 2176(%r13), %zmm11 + vbroadcasti64x4 2208(%r13), %zmm13 + vpunpcklqdq %zmm24, %zmm8, %zmm23 + vpunpckhqdq %zmm24, %zmm8, %zmm24 + vpunpcklqdq %zmm26, %zmm9, %zmm25 + vpunpckhqdq %zmm26, %zmm9, %zmm26 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vbroadcasti64x4 1024(%r13), %zmm10 + vbroadcasti64x4 1056(%r13), %zmm12 + vbroadcasti64x4 1088(%r13), %zmm11 + vbroadcasti64x4 1120(%r13), %zmm13 + vpsllq $32, %zmm1, %zmm8 + vpsrlq $32, %zmm0, %zmm9 + vpblendmd %zmm8, %zmm0, %zmm0{%k1} + vpblendmd %zmm9, %zmm1, %zmm1{%k2} + vpsllq $32, %zmm3, %zmm8 + vpsrlq $32, %zmm2, %zmm9 + vpblendmd %zmm8, %zmm2, %zmm2{%k1} + vpblendmd %zmm9, %zmm3, %zmm3{%k2} + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 2240(%r13), %zmm10 + vbroadcasti64x4 2272(%r13), %zmm12 + vbroadcasti64x4 2304(%r13), %zmm11 + vbroadcasti64x4 2336(%r13), %zmm13 + vpsllq $32, %zmm20, %zmm8 + vpsrlq $32, %zmm19, %zmm9 + vpblendmd %zmm8, %zmm19, %zmm19{%k1} + vpblendmd %zmm9, %zmm20, %zmm20{%k2} + vpsllq $32, %zmm22, %zmm8 + vpsrlq $32, %zmm21, %zmm9 + vpblendmd %zmm8, %zmm21, %zmm21{%k1} + vpblendmd %zmm9, %zmm22, %zmm22{%k2} + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 1152(%r13), %zmm10 + vbroadcasti64x4 1184(%r13), %zmm12 + vbroadcasti64x4 1216(%r13), %zmm11 + vbroadcasti64x4 1248(%r13), %zmm13 + vpsllq $32, %zmm5, %zmm8 + vpsrlq $32, %zmm4, %zmm9 + vpblendmd %zmm8, %zmm4, %zmm4{%k1} + vpblendmd %zmm9, %zmm5, %zmm5{%k2} + vpsllq $32, %zmm7, %zmm8 + vpsrlq $32, %zmm6, %zmm9 + vpblendmd %zmm8, %zmm6, %zmm6{%k1} + vpblendmd %zmm9, %zmm7, %zmm7{%k2} + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vbroadcasti64x4 2368(%r13), %zmm10 + vbroadcasti64x4 2400(%r13), %zmm12 + vbroadcasti64x4 2432(%r13), %zmm11 + vbroadcasti64x4 2464(%r13), %zmm13 + vpsllq $32, %zmm24, %zmm8 + vpsrlq $32, %zmm23, %zmm9 + vpblendmd %zmm8, %zmm23, %zmm23{%k1} + vpblendmd %zmm9, %zmm24, %zmm24{%k2} + vpsllq $32, %zmm26, %zmm8 + vpsrlq $32, %zmm25, %zmm9 + vpblendmd %zmm8, %zmm25, %zmm25{%k1} + vpblendmd %zmm9, %zmm26, %zmm26{%k2} + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vpunpckldq %zmm1, %zmm0, %zmm8 + vpunpckhdq %zmm1, %zmm0, %zmm9 + vmovdqa64 %zmm17, %zmm0 + vpermi2q %zmm9, %zmm8, %zmm0 + vmovdqa64 %zmm18, %zmm1 + vpermi2q %zmm9, %zmm8, %zmm1 + vpunpckldq %zmm3, %zmm2, %zmm8 + vpunpckhdq %zmm3, %zmm2, %zmm9 + vmovdqa64 %zmm17, %zmm2 + vpermi2q %zmm9, %zmm8, %zmm2 + vmovdqa64 %zmm18, %zmm3 + vpermi2q %zmm9, %zmm8, %zmm3 + vpunpckldq %zmm20, %zmm19, %zmm8 + vpunpckhdq %zmm20, %zmm19, %zmm9 + vmovdqa64 %zmm17, %zmm19 + vpermi2q %zmm9, %zmm8, %zmm19 + vmovdqa64 %zmm18, %zmm20 + vpermi2q %zmm9, %zmm8, %zmm20 + vpunpckldq %zmm22, %zmm21, %zmm8 + vpunpckhdq %zmm22, %zmm21, %zmm9 + vmovdqa64 %zmm17, %zmm21 + vpermi2q %zmm9, %zmm8, %zmm21 + vmovdqa64 %zmm18, %zmm22 + vpermi2q %zmm9, %zmm8, %zmm22 + vpunpckldq %zmm5, %zmm4, %zmm8 + vpunpckhdq %zmm5, %zmm4, %zmm9 + vmovdqa64 %zmm17, %zmm4 + vpermi2q %zmm9, %zmm8, %zmm4 + vmovdqa64 %zmm18, %zmm5 + vpermi2q %zmm9, %zmm8, %zmm5 + vpunpckldq %zmm7, %zmm6, %zmm8 + vpunpckhdq %zmm7, %zmm6, %zmm9 + vmovdqa64 %zmm17, %zmm6 + vpermi2q %zmm9, %zmm8, %zmm6 + vmovdqa64 %zmm18, %zmm7 + vpermi2q %zmm9, %zmm8, %zmm7 + vpunpckldq %zmm24, %zmm23, %zmm8 + vpunpckhdq %zmm24, %zmm23, %zmm9 + vmovdqa64 %zmm17, %zmm23 + vpermi2q %zmm9, %zmm8, %zmm23 + vmovdqa64 %zmm18, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vpunpckldq %zmm26, %zmm25, %zmm8 + vpunpckhdq %zmm26, %zmm25, %zmm9 + vmovdqa64 %zmm17, %zmm25 + vpermi2q %zmm9, %zmm8, %zmm25 + vmovdqa64 %zmm18, %zmm26 + vpermi2q %zmm9, %zmm8, %zmm26 + vpmulhw %zmm15, %zmm0, %zmm8 + vpmulhw %zmm15, %zmm1, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm0, %zmm8 + vpsubw %zmm9, %zmm1, %zmm9 + vmovdqu64 %ymm8, (%r10) + vextracti64x4 $0x01, %zmm8, (%r10) + vmovdqu64 %ymm9, 32(%r10) + vextracti64x4 $0x01, %zmm9, 32(%r10) + vpmulhw %zmm15, %zmm2, %zmm8 + vpmulhw %zmm15, %zmm3, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vmovdqu64 %ymm8, 64(%r10) + vextracti64x4 $0x01, %zmm8, 64(%r10) + vmovdqu64 %ymm9, 96(%r10) + vextracti64x4 $0x01, %zmm9, 96(%r10) + vpmulhw %zmm15, %zmm19, %zmm8 + vpmulhw %zmm15, %zmm20, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm8 + vpsubw %zmm9, %zmm20, %zmm9 + vmovdqu64 %ymm8, 256(%r10) + vextracti64x4 $0x01, %zmm8, 256(%r10) + vmovdqu64 %ymm9, 288(%r10) + vextracti64x4 $0x01, %zmm9, 288(%r10) + vpmulhw %zmm15, %zmm21, %zmm8 + vpmulhw %zmm15, %zmm22, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vmovdqu64 %ymm8, 320(%r10) + vextracti64x4 $0x01, %zmm8, 320(%r10) + vmovdqu64 %ymm9, 352(%r10) + vextracti64x4 $0x01, %zmm9, 352(%r10) + vpmulhw %zmm15, %zmm4, %zmm8 + vpmulhw %zmm15, %zmm5, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm8 + vpsubw %zmm9, %zmm5, %zmm9 + vmovdqu64 %ymm8, 128(%r10) + vextracti64x4 $0x01, %zmm8, 128(%r10) + vmovdqu64 %ymm9, 160(%r10) + vextracti64x4 $0x01, %zmm9, 160(%r10) + vpmulhw %zmm15, %zmm6, %zmm8 + vpmulhw %zmm15, %zmm7, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vmovdqu64 %ymm8, 192(%r10) + vextracti64x4 $0x01, %zmm8, 192(%r10) + vmovdqu64 %ymm9, 224(%r10) + vextracti64x4 $0x01, %zmm9, 224(%r10) + vpmulhw %zmm15, %zmm23, %zmm8 + vpmulhw %zmm15, %zmm24, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vmovdqu64 %ymm8, 384(%r10) + vextracti64x4 $0x01, %zmm8, 384(%r10) + vmovdqu64 %ymm9, 416(%r10) + vextracti64x4 $0x01, %zmm9, 416(%r10) + vpmulhw %zmm15, %zmm25, %zmm8 + vpmulhw %zmm15, %zmm26, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vmovdqu64 %ymm8, 448(%r10) + vextracti64x4 $0x01, %zmm8, 448(%r10) + vmovdqu64 %ymm9, 480(%r10) + vextracti64x4 $0x01, %zmm9, 480(%r10) +L_keygen_avx512_priv_done: + movq $0xf301, %r14 + vmovd %r14d, %xmm13 + vpbroadcastw %xmm13, %zmm13 + movslq %r8d, %rax + movq %rsi, %r10 +L_keygen_avx512_acc: + movslq %r8d, %r9 + leaq L_mlkem_avx512_zetas_basemul(%rip), %r13 + vmovdqu (%rcx), %ymm2 + vinserti64x4 $0x01, 64(%rcx), %zmm2, %zmm2 + vmovdqu 32(%rcx), %ymm3 + vinserti64x4 $0x01, 96(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%rdi), %ymm4 + vinserti64x4 $0x01, 64(%rdi), %zmm4, %zmm4 + vmovdqu 32(%rdi), %ymm5 + vinserti64x4 $0x01, 96(%rdi), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%r13), %ymm10 + vinserti64x4 $0x01, 64(%r13), %zmm10, %zmm10 + vmovdqu 32(%r13), %ymm11 + vinserti64x4 $0x01, 96(%r13), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm13, %zmm1, %zmm8 + vpmullw %zmm13, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, (%r10) + vextracti64x4 $0x01, %zmm0, 64(%r10) + vmovdqu %ymm1, 32(%r10) + vextracti64x4 $0x01, %zmm1, 96(%r10) + vmovdqu 128(%rcx), %ymm2 + vinserti64x4 $0x01, 192(%rcx), %zmm2, %zmm2 + vmovdqu 160(%rcx), %ymm3 + vinserti64x4 $0x01, 224(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%rdi), %ymm4 + vinserti64x4 $0x01, 192(%rdi), %zmm4, %zmm4 + vmovdqu 160(%rdi), %ymm5 + vinserti64x4 $0x01, 224(%rdi), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%r13), %ymm10 + vinserti64x4 $0x01, 192(%r13), %zmm10, %zmm10 + vmovdqu 160(%r13), %ymm11 + vinserti64x4 $0x01, 224(%r13), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm13, %zmm1, %zmm8 + vpmullw %zmm13, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 128(%r10) + vextracti64x4 $0x01, %zmm0, 192(%r10) + vmovdqu %ymm1, 160(%r10) + vextracti64x4 $0x01, %zmm1, 224(%r10) + vmovdqu 256(%rcx), %ymm2 + vinserti64x4 $0x01, 320(%rcx), %zmm2, %zmm2 + vmovdqu 288(%rcx), %ymm3 + vinserti64x4 $0x01, 352(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%rdi), %ymm4 + vinserti64x4 $0x01, 320(%rdi), %zmm4, %zmm4 + vmovdqu 288(%rdi), %ymm5 + vinserti64x4 $0x01, 352(%rdi), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%r13), %ymm10 + vinserti64x4 $0x01, 320(%r13), %zmm10, %zmm10 + vmovdqu 288(%r13), %ymm11 + vinserti64x4 $0x01, 352(%r13), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm13, %zmm1, %zmm8 + vpmullw %zmm13, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 256(%r10) + vextracti64x4 $0x01, %zmm0, 320(%r10) + vmovdqu %ymm1, 288(%r10) + vextracti64x4 $0x01, %zmm1, 352(%r10) + vmovdqu 384(%rcx), %ymm2 + vinserti64x4 $0x01, 448(%rcx), %zmm2, %zmm2 + vmovdqu 416(%rcx), %ymm3 + vinserti64x4 $0x01, 480(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%rdi), %ymm4 + vinserti64x4 $0x01, 448(%rdi), %zmm4, %zmm4 + vmovdqu 416(%rdi), %ymm5 + vinserti64x4 $0x01, 480(%rdi), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%r13), %ymm10 + vinserti64x4 $0x01, 448(%r13), %zmm10, %zmm10 + vmovdqu 416(%r13), %ymm11 + vinserti64x4 $0x01, 480(%r13), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm13, %zmm1, %zmm8 + vpmullw %zmm13, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 384(%r10) + vextracti64x4 $0x01, %zmm0, 448(%r10) + vmovdqu %ymm1, 416(%r10) + vextracti64x4 $0x01, %zmm1, 480(%r10) + addq $0x200, %rcx + addq $0x200, %rdi + subq $2, %r9 + jz L_pointwise_acc_mont_end_keygen_avx512 +L_pointwise_acc_mont_start_keygen_avx512: + leaq L_mlkem_avx512_zetas_basemul(%rip), %r13 + vmovdqu (%rcx), %ymm2 + vinserti64x4 $0x01, 64(%rcx), %zmm2, %zmm2 + vmovdqu 32(%rcx), %ymm3 + vinserti64x4 $0x01, 96(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%rdi), %ymm4 + vinserti64x4 $0x01, 64(%rdi), %zmm4, %zmm4 + vmovdqu 32(%rdi), %ymm5 + vinserti64x4 $0x01, 96(%rdi), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%r13), %ymm10 + vinserti64x4 $0x01, 64(%r13), %zmm10, %zmm10 + vmovdqu 32(%r13), %ymm11 + vinserti64x4 $0x01, 96(%r13), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm13, %zmm1, %zmm8 + vpmullw %zmm13, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu (%r10), %ymm6 + vinserti64x4 $0x01, 64(%r10), %zmm6, %zmm6 + vmovdqu 32(%r10), %ymm7 + vinserti64x4 $0x01, 96(%r10), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, (%r10) + vextracti64x4 $0x01, %zmm0, 64(%r10) + vmovdqu %ymm1, 32(%r10) + vextracti64x4 $0x01, %zmm1, 96(%r10) + vmovdqu 128(%rcx), %ymm2 + vinserti64x4 $0x01, 192(%rcx), %zmm2, %zmm2 + vmovdqu 160(%rcx), %ymm3 + vinserti64x4 $0x01, 224(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%rdi), %ymm4 + vinserti64x4 $0x01, 192(%rdi), %zmm4, %zmm4 + vmovdqu 160(%rdi), %ymm5 + vinserti64x4 $0x01, 224(%rdi), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%r13), %ymm10 + vinserti64x4 $0x01, 192(%r13), %zmm10, %zmm10 + vmovdqu 160(%r13), %ymm11 + vinserti64x4 $0x01, 224(%r13), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm13, %zmm1, %zmm8 + vpmullw %zmm13, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 128(%r10), %ymm6 + vinserti64x4 $0x01, 192(%r10), %zmm6, %zmm6 + vmovdqu 160(%r10), %ymm7 + vinserti64x4 $0x01, 224(%r10), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 128(%r10) + vextracti64x4 $0x01, %zmm0, 192(%r10) + vmovdqu %ymm1, 160(%r10) + vextracti64x4 $0x01, %zmm1, 224(%r10) + vmovdqu 256(%rcx), %ymm2 + vinserti64x4 $0x01, 320(%rcx), %zmm2, %zmm2 + vmovdqu 288(%rcx), %ymm3 + vinserti64x4 $0x01, 352(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%rdi), %ymm4 + vinserti64x4 $0x01, 320(%rdi), %zmm4, %zmm4 + vmovdqu 288(%rdi), %ymm5 + vinserti64x4 $0x01, 352(%rdi), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%r13), %ymm10 + vinserti64x4 $0x01, 320(%r13), %zmm10, %zmm10 + vmovdqu 288(%r13), %ymm11 + vinserti64x4 $0x01, 352(%r13), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm13, %zmm1, %zmm8 + vpmullw %zmm13, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 256(%r10), %ymm6 + vinserti64x4 $0x01, 320(%r10), %zmm6, %zmm6 + vmovdqu 288(%r10), %ymm7 + vinserti64x4 $0x01, 352(%r10), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 256(%r10) + vextracti64x4 $0x01, %zmm0, 320(%r10) + vmovdqu %ymm1, 288(%r10) + vextracti64x4 $0x01, %zmm1, 352(%r10) + vmovdqu 384(%rcx), %ymm2 + vinserti64x4 $0x01, 448(%rcx), %zmm2, %zmm2 + vmovdqu 416(%rcx), %ymm3 + vinserti64x4 $0x01, 480(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%rdi), %ymm4 + vinserti64x4 $0x01, 448(%rdi), %zmm4, %zmm4 + vmovdqu 416(%rdi), %ymm5 + vinserti64x4 $0x01, 480(%rdi), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%r13), %ymm10 + vinserti64x4 $0x01, 448(%r13), %zmm10, %zmm10 + vmovdqu 416(%r13), %ymm11 + vinserti64x4 $0x01, 480(%r13), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm13, %zmm1, %zmm8 + vpmullw %zmm13, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 384(%r10), %ymm6 + vinserti64x4 $0x01, 448(%r10), %zmm6, %zmm6 + vmovdqu 416(%r10), %ymm7 + vinserti64x4 $0x01, 480(%r10), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 384(%r10) + vextracti64x4 $0x01, %zmm0, 448(%r10) + vmovdqu %ymm1, 416(%r10) + vextracti64x4 $0x01, %zmm1, 480(%r10) + addq $0x200, %rcx + addq $0x200, %rdi + subq $0x01, %r9 + jg L_pointwise_acc_mont_start_keygen_avx512 +L_pointwise_acc_mont_end_keygen_avx512: + leaq L_mlkem_avx512_zetas_basemul(%rip), %r13 + vmovdqu (%rcx), %ymm2 + vinserti64x4 $0x01, 64(%rcx), %zmm2, %zmm2 + vmovdqu 32(%rcx), %ymm3 + vinserti64x4 $0x01, 96(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%rdi), %ymm4 + vinserti64x4 $0x01, 64(%rdi), %zmm4, %zmm4 + vmovdqu 32(%rdi), %ymm5 + vinserti64x4 $0x01, 96(%rdi), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%r13), %ymm10 + vinserti64x4 $0x01, 64(%r13), %zmm10, %zmm10 + vmovdqu 32(%r13), %ymm11 + vinserti64x4 $0x01, 96(%r13), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm13, %zmm1, %zmm8 + vpmullw %zmm13, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu (%r10), %ymm6 + vinserti64x4 $0x01, 64(%r10), %zmm6, %zmm6 + vmovdqu 32(%r10), %ymm7 + vinserti64x4 $0x01, 96(%r10), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, (%r10) + vextracti64x4 $0x01, %zmm0, 64(%r10) + vmovdqu %ymm1, 32(%r10) + vextracti64x4 $0x01, %zmm1, 96(%r10) + vmovdqu 128(%rcx), %ymm2 + vinserti64x4 $0x01, 192(%rcx), %zmm2, %zmm2 + vmovdqu 160(%rcx), %ymm3 + vinserti64x4 $0x01, 224(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%rdi), %ymm4 + vinserti64x4 $0x01, 192(%rdi), %zmm4, %zmm4 + vmovdqu 160(%rdi), %ymm5 + vinserti64x4 $0x01, 224(%rdi), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%r13), %ymm10 + vinserti64x4 $0x01, 192(%r13), %zmm10, %zmm10 + vmovdqu 160(%r13), %ymm11 + vinserti64x4 $0x01, 224(%r13), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm13, %zmm1, %zmm8 + vpmullw %zmm13, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 128(%r10), %ymm6 + vinserti64x4 $0x01, 192(%r10), %zmm6, %zmm6 + vmovdqu 160(%r10), %ymm7 + vinserti64x4 $0x01, 224(%r10), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 128(%r10) + vextracti64x4 $0x01, %zmm0, 192(%r10) + vmovdqu %ymm1, 160(%r10) + vextracti64x4 $0x01, %zmm1, 224(%r10) + vmovdqu 256(%rcx), %ymm2 + vinserti64x4 $0x01, 320(%rcx), %zmm2, %zmm2 + vmovdqu 288(%rcx), %ymm3 + vinserti64x4 $0x01, 352(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%rdi), %ymm4 + vinserti64x4 $0x01, 320(%rdi), %zmm4, %zmm4 + vmovdqu 288(%rdi), %ymm5 + vinserti64x4 $0x01, 352(%rdi), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%r13), %ymm10 + vinserti64x4 $0x01, 320(%r13), %zmm10, %zmm10 + vmovdqu 288(%r13), %ymm11 + vinserti64x4 $0x01, 352(%r13), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm13, %zmm1, %zmm8 + vpmullw %zmm13, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 256(%r10), %ymm6 + vinserti64x4 $0x01, 320(%r10), %zmm6, %zmm6 + vmovdqu 288(%r10), %ymm7 + vinserti64x4 $0x01, 352(%r10), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 256(%r10) + vextracti64x4 $0x01, %zmm0, 320(%r10) + vmovdqu %ymm1, 288(%r10) + vextracti64x4 $0x01, %zmm1, 352(%r10) + vmovdqu 384(%rcx), %ymm2 + vinserti64x4 $0x01, 448(%rcx), %zmm2, %zmm2 + vmovdqu 416(%rcx), %ymm3 + vinserti64x4 $0x01, 480(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%rdi), %ymm4 + vinserti64x4 $0x01, 448(%rdi), %zmm4, %zmm4 + vmovdqu 416(%rdi), %ymm5 + vinserti64x4 $0x01, 480(%rdi), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%r13), %ymm10 + vinserti64x4 $0x01, 448(%r13), %zmm10, %zmm10 + vmovdqu 416(%r13), %ymm11 + vinserti64x4 $0x01, 480(%r13), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm13, %zmm1, %zmm8 + vpmullw %zmm13, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 384(%r10), %ymm6 + vinserti64x4 $0x01, 448(%r10), %zmm6, %zmm6 + vmovdqu 416(%r10), %ymm7 + vinserti64x4 $0x01, 480(%r10), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 384(%r10) + vextracti64x4 $0x01, %zmm0, 448(%r10) + vmovdqu %ymm1, 416(%r10) + vextracti64x4 $0x01, %zmm1, 480(%r10) + addq $0x200, %rcx + movq %r12, %rdi + addq $0x200, %r10 + subq $0x01, %rax + jg L_keygen_avx512_acc + movq $0x549, %r14 + vmovd %r14d, %xmm12 + vpbroadcastw %xmm12, %zmm12 + movq $0x5049, %r14 + vmovd %r14d, %xmm13 + vpbroadcastw %xmm13, %zmm13 + movslq %r8d, %rax + movq %rsi, %r10 +L_keygen_avx512_tomont: + vmovdqu64 (%r10), %zmm0 + vmovdqu64 64(%r10), %zmm1 + vmovdqu64 128(%r10), %zmm2 + vmovdqu64 192(%r10), %zmm3 + vpmullw %zmm13, %zmm0, %zmm4 + vpmulhw %zmm12, %zmm0, %zmm5 + vpmulhw %zmm14, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm0 + vpmullw %zmm13, %zmm1, %zmm4 + vpmulhw %zmm12, %zmm1, %zmm5 + vpmulhw %zmm14, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm1 + vpmullw %zmm13, %zmm2, %zmm4 + vpmulhw %zmm12, %zmm2, %zmm5 + vpmulhw %zmm14, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm2 + vpmullw %zmm13, %zmm3, %zmm4 + vpmulhw %zmm12, %zmm3, %zmm5 + vpmulhw %zmm14, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm3 + vmovdqu64 %zmm0, (%r10) + vmovdqu64 %zmm1, 64(%r10) + vmovdqu64 %zmm2, 128(%r10) + vmovdqu64 %zmm3, 192(%r10) + vmovdqu64 256(%r10), %zmm0 + vmovdqu64 320(%r10), %zmm1 + vmovdqu64 384(%r10), %zmm2 + vmovdqu64 448(%r10), %zmm3 + vpmullw %zmm13, %zmm0, %zmm4 + vpmulhw %zmm12, %zmm0, %zmm5 + vpmulhw %zmm14, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm0 + vpmullw %zmm13, %zmm1, %zmm4 + vpmulhw %zmm12, %zmm1, %zmm5 + vpmulhw %zmm14, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm1 + vpmullw %zmm13, %zmm2, %zmm4 + vpmulhw %zmm12, %zmm2, %zmm5 + vpmulhw %zmm14, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm2 + vpmullw %zmm13, %zmm3, %zmm4 + vpmulhw %zmm12, %zmm3, %zmm5 + vpmulhw %zmm14, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm3 + vmovdqu64 %zmm0, 256(%r10) + vmovdqu64 %zmm1, 320(%r10) + vmovdqu64 %zmm2, 384(%r10) + vmovdqu64 %zmm3, 448(%r10) + addq $0x200, %r10 + subq $0x01, %rax + jg L_keygen_avx512_tomont + movslq %r8d, %rax +L_keygen_avx512_err: + cmpq $2, %rax + jl L_keygen_avx512_err_odd + movq %rdx, %r10 + addq $0x200, %r10 + movq %rsi, %r11 + addq $0x200, %r11 + leaq L_mlkem_avx512_zetas(%rip), %r13 + vmovdqu64 (%rdx), %ymm0 + vinserti64x4 $0x01, (%r10), %zmm0, %zmm0 + vmovdqu64 32(%rdx), %ymm1 + vinserti64x4 $0x01, 32(%r10), %zmm1, %zmm1 + vmovdqu64 64(%rdx), %ymm2 + vinserti64x4 $0x01, 64(%r10), %zmm2, %zmm2 + vmovdqu64 96(%rdx), %ymm3 + vinserti64x4 $0x01, 96(%r10), %zmm3, %zmm3 + vmovdqu64 128(%rdx), %ymm4 + vinserti64x4 $0x01, 128(%r10), %zmm4, %zmm4 + vmovdqu64 160(%rdx), %ymm5 + vinserti64x4 $0x01, 160(%r10), %zmm5, %zmm5 + vmovdqu64 192(%rdx), %ymm6 + vinserti64x4 $0x01, 192(%r10), %zmm6, %zmm6 + vmovdqu64 224(%rdx), %ymm7 + vinserti64x4 $0x01, 224(%r10), %zmm7, %zmm7 + vmovdqu64 256(%rdx), %ymm19 + vinserti64x4 $0x01, 256(%r10), %zmm19, %zmm19 + vmovdqu64 288(%rdx), %ymm20 + vinserti64x4 $0x01, 288(%r10), %zmm20, %zmm20 + vmovdqu64 320(%rdx), %ymm21 + vinserti64x4 $0x01, 320(%r10), %zmm21, %zmm21 + vmovdqu64 352(%rdx), %ymm22 + vinserti64x4 $0x01, 352(%r10), %zmm22, %zmm22 + vmovdqu64 384(%rdx), %ymm23 + vinserti64x4 $0x01, 384(%r10), %zmm23, %zmm23 + vmovdqu64 416(%rdx), %ymm24 + vinserti64x4 $0x01, 416(%r10), %zmm24, %zmm24 + vmovdqu64 448(%rdx), %ymm25 + vinserti64x4 $0x01, 448(%r10), %zmm25, %zmm25 + vmovdqu64 480(%rdx), %ymm26 + vinserti64x4 $0x01, 480(%r10), %zmm26, %zmm26 + vbroadcasti64x4 (%r13), %zmm10 + vbroadcasti64x4 32(%r13), %zmm12 + vpmullw %zmm12, %zmm19, %zmm8 + vpmullw %zmm12, %zmm20, %zmm9 + vpmulhw %zmm10, %zmm19, %zmm19 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm8 + vpsubw %zmm9, %zmm20, %zmm9 + vpsubw %zmm8, %zmm0, %zmm19 + vpsubw %zmm9, %zmm1, %zmm20 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm2, %zmm21 + vpsubw %zmm9, %zmm3, %zmm22 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm4, %zmm23 + vpsubw %zmm9, %zmm5, %zmm24 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm6, %zmm25 + vpsubw %zmm9, %zmm7, %zmm26 + vpaddw %zmm8, %zmm6, %zmm6 + vpaddw %zmm9, %zmm7, %zmm7 + vbroadcasti64x4 64(%r13), %zmm10 + vbroadcasti64x4 96(%r13), %zmm12 + vpmullw %zmm12, %zmm4, %zmm8 + vpmullw %zmm12, %zmm5, %zmm9 + vpmulhw %zmm10, %zmm4, %zmm4 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm8 + vpsubw %zmm9, %zmm5, %zmm9 + vpsubw %zmm8, %zmm0, %zmm4 + vpsubw %zmm9, %zmm1, %zmm5 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm2, %zmm6 + vpsubw %zmm9, %zmm3, %zmm7 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vbroadcasti64x4 128(%r13), %zmm10 + vbroadcasti64x4 160(%r13), %zmm12 + vpmullw %zmm12, %zmm2, %zmm8 + vpmullw %zmm12, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm2, %zmm2 + vpmulhw %zmm10, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm2 + vpsubw %zmm9, %zmm1, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vbroadcasti64x4 192(%r13), %zmm10 + vbroadcasti64x4 224(%r13), %zmm12 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm6 + vpsubw %zmm9, %zmm5, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vbroadcasti64x4 256(%r13), %zmm10 + vbroadcasti64x4 288(%r13), %zmm12 + vbroadcasti64x4 320(%r13), %zmm11 + vbroadcasti64x4 352(%r13), %zmm13 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 384(%r13), %zmm10 + vbroadcasti64x4 416(%r13), %zmm12 + vbroadcasti64x4 448(%r13), %zmm11 + vbroadcasti64x4 480(%r13), %zmm13 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm1, %zmm0, %zmm8 + vbroadcasti64x4 512(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm16, %zmm1 + vbroadcasti64x4 544(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm3, %zmm2, %zmm9 + vbroadcasti64x4 576(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm16, %zmm3 + vbroadcasti64x4 608(%r13), %zmm13 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm0 + vpsubw %zmm2, %zmm3, %zmm2 + vpsubw %zmm0, %zmm8, %zmm1 + vpsubw %zmm2, %zmm9, %zmm3 + vpaddw %zmm0, %zmm8, %zmm8 + vpaddw %zmm2, %zmm9, %zmm9 + vbroadcasti64x4 640(%r13), %zmm10 + vbroadcasti64x4 672(%r13), %zmm12 + vbroadcasti64x4 704(%r13), %zmm11 + vbroadcasti64x4 736(%r13), %zmm13 + vpunpcklqdq %zmm1, %zmm8, %zmm0 + vpunpckhqdq %zmm1, %zmm8, %zmm1 + vpunpcklqdq %zmm3, %zmm9, %zmm2 + vpunpckhqdq %zmm3, %zmm9, %zmm3 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm5, %zmm4, %zmm8 + vbroadcasti64x4 768(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm16, %zmm5 + vbroadcasti64x4 800(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm7, %zmm6, %zmm9 + vbroadcasti64x4 832(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm16, %zmm7 + vbroadcasti64x4 864(%r13), %zmm13 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm4 + vpsubw %zmm6, %zmm7, %zmm6 + vpsubw %zmm4, %zmm8, %zmm5 + vpsubw %zmm6, %zmm9, %zmm7 + vpaddw %zmm4, %zmm8, %zmm8 + vpaddw %zmm6, %zmm9, %zmm9 + vbroadcasti64x4 896(%r13), %zmm10 + vbroadcasti64x4 928(%r13), %zmm12 + vbroadcasti64x4 960(%r13), %zmm11 + vbroadcasti64x4 992(%r13), %zmm13 + vpunpcklqdq %zmm5, %zmm8, %zmm4 + vpunpckhqdq %zmm5, %zmm8, %zmm5 + vpunpcklqdq %zmm7, %zmm9, %zmm6 + vpunpckhqdq %zmm7, %zmm9, %zmm7 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vbroadcasti64x4 1024(%r13), %zmm10 + vbroadcasti64x4 1056(%r13), %zmm12 + vbroadcasti64x4 1088(%r13), %zmm11 + vbroadcasti64x4 1120(%r13), %zmm13 + vpsllq $32, %zmm1, %zmm8 + vpsrlq $32, %zmm0, %zmm9 + vpblendmd %zmm8, %zmm0, %zmm0{%k1} + vpblendmd %zmm9, %zmm1, %zmm1{%k2} + vpsllq $32, %zmm3, %zmm8 + vpsrlq $32, %zmm2, %zmm9 + vpblendmd %zmm8, %zmm2, %zmm2{%k1} + vpblendmd %zmm9, %zmm3, %zmm3{%k2} + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 1152(%r13), %zmm10 + vbroadcasti64x4 1184(%r13), %zmm12 + vbroadcasti64x4 1216(%r13), %zmm11 + vbroadcasti64x4 1248(%r13), %zmm13 + vpsllq $32, %zmm5, %zmm8 + vpsrlq $32, %zmm4, %zmm9 + vpblendmd %zmm8, %zmm4, %zmm4{%k1} + vpblendmd %zmm9, %zmm5, %zmm5{%k2} + vpsllq $32, %zmm7, %zmm8 + vpsrlq $32, %zmm6, %zmm9 + vpblendmd %zmm8, %zmm6, %zmm6{%k1} + vpblendmd %zmm9, %zmm7, %zmm7{%k2} + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vpunpckldq %zmm1, %zmm0, %zmm8 + vpunpckhdq %zmm1, %zmm0, %zmm9 + vmovdqa64 %zmm17, %zmm0 + vpermi2q %zmm9, %zmm8, %zmm0 + vmovdqa64 %zmm18, %zmm1 + vpermi2q %zmm9, %zmm8, %zmm1 + vpunpckldq %zmm3, %zmm2, %zmm8 + vpunpckhdq %zmm3, %zmm2, %zmm9 + vmovdqa64 %zmm17, %zmm2 + vpermi2q %zmm9, %zmm8, %zmm2 + vmovdqa64 %zmm18, %zmm3 + vpermi2q %zmm9, %zmm8, %zmm3 + vpunpckldq %zmm5, %zmm4, %zmm8 + vpunpckhdq %zmm5, %zmm4, %zmm9 + vmovdqa64 %zmm17, %zmm4 + vpermi2q %zmm9, %zmm8, %zmm4 + vmovdqa64 %zmm18, %zmm5 + vpermi2q %zmm9, %zmm8, %zmm5 + vpunpckldq %zmm7, %zmm6, %zmm8 + vpunpckhdq %zmm7, %zmm6, %zmm9 + vmovdqa64 %zmm17, %zmm6 + vpermi2q %zmm9, %zmm8, %zmm6 + vmovdqa64 %zmm18, %zmm7 + vpermi2q %zmm9, %zmm8, %zmm7 + vmovdqu64 (%rsi), %ymm8 + vinserti64x4 $0x01, (%r11), %zmm8, %zmm8 + vmovdqu64 32(%rsi), %ymm9 + vinserti64x4 $0x01, 32(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmulhw %zmm15, %zmm0, %zmm8 + vpmulhw %zmm15, %zmm1, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm0, %zmm8 + vpsubw %zmm9, %zmm1, %zmm9 + vmovdqu64 %ymm8, (%rsi) + vextracti64x4 $0x01, %zmm8, (%r11) + vmovdqu64 %ymm9, 32(%rsi) + vextracti64x4 $0x01, %zmm9, 32(%r11) + vmovdqu64 64(%rsi), %ymm8 + vinserti64x4 $0x01, 64(%r11), %zmm8, %zmm8 + vmovdqu64 96(%rsi), %ymm9 + vinserti64x4 $0x01, 96(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vpmulhw %zmm15, %zmm2, %zmm8 + vpmulhw %zmm15, %zmm3, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vmovdqu64 %ymm8, 64(%rsi) + vextracti64x4 $0x01, %zmm8, 64(%r11) + vmovdqu64 %ymm9, 96(%rsi) + vextracti64x4 $0x01, %zmm9, 96(%r11) + vmovdqu64 128(%rsi), %ymm8 + vinserti64x4 $0x01, 128(%r11), %zmm8, %zmm8 + vmovdqu64 160(%rsi), %ymm9 + vinserti64x4 $0x01, 160(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vpmulhw %zmm15, %zmm4, %zmm8 + vpmulhw %zmm15, %zmm5, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm8 + vpsubw %zmm9, %zmm5, %zmm9 + vmovdqu64 %ymm8, 128(%rsi) + vextracti64x4 $0x01, %zmm8, 128(%r11) + vmovdqu64 %ymm9, 160(%rsi) + vextracti64x4 $0x01, %zmm9, 160(%r11) + vmovdqu64 192(%rsi), %ymm8 + vinserti64x4 $0x01, 192(%r11), %zmm8, %zmm8 + vmovdqu64 224(%rsi), %ymm9 + vinserti64x4 $0x01, 224(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm6, %zmm6 + vpaddw %zmm9, %zmm7, %zmm7 + vpmulhw %zmm15, %zmm6, %zmm8 + vpmulhw %zmm15, %zmm7, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vmovdqu64 %ymm8, 192(%rsi) + vextracti64x4 $0x01, %zmm8, 192(%r11) + vmovdqu64 %ymm9, 224(%rsi) + vextracti64x4 $0x01, %zmm9, 224(%r11) + vbroadcasti64x4 1280(%r13), %zmm10 + vbroadcasti64x4 1312(%r13), %zmm12 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm19, %zmm23 + vpsubw %zmm9, %zmm20, %zmm24 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm21, %zmm25 + vpsubw %zmm9, %zmm22, %zmm26 + vpaddw %zmm8, %zmm21, %zmm21 + vpaddw %zmm9, %zmm22, %zmm22 + vbroadcasti64x4 1344(%r13), %zmm10 + vbroadcasti64x4 1376(%r13), %zmm12 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm21 + vpsubw %zmm9, %zmm20, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vbroadcasti64x4 1408(%r13), %zmm10 + vbroadcasti64x4 1440(%r13), %zmm12 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm25 + vpsubw %zmm9, %zmm24, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm24, %zmm24 + vbroadcasti64x4 1472(%r13), %zmm10 + vbroadcasti64x4 1504(%r13), %zmm12 + vbroadcasti64x4 1536(%r13), %zmm11 + vbroadcasti64x4 1568(%r13), %zmm13 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 1600(%r13), %zmm10 + vbroadcasti64x4 1632(%r13), %zmm12 + vbroadcasti64x4 1664(%r13), %zmm11 + vbroadcasti64x4 1696(%r13), %zmm13 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm20, %zmm19, %zmm8 + vbroadcasti64x4 1728(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm20, %zmm19, %zmm16 + vmovdqa64 %zmm16, %zmm20 + vbroadcasti64x4 1760(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm22, %zmm21, %zmm9 + vbroadcasti64x4 1792(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm22, %zmm21, %zmm16 + vmovdqa64 %zmm16, %zmm22 + vbroadcasti64x4 1824(%r13), %zmm13 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm19 + vpsubw %zmm21, %zmm22, %zmm21 + vpsubw %zmm19, %zmm8, %zmm20 + vpsubw %zmm21, %zmm9, %zmm22 + vpaddw %zmm19, %zmm8, %zmm8 + vpaddw %zmm21, %zmm9, %zmm9 + vbroadcasti64x4 1856(%r13), %zmm10 + vbroadcasti64x4 1888(%r13), %zmm12 + vbroadcasti64x4 1920(%r13), %zmm11 + vbroadcasti64x4 1952(%r13), %zmm13 + vpunpcklqdq %zmm20, %zmm8, %zmm19 + vpunpckhqdq %zmm20, %zmm8, %zmm20 + vpunpcklqdq %zmm22, %zmm9, %zmm21 + vpunpckhqdq %zmm22, %zmm9, %zmm22 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm24, %zmm23, %zmm8 + vbroadcasti64x4 1984(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm24, %zmm23, %zmm16 + vmovdqa64 %zmm16, %zmm24 + vbroadcasti64x4 2016(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm26, %zmm25, %zmm9 + vbroadcasti64x4 2048(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm26, %zmm25, %zmm16 + vmovdqa64 %zmm16, %zmm26 + vbroadcasti64x4 2080(%r13), %zmm13 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm23 + vpsubw %zmm25, %zmm26, %zmm25 + vpsubw %zmm23, %zmm8, %zmm24 + vpsubw %zmm25, %zmm9, %zmm26 + vpaddw %zmm23, %zmm8, %zmm8 + vpaddw %zmm25, %zmm9, %zmm9 + vbroadcasti64x4 2112(%r13), %zmm10 + vbroadcasti64x4 2144(%r13), %zmm12 + vbroadcasti64x4 2176(%r13), %zmm11 + vbroadcasti64x4 2208(%r13), %zmm13 + vpunpcklqdq %zmm24, %zmm8, %zmm23 + vpunpckhqdq %zmm24, %zmm8, %zmm24 + vpunpcklqdq %zmm26, %zmm9, %zmm25 + vpunpckhqdq %zmm26, %zmm9, %zmm26 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vbroadcasti64x4 2240(%r13), %zmm10 + vbroadcasti64x4 2272(%r13), %zmm12 + vbroadcasti64x4 2304(%r13), %zmm11 + vbroadcasti64x4 2336(%r13), %zmm13 + vpsllq $32, %zmm20, %zmm8 + vpsrlq $32, %zmm19, %zmm9 + vpblendmd %zmm8, %zmm19, %zmm19{%k1} + vpblendmd %zmm9, %zmm20, %zmm20{%k2} + vpsllq $32, %zmm22, %zmm8 + vpsrlq $32, %zmm21, %zmm9 + vpblendmd %zmm8, %zmm21, %zmm21{%k1} + vpblendmd %zmm9, %zmm22, %zmm22{%k2} + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 2368(%r13), %zmm10 + vbroadcasti64x4 2400(%r13), %zmm12 + vbroadcasti64x4 2432(%r13), %zmm11 + vbroadcasti64x4 2464(%r13), %zmm13 + vpsllq $32, %zmm24, %zmm8 + vpsrlq $32, %zmm23, %zmm9 + vpblendmd %zmm8, %zmm23, %zmm23{%k1} + vpblendmd %zmm9, %zmm24, %zmm24{%k2} + vpsllq $32, %zmm26, %zmm8 + vpsrlq $32, %zmm25, %zmm9 + vpblendmd %zmm8, %zmm25, %zmm25{%k1} + vpblendmd %zmm9, %zmm26, %zmm26{%k2} + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vpunpckldq %zmm20, %zmm19, %zmm8 + vpunpckhdq %zmm20, %zmm19, %zmm9 + vmovdqa64 %zmm17, %zmm19 + vpermi2q %zmm9, %zmm8, %zmm19 + vmovdqa64 %zmm18, %zmm20 + vpermi2q %zmm9, %zmm8, %zmm20 + vpunpckldq %zmm22, %zmm21, %zmm8 + vpunpckhdq %zmm22, %zmm21, %zmm9 + vmovdqa64 %zmm17, %zmm21 + vpermi2q %zmm9, %zmm8, %zmm21 + vmovdqa64 %zmm18, %zmm22 + vpermi2q %zmm9, %zmm8, %zmm22 + vpunpckldq %zmm24, %zmm23, %zmm8 + vpunpckhdq %zmm24, %zmm23, %zmm9 + vmovdqa64 %zmm17, %zmm23 + vpermi2q %zmm9, %zmm8, %zmm23 + vmovdqa64 %zmm18, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vpunpckldq %zmm26, %zmm25, %zmm8 + vpunpckhdq %zmm26, %zmm25, %zmm9 + vmovdqa64 %zmm17, %zmm25 + vpermi2q %zmm9, %zmm8, %zmm25 + vmovdqa64 %zmm18, %zmm26 + vpermi2q %zmm9, %zmm8, %zmm26 + vmovdqu64 256(%rsi), %ymm8 + vinserti64x4 $0x01, 256(%r11), %zmm8, %zmm8 + vmovdqu64 288(%rsi), %ymm9 + vinserti64x4 $0x01, 288(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vpmulhw %zmm15, %zmm19, %zmm8 + vpmulhw %zmm15, %zmm20, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm8 + vpsubw %zmm9, %zmm20, %zmm9 + vmovdqu64 %ymm8, 256(%rsi) + vextracti64x4 $0x01, %zmm8, 256(%r11) + vmovdqu64 %ymm9, 288(%rsi) + vextracti64x4 $0x01, %zmm9, 288(%r11) + vmovdqu64 320(%rsi), %ymm8 + vinserti64x4 $0x01, 320(%r11), %zmm8, %zmm8 + vmovdqu64 352(%rsi), %ymm9 + vinserti64x4 $0x01, 352(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm21, %zmm21 + vpaddw %zmm9, %zmm22, %zmm22 + vpmulhw %zmm15, %zmm21, %zmm8 + vpmulhw %zmm15, %zmm22, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vmovdqu64 %ymm8, 320(%rsi) + vextracti64x4 $0x01, %zmm8, 320(%r11) + vmovdqu64 %ymm9, 352(%rsi) + vextracti64x4 $0x01, %zmm9, 352(%r11) + vmovdqu64 384(%rsi), %ymm8 + vinserti64x4 $0x01, 384(%r11), %zmm8, %zmm8 + vmovdqu64 416(%rsi), %ymm9 + vinserti64x4 $0x01, 416(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm24, %zmm24 + vpmulhw %zmm15, %zmm23, %zmm8 + vpmulhw %zmm15, %zmm24, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vmovdqu64 %ymm8, 384(%rsi) + vextracti64x4 $0x01, %zmm8, 384(%r11) + vmovdqu64 %ymm9, 416(%rsi) + vextracti64x4 $0x01, %zmm9, 416(%r11) + vmovdqu64 448(%rsi), %ymm8 + vinserti64x4 $0x01, 448(%r11), %zmm8, %zmm8 + vmovdqu64 480(%rsi), %ymm9 + vinserti64x4 $0x01, 480(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm25, %zmm25 + vpaddw %zmm9, %zmm26, %zmm26 + vpmulhw %zmm15, %zmm25, %zmm8 + vpmulhw %zmm15, %zmm26, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vmovdqu64 %ymm8, 448(%rsi) + vextracti64x4 $0x01, %zmm8, 448(%r11) + vmovdqu64 %ymm9, 480(%rsi) + vextracti64x4 $0x01, %zmm9, 480(%r11) + addq $0x400, %rdx + addq $0x400, %rsi + subq $2, %rax + jmp L_keygen_avx512_err +L_keygen_avx512_err_odd: + cmpq $0x01, %rax + jne L_keygen_avx512_err_done + leaq (%rsp), %r10 + movq %r10, %r11 + addq $0x200, %r11 + leaq L_mlkem_avx512_zetas(%rip), %r13 + vmovdqu64 (%rdx), %ymm0 + vinserti64x4 $0x01, (%r10), %zmm0, %zmm0 + vmovdqu64 32(%rdx), %ymm1 + vinserti64x4 $0x01, 32(%r10), %zmm1, %zmm1 + vmovdqu64 64(%rdx), %ymm2 + vinserti64x4 $0x01, 64(%r10), %zmm2, %zmm2 + vmovdqu64 96(%rdx), %ymm3 + vinserti64x4 $0x01, 96(%r10), %zmm3, %zmm3 + vmovdqu64 128(%rdx), %ymm4 + vinserti64x4 $0x01, 128(%r10), %zmm4, %zmm4 + vmovdqu64 160(%rdx), %ymm5 + vinserti64x4 $0x01, 160(%r10), %zmm5, %zmm5 + vmovdqu64 192(%rdx), %ymm6 + vinserti64x4 $0x01, 192(%r10), %zmm6, %zmm6 + vmovdqu64 224(%rdx), %ymm7 + vinserti64x4 $0x01, 224(%r10), %zmm7, %zmm7 + vmovdqu64 256(%rdx), %ymm19 + vinserti64x4 $0x01, 256(%r10), %zmm19, %zmm19 + vmovdqu64 288(%rdx), %ymm20 + vinserti64x4 $0x01, 288(%r10), %zmm20, %zmm20 + vmovdqu64 320(%rdx), %ymm21 + vinserti64x4 $0x01, 320(%r10), %zmm21, %zmm21 + vmovdqu64 352(%rdx), %ymm22 + vinserti64x4 $0x01, 352(%r10), %zmm22, %zmm22 + vmovdqu64 384(%rdx), %ymm23 + vinserti64x4 $0x01, 384(%r10), %zmm23, %zmm23 + vmovdqu64 416(%rdx), %ymm24 + vinserti64x4 $0x01, 416(%r10), %zmm24, %zmm24 + vmovdqu64 448(%rdx), %ymm25 + vinserti64x4 $0x01, 448(%r10), %zmm25, %zmm25 + vmovdqu64 480(%rdx), %ymm26 + vinserti64x4 $0x01, 480(%r10), %zmm26, %zmm26 + vbroadcasti64x4 (%r13), %zmm10 + vbroadcasti64x4 32(%r13), %zmm12 + vpmullw %zmm12, %zmm19, %zmm8 + vpmullw %zmm12, %zmm20, %zmm9 + vpmulhw %zmm10, %zmm19, %zmm19 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm8 + vpsubw %zmm9, %zmm20, %zmm9 + vpsubw %zmm8, %zmm0, %zmm19 + vpsubw %zmm9, %zmm1, %zmm20 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm2, %zmm21 + vpsubw %zmm9, %zmm3, %zmm22 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm4, %zmm23 + vpsubw %zmm9, %zmm5, %zmm24 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm6, %zmm25 + vpsubw %zmm9, %zmm7, %zmm26 + vpaddw %zmm8, %zmm6, %zmm6 + vpaddw %zmm9, %zmm7, %zmm7 + vbroadcasti64x4 64(%r13), %zmm10 + vbroadcasti64x4 96(%r13), %zmm12 + vpmullw %zmm12, %zmm4, %zmm8 + vpmullw %zmm12, %zmm5, %zmm9 + vpmulhw %zmm10, %zmm4, %zmm4 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm8 + vpsubw %zmm9, %zmm5, %zmm9 + vpsubw %zmm8, %zmm0, %zmm4 + vpsubw %zmm9, %zmm1, %zmm5 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm2, %zmm6 + vpsubw %zmm9, %zmm3, %zmm7 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vbroadcasti64x4 128(%r13), %zmm10 + vbroadcasti64x4 160(%r13), %zmm12 + vpmullw %zmm12, %zmm2, %zmm8 + vpmullw %zmm12, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm2, %zmm2 + vpmulhw %zmm10, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm2 + vpsubw %zmm9, %zmm1, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vbroadcasti64x4 192(%r13), %zmm10 + vbroadcasti64x4 224(%r13), %zmm12 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm6 + vpsubw %zmm9, %zmm5, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vbroadcasti64x4 256(%r13), %zmm10 + vbroadcasti64x4 288(%r13), %zmm12 + vbroadcasti64x4 320(%r13), %zmm11 + vbroadcasti64x4 352(%r13), %zmm13 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 384(%r13), %zmm10 + vbroadcasti64x4 416(%r13), %zmm12 + vbroadcasti64x4 448(%r13), %zmm11 + vbroadcasti64x4 480(%r13), %zmm13 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm1, %zmm0, %zmm8 + vbroadcasti64x4 512(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm16, %zmm1 + vbroadcasti64x4 544(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm3, %zmm2, %zmm9 + vbroadcasti64x4 576(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm16, %zmm3 + vbroadcasti64x4 608(%r13), %zmm13 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm0 + vpsubw %zmm2, %zmm3, %zmm2 + vpsubw %zmm0, %zmm8, %zmm1 + vpsubw %zmm2, %zmm9, %zmm3 + vpaddw %zmm0, %zmm8, %zmm8 + vpaddw %zmm2, %zmm9, %zmm9 + vbroadcasti64x4 640(%r13), %zmm10 + vbroadcasti64x4 672(%r13), %zmm12 + vbroadcasti64x4 704(%r13), %zmm11 + vbroadcasti64x4 736(%r13), %zmm13 + vpunpcklqdq %zmm1, %zmm8, %zmm0 + vpunpckhqdq %zmm1, %zmm8, %zmm1 + vpunpcklqdq %zmm3, %zmm9, %zmm2 + vpunpckhqdq %zmm3, %zmm9, %zmm3 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm5, %zmm4, %zmm8 + vbroadcasti64x4 768(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm16, %zmm5 + vbroadcasti64x4 800(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm7, %zmm6, %zmm9 + vbroadcasti64x4 832(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm16, %zmm7 + vbroadcasti64x4 864(%r13), %zmm13 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm4 + vpsubw %zmm6, %zmm7, %zmm6 + vpsubw %zmm4, %zmm8, %zmm5 + vpsubw %zmm6, %zmm9, %zmm7 + vpaddw %zmm4, %zmm8, %zmm8 + vpaddw %zmm6, %zmm9, %zmm9 + vbroadcasti64x4 896(%r13), %zmm10 + vbroadcasti64x4 928(%r13), %zmm12 + vbroadcasti64x4 960(%r13), %zmm11 + vbroadcasti64x4 992(%r13), %zmm13 + vpunpcklqdq %zmm5, %zmm8, %zmm4 + vpunpckhqdq %zmm5, %zmm8, %zmm5 + vpunpcklqdq %zmm7, %zmm9, %zmm6 + vpunpckhqdq %zmm7, %zmm9, %zmm7 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vbroadcasti64x4 1024(%r13), %zmm10 + vbroadcasti64x4 1056(%r13), %zmm12 + vbroadcasti64x4 1088(%r13), %zmm11 + vbroadcasti64x4 1120(%r13), %zmm13 + vpsllq $32, %zmm1, %zmm8 + vpsrlq $32, %zmm0, %zmm9 + vpblendmd %zmm8, %zmm0, %zmm0{%k1} + vpblendmd %zmm9, %zmm1, %zmm1{%k2} + vpsllq $32, %zmm3, %zmm8 + vpsrlq $32, %zmm2, %zmm9 + vpblendmd %zmm8, %zmm2, %zmm2{%k1} + vpblendmd %zmm9, %zmm3, %zmm3{%k2} + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 1152(%r13), %zmm10 + vbroadcasti64x4 1184(%r13), %zmm12 + vbroadcasti64x4 1216(%r13), %zmm11 + vbroadcasti64x4 1248(%r13), %zmm13 + vpsllq $32, %zmm5, %zmm8 + vpsrlq $32, %zmm4, %zmm9 + vpblendmd %zmm8, %zmm4, %zmm4{%k1} + vpblendmd %zmm9, %zmm5, %zmm5{%k2} + vpsllq $32, %zmm7, %zmm8 + vpsrlq $32, %zmm6, %zmm9 + vpblendmd %zmm8, %zmm6, %zmm6{%k1} + vpblendmd %zmm9, %zmm7, %zmm7{%k2} + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vpunpckldq %zmm1, %zmm0, %zmm8 + vpunpckhdq %zmm1, %zmm0, %zmm9 + vmovdqa64 %zmm17, %zmm0 + vpermi2q %zmm9, %zmm8, %zmm0 + vmovdqa64 %zmm18, %zmm1 + vpermi2q %zmm9, %zmm8, %zmm1 + vpunpckldq %zmm3, %zmm2, %zmm8 + vpunpckhdq %zmm3, %zmm2, %zmm9 + vmovdqa64 %zmm17, %zmm2 + vpermi2q %zmm9, %zmm8, %zmm2 + vmovdqa64 %zmm18, %zmm3 + vpermi2q %zmm9, %zmm8, %zmm3 + vpunpckldq %zmm5, %zmm4, %zmm8 + vpunpckhdq %zmm5, %zmm4, %zmm9 + vmovdqa64 %zmm17, %zmm4 + vpermi2q %zmm9, %zmm8, %zmm4 + vmovdqa64 %zmm18, %zmm5 + vpermi2q %zmm9, %zmm8, %zmm5 + vpunpckldq %zmm7, %zmm6, %zmm8 + vpunpckhdq %zmm7, %zmm6, %zmm9 + vmovdqa64 %zmm17, %zmm6 + vpermi2q %zmm9, %zmm8, %zmm6 + vmovdqa64 %zmm18, %zmm7 + vpermi2q %zmm9, %zmm8, %zmm7 + vmovdqu64 (%rsi), %ymm8 + vinserti64x4 $0x01, (%r11), %zmm8, %zmm8 + vmovdqu64 32(%rsi), %ymm9 + vinserti64x4 $0x01, 32(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmulhw %zmm15, %zmm0, %zmm8 + vpmulhw %zmm15, %zmm1, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm0, %zmm8 + vpsubw %zmm9, %zmm1, %zmm9 + vmovdqu64 %ymm8, (%rsi) + vextracti64x4 $0x01, %zmm8, (%r11) + vmovdqu64 %ymm9, 32(%rsi) + vextracti64x4 $0x01, %zmm9, 32(%r11) + vmovdqu64 64(%rsi), %ymm8 + vinserti64x4 $0x01, 64(%r11), %zmm8, %zmm8 + vmovdqu64 96(%rsi), %ymm9 + vinserti64x4 $0x01, 96(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vpmulhw %zmm15, %zmm2, %zmm8 + vpmulhw %zmm15, %zmm3, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vmovdqu64 %ymm8, 64(%rsi) + vextracti64x4 $0x01, %zmm8, 64(%r11) + vmovdqu64 %ymm9, 96(%rsi) + vextracti64x4 $0x01, %zmm9, 96(%r11) + vmovdqu64 128(%rsi), %ymm8 + vinserti64x4 $0x01, 128(%r11), %zmm8, %zmm8 + vmovdqu64 160(%rsi), %ymm9 + vinserti64x4 $0x01, 160(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vpmulhw %zmm15, %zmm4, %zmm8 + vpmulhw %zmm15, %zmm5, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm8 + vpsubw %zmm9, %zmm5, %zmm9 + vmovdqu64 %ymm8, 128(%rsi) + vextracti64x4 $0x01, %zmm8, 128(%r11) + vmovdqu64 %ymm9, 160(%rsi) + vextracti64x4 $0x01, %zmm9, 160(%r11) + vmovdqu64 192(%rsi), %ymm8 + vinserti64x4 $0x01, 192(%r11), %zmm8, %zmm8 + vmovdqu64 224(%rsi), %ymm9 + vinserti64x4 $0x01, 224(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm6, %zmm6 + vpaddw %zmm9, %zmm7, %zmm7 + vpmulhw %zmm15, %zmm6, %zmm8 + vpmulhw %zmm15, %zmm7, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vmovdqu64 %ymm8, 192(%rsi) + vextracti64x4 $0x01, %zmm8, 192(%r11) + vmovdqu64 %ymm9, 224(%rsi) + vextracti64x4 $0x01, %zmm9, 224(%r11) + vbroadcasti64x4 1280(%r13), %zmm10 + vbroadcasti64x4 1312(%r13), %zmm12 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm19, %zmm23 + vpsubw %zmm9, %zmm20, %zmm24 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm21, %zmm25 + vpsubw %zmm9, %zmm22, %zmm26 + vpaddw %zmm8, %zmm21, %zmm21 + vpaddw %zmm9, %zmm22, %zmm22 + vbroadcasti64x4 1344(%r13), %zmm10 + vbroadcasti64x4 1376(%r13), %zmm12 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm21 + vpsubw %zmm9, %zmm20, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vbroadcasti64x4 1408(%r13), %zmm10 + vbroadcasti64x4 1440(%r13), %zmm12 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm25 + vpsubw %zmm9, %zmm24, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm24, %zmm24 + vbroadcasti64x4 1472(%r13), %zmm10 + vbroadcasti64x4 1504(%r13), %zmm12 + vbroadcasti64x4 1536(%r13), %zmm11 + vbroadcasti64x4 1568(%r13), %zmm13 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 1600(%r13), %zmm10 + vbroadcasti64x4 1632(%r13), %zmm12 + vbroadcasti64x4 1664(%r13), %zmm11 + vbroadcasti64x4 1696(%r13), %zmm13 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm20, %zmm19, %zmm8 + vbroadcasti64x4 1728(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm20, %zmm19, %zmm16 + vmovdqa64 %zmm16, %zmm20 + vbroadcasti64x4 1760(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm22, %zmm21, %zmm9 + vbroadcasti64x4 1792(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm22, %zmm21, %zmm16 + vmovdqa64 %zmm16, %zmm22 + vbroadcasti64x4 1824(%r13), %zmm13 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm19 + vpsubw %zmm21, %zmm22, %zmm21 + vpsubw %zmm19, %zmm8, %zmm20 + vpsubw %zmm21, %zmm9, %zmm22 + vpaddw %zmm19, %zmm8, %zmm8 + vpaddw %zmm21, %zmm9, %zmm9 + vbroadcasti64x4 1856(%r13), %zmm10 + vbroadcasti64x4 1888(%r13), %zmm12 + vbroadcasti64x4 1920(%r13), %zmm11 + vbroadcasti64x4 1952(%r13), %zmm13 + vpunpcklqdq %zmm20, %zmm8, %zmm19 + vpunpckhqdq %zmm20, %zmm8, %zmm20 + vpunpcklqdq %zmm22, %zmm9, %zmm21 + vpunpckhqdq %zmm22, %zmm9, %zmm22 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm24, %zmm23, %zmm8 + vbroadcasti64x4 1984(%r13), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm24, %zmm23, %zmm16 + vmovdqa64 %zmm16, %zmm24 + vbroadcasti64x4 2016(%r13), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm26, %zmm25, %zmm9 + vbroadcasti64x4 2048(%r13), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm26, %zmm25, %zmm16 + vmovdqa64 %zmm16, %zmm26 + vbroadcasti64x4 2080(%r13), %zmm13 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm23 + vpsubw %zmm25, %zmm26, %zmm25 + vpsubw %zmm23, %zmm8, %zmm24 + vpsubw %zmm25, %zmm9, %zmm26 + vpaddw %zmm23, %zmm8, %zmm8 + vpaddw %zmm25, %zmm9, %zmm9 + vbroadcasti64x4 2112(%r13), %zmm10 + vbroadcasti64x4 2144(%r13), %zmm12 + vbroadcasti64x4 2176(%r13), %zmm11 + vbroadcasti64x4 2208(%r13), %zmm13 + vpunpcklqdq %zmm24, %zmm8, %zmm23 + vpunpckhqdq %zmm24, %zmm8, %zmm24 + vpunpcklqdq %zmm26, %zmm9, %zmm25 + vpunpckhqdq %zmm26, %zmm9, %zmm26 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vbroadcasti64x4 2240(%r13), %zmm10 + vbroadcasti64x4 2272(%r13), %zmm12 + vbroadcasti64x4 2304(%r13), %zmm11 + vbroadcasti64x4 2336(%r13), %zmm13 + vpsllq $32, %zmm20, %zmm8 + vpsrlq $32, %zmm19, %zmm9 + vpblendmd %zmm8, %zmm19, %zmm19{%k1} + vpblendmd %zmm9, %zmm20, %zmm20{%k2} + vpsllq $32, %zmm22, %zmm8 + vpsrlq $32, %zmm21, %zmm9 + vpblendmd %zmm8, %zmm21, %zmm21{%k1} + vpblendmd %zmm9, %zmm22, %zmm22{%k2} + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 2368(%r13), %zmm10 + vbroadcasti64x4 2400(%r13), %zmm12 + vbroadcasti64x4 2432(%r13), %zmm11 + vbroadcasti64x4 2464(%r13), %zmm13 + vpsllq $32, %zmm24, %zmm8 + vpsrlq $32, %zmm23, %zmm9 + vpblendmd %zmm8, %zmm23, %zmm23{%k1} + vpblendmd %zmm9, %zmm24, %zmm24{%k2} + vpsllq $32, %zmm26, %zmm8 + vpsrlq $32, %zmm25, %zmm9 + vpblendmd %zmm8, %zmm25, %zmm25{%k1} + vpblendmd %zmm9, %zmm26, %zmm26{%k2} + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vpunpckldq %zmm20, %zmm19, %zmm8 + vpunpckhdq %zmm20, %zmm19, %zmm9 + vmovdqa64 %zmm17, %zmm19 + vpermi2q %zmm9, %zmm8, %zmm19 + vmovdqa64 %zmm18, %zmm20 + vpermi2q %zmm9, %zmm8, %zmm20 + vpunpckldq %zmm22, %zmm21, %zmm8 + vpunpckhdq %zmm22, %zmm21, %zmm9 + vmovdqa64 %zmm17, %zmm21 + vpermi2q %zmm9, %zmm8, %zmm21 + vmovdqa64 %zmm18, %zmm22 + vpermi2q %zmm9, %zmm8, %zmm22 + vpunpckldq %zmm24, %zmm23, %zmm8 + vpunpckhdq %zmm24, %zmm23, %zmm9 + vmovdqa64 %zmm17, %zmm23 + vpermi2q %zmm9, %zmm8, %zmm23 + vmovdqa64 %zmm18, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vpunpckldq %zmm26, %zmm25, %zmm8 + vpunpckhdq %zmm26, %zmm25, %zmm9 + vmovdqa64 %zmm17, %zmm25 + vpermi2q %zmm9, %zmm8, %zmm25 + vmovdqa64 %zmm18, %zmm26 + vpermi2q %zmm9, %zmm8, %zmm26 + vmovdqu64 256(%rsi), %ymm8 + vinserti64x4 $0x01, 256(%r11), %zmm8, %zmm8 + vmovdqu64 288(%rsi), %ymm9 + vinserti64x4 $0x01, 288(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vpmulhw %zmm15, %zmm19, %zmm8 + vpmulhw %zmm15, %zmm20, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm8 + vpsubw %zmm9, %zmm20, %zmm9 + vmovdqu64 %ymm8, 256(%rsi) + vextracti64x4 $0x01, %zmm8, 256(%r11) + vmovdqu64 %ymm9, 288(%rsi) + vextracti64x4 $0x01, %zmm9, 288(%r11) + vmovdqu64 320(%rsi), %ymm8 + vinserti64x4 $0x01, 320(%r11), %zmm8, %zmm8 + vmovdqu64 352(%rsi), %ymm9 + vinserti64x4 $0x01, 352(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm21, %zmm21 + vpaddw %zmm9, %zmm22, %zmm22 + vpmulhw %zmm15, %zmm21, %zmm8 + vpmulhw %zmm15, %zmm22, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vmovdqu64 %ymm8, 320(%rsi) + vextracti64x4 $0x01, %zmm8, 320(%r11) + vmovdqu64 %ymm9, 352(%rsi) + vextracti64x4 $0x01, %zmm9, 352(%r11) + vmovdqu64 384(%rsi), %ymm8 + vinserti64x4 $0x01, 384(%r11), %zmm8, %zmm8 + vmovdqu64 416(%rsi), %ymm9 + vinserti64x4 $0x01, 416(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm24, %zmm24 + vpmulhw %zmm15, %zmm23, %zmm8 + vpmulhw %zmm15, %zmm24, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vmovdqu64 %ymm8, 384(%rsi) + vextracti64x4 $0x01, %zmm8, 384(%r11) + vmovdqu64 %ymm9, 416(%rsi) + vextracti64x4 $0x01, %zmm9, 416(%r11) + vmovdqu64 448(%rsi), %ymm8 + vinserti64x4 $0x01, 448(%r11), %zmm8, %zmm8 + vmovdqu64 480(%rsi), %ymm9 + vinserti64x4 $0x01, 480(%r11), %zmm9, %zmm9 + vpaddw %zmm8, %zmm25, %zmm25 + vpaddw %zmm9, %zmm26, %zmm26 + vpmulhw %zmm15, %zmm25, %zmm8 + vpmulhw %zmm15, %zmm26, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vmovdqu64 %ymm8, 448(%rsi) + vextracti64x4 $0x01, %zmm8, 448(%r11) + vmovdqu64 %ymm9, 480(%rsi) + vextracti64x4 $0x01, %zmm9, 480(%r11) +L_keygen_avx512_err_done: + vzeroupper + addq $0x400, %rsp + popq %r14 + popq %r13 + popq %r12 + repz retq +#ifndef __APPLE__ +.size mlkem_keygen_avx512,.-mlkem_keygen_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl mlkem_encapsulate_avx512 +.type mlkem_encapsulate_avx512,@function +.align 16 +mlkem_encapsulate_avx512: +#else +.section __TEXT,__text +.globl _mlkem_encapsulate_avx512 +.p2align 4 +_mlkem_encapsulate_avx512: +#endif /* __APPLE__ */ + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + pushq %rbx + pushq %rbp + movq 56(%rsp), %rax + movq 64(%rsp), %r10 + movq 72(%rsp), %r11 + subq $56, %rsp + movq $0xd01, %r13 + vmovd %r13d, %xmm14 + vpbroadcastw %xmm14, %zmm14 + movq $0x4ebf, %r13 + vmovd %r13d, %xmm15 + vpbroadcastw %xmm15, %zmm15 + movl $0xaaaa, %r13d + kmovw %r13d, %k1 + movl $0x5555, %r13d + kmovw %r13d, %k2 + movl $0xaaaaaaaa, %r13d + kmovd %r13d, %k3 + movl $0x55555555, %r13d + kmovd %r13d, %k4 + vmovdqu64 L_mlkem_avx512_perm20(%rip), %zmm17 + vmovdqu64 L_mlkem_avx512_perm31(%rip), %zmm18 + movq %r8, %rbx + movslq %r11d, %r13 + movq %r8, %r14 +L_encap_avx512_sp: + cmpq $2, %r13 + jl L_encap_avx512_sp_odd + movq %r14, %r15 + addq $0x200, %r15 + leaq L_mlkem_avx512_zetas(%rip), %rbp + vmovdqu64 (%r14), %ymm0 + vinserti64x4 $0x01, (%r15), %zmm0, %zmm0 + vmovdqu64 32(%r14), %ymm1 + vinserti64x4 $0x01, 32(%r15), %zmm1, %zmm1 + vmovdqu64 64(%r14), %ymm2 + vinserti64x4 $0x01, 64(%r15), %zmm2, %zmm2 + vmovdqu64 96(%r14), %ymm3 + vinserti64x4 $0x01, 96(%r15), %zmm3, %zmm3 + vmovdqu64 128(%r14), %ymm4 + vinserti64x4 $0x01, 128(%r15), %zmm4, %zmm4 + vmovdqu64 160(%r14), %ymm5 + vinserti64x4 $0x01, 160(%r15), %zmm5, %zmm5 + vmovdqu64 192(%r14), %ymm6 + vinserti64x4 $0x01, 192(%r15), %zmm6, %zmm6 + vmovdqu64 224(%r14), %ymm7 + vinserti64x4 $0x01, 224(%r15), %zmm7, %zmm7 + vmovdqu64 256(%r14), %ymm19 + vinserti64x4 $0x01, 256(%r15), %zmm19, %zmm19 + vmovdqu64 288(%r14), %ymm20 + vinserti64x4 $0x01, 288(%r15), %zmm20, %zmm20 + vmovdqu64 320(%r14), %ymm21 + vinserti64x4 $0x01, 320(%r15), %zmm21, %zmm21 + vmovdqu64 352(%r14), %ymm22 + vinserti64x4 $0x01, 352(%r15), %zmm22, %zmm22 + vmovdqu64 384(%r14), %ymm23 + vinserti64x4 $0x01, 384(%r15), %zmm23, %zmm23 + vmovdqu64 416(%r14), %ymm24 + vinserti64x4 $0x01, 416(%r15), %zmm24, %zmm24 + vmovdqu64 448(%r14), %ymm25 + vinserti64x4 $0x01, 448(%r15), %zmm25, %zmm25 + vmovdqu64 480(%r14), %ymm26 + vinserti64x4 $0x01, 480(%r15), %zmm26, %zmm26 + vbroadcasti64x4 (%rbp), %zmm10 + vbroadcasti64x4 32(%rbp), %zmm12 + vpmullw %zmm12, %zmm19, %zmm8 + vpmullw %zmm12, %zmm20, %zmm9 + vpmulhw %zmm10, %zmm19, %zmm19 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm8 + vpsubw %zmm9, %zmm20, %zmm9 + vpsubw %zmm8, %zmm0, %zmm19 + vpsubw %zmm9, %zmm1, %zmm20 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm2, %zmm21 + vpsubw %zmm9, %zmm3, %zmm22 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm4, %zmm23 + vpsubw %zmm9, %zmm5, %zmm24 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm6, %zmm25 + vpsubw %zmm9, %zmm7, %zmm26 + vpaddw %zmm8, %zmm6, %zmm6 + vpaddw %zmm9, %zmm7, %zmm7 + vbroadcasti64x4 64(%rbp), %zmm10 + vbroadcasti64x4 96(%rbp), %zmm12 + vpmullw %zmm12, %zmm4, %zmm8 + vpmullw %zmm12, %zmm5, %zmm9 + vpmulhw %zmm10, %zmm4, %zmm4 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm8 + vpsubw %zmm9, %zmm5, %zmm9 + vpsubw %zmm8, %zmm0, %zmm4 + vpsubw %zmm9, %zmm1, %zmm5 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm2, %zmm6 + vpsubw %zmm9, %zmm3, %zmm7 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vbroadcasti64x4 1280(%rbp), %zmm10 + vbroadcasti64x4 1312(%rbp), %zmm12 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm19, %zmm23 + vpsubw %zmm9, %zmm20, %zmm24 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm21, %zmm25 + vpsubw %zmm9, %zmm22, %zmm26 + vpaddw %zmm8, %zmm21, %zmm21 + vpaddw %zmm9, %zmm22, %zmm22 + vbroadcasti64x4 128(%rbp), %zmm10 + vbroadcasti64x4 160(%rbp), %zmm12 + vpmullw %zmm12, %zmm2, %zmm8 + vpmullw %zmm12, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm2, %zmm2 + vpmulhw %zmm10, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm2 + vpsubw %zmm9, %zmm1, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vbroadcasti64x4 1344(%rbp), %zmm10 + vbroadcasti64x4 1376(%rbp), %zmm12 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm21 + vpsubw %zmm9, %zmm20, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vbroadcasti64x4 192(%rbp), %zmm10 + vbroadcasti64x4 224(%rbp), %zmm12 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm6 + vpsubw %zmm9, %zmm5, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vbroadcasti64x4 1408(%rbp), %zmm10 + vbroadcasti64x4 1440(%rbp), %zmm12 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm25 + vpsubw %zmm9, %zmm24, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm24, %zmm24 + vbroadcasti64x4 256(%rbp), %zmm10 + vbroadcasti64x4 288(%rbp), %zmm12 + vbroadcasti64x4 320(%rbp), %zmm11 + vbroadcasti64x4 352(%rbp), %zmm13 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 1472(%rbp), %zmm10 + vbroadcasti64x4 1504(%rbp), %zmm12 + vbroadcasti64x4 1536(%rbp), %zmm11 + vbroadcasti64x4 1568(%rbp), %zmm13 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 384(%rbp), %zmm10 + vbroadcasti64x4 416(%rbp), %zmm12 + vbroadcasti64x4 448(%rbp), %zmm11 + vbroadcasti64x4 480(%rbp), %zmm13 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vbroadcasti64x4 1600(%rbp), %zmm10 + vbroadcasti64x4 1632(%rbp), %zmm12 + vbroadcasti64x4 1664(%rbp), %zmm11 + vbroadcasti64x4 1696(%rbp), %zmm13 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm1, %zmm0, %zmm8 + vbroadcasti64x4 512(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm16, %zmm1 + vbroadcasti64x4 544(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm3, %zmm2, %zmm9 + vbroadcasti64x4 576(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm16, %zmm3 + vbroadcasti64x4 608(%rbp), %zmm13 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm0 + vpsubw %zmm2, %zmm3, %zmm2 + vpsubw %zmm0, %zmm8, %zmm1 + vpsubw %zmm2, %zmm9, %zmm3 + vpaddw %zmm0, %zmm8, %zmm8 + vpaddw %zmm2, %zmm9, %zmm9 + vbroadcasti64x4 640(%rbp), %zmm10 + vbroadcasti64x4 672(%rbp), %zmm12 + vbroadcasti64x4 704(%rbp), %zmm11 + vbroadcasti64x4 736(%rbp), %zmm13 + vpunpcklqdq %zmm1, %zmm8, %zmm0 + vpunpckhqdq %zmm1, %zmm8, %zmm1 + vpunpcklqdq %zmm3, %zmm9, %zmm2 + vpunpckhqdq %zmm3, %zmm9, %zmm3 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm20, %zmm19, %zmm8 + vbroadcasti64x4 1728(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm20, %zmm19, %zmm16 + vmovdqa64 %zmm16, %zmm20 + vbroadcasti64x4 1760(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm22, %zmm21, %zmm9 + vbroadcasti64x4 1792(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm22, %zmm21, %zmm16 + vmovdqa64 %zmm16, %zmm22 + vbroadcasti64x4 1824(%rbp), %zmm13 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm19 + vpsubw %zmm21, %zmm22, %zmm21 + vpsubw %zmm19, %zmm8, %zmm20 + vpsubw %zmm21, %zmm9, %zmm22 + vpaddw %zmm19, %zmm8, %zmm8 + vpaddw %zmm21, %zmm9, %zmm9 + vbroadcasti64x4 1856(%rbp), %zmm10 + vbroadcasti64x4 1888(%rbp), %zmm12 + vbroadcasti64x4 1920(%rbp), %zmm11 + vbroadcasti64x4 1952(%rbp), %zmm13 + vpunpcklqdq %zmm20, %zmm8, %zmm19 + vpunpckhqdq %zmm20, %zmm8, %zmm20 + vpunpcklqdq %zmm22, %zmm9, %zmm21 + vpunpckhqdq %zmm22, %zmm9, %zmm22 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm5, %zmm4, %zmm8 + vbroadcasti64x4 768(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm16, %zmm5 + vbroadcasti64x4 800(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm7, %zmm6, %zmm9 + vbroadcasti64x4 832(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm16, %zmm7 + vbroadcasti64x4 864(%rbp), %zmm13 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm4 + vpsubw %zmm6, %zmm7, %zmm6 + vpsubw %zmm4, %zmm8, %zmm5 + vpsubw %zmm6, %zmm9, %zmm7 + vpaddw %zmm4, %zmm8, %zmm8 + vpaddw %zmm6, %zmm9, %zmm9 + vbroadcasti64x4 896(%rbp), %zmm10 + vbroadcasti64x4 928(%rbp), %zmm12 + vbroadcasti64x4 960(%rbp), %zmm11 + vbroadcasti64x4 992(%rbp), %zmm13 + vpunpcklqdq %zmm5, %zmm8, %zmm4 + vpunpckhqdq %zmm5, %zmm8, %zmm5 + vpunpcklqdq %zmm7, %zmm9, %zmm6 + vpunpckhqdq %zmm7, %zmm9, %zmm7 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm24, %zmm23, %zmm8 + vbroadcasti64x4 1984(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm24, %zmm23, %zmm16 + vmovdqa64 %zmm16, %zmm24 + vbroadcasti64x4 2016(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm26, %zmm25, %zmm9 + vbroadcasti64x4 2048(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm26, %zmm25, %zmm16 + vmovdqa64 %zmm16, %zmm26 + vbroadcasti64x4 2080(%rbp), %zmm13 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm23 + vpsubw %zmm25, %zmm26, %zmm25 + vpsubw %zmm23, %zmm8, %zmm24 + vpsubw %zmm25, %zmm9, %zmm26 + vpaddw %zmm23, %zmm8, %zmm8 + vpaddw %zmm25, %zmm9, %zmm9 + vbroadcasti64x4 2112(%rbp), %zmm10 + vbroadcasti64x4 2144(%rbp), %zmm12 + vbroadcasti64x4 2176(%rbp), %zmm11 + vbroadcasti64x4 2208(%rbp), %zmm13 + vpunpcklqdq %zmm24, %zmm8, %zmm23 + vpunpckhqdq %zmm24, %zmm8, %zmm24 + vpunpcklqdq %zmm26, %zmm9, %zmm25 + vpunpckhqdq %zmm26, %zmm9, %zmm26 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vbroadcasti64x4 1024(%rbp), %zmm10 + vbroadcasti64x4 1056(%rbp), %zmm12 + vbroadcasti64x4 1088(%rbp), %zmm11 + vbroadcasti64x4 1120(%rbp), %zmm13 + vpsllq $32, %zmm1, %zmm8 + vpsrlq $32, %zmm0, %zmm9 + vpblendmd %zmm8, %zmm0, %zmm0{%k1} + vpblendmd %zmm9, %zmm1, %zmm1{%k2} + vpsllq $32, %zmm3, %zmm8 + vpsrlq $32, %zmm2, %zmm9 + vpblendmd %zmm8, %zmm2, %zmm2{%k1} + vpblendmd %zmm9, %zmm3, %zmm3{%k2} + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 2240(%rbp), %zmm10 + vbroadcasti64x4 2272(%rbp), %zmm12 + vbroadcasti64x4 2304(%rbp), %zmm11 + vbroadcasti64x4 2336(%rbp), %zmm13 + vpsllq $32, %zmm20, %zmm8 + vpsrlq $32, %zmm19, %zmm9 + vpblendmd %zmm8, %zmm19, %zmm19{%k1} + vpblendmd %zmm9, %zmm20, %zmm20{%k2} + vpsllq $32, %zmm22, %zmm8 + vpsrlq $32, %zmm21, %zmm9 + vpblendmd %zmm8, %zmm21, %zmm21{%k1} + vpblendmd %zmm9, %zmm22, %zmm22{%k2} + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 1152(%rbp), %zmm10 + vbroadcasti64x4 1184(%rbp), %zmm12 + vbroadcasti64x4 1216(%rbp), %zmm11 + vbroadcasti64x4 1248(%rbp), %zmm13 + vpsllq $32, %zmm5, %zmm8 + vpsrlq $32, %zmm4, %zmm9 + vpblendmd %zmm8, %zmm4, %zmm4{%k1} + vpblendmd %zmm9, %zmm5, %zmm5{%k2} + vpsllq $32, %zmm7, %zmm8 + vpsrlq $32, %zmm6, %zmm9 + vpblendmd %zmm8, %zmm6, %zmm6{%k1} + vpblendmd %zmm9, %zmm7, %zmm7{%k2} + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vbroadcasti64x4 2368(%rbp), %zmm10 + vbroadcasti64x4 2400(%rbp), %zmm12 + vbroadcasti64x4 2432(%rbp), %zmm11 + vbroadcasti64x4 2464(%rbp), %zmm13 + vpsllq $32, %zmm24, %zmm8 + vpsrlq $32, %zmm23, %zmm9 + vpblendmd %zmm8, %zmm23, %zmm23{%k1} + vpblendmd %zmm9, %zmm24, %zmm24{%k2} + vpsllq $32, %zmm26, %zmm8 + vpsrlq $32, %zmm25, %zmm9 + vpblendmd %zmm8, %zmm25, %zmm25{%k1} + vpblendmd %zmm9, %zmm26, %zmm26{%k2} + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vpunpckldq %zmm1, %zmm0, %zmm8 + vpunpckhdq %zmm1, %zmm0, %zmm9 + vmovdqa64 %zmm17, %zmm0 + vpermi2q %zmm9, %zmm8, %zmm0 + vmovdqa64 %zmm18, %zmm1 + vpermi2q %zmm9, %zmm8, %zmm1 + vpunpckldq %zmm3, %zmm2, %zmm8 + vpunpckhdq %zmm3, %zmm2, %zmm9 + vmovdqa64 %zmm17, %zmm2 + vpermi2q %zmm9, %zmm8, %zmm2 + vmovdqa64 %zmm18, %zmm3 + vpermi2q %zmm9, %zmm8, %zmm3 + vpunpckldq %zmm20, %zmm19, %zmm8 + vpunpckhdq %zmm20, %zmm19, %zmm9 + vmovdqa64 %zmm17, %zmm19 + vpermi2q %zmm9, %zmm8, %zmm19 + vmovdqa64 %zmm18, %zmm20 + vpermi2q %zmm9, %zmm8, %zmm20 + vpunpckldq %zmm22, %zmm21, %zmm8 + vpunpckhdq %zmm22, %zmm21, %zmm9 + vmovdqa64 %zmm17, %zmm21 + vpermi2q %zmm9, %zmm8, %zmm21 + vmovdqa64 %zmm18, %zmm22 + vpermi2q %zmm9, %zmm8, %zmm22 + vpunpckldq %zmm5, %zmm4, %zmm8 + vpunpckhdq %zmm5, %zmm4, %zmm9 + vmovdqa64 %zmm17, %zmm4 + vpermi2q %zmm9, %zmm8, %zmm4 + vmovdqa64 %zmm18, %zmm5 + vpermi2q %zmm9, %zmm8, %zmm5 + vpunpckldq %zmm7, %zmm6, %zmm8 + vpunpckhdq %zmm7, %zmm6, %zmm9 + vmovdqa64 %zmm17, %zmm6 + vpermi2q %zmm9, %zmm8, %zmm6 + vmovdqa64 %zmm18, %zmm7 + vpermi2q %zmm9, %zmm8, %zmm7 + vpunpckldq %zmm24, %zmm23, %zmm8 + vpunpckhdq %zmm24, %zmm23, %zmm9 + vmovdqa64 %zmm17, %zmm23 + vpermi2q %zmm9, %zmm8, %zmm23 + vmovdqa64 %zmm18, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vpunpckldq %zmm26, %zmm25, %zmm8 + vpunpckhdq %zmm26, %zmm25, %zmm9 + vmovdqa64 %zmm17, %zmm25 + vpermi2q %zmm9, %zmm8, %zmm25 + vmovdqa64 %zmm18, %zmm26 + vpermi2q %zmm9, %zmm8, %zmm26 + vmovdqu64 %ymm0, (%r14) + vextracti64x4 $0x01, %zmm0, (%r15) + vmovdqu64 %ymm1, 32(%r14) + vextracti64x4 $0x01, %zmm1, 32(%r15) + vmovdqu64 %ymm2, 64(%r14) + vextracti64x4 $0x01, %zmm2, 64(%r15) + vmovdqu64 %ymm3, 96(%r14) + vextracti64x4 $0x01, %zmm3, 96(%r15) + vmovdqu64 %ymm19, 256(%r14) + vextracti64x4 $0x01, %zmm19, 256(%r15) + vmovdqu64 %ymm20, 288(%r14) + vextracti64x4 $0x01, %zmm20, 288(%r15) + vmovdqu64 %ymm21, 320(%r14) + vextracti64x4 $0x01, %zmm21, 320(%r15) + vmovdqu64 %ymm22, 352(%r14) + vextracti64x4 $0x01, %zmm22, 352(%r15) + vmovdqu64 %ymm4, 128(%r14) + vextracti64x4 $0x01, %zmm4, 128(%r15) + vmovdqu64 %ymm5, 160(%r14) + vextracti64x4 $0x01, %zmm5, 160(%r15) + vmovdqu64 %ymm6, 192(%r14) + vextracti64x4 $0x01, %zmm6, 192(%r15) + vmovdqu64 %ymm7, 224(%r14) + vextracti64x4 $0x01, %zmm7, 224(%r15) + vmovdqu64 %ymm23, 384(%r14) + vextracti64x4 $0x01, %zmm23, 384(%r15) + vmovdqu64 %ymm24, 416(%r14) + vextracti64x4 $0x01, %zmm24, 416(%r15) + vmovdqu64 %ymm25, 448(%r14) + vextracti64x4 $0x01, %zmm25, 448(%r15) + vmovdqu64 %ymm26, 480(%r14) + vextracti64x4 $0x01, %zmm26, 480(%r15) + addq $0x400, %r14 + subq $2, %r13 + jmp L_encap_avx512_sp +L_encap_avx512_sp_odd: + cmpq $0x01, %r13 + jne L_encap_avx512_sp_done + leaq L_mlkem_avx512_zetas(%rip), %rbp + vmovdqu64 (%r14), %ymm0 + vinserti64x4 $0x01, (%r14), %zmm0, %zmm0 + vmovdqu64 32(%r14), %ymm1 + vinserti64x4 $0x01, 32(%r14), %zmm1, %zmm1 + vmovdqu64 64(%r14), %ymm2 + vinserti64x4 $0x01, 64(%r14), %zmm2, %zmm2 + vmovdqu64 96(%r14), %ymm3 + vinserti64x4 $0x01, 96(%r14), %zmm3, %zmm3 + vmovdqu64 128(%r14), %ymm4 + vinserti64x4 $0x01, 128(%r14), %zmm4, %zmm4 + vmovdqu64 160(%r14), %ymm5 + vinserti64x4 $0x01, 160(%r14), %zmm5, %zmm5 + vmovdqu64 192(%r14), %ymm6 + vinserti64x4 $0x01, 192(%r14), %zmm6, %zmm6 + vmovdqu64 224(%r14), %ymm7 + vinserti64x4 $0x01, 224(%r14), %zmm7, %zmm7 + vmovdqu64 256(%r14), %ymm19 + vinserti64x4 $0x01, 256(%r14), %zmm19, %zmm19 + vmovdqu64 288(%r14), %ymm20 + vinserti64x4 $0x01, 288(%r14), %zmm20, %zmm20 + vmovdqu64 320(%r14), %ymm21 + vinserti64x4 $0x01, 320(%r14), %zmm21, %zmm21 + vmovdqu64 352(%r14), %ymm22 + vinserti64x4 $0x01, 352(%r14), %zmm22, %zmm22 + vmovdqu64 384(%r14), %ymm23 + vinserti64x4 $0x01, 384(%r14), %zmm23, %zmm23 + vmovdqu64 416(%r14), %ymm24 + vinserti64x4 $0x01, 416(%r14), %zmm24, %zmm24 + vmovdqu64 448(%r14), %ymm25 + vinserti64x4 $0x01, 448(%r14), %zmm25, %zmm25 + vmovdqu64 480(%r14), %ymm26 + vinserti64x4 $0x01, 480(%r14), %zmm26, %zmm26 + vbroadcasti64x4 (%rbp), %zmm10 + vbroadcasti64x4 32(%rbp), %zmm12 + vpmullw %zmm12, %zmm19, %zmm8 + vpmullw %zmm12, %zmm20, %zmm9 + vpmulhw %zmm10, %zmm19, %zmm19 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm8 + vpsubw %zmm9, %zmm20, %zmm9 + vpsubw %zmm8, %zmm0, %zmm19 + vpsubw %zmm9, %zmm1, %zmm20 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm2, %zmm21 + vpsubw %zmm9, %zmm3, %zmm22 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm4, %zmm23 + vpsubw %zmm9, %zmm5, %zmm24 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm6, %zmm25 + vpsubw %zmm9, %zmm7, %zmm26 + vpaddw %zmm8, %zmm6, %zmm6 + vpaddw %zmm9, %zmm7, %zmm7 + vbroadcasti64x4 64(%rbp), %zmm10 + vbroadcasti64x4 96(%rbp), %zmm12 + vpmullw %zmm12, %zmm4, %zmm8 + vpmullw %zmm12, %zmm5, %zmm9 + vpmulhw %zmm10, %zmm4, %zmm4 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm8 + vpsubw %zmm9, %zmm5, %zmm9 + vpsubw %zmm8, %zmm0, %zmm4 + vpsubw %zmm9, %zmm1, %zmm5 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm2, %zmm6 + vpsubw %zmm9, %zmm3, %zmm7 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vbroadcasti64x4 1280(%rbp), %zmm10 + vbroadcasti64x4 1312(%rbp), %zmm12 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm19, %zmm23 + vpsubw %zmm9, %zmm20, %zmm24 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm21, %zmm25 + vpsubw %zmm9, %zmm22, %zmm26 + vpaddw %zmm8, %zmm21, %zmm21 + vpaddw %zmm9, %zmm22, %zmm22 + vbroadcasti64x4 128(%rbp), %zmm10 + vbroadcasti64x4 160(%rbp), %zmm12 + vpmullw %zmm12, %zmm2, %zmm8 + vpmullw %zmm12, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm2, %zmm2 + vpmulhw %zmm10, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm2 + vpsubw %zmm9, %zmm1, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vbroadcasti64x4 1344(%rbp), %zmm10 + vbroadcasti64x4 1376(%rbp), %zmm12 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm21 + vpsubw %zmm9, %zmm20, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vbroadcasti64x4 192(%rbp), %zmm10 + vbroadcasti64x4 224(%rbp), %zmm12 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm6 + vpsubw %zmm9, %zmm5, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vbroadcasti64x4 1408(%rbp), %zmm10 + vbroadcasti64x4 1440(%rbp), %zmm12 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm25 + vpsubw %zmm9, %zmm24, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm24, %zmm24 + vbroadcasti64x4 256(%rbp), %zmm10 + vbroadcasti64x4 288(%rbp), %zmm12 + vbroadcasti64x4 320(%rbp), %zmm11 + vbroadcasti64x4 352(%rbp), %zmm13 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 1472(%rbp), %zmm10 + vbroadcasti64x4 1504(%rbp), %zmm12 + vbroadcasti64x4 1536(%rbp), %zmm11 + vbroadcasti64x4 1568(%rbp), %zmm13 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 384(%rbp), %zmm10 + vbroadcasti64x4 416(%rbp), %zmm12 + vbroadcasti64x4 448(%rbp), %zmm11 + vbroadcasti64x4 480(%rbp), %zmm13 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vbroadcasti64x4 1600(%rbp), %zmm10 + vbroadcasti64x4 1632(%rbp), %zmm12 + vbroadcasti64x4 1664(%rbp), %zmm11 + vbroadcasti64x4 1696(%rbp), %zmm13 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm1, %zmm0, %zmm8 + vbroadcasti64x4 512(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm16, %zmm1 + vbroadcasti64x4 544(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm3, %zmm2, %zmm9 + vbroadcasti64x4 576(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm16, %zmm3 + vbroadcasti64x4 608(%rbp), %zmm13 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm0 + vpsubw %zmm2, %zmm3, %zmm2 + vpsubw %zmm0, %zmm8, %zmm1 + vpsubw %zmm2, %zmm9, %zmm3 + vpaddw %zmm0, %zmm8, %zmm8 + vpaddw %zmm2, %zmm9, %zmm9 + vbroadcasti64x4 640(%rbp), %zmm10 + vbroadcasti64x4 672(%rbp), %zmm12 + vbroadcasti64x4 704(%rbp), %zmm11 + vbroadcasti64x4 736(%rbp), %zmm13 + vpunpcklqdq %zmm1, %zmm8, %zmm0 + vpunpckhqdq %zmm1, %zmm8, %zmm1 + vpunpcklqdq %zmm3, %zmm9, %zmm2 + vpunpckhqdq %zmm3, %zmm9, %zmm3 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm20, %zmm19, %zmm8 + vbroadcasti64x4 1728(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm20, %zmm19, %zmm16 + vmovdqa64 %zmm16, %zmm20 + vbroadcasti64x4 1760(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm22, %zmm21, %zmm9 + vbroadcasti64x4 1792(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm22, %zmm21, %zmm16 + vmovdqa64 %zmm16, %zmm22 + vbroadcasti64x4 1824(%rbp), %zmm13 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm19 + vpsubw %zmm21, %zmm22, %zmm21 + vpsubw %zmm19, %zmm8, %zmm20 + vpsubw %zmm21, %zmm9, %zmm22 + vpaddw %zmm19, %zmm8, %zmm8 + vpaddw %zmm21, %zmm9, %zmm9 + vbroadcasti64x4 1856(%rbp), %zmm10 + vbroadcasti64x4 1888(%rbp), %zmm12 + vbroadcasti64x4 1920(%rbp), %zmm11 + vbroadcasti64x4 1952(%rbp), %zmm13 + vpunpcklqdq %zmm20, %zmm8, %zmm19 + vpunpckhqdq %zmm20, %zmm8, %zmm20 + vpunpcklqdq %zmm22, %zmm9, %zmm21 + vpunpckhqdq %zmm22, %zmm9, %zmm22 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm5, %zmm4, %zmm8 + vbroadcasti64x4 768(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm16, %zmm5 + vbroadcasti64x4 800(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm7, %zmm6, %zmm9 + vbroadcasti64x4 832(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm16, %zmm7 + vbroadcasti64x4 864(%rbp), %zmm13 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm4 + vpsubw %zmm6, %zmm7, %zmm6 + vpsubw %zmm4, %zmm8, %zmm5 + vpsubw %zmm6, %zmm9, %zmm7 + vpaddw %zmm4, %zmm8, %zmm8 + vpaddw %zmm6, %zmm9, %zmm9 + vbroadcasti64x4 896(%rbp), %zmm10 + vbroadcasti64x4 928(%rbp), %zmm12 + vbroadcasti64x4 960(%rbp), %zmm11 + vbroadcasti64x4 992(%rbp), %zmm13 + vpunpcklqdq %zmm5, %zmm8, %zmm4 + vpunpckhqdq %zmm5, %zmm8, %zmm5 + vpunpcklqdq %zmm7, %zmm9, %zmm6 + vpunpckhqdq %zmm7, %zmm9, %zmm7 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm24, %zmm23, %zmm8 + vbroadcasti64x4 1984(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm24, %zmm23, %zmm16 + vmovdqa64 %zmm16, %zmm24 + vbroadcasti64x4 2016(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm26, %zmm25, %zmm9 + vbroadcasti64x4 2048(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm26, %zmm25, %zmm16 + vmovdqa64 %zmm16, %zmm26 + vbroadcasti64x4 2080(%rbp), %zmm13 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm23 + vpsubw %zmm25, %zmm26, %zmm25 + vpsubw %zmm23, %zmm8, %zmm24 + vpsubw %zmm25, %zmm9, %zmm26 + vpaddw %zmm23, %zmm8, %zmm8 + vpaddw %zmm25, %zmm9, %zmm9 + vbroadcasti64x4 2112(%rbp), %zmm10 + vbroadcasti64x4 2144(%rbp), %zmm12 + vbroadcasti64x4 2176(%rbp), %zmm11 + vbroadcasti64x4 2208(%rbp), %zmm13 + vpunpcklqdq %zmm24, %zmm8, %zmm23 + vpunpckhqdq %zmm24, %zmm8, %zmm24 + vpunpcklqdq %zmm26, %zmm9, %zmm25 + vpunpckhqdq %zmm26, %zmm9, %zmm26 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vbroadcasti64x4 1024(%rbp), %zmm10 + vbroadcasti64x4 1056(%rbp), %zmm12 + vbroadcasti64x4 1088(%rbp), %zmm11 + vbroadcasti64x4 1120(%rbp), %zmm13 + vpsllq $32, %zmm1, %zmm8 + vpsrlq $32, %zmm0, %zmm9 + vpblendmd %zmm8, %zmm0, %zmm0{%k1} + vpblendmd %zmm9, %zmm1, %zmm1{%k2} + vpsllq $32, %zmm3, %zmm8 + vpsrlq $32, %zmm2, %zmm9 + vpblendmd %zmm8, %zmm2, %zmm2{%k1} + vpblendmd %zmm9, %zmm3, %zmm3{%k2} + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 2240(%rbp), %zmm10 + vbroadcasti64x4 2272(%rbp), %zmm12 + vbroadcasti64x4 2304(%rbp), %zmm11 + vbroadcasti64x4 2336(%rbp), %zmm13 + vpsllq $32, %zmm20, %zmm8 + vpsrlq $32, %zmm19, %zmm9 + vpblendmd %zmm8, %zmm19, %zmm19{%k1} + vpblendmd %zmm9, %zmm20, %zmm20{%k2} + vpsllq $32, %zmm22, %zmm8 + vpsrlq $32, %zmm21, %zmm9 + vpblendmd %zmm8, %zmm21, %zmm21{%k1} + vpblendmd %zmm9, %zmm22, %zmm22{%k2} + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 1152(%rbp), %zmm10 + vbroadcasti64x4 1184(%rbp), %zmm12 + vbroadcasti64x4 1216(%rbp), %zmm11 + vbroadcasti64x4 1248(%rbp), %zmm13 + vpsllq $32, %zmm5, %zmm8 + vpsrlq $32, %zmm4, %zmm9 + vpblendmd %zmm8, %zmm4, %zmm4{%k1} + vpblendmd %zmm9, %zmm5, %zmm5{%k2} + vpsllq $32, %zmm7, %zmm8 + vpsrlq $32, %zmm6, %zmm9 + vpblendmd %zmm8, %zmm6, %zmm6{%k1} + vpblendmd %zmm9, %zmm7, %zmm7{%k2} + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vbroadcasti64x4 2368(%rbp), %zmm10 + vbroadcasti64x4 2400(%rbp), %zmm12 + vbroadcasti64x4 2432(%rbp), %zmm11 + vbroadcasti64x4 2464(%rbp), %zmm13 + vpsllq $32, %zmm24, %zmm8 + vpsrlq $32, %zmm23, %zmm9 + vpblendmd %zmm8, %zmm23, %zmm23{%k1} + vpblendmd %zmm9, %zmm24, %zmm24{%k2} + vpsllq $32, %zmm26, %zmm8 + vpsrlq $32, %zmm25, %zmm9 + vpblendmd %zmm8, %zmm25, %zmm25{%k1} + vpblendmd %zmm9, %zmm26, %zmm26{%k2} + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vpunpckldq %zmm1, %zmm0, %zmm8 + vpunpckhdq %zmm1, %zmm0, %zmm9 + vmovdqa64 %zmm17, %zmm0 + vpermi2q %zmm9, %zmm8, %zmm0 + vmovdqa64 %zmm18, %zmm1 + vpermi2q %zmm9, %zmm8, %zmm1 + vpunpckldq %zmm3, %zmm2, %zmm8 + vpunpckhdq %zmm3, %zmm2, %zmm9 + vmovdqa64 %zmm17, %zmm2 + vpermi2q %zmm9, %zmm8, %zmm2 + vmovdqa64 %zmm18, %zmm3 + vpermi2q %zmm9, %zmm8, %zmm3 + vpunpckldq %zmm20, %zmm19, %zmm8 + vpunpckhdq %zmm20, %zmm19, %zmm9 + vmovdqa64 %zmm17, %zmm19 + vpermi2q %zmm9, %zmm8, %zmm19 + vmovdqa64 %zmm18, %zmm20 + vpermi2q %zmm9, %zmm8, %zmm20 + vpunpckldq %zmm22, %zmm21, %zmm8 + vpunpckhdq %zmm22, %zmm21, %zmm9 + vmovdqa64 %zmm17, %zmm21 + vpermi2q %zmm9, %zmm8, %zmm21 + vmovdqa64 %zmm18, %zmm22 + vpermi2q %zmm9, %zmm8, %zmm22 + vpunpckldq %zmm5, %zmm4, %zmm8 + vpunpckhdq %zmm5, %zmm4, %zmm9 + vmovdqa64 %zmm17, %zmm4 + vpermi2q %zmm9, %zmm8, %zmm4 + vmovdqa64 %zmm18, %zmm5 + vpermi2q %zmm9, %zmm8, %zmm5 + vpunpckldq %zmm7, %zmm6, %zmm8 + vpunpckhdq %zmm7, %zmm6, %zmm9 + vmovdqa64 %zmm17, %zmm6 + vpermi2q %zmm9, %zmm8, %zmm6 + vmovdqa64 %zmm18, %zmm7 + vpermi2q %zmm9, %zmm8, %zmm7 + vpunpckldq %zmm24, %zmm23, %zmm8 + vpunpckhdq %zmm24, %zmm23, %zmm9 + vmovdqa64 %zmm17, %zmm23 + vpermi2q %zmm9, %zmm8, %zmm23 + vmovdqa64 %zmm18, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vpunpckldq %zmm26, %zmm25, %zmm8 + vpunpckhdq %zmm26, %zmm25, %zmm9 + vmovdqa64 %zmm17, %zmm25 + vpermi2q %zmm9, %zmm8, %zmm25 + vmovdqa64 %zmm18, %zmm26 + vpermi2q %zmm9, %zmm8, %zmm26 + vmovdqu64 %ymm0, (%r14) + vextracti64x4 $0x01, %zmm0, (%r14) + vmovdqu64 %ymm1, 32(%r14) + vextracti64x4 $0x01, %zmm1, 32(%r14) + vmovdqu64 %ymm2, 64(%r14) + vextracti64x4 $0x01, %zmm2, 64(%r14) + vmovdqu64 %ymm3, 96(%r14) + vextracti64x4 $0x01, %zmm3, 96(%r14) + vmovdqu64 %ymm19, 256(%r14) + vextracti64x4 $0x01, %zmm19, 256(%r14) + vmovdqu64 %ymm20, 288(%r14) + vextracti64x4 $0x01, %zmm20, 288(%r14) + vmovdqu64 %ymm21, 320(%r14) + vextracti64x4 $0x01, %zmm21, 320(%r14) + vmovdqu64 %ymm22, 352(%r14) + vextracti64x4 $0x01, %zmm22, 352(%r14) + vmovdqu64 %ymm4, 128(%r14) + vextracti64x4 $0x01, %zmm4, 128(%r14) + vmovdqu64 %ymm5, 160(%r14) + vextracti64x4 $0x01, %zmm5, 160(%r14) + vmovdqu64 %ymm6, 192(%r14) + vextracti64x4 $0x01, %zmm6, 192(%r14) + vmovdqu64 %ymm7, 224(%r14) + vextracti64x4 $0x01, %zmm7, 224(%r14) + vmovdqu64 %ymm23, 384(%r14) + vextracti64x4 $0x01, %zmm23, 384(%r14) + vmovdqu64 %ymm24, 416(%r14) + vextracti64x4 $0x01, %zmm24, 416(%r14) + vmovdqu64 %ymm25, 448(%r14) + vextracti64x4 $0x01, %zmm25, 448(%r14) + vmovdqu64 %ymm26, 480(%r14) + vextracti64x4 $0x01, %zmm26, 480(%r14) +L_encap_avx512_sp_done: + movslq %r11d, %r12 +L_encap_avx512_calc: + cmpq $2, %r12 + jl L_encap_avx512_calc_odd + movq $0xf301, %r13 + vmovd %r13d, %xmm12 + vpbroadcastw %xmm12, %zmm12 + movslq %r11d, %r13 + leaq L_mlkem_avx512_zetas_basemul(%rip), %rbp + vmovdqu (%rcx), %ymm2 + vinserti64x4 $0x01, 64(%rcx), %zmm2, %zmm2 + vmovdqu 32(%rcx), %ymm3 + vinserti64x4 $0x01, 96(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%r8), %ymm4 + vinserti64x4 $0x01, 64(%r8), %zmm4, %zmm4 + vmovdqu 32(%r8), %ymm5 + vinserti64x4 $0x01, 96(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%rbp), %ymm10 + vinserti64x4 $0x01, 64(%rbp), %zmm10, %zmm10 + vmovdqu 32(%rbp), %ymm11 + vinserti64x4 $0x01, 96(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, (%rsi) + vextracti64x4 $0x01, %zmm0, 64(%rsi) + vmovdqu %ymm1, 32(%rsi) + vextracti64x4 $0x01, %zmm1, 96(%rsi) + vmovdqu 128(%rcx), %ymm2 + vinserti64x4 $0x01, 192(%rcx), %zmm2, %zmm2 + vmovdqu 160(%rcx), %ymm3 + vinserti64x4 $0x01, 224(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%r8), %ymm4 + vinserti64x4 $0x01, 192(%r8), %zmm4, %zmm4 + vmovdqu 160(%r8), %ymm5 + vinserti64x4 $0x01, 224(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%rbp), %ymm10 + vinserti64x4 $0x01, 192(%rbp), %zmm10, %zmm10 + vmovdqu 160(%rbp), %ymm11 + vinserti64x4 $0x01, 224(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 128(%rsi) + vextracti64x4 $0x01, %zmm0, 192(%rsi) + vmovdqu %ymm1, 160(%rsi) + vextracti64x4 $0x01, %zmm1, 224(%rsi) + vmovdqu 256(%rcx), %ymm2 + vinserti64x4 $0x01, 320(%rcx), %zmm2, %zmm2 + vmovdqu 288(%rcx), %ymm3 + vinserti64x4 $0x01, 352(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%r8), %ymm4 + vinserti64x4 $0x01, 320(%r8), %zmm4, %zmm4 + vmovdqu 288(%r8), %ymm5 + vinserti64x4 $0x01, 352(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%rbp), %ymm10 + vinserti64x4 $0x01, 320(%rbp), %zmm10, %zmm10 + vmovdqu 288(%rbp), %ymm11 + vinserti64x4 $0x01, 352(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 256(%rsi) + vextracti64x4 $0x01, %zmm0, 320(%rsi) + vmovdqu %ymm1, 288(%rsi) + vextracti64x4 $0x01, %zmm1, 352(%rsi) + vmovdqu 384(%rcx), %ymm2 + vinserti64x4 $0x01, 448(%rcx), %zmm2, %zmm2 + vmovdqu 416(%rcx), %ymm3 + vinserti64x4 $0x01, 480(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%r8), %ymm4 + vinserti64x4 $0x01, 448(%r8), %zmm4, %zmm4 + vmovdqu 416(%r8), %ymm5 + vinserti64x4 $0x01, 480(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%rbp), %ymm10 + vinserti64x4 $0x01, 448(%rbp), %zmm10, %zmm10 + vmovdqu 416(%rbp), %ymm11 + vinserti64x4 $0x01, 480(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 384(%rsi) + vextracti64x4 $0x01, %zmm0, 448(%rsi) + vmovdqu %ymm1, 416(%rsi) + vextracti64x4 $0x01, %zmm1, 480(%rsi) + addq $0x200, %rcx + addq $0x200, %r8 + subq $2, %r13 + jz L_pointwise_acc_mont_end_encap_bp0_avx512 +L_pointwise_acc_mont_start_encap_bp0_avx512: + leaq L_mlkem_avx512_zetas_basemul(%rip), %rbp + vmovdqu (%rcx), %ymm2 + vinserti64x4 $0x01, 64(%rcx), %zmm2, %zmm2 + vmovdqu 32(%rcx), %ymm3 + vinserti64x4 $0x01, 96(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%r8), %ymm4 + vinserti64x4 $0x01, 64(%r8), %zmm4, %zmm4 + vmovdqu 32(%r8), %ymm5 + vinserti64x4 $0x01, 96(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%rbp), %ymm10 + vinserti64x4 $0x01, 64(%rbp), %zmm10, %zmm10 + vmovdqu 32(%rbp), %ymm11 + vinserti64x4 $0x01, 96(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu (%rsi), %ymm6 + vinserti64x4 $0x01, 64(%rsi), %zmm6, %zmm6 + vmovdqu 32(%rsi), %ymm7 + vinserti64x4 $0x01, 96(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, (%rsi) + vextracti64x4 $0x01, %zmm0, 64(%rsi) + vmovdqu %ymm1, 32(%rsi) + vextracti64x4 $0x01, %zmm1, 96(%rsi) + vmovdqu 128(%rcx), %ymm2 + vinserti64x4 $0x01, 192(%rcx), %zmm2, %zmm2 + vmovdqu 160(%rcx), %ymm3 + vinserti64x4 $0x01, 224(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%r8), %ymm4 + vinserti64x4 $0x01, 192(%r8), %zmm4, %zmm4 + vmovdqu 160(%r8), %ymm5 + vinserti64x4 $0x01, 224(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%rbp), %ymm10 + vinserti64x4 $0x01, 192(%rbp), %zmm10, %zmm10 + vmovdqu 160(%rbp), %ymm11 + vinserti64x4 $0x01, 224(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 128(%rsi), %ymm6 + vinserti64x4 $0x01, 192(%rsi), %zmm6, %zmm6 + vmovdqu 160(%rsi), %ymm7 + vinserti64x4 $0x01, 224(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 128(%rsi) + vextracti64x4 $0x01, %zmm0, 192(%rsi) + vmovdqu %ymm1, 160(%rsi) + vextracti64x4 $0x01, %zmm1, 224(%rsi) + vmovdqu 256(%rcx), %ymm2 + vinserti64x4 $0x01, 320(%rcx), %zmm2, %zmm2 + vmovdqu 288(%rcx), %ymm3 + vinserti64x4 $0x01, 352(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%r8), %ymm4 + vinserti64x4 $0x01, 320(%r8), %zmm4, %zmm4 + vmovdqu 288(%r8), %ymm5 + vinserti64x4 $0x01, 352(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%rbp), %ymm10 + vinserti64x4 $0x01, 320(%rbp), %zmm10, %zmm10 + vmovdqu 288(%rbp), %ymm11 + vinserti64x4 $0x01, 352(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 256(%rsi), %ymm6 + vinserti64x4 $0x01, 320(%rsi), %zmm6, %zmm6 + vmovdqu 288(%rsi), %ymm7 + vinserti64x4 $0x01, 352(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 256(%rsi) + vextracti64x4 $0x01, %zmm0, 320(%rsi) + vmovdqu %ymm1, 288(%rsi) + vextracti64x4 $0x01, %zmm1, 352(%rsi) + vmovdqu 384(%rcx), %ymm2 + vinserti64x4 $0x01, 448(%rcx), %zmm2, %zmm2 + vmovdqu 416(%rcx), %ymm3 + vinserti64x4 $0x01, 480(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%r8), %ymm4 + vinserti64x4 $0x01, 448(%r8), %zmm4, %zmm4 + vmovdqu 416(%r8), %ymm5 + vinserti64x4 $0x01, 480(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%rbp), %ymm10 + vinserti64x4 $0x01, 448(%rbp), %zmm10, %zmm10 + vmovdqu 416(%rbp), %ymm11 + vinserti64x4 $0x01, 480(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 384(%rsi), %ymm6 + vinserti64x4 $0x01, 448(%rsi), %zmm6, %zmm6 + vmovdqu 416(%rsi), %ymm7 + vinserti64x4 $0x01, 480(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 384(%rsi) + vextracti64x4 $0x01, %zmm0, 448(%rsi) + vmovdqu %ymm1, 416(%rsi) + vextracti64x4 $0x01, %zmm1, 480(%rsi) + addq $0x200, %rcx + addq $0x200, %r8 + subq $0x01, %r13 + jg L_pointwise_acc_mont_start_encap_bp0_avx512 +L_pointwise_acc_mont_end_encap_bp0_avx512: + leaq L_mlkem_avx512_zetas_basemul(%rip), %rbp + vmovdqu (%rcx), %ymm2 + vinserti64x4 $0x01, 64(%rcx), %zmm2, %zmm2 + vmovdqu 32(%rcx), %ymm3 + vinserti64x4 $0x01, 96(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%r8), %ymm4 + vinserti64x4 $0x01, 64(%r8), %zmm4, %zmm4 + vmovdqu 32(%r8), %ymm5 + vinserti64x4 $0x01, 96(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%rbp), %ymm10 + vinserti64x4 $0x01, 64(%rbp), %zmm10, %zmm10 + vmovdqu 32(%rbp), %ymm11 + vinserti64x4 $0x01, 96(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu (%rsi), %ymm6 + vinserti64x4 $0x01, 64(%rsi), %zmm6, %zmm6 + vmovdqu 32(%rsi), %ymm7 + vinserti64x4 $0x01, 96(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, (%rsi) + vextracti64x4 $0x01, %zmm0, 64(%rsi) + vmovdqu %ymm1, 32(%rsi) + vextracti64x4 $0x01, %zmm1, 96(%rsi) + vmovdqu 128(%rcx), %ymm2 + vinserti64x4 $0x01, 192(%rcx), %zmm2, %zmm2 + vmovdqu 160(%rcx), %ymm3 + vinserti64x4 $0x01, 224(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%r8), %ymm4 + vinserti64x4 $0x01, 192(%r8), %zmm4, %zmm4 + vmovdqu 160(%r8), %ymm5 + vinserti64x4 $0x01, 224(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%rbp), %ymm10 + vinserti64x4 $0x01, 192(%rbp), %zmm10, %zmm10 + vmovdqu 160(%rbp), %ymm11 + vinserti64x4 $0x01, 224(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 128(%rsi), %ymm6 + vinserti64x4 $0x01, 192(%rsi), %zmm6, %zmm6 + vmovdqu 160(%rsi), %ymm7 + vinserti64x4 $0x01, 224(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 128(%rsi) + vextracti64x4 $0x01, %zmm0, 192(%rsi) + vmovdqu %ymm1, 160(%rsi) + vextracti64x4 $0x01, %zmm1, 224(%rsi) + vmovdqu 256(%rcx), %ymm2 + vinserti64x4 $0x01, 320(%rcx), %zmm2, %zmm2 + vmovdqu 288(%rcx), %ymm3 + vinserti64x4 $0x01, 352(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%r8), %ymm4 + vinserti64x4 $0x01, 320(%r8), %zmm4, %zmm4 + vmovdqu 288(%r8), %ymm5 + vinserti64x4 $0x01, 352(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%rbp), %ymm10 + vinserti64x4 $0x01, 320(%rbp), %zmm10, %zmm10 + vmovdqu 288(%rbp), %ymm11 + vinserti64x4 $0x01, 352(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 256(%rsi), %ymm6 + vinserti64x4 $0x01, 320(%rsi), %zmm6, %zmm6 + vmovdqu 288(%rsi), %ymm7 + vinserti64x4 $0x01, 352(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 256(%rsi) + vextracti64x4 $0x01, %zmm0, 320(%rsi) + vmovdqu %ymm1, 288(%rsi) + vextracti64x4 $0x01, %zmm1, 352(%rsi) + vmovdqu 384(%rcx), %ymm2 + vinserti64x4 $0x01, 448(%rcx), %zmm2, %zmm2 + vmovdqu 416(%rcx), %ymm3 + vinserti64x4 $0x01, 480(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%r8), %ymm4 + vinserti64x4 $0x01, 448(%r8), %zmm4, %zmm4 + vmovdqu 416(%r8), %ymm5 + vinserti64x4 $0x01, 480(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%rbp), %ymm10 + vinserti64x4 $0x01, 448(%rbp), %zmm10, %zmm10 + vmovdqu 416(%rbp), %ymm11 + vinserti64x4 $0x01, 480(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 384(%rsi), %ymm6 + vinserti64x4 $0x01, 448(%rsi), %zmm6, %zmm6 + vmovdqu 416(%rsi), %ymm7 + vinserti64x4 $0x01, 480(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 384(%rsi) + vextracti64x4 $0x01, %zmm0, 448(%rsi) + vmovdqu %ymm1, 416(%rsi) + vextracti64x4 $0x01, %zmm1, 480(%rsi) + addq $0x200, %rcx + movq %rbx, %r8 + movq %rsi, %r15 + addq $0x200, %r15 + movslq %r11d, %r13 + leaq L_mlkem_avx512_zetas_basemul(%rip), %rbp + vmovdqu (%rcx), %ymm2 + vinserti64x4 $0x01, 64(%rcx), %zmm2, %zmm2 + vmovdqu 32(%rcx), %ymm3 + vinserti64x4 $0x01, 96(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%r8), %ymm4 + vinserti64x4 $0x01, 64(%r8), %zmm4, %zmm4 + vmovdqu 32(%r8), %ymm5 + vinserti64x4 $0x01, 96(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%rbp), %ymm10 + vinserti64x4 $0x01, 64(%rbp), %zmm10, %zmm10 + vmovdqu 32(%rbp), %ymm11 + vinserti64x4 $0x01, 96(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, (%r15) + vextracti64x4 $0x01, %zmm0, 64(%r15) + vmovdqu %ymm1, 32(%r15) + vextracti64x4 $0x01, %zmm1, 96(%r15) + vmovdqu 128(%rcx), %ymm2 + vinserti64x4 $0x01, 192(%rcx), %zmm2, %zmm2 + vmovdqu 160(%rcx), %ymm3 + vinserti64x4 $0x01, 224(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%r8), %ymm4 + vinserti64x4 $0x01, 192(%r8), %zmm4, %zmm4 + vmovdqu 160(%r8), %ymm5 + vinserti64x4 $0x01, 224(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%rbp), %ymm10 + vinserti64x4 $0x01, 192(%rbp), %zmm10, %zmm10 + vmovdqu 160(%rbp), %ymm11 + vinserti64x4 $0x01, 224(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 128(%r15) + vextracti64x4 $0x01, %zmm0, 192(%r15) + vmovdqu %ymm1, 160(%r15) + vextracti64x4 $0x01, %zmm1, 224(%r15) + vmovdqu 256(%rcx), %ymm2 + vinserti64x4 $0x01, 320(%rcx), %zmm2, %zmm2 + vmovdqu 288(%rcx), %ymm3 + vinserti64x4 $0x01, 352(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%r8), %ymm4 + vinserti64x4 $0x01, 320(%r8), %zmm4, %zmm4 + vmovdqu 288(%r8), %ymm5 + vinserti64x4 $0x01, 352(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%rbp), %ymm10 + vinserti64x4 $0x01, 320(%rbp), %zmm10, %zmm10 + vmovdqu 288(%rbp), %ymm11 + vinserti64x4 $0x01, 352(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 256(%r15) + vextracti64x4 $0x01, %zmm0, 320(%r15) + vmovdqu %ymm1, 288(%r15) + vextracti64x4 $0x01, %zmm1, 352(%r15) + vmovdqu 384(%rcx), %ymm2 + vinserti64x4 $0x01, 448(%rcx), %zmm2, %zmm2 + vmovdqu 416(%rcx), %ymm3 + vinserti64x4 $0x01, 480(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%r8), %ymm4 + vinserti64x4 $0x01, 448(%r8), %zmm4, %zmm4 + vmovdqu 416(%r8), %ymm5 + vinserti64x4 $0x01, 480(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%rbp), %ymm10 + vinserti64x4 $0x01, 448(%rbp), %zmm10, %zmm10 + vmovdqu 416(%rbp), %ymm11 + vinserti64x4 $0x01, 480(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 384(%r15) + vextracti64x4 $0x01, %zmm0, 448(%r15) + vmovdqu %ymm1, 416(%r15) + vextracti64x4 $0x01, %zmm1, 480(%r15) + addq $0x200, %rcx + addq $0x200, %r8 + subq $2, %r13 + jz L_pointwise_acc_mont_end_encap_bp1_avx512 +L_pointwise_acc_mont_start_encap_bp1_avx512: + leaq L_mlkem_avx512_zetas_basemul(%rip), %rbp + vmovdqu (%rcx), %ymm2 + vinserti64x4 $0x01, 64(%rcx), %zmm2, %zmm2 + vmovdqu 32(%rcx), %ymm3 + vinserti64x4 $0x01, 96(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%r8), %ymm4 + vinserti64x4 $0x01, 64(%r8), %zmm4, %zmm4 + vmovdqu 32(%r8), %ymm5 + vinserti64x4 $0x01, 96(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%rbp), %ymm10 + vinserti64x4 $0x01, 64(%rbp), %zmm10, %zmm10 + vmovdqu 32(%rbp), %ymm11 + vinserti64x4 $0x01, 96(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu (%r15), %ymm6 + vinserti64x4 $0x01, 64(%r15), %zmm6, %zmm6 + vmovdqu 32(%r15), %ymm7 + vinserti64x4 $0x01, 96(%r15), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, (%r15) + vextracti64x4 $0x01, %zmm0, 64(%r15) + vmovdqu %ymm1, 32(%r15) + vextracti64x4 $0x01, %zmm1, 96(%r15) + vmovdqu 128(%rcx), %ymm2 + vinserti64x4 $0x01, 192(%rcx), %zmm2, %zmm2 + vmovdqu 160(%rcx), %ymm3 + vinserti64x4 $0x01, 224(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%r8), %ymm4 + vinserti64x4 $0x01, 192(%r8), %zmm4, %zmm4 + vmovdqu 160(%r8), %ymm5 + vinserti64x4 $0x01, 224(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%rbp), %ymm10 + vinserti64x4 $0x01, 192(%rbp), %zmm10, %zmm10 + vmovdqu 160(%rbp), %ymm11 + vinserti64x4 $0x01, 224(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 128(%r15), %ymm6 + vinserti64x4 $0x01, 192(%r15), %zmm6, %zmm6 + vmovdqu 160(%r15), %ymm7 + vinserti64x4 $0x01, 224(%r15), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 128(%r15) + vextracti64x4 $0x01, %zmm0, 192(%r15) + vmovdqu %ymm1, 160(%r15) + vextracti64x4 $0x01, %zmm1, 224(%r15) + vmovdqu 256(%rcx), %ymm2 + vinserti64x4 $0x01, 320(%rcx), %zmm2, %zmm2 + vmovdqu 288(%rcx), %ymm3 + vinserti64x4 $0x01, 352(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%r8), %ymm4 + vinserti64x4 $0x01, 320(%r8), %zmm4, %zmm4 + vmovdqu 288(%r8), %ymm5 + vinserti64x4 $0x01, 352(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%rbp), %ymm10 + vinserti64x4 $0x01, 320(%rbp), %zmm10, %zmm10 + vmovdqu 288(%rbp), %ymm11 + vinserti64x4 $0x01, 352(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 256(%r15), %ymm6 + vinserti64x4 $0x01, 320(%r15), %zmm6, %zmm6 + vmovdqu 288(%r15), %ymm7 + vinserti64x4 $0x01, 352(%r15), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 256(%r15) + vextracti64x4 $0x01, %zmm0, 320(%r15) + vmovdqu %ymm1, 288(%r15) + vextracti64x4 $0x01, %zmm1, 352(%r15) + vmovdqu 384(%rcx), %ymm2 + vinserti64x4 $0x01, 448(%rcx), %zmm2, %zmm2 + vmovdqu 416(%rcx), %ymm3 + vinserti64x4 $0x01, 480(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%r8), %ymm4 + vinserti64x4 $0x01, 448(%r8), %zmm4, %zmm4 + vmovdqu 416(%r8), %ymm5 + vinserti64x4 $0x01, 480(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%rbp), %ymm10 + vinserti64x4 $0x01, 448(%rbp), %zmm10, %zmm10 + vmovdqu 416(%rbp), %ymm11 + vinserti64x4 $0x01, 480(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 384(%r15), %ymm6 + vinserti64x4 $0x01, 448(%r15), %zmm6, %zmm6 + vmovdqu 416(%r15), %ymm7 + vinserti64x4 $0x01, 480(%r15), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 384(%r15) + vextracti64x4 $0x01, %zmm0, 448(%r15) + vmovdqu %ymm1, 416(%r15) + vextracti64x4 $0x01, %zmm1, 480(%r15) + addq $0x200, %rcx + addq $0x200, %r8 + subq $0x01, %r13 + jg L_pointwise_acc_mont_start_encap_bp1_avx512 +L_pointwise_acc_mont_end_encap_bp1_avx512: + leaq L_mlkem_avx512_zetas_basemul(%rip), %rbp + vmovdqu (%rcx), %ymm2 + vinserti64x4 $0x01, 64(%rcx), %zmm2, %zmm2 + vmovdqu 32(%rcx), %ymm3 + vinserti64x4 $0x01, 96(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%r8), %ymm4 + vinserti64x4 $0x01, 64(%r8), %zmm4, %zmm4 + vmovdqu 32(%r8), %ymm5 + vinserti64x4 $0x01, 96(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%rbp), %ymm10 + vinserti64x4 $0x01, 64(%rbp), %zmm10, %zmm10 + vmovdqu 32(%rbp), %ymm11 + vinserti64x4 $0x01, 96(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu (%r15), %ymm6 + vinserti64x4 $0x01, 64(%r15), %zmm6, %zmm6 + vmovdqu 32(%r15), %ymm7 + vinserti64x4 $0x01, 96(%r15), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, (%r15) + vextracti64x4 $0x01, %zmm0, 64(%r15) + vmovdqu %ymm1, 32(%r15) + vextracti64x4 $0x01, %zmm1, 96(%r15) + vmovdqu 128(%rcx), %ymm2 + vinserti64x4 $0x01, 192(%rcx), %zmm2, %zmm2 + vmovdqu 160(%rcx), %ymm3 + vinserti64x4 $0x01, 224(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%r8), %ymm4 + vinserti64x4 $0x01, 192(%r8), %zmm4, %zmm4 + vmovdqu 160(%r8), %ymm5 + vinserti64x4 $0x01, 224(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%rbp), %ymm10 + vinserti64x4 $0x01, 192(%rbp), %zmm10, %zmm10 + vmovdqu 160(%rbp), %ymm11 + vinserti64x4 $0x01, 224(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 128(%r15), %ymm6 + vinserti64x4 $0x01, 192(%r15), %zmm6, %zmm6 + vmovdqu 160(%r15), %ymm7 + vinserti64x4 $0x01, 224(%r15), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 128(%r15) + vextracti64x4 $0x01, %zmm0, 192(%r15) + vmovdqu %ymm1, 160(%r15) + vextracti64x4 $0x01, %zmm1, 224(%r15) + vmovdqu 256(%rcx), %ymm2 + vinserti64x4 $0x01, 320(%rcx), %zmm2, %zmm2 + vmovdqu 288(%rcx), %ymm3 + vinserti64x4 $0x01, 352(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%r8), %ymm4 + vinserti64x4 $0x01, 320(%r8), %zmm4, %zmm4 + vmovdqu 288(%r8), %ymm5 + vinserti64x4 $0x01, 352(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%rbp), %ymm10 + vinserti64x4 $0x01, 320(%rbp), %zmm10, %zmm10 + vmovdqu 288(%rbp), %ymm11 + vinserti64x4 $0x01, 352(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 256(%r15), %ymm6 + vinserti64x4 $0x01, 320(%r15), %zmm6, %zmm6 + vmovdqu 288(%r15), %ymm7 + vinserti64x4 $0x01, 352(%r15), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 256(%r15) + vextracti64x4 $0x01, %zmm0, 320(%r15) + vmovdqu %ymm1, 288(%r15) + vextracti64x4 $0x01, %zmm1, 352(%r15) + vmovdqu 384(%rcx), %ymm2 + vinserti64x4 $0x01, 448(%rcx), %zmm2, %zmm2 + vmovdqu 416(%rcx), %ymm3 + vinserti64x4 $0x01, 480(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%r8), %ymm4 + vinserti64x4 $0x01, 448(%r8), %zmm4, %zmm4 + vmovdqu 416(%r8), %ymm5 + vinserti64x4 $0x01, 480(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%rbp), %ymm10 + vinserti64x4 $0x01, 448(%rbp), %zmm10, %zmm10 + vmovdqu 416(%rbp), %ymm11 + vinserti64x4 $0x01, 480(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 384(%r15), %ymm6 + vinserti64x4 $0x01, 448(%r15), %zmm6, %zmm6 + vmovdqu 416(%r15), %ymm7 + vinserti64x4 $0x01, 480(%r15), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 384(%r15) + vextracti64x4 $0x01, %zmm0, 448(%r15) + vmovdqu %ymm1, 416(%r15) + vextracti64x4 $0x01, %zmm1, 480(%r15) + addq $0x200, %rcx + movq %rbx, %r8 + leaq L_mlkem_avx512_zetas_inv(%rip), %rbp + vmovdqu64 (%rsi), %ymm0 + vinserti64x4 $0x01, (%r15), %zmm0, %zmm0 + vmovdqu64 32(%rsi), %ymm1 + vinserti64x4 $0x01, 32(%r15), %zmm1, %zmm1 + vmovdqu64 64(%rsi), %ymm2 + vinserti64x4 $0x01, 64(%r15), %zmm2, %zmm2 + vmovdqu64 96(%rsi), %ymm3 + vinserti64x4 $0x01, 96(%r15), %zmm3, %zmm3 + vmovdqu64 128(%rsi), %ymm4 + vinserti64x4 $0x01, 128(%r15), %zmm4, %zmm4 + vmovdqu64 160(%rsi), %ymm5 + vinserti64x4 $0x01, 160(%r15), %zmm5, %zmm5 + vmovdqu64 192(%rsi), %ymm6 + vinserti64x4 $0x01, 192(%r15), %zmm6, %zmm6 + vmovdqu64 224(%rsi), %ymm7 + vinserti64x4 $0x01, 224(%r15), %zmm7, %zmm7 + vmovdqu64 256(%rsi), %ymm19 + vinserti64x4 $0x01, 256(%r15), %zmm19, %zmm19 + vmovdqu64 288(%rsi), %ymm20 + vinserti64x4 $0x01, 288(%r15), %zmm20, %zmm20 + vmovdqu64 320(%rsi), %ymm21 + vinserti64x4 $0x01, 320(%r15), %zmm21, %zmm21 + vmovdqu64 352(%rsi), %ymm22 + vinserti64x4 $0x01, 352(%r15), %zmm22, %zmm22 + vmovdqu64 384(%rsi), %ymm23 + vinserti64x4 $0x01, 384(%r15), %zmm23, %zmm23 + vmovdqu64 416(%rsi), %ymm24 + vinserti64x4 $0x01, 416(%r15), %zmm24, %zmm24 + vmovdqu64 448(%rsi), %ymm25 + vinserti64x4 $0x01, 448(%r15), %zmm25, %zmm25 + vmovdqu64 480(%rsi), %ymm26 + vinserti64x4 $0x01, 480(%r15), %zmm26, %zmm26 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm1, %zmm0, %zmm8 + vbroadcasti64x4 (%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm1, %zmm0, %zmm9 + vbroadcasti64x4 32(%rbp), %zmm12 + vpsllq $32, %zmm9, %zmm0 + vpsrlq $32, %zmm8, %zmm1 + vpblendmd %zmm0, %zmm8, %zmm0{%k1} + vpblendmd %zmm1, %zmm9, %zmm1{%k2} + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm3, %zmm2, %zmm8 + vbroadcasti64x4 64(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm3, %zmm2, %zmm9 + vbroadcasti64x4 96(%rbp), %zmm13 + vpsllq $32, %zmm9, %zmm2 + vpsrlq $32, %zmm8, %zmm3 + vpblendmd %zmm2, %zmm8, %zmm2{%k1} + vpblendmd %zmm3, %zmm9, %zmm3{%k2} + vpaddw %zmm1, %zmm0, %zmm8 + vpaddw %zmm3, %zmm2, %zmm9 + vpsubw %zmm1, %zmm0, %zmm1 + vpsubw %zmm3, %zmm2, %zmm3 + vpmulhw %zmm15, %zmm8, %zmm0 + vpmulhw %zmm15, %zmm9, %zmm2 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm2, %zmm2 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm8, %zmm8 + vpsubw %zmm2, %zmm9, %zmm9 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm1 + vpsubw %zmm2, %zmm3, %zmm3 + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm20, %zmm19, %zmm27 + vbroadcasti64x4 1216(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm20, %zmm19, %zmm28 + vbroadcasti64x4 1248(%rbp), %zmm12 + vpsllq $32, %zmm28, %zmm19 + vpsrlq $32, %zmm27, %zmm20 + vpblendmd %zmm19, %zmm27, %zmm19{%k1} + vpblendmd %zmm20, %zmm28, %zmm20{%k2} + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm22, %zmm21, %zmm27 + vbroadcasti64x4 1280(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm22, %zmm21, %zmm28 + vbroadcasti64x4 1312(%rbp), %zmm13 + vpsllq $32, %zmm28, %zmm21 + vpsrlq $32, %zmm27, %zmm22 + vpblendmd %zmm21, %zmm27, %zmm21{%k1} + vpblendmd %zmm22, %zmm28, %zmm22{%k2} + vpaddw %zmm20, %zmm19, %zmm27 + vpaddw %zmm22, %zmm21, %zmm28 + vpsubw %zmm20, %zmm19, %zmm20 + vpsubw %zmm22, %zmm21, %zmm22 + vpmulhw %zmm15, %zmm27, %zmm19 + vpmulhw %zmm15, %zmm28, %zmm21 + vpsraw $10, %zmm19, %zmm19 + vpsraw $10, %zmm21, %zmm21 + vpmullw %zmm14, %zmm19, %zmm19 + vpmullw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm27, %zmm27 + vpsubw %zmm21, %zmm28, %zmm28 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm20 + vpsubw %zmm21, %zmm22, %zmm22 + vbroadcasti64x4 128(%rbp), %zmm10 + vbroadcasti64x4 160(%rbp), %zmm12 + vbroadcasti64x4 192(%rbp), %zmm11 + vbroadcasti64x4 224(%rbp), %zmm13 + vpunpckldq %zmm1, %zmm8, %zmm0 + vpunpckhdq %zmm1, %zmm8, %zmm1 + vpunpckldq %zmm3, %zmm9, %zmm2 + vpunpckhdq %zmm3, %zmm9, %zmm3 + vpaddw %zmm1, %zmm0, %zmm8 + vpaddw %zmm3, %zmm2, %zmm9 + vpsubw %zmm1, %zmm0, %zmm1 + vpsubw %zmm3, %zmm2, %zmm3 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm1 + vpsubw %zmm2, %zmm3, %zmm3 + vbroadcasti64x4 1344(%rbp), %zmm10 + vbroadcasti64x4 1376(%rbp), %zmm12 + vbroadcasti64x4 1408(%rbp), %zmm11 + vbroadcasti64x4 1440(%rbp), %zmm13 + vpunpckldq %zmm20, %zmm27, %zmm19 + vpunpckhdq %zmm20, %zmm27, %zmm20 + vpunpckldq %zmm22, %zmm28, %zmm21 + vpunpckhdq %zmm22, %zmm28, %zmm22 + vpaddw %zmm20, %zmm19, %zmm27 + vpaddw %zmm22, %zmm21, %zmm28 + vpsubw %zmm20, %zmm19, %zmm20 + vpsubw %zmm22, %zmm21, %zmm22 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm20 + vpsubw %zmm21, %zmm22, %zmm22 + vbroadcasti64x4 256(%rbp), %zmm10 + vbroadcasti64x4 288(%rbp), %zmm12 + vbroadcasti64x4 320(%rbp), %zmm11 + vbroadcasti64x4 352(%rbp), %zmm13 + vpunpcklqdq %zmm1, %zmm8, %zmm0 + vpunpckhqdq %zmm1, %zmm8, %zmm1 + vpunpcklqdq %zmm3, %zmm9, %zmm2 + vpunpckhqdq %zmm3, %zmm9, %zmm3 + vpaddw %zmm1, %zmm0, %zmm8 + vpaddw %zmm3, %zmm2, %zmm9 + vpsubw %zmm1, %zmm0, %zmm1 + vpsubw %zmm3, %zmm2, %zmm3 + vpmulhw %zmm15, %zmm8, %zmm0 + vpmulhw %zmm15, %zmm9, %zmm2 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm2, %zmm2 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm8, %zmm8 + vpsubw %zmm2, %zmm9, %zmm9 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm1 + vpsubw %zmm2, %zmm3, %zmm3 + vbroadcasti64x4 1472(%rbp), %zmm10 + vbroadcasti64x4 1504(%rbp), %zmm12 + vbroadcasti64x4 1536(%rbp), %zmm11 + vbroadcasti64x4 1568(%rbp), %zmm13 + vpunpcklqdq %zmm20, %zmm27, %zmm19 + vpunpckhqdq %zmm20, %zmm27, %zmm20 + vpunpcklqdq %zmm22, %zmm28, %zmm21 + vpunpckhqdq %zmm22, %zmm28, %zmm22 + vpaddw %zmm20, %zmm19, %zmm27 + vpaddw %zmm22, %zmm21, %zmm28 + vpsubw %zmm20, %zmm19, %zmm20 + vpsubw %zmm22, %zmm21, %zmm22 + vpmulhw %zmm15, %zmm27, %zmm19 + vpmulhw %zmm15, %zmm28, %zmm21 + vpsraw $10, %zmm19, %zmm19 + vpsraw $10, %zmm21, %zmm21 + vpmullw %zmm14, %zmm19, %zmm19 + vpmullw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm27, %zmm27 + vpsubw %zmm21, %zmm28, %zmm28 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm20 + vpsubw %zmm21, %zmm22, %zmm22 + vmovdqa64 %zmm17, %zmm0 + vpermi2q %zmm1, %zmm8, %zmm0 + vbroadcasti64x4 384(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm1, %zmm8, %zmm16 + vmovdqa64 %zmm16, %zmm1 + vbroadcasti64x4 416(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm2 + vpermi2q %zmm3, %zmm9, %zmm2 + vbroadcasti64x4 448(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm3, %zmm9, %zmm16 + vmovdqa64 %zmm16, %zmm3 + vbroadcasti64x4 480(%rbp), %zmm13 + vpsubw %zmm1, %zmm0, %zmm8 + vpsubw %zmm3, %zmm2, %zmm9 + vpaddw %zmm1, %zmm0, %zmm0 + vpaddw %zmm3, %zmm2, %zmm2 + vpmullw %zmm12, %zmm8, %zmm1 + vpmullw %zmm13, %zmm9, %zmm3 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm11, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm1, %zmm1 + vpmulhw %zmm14, %zmm3, %zmm3 + vpsubw %zmm1, %zmm8, %zmm1 + vpsubw %zmm3, %zmm9, %zmm3 + vmovdqa64 %zmm17, %zmm19 + vpermi2q %zmm20, %zmm27, %zmm19 + vbroadcasti64x4 1600(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm20, %zmm27, %zmm16 + vmovdqa64 %zmm16, %zmm20 + vbroadcasti64x4 1632(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm21 + vpermi2q %zmm22, %zmm28, %zmm21 + vbroadcasti64x4 1664(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm22, %zmm28, %zmm16 + vmovdqa64 %zmm16, %zmm22 + vbroadcasti64x4 1696(%rbp), %zmm13 + vpsubw %zmm20, %zmm19, %zmm27 + vpsubw %zmm22, %zmm21, %zmm28 + vpaddw %zmm20, %zmm19, %zmm19 + vpaddw %zmm22, %zmm21, %zmm21 + vpmullw %zmm12, %zmm27, %zmm20 + vpmullw %zmm13, %zmm28, %zmm22 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm11, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm22, %zmm22 + vpsubw %zmm20, %zmm27, %zmm20 + vpsubw %zmm22, %zmm28, %zmm22 + vbroadcasti64x4 512(%rbp), %zmm10 + vbroadcasti64x4 544(%rbp), %zmm12 + vpaddw %zmm2, %zmm0, %zmm8 + vpaddw %zmm3, %zmm1, %zmm9 + vpsubw %zmm2, %zmm0, %zmm2 + vpsubw %zmm3, %zmm1, %zmm3 + vpmulhw %zmm15, %zmm8, %zmm0 + vpmulhw %zmm15, %zmm9, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm8, %zmm0 + vpsubw %zmm1, %zmm9, %zmm1 + vpmullw %zmm12, %zmm2, %zmm8 + vpmullw %zmm12, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm2, %zmm2 + vpmulhw %zmm10, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm2 + vpsubw %zmm9, %zmm3, %zmm3 + vbroadcasti64x4 1728(%rbp), %zmm10 + vbroadcasti64x4 1760(%rbp), %zmm12 + vpaddw %zmm21, %zmm19, %zmm27 + vpaddw %zmm22, %zmm20, %zmm28 + vpsubw %zmm21, %zmm19, %zmm21 + vpsubw %zmm22, %zmm20, %zmm22 + vpmulhw %zmm15, %zmm27, %zmm19 + vpmulhw %zmm15, %zmm28, %zmm20 + vpsraw $10, %zmm19, %zmm19 + vpsraw $10, %zmm20, %zmm20 + vpmullw %zmm14, %zmm19, %zmm19 + vpmullw %zmm14, %zmm20, %zmm20 + vpsubw %zmm19, %zmm27, %zmm19 + vpsubw %zmm20, %zmm28, %zmm20 + vpmullw %zmm12, %zmm21, %zmm27 + vpmullw %zmm12, %zmm22, %zmm28 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm27, %zmm27 + vpmulhw %zmm14, %zmm28, %zmm28 + vpsubw %zmm27, %zmm21, %zmm21 + vpsubw %zmm28, %zmm22, %zmm22 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm5, %zmm4, %zmm8 + vbroadcasti64x4 576(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm5, %zmm4, %zmm9 + vbroadcasti64x4 608(%rbp), %zmm12 + vpsllq $32, %zmm9, %zmm4 + vpsrlq $32, %zmm8, %zmm5 + vpblendmd %zmm4, %zmm8, %zmm4{%k1} + vpblendmd %zmm5, %zmm9, %zmm5{%k2} + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm7, %zmm6, %zmm8 + vbroadcasti64x4 640(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm7, %zmm6, %zmm9 + vbroadcasti64x4 672(%rbp), %zmm13 + vpsllq $32, %zmm9, %zmm6 + vpsrlq $32, %zmm8, %zmm7 + vpblendmd %zmm6, %zmm8, %zmm6{%k1} + vpblendmd %zmm7, %zmm9, %zmm7{%k2} + vpaddw %zmm5, %zmm4, %zmm8 + vpaddw %zmm7, %zmm6, %zmm9 + vpsubw %zmm5, %zmm4, %zmm5 + vpsubw %zmm7, %zmm6, %zmm7 + vpmulhw %zmm15, %zmm8, %zmm4 + vpmulhw %zmm15, %zmm9, %zmm6 + vpsraw $10, %zmm4, %zmm4 + vpsraw $10, %zmm6, %zmm6 + vpmullw %zmm14, %zmm4, %zmm4 + vpmullw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm8, %zmm8 + vpsubw %zmm6, %zmm9, %zmm9 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm5 + vpsubw %zmm6, %zmm7, %zmm7 + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm24, %zmm23, %zmm27 + vbroadcasti64x4 1792(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm24, %zmm23, %zmm28 + vbroadcasti64x4 1824(%rbp), %zmm12 + vpsllq $32, %zmm28, %zmm23 + vpsrlq $32, %zmm27, %zmm24 + vpblendmd %zmm23, %zmm27, %zmm23{%k1} + vpblendmd %zmm24, %zmm28, %zmm24{%k2} + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm26, %zmm25, %zmm27 + vbroadcasti64x4 1856(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm26, %zmm25, %zmm28 + vbroadcasti64x4 1888(%rbp), %zmm13 + vpsllq $32, %zmm28, %zmm25 + vpsrlq $32, %zmm27, %zmm26 + vpblendmd %zmm25, %zmm27, %zmm25{%k1} + vpblendmd %zmm26, %zmm28, %zmm26{%k2} + vpaddw %zmm24, %zmm23, %zmm27 + vpaddw %zmm26, %zmm25, %zmm28 + vpsubw %zmm24, %zmm23, %zmm24 + vpsubw %zmm26, %zmm25, %zmm26 + vpmulhw %zmm15, %zmm27, %zmm23 + vpmulhw %zmm15, %zmm28, %zmm25 + vpsraw $10, %zmm23, %zmm23 + vpsraw $10, %zmm25, %zmm25 + vpmullw %zmm14, %zmm23, %zmm23 + vpmullw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm27, %zmm27 + vpsubw %zmm25, %zmm28, %zmm28 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm24 + vpsubw %zmm25, %zmm26, %zmm26 + vbroadcasti64x4 704(%rbp), %zmm10 + vbroadcasti64x4 736(%rbp), %zmm12 + vbroadcasti64x4 768(%rbp), %zmm11 + vbroadcasti64x4 800(%rbp), %zmm13 + vpunpckldq %zmm5, %zmm8, %zmm4 + vpunpckhdq %zmm5, %zmm8, %zmm5 + vpunpckldq %zmm7, %zmm9, %zmm6 + vpunpckhdq %zmm7, %zmm9, %zmm7 + vpaddw %zmm5, %zmm4, %zmm8 + vpaddw %zmm7, %zmm6, %zmm9 + vpsubw %zmm5, %zmm4, %zmm5 + vpsubw %zmm7, %zmm6, %zmm7 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm5 + vpsubw %zmm6, %zmm7, %zmm7 + vbroadcasti64x4 1920(%rbp), %zmm10 + vbroadcasti64x4 1952(%rbp), %zmm12 + vbroadcasti64x4 1984(%rbp), %zmm11 + vbroadcasti64x4 2016(%rbp), %zmm13 + vpunpckldq %zmm24, %zmm27, %zmm23 + vpunpckhdq %zmm24, %zmm27, %zmm24 + vpunpckldq %zmm26, %zmm28, %zmm25 + vpunpckhdq %zmm26, %zmm28, %zmm26 + vpaddw %zmm24, %zmm23, %zmm27 + vpaddw %zmm26, %zmm25, %zmm28 + vpsubw %zmm24, %zmm23, %zmm24 + vpsubw %zmm26, %zmm25, %zmm26 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm24 + vpsubw %zmm25, %zmm26, %zmm26 + vbroadcasti64x4 832(%rbp), %zmm10 + vbroadcasti64x4 864(%rbp), %zmm12 + vbroadcasti64x4 896(%rbp), %zmm11 + vbroadcasti64x4 928(%rbp), %zmm13 + vpunpcklqdq %zmm5, %zmm8, %zmm4 + vpunpckhqdq %zmm5, %zmm8, %zmm5 + vpunpcklqdq %zmm7, %zmm9, %zmm6 + vpunpckhqdq %zmm7, %zmm9, %zmm7 + vpaddw %zmm5, %zmm4, %zmm8 + vpaddw %zmm7, %zmm6, %zmm9 + vpsubw %zmm5, %zmm4, %zmm5 + vpsubw %zmm7, %zmm6, %zmm7 + vpmulhw %zmm15, %zmm8, %zmm4 + vpmulhw %zmm15, %zmm9, %zmm6 + vpsraw $10, %zmm4, %zmm4 + vpsraw $10, %zmm6, %zmm6 + vpmullw %zmm14, %zmm4, %zmm4 + vpmullw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm8, %zmm8 + vpsubw %zmm6, %zmm9, %zmm9 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm5 + vpsubw %zmm6, %zmm7, %zmm7 + vbroadcasti64x4 2048(%rbp), %zmm10 + vbroadcasti64x4 2080(%rbp), %zmm12 + vbroadcasti64x4 2112(%rbp), %zmm11 + vbroadcasti64x4 2144(%rbp), %zmm13 + vpunpcklqdq %zmm24, %zmm27, %zmm23 + vpunpckhqdq %zmm24, %zmm27, %zmm24 + vpunpcklqdq %zmm26, %zmm28, %zmm25 + vpunpckhqdq %zmm26, %zmm28, %zmm26 + vpaddw %zmm24, %zmm23, %zmm27 + vpaddw %zmm26, %zmm25, %zmm28 + vpsubw %zmm24, %zmm23, %zmm24 + vpsubw %zmm26, %zmm25, %zmm26 + vpmulhw %zmm15, %zmm27, %zmm23 + vpmulhw %zmm15, %zmm28, %zmm25 + vpsraw $10, %zmm23, %zmm23 + vpsraw $10, %zmm25, %zmm25 + vpmullw %zmm14, %zmm23, %zmm23 + vpmullw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm27, %zmm27 + vpsubw %zmm25, %zmm28, %zmm28 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm24 + vpsubw %zmm25, %zmm26, %zmm26 + vmovdqa64 %zmm17, %zmm4 + vpermi2q %zmm5, %zmm8, %zmm4 + vbroadcasti64x4 960(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm5, %zmm8, %zmm16 + vmovdqa64 %zmm16, %zmm5 + vbroadcasti64x4 992(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm6 + vpermi2q %zmm7, %zmm9, %zmm6 + vbroadcasti64x4 1024(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm7, %zmm9, %zmm16 + vmovdqa64 %zmm16, %zmm7 + vbroadcasti64x4 1056(%rbp), %zmm13 + vpsubw %zmm5, %zmm4, %zmm8 + vpsubw %zmm7, %zmm6, %zmm9 + vpaddw %zmm5, %zmm4, %zmm4 + vpaddw %zmm7, %zmm6, %zmm6 + vpmullw %zmm12, %zmm8, %zmm5 + vpmullw %zmm13, %zmm9, %zmm7 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm11, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm7, %zmm7 + vpsubw %zmm5, %zmm8, %zmm5 + vpsubw %zmm7, %zmm9, %zmm7 + vmovdqa64 %zmm17, %zmm23 + vpermi2q %zmm24, %zmm27, %zmm23 + vbroadcasti64x4 2176(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm24, %zmm27, %zmm16 + vmovdqa64 %zmm16, %zmm24 + vbroadcasti64x4 2208(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm25 + vpermi2q %zmm26, %zmm28, %zmm25 + vbroadcasti64x4 2240(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm26, %zmm28, %zmm16 + vmovdqa64 %zmm16, %zmm26 + vbroadcasti64x4 2272(%rbp), %zmm13 + vpsubw %zmm24, %zmm23, %zmm27 + vpsubw %zmm26, %zmm25, %zmm28 + vpaddw %zmm24, %zmm23, %zmm23 + vpaddw %zmm26, %zmm25, %zmm25 + vpmullw %zmm12, %zmm27, %zmm24 + vpmullw %zmm13, %zmm28, %zmm26 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm11, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm26, %zmm26 + vpsubw %zmm24, %zmm27, %zmm24 + vpsubw %zmm26, %zmm28, %zmm26 + vbroadcasti64x4 1088(%rbp), %zmm10 + vbroadcasti64x4 1120(%rbp), %zmm12 + vpaddw %zmm6, %zmm4, %zmm8 + vpaddw %zmm7, %zmm5, %zmm9 + vpsubw %zmm6, %zmm4, %zmm6 + vpsubw %zmm7, %zmm5, %zmm7 + vpmulhw %zmm15, %zmm8, %zmm4 + vpmulhw %zmm15, %zmm9, %zmm5 + vpsraw $10, %zmm4, %zmm4 + vpsraw $10, %zmm5, %zmm5 + vpmullw %zmm14, %zmm4, %zmm4 + vpmullw %zmm14, %zmm5, %zmm5 + vpsubw %zmm4, %zmm8, %zmm4 + vpsubw %zmm5, %zmm9, %zmm5 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm6 + vpsubw %zmm9, %zmm7, %zmm7 + vbroadcasti64x4 2304(%rbp), %zmm10 + vbroadcasti64x4 2336(%rbp), %zmm12 + vpaddw %zmm25, %zmm23, %zmm27 + vpaddw %zmm26, %zmm24, %zmm28 + vpsubw %zmm25, %zmm23, %zmm25 + vpsubw %zmm26, %zmm24, %zmm26 + vpmulhw %zmm15, %zmm27, %zmm23 + vpmulhw %zmm15, %zmm28, %zmm24 + vpsraw $10, %zmm23, %zmm23 + vpsraw $10, %zmm24, %zmm24 + vpmullw %zmm14, %zmm23, %zmm23 + vpmullw %zmm14, %zmm24, %zmm24 + vpsubw %zmm23, %zmm27, %zmm23 + vpsubw %zmm24, %zmm28, %zmm24 + vpmullw %zmm12, %zmm25, %zmm27 + vpmullw %zmm12, %zmm26, %zmm28 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm27, %zmm27 + vpmulhw %zmm14, %zmm28, %zmm28 + vpsubw %zmm27, %zmm25, %zmm25 + vpsubw %zmm28, %zmm26, %zmm26 + vbroadcasti64x4 1152(%rbp), %zmm10 + vbroadcasti64x4 1184(%rbp), %zmm12 + vpsubw %zmm4, %zmm0, %zmm8 + vpsubw %zmm5, %zmm1, %zmm9 + vpaddw %zmm4, %zmm0, %zmm0 + vpaddw %zmm5, %zmm1, %zmm1 + vpmullw %zmm12, %zmm8, %zmm4 + vpmullw %zmm12, %zmm9, %zmm5 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm5, %zmm5 + vpsubw %zmm4, %zmm8, %zmm4 + vpsubw %zmm5, %zmm9, %zmm5 + vpsubw %zmm6, %zmm2, %zmm8 + vpsubw %zmm7, %zmm3, %zmm9 + vpaddw %zmm6, %zmm2, %zmm2 + vpaddw %zmm7, %zmm3, %zmm3 + vpmullw %zmm12, %zmm8, %zmm6 + vpmullw %zmm12, %zmm9, %zmm7 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm6, %zmm6 + vpmulhw %zmm14, %zmm7, %zmm7 + vpsubw %zmm6, %zmm8, %zmm6 + vpsubw %zmm7, %zmm9, %zmm7 + vbroadcasti64x4 2368(%rbp), %zmm10 + vbroadcasti64x4 2400(%rbp), %zmm12 + vpsubw %zmm23, %zmm19, %zmm27 + vpsubw %zmm24, %zmm20, %zmm28 + vpaddw %zmm23, %zmm19, %zmm19 + vpaddw %zmm24, %zmm20, %zmm20 + vpmullw %zmm12, %zmm27, %zmm23 + vpmullw %zmm12, %zmm28, %zmm24 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm10, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm24, %zmm24 + vpsubw %zmm23, %zmm27, %zmm23 + vpsubw %zmm24, %zmm28, %zmm24 + vpsubw %zmm25, %zmm21, %zmm27 + vpsubw %zmm26, %zmm22, %zmm28 + vpaddw %zmm25, %zmm21, %zmm21 + vpaddw %zmm26, %zmm22, %zmm22 + vpmullw %zmm12, %zmm27, %zmm25 + vpmullw %zmm12, %zmm28, %zmm26 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm10, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm25, %zmm25 + vpmulhw %zmm14, %zmm26, %zmm26 + vpsubw %zmm25, %zmm27, %zmm25 + vpsubw %zmm26, %zmm28, %zmm26 + vbroadcasti64x4 2432(%rbp), %zmm10 + vbroadcasti64x4 2464(%rbp), %zmm12 + vbroadcasti64x4 2496(%rbp), %zmm11 + vbroadcasti64x4 2528(%rbp), %zmm13 + vpsubw %zmm19, %zmm0, %zmm8 + vpsubw %zmm20, %zmm1, %zmm9 + vpaddw %zmm19, %zmm0, %zmm0 + vpaddw %zmm20, %zmm1, %zmm1 + vpmullw %zmm12, %zmm8, %zmm19 + vpmullw %zmm12, %zmm9, %zmm20 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm20, %zmm20 + vpsubw %zmm19, %zmm8, %zmm19 + vpsubw %zmm20, %zmm9, %zmm20 + vpaddw %zmm21, %zmm2, %zmm8 + vpaddw %zmm22, %zmm3, %zmm9 + vpsubw %zmm21, %zmm2, %zmm21 + vpsubw %zmm22, %zmm3, %zmm22 + vpmulhw %zmm15, %zmm8, %zmm2 + vpmulhw %zmm15, %zmm9, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm8, %zmm2 + vpsubw %zmm3, %zmm9, %zmm3 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm21 + vpsubw %zmm9, %zmm22, %zmm22 + vpsubw %zmm23, %zmm4, %zmm8 + vpsubw %zmm24, %zmm5, %zmm9 + vpaddw %zmm23, %zmm4, %zmm4 + vpaddw %zmm24, %zmm5, %zmm5 + vpmullw %zmm12, %zmm8, %zmm23 + vpmullw %zmm12, %zmm9, %zmm24 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm24, %zmm24 + vpsubw %zmm23, %zmm8, %zmm23 + vpsubw %zmm24, %zmm9, %zmm24 + vpaddw %zmm25, %zmm6, %zmm8 + vpaddw %zmm26, %zmm7, %zmm9 + vpsubw %zmm25, %zmm6, %zmm25 + vpsubw %zmm26, %zmm7, %zmm26 + vpmulhw %zmm15, %zmm8, %zmm6 + vpmulhw %zmm15, %zmm9, %zmm7 + vpsraw $10, %zmm6, %zmm6 + vpsraw $10, %zmm7, %zmm7 + vpmullw %zmm14, %zmm6, %zmm6 + vpmullw %zmm14, %zmm7, %zmm7 + vpsubw %zmm6, %zmm8, %zmm6 + vpsubw %zmm7, %zmm9, %zmm7 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm25 + vpsubw %zmm9, %zmm26, %zmm26 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm11, %zmm0, %zmm0 + vpmulhw %zmm11, %zmm1, %zmm1 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm0, %zmm0 + vpsubw %zmm9, %zmm1, %zmm1 + vpmullw %zmm13, %zmm2, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm11, %zmm2, %zmm2 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm2 + vpsubw %zmm9, %zmm3, %zmm3 + vpmullw %zmm13, %zmm4, %zmm8 + vpmullw %zmm13, %zmm5, %zmm9 + vpmulhw %zmm11, %zmm4, %zmm4 + vpmulhw %zmm11, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm4 + vpsubw %zmm9, %zmm5, %zmm5 + vpmullw %zmm13, %zmm6, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm11, %zmm6, %zmm6 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm6 + vpsubw %zmm9, %zmm7, %zmm7 + vpmullw %zmm13, %zmm19, %zmm8 + vpmullw %zmm13, %zmm20, %zmm9 + vpmulhw %zmm11, %zmm19, %zmm19 + vpmulhw %zmm11, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm19 + vpsubw %zmm9, %zmm20, %zmm20 + vpmullw %zmm13, %zmm21, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm11, %zmm21, %zmm21 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm21 + vpsubw %zmm9, %zmm22, %zmm22 + vpmullw %zmm13, %zmm23, %zmm8 + vpmullw %zmm13, %zmm24, %zmm9 + vpmulhw %zmm11, %zmm23, %zmm23 + vpmulhw %zmm11, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm23 + vpsubw %zmm9, %zmm24, %zmm24 + vpmullw %zmm13, %zmm25, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm11, %zmm25, %zmm25 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm25 + vpsubw %zmm9, %zmm26, %zmm26 + vmovdqu64 %ymm0, (%rsi) + vextracti64x4 $0x01, %zmm0, (%r15) + vmovdqu64 %ymm1, 32(%rsi) + vextracti64x4 $0x01, %zmm1, 32(%r15) + vmovdqu64 %ymm2, 64(%rsi) + vextracti64x4 $0x01, %zmm2, 64(%r15) + vmovdqu64 %ymm3, 96(%rsi) + vextracti64x4 $0x01, %zmm3, 96(%r15) + vmovdqu64 %ymm4, 128(%rsi) + vextracti64x4 $0x01, %zmm4, 128(%r15) + vmovdqu64 %ymm5, 160(%rsi) + vextracti64x4 $0x01, %zmm5, 160(%r15) + vmovdqu64 %ymm6, 192(%rsi) + vextracti64x4 $0x01, %zmm6, 192(%r15) + vmovdqu64 %ymm7, 224(%rsi) + vextracti64x4 $0x01, %zmm7, 224(%r15) + vmovdqu64 %ymm19, 256(%rsi) + vextracti64x4 $0x01, %zmm19, 256(%r15) + vmovdqu64 %ymm20, 288(%rsi) + vextracti64x4 $0x01, %zmm20, 288(%r15) + vmovdqu64 %ymm21, 320(%rsi) + vextracti64x4 $0x01, %zmm21, 320(%r15) + vmovdqu64 %ymm22, 352(%rsi) + vextracti64x4 $0x01, %zmm22, 352(%r15) + vmovdqu64 %ymm23, 384(%rsi) + vextracti64x4 $0x01, %zmm23, 384(%r15) + vmovdqu64 %ymm24, 416(%rsi) + vextracti64x4 $0x01, %zmm24, 416(%r15) + vmovdqu64 %ymm25, 448(%rsi) + vextracti64x4 $0x01, %zmm25, 448(%r15) + vmovdqu64 %ymm26, 480(%rsi) + vextracti64x4 $0x01, %zmm26, 480(%r15) + vmovdqu64 (%rsi), %zmm0 + vmovdqu64 64(%rsi), %zmm1 + vmovdqu64 128(%rsi), %zmm2 + vmovdqu64 192(%rsi), %zmm3 + vmovdqu64 (%r9), %zmm4 + vmovdqu64 64(%r9), %zmm5 + vmovdqu64 128(%r9), %zmm6 + vmovdqu64 192(%r9), %zmm7 + vpaddw %zmm4, %zmm0, %zmm4 + vpaddw %zmm5, %zmm1, %zmm5 + vpmulhw %zmm15, %zmm4, %zmm0 + vpmulhw %zmm15, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpaddw %zmm6, %zmm2, %zmm6 + vpaddw %zmm7, %zmm3, %zmm7 + vpmulhw %zmm15, %zmm6, %zmm2 + vpmulhw %zmm15, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, (%rsi) + vmovdqu64 %zmm1, 64(%rsi) + vmovdqu64 %zmm2, 128(%rsi) + vmovdqu64 %zmm3, 192(%rsi) + vmovdqu64 256(%rsi), %zmm0 + vmovdqu64 320(%rsi), %zmm1 + vmovdqu64 384(%rsi), %zmm2 + vmovdqu64 448(%rsi), %zmm3 + vmovdqu64 256(%r9), %zmm4 + vmovdqu64 320(%r9), %zmm5 + vmovdqu64 384(%r9), %zmm6 + vmovdqu64 448(%r9), %zmm7 + vpaddw %zmm4, %zmm0, %zmm4 + vpaddw %zmm5, %zmm1, %zmm5 + vpmulhw %zmm15, %zmm4, %zmm0 + vpmulhw %zmm15, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpaddw %zmm6, %zmm2, %zmm6 + vpaddw %zmm7, %zmm3, %zmm7 + vpmulhw %zmm15, %zmm6, %zmm2 + vpmulhw %zmm15, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, 256(%rsi) + vmovdqu64 %zmm1, 320(%rsi) + vmovdqu64 %zmm2, 384(%rsi) + vmovdqu64 %zmm3, 448(%rsi) + movq %r9, %r14 + addq $0x200, %r14 + vmovdqu64 (%r15), %zmm0 + vmovdqu64 64(%r15), %zmm1 + vmovdqu64 128(%r15), %zmm2 + vmovdqu64 192(%r15), %zmm3 + vmovdqu64 (%r14), %zmm4 + vmovdqu64 64(%r14), %zmm5 + vmovdqu64 128(%r14), %zmm6 + vmovdqu64 192(%r14), %zmm7 + vpaddw %zmm4, %zmm0, %zmm4 + vpaddw %zmm5, %zmm1, %zmm5 + vpmulhw %zmm15, %zmm4, %zmm0 + vpmulhw %zmm15, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpaddw %zmm6, %zmm2, %zmm6 + vpaddw %zmm7, %zmm3, %zmm7 + vpmulhw %zmm15, %zmm6, %zmm2 + vpmulhw %zmm15, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, (%r15) + vmovdqu64 %zmm1, 64(%r15) + vmovdqu64 %zmm2, 128(%r15) + vmovdqu64 %zmm3, 192(%r15) + vmovdqu64 256(%r15), %zmm0 + vmovdqu64 320(%r15), %zmm1 + vmovdqu64 384(%r15), %zmm2 + vmovdqu64 448(%r15), %zmm3 + vmovdqu64 256(%r14), %zmm4 + vmovdqu64 320(%r14), %zmm5 + vmovdqu64 384(%r14), %zmm6 + vmovdqu64 448(%r14), %zmm7 + vpaddw %zmm4, %zmm0, %zmm4 + vpaddw %zmm5, %zmm1, %zmm5 + vpmulhw %zmm15, %zmm4, %zmm0 + vpmulhw %zmm15, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpaddw %zmm6, %zmm2, %zmm6 + vpaddw %zmm7, %zmm3, %zmm7 + vpmulhw %zmm15, %zmm6, %zmm2 + vpmulhw %zmm15, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, 256(%r15) + vmovdqu64 %zmm1, 320(%r15) + vmovdqu64 %zmm2, 384(%r15) + vmovdqu64 %zmm3, 448(%r15) + addq $0x400, %r9 + addq $0x400, %rsi + subq $2, %r12 + jmp L_encap_avx512_calc +L_encap_avx512_calc_odd: + movq $0xf301, %r13 + vmovd %r13d, %xmm12 + vpbroadcastw %xmm12, %zmm12 + movslq %r11d, %r13 + leaq L_mlkem_avx512_zetas_basemul(%rip), %rbp + vmovdqu (%rdi), %ymm2 + vinserti64x4 $0x01, 64(%rdi), %zmm2, %zmm2 + vmovdqu 32(%rdi), %ymm3 + vinserti64x4 $0x01, 96(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%r8), %ymm4 + vinserti64x4 $0x01, 64(%r8), %zmm4, %zmm4 + vmovdqu 32(%r8), %ymm5 + vinserti64x4 $0x01, 96(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%rbp), %ymm10 + vinserti64x4 $0x01, 64(%rbp), %zmm10, %zmm10 + vmovdqu 32(%rbp), %ymm11 + vinserti64x4 $0x01, 96(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, (%rdx) + vextracti64x4 $0x01, %zmm0, 64(%rdx) + vmovdqu %ymm1, 32(%rdx) + vextracti64x4 $0x01, %zmm1, 96(%rdx) + vmovdqu 128(%rdi), %ymm2 + vinserti64x4 $0x01, 192(%rdi), %zmm2, %zmm2 + vmovdqu 160(%rdi), %ymm3 + vinserti64x4 $0x01, 224(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%r8), %ymm4 + vinserti64x4 $0x01, 192(%r8), %zmm4, %zmm4 + vmovdqu 160(%r8), %ymm5 + vinserti64x4 $0x01, 224(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%rbp), %ymm10 + vinserti64x4 $0x01, 192(%rbp), %zmm10, %zmm10 + vmovdqu 160(%rbp), %ymm11 + vinserti64x4 $0x01, 224(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 128(%rdx) + vextracti64x4 $0x01, %zmm0, 192(%rdx) + vmovdqu %ymm1, 160(%rdx) + vextracti64x4 $0x01, %zmm1, 224(%rdx) + vmovdqu 256(%rdi), %ymm2 + vinserti64x4 $0x01, 320(%rdi), %zmm2, %zmm2 + vmovdqu 288(%rdi), %ymm3 + vinserti64x4 $0x01, 352(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%r8), %ymm4 + vinserti64x4 $0x01, 320(%r8), %zmm4, %zmm4 + vmovdqu 288(%r8), %ymm5 + vinserti64x4 $0x01, 352(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%rbp), %ymm10 + vinserti64x4 $0x01, 320(%rbp), %zmm10, %zmm10 + vmovdqu 288(%rbp), %ymm11 + vinserti64x4 $0x01, 352(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 256(%rdx) + vextracti64x4 $0x01, %zmm0, 320(%rdx) + vmovdqu %ymm1, 288(%rdx) + vextracti64x4 $0x01, %zmm1, 352(%rdx) + vmovdqu 384(%rdi), %ymm2 + vinserti64x4 $0x01, 448(%rdi), %zmm2, %zmm2 + vmovdqu 416(%rdi), %ymm3 + vinserti64x4 $0x01, 480(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%r8), %ymm4 + vinserti64x4 $0x01, 448(%r8), %zmm4, %zmm4 + vmovdqu 416(%r8), %ymm5 + vinserti64x4 $0x01, 480(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%rbp), %ymm10 + vinserti64x4 $0x01, 448(%rbp), %zmm10, %zmm10 + vmovdqu 416(%rbp), %ymm11 + vinserti64x4 $0x01, 480(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 384(%rdx) + vextracti64x4 $0x01, %zmm0, 448(%rdx) + vmovdqu %ymm1, 416(%rdx) + vextracti64x4 $0x01, %zmm1, 480(%rdx) + addq $0x200, %rdi + addq $0x200, %r8 + subq $2, %r13 + jz L_pointwise_acc_mont_end_encap_v_avx512 +L_pointwise_acc_mont_start_encap_v_avx512: + leaq L_mlkem_avx512_zetas_basemul(%rip), %rbp + vmovdqu (%rdi), %ymm2 + vinserti64x4 $0x01, 64(%rdi), %zmm2, %zmm2 + vmovdqu 32(%rdi), %ymm3 + vinserti64x4 $0x01, 96(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%r8), %ymm4 + vinserti64x4 $0x01, 64(%r8), %zmm4, %zmm4 + vmovdqu 32(%r8), %ymm5 + vinserti64x4 $0x01, 96(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%rbp), %ymm10 + vinserti64x4 $0x01, 64(%rbp), %zmm10, %zmm10 + vmovdqu 32(%rbp), %ymm11 + vinserti64x4 $0x01, 96(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu (%rdx), %ymm6 + vinserti64x4 $0x01, 64(%rdx), %zmm6, %zmm6 + vmovdqu 32(%rdx), %ymm7 + vinserti64x4 $0x01, 96(%rdx), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, (%rdx) + vextracti64x4 $0x01, %zmm0, 64(%rdx) + vmovdqu %ymm1, 32(%rdx) + vextracti64x4 $0x01, %zmm1, 96(%rdx) + vmovdqu 128(%rdi), %ymm2 + vinserti64x4 $0x01, 192(%rdi), %zmm2, %zmm2 + vmovdqu 160(%rdi), %ymm3 + vinserti64x4 $0x01, 224(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%r8), %ymm4 + vinserti64x4 $0x01, 192(%r8), %zmm4, %zmm4 + vmovdqu 160(%r8), %ymm5 + vinserti64x4 $0x01, 224(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%rbp), %ymm10 + vinserti64x4 $0x01, 192(%rbp), %zmm10, %zmm10 + vmovdqu 160(%rbp), %ymm11 + vinserti64x4 $0x01, 224(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 128(%rdx), %ymm6 + vinserti64x4 $0x01, 192(%rdx), %zmm6, %zmm6 + vmovdqu 160(%rdx), %ymm7 + vinserti64x4 $0x01, 224(%rdx), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 128(%rdx) + vextracti64x4 $0x01, %zmm0, 192(%rdx) + vmovdqu %ymm1, 160(%rdx) + vextracti64x4 $0x01, %zmm1, 224(%rdx) + vmovdqu 256(%rdi), %ymm2 + vinserti64x4 $0x01, 320(%rdi), %zmm2, %zmm2 + vmovdqu 288(%rdi), %ymm3 + vinserti64x4 $0x01, 352(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%r8), %ymm4 + vinserti64x4 $0x01, 320(%r8), %zmm4, %zmm4 + vmovdqu 288(%r8), %ymm5 + vinserti64x4 $0x01, 352(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%rbp), %ymm10 + vinserti64x4 $0x01, 320(%rbp), %zmm10, %zmm10 + vmovdqu 288(%rbp), %ymm11 + vinserti64x4 $0x01, 352(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 256(%rdx), %ymm6 + vinserti64x4 $0x01, 320(%rdx), %zmm6, %zmm6 + vmovdqu 288(%rdx), %ymm7 + vinserti64x4 $0x01, 352(%rdx), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 256(%rdx) + vextracti64x4 $0x01, %zmm0, 320(%rdx) + vmovdqu %ymm1, 288(%rdx) + vextracti64x4 $0x01, %zmm1, 352(%rdx) + vmovdqu 384(%rdi), %ymm2 + vinserti64x4 $0x01, 448(%rdi), %zmm2, %zmm2 + vmovdqu 416(%rdi), %ymm3 + vinserti64x4 $0x01, 480(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%r8), %ymm4 + vinserti64x4 $0x01, 448(%r8), %zmm4, %zmm4 + vmovdqu 416(%r8), %ymm5 + vinserti64x4 $0x01, 480(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%rbp), %ymm10 + vinserti64x4 $0x01, 448(%rbp), %zmm10, %zmm10 + vmovdqu 416(%rbp), %ymm11 + vinserti64x4 $0x01, 480(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 384(%rdx), %ymm6 + vinserti64x4 $0x01, 448(%rdx), %zmm6, %zmm6 + vmovdqu 416(%rdx), %ymm7 + vinserti64x4 $0x01, 480(%rdx), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 384(%rdx) + vextracti64x4 $0x01, %zmm0, 448(%rdx) + vmovdqu %ymm1, 416(%rdx) + vextracti64x4 $0x01, %zmm1, 480(%rdx) + addq $0x200, %rdi + addq $0x200, %r8 + subq $0x01, %r13 + jg L_pointwise_acc_mont_start_encap_v_avx512 +L_pointwise_acc_mont_end_encap_v_avx512: + leaq L_mlkem_avx512_zetas_basemul(%rip), %rbp + vmovdqu (%rdi), %ymm2 + vinserti64x4 $0x01, 64(%rdi), %zmm2, %zmm2 + vmovdqu 32(%rdi), %ymm3 + vinserti64x4 $0x01, 96(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%r8), %ymm4 + vinserti64x4 $0x01, 64(%r8), %zmm4, %zmm4 + vmovdqu 32(%r8), %ymm5 + vinserti64x4 $0x01, 96(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%rbp), %ymm10 + vinserti64x4 $0x01, 64(%rbp), %zmm10, %zmm10 + vmovdqu 32(%rbp), %ymm11 + vinserti64x4 $0x01, 96(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu (%rdx), %ymm6 + vinserti64x4 $0x01, 64(%rdx), %zmm6, %zmm6 + vmovdqu 32(%rdx), %ymm7 + vinserti64x4 $0x01, 96(%rdx), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, (%rdx) + vextracti64x4 $0x01, %zmm0, 64(%rdx) + vmovdqu %ymm1, 32(%rdx) + vextracti64x4 $0x01, %zmm1, 96(%rdx) + vmovdqu 128(%rdi), %ymm2 + vinserti64x4 $0x01, 192(%rdi), %zmm2, %zmm2 + vmovdqu 160(%rdi), %ymm3 + vinserti64x4 $0x01, 224(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%r8), %ymm4 + vinserti64x4 $0x01, 192(%r8), %zmm4, %zmm4 + vmovdqu 160(%r8), %ymm5 + vinserti64x4 $0x01, 224(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%rbp), %ymm10 + vinserti64x4 $0x01, 192(%rbp), %zmm10, %zmm10 + vmovdqu 160(%rbp), %ymm11 + vinserti64x4 $0x01, 224(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 128(%rdx), %ymm6 + vinserti64x4 $0x01, 192(%rdx), %zmm6, %zmm6 + vmovdqu 160(%rdx), %ymm7 + vinserti64x4 $0x01, 224(%rdx), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 128(%rdx) + vextracti64x4 $0x01, %zmm0, 192(%rdx) + vmovdqu %ymm1, 160(%rdx) + vextracti64x4 $0x01, %zmm1, 224(%rdx) + vmovdqu 256(%rdi), %ymm2 + vinserti64x4 $0x01, 320(%rdi), %zmm2, %zmm2 + vmovdqu 288(%rdi), %ymm3 + vinserti64x4 $0x01, 352(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%r8), %ymm4 + vinserti64x4 $0x01, 320(%r8), %zmm4, %zmm4 + vmovdqu 288(%r8), %ymm5 + vinserti64x4 $0x01, 352(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%rbp), %ymm10 + vinserti64x4 $0x01, 320(%rbp), %zmm10, %zmm10 + vmovdqu 288(%rbp), %ymm11 + vinserti64x4 $0x01, 352(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 256(%rdx), %ymm6 + vinserti64x4 $0x01, 320(%rdx), %zmm6, %zmm6 + vmovdqu 288(%rdx), %ymm7 + vinserti64x4 $0x01, 352(%rdx), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 256(%rdx) + vextracti64x4 $0x01, %zmm0, 320(%rdx) + vmovdqu %ymm1, 288(%rdx) + vextracti64x4 $0x01, %zmm1, 352(%rdx) + vmovdqu 384(%rdi), %ymm2 + vinserti64x4 $0x01, 448(%rdi), %zmm2, %zmm2 + vmovdqu 416(%rdi), %ymm3 + vinserti64x4 $0x01, 480(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%r8), %ymm4 + vinserti64x4 $0x01, 448(%r8), %zmm4, %zmm4 + vmovdqu 416(%r8), %ymm5 + vinserti64x4 $0x01, 480(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%rbp), %ymm10 + vinserti64x4 $0x01, 448(%rbp), %zmm10, %zmm10 + vmovdqu 416(%rbp), %ymm11 + vinserti64x4 $0x01, 480(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 384(%rdx), %ymm6 + vinserti64x4 $0x01, 448(%rdx), %zmm6, %zmm6 + vmovdqu 416(%rdx), %ymm7 + vinserti64x4 $0x01, 480(%rdx), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 384(%rdx) + vextracti64x4 $0x01, %zmm0, 448(%rdx) + vmovdqu %ymm1, 416(%rdx) + vextracti64x4 $0x01, %zmm1, 480(%rdx) + addq $0x200, %rdi + movq %rbx, %r8 + cmpq $0x01, %r12 + jne L_encap_avx512_vp_single + movslq %r11d, %r13 + leaq L_mlkem_avx512_zetas_basemul(%rip), %rbp + vmovdqu (%rcx), %ymm2 + vinserti64x4 $0x01, 64(%rcx), %zmm2, %zmm2 + vmovdqu 32(%rcx), %ymm3 + vinserti64x4 $0x01, 96(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%r8), %ymm4 + vinserti64x4 $0x01, 64(%r8), %zmm4, %zmm4 + vmovdqu 32(%r8), %ymm5 + vinserti64x4 $0x01, 96(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%rbp), %ymm10 + vinserti64x4 $0x01, 64(%rbp), %zmm10, %zmm10 + vmovdqu 32(%rbp), %ymm11 + vinserti64x4 $0x01, 96(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, (%rsi) + vextracti64x4 $0x01, %zmm0, 64(%rsi) + vmovdqu %ymm1, 32(%rsi) + vextracti64x4 $0x01, %zmm1, 96(%rsi) + vmovdqu 128(%rcx), %ymm2 + vinserti64x4 $0x01, 192(%rcx), %zmm2, %zmm2 + vmovdqu 160(%rcx), %ymm3 + vinserti64x4 $0x01, 224(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%r8), %ymm4 + vinserti64x4 $0x01, 192(%r8), %zmm4, %zmm4 + vmovdqu 160(%r8), %ymm5 + vinserti64x4 $0x01, 224(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%rbp), %ymm10 + vinserti64x4 $0x01, 192(%rbp), %zmm10, %zmm10 + vmovdqu 160(%rbp), %ymm11 + vinserti64x4 $0x01, 224(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 128(%rsi) + vextracti64x4 $0x01, %zmm0, 192(%rsi) + vmovdqu %ymm1, 160(%rsi) + vextracti64x4 $0x01, %zmm1, 224(%rsi) + vmovdqu 256(%rcx), %ymm2 + vinserti64x4 $0x01, 320(%rcx), %zmm2, %zmm2 + vmovdqu 288(%rcx), %ymm3 + vinserti64x4 $0x01, 352(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%r8), %ymm4 + vinserti64x4 $0x01, 320(%r8), %zmm4, %zmm4 + vmovdqu 288(%r8), %ymm5 + vinserti64x4 $0x01, 352(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%rbp), %ymm10 + vinserti64x4 $0x01, 320(%rbp), %zmm10, %zmm10 + vmovdqu 288(%rbp), %ymm11 + vinserti64x4 $0x01, 352(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 256(%rsi) + vextracti64x4 $0x01, %zmm0, 320(%rsi) + vmovdqu %ymm1, 288(%rsi) + vextracti64x4 $0x01, %zmm1, 352(%rsi) + vmovdqu 384(%rcx), %ymm2 + vinserti64x4 $0x01, 448(%rcx), %zmm2, %zmm2 + vmovdqu 416(%rcx), %ymm3 + vinserti64x4 $0x01, 480(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%r8), %ymm4 + vinserti64x4 $0x01, 448(%r8), %zmm4, %zmm4 + vmovdqu 416(%r8), %ymm5 + vinserti64x4 $0x01, 480(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%rbp), %ymm10 + vinserti64x4 $0x01, 448(%rbp), %zmm10, %zmm10 + vmovdqu 416(%rbp), %ymm11 + vinserti64x4 $0x01, 480(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 384(%rsi) + vextracti64x4 $0x01, %zmm0, 448(%rsi) + vmovdqu %ymm1, 416(%rsi) + vextracti64x4 $0x01, %zmm1, 480(%rsi) + addq $0x200, %rcx + addq $0x200, %r8 + subq $2, %r13 + jz L_pointwise_acc_mont_end_encap_bp_odd_avx512 +L_pointwise_acc_mont_start_encap_bp_odd_avx512: + leaq L_mlkem_avx512_zetas_basemul(%rip), %rbp + vmovdqu (%rcx), %ymm2 + vinserti64x4 $0x01, 64(%rcx), %zmm2, %zmm2 + vmovdqu 32(%rcx), %ymm3 + vinserti64x4 $0x01, 96(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%r8), %ymm4 + vinserti64x4 $0x01, 64(%r8), %zmm4, %zmm4 + vmovdqu 32(%r8), %ymm5 + vinserti64x4 $0x01, 96(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%rbp), %ymm10 + vinserti64x4 $0x01, 64(%rbp), %zmm10, %zmm10 + vmovdqu 32(%rbp), %ymm11 + vinserti64x4 $0x01, 96(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu (%rsi), %ymm6 + vinserti64x4 $0x01, 64(%rsi), %zmm6, %zmm6 + vmovdqu 32(%rsi), %ymm7 + vinserti64x4 $0x01, 96(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, (%rsi) + vextracti64x4 $0x01, %zmm0, 64(%rsi) + vmovdqu %ymm1, 32(%rsi) + vextracti64x4 $0x01, %zmm1, 96(%rsi) + vmovdqu 128(%rcx), %ymm2 + vinserti64x4 $0x01, 192(%rcx), %zmm2, %zmm2 + vmovdqu 160(%rcx), %ymm3 + vinserti64x4 $0x01, 224(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%r8), %ymm4 + vinserti64x4 $0x01, 192(%r8), %zmm4, %zmm4 + vmovdqu 160(%r8), %ymm5 + vinserti64x4 $0x01, 224(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%rbp), %ymm10 + vinserti64x4 $0x01, 192(%rbp), %zmm10, %zmm10 + vmovdqu 160(%rbp), %ymm11 + vinserti64x4 $0x01, 224(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 128(%rsi), %ymm6 + vinserti64x4 $0x01, 192(%rsi), %zmm6, %zmm6 + vmovdqu 160(%rsi), %ymm7 + vinserti64x4 $0x01, 224(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 128(%rsi) + vextracti64x4 $0x01, %zmm0, 192(%rsi) + vmovdqu %ymm1, 160(%rsi) + vextracti64x4 $0x01, %zmm1, 224(%rsi) + vmovdqu 256(%rcx), %ymm2 + vinserti64x4 $0x01, 320(%rcx), %zmm2, %zmm2 + vmovdqu 288(%rcx), %ymm3 + vinserti64x4 $0x01, 352(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%r8), %ymm4 + vinserti64x4 $0x01, 320(%r8), %zmm4, %zmm4 + vmovdqu 288(%r8), %ymm5 + vinserti64x4 $0x01, 352(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%rbp), %ymm10 + vinserti64x4 $0x01, 320(%rbp), %zmm10, %zmm10 + vmovdqu 288(%rbp), %ymm11 + vinserti64x4 $0x01, 352(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 256(%rsi), %ymm6 + vinserti64x4 $0x01, 320(%rsi), %zmm6, %zmm6 + vmovdqu 288(%rsi), %ymm7 + vinserti64x4 $0x01, 352(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 256(%rsi) + vextracti64x4 $0x01, %zmm0, 320(%rsi) + vmovdqu %ymm1, 288(%rsi) + vextracti64x4 $0x01, %zmm1, 352(%rsi) + vmovdqu 384(%rcx), %ymm2 + vinserti64x4 $0x01, 448(%rcx), %zmm2, %zmm2 + vmovdqu 416(%rcx), %ymm3 + vinserti64x4 $0x01, 480(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%r8), %ymm4 + vinserti64x4 $0x01, 448(%r8), %zmm4, %zmm4 + vmovdqu 416(%r8), %ymm5 + vinserti64x4 $0x01, 480(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%rbp), %ymm10 + vinserti64x4 $0x01, 448(%rbp), %zmm10, %zmm10 + vmovdqu 416(%rbp), %ymm11 + vinserti64x4 $0x01, 480(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 384(%rsi), %ymm6 + vinserti64x4 $0x01, 448(%rsi), %zmm6, %zmm6 + vmovdqu 416(%rsi), %ymm7 + vinserti64x4 $0x01, 480(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 384(%rsi) + vextracti64x4 $0x01, %zmm0, 448(%rsi) + vmovdqu %ymm1, 416(%rsi) + vextracti64x4 $0x01, %zmm1, 480(%rsi) + addq $0x200, %rcx + addq $0x200, %r8 + subq $0x01, %r13 + jg L_pointwise_acc_mont_start_encap_bp_odd_avx512 +L_pointwise_acc_mont_end_encap_bp_odd_avx512: + leaq L_mlkem_avx512_zetas_basemul(%rip), %rbp + vmovdqu (%rcx), %ymm2 + vinserti64x4 $0x01, 64(%rcx), %zmm2, %zmm2 + vmovdqu 32(%rcx), %ymm3 + vinserti64x4 $0x01, 96(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%r8), %ymm4 + vinserti64x4 $0x01, 64(%r8), %zmm4, %zmm4 + vmovdqu 32(%r8), %ymm5 + vinserti64x4 $0x01, 96(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%rbp), %ymm10 + vinserti64x4 $0x01, 64(%rbp), %zmm10, %zmm10 + vmovdqu 32(%rbp), %ymm11 + vinserti64x4 $0x01, 96(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu (%rsi), %ymm6 + vinserti64x4 $0x01, 64(%rsi), %zmm6, %zmm6 + vmovdqu 32(%rsi), %ymm7 + vinserti64x4 $0x01, 96(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, (%rsi) + vextracti64x4 $0x01, %zmm0, 64(%rsi) + vmovdqu %ymm1, 32(%rsi) + vextracti64x4 $0x01, %zmm1, 96(%rsi) + vmovdqu 128(%rcx), %ymm2 + vinserti64x4 $0x01, 192(%rcx), %zmm2, %zmm2 + vmovdqu 160(%rcx), %ymm3 + vinserti64x4 $0x01, 224(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%r8), %ymm4 + vinserti64x4 $0x01, 192(%r8), %zmm4, %zmm4 + vmovdqu 160(%r8), %ymm5 + vinserti64x4 $0x01, 224(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%rbp), %ymm10 + vinserti64x4 $0x01, 192(%rbp), %zmm10, %zmm10 + vmovdqu 160(%rbp), %ymm11 + vinserti64x4 $0x01, 224(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 128(%rsi), %ymm6 + vinserti64x4 $0x01, 192(%rsi), %zmm6, %zmm6 + vmovdqu 160(%rsi), %ymm7 + vinserti64x4 $0x01, 224(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 128(%rsi) + vextracti64x4 $0x01, %zmm0, 192(%rsi) + vmovdqu %ymm1, 160(%rsi) + vextracti64x4 $0x01, %zmm1, 224(%rsi) + vmovdqu 256(%rcx), %ymm2 + vinserti64x4 $0x01, 320(%rcx), %zmm2, %zmm2 + vmovdqu 288(%rcx), %ymm3 + vinserti64x4 $0x01, 352(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%r8), %ymm4 + vinserti64x4 $0x01, 320(%r8), %zmm4, %zmm4 + vmovdqu 288(%r8), %ymm5 + vinserti64x4 $0x01, 352(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%rbp), %ymm10 + vinserti64x4 $0x01, 320(%rbp), %zmm10, %zmm10 + vmovdqu 288(%rbp), %ymm11 + vinserti64x4 $0x01, 352(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 256(%rsi), %ymm6 + vinserti64x4 $0x01, 320(%rsi), %zmm6, %zmm6 + vmovdqu 288(%rsi), %ymm7 + vinserti64x4 $0x01, 352(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 256(%rsi) + vextracti64x4 $0x01, %zmm0, 320(%rsi) + vmovdqu %ymm1, 288(%rsi) + vextracti64x4 $0x01, %zmm1, 352(%rsi) + vmovdqu 384(%rcx), %ymm2 + vinserti64x4 $0x01, 448(%rcx), %zmm2, %zmm2 + vmovdqu 416(%rcx), %ymm3 + vinserti64x4 $0x01, 480(%rcx), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%r8), %ymm4 + vinserti64x4 $0x01, 448(%r8), %zmm4, %zmm4 + vmovdqu 416(%r8), %ymm5 + vinserti64x4 $0x01, 480(%r8), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%rbp), %ymm10 + vinserti64x4 $0x01, 448(%rbp), %zmm10, %zmm10 + vmovdqu 416(%rbp), %ymm11 + vinserti64x4 $0x01, 480(%rbp), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 384(%rsi), %ymm6 + vinserti64x4 $0x01, 448(%rsi), %zmm6, %zmm6 + vmovdqu 416(%rsi), %ymm7 + vinserti64x4 $0x01, 480(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 384(%rsi) + vextracti64x4 $0x01, %zmm0, 448(%rsi) + vmovdqu %ymm1, 416(%rsi) + vextracti64x4 $0x01, %zmm1, 480(%rsi) + addq $0x200, %rcx + movq %rbx, %r8 + leaq L_mlkem_avx512_zetas_inv(%rip), %rbp + vmovdqu64 (%rdx), %ymm0 + vinserti64x4 $0x01, (%rsi), %zmm0, %zmm0 + vmovdqu64 32(%rdx), %ymm1 + vinserti64x4 $0x01, 32(%rsi), %zmm1, %zmm1 + vmovdqu64 64(%rdx), %ymm2 + vinserti64x4 $0x01, 64(%rsi), %zmm2, %zmm2 + vmovdqu64 96(%rdx), %ymm3 + vinserti64x4 $0x01, 96(%rsi), %zmm3, %zmm3 + vmovdqu64 128(%rdx), %ymm4 + vinserti64x4 $0x01, 128(%rsi), %zmm4, %zmm4 + vmovdqu64 160(%rdx), %ymm5 + vinserti64x4 $0x01, 160(%rsi), %zmm5, %zmm5 + vmovdqu64 192(%rdx), %ymm6 + vinserti64x4 $0x01, 192(%rsi), %zmm6, %zmm6 + vmovdqu64 224(%rdx), %ymm7 + vinserti64x4 $0x01, 224(%rsi), %zmm7, %zmm7 + vmovdqu64 256(%rdx), %ymm19 + vinserti64x4 $0x01, 256(%rsi), %zmm19, %zmm19 + vmovdqu64 288(%rdx), %ymm20 + vinserti64x4 $0x01, 288(%rsi), %zmm20, %zmm20 + vmovdqu64 320(%rdx), %ymm21 + vinserti64x4 $0x01, 320(%rsi), %zmm21, %zmm21 + vmovdqu64 352(%rdx), %ymm22 + vinserti64x4 $0x01, 352(%rsi), %zmm22, %zmm22 + vmovdqu64 384(%rdx), %ymm23 + vinserti64x4 $0x01, 384(%rsi), %zmm23, %zmm23 + vmovdqu64 416(%rdx), %ymm24 + vinserti64x4 $0x01, 416(%rsi), %zmm24, %zmm24 + vmovdqu64 448(%rdx), %ymm25 + vinserti64x4 $0x01, 448(%rsi), %zmm25, %zmm25 + vmovdqu64 480(%rdx), %ymm26 + vinserti64x4 $0x01, 480(%rsi), %zmm26, %zmm26 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm1, %zmm0, %zmm8 + vbroadcasti64x4 (%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm1, %zmm0, %zmm9 + vbroadcasti64x4 32(%rbp), %zmm12 + vpsllq $32, %zmm9, %zmm0 + vpsrlq $32, %zmm8, %zmm1 + vpblendmd %zmm0, %zmm8, %zmm0{%k1} + vpblendmd %zmm1, %zmm9, %zmm1{%k2} + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm3, %zmm2, %zmm8 + vbroadcasti64x4 64(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm3, %zmm2, %zmm9 + vbroadcasti64x4 96(%rbp), %zmm13 + vpsllq $32, %zmm9, %zmm2 + vpsrlq $32, %zmm8, %zmm3 + vpblendmd %zmm2, %zmm8, %zmm2{%k1} + vpblendmd %zmm3, %zmm9, %zmm3{%k2} + vpaddw %zmm1, %zmm0, %zmm8 + vpaddw %zmm3, %zmm2, %zmm9 + vpsubw %zmm1, %zmm0, %zmm1 + vpsubw %zmm3, %zmm2, %zmm3 + vpmulhw %zmm15, %zmm8, %zmm0 + vpmulhw %zmm15, %zmm9, %zmm2 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm2, %zmm2 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm8, %zmm8 + vpsubw %zmm2, %zmm9, %zmm9 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm1 + vpsubw %zmm2, %zmm3, %zmm3 + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm20, %zmm19, %zmm27 + vbroadcasti64x4 1216(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm20, %zmm19, %zmm28 + vbroadcasti64x4 1248(%rbp), %zmm12 + vpsllq $32, %zmm28, %zmm19 + vpsrlq $32, %zmm27, %zmm20 + vpblendmd %zmm19, %zmm27, %zmm19{%k1} + vpblendmd %zmm20, %zmm28, %zmm20{%k2} + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm22, %zmm21, %zmm27 + vbroadcasti64x4 1280(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm22, %zmm21, %zmm28 + vbroadcasti64x4 1312(%rbp), %zmm13 + vpsllq $32, %zmm28, %zmm21 + vpsrlq $32, %zmm27, %zmm22 + vpblendmd %zmm21, %zmm27, %zmm21{%k1} + vpblendmd %zmm22, %zmm28, %zmm22{%k2} + vpaddw %zmm20, %zmm19, %zmm27 + vpaddw %zmm22, %zmm21, %zmm28 + vpsubw %zmm20, %zmm19, %zmm20 + vpsubw %zmm22, %zmm21, %zmm22 + vpmulhw %zmm15, %zmm27, %zmm19 + vpmulhw %zmm15, %zmm28, %zmm21 + vpsraw $10, %zmm19, %zmm19 + vpsraw $10, %zmm21, %zmm21 + vpmullw %zmm14, %zmm19, %zmm19 + vpmullw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm27, %zmm27 + vpsubw %zmm21, %zmm28, %zmm28 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm20 + vpsubw %zmm21, %zmm22, %zmm22 + vbroadcasti64x4 128(%rbp), %zmm10 + vbroadcasti64x4 160(%rbp), %zmm12 + vbroadcasti64x4 192(%rbp), %zmm11 + vbroadcasti64x4 224(%rbp), %zmm13 + vpunpckldq %zmm1, %zmm8, %zmm0 + vpunpckhdq %zmm1, %zmm8, %zmm1 + vpunpckldq %zmm3, %zmm9, %zmm2 + vpunpckhdq %zmm3, %zmm9, %zmm3 + vpaddw %zmm1, %zmm0, %zmm8 + vpaddw %zmm3, %zmm2, %zmm9 + vpsubw %zmm1, %zmm0, %zmm1 + vpsubw %zmm3, %zmm2, %zmm3 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm1 + vpsubw %zmm2, %zmm3, %zmm3 + vbroadcasti64x4 1344(%rbp), %zmm10 + vbroadcasti64x4 1376(%rbp), %zmm12 + vbroadcasti64x4 1408(%rbp), %zmm11 + vbroadcasti64x4 1440(%rbp), %zmm13 + vpunpckldq %zmm20, %zmm27, %zmm19 + vpunpckhdq %zmm20, %zmm27, %zmm20 + vpunpckldq %zmm22, %zmm28, %zmm21 + vpunpckhdq %zmm22, %zmm28, %zmm22 + vpaddw %zmm20, %zmm19, %zmm27 + vpaddw %zmm22, %zmm21, %zmm28 + vpsubw %zmm20, %zmm19, %zmm20 + vpsubw %zmm22, %zmm21, %zmm22 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm20 + vpsubw %zmm21, %zmm22, %zmm22 + vbroadcasti64x4 256(%rbp), %zmm10 + vbroadcasti64x4 288(%rbp), %zmm12 + vbroadcasti64x4 320(%rbp), %zmm11 + vbroadcasti64x4 352(%rbp), %zmm13 + vpunpcklqdq %zmm1, %zmm8, %zmm0 + vpunpckhqdq %zmm1, %zmm8, %zmm1 + vpunpcklqdq %zmm3, %zmm9, %zmm2 + vpunpckhqdq %zmm3, %zmm9, %zmm3 + vpaddw %zmm1, %zmm0, %zmm8 + vpaddw %zmm3, %zmm2, %zmm9 + vpsubw %zmm1, %zmm0, %zmm1 + vpsubw %zmm3, %zmm2, %zmm3 + vpmulhw %zmm15, %zmm8, %zmm0 + vpmulhw %zmm15, %zmm9, %zmm2 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm2, %zmm2 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm8, %zmm8 + vpsubw %zmm2, %zmm9, %zmm9 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm1 + vpsubw %zmm2, %zmm3, %zmm3 + vbroadcasti64x4 1472(%rbp), %zmm10 + vbroadcasti64x4 1504(%rbp), %zmm12 + vbroadcasti64x4 1536(%rbp), %zmm11 + vbroadcasti64x4 1568(%rbp), %zmm13 + vpunpcklqdq %zmm20, %zmm27, %zmm19 + vpunpckhqdq %zmm20, %zmm27, %zmm20 + vpunpcklqdq %zmm22, %zmm28, %zmm21 + vpunpckhqdq %zmm22, %zmm28, %zmm22 + vpaddw %zmm20, %zmm19, %zmm27 + vpaddw %zmm22, %zmm21, %zmm28 + vpsubw %zmm20, %zmm19, %zmm20 + vpsubw %zmm22, %zmm21, %zmm22 + vpmulhw %zmm15, %zmm27, %zmm19 + vpmulhw %zmm15, %zmm28, %zmm21 + vpsraw $10, %zmm19, %zmm19 + vpsraw $10, %zmm21, %zmm21 + vpmullw %zmm14, %zmm19, %zmm19 + vpmullw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm27, %zmm27 + vpsubw %zmm21, %zmm28, %zmm28 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm20 + vpsubw %zmm21, %zmm22, %zmm22 + vmovdqa64 %zmm17, %zmm0 + vpermi2q %zmm1, %zmm8, %zmm0 + vbroadcasti64x4 384(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm1, %zmm8, %zmm16 + vmovdqa64 %zmm16, %zmm1 + vbroadcasti64x4 416(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm2 + vpermi2q %zmm3, %zmm9, %zmm2 + vbroadcasti64x4 448(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm3, %zmm9, %zmm16 + vmovdqa64 %zmm16, %zmm3 + vbroadcasti64x4 480(%rbp), %zmm13 + vpsubw %zmm1, %zmm0, %zmm8 + vpsubw %zmm3, %zmm2, %zmm9 + vpaddw %zmm1, %zmm0, %zmm0 + vpaddw %zmm3, %zmm2, %zmm2 + vpmullw %zmm12, %zmm8, %zmm1 + vpmullw %zmm13, %zmm9, %zmm3 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm11, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm1, %zmm1 + vpmulhw %zmm14, %zmm3, %zmm3 + vpsubw %zmm1, %zmm8, %zmm1 + vpsubw %zmm3, %zmm9, %zmm3 + vmovdqa64 %zmm17, %zmm19 + vpermi2q %zmm20, %zmm27, %zmm19 + vbroadcasti64x4 1600(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm20, %zmm27, %zmm16 + vmovdqa64 %zmm16, %zmm20 + vbroadcasti64x4 1632(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm21 + vpermi2q %zmm22, %zmm28, %zmm21 + vbroadcasti64x4 1664(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm22, %zmm28, %zmm16 + vmovdqa64 %zmm16, %zmm22 + vbroadcasti64x4 1696(%rbp), %zmm13 + vpsubw %zmm20, %zmm19, %zmm27 + vpsubw %zmm22, %zmm21, %zmm28 + vpaddw %zmm20, %zmm19, %zmm19 + vpaddw %zmm22, %zmm21, %zmm21 + vpmullw %zmm12, %zmm27, %zmm20 + vpmullw %zmm13, %zmm28, %zmm22 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm11, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm22, %zmm22 + vpsubw %zmm20, %zmm27, %zmm20 + vpsubw %zmm22, %zmm28, %zmm22 + vbroadcasti64x4 512(%rbp), %zmm10 + vbroadcasti64x4 544(%rbp), %zmm12 + vpaddw %zmm2, %zmm0, %zmm8 + vpaddw %zmm3, %zmm1, %zmm9 + vpsubw %zmm2, %zmm0, %zmm2 + vpsubw %zmm3, %zmm1, %zmm3 + vpmulhw %zmm15, %zmm8, %zmm0 + vpmulhw %zmm15, %zmm9, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm8, %zmm0 + vpsubw %zmm1, %zmm9, %zmm1 + vpmullw %zmm12, %zmm2, %zmm8 + vpmullw %zmm12, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm2, %zmm2 + vpmulhw %zmm10, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm2 + vpsubw %zmm9, %zmm3, %zmm3 + vbroadcasti64x4 1728(%rbp), %zmm10 + vbroadcasti64x4 1760(%rbp), %zmm12 + vpaddw %zmm21, %zmm19, %zmm27 + vpaddw %zmm22, %zmm20, %zmm28 + vpsubw %zmm21, %zmm19, %zmm21 + vpsubw %zmm22, %zmm20, %zmm22 + vpmulhw %zmm15, %zmm27, %zmm19 + vpmulhw %zmm15, %zmm28, %zmm20 + vpsraw $10, %zmm19, %zmm19 + vpsraw $10, %zmm20, %zmm20 + vpmullw %zmm14, %zmm19, %zmm19 + vpmullw %zmm14, %zmm20, %zmm20 + vpsubw %zmm19, %zmm27, %zmm19 + vpsubw %zmm20, %zmm28, %zmm20 + vpmullw %zmm12, %zmm21, %zmm27 + vpmullw %zmm12, %zmm22, %zmm28 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm27, %zmm27 + vpmulhw %zmm14, %zmm28, %zmm28 + vpsubw %zmm27, %zmm21, %zmm21 + vpsubw %zmm28, %zmm22, %zmm22 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm5, %zmm4, %zmm8 + vbroadcasti64x4 576(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm5, %zmm4, %zmm9 + vbroadcasti64x4 608(%rbp), %zmm12 + vpsllq $32, %zmm9, %zmm4 + vpsrlq $32, %zmm8, %zmm5 + vpblendmd %zmm4, %zmm8, %zmm4{%k1} + vpblendmd %zmm5, %zmm9, %zmm5{%k2} + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm7, %zmm6, %zmm8 + vbroadcasti64x4 640(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm7, %zmm6, %zmm9 + vbroadcasti64x4 672(%rbp), %zmm13 + vpsllq $32, %zmm9, %zmm6 + vpsrlq $32, %zmm8, %zmm7 + vpblendmd %zmm6, %zmm8, %zmm6{%k1} + vpblendmd %zmm7, %zmm9, %zmm7{%k2} + vpaddw %zmm5, %zmm4, %zmm8 + vpaddw %zmm7, %zmm6, %zmm9 + vpsubw %zmm5, %zmm4, %zmm5 + vpsubw %zmm7, %zmm6, %zmm7 + vpmulhw %zmm15, %zmm8, %zmm4 + vpmulhw %zmm15, %zmm9, %zmm6 + vpsraw $10, %zmm4, %zmm4 + vpsraw $10, %zmm6, %zmm6 + vpmullw %zmm14, %zmm4, %zmm4 + vpmullw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm8, %zmm8 + vpsubw %zmm6, %zmm9, %zmm9 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm5 + vpsubw %zmm6, %zmm7, %zmm7 + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm24, %zmm23, %zmm27 + vbroadcasti64x4 1792(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm24, %zmm23, %zmm28 + vbroadcasti64x4 1824(%rbp), %zmm12 + vpsllq $32, %zmm28, %zmm23 + vpsrlq $32, %zmm27, %zmm24 + vpblendmd %zmm23, %zmm27, %zmm23{%k1} + vpblendmd %zmm24, %zmm28, %zmm24{%k2} + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm26, %zmm25, %zmm27 + vbroadcasti64x4 1856(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm26, %zmm25, %zmm28 + vbroadcasti64x4 1888(%rbp), %zmm13 + vpsllq $32, %zmm28, %zmm25 + vpsrlq $32, %zmm27, %zmm26 + vpblendmd %zmm25, %zmm27, %zmm25{%k1} + vpblendmd %zmm26, %zmm28, %zmm26{%k2} + vpaddw %zmm24, %zmm23, %zmm27 + vpaddw %zmm26, %zmm25, %zmm28 + vpsubw %zmm24, %zmm23, %zmm24 + vpsubw %zmm26, %zmm25, %zmm26 + vpmulhw %zmm15, %zmm27, %zmm23 + vpmulhw %zmm15, %zmm28, %zmm25 + vpsraw $10, %zmm23, %zmm23 + vpsraw $10, %zmm25, %zmm25 + vpmullw %zmm14, %zmm23, %zmm23 + vpmullw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm27, %zmm27 + vpsubw %zmm25, %zmm28, %zmm28 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm24 + vpsubw %zmm25, %zmm26, %zmm26 + vbroadcasti64x4 704(%rbp), %zmm10 + vbroadcasti64x4 736(%rbp), %zmm12 + vbroadcasti64x4 768(%rbp), %zmm11 + vbroadcasti64x4 800(%rbp), %zmm13 + vpunpckldq %zmm5, %zmm8, %zmm4 + vpunpckhdq %zmm5, %zmm8, %zmm5 + vpunpckldq %zmm7, %zmm9, %zmm6 + vpunpckhdq %zmm7, %zmm9, %zmm7 + vpaddw %zmm5, %zmm4, %zmm8 + vpaddw %zmm7, %zmm6, %zmm9 + vpsubw %zmm5, %zmm4, %zmm5 + vpsubw %zmm7, %zmm6, %zmm7 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm5 + vpsubw %zmm6, %zmm7, %zmm7 + vbroadcasti64x4 1920(%rbp), %zmm10 + vbroadcasti64x4 1952(%rbp), %zmm12 + vbroadcasti64x4 1984(%rbp), %zmm11 + vbroadcasti64x4 2016(%rbp), %zmm13 + vpunpckldq %zmm24, %zmm27, %zmm23 + vpunpckhdq %zmm24, %zmm27, %zmm24 + vpunpckldq %zmm26, %zmm28, %zmm25 + vpunpckhdq %zmm26, %zmm28, %zmm26 + vpaddw %zmm24, %zmm23, %zmm27 + vpaddw %zmm26, %zmm25, %zmm28 + vpsubw %zmm24, %zmm23, %zmm24 + vpsubw %zmm26, %zmm25, %zmm26 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm24 + vpsubw %zmm25, %zmm26, %zmm26 + vbroadcasti64x4 832(%rbp), %zmm10 + vbroadcasti64x4 864(%rbp), %zmm12 + vbroadcasti64x4 896(%rbp), %zmm11 + vbroadcasti64x4 928(%rbp), %zmm13 + vpunpcklqdq %zmm5, %zmm8, %zmm4 + vpunpckhqdq %zmm5, %zmm8, %zmm5 + vpunpcklqdq %zmm7, %zmm9, %zmm6 + vpunpckhqdq %zmm7, %zmm9, %zmm7 + vpaddw %zmm5, %zmm4, %zmm8 + vpaddw %zmm7, %zmm6, %zmm9 + vpsubw %zmm5, %zmm4, %zmm5 + vpsubw %zmm7, %zmm6, %zmm7 + vpmulhw %zmm15, %zmm8, %zmm4 + vpmulhw %zmm15, %zmm9, %zmm6 + vpsraw $10, %zmm4, %zmm4 + vpsraw $10, %zmm6, %zmm6 + vpmullw %zmm14, %zmm4, %zmm4 + vpmullw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm8, %zmm8 + vpsubw %zmm6, %zmm9, %zmm9 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm5 + vpsubw %zmm6, %zmm7, %zmm7 + vbroadcasti64x4 2048(%rbp), %zmm10 + vbroadcasti64x4 2080(%rbp), %zmm12 + vbroadcasti64x4 2112(%rbp), %zmm11 + vbroadcasti64x4 2144(%rbp), %zmm13 + vpunpcklqdq %zmm24, %zmm27, %zmm23 + vpunpckhqdq %zmm24, %zmm27, %zmm24 + vpunpcklqdq %zmm26, %zmm28, %zmm25 + vpunpckhqdq %zmm26, %zmm28, %zmm26 + vpaddw %zmm24, %zmm23, %zmm27 + vpaddw %zmm26, %zmm25, %zmm28 + vpsubw %zmm24, %zmm23, %zmm24 + vpsubw %zmm26, %zmm25, %zmm26 + vpmulhw %zmm15, %zmm27, %zmm23 + vpmulhw %zmm15, %zmm28, %zmm25 + vpsraw $10, %zmm23, %zmm23 + vpsraw $10, %zmm25, %zmm25 + vpmullw %zmm14, %zmm23, %zmm23 + vpmullw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm27, %zmm27 + vpsubw %zmm25, %zmm28, %zmm28 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm24 + vpsubw %zmm25, %zmm26, %zmm26 + vmovdqa64 %zmm17, %zmm4 + vpermi2q %zmm5, %zmm8, %zmm4 + vbroadcasti64x4 960(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm5, %zmm8, %zmm16 + vmovdqa64 %zmm16, %zmm5 + vbroadcasti64x4 992(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm6 + vpermi2q %zmm7, %zmm9, %zmm6 + vbroadcasti64x4 1024(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm7, %zmm9, %zmm16 + vmovdqa64 %zmm16, %zmm7 + vbroadcasti64x4 1056(%rbp), %zmm13 + vpsubw %zmm5, %zmm4, %zmm8 + vpsubw %zmm7, %zmm6, %zmm9 + vpaddw %zmm5, %zmm4, %zmm4 + vpaddw %zmm7, %zmm6, %zmm6 + vpmullw %zmm12, %zmm8, %zmm5 + vpmullw %zmm13, %zmm9, %zmm7 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm11, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm7, %zmm7 + vpsubw %zmm5, %zmm8, %zmm5 + vpsubw %zmm7, %zmm9, %zmm7 + vmovdqa64 %zmm17, %zmm23 + vpermi2q %zmm24, %zmm27, %zmm23 + vbroadcasti64x4 2176(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm24, %zmm27, %zmm16 + vmovdqa64 %zmm16, %zmm24 + vbroadcasti64x4 2208(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm25 + vpermi2q %zmm26, %zmm28, %zmm25 + vbroadcasti64x4 2240(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm26, %zmm28, %zmm16 + vmovdqa64 %zmm16, %zmm26 + vbroadcasti64x4 2272(%rbp), %zmm13 + vpsubw %zmm24, %zmm23, %zmm27 + vpsubw %zmm26, %zmm25, %zmm28 + vpaddw %zmm24, %zmm23, %zmm23 + vpaddw %zmm26, %zmm25, %zmm25 + vpmullw %zmm12, %zmm27, %zmm24 + vpmullw %zmm13, %zmm28, %zmm26 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm11, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm26, %zmm26 + vpsubw %zmm24, %zmm27, %zmm24 + vpsubw %zmm26, %zmm28, %zmm26 + vbroadcasti64x4 1088(%rbp), %zmm10 + vbroadcasti64x4 1120(%rbp), %zmm12 + vpaddw %zmm6, %zmm4, %zmm8 + vpaddw %zmm7, %zmm5, %zmm9 + vpsubw %zmm6, %zmm4, %zmm6 + vpsubw %zmm7, %zmm5, %zmm7 + vpmulhw %zmm15, %zmm8, %zmm4 + vpmulhw %zmm15, %zmm9, %zmm5 + vpsraw $10, %zmm4, %zmm4 + vpsraw $10, %zmm5, %zmm5 + vpmullw %zmm14, %zmm4, %zmm4 + vpmullw %zmm14, %zmm5, %zmm5 + vpsubw %zmm4, %zmm8, %zmm4 + vpsubw %zmm5, %zmm9, %zmm5 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm6 + vpsubw %zmm9, %zmm7, %zmm7 + vbroadcasti64x4 2304(%rbp), %zmm10 + vbroadcasti64x4 2336(%rbp), %zmm12 + vpaddw %zmm25, %zmm23, %zmm27 + vpaddw %zmm26, %zmm24, %zmm28 + vpsubw %zmm25, %zmm23, %zmm25 + vpsubw %zmm26, %zmm24, %zmm26 + vpmulhw %zmm15, %zmm27, %zmm23 + vpmulhw %zmm15, %zmm28, %zmm24 + vpsraw $10, %zmm23, %zmm23 + vpsraw $10, %zmm24, %zmm24 + vpmullw %zmm14, %zmm23, %zmm23 + vpmullw %zmm14, %zmm24, %zmm24 + vpsubw %zmm23, %zmm27, %zmm23 + vpsubw %zmm24, %zmm28, %zmm24 + vpmullw %zmm12, %zmm25, %zmm27 + vpmullw %zmm12, %zmm26, %zmm28 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm27, %zmm27 + vpmulhw %zmm14, %zmm28, %zmm28 + vpsubw %zmm27, %zmm25, %zmm25 + vpsubw %zmm28, %zmm26, %zmm26 + vbroadcasti64x4 1152(%rbp), %zmm10 + vbroadcasti64x4 1184(%rbp), %zmm12 + vpsubw %zmm4, %zmm0, %zmm8 + vpsubw %zmm5, %zmm1, %zmm9 + vpaddw %zmm4, %zmm0, %zmm0 + vpaddw %zmm5, %zmm1, %zmm1 + vpmullw %zmm12, %zmm8, %zmm4 + vpmullw %zmm12, %zmm9, %zmm5 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm5, %zmm5 + vpsubw %zmm4, %zmm8, %zmm4 + vpsubw %zmm5, %zmm9, %zmm5 + vpsubw %zmm6, %zmm2, %zmm8 + vpsubw %zmm7, %zmm3, %zmm9 + vpaddw %zmm6, %zmm2, %zmm2 + vpaddw %zmm7, %zmm3, %zmm3 + vpmullw %zmm12, %zmm8, %zmm6 + vpmullw %zmm12, %zmm9, %zmm7 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm6, %zmm6 + vpmulhw %zmm14, %zmm7, %zmm7 + vpsubw %zmm6, %zmm8, %zmm6 + vpsubw %zmm7, %zmm9, %zmm7 + vbroadcasti64x4 2368(%rbp), %zmm10 + vbroadcasti64x4 2400(%rbp), %zmm12 + vpsubw %zmm23, %zmm19, %zmm27 + vpsubw %zmm24, %zmm20, %zmm28 + vpaddw %zmm23, %zmm19, %zmm19 + vpaddw %zmm24, %zmm20, %zmm20 + vpmullw %zmm12, %zmm27, %zmm23 + vpmullw %zmm12, %zmm28, %zmm24 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm10, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm24, %zmm24 + vpsubw %zmm23, %zmm27, %zmm23 + vpsubw %zmm24, %zmm28, %zmm24 + vpsubw %zmm25, %zmm21, %zmm27 + vpsubw %zmm26, %zmm22, %zmm28 + vpaddw %zmm25, %zmm21, %zmm21 + vpaddw %zmm26, %zmm22, %zmm22 + vpmullw %zmm12, %zmm27, %zmm25 + vpmullw %zmm12, %zmm28, %zmm26 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm10, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm25, %zmm25 + vpmulhw %zmm14, %zmm26, %zmm26 + vpsubw %zmm25, %zmm27, %zmm25 + vpsubw %zmm26, %zmm28, %zmm26 + vbroadcasti64x4 2432(%rbp), %zmm10 + vbroadcasti64x4 2464(%rbp), %zmm12 + vbroadcasti64x4 2496(%rbp), %zmm11 + vbroadcasti64x4 2528(%rbp), %zmm13 + vpsubw %zmm19, %zmm0, %zmm8 + vpsubw %zmm20, %zmm1, %zmm9 + vpaddw %zmm19, %zmm0, %zmm0 + vpaddw %zmm20, %zmm1, %zmm1 + vpmullw %zmm12, %zmm8, %zmm19 + vpmullw %zmm12, %zmm9, %zmm20 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm20, %zmm20 + vpsubw %zmm19, %zmm8, %zmm19 + vpsubw %zmm20, %zmm9, %zmm20 + vpaddw %zmm21, %zmm2, %zmm8 + vpaddw %zmm22, %zmm3, %zmm9 + vpsubw %zmm21, %zmm2, %zmm21 + vpsubw %zmm22, %zmm3, %zmm22 + vpmulhw %zmm15, %zmm8, %zmm2 + vpmulhw %zmm15, %zmm9, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm8, %zmm2 + vpsubw %zmm3, %zmm9, %zmm3 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm21 + vpsubw %zmm9, %zmm22, %zmm22 + vpsubw %zmm23, %zmm4, %zmm8 + vpsubw %zmm24, %zmm5, %zmm9 + vpaddw %zmm23, %zmm4, %zmm4 + vpaddw %zmm24, %zmm5, %zmm5 + vpmullw %zmm12, %zmm8, %zmm23 + vpmullw %zmm12, %zmm9, %zmm24 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm24, %zmm24 + vpsubw %zmm23, %zmm8, %zmm23 + vpsubw %zmm24, %zmm9, %zmm24 + vpaddw %zmm25, %zmm6, %zmm8 + vpaddw %zmm26, %zmm7, %zmm9 + vpsubw %zmm25, %zmm6, %zmm25 + vpsubw %zmm26, %zmm7, %zmm26 + vpmulhw %zmm15, %zmm8, %zmm6 + vpmulhw %zmm15, %zmm9, %zmm7 + vpsraw $10, %zmm6, %zmm6 + vpsraw $10, %zmm7, %zmm7 + vpmullw %zmm14, %zmm6, %zmm6 + vpmullw %zmm14, %zmm7, %zmm7 + vpsubw %zmm6, %zmm8, %zmm6 + vpsubw %zmm7, %zmm9, %zmm7 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm25 + vpsubw %zmm9, %zmm26, %zmm26 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm11, %zmm0, %zmm0 + vpmulhw %zmm11, %zmm1, %zmm1 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm0, %zmm0 + vpsubw %zmm9, %zmm1, %zmm1 + vpmullw %zmm13, %zmm2, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm11, %zmm2, %zmm2 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm2 + vpsubw %zmm9, %zmm3, %zmm3 + vpmullw %zmm13, %zmm4, %zmm8 + vpmullw %zmm13, %zmm5, %zmm9 + vpmulhw %zmm11, %zmm4, %zmm4 + vpmulhw %zmm11, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm4 + vpsubw %zmm9, %zmm5, %zmm5 + vpmullw %zmm13, %zmm6, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm11, %zmm6, %zmm6 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm6 + vpsubw %zmm9, %zmm7, %zmm7 + vpmullw %zmm13, %zmm19, %zmm8 + vpmullw %zmm13, %zmm20, %zmm9 + vpmulhw %zmm11, %zmm19, %zmm19 + vpmulhw %zmm11, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm19 + vpsubw %zmm9, %zmm20, %zmm20 + vpmullw %zmm13, %zmm21, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm11, %zmm21, %zmm21 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm21 + vpsubw %zmm9, %zmm22, %zmm22 + vpmullw %zmm13, %zmm23, %zmm8 + vpmullw %zmm13, %zmm24, %zmm9 + vpmulhw %zmm11, %zmm23, %zmm23 + vpmulhw %zmm11, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm23 + vpsubw %zmm9, %zmm24, %zmm24 + vpmullw %zmm13, %zmm25, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm11, %zmm25, %zmm25 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm25 + vpsubw %zmm9, %zmm26, %zmm26 + vmovdqu64 %ymm0, (%rdx) + vextracti64x4 $0x01, %zmm0, (%rsi) + vmovdqu64 %ymm1, 32(%rdx) + vextracti64x4 $0x01, %zmm1, 32(%rsi) + vmovdqu64 %ymm2, 64(%rdx) + vextracti64x4 $0x01, %zmm2, 64(%rsi) + vmovdqu64 %ymm3, 96(%rdx) + vextracti64x4 $0x01, %zmm3, 96(%rsi) + vmovdqu64 %ymm4, 128(%rdx) + vextracti64x4 $0x01, %zmm4, 128(%rsi) + vmovdqu64 %ymm5, 160(%rdx) + vextracti64x4 $0x01, %zmm5, 160(%rsi) + vmovdqu64 %ymm6, 192(%rdx) + vextracti64x4 $0x01, %zmm6, 192(%rsi) + vmovdqu64 %ymm7, 224(%rdx) + vextracti64x4 $0x01, %zmm7, 224(%rsi) + vmovdqu64 %ymm19, 256(%rdx) + vextracti64x4 $0x01, %zmm19, 256(%rsi) + vmovdqu64 %ymm20, 288(%rdx) + vextracti64x4 $0x01, %zmm20, 288(%rsi) + vmovdqu64 %ymm21, 320(%rdx) + vextracti64x4 $0x01, %zmm21, 320(%rsi) + vmovdqu64 %ymm22, 352(%rdx) + vextracti64x4 $0x01, %zmm22, 352(%rsi) + vmovdqu64 %ymm23, 384(%rdx) + vextracti64x4 $0x01, %zmm23, 384(%rsi) + vmovdqu64 %ymm24, 416(%rdx) + vextracti64x4 $0x01, %zmm24, 416(%rsi) + vmovdqu64 %ymm25, 448(%rdx) + vextracti64x4 $0x01, %zmm25, 448(%rsi) + vmovdqu64 %ymm26, 480(%rdx) + vextracti64x4 $0x01, %zmm26, 480(%rsi) + vmovdqu64 (%r10), %zmm0 + vmovdqu64 64(%r10), %zmm1 + vmovdqu64 128(%r10), %zmm2 + vmovdqu64 192(%r10), %zmm3 + vmovdqu64 (%rax), %zmm4 + vmovdqu64 64(%rax), %zmm5 + vmovdqu64 128(%rax), %zmm6 + vmovdqu64 192(%rax), %zmm7 + vpaddw %zmm0, %zmm4, %zmm4 + vpaddw %zmm1, %zmm5, %zmm5 + vpaddw %zmm2, %zmm6, %zmm6 + vpaddw %zmm3, %zmm7, %zmm7 + vmovdqu64 (%rdx), %zmm0 + vmovdqu64 64(%rdx), %zmm1 + vmovdqu64 128(%rdx), %zmm2 + vmovdqu64 192(%rdx), %zmm3 + vpaddw %zmm4, %zmm0, %zmm4 + vpaddw %zmm5, %zmm1, %zmm5 + vpmulhw %zmm15, %zmm4, %zmm0 + vpmulhw %zmm15, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpaddw %zmm6, %zmm2, %zmm6 + vpaddw %zmm7, %zmm3, %zmm7 + vpmulhw %zmm15, %zmm6, %zmm2 + vpmulhw %zmm15, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, (%rdx) + vmovdqu64 %zmm1, 64(%rdx) + vmovdqu64 %zmm2, 128(%rdx) + vmovdqu64 %zmm3, 192(%rdx) + vmovdqu64 256(%r10), %zmm0 + vmovdqu64 320(%r10), %zmm1 + vmovdqu64 384(%r10), %zmm2 + vmovdqu64 448(%r10), %zmm3 + vmovdqu64 256(%rax), %zmm4 + vmovdqu64 320(%rax), %zmm5 + vmovdqu64 384(%rax), %zmm6 + vmovdqu64 448(%rax), %zmm7 + vpaddw %zmm0, %zmm4, %zmm4 + vpaddw %zmm1, %zmm5, %zmm5 + vpaddw %zmm2, %zmm6, %zmm6 + vpaddw %zmm3, %zmm7, %zmm7 + vmovdqu64 256(%rdx), %zmm0 + vmovdqu64 320(%rdx), %zmm1 + vmovdqu64 384(%rdx), %zmm2 + vmovdqu64 448(%rdx), %zmm3 + vpaddw %zmm4, %zmm0, %zmm4 + vpaddw %zmm5, %zmm1, %zmm5 + vpmulhw %zmm15, %zmm4, %zmm0 + vpmulhw %zmm15, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpaddw %zmm6, %zmm2, %zmm6 + vpaddw %zmm7, %zmm3, %zmm7 + vpmulhw %zmm15, %zmm6, %zmm2 + vpmulhw %zmm15, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, 256(%rdx) + vmovdqu64 %zmm1, 320(%rdx) + vmovdqu64 %zmm2, 384(%rdx) + vmovdqu64 %zmm3, 448(%rdx) + vmovdqu64 (%rsi), %zmm0 + vmovdqu64 64(%rsi), %zmm1 + vmovdqu64 128(%rsi), %zmm2 + vmovdqu64 192(%rsi), %zmm3 + vmovdqu64 (%r9), %zmm4 + vmovdqu64 64(%r9), %zmm5 + vmovdqu64 128(%r9), %zmm6 + vmovdqu64 192(%r9), %zmm7 + vpaddw %zmm4, %zmm0, %zmm4 + vpaddw %zmm5, %zmm1, %zmm5 + vpmulhw %zmm15, %zmm4, %zmm0 + vpmulhw %zmm15, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpaddw %zmm6, %zmm2, %zmm6 + vpaddw %zmm7, %zmm3, %zmm7 + vpmulhw %zmm15, %zmm6, %zmm2 + vpmulhw %zmm15, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, (%rsi) + vmovdqu64 %zmm1, 64(%rsi) + vmovdqu64 %zmm2, 128(%rsi) + vmovdqu64 %zmm3, 192(%rsi) + vmovdqu64 256(%rsi), %zmm0 + vmovdqu64 320(%rsi), %zmm1 + vmovdqu64 384(%rsi), %zmm2 + vmovdqu64 448(%rsi), %zmm3 + vmovdqu64 256(%r9), %zmm4 + vmovdqu64 320(%r9), %zmm5 + vmovdqu64 384(%r9), %zmm6 + vmovdqu64 448(%r9), %zmm7 + vpaddw %zmm4, %zmm0, %zmm4 + vpaddw %zmm5, %zmm1, %zmm5 + vpmulhw %zmm15, %zmm4, %zmm0 + vpmulhw %zmm15, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpaddw %zmm6, %zmm2, %zmm6 + vpaddw %zmm7, %zmm3, %zmm7 + vpmulhw %zmm15, %zmm6, %zmm2 + vpmulhw %zmm15, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, 256(%rsi) + vmovdqu64 %zmm1, 320(%rsi) + vmovdqu64 %zmm2, 384(%rsi) + vmovdqu64 %zmm3, 448(%rsi) + jmp L_encap_avx512_calc_done +L_encap_avx512_vp_single: + leaq L_mlkem_avx512_zetas_inv(%rip), %rbp + vmovdqu64 (%rdx), %ymm0 + vinserti64x4 $0x01, (%rdx), %zmm0, %zmm0 + vmovdqu64 32(%rdx), %ymm1 + vinserti64x4 $0x01, 32(%rdx), %zmm1, %zmm1 + vmovdqu64 64(%rdx), %ymm2 + vinserti64x4 $0x01, 64(%rdx), %zmm2, %zmm2 + vmovdqu64 96(%rdx), %ymm3 + vinserti64x4 $0x01, 96(%rdx), %zmm3, %zmm3 + vmovdqu64 128(%rdx), %ymm4 + vinserti64x4 $0x01, 128(%rdx), %zmm4, %zmm4 + vmovdqu64 160(%rdx), %ymm5 + vinserti64x4 $0x01, 160(%rdx), %zmm5, %zmm5 + vmovdqu64 192(%rdx), %ymm6 + vinserti64x4 $0x01, 192(%rdx), %zmm6, %zmm6 + vmovdqu64 224(%rdx), %ymm7 + vinserti64x4 $0x01, 224(%rdx), %zmm7, %zmm7 + vmovdqu64 256(%rdx), %ymm19 + vinserti64x4 $0x01, 256(%rdx), %zmm19, %zmm19 + vmovdqu64 288(%rdx), %ymm20 + vinserti64x4 $0x01, 288(%rdx), %zmm20, %zmm20 + vmovdqu64 320(%rdx), %ymm21 + vinserti64x4 $0x01, 320(%rdx), %zmm21, %zmm21 + vmovdqu64 352(%rdx), %ymm22 + vinserti64x4 $0x01, 352(%rdx), %zmm22, %zmm22 + vmovdqu64 384(%rdx), %ymm23 + vinserti64x4 $0x01, 384(%rdx), %zmm23, %zmm23 + vmovdqu64 416(%rdx), %ymm24 + vinserti64x4 $0x01, 416(%rdx), %zmm24, %zmm24 + vmovdqu64 448(%rdx), %ymm25 + vinserti64x4 $0x01, 448(%rdx), %zmm25, %zmm25 + vmovdqu64 480(%rdx), %ymm26 + vinserti64x4 $0x01, 480(%rdx), %zmm26, %zmm26 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm1, %zmm0, %zmm8 + vbroadcasti64x4 (%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm1, %zmm0, %zmm9 + vbroadcasti64x4 32(%rbp), %zmm12 + vpsllq $32, %zmm9, %zmm0 + vpsrlq $32, %zmm8, %zmm1 + vpblendmd %zmm0, %zmm8, %zmm0{%k1} + vpblendmd %zmm1, %zmm9, %zmm1{%k2} + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm3, %zmm2, %zmm8 + vbroadcasti64x4 64(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm3, %zmm2, %zmm9 + vbroadcasti64x4 96(%rbp), %zmm13 + vpsllq $32, %zmm9, %zmm2 + vpsrlq $32, %zmm8, %zmm3 + vpblendmd %zmm2, %zmm8, %zmm2{%k1} + vpblendmd %zmm3, %zmm9, %zmm3{%k2} + vpaddw %zmm1, %zmm0, %zmm8 + vpaddw %zmm3, %zmm2, %zmm9 + vpsubw %zmm1, %zmm0, %zmm1 + vpsubw %zmm3, %zmm2, %zmm3 + vpmulhw %zmm15, %zmm8, %zmm0 + vpmulhw %zmm15, %zmm9, %zmm2 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm2, %zmm2 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm8, %zmm8 + vpsubw %zmm2, %zmm9, %zmm9 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm1 + vpsubw %zmm2, %zmm3, %zmm3 + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm20, %zmm19, %zmm27 + vbroadcasti64x4 1216(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm20, %zmm19, %zmm28 + vbroadcasti64x4 1248(%rbp), %zmm12 + vpsllq $32, %zmm28, %zmm19 + vpsrlq $32, %zmm27, %zmm20 + vpblendmd %zmm19, %zmm27, %zmm19{%k1} + vpblendmd %zmm20, %zmm28, %zmm20{%k2} + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm22, %zmm21, %zmm27 + vbroadcasti64x4 1280(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm22, %zmm21, %zmm28 + vbroadcasti64x4 1312(%rbp), %zmm13 + vpsllq $32, %zmm28, %zmm21 + vpsrlq $32, %zmm27, %zmm22 + vpblendmd %zmm21, %zmm27, %zmm21{%k1} + vpblendmd %zmm22, %zmm28, %zmm22{%k2} + vpaddw %zmm20, %zmm19, %zmm27 + vpaddw %zmm22, %zmm21, %zmm28 + vpsubw %zmm20, %zmm19, %zmm20 + vpsubw %zmm22, %zmm21, %zmm22 + vpmulhw %zmm15, %zmm27, %zmm19 + vpmulhw %zmm15, %zmm28, %zmm21 + vpsraw $10, %zmm19, %zmm19 + vpsraw $10, %zmm21, %zmm21 + vpmullw %zmm14, %zmm19, %zmm19 + vpmullw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm27, %zmm27 + vpsubw %zmm21, %zmm28, %zmm28 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm20 + vpsubw %zmm21, %zmm22, %zmm22 + vbroadcasti64x4 128(%rbp), %zmm10 + vbroadcasti64x4 160(%rbp), %zmm12 + vbroadcasti64x4 192(%rbp), %zmm11 + vbroadcasti64x4 224(%rbp), %zmm13 + vpunpckldq %zmm1, %zmm8, %zmm0 + vpunpckhdq %zmm1, %zmm8, %zmm1 + vpunpckldq %zmm3, %zmm9, %zmm2 + vpunpckhdq %zmm3, %zmm9, %zmm3 + vpaddw %zmm1, %zmm0, %zmm8 + vpaddw %zmm3, %zmm2, %zmm9 + vpsubw %zmm1, %zmm0, %zmm1 + vpsubw %zmm3, %zmm2, %zmm3 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm1 + vpsubw %zmm2, %zmm3, %zmm3 + vbroadcasti64x4 1344(%rbp), %zmm10 + vbroadcasti64x4 1376(%rbp), %zmm12 + vbroadcasti64x4 1408(%rbp), %zmm11 + vbroadcasti64x4 1440(%rbp), %zmm13 + vpunpckldq %zmm20, %zmm27, %zmm19 + vpunpckhdq %zmm20, %zmm27, %zmm20 + vpunpckldq %zmm22, %zmm28, %zmm21 + vpunpckhdq %zmm22, %zmm28, %zmm22 + vpaddw %zmm20, %zmm19, %zmm27 + vpaddw %zmm22, %zmm21, %zmm28 + vpsubw %zmm20, %zmm19, %zmm20 + vpsubw %zmm22, %zmm21, %zmm22 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm20 + vpsubw %zmm21, %zmm22, %zmm22 + vbroadcasti64x4 256(%rbp), %zmm10 + vbroadcasti64x4 288(%rbp), %zmm12 + vbroadcasti64x4 320(%rbp), %zmm11 + vbroadcasti64x4 352(%rbp), %zmm13 + vpunpcklqdq %zmm1, %zmm8, %zmm0 + vpunpckhqdq %zmm1, %zmm8, %zmm1 + vpunpcklqdq %zmm3, %zmm9, %zmm2 + vpunpckhqdq %zmm3, %zmm9, %zmm3 + vpaddw %zmm1, %zmm0, %zmm8 + vpaddw %zmm3, %zmm2, %zmm9 + vpsubw %zmm1, %zmm0, %zmm1 + vpsubw %zmm3, %zmm2, %zmm3 + vpmulhw %zmm15, %zmm8, %zmm0 + vpmulhw %zmm15, %zmm9, %zmm2 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm2, %zmm2 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm8, %zmm8 + vpsubw %zmm2, %zmm9, %zmm9 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm1 + vpsubw %zmm2, %zmm3, %zmm3 + vbroadcasti64x4 1472(%rbp), %zmm10 + vbroadcasti64x4 1504(%rbp), %zmm12 + vbroadcasti64x4 1536(%rbp), %zmm11 + vbroadcasti64x4 1568(%rbp), %zmm13 + vpunpcklqdq %zmm20, %zmm27, %zmm19 + vpunpckhqdq %zmm20, %zmm27, %zmm20 + vpunpcklqdq %zmm22, %zmm28, %zmm21 + vpunpckhqdq %zmm22, %zmm28, %zmm22 + vpaddw %zmm20, %zmm19, %zmm27 + vpaddw %zmm22, %zmm21, %zmm28 + vpsubw %zmm20, %zmm19, %zmm20 + vpsubw %zmm22, %zmm21, %zmm22 + vpmulhw %zmm15, %zmm27, %zmm19 + vpmulhw %zmm15, %zmm28, %zmm21 + vpsraw $10, %zmm19, %zmm19 + vpsraw $10, %zmm21, %zmm21 + vpmullw %zmm14, %zmm19, %zmm19 + vpmullw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm27, %zmm27 + vpsubw %zmm21, %zmm28, %zmm28 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm20 + vpsubw %zmm21, %zmm22, %zmm22 + vmovdqa64 %zmm17, %zmm0 + vpermi2q %zmm1, %zmm8, %zmm0 + vbroadcasti64x4 384(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm1, %zmm8, %zmm16 + vmovdqa64 %zmm16, %zmm1 + vbroadcasti64x4 416(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm2 + vpermi2q %zmm3, %zmm9, %zmm2 + vbroadcasti64x4 448(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm3, %zmm9, %zmm16 + vmovdqa64 %zmm16, %zmm3 + vbroadcasti64x4 480(%rbp), %zmm13 + vpsubw %zmm1, %zmm0, %zmm8 + vpsubw %zmm3, %zmm2, %zmm9 + vpaddw %zmm1, %zmm0, %zmm0 + vpaddw %zmm3, %zmm2, %zmm2 + vpmullw %zmm12, %zmm8, %zmm1 + vpmullw %zmm13, %zmm9, %zmm3 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm11, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm1, %zmm1 + vpmulhw %zmm14, %zmm3, %zmm3 + vpsubw %zmm1, %zmm8, %zmm1 + vpsubw %zmm3, %zmm9, %zmm3 + vmovdqa64 %zmm17, %zmm19 + vpermi2q %zmm20, %zmm27, %zmm19 + vbroadcasti64x4 1600(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm20, %zmm27, %zmm16 + vmovdqa64 %zmm16, %zmm20 + vbroadcasti64x4 1632(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm21 + vpermi2q %zmm22, %zmm28, %zmm21 + vbroadcasti64x4 1664(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm22, %zmm28, %zmm16 + vmovdqa64 %zmm16, %zmm22 + vbroadcasti64x4 1696(%rbp), %zmm13 + vpsubw %zmm20, %zmm19, %zmm27 + vpsubw %zmm22, %zmm21, %zmm28 + vpaddw %zmm20, %zmm19, %zmm19 + vpaddw %zmm22, %zmm21, %zmm21 + vpmullw %zmm12, %zmm27, %zmm20 + vpmullw %zmm13, %zmm28, %zmm22 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm11, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm22, %zmm22 + vpsubw %zmm20, %zmm27, %zmm20 + vpsubw %zmm22, %zmm28, %zmm22 + vbroadcasti64x4 512(%rbp), %zmm10 + vbroadcasti64x4 544(%rbp), %zmm12 + vpaddw %zmm2, %zmm0, %zmm8 + vpaddw %zmm3, %zmm1, %zmm9 + vpsubw %zmm2, %zmm0, %zmm2 + vpsubw %zmm3, %zmm1, %zmm3 + vpmulhw %zmm15, %zmm8, %zmm0 + vpmulhw %zmm15, %zmm9, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm8, %zmm0 + vpsubw %zmm1, %zmm9, %zmm1 + vpmullw %zmm12, %zmm2, %zmm8 + vpmullw %zmm12, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm2, %zmm2 + vpmulhw %zmm10, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm2 + vpsubw %zmm9, %zmm3, %zmm3 + vbroadcasti64x4 1728(%rbp), %zmm10 + vbroadcasti64x4 1760(%rbp), %zmm12 + vpaddw %zmm21, %zmm19, %zmm27 + vpaddw %zmm22, %zmm20, %zmm28 + vpsubw %zmm21, %zmm19, %zmm21 + vpsubw %zmm22, %zmm20, %zmm22 + vpmulhw %zmm15, %zmm27, %zmm19 + vpmulhw %zmm15, %zmm28, %zmm20 + vpsraw $10, %zmm19, %zmm19 + vpsraw $10, %zmm20, %zmm20 + vpmullw %zmm14, %zmm19, %zmm19 + vpmullw %zmm14, %zmm20, %zmm20 + vpsubw %zmm19, %zmm27, %zmm19 + vpsubw %zmm20, %zmm28, %zmm20 + vpmullw %zmm12, %zmm21, %zmm27 + vpmullw %zmm12, %zmm22, %zmm28 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm27, %zmm27 + vpmulhw %zmm14, %zmm28, %zmm28 + vpsubw %zmm27, %zmm21, %zmm21 + vpsubw %zmm28, %zmm22, %zmm22 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm5, %zmm4, %zmm8 + vbroadcasti64x4 576(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm5, %zmm4, %zmm9 + vbroadcasti64x4 608(%rbp), %zmm12 + vpsllq $32, %zmm9, %zmm4 + vpsrlq $32, %zmm8, %zmm5 + vpblendmd %zmm4, %zmm8, %zmm4{%k1} + vpblendmd %zmm5, %zmm9, %zmm5{%k2} + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm7, %zmm6, %zmm8 + vbroadcasti64x4 640(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm7, %zmm6, %zmm9 + vbroadcasti64x4 672(%rbp), %zmm13 + vpsllq $32, %zmm9, %zmm6 + vpsrlq $32, %zmm8, %zmm7 + vpblendmd %zmm6, %zmm8, %zmm6{%k1} + vpblendmd %zmm7, %zmm9, %zmm7{%k2} + vpaddw %zmm5, %zmm4, %zmm8 + vpaddw %zmm7, %zmm6, %zmm9 + vpsubw %zmm5, %zmm4, %zmm5 + vpsubw %zmm7, %zmm6, %zmm7 + vpmulhw %zmm15, %zmm8, %zmm4 + vpmulhw %zmm15, %zmm9, %zmm6 + vpsraw $10, %zmm4, %zmm4 + vpsraw $10, %zmm6, %zmm6 + vpmullw %zmm14, %zmm4, %zmm4 + vpmullw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm8, %zmm8 + vpsubw %zmm6, %zmm9, %zmm9 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm5 + vpsubw %zmm6, %zmm7, %zmm7 + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm24, %zmm23, %zmm27 + vbroadcasti64x4 1792(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm24, %zmm23, %zmm28 + vbroadcasti64x4 1824(%rbp), %zmm12 + vpsllq $32, %zmm28, %zmm23 + vpsrlq $32, %zmm27, %zmm24 + vpblendmd %zmm23, %zmm27, %zmm23{%k1} + vpblendmd %zmm24, %zmm28, %zmm24{%k2} + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm26, %zmm25, %zmm27 + vbroadcasti64x4 1856(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm26, %zmm25, %zmm28 + vbroadcasti64x4 1888(%rbp), %zmm13 + vpsllq $32, %zmm28, %zmm25 + vpsrlq $32, %zmm27, %zmm26 + vpblendmd %zmm25, %zmm27, %zmm25{%k1} + vpblendmd %zmm26, %zmm28, %zmm26{%k2} + vpaddw %zmm24, %zmm23, %zmm27 + vpaddw %zmm26, %zmm25, %zmm28 + vpsubw %zmm24, %zmm23, %zmm24 + vpsubw %zmm26, %zmm25, %zmm26 + vpmulhw %zmm15, %zmm27, %zmm23 + vpmulhw %zmm15, %zmm28, %zmm25 + vpsraw $10, %zmm23, %zmm23 + vpsraw $10, %zmm25, %zmm25 + vpmullw %zmm14, %zmm23, %zmm23 + vpmullw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm27, %zmm27 + vpsubw %zmm25, %zmm28, %zmm28 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm24 + vpsubw %zmm25, %zmm26, %zmm26 + vbroadcasti64x4 704(%rbp), %zmm10 + vbroadcasti64x4 736(%rbp), %zmm12 + vbroadcasti64x4 768(%rbp), %zmm11 + vbroadcasti64x4 800(%rbp), %zmm13 + vpunpckldq %zmm5, %zmm8, %zmm4 + vpunpckhdq %zmm5, %zmm8, %zmm5 + vpunpckldq %zmm7, %zmm9, %zmm6 + vpunpckhdq %zmm7, %zmm9, %zmm7 + vpaddw %zmm5, %zmm4, %zmm8 + vpaddw %zmm7, %zmm6, %zmm9 + vpsubw %zmm5, %zmm4, %zmm5 + vpsubw %zmm7, %zmm6, %zmm7 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm5 + vpsubw %zmm6, %zmm7, %zmm7 + vbroadcasti64x4 1920(%rbp), %zmm10 + vbroadcasti64x4 1952(%rbp), %zmm12 + vbroadcasti64x4 1984(%rbp), %zmm11 + vbroadcasti64x4 2016(%rbp), %zmm13 + vpunpckldq %zmm24, %zmm27, %zmm23 + vpunpckhdq %zmm24, %zmm27, %zmm24 + vpunpckldq %zmm26, %zmm28, %zmm25 + vpunpckhdq %zmm26, %zmm28, %zmm26 + vpaddw %zmm24, %zmm23, %zmm27 + vpaddw %zmm26, %zmm25, %zmm28 + vpsubw %zmm24, %zmm23, %zmm24 + vpsubw %zmm26, %zmm25, %zmm26 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm24 + vpsubw %zmm25, %zmm26, %zmm26 + vbroadcasti64x4 832(%rbp), %zmm10 + vbroadcasti64x4 864(%rbp), %zmm12 + vbroadcasti64x4 896(%rbp), %zmm11 + vbroadcasti64x4 928(%rbp), %zmm13 + vpunpcklqdq %zmm5, %zmm8, %zmm4 + vpunpckhqdq %zmm5, %zmm8, %zmm5 + vpunpcklqdq %zmm7, %zmm9, %zmm6 + vpunpckhqdq %zmm7, %zmm9, %zmm7 + vpaddw %zmm5, %zmm4, %zmm8 + vpaddw %zmm7, %zmm6, %zmm9 + vpsubw %zmm5, %zmm4, %zmm5 + vpsubw %zmm7, %zmm6, %zmm7 + vpmulhw %zmm15, %zmm8, %zmm4 + vpmulhw %zmm15, %zmm9, %zmm6 + vpsraw $10, %zmm4, %zmm4 + vpsraw $10, %zmm6, %zmm6 + vpmullw %zmm14, %zmm4, %zmm4 + vpmullw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm8, %zmm8 + vpsubw %zmm6, %zmm9, %zmm9 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm5 + vpsubw %zmm6, %zmm7, %zmm7 + vbroadcasti64x4 2048(%rbp), %zmm10 + vbroadcasti64x4 2080(%rbp), %zmm12 + vbroadcasti64x4 2112(%rbp), %zmm11 + vbroadcasti64x4 2144(%rbp), %zmm13 + vpunpcklqdq %zmm24, %zmm27, %zmm23 + vpunpckhqdq %zmm24, %zmm27, %zmm24 + vpunpcklqdq %zmm26, %zmm28, %zmm25 + vpunpckhqdq %zmm26, %zmm28, %zmm26 + vpaddw %zmm24, %zmm23, %zmm27 + vpaddw %zmm26, %zmm25, %zmm28 + vpsubw %zmm24, %zmm23, %zmm24 + vpsubw %zmm26, %zmm25, %zmm26 + vpmulhw %zmm15, %zmm27, %zmm23 + vpmulhw %zmm15, %zmm28, %zmm25 + vpsraw $10, %zmm23, %zmm23 + vpsraw $10, %zmm25, %zmm25 + vpmullw %zmm14, %zmm23, %zmm23 + vpmullw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm27, %zmm27 + vpsubw %zmm25, %zmm28, %zmm28 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm24 + vpsubw %zmm25, %zmm26, %zmm26 + vmovdqa64 %zmm17, %zmm4 + vpermi2q %zmm5, %zmm8, %zmm4 + vbroadcasti64x4 960(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm5, %zmm8, %zmm16 + vmovdqa64 %zmm16, %zmm5 + vbroadcasti64x4 992(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm6 + vpermi2q %zmm7, %zmm9, %zmm6 + vbroadcasti64x4 1024(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm7, %zmm9, %zmm16 + vmovdqa64 %zmm16, %zmm7 + vbroadcasti64x4 1056(%rbp), %zmm13 + vpsubw %zmm5, %zmm4, %zmm8 + vpsubw %zmm7, %zmm6, %zmm9 + vpaddw %zmm5, %zmm4, %zmm4 + vpaddw %zmm7, %zmm6, %zmm6 + vpmullw %zmm12, %zmm8, %zmm5 + vpmullw %zmm13, %zmm9, %zmm7 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm11, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm7, %zmm7 + vpsubw %zmm5, %zmm8, %zmm5 + vpsubw %zmm7, %zmm9, %zmm7 + vmovdqa64 %zmm17, %zmm23 + vpermi2q %zmm24, %zmm27, %zmm23 + vbroadcasti64x4 2176(%rbp), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm24, %zmm27, %zmm16 + vmovdqa64 %zmm16, %zmm24 + vbroadcasti64x4 2208(%rbp), %zmm12 + vmovdqa64 %zmm17, %zmm25 + vpermi2q %zmm26, %zmm28, %zmm25 + vbroadcasti64x4 2240(%rbp), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm26, %zmm28, %zmm16 + vmovdqa64 %zmm16, %zmm26 + vbroadcasti64x4 2272(%rbp), %zmm13 + vpsubw %zmm24, %zmm23, %zmm27 + vpsubw %zmm26, %zmm25, %zmm28 + vpaddw %zmm24, %zmm23, %zmm23 + vpaddw %zmm26, %zmm25, %zmm25 + vpmullw %zmm12, %zmm27, %zmm24 + vpmullw %zmm13, %zmm28, %zmm26 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm11, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm26, %zmm26 + vpsubw %zmm24, %zmm27, %zmm24 + vpsubw %zmm26, %zmm28, %zmm26 + vbroadcasti64x4 1088(%rbp), %zmm10 + vbroadcasti64x4 1120(%rbp), %zmm12 + vpaddw %zmm6, %zmm4, %zmm8 + vpaddw %zmm7, %zmm5, %zmm9 + vpsubw %zmm6, %zmm4, %zmm6 + vpsubw %zmm7, %zmm5, %zmm7 + vpmulhw %zmm15, %zmm8, %zmm4 + vpmulhw %zmm15, %zmm9, %zmm5 + vpsraw $10, %zmm4, %zmm4 + vpsraw $10, %zmm5, %zmm5 + vpmullw %zmm14, %zmm4, %zmm4 + vpmullw %zmm14, %zmm5, %zmm5 + vpsubw %zmm4, %zmm8, %zmm4 + vpsubw %zmm5, %zmm9, %zmm5 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm6 + vpsubw %zmm9, %zmm7, %zmm7 + vbroadcasti64x4 2304(%rbp), %zmm10 + vbroadcasti64x4 2336(%rbp), %zmm12 + vpaddw %zmm25, %zmm23, %zmm27 + vpaddw %zmm26, %zmm24, %zmm28 + vpsubw %zmm25, %zmm23, %zmm25 + vpsubw %zmm26, %zmm24, %zmm26 + vpmulhw %zmm15, %zmm27, %zmm23 + vpmulhw %zmm15, %zmm28, %zmm24 + vpsraw $10, %zmm23, %zmm23 + vpsraw $10, %zmm24, %zmm24 + vpmullw %zmm14, %zmm23, %zmm23 + vpmullw %zmm14, %zmm24, %zmm24 + vpsubw %zmm23, %zmm27, %zmm23 + vpsubw %zmm24, %zmm28, %zmm24 + vpmullw %zmm12, %zmm25, %zmm27 + vpmullw %zmm12, %zmm26, %zmm28 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm27, %zmm27 + vpmulhw %zmm14, %zmm28, %zmm28 + vpsubw %zmm27, %zmm25, %zmm25 + vpsubw %zmm28, %zmm26, %zmm26 + vbroadcasti64x4 1152(%rbp), %zmm10 + vbroadcasti64x4 1184(%rbp), %zmm12 + vpsubw %zmm4, %zmm0, %zmm8 + vpsubw %zmm5, %zmm1, %zmm9 + vpaddw %zmm4, %zmm0, %zmm0 + vpaddw %zmm5, %zmm1, %zmm1 + vpmullw %zmm12, %zmm8, %zmm4 + vpmullw %zmm12, %zmm9, %zmm5 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm5, %zmm5 + vpsubw %zmm4, %zmm8, %zmm4 + vpsubw %zmm5, %zmm9, %zmm5 + vpsubw %zmm6, %zmm2, %zmm8 + vpsubw %zmm7, %zmm3, %zmm9 + vpaddw %zmm6, %zmm2, %zmm2 + vpaddw %zmm7, %zmm3, %zmm3 + vpmullw %zmm12, %zmm8, %zmm6 + vpmullw %zmm12, %zmm9, %zmm7 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm6, %zmm6 + vpmulhw %zmm14, %zmm7, %zmm7 + vpsubw %zmm6, %zmm8, %zmm6 + vpsubw %zmm7, %zmm9, %zmm7 + vbroadcasti64x4 2368(%rbp), %zmm10 + vbroadcasti64x4 2400(%rbp), %zmm12 + vpsubw %zmm23, %zmm19, %zmm27 + vpsubw %zmm24, %zmm20, %zmm28 + vpaddw %zmm23, %zmm19, %zmm19 + vpaddw %zmm24, %zmm20, %zmm20 + vpmullw %zmm12, %zmm27, %zmm23 + vpmullw %zmm12, %zmm28, %zmm24 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm10, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm24, %zmm24 + vpsubw %zmm23, %zmm27, %zmm23 + vpsubw %zmm24, %zmm28, %zmm24 + vpsubw %zmm25, %zmm21, %zmm27 + vpsubw %zmm26, %zmm22, %zmm28 + vpaddw %zmm25, %zmm21, %zmm21 + vpaddw %zmm26, %zmm22, %zmm22 + vpmullw %zmm12, %zmm27, %zmm25 + vpmullw %zmm12, %zmm28, %zmm26 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm10, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm25, %zmm25 + vpmulhw %zmm14, %zmm26, %zmm26 + vpsubw %zmm25, %zmm27, %zmm25 + vpsubw %zmm26, %zmm28, %zmm26 + vbroadcasti64x4 2432(%rbp), %zmm10 + vbroadcasti64x4 2464(%rbp), %zmm12 + vbroadcasti64x4 2496(%rbp), %zmm11 + vbroadcasti64x4 2528(%rbp), %zmm13 + vpsubw %zmm19, %zmm0, %zmm8 + vpsubw %zmm20, %zmm1, %zmm9 + vpaddw %zmm19, %zmm0, %zmm0 + vpaddw %zmm20, %zmm1, %zmm1 + vpmullw %zmm12, %zmm8, %zmm19 + vpmullw %zmm12, %zmm9, %zmm20 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm20, %zmm20 + vpsubw %zmm19, %zmm8, %zmm19 + vpsubw %zmm20, %zmm9, %zmm20 + vpaddw %zmm21, %zmm2, %zmm8 + vpaddw %zmm22, %zmm3, %zmm9 + vpsubw %zmm21, %zmm2, %zmm21 + vpsubw %zmm22, %zmm3, %zmm22 + vpmulhw %zmm15, %zmm8, %zmm2 + vpmulhw %zmm15, %zmm9, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm8, %zmm2 + vpsubw %zmm3, %zmm9, %zmm3 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm21 + vpsubw %zmm9, %zmm22, %zmm22 + vpsubw %zmm23, %zmm4, %zmm8 + vpsubw %zmm24, %zmm5, %zmm9 + vpaddw %zmm23, %zmm4, %zmm4 + vpaddw %zmm24, %zmm5, %zmm5 + vpmullw %zmm12, %zmm8, %zmm23 + vpmullw %zmm12, %zmm9, %zmm24 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm24, %zmm24 + vpsubw %zmm23, %zmm8, %zmm23 + vpsubw %zmm24, %zmm9, %zmm24 + vpaddw %zmm25, %zmm6, %zmm8 + vpaddw %zmm26, %zmm7, %zmm9 + vpsubw %zmm25, %zmm6, %zmm25 + vpsubw %zmm26, %zmm7, %zmm26 + vpmulhw %zmm15, %zmm8, %zmm6 + vpmulhw %zmm15, %zmm9, %zmm7 + vpsraw $10, %zmm6, %zmm6 + vpsraw $10, %zmm7, %zmm7 + vpmullw %zmm14, %zmm6, %zmm6 + vpmullw %zmm14, %zmm7, %zmm7 + vpsubw %zmm6, %zmm8, %zmm6 + vpsubw %zmm7, %zmm9, %zmm7 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm25 + vpsubw %zmm9, %zmm26, %zmm26 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm11, %zmm0, %zmm0 + vpmulhw %zmm11, %zmm1, %zmm1 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm0, %zmm0 + vpsubw %zmm9, %zmm1, %zmm1 + vpmullw %zmm13, %zmm2, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm11, %zmm2, %zmm2 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm2 + vpsubw %zmm9, %zmm3, %zmm3 + vpmullw %zmm13, %zmm4, %zmm8 + vpmullw %zmm13, %zmm5, %zmm9 + vpmulhw %zmm11, %zmm4, %zmm4 + vpmulhw %zmm11, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm4 + vpsubw %zmm9, %zmm5, %zmm5 + vpmullw %zmm13, %zmm6, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm11, %zmm6, %zmm6 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm6 + vpsubw %zmm9, %zmm7, %zmm7 + vpmullw %zmm13, %zmm19, %zmm8 + vpmullw %zmm13, %zmm20, %zmm9 + vpmulhw %zmm11, %zmm19, %zmm19 + vpmulhw %zmm11, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm19 + vpsubw %zmm9, %zmm20, %zmm20 + vpmullw %zmm13, %zmm21, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm11, %zmm21, %zmm21 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm21 + vpsubw %zmm9, %zmm22, %zmm22 + vpmullw %zmm13, %zmm23, %zmm8 + vpmullw %zmm13, %zmm24, %zmm9 + vpmulhw %zmm11, %zmm23, %zmm23 + vpmulhw %zmm11, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm23 + vpsubw %zmm9, %zmm24, %zmm24 + vpmullw %zmm13, %zmm25, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm11, %zmm25, %zmm25 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm25 + vpsubw %zmm9, %zmm26, %zmm26 + vmovdqu64 %ymm0, (%rdx) + vextracti64x4 $0x01, %zmm0, (%rdx) + vmovdqu64 %ymm1, 32(%rdx) + vextracti64x4 $0x01, %zmm1, 32(%rdx) + vmovdqu64 %ymm2, 64(%rdx) + vextracti64x4 $0x01, %zmm2, 64(%rdx) + vmovdqu64 %ymm3, 96(%rdx) + vextracti64x4 $0x01, %zmm3, 96(%rdx) + vmovdqu64 %ymm4, 128(%rdx) + vextracti64x4 $0x01, %zmm4, 128(%rdx) + vmovdqu64 %ymm5, 160(%rdx) + vextracti64x4 $0x01, %zmm5, 160(%rdx) + vmovdqu64 %ymm6, 192(%rdx) + vextracti64x4 $0x01, %zmm6, 192(%rdx) + vmovdqu64 %ymm7, 224(%rdx) + vextracti64x4 $0x01, %zmm7, 224(%rdx) + vmovdqu64 %ymm19, 256(%rdx) + vextracti64x4 $0x01, %zmm19, 256(%rdx) + vmovdqu64 %ymm20, 288(%rdx) + vextracti64x4 $0x01, %zmm20, 288(%rdx) + vmovdqu64 %ymm21, 320(%rdx) + vextracti64x4 $0x01, %zmm21, 320(%rdx) + vmovdqu64 %ymm22, 352(%rdx) + vextracti64x4 $0x01, %zmm22, 352(%rdx) + vmovdqu64 %ymm23, 384(%rdx) + vextracti64x4 $0x01, %zmm23, 384(%rdx) + vmovdqu64 %ymm24, 416(%rdx) + vextracti64x4 $0x01, %zmm24, 416(%rdx) + vmovdqu64 %ymm25, 448(%rdx) + vextracti64x4 $0x01, %zmm25, 448(%rdx) + vmovdqu64 %ymm26, 480(%rdx) + vextracti64x4 $0x01, %zmm26, 480(%rdx) + vmovdqu64 (%r10), %zmm0 + vmovdqu64 64(%r10), %zmm1 + vmovdqu64 128(%r10), %zmm2 + vmovdqu64 192(%r10), %zmm3 + vmovdqu64 (%rax), %zmm4 + vmovdqu64 64(%rax), %zmm5 + vmovdqu64 128(%rax), %zmm6 + vmovdqu64 192(%rax), %zmm7 + vpaddw %zmm0, %zmm4, %zmm4 + vpaddw %zmm1, %zmm5, %zmm5 + vpaddw %zmm2, %zmm6, %zmm6 + vpaddw %zmm3, %zmm7, %zmm7 + vmovdqu64 (%rdx), %zmm0 + vmovdqu64 64(%rdx), %zmm1 + vmovdqu64 128(%rdx), %zmm2 + vmovdqu64 192(%rdx), %zmm3 + vpaddw %zmm4, %zmm0, %zmm4 + vpaddw %zmm5, %zmm1, %zmm5 + vpmulhw %zmm15, %zmm4, %zmm0 + vpmulhw %zmm15, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpaddw %zmm6, %zmm2, %zmm6 + vpaddw %zmm7, %zmm3, %zmm7 + vpmulhw %zmm15, %zmm6, %zmm2 + vpmulhw %zmm15, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, (%rdx) + vmovdqu64 %zmm1, 64(%rdx) + vmovdqu64 %zmm2, 128(%rdx) + vmovdqu64 %zmm3, 192(%rdx) + vmovdqu64 256(%r10), %zmm0 + vmovdqu64 320(%r10), %zmm1 + vmovdqu64 384(%r10), %zmm2 + vmovdqu64 448(%r10), %zmm3 + vmovdqu64 256(%rax), %zmm4 + vmovdqu64 320(%rax), %zmm5 + vmovdqu64 384(%rax), %zmm6 + vmovdqu64 448(%rax), %zmm7 + vpaddw %zmm0, %zmm4, %zmm4 + vpaddw %zmm1, %zmm5, %zmm5 + vpaddw %zmm2, %zmm6, %zmm6 + vpaddw %zmm3, %zmm7, %zmm7 + vmovdqu64 256(%rdx), %zmm0 + vmovdqu64 320(%rdx), %zmm1 + vmovdqu64 384(%rdx), %zmm2 + vmovdqu64 448(%rdx), %zmm3 + vpaddw %zmm4, %zmm0, %zmm4 + vpaddw %zmm5, %zmm1, %zmm5 + vpmulhw %zmm15, %zmm4, %zmm0 + vpmulhw %zmm15, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpaddw %zmm6, %zmm2, %zmm6 + vpaddw %zmm7, %zmm3, %zmm7 + vpmulhw %zmm15, %zmm6, %zmm2 + vpmulhw %zmm15, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, 256(%rdx) + vmovdqu64 %zmm1, 320(%rdx) + vmovdqu64 %zmm2, 384(%rdx) + vmovdqu64 %zmm3, 448(%rdx) +L_encap_avx512_calc_done: + vzeroupper + addq $56, %rsp + popq %rbp + popq %rbx + popq %r15 + popq %r14 + popq %r13 + popq %r12 + repz retq +#ifndef __APPLE__ +.size mlkem_encapsulate_avx512,.-mlkem_encapsulate_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl mlkem_decapsulate_avx512 +.type mlkem_decapsulate_avx512,@function +.align 16 +mlkem_decapsulate_avx512: +#else +.section __TEXT,__text +.globl _mlkem_decapsulate_avx512 +.p2align 4 +_mlkem_decapsulate_avx512: +#endif /* __APPLE__ */ + pushq %r12 + movq $0xd01, %r12 + vmovd %r12d, %xmm14 + vpbroadcastw %xmm14, %zmm14 + movq $0x4ebf, %r12 + vmovd %r12d, %xmm15 + vpbroadcastw %xmm15, %zmm15 + movl $0xaaaa, %r12d + kmovw %r12d, %k1 + movl $0x5555, %r12d + kmovw %r12d, %k2 + movl $0xaaaaaaaa, %r12d + kmovd %r12d, %k3 + movl $0x55555555, %r12d + kmovd %r12d, %k4 + vmovdqu64 L_mlkem_avx512_perm20(%rip), %zmm17 + vmovdqu64 L_mlkem_avx512_perm31(%rip), %zmm18 + movslq %r8d, %rax + movq %rdx, %r9 +L_decap_avx512_bp: + cmpq $2, %rax + jl L_decap_avx512_bp_odd + movq %r9, %r10 + addq $0x200, %r10 + leaq L_mlkem_avx512_zetas(%rip), %r11 + vmovdqu64 (%r9), %ymm0 + vinserti64x4 $0x01, (%r10), %zmm0, %zmm0 + vmovdqu64 32(%r9), %ymm1 + vinserti64x4 $0x01, 32(%r10), %zmm1, %zmm1 + vmovdqu64 64(%r9), %ymm2 + vinserti64x4 $0x01, 64(%r10), %zmm2, %zmm2 + vmovdqu64 96(%r9), %ymm3 + vinserti64x4 $0x01, 96(%r10), %zmm3, %zmm3 + vmovdqu64 128(%r9), %ymm4 + vinserti64x4 $0x01, 128(%r10), %zmm4, %zmm4 + vmovdqu64 160(%r9), %ymm5 + vinserti64x4 $0x01, 160(%r10), %zmm5, %zmm5 + vmovdqu64 192(%r9), %ymm6 + vinserti64x4 $0x01, 192(%r10), %zmm6, %zmm6 + vmovdqu64 224(%r9), %ymm7 + vinserti64x4 $0x01, 224(%r10), %zmm7, %zmm7 + vmovdqu64 256(%r9), %ymm19 + vinserti64x4 $0x01, 256(%r10), %zmm19, %zmm19 + vmovdqu64 288(%r9), %ymm20 + vinserti64x4 $0x01, 288(%r10), %zmm20, %zmm20 + vmovdqu64 320(%r9), %ymm21 + vinserti64x4 $0x01, 320(%r10), %zmm21, %zmm21 + vmovdqu64 352(%r9), %ymm22 + vinserti64x4 $0x01, 352(%r10), %zmm22, %zmm22 + vmovdqu64 384(%r9), %ymm23 + vinserti64x4 $0x01, 384(%r10), %zmm23, %zmm23 + vmovdqu64 416(%r9), %ymm24 + vinserti64x4 $0x01, 416(%r10), %zmm24, %zmm24 + vmovdqu64 448(%r9), %ymm25 + vinserti64x4 $0x01, 448(%r10), %zmm25, %zmm25 + vmovdqu64 480(%r9), %ymm26 + vinserti64x4 $0x01, 480(%r10), %zmm26, %zmm26 + vbroadcasti64x4 (%r11), %zmm10 + vbroadcasti64x4 32(%r11), %zmm12 + vpmullw %zmm12, %zmm19, %zmm8 + vpmullw %zmm12, %zmm20, %zmm9 + vpmulhw %zmm10, %zmm19, %zmm19 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm8 + vpsubw %zmm9, %zmm20, %zmm9 + vpsubw %zmm8, %zmm0, %zmm19 + vpsubw %zmm9, %zmm1, %zmm20 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm2, %zmm21 + vpsubw %zmm9, %zmm3, %zmm22 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm4, %zmm23 + vpsubw %zmm9, %zmm5, %zmm24 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm6, %zmm25 + vpsubw %zmm9, %zmm7, %zmm26 + vpaddw %zmm8, %zmm6, %zmm6 + vpaddw %zmm9, %zmm7, %zmm7 + vbroadcasti64x4 64(%r11), %zmm10 + vbroadcasti64x4 96(%r11), %zmm12 + vpmullw %zmm12, %zmm4, %zmm8 + vpmullw %zmm12, %zmm5, %zmm9 + vpmulhw %zmm10, %zmm4, %zmm4 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm8 + vpsubw %zmm9, %zmm5, %zmm9 + vpsubw %zmm8, %zmm0, %zmm4 + vpsubw %zmm9, %zmm1, %zmm5 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm2, %zmm6 + vpsubw %zmm9, %zmm3, %zmm7 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vbroadcasti64x4 1280(%r11), %zmm10 + vbroadcasti64x4 1312(%r11), %zmm12 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm19, %zmm23 + vpsubw %zmm9, %zmm20, %zmm24 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm21, %zmm25 + vpsubw %zmm9, %zmm22, %zmm26 + vpaddw %zmm8, %zmm21, %zmm21 + vpaddw %zmm9, %zmm22, %zmm22 + vbroadcasti64x4 128(%r11), %zmm10 + vbroadcasti64x4 160(%r11), %zmm12 + vpmullw %zmm12, %zmm2, %zmm8 + vpmullw %zmm12, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm2, %zmm2 + vpmulhw %zmm10, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm2 + vpsubw %zmm9, %zmm1, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vbroadcasti64x4 1344(%r11), %zmm10 + vbroadcasti64x4 1376(%r11), %zmm12 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm21 + vpsubw %zmm9, %zmm20, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vbroadcasti64x4 192(%r11), %zmm10 + vbroadcasti64x4 224(%r11), %zmm12 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm6 + vpsubw %zmm9, %zmm5, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vbroadcasti64x4 1408(%r11), %zmm10 + vbroadcasti64x4 1440(%r11), %zmm12 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm25 + vpsubw %zmm9, %zmm24, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm24, %zmm24 + vbroadcasti64x4 256(%r11), %zmm10 + vbroadcasti64x4 288(%r11), %zmm12 + vbroadcasti64x4 320(%r11), %zmm11 + vbroadcasti64x4 352(%r11), %zmm13 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 1472(%r11), %zmm10 + vbroadcasti64x4 1504(%r11), %zmm12 + vbroadcasti64x4 1536(%r11), %zmm11 + vbroadcasti64x4 1568(%r11), %zmm13 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 384(%r11), %zmm10 + vbroadcasti64x4 416(%r11), %zmm12 + vbroadcasti64x4 448(%r11), %zmm11 + vbroadcasti64x4 480(%r11), %zmm13 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vbroadcasti64x4 1600(%r11), %zmm10 + vbroadcasti64x4 1632(%r11), %zmm12 + vbroadcasti64x4 1664(%r11), %zmm11 + vbroadcasti64x4 1696(%r11), %zmm13 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm1, %zmm0, %zmm8 + vbroadcasti64x4 512(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm16, %zmm1 + vbroadcasti64x4 544(%r11), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm3, %zmm2, %zmm9 + vbroadcasti64x4 576(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm16, %zmm3 + vbroadcasti64x4 608(%r11), %zmm13 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm0 + vpsubw %zmm2, %zmm3, %zmm2 + vpsubw %zmm0, %zmm8, %zmm1 + vpsubw %zmm2, %zmm9, %zmm3 + vpaddw %zmm0, %zmm8, %zmm8 + vpaddw %zmm2, %zmm9, %zmm9 + vbroadcasti64x4 640(%r11), %zmm10 + vbroadcasti64x4 672(%r11), %zmm12 + vbroadcasti64x4 704(%r11), %zmm11 + vbroadcasti64x4 736(%r11), %zmm13 + vpunpcklqdq %zmm1, %zmm8, %zmm0 + vpunpckhqdq %zmm1, %zmm8, %zmm1 + vpunpcklqdq %zmm3, %zmm9, %zmm2 + vpunpckhqdq %zmm3, %zmm9, %zmm3 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm20, %zmm19, %zmm8 + vbroadcasti64x4 1728(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm20, %zmm19, %zmm16 + vmovdqa64 %zmm16, %zmm20 + vbroadcasti64x4 1760(%r11), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm22, %zmm21, %zmm9 + vbroadcasti64x4 1792(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm22, %zmm21, %zmm16 + vmovdqa64 %zmm16, %zmm22 + vbroadcasti64x4 1824(%r11), %zmm13 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm19 + vpsubw %zmm21, %zmm22, %zmm21 + vpsubw %zmm19, %zmm8, %zmm20 + vpsubw %zmm21, %zmm9, %zmm22 + vpaddw %zmm19, %zmm8, %zmm8 + vpaddw %zmm21, %zmm9, %zmm9 + vbroadcasti64x4 1856(%r11), %zmm10 + vbroadcasti64x4 1888(%r11), %zmm12 + vbroadcasti64x4 1920(%r11), %zmm11 + vbroadcasti64x4 1952(%r11), %zmm13 + vpunpcklqdq %zmm20, %zmm8, %zmm19 + vpunpckhqdq %zmm20, %zmm8, %zmm20 + vpunpcklqdq %zmm22, %zmm9, %zmm21 + vpunpckhqdq %zmm22, %zmm9, %zmm22 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm5, %zmm4, %zmm8 + vbroadcasti64x4 768(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm16, %zmm5 + vbroadcasti64x4 800(%r11), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm7, %zmm6, %zmm9 + vbroadcasti64x4 832(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm16, %zmm7 + vbroadcasti64x4 864(%r11), %zmm13 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm4 + vpsubw %zmm6, %zmm7, %zmm6 + vpsubw %zmm4, %zmm8, %zmm5 + vpsubw %zmm6, %zmm9, %zmm7 + vpaddw %zmm4, %zmm8, %zmm8 + vpaddw %zmm6, %zmm9, %zmm9 + vbroadcasti64x4 896(%r11), %zmm10 + vbroadcasti64x4 928(%r11), %zmm12 + vbroadcasti64x4 960(%r11), %zmm11 + vbroadcasti64x4 992(%r11), %zmm13 + vpunpcklqdq %zmm5, %zmm8, %zmm4 + vpunpckhqdq %zmm5, %zmm8, %zmm5 + vpunpcklqdq %zmm7, %zmm9, %zmm6 + vpunpckhqdq %zmm7, %zmm9, %zmm7 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm24, %zmm23, %zmm8 + vbroadcasti64x4 1984(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm24, %zmm23, %zmm16 + vmovdqa64 %zmm16, %zmm24 + vbroadcasti64x4 2016(%r11), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm26, %zmm25, %zmm9 + vbroadcasti64x4 2048(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm26, %zmm25, %zmm16 + vmovdqa64 %zmm16, %zmm26 + vbroadcasti64x4 2080(%r11), %zmm13 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm23 + vpsubw %zmm25, %zmm26, %zmm25 + vpsubw %zmm23, %zmm8, %zmm24 + vpsubw %zmm25, %zmm9, %zmm26 + vpaddw %zmm23, %zmm8, %zmm8 + vpaddw %zmm25, %zmm9, %zmm9 + vbroadcasti64x4 2112(%r11), %zmm10 + vbroadcasti64x4 2144(%r11), %zmm12 + vbroadcasti64x4 2176(%r11), %zmm11 + vbroadcasti64x4 2208(%r11), %zmm13 + vpunpcklqdq %zmm24, %zmm8, %zmm23 + vpunpckhqdq %zmm24, %zmm8, %zmm24 + vpunpcklqdq %zmm26, %zmm9, %zmm25 + vpunpckhqdq %zmm26, %zmm9, %zmm26 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vbroadcasti64x4 1024(%r11), %zmm10 + vbroadcasti64x4 1056(%r11), %zmm12 + vbroadcasti64x4 1088(%r11), %zmm11 + vbroadcasti64x4 1120(%r11), %zmm13 + vpsllq $32, %zmm1, %zmm8 + vpsrlq $32, %zmm0, %zmm9 + vpblendmd %zmm8, %zmm0, %zmm0{%k1} + vpblendmd %zmm9, %zmm1, %zmm1{%k2} + vpsllq $32, %zmm3, %zmm8 + vpsrlq $32, %zmm2, %zmm9 + vpblendmd %zmm8, %zmm2, %zmm2{%k1} + vpblendmd %zmm9, %zmm3, %zmm3{%k2} + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 2240(%r11), %zmm10 + vbroadcasti64x4 2272(%r11), %zmm12 + vbroadcasti64x4 2304(%r11), %zmm11 + vbroadcasti64x4 2336(%r11), %zmm13 + vpsllq $32, %zmm20, %zmm8 + vpsrlq $32, %zmm19, %zmm9 + vpblendmd %zmm8, %zmm19, %zmm19{%k1} + vpblendmd %zmm9, %zmm20, %zmm20{%k2} + vpsllq $32, %zmm22, %zmm8 + vpsrlq $32, %zmm21, %zmm9 + vpblendmd %zmm8, %zmm21, %zmm21{%k1} + vpblendmd %zmm9, %zmm22, %zmm22{%k2} + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 1152(%r11), %zmm10 + vbroadcasti64x4 1184(%r11), %zmm12 + vbroadcasti64x4 1216(%r11), %zmm11 + vbroadcasti64x4 1248(%r11), %zmm13 + vpsllq $32, %zmm5, %zmm8 + vpsrlq $32, %zmm4, %zmm9 + vpblendmd %zmm8, %zmm4, %zmm4{%k1} + vpblendmd %zmm9, %zmm5, %zmm5{%k2} + vpsllq $32, %zmm7, %zmm8 + vpsrlq $32, %zmm6, %zmm9 + vpblendmd %zmm8, %zmm6, %zmm6{%k1} + vpblendmd %zmm9, %zmm7, %zmm7{%k2} + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vbroadcasti64x4 2368(%r11), %zmm10 + vbroadcasti64x4 2400(%r11), %zmm12 + vbroadcasti64x4 2432(%r11), %zmm11 + vbroadcasti64x4 2464(%r11), %zmm13 + vpsllq $32, %zmm24, %zmm8 + vpsrlq $32, %zmm23, %zmm9 + vpblendmd %zmm8, %zmm23, %zmm23{%k1} + vpblendmd %zmm9, %zmm24, %zmm24{%k2} + vpsllq $32, %zmm26, %zmm8 + vpsrlq $32, %zmm25, %zmm9 + vpblendmd %zmm8, %zmm25, %zmm25{%k1} + vpblendmd %zmm9, %zmm26, %zmm26{%k2} + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vpunpckldq %zmm1, %zmm0, %zmm8 + vpunpckhdq %zmm1, %zmm0, %zmm9 + vmovdqa64 %zmm17, %zmm0 + vpermi2q %zmm9, %zmm8, %zmm0 + vmovdqa64 %zmm18, %zmm1 + vpermi2q %zmm9, %zmm8, %zmm1 + vpunpckldq %zmm3, %zmm2, %zmm8 + vpunpckhdq %zmm3, %zmm2, %zmm9 + vmovdqa64 %zmm17, %zmm2 + vpermi2q %zmm9, %zmm8, %zmm2 + vmovdqa64 %zmm18, %zmm3 + vpermi2q %zmm9, %zmm8, %zmm3 + vpunpckldq %zmm20, %zmm19, %zmm8 + vpunpckhdq %zmm20, %zmm19, %zmm9 + vmovdqa64 %zmm17, %zmm19 + vpermi2q %zmm9, %zmm8, %zmm19 + vmovdqa64 %zmm18, %zmm20 + vpermi2q %zmm9, %zmm8, %zmm20 + vpunpckldq %zmm22, %zmm21, %zmm8 + vpunpckhdq %zmm22, %zmm21, %zmm9 + vmovdqa64 %zmm17, %zmm21 + vpermi2q %zmm9, %zmm8, %zmm21 + vmovdqa64 %zmm18, %zmm22 + vpermi2q %zmm9, %zmm8, %zmm22 + vpunpckldq %zmm5, %zmm4, %zmm8 + vpunpckhdq %zmm5, %zmm4, %zmm9 + vmovdqa64 %zmm17, %zmm4 + vpermi2q %zmm9, %zmm8, %zmm4 + vmovdqa64 %zmm18, %zmm5 + vpermi2q %zmm9, %zmm8, %zmm5 + vpunpckldq %zmm7, %zmm6, %zmm8 + vpunpckhdq %zmm7, %zmm6, %zmm9 + vmovdqa64 %zmm17, %zmm6 + vpermi2q %zmm9, %zmm8, %zmm6 + vmovdqa64 %zmm18, %zmm7 + vpermi2q %zmm9, %zmm8, %zmm7 + vpunpckldq %zmm24, %zmm23, %zmm8 + vpunpckhdq %zmm24, %zmm23, %zmm9 + vmovdqa64 %zmm17, %zmm23 + vpermi2q %zmm9, %zmm8, %zmm23 + vmovdqa64 %zmm18, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vpunpckldq %zmm26, %zmm25, %zmm8 + vpunpckhdq %zmm26, %zmm25, %zmm9 + vmovdqa64 %zmm17, %zmm25 + vpermi2q %zmm9, %zmm8, %zmm25 + vmovdqa64 %zmm18, %zmm26 + vpermi2q %zmm9, %zmm8, %zmm26 + vpmulhw %zmm15, %zmm0, %zmm8 + vpmulhw %zmm15, %zmm1, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm0, %zmm8 + vpsubw %zmm9, %zmm1, %zmm9 + vmovdqu64 %ymm8, (%r9) + vextracti64x4 $0x01, %zmm8, (%r10) + vmovdqu64 %ymm9, 32(%r9) + vextracti64x4 $0x01, %zmm9, 32(%r10) + vpmulhw %zmm15, %zmm2, %zmm8 + vpmulhw %zmm15, %zmm3, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vmovdqu64 %ymm8, 64(%r9) + vextracti64x4 $0x01, %zmm8, 64(%r10) + vmovdqu64 %ymm9, 96(%r9) + vextracti64x4 $0x01, %zmm9, 96(%r10) + vpmulhw %zmm15, %zmm19, %zmm8 + vpmulhw %zmm15, %zmm20, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm8 + vpsubw %zmm9, %zmm20, %zmm9 + vmovdqu64 %ymm8, 256(%r9) + vextracti64x4 $0x01, %zmm8, 256(%r10) + vmovdqu64 %ymm9, 288(%r9) + vextracti64x4 $0x01, %zmm9, 288(%r10) + vpmulhw %zmm15, %zmm21, %zmm8 + vpmulhw %zmm15, %zmm22, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vmovdqu64 %ymm8, 320(%r9) + vextracti64x4 $0x01, %zmm8, 320(%r10) + vmovdqu64 %ymm9, 352(%r9) + vextracti64x4 $0x01, %zmm9, 352(%r10) + vpmulhw %zmm15, %zmm4, %zmm8 + vpmulhw %zmm15, %zmm5, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm8 + vpsubw %zmm9, %zmm5, %zmm9 + vmovdqu64 %ymm8, 128(%r9) + vextracti64x4 $0x01, %zmm8, 128(%r10) + vmovdqu64 %ymm9, 160(%r9) + vextracti64x4 $0x01, %zmm9, 160(%r10) + vpmulhw %zmm15, %zmm6, %zmm8 + vpmulhw %zmm15, %zmm7, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vmovdqu64 %ymm8, 192(%r9) + vextracti64x4 $0x01, %zmm8, 192(%r10) + vmovdqu64 %ymm9, 224(%r9) + vextracti64x4 $0x01, %zmm9, 224(%r10) + vpmulhw %zmm15, %zmm23, %zmm8 + vpmulhw %zmm15, %zmm24, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vmovdqu64 %ymm8, 384(%r9) + vextracti64x4 $0x01, %zmm8, 384(%r10) + vmovdqu64 %ymm9, 416(%r9) + vextracti64x4 $0x01, %zmm9, 416(%r10) + vpmulhw %zmm15, %zmm25, %zmm8 + vpmulhw %zmm15, %zmm26, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vmovdqu64 %ymm8, 448(%r9) + vextracti64x4 $0x01, %zmm8, 448(%r10) + vmovdqu64 %ymm9, 480(%r9) + vextracti64x4 $0x01, %zmm9, 480(%r10) + addq $0x400, %r9 + subq $2, %rax + jmp L_decap_avx512_bp +L_decap_avx512_bp_odd: + cmpq $0x01, %rax + jne L_decap_avx512_bp_done + leaq L_mlkem_avx512_zetas(%rip), %r11 + vmovdqu64 (%r9), %ymm0 + vinserti64x4 $0x01, (%r9), %zmm0, %zmm0 + vmovdqu64 32(%r9), %ymm1 + vinserti64x4 $0x01, 32(%r9), %zmm1, %zmm1 + vmovdqu64 64(%r9), %ymm2 + vinserti64x4 $0x01, 64(%r9), %zmm2, %zmm2 + vmovdqu64 96(%r9), %ymm3 + vinserti64x4 $0x01, 96(%r9), %zmm3, %zmm3 + vmovdqu64 128(%r9), %ymm4 + vinserti64x4 $0x01, 128(%r9), %zmm4, %zmm4 + vmovdqu64 160(%r9), %ymm5 + vinserti64x4 $0x01, 160(%r9), %zmm5, %zmm5 + vmovdqu64 192(%r9), %ymm6 + vinserti64x4 $0x01, 192(%r9), %zmm6, %zmm6 + vmovdqu64 224(%r9), %ymm7 + vinserti64x4 $0x01, 224(%r9), %zmm7, %zmm7 + vmovdqu64 256(%r9), %ymm19 + vinserti64x4 $0x01, 256(%r9), %zmm19, %zmm19 + vmovdqu64 288(%r9), %ymm20 + vinserti64x4 $0x01, 288(%r9), %zmm20, %zmm20 + vmovdqu64 320(%r9), %ymm21 + vinserti64x4 $0x01, 320(%r9), %zmm21, %zmm21 + vmovdqu64 352(%r9), %ymm22 + vinserti64x4 $0x01, 352(%r9), %zmm22, %zmm22 + vmovdqu64 384(%r9), %ymm23 + vinserti64x4 $0x01, 384(%r9), %zmm23, %zmm23 + vmovdqu64 416(%r9), %ymm24 + vinserti64x4 $0x01, 416(%r9), %zmm24, %zmm24 + vmovdqu64 448(%r9), %ymm25 + vinserti64x4 $0x01, 448(%r9), %zmm25, %zmm25 + vmovdqu64 480(%r9), %ymm26 + vinserti64x4 $0x01, 480(%r9), %zmm26, %zmm26 + vbroadcasti64x4 (%r11), %zmm10 + vbroadcasti64x4 32(%r11), %zmm12 + vpmullw %zmm12, %zmm19, %zmm8 + vpmullw %zmm12, %zmm20, %zmm9 + vpmulhw %zmm10, %zmm19, %zmm19 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm8 + vpsubw %zmm9, %zmm20, %zmm9 + vpsubw %zmm8, %zmm0, %zmm19 + vpsubw %zmm9, %zmm1, %zmm20 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm2, %zmm21 + vpsubw %zmm9, %zmm3, %zmm22 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm4, %zmm23 + vpsubw %zmm9, %zmm5, %zmm24 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm6, %zmm25 + vpsubw %zmm9, %zmm7, %zmm26 + vpaddw %zmm8, %zmm6, %zmm6 + vpaddw %zmm9, %zmm7, %zmm7 + vbroadcasti64x4 64(%r11), %zmm10 + vbroadcasti64x4 96(%r11), %zmm12 + vpmullw %zmm12, %zmm4, %zmm8 + vpmullw %zmm12, %zmm5, %zmm9 + vpmulhw %zmm10, %zmm4, %zmm4 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm8 + vpsubw %zmm9, %zmm5, %zmm9 + vpsubw %zmm8, %zmm0, %zmm4 + vpsubw %zmm9, %zmm1, %zmm5 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm2, %zmm6 + vpsubw %zmm9, %zmm3, %zmm7 + vpaddw %zmm8, %zmm2, %zmm2 + vpaddw %zmm9, %zmm3, %zmm3 + vbroadcasti64x4 1280(%r11), %zmm10 + vbroadcasti64x4 1312(%r11), %zmm12 + vpmullw %zmm12, %zmm23, %zmm8 + vpmullw %zmm12, %zmm24, %zmm9 + vpmulhw %zmm10, %zmm23, %zmm23 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vpsubw %zmm8, %zmm19, %zmm23 + vpsubw %zmm9, %zmm20, %zmm24 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm21, %zmm25 + vpsubw %zmm9, %zmm22, %zmm26 + vpaddw %zmm8, %zmm21, %zmm21 + vpaddw %zmm9, %zmm22, %zmm22 + vbroadcasti64x4 128(%r11), %zmm10 + vbroadcasti64x4 160(%r11), %zmm12 + vpmullw %zmm12, %zmm2, %zmm8 + vpmullw %zmm12, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm2, %zmm2 + vpmulhw %zmm10, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm2 + vpsubw %zmm9, %zmm1, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vbroadcasti64x4 1344(%r11), %zmm10 + vbroadcasti64x4 1376(%r11), %zmm12 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm21 + vpsubw %zmm9, %zmm20, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm20, %zmm20 + vbroadcasti64x4 192(%r11), %zmm10 + vbroadcasti64x4 224(%r11), %zmm12 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm6 + vpsubw %zmm9, %zmm5, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vbroadcasti64x4 1408(%r11), %zmm10 + vbroadcasti64x4 1440(%r11), %zmm12 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm25 + vpsubw %zmm9, %zmm24, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm24, %zmm24 + vbroadcasti64x4 256(%r11), %zmm10 + vbroadcasti64x4 288(%r11), %zmm12 + vbroadcasti64x4 320(%r11), %zmm11 + vbroadcasti64x4 352(%r11), %zmm13 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 1472(%r11), %zmm10 + vbroadcasti64x4 1504(%r11), %zmm12 + vbroadcasti64x4 1536(%r11), %zmm11 + vbroadcasti64x4 1568(%r11), %zmm13 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 384(%r11), %zmm10 + vbroadcasti64x4 416(%r11), %zmm12 + vbroadcasti64x4 448(%r11), %zmm11 + vbroadcasti64x4 480(%r11), %zmm13 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vbroadcasti64x4 1600(%r11), %zmm10 + vbroadcasti64x4 1632(%r11), %zmm12 + vbroadcasti64x4 1664(%r11), %zmm11 + vbroadcasti64x4 1696(%r11), %zmm13 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm1, %zmm0, %zmm8 + vbroadcasti64x4 512(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm1, %zmm0, %zmm16 + vmovdqa64 %zmm16, %zmm1 + vbroadcasti64x4 544(%r11), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm3, %zmm2, %zmm9 + vbroadcasti64x4 576(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm3, %zmm2, %zmm16 + vmovdqa64 %zmm16, %zmm3 + vbroadcasti64x4 608(%r11), %zmm13 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm0 + vpsubw %zmm2, %zmm3, %zmm2 + vpsubw %zmm0, %zmm8, %zmm1 + vpsubw %zmm2, %zmm9, %zmm3 + vpaddw %zmm0, %zmm8, %zmm8 + vpaddw %zmm2, %zmm9, %zmm9 + vbroadcasti64x4 640(%r11), %zmm10 + vbroadcasti64x4 672(%r11), %zmm12 + vbroadcasti64x4 704(%r11), %zmm11 + vbroadcasti64x4 736(%r11), %zmm13 + vpunpcklqdq %zmm1, %zmm8, %zmm0 + vpunpckhqdq %zmm1, %zmm8, %zmm1 + vpunpcklqdq %zmm3, %zmm9, %zmm2 + vpunpckhqdq %zmm3, %zmm9, %zmm3 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm20, %zmm19, %zmm8 + vbroadcasti64x4 1728(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm20, %zmm19, %zmm16 + vmovdqa64 %zmm16, %zmm20 + vbroadcasti64x4 1760(%r11), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm22, %zmm21, %zmm9 + vbroadcasti64x4 1792(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm22, %zmm21, %zmm16 + vmovdqa64 %zmm16, %zmm22 + vbroadcasti64x4 1824(%r11), %zmm13 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm19 + vpsubw %zmm21, %zmm22, %zmm21 + vpsubw %zmm19, %zmm8, %zmm20 + vpsubw %zmm21, %zmm9, %zmm22 + vpaddw %zmm19, %zmm8, %zmm8 + vpaddw %zmm21, %zmm9, %zmm9 + vbroadcasti64x4 1856(%r11), %zmm10 + vbroadcasti64x4 1888(%r11), %zmm12 + vbroadcasti64x4 1920(%r11), %zmm11 + vbroadcasti64x4 1952(%r11), %zmm13 + vpunpcklqdq %zmm20, %zmm8, %zmm19 + vpunpckhqdq %zmm20, %zmm8, %zmm20 + vpunpcklqdq %zmm22, %zmm9, %zmm21 + vpunpckhqdq %zmm22, %zmm9, %zmm22 + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm5, %zmm4, %zmm8 + vbroadcasti64x4 768(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm5, %zmm4, %zmm16 + vmovdqa64 %zmm16, %zmm5 + vbroadcasti64x4 800(%r11), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm7, %zmm6, %zmm9 + vbroadcasti64x4 832(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm7, %zmm6, %zmm16 + vmovdqa64 %zmm16, %zmm7 + vbroadcasti64x4 864(%r11), %zmm13 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm4 + vpsubw %zmm6, %zmm7, %zmm6 + vpsubw %zmm4, %zmm8, %zmm5 + vpsubw %zmm6, %zmm9, %zmm7 + vpaddw %zmm4, %zmm8, %zmm8 + vpaddw %zmm6, %zmm9, %zmm9 + vbroadcasti64x4 896(%r11), %zmm10 + vbroadcasti64x4 928(%r11), %zmm12 + vbroadcasti64x4 960(%r11), %zmm11 + vbroadcasti64x4 992(%r11), %zmm13 + vpunpcklqdq %zmm5, %zmm8, %zmm4 + vpunpckhqdq %zmm5, %zmm8, %zmm5 + vpunpcklqdq %zmm7, %zmm9, %zmm6 + vpunpckhqdq %zmm7, %zmm9, %zmm7 + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm24, %zmm23, %zmm8 + vbroadcasti64x4 1984(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm24, %zmm23, %zmm16 + vmovdqa64 %zmm16, %zmm24 + vbroadcasti64x4 2016(%r11), %zmm12 + vmovdqa64 %zmm17, %zmm9 + vpermi2q %zmm26, %zmm25, %zmm9 + vbroadcasti64x4 2048(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm26, %zmm25, %zmm16 + vmovdqa64 %zmm16, %zmm26 + vbroadcasti64x4 2080(%r11), %zmm13 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm23 + vpsubw %zmm25, %zmm26, %zmm25 + vpsubw %zmm23, %zmm8, %zmm24 + vpsubw %zmm25, %zmm9, %zmm26 + vpaddw %zmm23, %zmm8, %zmm8 + vpaddw %zmm25, %zmm9, %zmm9 + vbroadcasti64x4 2112(%r11), %zmm10 + vbroadcasti64x4 2144(%r11), %zmm12 + vbroadcasti64x4 2176(%r11), %zmm11 + vbroadcasti64x4 2208(%r11), %zmm13 + vpunpcklqdq %zmm24, %zmm8, %zmm23 + vpunpckhqdq %zmm24, %zmm8, %zmm24 + vpunpcklqdq %zmm26, %zmm9, %zmm25 + vpunpckhqdq %zmm26, %zmm9, %zmm26 + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vbroadcasti64x4 1024(%r11), %zmm10 + vbroadcasti64x4 1056(%r11), %zmm12 + vbroadcasti64x4 1088(%r11), %zmm11 + vbroadcasti64x4 1120(%r11), %zmm13 + vpsllq $32, %zmm1, %zmm8 + vpsrlq $32, %zmm0, %zmm9 + vpblendmd %zmm8, %zmm0, %zmm0{%k1} + vpblendmd %zmm9, %zmm1, %zmm1{%k2} + vpsllq $32, %zmm3, %zmm8 + vpsrlq $32, %zmm2, %zmm9 + vpblendmd %zmm8, %zmm2, %zmm2{%k1} + vpblendmd %zmm9, %zmm3, %zmm3{%k2} + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm1, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vpsubw %zmm8, %zmm0, %zmm1 + vpsubw %zmm9, %zmm2, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm2, %zmm2 + vbroadcasti64x4 2240(%r11), %zmm10 + vbroadcasti64x4 2272(%r11), %zmm12 + vbroadcasti64x4 2304(%r11), %zmm11 + vbroadcasti64x4 2336(%r11), %zmm13 + vpsllq $32, %zmm20, %zmm8 + vpsrlq $32, %zmm19, %zmm9 + vpblendmd %zmm8, %zmm19, %zmm19{%k1} + vpblendmd %zmm9, %zmm20, %zmm20{%k2} + vpsllq $32, %zmm22, %zmm8 + vpsrlq $32, %zmm21, %zmm9 + vpblendmd %zmm8, %zmm21, %zmm21{%k1} + vpblendmd %zmm9, %zmm22, %zmm22{%k2} + vpmullw %zmm12, %zmm20, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm20, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vpsubw %zmm8, %zmm19, %zmm20 + vpsubw %zmm9, %zmm21, %zmm22 + vpaddw %zmm8, %zmm19, %zmm19 + vpaddw %zmm9, %zmm21, %zmm21 + vbroadcasti64x4 1152(%r11), %zmm10 + vbroadcasti64x4 1184(%r11), %zmm12 + vbroadcasti64x4 1216(%r11), %zmm11 + vbroadcasti64x4 1248(%r11), %zmm13 + vpsllq $32, %zmm5, %zmm8 + vpsrlq $32, %zmm4, %zmm9 + vpblendmd %zmm8, %zmm4, %zmm4{%k1} + vpblendmd %zmm9, %zmm5, %zmm5{%k2} + vpsllq $32, %zmm7, %zmm8 + vpsrlq $32, %zmm6, %zmm9 + vpblendmd %zmm8, %zmm6, %zmm6{%k1} + vpblendmd %zmm9, %zmm7, %zmm7{%k2} + vpmullw %zmm12, %zmm5, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm5, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vpsubw %zmm8, %zmm4, %zmm5 + vpsubw %zmm9, %zmm6, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm6, %zmm6 + vbroadcasti64x4 2368(%r11), %zmm10 + vbroadcasti64x4 2400(%r11), %zmm12 + vbroadcasti64x4 2432(%r11), %zmm11 + vbroadcasti64x4 2464(%r11), %zmm13 + vpsllq $32, %zmm24, %zmm8 + vpsrlq $32, %zmm23, %zmm9 + vpblendmd %zmm8, %zmm23, %zmm23{%k1} + vpblendmd %zmm9, %zmm24, %zmm24{%k2} + vpsllq $32, %zmm26, %zmm8 + vpsrlq $32, %zmm25, %zmm9 + vpblendmd %zmm8, %zmm25, %zmm25{%k1} + vpblendmd %zmm9, %zmm26, %zmm26{%k2} + vpmullw %zmm12, %zmm24, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm24, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vpsubw %zmm8, %zmm23, %zmm24 + vpsubw %zmm9, %zmm25, %zmm26 + vpaddw %zmm8, %zmm23, %zmm23 + vpaddw %zmm9, %zmm25, %zmm25 + vpunpckldq %zmm1, %zmm0, %zmm8 + vpunpckhdq %zmm1, %zmm0, %zmm9 + vmovdqa64 %zmm17, %zmm0 + vpermi2q %zmm9, %zmm8, %zmm0 + vmovdqa64 %zmm18, %zmm1 + vpermi2q %zmm9, %zmm8, %zmm1 + vpunpckldq %zmm3, %zmm2, %zmm8 + vpunpckhdq %zmm3, %zmm2, %zmm9 + vmovdqa64 %zmm17, %zmm2 + vpermi2q %zmm9, %zmm8, %zmm2 + vmovdqa64 %zmm18, %zmm3 + vpermi2q %zmm9, %zmm8, %zmm3 + vpunpckldq %zmm20, %zmm19, %zmm8 + vpunpckhdq %zmm20, %zmm19, %zmm9 + vmovdqa64 %zmm17, %zmm19 + vpermi2q %zmm9, %zmm8, %zmm19 + vmovdqa64 %zmm18, %zmm20 + vpermi2q %zmm9, %zmm8, %zmm20 + vpunpckldq %zmm22, %zmm21, %zmm8 + vpunpckhdq %zmm22, %zmm21, %zmm9 + vmovdqa64 %zmm17, %zmm21 + vpermi2q %zmm9, %zmm8, %zmm21 + vmovdqa64 %zmm18, %zmm22 + vpermi2q %zmm9, %zmm8, %zmm22 + vpunpckldq %zmm5, %zmm4, %zmm8 + vpunpckhdq %zmm5, %zmm4, %zmm9 + vmovdqa64 %zmm17, %zmm4 + vpermi2q %zmm9, %zmm8, %zmm4 + vmovdqa64 %zmm18, %zmm5 + vpermi2q %zmm9, %zmm8, %zmm5 + vpunpckldq %zmm7, %zmm6, %zmm8 + vpunpckhdq %zmm7, %zmm6, %zmm9 + vmovdqa64 %zmm17, %zmm6 + vpermi2q %zmm9, %zmm8, %zmm6 + vmovdqa64 %zmm18, %zmm7 + vpermi2q %zmm9, %zmm8, %zmm7 + vpunpckldq %zmm24, %zmm23, %zmm8 + vpunpckhdq %zmm24, %zmm23, %zmm9 + vmovdqa64 %zmm17, %zmm23 + vpermi2q %zmm9, %zmm8, %zmm23 + vmovdqa64 %zmm18, %zmm24 + vpermi2q %zmm9, %zmm8, %zmm24 + vpunpckldq %zmm26, %zmm25, %zmm8 + vpunpckhdq %zmm26, %zmm25, %zmm9 + vmovdqa64 %zmm17, %zmm25 + vpermi2q %zmm9, %zmm8, %zmm25 + vmovdqa64 %zmm18, %zmm26 + vpermi2q %zmm9, %zmm8, %zmm26 + vpmulhw %zmm15, %zmm0, %zmm8 + vpmulhw %zmm15, %zmm1, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm0, %zmm8 + vpsubw %zmm9, %zmm1, %zmm9 + vmovdqu64 %ymm8, (%r9) + vextracti64x4 $0x01, %zmm8, (%r9) + vmovdqu64 %ymm9, 32(%r9) + vextracti64x4 $0x01, %zmm9, 32(%r9) + vpmulhw %zmm15, %zmm2, %zmm8 + vpmulhw %zmm15, %zmm3, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm8 + vpsubw %zmm9, %zmm3, %zmm9 + vmovdqu64 %ymm8, 64(%r9) + vextracti64x4 $0x01, %zmm8, 64(%r9) + vmovdqu64 %ymm9, 96(%r9) + vextracti64x4 $0x01, %zmm9, 96(%r9) + vpmulhw %zmm15, %zmm19, %zmm8 + vpmulhw %zmm15, %zmm20, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm8 + vpsubw %zmm9, %zmm20, %zmm9 + vmovdqu64 %ymm8, 256(%r9) + vextracti64x4 $0x01, %zmm8, 256(%r9) + vmovdqu64 %ymm9, 288(%r9) + vextracti64x4 $0x01, %zmm9, 288(%r9) + vpmulhw %zmm15, %zmm21, %zmm8 + vpmulhw %zmm15, %zmm22, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm8 + vpsubw %zmm9, %zmm22, %zmm9 + vmovdqu64 %ymm8, 320(%r9) + vextracti64x4 $0x01, %zmm8, 320(%r9) + vmovdqu64 %ymm9, 352(%r9) + vextracti64x4 $0x01, %zmm9, 352(%r9) + vpmulhw %zmm15, %zmm4, %zmm8 + vpmulhw %zmm15, %zmm5, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm8 + vpsubw %zmm9, %zmm5, %zmm9 + vmovdqu64 %ymm8, 128(%r9) + vextracti64x4 $0x01, %zmm8, 128(%r9) + vmovdqu64 %ymm9, 160(%r9) + vextracti64x4 $0x01, %zmm9, 160(%r9) + vpmulhw %zmm15, %zmm6, %zmm8 + vpmulhw %zmm15, %zmm7, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm8 + vpsubw %zmm9, %zmm7, %zmm9 + vmovdqu64 %ymm8, 192(%r9) + vextracti64x4 $0x01, %zmm8, 192(%r9) + vmovdqu64 %ymm9, 224(%r9) + vextracti64x4 $0x01, %zmm9, 224(%r9) + vpmulhw %zmm15, %zmm23, %zmm8 + vpmulhw %zmm15, %zmm24, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm8 + vpsubw %zmm9, %zmm24, %zmm9 + vmovdqu64 %ymm8, 384(%r9) + vextracti64x4 $0x01, %zmm8, 384(%r9) + vmovdqu64 %ymm9, 416(%r9) + vextracti64x4 $0x01, %zmm9, 416(%r9) + vpmulhw %zmm15, %zmm25, %zmm8 + vpmulhw %zmm15, %zmm26, %zmm9 + vpsraw $10, %zmm8, %zmm8 + vpsraw $10, %zmm9, %zmm9 + vpmullw %zmm14, %zmm8, %zmm8 + vpmullw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm8 + vpsubw %zmm9, %zmm26, %zmm9 + vmovdqu64 %ymm8, 448(%r9) + vextracti64x4 $0x01, %zmm8, 448(%r9) + vmovdqu64 %ymm9, 480(%r9) + vextracti64x4 $0x01, %zmm9, 480(%r9) +L_decap_avx512_bp_done: + movq $0xf301, %r12 + vmovd %r12d, %xmm12 + vpbroadcastw %xmm12, %zmm12 + movslq %r8d, %rax + leaq L_mlkem_avx512_zetas_basemul(%rip), %r11 + vmovdqu (%rdi), %ymm2 + vinserti64x4 $0x01, 64(%rdi), %zmm2, %zmm2 + vmovdqu 32(%rdi), %ymm3 + vinserti64x4 $0x01, 96(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%rdx), %ymm4 + vinserti64x4 $0x01, 64(%rdx), %zmm4, %zmm4 + vmovdqu 32(%rdx), %ymm5 + vinserti64x4 $0x01, 96(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%r11), %ymm10 + vinserti64x4 $0x01, 64(%r11), %zmm10, %zmm10 + vmovdqu 32(%r11), %ymm11 + vinserti64x4 $0x01, 96(%r11), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, (%rsi) + vextracti64x4 $0x01, %zmm0, 64(%rsi) + vmovdqu %ymm1, 32(%rsi) + vextracti64x4 $0x01, %zmm1, 96(%rsi) + vmovdqu 128(%rdi), %ymm2 + vinserti64x4 $0x01, 192(%rdi), %zmm2, %zmm2 + vmovdqu 160(%rdi), %ymm3 + vinserti64x4 $0x01, 224(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%rdx), %ymm4 + vinserti64x4 $0x01, 192(%rdx), %zmm4, %zmm4 + vmovdqu 160(%rdx), %ymm5 + vinserti64x4 $0x01, 224(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%r11), %ymm10 + vinserti64x4 $0x01, 192(%r11), %zmm10, %zmm10 + vmovdqu 160(%r11), %ymm11 + vinserti64x4 $0x01, 224(%r11), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 128(%rsi) + vextracti64x4 $0x01, %zmm0, 192(%rsi) + vmovdqu %ymm1, 160(%rsi) + vextracti64x4 $0x01, %zmm1, 224(%rsi) + vmovdqu 256(%rdi), %ymm2 + vinserti64x4 $0x01, 320(%rdi), %zmm2, %zmm2 + vmovdqu 288(%rdi), %ymm3 + vinserti64x4 $0x01, 352(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%rdx), %ymm4 + vinserti64x4 $0x01, 320(%rdx), %zmm4, %zmm4 + vmovdqu 288(%rdx), %ymm5 + vinserti64x4 $0x01, 352(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%r11), %ymm10 + vinserti64x4 $0x01, 320(%r11), %zmm10, %zmm10 + vmovdqu 288(%r11), %ymm11 + vinserti64x4 $0x01, 352(%r11), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 256(%rsi) + vextracti64x4 $0x01, %zmm0, 320(%rsi) + vmovdqu %ymm1, 288(%rsi) + vextracti64x4 $0x01, %zmm1, 352(%rsi) + vmovdqu 384(%rdi), %ymm2 + vinserti64x4 $0x01, 448(%rdi), %zmm2, %zmm2 + vmovdqu 416(%rdi), %ymm3 + vinserti64x4 $0x01, 480(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%rdx), %ymm4 + vinserti64x4 $0x01, 448(%rdx), %zmm4, %zmm4 + vmovdqu 416(%rdx), %ymm5 + vinserti64x4 $0x01, 480(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%r11), %ymm10 + vinserti64x4 $0x01, 448(%r11), %zmm10, %zmm10 + vmovdqu 416(%r11), %ymm11 + vinserti64x4 $0x01, 480(%r11), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 384(%rsi) + vextracti64x4 $0x01, %zmm0, 448(%rsi) + vmovdqu %ymm1, 416(%rsi) + vextracti64x4 $0x01, %zmm1, 480(%rsi) + addq $0x200, %rdi + addq $0x200, %rdx + subq $2, %rax + jz L_pointwise_acc_mont_end_decap_avx512 +L_pointwise_acc_mont_start_decap_avx512: + leaq L_mlkem_avx512_zetas_basemul(%rip), %r11 + vmovdqu (%rdi), %ymm2 + vinserti64x4 $0x01, 64(%rdi), %zmm2, %zmm2 + vmovdqu 32(%rdi), %ymm3 + vinserti64x4 $0x01, 96(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%rdx), %ymm4 + vinserti64x4 $0x01, 64(%rdx), %zmm4, %zmm4 + vmovdqu 32(%rdx), %ymm5 + vinserti64x4 $0x01, 96(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%r11), %ymm10 + vinserti64x4 $0x01, 64(%r11), %zmm10, %zmm10 + vmovdqu 32(%r11), %ymm11 + vinserti64x4 $0x01, 96(%r11), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu (%rsi), %ymm6 + vinserti64x4 $0x01, 64(%rsi), %zmm6, %zmm6 + vmovdqu 32(%rsi), %ymm7 + vinserti64x4 $0x01, 96(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, (%rsi) + vextracti64x4 $0x01, %zmm0, 64(%rsi) + vmovdqu %ymm1, 32(%rsi) + vextracti64x4 $0x01, %zmm1, 96(%rsi) + vmovdqu 128(%rdi), %ymm2 + vinserti64x4 $0x01, 192(%rdi), %zmm2, %zmm2 + vmovdqu 160(%rdi), %ymm3 + vinserti64x4 $0x01, 224(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%rdx), %ymm4 + vinserti64x4 $0x01, 192(%rdx), %zmm4, %zmm4 + vmovdqu 160(%rdx), %ymm5 + vinserti64x4 $0x01, 224(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%r11), %ymm10 + vinserti64x4 $0x01, 192(%r11), %zmm10, %zmm10 + vmovdqu 160(%r11), %ymm11 + vinserti64x4 $0x01, 224(%r11), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 128(%rsi), %ymm6 + vinserti64x4 $0x01, 192(%rsi), %zmm6, %zmm6 + vmovdqu 160(%rsi), %ymm7 + vinserti64x4 $0x01, 224(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 128(%rsi) + vextracti64x4 $0x01, %zmm0, 192(%rsi) + vmovdqu %ymm1, 160(%rsi) + vextracti64x4 $0x01, %zmm1, 224(%rsi) + vmovdqu 256(%rdi), %ymm2 + vinserti64x4 $0x01, 320(%rdi), %zmm2, %zmm2 + vmovdqu 288(%rdi), %ymm3 + vinserti64x4 $0x01, 352(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%rdx), %ymm4 + vinserti64x4 $0x01, 320(%rdx), %zmm4, %zmm4 + vmovdqu 288(%rdx), %ymm5 + vinserti64x4 $0x01, 352(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%r11), %ymm10 + vinserti64x4 $0x01, 320(%r11), %zmm10, %zmm10 + vmovdqu 288(%r11), %ymm11 + vinserti64x4 $0x01, 352(%r11), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 256(%rsi), %ymm6 + vinserti64x4 $0x01, 320(%rsi), %zmm6, %zmm6 + vmovdqu 288(%rsi), %ymm7 + vinserti64x4 $0x01, 352(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 256(%rsi) + vextracti64x4 $0x01, %zmm0, 320(%rsi) + vmovdqu %ymm1, 288(%rsi) + vextracti64x4 $0x01, %zmm1, 352(%rsi) + vmovdqu 384(%rdi), %ymm2 + vinserti64x4 $0x01, 448(%rdi), %zmm2, %zmm2 + vmovdqu 416(%rdi), %ymm3 + vinserti64x4 $0x01, 480(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%rdx), %ymm4 + vinserti64x4 $0x01, 448(%rdx), %zmm4, %zmm4 + vmovdqu 416(%rdx), %ymm5 + vinserti64x4 $0x01, 480(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%r11), %ymm10 + vinserti64x4 $0x01, 448(%r11), %zmm10, %zmm10 + vmovdqu 416(%r11), %ymm11 + vinserti64x4 $0x01, 480(%r11), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 384(%rsi), %ymm6 + vinserti64x4 $0x01, 448(%rsi), %zmm6, %zmm6 + vmovdqu 416(%rsi), %ymm7 + vinserti64x4 $0x01, 480(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vmovdqu %ymm0, 384(%rsi) + vextracti64x4 $0x01, %zmm0, 448(%rsi) + vmovdqu %ymm1, 416(%rsi) + vextracti64x4 $0x01, %zmm1, 480(%rsi) + addq $0x200, %rdi + addq $0x200, %rdx + subq $0x01, %rax + jg L_pointwise_acc_mont_start_decap_avx512 +L_pointwise_acc_mont_end_decap_avx512: + leaq L_mlkem_avx512_zetas_basemul(%rip), %r11 + vmovdqu (%rdi), %ymm2 + vinserti64x4 $0x01, 64(%rdi), %zmm2, %zmm2 + vmovdqu 32(%rdi), %ymm3 + vinserti64x4 $0x01, 96(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu (%rdx), %ymm4 + vinserti64x4 $0x01, 64(%rdx), %zmm4, %zmm4 + vmovdqu 32(%rdx), %ymm5 + vinserti64x4 $0x01, 96(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu (%r11), %ymm10 + vinserti64x4 $0x01, 64(%r11), %zmm10, %zmm10 + vmovdqu 32(%r11), %ymm11 + vinserti64x4 $0x01, 96(%r11), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu (%rsi), %ymm6 + vinserti64x4 $0x01, 64(%rsi), %zmm6, %zmm6 + vmovdqu 32(%rsi), %ymm7 + vinserti64x4 $0x01, 96(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, (%rsi) + vextracti64x4 $0x01, %zmm0, 64(%rsi) + vmovdqu %ymm1, 32(%rsi) + vextracti64x4 $0x01, %zmm1, 96(%rsi) + vmovdqu 128(%rdi), %ymm2 + vinserti64x4 $0x01, 192(%rdi), %zmm2, %zmm2 + vmovdqu 160(%rdi), %ymm3 + vinserti64x4 $0x01, 224(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 128(%rdx), %ymm4 + vinserti64x4 $0x01, 192(%rdx), %zmm4, %zmm4 + vmovdqu 160(%rdx), %ymm5 + vinserti64x4 $0x01, 224(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 128(%r11), %ymm10 + vinserti64x4 $0x01, 192(%r11), %zmm10, %zmm10 + vmovdqu 160(%r11), %ymm11 + vinserti64x4 $0x01, 224(%r11), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 128(%rsi), %ymm6 + vinserti64x4 $0x01, 192(%rsi), %zmm6, %zmm6 + vmovdqu 160(%rsi), %ymm7 + vinserti64x4 $0x01, 224(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 128(%rsi) + vextracti64x4 $0x01, %zmm0, 192(%rsi) + vmovdqu %ymm1, 160(%rsi) + vextracti64x4 $0x01, %zmm1, 224(%rsi) + vmovdqu 256(%rdi), %ymm2 + vinserti64x4 $0x01, 320(%rdi), %zmm2, %zmm2 + vmovdqu 288(%rdi), %ymm3 + vinserti64x4 $0x01, 352(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 256(%rdx), %ymm4 + vinserti64x4 $0x01, 320(%rdx), %zmm4, %zmm4 + vmovdqu 288(%rdx), %ymm5 + vinserti64x4 $0x01, 352(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 256(%r11), %ymm10 + vinserti64x4 $0x01, 320(%r11), %zmm10, %zmm10 + vmovdqu 288(%r11), %ymm11 + vinserti64x4 $0x01, 352(%r11), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 256(%rsi), %ymm6 + vinserti64x4 $0x01, 320(%rsi), %zmm6, %zmm6 + vmovdqu 288(%rsi), %ymm7 + vinserti64x4 $0x01, 352(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 256(%rsi) + vextracti64x4 $0x01, %zmm0, 320(%rsi) + vmovdqu %ymm1, 288(%rsi) + vextracti64x4 $0x01, %zmm1, 352(%rsi) + vmovdqu 384(%rdi), %ymm2 + vinserti64x4 $0x01, 448(%rdi), %zmm2, %zmm2 + vmovdqu 416(%rdi), %ymm3 + vinserti64x4 $0x01, 480(%rdi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm6 + vpsrld $16, %zmm2, %zmm7 + vpblendmw %zmm6, %zmm2, %zmm2{%k3} + vpblendmw %zmm7, %zmm3, %zmm3{%k4} + vmovdqu 384(%rdx), %ymm4 + vinserti64x4 $0x01, 448(%rdx), %zmm4, %zmm4 + vmovdqu 416(%rdx), %ymm5 + vinserti64x4 $0x01, 480(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm6 + vpsrld $16, %zmm4, %zmm7 + vpblendmw %zmm6, %zmm4, %zmm4{%k3} + vpblendmw %zmm7, %zmm5, %zmm5{%k4} + vmovdqu 384(%r11), %ymm10 + vinserti64x4 $0x01, 448(%r11), %zmm10, %zmm10 + vmovdqu 416(%r11), %ymm11 + vinserti64x4 $0x01, 480(%r11), %zmm11, %zmm11 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm6 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm7 + vpmullw %zmm12, %zmm0, %zmm8 + vpmullw %zmm12, %zmm1, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm0 + vpsubw %zmm9, %zmm7, %zmm1 + vpmullw %zmm11, %zmm0, %zmm6 + vpmulhw %zmm10, %zmm0, %zmm7 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm6, %zmm7, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm6 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm7 + vpmullw %zmm12, %zmm1, %zmm8 + vpmullw %zmm12, %zmm2, %zmm9 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm1 + vpsubw %zmm9, %zmm7, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 384(%rsi), %ymm6 + vinserti64x4 $0x01, 448(%rsi), %zmm6, %zmm6 + vmovdqu 416(%rsi), %ymm7 + vinserti64x4 $0x01, 480(%rsi), %zmm7, %zmm7 + vpaddw %zmm6, %zmm0, %zmm0 + vpaddw %zmm7, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm6 + vpsrld $16, %zmm0, %zmm7 + vpblendmw %zmm6, %zmm0, %zmm0{%k3} + vpblendmw %zmm7, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 384(%rsi) + vextracti64x4 $0x01, %zmm0, 448(%rsi) + vmovdqu %ymm1, 416(%rsi) + vextracti64x4 $0x01, %zmm1, 480(%rsi) + addq $0x200, %rdi + leaq L_mlkem_avx512_zetas_inv(%rip), %r11 + vmovdqu64 (%rsi), %ymm0 + vinserti64x4 $0x01, (%rsi), %zmm0, %zmm0 + vmovdqu64 32(%rsi), %ymm1 + vinserti64x4 $0x01, 32(%rsi), %zmm1, %zmm1 + vmovdqu64 64(%rsi), %ymm2 + vinserti64x4 $0x01, 64(%rsi), %zmm2, %zmm2 + vmovdqu64 96(%rsi), %ymm3 + vinserti64x4 $0x01, 96(%rsi), %zmm3, %zmm3 + vmovdqu64 128(%rsi), %ymm4 + vinserti64x4 $0x01, 128(%rsi), %zmm4, %zmm4 + vmovdqu64 160(%rsi), %ymm5 + vinserti64x4 $0x01, 160(%rsi), %zmm5, %zmm5 + vmovdqu64 192(%rsi), %ymm6 + vinserti64x4 $0x01, 192(%rsi), %zmm6, %zmm6 + vmovdqu64 224(%rsi), %ymm7 + vinserti64x4 $0x01, 224(%rsi), %zmm7, %zmm7 + vmovdqu64 256(%rsi), %ymm19 + vinserti64x4 $0x01, 256(%rsi), %zmm19, %zmm19 + vmovdqu64 288(%rsi), %ymm20 + vinserti64x4 $0x01, 288(%rsi), %zmm20, %zmm20 + vmovdqu64 320(%rsi), %ymm21 + vinserti64x4 $0x01, 320(%rsi), %zmm21, %zmm21 + vmovdqu64 352(%rsi), %ymm22 + vinserti64x4 $0x01, 352(%rsi), %zmm22, %zmm22 + vmovdqu64 384(%rsi), %ymm23 + vinserti64x4 $0x01, 384(%rsi), %zmm23, %zmm23 + vmovdqu64 416(%rsi), %ymm24 + vinserti64x4 $0x01, 416(%rsi), %zmm24, %zmm24 + vmovdqu64 448(%rsi), %ymm25 + vinserti64x4 $0x01, 448(%rsi), %zmm25, %zmm25 + vmovdqu64 480(%rsi), %ymm26 + vinserti64x4 $0x01, 480(%rsi), %zmm26, %zmm26 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm1, %zmm0, %zmm8 + vbroadcasti64x4 (%r11), %zmm10 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm1, %zmm0, %zmm9 + vbroadcasti64x4 32(%r11), %zmm12 + vpsllq $32, %zmm9, %zmm0 + vpsrlq $32, %zmm8, %zmm1 + vpblendmd %zmm0, %zmm8, %zmm0{%k1} + vpblendmd %zmm1, %zmm9, %zmm1{%k2} + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm3, %zmm2, %zmm8 + vbroadcasti64x4 64(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm3, %zmm2, %zmm9 + vbroadcasti64x4 96(%r11), %zmm13 + vpsllq $32, %zmm9, %zmm2 + vpsrlq $32, %zmm8, %zmm3 + vpblendmd %zmm2, %zmm8, %zmm2{%k1} + vpblendmd %zmm3, %zmm9, %zmm3{%k2} + vpaddw %zmm1, %zmm0, %zmm8 + vpaddw %zmm3, %zmm2, %zmm9 + vpsubw %zmm1, %zmm0, %zmm1 + vpsubw %zmm3, %zmm2, %zmm3 + vpmulhw %zmm15, %zmm8, %zmm0 + vpmulhw %zmm15, %zmm9, %zmm2 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm2, %zmm2 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm8, %zmm8 + vpsubw %zmm2, %zmm9, %zmm9 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm1 + vpsubw %zmm2, %zmm3, %zmm3 + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm20, %zmm19, %zmm27 + vbroadcasti64x4 1216(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm20, %zmm19, %zmm28 + vbroadcasti64x4 1248(%r11), %zmm12 + vpsllq $32, %zmm28, %zmm19 + vpsrlq $32, %zmm27, %zmm20 + vpblendmd %zmm19, %zmm27, %zmm19{%k1} + vpblendmd %zmm20, %zmm28, %zmm20{%k2} + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm22, %zmm21, %zmm27 + vbroadcasti64x4 1280(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm22, %zmm21, %zmm28 + vbroadcasti64x4 1312(%r11), %zmm13 + vpsllq $32, %zmm28, %zmm21 + vpsrlq $32, %zmm27, %zmm22 + vpblendmd %zmm21, %zmm27, %zmm21{%k1} + vpblendmd %zmm22, %zmm28, %zmm22{%k2} + vpaddw %zmm20, %zmm19, %zmm27 + vpaddw %zmm22, %zmm21, %zmm28 + vpsubw %zmm20, %zmm19, %zmm20 + vpsubw %zmm22, %zmm21, %zmm22 + vpmulhw %zmm15, %zmm27, %zmm19 + vpmulhw %zmm15, %zmm28, %zmm21 + vpsraw $10, %zmm19, %zmm19 + vpsraw $10, %zmm21, %zmm21 + vpmullw %zmm14, %zmm19, %zmm19 + vpmullw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm27, %zmm27 + vpsubw %zmm21, %zmm28, %zmm28 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm20 + vpsubw %zmm21, %zmm22, %zmm22 + vbroadcasti64x4 128(%r11), %zmm10 + vbroadcasti64x4 160(%r11), %zmm12 + vbroadcasti64x4 192(%r11), %zmm11 + vbroadcasti64x4 224(%r11), %zmm13 + vpunpckldq %zmm1, %zmm8, %zmm0 + vpunpckhdq %zmm1, %zmm8, %zmm1 + vpunpckldq %zmm3, %zmm9, %zmm2 + vpunpckhdq %zmm3, %zmm9, %zmm3 + vpaddw %zmm1, %zmm0, %zmm8 + vpaddw %zmm3, %zmm2, %zmm9 + vpsubw %zmm1, %zmm0, %zmm1 + vpsubw %zmm3, %zmm2, %zmm3 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm1 + vpsubw %zmm2, %zmm3, %zmm3 + vbroadcasti64x4 1344(%r11), %zmm10 + vbroadcasti64x4 1376(%r11), %zmm12 + vbroadcasti64x4 1408(%r11), %zmm11 + vbroadcasti64x4 1440(%r11), %zmm13 + vpunpckldq %zmm20, %zmm27, %zmm19 + vpunpckhdq %zmm20, %zmm27, %zmm20 + vpunpckldq %zmm22, %zmm28, %zmm21 + vpunpckhdq %zmm22, %zmm28, %zmm22 + vpaddw %zmm20, %zmm19, %zmm27 + vpaddw %zmm22, %zmm21, %zmm28 + vpsubw %zmm20, %zmm19, %zmm20 + vpsubw %zmm22, %zmm21, %zmm22 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm20 + vpsubw %zmm21, %zmm22, %zmm22 + vbroadcasti64x4 256(%r11), %zmm10 + vbroadcasti64x4 288(%r11), %zmm12 + vbroadcasti64x4 320(%r11), %zmm11 + vbroadcasti64x4 352(%r11), %zmm13 + vpunpcklqdq %zmm1, %zmm8, %zmm0 + vpunpckhqdq %zmm1, %zmm8, %zmm1 + vpunpcklqdq %zmm3, %zmm9, %zmm2 + vpunpckhqdq %zmm3, %zmm9, %zmm3 + vpaddw %zmm1, %zmm0, %zmm8 + vpaddw %zmm3, %zmm2, %zmm9 + vpsubw %zmm1, %zmm0, %zmm1 + vpsubw %zmm3, %zmm2, %zmm3 + vpmulhw %zmm15, %zmm8, %zmm0 + vpmulhw %zmm15, %zmm9, %zmm2 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm2, %zmm2 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm8, %zmm8 + vpsubw %zmm2, %zmm9, %zmm9 + vpmullw %zmm12, %zmm1, %zmm0 + vpmullw %zmm13, %zmm3, %zmm2 + vpmulhw %zmm10, %zmm1, %zmm1 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm0, %zmm0 + vpmulhw %zmm14, %zmm2, %zmm2 + vpsubw %zmm0, %zmm1, %zmm1 + vpsubw %zmm2, %zmm3, %zmm3 + vbroadcasti64x4 1472(%r11), %zmm10 + vbroadcasti64x4 1504(%r11), %zmm12 + vbroadcasti64x4 1536(%r11), %zmm11 + vbroadcasti64x4 1568(%r11), %zmm13 + vpunpcklqdq %zmm20, %zmm27, %zmm19 + vpunpckhqdq %zmm20, %zmm27, %zmm20 + vpunpcklqdq %zmm22, %zmm28, %zmm21 + vpunpckhqdq %zmm22, %zmm28, %zmm22 + vpaddw %zmm20, %zmm19, %zmm27 + vpaddw %zmm22, %zmm21, %zmm28 + vpsubw %zmm20, %zmm19, %zmm20 + vpsubw %zmm22, %zmm21, %zmm22 + vpmulhw %zmm15, %zmm27, %zmm19 + vpmulhw %zmm15, %zmm28, %zmm21 + vpsraw $10, %zmm19, %zmm19 + vpsraw $10, %zmm21, %zmm21 + vpmullw %zmm14, %zmm19, %zmm19 + vpmullw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm27, %zmm27 + vpsubw %zmm21, %zmm28, %zmm28 + vpmullw %zmm12, %zmm20, %zmm19 + vpmullw %zmm13, %zmm22, %zmm21 + vpmulhw %zmm10, %zmm20, %zmm20 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm21, %zmm21 + vpsubw %zmm19, %zmm20, %zmm20 + vpsubw %zmm21, %zmm22, %zmm22 + vmovdqa64 %zmm17, %zmm0 + vpermi2q %zmm1, %zmm8, %zmm0 + vbroadcasti64x4 384(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm1, %zmm8, %zmm16 + vmovdqa64 %zmm16, %zmm1 + vbroadcasti64x4 416(%r11), %zmm12 + vmovdqa64 %zmm17, %zmm2 + vpermi2q %zmm3, %zmm9, %zmm2 + vbroadcasti64x4 448(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm3, %zmm9, %zmm16 + vmovdqa64 %zmm16, %zmm3 + vbroadcasti64x4 480(%r11), %zmm13 + vpsubw %zmm1, %zmm0, %zmm8 + vpsubw %zmm3, %zmm2, %zmm9 + vpaddw %zmm1, %zmm0, %zmm0 + vpaddw %zmm3, %zmm2, %zmm2 + vpmullw %zmm12, %zmm8, %zmm1 + vpmullw %zmm13, %zmm9, %zmm3 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm11, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm1, %zmm1 + vpmulhw %zmm14, %zmm3, %zmm3 + vpsubw %zmm1, %zmm8, %zmm1 + vpsubw %zmm3, %zmm9, %zmm3 + vmovdqa64 %zmm17, %zmm19 + vpermi2q %zmm20, %zmm27, %zmm19 + vbroadcasti64x4 1600(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm20, %zmm27, %zmm16 + vmovdqa64 %zmm16, %zmm20 + vbroadcasti64x4 1632(%r11), %zmm12 + vmovdqa64 %zmm17, %zmm21 + vpermi2q %zmm22, %zmm28, %zmm21 + vbroadcasti64x4 1664(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm22, %zmm28, %zmm16 + vmovdqa64 %zmm16, %zmm22 + vbroadcasti64x4 1696(%r11), %zmm13 + vpsubw %zmm20, %zmm19, %zmm27 + vpsubw %zmm22, %zmm21, %zmm28 + vpaddw %zmm20, %zmm19, %zmm19 + vpaddw %zmm22, %zmm21, %zmm21 + vpmullw %zmm12, %zmm27, %zmm20 + vpmullw %zmm13, %zmm28, %zmm22 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm11, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm22, %zmm22 + vpsubw %zmm20, %zmm27, %zmm20 + vpsubw %zmm22, %zmm28, %zmm22 + vbroadcasti64x4 512(%r11), %zmm10 + vbroadcasti64x4 544(%r11), %zmm12 + vpaddw %zmm2, %zmm0, %zmm8 + vpaddw %zmm3, %zmm1, %zmm9 + vpsubw %zmm2, %zmm0, %zmm2 + vpsubw %zmm3, %zmm1, %zmm3 + vpmulhw %zmm15, %zmm8, %zmm0 + vpmulhw %zmm15, %zmm9, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm8, %zmm0 + vpsubw %zmm1, %zmm9, %zmm1 + vpmullw %zmm12, %zmm2, %zmm8 + vpmullw %zmm12, %zmm3, %zmm9 + vpmulhw %zmm10, %zmm2, %zmm2 + vpmulhw %zmm10, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm2 + vpsubw %zmm9, %zmm3, %zmm3 + vbroadcasti64x4 1728(%r11), %zmm10 + vbroadcasti64x4 1760(%r11), %zmm12 + vpaddw %zmm21, %zmm19, %zmm27 + vpaddw %zmm22, %zmm20, %zmm28 + vpsubw %zmm21, %zmm19, %zmm21 + vpsubw %zmm22, %zmm20, %zmm22 + vpmulhw %zmm15, %zmm27, %zmm19 + vpmulhw %zmm15, %zmm28, %zmm20 + vpsraw $10, %zmm19, %zmm19 + vpsraw $10, %zmm20, %zmm20 + vpmullw %zmm14, %zmm19, %zmm19 + vpmullw %zmm14, %zmm20, %zmm20 + vpsubw %zmm19, %zmm27, %zmm19 + vpsubw %zmm20, %zmm28, %zmm20 + vpmullw %zmm12, %zmm21, %zmm27 + vpmullw %zmm12, %zmm22, %zmm28 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm27, %zmm27 + vpmulhw %zmm14, %zmm28, %zmm28 + vpsubw %zmm27, %zmm21, %zmm21 + vpsubw %zmm28, %zmm22, %zmm22 + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm5, %zmm4, %zmm8 + vbroadcasti64x4 576(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm5, %zmm4, %zmm9 + vbroadcasti64x4 608(%r11), %zmm12 + vpsllq $32, %zmm9, %zmm4 + vpsrlq $32, %zmm8, %zmm5 + vpblendmd %zmm4, %zmm8, %zmm4{%k1} + vpblendmd %zmm5, %zmm9, %zmm5{%k2} + vmovdqa64 %zmm17, %zmm8 + vpermi2q %zmm7, %zmm6, %zmm8 + vbroadcasti64x4 640(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm9 + vpermi2q %zmm7, %zmm6, %zmm9 + vbroadcasti64x4 672(%r11), %zmm13 + vpsllq $32, %zmm9, %zmm6 + vpsrlq $32, %zmm8, %zmm7 + vpblendmd %zmm6, %zmm8, %zmm6{%k1} + vpblendmd %zmm7, %zmm9, %zmm7{%k2} + vpaddw %zmm5, %zmm4, %zmm8 + vpaddw %zmm7, %zmm6, %zmm9 + vpsubw %zmm5, %zmm4, %zmm5 + vpsubw %zmm7, %zmm6, %zmm7 + vpmulhw %zmm15, %zmm8, %zmm4 + vpmulhw %zmm15, %zmm9, %zmm6 + vpsraw $10, %zmm4, %zmm4 + vpsraw $10, %zmm6, %zmm6 + vpmullw %zmm14, %zmm4, %zmm4 + vpmullw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm8, %zmm8 + vpsubw %zmm6, %zmm9, %zmm9 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm5 + vpsubw %zmm6, %zmm7, %zmm7 + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm24, %zmm23, %zmm27 + vbroadcasti64x4 1792(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm24, %zmm23, %zmm28 + vbroadcasti64x4 1824(%r11), %zmm12 + vpsllq $32, %zmm28, %zmm23 + vpsrlq $32, %zmm27, %zmm24 + vpblendmd %zmm23, %zmm27, %zmm23{%k1} + vpblendmd %zmm24, %zmm28, %zmm24{%k2} + vmovdqa64 %zmm17, %zmm27 + vpermi2q %zmm26, %zmm25, %zmm27 + vbroadcasti64x4 1856(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm28 + vpermi2q %zmm26, %zmm25, %zmm28 + vbroadcasti64x4 1888(%r11), %zmm13 + vpsllq $32, %zmm28, %zmm25 + vpsrlq $32, %zmm27, %zmm26 + vpblendmd %zmm25, %zmm27, %zmm25{%k1} + vpblendmd %zmm26, %zmm28, %zmm26{%k2} + vpaddw %zmm24, %zmm23, %zmm27 + vpaddw %zmm26, %zmm25, %zmm28 + vpsubw %zmm24, %zmm23, %zmm24 + vpsubw %zmm26, %zmm25, %zmm26 + vpmulhw %zmm15, %zmm27, %zmm23 + vpmulhw %zmm15, %zmm28, %zmm25 + vpsraw $10, %zmm23, %zmm23 + vpsraw $10, %zmm25, %zmm25 + vpmullw %zmm14, %zmm23, %zmm23 + vpmullw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm27, %zmm27 + vpsubw %zmm25, %zmm28, %zmm28 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm24 + vpsubw %zmm25, %zmm26, %zmm26 + vbroadcasti64x4 704(%r11), %zmm10 + vbroadcasti64x4 736(%r11), %zmm12 + vbroadcasti64x4 768(%r11), %zmm11 + vbroadcasti64x4 800(%r11), %zmm13 + vpunpckldq %zmm5, %zmm8, %zmm4 + vpunpckhdq %zmm5, %zmm8, %zmm5 + vpunpckldq %zmm7, %zmm9, %zmm6 + vpunpckhdq %zmm7, %zmm9, %zmm7 + vpaddw %zmm5, %zmm4, %zmm8 + vpaddw %zmm7, %zmm6, %zmm9 + vpsubw %zmm5, %zmm4, %zmm5 + vpsubw %zmm7, %zmm6, %zmm7 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm5 + vpsubw %zmm6, %zmm7, %zmm7 + vbroadcasti64x4 1920(%r11), %zmm10 + vbroadcasti64x4 1952(%r11), %zmm12 + vbroadcasti64x4 1984(%r11), %zmm11 + vbroadcasti64x4 2016(%r11), %zmm13 + vpunpckldq %zmm24, %zmm27, %zmm23 + vpunpckhdq %zmm24, %zmm27, %zmm24 + vpunpckldq %zmm26, %zmm28, %zmm25 + vpunpckhdq %zmm26, %zmm28, %zmm26 + vpaddw %zmm24, %zmm23, %zmm27 + vpaddw %zmm26, %zmm25, %zmm28 + vpsubw %zmm24, %zmm23, %zmm24 + vpsubw %zmm26, %zmm25, %zmm26 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm24 + vpsubw %zmm25, %zmm26, %zmm26 + vbroadcasti64x4 832(%r11), %zmm10 + vbroadcasti64x4 864(%r11), %zmm12 + vbroadcasti64x4 896(%r11), %zmm11 + vbroadcasti64x4 928(%r11), %zmm13 + vpunpcklqdq %zmm5, %zmm8, %zmm4 + vpunpckhqdq %zmm5, %zmm8, %zmm5 + vpunpcklqdq %zmm7, %zmm9, %zmm6 + vpunpckhqdq %zmm7, %zmm9, %zmm7 + vpaddw %zmm5, %zmm4, %zmm8 + vpaddw %zmm7, %zmm6, %zmm9 + vpsubw %zmm5, %zmm4, %zmm5 + vpsubw %zmm7, %zmm6, %zmm7 + vpmulhw %zmm15, %zmm8, %zmm4 + vpmulhw %zmm15, %zmm9, %zmm6 + vpsraw $10, %zmm4, %zmm4 + vpsraw $10, %zmm6, %zmm6 + vpmullw %zmm14, %zmm4, %zmm4 + vpmullw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm8, %zmm8 + vpsubw %zmm6, %zmm9, %zmm9 + vpmullw %zmm12, %zmm5, %zmm4 + vpmullw %zmm13, %zmm7, %zmm6 + vpmulhw %zmm10, %zmm5, %zmm5 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm6, %zmm6 + vpsubw %zmm4, %zmm5, %zmm5 + vpsubw %zmm6, %zmm7, %zmm7 + vbroadcasti64x4 2048(%r11), %zmm10 + vbroadcasti64x4 2080(%r11), %zmm12 + vbroadcasti64x4 2112(%r11), %zmm11 + vbroadcasti64x4 2144(%r11), %zmm13 + vpunpcklqdq %zmm24, %zmm27, %zmm23 + vpunpckhqdq %zmm24, %zmm27, %zmm24 + vpunpcklqdq %zmm26, %zmm28, %zmm25 + vpunpckhqdq %zmm26, %zmm28, %zmm26 + vpaddw %zmm24, %zmm23, %zmm27 + vpaddw %zmm26, %zmm25, %zmm28 + vpsubw %zmm24, %zmm23, %zmm24 + vpsubw %zmm26, %zmm25, %zmm26 + vpmulhw %zmm15, %zmm27, %zmm23 + vpmulhw %zmm15, %zmm28, %zmm25 + vpsraw $10, %zmm23, %zmm23 + vpsraw $10, %zmm25, %zmm25 + vpmullw %zmm14, %zmm23, %zmm23 + vpmullw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm27, %zmm27 + vpsubw %zmm25, %zmm28, %zmm28 + vpmullw %zmm12, %zmm24, %zmm23 + vpmullw %zmm13, %zmm26, %zmm25 + vpmulhw %zmm10, %zmm24, %zmm24 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm25, %zmm25 + vpsubw %zmm23, %zmm24, %zmm24 + vpsubw %zmm25, %zmm26, %zmm26 + vmovdqa64 %zmm17, %zmm4 + vpermi2q %zmm5, %zmm8, %zmm4 + vbroadcasti64x4 960(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm5, %zmm8, %zmm16 + vmovdqa64 %zmm16, %zmm5 + vbroadcasti64x4 992(%r11), %zmm12 + vmovdqa64 %zmm17, %zmm6 + vpermi2q %zmm7, %zmm9, %zmm6 + vbroadcasti64x4 1024(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm7, %zmm9, %zmm16 + vmovdqa64 %zmm16, %zmm7 + vbroadcasti64x4 1056(%r11), %zmm13 + vpsubw %zmm5, %zmm4, %zmm8 + vpsubw %zmm7, %zmm6, %zmm9 + vpaddw %zmm5, %zmm4, %zmm4 + vpaddw %zmm7, %zmm6, %zmm6 + vpmullw %zmm12, %zmm8, %zmm5 + vpmullw %zmm13, %zmm9, %zmm7 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm11, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm7, %zmm7 + vpsubw %zmm5, %zmm8, %zmm5 + vpsubw %zmm7, %zmm9, %zmm7 + vmovdqa64 %zmm17, %zmm23 + vpermi2q %zmm24, %zmm27, %zmm23 + vbroadcasti64x4 2176(%r11), %zmm10 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm24, %zmm27, %zmm16 + vmovdqa64 %zmm16, %zmm24 + vbroadcasti64x4 2208(%r11), %zmm12 + vmovdqa64 %zmm17, %zmm25 + vpermi2q %zmm26, %zmm28, %zmm25 + vbroadcasti64x4 2240(%r11), %zmm11 + vmovdqa64 %zmm18, %zmm16 + vpermi2q %zmm26, %zmm28, %zmm16 + vmovdqa64 %zmm16, %zmm26 + vbroadcasti64x4 2272(%r11), %zmm13 + vpsubw %zmm24, %zmm23, %zmm27 + vpsubw %zmm26, %zmm25, %zmm28 + vpaddw %zmm24, %zmm23, %zmm23 + vpaddw %zmm26, %zmm25, %zmm25 + vpmullw %zmm12, %zmm27, %zmm24 + vpmullw %zmm13, %zmm28, %zmm26 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm11, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm26, %zmm26 + vpsubw %zmm24, %zmm27, %zmm24 + vpsubw %zmm26, %zmm28, %zmm26 + vbroadcasti64x4 1088(%r11), %zmm10 + vbroadcasti64x4 1120(%r11), %zmm12 + vpaddw %zmm6, %zmm4, %zmm8 + vpaddw %zmm7, %zmm5, %zmm9 + vpsubw %zmm6, %zmm4, %zmm6 + vpsubw %zmm7, %zmm5, %zmm7 + vpmulhw %zmm15, %zmm8, %zmm4 + vpmulhw %zmm15, %zmm9, %zmm5 + vpsraw $10, %zmm4, %zmm4 + vpsraw $10, %zmm5, %zmm5 + vpmullw %zmm14, %zmm4, %zmm4 + vpmullw %zmm14, %zmm5, %zmm5 + vpsubw %zmm4, %zmm8, %zmm4 + vpsubw %zmm5, %zmm9, %zmm5 + vpmullw %zmm12, %zmm6, %zmm8 + vpmullw %zmm12, %zmm7, %zmm9 + vpmulhw %zmm10, %zmm6, %zmm6 + vpmulhw %zmm10, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm6 + vpsubw %zmm9, %zmm7, %zmm7 + vbroadcasti64x4 2304(%r11), %zmm10 + vbroadcasti64x4 2336(%r11), %zmm12 + vpaddw %zmm25, %zmm23, %zmm27 + vpaddw %zmm26, %zmm24, %zmm28 + vpsubw %zmm25, %zmm23, %zmm25 + vpsubw %zmm26, %zmm24, %zmm26 + vpmulhw %zmm15, %zmm27, %zmm23 + vpmulhw %zmm15, %zmm28, %zmm24 + vpsraw $10, %zmm23, %zmm23 + vpsraw $10, %zmm24, %zmm24 + vpmullw %zmm14, %zmm23, %zmm23 + vpmullw %zmm14, %zmm24, %zmm24 + vpsubw %zmm23, %zmm27, %zmm23 + vpsubw %zmm24, %zmm28, %zmm24 + vpmullw %zmm12, %zmm25, %zmm27 + vpmullw %zmm12, %zmm26, %zmm28 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm27, %zmm27 + vpmulhw %zmm14, %zmm28, %zmm28 + vpsubw %zmm27, %zmm25, %zmm25 + vpsubw %zmm28, %zmm26, %zmm26 + vbroadcasti64x4 1152(%r11), %zmm10 + vbroadcasti64x4 1184(%r11), %zmm12 + vpsubw %zmm4, %zmm0, %zmm8 + vpsubw %zmm5, %zmm1, %zmm9 + vpaddw %zmm4, %zmm0, %zmm0 + vpaddw %zmm5, %zmm1, %zmm1 + vpmullw %zmm12, %zmm8, %zmm4 + vpmullw %zmm12, %zmm9, %zmm5 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm4, %zmm4 + vpmulhw %zmm14, %zmm5, %zmm5 + vpsubw %zmm4, %zmm8, %zmm4 + vpsubw %zmm5, %zmm9, %zmm5 + vpsubw %zmm6, %zmm2, %zmm8 + vpsubw %zmm7, %zmm3, %zmm9 + vpaddw %zmm6, %zmm2, %zmm2 + vpaddw %zmm7, %zmm3, %zmm3 + vpmullw %zmm12, %zmm8, %zmm6 + vpmullw %zmm12, %zmm9, %zmm7 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm6, %zmm6 + vpmulhw %zmm14, %zmm7, %zmm7 + vpsubw %zmm6, %zmm8, %zmm6 + vpsubw %zmm7, %zmm9, %zmm7 + vbroadcasti64x4 2368(%r11), %zmm10 + vbroadcasti64x4 2400(%r11), %zmm12 + vpsubw %zmm23, %zmm19, %zmm27 + vpsubw %zmm24, %zmm20, %zmm28 + vpaddw %zmm23, %zmm19, %zmm19 + vpaddw %zmm24, %zmm20, %zmm20 + vpmullw %zmm12, %zmm27, %zmm23 + vpmullw %zmm12, %zmm28, %zmm24 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm10, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm24, %zmm24 + vpsubw %zmm23, %zmm27, %zmm23 + vpsubw %zmm24, %zmm28, %zmm24 + vpsubw %zmm25, %zmm21, %zmm27 + vpsubw %zmm26, %zmm22, %zmm28 + vpaddw %zmm25, %zmm21, %zmm21 + vpaddw %zmm26, %zmm22, %zmm22 + vpmullw %zmm12, %zmm27, %zmm25 + vpmullw %zmm12, %zmm28, %zmm26 + vpmulhw %zmm10, %zmm27, %zmm27 + vpmulhw %zmm10, %zmm28, %zmm28 + vpmulhw %zmm14, %zmm25, %zmm25 + vpmulhw %zmm14, %zmm26, %zmm26 + vpsubw %zmm25, %zmm27, %zmm25 + vpsubw %zmm26, %zmm28, %zmm26 + vbroadcasti64x4 2432(%r11), %zmm10 + vbroadcasti64x4 2464(%r11), %zmm12 + vbroadcasti64x4 2496(%r11), %zmm11 + vbroadcasti64x4 2528(%r11), %zmm13 + vpsubw %zmm19, %zmm0, %zmm8 + vpsubw %zmm20, %zmm1, %zmm9 + vpaddw %zmm19, %zmm0, %zmm0 + vpaddw %zmm20, %zmm1, %zmm1 + vpmullw %zmm12, %zmm8, %zmm19 + vpmullw %zmm12, %zmm9, %zmm20 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm19, %zmm19 + vpmulhw %zmm14, %zmm20, %zmm20 + vpsubw %zmm19, %zmm8, %zmm19 + vpsubw %zmm20, %zmm9, %zmm20 + vpaddw %zmm21, %zmm2, %zmm8 + vpaddw %zmm22, %zmm3, %zmm9 + vpsubw %zmm21, %zmm2, %zmm21 + vpsubw %zmm22, %zmm3, %zmm22 + vpmulhw %zmm15, %zmm8, %zmm2 + vpmulhw %zmm15, %zmm9, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm8, %zmm2 + vpsubw %zmm3, %zmm9, %zmm3 + vpmullw %zmm12, %zmm21, %zmm8 + vpmullw %zmm12, %zmm22, %zmm9 + vpmulhw %zmm10, %zmm21, %zmm21 + vpmulhw %zmm10, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm21 + vpsubw %zmm9, %zmm22, %zmm22 + vpsubw %zmm23, %zmm4, %zmm8 + vpsubw %zmm24, %zmm5, %zmm9 + vpaddw %zmm23, %zmm4, %zmm4 + vpaddw %zmm24, %zmm5, %zmm5 + vpmullw %zmm12, %zmm8, %zmm23 + vpmullw %zmm12, %zmm9, %zmm24 + vpmulhw %zmm10, %zmm8, %zmm8 + vpmulhw %zmm10, %zmm9, %zmm9 + vpmulhw %zmm14, %zmm23, %zmm23 + vpmulhw %zmm14, %zmm24, %zmm24 + vpsubw %zmm23, %zmm8, %zmm23 + vpsubw %zmm24, %zmm9, %zmm24 + vpaddw %zmm25, %zmm6, %zmm8 + vpaddw %zmm26, %zmm7, %zmm9 + vpsubw %zmm25, %zmm6, %zmm25 + vpsubw %zmm26, %zmm7, %zmm26 + vpmulhw %zmm15, %zmm8, %zmm6 + vpmulhw %zmm15, %zmm9, %zmm7 + vpsraw $10, %zmm6, %zmm6 + vpsraw $10, %zmm7, %zmm7 + vpmullw %zmm14, %zmm6, %zmm6 + vpmullw %zmm14, %zmm7, %zmm7 + vpsubw %zmm6, %zmm8, %zmm6 + vpsubw %zmm7, %zmm9, %zmm7 + vpmullw %zmm12, %zmm25, %zmm8 + vpmullw %zmm12, %zmm26, %zmm9 + vpmulhw %zmm10, %zmm25, %zmm25 + vpmulhw %zmm10, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm25 + vpsubw %zmm9, %zmm26, %zmm26 + vpmullw %zmm13, %zmm0, %zmm8 + vpmullw %zmm13, %zmm1, %zmm9 + vpmulhw %zmm11, %zmm0, %zmm0 + vpmulhw %zmm11, %zmm1, %zmm1 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm0, %zmm0 + vpsubw %zmm9, %zmm1, %zmm1 + vpmullw %zmm13, %zmm2, %zmm8 + vpmullw %zmm13, %zmm3, %zmm9 + vpmulhw %zmm11, %zmm2, %zmm2 + vpmulhw %zmm11, %zmm3, %zmm3 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm2, %zmm2 + vpsubw %zmm9, %zmm3, %zmm3 + vpmullw %zmm13, %zmm4, %zmm8 + vpmullw %zmm13, %zmm5, %zmm9 + vpmulhw %zmm11, %zmm4, %zmm4 + vpmulhw %zmm11, %zmm5, %zmm5 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm4, %zmm4 + vpsubw %zmm9, %zmm5, %zmm5 + vpmullw %zmm13, %zmm6, %zmm8 + vpmullw %zmm13, %zmm7, %zmm9 + vpmulhw %zmm11, %zmm6, %zmm6 + vpmulhw %zmm11, %zmm7, %zmm7 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm6, %zmm6 + vpsubw %zmm9, %zmm7, %zmm7 + vpmullw %zmm13, %zmm19, %zmm8 + vpmullw %zmm13, %zmm20, %zmm9 + vpmulhw %zmm11, %zmm19, %zmm19 + vpmulhw %zmm11, %zmm20, %zmm20 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm19, %zmm19 + vpsubw %zmm9, %zmm20, %zmm20 + vpmullw %zmm13, %zmm21, %zmm8 + vpmullw %zmm13, %zmm22, %zmm9 + vpmulhw %zmm11, %zmm21, %zmm21 + vpmulhw %zmm11, %zmm22, %zmm22 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm21, %zmm21 + vpsubw %zmm9, %zmm22, %zmm22 + vpmullw %zmm13, %zmm23, %zmm8 + vpmullw %zmm13, %zmm24, %zmm9 + vpmulhw %zmm11, %zmm23, %zmm23 + vpmulhw %zmm11, %zmm24, %zmm24 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm23, %zmm23 + vpsubw %zmm9, %zmm24, %zmm24 + vpmullw %zmm13, %zmm25, %zmm8 + vpmullw %zmm13, %zmm26, %zmm9 + vpmulhw %zmm11, %zmm25, %zmm25 + vpmulhw %zmm11, %zmm26, %zmm26 + vpmulhw %zmm14, %zmm8, %zmm8 + vpmulhw %zmm14, %zmm9, %zmm9 + vpsubw %zmm8, %zmm25, %zmm25 + vpsubw %zmm9, %zmm26, %zmm26 + vmovdqu64 %ymm0, (%rsi) + vextracti64x4 $0x01, %zmm0, (%rsi) + vmovdqu64 %ymm1, 32(%rsi) + vextracti64x4 $0x01, %zmm1, 32(%rsi) + vmovdqu64 %ymm2, 64(%rsi) + vextracti64x4 $0x01, %zmm2, 64(%rsi) + vmovdqu64 %ymm3, 96(%rsi) + vextracti64x4 $0x01, %zmm3, 96(%rsi) + vmovdqu64 %ymm4, 128(%rsi) + vextracti64x4 $0x01, %zmm4, 128(%rsi) + vmovdqu64 %ymm5, 160(%rsi) + vextracti64x4 $0x01, %zmm5, 160(%rsi) + vmovdqu64 %ymm6, 192(%rsi) + vextracti64x4 $0x01, %zmm6, 192(%rsi) + vmovdqu64 %ymm7, 224(%rsi) + vextracti64x4 $0x01, %zmm7, 224(%rsi) + vmovdqu64 %ymm19, 256(%rsi) + vextracti64x4 $0x01, %zmm19, 256(%rsi) + vmovdqu64 %ymm20, 288(%rsi) + vextracti64x4 $0x01, %zmm20, 288(%rsi) + vmovdqu64 %ymm21, 320(%rsi) + vextracti64x4 $0x01, %zmm21, 320(%rsi) + vmovdqu64 %ymm22, 352(%rsi) + vextracti64x4 $0x01, %zmm22, 352(%rsi) + vmovdqu64 %ymm23, 384(%rsi) + vextracti64x4 $0x01, %zmm23, 384(%rsi) + vmovdqu64 %ymm24, 416(%rsi) + vextracti64x4 $0x01, %zmm24, 416(%rsi) + vmovdqu64 %ymm25, 448(%rsi) + vextracti64x4 $0x01, %zmm25, 448(%rsi) + vmovdqu64 %ymm26, 480(%rsi) + vextracti64x4 $0x01, %zmm26, 480(%rsi) + vmovdqu64 (%rsi), %zmm0 + vmovdqu64 64(%rsi), %zmm1 + vmovdqu64 128(%rsi), %zmm2 + vmovdqu64 192(%rsi), %zmm3 + vmovdqu64 (%rcx), %zmm4 + vmovdqu64 64(%rcx), %zmm5 + vmovdqu64 128(%rcx), %zmm6 + vmovdqu64 192(%rcx), %zmm7 + vpsubw %zmm0, %zmm4, %zmm4 + vpsubw %zmm1, %zmm5, %zmm5 + vpmulhw %zmm15, %zmm4, %zmm0 + vpmulhw %zmm15, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpsubw %zmm2, %zmm6, %zmm6 + vpsubw %zmm3, %zmm7, %zmm7 + vpmulhw %zmm15, %zmm6, %zmm2 + vpmulhw %zmm15, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, (%rsi) + vmovdqu64 %zmm1, 64(%rsi) + vmovdqu64 %zmm2, 128(%rsi) + vmovdqu64 %zmm3, 192(%rsi) + vmovdqu64 256(%rsi), %zmm0 + vmovdqu64 320(%rsi), %zmm1 + vmovdqu64 384(%rsi), %zmm2 + vmovdqu64 448(%rsi), %zmm3 + vmovdqu64 256(%rcx), %zmm4 + vmovdqu64 320(%rcx), %zmm5 + vmovdqu64 384(%rcx), %zmm6 + vmovdqu64 448(%rcx), %zmm7 + vpsubw %zmm0, %zmm4, %zmm4 + vpsubw %zmm1, %zmm5, %zmm5 + vpmulhw %zmm15, %zmm4, %zmm0 + vpmulhw %zmm15, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm14, %zmm0, %zmm0 + vpmullw %zmm14, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpsubw %zmm2, %zmm6, %zmm6 + vpsubw %zmm3, %zmm7, %zmm7 + vpmulhw %zmm15, %zmm6, %zmm2 + vpmulhw %zmm15, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm14, %zmm2, %zmm2 + vpmullw %zmm14, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, 256(%rsi) + vmovdqu64 %zmm1, 320(%rsi) + vmovdqu64 %zmm2, 384(%rsi) + vmovdqu64 %zmm3, 448(%rsi) + vzeroupper + popq %r12 + repz retq +#ifndef __APPLE__ +.size mlkem_decapsulate_avx512,.-mlkem_decapsulate_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl mlkem_basemul_x2_avx512 +.type mlkem_basemul_x2_avx512,@function +.align 16 +mlkem_basemul_x2_avx512: +#else +.section __TEXT,__text +.globl _mlkem_basemul_x2_avx512 +.p2align 4 +_mlkem_basemul_x2_avx512: +#endif /* __APPLE__ */ + movq $0xd01, %r8 + vmovd %r8d, %xmm12 + vpbroadcastw %xmm12, %zmm12 + movq $0xf301, %r8 + vmovd %r8d, %xmm13 + vpbroadcastw %xmm13, %zmm13 + movl $0xaaaaaaaa, %ecx + kmovd %ecx, %k3 + movl $0x55555555, %ecx + kmovd %ecx, %k4 + leaq L_mlkem_avx512_zetas_basemul(%rip), %rax + vmovdqu (%rsi), %ymm2 + vinserti64x4 $0x01, 64(%rsi), %zmm2, %zmm2 + vmovdqu 32(%rsi), %ymm3 + vinserti64x4 $0x01, 96(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu (%rdx), %ymm4 + vinserti64x4 $0x01, 64(%rdx), %zmm4, %zmm4 + vmovdqu 32(%rdx), %ymm5 + vinserti64x4 $0x01, 96(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu (%rax), %ymm6 + vinserti64x4 $0x01, 64(%rax), %zmm6, %zmm6 + vmovdqu 32(%rax), %ymm7 + vinserti64x4 $0x01, 96(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm8 + vpsrld $16, %zmm0, %zmm9 + vpblendmw %zmm8, %zmm0, %zmm0{%k3} + vpblendmw %zmm9, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, (%rdi) + vextracti64x4 $0x01, %zmm0, 64(%rdi) + vmovdqu %ymm1, 32(%rdi) + vextracti64x4 $0x01, %zmm1, 96(%rdi) + vmovdqu 128(%rsi), %ymm2 + vinserti64x4 $0x01, 192(%rsi), %zmm2, %zmm2 + vmovdqu 160(%rsi), %ymm3 + vinserti64x4 $0x01, 224(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu 128(%rdx), %ymm4 + vinserti64x4 $0x01, 192(%rdx), %zmm4, %zmm4 + vmovdqu 160(%rdx), %ymm5 + vinserti64x4 $0x01, 224(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu 128(%rax), %ymm6 + vinserti64x4 $0x01, 192(%rax), %zmm6, %zmm6 + vmovdqu 160(%rax), %ymm7 + vinserti64x4 $0x01, 224(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm8 + vpsrld $16, %zmm0, %zmm9 + vpblendmw %zmm8, %zmm0, %zmm0{%k3} + vpblendmw %zmm9, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 128(%rdi) + vextracti64x4 $0x01, %zmm0, 192(%rdi) + vmovdqu %ymm1, 160(%rdi) + vextracti64x4 $0x01, %zmm1, 224(%rdi) + vmovdqu 256(%rsi), %ymm2 + vinserti64x4 $0x01, 320(%rsi), %zmm2, %zmm2 + vmovdqu 288(%rsi), %ymm3 + vinserti64x4 $0x01, 352(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu 256(%rdx), %ymm4 + vinserti64x4 $0x01, 320(%rdx), %zmm4, %zmm4 + vmovdqu 288(%rdx), %ymm5 + vinserti64x4 $0x01, 352(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu 256(%rax), %ymm6 + vinserti64x4 $0x01, 320(%rax), %zmm6, %zmm6 + vmovdqu 288(%rax), %ymm7 + vinserti64x4 $0x01, 352(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm8 + vpsrld $16, %zmm0, %zmm9 + vpblendmw %zmm8, %zmm0, %zmm0{%k3} + vpblendmw %zmm9, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 256(%rdi) + vextracti64x4 $0x01, %zmm0, 320(%rdi) + vmovdqu %ymm1, 288(%rdi) + vextracti64x4 $0x01, %zmm1, 352(%rdi) + vmovdqu 384(%rsi), %ymm2 + vinserti64x4 $0x01, 448(%rsi), %zmm2, %zmm2 + vmovdqu 416(%rsi), %ymm3 + vinserti64x4 $0x01, 480(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu 384(%rdx), %ymm4 + vinserti64x4 $0x01, 448(%rdx), %zmm4, %zmm4 + vmovdqu 416(%rdx), %ymm5 + vinserti64x4 $0x01, 480(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu 384(%rax), %ymm6 + vinserti64x4 $0x01, 448(%rax), %zmm6, %zmm6 + vmovdqu 416(%rax), %ymm7 + vinserti64x4 $0x01, 480(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm8 + vpsrld $16, %zmm0, %zmm9 + vpblendmw %zmm8, %zmm0, %zmm0{%k3} + vpblendmw %zmm9, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 384(%rdi) + vextracti64x4 $0x01, %zmm0, 448(%rdi) + vmovdqu %ymm1, 416(%rdi) + vextracti64x4 $0x01, %zmm1, 480(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_basemul_x2_avx512,.-mlkem_basemul_x2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl mlkem_tomont_x2_avx512 +.type mlkem_tomont_x2_avx512,@function +.align 16 +mlkem_tomont_x2_avx512: +#else +.section __TEXT,__text +.globl _mlkem_tomont_x2_avx512 +.p2align 4 +_mlkem_tomont_x2_avx512: +#endif /* __APPLE__ */ + movq $0x549, %rdx + vmovd %edx, %xmm8 + vpbroadcastw %xmm8, %zmm8 + movq $0x5049, %rdx + vmovd %edx, %xmm9 + vpbroadcastw %xmm9, %zmm9 + movq $0xd01, %rdx + vmovd %edx, %xmm10 + vpbroadcastw %xmm10, %zmm10 + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vpmullw %zmm9, %zmm0, %zmm4 + vpmulhw %zmm8, %zmm0, %zmm5 + vpmulhw %zmm10, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm0 + vpmullw %zmm9, %zmm1, %zmm4 + vpmulhw %zmm8, %zmm1, %zmm5 + vpmulhw %zmm10, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm1 + vpmullw %zmm9, %zmm2, %zmm4 + vpmulhw %zmm8, %zmm2, %zmm5 + vpmulhw %zmm10, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm2 + vpmullw %zmm9, %zmm3, %zmm4 + vpmulhw %zmm8, %zmm3, %zmm5 + vpmulhw %zmm10, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm3 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 256(%rdi), %zmm0 + vmovdqu64 320(%rdi), %zmm1 + vmovdqu64 384(%rdi), %zmm2 + vmovdqu64 448(%rdi), %zmm3 + vpmullw %zmm9, %zmm0, %zmm4 + vpmulhw %zmm8, %zmm0, %zmm5 + vpmulhw %zmm10, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm0 + vpmullw %zmm9, %zmm1, %zmm4 + vpmulhw %zmm8, %zmm1, %zmm5 + vpmulhw %zmm10, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm1 + vpmullw %zmm9, %zmm2, %zmm4 + vpmulhw %zmm8, %zmm2, %zmm5 + vpmulhw %zmm10, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm2 + vpmullw %zmm9, %zmm3, %zmm4 + vpmulhw %zmm8, %zmm3, %zmm5 + vpmulhw %zmm10, %zmm4, %zmm4 + vpsubw %zmm4, %zmm5, %zmm3 + vmovdqu64 %zmm0, 256(%rdi) + vmovdqu64 %zmm1, 320(%rdi) + vmovdqu64 %zmm2, 384(%rdi) + vmovdqu64 %zmm3, 448(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_tomont_x2_avx512,.-mlkem_tomont_x2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl mlkem_adderr_x2_avx512 +.type mlkem_adderr_x2_avx512,@function +.align 16 +mlkem_adderr_x2_avx512: +#else +.section __TEXT,__text +.globl _mlkem_adderr_x2_avx512 +.p2align 4 +_mlkem_adderr_x2_avx512: +#endif /* __APPLE__ */ + movq $0x4ebf, %rdx + vmovd %edx, %xmm8 + vpbroadcastw %xmm8, %zmm8 + movq $0xd01, %rdx + vmovd %edx, %xmm9 + vpbroadcastw %xmm9, %zmm9 + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 (%rsi), %zmm4 + vmovdqu64 64(%rsi), %zmm5 + vmovdqu64 128(%rsi), %zmm6 + vmovdqu64 192(%rsi), %zmm7 + vpaddw %zmm4, %zmm0, %zmm4 + vpaddw %zmm5, %zmm1, %zmm5 + vpmulhw %zmm8, %zmm4, %zmm0 + vpmulhw %zmm8, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm9, %zmm0, %zmm0 + vpmullw %zmm9, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpaddw %zmm6, %zmm2, %zmm6 + vpaddw %zmm7, %zmm3, %zmm7 + vpmulhw %zmm8, %zmm6, %zmm2 + vpmulhw %zmm8, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm9, %zmm2, %zmm2 + vpmullw %zmm9, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 256(%rdi), %zmm0 + vmovdqu64 320(%rdi), %zmm1 + vmovdqu64 384(%rdi), %zmm2 + vmovdqu64 448(%rdi), %zmm3 + vmovdqu64 256(%rsi), %zmm4 + vmovdqu64 320(%rsi), %zmm5 + vmovdqu64 384(%rsi), %zmm6 + vmovdqu64 448(%rsi), %zmm7 + vpaddw %zmm4, %zmm0, %zmm4 + vpaddw %zmm5, %zmm1, %zmm5 + vpmulhw %zmm8, %zmm4, %zmm0 + vpmulhw %zmm8, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm9, %zmm0, %zmm0 + vpmullw %zmm9, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpaddw %zmm6, %zmm2, %zmm6 + vpaddw %zmm7, %zmm3, %zmm7 + vpmulhw %zmm8, %zmm6, %zmm2 + vpmulhw %zmm8, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm9, %zmm2, %zmm2 + vpmullw %zmm9, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, 256(%rdi) + vmovdqu64 %zmm1, 320(%rdi) + vmovdqu64 %zmm2, 384(%rdi) + vmovdqu64 %zmm3, 448(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_adderr_x2_avx512,.-mlkem_adderr_x2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl mlkem_suberr_x2_avx512 +.type mlkem_suberr_x2_avx512,@function +.align 16 +mlkem_suberr_x2_avx512: +#else +.section __TEXT,__text +.globl _mlkem_suberr_x2_avx512 +.p2align 4 +_mlkem_suberr_x2_avx512: +#endif /* __APPLE__ */ + movq $0x4ebf, %rdx + vmovd %edx, %xmm8 + vpbroadcastw %xmm8, %zmm8 + movq $0xd01, %rdx + vmovd %edx, %xmm9 + vpbroadcastw %xmm9, %zmm9 + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 (%rsi), %zmm4 + vmovdqu64 64(%rsi), %zmm5 + vmovdqu64 128(%rsi), %zmm6 + vmovdqu64 192(%rsi), %zmm7 + vpsubw %zmm0, %zmm4, %zmm4 + vpsubw %zmm1, %zmm5, %zmm5 + vpmulhw %zmm8, %zmm4, %zmm0 + vpmulhw %zmm8, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm9, %zmm0, %zmm0 + vpmullw %zmm9, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpsubw %zmm2, %zmm6, %zmm6 + vpsubw %zmm3, %zmm7, %zmm7 + vpmulhw %zmm8, %zmm6, %zmm2 + vpmulhw %zmm8, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm9, %zmm2, %zmm2 + vpmullw %zmm9, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 256(%rdi), %zmm0 + vmovdqu64 320(%rdi), %zmm1 + vmovdqu64 384(%rdi), %zmm2 + vmovdqu64 448(%rdi), %zmm3 + vmovdqu64 256(%rsi), %zmm4 + vmovdqu64 320(%rsi), %zmm5 + vmovdqu64 384(%rsi), %zmm6 + vmovdqu64 448(%rsi), %zmm7 + vpsubw %zmm0, %zmm4, %zmm4 + vpsubw %zmm1, %zmm5, %zmm5 + vpmulhw %zmm8, %zmm4, %zmm0 + vpmulhw %zmm8, %zmm5, %zmm1 + vpsraw $10, %zmm0, %zmm0 + vpsraw $10, %zmm1, %zmm1 + vpmullw %zmm9, %zmm0, %zmm0 + vpmullw %zmm9, %zmm1, %zmm1 + vpsubw %zmm0, %zmm4, %zmm0 + vpsubw %zmm1, %zmm5, %zmm1 + vpsubw %zmm2, %zmm6, %zmm6 + vpsubw %zmm3, %zmm7, %zmm7 + vpmulhw %zmm8, %zmm6, %zmm2 + vpmulhw %zmm8, %zmm7, %zmm3 + vpsraw $10, %zmm2, %zmm2 + vpsraw $10, %zmm3, %zmm3 + vpmullw %zmm9, %zmm2, %zmm2 + vpmullw %zmm9, %zmm3, %zmm3 + vpsubw %zmm2, %zmm6, %zmm2 + vpsubw %zmm3, %zmm7, %zmm3 + vmovdqu64 %zmm0, 256(%rdi) + vmovdqu64 %zmm1, 320(%rdi) + vmovdqu64 %zmm2, 384(%rdi) + vmovdqu64 %zmm3, 448(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_suberr_x2_avx512,.-mlkem_suberr_x2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl mlkem_ptacc_x2_avx512 +.type mlkem_ptacc_x2_avx512,@function +.align 16 +mlkem_ptacc_x2_avx512: +#else +.section __TEXT,__text +.globl _mlkem_ptacc_x2_avx512 +.p2align 4 +_mlkem_ptacc_x2_avx512: +#endif /* __APPLE__ */ + movq $0xd01, %r9 + vmovd %r9d, %xmm12 + vpbroadcastw %xmm12, %zmm12 + movq $0xf301, %r9 + vmovd %r9d, %xmm13 + vpbroadcastw %xmm13, %zmm13 + movl $0xaaaaaaaa, %r8d + kmovd %r8d, %k3 + movl $0x55555555, %r8d + kmovd %r8d, %k4 + movslq %ecx, %r10 + leaq L_mlkem_avx512_zetas_basemul(%rip), %rax + vmovdqu (%rsi), %ymm2 + vinserti64x4 $0x01, 64(%rsi), %zmm2, %zmm2 + vmovdqu 32(%rsi), %ymm3 + vinserti64x4 $0x01, 96(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu (%rdx), %ymm4 + vinserti64x4 $0x01, 64(%rdx), %zmm4, %zmm4 + vmovdqu 32(%rdx), %ymm5 + vinserti64x4 $0x01, 96(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu (%rax), %ymm6 + vinserti64x4 $0x01, 64(%rax), %zmm6, %zmm6 + vmovdqu 32(%rax), %ymm7 + vinserti64x4 $0x01, 96(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, (%rdi) + vextracti64x4 $0x01, %zmm0, 64(%rdi) + vmovdqu %ymm1, 32(%rdi) + vextracti64x4 $0x01, %zmm1, 96(%rdi) + vmovdqu 128(%rsi), %ymm2 + vinserti64x4 $0x01, 192(%rsi), %zmm2, %zmm2 + vmovdqu 160(%rsi), %ymm3 + vinserti64x4 $0x01, 224(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu 128(%rdx), %ymm4 + vinserti64x4 $0x01, 192(%rdx), %zmm4, %zmm4 + vmovdqu 160(%rdx), %ymm5 + vinserti64x4 $0x01, 224(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu 128(%rax), %ymm6 + vinserti64x4 $0x01, 192(%rax), %zmm6, %zmm6 + vmovdqu 160(%rax), %ymm7 + vinserti64x4 $0x01, 224(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 128(%rdi) + vextracti64x4 $0x01, %zmm0, 192(%rdi) + vmovdqu %ymm1, 160(%rdi) + vextracti64x4 $0x01, %zmm1, 224(%rdi) + vmovdqu 256(%rsi), %ymm2 + vinserti64x4 $0x01, 320(%rsi), %zmm2, %zmm2 + vmovdqu 288(%rsi), %ymm3 + vinserti64x4 $0x01, 352(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu 256(%rdx), %ymm4 + vinserti64x4 $0x01, 320(%rdx), %zmm4, %zmm4 + vmovdqu 288(%rdx), %ymm5 + vinserti64x4 $0x01, 352(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu 256(%rax), %ymm6 + vinserti64x4 $0x01, 320(%rax), %zmm6, %zmm6 + vmovdqu 288(%rax), %ymm7 + vinserti64x4 $0x01, 352(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 256(%rdi) + vextracti64x4 $0x01, %zmm0, 320(%rdi) + vmovdqu %ymm1, 288(%rdi) + vextracti64x4 $0x01, %zmm1, 352(%rdi) + vmovdqu 384(%rsi), %ymm2 + vinserti64x4 $0x01, 448(%rsi), %zmm2, %zmm2 + vmovdqu 416(%rsi), %ymm3 + vinserti64x4 $0x01, 480(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu 384(%rdx), %ymm4 + vinserti64x4 $0x01, 448(%rdx), %zmm4, %zmm4 + vmovdqu 416(%rdx), %ymm5 + vinserti64x4 $0x01, 480(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu 384(%rax), %ymm6 + vinserti64x4 $0x01, 448(%rax), %zmm6, %zmm6 + vmovdqu 416(%rax), %ymm7 + vinserti64x4 $0x01, 480(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu %ymm0, 384(%rdi) + vextracti64x4 $0x01, %zmm0, 448(%rdi) + vmovdqu %ymm1, 416(%rdi) + vextracti64x4 $0x01, %zmm1, 480(%rdi) + addq $0x200, %rsi + addq $0x200, %rdx + subq $2, %r10 + jz L_pointwise_acc_mont_end_test512 +L_pointwise_acc_mont_start_test512: + leaq L_mlkem_avx512_zetas_basemul(%rip), %rax + vmovdqu (%rsi), %ymm2 + vinserti64x4 $0x01, 64(%rsi), %zmm2, %zmm2 + vmovdqu 32(%rsi), %ymm3 + vinserti64x4 $0x01, 96(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu (%rdx), %ymm4 + vinserti64x4 $0x01, 64(%rdx), %zmm4, %zmm4 + vmovdqu 32(%rdx), %ymm5 + vinserti64x4 $0x01, 96(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu (%rax), %ymm6 + vinserti64x4 $0x01, 64(%rax), %zmm6, %zmm6 + vmovdqu 32(%rax), %ymm7 + vinserti64x4 $0x01, 96(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu (%rdi), %ymm8 + vinserti64x4 $0x01, 64(%rdi), %zmm8, %zmm8 + vmovdqu 32(%rdi), %ymm9 + vinserti64x4 $0x01, 96(%rdi), %zmm9, %zmm9 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vmovdqu %ymm0, (%rdi) + vextracti64x4 $0x01, %zmm0, 64(%rdi) + vmovdqu %ymm1, 32(%rdi) + vextracti64x4 $0x01, %zmm1, 96(%rdi) + vmovdqu 128(%rsi), %ymm2 + vinserti64x4 $0x01, 192(%rsi), %zmm2, %zmm2 + vmovdqu 160(%rsi), %ymm3 + vinserti64x4 $0x01, 224(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu 128(%rdx), %ymm4 + vinserti64x4 $0x01, 192(%rdx), %zmm4, %zmm4 + vmovdqu 160(%rdx), %ymm5 + vinserti64x4 $0x01, 224(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu 128(%rax), %ymm6 + vinserti64x4 $0x01, 192(%rax), %zmm6, %zmm6 + vmovdqu 160(%rax), %ymm7 + vinserti64x4 $0x01, 224(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 128(%rdi), %ymm8 + vinserti64x4 $0x01, 192(%rdi), %zmm8, %zmm8 + vmovdqu 160(%rdi), %ymm9 + vinserti64x4 $0x01, 224(%rdi), %zmm9, %zmm9 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vmovdqu %ymm0, 128(%rdi) + vextracti64x4 $0x01, %zmm0, 192(%rdi) + vmovdqu %ymm1, 160(%rdi) + vextracti64x4 $0x01, %zmm1, 224(%rdi) + vmovdqu 256(%rsi), %ymm2 + vinserti64x4 $0x01, 320(%rsi), %zmm2, %zmm2 + vmovdqu 288(%rsi), %ymm3 + vinserti64x4 $0x01, 352(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu 256(%rdx), %ymm4 + vinserti64x4 $0x01, 320(%rdx), %zmm4, %zmm4 + vmovdqu 288(%rdx), %ymm5 + vinserti64x4 $0x01, 352(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu 256(%rax), %ymm6 + vinserti64x4 $0x01, 320(%rax), %zmm6, %zmm6 + vmovdqu 288(%rax), %ymm7 + vinserti64x4 $0x01, 352(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 256(%rdi), %ymm8 + vinserti64x4 $0x01, 320(%rdi), %zmm8, %zmm8 + vmovdqu 288(%rdi), %ymm9 + vinserti64x4 $0x01, 352(%rdi), %zmm9, %zmm9 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vmovdqu %ymm0, 256(%rdi) + vextracti64x4 $0x01, %zmm0, 320(%rdi) + vmovdqu %ymm1, 288(%rdi) + vextracti64x4 $0x01, %zmm1, 352(%rdi) + vmovdqu 384(%rsi), %ymm2 + vinserti64x4 $0x01, 448(%rsi), %zmm2, %zmm2 + vmovdqu 416(%rsi), %ymm3 + vinserti64x4 $0x01, 480(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu 384(%rdx), %ymm4 + vinserti64x4 $0x01, 448(%rdx), %zmm4, %zmm4 + vmovdqu 416(%rdx), %ymm5 + vinserti64x4 $0x01, 480(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu 384(%rax), %ymm6 + vinserti64x4 $0x01, 448(%rax), %zmm6, %zmm6 + vmovdqu 416(%rax), %ymm7 + vinserti64x4 $0x01, 480(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 384(%rdi), %ymm8 + vinserti64x4 $0x01, 448(%rdi), %zmm8, %zmm8 + vmovdqu 416(%rdi), %ymm9 + vinserti64x4 $0x01, 480(%rdi), %zmm9, %zmm9 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vmovdqu %ymm0, 384(%rdi) + vextracti64x4 $0x01, %zmm0, 448(%rdi) + vmovdqu %ymm1, 416(%rdi) + vextracti64x4 $0x01, %zmm1, 480(%rdi) + addq $0x200, %rsi + addq $0x200, %rdx + subq $0x01, %r10 + jg L_pointwise_acc_mont_start_test512 +L_pointwise_acc_mont_end_test512: + leaq L_mlkem_avx512_zetas_basemul(%rip), %rax + vmovdqu (%rsi), %ymm2 + vinserti64x4 $0x01, 64(%rsi), %zmm2, %zmm2 + vmovdqu 32(%rsi), %ymm3 + vinserti64x4 $0x01, 96(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu (%rdx), %ymm4 + vinserti64x4 $0x01, 64(%rdx), %zmm4, %zmm4 + vmovdqu 32(%rdx), %ymm5 + vinserti64x4 $0x01, 96(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu (%rax), %ymm6 + vinserti64x4 $0x01, 64(%rax), %zmm6, %zmm6 + vmovdqu 32(%rax), %ymm7 + vinserti64x4 $0x01, 96(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu (%rdi), %ymm8 + vinserti64x4 $0x01, 64(%rdi), %zmm8, %zmm8 + vmovdqu 32(%rdi), %ymm9 + vinserti64x4 $0x01, 96(%rdi), %zmm9, %zmm9 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm8 + vpsrld $16, %zmm0, %zmm9 + vpblendmw %zmm8, %zmm0, %zmm0{%k3} + vpblendmw %zmm9, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, (%rdi) + vextracti64x4 $0x01, %zmm0, 64(%rdi) + vmovdqu %ymm1, 32(%rdi) + vextracti64x4 $0x01, %zmm1, 96(%rdi) + vmovdqu 128(%rsi), %ymm2 + vinserti64x4 $0x01, 192(%rsi), %zmm2, %zmm2 + vmovdqu 160(%rsi), %ymm3 + vinserti64x4 $0x01, 224(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu 128(%rdx), %ymm4 + vinserti64x4 $0x01, 192(%rdx), %zmm4, %zmm4 + vmovdqu 160(%rdx), %ymm5 + vinserti64x4 $0x01, 224(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu 128(%rax), %ymm6 + vinserti64x4 $0x01, 192(%rax), %zmm6, %zmm6 + vmovdqu 160(%rax), %ymm7 + vinserti64x4 $0x01, 224(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 128(%rdi), %ymm8 + vinserti64x4 $0x01, 192(%rdi), %zmm8, %zmm8 + vmovdqu 160(%rdi), %ymm9 + vinserti64x4 $0x01, 224(%rdi), %zmm9, %zmm9 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm8 + vpsrld $16, %zmm0, %zmm9 + vpblendmw %zmm8, %zmm0, %zmm0{%k3} + vpblendmw %zmm9, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 128(%rdi) + vextracti64x4 $0x01, %zmm0, 192(%rdi) + vmovdqu %ymm1, 160(%rdi) + vextracti64x4 $0x01, %zmm1, 224(%rdi) + vmovdqu 256(%rsi), %ymm2 + vinserti64x4 $0x01, 320(%rsi), %zmm2, %zmm2 + vmovdqu 288(%rsi), %ymm3 + vinserti64x4 $0x01, 352(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu 256(%rdx), %ymm4 + vinserti64x4 $0x01, 320(%rdx), %zmm4, %zmm4 + vmovdqu 288(%rdx), %ymm5 + vinserti64x4 $0x01, 352(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu 256(%rax), %ymm6 + vinserti64x4 $0x01, 320(%rax), %zmm6, %zmm6 + vmovdqu 288(%rax), %ymm7 + vinserti64x4 $0x01, 352(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 256(%rdi), %ymm8 + vinserti64x4 $0x01, 320(%rdi), %zmm8, %zmm8 + vmovdqu 288(%rdi), %ymm9 + vinserti64x4 $0x01, 352(%rdi), %zmm9, %zmm9 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm8 + vpsrld $16, %zmm0, %zmm9 + vpblendmw %zmm8, %zmm0, %zmm0{%k3} + vpblendmw %zmm9, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 256(%rdi) + vextracti64x4 $0x01, %zmm0, 320(%rdi) + vmovdqu %ymm1, 288(%rdi) + vextracti64x4 $0x01, %zmm1, 352(%rdi) + vmovdqu 384(%rsi), %ymm2 + vinserti64x4 $0x01, 448(%rsi), %zmm2, %zmm2 + vmovdqu 416(%rsi), %ymm3 + vinserti64x4 $0x01, 480(%rsi), %zmm3, %zmm3 + vpslld $16, %zmm3, %zmm8 + vpsrld $16, %zmm2, %zmm9 + vpblendmw %zmm8, %zmm2, %zmm2{%k3} + vpblendmw %zmm9, %zmm3, %zmm3{%k4} + vmovdqu 384(%rdx), %ymm4 + vinserti64x4 $0x01, 448(%rdx), %zmm4, %zmm4 + vmovdqu 416(%rdx), %ymm5 + vinserti64x4 $0x01, 480(%rdx), %zmm5, %zmm5 + vpslld $16, %zmm5, %zmm8 + vpsrld $16, %zmm4, %zmm9 + vpblendmw %zmm8, %zmm4, %zmm4{%k3} + vpblendmw %zmm9, %zmm5, %zmm5{%k4} + vmovdqu 384(%rax), %ymm6 + vinserti64x4 $0x01, 448(%rax), %zmm6, %zmm6 + vmovdqu 416(%rax), %ymm7 + vinserti64x4 $0x01, 480(%rax), %zmm7, %zmm7 + vpmullw %zmm5, %zmm3, %zmm0 + vpmulhw %zmm5, %zmm3, %zmm8 + vpmullw %zmm4, %zmm2, %zmm1 + vpmulhw %zmm4, %zmm2, %zmm9 + vpmullw %zmm13, %zmm0, %zmm10 + vpmullw %zmm13, %zmm1, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm0 + vpsubw %zmm11, %zmm9, %zmm1 + vpmullw %zmm7, %zmm0, %zmm8 + vpmulhw %zmm6, %zmm0, %zmm9 + vpmulhw %zmm12, %zmm8, %zmm8 + vpsubw %zmm8, %zmm9, %zmm0 + vpaddw %zmm1, %zmm0, %zmm0 + vpmullw %zmm5, %zmm2, %zmm1 + vpmulhw %zmm5, %zmm2, %zmm8 + vpmullw %zmm4, %zmm3, %zmm2 + vpmulhw %zmm4, %zmm3, %zmm9 + vpmullw %zmm13, %zmm1, %zmm10 + vpmullw %zmm13, %zmm2, %zmm11 + vpmulhw %zmm12, %zmm10, %zmm10 + vpmulhw %zmm12, %zmm11, %zmm11 + vpsubw %zmm10, %zmm8, %zmm1 + vpsubw %zmm11, %zmm9, %zmm2 + vpaddw %zmm2, %zmm1, %zmm1 + vmovdqu 384(%rdi), %ymm8 + vinserti64x4 $0x01, 448(%rdi), %zmm8, %zmm8 + vmovdqu 416(%rdi), %ymm9 + vinserti64x4 $0x01, 480(%rdi), %zmm9, %zmm9 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpslld $16, %zmm1, %zmm8 + vpsrld $16, %zmm0, %zmm9 + vpblendmw %zmm8, %zmm0, %zmm0{%k3} + vpblendmw %zmm9, %zmm1, %zmm1{%k4} + vmovdqu %ymm0, 384(%rdi) + vextracti64x4 $0x01, %zmm0, 448(%rdi) + vmovdqu %ymm1, 416(%rdi) + vextracti64x4 $0x01, %zmm1, 480(%rdi) + addq $0x200, %rsi + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_ptacc_x2_avx512,.-mlkem_ptacc_x2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_cbd_eta2_avx512_m55: +.quad 0x5555555555555555,0x5555555555555555 +.quad 0x5555555555555555,0x5555555555555555 +.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_cbd_eta2_avx512_m33: +.quad 0x3333333333333333,0x3333333333333333 +.quad 0x3333333333333333,0x3333333333333333 +.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_cbd_eta2_avx512_m03: +.quad 0x0303030303030303,0x0303030303030303 +.quad 0x0303030303030303,0x0303030303030303 +.quad 0x0303030303030303,0x0303030303030303 +.quad 0x0303030303030303,0x0303030303030303 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_cbd_eta2_avx512_m0f: +.quad 0x0f0f0f0f0f0f0f0f,0x0f0f0f0f0f0f0f0f +.quad 0x0f0f0f0f0f0f0f0f,0x0f0f0f0f0f0f0f0f +.quad 0x0f0f0f0f0f0f0f0f,0x0f0f0f0f0f0f0f0f +.quad 0x0f0f0f0f0f0f0f0f,0x0f0f0f0f0f0f0f0f +#ifndef __APPLE__ +.text +.globl mlkem_cbd_eta2_avx512 +.type mlkem_cbd_eta2_avx512,@function +.align 16 +mlkem_cbd_eta2_avx512: +#else +.section __TEXT,__text +.globl _mlkem_cbd_eta2_avx512 +.p2align 4 +_mlkem_cbd_eta2_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mlkem_cbd_eta2_avx512_m55(%rip), %zmm0 + vmovdqu64 L_mlkem_cbd_eta2_avx512_m33(%rip), %zmm1 + vmovdqu64 L_mlkem_cbd_eta2_avx512_m03(%rip), %zmm2 + vmovdqu64 L_mlkem_cbd_eta2_avx512_m0f(%rip), %zmm3 + vmovdqu64 (%rsi), %zmm4 + vpsrlw $0x01, %zmm4, %zmm5 + vpandq %zmm0, %zmm4, %zmm4 + vpandq %zmm0, %zmm5, %zmm5 + vpaddb %zmm5, %zmm4, %zmm4 + vpsrlw $2, %zmm4, %zmm5 + vpandq %zmm1, %zmm4, %zmm4 + vpandq %zmm1, %zmm5, %zmm5 + vpaddb %zmm1, %zmm4, %zmm4 + vpsubb %zmm5, %zmm4, %zmm4 + vpsrlw $4, %zmm4, %zmm5 + vpandq %zmm3, %zmm4, %zmm4 + vpandq %zmm3, %zmm5, %zmm5 + vpsubb %zmm2, %zmm4, %zmm4 + vpsubb %zmm2, %zmm5, %zmm5 + vpunpcklbw %ymm5, %ymm4, %ymm6 + vpunpckhbw %ymm5, %ymm4, %ymm7 + vpmovsxbw %xmm6, %ymm10 + vmovdqu %ymm10, (%rdi) + vpmovsxbw %xmm7, %ymm10 + vmovdqu %ymm10, 32(%rdi) + vextracti128 $0x01, %ymm6, %xmm11 + vpmovsxbw %xmm11, %ymm10 + vmovdqu %ymm10, 64(%rdi) + vextracti128 $0x01, %ymm7, %xmm11 + vpmovsxbw %xmm11, %ymm10 + vmovdqu %ymm10, 96(%rdi) + vextracti64x4 $0x01, %zmm4, %ymm8 + vextracti64x4 $0x01, %zmm5, %ymm9 + vpunpcklbw %ymm9, %ymm8, %ymm6 + vpunpckhbw %ymm9, %ymm8, %ymm7 + vpmovsxbw %xmm6, %ymm10 + vmovdqu %ymm10, 128(%rdi) + vpmovsxbw %xmm7, %ymm10 + vmovdqu %ymm10, 160(%rdi) + vextracti128 $0x01, %ymm6, %xmm11 + vpmovsxbw %xmm11, %ymm10 + vmovdqu %ymm10, 192(%rdi) + vextracti128 $0x01, %ymm7, %xmm11 + vpmovsxbw %xmm11, %ymm10 + vmovdqu %ymm10, 224(%rdi) + vmovdqu64 64(%rsi), %zmm4 + vpsrlw $0x01, %zmm4, %zmm5 + vpandq %zmm0, %zmm4, %zmm4 + vpandq %zmm0, %zmm5, %zmm5 + vpaddb %zmm5, %zmm4, %zmm4 + vpsrlw $2, %zmm4, %zmm5 + vpandq %zmm1, %zmm4, %zmm4 + vpandq %zmm1, %zmm5, %zmm5 + vpaddb %zmm1, %zmm4, %zmm4 + vpsubb %zmm5, %zmm4, %zmm4 + vpsrlw $4, %zmm4, %zmm5 + vpandq %zmm3, %zmm4, %zmm4 + vpandq %zmm3, %zmm5, %zmm5 + vpsubb %zmm2, %zmm4, %zmm4 + vpsubb %zmm2, %zmm5, %zmm5 + vpunpcklbw %ymm5, %ymm4, %ymm6 + vpunpckhbw %ymm5, %ymm4, %ymm7 + vpmovsxbw %xmm6, %ymm10 + vmovdqu %ymm10, 256(%rdi) + vpmovsxbw %xmm7, %ymm10 + vmovdqu %ymm10, 288(%rdi) + vextracti128 $0x01, %ymm6, %xmm11 + vpmovsxbw %xmm11, %ymm10 + vmovdqu %ymm10, 320(%rdi) + vextracti128 $0x01, %ymm7, %xmm11 + vpmovsxbw %xmm11, %ymm10 + vmovdqu %ymm10, 352(%rdi) + vextracti64x4 $0x01, %zmm4, %ymm8 + vextracti64x4 $0x01, %zmm5, %ymm9 + vpunpcklbw %ymm9, %ymm8, %ymm6 + vpunpckhbw %ymm9, %ymm8, %ymm7 + vpmovsxbw %xmm6, %ymm10 + vmovdqu %ymm10, 384(%rdi) + vpmovsxbw %xmm7, %ymm10 + vmovdqu %ymm10, 416(%rdi) + vextracti128 $0x01, %ymm6, %xmm11 + vpmovsxbw %xmm11, %ymm10 + vmovdqu %ymm10, 448(%rdi) + vextracti128 $0x01, %ymm7, %xmm11 + vpmovsxbw %xmm11, %ymm10 + vmovdqu %ymm10, 480(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_cbd_eta2_avx512,.-mlkem_cbd_eta2_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_cbd_eta3_avx512_m249: +.quad 0x0024924900249249,0x0024924900249249 +.quad 0x0024924900249249,0x0024924900249249 +.quad 0x0024924900249249,0x0024924900249249 +.quad 0x0024924900249249,0x0024924900249249 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_cbd_eta3_avx512_m6db: +.quad 0x006db6db006db6db,0x006db6db006db6db +.quad 0x006db6db006db6db,0x006db6db006db6db +.quad 0x006db6db006db6db,0x006db6db006db6db +.quad 0x006db6db006db6db,0x006db6db006db6db +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_cbd_eta3_avx512_m07: +.quad 0x0000000700000007,0x0000000700000007 +.quad 0x0000000700000007,0x0000000700000007 +.quad 0x0000000700000007,0x0000000700000007 +.quad 0x0000000700000007,0x0000000700000007 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_cbd_eta3_avx512_m70: +.quad 0x0007000000070000,0x0007000000070000 +.quad 0x0007000000070000,0x0007000000070000 +.quad 0x0007000000070000,0x0007000000070000 +.quad 0x0007000000070000,0x0007000000070000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_cbd_eta3_avx512_m3: +.quad 0x0003000300030003,0x0003000300030003 +.quad 0x0003000300030003,0x0003000300030003 +.quad 0x0003000300030003,0x0003000300030003 +.quad 0x0003000300030003,0x0003000300030003 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_cbd_eta3_avx512_shuff: +.quad 0xff050403ff020100,0xff0b0a09ff080706 +.quad 0xff090807ff060504,0xff0f0e0dff0c0b0a +.quad 0xff050403ff020100,0xff0b0a09ff080706 +.quad 0xff090807ff060504,0xff0f0e0dff0c0b0a +#ifndef __APPLE__ +.text +.globl mlkem_cbd_eta3_avx512 +.type mlkem_cbd_eta3_avx512,@function +.align 16 +mlkem_cbd_eta3_avx512: +#else +.section __TEXT,__text +.globl _mlkem_cbd_eta3_avx512 +.p2align 4 +_mlkem_cbd_eta3_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mlkem_cbd_eta3_avx512_m249(%rip), %zmm0 + vmovdqu64 L_mlkem_cbd_eta3_avx512_m6db(%rip), %zmm1 + vmovdqu64 L_mlkem_cbd_eta3_avx512_m07(%rip), %zmm2 + vmovdqu64 L_mlkem_cbd_eta3_avx512_m70(%rip), %zmm3 + vmovdqu64 L_mlkem_cbd_eta3_avx512_m3(%rip), %zmm4 + vmovdqu64 L_mlkem_cbd_eta3_avx512_shuff(%rip), %zmm5 + vpermq $0x94, (%rsi), %ymm6 + vpermq $0x94, 24(%rsi), %ymm10 + vinserti64x4 $0x01, %ymm10, %zmm6, %zmm6 + vpshufb %zmm5, %zmm6, %zmm6 + vpsrld $0x01, %zmm6, %zmm7 + vpsrld $2, %zmm6, %zmm8 + vpandq %zmm0, %zmm6, %zmm6 + vpandq %zmm0, %zmm7, %zmm7 + vpandq %zmm0, %zmm8, %zmm8 + vpaddd %zmm7, %zmm6, %zmm6 + vpaddd %zmm8, %zmm6, %zmm6 + vpsrld $3, %zmm6, %zmm7 + vpaddd %zmm1, %zmm6, %zmm6 + vpsubd %zmm7, %zmm6, %zmm6 + vpslld $10, %zmm6, %zmm7 + vpsrld $12, %zmm6, %zmm8 + vpsrld $2, %zmm6, %zmm9 + vpandq %zmm2, %zmm6, %zmm6 + vpandq %zmm3, %zmm7, %zmm7 + vpandq %zmm2, %zmm8, %zmm8 + vpandq %zmm3, %zmm9, %zmm9 + vpaddw %zmm7, %zmm6, %zmm6 + vpaddw %zmm9, %zmm8, %zmm7 + vpsubw %zmm4, %zmm6, %zmm6 + vpsubw %zmm4, %zmm7, %zmm7 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm12 + vperm2i128 $49, %ymm9, %ymm8, %ymm13 + vmovdqu %ymm12, (%rdi) + vmovdqu %ymm13, 32(%rdi) + vextracti64x4 $0x01, %zmm6, %ymm10 + vextracti64x4 $0x01, %zmm7, %ymm11 + vpunpckldq %ymm11, %ymm10, %ymm8 + vpunpckhdq %ymm11, %ymm10, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm12 + vperm2i128 $49, %ymm9, %ymm8, %ymm13 + vmovdqu %ymm12, 64(%rdi) + vmovdqu %ymm13, 96(%rdi) + vpermq $0x94, 48(%rsi), %ymm6 + vpermq $0x94, 72(%rsi), %ymm10 + vinserti64x4 $0x01, %ymm10, %zmm6, %zmm6 + vpshufb %zmm5, %zmm6, %zmm6 + vpsrld $0x01, %zmm6, %zmm7 + vpsrld $2, %zmm6, %zmm8 + vpandq %zmm0, %zmm6, %zmm6 + vpandq %zmm0, %zmm7, %zmm7 + vpandq %zmm0, %zmm8, %zmm8 + vpaddd %zmm7, %zmm6, %zmm6 + vpaddd %zmm8, %zmm6, %zmm6 + vpsrld $3, %zmm6, %zmm7 + vpaddd %zmm1, %zmm6, %zmm6 + vpsubd %zmm7, %zmm6, %zmm6 + vpslld $10, %zmm6, %zmm7 + vpsrld $12, %zmm6, %zmm8 + vpsrld $2, %zmm6, %zmm9 + vpandq %zmm2, %zmm6, %zmm6 + vpandq %zmm3, %zmm7, %zmm7 + vpandq %zmm2, %zmm8, %zmm8 + vpandq %zmm3, %zmm9, %zmm9 + vpaddw %zmm7, %zmm6, %zmm6 + vpaddw %zmm9, %zmm8, %zmm7 + vpsubw %zmm4, %zmm6, %zmm6 + vpsubw %zmm4, %zmm7, %zmm7 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm12 + vperm2i128 $49, %ymm9, %ymm8, %ymm13 + vmovdqu %ymm12, 128(%rdi) + vmovdqu %ymm13, 160(%rdi) + vextracti64x4 $0x01, %zmm6, %ymm10 + vextracti64x4 $0x01, %zmm7, %ymm11 + vpunpckldq %ymm11, %ymm10, %ymm8 + vpunpckhdq %ymm11, %ymm10, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm12 + vperm2i128 $49, %ymm9, %ymm8, %ymm13 + vmovdqu %ymm12, 192(%rdi) + vmovdqu %ymm13, 224(%rdi) + vpermq $0x94, 96(%rsi), %ymm6 + vpermq $0x94, 120(%rsi), %ymm10 + vinserti64x4 $0x01, %ymm10, %zmm6, %zmm6 + vpshufb %zmm5, %zmm6, %zmm6 + vpsrld $0x01, %zmm6, %zmm7 + vpsrld $2, %zmm6, %zmm8 + vpandq %zmm0, %zmm6, %zmm6 + vpandq %zmm0, %zmm7, %zmm7 + vpandq %zmm0, %zmm8, %zmm8 + vpaddd %zmm7, %zmm6, %zmm6 + vpaddd %zmm8, %zmm6, %zmm6 + vpsrld $3, %zmm6, %zmm7 + vpaddd %zmm1, %zmm6, %zmm6 + vpsubd %zmm7, %zmm6, %zmm6 + vpslld $10, %zmm6, %zmm7 + vpsrld $12, %zmm6, %zmm8 + vpsrld $2, %zmm6, %zmm9 + vpandq %zmm2, %zmm6, %zmm6 + vpandq %zmm3, %zmm7, %zmm7 + vpandq %zmm2, %zmm8, %zmm8 + vpandq %zmm3, %zmm9, %zmm9 + vpaddw %zmm7, %zmm6, %zmm6 + vpaddw %zmm9, %zmm8, %zmm7 + vpsubw %zmm4, %zmm6, %zmm6 + vpsubw %zmm4, %zmm7, %zmm7 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm12 + vperm2i128 $49, %ymm9, %ymm8, %ymm13 + vmovdqu %ymm12, 256(%rdi) + vmovdqu %ymm13, 288(%rdi) + vextracti64x4 $0x01, %zmm6, %ymm10 + vextracti64x4 $0x01, %zmm7, %ymm11 + vpunpckldq %ymm11, %ymm10, %ymm8 + vpunpckhdq %ymm11, %ymm10, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm12 + vperm2i128 $49, %ymm9, %ymm8, %ymm13 + vmovdqu %ymm12, 320(%rdi) + vmovdqu %ymm13, 352(%rdi) + vpermq $0x94, 144(%rsi), %ymm6 + vpermq $0x94, 168(%rsi), %ymm10 + vinserti64x4 $0x01, %ymm10, %zmm6, %zmm6 + vpshufb %zmm5, %zmm6, %zmm6 + vpsrld $0x01, %zmm6, %zmm7 + vpsrld $2, %zmm6, %zmm8 + vpandq %zmm0, %zmm6, %zmm6 + vpandq %zmm0, %zmm7, %zmm7 + vpandq %zmm0, %zmm8, %zmm8 + vpaddd %zmm7, %zmm6, %zmm6 + vpaddd %zmm8, %zmm6, %zmm6 + vpsrld $3, %zmm6, %zmm7 + vpaddd %zmm1, %zmm6, %zmm6 + vpsubd %zmm7, %zmm6, %zmm6 + vpslld $10, %zmm6, %zmm7 + vpsrld $12, %zmm6, %zmm8 + vpsrld $2, %zmm6, %zmm9 + vpandq %zmm2, %zmm6, %zmm6 + vpandq %zmm3, %zmm7, %zmm7 + vpandq %zmm2, %zmm8, %zmm8 + vpandq %zmm3, %zmm9, %zmm9 + vpaddw %zmm7, %zmm6, %zmm6 + vpaddw %zmm9, %zmm8, %zmm7 + vpsubw %zmm4, %zmm6, %zmm6 + vpsubw %zmm4, %zmm7, %zmm7 + vpunpckldq %ymm7, %ymm6, %ymm8 + vpunpckhdq %ymm7, %ymm6, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm12 + vperm2i128 $49, %ymm9, %ymm8, %ymm13 + vmovdqu %ymm12, 384(%rdi) + vmovdqu %ymm13, 416(%rdi) + vextracti64x4 $0x01, %zmm6, %ymm10 + vextracti64x4 $0x01, %zmm7, %ymm11 + vpunpckldq %ymm11, %ymm10, %ymm8 + vpunpckhdq %ymm11, %ymm10, %ymm9 + vperm2i128 $32, %ymm9, %ymm8, %ymm12 + vperm2i128 $49, %ymm9, %ymm8, %ymm13 + vmovdqu %ymm12, 448(%rdi) + vmovdqu %ymm13, 480(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_cbd_eta3_avx512,.-mlkem_cbd_eta3_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_rej_uniform_avx512_perm: +.long 0x00000000,0x00000001,0x00000002,0x00000000 +.long 0x00000003,0x00000004,0x00000005,0x00000000 +.long 0x00000006,0x00000007,0x00000008,0x00000000 +.long 0x00000009,0x0000000a,0x0000000b,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_rej_uniform_avx512_shuf: +.byte 0x00,0x01,0x02,0xff,0x03,0x04,0x05,0xff +.byte 0x06,0x07,0x08,0xff,0x09,0x0a,0x0b,0xff +.byte 0x00,0x01,0x02,0xff,0x03,0x04,0x05,0xff +.byte 0x06,0x07,0x08,0xff,0x09,0x0a,0x0b,0xff +.byte 0x00,0x01,0x02,0xff,0x03,0x04,0x05,0xff +.byte 0x06,0x07,0x08,0xff,0x09,0x0a,0x0b,0xff +.byte 0x00,0x01,0x02,0xff,0x03,0x04,0x05,0xff +.byte 0x06,0x07,0x08,0xff,0x09,0x0a,0x0b,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_rej_uniform_avx512_mask: +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +#ifndef __APPLE__ +.text +.globl mlkem_rej_uniform_avx512 +.type mlkem_rej_uniform_avx512,@function +.align 16 +mlkem_rej_uniform_avx512: +#else +.section __TEXT,__text +.globl _mlkem_rej_uniform_avx512 +.p2align 4 +_mlkem_rej_uniform_avx512: +#endif /* __APPLE__ */ + pushq %rbx + movl %esi, %eax + movq $0xd01, %r10 + vmovd %r10d, %xmm0 + vpbroadcastw %xmm0, %zmm0 + vmovdqu64 L_mlkem_rej_uniform_avx512_perm(%rip), %zmm1 + vmovdqu64 L_mlkem_rej_uniform_avx512_shuf(%rip), %zmm2 + vmovdqu64 L_mlkem_rej_uniform_avx512_mask(%rip), %zmm3 +L_mlkem_rej_uniform_avx512_fast: + cmpl $32, %esi + jl L_mlkem_rej_uniform_avx512_fast_end + cmpl $0x40, %ecx + jl L_mlkem_rej_uniform_avx512_fast_end + vpermd (%rdx), %zmm1, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpandnq %zmm4, %zmm3, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm3, %zmm4 + vpcmpw $0x01, %zmm0, %zmm4, %k1 + vpcompressw %zmm4, (%rdi){%k1} + kmovd %k1, %ebx + popcntl %ebx, %ebx + leaq (%rdi,%rbx,2), %rdi + subl %ebx, %esi + addq $48, %rdx + subl $48, %ecx + jmp L_mlkem_rej_uniform_avx512_fast +L_mlkem_rej_uniform_avx512_fast_end: +L_mlkem_rej_uniform_avx512_tail: + cmpl $0x00, %esi + je L_mlkem_rej_uniform_avx512_tail_end + cmpl $3, %ecx + jl L_mlkem_rej_uniform_avx512_tail_end + movzwl (%rdx), %r8d + andl $0xfff, %r8d + movzwl 1(%rdx), %r9d + shrl $4, %r9d + cmpl $0xd01, %r8d + jge L_mlkem_rej_uniform_avx512_skip0 + movw %r8w, (%rdi) + addq $2, %rdi + subl $0x01, %esi + je L_mlkem_rej_uniform_avx512_tail_end +L_mlkem_rej_uniform_avx512_skip0: + cmpl $0xd01, %r9d + jge L_mlkem_rej_uniform_avx512_skip1 + movw %r9w, (%rdi) + addq $2, %rdi + subl $0x01, %esi + je L_mlkem_rej_uniform_avx512_tail_end +L_mlkem_rej_uniform_avx512_skip1: + addq $3, %rdx + subl $3, %ecx + jmp L_mlkem_rej_uniform_avx512_tail +L_mlkem_rej_uniform_avx512_tail_end: + subl %esi, %eax + vzeroupper + popq %rbx + repz retq +#ifndef __APPLE__ +.size mlkem_rej_uniform_avx512,.-mlkem_rej_uniform_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_rej_uniform_n_avx512_perm: +.long 0x00000000,0x00000001,0x00000002,0x00000000 +.long 0x00000003,0x00000004,0x00000005,0x00000000 +.long 0x00000006,0x00000007,0x00000008,0x00000000 +.long 0x00000009,0x0000000a,0x0000000b,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_rej_uniform_n_avx512_shuf: +.byte 0x00,0x01,0x02,0xff,0x03,0x04,0x05,0xff +.byte 0x06,0x07,0x08,0xff,0x09,0x0a,0x0b,0xff +.byte 0x00,0x01,0x02,0xff,0x03,0x04,0x05,0xff +.byte 0x06,0x07,0x08,0xff,0x09,0x0a,0x0b,0xff +.byte 0x00,0x01,0x02,0xff,0x03,0x04,0x05,0xff +.byte 0x06,0x07,0x08,0xff,0x09,0x0a,0x0b,0xff +.byte 0x00,0x01,0x02,0xff,0x03,0x04,0x05,0xff +.byte 0x06,0x07,0x08,0xff,0x09,0x0a,0x0b,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_rej_uniform_n_avx512_mask: +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +#ifndef __APPLE__ +.text +.globl mlkem_rej_uniform_n_avx512 +.type mlkem_rej_uniform_n_avx512,@function +.align 16 +mlkem_rej_uniform_n_avx512: +#else +.section __TEXT,__text +.globl _mlkem_rej_uniform_n_avx512 +.p2align 4 +_mlkem_rej_uniform_n_avx512: +#endif /* __APPLE__ */ + pushq %rbx + movl %esi, %eax + movq $0xd01, %r10 + vmovd %r10d, %xmm0 + vpbroadcastw %xmm0, %zmm0 + vmovdqu64 L_mlkem_rej_uniform_n_avx512_perm(%rip), %zmm1 + vmovdqu64 L_mlkem_rej_uniform_n_avx512_shuf(%rip), %zmm2 + vmovdqu64 L_mlkem_rej_uniform_n_avx512_mask(%rip), %zmm3 +L_mlkem_rej_uniform_n_avx512_fast: + cmpl $32, %esi + jl L_mlkem_rej_uniform_n_avx512_fast_end + cmpl $0x40, %ecx + jl L_mlkem_rej_uniform_n_avx512_fast_end + vpermd (%rdx), %zmm1, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpandnq %zmm4, %zmm3, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm3, %zmm4 + vpcmpw $0x01, %zmm0, %zmm4, %k1 + vpcompressw %zmm4, (%rdi){%k1} + kmovd %k1, %ebx + popcntl %ebx, %ebx + leaq (%rdi,%rbx,2), %rdi + subl %ebx, %esi + addq $48, %rdx + subl $48, %ecx + jmp L_mlkem_rej_uniform_n_avx512_fast +L_mlkem_rej_uniform_n_avx512_fast_end: +L_mlkem_rej_uniform_n_avx512_tail: + cmpl $0x00, %esi + je L_mlkem_rej_uniform_n_avx512_tail_end + cmpl $3, %ecx + jl L_mlkem_rej_uniform_n_avx512_tail_end + movzwl (%rdx), %r8d + andl $0xfff, %r8d + movzwl 1(%rdx), %r9d + shrl $4, %r9d + cmpl $0xd01, %r8d + jge L_mlkem_rej_uniform_n_avx512_skip0 + movw %r8w, (%rdi) + addq $2, %rdi + subl $0x01, %esi + je L_mlkem_rej_uniform_n_avx512_tail_end +L_mlkem_rej_uniform_n_avx512_skip0: + cmpl $0xd01, %r9d + jge L_mlkem_rej_uniform_n_avx512_skip1 + movw %r9w, (%rdi) + addq $2, %rdi + subl $0x01, %esi + je L_mlkem_rej_uniform_n_avx512_tail_end +L_mlkem_rej_uniform_n_avx512_skip1: + addq $3, %rdx + subl $3, %ecx + jmp L_mlkem_rej_uniform_n_avx512_tail +L_mlkem_rej_uniform_n_avx512_tail_end: + subl %esi, %eax + vzeroupper + popq %rbx + repz retq +#ifndef __APPLE__ +.size mlkem_rej_uniform_n_avx512,.-mlkem_rej_uniform_n_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_8_rand_avx512_idx0: +.quad 0x0000000000000000,0x0000000000000004 +.quad 0x0000000000000008,0x000000000000000c +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_8_rand_avx512_idx1: +.quad 0x0000000000000001,0x0000000000000005 +.quad 0x0000000000000009,0x000000000000000d +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_8_rand_avx512_idx2: +.quad 0x0000000000000002,0x0000000000000006 +.quad 0x000000000000000a,0x000000000000000e +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_8_rand_avx512_idx3: +.quad 0x0000000000000003,0x0000000000000007 +.quad 0x000000000000000b,0x000000000000000f +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.text +.globl mlkem_redistribute_8_rand_avx512 +.type mlkem_redistribute_8_rand_avx512,@function +.align 16 +mlkem_redistribute_8_rand_avx512: +#else +.section __TEXT,__text +.globl _mlkem_redistribute_8_rand_avx512 +.p2align 4 +_mlkem_redistribute_8_rand_avx512: +#endif /* __APPLE__ */ + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_8_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%rsi) + vmovdqu64 L_mlkem_redistribute_8_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%rdx) + vmovdqu64 L_mlkem_redistribute_8_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%rcx) + vmovdqu64 L_mlkem_redistribute_8_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%r8) + vmovdqu64 128(%rdi), %zmm0 + vmovdqu64 192(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_8_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%rsi) + vmovdqu64 L_mlkem_redistribute_8_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%rdx) + vmovdqu64 L_mlkem_redistribute_8_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%rcx) + vmovdqu64 L_mlkem_redistribute_8_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%r8) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_redistribute_8_rand_avx512,.-mlkem_redistribute_8_rand_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_16_rand_avx512_idx0: +.quad 0x0000000000000000,0x0000000000000004 +.quad 0x0000000000000008,0x000000000000000c +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_16_rand_avx512_idx1: +.quad 0x0000000000000001,0x0000000000000005 +.quad 0x0000000000000009,0x000000000000000d +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_16_rand_avx512_idx2: +.quad 0x0000000000000002,0x0000000000000006 +.quad 0x000000000000000a,0x000000000000000e +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_16_rand_avx512_idx3: +.quad 0x0000000000000003,0x0000000000000007 +.quad 0x000000000000000b,0x000000000000000f +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.text +.globl mlkem_redistribute_16_rand_avx512 +.type mlkem_redistribute_16_rand_avx512,@function +.align 16 +mlkem_redistribute_16_rand_avx512: +#else +.section __TEXT,__text +.globl _mlkem_redistribute_16_rand_avx512 +.p2align 4 +_mlkem_redistribute_16_rand_avx512: +#endif /* __APPLE__ */ + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%rsi) + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%rdx) + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%rcx) + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%r8) + vmovdqu64 128(%rdi), %zmm0 + vmovdqu64 192(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%rsi) + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%rdx) + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%rcx) + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%r8) + vmovdqu64 256(%rdi), %zmm0 + vmovdqu64 320(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 64(%rsi) + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 64(%rdx) + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 64(%rcx) + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 64(%r8) + vmovdqu64 384(%rdi), %zmm0 + vmovdqu64 448(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 96(%rsi) + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 96(%rdx) + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 96(%rcx) + vmovdqu64 L_mlkem_redistribute_16_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 96(%r8) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_redistribute_16_rand_avx512,.-mlkem_redistribute_16_rand_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_17_rand_avx512_idx0: +.quad 0x0000000000000000,0x0000000000000004 +.quad 0x0000000000000008,0x000000000000000c +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_17_rand_avx512_idx1: +.quad 0x0000000000000001,0x0000000000000005 +.quad 0x0000000000000009,0x000000000000000d +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_17_rand_avx512_idx2: +.quad 0x0000000000000002,0x0000000000000006 +.quad 0x000000000000000a,0x000000000000000e +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_17_rand_avx512_idx3: +.quad 0x0000000000000003,0x0000000000000007 +.quad 0x000000000000000b,0x000000000000000f +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.text +.globl mlkem_redistribute_17_rand_avx512 +.type mlkem_redistribute_17_rand_avx512,@function +.align 16 +mlkem_redistribute_17_rand_avx512: +#else +.section __TEXT,__text +.globl _mlkem_redistribute_17_rand_avx512 +.p2align 4 +_mlkem_redistribute_17_rand_avx512: +#endif /* __APPLE__ */ + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%rsi) + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%rdx) + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%rcx) + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%r8) + vmovdqu64 128(%rdi), %zmm0 + vmovdqu64 192(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%rsi) + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%rdx) + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%rcx) + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%r8) + vmovdqu64 256(%rdi), %zmm0 + vmovdqu64 320(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 64(%rsi) + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 64(%rdx) + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 64(%rcx) + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 64(%r8) + vmovdqu64 384(%rdi), %zmm0 + vmovdqu64 448(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 96(%rsi) + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 96(%rdx) + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 96(%rcx) + vmovdqu64 L_mlkem_redistribute_17_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 96(%r8) + movq 512(%rdi), %rax + movq 520(%rdi), %r9 + movq 528(%rdi), %r10 + movq 536(%rdi), %r11 + movq %rax, 128(%rsi) + movq %r9, 128(%rdx) + movq %r10, 128(%rcx) + movq %r11, 128(%r8) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_redistribute_17_rand_avx512,.-mlkem_redistribute_17_rand_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_21_rand_avx512_idx0: +.quad 0x0000000000000000,0x0000000000000004 +.quad 0x0000000000000008,0x000000000000000c +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_21_rand_avx512_idx1: +.quad 0x0000000000000001,0x0000000000000005 +.quad 0x0000000000000009,0x000000000000000d +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_21_rand_avx512_idx2: +.quad 0x0000000000000002,0x0000000000000006 +.quad 0x000000000000000a,0x000000000000000e +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_redistribute_21_rand_avx512_idx3: +.quad 0x0000000000000003,0x0000000000000007 +.quad 0x000000000000000b,0x000000000000000f +.quad 0x0000000000000000,0x0000000000000000 +.quad 0x0000000000000000,0x0000000000000000 +#ifndef __APPLE__ +.text +.globl mlkem_redistribute_21_rand_avx512 +.type mlkem_redistribute_21_rand_avx512,@function +.align 16 +mlkem_redistribute_21_rand_avx512: +#else +.section __TEXT,__text +.globl _mlkem_redistribute_21_rand_avx512 +.p2align 4 +_mlkem_redistribute_21_rand_avx512: +#endif /* __APPLE__ */ + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%rsi) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%rdx) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%rcx) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, (%r8) + vmovdqu64 128(%rdi), %zmm0 + vmovdqu64 192(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%rsi) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%rdx) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%rcx) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 32(%r8) + vmovdqu64 256(%rdi), %zmm0 + vmovdqu64 320(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 64(%rsi) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 64(%rdx) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 64(%rcx) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 64(%r8) + vmovdqu64 384(%rdi), %zmm0 + vmovdqu64 448(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 96(%rsi) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 96(%rdx) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 96(%rcx) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 96(%r8) + vmovdqu64 512(%rdi), %zmm0 + vmovdqu64 576(%rdi), %zmm1 + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx0(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 128(%rsi) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx1(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 128(%rdx) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx2(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 128(%rcx) + vmovdqu64 L_mlkem_redistribute_21_rand_avx512_idx3(%rip), %zmm2 + vpermi2q %zmm1, %zmm0, %zmm2 + vmovdqu %ymm2, 128(%r8) + movq 640(%rdi), %rax + movq 648(%rdi), %r9 + movq 656(%rdi), %r10 + movq 664(%rdi), %r11 + movq %rax, 160(%rsi) + movq %r9, 160(%rdx) + movq %r10, 160(%rcx) + movq %r11, 160(%r8) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_redistribute_21_rand_avx512,.-mlkem_redistribute_21_rand_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl mlkem_redistribute_8_rand_x8_avx512 +.type mlkem_redistribute_8_rand_x8_avx512,@function +.align 16 +mlkem_redistribute_8_rand_x8_avx512: +#else +.section __TEXT,__text +.globl _mlkem_redistribute_8_rand_x8_avx512 +.p2align 4 +_mlkem_redistribute_8_rand_x8_avx512: +#endif /* __APPLE__ */ + pushq %r12 + pushq %r13 + pushq %r14 + movl %edx, %r13d + movq %rsi, %rax + addq %r13, %rax + movq %rax, %rcx + addq %r13, %rcx + movq %rcx, %r8 + addq %r13, %r8 + movq %r8, %r9 + addq %r13, %r9 + movq %r9, %r10 + addq %r13, %r10 + movq %r10, %r11 + addq %r13, %r11 + movq %r11, %r12 + addq %r13, %r12 + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vpunpcklqdq %zmm1, %zmm0, %zmm8 + vpunpckhqdq %zmm1, %zmm0, %zmm9 + vpunpcklqdq %zmm3, %zmm2, %zmm10 + vpunpckhqdq %zmm3, %zmm2, %zmm11 + vpunpcklqdq %zmm5, %zmm4, %zmm12 + vpunpckhqdq %zmm5, %zmm4, %zmm13 + vpunpcklqdq %zmm7, %zmm6, %zmm14 + vpunpckhqdq %zmm7, %zmm6, %zmm15 + vshufi64x2 $0x88, %zmm10, %zmm8, %zmm16 + vshufi64x2 $0x88, %zmm11, %zmm9, %zmm17 + vshufi64x2 $0xdd, %zmm10, %zmm8, %zmm18 + vshufi64x2 $0xdd, %zmm11, %zmm9, %zmm19 + vshufi64x2 $0x88, %zmm14, %zmm12, %zmm20 + vshufi64x2 $0x88, %zmm15, %zmm13, %zmm21 + vshufi64x2 $0xdd, %zmm14, %zmm12, %zmm22 + vshufi64x2 $0xdd, %zmm15, %zmm13, %zmm23 + vshufi64x2 $0x88, %zmm20, %zmm16, %zmm0 + vshufi64x2 $0xdd, %zmm20, %zmm16, %zmm4 + vshufi64x2 $0x88, %zmm21, %zmm17, %zmm1 + vshufi64x2 $0xdd, %zmm21, %zmm17, %zmm5 + vshufi64x2 $0x88, %zmm22, %zmm18, %zmm2 + vshufi64x2 $0xdd, %zmm22, %zmm18, %zmm6 + vshufi64x2 $0x88, %zmm23, %zmm19, %zmm3 + vshufi64x2 $0xdd, %zmm23, %zmm19, %zmm7 + vmovdqu64 %zmm0, (%rsi) + vmovdqu64 %zmm1, (%rax) + vmovdqu64 %zmm2, (%rcx) + vmovdqu64 %zmm3, (%r8) + vmovdqu64 %zmm4, (%r9) + vmovdqu64 %zmm5, (%r10) + vmovdqu64 %zmm6, (%r11) + vmovdqu64 %zmm7, (%r12) + vzeroupper + popq %r14 + popq %r13 + popq %r12 + repz retq +#ifndef __APPLE__ +.size mlkem_redistribute_8_rand_x8_avx512,.-mlkem_redistribute_8_rand_x8_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl mlkem_redistribute_16_rand_x8_avx512 +.type mlkem_redistribute_16_rand_x8_avx512,@function +.align 16 +mlkem_redistribute_16_rand_x8_avx512: +#else +.section __TEXT,__text +.globl _mlkem_redistribute_16_rand_x8_avx512 +.p2align 4 +_mlkem_redistribute_16_rand_x8_avx512: +#endif /* __APPLE__ */ + pushq %r12 + pushq %r13 + pushq %r14 + movl %edx, %r13d + movq %rsi, %rax + addq %r13, %rax + movq %rax, %rcx + addq %r13, %rcx + movq %rcx, %r8 + addq %r13, %r8 + movq %r8, %r9 + addq %r13, %r9 + movq %r9, %r10 + addq %r13, %r10 + movq %r10, %r11 + addq %r13, %r11 + movq %r11, %r12 + addq %r13, %r12 + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vpunpcklqdq %zmm1, %zmm0, %zmm8 + vpunpckhqdq %zmm1, %zmm0, %zmm9 + vpunpcklqdq %zmm3, %zmm2, %zmm10 + vpunpckhqdq %zmm3, %zmm2, %zmm11 + vpunpcklqdq %zmm5, %zmm4, %zmm12 + vpunpckhqdq %zmm5, %zmm4, %zmm13 + vpunpcklqdq %zmm7, %zmm6, %zmm14 + vpunpckhqdq %zmm7, %zmm6, %zmm15 + vshufi64x2 $0x88, %zmm10, %zmm8, %zmm16 + vshufi64x2 $0x88, %zmm11, %zmm9, %zmm17 + vshufi64x2 $0xdd, %zmm10, %zmm8, %zmm18 + vshufi64x2 $0xdd, %zmm11, %zmm9, %zmm19 + vshufi64x2 $0x88, %zmm14, %zmm12, %zmm20 + vshufi64x2 $0x88, %zmm15, %zmm13, %zmm21 + vshufi64x2 $0xdd, %zmm14, %zmm12, %zmm22 + vshufi64x2 $0xdd, %zmm15, %zmm13, %zmm23 + vshufi64x2 $0x88, %zmm20, %zmm16, %zmm0 + vshufi64x2 $0xdd, %zmm20, %zmm16, %zmm4 + vshufi64x2 $0x88, %zmm21, %zmm17, %zmm1 + vshufi64x2 $0xdd, %zmm21, %zmm17, %zmm5 + vshufi64x2 $0x88, %zmm22, %zmm18, %zmm2 + vshufi64x2 $0xdd, %zmm22, %zmm18, %zmm6 + vshufi64x2 $0x88, %zmm23, %zmm19, %zmm3 + vshufi64x2 $0xdd, %zmm23, %zmm19, %zmm7 + vmovdqu64 %zmm0, (%rsi) + vmovdqu64 %zmm1, (%rax) + vmovdqu64 %zmm2, (%rcx) + vmovdqu64 %zmm3, (%r8) + vmovdqu64 %zmm4, (%r9) + vmovdqu64 %zmm5, (%r10) + vmovdqu64 %zmm6, (%r11) + vmovdqu64 %zmm7, (%r12) + vmovdqu64 512(%rdi), %zmm0 + vmovdqu64 576(%rdi), %zmm1 + vmovdqu64 640(%rdi), %zmm2 + vmovdqu64 704(%rdi), %zmm3 + vmovdqu64 768(%rdi), %zmm4 + vmovdqu64 832(%rdi), %zmm5 + vmovdqu64 896(%rdi), %zmm6 + vmovdqu64 960(%rdi), %zmm7 + vpunpcklqdq %zmm1, %zmm0, %zmm8 + vpunpckhqdq %zmm1, %zmm0, %zmm9 + vpunpcklqdq %zmm3, %zmm2, %zmm10 + vpunpckhqdq %zmm3, %zmm2, %zmm11 + vpunpcklqdq %zmm5, %zmm4, %zmm12 + vpunpckhqdq %zmm5, %zmm4, %zmm13 + vpunpcklqdq %zmm7, %zmm6, %zmm14 + vpunpckhqdq %zmm7, %zmm6, %zmm15 + vshufi64x2 $0x88, %zmm10, %zmm8, %zmm16 + vshufi64x2 $0x88, %zmm11, %zmm9, %zmm17 + vshufi64x2 $0xdd, %zmm10, %zmm8, %zmm18 + vshufi64x2 $0xdd, %zmm11, %zmm9, %zmm19 + vshufi64x2 $0x88, %zmm14, %zmm12, %zmm20 + vshufi64x2 $0x88, %zmm15, %zmm13, %zmm21 + vshufi64x2 $0xdd, %zmm14, %zmm12, %zmm22 + vshufi64x2 $0xdd, %zmm15, %zmm13, %zmm23 + vshufi64x2 $0x88, %zmm20, %zmm16, %zmm0 + vshufi64x2 $0xdd, %zmm20, %zmm16, %zmm4 + vshufi64x2 $0x88, %zmm21, %zmm17, %zmm1 + vshufi64x2 $0xdd, %zmm21, %zmm17, %zmm5 + vshufi64x2 $0x88, %zmm22, %zmm18, %zmm2 + vshufi64x2 $0xdd, %zmm22, %zmm18, %zmm6 + vshufi64x2 $0x88, %zmm23, %zmm19, %zmm3 + vshufi64x2 $0xdd, %zmm23, %zmm19, %zmm7 + vmovdqu64 %zmm0, 64(%rsi) + vmovdqu64 %zmm1, 64(%rax) + vmovdqu64 %zmm2, 64(%rcx) + vmovdqu64 %zmm3, 64(%r8) + vmovdqu64 %zmm4, 64(%r9) + vmovdqu64 %zmm5, 64(%r10) + vmovdqu64 %zmm6, 64(%r11) + vmovdqu64 %zmm7, 64(%r12) + vzeroupper + popq %r14 + popq %r13 + popq %r12 + repz retq +#ifndef __APPLE__ +.size mlkem_redistribute_16_rand_x8_avx512,.-mlkem_redistribute_16_rand_x8_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl mlkem_redistribute_17_rand_x8_avx512 +.type mlkem_redistribute_17_rand_x8_avx512,@function +.align 16 +mlkem_redistribute_17_rand_x8_avx512: +#else +.section __TEXT,__text +.globl _mlkem_redistribute_17_rand_x8_avx512 +.p2align 4 +_mlkem_redistribute_17_rand_x8_avx512: +#endif /* __APPLE__ */ + pushq %r12 + pushq %r13 + pushq %r14 + movl %edx, %r13d + movq %rsi, %rax + addq %r13, %rax + movq %rax, %rcx + addq %r13, %rcx + movq %rcx, %r8 + addq %r13, %r8 + movq %r8, %r9 + addq %r13, %r9 + movq %r9, %r10 + addq %r13, %r10 + movq %r10, %r11 + addq %r13, %r11 + movq %r11, %r12 + addq %r13, %r12 + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vpunpcklqdq %zmm1, %zmm0, %zmm8 + vpunpckhqdq %zmm1, %zmm0, %zmm9 + vpunpcklqdq %zmm3, %zmm2, %zmm10 + vpunpckhqdq %zmm3, %zmm2, %zmm11 + vpunpcklqdq %zmm5, %zmm4, %zmm12 + vpunpckhqdq %zmm5, %zmm4, %zmm13 + vpunpcklqdq %zmm7, %zmm6, %zmm14 + vpunpckhqdq %zmm7, %zmm6, %zmm15 + vshufi64x2 $0x88, %zmm10, %zmm8, %zmm16 + vshufi64x2 $0x88, %zmm11, %zmm9, %zmm17 + vshufi64x2 $0xdd, %zmm10, %zmm8, %zmm18 + vshufi64x2 $0xdd, %zmm11, %zmm9, %zmm19 + vshufi64x2 $0x88, %zmm14, %zmm12, %zmm20 + vshufi64x2 $0x88, %zmm15, %zmm13, %zmm21 + vshufi64x2 $0xdd, %zmm14, %zmm12, %zmm22 + vshufi64x2 $0xdd, %zmm15, %zmm13, %zmm23 + vshufi64x2 $0x88, %zmm20, %zmm16, %zmm0 + vshufi64x2 $0xdd, %zmm20, %zmm16, %zmm4 + vshufi64x2 $0x88, %zmm21, %zmm17, %zmm1 + vshufi64x2 $0xdd, %zmm21, %zmm17, %zmm5 + vshufi64x2 $0x88, %zmm22, %zmm18, %zmm2 + vshufi64x2 $0xdd, %zmm22, %zmm18, %zmm6 + vshufi64x2 $0x88, %zmm23, %zmm19, %zmm3 + vshufi64x2 $0xdd, %zmm23, %zmm19, %zmm7 + vmovdqu64 %zmm0, (%rsi) + vmovdqu64 %zmm1, (%rax) + vmovdqu64 %zmm2, (%rcx) + vmovdqu64 %zmm3, (%r8) + vmovdqu64 %zmm4, (%r9) + vmovdqu64 %zmm5, (%r10) + vmovdqu64 %zmm6, (%r11) + vmovdqu64 %zmm7, (%r12) + vmovdqu64 512(%rdi), %zmm0 + vmovdqu64 576(%rdi), %zmm1 + vmovdqu64 640(%rdi), %zmm2 + vmovdqu64 704(%rdi), %zmm3 + vmovdqu64 768(%rdi), %zmm4 + vmovdqu64 832(%rdi), %zmm5 + vmovdqu64 896(%rdi), %zmm6 + vmovdqu64 960(%rdi), %zmm7 + vpunpcklqdq %zmm1, %zmm0, %zmm8 + vpunpckhqdq %zmm1, %zmm0, %zmm9 + vpunpcklqdq %zmm3, %zmm2, %zmm10 + vpunpckhqdq %zmm3, %zmm2, %zmm11 + vpunpcklqdq %zmm5, %zmm4, %zmm12 + vpunpckhqdq %zmm5, %zmm4, %zmm13 + vpunpcklqdq %zmm7, %zmm6, %zmm14 + vpunpckhqdq %zmm7, %zmm6, %zmm15 + vshufi64x2 $0x88, %zmm10, %zmm8, %zmm16 + vshufi64x2 $0x88, %zmm11, %zmm9, %zmm17 + vshufi64x2 $0xdd, %zmm10, %zmm8, %zmm18 + vshufi64x2 $0xdd, %zmm11, %zmm9, %zmm19 + vshufi64x2 $0x88, %zmm14, %zmm12, %zmm20 + vshufi64x2 $0x88, %zmm15, %zmm13, %zmm21 + vshufi64x2 $0xdd, %zmm14, %zmm12, %zmm22 + vshufi64x2 $0xdd, %zmm15, %zmm13, %zmm23 + vshufi64x2 $0x88, %zmm20, %zmm16, %zmm0 + vshufi64x2 $0xdd, %zmm20, %zmm16, %zmm4 + vshufi64x2 $0x88, %zmm21, %zmm17, %zmm1 + vshufi64x2 $0xdd, %zmm21, %zmm17, %zmm5 + vshufi64x2 $0x88, %zmm22, %zmm18, %zmm2 + vshufi64x2 $0xdd, %zmm22, %zmm18, %zmm6 + vshufi64x2 $0x88, %zmm23, %zmm19, %zmm3 + vshufi64x2 $0xdd, %zmm23, %zmm19, %zmm7 + vmovdqu64 %zmm0, 64(%rsi) + vmovdqu64 %zmm1, 64(%rax) + vmovdqu64 %zmm2, 64(%rcx) + vmovdqu64 %zmm3, 64(%r8) + vmovdqu64 %zmm4, 64(%r9) + vmovdqu64 %zmm5, 64(%r10) + vmovdqu64 %zmm6, 64(%r11) + vmovdqu64 %zmm7, 64(%r12) + movq 1024(%rdi), %r14 + movq %r14, 128(%rsi) + movq 1032(%rdi), %r14 + movq %r14, 128(%rax) + movq 1040(%rdi), %r14 + movq %r14, 128(%rcx) + movq 1048(%rdi), %r14 + movq %r14, 128(%r8) + movq 1056(%rdi), %r14 + movq %r14, 128(%r9) + movq 1064(%rdi), %r14 + movq %r14, 128(%r10) + movq 1072(%rdi), %r14 + movq %r14, 128(%r11) + movq 1080(%rdi), %r14 + movq %r14, 128(%r12) + vzeroupper + popq %r14 + popq %r13 + popq %r12 + repz retq +#ifndef __APPLE__ +.size mlkem_redistribute_17_rand_x8_avx512,.-mlkem_redistribute_17_rand_x8_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl mlkem_redistribute_21_rand_x8_avx512 +.type mlkem_redistribute_21_rand_x8_avx512,@function +.align 16 +mlkem_redistribute_21_rand_x8_avx512: +#else +.section __TEXT,__text +.globl _mlkem_redistribute_21_rand_x8_avx512 +.p2align 4 +_mlkem_redistribute_21_rand_x8_avx512: +#endif /* __APPLE__ */ + pushq %r12 + pushq %r13 + pushq %r14 + movl %edx, %r13d + movq %rsi, %rax + addq %r13, %rax + movq %rax, %rcx + addq %r13, %rcx + movq %rcx, %r8 + addq %r13, %r8 + movq %r8, %r9 + addq %r13, %r9 + movq %r9, %r10 + addq %r13, %r10 + movq %r10, %r11 + addq %r13, %r11 + movq %r11, %r12 + addq %r13, %r12 + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vpunpcklqdq %zmm1, %zmm0, %zmm8 + vpunpckhqdq %zmm1, %zmm0, %zmm9 + vpunpcklqdq %zmm3, %zmm2, %zmm10 + vpunpckhqdq %zmm3, %zmm2, %zmm11 + vpunpcklqdq %zmm5, %zmm4, %zmm12 + vpunpckhqdq %zmm5, %zmm4, %zmm13 + vpunpcklqdq %zmm7, %zmm6, %zmm14 + vpunpckhqdq %zmm7, %zmm6, %zmm15 + vshufi64x2 $0x88, %zmm10, %zmm8, %zmm16 + vshufi64x2 $0x88, %zmm11, %zmm9, %zmm17 + vshufi64x2 $0xdd, %zmm10, %zmm8, %zmm18 + vshufi64x2 $0xdd, %zmm11, %zmm9, %zmm19 + vshufi64x2 $0x88, %zmm14, %zmm12, %zmm20 + vshufi64x2 $0x88, %zmm15, %zmm13, %zmm21 + vshufi64x2 $0xdd, %zmm14, %zmm12, %zmm22 + vshufi64x2 $0xdd, %zmm15, %zmm13, %zmm23 + vshufi64x2 $0x88, %zmm20, %zmm16, %zmm0 + vshufi64x2 $0xdd, %zmm20, %zmm16, %zmm4 + vshufi64x2 $0x88, %zmm21, %zmm17, %zmm1 + vshufi64x2 $0xdd, %zmm21, %zmm17, %zmm5 + vshufi64x2 $0x88, %zmm22, %zmm18, %zmm2 + vshufi64x2 $0xdd, %zmm22, %zmm18, %zmm6 + vshufi64x2 $0x88, %zmm23, %zmm19, %zmm3 + vshufi64x2 $0xdd, %zmm23, %zmm19, %zmm7 + vmovdqu64 %zmm0, (%rsi) + vmovdqu64 %zmm1, (%rax) + vmovdqu64 %zmm2, (%rcx) + vmovdqu64 %zmm3, (%r8) + vmovdqu64 %zmm4, (%r9) + vmovdqu64 %zmm5, (%r10) + vmovdqu64 %zmm6, (%r11) + vmovdqu64 %zmm7, (%r12) + vmovdqu64 512(%rdi), %zmm0 + vmovdqu64 576(%rdi), %zmm1 + vmovdqu64 640(%rdi), %zmm2 + vmovdqu64 704(%rdi), %zmm3 + vmovdqu64 768(%rdi), %zmm4 + vmovdqu64 832(%rdi), %zmm5 + vmovdqu64 896(%rdi), %zmm6 + vmovdqu64 960(%rdi), %zmm7 + vpunpcklqdq %zmm1, %zmm0, %zmm8 + vpunpckhqdq %zmm1, %zmm0, %zmm9 + vpunpcklqdq %zmm3, %zmm2, %zmm10 + vpunpckhqdq %zmm3, %zmm2, %zmm11 + vpunpcklqdq %zmm5, %zmm4, %zmm12 + vpunpckhqdq %zmm5, %zmm4, %zmm13 + vpunpcklqdq %zmm7, %zmm6, %zmm14 + vpunpckhqdq %zmm7, %zmm6, %zmm15 + vshufi64x2 $0x88, %zmm10, %zmm8, %zmm16 + vshufi64x2 $0x88, %zmm11, %zmm9, %zmm17 + vshufi64x2 $0xdd, %zmm10, %zmm8, %zmm18 + vshufi64x2 $0xdd, %zmm11, %zmm9, %zmm19 + vshufi64x2 $0x88, %zmm14, %zmm12, %zmm20 + vshufi64x2 $0x88, %zmm15, %zmm13, %zmm21 + vshufi64x2 $0xdd, %zmm14, %zmm12, %zmm22 + vshufi64x2 $0xdd, %zmm15, %zmm13, %zmm23 + vshufi64x2 $0x88, %zmm20, %zmm16, %zmm0 + vshufi64x2 $0xdd, %zmm20, %zmm16, %zmm4 + vshufi64x2 $0x88, %zmm21, %zmm17, %zmm1 + vshufi64x2 $0xdd, %zmm21, %zmm17, %zmm5 + vshufi64x2 $0x88, %zmm22, %zmm18, %zmm2 + vshufi64x2 $0xdd, %zmm22, %zmm18, %zmm6 + vshufi64x2 $0x88, %zmm23, %zmm19, %zmm3 + vshufi64x2 $0xdd, %zmm23, %zmm19, %zmm7 + vmovdqu64 %zmm0, 64(%rsi) + vmovdqu64 %zmm1, 64(%rax) + vmovdqu64 %zmm2, 64(%rcx) + vmovdqu64 %zmm3, 64(%r8) + vmovdqu64 %zmm4, 64(%r9) + vmovdqu64 %zmm5, 64(%r10) + vmovdqu64 %zmm6, 64(%r11) + vmovdqu64 %zmm7, 64(%r12) + movq 1024(%rdi), %r14 + movq %r14, 128(%rsi) + movq 1032(%rdi), %r14 + movq %r14, 128(%rax) + movq 1040(%rdi), %r14 + movq %r14, 128(%rcx) + movq 1048(%rdi), %r14 + movq %r14, 128(%r8) + movq 1056(%rdi), %r14 + movq %r14, 128(%r9) + movq 1064(%rdi), %r14 + movq %r14, 128(%r10) + movq 1072(%rdi), %r14 + movq %r14, 128(%r11) + movq 1080(%rdi), %r14 + movq %r14, 128(%r12) + movq 1088(%rdi), %r14 + movq %r14, 136(%rsi) + movq 1096(%rdi), %r14 + movq %r14, 136(%rax) + movq 1104(%rdi), %r14 + movq %r14, 136(%rcx) + movq 1112(%rdi), %r14 + movq %r14, 136(%r8) + movq 1120(%rdi), %r14 + movq %r14, 136(%r9) + movq 1128(%rdi), %r14 + movq %r14, 136(%r10) + movq 1136(%rdi), %r14 + movq %r14, 136(%r11) + movq 1144(%rdi), %r14 + movq %r14, 136(%r12) + movq 1152(%rdi), %r14 + movq %r14, 144(%rsi) + movq 1160(%rdi), %r14 + movq %r14, 144(%rax) + movq 1168(%rdi), %r14 + movq %r14, 144(%rcx) + movq 1176(%rdi), %r14 + movq %r14, 144(%r8) + movq 1184(%rdi), %r14 + movq %r14, 144(%r9) + movq 1192(%rdi), %r14 + movq %r14, 144(%r10) + movq 1200(%rdi), %r14 + movq %r14, 144(%r11) + movq 1208(%rdi), %r14 + movq %r14, 144(%r12) + movq 1216(%rdi), %r14 + movq %r14, 152(%rsi) + movq 1224(%rdi), %r14 + movq %r14, 152(%rax) + movq 1232(%rdi), %r14 + movq %r14, 152(%rcx) + movq 1240(%rdi), %r14 + movq %r14, 152(%r8) + movq 1248(%rdi), %r14 + movq %r14, 152(%r9) + movq 1256(%rdi), %r14 + movq %r14, 152(%r10) + movq 1264(%rdi), %r14 + movq %r14, 152(%r11) + movq 1272(%rdi), %r14 + movq %r14, 152(%r12) + movq 1280(%rdi), %r14 + movq %r14, 160(%rsi) + movq 1288(%rdi), %r14 + movq %r14, 160(%rax) + movq 1296(%rdi), %r14 + movq %r14, 160(%rcx) + movq 1304(%rdi), %r14 + movq %r14, 160(%r8) + movq 1312(%rdi), %r14 + movq %r14, 160(%r9) + movq 1320(%rdi), %r14 + movq %r14, 160(%r10) + movq 1328(%rdi), %r14 + movq %r14, 160(%r11) + movq 1336(%rdi), %r14 + movq %r14, 160(%r12) + vzeroupper + popq %r14 + popq %r13 + popq %r12 + repz retq +#ifndef __APPLE__ +.size mlkem_redistribute_21_rand_x8_avx512,.-mlkem_redistribute_21_rand_x8_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl mlkem_csubq_avx512 +.type mlkem_csubq_avx512,@function +.align 16 +mlkem_csubq_avx512: +#else +.section __TEXT,__text +.globl _mlkem_csubq_avx512 +.p2align 4 +_mlkem_csubq_avx512: +#endif /* __APPLE__ */ + movq $0xd01, %rdx + vmovd %edx, %xmm12 + vpbroadcastw %xmm12, %zmm12 + vmovdqu64 (%rdi), %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vmovdqu64 128(%rdi), %zmm2 + vmovdqu64 192(%rdi), %zmm3 + vmovdqu64 256(%rdi), %zmm4 + vmovdqu64 320(%rdi), %zmm5 + vmovdqu64 384(%rdi), %zmm6 + vmovdqu64 448(%rdi), %zmm7 + vpsubw %zmm12, %zmm0, %zmm8 + vpsubw %zmm12, %zmm1, %zmm9 + vpsubw %zmm12, %zmm2, %zmm10 + vpsubw %zmm12, %zmm3, %zmm11 + vpsraw $15, %zmm8, %zmm0 + vpsraw $15, %zmm9, %zmm1 + vpsraw $15, %zmm10, %zmm2 + vpsraw $15, %zmm11, %zmm3 + vpandq %zmm12, %zmm0, %zmm0 + vpandq %zmm12, %zmm1, %zmm1 + vpandq %zmm12, %zmm2, %zmm2 + vpandq %zmm12, %zmm3, %zmm3 + vpaddw %zmm8, %zmm0, %zmm0 + vpaddw %zmm9, %zmm1, %zmm1 + vpaddw %zmm10, %zmm2, %zmm2 + vpaddw %zmm11, %zmm3, %zmm3 + vpsubw %zmm12, %zmm4, %zmm8 + vpsubw %zmm12, %zmm5, %zmm9 + vpsubw %zmm12, %zmm6, %zmm10 + vpsubw %zmm12, %zmm7, %zmm11 + vpsraw $15, %zmm8, %zmm4 + vpsraw $15, %zmm9, %zmm5 + vpsraw $15, %zmm10, %zmm6 + vpsraw $15, %zmm11, %zmm7 + vpandq %zmm12, %zmm4, %zmm4 + vpandq %zmm12, %zmm5, %zmm5 + vpandq %zmm12, %zmm6, %zmm6 + vpandq %zmm12, %zmm7, %zmm7 + vpaddw %zmm8, %zmm4, %zmm4 + vpaddw %zmm9, %zmm5, %zmm5 + vpaddw %zmm10, %zmm6, %zmm6 + vpaddw %zmm11, %zmm7, %zmm7 + vmovdqu64 %zmm0, (%rdi) + vmovdqu64 %zmm1, 64(%rdi) + vmovdqu64 %zmm2, 128(%rdi) + vmovdqu64 %zmm3, 192(%rdi) + vmovdqu64 %zmm4, 256(%rdi) + vmovdqu64 %zmm5, 320(%rdi) + vmovdqu64 %zmm6, 384(%rdi) + vmovdqu64 %zmm7, 448(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_csubq_avx512,.-mlkem_csubq_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl mlkem_cmp_avx512 +.type mlkem_cmp_avx512,@function +.align 16 +mlkem_cmp_avx512: +#else +.section __TEXT,__text +.globl _mlkem_cmp_avx512 +.p2align 4 +_mlkem_cmp_avx512: +#endif /* __APPLE__ */ + vpxorq %zmm0, %zmm0, %zmm0 + vpxor %ymm2, %ymm2, %ymm2 + movl $0x00, %ecx + movl $-1, %r8d + vmovdqu64 (%rdi), %zmm1 + vpternlogd $0xf6, (%rsi), %zmm1, %zmm0 + vmovdqu64 64(%rdi), %zmm1 + vpternlogd $0xf6, 64(%rsi), %zmm1, %zmm0 + vmovdqu64 128(%rdi), %zmm1 + vpternlogd $0xf6, 128(%rsi), %zmm1, %zmm0 + vmovdqu64 192(%rdi), %zmm1 + vpternlogd $0xf6, 192(%rsi), %zmm1, %zmm0 + vmovdqu64 256(%rdi), %zmm1 + vpternlogd $0xf6, 256(%rsi), %zmm1, %zmm0 + vmovdqu64 320(%rdi), %zmm1 + vpternlogd $0xf6, 320(%rsi), %zmm1, %zmm0 + vmovdqu64 384(%rdi), %zmm1 + vpternlogd $0xf6, 384(%rsi), %zmm1, %zmm0 + vmovdqu64 448(%rdi), %zmm1 + vpternlogd $0xf6, 448(%rsi), %zmm1, %zmm0 + vmovdqu64 512(%rdi), %zmm1 + vpternlogd $0xf6, 512(%rsi), %zmm1, %zmm0 + vmovdqu64 576(%rdi), %zmm1 + vpternlogd $0xf6, 576(%rsi), %zmm1, %zmm0 + vmovdqu64 640(%rdi), %zmm1 + vpternlogd $0xf6, 640(%rsi), %zmm1, %zmm0 + vmovdqu64 704(%rdi), %zmm1 + vpternlogd $0xf6, 704(%rsi), %zmm1, %zmm0 + subl $0x300, %edx + jz L_mlkem_cmp_avx512_done + vmovdqu64 768(%rdi), %zmm1 + vpternlogd $0xf6, 768(%rsi), %zmm1, %zmm0 + vmovdqu64 832(%rdi), %zmm1 + vpternlogd $0xf6, 832(%rsi), %zmm1, %zmm0 + vmovdqu64 896(%rdi), %zmm1 + vpternlogd $0xf6, 896(%rsi), %zmm1, %zmm0 + vmovdqu64 960(%rdi), %zmm1 + vpternlogd $0xf6, 960(%rsi), %zmm1, %zmm0 + vmovdqu64 1024(%rdi), %zmm1 + vpternlogd $0xf6, 1024(%rsi), %zmm1, %zmm0 + subl $0x140, %edx + jz L_mlkem_cmp_avx512_done + vmovdqu64 1088(%rdi), %zmm1 + vpternlogd $0xf6, 1088(%rsi), %zmm1, %zmm0 + vmovdqu64 1152(%rdi), %zmm1 + vpternlogd $0xf6, 1152(%rsi), %zmm1, %zmm0 + vmovdqu64 1216(%rdi), %zmm1 + vpternlogd $0xf6, 1216(%rsi), %zmm1, %zmm0 + vmovdqu64 1280(%rdi), %zmm1 + vpternlogd $0xf6, 1280(%rsi), %zmm1, %zmm0 + vmovdqu64 1344(%rdi), %zmm1 + vpternlogd $0xf6, 1344(%rsi), %zmm1, %zmm0 + vmovdqu64 1408(%rdi), %zmm1 + vpternlogd $0xf6, 1408(%rsi), %zmm1, %zmm0 + vmovdqu64 1472(%rdi), %zmm1 + vpternlogd $0xf6, 1472(%rsi), %zmm1, %zmm0 + vmovdqu 1536(%rdi), %ymm2 + vpxor 1536(%rsi), %ymm2, %ymm2 +L_mlkem_cmp_avx512_done: + vextracti64x4 $0x01, %zmm0, %ymm3 + vpor %ymm3, %ymm0, %ymm0 + vpor %ymm2, %ymm0, %ymm0 + vptest %ymm0, %ymm0 + cmovzl %ecx, %eax + cmovnzl %r8d, %eax + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_cmp_avx512,.-mlkem_cmp_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_from_bytes_avx512_perm_lo: +.long 0x00000000,0x00000001,0x00000002,0x00000000 +.long 0x00000003,0x00000004,0x00000005,0x00000000 +.long 0x00000006,0x00000007,0x00000008,0x00000000 +.long 0x00000009,0x0000000a,0x0000000b,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_from_bytes_avx512_perm_hi: +.long 0x00000004,0x00000005,0x00000006,0x00000000 +.long 0x00000007,0x00000008,0x00000009,0x00000000 +.long 0x0000000a,0x0000000b,0x0000000c,0x00000000 +.long 0x0000000d,0x0000000e,0x0000000f,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_from_bytes_avx512_shuf: +.byte 0x00,0x01,0x02,0xff,0x03,0x04,0x05,0xff +.byte 0x06,0x07,0x08,0xff,0x09,0x0a,0x0b,0xff +.byte 0x00,0x01,0x02,0xff,0x03,0x04,0x05,0xff +.byte 0x06,0x07,0x08,0xff,0x09,0x0a,0x0b,0xff +.byte 0x00,0x01,0x02,0xff,0x03,0x04,0x05,0xff +.byte 0x06,0x07,0x08,0xff,0x09,0x0a,0x0b,0xff +.byte 0x00,0x01,0x02,0xff,0x03,0x04,0x05,0xff +.byte 0x06,0x07,0x08,0xff,0x09,0x0a,0x0b,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_from_bytes_avx512_mask: +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +#ifndef __APPLE__ +.text +.globl mlkem_from_bytes_avx512 +.type mlkem_from_bytes_avx512,@function +.align 16 +mlkem_from_bytes_avx512: +#else +.section __TEXT,__text +.globl _mlkem_from_bytes_avx512 +.p2align 4 +_mlkem_from_bytes_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mlkem_from_bytes_avx512_perm_lo(%rip), %zmm0 + vmovdqu64 L_mlkem_from_bytes_avx512_perm_hi(%rip), %zmm1 + vmovdqu64 L_mlkem_from_bytes_avx512_shuf(%rip), %zmm2 + vmovdqu64 L_mlkem_from_bytes_avx512_mask(%rip), %zmm3 + vpermd (%rsi), %zmm0, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpandnq %zmm4, %zmm3, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm3, %zmm4 + vmovdqu64 %zmm4, (%rdi) + vpermd 48(%rsi), %zmm0, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpandnq %zmm4, %zmm3, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm3, %zmm4 + vmovdqu64 %zmm4, 64(%rdi) + vpermd 96(%rsi), %zmm0, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpandnq %zmm4, %zmm3, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm3, %zmm4 + vmovdqu64 %zmm4, 128(%rdi) + vpermd 144(%rsi), %zmm0, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpandnq %zmm4, %zmm3, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm3, %zmm4 + vmovdqu64 %zmm4, 192(%rdi) + vpermd 192(%rsi), %zmm0, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpandnq %zmm4, %zmm3, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm3, %zmm4 + vmovdqu64 %zmm4, 256(%rdi) + vpermd 240(%rsi), %zmm0, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpandnq %zmm4, %zmm3, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm3, %zmm4 + vmovdqu64 %zmm4, 320(%rdi) + vpermd 288(%rsi), %zmm0, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpandnq %zmm4, %zmm3, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm3, %zmm4 + vmovdqu64 %zmm4, 384(%rdi) + vpermd 320(%rsi), %zmm1, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpandnq %zmm4, %zmm3, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm3, %zmm4 + vmovdqu64 %zmm4, 448(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_from_bytes_avx512,.-mlkem_from_bytes_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_to_bytes_avx512_mask: +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_to_bytes_avx512_shuf: +.byte 0x00,0x01,0x02,0x04,0x05,0x06,0x08,0x09 +.byte 0x0a,0x0c,0x0d,0x0e,0xff,0xff,0xff,0xff +.byte 0x00,0x01,0x02,0x04,0x05,0x06,0x08,0x09 +.byte 0x0a,0x0c,0x0d,0x0e,0xff,0xff,0xff,0xff +.byte 0x00,0x01,0x02,0x04,0x05,0x06,0x08,0x09 +.byte 0x0a,0x0c,0x0d,0x0e,0xff,0xff,0xff,0xff +.byte 0x00,0x01,0x02,0x04,0x05,0x06,0x08,0x09 +.byte 0x0a,0x0c,0x0d,0x0e,0xff,0xff,0xff,0xff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_to_bytes_avx512_perm: +.long 0x00000000,0x00000001,0x00000002,0x00000004 +.long 0x00000005,0x00000006,0x00000008,0x00000009 +.long 0x0000000a,0x0000000c,0x0000000d,0x0000000e +.long 0x00000000,0x00000000,0x00000000,0x00000000 +#ifndef __APPLE__ +.text +.globl mlkem_to_bytes_avx512 +.type mlkem_to_bytes_avx512,@function +.align 16 +mlkem_to_bytes_avx512: +#else +.section __TEXT,__text +.globl _mlkem_to_bytes_avx512 +.p2align 4 +_mlkem_to_bytes_avx512: +#endif /* __APPLE__ */ + movq $0xd01, %rdx + vmovd %edx, %xmm0 + vpbroadcastw %xmm0, %zmm0 + vmovdqu64 L_mlkem_to_bytes_avx512_mask(%rip), %zmm1 + vmovdqu64 L_mlkem_to_bytes_avx512_shuf(%rip), %zmm2 + vmovdqu64 L_mlkem_to_bytes_avx512_perm(%rip), %zmm3 + vmovdqu64 (%rsi), %zmm4 + vpsubw %zmm0, %zmm4, %zmm5 + vpsraw $15, %zmm5, %zmm6 + vpandq %zmm0, %zmm6, %zmm6 + vpaddw %zmm5, %zmm6, %zmm4 + vpsrld $16, %zmm4, %zmm5 + vpslld $12, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm1, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpermd %zmm4, %zmm3, %zmm7 + vmovdqu64 %zmm7, (%rdi) + vmovdqu64 64(%rsi), %zmm4 + vpsubw %zmm0, %zmm4, %zmm5 + vpsraw $15, %zmm5, %zmm6 + vpandq %zmm0, %zmm6, %zmm6 + vpaddw %zmm5, %zmm6, %zmm4 + vpsrld $16, %zmm4, %zmm5 + vpslld $12, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm1, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpermd %zmm4, %zmm3, %zmm7 + vmovdqu64 %zmm7, 48(%rdi) + vmovdqu64 128(%rsi), %zmm4 + vpsubw %zmm0, %zmm4, %zmm5 + vpsraw $15, %zmm5, %zmm6 + vpandq %zmm0, %zmm6, %zmm6 + vpaddw %zmm5, %zmm6, %zmm4 + vpsrld $16, %zmm4, %zmm5 + vpslld $12, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm1, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpermd %zmm4, %zmm3, %zmm7 + vmovdqu64 %zmm7, 96(%rdi) + vmovdqu64 192(%rsi), %zmm4 + vpsubw %zmm0, %zmm4, %zmm5 + vpsraw $15, %zmm5, %zmm6 + vpandq %zmm0, %zmm6, %zmm6 + vpaddw %zmm5, %zmm6, %zmm4 + vpsrld $16, %zmm4, %zmm5 + vpslld $12, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm1, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpermd %zmm4, %zmm3, %zmm7 + vmovdqu64 %zmm7, 144(%rdi) + vmovdqu64 256(%rsi), %zmm4 + vpsubw %zmm0, %zmm4, %zmm5 + vpsraw $15, %zmm5, %zmm6 + vpandq %zmm0, %zmm6, %zmm6 + vpaddw %zmm5, %zmm6, %zmm4 + vpsrld $16, %zmm4, %zmm5 + vpslld $12, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm1, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpermd %zmm4, %zmm3, %zmm7 + vmovdqu64 %zmm7, 192(%rdi) + vmovdqu64 320(%rsi), %zmm4 + vpsubw %zmm0, %zmm4, %zmm5 + vpsraw $15, %zmm5, %zmm6 + vpandq %zmm0, %zmm6, %zmm6 + vpaddw %zmm5, %zmm6, %zmm4 + vpsrld $16, %zmm4, %zmm5 + vpslld $12, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm1, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpermd %zmm4, %zmm3, %zmm7 + vmovdqu64 %zmm7, 240(%rdi) + vmovdqu64 384(%rsi), %zmm4 + vpsubw %zmm0, %zmm4, %zmm5 + vpsraw $15, %zmm5, %zmm6 + vpandq %zmm0, %zmm6, %zmm6 + vpaddw %zmm5, %zmm6, %zmm4 + vpsrld $16, %zmm4, %zmm5 + vpslld $12, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm1, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpermd %zmm4, %zmm3, %zmm7 + vmovdqu64 %zmm7, 288(%rdi) + vmovdqu64 448(%rsi), %zmm4 + vpsubw %zmm0, %zmm4, %zmm5 + vpsraw $15, %zmm5, %zmm6 + vpandq %zmm0, %zmm6, %zmm6 + vpaddw %zmm5, %zmm6, %zmm4 + vpsrld $16, %zmm4, %zmm5 + vpslld $12, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm1, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpermd %zmm4, %zmm3, %zmm7 + vmovdqu %ymm7, 336(%rdi) + vextracti32x4 $2, %zmm7, %xmm5 + vmovdqu %xmm5, 368(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_to_bytes_avx512,.-mlkem_to_bytes_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_from_msg_avx512_shuf: +.byte 0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80 +.byte 0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80 +.byte 0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80 +.byte 0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80 +.byte 0x02,0x80,0x02,0x80,0x02,0x80,0x02,0x80 +.byte 0x02,0x80,0x02,0x80,0x02,0x80,0x02,0x80 +.byte 0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80 +.byte 0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_from_msg_avx512_pow: +.short 0x8000,0x4000,0x2000,0x1000,0x0800,0x0400,0x0200,0x0100 +.short 0x8000,0x4000,0x2000,0x1000,0x0800,0x0400,0x0200,0x0100 +.short 0x8000,0x4000,0x2000,0x1000,0x0800,0x0400,0x0200,0x0100 +.short 0x8000,0x4000,0x2000,0x1000,0x0800,0x0400,0x0200,0x0100 +#ifndef __APPLE__ +.text +.globl mlkem_from_msg_avx512 +.type mlkem_from_msg_avx512,@function +.align 16 +mlkem_from_msg_avx512: +#else +.section __TEXT,__text +.globl _mlkem_from_msg_avx512 +.p2align 4 +_mlkem_from_msg_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mlkem_from_msg_avx512_shuf(%rip), %zmm0 + vmovdqu64 L_mlkem_from_msg_avx512_pow(%rip), %zmm1 + movq $0x681, %rdx + vmovd %edx, %xmm2 + vpbroadcastw %xmm2, %zmm2 + vpbroadcastd (%rsi), %zmm3 + vpshufb %zmm0, %zmm3, %zmm3 + vpmullw %zmm1, %zmm3, %zmm3 + vpsraw $15, %zmm3, %zmm3 + vpandq %zmm2, %zmm3, %zmm3 + vmovdqu64 %zmm3, (%rdi) + vpbroadcastd 4(%rsi), %zmm3 + vpshufb %zmm0, %zmm3, %zmm3 + vpmullw %zmm1, %zmm3, %zmm3 + vpsraw $15, %zmm3, %zmm3 + vpandq %zmm2, %zmm3, %zmm3 + vmovdqu64 %zmm3, 64(%rdi) + vpbroadcastd 8(%rsi), %zmm3 + vpshufb %zmm0, %zmm3, %zmm3 + vpmullw %zmm1, %zmm3, %zmm3 + vpsraw $15, %zmm3, %zmm3 + vpandq %zmm2, %zmm3, %zmm3 + vmovdqu64 %zmm3, 128(%rdi) + vpbroadcastd 12(%rsi), %zmm3 + vpshufb %zmm0, %zmm3, %zmm3 + vpmullw %zmm1, %zmm3, %zmm3 + vpsraw $15, %zmm3, %zmm3 + vpandq %zmm2, %zmm3, %zmm3 + vmovdqu64 %zmm3, 192(%rdi) + vpbroadcastd 16(%rsi), %zmm3 + vpshufb %zmm0, %zmm3, %zmm3 + vpmullw %zmm1, %zmm3, %zmm3 + vpsraw $15, %zmm3, %zmm3 + vpandq %zmm2, %zmm3, %zmm3 + vmovdqu64 %zmm3, 256(%rdi) + vpbroadcastd 20(%rsi), %zmm3 + vpshufb %zmm0, %zmm3, %zmm3 + vpmullw %zmm1, %zmm3, %zmm3 + vpsraw $15, %zmm3, %zmm3 + vpandq %zmm2, %zmm3, %zmm3 + vmovdqu64 %zmm3, 320(%rdi) + vpbroadcastd 24(%rsi), %zmm3 + vpshufb %zmm0, %zmm3, %zmm3 + vpmullw %zmm1, %zmm3, %zmm3 + vpsraw $15, %zmm3, %zmm3 + vpandq %zmm2, %zmm3, %zmm3 + vmovdqu64 %zmm3, 384(%rdi) + vpbroadcastd 28(%rsi), %zmm3 + vpshufb %zmm0, %zmm3, %zmm3 + vpmullw %zmm1, %zmm3, %zmm3 + vpsraw $15, %zmm3, %zmm3 + vpandq %zmm2, %zmm3, %zmm3 + vmovdqu64 %zmm3, 448(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_from_msg_avx512,.-mlkem_from_msg_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.text +.globl mlkem_to_msg_avx512 +.type mlkem_to_msg_avx512,@function +.align 16 +mlkem_to_msg_avx512: +#else +.section __TEXT,__text +.globl _mlkem_to_msg_avx512 +.p2align 4 +_mlkem_to_msg_avx512: +#endif /* __APPLE__ */ + movq $0x680, %rdx + vmovd %edx, %xmm0 + vpbroadcastw %xmm0, %zmm0 + movq $0xfcc1, %rax + vmovd %eax, %xmm1 + vpbroadcastw %xmm1, %zmm1 + vpsubw (%rsi), %zmm0, %zmm2 + vpsraw $15, %zmm2, %zmm3 + vpxord %zmm3, %zmm2, %zmm2 + vpaddw %zmm1, %zmm2, %zmm2 + vextracti64x4 $0x01, %zmm2, %ymm4 + vpacksswb %ymm4, %ymm2, %ymm2 + vpermq $0xd8, %ymm2, %ymm2 + vpmovmskb %ymm2, %ecx + movl %ecx, (%rdi) + vpsubw 64(%rsi), %zmm0, %zmm2 + vpsraw $15, %zmm2, %zmm3 + vpxord %zmm3, %zmm2, %zmm2 + vpaddw %zmm1, %zmm2, %zmm2 + vextracti64x4 $0x01, %zmm2, %ymm4 + vpacksswb %ymm4, %ymm2, %ymm2 + vpermq $0xd8, %ymm2, %ymm2 + vpmovmskb %ymm2, %ecx + movl %ecx, 4(%rdi) + vpsubw 128(%rsi), %zmm0, %zmm2 + vpsraw $15, %zmm2, %zmm3 + vpxord %zmm3, %zmm2, %zmm2 + vpaddw %zmm1, %zmm2, %zmm2 + vextracti64x4 $0x01, %zmm2, %ymm4 + vpacksswb %ymm4, %ymm2, %ymm2 + vpermq $0xd8, %ymm2, %ymm2 + vpmovmskb %ymm2, %ecx + movl %ecx, 8(%rdi) + vpsubw 192(%rsi), %zmm0, %zmm2 + vpsraw $15, %zmm2, %zmm3 + vpxord %zmm3, %zmm2, %zmm2 + vpaddw %zmm1, %zmm2, %zmm2 + vextracti64x4 $0x01, %zmm2, %ymm4 + vpacksswb %ymm4, %ymm2, %ymm2 + vpermq $0xd8, %ymm2, %ymm2 + vpmovmskb %ymm2, %ecx + movl %ecx, 12(%rdi) + vpsubw 256(%rsi), %zmm0, %zmm2 + vpsraw $15, %zmm2, %zmm3 + vpxord %zmm3, %zmm2, %zmm2 + vpaddw %zmm1, %zmm2, %zmm2 + vextracti64x4 $0x01, %zmm2, %ymm4 + vpacksswb %ymm4, %ymm2, %ymm2 + vpermq $0xd8, %ymm2, %ymm2 + vpmovmskb %ymm2, %ecx + movl %ecx, 16(%rdi) + vpsubw 320(%rsi), %zmm0, %zmm2 + vpsraw $15, %zmm2, %zmm3 + vpxord %zmm3, %zmm2, %zmm2 + vpaddw %zmm1, %zmm2, %zmm2 + vextracti64x4 $0x01, %zmm2, %ymm4 + vpacksswb %ymm4, %ymm2, %ymm2 + vpermq $0xd8, %ymm2, %ymm2 + vpmovmskb %ymm2, %ecx + movl %ecx, 20(%rdi) + vpsubw 384(%rsi), %zmm0, %zmm2 + vpsraw $15, %zmm2, %zmm3 + vpxord %zmm3, %zmm2, %zmm2 + vpaddw %zmm1, %zmm2, %zmm2 + vextracti64x4 $0x01, %zmm2, %ymm4 + vpacksswb %ymm4, %ymm2, %ymm2 + vpermq $0xd8, %ymm2, %ymm2 + vpmovmskb %ymm2, %ecx + movl %ecx, 24(%rdi) + vpsubw 448(%rsi), %zmm0, %zmm2 + vpsraw $15, %zmm2, %zmm3 + vpxord %zmm3, %zmm2, %zmm2 + vpaddw %zmm1, %zmm2, %zmm2 + vextracti64x4 $0x01, %zmm2, %ymm4 + vpacksswb %ymm4, %ymm2, %ymm2 + vpermq $0xd8, %ymm2, %ymm2 + vpmovmskb %ymm2, %ecx + movl %ecx, 28(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_to_msg_avx512,.-mlkem_to_msg_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_compress_4_avx512_shuf: +.byte 0x00,0x04,0x08,0x0c,0x80,0x80,0x80,0x80 +.byte 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 +.byte 0x00,0x04,0x08,0x0c,0x80,0x80,0x80,0x80 +.byte 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 +.byte 0x00,0x04,0x08,0x0c,0x80,0x80,0x80,0x80 +.byte 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 +.byte 0x00,0x04,0x08,0x0c,0x80,0x80,0x80,0x80 +.byte 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_compress_4_avx512_perm: +.long 0x00000000,0x00000004,0x00000008,0x0000000c +.long 0x00000000,0x00000000,0x00000000,0x00000000 +.long 0x00000000,0x00000000,0x00000000,0x00000000 +.long 0x00000000,0x00000000,0x00000000,0x00000000 +#ifndef __APPLE__ +.text +.globl mlkem_compress_4_avx512 +.type mlkem_compress_4_avx512,@function +.align 16 +mlkem_compress_4_avx512: +#else +.section __TEXT,__text +.globl _mlkem_compress_4_avx512 +.p2align 4 +_mlkem_compress_4_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mlkem_compress_4_avx512_shuf(%rip), %zmm0 + vmovdqu64 L_mlkem_compress_4_avx512_perm(%rip), %zmm1 + movq $0x4ebf, %rdx + vmovd %edx, %xmm2 + vpbroadcastw %xmm2, %zmm2 + movq $0x200, %rdx + vmovd %edx, %xmm3 + vpbroadcastw %xmm3, %zmm3 + movq $15, %rdx + vmovd %edx, %xmm4 + vpbroadcastw %xmm4, %zmm4 + vpmulhw (%rsi), %zmm2, %zmm5 + vpmulhrsw %zmm3, %zmm5, %zmm5 + vpandq %zmm4, %zmm5, %zmm5 + vpsrld $12, %zmm5, %zmm6 + vpord %zmm6, %zmm5, %zmm5 + vpshufb %zmm0, %zmm5, %zmm5 + vpermd %zmm5, %zmm1, %zmm5 + vmovdqu %xmm5, (%rdi) + vpmulhw 64(%rsi), %zmm2, %zmm5 + vpmulhrsw %zmm3, %zmm5, %zmm5 + vpandq %zmm4, %zmm5, %zmm5 + vpsrld $12, %zmm5, %zmm6 + vpord %zmm6, %zmm5, %zmm5 + vpshufb %zmm0, %zmm5, %zmm5 + vpermd %zmm5, %zmm1, %zmm5 + vmovdqu %xmm5, 16(%rdi) + vpmulhw 128(%rsi), %zmm2, %zmm5 + vpmulhrsw %zmm3, %zmm5, %zmm5 + vpandq %zmm4, %zmm5, %zmm5 + vpsrld $12, %zmm5, %zmm6 + vpord %zmm6, %zmm5, %zmm5 + vpshufb %zmm0, %zmm5, %zmm5 + vpermd %zmm5, %zmm1, %zmm5 + vmovdqu %xmm5, 32(%rdi) + vpmulhw 192(%rsi), %zmm2, %zmm5 + vpmulhrsw %zmm3, %zmm5, %zmm5 + vpandq %zmm4, %zmm5, %zmm5 + vpsrld $12, %zmm5, %zmm6 + vpord %zmm6, %zmm5, %zmm5 + vpshufb %zmm0, %zmm5, %zmm5 + vpermd %zmm5, %zmm1, %zmm5 + vmovdqu %xmm5, 48(%rdi) + vpmulhw 256(%rsi), %zmm2, %zmm5 + vpmulhrsw %zmm3, %zmm5, %zmm5 + vpandq %zmm4, %zmm5, %zmm5 + vpsrld $12, %zmm5, %zmm6 + vpord %zmm6, %zmm5, %zmm5 + vpshufb %zmm0, %zmm5, %zmm5 + vpermd %zmm5, %zmm1, %zmm5 + vmovdqu %xmm5, 64(%rdi) + vpmulhw 320(%rsi), %zmm2, %zmm5 + vpmulhrsw %zmm3, %zmm5, %zmm5 + vpandq %zmm4, %zmm5, %zmm5 + vpsrld $12, %zmm5, %zmm6 + vpord %zmm6, %zmm5, %zmm5 + vpshufb %zmm0, %zmm5, %zmm5 + vpermd %zmm5, %zmm1, %zmm5 + vmovdqu %xmm5, 80(%rdi) + vpmulhw 384(%rsi), %zmm2, %zmm5 + vpmulhrsw %zmm3, %zmm5, %zmm5 + vpandq %zmm4, %zmm5, %zmm5 + vpsrld $12, %zmm5, %zmm6 + vpord %zmm6, %zmm5, %zmm5 + vpshufb %zmm0, %zmm5, %zmm5 + vpermd %zmm5, %zmm1, %zmm5 + vmovdqu %xmm5, 96(%rdi) + vpmulhw 448(%rsi), %zmm2, %zmm5 + vpmulhrsw %zmm3, %zmm5, %zmm5 + vpandq %zmm4, %zmm5, %zmm5 + vpsrld $12, %zmm5, %zmm6 + vpord %zmm6, %zmm5, %zmm5 + vpshufb %zmm0, %zmm5, %zmm5 + vpermd %zmm5, %zmm1, %zmm5 + vmovdqu %xmm5, 112(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_compress_4_avx512,.-mlkem_compress_4_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_4_avx512_shuf: +.byte 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01 +.byte 0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03 +.byte 0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05 +.byte 0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07 +.byte 0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09 +.byte 0x0a,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b +.byte 0x0c,0x0c,0x0c,0x0c,0x0d,0x0d,0x0d,0x0d +.byte 0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_4_avx512_mask: +.long 0x00f0000f,0x00f0000f,0x00f0000f,0x00f0000f +.long 0x00f0000f,0x00f0000f,0x00f0000f,0x00f0000f +.long 0x00f0000f,0x00f0000f,0x00f0000f,0x00f0000f +.long 0x00f0000f,0x00f0000f,0x00f0000f,0x00f0000f +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_4_avx512_shift: +.long 0x00800800,0x00800800,0x00800800,0x00800800 +.long 0x00800800,0x00800800,0x00800800,0x00800800 +.long 0x00800800,0x00800800,0x00800800,0x00800800 +.long 0x00800800,0x00800800,0x00800800,0x00800800 +#ifndef __APPLE__ +.text +.globl mlkem_decompress_4_avx512 +.type mlkem_decompress_4_avx512,@function +.align 16 +mlkem_decompress_4_avx512: +#else +.section __TEXT,__text +.globl _mlkem_decompress_4_avx512 +.p2align 4 +_mlkem_decompress_4_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mlkem_decompress_4_avx512_shuf(%rip), %zmm0 + vmovdqu64 L_mlkem_decompress_4_avx512_mask(%rip), %zmm1 + vmovdqu64 L_mlkem_decompress_4_avx512_shift(%rip), %zmm2 + movq $0xd01, %rdx + vmovd %edx, %xmm3 + vpbroadcastw %xmm3, %zmm3 + vbroadcasti32x4 (%rsi), %zmm4 + vpshufb %zmm0, %zmm4, %zmm4 + vpandq %zmm1, %zmm4, %zmm4 + vpmullw %zmm2, %zmm4, %zmm4 + vpmulhrsw %zmm3, %zmm4, %zmm4 + vmovdqu64 %zmm4, (%rdi) + vbroadcasti32x4 16(%rsi), %zmm4 + vpshufb %zmm0, %zmm4, %zmm4 + vpandq %zmm1, %zmm4, %zmm4 + vpmullw %zmm2, %zmm4, %zmm4 + vpmulhrsw %zmm3, %zmm4, %zmm4 + vmovdqu64 %zmm4, 64(%rdi) + vbroadcasti32x4 32(%rsi), %zmm4 + vpshufb %zmm0, %zmm4, %zmm4 + vpandq %zmm1, %zmm4, %zmm4 + vpmullw %zmm2, %zmm4, %zmm4 + vpmulhrsw %zmm3, %zmm4, %zmm4 + vmovdqu64 %zmm4, 128(%rdi) + vbroadcasti32x4 48(%rsi), %zmm4 + vpshufb %zmm0, %zmm4, %zmm4 + vpandq %zmm1, %zmm4, %zmm4 + vpmullw %zmm2, %zmm4, %zmm4 + vpmulhrsw %zmm3, %zmm4, %zmm4 + vmovdqu64 %zmm4, 192(%rdi) + vbroadcasti32x4 64(%rsi), %zmm4 + vpshufb %zmm0, %zmm4, %zmm4 + vpandq %zmm1, %zmm4, %zmm4 + vpmullw %zmm2, %zmm4, %zmm4 + vpmulhrsw %zmm3, %zmm4, %zmm4 + vmovdqu64 %zmm4, 256(%rdi) + vbroadcasti32x4 80(%rsi), %zmm4 + vpshufb %zmm0, %zmm4, %zmm4 + vpandq %zmm1, %zmm4, %zmm4 + vpmullw %zmm2, %zmm4, %zmm4 + vpmulhrsw %zmm3, %zmm4, %zmm4 + vmovdqu64 %zmm4, 320(%rdi) + vbroadcasti32x4 96(%rsi), %zmm4 + vpshufb %zmm0, %zmm4, %zmm4 + vpandq %zmm1, %zmm4, %zmm4 + vpmullw %zmm2, %zmm4, %zmm4 + vpmulhrsw %zmm3, %zmm4, %zmm4 + vmovdqu64 %zmm4, 384(%rdi) + vbroadcasti32x4 112(%rsi), %zmm4 + vpshufb %zmm0, %zmm4, %zmm4 + vpandq %zmm1, %zmm4, %zmm4 + vpmullw %zmm2, %zmm4, %zmm4 + vpmulhrsw %zmm3, %zmm4, %zmm4 + vmovdqu64 %zmm4, 448(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_decompress_4_avx512,.-mlkem_decompress_4_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_5_avx512_q: +.short 0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01 +.short 0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01 +.short 0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01 +.short 0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_5_avx512_shuf: +.byte 0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02 +.byte 0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x04 +.byte 0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x07 +.byte 0x07,0x08,0x08,0x08,0x08,0x09,0x09,0x09 +.byte 0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02 +.byte 0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x04 +.byte 0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x07 +.byte 0x07,0x08,0x08,0x08,0x08,0x09,0x09,0x09 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_5_avx512_mask: +.short 0x001f,0x03e0,0x007c,0x0f80,0x01f0,0x003e,0x07c0,0x00f8 +.short 0x001f,0x03e0,0x007c,0x0f80,0x01f0,0x003e,0x07c0,0x00f8 +.short 0x001f,0x03e0,0x007c,0x0f80,0x01f0,0x003e,0x07c0,0x00f8 +.short 0x001f,0x03e0,0x007c,0x0f80,0x01f0,0x003e,0x07c0,0x00f8 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_5_avx512_shift: +.short 0x0400,0x0020,0x0100,0x0008,0x0040,0x0200,0x0010,0x0080 +.short 0x0400,0x0020,0x0100,0x0008,0x0040,0x0200,0x0010,0x0080 +.short 0x0400,0x0020,0x0100,0x0008,0x0040,0x0200,0x0010,0x0080 +.short 0x0400,0x0020,0x0100,0x0008,0x0040,0x0200,0x0010,0x0080 +#ifndef __APPLE__ +.text +.globl mlkem_decompress_5_avx512 +.type mlkem_decompress_5_avx512,@function +.align 16 +mlkem_decompress_5_avx512: +#else +.section __TEXT,__text +.globl _mlkem_decompress_5_avx512 +.p2align 4 +_mlkem_decompress_5_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mlkem_decompress_5_avx512_q(%rip), %zmm0 + vmovdqu64 L_mlkem_decompress_5_avx512_shuf(%rip), %zmm1 + vmovdqu64 L_mlkem_decompress_5_avx512_mask(%rip), %zmm2 + vmovdqu64 L_mlkem_decompress_5_avx512_shift(%rip), %zmm3 + vbroadcasti128 (%rsi), %ymm4 + vbroadcasti128 10(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm1, %zmm4, %zmm4 + vpandq %zmm2, %zmm4, %zmm4 + vpmullw %zmm3, %zmm4, %zmm4 + vpmulhrsw %zmm0, %zmm4, %zmm4 + vmovdqu64 %zmm4, (%rdi) + vbroadcasti128 20(%rsi), %ymm4 + vbroadcasti128 30(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm1, %zmm4, %zmm4 + vpandq %zmm2, %zmm4, %zmm4 + vpmullw %zmm3, %zmm4, %zmm4 + vpmulhrsw %zmm0, %zmm4, %zmm4 + vmovdqu64 %zmm4, 64(%rdi) + vbroadcasti128 40(%rsi), %ymm4 + vbroadcasti128 50(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm1, %zmm4, %zmm4 + vpandq %zmm2, %zmm4, %zmm4 + vpmullw %zmm3, %zmm4, %zmm4 + vpmulhrsw %zmm0, %zmm4, %zmm4 + vmovdqu64 %zmm4, 128(%rdi) + vbroadcasti128 60(%rsi), %ymm4 + vbroadcasti128 70(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm1, %zmm4, %zmm4 + vpandq %zmm2, %zmm4, %zmm4 + vpmullw %zmm3, %zmm4, %zmm4 + vpmulhrsw %zmm0, %zmm4, %zmm4 + vmovdqu64 %zmm4, 192(%rdi) + vbroadcasti128 80(%rsi), %ymm4 + vbroadcasti128 90(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm1, %zmm4, %zmm4 + vpandq %zmm2, %zmm4, %zmm4 + vpmullw %zmm3, %zmm4, %zmm4 + vpmulhrsw %zmm0, %zmm4, %zmm4 + vmovdqu64 %zmm4, 256(%rdi) + vbroadcasti128 100(%rsi), %ymm4 + vbroadcasti128 110(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm1, %zmm4, %zmm4 + vpandq %zmm2, %zmm4, %zmm4 + vpmullw %zmm3, %zmm4, %zmm4 + vpmulhrsw %zmm0, %zmm4, %zmm4 + vmovdqu64 %zmm4, 320(%rdi) + vbroadcasti128 120(%rsi), %ymm4 + vbroadcasti128 130(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm1, %zmm4, %zmm4 + vpandq %zmm2, %zmm4, %zmm4 + vpmullw %zmm3, %zmm4, %zmm4 + vpmulhrsw %zmm0, %zmm4, %zmm4 + vmovdqu64 %zmm4, 384(%rdi) + vbroadcasti128 140(%rsi), %ymm4 + vmovq 150(%rsi), %xmm5 + movzwq 158(%rsi), %rdx + vpinsrq $0x01, %rdx, %xmm5, %xmm5 + vinserti128 $0x01, %xmm5, %ymm5, %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm1, %zmm4, %zmm4 + vpandq %zmm2, %zmm4, %zmm4 + vpmullw %zmm3, %zmm4, %zmm4 + vpmulhrsw %zmm0, %zmm4, %zmm4 + vmovdqu64 %zmm4, 448(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_decompress_5_avx512,.-mlkem_decompress_5_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_10_avx512_mask: +.long 0x7fe01ff8,0x7fe01ff8,0x7fe01ff8,0x7fe01ff8 +.long 0x7fe01ff8,0x7fe01ff8,0x7fe01ff8,0x7fe01ff8 +.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_avx512_sllv: +.quad 0x0000000000000004,0x0000000000000004 +.quad 0x0000000000000004,0x0000000000000004 +.quad 0x0000000000000004,0x0000000000000004 +.quad 0x0000000000000004,0x0000000000000004 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_10_avx512_q: +.long 0x0d013404,0x0d013404,0x0d013404,0x0d013404 +.long 0x0d013404,0x0d013404,0x0d013404,0x0d013404 +.long 0x0d013404,0x0d013404,0x0d013404,0x0d013404 +.long 0x0d013404,0x0d013404,0x0d013404,0x0d013404 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_10_avx512_shuf: +.byte 0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04 +.byte 0x05,0x06,0x06,0x07,0x07,0x08,0x08,0x09 +.byte 0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06 +.byte 0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b +.byte 0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04 +.byte 0x05,0x06,0x06,0x07,0x07,0x08,0x08,0x09 +.byte 0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06 +.byte 0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b +#ifndef __APPLE__ +.text +.globl mlkem_decompress_10_avx512 +.type mlkem_decompress_10_avx512,@function +.align 16 +mlkem_decompress_10_avx512: +#else +.section __TEXT,__text +.globl _mlkem_decompress_10_avx512 +.p2align 4 +_mlkem_decompress_10_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mlkem_decompress_10_avx512_mask(%rip), %zmm0 + vmovdqu64 L_mlkem_decompress_10_avx512_q(%rip), %zmm1 + vmovdqu64 L_mlkem_decompress_10_avx512_shuf(%rip), %zmm2 + vmovdqu64 L_mlkem_decompress_10_avx512_sllv(%rip), %zmm3 +L_mlkem_decompress_10_avx512_start: + vpermq $0x94, (%rsi), %ymm4 + vpermq $0x94, 20(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpsllvd %zmm3, %zmm4, %zmm4 + vpsrlw $0x01, %zmm4, %zmm4 + vpandq %zmm0, %zmm4, %zmm4 + vpmulhrsw %zmm1, %zmm4, %zmm4 + vmovdqu64 %zmm4, (%rdi) + vpermq $0x94, 40(%rsi), %ymm4 + vpermq $0x94, 60(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpsllvd %zmm3, %zmm4, %zmm4 + vpsrlw $0x01, %zmm4, %zmm4 + vpandq %zmm0, %zmm4, %zmm4 + vpmulhrsw %zmm1, %zmm4, %zmm4 + vmovdqu64 %zmm4, 64(%rdi) + vpermq $0x94, 80(%rsi), %ymm4 + vpermq $0x94, 100(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpsllvd %zmm3, %zmm4, %zmm4 + vpsrlw $0x01, %zmm4, %zmm4 + vpandq %zmm0, %zmm4, %zmm4 + vpmulhrsw %zmm1, %zmm4, %zmm4 + vmovdqu64 %zmm4, 128(%rdi) + vpermq $0x94, 120(%rsi), %ymm4 + vpermq $0x94, 140(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpsllvd %zmm3, %zmm4, %zmm4 + vpsrlw $0x01, %zmm4, %zmm4 + vpandq %zmm0, %zmm4, %zmm4 + vpmulhrsw %zmm1, %zmm4, %zmm4 + vmovdqu64 %zmm4, 192(%rdi) + vpermq $0x94, 160(%rsi), %ymm4 + vpermq $0x94, 180(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpsllvd %zmm3, %zmm4, %zmm4 + vpsrlw $0x01, %zmm4, %zmm4 + vpandq %zmm0, %zmm4, %zmm4 + vpmulhrsw %zmm1, %zmm4, %zmm4 + vmovdqu64 %zmm4, 256(%rdi) + vpermq $0x94, 200(%rsi), %ymm4 + vpermq $0x94, 220(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpsllvd %zmm3, %zmm4, %zmm4 + vpsrlw $0x01, %zmm4, %zmm4 + vpandq %zmm0, %zmm4, %zmm4 + vpmulhrsw %zmm1, %zmm4, %zmm4 + vmovdqu64 %zmm4, 320(%rdi) + vpermq $0x94, 240(%rsi), %ymm4 + vpermq $0x94, 260(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpsllvd %zmm3, %zmm4, %zmm4 + vpsrlw $0x01, %zmm4, %zmm4 + vpandq %zmm0, %zmm4, %zmm4 + vpmulhrsw %zmm1, %zmm4, %zmm4 + vmovdqu64 %zmm4, 384(%rdi) + vpermq $0x94, 280(%rsi), %ymm4 + vpermq $0x94, 300(%rsi), %ymm5 + vinserti64x4 $0x01, %ymm5, %zmm4, %zmm4 + vpshufb %zmm2, %zmm4, %zmm4 + vpsllvd %zmm3, %zmm4, %zmm4 + vpsrlw $0x01, %zmm4, %zmm4 + vpandq %zmm0, %zmm4, %zmm4 + vpmulhrsw %zmm1, %zmm4, %zmm4 + vmovdqu64 %zmm4, 448(%rdi) + addq $0x140, %rsi + addq $0x200, %rdi + subl $0x01, %edx + jg L_mlkem_decompress_10_avx512_start + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_decompress_10_avx512,.-mlkem_decompress_10_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_11_avx512_q: +.short 0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01 +.short 0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01 +.short 0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01 +.short 0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_11_avx512_shuf: +.byte 0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05 +.byte 0x05,0x06,0x06,0x07,0x08,0x09,0x09,0x0a +.byte 0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x08 +.byte 0x08,0x09,0x09,0x0a,0x0b,0x0c,0x0c,0x0d +.byte 0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05 +.byte 0x05,0x06,0x06,0x07,0x08,0x09,0x09,0x0a +.byte 0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x08 +.byte 0x08,0x09,0x09,0x0a,0x0b,0x0c,0x0c,0x0d +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_11_avx512_srlvd: +.long 0x00000000,0x00000001,0x00000000,0x00000000 +.long 0x00000000,0x00000001,0x00000000,0x00000000 +.long 0x00000000,0x00000001,0x00000000,0x00000000 +.long 0x00000000,0x00000001,0x00000000,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_decompress_11_avx512_srlvq: +.quad 0x0000000000000000,0x0000000000000002 +.quad 0x0000000000000000,0x0000000000000002 +.quad 0x0000000000000000,0x0000000000000002 +.quad 0x0000000000000000,0x0000000000000002 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_11_avx512_shift: +.short 0x0020,0x0004,0x0001,0x0020,0x0008,0x0001,0x0020,0x0004 +.short 0x0020,0x0004,0x0001,0x0020,0x0008,0x0001,0x0020,0x0004 +.short 0x0020,0x0004,0x0001,0x0020,0x0008,0x0001,0x0020,0x0004 +.short 0x0020,0x0004,0x0001,0x0020,0x0008,0x0001,0x0020,0x0004 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_11_avx512_mask: +.short 0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0 +.short 0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0 +.short 0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0 +.short 0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0 +#ifndef __APPLE__ +.text +.globl mlkem_decompress_11_avx512 +.type mlkem_decompress_11_avx512,@function +.align 16 +mlkem_decompress_11_avx512: +#else +.section __TEXT,__text +.globl _mlkem_decompress_11_avx512 +.p2align 4 +_mlkem_decompress_11_avx512: +#endif /* __APPLE__ */ + vmovdqu64 L_mlkem_decompress_11_avx512_q(%rip), %zmm0 + vmovdqu64 L_mlkem_decompress_11_avx512_shuf(%rip), %zmm1 + vmovdqu64 L_mlkem_decompress_11_avx512_srlvd(%rip), %zmm2 + vmovdqu64 L_mlkem_decompress_11_avx512_srlvq(%rip), %zmm3 + vmovdqu64 L_mlkem_decompress_11_avx512_shift(%rip), %zmm4 + vmovdqu64 L_mlkem_decompress_11_avx512_mask(%rip), %zmm5 +L_mlkem_decompress_11_avx512_start: + vpermq $0x94, (%rsi), %ymm6 + vpermq $0x94, 22(%rsi), %ymm7 + vinserti64x4 $0x01, %ymm7, %zmm6, %zmm6 + vpshufb %zmm1, %zmm6, %zmm6 + vpsrlvd %zmm2, %zmm6, %zmm6 + vpsrlvq %zmm3, %zmm6, %zmm6 + vpmullw %zmm4, %zmm6, %zmm6 + vpsrlw $0x01, %zmm6, %zmm6 + vpandq %zmm5, %zmm6, %zmm6 + vpmulhrsw %zmm0, %zmm6, %zmm6 + vmovdqu64 %zmm6, (%rdi) + vpermq $0x94, 44(%rsi), %ymm6 + vpermq $0x94, 66(%rsi), %ymm7 + vinserti64x4 $0x01, %ymm7, %zmm6, %zmm6 + vpshufb %zmm1, %zmm6, %zmm6 + vpsrlvd %zmm2, %zmm6, %zmm6 + vpsrlvq %zmm3, %zmm6, %zmm6 + vpmullw %zmm4, %zmm6, %zmm6 + vpsrlw $0x01, %zmm6, %zmm6 + vpandq %zmm5, %zmm6, %zmm6 + vpmulhrsw %zmm0, %zmm6, %zmm6 + vmovdqu64 %zmm6, 64(%rdi) + vpermq $0x94, 88(%rsi), %ymm6 + vpermq $0x94, 110(%rsi), %ymm7 + vinserti64x4 $0x01, %ymm7, %zmm6, %zmm6 + vpshufb %zmm1, %zmm6, %zmm6 + vpsrlvd %zmm2, %zmm6, %zmm6 + vpsrlvq %zmm3, %zmm6, %zmm6 + vpmullw %zmm4, %zmm6, %zmm6 + vpsrlw $0x01, %zmm6, %zmm6 + vpandq %zmm5, %zmm6, %zmm6 + vpmulhrsw %zmm0, %zmm6, %zmm6 + vmovdqu64 %zmm6, 128(%rdi) + vpermq $0x94, 132(%rsi), %ymm6 + vpermq $0x94, 154(%rsi), %ymm7 + vinserti64x4 $0x01, %ymm7, %zmm6, %zmm6 + vpshufb %zmm1, %zmm6, %zmm6 + vpsrlvd %zmm2, %zmm6, %zmm6 + vpsrlvq %zmm3, %zmm6, %zmm6 + vpmullw %zmm4, %zmm6, %zmm6 + vpsrlw $0x01, %zmm6, %zmm6 + vpandq %zmm5, %zmm6, %zmm6 + vpmulhrsw %zmm0, %zmm6, %zmm6 + vmovdqu64 %zmm6, 192(%rdi) + vpermq $0x94, 176(%rsi), %ymm6 + vpermq $0x94, 198(%rsi), %ymm7 + vinserti64x4 $0x01, %ymm7, %zmm6, %zmm6 + vpshufb %zmm1, %zmm6, %zmm6 + vpsrlvd %zmm2, %zmm6, %zmm6 + vpsrlvq %zmm3, %zmm6, %zmm6 + vpmullw %zmm4, %zmm6, %zmm6 + vpsrlw $0x01, %zmm6, %zmm6 + vpandq %zmm5, %zmm6, %zmm6 + vpmulhrsw %zmm0, %zmm6, %zmm6 + vmovdqu64 %zmm6, 256(%rdi) + vpermq $0x94, 220(%rsi), %ymm6 + vpermq $0x94, 242(%rsi), %ymm7 + vinserti64x4 $0x01, %ymm7, %zmm6, %zmm6 + vpshufb %zmm1, %zmm6, %zmm6 + vpsrlvd %zmm2, %zmm6, %zmm6 + vpsrlvq %zmm3, %zmm6, %zmm6 + vpmullw %zmm4, %zmm6, %zmm6 + vpsrlw $0x01, %zmm6, %zmm6 + vpandq %zmm5, %zmm6, %zmm6 + vpmulhrsw %zmm0, %zmm6, %zmm6 + vmovdqu64 %zmm6, 320(%rdi) + vpermq $0x94, 264(%rsi), %ymm6 + vpermq $0x94, 286(%rsi), %ymm7 + vinserti64x4 $0x01, %ymm7, %zmm6, %zmm6 + vpshufb %zmm1, %zmm6, %zmm6 + vpsrlvd %zmm2, %zmm6, %zmm6 + vpsrlvq %zmm3, %zmm6, %zmm6 + vpmullw %zmm4, %zmm6, %zmm6 + vpsrlw $0x01, %zmm6, %zmm6 + vpandq %zmm5, %zmm6, %zmm6 + vpmulhrsw %zmm0, %zmm6, %zmm6 + vmovdqu64 %zmm6, 384(%rdi) + vpermq $0x94, 308(%rsi), %ymm6 + vpermq $0x94, 330(%rsi), %ymm7 + vinserti64x4 $0x01, %ymm7, %zmm6, %zmm6 + vpshufb %zmm1, %zmm6, %zmm6 + vpsrlvd %zmm2, %zmm6, %zmm6 + vpsrlvq %zmm3, %zmm6, %zmm6 + vpmullw %zmm4, %zmm6, %zmm6 + vpsrlw $0x01, %zmm6, %zmm6 + vpandq %zmm5, %zmm6, %zmm6 + vpmulhrsw %zmm0, %zmm6, %zmm6 + vmovdqu64 %zmm6, 448(%rdi) + addq $0x160, %rsi + addq $0x200, %rdi + subl $0x01, %edx + jg L_mlkem_decompress_11_avx512_start + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_decompress_11_avx512,.-mlkem_decompress_11_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_compress_5_avx512_shift1: +.short 0x2001,0x2001,0x2001,0x2001,0x2001,0x2001,0x2001,0x2001 +.short 0x2001,0x2001,0x2001,0x2001,0x2001,0x2001,0x2001,0x2001 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_compress_5_avx512_shift2: +.long 0x04000001,0x04000001,0x04000001,0x04000001 +.long 0x04000001,0x04000001,0x04000001,0x04000001 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_compress_5_avx512_shlv: +.quad 0x000000000000000c,0x000000000000000c +.quad 0x000000000000000c,0x000000000000000c +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_compress_5_avx512_shuf: +.byte 0x00,0x01,0x02,0x03,0x04,0xff,0xff,0xff +.byte 0xff,0xff,0x08,0x09,0x0a,0x0b,0x0c,0xff +.byte 0x09,0x0a,0x0b,0x0c,0xff,0x00,0x01,0x02 +.byte 0x03,0x04,0xff,0xff,0xff,0xff,0xff,0x08 +#ifndef __APPLE__ +.text +.globl mlkem_compress_5_avx512 +.type mlkem_compress_5_avx512,@function +.align 16 +mlkem_compress_5_avx512: +#else +.section __TEXT,__text +.globl _mlkem_compress_5_avx512 +.p2align 4 +_mlkem_compress_5_avx512: +#endif /* __APPLE__ */ + movq $0x4ebf, %rdx + vmovd %edx, %xmm0 + vpbroadcastw %xmm0, %zmm0 + movq $0x400, %rdx + vmovd %edx, %xmm1 + vpbroadcastw %xmm1, %zmm1 + movq $31, %rdx + vmovd %edx, %xmm2 + vpbroadcastw %xmm2, %zmm2 + vmovdqu L_mlkem_compress_5_avx512_shift1(%rip), %ymm3 + vmovdqu L_mlkem_compress_5_avx512_shift2(%rip), %ymm4 + vmovdqu L_mlkem_compress_5_avx512_shlv(%rip), %ymm5 + vmovdqu L_mlkem_compress_5_avx512_shuf(%rip), %ymm6 + vpmulhw (%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vextracti64x4 $0x01, %zmm7, %ymm9 + vpackuswb %ymm9, %ymm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlvq %ymm5, %ymm8, %ymm8 + vpshufb %ymm6, %ymm8, %ymm8 + vextracti128 $0x01, %ymm8, %xmm9 + vpblendvb %xmm6, %xmm9, %xmm8, %xmm8 + vmovdqu %xmm8, (%rdi) + vmovss %xmm9, 16(%rdi) + vpmulhw 64(%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vextracti64x4 $0x01, %zmm7, %ymm9 + vpackuswb %ymm9, %ymm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlvq %ymm5, %ymm8, %ymm8 + vpshufb %ymm6, %ymm8, %ymm8 + vextracti128 $0x01, %ymm8, %xmm9 + vpblendvb %xmm6, %xmm9, %xmm8, %xmm8 + vmovdqu %xmm8, 20(%rdi) + vmovss %xmm9, 36(%rdi) + vpmulhw 128(%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vextracti64x4 $0x01, %zmm7, %ymm9 + vpackuswb %ymm9, %ymm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlvq %ymm5, %ymm8, %ymm8 + vpshufb %ymm6, %ymm8, %ymm8 + vextracti128 $0x01, %ymm8, %xmm9 + vpblendvb %xmm6, %xmm9, %xmm8, %xmm8 + vmovdqu %xmm8, 40(%rdi) + vmovss %xmm9, 56(%rdi) + vpmulhw 192(%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vextracti64x4 $0x01, %zmm7, %ymm9 + vpackuswb %ymm9, %ymm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlvq %ymm5, %ymm8, %ymm8 + vpshufb %ymm6, %ymm8, %ymm8 + vextracti128 $0x01, %ymm8, %xmm9 + vpblendvb %xmm6, %xmm9, %xmm8, %xmm8 + vmovdqu %xmm8, 60(%rdi) + vmovss %xmm9, 76(%rdi) + vpmulhw 256(%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vextracti64x4 $0x01, %zmm7, %ymm9 + vpackuswb %ymm9, %ymm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlvq %ymm5, %ymm8, %ymm8 + vpshufb %ymm6, %ymm8, %ymm8 + vextracti128 $0x01, %ymm8, %xmm9 + vpblendvb %xmm6, %xmm9, %xmm8, %xmm8 + vmovdqu %xmm8, 80(%rdi) + vmovss %xmm9, 96(%rdi) + vpmulhw 320(%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vextracti64x4 $0x01, %zmm7, %ymm9 + vpackuswb %ymm9, %ymm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlvq %ymm5, %ymm8, %ymm8 + vpshufb %ymm6, %ymm8, %ymm8 + vextracti128 $0x01, %ymm8, %xmm9 + vpblendvb %xmm6, %xmm9, %xmm8, %xmm8 + vmovdqu %xmm8, 100(%rdi) + vmovss %xmm9, 116(%rdi) + vpmulhw 384(%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vextracti64x4 $0x01, %zmm7, %ymm9 + vpackuswb %ymm9, %ymm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlvq %ymm5, %ymm8, %ymm8 + vpshufb %ymm6, %ymm8, %ymm8 + vextracti128 $0x01, %ymm8, %xmm9 + vpblendvb %xmm6, %xmm9, %xmm8, %xmm8 + vmovdqu %xmm8, 120(%rdi) + vmovss %xmm9, 136(%rdi) + vpmulhw 448(%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vextracti64x4 $0x01, %zmm7, %ymm9 + vpackuswb %ymm9, %ymm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlvq %ymm5, %ymm8, %ymm8 + vpshufb %ymm6, %ymm8, %ymm8 + vextracti128 $0x01, %ymm8, %xmm9 + vpblendvb %xmm6, %xmm9, %xmm8, %xmm8 + vmovdqu %xmm8, 140(%rdi) + vmovss %xmm9, 156(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_compress_5_avx512,.-mlkem_compress_5_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_compress_10_avx512_shift: +.quad 0x0400000104000001,0x0400000104000001 +.quad 0x0400000104000001,0x0400000104000001 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_compress_10_avx512_shlv: +.quad 0x000000000000000c,0x000000000000000c +.quad 0x000000000000000c,0x000000000000000c +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_compress_10_avx512_shuf: +.byte 0x00,0x01,0x02,0x03,0x04,0x08,0x09,0x0a +.byte 0x0b,0x0c,0xff,0xff,0xff,0xff,0xff,0xff +.byte 0x09,0x0a,0x0b,0x0c,0xff,0xff,0xff,0xff +.byte 0xff,0xff,0x00,0x01,0x02,0x03,0x04,0x08 +#ifndef __APPLE__ +.text +.globl mlkem_compress_10_avx512 +.type mlkem_compress_10_avx512,@function +.align 16 +mlkem_compress_10_avx512: +#else +.section __TEXT,__text +.globl _mlkem_compress_10_avx512 +.p2align 4 +_mlkem_compress_10_avx512: +#endif /* __APPLE__ */ + movq $0x4ebf, %rax + vmovd %eax, %xmm0 + vpbroadcastw %xmm0, %zmm0 + movq $15, %rax + vmovd %eax, %xmm2 + vpbroadcastw %xmm2, %zmm2 + movq $0x1000, %rax + vmovd %eax, %xmm3 + vpbroadcastw %xmm3, %zmm3 + movq $0x3ff, %rax + vmovd %eax, %xmm4 + vpbroadcastw %xmm4, %zmm4 + vpsllw $3, %zmm0, %zmm1 + vmovdqu L_mlkem_compress_10_avx512_shift(%rip), %ymm5 + vmovdqu L_mlkem_compress_10_avx512_shlv(%rip), %ymm6 + vmovdqu L_mlkem_compress_10_avx512_shuf(%rip), %ymm7 +L_mlkem_compress_10_avx512_start: + vmovdqu64 (%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %ymm5, %ymm8, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, (%rdi) + vmovss %xmm12, 16(%rdi) + vextracti64x4 $0x01, %zmm8, %ymm11 + vpmaddwd %ymm5, %ymm11, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 20(%rdi) + vmovss %xmm12, 36(%rdi) + vmovdqu64 64(%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %ymm5, %ymm8, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 40(%rdi) + vmovss %xmm12, 56(%rdi) + vextracti64x4 $0x01, %zmm8, %ymm11 + vpmaddwd %ymm5, %ymm11, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 60(%rdi) + vmovss %xmm12, 76(%rdi) + vmovdqu64 128(%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %ymm5, %ymm8, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 80(%rdi) + vmovss %xmm12, 96(%rdi) + vextracti64x4 $0x01, %zmm8, %ymm11 + vpmaddwd %ymm5, %ymm11, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 100(%rdi) + vmovss %xmm12, 116(%rdi) + vmovdqu64 192(%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %ymm5, %ymm8, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 120(%rdi) + vmovss %xmm12, 136(%rdi) + vextracti64x4 $0x01, %zmm8, %ymm11 + vpmaddwd %ymm5, %ymm11, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 140(%rdi) + vmovss %xmm12, 156(%rdi) + vmovdqu64 256(%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %ymm5, %ymm8, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 160(%rdi) + vmovss %xmm12, 176(%rdi) + vextracti64x4 $0x01, %zmm8, %ymm11 + vpmaddwd %ymm5, %ymm11, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 180(%rdi) + vmovss %xmm12, 196(%rdi) + vmovdqu64 320(%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %ymm5, %ymm8, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 200(%rdi) + vmovss %xmm12, 216(%rdi) + vextracti64x4 $0x01, %zmm8, %ymm11 + vpmaddwd %ymm5, %ymm11, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 220(%rdi) + vmovss %xmm12, 236(%rdi) + vmovdqu64 384(%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %ymm5, %ymm8, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 240(%rdi) + vmovss %xmm12, 256(%rdi) + vextracti64x4 $0x01, %zmm8, %ymm11 + vpmaddwd %ymm5, %ymm11, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 260(%rdi) + vmovss %xmm12, 276(%rdi) + vmovdqu64 448(%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %ymm5, %ymm8, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 280(%rdi) + vmovss %xmm12, 296(%rdi) + vextracti64x4 $0x01, %zmm8, %ymm11 + vpmaddwd %ymm5, %ymm11, %ymm11 + vpsllvd %ymm6, %ymm11, %ymm11 + vpsrlq $12, %ymm11, %ymm11 + vpshufb %ymm7, %ymm11, %ymm11 + vextracti128 $0x01, %ymm11, %xmm12 + vpblendw $0xe0, %xmm12, %xmm11, %xmm11 + vmovdqu %xmm11, 300(%rdi) + vmovss %xmm12, 316(%rdi) + addq $0x140, %rdi + addq $0x200, %rsi + subl $0x01, %edx + jg L_mlkem_compress_10_avx512_start + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_compress_10_avx512,.-mlkem_compress_10_avx512 +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_compress_11_avx512_shift: +.quad 0x0800000108000001,0x0800000108000001 +.quad 0x0800000108000001,0x0800000108000001 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_compress_11_avx512_shlvd: +.long 0x0000000a,0x00000000,0x0000000a,0x00000000 +.long 0x0000000a,0x00000000,0x0000000a,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_compress_11_avx512_shrvq: +.quad 0x000000000000000a,0x000000000000001e +.quad 0x000000000000000a,0x000000000000001e +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_compress_11_avx512_shuf: +.byte 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 +.byte 0x08,0x09,0x0a,0xff,0xff,0xff,0xff,0xff +.byte 0x05,0x06,0x07,0x08,0x09,0x0a,0xff,0xff +.byte 0xff,0xff,0x00,0x00,0x01,0x02,0x03,0x04 +#ifndef __APPLE__ +.text +.globl mlkem_compress_11_avx512 +.type mlkem_compress_11_avx512,@function +.align 16 +mlkem_compress_11_avx512: +#else +.section __TEXT,__text +.globl _mlkem_compress_11_avx512 +.p2align 4 +_mlkem_compress_11_avx512: +#endif /* __APPLE__ */ + movq $0x4ebf, %rax + vmovd %eax, %xmm0 + vpbroadcastw %xmm0, %zmm0 + movq $36, %rax + vmovd %eax, %xmm2 + vpbroadcastw %xmm2, %zmm2 + movq $0x2000, %rax + vmovd %eax, %xmm3 + vpbroadcastw %xmm3, %zmm3 + movq $0x7ff, %rax + vmovd %eax, %xmm4 + vpbroadcastw %xmm4, %zmm4 + vpsllw $3, %zmm0, %zmm1 + vmovdqu L_mlkem_compress_11_avx512_shift(%rip), %ymm5 + vmovdqu L_mlkem_compress_11_avx512_shlvd(%rip), %ymm6 + vmovdqu L_mlkem_compress_11_avx512_shrvq(%rip), %ymm7 + vmovdqu L_mlkem_compress_11_avx512_shuf(%rip), %ymm8 +L_mlkem_compress_11_avx512_start: + vmovdqu64 (%rsi), %zmm9 + vpmullw %zmm1, %zmm9, %zmm10 + vpaddw %zmm2, %zmm9, %zmm11 + vpsllw $3, %zmm9, %zmm9 + vpmulhw %zmm0, %zmm9, %zmm9 + vpsubw %zmm11, %zmm10, %zmm11 + vpandnq %zmm11, %zmm10, %zmm10 + vpsrlw $15, %zmm10, %zmm10 + vpsubw %zmm10, %zmm9, %zmm9 + vpmulhrsw %zmm3, %zmm9, %zmm9 + vpandq %zmm4, %zmm9, %zmm9 + vpmaddwd %ymm5, %ymm9, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, (%rdi) + vmovq %xmm13, 16(%rdi) + vextracti64x4 $0x01, %zmm9, %ymm12 + vpmaddwd %ymm5, %ymm12, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 22(%rdi) + vmovq %xmm13, 38(%rdi) + vmovdqu64 64(%rsi), %zmm9 + vpmullw %zmm1, %zmm9, %zmm10 + vpaddw %zmm2, %zmm9, %zmm11 + vpsllw $3, %zmm9, %zmm9 + vpmulhw %zmm0, %zmm9, %zmm9 + vpsubw %zmm11, %zmm10, %zmm11 + vpandnq %zmm11, %zmm10, %zmm10 + vpsrlw $15, %zmm10, %zmm10 + vpsubw %zmm10, %zmm9, %zmm9 + vpmulhrsw %zmm3, %zmm9, %zmm9 + vpandq %zmm4, %zmm9, %zmm9 + vpmaddwd %ymm5, %ymm9, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 44(%rdi) + vmovq %xmm13, 60(%rdi) + vextracti64x4 $0x01, %zmm9, %ymm12 + vpmaddwd %ymm5, %ymm12, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 66(%rdi) + vmovq %xmm13, 82(%rdi) + vmovdqu64 128(%rsi), %zmm9 + vpmullw %zmm1, %zmm9, %zmm10 + vpaddw %zmm2, %zmm9, %zmm11 + vpsllw $3, %zmm9, %zmm9 + vpmulhw %zmm0, %zmm9, %zmm9 + vpsubw %zmm11, %zmm10, %zmm11 + vpandnq %zmm11, %zmm10, %zmm10 + vpsrlw $15, %zmm10, %zmm10 + vpsubw %zmm10, %zmm9, %zmm9 + vpmulhrsw %zmm3, %zmm9, %zmm9 + vpandq %zmm4, %zmm9, %zmm9 + vpmaddwd %ymm5, %ymm9, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 88(%rdi) + vmovq %xmm13, 104(%rdi) + vextracti64x4 $0x01, %zmm9, %ymm12 + vpmaddwd %ymm5, %ymm12, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 110(%rdi) + vmovq %xmm13, 126(%rdi) + vmovdqu64 192(%rsi), %zmm9 + vpmullw %zmm1, %zmm9, %zmm10 + vpaddw %zmm2, %zmm9, %zmm11 + vpsllw $3, %zmm9, %zmm9 + vpmulhw %zmm0, %zmm9, %zmm9 + vpsubw %zmm11, %zmm10, %zmm11 + vpandnq %zmm11, %zmm10, %zmm10 + vpsrlw $15, %zmm10, %zmm10 + vpsubw %zmm10, %zmm9, %zmm9 + vpmulhrsw %zmm3, %zmm9, %zmm9 + vpandq %zmm4, %zmm9, %zmm9 + vpmaddwd %ymm5, %ymm9, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 132(%rdi) + vmovq %xmm13, 148(%rdi) + vextracti64x4 $0x01, %zmm9, %ymm12 + vpmaddwd %ymm5, %ymm12, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 154(%rdi) + vmovq %xmm13, 170(%rdi) + vmovdqu64 256(%rsi), %zmm9 + vpmullw %zmm1, %zmm9, %zmm10 + vpaddw %zmm2, %zmm9, %zmm11 + vpsllw $3, %zmm9, %zmm9 + vpmulhw %zmm0, %zmm9, %zmm9 + vpsubw %zmm11, %zmm10, %zmm11 + vpandnq %zmm11, %zmm10, %zmm10 + vpsrlw $15, %zmm10, %zmm10 + vpsubw %zmm10, %zmm9, %zmm9 + vpmulhrsw %zmm3, %zmm9, %zmm9 + vpandq %zmm4, %zmm9, %zmm9 + vpmaddwd %ymm5, %ymm9, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 176(%rdi) + vmovq %xmm13, 192(%rdi) + vextracti64x4 $0x01, %zmm9, %ymm12 + vpmaddwd %ymm5, %ymm12, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 198(%rdi) + vmovq %xmm13, 214(%rdi) + vmovdqu64 320(%rsi), %zmm9 + vpmullw %zmm1, %zmm9, %zmm10 + vpaddw %zmm2, %zmm9, %zmm11 + vpsllw $3, %zmm9, %zmm9 + vpmulhw %zmm0, %zmm9, %zmm9 + vpsubw %zmm11, %zmm10, %zmm11 + vpandnq %zmm11, %zmm10, %zmm10 + vpsrlw $15, %zmm10, %zmm10 + vpsubw %zmm10, %zmm9, %zmm9 + vpmulhrsw %zmm3, %zmm9, %zmm9 + vpandq %zmm4, %zmm9, %zmm9 + vpmaddwd %ymm5, %ymm9, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 220(%rdi) + vmovq %xmm13, 236(%rdi) + vextracti64x4 $0x01, %zmm9, %ymm12 + vpmaddwd %ymm5, %ymm12, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 242(%rdi) + vmovq %xmm13, 258(%rdi) + vmovdqu64 384(%rsi), %zmm9 + vpmullw %zmm1, %zmm9, %zmm10 + vpaddw %zmm2, %zmm9, %zmm11 + vpsllw $3, %zmm9, %zmm9 + vpmulhw %zmm0, %zmm9, %zmm9 + vpsubw %zmm11, %zmm10, %zmm11 + vpandnq %zmm11, %zmm10, %zmm10 + vpsrlw $15, %zmm10, %zmm10 + vpsubw %zmm10, %zmm9, %zmm9 + vpmulhrsw %zmm3, %zmm9, %zmm9 + vpandq %zmm4, %zmm9, %zmm9 + vpmaddwd %ymm5, %ymm9, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 264(%rdi) + vmovq %xmm13, 280(%rdi) + vextracti64x4 $0x01, %zmm9, %ymm12 + vpmaddwd %ymm5, %ymm12, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 286(%rdi) + vmovq %xmm13, 302(%rdi) + vmovdqu64 448(%rsi), %zmm9 + vpmullw %zmm1, %zmm9, %zmm10 + vpaddw %zmm2, %zmm9, %zmm11 + vpsllw $3, %zmm9, %zmm9 + vpmulhw %zmm0, %zmm9, %zmm9 + vpsubw %zmm11, %zmm10, %zmm11 + vpandnq %zmm11, %zmm10, %zmm10 + vpsrlw $15, %zmm10, %zmm10 + vpsubw %zmm10, %zmm9, %zmm9 + vpmulhrsw %zmm3, %zmm9, %zmm9 + vpandq %zmm4, %zmm9, %zmm9 + vpmaddwd %ymm5, %ymm9, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 308(%rdi) + vmovq %xmm13, 324(%rdi) + vextracti64x4 $0x01, %zmm9, %ymm12 + vpmaddwd %ymm5, %ymm12, %ymm12 + vpsllvd %ymm6, %ymm12, %ymm12 + vpsrldq $8, %ymm12, %ymm13 + vpsrlvq %ymm7, %ymm12, %ymm12 + vpsllq $34, %ymm13, %ymm13 + vpaddq %ymm13, %ymm12, %ymm12 + vpshufb %ymm8, %ymm12, %ymm12 + vextracti128 $0x01, %ymm12, %xmm13 + vpblendvb %xmm8, %xmm13, %xmm12, %xmm12 + vmovdqu %xmm12, 330(%rdi) + vmovq %xmm13, 346(%rdi) + addq $0x160, %rdi + addq $0x200, %rsi + subl $0x01, %edx + jg L_mlkem_compress_11_avx512_start + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_compress_11_avx512,.-mlkem_compress_11_avx512 +#endif /* __APPLE__ */ +#endif /* HAVE_INTEL_AVX512 */ +#endif /* WOLFSSL_HAVE_MLKEM */ +#ifdef WOLFSSL_HAVE_MLKEM +#ifndef NO_AVX512_VBMI_SUPPORT +#ifndef HAVE_INTEL_AVX512_VBMI +#define HAVE_INTEL_AVX512_VBMI +#endif /* HAVE_INTEL_AVX512_VBMI */ +#endif /* NO_AVX512_VBMI_SUPPORT */ +#ifdef HAVE_INTEL_AVX512_VBMI +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_from_bytes_avx512_vbmi_lo: +.byte 0x00,0x01,0x02,0x00,0x03,0x04,0x05,0x00 +.byte 0x06,0x07,0x08,0x00,0x09,0x0a,0x0b,0x00 +.byte 0x0c,0x0d,0x0e,0x00,0x0f,0x10,0x11,0x00 +.byte 0x12,0x13,0x14,0x00,0x15,0x16,0x17,0x00 +.byte 0x18,0x19,0x1a,0x00,0x1b,0x1c,0x1d,0x00 +.byte 0x1e,0x1f,0x20,0x00,0x21,0x22,0x23,0x00 +.byte 0x24,0x25,0x26,0x00,0x27,0x28,0x29,0x00 +.byte 0x2a,0x2b,0x2c,0x00,0x2d,0x2e,0x2f,0x00 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_from_bytes_avx512_vbmi_hi: +.byte 0x10,0x11,0x12,0x00,0x13,0x14,0x15,0x00 +.byte 0x16,0x17,0x18,0x00,0x19,0x1a,0x1b,0x00 +.byte 0x1c,0x1d,0x1e,0x00,0x1f,0x20,0x21,0x00 +.byte 0x22,0x23,0x24,0x00,0x25,0x26,0x27,0x00 +.byte 0x28,0x29,0x2a,0x00,0x2b,0x2c,0x2d,0x00 +.byte 0x2e,0x2f,0x30,0x00,0x31,0x32,0x33,0x00 +.byte 0x34,0x35,0x36,0x00,0x37,0x38,0x39,0x00 +.byte 0x3a,0x3b,0x3c,0x00,0x3d,0x3e,0x3f,0x00 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_from_bytes_avx512_vbmi_mask_lo: +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_from_bytes_avx512_vbmi_mask_hi: +.long 0x00fff000,0x00fff000,0x00fff000,0x00fff000 +.long 0x00fff000,0x00fff000,0x00fff000,0x00fff000 +.long 0x00fff000,0x00fff000,0x00fff000,0x00fff000 +.long 0x00fff000,0x00fff000,0x00fff000,0x00fff000 +#ifndef __APPLE__ +.text +.globl mlkem_from_bytes_avx512_vbmi +.type mlkem_from_bytes_avx512_vbmi,@function +.align 16 +mlkem_from_bytes_avx512_vbmi: +#else +.section __TEXT,__text +.globl _mlkem_from_bytes_avx512_vbmi +.p2align 4 +_mlkem_from_bytes_avx512_vbmi: +#endif /* __APPLE__ */ + vmovdqu64 L_mlkem_from_bytes_avx512_vbmi_lo(%rip), %zmm0 + vmovdqu64 L_mlkem_from_bytes_avx512_vbmi_hi(%rip), %zmm1 + vmovdqu64 L_mlkem_from_bytes_avx512_vbmi_mask_lo(%rip), %zmm2 + vmovdqu64 L_mlkem_from_bytes_avx512_vbmi_mask_hi(%rip), %zmm3 + vpermb (%rsi), %zmm0, %zmm4 + vpandq %zmm3, %zmm4, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm2, %zmm4 + vmovdqu64 %zmm4, (%rdi) + vpermb 48(%rsi), %zmm0, %zmm4 + vpandq %zmm3, %zmm4, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm2, %zmm4 + vmovdqu64 %zmm4, 64(%rdi) + vpermb 96(%rsi), %zmm0, %zmm4 + vpandq %zmm3, %zmm4, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm2, %zmm4 + vmovdqu64 %zmm4, 128(%rdi) + vpermb 144(%rsi), %zmm0, %zmm4 + vpandq %zmm3, %zmm4, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm2, %zmm4 + vmovdqu64 %zmm4, 192(%rdi) + vpermb 192(%rsi), %zmm0, %zmm4 + vpandq %zmm3, %zmm4, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm2, %zmm4 + vmovdqu64 %zmm4, 256(%rdi) + vpermb 240(%rsi), %zmm0, %zmm4 + vpandq %zmm3, %zmm4, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm2, %zmm4 + vmovdqu64 %zmm4, 320(%rdi) + vpermb 288(%rsi), %zmm0, %zmm4 + vpandq %zmm3, %zmm4, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm2, %zmm4 + vmovdqu64 %zmm4, 384(%rdi) + vpermb 320(%rsi), %zmm1, %zmm4 + vpandq %zmm3, %zmm4, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm2, %zmm4 + vmovdqu64 %zmm4, 448(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_from_bytes_avx512_vbmi,.-mlkem_from_bytes_avx512_vbmi +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_to_bytes_avx512_vbmi_mask: +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_to_bytes_avx512_vbmi_permb: +.byte 0x00,0x01,0x02,0x04,0x05,0x06,0x08,0x09 +.byte 0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x14 +.byte 0x15,0x16,0x18,0x19,0x1a,0x1c,0x1d,0x1e +.byte 0x20,0x21,0x22,0x24,0x25,0x26,0x28,0x29 +.byte 0x2a,0x2c,0x2d,0x2e,0x30,0x31,0x32,0x34 +.byte 0x35,0x36,0x38,0x39,0x3a,0x3c,0x3d,0x3e +.byte 0x00,0x01,0x02,0x04,0x00,0x01,0x02,0x04 +.byte 0x00,0x01,0x02,0x04,0x00,0x01,0x02,0x04 +#ifndef __APPLE__ +.text +.globl mlkem_to_bytes_avx512_vbmi +.type mlkem_to_bytes_avx512_vbmi,@function +.align 16 +mlkem_to_bytes_avx512_vbmi: +#else +.section __TEXT,__text +.globl _mlkem_to_bytes_avx512_vbmi +.p2align 4 +_mlkem_to_bytes_avx512_vbmi: +#endif /* __APPLE__ */ + movq $0xd01, %rdx + vmovd %edx, %xmm0 + vpbroadcastw %xmm0, %zmm0 + vmovdqu64 L_mlkem_to_bytes_avx512_vbmi_mask(%rip), %zmm1 + vmovdqu64 L_mlkem_to_bytes_avx512_vbmi_permb(%rip), %zmm2 + vmovdqu64 (%rsi), %zmm3 + vpsubw %zmm0, %zmm3, %zmm4 + vpsraw $15, %zmm4, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpaddw %zmm4, %zmm5, %zmm3 + vpsrld $16, %zmm3, %zmm4 + vpslld $12, %zmm4, %zmm4 + vpternlogd $0xea, %zmm4, %zmm1, %zmm3 + vpermb %zmm3, %zmm2, %zmm6 + vmovdqu64 %zmm6, (%rdi) + vmovdqu64 64(%rsi), %zmm3 + vpsubw %zmm0, %zmm3, %zmm4 + vpsraw $15, %zmm4, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpaddw %zmm4, %zmm5, %zmm3 + vpsrld $16, %zmm3, %zmm4 + vpslld $12, %zmm4, %zmm4 + vpternlogd $0xea, %zmm4, %zmm1, %zmm3 + vpermb %zmm3, %zmm2, %zmm6 + vmovdqu64 %zmm6, 48(%rdi) + vmovdqu64 128(%rsi), %zmm3 + vpsubw %zmm0, %zmm3, %zmm4 + vpsraw $15, %zmm4, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpaddw %zmm4, %zmm5, %zmm3 + vpsrld $16, %zmm3, %zmm4 + vpslld $12, %zmm4, %zmm4 + vpternlogd $0xea, %zmm4, %zmm1, %zmm3 + vpermb %zmm3, %zmm2, %zmm6 + vmovdqu64 %zmm6, 96(%rdi) + vmovdqu64 192(%rsi), %zmm3 + vpsubw %zmm0, %zmm3, %zmm4 + vpsraw $15, %zmm4, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpaddw %zmm4, %zmm5, %zmm3 + vpsrld $16, %zmm3, %zmm4 + vpslld $12, %zmm4, %zmm4 + vpternlogd $0xea, %zmm4, %zmm1, %zmm3 + vpermb %zmm3, %zmm2, %zmm6 + vmovdqu64 %zmm6, 144(%rdi) + vmovdqu64 256(%rsi), %zmm3 + vpsubw %zmm0, %zmm3, %zmm4 + vpsraw $15, %zmm4, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpaddw %zmm4, %zmm5, %zmm3 + vpsrld $16, %zmm3, %zmm4 + vpslld $12, %zmm4, %zmm4 + vpternlogd $0xea, %zmm4, %zmm1, %zmm3 + vpermb %zmm3, %zmm2, %zmm6 + vmovdqu64 %zmm6, 192(%rdi) + vmovdqu64 320(%rsi), %zmm3 + vpsubw %zmm0, %zmm3, %zmm4 + vpsraw $15, %zmm4, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpaddw %zmm4, %zmm5, %zmm3 + vpsrld $16, %zmm3, %zmm4 + vpslld $12, %zmm4, %zmm4 + vpternlogd $0xea, %zmm4, %zmm1, %zmm3 + vpermb %zmm3, %zmm2, %zmm6 + vmovdqu64 %zmm6, 240(%rdi) + vmovdqu64 384(%rsi), %zmm3 + vpsubw %zmm0, %zmm3, %zmm4 + vpsraw $15, %zmm4, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpaddw %zmm4, %zmm5, %zmm3 + vpsrld $16, %zmm3, %zmm4 + vpslld $12, %zmm4, %zmm4 + vpternlogd $0xea, %zmm4, %zmm1, %zmm3 + vpermb %zmm3, %zmm2, %zmm6 + vmovdqu64 %zmm6, 288(%rdi) + vmovdqu64 448(%rsi), %zmm3 + vpsubw %zmm0, %zmm3, %zmm4 + vpsraw $15, %zmm4, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpaddw %zmm4, %zmm5, %zmm3 + vpsrld $16, %zmm3, %zmm4 + vpslld $12, %zmm4, %zmm4 + vpternlogd $0xea, %zmm4, %zmm1, %zmm3 + vpermb %zmm3, %zmm2, %zmm6 + vmovdqu %ymm6, 336(%rdi) + vextracti32x4 $2, %zmm6, %xmm4 + vmovdqu %xmm4, 368(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_to_bytes_avx512_vbmi,.-mlkem_to_bytes_avx512_vbmi +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_rej_uniform_avx512_vbmi_permb: +.byte 0x00,0x01,0x02,0x00,0x03,0x04,0x05,0x00 +.byte 0x06,0x07,0x08,0x00,0x09,0x0a,0x0b,0x00 +.byte 0x0c,0x0d,0x0e,0x00,0x0f,0x10,0x11,0x00 +.byte 0x12,0x13,0x14,0x00,0x15,0x16,0x17,0x00 +.byte 0x18,0x19,0x1a,0x00,0x1b,0x1c,0x1d,0x00 +.byte 0x1e,0x1f,0x20,0x00,0x21,0x22,0x23,0x00 +.byte 0x24,0x25,0x26,0x00,0x27,0x28,0x29,0x00 +.byte 0x2a,0x2b,0x2c,0x00,0x2d,0x2e,0x2f,0x00 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_rej_uniform_avx512_vbmi_mask_lo: +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_rej_uniform_avx512_vbmi_mask_hi: +.long 0x00fff000,0x00fff000,0x00fff000,0x00fff000 +.long 0x00fff000,0x00fff000,0x00fff000,0x00fff000 +.long 0x00fff000,0x00fff000,0x00fff000,0x00fff000 +.long 0x00fff000,0x00fff000,0x00fff000,0x00fff000 +#ifndef __APPLE__ +.text +.globl mlkem_rej_uniform_avx512_vbmi +.type mlkem_rej_uniform_avx512_vbmi,@function +.align 16 +mlkem_rej_uniform_avx512_vbmi: +#else +.section __TEXT,__text +.globl _mlkem_rej_uniform_avx512_vbmi +.p2align 4 +_mlkem_rej_uniform_avx512_vbmi: +#endif /* __APPLE__ */ + pushq %rbx + movl %esi, %eax + movq $0xd01, %r10 + vmovd %r10d, %xmm0 + vpbroadcastw %xmm0, %zmm0 + vmovdqu64 L_mlkem_rej_uniform_avx512_vbmi_permb(%rip), %zmm1 + vmovdqu64 L_mlkem_rej_uniform_avx512_vbmi_mask_lo(%rip), %zmm2 + vmovdqu64 L_mlkem_rej_uniform_avx512_vbmi_mask_hi(%rip), %zmm3 +L_mlkem_rej_uniform_avx512_vbmi_fast: + cmpl $32, %esi + jl L_mlkem_rej_uniform_avx512_vbmi_fast_end + cmpl $0x40, %ecx + jl L_mlkem_rej_uniform_avx512_vbmi_fast_end + vpermb (%rdx), %zmm1, %zmm4 + vpandq %zmm3, %zmm4, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm2, %zmm4 + vpcmpw $0x01, %zmm0, %zmm4, %k1 + vpcompressw %zmm4, (%rdi){%k1} + kmovd %k1, %ebx + popcntl %ebx, %ebx + leaq (%rdi,%rbx,2), %rdi + subl %ebx, %esi + addq $48, %rdx + subl $48, %ecx + jmp L_mlkem_rej_uniform_avx512_vbmi_fast +L_mlkem_rej_uniform_avx512_vbmi_fast_end: +L_mlkem_rej_uniform_avx512_vbmi_tail: + cmpl $0x00, %esi + je L_mlkem_rej_uniform_avx512_vbmi_tail_end + cmpl $3, %ecx + jl L_mlkem_rej_uniform_avx512_vbmi_tail_end + movzwl (%rdx), %r8d + andl $0xfff, %r8d + movzwl 1(%rdx), %r9d + shrl $4, %r9d + cmpl $0xd01, %r8d + jge L_mlkem_rej_uniform_avx512_vbmi_skip0 + movw %r8w, (%rdi) + addq $2, %rdi + subl $0x01, %esi + je L_mlkem_rej_uniform_avx512_vbmi_tail_end +L_mlkem_rej_uniform_avx512_vbmi_skip0: + cmpl $0xd01, %r9d + jge L_mlkem_rej_uniform_avx512_vbmi_skip1 + movw %r9w, (%rdi) + addq $2, %rdi + subl $0x01, %esi + je L_mlkem_rej_uniform_avx512_vbmi_tail_end +L_mlkem_rej_uniform_avx512_vbmi_skip1: + addq $3, %rdx + subl $3, %ecx + jmp L_mlkem_rej_uniform_avx512_vbmi_tail +L_mlkem_rej_uniform_avx512_vbmi_tail_end: + subl %esi, %eax + vzeroupper + popq %rbx + repz retq +#ifndef __APPLE__ +.size mlkem_rej_uniform_avx512_vbmi,.-mlkem_rej_uniform_avx512_vbmi +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_rej_uniform_n_avx512_vbmi_permb: +.byte 0x00,0x01,0x02,0x00,0x03,0x04,0x05,0x00 +.byte 0x06,0x07,0x08,0x00,0x09,0x0a,0x0b,0x00 +.byte 0x0c,0x0d,0x0e,0x00,0x0f,0x10,0x11,0x00 +.byte 0x12,0x13,0x14,0x00,0x15,0x16,0x17,0x00 +.byte 0x18,0x19,0x1a,0x00,0x1b,0x1c,0x1d,0x00 +.byte 0x1e,0x1f,0x20,0x00,0x21,0x22,0x23,0x00 +.byte 0x24,0x25,0x26,0x00,0x27,0x28,0x29,0x00 +.byte 0x2a,0x2b,0x2c,0x00,0x2d,0x2e,0x2f,0x00 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_rej_uniform_n_avx512_vbmi_mask_lo: +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +.long 0x00000fff,0x00000fff,0x00000fff,0x00000fff +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_rej_uniform_n_avx512_vbmi_mask_hi: +.long 0x00fff000,0x00fff000,0x00fff000,0x00fff000 +.long 0x00fff000,0x00fff000,0x00fff000,0x00fff000 +.long 0x00fff000,0x00fff000,0x00fff000,0x00fff000 +.long 0x00fff000,0x00fff000,0x00fff000,0x00fff000 +#ifndef __APPLE__ +.text +.globl mlkem_rej_uniform_n_avx512_vbmi +.type mlkem_rej_uniform_n_avx512_vbmi,@function +.align 16 +mlkem_rej_uniform_n_avx512_vbmi: +#else +.section __TEXT,__text +.globl _mlkem_rej_uniform_n_avx512_vbmi +.p2align 4 +_mlkem_rej_uniform_n_avx512_vbmi: +#endif /* __APPLE__ */ + pushq %rbx + movl %esi, %eax + movq $0xd01, %r10 + vmovd %r10d, %xmm0 + vpbroadcastw %xmm0, %zmm0 + vmovdqu64 L_mlkem_rej_uniform_n_avx512_vbmi_permb(%rip), %zmm1 + vmovdqu64 L_mlkem_rej_uniform_n_avx512_vbmi_mask_lo(%rip), %zmm2 + vmovdqu64 L_mlkem_rej_uniform_n_avx512_vbmi_mask_hi(%rip), %zmm3 +L_mlkem_rej_uniform_n_avx512_vbmi_fast: + cmpl $32, %esi + jl L_mlkem_rej_uniform_n_avx512_vbmi_fast_end + cmpl $0x40, %ecx + jl L_mlkem_rej_uniform_n_avx512_vbmi_fast_end + vpermb (%rdx), %zmm1, %zmm4 + vpandq %zmm3, %zmm4, %zmm5 + vpslld $4, %zmm5, %zmm5 + vpternlogd $0xea, %zmm5, %zmm2, %zmm4 + vpcmpw $0x01, %zmm0, %zmm4, %k1 + vpcompressw %zmm4, (%rdi){%k1} + kmovd %k1, %ebx + popcntl %ebx, %ebx + leaq (%rdi,%rbx,2), %rdi + subl %ebx, %esi + addq $48, %rdx + subl $48, %ecx + jmp L_mlkem_rej_uniform_n_avx512_vbmi_fast +L_mlkem_rej_uniform_n_avx512_vbmi_fast_end: +L_mlkem_rej_uniform_n_avx512_vbmi_tail: + cmpl $0x00, %esi + je L_mlkem_rej_uniform_n_avx512_vbmi_tail_end + cmpl $3, %ecx + jl L_mlkem_rej_uniform_n_avx512_vbmi_tail_end + movzwl (%rdx), %r8d + andl $0xfff, %r8d + movzwl 1(%rdx), %r9d + shrl $4, %r9d + cmpl $0xd01, %r8d + jge L_mlkem_rej_uniform_n_avx512_vbmi_skip0 + movw %r8w, (%rdi) + addq $2, %rdi + subl $0x01, %esi + je L_mlkem_rej_uniform_n_avx512_vbmi_tail_end +L_mlkem_rej_uniform_n_avx512_vbmi_skip0: + cmpl $0xd01, %r9d + jge L_mlkem_rej_uniform_n_avx512_vbmi_skip1 + movw %r9w, (%rdi) + addq $2, %rdi + subl $0x01, %esi + je L_mlkem_rej_uniform_n_avx512_vbmi_tail_end +L_mlkem_rej_uniform_n_avx512_vbmi_skip1: + addq $3, %rdx + subl $3, %ecx + jmp L_mlkem_rej_uniform_n_avx512_vbmi_tail +L_mlkem_rej_uniform_n_avx512_vbmi_tail_end: + subl %esi, %eax + vzeroupper + popq %rbx + repz retq +#ifndef __APPLE__ +.size mlkem_rej_uniform_n_avx512_vbmi,.-mlkem_rej_uniform_n_avx512_vbmi +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_compress_4_avx512_vbmi_gather: +.byte 0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c +.byte 0x20,0x24,0x28,0x2c,0x30,0x34,0x38,0x3c +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +#ifndef __APPLE__ +.text +.globl mlkem_compress_4_avx512_vbmi +.type mlkem_compress_4_avx512_vbmi,@function +.align 16 +mlkem_compress_4_avx512_vbmi: +#else +.section __TEXT,__text +.globl _mlkem_compress_4_avx512_vbmi +.p2align 4 +_mlkem_compress_4_avx512_vbmi: +#endif /* __APPLE__ */ + vmovdqu64 L_mlkem_compress_4_avx512_vbmi_gather(%rip), %zmm0 + movq $0x4ebf, %rdx + vmovd %edx, %xmm1 + vpbroadcastw %xmm1, %zmm1 + movq $0x200, %rdx + vmovd %edx, %xmm2 + vpbroadcastw %xmm2, %zmm2 + movq $15, %rdx + vmovd %edx, %xmm3 + vpbroadcastw %xmm3, %zmm3 + vpmulhw (%rsi), %zmm1, %zmm4 + vpmulhrsw %zmm2, %zmm4, %zmm4 + vpandq %zmm3, %zmm4, %zmm4 + vpsrld $12, %zmm4, %zmm5 + vpord %zmm5, %zmm4, %zmm4 + vpermb %zmm4, %zmm0, %zmm6 + vmovdqu %xmm6, (%rdi) + vpmulhw 64(%rsi), %zmm1, %zmm4 + vpmulhrsw %zmm2, %zmm4, %zmm4 + vpandq %zmm3, %zmm4, %zmm4 + vpsrld $12, %zmm4, %zmm5 + vpord %zmm5, %zmm4, %zmm4 + vpermb %zmm4, %zmm0, %zmm6 + vmovdqu %xmm6, 16(%rdi) + vpmulhw 128(%rsi), %zmm1, %zmm4 + vpmulhrsw %zmm2, %zmm4, %zmm4 + vpandq %zmm3, %zmm4, %zmm4 + vpsrld $12, %zmm4, %zmm5 + vpord %zmm5, %zmm4, %zmm4 + vpermb %zmm4, %zmm0, %zmm6 + vmovdqu %xmm6, 32(%rdi) + vpmulhw 192(%rsi), %zmm1, %zmm4 + vpmulhrsw %zmm2, %zmm4, %zmm4 + vpandq %zmm3, %zmm4, %zmm4 + vpsrld $12, %zmm4, %zmm5 + vpord %zmm5, %zmm4, %zmm4 + vpermb %zmm4, %zmm0, %zmm6 + vmovdqu %xmm6, 48(%rdi) + vpmulhw 256(%rsi), %zmm1, %zmm4 + vpmulhrsw %zmm2, %zmm4, %zmm4 + vpandq %zmm3, %zmm4, %zmm4 + vpsrld $12, %zmm4, %zmm5 + vpord %zmm5, %zmm4, %zmm4 + vpermb %zmm4, %zmm0, %zmm6 + vmovdqu %xmm6, 64(%rdi) + vpmulhw 320(%rsi), %zmm1, %zmm4 + vpmulhrsw %zmm2, %zmm4, %zmm4 + vpandq %zmm3, %zmm4, %zmm4 + vpsrld $12, %zmm4, %zmm5 + vpord %zmm5, %zmm4, %zmm4 + vpermb %zmm4, %zmm0, %zmm6 + vmovdqu %xmm6, 80(%rdi) + vpmulhw 384(%rsi), %zmm1, %zmm4 + vpmulhrsw %zmm2, %zmm4, %zmm4 + vpandq %zmm3, %zmm4, %zmm4 + vpsrld $12, %zmm4, %zmm5 + vpord %zmm5, %zmm4, %zmm4 + vpermb %zmm4, %zmm0, %zmm6 + vmovdqu %xmm6, 96(%rdi) + vpmulhw 448(%rsi), %zmm1, %zmm4 + vpmulhrsw %zmm2, %zmm4, %zmm4 + vpandq %zmm3, %zmm4, %zmm4 + vpsrld $12, %zmm4, %zmm5 + vpord %zmm5, %zmm4, %zmm4 + vpermb %zmm4, %zmm0, %zmm6 + vmovdqu %xmm6, 112(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_compress_4_avx512_vbmi,.-mlkem_compress_4_avx512_vbmi +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_compress_5_avx512_vbmi_shift1: +.short 0x2001,0x2001,0x2001,0x2001,0x2001,0x2001,0x2001,0x2001 +.short 0x2001,0x2001,0x2001,0x2001,0x2001,0x2001,0x2001,0x2001 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_compress_5_avx512_vbmi_shift2: +.long 0x04000001,0x04000001,0x04000001,0x04000001 +.long 0x04000001,0x04000001,0x04000001,0x04000001 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_compress_5_avx512_vbmi_shlv: +.quad 0x000000000000000c,0x000000000000000c +.quad 0x000000000000000c,0x000000000000000c +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_compress_5_avx512_vbmi_gather: +.byte 0x00,0x01,0x02,0x03,0x04,0x08,0x09,0x0a +.byte 0x0b,0x0c,0x10,0x11,0x12,0x13,0x14,0x18 +.byte 0x19,0x1a,0x1b,0x1c,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +#ifndef __APPLE__ +.text +.globl mlkem_compress_5_avx512_vbmi +.type mlkem_compress_5_avx512_vbmi,@function +.align 16 +mlkem_compress_5_avx512_vbmi: +#else +.section __TEXT,__text +.globl _mlkem_compress_5_avx512_vbmi +.p2align 4 +_mlkem_compress_5_avx512_vbmi: +#endif /* __APPLE__ */ + movq $0x4ebf, %rdx + vmovd %edx, %xmm0 + vpbroadcastw %xmm0, %zmm0 + movq $0x400, %rdx + vmovd %edx, %xmm1 + vpbroadcastw %xmm1, %zmm1 + movq $31, %rdx + vmovd %edx, %xmm2 + vpbroadcastw %xmm2, %zmm2 + vmovdqu L_mlkem_compress_5_avx512_vbmi_shift1(%rip), %ymm3 + vmovdqu L_mlkem_compress_5_avx512_vbmi_shift2(%rip), %ymm4 + vmovdqu L_mlkem_compress_5_avx512_vbmi_shlv(%rip), %ymm5 + vmovdqu64 L_mlkem_compress_5_avx512_vbmi_gather(%rip), %zmm6 + vpmulhw (%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vpmovwb %zmm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlq $12, %ymm8, %ymm8 + vpermb %ymm8, %ymm6, %ymm9 + vmovdqu %xmm9, (%rdi) + vextracti128 $0x01, %ymm9, %xmm8 + vmovss %xmm8, 16(%rdi) + vpmulhw 64(%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vpmovwb %zmm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlq $12, %ymm8, %ymm8 + vpermb %ymm8, %ymm6, %ymm9 + vmovdqu %xmm9, 20(%rdi) + vextracti128 $0x01, %ymm9, %xmm8 + vmovss %xmm8, 36(%rdi) + vpmulhw 128(%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vpmovwb %zmm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlq $12, %ymm8, %ymm8 + vpermb %ymm8, %ymm6, %ymm9 + vmovdqu %xmm9, 40(%rdi) + vextracti128 $0x01, %ymm9, %xmm8 + vmovss %xmm8, 56(%rdi) + vpmulhw 192(%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vpmovwb %zmm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlq $12, %ymm8, %ymm8 + vpermb %ymm8, %ymm6, %ymm9 + vmovdqu %xmm9, 60(%rdi) + vextracti128 $0x01, %ymm9, %xmm8 + vmovss %xmm8, 76(%rdi) + vpmulhw 256(%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vpmovwb %zmm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlq $12, %ymm8, %ymm8 + vpermb %ymm8, %ymm6, %ymm9 + vmovdqu %xmm9, 80(%rdi) + vextracti128 $0x01, %ymm9, %xmm8 + vmovss %xmm8, 96(%rdi) + vpmulhw 320(%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vpmovwb %zmm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlq $12, %ymm8, %ymm8 + vpermb %ymm8, %ymm6, %ymm9 + vmovdqu %xmm9, 100(%rdi) + vextracti128 $0x01, %ymm9, %xmm8 + vmovss %xmm8, 116(%rdi) + vpmulhw 384(%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vpmovwb %zmm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlq $12, %ymm8, %ymm8 + vpermb %ymm8, %ymm6, %ymm9 + vmovdqu %xmm9, 120(%rdi) + vextracti128 $0x01, %ymm9, %xmm8 + vmovss %xmm8, 136(%rdi) + vpmulhw 448(%rsi), %zmm0, %zmm7 + vpmulhrsw %zmm1, %zmm7, %zmm7 + vpandq %zmm2, %zmm7, %zmm7 + vpmovwb %zmm7, %ymm8 + vpmaddubsw %ymm3, %ymm8, %ymm8 + vpmaddwd %ymm4, %ymm8, %ymm8 + vpsllvd %ymm5, %ymm8, %ymm8 + vpsrlq $12, %ymm8, %ymm8 + vpermb %ymm8, %ymm6, %ymm9 + vmovdqu %xmm9, 140(%rdi) + vextracti128 $0x01, %ymm9, %xmm8 + vmovss %xmm8, 156(%rdi) + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_compress_5_avx512_vbmi,.-mlkem_compress_5_avx512_vbmi +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_compress_10_avx512_vbmi_shift: +.quad 0x0400000104000001,0x0400000104000001 +.quad 0x0400000104000001,0x0400000104000001 +.quad 0x0400000104000001,0x0400000104000001 +.quad 0x0400000104000001,0x0400000104000001 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_compress_10_avx512_vbmi_shlv: +.quad 0x000000000000000c,0x000000000000000c +.quad 0x000000000000000c,0x000000000000000c +.quad 0x000000000000000c,0x000000000000000c +.quad 0x000000000000000c,0x000000000000000c +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_compress_10_avx512_vbmi_gather: +.byte 0x00,0x01,0x02,0x03,0x04,0x08,0x09,0x0a +.byte 0x0b,0x0c,0x10,0x11,0x12,0x13,0x14,0x18 +.byte 0x19,0x1a,0x1b,0x1c,0x20,0x21,0x22,0x23 +.byte 0x24,0x28,0x29,0x2a,0x2b,0x2c,0x30,0x31 +.byte 0x32,0x33,0x34,0x38,0x39,0x3a,0x3b,0x3c +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +#ifndef __APPLE__ +.text +.globl mlkem_compress_10_avx512_vbmi +.type mlkem_compress_10_avx512_vbmi,@function +.align 16 +mlkem_compress_10_avx512_vbmi: +#else +.section __TEXT,__text +.globl _mlkem_compress_10_avx512_vbmi +.p2align 4 +_mlkem_compress_10_avx512_vbmi: +#endif /* __APPLE__ */ + movq $0x4ebf, %rax + vmovd %eax, %xmm0 + vpbroadcastw %xmm0, %zmm0 + movq $15, %rax + vmovd %eax, %xmm2 + vpbroadcastw %xmm2, %zmm2 + movq $0x1000, %rax + vmovd %eax, %xmm3 + vpbroadcastw %xmm3, %zmm3 + movq $0x3ff, %rax + vmovd %eax, %xmm4 + vpbroadcastw %xmm4, %zmm4 + vpsllw $3, %zmm0, %zmm1 + vmovdqu64 L_mlkem_compress_10_avx512_vbmi_shift(%rip), %zmm5 + vmovdqu64 L_mlkem_compress_10_avx512_vbmi_shlv(%rip), %zmm6 + vmovdqu64 L_mlkem_compress_10_avx512_vbmi_gather(%rip), %zmm7 +L_mlkem_compress_10_avx512_vbmi_start: + vmovdqu64 (%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %zmm5, %zmm8, %zmm11 + vpsllvd %zmm6, %zmm11, %zmm11 + vpsrlq $12, %zmm11, %zmm11 + vpermb %zmm11, %zmm7, %zmm12 + vmovdqu %ymm12, (%rdi) + vextracti32x4 $2, %zmm12, %xmm9 + vmovq %xmm9, 32(%rdi) + vmovdqu64 64(%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %zmm5, %zmm8, %zmm11 + vpsllvd %zmm6, %zmm11, %zmm11 + vpsrlq $12, %zmm11, %zmm11 + vpermb %zmm11, %zmm7, %zmm12 + vmovdqu %ymm12, 40(%rdi) + vextracti32x4 $2, %zmm12, %xmm9 + vmovq %xmm9, 72(%rdi) + vmovdqu64 128(%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %zmm5, %zmm8, %zmm11 + vpsllvd %zmm6, %zmm11, %zmm11 + vpsrlq $12, %zmm11, %zmm11 + vpermb %zmm11, %zmm7, %zmm12 + vmovdqu %ymm12, 80(%rdi) + vextracti32x4 $2, %zmm12, %xmm9 + vmovq %xmm9, 112(%rdi) + vmovdqu64 192(%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %zmm5, %zmm8, %zmm11 + vpsllvd %zmm6, %zmm11, %zmm11 + vpsrlq $12, %zmm11, %zmm11 + vpermb %zmm11, %zmm7, %zmm12 + vmovdqu %ymm12, 120(%rdi) + vextracti32x4 $2, %zmm12, %xmm9 + vmovq %xmm9, 152(%rdi) + vmovdqu64 256(%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %zmm5, %zmm8, %zmm11 + vpsllvd %zmm6, %zmm11, %zmm11 + vpsrlq $12, %zmm11, %zmm11 + vpermb %zmm11, %zmm7, %zmm12 + vmovdqu %ymm12, 160(%rdi) + vextracti32x4 $2, %zmm12, %xmm9 + vmovq %xmm9, 192(%rdi) + vmovdqu64 320(%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %zmm5, %zmm8, %zmm11 + vpsllvd %zmm6, %zmm11, %zmm11 + vpsrlq $12, %zmm11, %zmm11 + vpermb %zmm11, %zmm7, %zmm12 + vmovdqu %ymm12, 200(%rdi) + vextracti32x4 $2, %zmm12, %xmm9 + vmovq %xmm9, 232(%rdi) + vmovdqu64 384(%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %zmm5, %zmm8, %zmm11 + vpsllvd %zmm6, %zmm11, %zmm11 + vpsrlq $12, %zmm11, %zmm11 + vpermb %zmm11, %zmm7, %zmm12 + vmovdqu %ymm12, 240(%rdi) + vextracti32x4 $2, %zmm12, %xmm9 + vmovq %xmm9, 272(%rdi) + vmovdqu64 448(%rsi), %zmm8 + vpmullw %zmm1, %zmm8, %zmm9 + vpaddw %zmm2, %zmm8, %zmm10 + vpsllw $3, %zmm8, %zmm8 + vpmulhuw %zmm0, %zmm8, %zmm8 + vpsubw %zmm10, %zmm9, %zmm10 + vpandnq %zmm10, %zmm9, %zmm9 + vpsrlw $15, %zmm9, %zmm9 + vpsubw %zmm9, %zmm8, %zmm8 + vpmulhrsw %zmm3, %zmm8, %zmm8 + vpandq %zmm4, %zmm8, %zmm8 + vpmaddwd %zmm5, %zmm8, %zmm11 + vpsllvd %zmm6, %zmm11, %zmm11 + vpsrlq $12, %zmm11, %zmm11 + vpermb %zmm11, %zmm7, %zmm12 + vmovdqu %ymm12, 280(%rdi) + vextracti32x4 $2, %zmm12, %xmm9 + vmovq %xmm9, 312(%rdi) + addq $0x140, %rdi + addq $0x200, %rsi + subl $0x01, %edx + jg L_mlkem_compress_10_avx512_vbmi_start + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_compress_10_avx512_vbmi,.-mlkem_compress_10_avx512_vbmi +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_10_avx512_vbmi_mask: +.long 0x7fe01ff8,0x7fe01ff8,0x7fe01ff8,0x7fe01ff8 +.long 0x7fe01ff8,0x7fe01ff8,0x7fe01ff8,0x7fe01ff8 +.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_avx512_vbmi_sllv: +.quad 0x0000000000000004,0x0000000000000004 +.quad 0x0000000000000004,0x0000000000000004 +.quad 0x0000000000000004,0x0000000000000004 +.quad 0x0000000000000004,0x0000000000000004 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_10_avx512_vbmi_q: +.long 0x0d013404,0x0d013404,0x0d013404,0x0d013404 +.long 0x0d013404,0x0d013404,0x0d013404,0x0d013404 +.long 0x0d013404,0x0d013404,0x0d013404,0x0d013404 +.long 0x0d013404,0x0d013404,0x0d013404,0x0d013404 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_10_avx512_vbmi_lo: +.byte 0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04 +.byte 0x05,0x06,0x06,0x07,0x07,0x08,0x08,0x09 +.byte 0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e +.byte 0x0f,0x10,0x10,0x11,0x11,0x12,0x12,0x13 +.byte 0x14,0x15,0x15,0x16,0x16,0x17,0x17,0x18 +.byte 0x19,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1d +.byte 0x1e,0x1f,0x1f,0x20,0x20,0x21,0x21,0x22 +.byte 0x23,0x24,0x24,0x25,0x25,0x26,0x26,0x27 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_10_avx512_vbmi_hi: +.byte 0x18,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1c +.byte 0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x21 +.byte 0x22,0x23,0x23,0x24,0x24,0x25,0x25,0x26 +.byte 0x27,0x28,0x28,0x29,0x29,0x2a,0x2a,0x2b +.byte 0x2c,0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x30 +.byte 0x31,0x32,0x32,0x33,0x33,0x34,0x34,0x35 +.byte 0x36,0x37,0x37,0x38,0x38,0x39,0x39,0x3a +.byte 0x3b,0x3c,0x3c,0x3d,0x3d,0x3e,0x3e,0x3f +#ifndef __APPLE__ +.text +.globl mlkem_decompress_10_avx512_vbmi +.type mlkem_decompress_10_avx512_vbmi,@function +.align 16 +mlkem_decompress_10_avx512_vbmi: +#else +.section __TEXT,__text +.globl _mlkem_decompress_10_avx512_vbmi +.p2align 4 +_mlkem_decompress_10_avx512_vbmi: +#endif /* __APPLE__ */ + vmovdqu64 L_mlkem_decompress_10_avx512_vbmi_mask(%rip), %zmm0 + vmovdqu64 L_mlkem_decompress_10_avx512_vbmi_q(%rip), %zmm1 + vmovdqu64 L_mlkem_decompress_10_avx512_vbmi_sllv(%rip), %zmm2 + vmovdqu64 L_mlkem_decompress_10_avx512_vbmi_lo(%rip), %zmm3 + vmovdqu64 L_mlkem_decompress_10_avx512_vbmi_hi(%rip), %zmm4 +L_mlkem_decompress_10_avx512_vbmi_start: + vpermb (%rsi), %zmm3, %zmm5 + vpsllvd %zmm2, %zmm5, %zmm5 + vpsrlw $0x01, %zmm5, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpmulhrsw %zmm1, %zmm5, %zmm5 + vmovdqu64 %zmm5, (%rdi) + vpermb 40(%rsi), %zmm3, %zmm5 + vpsllvd %zmm2, %zmm5, %zmm5 + vpsrlw $0x01, %zmm5, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpmulhrsw %zmm1, %zmm5, %zmm5 + vmovdqu64 %zmm5, 64(%rdi) + vpermb 80(%rsi), %zmm3, %zmm5 + vpsllvd %zmm2, %zmm5, %zmm5 + vpsrlw $0x01, %zmm5, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpmulhrsw %zmm1, %zmm5, %zmm5 + vmovdqu64 %zmm5, 128(%rdi) + vpermb 120(%rsi), %zmm3, %zmm5 + vpsllvd %zmm2, %zmm5, %zmm5 + vpsrlw $0x01, %zmm5, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpmulhrsw %zmm1, %zmm5, %zmm5 + vmovdqu64 %zmm5, 192(%rdi) + vpermb 160(%rsi), %zmm3, %zmm5 + vpsllvd %zmm2, %zmm5, %zmm5 + vpsrlw $0x01, %zmm5, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpmulhrsw %zmm1, %zmm5, %zmm5 + vmovdqu64 %zmm5, 256(%rdi) + vpermb 200(%rsi), %zmm3, %zmm5 + vpsllvd %zmm2, %zmm5, %zmm5 + vpsrlw $0x01, %zmm5, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpmulhrsw %zmm1, %zmm5, %zmm5 + vmovdqu64 %zmm5, 320(%rdi) + vpermb 240(%rsi), %zmm3, %zmm5 + vpsllvd %zmm2, %zmm5, %zmm5 + vpsrlw $0x01, %zmm5, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpmulhrsw %zmm1, %zmm5, %zmm5 + vmovdqu64 %zmm5, 384(%rdi) + vpermb 256(%rsi), %zmm4, %zmm5 + vpsllvd %zmm2, %zmm5, %zmm5 + vpsrlw $0x01, %zmm5, %zmm5 + vpandq %zmm0, %zmm5, %zmm5 + vpmulhrsw %zmm1, %zmm5, %zmm5 + vmovdqu64 %zmm5, 448(%rdi) + addq $0x140, %rsi + addq $0x200, %rdi + subl $0x01, %edx + jg L_mlkem_decompress_10_avx512_vbmi_start + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_decompress_10_avx512_vbmi,.-mlkem_decompress_10_avx512_vbmi +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_11_avx512_vbmi_q: +.short 0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01 +.short 0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01 +.short 0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01 +.short 0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_11_avx512_vbmi_srlvd: +.long 0x00000000,0x00000001,0x00000000,0x00000000 +.long 0x00000000,0x00000001,0x00000000,0x00000000 +.long 0x00000000,0x00000001,0x00000000,0x00000000 +.long 0x00000000,0x00000001,0x00000000,0x00000000 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 32 +#else +.p2align 5 +#endif /* __APPLE__ */ +L_mlkem_decompress_11_avx512_vbmi_srlvq: +.quad 0x0000000000000000,0x0000000000000002 +.quad 0x0000000000000000,0x0000000000000002 +.quad 0x0000000000000000,0x0000000000000002 +.quad 0x0000000000000000,0x0000000000000002 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_11_avx512_vbmi_shift: +.short 0x0020,0x0004,0x0001,0x0020,0x0008,0x0001,0x0020,0x0004 +.short 0x0020,0x0004,0x0001,0x0020,0x0008,0x0001,0x0020,0x0004 +.short 0x0020,0x0004,0x0001,0x0020,0x0008,0x0001,0x0020,0x0004 +.short 0x0020,0x0004,0x0001,0x0020,0x0008,0x0001,0x0020,0x0004 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_11_avx512_vbmi_mask: +.short 0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0 +.short 0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0 +.short 0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0 +.short 0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0,0x7ff0 +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_11_avx512_vbmi_lo: +.byte 0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05 +.byte 0x05,0x06,0x06,0x07,0x08,0x09,0x09,0x0a +.byte 0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0f,0x10 +.byte 0x10,0x11,0x11,0x12,0x13,0x14,0x14,0x15 +.byte 0x16,0x17,0x17,0x18,0x18,0x19,0x1a,0x1b +.byte 0x1b,0x1c,0x1c,0x1d,0x1e,0x1f,0x1f,0x20 +.byte 0x21,0x22,0x22,0x23,0x23,0x24,0x25,0x26 +.byte 0x26,0x27,0x27,0x28,0x29,0x2a,0x2a,0x2b +#ifndef __APPLE__ +.data +#else +.section __DATA,__data +#endif /* __APPLE__ */ +#ifndef __APPLE__ +.align 16 +#else +.p2align 4 +#endif /* __APPLE__ */ +L_mlkem_decompress_11_avx512_vbmi_hi: +.byte 0x14,0x15,0x15,0x16,0x16,0x17,0x18,0x19 +.byte 0x19,0x1a,0x1a,0x1b,0x1c,0x1d,0x1d,0x1e +.byte 0x1f,0x20,0x20,0x21,0x21,0x22,0x23,0x24 +.byte 0x24,0x25,0x25,0x26,0x27,0x28,0x28,0x29 +.byte 0x2a,0x2b,0x2b,0x2c,0x2c,0x2d,0x2e,0x2f +.byte 0x2f,0x30,0x30,0x31,0x32,0x33,0x33,0x34 +.byte 0x35,0x36,0x36,0x37,0x37,0x38,0x39,0x3a +.byte 0x3a,0x3b,0x3b,0x3c,0x3d,0x3e,0x3e,0x3f +#ifndef __APPLE__ +.text +.globl mlkem_decompress_11_avx512_vbmi +.type mlkem_decompress_11_avx512_vbmi,@function +.align 16 +mlkem_decompress_11_avx512_vbmi: +#else +.section __TEXT,__text +.globl _mlkem_decompress_11_avx512_vbmi +.p2align 4 +_mlkem_decompress_11_avx512_vbmi: +#endif /* __APPLE__ */ + vmovdqu64 L_mlkem_decompress_11_avx512_vbmi_q(%rip), %zmm0 + vmovdqu64 L_mlkem_decompress_11_avx512_vbmi_srlvd(%rip), %zmm1 + vmovdqu64 L_mlkem_decompress_11_avx512_vbmi_srlvq(%rip), %zmm2 + vmovdqu64 L_mlkem_decompress_11_avx512_vbmi_shift(%rip), %zmm3 + vmovdqu64 L_mlkem_decompress_11_avx512_vbmi_mask(%rip), %zmm4 + vmovdqu64 L_mlkem_decompress_11_avx512_vbmi_lo(%rip), %zmm5 + vmovdqu64 L_mlkem_decompress_11_avx512_vbmi_hi(%rip), %zmm6 +L_mlkem_decompress_11_avx512_vbmi_start: + vpermb (%rsi), %zmm5, %zmm7 + vpsrlvd %zmm1, %zmm7, %zmm7 + vpsrlvq %zmm2, %zmm7, %zmm7 + vpmullw %zmm3, %zmm7, %zmm7 + vpsrlw $0x01, %zmm7, %zmm7 + vpandq %zmm4, %zmm7, %zmm7 + vpmulhrsw %zmm0, %zmm7, %zmm7 + vmovdqu64 %zmm7, (%rdi) + vpermb 44(%rsi), %zmm5, %zmm7 + vpsrlvd %zmm1, %zmm7, %zmm7 + vpsrlvq %zmm2, %zmm7, %zmm7 + vpmullw %zmm3, %zmm7, %zmm7 + vpsrlw $0x01, %zmm7, %zmm7 + vpandq %zmm4, %zmm7, %zmm7 + vpmulhrsw %zmm0, %zmm7, %zmm7 + vmovdqu64 %zmm7, 64(%rdi) + vpermb 88(%rsi), %zmm5, %zmm7 + vpsrlvd %zmm1, %zmm7, %zmm7 + vpsrlvq %zmm2, %zmm7, %zmm7 + vpmullw %zmm3, %zmm7, %zmm7 + vpsrlw $0x01, %zmm7, %zmm7 + vpandq %zmm4, %zmm7, %zmm7 + vpmulhrsw %zmm0, %zmm7, %zmm7 + vmovdqu64 %zmm7, 128(%rdi) + vpermb 132(%rsi), %zmm5, %zmm7 + vpsrlvd %zmm1, %zmm7, %zmm7 + vpsrlvq %zmm2, %zmm7, %zmm7 + vpmullw %zmm3, %zmm7, %zmm7 + vpsrlw $0x01, %zmm7, %zmm7 + vpandq %zmm4, %zmm7, %zmm7 + vpmulhrsw %zmm0, %zmm7, %zmm7 + vmovdqu64 %zmm7, 192(%rdi) + vpermb 176(%rsi), %zmm5, %zmm7 + vpsrlvd %zmm1, %zmm7, %zmm7 + vpsrlvq %zmm2, %zmm7, %zmm7 + vpmullw %zmm3, %zmm7, %zmm7 + vpsrlw $0x01, %zmm7, %zmm7 + vpandq %zmm4, %zmm7, %zmm7 + vpmulhrsw %zmm0, %zmm7, %zmm7 + vmovdqu64 %zmm7, 256(%rdi) + vpermb 220(%rsi), %zmm5, %zmm7 + vpsrlvd %zmm1, %zmm7, %zmm7 + vpsrlvq %zmm2, %zmm7, %zmm7 + vpmullw %zmm3, %zmm7, %zmm7 + vpsrlw $0x01, %zmm7, %zmm7 + vpandq %zmm4, %zmm7, %zmm7 + vpmulhrsw %zmm0, %zmm7, %zmm7 + vmovdqu64 %zmm7, 320(%rdi) + vpermb 264(%rsi), %zmm5, %zmm7 + vpsrlvd %zmm1, %zmm7, %zmm7 + vpsrlvq %zmm2, %zmm7, %zmm7 + vpmullw %zmm3, %zmm7, %zmm7 + vpsrlw $0x01, %zmm7, %zmm7 + vpandq %zmm4, %zmm7, %zmm7 + vpmulhrsw %zmm0, %zmm7, %zmm7 + vmovdqu64 %zmm7, 384(%rdi) + vpermb 288(%rsi), %zmm6, %zmm7 + vpsrlvd %zmm1, %zmm7, %zmm7 + vpsrlvq %zmm2, %zmm7, %zmm7 + vpmullw %zmm3, %zmm7, %zmm7 + vpsrlw $0x01, %zmm7, %zmm7 + vpandq %zmm4, %zmm7, %zmm7 + vpmulhrsw %zmm0, %zmm7, %zmm7 + vmovdqu64 %zmm7, 448(%rdi) + addq $0x160, %rsi + addq $0x200, %rdi + subl $0x01, %edx + jg L_mlkem_decompress_11_avx512_vbmi_start + vzeroupper + repz retq +#ifndef __APPLE__ +.size mlkem_decompress_11_avx512_vbmi,.-mlkem_decompress_11_avx512_vbmi +#endif /* __APPLE__ */ +#endif /* HAVE_INTEL_AVX512_VBMI */ +#endif /* WOLFSSL_HAVE_MLKEM */ #if defined(__linux__) && defined(__ELF__) .section .note.GNU-stack,"",%progbits diff --git a/wolfcrypt/src/wc_mlkem_asm.asm b/wolfcrypt/src/wc_mlkem_asm.asm index 62743aa846..100258215f 100644 --- a/wolfcrypt/src/wc_mlkem_asm.asm +++ b/wolfcrypt/src/wc_mlkem_asm.asm @@ -10698,14 +10698,14 @@ mlkem_decapsulate_avx2 ENDP _TEXT ENDS _TEXT SEGMENT READONLY PARA mlkem_csubq_avx2 PROC - sub rsp, 112 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 + sub rsp, 120 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 vmovdqu ymm12, YMMWORD PTR mlkem_q vmovdqu ymm0, YMMWORD PTR [rcx] vmovdqu ymm1, YMMWORD PTR [rcx+32] @@ -10804,14 +10804,14 @@ mlkem_csubq_avx2 PROC vmovdqu YMMWORD PTR [rcx+448], ymm6 vmovdqu YMMWORD PTR [rcx+480], ymm7 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - add rsp, 112 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + add rsp, 120 ret mlkem_csubq_avx2 ENDP _TEXT ENDS @@ -10982,11 +10982,11 @@ mlkem_rej_uniform_n_avx2 PROC push rsi push rbp mov r10, rcx - sub rsp, 64 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 + sub rsp, 72 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 mov eax, edx vmovdqu ymm6, YMMWORD PTR L_mlkem_rej_q vmovdqu ymm7, YMMWORD PTR L_mlkem_rej_ones @@ -11573,11 +11573,11 @@ L_mlkem_rej_uniform_0_avx2_rej_large_3: L_mlkem_rej_uniform_n_avx2_done_64: vzeroupper sub eax, edx - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - add rsp, 64 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + add rsp, 72 pop rbp pop rsi pop rdi @@ -11600,11 +11600,11 @@ mlkem_rej_uniform_avx2 PROC push rsi push rbp mov r10, rcx - sub rsp, 64 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 + sub rsp, 72 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 mov eax, edx cmp edx, 0 je L_mlkem_rej_uniform_avx2_done_64 @@ -11898,11 +11898,11 @@ L_mlkem_rej_uniform_avx2_rej_large_3: L_mlkem_rej_uniform_avx2_done_64: vzeroupper sub eax, edx - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - add rsp, 64 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + add rsp, 72 pop rbp pop rsi pop rdi @@ -11952,15 +11952,15 @@ ptr_L_mlkem_shuff QWORD L_mlkem_shuff _DATA ENDS _TEXT SEGMENT READONLY PARA mlkem_cbd_eta3_avx2 PROC - sub rsp, 128 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 + sub rsp, 136 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 vmovdqu ymm8, YMMWORD PTR L_mlkem_mask_249 vmovdqu ymm9, YMMWORD PTR L_mlkem_mask_6db vmovdqu ymm10, YMMWORD PTR L_mlkem_mask_07 @@ -12208,15 +12208,15 @@ mlkem_cbd_eta3_avx2 PROC vmovdqu YMMWORD PTR [rcx+448], ymm1 vmovdqu YMMWORD PTR [rcx+480], ymm3 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - add rsp, 128 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + add rsp, 136 ret mlkem_cbd_eta3_avx2 ENDP _TEXT ENDS @@ -12246,13 +12246,13 @@ ptr_L_mlkem_mask_0f QWORD L_mlkem_mask_0f _DATA ENDS _TEXT SEGMENT READONLY PARA mlkem_cbd_eta2_avx2 PROC - sub rsp, 96 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 + sub rsp, 104 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 vmovdqu ymm8, YMMWORD PTR L_mlkem_mask_55 vmovdqu ymm9, YMMWORD PTR L_mlkem_mask_33 vmovdqu ymm10, YMMWORD PTR L_mlkem_mask_03 @@ -12366,13 +12366,13 @@ mlkem_cbd_eta2_avx2 PROC vmovdqu YMMWORD PTR [rcx+448], ymm3 vmovdqu YMMWORD PTR [rcx+480], ymm7 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - add rsp, 96 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + add rsp, 104 ret mlkem_cbd_eta2_avx2 ENDP _TEXT ENDS @@ -12422,15 +12422,15 @@ ptr_L_mlkem_compress_10_avx2_shift12 QWORD L_mlkem_compress_10_avx2_shift12 _DATA ENDS _TEXT SEGMENT READONLY PARA mlkem_compress_10_avx2 PROC - sub rsp, 128 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 + sub rsp, 136 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 vmovdqu ymm0, YMMWORD PTR [rdx] vmovdqu ymm9, YMMWORD PTR L_mlkem_compress_10_avx2_mask vmovdqu ymm8, YMMWORD PTR L_mlkem_compress_10_avx2_shift @@ -12750,15 +12750,15 @@ L_mlkem_compress_10_avx2_start: sub r8d, 1 jg L_mlkem_compress_10_avx2_start vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - add rsp, 128 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + add rsp, 136 ret mlkem_compress_10_avx2 ENDP _TEXT ENDS @@ -12790,9 +12790,9 @@ ptr_L_mlkem_decompress_10_avx2_shuf QWORD L_mlkem_decompress_10_avx2_shuf _DATA ENDS _TEXT SEGMENT READONLY PARA mlkem_decompress_10_avx2 PROC - sub rsp, 32 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 + sub rsp, 40 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 vmovdqu ymm4, YMMWORD PTR L_mlkem_decompress_10_avx2_mask vmovdqu ymm5, YMMWORD PTR L_mlkem_decompress_10_avx2_q vmovdqu ymm6, YMMWORD PTR L_mlkem_decompress_10_avx2_shuf @@ -12915,9 +12915,9 @@ L_mlkem_decompress_10_avx2_start: sub r8d, 1 jg L_mlkem_decompress_10_avx2_start vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - add rsp, 32 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + add rsp, 40 ret mlkem_decompress_10_avx2 ENDP _TEXT ENDS @@ -12973,16 +12973,16 @@ ptr_L_mlkem_compress_11_avx2_shuf QWORD L_mlkem_compress_11_avx2_shuf _DATA ENDS _TEXT SEGMENT READONLY PARA mlkem_compress_11_avx2 PROC - sub rsp, 144 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 - vmovdqu OWORD PTR [rsp+128], xmm14 + sub rsp, 152 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 vmovdqu ymm0, YMMWORD PTR [rdx] vmovdqu ymm7, YMMWORD PTR L_mlkem_compress_11_avx2_v vmovdqu ymm8, YMMWORD PTR L_mlkem_compress_11_avx2_off @@ -13351,16 +13351,16 @@ L_mlkem_compress_11_avx2_start: sub r8d, 1 jg L_mlkem_compress_11_avx2_start vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - vmovdqu xmm14, OWORD PTR [rsp+128] - add rsp, 144 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + add rsp, 152 ret mlkem_compress_11_avx2 ENDP _TEXT ENDS @@ -13404,11 +13404,11 @@ ptr_L_mlkem_decompress_11_avx2_mask QWORD L_mlkem_decompress_11_avx2_mask _DATA ENDS _TEXT SEGMENT READONLY PARA mlkem_decompress_11_avx2 PROC - sub rsp, 64 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 + sub rsp, 72 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 vmovdqu ymm4, YMMWORD PTR L_mlkem_decompress_11_avx2_q vmovdqu ymm5, YMMWORD PTR L_mlkem_decompress_11_avx2_shuf vmovdqu ymm6, YMMWORD PTR L_mlkem_decompress_11_avx2_sllv @@ -13565,11 +13565,11 @@ L_mlkem_decompress_11_avx2_start: sub r8d, 1 jg L_mlkem_decompress_11_avx2_start vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - add rsp, 64 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + add rsp, 72 ret mlkem_decompress_11_avx2 ENDP _TEXT ENDS @@ -13605,14 +13605,14 @@ ptr_L_mlkem_compress_4_avx2_shift12 QWORD L_mlkem_compress_4_avx2_shift12 _DATA ENDS _TEXT SEGMENT READONLY PARA mlkem_compress_4_avx2 PROC - sub rsp, 112 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 + sub rsp, 120 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 vmovdqu ymm8, YMMWORD PTR L_mlkem_compress_4_avx2_mask vmovdqu ymm9, YMMWORD PTR L_mlkem_compress_4_avx2_shift vmovdqu ymm10, YMMWORD PTR L_mlkem_compress_4_avx2_perm @@ -13695,14 +13695,14 @@ mlkem_compress_4_avx2 PROC vmovdqu YMMWORD PTR [rcx+64], ymm0 vmovdqu YMMWORD PTR [rcx+96], ymm4 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - add rsp, 112 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + add rsp, 120 ret mlkem_compress_4_avx2 ENDP _TEXT ENDS @@ -13734,9 +13734,9 @@ ptr_L_mlkem_decompress_4_avx2_shuf QWORD L_mlkem_decompress_4_avx2_shuf _DATA ENDS _TEXT SEGMENT READONLY PARA mlkem_decompress_4_avx2 PROC - sub rsp, 32 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 + sub rsp, 40 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 vmovdqu ymm4, YMMWORD PTR L_mlkem_decompress_4_avx2_mask vmovdqu ymm5, YMMWORD PTR L_mlkem_decompress_4_avx2_shift vmovdqu ymm6, YMMWORD PTR L_mlkem_decompress_4_avx2_shuf @@ -13838,9 +13838,9 @@ mlkem_decompress_4_avx2 PROC vmovdqu YMMWORD PTR [rcx+448], ymm2 vmovdqu YMMWORD PTR [rcx+480], ymm3 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - add rsp, 32 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + add rsp, 40 ret mlkem_decompress_4_avx2 ENDP _TEXT ENDS @@ -13890,10 +13890,10 @@ ptr_L_mlkem_compress_5_avx2_shuffle QWORD L_mlkem_compress_5_avx2_shuffle _DATA ENDS _TEXT SEGMENT READONLY PARA mlkem_compress_5_avx2 PROC - sub rsp, 48 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 + sub rsp, 56 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 vmovdqu ymm0, YMMWORD PTR [rdx] vmovdqu ymm2, YMMWORD PTR L_mlkem_compress_5_avx2_v vmovdqu ymm3, YMMWORD PTR L_mlkem_compress_5_avx2_shift @@ -14031,10 +14031,10 @@ mlkem_compress_5_avx2 PROC vmovdqu OWORD PTR [rcx+140], xmm0 movss DWORD PTR [rcx+156], xmm1 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - add rsp, 48 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + add rsp, 56 ret mlkem_compress_5_avx2 ENDP _TEXT ENDS @@ -14066,6 +14066,7 @@ ptr_L_mlkem_decompress_5_avx2_shift QWORD L_mlkem_decompress_5_avx2_shift _DATA ENDS _TEXT SEGMENT READONLY PARA mlkem_decompress_5_avx2 PROC + sub rsp, 8 vmovdqu ymm1, YMMWORD PTR L_mlkem_decompress_5_avx2_q vmovdqu ymm2, YMMWORD PTR L_mlkem_decompress_5_avx2_shuf vmovdqu ymm3, YMMWORD PTR L_mlkem_decompress_5_avx2_mask @@ -14170,6 +14171,7 @@ mlkem_decompress_5_avx2 PROC vpmulhrsw ymm0, ymm0, ymm1 vmovdqu YMMWORD PTR [rcx+480], ymm0 vzeroupper + add rsp, 8 ret mlkem_decompress_5_avx2 ENDP _TEXT ENDS @@ -14195,13 +14197,13 @@ ptr_L_mlkem_from_msg_avx2_hqs QWORD L_mlkem_from_msg_avx2_hqs _DATA ENDS _TEXT SEGMENT READONLY PARA mlkem_from_msg_avx2 PROC - sub rsp, 96 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 + sub rsp, 104 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 vmovdqu ymm0, YMMWORD PTR [rdx] vmovdqu ymm9, YMMWORD PTR L_mlkem_from_msg_avx2_shift vmovdqu ymm10, YMMWORD PTR L_mlkem_from_msg_avx2_shuf @@ -14311,13 +14313,13 @@ mlkem_from_msg_avx2 PROC vmovdqu YMMWORD PTR [rcx+448], ymm3 vmovdqu YMMWORD PTR [rcx+480], ymm4 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - add rsp, 96 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + add rsp, 104 ret mlkem_from_msg_avx2 ENDP _TEXT ENDS @@ -14335,11 +14337,11 @@ ptr_L_mlkem_to_msg_avx2_hhqs QWORD L_mlkem_to_msg_avx2_hhqs _DATA ENDS _TEXT SEGMENT READONLY PARA mlkem_to_msg_avx2 PROC - sub rsp, 64 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 + sub rsp, 72 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 vmovdqu ymm8, YMMWORD PTR L_mlkem_to_msg_avx2_hqs vmovdqu ymm9, YMMWORD PTR L_mlkem_to_msg_avx2_hhqs vpsubw ymm0, ymm8, [rdx] @@ -14439,11 +14441,11 @@ mlkem_to_msg_avx2 PROC mov DWORD PTR [rcx+24], eax mov DWORD PTR [rcx+28], r8d vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - add rsp, 64 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + add rsp, 72 ret mlkem_to_msg_avx2 ENDP _TEXT ENDS @@ -14463,15 +14465,15 @@ ptr_L_mlkem_from_bytes_avx2_mask QWORD L_mlkem_from_bytes_avx2_mask _DATA ENDS _TEXT SEGMENT READONLY PARA mlkem_from_bytes_avx2 PROC - sub rsp, 128 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 + sub rsp, 136 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 vmovdqu ymm0, YMMWORD PTR [rdx] vmovdqu ymm12, YMMWORD PTR L_mlkem_from_bytes_avx2_shuf vmovdqu ymm13, YMMWORD PTR L_mlkem_from_bytes_avx2_mask @@ -14616,15 +14618,15 @@ mlkem_from_bytes_avx2 PROC vmovdqu YMMWORD PTR [rcx+448], ymm6 vmovdqu YMMWORD PTR [rcx+480], ymm7 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - add rsp, 128 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + add rsp, 136 ret mlkem_from_bytes_avx2 ENDP _TEXT ENDS @@ -14650,17 +14652,17 @@ ptr_L_mlkem_to_bytes_avx2_perm QWORD L_mlkem_to_bytes_avx2_perm _DATA ENDS _TEXT SEGMENT READONLY PARA mlkem_to_bytes_avx2 PROC - sub rsp, 160 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 - vmovdqu OWORD PTR [rsp+128], xmm14 - vmovdqu OWORD PTR [rsp+144], xmm15 + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 vmovdqu ymm12, YMMWORD PTR mlkem_q vmovdqu ymm13, YMMWORD PTR L_mlkem_to_bytes_avx2_mask vmovdqu ymm14, YMMWORD PTR L_mlkem_to_bytes_avx2_shuf @@ -14886,22 +14888,23 @@ mlkem_to_bytes_avx2 PROC vmovdqu YMMWORD PTR [rcx+320], ymm6 vmovdqu YMMWORD PTR [rcx+352], ymm7 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - vmovdqu xmm14, OWORD PTR [rsp+128] - vmovdqu xmm15, OWORD PTR [rsp+144] - add rsp, 160 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 ret mlkem_to_bytes_avx2 ENDP _TEXT ENDS _TEXT SEGMENT READONLY PARA mlkem_cmp_avx2 PROC + sub rsp, 8 vpxor ymm2, ymm2, ymm2 vpxor ymm3, ymm3, ymm3 mov r9d, 0 @@ -15063,6 +15066,7 @@ L_mlkem_cmp_avx2_done: cmovz eax, r9d cmovnz eax, r10d vzeroupper + add rsp, 8 ret mlkem_cmp_avx2 ENDP _TEXT ENDS @@ -15071,17 +15075,17 @@ mlkem_redistribute_21_rand_avx2 PROC push r12 push r13 mov rax, QWORD PTR [rsp+56] - sub rsp, 160 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 - vmovdqu OWORD PTR [rsp+128], xmm14 - vmovdqu OWORD PTR [rsp+144], xmm15 + sub rsp, 168 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu OWORD PTR [rsp+136], xmm14 + vmovdqu OWORD PTR [rsp+152], xmm15 vmovdqu ymm0, YMMWORD PTR [rcx] vmovdqu ymm1, YMMWORD PTR [rcx+32] vmovdqu ymm2, YMMWORD PTR [rcx+64] @@ -15171,17 +15175,17 @@ mlkem_redistribute_21_rand_avx2 PROC vmovdqu YMMWORD PTR [rax+128], ymm7 mov QWORD PTR [rax+160], r13 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - vmovdqu xmm14, OWORD PTR [rsp+128] - vmovdqu xmm15, OWORD PTR [rsp+144] - add rsp, 160 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + vmovdqu xmm14, OWORD PTR [rsp+136] + vmovdqu xmm15, OWORD PTR [rsp+152] + add rsp, 168 pop r13 pop r12 ret @@ -15192,13 +15196,13 @@ mlkem_redistribute_17_rand_avx2 PROC push r12 push r13 mov rax, QWORD PTR [rsp+56] - sub rsp, 96 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 + sub rsp, 104 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 vmovdqu ymm0, YMMWORD PTR [rcx] vmovdqu ymm1, YMMWORD PTR [rcx+32] vmovdqu ymm2, YMMWORD PTR [rcx+64] @@ -15272,13 +15276,13 @@ mlkem_redistribute_17_rand_avx2 PROC vmovdqu YMMWORD PTR [rax+96], ymm7 mov QWORD PTR [rax+128], r13 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - add rsp, 96 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + add rsp, 104 pop r13 pop r12 ret @@ -15289,13 +15293,13 @@ mlkem_redistribute_16_rand_avx2 PROC push r12 push r13 mov rax, QWORD PTR [rsp+56] - sub rsp, 96 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 + sub rsp, 104 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 vmovdqu ymm0, YMMWORD PTR [rcx] vmovdqu ymm1, YMMWORD PTR [rcx+32] vmovdqu ymm2, YMMWORD PTR [rcx+64] @@ -15361,13 +15365,13 @@ mlkem_redistribute_16_rand_avx2 PROC vmovdqu YMMWORD PTR [rax+64], ymm3 vmovdqu YMMWORD PTR [rax+96], ymm7 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - add rsp, 96 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + add rsp, 104 pop r13 pop r12 ret @@ -15378,13 +15382,13 @@ mlkem_redistribute_8_rand_avx2 PROC push r12 push r13 mov rax, QWORD PTR [rsp+56] - sub rsp, 96 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 + sub rsp, 104 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 vmovdqu ymm0, YMMWORD PTR [rcx] vmovdqu ymm1, YMMWORD PTR [rcx+32] vmovdqu ymm2, YMMWORD PTR [rcx+64] @@ -15418,13 +15422,13 @@ mlkem_redistribute_8_rand_avx2 PROC vmovdqu YMMWORD PTR [rax], ymm3 vmovdqu YMMWORD PTR [rax+32], ymm7 vzeroupper - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - add rsp, 96 + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + add rsp, 104 pop r13 pop r12 ret @@ -15432,4 +15436,19626 @@ mlkem_redistribute_8_rand_avx2 ENDP _TEXT ENDS ENDIF ENDIF +IFDEF WOLFSSL_HAVE_MLKEM +IFNDEF NO_AVX512_SUPPORT +IFNDEF HAVE_INTEL_AVX512 +HAVE_INTEL_AVX512 = 1 +ENDIF +ENDIF +IFDEF HAVE_INTEL_AVX512 +_DATA SEGMENT +ALIGN 16 +L_mlkem_avx512_zetas WORD 0a0bh, 0a0bh, 0a0bh, 0a0bh, 0a0bh, 0a0bh, 0a0bh, 0a0bh + WORD 0a0bh, 0a0bh, 0a0bh, 0a0bh, 0a0bh, 0a0bh, 0a0bh, 0a0bh + WORD 7b0bh, 7b0bh, 7b0bh, 7b0bh, 7b0bh, 7b0bh, 7b0bh, 7b0bh + WORD 7b0bh, 7b0bh, 7b0bh, 7b0bh, 7b0bh, 7b0bh, 7b0bh, 7b0bh + WORD 0b9ah, 0b9ah, 0b9ah, 0b9ah, 0b9ah, 0b9ah, 0b9ah, 0b9ah + WORD 0b9ah, 0b9ah, 0b9ah, 0b9ah, 0b9ah, 0b9ah, 0b9ah, 0b9ah + WORD 399ah, 399ah, 399ah, 399ah, 399ah, 399ah, 399ah, 399ah + WORD 399ah, 399ah, 399ah, 399ah, 399ah, 399ah, 399ah, 399ah + WORD 05d5h, 05d5h, 05d5h, 05d5h, 05d5h, 05d5h, 05d5h, 05d5h + WORD 05d5h, 05d5h, 05d5h, 05d5h, 05d5h, 05d5h, 05d5h, 05d5h + WORD 34d5h, 34d5h, 34d5h, 34d5h, 34d5h, 34d5h, 34d5h, 34d5h + WORD 34d5h, 34d5h, 34d5h, 34d5h, 34d5h, 34d5h, 34d5h, 34d5h + WORD 058eh, 058eh, 058eh, 058eh, 058eh, 058eh, 058eh, 058eh + WORD 058eh, 058eh, 058eh, 058eh, 058eh, 058eh, 058eh, 058eh + WORD 0cf8eh, 0cf8eh, 0cf8eh, 0cf8eh, 0cf8eh, 0cf8eh, 0cf8eh, 0cf8eh + WORD 0cf8eh, 0cf8eh, 0cf8eh, 0cf8eh, 0cf8eh, 0cf8eh, 0cf8eh, 0cf8eh + WORD 0c56h, 0c56h, 0c56h, 0c56h, 0c56h, 0c56h, 0c56h, 0c56h + WORD 0c56h, 0c56h, 0c56h, 0c56h, 0c56h, 0c56h, 0c56h, 0c56h + WORD 0ae56h, 0ae56h, 0ae56h, 0ae56h, 0ae56h, 0ae56h, 0ae56h, 0ae56h + WORD 0ae56h, 0ae56h, 0ae56h, 0ae56h, 0ae56h, 0ae56h, 0ae56h, 0ae56h + WORD 026eh, 026eh, 026eh, 026eh, 026eh, 026eh, 026eh, 026eh + WORD 026eh, 026eh, 026eh, 026eh, 026eh, 026eh, 026eh, 026eh + WORD 6c6eh, 6c6eh, 6c6eh, 6c6eh, 6c6eh, 6c6eh, 6c6eh, 6c6eh + WORD 6c6eh, 6c6eh, 6c6eh, 6c6eh, 6c6eh, 6c6eh, 6c6eh, 6c6eh + WORD 0629h, 0629h, 0629h, 0629h, 0629h, 0629h, 0629h, 0629h + WORD 0629h, 0629h, 0629h, 0629h, 0629h, 0629h, 0629h, 0629h + WORD 0f129h, 0f129h, 0f129h, 0f129h, 0f129h, 0f129h, 0f129h, 0f129h + WORD 0f129h, 0f129h, 0f129h, 0f129h, 0f129h, 0f129h, 0f129h, 0f129h + WORD 00b6h, 00b6h, 00b6h, 00b6h, 00b6h, 00b6h, 00b6h, 00b6h + WORD 00b6h, 00b6h, 00b6h, 00b6h, 00b6h, 00b6h, 00b6h, 00b6h + WORD 0c2b6h, 0c2b6h, 0c2b6h, 0c2b6h, 0c2b6h, 0c2b6h, 0c2b6h, 0c2b6h + WORD 0c2b6h, 0c2b6h, 0c2b6h, 0c2b6h, 0c2b6h, 0c2b6h, 0c2b6h, 0c2b6h + WORD 023dh, 023dh, 023dh, 023dh, 023dh, 023dh, 023dh, 023dh + WORD 07d4h, 07d4h, 07d4h, 07d4h, 07d4h, 07d4h, 07d4h, 07d4h + WORD 0e93dh, 0e93dh, 0e93dh, 0e93dh, 0e93dh, 0e93dh, 0e93dh, 0e93dh + WORD 43d4h, 43d4h, 43d4h, 43d4h, 43d4h, 43d4h, 43d4h, 43d4h + WORD 0108h, 0108h, 0108h, 0108h, 0108h, 0108h, 0108h, 0108h + WORD 017fh, 017fh, 017fh, 017fh, 017fh, 017fh, 017fh, 017fh + WORD 9908h, 9908h, 9908h, 9908h, 9908h, 9908h, 9908h, 9908h + WORD 8e7fh, 8e7fh, 8e7fh, 8e7fh, 8e7fh, 8e7fh, 8e7fh, 8e7fh + WORD 04c7h, 04c7h, 04c7h, 04c7h, 028ch, 028ch, 028ch, 028ch + WORD 0ad9h, 0ad9h, 0ad9h, 0ad9h, 03f7h, 03f7h, 03f7h, 03f7h + WORD 0e9c7h, 0e9c7h, 0e9c7h, 0e9c7h, 0e68ch, 0e68ch, 0e68ch, 0e68ch + WORD 05d9h, 05d9h, 05d9h, 05d9h, 78f7h, 78f7h, 78f7h, 78f7h + WORD 07f4h, 07f4h, 07f4h, 07f4h, 05d3h, 05d3h, 05d3h, 05d3h + WORD 0be7h, 0be7h, 0be7h, 0be7h, 06f9h, 06f9h, 06f9h, 06f9h + WORD 0a3f4h, 0a3f4h, 0a3f4h, 0a3f4h, 4ed3h, 4ed3h, 4ed3h, 4ed3h + WORD 50e7h, 50e7h, 50e7h, 50e7h, 61f9h, 61f9h, 61f9h, 61f9h + WORD 09c4h, 09c4h, 09c4h, 09c4h, 09c4h, 09c4h, 09c4h, 09c4h + WORD 05b2h, 05b2h, 05b2h, 05b2h, 05b2h, 05b2h, 05b2h, 05b2h + WORD 15c4h, 15c4h, 15c4h, 15c4h, 15c4h, 15c4h, 15c4h, 15c4h + WORD 0fbb2h, 0fbb2h, 0fbb2h, 0fbb2h, 0fbb2h, 0fbb2h, 0fbb2h, 0fbb2h + WORD 06bfh, 06bfh, 06bfh, 06bfh, 06bfh, 06bfh, 06bfh, 06bfh + WORD 0c7fh, 0c7fh, 0c7fh, 0c7fh, 0c7fh, 0c7fh, 0c7fh, 0c7fh + WORD 53bfh, 53bfh, 53bfh, 53bfh, 53bfh, 53bfh, 53bfh, 53bfh + WORD 997fh, 997fh, 997fh, 997fh, 997fh, 997fh, 997fh, 997fh + WORD 0204h, 0204h, 0204h, 0204h, 0cf9h, 0cf9h, 0cf9h, 0cf9h + WORD 0bc1h, 0bc1h, 0bc1h, 0bc1h, 0a67h, 0a67h, 0a67h, 0a67h + WORD 0ce04h, 0ce04h, 0ce04h, 0ce04h, 67f9h, 67f9h, 67f9h, 67f9h + WORD 3ec1h, 3ec1h, 3ec1h, 3ec1h, 0cf67h, 0cf67h, 0cf67h, 0cf67h + WORD 06afh, 06afh, 06afh, 06afh, 0877h, 0877h, 0877h, 0877h + WORD 007eh, 007eh, 007eh, 007eh, 05bdh, 05bdh, 05bdh, 05bdh + WORD 23afh, 23afh, 23afh, 23afh, 0fd77h, 0fd77h, 0fd77h, 0fd77h + WORD 9a7eh, 9a7eh, 9a7eh, 9a7eh, 6cbdh, 6cbdh, 6cbdh, 6cbdh + WORD 08b2h, 08b2h, 01aeh, 01aeh, 022bh, 022bh, 034bh, 034bh + WORD 081eh, 081eh, 0367h, 0367h, 060eh, 060eh, 0069h, 0069h + WORD 0feb2h, 0feb2h, 2baeh, 2baeh, 0d32bh, 0d32bh, 344bh, 344bh + WORD 821eh, 821eh, 0c867h, 0c867h, 500eh, 500eh, 0ab69h, 0ab69h + WORD 01a6h, 01a6h, 024bh, 024bh, 00b1h, 00b1h, 0c16h, 0c16h + WORD 0bdeh, 0bdeh, 0b35h, 0b35h, 0626h, 0626h, 0675h, 0675h + WORD 93a6h, 93a6h, 334bh, 334bh, 03b1h, 03b1h, 0ee16h, 0ee16h + WORD 0c5deh, 0c5deh, 5a35h, 5a35h, 1826h, 1826h, 1575h, 1575h + WORD 0c0bh, 0c0bh, 030ah, 030ah, 0487h, 0487h, 0c6eh, 0c6eh + WORD 09f8h, 09f8h, 05cbh, 05cbh, 0aa7h, 0aa7h, 045fh, 045fh + WORD 7d0bh, 7d0bh, 810ah, 810ah, 2987h, 2987h, 766eh, 766eh + WORD 71f8h, 71f8h, 0b6cbh, 0b6cbh, 8fa7h, 8fa7h, 315fh, 315fh + WORD 06cbh, 06cbh, 0284h, 0284h, 0999h, 0999h, 015dh, 015dh + WORD 01a2h, 01a2h, 0149h, 0149h, 0c65h, 0c65h, 0cb6h, 0cb6h + WORD 0b7cbh, 0b7cbh, 4e84h, 4e84h, 4499h, 4499h, 485dh, 485dh + WORD 0c7a2h, 0c7a2h, 4c49h, 4c49h, 0eb65h, 0eb65h, 0ceb6h, 0ceb6h + WORD 0714h, 0714h, 0714h, 0714h, 0714h, 0714h, 0714h, 0714h + WORD 0714h, 0714h, 0714h, 0714h, 0714h, 0714h, 0714h, 0714h + WORD 0314h, 0314h, 0314h, 0314h, 0314h, 0314h, 0314h, 0314h + WORD 0314h, 0314h, 0314h, 0314h, 0314h, 0314h, 0314h, 0314h + WORD 011fh, 011fh, 011fh, 011fh, 011fh, 011fh, 011fh, 011fh + WORD 011fh, 011fh, 011fh, 011fh, 011fh, 011fh, 011fh, 011fh + WORD 6e1fh, 6e1fh, 6e1fh, 6e1fh, 6e1fh, 6e1fh, 6e1fh, 6e1fh + WORD 6e1fh, 6e1fh, 6e1fh, 6e1fh, 6e1fh, 6e1fh, 6e1fh, 6e1fh + WORD 00cah, 00cah, 00cah, 00cah, 00cah, 00cah, 00cah, 00cah + WORD 00cah, 00cah, 00cah, 00cah, 00cah, 00cah, 00cah, 00cah + WORD 0becah, 0becah, 0becah, 0becah, 0becah, 0becah, 0becah, 0becah + WORD 0becah, 0becah, 0becah, 0becah, 0becah, 0becah, 0becah, 0becah + WORD 03c2h, 03c2h, 03c2h, 03c2h, 03c2h, 03c2h, 03c2h, 03c2h + WORD 03c2h, 03c2h, 03c2h, 03c2h, 03c2h, 03c2h, 03c2h, 03c2h + WORD 29c2h, 29c2h, 29c2h, 29c2h, 29c2h, 29c2h, 29c2h, 29c2h + WORD 29c2h, 29c2h, 29c2h, 29c2h, 29c2h, 29c2h, 29c2h, 29c2h + WORD 084fh, 084fh, 084fh, 084fh, 084fh, 084fh, 084fh, 084fh + WORD 084fh, 084fh, 084fh, 084fh, 084fh, 084fh, 084fh, 084fh + WORD 054fh, 054fh, 054fh, 054fh, 054fh, 054fh, 054fh, 054fh + WORD 054fh, 054fh, 054fh, 054fh, 054fh, 054fh, 054fh, 054fh + WORD 073fh, 073fh, 073fh, 073fh, 073fh, 073fh, 073fh, 073fh + WORD 073fh, 073fh, 073fh, 073fh, 073fh, 073fh, 073fh, 073fh + WORD 0d43fh, 0d43fh, 0d43fh, 0d43fh, 0d43fh, 0d43fh, 0d43fh, 0d43fh + WORD 0d43fh, 0d43fh, 0d43fh, 0d43fh, 0d43fh, 0d43fh, 0d43fh, 0d43fh + WORD 05bch, 05bch, 05bch, 05bch, 05bch, 05bch, 05bch, 05bch + WORD 05bch, 05bch, 05bch, 05bch, 05bch, 05bch, 05bch, 05bch + WORD 79bch, 79bch, 79bch, 79bch, 79bch, 79bch, 79bch, 79bch + WORD 79bch, 79bch, 79bch, 79bch, 79bch, 79bch, 79bch, 79bch + WORD 0a58h, 0a58h, 0a58h, 0a58h, 0a58h, 0a58h, 0a58h, 0a58h + WORD 03f9h, 03f9h, 03f9h, 03f9h, 03f9h, 03f9h, 03f9h, 03f9h + WORD 9258h, 9258h, 9258h, 9258h, 9258h, 9258h, 9258h, 9258h + WORD 5ef9h, 5ef9h, 5ef9h, 5ef9h, 5ef9h, 5ef9h, 5ef9h, 5ef9h + WORD 02dch, 02dch, 02dch, 02dch, 02dch, 02dch, 02dch, 02dch + WORD 0260h, 0260h, 0260h, 0260h, 0260h, 0260h, 0260h, 0260h + WORD 0d6dch, 0d6dch, 0d6dch, 0d6dch, 0d6dch, 0d6dch, 0d6dch, 0d6dch + WORD 2260h, 2260h, 2260h, 2260h, 2260h, 2260h, 2260h, 2260h + WORD 09ach, 09ach, 09ach, 09ach, 0ca7h, 0ca7h, 0ca7h, 0ca7h + WORD 0bf2h, 0bf2h, 0bf2h, 0bf2h, 033eh, 033eh, 033eh, 033eh + WORD 4dach, 4dach, 4dach, 4dach, 91a7h, 91a7h, 91a7h, 91a7h + WORD 0c1f2h, 0c1f2h, 0c1f2h, 0c1f2h, 0dd3eh, 0dd3eh, 0dd3eh, 0dd3eh + WORD 006bh, 006bh, 006bh, 006bh, 0774h, 0774h, 0774h, 0774h + WORD 0c0ah, 0c0ah, 0c0ah, 0c0ah, 094ah, 094ah, 094ah, 094ah + WORD 916bh, 916bh, 916bh, 916bh, 2374h, 2374h, 2374h, 2374h + WORD 8a0ah, 8a0ah, 8a0ah, 8a0ah, 474ah, 474ah, 474ah, 474ah + WORD 06fbh, 06fbh, 06fbh, 06fbh, 06fbh, 06fbh, 06fbh, 06fbh + WORD 019bh, 019bh, 019bh, 019bh, 019bh, 019bh, 019bh, 019bh + WORD 47fbh, 47fbh, 47fbh, 47fbh, 47fbh, 47fbh, 47fbh, 47fbh + WORD 229bh, 229bh, 229bh, 229bh, 229bh, 229bh, 229bh, 229bh + WORD 0c34h, 0c34h, 0c34h, 0c34h, 0c34h, 0c34h, 0c34h, 0c34h + WORD 06deh, 06deh, 06deh, 06deh, 06deh, 06deh, 06deh, 06deh + WORD 6834h, 6834h, 6834h, 6834h, 6834h, 6834h, 6834h, 6834h + WORD 0c0deh, 0c0deh, 0c0deh, 0c0deh, 0c0deh, 0c0deh, 0c0deh, 0c0deh + WORD 0b73h, 0b73h, 0b73h, 0b73h, 03c1h, 03c1h, 03c1h, 03c1h + WORD 071dh, 071dh, 071dh, 071dh, 0a2ch, 0a2ch, 0a2ch, 0a2ch + WORD 3473h, 3473h, 3473h, 3473h, 36c1h, 36c1h, 36c1h, 36c1h + WORD 8e1dh, 8e1dh, 8e1dh, 8e1dh, 0ce2ch, 0ce2ch, 0ce2ch, 0ce2ch + WORD 01c0h, 01c0h, 01c0h, 01c0h, 08d8h, 08d8h, 08d8h, 08d8h + WORD 02a5h, 02a5h, 02a5h, 02a5h, 0806h, 0806h, 0806h, 0806h + WORD 41c0h, 41c0h, 41c0h, 41c0h, 10d8h, 10d8h, 10d8h, 10d8h + WORD 0a1a5h, 0a1a5h, 0a1a5h, 0a1a5h, 0ba06h, 0ba06h, 0ba06h, 0ba06h + WORD 0331h, 0331h, 0449h, 0449h, 025bh, 025bh, 0262h, 0262h + WORD 052ah, 052ah, 07fch, 07fch, 0748h, 0748h, 0180h, 0180h + WORD 8631h, 8631h, 4f49h, 4f49h, 635bh, 635bh, 0862h, 0862h + WORD 0e32ah, 0e32ah, 3bfch, 3bfch, 5f48h, 5f48h, 8180h, 8180h + WORD 0842h, 0842h, 0c79h, 0c79h, 04c2h, 04c2h, 07cah, 07cah + WORD 0997h, 0997h, 00dch, 00dch, 085eh, 085eh, 0686h, 0686h + WORD 0ae42h, 0ae42h, 0e779h, 0e779h, 2ac2h, 2ac2h, 0c5cah, 0c5cah + WORD 5e97h, 5e97h, 0d4dch, 0d4dch, 425eh, 425eh, 3886h, 3886h + WORD 0860h, 0860h, 0707h, 0707h, 0803h, 0803h, 031ah, 031ah + WORD 071bh, 071bh, 09abh, 09abh, 099bh, 099bh, 01deh, 01deh + WORD 2860h, 2860h, 0ac07h, 0ac07h, 0e103h, 0e103h, 0b11ah, 0b11ah + WORD 0a81bh, 0a81bh, 5aabh, 5aabh, 2a9bh, 2a9bh, 0bbdeh, 0bbdeh + WORD 0c95h, 0c95h, 0bcdh, 0bcdh, 03e4h, 03e4h, 03dfh, 03dfh + WORD 03beh, 03beh, 074dh, 074dh, 05f2h, 05f2h, 065ch, 065ch + WORD 7b95h, 7b95h, 0a2cdh, 0a2cdh, 6fe4h, 6fe4h, 0b0dfh, 0b0dfh + WORD 5dbeh, 5dbeh, 1e4dh, 1e4dh, 0bbf2h, 0bbf2h, 5a5ch, 5a5ch +ptr_L_mlkem_avx512_zetas QWORD L_mlkem_avx512_zetas +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_avx512_perm20 QWORD 0000000000000000h, 0000000000000001h + QWORD 0000000000000008h, 0000000000000009h + QWORD 0000000000000004h, 0000000000000005h + QWORD 000000000000000ch, 000000000000000dh +ptr_L_mlkem_avx512_perm20 QWORD L_mlkem_avx512_perm20 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_avx512_perm31 QWORD 0000000000000002h, 0000000000000003h + QWORD 000000000000000ah, 000000000000000bh + QWORD 0000000000000006h, 0000000000000007h + QWORD 000000000000000eh, 000000000000000fh +ptr_L_mlkem_avx512_perm31 QWORD L_mlkem_avx512_perm31 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_avx512_zetas_basemul WORD 08b2h, 081eh, 0f74eh, 0f7e2h, 01aeh, 0367h, 0fe52h, 0fc99h + WORD 022bh, 060eh, 0fdd5h, 0f9f2h, 034bh, 0069h, 0fcb5h, 0ff97h + WORD 0feb2h, 821eh, 014eh, 7de2h, 2baeh, 0c867h, 0d452h, 3799h + WORD 0d32bh, 500eh, 2cd5h, 0aff2h, 344bh, 0ab69h, 0cbb5h, 5497h + WORD 01a6h, 0bdeh, 0fe5ah, 0f422h, 024bh, 0b35h, 0fdb5h, 0f4cbh + WORD 00b1h, 0626h, 0ff4fh, 0f9dah, 0c16h, 0675h, 0f3eah, 0f98bh + WORD 93a6h, 0c5deh, 6c5ah, 3a22h, 334bh, 5a35h, 0ccb5h, 0a5cbh + WORD 03b1h, 1826h, 0fc4fh, 0e7dah, 0ee16h, 1575h, 11eah, 0ea8bh + WORD 0c0bh, 09f8h, 0f3f5h, 0f608h, 030ah, 05cbh, 0fcf6h, 0fa35h + WORD 0487h, 0aa7h, 0fb79h, 0f559h, 0c6eh, 045fh, 0f392h, 0fba1h + WORD 7d0bh, 71f8h, 82f5h, 8e08h, 810ah, 0b6cbh, 7ef6h, 4935h + WORD 2987h, 8fa7h, 0d679h, 7059h, 766eh, 315fh, 8992h, 0cea1h + WORD 06cbh, 01a2h, 0f935h, 0fe5eh, 0284h, 0149h, 0fd7ch, 0feb7h + WORD 0999h, 0c65h, 0f667h, 0f39bh, 015dh, 0cb6h, 0fea3h, 0f34ah + WORD 0b7cbh, 0c7a2h, 4835h, 385eh, 4e84h, 4c49h, 0b17ch, 0b3b7h + WORD 4499h, 0eb65h, 0bb67h, 149bh, 485dh, 0ceb6h, 0b7a3h, 314ah + WORD 0331h, 052ah, 0fccfh, 0fad6h, 0449h, 07fch, 0fbb7h, 0f804h + WORD 025bh, 0748h, 0fda5h, 0f8b8h, 0262h, 0180h, 0fd9eh, 0fe80h + WORD 8631h, 0e32ah, 79cfh, 1cd6h, 4f49h, 3bfch, 0b0b7h, 0c404h + WORD 635bh, 5f48h, 9ca5h, 0a0b8h, 0862h, 8180h, 0f79eh, 7e80h + WORD 0842h, 0997h, 0f7beh, 0f669h, 0c79h, 00dch, 0f387h, 0ff24h + WORD 04c2h, 085eh, 0fb3eh, 0f7a2h, 07cah, 0686h, 0f836h, 0f97ah + WORD 0ae42h, 5e97h, 51beh, 0a169h, 0e779h, 0d4dch, 1887h, 2b24h + WORD 2ac2h, 425eh, 0d53eh, 0bda2h, 0c5cah, 3886h, 3a36h, 0c77ah + WORD 0860h, 071bh, 0f7a0h, 0f8e5h, 0707h, 09abh, 0f8f9h, 0f655h + WORD 0803h, 099bh, 0f7fdh, 0f665h, 031ah, 01deh, 0fce6h, 0fe22h + WORD 2860h, 0a81bh, 0d7a0h, 57e5h, 0ac07h, 5aabh, 53f9h, 0a555h + WORD 0e103h, 2a9bh, 1efdh, 0d565h, 0b11ah, 0bbdeh, 4ee6h, 4422h + WORD 0c95h, 03beh, 0f36bh, 0fc42h, 0bcdh, 074dh, 0f433h, 0f8b3h + WORD 03e4h, 05f2h, 0fc1ch, 0fa0eh, 03dfh, 065ch, 0fc21h, 0f9a4h + WORD 7b95h, 5dbeh, 846bh, 0a242h, 0a2cdh, 1e4dh, 5d33h, 0e1b3h + WORD 6fe4h, 0bbf2h, 901ch, 440eh, 0b0dfh, 5a5ch, 4f21h, 0a5a4h +ptr_L_mlkem_avx512_zetas_basemul QWORD L_mlkem_avx512_zetas_basemul +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_avx512_zetas_inv WORD 06a5h, 06a5h, 05b4h, 05b4h, 070fh, 070fh, 0943h, 0943h + WORD 0922h, 0922h, 0134h, 0134h, 091dh, 091dh, 006ch, 006ch + WORD 0a5a5h, 0a5a5h, 0e1b4h, 0e1b4h, 440fh, 440fh, 0a243h, 0a243h + WORD 4f22h, 4f22h, 5d34h, 5d34h, 901dh, 901dh, 846ch, 846ch + WORD 0b23h, 0b23h, 0356h, 0356h, 0366h, 0366h, 05e6h, 05e6h + WORD 09e7h, 09e7h, 05fah, 05fah, 04feh, 04feh, 04a1h, 04a1h + WORD 4423h, 4423h, 0a556h, 0a556h, 0d566h, 0d566h, 57e6h, 57e6h + WORD 4ee7h, 4ee7h, 53fah, 53fah, 1efeh, 1efeh, 0d7a1h, 0d7a1h + WORD 04fbh, 04fbh, 04fbh, 04fbh, 0a5ch, 0a5ch, 0a5ch, 0a5ch + WORD 0429h, 0429h, 0429h, 0429h, 0b41h, 0b41h, 0b41h, 0b41h + WORD 45fbh, 45fbh, 45fbh, 45fbh, 5e5ch, 5e5ch, 5e5ch, 5e5ch + WORD 0ef29h, 0ef29h, 0ef29h, 0ef29h, 0be41h, 0be41h, 0be41h, 0be41h + WORD 02d5h, 02d5h, 02d5h, 02d5h, 05e4h, 05e4h, 05e4h, 05e4h + WORD 0940h, 0940h, 0940h, 0940h, 018eh, 018eh, 018eh, 018eh + WORD 31d5h, 31d5h, 31d5h, 31d5h, 71e4h, 71e4h, 71e4h, 71e4h + WORD 0c940h, 0c940h, 0c940h, 0c940h, 0cb8eh, 0cb8eh, 0cb8eh, 0cb8eh + WORD 0623h, 0623h, 0623h, 0623h, 0623h, 0623h, 0623h, 0623h + WORD 00cdh, 00cdh, 00cdh, 00cdh, 00cdh, 00cdh, 00cdh, 00cdh + WORD 3f23h, 3f23h, 3f23h, 3f23h, 3f23h, 3f23h, 3f23h, 3f23h + WORD 97cdh, 97cdh, 97cdh, 97cdh, 97cdh, 97cdh, 97cdh, 97cdh + WORD 0b66h, 0b66h, 0b66h, 0b66h, 0b66h, 0b66h, 0b66h, 0b66h + WORD 0606h, 0606h, 0606h, 0606h, 0606h, 0606h, 0606h, 0606h + WORD 0dd66h, 0dd66h, 0dd66h, 0dd66h, 0dd66h, 0dd66h, 0dd66h, 0dd66h + WORD 0b806h, 0b806h, 0b806h, 0b806h, 0b806h, 0b806h, 0b806h, 0b806h + WORD 0745h, 0745h, 0745h, 0745h, 0745h, 0745h, 0745h, 0745h + WORD 0745h, 0745h, 0745h, 0745h, 0745h, 0745h, 0745h, 0745h + WORD 8645h, 8645h, 8645h, 8645h, 8645h, 8645h, 8645h, 8645h + WORD 8645h, 8645h, 8645h, 8645h, 8645h, 8645h, 8645h, 8645h + WORD 05c2h, 05c2h, 05c2h, 05c2h, 05c2h, 05c2h, 05c2h, 05c2h + WORD 05c2h, 05c2h, 05c2h, 05c2h, 05c2h, 05c2h, 05c2h, 05c2h + WORD 2bc2h, 2bc2h, 2bc2h, 2bc2h, 2bc2h, 2bc2h, 2bc2h, 2bc2h + WORD 2bc2h, 2bc2h, 2bc2h, 2bc2h, 2bc2h, 2bc2h, 2bc2h, 2bc2h + WORD 0c37h, 0c37h, 0c37h, 0c37h, 0c37h, 0c37h, 0c37h, 0c37h + WORD 0c37h, 0c37h, 0c37h, 0c37h, 0c37h, 0c37h, 0c37h, 0c37h + WORD 4137h, 4137h, 4137h, 4137h, 4137h, 4137h, 4137h, 4137h + WORD 4137h, 4137h, 4137h, 4137h, 4137h, 4137h, 4137h, 4137h + WORD 067bh, 067bh, 0c25h, 0c25h, 04a3h, 04a3h, 036ah, 036ah + WORD 0537h, 0537h, 0088h, 0088h, 083fh, 083fh, 04bfh, 04bfh + WORD 0c77bh, 0c77bh, 2b25h, 2b25h, 0bda3h, 0bda3h, 0a16ah, 0a16ah + WORD 3a37h, 3a37h, 1888h, 1888h, 0d53fh, 0d53fh, 51bfh, 51bfh + WORD 0b81h, 0b81h, 0505h, 0505h, 05b9h, 05b9h, 07d7h, 07d7h + WORD 0a9fh, 0a9fh, 08b8h, 08b8h, 0aa6h, 0aa6h, 09d0h, 09d0h + WORD 7e81h, 7e81h, 0c405h, 0c405h, 0a0b9h, 0a0b9h, 1cd7h, 1cd7h + WORD 0f79fh, 0f79fh, 0b0b8h, 0b0b8h, 9ca6h, 9ca6h, 79d0h, 79d0h + WORD 03b7h, 03b7h, 03b7h, 03b7h, 00f7h, 00f7h, 00f7h, 00f7h + WORD 058dh, 058dh, 058dh, 058dh, 0c96h, 0c96h, 0c96h, 0c96h + WORD 0b8b7h, 0b8b7h, 0b8b7h, 0b8b7h, 75f7h, 75f7h, 75f7h, 75f7h + WORD 0dc8dh, 0dc8dh, 0dc8dh, 0dc8dh, 6e96h, 6e96h, 6e96h, 6e96h + WORD 09c3h, 09c3h, 09c3h, 09c3h, 010fh, 010fh, 010fh, 010fh + WORD 005ah, 005ah, 005ah, 005ah, 0355h, 0355h, 0355h, 0355h + WORD 22c3h, 22c3h, 22c3h, 22c3h, 3e0fh, 3e0fh, 3e0fh, 3e0fh + WORD 6e5ah, 6e5ah, 6e5ah, 6e5ah, 0b255h, 0b255h, 0b255h, 0b255h + WORD 0aa1h, 0aa1h, 0aa1h, 0aa1h, 0aa1h, 0aa1h, 0aa1h, 0aa1h + WORD 0a25h, 0a25h, 0a25h, 0a25h, 0a25h, 0a25h, 0a25h, 0a25h + WORD 0dda1h, 0dda1h, 0dda1h, 0dda1h, 0dda1h, 0dda1h, 0dda1h, 0dda1h + WORD 2925h, 2925h, 2925h, 2925h, 2925h, 2925h, 2925h, 2925h + WORD 0908h, 0908h, 0908h, 0908h, 0908h, 0908h, 0908h, 0908h + WORD 02a9h, 02a9h, 02a9h, 02a9h, 02a9h, 02a9h, 02a9h, 02a9h + WORD 0a108h, 0a108h, 0a108h, 0a108h, 0a108h, 0a108h, 0a108h, 0a108h + WORD 6da9h, 6da9h, 6da9h, 6da9h, 6da9h, 6da9h, 6da9h, 6da9h + WORD 04b2h, 04b2h, 04b2h, 04b2h, 04b2h, 04b2h, 04b2h, 04b2h + WORD 04b2h, 04b2h, 04b2h, 04b2h, 04b2h, 04b2h, 04b2h, 04b2h + WORD 0fab2h, 0fab2h, 0fab2h, 0fab2h, 0fab2h, 0fab2h, 0fab2h, 0fab2h + WORD 0fab2h, 0fab2h, 0fab2h, 0fab2h, 0fab2h, 0fab2h, 0fab2h, 0fab2h + WORD 093fh, 093fh, 093fh, 093fh, 093fh, 093fh, 093fh, 093fh + WORD 093fh, 093fh, 093fh, 093fh, 093fh, 093fh, 093fh, 093fh + WORD 0d63fh, 0d63fh, 0d63fh, 0d63fh, 0d63fh, 0d63fh, 0d63fh, 0d63fh + WORD 0d63fh, 0d63fh, 0d63fh, 0d63fh, 0d63fh, 0d63fh, 0d63fh, 0d63fh + WORD 0be2h, 0be2h, 0be2h, 0be2h, 0be2h, 0be2h, 0be2h, 0be2h + WORD 0be2h, 0be2h, 0be2h, 0be2h, 0be2h, 0be2h, 0be2h, 0be2h + WORD 91e2h, 91e2h, 91e2h, 91e2h, 91e2h, 91e2h, 91e2h, 91e2h + WORD 91e2h, 91e2h, 91e2h, 91e2h, 91e2h, 91e2h, 91e2h, 91e2h + WORD 05edh, 05edh, 05edh, 05edh, 05edh, 05edh, 05edh, 05edh + WORD 05edh, 05edh, 05edh, 05edh, 05edh, 05edh, 05edh, 05edh + WORD 0fcedh, 0fcedh, 0fcedh, 0fcedh, 0fcedh, 0fcedh, 0fcedh, 0fcedh + WORD 0fcedh, 0fcedh, 0fcedh, 0fcedh, 0fcedh, 0fcedh, 0fcedh, 0fcedh + WORD 004bh, 004bh, 0bb8h, 0bb8h, 009ch, 009ch, 0b5fh, 0b5fh + WORD 0ba4h, 0ba4h, 0a7dh, 0a7dh, 0368h, 0368h, 0636h, 0636h + WORD 314bh, 314bh, 0b3b8h, 0b3b8h, 149ch, 149ch, 385fh, 385fh + WORD 0b7a4h, 0b7a4h, 0b17dh, 0b17dh, 0bb68h, 0bb68h, 4836h, 4836h + WORD 08a2h, 08a2h, 0736h, 0736h, 025ah, 025ah, 0309h, 0309h + WORD 0093h, 0093h, 09f7h, 09f7h, 087ah, 087ah, 00f6h, 00f6h + WORD 0cea2h, 0cea2h, 4936h, 4936h, 705ah, 705ah, 8e09h, 8e09h + WORD 8993h, 8993h, 7ef7h, 7ef7h, 0d67ah, 0d67ah, 82f6h, 82f6h + WORD 0744h, 0744h, 0744h, 0744h, 0c83h, 0c83h, 0c83h, 0c83h + WORD 048ah, 048ah, 048ah, 048ah, 0652h, 0652h, 0652h, 0652h + WORD 9344h, 9344h, 9344h, 9344h, 6583h, 6583h, 6583h, 6583h + WORD 028ah, 028ah, 028ah, 028ah, 0dc52h, 0dc52h, 0dc52h, 0dc52h + WORD 029ah, 029ah, 029ah, 029ah, 0140h, 0140h, 0140h, 0140h + WORD 0008h, 0008h, 0008h, 0008h, 0afdh, 0afdh, 0afdh, 0afdh + WORD 309ah, 309ah, 309ah, 309ah, 0c140h, 0c140h, 0c140h, 0c140h + WORD 9808h, 9808h, 9808h, 9808h, 31fdh, 31fdh, 31fdh, 31fdh + WORD 0082h, 0082h, 0082h, 0082h, 0082h, 0082h, 0082h, 0082h + WORD 0642h, 0642h, 0642h, 0642h, 0642h, 0642h, 0642h, 0642h + WORD 6682h, 6682h, 6682h, 6682h, 6682h, 6682h, 6682h, 6682h + WORD 0ac42h, 0ac42h, 0ac42h, 0ac42h, 0ac42h, 0ac42h, 0ac42h, 0ac42h + WORD 074fh, 074fh, 074fh, 074fh, 074fh, 074fh, 074fh, 074fh + WORD 033dh, 033dh, 033dh, 033dh, 033dh, 033dh, 033dh, 033dh + WORD 044fh, 044fh, 044fh, 044fh, 044fh, 044fh, 044fh, 044fh + WORD 0ea3dh, 0ea3dh, 0ea3dh, 0ea3dh, 0ea3dh, 0ea3dh, 0ea3dh, 0ea3dh + WORD 0c4bh, 0c4bh, 0c4bh, 0c4bh, 0c4bh, 0c4bh, 0c4bh, 0c4bh + WORD 0c4bh, 0c4bh, 0c4bh, 0c4bh, 0c4bh, 0c4bh, 0c4bh, 0c4bh + WORD 3d4bh, 3d4bh, 3d4bh, 3d4bh, 3d4bh, 3d4bh, 3d4bh, 3d4bh + WORD 3d4bh, 3d4bh, 3d4bh, 3d4bh, 3d4bh, 3d4bh, 3d4bh, 3d4bh + WORD 06d8h, 06d8h, 06d8h, 06d8h, 06d8h, 06d8h, 06d8h, 06d8h + WORD 06d8h, 06d8h, 06d8h, 06d8h, 06d8h, 06d8h, 06d8h, 06d8h + WORD 0ed8h, 0ed8h, 0ed8h, 0ed8h, 0ed8h, 0ed8h, 0ed8h, 0ed8h + WORD 0ed8h, 0ed8h, 0ed8h, 0ed8h, 0ed8h, 0ed8h, 0ed8h, 0ed8h + WORD 0773h, 0773h, 0773h, 0773h, 0773h, 0773h, 0773h, 0773h + WORD 0773h, 0773h, 0773h, 0773h, 0773h, 0773h, 0773h, 0773h + WORD 3073h, 3073h, 3073h, 3073h, 3073h, 3073h, 3073h, 3073h + WORD 3073h, 3073h, 3073h, 3073h, 3073h, 3073h, 3073h, 3073h + WORD 068ch, 068ch, 01cch, 01cch, 06dbh, 06dbh, 0123h, 0123h + WORD 00ebh, 00ebh, 0ab6h, 0ab6h, 0c50h, 0c50h, 0b5bh, 0b5bh + WORD 0ea8ch, 0ea8ch, 0a5cch, 0a5cch, 0e7dbh, 0e7dbh, 3a23h, 3a23h + WORD 11ebh, 11ebh, 0ccb6h, 0ccb6h, 0fc50h, 0fc50h, 6c5bh, 6c5bh + WORD 0c98h, 0c98h, 099ah, 099ah, 06f3h, 06f3h, 04e3h, 04e3h + WORD 09b6h, 09b6h, 0b53h, 0b53h, 0ad6h, 0ad6h, 044fh, 044fh + WORD 5498h, 5498h, 379ah, 379ah, 0aff3h, 0aff3h, 7de3h, 7de3h + WORD 0cbb6h, 0cbb6h, 0d453h, 0d453h, 2cd6h, 2cd6h, 014fh, 014fh + WORD 0608h, 0608h, 0608h, 0608h, 011ah, 011ah, 011ah, 011ah + WORD 072eh, 072eh, 072eh, 072eh, 050dh, 050dh, 050dh, 050dh + WORD 9e08h, 9e08h, 9e08h, 9e08h, 0af1ah, 0af1ah, 0af1ah, 0af1ah + WORD 0b12eh, 0b12eh, 0b12eh, 0b12eh, 5c0dh, 5c0dh, 5c0dh, 5c0dh + WORD 090ah, 090ah, 090ah, 090ah, 0228h, 0228h, 0228h, 0228h + WORD 0a75h, 0a75h, 0a75h, 0a75h, 083ah, 083ah, 083ah, 083ah + WORD 870ah, 870ah, 870ah, 870ah, 0fa28h, 0fa28h, 0fa28h, 0fa28h + WORD 1975h, 1975h, 1975h, 1975h, 163ah, 163ah, 163ah, 163ah + WORD 0b82h, 0b82h, 0b82h, 0b82h, 0b82h, 0b82h, 0b82h, 0b82h + WORD 0bf9h, 0bf9h, 0bf9h, 0bf9h, 0bf9h, 0bf9h, 0bf9h, 0bf9h + WORD 7182h, 7182h, 7182h, 7182h, 7182h, 7182h, 7182h, 7182h + WORD 66f9h, 66f9h, 66f9h, 66f9h, 66f9h, 66f9h, 66f9h, 66f9h + WORD 052dh, 052dh, 052dh, 052dh, 052dh, 052dh, 052dh, 052dh + WORD 0ac4h, 0ac4h, 0ac4h, 0ac4h, 0ac4h, 0ac4h, 0ac4h, 0ac4h + WORD 0bc2dh, 0bc2dh, 0bc2dh, 0bc2dh, 0bc2dh, 0bc2dh, 0bc2dh, 0bc2dh + WORD 16c4h, 16c4h, 16c4h, 16c4h, 16c4h, 16c4h, 16c4h, 16c4h + WORD 0a93h, 0a93h, 0a93h, 0a93h, 0a93h, 0a93h, 0a93h, 0a93h + WORD 0a93h, 0a93h, 0a93h, 0a93h, 0a93h, 0a93h, 0a93h, 0a93h + WORD 9393h, 9393h, 9393h, 9393h, 9393h, 9393h, 9393h, 9393h + WORD 9393h, 9393h, 9393h, 9393h, 9393h, 9393h, 9393h, 9393h + WORD 00abh, 00abh, 00abh, 00abh, 00abh, 00abh, 00abh, 00abh + WORD 00abh, 00abh, 00abh, 00abh, 00abh, 00abh, 00abh, 00abh + WORD 51abh, 51abh, 51abh, 51abh, 51abh, 51abh, 51abh, 51abh + WORD 51abh, 51abh, 51abh, 51abh, 51abh, 51abh, 51abh, 51abh + WORD 072ch, 072ch, 072ch, 072ch, 072ch, 072ch, 072ch, 072ch + WORD 072ch, 072ch, 072ch, 072ch, 072ch, 072ch, 072ch, 072ch + WORD 0cb2ch, 0cb2ch, 0cb2ch, 0cb2ch, 0cb2ch, 0cb2ch, 0cb2ch, 0cb2ch + WORD 0cb2ch, 0cb2ch, 0cb2ch, 0cb2ch, 0cb2ch, 0cb2ch, 0cb2ch, 0cb2ch + WORD 0167h, 0167h, 0167h, 0167h, 0167h, 0167h, 0167h, 0167h + WORD 0167h, 0167h, 0167h, 0167h, 0167h, 0167h, 0167h, 0167h + WORD 0c667h, 0c667h, 0c667h, 0c667h, 0c667h, 0c667h, 0c667h, 0c667h + WORD 0c667h, 0c667h, 0c667h, 0c667h, 0c667h, 0c667h, 0c667h, 0c667h + WORD 02f6h, 02f6h, 02f6h, 02f6h, 02f6h, 02f6h, 02f6h, 02f6h + WORD 02f6h, 02f6h, 02f6h, 02f6h, 02f6h, 02f6h, 02f6h, 02f6h + WORD 84f6h, 84f6h, 84f6h, 84f6h, 84f6h, 84f6h, 84f6h, 84f6h + WORD 84f6h, 84f6h, 84f6h, 84f6h, 84f6h, 84f6h, 84f6h, 84f6h + WORD 05a1h, 05a1h, 05a1h, 05a1h, 05a1h, 05a1h, 05a1h, 05a1h + WORD 05a1h, 05a1h, 05a1h, 05a1h, 05a1h, 05a1h, 05a1h, 05a1h + WORD 0d8a1h, 0d8a1h, 0d8a1h, 0d8a1h, 0d8a1h, 0d8a1h, 0d8a1h, 0d8a1h + WORD 0d8a1h, 0d8a1h, 0d8a1h, 0d8a1h, 0d8a1h, 0d8a1h, 0d8a1h, 0d8a1h +ptr_L_mlkem_avx512_zetas_inv QWORD L_mlkem_avx512_zetas_inv +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_keygen_avx512 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + mov rax, QWORD PTR [rsp+80] + sub rsp, 1184 + vmovdqu OWORD PTR [rsp+1024], xmm6 + vmovdqu OWORD PTR [rsp+1040], xmm7 + vmovdqu OWORD PTR [rsp+1056], xmm8 + vmovdqu OWORD PTR [rsp+1072], xmm9 + vmovdqu OWORD PTR [rsp+1088], xmm10 + vmovdqu OWORD PTR [rsp+1104], xmm11 + vmovdqu OWORD PTR [rsp+1120], xmm12 + vmovdqu OWORD PTR [rsp+1136], xmm13 + vmovdqu OWORD PTR [rsp+1152], xmm14 + vmovdqu OWORD PTR [rsp+1168], xmm15 + mov rdi, 3329 + vmovd xmm14, edi + vpbroadcastw zmm14, xmm14 + mov rdi, 20159 + vmovd xmm15, edi + vpbroadcastw zmm15, xmm15 + mov edi, 43690 + kmovw k1, edi + mov edi, 21845 + kmovw k2, edi + mov edi, 2863311530 + kmovd k3, edi + mov edi, 1431655765 + kmovd k4, edi + vmovdqu64 zmm17, ptr_L_mlkem_avx512_perm20 + vmovdqu64 zmm18, ptr_L_mlkem_avx512_perm31 + mov r14, rcx + movsxd r11, eax + mov r12, rcx +L_keygen_avx512_priv: + cmp r11, 2 + jl L_keygen_avx512_priv_odd + mov r13, r12 + add r13, 512 + mov r15, QWORD PTR [ptr_L_mlkem_avx512_zetas] + vmovdqu64 ymm0, [r12] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [r13], 1 + vmovdqu64 ymm1, [r12+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [r13+32], 1 + vmovdqu64 ymm2, [r12+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r13+64], 1 + vmovdqu64 ymm3, [r12+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r13+96], 1 + vmovdqu64 ymm4, [r12+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r13+128], 1 + vmovdqu64 ymm5, [r12+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r13+160], 1 + vmovdqu64 ymm6, [r12+192] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r13+192], 1 + vmovdqu64 ymm7, [r12+224] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r13+224], 1 + vmovdqu64 ymm19, [r12+256] + vinserti64x4 zmm19, zmm19, YMMWORD PTR [r13+256], 1 + vmovdqu64 ymm20, [r12+288] + vinserti64x4 zmm20, zmm20, YMMWORD PTR [r13+288], 1 + vmovdqu64 ymm21, [r12+320] + vinserti64x4 zmm21, zmm21, YMMWORD PTR [r13+320], 1 + vmovdqu64 ymm22, [r12+352] + vinserti64x4 zmm22, zmm22, YMMWORD PTR [r13+352], 1 + vmovdqu64 ymm23, [r12+384] + vinserti64x4 zmm23, zmm23, YMMWORD PTR [r13+384], 1 + vmovdqu64 ymm24, [r12+416] + vinserti64x4 zmm24, zmm24, YMMWORD PTR [r13+416], 1 + vmovdqu64 ymm25, [r12+448] + vinserti64x4 zmm25, zmm25, YMMWORD PTR [r13+448], 1 + vmovdqu64 ymm26, [r12+480] + vinserti64x4 zmm26, zmm26, YMMWORD PTR [r13+480], 1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+32] + vpmullw zmm8, zmm19, zmm12 + vpmullw zmm9, zmm20, zmm12 + vpmulhw zmm19, zmm19, zmm10 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm19, zmm8 + vpsubw zmm9, zmm20, zmm9 + vpsubw zmm19, zmm0, zmm8 + vpsubw zmm20, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm2, zmm8 + vpsubw zmm22, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm4, zmm8 + vpsubw zmm24, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm6, zmm8 + vpsubw zmm26, zmm7, zmm9 + vpaddw zmm6, zmm6, zmm8 + vpaddw zmm7, zmm7, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+64] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+96] + vpmullw zmm8, zmm4, zmm12 + vpmullw zmm9, zmm5, zmm12 + vpmulhw zmm4, zmm4, zmm10 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm4, zmm8 + vpsubw zmm9, zmm5, zmm9 + vpsubw zmm4, zmm0, zmm8 + vpsubw zmm5, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm2, zmm8 + vpsubw zmm7, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1280] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1312] + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm19, zmm8 + vpsubw zmm24, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm21, zmm8 + vpsubw zmm26, zmm22, zmm9 + vpaddw zmm21, zmm21, zmm8 + vpaddw zmm22, zmm22, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+128] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+160] + vpmullw zmm8, zmm2, zmm12 + vpmullw zmm9, zmm3, zmm12 + vpmulhw zmm2, zmm2, zmm10 + vpmulhw zmm3, zmm3, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm2, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm2, zmm0, zmm8 + vpsubw zmm3, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1344] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1376] + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm19, zmm8 + vpsubw zmm22, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+192] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+224] + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm4, zmm8 + vpsubw zmm7, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1408] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1440] + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm23, zmm8 + vpsubw zmm26, zmm24, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm24, zmm24, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+256] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+288] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+320] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+352] + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1472] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1504] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1536] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1568] + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+384] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+416] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+448] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+480] + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1600] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1632] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1664] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1696] + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm0, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+512] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm1, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+544] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm2, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+576] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm3, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+608] + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm0, zmm1, zmm0 + vpsubw zmm2, zmm3, zmm2 + vpsubw zmm1, zmm8, zmm0 + vpsubw zmm3, zmm9, zmm2 + vpaddw zmm8, zmm8, zmm0 + vpaddw zmm9, zmm9, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+640] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+672] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+704] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+736] + vpunpcklqdq zmm0, zmm8, zmm1 + vpunpckhqdq zmm1, zmm8, zmm1 + vpunpcklqdq zmm2, zmm9, zmm3 + vpunpckhqdq zmm3, zmm9, zmm3 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm19, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1728] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm19, zmm20 + vmovdqa64 zmm20, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1760] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm21, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1792] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm21, zmm22 + vmovdqa64 zmm22, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1824] + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm19, zmm20, zmm19 + vpsubw zmm21, zmm22, zmm21 + vpsubw zmm20, zmm8, zmm19 + vpsubw zmm22, zmm9, zmm21 + vpaddw zmm8, zmm8, zmm19 + vpaddw zmm9, zmm9, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1856] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1888] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1920] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1952] + vpunpcklqdq zmm19, zmm8, zmm20 + vpunpckhqdq zmm20, zmm8, zmm20 + vpunpcklqdq zmm21, zmm9, zmm22 + vpunpckhqdq zmm22, zmm9, zmm22 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm4, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+768] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm5, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+800] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm6, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+832] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm7, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+864] + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm4, zmm5, zmm4 + vpsubw zmm6, zmm7, zmm6 + vpsubw zmm5, zmm8, zmm4 + vpsubw zmm7, zmm9, zmm6 + vpaddw zmm8, zmm8, zmm4 + vpaddw zmm9, zmm9, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+896] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+928] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+960] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+992] + vpunpcklqdq zmm4, zmm8, zmm5 + vpunpckhqdq zmm5, zmm8, zmm5 + vpunpcklqdq zmm6, zmm9, zmm7 + vpunpckhqdq zmm7, zmm9, zmm7 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm23, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1984] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm23, zmm24 + vmovdqa64 zmm24, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2016] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm25, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2048] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm25, zmm26 + vmovdqa64 zmm26, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2080] + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm23, zmm24, zmm23 + vpsubw zmm25, zmm26, zmm25 + vpsubw zmm24, zmm8, zmm23 + vpsubw zmm26, zmm9, zmm25 + vpaddw zmm8, zmm8, zmm23 + vpaddw zmm9, zmm9, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+2112] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2144] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2176] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2208] + vpunpcklqdq zmm23, zmm8, zmm24 + vpunpckhqdq zmm24, zmm8, zmm24 + vpunpcklqdq zmm25, zmm9, zmm26 + vpunpckhqdq zmm26, zmm9, zmm26 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1024] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1056] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1088] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1120] + vpsllq zmm8, zmm1, 32 + vpsrlq zmm9, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm8 + vpblendmd zmm1{k2}, zmm1, zmm9 + vpsllq zmm8, zmm3, 32 + vpsrlq zmm9, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm8 + vpblendmd zmm3{k2}, zmm3, zmm9 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+2240] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2272] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2304] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2336] + vpsllq zmm8, zmm20, 32 + vpsrlq zmm9, zmm19, 32 + vpblendmd zmm19{k1}, zmm19, zmm8 + vpblendmd zmm20{k2}, zmm20, zmm9 + vpsllq zmm8, zmm22, 32 + vpsrlq zmm9, zmm21, 32 + vpblendmd zmm21{k1}, zmm21, zmm8 + vpblendmd zmm22{k2}, zmm22, zmm9 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1152] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1184] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1216] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1248] + vpsllq zmm8, zmm5, 32 + vpsrlq zmm9, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm8 + vpblendmd zmm5{k2}, zmm5, zmm9 + vpsllq zmm8, zmm7, 32 + vpsrlq zmm9, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm8 + vpblendmd zmm7{k2}, zmm7, zmm9 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+2368] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2400] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2432] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2464] + vpsllq zmm8, zmm24, 32 + vpsrlq zmm9, zmm23, 32 + vpblendmd zmm23{k1}, zmm23, zmm8 + vpblendmd zmm24{k2}, zmm24, zmm9 + vpsllq zmm8, zmm26, 32 + vpsrlq zmm9, zmm25, 32 + vpblendmd zmm25{k1}, zmm25, zmm8 + vpblendmd zmm26{k2}, zmm26, zmm9 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vpunpckldq zmm8, zmm0, zmm1 + vpunpckhdq zmm9, zmm0, zmm1 + vmovdqa64 zmm0, zmm17 + vpermi2q zmm0, zmm8, zmm9 + vmovdqa64 zmm1, zmm18 + vpermi2q zmm1, zmm8, zmm9 + vpunpckldq zmm8, zmm2, zmm3 + vpunpckhdq zmm9, zmm2, zmm3 + vmovdqa64 zmm2, zmm17 + vpermi2q zmm2, zmm8, zmm9 + vmovdqa64 zmm3, zmm18 + vpermi2q zmm3, zmm8, zmm9 + vpunpckldq zmm8, zmm19, zmm20 + vpunpckhdq zmm9, zmm19, zmm20 + vmovdqa64 zmm19, zmm17 + vpermi2q zmm19, zmm8, zmm9 + vmovdqa64 zmm20, zmm18 + vpermi2q zmm20, zmm8, zmm9 + vpunpckldq zmm8, zmm21, zmm22 + vpunpckhdq zmm9, zmm21, zmm22 + vmovdqa64 zmm21, zmm17 + vpermi2q zmm21, zmm8, zmm9 + vmovdqa64 zmm22, zmm18 + vpermi2q zmm22, zmm8, zmm9 + vpunpckldq zmm8, zmm4, zmm5 + vpunpckhdq zmm9, zmm4, zmm5 + vmovdqa64 zmm4, zmm17 + vpermi2q zmm4, zmm8, zmm9 + vmovdqa64 zmm5, zmm18 + vpermi2q zmm5, zmm8, zmm9 + vpunpckldq zmm8, zmm6, zmm7 + vpunpckhdq zmm9, zmm6, zmm7 + vmovdqa64 zmm6, zmm17 + vpermi2q zmm6, zmm8, zmm9 + vmovdqa64 zmm7, zmm18 + vpermi2q zmm7, zmm8, zmm9 + vpunpckldq zmm8, zmm23, zmm24 + vpunpckhdq zmm9, zmm23, zmm24 + vmovdqa64 zmm23, zmm17 + vpermi2q zmm23, zmm8, zmm9 + vmovdqa64 zmm24, zmm18 + vpermi2q zmm24, zmm8, zmm9 + vpunpckldq zmm8, zmm25, zmm26 + vpunpckhdq zmm9, zmm25, zmm26 + vmovdqa64 zmm25, zmm17 + vpermi2q zmm25, zmm8, zmm9 + vmovdqa64 zmm26, zmm18 + vpermi2q zmm26, zmm8, zmm9 + vpmulhw zmm8, zmm0, zmm15 + vpmulhw zmm9, zmm1, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm0, zmm8 + vpsubw zmm9, zmm1, zmm9 + vmovdqu64 [r12], ymm8 + vextracti64x4 YMMWORD PTR [r13], zmm8, 1 + vmovdqu64 [r12+32], ymm9 + vextracti64x4 YMMWORD PTR [r13+32], zmm9, 1 + vpmulhw zmm8, zmm2, zmm15 + vpmulhw zmm9, zmm3, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm2, zmm8 + vpsubw zmm9, zmm3, zmm9 + vmovdqu64 [r12+64], ymm8 + vextracti64x4 YMMWORD PTR [r13+64], zmm8, 1 + vmovdqu64 [r12+96], ymm9 + vextracti64x4 YMMWORD PTR [r13+96], zmm9, 1 + vpmulhw zmm8, zmm19, zmm15 + vpmulhw zmm9, zmm20, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm19, zmm8 + vpsubw zmm9, zmm20, zmm9 + vmovdqu64 [r12+256], ymm8 + vextracti64x4 YMMWORD PTR [r13+256], zmm8, 1 + vmovdqu64 [r12+288], ymm9 + vextracti64x4 YMMWORD PTR [r13+288], zmm9, 1 + vpmulhw zmm8, zmm21, zmm15 + vpmulhw zmm9, zmm22, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vmovdqu64 [r12+320], ymm8 + vextracti64x4 YMMWORD PTR [r13+320], zmm8, 1 + vmovdqu64 [r12+352], ymm9 + vextracti64x4 YMMWORD PTR [r13+352], zmm9, 1 + vpmulhw zmm8, zmm4, zmm15 + vpmulhw zmm9, zmm5, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm4, zmm8 + vpsubw zmm9, zmm5, zmm9 + vmovdqu64 [r12+128], ymm8 + vextracti64x4 YMMWORD PTR [r13+128], zmm8, 1 + vmovdqu64 [r12+160], ymm9 + vextracti64x4 YMMWORD PTR [r13+160], zmm9, 1 + vpmulhw zmm8, zmm6, zmm15 + vpmulhw zmm9, zmm7, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vmovdqu64 [r12+192], ymm8 + vextracti64x4 YMMWORD PTR [r13+192], zmm8, 1 + vmovdqu64 [r12+224], ymm9 + vextracti64x4 YMMWORD PTR [r13+224], zmm9, 1 + vpmulhw zmm8, zmm23, zmm15 + vpmulhw zmm9, zmm24, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vmovdqu64 [r12+384], ymm8 + vextracti64x4 YMMWORD PTR [r13+384], zmm8, 1 + vmovdqu64 [r12+416], ymm9 + vextracti64x4 YMMWORD PTR [r13+416], zmm9, 1 + vpmulhw zmm8, zmm25, zmm15 + vpmulhw zmm9, zmm26, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vmovdqu64 [r12+448], ymm8 + vextracti64x4 YMMWORD PTR [r13+448], zmm8, 1 + vmovdqu64 [r12+480], ymm9 + vextracti64x4 YMMWORD PTR [r13+480], zmm9, 1 + add r12, 1024 + sub r11, 2 + jmp L_keygen_avx512_priv +L_keygen_avx512_priv_odd: + cmp r11, 1 + jne L_keygen_avx512_priv_done + mov r15, QWORD PTR [ptr_L_mlkem_avx512_zetas] + vmovdqu64 ymm0, [r12] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [r12], 1 + vmovdqu64 ymm1, [r12+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [r12+32], 1 + vmovdqu64 ymm2, [r12+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r12+64], 1 + vmovdqu64 ymm3, [r12+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r12+96], 1 + vmovdqu64 ymm4, [r12+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r12+128], 1 + vmovdqu64 ymm5, [r12+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r12+160], 1 + vmovdqu64 ymm6, [r12+192] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r12+192], 1 + vmovdqu64 ymm7, [r12+224] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r12+224], 1 + vmovdqu64 ymm19, [r12+256] + vinserti64x4 zmm19, zmm19, YMMWORD PTR [r12+256], 1 + vmovdqu64 ymm20, [r12+288] + vinserti64x4 zmm20, zmm20, YMMWORD PTR [r12+288], 1 + vmovdqu64 ymm21, [r12+320] + vinserti64x4 zmm21, zmm21, YMMWORD PTR [r12+320], 1 + vmovdqu64 ymm22, [r12+352] + vinserti64x4 zmm22, zmm22, YMMWORD PTR [r12+352], 1 + vmovdqu64 ymm23, [r12+384] + vinserti64x4 zmm23, zmm23, YMMWORD PTR [r12+384], 1 + vmovdqu64 ymm24, [r12+416] + vinserti64x4 zmm24, zmm24, YMMWORD PTR [r12+416], 1 + vmovdqu64 ymm25, [r12+448] + vinserti64x4 zmm25, zmm25, YMMWORD PTR [r12+448], 1 + vmovdqu64 ymm26, [r12+480] + vinserti64x4 zmm26, zmm26, YMMWORD PTR [r12+480], 1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+32] + vpmullw zmm8, zmm19, zmm12 + vpmullw zmm9, zmm20, zmm12 + vpmulhw zmm19, zmm19, zmm10 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm19, zmm8 + vpsubw zmm9, zmm20, zmm9 + vpsubw zmm19, zmm0, zmm8 + vpsubw zmm20, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm2, zmm8 + vpsubw zmm22, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm4, zmm8 + vpsubw zmm24, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm6, zmm8 + vpsubw zmm26, zmm7, zmm9 + vpaddw zmm6, zmm6, zmm8 + vpaddw zmm7, zmm7, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+64] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+96] + vpmullw zmm8, zmm4, zmm12 + vpmullw zmm9, zmm5, zmm12 + vpmulhw zmm4, zmm4, zmm10 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm4, zmm8 + vpsubw zmm9, zmm5, zmm9 + vpsubw zmm4, zmm0, zmm8 + vpsubw zmm5, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm2, zmm8 + vpsubw zmm7, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1280] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1312] + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm19, zmm8 + vpsubw zmm24, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm21, zmm8 + vpsubw zmm26, zmm22, zmm9 + vpaddw zmm21, zmm21, zmm8 + vpaddw zmm22, zmm22, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+128] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+160] + vpmullw zmm8, zmm2, zmm12 + vpmullw zmm9, zmm3, zmm12 + vpmulhw zmm2, zmm2, zmm10 + vpmulhw zmm3, zmm3, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm2, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm2, zmm0, zmm8 + vpsubw zmm3, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1344] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1376] + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm19, zmm8 + vpsubw zmm22, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+192] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+224] + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm4, zmm8 + vpsubw zmm7, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1408] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1440] + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm23, zmm8 + vpsubw zmm26, zmm24, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm24, zmm24, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+256] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+288] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+320] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+352] + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1472] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1504] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1536] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1568] + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+384] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+416] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+448] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+480] + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1600] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1632] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1664] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1696] + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm0, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+512] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm1, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+544] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm2, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+576] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm3, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+608] + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm0, zmm1, zmm0 + vpsubw zmm2, zmm3, zmm2 + vpsubw zmm1, zmm8, zmm0 + vpsubw zmm3, zmm9, zmm2 + vpaddw zmm8, zmm8, zmm0 + vpaddw zmm9, zmm9, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+640] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+672] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+704] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+736] + vpunpcklqdq zmm0, zmm8, zmm1 + vpunpckhqdq zmm1, zmm8, zmm1 + vpunpcklqdq zmm2, zmm9, zmm3 + vpunpckhqdq zmm3, zmm9, zmm3 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm19, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1728] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm19, zmm20 + vmovdqa64 zmm20, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1760] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm21, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1792] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm21, zmm22 + vmovdqa64 zmm22, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1824] + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm19, zmm20, zmm19 + vpsubw zmm21, zmm22, zmm21 + vpsubw zmm20, zmm8, zmm19 + vpsubw zmm22, zmm9, zmm21 + vpaddw zmm8, zmm8, zmm19 + vpaddw zmm9, zmm9, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1856] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1888] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1920] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1952] + vpunpcklqdq zmm19, zmm8, zmm20 + vpunpckhqdq zmm20, zmm8, zmm20 + vpunpcklqdq zmm21, zmm9, zmm22 + vpunpckhqdq zmm22, zmm9, zmm22 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm4, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+768] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm5, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+800] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm6, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+832] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm7, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+864] + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm4, zmm5, zmm4 + vpsubw zmm6, zmm7, zmm6 + vpsubw zmm5, zmm8, zmm4 + vpsubw zmm7, zmm9, zmm6 + vpaddw zmm8, zmm8, zmm4 + vpaddw zmm9, zmm9, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+896] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+928] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+960] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+992] + vpunpcklqdq zmm4, zmm8, zmm5 + vpunpckhqdq zmm5, zmm8, zmm5 + vpunpcklqdq zmm6, zmm9, zmm7 + vpunpckhqdq zmm7, zmm9, zmm7 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm23, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1984] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm23, zmm24 + vmovdqa64 zmm24, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2016] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm25, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2048] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm25, zmm26 + vmovdqa64 zmm26, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2080] + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm23, zmm24, zmm23 + vpsubw zmm25, zmm26, zmm25 + vpsubw zmm24, zmm8, zmm23 + vpsubw zmm26, zmm9, zmm25 + vpaddw zmm8, zmm8, zmm23 + vpaddw zmm9, zmm9, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+2112] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2144] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2176] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2208] + vpunpcklqdq zmm23, zmm8, zmm24 + vpunpckhqdq zmm24, zmm8, zmm24 + vpunpcklqdq zmm25, zmm9, zmm26 + vpunpckhqdq zmm26, zmm9, zmm26 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1024] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1056] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1088] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1120] + vpsllq zmm8, zmm1, 32 + vpsrlq zmm9, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm8 + vpblendmd zmm1{k2}, zmm1, zmm9 + vpsllq zmm8, zmm3, 32 + vpsrlq zmm9, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm8 + vpblendmd zmm3{k2}, zmm3, zmm9 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+2240] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2272] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2304] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2336] + vpsllq zmm8, zmm20, 32 + vpsrlq zmm9, zmm19, 32 + vpblendmd zmm19{k1}, zmm19, zmm8 + vpblendmd zmm20{k2}, zmm20, zmm9 + vpsllq zmm8, zmm22, 32 + vpsrlq zmm9, zmm21, 32 + vpblendmd zmm21{k1}, zmm21, zmm8 + vpblendmd zmm22{k2}, zmm22, zmm9 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1152] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1184] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1216] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1248] + vpsllq zmm8, zmm5, 32 + vpsrlq zmm9, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm8 + vpblendmd zmm5{k2}, zmm5, zmm9 + vpsllq zmm8, zmm7, 32 + vpsrlq zmm9, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm8 + vpblendmd zmm7{k2}, zmm7, zmm9 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+2368] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2400] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2432] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2464] + vpsllq zmm8, zmm24, 32 + vpsrlq zmm9, zmm23, 32 + vpblendmd zmm23{k1}, zmm23, zmm8 + vpblendmd zmm24{k2}, zmm24, zmm9 + vpsllq zmm8, zmm26, 32 + vpsrlq zmm9, zmm25, 32 + vpblendmd zmm25{k1}, zmm25, zmm8 + vpblendmd zmm26{k2}, zmm26, zmm9 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vpunpckldq zmm8, zmm0, zmm1 + vpunpckhdq zmm9, zmm0, zmm1 + vmovdqa64 zmm0, zmm17 + vpermi2q zmm0, zmm8, zmm9 + vmovdqa64 zmm1, zmm18 + vpermi2q zmm1, zmm8, zmm9 + vpunpckldq zmm8, zmm2, zmm3 + vpunpckhdq zmm9, zmm2, zmm3 + vmovdqa64 zmm2, zmm17 + vpermi2q zmm2, zmm8, zmm9 + vmovdqa64 zmm3, zmm18 + vpermi2q zmm3, zmm8, zmm9 + vpunpckldq zmm8, zmm19, zmm20 + vpunpckhdq zmm9, zmm19, zmm20 + vmovdqa64 zmm19, zmm17 + vpermi2q zmm19, zmm8, zmm9 + vmovdqa64 zmm20, zmm18 + vpermi2q zmm20, zmm8, zmm9 + vpunpckldq zmm8, zmm21, zmm22 + vpunpckhdq zmm9, zmm21, zmm22 + vmovdqa64 zmm21, zmm17 + vpermi2q zmm21, zmm8, zmm9 + vmovdqa64 zmm22, zmm18 + vpermi2q zmm22, zmm8, zmm9 + vpunpckldq zmm8, zmm4, zmm5 + vpunpckhdq zmm9, zmm4, zmm5 + vmovdqa64 zmm4, zmm17 + vpermi2q zmm4, zmm8, zmm9 + vmovdqa64 zmm5, zmm18 + vpermi2q zmm5, zmm8, zmm9 + vpunpckldq zmm8, zmm6, zmm7 + vpunpckhdq zmm9, zmm6, zmm7 + vmovdqa64 zmm6, zmm17 + vpermi2q zmm6, zmm8, zmm9 + vmovdqa64 zmm7, zmm18 + vpermi2q zmm7, zmm8, zmm9 + vpunpckldq zmm8, zmm23, zmm24 + vpunpckhdq zmm9, zmm23, zmm24 + vmovdqa64 zmm23, zmm17 + vpermi2q zmm23, zmm8, zmm9 + vmovdqa64 zmm24, zmm18 + vpermi2q zmm24, zmm8, zmm9 + vpunpckldq zmm8, zmm25, zmm26 + vpunpckhdq zmm9, zmm25, zmm26 + vmovdqa64 zmm25, zmm17 + vpermi2q zmm25, zmm8, zmm9 + vmovdqa64 zmm26, zmm18 + vpermi2q zmm26, zmm8, zmm9 + vpmulhw zmm8, zmm0, zmm15 + vpmulhw zmm9, zmm1, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm0, zmm8 + vpsubw zmm9, zmm1, zmm9 + vmovdqu64 [r12], ymm8 + vextracti64x4 YMMWORD PTR [r12], zmm8, 1 + vmovdqu64 [r12+32], ymm9 + vextracti64x4 YMMWORD PTR [r12+32], zmm9, 1 + vpmulhw zmm8, zmm2, zmm15 + vpmulhw zmm9, zmm3, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm2, zmm8 + vpsubw zmm9, zmm3, zmm9 + vmovdqu64 [r12+64], ymm8 + vextracti64x4 YMMWORD PTR [r12+64], zmm8, 1 + vmovdqu64 [r12+96], ymm9 + vextracti64x4 YMMWORD PTR [r12+96], zmm9, 1 + vpmulhw zmm8, zmm19, zmm15 + vpmulhw zmm9, zmm20, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm19, zmm8 + vpsubw zmm9, zmm20, zmm9 + vmovdqu64 [r12+256], ymm8 + vextracti64x4 YMMWORD PTR [r12+256], zmm8, 1 + vmovdqu64 [r12+288], ymm9 + vextracti64x4 YMMWORD PTR [r12+288], zmm9, 1 + vpmulhw zmm8, zmm21, zmm15 + vpmulhw zmm9, zmm22, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vmovdqu64 [r12+320], ymm8 + vextracti64x4 YMMWORD PTR [r12+320], zmm8, 1 + vmovdqu64 [r12+352], ymm9 + vextracti64x4 YMMWORD PTR [r12+352], zmm9, 1 + vpmulhw zmm8, zmm4, zmm15 + vpmulhw zmm9, zmm5, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm4, zmm8 + vpsubw zmm9, zmm5, zmm9 + vmovdqu64 [r12+128], ymm8 + vextracti64x4 YMMWORD PTR [r12+128], zmm8, 1 + vmovdqu64 [r12+160], ymm9 + vextracti64x4 YMMWORD PTR [r12+160], zmm9, 1 + vpmulhw zmm8, zmm6, zmm15 + vpmulhw zmm9, zmm7, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vmovdqu64 [r12+192], ymm8 + vextracti64x4 YMMWORD PTR [r12+192], zmm8, 1 + vmovdqu64 [r12+224], ymm9 + vextracti64x4 YMMWORD PTR [r12+224], zmm9, 1 + vpmulhw zmm8, zmm23, zmm15 + vpmulhw zmm9, zmm24, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vmovdqu64 [r12+384], ymm8 + vextracti64x4 YMMWORD PTR [r12+384], zmm8, 1 + vmovdqu64 [r12+416], ymm9 + vextracti64x4 YMMWORD PTR [r12+416], zmm9, 1 + vpmulhw zmm8, zmm25, zmm15 + vpmulhw zmm9, zmm26, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vmovdqu64 [r12+448], ymm8 + vextracti64x4 YMMWORD PTR [r12+448], zmm8, 1 + vmovdqu64 [r12+480], ymm9 + vextracti64x4 YMMWORD PTR [r12+480], zmm9, 1 +L_keygen_avx512_priv_done: + mov rdi, 62209 + vmovd xmm13, edi + vpbroadcastw zmm13, xmm13 + movsxd r10, eax + mov r12, rdx +L_keygen_avx512_acc: + movsxd r11, eax + mov r15, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [r9] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+64], 1 + vmovdqu ymm3, YMMWORD PTR [r9+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rcx] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rcx+64], 1 + vmovdqu ymm5, YMMWORD PTR [rcx+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rcx+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r15] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r15+64], 1 + vmovdqu ymm11, YMMWORD PTR [r15+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r15+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm13 + vpmullw zmm9, zmm2, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [r12], ymm0 + vextracti64x4 YMMWORD PTR [r12+64], zmm0, 1 + vmovdqu YMMWORD PTR [r12+32], ymm1 + vextracti64x4 YMMWORD PTR [r12+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+192], 1 + vmovdqu ymm3, YMMWORD PTR [r9+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rcx+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rcx+192], 1 + vmovdqu ymm5, YMMWORD PTR [rcx+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rcx+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r15+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r15+192], 1 + vmovdqu ymm11, YMMWORD PTR [r15+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r15+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm13 + vpmullw zmm9, zmm2, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [r12+128], ymm0 + vextracti64x4 YMMWORD PTR [r12+192], zmm0, 1 + vmovdqu YMMWORD PTR [r12+160], ymm1 + vextracti64x4 YMMWORD PTR [r12+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+320], 1 + vmovdqu ymm3, YMMWORD PTR [r9+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rcx+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rcx+320], 1 + vmovdqu ymm5, YMMWORD PTR [rcx+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rcx+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r15+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r15+320], 1 + vmovdqu ymm11, YMMWORD PTR [r15+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r15+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm13 + vpmullw zmm9, zmm2, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [r12+256], ymm0 + vextracti64x4 YMMWORD PTR [r12+320], zmm0, 1 + vmovdqu YMMWORD PTR [r12+288], ymm1 + vextracti64x4 YMMWORD PTR [r12+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+448], 1 + vmovdqu ymm3, YMMWORD PTR [r9+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rcx+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rcx+448], 1 + vmovdqu ymm5, YMMWORD PTR [rcx+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rcx+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r15+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r15+448], 1 + vmovdqu ymm11, YMMWORD PTR [r15+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r15+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm13 + vpmullw zmm9, zmm2, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [r12+384], ymm0 + vextracti64x4 YMMWORD PTR [r12+448], zmm0, 1 + vmovdqu YMMWORD PTR [r12+416], ymm1 + vextracti64x4 YMMWORD PTR [r12+480], zmm1, 1 + add r9, 512 + add rcx, 512 + sub r11, 2 + jz L_pointwise_acc_mont_end_keygen_avx512 +L_pointwise_acc_mont_start_keygen_avx512: + mov r15, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [r9] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+64], 1 + vmovdqu ymm3, YMMWORD PTR [r9+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rcx] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rcx+64], 1 + vmovdqu ymm5, YMMWORD PTR [rcx+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rcx+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r15] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r15+64], 1 + vmovdqu ymm11, YMMWORD PTR [r15+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r15+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm13 + vpmullw zmm9, zmm2, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r12] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r12+64], 1 + vmovdqu ymm7, YMMWORD PTR [r12+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r12+96], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [r12], ymm0 + vextracti64x4 YMMWORD PTR [r12+64], zmm0, 1 + vmovdqu YMMWORD PTR [r12+32], ymm1 + vextracti64x4 YMMWORD PTR [r12+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+192], 1 + vmovdqu ymm3, YMMWORD PTR [r9+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rcx+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rcx+192], 1 + vmovdqu ymm5, YMMWORD PTR [rcx+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rcx+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r15+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r15+192], 1 + vmovdqu ymm11, YMMWORD PTR [r15+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r15+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm13 + vpmullw zmm9, zmm2, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r12+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r12+192], 1 + vmovdqu ymm7, YMMWORD PTR [r12+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r12+224], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [r12+128], ymm0 + vextracti64x4 YMMWORD PTR [r12+192], zmm0, 1 + vmovdqu YMMWORD PTR [r12+160], ymm1 + vextracti64x4 YMMWORD PTR [r12+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+320], 1 + vmovdqu ymm3, YMMWORD PTR [r9+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rcx+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rcx+320], 1 + vmovdqu ymm5, YMMWORD PTR [rcx+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rcx+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r15+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r15+320], 1 + vmovdqu ymm11, YMMWORD PTR [r15+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r15+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm13 + vpmullw zmm9, zmm2, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r12+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r12+320], 1 + vmovdqu ymm7, YMMWORD PTR [r12+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r12+352], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [r12+256], ymm0 + vextracti64x4 YMMWORD PTR [r12+320], zmm0, 1 + vmovdqu YMMWORD PTR [r12+288], ymm1 + vextracti64x4 YMMWORD PTR [r12+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+448], 1 + vmovdqu ymm3, YMMWORD PTR [r9+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rcx+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rcx+448], 1 + vmovdqu ymm5, YMMWORD PTR [rcx+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rcx+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r15+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r15+448], 1 + vmovdqu ymm11, YMMWORD PTR [r15+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r15+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm13 + vpmullw zmm9, zmm2, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r12+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r12+448], 1 + vmovdqu ymm7, YMMWORD PTR [r12+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r12+480], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [r12+384], ymm0 + vextracti64x4 YMMWORD PTR [r12+448], zmm0, 1 + vmovdqu YMMWORD PTR [r12+416], ymm1 + vextracti64x4 YMMWORD PTR [r12+480], zmm1, 1 + add r9, 512 + add rcx, 512 + sub r11, 1 + jg L_pointwise_acc_mont_start_keygen_avx512 +L_pointwise_acc_mont_end_keygen_avx512: + mov r15, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [r9] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+64], 1 + vmovdqu ymm3, YMMWORD PTR [r9+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rcx] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rcx+64], 1 + vmovdqu ymm5, YMMWORD PTR [rcx+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rcx+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r15] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r15+64], 1 + vmovdqu ymm11, YMMWORD PTR [r15+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r15+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm13 + vpmullw zmm9, zmm2, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r12] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r12+64], 1 + vmovdqu ymm7, YMMWORD PTR [r12+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r12+96], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [r12], ymm0 + vextracti64x4 YMMWORD PTR [r12+64], zmm0, 1 + vmovdqu YMMWORD PTR [r12+32], ymm1 + vextracti64x4 YMMWORD PTR [r12+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+192], 1 + vmovdqu ymm3, YMMWORD PTR [r9+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rcx+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rcx+192], 1 + vmovdqu ymm5, YMMWORD PTR [rcx+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rcx+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r15+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r15+192], 1 + vmovdqu ymm11, YMMWORD PTR [r15+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r15+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm13 + vpmullw zmm9, zmm2, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r12+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r12+192], 1 + vmovdqu ymm7, YMMWORD PTR [r12+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r12+224], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [r12+128], ymm0 + vextracti64x4 YMMWORD PTR [r12+192], zmm0, 1 + vmovdqu YMMWORD PTR [r12+160], ymm1 + vextracti64x4 YMMWORD PTR [r12+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+320], 1 + vmovdqu ymm3, YMMWORD PTR [r9+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rcx+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rcx+320], 1 + vmovdqu ymm5, YMMWORD PTR [rcx+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rcx+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r15+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r15+320], 1 + vmovdqu ymm11, YMMWORD PTR [r15+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r15+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm13 + vpmullw zmm9, zmm2, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r12+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r12+320], 1 + vmovdqu ymm7, YMMWORD PTR [r12+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r12+352], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [r12+256], ymm0 + vextracti64x4 YMMWORD PTR [r12+320], zmm0, 1 + vmovdqu YMMWORD PTR [r12+288], ymm1 + vextracti64x4 YMMWORD PTR [r12+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+448], 1 + vmovdqu ymm3, YMMWORD PTR [r9+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rcx+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rcx+448], 1 + vmovdqu ymm5, YMMWORD PTR [rcx+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rcx+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r15+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r15+448], 1 + vmovdqu ymm11, YMMWORD PTR [r15+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r15+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm13 + vpmullw zmm9, zmm2, zmm13 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r12+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r12+448], 1 + vmovdqu ymm7, YMMWORD PTR [r12+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r12+480], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [r12+384], ymm0 + vextracti64x4 YMMWORD PTR [r12+448], zmm0, 1 + vmovdqu YMMWORD PTR [r12+416], ymm1 + vextracti64x4 YMMWORD PTR [r12+480], zmm1, 1 + add r9, 512 + mov rcx, r14 + add r12, 512 + sub r10, 1 + jg L_keygen_avx512_acc + mov rdi, 1353 + vmovd xmm12, edi + vpbroadcastw zmm12, xmm12 + mov rdi, 20553 + vmovd xmm13, edi + vpbroadcastw zmm13, xmm13 + movsxd r10, eax + mov r12, rdx +L_keygen_avx512_tomont: + vmovdqu64 zmm0, [r12] + vmovdqu64 zmm1, [r12+64] + vmovdqu64 zmm2, [r12+128] + vmovdqu64 zmm3, [r12+192] + vpmullw zmm4, zmm0, zmm13 + vpmulhw zmm5, zmm0, zmm12 + vpmulhw zmm4, zmm4, zmm14 + vpsubw zmm0, zmm5, zmm4 + vpmullw zmm4, zmm1, zmm13 + vpmulhw zmm5, zmm1, zmm12 + vpmulhw zmm4, zmm4, zmm14 + vpsubw zmm1, zmm5, zmm4 + vpmullw zmm4, zmm2, zmm13 + vpmulhw zmm5, zmm2, zmm12 + vpmulhw zmm4, zmm4, zmm14 + vpsubw zmm2, zmm5, zmm4 + vpmullw zmm4, zmm3, zmm13 + vpmulhw zmm5, zmm3, zmm12 + vpmulhw zmm4, zmm4, zmm14 + vpsubw zmm3, zmm5, zmm4 + vmovdqu64 [r12], zmm0 + vmovdqu64 [r12+64], zmm1 + vmovdqu64 [r12+128], zmm2 + vmovdqu64 [r12+192], zmm3 + vmovdqu64 zmm0, [r12+256] + vmovdqu64 zmm1, [r12+320] + vmovdqu64 zmm2, [r12+384] + vmovdqu64 zmm3, [r12+448] + vpmullw zmm4, zmm0, zmm13 + vpmulhw zmm5, zmm0, zmm12 + vpmulhw zmm4, zmm4, zmm14 + vpsubw zmm0, zmm5, zmm4 + vpmullw zmm4, zmm1, zmm13 + vpmulhw zmm5, zmm1, zmm12 + vpmulhw zmm4, zmm4, zmm14 + vpsubw zmm1, zmm5, zmm4 + vpmullw zmm4, zmm2, zmm13 + vpmulhw zmm5, zmm2, zmm12 + vpmulhw zmm4, zmm4, zmm14 + vpsubw zmm2, zmm5, zmm4 + vpmullw zmm4, zmm3, zmm13 + vpmulhw zmm5, zmm3, zmm12 + vpmulhw zmm4, zmm4, zmm14 + vpsubw zmm3, zmm5, zmm4 + vmovdqu64 [r12+256], zmm0 + vmovdqu64 [r12+320], zmm1 + vmovdqu64 [r12+384], zmm2 + vmovdqu64 [r12+448], zmm3 + add r12, 512 + sub r10, 1 + jg L_keygen_avx512_tomont + movsxd r10, eax +L_keygen_avx512_err: + cmp r10, 2 + jl L_keygen_avx512_err_odd + mov r12, r8 + add r12, 512 + mov r13, rdx + add r13, 512 + mov r15, QWORD PTR [ptr_L_mlkem_avx512_zetas] + vmovdqu64 ymm0, [r8] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [r12], 1 + vmovdqu64 ymm1, [r8+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [r12+32], 1 + vmovdqu64 ymm2, [r8+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r12+64], 1 + vmovdqu64 ymm3, [r8+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r12+96], 1 + vmovdqu64 ymm4, [r8+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r12+128], 1 + vmovdqu64 ymm5, [r8+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r12+160], 1 + vmovdqu64 ymm6, [r8+192] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r12+192], 1 + vmovdqu64 ymm7, [r8+224] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r12+224], 1 + vmovdqu64 ymm19, [r8+256] + vinserti64x4 zmm19, zmm19, YMMWORD PTR [r12+256], 1 + vmovdqu64 ymm20, [r8+288] + vinserti64x4 zmm20, zmm20, YMMWORD PTR [r12+288], 1 + vmovdqu64 ymm21, [r8+320] + vinserti64x4 zmm21, zmm21, YMMWORD PTR [r12+320], 1 + vmovdqu64 ymm22, [r8+352] + vinserti64x4 zmm22, zmm22, YMMWORD PTR [r12+352], 1 + vmovdqu64 ymm23, [r8+384] + vinserti64x4 zmm23, zmm23, YMMWORD PTR [r12+384], 1 + vmovdqu64 ymm24, [r8+416] + vinserti64x4 zmm24, zmm24, YMMWORD PTR [r12+416], 1 + vmovdqu64 ymm25, [r8+448] + vinserti64x4 zmm25, zmm25, YMMWORD PTR [r12+448], 1 + vmovdqu64 ymm26, [r8+480] + vinserti64x4 zmm26, zmm26, YMMWORD PTR [r12+480], 1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+32] + vpmullw zmm8, zmm19, zmm12 + vpmullw zmm9, zmm20, zmm12 + vpmulhw zmm19, zmm19, zmm10 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm19, zmm8 + vpsubw zmm9, zmm20, zmm9 + vpsubw zmm19, zmm0, zmm8 + vpsubw zmm20, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm2, zmm8 + vpsubw zmm22, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm4, zmm8 + vpsubw zmm24, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm6, zmm8 + vpsubw zmm26, zmm7, zmm9 + vpaddw zmm6, zmm6, zmm8 + vpaddw zmm7, zmm7, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+64] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+96] + vpmullw zmm8, zmm4, zmm12 + vpmullw zmm9, zmm5, zmm12 + vpmulhw zmm4, zmm4, zmm10 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm4, zmm8 + vpsubw zmm9, zmm5, zmm9 + vpsubw zmm4, zmm0, zmm8 + vpsubw zmm5, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm2, zmm8 + vpsubw zmm7, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+128] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+160] + vpmullw zmm8, zmm2, zmm12 + vpmullw zmm9, zmm3, zmm12 + vpmulhw zmm2, zmm2, zmm10 + vpmulhw zmm3, zmm3, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm2, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm2, zmm0, zmm8 + vpsubw zmm3, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+192] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+224] + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm4, zmm8 + vpsubw zmm7, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+256] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+288] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+320] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+352] + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+384] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+416] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+448] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+480] + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm0, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+512] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm1, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+544] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm2, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+576] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm3, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+608] + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm0, zmm1, zmm0 + vpsubw zmm2, zmm3, zmm2 + vpsubw zmm1, zmm8, zmm0 + vpsubw zmm3, zmm9, zmm2 + vpaddw zmm8, zmm8, zmm0 + vpaddw zmm9, zmm9, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+640] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+672] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+704] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+736] + vpunpcklqdq zmm0, zmm8, zmm1 + vpunpckhqdq zmm1, zmm8, zmm1 + vpunpcklqdq zmm2, zmm9, zmm3 + vpunpckhqdq zmm3, zmm9, zmm3 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm4, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+768] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm5, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+800] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm6, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+832] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm7, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+864] + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm4, zmm5, zmm4 + vpsubw zmm6, zmm7, zmm6 + vpsubw zmm5, zmm8, zmm4 + vpsubw zmm7, zmm9, zmm6 + vpaddw zmm8, zmm8, zmm4 + vpaddw zmm9, zmm9, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+896] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+928] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+960] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+992] + vpunpcklqdq zmm4, zmm8, zmm5 + vpunpckhqdq zmm5, zmm8, zmm5 + vpunpcklqdq zmm6, zmm9, zmm7 + vpunpckhqdq zmm7, zmm9, zmm7 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1024] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1056] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1088] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1120] + vpsllq zmm8, zmm1, 32 + vpsrlq zmm9, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm8 + vpblendmd zmm1{k2}, zmm1, zmm9 + vpsllq zmm8, zmm3, 32 + vpsrlq zmm9, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm8 + vpblendmd zmm3{k2}, zmm3, zmm9 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1152] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1184] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1216] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1248] + vpsllq zmm8, zmm5, 32 + vpsrlq zmm9, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm8 + vpblendmd zmm5{k2}, zmm5, zmm9 + vpsllq zmm8, zmm7, 32 + vpsrlq zmm9, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm8 + vpblendmd zmm7{k2}, zmm7, zmm9 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vpunpckldq zmm8, zmm0, zmm1 + vpunpckhdq zmm9, zmm0, zmm1 + vmovdqa64 zmm0, zmm17 + vpermi2q zmm0, zmm8, zmm9 + vmovdqa64 zmm1, zmm18 + vpermi2q zmm1, zmm8, zmm9 + vpunpckldq zmm8, zmm2, zmm3 + vpunpckhdq zmm9, zmm2, zmm3 + vmovdqa64 zmm2, zmm17 + vpermi2q zmm2, zmm8, zmm9 + vmovdqa64 zmm3, zmm18 + vpermi2q zmm3, zmm8, zmm9 + vpunpckldq zmm8, zmm4, zmm5 + vpunpckhdq zmm9, zmm4, zmm5 + vmovdqa64 zmm4, zmm17 + vpermi2q zmm4, zmm8, zmm9 + vmovdqa64 zmm5, zmm18 + vpermi2q zmm5, zmm8, zmm9 + vpunpckldq zmm8, zmm6, zmm7 + vpunpckhdq zmm9, zmm6, zmm7 + vmovdqa64 zmm6, zmm17 + vpermi2q zmm6, zmm8, zmm9 + vmovdqa64 zmm7, zmm18 + vpermi2q zmm7, zmm8, zmm9 + vmovdqu64 ymm8, [rdx] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13], 1 + vmovdqu64 ymm9, [rdx+32] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+32], 1 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmulhw zmm8, zmm0, zmm15 + vpmulhw zmm9, zmm1, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm0, zmm8 + vpsubw zmm9, zmm1, zmm9 + vmovdqu64 [rdx], ymm8 + vextracti64x4 YMMWORD PTR [r13], zmm8, 1 + vmovdqu64 [rdx+32], ymm9 + vextracti64x4 YMMWORD PTR [r13+32], zmm9, 1 + vmovdqu64 ymm8, [rdx+64] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13+64], 1 + vmovdqu64 ymm9, [rdx+96] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+96], 1 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vpmulhw zmm8, zmm2, zmm15 + vpmulhw zmm9, zmm3, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm2, zmm8 + vpsubw zmm9, zmm3, zmm9 + vmovdqu64 [rdx+64], ymm8 + vextracti64x4 YMMWORD PTR [r13+64], zmm8, 1 + vmovdqu64 [rdx+96], ymm9 + vextracti64x4 YMMWORD PTR [r13+96], zmm9, 1 + vmovdqu64 ymm8, [rdx+128] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13+128], 1 + vmovdqu64 ymm9, [rdx+160] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+160], 1 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vpmulhw zmm8, zmm4, zmm15 + vpmulhw zmm9, zmm5, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm4, zmm8 + vpsubw zmm9, zmm5, zmm9 + vmovdqu64 [rdx+128], ymm8 + vextracti64x4 YMMWORD PTR [r13+128], zmm8, 1 + vmovdqu64 [rdx+160], ymm9 + vextracti64x4 YMMWORD PTR [r13+160], zmm9, 1 + vmovdqu64 ymm8, [rdx+192] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13+192], 1 + vmovdqu64 ymm9, [rdx+224] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+224], 1 + vpaddw zmm6, zmm6, zmm8 + vpaddw zmm7, zmm7, zmm9 + vpmulhw zmm8, zmm6, zmm15 + vpmulhw zmm9, zmm7, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vmovdqu64 [rdx+192], ymm8 + vextracti64x4 YMMWORD PTR [r13+192], zmm8, 1 + vmovdqu64 [rdx+224], ymm9 + vextracti64x4 YMMWORD PTR [r13+224], zmm9, 1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1280] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1312] + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm19, zmm8 + vpsubw zmm24, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm21, zmm8 + vpsubw zmm26, zmm22, zmm9 + vpaddw zmm21, zmm21, zmm8 + vpaddw zmm22, zmm22, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1344] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1376] + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm19, zmm8 + vpsubw zmm22, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1408] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1440] + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm23, zmm8 + vpsubw zmm26, zmm24, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm24, zmm24, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1472] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1504] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1536] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1568] + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1600] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1632] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1664] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1696] + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm19, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1728] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm19, zmm20 + vmovdqa64 zmm20, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1760] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm21, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1792] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm21, zmm22 + vmovdqa64 zmm22, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1824] + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm19, zmm20, zmm19 + vpsubw zmm21, zmm22, zmm21 + vpsubw zmm20, zmm8, zmm19 + vpsubw zmm22, zmm9, zmm21 + vpaddw zmm8, zmm8, zmm19 + vpaddw zmm9, zmm9, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1856] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1888] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1920] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1952] + vpunpcklqdq zmm19, zmm8, zmm20 + vpunpckhqdq zmm20, zmm8, zmm20 + vpunpcklqdq zmm21, zmm9, zmm22 + vpunpckhqdq zmm22, zmm9, zmm22 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm23, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1984] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm23, zmm24 + vmovdqa64 zmm24, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2016] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm25, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2048] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm25, zmm26 + vmovdqa64 zmm26, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2080] + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm23, zmm24, zmm23 + vpsubw zmm25, zmm26, zmm25 + vpsubw zmm24, zmm8, zmm23 + vpsubw zmm26, zmm9, zmm25 + vpaddw zmm8, zmm8, zmm23 + vpaddw zmm9, zmm9, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+2112] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2144] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2176] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2208] + vpunpcklqdq zmm23, zmm8, zmm24 + vpunpckhqdq zmm24, zmm8, zmm24 + vpunpcklqdq zmm25, zmm9, zmm26 + vpunpckhqdq zmm26, zmm9, zmm26 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+2240] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2272] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2304] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2336] + vpsllq zmm8, zmm20, 32 + vpsrlq zmm9, zmm19, 32 + vpblendmd zmm19{k1}, zmm19, zmm8 + vpblendmd zmm20{k2}, zmm20, zmm9 + vpsllq zmm8, zmm22, 32 + vpsrlq zmm9, zmm21, 32 + vpblendmd zmm21{k1}, zmm21, zmm8 + vpblendmd zmm22{k2}, zmm22, zmm9 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+2368] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2400] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2432] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2464] + vpsllq zmm8, zmm24, 32 + vpsrlq zmm9, zmm23, 32 + vpblendmd zmm23{k1}, zmm23, zmm8 + vpblendmd zmm24{k2}, zmm24, zmm9 + vpsllq zmm8, zmm26, 32 + vpsrlq zmm9, zmm25, 32 + vpblendmd zmm25{k1}, zmm25, zmm8 + vpblendmd zmm26{k2}, zmm26, zmm9 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vpunpckldq zmm8, zmm19, zmm20 + vpunpckhdq zmm9, zmm19, zmm20 + vmovdqa64 zmm19, zmm17 + vpermi2q zmm19, zmm8, zmm9 + vmovdqa64 zmm20, zmm18 + vpermi2q zmm20, zmm8, zmm9 + vpunpckldq zmm8, zmm21, zmm22 + vpunpckhdq zmm9, zmm21, zmm22 + vmovdqa64 zmm21, zmm17 + vpermi2q zmm21, zmm8, zmm9 + vmovdqa64 zmm22, zmm18 + vpermi2q zmm22, zmm8, zmm9 + vpunpckldq zmm8, zmm23, zmm24 + vpunpckhdq zmm9, zmm23, zmm24 + vmovdqa64 zmm23, zmm17 + vpermi2q zmm23, zmm8, zmm9 + vmovdqa64 zmm24, zmm18 + vpermi2q zmm24, zmm8, zmm9 + vpunpckldq zmm8, zmm25, zmm26 + vpunpckhdq zmm9, zmm25, zmm26 + vmovdqa64 zmm25, zmm17 + vpermi2q zmm25, zmm8, zmm9 + vmovdqa64 zmm26, zmm18 + vpermi2q zmm26, zmm8, zmm9 + vmovdqu64 ymm8, [rdx+256] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13+256], 1 + vmovdqu64 ymm9, [rdx+288] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+288], 1 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vpmulhw zmm8, zmm19, zmm15 + vpmulhw zmm9, zmm20, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm19, zmm8 + vpsubw zmm9, zmm20, zmm9 + vmovdqu64 [rdx+256], ymm8 + vextracti64x4 YMMWORD PTR [r13+256], zmm8, 1 + vmovdqu64 [rdx+288], ymm9 + vextracti64x4 YMMWORD PTR [r13+288], zmm9, 1 + vmovdqu64 ymm8, [rdx+320] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13+320], 1 + vmovdqu64 ymm9, [rdx+352] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+352], 1 + vpaddw zmm21, zmm21, zmm8 + vpaddw zmm22, zmm22, zmm9 + vpmulhw zmm8, zmm21, zmm15 + vpmulhw zmm9, zmm22, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vmovdqu64 [rdx+320], ymm8 + vextracti64x4 YMMWORD PTR [r13+320], zmm8, 1 + vmovdqu64 [rdx+352], ymm9 + vextracti64x4 YMMWORD PTR [r13+352], zmm9, 1 + vmovdqu64 ymm8, [rdx+384] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13+384], 1 + vmovdqu64 ymm9, [rdx+416] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+416], 1 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm24, zmm24, zmm9 + vpmulhw zmm8, zmm23, zmm15 + vpmulhw zmm9, zmm24, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vmovdqu64 [rdx+384], ymm8 + vextracti64x4 YMMWORD PTR [r13+384], zmm8, 1 + vmovdqu64 [rdx+416], ymm9 + vextracti64x4 YMMWORD PTR [r13+416], zmm9, 1 + vmovdqu64 ymm8, [rdx+448] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13+448], 1 + vmovdqu64 ymm9, [rdx+480] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+480], 1 + vpaddw zmm25, zmm25, zmm8 + vpaddw zmm26, zmm26, zmm9 + vpmulhw zmm8, zmm25, zmm15 + vpmulhw zmm9, zmm26, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vmovdqu64 [rdx+448], ymm8 + vextracti64x4 YMMWORD PTR [r13+448], zmm8, 1 + vmovdqu64 [rdx+480], ymm9 + vextracti64x4 YMMWORD PTR [r13+480], zmm9, 1 + add r8, 1024 + add rdx, 1024 + sub r10, 2 + jmp L_keygen_avx512_err +L_keygen_avx512_err_odd: + cmp r10, 1 + jne L_keygen_avx512_err_done + lea r12, QWORD PTR [rsp] + mov r13, r12 + add r13, 512 + mov r15, QWORD PTR [ptr_L_mlkem_avx512_zetas] + vmovdqu64 ymm0, [r8] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [r12], 1 + vmovdqu64 ymm1, [r8+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [r12+32], 1 + vmovdqu64 ymm2, [r8+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r12+64], 1 + vmovdqu64 ymm3, [r8+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r12+96], 1 + vmovdqu64 ymm4, [r8+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r12+128], 1 + vmovdqu64 ymm5, [r8+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r12+160], 1 + vmovdqu64 ymm6, [r8+192] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r12+192], 1 + vmovdqu64 ymm7, [r8+224] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r12+224], 1 + vmovdqu64 ymm19, [r8+256] + vinserti64x4 zmm19, zmm19, YMMWORD PTR [r12+256], 1 + vmovdqu64 ymm20, [r8+288] + vinserti64x4 zmm20, zmm20, YMMWORD PTR [r12+288], 1 + vmovdqu64 ymm21, [r8+320] + vinserti64x4 zmm21, zmm21, YMMWORD PTR [r12+320], 1 + vmovdqu64 ymm22, [r8+352] + vinserti64x4 zmm22, zmm22, YMMWORD PTR [r12+352], 1 + vmovdqu64 ymm23, [r8+384] + vinserti64x4 zmm23, zmm23, YMMWORD PTR [r12+384], 1 + vmovdqu64 ymm24, [r8+416] + vinserti64x4 zmm24, zmm24, YMMWORD PTR [r12+416], 1 + vmovdqu64 ymm25, [r8+448] + vinserti64x4 zmm25, zmm25, YMMWORD PTR [r12+448], 1 + vmovdqu64 ymm26, [r8+480] + vinserti64x4 zmm26, zmm26, YMMWORD PTR [r12+480], 1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+32] + vpmullw zmm8, zmm19, zmm12 + vpmullw zmm9, zmm20, zmm12 + vpmulhw zmm19, zmm19, zmm10 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm19, zmm8 + vpsubw zmm9, zmm20, zmm9 + vpsubw zmm19, zmm0, zmm8 + vpsubw zmm20, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm2, zmm8 + vpsubw zmm22, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm4, zmm8 + vpsubw zmm24, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm6, zmm8 + vpsubw zmm26, zmm7, zmm9 + vpaddw zmm6, zmm6, zmm8 + vpaddw zmm7, zmm7, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+64] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+96] + vpmullw zmm8, zmm4, zmm12 + vpmullw zmm9, zmm5, zmm12 + vpmulhw zmm4, zmm4, zmm10 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm4, zmm8 + vpsubw zmm9, zmm5, zmm9 + vpsubw zmm4, zmm0, zmm8 + vpsubw zmm5, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm2, zmm8 + vpsubw zmm7, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+128] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+160] + vpmullw zmm8, zmm2, zmm12 + vpmullw zmm9, zmm3, zmm12 + vpmulhw zmm2, zmm2, zmm10 + vpmulhw zmm3, zmm3, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm2, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm2, zmm0, zmm8 + vpsubw zmm3, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+192] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+224] + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm4, zmm8 + vpsubw zmm7, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+256] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+288] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+320] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+352] + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+384] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+416] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+448] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+480] + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm0, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+512] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm1, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+544] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm2, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+576] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm3, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+608] + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm0, zmm1, zmm0 + vpsubw zmm2, zmm3, zmm2 + vpsubw zmm1, zmm8, zmm0 + vpsubw zmm3, zmm9, zmm2 + vpaddw zmm8, zmm8, zmm0 + vpaddw zmm9, zmm9, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+640] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+672] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+704] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+736] + vpunpcklqdq zmm0, zmm8, zmm1 + vpunpckhqdq zmm1, zmm8, zmm1 + vpunpcklqdq zmm2, zmm9, zmm3 + vpunpckhqdq zmm3, zmm9, zmm3 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm4, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+768] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm5, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+800] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm6, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+832] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm7, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+864] + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm4, zmm5, zmm4 + vpsubw zmm6, zmm7, zmm6 + vpsubw zmm5, zmm8, zmm4 + vpsubw zmm7, zmm9, zmm6 + vpaddw zmm8, zmm8, zmm4 + vpaddw zmm9, zmm9, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+896] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+928] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+960] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+992] + vpunpcklqdq zmm4, zmm8, zmm5 + vpunpckhqdq zmm5, zmm8, zmm5 + vpunpcklqdq zmm6, zmm9, zmm7 + vpunpckhqdq zmm7, zmm9, zmm7 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1024] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1056] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1088] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1120] + vpsllq zmm8, zmm1, 32 + vpsrlq zmm9, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm8 + vpblendmd zmm1{k2}, zmm1, zmm9 + vpsllq zmm8, zmm3, 32 + vpsrlq zmm9, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm8 + vpblendmd zmm3{k2}, zmm3, zmm9 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1152] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1184] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1216] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1248] + vpsllq zmm8, zmm5, 32 + vpsrlq zmm9, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm8 + vpblendmd zmm5{k2}, zmm5, zmm9 + vpsllq zmm8, zmm7, 32 + vpsrlq zmm9, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm8 + vpblendmd zmm7{k2}, zmm7, zmm9 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vpunpckldq zmm8, zmm0, zmm1 + vpunpckhdq zmm9, zmm0, zmm1 + vmovdqa64 zmm0, zmm17 + vpermi2q zmm0, zmm8, zmm9 + vmovdqa64 zmm1, zmm18 + vpermi2q zmm1, zmm8, zmm9 + vpunpckldq zmm8, zmm2, zmm3 + vpunpckhdq zmm9, zmm2, zmm3 + vmovdqa64 zmm2, zmm17 + vpermi2q zmm2, zmm8, zmm9 + vmovdqa64 zmm3, zmm18 + vpermi2q zmm3, zmm8, zmm9 + vpunpckldq zmm8, zmm4, zmm5 + vpunpckhdq zmm9, zmm4, zmm5 + vmovdqa64 zmm4, zmm17 + vpermi2q zmm4, zmm8, zmm9 + vmovdqa64 zmm5, zmm18 + vpermi2q zmm5, zmm8, zmm9 + vpunpckldq zmm8, zmm6, zmm7 + vpunpckhdq zmm9, zmm6, zmm7 + vmovdqa64 zmm6, zmm17 + vpermi2q zmm6, zmm8, zmm9 + vmovdqa64 zmm7, zmm18 + vpermi2q zmm7, zmm8, zmm9 + vmovdqu64 ymm8, [rdx] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13], 1 + vmovdqu64 ymm9, [rdx+32] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+32], 1 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmulhw zmm8, zmm0, zmm15 + vpmulhw zmm9, zmm1, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm0, zmm8 + vpsubw zmm9, zmm1, zmm9 + vmovdqu64 [rdx], ymm8 + vextracti64x4 YMMWORD PTR [r13], zmm8, 1 + vmovdqu64 [rdx+32], ymm9 + vextracti64x4 YMMWORD PTR [r13+32], zmm9, 1 + vmovdqu64 ymm8, [rdx+64] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13+64], 1 + vmovdqu64 ymm9, [rdx+96] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+96], 1 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vpmulhw zmm8, zmm2, zmm15 + vpmulhw zmm9, zmm3, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm2, zmm8 + vpsubw zmm9, zmm3, zmm9 + vmovdqu64 [rdx+64], ymm8 + vextracti64x4 YMMWORD PTR [r13+64], zmm8, 1 + vmovdqu64 [rdx+96], ymm9 + vextracti64x4 YMMWORD PTR [r13+96], zmm9, 1 + vmovdqu64 ymm8, [rdx+128] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13+128], 1 + vmovdqu64 ymm9, [rdx+160] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+160], 1 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vpmulhw zmm8, zmm4, zmm15 + vpmulhw zmm9, zmm5, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm4, zmm8 + vpsubw zmm9, zmm5, zmm9 + vmovdqu64 [rdx+128], ymm8 + vextracti64x4 YMMWORD PTR [r13+128], zmm8, 1 + vmovdqu64 [rdx+160], ymm9 + vextracti64x4 YMMWORD PTR [r13+160], zmm9, 1 + vmovdqu64 ymm8, [rdx+192] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13+192], 1 + vmovdqu64 ymm9, [rdx+224] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+224], 1 + vpaddw zmm6, zmm6, zmm8 + vpaddw zmm7, zmm7, zmm9 + vpmulhw zmm8, zmm6, zmm15 + vpmulhw zmm9, zmm7, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vmovdqu64 [rdx+192], ymm8 + vextracti64x4 YMMWORD PTR [r13+192], zmm8, 1 + vmovdqu64 [rdx+224], ymm9 + vextracti64x4 YMMWORD PTR [r13+224], zmm9, 1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1280] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1312] + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm19, zmm8 + vpsubw zmm24, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm21, zmm8 + vpsubw zmm26, zmm22, zmm9 + vpaddw zmm21, zmm21, zmm8 + vpaddw zmm22, zmm22, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1344] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1376] + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm19, zmm8 + vpsubw zmm22, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1408] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1440] + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm23, zmm8 + vpsubw zmm26, zmm24, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm24, zmm24, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1472] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1504] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1536] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1568] + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1600] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1632] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1664] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1696] + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm19, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1728] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm19, zmm20 + vmovdqa64 zmm20, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1760] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm21, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1792] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm21, zmm22 + vmovdqa64 zmm22, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1824] + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm19, zmm20, zmm19 + vpsubw zmm21, zmm22, zmm21 + vpsubw zmm20, zmm8, zmm19 + vpsubw zmm22, zmm9, zmm21 + vpaddw zmm8, zmm8, zmm19 + vpaddw zmm9, zmm9, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1856] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+1888] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+1920] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+1952] + vpunpcklqdq zmm19, zmm8, zmm20 + vpunpckhqdq zmm20, zmm8, zmm20 + vpunpcklqdq zmm21, zmm9, zmm22 + vpunpckhqdq zmm22, zmm9, zmm22 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm23, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+1984] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm23, zmm24 + vmovdqa64 zmm24, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2016] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm25, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2048] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm25, zmm26 + vmovdqa64 zmm26, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2080] + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm23, zmm24, zmm23 + vpsubw zmm25, zmm26, zmm25 + vpsubw zmm24, zmm8, zmm23 + vpsubw zmm26, zmm9, zmm25 + vpaddw zmm8, zmm8, zmm23 + vpaddw zmm9, zmm9, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+2112] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2144] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2176] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2208] + vpunpcklqdq zmm23, zmm8, zmm24 + vpunpckhqdq zmm24, zmm8, zmm24 + vpunpcklqdq zmm25, zmm9, zmm26 + vpunpckhqdq zmm26, zmm9, zmm26 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+2240] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2272] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2304] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2336] + vpsllq zmm8, zmm20, 32 + vpsrlq zmm9, zmm19, 32 + vpblendmd zmm19{k1}, zmm19, zmm8 + vpblendmd zmm20{k2}, zmm20, zmm9 + vpsllq zmm8, zmm22, 32 + vpsrlq zmm9, zmm21, 32 + vpblendmd zmm21{k1}, zmm21, zmm8 + vpblendmd zmm22{k2}, zmm22, zmm9 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r15+2368] + vbroadcasti64x4 zmm12, YMMWORD PTR [r15+2400] + vbroadcasti64x4 zmm11, YMMWORD PTR [r15+2432] + vbroadcasti64x4 zmm13, YMMWORD PTR [r15+2464] + vpsllq zmm8, zmm24, 32 + vpsrlq zmm9, zmm23, 32 + vpblendmd zmm23{k1}, zmm23, zmm8 + vpblendmd zmm24{k2}, zmm24, zmm9 + vpsllq zmm8, zmm26, 32 + vpsrlq zmm9, zmm25, 32 + vpblendmd zmm25{k1}, zmm25, zmm8 + vpblendmd zmm26{k2}, zmm26, zmm9 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vpunpckldq zmm8, zmm19, zmm20 + vpunpckhdq zmm9, zmm19, zmm20 + vmovdqa64 zmm19, zmm17 + vpermi2q zmm19, zmm8, zmm9 + vmovdqa64 zmm20, zmm18 + vpermi2q zmm20, zmm8, zmm9 + vpunpckldq zmm8, zmm21, zmm22 + vpunpckhdq zmm9, zmm21, zmm22 + vmovdqa64 zmm21, zmm17 + vpermi2q zmm21, zmm8, zmm9 + vmovdqa64 zmm22, zmm18 + vpermi2q zmm22, zmm8, zmm9 + vpunpckldq zmm8, zmm23, zmm24 + vpunpckhdq zmm9, zmm23, zmm24 + vmovdqa64 zmm23, zmm17 + vpermi2q zmm23, zmm8, zmm9 + vmovdqa64 zmm24, zmm18 + vpermi2q zmm24, zmm8, zmm9 + vpunpckldq zmm8, zmm25, zmm26 + vpunpckhdq zmm9, zmm25, zmm26 + vmovdqa64 zmm25, zmm17 + vpermi2q zmm25, zmm8, zmm9 + vmovdqa64 zmm26, zmm18 + vpermi2q zmm26, zmm8, zmm9 + vmovdqu64 ymm8, [rdx+256] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13+256], 1 + vmovdqu64 ymm9, [rdx+288] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+288], 1 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vpmulhw zmm8, zmm19, zmm15 + vpmulhw zmm9, zmm20, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm19, zmm8 + vpsubw zmm9, zmm20, zmm9 + vmovdqu64 [rdx+256], ymm8 + vextracti64x4 YMMWORD PTR [r13+256], zmm8, 1 + vmovdqu64 [rdx+288], ymm9 + vextracti64x4 YMMWORD PTR [r13+288], zmm9, 1 + vmovdqu64 ymm8, [rdx+320] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13+320], 1 + vmovdqu64 ymm9, [rdx+352] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+352], 1 + vpaddw zmm21, zmm21, zmm8 + vpaddw zmm22, zmm22, zmm9 + vpmulhw zmm8, zmm21, zmm15 + vpmulhw zmm9, zmm22, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vmovdqu64 [rdx+320], ymm8 + vextracti64x4 YMMWORD PTR [r13+320], zmm8, 1 + vmovdqu64 [rdx+352], ymm9 + vextracti64x4 YMMWORD PTR [r13+352], zmm9, 1 + vmovdqu64 ymm8, [rdx+384] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13+384], 1 + vmovdqu64 ymm9, [rdx+416] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+416], 1 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm24, zmm24, zmm9 + vpmulhw zmm8, zmm23, zmm15 + vpmulhw zmm9, zmm24, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vmovdqu64 [rdx+384], ymm8 + vextracti64x4 YMMWORD PTR [r13+384], zmm8, 1 + vmovdqu64 [rdx+416], ymm9 + vextracti64x4 YMMWORD PTR [r13+416], zmm9, 1 + vmovdqu64 ymm8, [rdx+448] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [r13+448], 1 + vmovdqu64 ymm9, [rdx+480] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [r13+480], 1 + vpaddw zmm25, zmm25, zmm8 + vpaddw zmm26, zmm26, zmm9 + vpmulhw zmm8, zmm25, zmm15 + vpmulhw zmm9, zmm26, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vmovdqu64 [rdx+448], ymm8 + vextracti64x4 YMMWORD PTR [r13+448], zmm8, 1 + vmovdqu64 [rdx+480], ymm9 + vextracti64x4 YMMWORD PTR [r13+480], zmm9, 1 +L_keygen_avx512_err_done: + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+1024] + vmovdqu xmm7, OWORD PTR [rsp+1040] + vmovdqu xmm8, OWORD PTR [rsp+1056] + vmovdqu xmm9, OWORD PTR [rsp+1072] + vmovdqu xmm10, OWORD PTR [rsp+1088] + vmovdqu xmm11, OWORD PTR [rsp+1104] + vmovdqu xmm12, OWORD PTR [rsp+1120] + vmovdqu xmm13, OWORD PTR [rsp+1136] + vmovdqu xmm14, OWORD PTR [rsp+1152] + vmovdqu xmm15, OWORD PTR [rsp+1168] + add rsp, 1184 + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + ret +mlkem_keygen_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +mlkem_encapsulate_avx512 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + push rsi + push rbx + push rbp + mov rax, QWORD PTR [rsp+104] + mov r10, QWORD PTR [rsp+112] + mov r11, QWORD PTR [rsp+120] + mov r12, QWORD PTR [rsp+128] + mov r13, QWORD PTR [rsp+136] + sub rsp, 216 + vmovdqu OWORD PTR [rsp+56], xmm6 + vmovdqu OWORD PTR [rsp+72], xmm7 + vmovdqu OWORD PTR [rsp+88], xmm8 + vmovdqu OWORD PTR [rsp+104], xmm9 + vmovdqu OWORD PTR [rsp+120], xmm10 + vmovdqu OWORD PTR [rsp+136], xmm11 + vmovdqu OWORD PTR [rsp+152], xmm12 + vmovdqu OWORD PTR [rsp+168], xmm13 + vmovdqu OWORD PTR [rsp+184], xmm14 + vmovdqu OWORD PTR [rsp+200], xmm15 + mov r15, 3329 + vmovd xmm14, r15d + vpbroadcastw zmm14, xmm14 + mov r15, 20159 + vmovd xmm15, r15d + vpbroadcastw zmm15, xmm15 + mov r15d, 43690 + kmovw k1, r15d + mov r15d, 21845 + kmovw k2, r15d + mov r15d, 2863311530 + kmovd k3, r15d + mov r15d, 1431655765 + kmovd k4, r15d + vmovdqu64 zmm17, ptr_L_mlkem_avx512_perm20 + vmovdqu64 zmm18, ptr_L_mlkem_avx512_perm31 + mov rbx, rax + movsxd r15, r13d + mov rdi, rax +L_encap_avx512_sp: + cmp r15, 2 + jl L_encap_avx512_sp_odd + mov rsi, rdi + add rsi, 512 + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas] + vmovdqu64 ymm0, [rdi] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rsi], 1 + vmovdqu64 ymm1, [rdi+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rsi+32], 1 + vmovdqu64 ymm2, [rdi+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rsi+64], 1 + vmovdqu64 ymm3, [rdi+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rsi+96], 1 + vmovdqu64 ymm4, [rdi+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rsi+128], 1 + vmovdqu64 ymm5, [rdi+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rsi+160], 1 + vmovdqu64 ymm6, [rdi+192] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rsi+192], 1 + vmovdqu64 ymm7, [rdi+224] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rsi+224], 1 + vmovdqu64 ymm19, [rdi+256] + vinserti64x4 zmm19, zmm19, YMMWORD PTR [rsi+256], 1 + vmovdqu64 ymm20, [rdi+288] + vinserti64x4 zmm20, zmm20, YMMWORD PTR [rsi+288], 1 + vmovdqu64 ymm21, [rdi+320] + vinserti64x4 zmm21, zmm21, YMMWORD PTR [rsi+320], 1 + vmovdqu64 ymm22, [rdi+352] + vinserti64x4 zmm22, zmm22, YMMWORD PTR [rsi+352], 1 + vmovdqu64 ymm23, [rdi+384] + vinserti64x4 zmm23, zmm23, YMMWORD PTR [rsi+384], 1 + vmovdqu64 ymm24, [rdi+416] + vinserti64x4 zmm24, zmm24, YMMWORD PTR [rsi+416], 1 + vmovdqu64 ymm25, [rdi+448] + vinserti64x4 zmm25, zmm25, YMMWORD PTR [rsi+448], 1 + vmovdqu64 ymm26, [rdi+480] + vinserti64x4 zmm26, zmm26, YMMWORD PTR [rsi+480], 1 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+32] + vpmullw zmm8, zmm19, zmm12 + vpmullw zmm9, zmm20, zmm12 + vpmulhw zmm19, zmm19, zmm10 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm19, zmm8 + vpsubw zmm9, zmm20, zmm9 + vpsubw zmm19, zmm0, zmm8 + vpsubw zmm20, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm2, zmm8 + vpsubw zmm22, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm4, zmm8 + vpsubw zmm24, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm6, zmm8 + vpsubw zmm26, zmm7, zmm9 + vpaddw zmm6, zmm6, zmm8 + vpaddw zmm7, zmm7, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+64] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+96] + vpmullw zmm8, zmm4, zmm12 + vpmullw zmm9, zmm5, zmm12 + vpmulhw zmm4, zmm4, zmm10 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm4, zmm8 + vpsubw zmm9, zmm5, zmm9 + vpsubw zmm4, zmm0, zmm8 + vpsubw zmm5, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm2, zmm8 + vpsubw zmm7, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1280] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1312] + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm19, zmm8 + vpsubw zmm24, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm21, zmm8 + vpsubw zmm26, zmm22, zmm9 + vpaddw zmm21, zmm21, zmm8 + vpaddw zmm22, zmm22, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+128] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+160] + vpmullw zmm8, zmm2, zmm12 + vpmullw zmm9, zmm3, zmm12 + vpmulhw zmm2, zmm2, zmm10 + vpmulhw zmm3, zmm3, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm2, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm2, zmm0, zmm8 + vpsubw zmm3, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1344] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1376] + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm19, zmm8 + vpsubw zmm22, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+192] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+224] + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm4, zmm8 + vpsubw zmm7, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1408] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1440] + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm23, zmm8 + vpsubw zmm26, zmm24, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm24, zmm24, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+256] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+288] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+320] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+352] + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1472] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1504] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1536] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1568] + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+384] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+416] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+448] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+480] + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1600] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1632] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1664] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1696] + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm0, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+512] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm1, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+544] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm2, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+576] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm3, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+608] + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm0, zmm1, zmm0 + vpsubw zmm2, zmm3, zmm2 + vpsubw zmm1, zmm8, zmm0 + vpsubw zmm3, zmm9, zmm2 + vpaddw zmm8, zmm8, zmm0 + vpaddw zmm9, zmm9, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+640] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+672] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+704] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+736] + vpunpcklqdq zmm0, zmm8, zmm1 + vpunpckhqdq zmm1, zmm8, zmm1 + vpunpcklqdq zmm2, zmm9, zmm3 + vpunpckhqdq zmm3, zmm9, zmm3 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm19, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1728] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm19, zmm20 + vmovdqa64 zmm20, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1760] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm21, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1792] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm21, zmm22 + vmovdqa64 zmm22, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1824] + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm19, zmm20, zmm19 + vpsubw zmm21, zmm22, zmm21 + vpsubw zmm20, zmm8, zmm19 + vpsubw zmm22, zmm9, zmm21 + vpaddw zmm8, zmm8, zmm19 + vpaddw zmm9, zmm9, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1856] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1888] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1920] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1952] + vpunpcklqdq zmm19, zmm8, zmm20 + vpunpckhqdq zmm20, zmm8, zmm20 + vpunpcklqdq zmm21, zmm9, zmm22 + vpunpckhqdq zmm22, zmm9, zmm22 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm4, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+768] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm5, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+800] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm6, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+832] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm7, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+864] + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm4, zmm5, zmm4 + vpsubw zmm6, zmm7, zmm6 + vpsubw zmm5, zmm8, zmm4 + vpsubw zmm7, zmm9, zmm6 + vpaddw zmm8, zmm8, zmm4 + vpaddw zmm9, zmm9, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+896] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+928] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+960] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+992] + vpunpcklqdq zmm4, zmm8, zmm5 + vpunpckhqdq zmm5, zmm8, zmm5 + vpunpcklqdq zmm6, zmm9, zmm7 + vpunpckhqdq zmm7, zmm9, zmm7 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm23, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1984] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm23, zmm24 + vmovdqa64 zmm24, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2016] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm25, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2048] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm25, zmm26 + vmovdqa64 zmm26, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2080] + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm23, zmm24, zmm23 + vpsubw zmm25, zmm26, zmm25 + vpsubw zmm24, zmm8, zmm23 + vpsubw zmm26, zmm9, zmm25 + vpaddw zmm8, zmm8, zmm23 + vpaddw zmm9, zmm9, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2112] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2144] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2176] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2208] + vpunpcklqdq zmm23, zmm8, zmm24 + vpunpckhqdq zmm24, zmm8, zmm24 + vpunpcklqdq zmm25, zmm9, zmm26 + vpunpckhqdq zmm26, zmm9, zmm26 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1024] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1056] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1088] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1120] + vpsllq zmm8, zmm1, 32 + vpsrlq zmm9, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm8 + vpblendmd zmm1{k2}, zmm1, zmm9 + vpsllq zmm8, zmm3, 32 + vpsrlq zmm9, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm8 + vpblendmd zmm3{k2}, zmm3, zmm9 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2240] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2272] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2304] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2336] + vpsllq zmm8, zmm20, 32 + vpsrlq zmm9, zmm19, 32 + vpblendmd zmm19{k1}, zmm19, zmm8 + vpblendmd zmm20{k2}, zmm20, zmm9 + vpsllq zmm8, zmm22, 32 + vpsrlq zmm9, zmm21, 32 + vpblendmd zmm21{k1}, zmm21, zmm8 + vpblendmd zmm22{k2}, zmm22, zmm9 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1152] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1184] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1216] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1248] + vpsllq zmm8, zmm5, 32 + vpsrlq zmm9, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm8 + vpblendmd zmm5{k2}, zmm5, zmm9 + vpsllq zmm8, zmm7, 32 + vpsrlq zmm9, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm8 + vpblendmd zmm7{k2}, zmm7, zmm9 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2368] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2400] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2432] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2464] + vpsllq zmm8, zmm24, 32 + vpsrlq zmm9, zmm23, 32 + vpblendmd zmm23{k1}, zmm23, zmm8 + vpblendmd zmm24{k2}, zmm24, zmm9 + vpsllq zmm8, zmm26, 32 + vpsrlq zmm9, zmm25, 32 + vpblendmd zmm25{k1}, zmm25, zmm8 + vpblendmd zmm26{k2}, zmm26, zmm9 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vpunpckldq zmm8, zmm0, zmm1 + vpunpckhdq zmm9, zmm0, zmm1 + vmovdqa64 zmm0, zmm17 + vpermi2q zmm0, zmm8, zmm9 + vmovdqa64 zmm1, zmm18 + vpermi2q zmm1, zmm8, zmm9 + vpunpckldq zmm8, zmm2, zmm3 + vpunpckhdq zmm9, zmm2, zmm3 + vmovdqa64 zmm2, zmm17 + vpermi2q zmm2, zmm8, zmm9 + vmovdqa64 zmm3, zmm18 + vpermi2q zmm3, zmm8, zmm9 + vpunpckldq zmm8, zmm19, zmm20 + vpunpckhdq zmm9, zmm19, zmm20 + vmovdqa64 zmm19, zmm17 + vpermi2q zmm19, zmm8, zmm9 + vmovdqa64 zmm20, zmm18 + vpermi2q zmm20, zmm8, zmm9 + vpunpckldq zmm8, zmm21, zmm22 + vpunpckhdq zmm9, zmm21, zmm22 + vmovdqa64 zmm21, zmm17 + vpermi2q zmm21, zmm8, zmm9 + vmovdqa64 zmm22, zmm18 + vpermi2q zmm22, zmm8, zmm9 + vpunpckldq zmm8, zmm4, zmm5 + vpunpckhdq zmm9, zmm4, zmm5 + vmovdqa64 zmm4, zmm17 + vpermi2q zmm4, zmm8, zmm9 + vmovdqa64 zmm5, zmm18 + vpermi2q zmm5, zmm8, zmm9 + vpunpckldq zmm8, zmm6, zmm7 + vpunpckhdq zmm9, zmm6, zmm7 + vmovdqa64 zmm6, zmm17 + vpermi2q zmm6, zmm8, zmm9 + vmovdqa64 zmm7, zmm18 + vpermi2q zmm7, zmm8, zmm9 + vpunpckldq zmm8, zmm23, zmm24 + vpunpckhdq zmm9, zmm23, zmm24 + vmovdqa64 zmm23, zmm17 + vpermi2q zmm23, zmm8, zmm9 + vmovdqa64 zmm24, zmm18 + vpermi2q zmm24, zmm8, zmm9 + vpunpckldq zmm8, zmm25, zmm26 + vpunpckhdq zmm9, zmm25, zmm26 + vmovdqa64 zmm25, zmm17 + vpermi2q zmm25, zmm8, zmm9 + vmovdqa64 zmm26, zmm18 + vpermi2q zmm26, zmm8, zmm9 + vmovdqu64 [rdi], ymm0 + vextracti64x4 YMMWORD PTR [rsi], zmm0, 1 + vmovdqu64 [rdi+32], ymm1 + vextracti64x4 YMMWORD PTR [rsi+32], zmm1, 1 + vmovdqu64 [rdi+64], ymm2 + vextracti64x4 YMMWORD PTR [rsi+64], zmm2, 1 + vmovdqu64 [rdi+96], ymm3 + vextracti64x4 YMMWORD PTR [rsi+96], zmm3, 1 + vmovdqu64 [rdi+256], ymm19 + vextracti64x4 YMMWORD PTR [rsi+256], zmm19, 1 + vmovdqu64 [rdi+288], ymm20 + vextracti64x4 YMMWORD PTR [rsi+288], zmm20, 1 + vmovdqu64 [rdi+320], ymm21 + vextracti64x4 YMMWORD PTR [rsi+320], zmm21, 1 + vmovdqu64 [rdi+352], ymm22 + vextracti64x4 YMMWORD PTR [rsi+352], zmm22, 1 + vmovdqu64 [rdi+128], ymm4 + vextracti64x4 YMMWORD PTR [rsi+128], zmm4, 1 + vmovdqu64 [rdi+160], ymm5 + vextracti64x4 YMMWORD PTR [rsi+160], zmm5, 1 + vmovdqu64 [rdi+192], ymm6 + vextracti64x4 YMMWORD PTR [rsi+192], zmm6, 1 + vmovdqu64 [rdi+224], ymm7 + vextracti64x4 YMMWORD PTR [rsi+224], zmm7, 1 + vmovdqu64 [rdi+384], ymm23 + vextracti64x4 YMMWORD PTR [rsi+384], zmm23, 1 + vmovdqu64 [rdi+416], ymm24 + vextracti64x4 YMMWORD PTR [rsi+416], zmm24, 1 + vmovdqu64 [rdi+448], ymm25 + vextracti64x4 YMMWORD PTR [rsi+448], zmm25, 1 + vmovdqu64 [rdi+480], ymm26 + vextracti64x4 YMMWORD PTR [rsi+480], zmm26, 1 + add rdi, 1024 + sub r15, 2 + jmp L_encap_avx512_sp +L_encap_avx512_sp_odd: + cmp r15, 1 + jne L_encap_avx512_sp_done + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas] + vmovdqu64 ymm0, [rdi] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdi], 1 + vmovdqu64 ymm1, [rdi+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdi+32], 1 + vmovdqu64 ymm2, [rdi+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdi+64], 1 + vmovdqu64 ymm3, [rdi+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdi+96], 1 + vmovdqu64 ymm4, [rdi+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rdi+128], 1 + vmovdqu64 ymm5, [rdi+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rdi+160], 1 + vmovdqu64 ymm6, [rdi+192] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdi+192], 1 + vmovdqu64 ymm7, [rdi+224] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdi+224], 1 + vmovdqu64 ymm19, [rdi+256] + vinserti64x4 zmm19, zmm19, YMMWORD PTR [rdi+256], 1 + vmovdqu64 ymm20, [rdi+288] + vinserti64x4 zmm20, zmm20, YMMWORD PTR [rdi+288], 1 + vmovdqu64 ymm21, [rdi+320] + vinserti64x4 zmm21, zmm21, YMMWORD PTR [rdi+320], 1 + vmovdqu64 ymm22, [rdi+352] + vinserti64x4 zmm22, zmm22, YMMWORD PTR [rdi+352], 1 + vmovdqu64 ymm23, [rdi+384] + vinserti64x4 zmm23, zmm23, YMMWORD PTR [rdi+384], 1 + vmovdqu64 ymm24, [rdi+416] + vinserti64x4 zmm24, zmm24, YMMWORD PTR [rdi+416], 1 + vmovdqu64 ymm25, [rdi+448] + vinserti64x4 zmm25, zmm25, YMMWORD PTR [rdi+448], 1 + vmovdqu64 ymm26, [rdi+480] + vinserti64x4 zmm26, zmm26, YMMWORD PTR [rdi+480], 1 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+32] + vpmullw zmm8, zmm19, zmm12 + vpmullw zmm9, zmm20, zmm12 + vpmulhw zmm19, zmm19, zmm10 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm19, zmm8 + vpsubw zmm9, zmm20, zmm9 + vpsubw zmm19, zmm0, zmm8 + vpsubw zmm20, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm2, zmm8 + vpsubw zmm22, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm4, zmm8 + vpsubw zmm24, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm6, zmm8 + vpsubw zmm26, zmm7, zmm9 + vpaddw zmm6, zmm6, zmm8 + vpaddw zmm7, zmm7, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+64] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+96] + vpmullw zmm8, zmm4, zmm12 + vpmullw zmm9, zmm5, zmm12 + vpmulhw zmm4, zmm4, zmm10 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm4, zmm8 + vpsubw zmm9, zmm5, zmm9 + vpsubw zmm4, zmm0, zmm8 + vpsubw zmm5, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm2, zmm8 + vpsubw zmm7, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1280] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1312] + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm19, zmm8 + vpsubw zmm24, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm21, zmm8 + vpsubw zmm26, zmm22, zmm9 + vpaddw zmm21, zmm21, zmm8 + vpaddw zmm22, zmm22, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+128] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+160] + vpmullw zmm8, zmm2, zmm12 + vpmullw zmm9, zmm3, zmm12 + vpmulhw zmm2, zmm2, zmm10 + vpmulhw zmm3, zmm3, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm2, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm2, zmm0, zmm8 + vpsubw zmm3, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1344] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1376] + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm19, zmm8 + vpsubw zmm22, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+192] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+224] + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm4, zmm8 + vpsubw zmm7, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1408] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1440] + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm23, zmm8 + vpsubw zmm26, zmm24, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm24, zmm24, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+256] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+288] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+320] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+352] + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1472] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1504] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1536] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1568] + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+384] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+416] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+448] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+480] + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1600] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1632] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1664] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1696] + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm0, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+512] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm1, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+544] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm2, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+576] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm3, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+608] + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm0, zmm1, zmm0 + vpsubw zmm2, zmm3, zmm2 + vpsubw zmm1, zmm8, zmm0 + vpsubw zmm3, zmm9, zmm2 + vpaddw zmm8, zmm8, zmm0 + vpaddw zmm9, zmm9, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+640] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+672] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+704] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+736] + vpunpcklqdq zmm0, zmm8, zmm1 + vpunpckhqdq zmm1, zmm8, zmm1 + vpunpcklqdq zmm2, zmm9, zmm3 + vpunpckhqdq zmm3, zmm9, zmm3 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm19, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1728] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm19, zmm20 + vmovdqa64 zmm20, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1760] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm21, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1792] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm21, zmm22 + vmovdqa64 zmm22, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1824] + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm19, zmm20, zmm19 + vpsubw zmm21, zmm22, zmm21 + vpsubw zmm20, zmm8, zmm19 + vpsubw zmm22, zmm9, zmm21 + vpaddw zmm8, zmm8, zmm19 + vpaddw zmm9, zmm9, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1856] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1888] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1920] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1952] + vpunpcklqdq zmm19, zmm8, zmm20 + vpunpckhqdq zmm20, zmm8, zmm20 + vpunpcklqdq zmm21, zmm9, zmm22 + vpunpckhqdq zmm22, zmm9, zmm22 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm4, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+768] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm5, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+800] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm6, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+832] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm7, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+864] + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm4, zmm5, zmm4 + vpsubw zmm6, zmm7, zmm6 + vpsubw zmm5, zmm8, zmm4 + vpsubw zmm7, zmm9, zmm6 + vpaddw zmm8, zmm8, zmm4 + vpaddw zmm9, zmm9, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+896] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+928] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+960] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+992] + vpunpcklqdq zmm4, zmm8, zmm5 + vpunpckhqdq zmm5, zmm8, zmm5 + vpunpcklqdq zmm6, zmm9, zmm7 + vpunpckhqdq zmm7, zmm9, zmm7 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm23, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1984] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm23, zmm24 + vmovdqa64 zmm24, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2016] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm25, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2048] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm25, zmm26 + vmovdqa64 zmm26, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2080] + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm23, zmm24, zmm23 + vpsubw zmm25, zmm26, zmm25 + vpsubw zmm24, zmm8, zmm23 + vpsubw zmm26, zmm9, zmm25 + vpaddw zmm8, zmm8, zmm23 + vpaddw zmm9, zmm9, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2112] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2144] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2176] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2208] + vpunpcklqdq zmm23, zmm8, zmm24 + vpunpckhqdq zmm24, zmm8, zmm24 + vpunpcklqdq zmm25, zmm9, zmm26 + vpunpckhqdq zmm26, zmm9, zmm26 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1024] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1056] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1088] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1120] + vpsllq zmm8, zmm1, 32 + vpsrlq zmm9, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm8 + vpblendmd zmm1{k2}, zmm1, zmm9 + vpsllq zmm8, zmm3, 32 + vpsrlq zmm9, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm8 + vpblendmd zmm3{k2}, zmm3, zmm9 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2240] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2272] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2304] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2336] + vpsllq zmm8, zmm20, 32 + vpsrlq zmm9, zmm19, 32 + vpblendmd zmm19{k1}, zmm19, zmm8 + vpblendmd zmm20{k2}, zmm20, zmm9 + vpsllq zmm8, zmm22, 32 + vpsrlq zmm9, zmm21, 32 + vpblendmd zmm21{k1}, zmm21, zmm8 + vpblendmd zmm22{k2}, zmm22, zmm9 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1152] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1184] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1216] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1248] + vpsllq zmm8, zmm5, 32 + vpsrlq zmm9, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm8 + vpblendmd zmm5{k2}, zmm5, zmm9 + vpsllq zmm8, zmm7, 32 + vpsrlq zmm9, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm8 + vpblendmd zmm7{k2}, zmm7, zmm9 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2368] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2400] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2432] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2464] + vpsllq zmm8, zmm24, 32 + vpsrlq zmm9, zmm23, 32 + vpblendmd zmm23{k1}, zmm23, zmm8 + vpblendmd zmm24{k2}, zmm24, zmm9 + vpsllq zmm8, zmm26, 32 + vpsrlq zmm9, zmm25, 32 + vpblendmd zmm25{k1}, zmm25, zmm8 + vpblendmd zmm26{k2}, zmm26, zmm9 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vpunpckldq zmm8, zmm0, zmm1 + vpunpckhdq zmm9, zmm0, zmm1 + vmovdqa64 zmm0, zmm17 + vpermi2q zmm0, zmm8, zmm9 + vmovdqa64 zmm1, zmm18 + vpermi2q zmm1, zmm8, zmm9 + vpunpckldq zmm8, zmm2, zmm3 + vpunpckhdq zmm9, zmm2, zmm3 + vmovdqa64 zmm2, zmm17 + vpermi2q zmm2, zmm8, zmm9 + vmovdqa64 zmm3, zmm18 + vpermi2q zmm3, zmm8, zmm9 + vpunpckldq zmm8, zmm19, zmm20 + vpunpckhdq zmm9, zmm19, zmm20 + vmovdqa64 zmm19, zmm17 + vpermi2q zmm19, zmm8, zmm9 + vmovdqa64 zmm20, zmm18 + vpermi2q zmm20, zmm8, zmm9 + vpunpckldq zmm8, zmm21, zmm22 + vpunpckhdq zmm9, zmm21, zmm22 + vmovdqa64 zmm21, zmm17 + vpermi2q zmm21, zmm8, zmm9 + vmovdqa64 zmm22, zmm18 + vpermi2q zmm22, zmm8, zmm9 + vpunpckldq zmm8, zmm4, zmm5 + vpunpckhdq zmm9, zmm4, zmm5 + vmovdqa64 zmm4, zmm17 + vpermi2q zmm4, zmm8, zmm9 + vmovdqa64 zmm5, zmm18 + vpermi2q zmm5, zmm8, zmm9 + vpunpckldq zmm8, zmm6, zmm7 + vpunpckhdq zmm9, zmm6, zmm7 + vmovdqa64 zmm6, zmm17 + vpermi2q zmm6, zmm8, zmm9 + vmovdqa64 zmm7, zmm18 + vpermi2q zmm7, zmm8, zmm9 + vpunpckldq zmm8, zmm23, zmm24 + vpunpckhdq zmm9, zmm23, zmm24 + vmovdqa64 zmm23, zmm17 + vpermi2q zmm23, zmm8, zmm9 + vmovdqa64 zmm24, zmm18 + vpermi2q zmm24, zmm8, zmm9 + vpunpckldq zmm8, zmm25, zmm26 + vpunpckhdq zmm9, zmm25, zmm26 + vmovdqa64 zmm25, zmm17 + vpermi2q zmm25, zmm8, zmm9 + vmovdqa64 zmm26, zmm18 + vpermi2q zmm26, zmm8, zmm9 + vmovdqu64 [rdi], ymm0 + vextracti64x4 YMMWORD PTR [rdi], zmm0, 1 + vmovdqu64 [rdi+32], ymm1 + vextracti64x4 YMMWORD PTR [rdi+32], zmm1, 1 + vmovdqu64 [rdi+64], ymm2 + vextracti64x4 YMMWORD PTR [rdi+64], zmm2, 1 + vmovdqu64 [rdi+96], ymm3 + vextracti64x4 YMMWORD PTR [rdi+96], zmm3, 1 + vmovdqu64 [rdi+256], ymm19 + vextracti64x4 YMMWORD PTR [rdi+256], zmm19, 1 + vmovdqu64 [rdi+288], ymm20 + vextracti64x4 YMMWORD PTR [rdi+288], zmm20, 1 + vmovdqu64 [rdi+320], ymm21 + vextracti64x4 YMMWORD PTR [rdi+320], zmm21, 1 + vmovdqu64 [rdi+352], ymm22 + vextracti64x4 YMMWORD PTR [rdi+352], zmm22, 1 + vmovdqu64 [rdi+128], ymm4 + vextracti64x4 YMMWORD PTR [rdi+128], zmm4, 1 + vmovdqu64 [rdi+160], ymm5 + vextracti64x4 YMMWORD PTR [rdi+160], zmm5, 1 + vmovdqu64 [rdi+192], ymm6 + vextracti64x4 YMMWORD PTR [rdi+192], zmm6, 1 + vmovdqu64 [rdi+224], ymm7 + vextracti64x4 YMMWORD PTR [rdi+224], zmm7, 1 + vmovdqu64 [rdi+384], ymm23 + vextracti64x4 YMMWORD PTR [rdi+384], zmm23, 1 + vmovdqu64 [rdi+416], ymm24 + vextracti64x4 YMMWORD PTR [rdi+416], zmm24, 1 + vmovdqu64 [rdi+448], ymm25 + vextracti64x4 YMMWORD PTR [rdi+448], zmm25, 1 + vmovdqu64 [rdi+480], ymm26 + vextracti64x4 YMMWORD PTR [rdi+480], zmm26, 1 +L_encap_avx512_sp_done: + movsxd r14, r13d +L_encap_avx512_calc: + cmp r14, 2 + jl L_encap_avx512_calc_odd + mov r15, 62209 + vmovd xmm12, r15d + vpbroadcastw zmm12, xmm12 + movsxd r15, r13d + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [r9] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+64], 1 + vmovdqu ymm3, YMMWORD PTR [r9+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+64], 1 + vmovdqu ymm5, YMMWORD PTR [rax+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+64], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rdx], ymm0 + vextracti64x4 YMMWORD PTR [rdx+64], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+32], ymm1 + vextracti64x4 YMMWORD PTR [rdx+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+192], 1 + vmovdqu ymm3, YMMWORD PTR [r9+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+192], 1 + vmovdqu ymm5, YMMWORD PTR [rax+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+192], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rdx+128], ymm0 + vextracti64x4 YMMWORD PTR [rdx+192], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+160], ymm1 + vextracti64x4 YMMWORD PTR [rdx+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+320], 1 + vmovdqu ymm3, YMMWORD PTR [r9+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+320], 1 + vmovdqu ymm5, YMMWORD PTR [rax+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+320], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rdx+256], ymm0 + vextracti64x4 YMMWORD PTR [rdx+320], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+288], ymm1 + vextracti64x4 YMMWORD PTR [rdx+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+448], 1 + vmovdqu ymm3, YMMWORD PTR [r9+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+448], 1 + vmovdqu ymm5, YMMWORD PTR [rax+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+448], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rdx+384], ymm0 + vextracti64x4 YMMWORD PTR [rdx+448], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+416], ymm1 + vextracti64x4 YMMWORD PTR [rdx+480], zmm1, 1 + add r9, 512 + add rax, 512 + sub r15, 2 + jz L_pointwise_acc_mont_end_encap_bp0_avx512 +L_pointwise_acc_mont_start_encap_bp0_avx512: + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [r9] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+64], 1 + vmovdqu ymm3, YMMWORD PTR [r9+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+64], 1 + vmovdqu ymm5, YMMWORD PTR [rax+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+64], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+64], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+96], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx], ymm0 + vextracti64x4 YMMWORD PTR [rdx+64], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+32], ymm1 + vextracti64x4 YMMWORD PTR [rdx+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+192], 1 + vmovdqu ymm3, YMMWORD PTR [r9+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+192], 1 + vmovdqu ymm5, YMMWORD PTR [rax+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+192], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+192], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+224], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+128], ymm0 + vextracti64x4 YMMWORD PTR [rdx+192], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+160], ymm1 + vextracti64x4 YMMWORD PTR [rdx+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+320], 1 + vmovdqu ymm3, YMMWORD PTR [r9+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+320], 1 + vmovdqu ymm5, YMMWORD PTR [rax+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+320], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+320], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+352], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+256], ymm0 + vextracti64x4 YMMWORD PTR [rdx+320], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+288], ymm1 + vextracti64x4 YMMWORD PTR [rdx+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+448], 1 + vmovdqu ymm3, YMMWORD PTR [r9+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+448], 1 + vmovdqu ymm5, YMMWORD PTR [rax+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+448], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+448], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+480], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+384], ymm0 + vextracti64x4 YMMWORD PTR [rdx+448], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+416], ymm1 + vextracti64x4 YMMWORD PTR [rdx+480], zmm1, 1 + add r9, 512 + add rax, 512 + sub r15, 1 + jg L_pointwise_acc_mont_start_encap_bp0_avx512 +L_pointwise_acc_mont_end_encap_bp0_avx512: + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [r9] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+64], 1 + vmovdqu ymm3, YMMWORD PTR [r9+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+64], 1 + vmovdqu ymm5, YMMWORD PTR [rax+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+64], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+64], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+96], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx], ymm0 + vextracti64x4 YMMWORD PTR [rdx+64], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+32], ymm1 + vextracti64x4 YMMWORD PTR [rdx+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+192], 1 + vmovdqu ymm3, YMMWORD PTR [r9+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+192], 1 + vmovdqu ymm5, YMMWORD PTR [rax+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+192], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+192], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+224], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+128], ymm0 + vextracti64x4 YMMWORD PTR [rdx+192], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+160], ymm1 + vextracti64x4 YMMWORD PTR [rdx+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+320], 1 + vmovdqu ymm3, YMMWORD PTR [r9+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+320], 1 + vmovdqu ymm5, YMMWORD PTR [rax+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+320], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+320], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+352], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+256], ymm0 + vextracti64x4 YMMWORD PTR [rdx+320], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+288], ymm1 + vextracti64x4 YMMWORD PTR [rdx+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+448], 1 + vmovdqu ymm3, YMMWORD PTR [r9+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+448], 1 + vmovdqu ymm5, YMMWORD PTR [rax+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+448], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+448], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+480], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+384], ymm0 + vextracti64x4 YMMWORD PTR [rdx+448], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+416], ymm1 + vextracti64x4 YMMWORD PTR [rdx+480], zmm1, 1 + add r9, 512 + mov rax, rbx + mov rsi, rdx + add rsi, 512 + movsxd r15, r13d + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [r9] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+64], 1 + vmovdqu ymm3, YMMWORD PTR [r9+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+64], 1 + vmovdqu ymm5, YMMWORD PTR [rax+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+64], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rsi], ymm0 + vextracti64x4 YMMWORD PTR [rsi+64], zmm0, 1 + vmovdqu YMMWORD PTR [rsi+32], ymm1 + vextracti64x4 YMMWORD PTR [rsi+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+192], 1 + vmovdqu ymm3, YMMWORD PTR [r9+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+192], 1 + vmovdqu ymm5, YMMWORD PTR [rax+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+192], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rsi+128], ymm0 + vextracti64x4 YMMWORD PTR [rsi+192], zmm0, 1 + vmovdqu YMMWORD PTR [rsi+160], ymm1 + vextracti64x4 YMMWORD PTR [rsi+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+320], 1 + vmovdqu ymm3, YMMWORD PTR [r9+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+320], 1 + vmovdqu ymm5, YMMWORD PTR [rax+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+320], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rsi+256], ymm0 + vextracti64x4 YMMWORD PTR [rsi+320], zmm0, 1 + vmovdqu YMMWORD PTR [rsi+288], ymm1 + vextracti64x4 YMMWORD PTR [rsi+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+448], 1 + vmovdqu ymm3, YMMWORD PTR [r9+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+448], 1 + vmovdqu ymm5, YMMWORD PTR [rax+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+448], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rsi+384], ymm0 + vextracti64x4 YMMWORD PTR [rsi+448], zmm0, 1 + vmovdqu YMMWORD PTR [rsi+416], ymm1 + vextracti64x4 YMMWORD PTR [rsi+480], zmm1, 1 + add r9, 512 + add rax, 512 + sub r15, 2 + jz L_pointwise_acc_mont_end_encap_bp1_avx512 +L_pointwise_acc_mont_start_encap_bp1_avx512: + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [r9] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+64], 1 + vmovdqu ymm3, YMMWORD PTR [r9+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+64], 1 + vmovdqu ymm5, YMMWORD PTR [rax+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+64], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rsi] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rsi+64], 1 + vmovdqu ymm7, YMMWORD PTR [rsi+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rsi+96], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rsi], ymm0 + vextracti64x4 YMMWORD PTR [rsi+64], zmm0, 1 + vmovdqu YMMWORD PTR [rsi+32], ymm1 + vextracti64x4 YMMWORD PTR [rsi+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+192], 1 + vmovdqu ymm3, YMMWORD PTR [r9+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+192], 1 + vmovdqu ymm5, YMMWORD PTR [rax+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+192], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rsi+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rsi+192], 1 + vmovdqu ymm7, YMMWORD PTR [rsi+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rsi+224], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rsi+128], ymm0 + vextracti64x4 YMMWORD PTR [rsi+192], zmm0, 1 + vmovdqu YMMWORD PTR [rsi+160], ymm1 + vextracti64x4 YMMWORD PTR [rsi+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+320], 1 + vmovdqu ymm3, YMMWORD PTR [r9+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+320], 1 + vmovdqu ymm5, YMMWORD PTR [rax+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+320], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rsi+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rsi+320], 1 + vmovdqu ymm7, YMMWORD PTR [rsi+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rsi+352], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rsi+256], ymm0 + vextracti64x4 YMMWORD PTR [rsi+320], zmm0, 1 + vmovdqu YMMWORD PTR [rsi+288], ymm1 + vextracti64x4 YMMWORD PTR [rsi+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+448], 1 + vmovdqu ymm3, YMMWORD PTR [r9+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+448], 1 + vmovdqu ymm5, YMMWORD PTR [rax+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+448], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rsi+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rsi+448], 1 + vmovdqu ymm7, YMMWORD PTR [rsi+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rsi+480], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rsi+384], ymm0 + vextracti64x4 YMMWORD PTR [rsi+448], zmm0, 1 + vmovdqu YMMWORD PTR [rsi+416], ymm1 + vextracti64x4 YMMWORD PTR [rsi+480], zmm1, 1 + add r9, 512 + add rax, 512 + sub r15, 1 + jg L_pointwise_acc_mont_start_encap_bp1_avx512 +L_pointwise_acc_mont_end_encap_bp1_avx512: + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [r9] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+64], 1 + vmovdqu ymm3, YMMWORD PTR [r9+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+64], 1 + vmovdqu ymm5, YMMWORD PTR [rax+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+64], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rsi] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rsi+64], 1 + vmovdqu ymm7, YMMWORD PTR [rsi+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rsi+96], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rsi], ymm0 + vextracti64x4 YMMWORD PTR [rsi+64], zmm0, 1 + vmovdqu YMMWORD PTR [rsi+32], ymm1 + vextracti64x4 YMMWORD PTR [rsi+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+192], 1 + vmovdqu ymm3, YMMWORD PTR [r9+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+192], 1 + vmovdqu ymm5, YMMWORD PTR [rax+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+192], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rsi+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rsi+192], 1 + vmovdqu ymm7, YMMWORD PTR [rsi+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rsi+224], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rsi+128], ymm0 + vextracti64x4 YMMWORD PTR [rsi+192], zmm0, 1 + vmovdqu YMMWORD PTR [rsi+160], ymm1 + vextracti64x4 YMMWORD PTR [rsi+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+320], 1 + vmovdqu ymm3, YMMWORD PTR [r9+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+320], 1 + vmovdqu ymm5, YMMWORD PTR [rax+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+320], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rsi+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rsi+320], 1 + vmovdqu ymm7, YMMWORD PTR [rsi+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rsi+352], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rsi+256], ymm0 + vextracti64x4 YMMWORD PTR [rsi+320], zmm0, 1 + vmovdqu YMMWORD PTR [rsi+288], ymm1 + vextracti64x4 YMMWORD PTR [rsi+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+448], 1 + vmovdqu ymm3, YMMWORD PTR [r9+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+448], 1 + vmovdqu ymm5, YMMWORD PTR [rax+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+448], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rsi+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rsi+448], 1 + vmovdqu ymm7, YMMWORD PTR [rsi+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rsi+480], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rsi+384], ymm0 + vextracti64x4 YMMWORD PTR [rsi+448], zmm0, 1 + vmovdqu YMMWORD PTR [rsi+416], ymm1 + vextracti64x4 YMMWORD PTR [rsi+480], zmm1, 1 + add r9, 512 + mov rax, rbx + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_inv] + vmovdqu64 ymm0, [rdx] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rsi], 1 + vmovdqu64 ymm1, [rdx+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rsi+32], 1 + vmovdqu64 ymm2, [rdx+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rsi+64], 1 + vmovdqu64 ymm3, [rdx+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rsi+96], 1 + vmovdqu64 ymm4, [rdx+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rsi+128], 1 + vmovdqu64 ymm5, [rdx+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rsi+160], 1 + vmovdqu64 ymm6, [rdx+192] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rsi+192], 1 + vmovdqu64 ymm7, [rdx+224] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rsi+224], 1 + vmovdqu64 ymm19, [rdx+256] + vinserti64x4 zmm19, zmm19, YMMWORD PTR [rsi+256], 1 + vmovdqu64 ymm20, [rdx+288] + vinserti64x4 zmm20, zmm20, YMMWORD PTR [rsi+288], 1 + vmovdqu64 ymm21, [rdx+320] + vinserti64x4 zmm21, zmm21, YMMWORD PTR [rsi+320], 1 + vmovdqu64 ymm22, [rdx+352] + vinserti64x4 zmm22, zmm22, YMMWORD PTR [rsi+352], 1 + vmovdqu64 ymm23, [rdx+384] + vinserti64x4 zmm23, zmm23, YMMWORD PTR [rsi+384], 1 + vmovdqu64 ymm24, [rdx+416] + vinserti64x4 zmm24, zmm24, YMMWORD PTR [rsi+416], 1 + vmovdqu64 ymm25, [rdx+448] + vinserti64x4 zmm25, zmm25, YMMWORD PTR [rsi+448], 1 + vmovdqu64 ymm26, [rdx+480] + vinserti64x4 zmm26, zmm26, YMMWORD PTR [rsi+480], 1 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm0, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm0, zmm1 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+32] + vpsllq zmm0, zmm9, 32 + vpsrlq zmm1, zmm8, 32 + vpblendmd zmm0{k1}, zmm8, zmm0 + vpblendmd zmm1{k2}, zmm9, zmm1 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm2, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+64] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm2, zmm3 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+96] + vpsllq zmm2, zmm9, 32 + vpsrlq zmm3, zmm8, 32 + vpblendmd zmm2{k1}, zmm8, zmm2 + vpblendmd zmm3{k2}, zmm9, zmm3 + vpaddw zmm8, zmm0, zmm1 + vpaddw zmm9, zmm2, zmm3 + vpsubw zmm1, zmm0, zmm1 + vpsubw zmm3, zmm2, zmm3 + vpmulhw zmm0, zmm8, zmm15 + vpmulhw zmm2, zmm9, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm2, zmm2, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm2, zmm2, zmm14 + vpsubw zmm8, zmm8, zmm0 + vpsubw zmm9, zmm9, zmm2 + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm1, zmm1, zmm0 + vpsubw zmm3, zmm3, zmm2 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm19, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1216] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm19, zmm20 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1248] + vpsllq zmm19, zmm28, 32 + vpsrlq zmm20, zmm27, 32 + vpblendmd zmm19{k1}, zmm27, zmm19 + vpblendmd zmm20{k2}, zmm28, zmm20 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm21, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1280] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm21, zmm22 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1312] + vpsllq zmm21, zmm28, 32 + vpsrlq zmm22, zmm27, 32 + vpblendmd zmm21{k1}, zmm27, zmm21 + vpblendmd zmm22{k2}, zmm28, zmm22 + vpaddw zmm27, zmm19, zmm20 + vpaddw zmm28, zmm21, zmm22 + vpsubw zmm20, zmm19, zmm20 + vpsubw zmm22, zmm21, zmm22 + vpmulhw zmm19, zmm27, zmm15 + vpmulhw zmm21, zmm28, zmm15 + vpsraw zmm19, zmm19, 10 + vpsraw zmm21, zmm21, 10 + vpmullw zmm19, zmm19, zmm14 + vpmullw zmm21, zmm21, zmm14 + vpsubw zmm27, zmm27, zmm19 + vpsubw zmm28, zmm28, zmm21 + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm20, zmm20, zmm19 + vpsubw zmm22, zmm22, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+128] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+160] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+192] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+224] + vpunpckldq zmm0, zmm8, zmm1 + vpunpckhdq zmm1, zmm8, zmm1 + vpunpckldq zmm2, zmm9, zmm3 + vpunpckhdq zmm3, zmm9, zmm3 + vpaddw zmm8, zmm0, zmm1 + vpaddw zmm9, zmm2, zmm3 + vpsubw zmm1, zmm0, zmm1 + vpsubw zmm3, zmm2, zmm3 + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm1, zmm1, zmm0 + vpsubw zmm3, zmm3, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1344] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1376] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1408] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1440] + vpunpckldq zmm19, zmm27, zmm20 + vpunpckhdq zmm20, zmm27, zmm20 + vpunpckldq zmm21, zmm28, zmm22 + vpunpckhdq zmm22, zmm28, zmm22 + vpaddw zmm27, zmm19, zmm20 + vpaddw zmm28, zmm21, zmm22 + vpsubw zmm20, zmm19, zmm20 + vpsubw zmm22, zmm21, zmm22 + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm20, zmm20, zmm19 + vpsubw zmm22, zmm22, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+256] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+288] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+320] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+352] + vpunpcklqdq zmm0, zmm8, zmm1 + vpunpckhqdq zmm1, zmm8, zmm1 + vpunpcklqdq zmm2, zmm9, zmm3 + vpunpckhqdq zmm3, zmm9, zmm3 + vpaddw zmm8, zmm0, zmm1 + vpaddw zmm9, zmm2, zmm3 + vpsubw zmm1, zmm0, zmm1 + vpsubw zmm3, zmm2, zmm3 + vpmulhw zmm0, zmm8, zmm15 + vpmulhw zmm2, zmm9, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm2, zmm2, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm2, zmm2, zmm14 + vpsubw zmm8, zmm8, zmm0 + vpsubw zmm9, zmm9, zmm2 + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm1, zmm1, zmm0 + vpsubw zmm3, zmm3, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1472] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1504] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1536] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1568] + vpunpcklqdq zmm19, zmm27, zmm20 + vpunpckhqdq zmm20, zmm27, zmm20 + vpunpcklqdq zmm21, zmm28, zmm22 + vpunpckhqdq zmm22, zmm28, zmm22 + vpaddw zmm27, zmm19, zmm20 + vpaddw zmm28, zmm21, zmm22 + vpsubw zmm20, zmm19, zmm20 + vpsubw zmm22, zmm21, zmm22 + vpmulhw zmm19, zmm27, zmm15 + vpmulhw zmm21, zmm28, zmm15 + vpsraw zmm19, zmm19, 10 + vpsraw zmm21, zmm21, 10 + vpmullw zmm19, zmm19, zmm14 + vpmullw zmm21, zmm21, zmm14 + vpsubw zmm27, zmm27, zmm19 + vpsubw zmm28, zmm28, zmm21 + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm20, zmm20, zmm19 + vpsubw zmm22, zmm22, zmm21 + vmovdqa64 zmm0, zmm17 + vpermi2q zmm0, zmm8, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+384] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm8, zmm1 + vmovdqa64 zmm1, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+416] + vmovdqa64 zmm2, zmm17 + vpermi2q zmm2, zmm9, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+448] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm9, zmm3 + vmovdqa64 zmm3, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+480] + vpsubw zmm8, zmm0, zmm1 + vpsubw zmm9, zmm2, zmm3 + vpaddw zmm0, zmm0, zmm1 + vpaddw zmm2, zmm2, zmm3 + vpmullw zmm1, zmm8, zmm12 + vpmullw zmm3, zmm9, zmm13 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm11 + vpmulhw zmm1, zmm1, zmm14 + vpmulhw zmm3, zmm3, zmm14 + vpsubw zmm1, zmm8, zmm1 + vpsubw zmm3, zmm9, zmm3 + vmovdqa64 zmm19, zmm17 + vpermi2q zmm19, zmm27, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1600] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm27, zmm20 + vmovdqa64 zmm20, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1632] + vmovdqa64 zmm21, zmm17 + vpermi2q zmm21, zmm28, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1664] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm28, zmm22 + vmovdqa64 zmm22, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1696] + vpsubw zmm27, zmm19, zmm20 + vpsubw zmm28, zmm21, zmm22 + vpaddw zmm19, zmm19, zmm20 + vpaddw zmm21, zmm21, zmm22 + vpmullw zmm20, zmm27, zmm12 + vpmullw zmm22, zmm28, zmm13 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm11 + vpmulhw zmm20, zmm20, zmm14 + vpmulhw zmm22, zmm22, zmm14 + vpsubw zmm20, zmm27, zmm20 + vpsubw zmm22, zmm28, zmm22 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+512] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+544] + vpaddw zmm8, zmm0, zmm2 + vpaddw zmm9, zmm1, zmm3 + vpsubw zmm2, zmm0, zmm2 + vpsubw zmm3, zmm1, zmm3 + vpmulhw zmm0, zmm8, zmm15 + vpmulhw zmm1, zmm9, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm8, zmm0 + vpsubw zmm1, zmm9, zmm1 + vpmullw zmm8, zmm2, zmm12 + vpmullw zmm9, zmm3, zmm12 + vpmulhw zmm2, zmm2, zmm10 + vpmulhw zmm3, zmm3, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm2, zmm2, zmm8 + vpsubw zmm3, zmm3, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1728] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1760] + vpaddw zmm27, zmm19, zmm21 + vpaddw zmm28, zmm20, zmm22 + vpsubw zmm21, zmm19, zmm21 + vpsubw zmm22, zmm20, zmm22 + vpmulhw zmm19, zmm27, zmm15 + vpmulhw zmm20, zmm28, zmm15 + vpsraw zmm19, zmm19, 10 + vpsraw zmm20, zmm20, 10 + vpmullw zmm19, zmm19, zmm14 + vpmullw zmm20, zmm20, zmm14 + vpsubw zmm19, zmm27, zmm19 + vpsubw zmm20, zmm28, zmm20 + vpmullw zmm27, zmm21, zmm12 + vpmullw zmm28, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm27, zmm27, zmm14 + vpmulhw zmm28, zmm28, zmm14 + vpsubw zmm21, zmm21, zmm27 + vpsubw zmm22, zmm22, zmm28 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm4, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+576] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm4, zmm5 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+608] + vpsllq zmm4, zmm9, 32 + vpsrlq zmm5, zmm8, 32 + vpblendmd zmm4{k1}, zmm8, zmm4 + vpblendmd zmm5{k2}, zmm9, zmm5 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm6, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+640] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm6, zmm7 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+672] + vpsllq zmm6, zmm9, 32 + vpsrlq zmm7, zmm8, 32 + vpblendmd zmm6{k1}, zmm8, zmm6 + vpblendmd zmm7{k2}, zmm9, zmm7 + vpaddw zmm8, zmm4, zmm5 + vpaddw zmm9, zmm6, zmm7 + vpsubw zmm5, zmm4, zmm5 + vpsubw zmm7, zmm6, zmm7 + vpmulhw zmm4, zmm8, zmm15 + vpmulhw zmm6, zmm9, zmm15 + vpsraw zmm4, zmm4, 10 + vpsraw zmm6, zmm6, 10 + vpmullw zmm4, zmm4, zmm14 + vpmullw zmm6, zmm6, zmm14 + vpsubw zmm8, zmm8, zmm4 + vpsubw zmm9, zmm9, zmm6 + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm5, zmm5, zmm4 + vpsubw zmm7, zmm7, zmm6 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm23, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1792] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm23, zmm24 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1824] + vpsllq zmm23, zmm28, 32 + vpsrlq zmm24, zmm27, 32 + vpblendmd zmm23{k1}, zmm27, zmm23 + vpblendmd zmm24{k2}, zmm28, zmm24 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm25, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1856] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm25, zmm26 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1888] + vpsllq zmm25, zmm28, 32 + vpsrlq zmm26, zmm27, 32 + vpblendmd zmm25{k1}, zmm27, zmm25 + vpblendmd zmm26{k2}, zmm28, zmm26 + vpaddw zmm27, zmm23, zmm24 + vpaddw zmm28, zmm25, zmm26 + vpsubw zmm24, zmm23, zmm24 + vpsubw zmm26, zmm25, zmm26 + vpmulhw zmm23, zmm27, zmm15 + vpmulhw zmm25, zmm28, zmm15 + vpsraw zmm23, zmm23, 10 + vpsraw zmm25, zmm25, 10 + vpmullw zmm23, zmm23, zmm14 + vpmullw zmm25, zmm25, zmm14 + vpsubw zmm27, zmm27, zmm23 + vpsubw zmm28, zmm28, zmm25 + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm24, zmm24, zmm23 + vpsubw zmm26, zmm26, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+704] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+736] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+768] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+800] + vpunpckldq zmm4, zmm8, zmm5 + vpunpckhdq zmm5, zmm8, zmm5 + vpunpckldq zmm6, zmm9, zmm7 + vpunpckhdq zmm7, zmm9, zmm7 + vpaddw zmm8, zmm4, zmm5 + vpaddw zmm9, zmm6, zmm7 + vpsubw zmm5, zmm4, zmm5 + vpsubw zmm7, zmm6, zmm7 + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm5, zmm5, zmm4 + vpsubw zmm7, zmm7, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1920] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1952] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1984] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2016] + vpunpckldq zmm23, zmm27, zmm24 + vpunpckhdq zmm24, zmm27, zmm24 + vpunpckldq zmm25, zmm28, zmm26 + vpunpckhdq zmm26, zmm28, zmm26 + vpaddw zmm27, zmm23, zmm24 + vpaddw zmm28, zmm25, zmm26 + vpsubw zmm24, zmm23, zmm24 + vpsubw zmm26, zmm25, zmm26 + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm24, zmm24, zmm23 + vpsubw zmm26, zmm26, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+832] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+864] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+896] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+928] + vpunpcklqdq zmm4, zmm8, zmm5 + vpunpckhqdq zmm5, zmm8, zmm5 + vpunpcklqdq zmm6, zmm9, zmm7 + vpunpckhqdq zmm7, zmm9, zmm7 + vpaddw zmm8, zmm4, zmm5 + vpaddw zmm9, zmm6, zmm7 + vpsubw zmm5, zmm4, zmm5 + vpsubw zmm7, zmm6, zmm7 + vpmulhw zmm4, zmm8, zmm15 + vpmulhw zmm6, zmm9, zmm15 + vpsraw zmm4, zmm4, 10 + vpsraw zmm6, zmm6, 10 + vpmullw zmm4, zmm4, zmm14 + vpmullw zmm6, zmm6, zmm14 + vpsubw zmm8, zmm8, zmm4 + vpsubw zmm9, zmm9, zmm6 + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm5, zmm5, zmm4 + vpsubw zmm7, zmm7, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2048] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2080] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2112] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2144] + vpunpcklqdq zmm23, zmm27, zmm24 + vpunpckhqdq zmm24, zmm27, zmm24 + vpunpcklqdq zmm25, zmm28, zmm26 + vpunpckhqdq zmm26, zmm28, zmm26 + vpaddw zmm27, zmm23, zmm24 + vpaddw zmm28, zmm25, zmm26 + vpsubw zmm24, zmm23, zmm24 + vpsubw zmm26, zmm25, zmm26 + vpmulhw zmm23, zmm27, zmm15 + vpmulhw zmm25, zmm28, zmm15 + vpsraw zmm23, zmm23, 10 + vpsraw zmm25, zmm25, 10 + vpmullw zmm23, zmm23, zmm14 + vpmullw zmm25, zmm25, zmm14 + vpsubw zmm27, zmm27, zmm23 + vpsubw zmm28, zmm28, zmm25 + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm24, zmm24, zmm23 + vpsubw zmm26, zmm26, zmm25 + vmovdqa64 zmm4, zmm17 + vpermi2q zmm4, zmm8, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+960] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm8, zmm5 + vmovdqa64 zmm5, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+992] + vmovdqa64 zmm6, zmm17 + vpermi2q zmm6, zmm9, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1024] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm9, zmm7 + vmovdqa64 zmm7, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1056] + vpsubw zmm8, zmm4, zmm5 + vpsubw zmm9, zmm6, zmm7 + vpaddw zmm4, zmm4, zmm5 + vpaddw zmm6, zmm6, zmm7 + vpmullw zmm5, zmm8, zmm12 + vpmullw zmm7, zmm9, zmm13 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm11 + vpmulhw zmm5, zmm5, zmm14 + vpmulhw zmm7, zmm7, zmm14 + vpsubw zmm5, zmm8, zmm5 + vpsubw zmm7, zmm9, zmm7 + vmovdqa64 zmm23, zmm17 + vpermi2q zmm23, zmm27, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2176] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm27, zmm24 + vmovdqa64 zmm24, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2208] + vmovdqa64 zmm25, zmm17 + vpermi2q zmm25, zmm28, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2240] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm28, zmm26 + vmovdqa64 zmm26, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2272] + vpsubw zmm27, zmm23, zmm24 + vpsubw zmm28, zmm25, zmm26 + vpaddw zmm23, zmm23, zmm24 + vpaddw zmm25, zmm25, zmm26 + vpmullw zmm24, zmm27, zmm12 + vpmullw zmm26, zmm28, zmm13 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm11 + vpmulhw zmm24, zmm24, zmm14 + vpmulhw zmm26, zmm26, zmm14 + vpsubw zmm24, zmm27, zmm24 + vpsubw zmm26, zmm28, zmm26 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1088] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1120] + vpaddw zmm8, zmm4, zmm6 + vpaddw zmm9, zmm5, zmm7 + vpsubw zmm6, zmm4, zmm6 + vpsubw zmm7, zmm5, zmm7 + vpmulhw zmm4, zmm8, zmm15 + vpmulhw zmm5, zmm9, zmm15 + vpsraw zmm4, zmm4, 10 + vpsraw zmm5, zmm5, 10 + vpmullw zmm4, zmm4, zmm14 + vpmullw zmm5, zmm5, zmm14 + vpsubw zmm4, zmm8, zmm4 + vpsubw zmm5, zmm9, zmm5 + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm6, zmm6, zmm8 + vpsubw zmm7, zmm7, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2304] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2336] + vpaddw zmm27, zmm23, zmm25 + vpaddw zmm28, zmm24, zmm26 + vpsubw zmm25, zmm23, zmm25 + vpsubw zmm26, zmm24, zmm26 + vpmulhw zmm23, zmm27, zmm15 + vpmulhw zmm24, zmm28, zmm15 + vpsraw zmm23, zmm23, 10 + vpsraw zmm24, zmm24, 10 + vpmullw zmm23, zmm23, zmm14 + vpmullw zmm24, zmm24, zmm14 + vpsubw zmm23, zmm27, zmm23 + vpsubw zmm24, zmm28, zmm24 + vpmullw zmm27, zmm25, zmm12 + vpmullw zmm28, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm27, zmm27, zmm14 + vpmulhw zmm28, zmm28, zmm14 + vpsubw zmm25, zmm25, zmm27 + vpsubw zmm26, zmm26, zmm28 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1152] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1184] + vpsubw zmm8, zmm0, zmm4 + vpsubw zmm9, zmm1, zmm5 + vpaddw zmm0, zmm0, zmm4 + vpaddw zmm1, zmm1, zmm5 + vpmullw zmm4, zmm8, zmm12 + vpmullw zmm5, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm5, zmm5, zmm14 + vpsubw zmm4, zmm8, zmm4 + vpsubw zmm5, zmm9, zmm5 + vpsubw zmm8, zmm2, zmm6 + vpsubw zmm9, zmm3, zmm7 + vpaddw zmm2, zmm2, zmm6 + vpaddw zmm3, zmm3, zmm7 + vpmullw zmm6, zmm8, zmm12 + vpmullw zmm7, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpmulhw zmm7, zmm7, zmm14 + vpsubw zmm6, zmm8, zmm6 + vpsubw zmm7, zmm9, zmm7 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2368] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2400] + vpsubw zmm27, zmm19, zmm23 + vpsubw zmm28, zmm20, zmm24 + vpaddw zmm19, zmm19, zmm23 + vpaddw zmm20, zmm20, zmm24 + vpmullw zmm23, zmm27, zmm12 + vpmullw zmm24, zmm28, zmm12 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm10 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm24, zmm24, zmm14 + vpsubw zmm23, zmm27, zmm23 + vpsubw zmm24, zmm28, zmm24 + vpsubw zmm27, zmm21, zmm25 + vpsubw zmm28, zmm22, zmm26 + vpaddw zmm21, zmm21, zmm25 + vpaddw zmm22, zmm22, zmm26 + vpmullw zmm25, zmm27, zmm12 + vpmullw zmm26, zmm28, zmm12 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm10 + vpmulhw zmm25, zmm25, zmm14 + vpmulhw zmm26, zmm26, zmm14 + vpsubw zmm25, zmm27, zmm25 + vpsubw zmm26, zmm28, zmm26 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2432] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2464] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2496] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2528] + vpsubw zmm8, zmm0, zmm19 + vpsubw zmm9, zmm1, zmm20 + vpaddw zmm0, zmm0, zmm19 + vpaddw zmm1, zmm1, zmm20 + vpmullw zmm19, zmm8, zmm12 + vpmullw zmm20, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm20, zmm20, zmm14 + vpsubw zmm19, zmm8, zmm19 + vpsubw zmm20, zmm9, zmm20 + vpaddw zmm8, zmm2, zmm21 + vpaddw zmm9, zmm3, zmm22 + vpsubw zmm21, zmm2, zmm21 + vpsubw zmm22, zmm3, zmm22 + vpmulhw zmm2, zmm8, zmm15 + vpmulhw zmm3, zmm9, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm8, zmm2 + vpsubw zmm3, zmm9, zmm3 + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm21, zmm21, zmm8 + vpsubw zmm22, zmm22, zmm9 + vpsubw zmm8, zmm4, zmm23 + vpsubw zmm9, zmm5, zmm24 + vpaddw zmm4, zmm4, zmm23 + vpaddw zmm5, zmm5, zmm24 + vpmullw zmm23, zmm8, zmm12 + vpmullw zmm24, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm24, zmm24, zmm14 + vpsubw zmm23, zmm8, zmm23 + vpsubw zmm24, zmm9, zmm24 + vpaddw zmm8, zmm6, zmm25 + vpaddw zmm9, zmm7, zmm26 + vpsubw zmm25, zmm6, zmm25 + vpsubw zmm26, zmm7, zmm26 + vpmulhw zmm6, zmm8, zmm15 + vpmulhw zmm7, zmm9, zmm15 + vpsraw zmm6, zmm6, 10 + vpsraw zmm7, zmm7, 10 + vpmullw zmm6, zmm6, zmm14 + vpmullw zmm7, zmm7, zmm14 + vpsubw zmm6, zmm8, zmm6 + vpsubw zmm7, zmm9, zmm7 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm25, zmm25, zmm8 + vpsubw zmm26, zmm26, zmm9 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm0, zmm0, zmm11 + vpmulhw zmm1, zmm1, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm0, zmm8 + vpsubw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm2, zmm13 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm2, zmm2, zmm11 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm2, zmm2, zmm8 + vpsubw zmm3, zmm3, zmm9 + vpmullw zmm8, zmm4, zmm13 + vpmullw zmm9, zmm5, zmm13 + vpmulhw zmm4, zmm4, zmm11 + vpmulhw zmm5, zmm5, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm4, zmm4, zmm8 + vpsubw zmm5, zmm5, zmm9 + vpmullw zmm8, zmm6, zmm13 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm6, zmm6, zmm11 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm6, zmm6, zmm8 + vpsubw zmm7, zmm7, zmm9 + vpmullw zmm8, zmm19, zmm13 + vpmullw zmm9, zmm20, zmm13 + vpmulhw zmm19, zmm19, zmm11 + vpmulhw zmm20, zmm20, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm19, zmm19, zmm8 + vpsubw zmm20, zmm20, zmm9 + vpmullw zmm8, zmm21, zmm13 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm21, zmm21, zmm11 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm21, zmm21, zmm8 + vpsubw zmm22, zmm22, zmm9 + vpmullw zmm8, zmm23, zmm13 + vpmullw zmm9, zmm24, zmm13 + vpmulhw zmm23, zmm23, zmm11 + vpmulhw zmm24, zmm24, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm23, zmm23, zmm8 + vpsubw zmm24, zmm24, zmm9 + vpmullw zmm8, zmm25, zmm13 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm25, zmm25, zmm11 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm25, zmm25, zmm8 + vpsubw zmm26, zmm26, zmm9 + vmovdqu64 [rdx], ymm0 + vextracti64x4 YMMWORD PTR [rsi], zmm0, 1 + vmovdqu64 [rdx+32], ymm1 + vextracti64x4 YMMWORD PTR [rsi+32], zmm1, 1 + vmovdqu64 [rdx+64], ymm2 + vextracti64x4 YMMWORD PTR [rsi+64], zmm2, 1 + vmovdqu64 [rdx+96], ymm3 + vextracti64x4 YMMWORD PTR [rsi+96], zmm3, 1 + vmovdqu64 [rdx+128], ymm4 + vextracti64x4 YMMWORD PTR [rsi+128], zmm4, 1 + vmovdqu64 [rdx+160], ymm5 + vextracti64x4 YMMWORD PTR [rsi+160], zmm5, 1 + vmovdqu64 [rdx+192], ymm6 + vextracti64x4 YMMWORD PTR [rsi+192], zmm6, 1 + vmovdqu64 [rdx+224], ymm7 + vextracti64x4 YMMWORD PTR [rsi+224], zmm7, 1 + vmovdqu64 [rdx+256], ymm19 + vextracti64x4 YMMWORD PTR [rsi+256], zmm19, 1 + vmovdqu64 [rdx+288], ymm20 + vextracti64x4 YMMWORD PTR [rsi+288], zmm20, 1 + vmovdqu64 [rdx+320], ymm21 + vextracti64x4 YMMWORD PTR [rsi+320], zmm21, 1 + vmovdqu64 [rdx+352], ymm22 + vextracti64x4 YMMWORD PTR [rsi+352], zmm22, 1 + vmovdqu64 [rdx+384], ymm23 + vextracti64x4 YMMWORD PTR [rsi+384], zmm23, 1 + vmovdqu64 [rdx+416], ymm24 + vextracti64x4 YMMWORD PTR [rsi+416], zmm24, 1 + vmovdqu64 [rdx+448], ymm25 + vextracti64x4 YMMWORD PTR [rsi+448], zmm25, 1 + vmovdqu64 [rdx+480], ymm26 + vextracti64x4 YMMWORD PTR [rsi+480], zmm26, 1 + vmovdqu64 zmm0, [rdx] + vmovdqu64 zmm1, [rdx+64] + vmovdqu64 zmm2, [rdx+128] + vmovdqu64 zmm3, [rdx+192] + vmovdqu64 zmm4, [r10] + vmovdqu64 zmm5, [r10+64] + vmovdqu64 zmm6, [r10+128] + vmovdqu64 zmm7, [r10+192] + vpaddw zmm4, zmm0, zmm4 + vpaddw zmm5, zmm1, zmm5 + vpmulhw zmm0, zmm4, zmm15 + vpmulhw zmm1, zmm5, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpaddw zmm6, zmm2, zmm6 + vpaddw zmm7, zmm3, zmm7 + vpmulhw zmm2, zmm6, zmm15 + vpmulhw zmm3, zmm7, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [rdx], zmm0 + vmovdqu64 [rdx+64], zmm1 + vmovdqu64 [rdx+128], zmm2 + vmovdqu64 [rdx+192], zmm3 + vmovdqu64 zmm0, [rdx+256] + vmovdqu64 zmm1, [rdx+320] + vmovdqu64 zmm2, [rdx+384] + vmovdqu64 zmm3, [rdx+448] + vmovdqu64 zmm4, [r10+256] + vmovdqu64 zmm5, [r10+320] + vmovdqu64 zmm6, [r10+384] + vmovdqu64 zmm7, [r10+448] + vpaddw zmm4, zmm0, zmm4 + vpaddw zmm5, zmm1, zmm5 + vpmulhw zmm0, zmm4, zmm15 + vpmulhw zmm1, zmm5, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpaddw zmm6, zmm2, zmm6 + vpaddw zmm7, zmm3, zmm7 + vpmulhw zmm2, zmm6, zmm15 + vpmulhw zmm3, zmm7, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [rdx+256], zmm0 + vmovdqu64 [rdx+320], zmm1 + vmovdqu64 [rdx+384], zmm2 + vmovdqu64 [rdx+448], zmm3 + mov rdi, r10 + add rdi, 512 + vmovdqu64 zmm0, [rsi] + vmovdqu64 zmm1, [rsi+64] + vmovdqu64 zmm2, [rsi+128] + vmovdqu64 zmm3, [rsi+192] + vmovdqu64 zmm4, [rdi] + vmovdqu64 zmm5, [rdi+64] + vmovdqu64 zmm6, [rdi+128] + vmovdqu64 zmm7, [rdi+192] + vpaddw zmm4, zmm0, zmm4 + vpaddw zmm5, zmm1, zmm5 + vpmulhw zmm0, zmm4, zmm15 + vpmulhw zmm1, zmm5, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpaddw zmm6, zmm2, zmm6 + vpaddw zmm7, zmm3, zmm7 + vpmulhw zmm2, zmm6, zmm15 + vpmulhw zmm3, zmm7, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [rsi], zmm0 + vmovdqu64 [rsi+64], zmm1 + vmovdqu64 [rsi+128], zmm2 + vmovdqu64 [rsi+192], zmm3 + vmovdqu64 zmm0, [rsi+256] + vmovdqu64 zmm1, [rsi+320] + vmovdqu64 zmm2, [rsi+384] + vmovdqu64 zmm3, [rsi+448] + vmovdqu64 zmm4, [rdi+256] + vmovdqu64 zmm5, [rdi+320] + vmovdqu64 zmm6, [rdi+384] + vmovdqu64 zmm7, [rdi+448] + vpaddw zmm4, zmm0, zmm4 + vpaddw zmm5, zmm1, zmm5 + vpmulhw zmm0, zmm4, zmm15 + vpmulhw zmm1, zmm5, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpaddw zmm6, zmm2, zmm6 + vpaddw zmm7, zmm3, zmm7 + vpmulhw zmm2, zmm6, zmm15 + vpmulhw zmm3, zmm7, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [rsi+256], zmm0 + vmovdqu64 [rsi+320], zmm1 + vmovdqu64 [rsi+384], zmm2 + vmovdqu64 [rsi+448], zmm3 + add r10, 1024 + add rdx, 1024 + sub r14, 2 + jmp L_encap_avx512_calc +L_encap_avx512_calc_odd: + mov r15, 62209 + vmovd xmm12, r15d + vpbroadcastw zmm12, xmm12 + movsxd r15, r13d + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [rcx] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+64], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+64], 1 + vmovdqu ymm5, YMMWORD PTR [rax+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+64], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [r8], ymm0 + vextracti64x4 YMMWORD PTR [r8+64], zmm0, 1 + vmovdqu YMMWORD PTR [r8+32], ymm1 + vextracti64x4 YMMWORD PTR [r8+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+192], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+192], 1 + vmovdqu ymm5, YMMWORD PTR [rax+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+192], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [r8+128], ymm0 + vextracti64x4 YMMWORD PTR [r8+192], zmm0, 1 + vmovdqu YMMWORD PTR [r8+160], ymm1 + vextracti64x4 YMMWORD PTR [r8+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+320], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+320], 1 + vmovdqu ymm5, YMMWORD PTR [rax+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+320], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [r8+256], ymm0 + vextracti64x4 YMMWORD PTR [r8+320], zmm0, 1 + vmovdqu YMMWORD PTR [r8+288], ymm1 + vextracti64x4 YMMWORD PTR [r8+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+448], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+448], 1 + vmovdqu ymm5, YMMWORD PTR [rax+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+448], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [r8+384], ymm0 + vextracti64x4 YMMWORD PTR [r8+448], zmm0, 1 + vmovdqu YMMWORD PTR [r8+416], ymm1 + vextracti64x4 YMMWORD PTR [r8+480], zmm1, 1 + add rcx, 512 + add rax, 512 + sub r15, 2 + jz L_pointwise_acc_mont_end_encap_v_avx512 +L_pointwise_acc_mont_start_encap_v_avx512: + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [rcx] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+64], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+64], 1 + vmovdqu ymm5, YMMWORD PTR [rax+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+64], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r8] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r8+64], 1 + vmovdqu ymm7, YMMWORD PTR [r8+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r8+96], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [r8], ymm0 + vextracti64x4 YMMWORD PTR [r8+64], zmm0, 1 + vmovdqu YMMWORD PTR [r8+32], ymm1 + vextracti64x4 YMMWORD PTR [r8+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+192], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+192], 1 + vmovdqu ymm5, YMMWORD PTR [rax+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+192], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r8+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r8+192], 1 + vmovdqu ymm7, YMMWORD PTR [r8+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r8+224], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [r8+128], ymm0 + vextracti64x4 YMMWORD PTR [r8+192], zmm0, 1 + vmovdqu YMMWORD PTR [r8+160], ymm1 + vextracti64x4 YMMWORD PTR [r8+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+320], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+320], 1 + vmovdqu ymm5, YMMWORD PTR [rax+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+320], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r8+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r8+320], 1 + vmovdqu ymm7, YMMWORD PTR [r8+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r8+352], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [r8+256], ymm0 + vextracti64x4 YMMWORD PTR [r8+320], zmm0, 1 + vmovdqu YMMWORD PTR [r8+288], ymm1 + vextracti64x4 YMMWORD PTR [r8+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+448], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+448], 1 + vmovdqu ymm5, YMMWORD PTR [rax+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+448], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r8+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r8+448], 1 + vmovdqu ymm7, YMMWORD PTR [r8+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r8+480], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [r8+384], ymm0 + vextracti64x4 YMMWORD PTR [r8+448], zmm0, 1 + vmovdqu YMMWORD PTR [r8+416], ymm1 + vextracti64x4 YMMWORD PTR [r8+480], zmm1, 1 + add rcx, 512 + add rax, 512 + sub r15, 1 + jg L_pointwise_acc_mont_start_encap_v_avx512 +L_pointwise_acc_mont_end_encap_v_avx512: + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [rcx] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+64], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+64], 1 + vmovdqu ymm5, YMMWORD PTR [rax+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+64], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r8] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r8+64], 1 + vmovdqu ymm7, YMMWORD PTR [r8+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r8+96], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [r8], ymm0 + vextracti64x4 YMMWORD PTR [r8+64], zmm0, 1 + vmovdqu YMMWORD PTR [r8+32], ymm1 + vextracti64x4 YMMWORD PTR [r8+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+192], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+192], 1 + vmovdqu ymm5, YMMWORD PTR [rax+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+192], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r8+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r8+192], 1 + vmovdqu ymm7, YMMWORD PTR [r8+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r8+224], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [r8+128], ymm0 + vextracti64x4 YMMWORD PTR [r8+192], zmm0, 1 + vmovdqu YMMWORD PTR [r8+160], ymm1 + vextracti64x4 YMMWORD PTR [r8+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+320], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+320], 1 + vmovdqu ymm5, YMMWORD PTR [rax+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+320], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r8+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r8+320], 1 + vmovdqu ymm7, YMMWORD PTR [r8+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r8+352], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [r8+256], ymm0 + vextracti64x4 YMMWORD PTR [r8+320], zmm0, 1 + vmovdqu YMMWORD PTR [r8+288], ymm1 + vextracti64x4 YMMWORD PTR [r8+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+448], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+448], 1 + vmovdqu ymm5, YMMWORD PTR [rax+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+448], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [r8+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r8+448], 1 + vmovdqu ymm7, YMMWORD PTR [r8+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r8+480], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [r8+384], ymm0 + vextracti64x4 YMMWORD PTR [r8+448], zmm0, 1 + vmovdqu YMMWORD PTR [r8+416], ymm1 + vextracti64x4 YMMWORD PTR [r8+480], zmm1, 1 + add rcx, 512 + mov rax, rbx + cmp r14, 1 + jne L_encap_avx512_vp_single + movsxd r15, r13d + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [r9] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+64], 1 + vmovdqu ymm3, YMMWORD PTR [r9+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+64], 1 + vmovdqu ymm5, YMMWORD PTR [rax+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+64], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rdx], ymm0 + vextracti64x4 YMMWORD PTR [rdx+64], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+32], ymm1 + vextracti64x4 YMMWORD PTR [rdx+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+192], 1 + vmovdqu ymm3, YMMWORD PTR [r9+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+192], 1 + vmovdqu ymm5, YMMWORD PTR [rax+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+192], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rdx+128], ymm0 + vextracti64x4 YMMWORD PTR [rdx+192], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+160], ymm1 + vextracti64x4 YMMWORD PTR [rdx+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+320], 1 + vmovdqu ymm3, YMMWORD PTR [r9+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+320], 1 + vmovdqu ymm5, YMMWORD PTR [rax+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+320], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rdx+256], ymm0 + vextracti64x4 YMMWORD PTR [rdx+320], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+288], ymm1 + vextracti64x4 YMMWORD PTR [rdx+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+448], 1 + vmovdqu ymm3, YMMWORD PTR [r9+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+448], 1 + vmovdqu ymm5, YMMWORD PTR [rax+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+448], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rdx+384], ymm0 + vextracti64x4 YMMWORD PTR [rdx+448], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+416], ymm1 + vextracti64x4 YMMWORD PTR [rdx+480], zmm1, 1 + add r9, 512 + add rax, 512 + sub r15, 2 + jz L_pointwise_acc_mont_end_encap_bp_odd_avx512 +L_pointwise_acc_mont_start_encap_bp_odd_avx512: + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [r9] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+64], 1 + vmovdqu ymm3, YMMWORD PTR [r9+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+64], 1 + vmovdqu ymm5, YMMWORD PTR [rax+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+64], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+64], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+96], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx], ymm0 + vextracti64x4 YMMWORD PTR [rdx+64], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+32], ymm1 + vextracti64x4 YMMWORD PTR [rdx+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+192], 1 + vmovdqu ymm3, YMMWORD PTR [r9+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+192], 1 + vmovdqu ymm5, YMMWORD PTR [rax+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+192], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+192], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+224], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+128], ymm0 + vextracti64x4 YMMWORD PTR [rdx+192], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+160], ymm1 + vextracti64x4 YMMWORD PTR [rdx+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+320], 1 + vmovdqu ymm3, YMMWORD PTR [r9+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+320], 1 + vmovdqu ymm5, YMMWORD PTR [rax+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+320], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+320], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+352], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+256], ymm0 + vextracti64x4 YMMWORD PTR [rdx+320], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+288], ymm1 + vextracti64x4 YMMWORD PTR [rdx+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+448], 1 + vmovdqu ymm3, YMMWORD PTR [r9+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+448], 1 + vmovdqu ymm5, YMMWORD PTR [rax+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+448], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+448], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+480], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+384], ymm0 + vextracti64x4 YMMWORD PTR [rdx+448], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+416], ymm1 + vextracti64x4 YMMWORD PTR [rdx+480], zmm1, 1 + add r9, 512 + add rax, 512 + sub r15, 1 + jg L_pointwise_acc_mont_start_encap_bp_odd_avx512 +L_pointwise_acc_mont_end_encap_bp_odd_avx512: + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [r9] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+64], 1 + vmovdqu ymm3, YMMWORD PTR [r9+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+64], 1 + vmovdqu ymm5, YMMWORD PTR [rax+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+64], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+64], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+96], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx], ymm0 + vextracti64x4 YMMWORD PTR [rdx+64], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+32], ymm1 + vextracti64x4 YMMWORD PTR [rdx+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+192], 1 + vmovdqu ymm3, YMMWORD PTR [r9+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+192], 1 + vmovdqu ymm5, YMMWORD PTR [rax+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+192], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+192], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+224], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+128], ymm0 + vextracti64x4 YMMWORD PTR [rdx+192], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+160], ymm1 + vextracti64x4 YMMWORD PTR [rdx+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+320], 1 + vmovdqu ymm3, YMMWORD PTR [r9+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+320], 1 + vmovdqu ymm5, YMMWORD PTR [rax+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+320], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+320], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+352], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+256], ymm0 + vextracti64x4 YMMWORD PTR [rdx+320], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+288], ymm1 + vextracti64x4 YMMWORD PTR [rdx+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [r9+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r9+448], 1 + vmovdqu ymm3, YMMWORD PTR [r9+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r9+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [rax+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rax+448], 1 + vmovdqu ymm5, YMMWORD PTR [rax+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rax+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [rbp+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [rbp+448], 1 + vmovdqu ymm11, YMMWORD PTR [rbp+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [rbp+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+448], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+480], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+384], ymm0 + vextracti64x4 YMMWORD PTR [rdx+448], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+416], ymm1 + vextracti64x4 YMMWORD PTR [rdx+480], zmm1, 1 + add r9, 512 + mov rax, rbx + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_inv] + vmovdqu64 ymm0, [r8] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx], 1 + vmovdqu64 ymm1, [r8+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+32], 1 + vmovdqu64 ymm2, [r8+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+64], 1 + vmovdqu64 ymm3, [r8+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+96], 1 + vmovdqu64 ymm4, [r8+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rdx+128], 1 + vmovdqu64 ymm5, [r8+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rdx+160], 1 + vmovdqu64 ymm6, [r8+192] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+192], 1 + vmovdqu64 ymm7, [r8+224] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+224], 1 + vmovdqu64 ymm19, [r8+256] + vinserti64x4 zmm19, zmm19, YMMWORD PTR [rdx+256], 1 + vmovdqu64 ymm20, [r8+288] + vinserti64x4 zmm20, zmm20, YMMWORD PTR [rdx+288], 1 + vmovdqu64 ymm21, [r8+320] + vinserti64x4 zmm21, zmm21, YMMWORD PTR [rdx+320], 1 + vmovdqu64 ymm22, [r8+352] + vinserti64x4 zmm22, zmm22, YMMWORD PTR [rdx+352], 1 + vmovdqu64 ymm23, [r8+384] + vinserti64x4 zmm23, zmm23, YMMWORD PTR [rdx+384], 1 + vmovdqu64 ymm24, [r8+416] + vinserti64x4 zmm24, zmm24, YMMWORD PTR [rdx+416], 1 + vmovdqu64 ymm25, [r8+448] + vinserti64x4 zmm25, zmm25, YMMWORD PTR [rdx+448], 1 + vmovdqu64 ymm26, [r8+480] + vinserti64x4 zmm26, zmm26, YMMWORD PTR [rdx+480], 1 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm0, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm0, zmm1 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+32] + vpsllq zmm0, zmm9, 32 + vpsrlq zmm1, zmm8, 32 + vpblendmd zmm0{k1}, zmm8, zmm0 + vpblendmd zmm1{k2}, zmm9, zmm1 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm2, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+64] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm2, zmm3 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+96] + vpsllq zmm2, zmm9, 32 + vpsrlq zmm3, zmm8, 32 + vpblendmd zmm2{k1}, zmm8, zmm2 + vpblendmd zmm3{k2}, zmm9, zmm3 + vpaddw zmm8, zmm0, zmm1 + vpaddw zmm9, zmm2, zmm3 + vpsubw zmm1, zmm0, zmm1 + vpsubw zmm3, zmm2, zmm3 + vpmulhw zmm0, zmm8, zmm15 + vpmulhw zmm2, zmm9, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm2, zmm2, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm2, zmm2, zmm14 + vpsubw zmm8, zmm8, zmm0 + vpsubw zmm9, zmm9, zmm2 + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm1, zmm1, zmm0 + vpsubw zmm3, zmm3, zmm2 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm19, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1216] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm19, zmm20 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1248] + vpsllq zmm19, zmm28, 32 + vpsrlq zmm20, zmm27, 32 + vpblendmd zmm19{k1}, zmm27, zmm19 + vpblendmd zmm20{k2}, zmm28, zmm20 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm21, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1280] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm21, zmm22 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1312] + vpsllq zmm21, zmm28, 32 + vpsrlq zmm22, zmm27, 32 + vpblendmd zmm21{k1}, zmm27, zmm21 + vpblendmd zmm22{k2}, zmm28, zmm22 + vpaddw zmm27, zmm19, zmm20 + vpaddw zmm28, zmm21, zmm22 + vpsubw zmm20, zmm19, zmm20 + vpsubw zmm22, zmm21, zmm22 + vpmulhw zmm19, zmm27, zmm15 + vpmulhw zmm21, zmm28, zmm15 + vpsraw zmm19, zmm19, 10 + vpsraw zmm21, zmm21, 10 + vpmullw zmm19, zmm19, zmm14 + vpmullw zmm21, zmm21, zmm14 + vpsubw zmm27, zmm27, zmm19 + vpsubw zmm28, zmm28, zmm21 + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm20, zmm20, zmm19 + vpsubw zmm22, zmm22, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+128] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+160] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+192] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+224] + vpunpckldq zmm0, zmm8, zmm1 + vpunpckhdq zmm1, zmm8, zmm1 + vpunpckldq zmm2, zmm9, zmm3 + vpunpckhdq zmm3, zmm9, zmm3 + vpaddw zmm8, zmm0, zmm1 + vpaddw zmm9, zmm2, zmm3 + vpsubw zmm1, zmm0, zmm1 + vpsubw zmm3, zmm2, zmm3 + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm1, zmm1, zmm0 + vpsubw zmm3, zmm3, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1344] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1376] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1408] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1440] + vpunpckldq zmm19, zmm27, zmm20 + vpunpckhdq zmm20, zmm27, zmm20 + vpunpckldq zmm21, zmm28, zmm22 + vpunpckhdq zmm22, zmm28, zmm22 + vpaddw zmm27, zmm19, zmm20 + vpaddw zmm28, zmm21, zmm22 + vpsubw zmm20, zmm19, zmm20 + vpsubw zmm22, zmm21, zmm22 + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm20, zmm20, zmm19 + vpsubw zmm22, zmm22, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+256] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+288] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+320] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+352] + vpunpcklqdq zmm0, zmm8, zmm1 + vpunpckhqdq zmm1, zmm8, zmm1 + vpunpcklqdq zmm2, zmm9, zmm3 + vpunpckhqdq zmm3, zmm9, zmm3 + vpaddw zmm8, zmm0, zmm1 + vpaddw zmm9, zmm2, zmm3 + vpsubw zmm1, zmm0, zmm1 + vpsubw zmm3, zmm2, zmm3 + vpmulhw zmm0, zmm8, zmm15 + vpmulhw zmm2, zmm9, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm2, zmm2, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm2, zmm2, zmm14 + vpsubw zmm8, zmm8, zmm0 + vpsubw zmm9, zmm9, zmm2 + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm1, zmm1, zmm0 + vpsubw zmm3, zmm3, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1472] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1504] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1536] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1568] + vpunpcklqdq zmm19, zmm27, zmm20 + vpunpckhqdq zmm20, zmm27, zmm20 + vpunpcklqdq zmm21, zmm28, zmm22 + vpunpckhqdq zmm22, zmm28, zmm22 + vpaddw zmm27, zmm19, zmm20 + vpaddw zmm28, zmm21, zmm22 + vpsubw zmm20, zmm19, zmm20 + vpsubw zmm22, zmm21, zmm22 + vpmulhw zmm19, zmm27, zmm15 + vpmulhw zmm21, zmm28, zmm15 + vpsraw zmm19, zmm19, 10 + vpsraw zmm21, zmm21, 10 + vpmullw zmm19, zmm19, zmm14 + vpmullw zmm21, zmm21, zmm14 + vpsubw zmm27, zmm27, zmm19 + vpsubw zmm28, zmm28, zmm21 + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm20, zmm20, zmm19 + vpsubw zmm22, zmm22, zmm21 + vmovdqa64 zmm0, zmm17 + vpermi2q zmm0, zmm8, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+384] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm8, zmm1 + vmovdqa64 zmm1, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+416] + vmovdqa64 zmm2, zmm17 + vpermi2q zmm2, zmm9, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+448] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm9, zmm3 + vmovdqa64 zmm3, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+480] + vpsubw zmm8, zmm0, zmm1 + vpsubw zmm9, zmm2, zmm3 + vpaddw zmm0, zmm0, zmm1 + vpaddw zmm2, zmm2, zmm3 + vpmullw zmm1, zmm8, zmm12 + vpmullw zmm3, zmm9, zmm13 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm11 + vpmulhw zmm1, zmm1, zmm14 + vpmulhw zmm3, zmm3, zmm14 + vpsubw zmm1, zmm8, zmm1 + vpsubw zmm3, zmm9, zmm3 + vmovdqa64 zmm19, zmm17 + vpermi2q zmm19, zmm27, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1600] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm27, zmm20 + vmovdqa64 zmm20, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1632] + vmovdqa64 zmm21, zmm17 + vpermi2q zmm21, zmm28, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1664] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm28, zmm22 + vmovdqa64 zmm22, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1696] + vpsubw zmm27, zmm19, zmm20 + vpsubw zmm28, zmm21, zmm22 + vpaddw zmm19, zmm19, zmm20 + vpaddw zmm21, zmm21, zmm22 + vpmullw zmm20, zmm27, zmm12 + vpmullw zmm22, zmm28, zmm13 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm11 + vpmulhw zmm20, zmm20, zmm14 + vpmulhw zmm22, zmm22, zmm14 + vpsubw zmm20, zmm27, zmm20 + vpsubw zmm22, zmm28, zmm22 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+512] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+544] + vpaddw zmm8, zmm0, zmm2 + vpaddw zmm9, zmm1, zmm3 + vpsubw zmm2, zmm0, zmm2 + vpsubw zmm3, zmm1, zmm3 + vpmulhw zmm0, zmm8, zmm15 + vpmulhw zmm1, zmm9, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm8, zmm0 + vpsubw zmm1, zmm9, zmm1 + vpmullw zmm8, zmm2, zmm12 + vpmullw zmm9, zmm3, zmm12 + vpmulhw zmm2, zmm2, zmm10 + vpmulhw zmm3, zmm3, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm2, zmm2, zmm8 + vpsubw zmm3, zmm3, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1728] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1760] + vpaddw zmm27, zmm19, zmm21 + vpaddw zmm28, zmm20, zmm22 + vpsubw zmm21, zmm19, zmm21 + vpsubw zmm22, zmm20, zmm22 + vpmulhw zmm19, zmm27, zmm15 + vpmulhw zmm20, zmm28, zmm15 + vpsraw zmm19, zmm19, 10 + vpsraw zmm20, zmm20, 10 + vpmullw zmm19, zmm19, zmm14 + vpmullw zmm20, zmm20, zmm14 + vpsubw zmm19, zmm27, zmm19 + vpsubw zmm20, zmm28, zmm20 + vpmullw zmm27, zmm21, zmm12 + vpmullw zmm28, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm27, zmm27, zmm14 + vpmulhw zmm28, zmm28, zmm14 + vpsubw zmm21, zmm21, zmm27 + vpsubw zmm22, zmm22, zmm28 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm4, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+576] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm4, zmm5 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+608] + vpsllq zmm4, zmm9, 32 + vpsrlq zmm5, zmm8, 32 + vpblendmd zmm4{k1}, zmm8, zmm4 + vpblendmd zmm5{k2}, zmm9, zmm5 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm6, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+640] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm6, zmm7 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+672] + vpsllq zmm6, zmm9, 32 + vpsrlq zmm7, zmm8, 32 + vpblendmd zmm6{k1}, zmm8, zmm6 + vpblendmd zmm7{k2}, zmm9, zmm7 + vpaddw zmm8, zmm4, zmm5 + vpaddw zmm9, zmm6, zmm7 + vpsubw zmm5, zmm4, zmm5 + vpsubw zmm7, zmm6, zmm7 + vpmulhw zmm4, zmm8, zmm15 + vpmulhw zmm6, zmm9, zmm15 + vpsraw zmm4, zmm4, 10 + vpsraw zmm6, zmm6, 10 + vpmullw zmm4, zmm4, zmm14 + vpmullw zmm6, zmm6, zmm14 + vpsubw zmm8, zmm8, zmm4 + vpsubw zmm9, zmm9, zmm6 + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm5, zmm5, zmm4 + vpsubw zmm7, zmm7, zmm6 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm23, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1792] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm23, zmm24 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1824] + vpsllq zmm23, zmm28, 32 + vpsrlq zmm24, zmm27, 32 + vpblendmd zmm23{k1}, zmm27, zmm23 + vpblendmd zmm24{k2}, zmm28, zmm24 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm25, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1856] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm25, zmm26 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1888] + vpsllq zmm25, zmm28, 32 + vpsrlq zmm26, zmm27, 32 + vpblendmd zmm25{k1}, zmm27, zmm25 + vpblendmd zmm26{k2}, zmm28, zmm26 + vpaddw zmm27, zmm23, zmm24 + vpaddw zmm28, zmm25, zmm26 + vpsubw zmm24, zmm23, zmm24 + vpsubw zmm26, zmm25, zmm26 + vpmulhw zmm23, zmm27, zmm15 + vpmulhw zmm25, zmm28, zmm15 + vpsraw zmm23, zmm23, 10 + vpsraw zmm25, zmm25, 10 + vpmullw zmm23, zmm23, zmm14 + vpmullw zmm25, zmm25, zmm14 + vpsubw zmm27, zmm27, zmm23 + vpsubw zmm28, zmm28, zmm25 + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm24, zmm24, zmm23 + vpsubw zmm26, zmm26, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+704] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+736] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+768] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+800] + vpunpckldq zmm4, zmm8, zmm5 + vpunpckhdq zmm5, zmm8, zmm5 + vpunpckldq zmm6, zmm9, zmm7 + vpunpckhdq zmm7, zmm9, zmm7 + vpaddw zmm8, zmm4, zmm5 + vpaddw zmm9, zmm6, zmm7 + vpsubw zmm5, zmm4, zmm5 + vpsubw zmm7, zmm6, zmm7 + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm5, zmm5, zmm4 + vpsubw zmm7, zmm7, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1920] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1952] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1984] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2016] + vpunpckldq zmm23, zmm27, zmm24 + vpunpckhdq zmm24, zmm27, zmm24 + vpunpckldq zmm25, zmm28, zmm26 + vpunpckhdq zmm26, zmm28, zmm26 + vpaddw zmm27, zmm23, zmm24 + vpaddw zmm28, zmm25, zmm26 + vpsubw zmm24, zmm23, zmm24 + vpsubw zmm26, zmm25, zmm26 + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm24, zmm24, zmm23 + vpsubw zmm26, zmm26, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+832] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+864] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+896] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+928] + vpunpcklqdq zmm4, zmm8, zmm5 + vpunpckhqdq zmm5, zmm8, zmm5 + vpunpcklqdq zmm6, zmm9, zmm7 + vpunpckhqdq zmm7, zmm9, zmm7 + vpaddw zmm8, zmm4, zmm5 + vpaddw zmm9, zmm6, zmm7 + vpsubw zmm5, zmm4, zmm5 + vpsubw zmm7, zmm6, zmm7 + vpmulhw zmm4, zmm8, zmm15 + vpmulhw zmm6, zmm9, zmm15 + vpsraw zmm4, zmm4, 10 + vpsraw zmm6, zmm6, 10 + vpmullw zmm4, zmm4, zmm14 + vpmullw zmm6, zmm6, zmm14 + vpsubw zmm8, zmm8, zmm4 + vpsubw zmm9, zmm9, zmm6 + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm5, zmm5, zmm4 + vpsubw zmm7, zmm7, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2048] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2080] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2112] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2144] + vpunpcklqdq zmm23, zmm27, zmm24 + vpunpckhqdq zmm24, zmm27, zmm24 + vpunpcklqdq zmm25, zmm28, zmm26 + vpunpckhqdq zmm26, zmm28, zmm26 + vpaddw zmm27, zmm23, zmm24 + vpaddw zmm28, zmm25, zmm26 + vpsubw zmm24, zmm23, zmm24 + vpsubw zmm26, zmm25, zmm26 + vpmulhw zmm23, zmm27, zmm15 + vpmulhw zmm25, zmm28, zmm15 + vpsraw zmm23, zmm23, 10 + vpsraw zmm25, zmm25, 10 + vpmullw zmm23, zmm23, zmm14 + vpmullw zmm25, zmm25, zmm14 + vpsubw zmm27, zmm27, zmm23 + vpsubw zmm28, zmm28, zmm25 + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm24, zmm24, zmm23 + vpsubw zmm26, zmm26, zmm25 + vmovdqa64 zmm4, zmm17 + vpermi2q zmm4, zmm8, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+960] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm8, zmm5 + vmovdqa64 zmm5, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+992] + vmovdqa64 zmm6, zmm17 + vpermi2q zmm6, zmm9, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1024] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm9, zmm7 + vmovdqa64 zmm7, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1056] + vpsubw zmm8, zmm4, zmm5 + vpsubw zmm9, zmm6, zmm7 + vpaddw zmm4, zmm4, zmm5 + vpaddw zmm6, zmm6, zmm7 + vpmullw zmm5, zmm8, zmm12 + vpmullw zmm7, zmm9, zmm13 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm11 + vpmulhw zmm5, zmm5, zmm14 + vpmulhw zmm7, zmm7, zmm14 + vpsubw zmm5, zmm8, zmm5 + vpsubw zmm7, zmm9, zmm7 + vmovdqa64 zmm23, zmm17 + vpermi2q zmm23, zmm27, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2176] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm27, zmm24 + vmovdqa64 zmm24, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2208] + vmovdqa64 zmm25, zmm17 + vpermi2q zmm25, zmm28, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2240] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm28, zmm26 + vmovdqa64 zmm26, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2272] + vpsubw zmm27, zmm23, zmm24 + vpsubw zmm28, zmm25, zmm26 + vpaddw zmm23, zmm23, zmm24 + vpaddw zmm25, zmm25, zmm26 + vpmullw zmm24, zmm27, zmm12 + vpmullw zmm26, zmm28, zmm13 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm11 + vpmulhw zmm24, zmm24, zmm14 + vpmulhw zmm26, zmm26, zmm14 + vpsubw zmm24, zmm27, zmm24 + vpsubw zmm26, zmm28, zmm26 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1088] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1120] + vpaddw zmm8, zmm4, zmm6 + vpaddw zmm9, zmm5, zmm7 + vpsubw zmm6, zmm4, zmm6 + vpsubw zmm7, zmm5, zmm7 + vpmulhw zmm4, zmm8, zmm15 + vpmulhw zmm5, zmm9, zmm15 + vpsraw zmm4, zmm4, 10 + vpsraw zmm5, zmm5, 10 + vpmullw zmm4, zmm4, zmm14 + vpmullw zmm5, zmm5, zmm14 + vpsubw zmm4, zmm8, zmm4 + vpsubw zmm5, zmm9, zmm5 + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm6, zmm6, zmm8 + vpsubw zmm7, zmm7, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2304] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2336] + vpaddw zmm27, zmm23, zmm25 + vpaddw zmm28, zmm24, zmm26 + vpsubw zmm25, zmm23, zmm25 + vpsubw zmm26, zmm24, zmm26 + vpmulhw zmm23, zmm27, zmm15 + vpmulhw zmm24, zmm28, zmm15 + vpsraw zmm23, zmm23, 10 + vpsraw zmm24, zmm24, 10 + vpmullw zmm23, zmm23, zmm14 + vpmullw zmm24, zmm24, zmm14 + vpsubw zmm23, zmm27, zmm23 + vpsubw zmm24, zmm28, zmm24 + vpmullw zmm27, zmm25, zmm12 + vpmullw zmm28, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm27, zmm27, zmm14 + vpmulhw zmm28, zmm28, zmm14 + vpsubw zmm25, zmm25, zmm27 + vpsubw zmm26, zmm26, zmm28 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1152] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1184] + vpsubw zmm8, zmm0, zmm4 + vpsubw zmm9, zmm1, zmm5 + vpaddw zmm0, zmm0, zmm4 + vpaddw zmm1, zmm1, zmm5 + vpmullw zmm4, zmm8, zmm12 + vpmullw zmm5, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm5, zmm5, zmm14 + vpsubw zmm4, zmm8, zmm4 + vpsubw zmm5, zmm9, zmm5 + vpsubw zmm8, zmm2, zmm6 + vpsubw zmm9, zmm3, zmm7 + vpaddw zmm2, zmm2, zmm6 + vpaddw zmm3, zmm3, zmm7 + vpmullw zmm6, zmm8, zmm12 + vpmullw zmm7, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpmulhw zmm7, zmm7, zmm14 + vpsubw zmm6, zmm8, zmm6 + vpsubw zmm7, zmm9, zmm7 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2368] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2400] + vpsubw zmm27, zmm19, zmm23 + vpsubw zmm28, zmm20, zmm24 + vpaddw zmm19, zmm19, zmm23 + vpaddw zmm20, zmm20, zmm24 + vpmullw zmm23, zmm27, zmm12 + vpmullw zmm24, zmm28, zmm12 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm10 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm24, zmm24, zmm14 + vpsubw zmm23, zmm27, zmm23 + vpsubw zmm24, zmm28, zmm24 + vpsubw zmm27, zmm21, zmm25 + vpsubw zmm28, zmm22, zmm26 + vpaddw zmm21, zmm21, zmm25 + vpaddw zmm22, zmm22, zmm26 + vpmullw zmm25, zmm27, zmm12 + vpmullw zmm26, zmm28, zmm12 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm10 + vpmulhw zmm25, zmm25, zmm14 + vpmulhw zmm26, zmm26, zmm14 + vpsubw zmm25, zmm27, zmm25 + vpsubw zmm26, zmm28, zmm26 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2432] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2464] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2496] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2528] + vpsubw zmm8, zmm0, zmm19 + vpsubw zmm9, zmm1, zmm20 + vpaddw zmm0, zmm0, zmm19 + vpaddw zmm1, zmm1, zmm20 + vpmullw zmm19, zmm8, zmm12 + vpmullw zmm20, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm20, zmm20, zmm14 + vpsubw zmm19, zmm8, zmm19 + vpsubw zmm20, zmm9, zmm20 + vpaddw zmm8, zmm2, zmm21 + vpaddw zmm9, zmm3, zmm22 + vpsubw zmm21, zmm2, zmm21 + vpsubw zmm22, zmm3, zmm22 + vpmulhw zmm2, zmm8, zmm15 + vpmulhw zmm3, zmm9, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm8, zmm2 + vpsubw zmm3, zmm9, zmm3 + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm21, zmm21, zmm8 + vpsubw zmm22, zmm22, zmm9 + vpsubw zmm8, zmm4, zmm23 + vpsubw zmm9, zmm5, zmm24 + vpaddw zmm4, zmm4, zmm23 + vpaddw zmm5, zmm5, zmm24 + vpmullw zmm23, zmm8, zmm12 + vpmullw zmm24, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm24, zmm24, zmm14 + vpsubw zmm23, zmm8, zmm23 + vpsubw zmm24, zmm9, zmm24 + vpaddw zmm8, zmm6, zmm25 + vpaddw zmm9, zmm7, zmm26 + vpsubw zmm25, zmm6, zmm25 + vpsubw zmm26, zmm7, zmm26 + vpmulhw zmm6, zmm8, zmm15 + vpmulhw zmm7, zmm9, zmm15 + vpsraw zmm6, zmm6, 10 + vpsraw zmm7, zmm7, 10 + vpmullw zmm6, zmm6, zmm14 + vpmullw zmm7, zmm7, zmm14 + vpsubw zmm6, zmm8, zmm6 + vpsubw zmm7, zmm9, zmm7 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm25, zmm25, zmm8 + vpsubw zmm26, zmm26, zmm9 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm0, zmm0, zmm11 + vpmulhw zmm1, zmm1, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm0, zmm8 + vpsubw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm2, zmm13 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm2, zmm2, zmm11 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm2, zmm2, zmm8 + vpsubw zmm3, zmm3, zmm9 + vpmullw zmm8, zmm4, zmm13 + vpmullw zmm9, zmm5, zmm13 + vpmulhw zmm4, zmm4, zmm11 + vpmulhw zmm5, zmm5, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm4, zmm4, zmm8 + vpsubw zmm5, zmm5, zmm9 + vpmullw zmm8, zmm6, zmm13 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm6, zmm6, zmm11 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm6, zmm6, zmm8 + vpsubw zmm7, zmm7, zmm9 + vpmullw zmm8, zmm19, zmm13 + vpmullw zmm9, zmm20, zmm13 + vpmulhw zmm19, zmm19, zmm11 + vpmulhw zmm20, zmm20, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm19, zmm19, zmm8 + vpsubw zmm20, zmm20, zmm9 + vpmullw zmm8, zmm21, zmm13 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm21, zmm21, zmm11 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm21, zmm21, zmm8 + vpsubw zmm22, zmm22, zmm9 + vpmullw zmm8, zmm23, zmm13 + vpmullw zmm9, zmm24, zmm13 + vpmulhw zmm23, zmm23, zmm11 + vpmulhw zmm24, zmm24, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm23, zmm23, zmm8 + vpsubw zmm24, zmm24, zmm9 + vpmullw zmm8, zmm25, zmm13 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm25, zmm25, zmm11 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm25, zmm25, zmm8 + vpsubw zmm26, zmm26, zmm9 + vmovdqu64 [r8], ymm0 + vextracti64x4 YMMWORD PTR [rdx], zmm0, 1 + vmovdqu64 [r8+32], ymm1 + vextracti64x4 YMMWORD PTR [rdx+32], zmm1, 1 + vmovdqu64 [r8+64], ymm2 + vextracti64x4 YMMWORD PTR [rdx+64], zmm2, 1 + vmovdqu64 [r8+96], ymm3 + vextracti64x4 YMMWORD PTR [rdx+96], zmm3, 1 + vmovdqu64 [r8+128], ymm4 + vextracti64x4 YMMWORD PTR [rdx+128], zmm4, 1 + vmovdqu64 [r8+160], ymm5 + vextracti64x4 YMMWORD PTR [rdx+160], zmm5, 1 + vmovdqu64 [r8+192], ymm6 + vextracti64x4 YMMWORD PTR [rdx+192], zmm6, 1 + vmovdqu64 [r8+224], ymm7 + vextracti64x4 YMMWORD PTR [rdx+224], zmm7, 1 + vmovdqu64 [r8+256], ymm19 + vextracti64x4 YMMWORD PTR [rdx+256], zmm19, 1 + vmovdqu64 [r8+288], ymm20 + vextracti64x4 YMMWORD PTR [rdx+288], zmm20, 1 + vmovdqu64 [r8+320], ymm21 + vextracti64x4 YMMWORD PTR [rdx+320], zmm21, 1 + vmovdqu64 [r8+352], ymm22 + vextracti64x4 YMMWORD PTR [rdx+352], zmm22, 1 + vmovdqu64 [r8+384], ymm23 + vextracti64x4 YMMWORD PTR [rdx+384], zmm23, 1 + vmovdqu64 [r8+416], ymm24 + vextracti64x4 YMMWORD PTR [rdx+416], zmm24, 1 + vmovdqu64 [r8+448], ymm25 + vextracti64x4 YMMWORD PTR [rdx+448], zmm25, 1 + vmovdqu64 [r8+480], ymm26 + vextracti64x4 YMMWORD PTR [rdx+480], zmm26, 1 + vmovdqu64 zmm0, [r12] + vmovdqu64 zmm1, [r12+64] + vmovdqu64 zmm2, [r12+128] + vmovdqu64 zmm3, [r12+192] + vmovdqu64 zmm4, [r11] + vmovdqu64 zmm5, [r11+64] + vmovdqu64 zmm6, [r11+128] + vmovdqu64 zmm7, [r11+192] + vpaddw zmm4, zmm4, zmm0 + vpaddw zmm5, zmm5, zmm1 + vpaddw zmm6, zmm6, zmm2 + vpaddw zmm7, zmm7, zmm3 + vmovdqu64 zmm0, [r8] + vmovdqu64 zmm1, [r8+64] + vmovdqu64 zmm2, [r8+128] + vmovdqu64 zmm3, [r8+192] + vpaddw zmm4, zmm0, zmm4 + vpaddw zmm5, zmm1, zmm5 + vpmulhw zmm0, zmm4, zmm15 + vpmulhw zmm1, zmm5, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpaddw zmm6, zmm2, zmm6 + vpaddw zmm7, zmm3, zmm7 + vpmulhw zmm2, zmm6, zmm15 + vpmulhw zmm3, zmm7, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [r8], zmm0 + vmovdqu64 [r8+64], zmm1 + vmovdqu64 [r8+128], zmm2 + vmovdqu64 [r8+192], zmm3 + vmovdqu64 zmm0, [r12+256] + vmovdqu64 zmm1, [r12+320] + vmovdqu64 zmm2, [r12+384] + vmovdqu64 zmm3, [r12+448] + vmovdqu64 zmm4, [r11+256] + vmovdqu64 zmm5, [r11+320] + vmovdqu64 zmm6, [r11+384] + vmovdqu64 zmm7, [r11+448] + vpaddw zmm4, zmm4, zmm0 + vpaddw zmm5, zmm5, zmm1 + vpaddw zmm6, zmm6, zmm2 + vpaddw zmm7, zmm7, zmm3 + vmovdqu64 zmm0, [r8+256] + vmovdqu64 zmm1, [r8+320] + vmovdqu64 zmm2, [r8+384] + vmovdqu64 zmm3, [r8+448] + vpaddw zmm4, zmm0, zmm4 + vpaddw zmm5, zmm1, zmm5 + vpmulhw zmm0, zmm4, zmm15 + vpmulhw zmm1, zmm5, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpaddw zmm6, zmm2, zmm6 + vpaddw zmm7, zmm3, zmm7 + vpmulhw zmm2, zmm6, zmm15 + vpmulhw zmm3, zmm7, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [r8+256], zmm0 + vmovdqu64 [r8+320], zmm1 + vmovdqu64 [r8+384], zmm2 + vmovdqu64 [r8+448], zmm3 + vmovdqu64 zmm0, [rdx] + vmovdqu64 zmm1, [rdx+64] + vmovdqu64 zmm2, [rdx+128] + vmovdqu64 zmm3, [rdx+192] + vmovdqu64 zmm4, [r10] + vmovdqu64 zmm5, [r10+64] + vmovdqu64 zmm6, [r10+128] + vmovdqu64 zmm7, [r10+192] + vpaddw zmm4, zmm0, zmm4 + vpaddw zmm5, zmm1, zmm5 + vpmulhw zmm0, zmm4, zmm15 + vpmulhw zmm1, zmm5, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpaddw zmm6, zmm2, zmm6 + vpaddw zmm7, zmm3, zmm7 + vpmulhw zmm2, zmm6, zmm15 + vpmulhw zmm3, zmm7, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [rdx], zmm0 + vmovdqu64 [rdx+64], zmm1 + vmovdqu64 [rdx+128], zmm2 + vmovdqu64 [rdx+192], zmm3 + vmovdqu64 zmm0, [rdx+256] + vmovdqu64 zmm1, [rdx+320] + vmovdqu64 zmm2, [rdx+384] + vmovdqu64 zmm3, [rdx+448] + vmovdqu64 zmm4, [r10+256] + vmovdqu64 zmm5, [r10+320] + vmovdqu64 zmm6, [r10+384] + vmovdqu64 zmm7, [r10+448] + vpaddw zmm4, zmm0, zmm4 + vpaddw zmm5, zmm1, zmm5 + vpmulhw zmm0, zmm4, zmm15 + vpmulhw zmm1, zmm5, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpaddw zmm6, zmm2, zmm6 + vpaddw zmm7, zmm3, zmm7 + vpmulhw zmm2, zmm6, zmm15 + vpmulhw zmm3, zmm7, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [rdx+256], zmm0 + vmovdqu64 [rdx+320], zmm1 + vmovdqu64 [rdx+384], zmm2 + vmovdqu64 [rdx+448], zmm3 + jmp L_encap_avx512_calc_done +L_encap_avx512_vp_single: + mov rbp, QWORD PTR [ptr_L_mlkem_avx512_zetas_inv] + vmovdqu64 ymm0, [r8] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [r8], 1 + vmovdqu64 ymm1, [r8+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [r8+32], 1 + vmovdqu64 ymm2, [r8+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r8+64], 1 + vmovdqu64 ymm3, [r8+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r8+96], 1 + vmovdqu64 ymm4, [r8+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+128], 1 + vmovdqu64 ymm5, [r8+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+160], 1 + vmovdqu64 ymm6, [r8+192] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r8+192], 1 + vmovdqu64 ymm7, [r8+224] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r8+224], 1 + vmovdqu64 ymm19, [r8+256] + vinserti64x4 zmm19, zmm19, YMMWORD PTR [r8+256], 1 + vmovdqu64 ymm20, [r8+288] + vinserti64x4 zmm20, zmm20, YMMWORD PTR [r8+288], 1 + vmovdqu64 ymm21, [r8+320] + vinserti64x4 zmm21, zmm21, YMMWORD PTR [r8+320], 1 + vmovdqu64 ymm22, [r8+352] + vinserti64x4 zmm22, zmm22, YMMWORD PTR [r8+352], 1 + vmovdqu64 ymm23, [r8+384] + vinserti64x4 zmm23, zmm23, YMMWORD PTR [r8+384], 1 + vmovdqu64 ymm24, [r8+416] + vinserti64x4 zmm24, zmm24, YMMWORD PTR [r8+416], 1 + vmovdqu64 ymm25, [r8+448] + vinserti64x4 zmm25, zmm25, YMMWORD PTR [r8+448], 1 + vmovdqu64 ymm26, [r8+480] + vinserti64x4 zmm26, zmm26, YMMWORD PTR [r8+480], 1 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm0, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm0, zmm1 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+32] + vpsllq zmm0, zmm9, 32 + vpsrlq zmm1, zmm8, 32 + vpblendmd zmm0{k1}, zmm8, zmm0 + vpblendmd zmm1{k2}, zmm9, zmm1 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm2, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+64] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm2, zmm3 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+96] + vpsllq zmm2, zmm9, 32 + vpsrlq zmm3, zmm8, 32 + vpblendmd zmm2{k1}, zmm8, zmm2 + vpblendmd zmm3{k2}, zmm9, zmm3 + vpaddw zmm8, zmm0, zmm1 + vpaddw zmm9, zmm2, zmm3 + vpsubw zmm1, zmm0, zmm1 + vpsubw zmm3, zmm2, zmm3 + vpmulhw zmm0, zmm8, zmm15 + vpmulhw zmm2, zmm9, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm2, zmm2, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm2, zmm2, zmm14 + vpsubw zmm8, zmm8, zmm0 + vpsubw zmm9, zmm9, zmm2 + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm1, zmm1, zmm0 + vpsubw zmm3, zmm3, zmm2 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm19, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1216] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm19, zmm20 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1248] + vpsllq zmm19, zmm28, 32 + vpsrlq zmm20, zmm27, 32 + vpblendmd zmm19{k1}, zmm27, zmm19 + vpblendmd zmm20{k2}, zmm28, zmm20 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm21, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1280] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm21, zmm22 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1312] + vpsllq zmm21, zmm28, 32 + vpsrlq zmm22, zmm27, 32 + vpblendmd zmm21{k1}, zmm27, zmm21 + vpblendmd zmm22{k2}, zmm28, zmm22 + vpaddw zmm27, zmm19, zmm20 + vpaddw zmm28, zmm21, zmm22 + vpsubw zmm20, zmm19, zmm20 + vpsubw zmm22, zmm21, zmm22 + vpmulhw zmm19, zmm27, zmm15 + vpmulhw zmm21, zmm28, zmm15 + vpsraw zmm19, zmm19, 10 + vpsraw zmm21, zmm21, 10 + vpmullw zmm19, zmm19, zmm14 + vpmullw zmm21, zmm21, zmm14 + vpsubw zmm27, zmm27, zmm19 + vpsubw zmm28, zmm28, zmm21 + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm20, zmm20, zmm19 + vpsubw zmm22, zmm22, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+128] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+160] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+192] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+224] + vpunpckldq zmm0, zmm8, zmm1 + vpunpckhdq zmm1, zmm8, zmm1 + vpunpckldq zmm2, zmm9, zmm3 + vpunpckhdq zmm3, zmm9, zmm3 + vpaddw zmm8, zmm0, zmm1 + vpaddw zmm9, zmm2, zmm3 + vpsubw zmm1, zmm0, zmm1 + vpsubw zmm3, zmm2, zmm3 + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm1, zmm1, zmm0 + vpsubw zmm3, zmm3, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1344] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1376] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1408] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1440] + vpunpckldq zmm19, zmm27, zmm20 + vpunpckhdq zmm20, zmm27, zmm20 + vpunpckldq zmm21, zmm28, zmm22 + vpunpckhdq zmm22, zmm28, zmm22 + vpaddw zmm27, zmm19, zmm20 + vpaddw zmm28, zmm21, zmm22 + vpsubw zmm20, zmm19, zmm20 + vpsubw zmm22, zmm21, zmm22 + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm20, zmm20, zmm19 + vpsubw zmm22, zmm22, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+256] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+288] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+320] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+352] + vpunpcklqdq zmm0, zmm8, zmm1 + vpunpckhqdq zmm1, zmm8, zmm1 + vpunpcklqdq zmm2, zmm9, zmm3 + vpunpckhqdq zmm3, zmm9, zmm3 + vpaddw zmm8, zmm0, zmm1 + vpaddw zmm9, zmm2, zmm3 + vpsubw zmm1, zmm0, zmm1 + vpsubw zmm3, zmm2, zmm3 + vpmulhw zmm0, zmm8, zmm15 + vpmulhw zmm2, zmm9, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm2, zmm2, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm2, zmm2, zmm14 + vpsubw zmm8, zmm8, zmm0 + vpsubw zmm9, zmm9, zmm2 + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm1, zmm1, zmm0 + vpsubw zmm3, zmm3, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1472] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1504] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1536] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1568] + vpunpcklqdq zmm19, zmm27, zmm20 + vpunpckhqdq zmm20, zmm27, zmm20 + vpunpcklqdq zmm21, zmm28, zmm22 + vpunpckhqdq zmm22, zmm28, zmm22 + vpaddw zmm27, zmm19, zmm20 + vpaddw zmm28, zmm21, zmm22 + vpsubw zmm20, zmm19, zmm20 + vpsubw zmm22, zmm21, zmm22 + vpmulhw zmm19, zmm27, zmm15 + vpmulhw zmm21, zmm28, zmm15 + vpsraw zmm19, zmm19, 10 + vpsraw zmm21, zmm21, 10 + vpmullw zmm19, zmm19, zmm14 + vpmullw zmm21, zmm21, zmm14 + vpsubw zmm27, zmm27, zmm19 + vpsubw zmm28, zmm28, zmm21 + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm20, zmm20, zmm19 + vpsubw zmm22, zmm22, zmm21 + vmovdqa64 zmm0, zmm17 + vpermi2q zmm0, zmm8, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+384] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm8, zmm1 + vmovdqa64 zmm1, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+416] + vmovdqa64 zmm2, zmm17 + vpermi2q zmm2, zmm9, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+448] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm9, zmm3 + vmovdqa64 zmm3, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+480] + vpsubw zmm8, zmm0, zmm1 + vpsubw zmm9, zmm2, zmm3 + vpaddw zmm0, zmm0, zmm1 + vpaddw zmm2, zmm2, zmm3 + vpmullw zmm1, zmm8, zmm12 + vpmullw zmm3, zmm9, zmm13 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm11 + vpmulhw zmm1, zmm1, zmm14 + vpmulhw zmm3, zmm3, zmm14 + vpsubw zmm1, zmm8, zmm1 + vpsubw zmm3, zmm9, zmm3 + vmovdqa64 zmm19, zmm17 + vpermi2q zmm19, zmm27, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1600] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm27, zmm20 + vmovdqa64 zmm20, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1632] + vmovdqa64 zmm21, zmm17 + vpermi2q zmm21, zmm28, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1664] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm28, zmm22 + vmovdqa64 zmm22, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1696] + vpsubw zmm27, zmm19, zmm20 + vpsubw zmm28, zmm21, zmm22 + vpaddw zmm19, zmm19, zmm20 + vpaddw zmm21, zmm21, zmm22 + vpmullw zmm20, zmm27, zmm12 + vpmullw zmm22, zmm28, zmm13 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm11 + vpmulhw zmm20, zmm20, zmm14 + vpmulhw zmm22, zmm22, zmm14 + vpsubw zmm20, zmm27, zmm20 + vpsubw zmm22, zmm28, zmm22 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+512] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+544] + vpaddw zmm8, zmm0, zmm2 + vpaddw zmm9, zmm1, zmm3 + vpsubw zmm2, zmm0, zmm2 + vpsubw zmm3, zmm1, zmm3 + vpmulhw zmm0, zmm8, zmm15 + vpmulhw zmm1, zmm9, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm8, zmm0 + vpsubw zmm1, zmm9, zmm1 + vpmullw zmm8, zmm2, zmm12 + vpmullw zmm9, zmm3, zmm12 + vpmulhw zmm2, zmm2, zmm10 + vpmulhw zmm3, zmm3, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm2, zmm2, zmm8 + vpsubw zmm3, zmm3, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1728] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1760] + vpaddw zmm27, zmm19, zmm21 + vpaddw zmm28, zmm20, zmm22 + vpsubw zmm21, zmm19, zmm21 + vpsubw zmm22, zmm20, zmm22 + vpmulhw zmm19, zmm27, zmm15 + vpmulhw zmm20, zmm28, zmm15 + vpsraw zmm19, zmm19, 10 + vpsraw zmm20, zmm20, 10 + vpmullw zmm19, zmm19, zmm14 + vpmullw zmm20, zmm20, zmm14 + vpsubw zmm19, zmm27, zmm19 + vpsubw zmm20, zmm28, zmm20 + vpmullw zmm27, zmm21, zmm12 + vpmullw zmm28, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm27, zmm27, zmm14 + vpmulhw zmm28, zmm28, zmm14 + vpsubw zmm21, zmm21, zmm27 + vpsubw zmm22, zmm22, zmm28 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm4, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+576] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm4, zmm5 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+608] + vpsllq zmm4, zmm9, 32 + vpsrlq zmm5, zmm8, 32 + vpblendmd zmm4{k1}, zmm8, zmm4 + vpblendmd zmm5{k2}, zmm9, zmm5 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm6, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+640] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm6, zmm7 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+672] + vpsllq zmm6, zmm9, 32 + vpsrlq zmm7, zmm8, 32 + vpblendmd zmm6{k1}, zmm8, zmm6 + vpblendmd zmm7{k2}, zmm9, zmm7 + vpaddw zmm8, zmm4, zmm5 + vpaddw zmm9, zmm6, zmm7 + vpsubw zmm5, zmm4, zmm5 + vpsubw zmm7, zmm6, zmm7 + vpmulhw zmm4, zmm8, zmm15 + vpmulhw zmm6, zmm9, zmm15 + vpsraw zmm4, zmm4, 10 + vpsraw zmm6, zmm6, 10 + vpmullw zmm4, zmm4, zmm14 + vpmullw zmm6, zmm6, zmm14 + vpsubw zmm8, zmm8, zmm4 + vpsubw zmm9, zmm9, zmm6 + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm5, zmm5, zmm4 + vpsubw zmm7, zmm7, zmm6 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm23, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1792] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm23, zmm24 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1824] + vpsllq zmm23, zmm28, 32 + vpsrlq zmm24, zmm27, 32 + vpblendmd zmm23{k1}, zmm27, zmm23 + vpblendmd zmm24{k2}, zmm28, zmm24 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm25, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1856] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm25, zmm26 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1888] + vpsllq zmm25, zmm28, 32 + vpsrlq zmm26, zmm27, 32 + vpblendmd zmm25{k1}, zmm27, zmm25 + vpblendmd zmm26{k2}, zmm28, zmm26 + vpaddw zmm27, zmm23, zmm24 + vpaddw zmm28, zmm25, zmm26 + vpsubw zmm24, zmm23, zmm24 + vpsubw zmm26, zmm25, zmm26 + vpmulhw zmm23, zmm27, zmm15 + vpmulhw zmm25, zmm28, zmm15 + vpsraw zmm23, zmm23, 10 + vpsraw zmm25, zmm25, 10 + vpmullw zmm23, zmm23, zmm14 + vpmullw zmm25, zmm25, zmm14 + vpsubw zmm27, zmm27, zmm23 + vpsubw zmm28, zmm28, zmm25 + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm24, zmm24, zmm23 + vpsubw zmm26, zmm26, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+704] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+736] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+768] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+800] + vpunpckldq zmm4, zmm8, zmm5 + vpunpckhdq zmm5, zmm8, zmm5 + vpunpckldq zmm6, zmm9, zmm7 + vpunpckhdq zmm7, zmm9, zmm7 + vpaddw zmm8, zmm4, zmm5 + vpaddw zmm9, zmm6, zmm7 + vpsubw zmm5, zmm4, zmm5 + vpsubw zmm7, zmm6, zmm7 + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm5, zmm5, zmm4 + vpsubw zmm7, zmm7, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1920] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1952] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1984] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2016] + vpunpckldq zmm23, zmm27, zmm24 + vpunpckhdq zmm24, zmm27, zmm24 + vpunpckldq zmm25, zmm28, zmm26 + vpunpckhdq zmm26, zmm28, zmm26 + vpaddw zmm27, zmm23, zmm24 + vpaddw zmm28, zmm25, zmm26 + vpsubw zmm24, zmm23, zmm24 + vpsubw zmm26, zmm25, zmm26 + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm24, zmm24, zmm23 + vpsubw zmm26, zmm26, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+832] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+864] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+896] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+928] + vpunpcklqdq zmm4, zmm8, zmm5 + vpunpckhqdq zmm5, zmm8, zmm5 + vpunpcklqdq zmm6, zmm9, zmm7 + vpunpckhqdq zmm7, zmm9, zmm7 + vpaddw zmm8, zmm4, zmm5 + vpaddw zmm9, zmm6, zmm7 + vpsubw zmm5, zmm4, zmm5 + vpsubw zmm7, zmm6, zmm7 + vpmulhw zmm4, zmm8, zmm15 + vpmulhw zmm6, zmm9, zmm15 + vpsraw zmm4, zmm4, 10 + vpsraw zmm6, zmm6, 10 + vpmullw zmm4, zmm4, zmm14 + vpmullw zmm6, zmm6, zmm14 + vpsubw zmm8, zmm8, zmm4 + vpsubw zmm9, zmm9, zmm6 + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm5, zmm5, zmm4 + vpsubw zmm7, zmm7, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2048] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2080] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2112] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2144] + vpunpcklqdq zmm23, zmm27, zmm24 + vpunpckhqdq zmm24, zmm27, zmm24 + vpunpcklqdq zmm25, zmm28, zmm26 + vpunpckhqdq zmm26, zmm28, zmm26 + vpaddw zmm27, zmm23, zmm24 + vpaddw zmm28, zmm25, zmm26 + vpsubw zmm24, zmm23, zmm24 + vpsubw zmm26, zmm25, zmm26 + vpmulhw zmm23, zmm27, zmm15 + vpmulhw zmm25, zmm28, zmm15 + vpsraw zmm23, zmm23, 10 + vpsraw zmm25, zmm25, 10 + vpmullw zmm23, zmm23, zmm14 + vpmullw zmm25, zmm25, zmm14 + vpsubw zmm27, zmm27, zmm23 + vpsubw zmm28, zmm28, zmm25 + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm24, zmm24, zmm23 + vpsubw zmm26, zmm26, zmm25 + vmovdqa64 zmm4, zmm17 + vpermi2q zmm4, zmm8, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+960] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm8, zmm5 + vmovdqa64 zmm5, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+992] + vmovdqa64 zmm6, zmm17 + vpermi2q zmm6, zmm9, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+1024] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm9, zmm7 + vmovdqa64 zmm7, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+1056] + vpsubw zmm8, zmm4, zmm5 + vpsubw zmm9, zmm6, zmm7 + vpaddw zmm4, zmm4, zmm5 + vpaddw zmm6, zmm6, zmm7 + vpmullw zmm5, zmm8, zmm12 + vpmullw zmm7, zmm9, zmm13 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm11 + vpmulhw zmm5, zmm5, zmm14 + vpmulhw zmm7, zmm7, zmm14 + vpsubw zmm5, zmm8, zmm5 + vpsubw zmm7, zmm9, zmm7 + vmovdqa64 zmm23, zmm17 + vpermi2q zmm23, zmm27, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2176] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm27, zmm24 + vmovdqa64 zmm24, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2208] + vmovdqa64 zmm25, zmm17 + vpermi2q zmm25, zmm28, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2240] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm28, zmm26 + vmovdqa64 zmm26, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2272] + vpsubw zmm27, zmm23, zmm24 + vpsubw zmm28, zmm25, zmm26 + vpaddw zmm23, zmm23, zmm24 + vpaddw zmm25, zmm25, zmm26 + vpmullw zmm24, zmm27, zmm12 + vpmullw zmm26, zmm28, zmm13 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm11 + vpmulhw zmm24, zmm24, zmm14 + vpmulhw zmm26, zmm26, zmm14 + vpsubw zmm24, zmm27, zmm24 + vpsubw zmm26, zmm28, zmm26 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1088] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1120] + vpaddw zmm8, zmm4, zmm6 + vpaddw zmm9, zmm5, zmm7 + vpsubw zmm6, zmm4, zmm6 + vpsubw zmm7, zmm5, zmm7 + vpmulhw zmm4, zmm8, zmm15 + vpmulhw zmm5, zmm9, zmm15 + vpsraw zmm4, zmm4, 10 + vpsraw zmm5, zmm5, 10 + vpmullw zmm4, zmm4, zmm14 + vpmullw zmm5, zmm5, zmm14 + vpsubw zmm4, zmm8, zmm4 + vpsubw zmm5, zmm9, zmm5 + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm6, zmm6, zmm8 + vpsubw zmm7, zmm7, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2304] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2336] + vpaddw zmm27, zmm23, zmm25 + vpaddw zmm28, zmm24, zmm26 + vpsubw zmm25, zmm23, zmm25 + vpsubw zmm26, zmm24, zmm26 + vpmulhw zmm23, zmm27, zmm15 + vpmulhw zmm24, zmm28, zmm15 + vpsraw zmm23, zmm23, 10 + vpsraw zmm24, zmm24, 10 + vpmullw zmm23, zmm23, zmm14 + vpmullw zmm24, zmm24, zmm14 + vpsubw zmm23, zmm27, zmm23 + vpsubw zmm24, zmm28, zmm24 + vpmullw zmm27, zmm25, zmm12 + vpmullw zmm28, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm27, zmm27, zmm14 + vpmulhw zmm28, zmm28, zmm14 + vpsubw zmm25, zmm25, zmm27 + vpsubw zmm26, zmm26, zmm28 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+1152] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+1184] + vpsubw zmm8, zmm0, zmm4 + vpsubw zmm9, zmm1, zmm5 + vpaddw zmm0, zmm0, zmm4 + vpaddw zmm1, zmm1, zmm5 + vpmullw zmm4, zmm8, zmm12 + vpmullw zmm5, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm5, zmm5, zmm14 + vpsubw zmm4, zmm8, zmm4 + vpsubw zmm5, zmm9, zmm5 + vpsubw zmm8, zmm2, zmm6 + vpsubw zmm9, zmm3, zmm7 + vpaddw zmm2, zmm2, zmm6 + vpaddw zmm3, zmm3, zmm7 + vpmullw zmm6, zmm8, zmm12 + vpmullw zmm7, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpmulhw zmm7, zmm7, zmm14 + vpsubw zmm6, zmm8, zmm6 + vpsubw zmm7, zmm9, zmm7 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2368] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2400] + vpsubw zmm27, zmm19, zmm23 + vpsubw zmm28, zmm20, zmm24 + vpaddw zmm19, zmm19, zmm23 + vpaddw zmm20, zmm20, zmm24 + vpmullw zmm23, zmm27, zmm12 + vpmullw zmm24, zmm28, zmm12 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm10 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm24, zmm24, zmm14 + vpsubw zmm23, zmm27, zmm23 + vpsubw zmm24, zmm28, zmm24 + vpsubw zmm27, zmm21, zmm25 + vpsubw zmm28, zmm22, zmm26 + vpaddw zmm21, zmm21, zmm25 + vpaddw zmm22, zmm22, zmm26 + vpmullw zmm25, zmm27, zmm12 + vpmullw zmm26, zmm28, zmm12 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm10 + vpmulhw zmm25, zmm25, zmm14 + vpmulhw zmm26, zmm26, zmm14 + vpsubw zmm25, zmm27, zmm25 + vpsubw zmm26, zmm28, zmm26 + vbroadcasti64x4 zmm10, YMMWORD PTR [rbp+2432] + vbroadcasti64x4 zmm12, YMMWORD PTR [rbp+2464] + vbroadcasti64x4 zmm11, YMMWORD PTR [rbp+2496] + vbroadcasti64x4 zmm13, YMMWORD PTR [rbp+2528] + vpsubw zmm8, zmm0, zmm19 + vpsubw zmm9, zmm1, zmm20 + vpaddw zmm0, zmm0, zmm19 + vpaddw zmm1, zmm1, zmm20 + vpmullw zmm19, zmm8, zmm12 + vpmullw zmm20, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm20, zmm20, zmm14 + vpsubw zmm19, zmm8, zmm19 + vpsubw zmm20, zmm9, zmm20 + vpaddw zmm8, zmm2, zmm21 + vpaddw zmm9, zmm3, zmm22 + vpsubw zmm21, zmm2, zmm21 + vpsubw zmm22, zmm3, zmm22 + vpmulhw zmm2, zmm8, zmm15 + vpmulhw zmm3, zmm9, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm8, zmm2 + vpsubw zmm3, zmm9, zmm3 + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm21, zmm21, zmm8 + vpsubw zmm22, zmm22, zmm9 + vpsubw zmm8, zmm4, zmm23 + vpsubw zmm9, zmm5, zmm24 + vpaddw zmm4, zmm4, zmm23 + vpaddw zmm5, zmm5, zmm24 + vpmullw zmm23, zmm8, zmm12 + vpmullw zmm24, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm24, zmm24, zmm14 + vpsubw zmm23, zmm8, zmm23 + vpsubw zmm24, zmm9, zmm24 + vpaddw zmm8, zmm6, zmm25 + vpaddw zmm9, zmm7, zmm26 + vpsubw zmm25, zmm6, zmm25 + vpsubw zmm26, zmm7, zmm26 + vpmulhw zmm6, zmm8, zmm15 + vpmulhw zmm7, zmm9, zmm15 + vpsraw zmm6, zmm6, 10 + vpsraw zmm7, zmm7, 10 + vpmullw zmm6, zmm6, zmm14 + vpmullw zmm7, zmm7, zmm14 + vpsubw zmm6, zmm8, zmm6 + vpsubw zmm7, zmm9, zmm7 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm25, zmm25, zmm8 + vpsubw zmm26, zmm26, zmm9 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm0, zmm0, zmm11 + vpmulhw zmm1, zmm1, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm0, zmm8 + vpsubw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm2, zmm13 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm2, zmm2, zmm11 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm2, zmm2, zmm8 + vpsubw zmm3, zmm3, zmm9 + vpmullw zmm8, zmm4, zmm13 + vpmullw zmm9, zmm5, zmm13 + vpmulhw zmm4, zmm4, zmm11 + vpmulhw zmm5, zmm5, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm4, zmm4, zmm8 + vpsubw zmm5, zmm5, zmm9 + vpmullw zmm8, zmm6, zmm13 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm6, zmm6, zmm11 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm6, zmm6, zmm8 + vpsubw zmm7, zmm7, zmm9 + vpmullw zmm8, zmm19, zmm13 + vpmullw zmm9, zmm20, zmm13 + vpmulhw zmm19, zmm19, zmm11 + vpmulhw zmm20, zmm20, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm19, zmm19, zmm8 + vpsubw zmm20, zmm20, zmm9 + vpmullw zmm8, zmm21, zmm13 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm21, zmm21, zmm11 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm21, zmm21, zmm8 + vpsubw zmm22, zmm22, zmm9 + vpmullw zmm8, zmm23, zmm13 + vpmullw zmm9, zmm24, zmm13 + vpmulhw zmm23, zmm23, zmm11 + vpmulhw zmm24, zmm24, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm23, zmm23, zmm8 + vpsubw zmm24, zmm24, zmm9 + vpmullw zmm8, zmm25, zmm13 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm25, zmm25, zmm11 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm25, zmm25, zmm8 + vpsubw zmm26, zmm26, zmm9 + vmovdqu64 [r8], ymm0 + vextracti64x4 YMMWORD PTR [r8], zmm0, 1 + vmovdqu64 [r8+32], ymm1 + vextracti64x4 YMMWORD PTR [r8+32], zmm1, 1 + vmovdqu64 [r8+64], ymm2 + vextracti64x4 YMMWORD PTR [r8+64], zmm2, 1 + vmovdqu64 [r8+96], ymm3 + vextracti64x4 YMMWORD PTR [r8+96], zmm3, 1 + vmovdqu64 [r8+128], ymm4 + vextracti64x4 YMMWORD PTR [r8+128], zmm4, 1 + vmovdqu64 [r8+160], ymm5 + vextracti64x4 YMMWORD PTR [r8+160], zmm5, 1 + vmovdqu64 [r8+192], ymm6 + vextracti64x4 YMMWORD PTR [r8+192], zmm6, 1 + vmovdqu64 [r8+224], ymm7 + vextracti64x4 YMMWORD PTR [r8+224], zmm7, 1 + vmovdqu64 [r8+256], ymm19 + vextracti64x4 YMMWORD PTR [r8+256], zmm19, 1 + vmovdqu64 [r8+288], ymm20 + vextracti64x4 YMMWORD PTR [r8+288], zmm20, 1 + vmovdqu64 [r8+320], ymm21 + vextracti64x4 YMMWORD PTR [r8+320], zmm21, 1 + vmovdqu64 [r8+352], ymm22 + vextracti64x4 YMMWORD PTR [r8+352], zmm22, 1 + vmovdqu64 [r8+384], ymm23 + vextracti64x4 YMMWORD PTR [r8+384], zmm23, 1 + vmovdqu64 [r8+416], ymm24 + vextracti64x4 YMMWORD PTR [r8+416], zmm24, 1 + vmovdqu64 [r8+448], ymm25 + vextracti64x4 YMMWORD PTR [r8+448], zmm25, 1 + vmovdqu64 [r8+480], ymm26 + vextracti64x4 YMMWORD PTR [r8+480], zmm26, 1 + vmovdqu64 zmm0, [r12] + vmovdqu64 zmm1, [r12+64] + vmovdqu64 zmm2, [r12+128] + vmovdqu64 zmm3, [r12+192] + vmovdqu64 zmm4, [r11] + vmovdqu64 zmm5, [r11+64] + vmovdqu64 zmm6, [r11+128] + vmovdqu64 zmm7, [r11+192] + vpaddw zmm4, zmm4, zmm0 + vpaddw zmm5, zmm5, zmm1 + vpaddw zmm6, zmm6, zmm2 + vpaddw zmm7, zmm7, zmm3 + vmovdqu64 zmm0, [r8] + vmovdqu64 zmm1, [r8+64] + vmovdqu64 zmm2, [r8+128] + vmovdqu64 zmm3, [r8+192] + vpaddw zmm4, zmm0, zmm4 + vpaddw zmm5, zmm1, zmm5 + vpmulhw zmm0, zmm4, zmm15 + vpmulhw zmm1, zmm5, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpaddw zmm6, zmm2, zmm6 + vpaddw zmm7, zmm3, zmm7 + vpmulhw zmm2, zmm6, zmm15 + vpmulhw zmm3, zmm7, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [r8], zmm0 + vmovdqu64 [r8+64], zmm1 + vmovdqu64 [r8+128], zmm2 + vmovdqu64 [r8+192], zmm3 + vmovdqu64 zmm0, [r12+256] + vmovdqu64 zmm1, [r12+320] + vmovdqu64 zmm2, [r12+384] + vmovdqu64 zmm3, [r12+448] + vmovdqu64 zmm4, [r11+256] + vmovdqu64 zmm5, [r11+320] + vmovdqu64 zmm6, [r11+384] + vmovdqu64 zmm7, [r11+448] + vpaddw zmm4, zmm4, zmm0 + vpaddw zmm5, zmm5, zmm1 + vpaddw zmm6, zmm6, zmm2 + vpaddw zmm7, zmm7, zmm3 + vmovdqu64 zmm0, [r8+256] + vmovdqu64 zmm1, [r8+320] + vmovdqu64 zmm2, [r8+384] + vmovdqu64 zmm3, [r8+448] + vpaddw zmm4, zmm0, zmm4 + vpaddw zmm5, zmm1, zmm5 + vpmulhw zmm0, zmm4, zmm15 + vpmulhw zmm1, zmm5, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpaddw zmm6, zmm2, zmm6 + vpaddw zmm7, zmm3, zmm7 + vpmulhw zmm2, zmm6, zmm15 + vpmulhw zmm3, zmm7, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [r8+256], zmm0 + vmovdqu64 [r8+320], zmm1 + vmovdqu64 [r8+384], zmm2 + vmovdqu64 [r8+448], zmm3 +L_encap_avx512_calc_done: + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+56] + vmovdqu xmm7, OWORD PTR [rsp+72] + vmovdqu xmm8, OWORD PTR [rsp+88] + vmovdqu xmm9, OWORD PTR [rsp+104] + vmovdqu xmm10, OWORD PTR [rsp+120] + vmovdqu xmm11, OWORD PTR [rsp+136] + vmovdqu xmm12, OWORD PTR [rsp+152] + vmovdqu xmm13, OWORD PTR [rsp+168] + vmovdqu xmm14, OWORD PTR [rsp+184] + vmovdqu xmm15, OWORD PTR [rsp+200] + add rsp, 216 + pop rbp + pop rbx + pop rsi + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + ret +mlkem_encapsulate_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +mlkem_decapsulate_avx512 PROC + push r12 + push r13 + push r14 + mov rax, QWORD PTR [rsp+64] + sub rsp, 160 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu OWORD PTR [rsp+16], xmm7 + vmovdqu OWORD PTR [rsp+32], xmm8 + vmovdqu OWORD PTR [rsp+48], xmm9 + vmovdqu OWORD PTR [rsp+64], xmm10 + vmovdqu OWORD PTR [rsp+80], xmm11 + vmovdqu OWORD PTR [rsp+96], xmm12 + vmovdqu OWORD PTR [rsp+112], xmm13 + vmovdqu OWORD PTR [rsp+128], xmm14 + vmovdqu OWORD PTR [rsp+144], xmm15 + mov r14, 3329 + vmovd xmm14, r14d + vpbroadcastw zmm14, xmm14 + mov r14, 20159 + vmovd xmm15, r14d + vpbroadcastw zmm15, xmm15 + mov r14d, 43690 + kmovw k1, r14d + mov r14d, 21845 + kmovw k2, r14d + mov r14d, 2863311530 + kmovd k3, r14d + mov r14d, 1431655765 + kmovd k4, r14d + vmovdqu64 zmm17, ptr_L_mlkem_avx512_perm20 + vmovdqu64 zmm18, ptr_L_mlkem_avx512_perm31 + movsxd r10, eax + mov r11, r8 +L_decap_avx512_bp: + cmp r10, 2 + jl L_decap_avx512_bp_odd + mov r12, r11 + add r12, 512 + mov r13, QWORD PTR [ptr_L_mlkem_avx512_zetas] + vmovdqu64 ymm0, [r11] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [r12], 1 + vmovdqu64 ymm1, [r11+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [r12+32], 1 + vmovdqu64 ymm2, [r11+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r12+64], 1 + vmovdqu64 ymm3, [r11+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r12+96], 1 + vmovdqu64 ymm4, [r11+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r12+128], 1 + vmovdqu64 ymm5, [r11+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r12+160], 1 + vmovdqu64 ymm6, [r11+192] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r12+192], 1 + vmovdqu64 ymm7, [r11+224] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r12+224], 1 + vmovdqu64 ymm19, [r11+256] + vinserti64x4 zmm19, zmm19, YMMWORD PTR [r12+256], 1 + vmovdqu64 ymm20, [r11+288] + vinserti64x4 zmm20, zmm20, YMMWORD PTR [r12+288], 1 + vmovdqu64 ymm21, [r11+320] + vinserti64x4 zmm21, zmm21, YMMWORD PTR [r12+320], 1 + vmovdqu64 ymm22, [r11+352] + vinserti64x4 zmm22, zmm22, YMMWORD PTR [r12+352], 1 + vmovdqu64 ymm23, [r11+384] + vinserti64x4 zmm23, zmm23, YMMWORD PTR [r12+384], 1 + vmovdqu64 ymm24, [r11+416] + vinserti64x4 zmm24, zmm24, YMMWORD PTR [r12+416], 1 + vmovdqu64 ymm25, [r11+448] + vinserti64x4 zmm25, zmm25, YMMWORD PTR [r12+448], 1 + vmovdqu64 ymm26, [r11+480] + vinserti64x4 zmm26, zmm26, YMMWORD PTR [r12+480], 1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+32] + vpmullw zmm8, zmm19, zmm12 + vpmullw zmm9, zmm20, zmm12 + vpmulhw zmm19, zmm19, zmm10 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm19, zmm8 + vpsubw zmm9, zmm20, zmm9 + vpsubw zmm19, zmm0, zmm8 + vpsubw zmm20, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm2, zmm8 + vpsubw zmm22, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm4, zmm8 + vpsubw zmm24, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm6, zmm8 + vpsubw zmm26, zmm7, zmm9 + vpaddw zmm6, zmm6, zmm8 + vpaddw zmm7, zmm7, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+64] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+96] + vpmullw zmm8, zmm4, zmm12 + vpmullw zmm9, zmm5, zmm12 + vpmulhw zmm4, zmm4, zmm10 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm4, zmm8 + vpsubw zmm9, zmm5, zmm9 + vpsubw zmm4, zmm0, zmm8 + vpsubw zmm5, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm2, zmm8 + vpsubw zmm7, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1280] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1312] + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm19, zmm8 + vpsubw zmm24, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm21, zmm8 + vpsubw zmm26, zmm22, zmm9 + vpaddw zmm21, zmm21, zmm8 + vpaddw zmm22, zmm22, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+128] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+160] + vpmullw zmm8, zmm2, zmm12 + vpmullw zmm9, zmm3, zmm12 + vpmulhw zmm2, zmm2, zmm10 + vpmulhw zmm3, zmm3, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm2, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm2, zmm0, zmm8 + vpsubw zmm3, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1344] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1376] + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm19, zmm8 + vpsubw zmm22, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+192] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+224] + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm4, zmm8 + vpsubw zmm7, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1408] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1440] + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm23, zmm8 + vpsubw zmm26, zmm24, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm24, zmm24, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+256] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+288] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+320] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+352] + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1472] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1504] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1536] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1568] + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+384] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+416] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+448] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+480] + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1600] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1632] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1664] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1696] + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm0, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+512] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm1, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+544] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm2, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+576] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm3, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+608] + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm0, zmm1, zmm0 + vpsubw zmm2, zmm3, zmm2 + vpsubw zmm1, zmm8, zmm0 + vpsubw zmm3, zmm9, zmm2 + vpaddw zmm8, zmm8, zmm0 + vpaddw zmm9, zmm9, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+640] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+672] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+704] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+736] + vpunpcklqdq zmm0, zmm8, zmm1 + vpunpckhqdq zmm1, zmm8, zmm1 + vpunpcklqdq zmm2, zmm9, zmm3 + vpunpckhqdq zmm3, zmm9, zmm3 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm19, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1728] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm19, zmm20 + vmovdqa64 zmm20, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1760] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm21, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1792] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm21, zmm22 + vmovdqa64 zmm22, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1824] + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm19, zmm20, zmm19 + vpsubw zmm21, zmm22, zmm21 + vpsubw zmm20, zmm8, zmm19 + vpsubw zmm22, zmm9, zmm21 + vpaddw zmm8, zmm8, zmm19 + vpaddw zmm9, zmm9, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1856] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1888] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1920] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1952] + vpunpcklqdq zmm19, zmm8, zmm20 + vpunpckhqdq zmm20, zmm8, zmm20 + vpunpcklqdq zmm21, zmm9, zmm22 + vpunpckhqdq zmm22, zmm9, zmm22 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm4, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+768] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm5, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+800] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm6, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+832] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm7, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+864] + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm4, zmm5, zmm4 + vpsubw zmm6, zmm7, zmm6 + vpsubw zmm5, zmm8, zmm4 + vpsubw zmm7, zmm9, zmm6 + vpaddw zmm8, zmm8, zmm4 + vpaddw zmm9, zmm9, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+896] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+928] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+960] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+992] + vpunpcklqdq zmm4, zmm8, zmm5 + vpunpckhqdq zmm5, zmm8, zmm5 + vpunpcklqdq zmm6, zmm9, zmm7 + vpunpckhqdq zmm7, zmm9, zmm7 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm23, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1984] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm23, zmm24 + vmovdqa64 zmm24, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+2016] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm25, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+2048] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm25, zmm26 + vmovdqa64 zmm26, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+2080] + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm23, zmm24, zmm23 + vpsubw zmm25, zmm26, zmm25 + vpsubw zmm24, zmm8, zmm23 + vpsubw zmm26, zmm9, zmm25 + vpaddw zmm8, zmm8, zmm23 + vpaddw zmm9, zmm9, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+2112] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+2144] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+2176] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+2208] + vpunpcklqdq zmm23, zmm8, zmm24 + vpunpckhqdq zmm24, zmm8, zmm24 + vpunpcklqdq zmm25, zmm9, zmm26 + vpunpckhqdq zmm26, zmm9, zmm26 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1024] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1056] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1088] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1120] + vpsllq zmm8, zmm1, 32 + vpsrlq zmm9, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm8 + vpblendmd zmm1{k2}, zmm1, zmm9 + vpsllq zmm8, zmm3, 32 + vpsrlq zmm9, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm8 + vpblendmd zmm3{k2}, zmm3, zmm9 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+2240] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+2272] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+2304] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+2336] + vpsllq zmm8, zmm20, 32 + vpsrlq zmm9, zmm19, 32 + vpblendmd zmm19{k1}, zmm19, zmm8 + vpblendmd zmm20{k2}, zmm20, zmm9 + vpsllq zmm8, zmm22, 32 + vpsrlq zmm9, zmm21, 32 + vpblendmd zmm21{k1}, zmm21, zmm8 + vpblendmd zmm22{k2}, zmm22, zmm9 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1152] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1184] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1216] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1248] + vpsllq zmm8, zmm5, 32 + vpsrlq zmm9, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm8 + vpblendmd zmm5{k2}, zmm5, zmm9 + vpsllq zmm8, zmm7, 32 + vpsrlq zmm9, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm8 + vpblendmd zmm7{k2}, zmm7, zmm9 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+2368] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+2400] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+2432] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+2464] + vpsllq zmm8, zmm24, 32 + vpsrlq zmm9, zmm23, 32 + vpblendmd zmm23{k1}, zmm23, zmm8 + vpblendmd zmm24{k2}, zmm24, zmm9 + vpsllq zmm8, zmm26, 32 + vpsrlq zmm9, zmm25, 32 + vpblendmd zmm25{k1}, zmm25, zmm8 + vpblendmd zmm26{k2}, zmm26, zmm9 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vpunpckldq zmm8, zmm0, zmm1 + vpunpckhdq zmm9, zmm0, zmm1 + vmovdqa64 zmm0, zmm17 + vpermi2q zmm0, zmm8, zmm9 + vmovdqa64 zmm1, zmm18 + vpermi2q zmm1, zmm8, zmm9 + vpunpckldq zmm8, zmm2, zmm3 + vpunpckhdq zmm9, zmm2, zmm3 + vmovdqa64 zmm2, zmm17 + vpermi2q zmm2, zmm8, zmm9 + vmovdqa64 zmm3, zmm18 + vpermi2q zmm3, zmm8, zmm9 + vpunpckldq zmm8, zmm19, zmm20 + vpunpckhdq zmm9, zmm19, zmm20 + vmovdqa64 zmm19, zmm17 + vpermi2q zmm19, zmm8, zmm9 + vmovdqa64 zmm20, zmm18 + vpermi2q zmm20, zmm8, zmm9 + vpunpckldq zmm8, zmm21, zmm22 + vpunpckhdq zmm9, zmm21, zmm22 + vmovdqa64 zmm21, zmm17 + vpermi2q zmm21, zmm8, zmm9 + vmovdqa64 zmm22, zmm18 + vpermi2q zmm22, zmm8, zmm9 + vpunpckldq zmm8, zmm4, zmm5 + vpunpckhdq zmm9, zmm4, zmm5 + vmovdqa64 zmm4, zmm17 + vpermi2q zmm4, zmm8, zmm9 + vmovdqa64 zmm5, zmm18 + vpermi2q zmm5, zmm8, zmm9 + vpunpckldq zmm8, zmm6, zmm7 + vpunpckhdq zmm9, zmm6, zmm7 + vmovdqa64 zmm6, zmm17 + vpermi2q zmm6, zmm8, zmm9 + vmovdqa64 zmm7, zmm18 + vpermi2q zmm7, zmm8, zmm9 + vpunpckldq zmm8, zmm23, zmm24 + vpunpckhdq zmm9, zmm23, zmm24 + vmovdqa64 zmm23, zmm17 + vpermi2q zmm23, zmm8, zmm9 + vmovdqa64 zmm24, zmm18 + vpermi2q zmm24, zmm8, zmm9 + vpunpckldq zmm8, zmm25, zmm26 + vpunpckhdq zmm9, zmm25, zmm26 + vmovdqa64 zmm25, zmm17 + vpermi2q zmm25, zmm8, zmm9 + vmovdqa64 zmm26, zmm18 + vpermi2q zmm26, zmm8, zmm9 + vpmulhw zmm8, zmm0, zmm15 + vpmulhw zmm9, zmm1, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm0, zmm8 + vpsubw zmm9, zmm1, zmm9 + vmovdqu64 [r11], ymm8 + vextracti64x4 YMMWORD PTR [r12], zmm8, 1 + vmovdqu64 [r11+32], ymm9 + vextracti64x4 YMMWORD PTR [r12+32], zmm9, 1 + vpmulhw zmm8, zmm2, zmm15 + vpmulhw zmm9, zmm3, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm2, zmm8 + vpsubw zmm9, zmm3, zmm9 + vmovdqu64 [r11+64], ymm8 + vextracti64x4 YMMWORD PTR [r12+64], zmm8, 1 + vmovdqu64 [r11+96], ymm9 + vextracti64x4 YMMWORD PTR [r12+96], zmm9, 1 + vpmulhw zmm8, zmm19, zmm15 + vpmulhw zmm9, zmm20, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm19, zmm8 + vpsubw zmm9, zmm20, zmm9 + vmovdqu64 [r11+256], ymm8 + vextracti64x4 YMMWORD PTR [r12+256], zmm8, 1 + vmovdqu64 [r11+288], ymm9 + vextracti64x4 YMMWORD PTR [r12+288], zmm9, 1 + vpmulhw zmm8, zmm21, zmm15 + vpmulhw zmm9, zmm22, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vmovdqu64 [r11+320], ymm8 + vextracti64x4 YMMWORD PTR [r12+320], zmm8, 1 + vmovdqu64 [r11+352], ymm9 + vextracti64x4 YMMWORD PTR [r12+352], zmm9, 1 + vpmulhw zmm8, zmm4, zmm15 + vpmulhw zmm9, zmm5, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm4, zmm8 + vpsubw zmm9, zmm5, zmm9 + vmovdqu64 [r11+128], ymm8 + vextracti64x4 YMMWORD PTR [r12+128], zmm8, 1 + vmovdqu64 [r11+160], ymm9 + vextracti64x4 YMMWORD PTR [r12+160], zmm9, 1 + vpmulhw zmm8, zmm6, zmm15 + vpmulhw zmm9, zmm7, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vmovdqu64 [r11+192], ymm8 + vextracti64x4 YMMWORD PTR [r12+192], zmm8, 1 + vmovdqu64 [r11+224], ymm9 + vextracti64x4 YMMWORD PTR [r12+224], zmm9, 1 + vpmulhw zmm8, zmm23, zmm15 + vpmulhw zmm9, zmm24, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vmovdqu64 [r11+384], ymm8 + vextracti64x4 YMMWORD PTR [r12+384], zmm8, 1 + vmovdqu64 [r11+416], ymm9 + vextracti64x4 YMMWORD PTR [r12+416], zmm9, 1 + vpmulhw zmm8, zmm25, zmm15 + vpmulhw zmm9, zmm26, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vmovdqu64 [r11+448], ymm8 + vextracti64x4 YMMWORD PTR [r12+448], zmm8, 1 + vmovdqu64 [r11+480], ymm9 + vextracti64x4 YMMWORD PTR [r12+480], zmm9, 1 + add r11, 1024 + sub r10, 2 + jmp L_decap_avx512_bp +L_decap_avx512_bp_odd: + cmp r10, 1 + jne L_decap_avx512_bp_done + mov r13, QWORD PTR [ptr_L_mlkem_avx512_zetas] + vmovdqu64 ymm0, [r11] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [r11], 1 + vmovdqu64 ymm1, [r11+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [r11+32], 1 + vmovdqu64 ymm2, [r11+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [r11+64], 1 + vmovdqu64 ymm3, [r11+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [r11+96], 1 + vmovdqu64 ymm4, [r11+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r11+128], 1 + vmovdqu64 ymm5, [r11+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r11+160], 1 + vmovdqu64 ymm6, [r11+192] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [r11+192], 1 + vmovdqu64 ymm7, [r11+224] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [r11+224], 1 + vmovdqu64 ymm19, [r11+256] + vinserti64x4 zmm19, zmm19, YMMWORD PTR [r11+256], 1 + vmovdqu64 ymm20, [r11+288] + vinserti64x4 zmm20, zmm20, YMMWORD PTR [r11+288], 1 + vmovdqu64 ymm21, [r11+320] + vinserti64x4 zmm21, zmm21, YMMWORD PTR [r11+320], 1 + vmovdqu64 ymm22, [r11+352] + vinserti64x4 zmm22, zmm22, YMMWORD PTR [r11+352], 1 + vmovdqu64 ymm23, [r11+384] + vinserti64x4 zmm23, zmm23, YMMWORD PTR [r11+384], 1 + vmovdqu64 ymm24, [r11+416] + vinserti64x4 zmm24, zmm24, YMMWORD PTR [r11+416], 1 + vmovdqu64 ymm25, [r11+448] + vinserti64x4 zmm25, zmm25, YMMWORD PTR [r11+448], 1 + vmovdqu64 ymm26, [r11+480] + vinserti64x4 zmm26, zmm26, YMMWORD PTR [r11+480], 1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+32] + vpmullw zmm8, zmm19, zmm12 + vpmullw zmm9, zmm20, zmm12 + vpmulhw zmm19, zmm19, zmm10 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm19, zmm8 + vpsubw zmm9, zmm20, zmm9 + vpsubw zmm19, zmm0, zmm8 + vpsubw zmm20, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm2, zmm8 + vpsubw zmm22, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm4, zmm8 + vpsubw zmm24, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm6, zmm8 + vpsubw zmm26, zmm7, zmm9 + vpaddw zmm6, zmm6, zmm8 + vpaddw zmm7, zmm7, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+64] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+96] + vpmullw zmm8, zmm4, zmm12 + vpmullw zmm9, zmm5, zmm12 + vpmulhw zmm4, zmm4, zmm10 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm4, zmm8 + vpsubw zmm9, zmm5, zmm9 + vpsubw zmm4, zmm0, zmm8 + vpsubw zmm5, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm2, zmm8 + vpsubw zmm7, zmm3, zmm9 + vpaddw zmm2, zmm2, zmm8 + vpaddw zmm3, zmm3, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1280] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1312] + vpmullw zmm8, zmm23, zmm12 + vpmullw zmm9, zmm24, zmm12 + vpmulhw zmm23, zmm23, zmm10 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vpsubw zmm23, zmm19, zmm8 + vpsubw zmm24, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm21, zmm8 + vpsubw zmm26, zmm22, zmm9 + vpaddw zmm21, zmm21, zmm8 + vpaddw zmm22, zmm22, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+128] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+160] + vpmullw zmm8, zmm2, zmm12 + vpmullw zmm9, zmm3, zmm12 + vpmulhw zmm2, zmm2, zmm10 + vpmulhw zmm3, zmm3, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm2, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm2, zmm0, zmm8 + vpsubw zmm3, zmm1, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1344] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1376] + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm21, zmm19, zmm8 + vpsubw zmm22, zmm20, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm20, zmm20, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+192] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+224] + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm6, zmm4, zmm8 + vpsubw zmm7, zmm5, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1408] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1440] + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm25, zmm23, zmm8 + vpsubw zmm26, zmm24, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm24, zmm24, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+256] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+288] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+320] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+352] + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1472] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1504] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1536] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1568] + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+384] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+416] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+448] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+480] + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1600] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1632] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1664] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1696] + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm0, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+512] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm0, zmm1 + vmovdqa64 zmm1, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+544] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm2, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+576] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm2, zmm3 + vmovdqa64 zmm3, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+608] + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm0, zmm1, zmm0 + vpsubw zmm2, zmm3, zmm2 + vpsubw zmm1, zmm8, zmm0 + vpsubw zmm3, zmm9, zmm2 + vpaddw zmm8, zmm8, zmm0 + vpaddw zmm9, zmm9, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+640] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+672] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+704] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+736] + vpunpcklqdq zmm0, zmm8, zmm1 + vpunpckhqdq zmm1, zmm8, zmm1 + vpunpcklqdq zmm2, zmm9, zmm3 + vpunpckhqdq zmm3, zmm9, zmm3 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm19, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1728] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm19, zmm20 + vmovdqa64 zmm20, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1760] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm21, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1792] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm21, zmm22 + vmovdqa64 zmm22, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1824] + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm19, zmm20, zmm19 + vpsubw zmm21, zmm22, zmm21 + vpsubw zmm20, zmm8, zmm19 + vpsubw zmm22, zmm9, zmm21 + vpaddw zmm8, zmm8, zmm19 + vpaddw zmm9, zmm9, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1856] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1888] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1920] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1952] + vpunpcklqdq zmm19, zmm8, zmm20 + vpunpckhqdq zmm20, zmm8, zmm20 + vpunpcklqdq zmm21, zmm9, zmm22 + vpunpckhqdq zmm22, zmm9, zmm22 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm4, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+768] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm4, zmm5 + vmovdqa64 zmm5, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+800] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm6, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+832] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm6, zmm7 + vmovdqa64 zmm7, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+864] + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm4, zmm5, zmm4 + vpsubw zmm6, zmm7, zmm6 + vpsubw zmm5, zmm8, zmm4 + vpsubw zmm7, zmm9, zmm6 + vpaddw zmm8, zmm8, zmm4 + vpaddw zmm9, zmm9, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+896] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+928] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+960] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+992] + vpunpcklqdq zmm4, zmm8, zmm5 + vpunpckhqdq zmm5, zmm8, zmm5 + vpunpcklqdq zmm6, zmm9, zmm7 + vpunpckhqdq zmm7, zmm9, zmm7 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm23, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1984] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm23, zmm24 + vmovdqa64 zmm24, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+2016] + vmovdqa64 zmm9, zmm17 + vpermi2q zmm9, zmm25, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+2048] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm25, zmm26 + vmovdqa64 zmm26, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+2080] + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm23, zmm24, zmm23 + vpsubw zmm25, zmm26, zmm25 + vpsubw zmm24, zmm8, zmm23 + vpsubw zmm26, zmm9, zmm25 + vpaddw zmm8, zmm8, zmm23 + vpaddw zmm9, zmm9, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+2112] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+2144] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+2176] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+2208] + vpunpcklqdq zmm23, zmm8, zmm24 + vpunpckhqdq zmm24, zmm8, zmm24 + vpunpcklqdq zmm25, zmm9, zmm26 + vpunpckhqdq zmm26, zmm9, zmm26 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1024] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1056] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1088] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1120] + vpsllq zmm8, zmm1, 32 + vpsrlq zmm9, zmm0, 32 + vpblendmd zmm0{k1}, zmm0, zmm8 + vpblendmd zmm1{k2}, zmm1, zmm9 + vpsllq zmm8, zmm3, 32 + vpsrlq zmm9, zmm2, 32 + vpblendmd zmm2{k1}, zmm2, zmm8 + vpblendmd zmm3{k2}, zmm3, zmm9 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm1, zmm8 + vpsubw zmm9, zmm3, zmm9 + vpsubw zmm1, zmm0, zmm8 + vpsubw zmm3, zmm2, zmm9 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm2, zmm2, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+2240] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+2272] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+2304] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+2336] + vpsllq zmm8, zmm20, 32 + vpsrlq zmm9, zmm19, 32 + vpblendmd zmm19{k1}, zmm19, zmm8 + vpblendmd zmm20{k2}, zmm20, zmm9 + vpsllq zmm8, zmm22, 32 + vpsrlq zmm9, zmm21, 32 + vpblendmd zmm21{k1}, zmm21, zmm8 + vpblendmd zmm22{k2}, zmm22, zmm9 + vpmullw zmm8, zmm20, zmm12 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm20, zmm8 + vpsubw zmm9, zmm22, zmm9 + vpsubw zmm20, zmm19, zmm8 + vpsubw zmm22, zmm21, zmm9 + vpaddw zmm19, zmm19, zmm8 + vpaddw zmm21, zmm21, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1152] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1184] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1216] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1248] + vpsllq zmm8, zmm5, 32 + vpsrlq zmm9, zmm4, 32 + vpblendmd zmm4{k1}, zmm4, zmm8 + vpblendmd zmm5{k2}, zmm5, zmm9 + vpsllq zmm8, zmm7, 32 + vpsrlq zmm9, zmm6, 32 + vpblendmd zmm6{k1}, zmm6, zmm8 + vpblendmd zmm7{k2}, zmm7, zmm9 + vpmullw zmm8, zmm5, zmm12 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm5, zmm8 + vpsubw zmm9, zmm7, zmm9 + vpsubw zmm5, zmm4, zmm8 + vpsubw zmm7, zmm6, zmm9 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm6, zmm6, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+2368] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+2400] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+2432] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+2464] + vpsllq zmm8, zmm24, 32 + vpsrlq zmm9, zmm23, 32 + vpblendmd zmm23{k1}, zmm23, zmm8 + vpblendmd zmm24{k2}, zmm24, zmm9 + vpsllq zmm8, zmm26, 32 + vpsrlq zmm9, zmm25, 32 + vpblendmd zmm25{k1}, zmm25, zmm8 + vpblendmd zmm26{k2}, zmm26, zmm9 + vpmullw zmm8, zmm24, zmm12 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm24, zmm8 + vpsubw zmm9, zmm26, zmm9 + vpsubw zmm24, zmm23, zmm8 + vpsubw zmm26, zmm25, zmm9 + vpaddw zmm23, zmm23, zmm8 + vpaddw zmm25, zmm25, zmm9 + vpunpckldq zmm8, zmm0, zmm1 + vpunpckhdq zmm9, zmm0, zmm1 + vmovdqa64 zmm0, zmm17 + vpermi2q zmm0, zmm8, zmm9 + vmovdqa64 zmm1, zmm18 + vpermi2q zmm1, zmm8, zmm9 + vpunpckldq zmm8, zmm2, zmm3 + vpunpckhdq zmm9, zmm2, zmm3 + vmovdqa64 zmm2, zmm17 + vpermi2q zmm2, zmm8, zmm9 + vmovdqa64 zmm3, zmm18 + vpermi2q zmm3, zmm8, zmm9 + vpunpckldq zmm8, zmm19, zmm20 + vpunpckhdq zmm9, zmm19, zmm20 + vmovdqa64 zmm19, zmm17 + vpermi2q zmm19, zmm8, zmm9 + vmovdqa64 zmm20, zmm18 + vpermi2q zmm20, zmm8, zmm9 + vpunpckldq zmm8, zmm21, zmm22 + vpunpckhdq zmm9, zmm21, zmm22 + vmovdqa64 zmm21, zmm17 + vpermi2q zmm21, zmm8, zmm9 + vmovdqa64 zmm22, zmm18 + vpermi2q zmm22, zmm8, zmm9 + vpunpckldq zmm8, zmm4, zmm5 + vpunpckhdq zmm9, zmm4, zmm5 + vmovdqa64 zmm4, zmm17 + vpermi2q zmm4, zmm8, zmm9 + vmovdqa64 zmm5, zmm18 + vpermi2q zmm5, zmm8, zmm9 + vpunpckldq zmm8, zmm6, zmm7 + vpunpckhdq zmm9, zmm6, zmm7 + vmovdqa64 zmm6, zmm17 + vpermi2q zmm6, zmm8, zmm9 + vmovdqa64 zmm7, zmm18 + vpermi2q zmm7, zmm8, zmm9 + vpunpckldq zmm8, zmm23, zmm24 + vpunpckhdq zmm9, zmm23, zmm24 + vmovdqa64 zmm23, zmm17 + vpermi2q zmm23, zmm8, zmm9 + vmovdqa64 zmm24, zmm18 + vpermi2q zmm24, zmm8, zmm9 + vpunpckldq zmm8, zmm25, zmm26 + vpunpckhdq zmm9, zmm25, zmm26 + vmovdqa64 zmm25, zmm17 + vpermi2q zmm25, zmm8, zmm9 + vmovdqa64 zmm26, zmm18 + vpermi2q zmm26, zmm8, zmm9 + vpmulhw zmm8, zmm0, zmm15 + vpmulhw zmm9, zmm1, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm0, zmm8 + vpsubw zmm9, zmm1, zmm9 + vmovdqu64 [r11], ymm8 + vextracti64x4 YMMWORD PTR [r11], zmm8, 1 + vmovdqu64 [r11+32], ymm9 + vextracti64x4 YMMWORD PTR [r11+32], zmm9, 1 + vpmulhw zmm8, zmm2, zmm15 + vpmulhw zmm9, zmm3, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm2, zmm8 + vpsubw zmm9, zmm3, zmm9 + vmovdqu64 [r11+64], ymm8 + vextracti64x4 YMMWORD PTR [r11+64], zmm8, 1 + vmovdqu64 [r11+96], ymm9 + vextracti64x4 YMMWORD PTR [r11+96], zmm9, 1 + vpmulhw zmm8, zmm19, zmm15 + vpmulhw zmm9, zmm20, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm19, zmm8 + vpsubw zmm9, zmm20, zmm9 + vmovdqu64 [r11+256], ymm8 + vextracti64x4 YMMWORD PTR [r11+256], zmm8, 1 + vmovdqu64 [r11+288], ymm9 + vextracti64x4 YMMWORD PTR [r11+288], zmm9, 1 + vpmulhw zmm8, zmm21, zmm15 + vpmulhw zmm9, zmm22, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm21, zmm8 + vpsubw zmm9, zmm22, zmm9 + vmovdqu64 [r11+320], ymm8 + vextracti64x4 YMMWORD PTR [r11+320], zmm8, 1 + vmovdqu64 [r11+352], ymm9 + vextracti64x4 YMMWORD PTR [r11+352], zmm9, 1 + vpmulhw zmm8, zmm4, zmm15 + vpmulhw zmm9, zmm5, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm4, zmm8 + vpsubw zmm9, zmm5, zmm9 + vmovdqu64 [r11+128], ymm8 + vextracti64x4 YMMWORD PTR [r11+128], zmm8, 1 + vmovdqu64 [r11+160], ymm9 + vextracti64x4 YMMWORD PTR [r11+160], zmm9, 1 + vpmulhw zmm8, zmm6, zmm15 + vpmulhw zmm9, zmm7, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm6, zmm8 + vpsubw zmm9, zmm7, zmm9 + vmovdqu64 [r11+192], ymm8 + vextracti64x4 YMMWORD PTR [r11+192], zmm8, 1 + vmovdqu64 [r11+224], ymm9 + vextracti64x4 YMMWORD PTR [r11+224], zmm9, 1 + vpmulhw zmm8, zmm23, zmm15 + vpmulhw zmm9, zmm24, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm23, zmm8 + vpsubw zmm9, zmm24, zmm9 + vmovdqu64 [r11+384], ymm8 + vextracti64x4 YMMWORD PTR [r11+384], zmm8, 1 + vmovdqu64 [r11+416], ymm9 + vextracti64x4 YMMWORD PTR [r11+416], zmm9, 1 + vpmulhw zmm8, zmm25, zmm15 + vpmulhw zmm9, zmm26, zmm15 + vpsraw zmm8, zmm8, 10 + vpsraw zmm9, zmm9, 10 + vpmullw zmm8, zmm8, zmm14 + vpmullw zmm9, zmm9, zmm14 + vpsubw zmm8, zmm25, zmm8 + vpsubw zmm9, zmm26, zmm9 + vmovdqu64 [r11+448], ymm8 + vextracti64x4 YMMWORD PTR [r11+448], zmm8, 1 + vmovdqu64 [r11+480], ymm9 + vextracti64x4 YMMWORD PTR [r11+480], zmm9, 1 +L_decap_avx512_bp_done: + mov r14, 62209 + vmovd xmm12, r14d + vpbroadcastw zmm12, xmm12 + movsxd r10, eax + mov r13, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [rcx] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+64], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [r8] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+64], 1 + vmovdqu ymm5, YMMWORD PTR [r8+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r13] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r13+64], 1 + vmovdqu ymm11, YMMWORD PTR [r13+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r13+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rdx], ymm0 + vextracti64x4 YMMWORD PTR [rdx+64], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+32], ymm1 + vextracti64x4 YMMWORD PTR [rdx+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+192], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [r8+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+192], 1 + vmovdqu ymm5, YMMWORD PTR [r8+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r13+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r13+192], 1 + vmovdqu ymm11, YMMWORD PTR [r13+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r13+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rdx+128], ymm0 + vextracti64x4 YMMWORD PTR [rdx+192], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+160], ymm1 + vextracti64x4 YMMWORD PTR [rdx+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+320], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [r8+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+320], 1 + vmovdqu ymm5, YMMWORD PTR [r8+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r13+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r13+320], 1 + vmovdqu ymm11, YMMWORD PTR [r13+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r13+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rdx+256], ymm0 + vextracti64x4 YMMWORD PTR [rdx+320], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+288], ymm1 + vextracti64x4 YMMWORD PTR [rdx+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+448], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [r8+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+448], 1 + vmovdqu ymm5, YMMWORD PTR [r8+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r13+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r13+448], 1 + vmovdqu ymm11, YMMWORD PTR [r13+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r13+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rdx+384], ymm0 + vextracti64x4 YMMWORD PTR [rdx+448], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+416], ymm1 + vextracti64x4 YMMWORD PTR [rdx+480], zmm1, 1 + add rcx, 512 + add r8, 512 + sub r10, 2 + jz L_pointwise_acc_mont_end_decap_avx512 +L_pointwise_acc_mont_start_decap_avx512: + mov r13, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [rcx] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+64], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [r8] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+64], 1 + vmovdqu ymm5, YMMWORD PTR [r8+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r13] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r13+64], 1 + vmovdqu ymm11, YMMWORD PTR [r13+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r13+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+64], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+96], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx], ymm0 + vextracti64x4 YMMWORD PTR [rdx+64], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+32], ymm1 + vextracti64x4 YMMWORD PTR [rdx+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+192], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [r8+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+192], 1 + vmovdqu ymm5, YMMWORD PTR [r8+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r13+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r13+192], 1 + vmovdqu ymm11, YMMWORD PTR [r13+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r13+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+192], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+224], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+128], ymm0 + vextracti64x4 YMMWORD PTR [rdx+192], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+160], ymm1 + vextracti64x4 YMMWORD PTR [rdx+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+320], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [r8+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+320], 1 + vmovdqu ymm5, YMMWORD PTR [r8+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r13+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r13+320], 1 + vmovdqu ymm11, YMMWORD PTR [r13+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r13+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+320], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+352], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+256], ymm0 + vextracti64x4 YMMWORD PTR [rdx+320], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+288], ymm1 + vextracti64x4 YMMWORD PTR [rdx+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+448], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [r8+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+448], 1 + vmovdqu ymm5, YMMWORD PTR [r8+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r13+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r13+448], 1 + vmovdqu ymm11, YMMWORD PTR [r13+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r13+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+448], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+480], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+384], ymm0 + vextracti64x4 YMMWORD PTR [rdx+448], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+416], ymm1 + vextracti64x4 YMMWORD PTR [rdx+480], zmm1, 1 + add rcx, 512 + add r8, 512 + sub r10, 1 + jg L_pointwise_acc_mont_start_decap_avx512 +L_pointwise_acc_mont_end_decap_avx512: + mov r13, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [rcx] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+64], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+96], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [r8] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+64], 1 + vmovdqu ymm5, YMMWORD PTR [r8+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+96], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r13] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r13+64], 1 + vmovdqu ymm11, YMMWORD PTR [r13+32] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r13+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+64], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+96], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx], ymm0 + vextracti64x4 YMMWORD PTR [rdx+64], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+32], ymm1 + vextracti64x4 YMMWORD PTR [rdx+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+192], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+224], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [r8+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+192], 1 + vmovdqu ymm5, YMMWORD PTR [r8+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+224], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r13+128] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r13+192], 1 + vmovdqu ymm11, YMMWORD PTR [r13+160] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r13+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+192], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+224], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+128], ymm0 + vextracti64x4 YMMWORD PTR [rdx+192], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+160], ymm1 + vextracti64x4 YMMWORD PTR [rdx+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+320], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+352], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [r8+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+320], 1 + vmovdqu ymm5, YMMWORD PTR [r8+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+352], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r13+256] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r13+320], 1 + vmovdqu ymm11, YMMWORD PTR [r13+288] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r13+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+320], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+352], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+256], ymm0 + vextracti64x4 YMMWORD PTR [rdx+320], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+288], ymm1 + vextracti64x4 YMMWORD PTR [rdx+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rcx+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rcx+448], 1 + vmovdqu ymm3, YMMWORD PTR [rcx+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rcx+480], 1 + vpslld zmm6, zmm3, 16 + vpsrld zmm7, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm6 + vpblendmw zmm3{k4}, zmm3, zmm7 + vmovdqu ymm4, YMMWORD PTR [r8+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+448], 1 + vmovdqu ymm5, YMMWORD PTR [r8+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+480], 1 + vpslld zmm6, zmm5, 16 + vpsrld zmm7, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm6 + vpblendmw zmm5{k4}, zmm5, zmm7 + vmovdqu ymm10, YMMWORD PTR [r13+384] + vinserti64x4 zmm10, zmm10, YMMWORD PTR [r13+448], 1 + vmovdqu ymm11, YMMWORD PTR [r13+416] + vinserti64x4 zmm11, zmm11, YMMWORD PTR [r13+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm6, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm7, zmm2, zmm4 + vpmullw zmm8, zmm0, zmm12 + vpmullw zmm9, zmm1, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm6, zmm8 + vpsubw zmm1, zmm7, zmm9 + vpmullw zmm6, zmm0, zmm11 + vpmulhw zmm7, zmm0, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm0, zmm7, zmm6 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm6, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm7, zmm3, zmm4 + vpmullw zmm8, zmm1, zmm12 + vpmullw zmm9, zmm2, zmm12 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm1, zmm6, zmm8 + vpsubw zmm2, zmm7, zmm9 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm6, YMMWORD PTR [rdx+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+448], 1 + vmovdqu ymm7, YMMWORD PTR [rdx+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+480], 1 + vpaddw zmm0, zmm0, zmm6 + vpaddw zmm1, zmm1, zmm7 + vpslld zmm6, zmm1, 16 + vpsrld zmm7, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm6 + vpblendmw zmm1{k4}, zmm1, zmm7 + vmovdqu YMMWORD PTR [rdx+384], ymm0 + vextracti64x4 YMMWORD PTR [rdx+448], zmm0, 1 + vmovdqu YMMWORD PTR [rdx+416], ymm1 + vextracti64x4 YMMWORD PTR [rdx+480], zmm1, 1 + add rcx, 512 + mov r13, QWORD PTR [ptr_L_mlkem_avx512_zetas_inv] + vmovdqu64 ymm0, [rdx] + vinserti64x4 zmm0, zmm0, YMMWORD PTR [rdx], 1 + vmovdqu64 ymm1, [rdx+32] + vinserti64x4 zmm1, zmm1, YMMWORD PTR [rdx+32], 1 + vmovdqu64 ymm2, [rdx+64] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+64], 1 + vmovdqu64 ymm3, [rdx+96] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+96], 1 + vmovdqu64 ymm4, [rdx+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [rdx+128], 1 + vmovdqu64 ymm5, [rdx+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [rdx+160], 1 + vmovdqu64 ymm6, [rdx+192] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rdx+192], 1 + vmovdqu64 ymm7, [rdx+224] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rdx+224], 1 + vmovdqu64 ymm19, [rdx+256] + vinserti64x4 zmm19, zmm19, YMMWORD PTR [rdx+256], 1 + vmovdqu64 ymm20, [rdx+288] + vinserti64x4 zmm20, zmm20, YMMWORD PTR [rdx+288], 1 + vmovdqu64 ymm21, [rdx+320] + vinserti64x4 zmm21, zmm21, YMMWORD PTR [rdx+320], 1 + vmovdqu64 ymm22, [rdx+352] + vinserti64x4 zmm22, zmm22, YMMWORD PTR [rdx+352], 1 + vmovdqu64 ymm23, [rdx+384] + vinserti64x4 zmm23, zmm23, YMMWORD PTR [rdx+384], 1 + vmovdqu64 ymm24, [rdx+416] + vinserti64x4 zmm24, zmm24, YMMWORD PTR [rdx+416], 1 + vmovdqu64 ymm25, [rdx+448] + vinserti64x4 zmm25, zmm25, YMMWORD PTR [rdx+448], 1 + vmovdqu64 ymm26, [rdx+480] + vinserti64x4 zmm26, zmm26, YMMWORD PTR [rdx+480], 1 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm0, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm0, zmm1 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+32] + vpsllq zmm0, zmm9, 32 + vpsrlq zmm1, zmm8, 32 + vpblendmd zmm0{k1}, zmm8, zmm0 + vpblendmd zmm1{k2}, zmm9, zmm1 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm2, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+64] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm2, zmm3 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+96] + vpsllq zmm2, zmm9, 32 + vpsrlq zmm3, zmm8, 32 + vpblendmd zmm2{k1}, zmm8, zmm2 + vpblendmd zmm3{k2}, zmm9, zmm3 + vpaddw zmm8, zmm0, zmm1 + vpaddw zmm9, zmm2, zmm3 + vpsubw zmm1, zmm0, zmm1 + vpsubw zmm3, zmm2, zmm3 + vpmulhw zmm0, zmm8, zmm15 + vpmulhw zmm2, zmm9, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm2, zmm2, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm2, zmm2, zmm14 + vpsubw zmm8, zmm8, zmm0 + vpsubw zmm9, zmm9, zmm2 + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm1, zmm1, zmm0 + vpsubw zmm3, zmm3, zmm2 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm19, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1216] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm19, zmm20 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1248] + vpsllq zmm19, zmm28, 32 + vpsrlq zmm20, zmm27, 32 + vpblendmd zmm19{k1}, zmm27, zmm19 + vpblendmd zmm20{k2}, zmm28, zmm20 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm21, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1280] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm21, zmm22 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1312] + vpsllq zmm21, zmm28, 32 + vpsrlq zmm22, zmm27, 32 + vpblendmd zmm21{k1}, zmm27, zmm21 + vpblendmd zmm22{k2}, zmm28, zmm22 + vpaddw zmm27, zmm19, zmm20 + vpaddw zmm28, zmm21, zmm22 + vpsubw zmm20, zmm19, zmm20 + vpsubw zmm22, zmm21, zmm22 + vpmulhw zmm19, zmm27, zmm15 + vpmulhw zmm21, zmm28, zmm15 + vpsraw zmm19, zmm19, 10 + vpsraw zmm21, zmm21, 10 + vpmullw zmm19, zmm19, zmm14 + vpmullw zmm21, zmm21, zmm14 + vpsubw zmm27, zmm27, zmm19 + vpsubw zmm28, zmm28, zmm21 + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm20, zmm20, zmm19 + vpsubw zmm22, zmm22, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+128] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+160] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+192] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+224] + vpunpckldq zmm0, zmm8, zmm1 + vpunpckhdq zmm1, zmm8, zmm1 + vpunpckldq zmm2, zmm9, zmm3 + vpunpckhdq zmm3, zmm9, zmm3 + vpaddw zmm8, zmm0, zmm1 + vpaddw zmm9, zmm2, zmm3 + vpsubw zmm1, zmm0, zmm1 + vpsubw zmm3, zmm2, zmm3 + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm1, zmm1, zmm0 + vpsubw zmm3, zmm3, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1344] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1376] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1408] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1440] + vpunpckldq zmm19, zmm27, zmm20 + vpunpckhdq zmm20, zmm27, zmm20 + vpunpckldq zmm21, zmm28, zmm22 + vpunpckhdq zmm22, zmm28, zmm22 + vpaddw zmm27, zmm19, zmm20 + vpaddw zmm28, zmm21, zmm22 + vpsubw zmm20, zmm19, zmm20 + vpsubw zmm22, zmm21, zmm22 + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm20, zmm20, zmm19 + vpsubw zmm22, zmm22, zmm21 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+256] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+288] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+320] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+352] + vpunpcklqdq zmm0, zmm8, zmm1 + vpunpckhqdq zmm1, zmm8, zmm1 + vpunpcklqdq zmm2, zmm9, zmm3 + vpunpckhqdq zmm3, zmm9, zmm3 + vpaddw zmm8, zmm0, zmm1 + vpaddw zmm9, zmm2, zmm3 + vpsubw zmm1, zmm0, zmm1 + vpsubw zmm3, zmm2, zmm3 + vpmulhw zmm0, zmm8, zmm15 + vpmulhw zmm2, zmm9, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm2, zmm2, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm2, zmm2, zmm14 + vpsubw zmm8, zmm8, zmm0 + vpsubw zmm9, zmm9, zmm2 + vpmullw zmm0, zmm1, zmm12 + vpmullw zmm2, zmm3, zmm13 + vpmulhw zmm1, zmm1, zmm10 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm0, zmm0, zmm14 + vpmulhw zmm2, zmm2, zmm14 + vpsubw zmm1, zmm1, zmm0 + vpsubw zmm3, zmm3, zmm2 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1472] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1504] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1536] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1568] + vpunpcklqdq zmm19, zmm27, zmm20 + vpunpckhqdq zmm20, zmm27, zmm20 + vpunpcklqdq zmm21, zmm28, zmm22 + vpunpckhqdq zmm22, zmm28, zmm22 + vpaddw zmm27, zmm19, zmm20 + vpaddw zmm28, zmm21, zmm22 + vpsubw zmm20, zmm19, zmm20 + vpsubw zmm22, zmm21, zmm22 + vpmulhw zmm19, zmm27, zmm15 + vpmulhw zmm21, zmm28, zmm15 + vpsraw zmm19, zmm19, 10 + vpsraw zmm21, zmm21, 10 + vpmullw zmm19, zmm19, zmm14 + vpmullw zmm21, zmm21, zmm14 + vpsubw zmm27, zmm27, zmm19 + vpsubw zmm28, zmm28, zmm21 + vpmullw zmm19, zmm20, zmm12 + vpmullw zmm21, zmm22, zmm13 + vpmulhw zmm20, zmm20, zmm10 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm21, zmm21, zmm14 + vpsubw zmm20, zmm20, zmm19 + vpsubw zmm22, zmm22, zmm21 + vmovdqa64 zmm0, zmm17 + vpermi2q zmm0, zmm8, zmm1 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+384] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm8, zmm1 + vmovdqa64 zmm1, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+416] + vmovdqa64 zmm2, zmm17 + vpermi2q zmm2, zmm9, zmm3 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+448] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm9, zmm3 + vmovdqa64 zmm3, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+480] + vpsubw zmm8, zmm0, zmm1 + vpsubw zmm9, zmm2, zmm3 + vpaddw zmm0, zmm0, zmm1 + vpaddw zmm2, zmm2, zmm3 + vpmullw zmm1, zmm8, zmm12 + vpmullw zmm3, zmm9, zmm13 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm11 + vpmulhw zmm1, zmm1, zmm14 + vpmulhw zmm3, zmm3, zmm14 + vpsubw zmm1, zmm8, zmm1 + vpsubw zmm3, zmm9, zmm3 + vmovdqa64 zmm19, zmm17 + vpermi2q zmm19, zmm27, zmm20 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1600] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm27, zmm20 + vmovdqa64 zmm20, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1632] + vmovdqa64 zmm21, zmm17 + vpermi2q zmm21, zmm28, zmm22 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1664] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm28, zmm22 + vmovdqa64 zmm22, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1696] + vpsubw zmm27, zmm19, zmm20 + vpsubw zmm28, zmm21, zmm22 + vpaddw zmm19, zmm19, zmm20 + vpaddw zmm21, zmm21, zmm22 + vpmullw zmm20, zmm27, zmm12 + vpmullw zmm22, zmm28, zmm13 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm11 + vpmulhw zmm20, zmm20, zmm14 + vpmulhw zmm22, zmm22, zmm14 + vpsubw zmm20, zmm27, zmm20 + vpsubw zmm22, zmm28, zmm22 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+512] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+544] + vpaddw zmm8, zmm0, zmm2 + vpaddw zmm9, zmm1, zmm3 + vpsubw zmm2, zmm0, zmm2 + vpsubw zmm3, zmm1, zmm3 + vpmulhw zmm0, zmm8, zmm15 + vpmulhw zmm1, zmm9, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm8, zmm0 + vpsubw zmm1, zmm9, zmm1 + vpmullw zmm8, zmm2, zmm12 + vpmullw zmm9, zmm3, zmm12 + vpmulhw zmm2, zmm2, zmm10 + vpmulhw zmm3, zmm3, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm2, zmm2, zmm8 + vpsubw zmm3, zmm3, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1728] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1760] + vpaddw zmm27, zmm19, zmm21 + vpaddw zmm28, zmm20, zmm22 + vpsubw zmm21, zmm19, zmm21 + vpsubw zmm22, zmm20, zmm22 + vpmulhw zmm19, zmm27, zmm15 + vpmulhw zmm20, zmm28, zmm15 + vpsraw zmm19, zmm19, 10 + vpsraw zmm20, zmm20, 10 + vpmullw zmm19, zmm19, zmm14 + vpmullw zmm20, zmm20, zmm14 + vpsubw zmm19, zmm27, zmm19 + vpsubw zmm20, zmm28, zmm20 + vpmullw zmm27, zmm21, zmm12 + vpmullw zmm28, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm27, zmm27, zmm14 + vpmulhw zmm28, zmm28, zmm14 + vpsubw zmm21, zmm21, zmm27 + vpsubw zmm22, zmm22, zmm28 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm4, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+576] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm4, zmm5 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+608] + vpsllq zmm4, zmm9, 32 + vpsrlq zmm5, zmm8, 32 + vpblendmd zmm4{k1}, zmm8, zmm4 + vpblendmd zmm5{k2}, zmm9, zmm5 + vmovdqa64 zmm8, zmm17 + vpermi2q zmm8, zmm6, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+640] + vmovdqa64 zmm9, zmm18 + vpermi2q zmm9, zmm6, zmm7 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+672] + vpsllq zmm6, zmm9, 32 + vpsrlq zmm7, zmm8, 32 + vpblendmd zmm6{k1}, zmm8, zmm6 + vpblendmd zmm7{k2}, zmm9, zmm7 + vpaddw zmm8, zmm4, zmm5 + vpaddw zmm9, zmm6, zmm7 + vpsubw zmm5, zmm4, zmm5 + vpsubw zmm7, zmm6, zmm7 + vpmulhw zmm4, zmm8, zmm15 + vpmulhw zmm6, zmm9, zmm15 + vpsraw zmm4, zmm4, 10 + vpsraw zmm6, zmm6, 10 + vpmullw zmm4, zmm4, zmm14 + vpmullw zmm6, zmm6, zmm14 + vpsubw zmm8, zmm8, zmm4 + vpsubw zmm9, zmm9, zmm6 + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm5, zmm5, zmm4 + vpsubw zmm7, zmm7, zmm6 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm23, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1792] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm23, zmm24 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1824] + vpsllq zmm23, zmm28, 32 + vpsrlq zmm24, zmm27, 32 + vpblendmd zmm23{k1}, zmm27, zmm23 + vpblendmd zmm24{k2}, zmm28, zmm24 + vmovdqa64 zmm27, zmm17 + vpermi2q zmm27, zmm25, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1856] + vmovdqa64 zmm28, zmm18 + vpermi2q zmm28, zmm25, zmm26 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1888] + vpsllq zmm25, zmm28, 32 + vpsrlq zmm26, zmm27, 32 + vpblendmd zmm25{k1}, zmm27, zmm25 + vpblendmd zmm26{k2}, zmm28, zmm26 + vpaddw zmm27, zmm23, zmm24 + vpaddw zmm28, zmm25, zmm26 + vpsubw zmm24, zmm23, zmm24 + vpsubw zmm26, zmm25, zmm26 + vpmulhw zmm23, zmm27, zmm15 + vpmulhw zmm25, zmm28, zmm15 + vpsraw zmm23, zmm23, 10 + vpsraw zmm25, zmm25, 10 + vpmullw zmm23, zmm23, zmm14 + vpmullw zmm25, zmm25, zmm14 + vpsubw zmm27, zmm27, zmm23 + vpsubw zmm28, zmm28, zmm25 + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm24, zmm24, zmm23 + vpsubw zmm26, zmm26, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+704] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+736] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+768] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+800] + vpunpckldq zmm4, zmm8, zmm5 + vpunpckhdq zmm5, zmm8, zmm5 + vpunpckldq zmm6, zmm9, zmm7 + vpunpckhdq zmm7, zmm9, zmm7 + vpaddw zmm8, zmm4, zmm5 + vpaddw zmm9, zmm6, zmm7 + vpsubw zmm5, zmm4, zmm5 + vpsubw zmm7, zmm6, zmm7 + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm5, zmm5, zmm4 + vpsubw zmm7, zmm7, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1920] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1952] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1984] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+2016] + vpunpckldq zmm23, zmm27, zmm24 + vpunpckhdq zmm24, zmm27, zmm24 + vpunpckldq zmm25, zmm28, zmm26 + vpunpckhdq zmm26, zmm28, zmm26 + vpaddw zmm27, zmm23, zmm24 + vpaddw zmm28, zmm25, zmm26 + vpsubw zmm24, zmm23, zmm24 + vpsubw zmm26, zmm25, zmm26 + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm24, zmm24, zmm23 + vpsubw zmm26, zmm26, zmm25 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+832] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+864] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+896] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+928] + vpunpcklqdq zmm4, zmm8, zmm5 + vpunpckhqdq zmm5, zmm8, zmm5 + vpunpcklqdq zmm6, zmm9, zmm7 + vpunpckhqdq zmm7, zmm9, zmm7 + vpaddw zmm8, zmm4, zmm5 + vpaddw zmm9, zmm6, zmm7 + vpsubw zmm5, zmm4, zmm5 + vpsubw zmm7, zmm6, zmm7 + vpmulhw zmm4, zmm8, zmm15 + vpmulhw zmm6, zmm9, zmm15 + vpsraw zmm4, zmm4, 10 + vpsraw zmm6, zmm6, 10 + vpmullw zmm4, zmm4, zmm14 + vpmullw zmm6, zmm6, zmm14 + vpsubw zmm8, zmm8, zmm4 + vpsubw zmm9, zmm9, zmm6 + vpmullw zmm4, zmm5, zmm12 + vpmullw zmm6, zmm7, zmm13 + vpmulhw zmm5, zmm5, zmm10 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm6, zmm6, zmm14 + vpsubw zmm5, zmm5, zmm4 + vpsubw zmm7, zmm7, zmm6 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+2048] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+2080] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+2112] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+2144] + vpunpcklqdq zmm23, zmm27, zmm24 + vpunpckhqdq zmm24, zmm27, zmm24 + vpunpcklqdq zmm25, zmm28, zmm26 + vpunpckhqdq zmm26, zmm28, zmm26 + vpaddw zmm27, zmm23, zmm24 + vpaddw zmm28, zmm25, zmm26 + vpsubw zmm24, zmm23, zmm24 + vpsubw zmm26, zmm25, zmm26 + vpmulhw zmm23, zmm27, zmm15 + vpmulhw zmm25, zmm28, zmm15 + vpsraw zmm23, zmm23, 10 + vpsraw zmm25, zmm25, 10 + vpmullw zmm23, zmm23, zmm14 + vpmullw zmm25, zmm25, zmm14 + vpsubw zmm27, zmm27, zmm23 + vpsubw zmm28, zmm28, zmm25 + vpmullw zmm23, zmm24, zmm12 + vpmullw zmm25, zmm26, zmm13 + vpmulhw zmm24, zmm24, zmm10 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm25, zmm25, zmm14 + vpsubw zmm24, zmm24, zmm23 + vpsubw zmm26, zmm26, zmm25 + vmovdqa64 zmm4, zmm17 + vpermi2q zmm4, zmm8, zmm5 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+960] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm8, zmm5 + vmovdqa64 zmm5, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+992] + vmovdqa64 zmm6, zmm17 + vpermi2q zmm6, zmm9, zmm7 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+1024] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm9, zmm7 + vmovdqa64 zmm7, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+1056] + vpsubw zmm8, zmm4, zmm5 + vpsubw zmm9, zmm6, zmm7 + vpaddw zmm4, zmm4, zmm5 + vpaddw zmm6, zmm6, zmm7 + vpmullw zmm5, zmm8, zmm12 + vpmullw zmm7, zmm9, zmm13 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm11 + vpmulhw zmm5, zmm5, zmm14 + vpmulhw zmm7, zmm7, zmm14 + vpsubw zmm5, zmm8, zmm5 + vpsubw zmm7, zmm9, zmm7 + vmovdqa64 zmm23, zmm17 + vpermi2q zmm23, zmm27, zmm24 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+2176] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm27, zmm24 + vmovdqa64 zmm24, zmm16 + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+2208] + vmovdqa64 zmm25, zmm17 + vpermi2q zmm25, zmm28, zmm26 + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+2240] + vmovdqa64 zmm16, zmm18 + vpermi2q zmm16, zmm28, zmm26 + vmovdqa64 zmm26, zmm16 + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+2272] + vpsubw zmm27, zmm23, zmm24 + vpsubw zmm28, zmm25, zmm26 + vpaddw zmm23, zmm23, zmm24 + vpaddw zmm25, zmm25, zmm26 + vpmullw zmm24, zmm27, zmm12 + vpmullw zmm26, zmm28, zmm13 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm11 + vpmulhw zmm24, zmm24, zmm14 + vpmulhw zmm26, zmm26, zmm14 + vpsubw zmm24, zmm27, zmm24 + vpsubw zmm26, zmm28, zmm26 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1088] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1120] + vpaddw zmm8, zmm4, zmm6 + vpaddw zmm9, zmm5, zmm7 + vpsubw zmm6, zmm4, zmm6 + vpsubw zmm7, zmm5, zmm7 + vpmulhw zmm4, zmm8, zmm15 + vpmulhw zmm5, zmm9, zmm15 + vpsraw zmm4, zmm4, 10 + vpsraw zmm5, zmm5, 10 + vpmullw zmm4, zmm4, zmm14 + vpmullw zmm5, zmm5, zmm14 + vpsubw zmm4, zmm8, zmm4 + vpsubw zmm5, zmm9, zmm5 + vpmullw zmm8, zmm6, zmm12 + vpmullw zmm9, zmm7, zmm12 + vpmulhw zmm6, zmm6, zmm10 + vpmulhw zmm7, zmm7, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm6, zmm6, zmm8 + vpsubw zmm7, zmm7, zmm9 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+2304] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+2336] + vpaddw zmm27, zmm23, zmm25 + vpaddw zmm28, zmm24, zmm26 + vpsubw zmm25, zmm23, zmm25 + vpsubw zmm26, zmm24, zmm26 + vpmulhw zmm23, zmm27, zmm15 + vpmulhw zmm24, zmm28, zmm15 + vpsraw zmm23, zmm23, 10 + vpsraw zmm24, zmm24, 10 + vpmullw zmm23, zmm23, zmm14 + vpmullw zmm24, zmm24, zmm14 + vpsubw zmm23, zmm27, zmm23 + vpsubw zmm24, zmm28, zmm24 + vpmullw zmm27, zmm25, zmm12 + vpmullw zmm28, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm27, zmm27, zmm14 + vpmulhw zmm28, zmm28, zmm14 + vpsubw zmm25, zmm25, zmm27 + vpsubw zmm26, zmm26, zmm28 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+1152] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+1184] + vpsubw zmm8, zmm0, zmm4 + vpsubw zmm9, zmm1, zmm5 + vpaddw zmm0, zmm0, zmm4 + vpaddw zmm1, zmm1, zmm5 + vpmullw zmm4, zmm8, zmm12 + vpmullw zmm5, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm4, zmm4, zmm14 + vpmulhw zmm5, zmm5, zmm14 + vpsubw zmm4, zmm8, zmm4 + vpsubw zmm5, zmm9, zmm5 + vpsubw zmm8, zmm2, zmm6 + vpsubw zmm9, zmm3, zmm7 + vpaddw zmm2, zmm2, zmm6 + vpaddw zmm3, zmm3, zmm7 + vpmullw zmm6, zmm8, zmm12 + vpmullw zmm7, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm6, zmm6, zmm14 + vpmulhw zmm7, zmm7, zmm14 + vpsubw zmm6, zmm8, zmm6 + vpsubw zmm7, zmm9, zmm7 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+2368] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+2400] + vpsubw zmm27, zmm19, zmm23 + vpsubw zmm28, zmm20, zmm24 + vpaddw zmm19, zmm19, zmm23 + vpaddw zmm20, zmm20, zmm24 + vpmullw zmm23, zmm27, zmm12 + vpmullw zmm24, zmm28, zmm12 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm10 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm24, zmm24, zmm14 + vpsubw zmm23, zmm27, zmm23 + vpsubw zmm24, zmm28, zmm24 + vpsubw zmm27, zmm21, zmm25 + vpsubw zmm28, zmm22, zmm26 + vpaddw zmm21, zmm21, zmm25 + vpaddw zmm22, zmm22, zmm26 + vpmullw zmm25, zmm27, zmm12 + vpmullw zmm26, zmm28, zmm12 + vpmulhw zmm27, zmm27, zmm10 + vpmulhw zmm28, zmm28, zmm10 + vpmulhw zmm25, zmm25, zmm14 + vpmulhw zmm26, zmm26, zmm14 + vpsubw zmm25, zmm27, zmm25 + vpsubw zmm26, zmm28, zmm26 + vbroadcasti64x4 zmm10, YMMWORD PTR [r13+2432] + vbroadcasti64x4 zmm12, YMMWORD PTR [r13+2464] + vbroadcasti64x4 zmm11, YMMWORD PTR [r13+2496] + vbroadcasti64x4 zmm13, YMMWORD PTR [r13+2528] + vpsubw zmm8, zmm0, zmm19 + vpsubw zmm9, zmm1, zmm20 + vpaddw zmm0, zmm0, zmm19 + vpaddw zmm1, zmm1, zmm20 + vpmullw zmm19, zmm8, zmm12 + vpmullw zmm20, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm19, zmm19, zmm14 + vpmulhw zmm20, zmm20, zmm14 + vpsubw zmm19, zmm8, zmm19 + vpsubw zmm20, zmm9, zmm20 + vpaddw zmm8, zmm2, zmm21 + vpaddw zmm9, zmm3, zmm22 + vpsubw zmm21, zmm2, zmm21 + vpsubw zmm22, zmm3, zmm22 + vpmulhw zmm2, zmm8, zmm15 + vpmulhw zmm3, zmm9, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm8, zmm2 + vpsubw zmm3, zmm9, zmm3 + vpmullw zmm8, zmm21, zmm12 + vpmullw zmm9, zmm22, zmm12 + vpmulhw zmm21, zmm21, zmm10 + vpmulhw zmm22, zmm22, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm21, zmm21, zmm8 + vpsubw zmm22, zmm22, zmm9 + vpsubw zmm8, zmm4, zmm23 + vpsubw zmm9, zmm5, zmm24 + vpaddw zmm4, zmm4, zmm23 + vpaddw zmm5, zmm5, zmm24 + vpmullw zmm23, zmm8, zmm12 + vpmullw zmm24, zmm9, zmm12 + vpmulhw zmm8, zmm8, zmm10 + vpmulhw zmm9, zmm9, zmm10 + vpmulhw zmm23, zmm23, zmm14 + vpmulhw zmm24, zmm24, zmm14 + vpsubw zmm23, zmm8, zmm23 + vpsubw zmm24, zmm9, zmm24 + vpaddw zmm8, zmm6, zmm25 + vpaddw zmm9, zmm7, zmm26 + vpsubw zmm25, zmm6, zmm25 + vpsubw zmm26, zmm7, zmm26 + vpmulhw zmm6, zmm8, zmm15 + vpmulhw zmm7, zmm9, zmm15 + vpsraw zmm6, zmm6, 10 + vpsraw zmm7, zmm7, 10 + vpmullw zmm6, zmm6, zmm14 + vpmullw zmm7, zmm7, zmm14 + vpsubw zmm6, zmm8, zmm6 + vpsubw zmm7, zmm9, zmm7 + vpmullw zmm8, zmm25, zmm12 + vpmullw zmm9, zmm26, zmm12 + vpmulhw zmm25, zmm25, zmm10 + vpmulhw zmm26, zmm26, zmm10 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm25, zmm25, zmm8 + vpsubw zmm26, zmm26, zmm9 + vpmullw zmm8, zmm0, zmm13 + vpmullw zmm9, zmm1, zmm13 + vpmulhw zmm0, zmm0, zmm11 + vpmulhw zmm1, zmm1, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm0, zmm0, zmm8 + vpsubw zmm1, zmm1, zmm9 + vpmullw zmm8, zmm2, zmm13 + vpmullw zmm9, zmm3, zmm13 + vpmulhw zmm2, zmm2, zmm11 + vpmulhw zmm3, zmm3, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm2, zmm2, zmm8 + vpsubw zmm3, zmm3, zmm9 + vpmullw zmm8, zmm4, zmm13 + vpmullw zmm9, zmm5, zmm13 + vpmulhw zmm4, zmm4, zmm11 + vpmulhw zmm5, zmm5, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm4, zmm4, zmm8 + vpsubw zmm5, zmm5, zmm9 + vpmullw zmm8, zmm6, zmm13 + vpmullw zmm9, zmm7, zmm13 + vpmulhw zmm6, zmm6, zmm11 + vpmulhw zmm7, zmm7, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm6, zmm6, zmm8 + vpsubw zmm7, zmm7, zmm9 + vpmullw zmm8, zmm19, zmm13 + vpmullw zmm9, zmm20, zmm13 + vpmulhw zmm19, zmm19, zmm11 + vpmulhw zmm20, zmm20, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm19, zmm19, zmm8 + vpsubw zmm20, zmm20, zmm9 + vpmullw zmm8, zmm21, zmm13 + vpmullw zmm9, zmm22, zmm13 + vpmulhw zmm21, zmm21, zmm11 + vpmulhw zmm22, zmm22, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm21, zmm21, zmm8 + vpsubw zmm22, zmm22, zmm9 + vpmullw zmm8, zmm23, zmm13 + vpmullw zmm9, zmm24, zmm13 + vpmulhw zmm23, zmm23, zmm11 + vpmulhw zmm24, zmm24, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm23, zmm23, zmm8 + vpsubw zmm24, zmm24, zmm9 + vpmullw zmm8, zmm25, zmm13 + vpmullw zmm9, zmm26, zmm13 + vpmulhw zmm25, zmm25, zmm11 + vpmulhw zmm26, zmm26, zmm11 + vpmulhw zmm8, zmm8, zmm14 + vpmulhw zmm9, zmm9, zmm14 + vpsubw zmm25, zmm25, zmm8 + vpsubw zmm26, zmm26, zmm9 + vmovdqu64 [rdx], ymm0 + vextracti64x4 YMMWORD PTR [rdx], zmm0, 1 + vmovdqu64 [rdx+32], ymm1 + vextracti64x4 YMMWORD PTR [rdx+32], zmm1, 1 + vmovdqu64 [rdx+64], ymm2 + vextracti64x4 YMMWORD PTR [rdx+64], zmm2, 1 + vmovdqu64 [rdx+96], ymm3 + vextracti64x4 YMMWORD PTR [rdx+96], zmm3, 1 + vmovdqu64 [rdx+128], ymm4 + vextracti64x4 YMMWORD PTR [rdx+128], zmm4, 1 + vmovdqu64 [rdx+160], ymm5 + vextracti64x4 YMMWORD PTR [rdx+160], zmm5, 1 + vmovdqu64 [rdx+192], ymm6 + vextracti64x4 YMMWORD PTR [rdx+192], zmm6, 1 + vmovdqu64 [rdx+224], ymm7 + vextracti64x4 YMMWORD PTR [rdx+224], zmm7, 1 + vmovdqu64 [rdx+256], ymm19 + vextracti64x4 YMMWORD PTR [rdx+256], zmm19, 1 + vmovdqu64 [rdx+288], ymm20 + vextracti64x4 YMMWORD PTR [rdx+288], zmm20, 1 + vmovdqu64 [rdx+320], ymm21 + vextracti64x4 YMMWORD PTR [rdx+320], zmm21, 1 + vmovdqu64 [rdx+352], ymm22 + vextracti64x4 YMMWORD PTR [rdx+352], zmm22, 1 + vmovdqu64 [rdx+384], ymm23 + vextracti64x4 YMMWORD PTR [rdx+384], zmm23, 1 + vmovdqu64 [rdx+416], ymm24 + vextracti64x4 YMMWORD PTR [rdx+416], zmm24, 1 + vmovdqu64 [rdx+448], ymm25 + vextracti64x4 YMMWORD PTR [rdx+448], zmm25, 1 + vmovdqu64 [rdx+480], ymm26 + vextracti64x4 YMMWORD PTR [rdx+480], zmm26, 1 + vmovdqu64 zmm0, [rdx] + vmovdqu64 zmm1, [rdx+64] + vmovdqu64 zmm2, [rdx+128] + vmovdqu64 zmm3, [rdx+192] + vmovdqu64 zmm4, [r9] + vmovdqu64 zmm5, [r9+64] + vmovdqu64 zmm6, [r9+128] + vmovdqu64 zmm7, [r9+192] + vpsubw zmm4, zmm4, zmm0 + vpsubw zmm5, zmm5, zmm1 + vpmulhw zmm0, zmm4, zmm15 + vpmulhw zmm1, zmm5, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpsubw zmm6, zmm6, zmm2 + vpsubw zmm7, zmm7, zmm3 + vpmulhw zmm2, zmm6, zmm15 + vpmulhw zmm3, zmm7, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [rdx], zmm0 + vmovdqu64 [rdx+64], zmm1 + vmovdqu64 [rdx+128], zmm2 + vmovdqu64 [rdx+192], zmm3 + vmovdqu64 zmm0, [rdx+256] + vmovdqu64 zmm1, [rdx+320] + vmovdqu64 zmm2, [rdx+384] + vmovdqu64 zmm3, [rdx+448] + vmovdqu64 zmm4, [r9+256] + vmovdqu64 zmm5, [r9+320] + vmovdqu64 zmm6, [r9+384] + vmovdqu64 zmm7, [r9+448] + vpsubw zmm4, zmm4, zmm0 + vpsubw zmm5, zmm5, zmm1 + vpmulhw zmm0, zmm4, zmm15 + vpmulhw zmm1, zmm5, zmm15 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm14 + vpmullw zmm1, zmm1, zmm14 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpsubw zmm6, zmm6, zmm2 + vpsubw zmm7, zmm7, zmm3 + vpmulhw zmm2, zmm6, zmm15 + vpmulhw zmm3, zmm7, zmm15 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm14 + vpmullw zmm3, zmm3, zmm14 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [rdx+256], zmm0 + vmovdqu64 [rdx+320], zmm1 + vmovdqu64 [rdx+384], zmm2 + vmovdqu64 [rdx+448], zmm3 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp] + vmovdqu xmm7, OWORD PTR [rsp+16] + vmovdqu xmm8, OWORD PTR [rsp+32] + vmovdqu xmm9, OWORD PTR [rsp+48] + vmovdqu xmm10, OWORD PTR [rsp+64] + vmovdqu xmm11, OWORD PTR [rsp+80] + vmovdqu xmm12, OWORD PTR [rsp+96] + vmovdqu xmm13, OWORD PTR [rsp+112] + vmovdqu xmm14, OWORD PTR [rsp+128] + vmovdqu xmm15, OWORD PTR [rsp+144] + add rsp, 160 + pop r14 + pop r13 + pop r12 + ret +mlkem_decapsulate_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +mlkem_basemul_x2_avx512 PROC + sub rsp, 136 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + mov r10, 3329 + vmovd xmm12, r10d + vpbroadcastw zmm12, xmm12 + mov r10, 62209 + vmovd xmm13, r10d + vpbroadcastw zmm13, xmm13 + mov r9d, 2863311530 + kmovd k3, r9d + mov r9d, 1431655765 + kmovd k4, r9d + mov rax, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [rdx] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+64], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+96], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+64], 1 + vmovdqu ymm5, YMMWORD PTR [r8+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+96], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+64], 1 + vmovdqu ymm7, YMMWORD PTR [rax+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vpslld zmm8, zmm1, 16 + vpsrld zmm9, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm8 + vpblendmw zmm1{k4}, zmm1, zmm9 + vmovdqu YMMWORD PTR [rcx], ymm0 + vextracti64x4 YMMWORD PTR [rcx+64], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+32], ymm1 + vextracti64x4 YMMWORD PTR [rcx+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rdx+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+192], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+224], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+192], 1 + vmovdqu ymm5, YMMWORD PTR [r8+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+224], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+192], 1 + vmovdqu ymm7, YMMWORD PTR [rax+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vpslld zmm8, zmm1, 16 + vpsrld zmm9, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm8 + vpblendmw zmm1{k4}, zmm1, zmm9 + vmovdqu YMMWORD PTR [rcx+128], ymm0 + vextracti64x4 YMMWORD PTR [rcx+192], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+160], ymm1 + vextracti64x4 YMMWORD PTR [rcx+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rdx+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+320], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+352], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+320], 1 + vmovdqu ymm5, YMMWORD PTR [r8+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+352], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+320], 1 + vmovdqu ymm7, YMMWORD PTR [rax+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vpslld zmm8, zmm1, 16 + vpsrld zmm9, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm8 + vpblendmw zmm1{k4}, zmm1, zmm9 + vmovdqu YMMWORD PTR [rcx+256], ymm0 + vextracti64x4 YMMWORD PTR [rcx+320], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+288], ymm1 + vextracti64x4 YMMWORD PTR [rcx+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rdx+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+448], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+480], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+448], 1 + vmovdqu ymm5, YMMWORD PTR [r8+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+480], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+448], 1 + vmovdqu ymm7, YMMWORD PTR [rax+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vpslld zmm8, zmm1, 16 + vpsrld zmm9, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm8 + vpblendmw zmm1{k4}, zmm1, zmm9 + vmovdqu YMMWORD PTR [rcx+384], ymm0 + vextracti64x4 YMMWORD PTR [rcx+448], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+416], ymm1 + vextracti64x4 YMMWORD PTR [rcx+480], zmm1, 1 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + add rsp, 136 + ret +mlkem_basemul_x2_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +mlkem_tomont_x2_avx512 PROC + sub rsp, 88 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + mov rdx, 1353 + vmovd xmm8, edx + vpbroadcastw zmm8, xmm8 + mov rdx, 20553 + vmovd xmm9, edx + vpbroadcastw zmm9, xmm9 + mov rdx, 3329 + vmovd xmm10, edx + vpbroadcastw zmm10, xmm10 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vpmullw zmm4, zmm0, zmm9 + vpmulhw zmm5, zmm0, zmm8 + vpmulhw zmm4, zmm4, zmm10 + vpsubw zmm0, zmm5, zmm4 + vpmullw zmm4, zmm1, zmm9 + vpmulhw zmm5, zmm1, zmm8 + vpmulhw zmm4, zmm4, zmm10 + vpsubw zmm1, zmm5, zmm4 + vpmullw zmm4, zmm2, zmm9 + vpmulhw zmm5, zmm2, zmm8 + vpmulhw zmm4, zmm4, zmm10 + vpsubw zmm2, zmm5, zmm4 + vpmullw zmm4, zmm3, zmm9 + vpmulhw zmm5, zmm3, zmm8 + vpmulhw zmm4, zmm4, zmm10 + vpsubw zmm3, zmm5, zmm4 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 zmm0, [rcx+256] + vmovdqu64 zmm1, [rcx+320] + vmovdqu64 zmm2, [rcx+384] + vmovdqu64 zmm3, [rcx+448] + vpmullw zmm4, zmm0, zmm9 + vpmulhw zmm5, zmm0, zmm8 + vpmulhw zmm4, zmm4, zmm10 + vpsubw zmm0, zmm5, zmm4 + vpmullw zmm4, zmm1, zmm9 + vpmulhw zmm5, zmm1, zmm8 + vpmulhw zmm4, zmm4, zmm10 + vpsubw zmm1, zmm5, zmm4 + vpmullw zmm4, zmm2, zmm9 + vpmulhw zmm5, zmm2, zmm8 + vpmulhw zmm4, zmm4, zmm10 + vpsubw zmm2, zmm5, zmm4 + vpmullw zmm4, zmm3, zmm9 + vpmulhw zmm5, zmm3, zmm8 + vpmulhw zmm4, zmm4, zmm10 + vpsubw zmm3, zmm5, zmm4 + vmovdqu64 [rcx+256], zmm0 + vmovdqu64 [rcx+320], zmm1 + vmovdqu64 [rcx+384], zmm2 + vmovdqu64 [rcx+448], zmm3 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + add rsp, 88 + ret +mlkem_tomont_x2_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +mlkem_adderr_x2_avx512 PROC + sub rsp, 72 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + mov rax, 20159 + vmovd xmm8, eax + vpbroadcastw zmm8, xmm8 + mov rax, 3329 + vmovd xmm9, eax + vpbroadcastw zmm9, xmm9 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rdx] + vmovdqu64 zmm5, [rdx+64] + vmovdqu64 zmm6, [rdx+128] + vmovdqu64 zmm7, [rdx+192] + vpaddw zmm4, zmm0, zmm4 + vpaddw zmm5, zmm1, zmm5 + vpmulhw zmm0, zmm4, zmm8 + vpmulhw zmm1, zmm5, zmm8 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm9 + vpmullw zmm1, zmm1, zmm9 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpaddw zmm6, zmm2, zmm6 + vpaddw zmm7, zmm3, zmm7 + vpmulhw zmm2, zmm6, zmm8 + vpmulhw zmm3, zmm7, zmm8 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm9 + vpmullw zmm3, zmm3, zmm9 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 zmm0, [rcx+256] + vmovdqu64 zmm1, [rcx+320] + vmovdqu64 zmm2, [rcx+384] + vmovdqu64 zmm3, [rcx+448] + vmovdqu64 zmm4, [rdx+256] + vmovdqu64 zmm5, [rdx+320] + vmovdqu64 zmm6, [rdx+384] + vmovdqu64 zmm7, [rdx+448] + vpaddw zmm4, zmm0, zmm4 + vpaddw zmm5, zmm1, zmm5 + vpmulhw zmm0, zmm4, zmm8 + vpmulhw zmm1, zmm5, zmm8 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm9 + vpmullw zmm1, zmm1, zmm9 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpaddw zmm6, zmm2, zmm6 + vpaddw zmm7, zmm3, zmm7 + vpmulhw zmm2, zmm6, zmm8 + vpmulhw zmm3, zmm7, zmm8 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm9 + vpmullw zmm3, zmm3, zmm9 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [rcx+256], zmm0 + vmovdqu64 [rcx+320], zmm1 + vmovdqu64 [rcx+384], zmm2 + vmovdqu64 [rcx+448], zmm3 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + add rsp, 72 + ret +mlkem_adderr_x2_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +mlkem_suberr_x2_avx512 PROC + sub rsp, 72 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + mov rax, 20159 + vmovd xmm8, eax + vpbroadcastw zmm8, xmm8 + mov rax, 3329 + vmovd xmm9, eax + vpbroadcastw zmm9, xmm9 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rdx] + vmovdqu64 zmm5, [rdx+64] + vmovdqu64 zmm6, [rdx+128] + vmovdqu64 zmm7, [rdx+192] + vpsubw zmm4, zmm4, zmm0 + vpsubw zmm5, zmm5, zmm1 + vpmulhw zmm0, zmm4, zmm8 + vpmulhw zmm1, zmm5, zmm8 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm9 + vpmullw zmm1, zmm1, zmm9 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpsubw zmm6, zmm6, zmm2 + vpsubw zmm7, zmm7, zmm3 + vpmulhw zmm2, zmm6, zmm8 + vpmulhw zmm3, zmm7, zmm8 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm9 + vpmullw zmm3, zmm3, zmm9 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 zmm0, [rcx+256] + vmovdqu64 zmm1, [rcx+320] + vmovdqu64 zmm2, [rcx+384] + vmovdqu64 zmm3, [rcx+448] + vmovdqu64 zmm4, [rdx+256] + vmovdqu64 zmm5, [rdx+320] + vmovdqu64 zmm6, [rdx+384] + vmovdqu64 zmm7, [rdx+448] + vpsubw zmm4, zmm4, zmm0 + vpsubw zmm5, zmm5, zmm1 + vpmulhw zmm0, zmm4, zmm8 + vpmulhw zmm1, zmm5, zmm8 + vpsraw zmm0, zmm0, 10 + vpsraw zmm1, zmm1, 10 + vpmullw zmm0, zmm0, zmm9 + vpmullw zmm1, zmm1, zmm9 + vpsubw zmm0, zmm4, zmm0 + vpsubw zmm1, zmm5, zmm1 + vpsubw zmm6, zmm6, zmm2 + vpsubw zmm7, zmm7, zmm3 + vpmulhw zmm2, zmm6, zmm8 + vpmulhw zmm3, zmm7, zmm8 + vpsraw zmm2, zmm2, 10 + vpsraw zmm3, zmm3, 10 + vpmullw zmm2, zmm2, zmm9 + vpmullw zmm3, zmm3, zmm9 + vpsubw zmm2, zmm6, zmm2 + vpsubw zmm3, zmm7, zmm3 + vmovdqu64 [rcx+256], zmm0 + vmovdqu64 [rcx+320], zmm1 + vmovdqu64 [rcx+384], zmm2 + vmovdqu64 [rcx+448], zmm3 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + add rsp, 72 + ret +mlkem_suberr_x2_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +mlkem_ptacc_x2_avx512 PROC + push r12 + sub rsp, 128 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu OWORD PTR [rsp+16], xmm7 + vmovdqu OWORD PTR [rsp+32], xmm8 + vmovdqu OWORD PTR [rsp+48], xmm9 + vmovdqu OWORD PTR [rsp+64], xmm10 + vmovdqu OWORD PTR [rsp+80], xmm11 + vmovdqu OWORD PTR [rsp+96], xmm12 + vmovdqu OWORD PTR [rsp+112], xmm13 + mov r11, 3329 + vmovd xmm12, r11d + vpbroadcastw zmm12, xmm12 + mov r11, 62209 + vmovd xmm13, r11d + vpbroadcastw zmm13, xmm13 + mov r10d, 2863311530 + kmovd k3, r10d + mov r10d, 1431655765 + kmovd k4, r10d + movsxd r12, r9d + mov rax, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [rdx] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+64], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+96], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+64], 1 + vmovdqu ymm5, YMMWORD PTR [r8+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+96], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+64], 1 + vmovdqu ymm7, YMMWORD PTR [rax+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rcx], ymm0 + vextracti64x4 YMMWORD PTR [rcx+64], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+32], ymm1 + vextracti64x4 YMMWORD PTR [rcx+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rdx+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+192], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+224], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+192], 1 + vmovdqu ymm5, YMMWORD PTR [r8+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+224], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+192], 1 + vmovdqu ymm7, YMMWORD PTR [rax+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rcx+128], ymm0 + vextracti64x4 YMMWORD PTR [rcx+192], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+160], ymm1 + vextracti64x4 YMMWORD PTR [rcx+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rdx+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+320], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+352], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+320], 1 + vmovdqu ymm5, YMMWORD PTR [r8+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+352], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+320], 1 + vmovdqu ymm7, YMMWORD PTR [rax+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rcx+256], ymm0 + vextracti64x4 YMMWORD PTR [rcx+320], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+288], ymm1 + vextracti64x4 YMMWORD PTR [rcx+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rdx+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+448], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+480], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+448], 1 + vmovdqu ymm5, YMMWORD PTR [r8+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+480], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+448], 1 + vmovdqu ymm7, YMMWORD PTR [rax+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vmovdqu YMMWORD PTR [rcx+384], ymm0 + vextracti64x4 YMMWORD PTR [rcx+448], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+416], ymm1 + vextracti64x4 YMMWORD PTR [rcx+480], zmm1, 1 + add rdx, 512 + add r8, 512 + sub r12, 2 + jz L_pointwise_acc_mont_end_test512 +L_pointwise_acc_mont_start_test512: + mov rax, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [rdx] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+64], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+96], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+64], 1 + vmovdqu ymm5, YMMWORD PTR [r8+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+96], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+64], 1 + vmovdqu ymm7, YMMWORD PTR [rax+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm8, YMMWORD PTR [rcx] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [rcx+64], 1 + vmovdqu ymm9, YMMWORD PTR [rcx+32] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [rcx+96], 1 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vmovdqu YMMWORD PTR [rcx], ymm0 + vextracti64x4 YMMWORD PTR [rcx+64], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+32], ymm1 + vextracti64x4 YMMWORD PTR [rcx+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rdx+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+192], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+224], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+192], 1 + vmovdqu ymm5, YMMWORD PTR [r8+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+224], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+192], 1 + vmovdqu ymm7, YMMWORD PTR [rax+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm8, YMMWORD PTR [rcx+128] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [rcx+192], 1 + vmovdqu ymm9, YMMWORD PTR [rcx+160] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [rcx+224], 1 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vmovdqu YMMWORD PTR [rcx+128], ymm0 + vextracti64x4 YMMWORD PTR [rcx+192], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+160], ymm1 + vextracti64x4 YMMWORD PTR [rcx+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rdx+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+320], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+352], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+320], 1 + vmovdqu ymm5, YMMWORD PTR [r8+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+352], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+320], 1 + vmovdqu ymm7, YMMWORD PTR [rax+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm8, YMMWORD PTR [rcx+256] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [rcx+320], 1 + vmovdqu ymm9, YMMWORD PTR [rcx+288] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [rcx+352], 1 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vmovdqu YMMWORD PTR [rcx+256], ymm0 + vextracti64x4 YMMWORD PTR [rcx+320], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+288], ymm1 + vextracti64x4 YMMWORD PTR [rcx+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rdx+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+448], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+480], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+448], 1 + vmovdqu ymm5, YMMWORD PTR [r8+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+480], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+448], 1 + vmovdqu ymm7, YMMWORD PTR [rax+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm8, YMMWORD PTR [rcx+384] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [rcx+448], 1 + vmovdqu ymm9, YMMWORD PTR [rcx+416] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [rcx+480], 1 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vmovdqu YMMWORD PTR [rcx+384], ymm0 + vextracti64x4 YMMWORD PTR [rcx+448], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+416], ymm1 + vextracti64x4 YMMWORD PTR [rcx+480], zmm1, 1 + add rdx, 512 + add r8, 512 + sub r12, 1 + jg L_pointwise_acc_mont_start_test512 +L_pointwise_acc_mont_end_test512: + mov rax, QWORD PTR [ptr_L_mlkem_avx512_zetas_basemul] + vmovdqu ymm2, YMMWORD PTR [rdx] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+64], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+32] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+96], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+64], 1 + vmovdqu ymm5, YMMWORD PTR [r8+32] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+96], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+64], 1 + vmovdqu ymm7, YMMWORD PTR [rax+32] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+96], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm8, YMMWORD PTR [rcx] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [rcx+64], 1 + vmovdqu ymm9, YMMWORD PTR [rcx+32] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [rcx+96], 1 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpslld zmm8, zmm1, 16 + vpsrld zmm9, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm8 + vpblendmw zmm1{k4}, zmm1, zmm9 + vmovdqu YMMWORD PTR [rcx], ymm0 + vextracti64x4 YMMWORD PTR [rcx+64], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+32], ymm1 + vextracti64x4 YMMWORD PTR [rcx+96], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rdx+128] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+192], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+160] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+224], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8+128] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+192], 1 + vmovdqu ymm5, YMMWORD PTR [r8+160] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+224], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax+128] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+192], 1 + vmovdqu ymm7, YMMWORD PTR [rax+160] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+224], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm8, YMMWORD PTR [rcx+128] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [rcx+192], 1 + vmovdqu ymm9, YMMWORD PTR [rcx+160] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [rcx+224], 1 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpslld zmm8, zmm1, 16 + vpsrld zmm9, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm8 + vpblendmw zmm1{k4}, zmm1, zmm9 + vmovdqu YMMWORD PTR [rcx+128], ymm0 + vextracti64x4 YMMWORD PTR [rcx+192], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+160], ymm1 + vextracti64x4 YMMWORD PTR [rcx+224], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rdx+256] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+320], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+288] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+352], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8+256] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+320], 1 + vmovdqu ymm5, YMMWORD PTR [r8+288] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+352], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax+256] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+320], 1 + vmovdqu ymm7, YMMWORD PTR [rax+288] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+352], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm8, YMMWORD PTR [rcx+256] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [rcx+320], 1 + vmovdqu ymm9, YMMWORD PTR [rcx+288] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [rcx+352], 1 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpslld zmm8, zmm1, 16 + vpsrld zmm9, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm8 + vpblendmw zmm1{k4}, zmm1, zmm9 + vmovdqu YMMWORD PTR [rcx+256], ymm0 + vextracti64x4 YMMWORD PTR [rcx+320], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+288], ymm1 + vextracti64x4 YMMWORD PTR [rcx+352], zmm1, 1 + vmovdqu ymm2, YMMWORD PTR [rdx+384] + vinserti64x4 zmm2, zmm2, YMMWORD PTR [rdx+448], 1 + vmovdqu ymm3, YMMWORD PTR [rdx+416] + vinserti64x4 zmm3, zmm3, YMMWORD PTR [rdx+480], 1 + vpslld zmm8, zmm3, 16 + vpsrld zmm9, zmm2, 16 + vpblendmw zmm2{k3}, zmm2, zmm8 + vpblendmw zmm3{k4}, zmm3, zmm9 + vmovdqu ymm4, YMMWORD PTR [r8+384] + vinserti64x4 zmm4, zmm4, YMMWORD PTR [r8+448], 1 + vmovdqu ymm5, YMMWORD PTR [r8+416] + vinserti64x4 zmm5, zmm5, YMMWORD PTR [r8+480], 1 + vpslld zmm8, zmm5, 16 + vpsrld zmm9, zmm4, 16 + vpblendmw zmm4{k3}, zmm4, zmm8 + vpblendmw zmm5{k4}, zmm5, zmm9 + vmovdqu ymm6, YMMWORD PTR [rax+384] + vinserti64x4 zmm6, zmm6, YMMWORD PTR [rax+448], 1 + vmovdqu ymm7, YMMWORD PTR [rax+416] + vinserti64x4 zmm7, zmm7, YMMWORD PTR [rax+480], 1 + vpmullw zmm0, zmm3, zmm5 + vpmulhw zmm8, zmm3, zmm5 + vpmullw zmm1, zmm2, zmm4 + vpmulhw zmm9, zmm2, zmm4 + vpmullw zmm10, zmm0, zmm13 + vpmullw zmm11, zmm1, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm0, zmm8, zmm10 + vpsubw zmm1, zmm9, zmm11 + vpmullw zmm8, zmm0, zmm7 + vpmulhw zmm9, zmm0, zmm6 + vpmulhw zmm8, zmm8, zmm12 + vpsubw zmm0, zmm9, zmm8 + vpaddw zmm0, zmm0, zmm1 + vpmullw zmm1, zmm2, zmm5 + vpmulhw zmm8, zmm2, zmm5 + vpmullw zmm2, zmm3, zmm4 + vpmulhw zmm9, zmm3, zmm4 + vpmullw zmm10, zmm1, zmm13 + vpmullw zmm11, zmm2, zmm13 + vpmulhw zmm10, zmm10, zmm12 + vpmulhw zmm11, zmm11, zmm12 + vpsubw zmm1, zmm8, zmm10 + vpsubw zmm2, zmm9, zmm11 + vpaddw zmm1, zmm1, zmm2 + vmovdqu ymm8, YMMWORD PTR [rcx+384] + vinserti64x4 zmm8, zmm8, YMMWORD PTR [rcx+448], 1 + vmovdqu ymm9, YMMWORD PTR [rcx+416] + vinserti64x4 zmm9, zmm9, YMMWORD PTR [rcx+480], 1 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpslld zmm8, zmm1, 16 + vpsrld zmm9, zmm0, 16 + vpblendmw zmm0{k3}, zmm0, zmm8 + vpblendmw zmm1{k4}, zmm1, zmm9 + vmovdqu YMMWORD PTR [rcx+384], ymm0 + vextracti64x4 YMMWORD PTR [rcx+448], zmm0, 1 + vmovdqu YMMWORD PTR [rcx+416], ymm1 + vextracti64x4 YMMWORD PTR [rcx+480], zmm1, 1 + add rdx, 512 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp] + vmovdqu xmm7, OWORD PTR [rsp+16] + vmovdqu xmm8, OWORD PTR [rsp+32] + vmovdqu xmm9, OWORD PTR [rsp+48] + vmovdqu xmm10, OWORD PTR [rsp+64] + vmovdqu xmm11, OWORD PTR [rsp+80] + vmovdqu xmm12, OWORD PTR [rsp+96] + vmovdqu xmm13, OWORD PTR [rsp+112] + add rsp, 128 + pop r12 + ret +mlkem_ptacc_x2_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_cbd_eta2_avx512_m55 QWORD 5555555555555555h, 5555555555555555h + QWORD 5555555555555555h, 5555555555555555h + QWORD 5555555555555555h, 5555555555555555h + QWORD 5555555555555555h, 5555555555555555h +ptr_L_mlkem_cbd_eta2_avx512_m55 QWORD L_mlkem_cbd_eta2_avx512_m55 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_cbd_eta2_avx512_m33 QWORD 3333333333333333h, 3333333333333333h + QWORD 3333333333333333h, 3333333333333333h + QWORD 3333333333333333h, 3333333333333333h + QWORD 3333333333333333h, 3333333333333333h +ptr_L_mlkem_cbd_eta2_avx512_m33 QWORD L_mlkem_cbd_eta2_avx512_m33 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_cbd_eta2_avx512_m03 QWORD 0303030303030303h, 0303030303030303h + QWORD 0303030303030303h, 0303030303030303h + QWORD 0303030303030303h, 0303030303030303h + QWORD 0303030303030303h, 0303030303030303h +ptr_L_mlkem_cbd_eta2_avx512_m03 QWORD L_mlkem_cbd_eta2_avx512_m03 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_cbd_eta2_avx512_m0f QWORD 0f0f0f0f0f0f0f0fh, 0f0f0f0f0f0f0f0fh + QWORD 0f0f0f0f0f0f0f0fh, 0f0f0f0f0f0f0f0fh + QWORD 0f0f0f0f0f0f0f0fh, 0f0f0f0f0f0f0f0fh + QWORD 0f0f0f0f0f0f0f0fh, 0f0f0f0f0f0f0f0fh +ptr_L_mlkem_cbd_eta2_avx512_m0f QWORD L_mlkem_cbd_eta2_avx512_m0f +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_cbd_eta2_avx512 PROC + sub rsp, 104 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu64 zmm0, ptr_L_mlkem_cbd_eta2_avx512_m55 + vmovdqu64 zmm1, ptr_L_mlkem_cbd_eta2_avx512_m33 + vmovdqu64 zmm2, ptr_L_mlkem_cbd_eta2_avx512_m03 + vmovdqu64 zmm3, ptr_L_mlkem_cbd_eta2_avx512_m0f + vmovdqu64 zmm4, [rdx] + vpsrlw zmm5, zmm4, 1 + vpandq zmm4, zmm4, zmm0 + vpandq zmm5, zmm5, zmm0 + vpaddb zmm4, zmm4, zmm5 + vpsrlw zmm5, zmm4, 2 + vpandq zmm4, zmm4, zmm1 + vpandq zmm5, zmm5, zmm1 + vpaddb zmm4, zmm4, zmm1 + vpsubb zmm4, zmm4, zmm5 + vpsrlw zmm5, zmm4, 4 + vpandq zmm4, zmm4, zmm3 + vpandq zmm5, zmm5, zmm3 + vpsubb zmm4, zmm4, zmm2 + vpsubb zmm5, zmm5, zmm2 + vpunpcklbw ymm6, ymm4, ymm5 + vpunpckhbw ymm7, ymm4, ymm5 + vpmovsxbw ymm10, xmm6 + vmovdqu YMMWORD PTR [rcx], ymm10 + vpmovsxbw ymm10, xmm7 + vmovdqu YMMWORD PTR [rcx+32], ymm10 + vextracti128 xmm11, ymm6, 1 + vpmovsxbw ymm10, xmm11 + vmovdqu YMMWORD PTR [rcx+64], ymm10 + vextracti128 xmm11, ymm7, 1 + vpmovsxbw ymm10, xmm11 + vmovdqu YMMWORD PTR [rcx+96], ymm10 + vextracti64x4 ymm8, zmm4, 1 + vextracti64x4 ymm9, zmm5, 1 + vpunpcklbw ymm6, ymm8, ymm9 + vpunpckhbw ymm7, ymm8, ymm9 + vpmovsxbw ymm10, xmm6 + vmovdqu YMMWORD PTR [rcx+128], ymm10 + vpmovsxbw ymm10, xmm7 + vmovdqu YMMWORD PTR [rcx+160], ymm10 + vextracti128 xmm11, ymm6, 1 + vpmovsxbw ymm10, xmm11 + vmovdqu YMMWORD PTR [rcx+192], ymm10 + vextracti128 xmm11, ymm7, 1 + vpmovsxbw ymm10, xmm11 + vmovdqu YMMWORD PTR [rcx+224], ymm10 + vmovdqu64 zmm4, [rdx+64] + vpsrlw zmm5, zmm4, 1 + vpandq zmm4, zmm4, zmm0 + vpandq zmm5, zmm5, zmm0 + vpaddb zmm4, zmm4, zmm5 + vpsrlw zmm5, zmm4, 2 + vpandq zmm4, zmm4, zmm1 + vpandq zmm5, zmm5, zmm1 + vpaddb zmm4, zmm4, zmm1 + vpsubb zmm4, zmm4, zmm5 + vpsrlw zmm5, zmm4, 4 + vpandq zmm4, zmm4, zmm3 + vpandq zmm5, zmm5, zmm3 + vpsubb zmm4, zmm4, zmm2 + vpsubb zmm5, zmm5, zmm2 + vpunpcklbw ymm6, ymm4, ymm5 + vpunpckhbw ymm7, ymm4, ymm5 + vpmovsxbw ymm10, xmm6 + vmovdqu YMMWORD PTR [rcx+256], ymm10 + vpmovsxbw ymm10, xmm7 + vmovdqu YMMWORD PTR [rcx+288], ymm10 + vextracti128 xmm11, ymm6, 1 + vpmovsxbw ymm10, xmm11 + vmovdqu YMMWORD PTR [rcx+320], ymm10 + vextracti128 xmm11, ymm7, 1 + vpmovsxbw ymm10, xmm11 + vmovdqu YMMWORD PTR [rcx+352], ymm10 + vextracti64x4 ymm8, zmm4, 1 + vextracti64x4 ymm9, zmm5, 1 + vpunpcklbw ymm6, ymm8, ymm9 + vpunpckhbw ymm7, ymm8, ymm9 + vpmovsxbw ymm10, xmm6 + vmovdqu YMMWORD PTR [rcx+384], ymm10 + vpmovsxbw ymm10, xmm7 + vmovdqu YMMWORD PTR [rcx+416], ymm10 + vextracti128 xmm11, ymm6, 1 + vpmovsxbw ymm10, xmm11 + vmovdqu YMMWORD PTR [rcx+448], ymm10 + vextracti128 xmm11, ymm7, 1 + vpmovsxbw ymm10, xmm11 + vmovdqu YMMWORD PTR [rcx+480], ymm10 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + add rsp, 104 + ret +mlkem_cbd_eta2_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_cbd_eta3_avx512_m249 QWORD 0024924900249249h, 0024924900249249h + QWORD 0024924900249249h, 0024924900249249h + QWORD 0024924900249249h, 0024924900249249h + QWORD 0024924900249249h, 0024924900249249h +ptr_L_mlkem_cbd_eta3_avx512_m249 QWORD L_mlkem_cbd_eta3_avx512_m249 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_cbd_eta3_avx512_m6db QWORD 006db6db006db6dbh, 006db6db006db6dbh + QWORD 006db6db006db6dbh, 006db6db006db6dbh + QWORD 006db6db006db6dbh, 006db6db006db6dbh + QWORD 006db6db006db6dbh, 006db6db006db6dbh +ptr_L_mlkem_cbd_eta3_avx512_m6db QWORD L_mlkem_cbd_eta3_avx512_m6db +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_cbd_eta3_avx512_m07 QWORD 0000000700000007h, 0000000700000007h + QWORD 0000000700000007h, 0000000700000007h + QWORD 0000000700000007h, 0000000700000007h + QWORD 0000000700000007h, 0000000700000007h +ptr_L_mlkem_cbd_eta3_avx512_m07 QWORD L_mlkem_cbd_eta3_avx512_m07 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_cbd_eta3_avx512_m70 QWORD 0007000000070000h, 0007000000070000h + QWORD 0007000000070000h, 0007000000070000h + QWORD 0007000000070000h, 0007000000070000h + QWORD 0007000000070000h, 0007000000070000h +ptr_L_mlkem_cbd_eta3_avx512_m70 QWORD L_mlkem_cbd_eta3_avx512_m70 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_cbd_eta3_avx512_m3 QWORD 0003000300030003h, 0003000300030003h + QWORD 0003000300030003h, 0003000300030003h + QWORD 0003000300030003h, 0003000300030003h + QWORD 0003000300030003h, 0003000300030003h +ptr_L_mlkem_cbd_eta3_avx512_m3 QWORD L_mlkem_cbd_eta3_avx512_m3 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_cbd_eta3_avx512_shuff QWORD 0ff050403ff020100h, 0ff0b0a09ff080706h + QWORD 0ff090807ff060504h, 0ff0f0e0dff0c0b0ah + QWORD 0ff050403ff020100h, 0ff0b0a09ff080706h + QWORD 0ff090807ff060504h, 0ff0f0e0dff0c0b0ah +ptr_L_mlkem_cbd_eta3_avx512_shuff QWORD L_mlkem_cbd_eta3_avx512_shuff +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_cbd_eta3_avx512 PROC + sub rsp, 136 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + vmovdqu64 zmm0, ptr_L_mlkem_cbd_eta3_avx512_m249 + vmovdqu64 zmm1, ptr_L_mlkem_cbd_eta3_avx512_m6db + vmovdqu64 zmm2, ptr_L_mlkem_cbd_eta3_avx512_m07 + vmovdqu64 zmm3, ptr_L_mlkem_cbd_eta3_avx512_m70 + vmovdqu64 zmm4, ptr_L_mlkem_cbd_eta3_avx512_m3 + vmovdqu64 zmm5, ptr_L_mlkem_cbd_eta3_avx512_shuff + vpermq ymm6, [rdx], 148 + vpermq ymm10, [rdx+24], 148 + vinserti64x4 zmm6, zmm6, ymm10, 1 + vpshufb zmm6, zmm6, zmm5 + vpsrld zmm7, zmm6, 1 + vpsrld zmm8, zmm6, 2 + vpandq zmm6, zmm6, zmm0 + vpandq zmm7, zmm7, zmm0 + vpandq zmm8, zmm8, zmm0 + vpaddd zmm6, zmm6, zmm7 + vpaddd zmm6, zmm6, zmm8 + vpsrld zmm7, zmm6, 3 + vpaddd zmm6, zmm6, zmm1 + vpsubd zmm6, zmm6, zmm7 + vpslld zmm7, zmm6, 10 + vpsrld zmm8, zmm6, 12 + vpsrld zmm9, zmm6, 2 + vpandq zmm6, zmm6, zmm2 + vpandq zmm7, zmm7, zmm3 + vpandq zmm8, zmm8, zmm2 + vpandq zmm9, zmm9, zmm3 + vpaddw zmm6, zmm6, zmm7 + vpaddw zmm7, zmm8, zmm9 + vpsubw zmm6, zmm6, zmm4 + vpsubw zmm7, zmm7, zmm4 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vperm2i128 ymm12, ymm8, ymm9, 32 + vperm2i128 ymm13, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx], ymm12 + vmovdqu YMMWORD PTR [rcx+32], ymm13 + vextracti64x4 ymm10, zmm6, 1 + vextracti64x4 ymm11, zmm7, 1 + vpunpckldq ymm8, ymm10, ymm11 + vpunpckhdq ymm9, ymm10, ymm11 + vperm2i128 ymm12, ymm8, ymm9, 32 + vperm2i128 ymm13, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx+64], ymm12 + vmovdqu YMMWORD PTR [rcx+96], ymm13 + vpermq ymm6, [rdx+48], 148 + vpermq ymm10, [rdx+72], 148 + vinserti64x4 zmm6, zmm6, ymm10, 1 + vpshufb zmm6, zmm6, zmm5 + vpsrld zmm7, zmm6, 1 + vpsrld zmm8, zmm6, 2 + vpandq zmm6, zmm6, zmm0 + vpandq zmm7, zmm7, zmm0 + vpandq zmm8, zmm8, zmm0 + vpaddd zmm6, zmm6, zmm7 + vpaddd zmm6, zmm6, zmm8 + vpsrld zmm7, zmm6, 3 + vpaddd zmm6, zmm6, zmm1 + vpsubd zmm6, zmm6, zmm7 + vpslld zmm7, zmm6, 10 + vpsrld zmm8, zmm6, 12 + vpsrld zmm9, zmm6, 2 + vpandq zmm6, zmm6, zmm2 + vpandq zmm7, zmm7, zmm3 + vpandq zmm8, zmm8, zmm2 + vpandq zmm9, zmm9, zmm3 + vpaddw zmm6, zmm6, zmm7 + vpaddw zmm7, zmm8, zmm9 + vpsubw zmm6, zmm6, zmm4 + vpsubw zmm7, zmm7, zmm4 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vperm2i128 ymm12, ymm8, ymm9, 32 + vperm2i128 ymm13, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx+128], ymm12 + vmovdqu YMMWORD PTR [rcx+160], ymm13 + vextracti64x4 ymm10, zmm6, 1 + vextracti64x4 ymm11, zmm7, 1 + vpunpckldq ymm8, ymm10, ymm11 + vpunpckhdq ymm9, ymm10, ymm11 + vperm2i128 ymm12, ymm8, ymm9, 32 + vperm2i128 ymm13, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx+192], ymm12 + vmovdqu YMMWORD PTR [rcx+224], ymm13 + vpermq ymm6, [rdx+96], 148 + vpermq ymm10, [rdx+120], 148 + vinserti64x4 zmm6, zmm6, ymm10, 1 + vpshufb zmm6, zmm6, zmm5 + vpsrld zmm7, zmm6, 1 + vpsrld zmm8, zmm6, 2 + vpandq zmm6, zmm6, zmm0 + vpandq zmm7, zmm7, zmm0 + vpandq zmm8, zmm8, zmm0 + vpaddd zmm6, zmm6, zmm7 + vpaddd zmm6, zmm6, zmm8 + vpsrld zmm7, zmm6, 3 + vpaddd zmm6, zmm6, zmm1 + vpsubd zmm6, zmm6, zmm7 + vpslld zmm7, zmm6, 10 + vpsrld zmm8, zmm6, 12 + vpsrld zmm9, zmm6, 2 + vpandq zmm6, zmm6, zmm2 + vpandq zmm7, zmm7, zmm3 + vpandq zmm8, zmm8, zmm2 + vpandq zmm9, zmm9, zmm3 + vpaddw zmm6, zmm6, zmm7 + vpaddw zmm7, zmm8, zmm9 + vpsubw zmm6, zmm6, zmm4 + vpsubw zmm7, zmm7, zmm4 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vperm2i128 ymm12, ymm8, ymm9, 32 + vperm2i128 ymm13, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx+256], ymm12 + vmovdqu YMMWORD PTR [rcx+288], ymm13 + vextracti64x4 ymm10, zmm6, 1 + vextracti64x4 ymm11, zmm7, 1 + vpunpckldq ymm8, ymm10, ymm11 + vpunpckhdq ymm9, ymm10, ymm11 + vperm2i128 ymm12, ymm8, ymm9, 32 + vperm2i128 ymm13, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx+320], ymm12 + vmovdqu YMMWORD PTR [rcx+352], ymm13 + vpermq ymm6, [rdx+144], 148 + vpermq ymm10, [rdx+168], 148 + vinserti64x4 zmm6, zmm6, ymm10, 1 + vpshufb zmm6, zmm6, zmm5 + vpsrld zmm7, zmm6, 1 + vpsrld zmm8, zmm6, 2 + vpandq zmm6, zmm6, zmm0 + vpandq zmm7, zmm7, zmm0 + vpandq zmm8, zmm8, zmm0 + vpaddd zmm6, zmm6, zmm7 + vpaddd zmm6, zmm6, zmm8 + vpsrld zmm7, zmm6, 3 + vpaddd zmm6, zmm6, zmm1 + vpsubd zmm6, zmm6, zmm7 + vpslld zmm7, zmm6, 10 + vpsrld zmm8, zmm6, 12 + vpsrld zmm9, zmm6, 2 + vpandq zmm6, zmm6, zmm2 + vpandq zmm7, zmm7, zmm3 + vpandq zmm8, zmm8, zmm2 + vpandq zmm9, zmm9, zmm3 + vpaddw zmm6, zmm6, zmm7 + vpaddw zmm7, zmm8, zmm9 + vpsubw zmm6, zmm6, zmm4 + vpsubw zmm7, zmm7, zmm4 + vpunpckldq ymm8, ymm6, ymm7 + vpunpckhdq ymm9, ymm6, ymm7 + vperm2i128 ymm12, ymm8, ymm9, 32 + vperm2i128 ymm13, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx+384], ymm12 + vmovdqu YMMWORD PTR [rcx+416], ymm13 + vextracti64x4 ymm10, zmm6, 1 + vextracti64x4 ymm11, zmm7, 1 + vpunpckldq ymm8, ymm10, ymm11 + vpunpckhdq ymm9, ymm10, ymm11 + vperm2i128 ymm12, ymm8, ymm9, 32 + vperm2i128 ymm13, ymm8, ymm9, 49 + vmovdqu YMMWORD PTR [rcx+448], ymm12 + vmovdqu YMMWORD PTR [rcx+480], ymm13 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + add rsp, 136 + ret +mlkem_cbd_eta3_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_rej_uniform_avx512_perm DWORD 00000000h, 00000001h, 00000002h, 00000000h + DWORD 00000003h, 00000004h, 00000005h, 00000000h + DWORD 00000006h, 00000007h, 00000008h, 00000000h + DWORD 00000009h, 0000000ah, 0000000bh, 00000000h +ptr_L_mlkem_rej_uniform_avx512_perm QWORD L_mlkem_rej_uniform_avx512_perm +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_rej_uniform_avx512_shuf BYTE 00h, 01h, 02h, 0ffh, 03h, 04h, 05h, 0ffh + BYTE 06h, 07h, 08h, 0ffh, 09h, 0ah, 0bh, 0ffh + BYTE 00h, 01h, 02h, 0ffh, 03h, 04h, 05h, 0ffh + BYTE 06h, 07h, 08h, 0ffh, 09h, 0ah, 0bh, 0ffh + BYTE 00h, 01h, 02h, 0ffh, 03h, 04h, 05h, 0ffh + BYTE 06h, 07h, 08h, 0ffh, 09h, 0ah, 0bh, 0ffh + BYTE 00h, 01h, 02h, 0ffh, 03h, 04h, 05h, 0ffh + BYTE 06h, 07h, 08h, 0ffh, 09h, 0ah, 0bh, 0ffh +ptr_L_mlkem_rej_uniform_avx512_shuf QWORD L_mlkem_rej_uniform_avx512_shuf +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_rej_uniform_avx512_mask DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh +ptr_L_mlkem_rej_uniform_avx512_mask QWORD L_mlkem_rej_uniform_avx512_mask +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_rej_uniform_avx512 PROC + push rbx + push r12 + sub rsp, 8 + mov eax, edx + mov r12, 3329 + vmovd xmm0, r12d + vpbroadcastw zmm0, xmm0 + vmovdqu64 zmm1, ptr_L_mlkem_rej_uniform_avx512_perm + vmovdqu64 zmm2, ptr_L_mlkem_rej_uniform_avx512_shuf + vmovdqu64 zmm3, ptr_L_mlkem_rej_uniform_avx512_mask +L_mlkem_rej_uniform_avx512_fast: + cmp edx, 32 + jl L_mlkem_rej_uniform_avx512_fast_end + cmp r9d, 64 + jl L_mlkem_rej_uniform_avx512_fast_end + vpermd zmm4, zmm1, [r8] + vpshufb zmm4, zmm4, zmm2 + vpandnq zmm5, zmm3, zmm4 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm3, zmm5, 234 + vpcmpw k1, zmm4, zmm0, 1 + vpcompressw [rcx]{k1}, zmm4 + kmovd ebx, k1 + popcnt ebx, ebx + lea rcx, QWORD PTR [rcx+2*rbx] + sub edx, ebx + add r8, 48 + sub r9d, 48 + jmp L_mlkem_rej_uniform_avx512_fast +L_mlkem_rej_uniform_avx512_fast_end: +L_mlkem_rej_uniform_avx512_tail: + cmp edx, 0 + je L_mlkem_rej_uniform_avx512_tail_end + cmp r9d, 3 + jl L_mlkem_rej_uniform_avx512_tail_end + movzx r10d, WORD PTR [r8] + and r10d, 4095 + movzx r11d, WORD PTR [r8+1] + shr r11d, 4 + cmp r10d, 3329 + jge L_mlkem_rej_uniform_avx512_skip0 + mov WORD PTR [rcx], r10w + add rcx, 2 + sub edx, 1 + je L_mlkem_rej_uniform_avx512_tail_end +L_mlkem_rej_uniform_avx512_skip0: + cmp r11d, 3329 + jge L_mlkem_rej_uniform_avx512_skip1 + mov WORD PTR [rcx], r11w + add rcx, 2 + sub edx, 1 + je L_mlkem_rej_uniform_avx512_tail_end +L_mlkem_rej_uniform_avx512_skip1: + add r8, 3 + sub r9d, 3 + jmp L_mlkem_rej_uniform_avx512_tail +L_mlkem_rej_uniform_avx512_tail_end: + sub eax, edx + vzeroupper + add rsp, 8 + pop r12 + pop rbx + ret +mlkem_rej_uniform_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_rej_uniform_n_avx512_perm DWORD 00000000h, 00000001h, 00000002h, 00000000h + DWORD 00000003h, 00000004h, 00000005h, 00000000h + DWORD 00000006h, 00000007h, 00000008h, 00000000h + DWORD 00000009h, 0000000ah, 0000000bh, 00000000h +ptr_L_mlkem_rej_uniform_n_avx512_perm QWORD L_mlkem_rej_uniform_n_avx512_perm +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_rej_uniform_n_avx512_shuf BYTE 00h, 01h, 02h, 0ffh, 03h, 04h, 05h, 0ffh + BYTE 06h, 07h, 08h, 0ffh, 09h, 0ah, 0bh, 0ffh + BYTE 00h, 01h, 02h, 0ffh, 03h, 04h, 05h, 0ffh + BYTE 06h, 07h, 08h, 0ffh, 09h, 0ah, 0bh, 0ffh + BYTE 00h, 01h, 02h, 0ffh, 03h, 04h, 05h, 0ffh + BYTE 06h, 07h, 08h, 0ffh, 09h, 0ah, 0bh, 0ffh + BYTE 00h, 01h, 02h, 0ffh, 03h, 04h, 05h, 0ffh + BYTE 06h, 07h, 08h, 0ffh, 09h, 0ah, 0bh, 0ffh +ptr_L_mlkem_rej_uniform_n_avx512_shuf QWORD L_mlkem_rej_uniform_n_avx512_shuf +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_rej_uniform_n_avx512_mask DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh +ptr_L_mlkem_rej_uniform_n_avx512_mask QWORD L_mlkem_rej_uniform_n_avx512_mask +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_rej_uniform_n_avx512 PROC + push rbx + push r12 + sub rsp, 8 + mov eax, edx + mov r12, 3329 + vmovd xmm0, r12d + vpbroadcastw zmm0, xmm0 + vmovdqu64 zmm1, ptr_L_mlkem_rej_uniform_n_avx512_perm + vmovdqu64 zmm2, ptr_L_mlkem_rej_uniform_n_avx512_shuf + vmovdqu64 zmm3, ptr_L_mlkem_rej_uniform_n_avx512_mask +L_mlkem_rej_uniform_n_avx512_fast: + cmp edx, 32 + jl L_mlkem_rej_uniform_n_avx512_fast_end + cmp r9d, 64 + jl L_mlkem_rej_uniform_n_avx512_fast_end + vpermd zmm4, zmm1, [r8] + vpshufb zmm4, zmm4, zmm2 + vpandnq zmm5, zmm3, zmm4 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm3, zmm5, 234 + vpcmpw k1, zmm4, zmm0, 1 + vpcompressw [rcx]{k1}, zmm4 + kmovd ebx, k1 + popcnt ebx, ebx + lea rcx, QWORD PTR [rcx+2*rbx] + sub edx, ebx + add r8, 48 + sub r9d, 48 + jmp L_mlkem_rej_uniform_n_avx512_fast +L_mlkem_rej_uniform_n_avx512_fast_end: +L_mlkem_rej_uniform_n_avx512_tail: + cmp edx, 0 + je L_mlkem_rej_uniform_n_avx512_tail_end + cmp r9d, 3 + jl L_mlkem_rej_uniform_n_avx512_tail_end + movzx r10d, WORD PTR [r8] + and r10d, 4095 + movzx r11d, WORD PTR [r8+1] + shr r11d, 4 + cmp r10d, 3329 + jge L_mlkem_rej_uniform_n_avx512_skip0 + mov WORD PTR [rcx], r10w + add rcx, 2 + sub edx, 1 + je L_mlkem_rej_uniform_n_avx512_tail_end +L_mlkem_rej_uniform_n_avx512_skip0: + cmp r11d, 3329 + jge L_mlkem_rej_uniform_n_avx512_skip1 + mov WORD PTR [rcx], r11w + add rcx, 2 + sub edx, 1 + je L_mlkem_rej_uniform_n_avx512_tail_end +L_mlkem_rej_uniform_n_avx512_skip1: + add r8, 3 + sub r9d, 3 + jmp L_mlkem_rej_uniform_n_avx512_tail +L_mlkem_rej_uniform_n_avx512_tail_end: + sub eax, edx + vzeroupper + add rsp, 8 + pop r12 + pop rbx + ret +mlkem_rej_uniform_n_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_8_rand_avx512_idx0 QWORD 0000000000000000h, 0000000000000004h + QWORD 0000000000000008h, 000000000000000ch + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_8_rand_avx512_idx0 QWORD L_mlkem_redistribute_8_rand_avx512_idx0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_8_rand_avx512_idx1 QWORD 0000000000000001h, 0000000000000005h + QWORD 0000000000000009h, 000000000000000dh + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_8_rand_avx512_idx1 QWORD L_mlkem_redistribute_8_rand_avx512_idx1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_8_rand_avx512_idx2 QWORD 0000000000000002h, 0000000000000006h + QWORD 000000000000000ah, 000000000000000eh + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_8_rand_avx512_idx2 QWORD L_mlkem_redistribute_8_rand_avx512_idx2 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_8_rand_avx512_idx3 QWORD 0000000000000003h, 0000000000000007h + QWORD 000000000000000bh, 000000000000000fh + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_8_rand_avx512_idx3 QWORD L_mlkem_redistribute_8_rand_avx512_idx3 +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_redistribute_8_rand_avx512 PROC + push r12 + push r13 + mov rax, QWORD PTR [rsp+56] + sub rsp, 8 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_8_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_8_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_8_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_8_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax], ymm2 + vmovdqu64 zmm0, [rcx+128] + vmovdqu64 zmm1, [rcx+192] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_8_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx+32], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_8_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8+32], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_8_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9+32], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_8_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax+32], ymm2 + vzeroupper + add rsp, 8 + pop r13 + pop r12 + ret +mlkem_redistribute_8_rand_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_16_rand_avx512_idx0 QWORD 0000000000000000h, 0000000000000004h + QWORD 0000000000000008h, 000000000000000ch + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_16_rand_avx512_idx0 QWORD L_mlkem_redistribute_16_rand_avx512_idx0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_16_rand_avx512_idx1 QWORD 0000000000000001h, 0000000000000005h + QWORD 0000000000000009h, 000000000000000dh + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_16_rand_avx512_idx1 QWORD L_mlkem_redistribute_16_rand_avx512_idx1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_16_rand_avx512_idx2 QWORD 0000000000000002h, 0000000000000006h + QWORD 000000000000000ah, 000000000000000eh + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_16_rand_avx512_idx2 QWORD L_mlkem_redistribute_16_rand_avx512_idx2 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_16_rand_avx512_idx3 QWORD 0000000000000003h, 0000000000000007h + QWORD 000000000000000bh, 000000000000000fh + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_16_rand_avx512_idx3 QWORD L_mlkem_redistribute_16_rand_avx512_idx3 +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_redistribute_16_rand_avx512 PROC + push r12 + push r13 + mov rax, QWORD PTR [rsp+56] + sub rsp, 8 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax], ymm2 + vmovdqu64 zmm0, [rcx+128] + vmovdqu64 zmm1, [rcx+192] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx+32], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8+32], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9+32], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax+32], ymm2 + vmovdqu64 zmm0, [rcx+256] + vmovdqu64 zmm1, [rcx+320] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx+64], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8+64], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9+64], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax+64], ymm2 + vmovdqu64 zmm0, [rcx+384] + vmovdqu64 zmm1, [rcx+448] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx+96], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8+96], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9+96], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_16_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax+96], ymm2 + vzeroupper + add rsp, 8 + pop r13 + pop r12 + ret +mlkem_redistribute_16_rand_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_17_rand_avx512_idx0 QWORD 0000000000000000h, 0000000000000004h + QWORD 0000000000000008h, 000000000000000ch + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_17_rand_avx512_idx0 QWORD L_mlkem_redistribute_17_rand_avx512_idx0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_17_rand_avx512_idx1 QWORD 0000000000000001h, 0000000000000005h + QWORD 0000000000000009h, 000000000000000dh + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_17_rand_avx512_idx1 QWORD L_mlkem_redistribute_17_rand_avx512_idx1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_17_rand_avx512_idx2 QWORD 0000000000000002h, 0000000000000006h + QWORD 000000000000000ah, 000000000000000eh + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_17_rand_avx512_idx2 QWORD L_mlkem_redistribute_17_rand_avx512_idx2 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_17_rand_avx512_idx3 QWORD 0000000000000003h, 0000000000000007h + QWORD 000000000000000bh, 000000000000000fh + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_17_rand_avx512_idx3 QWORD L_mlkem_redistribute_17_rand_avx512_idx3 +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_redistribute_17_rand_avx512 PROC + push r12 + push r13 + mov rax, QWORD PTR [rsp+56] + sub rsp, 8 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax], ymm2 + vmovdqu64 zmm0, [rcx+128] + vmovdqu64 zmm1, [rcx+192] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx+32], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8+32], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9+32], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax+32], ymm2 + vmovdqu64 zmm0, [rcx+256] + vmovdqu64 zmm1, [rcx+320] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx+64], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8+64], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9+64], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax+64], ymm2 + vmovdqu64 zmm0, [rcx+384] + vmovdqu64 zmm1, [rcx+448] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx+96], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8+96], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9+96], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_17_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax+96], ymm2 + mov r10, QWORD PTR [rcx+512] + mov r11, QWORD PTR [rcx+520] + mov r12, QWORD PTR [rcx+528] + mov r13, QWORD PTR [rcx+536] + mov QWORD PTR [rdx+128], r10 + mov QWORD PTR [r8+128], r11 + mov QWORD PTR [r9+128], r12 + mov QWORD PTR [rax+128], r13 + vzeroupper + add rsp, 8 + pop r13 + pop r12 + ret +mlkem_redistribute_17_rand_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_21_rand_avx512_idx0 QWORD 0000000000000000h, 0000000000000004h + QWORD 0000000000000008h, 000000000000000ch + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_21_rand_avx512_idx0 QWORD L_mlkem_redistribute_21_rand_avx512_idx0 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_21_rand_avx512_idx1 QWORD 0000000000000001h, 0000000000000005h + QWORD 0000000000000009h, 000000000000000dh + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_21_rand_avx512_idx1 QWORD L_mlkem_redistribute_21_rand_avx512_idx1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_21_rand_avx512_idx2 QWORD 0000000000000002h, 0000000000000006h + QWORD 000000000000000ah, 000000000000000eh + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_21_rand_avx512_idx2 QWORD L_mlkem_redistribute_21_rand_avx512_idx2 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_redistribute_21_rand_avx512_idx3 QWORD 0000000000000003h, 0000000000000007h + QWORD 000000000000000bh, 000000000000000fh + QWORD 0000000000000000h, 0000000000000000h + QWORD 0000000000000000h, 0000000000000000h +ptr_L_mlkem_redistribute_21_rand_avx512_idx3 QWORD L_mlkem_redistribute_21_rand_avx512_idx3 +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_redistribute_21_rand_avx512 PROC + push r12 + push r13 + mov rax, QWORD PTR [rsp+56] + sub rsp, 8 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax], ymm2 + vmovdqu64 zmm0, [rcx+128] + vmovdqu64 zmm1, [rcx+192] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx+32], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8+32], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9+32], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax+32], ymm2 + vmovdqu64 zmm0, [rcx+256] + vmovdqu64 zmm1, [rcx+320] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx+64], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8+64], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9+64], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax+64], ymm2 + vmovdqu64 zmm0, [rcx+384] + vmovdqu64 zmm1, [rcx+448] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx+96], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8+96], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9+96], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax+96], ymm2 + vmovdqu64 zmm0, [rcx+512] + vmovdqu64 zmm1, [rcx+576] + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx0 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rdx+128], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx1 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r8+128], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx2 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [r9+128], ymm2 + vmovdqu64 zmm2, ptr_L_mlkem_redistribute_21_rand_avx512_idx3 + vpermi2q zmm2, zmm0, zmm1 + vmovdqu YMMWORD PTR [rax+128], ymm2 + mov r10, QWORD PTR [rcx+640] + mov r11, QWORD PTR [rcx+648] + mov r12, QWORD PTR [rcx+656] + mov r13, QWORD PTR [rcx+664] + mov QWORD PTR [rdx+160], r10 + mov QWORD PTR [r8+160], r11 + mov QWORD PTR [r9+160], r12 + mov QWORD PTR [rax+160], r13 + vzeroupper + add rsp, 8 + pop r13 + pop r12 + ret +mlkem_redistribute_21_rand_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +mlkem_redistribute_8_rand_x8_avx512 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + sub rsp, 160 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu OWORD PTR [rsp+16], xmm7 + vmovdqu OWORD PTR [rsp+32], xmm8 + vmovdqu OWORD PTR [rsp+48], xmm9 + vmovdqu OWORD PTR [rsp+64], xmm10 + vmovdqu OWORD PTR [rsp+80], xmm11 + vmovdqu OWORD PTR [rsp+96], xmm12 + vmovdqu OWORD PTR [rsp+112], xmm13 + vmovdqu OWORD PTR [rsp+128], xmm14 + vmovdqu OWORD PTR [rsp+144], xmm15 + mov r15d, r8d + mov rax, rdx + add rax, r15 + mov r9, rax + add r9, r15 + mov r10, r9 + add r10, r15 + mov r11, r10 + add r11, r15 + mov r12, r11 + add r12, r15 + mov r13, r12 + add r13, r15 + mov r14, r13 + add r14, r15 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vpunpcklqdq zmm8, zmm0, zmm1 + vpunpckhqdq zmm9, zmm0, zmm1 + vpunpcklqdq zmm10, zmm2, zmm3 + vpunpckhqdq zmm11, zmm2, zmm3 + vpunpcklqdq zmm12, zmm4, zmm5 + vpunpckhqdq zmm13, zmm4, zmm5 + vpunpcklqdq zmm14, zmm6, zmm7 + vpunpckhqdq zmm15, zmm6, zmm7 + vshufi64x2 zmm16, zmm8, zmm10, 136 + vshufi64x2 zmm17, zmm9, zmm11, 136 + vshufi64x2 zmm18, zmm8, zmm10, 221 + vshufi64x2 zmm19, zmm9, zmm11, 221 + vshufi64x2 zmm20, zmm12, zmm14, 136 + vshufi64x2 zmm21, zmm13, zmm15, 136 + vshufi64x2 zmm22, zmm12, zmm14, 221 + vshufi64x2 zmm23, zmm13, zmm15, 221 + vshufi64x2 zmm0, zmm16, zmm20, 136 + vshufi64x2 zmm4, zmm16, zmm20, 221 + vshufi64x2 zmm1, zmm17, zmm21, 136 + vshufi64x2 zmm5, zmm17, zmm21, 221 + vshufi64x2 zmm2, zmm18, zmm22, 136 + vshufi64x2 zmm6, zmm18, zmm22, 221 + vshufi64x2 zmm3, zmm19, zmm23, 136 + vshufi64x2 zmm7, zmm19, zmm23, 221 + vmovdqu64 [rdx], zmm0 + vmovdqu64 [rax], zmm1 + vmovdqu64 [r9], zmm2 + vmovdqu64 [r10], zmm3 + vmovdqu64 [r11], zmm4 + vmovdqu64 [r12], zmm5 + vmovdqu64 [r13], zmm6 + vmovdqu64 [r14], zmm7 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp] + vmovdqu xmm7, OWORD PTR [rsp+16] + vmovdqu xmm8, OWORD PTR [rsp+32] + vmovdqu xmm9, OWORD PTR [rsp+48] + vmovdqu xmm10, OWORD PTR [rsp+64] + vmovdqu xmm11, OWORD PTR [rsp+80] + vmovdqu xmm12, OWORD PTR [rsp+96] + vmovdqu xmm13, OWORD PTR [rsp+112] + vmovdqu xmm14, OWORD PTR [rsp+128] + vmovdqu xmm15, OWORD PTR [rsp+144] + add rsp, 160 + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + ret +mlkem_redistribute_8_rand_x8_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +mlkem_redistribute_16_rand_x8_avx512 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + sub rsp, 160 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu OWORD PTR [rsp+16], xmm7 + vmovdqu OWORD PTR [rsp+32], xmm8 + vmovdqu OWORD PTR [rsp+48], xmm9 + vmovdqu OWORD PTR [rsp+64], xmm10 + vmovdqu OWORD PTR [rsp+80], xmm11 + vmovdqu OWORD PTR [rsp+96], xmm12 + vmovdqu OWORD PTR [rsp+112], xmm13 + vmovdqu OWORD PTR [rsp+128], xmm14 + vmovdqu OWORD PTR [rsp+144], xmm15 + mov r15d, r8d + mov rax, rdx + add rax, r15 + mov r9, rax + add r9, r15 + mov r10, r9 + add r10, r15 + mov r11, r10 + add r11, r15 + mov r12, r11 + add r12, r15 + mov r13, r12 + add r13, r15 + mov r14, r13 + add r14, r15 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vpunpcklqdq zmm8, zmm0, zmm1 + vpunpckhqdq zmm9, zmm0, zmm1 + vpunpcklqdq zmm10, zmm2, zmm3 + vpunpckhqdq zmm11, zmm2, zmm3 + vpunpcklqdq zmm12, zmm4, zmm5 + vpunpckhqdq zmm13, zmm4, zmm5 + vpunpcklqdq zmm14, zmm6, zmm7 + vpunpckhqdq zmm15, zmm6, zmm7 + vshufi64x2 zmm16, zmm8, zmm10, 136 + vshufi64x2 zmm17, zmm9, zmm11, 136 + vshufi64x2 zmm18, zmm8, zmm10, 221 + vshufi64x2 zmm19, zmm9, zmm11, 221 + vshufi64x2 zmm20, zmm12, zmm14, 136 + vshufi64x2 zmm21, zmm13, zmm15, 136 + vshufi64x2 zmm22, zmm12, zmm14, 221 + vshufi64x2 zmm23, zmm13, zmm15, 221 + vshufi64x2 zmm0, zmm16, zmm20, 136 + vshufi64x2 zmm4, zmm16, zmm20, 221 + vshufi64x2 zmm1, zmm17, zmm21, 136 + vshufi64x2 zmm5, zmm17, zmm21, 221 + vshufi64x2 zmm2, zmm18, zmm22, 136 + vshufi64x2 zmm6, zmm18, zmm22, 221 + vshufi64x2 zmm3, zmm19, zmm23, 136 + vshufi64x2 zmm7, zmm19, zmm23, 221 + vmovdqu64 [rdx], zmm0 + vmovdqu64 [rax], zmm1 + vmovdqu64 [r9], zmm2 + vmovdqu64 [r10], zmm3 + vmovdqu64 [r11], zmm4 + vmovdqu64 [r12], zmm5 + vmovdqu64 [r13], zmm6 + vmovdqu64 [r14], zmm7 + vmovdqu64 zmm0, [rcx+512] + vmovdqu64 zmm1, [rcx+576] + vmovdqu64 zmm2, [rcx+640] + vmovdqu64 zmm3, [rcx+704] + vmovdqu64 zmm4, [rcx+768] + vmovdqu64 zmm5, [rcx+832] + vmovdqu64 zmm6, [rcx+896] + vmovdqu64 zmm7, [rcx+960] + vpunpcklqdq zmm8, zmm0, zmm1 + vpunpckhqdq zmm9, zmm0, zmm1 + vpunpcklqdq zmm10, zmm2, zmm3 + vpunpckhqdq zmm11, zmm2, zmm3 + vpunpcklqdq zmm12, zmm4, zmm5 + vpunpckhqdq zmm13, zmm4, zmm5 + vpunpcklqdq zmm14, zmm6, zmm7 + vpunpckhqdq zmm15, zmm6, zmm7 + vshufi64x2 zmm16, zmm8, zmm10, 136 + vshufi64x2 zmm17, zmm9, zmm11, 136 + vshufi64x2 zmm18, zmm8, zmm10, 221 + vshufi64x2 zmm19, zmm9, zmm11, 221 + vshufi64x2 zmm20, zmm12, zmm14, 136 + vshufi64x2 zmm21, zmm13, zmm15, 136 + vshufi64x2 zmm22, zmm12, zmm14, 221 + vshufi64x2 zmm23, zmm13, zmm15, 221 + vshufi64x2 zmm0, zmm16, zmm20, 136 + vshufi64x2 zmm4, zmm16, zmm20, 221 + vshufi64x2 zmm1, zmm17, zmm21, 136 + vshufi64x2 zmm5, zmm17, zmm21, 221 + vshufi64x2 zmm2, zmm18, zmm22, 136 + vshufi64x2 zmm6, zmm18, zmm22, 221 + vshufi64x2 zmm3, zmm19, zmm23, 136 + vshufi64x2 zmm7, zmm19, zmm23, 221 + vmovdqu64 [rdx+64], zmm0 + vmovdqu64 [rax+64], zmm1 + vmovdqu64 [r9+64], zmm2 + vmovdqu64 [r10+64], zmm3 + vmovdqu64 [r11+64], zmm4 + vmovdqu64 [r12+64], zmm5 + vmovdqu64 [r13+64], zmm6 + vmovdqu64 [r14+64], zmm7 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp] + vmovdqu xmm7, OWORD PTR [rsp+16] + vmovdqu xmm8, OWORD PTR [rsp+32] + vmovdqu xmm9, OWORD PTR [rsp+48] + vmovdqu xmm10, OWORD PTR [rsp+64] + vmovdqu xmm11, OWORD PTR [rsp+80] + vmovdqu xmm12, OWORD PTR [rsp+96] + vmovdqu xmm13, OWORD PTR [rsp+112] + vmovdqu xmm14, OWORD PTR [rsp+128] + vmovdqu xmm15, OWORD PTR [rsp+144] + add rsp, 160 + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + ret +mlkem_redistribute_16_rand_x8_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +mlkem_redistribute_17_rand_x8_avx512 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + sub rsp, 160 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu OWORD PTR [rsp+16], xmm7 + vmovdqu OWORD PTR [rsp+32], xmm8 + vmovdqu OWORD PTR [rsp+48], xmm9 + vmovdqu OWORD PTR [rsp+64], xmm10 + vmovdqu OWORD PTR [rsp+80], xmm11 + vmovdqu OWORD PTR [rsp+96], xmm12 + vmovdqu OWORD PTR [rsp+112], xmm13 + vmovdqu OWORD PTR [rsp+128], xmm14 + vmovdqu OWORD PTR [rsp+144], xmm15 + mov r15d, r8d + mov rax, rdx + add rax, r15 + mov r9, rax + add r9, r15 + mov r10, r9 + add r10, r15 + mov r11, r10 + add r11, r15 + mov r12, r11 + add r12, r15 + mov r13, r12 + add r13, r15 + mov r14, r13 + add r14, r15 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vpunpcklqdq zmm8, zmm0, zmm1 + vpunpckhqdq zmm9, zmm0, zmm1 + vpunpcklqdq zmm10, zmm2, zmm3 + vpunpckhqdq zmm11, zmm2, zmm3 + vpunpcklqdq zmm12, zmm4, zmm5 + vpunpckhqdq zmm13, zmm4, zmm5 + vpunpcklqdq zmm14, zmm6, zmm7 + vpunpckhqdq zmm15, zmm6, zmm7 + vshufi64x2 zmm16, zmm8, zmm10, 136 + vshufi64x2 zmm17, zmm9, zmm11, 136 + vshufi64x2 zmm18, zmm8, zmm10, 221 + vshufi64x2 zmm19, zmm9, zmm11, 221 + vshufi64x2 zmm20, zmm12, zmm14, 136 + vshufi64x2 zmm21, zmm13, zmm15, 136 + vshufi64x2 zmm22, zmm12, zmm14, 221 + vshufi64x2 zmm23, zmm13, zmm15, 221 + vshufi64x2 zmm0, zmm16, zmm20, 136 + vshufi64x2 zmm4, zmm16, zmm20, 221 + vshufi64x2 zmm1, zmm17, zmm21, 136 + vshufi64x2 zmm5, zmm17, zmm21, 221 + vshufi64x2 zmm2, zmm18, zmm22, 136 + vshufi64x2 zmm6, zmm18, zmm22, 221 + vshufi64x2 zmm3, zmm19, zmm23, 136 + vshufi64x2 zmm7, zmm19, zmm23, 221 + vmovdqu64 [rdx], zmm0 + vmovdqu64 [rax], zmm1 + vmovdqu64 [r9], zmm2 + vmovdqu64 [r10], zmm3 + vmovdqu64 [r11], zmm4 + vmovdqu64 [r12], zmm5 + vmovdqu64 [r13], zmm6 + vmovdqu64 [r14], zmm7 + vmovdqu64 zmm0, [rcx+512] + vmovdqu64 zmm1, [rcx+576] + vmovdqu64 zmm2, [rcx+640] + vmovdqu64 zmm3, [rcx+704] + vmovdqu64 zmm4, [rcx+768] + vmovdqu64 zmm5, [rcx+832] + vmovdqu64 zmm6, [rcx+896] + vmovdqu64 zmm7, [rcx+960] + vpunpcklqdq zmm8, zmm0, zmm1 + vpunpckhqdq zmm9, zmm0, zmm1 + vpunpcklqdq zmm10, zmm2, zmm3 + vpunpckhqdq zmm11, zmm2, zmm3 + vpunpcklqdq zmm12, zmm4, zmm5 + vpunpckhqdq zmm13, zmm4, zmm5 + vpunpcklqdq zmm14, zmm6, zmm7 + vpunpckhqdq zmm15, zmm6, zmm7 + vshufi64x2 zmm16, zmm8, zmm10, 136 + vshufi64x2 zmm17, zmm9, zmm11, 136 + vshufi64x2 zmm18, zmm8, zmm10, 221 + vshufi64x2 zmm19, zmm9, zmm11, 221 + vshufi64x2 zmm20, zmm12, zmm14, 136 + vshufi64x2 zmm21, zmm13, zmm15, 136 + vshufi64x2 zmm22, zmm12, zmm14, 221 + vshufi64x2 zmm23, zmm13, zmm15, 221 + vshufi64x2 zmm0, zmm16, zmm20, 136 + vshufi64x2 zmm4, zmm16, zmm20, 221 + vshufi64x2 zmm1, zmm17, zmm21, 136 + vshufi64x2 zmm5, zmm17, zmm21, 221 + vshufi64x2 zmm2, zmm18, zmm22, 136 + vshufi64x2 zmm6, zmm18, zmm22, 221 + vshufi64x2 zmm3, zmm19, zmm23, 136 + vshufi64x2 zmm7, zmm19, zmm23, 221 + vmovdqu64 [rdx+64], zmm0 + vmovdqu64 [rax+64], zmm1 + vmovdqu64 [r9+64], zmm2 + vmovdqu64 [r10+64], zmm3 + vmovdqu64 [r11+64], zmm4 + vmovdqu64 [r12+64], zmm5 + vmovdqu64 [r13+64], zmm6 + vmovdqu64 [r14+64], zmm7 + mov rdi, QWORD PTR [rcx+1024] + mov QWORD PTR [rdx+128], rdi + mov rdi, QWORD PTR [rcx+1032] + mov QWORD PTR [rax+128], rdi + mov rdi, QWORD PTR [rcx+1040] + mov QWORD PTR [r9+128], rdi + mov rdi, QWORD PTR [rcx+1048] + mov QWORD PTR [r10+128], rdi + mov rdi, QWORD PTR [rcx+1056] + mov QWORD PTR [r11+128], rdi + mov rdi, QWORD PTR [rcx+1064] + mov QWORD PTR [r12+128], rdi + mov rdi, QWORD PTR [rcx+1072] + mov QWORD PTR [r13+128], rdi + mov rdi, QWORD PTR [rcx+1080] + mov QWORD PTR [r14+128], rdi + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp] + vmovdqu xmm7, OWORD PTR [rsp+16] + vmovdqu xmm8, OWORD PTR [rsp+32] + vmovdqu xmm9, OWORD PTR [rsp+48] + vmovdqu xmm10, OWORD PTR [rsp+64] + vmovdqu xmm11, OWORD PTR [rsp+80] + vmovdqu xmm12, OWORD PTR [rsp+96] + vmovdqu xmm13, OWORD PTR [rsp+112] + vmovdqu xmm14, OWORD PTR [rsp+128] + vmovdqu xmm15, OWORD PTR [rsp+144] + add rsp, 160 + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + ret +mlkem_redistribute_17_rand_x8_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +mlkem_redistribute_21_rand_x8_avx512 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + sub rsp, 160 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu OWORD PTR [rsp+16], xmm7 + vmovdqu OWORD PTR [rsp+32], xmm8 + vmovdqu OWORD PTR [rsp+48], xmm9 + vmovdqu OWORD PTR [rsp+64], xmm10 + vmovdqu OWORD PTR [rsp+80], xmm11 + vmovdqu OWORD PTR [rsp+96], xmm12 + vmovdqu OWORD PTR [rsp+112], xmm13 + vmovdqu OWORD PTR [rsp+128], xmm14 + vmovdqu OWORD PTR [rsp+144], xmm15 + mov r15d, r8d + mov rax, rdx + add rax, r15 + mov r9, rax + add r9, r15 + mov r10, r9 + add r10, r15 + mov r11, r10 + add r11, r15 + mov r12, r11 + add r12, r15 + mov r13, r12 + add r13, r15 + mov r14, r13 + add r14, r15 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vpunpcklqdq zmm8, zmm0, zmm1 + vpunpckhqdq zmm9, zmm0, zmm1 + vpunpcklqdq zmm10, zmm2, zmm3 + vpunpckhqdq zmm11, zmm2, zmm3 + vpunpcklqdq zmm12, zmm4, zmm5 + vpunpckhqdq zmm13, zmm4, zmm5 + vpunpcklqdq zmm14, zmm6, zmm7 + vpunpckhqdq zmm15, zmm6, zmm7 + vshufi64x2 zmm16, zmm8, zmm10, 136 + vshufi64x2 zmm17, zmm9, zmm11, 136 + vshufi64x2 zmm18, zmm8, zmm10, 221 + vshufi64x2 zmm19, zmm9, zmm11, 221 + vshufi64x2 zmm20, zmm12, zmm14, 136 + vshufi64x2 zmm21, zmm13, zmm15, 136 + vshufi64x2 zmm22, zmm12, zmm14, 221 + vshufi64x2 zmm23, zmm13, zmm15, 221 + vshufi64x2 zmm0, zmm16, zmm20, 136 + vshufi64x2 zmm4, zmm16, zmm20, 221 + vshufi64x2 zmm1, zmm17, zmm21, 136 + vshufi64x2 zmm5, zmm17, zmm21, 221 + vshufi64x2 zmm2, zmm18, zmm22, 136 + vshufi64x2 zmm6, zmm18, zmm22, 221 + vshufi64x2 zmm3, zmm19, zmm23, 136 + vshufi64x2 zmm7, zmm19, zmm23, 221 + vmovdqu64 [rdx], zmm0 + vmovdqu64 [rax], zmm1 + vmovdqu64 [r9], zmm2 + vmovdqu64 [r10], zmm3 + vmovdqu64 [r11], zmm4 + vmovdqu64 [r12], zmm5 + vmovdqu64 [r13], zmm6 + vmovdqu64 [r14], zmm7 + vmovdqu64 zmm0, [rcx+512] + vmovdqu64 zmm1, [rcx+576] + vmovdqu64 zmm2, [rcx+640] + vmovdqu64 zmm3, [rcx+704] + vmovdqu64 zmm4, [rcx+768] + vmovdqu64 zmm5, [rcx+832] + vmovdqu64 zmm6, [rcx+896] + vmovdqu64 zmm7, [rcx+960] + vpunpcklqdq zmm8, zmm0, zmm1 + vpunpckhqdq zmm9, zmm0, zmm1 + vpunpcklqdq zmm10, zmm2, zmm3 + vpunpckhqdq zmm11, zmm2, zmm3 + vpunpcklqdq zmm12, zmm4, zmm5 + vpunpckhqdq zmm13, zmm4, zmm5 + vpunpcklqdq zmm14, zmm6, zmm7 + vpunpckhqdq zmm15, zmm6, zmm7 + vshufi64x2 zmm16, zmm8, zmm10, 136 + vshufi64x2 zmm17, zmm9, zmm11, 136 + vshufi64x2 zmm18, zmm8, zmm10, 221 + vshufi64x2 zmm19, zmm9, zmm11, 221 + vshufi64x2 zmm20, zmm12, zmm14, 136 + vshufi64x2 zmm21, zmm13, zmm15, 136 + vshufi64x2 zmm22, zmm12, zmm14, 221 + vshufi64x2 zmm23, zmm13, zmm15, 221 + vshufi64x2 zmm0, zmm16, zmm20, 136 + vshufi64x2 zmm4, zmm16, zmm20, 221 + vshufi64x2 zmm1, zmm17, zmm21, 136 + vshufi64x2 zmm5, zmm17, zmm21, 221 + vshufi64x2 zmm2, zmm18, zmm22, 136 + vshufi64x2 zmm6, zmm18, zmm22, 221 + vshufi64x2 zmm3, zmm19, zmm23, 136 + vshufi64x2 zmm7, zmm19, zmm23, 221 + vmovdqu64 [rdx+64], zmm0 + vmovdqu64 [rax+64], zmm1 + vmovdqu64 [r9+64], zmm2 + vmovdqu64 [r10+64], zmm3 + vmovdqu64 [r11+64], zmm4 + vmovdqu64 [r12+64], zmm5 + vmovdqu64 [r13+64], zmm6 + vmovdqu64 [r14+64], zmm7 + mov rdi, QWORD PTR [rcx+1024] + mov QWORD PTR [rdx+128], rdi + mov rdi, QWORD PTR [rcx+1032] + mov QWORD PTR [rax+128], rdi + mov rdi, QWORD PTR [rcx+1040] + mov QWORD PTR [r9+128], rdi + mov rdi, QWORD PTR [rcx+1048] + mov QWORD PTR [r10+128], rdi + mov rdi, QWORD PTR [rcx+1056] + mov QWORD PTR [r11+128], rdi + mov rdi, QWORD PTR [rcx+1064] + mov QWORD PTR [r12+128], rdi + mov rdi, QWORD PTR [rcx+1072] + mov QWORD PTR [r13+128], rdi + mov rdi, QWORD PTR [rcx+1080] + mov QWORD PTR [r14+128], rdi + mov rdi, QWORD PTR [rcx+1088] + mov QWORD PTR [rdx+136], rdi + mov rdi, QWORD PTR [rcx+1096] + mov QWORD PTR [rax+136], rdi + mov rdi, QWORD PTR [rcx+1104] + mov QWORD PTR [r9+136], rdi + mov rdi, QWORD PTR [rcx+1112] + mov QWORD PTR [r10+136], rdi + mov rdi, QWORD PTR [rcx+1120] + mov QWORD PTR [r11+136], rdi + mov rdi, QWORD PTR [rcx+1128] + mov QWORD PTR [r12+136], rdi + mov rdi, QWORD PTR [rcx+1136] + mov QWORD PTR [r13+136], rdi + mov rdi, QWORD PTR [rcx+1144] + mov QWORD PTR [r14+136], rdi + mov rdi, QWORD PTR [rcx+1152] + mov QWORD PTR [rdx+144], rdi + mov rdi, QWORD PTR [rcx+1160] + mov QWORD PTR [rax+144], rdi + mov rdi, QWORD PTR [rcx+1168] + mov QWORD PTR [r9+144], rdi + mov rdi, QWORD PTR [rcx+1176] + mov QWORD PTR [r10+144], rdi + mov rdi, QWORD PTR [rcx+1184] + mov QWORD PTR [r11+144], rdi + mov rdi, QWORD PTR [rcx+1192] + mov QWORD PTR [r12+144], rdi + mov rdi, QWORD PTR [rcx+1200] + mov QWORD PTR [r13+144], rdi + mov rdi, QWORD PTR [rcx+1208] + mov QWORD PTR [r14+144], rdi + mov rdi, QWORD PTR [rcx+1216] + mov QWORD PTR [rdx+152], rdi + mov rdi, QWORD PTR [rcx+1224] + mov QWORD PTR [rax+152], rdi + mov rdi, QWORD PTR [rcx+1232] + mov QWORD PTR [r9+152], rdi + mov rdi, QWORD PTR [rcx+1240] + mov QWORD PTR [r10+152], rdi + mov rdi, QWORD PTR [rcx+1248] + mov QWORD PTR [r11+152], rdi + mov rdi, QWORD PTR [rcx+1256] + mov QWORD PTR [r12+152], rdi + mov rdi, QWORD PTR [rcx+1264] + mov QWORD PTR [r13+152], rdi + mov rdi, QWORD PTR [rcx+1272] + mov QWORD PTR [r14+152], rdi + mov rdi, QWORD PTR [rcx+1280] + mov QWORD PTR [rdx+160], rdi + mov rdi, QWORD PTR [rcx+1288] + mov QWORD PTR [rax+160], rdi + mov rdi, QWORD PTR [rcx+1296] + mov QWORD PTR [r9+160], rdi + mov rdi, QWORD PTR [rcx+1304] + mov QWORD PTR [r10+160], rdi + mov rdi, QWORD PTR [rcx+1312] + mov QWORD PTR [r11+160], rdi + mov rdi, QWORD PTR [rcx+1320] + mov QWORD PTR [r12+160], rdi + mov rdi, QWORD PTR [rcx+1328] + mov QWORD PTR [r13+160], rdi + mov rdi, QWORD PTR [rcx+1336] + mov QWORD PTR [r14+160], rdi + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp] + vmovdqu xmm7, OWORD PTR [rsp+16] + vmovdqu xmm8, OWORD PTR [rsp+32] + vmovdqu xmm9, OWORD PTR [rsp+48] + vmovdqu xmm10, OWORD PTR [rsp+64] + vmovdqu xmm11, OWORD PTR [rsp+80] + vmovdqu xmm12, OWORD PTR [rsp+96] + vmovdqu xmm13, OWORD PTR [rsp+112] + vmovdqu xmm14, OWORD PTR [rsp+128] + vmovdqu xmm15, OWORD PTR [rsp+144] + add rsp, 160 + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + ret +mlkem_redistribute_21_rand_x8_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +mlkem_csubq_avx512 PROC + sub rsp, 120 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + mov rdx, 3329 + vmovd xmm12, edx + vpbroadcastw zmm12, xmm12 + vmovdqu64 zmm0, [rcx] + vmovdqu64 zmm1, [rcx+64] + vmovdqu64 zmm2, [rcx+128] + vmovdqu64 zmm3, [rcx+192] + vmovdqu64 zmm4, [rcx+256] + vmovdqu64 zmm5, [rcx+320] + vmovdqu64 zmm6, [rcx+384] + vmovdqu64 zmm7, [rcx+448] + vpsubw zmm8, zmm0, zmm12 + vpsubw zmm9, zmm1, zmm12 + vpsubw zmm10, zmm2, zmm12 + vpsubw zmm11, zmm3, zmm12 + vpsraw zmm0, zmm8, 15 + vpsraw zmm1, zmm9, 15 + vpsraw zmm2, zmm10, 15 + vpsraw zmm3, zmm11, 15 + vpandq zmm0, zmm0, zmm12 + vpandq zmm1, zmm1, zmm12 + vpandq zmm2, zmm2, zmm12 + vpandq zmm3, zmm3, zmm12 + vpaddw zmm0, zmm0, zmm8 + vpaddw zmm1, zmm1, zmm9 + vpaddw zmm2, zmm2, zmm10 + vpaddw zmm3, zmm3, zmm11 + vpsubw zmm8, zmm4, zmm12 + vpsubw zmm9, zmm5, zmm12 + vpsubw zmm10, zmm6, zmm12 + vpsubw zmm11, zmm7, zmm12 + vpsraw zmm4, zmm8, 15 + vpsraw zmm5, zmm9, 15 + vpsraw zmm6, zmm10, 15 + vpsraw zmm7, zmm11, 15 + vpandq zmm4, zmm4, zmm12 + vpandq zmm5, zmm5, zmm12 + vpandq zmm6, zmm6, zmm12 + vpandq zmm7, zmm7, zmm12 + vpaddw zmm4, zmm4, zmm8 + vpaddw zmm5, zmm5, zmm9 + vpaddw zmm6, zmm6, zmm10 + vpaddw zmm7, zmm7, zmm11 + vmovdqu64 [rcx], zmm0 + vmovdqu64 [rcx+64], zmm1 + vmovdqu64 [rcx+128], zmm2 + vmovdqu64 [rcx+192], zmm3 + vmovdqu64 [rcx+256], zmm4 + vmovdqu64 [rcx+320], zmm5 + vmovdqu64 [rcx+384], zmm6 + vmovdqu64 [rcx+448], zmm7 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + add rsp, 120 + ret +mlkem_csubq_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +mlkem_cmp_avx512 PROC + sub rsp, 8 + vpxorq zmm0, zmm0, zmm0 + vpxor ymm2, ymm2, ymm2 + mov r9d, 0 + mov r10d, -1 + vmovdqu64 zmm1, [rcx] + vpternlogd zmm0, zmm1, [rdx], 246 + vmovdqu64 zmm1, [rcx+64] + vpternlogd zmm0, zmm1, [rdx+64], 246 + vmovdqu64 zmm1, [rcx+128] + vpternlogd zmm0, zmm1, [rdx+128], 246 + vmovdqu64 zmm1, [rcx+192] + vpternlogd zmm0, zmm1, [rdx+192], 246 + vmovdqu64 zmm1, [rcx+256] + vpternlogd zmm0, zmm1, [rdx+256], 246 + vmovdqu64 zmm1, [rcx+320] + vpternlogd zmm0, zmm1, [rdx+320], 246 + vmovdqu64 zmm1, [rcx+384] + vpternlogd zmm0, zmm1, [rdx+384], 246 + vmovdqu64 zmm1, [rcx+448] + vpternlogd zmm0, zmm1, [rdx+448], 246 + vmovdqu64 zmm1, [rcx+512] + vpternlogd zmm0, zmm1, [rdx+512], 246 + vmovdqu64 zmm1, [rcx+576] + vpternlogd zmm0, zmm1, [rdx+576], 246 + vmovdqu64 zmm1, [rcx+640] + vpternlogd zmm0, zmm1, [rdx+640], 246 + vmovdqu64 zmm1, [rcx+704] + vpternlogd zmm0, zmm1, [rdx+704], 246 + sub r8d, 768 + jz L_mlkem_cmp_avx512_done + vmovdqu64 zmm1, [rcx+768] + vpternlogd zmm0, zmm1, [rdx+768], 246 + vmovdqu64 zmm1, [rcx+832] + vpternlogd zmm0, zmm1, [rdx+832], 246 + vmovdqu64 zmm1, [rcx+896] + vpternlogd zmm0, zmm1, [rdx+896], 246 + vmovdqu64 zmm1, [rcx+960] + vpternlogd zmm0, zmm1, [rdx+960], 246 + vmovdqu64 zmm1, [rcx+1024] + vpternlogd zmm0, zmm1, [rdx+1024], 246 + sub r8d, 320 + jz L_mlkem_cmp_avx512_done + vmovdqu64 zmm1, [rcx+1088] + vpternlogd zmm0, zmm1, [rdx+1088], 246 + vmovdqu64 zmm1, [rcx+1152] + vpternlogd zmm0, zmm1, [rdx+1152], 246 + vmovdqu64 zmm1, [rcx+1216] + vpternlogd zmm0, zmm1, [rdx+1216], 246 + vmovdqu64 zmm1, [rcx+1280] + vpternlogd zmm0, zmm1, [rdx+1280], 246 + vmovdqu64 zmm1, [rcx+1344] + vpternlogd zmm0, zmm1, [rdx+1344], 246 + vmovdqu64 zmm1, [rcx+1408] + vpternlogd zmm0, zmm1, [rdx+1408], 246 + vmovdqu64 zmm1, [rcx+1472] + vpternlogd zmm0, zmm1, [rdx+1472], 246 + vmovdqu ymm2, YMMWORD PTR [rcx+1536] + vpxor ymm2, ymm2, [rdx+1536] +L_mlkem_cmp_avx512_done: + vextracti64x4 ymm3, zmm0, 1 + vpor ymm0, ymm0, ymm3 + vpor ymm0, ymm0, ymm2 + vptest ymm0, ymm0 + cmovz eax, r9d + cmovnz eax, r10d + vzeroupper + add rsp, 8 + ret +mlkem_cmp_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_from_bytes_avx512_perm_lo DWORD 00000000h, 00000001h, 00000002h, 00000000h + DWORD 00000003h, 00000004h, 00000005h, 00000000h + DWORD 00000006h, 00000007h, 00000008h, 00000000h + DWORD 00000009h, 0000000ah, 0000000bh, 00000000h +ptr_L_mlkem_from_bytes_avx512_perm_lo QWORD L_mlkem_from_bytes_avx512_perm_lo +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_from_bytes_avx512_perm_hi DWORD 00000004h, 00000005h, 00000006h, 00000000h + DWORD 00000007h, 00000008h, 00000009h, 00000000h + DWORD 0000000ah, 0000000bh, 0000000ch, 00000000h + DWORD 0000000dh, 0000000eh, 0000000fh, 00000000h +ptr_L_mlkem_from_bytes_avx512_perm_hi QWORD L_mlkem_from_bytes_avx512_perm_hi +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_from_bytes_avx512_shuf BYTE 00h, 01h, 02h, 0ffh, 03h, 04h, 05h, 0ffh + BYTE 06h, 07h, 08h, 0ffh, 09h, 0ah, 0bh, 0ffh + BYTE 00h, 01h, 02h, 0ffh, 03h, 04h, 05h, 0ffh + BYTE 06h, 07h, 08h, 0ffh, 09h, 0ah, 0bh, 0ffh + BYTE 00h, 01h, 02h, 0ffh, 03h, 04h, 05h, 0ffh + BYTE 06h, 07h, 08h, 0ffh, 09h, 0ah, 0bh, 0ffh + BYTE 00h, 01h, 02h, 0ffh, 03h, 04h, 05h, 0ffh + BYTE 06h, 07h, 08h, 0ffh, 09h, 0ah, 0bh, 0ffh +ptr_L_mlkem_from_bytes_avx512_shuf QWORD L_mlkem_from_bytes_avx512_shuf +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_from_bytes_avx512_mask DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh +ptr_L_mlkem_from_bytes_avx512_mask QWORD L_mlkem_from_bytes_avx512_mask +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_from_bytes_avx512 PROC + sub rsp, 8 + vmovdqu64 zmm0, ptr_L_mlkem_from_bytes_avx512_perm_lo + vmovdqu64 zmm1, ptr_L_mlkem_from_bytes_avx512_perm_hi + vmovdqu64 zmm2, ptr_L_mlkem_from_bytes_avx512_shuf + vmovdqu64 zmm3, ptr_L_mlkem_from_bytes_avx512_mask + vpermd zmm4, zmm0, [rdx] + vpshufb zmm4, zmm4, zmm2 + vpandnq zmm5, zmm3, zmm4 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm3, zmm5, 234 + vmovdqu64 [rcx], zmm4 + vpermd zmm4, zmm0, [rdx+48] + vpshufb zmm4, zmm4, zmm2 + vpandnq zmm5, zmm3, zmm4 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm3, zmm5, 234 + vmovdqu64 [rcx+64], zmm4 + vpermd zmm4, zmm0, [rdx+96] + vpshufb zmm4, zmm4, zmm2 + vpandnq zmm5, zmm3, zmm4 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm3, zmm5, 234 + vmovdqu64 [rcx+128], zmm4 + vpermd zmm4, zmm0, [rdx+144] + vpshufb zmm4, zmm4, zmm2 + vpandnq zmm5, zmm3, zmm4 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm3, zmm5, 234 + vmovdqu64 [rcx+192], zmm4 + vpermd zmm4, zmm0, [rdx+192] + vpshufb zmm4, zmm4, zmm2 + vpandnq zmm5, zmm3, zmm4 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm3, zmm5, 234 + vmovdqu64 [rcx+256], zmm4 + vpermd zmm4, zmm0, [rdx+240] + vpshufb zmm4, zmm4, zmm2 + vpandnq zmm5, zmm3, zmm4 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm3, zmm5, 234 + vmovdqu64 [rcx+320], zmm4 + vpermd zmm4, zmm0, [rdx+288] + vpshufb zmm4, zmm4, zmm2 + vpandnq zmm5, zmm3, zmm4 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm3, zmm5, 234 + vmovdqu64 [rcx+384], zmm4 + vpermd zmm4, zmm1, [rdx+320] + vpshufb zmm4, zmm4, zmm2 + vpandnq zmm5, zmm3, zmm4 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm3, zmm5, 234 + vmovdqu64 [rcx+448], zmm4 + vzeroupper + add rsp, 8 + ret +mlkem_from_bytes_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_to_bytes_avx512_mask DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh +ptr_L_mlkem_to_bytes_avx512_mask QWORD L_mlkem_to_bytes_avx512_mask +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_to_bytes_avx512_shuf BYTE 00h, 01h, 02h, 04h, 05h, 06h, 08h, 09h + BYTE 0ah, 0ch, 0dh, 0eh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 00h, 01h, 02h, 04h, 05h, 06h, 08h, 09h + BYTE 0ah, 0ch, 0dh, 0eh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 00h, 01h, 02h, 04h, 05h, 06h, 08h, 09h + BYTE 0ah, 0ch, 0dh, 0eh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 00h, 01h, 02h, 04h, 05h, 06h, 08h, 09h + BYTE 0ah, 0ch, 0dh, 0eh, 0ffh, 0ffh, 0ffh, 0ffh +ptr_L_mlkem_to_bytes_avx512_shuf QWORD L_mlkem_to_bytes_avx512_shuf +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_to_bytes_avx512_perm DWORD 00000000h, 00000001h, 00000002h, 00000004h + DWORD 00000005h, 00000006h, 00000008h, 00000009h + DWORD 0000000ah, 0000000ch, 0000000dh, 0000000eh + DWORD 00000000h, 00000000h, 00000000h, 00000000h +ptr_L_mlkem_to_bytes_avx512_perm QWORD L_mlkem_to_bytes_avx512_perm +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_to_bytes_avx512 PROC + sub rsp, 40 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + mov rax, 3329 + vmovd xmm0, eax + vpbroadcastw zmm0, xmm0 + vmovdqu64 zmm1, ptr_L_mlkem_to_bytes_avx512_mask + vmovdqu64 zmm2, ptr_L_mlkem_to_bytes_avx512_shuf + vmovdqu64 zmm3, ptr_L_mlkem_to_bytes_avx512_perm + vmovdqu64 zmm4, [rdx] + vpsubw zmm5, zmm4, zmm0 + vpsraw zmm6, zmm5, 15 + vpandq zmm6, zmm6, zmm0 + vpaddw zmm4, zmm6, zmm5 + vpsrld zmm5, zmm4, 16 + vpslld zmm5, zmm5, 12 + vpternlogd zmm4, zmm1, zmm5, 234 + vpshufb zmm4, zmm4, zmm2 + vpermd zmm7, zmm3, zmm4 + vmovdqu64 [rcx], zmm7 + vmovdqu64 zmm4, [rdx+64] + vpsubw zmm5, zmm4, zmm0 + vpsraw zmm6, zmm5, 15 + vpandq zmm6, zmm6, zmm0 + vpaddw zmm4, zmm6, zmm5 + vpsrld zmm5, zmm4, 16 + vpslld zmm5, zmm5, 12 + vpternlogd zmm4, zmm1, zmm5, 234 + vpshufb zmm4, zmm4, zmm2 + vpermd zmm7, zmm3, zmm4 + vmovdqu64 [rcx+48], zmm7 + vmovdqu64 zmm4, [rdx+128] + vpsubw zmm5, zmm4, zmm0 + vpsraw zmm6, zmm5, 15 + vpandq zmm6, zmm6, zmm0 + vpaddw zmm4, zmm6, zmm5 + vpsrld zmm5, zmm4, 16 + vpslld zmm5, zmm5, 12 + vpternlogd zmm4, zmm1, zmm5, 234 + vpshufb zmm4, zmm4, zmm2 + vpermd zmm7, zmm3, zmm4 + vmovdqu64 [rcx+96], zmm7 + vmovdqu64 zmm4, [rdx+192] + vpsubw zmm5, zmm4, zmm0 + vpsraw zmm6, zmm5, 15 + vpandq zmm6, zmm6, zmm0 + vpaddw zmm4, zmm6, zmm5 + vpsrld zmm5, zmm4, 16 + vpslld zmm5, zmm5, 12 + vpternlogd zmm4, zmm1, zmm5, 234 + vpshufb zmm4, zmm4, zmm2 + vpermd zmm7, zmm3, zmm4 + vmovdqu64 [rcx+144], zmm7 + vmovdqu64 zmm4, [rdx+256] + vpsubw zmm5, zmm4, zmm0 + vpsraw zmm6, zmm5, 15 + vpandq zmm6, zmm6, zmm0 + vpaddw zmm4, zmm6, zmm5 + vpsrld zmm5, zmm4, 16 + vpslld zmm5, zmm5, 12 + vpternlogd zmm4, zmm1, zmm5, 234 + vpshufb zmm4, zmm4, zmm2 + vpermd zmm7, zmm3, zmm4 + vmovdqu64 [rcx+192], zmm7 + vmovdqu64 zmm4, [rdx+320] + vpsubw zmm5, zmm4, zmm0 + vpsraw zmm6, zmm5, 15 + vpandq zmm6, zmm6, zmm0 + vpaddw zmm4, zmm6, zmm5 + vpsrld zmm5, zmm4, 16 + vpslld zmm5, zmm5, 12 + vpternlogd zmm4, zmm1, zmm5, 234 + vpshufb zmm4, zmm4, zmm2 + vpermd zmm7, zmm3, zmm4 + vmovdqu64 [rcx+240], zmm7 + vmovdqu64 zmm4, [rdx+384] + vpsubw zmm5, zmm4, zmm0 + vpsraw zmm6, zmm5, 15 + vpandq zmm6, zmm6, zmm0 + vpaddw zmm4, zmm6, zmm5 + vpsrld zmm5, zmm4, 16 + vpslld zmm5, zmm5, 12 + vpternlogd zmm4, zmm1, zmm5, 234 + vpshufb zmm4, zmm4, zmm2 + vpermd zmm7, zmm3, zmm4 + vmovdqu64 [rcx+288], zmm7 + vmovdqu64 zmm4, [rdx+448] + vpsubw zmm5, zmm4, zmm0 + vpsraw zmm6, zmm5, 15 + vpandq zmm6, zmm6, zmm0 + vpaddw zmm4, zmm6, zmm5 + vpsrld zmm5, zmm4, 16 + vpslld zmm5, zmm5, 12 + vpternlogd zmm4, zmm1, zmm5, 234 + vpshufb zmm4, zmm4, zmm2 + vpermd zmm7, zmm3, zmm4 + vmovdqu YMMWORD PTR [rcx+336], ymm7 + vextracti32x4 xmm5, zmm7, 2 + vmovdqu OWORD PTR [rcx+368], xmm5 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + add rsp, 40 + ret +mlkem_to_bytes_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_from_msg_avx512_shuf BYTE 00h, 80h, 00h, 80h, 00h, 80h, 00h, 80h + BYTE 00h, 80h, 00h, 80h, 00h, 80h, 00h, 80h + BYTE 01h, 80h, 01h, 80h, 01h, 80h, 01h, 80h + BYTE 01h, 80h, 01h, 80h, 01h, 80h, 01h, 80h + BYTE 02h, 80h, 02h, 80h, 02h, 80h, 02h, 80h + BYTE 02h, 80h, 02h, 80h, 02h, 80h, 02h, 80h + BYTE 03h, 80h, 03h, 80h, 03h, 80h, 03h, 80h + BYTE 03h, 80h, 03h, 80h, 03h, 80h, 03h, 80h +ptr_L_mlkem_from_msg_avx512_shuf QWORD L_mlkem_from_msg_avx512_shuf +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_from_msg_avx512_pow WORD 8000h, 4000h, 2000h, 1000h, 0800h, 0400h, 0200h, 0100h + WORD 8000h, 4000h, 2000h, 1000h, 0800h, 0400h, 0200h, 0100h + WORD 8000h, 4000h, 2000h, 1000h, 0800h, 0400h, 0200h, 0100h + WORD 8000h, 4000h, 2000h, 1000h, 0800h, 0400h, 0200h, 0100h +ptr_L_mlkem_from_msg_avx512_pow QWORD L_mlkem_from_msg_avx512_pow +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_from_msg_avx512 PROC + sub rsp, 8 + vmovdqu64 zmm0, ptr_L_mlkem_from_msg_avx512_shuf + vmovdqu64 zmm1, ptr_L_mlkem_from_msg_avx512_pow + mov rax, 1665 + vmovd xmm2, eax + vpbroadcastw zmm2, xmm2 + vpbroadcastd zmm3, DWORD PTR [rdx] + vpshufb zmm3, zmm3, zmm0 + vpmullw zmm3, zmm3, zmm1 + vpsraw zmm3, zmm3, 15 + vpandq zmm3, zmm3, zmm2 + vmovdqu64 [rcx], zmm3 + vpbroadcastd zmm3, DWORD PTR [rdx+4] + vpshufb zmm3, zmm3, zmm0 + vpmullw zmm3, zmm3, zmm1 + vpsraw zmm3, zmm3, 15 + vpandq zmm3, zmm3, zmm2 + vmovdqu64 [rcx+64], zmm3 + vpbroadcastd zmm3, DWORD PTR [rdx+8] + vpshufb zmm3, zmm3, zmm0 + vpmullw zmm3, zmm3, zmm1 + vpsraw zmm3, zmm3, 15 + vpandq zmm3, zmm3, zmm2 + vmovdqu64 [rcx+128], zmm3 + vpbroadcastd zmm3, DWORD PTR [rdx+12] + vpshufb zmm3, zmm3, zmm0 + vpmullw zmm3, zmm3, zmm1 + vpsraw zmm3, zmm3, 15 + vpandq zmm3, zmm3, zmm2 + vmovdqu64 [rcx+192], zmm3 + vpbroadcastd zmm3, DWORD PTR [rdx+16] + vpshufb zmm3, zmm3, zmm0 + vpmullw zmm3, zmm3, zmm1 + vpsraw zmm3, zmm3, 15 + vpandq zmm3, zmm3, zmm2 + vmovdqu64 [rcx+256], zmm3 + vpbroadcastd zmm3, DWORD PTR [rdx+20] + vpshufb zmm3, zmm3, zmm0 + vpmullw zmm3, zmm3, zmm1 + vpsraw zmm3, zmm3, 15 + vpandq zmm3, zmm3, zmm2 + vmovdqu64 [rcx+320], zmm3 + vpbroadcastd zmm3, DWORD PTR [rdx+24] + vpshufb zmm3, zmm3, zmm0 + vpmullw zmm3, zmm3, zmm1 + vpsraw zmm3, zmm3, 15 + vpandq zmm3, zmm3, zmm2 + vmovdqu64 [rcx+384], zmm3 + vpbroadcastd zmm3, DWORD PTR [rdx+28] + vpshufb zmm3, zmm3, zmm0 + vpmullw zmm3, zmm3, zmm1 + vpsraw zmm3, zmm3, 15 + vpandq zmm3, zmm3, zmm2 + vmovdqu64 [rcx+448], zmm3 + vzeroupper + add rsp, 8 + ret +mlkem_from_msg_avx512 ENDP +_TEXT ENDS +_TEXT SEGMENT READONLY PARA +mlkem_to_msg_avx512 PROC + sub rsp, 8 + mov rax, 1664 + vmovd xmm0, eax + vpbroadcastw zmm0, xmm0 + mov r8, 64705 + vmovd xmm1, r8d + vpbroadcastw zmm1, xmm1 + vpsubw zmm2, zmm0, [rdx] + vpsraw zmm3, zmm2, 15 + vpxord zmm2, zmm2, zmm3 + vpaddw zmm2, zmm2, zmm1 + vextracti64x4 ymm4, zmm2, 1 + vpacksswb ymm2, ymm2, ymm4 + vpermq ymm2, ymm2, 216 + vpmovmskb r9d, ymm2 + mov DWORD PTR [rcx], r9d + vpsubw zmm2, zmm0, [rdx+64] + vpsraw zmm3, zmm2, 15 + vpxord zmm2, zmm2, zmm3 + vpaddw zmm2, zmm2, zmm1 + vextracti64x4 ymm4, zmm2, 1 + vpacksswb ymm2, ymm2, ymm4 + vpermq ymm2, ymm2, 216 + vpmovmskb r9d, ymm2 + mov DWORD PTR [rcx+4], r9d + vpsubw zmm2, zmm0, [rdx+128] + vpsraw zmm3, zmm2, 15 + vpxord zmm2, zmm2, zmm3 + vpaddw zmm2, zmm2, zmm1 + vextracti64x4 ymm4, zmm2, 1 + vpacksswb ymm2, ymm2, ymm4 + vpermq ymm2, ymm2, 216 + vpmovmskb r9d, ymm2 + mov DWORD PTR [rcx+8], r9d + vpsubw zmm2, zmm0, [rdx+192] + vpsraw zmm3, zmm2, 15 + vpxord zmm2, zmm2, zmm3 + vpaddw zmm2, zmm2, zmm1 + vextracti64x4 ymm4, zmm2, 1 + vpacksswb ymm2, ymm2, ymm4 + vpermq ymm2, ymm2, 216 + vpmovmskb r9d, ymm2 + mov DWORD PTR [rcx+12], r9d + vpsubw zmm2, zmm0, [rdx+256] + vpsraw zmm3, zmm2, 15 + vpxord zmm2, zmm2, zmm3 + vpaddw zmm2, zmm2, zmm1 + vextracti64x4 ymm4, zmm2, 1 + vpacksswb ymm2, ymm2, ymm4 + vpermq ymm2, ymm2, 216 + vpmovmskb r9d, ymm2 + mov DWORD PTR [rcx+16], r9d + vpsubw zmm2, zmm0, [rdx+320] + vpsraw zmm3, zmm2, 15 + vpxord zmm2, zmm2, zmm3 + vpaddw zmm2, zmm2, zmm1 + vextracti64x4 ymm4, zmm2, 1 + vpacksswb ymm2, ymm2, ymm4 + vpermq ymm2, ymm2, 216 + vpmovmskb r9d, ymm2 + mov DWORD PTR [rcx+20], r9d + vpsubw zmm2, zmm0, [rdx+384] + vpsraw zmm3, zmm2, 15 + vpxord zmm2, zmm2, zmm3 + vpaddw zmm2, zmm2, zmm1 + vextracti64x4 ymm4, zmm2, 1 + vpacksswb ymm2, ymm2, ymm4 + vpermq ymm2, ymm2, 216 + vpmovmskb r9d, ymm2 + mov DWORD PTR [rcx+24], r9d + vpsubw zmm2, zmm0, [rdx+448] + vpsraw zmm3, zmm2, 15 + vpxord zmm2, zmm2, zmm3 + vpaddw zmm2, zmm2, zmm1 + vextracti64x4 ymm4, zmm2, 1 + vpacksswb ymm2, ymm2, ymm4 + vpermq ymm2, ymm2, 216 + vpmovmskb r9d, ymm2 + mov DWORD PTR [rcx+28], r9d + vzeroupper + add rsp, 8 + ret +mlkem_to_msg_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_4_avx512_shuf BYTE 00h, 04h, 08h, 0ch, 80h, 80h, 80h, 80h + BYTE 80h, 80h, 80h, 80h, 80h, 80h, 80h, 80h + BYTE 00h, 04h, 08h, 0ch, 80h, 80h, 80h, 80h + BYTE 80h, 80h, 80h, 80h, 80h, 80h, 80h, 80h + BYTE 00h, 04h, 08h, 0ch, 80h, 80h, 80h, 80h + BYTE 80h, 80h, 80h, 80h, 80h, 80h, 80h, 80h + BYTE 00h, 04h, 08h, 0ch, 80h, 80h, 80h, 80h + BYTE 80h, 80h, 80h, 80h, 80h, 80h, 80h, 80h +ptr_L_mlkem_compress_4_avx512_shuf QWORD L_mlkem_compress_4_avx512_shuf +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_4_avx512_perm DWORD 00000000h, 00000004h, 00000008h, 0000000ch + DWORD 00000000h, 00000000h, 00000000h, 00000000h + DWORD 00000000h, 00000000h, 00000000h, 00000000h + DWORD 00000000h, 00000000h, 00000000h, 00000000h +ptr_L_mlkem_compress_4_avx512_perm QWORD L_mlkem_compress_4_avx512_perm +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_compress_4_avx512 PROC + sub rsp, 24 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu64 zmm0, ptr_L_mlkem_compress_4_avx512_shuf + vmovdqu64 zmm1, ptr_L_mlkem_compress_4_avx512_perm + mov rax, 20159 + vmovd xmm2, eax + vpbroadcastw zmm2, xmm2 + mov rax, 512 + vmovd xmm3, eax + vpbroadcastw zmm3, xmm3 + mov rax, 15 + vmovd xmm4, eax + vpbroadcastw zmm4, xmm4 + vpmulhw zmm5, zmm2, [rdx] + vpmulhrsw zmm5, zmm5, zmm3 + vpandq zmm5, zmm5, zmm4 + vpsrld zmm6, zmm5, 12 + vpord zmm5, zmm5, zmm6 + vpshufb zmm5, zmm5, zmm0 + vpermd zmm5, zmm1, zmm5 + vmovdqu OWORD PTR [rcx], xmm5 + vpmulhw zmm5, zmm2, [rdx+64] + vpmulhrsw zmm5, zmm5, zmm3 + vpandq zmm5, zmm5, zmm4 + vpsrld zmm6, zmm5, 12 + vpord zmm5, zmm5, zmm6 + vpshufb zmm5, zmm5, zmm0 + vpermd zmm5, zmm1, zmm5 + vmovdqu OWORD PTR [rcx+16], xmm5 + vpmulhw zmm5, zmm2, [rdx+128] + vpmulhrsw zmm5, zmm5, zmm3 + vpandq zmm5, zmm5, zmm4 + vpsrld zmm6, zmm5, 12 + vpord zmm5, zmm5, zmm6 + vpshufb zmm5, zmm5, zmm0 + vpermd zmm5, zmm1, zmm5 + vmovdqu OWORD PTR [rcx+32], xmm5 + vpmulhw zmm5, zmm2, [rdx+192] + vpmulhrsw zmm5, zmm5, zmm3 + vpandq zmm5, zmm5, zmm4 + vpsrld zmm6, zmm5, 12 + vpord zmm5, zmm5, zmm6 + vpshufb zmm5, zmm5, zmm0 + vpermd zmm5, zmm1, zmm5 + vmovdqu OWORD PTR [rcx+48], xmm5 + vpmulhw zmm5, zmm2, [rdx+256] + vpmulhrsw zmm5, zmm5, zmm3 + vpandq zmm5, zmm5, zmm4 + vpsrld zmm6, zmm5, 12 + vpord zmm5, zmm5, zmm6 + vpshufb zmm5, zmm5, zmm0 + vpermd zmm5, zmm1, zmm5 + vmovdqu OWORD PTR [rcx+64], xmm5 + vpmulhw zmm5, zmm2, [rdx+320] + vpmulhrsw zmm5, zmm5, zmm3 + vpandq zmm5, zmm5, zmm4 + vpsrld zmm6, zmm5, 12 + vpord zmm5, zmm5, zmm6 + vpshufb zmm5, zmm5, zmm0 + vpermd zmm5, zmm1, zmm5 + vmovdqu OWORD PTR [rcx+80], xmm5 + vpmulhw zmm5, zmm2, [rdx+384] + vpmulhrsw zmm5, zmm5, zmm3 + vpandq zmm5, zmm5, zmm4 + vpsrld zmm6, zmm5, 12 + vpord zmm5, zmm5, zmm6 + vpshufb zmm5, zmm5, zmm0 + vpermd zmm5, zmm1, zmm5 + vmovdqu OWORD PTR [rcx+96], xmm5 + vpmulhw zmm5, zmm2, [rdx+448] + vpmulhrsw zmm5, zmm5, zmm3 + vpandq zmm5, zmm5, zmm4 + vpsrld zmm6, zmm5, 12 + vpord zmm5, zmm5, zmm6 + vpshufb zmm5, zmm5, zmm0 + vpermd zmm5, zmm1, zmm5 + vmovdqu OWORD PTR [rcx+112], xmm5 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + add rsp, 24 + ret +mlkem_compress_4_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_4_avx512_shuf BYTE 00h, 00h, 00h, 00h, 01h, 01h, 01h, 01h + BYTE 02h, 02h, 02h, 02h, 03h, 03h, 03h, 03h + BYTE 04h, 04h, 04h, 04h, 05h, 05h, 05h, 05h + BYTE 06h, 06h, 06h, 06h, 07h, 07h, 07h, 07h + BYTE 08h, 08h, 08h, 08h, 09h, 09h, 09h, 09h + BYTE 0ah, 0ah, 0ah, 0ah, 0bh, 0bh, 0bh, 0bh + BYTE 0ch, 0ch, 0ch, 0ch, 0dh, 0dh, 0dh, 0dh + BYTE 0eh, 0eh, 0eh, 0eh, 0fh, 0fh, 0fh, 0fh +ptr_L_mlkem_decompress_4_avx512_shuf QWORD L_mlkem_decompress_4_avx512_shuf +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_4_avx512_mask DWORD 00f0000fh, 00f0000fh, 00f0000fh, 00f0000fh + DWORD 00f0000fh, 00f0000fh, 00f0000fh, 00f0000fh + DWORD 00f0000fh, 00f0000fh, 00f0000fh, 00f0000fh + DWORD 00f0000fh, 00f0000fh, 00f0000fh, 00f0000fh +ptr_L_mlkem_decompress_4_avx512_mask QWORD L_mlkem_decompress_4_avx512_mask +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_4_avx512_shift DWORD 00800800h, 00800800h, 00800800h, 00800800h + DWORD 00800800h, 00800800h, 00800800h, 00800800h + DWORD 00800800h, 00800800h, 00800800h, 00800800h + DWORD 00800800h, 00800800h, 00800800h, 00800800h +ptr_L_mlkem_decompress_4_avx512_shift QWORD L_mlkem_decompress_4_avx512_shift +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_decompress_4_avx512 PROC + sub rsp, 8 + vmovdqu64 zmm0, ptr_L_mlkem_decompress_4_avx512_shuf + vmovdqu64 zmm1, ptr_L_mlkem_decompress_4_avx512_mask + vmovdqu64 zmm2, ptr_L_mlkem_decompress_4_avx512_shift + mov rax, 3329 + vmovd xmm3, eax + vpbroadcastw zmm3, xmm3 + vbroadcasti32x4 zmm4, OWORD PTR [rdx] + vpshufb zmm4, zmm4, zmm0 + vpandq zmm4, zmm4, zmm1 + vpmullw zmm4, zmm4, zmm2 + vpmulhrsw zmm4, zmm4, zmm3 + vmovdqu64 [rcx], zmm4 + vbroadcasti32x4 zmm4, OWORD PTR [rdx+16] + vpshufb zmm4, zmm4, zmm0 + vpandq zmm4, zmm4, zmm1 + vpmullw zmm4, zmm4, zmm2 + vpmulhrsw zmm4, zmm4, zmm3 + vmovdqu64 [rcx+64], zmm4 + vbroadcasti32x4 zmm4, OWORD PTR [rdx+32] + vpshufb zmm4, zmm4, zmm0 + vpandq zmm4, zmm4, zmm1 + vpmullw zmm4, zmm4, zmm2 + vpmulhrsw zmm4, zmm4, zmm3 + vmovdqu64 [rcx+128], zmm4 + vbroadcasti32x4 zmm4, OWORD PTR [rdx+48] + vpshufb zmm4, zmm4, zmm0 + vpandq zmm4, zmm4, zmm1 + vpmullw zmm4, zmm4, zmm2 + vpmulhrsw zmm4, zmm4, zmm3 + vmovdqu64 [rcx+192], zmm4 + vbroadcasti32x4 zmm4, OWORD PTR [rdx+64] + vpshufb zmm4, zmm4, zmm0 + vpandq zmm4, zmm4, zmm1 + vpmullw zmm4, zmm4, zmm2 + vpmulhrsw zmm4, zmm4, zmm3 + vmovdqu64 [rcx+256], zmm4 + vbroadcasti32x4 zmm4, OWORD PTR [rdx+80] + vpshufb zmm4, zmm4, zmm0 + vpandq zmm4, zmm4, zmm1 + vpmullw zmm4, zmm4, zmm2 + vpmulhrsw zmm4, zmm4, zmm3 + vmovdqu64 [rcx+320], zmm4 + vbroadcasti32x4 zmm4, OWORD PTR [rdx+96] + vpshufb zmm4, zmm4, zmm0 + vpandq zmm4, zmm4, zmm1 + vpmullw zmm4, zmm4, zmm2 + vpmulhrsw zmm4, zmm4, zmm3 + vmovdqu64 [rcx+384], zmm4 + vbroadcasti32x4 zmm4, OWORD PTR [rdx+112] + vpshufb zmm4, zmm4, zmm0 + vpandq zmm4, zmm4, zmm1 + vpmullw zmm4, zmm4, zmm2 + vpmulhrsw zmm4, zmm4, zmm3 + vmovdqu64 [rcx+448], zmm4 + vzeroupper + add rsp, 8 + ret +mlkem_decompress_4_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_5_avx512_q WORD 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h + WORD 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h + WORD 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h + WORD 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h +ptr_L_mlkem_decompress_5_avx512_q QWORD L_mlkem_decompress_5_avx512_q +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_5_avx512_shuf BYTE 00h, 00h, 00h, 01h, 01h, 01h, 01h, 02h + BYTE 02h, 03h, 03h, 03h, 03h, 04h, 04h, 04h + BYTE 05h, 05h, 05h, 06h, 06h, 06h, 06h, 07h + BYTE 07h, 08h, 08h, 08h, 08h, 09h, 09h, 09h + BYTE 00h, 00h, 00h, 01h, 01h, 01h, 01h, 02h + BYTE 02h, 03h, 03h, 03h, 03h, 04h, 04h, 04h + BYTE 05h, 05h, 05h, 06h, 06h, 06h, 06h, 07h + BYTE 07h, 08h, 08h, 08h, 08h, 09h, 09h, 09h +ptr_L_mlkem_decompress_5_avx512_shuf QWORD L_mlkem_decompress_5_avx512_shuf +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_5_avx512_mask WORD 001fh, 03e0h, 007ch, 0f80h, 01f0h, 003eh, 07c0h, 00f8h + WORD 001fh, 03e0h, 007ch, 0f80h, 01f0h, 003eh, 07c0h, 00f8h + WORD 001fh, 03e0h, 007ch, 0f80h, 01f0h, 003eh, 07c0h, 00f8h + WORD 001fh, 03e0h, 007ch, 0f80h, 01f0h, 003eh, 07c0h, 00f8h +ptr_L_mlkem_decompress_5_avx512_mask QWORD L_mlkem_decompress_5_avx512_mask +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_5_avx512_shift WORD 0400h, 0020h, 0100h, 0008h, 0040h, 0200h, 0010h, 0080h + WORD 0400h, 0020h, 0100h, 0008h, 0040h, 0200h, 0010h, 0080h + WORD 0400h, 0020h, 0100h, 0008h, 0040h, 0200h, 0010h, 0080h + WORD 0400h, 0020h, 0100h, 0008h, 0040h, 0200h, 0010h, 0080h +ptr_L_mlkem_decompress_5_avx512_shift QWORD L_mlkem_decompress_5_avx512_shift +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_decompress_5_avx512 PROC + sub rsp, 8 + vmovdqu64 zmm0, ptr_L_mlkem_decompress_5_avx512_q + vmovdqu64 zmm1, ptr_L_mlkem_decompress_5_avx512_shuf + vmovdqu64 zmm2, ptr_L_mlkem_decompress_5_avx512_mask + vmovdqu64 zmm3, ptr_L_mlkem_decompress_5_avx512_shift + vbroadcasti128 ymm4, OWORD PTR [rdx] + vbroadcasti128 ymm5, OWORD PTR [rdx+10] + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm1 + vpandq zmm4, zmm4, zmm2 + vpmullw zmm4, zmm4, zmm3 + vpmulhrsw zmm4, zmm4, zmm0 + vmovdqu64 [rcx], zmm4 + vbroadcasti128 ymm4, OWORD PTR [rdx+20] + vbroadcasti128 ymm5, OWORD PTR [rdx+30] + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm1 + vpandq zmm4, zmm4, zmm2 + vpmullw zmm4, zmm4, zmm3 + vpmulhrsw zmm4, zmm4, zmm0 + vmovdqu64 [rcx+64], zmm4 + vbroadcasti128 ymm4, OWORD PTR [rdx+40] + vbroadcasti128 ymm5, OWORD PTR [rdx+50] + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm1 + vpandq zmm4, zmm4, zmm2 + vpmullw zmm4, zmm4, zmm3 + vpmulhrsw zmm4, zmm4, zmm0 + vmovdqu64 [rcx+128], zmm4 + vbroadcasti128 ymm4, OWORD PTR [rdx+60] + vbroadcasti128 ymm5, OWORD PTR [rdx+70] + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm1 + vpandq zmm4, zmm4, zmm2 + vpmullw zmm4, zmm4, zmm3 + vpmulhrsw zmm4, zmm4, zmm0 + vmovdqu64 [rcx+192], zmm4 + vbroadcasti128 ymm4, OWORD PTR [rdx+80] + vbroadcasti128 ymm5, OWORD PTR [rdx+90] + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm1 + vpandq zmm4, zmm4, zmm2 + vpmullw zmm4, zmm4, zmm3 + vpmulhrsw zmm4, zmm4, zmm0 + vmovdqu64 [rcx+256], zmm4 + vbroadcasti128 ymm4, OWORD PTR [rdx+100] + vbroadcasti128 ymm5, OWORD PTR [rdx+110] + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm1 + vpandq zmm4, zmm4, zmm2 + vpmullw zmm4, zmm4, zmm3 + vpmulhrsw zmm4, zmm4, zmm0 + vmovdqu64 [rcx+320], zmm4 + vbroadcasti128 ymm4, OWORD PTR [rdx+120] + vbroadcasti128 ymm5, OWORD PTR [rdx+130] + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm1 + vpandq zmm4, zmm4, zmm2 + vpmullw zmm4, zmm4, zmm3 + vpmulhrsw zmm4, zmm4, zmm0 + vmovdqu64 [rcx+384], zmm4 + vbroadcasti128 ymm4, OWORD PTR [rdx+140] + vmovq xmm5, QWORD PTR [rdx+150] + movzx rax, WORD PTR [rdx+158] + vpinsrq xmm5, xmm5, rax, 1 + vinserti128 ymm5, ymm5, xmm5, 1 + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm1 + vpandq zmm4, zmm4, zmm2 + vpmullw zmm4, zmm4, zmm3 + vpmulhrsw zmm4, zmm4, zmm0 + vmovdqu64 [rcx+448], zmm4 + vzeroupper + add rsp, 8 + ret +mlkem_decompress_5_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_10_avx512_mask DWORD 7fe01ff8h, 7fe01ff8h, 7fe01ff8h, 7fe01ff8h + DWORD 7fe01ff8h, 7fe01ff8h, 7fe01ff8h, 7fe01ff8h + DWORD 7fe01ff8h, 7fe01ff8h, 7fe01ff8h, 7fe01ff8h + DWORD 7fe01ff8h, 7fe01ff8h, 7fe01ff8h, 7fe01ff8h +ptr_L_mlkem_decompress_10_avx512_mask QWORD L_mlkem_decompress_10_avx512_mask +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_10_avx512_sllv QWORD 0000000000000004h, 0000000000000004h + QWORD 0000000000000004h, 0000000000000004h + QWORD 0000000000000004h, 0000000000000004h + QWORD 0000000000000004h, 0000000000000004h +ptr_L_mlkem_decompress_10_avx512_sllv QWORD L_mlkem_decompress_10_avx512_sllv +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_10_avx512_q DWORD 0d013404h, 0d013404h, 0d013404h, 0d013404h + DWORD 0d013404h, 0d013404h, 0d013404h, 0d013404h + DWORD 0d013404h, 0d013404h, 0d013404h, 0d013404h + DWORD 0d013404h, 0d013404h, 0d013404h, 0d013404h +ptr_L_mlkem_decompress_10_avx512_q QWORD L_mlkem_decompress_10_avx512_q +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_10_avx512_shuf BYTE 00h, 01h, 01h, 02h, 02h, 03h, 03h, 04h + BYTE 05h, 06h, 06h, 07h, 07h, 08h, 08h, 09h + BYTE 02h, 03h, 03h, 04h, 04h, 05h, 05h, 06h + BYTE 07h, 08h, 08h, 09h, 09h, 0ah, 0ah, 0bh + BYTE 00h, 01h, 01h, 02h, 02h, 03h, 03h, 04h + BYTE 05h, 06h, 06h, 07h, 07h, 08h, 08h, 09h + BYTE 02h, 03h, 03h, 04h, 04h, 05h, 05h, 06h + BYTE 07h, 08h, 08h, 09h, 09h, 0ah, 0ah, 0bh +ptr_L_mlkem_decompress_10_avx512_shuf QWORD L_mlkem_decompress_10_avx512_shuf +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_decompress_10_avx512 PROC + sub rsp, 8 + vmovdqu64 zmm0, ptr_L_mlkem_decompress_10_avx512_mask + vmovdqu64 zmm1, ptr_L_mlkem_decompress_10_avx512_q + vmovdqu64 zmm2, ptr_L_mlkem_decompress_10_avx512_shuf + vmovdqu64 zmm3, ptr_L_mlkem_decompress_10_avx512_sllv +L_mlkem_decompress_10_avx512_start: + vpermq ymm4, [rdx], 148 + vpermq ymm5, [rdx+20], 148 + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm2 + vpsllvd zmm4, zmm4, zmm3 + vpsrlw zmm4, zmm4, 1 + vpandq zmm4, zmm4, zmm0 + vpmulhrsw zmm4, zmm4, zmm1 + vmovdqu64 [rcx], zmm4 + vpermq ymm4, [rdx+40], 148 + vpermq ymm5, [rdx+60], 148 + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm2 + vpsllvd zmm4, zmm4, zmm3 + vpsrlw zmm4, zmm4, 1 + vpandq zmm4, zmm4, zmm0 + vpmulhrsw zmm4, zmm4, zmm1 + vmovdqu64 [rcx+64], zmm4 + vpermq ymm4, [rdx+80], 148 + vpermq ymm5, [rdx+100], 148 + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm2 + vpsllvd zmm4, zmm4, zmm3 + vpsrlw zmm4, zmm4, 1 + vpandq zmm4, zmm4, zmm0 + vpmulhrsw zmm4, zmm4, zmm1 + vmovdqu64 [rcx+128], zmm4 + vpermq ymm4, [rdx+120], 148 + vpermq ymm5, [rdx+140], 148 + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm2 + vpsllvd zmm4, zmm4, zmm3 + vpsrlw zmm4, zmm4, 1 + vpandq zmm4, zmm4, zmm0 + vpmulhrsw zmm4, zmm4, zmm1 + vmovdqu64 [rcx+192], zmm4 + vpermq ymm4, [rdx+160], 148 + vpermq ymm5, [rdx+180], 148 + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm2 + vpsllvd zmm4, zmm4, zmm3 + vpsrlw zmm4, zmm4, 1 + vpandq zmm4, zmm4, zmm0 + vpmulhrsw zmm4, zmm4, zmm1 + vmovdqu64 [rcx+256], zmm4 + vpermq ymm4, [rdx+200], 148 + vpermq ymm5, [rdx+220], 148 + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm2 + vpsllvd zmm4, zmm4, zmm3 + vpsrlw zmm4, zmm4, 1 + vpandq zmm4, zmm4, zmm0 + vpmulhrsw zmm4, zmm4, zmm1 + vmovdqu64 [rcx+320], zmm4 + vpermq ymm4, [rdx+240], 148 + vpermq ymm5, [rdx+260], 148 + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm2 + vpsllvd zmm4, zmm4, zmm3 + vpsrlw zmm4, zmm4, 1 + vpandq zmm4, zmm4, zmm0 + vpmulhrsw zmm4, zmm4, zmm1 + vmovdqu64 [rcx+384], zmm4 + vpermq ymm4, [rdx+280], 148 + vpermq ymm5, [rdx+300], 148 + vinserti64x4 zmm4, zmm4, ymm5, 1 + vpshufb zmm4, zmm4, zmm2 + vpsllvd zmm4, zmm4, zmm3 + vpsrlw zmm4, zmm4, 1 + vpandq zmm4, zmm4, zmm0 + vpmulhrsw zmm4, zmm4, zmm1 + vmovdqu64 [rcx+448], zmm4 + add rdx, 320 + add rcx, 512 + sub r8d, 1 + jg L_mlkem_decompress_10_avx512_start + vzeroupper + add rsp, 8 + ret +mlkem_decompress_10_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_11_avx512_q WORD 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h + WORD 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h + WORD 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h + WORD 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h +ptr_L_mlkem_decompress_11_avx512_q QWORD L_mlkem_decompress_11_avx512_q +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_11_avx512_shuf BYTE 00h, 01h, 01h, 02h, 02h, 03h, 04h, 05h + BYTE 05h, 06h, 06h, 07h, 08h, 09h, 09h, 0ah + BYTE 03h, 04h, 04h, 05h, 05h, 06h, 07h, 08h + BYTE 08h, 09h, 09h, 0ah, 0bh, 0ch, 0ch, 0dh + BYTE 00h, 01h, 01h, 02h, 02h, 03h, 04h, 05h + BYTE 05h, 06h, 06h, 07h, 08h, 09h, 09h, 0ah + BYTE 03h, 04h, 04h, 05h, 05h, 06h, 07h, 08h + BYTE 08h, 09h, 09h, 0ah, 0bh, 0ch, 0ch, 0dh +ptr_L_mlkem_decompress_11_avx512_shuf QWORD L_mlkem_decompress_11_avx512_shuf +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_11_avx512_srlvd DWORD 00000000h, 00000001h, 00000000h, 00000000h + DWORD 00000000h, 00000001h, 00000000h, 00000000h + DWORD 00000000h, 00000001h, 00000000h, 00000000h + DWORD 00000000h, 00000001h, 00000000h, 00000000h +ptr_L_mlkem_decompress_11_avx512_srlvd QWORD L_mlkem_decompress_11_avx512_srlvd +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_11_avx512_srlvq QWORD 0000000000000000h, 0000000000000002h + QWORD 0000000000000000h, 0000000000000002h + QWORD 0000000000000000h, 0000000000000002h + QWORD 0000000000000000h, 0000000000000002h +ptr_L_mlkem_decompress_11_avx512_srlvq QWORD L_mlkem_decompress_11_avx512_srlvq +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_11_avx512_shift WORD 0020h, 0004h, 0001h, 0020h, 0008h, 0001h, 0020h, 0004h + WORD 0020h, 0004h, 0001h, 0020h, 0008h, 0001h, 0020h, 0004h + WORD 0020h, 0004h, 0001h, 0020h, 0008h, 0001h, 0020h, 0004h + WORD 0020h, 0004h, 0001h, 0020h, 0008h, 0001h, 0020h, 0004h +ptr_L_mlkem_decompress_11_avx512_shift QWORD L_mlkem_decompress_11_avx512_shift +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_11_avx512_mask WORD 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h + WORD 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h + WORD 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h + WORD 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h +ptr_L_mlkem_decompress_11_avx512_mask QWORD L_mlkem_decompress_11_avx512_mask +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_decompress_11_avx512 PROC + sub rsp, 40 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu64 zmm0, ptr_L_mlkem_decompress_11_avx512_q + vmovdqu64 zmm1, ptr_L_mlkem_decompress_11_avx512_shuf + vmovdqu64 zmm2, ptr_L_mlkem_decompress_11_avx512_srlvd + vmovdqu64 zmm3, ptr_L_mlkem_decompress_11_avx512_srlvq + vmovdqu64 zmm4, ptr_L_mlkem_decompress_11_avx512_shift + vmovdqu64 zmm5, ptr_L_mlkem_decompress_11_avx512_mask +L_mlkem_decompress_11_avx512_start: + vpermq ymm6, [rdx], 148 + vpermq ymm7, [rdx+22], 148 + vinserti64x4 zmm6, zmm6, ymm7, 1 + vpshufb zmm6, zmm6, zmm1 + vpsrlvd zmm6, zmm6, zmm2 + vpsrlvq zmm6, zmm6, zmm3 + vpmullw zmm6, zmm6, zmm4 + vpsrlw zmm6, zmm6, 1 + vpandq zmm6, zmm6, zmm5 + vpmulhrsw zmm6, zmm6, zmm0 + vmovdqu64 [rcx], zmm6 + vpermq ymm6, [rdx+44], 148 + vpermq ymm7, [rdx+66], 148 + vinserti64x4 zmm6, zmm6, ymm7, 1 + vpshufb zmm6, zmm6, zmm1 + vpsrlvd zmm6, zmm6, zmm2 + vpsrlvq zmm6, zmm6, zmm3 + vpmullw zmm6, zmm6, zmm4 + vpsrlw zmm6, zmm6, 1 + vpandq zmm6, zmm6, zmm5 + vpmulhrsw zmm6, zmm6, zmm0 + vmovdqu64 [rcx+64], zmm6 + vpermq ymm6, [rdx+88], 148 + vpermq ymm7, [rdx+110], 148 + vinserti64x4 zmm6, zmm6, ymm7, 1 + vpshufb zmm6, zmm6, zmm1 + vpsrlvd zmm6, zmm6, zmm2 + vpsrlvq zmm6, zmm6, zmm3 + vpmullw zmm6, zmm6, zmm4 + vpsrlw zmm6, zmm6, 1 + vpandq zmm6, zmm6, zmm5 + vpmulhrsw zmm6, zmm6, zmm0 + vmovdqu64 [rcx+128], zmm6 + vpermq ymm6, [rdx+132], 148 + vpermq ymm7, [rdx+154], 148 + vinserti64x4 zmm6, zmm6, ymm7, 1 + vpshufb zmm6, zmm6, zmm1 + vpsrlvd zmm6, zmm6, zmm2 + vpsrlvq zmm6, zmm6, zmm3 + vpmullw zmm6, zmm6, zmm4 + vpsrlw zmm6, zmm6, 1 + vpandq zmm6, zmm6, zmm5 + vpmulhrsw zmm6, zmm6, zmm0 + vmovdqu64 [rcx+192], zmm6 + vpermq ymm6, [rdx+176], 148 + vpermq ymm7, [rdx+198], 148 + vinserti64x4 zmm6, zmm6, ymm7, 1 + vpshufb zmm6, zmm6, zmm1 + vpsrlvd zmm6, zmm6, zmm2 + vpsrlvq zmm6, zmm6, zmm3 + vpmullw zmm6, zmm6, zmm4 + vpsrlw zmm6, zmm6, 1 + vpandq zmm6, zmm6, zmm5 + vpmulhrsw zmm6, zmm6, zmm0 + vmovdqu64 [rcx+256], zmm6 + vpermq ymm6, [rdx+220], 148 + vpermq ymm7, [rdx+242], 148 + vinserti64x4 zmm6, zmm6, ymm7, 1 + vpshufb zmm6, zmm6, zmm1 + vpsrlvd zmm6, zmm6, zmm2 + vpsrlvq zmm6, zmm6, zmm3 + vpmullw zmm6, zmm6, zmm4 + vpsrlw zmm6, zmm6, 1 + vpandq zmm6, zmm6, zmm5 + vpmulhrsw zmm6, zmm6, zmm0 + vmovdqu64 [rcx+320], zmm6 + vpermq ymm6, [rdx+264], 148 + vpermq ymm7, [rdx+286], 148 + vinserti64x4 zmm6, zmm6, ymm7, 1 + vpshufb zmm6, zmm6, zmm1 + vpsrlvd zmm6, zmm6, zmm2 + vpsrlvq zmm6, zmm6, zmm3 + vpmullw zmm6, zmm6, zmm4 + vpsrlw zmm6, zmm6, 1 + vpandq zmm6, zmm6, zmm5 + vpmulhrsw zmm6, zmm6, zmm0 + vmovdqu64 [rcx+384], zmm6 + vpermq ymm6, [rdx+308], 148 + vpermq ymm7, [rdx+330], 148 + vinserti64x4 zmm6, zmm6, ymm7, 1 + vpshufb zmm6, zmm6, zmm1 + vpsrlvd zmm6, zmm6, zmm2 + vpsrlvq zmm6, zmm6, zmm3 + vpmullw zmm6, zmm6, zmm4 + vpsrlw zmm6, zmm6, 1 + vpandq zmm6, zmm6, zmm5 + vpmulhrsw zmm6, zmm6, zmm0 + vmovdqu64 [rcx+448], zmm6 + add rdx, 352 + add rcx, 512 + sub r8d, 1 + jg L_mlkem_decompress_11_avx512_start + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + add rsp, 40 + ret +mlkem_decompress_11_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_5_avx512_shift1 WORD 2001h, 2001h, 2001h, 2001h, 2001h, 2001h, 2001h, 2001h + WORD 2001h, 2001h, 2001h, 2001h, 2001h, 2001h, 2001h, 2001h +ptr_L_mlkem_compress_5_avx512_shift1 QWORD L_mlkem_compress_5_avx512_shift1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_5_avx512_shift2 DWORD 04000001h, 04000001h, 04000001h, 04000001h + DWORD 04000001h, 04000001h, 04000001h, 04000001h +ptr_L_mlkem_compress_5_avx512_shift2 QWORD L_mlkem_compress_5_avx512_shift2 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_5_avx512_shlv QWORD 000000000000000ch, 000000000000000ch + QWORD 000000000000000ch, 000000000000000ch +ptr_L_mlkem_compress_5_avx512_shlv QWORD L_mlkem_compress_5_avx512_shlv +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_5_avx512_shuf BYTE 00h, 01h, 02h, 03h, 04h, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 08h, 09h, 0ah, 0bh, 0ch, 0ffh + BYTE 09h, 0ah, 0bh, 0ch, 0ffh, 00h, 01h, 02h + BYTE 03h, 04h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 08h +ptr_L_mlkem_compress_5_avx512_shuf QWORD L_mlkem_compress_5_avx512_shuf +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_compress_5_avx512 PROC + sub rsp, 72 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + mov rax, 20159 + vmovd xmm0, eax + vpbroadcastw zmm0, xmm0 + mov rax, 1024 + vmovd xmm1, eax + vpbroadcastw zmm1, xmm1 + mov rax, 31 + vmovd xmm2, eax + vpbroadcastw zmm2, xmm2 + vmovdqu ymm3, YMMWORD PTR L_mlkem_compress_5_avx512_shift1 + vmovdqu ymm4, YMMWORD PTR L_mlkem_compress_5_avx512_shift2 + vmovdqu ymm5, YMMWORD PTR L_mlkem_compress_5_avx512_shlv + vmovdqu ymm6, YMMWORD PTR L_mlkem_compress_5_avx512_shuf + vpmulhw zmm7, zmm0, [rdx] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vextracti64x4 ymm9, zmm7, 1 + vpackuswb ymm8, ymm7, ymm9 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlvq ymm8, ymm8, ymm5 + vpshufb ymm8, ymm8, ymm6 + vextracti128 xmm9, ymm8, 1 + vpblendvb xmm8, xmm8, xmm9, xmm6 + vmovdqu OWORD PTR [rcx], xmm8 + vmovss DWORD PTR [rcx+16], xmm9 + vpmulhw zmm7, zmm0, [rdx+64] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vextracti64x4 ymm9, zmm7, 1 + vpackuswb ymm8, ymm7, ymm9 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlvq ymm8, ymm8, ymm5 + vpshufb ymm8, ymm8, ymm6 + vextracti128 xmm9, ymm8, 1 + vpblendvb xmm8, xmm8, xmm9, xmm6 + vmovdqu OWORD PTR [rcx+20], xmm8 + vmovss DWORD PTR [rcx+36], xmm9 + vpmulhw zmm7, zmm0, [rdx+128] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vextracti64x4 ymm9, zmm7, 1 + vpackuswb ymm8, ymm7, ymm9 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlvq ymm8, ymm8, ymm5 + vpshufb ymm8, ymm8, ymm6 + vextracti128 xmm9, ymm8, 1 + vpblendvb xmm8, xmm8, xmm9, xmm6 + vmovdqu OWORD PTR [rcx+40], xmm8 + vmovss DWORD PTR [rcx+56], xmm9 + vpmulhw zmm7, zmm0, [rdx+192] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vextracti64x4 ymm9, zmm7, 1 + vpackuswb ymm8, ymm7, ymm9 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlvq ymm8, ymm8, ymm5 + vpshufb ymm8, ymm8, ymm6 + vextracti128 xmm9, ymm8, 1 + vpblendvb xmm8, xmm8, xmm9, xmm6 + vmovdqu OWORD PTR [rcx+60], xmm8 + vmovss DWORD PTR [rcx+76], xmm9 + vpmulhw zmm7, zmm0, [rdx+256] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vextracti64x4 ymm9, zmm7, 1 + vpackuswb ymm8, ymm7, ymm9 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlvq ymm8, ymm8, ymm5 + vpshufb ymm8, ymm8, ymm6 + vextracti128 xmm9, ymm8, 1 + vpblendvb xmm8, xmm8, xmm9, xmm6 + vmovdqu OWORD PTR [rcx+80], xmm8 + vmovss DWORD PTR [rcx+96], xmm9 + vpmulhw zmm7, zmm0, [rdx+320] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vextracti64x4 ymm9, zmm7, 1 + vpackuswb ymm8, ymm7, ymm9 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlvq ymm8, ymm8, ymm5 + vpshufb ymm8, ymm8, ymm6 + vextracti128 xmm9, ymm8, 1 + vpblendvb xmm8, xmm8, xmm9, xmm6 + vmovdqu OWORD PTR [rcx+100], xmm8 + vmovss DWORD PTR [rcx+116], xmm9 + vpmulhw zmm7, zmm0, [rdx+384] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vextracti64x4 ymm9, zmm7, 1 + vpackuswb ymm8, ymm7, ymm9 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlvq ymm8, ymm8, ymm5 + vpshufb ymm8, ymm8, ymm6 + vextracti128 xmm9, ymm8, 1 + vpblendvb xmm8, xmm8, xmm9, xmm6 + vmovdqu OWORD PTR [rcx+120], xmm8 + vmovss DWORD PTR [rcx+136], xmm9 + vpmulhw zmm7, zmm0, [rdx+448] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vextracti64x4 ymm9, zmm7, 1 + vpackuswb ymm8, ymm7, ymm9 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlvq ymm8, ymm8, ymm5 + vpshufb ymm8, ymm8, ymm6 + vextracti128 xmm9, ymm8, 1 + vpblendvb xmm8, xmm8, xmm9, xmm6 + vmovdqu OWORD PTR [rcx+140], xmm8 + vmovss DWORD PTR [rcx+156], xmm9 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + add rsp, 72 + ret +mlkem_compress_5_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_10_avx512_shift QWORD 0400000104000001h, 0400000104000001h + QWORD 0400000104000001h, 0400000104000001h +ptr_L_mlkem_compress_10_avx512_shift QWORD L_mlkem_compress_10_avx512_shift +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_10_avx512_shlv QWORD 000000000000000ch, 000000000000000ch + QWORD 000000000000000ch, 000000000000000ch +ptr_L_mlkem_compress_10_avx512_shlv QWORD L_mlkem_compress_10_avx512_shlv +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_10_avx512_shuf BYTE 00h, 01h, 02h, 03h, 04h, 08h, 09h, 0ah + BYTE 0bh, 0ch, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 09h, 0ah, 0bh, 0ch, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 00h, 01h, 02h, 03h, 04h, 08h +ptr_L_mlkem_compress_10_avx512_shuf QWORD L_mlkem_compress_10_avx512_shuf +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_compress_10_avx512 PROC + sub rsp, 120 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + mov rax, 20159 + vmovd xmm0, eax + vpbroadcastw zmm0, xmm0 + mov rax, 15 + vmovd xmm2, eax + vpbroadcastw zmm2, xmm2 + mov rax, 4096 + vmovd xmm3, eax + vpbroadcastw zmm3, xmm3 + mov rax, 1023 + vmovd xmm4, eax + vpbroadcastw zmm4, xmm4 + vpsllw zmm1, zmm0, 3 + vmovdqu ymm5, YMMWORD PTR L_mlkem_compress_10_avx512_shift + vmovdqu ymm6, YMMWORD PTR L_mlkem_compress_10_avx512_shlv + vmovdqu ymm7, YMMWORD PTR L_mlkem_compress_10_avx512_shuf +L_mlkem_compress_10_avx512_start: + vmovdqu64 zmm8, [rdx] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd ymm11, ymm8, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx], xmm11 + vmovss DWORD PTR [rcx+16], xmm12 + vextracti64x4 ymm11, zmm8, 1 + vpmaddwd ymm11, ymm11, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+20], xmm11 + vmovss DWORD PTR [rcx+36], xmm12 + vmovdqu64 zmm8, [rdx+64] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd ymm11, ymm8, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+40], xmm11 + vmovss DWORD PTR [rcx+56], xmm12 + vextracti64x4 ymm11, zmm8, 1 + vpmaddwd ymm11, ymm11, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+60], xmm11 + vmovss DWORD PTR [rcx+76], xmm12 + vmovdqu64 zmm8, [rdx+128] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd ymm11, ymm8, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+80], xmm11 + vmovss DWORD PTR [rcx+96], xmm12 + vextracti64x4 ymm11, zmm8, 1 + vpmaddwd ymm11, ymm11, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+100], xmm11 + vmovss DWORD PTR [rcx+116], xmm12 + vmovdqu64 zmm8, [rdx+192] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd ymm11, ymm8, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+120], xmm11 + vmovss DWORD PTR [rcx+136], xmm12 + vextracti64x4 ymm11, zmm8, 1 + vpmaddwd ymm11, ymm11, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+140], xmm11 + vmovss DWORD PTR [rcx+156], xmm12 + vmovdqu64 zmm8, [rdx+256] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd ymm11, ymm8, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+160], xmm11 + vmovss DWORD PTR [rcx+176], xmm12 + vextracti64x4 ymm11, zmm8, 1 + vpmaddwd ymm11, ymm11, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+180], xmm11 + vmovss DWORD PTR [rcx+196], xmm12 + vmovdqu64 zmm8, [rdx+320] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd ymm11, ymm8, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+200], xmm11 + vmovss DWORD PTR [rcx+216], xmm12 + vextracti64x4 ymm11, zmm8, 1 + vpmaddwd ymm11, ymm11, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+220], xmm11 + vmovss DWORD PTR [rcx+236], xmm12 + vmovdqu64 zmm8, [rdx+384] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd ymm11, ymm8, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+240], xmm11 + vmovss DWORD PTR [rcx+256], xmm12 + vextracti64x4 ymm11, zmm8, 1 + vpmaddwd ymm11, ymm11, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+260], xmm11 + vmovss DWORD PTR [rcx+276], xmm12 + vmovdqu64 zmm8, [rdx+448] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd ymm11, ymm8, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+280], xmm11 + vmovss DWORD PTR [rcx+296], xmm12 + vextracti64x4 ymm11, zmm8, 1 + vpmaddwd ymm11, ymm11, ymm5 + vpsllvd ymm11, ymm11, ymm6 + vpsrlq ymm11, ymm11, 12 + vpshufb ymm11, ymm11, ymm7 + vextracti128 xmm12, ymm11, 1 + vpblendw xmm11, xmm11, xmm12, 224 + vmovdqu OWORD PTR [rcx+300], xmm11 + vmovss DWORD PTR [rcx+316], xmm12 + add rcx, 320 + add rdx, 512 + sub r8d, 1 + jg L_mlkem_compress_10_avx512_start + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + add rsp, 120 + ret +mlkem_compress_10_avx512 ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_11_avx512_shift QWORD 0800000108000001h, 0800000108000001h + QWORD 0800000108000001h, 0800000108000001h +ptr_L_mlkem_compress_11_avx512_shift QWORD L_mlkem_compress_11_avx512_shift +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_11_avx512_shlvd DWORD 0000000ah, 00000000h, 0000000ah, 00000000h + DWORD 0000000ah, 00000000h, 0000000ah, 00000000h +ptr_L_mlkem_compress_11_avx512_shlvd QWORD L_mlkem_compress_11_avx512_shlvd +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_11_avx512_shrvq QWORD 000000000000000ah, 000000000000001eh + QWORD 000000000000000ah, 000000000000001eh +ptr_L_mlkem_compress_11_avx512_shrvq QWORD L_mlkem_compress_11_avx512_shrvq +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_11_avx512_shuf BYTE 00h, 01h, 02h, 03h, 04h, 05h, 06h, 07h + BYTE 08h, 09h, 0ah, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh + BYTE 05h, 06h, 07h, 08h, 09h, 0ah, 0ffh, 0ffh + BYTE 0ffh, 0ffh, 00h, 00h, 01h, 02h, 03h, 04h +ptr_L_mlkem_compress_11_avx512_shuf QWORD L_mlkem_compress_11_avx512_shuf +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_compress_11_avx512 PROC + sub rsp, 136 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + vmovdqu OWORD PTR [rsp+120], xmm13 + mov rax, 20159 + vmovd xmm0, eax + vpbroadcastw zmm0, xmm0 + mov rax, 36 + vmovd xmm2, eax + vpbroadcastw zmm2, xmm2 + mov rax, 8192 + vmovd xmm3, eax + vpbroadcastw zmm3, xmm3 + mov rax, 2047 + vmovd xmm4, eax + vpbroadcastw zmm4, xmm4 + vpsllw zmm1, zmm0, 3 + vmovdqu ymm5, YMMWORD PTR L_mlkem_compress_11_avx512_shift + vmovdqu ymm6, YMMWORD PTR L_mlkem_compress_11_avx512_shlvd + vmovdqu ymm7, YMMWORD PTR L_mlkem_compress_11_avx512_shrvq + vmovdqu ymm8, YMMWORD PTR L_mlkem_compress_11_avx512_shuf +L_mlkem_compress_11_avx512_start: + vmovdqu64 zmm9, [rdx] + vpmullw zmm10, zmm9, zmm1 + vpaddw zmm11, zmm9, zmm2 + vpsllw zmm9, zmm9, 3 + vpmulhw zmm9, zmm9, zmm0 + vpsubw zmm11, zmm10, zmm11 + vpandnq zmm10, zmm10, zmm11 + vpsrlw zmm10, zmm10, 15 + vpsubw zmm9, zmm9, zmm10 + vpmulhrsw zmm9, zmm9, zmm3 + vpandq zmm9, zmm9, zmm4 + vpmaddwd ymm12, ymm9, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx], xmm12 + vmovq QWORD PTR [rcx+16], xmm13 + vextracti64x4 ymm12, zmm9, 1 + vpmaddwd ymm12, ymm12, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+22], xmm12 + vmovq QWORD PTR [rcx+38], xmm13 + vmovdqu64 zmm9, [rdx+64] + vpmullw zmm10, zmm9, zmm1 + vpaddw zmm11, zmm9, zmm2 + vpsllw zmm9, zmm9, 3 + vpmulhw zmm9, zmm9, zmm0 + vpsubw zmm11, zmm10, zmm11 + vpandnq zmm10, zmm10, zmm11 + vpsrlw zmm10, zmm10, 15 + vpsubw zmm9, zmm9, zmm10 + vpmulhrsw zmm9, zmm9, zmm3 + vpandq zmm9, zmm9, zmm4 + vpmaddwd ymm12, ymm9, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+44], xmm12 + vmovq QWORD PTR [rcx+60], xmm13 + vextracti64x4 ymm12, zmm9, 1 + vpmaddwd ymm12, ymm12, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+66], xmm12 + vmovq QWORD PTR [rcx+82], xmm13 + vmovdqu64 zmm9, [rdx+128] + vpmullw zmm10, zmm9, zmm1 + vpaddw zmm11, zmm9, zmm2 + vpsllw zmm9, zmm9, 3 + vpmulhw zmm9, zmm9, zmm0 + vpsubw zmm11, zmm10, zmm11 + vpandnq zmm10, zmm10, zmm11 + vpsrlw zmm10, zmm10, 15 + vpsubw zmm9, zmm9, zmm10 + vpmulhrsw zmm9, zmm9, zmm3 + vpandq zmm9, zmm9, zmm4 + vpmaddwd ymm12, ymm9, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+88], xmm12 + vmovq QWORD PTR [rcx+104], xmm13 + vextracti64x4 ymm12, zmm9, 1 + vpmaddwd ymm12, ymm12, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+110], xmm12 + vmovq QWORD PTR [rcx+126], xmm13 + vmovdqu64 zmm9, [rdx+192] + vpmullw zmm10, zmm9, zmm1 + vpaddw zmm11, zmm9, zmm2 + vpsllw zmm9, zmm9, 3 + vpmulhw zmm9, zmm9, zmm0 + vpsubw zmm11, zmm10, zmm11 + vpandnq zmm10, zmm10, zmm11 + vpsrlw zmm10, zmm10, 15 + vpsubw zmm9, zmm9, zmm10 + vpmulhrsw zmm9, zmm9, zmm3 + vpandq zmm9, zmm9, zmm4 + vpmaddwd ymm12, ymm9, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+132], xmm12 + vmovq QWORD PTR [rcx+148], xmm13 + vextracti64x4 ymm12, zmm9, 1 + vpmaddwd ymm12, ymm12, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+154], xmm12 + vmovq QWORD PTR [rcx+170], xmm13 + vmovdqu64 zmm9, [rdx+256] + vpmullw zmm10, zmm9, zmm1 + vpaddw zmm11, zmm9, zmm2 + vpsllw zmm9, zmm9, 3 + vpmulhw zmm9, zmm9, zmm0 + vpsubw zmm11, zmm10, zmm11 + vpandnq zmm10, zmm10, zmm11 + vpsrlw zmm10, zmm10, 15 + vpsubw zmm9, zmm9, zmm10 + vpmulhrsw zmm9, zmm9, zmm3 + vpandq zmm9, zmm9, zmm4 + vpmaddwd ymm12, ymm9, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+176], xmm12 + vmovq QWORD PTR [rcx+192], xmm13 + vextracti64x4 ymm12, zmm9, 1 + vpmaddwd ymm12, ymm12, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+198], xmm12 + vmovq QWORD PTR [rcx+214], xmm13 + vmovdqu64 zmm9, [rdx+320] + vpmullw zmm10, zmm9, zmm1 + vpaddw zmm11, zmm9, zmm2 + vpsllw zmm9, zmm9, 3 + vpmulhw zmm9, zmm9, zmm0 + vpsubw zmm11, zmm10, zmm11 + vpandnq zmm10, zmm10, zmm11 + vpsrlw zmm10, zmm10, 15 + vpsubw zmm9, zmm9, zmm10 + vpmulhrsw zmm9, zmm9, zmm3 + vpandq zmm9, zmm9, zmm4 + vpmaddwd ymm12, ymm9, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+220], xmm12 + vmovq QWORD PTR [rcx+236], xmm13 + vextracti64x4 ymm12, zmm9, 1 + vpmaddwd ymm12, ymm12, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+242], xmm12 + vmovq QWORD PTR [rcx+258], xmm13 + vmovdqu64 zmm9, [rdx+384] + vpmullw zmm10, zmm9, zmm1 + vpaddw zmm11, zmm9, zmm2 + vpsllw zmm9, zmm9, 3 + vpmulhw zmm9, zmm9, zmm0 + vpsubw zmm11, zmm10, zmm11 + vpandnq zmm10, zmm10, zmm11 + vpsrlw zmm10, zmm10, 15 + vpsubw zmm9, zmm9, zmm10 + vpmulhrsw zmm9, zmm9, zmm3 + vpandq zmm9, zmm9, zmm4 + vpmaddwd ymm12, ymm9, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+264], xmm12 + vmovq QWORD PTR [rcx+280], xmm13 + vextracti64x4 ymm12, zmm9, 1 + vpmaddwd ymm12, ymm12, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+286], xmm12 + vmovq QWORD PTR [rcx+302], xmm13 + vmovdqu64 zmm9, [rdx+448] + vpmullw zmm10, zmm9, zmm1 + vpaddw zmm11, zmm9, zmm2 + vpsllw zmm9, zmm9, 3 + vpmulhw zmm9, zmm9, zmm0 + vpsubw zmm11, zmm10, zmm11 + vpandnq zmm10, zmm10, zmm11 + vpsrlw zmm10, zmm10, 15 + vpsubw zmm9, zmm9, zmm10 + vpmulhrsw zmm9, zmm9, zmm3 + vpandq zmm9, zmm9, zmm4 + vpmaddwd ymm12, ymm9, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+308], xmm12 + vmovq QWORD PTR [rcx+324], xmm13 + vextracti64x4 ymm12, zmm9, 1 + vpmaddwd ymm12, ymm12, ymm5 + vpsllvd ymm12, ymm12, ymm6 + vpsrldq ymm13, ymm12, 8 + vpsrlvq ymm12, ymm12, ymm7 + vpsllq ymm13, ymm13, 34 + vpaddq ymm12, ymm12, ymm13 + vpshufb ymm12, ymm12, ymm8 + vextracti128 xmm13, ymm12, 1 + vpblendvb xmm12, xmm12, xmm13, xmm8 + vmovdqu OWORD PTR [rcx+330], xmm12 + vmovq QWORD PTR [rcx+346], xmm13 + add rcx, 352 + add rdx, 512 + sub r8d, 1 + jg L_mlkem_compress_11_avx512_start + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + vmovdqu xmm13, OWORD PTR [rsp+120] + add rsp, 136 + ret +mlkem_compress_11_avx512 ENDP +_TEXT ENDS +ENDIF +ENDIF +IFDEF WOLFSSL_HAVE_MLKEM +IFNDEF NO_AVX512_VBMI_SUPPORT +IFNDEF HAVE_INTEL_AVX512_VBMI +HAVE_INTEL_AVX512_VBMI = 1 +ENDIF +ENDIF +IFDEF HAVE_INTEL_AVX512_VBMI +_DATA SEGMENT +ALIGN 16 +L_mlkem_from_bytes_avx512_vbmi_lo BYTE 00h, 01h, 02h, 00h, 03h, 04h, 05h, 00h + BYTE 06h, 07h, 08h, 00h, 09h, 0ah, 0bh, 00h + BYTE 0ch, 0dh, 0eh, 00h, 0fh, 10h, 11h, 00h + BYTE 12h, 13h, 14h, 00h, 15h, 16h, 17h, 00h + BYTE 18h, 19h, 1ah, 00h, 1bh, 1ch, 1dh, 00h + BYTE 1eh, 1fh, 20h, 00h, 21h, 22h, 23h, 00h + BYTE 24h, 25h, 26h, 00h, 27h, 28h, 29h, 00h + BYTE 2ah, 2bh, 2ch, 00h, 2dh, 2eh, 2fh, 00h +ptr_L_mlkem_from_bytes_avx512_vbmi_lo QWORD L_mlkem_from_bytes_avx512_vbmi_lo +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_from_bytes_avx512_vbmi_hi BYTE 10h, 11h, 12h, 00h, 13h, 14h, 15h, 00h + BYTE 16h, 17h, 18h, 00h, 19h, 1ah, 1bh, 00h + BYTE 1ch, 1dh, 1eh, 00h, 1fh, 20h, 21h, 00h + BYTE 22h, 23h, 24h, 00h, 25h, 26h, 27h, 00h + BYTE 28h, 29h, 2ah, 00h, 2bh, 2ch, 2dh, 00h + BYTE 2eh, 2fh, 30h, 00h, 31h, 32h, 33h, 00h + BYTE 34h, 35h, 36h, 00h, 37h, 38h, 39h, 00h + BYTE 3ah, 3bh, 3ch, 00h, 3dh, 3eh, 3fh, 00h +ptr_L_mlkem_from_bytes_avx512_vbmi_hi QWORD L_mlkem_from_bytes_avx512_vbmi_hi +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_from_bytes_avx512_vbmi_mask_lo DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh +ptr_L_mlkem_from_bytes_avx512_vbmi_mask_lo QWORD L_mlkem_from_bytes_avx512_vbmi_mask_lo +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_from_bytes_avx512_vbmi_mask_hi DWORD 00fff000h, 00fff000h, 00fff000h, 00fff000h + DWORD 00fff000h, 00fff000h, 00fff000h, 00fff000h + DWORD 00fff000h, 00fff000h, 00fff000h, 00fff000h + DWORD 00fff000h, 00fff000h, 00fff000h, 00fff000h +ptr_L_mlkem_from_bytes_avx512_vbmi_mask_hi QWORD L_mlkem_from_bytes_avx512_vbmi_mask_hi +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_from_bytes_avx512_vbmi PROC + sub rsp, 8 + vmovdqu64 zmm0, ptr_L_mlkem_from_bytes_avx512_vbmi_lo + vmovdqu64 zmm1, ptr_L_mlkem_from_bytes_avx512_vbmi_hi + vmovdqu64 zmm2, ptr_L_mlkem_from_bytes_avx512_vbmi_mask_lo + vmovdqu64 zmm3, ptr_L_mlkem_from_bytes_avx512_vbmi_mask_hi + vpermb zmm4, zmm0, [rdx] + vpandq zmm5, zmm4, zmm3 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm2, zmm5, 234 + vmovdqu64 [rcx], zmm4 + vpermb zmm4, zmm0, [rdx+48] + vpandq zmm5, zmm4, zmm3 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm2, zmm5, 234 + vmovdqu64 [rcx+64], zmm4 + vpermb zmm4, zmm0, [rdx+96] + vpandq zmm5, zmm4, zmm3 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm2, zmm5, 234 + vmovdqu64 [rcx+128], zmm4 + vpermb zmm4, zmm0, [rdx+144] + vpandq zmm5, zmm4, zmm3 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm2, zmm5, 234 + vmovdqu64 [rcx+192], zmm4 + vpermb zmm4, zmm0, [rdx+192] + vpandq zmm5, zmm4, zmm3 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm2, zmm5, 234 + vmovdqu64 [rcx+256], zmm4 + vpermb zmm4, zmm0, [rdx+240] + vpandq zmm5, zmm4, zmm3 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm2, zmm5, 234 + vmovdqu64 [rcx+320], zmm4 + vpermb zmm4, zmm0, [rdx+288] + vpandq zmm5, zmm4, zmm3 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm2, zmm5, 234 + vmovdqu64 [rcx+384], zmm4 + vpermb zmm4, zmm1, [rdx+320] + vpandq zmm5, zmm4, zmm3 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm2, zmm5, 234 + vmovdqu64 [rcx+448], zmm4 + vzeroupper + add rsp, 8 + ret +mlkem_from_bytes_avx512_vbmi ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_to_bytes_avx512_vbmi_mask DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh +ptr_L_mlkem_to_bytes_avx512_vbmi_mask QWORD L_mlkem_to_bytes_avx512_vbmi_mask +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_to_bytes_avx512_vbmi_permb BYTE 00h, 01h, 02h, 04h, 05h, 06h, 08h, 09h + BYTE 0ah, 0ch, 0dh, 0eh, 10h, 11h, 12h, 14h + BYTE 15h, 16h, 18h, 19h, 1ah, 1ch, 1dh, 1eh + BYTE 20h, 21h, 22h, 24h, 25h, 26h, 28h, 29h + BYTE 2ah, 2ch, 2dh, 2eh, 30h, 31h, 32h, 34h + BYTE 35h, 36h, 38h, 39h, 3ah, 3ch, 3dh, 3eh + BYTE 00h, 01h, 02h, 04h, 00h, 01h, 02h, 04h + BYTE 00h, 01h, 02h, 04h, 00h, 01h, 02h, 04h +ptr_L_mlkem_to_bytes_avx512_vbmi_permb QWORD L_mlkem_to_bytes_avx512_vbmi_permb +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_to_bytes_avx512_vbmi PROC + sub rsp, 24 + vmovdqu OWORD PTR [rsp+8], xmm6 + mov rax, 3329 + vmovd xmm0, eax + vpbroadcastw zmm0, xmm0 + vmovdqu64 zmm1, ptr_L_mlkem_to_bytes_avx512_vbmi_mask + vmovdqu64 zmm2, ptr_L_mlkem_to_bytes_avx512_vbmi_permb + vmovdqu64 zmm3, [rdx] + vpsubw zmm4, zmm3, zmm0 + vpsraw zmm5, zmm4, 15 + vpandq zmm5, zmm5, zmm0 + vpaddw zmm3, zmm5, zmm4 + vpsrld zmm4, zmm3, 16 + vpslld zmm4, zmm4, 12 + vpternlogd zmm3, zmm1, zmm4, 234 + vpermb zmm6, zmm2, zmm3 + vmovdqu64 [rcx], zmm6 + vmovdqu64 zmm3, [rdx+64] + vpsubw zmm4, zmm3, zmm0 + vpsraw zmm5, zmm4, 15 + vpandq zmm5, zmm5, zmm0 + vpaddw zmm3, zmm5, zmm4 + vpsrld zmm4, zmm3, 16 + vpslld zmm4, zmm4, 12 + vpternlogd zmm3, zmm1, zmm4, 234 + vpermb zmm6, zmm2, zmm3 + vmovdqu64 [rcx+48], zmm6 + vmovdqu64 zmm3, [rdx+128] + vpsubw zmm4, zmm3, zmm0 + vpsraw zmm5, zmm4, 15 + vpandq zmm5, zmm5, zmm0 + vpaddw zmm3, zmm5, zmm4 + vpsrld zmm4, zmm3, 16 + vpslld zmm4, zmm4, 12 + vpternlogd zmm3, zmm1, zmm4, 234 + vpermb zmm6, zmm2, zmm3 + vmovdqu64 [rcx+96], zmm6 + vmovdqu64 zmm3, [rdx+192] + vpsubw zmm4, zmm3, zmm0 + vpsraw zmm5, zmm4, 15 + vpandq zmm5, zmm5, zmm0 + vpaddw zmm3, zmm5, zmm4 + vpsrld zmm4, zmm3, 16 + vpslld zmm4, zmm4, 12 + vpternlogd zmm3, zmm1, zmm4, 234 + vpermb zmm6, zmm2, zmm3 + vmovdqu64 [rcx+144], zmm6 + vmovdqu64 zmm3, [rdx+256] + vpsubw zmm4, zmm3, zmm0 + vpsraw zmm5, zmm4, 15 + vpandq zmm5, zmm5, zmm0 + vpaddw zmm3, zmm5, zmm4 + vpsrld zmm4, zmm3, 16 + vpslld zmm4, zmm4, 12 + vpternlogd zmm3, zmm1, zmm4, 234 + vpermb zmm6, zmm2, zmm3 + vmovdqu64 [rcx+192], zmm6 + vmovdqu64 zmm3, [rdx+320] + vpsubw zmm4, zmm3, zmm0 + vpsraw zmm5, zmm4, 15 + vpandq zmm5, zmm5, zmm0 + vpaddw zmm3, zmm5, zmm4 + vpsrld zmm4, zmm3, 16 + vpslld zmm4, zmm4, 12 + vpternlogd zmm3, zmm1, zmm4, 234 + vpermb zmm6, zmm2, zmm3 + vmovdqu64 [rcx+240], zmm6 + vmovdqu64 zmm3, [rdx+384] + vpsubw zmm4, zmm3, zmm0 + vpsraw zmm5, zmm4, 15 + vpandq zmm5, zmm5, zmm0 + vpaddw zmm3, zmm5, zmm4 + vpsrld zmm4, zmm3, 16 + vpslld zmm4, zmm4, 12 + vpternlogd zmm3, zmm1, zmm4, 234 + vpermb zmm6, zmm2, zmm3 + vmovdqu64 [rcx+288], zmm6 + vmovdqu64 zmm3, [rdx+448] + vpsubw zmm4, zmm3, zmm0 + vpsraw zmm5, zmm4, 15 + vpandq zmm5, zmm5, zmm0 + vpaddw zmm3, zmm5, zmm4 + vpsrld zmm4, zmm3, 16 + vpslld zmm4, zmm4, 12 + vpternlogd zmm3, zmm1, zmm4, 234 + vpermb zmm6, zmm2, zmm3 + vmovdqu YMMWORD PTR [rcx+336], ymm6 + vextracti32x4 xmm4, zmm6, 2 + vmovdqu OWORD PTR [rcx+368], xmm4 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + add rsp, 24 + ret +mlkem_to_bytes_avx512_vbmi ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_rej_uniform_avx512_vbmi_permb BYTE 00h, 01h, 02h, 00h, 03h, 04h, 05h, 00h + BYTE 06h, 07h, 08h, 00h, 09h, 0ah, 0bh, 00h + BYTE 0ch, 0dh, 0eh, 00h, 0fh, 10h, 11h, 00h + BYTE 12h, 13h, 14h, 00h, 15h, 16h, 17h, 00h + BYTE 18h, 19h, 1ah, 00h, 1bh, 1ch, 1dh, 00h + BYTE 1eh, 1fh, 20h, 00h, 21h, 22h, 23h, 00h + BYTE 24h, 25h, 26h, 00h, 27h, 28h, 29h, 00h + BYTE 2ah, 2bh, 2ch, 00h, 2dh, 2eh, 2fh, 00h +ptr_L_mlkem_rej_uniform_avx512_vbmi_permb QWORD L_mlkem_rej_uniform_avx512_vbmi_permb +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_rej_uniform_avx512_vbmi_mask_lo DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh +ptr_L_mlkem_rej_uniform_avx512_vbmi_mask_lo QWORD L_mlkem_rej_uniform_avx512_vbmi_mask_lo +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_rej_uniform_avx512_vbmi_mask_hi DWORD 00fff000h, 00fff000h, 00fff000h, 00fff000h + DWORD 00fff000h, 00fff000h, 00fff000h, 00fff000h + DWORD 00fff000h, 00fff000h, 00fff000h, 00fff000h + DWORD 00fff000h, 00fff000h, 00fff000h, 00fff000h +ptr_L_mlkem_rej_uniform_avx512_vbmi_mask_hi QWORD L_mlkem_rej_uniform_avx512_vbmi_mask_hi +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_rej_uniform_avx512_vbmi PROC + push rbx + push r12 + sub rsp, 8 + mov eax, edx + mov r12, 3329 + vmovd xmm0, r12d + vpbroadcastw zmm0, xmm0 + vmovdqu64 zmm1, ptr_L_mlkem_rej_uniform_avx512_vbmi_permb + vmovdqu64 zmm2, ptr_L_mlkem_rej_uniform_avx512_vbmi_mask_lo + vmovdqu64 zmm3, ptr_L_mlkem_rej_uniform_avx512_vbmi_mask_hi +L_mlkem_rej_uniform_avx512_vbmi_fast: + cmp edx, 32 + jl L_mlkem_rej_uniform_avx512_vbmi_fast_end + cmp r9d, 64 + jl L_mlkem_rej_uniform_avx512_vbmi_fast_end + vpermb zmm4, zmm1, [r8] + vpandq zmm5, zmm4, zmm3 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm2, zmm5, 234 + vpcmpw k1, zmm4, zmm0, 1 + vpcompressw [rcx]{k1}, zmm4 + kmovd ebx, k1 + popcnt ebx, ebx + lea rcx, QWORD PTR [rcx+2*rbx] + sub edx, ebx + add r8, 48 + sub r9d, 48 + jmp L_mlkem_rej_uniform_avx512_vbmi_fast +L_mlkem_rej_uniform_avx512_vbmi_fast_end: +L_mlkem_rej_uniform_avx512_vbmi_tail: + cmp edx, 0 + je L_mlkem_rej_uniform_avx512_vbmi_tail_end + cmp r9d, 3 + jl L_mlkem_rej_uniform_avx512_vbmi_tail_end + movzx r10d, WORD PTR [r8] + and r10d, 4095 + movzx r11d, WORD PTR [r8+1] + shr r11d, 4 + cmp r10d, 3329 + jge L_mlkem_rej_uniform_avx512_vbmi_skip0 + mov WORD PTR [rcx], r10w + add rcx, 2 + sub edx, 1 + je L_mlkem_rej_uniform_avx512_vbmi_tail_end +L_mlkem_rej_uniform_avx512_vbmi_skip0: + cmp r11d, 3329 + jge L_mlkem_rej_uniform_avx512_vbmi_skip1 + mov WORD PTR [rcx], r11w + add rcx, 2 + sub edx, 1 + je L_mlkem_rej_uniform_avx512_vbmi_tail_end +L_mlkem_rej_uniform_avx512_vbmi_skip1: + add r8, 3 + sub r9d, 3 + jmp L_mlkem_rej_uniform_avx512_vbmi_tail +L_mlkem_rej_uniform_avx512_vbmi_tail_end: + sub eax, edx + vzeroupper + add rsp, 8 + pop r12 + pop rbx + ret +mlkem_rej_uniform_avx512_vbmi ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_rej_uniform_n_avx512_vbmi_permb BYTE 00h, 01h, 02h, 00h, 03h, 04h, 05h, 00h + BYTE 06h, 07h, 08h, 00h, 09h, 0ah, 0bh, 00h + BYTE 0ch, 0dh, 0eh, 00h, 0fh, 10h, 11h, 00h + BYTE 12h, 13h, 14h, 00h, 15h, 16h, 17h, 00h + BYTE 18h, 19h, 1ah, 00h, 1bh, 1ch, 1dh, 00h + BYTE 1eh, 1fh, 20h, 00h, 21h, 22h, 23h, 00h + BYTE 24h, 25h, 26h, 00h, 27h, 28h, 29h, 00h + BYTE 2ah, 2bh, 2ch, 00h, 2dh, 2eh, 2fh, 00h +ptr_L_mlkem_rej_uniform_n_avx512_vbmi_permb QWORD L_mlkem_rej_uniform_n_avx512_vbmi_permb +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_rej_uniform_n_avx512_vbmi_mask_lo DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh + DWORD 00000fffh, 00000fffh, 00000fffh, 00000fffh +ptr_L_mlkem_rej_uniform_n_avx512_vbmi_mask_lo QWORD L_mlkem_rej_uniform_n_avx512_vbmi_mask_lo +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_rej_uniform_n_avx512_vbmi_mask_hi DWORD 00fff000h, 00fff000h, 00fff000h, 00fff000h + DWORD 00fff000h, 00fff000h, 00fff000h, 00fff000h + DWORD 00fff000h, 00fff000h, 00fff000h, 00fff000h + DWORD 00fff000h, 00fff000h, 00fff000h, 00fff000h +ptr_L_mlkem_rej_uniform_n_avx512_vbmi_mask_hi QWORD L_mlkem_rej_uniform_n_avx512_vbmi_mask_hi +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_rej_uniform_n_avx512_vbmi PROC + push rbx + push r12 + sub rsp, 8 + mov eax, edx + mov r12, 3329 + vmovd xmm0, r12d + vpbroadcastw zmm0, xmm0 + vmovdqu64 zmm1, ptr_L_mlkem_rej_uniform_n_avx512_vbmi_permb + vmovdqu64 zmm2, ptr_L_mlkem_rej_uniform_n_avx512_vbmi_mask_lo + vmovdqu64 zmm3, ptr_L_mlkem_rej_uniform_n_avx512_vbmi_mask_hi +L_mlkem_rej_uniform_n_avx512_vbmi_fast: + cmp edx, 32 + jl L_mlkem_rej_uniform_n_avx512_vbmi_fast_end + cmp r9d, 64 + jl L_mlkem_rej_uniform_n_avx512_vbmi_fast_end + vpermb zmm4, zmm1, [r8] + vpandq zmm5, zmm4, zmm3 + vpslld zmm5, zmm5, 4 + vpternlogd zmm4, zmm2, zmm5, 234 + vpcmpw k1, zmm4, zmm0, 1 + vpcompressw [rcx]{k1}, zmm4 + kmovd ebx, k1 + popcnt ebx, ebx + lea rcx, QWORD PTR [rcx+2*rbx] + sub edx, ebx + add r8, 48 + sub r9d, 48 + jmp L_mlkem_rej_uniform_n_avx512_vbmi_fast +L_mlkem_rej_uniform_n_avx512_vbmi_fast_end: +L_mlkem_rej_uniform_n_avx512_vbmi_tail: + cmp edx, 0 + je L_mlkem_rej_uniform_n_avx512_vbmi_tail_end + cmp r9d, 3 + jl L_mlkem_rej_uniform_n_avx512_vbmi_tail_end + movzx r10d, WORD PTR [r8] + and r10d, 4095 + movzx r11d, WORD PTR [r8+1] + shr r11d, 4 + cmp r10d, 3329 + jge L_mlkem_rej_uniform_n_avx512_vbmi_skip0 + mov WORD PTR [rcx], r10w + add rcx, 2 + sub edx, 1 + je L_mlkem_rej_uniform_n_avx512_vbmi_tail_end +L_mlkem_rej_uniform_n_avx512_vbmi_skip0: + cmp r11d, 3329 + jge L_mlkem_rej_uniform_n_avx512_vbmi_skip1 + mov WORD PTR [rcx], r11w + add rcx, 2 + sub edx, 1 + je L_mlkem_rej_uniform_n_avx512_vbmi_tail_end +L_mlkem_rej_uniform_n_avx512_vbmi_skip1: + add r8, 3 + sub r9d, 3 + jmp L_mlkem_rej_uniform_n_avx512_vbmi_tail +L_mlkem_rej_uniform_n_avx512_vbmi_tail_end: + sub eax, edx + vzeroupper + add rsp, 8 + pop r12 + pop rbx + ret +mlkem_rej_uniform_n_avx512_vbmi ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_4_avx512_vbmi_gather BYTE 00h, 04h, 08h, 0ch, 10h, 14h, 18h, 1ch + BYTE 20h, 24h, 28h, 2ch, 30h, 34h, 38h, 3ch + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h +ptr_L_mlkem_compress_4_avx512_vbmi_gather QWORD L_mlkem_compress_4_avx512_vbmi_gather +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_compress_4_avx512_vbmi PROC + sub rsp, 24 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu64 zmm0, ptr_L_mlkem_compress_4_avx512_vbmi_gather + mov rax, 20159 + vmovd xmm1, eax + vpbroadcastw zmm1, xmm1 + mov rax, 512 + vmovd xmm2, eax + vpbroadcastw zmm2, xmm2 + mov rax, 15 + vmovd xmm3, eax + vpbroadcastw zmm3, xmm3 + vpmulhw zmm4, zmm1, [rdx] + vpmulhrsw zmm4, zmm4, zmm2 + vpandq zmm4, zmm4, zmm3 + vpsrld zmm5, zmm4, 12 + vpord zmm4, zmm4, zmm5 + vpermb zmm6, zmm0, zmm4 + vmovdqu OWORD PTR [rcx], xmm6 + vpmulhw zmm4, zmm1, [rdx+64] + vpmulhrsw zmm4, zmm4, zmm2 + vpandq zmm4, zmm4, zmm3 + vpsrld zmm5, zmm4, 12 + vpord zmm4, zmm4, zmm5 + vpermb zmm6, zmm0, zmm4 + vmovdqu OWORD PTR [rcx+16], xmm6 + vpmulhw zmm4, zmm1, [rdx+128] + vpmulhrsw zmm4, zmm4, zmm2 + vpandq zmm4, zmm4, zmm3 + vpsrld zmm5, zmm4, 12 + vpord zmm4, zmm4, zmm5 + vpermb zmm6, zmm0, zmm4 + vmovdqu OWORD PTR [rcx+32], xmm6 + vpmulhw zmm4, zmm1, [rdx+192] + vpmulhrsw zmm4, zmm4, zmm2 + vpandq zmm4, zmm4, zmm3 + vpsrld zmm5, zmm4, 12 + vpord zmm4, zmm4, zmm5 + vpermb zmm6, zmm0, zmm4 + vmovdqu OWORD PTR [rcx+48], xmm6 + vpmulhw zmm4, zmm1, [rdx+256] + vpmulhrsw zmm4, zmm4, zmm2 + vpandq zmm4, zmm4, zmm3 + vpsrld zmm5, zmm4, 12 + vpord zmm4, zmm4, zmm5 + vpermb zmm6, zmm0, zmm4 + vmovdqu OWORD PTR [rcx+64], xmm6 + vpmulhw zmm4, zmm1, [rdx+320] + vpmulhrsw zmm4, zmm4, zmm2 + vpandq zmm4, zmm4, zmm3 + vpsrld zmm5, zmm4, 12 + vpord zmm4, zmm4, zmm5 + vpermb zmm6, zmm0, zmm4 + vmovdqu OWORD PTR [rcx+80], xmm6 + vpmulhw zmm4, zmm1, [rdx+384] + vpmulhrsw zmm4, zmm4, zmm2 + vpandq zmm4, zmm4, zmm3 + vpsrld zmm5, zmm4, 12 + vpord zmm4, zmm4, zmm5 + vpermb zmm6, zmm0, zmm4 + vmovdqu OWORD PTR [rcx+96], xmm6 + vpmulhw zmm4, zmm1, [rdx+448] + vpmulhrsw zmm4, zmm4, zmm2 + vpandq zmm4, zmm4, zmm3 + vpsrld zmm5, zmm4, 12 + vpord zmm4, zmm4, zmm5 + vpermb zmm6, zmm0, zmm4 + vmovdqu OWORD PTR [rcx+112], xmm6 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + add rsp, 24 + ret +mlkem_compress_4_avx512_vbmi ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_5_avx512_vbmi_shift1 WORD 2001h, 2001h, 2001h, 2001h, 2001h, 2001h, 2001h, 2001h + WORD 2001h, 2001h, 2001h, 2001h, 2001h, 2001h, 2001h, 2001h +ptr_L_mlkem_compress_5_avx512_vbmi_shift1 QWORD L_mlkem_compress_5_avx512_vbmi_shift1 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_5_avx512_vbmi_shift2 DWORD 04000001h, 04000001h, 04000001h, 04000001h + DWORD 04000001h, 04000001h, 04000001h, 04000001h +ptr_L_mlkem_compress_5_avx512_vbmi_shift2 QWORD L_mlkem_compress_5_avx512_vbmi_shift2 +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_5_avx512_vbmi_shlv QWORD 000000000000000ch, 000000000000000ch + QWORD 000000000000000ch, 000000000000000ch +ptr_L_mlkem_compress_5_avx512_vbmi_shlv QWORD L_mlkem_compress_5_avx512_vbmi_shlv +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_5_avx512_vbmi_gather BYTE 00h, 01h, 02h, 03h, 04h, 08h, 09h, 0ah + BYTE 0bh, 0ch, 10h, 11h, 12h, 13h, 14h, 18h + BYTE 19h, 1ah, 1bh, 1ch, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h +ptr_L_mlkem_compress_5_avx512_vbmi_gather QWORD L_mlkem_compress_5_avx512_vbmi_gather +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_compress_5_avx512_vbmi PROC + sub rsp, 72 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + mov rax, 20159 + vmovd xmm0, eax + vpbroadcastw zmm0, xmm0 + mov rax, 1024 + vmovd xmm1, eax + vpbroadcastw zmm1, xmm1 + mov rax, 31 + vmovd xmm2, eax + vpbroadcastw zmm2, xmm2 + vmovdqu ymm3, YMMWORD PTR L_mlkem_compress_5_avx512_vbmi_shift1 + vmovdqu ymm4, YMMWORD PTR L_mlkem_compress_5_avx512_vbmi_shift2 + vmovdqu ymm5, YMMWORD PTR L_mlkem_compress_5_avx512_vbmi_shlv + vmovdqu64 zmm6, ptr_L_mlkem_compress_5_avx512_vbmi_gather + vpmulhw zmm7, zmm0, [rdx] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vpmovwb ymm8, zmm7 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlq ymm8, ymm8, 12 + vpermb ymm9, ymm6, ymm8 + vmovdqu OWORD PTR [rcx], xmm9 + vextracti128 xmm8, ymm9, 1 + vmovss DWORD PTR [rcx+16], xmm8 + vpmulhw zmm7, zmm0, [rdx+64] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vpmovwb ymm8, zmm7 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlq ymm8, ymm8, 12 + vpermb ymm9, ymm6, ymm8 + vmovdqu OWORD PTR [rcx+20], xmm9 + vextracti128 xmm8, ymm9, 1 + vmovss DWORD PTR [rcx+36], xmm8 + vpmulhw zmm7, zmm0, [rdx+128] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vpmovwb ymm8, zmm7 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlq ymm8, ymm8, 12 + vpermb ymm9, ymm6, ymm8 + vmovdqu OWORD PTR [rcx+40], xmm9 + vextracti128 xmm8, ymm9, 1 + vmovss DWORD PTR [rcx+56], xmm8 + vpmulhw zmm7, zmm0, [rdx+192] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vpmovwb ymm8, zmm7 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlq ymm8, ymm8, 12 + vpermb ymm9, ymm6, ymm8 + vmovdqu OWORD PTR [rcx+60], xmm9 + vextracti128 xmm8, ymm9, 1 + vmovss DWORD PTR [rcx+76], xmm8 + vpmulhw zmm7, zmm0, [rdx+256] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vpmovwb ymm8, zmm7 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlq ymm8, ymm8, 12 + vpermb ymm9, ymm6, ymm8 + vmovdqu OWORD PTR [rcx+80], xmm9 + vextracti128 xmm8, ymm9, 1 + vmovss DWORD PTR [rcx+96], xmm8 + vpmulhw zmm7, zmm0, [rdx+320] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vpmovwb ymm8, zmm7 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlq ymm8, ymm8, 12 + vpermb ymm9, ymm6, ymm8 + vmovdqu OWORD PTR [rcx+100], xmm9 + vextracti128 xmm8, ymm9, 1 + vmovss DWORD PTR [rcx+116], xmm8 + vpmulhw zmm7, zmm0, [rdx+384] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vpmovwb ymm8, zmm7 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlq ymm8, ymm8, 12 + vpermb ymm9, ymm6, ymm8 + vmovdqu OWORD PTR [rcx+120], xmm9 + vextracti128 xmm8, ymm9, 1 + vmovss DWORD PTR [rcx+136], xmm8 + vpmulhw zmm7, zmm0, [rdx+448] + vpmulhrsw zmm7, zmm7, zmm1 + vpandq zmm7, zmm7, zmm2 + vpmovwb ymm8, zmm7 + vpmaddubsw ymm8, ymm8, ymm3 + vpmaddwd ymm8, ymm8, ymm4 + vpsllvd ymm8, ymm8, ymm5 + vpsrlq ymm8, ymm8, 12 + vpermb ymm9, ymm6, ymm8 + vmovdqu OWORD PTR [rcx+140], xmm9 + vextracti128 xmm8, ymm9, 1 + vmovss DWORD PTR [rcx+156], xmm8 + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + add rsp, 72 + ret +mlkem_compress_5_avx512_vbmi ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_10_avx512_vbmi_shift QWORD 0400000104000001h, 0400000104000001h + QWORD 0400000104000001h, 0400000104000001h + QWORD 0400000104000001h, 0400000104000001h + QWORD 0400000104000001h, 0400000104000001h +ptr_L_mlkem_compress_10_avx512_vbmi_shift QWORD L_mlkem_compress_10_avx512_vbmi_shift +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_10_avx512_vbmi_shlv QWORD 000000000000000ch, 000000000000000ch + QWORD 000000000000000ch, 000000000000000ch + QWORD 000000000000000ch, 000000000000000ch + QWORD 000000000000000ch, 000000000000000ch +ptr_L_mlkem_compress_10_avx512_vbmi_shlv QWORD L_mlkem_compress_10_avx512_vbmi_shlv +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_compress_10_avx512_vbmi_gather BYTE 00h, 01h, 02h, 03h, 04h, 08h, 09h, 0ah + BYTE 0bh, 0ch, 10h, 11h, 12h, 13h, 14h, 18h + BYTE 19h, 1ah, 1bh, 1ch, 20h, 21h, 22h, 23h + BYTE 24h, 28h, 29h, 2ah, 2bh, 2ch, 30h, 31h + BYTE 32h, 33h, 34h, 38h, 39h, 3ah, 3bh, 3ch + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h + BYTE 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h +ptr_L_mlkem_compress_10_avx512_vbmi_gather QWORD L_mlkem_compress_10_avx512_vbmi_gather +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_compress_10_avx512_vbmi PROC + sub rsp, 120 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu OWORD PTR [rsp+40], xmm8 + vmovdqu OWORD PTR [rsp+56], xmm9 + vmovdqu OWORD PTR [rsp+72], xmm10 + vmovdqu OWORD PTR [rsp+88], xmm11 + vmovdqu OWORD PTR [rsp+104], xmm12 + mov rax, 20159 + vmovd xmm0, eax + vpbroadcastw zmm0, xmm0 + mov rax, 15 + vmovd xmm2, eax + vpbroadcastw zmm2, xmm2 + mov rax, 4096 + vmovd xmm3, eax + vpbroadcastw zmm3, xmm3 + mov rax, 1023 + vmovd xmm4, eax + vpbroadcastw zmm4, xmm4 + vpsllw zmm1, zmm0, 3 + vmovdqu64 zmm5, ptr_L_mlkem_compress_10_avx512_vbmi_shift + vmovdqu64 zmm6, ptr_L_mlkem_compress_10_avx512_vbmi_shlv + vmovdqu64 zmm7, ptr_L_mlkem_compress_10_avx512_vbmi_gather +L_mlkem_compress_10_avx512_vbmi_start: + vmovdqu64 zmm8, [rdx] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd zmm11, zmm8, zmm5 + vpsllvd zmm11, zmm11, zmm6 + vpsrlq zmm11, zmm11, 12 + vpermb zmm12, zmm7, zmm11 + vmovdqu YMMWORD PTR [rcx], ymm12 + vextracti32x4 xmm9, zmm12, 2 + vmovq QWORD PTR [rcx+32], xmm9 + vmovdqu64 zmm8, [rdx+64] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd zmm11, zmm8, zmm5 + vpsllvd zmm11, zmm11, zmm6 + vpsrlq zmm11, zmm11, 12 + vpermb zmm12, zmm7, zmm11 + vmovdqu YMMWORD PTR [rcx+40], ymm12 + vextracti32x4 xmm9, zmm12, 2 + vmovq QWORD PTR [rcx+72], xmm9 + vmovdqu64 zmm8, [rdx+128] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd zmm11, zmm8, zmm5 + vpsllvd zmm11, zmm11, zmm6 + vpsrlq zmm11, zmm11, 12 + vpermb zmm12, zmm7, zmm11 + vmovdqu YMMWORD PTR [rcx+80], ymm12 + vextracti32x4 xmm9, zmm12, 2 + vmovq QWORD PTR [rcx+112], xmm9 + vmovdqu64 zmm8, [rdx+192] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd zmm11, zmm8, zmm5 + vpsllvd zmm11, zmm11, zmm6 + vpsrlq zmm11, zmm11, 12 + vpermb zmm12, zmm7, zmm11 + vmovdqu YMMWORD PTR [rcx+120], ymm12 + vextracti32x4 xmm9, zmm12, 2 + vmovq QWORD PTR [rcx+152], xmm9 + vmovdqu64 zmm8, [rdx+256] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd zmm11, zmm8, zmm5 + vpsllvd zmm11, zmm11, zmm6 + vpsrlq zmm11, zmm11, 12 + vpermb zmm12, zmm7, zmm11 + vmovdqu YMMWORD PTR [rcx+160], ymm12 + vextracti32x4 xmm9, zmm12, 2 + vmovq QWORD PTR [rcx+192], xmm9 + vmovdqu64 zmm8, [rdx+320] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd zmm11, zmm8, zmm5 + vpsllvd zmm11, zmm11, zmm6 + vpsrlq zmm11, zmm11, 12 + vpermb zmm12, zmm7, zmm11 + vmovdqu YMMWORD PTR [rcx+200], ymm12 + vextracti32x4 xmm9, zmm12, 2 + vmovq QWORD PTR [rcx+232], xmm9 + vmovdqu64 zmm8, [rdx+384] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd zmm11, zmm8, zmm5 + vpsllvd zmm11, zmm11, zmm6 + vpsrlq zmm11, zmm11, 12 + vpermb zmm12, zmm7, zmm11 + vmovdqu YMMWORD PTR [rcx+240], ymm12 + vextracti32x4 xmm9, zmm12, 2 + vmovq QWORD PTR [rcx+272], xmm9 + vmovdqu64 zmm8, [rdx+448] + vpmullw zmm9, zmm8, zmm1 + vpaddw zmm10, zmm8, zmm2 + vpsllw zmm8, zmm8, 3 + vpmulhuw zmm8, zmm8, zmm0 + vpsubw zmm10, zmm9, zmm10 + vpandnq zmm9, zmm9, zmm10 + vpsrlw zmm9, zmm9, 15 + vpsubw zmm8, zmm8, zmm9 + vpmulhrsw zmm8, zmm8, zmm3 + vpandq zmm8, zmm8, zmm4 + vpmaddwd zmm11, zmm8, zmm5 + vpsllvd zmm11, zmm11, zmm6 + vpsrlq zmm11, zmm11, 12 + vpermb zmm12, zmm7, zmm11 + vmovdqu YMMWORD PTR [rcx+280], ymm12 + vextracti32x4 xmm9, zmm12, 2 + vmovq QWORD PTR [rcx+312], xmm9 + add rcx, 320 + add rdx, 512 + sub r8d, 1 + jg L_mlkem_compress_10_avx512_vbmi_start + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + vmovdqu xmm8, OWORD PTR [rsp+40] + vmovdqu xmm9, OWORD PTR [rsp+56] + vmovdqu xmm10, OWORD PTR [rsp+72] + vmovdqu xmm11, OWORD PTR [rsp+88] + vmovdqu xmm12, OWORD PTR [rsp+104] + add rsp, 120 + ret +mlkem_compress_10_avx512_vbmi ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_10_avx512_vbmi_mask DWORD 7fe01ff8h, 7fe01ff8h, 7fe01ff8h, 7fe01ff8h + DWORD 7fe01ff8h, 7fe01ff8h, 7fe01ff8h, 7fe01ff8h + DWORD 7fe01ff8h, 7fe01ff8h, 7fe01ff8h, 7fe01ff8h + DWORD 7fe01ff8h, 7fe01ff8h, 7fe01ff8h, 7fe01ff8h +ptr_L_mlkem_decompress_10_avx512_vbmi_mask QWORD L_mlkem_decompress_10_avx512_vbmi_mask +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_10_avx512_vbmi_sllv QWORD 0000000000000004h, 0000000000000004h + QWORD 0000000000000004h, 0000000000000004h + QWORD 0000000000000004h, 0000000000000004h + QWORD 0000000000000004h, 0000000000000004h +ptr_L_mlkem_decompress_10_avx512_vbmi_sllv QWORD L_mlkem_decompress_10_avx512_vbmi_sllv +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_10_avx512_vbmi_q DWORD 0d013404h, 0d013404h, 0d013404h, 0d013404h + DWORD 0d013404h, 0d013404h, 0d013404h, 0d013404h + DWORD 0d013404h, 0d013404h, 0d013404h, 0d013404h + DWORD 0d013404h, 0d013404h, 0d013404h, 0d013404h +ptr_L_mlkem_decompress_10_avx512_vbmi_q QWORD L_mlkem_decompress_10_avx512_vbmi_q +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_10_avx512_vbmi_lo BYTE 00h, 01h, 01h, 02h, 02h, 03h, 03h, 04h + BYTE 05h, 06h, 06h, 07h, 07h, 08h, 08h, 09h + BYTE 0ah, 0bh, 0bh, 0ch, 0ch, 0dh, 0dh, 0eh + BYTE 0fh, 10h, 10h, 11h, 11h, 12h, 12h, 13h + BYTE 14h, 15h, 15h, 16h, 16h, 17h, 17h, 18h + BYTE 19h, 1ah, 1ah, 1bh, 1bh, 1ch, 1ch, 1dh + BYTE 1eh, 1fh, 1fh, 20h, 20h, 21h, 21h, 22h + BYTE 23h, 24h, 24h, 25h, 25h, 26h, 26h, 27h +ptr_L_mlkem_decompress_10_avx512_vbmi_lo QWORD L_mlkem_decompress_10_avx512_vbmi_lo +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_10_avx512_vbmi_hi BYTE 18h, 19h, 19h, 1ah, 1ah, 1bh, 1bh, 1ch + BYTE 1dh, 1eh, 1eh, 1fh, 1fh, 20h, 20h, 21h + BYTE 22h, 23h, 23h, 24h, 24h, 25h, 25h, 26h + BYTE 27h, 28h, 28h, 29h, 29h, 2ah, 2ah, 2bh + BYTE 2ch, 2dh, 2dh, 2eh, 2eh, 2fh, 2fh, 30h + BYTE 31h, 32h, 32h, 33h, 33h, 34h, 34h, 35h + BYTE 36h, 37h, 37h, 38h, 38h, 39h, 39h, 3ah + BYTE 3bh, 3ch, 3ch, 3dh, 3dh, 3eh, 3eh, 3fh +ptr_L_mlkem_decompress_10_avx512_vbmi_hi QWORD L_mlkem_decompress_10_avx512_vbmi_hi +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_decompress_10_avx512_vbmi PROC + sub rsp, 8 + vmovdqu64 zmm0, ptr_L_mlkem_decompress_10_avx512_vbmi_mask + vmovdqu64 zmm1, ptr_L_mlkem_decompress_10_avx512_vbmi_q + vmovdqu64 zmm2, ptr_L_mlkem_decompress_10_avx512_vbmi_sllv + vmovdqu64 zmm3, ptr_L_mlkem_decompress_10_avx512_vbmi_lo + vmovdqu64 zmm4, ptr_L_mlkem_decompress_10_avx512_vbmi_hi +L_mlkem_decompress_10_avx512_vbmi_start: + vpermb zmm5, zmm3, [rdx] + vpsllvd zmm5, zmm5, zmm2 + vpsrlw zmm5, zmm5, 1 + vpandq zmm5, zmm5, zmm0 + vpmulhrsw zmm5, zmm5, zmm1 + vmovdqu64 [rcx], zmm5 + vpermb zmm5, zmm3, [rdx+40] + vpsllvd zmm5, zmm5, zmm2 + vpsrlw zmm5, zmm5, 1 + vpandq zmm5, zmm5, zmm0 + vpmulhrsw zmm5, zmm5, zmm1 + vmovdqu64 [rcx+64], zmm5 + vpermb zmm5, zmm3, [rdx+80] + vpsllvd zmm5, zmm5, zmm2 + vpsrlw zmm5, zmm5, 1 + vpandq zmm5, zmm5, zmm0 + vpmulhrsw zmm5, zmm5, zmm1 + vmovdqu64 [rcx+128], zmm5 + vpermb zmm5, zmm3, [rdx+120] + vpsllvd zmm5, zmm5, zmm2 + vpsrlw zmm5, zmm5, 1 + vpandq zmm5, zmm5, zmm0 + vpmulhrsw zmm5, zmm5, zmm1 + vmovdqu64 [rcx+192], zmm5 + vpermb zmm5, zmm3, [rdx+160] + vpsllvd zmm5, zmm5, zmm2 + vpsrlw zmm5, zmm5, 1 + vpandq zmm5, zmm5, zmm0 + vpmulhrsw zmm5, zmm5, zmm1 + vmovdqu64 [rcx+256], zmm5 + vpermb zmm5, zmm3, [rdx+200] + vpsllvd zmm5, zmm5, zmm2 + vpsrlw zmm5, zmm5, 1 + vpandq zmm5, zmm5, zmm0 + vpmulhrsw zmm5, zmm5, zmm1 + vmovdqu64 [rcx+320], zmm5 + vpermb zmm5, zmm3, [rdx+240] + vpsllvd zmm5, zmm5, zmm2 + vpsrlw zmm5, zmm5, 1 + vpandq zmm5, zmm5, zmm0 + vpmulhrsw zmm5, zmm5, zmm1 + vmovdqu64 [rcx+384], zmm5 + vpermb zmm5, zmm4, [rdx+256] + vpsllvd zmm5, zmm5, zmm2 + vpsrlw zmm5, zmm5, 1 + vpandq zmm5, zmm5, zmm0 + vpmulhrsw zmm5, zmm5, zmm1 + vmovdqu64 [rcx+448], zmm5 + add rdx, 320 + add rcx, 512 + sub r8d, 1 + jg L_mlkem_decompress_10_avx512_vbmi_start + vzeroupper + add rsp, 8 + ret +mlkem_decompress_10_avx512_vbmi ENDP +_TEXT ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_11_avx512_vbmi_q WORD 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h + WORD 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h + WORD 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h + WORD 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h, 0d01h +ptr_L_mlkem_decompress_11_avx512_vbmi_q QWORD L_mlkem_decompress_11_avx512_vbmi_q +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_11_avx512_vbmi_srlvd DWORD 00000000h, 00000001h, 00000000h, 00000000h + DWORD 00000000h, 00000001h, 00000000h, 00000000h + DWORD 00000000h, 00000001h, 00000000h, 00000000h + DWORD 00000000h, 00000001h, 00000000h, 00000000h +ptr_L_mlkem_decompress_11_avx512_vbmi_srlvd QWORD L_mlkem_decompress_11_avx512_vbmi_srlvd +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_11_avx512_vbmi_srlvq QWORD 0000000000000000h, 0000000000000002h + QWORD 0000000000000000h, 0000000000000002h + QWORD 0000000000000000h, 0000000000000002h + QWORD 0000000000000000h, 0000000000000002h +ptr_L_mlkem_decompress_11_avx512_vbmi_srlvq QWORD L_mlkem_decompress_11_avx512_vbmi_srlvq +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_11_avx512_vbmi_shift WORD 0020h, 0004h, 0001h, 0020h, 0008h, 0001h, 0020h, 0004h + WORD 0020h, 0004h, 0001h, 0020h, 0008h, 0001h, 0020h, 0004h + WORD 0020h, 0004h, 0001h, 0020h, 0008h, 0001h, 0020h, 0004h + WORD 0020h, 0004h, 0001h, 0020h, 0008h, 0001h, 0020h, 0004h +ptr_L_mlkem_decompress_11_avx512_vbmi_shift QWORD L_mlkem_decompress_11_avx512_vbmi_shift +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_11_avx512_vbmi_mask WORD 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h + WORD 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h + WORD 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h + WORD 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h, 7ff0h +ptr_L_mlkem_decompress_11_avx512_vbmi_mask QWORD L_mlkem_decompress_11_avx512_vbmi_mask +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_11_avx512_vbmi_lo BYTE 00h, 01h, 01h, 02h, 02h, 03h, 04h, 05h + BYTE 05h, 06h, 06h, 07h, 08h, 09h, 09h, 0ah + BYTE 0bh, 0ch, 0ch, 0dh, 0dh, 0eh, 0fh, 10h + BYTE 10h, 11h, 11h, 12h, 13h, 14h, 14h, 15h + BYTE 16h, 17h, 17h, 18h, 18h, 19h, 1ah, 1bh + BYTE 1bh, 1ch, 1ch, 1dh, 1eh, 1fh, 1fh, 20h + BYTE 21h, 22h, 22h, 23h, 23h, 24h, 25h, 26h + BYTE 26h, 27h, 27h, 28h, 29h, 2ah, 2ah, 2bh +ptr_L_mlkem_decompress_11_avx512_vbmi_lo QWORD L_mlkem_decompress_11_avx512_vbmi_lo +_DATA ENDS +_DATA SEGMENT +ALIGN 16 +L_mlkem_decompress_11_avx512_vbmi_hi BYTE 14h, 15h, 15h, 16h, 16h, 17h, 18h, 19h + BYTE 19h, 1ah, 1ah, 1bh, 1ch, 1dh, 1dh, 1eh + BYTE 1fh, 20h, 20h, 21h, 21h, 22h, 23h, 24h + BYTE 24h, 25h, 25h, 26h, 27h, 28h, 28h, 29h + BYTE 2ah, 2bh, 2bh, 2ch, 2ch, 2dh, 2eh, 2fh + BYTE 2fh, 30h, 30h, 31h, 32h, 33h, 33h, 34h + BYTE 35h, 36h, 36h, 37h, 37h, 38h, 39h, 3ah + BYTE 3ah, 3bh, 3bh, 3ch, 3dh, 3eh, 3eh, 3fh +ptr_L_mlkem_decompress_11_avx512_vbmi_hi QWORD L_mlkem_decompress_11_avx512_vbmi_hi +_DATA ENDS +_TEXT SEGMENT READONLY PARA +mlkem_decompress_11_avx512_vbmi PROC + sub rsp, 40 + vmovdqu OWORD PTR [rsp+8], xmm6 + vmovdqu OWORD PTR [rsp+24], xmm7 + vmovdqu64 zmm0, ptr_L_mlkem_decompress_11_avx512_vbmi_q + vmovdqu64 zmm1, ptr_L_mlkem_decompress_11_avx512_vbmi_srlvd + vmovdqu64 zmm2, ptr_L_mlkem_decompress_11_avx512_vbmi_srlvq + vmovdqu64 zmm3, ptr_L_mlkem_decompress_11_avx512_vbmi_shift + vmovdqu64 zmm4, ptr_L_mlkem_decompress_11_avx512_vbmi_mask + vmovdqu64 zmm5, ptr_L_mlkem_decompress_11_avx512_vbmi_lo + vmovdqu64 zmm6, ptr_L_mlkem_decompress_11_avx512_vbmi_hi +L_mlkem_decompress_11_avx512_vbmi_start: + vpermb zmm7, zmm5, [rdx] + vpsrlvd zmm7, zmm7, zmm1 + vpsrlvq zmm7, zmm7, zmm2 + vpmullw zmm7, zmm7, zmm3 + vpsrlw zmm7, zmm7, 1 + vpandq zmm7, zmm7, zmm4 + vpmulhrsw zmm7, zmm7, zmm0 + vmovdqu64 [rcx], zmm7 + vpermb zmm7, zmm5, [rdx+44] + vpsrlvd zmm7, zmm7, zmm1 + vpsrlvq zmm7, zmm7, zmm2 + vpmullw zmm7, zmm7, zmm3 + vpsrlw zmm7, zmm7, 1 + vpandq zmm7, zmm7, zmm4 + vpmulhrsw zmm7, zmm7, zmm0 + vmovdqu64 [rcx+64], zmm7 + vpermb zmm7, zmm5, [rdx+88] + vpsrlvd zmm7, zmm7, zmm1 + vpsrlvq zmm7, zmm7, zmm2 + vpmullw zmm7, zmm7, zmm3 + vpsrlw zmm7, zmm7, 1 + vpandq zmm7, zmm7, zmm4 + vpmulhrsw zmm7, zmm7, zmm0 + vmovdqu64 [rcx+128], zmm7 + vpermb zmm7, zmm5, [rdx+132] + vpsrlvd zmm7, zmm7, zmm1 + vpsrlvq zmm7, zmm7, zmm2 + vpmullw zmm7, zmm7, zmm3 + vpsrlw zmm7, zmm7, 1 + vpandq zmm7, zmm7, zmm4 + vpmulhrsw zmm7, zmm7, zmm0 + vmovdqu64 [rcx+192], zmm7 + vpermb zmm7, zmm5, [rdx+176] + vpsrlvd zmm7, zmm7, zmm1 + vpsrlvq zmm7, zmm7, zmm2 + vpmullw zmm7, zmm7, zmm3 + vpsrlw zmm7, zmm7, 1 + vpandq zmm7, zmm7, zmm4 + vpmulhrsw zmm7, zmm7, zmm0 + vmovdqu64 [rcx+256], zmm7 + vpermb zmm7, zmm5, [rdx+220] + vpsrlvd zmm7, zmm7, zmm1 + vpsrlvq zmm7, zmm7, zmm2 + vpmullw zmm7, zmm7, zmm3 + vpsrlw zmm7, zmm7, 1 + vpandq zmm7, zmm7, zmm4 + vpmulhrsw zmm7, zmm7, zmm0 + vmovdqu64 [rcx+320], zmm7 + vpermb zmm7, zmm5, [rdx+264] + vpsrlvd zmm7, zmm7, zmm1 + vpsrlvq zmm7, zmm7, zmm2 + vpmullw zmm7, zmm7, zmm3 + vpsrlw zmm7, zmm7, 1 + vpandq zmm7, zmm7, zmm4 + vpmulhrsw zmm7, zmm7, zmm0 + vmovdqu64 [rcx+384], zmm7 + vpermb zmm7, zmm6, [rdx+288] + vpsrlvd zmm7, zmm7, zmm1 + vpsrlvq zmm7, zmm7, zmm2 + vpmullw zmm7, zmm7, zmm3 + vpsrlw zmm7, zmm7, 1 + vpandq zmm7, zmm7, zmm4 + vpmulhrsw zmm7, zmm7, zmm0 + vmovdqu64 [rcx+448], zmm7 + add rdx, 352 + add rcx, 512 + sub r8d, 1 + jg L_mlkem_decompress_11_avx512_vbmi_start + vzeroupper + vmovdqu xmm6, OWORD PTR [rsp+8] + vmovdqu xmm7, OWORD PTR [rsp+24] + add rsp, 40 + ret +mlkem_decompress_11_avx512_vbmi ENDP +_TEXT ENDS +ENDIF +ENDIF END diff --git a/wolfcrypt/src/wc_mlkem_poly.c b/wolfcrypt/src/wc_mlkem_poly.c index 2ab7299cfe..f86762606e 100644 --- a/wolfcrypt/src/wc_mlkem_poly.c +++ b/wolfcrypt/src/wc_mlkem_poly.c @@ -1868,6 +1868,14 @@ static void mlkem_keygen_c(sword16* s, sword16* t, sword16* e, const sword16* a, void mlkem_keygen(sword16* s, sword16* t, sword16* e, const sword16* a, int k) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + /* Alg 13: Steps 16-18 */ + mlkem_keygen_avx512(s, t, e, a, k); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { /* Alg 13: Steps 16-18 */ mlkem_keygen_avx2(s, t, e, a, k); @@ -2073,6 +2081,13 @@ void mlkem_encapsulate(const sword16* pub, sword16* u, sword16* v, const sword16* m, int k) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_encapsulate_avx512(pub, u, v, a, y, e1, e2, m, k); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_encapsulate_avx2(pub, u, v, a, y, e1, e2, m, k); RESTORE_VECTOR_REGISTERS(); @@ -2269,6 +2284,13 @@ void mlkem_decapsulate(const sword16* s, sword16* w, sword16* u, const sword16* v, int k) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_decapsulate_avx512(s, w, u, v, k); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_decapsulate_avx2(s, w, u, v, k); RESTORE_VECTOR_REGISTERS(); @@ -2286,6 +2308,95 @@ void mlkem_decapsulate(const sword16* s, sword16* w, sword16* u, /******************************************************************************/ #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) + +/* Rejection sampling used by the matrix generators. Dispatches to the AVX512 + * implementation (single vpcompressw left-pack) when available, otherwise the + * AVX2 one. Both produce identical output for the multiple-of-3 input lengths + * the matrix generator uses. + * + * The AVX512 left-pack uses vpcompressw, an AVX512-VBMI2 instruction, so both + * the AVX512 and VBMI variants require VBMI2 - on AVX512F/BW parts without + * VBMI2 (e.g. Skylake-X, Cascade Lake) fall back to the AVX2 sampler. */ +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 +static WC_INLINE unsigned int mlkem_rej_uniform_n_ins(sword16* p, + unsigned int len, const byte* r, unsigned int rLen) +{ +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI + if (IS_INTEL_AVX512_VBMI(cpuid_flags) && + IS_INTEL_AVX512_VBMI2(cpuid_flags)) { + return mlkem_rej_uniform_n_avx512_vbmi(p, len, r, rLen); + } +#endif + if (IS_INTEL_AVX512_VBMI2(cpuid_flags)) { + return mlkem_rej_uniform_n_avx512(p, len, r, rLen); + } + return mlkem_rej_uniform_n_avx2(p, len, r, rLen); +} +static WC_INLINE unsigned int mlkem_rej_uniform_ins(sword16* p, + unsigned int len, const byte* r, unsigned int rLen) +{ +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI + if (IS_INTEL_AVX512_VBMI(cpuid_flags) && + IS_INTEL_AVX512_VBMI2(cpuid_flags)) { + return mlkem_rej_uniform_avx512_vbmi(p, len, r, rLen); + } +#endif + if (IS_INTEL_AVX512_VBMI2(cpuid_flags)) { + return mlkem_rej_uniform_avx512(p, len, r, rLen); + } + return mlkem_rej_uniform_avx2(p, len, r, rLen); +} +#else +#define mlkem_rej_uniform_n_ins mlkem_rej_uniform_n_avx2 +#define mlkem_rej_uniform_ins mlkem_rej_uniform_avx2 +#endif + +/* Keccak-x4 output redistribution: dispatch to AVX512 when available. */ +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 +#define MLKEM_REDIST_INS(N) \ +static WC_INLINE void mlkem_redistribute_##N##_rand_ins(const word64* s, \ + byte* r0, byte* r1, byte* r2, byte* r3) \ +{ \ + if (IS_INTEL_AVX512(cpuid_flags)) { \ + mlkem_redistribute_##N##_rand_avx512(s, r0, r1, r2, r3); \ + return; \ + } \ + mlkem_redistribute_##N##_rand_avx2(s, r0, r1, r2, r3); \ +} +MLKEM_REDIST_INS(8) +MLKEM_REDIST_INS(16) +MLKEM_REDIST_INS(17) +MLKEM_REDIST_INS(21) +#else +#define mlkem_redistribute_8_rand_ins mlkem_redistribute_8_rand_avx2 +#define mlkem_redistribute_16_rand_ins mlkem_redistribute_16_rand_avx2 +#define mlkem_redistribute_17_rand_ins mlkem_redistribute_17_rand_avx2 +#define mlkem_redistribute_21_rand_ins mlkem_redistribute_21_rand_avx2 +#endif + +/* CBD noise sampling: dispatch to AVX512 when available. */ +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 +static WC_INLINE void mlkem_cbd_eta2_ins(sword16* p, const byte* r) +{ + if (IS_INTEL_AVX512(cpuid_flags)) { + mlkem_cbd_eta2_avx512(p, r); + return; + } + mlkem_cbd_eta2_avx2(p, r); +} +static WC_INLINE void mlkem_cbd_eta3_ins(sword16* p, const byte* r) +{ + if (IS_INTEL_AVX512(cpuid_flags)) { + mlkem_cbd_eta3_avx512(p, r); + return; + } + mlkem_cbd_eta3_avx2(p, r); +} +#else +#define mlkem_cbd_eta2_ins mlkem_cbd_eta2_avx2 +#define mlkem_cbd_eta3_ins mlkem_cbd_eta3_avx2 +#endif + #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) /* Deterministically generate a matrix (or transpose) of uniform integers mod q. * @@ -2346,48 +2457,48 @@ static int mlkem_gen_matrix_k2_avx2(sword16* a, byte* seed, int transposed) } sha3_128_blocksx4_seed_avx2(state, seed); - mlkem_redistribute_21_rand_avx2(state, rand + 0 * GEN_MATRIX_SIZE, + mlkem_redistribute_21_rand_ins(state, rand + 0 * GEN_MATRIX_SIZE, rand + 1 * GEN_MATRIX_SIZE, rand + 2 * GEN_MATRIX_SIZE, rand + 3 * GEN_MATRIX_SIZE); for (i = SHA3_128_BYTES; i < GEN_MATRIX_SIZE; i += SHA3_128_BYTES) { sha3_blocksx4_avx2(state); - mlkem_redistribute_21_rand_avx2(state, rand + i + 0 * GEN_MATRIX_SIZE, + mlkem_redistribute_21_rand_ins(state, rand + i + 0 * GEN_MATRIX_SIZE, rand + i + 1 * GEN_MATRIX_SIZE, rand + i + 2 * GEN_MATRIX_SIZE, rand + i + 3 * GEN_MATRIX_SIZE); } /* Sample random bytes to create a polynomial. */ p = rand; - ctr0 = mlkem_rej_uniform_n_avx2(a + 0 * MLKEM_N, MLKEM_N, p, + ctr0 = mlkem_rej_uniform_n_ins(a + 0 * MLKEM_N, MLKEM_N, p, GEN_MATRIX_SIZE); p += GEN_MATRIX_SIZE; - ctr1 = mlkem_rej_uniform_n_avx2(a + 1 * MLKEM_N, MLKEM_N, p, + ctr1 = mlkem_rej_uniform_n_ins(a + 1 * MLKEM_N, MLKEM_N, p, GEN_MATRIX_SIZE); p += GEN_MATRIX_SIZE; - ctr2 = mlkem_rej_uniform_n_avx2(a + 2 * MLKEM_N, MLKEM_N, p, + ctr2 = mlkem_rej_uniform_n_ins(a + 2 * MLKEM_N, MLKEM_N, p, GEN_MATRIX_SIZE); p += GEN_MATRIX_SIZE; - ctr3 = mlkem_rej_uniform_n_avx2(a + 3 * MLKEM_N, MLKEM_N, p, + ctr3 = mlkem_rej_uniform_n_ins(a + 3 * MLKEM_N, MLKEM_N, p, GEN_MATRIX_SIZE); /* Create more blocks if too many rejected. */ while ((ctr0 < MLKEM_N) || (ctr1 < MLKEM_N) || (ctr2 < MLKEM_N) || (ctr3 < MLKEM_N)) { sha3_blocksx4_avx2(state); - mlkem_redistribute_21_rand_avx2(state, rand + 0 * GEN_MATRIX_SIZE, + mlkem_redistribute_21_rand_ins(state, rand + 0 * GEN_MATRIX_SIZE, rand + 1 * GEN_MATRIX_SIZE, rand + 2 * GEN_MATRIX_SIZE, rand + 3 * GEN_MATRIX_SIZE); p = rand; - ctr0 += mlkem_rej_uniform_avx2(a + 0 * MLKEM_N + ctr0, MLKEM_N - ctr0, + ctr0 += mlkem_rej_uniform_ins(a + 0 * MLKEM_N + ctr0, MLKEM_N - ctr0, p, XOF_BLOCK_SIZE); p += GEN_MATRIX_SIZE; - ctr1 += mlkem_rej_uniform_avx2(a + 1 * MLKEM_N + ctr1, MLKEM_N - ctr1, + ctr1 += mlkem_rej_uniform_ins(a + 1 * MLKEM_N + ctr1, MLKEM_N - ctr1, p, XOF_BLOCK_SIZE); p += GEN_MATRIX_SIZE; - ctr2 += mlkem_rej_uniform_avx2(a + 2 * MLKEM_N + ctr2, MLKEM_N - ctr2, + ctr2 += mlkem_rej_uniform_ins(a + 2 * MLKEM_N + ctr2, MLKEM_N - ctr2, p, XOF_BLOCK_SIZE); p += GEN_MATRIX_SIZE; - ctr3 += mlkem_rej_uniform_avx2(a + 3 * MLKEM_N + ctr3, MLKEM_N - ctr3, + ctr3 += mlkem_rej_uniform_ins(a + 3 * MLKEM_N + ctr3, MLKEM_N - ctr3, p, XOF_BLOCK_SIZE); } @@ -2396,6 +2507,92 @@ static int mlkem_gen_matrix_k2_avx2(sword16* a, byte* seed, int transposed) return 0; } + +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 +/* Deterministically generate a 2x2 matrix (or transpose) of uniform integers + * mod q using the eight-way AVX-512 SHA3 core. Only four of the eight lanes + * are used - the register-resident eight-way permutation is still faster than + * the memory-based four-way one, so wasting four lanes is a net win. + * + * @param [out] a Matrix of uniform integers. + * @param [in] seed Bytes to seed XOF generation. + * @param [in] transposed Whether A or A^T is generated. + * @return 0 on success. + * @return MEMORY_E when dynamic memory allocation fails. Only possible when + * WOLFSSL_SMALL_STACK is defined. + */ +static int mlkem_gen_matrix_k2_avx512(sword16* a, byte* seed, int transposed) +{ + int i; +#ifdef WOLFSSL_SMALL_STACK + byte *rand = NULL; + word64 *state = NULL; +#else + byte rand[8 * GEN_MATRIX_SIZE + 4]; + word64 state[25 * 8]; +#endif + unsigned int ctr[4]; + +#ifdef WOLFSSL_SMALL_STACK + rand = (byte*)XMALLOC(8 * GEN_MATRIX_SIZE + 4, NULL, + DYNAMIC_TYPE_TMP_BUFFER); + state = (word64*)XMALLOC(sizeof(word64) * 25 * 8, NULL, + DYNAMIC_TYPE_TMP_BUFFER); + if ((rand == NULL) || (state == NULL)) { + XFREE(rand, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(state, NULL, DYNAMIC_TYPE_TMP_BUFFER); + return MEMORY_E; + } +#endif + + /* Loading 64 bits, only using 48 bits. Loading 4 bytes more than used. */ + rand[8 * GEN_MATRIX_SIZE + 0] = 0xff; + rand[8 * GEN_MATRIX_SIZE + 1] = 0xff; + rand[8 * GEN_MATRIX_SIZE + 2] = 0xff; + rand[8 * GEN_MATRIX_SIZE + 3] = 0xff; + + /* Four used lanes hold the 2x2 matrix; lanes 4..7 are unused. */ + for (i = 0; i < 4; i++) { + int row = i / 2; + int col = i % 2; + if (!transposed) { + state[4*8 + i] = (word32)(0x1f0000 + (row << 8) + col); + } + else { + state[4*8 + i] = (word32)(0x1f0000 + (col << 8) + row); + } + } + for (i = 4; i < 8; i++) { + state[4*8 + i] = 0x1f0000; + } + + sha3_128_blocksx8_seed_avx512(state, seed); + mlkem_redistribute_21_rand_x8_avx512(state, rand, GEN_MATRIX_SIZE); + for (i = SHA3_128_BYTES; i < GEN_MATRIX_SIZE; i += SHA3_128_BYTES) { + sha3_blocksx8_avx512(state); + mlkem_redistribute_21_rand_x8_avx512(state, rand + i, GEN_MATRIX_SIZE); + } + + for (i = 0; i < 4; i++) { + ctr[i] = mlkem_rej_uniform_n_ins(a + i * MLKEM_N, MLKEM_N, + rand + i * GEN_MATRIX_SIZE, GEN_MATRIX_SIZE); + } + while ((ctr[0] < MLKEM_N) || (ctr[1] < MLKEM_N) || (ctr[2] < MLKEM_N) || + (ctr[3] < MLKEM_N)) { + sha3_blocksx8_avx512(state); + mlkem_redistribute_21_rand_x8_avx512(state, rand, GEN_MATRIX_SIZE); + for (i = 0; i < 4; i++) { + ctr[i] += mlkem_rej_uniform_ins(a + i * MLKEM_N + ctr[i], + MLKEM_N - ctr[i], rand + i * GEN_MATRIX_SIZE, XOF_BLOCK_SIZE); + } + } + + WC_FREE_VAR_EX(rand, NULL, DYNAMIC_TYPE_TMP_BUFFER); + WC_FREE_VAR_EX(state, NULL, DYNAMIC_TYPE_TMP_BUFFER); + + return 0; +} +#endif /* WOLFSSL_MLKEM_HAVE_INTEL_AVX512 */ #endif #if defined(WOLFSSL_KYBER768) || defined(WOLFSSL_WC_ML_KEM_768) @@ -2459,48 +2656,48 @@ static int mlkem_gen_matrix_k3_avx2(sword16* a, byte* seed, int transposed) } sha3_128_blocksx4_seed_avx2(state, seed); - mlkem_redistribute_21_rand_avx2(state, + mlkem_redistribute_21_rand_ins(state, rand + 0 * GEN_MATRIX_SIZE, rand + 1 * GEN_MATRIX_SIZE, rand + 2 * GEN_MATRIX_SIZE, rand + 3 * GEN_MATRIX_SIZE); for (i = SHA3_128_BYTES; i < GEN_MATRIX_SIZE; i += SHA3_128_BYTES) { sha3_blocksx4_avx2(state); - mlkem_redistribute_21_rand_avx2(state, + mlkem_redistribute_21_rand_ins(state, rand + i + 0 * GEN_MATRIX_SIZE, rand + i + 1 * GEN_MATRIX_SIZE, rand + i + 2 * GEN_MATRIX_SIZE, rand + i + 3 * GEN_MATRIX_SIZE); } /* Sample random bytes to create a polynomial. */ p = rand; - ctr0 = mlkem_rej_uniform_n_avx2(a + 0 * MLKEM_N, MLKEM_N, p, + ctr0 = mlkem_rej_uniform_n_ins(a + 0 * MLKEM_N, MLKEM_N, p, GEN_MATRIX_SIZE); p += GEN_MATRIX_SIZE; - ctr1 = mlkem_rej_uniform_n_avx2(a + 1 * MLKEM_N, MLKEM_N, p, + ctr1 = mlkem_rej_uniform_n_ins(a + 1 * MLKEM_N, MLKEM_N, p, GEN_MATRIX_SIZE); p += GEN_MATRIX_SIZE; - ctr2 = mlkem_rej_uniform_n_avx2(a + 2 * MLKEM_N, MLKEM_N, p, + ctr2 = mlkem_rej_uniform_n_ins(a + 2 * MLKEM_N, MLKEM_N, p, GEN_MATRIX_SIZE); p += GEN_MATRIX_SIZE; - ctr3 = mlkem_rej_uniform_n_avx2(a + 3 * MLKEM_N, MLKEM_N, p, + ctr3 = mlkem_rej_uniform_n_ins(a + 3 * MLKEM_N, MLKEM_N, p, GEN_MATRIX_SIZE); /* Create more blocks if too many rejected. */ while ((ctr0 < MLKEM_N) || (ctr1 < MLKEM_N) || (ctr2 < MLKEM_N) || (ctr3 < MLKEM_N)) { sha3_blocksx4_avx2(state); - mlkem_redistribute_21_rand_avx2(state, rand + 0 * GEN_MATRIX_SIZE, + mlkem_redistribute_21_rand_ins(state, rand + 0 * GEN_MATRIX_SIZE, rand + 1 * GEN_MATRIX_SIZE, rand + 2 * GEN_MATRIX_SIZE, rand + 3 * GEN_MATRIX_SIZE); p = rand; - ctr0 += mlkem_rej_uniform_avx2(a + 0 * MLKEM_N + ctr0, + ctr0 += mlkem_rej_uniform_ins(a + 0 * MLKEM_N + ctr0, MLKEM_N - ctr0, p, XOF_BLOCK_SIZE); p += GEN_MATRIX_SIZE; - ctr1 += mlkem_rej_uniform_avx2(a + 1 * MLKEM_N + ctr1, + ctr1 += mlkem_rej_uniform_ins(a + 1 * MLKEM_N + ctr1, MLKEM_N - ctr1, p, XOF_BLOCK_SIZE); p += GEN_MATRIX_SIZE; - ctr2 += mlkem_rej_uniform_avx2(a + 2 * MLKEM_N + ctr2, + ctr2 += mlkem_rej_uniform_ins(a + 2 * MLKEM_N + ctr2, MLKEM_N - ctr2, p, XOF_BLOCK_SIZE); p += GEN_MATRIX_SIZE; - ctr3 += mlkem_rej_uniform_avx2(a + 3 * MLKEM_N + ctr3, + ctr3 += mlkem_rej_uniform_ins(a + 3 * MLKEM_N + ctr3, MLKEM_N - ctr3, p, XOF_BLOCK_SIZE); } @@ -2529,7 +2726,7 @@ static int mlkem_gen_matrix_k3_avx2(sword16* a, byte* seed, int transposed) } XMEMCPY(rand + i, state, SHA3_128_BYTES); } - ctr0 = mlkem_rej_uniform_n_avx2(a, MLKEM_N, rand, GEN_MATRIX_SIZE); + ctr0 = mlkem_rej_uniform_n_ins(a, MLKEM_N, rand, GEN_MATRIX_SIZE); while (ctr0 < MLKEM_N) { #ifndef WC_SHA3_NO_ASM if (IS_INTEL_BMI2(cpuid_flags)) { @@ -2546,7 +2743,134 @@ static int mlkem_gen_matrix_k3_avx2(sword16* a, byte* seed, int transposed) BlockSha3(state); } XMEMCPY(rand, state, SHA3_128_BYTES); - ctr0 += mlkem_rej_uniform_avx2(a + ctr0, MLKEM_N - ctr0, rand, + ctr0 += mlkem_rej_uniform_ins(a + ctr0, MLKEM_N - ctr0, rand, + XOF_BLOCK_SIZE); + } + + WC_FREE_VAR_EX(rand, NULL, DYNAMIC_TYPE_TMP_BUFFER); + WC_FREE_VAR_EX(state, NULL, DYNAMIC_TYPE_TMP_BUFFER); + + return 0; +} + +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 +/* Deterministically generate a 3x3 matrix (or transpose) of uniform integers + * mod q using eight-way AVX-512 SHA3. The first eight polynomials are produced + * in one eight-way batch; the ninth uses a single SHA3 state. + * + * @param [out] a Matrix of uniform integers. + * @param [in] seed Bytes to seed XOF generation. + * @param [in] transposed Whether A or A^T is generated. + * @return 0 on success. + * @return MEMORY_E when dynamic memory allocation fails. Only possible when + * WOLFSSL_SMALL_STACK is defined. + */ +static int mlkem_gen_matrix_k3_avx512(sword16* a, byte* seed, int transposed) +{ + int i; +#ifdef WOLFSSL_SMALL_STACK + byte *rand = NULL; + word64 *state = NULL; +#else + byte rand[8 * GEN_MATRIX_SIZE + 4]; + word64 state[25 * 8]; +#endif + unsigned int ctr[8]; + +#ifdef WOLFSSL_SMALL_STACK + rand = (byte*)XMALLOC(8 * GEN_MATRIX_SIZE + 4, NULL, + DYNAMIC_TYPE_TMP_BUFFER); + state = (word64*)XMALLOC(sizeof(word64) * 25 * 8, NULL, + DYNAMIC_TYPE_TMP_BUFFER); + if ((rand == NULL) || (state == NULL)) { + XFREE(rand, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(state, NULL, DYNAMIC_TYPE_TMP_BUFFER); + return MEMORY_E; + } +#endif + + /* Loading 64 bits, only using 48 bits. Loading 4 bytes more than used. */ + rand[8 * GEN_MATRIX_SIZE + 0] = 0xff; + rand[8 * GEN_MATRIX_SIZE + 1] = 0xff; + rand[8 * GEN_MATRIX_SIZE + 2] = 0xff; + rand[8 * GEN_MATRIX_SIZE + 3] = 0xff; + + /* First eight polynomials (rows 0..2, up to column 1) - eight-way. */ + for (i = 0; i < 8; i++) { + int row = i / 3; + int col = i % 3; + if (!transposed) { + state[4*8 + i] = (word32)(0x1f0000 + (row << 8) + col); + } + else { + state[4*8 + i] = (word32)(0x1f0000 + (col << 8) + row); + } + } + + sha3_128_blocksx8_seed_avx512(state, seed); + mlkem_redistribute_21_rand_x8_avx512(state, rand, GEN_MATRIX_SIZE); + for (i = SHA3_128_BYTES; i < GEN_MATRIX_SIZE; i += SHA3_128_BYTES) { + sha3_blocksx8_avx512(state); + mlkem_redistribute_21_rand_x8_avx512(state, rand + i, GEN_MATRIX_SIZE); + } + + for (i = 0; i < 8; i++) { + ctr[i] = mlkem_rej_uniform_n_ins(a + i * MLKEM_N, MLKEM_N, + rand + i * GEN_MATRIX_SIZE, GEN_MATRIX_SIZE); + } + while ((ctr[0] < MLKEM_N) || (ctr[1] < MLKEM_N) || (ctr[2] < MLKEM_N) || + (ctr[3] < MLKEM_N) || (ctr[4] < MLKEM_N) || (ctr[5] < MLKEM_N) || + (ctr[6] < MLKEM_N) || (ctr[7] < MLKEM_N)) { + sha3_blocksx8_avx512(state); + mlkem_redistribute_21_rand_x8_avx512(state, rand, GEN_MATRIX_SIZE); + for (i = 0; i < 8; i++) { + ctr[i] += mlkem_rej_uniform_ins(a + i * MLKEM_N + ctr[i], + MLKEM_N - ctr[i], rand + i * GEN_MATRIX_SIZE, XOF_BLOCK_SIZE); + } + } + a += 8 * MLKEM_N; + + /* Ninth polynomial (row 2, column 2) - single SHA3 state. Transposed + * value same as not. */ + readUnalignedWords64(state, seed, 4); + state[4] = 0x1f0000 + (2 << 8) + 2; + XMEMSET(state + 5, 0, sizeof(*state) * (25 - 5)); + state[20] = W64LIT(0x8000000000000000); + for (i = 0; i < GEN_MATRIX_SIZE; i += SHA3_128_BYTES) { +#ifndef WC_SHA3_NO_ASM + if (IS_INTEL_BMI2(cpuid_flags)) { + sha3_block_bmi2(state); + } + else if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + { + sha3_block_avx2(state); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif /* !WC_SHA3_NO_ASM */ + { + BlockSha3(state); + } + XMEMCPY(rand + i, state, SHA3_128_BYTES); + } + ctr[0] = mlkem_rej_uniform_n_ins(a, MLKEM_N, rand, GEN_MATRIX_SIZE); + while (ctr[0] < MLKEM_N) { +#ifndef WC_SHA3_NO_ASM + if (IS_INTEL_BMI2(cpuid_flags)) { + sha3_block_bmi2(state); + } + else if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + { + sha3_block_avx2(state); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif /* !WC_SHA3_NO_ASM */ + { + BlockSha3(state); + } + XMEMCPY(rand, state, SHA3_128_BYTES); + ctr[0] += mlkem_rej_uniform_ins(a + ctr[0], MLKEM_N - ctr[0], rand, XOF_BLOCK_SIZE); } @@ -2555,6 +2879,7 @@ static int mlkem_gen_matrix_k3_avx2(sword16* a, byte* seed, int transposed) return 0; } +#endif /* WOLFSSL_MLKEM_HAVE_INTEL_AVX512 */ #endif #if defined(WOLFSSL_KYBER1024) || defined(WOLFSSL_WC_ML_KEM_1024) /* Deterministically generate a matrix (or transpose) of uniform integers mod q. @@ -2614,48 +2939,48 @@ static int mlkem_gen_matrix_k4_avx2(sword16* a, byte* seed, int transposed) } sha3_128_blocksx4_seed_avx2(state, seed); - mlkem_redistribute_21_rand_avx2(state, + mlkem_redistribute_21_rand_ins(state, rand + 0 * GEN_MATRIX_SIZE, rand + 1 * GEN_MATRIX_SIZE, rand + 2 * GEN_MATRIX_SIZE, rand + 3 * GEN_MATRIX_SIZE); for (i = SHA3_128_BYTES; i < GEN_MATRIX_SIZE; i += SHA3_128_BYTES) { sha3_blocksx4_avx2(state); - mlkem_redistribute_21_rand_avx2(state, + mlkem_redistribute_21_rand_ins(state, rand + i + 0 * GEN_MATRIX_SIZE, rand + i + 1 * GEN_MATRIX_SIZE, rand + i + 2 * GEN_MATRIX_SIZE, rand + i + 3 * GEN_MATRIX_SIZE); } /* Sample random bytes to create a polynomial. */ p = rand; - ctr0 = mlkem_rej_uniform_n_avx2(a + 0 * MLKEM_N, MLKEM_N, p, + ctr0 = mlkem_rej_uniform_n_ins(a + 0 * MLKEM_N, MLKEM_N, p, GEN_MATRIX_SIZE); p += GEN_MATRIX_SIZE; - ctr1 = mlkem_rej_uniform_n_avx2(a + 1 * MLKEM_N, MLKEM_N, p, + ctr1 = mlkem_rej_uniform_n_ins(a + 1 * MLKEM_N, MLKEM_N, p, GEN_MATRIX_SIZE); p += GEN_MATRIX_SIZE; - ctr2 = mlkem_rej_uniform_n_avx2(a + 2 * MLKEM_N, MLKEM_N, p, + ctr2 = mlkem_rej_uniform_n_ins(a + 2 * MLKEM_N, MLKEM_N, p, GEN_MATRIX_SIZE); p += GEN_MATRIX_SIZE; - ctr3 = mlkem_rej_uniform_n_avx2(a + 3 * MLKEM_N, MLKEM_N, p, + ctr3 = mlkem_rej_uniform_n_ins(a + 3 * MLKEM_N, MLKEM_N, p, GEN_MATRIX_SIZE); /* Create more blocks if too many rejected. */ while ((ctr0 < MLKEM_N) || (ctr1 < MLKEM_N) || (ctr2 < MLKEM_N) || (ctr3 < MLKEM_N)) { sha3_blocksx4_avx2(state); - mlkem_redistribute_21_rand_avx2(state, rand + 0 * GEN_MATRIX_SIZE, + mlkem_redistribute_21_rand_ins(state, rand + 0 * GEN_MATRIX_SIZE, rand + 1 * GEN_MATRIX_SIZE, rand + 2 * GEN_MATRIX_SIZE, rand + 3 * GEN_MATRIX_SIZE); p = rand; - ctr0 += mlkem_rej_uniform_avx2(a + 0 * MLKEM_N + ctr0, + ctr0 += mlkem_rej_uniform_ins(a + 0 * MLKEM_N + ctr0, MLKEM_N - ctr0, p, XOF_BLOCK_SIZE); p += GEN_MATRIX_SIZE; - ctr1 += mlkem_rej_uniform_avx2(a + 1 * MLKEM_N + ctr1, + ctr1 += mlkem_rej_uniform_ins(a + 1 * MLKEM_N + ctr1, MLKEM_N - ctr1, p, XOF_BLOCK_SIZE); p += GEN_MATRIX_SIZE; - ctr2 += mlkem_rej_uniform_avx2(a + 2 * MLKEM_N + ctr2, + ctr2 += mlkem_rej_uniform_ins(a + 2 * MLKEM_N + ctr2, MLKEM_N - ctr2, p, XOF_BLOCK_SIZE); p += GEN_MATRIX_SIZE; - ctr3 += mlkem_rej_uniform_avx2(a + 3 * MLKEM_N + ctr3, + ctr3 += mlkem_rej_uniform_ins(a + 3 * MLKEM_N + ctr3, MLKEM_N - ctr3, p, XOF_BLOCK_SIZE); } @@ -2667,6 +2992,97 @@ static int mlkem_gen_matrix_k4_avx2(sword16* a, byte* seed, int transposed) return 0; } + +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 +/* Deterministically generate a 4x4 matrix (or transpose) of uniform integers + * mod q using eight-way AVX-512 SHA3. The 16 polynomials are produced in two + * batches of eight. + * + * @param [out] a Matrix of uniform integers. + * @param [in] seed Bytes to seed XOF generation. + * @param [in] transposed Whether A or A^T is generated. + * @return 0 on success. + * @return MEMORY_E when dynamic memory allocation fails. Only possible when + * WOLFSSL_SMALL_STACK is defined. + */ +static int mlkem_gen_matrix_k4_avx512(sword16* a, byte* seed, int transposed) +{ + int i; + int b; +#ifdef WOLFSSL_SMALL_STACK + byte *rand = NULL; + word64 *state = NULL; +#else + byte rand[8 * GEN_MATRIX_SIZE + 4]; + word64 state[25 * 8]; +#endif + unsigned int ctr[8]; + +#ifdef WOLFSSL_SMALL_STACK + rand = (byte*)XMALLOC(8 * GEN_MATRIX_SIZE + 4, NULL, + DYNAMIC_TYPE_TMP_BUFFER); + state = (word64*)XMALLOC(sizeof(word64) * 25 * 8, NULL, + DYNAMIC_TYPE_TMP_BUFFER); + if ((rand == NULL) || (state == NULL)) { + XFREE(rand, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(state, NULL, DYNAMIC_TYPE_TMP_BUFFER); + return MEMORY_E; + } +#endif + + /* Loading 64 bits, only using 48 bits. Loading 4 bytes more than used. */ + rand[8 * GEN_MATRIX_SIZE + 0] = 0xff; + rand[8 * GEN_MATRIX_SIZE + 1] = 0xff; + rand[8 * GEN_MATRIX_SIZE + 2] = 0xff; + rand[8 * GEN_MATRIX_SIZE + 3] = 0xff; + + for (b = 0; b < 2; b++) { + for (i = 0; i < 8; i++) { + int row = (b * 8 + i) / 4; + int col = (b * 8 + i) % 4; + if (!transposed) { + state[4*8 + i] = (word32)(0x1f0000 + (row << 8) + col); + } + else { + state[4*8 + i] = (word32)(0x1f0000 + (col << 8) + row); + } + } + + sha3_128_blocksx8_seed_avx512(state, seed); + mlkem_redistribute_21_rand_x8_avx512(state, rand, GEN_MATRIX_SIZE); + for (i = SHA3_128_BYTES; i < GEN_MATRIX_SIZE; i += SHA3_128_BYTES) { + sha3_blocksx8_avx512(state); + mlkem_redistribute_21_rand_x8_avx512(state, rand + i, + GEN_MATRIX_SIZE); + } + + /* Sample random bytes to create the polynomials. */ + for (i = 0; i < 8; i++) { + ctr[i] = mlkem_rej_uniform_n_ins(a + i * MLKEM_N, MLKEM_N, + rand + i * GEN_MATRIX_SIZE, GEN_MATRIX_SIZE); + } + /* Create more blocks if too many rejected. */ + while ((ctr[0] < MLKEM_N) || (ctr[1] < MLKEM_N) || (ctr[2] < MLKEM_N) || + (ctr[3] < MLKEM_N) || (ctr[4] < MLKEM_N) || (ctr[5] < MLKEM_N) || + (ctr[6] < MLKEM_N) || (ctr[7] < MLKEM_N)) { + sha3_blocksx8_avx512(state); + mlkem_redistribute_21_rand_x8_avx512(state, rand, GEN_MATRIX_SIZE); + for (i = 0; i < 8; i++) { + ctr[i] += mlkem_rej_uniform_ins(a + i * MLKEM_N + ctr[i], + MLKEM_N - ctr[i], rand + i * GEN_MATRIX_SIZE, + XOF_BLOCK_SIZE); + } + } + + a += 8 * MLKEM_N; + } + + WC_FREE_VAR_EX(rand, NULL, DYNAMIC_TYPE_TMP_BUFFER); + WC_FREE_VAR_EX(state, NULL, DYNAMIC_TYPE_TMP_BUFFER); + + return 0; +} +#endif /* WOLFSSL_MLKEM_HAVE_INTEL_AVX512 */ #endif /* WOLFSSL_KYBER1024 || WOLFSSL_WC_ML_KEM_1024 */ #elif defined(WOLFSSL_ARMASM) && defined(__aarch64__) #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) @@ -3556,6 +3972,13 @@ int mlkem_gen_matrix(MLKEM_PRF_T* prf, sword16* a, int k, byte* seed, ret = mlkem_gen_matrix_k2_aarch64(a, seed, transposed); #else #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) + #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + ret = mlkem_gen_matrix_k2_avx512(a, seed, transposed); + RESTORE_VECTOR_REGISTERS(); + } + else + #endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = mlkem_gen_matrix_k2_avx2(a, seed, transposed); RESTORE_VECTOR_REGISTERS(); @@ -3575,6 +3998,13 @@ int mlkem_gen_matrix(MLKEM_PRF_T* prf, sword16* a, int k, byte* seed, ret = mlkem_gen_matrix_k3_aarch64(a, seed, transposed); #else #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) + #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + ret = mlkem_gen_matrix_k3_avx512(a, seed, transposed); + RESTORE_VECTOR_REGISTERS(); + } + else + #endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = mlkem_gen_matrix_k3_avx2(a, seed, transposed); RESTORE_VECTOR_REGISTERS(); @@ -3594,6 +4024,13 @@ int mlkem_gen_matrix(MLKEM_PRF_T* prf, sword16* a, int k, byte* seed, ret = mlkem_gen_matrix_k4_aarch64(a, seed, transposed); #else #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) + #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + ret = mlkem_gen_matrix_k4_avx512(a, seed, transposed); + RESTORE_VECTOR_REGISTERS(); + } + else + #endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = mlkem_gen_matrix_k4_avx2(a, seed, transposed); RESTORE_VECTOR_REGISTERS(); @@ -4132,13 +4569,42 @@ static void mlkem_get_noise_x4_eta2_avx2(byte* rand, byte* seed, byte o) } sha3_256_blocksx4_seed_avx2(state, seed); - mlkem_redistribute_16_rand_avx2(state, rand + 0 * ETA2_RAND_SIZE, + mlkem_redistribute_16_rand_ins(state, rand + 0 * ETA2_RAND_SIZE, rand + 1 * ETA2_RAND_SIZE, rand + 2 * ETA2_RAND_SIZE, rand + 3 * ETA2_RAND_SIZE); /* state is secret-seeded; caller zeroizes rand. */ ForceZero(state, sizeof(state)); } + +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 +/* Get eight lanes of ETA2 random bytes using eight-way AVX-512 SHA3. Lane j + * uses seed count j and its output is written to rand + j * ETA2_RAND_SIZE. + * + * @param [out] rand Random number byte array (8 * ETA2_RAND_SIZE bytes). + * @param [in] seed Seed to generate random from. + */ +static int mlkem_get_noise_x8_eta2_avx512(byte* rand, byte* seed) +{ + int i; + WC_DECLARE_VAR(state, word64, 25 * 8, 0); + + WC_ALLOC_VAR_EX(state, word64, 25 * 8, NULL, DYNAMIC_TYPE_TMP_BUFFER, + return MEMORY_E); + + for (i = 0; i < 8; i++) { + state[4*8 + i] = (word32)(0x1f00 + i); + } + + sha3_256_blocksx8_seed_avx512(state, seed); + mlkem_redistribute_16_rand_x8_avx512(state, rand, ETA2_RAND_SIZE); + + /* state is secret-seeded; caller zeroizes rand. */ + ForceZero(state, sizeof(word64) * 25 * 8); + WC_FREE_VAR_EX(state, NULL, DYNAMIC_TYPE_TMP_BUFFER); + return 0; +} +#endif #endif #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) || \ @@ -4189,7 +4655,7 @@ static int mlkem_get_noise_eta2_avx2(MLKEM_PRF_T* prf, sword16* p, { BlockSha3(state); } - mlkem_cbd_eta2_avx2(p, (byte*)state); + mlkem_cbd_eta2_ins(p, (byte*)state); /* state holds secret noise. */ ForceZero(state, sizeof(state)); @@ -4225,12 +4691,12 @@ static void mlkem_get_noise_x4_eta3_avx2(byte* rand, byte* seed) state[4*4 + 3] = 0x1f00 + 3; sha3_256_blocksx4_seed_avx2(state, seed); - mlkem_redistribute_17_rand_avx2(state, rand + 0 * PRF_RAND_SZ, + mlkem_redistribute_17_rand_ins(state, rand + 0 * PRF_RAND_SZ, rand + 1 * PRF_RAND_SZ, rand + 2 * PRF_RAND_SZ, rand + 3 * PRF_RAND_SZ); i = SHA3_256_BYTES; sha3_blocksx4_avx2(state); - mlkem_redistribute_8_rand_avx2(state, rand + i + 0 * PRF_RAND_SZ, + mlkem_redistribute_8_rand_ins(state, rand + i + 0 * PRF_RAND_SZ, rand + i + 1 * PRF_RAND_SZ, rand + i + 2 * PRF_RAND_SZ, rand + i + 3 * PRF_RAND_SZ); @@ -4260,15 +4726,15 @@ static int mlkem_get_noise_k2_avx2(MLKEM_PRF_T* prf, sword16* vec1, return MEMORY_E); mlkem_get_noise_x4_eta3_avx2(rand, seed); - mlkem_cbd_eta3_avx2(vec1 , rand + 0 * PRF_RAND_SZ); - mlkem_cbd_eta3_avx2(vec1 + MLKEM_N, rand + 1 * PRF_RAND_SZ); + mlkem_cbd_eta3_ins(vec1 , rand + 0 * PRF_RAND_SZ); + mlkem_cbd_eta3_ins(vec1 + MLKEM_N, rand + 1 * PRF_RAND_SZ); if (poly == NULL) { - mlkem_cbd_eta3_avx2(vec2 , rand + 2 * PRF_RAND_SZ); - mlkem_cbd_eta3_avx2(vec2 + MLKEM_N, rand + 3 * PRF_RAND_SZ); + mlkem_cbd_eta3_ins(vec2 , rand + 2 * PRF_RAND_SZ); + mlkem_cbd_eta3_ins(vec2 + MLKEM_N, rand + 3 * PRF_RAND_SZ); } else { - mlkem_cbd_eta2_avx2(vec2 , rand + 2 * PRF_RAND_SZ); - mlkem_cbd_eta2_avx2(vec2 + MLKEM_N, rand + 3 * PRF_RAND_SZ); + mlkem_cbd_eta2_ins(vec2 , rand + 2 * PRF_RAND_SZ); + mlkem_cbd_eta2_ins(vec2 + MLKEM_N, rand + 3 * PRF_RAND_SZ); seed[WC_ML_KEM_SYM_SZ] = 4; ret = mlkem_get_noise_eta2_avx2(prf, poly, seed); @@ -4280,6 +4746,85 @@ static int mlkem_get_noise_k2_avx2(MLKEM_PRF_T* prf, sword16* vec1, return ret; } + +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 +/* Get eight lanes of ETA3-length random bytes using eight-way AVX-512 SHA3. + * Lane j uses seed count j; its output (two blocks) is written to + * rand + j * PRF_RAND_SZ. ETA2 samplers may read the same lanes (they consume + * fewer bytes of the identical SHAKE stream). + * + * @param [out] rand Random number byte array (8 * PRF_RAND_SZ bytes). + * @param [in] seed Seed to generate random from. + */ +static int mlkem_get_noise_x8_eta3_avx512(byte* rand, byte* seed) +{ + int i; + WC_DECLARE_VAR(state, word64, 25 * 8, 0); + + WC_ALLOC_VAR_EX(state, word64, 25 * 8, NULL, DYNAMIC_TYPE_TMP_BUFFER, + return MEMORY_E); + + for (i = 0; i < 8; i++) { + state[4*8 + i] = (word32)(0x1f00 + i); + } + + sha3_256_blocksx8_seed_avx512(state, seed); + mlkem_redistribute_17_rand_x8_avx512(state, rand, PRF_RAND_SZ); + sha3_blocksx8_avx512(state); + mlkem_redistribute_8_rand_x8_avx512(state, rand + SHA3_256_BYTES, + PRF_RAND_SZ); + + /* state is secret-seeded; caller zeroizes rand. */ + ForceZero(state, sizeof(word64) * 25 * 8); + WC_FREE_VAR_EX(state, NULL, DYNAMIC_TYPE_TMP_BUFFER); + return 0; +} + +/* Get the noise/error by calculating random bytes and sampling to a binomial + * distribution, using eight-way AVX-512 SHA3. The ETA3 vector lanes and (for + * encapsulation) the extra ETA2 polynomial share one eight-way batch - the + * ETA2 samples read fewer bytes of the same SHAKE-256 stream, so the extra + * polynomial no longer needs a separate single-lane hash. + * + * @param [in, out] prf Pseudo-random function object. + * @param [out] vec1 First Vector of polynomials. + * @param [out] vec2 Second Vector of polynomials. + * @param [out] poly Polynomial. + * @param [in, out] seed Seed to use when calculating random. + * @return 0 on success. + */ +static int mlkem_get_noise_k2_avx512(MLKEM_PRF_T* prf, sword16* vec1, + sword16* vec2, sword16* poly, byte* seed) +{ + int ret; + WC_DECLARE_VAR(rand, byte, 8 * PRF_RAND_SZ, 0); + + (void)prf; + + WC_ALLOC_VAR_EX(rand, byte, 8 * PRF_RAND_SZ, NULL, DYNAMIC_TYPE_TMP_BUFFER, + return MEMORY_E); + + ret = mlkem_get_noise_x8_eta3_avx512(rand, seed); + if (ret == 0) { + mlkem_cbd_eta3_ins(vec1 , rand + 0 * PRF_RAND_SZ); + mlkem_cbd_eta3_ins(vec1 + MLKEM_N, rand + 1 * PRF_RAND_SZ); + if (poly == NULL) { + mlkem_cbd_eta3_ins(vec2 , rand + 2 * PRF_RAND_SZ); + mlkem_cbd_eta3_ins(vec2 + MLKEM_N, rand + 3 * PRF_RAND_SZ); + } + else { + mlkem_cbd_eta2_ins(vec2 , rand + 2 * PRF_RAND_SZ); + mlkem_cbd_eta2_ins(vec2 + MLKEM_N, rand + 3 * PRF_RAND_SZ); + mlkem_cbd_eta2_ins(poly , rand + 4 * PRF_RAND_SZ); + } + } + + /* rand holds secret noise. */ + ForceZero(rand, 8 * PRF_RAND_SZ); + WC_FREE_VAR_EX(rand, NULL, DYNAMIC_TYPE_TMP_BUFFER); + return ret; +} +#endif #endif #if defined(WOLFSSL_KYBER768) || defined(WOLFSSL_WC_ML_KEM_768) @@ -4298,21 +4843,57 @@ static int mlkem_get_noise_k3_avx2(sword16* vec1, sword16* vec2, sword16* poly, byte rand[4 * ETA2_RAND_SIZE]; mlkem_get_noise_x4_eta2_avx2(rand, seed, 0); - mlkem_cbd_eta2_avx2(vec1 , rand + 0 * ETA2_RAND_SIZE); - mlkem_cbd_eta2_avx2(vec1 + 1 * MLKEM_N, rand + 1 * ETA2_RAND_SIZE); - mlkem_cbd_eta2_avx2(vec1 + 2 * MLKEM_N, rand + 2 * ETA2_RAND_SIZE); - mlkem_cbd_eta2_avx2(vec2 , rand + 3 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec1 , rand + 0 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec1 + 1 * MLKEM_N, rand + 1 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec1 + 2 * MLKEM_N, rand + 2 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec2 , rand + 3 * ETA2_RAND_SIZE); mlkem_get_noise_x4_eta2_avx2(rand, seed, 4); - mlkem_cbd_eta2_avx2(vec2 + 1 * MLKEM_N, rand + 0 * ETA2_RAND_SIZE); - mlkem_cbd_eta2_avx2(vec2 + 2 * MLKEM_N, rand + 1 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec2 + 1 * MLKEM_N, rand + 0 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec2 + 2 * MLKEM_N, rand + 1 * ETA2_RAND_SIZE); if (poly != NULL) { - mlkem_cbd_eta2_avx2(poly, rand + 2 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(poly, rand + 2 * ETA2_RAND_SIZE); } /* rand holds secret noise. */ ForceZero(rand, sizeof(rand)); return 0; } + +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 +/* Get the noise/error by calculating random bytes and sampling to a binomial + * distribution, using eight-way AVX-512 SHA3. All seven ETA2 lanes are + * produced in one batch. + * + * @param [out] vec1 First Vector of polynomials. + * @param [out] vec2 Second Vector of polynomials. + * @param [out] poly Polynomial. + * @param [in] seed Seed to use when calculating random. + * @return 0 on success. + */ +static int mlkem_get_noise_k3_avx512(sword16* vec1, sword16* vec2, + sword16* poly, byte* seed) +{ + int ret; + byte rand[8 * ETA2_RAND_SIZE]; + + ret = mlkem_get_noise_x8_eta2_avx512(rand, seed); + if (ret == 0) { + mlkem_cbd_eta2_ins(vec1 , rand + 0 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec1 + 1 * MLKEM_N, rand + 1 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec1 + 2 * MLKEM_N, rand + 2 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec2 , rand + 3 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec2 + 1 * MLKEM_N, rand + 4 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec2 + 2 * MLKEM_N, rand + 5 * ETA2_RAND_SIZE); + if (poly != NULL) { + mlkem_cbd_eta2_ins(poly, rand + 6 * ETA2_RAND_SIZE); + } + } + + /* rand holds secret noise. */ + ForceZero(rand, sizeof(rand)); + return ret; +} +#endif #endif #if defined(WOLFSSL_KYBER1024) || defined(WOLFSSL_WC_ML_KEM_1024) @@ -4335,15 +4916,15 @@ static int mlkem_get_noise_k4_avx2(MLKEM_PRF_T* prf, sword16* vec1, (void)prf; mlkem_get_noise_x4_eta2_avx2(rand, seed, 0); - mlkem_cbd_eta2_avx2(vec1 , rand + 0 * ETA2_RAND_SIZE); - mlkem_cbd_eta2_avx2(vec1 + 1 * MLKEM_N, rand + 1 * ETA2_RAND_SIZE); - mlkem_cbd_eta2_avx2(vec1 + 2 * MLKEM_N, rand + 2 * ETA2_RAND_SIZE); - mlkem_cbd_eta2_avx2(vec1 + 3 * MLKEM_N, rand + 3 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec1 , rand + 0 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec1 + 1 * MLKEM_N, rand + 1 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec1 + 2 * MLKEM_N, rand + 2 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec1 + 3 * MLKEM_N, rand + 3 * ETA2_RAND_SIZE); mlkem_get_noise_x4_eta2_avx2(rand, seed, 4); - mlkem_cbd_eta2_avx2(vec2 , rand + 0 * ETA2_RAND_SIZE); - mlkem_cbd_eta2_avx2(vec2 + 1 * MLKEM_N, rand + 1 * ETA2_RAND_SIZE); - mlkem_cbd_eta2_avx2(vec2 + 2 * MLKEM_N, rand + 2 * ETA2_RAND_SIZE); - mlkem_cbd_eta2_avx2(vec2 + 3 * MLKEM_N, rand + 3 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec2 , rand + 0 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec2 + 1 * MLKEM_N, rand + 1 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec2 + 2 * MLKEM_N, rand + 2 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec2 + 3 * MLKEM_N, rand + 3 * ETA2_RAND_SIZE); if (poly != NULL) { seed[WC_ML_KEM_SYM_SZ] = 8; ret = mlkem_get_noise_eta2_avx2(prf, poly, seed); @@ -4353,6 +4934,48 @@ static int mlkem_get_noise_k4_avx2(MLKEM_PRF_T* prf, sword16* vec1, ForceZero(rand, sizeof(rand)); return ret; } + +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 +/* Get the noise/error by calculating random bytes and sampling to a binomial + * distribution, using eight-way AVX-512 SHA3. The eight ETA2 vector lanes are + * produced in one batch; the extra polynomial uses a single SHA3 state. + * + * @param [in, out] prf Pseudo-random function object. + * @param [out] vec1 First Vector of polynomials. + * @param [out] vec2 Second Vector of polynomials. + * @param [out] poly Polynomial. + * @param [in, out] seed Seed to use when calculating random. + * @return 0 on success. + */ +static int mlkem_get_noise_k4_avx512(MLKEM_PRF_T* prf, sword16* vec1, + sword16* vec2, sword16* poly, byte* seed) +{ + int ret; + byte rand[8 * ETA2_RAND_SIZE]; + + (void)prf; + + ret = mlkem_get_noise_x8_eta2_avx512(rand, seed); + if (ret == 0) { + mlkem_cbd_eta2_ins(vec1 , rand + 0 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec1 + 1 * MLKEM_N, rand + 1 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec1 + 2 * MLKEM_N, rand + 2 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec1 + 3 * MLKEM_N, rand + 3 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec2 , rand + 4 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec2 + 1 * MLKEM_N, rand + 5 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec2 + 2 * MLKEM_N, rand + 6 * ETA2_RAND_SIZE); + mlkem_cbd_eta2_ins(vec2 + 3 * MLKEM_N, rand + 7 * ETA2_RAND_SIZE); + if (poly != NULL) { + seed[WC_ML_KEM_SYM_SZ] = 8; + ret = mlkem_get_noise_eta2_avx2(prf, poly, seed); + } + } + + /* rand holds secret noise. */ + ForceZero(rand, sizeof(rand)); + return ret; +} +#endif #endif #endif /* USE_INTEL_SPEEDUP */ @@ -4669,6 +5292,13 @@ int mlkem_get_noise(MLKEM_PRF_T* prf, int k, sword16* vec1, sword16* vec2, ret = mlkem_get_noise_k2_aarch64(vec1, vec2, poly, seed); #else #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) + #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + ret = mlkem_get_noise_k2_avx512(prf, vec1, vec2, poly, seed); + RESTORE_VECTOR_REGISTERS(); + } + else + #endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = mlkem_get_noise_k2_avx2(prf, vec1, vec2, poly, seed); RESTORE_VECTOR_REGISTERS(); @@ -4693,6 +5323,13 @@ int mlkem_get_noise(MLKEM_PRF_T* prf, int k, sword16* vec1, sword16* vec2, ret = mlkem_get_noise_k3_aarch64(vec1, vec2, poly, seed); #else #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) + #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + ret = mlkem_get_noise_k3_avx512(vec1, vec2, poly, seed); + RESTORE_VECTOR_REGISTERS(); + } + else + #endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = mlkem_get_noise_k3_avx2(vec1, vec2, poly, seed); RESTORE_VECTOR_REGISTERS(); @@ -4713,6 +5350,13 @@ int mlkem_get_noise(MLKEM_PRF_T* prf, int k, sword16* vec1, sword16* vec2, ret = mlkem_get_noise_k4_aarch64(vec1, vec2, poly, seed); #else #if defined(USE_INTEL_SPEEDUP) && !defined(WC_SHA3_NO_ASM) + #ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + ret = mlkem_get_noise_k4_avx512(prf, vec1, vec2, poly, seed); + RESTORE_VECTOR_REGISTERS(); + } + else + #endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { ret = mlkem_get_noise_k4_avx2(prf, vec1, vec2, poly, seed); RESTORE_VECTOR_REGISTERS(); @@ -4815,6 +5459,13 @@ int mlkem_cmp(const byte* a, const byte* b, int sz) int fail; #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + fail = mlkem_cmp_avx512(a, b, sz); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { fail = mlkem_cmp_avx2(a, b, sz); RESTORE_VECTOR_REGISTERS(); @@ -5102,6 +5753,20 @@ static void mlkem_vec_compress_10_c(byte* r, sword16* v, unsigned int k) void mlkem_vec_compress_10(byte* r, sword16* v, unsigned int k) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI + if (IS_INTEL_AVX512_VBMI(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_compress_10_avx512_vbmi(r, v, (int)k); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_compress_10_avx512(r, v, (int)k); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_compress_10_avx2(r, v, (int)k); RESTORE_VECTOR_REGISTERS(); @@ -5200,6 +5865,13 @@ static void mlkem_vec_compress_11_c(byte* r, sword16* v) void mlkem_vec_compress_11(byte* r, sword16* v) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_compress_11_avx512(r, v, 4); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_compress_11_avx2(r, v, 4); RESTORE_VECTOR_REGISTERS(); @@ -5306,6 +5978,20 @@ static void mlkem_vec_decompress_10_c(sword16* v, const byte* b, unsigned int k) void mlkem_vec_decompress_10(sword16* v, const byte* b, unsigned int k) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI + if (IS_INTEL_AVX512_VBMI(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_decompress_10_avx512_vbmi(v, b, (int)k); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_decompress_10_avx512(v, b, (int)k); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_decompress_10_avx2(v, b, (int)k); RESTORE_VECTOR_REGISTERS(); @@ -5394,6 +6080,20 @@ static void mlkem_vec_decompress_11_c(sword16* v, const byte* b) void mlkem_vec_decompress_11(sword16* v, const byte* b) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI + if (IS_INTEL_AVX512_VBMI(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_decompress_11_avx512_vbmi(v, b, 4); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_decompress_11_avx512(v, b, 4); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_decompress_11_avx2(v, b, 4); RESTORE_VECTOR_REGISTERS(); @@ -5563,6 +6263,20 @@ static void mlkem_compress_4_c(byte* b, sword16* p) void mlkem_compress_4(byte* b, sword16* p) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI + if (IS_INTEL_AVX512_VBMI(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_compress_4_avx512_vbmi(b, p); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_compress_4_avx512(b, p); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_compress_4_avx2(b, p); RESTORE_VECTOR_REGISTERS(); @@ -5641,6 +6355,20 @@ static void mlkem_compress_5_c(byte* b, sword16* p) void mlkem_compress_5(byte* b, sword16* p) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI + if (IS_INTEL_AVX512_VBMI(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_compress_5_avx512_vbmi(b, p); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_compress_5_avx512(b, p); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_compress_5_avx2(b, p); RESTORE_VECTOR_REGISTERS(); @@ -5711,6 +6439,13 @@ static void mlkem_decompress_4_c(sword16* p, const byte* b) void mlkem_decompress_4(sword16* p, const byte* b) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_decompress_4_avx512(p, b); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_decompress_4_avx2(p, b); RESTORE_VECTOR_REGISTERS(); @@ -5790,6 +6525,13 @@ static void mlkem_decompress_5_c(sword16* p, const byte* b) void mlkem_decompress_5(sword16* p, const byte* b) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_decompress_5_avx512(p, b); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_decompress_5_avx2(p, b); RESTORE_VECTOR_REGISTERS(); @@ -5867,6 +6609,13 @@ static void mlkem_from_msg_c(sword16* p, const byte* msg) void mlkem_from_msg(sword16* p, const byte* msg) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + mlkem_from_msg_avx512(p, msg); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { mlkem_from_msg_avx2(p, msg); RESTORE_VECTOR_REGISTERS(); @@ -5968,6 +6717,14 @@ static void mlkem_to_msg_c(byte* msg, sword16* p) void mlkem_to_msg(byte* msg, sword16* p) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + /* Convert the polynomial into an array of bytes (message). */ + mlkem_to_msg_avx512(msg, p); + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { /* Convert the polynomial into an array of bytes (message). */ mlkem_to_msg_avx2(msg, p); @@ -6055,6 +6812,34 @@ static void mlkem_from_bytes_c(sword16* p, const byte* b, int k) void mlkem_from_bytes(sword16* p, const byte* b, int k) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI + if (IS_INTEL_AVX512_VBMI(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + int i; + + for (i = 0; i < k; i++) { + mlkem_from_bytes_avx512_vbmi(p, b); + p += MLKEM_N; + b += WC_ML_KEM_POLY_SIZE; + } + + RESTORE_VECTOR_REGISTERS(); + } + else +#endif +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + int i; + + for (i = 0; i < k; i++) { + mlkem_from_bytes_avx512(p, b); + p += MLKEM_N; + b += WC_ML_KEM_POLY_SIZE; + } + + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { int i; @@ -6120,6 +6905,34 @@ static void mlkem_to_bytes_c(byte* b, sword16* p, int k) void mlkem_to_bytes(byte* b, sword16* p, int k) { #ifdef USE_INTEL_SPEEDUP +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI + if (IS_INTEL_AVX512_VBMI(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + int i; + + for (i = 0; i < k; i++) { + mlkem_to_bytes_avx512_vbmi(b, p); + p += MLKEM_N; + b += WC_ML_KEM_POLY_SIZE; + } + + RESTORE_VECTOR_REGISTERS(); + } + else +#endif +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + if (IS_INTEL_AVX512(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + int i; + + for (i = 0; i < k; i++) { + mlkem_to_bytes_avx512(b, p); + p += MLKEM_N; + b += WC_ML_KEM_POLY_SIZE; + } + + RESTORE_VECTOR_REGISTERS(); + } + else +#endif if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { int i; diff --git a/wolfssl/wolfcrypt/cpuid.h b/wolfssl/wolfcrypt/cpuid.h index faf96c6159..574ac768b5 100644 --- a/wolfssl/wolfcrypt/cpuid.h +++ b/wolfssl/wolfcrypt/cpuid.h @@ -77,6 +77,8 @@ typedef word32 cpuid_flags_t; /* CPU vendor is AuthenticAMD. Detected and exposed via IS_CPU_AMD() for * future vendor-specific dispatch; no current caller relies on it. */ #define CPUID_AMD 0x2000 + #define CPUID_AVX512_VBMI 0x4000 /* AVX-512 Vector Byte Manipulation */ + #define CPUID_AVX512_VBMI2 0x8000 /* AVX-512 VBMI2 (vpcompressw etc.) */ #define IS_INTEL_AVX1(f) (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_AVX1) #define IS_INTEL_AVX2(f) (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_AVX2) @@ -90,6 +92,10 @@ typedef word32 cpuid_flags_t; #define IS_INTEL_SHA(f) (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_SHA) #define IS_INTEL_VAES(f) (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_VAES) #define IS_INTEL_AVX512(f) (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_AVX512) + #define IS_INTEL_AVX512_VBMI(f) \ + (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_AVX512_VBMI) + #define IS_INTEL_AVX512_VBMI2(f) \ + (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_AVX512_VBMI2) #define IS_CPU_INTEL(f) (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_INTEL) #define IS_CPU_AMD(f) (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_AMD) diff --git a/wolfssl/wolfcrypt/sha3.h b/wolfssl/wolfcrypt/sha3.h index 238e239e35..68d79e6188 100644 --- a/wolfssl/wolfcrypt/sha3.h +++ b/wolfssl/wolfcrypt/sha3.h @@ -401,6 +401,11 @@ WOLFSSL_LOCAL void BlockSha3(word64 *s); word32 len); WOLFSSL_LOCAL void sha3_blocksx8_out_avx512(word64* s, byte* out, word32 len); +#ifndef NO_AVX512_SUPPORT + WOLFSSL_LOCAL void sha3_blocksx8_avx512(word64* s); + WOLFSSL_LOCAL void sha3_128_blocksx8_seed_avx512(word64* s, byte* seed); + WOLFSSL_LOCAL void sha3_256_blocksx8_seed_avx512(word64* s, byte* seed); +#endif WOLFSSL_LOCAL void sha3_128_blocksx4_seed_avx2(word64* s, byte* seed); WOLFSSL_LOCAL void sha3_256_blocksx4_seed_avx2(word64* s, byte* seed); diff --git a/wolfssl/wolfcrypt/wc_mlkem.h b/wolfssl/wolfcrypt/wc_mlkem.h index edbc17a077..bb8293c78e 100644 --- a/wolfssl/wolfcrypt/wc_mlkem.h +++ b/wolfssl/wolfcrypt/wc_mlkem.h @@ -583,6 +583,19 @@ WOLFSSL_LOCAL int mlkem_check_reduced(const sword16* p, int k); #ifdef USE_INTEL_SPEEDUP +/* AVX512 assembly for ML-KEM is built (and dispatched at runtime on capable + * CPUs) whenever the Intel speedups are enabled and AVX512 is not opted out. + * Matches the HAVE_INTEL_AVX512 guard around the generated assembly. */ +#ifndef NO_AVX512_SUPPORT + #define WOLFSSL_MLKEM_HAVE_INTEL_AVX512 + /* AVX512VBMI (vpermb) functions are built (matching the auto-enabled + * HAVE_INTEL_AVX512_VBMI guard around the generated assembly) and + * dispatched at runtime when CPUID reports VBMI. Opt out with + * NO_AVX512_VBMI_SUPPORT if the toolchain's assembler cannot emit VBMI. */ + #ifndef NO_AVX512_VBMI_SUPPORT + #define WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI + #endif +#endif WOLFSSL_LOCAL void mlkem_keygen_avx2(sword16* priv, sword16* pub, sword16* e, const sword16* a, int kp); @@ -649,6 +662,111 @@ void mlkem_decompress_5_avx2(sword16* p, const byte* r); WOLFSSL_LOCAL int mlkem_cmp_avx2(const byte* a, const byte* b, int sz); + +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512 +WOLFSSL_LOCAL +void mlkem_keygen_avx512(sword16* priv, sword16* pub, sword16* e, + const sword16* a, int kp); +WOLFSSL_LOCAL +void mlkem_encapsulate_avx512(const sword16* pub, sword16* bp, sword16* v, + const sword16* at, sword16* sp, const sword16* ep, const sword16* epp, + const sword16* m, int kp); +WOLFSSL_LOCAL +void mlkem_decapsulate_avx512(const sword16* priv, sword16* mp, sword16* bp, + const sword16* v, int kp); +WOLFSSL_LOCAL +void mlkem_csubq_avx512(sword16* p); +WOLFSSL_LOCAL +int mlkem_cmp_avx512(const byte* a, const byte* b, int sz); +WOLFSSL_LOCAL +void mlkem_from_bytes_avx512(sword16* p, const byte* b); +WOLFSSL_LOCAL +void mlkem_to_bytes_avx512(byte* b, sword16* p); +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI +WOLFSSL_LOCAL +void mlkem_from_bytes_avx512_vbmi(sword16* p, const byte* b); +WOLFSSL_LOCAL +void mlkem_to_bytes_avx512_vbmi(byte* b, sword16* p); +#endif +WOLFSSL_LOCAL +void mlkem_from_msg_avx512(sword16* p, const byte* msg); +WOLFSSL_LOCAL +void mlkem_to_msg_avx512(byte* msg, sword16* p); +WOLFSSL_LOCAL +void mlkem_compress_4_avx512(byte* b, sword16* p); +WOLFSSL_LOCAL +void mlkem_decompress_4_avx512(sword16* p, const byte* b); +WOLFSSL_LOCAL +void mlkem_decompress_5_avx512(sword16* p, const byte* b); +WOLFSSL_LOCAL +void mlkem_decompress_10_avx512(sword16* p, const byte* r, int n); +WOLFSSL_LOCAL +void mlkem_decompress_11_avx512(sword16* p, const byte* r, int n); +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI +WOLFSSL_LOCAL +void mlkem_decompress_10_avx512_vbmi(sword16* p, const byte* r, int n); +WOLFSSL_LOCAL +void mlkem_decompress_11_avx512_vbmi(sword16* p, const byte* r, int n); +#endif +WOLFSSL_LOCAL +void mlkem_compress_5_avx512(byte* b, sword16* p); +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI +WOLFSSL_LOCAL +void mlkem_compress_5_avx512_vbmi(byte* b, sword16* p); +#endif +WOLFSSL_LOCAL +void mlkem_compress_10_avx512(byte* r, const sword16* p, int n); +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI +WOLFSSL_LOCAL +void mlkem_compress_4_avx512_vbmi(byte* b, const sword16* p); +WOLFSSL_LOCAL +void mlkem_compress_10_avx512_vbmi(byte* r, const sword16* p, int n); +#endif +WOLFSSL_LOCAL +void mlkem_compress_11_avx512(byte* r, const sword16* p, int n); +WOLFSSL_LOCAL +unsigned int mlkem_rej_uniform_n_avx512(sword16* p, unsigned int len, + const byte* r, unsigned int rLen); +WOLFSSL_LOCAL +unsigned int mlkem_rej_uniform_avx512(sword16* p, unsigned int len, + const byte* r, unsigned int rLen); +#ifdef WOLFSSL_MLKEM_HAVE_INTEL_AVX512_VBMI +WOLFSSL_LOCAL +unsigned int mlkem_rej_uniform_n_avx512_vbmi(sword16* p, unsigned int len, + const byte* r, unsigned int rLen); +WOLFSSL_LOCAL +unsigned int mlkem_rej_uniform_avx512_vbmi(sword16* p, unsigned int len, + const byte* r, unsigned int rLen); +#endif +WOLFSSL_LOCAL +void mlkem_redistribute_8_rand_avx512(const word64* s, byte* r0, byte* r1, + byte* r2, byte* r3); +WOLFSSL_LOCAL +void mlkem_redistribute_16_rand_avx512(const word64* s, byte* r0, byte* r1, + byte* r2, byte* r3); +WOLFSSL_LOCAL +void mlkem_redistribute_17_rand_avx512(const word64* s, byte* r0, byte* r1, + byte* r2, byte* r3); +WOLFSSL_LOCAL +void mlkem_redistribute_21_rand_avx512(const word64* s, byte* r0, byte* r1, + byte* r2, byte* r3); +WOLFSSL_LOCAL +void mlkem_redistribute_8_rand_x8_avx512(const word64* s, byte* out, + word32 stride); +WOLFSSL_LOCAL +void mlkem_redistribute_16_rand_x8_avx512(const word64* s, byte* out, + word32 stride); +WOLFSSL_LOCAL +void mlkem_redistribute_17_rand_x8_avx512(const word64* s, byte* out, + word32 stride); +WOLFSSL_LOCAL +void mlkem_redistribute_21_rand_x8_avx512(const word64* s, byte* out, + word32 stride); +WOLFSSL_LOCAL +void mlkem_cbd_eta2_avx512(sword16* p, const byte* r); +WOLFSSL_LOCAL +void mlkem_cbd_eta3_avx512(sword16* p, const byte* r); +#endif /* WOLFSSL_MLKEM_HAVE_INTEL_AVX512 */ #elif defined(__aarch64__) && defined(WOLFSSL_ARMASM) WOLFSSL_LOCAL void mlkem_ntt(sword16* r); WOLFSSL_LOCAL void mlkem_invntt(sword16* r);