mirror of
https://github.com/pret/pokediamond.git
synced 2026-04-26 00:11:26 -05:00
284 lines
5.0 KiB
ArmAsm
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
|