-rw-r--r-- 32243 lib25519-20221222/crypto_nP/montgomery25519/amd64-avx512-ns10l-maax/mladder.S raw
// linker define mladder // linker use hh1_p1 // linker use hh1_p2 // linker use h2h_p1 // linker use h2h_p2 // linker use hh1_xor // linker use h2h_xor // linker use swap_c // linker use swap_mask // linker use h2h_mask // linker use vec19 // linker use vec38 // linker use vecmask25 // linker use vecmask26 // linker use vecmask32 // linker use a24 /* Assembly for Montgomery ladder. */ #include "consts_namespace.h" .p2align 5 .globl _CRYPTO_SHARED_NAMESPACE(mladder) .globl CRYPTO_SHARED_NAMESPACE(mladder) _CRYPTO_SHARED_NAMESPACE(mladder): CRYPTO_SHARED_NAMESPACE(mladder): movq %rsp,%r11 andq $-32,%rsp subq $448,%rsp movq %r11,0(%rsp) movq %r12,8(%rsp) movq %r13,16(%rsp) movq %r14,24(%rsp) movq %r15,32(%rsp) movq %rbx,40(%rsp) movq %rbp,48(%rsp) // load <0,0,1,X1> vmovdqa 0(%rsi),%ymm0 vmovdqa 32(%rsi),%ymm11 vmovdqa 64(%rsi),%ymm2 vmovdqa 96(%rsi),%ymm12 vmovdqa 128(%rsi),%ymm4 vmovdqa 160(%rsi),%ymm13 vmovdqa 192(%rsi),%ymm6 vmovdqa 224(%rsi),%ymm14 vmovdqa 256(%rsi),%ymm8 vmovdqa 288(%rsi),%ymm15 // <0',0',1',X1'> ← Pack-D2N(<0,0,1,X1>) vpsllq $32,%ymm11,%ymm11 vpor %ymm11,%ymm0,%ymm0 vpsllq $32,%ymm12,%ymm12 vpor %ymm12,%ymm2,%ymm2 vpsllq $32,%ymm13,%ymm13 vpor %ymm13,%ymm4,%ymm4 vpsllq $32,%ymm14,%ymm14 vpor %ymm14,%ymm6,%ymm6 vpsllq $32,%ymm15,%ymm15 vpor %ymm15,%ymm8,%ymm8 vmovdqa %ymm0,0(%rsi) vmovdqa %ymm2,32(%rsi) vmovdqa %ymm4,64(%rsi) vmovdqa %ymm6,96(%rsi) vmovdqa %ymm8,128(%rsi) // load <X2,Z2,X3,Z3> vmovdqa 0(%rdi),%ymm0 vmovdqa 32(%rdi),%ymm11 vmovdqa 64(%rdi),%ymm2 vmovdqa 96(%rdi),%ymm12 vmovdqa 128(%rdi),%ymm4 vmovdqa 160(%rdi),%ymm13 vmovdqa 192(%rdi),%ymm6 vmovdqa 224(%rdi),%ymm14 vmovdqa 256(%rdi),%ymm8 vmovdqa 288(%rdi),%ymm15 // <X2',Z2',X3',Z3'> ← Pack-D2N(<X2,Z2,X3,Z3>) vpsllq $32,%ymm11,%ymm11 vpor %ymm11,%ymm0,%ymm0 vpsllq $32,%ymm12,%ymm12 vpor %ymm12,%ymm2,%ymm2 vpsllq $32,%ymm13,%ymm13 vpor %ymm13,%ymm4,%ymm4 vpsllq $32,%ymm14,%ymm14 vpor %ymm14,%ymm6,%ymm6 vpsllq $32,%ymm15,%ymm15 vpor %ymm15,%ymm8,%ymm8 movq $31,%r15 movq $6,%rcx movb $0,%r8b movq %rdx,%rax .L1: addq %r15,%rax movb 0(%rax),%r14b movq %rdx,%rax .L2: movb %r14b,%bl shrb %cl,%bl andb $1,%bl movb %bl,%r9b xorb %r8b,%bl movb %r9b,%r8b // <X2',Z2',X3',Z3'> ← Dense-Swap(<X2',Z2',X3',Z3'>,b) movzbl %bl,%ebx imul $4,%ebx,%ebx movl %ebx,56(%rsp) vpbroadcastd 56(%rsp),%ymm7 vpaddd swap_c(%rip),%ymm7,%ymm7 vpand swap_mask(%rip),%ymm7,%ymm7 vpermd %ymm0,%ymm7,%ymm0 vpermd %ymm2,%ymm7,%ymm2 vpermd %ymm4,%ymm7,%ymm4 vpermd %ymm6,%ymm7,%ymm6 vpermd %ymm8,%ymm7,%ymm8 // <T1',T2',T4',T3'> ← Dense-H-H1(<X2',Z2',X3',Z3'>) vpshufd $68,%ymm0,%ymm1 vpshufd $238,%ymm0,%ymm3 vpaddd hh1_p1(%rip),%ymm1,%ymm1 vpxor hh1_xor(%rip),%ymm3,%ymm3 vpaddd %ymm1,%ymm3,%ymm16 vpshufd $68,%ymm2,%ymm1 vpshufd $238,%ymm2,%ymm3 vpaddd hh1_p2(%rip),%ymm1,%ymm1 vpxor hh1_xor(%rip),%ymm3,%ymm3 vpaddd %ymm1,%ymm3,%ymm18 vpshufd $68,%ymm4,%ymm1 vpshufd $238,%ymm4,%ymm3 vpaddd hh1_p2(%rip),%ymm1,%ymm1 vpxor hh1_xor(%rip),%ymm3,%ymm3 vpaddd %ymm1,%ymm3,%ymm20 vpshufd $68,%ymm6,%ymm1 vpshufd $238,%ymm6,%ymm3 vpaddd hh1_p2(%rip),%ymm1,%ymm1 vpxor hh1_xor(%rip),%ymm3,%ymm3 vpaddd %ymm1,%ymm3,%ymm22 vpshufd $68,%ymm8,%ymm1 vpshufd $238,%ymm8,%ymm3 vpaddd hh1_p2(%rip),%ymm1,%ymm1 vpxor hh1_xor(%rip),%ymm3,%ymm3 vpaddd %ymm1,%ymm3,%ymm24 // <T1,T2,T4,T3> ← Pack-N2D(<T1',T2',T4',T3'>) vpsrlq $32,%ymm16,%ymm17 vpsrlq $32,%ymm18,%ymm19 vpsrlq $32,%ymm20,%ymm21 vpsrlq $32,%ymm22,%ymm23 vpsrlq $32,%ymm24,%ymm25 // <T1',T2',T1',T2'> ← Dense-Dup(<T1',T2',T4',T3'>) vpermq $68,%ymm16,%ymm26 vpermq $68,%ymm18,%ymm28 vpermq $68,%ymm20,%ymm30 vpermq $68,%ymm22,%ymm6 vpermq $68,%ymm24,%ymm8 // <T1,T2,T1,T2> ← Pack-D2N(<T1',T2',T1',T2'>) vpsrlq $32,%ymm26,%ymm27 vpsrlq $32,%ymm28,%ymm29 vpsrlq $32,%ymm30,%ymm31 vpsrlq $32,%ymm6,%ymm7 vpsrlq $32,%ymm8,%ymm9 vmovdqa %ymm6,64(%rsp) vmovdqa %ymm7,96(%rsp) vmovdqa %ymm8,128(%rsp) vmovdqa %ymm9,160(%rsp) // <T5,T6,T7,T8> ← Mul(<T1,T2,T4,T3>,<T1,T2,T1,T2>) vpaddq %ymm17,%ymm17,%ymm11 vpaddq %ymm19,%ymm19,%ymm12 vpaddq %ymm21,%ymm21,%ymm13 vpaddq %ymm23,%ymm23,%ymm14 vpaddq %ymm25,%ymm25,%ymm15 vpmuludq vec19(%rip),%ymm27,%ymm1 vpmuludq vec19(%rip),%ymm28,%ymm2 vpmuludq vec19(%rip),%ymm29,%ymm3 vpmuludq vec19(%rip),%ymm30,%ymm4 vpmuludq vec19(%rip),%ymm31,%ymm5 vpmuludq vec19(%rip),%ymm6,%ymm6 vpmuludq vec19(%rip),%ymm7,%ymm7 vpmuludq vec19(%rip),%ymm8,%ymm8 vpmuludq vec19(%rip),%ymm9,%ymm9 vpmuludq %ymm15,%ymm1,%ymm0 vpmuludq %ymm14,%ymm3,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm13,%ymm5,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm12,%ymm7,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm11,%ymm9,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm24,%ymm2,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm22,%ymm4,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm20,%ymm6,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm18,%ymm8,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm25,%ymm2,%ymm1 vpmuludq %ymm24,%ymm3,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm23,%ymm4,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm22,%ymm5,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm21,%ymm6,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm20,%ymm7,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm19,%ymm8,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm18,%ymm9,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm15,%ymm3,%ymm2 vpmuludq %ymm14,%ymm5,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm13,%ymm7,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm12,%ymm9,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm24,%ymm4,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm22,%ymm6,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm20,%ymm8,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm27,%ymm11,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm25,%ymm4,%ymm3 vpmuludq %ymm24,%ymm5,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm23,%ymm6,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm22,%ymm7,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm21,%ymm8,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm20,%ymm9,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm15,%ymm5,%ymm4 vpmuludq %ymm14,%ymm7,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm13,%ymm9,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm24,%ymm6,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm22,%ymm8,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm27,%ymm12,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm29,%ymm11,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm25,%ymm6,%ymm5 vpmuludq %ymm24,%ymm7,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm23,%ymm8,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm22,%ymm9,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm15,%ymm7,%ymm6 vpmuludq %ymm14,%ymm9,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm24,%ymm8,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm27,%ymm13,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm29,%ymm12,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm31,%ymm11,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm25,%ymm8,%ymm7 vpmuludq %ymm24,%ymm9,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq %ymm15,%ymm9,%ymm8 vpmuludq %ymm27,%ymm14,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq %ymm29,%ymm13,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq %ymm31,%ymm12,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq 96(%rsp),%ymm11,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq %ymm26,%ymm16,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm28,%ymm16,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm26,%ymm18,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm29,%ymm16,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm28,%ymm17,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm27,%ymm18,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm26,%ymm19,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm27,%ymm16,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm26,%ymm17,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm30,%ymm16,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm28,%ymm18,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm26,%ymm20,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm31,%ymm16,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm30,%ymm17,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm29,%ymm18,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm28,%ymm19,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm27,%ymm20,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm26,%ymm21,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq 64(%rsp),%ymm16,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm30,%ymm18,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm28,%ymm20,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq 96(%rsp),%ymm16,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq 64(%rsp),%ymm17,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq %ymm31,%ymm18,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq %ymm30,%ymm19,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq %ymm29,%ymm20,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq %ymm28,%ymm21,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq 128(%rsp),%ymm16,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq 64(%rsp),%ymm18,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq %ymm30,%ymm20,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq %ymm30,%ymm21,%ymm21 vpmuludq 160(%rsp),%ymm16,%ymm10 vpaddq %ymm10,%ymm21,%ymm21 vpmuludq 128(%rsp),%ymm17,%ymm10 vpaddq %ymm10,%ymm21,%ymm21 vpmuludq 96(%rsp),%ymm18,%ymm10 vpaddq %ymm10,%ymm21,%ymm21 vpmuludq 64(%rsp),%ymm19,%ymm10 vpaddq %ymm10,%ymm21,%ymm21 vpmuludq %ymm31,%ymm20,%ymm10 vpaddq %ymm10,%ymm21,%ymm9 vpmuludq %ymm26,%ymm22,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm27,%ymm22,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq %ymm26,%ymm23,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq %ymm28,%ymm22,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq %ymm26,%ymm24,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq %ymm29,%ymm22,%ymm10 vpaddq %ymm10,%ymm9,%ymm9 vpmuludq %ymm28,%ymm23,%ymm10 vpaddq %ymm10,%ymm9,%ymm9 vpmuludq %ymm27,%ymm24,%ymm10 vpaddq %ymm10,%ymm9,%ymm9 vpmuludq %ymm26,%ymm25,%ymm10 vpaddq %ymm10,%ymm9,%ymm9 vpsrlq $25,%ymm5,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpand vecmask25(%rip),%ymm5,%ymm15 vpsrlq $26,%ymm0,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpand vecmask26(%rip),%ymm0,%ymm0 vpsrlq $26,%ymm6,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpand vecmask26(%rip),%ymm6,%ymm11 vpsrlq $25,%ymm1,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpand vecmask25(%rip),%ymm1,%ymm1 vpsrlq $25,%ymm7,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpand vecmask25(%rip),%ymm7,%ymm14 vpsrlq $26,%ymm2,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpandq vecmask26(%rip),%ymm2,%ymm28 vpsrlq $26,%ymm8,%ymm10 vpaddq %ymm10,%ymm9,%ymm9 vpand vecmask26(%rip),%ymm8,%ymm6 vpsrlq $25,%ymm3,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpandq vecmask25(%rip),%ymm3,%ymm29 vpsrlq $25,%ymm9,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpsllq $1,%ymm10,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpsllq $3,%ymm10,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpand vecmask25(%rip),%ymm9,%ymm8 vpsrlq $26,%ymm4,%ymm10 vpaddq %ymm10,%ymm15,%ymm15 vpandq vecmask26(%rip),%ymm4,%ymm30 vpsrlq $26,%ymm0,%ymm10 vpaddq %ymm10,%ymm1,%ymm27 vpandq vecmask26(%rip),%ymm0,%ymm26 vpsrlq $25,%ymm15,%ymm10 vpaddq %ymm10,%ymm11,%ymm5 vpandq vecmask25(%rip),%ymm15,%ymm31 vmovdqa %ymm5,64(%rsp) vmovdqa %ymm14,96(%rsp) vmovdqa %ymm6,128(%rsp) vmovdqa %ymm8,160(%rsp) // <T5',T6',T7',T8'> ← Pack-N2D(<T5,T6,T7,T8>) vpsllq $32,%ymm27,%ymm3 vporq %ymm3,%ymm26,%ymm0 vpsllq $32,%ymm29,%ymm13 vporq %ymm13,%ymm28,%ymm2 vpsllq $32,%ymm31,%ymm9 vporq %ymm9,%ymm30,%ymm4 vpsllq $32,%ymm8,%ymm8 vpor %ymm8,%ymm6,%ymm8 vpsllq $32,%ymm14,%ymm14 vpor %ymm14,%ymm5,%ymm6 // <T9',T10',T11',T12'> ← Dense-H2-H(<T5',T6',T7',T8'>) vpshufd $68,%ymm0,%ymm1 vpand h2h_mask(%rip),%ymm1,%ymm1 vpshufd $238,%ymm0,%ymm3 vpaddd h2h_p1(%rip),%ymm1,%ymm1 vpxor h2h_xor(%rip),%ymm3,%ymm3 vpaddd %ymm1,%ymm3,%ymm0 vpshufd $68,%ymm2,%ymm1 vpand h2h_mask(%rip),%ymm1,%ymm1 vpshufd $238,%ymm2,%ymm3 vpaddd h2h_p2(%rip),%ymm1,%ymm1 vpxor h2h_xor(%rip),%ymm3,%ymm3 vpaddd %ymm1,%ymm3,%ymm12 vpshufd $68,%ymm4,%ymm1 vpand h2h_mask(%rip),%ymm1,%ymm1 vpshufd $238,%ymm4,%ymm3 vpaddd h2h_p2(%rip),%ymm1,%ymm1 vpxor h2h_xor(%rip),%ymm3,%ymm3 vpaddd %ymm1,%ymm3,%ymm7 vpshufd $68,%ymm6,%ymm1 vpand h2h_mask(%rip),%ymm1,%ymm1 vpshufd $238,%ymm6,%ymm3 vpaddd h2h_p2(%rip),%ymm1,%ymm1 vpxor h2h_xor(%rip),%ymm3,%ymm3 vpaddd %ymm1,%ymm3,%ymm5 vpshufd $68,%ymm8,%ymm1 vpand h2h_mask(%rip),%ymm1,%ymm1 vpshufd $238,%ymm8,%ymm3 vpaddd h2h_p2(%rip),%ymm1,%ymm1 vpxor h2h_xor(%rip),%ymm3,%ymm3 vpaddd %ymm1,%ymm3,%ymm6 // <T9',T10',1',X1'> ← Blend(<0',0',1',X1'>,<T9',T10',T11',T12'>,1100) movl $240,%ebx kmovw %ebx,%k1 vpblendmd 0(%rsi),%ymm0,%ymm16{%k1} vpblendmd 32(%rsi),%ymm12,%ymm18{%k1} vpblendmd 64(%rsi),%ymm7,%ymm20{%k1} vpblendmd 96(%rsi),%ymm5,%ymm22{%k1} vpblendmd 128(%rsi),%ymm6,%ymm24{%k1} // <T9,T10,1,X1> ← Pack-D2N(<T9',T10',1',X1'>) vpsrlq $32,%ymm16,%ymm17 vpsrlq $32,%ymm18,%ymm19 vpsrlq $32,%ymm20,%ymm21 vpsrlq $32,%ymm22,%ymm23 vpsrlq $32,%ymm24,%ymm25 // <T9,T10,T11,T12> ← Pack-D2N(<T9',T10',T11',T12'>) vpsrlq $32,%ymm0,%ymm3 vpsrlq $32,%ymm12,%ymm13 vpsrlq $32,%ymm7,%ymm9 vpsrlq $32,%ymm5,%ymm14 vpsrlq $32,%ymm6,%ymm8 // <0,T13,0,0> ← Unreduced-Mulc(<T9,T10,T11,T12>,<0,a24,0,0>) // <T5,T14,T7,T8> ← Add(<0,T13,0,0>,<T5,T6,T7,T8>) vpmuludq a24(%rip),%ymm0,%ymm1 vpaddq %ymm26,%ymm1,%ymm1 vpmuludq a24(%rip),%ymm3,%ymm2 vpaddq %ymm27,%ymm2,%ymm2 vpmuludq a24(%rip),%ymm12,%ymm4 vpaddq %ymm28,%ymm4,%ymm4 vpmuludq a24(%rip),%ymm9,%ymm11 vpaddq %ymm31,%ymm11,%ymm11 vpmuludq a24(%rip),%ymm5,%ymm15 vpaddq 64(%rsp),%ymm15,%ymm15 vpsrlq $26,%ymm1,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpand vecmask26(%rip),%ymm1,%ymm1 vpsrlq $25,%ymm11,%ymm10 vpaddq %ymm10,%ymm15,%ymm15 vpand vecmask25(%rip),%ymm11,%ymm11 vpsrlq $25,%ymm2,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpandq vecmask25(%rip),%ymm2,%ymm27 vpmuludq a24(%rip),%ymm14,%ymm2 vpaddq 96(%rsp),%ymm2,%ymm2 vpsrlq $26,%ymm15,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpand vecmask26(%rip),%ymm15,%ymm15 vmovdqa %ymm15,64(%rsp) vpmuludq a24(%rip),%ymm13,%ymm15 vpaddq %ymm29,%ymm15,%ymm15 vpsrlq $26,%ymm4,%ymm10 vpaddq %ymm10,%ymm15,%ymm15 vpandq vecmask26(%rip),%ymm4,%ymm28 vpmuludq a24(%rip),%ymm6,%ymm4 vpaddq 128(%rsp),%ymm4,%ymm4 vpsrlq $25,%ymm2,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpand vecmask25(%rip),%ymm2,%ymm2 vmovdqa %ymm2,96(%rsp) vpmuludq a24(%rip),%ymm7,%ymm2 vpaddq %ymm30,%ymm2,%ymm2 vpsrlq $25,%ymm15,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpandq vecmask25(%rip),%ymm15,%ymm29 vpmuludq a24(%rip),%ymm8,%ymm15 vpaddq 160(%rsp),%ymm15,%ymm15 vpsrlq $26,%ymm4,%ymm10 vpaddq %ymm10,%ymm15,%ymm15 vpand vecmask26(%rip),%ymm4,%ymm4 vmovdqa %ymm4,128(%rsp) vpsrlq $26,%ymm2,%ymm10 vpaddq %ymm10,%ymm11,%ymm31 vpandq vecmask26(%rip),%ymm2,%ymm30 vpsrlq $25,%ymm15,%ymm10 vpmuludq vec19(%rip),%ymm10,%ymm10 vpaddq %ymm10,%ymm1,%ymm26 vpand vecmask25(%rip),%ymm15,%ymm15 vmovdqa %ymm15,160(%rsp) // <*,*,T15,T16> ← Sqr(<T9,T10,T11,T12>) vmovdqa %ymm12,192(%rsp) vmovdqa %ymm13,224(%rsp) vmovdqa %ymm7,256(%rsp) vmovdqa %ymm9,288(%rsp) vmovdqa %ymm5,320(%rsp) vmovdqa %ymm14,352(%rsp) vmovdqa %ymm6,384(%rsp) vmovdqa %ymm8,416(%rsp) vpmuludq vec19(%rip),%ymm5,%ymm2 vpmuludq vec19(%rip),%ymm6,%ymm6 vpmuludq vec38(%rip),%ymm9,%ymm1 vpmuludq vec38(%rip),%ymm14,%ymm4 vpmuludq vec38(%rip),%ymm8,%ymm8 vpaddq %ymm0,%ymm0,%ymm10 vpaddq %ymm3,%ymm3,%ymm11 vpaddq %ymm12,%ymm12,%ymm12 vpaddq %ymm13,%ymm13,%ymm13 vpaddq %ymm7,%ymm7,%ymm7 vpaddq %ymm9,%ymm9,%ymm9 vpaddq %ymm5,%ymm5,%ymm5 vpaddq %ymm14,%ymm14,%ymm14 vpmuludq %ymm0,%ymm0,%ymm0 vpmuludq %ymm11,%ymm8,%ymm15 vpaddq %ymm15,%ymm0,%ymm0 vpmuludq %ymm12,%ymm6,%ymm15 vpaddq %ymm15,%ymm0,%ymm0 vpmuludq %ymm13,%ymm4,%ymm15 vpaddq %ymm15,%ymm0,%ymm0 vpmuludq %ymm7,%ymm2,%ymm15 vpaddq %ymm15,%ymm0,%ymm0 vpmuludq 288(%rsp),%ymm1,%ymm15 vpaddq %ymm15,%ymm0,%ymm0 vpmuludq 320(%rsp),%ymm1,%ymm1 vpmuludq %ymm3,%ymm10,%ymm15 vpaddq %ymm15,%ymm1,%ymm1 vpmuludq 192(%rsp),%ymm8,%ymm15 vpaddq %ymm15,%ymm1,%ymm1 vpmuludq %ymm13,%ymm6,%ymm15 vpaddq %ymm15,%ymm1,%ymm1 vpmuludq 256(%rsp),%ymm4,%ymm15 vpaddq %ymm15,%ymm1,%ymm1 vpmuludq 320(%rsp),%ymm2,%ymm2 vpmuludq 192(%rsp),%ymm10,%ymm15 vpaddq %ymm15,%ymm2,%ymm2 vpmuludq %ymm3,%ymm11,%ymm15 vpaddq %ymm15,%ymm2,%ymm2 vpmuludq %ymm13,%ymm8,%ymm15 vpaddq %ymm15,%ymm2,%ymm2 vpmuludq %ymm7,%ymm6,%ymm15 vpaddq %ymm15,%ymm2,%ymm2 vpmuludq %ymm9,%ymm4,%ymm15 vpaddq %ymm15,%ymm2,%ymm2 vpmuludq 224(%rsp),%ymm10,%ymm3 vpmuludq 192(%rsp),%ymm11,%ymm15 vpaddq %ymm15,%ymm3,%ymm3 vpmuludq 256(%rsp),%ymm8,%ymm15 vpaddq %ymm15,%ymm3,%ymm3 vpmuludq %ymm9,%ymm6,%ymm15 vpaddq %ymm15,%ymm3,%ymm3 vpmuludq 320(%rsp),%ymm4,%ymm15 vpaddq %ymm15,%ymm3,%ymm3 vpmuludq 352(%rsp),%ymm4,%ymm4 vpmuludq 256(%rsp),%ymm10,%ymm15 vpaddq %ymm15,%ymm4,%ymm4 vpmuludq %ymm11,%ymm13,%ymm15 vpaddq %ymm15,%ymm4,%ymm4 vmovdqa 192(%rsp),%ymm15 vpmuludq %ymm15,%ymm15,%ymm15 vpaddq %ymm15,%ymm4,%ymm4 vpmuludq %ymm9,%ymm8,%ymm15 vpaddq %ymm15,%ymm4,%ymm4 vpmuludq %ymm5,%ymm6,%ymm15 vpaddq %ymm15,%ymm4,%ymm4 vpmuludq 288(%rsp),%ymm10,%ymm5 vpmuludq 256(%rsp),%ymm11,%ymm15 vpaddq %ymm15,%ymm5,%ymm5 vpmuludq 224(%rsp),%ymm12,%ymm15 vpaddq %ymm15,%ymm5,%ymm5 vpmuludq 320(%rsp),%ymm8,%ymm15 vpaddq %ymm15,%ymm5,%ymm5 vpmuludq %ymm6,%ymm14,%ymm15 vpaddq %ymm15,%ymm5,%ymm5 vpmuludq 384(%rsp),%ymm6,%ymm6 vpmuludq 320(%rsp),%ymm10,%ymm15 vpaddq %ymm15,%ymm6,%ymm6 vpmuludq %ymm11,%ymm9,%ymm15 vpaddq %ymm15,%ymm6,%ymm6 vpmuludq 256(%rsp),%ymm12,%ymm15 vpaddq %ymm15,%ymm6,%ymm6 vpmuludq 224(%rsp),%ymm13,%ymm15 vpaddq %ymm15,%ymm6,%ymm6 vpmuludq %ymm14,%ymm8,%ymm15 vpaddq %ymm15,%ymm6,%ymm6 vpmuludq 352(%rsp),%ymm10,%ymm7 vpmuludq 320(%rsp),%ymm11,%ymm15 vpaddq %ymm15,%ymm7,%ymm7 vpmuludq 288(%rsp),%ymm12,%ymm15 vpaddq %ymm15,%ymm7,%ymm7 vpmuludq 256(%rsp),%ymm13,%ymm15 vpaddq %ymm15,%ymm7,%ymm7 vpmuludq 384(%rsp),%ymm8,%ymm15 vpaddq %ymm15,%ymm7,%ymm7 vpmuludq 416(%rsp),%ymm8,%ymm8 vpmuludq 384(%rsp),%ymm10,%ymm15 vpaddq %ymm15,%ymm8,%ymm8 vpmuludq %ymm11,%ymm14,%ymm15 vpaddq %ymm15,%ymm8,%ymm8 vpmuludq 320(%rsp),%ymm12,%ymm15 vpaddq %ymm15,%ymm8,%ymm8 vpmuludq %ymm13,%ymm9,%ymm15 vpaddq %ymm15,%ymm8,%ymm8 vmovdqa 256(%rsp),%ymm15 vpmuludq %ymm15,%ymm15,%ymm15 vpaddq %ymm15,%ymm8,%ymm8 vpmuludq 256(%rsp),%ymm9,%ymm9 vpmuludq 416(%rsp),%ymm10,%ymm15 vpaddq %ymm15,%ymm9,%ymm9 vpmuludq 384(%rsp),%ymm11,%ymm15 vpaddq %ymm15,%ymm9,%ymm9 vpmuludq 352(%rsp),%ymm12,%ymm15 vpaddq %ymm15,%ymm9,%ymm9 vpmuludq 320(%rsp),%ymm13,%ymm15 vpaddq %ymm15,%ymm9,%ymm9 vpsrlq $25,%ymm5,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpand vecmask25(%rip),%ymm5,%ymm5 vpsrlq $26,%ymm0,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpand vecmask26(%rip),%ymm0,%ymm0 vpsrlq $26,%ymm6,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpand vecmask26(%rip),%ymm6,%ymm6 vpsrlq $25,%ymm1,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpand vecmask25(%rip),%ymm1,%ymm1 vpsrlq $25,%ymm7,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpand vecmask25(%rip),%ymm7,%ymm7 vpsrlq $26,%ymm2,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpand vecmask26(%rip),%ymm2,%ymm2 vpsrlq $26,%ymm8,%ymm10 vpaddq %ymm10,%ymm9,%ymm9 vpand vecmask26(%rip),%ymm8,%ymm8 vpsrlq $25,%ymm3,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpand vecmask25(%rip),%ymm3,%ymm3 vpsrlq $25,%ymm9,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpsllq $1,%ymm10,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpsllq $3,%ymm10,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpand vecmask25(%rip),%ymm9,%ymm9 vpsrlq $26,%ymm4,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpand vecmask26(%rip),%ymm4,%ymm4 vpsrlq $26,%ymm0,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpand vecmask26(%rip),%ymm0,%ymm0 vpsrlq $25,%ymm5,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpand vecmask25(%rip),%ymm5,%ymm5 // <T5,T14,T15,T16> ← Blend(<T5,T14,T7,T8>,<*,*,T15,T16>,0011) movl $15,%ebx kmovw %ebx,%k1 vpblendmd %ymm26,%ymm0,%ymm26{%k1} vpblendmd %ymm27,%ymm1,%ymm27{%k1} vpblendmd %ymm28,%ymm2,%ymm28{%k1} vpblendmd %ymm29,%ymm3,%ymm29{%k1} vpblendmd %ymm30,%ymm4,%ymm30{%k1} vpblendmd %ymm31,%ymm5,%ymm31{%k1} vpblendmd 64(%rsp),%ymm6,%ymm6{%k1} vpblendmd 96(%rsp),%ymm7,%ymm7{%k1} vmovdqa %ymm6,64(%rsp) vmovdqa %ymm7,96(%rsp) vpblendmd 128(%rsp),%ymm8,%ymm8{%k1} vpblendmd 160(%rsp),%ymm9,%ymm9{%k1} vmovdqa %ymm8,128(%rsp) vmovdqa %ymm9,160(%rsp) // <X2,Z2,X3,Z3> ← Mul(<T5,T14,T15,T16>,<T6,T10,1,X1>) vpaddq %ymm17,%ymm17,%ymm11 vpaddq %ymm19,%ymm19,%ymm12 vpaddq %ymm21,%ymm21,%ymm13 vpaddq %ymm23,%ymm23,%ymm14 vpaddq %ymm25,%ymm25,%ymm15 vpmuludq vec19(%rip),%ymm27,%ymm1 vpmuludq vec19(%rip),%ymm28,%ymm2 vpmuludq vec19(%rip),%ymm29,%ymm3 vpmuludq vec19(%rip),%ymm30,%ymm4 vpmuludq vec19(%rip),%ymm31,%ymm5 vpmuludq vec19(%rip),%ymm6,%ymm6 vpmuludq vec19(%rip),%ymm7,%ymm7 vpmuludq vec19(%rip),%ymm8,%ymm8 vpmuludq vec19(%rip),%ymm9,%ymm9 vpmuludq %ymm15,%ymm1,%ymm0 vpmuludq %ymm14,%ymm3,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm13,%ymm5,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm12,%ymm7,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm11,%ymm9,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm24,%ymm2,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm22,%ymm4,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm20,%ymm6,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm18,%ymm8,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm25,%ymm2,%ymm1 vpmuludq %ymm24,%ymm3,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm23,%ymm4,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm22,%ymm5,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm21,%ymm6,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm20,%ymm7,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm19,%ymm8,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm18,%ymm9,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm15,%ymm3,%ymm2 vpmuludq %ymm14,%ymm5,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm13,%ymm7,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm12,%ymm9,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm24,%ymm4,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm22,%ymm6,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm20,%ymm8,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm27,%ymm11,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm25,%ymm4,%ymm3 vpmuludq %ymm24,%ymm5,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm23,%ymm6,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm22,%ymm7,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm21,%ymm8,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm20,%ymm9,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm15,%ymm5,%ymm4 vpmuludq %ymm14,%ymm7,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm13,%ymm9,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm24,%ymm6,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm22,%ymm8,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm27,%ymm12,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm29,%ymm11,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm25,%ymm6,%ymm5 vpmuludq %ymm24,%ymm7,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm23,%ymm8,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm22,%ymm9,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm15,%ymm7,%ymm6 vpmuludq %ymm14,%ymm9,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm24,%ymm8,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm27,%ymm13,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm29,%ymm12,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm31,%ymm11,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm25,%ymm8,%ymm7 vpmuludq %ymm24,%ymm9,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq %ymm15,%ymm9,%ymm8 vpmuludq %ymm27,%ymm14,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq %ymm29,%ymm13,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq %ymm31,%ymm12,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq 96(%rsp),%ymm11,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq %ymm26,%ymm16,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpmuludq %ymm28,%ymm16,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm26,%ymm18,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpmuludq %ymm29,%ymm16,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm28,%ymm17,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm27,%ymm18,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm26,%ymm19,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpmuludq %ymm27,%ymm16,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm26,%ymm17,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpmuludq %ymm30,%ymm16,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm28,%ymm18,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm26,%ymm20,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpmuludq %ymm31,%ymm16,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm30,%ymm17,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm29,%ymm18,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm28,%ymm19,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm27,%ymm20,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq %ymm26,%ymm21,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpmuludq 64(%rsp),%ymm16,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm30,%ymm18,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm28,%ymm20,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq 96(%rsp),%ymm16,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq 64(%rsp),%ymm17,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq %ymm31,%ymm18,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq %ymm30,%ymm19,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq %ymm29,%ymm20,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq %ymm28,%ymm21,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq 128(%rsp),%ymm16,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq 64(%rsp),%ymm18,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq %ymm30,%ymm20,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq %ymm30,%ymm21,%ymm21 vpmuludq 160(%rsp),%ymm16,%ymm10 vpaddq %ymm10,%ymm21,%ymm21 vpmuludq 128(%rsp),%ymm17,%ymm10 vpaddq %ymm10,%ymm21,%ymm21 vpmuludq 96(%rsp),%ymm18,%ymm10 vpaddq %ymm10,%ymm21,%ymm21 vpmuludq 64(%rsp),%ymm19,%ymm10 vpaddq %ymm10,%ymm21,%ymm21 vpmuludq %ymm31,%ymm20,%ymm10 vpaddq %ymm10,%ymm21,%ymm9 vpmuludq %ymm26,%ymm22,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpmuludq %ymm27,%ymm22,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq %ymm26,%ymm23,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpmuludq %ymm28,%ymm22,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq %ymm26,%ymm24,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpmuludq %ymm29,%ymm22,%ymm10 vpaddq %ymm10,%ymm9,%ymm9 vpmuludq %ymm28,%ymm23,%ymm10 vpaddq %ymm10,%ymm9,%ymm9 vpmuludq %ymm27,%ymm24,%ymm10 vpaddq %ymm10,%ymm9,%ymm9 vpmuludq %ymm26,%ymm25,%ymm10 vpaddq %ymm10,%ymm9,%ymm9 vpsrlq $25,%ymm5,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpand vecmask25(%rip),%ymm5,%ymm5 vpsrlq $26,%ymm0,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpand vecmask26(%rip),%ymm0,%ymm0 vpsrlq $26,%ymm6,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpand vecmask26(%rip),%ymm6,%ymm6 vpsrlq $25,%ymm1,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpand vecmask25(%rip),%ymm1,%ymm1 vpsrlq $25,%ymm7,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpand vecmask25(%rip),%ymm7,%ymm14 vpsrlq $26,%ymm2,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpand vecmask26(%rip),%ymm2,%ymm2 vpsrlq $26,%ymm8,%ymm10 vpaddq %ymm10,%ymm9,%ymm9 vpand vecmask26(%rip),%ymm8,%ymm8 vpsrlq $25,%ymm3,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpand vecmask25(%rip),%ymm3,%ymm12 vpsrlq $25,%ymm9,%ymm10 vpmuludq vec19(%rip),%ymm10,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpand vecmask25(%rip),%ymm9,%ymm15 vpsrlq $26,%ymm4,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpand vecmask26(%rip),%ymm4,%ymm4 vpsrlq $26,%ymm0,%ymm10 vpaddq %ymm10,%ymm1,%ymm11 vpand vecmask26(%rip),%ymm0,%ymm0 vpsrlq $25,%ymm5,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpand vecmask25(%rip),%ymm5,%ymm13 // <X2',Z2',X3',Z3'> ← Pack-N2D(<X2,Z2,X3,Z3>) vpsllq $32,%ymm11,%ymm11 vpor %ymm11,%ymm0,%ymm0 vpsllq $32,%ymm12,%ymm12 vpor %ymm12,%ymm2,%ymm2 vpsllq $32,%ymm13,%ymm13 vpor %ymm13,%ymm4,%ymm4 vpsllq $32,%ymm14,%ymm14 vpor %ymm14,%ymm6,%ymm6 vpsllq $32,%ymm15,%ymm15 vpor %ymm15,%ymm8,%ymm8 subb $1,%cl cmpb $0,%cl jge .L2 movb $7,%cl subq $1,%r15 cmpq $0,%r15 jge .L1 // <X2,Z2,X3,Z3> ← Pack-D2N(<X2',Z2',X3',Z3'>) vpsrlq $32,%ymm0,%ymm11 vpand vecmask32(%rip),%ymm0,%ymm0 vpsrlq $32,%ymm2,%ymm12 vpand vecmask32(%rip),%ymm2,%ymm2 vpsrlq $32,%ymm4,%ymm13 vpand vecmask32(%rip),%ymm4,%ymm4 vpsrlq $32,%ymm6,%ymm14 vpand vecmask32(%rip),%ymm6,%ymm6 vpsrlq $32,%ymm8,%ymm15 vpand vecmask32(%rip),%ymm8,%ymm8 // <X2,Z2,X3,Z3> ← Reduce(<X2,Z2,X3,Z3>) vpsrlq $26,%ymm0,%ymm10 vpaddq %ymm10,%ymm11,%ymm11 vpand vecmask26(%rip),%ymm0,%ymm0 vpsrlq $25,%ymm11,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpand vecmask25(%rip),%ymm11,%ymm11 vpsrlq $26,%ymm2,%ymm10 vpaddq %ymm10,%ymm12,%ymm12 vpand vecmask26(%rip),%ymm2,%ymm2 vpsrlq $25,%ymm12,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpand vecmask25(%rip),%ymm12,%ymm12 vpsrlq $26,%ymm4,%ymm10 vpaddq %ymm10,%ymm13,%ymm13 vpand vecmask26(%rip),%ymm4,%ymm4 vpsrlq $25,%ymm13,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpand vecmask25(%rip),%ymm13,%ymm13 vpsrlq $26,%ymm6,%ymm10 vpaddq %ymm10,%ymm14,%ymm14 vpand vecmask26(%rip),%ymm6,%ymm6 vpsrlq $25,%ymm14,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpand vecmask25(%rip),%ymm14,%ymm14 vpsrlq $26,%ymm8,%ymm10 vpaddq %ymm10,%ymm15,%ymm15 vpand vecmask26(%rip),%ymm8,%ymm8 vpsrlq $25,%ymm15,%ymm10 vpmuludq vec19(%rip),%ymm10,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpand vecmask25(%rip),%ymm15,%ymm15 vpsrlq $26,%ymm0,%ymm10 vpaddq %ymm10,%ymm11,%ymm11 vpand vecmask26(%rip),%ymm0,%ymm0 // store <X2,Z2,X3,Z3> vmovdqa %ymm0,0(%rdi) vmovdqa %ymm11,32(%rdi) vmovdqa %ymm2,64(%rdi) vmovdqa %ymm12,96(%rdi) vmovdqa %ymm4,128(%rdi) vmovdqa %ymm13,160(%rdi) vmovdqa %ymm6,192(%rdi) vmovdqa %ymm14,224(%rdi) vmovdqa %ymm8,256(%rdi) vmovdqa %ymm15,288(%rdi) movq 0(%rsp),%r11 movq 8(%rsp),%r12 movq 16(%rsp),%r13 movq 24(%rsp),%r14 movq 32(%rsp),%r15 movq 40(%rsp),%rbx movq 48(%rsp),%rbp movq %r11,%rsp ret