-rw-r--r-- 41566 lib25519-20240321/crypto_nPbatch/montgomery25519/amd64-avx512ifma-8x1-maax/mladder.S raw
#include "crypto_asm_hidden.h"
#include "consts_namespace.h"
// 8-way Montgomery ladder
.p2align 6
ASM_HIDDEN _CRYPTO_SHARED_NAMESPACE(mladder_8x1)
.globl _CRYPTO_SHARED_NAMESPACE(mladder_8x1)
ASM_HIDDEN CRYPTO_SHARED_NAMESPACE(mladder_8x1)
.globl CRYPTO_SHARED_NAMESPACE(mladder_8x1)
_CRYPTO_SHARED_NAMESPACE(mladder_8x1):
CRYPTO_SHARED_NAMESPACE(mladder_8x1):
movq %rsp,%r8
andq $-64,%rsp
subq $1024,%rsp
vmovdqa64 vec0(%rip),%zmm0
vmovdqa64 vec1(%rip),%zmm1
// X2 ← 1
vmovdqa64 %zmm1,%zmm10
vmovdqa64 %zmm0,%zmm11
vmovdqa64 %zmm0,%zmm12
vmovdqa64 %zmm0,%zmm13
vmovdqa64 %zmm0,%zmm14
// Z2 ← 0
vmovdqa64 %zmm0,%zmm15
vmovdqa64 %zmm0,%zmm16
vmovdqa64 %zmm0,%zmm17
vmovdqa64 %zmm0,%zmm18
vmovdqa64 %zmm0,%zmm19
// Z3 ← 1
vmovdqa64 %zmm1,%zmm25
vmovdqa64 %zmm0,%zmm26
vmovdqa64 %zmm0,%zmm27
vmovdqa64 %zmm0,%zmm28
vmovdqa64 %zmm0,%zmm29
// X3 ← XP, X1 ← XP
vmovdqa64 0(%rsi),%zmm20
vmovdqa64 %zmm20,64(%rsp)
vmovdqa64 64(%rsi),%zmm21
vmovdqa64 %zmm21,128(%rsp)
vmovdqa64 128(%rsi),%zmm22
vmovdqa64 %zmm22,192(%rsp)
vmovdqa64 192(%rsi),%zmm23
vmovdqa64 %zmm23,256(%rsp)
vmovdqa64 256(%rsi),%zmm24
vmovdqa64 %zmm24,320(%rsp)
movq $192,%r9
movb $62,%cl
vmovdqa64 vec0(%rip),%zmm0
vmovdqa64 sixtytwo(%rip),%zmm1
vmovdqa64 %zmm1,896(%rsp)
vmovdqa64 %zmm0,960(%rsp)
movq %rdx,%rax
.L1:
addq %r9,%rax
vmovdqa64 0(%rax),%zmm30
vmovdqa64 %zmm30,0(%rsp)
movq %rdx,%rax
.L2:
/*
* Montgomery ladder step
*
* T1 ← X2 + Z2
* T2 ← X2 - Z2
* T3 ← X3 + Z3
* T4 ← X3 - Z3
* Z3 ← T2 · T3
* X3 ← T1 · T4
*
* bit ← n[i]
* select ← bit ⊕ prevbit
* prevbit ← bit
* CSelect(T1,T3,select): if (select == 1) {T1 = T3}
* CSelect(T2,T4,select): if (select == 1) {T2 = T4}
*
* T2 ← T2^2
* T1 ← T1^2
* T3 ← X3 + Z3
* Z3 ← X3 - Z3
* Z3 ← Z3^2
* X3 ← T3^2
* T3 ← T1 - T2
* T4 ← ((A + 2)/4) · T3
* T4 ← T4 + T2
* X2 ← T1 · T2
* Z2 ← T3 · T4
* Z3 ← Z3 · X1
*
*/
// T1 ← X2 + Z2
vpaddq %zmm15,%zmm10,%zmm0
vpaddq %zmm16,%zmm11,%zmm1
vpaddq %zmm17,%zmm12,%zmm2
vpaddq %zmm18,%zmm13,%zmm3
vpaddq %zmm19,%zmm14,%zmm4
vpsrlq $52,%zmm3,%zmm31
vpaddq %zmm31,%zmm4,%zmm4
vpandq vecmask52(%rip),%zmm3,%zmm3
vpsrlq $47,%zmm4,%zmm31
vpandq vecmask47(%rip),%zmm4,%zmm4
vpmadd52luq vec19(%rip),%zmm31,%zmm0
vpsrlq $52,%zmm0,%zmm31
vpaddq %zmm31,%zmm1,%zmm1
vpandq vecmask52(%rip),%zmm0,%zmm0
vpsrlq $52,%zmm1,%zmm31
vpaddq %zmm31,%zmm2,%zmm2
vpandq vecmask52(%rip),%zmm1,%zmm1
vpsrlq $52,%zmm2,%zmm31
vpaddq %zmm31,%zmm3,%zmm3
vpandq vecmask52(%rip),%zmm2,%zmm2
vpsrlq $52,%zmm3,%zmm31
vpaddq %zmm31,%zmm4,%zmm4
vpandq vecmask52(%rip),%zmm3,%zmm3
// T2 ← X2 - Z2
vpaddq vec2p0(%rip),%zmm10,%zmm10
vpaddq vec2p123(%rip),%zmm11,%zmm11
vpaddq vec2p123(%rip),%zmm12,%zmm12
vpaddq vec2p123(%rip),%zmm13,%zmm13
vpaddq vec2p4(%rip),%zmm14,%zmm14
vpsubq %zmm15,%zmm10,%zmm10
vpsubq %zmm16,%zmm11,%zmm11
vpsubq %zmm17,%zmm12,%zmm12
vpsubq %zmm18,%zmm13,%zmm13
vpsubq %zmm19,%zmm14,%zmm14
vpsrlq $52,%zmm13,%zmm31
vpaddq %zmm31,%zmm14,%zmm14
vpandq vecmask52(%rip),%zmm13,%zmm13
vpsrlq $47,%zmm14,%zmm31
vpandq vecmask47(%rip),%zmm14,%zmm14
vpmadd52luq vec19(%rip),%zmm31,%zmm10
vpsrlq $52,%zmm10,%zmm31
vpaddq %zmm31,%zmm11,%zmm11
vpandq vecmask52(%rip),%zmm10,%zmm10
vpsrlq $52,%zmm11,%zmm31
vpaddq %zmm31,%zmm12,%zmm12
vpandq vecmask52(%rip),%zmm11,%zmm11
vpsrlq $52,%zmm12,%zmm31
vpaddq %zmm31,%zmm13,%zmm13
vpandq vecmask52(%rip),%zmm12,%zmm12
vpsrlq $52,%zmm13,%zmm31
vpaddq %zmm31,%zmm14,%zmm14
vpandq vecmask52(%rip),%zmm13,%zmm13
// T3 ← X3 + Z3
vpaddq %zmm20,%zmm25,%zmm15
vpaddq %zmm21,%zmm26,%zmm16
vpaddq %zmm22,%zmm27,%zmm17
vpaddq %zmm23,%zmm28,%zmm18
vpaddq %zmm24,%zmm29,%zmm19
vpsrlq $52,%zmm18,%zmm31
vpaddq %zmm31,%zmm19,%zmm19
vpandq vecmask52(%rip),%zmm18,%zmm18
vpsrlq $47,%zmm19,%zmm31
vpandq vecmask47(%rip),%zmm19,%zmm19
vpmadd52luq vec19(%rip),%zmm31,%zmm15
vpsrlq $52,%zmm15,%zmm31
vpaddq %zmm31,%zmm16,%zmm16
vpandq vecmask52(%rip),%zmm15,%zmm15
vpsrlq $52,%zmm16,%zmm31
vpaddq %zmm31,%zmm17,%zmm17
vpandq vecmask52(%rip),%zmm16,%zmm16
vpsrlq $52,%zmm17,%zmm31
vpaddq %zmm31,%zmm18,%zmm18
vpandq vecmask52(%rip),%zmm17,%zmm17
vpsrlq $52,%zmm18,%zmm31
vpaddq %zmm31,%zmm19,%zmm19
vpandq vecmask52(%rip),%zmm18,%zmm18
// T4 ← X3 - Z3
vpaddq vec2p0(%rip),%zmm20,%zmm20
vpaddq vec2p123(%rip),%zmm21,%zmm21
vpaddq vec2p123(%rip),%zmm22,%zmm22
vpaddq vec2p123(%rip),%zmm23,%zmm23
vpaddq vec2p4(%rip),%zmm24,%zmm24
vpsubq %zmm25,%zmm20,%zmm5
vpsubq %zmm26,%zmm21,%zmm6
vpsubq %zmm27,%zmm22,%zmm7
vpsubq %zmm28,%zmm23,%zmm8
vpsubq %zmm29,%zmm24,%zmm9
vpsrlq $52,%zmm8,%zmm31
vpaddq %zmm31,%zmm9,%zmm9
vpandq vecmask52(%rip),%zmm8,%zmm8
vpsrlq $47,%zmm9,%zmm31
vpandq vecmask47(%rip),%zmm9,%zmm9
vpmadd52luq vec19(%rip),%zmm31,%zmm5
vpsrlq $52,%zmm5,%zmm31
vpaddq %zmm31,%zmm6,%zmm6
vpandq vecmask52(%rip),%zmm5,%zmm5
vpsrlq $52,%zmm6,%zmm31
vpaddq %zmm31,%zmm7,%zmm7
vpandq vecmask52(%rip),%zmm6,%zmm6
vpsrlq $52,%zmm7,%zmm31
vpaddq %zmm31,%zmm8,%zmm8
vpandq vecmask52(%rip),%zmm7,%zmm7
vpsrlq $52,%zmm8,%zmm31
vpaddq %zmm31,%zmm9,%zmm9
vpandq vecmask52(%rip),%zmm8,%zmm8
// Z3 ← T2 · T3
vpxorq %zmm20,%zmm20,%zmm20
vpxorq %zmm21,%zmm21,%zmm21
vpxorq %zmm22,%zmm22,%zmm22
vpxorq %zmm23,%zmm23,%zmm23
vpxorq %zmm24,%zmm24,%zmm24
vpxorq %zmm25,%zmm25,%zmm25
vpxorq %zmm26,%zmm26,%zmm26
vpxorq %zmm27,%zmm27,%zmm27
vpxorq %zmm28,%zmm28,%zmm28
vpxorq %zmm29,%zmm29,%zmm29
vpmadd52luq %zmm10,%zmm15,%zmm20
vpmadd52huq %zmm10,%zmm15,%zmm21
vpmadd52luq %zmm10,%zmm16,%zmm21
vpmadd52huq %zmm10,%zmm16,%zmm22
vpmadd52luq %zmm11,%zmm15,%zmm21
vpmadd52huq %zmm11,%zmm15,%zmm22
vpmadd52luq %zmm10,%zmm17,%zmm22
vpmadd52huq %zmm10,%zmm17,%zmm23
vpmadd52luq %zmm11,%zmm16,%zmm22
vpmadd52huq %zmm11,%zmm16,%zmm23
vpmadd52luq %zmm12,%zmm15,%zmm22
vpmadd52huq %zmm12,%zmm15,%zmm23
vpmadd52luq %zmm10,%zmm18,%zmm23
vpmadd52huq %zmm10,%zmm18,%zmm24
vpmadd52luq %zmm11,%zmm17,%zmm23
vpmadd52huq %zmm11,%zmm17,%zmm24
vpmadd52luq %zmm12,%zmm16,%zmm23
vpmadd52huq %zmm12,%zmm16,%zmm24
vpmadd52luq %zmm13,%zmm15,%zmm23
vpmadd52huq %zmm13,%zmm15,%zmm24
vpmadd52luq %zmm10,%zmm19,%zmm24
vpmadd52huq %zmm10,%zmm19,%zmm25
vpmadd52luq %zmm11,%zmm18,%zmm24
vpmadd52huq %zmm11,%zmm18,%zmm25
vpmadd52luq %zmm12,%zmm17,%zmm24
vpmadd52huq %zmm12,%zmm17,%zmm25
vpmadd52luq %zmm13,%zmm16,%zmm24
vpmadd52huq %zmm13,%zmm16,%zmm25
vpmadd52luq %zmm14,%zmm15,%zmm24
vpmadd52huq %zmm14,%zmm15,%zmm25
vpmadd52luq %zmm11,%zmm19,%zmm25
vpmadd52huq %zmm11,%zmm19,%zmm26
vpmadd52luq %zmm12,%zmm18,%zmm25
vpmadd52huq %zmm12,%zmm18,%zmm26
vpmadd52luq %zmm13,%zmm17,%zmm25
vpmadd52huq %zmm13,%zmm17,%zmm26
vpmadd52luq %zmm14,%zmm16,%zmm25
vpmadd52huq %zmm14,%zmm16,%zmm26
vpmadd52luq %zmm12,%zmm19,%zmm26
vpmadd52huq %zmm12,%zmm19,%zmm27
vpmadd52luq %zmm13,%zmm18,%zmm26
vpmadd52huq %zmm13,%zmm18,%zmm27
vpmadd52luq %zmm14,%zmm17,%zmm26
vpmadd52huq %zmm14,%zmm17,%zmm27
vpmadd52luq %zmm13,%zmm19,%zmm27
vpmadd52huq %zmm13,%zmm19,%zmm28
vpmadd52luq %zmm14,%zmm18,%zmm27
vpmadd52huq %zmm14,%zmm18,%zmm28
vpmadd52luq %zmm14,%zmm19,%zmm28
vpmadd52huq %zmm14,%zmm19,%zmm29
vpsrlq $52,%zmm25,%zmm31
vpaddq %zmm31,%zmm26,%zmm26
vpandq vecmask52(%rip),%zmm25,%zmm25
vpmadd52luq vec608(%rip),%zmm25,%zmm20
vpmadd52huq vec608(%rip),%zmm25,%zmm21
vpsrlq $52,%zmm26,%zmm31
vpaddq %zmm31,%zmm27,%zmm27
vpandq vecmask52(%rip),%zmm26,%zmm26
vpmadd52luq vec608(%rip),%zmm26,%zmm21
vpmadd52huq vec608(%rip),%zmm26,%zmm22
vpsrlq $52,%zmm27,%zmm31
vpaddq %zmm31,%zmm28,%zmm28
vpandq vecmask52(%rip),%zmm27,%zmm27
vpmadd52luq vec608(%rip),%zmm27,%zmm22
vpmadd52huq vec608(%rip),%zmm27,%zmm23
vpsrlq $52,%zmm28,%zmm31
vpaddq %zmm31,%zmm29,%zmm29
vpandq vecmask52(%rip),%zmm28,%zmm28
vpmadd52luq vec608(%rip),%zmm28,%zmm23
vpmadd52huq vec608(%rip),%zmm28,%zmm24
vpmadd52luq vec608(%rip),%zmm29,%zmm24
vmovdqa64 %zmm20,384(%rsp)
vmovdqa64 %zmm21,448(%rsp)
vmovdqa64 %zmm22,512(%rsp)
vmovdqa64 %zmm23,576(%rsp)
vmovdqa64 %zmm24,640(%rsp)
// X3 ← T1 · T4
vpxorq %zmm20,%zmm20,%zmm20
vpxorq %zmm21,%zmm21,%zmm21
vpxorq %zmm22,%zmm22,%zmm22
vpxorq %zmm23,%zmm23,%zmm23
vpxorq %zmm24,%zmm24,%zmm24
vpxorq %zmm25,%zmm25,%zmm25
vpxorq %zmm26,%zmm26,%zmm26
vpxorq %zmm27,%zmm27,%zmm27
vpxorq %zmm28,%zmm28,%zmm28
vpxorq %zmm29,%zmm29,%zmm29
vpmadd52luq %zmm0,%zmm5,%zmm20
vpmadd52huq %zmm0,%zmm5,%zmm21
vpmadd52luq %zmm0,%zmm6,%zmm21
vpmadd52huq %zmm0,%zmm6,%zmm22
vpmadd52luq %zmm1,%zmm5,%zmm21
vpmadd52huq %zmm1,%zmm5,%zmm22
vpmadd52luq %zmm0,%zmm7,%zmm22
vpmadd52huq %zmm0,%zmm7,%zmm23
vpmadd52luq %zmm1,%zmm6,%zmm22
vpmadd52huq %zmm1,%zmm6,%zmm23
vpmadd52luq %zmm2,%zmm5,%zmm22
vpmadd52huq %zmm2,%zmm5,%zmm23
vpmadd52luq %zmm0,%zmm8,%zmm23
vpmadd52huq %zmm0,%zmm8,%zmm24
vpmadd52luq %zmm1,%zmm7,%zmm23
vpmadd52huq %zmm1,%zmm7,%zmm24
vpmadd52luq %zmm2,%zmm6,%zmm23
vpmadd52huq %zmm2,%zmm6,%zmm24
vpmadd52luq %zmm3,%zmm5,%zmm23
vpmadd52huq %zmm3,%zmm5,%zmm24
vpmadd52luq %zmm0,%zmm9,%zmm24
vpmadd52huq %zmm0,%zmm9,%zmm25
vpmadd52luq %zmm1,%zmm8,%zmm24
vpmadd52huq %zmm1,%zmm8,%zmm25
vpmadd52luq %zmm2,%zmm7,%zmm24
vpmadd52huq %zmm2,%zmm7,%zmm25
vpmadd52luq %zmm3,%zmm6,%zmm24
vpmadd52huq %zmm3,%zmm6,%zmm25
vpmadd52luq %zmm4,%zmm5,%zmm24
vpmadd52huq %zmm4,%zmm5,%zmm25
vpmadd52luq %zmm1,%zmm9,%zmm25
vpmadd52huq %zmm1,%zmm9,%zmm26
vpmadd52luq %zmm2,%zmm8,%zmm25
vpmadd52huq %zmm2,%zmm8,%zmm26
vpmadd52luq %zmm3,%zmm7,%zmm25
vpmadd52huq %zmm3,%zmm7,%zmm26
vpmadd52luq %zmm4,%zmm6,%zmm25
vpmadd52huq %zmm4,%zmm6,%zmm26
vpmadd52luq %zmm2,%zmm9,%zmm26
vpmadd52huq %zmm2,%zmm9,%zmm27
vpmadd52luq %zmm3,%zmm8,%zmm26
vpmadd52huq %zmm3,%zmm8,%zmm27
vpmadd52luq %zmm4,%zmm7,%zmm26
vpmadd52huq %zmm4,%zmm7,%zmm27
vpmadd52luq %zmm3,%zmm9,%zmm27
vpmadd52huq %zmm3,%zmm9,%zmm28
vpmadd52luq %zmm4,%zmm8,%zmm27
vpmadd52huq %zmm4,%zmm8,%zmm28
vpmadd52luq %zmm4,%zmm9,%zmm28
vpmadd52huq %zmm4,%zmm9,%zmm29
vpsrlq $52,%zmm25,%zmm31
vpaddq %zmm31,%zmm26,%zmm26
vpandq vecmask52(%rip),%zmm25,%zmm25
vpmadd52luq vec608(%rip),%zmm25,%zmm20
vpmadd52huq vec608(%rip),%zmm25,%zmm21
vpsrlq $52,%zmm26,%zmm31
vpaddq %zmm31,%zmm27,%zmm27
vpandq vecmask52(%rip),%zmm26,%zmm26
vpmadd52luq vec608(%rip),%zmm26,%zmm21
vpmadd52huq vec608(%rip),%zmm26,%zmm22
vpsrlq $52,%zmm27,%zmm31
vpaddq %zmm31,%zmm28,%zmm28
vpandq vecmask52(%rip),%zmm27,%zmm27
vpmadd52luq vec608(%rip),%zmm27,%zmm22
vpmadd52huq vec608(%rip),%zmm27,%zmm23
vpsrlq $52,%zmm28,%zmm31
vpaddq %zmm31,%zmm29,%zmm29
vpandq vecmask52(%rip),%zmm28,%zmm28
vpmadd52luq vec608(%rip),%zmm28,%zmm23
vpmadd52huq vec608(%rip),%zmm28,%zmm24
vpmadd52luq vec608(%rip),%zmm29,%zmm24
// conditional select
vmovdqa64 896(%rsp),%zmm31
vpsrlq %xmm31,%zmm30,%zmm30
vpandq vec1(%rip),%zmm30,%zmm25
vpxorq 960(%rsp),%zmm25,%zmm30
vmovdqa64 %zmm25,960(%rsp)
vpsubq one(%rip),%zmm31,%zmm31
vmovdqa64 %zmm31,896(%rsp)
vmovdqa64 vec0(%rip),%zmm31
vpsubq %zmm30,%zmm31,%zmm31
vpxorq %zmm15,%zmm0,%zmm25
vpxorq %zmm16,%zmm1,%zmm26
vpxorq %zmm17,%zmm2,%zmm27
vpxorq %zmm18,%zmm3,%zmm28
vpxorq %zmm19,%zmm4,%zmm29
vpandq %zmm31,%zmm25,%zmm25
vpandq %zmm31,%zmm26,%zmm26
vpandq %zmm31,%zmm27,%zmm27
vpandq %zmm31,%zmm28,%zmm28
vpandq %zmm31,%zmm29,%zmm29
vpxorq %zmm0,%zmm25,%zmm0
vpxorq %zmm1,%zmm26,%zmm1
vpxorq %zmm2,%zmm27,%zmm2
vpxorq %zmm3,%zmm28,%zmm3
vpxorq %zmm4,%zmm29,%zmm4
vpxorq %zmm5,%zmm10,%zmm25
vpxorq %zmm6,%zmm11,%zmm26
vpxorq %zmm7,%zmm12,%zmm27
vpxorq %zmm8,%zmm13,%zmm28
vpxorq %zmm9,%zmm14,%zmm29
vpandq %zmm31,%zmm25,%zmm25
vpandq %zmm31,%zmm26,%zmm26
vpandq %zmm31,%zmm27,%zmm27
vpandq %zmm31,%zmm28,%zmm28
vpandq %zmm31,%zmm29,%zmm29
vpxorq %zmm10,%zmm25,%zmm5
vpxorq %zmm11,%zmm26,%zmm6
vpxorq %zmm12,%zmm27,%zmm7
vpxorq %zmm13,%zmm28,%zmm8
vpxorq %zmm14,%zmm29,%zmm9
// T2 ← T2^2
vpxorq %zmm10,%zmm10,%zmm10
vpxorq %zmm11,%zmm11,%zmm11
vpxorq %zmm12,%zmm12,%zmm12
vpxorq %zmm13,%zmm13,%zmm13
vpxorq %zmm14,%zmm14,%zmm14
vpxorq %zmm15,%zmm15,%zmm15
vpxorq %zmm16,%zmm16,%zmm16
vpxorq %zmm17,%zmm17,%zmm17
vpxorq %zmm18,%zmm18,%zmm18
vpxorq %zmm19,%zmm19,%zmm19
vpmadd52luq %zmm5,%zmm5,%zmm10
vpmadd52huq %zmm5,%zmm5,%zmm11
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm5,%zmm6,%zmm31
vpmadd52huq %zmm5,%zmm6,%zmm12
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm11,%zmm11
vpaddq %zmm12,%zmm12,%zmm12
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm5,%zmm7,%zmm31
vpmadd52huq %zmm5,%zmm7,%zmm13
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm12,%zmm12
vpaddq %zmm13,%zmm13,%zmm13
vpmadd52luq %zmm6,%zmm6,%zmm12
vpmadd52huq %zmm6,%zmm6,%zmm13
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm5,%zmm8,%zmm31
vpmadd52huq %zmm5,%zmm8,%zmm14
vpmadd52luq %zmm6,%zmm7,%zmm31
vpmadd52huq %zmm6,%zmm7,%zmm14
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm13,%zmm13
vpaddq %zmm14,%zmm14,%zmm14
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm5,%zmm9,%zmm31
vpmadd52huq %zmm5,%zmm9,%zmm15
vpmadd52luq %zmm6,%zmm8,%zmm31
vpmadd52huq %zmm6,%zmm8,%zmm15
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm14,%zmm14
vpaddq %zmm15,%zmm15,%zmm15
vpmadd52luq %zmm7,%zmm7,%zmm14
vpmadd52huq %zmm7,%zmm7,%zmm15
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm6,%zmm9,%zmm31
vpmadd52huq %zmm6,%zmm9,%zmm16
vpmadd52luq %zmm7,%zmm8,%zmm31
vpmadd52huq %zmm7,%zmm8,%zmm16
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm15,%zmm15
vpaddq %zmm16,%zmm16,%zmm16
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm7,%zmm9,%zmm31
vpmadd52huq %zmm7,%zmm9,%zmm17
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm16,%zmm16
vpaddq %zmm17,%zmm17,%zmm17
vpmadd52luq %zmm8,%zmm8,%zmm16
vpmadd52huq %zmm8,%zmm8,%zmm17
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm8,%zmm9,%zmm31
vpmadd52huq %zmm8,%zmm9,%zmm18
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm17,%zmm17
vpaddq %zmm18,%zmm18,%zmm18
vpmadd52luq %zmm9,%zmm9,%zmm18
vpmadd52huq %zmm9,%zmm9,%zmm19
vpsrlq $52,%zmm15,%zmm31
vpaddq %zmm31,%zmm16,%zmm16
vpandq vecmask52(%rip),%zmm15,%zmm15
vpmadd52luq vec608(%rip),%zmm15,%zmm10
vpmadd52huq vec608(%rip),%zmm15,%zmm11
vpsrlq $52,%zmm16,%zmm31
vpaddq %zmm31,%zmm17,%zmm17
vpandq vecmask52(%rip),%zmm16,%zmm16
vpmadd52luq vec608(%rip),%zmm16,%zmm11
vpmadd52huq vec608(%rip),%zmm16,%zmm12
vpsrlq $52,%zmm17,%zmm31
vpaddq %zmm31,%zmm18,%zmm18
vpandq vecmask52(%rip),%zmm17,%zmm17
vpmadd52luq vec608(%rip),%zmm17,%zmm12
vpmadd52huq vec608(%rip),%zmm17,%zmm13
vpsrlq $52,%zmm18,%zmm31
vpaddq %zmm31,%zmm19,%zmm19
vpandq vecmask52(%rip),%zmm18,%zmm18
vpmadd52luq vec608(%rip),%zmm18,%zmm13
vpmadd52huq vec608(%rip),%zmm18,%zmm14
vpmadd52luq vec608(%rip),%zmm19,%zmm14
vpsrlq $52,%zmm13,%zmm31
vpaddq %zmm31,%zmm14,%zmm14
vpandq vecmask52(%rip),%zmm13,%zmm13
vpsrlq $47,%zmm14,%zmm31
vpandq vecmask47(%rip),%zmm14,%zmm14
vpmadd52luq vec19(%rip),%zmm31,%zmm10
vpsrlq $52,%zmm10,%zmm31
vpaddq %zmm31,%zmm11,%zmm11
vpandq vecmask52(%rip),%zmm10,%zmm5
vpsrlq $52,%zmm11,%zmm31
vpaddq %zmm31,%zmm12,%zmm12
vpandq vecmask52(%rip),%zmm11,%zmm6
vpsrlq $52,%zmm12,%zmm31
vpaddq %zmm31,%zmm13,%zmm13
vpandq vecmask52(%rip),%zmm12,%zmm7
vpsrlq $52,%zmm13,%zmm31
vpaddq %zmm31,%zmm14,%zmm9
vpandq vecmask52(%rip),%zmm13,%zmm8
// T1 ← T1^2
vpxorq %zmm10,%zmm10,%zmm10
vpxorq %zmm11,%zmm11,%zmm11
vpxorq %zmm12,%zmm12,%zmm12
vpxorq %zmm13,%zmm13,%zmm13
vpxorq %zmm14,%zmm14,%zmm14
vpxorq %zmm15,%zmm15,%zmm15
vpxorq %zmm16,%zmm16,%zmm16
vpxorq %zmm17,%zmm17,%zmm17
vpxorq %zmm18,%zmm18,%zmm18
vpxorq %zmm19,%zmm19,%zmm19
vpmadd52luq %zmm0,%zmm0,%zmm10
vpmadd52huq %zmm0,%zmm0,%zmm11
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm0,%zmm1,%zmm31
vpmadd52huq %zmm0,%zmm1,%zmm12
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm11,%zmm11
vpaddq %zmm12,%zmm12,%zmm12
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm0,%zmm2,%zmm31
vpmadd52huq %zmm0,%zmm2,%zmm13
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm12,%zmm12
vpaddq %zmm13,%zmm13,%zmm13
vpmadd52luq %zmm1,%zmm1,%zmm12
vpmadd52huq %zmm1,%zmm1,%zmm13
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm0,%zmm3,%zmm31
vpmadd52huq %zmm0,%zmm3,%zmm14
vpmadd52luq %zmm1,%zmm2,%zmm31
vpmadd52huq %zmm1,%zmm2,%zmm14
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm13,%zmm13
vpaddq %zmm14,%zmm14,%zmm14
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm0,%zmm4,%zmm31
vpmadd52huq %zmm0,%zmm4,%zmm15
vpmadd52luq %zmm1,%zmm3,%zmm31
vpmadd52huq %zmm1,%zmm3,%zmm15
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm14,%zmm14
vpaddq %zmm15,%zmm15,%zmm15
vpmadd52luq %zmm2,%zmm2,%zmm14
vpmadd52huq %zmm2,%zmm2,%zmm15
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm1,%zmm4,%zmm31
vpmadd52huq %zmm1,%zmm4,%zmm16
vpmadd52luq %zmm2,%zmm3,%zmm31
vpmadd52huq %zmm2,%zmm3,%zmm16
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm15,%zmm15
vpaddq %zmm16,%zmm16,%zmm16
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm2,%zmm4,%zmm31
vpmadd52huq %zmm2,%zmm4,%zmm17
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm16,%zmm16
vpaddq %zmm17,%zmm17,%zmm17
vpmadd52luq %zmm3,%zmm3,%zmm16
vpmadd52huq %zmm3,%zmm3,%zmm17
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm3,%zmm4,%zmm31
vpmadd52huq %zmm3,%zmm4,%zmm18
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm17,%zmm17
vpaddq %zmm18,%zmm18,%zmm18
vpmadd52luq %zmm4,%zmm4,%zmm18
vpmadd52huq %zmm4,%zmm4,%zmm19
vpsrlq $52,%zmm15,%zmm31
vpaddq %zmm31,%zmm16,%zmm16
vpandq vecmask52(%rip),%zmm15,%zmm15
vpmadd52luq vec608(%rip),%zmm15,%zmm10
vpmadd52huq vec608(%rip),%zmm15,%zmm11
vpsrlq $52,%zmm16,%zmm31
vpaddq %zmm31,%zmm17,%zmm17
vpandq vecmask52(%rip),%zmm16,%zmm16
vpmadd52luq vec608(%rip),%zmm16,%zmm11
vpmadd52huq vec608(%rip),%zmm16,%zmm12
vpsrlq $52,%zmm17,%zmm31
vpaddq %zmm31,%zmm18,%zmm18
vpandq vecmask52(%rip),%zmm17,%zmm17
vpmadd52luq vec608(%rip),%zmm17,%zmm12
vpmadd52huq vec608(%rip),%zmm17,%zmm13
vpsrlq $52,%zmm18,%zmm31
vpaddq %zmm31,%zmm19,%zmm19
vpandq vecmask52(%rip),%zmm18,%zmm18
vpmadd52luq vec608(%rip),%zmm18,%zmm13
vpmadd52huq vec608(%rip),%zmm18,%zmm14
vpmadd52luq vec608(%rip),%zmm19,%zmm14
vpsrlq $52,%zmm13,%zmm31
vpaddq %zmm31,%zmm14,%zmm14
vpandq vecmask52(%rip),%zmm13,%zmm13
vpsrlq $47,%zmm14,%zmm31
vpandq vecmask47(%rip),%zmm14,%zmm14
vpmadd52luq vec19(%rip),%zmm31,%zmm10
vpsrlq $52,%zmm10,%zmm31
vpaddq %zmm31,%zmm11,%zmm11
vpandq vecmask52(%rip),%zmm10,%zmm0
vpsrlq $52,%zmm11,%zmm31
vpaddq %zmm31,%zmm12,%zmm12
vpandq vecmask52(%rip),%zmm11,%zmm1
vpsrlq $52,%zmm12,%zmm31
vpaddq %zmm31,%zmm13,%zmm13
vpandq vecmask52(%rip),%zmm12,%zmm2
vpsrlq $52,%zmm13,%zmm31
vpaddq %zmm31,%zmm14,%zmm4
vpandq vecmask52(%rip),%zmm13,%zmm3
// T3 ← X3 + Z3
vpaddq 384(%rsp),%zmm20,%zmm25
vpaddq 448(%rsp),%zmm21,%zmm26
vpaddq 512(%rsp),%zmm22,%zmm27
vpaddq 576(%rsp),%zmm23,%zmm28
vpaddq 640(%rsp),%zmm24,%zmm29
vpsrlq $52,%zmm28,%zmm31
vpaddq %zmm31,%zmm29,%zmm29
vpandq vecmask52(%rip),%zmm28,%zmm28
vpsrlq $47,%zmm29,%zmm31
vpandq vecmask47(%rip),%zmm29,%zmm29
vpmadd52luq vec19(%rip),%zmm31,%zmm25
vpsrlq $52,%zmm25,%zmm31
vpaddq %zmm31,%zmm26,%zmm26
vpandq vecmask52(%rip),%zmm25,%zmm25
vpsrlq $52,%zmm26,%zmm31
vpaddq %zmm31,%zmm27,%zmm27
vpandq vecmask52(%rip),%zmm26,%zmm26
vpsrlq $52,%zmm27,%zmm31
vpaddq %zmm31,%zmm28,%zmm28
vpandq vecmask52(%rip),%zmm27,%zmm27
vpsrlq $52,%zmm28,%zmm31
vpaddq %zmm31,%zmm29,%zmm29
vpandq vecmask52(%rip),%zmm28,%zmm28
// Z3 ← X3 - Z3
vpaddq vec2p0(%rip),%zmm20,%zmm20
vpaddq vec2p123(%rip),%zmm21,%zmm21
vpaddq vec2p123(%rip),%zmm22,%zmm22
vpaddq vec2p123(%rip),%zmm23,%zmm23
vpaddq vec2p4(%rip),%zmm24,%zmm24
vpsubq 384(%rsp),%zmm20,%zmm20
vpsubq 448(%rsp),%zmm21,%zmm21
vpsubq 512(%rsp),%zmm22,%zmm22
vpsubq 576(%rsp),%zmm23,%zmm23
vpsubq 640(%rsp),%zmm24,%zmm24
vpsrlq $52,%zmm23,%zmm31
vpaddq %zmm31,%zmm24,%zmm24
vpandq vecmask52(%rip),%zmm23,%zmm23
vpsrlq $47,%zmm24,%zmm31
vpandq vecmask47(%rip),%zmm24,%zmm24
vpmadd52luq vec19(%rip),%zmm31,%zmm20
vpsrlq $52,%zmm20,%zmm31
vpaddq %zmm31,%zmm21,%zmm21
vpandq vecmask52(%rip),%zmm20,%zmm20
vpsrlq $52,%zmm21,%zmm31
vpaddq %zmm31,%zmm22,%zmm22
vpandq vecmask52(%rip),%zmm21,%zmm21
vpsrlq $52,%zmm22,%zmm31
vpaddq %zmm31,%zmm23,%zmm23
vpandq vecmask52(%rip),%zmm22,%zmm22
vpsrlq $52,%zmm23,%zmm31
vpaddq %zmm31,%zmm24,%zmm24
vpandq vecmask52(%rip),%zmm23,%zmm23
// Z3 ← Z3^2
vpxorq %zmm10,%zmm10,%zmm10
vpxorq %zmm11,%zmm11,%zmm11
vpxorq %zmm12,%zmm12,%zmm12
vpxorq %zmm13,%zmm13,%zmm13
vpxorq %zmm14,%zmm14,%zmm14
vpxorq %zmm15,%zmm15,%zmm15
vpxorq %zmm16,%zmm16,%zmm16
vpxorq %zmm17,%zmm17,%zmm17
vpxorq %zmm18,%zmm18,%zmm18
vpxorq %zmm19,%zmm19,%zmm19
vpmadd52luq %zmm20,%zmm20,%zmm10
vpmadd52huq %zmm20,%zmm20,%zmm11
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm20,%zmm21,%zmm31
vpmadd52huq %zmm20,%zmm21,%zmm12
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm11,%zmm11
vpaddq %zmm12,%zmm12,%zmm12
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm20,%zmm22,%zmm31
vpmadd52huq %zmm20,%zmm22,%zmm13
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm12,%zmm12
vpaddq %zmm13,%zmm13,%zmm13
vpmadd52luq %zmm21,%zmm21,%zmm12
vpmadd52huq %zmm21,%zmm21,%zmm13
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm20,%zmm23,%zmm31
vpmadd52huq %zmm20,%zmm23,%zmm14
vpmadd52luq %zmm21,%zmm22,%zmm31
vpmadd52huq %zmm21,%zmm22,%zmm14
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm13,%zmm13
vpaddq %zmm14,%zmm14,%zmm14
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm20,%zmm24,%zmm31
vpmadd52huq %zmm20,%zmm24,%zmm15
vpmadd52luq %zmm21,%zmm23,%zmm31
vpmadd52huq %zmm21,%zmm23,%zmm15
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm14,%zmm14
vpaddq %zmm15,%zmm15,%zmm15
vpmadd52luq %zmm22,%zmm22,%zmm14
vpmadd52huq %zmm22,%zmm22,%zmm15
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm21,%zmm24,%zmm31
vpmadd52huq %zmm21,%zmm24,%zmm16
vpmadd52luq %zmm22,%zmm23,%zmm31
vpmadd52huq %zmm22,%zmm23,%zmm16
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm15,%zmm15
vpaddq %zmm16,%zmm16,%zmm16
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm22,%zmm24,%zmm31
vpmadd52huq %zmm22,%zmm24,%zmm17
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm16,%zmm16
vpaddq %zmm17,%zmm17,%zmm17
vpmadd52luq %zmm23,%zmm23,%zmm16
vpmadd52huq %zmm23,%zmm23,%zmm17
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm23,%zmm24,%zmm31
vpmadd52huq %zmm23,%zmm24,%zmm18
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm17,%zmm17
vpaddq %zmm18,%zmm18,%zmm18
vpmadd52luq %zmm24,%zmm24,%zmm18
vpmadd52huq %zmm24,%zmm24,%zmm19
vpsrlq $52,%zmm15,%zmm31
vpaddq %zmm31,%zmm16,%zmm16
vpandq vecmask52(%rip),%zmm15,%zmm15
vpmadd52luq vec608(%rip),%zmm15,%zmm10
vpmadd52huq vec608(%rip),%zmm15,%zmm11
vpsrlq $52,%zmm16,%zmm31
vpaddq %zmm31,%zmm17,%zmm17
vpandq vecmask52(%rip),%zmm16,%zmm16
vpmadd52luq vec608(%rip),%zmm16,%zmm11
vpmadd52huq vec608(%rip),%zmm16,%zmm12
vpsrlq $52,%zmm17,%zmm31
vpaddq %zmm31,%zmm18,%zmm18
vpandq vecmask52(%rip),%zmm17,%zmm17
vpmadd52luq vec608(%rip),%zmm17,%zmm12
vpmadd52huq vec608(%rip),%zmm17,%zmm13
vpsrlq $52,%zmm18,%zmm31
vpaddq %zmm31,%zmm19,%zmm19
vpandq vecmask52(%rip),%zmm18,%zmm18
vpmadd52luq vec608(%rip),%zmm18,%zmm13
vpmadd52huq vec608(%rip),%zmm18,%zmm14
vpmadd52luq vec608(%rip),%zmm19,%zmm14
vpsrlq $52,%zmm13,%zmm31
vpaddq %zmm31,%zmm14,%zmm14
vpandq vecmask52(%rip),%zmm13,%zmm13
vpsrlq $47,%zmm14,%zmm31
vpandq vecmask47(%rip),%zmm14,%zmm14
vpmadd52luq vec19(%rip),%zmm31,%zmm10
vpsrlq $52,%zmm10,%zmm31
vpaddq %zmm31,%zmm11,%zmm11
vpandq vecmask52(%rip),%zmm10,%zmm20
vpsrlq $52,%zmm11,%zmm31
vpaddq %zmm31,%zmm12,%zmm12
vpandq vecmask52(%rip),%zmm11,%zmm21
vpsrlq $52,%zmm12,%zmm31
vpaddq %zmm31,%zmm13,%zmm13
vpandq vecmask52(%rip),%zmm12,%zmm22
vpsrlq $52,%zmm13,%zmm31
vpaddq %zmm31,%zmm14,%zmm24
vpandq vecmask52(%rip),%zmm13,%zmm23
vmovdqa64 %zmm20,384(%rsp)
vmovdqa64 %zmm21,448(%rsp)
vmovdqa64 %zmm22,512(%rsp)
vmovdqa64 %zmm23,576(%rsp)
vmovdqa64 %zmm24,640(%rsp)
// X3 ← T3^2
vpxorq %zmm20,%zmm20,%zmm20
vpxorq %zmm21,%zmm21,%zmm21
vpxorq %zmm22,%zmm22,%zmm22
vpxorq %zmm23,%zmm23,%zmm23
vpxorq %zmm24,%zmm24,%zmm24
vpxorq %zmm15,%zmm15,%zmm15
vpxorq %zmm16,%zmm16,%zmm16
vpxorq %zmm17,%zmm17,%zmm17
vpxorq %zmm18,%zmm18,%zmm18
vpxorq %zmm19,%zmm19,%zmm19
vpmadd52luq %zmm25,%zmm25,%zmm20
vpmadd52huq %zmm25,%zmm25,%zmm21
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm25,%zmm26,%zmm31
vpmadd52huq %zmm25,%zmm26,%zmm22
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm21,%zmm21
vpaddq %zmm22,%zmm22,%zmm22
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm25,%zmm27,%zmm31
vpmadd52huq %zmm25,%zmm27,%zmm23
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm22,%zmm22
vpaddq %zmm23,%zmm23,%zmm23
vpmadd52luq %zmm26,%zmm26,%zmm22
vpmadd52huq %zmm26,%zmm26,%zmm23
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm25,%zmm28,%zmm31
vpmadd52huq %zmm25,%zmm28,%zmm24
vpmadd52luq %zmm26,%zmm27,%zmm31
vpmadd52huq %zmm26,%zmm27,%zmm24
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm23,%zmm23
vpaddq %zmm24,%zmm24,%zmm24
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm25,%zmm29,%zmm31
vpmadd52huq %zmm25,%zmm29,%zmm15
vpmadd52luq %zmm26,%zmm28,%zmm31
vpmadd52huq %zmm26,%zmm28,%zmm15
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm24,%zmm24
vpaddq %zmm15,%zmm15,%zmm15
vpmadd52luq %zmm27,%zmm27,%zmm24
vpmadd52huq %zmm27,%zmm27,%zmm15
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm26,%zmm29,%zmm31
vpmadd52huq %zmm26,%zmm29,%zmm16
vpmadd52luq %zmm27,%zmm28,%zmm31
vpmadd52huq %zmm27,%zmm28,%zmm16
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm15,%zmm15
vpaddq %zmm16,%zmm16,%zmm16
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm27,%zmm29,%zmm31
vpmadd52huq %zmm27,%zmm29,%zmm17
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm16,%zmm16
vpaddq %zmm17,%zmm17,%zmm17
vpmadd52luq %zmm28,%zmm28,%zmm16
vpmadd52huq %zmm28,%zmm28,%zmm17
vpxorq %zmm31,%zmm31,%zmm31
vpmadd52luq %zmm28,%zmm29,%zmm31
vpmadd52huq %zmm28,%zmm29,%zmm18
vpaddq %zmm31,%zmm31,%zmm31
vpaddq %zmm31,%zmm17,%zmm17
vpaddq %zmm18,%zmm18,%zmm18
vpmadd52luq %zmm29,%zmm29,%zmm18
vpmadd52huq %zmm29,%zmm29,%zmm19
vpsrlq $52,%zmm15,%zmm31
vpaddq %zmm31,%zmm16,%zmm16
vpandq vecmask52(%rip),%zmm15,%zmm15
vpmadd52luq vec608(%rip),%zmm15,%zmm20
vpmadd52huq vec608(%rip),%zmm15,%zmm21
vpsrlq $52,%zmm16,%zmm31
vpaddq %zmm31,%zmm17,%zmm17
vpandq vecmask52(%rip),%zmm16,%zmm16
vpmadd52luq vec608(%rip),%zmm16,%zmm21
vpmadd52huq vec608(%rip),%zmm16,%zmm22
vpsrlq $52,%zmm17,%zmm31
vpaddq %zmm31,%zmm18,%zmm18
vpandq vecmask52(%rip),%zmm17,%zmm17
vpmadd52luq vec608(%rip),%zmm17,%zmm22
vpmadd52huq vec608(%rip),%zmm17,%zmm23
vpsrlq $52,%zmm18,%zmm31
vpaddq %zmm31,%zmm19,%zmm19
vpandq vecmask52(%rip),%zmm18,%zmm18
vpmadd52luq vec608(%rip),%zmm18,%zmm23
vpmadd52huq vec608(%rip),%zmm18,%zmm24
vpmadd52luq vec608(%rip),%zmm19,%zmm24
vmovdqa64 %zmm22,704(%rsp)
vmovdqa64 %zmm23,768(%rsp)
vmovdqa64 %zmm24,832(%rsp)
// X2 ← T1 · T2
vpxorq %zmm10,%zmm10,%zmm10
vpxorq %zmm11,%zmm11,%zmm11
vpxorq %zmm12,%zmm12,%zmm12
vpxorq %zmm13,%zmm13,%zmm13
vpxorq %zmm14,%zmm14,%zmm14
vpxorq %zmm25,%zmm25,%zmm25
vpxorq %zmm26,%zmm26,%zmm26
vpxorq %zmm27,%zmm27,%zmm27
vpxorq %zmm28,%zmm28,%zmm28
vpxorq %zmm29,%zmm29,%zmm29
vpmadd52luq %zmm0,%zmm5,%zmm10
vpmadd52huq %zmm0,%zmm5,%zmm11
vpmadd52luq %zmm0,%zmm6,%zmm11
vpmadd52huq %zmm0,%zmm6,%zmm12
vpmadd52luq %zmm1,%zmm5,%zmm11
vpmadd52huq %zmm1,%zmm5,%zmm12
vpmadd52luq %zmm0,%zmm7,%zmm12
vpmadd52huq %zmm0,%zmm7,%zmm13
vpmadd52luq %zmm1,%zmm6,%zmm12
vpmadd52huq %zmm1,%zmm6,%zmm13
vpmadd52luq %zmm2,%zmm5,%zmm12
vpmadd52huq %zmm2,%zmm5,%zmm13
vpmadd52luq %zmm0,%zmm8,%zmm13
vpmadd52huq %zmm0,%zmm8,%zmm14
vpmadd52luq %zmm1,%zmm7,%zmm13
vpmadd52huq %zmm1,%zmm7,%zmm14
vpmadd52luq %zmm2,%zmm6,%zmm13
vpmadd52huq %zmm2,%zmm6,%zmm14
vpmadd52luq %zmm3,%zmm5,%zmm13
vpmadd52huq %zmm3,%zmm5,%zmm14
vpmadd52luq %zmm0,%zmm9,%zmm14
vpmadd52huq %zmm0,%zmm9,%zmm25
vpmadd52luq %zmm1,%zmm8,%zmm14
vpmadd52huq %zmm1,%zmm8,%zmm25
vpmadd52luq %zmm2,%zmm7,%zmm14
vpmadd52huq %zmm2,%zmm7,%zmm25
vpmadd52luq %zmm3,%zmm6,%zmm14
vpmadd52huq %zmm3,%zmm6,%zmm25
vpmadd52luq %zmm4,%zmm5,%zmm14
vpmadd52huq %zmm4,%zmm5,%zmm25
vpmadd52luq %zmm1,%zmm9,%zmm25
vpmadd52huq %zmm1,%zmm9,%zmm26
vpmadd52luq %zmm2,%zmm8,%zmm25
vpmadd52huq %zmm2,%zmm8,%zmm26
vpmadd52luq %zmm3,%zmm7,%zmm25
vpmadd52huq %zmm3,%zmm7,%zmm26
vpmadd52luq %zmm4,%zmm6,%zmm25
vpmadd52huq %zmm4,%zmm6,%zmm26
vpmadd52luq %zmm2,%zmm9,%zmm26
vpmadd52huq %zmm2,%zmm9,%zmm27
vpmadd52luq %zmm3,%zmm8,%zmm26
vpmadd52huq %zmm3,%zmm8,%zmm27
vpmadd52luq %zmm4,%zmm7,%zmm26
vpmadd52huq %zmm4,%zmm7,%zmm27
vpmadd52luq %zmm3,%zmm9,%zmm27
vpmadd52huq %zmm3,%zmm9,%zmm28
vpmadd52luq %zmm4,%zmm8,%zmm27
vpmadd52huq %zmm4,%zmm8,%zmm28
vpmadd52luq %zmm4,%zmm9,%zmm28
vpmadd52huq %zmm4,%zmm9,%zmm29
vpsrlq $52,%zmm25,%zmm31
vpaddq %zmm31,%zmm26,%zmm26
vpandq vecmask52(%rip),%zmm25,%zmm25
vpmadd52luq vec608(%rip),%zmm25,%zmm10
vpmadd52huq vec608(%rip),%zmm25,%zmm11
vpsrlq $52,%zmm26,%zmm31
vpaddq %zmm31,%zmm27,%zmm27
vpandq vecmask52(%rip),%zmm26,%zmm26
vpmadd52luq vec608(%rip),%zmm26,%zmm11
vpmadd52huq vec608(%rip),%zmm26,%zmm12
vpsrlq $52,%zmm27,%zmm31
vpaddq %zmm31,%zmm28,%zmm28
vpandq vecmask52(%rip),%zmm27,%zmm27
vpmadd52luq vec608(%rip),%zmm27,%zmm12
vpmadd52huq vec608(%rip),%zmm27,%zmm13
vpsrlq $52,%zmm28,%zmm31
vpaddq %zmm31,%zmm29,%zmm29
vpandq vecmask52(%rip),%zmm28,%zmm28
vpmadd52luq vec608(%rip),%zmm28,%zmm13
vpmadd52huq vec608(%rip),%zmm28,%zmm14
vpmadd52luq vec608(%rip),%zmm29,%zmm14
// T3 ← T1 - T2
vpaddq vec2p0(%rip),%zmm0,%zmm0
vpaddq vec2p123(%rip),%zmm1,%zmm1
vpaddq vec2p123(%rip),%zmm2,%zmm2
vpaddq vec2p123(%rip),%zmm3,%zmm3
vpaddq vec2p4(%rip),%zmm4,%zmm4
vpsubq %zmm5,%zmm0,%zmm0
vpsubq %zmm6,%zmm1,%zmm1
vpsubq %zmm7,%zmm2,%zmm2
vpsubq %zmm8,%zmm3,%zmm3
vpsubq %zmm9,%zmm4,%zmm4
vpsrlq $52,%zmm3,%zmm31
vpaddq %zmm31,%zmm4,%zmm4
vpandq vecmask52(%rip),%zmm3,%zmm3
vpsrlq $47,%zmm4,%zmm31
vpandq vecmask47(%rip),%zmm4,%zmm4
vpmadd52luq vec19(%rip),%zmm31,%zmm0
vpsrlq $52,%zmm0,%zmm31
vpaddq %zmm31,%zmm1,%zmm1
vpandq vecmask52(%rip),%zmm0,%zmm0
vpsrlq $52,%zmm1,%zmm31
vpaddq %zmm31,%zmm2,%zmm2
vpandq vecmask52(%rip),%zmm1,%zmm1
vpsrlq $52,%zmm2,%zmm31
vpaddq %zmm31,%zmm3,%zmm3
vpandq vecmask52(%rip),%zmm2,%zmm2
vpsrlq $52,%zmm3,%zmm31
vpaddq %zmm31,%zmm4,%zmm4
vpandq vecmask52(%rip),%zmm3,%zmm3
// T4 ← ((A2)/4) · T3
// T4 ← T4 + T2
vpxorq %zmm15,%zmm15,%zmm15
vpmadd52luq veca24(%rip),%zmm0,%zmm5
vpmadd52huq veca24(%rip),%zmm0,%zmm6
vpmadd52luq veca24(%rip),%zmm1,%zmm6
vpmadd52huq veca24(%rip),%zmm1,%zmm7
vpmadd52luq veca24(%rip),%zmm2,%zmm7
vpmadd52huq veca24(%rip),%zmm2,%zmm8
vpmadd52luq veca24(%rip),%zmm3,%zmm8
vpmadd52huq veca24(%rip),%zmm3,%zmm9
vpmadd52luq veca24(%rip),%zmm4,%zmm9
vpmadd52huq veca24(%rip),%zmm4,%zmm15
vpmadd52luq vec608(%rip),%zmm15,%zmm5
vpsrlq $52,%zmm8,%zmm31
vpaddq %zmm31,%zmm9,%zmm9
vpandq vecmask52(%rip),%zmm8,%zmm8
vpsrlq $47,%zmm9,%zmm31
vpandq vecmask47(%rip),%zmm9,%zmm9
vpmadd52luq vec19(%rip),%zmm31,%zmm5
vpsrlq $52,%zmm5,%zmm31
vpaddq %zmm31,%zmm6,%zmm6
vpandq vecmask52(%rip),%zmm5,%zmm5
vpsrlq $52,%zmm6,%zmm31
vpaddq %zmm31,%zmm7,%zmm7
vpandq vecmask52(%rip),%zmm6,%zmm6
vpsrlq $52,%zmm7,%zmm31
vpaddq %zmm31,%zmm8,%zmm8
vpandq vecmask52(%rip),%zmm7,%zmm7
vpsrlq $52,%zmm8,%zmm31
vpaddq %zmm31,%zmm9,%zmm9
vpandq vecmask52(%rip),%zmm8,%zmm8
// Z2 ← T3 · T4
vpxorq %zmm15,%zmm15,%zmm15
vpxorq %zmm16,%zmm16,%zmm16
vpxorq %zmm17,%zmm17,%zmm17
vpxorq %zmm18,%zmm18,%zmm18
vpxorq %zmm19,%zmm19,%zmm19
vpxorq %zmm25,%zmm25,%zmm25
vpxorq %zmm26,%zmm26,%zmm26
vpxorq %zmm27,%zmm27,%zmm27
vpxorq %zmm28,%zmm28,%zmm28
vpxorq %zmm29,%zmm29,%zmm29
vpmadd52luq %zmm0,%zmm5,%zmm15
vpmadd52huq %zmm0,%zmm5,%zmm16
vpmadd52luq %zmm0,%zmm6,%zmm16
vpmadd52huq %zmm0,%zmm6,%zmm17
vpmadd52luq %zmm1,%zmm5,%zmm16
vpmadd52huq %zmm1,%zmm5,%zmm17
vpmadd52luq %zmm0,%zmm7,%zmm17
vpmadd52huq %zmm0,%zmm7,%zmm18
vpmadd52luq %zmm1,%zmm6,%zmm17
vpmadd52huq %zmm1,%zmm6,%zmm18
vpmadd52luq %zmm2,%zmm5,%zmm17
vpmadd52huq %zmm2,%zmm5,%zmm18
vpmadd52luq %zmm0,%zmm8,%zmm18
vpmadd52huq %zmm0,%zmm8,%zmm19
vpmadd52luq %zmm1,%zmm7,%zmm18
vpmadd52huq %zmm1,%zmm7,%zmm19
vpmadd52luq %zmm2,%zmm6,%zmm18
vpmadd52huq %zmm2,%zmm6,%zmm19
vpmadd52luq %zmm3,%zmm5,%zmm18
vpmadd52huq %zmm3,%zmm5,%zmm19
vpmadd52luq %zmm0,%zmm9,%zmm19
vpmadd52huq %zmm0,%zmm9,%zmm25
vpmadd52luq %zmm1,%zmm8,%zmm19
vpmadd52huq %zmm1,%zmm8,%zmm25
vpmadd52luq %zmm2,%zmm7,%zmm19
vpmadd52huq %zmm2,%zmm7,%zmm25
vpmadd52luq %zmm3,%zmm6,%zmm19
vpmadd52huq %zmm3,%zmm6,%zmm25
vpmadd52luq %zmm4,%zmm5,%zmm19
vpmadd52huq %zmm4,%zmm5,%zmm25
vpmadd52luq %zmm1,%zmm9,%zmm25
vpmadd52huq %zmm1,%zmm9,%zmm26
vpmadd52luq %zmm2,%zmm8,%zmm25
vpmadd52huq %zmm2,%zmm8,%zmm26
vpmadd52luq %zmm3,%zmm7,%zmm25
vpmadd52huq %zmm3,%zmm7,%zmm26
vpmadd52luq %zmm4,%zmm6,%zmm25
vpmadd52huq %zmm4,%zmm6,%zmm26
vpmadd52luq %zmm2,%zmm9,%zmm26
vpmadd52huq %zmm2,%zmm9,%zmm27
vpmadd52luq %zmm3,%zmm8,%zmm26
vpmadd52huq %zmm3,%zmm8,%zmm27
vpmadd52luq %zmm4,%zmm7,%zmm26
vpmadd52huq %zmm4,%zmm7,%zmm27
vpmadd52luq %zmm3,%zmm9,%zmm27
vpmadd52huq %zmm3,%zmm9,%zmm28
vpmadd52luq %zmm4,%zmm8,%zmm27
vpmadd52huq %zmm4,%zmm8,%zmm28
vpmadd52luq %zmm4,%zmm9,%zmm28
vpmadd52huq %zmm4,%zmm9,%zmm29
vpsrlq $52,%zmm25,%zmm31
vpaddq %zmm31,%zmm26,%zmm26
vpandq vecmask52(%rip),%zmm25,%zmm25
vpmadd52luq vec608(%rip),%zmm25,%zmm15
vpmadd52huq vec608(%rip),%zmm25,%zmm16
vpsrlq $52,%zmm26,%zmm31
vpaddq %zmm31,%zmm27,%zmm27
vpandq vecmask52(%rip),%zmm26,%zmm26
vpmadd52luq vec608(%rip),%zmm26,%zmm16
vpmadd52huq vec608(%rip),%zmm26,%zmm17
vpsrlq $52,%zmm27,%zmm31
vpaddq %zmm31,%zmm28,%zmm28
vpandq vecmask52(%rip),%zmm27,%zmm27
vpmadd52luq vec608(%rip),%zmm27,%zmm17
vpmadd52huq vec608(%rip),%zmm27,%zmm18
vpsrlq $52,%zmm28,%zmm31
vpaddq %zmm31,%zmm29,%zmm29
vpandq vecmask52(%rip),%zmm28,%zmm28
vpmadd52luq vec608(%rip),%zmm28,%zmm18
vpmadd52huq vec608(%rip),%zmm28,%zmm19
vpmadd52luq vec608(%rip),%zmm29,%zmm19
// Z3 ← Z3 · X1
vmovdqa64 64(%rsp),%zmm0
vmovdqa64 128(%rsp),%zmm1
vmovdqa64 192(%rsp),%zmm2
vmovdqa64 256(%rsp),%zmm3
vmovdqa64 320(%rsp),%zmm4
vmovdqa64 384(%rsp),%zmm5
vmovdqa64 448(%rsp),%zmm6
vmovdqa64 512(%rsp),%zmm7
vmovdqa64 576(%rsp),%zmm8
vmovdqa64 640(%rsp),%zmm9
vpxorq %zmm25,%zmm25,%zmm25
vpxorq %zmm26,%zmm26,%zmm26
vpxorq %zmm27,%zmm27,%zmm27
vpxorq %zmm28,%zmm28,%zmm28
vpxorq %zmm29,%zmm29,%zmm29
vpxorq %zmm30,%zmm30,%zmm30
vpxorq %zmm31,%zmm31,%zmm31
vpxorq %zmm22,%zmm22,%zmm22
vpxorq %zmm23,%zmm23,%zmm23
vpxorq %zmm24,%zmm24,%zmm24
vpmadd52luq %zmm0,%zmm5,%zmm25
vpmadd52huq %zmm0,%zmm5,%zmm26
vpmadd52luq %zmm0,%zmm6,%zmm26
vpmadd52huq %zmm0,%zmm6,%zmm27
vpmadd52luq %zmm1,%zmm5,%zmm26
vpmadd52huq %zmm1,%zmm5,%zmm27
vpmadd52luq %zmm0,%zmm7,%zmm27
vpmadd52huq %zmm0,%zmm7,%zmm28
vpmadd52luq %zmm1,%zmm6,%zmm27
vpmadd52huq %zmm1,%zmm6,%zmm28
vpmadd52luq %zmm2,%zmm5,%zmm27
vpmadd52huq %zmm2,%zmm5,%zmm28
vpmadd52luq %zmm0,%zmm8,%zmm28
vpmadd52huq %zmm0,%zmm8,%zmm29
vpmadd52luq %zmm1,%zmm7,%zmm28
vpmadd52huq %zmm1,%zmm7,%zmm29
vpmadd52luq %zmm2,%zmm6,%zmm28
vpmadd52huq %zmm2,%zmm6,%zmm29
vpmadd52luq %zmm3,%zmm5,%zmm28
vpmadd52huq %zmm3,%zmm5,%zmm29
vpmadd52luq %zmm0,%zmm9,%zmm29
vpmadd52huq %zmm0,%zmm9,%zmm30
vpmadd52luq %zmm1,%zmm8,%zmm29
vpmadd52huq %zmm1,%zmm8,%zmm30
vpmadd52luq %zmm2,%zmm7,%zmm29
vpmadd52huq %zmm2,%zmm7,%zmm30
vpmadd52luq %zmm3,%zmm6,%zmm29
vpmadd52huq %zmm3,%zmm6,%zmm30
vpmadd52luq %zmm4,%zmm5,%zmm29
vpmadd52huq %zmm4,%zmm5,%zmm30
vpmadd52luq %zmm1,%zmm9,%zmm30
vpmadd52huq %zmm1,%zmm9,%zmm31
vpmadd52luq %zmm2,%zmm8,%zmm30
vpmadd52huq %zmm2,%zmm8,%zmm31
vpmadd52luq %zmm3,%zmm7,%zmm30
vpmadd52huq %zmm3,%zmm7,%zmm31
vpmadd52luq %zmm4,%zmm6,%zmm30
vpmadd52huq %zmm4,%zmm6,%zmm31
vpmadd52luq %zmm2,%zmm9,%zmm31
vpmadd52huq %zmm2,%zmm9,%zmm22
vpmadd52luq %zmm3,%zmm8,%zmm31
vpmadd52huq %zmm3,%zmm8,%zmm22
vpmadd52luq %zmm4,%zmm7,%zmm31
vpmadd52huq %zmm4,%zmm7,%zmm22
vpmadd52luq %zmm3,%zmm9,%zmm22
vpmadd52huq %zmm3,%zmm9,%zmm23
vpmadd52luq %zmm4,%zmm8,%zmm22
vpmadd52huq %zmm4,%zmm8,%zmm23
vpmadd52luq %zmm4,%zmm9,%zmm23
vpmadd52huq %zmm4,%zmm9,%zmm24
vpsrlq $52,%zmm30,%zmm0
vpaddq %zmm0,%zmm31,%zmm31
vpandq vecmask52(%rip),%zmm30,%zmm30
vpmadd52luq vec608(%rip),%zmm30,%zmm25
vpmadd52huq vec608(%rip),%zmm30,%zmm26
vpsrlq $52,%zmm31,%zmm0
vpaddq %zmm0,%zmm22,%zmm22
vpandq vecmask52(%rip),%zmm31,%zmm31
vpmadd52luq vec608(%rip),%zmm31,%zmm26
vpmadd52huq vec608(%rip),%zmm31,%zmm27
vpsrlq $52,%zmm22,%zmm0
vpaddq %zmm0,%zmm23,%zmm23
vpandq vecmask52(%rip),%zmm22,%zmm22
vpmadd52luq vec608(%rip),%zmm22,%zmm27
vpmadd52huq vec608(%rip),%zmm22,%zmm28
vpsrlq $52,%zmm23,%zmm0
vpaddq %zmm0,%zmm24,%zmm24
vpandq vecmask52(%rip),%zmm23,%zmm23
vpmadd52luq vec608(%rip),%zmm23,%zmm28
vpmadd52huq vec608(%rip),%zmm23,%zmm29
vpmadd52luq vec608(%rip),%zmm24,%zmm29
vmovdqa64 704(%rsp),%zmm22
vmovdqa64 768(%rsp),%zmm23
vmovdqa64 832(%rsp),%zmm24
vmovdqa64 0(%rsp),%zmm30
subb $1,%cl
cmpb $0,%cl
jge .L2
vmovdqa64 sixtythree(%rip),%zmm0
vmovdqa64 %zmm0,896(%rsp)
movb $63,%cl
subq $64,%r9
cmpq $0,%r9
jge .L1
// store X2
vpsrlq $52,%zmm13,%zmm31
vpaddq %zmm31,%zmm14,%zmm14
vpandq vecmask52(%rip),%zmm13,%zmm13
vpsrlq $47,%zmm14,%zmm31
vpandq vecmask47(%rip),%zmm14,%zmm14
vpmadd52luq vec19(%rip),%zmm31,%zmm10
vpsrlq $52,%zmm10,%zmm31
vpaddq %zmm31,%zmm11,%zmm11
vpandq vecmask52(%rip),%zmm10,%zmm10
vpsrlq $52,%zmm11,%zmm31
vpaddq %zmm31,%zmm12,%zmm12
vpandq vecmask52(%rip),%zmm11,%zmm11
vpsrlq $52,%zmm12,%zmm31
vpaddq %zmm31,%zmm13,%zmm13
vpandq vecmask52(%rip),%zmm12,%zmm12
vpsrlq $52,%zmm13,%zmm31
vpaddq %zmm31,%zmm14,%zmm14
vpandq vecmask52(%rip),%zmm13,%zmm13
vmovdqa64 %zmm10,0(%rdi)
vmovdqa64 %zmm11,64(%rdi)
vmovdqa64 %zmm12,128(%rdi)
vmovdqa64 %zmm13,192(%rdi)
vmovdqa64 %zmm14,256(%rdi)
// store Z2
vpsrlq $52,%zmm18,%zmm31
vpaddq %zmm31,%zmm19,%zmm19
vpandq vecmask52(%rip),%zmm18,%zmm18
vpsrlq $47,%zmm19,%zmm31
vpandq vecmask47(%rip),%zmm19,%zmm19
vpmadd52luq vec19(%rip),%zmm31,%zmm15
vpsrlq $52,%zmm15,%zmm31
vpaddq %zmm31,%zmm16,%zmm16
vpandq vecmask52(%rip),%zmm15,%zmm15
vpsrlq $52,%zmm16,%zmm31
vpaddq %zmm31,%zmm17,%zmm17
vpandq vecmask52(%rip),%zmm16,%zmm16
vpsrlq $52,%zmm17,%zmm31
vpaddq %zmm31,%zmm18,%zmm18
vpandq vecmask52(%rip),%zmm17,%zmm17
vpsrlq $52,%zmm18,%zmm31
vpaddq %zmm31,%zmm19,%zmm19
vpandq vecmask52(%rip),%zmm18,%zmm18
vmovdqa64 %zmm15,320(%rdi)
vmovdqa64 %zmm16,384(%rdi)
vmovdqa64 %zmm17,448(%rdi)
vmovdqa64 %zmm18,512(%rdi)
vmovdqa64 %zmm19,576(%rdi)
movq %r8,%rsp
ret