| #if defined(__x86_64__) && !defined(OPENSSL_NO_ASM) |
| .text |
| |
| .globl rsaz_1024_sqr_avx2 |
| .hidden rsaz_1024_sqr_avx2 |
| .type rsaz_1024_sqr_avx2,@function |
| .align 64 |
| rsaz_1024_sqr_avx2: |
| .cfi_startproc |
| leaq (%rsp),%rax |
| .cfi_def_cfa_register %rax |
| pushq %rbx |
| .cfi_offset %rbx,-16 |
| pushq %rbp |
| .cfi_offset %rbp,-24 |
| pushq %r12 |
| .cfi_offset %r12,-32 |
| pushq %r13 |
| .cfi_offset %r13,-40 |
| pushq %r14 |
| .cfi_offset %r14,-48 |
| pushq %r15 |
| .cfi_offset %r15,-56 |
| vzeroupper |
| movq %rax,%rbp |
| .cfi_def_cfa_register %rbp |
| movq %rdx,%r13 |
| subq $832,%rsp |
| movq %r13,%r15 |
| subq $-128,%rdi |
| subq $-128,%rsi |
| subq $-128,%r13 |
| |
| andq $4095,%r15 |
| addq $320,%r15 |
| shrq $12,%r15 |
| vpxor %ymm9,%ymm9,%ymm9 |
| jz .Lsqr_1024_no_n_copy |
| |
| |
| |
| |
| |
| subq $320,%rsp |
| vmovdqu 0-128(%r13),%ymm0 |
| andq $-2048,%rsp |
| vmovdqu 32-128(%r13),%ymm1 |
| vmovdqu 64-128(%r13),%ymm2 |
| vmovdqu 96-128(%r13),%ymm3 |
| vmovdqu 128-128(%r13),%ymm4 |
| vmovdqu 160-128(%r13),%ymm5 |
| vmovdqu 192-128(%r13),%ymm6 |
| vmovdqu 224-128(%r13),%ymm7 |
| vmovdqu 256-128(%r13),%ymm8 |
| leaq 832+128(%rsp),%r13 |
| vmovdqu %ymm0,0-128(%r13) |
| vmovdqu %ymm1,32-128(%r13) |
| vmovdqu %ymm2,64-128(%r13) |
| vmovdqu %ymm3,96-128(%r13) |
| vmovdqu %ymm4,128-128(%r13) |
| vmovdqu %ymm5,160-128(%r13) |
| vmovdqu %ymm6,192-128(%r13) |
| vmovdqu %ymm7,224-128(%r13) |
| vmovdqu %ymm8,256-128(%r13) |
| vmovdqu %ymm9,288-128(%r13) |
| |
| .Lsqr_1024_no_n_copy: |
| andq $-1024,%rsp |
| |
| vmovdqu 32-128(%rsi),%ymm1 |
| vmovdqu 64-128(%rsi),%ymm2 |
| vmovdqu 96-128(%rsi),%ymm3 |
| vmovdqu 128-128(%rsi),%ymm4 |
| vmovdqu 160-128(%rsi),%ymm5 |
| vmovdqu 192-128(%rsi),%ymm6 |
| vmovdqu 224-128(%rsi),%ymm7 |
| vmovdqu 256-128(%rsi),%ymm8 |
| |
| leaq 192(%rsp),%rbx |
| vmovdqu .Land_mask(%rip),%ymm15 |
| jmp .LOOP_GRANDE_SQR_1024 |
| |
| .align 32 |
| .LOOP_GRANDE_SQR_1024: |
| leaq 576+128(%rsp),%r9 |
| leaq 448(%rsp),%r12 |
| |
| |
| |
| |
| vpaddq %ymm1,%ymm1,%ymm1 |
| vpbroadcastq 0-128(%rsi),%ymm10 |
| vpaddq %ymm2,%ymm2,%ymm2 |
| vmovdqa %ymm1,0-128(%r9) |
| vpaddq %ymm3,%ymm3,%ymm3 |
| vmovdqa %ymm2,32-128(%r9) |
| vpaddq %ymm4,%ymm4,%ymm4 |
| vmovdqa %ymm3,64-128(%r9) |
| vpaddq %ymm5,%ymm5,%ymm5 |
| vmovdqa %ymm4,96-128(%r9) |
| vpaddq %ymm6,%ymm6,%ymm6 |
| vmovdqa %ymm5,128-128(%r9) |
| vpaddq %ymm7,%ymm7,%ymm7 |
| vmovdqa %ymm6,160-128(%r9) |
| vpaddq %ymm8,%ymm8,%ymm8 |
| vmovdqa %ymm7,192-128(%r9) |
| vpxor %ymm9,%ymm9,%ymm9 |
| vmovdqa %ymm8,224-128(%r9) |
| |
| vpmuludq 0-128(%rsi),%ymm10,%ymm0 |
| vpbroadcastq 32-128(%rsi),%ymm11 |
| vmovdqu %ymm9,288-192(%rbx) |
| vpmuludq %ymm10,%ymm1,%ymm1 |
| vmovdqu %ymm9,320-448(%r12) |
| vpmuludq %ymm10,%ymm2,%ymm2 |
| vmovdqu %ymm9,352-448(%r12) |
| vpmuludq %ymm10,%ymm3,%ymm3 |
| vmovdqu %ymm9,384-448(%r12) |
| vpmuludq %ymm10,%ymm4,%ymm4 |
| vmovdqu %ymm9,416-448(%r12) |
| vpmuludq %ymm10,%ymm5,%ymm5 |
| vmovdqu %ymm9,448-448(%r12) |
| vpmuludq %ymm10,%ymm6,%ymm6 |
| vmovdqu %ymm9,480-448(%r12) |
| vpmuludq %ymm10,%ymm7,%ymm7 |
| vmovdqu %ymm9,512-448(%r12) |
| vpmuludq %ymm10,%ymm8,%ymm8 |
| vpbroadcastq 64-128(%rsi),%ymm10 |
| vmovdqu %ymm9,544-448(%r12) |
| |
| movq %rsi,%r15 |
| movl $4,%r14d |
| jmp .Lsqr_entry_1024 |
| .align 32 |
| .LOOP_SQR_1024: |
| vpbroadcastq 32-128(%r15),%ymm11 |
| vpmuludq 0-128(%rsi),%ymm10,%ymm0 |
| vpaddq 0-192(%rbx),%ymm0,%ymm0 |
| vpmuludq 0-128(%r9),%ymm10,%ymm1 |
| vpaddq 32-192(%rbx),%ymm1,%ymm1 |
| vpmuludq 32-128(%r9),%ymm10,%ymm2 |
| vpaddq 64-192(%rbx),%ymm2,%ymm2 |
| vpmuludq 64-128(%r9),%ymm10,%ymm3 |
| vpaddq 96-192(%rbx),%ymm3,%ymm3 |
| vpmuludq 96-128(%r9),%ymm10,%ymm4 |
| vpaddq 128-192(%rbx),%ymm4,%ymm4 |
| vpmuludq 128-128(%r9),%ymm10,%ymm5 |
| vpaddq 160-192(%rbx),%ymm5,%ymm5 |
| vpmuludq 160-128(%r9),%ymm10,%ymm6 |
| vpaddq 192-192(%rbx),%ymm6,%ymm6 |
| vpmuludq 192-128(%r9),%ymm10,%ymm7 |
| vpaddq 224-192(%rbx),%ymm7,%ymm7 |
| vpmuludq 224-128(%r9),%ymm10,%ymm8 |
| vpbroadcastq 64-128(%r15),%ymm10 |
| vpaddq 256-192(%rbx),%ymm8,%ymm8 |
| .Lsqr_entry_1024: |
| vmovdqu %ymm0,0-192(%rbx) |
| vmovdqu %ymm1,32-192(%rbx) |
| |
| vpmuludq 32-128(%rsi),%ymm11,%ymm12 |
| vpaddq %ymm12,%ymm2,%ymm2 |
| vpmuludq 32-128(%r9),%ymm11,%ymm14 |
| vpaddq %ymm14,%ymm3,%ymm3 |
| vpmuludq 64-128(%r9),%ymm11,%ymm13 |
| vpaddq %ymm13,%ymm4,%ymm4 |
| vpmuludq 96-128(%r9),%ymm11,%ymm12 |
| vpaddq %ymm12,%ymm5,%ymm5 |
| vpmuludq 128-128(%r9),%ymm11,%ymm14 |
| vpaddq %ymm14,%ymm6,%ymm6 |
| vpmuludq 160-128(%r9),%ymm11,%ymm13 |
| vpaddq %ymm13,%ymm7,%ymm7 |
| vpmuludq 192-128(%r9),%ymm11,%ymm12 |
| vpaddq %ymm12,%ymm8,%ymm8 |
| vpmuludq 224-128(%r9),%ymm11,%ymm0 |
| vpbroadcastq 96-128(%r15),%ymm11 |
| vpaddq 288-192(%rbx),%ymm0,%ymm0 |
| |
| vmovdqu %ymm2,64-192(%rbx) |
| vmovdqu %ymm3,96-192(%rbx) |
| |
| vpmuludq 64-128(%rsi),%ymm10,%ymm13 |
| vpaddq %ymm13,%ymm4,%ymm4 |
| vpmuludq 64-128(%r9),%ymm10,%ymm12 |
| vpaddq %ymm12,%ymm5,%ymm5 |
| vpmuludq 96-128(%r9),%ymm10,%ymm14 |
| vpaddq %ymm14,%ymm6,%ymm6 |
| vpmuludq 128-128(%r9),%ymm10,%ymm13 |
| vpaddq %ymm13,%ymm7,%ymm7 |
| vpmuludq 160-128(%r9),%ymm10,%ymm12 |
| vpaddq %ymm12,%ymm8,%ymm8 |
| vpmuludq 192-128(%r9),%ymm10,%ymm14 |
| vpaddq %ymm14,%ymm0,%ymm0 |
| vpmuludq 224-128(%r9),%ymm10,%ymm1 |
| vpbroadcastq 128-128(%r15),%ymm10 |
| vpaddq 320-448(%r12),%ymm1,%ymm1 |
| |
| vmovdqu %ymm4,128-192(%rbx) |
| vmovdqu %ymm5,160-192(%rbx) |
| |
| vpmuludq 96-128(%rsi),%ymm11,%ymm12 |
| vpaddq %ymm12,%ymm6,%ymm6 |
| vpmuludq 96-128(%r9),%ymm11,%ymm14 |
| vpaddq %ymm14,%ymm7,%ymm7 |
| vpmuludq 128-128(%r9),%ymm11,%ymm13 |
| vpaddq %ymm13,%ymm8,%ymm8 |
| vpmuludq 160-128(%r9),%ymm11,%ymm12 |
| vpaddq %ymm12,%ymm0,%ymm0 |
| vpmuludq 192-128(%r9),%ymm11,%ymm14 |
| vpaddq %ymm14,%ymm1,%ymm1 |
| vpmuludq 224-128(%r9),%ymm11,%ymm2 |
| vpbroadcastq 160-128(%r15),%ymm11 |
| vpaddq 352-448(%r12),%ymm2,%ymm2 |
| |
| vmovdqu %ymm6,192-192(%rbx) |
| vmovdqu %ymm7,224-192(%rbx) |
| |
| vpmuludq 128-128(%rsi),%ymm10,%ymm12 |
| vpaddq %ymm12,%ymm8,%ymm8 |
| vpmuludq 128-128(%r9),%ymm10,%ymm14 |
| vpaddq %ymm14,%ymm0,%ymm0 |
| vpmuludq 160-128(%r9),%ymm10,%ymm13 |
| vpaddq %ymm13,%ymm1,%ymm1 |
| vpmuludq 192-128(%r9),%ymm10,%ymm12 |
| vpaddq %ymm12,%ymm2,%ymm2 |
| vpmuludq 224-128(%r9),%ymm10,%ymm3 |
| vpbroadcastq 192-128(%r15),%ymm10 |
| vpaddq 384-448(%r12),%ymm3,%ymm3 |
| |
| vmovdqu %ymm8,256-192(%rbx) |
| vmovdqu %ymm0,288-192(%rbx) |
| leaq 8(%rbx),%rbx |
| |
| vpmuludq 160-128(%rsi),%ymm11,%ymm13 |
| vpaddq %ymm13,%ymm1,%ymm1 |
| vpmuludq 160-128(%r9),%ymm11,%ymm12 |
| vpaddq %ymm12,%ymm2,%ymm2 |
| vpmuludq 192-128(%r9),%ymm11,%ymm14 |
| vpaddq %ymm14,%ymm3,%ymm3 |
| vpmuludq 224-128(%r9),%ymm11,%ymm4 |
| vpbroadcastq 224-128(%r15),%ymm11 |
| vpaddq 416-448(%r12),%ymm4,%ymm4 |
| |
| vmovdqu %ymm1,320-448(%r12) |
| vmovdqu %ymm2,352-448(%r12) |
| |
| vpmuludq 192-128(%rsi),%ymm10,%ymm12 |
| vpaddq %ymm12,%ymm3,%ymm3 |
| vpmuludq 192-128(%r9),%ymm10,%ymm14 |
| vpbroadcastq 256-128(%r15),%ymm0 |
| vpaddq %ymm14,%ymm4,%ymm4 |
| vpmuludq 224-128(%r9),%ymm10,%ymm5 |
| vpbroadcastq 0+8-128(%r15),%ymm10 |
| vpaddq 448-448(%r12),%ymm5,%ymm5 |
| |
| vmovdqu %ymm3,384-448(%r12) |
| vmovdqu %ymm4,416-448(%r12) |
| leaq 8(%r15),%r15 |
| |
| vpmuludq 224-128(%rsi),%ymm11,%ymm12 |
| vpaddq %ymm12,%ymm5,%ymm5 |
| vpmuludq 224-128(%r9),%ymm11,%ymm6 |
| vpaddq 480-448(%r12),%ymm6,%ymm6 |
| |
| vpmuludq 256-128(%rsi),%ymm0,%ymm7 |
| vmovdqu %ymm5,448-448(%r12) |
| vpaddq 512-448(%r12),%ymm7,%ymm7 |
| vmovdqu %ymm6,480-448(%r12) |
| vmovdqu %ymm7,512-448(%r12) |
| leaq 8(%r12),%r12 |
| |
| decl %r14d |
| jnz .LOOP_SQR_1024 |
| |
| vmovdqu 256(%rsp),%ymm8 |
| vmovdqu 288(%rsp),%ymm1 |
| vmovdqu 320(%rsp),%ymm2 |
| leaq 192(%rsp),%rbx |
| |
| vpsrlq $29,%ymm8,%ymm14 |
| vpand %ymm15,%ymm8,%ymm8 |
| vpsrlq $29,%ymm1,%ymm11 |
| vpand %ymm15,%ymm1,%ymm1 |
| |
| vpermq $0x93,%ymm14,%ymm14 |
| vpxor %ymm9,%ymm9,%ymm9 |
| vpermq $0x93,%ymm11,%ymm11 |
| |
| vpblendd $3,%ymm9,%ymm14,%ymm10 |
| vpblendd $3,%ymm14,%ymm11,%ymm14 |
| vpaddq %ymm10,%ymm8,%ymm8 |
| vpblendd $3,%ymm11,%ymm9,%ymm11 |
| vpaddq %ymm14,%ymm1,%ymm1 |
| vpaddq %ymm11,%ymm2,%ymm2 |
| vmovdqu %ymm1,288-192(%rbx) |
| vmovdqu %ymm2,320-192(%rbx) |
| |
| movq (%rsp),%rax |
| movq 8(%rsp),%r10 |
| movq 16(%rsp),%r11 |
| movq 24(%rsp),%r12 |
| vmovdqu 32(%rsp),%ymm1 |
| vmovdqu 64-192(%rbx),%ymm2 |
| vmovdqu 96-192(%rbx),%ymm3 |
| vmovdqu 128-192(%rbx),%ymm4 |
| vmovdqu 160-192(%rbx),%ymm5 |
| vmovdqu 192-192(%rbx),%ymm6 |
| vmovdqu 224-192(%rbx),%ymm7 |
| |
| movq %rax,%r9 |
| imull %ecx,%eax |
| andl $0x1fffffff,%eax |
| vmovd %eax,%xmm12 |
| |
| movq %rax,%rdx |
| imulq -128(%r13),%rax |
| vpbroadcastq %xmm12,%ymm12 |
| addq %rax,%r9 |
| movq %rdx,%rax |
| imulq 8-128(%r13),%rax |
| shrq $29,%r9 |
| addq %rax,%r10 |
| movq %rdx,%rax |
| imulq 16-128(%r13),%rax |
| addq %r9,%r10 |
| addq %rax,%r11 |
| imulq 24-128(%r13),%rdx |
| addq %rdx,%r12 |
| |
| movq %r10,%rax |
| imull %ecx,%eax |
| andl $0x1fffffff,%eax |
| |
| movl $9,%r14d |
| jmp .LOOP_REDUCE_1024 |
| |
| .align 32 |
| .LOOP_REDUCE_1024: |
| vmovd %eax,%xmm13 |
| vpbroadcastq %xmm13,%ymm13 |
| |
| vpmuludq 32-128(%r13),%ymm12,%ymm10 |
| movq %rax,%rdx |
| imulq -128(%r13),%rax |
| vpaddq %ymm10,%ymm1,%ymm1 |
| addq %rax,%r10 |
| vpmuludq 64-128(%r13),%ymm12,%ymm14 |
| movq %rdx,%rax |
| imulq 8-128(%r13),%rax |
| vpaddq %ymm14,%ymm2,%ymm2 |
| vpmuludq 96-128(%r13),%ymm12,%ymm11 |
| .byte 0x67 |
| addq %rax,%r11 |
| .byte 0x67 |
| movq %rdx,%rax |
| imulq 16-128(%r13),%rax |
| shrq $29,%r10 |
| vpaddq %ymm11,%ymm3,%ymm3 |
| vpmuludq 128-128(%r13),%ymm12,%ymm10 |
| addq %rax,%r12 |
| addq %r10,%r11 |
| vpaddq %ymm10,%ymm4,%ymm4 |
| vpmuludq 160-128(%r13),%ymm12,%ymm14 |
| movq %r11,%rax |
| imull %ecx,%eax |
| vpaddq %ymm14,%ymm5,%ymm5 |
| vpmuludq 192-128(%r13),%ymm12,%ymm11 |
| andl $0x1fffffff,%eax |
| vpaddq %ymm11,%ymm6,%ymm6 |
| vpmuludq 224-128(%r13),%ymm12,%ymm10 |
| vpaddq %ymm10,%ymm7,%ymm7 |
| vpmuludq 256-128(%r13),%ymm12,%ymm14 |
| vmovd %eax,%xmm12 |
| |
| vpaddq %ymm14,%ymm8,%ymm8 |
| |
| vpbroadcastq %xmm12,%ymm12 |
| |
| vpmuludq 32-8-128(%r13),%ymm13,%ymm11 |
| vmovdqu 96-8-128(%r13),%ymm14 |
| movq %rax,%rdx |
| imulq -128(%r13),%rax |
| vpaddq %ymm11,%ymm1,%ymm1 |
| vpmuludq 64-8-128(%r13),%ymm13,%ymm10 |
| vmovdqu 128-8-128(%r13),%ymm11 |
| addq %rax,%r11 |
| movq %rdx,%rax |
| imulq 8-128(%r13),%rax |
| vpaddq %ymm10,%ymm2,%ymm2 |
| addq %r12,%rax |
| shrq $29,%r11 |
| vpmuludq %ymm13,%ymm14,%ymm14 |
| vmovdqu 160-8-128(%r13),%ymm10 |
| addq %r11,%rax |
| vpaddq %ymm14,%ymm3,%ymm3 |
| vpmuludq %ymm13,%ymm11,%ymm11 |
| vmovdqu 192-8-128(%r13),%ymm14 |
| .byte 0x67 |
| movq %rax,%r12 |
| imull %ecx,%eax |
| vpaddq %ymm11,%ymm4,%ymm4 |
| vpmuludq %ymm13,%ymm10,%ymm10 |
| .byte 0xc4,0x41,0x7e,0x6f,0x9d,0x58,0x00,0x00,0x00 |
| andl $0x1fffffff,%eax |
| vpaddq %ymm10,%ymm5,%ymm5 |
| vpmuludq %ymm13,%ymm14,%ymm14 |
| vmovdqu 256-8-128(%r13),%ymm10 |
| vpaddq %ymm14,%ymm6,%ymm6 |
| vpmuludq %ymm13,%ymm11,%ymm11 |
| vmovdqu 288-8-128(%r13),%ymm9 |
| vmovd %eax,%xmm0 |
| imulq -128(%r13),%rax |
| vpaddq %ymm11,%ymm7,%ymm7 |
| vpmuludq %ymm13,%ymm10,%ymm10 |
| vmovdqu 32-16-128(%r13),%ymm14 |
| vpbroadcastq %xmm0,%ymm0 |
| vpaddq %ymm10,%ymm8,%ymm8 |
| vpmuludq %ymm13,%ymm9,%ymm9 |
| vmovdqu 64-16-128(%r13),%ymm11 |
| addq %rax,%r12 |
| |
| vmovdqu 32-24-128(%r13),%ymm13 |
| vpmuludq %ymm12,%ymm14,%ymm14 |
| vmovdqu 96-16-128(%r13),%ymm10 |
| vpaddq %ymm14,%ymm1,%ymm1 |
| vpmuludq %ymm0,%ymm13,%ymm13 |
| vpmuludq %ymm12,%ymm11,%ymm11 |
| .byte 0xc4,0x41,0x7e,0x6f,0xb5,0xf0,0xff,0xff,0xff |
| vpaddq %ymm1,%ymm13,%ymm13 |
| vpaddq %ymm11,%ymm2,%ymm2 |
| vpmuludq %ymm12,%ymm10,%ymm10 |
| vmovdqu 160-16-128(%r13),%ymm11 |
| .byte 0x67 |
| vmovq %xmm13,%rax |
| vmovdqu %ymm13,(%rsp) |
| vpaddq %ymm10,%ymm3,%ymm3 |
| vpmuludq %ymm12,%ymm14,%ymm14 |
| vmovdqu 192-16-128(%r13),%ymm10 |
| vpaddq %ymm14,%ymm4,%ymm4 |
| vpmuludq %ymm12,%ymm11,%ymm11 |
| vmovdqu 224-16-128(%r13),%ymm14 |
| vpaddq %ymm11,%ymm5,%ymm5 |
| vpmuludq %ymm12,%ymm10,%ymm10 |
| vmovdqu 256-16-128(%r13),%ymm11 |
| vpaddq %ymm10,%ymm6,%ymm6 |
| vpmuludq %ymm12,%ymm14,%ymm14 |
| shrq $29,%r12 |
| vmovdqu 288-16-128(%r13),%ymm10 |
| addq %r12,%rax |
| vpaddq %ymm14,%ymm7,%ymm7 |
| vpmuludq %ymm12,%ymm11,%ymm11 |
| |
| movq %rax,%r9 |
| imull %ecx,%eax |
| vpaddq %ymm11,%ymm8,%ymm8 |
| vpmuludq %ymm12,%ymm10,%ymm10 |
| andl $0x1fffffff,%eax |
| vmovd %eax,%xmm12 |
| vmovdqu 96-24-128(%r13),%ymm11 |
| .byte 0x67 |
| vpaddq %ymm10,%ymm9,%ymm9 |
| vpbroadcastq %xmm12,%ymm12 |
| |
| vpmuludq 64-24-128(%r13),%ymm0,%ymm14 |
| vmovdqu 128-24-128(%r13),%ymm10 |
| movq %rax,%rdx |
| imulq -128(%r13),%rax |
| movq 8(%rsp),%r10 |
| vpaddq %ymm14,%ymm2,%ymm1 |
| vpmuludq %ymm0,%ymm11,%ymm11 |
| vmovdqu 160-24-128(%r13),%ymm14 |
| addq %rax,%r9 |
| movq %rdx,%rax |
| imulq 8-128(%r13),%rax |
| .byte 0x67 |
| shrq $29,%r9 |
| movq 16(%rsp),%r11 |
| vpaddq %ymm11,%ymm3,%ymm2 |
| vpmuludq %ymm0,%ymm10,%ymm10 |
| vmovdqu 192-24-128(%r13),%ymm11 |
| addq %rax,%r10 |
| movq %rdx,%rax |
| imulq 16-128(%r13),%rax |
| vpaddq %ymm10,%ymm4,%ymm3 |
| vpmuludq %ymm0,%ymm14,%ymm14 |
| vmovdqu 224-24-128(%r13),%ymm10 |
| imulq 24-128(%r13),%rdx |
| addq %rax,%r11 |
| leaq (%r9,%r10,1),%rax |
| vpaddq %ymm14,%ymm5,%ymm4 |
| vpmuludq %ymm0,%ymm11,%ymm11 |
| vmovdqu 256-24-128(%r13),%ymm14 |
| movq %rax,%r10 |
| imull %ecx,%eax |
| vpmuludq %ymm0,%ymm10,%ymm10 |
| vpaddq %ymm11,%ymm6,%ymm5 |
| vmovdqu 288-24-128(%r13),%ymm11 |
| andl $0x1fffffff,%eax |
| vpaddq %ymm10,%ymm7,%ymm6 |
| vpmuludq %ymm0,%ymm14,%ymm14 |
| addq 24(%rsp),%rdx |
| vpaddq %ymm14,%ymm8,%ymm7 |
| vpmuludq %ymm0,%ymm11,%ymm11 |
| vpaddq %ymm11,%ymm9,%ymm8 |
| vmovq %r12,%xmm9 |
| movq %rdx,%r12 |
| |
| decl %r14d |
| jnz .LOOP_REDUCE_1024 |
| leaq 448(%rsp),%r12 |
| vpaddq %ymm9,%ymm13,%ymm0 |
| vpxor %ymm9,%ymm9,%ymm9 |
| |
| vpaddq 288-192(%rbx),%ymm0,%ymm0 |
| vpaddq 320-448(%r12),%ymm1,%ymm1 |
| vpaddq 352-448(%r12),%ymm2,%ymm2 |
| vpaddq 384-448(%r12),%ymm3,%ymm3 |
| vpaddq 416-448(%r12),%ymm4,%ymm4 |
| vpaddq 448-448(%r12),%ymm5,%ymm5 |
| vpaddq 480-448(%r12),%ymm6,%ymm6 |
| vpaddq 512-448(%r12),%ymm7,%ymm7 |
| vpaddq 544-448(%r12),%ymm8,%ymm8 |
| |
| vpsrlq $29,%ymm0,%ymm14 |
| vpand %ymm15,%ymm0,%ymm0 |
| vpsrlq $29,%ymm1,%ymm11 |
| vpand %ymm15,%ymm1,%ymm1 |
| vpsrlq $29,%ymm2,%ymm12 |
| vpermq $0x93,%ymm14,%ymm14 |
| vpand %ymm15,%ymm2,%ymm2 |
| vpsrlq $29,%ymm3,%ymm13 |
| vpermq $0x93,%ymm11,%ymm11 |
| vpand %ymm15,%ymm3,%ymm3 |
| vpermq $0x93,%ymm12,%ymm12 |
| |
| vpblendd $3,%ymm9,%ymm14,%ymm10 |
| vpermq $0x93,%ymm13,%ymm13 |
| vpblendd $3,%ymm14,%ymm11,%ymm14 |
| vpaddq %ymm10,%ymm0,%ymm0 |
| vpblendd $3,%ymm11,%ymm12,%ymm11 |
| vpaddq %ymm14,%ymm1,%ymm1 |
| vpblendd $3,%ymm12,%ymm13,%ymm12 |
| vpaddq %ymm11,%ymm2,%ymm2 |
| vpblendd $3,%ymm13,%ymm9,%ymm13 |
| vpaddq %ymm12,%ymm3,%ymm3 |
| vpaddq %ymm13,%ymm4,%ymm4 |
| |
| vpsrlq $29,%ymm0,%ymm14 |
| vpand %ymm15,%ymm0,%ymm0 |
| vpsrlq $29,%ymm1,%ymm11 |
| vpand %ymm15,%ymm1,%ymm1 |
| vpsrlq $29,%ymm2,%ymm12 |
| vpermq $0x93,%ymm14,%ymm14 |
| vpand %ymm15,%ymm2,%ymm2 |
| vpsrlq $29,%ymm3,%ymm13 |
| vpermq $0x93,%ymm11,%ymm11 |
| vpand %ymm15,%ymm3,%ymm3 |
| vpermq $0x93,%ymm12,%ymm12 |
| |
| vpblendd $3,%ymm9,%ymm14,%ymm10 |
| vpermq $0x93,%ymm13,%ymm13 |
| vpblendd $3,%ymm14,%ymm11,%ymm14 |
| vpaddq %ymm10,%ymm0,%ymm0 |
| vpblendd $3,%ymm11,%ymm12,%ymm11 |
| vpaddq %ymm14,%ymm1,%ymm1 |
| vmovdqu %ymm0,0-128(%rdi) |
| vpblendd $3,%ymm12,%ymm13,%ymm12 |
| vpaddq %ymm11,%ymm2,%ymm2 |
| vmovdqu %ymm1,32-128(%rdi) |
| vpblendd $3,%ymm13,%ymm9,%ymm13 |
| vpaddq %ymm12,%ymm3,%ymm3 |
| vmovdqu %ymm2,64-128(%rdi) |
| vpaddq %ymm13,%ymm4,%ymm4 |
| vmovdqu %ymm3,96-128(%rdi) |
| vpsrlq $29,%ymm4,%ymm14 |
| vpand %ymm15,%ymm4,%ymm4 |
| vpsrlq $29,%ymm5,%ymm11 |
| vpand %ymm15,%ymm5,%ymm5 |
| vpsrlq $29,%ymm6,%ymm12 |
| vpermq $0x93,%ymm14,%ymm14 |
| vpand %ymm15,%ymm6,%ymm6 |
| vpsrlq $29,%ymm7,%ymm13 |
| vpermq $0x93,%ymm11,%ymm11 |
| vpand %ymm15,%ymm7,%ymm7 |
| vpsrlq $29,%ymm8,%ymm0 |
| vpermq $0x93,%ymm12,%ymm12 |
| vpand %ymm15,%ymm8,%ymm8 |
| vpermq $0x93,%ymm13,%ymm13 |
| |
| vpblendd $3,%ymm9,%ymm14,%ymm10 |
| vpermq $0x93,%ymm0,%ymm0 |
| vpblendd $3,%ymm14,%ymm11,%ymm14 |
| vpaddq %ymm10,%ymm4,%ymm4 |
| vpblendd $3,%ymm11,%ymm12,%ymm11 |
| vpaddq %ymm14,%ymm5,%ymm5 |
| vpblendd $3,%ymm12,%ymm13,%ymm12 |
| vpaddq %ymm11,%ymm6,%ymm6 |
| vpblendd $3,%ymm13,%ymm0,%ymm13 |
| vpaddq %ymm12,%ymm7,%ymm7 |
| vpaddq %ymm13,%ymm8,%ymm8 |
| |
| vpsrlq $29,%ymm4,%ymm14 |
| vpand %ymm15,%ymm4,%ymm4 |
| vpsrlq $29,%ymm5,%ymm11 |
| vpand %ymm15,%ymm5,%ymm5 |
| vpsrlq $29,%ymm6,%ymm12 |
| vpermq $0x93,%ymm14,%ymm14 |
| vpand %ymm15,%ymm6,%ymm6 |
| vpsrlq $29,%ymm7,%ymm13 |
| vpermq $0x93,%ymm11,%ymm11 |
| vpand %ymm15,%ymm7,%ymm7 |
| vpsrlq $29,%ymm8,%ymm0 |
| vpermq $0x93,%ymm12,%ymm12 |
| vpand %ymm15,%ymm8,%ymm8 |
| vpermq $0x93,%ymm13,%ymm13 |
| |
| vpblendd $3,%ymm9,%ymm14,%ymm10 |
| vpermq $0x93,%ymm0,%ymm0 |
| vpblendd $3,%ymm14,%ymm11,%ymm14 |
| vpaddq %ymm10,%ymm4,%ymm4 |
| vpblendd $3,%ymm11,%ymm12,%ymm11 |
| vpaddq %ymm14,%ymm5,%ymm5 |
| vmovdqu %ymm4,128-128(%rdi) |
| vpblendd $3,%ymm12,%ymm13,%ymm12 |
| vpaddq %ymm11,%ymm6,%ymm6 |
| vmovdqu %ymm5,160-128(%rdi) |
| vpblendd $3,%ymm13,%ymm0,%ymm13 |
| vpaddq %ymm12,%ymm7,%ymm7 |
| vmovdqu %ymm6,192-128(%rdi) |
| vpaddq %ymm13,%ymm8,%ymm8 |
| vmovdqu %ymm7,224-128(%rdi) |
| vmovdqu %ymm8,256-128(%rdi) |
| |
| movq %rdi,%rsi |
| decl %r8d |
| jne .LOOP_GRANDE_SQR_1024 |
| |
| vzeroall |
| movq %rbp,%rax |
| .cfi_def_cfa_register %rax |
| movq -48(%rax),%r15 |
| .cfi_restore %r15 |
| movq -40(%rax),%r14 |
| .cfi_restore %r14 |
| movq -32(%rax),%r13 |
| .cfi_restore %r13 |
| movq -24(%rax),%r12 |
| .cfi_restore %r12 |
| movq -16(%rax),%rbp |
| .cfi_restore %rbp |
| movq -8(%rax),%rbx |
| .cfi_restore %rbx |
| leaq (%rax),%rsp |
| .cfi_def_cfa_register %rsp |
| .Lsqr_1024_epilogue: |
| .byte 0xf3,0xc3 |
| .cfi_endproc |
| .size rsaz_1024_sqr_avx2,.-rsaz_1024_sqr_avx2 |
| .globl rsaz_1024_mul_avx2 |
| .hidden rsaz_1024_mul_avx2 |
| .type rsaz_1024_mul_avx2,@function |
| .align 64 |
| rsaz_1024_mul_avx2: |
| .cfi_startproc |
| leaq (%rsp),%rax |
| .cfi_def_cfa_register %rax |
| pushq %rbx |
| .cfi_offset %rbx,-16 |
| pushq %rbp |
| .cfi_offset %rbp,-24 |
| pushq %r12 |
| .cfi_offset %r12,-32 |
| pushq %r13 |
| .cfi_offset %r13,-40 |
| pushq %r14 |
| .cfi_offset %r14,-48 |
| pushq %r15 |
| .cfi_offset %r15,-56 |
| movq %rax,%rbp |
| .cfi_def_cfa_register %rbp |
| vzeroall |
| movq %rdx,%r13 |
| subq $64,%rsp |
| |
| |
| |
| |
| |
| |
| .byte 0x67,0x67 |
| movq %rsi,%r15 |
| andq $4095,%r15 |
| addq $320,%r15 |
| shrq $12,%r15 |
| movq %rsi,%r15 |
| cmovnzq %r13,%rsi |
| cmovnzq %r15,%r13 |
| |
| movq %rcx,%r15 |
| subq $-128,%rsi |
| subq $-128,%rcx |
| subq $-128,%rdi |
| |
| andq $4095,%r15 |
| addq $320,%r15 |
| .byte 0x67,0x67 |
| shrq $12,%r15 |
| jz .Lmul_1024_no_n_copy |
| |
| |
| |
| |
| |
| subq $320,%rsp |
| vmovdqu 0-128(%rcx),%ymm0 |
| andq $-512,%rsp |
| vmovdqu 32-128(%rcx),%ymm1 |
| vmovdqu 64-128(%rcx),%ymm2 |
| vmovdqu 96-128(%rcx),%ymm3 |
| vmovdqu 128-128(%rcx),%ymm4 |
| vmovdqu 160-128(%rcx),%ymm5 |
| vmovdqu 192-128(%rcx),%ymm6 |
| vmovdqu 224-128(%rcx),%ymm7 |
| vmovdqu 256-128(%rcx),%ymm8 |
| leaq 64+128(%rsp),%rcx |
| vmovdqu %ymm0,0-128(%rcx) |
| vpxor %ymm0,%ymm0,%ymm0 |
| vmovdqu %ymm1,32-128(%rcx) |
| vpxor %ymm1,%ymm1,%ymm1 |
| vmovdqu %ymm2,64-128(%rcx) |
| vpxor %ymm2,%ymm2,%ymm2 |
| vmovdqu %ymm3,96-128(%rcx) |
| vpxor %ymm3,%ymm3,%ymm3 |
| vmovdqu %ymm4,128-128(%rcx) |
| vpxor %ymm4,%ymm4,%ymm4 |
| vmovdqu %ymm5,160-128(%rcx) |
| vpxor %ymm5,%ymm5,%ymm5 |
| vmovdqu %ymm6,192-128(%rcx) |
| vpxor %ymm6,%ymm6,%ymm6 |
| vmovdqu %ymm7,224-128(%rcx) |
| vpxor %ymm7,%ymm7,%ymm7 |
| vmovdqu %ymm8,256-128(%rcx) |
| vmovdqa %ymm0,%ymm8 |
| vmovdqu %ymm9,288-128(%rcx) |
| .Lmul_1024_no_n_copy: |
| andq $-64,%rsp |
| |
| movq (%r13),%rbx |
| vpbroadcastq (%r13),%ymm10 |
| vmovdqu %ymm0,(%rsp) |
| xorq %r9,%r9 |
| .byte 0x67 |
| xorq %r10,%r10 |
| xorq %r11,%r11 |
| xorq %r12,%r12 |
| |
| vmovdqu .Land_mask(%rip),%ymm15 |
| movl $9,%r14d |
| vmovdqu %ymm9,288-128(%rdi) |
| jmp .Loop_mul_1024 |
| |
| .align 32 |
| .Loop_mul_1024: |
| vpsrlq $29,%ymm3,%ymm9 |
| movq %rbx,%rax |
| imulq -128(%rsi),%rax |
| addq %r9,%rax |
| movq %rbx,%r10 |
| imulq 8-128(%rsi),%r10 |
| addq 8(%rsp),%r10 |
| |
| movq %rax,%r9 |
| imull %r8d,%eax |
| andl $0x1fffffff,%eax |
| |
| movq %rbx,%r11 |
| imulq 16-128(%rsi),%r11 |
| addq 16(%rsp),%r11 |
| |
| movq %rbx,%r12 |
| imulq 24-128(%rsi),%r12 |
| addq 24(%rsp),%r12 |
| vpmuludq 32-128(%rsi),%ymm10,%ymm0 |
| vmovd %eax,%xmm11 |
| vpaddq %ymm0,%ymm1,%ymm1 |
| vpmuludq 64-128(%rsi),%ymm10,%ymm12 |
| vpbroadcastq %xmm11,%ymm11 |
| vpaddq %ymm12,%ymm2,%ymm2 |
| vpmuludq 96-128(%rsi),%ymm10,%ymm13 |
| vpand %ymm15,%ymm3,%ymm3 |
| vpaddq %ymm13,%ymm3,%ymm3 |
| vpmuludq 128-128(%rsi),%ymm10,%ymm0 |
| vpaddq %ymm0,%ymm4,%ymm4 |
| vpmuludq 160-128(%rsi),%ymm10,%ymm12 |
| vpaddq %ymm12,%ymm5,%ymm5 |
| vpmuludq 192-128(%rsi),%ymm10,%ymm13 |
| vpaddq %ymm13,%ymm6,%ymm6 |
| vpmuludq 224-128(%rsi),%ymm10,%ymm0 |
| vpermq $0x93,%ymm9,%ymm9 |
| vpaddq %ymm0,%ymm7,%ymm7 |
| vpmuludq 256-128(%rsi),%ymm10,%ymm12 |
| vpbroadcastq 8(%r13),%ymm10 |
| vpaddq %ymm12,%ymm8,%ymm8 |
| |
| movq %rax,%rdx |
| imulq -128(%rcx),%rax |
| addq %rax,%r9 |
| movq %rdx,%rax |
| imulq 8-128(%rcx),%rax |
| addq %rax,%r10 |
| movq %rdx,%rax |
| imulq 16-128(%rcx),%rax |
| addq %rax,%r11 |
| shrq $29,%r9 |
| imulq 24-128(%rcx),%rdx |
| addq %rdx,%r12 |
| addq %r9,%r10 |
| |
| vpmuludq 32-128(%rcx),%ymm11,%ymm13 |
| vmovq %xmm10,%rbx |
| vpaddq %ymm13,%ymm1,%ymm1 |
| vpmuludq 64-128(%rcx),%ymm11,%ymm0 |
| vpaddq %ymm0,%ymm2,%ymm2 |
| vpmuludq 96-128(%rcx),%ymm11,%ymm12 |
| vpaddq %ymm12,%ymm3,%ymm3 |
| vpmuludq 128-128(%rcx),%ymm11,%ymm13 |
| vpaddq %ymm13,%ymm4,%ymm4 |
| vpmuludq 160-128(%rcx),%ymm11,%ymm0 |
| vpaddq %ymm0,%ymm5,%ymm5 |
| vpmuludq 192-128(%rcx),%ymm11,%ymm12 |
| vpaddq %ymm12,%ymm6,%ymm6 |
| vpmuludq 224-128(%rcx),%ymm11,%ymm13 |
| vpblendd $3,%ymm14,%ymm9,%ymm12 |
| vpaddq %ymm13,%ymm7,%ymm7 |
| vpmuludq 256-128(%rcx),%ymm11,%ymm0 |
| vpaddq %ymm12,%ymm3,%ymm3 |
| vpaddq %ymm0,%ymm8,%ymm8 |
| |
| movq %rbx,%rax |
| imulq -128(%rsi),%rax |
| addq %rax,%r10 |
| vmovdqu -8+32-128(%rsi),%ymm12 |
| movq %rbx,%rax |
| imulq 8-128(%rsi),%rax |
| addq %rax,%r11 |
| vmovdqu -8+64-128(%rsi),%ymm13 |
| |
| movq %r10,%rax |
| vpblendd $0xfc,%ymm14,%ymm9,%ymm9 |
| imull %r8d,%eax |
| vpaddq %ymm9,%ymm4,%ymm4 |
| andl $0x1fffffff,%eax |
| |
| imulq 16-128(%rsi),%rbx |
| addq %rbx,%r12 |
| vpmuludq %ymm10,%ymm12,%ymm12 |
| vmovd %eax,%xmm11 |
| vmovdqu -8+96-128(%rsi),%ymm0 |
| vpaddq %ymm12,%ymm1,%ymm1 |
| vpmuludq %ymm10,%ymm13,%ymm13 |
| vpbroadcastq %xmm11,%ymm11 |
| vmovdqu -8+128-128(%rsi),%ymm12 |
| vpaddq %ymm13,%ymm2,%ymm2 |
| vpmuludq %ymm10,%ymm0,%ymm0 |
| vmovdqu -8+160-128(%rsi),%ymm13 |
| vpaddq %ymm0,%ymm3,%ymm3 |
| vpmuludq %ymm10,%ymm12,%ymm12 |
| vmovdqu -8+192-128(%rsi),%ymm0 |
| vpaddq %ymm12,%ymm4,%ymm4 |
| vpmuludq %ymm10,%ymm13,%ymm13 |
| vmovdqu -8+224-128(%rsi),%ymm12 |
| vpaddq %ymm13,%ymm5,%ymm5 |
| vpmuludq %ymm10,%ymm0,%ymm0 |
| vmovdqu -8+256-128(%rsi),%ymm13 |
| vpaddq %ymm0,%ymm6,%ymm6 |
| vpmuludq %ymm10,%ymm12,%ymm12 |
| vmovdqu -8+288-128(%rsi),%ymm9 |
| vpaddq %ymm12,%ymm7,%ymm7 |
| vpmuludq %ymm10,%ymm13,%ymm13 |
| vpaddq %ymm13,%ymm8,%ymm8 |
| vpmuludq %ymm10,%ymm9,%ymm9 |
| vpbroadcastq 16(%r13),%ymm10 |
| |
| movq %rax,%rdx |
| imulq -128(%rcx),%rax |
| addq %rax,%r10 |
| vmovdqu -8+32-128(%rcx),%ymm0 |
| movq %rdx,%rax |
| imulq 8-128(%rcx),%rax |
| addq %rax,%r11 |
| vmovdqu -8+64-128(%rcx),%ymm12 |
| shrq $29,%r10 |
| imulq 16-128(%rcx),%rdx |
| addq %rdx,%r12 |
| addq %r10,%r11 |
| |
| vpmuludq %ymm11,%ymm0,%ymm0 |
| vmovq %xmm10,%rbx |
| vmovdqu -8+96-128(%rcx),%ymm13 |
| vpaddq %ymm0,%ymm1,%ymm1 |
| vpmuludq %ymm11,%ymm12,%ymm12 |
| vmovdqu -8+128-128(%rcx),%ymm0 |
| vpaddq %ymm12,%ymm2,%ymm2 |
| vpmuludq %ymm11,%ymm13,%ymm13 |
| vmovdqu -8+160-128(%rcx),%ymm12 |
| vpaddq %ymm13,%ymm3,%ymm3 |
| vpmuludq %ymm11,%ymm0,%ymm0 |
| vmovdqu -8+192-128(%rcx),%ymm13 |
| vpaddq %ymm0,%ymm4,%ymm4 |
| vpmuludq %ymm11,%ymm12,%ymm12 |
| vmovdqu -8+224-128(%rcx),%ymm0 |
| vpaddq %ymm12,%ymm5,%ymm5 |
| vpmuludq %ymm11,%ymm13,%ymm13 |
| vmovdqu -8+256-128(%rcx),%ymm12 |
| vpaddq %ymm13,%ymm6,%ymm6 |
| vpmuludq %ymm11,%ymm0,%ymm0 |
| vmovdqu -8+288-128(%rcx),%ymm13 |
| vpaddq %ymm0,%ymm7,%ymm7 |
| vpmuludq %ymm11,%ymm12,%ymm12 |
| vpaddq %ymm12,%ymm8,%ymm8 |
| vpmuludq %ymm11,%ymm13,%ymm13 |
| vpaddq %ymm13,%ymm9,%ymm9 |
| |
| vmovdqu -16+32-128(%rsi),%ymm0 |
| movq %rbx,%rax |
| imulq -128(%rsi),%rax |
| addq %r11,%rax |
| |
| vmovdqu -16+64-128(%rsi),%ymm12 |
| movq %rax,%r11 |
| imull %r8d,%eax |
| andl $0x1fffffff,%eax |
| |
| imulq 8-128(%rsi),%rbx |
| addq %rbx,%r12 |
| vpmuludq %ymm10,%ymm0,%ymm0 |
| vmovd %eax,%xmm11 |
| vmovdqu -16+96-128(%rsi),%ymm13 |
| vpaddq %ymm0,%ymm1,%ymm1 |
| vpmuludq %ymm10,%ymm12,%ymm12 |
| vpbroadcastq %xmm11,%ymm11 |
| vmovdqu -16+128-128(%rsi),%ymm0 |
| vpaddq %ymm12,%ymm2,%ymm2 |
| vpmuludq %ymm10,%ymm13,%ymm13 |
| vmovdqu -16+160-128(%rsi),%ymm12 |
| vpaddq %ymm13,%ymm3,%ymm3 |
| vpmuludq %ymm10,%ymm0,%ymm0 |
| vmovdqu -16+192-128(%rsi),%ymm13 |
| vpaddq %ymm0,%ymm4,%ymm4 |
| vpmuludq %ymm10,%ymm12,%ymm12 |
| vmovdqu -16+224-128(%rsi),%ymm0 |
| vpaddq %ymm12,%ymm5,%ymm5 |
| vpmuludq %ymm10,%ymm13,%ymm13 |
| vmovdqu -16+256-128(%rsi),%ymm12 |
| vpaddq %ymm13,%ymm6,%ymm6 |
| vpmuludq %ymm10,%ymm0,%ymm0 |
| vmovdqu -16+288-128(%rsi),%ymm13 |
| vpaddq %ymm0,%ymm7,%ymm7 |
| vpmuludq %ymm10,%ymm12,%ymm12 |
| vpaddq %ymm12,%ymm8,%ymm8 |
| vpmuludq %ymm10,%ymm13,%ymm13 |
| vpbroadcastq 24(%r13),%ymm10 |
| vpaddq %ymm13,%ymm9,%ymm9 |
| |
| vmovdqu -16+32-128(%rcx),%ymm0 |
| movq %rax,%rdx |
| imulq -128(%rcx),%rax |
| addq %rax,%r11 |
| vmovdqu -16+64-128(%rcx),%ymm12 |
| imulq 8-128(%rcx),%rdx |
| addq %rdx,%r12 |
| shrq $29,%r11 |
| |
| vpmuludq %ymm11,%ymm0,%ymm0 |
| vmovq %xmm10,%rbx |
| vmovdqu -16+96-128(%rcx),%ymm13 |
| vpaddq %ymm0,%ymm1,%ymm1 |
| vpmuludq %ymm11,%ymm12,%ymm12 |
| vmovdqu -16+128-128(%rcx),%ymm0 |
| vpaddq %ymm12,%ymm2,%ymm2 |
| vpmuludq %ymm11,%ymm13,%ymm13 |
| vmovdqu -16+160-128(%rcx),%ymm12 |
| vpaddq %ymm13,%ymm3,%ymm3 |
| vpmuludq %ymm11,%ymm0,%ymm0 |
| vmovdqu -16+192-128(%rcx),%ymm13 |
| vpaddq %ymm0,%ymm4,%ymm4 |
| vpmuludq %ymm11,%ymm12,%ymm12 |
| vmovdqu -16+224-128(%rcx),%ymm0 |
| vpaddq %ymm12,%ymm5,%ymm5 |
| vpmuludq %ymm11,%ymm13,%ymm13 |
| vmovdqu -16+256-128(%rcx),%ymm12 |
| vpaddq %ymm13,%ymm6,%ymm6 |
| vpmuludq %ymm11,%ymm0,%ymm0 |
| vmovdqu -16+288-128(%rcx),%ymm13 |
| vpaddq %ymm0,%ymm7,%ymm7 |
| vpmuludq %ymm11,%ymm12,%ymm12 |
| vmovdqu -24+32-128(%rsi),%ymm0 |
| vpaddq %ymm12,%ymm8,%ymm8 |
| vpmuludq %ymm11,%ymm13,%ymm13 |
| vmovdqu -24+64-128(%rsi),%ymm12 |
| vpaddq %ymm13,%ymm9,%ymm9 |
| |
| addq %r11,%r12 |
| imulq -128(%rsi),%rbx |
| addq %rbx,%r12 |
| |
| movq %r12,%rax |
| imull %r8d,%eax |
| andl $0x1fffffff,%eax |
| |
| vpmuludq %ymm10,%ymm0,%ymm0 |
| vmovd %eax,%xmm11 |
| vmovdqu -24+96-128(%rsi),%ymm13 |
| vpaddq %ymm0,%ymm1,%ymm1 |
| vpmuludq %ymm10,%ymm12,%ymm12 |
| vpbroadcastq %xmm11,%ymm11 |
| vmovdqu -24+128-128(%rsi),%ymm0 |
| vpaddq %ymm12,%ymm2,%ymm2 |
| vpmuludq %ymm10,%ymm13,%ymm13 |
| vmovdqu -24+160-128(%rsi),%ymm12 |
| vpaddq %ymm13,%ymm3,%ymm3 |
| vpmuludq %ymm10,%ymm0,%ymm0 |
| vmovdqu -24+192-128(%rsi),%ymm13 |
| vpaddq %ymm0,%ymm4,%ymm4 |
| vpmuludq %ymm10,%ymm12,%ymm12 |
| vmovdqu -24+224-128(%rsi),%ymm0 |
| vpaddq %ymm12,%ymm5,%ymm5 |
| vpmuludq %ymm10,%ymm13,%ymm13 |
| vmovdqu -24+256-128(%rsi),%ymm12 |
| vpaddq %ymm13,%ymm6,%ymm6 |
| vpmuludq %ymm10,%ymm0,%ymm0 |
| vmovdqu -24+288-128(%rsi),%ymm13 |
| vpaddq %ymm0,%ymm7,%ymm7 |
| vpmuludq %ymm10,%ymm12,%ymm12 |
| vpaddq %ymm12,%ymm8,%ymm8 |
| vpmuludq %ymm10,%ymm13,%ymm13 |
| vpbroadcastq 32(%r13),%ymm10 |
| vpaddq %ymm13,%ymm9,%ymm9 |
| addq $32,%r13 |
| |
| vmovdqu -24+32-128(%rcx),%ymm0 |
| imulq -128(%rcx),%rax |
| addq %rax,%r12 |
| shrq $29,%r12 |
| |
| vmovdqu -24+64-128(%rcx),%ymm12 |
| vpmuludq %ymm11,%ymm0,%ymm0 |
| vmovq %xmm10,%rbx |
| vmovdqu -24+96-128(%rcx),%ymm13 |
| vpaddq %ymm0,%ymm1,%ymm0 |
| vpmuludq %ymm11,%ymm12,%ymm12 |
| vmovdqu %ymm0,(%rsp) |
| vpaddq %ymm12,%ymm2,%ymm1 |
| vmovdqu -24+128-128(%rcx),%ymm0 |
| vpmuludq %ymm11,%ymm13,%ymm13 |
| vmovdqu -24+160-128(%rcx),%ymm12 |
| vpaddq %ymm13,%ymm3,%ymm2 |
| vpmuludq %ymm11,%ymm0,%ymm0 |
| vmovdqu -24+192-128(%rcx),%ymm13 |
| vpaddq %ymm0,%ymm4,%ymm3 |
| vpmuludq %ymm11,%ymm12,%ymm12 |
| vmovdqu -24+224-128(%rcx),%ymm0 |
| vpaddq %ymm12,%ymm5,%ymm4 |
| vpmuludq %ymm11,%ymm13,%ymm13 |
| vmovdqu -24+256-128(%rcx),%ymm12 |
| vpaddq %ymm13,%ymm6,%ymm5 |
| vpmuludq %ymm11,%ymm0,%ymm0 |
| vmovdqu -24+288-128(%rcx),%ymm13 |
| movq %r12,%r9 |
| vpaddq %ymm0,%ymm7,%ymm6 |
| vpmuludq %ymm11,%ymm12,%ymm12 |
| addq (%rsp),%r9 |
| vpaddq %ymm12,%ymm8,%ymm7 |
| vpmuludq %ymm11,%ymm13,%ymm13 |
| vmovq %r12,%xmm12 |
| vpaddq %ymm13,%ymm9,%ymm8 |
| |
| decl %r14d |
| jnz .Loop_mul_1024 |
| vpaddq (%rsp),%ymm12,%ymm0 |
| |
| vpsrlq $29,%ymm0,%ymm12 |
| vpand %ymm15,%ymm0,%ymm0 |
| vpsrlq $29,%ymm1,%ymm13 |
| vpand %ymm15,%ymm1,%ymm1 |
| vpsrlq $29,%ymm2,%ymm10 |
| vpermq $0x93,%ymm12,%ymm12 |
| vpand %ymm15,%ymm2,%ymm2 |
| vpsrlq $29,%ymm3,%ymm11 |
| vpermq $0x93,%ymm13,%ymm13 |
| vpand %ymm15,%ymm3,%ymm3 |
| |
| vpblendd $3,%ymm14,%ymm12,%ymm9 |
| vpermq $0x93,%ymm10,%ymm10 |
| vpblendd $3,%ymm12,%ymm13,%ymm12 |
| vpermq $0x93,%ymm11,%ymm11 |
| vpaddq %ymm9,%ymm0,%ymm0 |
| vpblendd $3,%ymm13,%ymm10,%ymm13 |
| vpaddq %ymm12,%ymm1,%ymm1 |
| vpblendd $3,%ymm10,%ymm11,%ymm10 |
| vpaddq %ymm13,%ymm2,%ymm2 |
| vpblendd $3,%ymm11,%ymm14,%ymm11 |
| vpaddq %ymm10,%ymm3,%ymm3 |
| vpaddq %ymm11,%ymm4,%ymm4 |
| |
| vpsrlq $29,%ymm0,%ymm12 |
| vpand %ymm15,%ymm0,%ymm0 |
| vpsrlq $29,%ymm1,%ymm13 |
| vpand %ymm15,%ymm1,%ymm1 |
| vpsrlq $29,%ymm2,%ymm10 |
| vpermq $0x93,%ymm12,%ymm12 |
| vpand %ymm15,%ymm2,%ymm2 |
| vpsrlq $29,%ymm3,%ymm11 |
| vpermq $0x93,%ymm13,%ymm13 |
| vpand %ymm15,%ymm3,%ymm3 |
| vpermq $0x93,%ymm10,%ymm10 |
| |
| vpblendd $3,%ymm14,%ymm12,%ymm9 |
| vpermq $0x93,%ymm11,%ymm11 |
| vpblendd $3,%ymm12,%ymm13,%ymm12 |
| vpaddq %ymm9,%ymm0,%ymm0 |
| vpblendd $3,%ymm13,%ymm10,%ymm13 |
| vpaddq %ymm12,%ymm1,%ymm1 |
| vpblendd $3,%ymm10,%ymm11,%ymm10 |
| vpaddq %ymm13,%ymm2,%ymm2 |
| vpblendd $3,%ymm11,%ymm14,%ymm11 |
| vpaddq %ymm10,%ymm3,%ymm3 |
| vpaddq %ymm11,%ymm4,%ymm4 |
| |
| vmovdqu %ymm0,0-128(%rdi) |
| vmovdqu %ymm1,32-128(%rdi) |
| vmovdqu %ymm2,64-128(%rdi) |
| vmovdqu %ymm3,96-128(%rdi) |
| vpsrlq $29,%ymm4,%ymm12 |
| vpand %ymm15,%ymm4,%ymm4 |
| vpsrlq $29,%ymm5,%ymm13 |
| vpand %ymm15,%ymm5,%ymm5 |
| vpsrlq $29,%ymm6,%ymm10 |
| vpermq $0x93,%ymm12,%ymm12 |
| vpand %ymm15,%ymm6,%ymm6 |
| vpsrlq $29,%ymm7,%ymm11 |
| vpermq $0x93,%ymm13,%ymm13 |
| vpand %ymm15,%ymm7,%ymm7 |
| vpsrlq $29,%ymm8,%ymm0 |
| vpermq $0x93,%ymm10,%ymm10 |
| vpand %ymm15,%ymm8,%ymm8 |
| vpermq $0x93,%ymm11,%ymm11 |
| |
| vpblendd $3,%ymm14,%ymm12,%ymm9 |
| vpermq $0x93,%ymm0,%ymm0 |
| vpblendd $3,%ymm12,%ymm13,%ymm12 |
| vpaddq %ymm9,%ymm4,%ymm4 |
| vpblendd $3,%ymm13,%ymm10,%ymm13 |
| vpaddq %ymm12,%ymm5,%ymm5 |
| vpblendd $3,%ymm10,%ymm11,%ymm10 |
| vpaddq %ymm13,%ymm6,%ymm6 |
| vpblendd $3,%ymm11,%ymm0,%ymm11 |
| vpaddq %ymm10,%ymm7,%ymm7 |
| vpaddq %ymm11,%ymm8,%ymm8 |
| |
| vpsrlq $29,%ymm4,%ymm12 |
| vpand %ymm15,%ymm4,%ymm4 |
| vpsrlq $29,%ymm5,%ymm13 |
| vpand %ymm15,%ymm5,%ymm5 |
| vpsrlq $29,%ymm6,%ymm10 |
| vpermq $0x93,%ymm12,%ymm12 |
| vpand %ymm15,%ymm6,%ymm6 |
| vpsrlq $29,%ymm7,%ymm11 |
| vpermq $0x93,%ymm13,%ymm13 |
| vpand %ymm15,%ymm7,%ymm7 |
| vpsrlq $29,%ymm8,%ymm0 |
| vpermq $0x93,%ymm10,%ymm10 |
| vpand %ymm15,%ymm8,%ymm8 |
| vpermq $0x93,%ymm11,%ymm11 |
| |
| vpblendd $3,%ymm14,%ymm12,%ymm9 |
| vpermq $0x93,%ymm0,%ymm0 |
| vpblendd $3,%ymm12,%ymm13,%ymm12 |
| vpaddq %ymm9,%ymm4,%ymm4 |
| vpblendd $3,%ymm13,%ymm10,%ymm13 |
| vpaddq %ymm12,%ymm5,%ymm5 |
| vpblendd $3,%ymm10,%ymm11,%ymm10 |
| vpaddq %ymm13,%ymm6,%ymm6 |
| vpblendd $3,%ymm11,%ymm0,%ymm11 |
| vpaddq %ymm10,%ymm7,%ymm7 |
| vpaddq %ymm11,%ymm8,%ymm8 |
| |
| vmovdqu %ymm4,128-128(%rdi) |
| vmovdqu %ymm5,160-128(%rdi) |
| vmovdqu %ymm6,192-128(%rdi) |
| vmovdqu %ymm7,224-128(%rdi) |
| vmovdqu %ymm8,256-128(%rdi) |
| vzeroupper |
| |
| movq %rbp,%rax |
| .cfi_def_cfa_register %rax |
| movq -48(%rax),%r15 |
| .cfi_restore %r15 |
| movq -40(%rax),%r14 |
| .cfi_restore %r14 |
| movq -32(%rax),%r13 |
| .cfi_restore %r13 |
| movq -24(%rax),%r12 |
| .cfi_restore %r12 |
| movq -16(%rax),%rbp |
| .cfi_restore %rbp |
| movq -8(%rax),%rbx |
| .cfi_restore %rbx |
| leaq (%rax),%rsp |
| .cfi_def_cfa_register %rsp |
| .Lmul_1024_epilogue: |
| .byte 0xf3,0xc3 |
| .cfi_endproc |
| .size rsaz_1024_mul_avx2,.-rsaz_1024_mul_avx2 |
| .globl rsaz_1024_red2norm_avx2 |
| .hidden rsaz_1024_red2norm_avx2 |
| .type rsaz_1024_red2norm_avx2,@function |
| .align 32 |
| rsaz_1024_red2norm_avx2: |
| subq $-128,%rsi |
| xorq %rax,%rax |
| movq -128(%rsi),%r8 |
| movq -120(%rsi),%r9 |
| movq -112(%rsi),%r10 |
| shlq $0,%r8 |
| shlq $29,%r9 |
| movq %r10,%r11 |
| shlq $58,%r10 |
| shrq $6,%r11 |
| addq %r8,%rax |
| addq %r9,%rax |
| addq %r10,%rax |
| adcq $0,%r11 |
| movq %rax,0(%rdi) |
| movq %r11,%rax |
| movq -104(%rsi),%r8 |
| movq -96(%rsi),%r9 |
| shlq $23,%r8 |
| movq %r9,%r10 |
| shlq $52,%r9 |
| shrq $12,%r10 |
| addq %r8,%rax |
| addq %r9,%rax |
| adcq $0,%r10 |
| movq %rax,8(%rdi) |
| movq %r10,%rax |
| movq -88(%rsi),%r11 |
| movq -80(%rsi),%r8 |
| shlq $17,%r11 |
| movq %r8,%r9 |
| shlq $46,%r8 |
| shrq $18,%r9 |
| addq %r11,%rax |
| addq %r8,%rax |
| adcq $0,%r9 |
| movq %rax,16(%rdi) |
| movq %r9,%rax |
| movq -72(%rsi),%r10 |
| movq -64(%rsi),%r11 |
| shlq $11,%r10 |
| movq %r11,%r8 |
| shlq $40,%r11 |
| shrq $24,%r8 |
| addq %r10,%rax |
| addq %r11,%rax |
| adcq $0,%r8 |
| movq %rax,24(%rdi) |
| movq %r8,%rax |
| movq -56(%rsi),%r9 |
| movq -48(%rsi),%r10 |
| movq -40(%rsi),%r11 |
| shlq $5,%r9 |
| shlq $34,%r10 |
| movq %r11,%r8 |
| shlq $63,%r11 |
| shrq $1,%r8 |
| addq %r9,%rax |
| addq %r10,%rax |
| addq %r11,%rax |
| adcq $0,%r8 |
| movq %rax,32(%rdi) |
| movq %r8,%rax |
| movq -32(%rsi),%r9 |
| movq -24(%rsi),%r10 |
| shlq $28,%r9 |
| movq %r10,%r11 |
| shlq $57,%r10 |
| shrq $7,%r11 |
| addq %r9,%rax |
| addq %r10,%rax |
| adcq $0,%r11 |
| movq %rax,40(%rdi) |
| movq %r11,%rax |
| movq -16(%rsi),%r8 |
| movq -8(%rsi),%r9 |
| shlq $22,%r8 |
| movq %r9,%r10 |
| shlq $51,%r9 |
| shrq $13,%r10 |
| addq %r8,%rax |
| addq %r9,%rax |
| adcq $0,%r10 |
| movq %rax,48(%rdi) |
| movq %r10,%rax |
| movq 0(%rsi),%r11 |
| movq 8(%rsi),%r8 |
| shlq $16,%r11 |
| movq %r8,%r9 |
| shlq $45,%r8 |
| shrq $19,%r9 |
| addq %r11,%rax |
| addq %r8,%rax |
| adcq $0,%r9 |
| movq %rax,56(%rdi) |
| movq %r9,%rax |
| movq 16(%rsi),%r10 |
| movq 24(%rsi),%r11 |
| shlq $10,%r10 |
| movq %r11,%r8 |
| shlq $39,%r11 |
| shrq $25,%r8 |
| addq %r10,%rax |
| addq %r11,%rax |
| adcq $0,%r8 |
| movq %rax,64(%rdi) |
| movq %r8,%rax |
| movq 32(%rsi),%r9 |
| movq 40(%rsi),%r10 |
| movq 48(%rsi),%r11 |
| shlq $4,%r9 |
| shlq $33,%r10 |
| movq %r11,%r8 |
| shlq $62,%r11 |
| shrq $2,%r8 |
| addq %r9,%rax |
| addq %r10,%rax |
| addq %r11,%rax |
| adcq $0,%r8 |
| movq %rax,72(%rdi) |
| movq %r8,%rax |
| movq 56(%rsi),%r9 |
| movq 64(%rsi),%r10 |
| shlq $27,%r9 |
| movq %r10,%r11 |
| shlq $56,%r10 |
| shrq $8,%r11 |
| addq %r9,%rax |
| addq %r10,%rax |
| adcq $0,%r11 |
| movq %rax,80(%rdi) |
| movq %r11,%rax |
| movq 72(%rsi),%r8 |
| movq 80(%rsi),%r9 |
| shlq $21,%r8 |
| movq %r9,%r10 |
| shlq $50,%r9 |
| shrq $14,%r10 |
| addq %r8,%rax |
| addq %r9,%rax |
| adcq $0,%r10 |
| movq %rax,88(%rdi) |
| movq %r10,%rax |
| movq 88(%rsi),%r11 |
| movq 96(%rsi),%r8 |
| shlq $15,%r11 |
| movq %r8,%r9 |
| shlq $44,%r8 |
| shrq $20,%r9 |
| addq %r11,%rax |
| addq %r8,%rax |
| adcq $0,%r9 |
| movq %rax,96(%rdi) |
| movq %r9,%rax |
| movq 104(%rsi),%r10 |
| movq 112(%rsi),%r11 |
| shlq $9,%r10 |
| movq %r11,%r8 |
| shlq $38,%r11 |
| shrq $26,%r8 |
| addq %r10,%rax |
| addq %r11,%rax |
| adcq $0,%r8 |
| movq %rax,104(%rdi) |
| movq %r8,%rax |
| movq 120(%rsi),%r9 |
| movq 128(%rsi),%r10 |
| movq 136(%rsi),%r11 |
| shlq $3,%r9 |
| shlq $32,%r10 |
| movq %r11,%r8 |
| shlq $61,%r11 |
| shrq $3,%r8 |
| addq %r9,%rax |
| addq %r10,%rax |
| addq %r11,%rax |
| adcq $0,%r8 |
| movq %rax,112(%rdi) |
| movq %r8,%rax |
| movq 144(%rsi),%r9 |
| movq 152(%rsi),%r10 |
| shlq $26,%r9 |
| movq %r10,%r11 |
| shlq $55,%r10 |
| shrq $9,%r11 |
| addq %r9,%rax |
| addq %r10,%rax |
| adcq $0,%r11 |
| movq %rax,120(%rdi) |
| movq %r11,%rax |
| .byte 0xf3,0xc3 |
| .size rsaz_1024_red2norm_avx2,.-rsaz_1024_red2norm_avx2 |
| |
| .globl rsaz_1024_norm2red_avx2 |
| .hidden rsaz_1024_norm2red_avx2 |
| .type rsaz_1024_norm2red_avx2,@function |
| .align 32 |
| rsaz_1024_norm2red_avx2: |
| subq $-128,%rdi |
| movq (%rsi),%r8 |
| movl $0x1fffffff,%eax |
| movq 8(%rsi),%r9 |
| movq %r8,%r11 |
| shrq $0,%r11 |
| andq %rax,%r11 |
| movq %r11,-128(%rdi) |
| movq %r8,%r10 |
| shrq $29,%r10 |
| andq %rax,%r10 |
| movq %r10,-120(%rdi) |
| shrdq $58,%r9,%r8 |
| andq %rax,%r8 |
| movq %r8,-112(%rdi) |
| movq 16(%rsi),%r10 |
| movq %r9,%r8 |
| shrq $23,%r8 |
| andq %rax,%r8 |
| movq %r8,-104(%rdi) |
| shrdq $52,%r10,%r9 |
| andq %rax,%r9 |
| movq %r9,-96(%rdi) |
| movq 24(%rsi),%r11 |
| movq %r10,%r9 |
| shrq $17,%r9 |
| andq %rax,%r9 |
| movq %r9,-88(%rdi) |
| shrdq $46,%r11,%r10 |
| andq %rax,%r10 |
| movq %r10,-80(%rdi) |
| movq 32(%rsi),%r8 |
| movq %r11,%r10 |
| shrq $11,%r10 |
| andq %rax,%r10 |
| movq %r10,-72(%rdi) |
| shrdq $40,%r8,%r11 |
| andq %rax,%r11 |
| movq %r11,-64(%rdi) |
| movq 40(%rsi),%r9 |
| movq %r8,%r11 |
| shrq $5,%r11 |
| andq %rax,%r11 |
| movq %r11,-56(%rdi) |
| movq %r8,%r10 |
| shrq $34,%r10 |
| andq %rax,%r10 |
| movq %r10,-48(%rdi) |
| shrdq $63,%r9,%r8 |
| andq %rax,%r8 |
| movq %r8,-40(%rdi) |
| movq 48(%rsi),%r10 |
| movq %r9,%r8 |
| shrq $28,%r8 |
| andq %rax,%r8 |
| movq %r8,-32(%rdi) |
| shrdq $57,%r10,%r9 |
| andq %rax,%r9 |
| movq %r9,-24(%rdi) |
| movq 56(%rsi),%r11 |
| movq %r10,%r9 |
| shrq $22,%r9 |
| andq %rax,%r9 |
| movq %r9,-16(%rdi) |
| shrdq $51,%r11,%r10 |
| andq %rax,%r10 |
| movq %r10,-8(%rdi) |
| movq 64(%rsi),%r8 |
| movq %r11,%r10 |
| shrq $16,%r10 |
| andq %rax,%r10 |
| movq %r10,0(%rdi) |
| shrdq $45,%r8,%r11 |
| andq %rax,%r11 |
| movq %r11,8(%rdi) |
| movq 72(%rsi),%r9 |
| movq %r8,%r11 |
| shrq $10,%r11 |
| andq %rax,%r11 |
| movq %r11,16(%rdi) |
| shrdq $39,%r9,%r8 |
| andq %rax,%r8 |
| movq %r8,24(%rdi) |
| movq 80(%rsi),%r10 |
| movq %r9,%r8 |
| shrq $4,%r8 |
| andq %rax,%r8 |
| movq %r8,32(%rdi) |
| movq %r9,%r11 |
| shrq $33,%r11 |
| andq %rax,%r11 |
| movq %r11,40(%rdi) |
| shrdq $62,%r10,%r9 |
| andq %rax,%r9 |
| movq %r9,48(%rdi) |
| movq 88(%rsi),%r11 |
| movq %r10,%r9 |
| shrq $27,%r9 |
| andq %rax,%r9 |
| movq %r9,56(%rdi) |
| shrdq $56,%r11,%r10 |
| andq %rax,%r10 |
| movq %r10,64(%rdi) |
| movq 96(%rsi),%r8 |
| movq %r11,%r10 |
| shrq $21,%r10 |
| andq %rax,%r10 |
| movq %r10,72(%rdi) |
| shrdq $50,%r8,%r11 |
| andq %rax,%r11 |
| movq %r11,80(%rdi) |
| movq 104(%rsi),%r9 |
| movq %r8,%r11 |
| shrq $15,%r11 |
| andq %rax,%r11 |
| movq %r11,88(%rdi) |
| shrdq $44,%r9,%r8 |
| andq %rax,%r8 |
| movq %r8,96(%rdi) |
| movq 112(%rsi),%r10 |
| movq %r9,%r8 |
| shrq $9,%r8 |
| andq %rax,%r8 |
| movq %r8,104(%rdi) |
| shrdq $38,%r10,%r9 |
| andq %rax,%r9 |
| movq %r9,112(%rdi) |
| movq 120(%rsi),%r11 |
| movq %r10,%r9 |
| shrq $3,%r9 |
| andq %rax,%r9 |
| movq %r9,120(%rdi) |
| movq %r10,%r8 |
| shrq $32,%r8 |
| andq %rax,%r8 |
| movq %r8,128(%rdi) |
| shrdq $61,%r11,%r10 |
| andq %rax,%r10 |
| movq %r10,136(%rdi) |
| xorq %r8,%r8 |
| movq %r11,%r10 |
| shrq $26,%r10 |
| andq %rax,%r10 |
| movq %r10,144(%rdi) |
| shrdq $55,%r8,%r11 |
| andq %rax,%r11 |
| movq %r11,152(%rdi) |
| movq %r8,160(%rdi) |
| movq %r8,168(%rdi) |
| movq %r8,176(%rdi) |
| movq %r8,184(%rdi) |
| .byte 0xf3,0xc3 |
| .size rsaz_1024_norm2red_avx2,.-rsaz_1024_norm2red_avx2 |
| .globl rsaz_1024_scatter5_avx2 |
| .hidden rsaz_1024_scatter5_avx2 |
| .type rsaz_1024_scatter5_avx2,@function |
| .align 32 |
| rsaz_1024_scatter5_avx2: |
| vzeroupper |
| vmovdqu .Lscatter_permd(%rip),%ymm5 |
| shll $4,%edx |
| leaq (%rdi,%rdx,1),%rdi |
| movl $9,%eax |
| jmp .Loop_scatter_1024 |
| |
| .align 32 |
| .Loop_scatter_1024: |
| vmovdqu (%rsi),%ymm0 |
| leaq 32(%rsi),%rsi |
| vpermd %ymm0,%ymm5,%ymm0 |
| vmovdqu %xmm0,(%rdi) |
| leaq 512(%rdi),%rdi |
| decl %eax |
| jnz .Loop_scatter_1024 |
| |
| vzeroupper |
| .byte 0xf3,0xc3 |
| .size rsaz_1024_scatter5_avx2,.-rsaz_1024_scatter5_avx2 |
| |
| .globl rsaz_1024_gather5_avx2 |
| .hidden rsaz_1024_gather5_avx2 |
| .type rsaz_1024_gather5_avx2,@function |
| .align 32 |
| rsaz_1024_gather5_avx2: |
| .cfi_startproc |
| vzeroupper |
| movq %rsp,%r11 |
| .cfi_def_cfa_register %r11 |
| leaq -256(%rsp),%rsp |
| andq $-32,%rsp |
| leaq .Linc(%rip),%r10 |
| leaq -128(%rsp),%rax |
| |
| vmovd %edx,%xmm4 |
| vmovdqa (%r10),%ymm0 |
| vmovdqa 32(%r10),%ymm1 |
| vmovdqa 64(%r10),%ymm5 |
| vpbroadcastd %xmm4,%ymm4 |
| |
| vpaddd %ymm5,%ymm0,%ymm2 |
| vpcmpeqd %ymm4,%ymm0,%ymm0 |
| vpaddd %ymm5,%ymm1,%ymm3 |
| vpcmpeqd %ymm4,%ymm1,%ymm1 |
| vmovdqa %ymm0,0+128(%rax) |
| vpaddd %ymm5,%ymm2,%ymm0 |
| vpcmpeqd %ymm4,%ymm2,%ymm2 |
| vmovdqa %ymm1,32+128(%rax) |
| vpaddd %ymm5,%ymm3,%ymm1 |
| vpcmpeqd %ymm4,%ymm3,%ymm3 |
| vmovdqa %ymm2,64+128(%rax) |
| vpaddd %ymm5,%ymm0,%ymm2 |
| vpcmpeqd %ymm4,%ymm0,%ymm0 |
| vmovdqa %ymm3,96+128(%rax) |
| vpaddd %ymm5,%ymm1,%ymm3 |
| vpcmpeqd %ymm4,%ymm1,%ymm1 |
| vmovdqa %ymm0,128+128(%rax) |
| vpaddd %ymm5,%ymm2,%ymm8 |
| vpcmpeqd %ymm4,%ymm2,%ymm2 |
| vmovdqa %ymm1,160+128(%rax) |
| vpaddd %ymm5,%ymm3,%ymm9 |
| vpcmpeqd %ymm4,%ymm3,%ymm3 |
| vmovdqa %ymm2,192+128(%rax) |
| vpaddd %ymm5,%ymm8,%ymm10 |
| vpcmpeqd %ymm4,%ymm8,%ymm8 |
| vmovdqa %ymm3,224+128(%rax) |
| vpaddd %ymm5,%ymm9,%ymm11 |
| vpcmpeqd %ymm4,%ymm9,%ymm9 |
| vpaddd %ymm5,%ymm10,%ymm12 |
| vpcmpeqd %ymm4,%ymm10,%ymm10 |
| vpaddd %ymm5,%ymm11,%ymm13 |
| vpcmpeqd %ymm4,%ymm11,%ymm11 |
| vpaddd %ymm5,%ymm12,%ymm14 |
| vpcmpeqd %ymm4,%ymm12,%ymm12 |
| vpaddd %ymm5,%ymm13,%ymm15 |
| vpcmpeqd %ymm4,%ymm13,%ymm13 |
| vpcmpeqd %ymm4,%ymm14,%ymm14 |
| vpcmpeqd %ymm4,%ymm15,%ymm15 |
| |
| vmovdqa -32(%r10),%ymm7 |
| leaq 128(%rsi),%rsi |
| movl $9,%edx |
| |
| .Loop_gather_1024: |
| vmovdqa 0-128(%rsi),%ymm0 |
| vmovdqa 32-128(%rsi),%ymm1 |
| vmovdqa 64-128(%rsi),%ymm2 |
| vmovdqa 96-128(%rsi),%ymm3 |
| vpand 0+128(%rax),%ymm0,%ymm0 |
| vpand 32+128(%rax),%ymm1,%ymm1 |
| vpand 64+128(%rax),%ymm2,%ymm2 |
| vpor %ymm0,%ymm1,%ymm4 |
| vpand 96+128(%rax),%ymm3,%ymm3 |
| vmovdqa 128-128(%rsi),%ymm0 |
| vmovdqa 160-128(%rsi),%ymm1 |
| vpor %ymm2,%ymm3,%ymm5 |
| vmovdqa 192-128(%rsi),%ymm2 |
| vmovdqa 224-128(%rsi),%ymm3 |
| vpand 128+128(%rax),%ymm0,%ymm0 |
| vpand 160+128(%rax),%ymm1,%ymm1 |
| vpand 192+128(%rax),%ymm2,%ymm2 |
| vpor %ymm0,%ymm4,%ymm4 |
| vpand 224+128(%rax),%ymm3,%ymm3 |
| vpand 256-128(%rsi),%ymm8,%ymm0 |
| vpor %ymm1,%ymm5,%ymm5 |
| vpand 288-128(%rsi),%ymm9,%ymm1 |
| vpor %ymm2,%ymm4,%ymm4 |
| vpand 320-128(%rsi),%ymm10,%ymm2 |
| vpor %ymm3,%ymm5,%ymm5 |
| vpand 352-128(%rsi),%ymm11,%ymm3 |
| vpor %ymm0,%ymm4,%ymm4 |
| vpand 384-128(%rsi),%ymm12,%ymm0 |
| vpor %ymm1,%ymm5,%ymm5 |
| vpand 416-128(%rsi),%ymm13,%ymm1 |
| vpor %ymm2,%ymm4,%ymm4 |
| vpand 448-128(%rsi),%ymm14,%ymm2 |
| vpor %ymm3,%ymm5,%ymm5 |
| vpand 480-128(%rsi),%ymm15,%ymm3 |
| leaq 512(%rsi),%rsi |
| vpor %ymm0,%ymm4,%ymm4 |
| vpor %ymm1,%ymm5,%ymm5 |
| vpor %ymm2,%ymm4,%ymm4 |
| vpor %ymm3,%ymm5,%ymm5 |
| |
| vpor %ymm5,%ymm4,%ymm4 |
| vextracti128 $1,%ymm4,%xmm5 |
| vpor %xmm4,%xmm5,%xmm5 |
| vpermd %ymm5,%ymm7,%ymm5 |
| vmovdqu %ymm5,(%rdi) |
| leaq 32(%rdi),%rdi |
| decl %edx |
| jnz .Loop_gather_1024 |
| |
| vpxor %ymm0,%ymm0,%ymm0 |
| vmovdqu %ymm0,(%rdi) |
| vzeroupper |
| leaq (%r11),%rsp |
| .cfi_def_cfa_register %rsp |
| .byte 0xf3,0xc3 |
| .cfi_endproc |
| .LSEH_end_rsaz_1024_gather5: |
| .size rsaz_1024_gather5_avx2,.-rsaz_1024_gather5_avx2 |
| .extern OPENSSL_ia32cap_P |
| .hidden OPENSSL_ia32cap_P |
| .globl rsaz_avx2_eligible |
| .hidden rsaz_avx2_eligible |
| .type rsaz_avx2_eligible,@function |
| .align 32 |
| rsaz_avx2_eligible: |
| leaq OPENSSL_ia32cap_P(%rip),%rax |
| movl 8(%rax),%eax |
| movl $524544,%ecx |
| movl $0,%edx |
| andl %eax,%ecx |
| cmpl $524544,%ecx |
| cmovel %edx,%eax |
| andl $32,%eax |
| shrl $5,%eax |
| .byte 0xf3,0xc3 |
| .size rsaz_avx2_eligible,.-rsaz_avx2_eligible |
| |
| .align 64 |
| .Land_mask: |
| .quad 0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff |
| .Lscatter_permd: |
| .long 0,2,4,6,7,7,7,7 |
| .Lgather_permd: |
| .long 0,7,1,7,2,7,3,7 |
| .Linc: |
| .long 0,0,0,0, 1,1,1,1 |
| .long 2,2,2,2, 3,3,3,3 |
| .long 4,4,4,4, 4,4,4,4 |
| .align 64 |
| #endif |