Files

98 lines
1.1 KiB
NASM

GBLA __SIZEOF_POINTER__
__SIZEOF_POINTER__ SETA 64/8
AREA |.text|,CODE,ALIGN=8,ARM64
EXPORT |div_3_limbs|[FUNC]
ALIGN 32
|div_3_limbs| PROC
hint #34
ldp x4,x5,[x0]
eor x0,x0,x0
mov x3,#64
nop
|$Loop|
subs x6,x4,x1
add x0,x0,x0
sbcs x7,x5,x2
add x0,x0,#1
csello x4,x4,x6
extr x1,x2,x1,#1
csello x5,x5,x7
lsr x2,x2,#1
sbc x0,x0,xzr
sub x3,x3,#1
cbnz x3,|$Loop|
asr x3,x0,#63
add x0,x0,x0
subs x6,x4,x1
add x0,x0,#1
sbcs x7,x5,x2
sbc x0,x0,xzr
orr x0,x0,x3
ret
ENDP
EXPORT |quot_rem_128|[FUNC]
ALIGN 32
|quot_rem_128| PROC
hint #34
ldp x3,x4,[x1]
mul x5,x3,x2
umulh x6,x3,x2
mul x11, x4,x2
umulh x7,x4,x2
ldp x8,x9,[x0]
ldr x10,[x0,#16]
adds x6,x6,x11
adc x7,x7,xzr
subs x8,x8,x5
sbcs x9,x9,x6
sbcs x10,x10,x7
sbc x5,xzr,xzr
add x2,x2,x5
and x3,x3,x5
and x4,x4,x5
adds x8,x8,x3
adc x9,x9,x4
stp x8,x9,[x0]
str x2,[x0,#16]
mov x0,x2
ret
ENDP
EXPORT |quot_rem_64|[FUNC]
ALIGN 32
|quot_rem_64| PROC
hint #34
ldr x3,[x1]
ldr x8,[x0]
mul x5,x3,x2
sub x8,x8,x5
stp x8,x2,[x0]
mov x0,x2
ret
ENDP
END