mirror of
https://github.com/luxfi/blst.git
synced 2026-10-30 17:01:37 +00:00
282 lines
4.4 KiB
ArmAsm
282 lines
4.4 KiB
ArmAsm
.text
|
|
|
|
.globl div_3_limbs
|
|
|
|
.def div_3_limbs; .scl 2; .type 32; .endef
|
|
.p2align 5
|
|
div_3_limbs:
|
|
.byte 0xf3,0x0f,0x1e,0xfa
|
|
movq %rdi,8(%rsp)
|
|
movq %rsi,16(%rsp)
|
|
movq %rsp,%r11
|
|
.LSEH_begin_div_3_limbs:
|
|
|
|
|
|
movq %rcx,%rdi
|
|
movq %rdx,%rsi
|
|
movq %r8,%rdx
|
|
.LSEH_body_div_3_limbs:
|
|
|
|
#ifdef __SGX_LVI_HARDENING__
|
|
lfence
|
|
#endif
|
|
movq (%rdi),%r8
|
|
movq 8(%rdi),%r9
|
|
xorq %rax,%rax
|
|
movl $64,%ecx
|
|
|
|
.Loop:
|
|
movq %r8,%r10
|
|
subq %rsi,%r8
|
|
movq %r9,%r11
|
|
sbbq %rdx,%r9
|
|
leaq 1(%rax,%rax,1),%rax
|
|
movq %rdx,%rdi
|
|
cmovcq %r10,%r8
|
|
cmovcq %r11,%r9
|
|
sbbq $0,%rax
|
|
shlq $63,%rdi
|
|
shrq $1,%rsi
|
|
shrq $1,%rdx
|
|
orq %rdi,%rsi
|
|
subl $1,%ecx
|
|
jnz .Loop
|
|
|
|
leaq 1(%rax,%rax,1),%rcx
|
|
sarq $63,%rax
|
|
|
|
subq %rsi,%r8
|
|
sbbq %rdx,%r9
|
|
sbbq $0,%rcx
|
|
|
|
orq %rcx,%rax
|
|
|
|
.LSEH_epilogue_div_3_limbs:
|
|
mov 8(%rsp),%rdi
|
|
mov 16(%rsp),%rsi
|
|
|
|
|
|
#ifdef __SGX_LVI_HARDENING__
|
|
popq %rdx
|
|
lfence
|
|
jmpq *%rdx
|
|
ud2
|
|
#else
|
|
.byte 0xf3,0xc3
|
|
#endif
|
|
|
|
.LSEH_end_div_3_limbs:
|
|
.globl quot_rem_128
|
|
|
|
.def quot_rem_128; .scl 2; .type 32; .endef
|
|
.p2align 5
|
|
quot_rem_128:
|
|
.byte 0xf3,0x0f,0x1e,0xfa
|
|
movq %rdi,8(%rsp)
|
|
movq %rsi,16(%rsp)
|
|
movq %rsp,%r11
|
|
.LSEH_begin_quot_rem_128:
|
|
|
|
|
|
movq %rcx,%rdi
|
|
movq %rdx,%rsi
|
|
movq %r8,%rdx
|
|
.LSEH_body_quot_rem_128:
|
|
|
|
#ifdef __SGX_LVI_HARDENING__
|
|
lfence
|
|
#endif
|
|
movq %rdx,%rax
|
|
movq %rdx,%rcx
|
|
|
|
mulq 0(%rsi)
|
|
movq %rax,%r8
|
|
movq %rcx,%rax
|
|
movq %rdx,%r9
|
|
|
|
mulq 8(%rsi)
|
|
addq %rax,%r9
|
|
adcq $0,%rdx
|
|
|
|
movq 0(%rdi),%r10
|
|
movq 8(%rdi),%r11
|
|
movq 16(%rdi),%rax
|
|
|
|
subq %r8,%r10
|
|
sbbq %r9,%r11
|
|
sbbq %rdx,%rax
|
|
sbbq %r8,%r8
|
|
|
|
addq %r8,%rcx
|
|
movq %r8,%r9
|
|
andq 0(%rsi),%r8
|
|
andq 8(%rsi),%r9
|
|
addq %r8,%r10
|
|
adcq %r9,%r11
|
|
|
|
movq %r10,0(%rdi)
|
|
movq %r11,8(%rdi)
|
|
movq %rcx,16(%rdi)
|
|
|
|
movq %rcx,%rax
|
|
|
|
.LSEH_epilogue_quot_rem_128:
|
|
mov 8(%rsp),%rdi
|
|
mov 16(%rsp),%rsi
|
|
|
|
|
|
#ifdef __SGX_LVI_HARDENING__
|
|
popq %rdx
|
|
lfence
|
|
jmpq *%rdx
|
|
ud2
|
|
#else
|
|
.byte 0xf3,0xc3
|
|
#endif
|
|
|
|
.LSEH_end_quot_rem_128:
|
|
|
|
|
|
|
|
|
|
|
|
.globl quot_rem_64
|
|
|
|
.def quot_rem_64; .scl 2; .type 32; .endef
|
|
.p2align 5
|
|
quot_rem_64:
|
|
.byte 0xf3,0x0f,0x1e,0xfa
|
|
movq %rdi,8(%rsp)
|
|
movq %rsi,16(%rsp)
|
|
movq %rsp,%r11
|
|
.LSEH_begin_quot_rem_64:
|
|
|
|
|
|
movq %rcx,%rdi
|
|
movq %rdx,%rsi
|
|
movq %r8,%rdx
|
|
.LSEH_body_quot_rem_64:
|
|
|
|
#ifdef __SGX_LVI_HARDENING__
|
|
lfence
|
|
#endif
|
|
movq %rdx,%rax
|
|
imulq 0(%rsi),%rdx
|
|
|
|
movq 0(%rdi),%r10
|
|
|
|
subq %rdx,%r10
|
|
|
|
movq %r10,0(%rdi)
|
|
movq %rax,8(%rdi)
|
|
|
|
.LSEH_epilogue_quot_rem_64:
|
|
mov 8(%rsp),%rdi
|
|
mov 16(%rsp),%rsi
|
|
|
|
|
|
#ifdef __SGX_LVI_HARDENING__
|
|
popq %rdx
|
|
lfence
|
|
jmpq *%rdx
|
|
ud2
|
|
#else
|
|
.byte 0xf3,0xc3
|
|
#endif
|
|
|
|
.LSEH_end_quot_rem_64:
|
|
.section .pdata
|
|
.p2align 2
|
|
.rva .LSEH_begin_div_3_limbs
|
|
.rva .LSEH_body_div_3_limbs
|
|
.rva .LSEH_info_div_3_limbs_prologue
|
|
|
|
.rva .LSEH_body_div_3_limbs
|
|
.rva .LSEH_epilogue_div_3_limbs
|
|
.rva .LSEH_info_div_3_limbs_body
|
|
|
|
.rva .LSEH_epilogue_div_3_limbs
|
|
.rva .LSEH_end_div_3_limbs
|
|
.rva .LSEH_info_div_3_limbs_epilogue
|
|
|
|
.rva .LSEH_begin_quot_rem_128
|
|
.rva .LSEH_body_quot_rem_128
|
|
.rva .LSEH_info_quot_rem_128_prologue
|
|
|
|
.rva .LSEH_body_quot_rem_128
|
|
.rva .LSEH_epilogue_quot_rem_128
|
|
.rva .LSEH_info_quot_rem_128_body
|
|
|
|
.rva .LSEH_epilogue_quot_rem_128
|
|
.rva .LSEH_end_quot_rem_128
|
|
.rva .LSEH_info_quot_rem_128_epilogue
|
|
|
|
.rva .LSEH_begin_quot_rem_64
|
|
.rva .LSEH_body_quot_rem_64
|
|
.rva .LSEH_info_quot_rem_64_prologue
|
|
|
|
.rva .LSEH_body_quot_rem_64
|
|
.rva .LSEH_epilogue_quot_rem_64
|
|
.rva .LSEH_info_quot_rem_64_body
|
|
|
|
.rva .LSEH_epilogue_quot_rem_64
|
|
.rva .LSEH_end_quot_rem_64
|
|
.rva .LSEH_info_quot_rem_64_epilogue
|
|
|
|
.section .xdata
|
|
.p2align 3
|
|
.LSEH_info_div_3_limbs_prologue:
|
|
.byte 1,0,5,0x0b
|
|
.byte 0,0x74,1,0
|
|
.byte 0,0x64,2,0
|
|
.byte 0,0xb3
|
|
.byte 0,0
|
|
.long 0,0
|
|
.LSEH_info_div_3_limbs_body:
|
|
.byte 1,0,4,0
|
|
.byte 0x00,0x74,0x01,0x00
|
|
.byte 0x00,0x64,0x02,0x00
|
|
.byte 0x00,0x00,0x00,0x00
|
|
.LSEH_info_div_3_limbs_epilogue:
|
|
.byte 1,0,4,0
|
|
.byte 0x00,0x74,0x01,0x00
|
|
.byte 0x00,0x64,0x02,0x00
|
|
.byte 0x00,0x00,0x00,0x00
|
|
|
|
.LSEH_info_quot_rem_128_prologue:
|
|
.byte 1,0,5,0x0b
|
|
.byte 0,0x74,1,0
|
|
.byte 0,0x64,2,0
|
|
.byte 0,0xb3
|
|
.byte 0,0
|
|
.long 0,0
|
|
.LSEH_info_quot_rem_128_body:
|
|
.byte 1,0,4,0
|
|
.byte 0x00,0x74,0x01,0x00
|
|
.byte 0x00,0x64,0x02,0x00
|
|
.byte 0x00,0x00,0x00,0x00
|
|
.LSEH_info_quot_rem_128_epilogue:
|
|
.byte 1,0,4,0
|
|
.byte 0x00,0x74,0x01,0x00
|
|
.byte 0x00,0x64,0x02,0x00
|
|
.byte 0x00,0x00,0x00,0x00
|
|
|
|
.LSEH_info_quot_rem_64_prologue:
|
|
.byte 1,0,5,0x0b
|
|
.byte 0,0x74,1,0
|
|
.byte 0,0x64,2,0
|
|
.byte 0,0xb3
|
|
.byte 0,0
|
|
.long 0,0
|
|
.LSEH_info_quot_rem_64_body:
|
|
.byte 1,0,4,0
|
|
.byte 0x00,0x74,0x01,0x00
|
|
.byte 0x00,0x64,0x02,0x00
|
|
.byte 0x00,0x00,0x00,0x00
|
|
.LSEH_info_quot_rem_64_epilogue:
|
|
.byte 1,0,4,0
|
|
.byte 0x00,0x74,0x01,0x00
|
|
.byte 0x00,0x64,0x02,0x00
|
|
.byte 0x00,0x00,0x00,0x00
|
|
|