mirror of
https://github.com/luxfi/blst.git
synced 2026-11-03 06:48:36 +00:00
469 lines
6.9 KiB
NASM
469 lines
6.9 KiB
NASM
GBLA __SIZEOF_POINTER__
|
|
__SIZEOF_POINTER__ SETA 64/8
|
|
AREA |.text|,CODE,ALIGN=8,ARM64
|
|
|
|
|
|
|
|
EXPORT |mul_mont_sparse_256|[FUNC]
|
|
ALIGN 32
|
|
|mul_mont_sparse_256| PROC
|
|
hint #34
|
|
stp x29,x30,[sp,#-8*__SIZEOF_POINTER__]!
|
|
add x29,sp,#0
|
|
stp x19,x20,[sp,#2*__SIZEOF_POINTER__]
|
|
stp x21,x22,[sp,#4*__SIZEOF_POINTER__]
|
|
stp x23,x24,[sp,#6*__SIZEOF_POINTER__]
|
|
|
|
ldp x10,x11,[x1]
|
|
ldr x9, [x2]
|
|
ldp x12,x13,[x1,#16]
|
|
|
|
mul x19,x10,x9
|
|
ldp x5,x6,[x3]
|
|
mul x20,x11,x9
|
|
ldp x7,x8,[x3,#16]
|
|
mul x21,x12,x9
|
|
mul x22,x13,x9
|
|
|
|
umulh x14,x10,x9
|
|
umulh x15,x11,x9
|
|
mul x3,x4,x19
|
|
umulh x16,x12,x9
|
|
umulh x17,x13,x9
|
|
adds x20,x20,x14
|
|
|
|
adcs x21,x21,x15
|
|
mul x15,x6,x3
|
|
adcs x22,x22,x16
|
|
mul x16,x7,x3
|
|
adc x23,xzr, x17
|
|
mul x17,x8,x3
|
|
ldr x9,[x2,8*1]
|
|
subs xzr,x19,#1
|
|
umulh x14,x5,x3
|
|
adcs x20,x20,x15
|
|
umulh x15,x6,x3
|
|
adcs x21,x21,x16
|
|
umulh x16,x7,x3
|
|
adcs x22,x22,x17
|
|
umulh x17,x8,x3
|
|
adc x23,x23,xzr
|
|
|
|
adds x19,x20,x14
|
|
mul x14,x10,x9
|
|
adcs x20,x21,x15
|
|
mul x15,x11,x9
|
|
adcs x21,x22,x16
|
|
mul x16,x12,x9
|
|
adcs x22,x23,x17
|
|
mul x17,x13,x9
|
|
adc x23,xzr,xzr
|
|
|
|
adds x19,x19,x14
|
|
umulh x14,x10,x9
|
|
adcs x20,x20,x15
|
|
umulh x15,x11,x9
|
|
adcs x21,x21,x16
|
|
mul x3,x4,x19
|
|
umulh x16,x12,x9
|
|
adcs x22,x22,x17
|
|
umulh x17,x13,x9
|
|
adc x23,x23,xzr
|
|
|
|
adds x20,x20,x14
|
|
|
|
adcs x21,x21,x15
|
|
mul x15,x6,x3
|
|
adcs x22,x22,x16
|
|
mul x16,x7,x3
|
|
adc x23,x23,x17
|
|
mul x17,x8,x3
|
|
ldr x9,[x2,8*2]
|
|
subs xzr,x19,#1
|
|
umulh x14,x5,x3
|
|
adcs x20,x20,x15
|
|
umulh x15,x6,x3
|
|
adcs x21,x21,x16
|
|
umulh x16,x7,x3
|
|
adcs x22,x22,x17
|
|
umulh x17,x8,x3
|
|
adc x23,x23,xzr
|
|
|
|
adds x19,x20,x14
|
|
mul x14,x10,x9
|
|
adcs x20,x21,x15
|
|
mul x15,x11,x9
|
|
adcs x21,x22,x16
|
|
mul x16,x12,x9
|
|
adcs x22,x23,x17
|
|
mul x17,x13,x9
|
|
adc x23,xzr,xzr
|
|
|
|
adds x19,x19,x14
|
|
umulh x14,x10,x9
|
|
adcs x20,x20,x15
|
|
umulh x15,x11,x9
|
|
adcs x21,x21,x16
|
|
mul x3,x4,x19
|
|
umulh x16,x12,x9
|
|
adcs x22,x22,x17
|
|
umulh x17,x13,x9
|
|
adc x23,x23,xzr
|
|
|
|
adds x20,x20,x14
|
|
|
|
adcs x21,x21,x15
|
|
mul x15,x6,x3
|
|
adcs x22,x22,x16
|
|
mul x16,x7,x3
|
|
adc x23,x23,x17
|
|
mul x17,x8,x3
|
|
ldr x9,[x2,8*3]
|
|
subs xzr,x19,#1
|
|
umulh x14,x5,x3
|
|
adcs x20,x20,x15
|
|
umulh x15,x6,x3
|
|
adcs x21,x21,x16
|
|
umulh x16,x7,x3
|
|
adcs x22,x22,x17
|
|
umulh x17,x8,x3
|
|
adc x23,x23,xzr
|
|
|
|
adds x19,x20,x14
|
|
mul x14,x10,x9
|
|
adcs x20,x21,x15
|
|
mul x15,x11,x9
|
|
adcs x21,x22,x16
|
|
mul x16,x12,x9
|
|
adcs x22,x23,x17
|
|
mul x17,x13,x9
|
|
adc x23,xzr,xzr
|
|
|
|
adds x19,x19,x14
|
|
umulh x14,x10,x9
|
|
adcs x20,x20,x15
|
|
umulh x15,x11,x9
|
|
adcs x21,x21,x16
|
|
mul x3,x4,x19
|
|
umulh x16,x12,x9
|
|
adcs x22,x22,x17
|
|
umulh x17,x13,x9
|
|
adc x23,x23,xzr
|
|
|
|
adds x20,x20,x14
|
|
|
|
adcs x21,x21,x15
|
|
mul x15,x6,x3
|
|
adcs x22,x22,x16
|
|
mul x16,x7,x3
|
|
adc x23,x23,x17
|
|
mul x17,x8,x3
|
|
subs xzr,x19,#1
|
|
umulh x14,x5,x3
|
|
adcs x20,x20,x15
|
|
umulh x15,x6,x3
|
|
adcs x21,x21,x16
|
|
umulh x16,x7,x3
|
|
adcs x22,x22,x17
|
|
umulh x17,x8,x3
|
|
adc x23,x23,xzr
|
|
|
|
adds x19,x20,x14
|
|
adcs x20,x21,x15
|
|
adcs x21,x22,x16
|
|
adcs x22,x23,x17
|
|
adc x23,xzr,xzr
|
|
|
|
subs x14,x19,x5
|
|
sbcs x15,x20,x6
|
|
sbcs x16,x21,x7
|
|
sbcs x17,x22,x8
|
|
sbcs xzr, x23,xzr
|
|
|
|
csello x19,x19,x14
|
|
csello x20,x20,x15
|
|
csello x21,x21,x16
|
|
csello x22,x22,x17
|
|
|
|
stp x19,x20,[x0]
|
|
stp x21,x22,[x0,#16]
|
|
|
|
ldp x19,x20,[x29,#2*__SIZEOF_POINTER__]
|
|
ldp x21,x22,[x29,#4*__SIZEOF_POINTER__]
|
|
ldp x23,x24,[x29,#6*__SIZEOF_POINTER__]
|
|
ldr x29,[sp],#8*__SIZEOF_POINTER__
|
|
ret
|
|
ENDP
|
|
|
|
|
|
EXPORT |sqr_mont_sparse_256|[FUNC]
|
|
ALIGN 32
|
|
|sqr_mont_sparse_256| PROC
|
|
hint #25
|
|
stp x29,x30,[sp,#-6*__SIZEOF_POINTER__]!
|
|
add x29,sp,#0
|
|
stp x19,x20,[sp,#2*__SIZEOF_POINTER__]
|
|
stp x21,x22,[sp,#4*__SIZEOF_POINTER__]
|
|
|
|
ldp x5,x6,[x1]
|
|
ldp x7,x8,[x1,#16]
|
|
mov x4,x3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mul x11,x6,x5
|
|
umulh x15,x6,x5
|
|
mul x12,x7,x5
|
|
umulh x16,x7,x5
|
|
mul x13,x8,x5
|
|
umulh x19,x8,x5
|
|
|
|
adds x12,x12,x15
|
|
mul x14,x7,x6
|
|
umulh x15,x7,x6
|
|
adcs x13,x13,x16
|
|
mul x16,x8,x6
|
|
umulh x17,x8,x6
|
|
adc x19,x19,xzr
|
|
|
|
mul x20,x8,x7
|
|
umulh x21,x8,x7
|
|
|
|
adds x15,x15,x16
|
|
mul x10,x5,x5
|
|
adc x16,x17,xzr
|
|
|
|
adds x13,x13,x14
|
|
umulh x5,x5,x5
|
|
adcs x19,x19,x15
|
|
mul x15,x6,x6
|
|
adcs x20,x20,x16
|
|
umulh x6,x6,x6
|
|
adc x21,x21,xzr
|
|
|
|
adds x11,x11,x11
|
|
mul x16,x7,x7
|
|
adcs x12,x12,x12
|
|
umulh x7,x7,x7
|
|
adcs x13,x13,x13
|
|
mul x17,x8,x8
|
|
adcs x19,x19,x19
|
|
umulh x8,x8,x8
|
|
adcs x20,x20,x20
|
|
adcs x21,x21,x21
|
|
adc x22,xzr,xzr
|
|
|
|
adds x11,x11,x5
|
|
adcs x12,x12,x15
|
|
adcs x13,x13,x6
|
|
adcs x19,x19,x16
|
|
adcs x20,x20,x7
|
|
adcs x21,x21,x17
|
|
adc x22,x22,x8
|
|
|
|
bl __mul_by_1_mont_256
|
|
ldr x30,[x29,#__SIZEOF_POINTER__]
|
|
|
|
adds x10,x10,x19
|
|
adcs x11,x11,x20
|
|
adcs x12,x12,x21
|
|
adcs x13,x13,x22
|
|
adc x19,xzr,xzr
|
|
|
|
subs x14,x10,x5
|
|
sbcs x15,x11,x6
|
|
sbcs x16,x12,x7
|
|
sbcs x17,x13,x8
|
|
sbcs xzr, x19,xzr
|
|
|
|
csello x10,x10,x14
|
|
csello x11,x11,x15
|
|
csello x12,x12,x16
|
|
csello x13,x13,x17
|
|
|
|
stp x10,x11,[x0]
|
|
stp x12,x13,[x0,#16]
|
|
|
|
ldp x19,x20,[x29,#2*__SIZEOF_POINTER__]
|
|
ldp x21,x22,[x29,#4*__SIZEOF_POINTER__]
|
|
ldr x29,[sp],#6*__SIZEOF_POINTER__
|
|
hint #29
|
|
ret
|
|
ENDP
|
|
|
|
|
|
EXPORT |from_mont_256|[FUNC]
|
|
ALIGN 32
|
|
|from_mont_256| PROC
|
|
hint #25
|
|
stp x29,x30,[sp,#-2*__SIZEOF_POINTER__]!
|
|
add x29,sp,#0
|
|
|
|
mov x4,x3
|
|
ldp x10,x11,[x1]
|
|
ldp x12,x13,[x1,#16]
|
|
|
|
bl __mul_by_1_mont_256
|
|
ldr x30,[x29,#__SIZEOF_POINTER__]
|
|
|
|
subs x14,x10,x5
|
|
sbcs x15,x11,x6
|
|
sbcs x16,x12,x7
|
|
sbcs x17,x13,x8
|
|
|
|
csello x10,x10,x14
|
|
csello x11,x11,x15
|
|
csello x12,x12,x16
|
|
csello x13,x13,x17
|
|
|
|
stp x10,x11,[x0]
|
|
stp x12,x13,[x0,#16]
|
|
|
|
ldr x29,[sp],#2*__SIZEOF_POINTER__
|
|
hint #29
|
|
ret
|
|
ENDP
|
|
|
|
|
|
|
|
EXPORT |redc_mont_256|[FUNC]
|
|
ALIGN 32
|
|
|redc_mont_256| PROC
|
|
hint #25
|
|
stp x29,x30,[sp,#-2*__SIZEOF_POINTER__]!
|
|
add x29,sp,#0
|
|
|
|
mov x4,x3
|
|
ldp x10,x11,[x1]
|
|
ldp x12,x13,[x1,#16]
|
|
|
|
bl __mul_by_1_mont_256
|
|
ldr x30,[x29,#__SIZEOF_POINTER__]
|
|
|
|
ldp x14,x15,[x1,#32]
|
|
ldp x16,x17,[x1,#48]
|
|
|
|
adds x10,x10,x14
|
|
adcs x11,x11,x15
|
|
adcs x12,x12,x16
|
|
adcs x13,x13,x17
|
|
adc x9,xzr,xzr
|
|
|
|
subs x14,x10,x5
|
|
sbcs x15,x11,x6
|
|
sbcs x16,x12,x7
|
|
sbcs x17,x13,x8
|
|
sbcs xzr, x9,xzr
|
|
|
|
csello x10,x10,x14
|
|
csello x11,x11,x15
|
|
csello x12,x12,x16
|
|
csello x13,x13,x17
|
|
|
|
stp x10,x11,[x0]
|
|
stp x12,x13,[x0,#16]
|
|
|
|
ldr x29,[sp],#2*__SIZEOF_POINTER__
|
|
hint #29
|
|
ret
|
|
ENDP
|
|
|
|
|
|
ALIGN 32
|
|
|__mul_by_1_mont_256| PROC
|
|
mul x3,x4,x10
|
|
ldp x5,x6,[x2]
|
|
ldp x7,x8,[x2,#16]
|
|
|
|
mul x15,x6,x3
|
|
mul x16,x7,x3
|
|
mul x17,x8,x3
|
|
subs xzr,x10,#1
|
|
umulh x14,x5,x3
|
|
adcs x11,x11,x15
|
|
umulh x15,x6,x3
|
|
adcs x12,x12,x16
|
|
umulh x16,x7,x3
|
|
adcs x13,x13,x17
|
|
umulh x17,x8,x3
|
|
adc x9,xzr,xzr
|
|
|
|
adds x10,x11,x14
|
|
adcs x11,x12,x15
|
|
adcs x12,x13,x16
|
|
mul x3,x4,x10
|
|
adc x13,x9,x17
|
|
|
|
mul x15,x6,x3
|
|
mul x16,x7,x3
|
|
mul x17,x8,x3
|
|
subs xzr,x10,#1
|
|
umulh x14,x5,x3
|
|
adcs x11,x11,x15
|
|
umulh x15,x6,x3
|
|
adcs x12,x12,x16
|
|
umulh x16,x7,x3
|
|
adcs x13,x13,x17
|
|
umulh x17,x8,x3
|
|
adc x9,xzr,xzr
|
|
|
|
adds x10,x11,x14
|
|
adcs x11,x12,x15
|
|
adcs x12,x13,x16
|
|
mul x3,x4,x10
|
|
adc x13,x9,x17
|
|
|
|
mul x15,x6,x3
|
|
mul x16,x7,x3
|
|
mul x17,x8,x3
|
|
subs xzr,x10,#1
|
|
umulh x14,x5,x3
|
|
adcs x11,x11,x15
|
|
umulh x15,x6,x3
|
|
adcs x12,x12,x16
|
|
umulh x16,x7,x3
|
|
adcs x13,x13,x17
|
|
umulh x17,x8,x3
|
|
adc x9,xzr,xzr
|
|
|
|
adds x10,x11,x14
|
|
adcs x11,x12,x15
|
|
adcs x12,x13,x16
|
|
mul x3,x4,x10
|
|
adc x13,x9,x17
|
|
|
|
mul x15,x6,x3
|
|
mul x16,x7,x3
|
|
mul x17,x8,x3
|
|
subs xzr,x10,#1
|
|
umulh x14,x5,x3
|
|
adcs x11,x11,x15
|
|
umulh x15,x6,x3
|
|
adcs x12,x12,x16
|
|
umulh x16,x7,x3
|
|
adcs x13,x13,x17
|
|
umulh x17,x8,x3
|
|
adc x9,xzr,xzr
|
|
|
|
adds x10,x11,x14
|
|
adcs x11,x12,x15
|
|
adcs x12,x13,x16
|
|
adc x13,x9,x17
|
|
|
|
ret
|
|
ENDP
|
|
END
|