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
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
|
.include "macros.inc"
.section .text, "ax" # 0x80006980 - 0x803E1E60
.global PSQUATMultiply
PSQUATMultiply:
/* 8027D024 00278C84 E0 03 00 00 */ psq_l f0, 0(r3), 0, qr0
/* 8027D028 00278C88 E0 23 00 08 */ psq_l f1, 8(r3), 0, qr0
/* 8027D02C 00278C8C 10 A0 00 50 */ ps_neg f5, f0
/* 8027D030 00278C90 E0 44 00 00 */ psq_l f2, 0(r4), 0, qr0
/* 8027D034 00278C94 10 C0 08 50 */ ps_neg f6, f1
/* 8027D038 00278C98 E0 64 00 08 */ psq_l f3, 8(r4), 0, qr0
/* 8027D03C 00278C9C 10 E1 00 98 */ ps_muls0 f7, f1, f2
/* 8027D040 00278CA0 10 85 04 60 */ ps_merge01 f4, f5, f0
/* 8027D044 00278CA4 10 26 0C 60 */ ps_merge01 f1, f6, f1
/* 8027D048 00278CA8 10 A5 00 98 */ ps_muls0 f5, f5, f2
/* 8027D04C 00278CAC 11 04 00 9A */ ps_muls1 f8, f4, f2
/* 8027D050 00278CB0 10 E4 38 DC */ ps_madds0 f7, f4, f3, f7
/* 8027D054 00278CB4 10 41 00 9A */ ps_muls1 f2, f1, f2
/* 8027D058 00278CB8 10 A1 28 DC */ ps_madds0 f5, f1, f3, f5
/* 8027D05C 00278CBC 10 E7 3C A0 */ ps_merge10 f7, f7, f7
/* 8027D060 00278CC0 10 40 10 DE */ ps_madds1 f2, f0, f3, f2
/* 8027D064 00278CC4 10 A5 2C A0 */ ps_merge10 f5, f5, f5
/* 8027D068 00278CC8 11 06 40 DE */ ps_madds1 f8, f6, f3, f8
/* 8027D06C 00278CCC 10 E7 10 2A */ ps_add f7, f7, f2
/* 8027D070 00278CD0 10 A5 40 28 */ ps_sub f5, f5, f8
/* 8027D074 00278CD4 F0 E5 00 00 */ psq_st f7, 0(r5), 0, qr0
/* 8027D078 00278CD8 F0 A5 00 08 */ psq_st f5, 8(r5), 0, qr0
/* 8027D07C 00278CDC 4E 80 00 20 */ blr
.global PSQUATInverse
PSQUATInverse:
/* 8027D080 00278CE0 E0 03 00 00 */ psq_l f0, 0(r3), 0, qr0
/* 8027D084 00278CE4 C0 A2 A0 B8 */ lfs f5, lbl_806426B8-_SDA2_BASE_(r2)
/* 8027D088 00278CE8 10 40 00 32 */ ps_mul f2, f0, f0
/* 8027D08C 00278CEC E0 23 00 08 */ psq_l f1, 8(r3), 0, qr0
/* 8027D090 00278CF0 10 85 28 28 */ ps_sub f4, f5, f5
/* 8027D094 00278CF4 10 65 28 2A */ ps_add f3, f5, f5
/* 8027D098 00278CF8 10 41 10 7A */ ps_madd f2, f1, f1, f2
/* 8027D09C 00278CFC 10 42 10 94 */ ps_sum0 f2, f2, f2, f2
/* 8027D0A0 00278D00 FC 02 20 00 */ fcmpu cr0, f2, f4
/* 8027D0A4 00278D04 41 82 00 10 */ beq lbl_8027D0B4
/* 8027D0A8 00278D08 EC A0 10 30 */ fres f5, f2
/* 8027D0AC 00278D0C 10 42 19 7C */ ps_nmsub f2, f2, f5, f3
/* 8027D0B0 00278D10 10 A5 00 B2 */ ps_mul f5, f5, f2
lbl_8027D0B4:
/* 8027D0B4 00278D14 10 60 28 50 */ ps_neg f3, f5
/* 8027D0B8 00278D18 10 45 00 5A */ ps_muls1 f2, f5, f1
/* 8027D0BC 00278D1C 10 00 00 D8 */ ps_muls0 f0, f0, f3
/* 8027D0C0 00278D20 10 21 00 D8 */ ps_muls0 f1, f1, f3
/* 8027D0C4 00278D24 F0 44 80 0C */ psq_st f2, 12(r4), 1, qr0
/* 8027D0C8 00278D28 F0 04 00 00 */ psq_st f0, 0(r4), 0, qr0
/* 8027D0CC 00278D2C F0 24 80 08 */ psq_st f1, 8(r4), 1, qr0
/* 8027D0D0 00278D30 4E 80 00 20 */ blr
.global PSQUATDivide
PSQUATDivide:
/* 8027D0D4 00278D34 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 8027D0D8 00278D38 7C 08 02 A6 */ mflr r0
/* 8027D0DC 00278D3C 90 01 00 24 */ stw r0, 0x24(r1)
/* 8027D0E0 00278D40 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 8027D0E4 00278D44 7C BF 2B 78 */ mr r31, r5
/* 8027D0E8 00278D48 93 C1 00 18 */ stw r30, 0x18(r1)
/* 8027D0EC 00278D4C 7C 7E 1B 78 */ mr r30, r3
/* 8027D0F0 00278D50 7C 83 23 78 */ mr r3, r4
/* 8027D0F4 00278D54 38 81 00 08 */ addi r4, r1, 8
/* 8027D0F8 00278D58 4B FF FF 89 */ bl PSQUATInverse
/* 8027D0FC 00278D5C 7F C4 F3 78 */ mr r4, r30
/* 8027D100 00278D60 7F E5 FB 78 */ mr r5, r31
/* 8027D104 00278D64 38 61 00 08 */ addi r3, r1, 8
/* 8027D108 00278D68 4B FF FF 1D */ bl PSQUATMultiply
/* 8027D10C 00278D6C 80 01 00 24 */ lwz r0, 0x24(r1)
/* 8027D110 00278D70 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 8027D114 00278D74 83 C1 00 18 */ lwz r30, 0x18(r1)
/* 8027D118 00278D78 7C 08 03 A6 */ mtlr r0
/* 8027D11C 00278D7C 38 21 00 20 */ addi r1, r1, 0x20
/* 8027D120 00278D80 4E 80 00 20 */ blr
.global C_QUATRotAxisRad
C_QUATRotAxisRad:
/* 8027D124 00278D84 94 21 FF C0 */ stwu r1, -0x40(r1)
/* 8027D128 00278D88 7C 08 02 A6 */ mflr r0
/* 8027D12C 00278D8C 90 01 00 44 */ stw r0, 0x44(r1)
/* 8027D130 00278D90 DB E1 00 30 */ stfd f31, 0x30(r1)
/* 8027D134 00278D94 F3 E1 00 38 */ psq_st f31, 56(r1), 0, qr0
/* 8027D138 00278D98 DB C1 00 20 */ stfd f30, 0x20(r1)
/* 8027D13C 00278D9C F3 C1 00 28 */ psq_st f30, 40(r1), 0, qr0
/* 8027D140 00278DA0 FF C0 08 90 */ fmr f30, f1
/* 8027D144 00278DA4 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 8027D148 00278DA8 7C 7F 1B 78 */ mr r31, r3
/* 8027D14C 00278DAC 7C 83 23 78 */ mr r3, r4
/* 8027D150 00278DB0 38 81 00 08 */ addi r4, r1, 8
/* 8027D154 00278DB4 4B FF FB D5 */ bl PSVECNormalize
/* 8027D158 00278DB8 C0 02 A0 C0 */ lfs f0, lbl_806426C0-_SDA2_BASE_(r2)
/* 8027D15C 00278DBC EF C0 07 B2 */ fmuls f30, f0, f30
/* 8027D160 00278DC0 FC 20 F0 90 */ fmr f1, f30
/* 8027D164 00278DC4 4B F5 73 21 */ bl sin
/* 8027D168 00278DC8 FF E0 08 18 */ frsp f31, f1
/* 8027D16C 00278DCC FC 20 F0 90 */ fmr f1, f30
/* 8027D170 00278DD0 4B F5 6F 09 */ bl cos
/* 8027D174 00278DD4 C0 01 00 08 */ lfs f0, 8(r1)
/* 8027D178 00278DD8 FC 20 08 18 */ frsp f1, f1
/* 8027D17C 00278DDC EC 1F 00 32 */ fmuls f0, f31, f0
/* 8027D180 00278DE0 D0 1F 00 00 */ stfs f0, 0(r31)
/* 8027D184 00278DE4 C0 01 00 0C */ lfs f0, 0xc(r1)
/* 8027D188 00278DE8 EC 1F 00 32 */ fmuls f0, f31, f0
/* 8027D18C 00278DEC D0 1F 00 04 */ stfs f0, 4(r31)
/* 8027D190 00278DF0 C0 01 00 10 */ lfs f0, 0x10(r1)
/* 8027D194 00278DF4 EC 1F 00 32 */ fmuls f0, f31, f0
/* 8027D198 00278DF8 D0 3F 00 0C */ stfs f1, 0xc(r31)
/* 8027D19C 00278DFC D0 1F 00 08 */ stfs f0, 8(r31)
/* 8027D1A0 00278E00 E3 E1 00 38 */ psq_l f31, 56(r1), 0, qr0
/* 8027D1A4 00278E04 CB E1 00 30 */ lfd f31, 0x30(r1)
/* 8027D1A8 00278E08 E3 C1 00 28 */ psq_l f30, 40(r1), 0, qr0
/* 8027D1AC 00278E0C CB C1 00 20 */ lfd f30, 0x20(r1)
/* 8027D1B0 00278E10 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 8027D1B4 00278E14 80 01 00 44 */ lwz r0, 0x44(r1)
/* 8027D1B8 00278E18 7C 08 03 A6 */ mtlr r0
/* 8027D1BC 00278E1C 38 21 00 40 */ addi r1, r1, 0x40
/* 8027D1C0 00278E20 4E 80 00 20 */ blr
.global C_QUATMtx
C_QUATMtx:
/* 8027D1C4 00278E24 94 21 FF C0 */ stwu r1, -0x40(r1)
/* 8027D1C8 00278E28 7C 08 02 A6 */ mflr r0
/* 8027D1CC 00278E2C 90 01 00 44 */ stw r0, 0x44(r1)
/* 8027D1D0 00278E30 39 61 00 40 */ addi r11, r1, 0x40
/* 8027D1D4 00278E34 4B F4 9F 4D */ bl _savegpr_25
/* 8027D1D8 00278E38 C0 64 00 00 */ lfs f3, 0(r4)
/* 8027D1DC 00278E3C 3C C0 80 40 */ lis r6, lbl_80400004@ha
/* 8027D1E0 00278E40 C0 44 00 14 */ lfs f2, 0x14(r4)
/* 8027D1E4 00278E44 7C 7F 1B 78 */ mr r31, r3
/* 8027D1E8 00278E48 84 A6 D9 A8 */ lwzu r5, -0x2658(r6)
/* 8027D1EC 00278E4C 7C 99 23 78 */ mr r25, r4
/* 8027D1F0 00278E50 EC 23 10 2A */ fadds f1, f3, f2
/* 8027D1F4 00278E54 C0 04 00 28 */ lfs f0, 0x28(r4)
/* 8027D1F8 00278E58 80 66 00 04 */ lwz r3, lbl_80400004@l(r6)
/* 8027D1FC 00278E5C 80 06 00 08 */ lwz r0, 8(r6)
/* 8027D200 00278E60 EC 20 08 2A */ fadds f1, f0, f1
/* 8027D204 00278E64 C0 02 A0 BC */ lfs f0, lbl_806426BC-_SDA2_BASE_(r2)
/* 8027D208 00278E68 90 A1 00 14 */ stw r5, 0x14(r1)
/* 8027D20C 00278E6C FC 01 00 40 */ fcmpo cr0, f1, f0
/* 8027D210 00278E70 90 61 00 18 */ stw r3, 0x18(r1)
/* 8027D214 00278E74 90 01 00 1C */ stw r0, 0x1c(r1)
/* 8027D218 00278E78 40 81 00 64 */ ble lbl_8027D27C
/* 8027D21C 00278E7C C0 02 A0 B8 */ lfs f0, lbl_806426B8-_SDA2_BASE_(r2)
/* 8027D220 00278E80 EC 20 08 2A */ fadds f1, f0, f1
/* 8027D224 00278E84 4B F5 76 11 */ bl sqrt
/* 8027D228 00278E88 FC E0 08 18 */ frsp f7, f1
/* 8027D22C 00278E8C C0 C2 A0 C0 */ lfs f6, lbl_806426C0-_SDA2_BASE_(r2)
/* 8027D230 00278E90 C0 B9 00 24 */ lfs f5, 0x24(r25)
/* 8027D234 00278E94 C0 99 00 18 */ lfs f4, 0x18(r25)
/* 8027D238 00278E98 ED 06 38 24 */ fdivs f8, f6, f7
/* 8027D23C 00278E9C C0 79 00 08 */ lfs f3, 8(r25)
/* 8027D240 00278EA0 C0 59 00 20 */ lfs f2, 0x20(r25)
/* 8027D244 00278EA4 C0 39 00 10 */ lfs f1, 0x10(r25)
/* 8027D248 00278EA8 C0 19 00 04 */ lfs f0, 4(r25)
/* 8027D24C 00278EAC EC 85 20 28 */ fsubs f4, f5, f4
/* 8027D250 00278EB0 EC 43 10 28 */ fsubs f2, f3, f2
/* 8027D254 00278EB4 EC 01 00 28 */ fsubs f0, f1, f0
/* 8027D258 00278EB8 EC A6 01 F2 */ fmuls f5, f6, f7
/* 8027D25C 00278EBC EC 68 01 32 */ fmuls f3, f8, f4
/* 8027D260 00278EC0 EC 28 00 B2 */ fmuls f1, f8, f2
/* 8027D264 00278EC4 EC 08 00 32 */ fmuls f0, f8, f0
/* 8027D268 00278EC8 D0 BF 00 0C */ stfs f5, 0xc(r31)
/* 8027D26C 00278ECC D0 7F 00 00 */ stfs f3, 0(r31)
/* 8027D270 00278ED0 D0 3F 00 04 */ stfs f1, 4(r31)
/* 8027D274 00278ED4 D0 1F 00 08 */ stfs f0, 8(r31)
/* 8027D278 00278ED8 48 00 01 00 */ b lbl_8027D378
lbl_8027D27C:
/* 8027D27C 00278EDC FC 02 18 40 */ fcmpo cr0, f2, f3
/* 8027D280 00278EE0 38 A0 00 00 */ li r5, 0
/* 8027D284 00278EE4 40 81 00 08 */ ble lbl_8027D28C
/* 8027D288 00278EE8 38 A0 00 01 */ li r5, 1
lbl_8027D28C:
/* 8027D28C 00278EEC 54 A0 20 36 */ slwi r0, r5, 4
/* 8027D290 00278EF0 54 A3 10 3A */ slwi r3, r5, 2
/* 8027D294 00278EF4 7C 04 02 14 */ add r0, r4, r0
/* 8027D298 00278EF8 C0 24 00 28 */ lfs f1, 0x28(r4)
/* 8027D29C 00278EFC 7C 03 04 2E */ lfsx f0, r3, r0
/* 8027D2A0 00278F00 FC 01 00 40 */ fcmpo cr0, f1, f0
/* 8027D2A4 00278F04 40 81 00 08 */ ble lbl_8027D2AC
/* 8027D2A8 00278F08 38 A0 00 02 */ li r5, 2
lbl_8027D2AC:
/* 8027D2AC 00278F0C 54 BA 10 3A */ slwi r26, r5, 2
/* 8027D2B0 00278F10 38 61 00 14 */ addi r3, r1, 0x14
/* 8027D2B4 00278F14 7C C3 D0 2E */ lwzx r6, r3, r26
/* 8027D2B8 00278F18 54 A0 20 36 */ slwi r0, r5, 4
/* 8027D2BC 00278F1C 7F 24 02 14 */ add r25, r4, r0
/* 8027D2C0 00278F20 C0 02 A0 B8 */ lfs f0, lbl_806426B8-_SDA2_BASE_(r2)
/* 8027D2C4 00278F24 54 DC 10 3A */ slwi r28, r6, 2
/* 8027D2C8 00278F28 54 C0 20 36 */ slwi r0, r6, 4
/* 8027D2CC 00278F2C 7C 63 E0 2E */ lwzx r3, r3, r28
/* 8027D2D0 00278F30 7F A4 02 14 */ add r29, r4, r0
/* 8027D2D4 00278F34 7C 7D E4 2E */ lfsx f3, r29, r28
/* 8027D2D8 00278F38 54 60 20 36 */ slwi r0, r3, 4
/* 8027D2DC 00278F3C 54 7E 10 3A */ slwi r30, r3, 2
/* 8027D2E0 00278F40 7F 64 02 14 */ add r27, r4, r0
/* 8027D2E4 00278F44 7C 39 D4 2E */ lfsx f1, r25, r26
/* 8027D2E8 00278F48 7C 5B F4 2E */ lfsx f2, r27, r30
/* 8027D2EC 00278F4C EC 43 10 2A */ fadds f2, f3, f2
/* 8027D2F0 00278F50 EC 21 10 28 */ fsubs f1, f1, f2
/* 8027D2F4 00278F54 EC 20 08 2A */ fadds f1, f0, f1
/* 8027D2F8 00278F58 4B F5 75 3D */ bl sqrt
/* 8027D2FC 00278F5C FC A0 08 18 */ frsp f5, f1
/* 8027D300 00278F60 C0 42 A0 C0 */ lfs f2, lbl_806426C0-_SDA2_BASE_(r2)
/* 8027D304 00278F64 C0 02 A0 BC */ lfs f0, lbl_806426BC-_SDA2_BASE_(r2)
/* 8027D308 00278F68 38 61 00 08 */ addi r3, r1, 8
/* 8027D30C 00278F6C EC 22 01 72 */ fmuls f1, f2, f5
/* 8027D310 00278F70 FC 00 28 00 */ fcmpu cr0, f0, f5
/* 8027D314 00278F74 7C 23 D5 2E */ stfsx f1, r3, r26
/* 8027D318 00278F78 41 82 00 08 */ beq lbl_8027D320
/* 8027D31C 00278F7C EC A2 28 24 */ fdivs f5, f2, f5
lbl_8027D320:
/* 8027D320 00278F80 7C 59 E4 2E */ lfsx f2, r25, r28
/* 8027D324 00278F84 38 61 00 08 */ addi r3, r1, 8
/* 8027D328 00278F88 7C 1D D4 2E */ lfsx f0, r29, r26
/* 8027D32C 00278F8C 7C 39 F4 2E */ lfsx f1, r25, r30
/* 8027D330 00278F90 EC 42 00 2A */ fadds f2, f2, f0
/* 8027D334 00278F94 7C 1B D4 2E */ lfsx f0, r27, r26
/* 8027D338 00278F98 7C 9B E4 2E */ lfsx f4, r27, r28
/* 8027D33C 00278F9C EC 01 00 2A */ fadds f0, f1, f0
/* 8027D340 00278FA0 7C 7D F4 2E */ lfsx f3, r29, r30
/* 8027D344 00278FA4 EC 25 00 B2 */ fmuls f1, f5, f2
/* 8027D348 00278FA8 EC 44 18 28 */ fsubs f2, f4, f3
/* 8027D34C 00278FAC EC 05 00 32 */ fmuls f0, f5, f0
/* 8027D350 00278FB0 7C 23 E5 2E */ stfsx f1, r3, r28
/* 8027D354 00278FB4 EC 65 00 B2 */ fmuls f3, f5, f2
/* 8027D358 00278FB8 7C 03 F5 2E */ stfsx f0, r3, r30
/* 8027D35C 00278FBC C0 41 00 08 */ lfs f2, 8(r1)
/* 8027D360 00278FC0 C0 21 00 0C */ lfs f1, 0xc(r1)
/* 8027D364 00278FC4 C0 01 00 10 */ lfs f0, 0x10(r1)
/* 8027D368 00278FC8 D0 7F 00 0C */ stfs f3, 0xc(r31)
/* 8027D36C 00278FCC D0 5F 00 00 */ stfs f2, 0(r31)
/* 8027D370 00278FD0 D0 3F 00 04 */ stfs f1, 4(r31)
/* 8027D374 00278FD4 D0 1F 00 08 */ stfs f0, 8(r31)
lbl_8027D378:
/* 8027D378 00278FD8 39 61 00 40 */ addi r11, r1, 0x40
/* 8027D37C 00278FDC 4B F4 9D F1 */ bl _restgpr_25
/* 8027D380 00278FE0 80 01 00 44 */ lwz r0, 0x44(r1)
/* 8027D384 00278FE4 7C 08 03 A6 */ mtlr r0
/* 8027D388 00278FE8 38 21 00 40 */ addi r1, r1, 0x40
/* 8027D38C 00278FEC 4E 80 00 20 */ blr
.global C_QUATSlerp
C_QUATSlerp:
/* 8027D390 00278FF0 94 21 FF A0 */ stwu r1, -0x60(r1)
/* 8027D394 00278FF4 7C 08 02 A6 */ mflr r0
/* 8027D398 00278FF8 90 01 00 64 */ stw r0, 0x64(r1)
/* 8027D39C 00278FFC DB E1 00 50 */ stfd f31, 0x50(r1)
/* 8027D3A0 00279000 F3 E1 00 58 */ psq_st f31, 88(r1), 0, qr0
/* 8027D3A4 00279004 DB C1 00 40 */ stfd f30, 0x40(r1)
/* 8027D3A8 00279008 F3 C1 00 48 */ psq_st f30, 72(r1), 0, qr0
/* 8027D3AC 0027900C DB A1 00 30 */ stfd f29, 0x30(r1)
/* 8027D3B0 00279010 F3 A1 00 38 */ psq_st f29, 56(r1), 0, qr0
/* 8027D3B4 00279014 DB 81 00 20 */ stfd f28, 0x20(r1)
/* 8027D3B8 00279018 F3 81 00 28 */ psq_st f28, 40(r1), 0, qr0
/* 8027D3BC 0027901C FF E0 08 90 */ fmr f31, f1
/* 8027D3C0 00279020 C0 83 00 00 */ lfs f4, 0(r3)
/* 8027D3C4 00279024 C0 64 00 00 */ lfs f3, 0(r4)
/* 8027D3C8 00279028 C0 43 00 04 */ lfs f2, 4(r3)
/* 8027D3CC 0027902C C0 04 00 04 */ lfs f0, 4(r4)
/* 8027D3D0 00279030 EC 64 00 F2 */ fmuls f3, f4, f3
/* 8027D3D4 00279034 C0 83 00 08 */ lfs f4, 8(r3)
/* 8027D3D8 00279038 EC 02 00 32 */ fmuls f0, f2, f0
/* 8027D3DC 0027903C C0 44 00 08 */ lfs f2, 8(r4)
/* 8027D3E0 00279040 C0 C3 00 0C */ lfs f6, 0xc(r3)
/* 8027D3E4 00279044 EC 84 00 B2 */ fmuls f4, f4, f2
/* 8027D3E8 00279048 C0 A4 00 0C */ lfs f5, 0xc(r4)
/* 8027D3EC 0027904C EC 43 00 2A */ fadds f2, f3, f0
/* 8027D3F0 00279050 EC 66 01 72 */ fmuls f3, f6, f5
/* 8027D3F4 00279054 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 8027D3F8 00279058 C0 02 A0 BC */ lfs f0, lbl_806426BC-_SDA2_BASE_(r2)
/* 8027D3FC 0027905C EC 44 10 2A */ fadds f2, f4, f2
/* 8027D400 00279060 93 C1 00 18 */ stw r30, 0x18(r1)
/* 8027D404 00279064 C3 C2 A0 B8 */ lfs f30, lbl_806426B8-_SDA2_BASE_(r2)
/* 8027D408 00279068 93 A1 00 14 */ stw r29, 0x14(r1)
/* 8027D40C 0027906C 7C 7D 1B 78 */ mr r29, r3
/* 8027D410 00279070 EC 43 10 2A */ fadds f2, f3, f2
/* 8027D414 00279074 7C 9E 23 78 */ mr r30, r4
/* 8027D418 00279078 7C BF 2B 78 */ mr r31, r5
/* 8027D41C 0027907C FC 02 00 40 */ fcmpo cr0, f2, f0
/* 8027D420 00279080 40 80 00 0C */ bge lbl_8027D42C
/* 8027D424 00279084 FC 40 10 50 */ fneg f2, f2
/* 8027D428 00279088 FF C0 F0 50 */ fneg f30, f30
lbl_8027D42C:
/* 8027D42C 0027908C C0 02 A0 C4 */ lfs f0, lbl_806426C4-_SDA2_BASE_(r2)
/* 8027D430 00279090 FC 02 00 40 */ fcmpo cr0, f2, f0
/* 8027D434 00279094 4C 40 13 82 */ cror 2, 0, 2
/* 8027D438 00279098 40 82 00 4C */ bne lbl_8027D484
/* 8027D43C 0027909C FC 20 10 90 */ fmr f1, f2
/* 8027D440 002790A0 4B F5 71 95 */ bl acos
/* 8027D444 002790A4 FF A0 08 18 */ frsp f29, f1
/* 8027D448 002790A8 FC 20 E8 90 */ fmr f1, f29
/* 8027D44C 002790AC 4B F5 70 39 */ bl sin
/* 8027D450 002790B0 C0 02 A0 B8 */ lfs f0, lbl_806426B8-_SDA2_BASE_(r2)
/* 8027D454 002790B4 FF 80 08 18 */ frsp f28, f1
/* 8027D458 002790B8 EC 00 F8 28 */ fsubs f0, f0, f31
/* 8027D45C 002790BC EC 20 07 72 */ fmuls f1, f0, f29
/* 8027D460 002790C0 4B F5 70 25 */ bl sin
/* 8027D464 002790C4 FC 00 08 18 */ frsp f0, f1
/* 8027D468 002790C8 EC 3F 07 72 */ fmuls f1, f31, f29
/* 8027D46C 002790CC EF E0 E0 24 */ fdivs f31, f0, f28
/* 8027D470 002790D0 4B F5 70 15 */ bl sin
/* 8027D474 002790D4 FC 00 08 18 */ frsp f0, f1
/* 8027D478 002790D8 EC 00 E0 24 */ fdivs f0, f0, f28
/* 8027D47C 002790DC EF DE 00 32 */ fmuls f30, f30, f0
/* 8027D480 002790E0 48 00 00 10 */ b lbl_8027D490
lbl_8027D484:
/* 8027D484 002790E4 C0 02 A0 B8 */ lfs f0, lbl_806426B8-_SDA2_BASE_(r2)
/* 8027D488 002790E8 EF DE 00 72 */ fmuls f30, f30, f1
/* 8027D48C 002790EC EF E0 08 28 */ fsubs f31, f0, f1
lbl_8027D490:
/* 8027D490 002790F0 C0 1D 00 00 */ lfs f0, 0(r29)
/* 8027D494 002790F4 C0 5E 00 00 */ lfs f2, 0(r30)
/* 8027D498 002790F8 C0 3D 00 04 */ lfs f1, 4(r29)
/* 8027D49C 002790FC EC FF 00 32 */ fmuls f7, f31, f0
/* 8027D4A0 00279100 C0 1E 00 04 */ lfs f0, 4(r30)
/* 8027D4A4 00279104 EC DE 00 B2 */ fmuls f6, f30, f2
/* 8027D4A8 00279108 C0 7D 00 08 */ lfs f3, 8(r29)
/* 8027D4AC 0027910C EC BF 00 72 */ fmuls f5, f31, f1
/* 8027D4B0 00279110 EC 9E 00 32 */ fmuls f4, f30, f0
/* 8027D4B4 00279114 C0 5E 00 08 */ lfs f2, 8(r30)
/* 8027D4B8 00279118 EC 7F 00 F2 */ fmuls f3, f31, f3
/* 8027D4BC 0027911C C0 3D 00 0C */ lfs f1, 0xc(r29)
/* 8027D4C0 00279120 EC C7 30 2A */ fadds f6, f7, f6
/* 8027D4C4 00279124 C0 1E 00 0C */ lfs f0, 0xc(r30)
/* 8027D4C8 00279128 EC 5E 00 B2 */ fmuls f2, f30, f2
/* 8027D4CC 0027912C EC 85 20 2A */ fadds f4, f5, f4
/* 8027D4D0 00279130 D0 DF 00 00 */ stfs f6, 0(r31)
/* 8027D4D4 00279134 EC 3F 00 72 */ fmuls f1, f31, f1
/* 8027D4D8 00279138 EC 1E 00 32 */ fmuls f0, f30, f0
/* 8027D4DC 0027913C EC 43 10 2A */ fadds f2, f3, f2
/* 8027D4E0 00279140 D0 9F 00 04 */ stfs f4, 4(r31)
/* 8027D4E4 00279144 EC 01 00 2A */ fadds f0, f1, f0
/* 8027D4E8 00279148 D0 5F 00 08 */ stfs f2, 8(r31)
/* 8027D4EC 0027914C D0 1F 00 0C */ stfs f0, 0xc(r31)
/* 8027D4F0 00279150 E3 E1 00 58 */ psq_l f31, 88(r1), 0, qr0
/* 8027D4F4 00279154 CB E1 00 50 */ lfd f31, 0x50(r1)
/* 8027D4F8 00279158 E3 C1 00 48 */ psq_l f30, 72(r1), 0, qr0
/* 8027D4FC 0027915C CB C1 00 40 */ lfd f30, 0x40(r1)
/* 8027D500 00279160 E3 A1 00 38 */ psq_l f29, 56(r1), 0, qr0
/* 8027D504 00279164 CB A1 00 30 */ lfd f29, 0x30(r1)
/* 8027D508 00279168 E3 81 00 28 */ psq_l f28, 40(r1), 0, qr0
/* 8027D50C 0027916C CB 81 00 20 */ lfd f28, 0x20(r1)
/* 8027D510 00279170 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 8027D514 00279174 83 C1 00 18 */ lwz r30, 0x18(r1)
/* 8027D518 00279178 83 A1 00 14 */ lwz r29, 0x14(r1)
/* 8027D51C 0027917C 80 01 00 64 */ lwz r0, 0x64(r1)
/* 8027D520 00279180 7C 08 03 A6 */ mtlr r0
/* 8027D524 00279184 38 21 00 60 */ addi r1, r1, 0x60
/* 8027D528 00279188 4E 80 00 20 */ blr
.global C_QUATSquad
C_QUATSquad:
/* 8027D52C 0027918C 94 21 FF A0 */ stwu r1, -0x60(r1)
/* 8027D530 00279190 7C 08 02 A6 */ mflr r0
/* 8027D534 00279194 90 01 00 64 */ stw r0, 0x64(r1)
/* 8027D538 00279198 DB E1 00 50 */ stfd f31, 0x50(r1)
/* 8027D53C 0027919C F3 E1 00 58 */ psq_st f31, 88(r1), 0, qr0
/* 8027D540 002791A0 DB C1 00 40 */ stfd f30, 0x40(r1)
/* 8027D544 002791A4 F3 C1 00 48 */ psq_st f30, 72(r1), 0, qr0
/* 8027D548 002791A8 FF C0 08 90 */ fmr f30, f1
/* 8027D54C 002791AC C0 42 A0 C8 */ lfs f2, lbl_806426C8-_SDA2_BASE_(r2)
/* 8027D550 002791B0 93 E1 00 3C */ stw r31, 0x3c(r1)
/* 8027D554 002791B4 7C FF 3B 78 */ mr r31, r7
/* 8027D558 002791B8 C0 02 A0 B8 */ lfs f0, lbl_806426B8-_SDA2_BASE_(r2)
/* 8027D55C 002791BC EC 42 00 72 */ fmuls f2, f2, f1
/* 8027D560 002791C0 93 C1 00 38 */ stw r30, 0x38(r1)
/* 8027D564 002791C4 7C BE 2B 78 */ mr r30, r5
/* 8027D568 002791C8 EC 00 08 28 */ fsubs f0, f0, f1
/* 8027D56C 002791CC 38 A1 00 18 */ addi r5, r1, 0x18
/* 8027D570 002791D0 93 A1 00 34 */ stw r29, 0x34(r1)
/* 8027D574 002791D4 7C 9D 23 78 */ mr r29, r4
/* 8027D578 002791D8 7C C4 33 78 */ mr r4, r6
/* 8027D57C 002791DC EF E2 00 32 */ fmuls f31, f2, f0
/* 8027D580 002791E0 4B FF FE 11 */ bl C_QUATSlerp
/* 8027D584 002791E4 FC 20 F0 90 */ fmr f1, f30
/* 8027D588 002791E8 7F A3 EB 78 */ mr r3, r29
/* 8027D58C 002791EC 7F C4 F3 78 */ mr r4, r30
/* 8027D590 002791F0 38 A1 00 08 */ addi r5, r1, 8
/* 8027D594 002791F4 4B FF FD FD */ bl C_QUATSlerp
/* 8027D598 002791F8 FC 20 F8 90 */ fmr f1, f31
/* 8027D59C 002791FC 7F E5 FB 78 */ mr r5, r31
/* 8027D5A0 00279200 38 61 00 18 */ addi r3, r1, 0x18
/* 8027D5A4 00279204 38 81 00 08 */ addi r4, r1, 8
/* 8027D5A8 00279208 4B FF FD E9 */ bl C_QUATSlerp
/* 8027D5AC 0027920C E3 E1 00 58 */ psq_l f31, 88(r1), 0, qr0
/* 8027D5B0 00279210 CB E1 00 50 */ lfd f31, 0x50(r1)
/* 8027D5B4 00279214 E3 C1 00 48 */ psq_l f30, 72(r1), 0, qr0
/* 8027D5B8 00279218 CB C1 00 40 */ lfd f30, 0x40(r1)
/* 8027D5BC 0027921C 83 E1 00 3C */ lwz r31, 0x3c(r1)
/* 8027D5C0 00279220 83 C1 00 38 */ lwz r30, 0x38(r1)
/* 8027D5C4 00279224 80 01 00 64 */ lwz r0, 0x64(r1)
/* 8027D5C8 00279228 83 A1 00 34 */ lwz r29, 0x34(r1)
/* 8027D5CC 0027922C 7C 08 03 A6 */ mtlr r0
/* 8027D5D0 00279230 38 21 00 60 */ addi r1, r1, 0x60
/* 8027D5D4 00279234 4E 80 00 20 */ blr
.global func_8027D5D8
func_8027D5D8:
/* 8027D5D8 00279238 E0 03 00 00 */ psq_l f0, 0(r3), 0, qr0
/* 8027D5DC 0027923C E0 43 00 10 */ psq_l f2, 16(r3), 0, qr0
/* 8027D5E0 00279240 E0 83 00 20 */ psq_l f4, 32(r3), 0, qr0
/* 8027D5E4 00279244 E0 23 00 08 */ psq_l f1, 8(r3), 0, qr0
/* 8027D5E8 00279248 10 C0 14 20 */ ps_merge00 f6, f0, f2
/* 8027D5EC 0027924C E0 63 00 18 */ psq_l f3, 24(r3), 0, qr0
/* 8027D5F0 00279250 11 84 04 60 */ ps_merge01 f12, f4, f0
/* 8027D5F4 00279254 E0 A3 00 28 */ psq_l f5, 40(r3), 0, qr0
/* 8027D5F8 00279258 10 E2 24 E0 */ ps_merge11 f7, f2, f4
/* 8027D5FC 0027925C F0 C4 00 00 */ psq_st f6, 0(r4), 0, qr0
/* 8027D600 00279260 11 01 1C 20 */ ps_merge00 f8, f1, f3
/* 8027D604 00279264 F1 84 00 08 */ psq_st f12, 8(r4), 0, qr0
/* 8027D608 00279268 11 25 0C 60 */ ps_merge01 f9, f5, f1
/* 8027D60C 0027926C F0 E4 00 10 */ psq_st f7, 16(r4), 0, qr0
/* 8027D610 00279270 11 43 2C E0 */ ps_merge11 f10, f3, f5
/* 8027D614 00279274 F1 04 00 18 */ psq_st f8, 24(r4), 0, qr0
/* 8027D618 00279278 F1 24 00 20 */ psq_st f9, 32(r4), 0, qr0
/* 8027D61C 0027927C F1 44 00 28 */ psq_st f10, 40(r4), 0, qr0
/* 8027D620 00279280 4E 80 00 20 */ blr
|