diff options
Diffstat (limited to 'asm/SDK')
-rw-r--r-- | asm/SDK/HBM/HBMBase.s | 4 | ||||
-rw-r--r-- | asm/SDK/HBM/HBMGUIManager.s | 4 | ||||
-rw-r--r-- | asm/SDK/MTX/mtx.s | 757 | ||||
-rw-r--r-- | asm/SDK/MTX/mtx44.s | 148 | ||||
-rw-r--r-- | asm/SDK/MTX/mtxvec.s | 51 | ||||
-rw-r--r-- | asm/SDK/MTX/quat.s | 421 | ||||
-rw-r--r-- | asm/SDK/MTX/vec.s | 254 |
7 files changed, 1635 insertions, 4 deletions
diff --git a/asm/SDK/HBM/HBMBase.s b/asm/SDK/HBM/HBMBase.s index 49789c3..97d9efd 100644 --- a/asm/SDK/HBM/HBMBase.s +++ b/asm/SDK/HBM/HBMBase.s @@ -1177,7 +1177,7 @@ lbl_8039B078: /* 8039B0C8 00396D28 98 1F 02 58 */ stb r0, 0x258(r31)
/* 8039B0CC 00396D2C D0 01 00 10 */ stfs f0, 0x10(r1)
/* 8039B0D0 00396D30 D0 1F 02 4C */ stfs f0, 0x24c(r31)
-/* 8039B0D4 00396D34 4B EE 0E 59 */ bl func_8027BF2C
+/* 8039B0D4 00396D34 4B EE 0E 59 */ bl PSMTXIdentity
/* 8039B0D8 00396D38 80 61 00 18 */ lwz r3, 0x18(r1)
/* 8039B0DC 00396D3C 3B DC 09 9C */ addi r30, r28, 0x99c
/* 8039B0E0 00396D40 80 01 00 1C */ lwz r0, 0x1c(r1)
@@ -10305,7 +10305,7 @@ initgx__10homebuttonFv: /* 803A3270 0039EED0 7C 08 02 A6 */ mflr r0
/* 803A3274 0039EED4 90 01 00 44 */ stw r0, 0x44(r1)
/* 803A3278 0039EED8 38 61 00 08 */ addi r3, r1, 8
-/* 803A327C 0039EEDC 4B ED 8C B1 */ bl func_8027BF2C
+/* 803A327C 0039EEDC 4B ED 8C B1 */ bl PSMTXIdentity
/* 803A3280 0039EEE0 38 61 00 08 */ addi r3, r1, 8
/* 803A3284 0039EEE4 38 80 00 00 */ li r4, 0
/* 803A3288 0039EEE8 4B EE 38 01 */ bl GXLoadPosMtxImm
diff --git a/asm/SDK/HBM/HBMGUIManager.s b/asm/SDK/HBM/HBMGUIManager.s index 56fcf5f..3e485f6 100644 --- a/asm/SDK/HBM/HBMGUIManager.s +++ b/asm/SDK/HBM/HBMGUIManager.s @@ -1179,7 +1179,7 @@ lbl_803A491C: /* 803A491C 003A057C 80 7E 00 2C */ lwz r3, 0x2c(r30)
/* 803A4920 003A0580 38 81 00 38 */ addi r4, r1, 0x38
/* 803A4924 003A0584 38 63 00 84 */ addi r3, r3, 0x84
-/* 803A4928 003A0588 4B ED 77 81 */ bl func_8027C0A8
+/* 803A4928 003A0588 4B ED 77 81 */ bl PSMTXInverse
/* 803A492C 003A058C C0 02 A9 B0 */ lfs f0, lbl_80642FB0-_SDA2_BASE_(r2)
/* 803A4930 003A0590 38 61 00 38 */ addi r3, r1, 0x38
/* 803A4934 003A0594 D3 C1 00 08 */ stfs f30, 8(r1)
@@ -1187,7 +1187,7 @@ lbl_803A491C: /* 803A493C 003A059C 38 A1 00 28 */ addi r5, r1, 0x28
/* 803A4940 003A05A0 D3 E1 00 0C */ stfs f31, 0xc(r1)
/* 803A4944 003A05A4 D0 01 00 10 */ stfs f0, 0x10(r1)
-/* 803A4948 003A05A8 4B ED 80 B5 */ bl func_8027C9FC
+/* 803A4948 003A05A8 4B ED 80 B5 */ bl PSMTXMultVec
/* 803A494C 003A05AC 80 9E 00 2C */ lwz r4, 0x2c(r30)
/* 803A4950 003A05B0 7F E5 FB 78 */ mr r5, r31
/* 803A4954 003A05B4 38 61 00 18 */ addi r3, r1, 0x18
diff --git a/asm/SDK/MTX/mtx.s b/asm/SDK/MTX/mtx.s new file mode 100644 index 0000000..c902a54 --- /dev/null +++ b/asm/SDK/MTX/mtx.s @@ -0,0 +1,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
diff --git a/asm/SDK/MTX/mtx44.s b/asm/SDK/MTX/mtx44.s new file mode 100644 index 0000000..578f1d8 --- /dev/null +++ b/asm/SDK/MTX/mtx44.s @@ -0,0 +1,148 @@ +.include "macros.inc"
+
+.section .text, "ax" # 0x80006980 - 0x803E1E60
+
+.global C_MTXFrustum
+C_MTXFrustum:
+/* 8027CAA4 00278704 EC 04 18 28 */ fsubs f0, f4, f3
+/* 8027CAA8 00278708 C1 22 A0 98 */ lfs f9, lbl_80642698-_SDA2_BASE_(r2)
+/* 8027CAAC 0027870C C1 62 A0 90 */ lfs f11, lbl_80642690-_SDA2_BASE_(r2)
+/* 8027CAB0 00278710 ED 01 10 28 */ fsubs f8, f1, f2
+/* 8027CAB4 00278714 EC E6 28 28 */ fsubs f7, f6, f5
+/* 8027CAB8 00278718 C1 42 A0 94 */ lfs f10, lbl_80642694-_SDA2_BASE_(r2)
+/* 8027CABC 0027871C ED 8B 00 24 */ fdivs f12, f11, f0
+/* 8027CAC0 00278720 C0 02 A0 9C */ lfs f0, lbl_8064269C-_SDA2_BASE_(r2)
+/* 8027CAC4 00278724 D1 23 00 04 */ stfs f9, 4(r3)
+/* 8027CAC8 00278728 D0 03 00 38 */ stfs f0, 0x38(r3)
+/* 8027CACC 0027872C D1 23 00 0C */ stfs f9, 0xc(r3)
+/* 8027CAD0 00278730 D1 23 00 10 */ stfs f9, 0x10(r3)
+/* 8027CAD4 00278734 ED 0B 40 24 */ fdivs f8, f11, f8
+/* 8027CAD8 00278738 D1 23 00 1C */ stfs f9, 0x1c(r3)
+/* 8027CADC 0027873C D1 23 00 20 */ stfs f9, 0x20(r3)
+/* 8027CAE0 00278740 D1 23 00 24 */ stfs f9, 0x24(r3)
+/* 8027CAE4 00278744 D1 23 00 30 */ stfs f9, 0x30(r3)
+/* 8027CAE8 00278748 D1 23 00 34 */ stfs f9, 0x34(r3)
+/* 8027CAEC 0027874C EC 01 10 2A */ fadds f0, f1, f2
+/* 8027CAF0 00278750 D1 23 00 3C */ stfs f9, 0x3c(r3)
+/* 8027CAF4 00278754 EC 64 18 2A */ fadds f3, f4, f3
+/* 8027CAF8 00278758 ED 4A 01 72 */ fmuls f10, f10, f5
+/* 8027CAFC 0027875C EC 08 00 32 */ fmuls f0, f8, f0
+/* 8027CB00 00278760 EC 4C 00 F2 */ fmuls f2, f12, f3
+/* 8027CB04 00278764 EC 2A 02 32 */ fmuls f1, f10, f8
+/* 8027CB08 00278768 EC 8A 03 32 */ fmuls f4, f10, f12
+/* 8027CB0C 0027876C D0 03 00 18 */ stfs f0, 0x18(r3)
+/* 8027CB10 00278770 EC C6 01 72 */ fmuls f6, f6, f5
+/* 8027CB14 00278774 D0 23 00 14 */ stfs f1, 0x14(r3)
+/* 8027CB18 00278778 EC 6B 38 24 */ fdivs f3, f11, f7
+/* 8027CB1C 0027877C D0 83 00 00 */ stfs f4, 0(r3)
+/* 8027CB20 00278780 D0 43 00 08 */ stfs f2, 8(r3)
+/* 8027CB24 00278784 FC 20 28 50 */ fneg f1, f5
+/* 8027CB28 00278788 FC 00 30 50 */ fneg f0, f6
+/* 8027CB2C 0027878C EC 21 00 F2 */ fmuls f1, f1, f3
+/* 8027CB30 00278790 EC 03 00 32 */ fmuls f0, f3, f0
+/* 8027CB34 00278794 D0 23 00 28 */ stfs f1, 0x28(r3)
+/* 8027CB38 00278798 D0 03 00 2C */ stfs f0, 0x2c(r3)
+/* 8027CB3C 0027879C 4E 80 00 20 */ blr
+
+.global C_MTXPerspective
+C_MTXPerspective:
+/* 8027CB40 002787A0 94 21 FF C0 */ stwu r1, -0x40(r1)
+/* 8027CB44 002787A4 7C 08 02 A6 */ mflr r0
+/* 8027CB48 002787A8 90 01 00 44 */ stw r0, 0x44(r1)
+/* 8027CB4C 002787AC DB E1 00 30 */ stfd f31, 0x30(r1)
+/* 8027CB50 002787B0 F3 E1 00 38 */ psq_st f31, 56(r1), 0, qr0
+/* 8027CB54 002787B4 DB C1 00 20 */ stfd f30, 0x20(r1)
+/* 8027CB58 002787B8 F3 C1 00 28 */ psq_st f30, 40(r1), 0, qr0
+/* 8027CB5C 002787BC DB A1 00 10 */ stfd f29, 0x10(r1)
+/* 8027CB60 002787C0 F3 A1 00 18 */ psq_st f29, 24(r1), 0, qr0
+/* 8027CB64 002787C4 FF A0 10 90 */ fmr f29, f2
+/* 8027CB68 002787C8 C0 A2 A0 A0 */ lfs f5, lbl_806426A0-_SDA2_BASE_(r2)
+/* 8027CB6C 002787CC FF C0 18 90 */ fmr f30, f3
+/* 8027CB70 002787D0 93 E1 00 0C */ stw r31, 0xc(r1)
+/* 8027CB74 002787D4 FF E0 20 90 */ fmr f31, f4
+/* 8027CB78 002787D8 EC 25 00 72 */ fmuls f1, f5, f1
+/* 8027CB7C 002787DC C0 02 A0 A4 */ lfs f0, lbl_806426A4-_SDA2_BASE_(r2)
+/* 8027CB80 002787E0 7C 7F 1B 78 */ mr r31, r3
+/* 8027CB84 002787E4 EC 20 00 72 */ fmuls f1, f0, f1
+/* 8027CB88 002787E8 4B F5 79 D5 */ bl tan
+/* 8027CB8C 002787EC FC 80 08 18 */ frsp f4, f1
+/* 8027CB90 002787F0 C0 62 A0 98 */ lfs f3, lbl_80642698-_SDA2_BASE_(r2)
+/* 8027CB94 002787F4 C0 A2 A0 90 */ lfs f5, lbl_80642690-_SDA2_BASE_(r2)
+/* 8027CB98 002787F8 EC 5F F0 28 */ fsubs f2, f31, f30
+/* 8027CB9C 002787FC C0 02 A0 9C */ lfs f0, lbl_8064269C-_SDA2_BASE_(r2)
+/* 8027CBA0 00278800 EC 3F 07 B2 */ fmuls f1, f31, f30
+/* 8027CBA4 00278804 EC C5 20 24 */ fdivs f6, f5, f4
+/* 8027CBA8 00278808 D0 1F 00 38 */ stfs f0, 0x38(r31)
+/* 8027CBAC 0027880C D0 7F 00 04 */ stfs f3, 4(r31)
+/* 8027CBB0 00278810 D0 7F 00 08 */ stfs f3, 8(r31)
+/* 8027CBB4 00278814 D0 7F 00 0C */ stfs f3, 0xc(r31)
+/* 8027CBB8 00278818 D0 7F 00 10 */ stfs f3, 0x10(r31)
+/* 8027CBBC 0027881C EC A5 10 24 */ fdivs f5, f5, f2
+/* 8027CBC0 00278820 D0 7F 00 18 */ stfs f3, 0x18(r31)
+/* 8027CBC4 00278824 D0 DF 00 14 */ stfs f6, 0x14(r31)
+/* 8027CBC8 00278828 D0 7F 00 1C */ stfs f3, 0x1c(r31)
+/* 8027CBCC 0027882C D0 7F 00 20 */ stfs f3, 0x20(r31)
+/* 8027CBD0 00278830 D0 7F 00 24 */ stfs f3, 0x24(r31)
+/* 8027CBD4 00278834 EC 86 E8 24 */ fdivs f4, f6, f29
+/* 8027CBD8 00278838 D0 7F 00 30 */ stfs f3, 0x30(r31)
+/* 8027CBDC 0027883C D0 7F 00 34 */ stfs f3, 0x34(r31)
+/* 8027CBE0 00278840 D0 7F 00 3C */ stfs f3, 0x3c(r31)
+/* 8027CBE4 00278844 FC 00 08 50 */ fneg f0, f1
+/* 8027CBE8 00278848 D0 9F 00 00 */ stfs f4, 0(r31)
+/* 8027CBEC 0027884C FC 40 F0 50 */ fneg f2, f30
+/* 8027CBF0 00278850 EC 05 00 32 */ fmuls f0, f5, f0
+/* 8027CBF4 00278854 EC 22 01 72 */ fmuls f1, f2, f5
+/* 8027CBF8 00278858 D0 1F 00 2C */ stfs f0, 0x2c(r31)
+/* 8027CBFC 0027885C D0 3F 00 28 */ stfs f1, 0x28(r31)
+/* 8027CC00 00278860 E3 E1 00 38 */ psq_l f31, 56(r1), 0, qr0
+/* 8027CC04 00278864 CB E1 00 30 */ lfd f31, 0x30(r1)
+/* 8027CC08 00278868 E3 C1 00 28 */ psq_l f30, 40(r1), 0, qr0
+/* 8027CC0C 0027886C CB C1 00 20 */ lfd f30, 0x20(r1)
+/* 8027CC10 00278870 E3 A1 00 18 */ psq_l f29, 24(r1), 0, qr0
+/* 8027CC14 00278874 CB A1 00 10 */ lfd f29, 0x10(r1)
+/* 8027CC18 00278878 83 E1 00 0C */ lwz r31, 0xc(r1)
+/* 8027CC1C 0027887C 80 01 00 44 */ lwz r0, 0x44(r1)
+/* 8027CC20 00278880 7C 08 03 A6 */ mtlr r0
+/* 8027CC24 00278884 38 21 00 40 */ addi r1, r1, 0x40
+/* 8027CC28 00278888 4E 80 00 20 */ blr
+
+.global C_MTXOrtho
+C_MTXOrtho:
+/* 8027CC2C 0027888C ED 64 18 28 */ fsubs f11, f4, f3
+/* 8027CC30 00278890 C1 02 A0 98 */ lfs f8, lbl_80642698-_SDA2_BASE_(r2)
+/* 8027CC34 00278894 C1 42 A0 90 */ lfs f10, lbl_80642690-_SDA2_BASE_(r2)
+/* 8027CC38 00278898 EC E1 10 28 */ fsubs f7, f1, f2
+/* 8027CC3C 0027889C EC 06 28 28 */ fsubs f0, f6, f5
+/* 8027CC40 002788A0 C1 22 A0 94 */ lfs f9, lbl_80642694-_SDA2_BASE_(r2)
+/* 8027CC44 002788A4 ED 8A 58 24 */ fdivs f12, f10, f11
+/* 8027CC48 002788A8 C0 A2 A0 9C */ lfs f5, lbl_8064269C-_SDA2_BASE_(r2)
+/* 8027CC4C 002788AC D1 03 00 04 */ stfs f8, 4(r3)
+/* 8027CC50 002788B0 D1 03 00 08 */ stfs f8, 8(r3)
+/* 8027CC54 002788B4 D1 03 00 10 */ stfs f8, 0x10(r3)
+/* 8027CC58 002788B8 D1 03 00 18 */ stfs f8, 0x18(r3)
+/* 8027CC5C 002788BC ED 6A 38 24 */ fdivs f11, f10, f7
+/* 8027CC60 002788C0 D1 03 00 20 */ stfs f8, 0x20(r3)
+/* 8027CC64 002788C4 D1 03 00 24 */ stfs f8, 0x24(r3)
+/* 8027CC68 002788C8 D1 03 00 30 */ stfs f8, 0x30(r3)
+/* 8027CC6C 002788CC D1 03 00 34 */ stfs f8, 0x34(r3)
+/* 8027CC70 002788D0 D1 03 00 38 */ stfs f8, 0x38(r3)
+/* 8027CC74 002788D4 EC EA 00 24 */ fdivs f7, f10, f0
+/* 8027CC78 002788D8 D1 43 00 3C */ stfs f10, 0x3c(r3)
+/* 8027CC7C 002788DC FC 00 30 50 */ fneg f0, f6
+/* 8027CC80 002788E0 EC 21 10 2A */ fadds f1, f1, f2
+/* 8027CC84 002788E4 EC 64 18 2A */ fadds f3, f4, f3
+/* 8027CC88 002788E8 EC C9 03 32 */ fmuls f6, f9, f12
+/* 8027CC8C 002788EC EC 00 01 F2 */ fmuls f0, f0, f7
+/* 8027CC90 002788F0 FC 40 18 50 */ fneg f2, f3
+/* 8027CC94 002788F4 EC 69 02 F2 */ fmuls f3, f9, f11
+/* 8027CC98 002788F8 D0 C3 00 00 */ stfs f6, 0(r3)
+/* 8027CC9C 002788FC FC 20 08 50 */ fneg f1, f1
+/* 8027CCA0 00278900 EC 8C 00 B2 */ fmuls f4, f12, f2
+/* 8027CCA4 00278904 D0 03 00 2C */ stfs f0, 0x2c(r3)
+/* 8027CCA8 00278908 EC 4B 00 72 */ fmuls f2, f11, f1
+/* 8027CCAC 0027890C D0 63 00 14 */ stfs f3, 0x14(r3)
+/* 8027CCB0 00278910 EC 25 01 F2 */ fmuls f1, f5, f7
+/* 8027CCB4 00278914 D0 83 00 0C */ stfs f4, 0xc(r3)
+/* 8027CCB8 00278918 D0 43 00 1C */ stfs f2, 0x1c(r3)
+/* 8027CCBC 0027891C D0 23 00 28 */ stfs f1, 0x28(r3)
+/* 8027CCC0 00278920 4E 80 00 20 */ blr
diff --git a/asm/SDK/MTX/mtxvec.s b/asm/SDK/MTX/mtxvec.s new file mode 100644 index 0000000..9e2787f --- /dev/null +++ b/asm/SDK/MTX/mtxvec.s @@ -0,0 +1,51 @@ +.include "macros.inc"
+
+.section .text, "ax" # 0x80006980 - 0x803E1E60
+
+.global PSMTXMultVec
+PSMTXMultVec:
+/* 8027C9FC 0027865C E0 04 00 00 */ psq_l f0, 0(r4), 0, qr0
+/* 8027CA00 00278660 E0 43 00 00 */ psq_l f2, 0(r3), 0, qr0
+/* 8027CA04 00278664 E0 24 80 08 */ psq_l f1, 8(r4), 1, qr0
+/* 8027CA08 00278668 10 82 00 32 */ ps_mul f4, f2, f0
+/* 8027CA0C 0027866C E0 63 00 08 */ psq_l f3, 8(r3), 0, qr0
+/* 8027CA10 00278670 10 A3 20 7A */ ps_madd f5, f3, f1, f4
+/* 8027CA14 00278674 E1 03 00 10 */ psq_l f8, 16(r3), 0, qr0
+/* 8027CA18 00278678 10 C5 29 94 */ ps_sum0 f6, f5, f6, f5
+/* 8027CA1C 0027867C E1 23 00 18 */ psq_l f9, 24(r3), 0, qr0
+/* 8027CA20 00278680 11 48 00 32 */ ps_mul f10, f8, f0
+/* 8027CA24 00278684 F0 C5 80 00 */ psq_st f6, 0(r5), 1, qr0
+/* 8027CA28 00278688 11 69 50 7A */ ps_madd f11, f9, f1, f10
+/* 8027CA2C 0027868C E0 43 00 20 */ psq_l f2, 32(r3), 0, qr0
+/* 8027CA30 00278690 11 8B 5B 14 */ ps_sum0 f12, f11, f12, f11
+/* 8027CA34 00278694 E0 63 00 28 */ psq_l f3, 40(r3), 0, qr0
+/* 8027CA38 00278698 10 82 00 32 */ ps_mul f4, f2, f0
+/* 8027CA3C 0027869C F1 85 80 04 */ psq_st f12, 4(r5), 1, qr0
+/* 8027CA40 002786A0 10 A3 20 7A */ ps_madd f5, f3, f1, f4
+/* 8027CA44 002786A4 10 C5 29 94 */ ps_sum0 f6, f5, f6, f5
+/* 8027CA48 002786A8 F0 C5 80 08 */ psq_st f6, 8(r5), 1, qr0
+/* 8027CA4C 002786AC 4E 80 00 20 */ blr
+
+.global PSMTXMultVecSR
+PSMTXMultVecSR:
+/* 8027CA50 002786B0 E0 03 00 00 */ psq_l f0, 0(r3), 0, qr0
+/* 8027CA54 002786B4 E0 C4 00 00 */ psq_l f6, 0(r4), 0, qr0
+/* 8027CA58 002786B8 E0 43 00 10 */ psq_l f2, 16(r3), 0, qr0
+/* 8027CA5C 002786BC 11 00 01 B2 */ ps_mul f8, f0, f6
+/* 8027CA60 002786C0 E0 83 00 20 */ psq_l f4, 32(r3), 0, qr0
+/* 8027CA64 002786C4 11 42 01 B2 */ ps_mul f10, f2, f6
+/* 8027CA68 002786C8 E0 E4 80 08 */ psq_l f7, 8(r4), 1, qr0
+/* 8027CA6C 002786CC 11 84 01 B2 */ ps_mul f12, f4, f6
+/* 8027CA70 002786D0 E0 63 00 18 */ psq_l f3, 24(r3), 0, qr0
+/* 8027CA74 002786D4 11 08 42 14 */ ps_sum0 f8, f8, f8, f8
+/* 8027CA78 002786D8 E0 A3 00 28 */ psq_l f5, 40(r3), 0, qr0
+/* 8027CA7C 002786DC 11 4A 52 94 */ ps_sum0 f10, f10, f10, f10
+/* 8027CA80 002786E0 E0 23 00 08 */ psq_l f1, 8(r3), 0, qr0
+/* 8027CA84 002786E4 11 8C 63 14 */ ps_sum0 f12, f12, f12, f12
+/* 8027CA88 002786E8 11 21 41 FA */ ps_madd f9, f1, f7, f8
+/* 8027CA8C 002786EC F1 25 80 00 */ psq_st f9, 0(r5), 1, qr0
+/* 8027CA90 002786F0 11 63 51 FA */ ps_madd f11, f3, f7, f10
+/* 8027CA94 002786F4 F1 65 80 04 */ psq_st f11, 4(r5), 1, qr0
+/* 8027CA98 002786F8 11 A5 61 FA */ ps_madd f13, f5, f7, f12
+/* 8027CA9C 002786FC F1 A5 80 08 */ psq_st f13, 8(r5), 1, qr0
+/* 8027CAA0 00278700 4E 80 00 20 */ blr
diff --git a/asm/SDK/MTX/quat.s b/asm/SDK/MTX/quat.s new file mode 100644 index 0000000..189aad0 --- /dev/null +++ b/asm/SDK/MTX/quat.s @@ -0,0 +1,421 @@ +.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
+
+# either PSQUATNormalize or PSQUATInverse
+.global func_8027D080
+func_8027D080:
+/* 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 func_8027D080
+/* 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
diff --git a/asm/SDK/MTX/vec.s b/asm/SDK/MTX/vec.s new file mode 100644 index 0000000..ba5f316 --- /dev/null +++ b/asm/SDK/MTX/vec.s @@ -0,0 +1,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
|