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
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
|
.include "macros.inc"
.section .text, "ax" # 0x80006980 - 0x803E1E60
.global PSVECAdd
PSVECAdd:
/* 8027CCC4 00278924 E0 43 00 00 */ psq_l f2, 0(r3), 0, qr0
/* 8027CCC8 00278928 E0 84 00 00 */ psq_l f4, 0(r4), 0, qr0
/* 8027CCCC 0027892C 10 C2 20 2A */ ps_add f6, f2, f4
/* 8027CCD0 00278930 F0 C5 00 00 */ psq_st f6, 0(r5), 0, qr0
/* 8027CCD4 00278934 E0 63 80 08 */ psq_l f3, 8(r3), 1, qr0
/* 8027CCD8 00278938 E0 A4 80 08 */ psq_l f5, 8(r4), 1, qr0
/* 8027CCDC 0027893C 10 E3 28 2A */ ps_add f7, f3, f5
/* 8027CCE0 00278940 F0 E5 80 08 */ psq_st f7, 8(r5), 1, qr0
/* 8027CCE4 00278944 4E 80 00 20 */ blr
.global PSVECSubtract
PSVECSubtract:
/* 8027CCE8 00278948 E0 43 00 00 */ psq_l f2, 0(r3), 0, qr0
/* 8027CCEC 0027894C E0 84 00 00 */ psq_l f4, 0(r4), 0, qr0
/* 8027CCF0 00278950 10 C2 20 28 */ ps_sub f6, f2, f4
/* 8027CCF4 00278954 F0 C5 00 00 */ psq_st f6, 0(r5), 0, qr0
/* 8027CCF8 00278958 E0 63 80 08 */ psq_l f3, 8(r3), 1, qr0
/* 8027CCFC 0027895C E0 A4 80 08 */ psq_l f5, 8(r4), 1, qr0
/* 8027CD00 00278960 10 E3 28 28 */ ps_sub f7, f3, f5
/* 8027CD04 00278964 F0 E5 80 08 */ psq_st f7, 8(r5), 1, qr0
/* 8027CD08 00278968 4E 80 00 20 */ blr
.global PSVECScale
PSVECScale:
/* 8027CD0C 0027896C E0 03 00 00 */ psq_l f0, 0(r3), 0, qr0
/* 8027CD10 00278970 E0 43 80 08 */ psq_l f2, 8(r3), 1, qr0
/* 8027CD14 00278974 10 00 00 58 */ ps_muls0 f0, f0, f1
/* 8027CD18 00278978 10 22 00 58 */ ps_muls0 f1, f2, f1
/* 8027CD1C 0027897C F0 04 00 00 */ psq_st f0, 0(r4), 0, qr0
/* 8027CD20 00278980 F0 24 80 08 */ psq_st f1, 8(r4), 1, qr0
/* 8027CD24 00278984 4E 80 00 20 */ blr
.global PSVECNormalize
PSVECNormalize:
/* 8027CD28 00278988 E0 43 00 00 */ psq_l f2, 0(r3), 0, qr0
/* 8027CD2C 0027898C E0 63 80 08 */ psq_l f3, 8(r3), 1, qr0
/* 8027CD30 00278990 10 A2 00 B2 */ ps_mul f5, f2, f2
/* 8027CD34 00278994 C0 02 A0 A8 */ lfs f0, lbl_806426A8-_SDA2_BASE_(r2)
/* 8027CD38 00278998 C0 22 A0 AC */ lfs f1, lbl_806426AC-_SDA2_BASE_(r2)
/* 8027CD3C 0027899C 10 83 28 FA */ ps_madd f4, f3, f3, f5
/* 8027CD40 002789A0 10 84 28 D4 */ ps_sum0 f4, f4, f3, f5
/* 8027CD44 002789A4 FC A0 20 34 */ frsqrte f5, f4
/* 8027CD48 002789A8 EC C5 01 72 */ fmuls f6, f5, f5
/* 8027CD4C 002789AC EC 05 00 32 */ fmuls f0, f5, f0
/* 8027CD50 002789B0 EC C6 09 3C */ fnmsubs f6, f6, f4, f1
/* 8027CD54 002789B4 EC A6 00 32 */ fmuls f5, f6, f0
/* 8027CD58 002789B8 10 42 01 58 */ ps_muls0 f2, f2, f5
/* 8027CD5C 002789BC 10 63 01 58 */ ps_muls0 f3, f3, f5
/* 8027CD60 002789C0 F0 44 00 00 */ psq_st f2, 0(r4), 0, qr0
/* 8027CD64 002789C4 F0 64 80 08 */ psq_st f3, 8(r4), 1, qr0
/* 8027CD68 002789C8 4E 80 00 20 */ blr
.global PSVECSquareMag
PSVECSquareMag:
/* 8027CD6C 002789CC E0 03 00 00 */ psq_l f0, 0(r3), 0, qr0
/* 8027CD70 002789D0 C0 23 00 08 */ lfs f1, 8(r3)
/* 8027CD74 002789D4 10 00 00 32 */ ps_mul f0, f0, f0
/* 8027CD78 002789D8 10 21 00 7A */ ps_madd f1, f1, f1, f0
/* 8027CD7C 002789DC 10 21 00 14 */ ps_sum0 f1, f1, f0, f0
/* 8027CD80 002789E0 4E 80 00 20 */ blr
.global PSVECMag
PSVECMag:
/* 8027CD84 002789E4 E0 03 00 00 */ psq_l f0, 0(r3), 0, qr0
/* 8027CD88 002789E8 C0 82 A0 A8 */ lfs f4, lbl_806426A8-_SDA2_BASE_(r2)
/* 8027CD8C 002789EC 10 00 00 32 */ ps_mul f0, f0, f0
/* 8027CD90 002789F0 C0 23 00 08 */ lfs f1, 8(r3)
/* 8027CD94 002789F4 EC 44 20 28 */ fsubs f2, f4, f4
/* 8027CD98 002789F8 10 21 00 7A */ ps_madd f1, f1, f1, f0
/* 8027CD9C 002789FC 10 21 00 14 */ ps_sum0 f1, f1, f0, f0
/* 8027CDA0 00278A00 FC 01 10 00 */ fcmpu cr0, f1, f2
/* 8027CDA4 00278A04 4D 82 00 20 */ beqlr
/* 8027CDA8 00278A08 FC 00 08 34 */ frsqrte f0, f1
/* 8027CDAC 00278A0C C0 62 A0 AC */ lfs f3, lbl_806426AC-_SDA2_BASE_(r2)
/* 8027CDB0 00278A10 EC 40 00 32 */ fmuls f2, f0, f0
/* 8027CDB4 00278A14 EC 00 01 32 */ fmuls f0, f0, f4
/* 8027CDB8 00278A18 EC 42 18 7C */ fnmsubs f2, f2, f1, f3
/* 8027CDBC 00278A1C EC 02 00 32 */ fmuls f0, f2, f0
/* 8027CDC0 00278A20 EC 21 00 32 */ fmuls f1, f1, f0
/* 8027CDC4 00278A24 4E 80 00 20 */ blr
.global PSQUATDotProduct
PSQUATDotProduct:
/* 8027CDC8 00278A28 E0 43 00 04 */ psq_l f2, 4(r3), 0, qr0
/* 8027CDCC 00278A2C E0 64 00 04 */ psq_l f3, 4(r4), 0, qr0
/* 8027CDD0 00278A30 10 42 00 F2 */ ps_mul f2, f2, f3
/* 8027CDD4 00278A34 E0 A3 00 00 */ psq_l f5, 0(r3), 0, qr0
/* 8027CDD8 00278A38 E0 84 00 00 */ psq_l f4, 0(r4), 0, qr0
/* 8027CDDC 00278A3C 10 65 11 3A */ ps_madd f3, f5, f4, f2
/* 8027CDE0 00278A40 10 23 10 94 */ ps_sum0 f1, f3, f2, f2
/* 8027CDE4 00278A44 4E 80 00 20 */ blr
.global PSVECCrossProduct
PSVECCrossProduct:
/* 8027CDE8 00278A48 E0 24 00 00 */ psq_l f1, 0(r4), 0, qr0
/* 8027CDEC 00278A4C C0 43 00 08 */ lfs f2, 8(r3)
/* 8027CDF0 00278A50 E0 03 00 00 */ psq_l f0, 0(r3), 0, qr0
/* 8027CDF4 00278A54 10 C1 0C A0 */ ps_merge10 f6, f1, f1
/* 8027CDF8 00278A58 C0 64 00 08 */ lfs f3, 8(r4)
/* 8027CDFC 00278A5C 10 81 00 B2 */ ps_mul f4, f1, f2
/* 8027CE00 00278A60 10 E1 00 18 */ ps_muls0 f7, f1, f0
/* 8027CE04 00278A64 10 A0 20 F8 */ ps_msub f5, f0, f3, f4
/* 8027CE08 00278A68 11 00 39 B8 */ ps_msub f8, f0, f6, f7
/* 8027CE0C 00278A6C 11 25 2C E0 */ ps_merge11 f9, f5, f5
/* 8027CE10 00278A70 11 45 44 60 */ ps_merge01 f10, f5, f8
/* 8027CE14 00278A74 F1 25 80 00 */ psq_st f9, 0(r5), 1, qr0
/* 8027CE18 00278A78 11 40 50 50 */ ps_neg f10, f10
/* 8027CE1C 00278A7C F1 45 00 04 */ psq_st f10, 4(r5), 0, qr0
/* 8027CE20 00278A80 4E 80 00 20 */ blr
.global C_VECHalfAngle
C_VECHalfAngle:
/* 8027CE24 00278A84 94 21 FF C0 */ stwu r1, -0x40(r1)
/* 8027CE28 00278A88 7C 08 02 A6 */ mflr r0
/* 8027CE2C 00278A8C C0 43 00 00 */ lfs f2, 0(r3)
/* 8027CE30 00278A90 C0 23 00 04 */ lfs f1, 4(r3)
/* 8027CE34 00278A94 C0 03 00 08 */ lfs f0, 8(r3)
/* 8027CE38 00278A98 FC A0 10 50 */ fneg f5, f2
/* 8027CE3C 00278A9C C0 44 00 00 */ lfs f2, 0(r4)
/* 8027CE40 00278AA0 FC 80 08 50 */ fneg f4, f1
/* 8027CE44 00278AA4 C0 24 00 04 */ lfs f1, 4(r4)
/* 8027CE48 00278AA8 FC 60 00 50 */ fneg f3, f0
/* 8027CE4C 00278AAC C0 04 00 08 */ lfs f0, 8(r4)
/* 8027CE50 00278AB0 90 01 00 44 */ stw r0, 0x44(r1)
/* 8027CE54 00278AB4 38 61 00 20 */ addi r3, r1, 0x20
/* 8027CE58 00278AB8 FC 40 10 50 */ fneg f2, f2
/* 8027CE5C 00278ABC 7C 64 1B 78 */ mr r4, r3
/* 8027CE60 00278AC0 93 E1 00 3C */ stw r31, 0x3c(r1)
/* 8027CE64 00278AC4 FC 20 08 50 */ fneg f1, f1
/* 8027CE68 00278AC8 FC 00 00 50 */ fneg f0, f0
/* 8027CE6C 00278ACC 7C BF 2B 78 */ mr r31, r5
/* 8027CE70 00278AD0 D0 A1 00 20 */ stfs f5, 0x20(r1)
/* 8027CE74 00278AD4 D0 81 00 24 */ stfs f4, 0x24(r1)
/* 8027CE78 00278AD8 D0 61 00 28 */ stfs f3, 0x28(r1)
/* 8027CE7C 00278ADC D0 41 00 14 */ stfs f2, 0x14(r1)
/* 8027CE80 00278AE0 D0 21 00 18 */ stfs f1, 0x18(r1)
/* 8027CE84 00278AE4 D0 01 00 1C */ stfs f0, 0x1c(r1)
/* 8027CE88 00278AE8 4B FF FE A1 */ bl PSVECNormalize
/* 8027CE8C 00278AEC 38 61 00 14 */ addi r3, r1, 0x14
/* 8027CE90 00278AF0 7C 64 1B 78 */ mr r4, r3
/* 8027CE94 00278AF4 4B FF FE 95 */ bl PSVECNormalize
/* 8027CE98 00278AF8 38 61 00 20 */ addi r3, r1, 0x20
/* 8027CE9C 00278AFC 38 81 00 14 */ addi r4, r1, 0x14
/* 8027CEA0 00278B00 38 A1 00 08 */ addi r5, r1, 8
/* 8027CEA4 00278B04 4B FF FE 21 */ bl PSVECAdd
/* 8027CEA8 00278B08 38 61 00 08 */ addi r3, r1, 8
/* 8027CEAC 00278B0C 7C 64 1B 78 */ mr r4, r3
/* 8027CEB0 00278B10 4B FF FF 19 */ bl PSQUATDotProduct
/* 8027CEB4 00278B14 C0 02 A0 B0 */ lfs f0, lbl_806426B0-_SDA2_BASE_(r2)
/* 8027CEB8 00278B18 FC 01 00 40 */ fcmpo cr0, f1, f0
/* 8027CEBC 00278B1C 40 81 00 14 */ ble lbl_8027CED0
/* 8027CEC0 00278B20 7F E4 FB 78 */ mr r4, r31
/* 8027CEC4 00278B24 38 61 00 08 */ addi r3, r1, 8
/* 8027CEC8 00278B28 4B FF FE 61 */ bl PSVECNormalize
/* 8027CECC 00278B2C 48 00 00 1C */ b lbl_8027CEE8
lbl_8027CED0:
/* 8027CED0 00278B30 80 61 00 08 */ lwz r3, 8(r1)
/* 8027CED4 00278B34 80 01 00 0C */ lwz r0, 0xc(r1)
/* 8027CED8 00278B38 90 7F 00 00 */ stw r3, 0(r31)
/* 8027CEDC 00278B3C 90 1F 00 04 */ stw r0, 4(r31)
/* 8027CEE0 00278B40 80 01 00 10 */ lwz r0, 0x10(r1)
/* 8027CEE4 00278B44 90 1F 00 08 */ stw r0, 8(r31)
lbl_8027CEE8:
/* 8027CEE8 00278B48 80 01 00 44 */ lwz r0, 0x44(r1)
/* 8027CEEC 00278B4C 83 E1 00 3C */ lwz r31, 0x3c(r1)
/* 8027CEF0 00278B50 7C 08 03 A6 */ mtlr r0
/* 8027CEF4 00278B54 38 21 00 40 */ addi r1, r1, 0x40
/* 8027CEF8 00278B58 4E 80 00 20 */ blr
.global C_VECReflect
C_VECReflect:
/* 8027CEFC 00278B5C 94 21 FF D0 */ stwu r1, -0x30(r1)
/* 8027CF00 00278B60 7C 08 02 A6 */ mflr r0
/* 8027CF04 00278B64 C0 43 00 00 */ lfs f2, 0(r3)
/* 8027CF08 00278B68 90 01 00 34 */ stw r0, 0x34(r1)
/* 8027CF0C 00278B6C C0 23 00 04 */ lfs f1, 4(r3)
/* 8027CF10 00278B70 FC 40 10 50 */ fneg f2, f2
/* 8027CF14 00278B74 C0 03 00 08 */ lfs f0, 8(r3)
/* 8027CF18 00278B78 38 61 00 14 */ addi r3, r1, 0x14
/* 8027CF1C 00278B7C 93 E1 00 2C */ stw r31, 0x2c(r1)
/* 8027CF20 00278B80 FC 20 08 50 */ fneg f1, f1
/* 8027CF24 00278B84 FC 00 00 50 */ fneg f0, f0
/* 8027CF28 00278B88 93 C1 00 28 */ stw r30, 0x28(r1)
/* 8027CF2C 00278B8C 7C 9E 23 78 */ mr r30, r4
/* 8027CF30 00278B90 7C BF 2B 78 */ mr r31, r5
/* 8027CF34 00278B94 7C 64 1B 78 */ mr r4, r3
/* 8027CF38 00278B98 D0 41 00 14 */ stfs f2, 0x14(r1)
/* 8027CF3C 00278B9C D0 21 00 18 */ stfs f1, 0x18(r1)
/* 8027CF40 00278BA0 D0 01 00 1C */ stfs f0, 0x1c(r1)
/* 8027CF44 00278BA4 4B FF FD E5 */ bl PSVECNormalize
/* 8027CF48 00278BA8 7F C3 F3 78 */ mr r3, r30
/* 8027CF4C 00278BAC 38 81 00 08 */ addi r4, r1, 8
/* 8027CF50 00278BB0 4B FF FD D9 */ bl PSVECNormalize
/* 8027CF54 00278BB4 38 61 00 14 */ addi r3, r1, 0x14
/* 8027CF58 00278BB8 38 81 00 08 */ addi r4, r1, 8
/* 8027CF5C 00278BBC 4B FF FE 6D */ bl PSQUATDotProduct
/* 8027CF60 00278BC0 C0 62 A0 B4 */ lfs f3, lbl_806426B4-_SDA2_BASE_(r2)
/* 8027CF64 00278BC4 7F E3 FB 78 */ mr r3, r31
/* 8027CF68 00278BC8 C0 41 00 08 */ lfs f2, 8(r1)
/* 8027CF6C 00278BCC 7F E4 FB 78 */ mr r4, r31
/* 8027CF70 00278BD0 C0 01 00 14 */ lfs f0, 0x14(r1)
/* 8027CF74 00278BD4 EC 43 00 B2 */ fmuls f2, f3, f2
/* 8027CF78 00278BD8 EC 42 00 72 */ fmuls f2, f2, f1
/* 8027CF7C 00278BDC EC 02 00 28 */ fsubs f0, f2, f0
/* 8027CF80 00278BE0 D0 1F 00 00 */ stfs f0, 0(r31)
/* 8027CF84 00278BE4 C0 41 00 0C */ lfs f2, 0xc(r1)
/* 8027CF88 00278BE8 C0 01 00 18 */ lfs f0, 0x18(r1)
/* 8027CF8C 00278BEC EC 43 00 B2 */ fmuls f2, f3, f2
/* 8027CF90 00278BF0 EC 42 00 72 */ fmuls f2, f2, f1
/* 8027CF94 00278BF4 EC 02 00 28 */ fsubs f0, f2, f0
/* 8027CF98 00278BF8 D0 1F 00 04 */ stfs f0, 4(r31)
/* 8027CF9C 00278BFC C0 41 00 10 */ lfs f2, 0x10(r1)
/* 8027CFA0 00278C00 C0 01 00 1C */ lfs f0, 0x1c(r1)
/* 8027CFA4 00278C04 EC 43 00 B2 */ fmuls f2, f3, f2
/* 8027CFA8 00278C08 EC 22 00 72 */ fmuls f1, f2, f1
/* 8027CFAC 00278C0C EC 01 00 28 */ fsubs f0, f1, f0
/* 8027CFB0 00278C10 D0 1F 00 08 */ stfs f0, 8(r31)
/* 8027CFB4 00278C14 4B FF FD 75 */ bl PSVECNormalize
/* 8027CFB8 00278C18 80 01 00 34 */ lwz r0, 0x34(r1)
/* 8027CFBC 00278C1C 83 E1 00 2C */ lwz r31, 0x2c(r1)
/* 8027CFC0 00278C20 83 C1 00 28 */ lwz r30, 0x28(r1)
/* 8027CFC4 00278C24 7C 08 03 A6 */ mtlr r0
/* 8027CFC8 00278C28 38 21 00 30 */ addi r1, r1, 0x30
/* 8027CFCC 00278C2C 4E 80 00 20 */ blr
.global PSVECDistance
PSVECDistance:
/* 8027CFD0 00278C30 E0 03 00 04 */ psq_l f0, 4(r3), 0, qr0
/* 8027CFD4 00278C34 E0 24 00 04 */ psq_l f1, 4(r4), 0, qr0
/* 8027CFD8 00278C38 C0 62 A0 A8 */ lfs f3, lbl_806426A8-_SDA2_BASE_(r2)
/* 8027CFDC 00278C3C 10 40 08 28 */ ps_sub f2, f0, f1
/* 8027CFE0 00278C40 E0 03 00 00 */ psq_l f0, 0(r3), 0, qr0
/* 8027CFE4 00278C44 E0 24 00 00 */ psq_l f1, 0(r4), 0, qr0
/* 8027CFE8 00278C48 EC 83 18 28 */ fsubs f4, f3, f3
/* 8027CFEC 00278C4C 10 42 00 B2 */ ps_mul f2, f2, f2
/* 8027CFF0 00278C50 10 00 08 28 */ ps_sub f0, f0, f1
/* 8027CFF4 00278C54 10 20 10 3A */ ps_madd f1, f0, f0, f2
/* 8027CFF8 00278C58 10 21 10 94 */ ps_sum0 f1, f1, f2, f2
/* 8027CFFC 00278C5C FC 04 08 00 */ fcmpu cr0, f4, f1
/* 8027D000 00278C60 4D 82 00 20 */ beqlr
/* 8027D004 00278C64 FC 00 08 34 */ frsqrte f0, f1
/* 8027D008 00278C68 C0 82 A0 AC */ lfs f4, lbl_806426AC-_SDA2_BASE_(r2)
/* 8027D00C 00278C6C EC 40 00 32 */ fmuls f2, f0, f0
/* 8027D010 00278C70 EC 00 00 F2 */ fmuls f0, f0, f3
/* 8027D014 00278C74 EC 42 20 7C */ fnmsubs f2, f2, f1, f4
/* 8027D018 00278C78 EC 02 00 32 */ fmuls f0, f2, f0
/* 8027D01C 00278C7C EC 21 00 32 */ fmuls f1, f1, f0
/* 8027D020 00278C80 4E 80 00 20 */ blr
|