-rw-r--r-- 2656 lib25519-20240928/crypto_nP/montgomery25519/amd64-maax/fe25519_nsquare.S raw
#include "crypto_asm_hidden.h"
// linker define fe25519_nsquare
// linker use mask63
/* Assembly for feedback field squaring. */
#define mask63 CRYPTO_SHARED_NAMESPACE(mask63)
.p2align 5
ASM_HIDDEN _CRYPTO_SHARED_NAMESPACE(fe25519_nsquare)
.globl _CRYPTO_SHARED_NAMESPACE(fe25519_nsquare)
ASM_HIDDEN CRYPTO_SHARED_NAMESPACE(fe25519_nsquare)
.globl CRYPTO_SHARED_NAMESPACE(fe25519_nsquare)
_CRYPTO_SHARED_NAMESPACE(fe25519_nsquare):
CRYPTO_SHARED_NAMESPACE(fe25519_nsquare):
movq %rsp,%r11
andq $-32,%rsp
subq $64,%rsp
movq %r11,0(%rsp)
movq %r12,8(%rsp)
movq %r13,16(%rsp)
movq %r14,24(%rsp)
movq %r15,32(%rsp)
movq %rbx,40(%rsp)
movq %rbp,48(%rsp)
movq %rdi,56(%rsp)
movq 0(%rsi),%rbx
movq 8(%rsi),%rbp
movq 16(%rsi),%rax
movq 24(%rsi),%rsi
movq %rdx,%rdi
.L:
xorq %r13,%r13
movq %rbx,%rdx
mulx %rbp,%r9,%r10
mulx %rax,%rcx,%r11
adcx %rcx,%r10
mulx %rsi,%rcx,%r12
adcx %rcx,%r11
adcx %r13,%r12
movq %rbp,%rdx
xorq %r14,%r14
mulx %rax,%rcx,%rdx
adcx %rcx,%r11
adox %rdx,%r12
movq %rbp,%rdx
mulx %rsi,%rcx,%rdx
adcx %rcx,%r12
adox %rdx,%r13
adcx %r14,%r13
xorq %r15,%r15
movq %rax,%rdx
mulx %rsi,%rcx,%r14
adcx %rcx,%r13
adcx %r15,%r14
shld $1,%r14,%r15
shld $1,%r13,%r14
shld $1,%r12,%r13
shld $1,%r11,%r12
shld $1,%r10,%r11
shld $1,%r9,%r10
shlq $1,%r9
xorq %rdx,%rdx
movq %rbx,%rdx
mulx %rdx,%r8,%rdx
adcx %rdx,%r9
movq %rbp,%rdx
mulx %rdx,%rcx,%rdx
adcx %rcx,%r10
adcx %rdx,%r11
movq %rax,%rdx
mulx %rdx,%rcx,%rdx
adcx %rcx,%r12
adcx %rdx,%r13
movq %rsi,%rdx
mulx %rdx,%rcx,%rdx
adcx %rcx,%r14
adcx %rdx,%r15
xorq %rbx,%rbx
movq $38,%rdx
mulx %r12,%r12,%rbp
adcx %r8,%r12
adox %r9,%rbp
mulx %r13,%rcx,%rax
adcx %rcx,%rbp
adox %r10,%rax
mulx %r14,%rcx,%rsi
adcx %rcx,%rax
adox %r11,%rsi
mulx %r15,%rcx,%r15
adcx %rcx,%rsi
adox %rbx,%r15
adcx %rbx,%r15
shld $1,%rsi,%r15
andq mask63(%rip),%rsi
imul $19,%r15,%rbx
addq %r12,%rbx
adcq $0,%rbp
adcq $0,%rax
adcq $0,%rsi
subq $1,%rdi
cmpq $0,%rdi
jne .L
movq 56(%rsp),%rdi
movq %rbx,0(%rdi)
movq %rbp,8(%rdi)
movq %rax,16(%rdi)
movq %rsi,24(%rdi)
movq 0(%rsp),%r11
movq 8(%rsp),%r12
movq 16(%rsp),%r13
movq 24(%rsp),%r14
movq 32(%rsp),%r15
movq 40(%rsp),%rbx
movq 48(%rsp),%rbp
movq %r11,%rsp
ret
.section .note.GNU-stack,"",@progbits