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.
 
 
 
 
 
 

1930 lines
46 KiB

OPTION DOTNAME
.text$ SEGMENT ALIGN(256) 'CODE'
PUBLIC rsaz_1024_sqr_avx2
ALIGN 64
rsaz_1024_sqr_avx2 PROC PUBLIC
mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
mov QWORD PTR[16+rsp],rsi
mov rax,rsp
$L$SEH_begin_rsaz_1024_sqr_avx2::
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
mov rcx,r9
mov r8,QWORD PTR[40+rsp]
lea rax,QWORD PTR[rsp]
push rbx
push rbp
push r12
push r13
push r14
push r15
vzeroupper
lea rsp,QWORD PTR[((-168))+rsp]
vmovaps XMMWORD PTR[(-216)+rax],xmm6
vmovaps XMMWORD PTR[(-200)+rax],xmm7
vmovaps XMMWORD PTR[(-184)+rax],xmm8
vmovaps XMMWORD PTR[(-168)+rax],xmm9
vmovaps XMMWORD PTR[(-152)+rax],xmm10
vmovaps XMMWORD PTR[(-136)+rax],xmm11
vmovaps XMMWORD PTR[(-120)+rax],xmm12
vmovaps XMMWORD PTR[(-104)+rax],xmm13
vmovaps XMMWORD PTR[(-88)+rax],xmm14
vmovaps XMMWORD PTR[(-72)+rax],xmm15
$L$sqr_1024_body::
mov rbp,rax
mov r13,rdx
sub rsp,832
mov r15,r13
sub rdi,-128
sub rsi,-128
sub r13,-128
and r15,4095
add r15,32*10
shr r15,12
vpxor ymm9,ymm9,ymm9
jz $L$sqr_1024_no_n_copy
sub rsp,32*10
vmovdqu ymm0,YMMWORD PTR[((0-128))+r13]
and rsp,-2048
vmovdqu ymm1,YMMWORD PTR[((32-128))+r13]
vmovdqu ymm2,YMMWORD PTR[((64-128))+r13]
vmovdqu ymm3,YMMWORD PTR[((96-128))+r13]
vmovdqu ymm4,YMMWORD PTR[((128-128))+r13]
vmovdqu ymm5,YMMWORD PTR[((160-128))+r13]
vmovdqu ymm6,YMMWORD PTR[((192-128))+r13]
vmovdqu ymm7,YMMWORD PTR[((224-128))+r13]
vmovdqu ymm8,YMMWORD PTR[((256-128))+r13]
lea r13,QWORD PTR[((832+128))+rsp]
vmovdqu YMMWORD PTR[(0-128)+r13],ymm0
vmovdqu YMMWORD PTR[(32-128)+r13],ymm1
vmovdqu YMMWORD PTR[(64-128)+r13],ymm2
vmovdqu YMMWORD PTR[(96-128)+r13],ymm3
vmovdqu YMMWORD PTR[(128-128)+r13],ymm4
vmovdqu YMMWORD PTR[(160-128)+r13],ymm5
vmovdqu YMMWORD PTR[(192-128)+r13],ymm6
vmovdqu YMMWORD PTR[(224-128)+r13],ymm7
vmovdqu YMMWORD PTR[(256-128)+r13],ymm8
vmovdqu YMMWORD PTR[(288-128)+r13],ymm9
$L$sqr_1024_no_n_copy::
and rsp,-1024
vmovdqu ymm1,YMMWORD PTR[((32-128))+rsi]
vmovdqu ymm2,YMMWORD PTR[((64-128))+rsi]
vmovdqu ymm3,YMMWORD PTR[((96-128))+rsi]
vmovdqu ymm4,YMMWORD PTR[((128-128))+rsi]
vmovdqu ymm5,YMMWORD PTR[((160-128))+rsi]
vmovdqu ymm6,YMMWORD PTR[((192-128))+rsi]
vmovdqu ymm7,YMMWORD PTR[((224-128))+rsi]
vmovdqu ymm8,YMMWORD PTR[((256-128))+rsi]
lea rbx,QWORD PTR[192+rsp]
vpbroadcastq ymm15,QWORD PTR[$L$and_mask]
jmp $L$OOP_GRANDE_SQR_1024
ALIGN 32
$L$OOP_GRANDE_SQR_1024::
lea r9,QWORD PTR[((576+128))+rsp]
lea r12,QWORD PTR[448+rsp]
vpaddq ymm1,ymm1,ymm1
vpbroadcastq ymm10,QWORD PTR[((0-128))+rsi]
vpaddq ymm2,ymm2,ymm2
vmovdqa YMMWORD PTR[(0-128)+r9],ymm1
vpaddq ymm3,ymm3,ymm3
vmovdqa YMMWORD PTR[(32-128)+r9],ymm2
vpaddq ymm4,ymm4,ymm4
vmovdqa YMMWORD PTR[(64-128)+r9],ymm3
vpaddq ymm5,ymm5,ymm5
vmovdqa YMMWORD PTR[(96-128)+r9],ymm4
vpaddq ymm6,ymm6,ymm6
vmovdqa YMMWORD PTR[(128-128)+r9],ymm5
vpaddq ymm7,ymm7,ymm7
vmovdqa YMMWORD PTR[(160-128)+r9],ymm6
vpaddq ymm8,ymm8,ymm8
vmovdqa YMMWORD PTR[(192-128)+r9],ymm7
vpxor ymm9,ymm9,ymm9
vmovdqa YMMWORD PTR[(224-128)+r9],ymm8
vpmuludq ymm0,ymm10,YMMWORD PTR[((0-128))+rsi]
vpbroadcastq ymm11,QWORD PTR[((32-128))+rsi]
vmovdqu YMMWORD PTR[(288-192)+rbx],ymm9
vpmuludq ymm1,ymm1,ymm10
vmovdqu YMMWORD PTR[(320-448)+r12],ymm9
vpmuludq ymm2,ymm2,ymm10
vmovdqu YMMWORD PTR[(352-448)+r12],ymm9
vpmuludq ymm3,ymm3,ymm10
vmovdqu YMMWORD PTR[(384-448)+r12],ymm9
vpmuludq ymm4,ymm4,ymm10
vmovdqu YMMWORD PTR[(416-448)+r12],ymm9
vpmuludq ymm5,ymm5,ymm10
vmovdqu YMMWORD PTR[(448-448)+r12],ymm9
vpmuludq ymm6,ymm6,ymm10
vmovdqu YMMWORD PTR[(480-448)+r12],ymm9
vpmuludq ymm7,ymm7,ymm10
vmovdqu YMMWORD PTR[(512-448)+r12],ymm9
vpmuludq ymm8,ymm8,ymm10
vpbroadcastq ymm10,QWORD PTR[((64-128))+rsi]
vmovdqu YMMWORD PTR[(544-448)+r12],ymm9
mov r15,rsi
mov r14d,4
jmp $L$sqr_entry_1024
ALIGN 32
$L$OOP_SQR_1024::
vpbroadcastq ymm11,QWORD PTR[((32-128))+r15]
vpmuludq ymm0,ymm10,YMMWORD PTR[((0-128))+rsi]
vpaddq ymm0,ymm0,YMMWORD PTR[((0-192))+rbx]
vpmuludq ymm1,ymm10,YMMWORD PTR[((0-128))+r9]
vpaddq ymm1,ymm1,YMMWORD PTR[((32-192))+rbx]
vpmuludq ymm2,ymm10,YMMWORD PTR[((32-128))+r9]
vpaddq ymm2,ymm2,YMMWORD PTR[((64-192))+rbx]
vpmuludq ymm3,ymm10,YMMWORD PTR[((64-128))+r9]
vpaddq ymm3,ymm3,YMMWORD PTR[((96-192))+rbx]
vpmuludq ymm4,ymm10,YMMWORD PTR[((96-128))+r9]
vpaddq ymm4,ymm4,YMMWORD PTR[((128-192))+rbx]
vpmuludq ymm5,ymm10,YMMWORD PTR[((128-128))+r9]
vpaddq ymm5,ymm5,YMMWORD PTR[((160-192))+rbx]
vpmuludq ymm6,ymm10,YMMWORD PTR[((160-128))+r9]
vpaddq ymm6,ymm6,YMMWORD PTR[((192-192))+rbx]
vpmuludq ymm7,ymm10,YMMWORD PTR[((192-128))+r9]
vpaddq ymm7,ymm7,YMMWORD PTR[((224-192))+rbx]
vpmuludq ymm8,ymm10,YMMWORD PTR[((224-128))+r9]
vpbroadcastq ymm10,QWORD PTR[((64-128))+r15]
vpaddq ymm8,ymm8,YMMWORD PTR[((256-192))+rbx]
$L$sqr_entry_1024::
vmovdqu YMMWORD PTR[(0-192)+rbx],ymm0
vmovdqu YMMWORD PTR[(32-192)+rbx],ymm1
vpmuludq ymm12,ymm11,YMMWORD PTR[((32-128))+rsi]
vpaddq ymm2,ymm2,ymm12
vpmuludq ymm14,ymm11,YMMWORD PTR[((32-128))+r9]
vpaddq ymm3,ymm3,ymm14
vpmuludq ymm13,ymm11,YMMWORD PTR[((64-128))+r9]
vpaddq ymm4,ymm4,ymm13
vpmuludq ymm12,ymm11,YMMWORD PTR[((96-128))+r9]
vpaddq ymm5,ymm5,ymm12
vpmuludq ymm14,ymm11,YMMWORD PTR[((128-128))+r9]
vpaddq ymm6,ymm6,ymm14
vpmuludq ymm13,ymm11,YMMWORD PTR[((160-128))+r9]
vpaddq ymm7,ymm7,ymm13
vpmuludq ymm12,ymm11,YMMWORD PTR[((192-128))+r9]
vpaddq ymm8,ymm8,ymm12
vpmuludq ymm0,ymm11,YMMWORD PTR[((224-128))+r9]
vpbroadcastq ymm11,QWORD PTR[((96-128))+r15]
vpaddq ymm0,ymm0,YMMWORD PTR[((288-192))+rbx]
vmovdqu YMMWORD PTR[(64-192)+rbx],ymm2
vmovdqu YMMWORD PTR[(96-192)+rbx],ymm3
vpmuludq ymm13,ymm10,YMMWORD PTR[((64-128))+rsi]
vpaddq ymm4,ymm4,ymm13
vpmuludq ymm12,ymm10,YMMWORD PTR[((64-128))+r9]
vpaddq ymm5,ymm5,ymm12
vpmuludq ymm14,ymm10,YMMWORD PTR[((96-128))+r9]
vpaddq ymm6,ymm6,ymm14
vpmuludq ymm13,ymm10,YMMWORD PTR[((128-128))+r9]
vpaddq ymm7,ymm7,ymm13
vpmuludq ymm12,ymm10,YMMWORD PTR[((160-128))+r9]
vpaddq ymm8,ymm8,ymm12
vpmuludq ymm14,ymm10,YMMWORD PTR[((192-128))+r9]
vpaddq ymm0,ymm0,ymm14
vpmuludq ymm1,ymm10,YMMWORD PTR[((224-128))+r9]
vpbroadcastq ymm10,QWORD PTR[((128-128))+r15]
vpaddq ymm1,ymm1,YMMWORD PTR[((320-448))+r12]
vmovdqu YMMWORD PTR[(128-192)+rbx],ymm4
vmovdqu YMMWORD PTR[(160-192)+rbx],ymm5
vpmuludq ymm12,ymm11,YMMWORD PTR[((96-128))+rsi]
vpaddq ymm6,ymm6,ymm12
vpmuludq ymm14,ymm11,YMMWORD PTR[((96-128))+r9]
vpaddq ymm7,ymm7,ymm14
vpmuludq ymm13,ymm11,YMMWORD PTR[((128-128))+r9]
vpaddq ymm8,ymm8,ymm13
vpmuludq ymm12,ymm11,YMMWORD PTR[((160-128))+r9]
vpaddq ymm0,ymm0,ymm12
vpmuludq ymm14,ymm11,YMMWORD PTR[((192-128))+r9]
vpaddq ymm1,ymm1,ymm14
vpmuludq ymm2,ymm11,YMMWORD PTR[((224-128))+r9]
vpbroadcastq ymm11,QWORD PTR[((160-128))+r15]
vpaddq ymm2,ymm2,YMMWORD PTR[((352-448))+r12]
vmovdqu YMMWORD PTR[(192-192)+rbx],ymm6
vmovdqu YMMWORD PTR[(224-192)+rbx],ymm7
vpmuludq ymm12,ymm10,YMMWORD PTR[((128-128))+rsi]
vpaddq ymm8,ymm8,ymm12
vpmuludq ymm14,ymm10,YMMWORD PTR[((128-128))+r9]
vpaddq ymm0,ymm0,ymm14
vpmuludq ymm13,ymm10,YMMWORD PTR[((160-128))+r9]
vpaddq ymm1,ymm1,ymm13
vpmuludq ymm12,ymm10,YMMWORD PTR[((192-128))+r9]
vpaddq ymm2,ymm2,ymm12
vpmuludq ymm3,ymm10,YMMWORD PTR[((224-128))+r9]
vpbroadcastq ymm10,QWORD PTR[((192-128))+r15]
vpaddq ymm3,ymm3,YMMWORD PTR[((384-448))+r12]
vmovdqu YMMWORD PTR[(256-192)+rbx],ymm8
vmovdqu YMMWORD PTR[(288-192)+rbx],ymm0
lea rbx,QWORD PTR[8+rbx]
vpmuludq ymm13,ymm11,YMMWORD PTR[((160-128))+rsi]
vpaddq ymm1,ymm1,ymm13
vpmuludq ymm12,ymm11,YMMWORD PTR[((160-128))+r9]
vpaddq ymm2,ymm2,ymm12
vpmuludq ymm14,ymm11,YMMWORD PTR[((192-128))+r9]
vpaddq ymm3,ymm3,ymm14
vpmuludq ymm4,ymm11,YMMWORD PTR[((224-128))+r9]
vpbroadcastq ymm11,QWORD PTR[((224-128))+r15]
vpaddq ymm4,ymm4,YMMWORD PTR[((416-448))+r12]
vmovdqu YMMWORD PTR[(320-448)+r12],ymm1
vmovdqu YMMWORD PTR[(352-448)+r12],ymm2
vpmuludq ymm12,ymm10,YMMWORD PTR[((192-128))+rsi]
vpaddq ymm3,ymm3,ymm12
vpmuludq ymm14,ymm10,YMMWORD PTR[((192-128))+r9]
vpbroadcastq ymm0,QWORD PTR[((256-128))+r15]
vpaddq ymm4,ymm4,ymm14
vpmuludq ymm5,ymm10,YMMWORD PTR[((224-128))+r9]
vpbroadcastq ymm10,QWORD PTR[((0+8-128))+r15]
vpaddq ymm5,ymm5,YMMWORD PTR[((448-448))+r12]
vmovdqu YMMWORD PTR[(384-448)+r12],ymm3
vmovdqu YMMWORD PTR[(416-448)+r12],ymm4
lea r15,QWORD PTR[8+r15]
vpmuludq ymm12,ymm11,YMMWORD PTR[((224-128))+rsi]
vpaddq ymm5,ymm5,ymm12
vpmuludq ymm6,ymm11,YMMWORD PTR[((224-128))+r9]
vpaddq ymm6,ymm6,YMMWORD PTR[((480-448))+r12]
vpmuludq ymm7,ymm0,YMMWORD PTR[((256-128))+rsi]
vmovdqu YMMWORD PTR[(448-448)+r12],ymm5
vpaddq ymm7,ymm7,YMMWORD PTR[((512-448))+r12]
vmovdqu YMMWORD PTR[(480-448)+r12],ymm6
vmovdqu YMMWORD PTR[(512-448)+r12],ymm7
lea r12,QWORD PTR[8+r12]
dec r14d
jnz $L$OOP_SQR_1024
vmovdqu ymm8,YMMWORD PTR[256+rsp]
vmovdqu ymm1,YMMWORD PTR[288+rsp]
vmovdqu ymm2,YMMWORD PTR[320+rsp]
lea rbx,QWORD PTR[192+rsp]
vpsrlq ymm14,ymm8,29
vpand ymm8,ymm8,ymm15
vpsrlq ymm11,ymm1,29
vpand ymm1,ymm1,ymm15
vpermq ymm14,ymm14,093h
vpxor ymm9,ymm9,ymm9
vpermq ymm11,ymm11,093h
vpblendd ymm10,ymm14,ymm9,3
vpblendd ymm14,ymm11,ymm14,3
vpaddq ymm8,ymm8,ymm10
vpblendd ymm11,ymm9,ymm11,3
vpaddq ymm1,ymm1,ymm14
vpaddq ymm2,ymm2,ymm11
vmovdqu YMMWORD PTR[(288-192)+rbx],ymm1
vmovdqu YMMWORD PTR[(320-192)+rbx],ymm2
mov rax,QWORD PTR[rsp]
mov r10,QWORD PTR[8+rsp]
mov r11,QWORD PTR[16+rsp]
mov r12,QWORD PTR[24+rsp]
vmovdqu ymm1,YMMWORD PTR[32+rsp]
vmovdqu ymm2,YMMWORD PTR[((64-192))+rbx]
vmovdqu ymm3,YMMWORD PTR[((96-192))+rbx]
vmovdqu ymm4,YMMWORD PTR[((128-192))+rbx]
vmovdqu ymm5,YMMWORD PTR[((160-192))+rbx]
vmovdqu ymm6,YMMWORD PTR[((192-192))+rbx]
vmovdqu ymm7,YMMWORD PTR[((224-192))+rbx]
mov r9,rax
imul eax,ecx
and eax,01fffffffh
vmovd xmm12,eax
mov rdx,rax
imul rax,QWORD PTR[((-128))+r13]
vpbroadcastq ymm12,xmm12
add r9,rax
mov rax,rdx
imul rax,QWORD PTR[((8-128))+r13]
shr r9,29
add r10,rax
mov rax,rdx
imul rax,QWORD PTR[((16-128))+r13]
add r10,r9
add r11,rax
imul rdx,QWORD PTR[((24-128))+r13]
add r12,rdx
mov rax,r10
imul eax,ecx
and eax,01fffffffh
mov r14d,9
jmp $L$OOP_REDUCE_1024
ALIGN 32
$L$OOP_REDUCE_1024::
vmovd xmm13,eax
vpbroadcastq ymm13,xmm13
vpmuludq ymm10,ymm12,YMMWORD PTR[((32-128))+r13]
mov rdx,rax
imul rax,QWORD PTR[((-128))+r13]
vpaddq ymm1,ymm1,ymm10
add r10,rax
vpmuludq ymm14,ymm12,YMMWORD PTR[((64-128))+r13]
mov rax,rdx
imul rax,QWORD PTR[((8-128))+r13]
vpaddq ymm2,ymm2,ymm14
vpmuludq ymm11,ymm12,YMMWORD PTR[((96-128))+r13]
DB 067h
add r11,rax
DB 067h
mov rax,rdx
imul rax,QWORD PTR[((16-128))+r13]
shr r10,29
vpaddq ymm3,ymm3,ymm11
vpmuludq ymm10,ymm12,YMMWORD PTR[((128-128))+r13]
add r12,rax
add r11,r10
vpaddq ymm4,ymm4,ymm10
vpmuludq ymm14,ymm12,YMMWORD PTR[((160-128))+r13]
mov rax,r11
imul eax,ecx
vpaddq ymm5,ymm5,ymm14
vpmuludq ymm11,ymm12,YMMWORD PTR[((192-128))+r13]
and eax,01fffffffh
vpaddq ymm6,ymm6,ymm11
vpmuludq ymm10,ymm12,YMMWORD PTR[((224-128))+r13]
vpaddq ymm7,ymm7,ymm10
vpmuludq ymm14,ymm12,YMMWORD PTR[((256-128))+r13]
vmovd xmm12,eax
vpaddq ymm8,ymm8,ymm14
vpbroadcastq ymm12,xmm12
vpmuludq ymm11,ymm13,YMMWORD PTR[((32-8-128))+r13]
vmovdqu ymm14,YMMWORD PTR[((96-8-128))+r13]
mov rdx,rax
imul rax,QWORD PTR[((-128))+r13]
vpaddq ymm1,ymm1,ymm11
vpmuludq ymm10,ymm13,YMMWORD PTR[((64-8-128))+r13]
vmovdqu ymm11,YMMWORD PTR[((128-8-128))+r13]
add r11,rax
mov rax,rdx
imul rax,QWORD PTR[((8-128))+r13]
vpaddq ymm2,ymm2,ymm10
add rax,r12
shr r11,29
vpmuludq ymm14,ymm14,ymm13
vmovdqu ymm10,YMMWORD PTR[((160-8-128))+r13]
add rax,r11
vpaddq ymm3,ymm3,ymm14
vpmuludq ymm11,ymm11,ymm13
vmovdqu ymm14,YMMWORD PTR[((192-8-128))+r13]
DB 067h
mov r12,rax
imul eax,ecx
vpaddq ymm4,ymm4,ymm11
vpmuludq ymm10,ymm10,ymm13
DB 0c4h,041h,07eh,06fh,09dh,058h,000h,000h,000h
and eax,01fffffffh
vpaddq ymm5,ymm5,ymm10
vpmuludq ymm14,ymm14,ymm13
vmovdqu ymm10,YMMWORD PTR[((256-8-128))+r13]
vpaddq ymm6,ymm6,ymm14
vpmuludq ymm11,ymm11,ymm13
vmovdqu ymm9,YMMWORD PTR[((288-8-128))+r13]
vmovd xmm0,eax
imul rax,QWORD PTR[((-128))+r13]
vpaddq ymm7,ymm7,ymm11
vpmuludq ymm10,ymm10,ymm13
vmovdqu ymm14,YMMWORD PTR[((32-16-128))+r13]
vpbroadcastq ymm0,xmm0
vpaddq ymm8,ymm8,ymm10
vpmuludq ymm9,ymm9,ymm13
vmovdqu ymm11,YMMWORD PTR[((64-16-128))+r13]
add r12,rax
vmovdqu ymm13,YMMWORD PTR[((32-24-128))+r13]
vpmuludq ymm14,ymm14,ymm12
vmovdqu ymm10,YMMWORD PTR[((96-16-128))+r13]
vpaddq ymm1,ymm1,ymm14
vpmuludq ymm13,ymm13,ymm0
vpmuludq ymm11,ymm11,ymm12
DB 0c4h,041h,07eh,06fh,0b5h,0f0h,0ffh,0ffh,0ffh
vpaddq ymm13,ymm13,ymm1
vpaddq ymm2,ymm2,ymm11
vpmuludq ymm10,ymm10,ymm12
vmovdqu ymm11,YMMWORD PTR[((160-16-128))+r13]
DB 067h
vmovq rax,xmm13
vmovdqu YMMWORD PTR[rsp],ymm13
vpaddq ymm3,ymm3,ymm10
vpmuludq ymm14,ymm14,ymm12
vmovdqu ymm10,YMMWORD PTR[((192-16-128))+r13]
vpaddq ymm4,ymm4,ymm14
vpmuludq ymm11,ymm11,ymm12
vmovdqu ymm14,YMMWORD PTR[((224-16-128))+r13]
vpaddq ymm5,ymm5,ymm11
vpmuludq ymm10,ymm10,ymm12
vmovdqu ymm11,YMMWORD PTR[((256-16-128))+r13]
vpaddq ymm6,ymm6,ymm10
vpmuludq ymm14,ymm14,ymm12
shr r12,29
vmovdqu ymm10,YMMWORD PTR[((288-16-128))+r13]
add rax,r12
vpaddq ymm7,ymm7,ymm14
vpmuludq ymm11,ymm11,ymm12
mov r9,rax
imul eax,ecx
vpaddq ymm8,ymm8,ymm11
vpmuludq ymm10,ymm10,ymm12
and eax,01fffffffh
vmovd xmm12,eax
vmovdqu ymm11,YMMWORD PTR[((96-24-128))+r13]
DB 067h
vpaddq ymm9,ymm9,ymm10
vpbroadcastq ymm12,xmm12
vpmuludq ymm14,ymm0,YMMWORD PTR[((64-24-128))+r13]
vmovdqu ymm10,YMMWORD PTR[((128-24-128))+r13]
mov rdx,rax
imul rax,QWORD PTR[((-128))+r13]
mov r10,QWORD PTR[8+rsp]
vpaddq ymm1,ymm2,ymm14
vpmuludq ymm11,ymm11,ymm0
vmovdqu ymm14,YMMWORD PTR[((160-24-128))+r13]
add r9,rax
mov rax,rdx
imul rax,QWORD PTR[((8-128))+r13]
DB 067h
shr r9,29
mov r11,QWORD PTR[16+rsp]
vpaddq ymm2,ymm3,ymm11
vpmuludq ymm10,ymm10,ymm0
vmovdqu ymm11,YMMWORD PTR[((192-24-128))+r13]
add r10,rax
mov rax,rdx
imul rax,QWORD PTR[((16-128))+r13]
vpaddq ymm3,ymm4,ymm10
vpmuludq ymm14,ymm14,ymm0
vmovdqu ymm10,YMMWORD PTR[((224-24-128))+r13]
imul rdx,QWORD PTR[((24-128))+r13]
add r11,rax
lea rax,QWORD PTR[r10*1+r9]
vpaddq ymm4,ymm5,ymm14
vpmuludq ymm11,ymm11,ymm0
vmovdqu ymm14,YMMWORD PTR[((256-24-128))+r13]
mov r10,rax
imul eax,ecx
vpmuludq ymm10,ymm10,ymm0
vpaddq ymm5,ymm6,ymm11
vmovdqu ymm11,YMMWORD PTR[((288-24-128))+r13]
and eax,01fffffffh
vpaddq ymm6,ymm7,ymm10
vpmuludq ymm14,ymm14,ymm0
add rdx,QWORD PTR[24+rsp]
vpaddq ymm7,ymm8,ymm14
vpmuludq ymm11,ymm11,ymm0
vpaddq ymm8,ymm9,ymm11
vmovq xmm9,r12
mov r12,rdx
dec r14d
jnz $L$OOP_REDUCE_1024
lea r12,QWORD PTR[448+rsp]
vpaddq ymm0,ymm13,ymm9
vpxor ymm9,ymm9,ymm9
vpaddq ymm0,ymm0,YMMWORD PTR[((288-192))+rbx]
vpaddq ymm1,ymm1,YMMWORD PTR[((320-448))+r12]
vpaddq ymm2,ymm2,YMMWORD PTR[((352-448))+r12]
vpaddq ymm3,ymm3,YMMWORD PTR[((384-448))+r12]
vpaddq ymm4,ymm4,YMMWORD PTR[((416-448))+r12]
vpaddq ymm5,ymm5,YMMWORD PTR[((448-448))+r12]
vpaddq ymm6,ymm6,YMMWORD PTR[((480-448))+r12]
vpaddq ymm7,ymm7,YMMWORD PTR[((512-448))+r12]
vpaddq ymm8,ymm8,YMMWORD PTR[((544-448))+r12]
vpsrlq ymm14,ymm0,29
vpand ymm0,ymm0,ymm15
vpsrlq ymm11,ymm1,29
vpand ymm1,ymm1,ymm15
vpsrlq ymm12,ymm2,29
vpermq ymm14,ymm14,093h
vpand ymm2,ymm2,ymm15
vpsrlq ymm13,ymm3,29
vpermq ymm11,ymm11,093h
vpand ymm3,ymm3,ymm15
vpermq ymm12,ymm12,093h
vpblendd ymm10,ymm14,ymm9,3
vpermq ymm13,ymm13,093h
vpblendd ymm14,ymm11,ymm14,3
vpaddq ymm0,ymm0,ymm10
vpblendd ymm11,ymm12,ymm11,3
vpaddq ymm1,ymm1,ymm14
vpblendd ymm12,ymm13,ymm12,3
vpaddq ymm2,ymm2,ymm11
vpblendd ymm13,ymm9,ymm13,3
vpaddq ymm3,ymm3,ymm12
vpaddq ymm4,ymm4,ymm13
vpsrlq ymm14,ymm0,29
vpand ymm0,ymm0,ymm15
vpsrlq ymm11,ymm1,29
vpand ymm1,ymm1,ymm15
vpsrlq ymm12,ymm2,29
vpermq ymm14,ymm14,093h
vpand ymm2,ymm2,ymm15
vpsrlq ymm13,ymm3,29
vpermq ymm11,ymm11,093h
vpand ymm3,ymm3,ymm15
vpermq ymm12,ymm12,093h
vpblendd ymm10,ymm14,ymm9,3
vpermq ymm13,ymm13,093h
vpblendd ymm14,ymm11,ymm14,3
vpaddq ymm0,ymm0,ymm10
vpblendd ymm11,ymm12,ymm11,3
vpaddq ymm1,ymm1,ymm14
vmovdqu YMMWORD PTR[(0-128)+rdi],ymm0
vpblendd ymm12,ymm13,ymm12,3
vpaddq ymm2,ymm2,ymm11
vmovdqu YMMWORD PTR[(32-128)+rdi],ymm1
vpblendd ymm13,ymm9,ymm13,3
vpaddq ymm3,ymm3,ymm12
vmovdqu YMMWORD PTR[(64-128)+rdi],ymm2
vpaddq ymm4,ymm4,ymm13
vmovdqu YMMWORD PTR[(96-128)+rdi],ymm3
vpsrlq ymm14,ymm4,29
vpand ymm4,ymm4,ymm15
vpsrlq ymm11,ymm5,29
vpand ymm5,ymm5,ymm15
vpsrlq ymm12,ymm6,29
vpermq ymm14,ymm14,093h
vpand ymm6,ymm6,ymm15
vpsrlq ymm13,ymm7,29
vpermq ymm11,ymm11,093h
vpand ymm7,ymm7,ymm15
vpsrlq ymm0,ymm8,29
vpermq ymm12,ymm12,093h
vpand ymm8,ymm8,ymm15
vpermq ymm13,ymm13,093h
vpblendd ymm10,ymm14,ymm9,3
vpermq ymm0,ymm0,093h
vpblendd ymm14,ymm11,ymm14,3
vpaddq ymm4,ymm4,ymm10
vpblendd ymm11,ymm12,ymm11,3
vpaddq ymm5,ymm5,ymm14
vpblendd ymm12,ymm13,ymm12,3
vpaddq ymm6,ymm6,ymm11
vpblendd ymm13,ymm0,ymm13,3
vpaddq ymm7,ymm7,ymm12
vpaddq ymm8,ymm8,ymm13
vpsrlq ymm14,ymm4,29
vpand ymm4,ymm4,ymm15
vpsrlq ymm11,ymm5,29
vpand ymm5,ymm5,ymm15
vpsrlq ymm12,ymm6,29
vpermq ymm14,ymm14,093h
vpand ymm6,ymm6,ymm15
vpsrlq ymm13,ymm7,29
vpermq ymm11,ymm11,093h
vpand ymm7,ymm7,ymm15
vpsrlq ymm0,ymm8,29
vpermq ymm12,ymm12,093h
vpand ymm8,ymm8,ymm15
vpermq ymm13,ymm13,093h
vpblendd ymm10,ymm14,ymm9,3
vpermq ymm0,ymm0,093h
vpblendd ymm14,ymm11,ymm14,3
vpaddq ymm4,ymm4,ymm10
vpblendd ymm11,ymm12,ymm11,3
vpaddq ymm5,ymm5,ymm14
vmovdqu YMMWORD PTR[(128-128)+rdi],ymm4
vpblendd ymm12,ymm13,ymm12,3
vpaddq ymm6,ymm6,ymm11
vmovdqu YMMWORD PTR[(160-128)+rdi],ymm5
vpblendd ymm13,ymm0,ymm13,3
vpaddq ymm7,ymm7,ymm12
vmovdqu YMMWORD PTR[(192-128)+rdi],ymm6
vpaddq ymm8,ymm8,ymm13
vmovdqu YMMWORD PTR[(224-128)+rdi],ymm7
vmovdqu YMMWORD PTR[(256-128)+rdi],ymm8
mov rsi,rdi
dec r8d
jne $L$OOP_GRANDE_SQR_1024
vzeroall
mov rax,rbp
movaps xmm6,XMMWORD PTR[((-216))+rax]
movaps xmm7,XMMWORD PTR[((-200))+rax]
movaps xmm8,XMMWORD PTR[((-184))+rax]
movaps xmm9,XMMWORD PTR[((-168))+rax]
movaps xmm10,XMMWORD PTR[((-152))+rax]
movaps xmm11,XMMWORD PTR[((-136))+rax]
movaps xmm12,XMMWORD PTR[((-120))+rax]
movaps xmm13,XMMWORD PTR[((-104))+rax]
movaps xmm14,XMMWORD PTR[((-88))+rax]
movaps xmm15,XMMWORD PTR[((-72))+rax]
mov r15,QWORD PTR[((-48))+rax]
mov r14,QWORD PTR[((-40))+rax]
mov r13,QWORD PTR[((-32))+rax]
mov r12,QWORD PTR[((-24))+rax]
mov rbp,QWORD PTR[((-16))+rax]
mov rbx,QWORD PTR[((-8))+rax]
lea rsp,QWORD PTR[rax]
$L$sqr_1024_epilogue::
mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
mov rsi,QWORD PTR[16+rsp]
DB 0F3h,0C3h ;repret
$L$SEH_end_rsaz_1024_sqr_avx2::
rsaz_1024_sqr_avx2 ENDP
PUBLIC rsaz_1024_mul_avx2
ALIGN 64
rsaz_1024_mul_avx2 PROC PUBLIC
mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
mov QWORD PTR[16+rsp],rsi
mov rax,rsp
$L$SEH_begin_rsaz_1024_mul_avx2::
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
mov rcx,r9
mov r8,QWORD PTR[40+rsp]
lea rax,QWORD PTR[rsp]
push rbx
push rbp
push r12
push r13
push r14
push r15
vzeroupper
lea rsp,QWORD PTR[((-168))+rsp]
vmovaps XMMWORD PTR[(-216)+rax],xmm6
vmovaps XMMWORD PTR[(-200)+rax],xmm7
vmovaps XMMWORD PTR[(-184)+rax],xmm8
vmovaps XMMWORD PTR[(-168)+rax],xmm9
vmovaps XMMWORD PTR[(-152)+rax],xmm10
vmovaps XMMWORD PTR[(-136)+rax],xmm11
vmovaps XMMWORD PTR[(-120)+rax],xmm12
vmovaps XMMWORD PTR[(-104)+rax],xmm13
vmovaps XMMWORD PTR[(-88)+rax],xmm14
vmovaps XMMWORD PTR[(-72)+rax],xmm15
$L$mul_1024_body::
mov rbp,rax
vzeroall
mov r13,rdx
sub rsp,64
DB 067h,067h
mov r15,rsi
and r15,4095
add r15,32*10
shr r15,12
mov r15,rsi
cmovnz rsi,r13
cmovnz r13,r15
mov r15,rcx
sub rsi,-128
sub rcx,-128
sub rdi,-128
and r15,4095
add r15,32*10
DB 067h,067h
shr r15,12
jz $L$mul_1024_no_n_copy
sub rsp,32*10
vmovdqu ymm0,YMMWORD PTR[((0-128))+rcx]
and rsp,-512
vmovdqu ymm1,YMMWORD PTR[((32-128))+rcx]
vmovdqu ymm2,YMMWORD PTR[((64-128))+rcx]
vmovdqu ymm3,YMMWORD PTR[((96-128))+rcx]
vmovdqu ymm4,YMMWORD PTR[((128-128))+rcx]
vmovdqu ymm5,YMMWORD PTR[((160-128))+rcx]
vmovdqu ymm6,YMMWORD PTR[((192-128))+rcx]
vmovdqu ymm7,YMMWORD PTR[((224-128))+rcx]
vmovdqu ymm8,YMMWORD PTR[((256-128))+rcx]
lea rcx,QWORD PTR[((64+128))+rsp]
vmovdqu YMMWORD PTR[(0-128)+rcx],ymm0
vpxor ymm0,ymm0,ymm0
vmovdqu YMMWORD PTR[(32-128)+rcx],ymm1
vpxor ymm1,ymm1,ymm1
vmovdqu YMMWORD PTR[(64-128)+rcx],ymm2
vpxor ymm2,ymm2,ymm2
vmovdqu YMMWORD PTR[(96-128)+rcx],ymm3
vpxor ymm3,ymm3,ymm3
vmovdqu YMMWORD PTR[(128-128)+rcx],ymm4
vpxor ymm4,ymm4,ymm4
vmovdqu YMMWORD PTR[(160-128)+rcx],ymm5
vpxor ymm5,ymm5,ymm5
vmovdqu YMMWORD PTR[(192-128)+rcx],ymm6
vpxor ymm6,ymm6,ymm6
vmovdqu YMMWORD PTR[(224-128)+rcx],ymm7
vpxor ymm7,ymm7,ymm7
vmovdqu YMMWORD PTR[(256-128)+rcx],ymm8
vmovdqa ymm8,ymm0
vmovdqu YMMWORD PTR[(288-128)+rcx],ymm9
$L$mul_1024_no_n_copy::
and rsp,-64
mov rbx,QWORD PTR[r13]
vpbroadcastq ymm10,QWORD PTR[r13]
vmovdqu YMMWORD PTR[rsp],ymm0
xor r9,r9
DB 067h
xor r10,r10
xor r11,r11
xor r12,r12
vmovdqu ymm15,YMMWORD PTR[$L$and_mask]
mov r14d,9
vmovdqu YMMWORD PTR[(288-128)+rdi],ymm9
jmp $L$oop_mul_1024
ALIGN 32
$L$oop_mul_1024::
vpsrlq ymm9,ymm3,29
mov rax,rbx
imul rax,QWORD PTR[((-128))+rsi]
add rax,r9
mov r10,rbx
imul r10,QWORD PTR[((8-128))+rsi]
add r10,QWORD PTR[8+rsp]
mov r9,rax
imul eax,r8d
and eax,01fffffffh
mov r11,rbx
imul r11,QWORD PTR[((16-128))+rsi]
add r11,QWORD PTR[16+rsp]
mov r12,rbx
imul r12,QWORD PTR[((24-128))+rsi]
add r12,QWORD PTR[24+rsp]
vpmuludq ymm0,ymm10,YMMWORD PTR[((32-128))+rsi]
vmovd xmm11,eax
vpaddq ymm1,ymm1,ymm0
vpmuludq ymm12,ymm10,YMMWORD PTR[((64-128))+rsi]
vpbroadcastq ymm11,xmm11
vpaddq ymm2,ymm2,ymm12
vpmuludq ymm13,ymm10,YMMWORD PTR[((96-128))+rsi]
vpand ymm3,ymm3,ymm15
vpaddq ymm3,ymm3,ymm13
vpmuludq ymm0,ymm10,YMMWORD PTR[((128-128))+rsi]
vpaddq ymm4,ymm4,ymm0
vpmuludq ymm12,ymm10,YMMWORD PTR[((160-128))+rsi]
vpaddq ymm5,ymm5,ymm12
vpmuludq ymm13,ymm10,YMMWORD PTR[((192-128))+rsi]
vpaddq ymm6,ymm6,ymm13
vpmuludq ymm0,ymm10,YMMWORD PTR[((224-128))+rsi]
vpermq ymm9,ymm9,093h
vpaddq ymm7,ymm7,ymm0
vpmuludq ymm12,ymm10,YMMWORD PTR[((256-128))+rsi]
vpbroadcastq ymm10,QWORD PTR[8+r13]
vpaddq ymm8,ymm8,ymm12
mov rdx,rax
imul rax,QWORD PTR[((-128))+rcx]
add r9,rax
mov rax,rdx
imul rax,QWORD PTR[((8-128))+rcx]
add r10,rax
mov rax,rdx
imul rax,QWORD PTR[((16-128))+rcx]
add r11,rax
shr r9,29
imul rdx,QWORD PTR[((24-128))+rcx]
add r12,rdx
add r10,r9
vpmuludq ymm13,ymm11,YMMWORD PTR[((32-128))+rcx]
vmovq rbx,xmm10
vpaddq ymm1,ymm1,ymm13
vpmuludq ymm0,ymm11,YMMWORD PTR[((64-128))+rcx]
vpaddq ymm2,ymm2,ymm0
vpmuludq ymm12,ymm11,YMMWORD PTR[((96-128))+rcx]
vpaddq ymm3,ymm3,ymm12
vpmuludq ymm13,ymm11,YMMWORD PTR[((128-128))+rcx]
vpaddq ymm4,ymm4,ymm13
vpmuludq ymm0,ymm11,YMMWORD PTR[((160-128))+rcx]
vpaddq ymm5,ymm5,ymm0
vpmuludq ymm12,ymm11,YMMWORD PTR[((192-128))+rcx]
vpaddq ymm6,ymm6,ymm12
vpmuludq ymm13,ymm11,YMMWORD PTR[((224-128))+rcx]
vpblendd ymm9,ymm9,ymm14,3
vpaddq ymm7,ymm7,ymm13
vpmuludq ymm0,ymm11,YMMWORD PTR[((256-128))+rcx]
vpaddq ymm3,ymm3,ymm9
vpaddq ymm8,ymm8,ymm0
mov rax,rbx
imul rax,QWORD PTR[((-128))+rsi]
add r10,rax
vmovdqu ymm12,YMMWORD PTR[((-8+32-128))+rsi]
mov rax,rbx
imul rax,QWORD PTR[((8-128))+rsi]
add r11,rax
vmovdqu ymm13,YMMWORD PTR[((-8+64-128))+rsi]
mov rax,r10
imul eax,r8d
and eax,01fffffffh
imul rbx,QWORD PTR[((16-128))+rsi]
add r12,rbx
vpmuludq ymm12,ymm12,ymm10
vmovd xmm11,eax
vmovdqu ymm0,YMMWORD PTR[((-8+96-128))+rsi]
vpaddq ymm1,ymm1,ymm12
vpmuludq ymm13,ymm13,ymm10
vpbroadcastq ymm11,xmm11
vmovdqu ymm12,YMMWORD PTR[((-8+128-128))+rsi]
vpaddq ymm2,ymm2,ymm13
vpmuludq ymm0,ymm0,ymm10
vmovdqu ymm13,YMMWORD PTR[((-8+160-128))+rsi]
vpaddq ymm3,ymm3,ymm0
vpmuludq ymm12,ymm12,ymm10
vmovdqu ymm0,YMMWORD PTR[((-8+192-128))+rsi]
vpaddq ymm4,ymm4,ymm12
vpmuludq ymm13,ymm13,ymm10
vmovdqu ymm12,YMMWORD PTR[((-8+224-128))+rsi]
vpaddq ymm5,ymm5,ymm13
vpmuludq ymm0,ymm0,ymm10
vmovdqu ymm13,YMMWORD PTR[((-8+256-128))+rsi]
vpaddq ymm6,ymm6,ymm0
vpmuludq ymm12,ymm12,ymm10
vmovdqu ymm9,YMMWORD PTR[((-8+288-128))+rsi]
vpaddq ymm7,ymm7,ymm12
vpmuludq ymm13,ymm13,ymm10
vpaddq ymm8,ymm8,ymm13
vpmuludq ymm9,ymm9,ymm10
vpbroadcastq ymm10,QWORD PTR[16+r13]
mov rdx,rax
imul rax,QWORD PTR[((-128))+rcx]
add r10,rax
vmovdqu ymm0,YMMWORD PTR[((-8+32-128))+rcx]
mov rax,rdx
imul rax,QWORD PTR[((8-128))+rcx]
add r11,rax
vmovdqu ymm12,YMMWORD PTR[((-8+64-128))+rcx]
shr r10,29
imul rdx,QWORD PTR[((16-128))+rcx]
add r12,rdx
add r11,r10
vpmuludq ymm0,ymm0,ymm11
vmovq rbx,xmm10
vmovdqu ymm13,YMMWORD PTR[((-8+96-128))+rcx]
vpaddq ymm1,ymm1,ymm0
vpmuludq ymm12,ymm12,ymm11
vmovdqu ymm0,YMMWORD PTR[((-8+128-128))+rcx]
vpaddq ymm2,ymm2,ymm12
vpmuludq ymm13,ymm13,ymm11
vmovdqu ymm12,YMMWORD PTR[((-8+160-128))+rcx]
vpaddq ymm3,ymm3,ymm13
vpmuludq ymm0,ymm0,ymm11
vmovdqu ymm13,YMMWORD PTR[((-8+192-128))+rcx]
vpaddq ymm4,ymm4,ymm0
vpmuludq ymm12,ymm12,ymm11
vmovdqu ymm0,YMMWORD PTR[((-8+224-128))+rcx]
vpaddq ymm5,ymm5,ymm12
vpmuludq ymm13,ymm13,ymm11
vmovdqu ymm12,YMMWORD PTR[((-8+256-128))+rcx]
vpaddq ymm6,ymm6,ymm13
vpmuludq ymm0,ymm0,ymm11
vmovdqu ymm13,YMMWORD PTR[((-8+288-128))+rcx]
vpaddq ymm7,ymm7,ymm0
vpmuludq ymm12,ymm12,ymm11
vpaddq ymm8,ymm8,ymm12
vpmuludq ymm13,ymm13,ymm11
vpaddq ymm9,ymm9,ymm13
vmovdqu ymm0,YMMWORD PTR[((-16+32-128))+rsi]
mov rax,rbx
imul rax,QWORD PTR[((-128))+rsi]
add rax,r11
vmovdqu ymm12,YMMWORD PTR[((-16+64-128))+rsi]
mov r11,rax
imul eax,r8d
and eax,01fffffffh
imul rbx,QWORD PTR[((8-128))+rsi]
add r12,rbx
vpmuludq ymm0,ymm0,ymm10
vmovd xmm11,eax
vmovdqu ymm13,YMMWORD PTR[((-16+96-128))+rsi]
vpaddq ymm1,ymm1,ymm0
vpmuludq ymm12,ymm12,ymm10
vpbroadcastq ymm11,xmm11
vmovdqu ymm0,YMMWORD PTR[((-16+128-128))+rsi]
vpaddq ymm2,ymm2,ymm12
vpmuludq ymm13,ymm13,ymm10
vmovdqu ymm12,YMMWORD PTR[((-16+160-128))+rsi]
vpaddq ymm3,ymm3,ymm13
vpmuludq ymm0,ymm0,ymm10
vmovdqu ymm13,YMMWORD PTR[((-16+192-128))+rsi]
vpaddq ymm4,ymm4,ymm0
vpmuludq ymm12,ymm12,ymm10
vmovdqu ymm0,YMMWORD PTR[((-16+224-128))+rsi]
vpaddq ymm5,ymm5,ymm12
vpmuludq ymm13,ymm13,ymm10
vmovdqu ymm12,YMMWORD PTR[((-16+256-128))+rsi]
vpaddq ymm6,ymm6,ymm13
vpmuludq ymm0,ymm0,ymm10
vmovdqu ymm13,YMMWORD PTR[((-16+288-128))+rsi]
vpaddq ymm7,ymm7,ymm0
vpmuludq ymm12,ymm12,ymm10
vpaddq ymm8,ymm8,ymm12
vpmuludq ymm13,ymm13,ymm10
vpbroadcastq ymm10,QWORD PTR[24+r13]
vpaddq ymm9,ymm9,ymm13
vmovdqu ymm0,YMMWORD PTR[((-16+32-128))+rcx]
mov rdx,rax
imul rax,QWORD PTR[((-128))+rcx]
add r11,rax
vmovdqu ymm12,YMMWORD PTR[((-16+64-128))+rcx]
imul rdx,QWORD PTR[((8-128))+rcx]
add r12,rdx
shr r11,29
vpmuludq ymm0,ymm0,ymm11
vmovq rbx,xmm10
vmovdqu ymm13,YMMWORD PTR[((-16+96-128))+rcx]
vpaddq ymm1,ymm1,ymm0
vpmuludq ymm12,ymm12,ymm11
vmovdqu ymm0,YMMWORD PTR[((-16+128-128))+rcx]
vpaddq ymm2,ymm2,ymm12
vpmuludq ymm13,ymm13,ymm11
vmovdqu ymm12,YMMWORD PTR[((-16+160-128))+rcx]
vpaddq ymm3,ymm3,ymm13
vpmuludq ymm0,ymm0,ymm11
vmovdqu ymm13,YMMWORD PTR[((-16+192-128))+rcx]
vpaddq ymm4,ymm4,ymm0
vpmuludq ymm12,ymm12,ymm11
vmovdqu ymm0,YMMWORD PTR[((-16+224-128))+rcx]
vpaddq ymm5,ymm5,ymm12
vpmuludq ymm13,ymm13,ymm11
vmovdqu ymm12,YMMWORD PTR[((-16+256-128))+rcx]
vpaddq ymm6,ymm6,ymm13
vpmuludq ymm0,ymm0,ymm11
vmovdqu ymm13,YMMWORD PTR[((-16+288-128))+rcx]
vpaddq ymm7,ymm7,ymm0
vpmuludq ymm12,ymm12,ymm11
vmovdqu ymm0,YMMWORD PTR[((-24+32-128))+rsi]
vpaddq ymm8,ymm8,ymm12
vpmuludq ymm13,ymm13,ymm11
vmovdqu ymm12,YMMWORD PTR[((-24+64-128))+rsi]
vpaddq ymm9,ymm9,ymm13
add r12,r11
imul rbx,QWORD PTR[((-128))+rsi]
add r12,rbx
mov rax,r12
imul eax,r8d
and eax,01fffffffh
vpmuludq ymm0,ymm0,ymm10
vmovd xmm11,eax
vmovdqu ymm13,YMMWORD PTR[((-24+96-128))+rsi]
vpaddq ymm1,ymm1,ymm0
vpmuludq ymm12,ymm12,ymm10
vpbroadcastq ymm11,xmm11
vmovdqu ymm0,YMMWORD PTR[((-24+128-128))+rsi]
vpaddq ymm2,ymm2,ymm12
vpmuludq ymm13,ymm13,ymm10
vmovdqu ymm12,YMMWORD PTR[((-24+160-128))+rsi]
vpaddq ymm3,ymm3,ymm13
vpmuludq ymm0,ymm0,ymm10
vmovdqu ymm13,YMMWORD PTR[((-24+192-128))+rsi]
vpaddq ymm4,ymm4,ymm0
vpmuludq ymm12,ymm12,ymm10
vmovdqu ymm0,YMMWORD PTR[((-24+224-128))+rsi]
vpaddq ymm5,ymm5,ymm12
vpmuludq ymm13,ymm13,ymm10
vmovdqu ymm12,YMMWORD PTR[((-24+256-128))+rsi]
vpaddq ymm6,ymm6,ymm13
vpmuludq ymm0,ymm0,ymm10
vmovdqu ymm13,YMMWORD PTR[((-24+288-128))+rsi]
vpaddq ymm7,ymm7,ymm0
vpmuludq ymm12,ymm12,ymm10
vpaddq ymm8,ymm8,ymm12
vpmuludq ymm13,ymm13,ymm10
vpbroadcastq ymm10,QWORD PTR[32+r13]
vpaddq ymm9,ymm9,ymm13
add r13,32
vmovdqu ymm0,YMMWORD PTR[((-24+32-128))+rcx]
imul rax,QWORD PTR[((-128))+rcx]
add r12,rax
shr r12,29
vmovdqu ymm12,YMMWORD PTR[((-24+64-128))+rcx]
vpmuludq ymm0,ymm0,ymm11
vmovq rbx,xmm10
vmovdqu ymm13,YMMWORD PTR[((-24+96-128))+rcx]
vpaddq ymm0,ymm1,ymm0
vpmuludq ymm12,ymm12,ymm11
vmovdqu YMMWORD PTR[rsp],ymm0
vpaddq ymm1,ymm2,ymm12
vmovdqu ymm0,YMMWORD PTR[((-24+128-128))+rcx]
vpmuludq ymm13,ymm13,ymm11
vmovdqu ymm12,YMMWORD PTR[((-24+160-128))+rcx]
vpaddq ymm2,ymm3,ymm13
vpmuludq ymm0,ymm0,ymm11
vmovdqu ymm13,YMMWORD PTR[((-24+192-128))+rcx]
vpaddq ymm3,ymm4,ymm0
vpmuludq ymm12,ymm12,ymm11
vmovdqu ymm0,YMMWORD PTR[((-24+224-128))+rcx]
vpaddq ymm4,ymm5,ymm12
vpmuludq ymm13,ymm13,ymm11
vmovdqu ymm12,YMMWORD PTR[((-24+256-128))+rcx]
vpaddq ymm5,ymm6,ymm13
vpmuludq ymm0,ymm0,ymm11
vmovdqu ymm13,YMMWORD PTR[((-24+288-128))+rcx]
mov r9,r12
vpaddq ymm6,ymm7,ymm0
vpmuludq ymm12,ymm12,ymm11
add r9,QWORD PTR[rsp]
vpaddq ymm7,ymm8,ymm12
vpmuludq ymm13,ymm13,ymm11
vmovq xmm12,r12
vpaddq ymm8,ymm9,ymm13
dec r14d
jnz $L$oop_mul_1024
vpermq ymm15,ymm15,0
vpaddq ymm0,ymm12,YMMWORD PTR[rsp]
vpsrlq ymm12,ymm0,29
vpand ymm0,ymm0,ymm15
vpsrlq ymm13,ymm1,29
vpand ymm1,ymm1,ymm15
vpsrlq ymm10,ymm2,29
vpermq ymm12,ymm12,093h
vpand ymm2,ymm2,ymm15
vpsrlq ymm11,ymm3,29
vpermq ymm13,ymm13,093h
vpand ymm3,ymm3,ymm15
vpblendd ymm9,ymm12,ymm14,3
vpermq ymm10,ymm10,093h
vpblendd ymm12,ymm13,ymm12,3
vpermq ymm11,ymm11,093h
vpaddq ymm0,ymm0,ymm9
vpblendd ymm13,ymm10,ymm13,3
vpaddq ymm1,ymm1,ymm12
vpblendd ymm10,ymm11,ymm10,3
vpaddq ymm2,ymm2,ymm13
vpblendd ymm11,ymm14,ymm11,3
vpaddq ymm3,ymm3,ymm10
vpaddq ymm4,ymm4,ymm11
vpsrlq ymm12,ymm0,29
vpand ymm0,ymm0,ymm15
vpsrlq ymm13,ymm1,29
vpand ymm1,ymm1,ymm15
vpsrlq ymm10,ymm2,29
vpermq ymm12,ymm12,093h
vpand ymm2,ymm2,ymm15
vpsrlq ymm11,ymm3,29
vpermq ymm13,ymm13,093h
vpand ymm3,ymm3,ymm15
vpermq ymm10,ymm10,093h
vpblendd ymm9,ymm12,ymm14,3
vpermq ymm11,ymm11,093h
vpblendd ymm12,ymm13,ymm12,3
vpaddq ymm0,ymm0,ymm9
vpblendd ymm13,ymm10,ymm13,3
vpaddq ymm1,ymm1,ymm12
vpblendd ymm10,ymm11,ymm10,3
vpaddq ymm2,ymm2,ymm13
vpblendd ymm11,ymm14,ymm11,3
vpaddq ymm3,ymm3,ymm10
vpaddq ymm4,ymm4,ymm11
vmovdqu YMMWORD PTR[(0-128)+rdi],ymm0
vmovdqu YMMWORD PTR[(32-128)+rdi],ymm1
vmovdqu YMMWORD PTR[(64-128)+rdi],ymm2
vmovdqu YMMWORD PTR[(96-128)+rdi],ymm3
vpsrlq ymm12,ymm4,29
vpand ymm4,ymm4,ymm15
vpsrlq ymm13,ymm5,29
vpand ymm5,ymm5,ymm15
vpsrlq ymm10,ymm6,29
vpermq ymm12,ymm12,093h
vpand ymm6,ymm6,ymm15
vpsrlq ymm11,ymm7,29
vpermq ymm13,ymm13,093h
vpand ymm7,ymm7,ymm15
vpsrlq ymm0,ymm8,29
vpermq ymm10,ymm10,093h
vpand ymm8,ymm8,ymm15
vpermq ymm11,ymm11,093h
vpblendd ymm9,ymm12,ymm14,3
vpermq ymm0,ymm0,093h
vpblendd ymm12,ymm13,ymm12,3
vpaddq ymm4,ymm4,ymm9
vpblendd ymm13,ymm10,ymm13,3
vpaddq ymm5,ymm5,ymm12
vpblendd ymm10,ymm11,ymm10,3
vpaddq ymm6,ymm6,ymm13
vpblendd ymm11,ymm0,ymm11,3
vpaddq ymm7,ymm7,ymm10
vpaddq ymm8,ymm8,ymm11
vpsrlq ymm12,ymm4,29
vpand ymm4,ymm4,ymm15
vpsrlq ymm13,ymm5,29
vpand ymm5,ymm5,ymm15
vpsrlq ymm10,ymm6,29
vpermq ymm12,ymm12,093h
vpand ymm6,ymm6,ymm15
vpsrlq ymm11,ymm7,29
vpermq ymm13,ymm13,093h
vpand ymm7,ymm7,ymm15
vpsrlq ymm0,ymm8,29
vpermq ymm10,ymm10,093h
vpand ymm8,ymm8,ymm15
vpermq ymm11,ymm11,093h
vpblendd ymm9,ymm12,ymm14,3
vpermq ymm0,ymm0,093h
vpblendd ymm12,ymm13,ymm12,3
vpaddq ymm4,ymm4,ymm9
vpblendd ymm13,ymm10,ymm13,3
vpaddq ymm5,ymm5,ymm12
vpblendd ymm10,ymm11,ymm10,3
vpaddq ymm6,ymm6,ymm13
vpblendd ymm11,ymm0,ymm11,3
vpaddq ymm7,ymm7,ymm10
vpaddq ymm8,ymm8,ymm11
vmovdqu YMMWORD PTR[(128-128)+rdi],ymm4
vmovdqu YMMWORD PTR[(160-128)+rdi],ymm5
vmovdqu YMMWORD PTR[(192-128)+rdi],ymm6
vmovdqu YMMWORD PTR[(224-128)+rdi],ymm7
vmovdqu YMMWORD PTR[(256-128)+rdi],ymm8
vzeroupper
mov rax,rbp
movaps xmm6,XMMWORD PTR[((-216))+rax]
movaps xmm7,XMMWORD PTR[((-200))+rax]
movaps xmm8,XMMWORD PTR[((-184))+rax]
movaps xmm9,XMMWORD PTR[((-168))+rax]
movaps xmm10,XMMWORD PTR[((-152))+rax]
movaps xmm11,XMMWORD PTR[((-136))+rax]
movaps xmm12,XMMWORD PTR[((-120))+rax]
movaps xmm13,XMMWORD PTR[((-104))+rax]
movaps xmm14,XMMWORD PTR[((-88))+rax]
movaps xmm15,XMMWORD PTR[((-72))+rax]
mov r15,QWORD PTR[((-48))+rax]
mov r14,QWORD PTR[((-40))+rax]
mov r13,QWORD PTR[((-32))+rax]
mov r12,QWORD PTR[((-24))+rax]
mov rbp,QWORD PTR[((-16))+rax]
mov rbx,QWORD PTR[((-8))+rax]
lea rsp,QWORD PTR[rax]
$L$mul_1024_epilogue::
mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
mov rsi,QWORD PTR[16+rsp]
DB 0F3h,0C3h ;repret
$L$SEH_end_rsaz_1024_mul_avx2::
rsaz_1024_mul_avx2 ENDP
PUBLIC rsaz_1024_red2norm_avx2
ALIGN 32
rsaz_1024_red2norm_avx2 PROC PUBLIC
sub rdx,-128
xor rax,rax
mov r8,QWORD PTR[((-128))+rdx]
mov r9,QWORD PTR[((-120))+rdx]
mov r10,QWORD PTR[((-112))+rdx]
shl r8,0
shl r9,29
mov r11,r10
shl r10,58
shr r11,6
add rax,r8
add rax,r9
add rax,r10
adc r11,0
mov QWORD PTR[rcx],rax
mov rax,r11
mov r8,QWORD PTR[((-104))+rdx]
mov r9,QWORD PTR[((-96))+rdx]
shl r8,23
mov r10,r9
shl r9,52
shr r10,12
add rax,r8
add rax,r9
adc r10,0
mov QWORD PTR[8+rcx],rax
mov rax,r10
mov r11,QWORD PTR[((-88))+rdx]
mov r8,QWORD PTR[((-80))+rdx]
shl r11,17
mov r9,r8
shl r8,46
shr r9,18
add rax,r11
add rax,r8
adc r9,0
mov QWORD PTR[16+rcx],rax
mov rax,r9
mov r10,QWORD PTR[((-72))+rdx]
mov r11,QWORD PTR[((-64))+rdx]
shl r10,11
mov r8,r11
shl r11,40
shr r8,24
add rax,r10
add rax,r11
adc r8,0
mov QWORD PTR[24+rcx],rax
mov rax,r8
mov r9,QWORD PTR[((-56))+rdx]
mov r10,QWORD PTR[((-48))+rdx]
mov r11,QWORD PTR[((-40))+rdx]
shl r9,5
shl r10,34
mov r8,r11
shl r11,63
shr r8,1
add rax,r9
add rax,r10
add rax,r11
adc r8,0
mov QWORD PTR[32+rcx],rax
mov rax,r8
mov r9,QWORD PTR[((-32))+rdx]
mov r10,QWORD PTR[((-24))+rdx]
shl r9,28
mov r11,r10
shl r10,57
shr r11,7
add rax,r9
add rax,r10
adc r11,0
mov QWORD PTR[40+rcx],rax
mov rax,r11
mov r8,QWORD PTR[((-16))+rdx]
mov r9,QWORD PTR[((-8))+rdx]
shl r8,22
mov r10,r9
shl r9,51
shr r10,13
add rax,r8
add rax,r9
adc r10,0
mov QWORD PTR[48+rcx],rax
mov rax,r10
mov r11,QWORD PTR[rdx]
mov r8,QWORD PTR[8+rdx]
shl r11,16
mov r9,r8
shl r8,45
shr r9,19
add rax,r11
add rax,r8
adc r9,0
mov QWORD PTR[56+rcx],rax
mov rax,r9
mov r10,QWORD PTR[16+rdx]
mov r11,QWORD PTR[24+rdx]
shl r10,10
mov r8,r11
shl r11,39
shr r8,25
add rax,r10
add rax,r11
adc r8,0
mov QWORD PTR[64+rcx],rax
mov rax,r8
mov r9,QWORD PTR[32+rdx]
mov r10,QWORD PTR[40+rdx]
mov r11,QWORD PTR[48+rdx]
shl r9,4
shl r10,33
mov r8,r11
shl r11,62
shr r8,2
add rax,r9
add rax,r10
add rax,r11
adc r8,0
mov QWORD PTR[72+rcx],rax
mov rax,r8
mov r9,QWORD PTR[56+rdx]
mov r10,QWORD PTR[64+rdx]
shl r9,27
mov r11,r10
shl r10,56
shr r11,8
add rax,r9
add rax,r10
adc r11,0
mov QWORD PTR[80+rcx],rax
mov rax,r11
mov r8,QWORD PTR[72+rdx]
mov r9,QWORD PTR[80+rdx]
shl r8,21
mov r10,r9
shl r9,50
shr r10,14
add rax,r8
add rax,r9
adc r10,0
mov QWORD PTR[88+rcx],rax
mov rax,r10
mov r11,QWORD PTR[88+rdx]
mov r8,QWORD PTR[96+rdx]
shl r11,15
mov r9,r8
shl r8,44
shr r9,20
add rax,r11
add rax,r8
adc r9,0
mov QWORD PTR[96+rcx],rax
mov rax,r9
mov r10,QWORD PTR[104+rdx]
mov r11,QWORD PTR[112+rdx]
shl r10,9
mov r8,r11
shl r11,38
shr r8,26
add rax,r10
add rax,r11
adc r8,0
mov QWORD PTR[104+rcx],rax
mov rax,r8
mov r9,QWORD PTR[120+rdx]
mov r10,QWORD PTR[128+rdx]
mov r11,QWORD PTR[136+rdx]
shl r9,3
shl r10,32
mov r8,r11
shl r11,61
shr r8,3
add rax,r9
add rax,r10
add rax,r11
adc r8,0
mov QWORD PTR[112+rcx],rax
mov rax,r8
mov r9,QWORD PTR[144+rdx]
mov r10,QWORD PTR[152+rdx]
shl r9,26
mov r11,r10
shl r10,55
shr r11,9
add rax,r9
add rax,r10
adc r11,0
mov QWORD PTR[120+rcx],rax
mov rax,r11
DB 0F3h,0C3h ;repret
rsaz_1024_red2norm_avx2 ENDP
PUBLIC rsaz_1024_norm2red_avx2
ALIGN 32
rsaz_1024_norm2red_avx2 PROC PUBLIC
sub rcx,-128
mov r8,QWORD PTR[rdx]
mov eax,01fffffffh
mov r9,QWORD PTR[8+rdx]
mov r11,r8
shr r11,0
and r11,rax
mov QWORD PTR[((-128))+rcx],r11
mov r10,r8
shr r10,29
and r10,rax
mov QWORD PTR[((-120))+rcx],r10
shrd r8,r9,58
and r8,rax
mov QWORD PTR[((-112))+rcx],r8
mov r10,QWORD PTR[16+rdx]
mov r8,r9
shr r8,23
and r8,rax
mov QWORD PTR[((-104))+rcx],r8
shrd r9,r10,52
and r9,rax
mov QWORD PTR[((-96))+rcx],r9
mov r11,QWORD PTR[24+rdx]
mov r9,r10
shr r9,17
and r9,rax
mov QWORD PTR[((-88))+rcx],r9
shrd r10,r11,46
and r10,rax
mov QWORD PTR[((-80))+rcx],r10
mov r8,QWORD PTR[32+rdx]
mov r10,r11
shr r10,11
and r10,rax
mov QWORD PTR[((-72))+rcx],r10
shrd r11,r8,40
and r11,rax
mov QWORD PTR[((-64))+rcx],r11
mov r9,QWORD PTR[40+rdx]
mov r11,r8
shr r11,5
and r11,rax
mov QWORD PTR[((-56))+rcx],r11
mov r10,r8
shr r10,34
and r10,rax
mov QWORD PTR[((-48))+rcx],r10
shrd r8,r9,63
and r8,rax
mov QWORD PTR[((-40))+rcx],r8
mov r10,QWORD PTR[48+rdx]
mov r8,r9
shr r8,28
and r8,rax
mov QWORD PTR[((-32))+rcx],r8
shrd r9,r10,57
and r9,rax
mov QWORD PTR[((-24))+rcx],r9
mov r11,QWORD PTR[56+rdx]
mov r9,r10
shr r9,22
and r9,rax
mov QWORD PTR[((-16))+rcx],r9
shrd r10,r11,51
and r10,rax
mov QWORD PTR[((-8))+rcx],r10
mov r8,QWORD PTR[64+rdx]
mov r10,r11
shr r10,16
and r10,rax
mov QWORD PTR[rcx],r10
shrd r11,r8,45
and r11,rax
mov QWORD PTR[8+rcx],r11
mov r9,QWORD PTR[72+rdx]
mov r11,r8
shr r11,10
and r11,rax
mov QWORD PTR[16+rcx],r11
shrd r8,r9,39
and r8,rax
mov QWORD PTR[24+rcx],r8
mov r10,QWORD PTR[80+rdx]
mov r8,r9
shr r8,4
and r8,rax
mov QWORD PTR[32+rcx],r8
mov r11,r9
shr r11,33
and r11,rax
mov QWORD PTR[40+rcx],r11
shrd r9,r10,62
and r9,rax
mov QWORD PTR[48+rcx],r9
mov r11,QWORD PTR[88+rdx]
mov r9,r10
shr r9,27
and r9,rax
mov QWORD PTR[56+rcx],r9
shrd r10,r11,56
and r10,rax
mov QWORD PTR[64+rcx],r10
mov r8,QWORD PTR[96+rdx]
mov r10,r11
shr r10,21
and r10,rax
mov QWORD PTR[72+rcx],r10
shrd r11,r8,50
and r11,rax
mov QWORD PTR[80+rcx],r11
mov r9,QWORD PTR[104+rdx]
mov r11,r8
shr r11,15
and r11,rax
mov QWORD PTR[88+rcx],r11
shrd r8,r9,44
and r8,rax
mov QWORD PTR[96+rcx],r8
mov r10,QWORD PTR[112+rdx]
mov r8,r9
shr r8,9
and r8,rax
mov QWORD PTR[104+rcx],r8
shrd r9,r10,38
and r9,rax
mov QWORD PTR[112+rcx],r9
mov r11,QWORD PTR[120+rdx]
mov r9,r10
shr r9,3
and r9,rax
mov QWORD PTR[120+rcx],r9
mov r8,r10
shr r8,32
and r8,rax
mov QWORD PTR[128+rcx],r8
shrd r10,r11,61
and r10,rax
mov QWORD PTR[136+rcx],r10
xor r8,r8
mov r10,r11
shr r10,26
and r10,rax
mov QWORD PTR[144+rcx],r10
shrd r11,r8,55
and r11,rax
mov QWORD PTR[152+rcx],r11
mov QWORD PTR[160+rcx],r8
mov QWORD PTR[168+rcx],r8
mov QWORD PTR[176+rcx],r8
mov QWORD PTR[184+rcx],r8
DB 0F3h,0C3h ;repret
rsaz_1024_norm2red_avx2 ENDP
PUBLIC rsaz_1024_scatter5_avx2
ALIGN 32
rsaz_1024_scatter5_avx2 PROC PUBLIC
vzeroupper
vmovdqu ymm5,YMMWORD PTR[$L$scatter_permd]
shl r8d,4
lea rcx,QWORD PTR[r8*1+rcx]
mov eax,9
jmp $L$oop_scatter_1024
ALIGN 32
$L$oop_scatter_1024::
vmovdqu ymm0,YMMWORD PTR[rdx]
lea rdx,QWORD PTR[32+rdx]
vpermd ymm0,ymm5,ymm0
vmovdqu XMMWORD PTR[rcx],xmm0
lea rcx,QWORD PTR[512+rcx]
dec eax
jnz $L$oop_scatter_1024
vzeroupper
DB 0F3h,0C3h ;repret
rsaz_1024_scatter5_avx2 ENDP
PUBLIC rsaz_1024_gather5_avx2
ALIGN 32
rsaz_1024_gather5_avx2 PROC PUBLIC
vzeroupper
mov r11,rsp
lea rax,QWORD PTR[((-136))+rsp]
$L$SEH_begin_rsaz_1024_gather5::
DB 048h,08dh,060h,0e0h
DB 0c5h,0f8h,029h,070h,0e0h
DB 0c5h,0f8h,029h,078h,0f0h
DB 0c5h,078h,029h,040h,000h
DB 0c5h,078h,029h,048h,010h
DB 0c5h,078h,029h,050h,020h
DB 0c5h,078h,029h,058h,030h
DB 0c5h,078h,029h,060h,040h
DB 0c5h,078h,029h,068h,050h
DB 0c5h,078h,029h,070h,060h
DB 0c5h,078h,029h,078h,070h
lea rsp,QWORD PTR[((-256))+rsp]
and rsp,-32
lea r10,QWORD PTR[$L$inc]
lea rax,QWORD PTR[((-128))+rsp]
vmovd xmm4,r8d
vmovdqa ymm0,YMMWORD PTR[r10]
vmovdqa ymm1,YMMWORD PTR[32+r10]
vmovdqa ymm5,YMMWORD PTR[64+r10]
vpbroadcastd ymm4,xmm4
vpaddd ymm2,ymm0,ymm5
vpcmpeqd ymm0,ymm0,ymm4
vpaddd ymm3,ymm1,ymm5
vpcmpeqd ymm1,ymm1,ymm4
vmovdqa YMMWORD PTR[(0+128)+rax],ymm0
vpaddd ymm0,ymm2,ymm5
vpcmpeqd ymm2,ymm2,ymm4
vmovdqa YMMWORD PTR[(32+128)+rax],ymm1
vpaddd ymm1,ymm3,ymm5
vpcmpeqd ymm3,ymm3,ymm4
vmovdqa YMMWORD PTR[(64+128)+rax],ymm2
vpaddd ymm2,ymm0,ymm5
vpcmpeqd ymm0,ymm0,ymm4
vmovdqa YMMWORD PTR[(96+128)+rax],ymm3
vpaddd ymm3,ymm1,ymm5
vpcmpeqd ymm1,ymm1,ymm4
vmovdqa YMMWORD PTR[(128+128)+rax],ymm0
vpaddd ymm8,ymm2,ymm5
vpcmpeqd ymm2,ymm2,ymm4
vmovdqa YMMWORD PTR[(160+128)+rax],ymm1
vpaddd ymm9,ymm3,ymm5
vpcmpeqd ymm3,ymm3,ymm4
vmovdqa YMMWORD PTR[(192+128)+rax],ymm2
vpaddd ymm10,ymm8,ymm5
vpcmpeqd ymm8,ymm8,ymm4
vmovdqa YMMWORD PTR[(224+128)+rax],ymm3
vpaddd ymm11,ymm9,ymm5
vpcmpeqd ymm9,ymm9,ymm4
vpaddd ymm12,ymm10,ymm5
vpcmpeqd ymm10,ymm10,ymm4
vpaddd ymm13,ymm11,ymm5
vpcmpeqd ymm11,ymm11,ymm4
vpaddd ymm14,ymm12,ymm5
vpcmpeqd ymm12,ymm12,ymm4
vpaddd ymm15,ymm13,ymm5
vpcmpeqd ymm13,ymm13,ymm4
vpcmpeqd ymm14,ymm14,ymm4
vpcmpeqd ymm15,ymm15,ymm4
vmovdqa ymm7,YMMWORD PTR[((-32))+r10]
lea rdx,QWORD PTR[128+rdx]
mov r8d,9
$L$oop_gather_1024::
vmovdqa ymm0,YMMWORD PTR[((0-128))+rdx]
vmovdqa ymm1,YMMWORD PTR[((32-128))+rdx]
vmovdqa ymm2,YMMWORD PTR[((64-128))+rdx]
vmovdqa ymm3,YMMWORD PTR[((96-128))+rdx]
vpand ymm0,ymm0,YMMWORD PTR[((0+128))+rax]
vpand ymm1,ymm1,YMMWORD PTR[((32+128))+rax]
vpand ymm2,ymm2,YMMWORD PTR[((64+128))+rax]
vpor ymm4,ymm1,ymm0
vpand ymm3,ymm3,YMMWORD PTR[((96+128))+rax]
vmovdqa ymm0,YMMWORD PTR[((128-128))+rdx]
vmovdqa ymm1,YMMWORD PTR[((160-128))+rdx]
vpor ymm5,ymm3,ymm2
vmovdqa ymm2,YMMWORD PTR[((192-128))+rdx]
vmovdqa ymm3,YMMWORD PTR[((224-128))+rdx]
vpand ymm0,ymm0,YMMWORD PTR[((128+128))+rax]
vpand ymm1,ymm1,YMMWORD PTR[((160+128))+rax]
vpand ymm2,ymm2,YMMWORD PTR[((192+128))+rax]
vpor ymm4,ymm4,ymm0
vpand ymm3,ymm3,YMMWORD PTR[((224+128))+rax]
vpand ymm0,ymm8,YMMWORD PTR[((256-128))+rdx]
vpor ymm5,ymm5,ymm1
vpand ymm1,ymm9,YMMWORD PTR[((288-128))+rdx]
vpor ymm4,ymm4,ymm2
vpand ymm2,ymm10,YMMWORD PTR[((320-128))+rdx]
vpor ymm5,ymm5,ymm3
vpand ymm3,ymm11,YMMWORD PTR[((352-128))+rdx]
vpor ymm4,ymm4,ymm0
vpand ymm0,ymm12,YMMWORD PTR[((384-128))+rdx]
vpor ymm5,ymm5,ymm1
vpand ymm1,ymm13,YMMWORD PTR[((416-128))+rdx]
vpor ymm4,ymm4,ymm2
vpand ymm2,ymm14,YMMWORD PTR[((448-128))+rdx]
vpor ymm5,ymm5,ymm3
vpand ymm3,ymm15,YMMWORD PTR[((480-128))+rdx]
lea rdx,QWORD PTR[512+rdx]
vpor ymm4,ymm4,ymm0
vpor ymm5,ymm5,ymm1
vpor ymm4,ymm4,ymm2
vpor ymm5,ymm5,ymm3
vpor ymm4,ymm4,ymm5
vextracti128 xmm5,ymm4,1
vpor xmm5,xmm5,xmm4
vpermd ymm5,ymm7,ymm5
vmovdqu YMMWORD PTR[rcx],ymm5
lea rcx,QWORD PTR[32+rcx]
dec r8d
jnz $L$oop_gather_1024
vpxor ymm0,ymm0,ymm0
vmovdqu YMMWORD PTR[rcx],ymm0
vzeroupper
movaps xmm6,XMMWORD PTR[((-168))+r11]
movaps xmm7,XMMWORD PTR[((-152))+r11]
movaps xmm8,XMMWORD PTR[((-136))+r11]
movaps xmm9,XMMWORD PTR[((-120))+r11]
movaps xmm10,XMMWORD PTR[((-104))+r11]
movaps xmm11,XMMWORD PTR[((-88))+r11]
movaps xmm12,XMMWORD PTR[((-72))+r11]
movaps xmm13,XMMWORD PTR[((-56))+r11]
movaps xmm14,XMMWORD PTR[((-40))+r11]
movaps xmm15,XMMWORD PTR[((-24))+r11]
$L$SEH_end_rsaz_1024_gather5::
lea rsp,QWORD PTR[r11]
DB 0F3h,0C3h ;repret
rsaz_1024_gather5_avx2 ENDP
EXTERN OPENSSL_ia32cap_P:NEAR
PUBLIC rsaz_avx2_eligible
ALIGN 32
rsaz_avx2_eligible PROC PUBLIC
mov eax,DWORD PTR[((OPENSSL_ia32cap_P+8))]
mov ecx,524544
mov edx,0
and ecx,eax
cmp ecx,524544
cmove eax,edx
and eax,32
shr eax,5
DB 0F3h,0C3h ;repret
rsaz_avx2_eligible ENDP
ALIGN 64
$L$and_mask::
DQ 01fffffffh,01fffffffh,01fffffffh,-1
$L$scatter_permd::
DD 0,2,4,6,7,7,7,7
$L$gather_permd::
DD 0,7,1,7,2,7,3,7
$L$inc::
DD 0,0,0,0,1,1,1,1
DD 2,2,2,2,3,3,3,3
DD 4,4,4,4,4,4,4,4
ALIGN 64
EXTERN __imp_RtlVirtualUnwind:NEAR
ALIGN 16
rsaz_se_handler PROC PRIVATE
push rsi
push rdi
push rbx
push rbp
push r12
push r13
push r14
push r15
pushfq
sub rsp,64
mov rax,QWORD PTR[120+r8]
mov rbx,QWORD PTR[248+r8]
mov rsi,QWORD PTR[8+r9]
mov r11,QWORD PTR[56+r9]
mov r10d,DWORD PTR[r11]
lea r10,QWORD PTR[r10*1+rsi]
cmp rbx,r10
jb $L$common_seh_tail
mov rax,QWORD PTR[152+r8]
mov r10d,DWORD PTR[4+r11]
lea r10,QWORD PTR[r10*1+rsi]
cmp rbx,r10
jae $L$common_seh_tail
mov rax,QWORD PTR[160+r8]
mov r15,QWORD PTR[((-48))+rax]
mov r14,QWORD PTR[((-40))+rax]
mov r13,QWORD PTR[((-32))+rax]
mov r12,QWORD PTR[((-24))+rax]
mov rbp,QWORD PTR[((-16))+rax]
mov rbx,QWORD PTR[((-8))+rax]
mov QWORD PTR[240+r8],r15
mov QWORD PTR[232+r8],r14
mov QWORD PTR[224+r8],r13
mov QWORD PTR[216+r8],r12
mov QWORD PTR[160+r8],rbp
mov QWORD PTR[144+r8],rbx
lea rsi,QWORD PTR[((-216))+rax]
lea rdi,QWORD PTR[512+r8]
mov ecx,20
DD 0a548f3fch
$L$common_seh_tail::
mov rdi,QWORD PTR[8+rax]
mov rsi,QWORD PTR[16+rax]
mov QWORD PTR[152+r8],rax
mov QWORD PTR[168+r8],rsi
mov QWORD PTR[176+r8],rdi
mov rdi,QWORD PTR[40+r9]
mov rsi,r8
mov ecx,154
DD 0a548f3fch
mov rsi,r9
xor rcx,rcx
mov rdx,QWORD PTR[8+rsi]
mov r8,QWORD PTR[rsi]
mov r9,QWORD PTR[16+rsi]
mov r10,QWORD PTR[40+rsi]
lea r11,QWORD PTR[56+rsi]
lea r12,QWORD PTR[24+rsi]
mov QWORD PTR[32+rsp],r10
mov QWORD PTR[40+rsp],r11
mov QWORD PTR[48+rsp],r12
mov QWORD PTR[56+rsp],rcx
call QWORD PTR[__imp_RtlVirtualUnwind]
mov eax,1
add rsp,64
popfq
pop r15
pop r14
pop r13
pop r12
pop rbp
pop rbx
pop rdi
pop rsi
DB 0F3h,0C3h ;repret
rsaz_se_handler ENDP
.text$ ENDS
.pdata SEGMENT READONLY ALIGN(4)
ALIGN 4
DD imagerel $L$SEH_begin_rsaz_1024_sqr_avx2
DD imagerel $L$SEH_end_rsaz_1024_sqr_avx2
DD imagerel $L$SEH_info_rsaz_1024_sqr_avx2
DD imagerel $L$SEH_begin_rsaz_1024_mul_avx2
DD imagerel $L$SEH_end_rsaz_1024_mul_avx2
DD imagerel $L$SEH_info_rsaz_1024_mul_avx2
DD imagerel $L$SEH_begin_rsaz_1024_gather5
DD imagerel $L$SEH_end_rsaz_1024_gather5
DD imagerel $L$SEH_info_rsaz_1024_gather5
.pdata ENDS
.xdata SEGMENT READONLY ALIGN(8)
ALIGN 8
$L$SEH_info_rsaz_1024_sqr_avx2::
DB 9,0,0,0
DD imagerel rsaz_se_handler
DD imagerel $L$sqr_1024_body,imagerel $L$sqr_1024_epilogue
$L$SEH_info_rsaz_1024_mul_avx2::
DB 9,0,0,0
DD imagerel rsaz_se_handler
DD imagerel $L$mul_1024_body,imagerel $L$mul_1024_epilogue
$L$SEH_info_rsaz_1024_gather5::
DB 001h,036h,017h,00bh
DB 036h,0f8h,009h,000h
DB 031h,0e8h,008h,000h
DB 02ch,0d8h,007h,000h
DB 027h,0c8h,006h,000h
DB 022h,0b8h,005h,000h
DB 01dh,0a8h,004h,000h
DB 018h,098h,003h,000h
DB 013h,088h,002h,000h
DB 00eh,078h,001h,000h
DB 009h,068h,000h,000h
DB 004h,001h,015h,000h
DB 000h,0b3h,000h,000h
.xdata ENDS
END