1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start FX_ModS32
FX_ModS32: ; 0x020C4E98
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr ip, _020C4EE0 ; =0x04000280
mov lr, #0x0
ldr r3, _020C4EE4 ; =0x04000290
strh lr, [r12, #0x0]
ldr r2, _020C4EE8 ; =0x04000298
str r0, [r3, #0x0]
str r1, [r2, #0x0]
str lr, [r2, #0x4]
_020C4EC0:
ldrh r0, [r12, #0x0]
ands r0, r0, #0x8000
bne _020C4EC0
ldr r0, _020C4EEC ; =0x040002A8
ldr r0, [r0, #0x0]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020C4EE0: .word 0x04000280
_020C4EE4: .word 0x04000290
_020C4EE8: .word 0x04000298
_020C4EEC: .word 0x040002A8
arm_func_start FX_DivS32
FX_DivS32: ; 0x020C4EF0
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr ip, _020C4F38 ; =0x04000280
mov lr, #0x0
ldr r3, _020C4F3C ; =0x04000290
strh lr, [r12, #0x0]
ldr r2, _020C4F40 ; =0x04000298
str r0, [r3, #0x0]
str r1, [r2, #0x0]
str lr, [r2, #0x4]
_020C4F18:
ldrh r0, [r12, #0x0]
ands r0, r0, #0x8000
bne _020C4F18
ldr r0, _020C4F44 ; =0x040002A0
ldr r0, [r0, #0x0]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020C4F38: .word 0x04000280
_020C4F3C: .word 0x04000290
_020C4F40: .word 0x04000298
_020C4F44: .word 0x040002A0
arm_func_start FX_DivAsync
FX_DivAsync: ; 0x020C4F48
ldr r2, _020C4F74 ; =0x04000280
mov r12, #0x1
ldr r3, _020C4F78 ; =0x04000290
strh r12, [r2, #0x0]
mov r12, #0x0
str r12, [r3, #0x0]
ldr r2, _020C4F7C ; =0x04000298
str r0, [r3, #0x4]
str r1, [r2, #0x0]
str r12, [r2, #0x4]
bx lr
.balign 4
_020C4F74: .word 0x04000280
_020C4F78: .word 0x04000290
_020C4F7C: .word 0x04000298
arm_func_start FX_GetSqrtResult
FX_GetSqrtResult: ; 0x020C4F80
ldr r1, _020C4FA4 ; =0x040002B0
_020C4F84:
ldrh r0, [r1, #0x0]
ands r0, r0, #0x8000
bne _020C4F84
ldr r0, _020C4FA8 ; =0x040002B4
ldr r0, [r0, #0x0]
add r0, r0, #0x200
mov r0, r0, lsr #0xa
bx lr
.balign 4
_020C4FA4: .word 0x040002B0
_020C4FA8: .word 0x040002B4
arm_func_start FX_InvAsync
FX_InvAsync:
ldr r1, _020C4FDC ; =0x04000280
mov r3, #0x1
ldr r2, _020C4FE0 ; =0x04000290
strh r3, [r1, #0x0]
mov r12, #0x0
str r12, [r2, #0x0]
mov r3, #0x1000
ldr r1, _020C4FE4 ; =0x04000298
str r3, [r2, #0x4]
str r0, [r1, #0x0]
str r12, [r1, #0x4]
bx lr
.balign 4
_020C4FDC: .word 0x04000280
_020C4FE0: .word 0x04000290
_020C4FE4: .word 0x04000298
arm_func_start FX_GetDivResult
FX_GetDivResult: ; 0x020C4FE8
ldr r1, _020C501C ; =0x04000280
_020C4FEC:
ldrh r0, [r1, #0x0]
ands r0, r0, #0x8000
bne _020C4FEC
ldr r1, _020C5020 ; =0x040002A0
mov r0, #0x80000
ldr r2, [r1, #0x0]
ldr r1, [r1, #0x4]
adds r0, r2, r0
adc r1, r1, #0x0
mov r0, r0, lsr #0x14
orr r0, r0, r1, lsl #0xc
bx lr
.balign 4
_020C501C: .word 0x04000280
_020C5020: .word 0x040002A0
arm_func_start FX_GetDivResultFx64c
FX_GetDivResultFx64c: ; 0x020C5024
ldr r1, _020C5044 ; =0x04000280
_020C5028:
ldrh r0, [r1, #0x0]
ands r0, r0, #0x8000
bne _020C5028
ldr r1, _020C5048 ; =0x040002A0
ldr r0, [r1, #0x0]
ldr r1, [r1, #0x4]
bx lr
.balign 4
_020C5044: .word 0x04000280
_020C5048: .word 0x040002A0
arm_func_start FX_Sqrt
FX_Sqrt: ; 0x020C504C
stmdb sp!, {lr}
sub sp, sp, #0x4
cmp r0, #0x0
addle sp, sp, #0x4
movle r0, #0x0
ldmleia sp!, {lr}
bxle lr
ldr r2, _020C5094 ; =0x040002B0
mov r3, #0x1
strh r3, [r2, #0x0]
ldr r1, _020C5098 ; =0x040002B8
mov r2, #0x0
str r2, [r1, #0x0]
str r0, [r1, #0x4]
bl FX_GetSqrtResult
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020C5094: .word 0x040002B0
_020C5098: .word 0x040002B8
arm_func_start FX_Inv
FX_Inv: ; 0x020C509C
stmdb sp!, {lr}
sub sp, sp, #0x4
bl FX_InvAsync
bl FX_GetDivResult
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
arm_func_start FX_Div
FX_Div: ; 0x020C50B8
stmdb sp!, {lr}
sub sp, sp, #0x4
bl FX_DivAsync
bl FX_GetDivResult
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
|