summaryrefslogtreecommitdiff
path: root/arm9/asm/math_util.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/math_util.s')
-rw-r--r--arm9/asm/math_util.s471
1 files changed, 471 insertions, 0 deletions
diff --git a/arm9/asm/math_util.s b/arm9/asm/math_util.s
new file mode 100644
index 00000000..c42c346a
--- /dev/null
+++ b/arm9/asm/math_util.s
@@ -0,0 +1,471 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ thumb_func_start FUN_0201B93C
+FUN_0201B93C: ; 0x0201B93C
+ mov r1, #0x5a
+ lsl r1, r1, #0x2
+ cmp r0, r1
+ blo _0201B948
+ mov r0, #0x0
+ bx lr
+_0201B948:
+ lsl r1, r0, #0x2
+ ldr r0, _0201B950 ; =0x020EDF50
+ ldr r0, [r0, r1]
+ bx lr
+ .balign 4
+_0201B950: .word 0x020EDF50
+
+ thumb_func_start FUN_0201B954
+FUN_0201B954: ; 0x0201B954
+ mov r1, #0x5a
+ lsl r1, r1, #0x2
+ cmp r0, r1
+ blo _0201B960
+ mov r0, #0x0
+ bx lr
+_0201B960:
+ add r0, #0x5a
+ lsl r1, r0, #0x2
+ ldr r0, _0201B96C ; =0x020EDF50
+ ldr r0, [r0, r1]
+ bx lr
+ nop
+_0201B96C: .word 0x020EDF50
+
+ thumb_func_start FUN_0201B970
+FUN_0201B970: ; 0x0201B970
+ ; gSineTable[x % 360]
+ push {r3, lr}
+ mov r1, #0x5a
+ lsl r1, r1, #0x2
+ bl _s32_div_f
+ ldr r0, _0201B984 ; =0x020EDF50
+ lsl r1, r1, #0x2
+ ldr r0, [r0, r1]
+ pop {r3, pc}
+ nop
+_0201B984: .word 0x020EDF50
+
+ thumb_func_start FUN_0201B988
+FUN_0201B988: ; 0x0201B988
+ ; gSineTable[(x % 360) + 90]
+ push {r3, lr}
+ mov r1, #0x5a
+ lsl r1, r1, #0x2
+ bl _s32_div_f
+ add r1, #0x5a
+ ldr r0, _0201B99C ; =0x020EDF50
+ lsl r1, r1, #0x2
+ ldr r0, [r0, r1]
+ pop {r3, pc}
+ .balign 4
+_0201B99C: .word 0x020EDF50
+
+ thumb_func_start FUN_0201B9A0
+FUN_0201B9A0: ; 0x0201B9A0
+ ; UNK_020EDC7E[x % 360]
+ push {r3, lr}
+ mov r1, #0x5a
+ lsl r1, r1, #0x2
+ bl _s32_div_f
+ ldr r0, _0201B9B4 ; =0x020EDC7E
+ lsl r1, r1, #0x1
+ ldrh r0, [r0, r1]
+ pop {r3, pc}
+ nop
+_0201B9B4: .word 0x020EDC7E
+
+ thumb_func_start FUN_0201B9B8
+FUN_0201B9B8: ; 0x0201B9B8
+ ; gSineTable[((x << 4) >> 16) % 360]
+ push {r3, lr}
+ lsl r0, r0, #0x4
+ mov r1, #0x5a
+ lsr r0, r0, #0x10
+ lsl r1, r1, #0x2
+ bl _s32_div_f
+ ldr r0, _0201B9D0 ; =0x020EDF50
+ lsl r1, r1, #0x2
+ ldr r0, [r0, r1]
+ pop {r3, pc}
+ nop
+_0201B9D0: .word 0x020EDF50
+
+ thumb_func_start getseed_LC
+getseed_LC: ; 0x0201B9D4
+ ldr r0, _0201B9DC ; =0x021C4D48
+ ldr r0, [r0, #0x0]
+ bx lr
+ nop
+_0201B9DC: .word 0x021C4D48
+
+ thumb_func_start seedr_LC
+seedr_LC: ; 0x0201B9E0
+ ldr r1, _0201B9E8 ; =0x021C4D48
+ str r0, [r1, #0x0]
+ bx lr
+ nop
+_0201B9E8: .word 0x021C4D48
+
+ thumb_func_start rand_LC
+rand_LC: ; 0x0201B9EC
+ ldr r1, _0201BA04 ; =0x021C4D48
+ ldr r0, _0201BA08 ; =0x41C64E6D
+ ldr r2, [r1, #0x0]
+ add r3, r2, #0x0
+ mul r3, r0
+ ldr r0, _0201BA0C ; =0x00006073
+ add r0, r3, r0
+ str r0, [r1, #0x0]
+ lsr r0, r0, #0x10
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ bx lr
+ .balign 4
+_0201BA04: .word 0x021C4D48
+_0201BA08: .word 0x41C64E6D
+_0201BA0C: .word 0x00006073
+
+ thumb_func_start rand_ALT
+rand_ALT: ; 0x0201BA10
+ ldr r1, _0201BA18 ; =0x6C078965
+ mul r1, r0
+ add r0, r1, #0x1
+ bx lr
+ .balign 4
+_0201BA18: .word 0x6C078965
+
+ thumb_func_start seedr_MT
+seedr_MT: ; 0x0201BA1C
+ push {r4-r5}
+ ldr r1, _0201BA50 ; =0x021C4D48
+ mov r4, #0x27
+ str r0, [r1, #0x4]
+ ldr r1, _0201BA54 ; =0x02105BA8
+ mov r0, #0x1
+ str r0, [r1, #0x0]
+ ldr r1, _0201BA58 ; =0x021C4D50
+ ldr r3, _0201BA5C ; =0x6C078965
+ lsl r4, r4, #0x4
+_0201BA30:
+ sub r2, r1, #0x4
+ ldr r5, [r2, #0x0]
+ lsr r2, r5, #0x1e
+ eor r2, r5
+ add r5, r2, #0x0
+ mul r5, r3
+ add r2, r0, r5
+ add r0, r0, #0x1
+ stmia r1!, {r2}
+ cmp r0, r4
+ blt _0201BA30
+ ldr r1, _0201BA54 ; =0x02105BA8
+ str r0, [r1, #0x0]
+ pop {r4-r5}
+ bx lr
+ nop
+_0201BA50: .word 0x021C4D48
+_0201BA54: .word 0x02105BA8
+_0201BA58: .word 0x021C4D50
+_0201BA5C: .word 0x6C078965
+
+ thumb_func_start rand_MT
+rand_MT: ; 0x0201BA60
+ push {r3-r7, lr}
+ ldr r0, _0201BB44 ; =0x02105BA8
+ ldr r1, [r0, #0x0]
+ mov r0, #0x27
+ lsl r0, r0, #0x4
+ cmp r1, r0
+ blt _0201BB18
+ add r0, r0, #0x1
+ cmp r1, r0
+ bne _0201BA7A
+ ldr r0, _0201BB48 ; =0x00001571
+ bl seedr_MT
+_0201BA7A:
+ ldr r4, _0201BB4C ; =0x021C4D4C
+ ldr r1, _0201BB50 ; =0x02105BAC
+ ldr r5, _0201BB54 ; =0x7FFFFFFF
+ ldr r6, _0201BB58 ; =0x00000634
+ mov r0, #0x0
+_0201BA84:
+ mov r2, #0x2
+ ldr r3, [r4, #0x0]
+ lsl r2, r2, #0x1e
+ and r3, r2
+ ldr r2, [r4, #0x4]
+ add r0, r0, #0x1
+ and r2, r5
+ orr r3, r2
+ lsr r7, r3, #0x1
+ lsl r3, r3, #0x1f
+ ldr r2, [r4, r6]
+ lsr r3, r3, #0x1d
+ ldr r3, [r1, r3]
+ eor r2, r7
+ eor r2, r3
+ stmia r4!, {r2}
+ cmp r0, #0xe3
+ blt _0201BA84
+ ldr r1, _0201BB5C ; =0x0000026F
+ cmp r0, r1
+ bge _0201BAE4
+ ldr r2, _0201BB4C ; =0x021C4D4C
+ lsl r1, r0, #0x2
+ add r1, r2, r1
+ mov r2, #0xe3
+ ldr r4, _0201BB50 ; =0x02105BAC
+ ldr r3, _0201BB5C ; =0x0000026F
+ lsl r2, r2, #0x2
+_0201BABC:
+ mov r5, #0x2
+ ldr r6, [r1, #0x0]
+ lsl r5, r5, #0x1e
+ and r5, r6
+ ldr r7, [r1, #0x4]
+ ldr r6, _0201BB54 ; =0x7FFFFFFF
+ add r0, r0, #0x1
+ and r6, r7
+ orr r6, r5
+ lsr r5, r6, #0x1
+ sub r7, r1, r2
+ lsl r6, r6, #0x1f
+ ldr r7, [r7, #0x0]
+ lsr r6, r6, #0x1d
+ ldr r6, [r4, r6]
+ eor r5, r7
+ eor r5, r6
+ stmia r1!, {r5}
+ cmp r0, r3
+ blt _0201BABC
+_0201BAE4:
+ ldr r2, _0201BB60 ; =0x021C56C8
+ mov r0, #0x2
+ ldr r1, [r2, #0x40]
+ lsl r0, r0, #0x1e
+ add r3, r1, #0x0
+ ldr r1, _0201BB64 ; =0x021C4D48
+ and r3, r0
+ ldr r1, [r1, #0x4]
+ sub r0, r0, #0x1
+ and r0, r1
+ add r4, r3, #0x0
+ orr r4, r0
+ ldr r0, _0201BB68 ; =0x021C5348
+ ldr r1, [r0, #0x34]
+ lsr r0, r4, #0x1
+ add r3, r1, #0x0
+ eor r3, r0
+ lsl r0, r4, #0x1f
+ lsr r1, r0, #0x1d
+ ldr r0, _0201BB50 ; =0x02105BAC
+ ldr r0, [r0, r1]
+ mov r1, #0x0
+ eor r0, r3
+ str r0, [r2, #0x40]
+ ldr r0, _0201BB44 ; =0x02105BA8
+ str r1, [r0, #0x0]
+_0201BB18:
+ ldr r0, _0201BB44 ; =0x02105BA8
+ ldr r2, [r0, #0x0]
+ add r1, r2, #0x1
+ str r1, [r0, #0x0]
+ ldr r0, _0201BB4C ; =0x021C4D4C
+ lsl r1, r2, #0x2
+ ldr r1, [r0, r1]
+ lsr r0, r1, #0xb
+ add r2, r1, #0x0
+ eor r2, r0
+ ldr r0, _0201BB6C ; =0x9D2C5680
+ lsl r1, r2, #0x7
+ and r0, r1
+ eor r2, r0
+ ldr r0, _0201BB70 ; =0xEFC60000
+ lsl r1, r2, #0xf
+ and r0, r1
+ add r1, r2, #0x0
+ eor r1, r0
+ lsr r0, r1, #0x12
+ eor r0, r1
+ pop {r3-r7, pc}
+ .balign 4
+_0201BB44: .word 0x02105BA8
+_0201BB48: .word 0x00001571
+_0201BB4C: .word 0x021C4D4C
+_0201BB50: .word 0x02105BAC
+_0201BB54: .word 0x7FFFFFFF
+_0201BB58: .word 0x00000634
+_0201BB5C: .word 0x0000026F
+_0201BB60: .word 0x021C56C8
+_0201BB64: .word 0x021C4D48
+_0201BB68: .word 0x021C5348
+_0201BB6C: .word 0x9D2C5680
+_0201BB70: .word 0xEFC60000
+
+ thumb_func_start FUN_0201BB74
+FUN_0201BB74: ; 0x0201BB74
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ add r0, sp, #0x0
+ ldrb r0, [r0, #0x10]
+ add r4, r2, #0x0
+ add r6, r3, #0x0
+ cmp r0, #0x1
+ bne _0201BB8E
+ ldr r0, _0201BBC8 ; =0x0000FFFF
+ mul r0, r1
+ lsl r0, r0, #0x8
+ lsr r1, r0, #0x10
+ b _0201BBA2
+_0201BB8E:
+ cmp r0, #0x2
+ bne _0201BBA2
+ ldr r0, _0201BBC8 ; =0x0000FFFF
+ mul r0, r1
+ mov r1, #0x5a
+ lsl r1, r1, #0x2
+ bl _u32_div_f
+ lsl r0, r0, #0x10
+ lsr r1, r0, #0x10
+_0201BBA2:
+ asr r0, r1, #0x4
+ lsl r3, r0, #0x1
+ lsl r1, r3, #0x1
+ ldr r2, _0201BBCC ; =0x020FFA38
+ add r3, r3, #0x1
+ lsl r3, r3, #0x1
+ ldrsh r1, [r2, r1]
+ ldrsh r2, [r2, r3]
+ add r0, r5, #0x0
+ bl MTX_Rot22_
+ add r0, r5, #0x0
+ add r1, r5, #0x0
+ add r2, r4, #0x0
+ add r3, r6, #0x0
+ bl MTX_ScaleApply22
+ pop {r4-r6, pc}
+ nop
+_0201BBC8: .word 0x0000FFFF
+_0201BBCC: .word 0x020FFA38
+
+ thumb_func_start FUN_0201BBD0
+FUN_0201BBD0: ; 0x0201BBD0
+ push {r3-r7, lr}
+ sub sp, #0x38
+ lsl r5, r0, #0xc
+ lsl r4, r1, #0xc
+ mov r1, #0x0
+ lsl r0, r2, #0xc
+ lsl r6, r3, #0xc
+ str r1, [sp, #0x34]
+ str r0, [sp, #0x0]
+ str r0, [sp, #0x20]
+ str r1, [sp, #0x28]
+ str r1, [sp, #0x8]
+ str r1, [sp, #0xc]
+ asr r1, r5, #0x1f
+ add r0, r5, #0x0
+ asr r3, r6, #0x1f
+ add r2, r6, #0x0
+ str r5, [sp, #0x2c]
+ str r4, [sp, #0x30]
+ str r6, [sp, #0x24]
+ bl _ll_mul
+ str r0, [sp, #0x4]
+ add r2, r4, #0x0
+ ldr r0, [sp, #0x20]
+ add r7, r1, #0x0
+ asr r1, r0, #0x1f
+ asr r3, r2, #0x1f
+ bl _ll_mul
+ mov r2, #0x2
+ ldr r3, [sp, #0x4]
+ lsl r2, r2, #0xa
+ add r3, r3, r2
+ ldr r2, _0201BC80 ; =0x00000000
+ str r4, [sp, #0x2c]
+ adc r7, r2
+ lsl r2, r7, #0x14
+ lsr r3, r3, #0xc
+ orr r3, r2
+ mov r2, #0x2
+ lsl r2, r2, #0xa
+ add r0, r0, r2
+ ldr r2, _0201BC80 ; =0x00000000
+ str r5, [sp, #0x30]
+ adc r1, r2
+ lsl r1, r1, #0x14
+ lsr r0, r0, #0xc
+ orr r0, r1
+ sub r2, r3, r0
+ ldr r1, [sp, #0x8]
+ ldr r0, [sp, #0xc]
+ str r2, [sp, #0x10]
+ add r0, r1, r0
+ add r7, r2, r0
+ mov r0, #0x0
+ str r0, [sp, #0x34]
+ add r0, sp, #0x2c
+ add r1, sp, #0x14
+ bl VEC_Normalize
+ mov r1, #0x0
+ ldr r0, [sp, #0x0]
+ str r1, [sp, #0x34]
+ str r0, [sp, #0x20]
+ str r1, [sp, #0x28]
+ add r0, sp, #0x20
+ add r1, sp, #0x2c
+ add r2, sp, #0x8
+ str r5, [sp, #0x2c]
+ str r4, [sp, #0x30]
+ str r6, [sp, #0x24]
+ bl VEC_Subtract
+ add r0, sp, #0x14
+ add r1, sp, #0x8
+ bl VEC_DotProduct
+ asr r0, r0, #0xc
+ bpl _0201BC72
+ neg r0, r0
+_0201BC72:
+ cmp r7, #0x0
+ bgt _0201BC7C
+ mov r1, #0x0
+ mvn r1, r1
+ mul r0, r1
+_0201BC7C:
+ add sp, #0x38
+ pop {r3-r7, pc}
+ .balign 4
+_0201BC80: .word 0x00000000
+
+ thumb_func_start FUN_0201BC84
+FUN_0201BC84: ; 0x0201BC84
+ push {r3-r5, lr}
+ lsl r0, r0, #0xd
+ add r4, r1, #0x0
+ ldr r2, _0201BCB4 ; =0x0000323D
+ asr r1, r0, #0x1f
+ mov r3, #0x0
+ bl _ll_mul
+ add r5, r0, #0x0
+ ldr r0, _0201BCB8 ; =0x0000FFFF
+ mov r2, #0x2
+ mov r3, #0x0
+ lsl r2, r2, #0xa
+ mul r0, r4
+ add r2, r5, r2
+ adc r1, r3
+ lsl r1, r1, #0x14
+ lsr r2, r2, #0xc
+ orr r2, r1
+ asr r1, r2, #0xc
+ bl _s32_div_f
+ pop {r3-r5, pc}
+ nop
+_0201BCB4: .word 0x0000323D
+_0201BCB8: .word 0x0000FFFF