pokeplatinum/lib/Mathlib/asm/_d_div.s
2023-01-13 13:56:35 +01:00

339 lines
7.1 KiB
ArmAsm

.include "macros/function.inc"
.text
arm_func_start _drdiv
_drdiv: ; 0x020E235C
eor r1, r1, r3
eor r3, r1, r3
eor r1, r1, r3
eor r0, r0, r2
eor r2, r0, r2
eor r0, r0, r2
arm_func_end _drdiv
arm_func_start _d_div
_d_div: ; 0x020E2374
stmfd sp!, {r4, r5, r6, lr}
ldr lr, _020E28B4 ; =0x00000FFE
eor r4, r1, r3
ands ip, lr, r1, lsr #19
cmpne ip, lr
beq _020E2720
bic r1, r1, lr, lsl #20
orr r1, r1, #0x100000
add ip, ip, r4, lsr #31
_020E2398:
ands r4, lr, r3, lsr #19
cmpne r4, lr
beq _020E27B8
bic r3, r3, lr, lsl #20
orr r3, r3, #0x100000
_020E23AC:
sub ip, ip, r4
cmp r1, r3
cmpeq r0, r2
bhs _020E23C8
adds r0, r0, r0
adc r1, r1, r1
sub ip, ip, #2
_020E23C8:
sub r4, pc, #0x24
ldrb lr, [r4, r3, lsr #12]
rsbs r2, r2, #0
rsc r3, r3, #0
mov r4, #0x20000000
mla r5, lr, r3, r4
mov r6, r3, lsl #0xa
mov r5, r5, lsr #7
mul lr, r5, lr
orr r6, r6, r2, lsr #22
mov lr, lr, lsr #0xd
mul r5, lr, r6
mov r6, r1, lsl #0xa
orr r6, r6, r0, lsr #22
mov r5, r5, lsr #0x10
mul r5, lr, r5
mov lr, lr, lsl #0xe
add lr, lr, r5, lsr #16
umull r5, r6, lr, r6
umull r4, r5, r6, r2
mla r5, r3, r6, r5
mov r4, r4, lsr #0x1a
orr r4, r4, r5, lsl #6
add r4, r4, r0, lsl #2
umull lr, r5, r4, lr
mov r4, #0
adds r5, r5, r6, lsl #24
adc r4, r4, r6, lsr #8
cmp ip, #0x800
bge _020E25AC
add ip, ip, #0x7f0
adds ip, ip, #0xc
bmi _020E25C4
orr r1, r4, ip, lsl #31
bic ip, ip, #1
add r1, r1, ip, lsl #19
tst lr, #-0x80000000
bne _020E249C
rsbs r2, r2, #0
mov r4, r4, lsl #1
add r4, r4, r5, lsr #31
mul lr, r2, r4
mov r6, #0
mov r4, r5, lsl #1
orr r4, r4, #1
umlal r6, lr, r4, r2
rsc r3, r3, #0
mla lr, r4, r3, lr
cmp lr, r0, lsl #21
bmi _020E249C
mov r0, r5
ldmia sp!, {r4, r5, r6, lr}
bx lr
_020E249C:
adds r0, r5, #1
adc r1, r1, #0
ldmia sp!, {r4, r5, r6, lr}
bx lr
_020E24AC:
.byte 0xFF, 0xFF, 0xFE, 0xFD
.byte 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xEF, 0xEE
.byte 0xED, 0xEC, 0xEB, 0xEA, 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE2, 0xE1
.byte 0xE0, 0xDF, 0xDF, 0xDE, 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8, 0xD7, 0xD7, 0xD6, 0xD5
.byte 0xD4, 0xD4, 0xD3, 0xD2, 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD, 0xCC, 0xCC, 0xCB, 0xCB
.byte 0xCA, 0xC9, 0xC9, 0xC8, 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3, 0xC3, 0xC2, 0xC2, 0xC1
.byte 0xC0, 0xC0, 0xBF, 0xBF, 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA, 0xBA, 0xB9, 0xB9, 0xB8
.byte 0xB8, 0xB7, 0xB7, 0xB6, 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2, 0xB2, 0xB1, 0xB1, 0xB0
.byte 0xB0, 0xAF, 0xAF, 0xAF, 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xA9
.byte 0xA9, 0xA8, 0xA8, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xA2
.byte 0xA2, 0xA2, 0xA1, 0xA1, 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E, 0x9D, 0x9D, 0x9D, 0x9C
.byte 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x96
.byte 0x96, 0x96, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x91, 0x91
.byte 0x91, 0x91, 0x90, 0x90, 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C
.byte 0x8C, 0x8C, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88
.byte 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x83, 0x83
.byte 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80
_020E25AC:
movs r1, ip, lsl #0x1f
orr r1, r1, #0x7f000000
orr r1, r1, #0xf00000
mov r0, #0
ldmia sp!, {r4, r5, r6, lr}
bx lr
_020E25C4:
mvn r6, ip, asr #1
cmp r6, #0x34
bgt _020E2710
beq _020E26EC
cmp r6, #0x14
bge _020E260C
rsb r6, r6, #0x13
mov lr, r0, lsl r6
rsb r6, r6, #0x14
mov r0, r5, lsr r6
rsb r6, r6, #0x20
orr r0, r0, r4, lsl r6
rsb r6, r6, #0x20
mov r4, r4, lsr r6
orr r1, r4, ip, lsl #31
mov ip, lr
mov lr, #0
b _020E263C
_020E260C:
rsb r6, r6, #0x33
mov lr, r1, lsl r6
mov r1, ip, lsl #0x1f
rsb r6, r6, #0x20
orr ip, lr, r0, lsr r6
rsb r6, r6, #0x20
mov lr, r0, lsl r6
mov r5, r5, lsr #0x15
orr r5, r5, r4, lsl #11
rsb r6, r6, #0x1f
mov r0, r5, lsr r6
mov r4, #0
_020E263C:
rsbs r2, r2, #0
mul r4, r2, r4
mov r5, #0
umlal r5, r4, r2, r0
rsc r3, r3, #0
mla r4, r0, r3, r4
cmp r4, ip
cmpeq r5, lr
ldmeqia sp!, {r4, r5, r6, lr}
bxeq lr
adds r5, r5, r2
adc r4, r4, r3
cmp r4, ip
bmi _020E26E0
bne _020E2684
cmp r5, lr
beq _020E26D0
blo _020E26E0
_020E2684:
subs r5, r5, r2
sbc r4, r4, r3
_020E268C:
adds r5, r5, r5
adc r4, r4, r4
adds r5, r5, r2
adc r4, r4, r3
adds lr, lr, lr
adc ip, ip, ip
cmp r4, ip
bmi _020E26D0
ldmneia sp!, {r4, r5, r6, lr}
bxne lr
cmp r5, lr
blo _020E26D0
ldmneia sp!, {r4, r5, r6, lr}
bxne lr
tst r0, #1
ldmeqia sp!, {r4, r5, r6, lr}
bxeq lr
_020E26D0:
adds r0, r0, #1
adc r1, r1, #0
ldmia sp!, {r4, r5, r6, lr}
bx lr
_020E26E0:
adds r0, r0, #1
adc r1, r1, #0
b _020E268C
_020E26EC:
rsbs r2, r2, #0
rsc r3, r3, #0
cmp r1, r3
cmpeq r0, r2
mov r1, ip, lsl #0x1f
mov r0, #0
movne r0, #1
ldmia sp!, {r4, r5, r6, lr}
bx lr
_020E2710:
mov r1, ip, lsl #0x1f
mov r0, #0
ldmia sp!, {r4, r5, r6, lr}
bx lr
_020E2720:
orrs r5, r0, r1, lsl #1
beq _020E2844
cmp ip, lr
beq _020E2788
movs r1, r1, lsl #0xc
beq _020E2764
clz r5, r1
movs r1, r1, lsl r5
sub ip, ip, r5
add r5, ip, #0x1f
mov r1, r1, lsr #0xb
orr r1, r1, r0, lsr r5
rsb r5, r5, #0x20
mov r0, r0, lsl r5
mov ip, ip, lsl #1
orr ip, ip, r4, lsr #31
b _020E2398
_020E2764:
mvn ip, #0x13
clz r5, r0
movs r0, r0, lsl r5
sub ip, ip, r5
mov r1, r0, lsr #0xb
mov r0, r0, lsl #0x15
mov ip, ip, lsl #1
orr ip, ip, r4, lsr #31
b _020E2398
_020E2788:
orrs r5, r0, r1, lsl #12
bne _020E286C
bic r5, r3, #0x80000000
cmp r5, lr, lsl #19
bhs _020E27AC
and r5, r3, #0x80000000
eor r1, r5, r1
ldmia sp!, {r4, r5, r6, lr}
bx lr
_020E27AC:
orrs r5, r2, r3, lsl #12
bne _020E288C
b _020E28A4
_020E27B8:
orrs r5, r2, r3, lsl #1
beq _020E2830
cmp r4, lr
beq _020E2818
movs r3, r3, lsl #0xc
beq _020E27F8
clz r5, r3
movs r3, r3, lsl r5
sub r4, r4, r5
add r5, r4, #0x1f
mov r3, r3, lsr #0xb
orr r3, r3, r2, lsr r5
rsb r5, r5, #0x20
mov r2, r2, lsl r5
mov r4, r4, lsl #1
b _020E23AC
_020E27F8:
mvn r4, #0x13
clz r5, r2
movs r2, r2, lsl r5
sub r4, r4, r5
mov r3, r2, lsr #0xb
mov r2, r2, lsl #0x15
mov r4, r4, lsl #1
b _020E23AC
_020E2818:
orrs r5, r2, r3, lsl #12
bne _020E288C
mov r1, ip, lsl #0x1f
mov r0, #0
ldmia sp!, {r4, r5, r6, lr}
bx lr
_020E2830:
mov r1, ip, lsl #0x1f
orr r1, r1, lr, lsl #19
mov r0, #0
ldmia sp!, {r4, r5, r6, lr}
bx lr
_020E2844:
orrs r5, r2, r3, lsl #1
beq _020E28A4
bic r5, r3, #0x80000000
cmp r5, lr, lsl #19
cmpeq r2, #0
bhi _020E288C
eor r1, r1, r3
and r1, r1, #0x80000000
ldmia sp!, {r4, r5, r6, lr}
bx lr
_020E286C:
tst r1, #0x80000
beq _020E28A4
bic r5, r3, #0x80000000
cmp r5, lr, lsl #19
cmpeq r2, #0
bhi _020E288C
ldmia sp!, {r4, r5, r6, lr}
bx lr
_020E288C:
tst r3, #0x80000
beq _020E28A4
mov r1, r3
mov r0, r2
ldmia sp!, {r4, r5, r6, lr}
bx lr
_020E28A4:
orr r1, r1, #0x7f000000
orr r1, r1, #0xf80000
ldmia sp!, {r4, r5, r6, lr}
bx lr
; .align 2, 0
_020E28B4: .word 0x00000FFE
arm_func_end _d_div