blob: 322e377a232c153dfb46c677ea9da1200bfc90f7 [file] [log] [blame]
OPTION DOTNAME
.text$ SEGMENT ALIGN(64) 'CODE'
EXTERN OPENSSL_ia32cap_P:NEAR
PUBLIC rsaz_512_sqr
ALIGN 32
rsaz_512_sqr PROC PUBLIC
mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
mov QWORD PTR[16+rsp],rsi
mov rax,rsp
$L$SEH_begin_rsaz_512_sqr::
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
mov rcx,r9
mov r8,QWORD PTR[40+rsp]
push rbx
push rbp
push r12
push r13
push r14
push r15
sub rsp,128+24
$L$sqr_body::
mov rbp,rdx
mov rdx,QWORD PTR[rsi]
mov rax,QWORD PTR[8+rsi]
mov QWORD PTR[128+rsp],rcx
jmp $L$oop_sqr
ALIGN 32
$L$oop_sqr::
mov DWORD PTR[((128+8))+rsp],r8d
mov rbx,rdx
mul rdx
mov r8,rax
mov rax,QWORD PTR[16+rsi]
mov r9,rdx
mul rbx
add r9,rax
mov rax,QWORD PTR[24+rsi]
mov r10,rdx
adc r10,0
mul rbx
add r10,rax
mov rax,QWORD PTR[32+rsi]
mov r11,rdx
adc r11,0
mul rbx
add r11,rax
mov rax,QWORD PTR[40+rsi]
mov r12,rdx
adc r12,0
mul rbx
add r12,rax
mov rax,QWORD PTR[48+rsi]
mov r13,rdx
adc r13,0
mul rbx
add r13,rax
mov rax,QWORD PTR[56+rsi]
mov r14,rdx
adc r14,0
mul rbx
add r14,rax
mov rax,rbx
mov r15,rdx
adc r15,0
add r8,r8
mov rcx,r9
adc r9,r9
mul rax
mov QWORD PTR[rsp],rax
add r8,rdx
adc r9,0
mov QWORD PTR[8+rsp],r8
shr rcx,63
mov r8,QWORD PTR[8+rsi]
mov rax,QWORD PTR[16+rsi]
mul r8
add r10,rax
mov rax,QWORD PTR[24+rsi]
mov rbx,rdx
adc rbx,0
mul r8
add r11,rax
mov rax,QWORD PTR[32+rsi]
adc rdx,0
add r11,rbx
mov rbx,rdx
adc rbx,0
mul r8
add r12,rax
mov rax,QWORD PTR[40+rsi]
adc rdx,0
add r12,rbx
mov rbx,rdx
adc rbx,0
mul r8
add r13,rax
mov rax,QWORD PTR[48+rsi]
adc rdx,0
add r13,rbx
mov rbx,rdx
adc rbx,0
mul r8
add r14,rax
mov rax,QWORD PTR[56+rsi]
adc rdx,0
add r14,rbx
mov rbx,rdx
adc rbx,0
mul r8
add r15,rax
mov rax,r8
adc rdx,0
add r15,rbx
mov r8,rdx
mov rdx,r10
adc r8,0
add rdx,rdx
lea r10,QWORD PTR[r10*2+rcx]
mov rbx,r11
adc r11,r11
mul rax
add r9,rax
adc r10,rdx
adc r11,0
mov QWORD PTR[16+rsp],r9
mov QWORD PTR[24+rsp],r10
shr rbx,63
mov r9,QWORD PTR[16+rsi]
mov rax,QWORD PTR[24+rsi]
mul r9
add r12,rax
mov rax,QWORD PTR[32+rsi]
mov rcx,rdx
adc rcx,0
mul r9
add r13,rax
mov rax,QWORD PTR[40+rsi]
adc rdx,0
add r13,rcx
mov rcx,rdx
adc rcx,0
mul r9
add r14,rax
mov rax,QWORD PTR[48+rsi]
adc rdx,0
add r14,rcx
mov rcx,rdx
adc rcx,0
mul r9
mov r10,r12
lea r12,QWORD PTR[r12*2+rbx]
add r15,rax
mov rax,QWORD PTR[56+rsi]
adc rdx,0
add r15,rcx
mov rcx,rdx
adc rcx,0
mul r9
shr r10,63
add r8,rax
mov rax,r9
adc rdx,0
add r8,rcx
mov r9,rdx
adc r9,0
mov rcx,r13
lea r13,QWORD PTR[r13*2+r10]
mul rax
add r11,rax
adc r12,rdx
adc r13,0
mov QWORD PTR[32+rsp],r11
mov QWORD PTR[40+rsp],r12
shr rcx,63
mov r10,QWORD PTR[24+rsi]
mov rax,QWORD PTR[32+rsi]
mul r10
add r14,rax
mov rax,QWORD PTR[40+rsi]
mov rbx,rdx
adc rbx,0
mul r10
add r15,rax
mov rax,QWORD PTR[48+rsi]
adc rdx,0
add r15,rbx
mov rbx,rdx
adc rbx,0
mul r10
mov r12,r14
lea r14,QWORD PTR[r14*2+rcx]
add r8,rax
mov rax,QWORD PTR[56+rsi]
adc rdx,0
add r8,rbx
mov rbx,rdx
adc rbx,0
mul r10
shr r12,63
add r9,rax
mov rax,r10
adc rdx,0
add r9,rbx
mov r10,rdx
adc r10,0
mov rbx,r15
lea r15,QWORD PTR[r15*2+r12]
mul rax
add r13,rax
adc r14,rdx
adc r15,0
mov QWORD PTR[48+rsp],r13
mov QWORD PTR[56+rsp],r14
shr rbx,63
mov r11,QWORD PTR[32+rsi]
mov rax,QWORD PTR[40+rsi]
mul r11
add r8,rax
mov rax,QWORD PTR[48+rsi]
mov rcx,rdx
adc rcx,0
mul r11
add r9,rax
mov rax,QWORD PTR[56+rsi]
adc rdx,0
mov r12,r8
lea r8,QWORD PTR[r8*2+rbx]
add r9,rcx
mov rcx,rdx
adc rcx,0
mul r11
shr r12,63
add r10,rax
mov rax,r11
adc rdx,0
add r10,rcx
mov r11,rdx
adc r11,0
mov rcx,r9
lea r9,QWORD PTR[r9*2+r12]
mul rax
add r15,rax
adc r8,rdx
adc r9,0
mov QWORD PTR[64+rsp],r15
mov QWORD PTR[72+rsp],r8
shr rcx,63
mov r12,QWORD PTR[40+rsi]
mov rax,QWORD PTR[48+rsi]
mul r12
add r10,rax
mov rax,QWORD PTR[56+rsi]
mov rbx,rdx
adc rbx,0
mul r12
add r11,rax
mov rax,r12
mov r15,r10
lea r10,QWORD PTR[r10*2+rcx]
adc rdx,0
shr r15,63
add r11,rbx
mov r12,rdx
adc r12,0
mov rbx,r11
lea r11,QWORD PTR[r11*2+r15]
mul rax
add r9,rax
adc r10,rdx
adc r11,0
mov QWORD PTR[80+rsp],r9
mov QWORD PTR[88+rsp],r10
mov r13,QWORD PTR[48+rsi]
mov rax,QWORD PTR[56+rsi]
mul r13
add r12,rax
mov rax,r13
mov r13,rdx
adc r13,0
xor r14,r14
shl rbx,1
adc r12,r12
adc r13,r13
adc r14,r14
mul rax
add r11,rax
adc r12,rdx
adc r13,0
mov QWORD PTR[96+rsp],r11
mov QWORD PTR[104+rsp],r12
mov rax,QWORD PTR[56+rsi]
mul rax
add r13,rax
adc rdx,0
add r14,rdx
mov QWORD PTR[112+rsp],r13
mov QWORD PTR[120+rsp],r14
mov r8,QWORD PTR[rsp]
mov r9,QWORD PTR[8+rsp]
mov r10,QWORD PTR[16+rsp]
mov r11,QWORD PTR[24+rsp]
mov r12,QWORD PTR[32+rsp]
mov r13,QWORD PTR[40+rsp]
mov r14,QWORD PTR[48+rsp]
mov r15,QWORD PTR[56+rsp]
call __rsaz_512_reduce
add r8,QWORD PTR[64+rsp]
adc r9,QWORD PTR[72+rsp]
adc r10,QWORD PTR[80+rsp]
adc r11,QWORD PTR[88+rsp]
adc r12,QWORD PTR[96+rsp]
adc r13,QWORD PTR[104+rsp]
adc r14,QWORD PTR[112+rsp]
adc r15,QWORD PTR[120+rsp]
sbb rcx,rcx
call __rsaz_512_subtract
mov rdx,r8
mov rax,r9
mov r8d,DWORD PTR[((128+8))+rsp]
mov rsi,rdi
dec r8d
jnz $L$oop_sqr
lea rax,QWORD PTR[((128+24+48))+rsp]
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_epilogue::
mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
mov rsi,QWORD PTR[16+rsp]
DB 0F3h,0C3h ;repret
$L$SEH_end_rsaz_512_sqr::
rsaz_512_sqr ENDP
PUBLIC rsaz_512_mul
ALIGN 32
rsaz_512_mul PROC PUBLIC
mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
mov QWORD PTR[16+rsp],rsi
mov rax,rsp
$L$SEH_begin_rsaz_512_mul::
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
mov rcx,r9
mov r8,QWORD PTR[40+rsp]
push rbx
push rbp
push r12
push r13
push r14
push r15
sub rsp,128+24
$L$mul_body::
DB 102,72,15,110,199
DB 102,72,15,110,201
mov QWORD PTR[128+rsp],r8
mov rbx,QWORD PTR[rdx]
mov rbp,rdx
call __rsaz_512_mul
DB 102,72,15,126,199
DB 102,72,15,126,205
mov r8,QWORD PTR[rsp]
mov r9,QWORD PTR[8+rsp]
mov r10,QWORD PTR[16+rsp]
mov r11,QWORD PTR[24+rsp]
mov r12,QWORD PTR[32+rsp]
mov r13,QWORD PTR[40+rsp]
mov r14,QWORD PTR[48+rsp]
mov r15,QWORD PTR[56+rsp]
call __rsaz_512_reduce
add r8,QWORD PTR[64+rsp]
adc r9,QWORD PTR[72+rsp]
adc r10,QWORD PTR[80+rsp]
adc r11,QWORD PTR[88+rsp]
adc r12,QWORD PTR[96+rsp]
adc r13,QWORD PTR[104+rsp]
adc r14,QWORD PTR[112+rsp]
adc r15,QWORD PTR[120+rsp]
sbb rcx,rcx
call __rsaz_512_subtract
lea rax,QWORD PTR[((128+24+48))+rsp]
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_epilogue::
mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
mov rsi,QWORD PTR[16+rsp]
DB 0F3h,0C3h ;repret
$L$SEH_end_rsaz_512_mul::
rsaz_512_mul ENDP
PUBLIC rsaz_512_mul_gather4
ALIGN 32
rsaz_512_mul_gather4 PROC PUBLIC
mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
mov QWORD PTR[16+rsp],rsi
mov rax,rsp
$L$SEH_begin_rsaz_512_mul_gather4::
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
mov rcx,r9
mov r8,QWORD PTR[40+rsp]
mov r9,QWORD PTR[48+rsp]
push rbx
push rbp
push r12
push r13
push r14
push r15
mov r9d,r9d
sub rsp,128+24
$L$mul_gather4_body::
mov eax,DWORD PTR[64+r9*4+rdx]
DB 102,72,15,110,199
mov ebx,DWORD PTR[r9*4+rdx]
DB 102,72,15,110,201
mov QWORD PTR[128+rsp],r8
shl rax,32
or rbx,rax
mov rax,QWORD PTR[rsi]
mov rcx,QWORD PTR[8+rsi]
lea rbp,QWORD PTR[128+r9*4+rdx]
mul rbx
mov QWORD PTR[rsp],rax
mov rax,rcx
mov r8,rdx
mul rbx
movd xmm4,DWORD PTR[rbp]
add r8,rax
mov rax,QWORD PTR[16+rsi]
mov r9,rdx
adc r9,0
mul rbx
movd xmm5,DWORD PTR[64+rbp]
add r9,rax
mov rax,QWORD PTR[24+rsi]
mov r10,rdx
adc r10,0
mul rbx
pslldq xmm5,4
add r10,rax
mov rax,QWORD PTR[32+rsi]
mov r11,rdx
adc r11,0
mul rbx
por xmm4,xmm5
add r11,rax
mov rax,QWORD PTR[40+rsi]
mov r12,rdx
adc r12,0
mul rbx
add r12,rax
mov rax,QWORD PTR[48+rsi]
mov r13,rdx
adc r13,0
mul rbx
lea rbp,QWORD PTR[128+rbp]
add r13,rax
mov rax,QWORD PTR[56+rsi]
mov r14,rdx
adc r14,0
mul rbx
DB 102,72,15,126,227
add r14,rax
mov rax,QWORD PTR[rsi]
mov r15,rdx
adc r15,0
lea rdi,QWORD PTR[8+rsp]
mov ecx,7
jmp $L$oop_mul_gather
ALIGN 32
$L$oop_mul_gather::
mul rbx
add r8,rax
mov rax,QWORD PTR[8+rsi]
mov QWORD PTR[rdi],r8
mov r8,rdx
adc r8,0
mul rbx
movd xmm4,DWORD PTR[rbp]
add r9,rax
mov rax,QWORD PTR[16+rsi]
adc rdx,0
add r8,r9
mov r9,rdx
adc r9,0
mul rbx
movd xmm5,DWORD PTR[64+rbp]
add r10,rax
mov rax,QWORD PTR[24+rsi]
adc rdx,0
add r9,r10
mov r10,rdx
adc r10,0
mul rbx
pslldq xmm5,4
add r11,rax
mov rax,QWORD PTR[32+rsi]
adc rdx,0
add r10,r11
mov r11,rdx
adc r11,0
mul rbx
por xmm4,xmm5
add r12,rax
mov rax,QWORD PTR[40+rsi]
adc rdx,0
add r11,r12
mov r12,rdx
adc r12,0
mul rbx
add r13,rax
mov rax,QWORD PTR[48+rsi]
adc rdx,0
add r12,r13
mov r13,rdx
adc r13,0
mul rbx
add r14,rax
mov rax,QWORD PTR[56+rsi]
adc rdx,0
add r13,r14
mov r14,rdx
adc r14,0
mul rbx
DB 102,72,15,126,227
add r15,rax
mov rax,QWORD PTR[rsi]
adc rdx,0
add r14,r15
mov r15,rdx
adc r15,0
lea rbp,QWORD PTR[128+rbp]
lea rdi,QWORD PTR[8+rdi]
dec ecx
jnz $L$oop_mul_gather
mov QWORD PTR[rdi],r8
mov QWORD PTR[8+rdi],r9
mov QWORD PTR[16+rdi],r10
mov QWORD PTR[24+rdi],r11
mov QWORD PTR[32+rdi],r12
mov QWORD PTR[40+rdi],r13
mov QWORD PTR[48+rdi],r14
mov QWORD PTR[56+rdi],r15
DB 102,72,15,126,199
DB 102,72,15,126,205
mov r8,QWORD PTR[rsp]
mov r9,QWORD PTR[8+rsp]
mov r10,QWORD PTR[16+rsp]
mov r11,QWORD PTR[24+rsp]
mov r12,QWORD PTR[32+rsp]
mov r13,QWORD PTR[40+rsp]
mov r14,QWORD PTR[48+rsp]
mov r15,QWORD PTR[56+rsp]
call __rsaz_512_reduce
add r8,QWORD PTR[64+rsp]
adc r9,QWORD PTR[72+rsp]
adc r10,QWORD PTR[80+rsp]
adc r11,QWORD PTR[88+rsp]
adc r12,QWORD PTR[96+rsp]
adc r13,QWORD PTR[104+rsp]
adc r14,QWORD PTR[112+rsp]
adc r15,QWORD PTR[120+rsp]
sbb rcx,rcx
call __rsaz_512_subtract
lea rax,QWORD PTR[((128+24+48))+rsp]
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_gather4_epilogue::
mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
mov rsi,QWORD PTR[16+rsp]
DB 0F3h,0C3h ;repret
$L$SEH_end_rsaz_512_mul_gather4::
rsaz_512_mul_gather4 ENDP
PUBLIC rsaz_512_mul_scatter4
ALIGN 32
rsaz_512_mul_scatter4 PROC PUBLIC
mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
mov QWORD PTR[16+rsp],rsi
mov rax,rsp
$L$SEH_begin_rsaz_512_mul_scatter4::
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
mov rcx,r9
mov r8,QWORD PTR[40+rsp]
mov r9,QWORD PTR[48+rsp]
push rbx
push rbp
push r12
push r13
push r14
push r15
mov r9d,r9d
sub rsp,128+24
$L$mul_scatter4_body::
lea r8,QWORD PTR[r9*4+r8]
DB 102,72,15,110,199
DB 102,72,15,110,202
DB 102,73,15,110,208
mov QWORD PTR[128+rsp],rcx
mov rbp,rdi
mov rbx,QWORD PTR[rdi]
call __rsaz_512_mul
DB 102,72,15,126,199
DB 102,72,15,126,205
mov r8,QWORD PTR[rsp]
mov r9,QWORD PTR[8+rsp]
mov r10,QWORD PTR[16+rsp]
mov r11,QWORD PTR[24+rsp]
mov r12,QWORD PTR[32+rsp]
mov r13,QWORD PTR[40+rsp]
mov r14,QWORD PTR[48+rsp]
mov r15,QWORD PTR[56+rsp]
call __rsaz_512_reduce
add r8,QWORD PTR[64+rsp]
adc r9,QWORD PTR[72+rsp]
adc r10,QWORD PTR[80+rsp]
adc r11,QWORD PTR[88+rsp]
adc r12,QWORD PTR[96+rsp]
adc r13,QWORD PTR[104+rsp]
adc r14,QWORD PTR[112+rsp]
adc r15,QWORD PTR[120+rsp]
DB 102,72,15,126,214
sbb rcx,rcx
call __rsaz_512_subtract
mov DWORD PTR[rsi],r8d
shr r8,32
mov DWORD PTR[128+rsi],r9d
shr r9,32
mov DWORD PTR[256+rsi],r10d
shr r10,32
mov DWORD PTR[384+rsi],r11d
shr r11,32
mov DWORD PTR[512+rsi],r12d
shr r12,32
mov DWORD PTR[640+rsi],r13d
shr r13,32
mov DWORD PTR[768+rsi],r14d
shr r14,32
mov DWORD PTR[896+rsi],r15d
shr r15,32
mov DWORD PTR[64+rsi],r8d
mov DWORD PTR[192+rsi],r9d
mov DWORD PTR[320+rsi],r10d
mov DWORD PTR[448+rsi],r11d
mov DWORD PTR[576+rsi],r12d
mov DWORD PTR[704+rsi],r13d
mov DWORD PTR[832+rsi],r14d
mov DWORD PTR[960+rsi],r15d
lea rax,QWORD PTR[((128+24+48))+rsp]
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_scatter4_epilogue::
mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
mov rsi,QWORD PTR[16+rsp]
DB 0F3h,0C3h ;repret
$L$SEH_end_rsaz_512_mul_scatter4::
rsaz_512_mul_scatter4 ENDP
PUBLIC rsaz_512_mul_by_one
ALIGN 32
rsaz_512_mul_by_one PROC PUBLIC
mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
mov QWORD PTR[16+rsp],rsi
mov rax,rsp
$L$SEH_begin_rsaz_512_mul_by_one::
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
mov rcx,r9
push rbx
push rbp
push r12
push r13
push r14
push r15
sub rsp,128+24
$L$mul_by_one_body::
mov rbp,rdx
mov QWORD PTR[128+rsp],rcx
mov r8,QWORD PTR[rsi]
pxor xmm0,xmm0
mov r9,QWORD PTR[8+rsi]
mov r10,QWORD PTR[16+rsi]
mov r11,QWORD PTR[24+rsi]
mov r12,QWORD PTR[32+rsi]
mov r13,QWORD PTR[40+rsi]
mov r14,QWORD PTR[48+rsi]
mov r15,QWORD PTR[56+rsi]
movdqa XMMWORD PTR[rsp],xmm0
movdqa XMMWORD PTR[16+rsp],xmm0
movdqa XMMWORD PTR[32+rsp],xmm0
movdqa XMMWORD PTR[48+rsp],xmm0
movdqa XMMWORD PTR[64+rsp],xmm0
movdqa XMMWORD PTR[80+rsp],xmm0
movdqa XMMWORD PTR[96+rsp],xmm0
call __rsaz_512_reduce
mov QWORD PTR[rdi],r8
mov QWORD PTR[8+rdi],r9
mov QWORD PTR[16+rdi],r10
mov QWORD PTR[24+rdi],r11
mov QWORD PTR[32+rdi],r12
mov QWORD PTR[40+rdi],r13
mov QWORD PTR[48+rdi],r14
mov QWORD PTR[56+rdi],r15
lea rax,QWORD PTR[((128+24+48))+rsp]
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_by_one_epilogue::
mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
mov rsi,QWORD PTR[16+rsp]
DB 0F3h,0C3h ;repret
$L$SEH_end_rsaz_512_mul_by_one::
rsaz_512_mul_by_one ENDP
ALIGN 32
__rsaz_512_reduce PROC PRIVATE
mov rbx,r8
imul rbx,QWORD PTR[((128+8))+rsp]
mov rax,QWORD PTR[rbp]
mov ecx,8
jmp $L$reduction_loop
ALIGN 32
$L$reduction_loop::
mul rbx
mov rax,QWORD PTR[8+rbp]
neg r8
mov r8,rdx
adc r8,0
mul rbx
add r9,rax
mov rax,QWORD PTR[16+rbp]
adc rdx,0
add r8,r9
mov r9,rdx
adc r9,0
mul rbx
add r10,rax
mov rax,QWORD PTR[24+rbp]
adc rdx,0
add r9,r10
mov r10,rdx
adc r10,0
mul rbx
add r11,rax
mov rax,QWORD PTR[32+rbp]
adc rdx,0
add r10,r11
mov rsi,QWORD PTR[((128+8))+rsp]
adc rdx,0
mov r11,rdx
mul rbx
add r12,rax
mov rax,QWORD PTR[40+rbp]
adc rdx,0
imul rsi,r8
add r11,r12
mov r12,rdx
adc r12,0
mul rbx
add r13,rax
mov rax,QWORD PTR[48+rbp]
adc rdx,0
add r12,r13
mov r13,rdx
adc r13,0
mul rbx
add r14,rax
mov rax,QWORD PTR[56+rbp]
adc rdx,0
add r13,r14
mov r14,rdx
adc r14,0
mul rbx
mov rbx,rsi
add r15,rax
mov rax,QWORD PTR[rbp]
adc rdx,0
add r14,r15
mov r15,rdx
adc r15,0
dec ecx
jne $L$reduction_loop
DB 0F3h,0C3h ;repret
__rsaz_512_reduce ENDP
ALIGN 32
__rsaz_512_subtract PROC PRIVATE
mov QWORD PTR[rdi],r8
mov QWORD PTR[8+rdi],r9
mov QWORD PTR[16+rdi],r10
mov QWORD PTR[24+rdi],r11
mov QWORD PTR[32+rdi],r12
mov QWORD PTR[40+rdi],r13
mov QWORD PTR[48+rdi],r14
mov QWORD PTR[56+rdi],r15
mov r8,QWORD PTR[rbp]
mov r9,QWORD PTR[8+rbp]
neg r8
not r9
and r8,rcx
mov r10,QWORD PTR[16+rbp]
and r9,rcx
not r10
mov r11,QWORD PTR[24+rbp]
and r10,rcx
not r11
mov r12,QWORD PTR[32+rbp]
and r11,rcx
not r12
mov r13,QWORD PTR[40+rbp]
and r12,rcx
not r13
mov r14,QWORD PTR[48+rbp]
and r13,rcx
not r14
mov r15,QWORD PTR[56+rbp]
and r14,rcx
not r15
and r15,rcx
add r8,QWORD PTR[rdi]
adc r9,QWORD PTR[8+rdi]
adc r10,QWORD PTR[16+rdi]
adc r11,QWORD PTR[24+rdi]
adc r12,QWORD PTR[32+rdi]
adc r13,QWORD PTR[40+rdi]
adc r14,QWORD PTR[48+rdi]
adc r15,QWORD PTR[56+rdi]
mov QWORD PTR[rdi],r8
mov QWORD PTR[8+rdi],r9
mov QWORD PTR[16+rdi],r10
mov QWORD PTR[24+rdi],r11
mov QWORD PTR[32+rdi],r12
mov QWORD PTR[40+rdi],r13
mov QWORD PTR[48+rdi],r14
mov QWORD PTR[56+rdi],r15
DB 0F3h,0C3h ;repret
__rsaz_512_subtract ENDP
ALIGN 32
__rsaz_512_mul PROC PRIVATE
lea rdi,QWORD PTR[8+rsp]
mov rax,QWORD PTR[rsi]
mul rbx
mov QWORD PTR[rdi],rax
mov rax,QWORD PTR[8+rsi]
mov r8,rdx
mul rbx
add r8,rax
mov rax,QWORD PTR[16+rsi]
mov r9,rdx
adc r9,0
mul rbx
add r9,rax
mov rax,QWORD PTR[24+rsi]
mov r10,rdx
adc r10,0
mul rbx
add r10,rax
mov rax,QWORD PTR[32+rsi]
mov r11,rdx
adc r11,0
mul rbx
add r11,rax
mov rax,QWORD PTR[40+rsi]
mov r12,rdx
adc r12,0
mul rbx
add r12,rax
mov rax,QWORD PTR[48+rsi]
mov r13,rdx
adc r13,0
mul rbx
add r13,rax
mov rax,QWORD PTR[56+rsi]
mov r14,rdx
adc r14,0
mul rbx
add r14,rax
mov rax,QWORD PTR[rsi]
mov r15,rdx
adc r15,0
lea rbp,QWORD PTR[8+rbp]
lea rdi,QWORD PTR[8+rdi]
mov ecx,7
jmp $L$oop_mul
ALIGN 32
$L$oop_mul::
mov rbx,QWORD PTR[rbp]
mul rbx
add r8,rax
mov rax,QWORD PTR[8+rsi]
mov QWORD PTR[rdi],r8
mov r8,rdx
adc r8,0
mul rbx
add r9,rax
mov rax,QWORD PTR[16+rsi]
adc rdx,0
add r8,r9
mov r9,rdx
adc r9,0
mul rbx
add r10,rax
mov rax,QWORD PTR[24+rsi]
adc rdx,0
add r9,r10
mov r10,rdx
adc r10,0
mul rbx
add r11,rax
mov rax,QWORD PTR[32+rsi]
adc rdx,0
add r10,r11
mov r11,rdx
adc r11,0
mul rbx
add r12,rax
mov rax,QWORD PTR[40+rsi]
adc rdx,0
add r11,r12
mov r12,rdx
adc r12,0
mul rbx
add r13,rax
mov rax,QWORD PTR[48+rsi]
adc rdx,0
add r12,r13
mov r13,rdx
adc r13,0
mul rbx
add r14,rax
mov rax,QWORD PTR[56+rsi]
adc rdx,0
add r13,r14
mov r14,rdx
lea rbp,QWORD PTR[8+rbp]
adc r14,0
mul rbx
add r15,rax
mov rax,QWORD PTR[rsi]
adc rdx,0
add r14,r15
mov r15,rdx
adc r15,0
lea rdi,QWORD PTR[8+rdi]
dec ecx
jnz $L$oop_mul
mov QWORD PTR[rdi],r8
mov QWORD PTR[8+rdi],r9
mov QWORD PTR[16+rdi],r10
mov QWORD PTR[24+rdi],r11
mov QWORD PTR[32+rdi],r12
mov QWORD PTR[40+rdi],r13
mov QWORD PTR[48+rdi],r14
mov QWORD PTR[56+rdi],r15
DB 0F3h,0C3h ;repret
__rsaz_512_mul ENDP
PUBLIC rsaz_512_scatter4
ALIGN 16
rsaz_512_scatter4 PROC PUBLIC
lea rcx,QWORD PTR[r8*4+rcx]
mov r9d,8
jmp $L$oop_scatter
ALIGN 16
$L$oop_scatter::
mov rax,QWORD PTR[rdx]
lea rdx,QWORD PTR[8+rdx]
mov DWORD PTR[rcx],eax
shr rax,32
mov DWORD PTR[64+rcx],eax
lea rcx,QWORD PTR[128+rcx]
dec r9d
jnz $L$oop_scatter
DB 0F3h,0C3h ;repret
rsaz_512_scatter4 ENDP
PUBLIC rsaz_512_gather4
ALIGN 16
rsaz_512_gather4 PROC PUBLIC
lea rdx,QWORD PTR[r8*4+rdx]
mov r9d,8
jmp $L$oop_gather
ALIGN 16
$L$oop_gather::
mov eax,DWORD PTR[rdx]
mov r8d,DWORD PTR[64+rdx]
lea rdx,QWORD PTR[128+rdx]
shl r8,32
or rax,r8
mov QWORD PTR[rcx],rax
lea rcx,QWORD PTR[8+rcx]
dec r9d
jnz $L$oop_gather
DB 0F3h,0C3h ;repret
rsaz_512_gather4 ENDP
EXTERN __imp_RtlVirtualUnwind:NEAR
ALIGN 16
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
lea rax,QWORD PTR[((128+24+48))+rax]
mov rbx,QWORD PTR[((-8))+rax]
mov rbp,QWORD PTR[((-16))+rax]
mov r12,QWORD PTR[((-24))+rax]
mov r13,QWORD PTR[((-32))+rax]
mov r14,QWORD PTR[((-40))+rax]
mov r15,QWORD PTR[((-48))+rax]
mov QWORD PTR[144+r8],rbx
mov QWORD PTR[160+r8],rbp
mov QWORD PTR[216+r8],r12
mov QWORD PTR[224+r8],r13
mov QWORD PTR[232+r8],r14
mov QWORD PTR[240+r8],r15
$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
se_handler ENDP
.text$ ENDS
.pdata SEGMENT READONLY ALIGN(4)
ALIGN 4
DD imagerel $L$SEH_begin_rsaz_512_sqr
DD imagerel $L$SEH_end_rsaz_512_sqr
DD imagerel $L$SEH_info_rsaz_512_sqr
DD imagerel $L$SEH_begin_rsaz_512_mul
DD imagerel $L$SEH_end_rsaz_512_mul
DD imagerel $L$SEH_info_rsaz_512_mul
DD imagerel $L$SEH_begin_rsaz_512_mul_gather4
DD imagerel $L$SEH_end_rsaz_512_mul_gather4
DD imagerel $L$SEH_info_rsaz_512_mul_gather4
DD imagerel $L$SEH_begin_rsaz_512_mul_scatter4
DD imagerel $L$SEH_end_rsaz_512_mul_scatter4
DD imagerel $L$SEH_info_rsaz_512_mul_scatter4
DD imagerel $L$SEH_begin_rsaz_512_mul_by_one
DD imagerel $L$SEH_end_rsaz_512_mul_by_one
DD imagerel $L$SEH_info_rsaz_512_mul_by_one
.pdata ENDS
.xdata SEGMENT READONLY ALIGN(8)
ALIGN 8
$L$SEH_info_rsaz_512_sqr::
DB 9,0,0,0
DD imagerel se_handler
DD imagerel $L$sqr_body,imagerel $L$sqr_epilogue
$L$SEH_info_rsaz_512_mul::
DB 9,0,0,0
DD imagerel se_handler
DD imagerel $L$mul_body,imagerel $L$mul_epilogue
$L$SEH_info_rsaz_512_mul_gather4::
DB 9,0,0,0
DD imagerel se_handler
DD imagerel $L$mul_gather4_body,imagerel $L$mul_gather4_epilogue
$L$SEH_info_rsaz_512_mul_scatter4::
DB 9,0,0,0
DD imagerel se_handler
DD imagerel $L$mul_scatter4_body,imagerel $L$mul_scatter4_epilogue
$L$SEH_info_rsaz_512_mul_by_one::
DB 9,0,0,0
DD imagerel se_handler
DD imagerel $L$mul_by_one_body,imagerel $L$mul_by_one_epilogue
.xdata ENDS
END