-rw-r--r-- 32979 lib25519-20240321/crypto_nP/montgomery25519/amd64-avx2-ns9l-maa4/mladder.S raw
#include "crypto_asm_hidden.h" // linker define mladder // linker use hh1_p1 // linker use hh1_p2 // linker use hh1_p3 // linker use h2h_p1 // linker use h2h_p2 // linker use h2h_p3 // linker use hh1_xor1 // linker use h2h_xor1 // linker use hh1_xor2 // linker use h2h_xor2 // linker use swap_c // linker use swap_mask // linker use h2h_mask // linker use vec19 // linker use vec1216 // linker use vecmask23 // linker use vecmask29 // linker use vecmask29d // linker use vecmask32 // linker use a24 /* Assembly for Montgomery ladder. */ #include "consts_namespace.h" .p2align 5 ASM_HIDDEN _CRYPTO_SHARED_NAMESPACE(mladder) .globl _CRYPTO_SHARED_NAMESPACE(mladder) ASM_HIDDEN CRYPTO_SHARED_NAMESPACE(mladder) .globl CRYPTO_SHARED_NAMESPACE(mladder) _CRYPTO_SHARED_NAMESPACE(mladder): CRYPTO_SHARED_NAMESPACE(mladder): movq %rsp,%r11 andq $-32,%rsp subq $1536,%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),%ymm1 vmovdqa 64(%rsi),%ymm2 vmovdqa 96(%rsi),%ymm3 vmovdqa 128(%rsi),%ymm4 vmovdqa 160(%rsi),%ymm5 vmovdqa 192(%rsi),%ymm6 vmovdqa 224(%rsi),%ymm7 vmovdqa 256(%rsi),%ymm8 // <0',0',1',X1'> ← Pack-D2N(<0,0,1,X1>) vpsllq $32,%ymm4,%ymm4 vpor %ymm4,%ymm0,%ymm0 vpsllq $32,%ymm5,%ymm5 vpor %ymm5,%ymm1,%ymm1 vpsllq $32,%ymm6,%ymm6 vpor %ymm6,%ymm2,%ymm2 vpsllq $32,%ymm7,%ymm7 vpor %ymm7,%ymm3,%ymm3 vmovdqa %ymm0,0(%rsi) vmovdqa %ymm1,32(%rsi) vmovdqa %ymm2,64(%rsi) vmovdqa %ymm3,96(%rsi) vmovdqa %ymm8,128(%rsi) // load <X2,Z2,X3,Z3> vmovdqa 0(%rdi),%ymm10 vmovdqa 32(%rdi),%ymm11 vmovdqa 64(%rdi),%ymm12 vmovdqa 96(%rdi),%ymm13 vmovdqa 128(%rdi),%ymm0 vmovdqa 160(%rdi),%ymm1 vmovdqa 192(%rdi),%ymm2 vmovdqa 224(%rdi),%ymm3 vmovdqa 256(%rdi),%ymm4 // <X2',Z2',X3',Z3'> ← Pack-D2N(<X2,Z2,X3,Z3>) vpsllq $32,%ymm0,%ymm0 vpor %ymm0,%ymm10,%ymm10 vpsllq $32,%ymm1,%ymm1 vpor %ymm1,%ymm11,%ymm11 vpsllq $32,%ymm2,%ymm2 vpor %ymm2,%ymm12,%ymm12 vpsllq $32,%ymm3,%ymm3 vpor %ymm3,%ymm13,%ymm13 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 %ymm10,%ymm7,%ymm10 vpermd %ymm11,%ymm7,%ymm11 vpermd %ymm12,%ymm7,%ymm12 vpermd %ymm13,%ymm7,%ymm13 vpermd %ymm4,%ymm7,%ymm4 // <T1',T2',T4',T3'> ← Dense-H-H1(<X2',Z2',X3',Z3'>) vpshufd $68,%ymm10,%ymm5 vpshufd $238,%ymm10,%ymm6 vpaddd hh1_p1(%rip),%ymm5,%ymm5 vpxor hh1_xor1(%rip),%ymm6,%ymm6 vpaddd %ymm5,%ymm6,%ymm10 vpshufd $68,%ymm11,%ymm5 vpshufd $238,%ymm11,%ymm6 vpaddd hh1_p2(%rip),%ymm5,%ymm5 vpxor hh1_xor1(%rip),%ymm6,%ymm6 vpaddd %ymm5,%ymm6,%ymm11 vpshufd $68,%ymm12,%ymm5 vpshufd $238,%ymm12,%ymm6 vpaddd hh1_p2(%rip),%ymm5,%ymm5 vpxor hh1_xor1(%rip),%ymm6,%ymm6 vpaddd %ymm5,%ymm6,%ymm12 vpshufd $68,%ymm13,%ymm5 vpshufd $238,%ymm13,%ymm6 vpaddd hh1_p2(%rip),%ymm5,%ymm5 vpxor hh1_xor1(%rip),%ymm6,%ymm6 vpaddd %ymm5,%ymm6,%ymm13 vpshufd $68,%ymm4,%ymm5 vpshufd $238,%ymm4,%ymm6 vpaddd hh1_p3(%rip),%ymm5,%ymm5 vpxor hh1_xor2(%rip),%ymm6,%ymm6 vpaddd %ymm5,%ymm6,%ymm4 vpsrld $29,%ymm10,%ymm15 vpaddd %ymm15,%ymm11,%ymm11 vpand vecmask29d(%rip),%ymm10,%ymm10 vpsrld $29,%ymm11,%ymm15 vpaddd %ymm15,%ymm12,%ymm12 vpand vecmask29d(%rip),%ymm11,%ymm11 vpsrld $29,%ymm12,%ymm15 vpaddd %ymm15,%ymm13,%ymm13 vpand vecmask29d(%rip),%ymm12,%ymm12 vpsrld $29,%ymm13,%ymm15 vpsllq $32,%ymm15,%ymm15 vpaddd %ymm15,%ymm10,%ymm10 vpsrlq $61,%ymm13,%ymm15 vpaddd %ymm15,%ymm4,%ymm4 vpand vecmask29d(%rip),%ymm13,%ymm13 vpsrlq $23,%ymm4,%ymm15 vpmuludq vec19(%rip),%ymm15,%ymm15 vpaddd %ymm15,%ymm10,%ymm10 vpand vecmask23(%rip),%ymm4,%ymm9 // <T1,T2,T4,T3> ← Pack-N2D(<T1',T2',T4',T3'>) vpsrlq $32,%ymm10,%ymm5 vpsrlq $32,%ymm11,%ymm6 vpsrlq $32,%ymm12,%ymm7 vpsrlq $32,%ymm13,%ymm8 vmovdqa %ymm10,192(%rsp) vmovdqa %ymm11,224(%rsp) vmovdqa %ymm12,256(%rsp) vmovdqa %ymm13,288(%rsp) // <T1',T2',T1',T2'> ← Dense-Dup(<T1',T2',T4',T3'>) vpermq $68,%ymm10,%ymm10 vpermq $68,%ymm11,%ymm11 vpermq $68,%ymm12,%ymm12 vpermq $68,%ymm13,%ymm13 vpermq $68,%ymm9,%ymm4 // <T1,T2,T1,T2> ← Pack-D2N(<T1',T2',T1',T2'>) vpsrlq $32,%ymm10,%ymm0 vpsrlq $32,%ymm11,%ymm1 vpsrlq $32,%ymm12,%ymm2 vpsrlq $32,%ymm13,%ymm3 // <T5,T6,T7,T8> ← Mul(<T1,T2,T4,T3>,<T1,T2,T1,T2>) vpmuludq %ymm5,%ymm0,%ymm15 vmovdqa %ymm15,480(%rsp) vpmuludq %ymm6,%ymm0,%ymm15 vpmuludq %ymm5,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,512(%rsp) vpmuludq %ymm7,%ymm0,%ymm15 vpmuludq %ymm6,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm5,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,544(%rsp) vpmuludq %ymm8,%ymm0,%ymm15 vpmuludq %ymm7,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm6,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm5,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,576(%rsp) vpmuludq %ymm9,%ymm0,%ymm15 vpmuludq %ymm8,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm7,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm6,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm5,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,608(%rsp) vpmuludq %ymm9,%ymm1,%ymm15 vpmuludq %ymm8,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm7,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm6,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,640(%rsp) vpmuludq %ymm9,%ymm2,%ymm15 vpmuludq %ymm8,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm7,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,672(%rsp) vpmuludq %ymm9,%ymm3,%ymm15 vpmuludq %ymm8,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,704(%rsp) vpmuludq %ymm9,%ymm4,%ymm15 vmovdqa %ymm15,736(%rsp) vpaddq %ymm10,%ymm0,%ymm0 vpaddq %ymm11,%ymm1,%ymm1 vpaddq %ymm12,%ymm2,%ymm2 vpaddq %ymm13,%ymm3,%ymm3 vpaddq 192(%rsp),%ymm5,%ymm5 vpaddq 224(%rsp),%ymm6,%ymm6 vpaddq 256(%rsp),%ymm7,%ymm7 vpaddq 288(%rsp),%ymm8,%ymm8 vpmuludq 192(%rsp),%ymm10,%ymm15 vmovdqa %ymm15,768(%rsp) vpaddq 480(%rsp),%ymm15,%ymm15 vmovdqa %ymm15,992(%rsp) vpmuludq 224(%rsp),%ymm10,%ymm15 vpmuludq 192(%rsp),%ymm11,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,800(%rsp) vpaddq 512(%rsp),%ymm15,%ymm15 vmovdqa %ymm15,1024(%rsp) vpmuludq 256(%rsp),%ymm10,%ymm15 vpmuludq 224(%rsp),%ymm11,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq 192(%rsp),%ymm12,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,832(%rsp) vpaddq 544(%rsp),%ymm15,%ymm15 vmovdqa %ymm15,1056(%rsp) vpmuludq 288(%rsp),%ymm10,%ymm15 vpmuludq 256(%rsp),%ymm11,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq 224(%rsp),%ymm12,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq 192(%rsp),%ymm13,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,864(%rsp) vpaddq 576(%rsp),%ymm15,%ymm15 vmovdqa %ymm15,1088(%rsp) vpmuludq 288(%rsp),%ymm11,%ymm15 vpmuludq 256(%rsp),%ymm12,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq 224(%rsp),%ymm13,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,896(%rsp) vpaddq 608(%rsp),%ymm15,%ymm15 vmovdqa %ymm15,1120(%rsp) vpmuludq 288(%rsp),%ymm12,%ymm15 vpmuludq 256(%rsp),%ymm13,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,928(%rsp) vpaddq 640(%rsp),%ymm15,%ymm15 vmovdqa %ymm15,1152(%rsp) vpmuludq 288(%rsp),%ymm13,%ymm15 vmovdqa %ymm15,960(%rsp) vpaddq 672(%rsp),%ymm15,%ymm15 vmovdqa %ymm15,1184(%rsp) vpmuludq %ymm5,%ymm0,%ymm15 vmovdqa %ymm15,1216(%rsp) vpmuludq %ymm6,%ymm0,%ymm15 vpmuludq %ymm5,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm10 vpmuludq %ymm7,%ymm0,%ymm15 vpmuludq %ymm6,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm5,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm11 vpmuludq %ymm8,%ymm0,%ymm15 vpmuludq %ymm7,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm6,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm5,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm12 vpmuludq %ymm9,%ymm0,%ymm15 vpmuludq %ymm8,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm7,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm6,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm5,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm13 vpmuludq %ymm9,%ymm1,%ymm15 vpmuludq %ymm8,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm7,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm6,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm0 vpmuludq %ymm9,%ymm2,%ymm15 vpmuludq %ymm8,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm7,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm1 vpmuludq %ymm9,%ymm3,%ymm15 vpmuludq %ymm8,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm2 vpmuludq %ymm9,%ymm4,%ymm3 vmovdqa 1216(%rsp),%ymm9 vpsubq 992(%rsp),%ymm9,%ymm9 vpaddq 896(%rsp),%ymm9,%ymm9 vpsubq 1024(%rsp),%ymm10,%ymm10 vpaddq 928(%rsp),%ymm10,%ymm10 vpsubq 1056(%rsp),%ymm11,%ymm11 vpaddq 960(%rsp),%ymm11,%ymm11 vpsubq 1088(%rsp),%ymm12,%ymm12 vpsubq 1120(%rsp),%ymm13,%ymm13 vpaddq 480(%rsp),%ymm13,%ymm13 vpsubq 1152(%rsp),%ymm0,%ymm0 vpaddq 512(%rsp),%ymm0,%ymm0 vpsubq 1184(%rsp),%ymm1,%ymm1 vpaddq 544(%rsp),%ymm1,%ymm1 vpsubq 704(%rsp),%ymm2,%ymm2 vpaddq 576(%rsp),%ymm2,%ymm2 vpsubq 736(%rsp),%ymm3,%ymm3 vpaddq 608(%rsp),%ymm3,%ymm3 vpsrlq $29,%ymm0,%ymm14 vpaddq %ymm14,%ymm1,%ymm1 vpand vecmask29(%rip),%ymm0,%ymm0 vpmuludq vec1216(%rip),%ymm0,%ymm0 vpaddq 768(%rsp),%ymm0,%ymm0 vpsrlq $29,%ymm1,%ymm14 vpaddq %ymm14,%ymm2,%ymm2 vpand vecmask29(%rip),%ymm1,%ymm1 vpmuludq vec1216(%rip),%ymm1,%ymm1 vpaddq 800(%rsp),%ymm1,%ymm1 vpsrlq $29,%ymm2,%ymm14 vpaddq %ymm14,%ymm3,%ymm3 vpand vecmask29(%rip),%ymm2,%ymm2 vpmuludq vec1216(%rip),%ymm2,%ymm2 vpaddq 832(%rsp),%ymm2,%ymm2 vpsrlq $29,%ymm3,%ymm14 vpaddq 640(%rsp),%ymm14,%ymm14 vpand vecmask29(%rip),%ymm3,%ymm3 vpmuludq vec1216(%rip),%ymm3,%ymm3 vpaddq 864(%rsp),%ymm3,%ymm3 vpsrlq $29,%ymm14,%ymm15 vpaddq 672(%rsp),%ymm15,%ymm15 vpand vecmask29(%rip),%ymm14,%ymm4 vpmuludq vec1216(%rip),%ymm4,%ymm4 vpaddq %ymm9,%ymm4,%ymm4 vpsrlq $29,%ymm15,%ymm14 vpaddq 704(%rsp),%ymm14,%ymm14 vpand vecmask29(%rip),%ymm15,%ymm5 vpmuludq vec1216(%rip),%ymm5,%ymm5 vpaddq %ymm10,%ymm5,%ymm5 vpsrlq $29,%ymm14,%ymm15 vpaddq 736(%rsp),%ymm15,%ymm15 vpand vecmask29(%rip),%ymm14,%ymm6 vpmuludq vec1216(%rip),%ymm6,%ymm6 vpaddq %ymm11,%ymm6,%ymm6 vpsrlq $29,%ymm15,%ymm8 vpand vecmask29(%rip),%ymm15,%ymm7 vpmuludq vec1216(%rip),%ymm7,%ymm7 vpaddq %ymm12,%ymm7,%ymm7 vpmuludq vec1216(%rip),%ymm8,%ymm8 vpaddq %ymm13,%ymm8,%ymm8 vpsrlq $29,%ymm4,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpand vecmask29(%rip),%ymm4,%ymm4 vpsrlq $29,%ymm0,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpand vecmask29(%rip),%ymm0,%ymm0 vpsrlq $29,%ymm5,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpand vecmask29(%rip),%ymm5,%ymm5 vpsrlq $29,%ymm1,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpand vecmask29(%rip),%ymm1,%ymm1 vpsrlq $29,%ymm6,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpand vecmask29(%rip),%ymm6,%ymm6 vpsrlq $29,%ymm2,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpand vecmask29(%rip),%ymm2,%ymm2 vpsrlq $29,%ymm7,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpand vecmask29(%rip),%ymm7,%ymm7 vpsrlq $29,%ymm3,%ymm10 vpaddq %ymm10,%ymm4,%ymm4 vpand vecmask29(%rip),%ymm3,%ymm3 vpsrlq $23,%ymm8,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpaddq %ymm10,%ymm10,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpsllq $3,%ymm10,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpand vecmask23(%rip),%ymm8,%ymm8 vpsrlq $29,%ymm4,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpand vecmask29(%rip),%ymm4,%ymm4 vpsrlq $29,%ymm0,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpand vecmask29(%rip),%ymm0,%ymm0 vmovdqa %ymm0,1248(%rsp) vmovdqa %ymm1,1280(%rsp) vmovdqa %ymm2,1312(%rsp) vmovdqa %ymm3,1344(%rsp) vmovdqa %ymm4,1376(%rsp) vmovdqa %ymm5,1408(%rsp) vmovdqa %ymm6,1440(%rsp) vmovdqa %ymm7,1472(%rsp) vmovdqa %ymm8,1504(%rsp) // <T5',T6',T7',T8'> ← Pack-N2D(<T5,T6,T7,T8>) vpsllq $32,%ymm4,%ymm4 vpor %ymm4,%ymm0,%ymm0 vpsllq $32,%ymm5,%ymm5 vpor %ymm5,%ymm1,%ymm1 vpsllq $32,%ymm6,%ymm6 vpor %ymm6,%ymm2,%ymm2 vpsllq $32,%ymm7,%ymm7 vpor %ymm7,%ymm3,%ymm3 // <T9',T10',T11',T12'> ← Dense-H2-H(<T5',T6',T7',T8'>) vpshufd $68,%ymm0,%ymm9 vpand h2h_mask(%rip),%ymm9,%ymm9 vpshufd $238,%ymm0,%ymm10 vpaddd h2h_p1(%rip),%ymm9,%ymm9 vpxor h2h_xor1(%rip),%ymm10,%ymm10 vpaddd %ymm9,%ymm10,%ymm0 vpshufd $68,%ymm1,%ymm9 vpand h2h_mask(%rip),%ymm9,%ymm9 vpshufd $238,%ymm1,%ymm10 vpaddd h2h_p2(%rip),%ymm9,%ymm9 vpxor h2h_xor1(%rip),%ymm10,%ymm10 vpaddd %ymm9,%ymm10,%ymm1 vpshufd $68,%ymm2,%ymm9 vpand h2h_mask(%rip),%ymm9,%ymm9 vpshufd $238,%ymm2,%ymm10 vpaddd h2h_p2(%rip),%ymm9,%ymm9 vpxor h2h_xor1(%rip),%ymm10,%ymm10 vpaddd %ymm9,%ymm10,%ymm2 vpshufd $68,%ymm3,%ymm9 vpand h2h_mask(%rip),%ymm9,%ymm9 vpshufd $238,%ymm3,%ymm10 vpaddd h2h_p2(%rip),%ymm9,%ymm9 vpxor h2h_xor1(%rip),%ymm10,%ymm10 vpaddd %ymm9,%ymm10,%ymm3 vpshufd $68,%ymm8,%ymm9 vpand h2h_mask(%rip),%ymm9,%ymm9 vpshufd $238,%ymm8,%ymm10 vpaddd h2h_p3(%rip),%ymm9,%ymm9 vpxor h2h_xor2(%rip),%ymm10,%ymm10 vpaddd %ymm9,%ymm10,%ymm8 vpsrld $29,%ymm0,%ymm15 vpaddd %ymm15,%ymm1,%ymm1 vpand vecmask29d(%rip),%ymm0,%ymm0 vpsrld $29,%ymm1,%ymm15 vpaddd %ymm15,%ymm2,%ymm2 vpand vecmask29d(%rip),%ymm1,%ymm1 vpsrld $29,%ymm2,%ymm15 vpaddd %ymm15,%ymm3,%ymm3 vpand vecmask29d(%rip),%ymm2,%ymm2 vpsrld $29,%ymm3,%ymm15 vpsllq $32,%ymm15,%ymm15 vpaddd %ymm15,%ymm0,%ymm0 vpsrlq $61,%ymm3,%ymm15 vpaddd %ymm15,%ymm8,%ymm8 vpand vecmask29d(%rip),%ymm3,%ymm3 vpsrlq $23,%ymm8,%ymm15 vpmuludq vec19(%rip),%ymm15,%ymm15 vpaddd %ymm15,%ymm0,%ymm0 vpand vecmask23(%rip),%ymm8,%ymm8 // <T9',T10',1',X1'> ← Blend(<0',0',1',X1'>,<T9',T10',T11',T12'>,1100) vpblendd $240,0(%rsi),%ymm0,%ymm11 vpblendd $240,32(%rsi),%ymm1,%ymm12 vpblendd $240,64(%rsi),%ymm2,%ymm13 vpblendd $240,96(%rsi),%ymm3,%ymm14 vpblendd $240,128(%rsi),%ymm8,%ymm15 // <T9,T10,1,X1> ← Pack-D2N(<T9',T10',1',X1'>) vmovdqa %ymm11,192(%rsp) vpsrlq $32,%ymm11,%ymm11 vmovdqa %ymm11,320(%rsp) vmovdqa %ymm12,224(%rsp) vpsrlq $32,%ymm12,%ymm12 vmovdqa %ymm12,352(%rsp) vmovdqa %ymm13,256(%rsp) vpsrlq $32,%ymm13,%ymm13 vmovdqa %ymm13,384(%rsp) vmovdqa %ymm14,288(%rsp) vpsrlq $32,%ymm14,%ymm14 vmovdqa %ymm14,416(%rsp) vmovdqa %ymm15,448(%rsp) // <T9,T10,T11,T12> ← Pack-D2N(<T9',T10',T11',T12'>) vpsrlq $32,%ymm0,%ymm4 vpsrlq $32,%ymm1,%ymm5 vpsrlq $32,%ymm2,%ymm6 vpsrlq $32,%ymm3,%ymm7 // <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,%ymm9 vpaddq 1248(%rsp),%ymm9,%ymm9 vpmuludq a24(%rip),%ymm1,%ymm10 vpaddq 1280(%rsp),%ymm10,%ymm10 vpmuludq a24(%rip),%ymm2,%ymm11 vpaddq 1312(%rsp),%ymm11,%ymm11 vpmuludq a24(%rip),%ymm4,%ymm12 vpaddq 1376(%rsp),%ymm12,%ymm12 vpmuludq a24(%rip),%ymm5,%ymm13 vpaddq 1408(%rsp),%ymm13,%ymm13 vpmuludq a24(%rip),%ymm6,%ymm14 vpaddq 1440(%rsp),%ymm14,%ymm14 vpsrlq $29,%ymm12,%ymm15 vpaddq %ymm15,%ymm13,%ymm13 vpand vecmask29(%rip),%ymm12,%ymm12 vpsrlq $29,%ymm9,%ymm15 vpaddq %ymm15,%ymm10,%ymm10 vpand vecmask29(%rip),%ymm9,%ymm9 vpsrlq $29,%ymm13,%ymm15 vpaddq %ymm15,%ymm14,%ymm14 vpand vecmask29(%rip),%ymm13,%ymm13 vmovdqa %ymm13,1408(%rsp) vpsrlq $29,%ymm10,%ymm15 vpaddq %ymm15,%ymm11,%ymm11 vpand vecmask29(%rip),%ymm10,%ymm10 vmovdqa %ymm10,1280(%rsp) vpmuludq a24(%rip),%ymm3,%ymm10 vpaddq 1344(%rsp),%ymm10,%ymm10 vpmuludq a24(%rip),%ymm7,%ymm13 vpaddq 1472(%rsp),%ymm13,%ymm13 vpsrlq $29,%ymm14,%ymm15 vpaddq %ymm15,%ymm13,%ymm13 vpand vecmask29(%rip),%ymm14,%ymm14 vmovdqa %ymm14,1440(%rsp) vpsrlq $29,%ymm11,%ymm15 vpaddq %ymm15,%ymm10,%ymm10 vpand vecmask29(%rip),%ymm11,%ymm11 vmovdqa %ymm11,1312(%rsp) vpmuludq a24(%rip),%ymm8,%ymm14 vpaddq 1504(%rsp),%ymm14,%ymm14 vpsrlq $29,%ymm13,%ymm15 vpaddq %ymm15,%ymm14,%ymm14 vpand vecmask29(%rip),%ymm13,%ymm13 vmovdqa %ymm13,1472(%rsp) vpsrlq $29,%ymm10,%ymm15 vpaddq %ymm15,%ymm12,%ymm12 vpand vecmask29(%rip),%ymm10,%ymm10 vmovdqa %ymm10,1344(%rsp) vmovdqa %ymm12,1376(%rsp) vpsrlq $23,%ymm14,%ymm15 vpmuludq vec19(%rip),%ymm15,%ymm15 vpaddq %ymm15,%ymm9,%ymm9 vpand vecmask23(%rip),%ymm14,%ymm14 vmovdqa %ymm9,1248(%rsp) vmovdqa %ymm14,1504(%rsp) // <*,*,T15,T16> ← Sqr(<T9,T10,T11,T12>) vpmuludq %ymm1,%ymm8,%ymm15 vpmuludq %ymm2,%ymm7,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm3,%ymm6,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm4,%ymm5,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpsllq $1,%ymm15,%ymm9 vpmuludq %ymm2,%ymm8,%ymm15 vpmuludq %ymm3,%ymm7,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm4,%ymm6,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpsllq $1,%ymm15,%ymm15 vpmuludq %ymm5,%ymm5,%ymm14 vpaddq %ymm14,%ymm15,%ymm10 vpsrlq $29,%ymm9,%ymm14 vpaddq %ymm14,%ymm10,%ymm10 vpand vecmask29(%rip),%ymm9,%ymm9 vpmuludq vec1216(%rip),%ymm9,%ymm9 vpmuludq %ymm0,%ymm0,%ymm15 vpaddq %ymm15,%ymm9,%ymm9 vpmuludq %ymm3,%ymm8,%ymm15 vpmuludq %ymm4,%ymm7,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm5,%ymm6,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpsllq $1,%ymm15,%ymm11 vpsrlq $29,%ymm10,%ymm14 vpaddq %ymm14,%ymm11,%ymm11 vpand vecmask29(%rip),%ymm10,%ymm10 vpmuludq vec1216(%rip),%ymm10,%ymm10 vpmuludq %ymm0,%ymm1,%ymm15 vpsllq $1,%ymm15,%ymm15 vpaddq %ymm15,%ymm10,%ymm10 vpmuludq %ymm4,%ymm8,%ymm15 vpmuludq %ymm5,%ymm7,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpsllq $1,%ymm15,%ymm15 vpmuludq %ymm6,%ymm6,%ymm14 vpaddq %ymm14,%ymm15,%ymm12 vpsrlq $29,%ymm11,%ymm14 vpaddq %ymm14,%ymm12,%ymm12 vpand vecmask29(%rip),%ymm11,%ymm11 vpmuludq vec1216(%rip),%ymm11,%ymm11 vpmuludq %ymm0,%ymm2,%ymm15 vpsllq $1,%ymm15,%ymm15 vpmuludq %ymm1,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpaddq %ymm15,%ymm11,%ymm11 vpmuludq %ymm5,%ymm8,%ymm15 vpmuludq %ymm6,%ymm7,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpsllq $1,%ymm15,%ymm13 vpsrlq $29,%ymm12,%ymm14 vpaddq %ymm14,%ymm13,%ymm13 vpand vecmask29(%rip),%ymm12,%ymm12 vpmuludq vec1216(%rip),%ymm12,%ymm12 vpmuludq %ymm0,%ymm3,%ymm15 vpmuludq %ymm1,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpsllq $1,%ymm15,%ymm15 vpaddq %ymm15,%ymm12,%ymm12 vmovdqa %ymm11,64(%rsp) vpmuludq %ymm6,%ymm8,%ymm15 vpsllq $1,%ymm15,%ymm15 vpmuludq %ymm7,%ymm7,%ymm14 vpaddq %ymm14,%ymm15,%ymm14 vpsrlq $29,%ymm13,%ymm15 vpaddq %ymm15,%ymm14,%ymm14 vpand vecmask29(%rip),%ymm13,%ymm13 vpmuludq vec1216(%rip),%ymm13,%ymm13 vpmuludq %ymm0,%ymm4,%ymm15 vpmuludq %ymm1,%ymm3,%ymm11 vpaddq %ymm11,%ymm15,%ymm15 vpsllq $1,%ymm15,%ymm15 vpmuludq %ymm2,%ymm2,%ymm11 vpaddq %ymm11,%ymm15,%ymm15 vpaddq %ymm15,%ymm13,%ymm13 vmovdqa %ymm12,96(%rsp) vpmuludq %ymm7,%ymm8,%ymm15 vpsllq $1,%ymm15,%ymm15 vpsrlq $29,%ymm14,%ymm11 vpaddq %ymm11,%ymm15,%ymm15 vpand vecmask29(%rip),%ymm14,%ymm14 vpmuludq vec1216(%rip),%ymm14,%ymm14 vpmuludq %ymm0,%ymm5,%ymm12 vpmuludq %ymm1,%ymm4,%ymm11 vpaddq %ymm11,%ymm12,%ymm12 vpmuludq %ymm2,%ymm3,%ymm11 vpaddq %ymm11,%ymm12,%ymm12 vpsllq $1,%ymm12,%ymm12 vpaddq %ymm12,%ymm14,%ymm14 vmovdqa %ymm13,128(%rsp) vpmuludq %ymm8,%ymm8,%ymm11 vpsrlq $29,%ymm15,%ymm12 vpaddq %ymm12,%ymm11,%ymm11 vpand vecmask29(%rip),%ymm15,%ymm15 vpmuludq vec1216(%rip),%ymm15,%ymm15 vpmuludq %ymm0,%ymm6,%ymm12 vpmuludq %ymm1,%ymm5,%ymm13 vpaddq %ymm12,%ymm13,%ymm13 vpmuludq %ymm2,%ymm4,%ymm12 vpaddq %ymm12,%ymm13,%ymm13 vpsllq $1,%ymm13,%ymm13 vpmuludq %ymm3,%ymm3,%ymm12 vpaddq %ymm12,%ymm13,%ymm13 vpaddq %ymm13,%ymm15,%ymm15 vmovdqa %ymm14,160(%rsp) vpsrlq $29,%ymm11,%ymm12 vpand vecmask29(%rip),%ymm11,%ymm11 vpmuludq vec1216(%rip),%ymm11,%ymm11 vpmuludq %ymm0,%ymm7,%ymm13 vpmuludq %ymm1,%ymm6,%ymm14 vpaddq %ymm13,%ymm14,%ymm14 vpmuludq %ymm2,%ymm5,%ymm13 vpaddq %ymm13,%ymm14,%ymm14 vpmuludq %ymm3,%ymm4,%ymm13 vpaddq %ymm13,%ymm14,%ymm14 vpsllq $1,%ymm14,%ymm14 vpaddq %ymm14,%ymm11,%ymm11 vpmuludq vec1216(%rip),%ymm12,%ymm12 vpmuludq %ymm0,%ymm8,%ymm13 vpmuludq %ymm1,%ymm7,%ymm14 vpaddq %ymm13,%ymm14,%ymm14 vpmuludq %ymm2,%ymm6,%ymm13 vpaddq %ymm13,%ymm14,%ymm14 vpmuludq %ymm3,%ymm5,%ymm13 vpaddq %ymm13,%ymm14,%ymm14 vpsllq $1,%ymm14,%ymm14 vpmuludq %ymm4,%ymm4,%ymm13 vpaddq %ymm13,%ymm14,%ymm14 vpaddq %ymm14,%ymm12,%ymm12 vmovdqa 128(%rsp),%ymm4 vpsrlq $29,%ymm4,%ymm5 vpaddq 160(%rsp),%ymm5,%ymm5 vpand vecmask29(%rip),%ymm4,%ymm4 vpsrlq $29,%ymm9,%ymm14 vpaddq %ymm14,%ymm10,%ymm1 vpand vecmask29(%rip),%ymm9,%ymm0 vpsrlq $29,%ymm5,%ymm6 vpaddq %ymm15,%ymm6,%ymm6 vpand vecmask29(%rip),%ymm5,%ymm5 vpsrlq $29,%ymm1,%ymm14 vpaddq 64(%rsp),%ymm14,%ymm2 vpand vecmask29(%rip),%ymm1,%ymm1 vpsrlq $29,%ymm6,%ymm7 vpaddq %ymm11,%ymm7,%ymm7 vpand vecmask29(%rip),%ymm6,%ymm6 vpsrlq $29,%ymm2,%ymm14 vpaddq 96(%rsp),%ymm14,%ymm3 vpand vecmask29(%rip),%ymm2,%ymm2 vpsrlq $29,%ymm7,%ymm8 vpaddq %ymm12,%ymm8,%ymm8 vpand vecmask29(%rip),%ymm7,%ymm7 vpsrlq $29,%ymm3,%ymm14 vpaddq %ymm14,%ymm4,%ymm4 vpand vecmask29(%rip),%ymm3,%ymm3 vpsrlq $23,%ymm8,%ymm14 vpaddq %ymm14,%ymm0,%ymm0 vpsllq $1,%ymm14,%ymm14 vpaddq %ymm14,%ymm0,%ymm0 vpsllq $3,%ymm14,%ymm14 vpaddq %ymm14,%ymm0,%ymm0 vpand vecmask23(%rip),%ymm8,%ymm8 vpsrlq $29,%ymm4,%ymm14 vpaddq %ymm14,%ymm5,%ymm5 vpand vecmask29(%rip),%ymm4,%ymm4 vpsrlq $29,%ymm0,%ymm14 vpaddq %ymm14,%ymm1,%ymm1 vpand vecmask29(%rip),%ymm0,%ymm0 // <T5,T14,T15,T16> ← Blend(<T5,T14,T7,T8>,<*,*,T15,T16>,0011) vpblendd $15,1248(%rsp),%ymm0,%ymm10 vpblendd $15,1280(%rsp),%ymm1,%ymm11 vpblendd $15,1312(%rsp),%ymm2,%ymm12 vpblendd $15,1344(%rsp),%ymm3,%ymm13 vpblendd $15,1376(%rsp),%ymm4,%ymm0 vpblendd $15,1408(%rsp),%ymm5,%ymm1 vpblendd $15,1440(%rsp),%ymm6,%ymm2 vpblendd $15,1472(%rsp),%ymm7,%ymm3 vpblendd $15,1504(%rsp),%ymm8,%ymm4 // <X2,Z2,X3,Z3> ← Mul(<T5,T14,T15,T16>,<T9,T10,1,X1>) vmovdqa 320(%rsp),%ymm5 vmovdqa 352(%rsp),%ymm6 vmovdqa 384(%rsp),%ymm7 vmovdqa 416(%rsp),%ymm8 vmovdqa 448(%rsp),%ymm9 vpmuludq %ymm5,%ymm0,%ymm15 vmovdqa %ymm15,480(%rsp) vpmuludq %ymm6,%ymm0,%ymm15 vpmuludq %ymm5,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,512(%rsp) vpmuludq %ymm7,%ymm0,%ymm15 vpmuludq %ymm6,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm5,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,544(%rsp) vpmuludq %ymm8,%ymm0,%ymm15 vpmuludq %ymm7,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm6,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm5,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,576(%rsp) vpmuludq %ymm9,%ymm0,%ymm15 vpmuludq %ymm8,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm7,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm6,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm5,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,608(%rsp) vpmuludq %ymm9,%ymm1,%ymm15 vpmuludq %ymm8,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm7,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm6,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,640(%rsp) vpmuludq %ymm9,%ymm2,%ymm15 vpmuludq %ymm8,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm7,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,672(%rsp) vpmuludq %ymm9,%ymm3,%ymm15 vpmuludq %ymm8,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,704(%rsp) vpmuludq %ymm9,%ymm4,%ymm15 vmovdqa %ymm15,736(%rsp) vpaddq %ymm10,%ymm0,%ymm0 vpaddq %ymm11,%ymm1,%ymm1 vpaddq %ymm12,%ymm2,%ymm2 vpaddq %ymm13,%ymm3,%ymm3 vpaddq 192(%rsp),%ymm5,%ymm5 vpaddq 224(%rsp),%ymm6,%ymm6 vpaddq 256(%rsp),%ymm7,%ymm7 vpaddq 288(%rsp),%ymm8,%ymm8 vpmuludq 192(%rsp),%ymm10,%ymm15 vmovdqa %ymm15,768(%rsp) vpaddq 480(%rsp),%ymm15,%ymm15 vmovdqa %ymm15,992(%rsp) vpmuludq 224(%rsp),%ymm10,%ymm15 vpmuludq 192(%rsp),%ymm11,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,800(%rsp) vpaddq 512(%rsp),%ymm15,%ymm15 vmovdqa %ymm15,1024(%rsp) vpmuludq 256(%rsp),%ymm10,%ymm15 vpmuludq 224(%rsp),%ymm11,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq 192(%rsp),%ymm12,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,832(%rsp) vpaddq 544(%rsp),%ymm15,%ymm15 vmovdqa %ymm15,1056(%rsp) vpmuludq 288(%rsp),%ymm10,%ymm15 vpmuludq 256(%rsp),%ymm11,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq 224(%rsp),%ymm12,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq 192(%rsp),%ymm13,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,864(%rsp) vpaddq 576(%rsp),%ymm15,%ymm15 vmovdqa %ymm15,1088(%rsp) vpmuludq 288(%rsp),%ymm11,%ymm15 vpmuludq 256(%rsp),%ymm12,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq 224(%rsp),%ymm13,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,896(%rsp) vpaddq 608(%rsp),%ymm15,%ymm15 vmovdqa %ymm15,1120(%rsp) vpmuludq 288(%rsp),%ymm12,%ymm15 vpmuludq 256(%rsp),%ymm13,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vmovdqa %ymm15,928(%rsp) vpaddq 640(%rsp),%ymm15,%ymm15 vmovdqa %ymm15,1152(%rsp) vpmuludq 288(%rsp),%ymm13,%ymm15 vmovdqa %ymm15,960(%rsp) vpaddq 672(%rsp),%ymm15,%ymm15 vmovdqa %ymm15,1184(%rsp) vpmuludq %ymm5,%ymm0,%ymm15 vmovdqa %ymm15,1216(%rsp) vpmuludq %ymm6,%ymm0,%ymm15 vpmuludq %ymm5,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm10 vpmuludq %ymm7,%ymm0,%ymm15 vpmuludq %ymm6,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm5,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm11 vpmuludq %ymm8,%ymm0,%ymm15 vpmuludq %ymm7,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm6,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm5,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm12 vpmuludq %ymm9,%ymm0,%ymm15 vpmuludq %ymm8,%ymm1,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm7,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm6,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm5,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm13 vpmuludq %ymm9,%ymm1,%ymm15 vpmuludq %ymm8,%ymm2,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm7,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm6,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm0 vpmuludq %ymm9,%ymm2,%ymm15 vpmuludq %ymm8,%ymm3,%ymm14 vpaddq %ymm14,%ymm15,%ymm15 vpmuludq %ymm7,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm1 vpmuludq %ymm9,%ymm3,%ymm15 vpmuludq %ymm8,%ymm4,%ymm14 vpaddq %ymm14,%ymm15,%ymm2 vpmuludq %ymm9,%ymm4,%ymm3 vmovdqa 1216(%rsp),%ymm9 vpsubq 992(%rsp),%ymm9,%ymm9 vpaddq 896(%rsp),%ymm9,%ymm9 vpsubq 1024(%rsp),%ymm10,%ymm10 vpaddq 928(%rsp),%ymm10,%ymm10 vpsubq 1056(%rsp),%ymm11,%ymm11 vpaddq 960(%rsp),%ymm11,%ymm11 vpsubq 1088(%rsp),%ymm12,%ymm12 vpsubq 1120(%rsp),%ymm13,%ymm13 vpaddq 480(%rsp),%ymm13,%ymm13 vpsubq 1152(%rsp),%ymm0,%ymm0 vpaddq 512(%rsp),%ymm0,%ymm0 vpsubq 1184(%rsp),%ymm1,%ymm1 vpaddq 544(%rsp),%ymm1,%ymm1 vpsubq 704(%rsp),%ymm2,%ymm2 vpaddq 576(%rsp),%ymm2,%ymm2 vpsubq 736(%rsp),%ymm3,%ymm3 vpaddq 608(%rsp),%ymm3,%ymm3 vpsrlq $29,%ymm0,%ymm14 vpaddq %ymm14,%ymm1,%ymm1 vpand vecmask29(%rip),%ymm0,%ymm0 vpmuludq vec1216(%rip),%ymm0,%ymm0 vpaddq 768(%rsp),%ymm0,%ymm0 vpsrlq $29,%ymm1,%ymm14 vpaddq %ymm14,%ymm2,%ymm2 vpand vecmask29(%rip),%ymm1,%ymm1 vpmuludq vec1216(%rip),%ymm1,%ymm1 vpaddq 800(%rsp),%ymm1,%ymm1 vpsrlq $29,%ymm2,%ymm14 vpaddq %ymm14,%ymm3,%ymm3 vpand vecmask29(%rip),%ymm2,%ymm2 vpmuludq vec1216(%rip),%ymm2,%ymm2 vpaddq 832(%rsp),%ymm2,%ymm2 vpsrlq $29,%ymm3,%ymm14 vpaddq 640(%rsp),%ymm14,%ymm14 vpand vecmask29(%rip),%ymm3,%ymm3 vpmuludq vec1216(%rip),%ymm3,%ymm3 vpaddq 864(%rsp),%ymm3,%ymm3 vpsrlq $29,%ymm14,%ymm15 vpaddq 672(%rsp),%ymm15,%ymm15 vpand vecmask29(%rip),%ymm14,%ymm4 vpmuludq vec1216(%rip),%ymm4,%ymm4 vpaddq %ymm9,%ymm4,%ymm4 vpsrlq $29,%ymm15,%ymm14 vpaddq 704(%rsp),%ymm14,%ymm14 vpand vecmask29(%rip),%ymm15,%ymm5 vpmuludq vec1216(%rip),%ymm5,%ymm5 vpaddq %ymm10,%ymm5,%ymm5 vpsrlq $29,%ymm14,%ymm15 vpaddq 736(%rsp),%ymm15,%ymm15 vpand vecmask29(%rip),%ymm14,%ymm6 vpmuludq vec1216(%rip),%ymm6,%ymm6 vpaddq %ymm11,%ymm6,%ymm6 vpsrlq $29,%ymm15,%ymm8 vpand vecmask29(%rip),%ymm15,%ymm7 vpmuludq vec1216(%rip),%ymm7,%ymm7 vpaddq %ymm12,%ymm7,%ymm7 vpmuludq vec1216(%rip),%ymm8,%ymm8 vpaddq %ymm13,%ymm8,%ymm8 vpsrlq $29,%ymm4,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpand vecmask29(%rip),%ymm4,%ymm4 vpsrlq $29,%ymm0,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpand vecmask29(%rip),%ymm0,%ymm0 vpsrlq $29,%ymm5,%ymm10 vpaddq %ymm10,%ymm6,%ymm6 vpand vecmask29(%rip),%ymm5,%ymm5 vpsrlq $29,%ymm1,%ymm10 vpaddq %ymm10,%ymm2,%ymm2 vpand vecmask29(%rip),%ymm1,%ymm1 vpsrlq $29,%ymm6,%ymm10 vpaddq %ymm10,%ymm7,%ymm7 vpand vecmask29(%rip),%ymm6,%ymm6 vpsrlq $29,%ymm2,%ymm10 vpaddq %ymm10,%ymm3,%ymm3 vpand vecmask29(%rip),%ymm2,%ymm2 vpsrlq $29,%ymm7,%ymm10 vpaddq %ymm10,%ymm8,%ymm8 vpand vecmask29(%rip),%ymm7,%ymm7 vpsrlq $29,%ymm3,%ymm10 vpaddq %ymm10,%ymm4,%ymm9 vpand vecmask29(%rip),%ymm3,%ymm3 vpsrlq $23,%ymm8,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpaddq %ymm10,%ymm10,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpsllq $3,%ymm10,%ymm10 vpaddq %ymm10,%ymm0,%ymm0 vpand vecmask23(%rip),%ymm8,%ymm4 vpsrlq $29,%ymm9,%ymm10 vpaddq %ymm10,%ymm5,%ymm5 vpand vecmask29(%rip),%ymm9,%ymm9 vpsrlq $29,%ymm0,%ymm10 vpaddq %ymm10,%ymm1,%ymm1 vpand vecmask29(%rip),%ymm0,%ymm0 // <X2',Z2',X3',Z3'> ← Pack-N2D(<X2,Z2,X3,Z3>) vpsllq $32,%ymm9,%ymm9 vpor %ymm9,%ymm0,%ymm10 vpsllq $32,%ymm5,%ymm5 vpor %ymm5,%ymm1,%ymm11 vpsllq $32,%ymm6,%ymm6 vpor %ymm6,%ymm2,%ymm12 vpsllq $32,%ymm7,%ymm7 vpor %ymm7,%ymm3,%ymm13 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,%ymm10,%ymm0 vpand vecmask32(%rip),%ymm10,%ymm10 vpsrlq $32,%ymm11,%ymm1 vpand vecmask32(%rip),%ymm11,%ymm11 vpsrlq $32,%ymm12,%ymm2 vpand vecmask32(%rip),%ymm12,%ymm12 vpsrlq $32,%ymm13,%ymm3 vpand vecmask32(%rip),%ymm13,%ymm13 // <X2,Z2,X3,Z3> ← Reduce(<X2,Z2,X3,Z3>) vpsrlq $29,%ymm10,%ymm15 vpaddq %ymm15,%ymm11,%ymm11 vpand vecmask29(%rip),%ymm10,%ymm10 vpsrlq $29,%ymm11,%ymm15 vpaddq %ymm15,%ymm12,%ymm12 vpand vecmask29(%rip),%ymm11,%ymm11 vpsrlq $29,%ymm12,%ymm15 vpaddq %ymm15,%ymm13,%ymm13 vpand vecmask29(%rip),%ymm12,%ymm12 vpsrlq $29,%ymm13,%ymm15 vpaddq %ymm15,%ymm0,%ymm0 vpand vecmask29(%rip),%ymm13,%ymm13 vpsrlq $29,%ymm0,%ymm15 vpaddq %ymm15,%ymm1,%ymm1 vpand vecmask29(%rip),%ymm0,%ymm0 vpsrlq $29,%ymm1,%ymm15 vpaddq %ymm15,%ymm2,%ymm2 vpand vecmask29(%rip),%ymm1,%ymm1 vpsrlq $29,%ymm2,%ymm15 vpaddq %ymm15,%ymm3,%ymm3 vpand vecmask29(%rip),%ymm2,%ymm2 vpsrlq $29,%ymm3,%ymm15 vpaddq %ymm15,%ymm4,%ymm4 vpand vecmask29(%rip),%ymm3,%ymm3 vpsrlq $23,%ymm4,%ymm15 vpmuludq vec19(%rip),%ymm15,%ymm15 vpaddq %ymm15,%ymm10,%ymm10 vpand vecmask23(%rip),%ymm4,%ymm4 vpsrlq $29,%ymm10,%ymm15 vpaddq %ymm15,%ymm11,%ymm11 vpand vecmask29(%rip),%ymm10,%ymm10 // store <X2,Z2,X3,Z3> vmovdqa %ymm10,0(%rdi) vmovdqa %ymm11,32(%rdi) vmovdqa %ymm12,64(%rdi) vmovdqa %ymm13,96(%rdi) vmovdqa %ymm0,128(%rdi) vmovdqa %ymm1,160(%rdi) vmovdqa %ymm2,192(%rdi) vmovdqa %ymm3,224(%rdi) vmovdqa %ymm4,256(%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