Files
blst/build/win64/mulq_mont_256-x86_64.asm

962 lines
14 KiB
NASM

OPTION DOTNAME
EXTERN mul_mont_sparse_256$1:NEAR
EXTERN sqr_mont_sparse_256$1:NEAR
EXTERN from_mont_256$1:NEAR
EXTERN redc_mont_256$1:NEAR
_DATA SEGMENT
COMM __blst_platform_cap:DWORD:1
_DATA ENDS
.text$ SEGMENT ALIGN(256) 'CODE'
PUBLIC mul_mont_sparse_256
ALIGN 32
mul_mont_sparse_256 PROC PUBLIC
DB 243,15,30,250
mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
mov QWORD PTR[16+rsp],rsi
mov r11,rsp
$L$SEH_begin_mul_mont_sparse_256::
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
mov rcx,r9
mov r8,QWORD PTR[40+rsp]
ifdef __BLST_PORTABLE__
test DWORD PTR[__blst_platform_cap],1
jnz mul_mont_sparse_256$1
endif
push rbp
push rbx
push r12
push r13
push r14
push r15
push rdi
$L$SEH_body_mul_mont_sparse_256::
mov rax,QWORD PTR[rdx]
mov r13,QWORD PTR[rsi]
mov r14,QWORD PTR[8+rsi]
mov r12,QWORD PTR[16+rsi]
mov rbp,QWORD PTR[24+rsi]
mov rbx,rdx
mov r15,rax
mul r13
mov r9,rax
mov rax,r15
mov r10,rdx
call __mulq_mont_sparse_256
mov r15,QWORD PTR[8+rsp]
mov r14,QWORD PTR[16+rsp]
mov r13,QWORD PTR[24+rsp]
mov r12,QWORD PTR[32+rsp]
mov rbx,QWORD PTR[40+rsp]
mov rbp,QWORD PTR[48+rsp]
lea rsp,QWORD PTR[56+rsp]
$L$SEH_epilogue_mul_mont_sparse_256::
mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
mov rsi,QWORD PTR[16+rsp]
ifdef __SGX_LVI_HARDENING__
pop rdx
lfence
jmp rdx
ud2
else
DB 0F3h,0C3h
endif
$L$SEH_end_mul_mont_sparse_256::
mul_mont_sparse_256 ENDP
PUBLIC sqr_mont_sparse_256
ALIGN 32
sqr_mont_sparse_256 PROC PUBLIC
DB 243,15,30,250
mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
mov QWORD PTR[16+rsp],rsi
mov r11,rsp
$L$SEH_begin_sqr_mont_sparse_256::
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
mov rcx,r9
ifdef __BLST_PORTABLE__
test DWORD PTR[__blst_platform_cap],1
jnz sqr_mont_sparse_256$1
endif
push rbp
push rbx
push r12
push r13
push r14
push r15
push rdi
$L$SEH_body_sqr_mont_sparse_256::
mov rax,QWORD PTR[rsi]
mov r8,rcx
mov r14,QWORD PTR[8+rsi]
mov rcx,rdx
mov r12,QWORD PTR[16+rsi]
lea rbx,QWORD PTR[rsi]
mov rbp,QWORD PTR[24+rsi]
mov r15,rax
mul rax
mov r9,rax
mov rax,r15
mov r10,rdx
call __mulq_mont_sparse_256
mov r15,QWORD PTR[8+rsp]
mov r14,QWORD PTR[16+rsp]
mov r13,QWORD PTR[24+rsp]
mov r12,QWORD PTR[32+rsp]
mov rbx,QWORD PTR[40+rsp]
mov rbp,QWORD PTR[48+rsp]
lea rsp,QWORD PTR[56+rsp]
$L$SEH_epilogue_sqr_mont_sparse_256::
mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
mov rsi,QWORD PTR[16+rsp]
ifdef __SGX_LVI_HARDENING__
pop rdx
lfence
jmp rdx
ud2
else
DB 0F3h,0C3h
endif
$L$SEH_end_sqr_mont_sparse_256::
sqr_mont_sparse_256 ENDP
ALIGN 32
__mulq_mont_sparse_256 PROC PRIVATE
DB 243,15,30,250
mul r14
add r10,rax
mov rax,r15
adc rdx,0
mov r11,rdx
mul r12
add r11,rax
mov rax,r15
adc rdx,0
mov r12,rdx
mul rbp
add r12,rax
mov rax,QWORD PTR[8+rbx]
adc rdx,0
xor r14,r14
mov r13,rdx
mov rdi,r9
imul r9,r8
mov r15,rax
mul QWORD PTR[rsi]
add r10,rax
mov rax,r15
adc rdx,0
mov rbp,rdx
mul QWORD PTR[8+rsi]
add r11,rax
mov rax,r15
adc rdx,0
add r11,rbp
adc rdx,0
mov rbp,rdx
mul QWORD PTR[16+rsi]
add r12,rax
mov rax,r15
adc rdx,0
add r12,rbp
adc rdx,0
mov rbp,rdx
mul QWORD PTR[24+rsi]
add r13,rax
mov rax,r9
adc rdx,0
add r13,rbp
adc r14,rdx
xor r15,r15
mul QWORD PTR[rcx]
add rdi,rax
mov rax,r9
adc rdi,rdx
mul QWORD PTR[8+rcx]
add r10,rax
mov rax,r9
adc rdx,0
add r10,rdi
adc rdx,0
mov rbp,rdx
mul QWORD PTR[16+rcx]
add r11,rax
mov rax,r9
adc rdx,0
add r11,rbp
adc rdx,0
mov rbp,rdx
mul QWORD PTR[24+rcx]
add r12,rax
mov rax,QWORD PTR[16+rbx]
adc rdx,0
add r12,rbp
adc rdx,0
add r13,rdx
adc r14,0
adc r15,0
mov rdi,r10
imul r10,r8
mov r9,rax
mul QWORD PTR[rsi]
add r11,rax
mov rax,r9
adc rdx,0
mov rbp,rdx
mul QWORD PTR[8+rsi]
add r12,rax
mov rax,r9
adc rdx,0
add r12,rbp
adc rdx,0
mov rbp,rdx
mul QWORD PTR[16+rsi]
add r13,rax
mov rax,r9
adc rdx,0
add r13,rbp
adc rdx,0
mov rbp,rdx
mul QWORD PTR[24+rsi]
add r14,rax
mov rax,r10
adc rdx,0
add r14,rbp
adc r15,rdx
xor r9,r9
mul QWORD PTR[rcx]
add rdi,rax
mov rax,r10
adc rdi,rdx
mul QWORD PTR[8+rcx]
add r11,rax
mov rax,r10
adc rdx,0
add r11,rdi
adc rdx,0
mov rbp,rdx
mul QWORD PTR[16+rcx]
add r12,rax
mov rax,r10
adc rdx,0
add r12,rbp
adc rdx,0
mov rbp,rdx
mul QWORD PTR[24+rcx]
add r13,rax
mov rax,QWORD PTR[24+rbx]
adc rdx,0
add r13,rbp
adc rdx,0
add r14,rdx
adc r15,0
adc r9,0
mov rdi,r11
imul r11,r8
mov r10,rax
mul QWORD PTR[rsi]
add r12,rax
mov rax,r10
adc rdx,0
mov rbp,rdx
mul QWORD PTR[8+rsi]
add r13,rax
mov rax,r10
adc rdx,0
add r13,rbp
adc rdx,0
mov rbp,rdx
mul QWORD PTR[16+rsi]
add r14,rax
mov rax,r10
adc rdx,0
add r14,rbp
adc rdx,0
mov rbp,rdx
mul QWORD PTR[24+rsi]
add r15,rax
mov rax,r11
adc rdx,0
add r15,rbp
adc r9,rdx
xor r10,r10
mul QWORD PTR[rcx]
add rdi,rax
mov rax,r11
adc rdi,rdx
mul QWORD PTR[8+rcx]
add r12,rax
mov rax,r11
adc rdx,0
add r12,rdi
adc rdx,0
mov rbp,rdx
mul QWORD PTR[16+rcx]
add r13,rax
mov rax,r11
adc rdx,0
add r13,rbp
adc rdx,0
mov rbp,rdx
mul QWORD PTR[24+rcx]
add r14,rax
mov rax,r12
adc rdx,0
add r14,rbp
adc rdx,0
add r15,rdx
adc r9,0
adc r10,0
imul rax,r8
mov rsi,QWORD PTR[8+rsp]
mov r11,rax
mul QWORD PTR[rcx]
add r12,rax
mov rax,r11
adc r12,rdx
mul QWORD PTR[8+rcx]
add r13,rax
mov rax,r11
adc rdx,0
add r13,r12
adc rdx,0
mov rbp,rdx
mul QWORD PTR[16+rcx]
add r14,rax
mov rax,r11
adc rdx,0
add r14,rbp
adc rdx,0
mov rbp,rdx
mul QWORD PTR[24+rcx]
mov rbx,r14
add r15,rbp
adc rdx,0
add r15,rax
mov rax,r13
adc rdx,0
add r9,rdx
adc r10,0
mov r12,r15
sub r13,QWORD PTR[rcx]
sbb r14,QWORD PTR[8+rcx]
sbb r15,QWORD PTR[16+rcx]
mov rbp,r9
sbb r9,QWORD PTR[24+rcx]
sbb r10,0
cmovc r13,rax
cmovc r14,rbx
cmovc r15,r12
mov QWORD PTR[rsi],r13
cmovc r9,rbp
mov QWORD PTR[8+rsi],r14
mov QWORD PTR[16+rsi],r15
mov QWORD PTR[24+rsi],r9
ifdef __SGX_LVI_HARDENING__
pop rdx
lfence
jmp rdx
ud2
else
DB 0F3h,0C3h
endif
__mulq_mont_sparse_256 ENDP
PUBLIC from_mont_256
ALIGN 32
from_mont_256 PROC PUBLIC
DB 243,15,30,250
mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
mov QWORD PTR[16+rsp],rsi
mov r11,rsp
$L$SEH_begin_from_mont_256::
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
mov rcx,r9
ifdef __BLST_PORTABLE__
test DWORD PTR[__blst_platform_cap],1
jnz from_mont_256$1
endif
push rbp
push rbx
push r12
push r13
push r14
push r15
sub rsp,8
$L$SEH_body_from_mont_256::
mov rbx,rdx
call __mulq_by_1_mont_256
mov r10,r14
mov r11,r15
mov r12,r9
sub r13,QWORD PTR[rbx]
sbb r14,QWORD PTR[8+rbx]
sbb r15,QWORD PTR[16+rbx]
sbb r9,QWORD PTR[24+rbx]
cmovnc rax,r13
cmovnc r10,r14
cmovnc r11,r15
mov QWORD PTR[rdi],rax
cmovnc r12,r9
mov QWORD PTR[8+rdi],r10
mov QWORD PTR[16+rdi],r11
mov QWORD PTR[24+rdi],r12
mov r15,QWORD PTR[8+rsp]
mov r14,QWORD PTR[16+rsp]
mov r13,QWORD PTR[24+rsp]
mov r12,QWORD PTR[32+rsp]
mov rbx,QWORD PTR[40+rsp]
mov rbp,QWORD PTR[48+rsp]
lea rsp,QWORD PTR[56+rsp]
$L$SEH_epilogue_from_mont_256::
mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
mov rsi,QWORD PTR[16+rsp]
ifdef __SGX_LVI_HARDENING__
pop rdx
lfence
jmp rdx
ud2
else
DB 0F3h,0C3h
endif
$L$SEH_end_from_mont_256::
from_mont_256 ENDP
PUBLIC redc_mont_256
ALIGN 32
redc_mont_256 PROC PUBLIC
DB 243,15,30,250
mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
mov QWORD PTR[16+rsp],rsi
mov r11,rsp
$L$SEH_begin_redc_mont_256::
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
mov rcx,r9
ifdef __BLST_PORTABLE__
test DWORD PTR[__blst_platform_cap],1
jnz redc_mont_256$1
endif
push rbp
push rbx
push r12
push r13
push r14
push r15
sub rsp,8
$L$SEH_body_redc_mont_256::
mov rbx,rdx
call __mulq_by_1_mont_256
add r13,QWORD PTR[32+rsi]
adc r14,QWORD PTR[40+rsi]
mov rax,r13
adc r15,QWORD PTR[48+rsi]
mov r10,r14
adc r9,QWORD PTR[56+rsi]
sbb rsi,rsi
mov r11,r15
sub r13,QWORD PTR[rbx]
sbb r14,QWORD PTR[8+rbx]
sbb r15,QWORD PTR[16+rbx]
mov r12,r9
sbb r9,QWORD PTR[24+rbx]
sbb rsi,0
cmovnc rax,r13
cmovnc r10,r14
cmovnc r11,r15
mov QWORD PTR[rdi],rax
cmovnc r12,r9
mov QWORD PTR[8+rdi],r10
mov QWORD PTR[16+rdi],r11
mov QWORD PTR[24+rdi],r12
mov r15,QWORD PTR[8+rsp]
mov r14,QWORD PTR[16+rsp]
mov r13,QWORD PTR[24+rsp]
mov r12,QWORD PTR[32+rsp]
mov rbx,QWORD PTR[40+rsp]
mov rbp,QWORD PTR[48+rsp]
lea rsp,QWORD PTR[56+rsp]
$L$SEH_epilogue_redc_mont_256::
mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
mov rsi,QWORD PTR[16+rsp]
ifdef __SGX_LVI_HARDENING__
pop rdx
lfence
jmp rdx
ud2
else
DB 0F3h,0C3h
endif
$L$SEH_end_redc_mont_256::
redc_mont_256 ENDP
ALIGN 32
__mulq_by_1_mont_256 PROC PRIVATE
DB 243,15,30,250
mov rax,QWORD PTR[rsi]
mov r10,QWORD PTR[8+rsi]
mov r11,QWORD PTR[16+rsi]
mov r12,QWORD PTR[24+rsi]
mov r13,rax
imul rax,rcx
mov r9,rax
mul QWORD PTR[rbx]
add r13,rax
mov rax,r9
adc r13,rdx
mul QWORD PTR[8+rbx]
add r10,rax
mov rax,r9
adc rdx,0
add r10,r13
adc rdx,0
mov r13,rdx
mul QWORD PTR[16+rbx]
mov r14,r10
imul r10,rcx
add r11,rax
mov rax,r9
adc rdx,0
add r11,r13
adc rdx,0
mov r13,rdx
mul QWORD PTR[24+rbx]
add r12,rax
mov rax,r10
adc rdx,0
add r12,r13
adc rdx,0
mov r13,rdx
mul QWORD PTR[rbx]
add r14,rax
mov rax,r10
adc r14,rdx
mul QWORD PTR[8+rbx]
add r11,rax
mov rax,r10
adc rdx,0
add r11,r14
adc rdx,0
mov r14,rdx
mul QWORD PTR[16+rbx]
mov r15,r11
imul r11,rcx
add r12,rax
mov rax,r10
adc rdx,0
add r12,r14
adc rdx,0
mov r14,rdx
mul QWORD PTR[24+rbx]
add r13,rax
mov rax,r11
adc rdx,0
add r13,r14
adc rdx,0
mov r14,rdx
mul QWORD PTR[rbx]
add r15,rax
mov rax,r11
adc r15,rdx
mul QWORD PTR[8+rbx]
add r12,rax
mov rax,r11
adc rdx,0
add r12,r15
adc rdx,0
mov r15,rdx
mul QWORD PTR[16+rbx]
mov r9,r12
imul r12,rcx
add r13,rax
mov rax,r11
adc rdx,0
add r13,r15
adc rdx,0
mov r15,rdx
mul QWORD PTR[24+rbx]
add r14,rax
mov rax,r12
adc rdx,0
add r14,r15
adc rdx,0
mov r15,rdx
mul QWORD PTR[rbx]
add r9,rax
mov rax,r12
adc r9,rdx
mul QWORD PTR[8+rbx]
add r13,rax
mov rax,r12
adc rdx,0
add r13,r9
adc rdx,0
mov r9,rdx
mul QWORD PTR[16+rbx]
add r14,rax
mov rax,r12
adc rdx,0
add r14,r9
adc rdx,0
mov r9,rdx
mul QWORD PTR[24+rbx]
add r15,rax
mov rax,r13
adc rdx,0
add r15,r9
adc rdx,0
mov r9,rdx
ifdef __SGX_LVI_HARDENING__
pop rdx
lfence
jmp rdx
ud2
else
DB 0F3h,0C3h
endif
__mulq_by_1_mont_256 ENDP
.text$ ENDS
.pdata SEGMENT READONLY ALIGN(4)
ALIGN 4
DD imagerel $L$SEH_begin_mul_mont_sparse_256
DD imagerel $L$SEH_body_mul_mont_sparse_256
DD imagerel $L$SEH_info_mul_mont_sparse_256_prologue
DD imagerel $L$SEH_body_mul_mont_sparse_256
DD imagerel $L$SEH_epilogue_mul_mont_sparse_256
DD imagerel $L$SEH_info_mul_mont_sparse_256_body
DD imagerel $L$SEH_epilogue_mul_mont_sparse_256
DD imagerel $L$SEH_end_mul_mont_sparse_256
DD imagerel $L$SEH_info_mul_mont_sparse_256_epilogue
DD imagerel $L$SEH_begin_sqr_mont_sparse_256
DD imagerel $L$SEH_body_sqr_mont_sparse_256
DD imagerel $L$SEH_info_sqr_mont_sparse_256_prologue
DD imagerel $L$SEH_body_sqr_mont_sparse_256
DD imagerel $L$SEH_epilogue_sqr_mont_sparse_256
DD imagerel $L$SEH_info_sqr_mont_sparse_256_body
DD imagerel $L$SEH_epilogue_sqr_mont_sparse_256
DD imagerel $L$SEH_end_sqr_mont_sparse_256
DD imagerel $L$SEH_info_sqr_mont_sparse_256_epilogue
DD imagerel $L$SEH_begin_from_mont_256
DD imagerel $L$SEH_body_from_mont_256
DD imagerel $L$SEH_info_from_mont_256_prologue
DD imagerel $L$SEH_body_from_mont_256
DD imagerel $L$SEH_epilogue_from_mont_256
DD imagerel $L$SEH_info_from_mont_256_body
DD imagerel $L$SEH_epilogue_from_mont_256
DD imagerel $L$SEH_end_from_mont_256
DD imagerel $L$SEH_info_from_mont_256_epilogue
DD imagerel $L$SEH_begin_redc_mont_256
DD imagerel $L$SEH_body_redc_mont_256
DD imagerel $L$SEH_info_redc_mont_256_prologue
DD imagerel $L$SEH_body_redc_mont_256
DD imagerel $L$SEH_epilogue_redc_mont_256
DD imagerel $L$SEH_info_redc_mont_256_body
DD imagerel $L$SEH_epilogue_redc_mont_256
DD imagerel $L$SEH_end_redc_mont_256
DD imagerel $L$SEH_info_redc_mont_256_epilogue
.pdata ENDS
.xdata SEGMENT READONLY ALIGN(8)
ALIGN 8
$L$SEH_info_mul_mont_sparse_256_prologue::
DB 1,0,5,00bh
DB 0,074h,1,0
DB 0,064h,2,0
DB 0,0b3h
DB 0,0
DD 0,0
$L$SEH_info_mul_mont_sparse_256_body::
DB 1,0,17,0
DB 000h,0f4h,001h,000h
DB 000h,0e4h,002h,000h
DB 000h,0d4h,003h,000h
DB 000h,0c4h,004h,000h
DB 000h,034h,005h,000h
DB 000h,054h,006h,000h
DB 000h,074h,008h,000h
DB 000h,064h,009h,000h
DB 000h,062h
DB 000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h
$L$SEH_info_mul_mont_sparse_256_epilogue::
DB 1,0,4,0
DB 000h,074h,001h,000h
DB 000h,064h,002h,000h
DB 000h,000h,000h,000h
$L$SEH_info_sqr_mont_sparse_256_prologue::
DB 1,0,5,00bh
DB 0,074h,1,0
DB 0,064h,2,0
DB 0,0b3h
DB 0,0
DD 0,0
$L$SEH_info_sqr_mont_sparse_256_body::
DB 1,0,17,0
DB 000h,0f4h,001h,000h
DB 000h,0e4h,002h,000h
DB 000h,0d4h,003h,000h
DB 000h,0c4h,004h,000h
DB 000h,034h,005h,000h
DB 000h,054h,006h,000h
DB 000h,074h,008h,000h
DB 000h,064h,009h,000h
DB 000h,062h
DB 000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h
$L$SEH_info_sqr_mont_sparse_256_epilogue::
DB 1,0,4,0
DB 000h,074h,001h,000h
DB 000h,064h,002h,000h
DB 000h,000h,000h,000h
$L$SEH_info_from_mont_256_prologue::
DB 1,0,5,00bh
DB 0,074h,1,0
DB 0,064h,2,0
DB 0,0b3h
DB 0,0
DD 0,0
$L$SEH_info_from_mont_256_body::
DB 1,0,17,0
DB 000h,0f4h,001h,000h
DB 000h,0e4h,002h,000h
DB 000h,0d4h,003h,000h
DB 000h,0c4h,004h,000h
DB 000h,034h,005h,000h
DB 000h,054h,006h,000h
DB 000h,074h,008h,000h
DB 000h,064h,009h,000h
DB 000h,062h
DB 000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h
$L$SEH_info_from_mont_256_epilogue::
DB 1,0,4,0
DB 000h,074h,001h,000h
DB 000h,064h,002h,000h
DB 000h,000h,000h,000h
$L$SEH_info_redc_mont_256_prologue::
DB 1,0,5,00bh
DB 0,074h,1,0
DB 0,064h,2,0
DB 0,0b3h
DB 0,0
DD 0,0
$L$SEH_info_redc_mont_256_body::
DB 1,0,17,0
DB 000h,0f4h,001h,000h
DB 000h,0e4h,002h,000h
DB 000h,0d4h,003h,000h
DB 000h,0c4h,004h,000h
DB 000h,034h,005h,000h
DB 000h,054h,006h,000h
DB 000h,074h,008h,000h
DB 000h,064h,009h,000h
DB 000h,062h
DB 000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h
$L$SEH_info_redc_mont_256_epilogue::
DB 1,0,4,0
DB 000h,074h,001h,000h
DB 000h,064h,002h,000h
DB 000h,000h,000h,000h
.xdata ENDS
END