summaryrefslogtreecommitdiff
path: root/asm/SDK/MTX/mtx.s
blob: c902a540fe382d636d844d247ac7c6de90f2c9e8 (plain)
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
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
.include "macros.inc"

.section .text, "ax"  # 0x80006980 - 0x803E1E60

.global PSMTXIdentity
PSMTXIdentity:
/* 8027BF2C 00277B8C  C0 02 A0 74 */	lfs f0, lbl_80642674-_SDA2_BASE_(r2)
/* 8027BF30 00277B90  C0 22 A0 70 */	lfs f1, lbl_80642670-_SDA2_BASE_(r2)
/* 8027BF34 00277B94  F0 03 00 08 */	psq_st f0, 8(r3), 0, qr0
/* 8027BF38 00277B98  10 41 04 A0 */	ps_merge10 f2, f1, f0
/* 8027BF3C 00277B9C  10 20 0C 60 */	ps_merge01 f1, f0, f1
/* 8027BF40 00277BA0  F0 03 00 18 */	psq_st f0, 24(r3), 0, qr0
/* 8027BF44 00277BA4  F0 03 00 20 */	psq_st f0, 32(r3), 0, qr0
/* 8027BF48 00277BA8  F0 23 00 10 */	psq_st f1, 16(r3), 0, qr0
/* 8027BF4C 00277BAC  F0 43 00 00 */	psq_st f2, 0(r3), 0, qr0
/* 8027BF50 00277BB0  F0 43 00 28 */	psq_st f2, 40(r3), 0, qr0
/* 8027BF54 00277BB4  4E 80 00 20 */	blr

.global PSMTXCopy
PSMTXCopy:
/* 8027BF58 00277BB8  E0 03 00 00 */	psq_l f0, 0(r3), 0, qr0
/* 8027BF5C 00277BBC  F0 04 00 00 */	psq_st f0, 0(r4), 0, qr0
/* 8027BF60 00277BC0  E0 23 00 08 */	psq_l f1, 8(r3), 0, qr0
/* 8027BF64 00277BC4  F0 24 00 08 */	psq_st f1, 8(r4), 0, qr0
/* 8027BF68 00277BC8  E0 43 00 10 */	psq_l f2, 16(r3), 0, qr0
/* 8027BF6C 00277BCC  F0 44 00 10 */	psq_st f2, 16(r4), 0, qr0
/* 8027BF70 00277BD0  E0 63 00 18 */	psq_l f3, 24(r3), 0, qr0
/* 8027BF74 00277BD4  F0 64 00 18 */	psq_st f3, 24(r4), 0, qr0
/* 8027BF78 00277BD8  E0 83 00 20 */	psq_l f4, 32(r3), 0, qr0
/* 8027BF7C 00277BDC  F0 84 00 20 */	psq_st f4, 32(r4), 0, qr0
/* 8027BF80 00277BE0  E0 A3 00 28 */	psq_l f5, 40(r3), 0, qr0
/* 8027BF84 00277BE4  F0 A4 00 28 */	psq_st f5, 40(r4), 0, qr0
/* 8027BF88 00277BE8  4E 80 00 20 */	blr

.global PSMTXConcat
PSMTXConcat:
/* 8027BF8C 00277BEC  94 21 FF C0 */	stwu r1, -0x40(r1)
/* 8027BF90 00277BF0  E0 03 00 00 */	psq_l f0, 0(r3), 0, qr0
/* 8027BF94 00277BF4  D9 C1 00 08 */	stfd f14, 8(r1)
/* 8027BF98 00277BF8  E0 C4 00 00 */	psq_l f6, 0(r4), 0, qr0
/* 8027BF9C 00277BFC  3C C0 80 64 */	lis r6, lbl_8063DB08@ha
/* 8027BFA0 00277C00  E0 E4 00 08 */	psq_l f7, 8(r4), 0, qr0
/* 8027BFA4 00277C04  D9 E1 00 10 */	stfd f15, 0x10(r1)
/* 8027BFA8 00277C08  38 C6 DB 08 */	addi r6, r6, lbl_8063DB08@l
/* 8027BFAC 00277C0C  DB E1 00 28 */	stfd f31, 0x28(r1)
/* 8027BFB0 00277C10  E1 04 00 10 */	psq_l f8, 16(r4), 0, qr0
/* 8027BFB4 00277C14  11 86 00 18 */	ps_muls0 f12, f6, f0
/* 8027BFB8 00277C18  E0 43 00 10 */	psq_l f2, 16(r3), 0, qr0
/* 8027BFBC 00277C1C  11 A7 00 18 */	ps_muls0 f13, f7, f0
/* 8027BFC0 00277C20  E3 E6 00 00 */	psq_l f31, 0(r6), 0, qr0
/* 8027BFC4 00277C24  11 C6 00 98 */	ps_muls0 f14, f6, f2
/* 8027BFC8 00277C28  E1 24 00 18 */	psq_l f9, 24(r4), 0, qr0
/* 8027BFCC 00277C2C  11 E7 00 98 */	ps_muls0 f15, f7, f2
/* 8027BFD0 00277C30  E0 23 00 08 */	psq_l f1, 8(r3), 0, qr0
/* 8027BFD4 00277C34  11 88 60 1E */	ps_madds1 f12, f8, f0, f12
/* 8027BFD8 00277C38  E0 63 00 18 */	psq_l f3, 24(r3), 0, qr0
/* 8027BFDC 00277C3C  11 C8 70 9E */	ps_madds1 f14, f8, f2, f14
/* 8027BFE0 00277C40  E1 44 00 20 */	psq_l f10, 32(r4), 0, qr0
/* 8027BFE4 00277C44  11 A9 68 1E */	ps_madds1 f13, f9, f0, f13
/* 8027BFE8 00277C48  E1 64 00 28 */	psq_l f11, 40(r4), 0, qr0
/* 8027BFEC 00277C4C  11 E9 78 9E */	ps_madds1 f15, f9, f2, f15
/* 8027BFF0 00277C50  E0 83 00 20 */	psq_l f4, 32(r3), 0, qr0
/* 8027BFF4 00277C54  E0 A3 00 28 */	psq_l f5, 40(r3), 0, qr0
/* 8027BFF8 00277C58  11 8A 60 5C */	ps_madds0 f12, f10, f1, f12
/* 8027BFFC 00277C5C  11 AB 68 5C */	ps_madds0 f13, f11, f1, f13
/* 8027C000 00277C60  11 CA 70 DC */	ps_madds0 f14, f10, f3, f14
/* 8027C004 00277C64  11 EB 78 DC */	ps_madds0 f15, f11, f3, f15
/* 8027C008 00277C68  F1 85 00 00 */	psq_st f12, 0(r5), 0, qr0
/* 8027C00C 00277C6C  10 46 01 18 */	ps_muls0 f2, f6, f4
/* 8027C010 00277C70  11 BF 68 5E */	ps_madds1 f13, f31, f1, f13
/* 8027C014 00277C74  10 07 01 18 */	ps_muls0 f0, f7, f4
/* 8027C018 00277C78  F1 C5 00 10 */	psq_st f14, 16(r5), 0, qr0
/* 8027C01C 00277C7C  11 FF 78 DE */	ps_madds1 f15, f31, f3, f15
/* 8027C020 00277C80  F1 A5 00 08 */	psq_st f13, 8(r5), 0, qr0
/* 8027C024 00277C84  10 48 11 1E */	ps_madds1 f2, f8, f4, f2
/* 8027C028 00277C88  10 09 01 1E */	ps_madds1 f0, f9, f4, f0
/* 8027C02C 00277C8C  10 4A 11 5C */	ps_madds0 f2, f10, f5, f2
/* 8027C030 00277C90  C9 C1 00 08 */	lfd f14, 8(r1)
/* 8027C034 00277C94  F1 E5 00 18 */	psq_st f15, 24(r5), 0, qr0
/* 8027C038 00277C98  10 0B 01 5C */	ps_madds0 f0, f11, f5, f0
/* 8027C03C 00277C9C  F0 45 00 20 */	psq_st f2, 32(r5), 0, qr0
/* 8027C040 00277CA0  10 1F 01 5E */	ps_madds1 f0, f31, f5, f0
/* 8027C044 00277CA4  C9 E1 00 10 */	lfd f15, 0x10(r1)
/* 8027C048 00277CA8  F0 05 00 28 */	psq_st f0, 40(r5), 0, qr0
/* 8027C04C 00277CAC  CB E1 00 28 */	lfd f31, 0x28(r1)
/* 8027C050 00277CB0  38 21 00 40 */	addi r1, r1, 0x40
/* 8027C054 00277CB4  4E 80 00 20 */	blr

.global PSMTXTranspose
PSMTXTranspose:
/* 8027C058 00277CB8  E0 23 00 00 */	psq_l f1, 0(r3), 0, qr0
/* 8027C05C 00277CBC  E0 43 00 10 */	psq_l f2, 16(r3), 0, qr0
/* 8027C060 00277CC0  C0 02 A0 74 */	lfs f0, lbl_80642674-_SDA2_BASE_(r2)
/* 8027C064 00277CC4  10 81 14 20 */	ps_merge00 f4, f1, f2
/* 8027C068 00277CC8  E0 63 80 08 */	psq_l f3, 8(r3), 1, qr0
/* 8027C06C 00277CCC  10 A1 14 E0 */	ps_merge11 f5, f1, f2
/* 8027C070 00277CD0  E0 43 80 18 */	psq_l f2, 24(r3), 1, qr0
/* 8027C074 00277CD4  E0 23 00 20 */	psq_l f1, 32(r3), 0, qr0
/* 8027C078 00277CD8  10 43 14 20 */	ps_merge00 f2, f3, f2
/* 8027C07C 00277CDC  F0 84 00 00 */	psq_st f4, 0(r4), 0, qr0
/* 8027C080 00277CE0  10 81 04 20 */	ps_merge00 f4, f1, f0
/* 8027C084 00277CE4  C0 63 00 28 */	lfs f3, 0x28(r3)
/* 8027C088 00277CE8  F0 A4 00 10 */	psq_st f5, 16(r4), 0, qr0
/* 8027C08C 00277CEC  10 A1 04 A0 */	ps_merge10 f5, f1, f0
/* 8027C090 00277CF0  D0 04 00 2C */	stfs f0, 0x2c(r4)
/* 8027C094 00277CF4  F0 44 00 20 */	psq_st f2, 32(r4), 0, qr0
/* 8027C098 00277CF8  F0 84 00 08 */	psq_st f4, 8(r4), 0, qr0
/* 8027C09C 00277CFC  F0 A4 00 18 */	psq_st f5, 24(r4), 0, qr0
/* 8027C0A0 00277D00  D0 64 00 28 */	stfs f3, 0x28(r4)
/* 8027C0A4 00277D04  4E 80 00 20 */	blr

.global PSMTXInverse
PSMTXInverse:
/* 8027C0A8 00277D08  E0 03 80 00 */	psq_l f0, 0(r3), 1, qr0
/* 8027C0AC 00277D0C  E0 23 00 04 */	psq_l f1, 4(r3), 0, qr0
/* 8027C0B0 00277D10  E0 43 80 10 */	psq_l f2, 16(r3), 1, qr0
/* 8027C0B4 00277D14  10 C1 04 A0 */	ps_merge10 f6, f1, f0
/* 8027C0B8 00277D18  E0 63 00 14 */	psq_l f3, 20(r3), 0, qr0
/* 8027C0BC 00277D1C  E0 83 80 20 */	psq_l f4, 32(r3), 1, qr0
/* 8027C0C0 00277D20  10 E3 14 A0 */	ps_merge10 f7, f3, f2
/* 8027C0C4 00277D24  E0 A3 00 24 */	psq_l f5, 36(r3), 0, qr0
/* 8027C0C8 00277D28  11 63 01 B2 */	ps_mul f11, f3, f6
/* 8027C0CC 00277D2C  11 A5 01 F2 */	ps_mul f13, f5, f7
/* 8027C0D0 00277D30  11 05 24 A0 */	ps_merge10 f8, f5, f4
/* 8027C0D4 00277D34  11 61 59 F8 */	ps_msub f11, f1, f7, f11
/* 8027C0D8 00277D38  11 81 02 32 */	ps_mul f12, f1, f8
/* 8027C0DC 00277D3C  11 A3 6A 38 */	ps_msub f13, f3, f8, f13
/* 8027C0E0 00277D40  11 43 01 32 */	ps_mul f10, f3, f4
/* 8027C0E4 00277D44  11 85 61 B8 */	ps_msub f12, f5, f6, f12
/* 8027C0E8 00277D48  11 20 01 72 */	ps_mul f9, f0, f5
/* 8027C0EC 00277D4C  11 01 00 B2 */	ps_mul f8, f1, f2
/* 8027C0F0 00277D50  10 C6 30 28 */	ps_sub f6, f6, f6
/* 8027C0F4 00277D54  11 42 51 78 */	ps_msub f10, f2, f5, f10
/* 8027C0F8 00277D58  10 E0 03 72 */	ps_mul f7, f0, f13
/* 8027C0FC 00277D5C  11 21 49 38 */	ps_msub f9, f1, f4, f9
/* 8027C100 00277D60  10 E2 3B 3A */	ps_madd f7, f2, f12, f7
/* 8027C104 00277D64  11 00 40 F8 */	ps_msub f8, f0, f3, f8
/* 8027C108 00277D68  10 E4 3A FA */	ps_madd f7, f4, f11, f7
/* 8027C10C 00277D6C  10 07 30 40 */	ps_cmpo0 cr0, f7, f6
/* 8027C110 00277D70  40 82 00 0C */	bne lbl_8027C11C
/* 8027C114 00277D74  38 60 00 00 */	li r3, 0
/* 8027C118 00277D78  4E 80 00 20 */	blr
lbl_8027C11C:
/* 8027C11C 00277D7C  EC 00 38 30 */	fres f0, f7
/* 8027C120 00277D80  10 C0 00 2A */	ps_add f6, f0, f0
/* 8027C124 00277D84  10 A0 00 32 */	ps_mul f5, f0, f0
/* 8027C128 00277D88  10 07 31 7C */	ps_nmsub f0, f7, f5, f6
/* 8027C12C 00277D8C  C0 23 00 0C */	lfs f1, 0xc(r3)
/* 8027C130 00277D90  11 AD 00 18 */	ps_muls0 f13, f13, f0
/* 8027C134 00277D94  C0 43 00 1C */	lfs f2, 0x1c(r3)
/* 8027C138 00277D98  11 8C 00 18 */	ps_muls0 f12, f12, f0
/* 8027C13C 00277D9C  C0 63 00 2C */	lfs f3, 0x2c(r3)
/* 8027C140 00277DA0  11 6B 00 18 */	ps_muls0 f11, f11, f0
/* 8027C144 00277DA4  10 AD 64 20 */	ps_merge00 f5, f13, f12
/* 8027C148 00277DA8  11 4A 00 18 */	ps_muls0 f10, f10, f0
/* 8027C14C 00277DAC  10 8D 64 E0 */	ps_merge11 f4, f13, f12
/* 8027C150 00277DB0  11 29 00 18 */	ps_muls0 f9, f9, f0
/* 8027C154 00277DB4  F0 A4 00 00 */	psq_st f5, 0(r4), 0, qr0
/* 8027C158 00277DB8  10 CD 00 72 */	ps_mul f6, f13, f1
/* 8027C15C 00277DBC  F0 84 00 10 */	psq_st f4, 16(r4), 0, qr0
/* 8027C160 00277DC0  11 08 00 18 */	ps_muls0 f8, f8, f0
/* 8027C164 00277DC4  10 CC 30 BA */	ps_madd f6, f12, f2, f6
/* 8027C168 00277DC8  F1 44 80 20 */	psq_st f10, 32(r4), 1, qr0
/* 8027C16C 00277DCC  10 CB 30 FE */	ps_nmadd f6, f11, f3, f6
/* 8027C170 00277DD0  F1 24 80 24 */	psq_st f9, 36(r4), 1, qr0
/* 8027C174 00277DD4  10 EA 00 72 */	ps_mul f7, f10, f1
/* 8027C178 00277DD8  10 AB 34 20 */	ps_merge00 f5, f11, f6
/* 8027C17C 00277DDC  F1 04 80 28 */	psq_st f8, 40(r4), 1, qr0
/* 8027C180 00277DE0  10 8B 34 E0 */	ps_merge11 f4, f11, f6
/* 8027C184 00277DE4  F0 A4 00 08 */	psq_st f5, 8(r4), 0, qr0
/* 8027C188 00277DE8  10 E9 38 BA */	ps_madd f7, f9, f2, f7
/* 8027C18C 00277DEC  F0 84 00 18 */	psq_st f4, 24(r4), 0, qr0
/* 8027C190 00277DF0  10 E8 38 FE */	ps_nmadd f7, f8, f3, f7
/* 8027C194 00277DF4  38 60 00 01 */	li r3, 1
/* 8027C198 00277DF8  F0 E4 80 2C */	psq_st f7, 44(r4), 1, qr0
/* 8027C19C 00277DFC  4E 80 00 20 */	blr

.global PSMTXInvXpose
PSMTXInvXpose:
/* 8027C1A0 00277E00  E0 03 80 00 */	psq_l f0, 0(r3), 1, qr0
/* 8027C1A4 00277E04  E0 23 00 04 */	psq_l f1, 4(r3), 0, qr0
/* 8027C1A8 00277E08  E0 43 80 10 */	psq_l f2, 16(r3), 1, qr0
/* 8027C1AC 00277E0C  10 C1 04 A0 */	ps_merge10 f6, f1, f0
/* 8027C1B0 00277E10  E0 63 00 14 */	psq_l f3, 20(r3), 0, qr0
/* 8027C1B4 00277E14  E0 83 80 20 */	psq_l f4, 32(r3), 1, qr0
/* 8027C1B8 00277E18  10 E3 14 A0 */	ps_merge10 f7, f3, f2
/* 8027C1BC 00277E1C  E0 A3 00 24 */	psq_l f5, 36(r3), 0, qr0
/* 8027C1C0 00277E20  11 63 01 B2 */	ps_mul f11, f3, f6
/* 8027C1C4 00277E24  11 05 24 A0 */	ps_merge10 f8, f5, f4
/* 8027C1C8 00277E28  11 A5 01 F2 */	ps_mul f13, f5, f7
/* 8027C1CC 00277E2C  11 61 59 F8 */	ps_msub f11, f1, f7, f11
/* 8027C1D0 00277E30  11 81 02 32 */	ps_mul f12, f1, f8
/* 8027C1D4 00277E34  11 A3 6A 38 */	ps_msub f13, f3, f8, f13
/* 8027C1D8 00277E38  11 85 61 B8 */	ps_msub f12, f5, f6, f12
/* 8027C1DC 00277E3C  11 43 01 32 */	ps_mul f10, f3, f4
/* 8027C1E0 00277E40  11 20 01 72 */	ps_mul f9, f0, f5
/* 8027C1E4 00277E44  11 01 00 B2 */	ps_mul f8, f1, f2
/* 8027C1E8 00277E48  11 42 51 78 */	ps_msub f10, f2, f5, f10
/* 8027C1EC 00277E4C  11 21 49 38 */	ps_msub f9, f1, f4, f9
/* 8027C1F0 00277E50  11 00 40 F8 */	ps_msub f8, f0, f3, f8
/* 8027C1F4 00277E54  10 E0 03 72 */	ps_mul f7, f0, f13
/* 8027C1F8 00277E58  10 21 08 28 */	ps_sub f1, f1, f1
/* 8027C1FC 00277E5C  10 E2 3B 3A */	ps_madd f7, f2, f12, f7
/* 8027C200 00277E60  10 E4 3A FA */	ps_madd f7, f4, f11, f7
/* 8027C204 00277E64  10 07 08 40 */	ps_cmpo0 cr0, f7, f1
/* 8027C208 00277E68  40 82 00 0C */	bne lbl_8027C214
/* 8027C20C 00277E6C  38 60 00 00 */	li r3, 0
/* 8027C210 00277E70  4E 80 00 20 */	blr
lbl_8027C214:
/* 8027C214 00277E74  EC 00 38 30 */	fres f0, f7
/* 8027C218 00277E78  F0 24 80 0C */	psq_st f1, 12(r4), 1, qr0
/* 8027C21C 00277E7C  10 C0 00 2A */	ps_add f6, f0, f0
/* 8027C220 00277E80  10 A0 00 32 */	ps_mul f5, f0, f0
/* 8027C224 00277E84  F0 24 80 1C */	psq_st f1, 28(r4), 1, qr0
/* 8027C228 00277E88  10 07 31 7C */	ps_nmsub f0, f7, f5, f6
/* 8027C22C 00277E8C  F0 24 80 2C */	psq_st f1, 44(r4), 1, qr0
/* 8027C230 00277E90  11 AD 00 18 */	ps_muls0 f13, f13, f0
/* 8027C234 00277E94  11 8C 00 18 */	ps_muls0 f12, f12, f0
/* 8027C238 00277E98  11 6B 00 18 */	ps_muls0 f11, f11, f0
/* 8027C23C 00277E9C  F1 A4 00 00 */	psq_st f13, 0(r4), 0, qr0
/* 8027C240 00277EA0  F1 84 00 10 */	psq_st f12, 16(r4), 0, qr0
/* 8027C244 00277EA4  11 4A 00 18 */	ps_muls0 f10, f10, f0
/* 8027C248 00277EA8  11 29 00 18 */	ps_muls0 f9, f9, f0
/* 8027C24C 00277EAC  F1 64 00 20 */	psq_st f11, 32(r4), 0, qr0
/* 8027C250 00277EB0  F1 44 80 08 */	psq_st f10, 8(r4), 1, qr0
/* 8027C254 00277EB4  11 08 00 18 */	ps_muls0 f8, f8, f0
/* 8027C258 00277EB8  38 60 00 01 */	li r3, 1
/* 8027C25C 00277EBC  F1 24 80 18 */	psq_st f9, 24(r4), 1, qr0
/* 8027C260 00277EC0  F1 04 80 28 */	psq_st f8, 40(r4), 1, qr0
/* 8027C264 00277EC4  4E 80 00 20 */	blr

.global PSMTXRotRad
PSMTXRotRad:
/* 8027C268 00277EC8  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 8027C26C 00277ECC  7C 08 02 A6 */	mflr r0
/* 8027C270 00277ED0  90 01 00 34 */	stw r0, 0x34(r1)
/* 8027C274 00277ED4  DB E1 00 20 */	stfd f31, 0x20(r1)
/* 8027C278 00277ED8  F3 E1 00 28 */	psq_st f31, 40(r1), 0, qr0
/* 8027C27C 00277EDC  DB C1 00 10 */	stfd f30, 0x10(r1)
/* 8027C280 00277EE0  F3 C1 00 18 */	psq_st f30, 24(r1), 0, qr0
/* 8027C284 00277EE4  FF C0 08 90 */	fmr f30, f1
/* 8027C288 00277EE8  93 E1 00 0C */	stw r31, 0xc(r1)
/* 8027C28C 00277EEC  7C 9F 23 78 */	mr r31, r4
/* 8027C290 00277EF0  93 C1 00 08 */	stw r30, 8(r1)
/* 8027C294 00277EF4  7C 7E 1B 78 */	mr r30, r3
/* 8027C298 00277EF8  4B F5 81 ED */	bl sin
/* 8027C29C 00277EFC  FF E0 08 18 */	frsp f31, f1
/* 8027C2A0 00277F00  FC 20 F0 90 */	fmr f1, f30
/* 8027C2A4 00277F04  4B F5 7D D5 */	bl cos
/* 8027C2A8 00277F08  FC 40 08 18 */	frsp f2, f1
/* 8027C2AC 00277F0C  7F C3 F3 78 */	mr r3, r30
/* 8027C2B0 00277F10  FC 20 F8 90 */	fmr f1, f31
/* 8027C2B4 00277F14  7F E4 07 74 */	extsb r4, r31
/* 8027C2B8 00277F18  48 00 00 2D */	bl PSMTXRotTrig
/* 8027C2BC 00277F1C  E3 E1 00 28 */	psq_l f31, 40(r1), 0, qr0
/* 8027C2C0 00277F20  CB E1 00 20 */	lfd f31, 0x20(r1)
/* 8027C2C4 00277F24  E3 C1 00 18 */	psq_l f30, 24(r1), 0, qr0
/* 8027C2C8 00277F28  CB C1 00 10 */	lfd f30, 0x10(r1)
/* 8027C2CC 00277F2C  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 8027C2D0 00277F30  80 01 00 34 */	lwz r0, 0x34(r1)
/* 8027C2D4 00277F34  83 C1 00 08 */	lwz r30, 8(r1)
/* 8027C2D8 00277F38  7C 08 03 A6 */	mtlr r0
/* 8027C2DC 00277F3C  38 21 00 30 */	addi r1, r1, 0x30
/* 8027C2E0 00277F40  4E 80 00 20 */	blr

.global PSMTXRotTrig
PSMTXRotTrig:
/* 8027C2E4 00277F44  FC A0 08 18 */	frsp f5, f1
/* 8027C2E8 00277F48  60 80 00 20 */	ori r0, r4, 0x20
/* 8027C2EC 00277F4C  FC 80 10 18 */	frsp f4, f2
/* 8027C2F0 00277F50  28 00 00 78 */	cmplwi r0, 0x78
/* 8027C2F4 00277F54  C0 02 A0 74 */	lfs f0, lbl_80642674-_SDA2_BASE_(r2)
/* 8027C2F8 00277F58  10 40 28 50 */	ps_neg f2, f5
/* 8027C2FC 00277F5C  C0 22 A0 70 */	lfs f1, lbl_80642670-_SDA2_BASE_(r2)
/* 8027C300 00277F60  41 82 00 18 */	beq lbl_8027C318
/* 8027C304 00277F64  28 00 00 79 */	cmplwi r0, 0x79
/* 8027C308 00277F68  41 82 00 38 */	beq lbl_8027C340
/* 8027C30C 00277F6C  28 00 00 7A */	cmplwi r0, 0x7a
/* 8027C310 00277F70  41 82 00 5C */	beq lbl_8027C36C
/* 8027C314 00277F74  4E 80 00 20 */	blr
lbl_8027C318:
/* 8027C318 00277F78  10 65 24 20 */	ps_merge00 f3, f5, f4
/* 8027C31C 00277F7C  F0 23 80 00 */	psq_st f1, 0(r3), 1, qr0
/* 8027C320 00277F80  10 24 14 20 */	ps_merge00 f1, f4, f2
/* 8027C324 00277F84  F0 03 00 04 */	psq_st f0, 4(r3), 0, qr0
/* 8027C328 00277F88  F0 03 00 0C */	psq_st f0, 12(r3), 0, qr0
/* 8027C32C 00277F8C  F0 03 00 1C */	psq_st f0, 28(r3), 0, qr0
/* 8027C330 00277F90  F0 03 80 2C */	psq_st f0, 44(r3), 1, qr0
/* 8027C334 00277F94  F0 63 00 24 */	psq_st f3, 36(r3), 0, qr0
/* 8027C338 00277F98  F0 23 00 14 */	psq_st f1, 20(r3), 0, qr0
/* 8027C33C 00277F9C  4E 80 00 20 */	blr
lbl_8027C340:
/* 8027C340 00277FA0  10 64 04 20 */	ps_merge00 f3, f4, f0
/* 8027C344 00277FA4  F0 03 00 18 */	psq_st f0, 24(r3), 0, qr0
/* 8027C348 00277FA8  10 20 0C 20 */	ps_merge00 f1, f0, f1
/* 8027C34C 00277FAC  10 42 04 20 */	ps_merge00 f2, f2, f0
/* 8027C350 00277FB0  10 05 04 20 */	ps_merge00 f0, f5, f0
/* 8027C354 00277FB4  F0 63 00 00 */	psq_st f3, 0(r3), 0, qr0
/* 8027C358 00277FB8  F0 63 00 28 */	psq_st f3, 40(r3), 0, qr0
/* 8027C35C 00277FBC  F0 23 00 10 */	psq_st f1, 16(r3), 0, qr0
/* 8027C360 00277FC0  F0 03 00 08 */	psq_st f0, 8(r3), 0, qr0
/* 8027C364 00277FC4  F0 43 00 20 */	psq_st f2, 32(r3), 0, qr0
/* 8027C368 00277FC8  4E 80 00 20 */	blr
lbl_8027C36C:
/* 8027C36C 00277FCC  10 65 24 20 */	ps_merge00 f3, f5, f4
/* 8027C370 00277FD0  F0 03 00 08 */	psq_st f0, 8(r3), 0, qr0
/* 8027C374 00277FD4  10 44 14 20 */	ps_merge00 f2, f4, f2
/* 8027C378 00277FD8  10 21 04 20 */	ps_merge00 f1, f1, f0
/* 8027C37C 00277FDC  F0 03 00 18 */	psq_st f0, 24(r3), 0, qr0
/* 8027C380 00277FE0  F0 03 00 20 */	psq_st f0, 32(r3), 0, qr0
/* 8027C384 00277FE4  F0 63 00 10 */	psq_st f3, 16(r3), 0, qr0
/* 8027C388 00277FE8  F0 43 00 00 */	psq_st f2, 0(r3), 0, qr0
/* 8027C38C 00277FEC  F0 23 00 28 */	psq_st f1, 40(r3), 0, qr0
/* 8027C390 00277FF0  4E 80 00 20 */	blr

.global __PSMTXRotAxisRadInternal
__PSMTXRotAxisRadInternal:
/* 8027C394 00277FF4  E0 64 00 00 */	psq_l f3, 0(r4), 0, qr0
/* 8027C398 00277FF8  FD 60 10 18 */	frsp f11, f2
/* 8027C39C 00277FFC  C1 42 A0 78 */	lfs f10, lbl_80642678-_SDA2_BASE_(r2)
/* 8027C3A0 00278000  FD 80 08 18 */	frsp f12, f1
/* 8027C3A4 00278004  10 83 00 F2 */	ps_mul f4, f3, f3
/* 8027C3A8 00278008  C0 44 00 08 */	lfs f2, 8(r4)
/* 8027C3AC 0027800C  ED 0A 50 2A */	fadds f8, f10, f10
/* 8027C3B0 00278010  C1 22 A0 7C */	lfs f9, lbl_8064267C-_SDA2_BASE_(r2)
/* 8027C3B4 00278014  EC 2A 50 28 */	fsubs f1, f10, f10
/* 8027C3B8 00278018  10 A2 20 BA */	ps_madd f5, f2, f2, f4
/* 8027C3BC 0027801C  EC 08 58 28 */	fsubs f0, f8, f11
/* 8027C3C0 00278020  11 6B 5C 20 */	ps_merge00 f11, f11, f11
/* 8027C3C4 00278024  10 C5 20 94 */	ps_sum0 f6, f5, f2, f4
/* 8027C3C8 00278028  FC E0 30 34 */	frsqrte f7, f6
/* 8027C3CC 0027802C  EC 87 01 F2 */	fmuls f4, f7, f7
/* 8027C3D0 00278030  EC A7 02 B2 */	fmuls f5, f7, f10
/* 8027C3D4 00278034  EC 84 49 BC */	fnmsubs f4, f4, f6, f9
/* 8027C3D8 00278038  EC E4 01 72 */	fmuls f7, f4, f5
/* 8027C3DC 0027803C  10 63 01 D8 */	ps_muls0 f3, f3, f7
/* 8027C3E0 00278040  10 42 01 D8 */	ps_muls0 f2, f2, f7
/* 8027C3E4 00278044  10 C3 00 18 */	ps_muls0 f6, f3, f0
/* 8027C3E8 00278048  10 E2 00 18 */	ps_muls0 f7, f2, f0
/* 8027C3EC 0027804C  11 43 03 18 */	ps_muls0 f10, f3, f12
/* 8027C3F0 00278050  10 A6 00 DA */	ps_muls1 f5, f6, f3
/* 8027C3F4 00278054  10 86 00 D8 */	ps_muls0 f4, f6, f3
/* 8027C3F8 00278058  10 C6 00 98 */	ps_muls0 f6, f6, f2
/* 8027C3FC 0027805C  EC 02 2B 3C */	fnmsubs f0, f2, f12, f5
/* 8027C400 00278060  10 60 50 50 */	ps_neg f3, f10
/* 8027C404 00278064  ED 02 2B 3A */	fmadds f8, f2, f12, f5
/* 8027C408 00278068  10 84 58 14 */	ps_sum0 f4, f4, f0, f11
/* 8027C40C 0027806C  10 03 30 54 */	ps_sum0 f0, f3, f1, f6
/* 8027C410 00278070  10 E7 00 98 */	ps_muls0 f7, f7, f2
/* 8027C414 00278074  11 26 50 54 */	ps_sum0 f9, f6, f1, f10
/* 8027C418 00278078  F0 83 00 00 */	psq_st f4, 0(r3), 0, qr0
/* 8027C41C 0027807C  10 66 19 94 */	ps_sum0 f3, f6, f6, f3
/* 8027C420 00278080  10 AB 2A 16 */	ps_sum1 f5, f11, f8, f5
/* 8027C424 00278084  F0 03 00 18 */	psq_st f0, 24(r3), 0, qr0
/* 8027C428 00278088  10 E7 58 54 */	ps_sum0 f7, f7, f1, f11
/* 8027C42C 0027808C  10 CA 30 D6 */	ps_sum1 f6, f10, f3, f6
/* 8027C430 00278090  F1 23 00 08 */	psq_st f9, 8(r3), 0, qr0
/* 8027C434 00278094  F0 A3 00 10 */	psq_st f5, 16(r3), 0, qr0
/* 8027C438 00278098  F0 C3 00 20 */	psq_st f6, 32(r3), 0, qr0
/* 8027C43C 0027809C  F0 E3 00 28 */	psq_st f7, 40(r3), 0, qr0
/* 8027C440 002780A0  4E 80 00 20 */	blr

.global PSMTXRotAxisRad
PSMTXRotAxisRad:
/* 8027C444 002780A4  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 8027C448 002780A8  7C 08 02 A6 */	mflr r0
/* 8027C44C 002780AC  90 01 00 34 */	stw r0, 0x34(r1)
/* 8027C450 002780B0  DB E1 00 20 */	stfd f31, 0x20(r1)
/* 8027C454 002780B4  F3 E1 00 28 */	psq_st f31, 40(r1), 0, qr0
/* 8027C458 002780B8  DB C1 00 10 */	stfd f30, 0x10(r1)
/* 8027C45C 002780BC  F3 C1 00 18 */	psq_st f30, 24(r1), 0, qr0
/* 8027C460 002780C0  FF C0 08 90 */	fmr f30, f1
/* 8027C464 002780C4  93 E1 00 0C */	stw r31, 0xc(r1)
/* 8027C468 002780C8  7C 9F 23 78 */	mr r31, r4
/* 8027C46C 002780CC  93 C1 00 08 */	stw r30, 8(r1)
/* 8027C470 002780D0  7C 7E 1B 78 */	mr r30, r3
/* 8027C474 002780D4  4B F5 80 11 */	bl sin
/* 8027C478 002780D8  FF E0 08 18 */	frsp f31, f1
/* 8027C47C 002780DC  FC 20 F0 90 */	fmr f1, f30
/* 8027C480 002780E0  4B F5 7B F9 */	bl cos
/* 8027C484 002780E4  FC 40 08 18 */	frsp f2, f1
/* 8027C488 002780E8  7F C3 F3 78 */	mr r3, r30
/* 8027C48C 002780EC  FC 20 F8 90 */	fmr f1, f31
/* 8027C490 002780F0  7F E4 FB 78 */	mr r4, r31
/* 8027C494 002780F4  4B FF FF 01 */	bl __PSMTXRotAxisRadInternal
/* 8027C498 002780F8  E3 E1 00 28 */	psq_l f31, 40(r1), 0, qr0
/* 8027C49C 002780FC  CB E1 00 20 */	lfd f31, 0x20(r1)
/* 8027C4A0 00278100  E3 C1 00 18 */	psq_l f30, 24(r1), 0, qr0
/* 8027C4A4 00278104  CB C1 00 10 */	lfd f30, 0x10(r1)
/* 8027C4A8 00278108  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 8027C4AC 0027810C  80 01 00 34 */	lwz r0, 0x34(r1)
/* 8027C4B0 00278110  83 C1 00 08 */	lwz r30, 8(r1)
/* 8027C4B4 00278114  7C 08 03 A6 */	mtlr r0
/* 8027C4B8 00278118  38 21 00 30 */	addi r1, r1, 0x30
/* 8027C4BC 0027811C  4E 80 00 20 */	blr

.global PSMTXTrans
PSMTXTrans:
/* 8027C4C0 00278120  C0 02 A0 74 */	lfs f0, lbl_80642674-_SDA2_BASE_(r2)
/* 8027C4C4 00278124  C0 82 A0 70 */	lfs f4, lbl_80642670-_SDA2_BASE_(r2)
/* 8027C4C8 00278128  D0 23 00 0C */	stfs f1, 0xc(r3)
/* 8027C4CC 0027812C  D0 43 00 1C */	stfs f2, 0x1c(r3)
/* 8027C4D0 00278130  F0 03 00 04 */	psq_st f0, 4(r3), 0, qr0
/* 8027C4D4 00278134  F0 03 00 20 */	psq_st f0, 32(r3), 0, qr0
/* 8027C4D8 00278138  D0 03 00 10 */	stfs f0, 0x10(r3)
/* 8027C4DC 0027813C  D0 83 00 14 */	stfs f4, 0x14(r3)
/* 8027C4E0 00278140  D0 03 00 18 */	stfs f0, 0x18(r3)
/* 8027C4E4 00278144  D0 83 00 28 */	stfs f4, 0x28(r3)
/* 8027C4E8 00278148  D0 63 00 2C */	stfs f3, 0x2c(r3)
/* 8027C4EC 0027814C  D0 83 00 00 */	stfs f4, 0(r3)
/* 8027C4F0 00278150  4E 80 00 20 */	blr

.global PSMTXTransApply
PSMTXTransApply:
/* 8027C4F4 00278154  E0 83 00 00 */	psq_l f4, 0(r3), 0, qr0
/* 8027C4F8 00278158  FC 20 08 18 */	frsp f1, f1
/* 8027C4FC 0027815C  E0 A3 00 08 */	psq_l f5, 8(r3), 0, qr0
/* 8027C500 00278160  FC 40 10 18 */	frsp f2, f2
/* 8027C504 00278164  E0 E3 00 18 */	psq_l f7, 24(r3), 0, qr0
/* 8027C508 00278168  FC 60 18 18 */	frsp f3, f3
/* 8027C50C 0027816C  E1 03 00 28 */	psq_l f8, 40(r3), 0, qr0
/* 8027C510 00278170  F0 84 00 00 */	psq_st f4, 0(r4), 0, qr0
/* 8027C514 00278174  10 A1 29 56 */	ps_sum1 f5, f1, f5, f5
/* 8027C518 00278178  E0 C3 00 10 */	psq_l f6, 16(r3), 0, qr0
/* 8027C51C 0027817C  F0 A4 00 08 */	psq_st f5, 8(r4), 0, qr0
/* 8027C520 00278180  10 E2 39 D6 */	ps_sum1 f7, f2, f7, f7
/* 8027C524 00278184  E1 23 00 20 */	psq_l f9, 32(r3), 0, qr0
/* 8027C528 00278188  F0 C4 00 10 */	psq_st f6, 16(r4), 0, qr0
/* 8027C52C 0027818C  11 03 42 16 */	ps_sum1 f8, f3, f8, f8
/* 8027C530 00278190  F0 E4 00 18 */	psq_st f7, 24(r4), 0, qr0
/* 8027C534 00278194  F1 24 00 20 */	psq_st f9, 32(r4), 0, qr0
/* 8027C538 00278198  F1 04 00 28 */	psq_st f8, 40(r4), 0, qr0
/* 8027C53C 0027819C  4E 80 00 20 */	blr

.global PSMTXScale
PSMTXScale:
/* 8027C540 002781A0  C0 02 A0 74 */	lfs f0, lbl_80642674-_SDA2_BASE_(r2)
/* 8027C544 002781A4  D0 23 00 00 */	stfs f1, 0(r3)
/* 8027C548 002781A8  F0 03 00 04 */	psq_st f0, 4(r3), 0, qr0
/* 8027C54C 002781AC  F0 03 00 0C */	psq_st f0, 12(r3), 0, qr0
/* 8027C550 002781B0  D0 43 00 14 */	stfs f2, 0x14(r3)
/* 8027C554 002781B4  F0 03 00 18 */	psq_st f0, 24(r3), 0, qr0
/* 8027C558 002781B8  F0 03 00 20 */	psq_st f0, 32(r3), 0, qr0
/* 8027C55C 002781BC  D0 63 00 28 */	stfs f3, 0x28(r3)
/* 8027C560 002781C0  D0 03 00 2C */	stfs f0, 0x2c(r3)
/* 8027C564 002781C4  4E 80 00 20 */	blr

.global PSMTXScaleApply
PSMTXScaleApply:
/* 8027C568 002781C8  FC 20 08 18 */	frsp f1, f1
/* 8027C56C 002781CC  E0 83 00 00 */	psq_l f4, 0(r3), 0, qr0
/* 8027C570 002781D0  FC 40 10 18 */	frsp f2, f2
/* 8027C574 002781D4  E0 A3 00 08 */	psq_l f5, 8(r3), 0, qr0
/* 8027C578 002781D8  FC 60 18 18 */	frsp f3, f3
/* 8027C57C 002781DC  10 84 00 58 */	ps_muls0 f4, f4, f1
/* 8027C580 002781E0  E0 C3 00 10 */	psq_l f6, 16(r3), 0, qr0
/* 8027C584 002781E4  10 A5 00 58 */	ps_muls0 f5, f5, f1
/* 8027C588 002781E8  E0 E3 00 18 */	psq_l f7, 24(r3), 0, qr0
/* 8027C58C 002781EC  10 C6 00 98 */	ps_muls0 f6, f6, f2
/* 8027C590 002781F0  E1 03 00 20 */	psq_l f8, 32(r3), 0, qr0
/* 8027C594 002781F4  F0 84 00 00 */	psq_st f4, 0(r4), 0, qr0
/* 8027C598 002781F8  10 E7 00 98 */	ps_muls0 f7, f7, f2
/* 8027C59C 002781FC  E0 43 00 28 */	psq_l f2, 40(r3), 0, qr0
/* 8027C5A0 00278200  F0 A4 00 08 */	psq_st f5, 8(r4), 0, qr0
/* 8027C5A4 00278204  11 08 00 D8 */	ps_muls0 f8, f8, f3
/* 8027C5A8 00278208  F0 C4 00 10 */	psq_st f6, 16(r4), 0, qr0
/* 8027C5AC 0027820C  10 42 00 D8 */	ps_muls0 f2, f2, f3
/* 8027C5B0 00278210  F0 E4 00 18 */	psq_st f7, 24(r4), 0, qr0
/* 8027C5B4 00278214  F1 04 00 20 */	psq_st f8, 32(r4), 0, qr0
/* 8027C5B8 00278218  F0 44 00 28 */	psq_st f2, 40(r4), 0, qr0
/* 8027C5BC 0027821C  4E 80 00 20 */	blr

.global PSMTXQuat
PSMTXQuat:
/* 8027C5C0 00278220  E0 84 00 00 */	psq_l f4, 0(r4), 0, qr0
/* 8027C5C4 00278224  E0 A4 00 08 */	psq_l f5, 8(r4), 0, qr0
/* 8027C5C8 00278228  10 C4 01 32 */	ps_mul f6, f4, f4
/* 8027C5CC 0027822C  C0 22 A0 70 */	lfs f1, lbl_80642670-_SDA2_BASE_(r2)
/* 8027C5D0 00278230  11 24 24 A0 */	ps_merge10 f9, f4, f4
/* 8027C5D4 00278234  EC 01 08 28 */	fsubs f0, f1, f1
/* 8027C5D8 00278238  11 05 31 7A */	ps_madd f8, f5, f5, f6
/* 8027C5DC 0027823C  11 45 01 5A */	ps_muls1 f10, f5, f5
/* 8027C5E0 00278240  EC 41 08 2A */	fadds f2, f1, f1
/* 8027C5E4 00278244  F0 03 80 0C */	psq_st f0, 12(r3), 1, qr0
/* 8027C5E8 00278248  10 68 42 14 */	ps_sum0 f3, f8, f8, f8
/* 8027C5EC 0027824C  10 E5 01 72 */	ps_mul f7, f5, f5
/* 8027C5F0 00278250  F0 03 80 2C */	psq_st f0, 44(r3), 1, qr0
/* 8027C5F4 00278254  11 84 52 7A */	ps_madd f12, f4, f9, f10
/* 8027C5F8 00278258  ED A0 18 30 */	fres f13, f3
/* 8027C5FC 0027825C  10 63 13 7C */	ps_nmsub f3, f3, f13, f2
/* 8027C600 00278260  11 69 01 5A */	ps_muls1 f11, f9, f5
/* 8027C604 00278264  11 44 52 78 */	ps_msub f10, f4, f9, f10
/* 8027C608 00278268  10 6D 00 F2 */	ps_mul f3, f13, f3
/* 8027C60C 0027826C  11 24 59 5C */	ps_madds0 f9, f4, f5, f11
/* 8027C610 00278270  11 07 32 16 */	ps_sum1 f8, f7, f8, f6
/* 8027C614 00278274  EC 63 00 B2 */	fmuls f3, f3, f2
/* 8027C618 00278278  11 6B 48 BC */	ps_nmsub f11, f11, f2, f9
/* 8027C61C 0027827C  10 C6 31 94 */	ps_sum0 f6, f6, f6, f6
/* 8027C620 00278280  11 29 00 F2 */	ps_mul f9, f9, f3
/* 8027C624 00278284  11 6B 00 F2 */	ps_mul f11, f11, f3
/* 8027C628 00278288  11 08 08 FC */	ps_nmsub f8, f8, f3, f1
/* 8027C62C 0027828C  11 8C 00 F2 */	ps_mul f12, f12, f3
/* 8027C630 00278290  F1 23 80 08 */	psq_st f9, 8(r3), 1, qr0
/* 8027C634 00278294  11 4A 00 F2 */	ps_mul f10, f10, f3
/* 8027C638 00278298  10 EB 04 A0 */	ps_merge10 f7, f11, f0
/* 8027C63C 0027829C  10 AC 44 20 */	ps_merge00 f5, f12, f8
/* 8027C640 002782A0  10 88 54 A0 */	ps_merge10 f4, f8, f10
/* 8027C644 002782A4  11 AB 4C 60 */	ps_merge01 f13, f11, f9
/* 8027C648 002782A8  F0 E3 00 18 */	psq_st f7, 24(r3), 0, qr0
/* 8027C64C 002782AC  10 C6 08 FC */	ps_nmsub f6, f6, f3, f1
/* 8027C650 002782B0  F0 A3 00 10 */	psq_st f5, 16(r3), 0, qr0
/* 8027C654 002782B4  F0 C3 80 28 */	psq_st f6, 40(r3), 1, qr0
/* 8027C658 002782B8  F0 83 00 00 */	psq_st f4, 0(r3), 0, qr0
/* 8027C65C 002782BC  F1 A3 00 20 */	psq_st f13, 32(r3), 0, qr0
/* 8027C660 002782C0  4E 80 00 20 */	blr

.global C_MTXLookAt
C_MTXLookAt:
/* 8027C664 002782C4  94 21 FF C0 */	stwu r1, -0x40(r1)
/* 8027C668 002782C8  7C 08 02 A6 */	mflr r0
/* 8027C66C 002782CC  C0 24 00 00 */	lfs f1, 0(r4)
/* 8027C670 002782D0  90 01 00 44 */	stw r0, 0x44(r1)
/* 8027C674 002782D4  C0 06 00 00 */	lfs f0, 0(r6)
/* 8027C678 002782D8  93 E1 00 3C */	stw r31, 0x3c(r1)
/* 8027C67C 002782DC  7C BF 2B 78 */	mr r31, r5
/* 8027C680 002782E0  EC 81 00 28 */	fsubs f4, f1, f0
/* 8027C684 002782E4  C0 64 00 04 */	lfs f3, 4(r4)
/* 8027C688 002782E8  93 C1 00 38 */	stw r30, 0x38(r1)
/* 8027C68C 002782EC  7C 9E 23 78 */	mr r30, r4
/* 8027C690 002782F0  C0 46 00 04 */	lfs f2, 4(r6)
/* 8027C694 002782F4  93 A1 00 34 */	stw r29, 0x34(r1)
/* 8027C698 002782F8  EC 43 10 28 */	fsubs f2, f3, f2
/* 8027C69C 002782FC  C0 24 00 08 */	lfs f1, 8(r4)
/* 8027C6A0 00278300  C0 06 00 08 */	lfs f0, 8(r6)
/* 8027C6A4 00278304  7C 7D 1B 78 */	mr r29, r3
/* 8027C6A8 00278308  38 61 00 20 */	addi r3, r1, 0x20
/* 8027C6AC 0027830C  D0 81 00 20 */	stfs f4, 0x20(r1)
/* 8027C6B0 00278310  EC 01 00 28 */	fsubs f0, f1, f0
/* 8027C6B4 00278314  D0 41 00 24 */	stfs f2, 0x24(r1)
/* 8027C6B8 00278318  7C 64 1B 78 */	mr r4, r3
/* 8027C6BC 0027831C  D0 01 00 28 */	stfs f0, 0x28(r1)
/* 8027C6C0 00278320  48 00 06 69 */	bl PSVECNormalize
/* 8027C6C4 00278324  7F E3 FB 78 */	mr r3, r31
/* 8027C6C8 00278328  38 81 00 20 */	addi r4, r1, 0x20
/* 8027C6CC 0027832C  38 A1 00 14 */	addi r5, r1, 0x14
/* 8027C6D0 00278330  48 00 07 19 */	bl PSVECCrossProduct
/* 8027C6D4 00278334  38 61 00 14 */	addi r3, r1, 0x14
/* 8027C6D8 00278338  7C 64 1B 78 */	mr r4, r3
/* 8027C6DC 0027833C  48 00 06 4D */	bl PSVECNormalize
/* 8027C6E0 00278340  38 61 00 20 */	addi r3, r1, 0x20
/* 8027C6E4 00278344  38 81 00 14 */	addi r4, r1, 0x14
/* 8027C6E8 00278348  38 A1 00 08 */	addi r5, r1, 8
/* 8027C6EC 0027834C  48 00 06 FD */	bl PSVECCrossProduct
/* 8027C6F0 00278350  C0 01 00 14 */	lfs f0, 0x14(r1)
/* 8027C6F4 00278354  C0 9E 00 00 */	lfs f4, 0(r30)
/* 8027C6F8 00278358  D0 1D 00 00 */	stfs f0, 0(r29)
/* 8027C6FC 0027835C  C0 7E 00 04 */	lfs f3, 4(r30)
/* 8027C700 00278360  C0 01 00 18 */	lfs f0, 0x18(r1)
/* 8027C704 00278364  C0 BE 00 08 */	lfs f5, 8(r30)
/* 8027C708 00278368  D0 1D 00 04 */	stfs f0, 4(r29)
/* 8027C70C 0027836C  C0 01 00 1C */	lfs f0, 0x1c(r1)
/* 8027C710 00278370  D0 1D 00 08 */	stfs f0, 8(r29)
/* 8027C714 00278374  C0 21 00 14 */	lfs f1, 0x14(r1)
/* 8027C718 00278378  C0 01 00 18 */	lfs f0, 0x18(r1)
/* 8027C71C 0027837C  EC 24 00 72 */	fmuls f1, f4, f1
/* 8027C720 00278380  C0 41 00 1C */	lfs f2, 0x1c(r1)
/* 8027C724 00278384  EC 03 00 32 */	fmuls f0, f3, f0
/* 8027C728 00278388  EC 45 00 B2 */	fmuls f2, f5, f2
/* 8027C72C 0027838C  EC 01 00 2A */	fadds f0, f1, f0
/* 8027C730 00278390  EC 02 00 2A */	fadds f0, f2, f0
/* 8027C734 00278394  FC 00 00 50 */	fneg f0, f0
/* 8027C738 00278398  D0 1D 00 0C */	stfs f0, 0xc(r29)
/* 8027C73C 0027839C  C0 01 00 08 */	lfs f0, 8(r1)
/* 8027C740 002783A0  D0 1D 00 10 */	stfs f0, 0x10(r29)
/* 8027C744 002783A4  C0 01 00 0C */	lfs f0, 0xc(r1)
/* 8027C748 002783A8  D0 1D 00 14 */	stfs f0, 0x14(r29)
/* 8027C74C 002783AC  C0 01 00 10 */	lfs f0, 0x10(r1)
/* 8027C750 002783B0  D0 1D 00 18 */	stfs f0, 0x18(r29)
/* 8027C754 002783B4  C0 21 00 08 */	lfs f1, 8(r1)
/* 8027C758 002783B8  C0 01 00 0C */	lfs f0, 0xc(r1)
/* 8027C75C 002783BC  C0 41 00 10 */	lfs f2, 0x10(r1)
/* 8027C760 002783C0  EC 24 00 72 */	fmuls f1, f4, f1
/* 8027C764 002783C4  EC 03 00 32 */	fmuls f0, f3, f0
/* 8027C768 002783C8  EC 45 00 B2 */	fmuls f2, f5, f2
/* 8027C76C 002783CC  EC 01 00 2A */	fadds f0, f1, f0
/* 8027C770 002783D0  EC 02 00 2A */	fadds f0, f2, f0
/* 8027C774 002783D4  FC 00 00 50 */	fneg f0, f0
/* 8027C778 002783D8  D0 1D 00 1C */	stfs f0, 0x1c(r29)
/* 8027C77C 002783DC  C0 01 00 20 */	lfs f0, 0x20(r1)
/* 8027C780 002783E0  D0 1D 00 20 */	stfs f0, 0x20(r29)
/* 8027C784 002783E4  C0 01 00 24 */	lfs f0, 0x24(r1)
/* 8027C788 002783E8  D0 1D 00 24 */	stfs f0, 0x24(r29)
/* 8027C78C 002783EC  C0 01 00 28 */	lfs f0, 0x28(r1)
/* 8027C790 002783F0  D0 1D 00 28 */	stfs f0, 0x28(r29)
/* 8027C794 002783F4  C0 21 00 20 */	lfs f1, 0x20(r1)
/* 8027C798 002783F8  C0 01 00 24 */	lfs f0, 0x24(r1)
/* 8027C79C 002783FC  C0 41 00 28 */	lfs f2, 0x28(r1)
/* 8027C7A0 00278400  EC 24 00 72 */	fmuls f1, f4, f1
/* 8027C7A4 00278404  EC 03 00 32 */	fmuls f0, f3, f0
/* 8027C7A8 00278408  EC 45 00 B2 */	fmuls f2, f5, f2
/* 8027C7AC 0027840C  EC 01 00 2A */	fadds f0, f1, f0
/* 8027C7B0 00278410  EC 02 00 2A */	fadds f0, f2, f0
/* 8027C7B4 00278414  FC 00 00 50 */	fneg f0, f0
/* 8027C7B8 00278418  D0 1D 00 2C */	stfs f0, 0x2c(r29)
/* 8027C7BC 0027841C  83 E1 00 3C */	lwz r31, 0x3c(r1)
/* 8027C7C0 00278420  83 C1 00 38 */	lwz r30, 0x38(r1)
/* 8027C7C4 00278424  83 A1 00 34 */	lwz r29, 0x34(r1)
/* 8027C7C8 00278428  80 01 00 44 */	lwz r0, 0x44(r1)
/* 8027C7CC 0027842C  7C 08 03 A6 */	mtlr r0
/* 8027C7D0 00278430  38 21 00 40 */	addi r1, r1, 0x40
/* 8027C7D4 00278434  4E 80 00 20 */	blr

.global C_MTXLightFrustum
C_MTXLightFrustum:
/* 8027C7D8 00278438  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8027C7DC 0027843C  DB E1 00 10 */	stfd f31, 0x10(r1)
/* 8027C7E0 00278440  F3 E1 00 18 */	psq_st f31, 24(r1), 0, qr0
/* 8027C7E4 00278444  EC 04 18 28 */	fsubs f0, f4, f3
/* 8027C7E8 00278448  C1 42 A0 74 */	lfs f10, lbl_80642674-_SDA2_BASE_(r2)
/* 8027C7EC 0027844C  C1 82 A0 70 */	lfs f12, lbl_80642670-_SDA2_BASE_(r2)
/* 8027C7F0 00278450  ED 21 10 28 */	fsubs f9, f1, f2
/* 8027C7F4 00278454  C1 62 A0 80 */	lfs f11, lbl_80642680-_SDA2_BASE_(r2)
/* 8027C7F8 00278458  EC 64 18 2A */	fadds f3, f4, f3
/* 8027C7FC 0027845C  ED AC 00 24 */	fdivs f13, f12, f0
/* 8027C800 00278460  C0 02 A0 84 */	lfs f0, lbl_80642684-_SDA2_BASE_(r2)
/* 8027C804 00278464  C3 E1 00 28 */	lfs f31, 0x28(r1)
/* 8027C808 00278468  D0 03 00 28 */	stfs f0, 0x28(r3)
/* 8027C80C 0027846C  D1 43 00 04 */	stfs f10, 4(r3)
/* 8027C810 00278470  D1 43 00 0C */	stfs f10, 0xc(r3)
/* 8027C814 00278474  EC 8B 01 72 */	fmuls f4, f11, f5
/* 8027C818 00278478  D1 43 00 10 */	stfs f10, 0x10(r3)
/* 8027C81C 0027847C  EC 01 10 2A */	fadds f0, f1, f2
/* 8027C820 00278480  EC 2D 00 F2 */	fmuls f1, f13, f3
/* 8027C824 00278484  D1 43 00 1C */	stfs f10, 0x1c(r3)
/* 8027C828 00278488  EC AC 48 24 */	fdivs f5, f12, f9
/* 8027C82C 0027848C  D1 43 00 20 */	stfs f10, 0x20(r3)
/* 8027C830 00278490  D1 43 00 24 */	stfs f10, 0x24(r3)
/* 8027C834 00278494  D1 43 00 2C */	stfs f10, 0x2c(r3)
/* 8027C838 00278498  EC 46 00 72 */	fmuls f2, f6, f1
/* 8027C83C 0027849C  EC 05 00 32 */	fmuls f0, f5, f0
/* 8027C840 002784A0  EC 64 03 72 */	fmuls f3, f4, f13
/* 8027C844 002784A4  EC 24 01 72 */	fmuls f1, f4, f5
/* 8027C848 002784A8  EC 07 00 32 */	fmuls f0, f7, f0
/* 8027C84C 002784AC  EC 66 00 F2 */	fmuls f3, f6, f3
/* 8027C850 002784B0  EC 42 40 28 */	fsubs f2, f2, f8
/* 8027C854 002784B4  EC 27 00 72 */	fmuls f1, f7, f1
/* 8027C858 002784B8  EC 00 F8 28 */	fsubs f0, f0, f31
/* 8027C85C 002784BC  D0 63 00 00 */	stfs f3, 0(r3)
/* 8027C860 002784C0  D0 43 00 08 */	stfs f2, 8(r3)
/* 8027C864 002784C4  D0 23 00 14 */	stfs f1, 0x14(r3)
/* 8027C868 002784C8  D0 03 00 18 */	stfs f0, 0x18(r3)
/* 8027C86C 002784CC  E3 E1 00 18 */	psq_l f31, 24(r1), 0, qr0
/* 8027C870 002784D0  CB E1 00 10 */	lfd f31, 0x10(r1)
/* 8027C874 002784D4  38 21 00 20 */	addi r1, r1, 0x20
/* 8027C878 002784D8  4E 80 00 20 */	blr

.global C_MTXLightPerspective
C_MTXLightPerspective:
/* 8027C87C 002784DC  94 21 FF A0 */	stwu r1, -0x60(r1)
/* 8027C880 002784E0  7C 08 02 A6 */	mflr r0
/* 8027C884 002784E4  90 01 00 64 */	stw r0, 0x64(r1)
/* 8027C888 002784E8  DB E1 00 50 */	stfd f31, 0x50(r1)
/* 8027C88C 002784EC  F3 E1 00 58 */	psq_st f31, 88(r1), 0, qr0
/* 8027C890 002784F0  DB C1 00 40 */	stfd f30, 0x40(r1)
/* 8027C894 002784F4  F3 C1 00 48 */	psq_st f30, 72(r1), 0, qr0
/* 8027C898 002784F8  DB A1 00 30 */	stfd f29, 0x30(r1)
/* 8027C89C 002784FC  F3 A1 00 38 */	psq_st f29, 56(r1), 0, qr0
/* 8027C8A0 00278500  DB 81 00 20 */	stfd f28, 0x20(r1)
/* 8027C8A4 00278504  F3 81 00 28 */	psq_st f28, 40(r1), 0, qr0
/* 8027C8A8 00278508  DB 61 00 10 */	stfd f27, 0x10(r1)
/* 8027C8AC 0027850C  F3 61 00 18 */	psq_st f27, 24(r1), 0, qr0
/* 8027C8B0 00278510  FF 60 10 90 */	fmr f27, f2
/* 8027C8B4 00278514  C0 E2 A0 78 */	lfs f7, lbl_80642678-_SDA2_BASE_(r2)
/* 8027C8B8 00278518  FF 80 18 90 */	fmr f28, f3
/* 8027C8BC 0027851C  93 E1 00 0C */	stw r31, 0xc(r1)
/* 8027C8C0 00278520  FF A0 20 90 */	fmr f29, f4
/* 8027C8C4 00278524  EC 27 00 72 */	fmuls f1, f7, f1
/* 8027C8C8 00278528  C0 02 A0 88 */	lfs f0, lbl_80642688-_SDA2_BASE_(r2)
/* 8027C8CC 0027852C  FF C0 28 90 */	fmr f30, f5
/* 8027C8D0 00278530  FF E0 30 90 */	fmr f31, f6
/* 8027C8D4 00278534  7C 7F 1B 78 */	mr r31, r3
/* 8027C8D8 00278538  EC 20 00 72 */	fmuls f1, f0, f1
/* 8027C8DC 0027853C  4B F5 7C 81 */	bl tan
/* 8027C8E0 00278540  FC A0 08 18 */	frsp f5, f1
/* 8027C8E4 00278544  C0 62 A0 74 */	lfs f3, lbl_80642674-_SDA2_BASE_(r2)
/* 8027C8E8 00278548  C0 82 A0 70 */	lfs f4, lbl_80642670-_SDA2_BASE_(r2)
/* 8027C8EC 0027854C  FC 20 F8 50 */	fneg f1, f31
/* 8027C8F0 00278550  C0 02 A0 84 */	lfs f0, lbl_80642684-_SDA2_BASE_(r2)
/* 8027C8F4 00278554  FC 40 F0 50 */	fneg f2, f30
/* 8027C8F8 00278558  EC 84 28 24 */	fdivs f4, f4, f5
/* 8027C8FC 0027855C  D0 3F 00 18 */	stfs f1, 0x18(r31)
/* 8027C900 00278560  D0 1F 00 28 */	stfs f0, 0x28(r31)
/* 8027C904 00278564  D0 7F 00 04 */	stfs f3, 4(r31)
/* 8027C908 00278568  D0 5F 00 08 */	stfs f2, 8(r31)
/* 8027C90C 0027856C  D0 7F 00 0C */	stfs f3, 0xc(r31)
/* 8027C910 00278570  EC 24 D8 24 */	fdivs f1, f4, f27
/* 8027C914 00278574  D0 7F 00 10 */	stfs f3, 0x10(r31)
/* 8027C918 00278578  D0 7F 00 1C */	stfs f3, 0x1c(r31)
/* 8027C91C 0027857C  D0 7F 00 20 */	stfs f3, 0x20(r31)
/* 8027C920 00278580  D0 7F 00 24 */	stfs f3, 0x24(r31)
/* 8027C924 00278584  D0 7F 00 2C */	stfs f3, 0x2c(r31)
/* 8027C928 00278588  EC 3C 00 72 */	fmuls f1, f28, f1
/* 8027C92C 0027858C  EC 04 07 72 */	fmuls f0, f4, f29
/* 8027C930 00278590  D0 3F 00 00 */	stfs f1, 0(r31)
/* 8027C934 00278594  D0 1F 00 14 */	stfs f0, 0x14(r31)
/* 8027C938 00278598  E3 E1 00 58 */	psq_l f31, 88(r1), 0, qr0
/* 8027C93C 0027859C  CB E1 00 50 */	lfd f31, 0x50(r1)
/* 8027C940 002785A0  E3 C1 00 48 */	psq_l f30, 72(r1), 0, qr0
/* 8027C944 002785A4  CB C1 00 40 */	lfd f30, 0x40(r1)
/* 8027C948 002785A8  E3 A1 00 38 */	psq_l f29, 56(r1), 0, qr0
/* 8027C94C 002785AC  CB A1 00 30 */	lfd f29, 0x30(r1)
/* 8027C950 002785B0  E3 81 00 28 */	psq_l f28, 40(r1), 0, qr0
/* 8027C954 002785B4  CB 81 00 20 */	lfd f28, 0x20(r1)
/* 8027C958 002785B8  E3 61 00 18 */	psq_l f27, 24(r1), 0, qr0
/* 8027C95C 002785BC  CB 61 00 10 */	lfd f27, 0x10(r1)
/* 8027C960 002785C0  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 8027C964 002785C4  80 01 00 64 */	lwz r0, 0x64(r1)
/* 8027C968 002785C8  7C 08 03 A6 */	mtlr r0
/* 8027C96C 002785CC  38 21 00 60 */	addi r1, r1, 0x60
/* 8027C970 002785D0  4E 80 00 20 */	blr

.global C_MTXLightOrtho
C_MTXLightOrtho:
/* 8027C974 002785D4  ED 64 18 28 */	fsubs f11, f4, f3
/* 8027C978 002785D8  C1 22 A0 74 */	lfs f9, lbl_80642674-_SDA2_BASE_(r2)
/* 8027C97C 002785DC  C1 42 A0 70 */	lfs f10, lbl_80642670-_SDA2_BASE_(r2)
/* 8027C980 002785E0  EC 01 10 28 */	fsubs f0, f1, f2
/* 8027C984 002785E4  EC 64 18 2A */	fadds f3, f4, f3
/* 8027C988 002785E8  C0 82 A0 80 */	lfs f4, lbl_80642680-_SDA2_BASE_(r2)
/* 8027C98C 002785EC  ED 8A 58 24 */	fdivs f12, f10, f11
/* 8027C990 002785F0  D1 23 00 04 */	stfs f9, 4(r3)
/* 8027C994 002785F4  D1 23 00 08 */	stfs f9, 8(r3)
/* 8027C998 002785F8  D1 23 00 10 */	stfs f9, 0x10(r3)
/* 8027C99C 002785FC  D1 23 00 18 */	stfs f9, 0x18(r3)
/* 8027C9A0 00278600  D1 23 00 20 */	stfs f9, 0x20(r3)
/* 8027C9A4 00278604  ED 6A 00 24 */	fdivs f11, f10, f0
/* 8027C9A8 00278608  D1 23 00 24 */	stfs f9, 0x24(r3)
/* 8027C9AC 0027860C  D1 23 00 28 */	stfs f9, 0x28(r3)
/* 8027C9B0 00278610  D1 43 00 2C */	stfs f10, 0x2c(r3)
/* 8027C9B4 00278614  EC 01 10 2A */	fadds f0, f1, f2
/* 8027C9B8 00278618  FC 20 18 50 */	fneg f1, f3
/* 8027C9BC 0027861C  EC 64 03 32 */	fmuls f3, f4, f12
/* 8027C9C0 00278620  FC 00 00 50 */	fneg f0, f0
/* 8027C9C4 00278624  EC 4C 00 72 */	fmuls f2, f12, f1
/* 8027C9C8 00278628  EC 24 02 F2 */	fmuls f1, f4, f11
/* 8027C9CC 0027862C  EC 0B 00 32 */	fmuls f0, f11, f0
/* 8027C9D0 00278630  EC 45 00 B2 */	fmuls f2, f5, f2
/* 8027C9D4 00278634  EC 63 01 72 */	fmuls f3, f3, f5
/* 8027C9D8 00278638  EC 06 00 32 */	fmuls f0, f6, f0
/* 8027C9DC 0027863C  EC 47 10 2A */	fadds f2, f7, f2
/* 8027C9E0 00278640  EC 21 01 B2 */	fmuls f1, f1, f6
/* 8027C9E4 00278644  D0 63 00 00 */	stfs f3, 0(r3)
/* 8027C9E8 00278648  EC 08 00 2A */	fadds f0, f8, f0
/* 8027C9EC 0027864C  D0 43 00 0C */	stfs f2, 0xc(r3)
/* 8027C9F0 00278650  D0 23 00 14 */	stfs f1, 0x14(r3)
/* 8027C9F4 00278654  D0 03 00 1C */	stfs f0, 0x1c(r3)
/* 8027C9F8 00278658  4E 80 00 20 */	blr