mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-07-15 15:45:53 -05:00
339 lines
7.1 KiB
ArmAsm
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
|