You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1696 lines
37 KiB

.text
.globl rsaz_1024_sqr_avx2
.type rsaz_1024_sqr_avx2,@function
.align 64
rsaz_1024_sqr_avx2:
leaq (%rsp),%rax
pushq %rbx
pushq %rbp
pushq %r12
pushq %r13
pushq %r14
pushq %r15
vzeroupper
movq %rax,%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
vpbroadcastq .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
movq -48(%rax),%r15
movq -40(%rax),%r14
movq -32(%rax),%r13
movq -24(%rax),%r12
movq -16(%rax),%rbp
movq -8(%rax),%rbx
leaq (%rax),%rsp
.Lsqr_1024_epilogue:
.byte 0xf3,0xc3
.size rsaz_1024_sqr_avx2,.-rsaz_1024_sqr_avx2
.globl rsaz_1024_mul_avx2
.type rsaz_1024_mul_avx2,@function
.align 64
rsaz_1024_mul_avx2:
leaq (%rsp),%rax
pushq %rbx
pushq %rbp
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq %rax,%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,%ymm9
vpaddq %ymm13,%ymm7,%ymm7
vpmuludq 256-128(%rcx),%ymm11,%ymm0
vpaddq %ymm9,%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
imull %r8d,%eax
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
vpermq $0,%ymm15,%ymm15
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
movq -48(%rax),%r15
movq -40(%rax),%r14
movq -32(%rax),%r13
movq -24(%rax),%r12
movq -16(%rax),%rbp
movq -8(%rax),%rbx
leaq (%rax),%rsp
.Lmul_1024_epilogue:
.byte 0xf3,0xc3
.size rsaz_1024_mul_avx2,.-rsaz_1024_mul_avx2
.globl 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
.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
.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
.type rsaz_1024_gather5_avx2,@function
.align 32
rsaz_1024_gather5_avx2:
vzeroupper
movq %rsp,%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
.byte 0xf3,0xc3
.size rsaz_1024_gather5_avx2,.-rsaz_1024_gather5_avx2
.globl rsaz_avx2_eligible
.type rsaz_avx2_eligible,@function
.align 32
rsaz_avx2_eligible:
movl OPENSSL_ia32cap_P+8(%rip),%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,-1
.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