pokediamond/arm9/asm/RUNTIME_d_sub.s
2023-05-24 09:15:59 +01:00

284 lines
5.0 KiB
ArmAsm

.include "asm/macros.inc"
.include "global.inc"
.extern __dadd_start
.text
arm_func_start _drsb
_drsb: ; 0x020EA5B4
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_start _dsub
_dsub:
stmdb sp!, {r4,lr}
eors r12, r1, r3
eormi r3, r3, #0x80000000
bmi __dadd_start
.global __dsub_start
__dsub_start:
subs r12, r0, r2
sbcs lr, r1, r3
bhs _020EA5FC
eor lr, lr, #0x80000000
adds r2, r2, r12
adc r3, r3, lr
subs r0, r0, r12
sbc r1, r1, lr
_020EA5FC:
mov lr, #0x80000000
mov r12, r1, lsr #0x14
orr r1, lr, r1, lsl #0xb
orr r1, r1, r0, lsr #0x15
mov r0, r0, lsl #0xb
movs r4, r12, lsl #0x15
cmnne r4, #0x200000
beq _020EA800
mov r4, r3, lsr #0x14
orr r3, lr, r3, lsl #0xb
orr r3, r3, r2, lsr #0x15
mov r2, r2, lsl #0xb
movs lr, r4, lsl #0x15
beq _020EA848
_020EA634:
subs r4, r12, r4
beq _020EA6DC
cmp r4, #0x20
ble _020EA670
cmp r4, #0x38
movge r4, #0x3f
sub r4, r4, #0x20
rsb lr, r4, #0x20
orrs lr, r2, r3, lsl lr
mov r2, r3, lsr r4
orrne r2, r2, #0x1
subs r0, r0, r2
sbcs r1, r1, #0x0
bmi _020EA698
b _020EA788
_020EA670:
rsb lr, r4, #0x20
movs lr, r2, lsl lr
rsb lr, r4, #0x20
mov r2, r2, lsr r4
orr r2, r2, r3, lsl lr
mov r3, r3, lsr r4
orrne r2, r2, #0x1
subs r0, r0, r2
sbcs r1, r1, r3
bpl _020EA788
_020EA698:
movs r2, r0, lsl #0x15
mov r0, r0, lsr #0xb
orr r0, r0, r1, lsl #0x15
add r1, r1, r1
mov r1, r1, lsr #0xc
orr r1, r1, r12, lsl #0x14
tst r2, #0x80000000
ldmeqia sp!, {r4,lr}
bxeq lr
movs r2, r2, lsl #0x1
andeqs r2, r0, #0x1
ldmeqia sp!, {r4,lr}
bxeq lr
adds r0, r0, #0x1
adc r1, r1, #0x0
ldmia sp!, {r4,lr}
bx lr
_020EA6DC:
subs r0, r0, r2
sbc r1, r1, r3
orrs lr, r1, r0
beq _020EA96C
mov lr, r12, lsl #0x14
and lr, lr, #0x80000000
bic r12, r12, #0x800
cmp r1, #0x0
bmi _020EA764
bne _020EA714
sub r12, r12, #0x20
movs r1, r0
mov r0, #0x0
bmi _020EA730
_020EA714:
clz r4, r1
movs r1, r1, lsl r4
rsb r4, r4, #0x20
orr r1, r1, r0, lsr r4
rsb r4, r4, #0x20
mov r0, r0, lsl r4
sub r12, r12, r4
_020EA730:
cmp r12, #0x0
bgt _020EA76C
rsb r12, r12, #0xc
cmp r12, #0x20
movge r0, r1
movge r1, #0x0
subge r12, r12, #0x20
rsb r4, r12, #0x20
mov r0, r0, lsr r12
orr r0, r0, r1, lsl r4
orr r1, lr, r1, lsr r12
ldmia sp!, {r4,lr}
bx lr
_020EA764:
cmp r1, #0x0
subges r12, r12, #0x1
_020EA76C:
mov r0, r0, lsr #0xb
orr r0, r0, r1, lsl #0x15
add r1, r1, r1
orr r1, lr, r1, lsr #0xc
orr r1, r1, r12, lsl #0x14
ldmia sp!, {r4,lr}
bx lr
_020EA788:
mov lr, r12, lsl #0x14
and lr, lr, #0x80000000
bic r12, r12, #0x800
cmp r1, #0x0
bne _020EA7AC
sub r12, r12, #0x20
movs r1, r0
mov r0, #0x0
bmi _020EA7C8
_020EA7AC:
clz r4, r1
movs r1, r1, lsl r4
rsb r4, r4, #0x20
orr r1, r1, r0, lsr r4
rsb r4, r4, #0x20
mov r0, r0, lsl r4
sub r12, r12, r4
_020EA7C8:
cmp r12, #0x0
orrgt r12, r12, lr, lsr #0x14
bgt _020EA698
rsb r12, r12, #0xc
cmp r12, #0x20
movge r0, r1
movge r1, #0x0
subge r12, r12, #0x20
rsb r4, r12, #0x20
mov r0, r0, lsr r12
orr r0, r0, r1, lsl r4
orr r1, lr, r1, lsr r12
ldmia sp!, {r4,lr}
bx lr
_020EA800:
cmp r12, #0x800
movge lr, #0x80000000
movlt lr, #0x0
bics r12, r12, #0x800
beq _020EA86C
orrs r4, r0, r1, lsl #0x1
bne _020EA948
mov r4, r3, lsr #0x14
mov r3, r3, lsl #0xb
orr r3, r3, r2, lsr #0x15
mov r2, r2, lsl #0xb
movs r4, r4, lsl #0x15
beq _020EA934
cmn r4, #0x200000
bne _020EA934
orrs r4, r2, r3, lsl #0x1
beq _020EA95C
b _020EA948
_020EA848:
cmp r4, #0x800
movge lr, #0x80000000
movlt lr, #0x0
bic r12, r12, #0x800
bics r4, r4, #0x800
beq _020EA8E4
orrs r4, r2, r3, lsl #0x1
bne _020EA948
b _020EA934
_020EA86C:
orrs r4, r0, r1, lsl #0x1
beq _020EA8AC
mov r12, #0x1
bic r1, r1, #0x80000000
mov r4, r3, lsr #0x14
mov r3, r3, lsl #0xb
orr r3, r3, r2, lsr #0x15
mov r2, r2, lsl #0xb
movs r4, r4, lsl #0x15
cmnne r4, #0x200000
mov r4, r4, lsr #0x15
orr r4, r4, lr, lsr #0x14
beq _020EA848
orr r3, r3, #0x80000000
orr r12, r12, lr, lsr #0x14
b _020EA634
_020EA8AC:
mov r12, r3, lsr #0x14
mov r1, r3, lsl #0xb
orr r1, r1, r2, lsr #0x15
mov r0, r2, lsl #0xb
movs r4, r12, lsl #0x15
beq _020EA8D8
cmn r4, #0x200000
bne _020EA900
orrs r4, r0, r1, lsl #0x1
bne _020EA94C
b _020EA934
_020EA8D8:
orrs r4, r0, r1, lsl #0x1
beq _020EA96C
b _020EA900
_020EA8E4:
orrs r4, r2, r3, lsl #0x1
beq _020EA910
mov r4, #0x1
bic r3, r3, #0x80000000
orr r12, r12, lr, lsr #0x14
orr r4, r4, lr, lsr #0x14
b _020EA634
_020EA900:
mov r1, r3
mov r0, r2
ldmia sp!, {r4,lr}
bx lr
_020EA910:
cmp r1, #0x0
subges r12, r12, #0x1
mov r0, r0, lsr #0xb
orr r0, r0, r1, lsl #0x15
add r1, r1, r1
orr r1, lr, r1, lsr #0xc
orr r1, r1, r12, lsl #0x14
ldmia sp!, {r4,lr}
bx lr
_020EA934:
ldr r1, _020EA97C ; =0x7FF00000
orr r1, lr, r1
mov r0, #0x0
ldmia sp!, {r4,lr}
bx lr
_020EA948:
mov r1, r3
_020EA94C:
mvn r0, #0x0
bic r1, r0, #0x80000000
ldmia sp!, {r4,lr}
bx lr
_020EA95C:
mvn r0, #0x0
bic r1, r0, #0x80000000
ldmia sp!, {r4,lr}
bx lr
_020EA96C:
mov r1, #0x0
mov r0, #0x0
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020EA97C: .word 0x7FF00000