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

291 lines
4.7 KiB
NASM

OPTION DOTNAME
.text$ SEGMENT ALIGN(256) 'CODE'
PUBLIC div_3_limbs
ALIGN 32
div_3_limbs 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_div_3_limbs::
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
$L$SEH_body_div_3_limbs::
ifdef __SGX_LVI_HARDENING__
lfence
endif
mov r8,QWORD PTR[rdi]
mov r9,QWORD PTR[8+rdi]
xor rax,rax
mov ecx,64
$L$oop::
mov r10,r8
sub r8,rsi
mov r11,r9
sbb r9,rdx
lea rax,QWORD PTR[1+rax*1+rax]
mov rdi,rdx
cmovc r8,r10
cmovc r9,r11
sbb rax,0
shl rdi,63
shr rsi,1
shr rdx,1
or rsi,rdi
sub ecx,1
jnz $L$oop
lea rcx,QWORD PTR[1+rax*1+rax]
sar rax,63
sub r8,rsi
sbb r9,rdx
sbb rcx,0
or rax,rcx
$L$SEH_epilogue_div_3_limbs::
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_div_3_limbs::
div_3_limbs ENDP
PUBLIC quot_rem_128
ALIGN 32
quot_rem_128 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_quot_rem_128::
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
$L$SEH_body_quot_rem_128::
ifdef __SGX_LVI_HARDENING__
lfence
endif
mov rax,rdx
mov rcx,rdx
mul QWORD PTR[rsi]
mov r8,rax
mov rax,rcx
mov r9,rdx
mul QWORD PTR[8+rsi]
add r9,rax
adc rdx,0
mov r10,QWORD PTR[rdi]
mov r11,QWORD PTR[8+rdi]
mov rax,QWORD PTR[16+rdi]
sub r10,r8
sbb r11,r9
sbb rax,rdx
sbb r8,r8
add rcx,r8
mov r9,r8
and r8,QWORD PTR[rsi]
and r9,QWORD PTR[8+rsi]
add r10,r8
adc r11,r9
mov QWORD PTR[rdi],r10
mov QWORD PTR[8+rdi],r11
mov QWORD PTR[16+rdi],rcx
mov rax,rcx
$L$SEH_epilogue_quot_rem_128::
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_quot_rem_128::
quot_rem_128 ENDP
PUBLIC quot_rem_64
ALIGN 32
quot_rem_64 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_quot_rem_64::
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
$L$SEH_body_quot_rem_64::
ifdef __SGX_LVI_HARDENING__
lfence
endif
mov rax,rdx
imul rdx,QWORD PTR[rsi]
mov r10,QWORD PTR[rdi]
sub r10,rdx
mov QWORD PTR[rdi],r10
mov QWORD PTR[8+rdi],rax
$L$SEH_epilogue_quot_rem_64::
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_quot_rem_64::
quot_rem_64 ENDP
.text$ ENDS
.pdata SEGMENT READONLY ALIGN(4)
ALIGN 4
DD imagerel $L$SEH_begin_div_3_limbs
DD imagerel $L$SEH_body_div_3_limbs
DD imagerel $L$SEH_info_div_3_limbs_prologue
DD imagerel $L$SEH_body_div_3_limbs
DD imagerel $L$SEH_epilogue_div_3_limbs
DD imagerel $L$SEH_info_div_3_limbs_body
DD imagerel $L$SEH_epilogue_div_3_limbs
DD imagerel $L$SEH_end_div_3_limbs
DD imagerel $L$SEH_info_div_3_limbs_epilogue
DD imagerel $L$SEH_begin_quot_rem_128
DD imagerel $L$SEH_body_quot_rem_128
DD imagerel $L$SEH_info_quot_rem_128_prologue
DD imagerel $L$SEH_body_quot_rem_128
DD imagerel $L$SEH_epilogue_quot_rem_128
DD imagerel $L$SEH_info_quot_rem_128_body
DD imagerel $L$SEH_epilogue_quot_rem_128
DD imagerel $L$SEH_end_quot_rem_128
DD imagerel $L$SEH_info_quot_rem_128_epilogue
DD imagerel $L$SEH_begin_quot_rem_64
DD imagerel $L$SEH_body_quot_rem_64
DD imagerel $L$SEH_info_quot_rem_64_prologue
DD imagerel $L$SEH_body_quot_rem_64
DD imagerel $L$SEH_epilogue_quot_rem_64
DD imagerel $L$SEH_info_quot_rem_64_body
DD imagerel $L$SEH_epilogue_quot_rem_64
DD imagerel $L$SEH_end_quot_rem_64
DD imagerel $L$SEH_info_quot_rem_64_epilogue
.pdata ENDS
.xdata SEGMENT READONLY ALIGN(8)
ALIGN 8
$L$SEH_info_div_3_limbs_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_div_3_limbs_body::
DB 1,0,4,0
DB 000h,074h,001h,000h
DB 000h,064h,002h,000h
DB 000h,000h,000h,000h
$L$SEH_info_div_3_limbs_epilogue::
DB 1,0,4,0
DB 000h,074h,001h,000h
DB 000h,064h,002h,000h
DB 000h,000h,000h,000h
$L$SEH_info_quot_rem_128_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_quot_rem_128_body::
DB 1,0,4,0
DB 000h,074h,001h,000h
DB 000h,064h,002h,000h
DB 000h,000h,000h,000h
$L$SEH_info_quot_rem_128_epilogue::
DB 1,0,4,0
DB 000h,074h,001h,000h
DB 000h,064h,002h,000h
DB 000h,000h,000h,000h
$L$SEH_info_quot_rem_64_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_quot_rem_64_body::
DB 1,0,4,0
DB 000h,074h,001h,000h
DB 000h,064h,002h,000h
DB 000h,000h,000h,000h
$L$SEH_info_quot_rem_64_epilogue::
DB 1,0,4,0
DB 000h,074h,001h,000h
DB 000h,064h,002h,000h
DB 000h,000h,000h,000h
.xdata ENDS
END