summaryrefslogtreecommitdiff
path: root/src/Dolphin/PPCArch.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Dolphin/PPCArch.c')
-rw-r--r--src/Dolphin/PPCArch.c563
1 files changed, 563 insertions, 0 deletions
diff --git a/src/Dolphin/PPCArch.c b/src/Dolphin/PPCArch.c
new file mode 100644
index 0000000..173c685
--- /dev/null
+++ b/src/Dolphin/PPCArch.c
@@ -0,0 +1,563 @@
+#include "types.h"
+#include "asm_types.h"
+// clang-format off
+
+union FpscrUnion
+{
+ f64 f;
+ struct
+ {
+ u32 fpscr_pad;
+ u32 fpscr;
+ } u;
+};
+
+#define HID0_SPD 0x00000200 // Speculative cache access enable (0 enable)
+
+void PPCMthid0 ( u32 newHID0 );
+
+/*
+ * --INFO--
+ * Address: 8036F7D4
+ * Size: 000008
+ */
+asm u32 PPCMfmsr (void)
+{
+ nofralloc
+ mfmsr r3
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: 8036F7DC
+ * Size: 000008
+ */
+asm void PPCMtmsr (register u32 newMSR)
+{
+ nofralloc
+ mtmsr newMSR
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 00000C
+ */
+void PPCOrMsr(void)
+{
+ // UNUSED FUNCTION
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 00000C
+ */
+void PPCAndMsr(void)
+{
+ // UNUSED FUNCTION
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 00000C
+ */
+void PPCAndCMsr(void)
+{
+ // UNUSED FUNCTION
+}
+
+/*
+ * --INFO--
+ * Address: 8036F7E4
+ * Size: 000008
+ */
+asm u32 PPCMfhid0 (void)
+{
+ nofralloc
+ mfspr r3, HID0
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: 8036F7EC
+ * Size: 000008
+ */
+asm void PPCMthid0 (register u32 newHID0)
+{
+ nofralloc
+ mtspr HID0, newHID0
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+void PPCMfhid1(void)
+{
+ // UNUSED FUNCTION
+}
+
+/*
+ * --INFO--
+ * Address: 8036F7F4
+ * Size: 000008
+ */
+asm u32 PPCMfl2cr (void)
+{
+ nofralloc
+ mfspr r3, L2CR
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: 8036F7FC
+ * Size: 000008
+ */
+asm void PPCMtl2cr (register u32 newL2cr)
+{
+ nofralloc
+ mtspr L2CR, newL2cr
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: 8036F804
+ * Size: 000008
+ */
+__declspec ( weak ) asm void PPCMtdec ( register u32 newDec )
+{
+ nofralloc
+ mtdec newDec
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+void PPCMfdec(void)
+{
+ // UNUSED FUNCTION
+}
+
+/*
+ * --INFO--
+ * Address: 8036F80C
+ * Size: 000008
+ */
+asm void PPCSync (void)
+{
+ nofralloc
+ sc
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000034
+ */
+asm void PPCEieio(void) {
+ nofralloc
+ mfmsr r5
+ rlwinm r6, r5, 0, 0x11, 0xf
+ mtmsr r6
+ mfspr r3, hid0
+ ori r4, r3, 8
+ mtspr hid0, r4
+ isync
+ eieio
+ isync
+
+ mtspr hid0, r3
+ mtmsr r5
+ isync
+
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: 8036F814
+ * Size: 000014
+ */
+__declspec ( weak ) asm void PPCHalt (void) //spins infinitely
+{
+ nofralloc
+
+ sync
+
+_spin:
+ nop
+ li r3, 0
+ nop
+ b _spin
+
+ // NEVER REACHED
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+asm void PPCMfmmcr0(void)
+{
+ nofralloc
+ mfspr r3, MMCR0
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ * UNUSED
+ */
+asm void PPCMtmmcr0 (register u32 newMmcr0)
+{
+ nofralloc
+ mtspr MMCR0, newMmcr0
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+asm void PPCMfmmcr1(void)
+{
+ nofralloc
+ mfspr r3, MMCR1
+ blr}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ * UNUSED
+ */
+asm void PPCMtmmcr1 (register u32 newMmcr1)
+{
+ nofralloc
+ mtspr MMCR1, newMmcr1
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+asm void PPCMfpmc1(void)
+{
+ nofralloc
+ mfspr r3, PMC1
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ * UNUSED
+ */
+asm void PPCMtpmc1 (register u32 newPmc1)
+{
+ nofralloc
+ mtspr PMC1, newPmc1
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+asm void PPCMfpmc2(void)
+{
+ nofralloc
+ mfspr r3, PMC2
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ * UNUSED
+ */
+asm void PPCMtpmc2 (register u32 newPmc2)
+{
+ nofralloc
+ mtspr PMC2, newPmc2
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+asm void PPCMfpmc3(void)
+{
+ nofralloc
+ mfspr r3, PMC2
+ blr}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ * UNUSED
+ */
+asm void PPCMtpmc3 (register u32 newPmc3)
+{
+ nofralloc
+ mtspr PMC3, newPmc3
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+asm void PPCMfpmc4(void)
+{
+ nofralloc
+ mfspr r3, PMC4
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ * UNUSED
+ */
+asm void PPCMtpmc4 (register u32 newPmc4)
+{
+ nofralloc
+ mtspr PMC4, newPmc4
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+asm void PPCMfsia(void)
+{
+ nofralloc
+ mfspr r3, SIA
+ blr}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+asm void PPCMtsia(register u32 newSia)
+{
+ nofralloc
+ mtspr SIA, newSia
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: 8036F828
+ * Size: 000020
+ */
+u32 PPCMffpscr(void)
+{
+ union FpscrUnion m;
+
+
+ asm
+ {
+ mffs fp31
+ stfd fp31, m.f;
+ }
+
+ return m.u.fpscr;
+}
+
+/*
+ * --INFO--
+ * Address: 8036F848
+ * Size: 000028
+ */
+void PPCMtfpscr(register u32 newFPSCR)
+{
+ union FpscrUnion m;
+
+ asm
+ {
+ li r4, 0
+ stw r4, m.u.fpscr_pad;
+ stw newFPSCR, m.u.fpscr
+ lfd fp31, m.f
+ mtfsf 0xff, fp31
+ }
+}
+
+/*
+ * --INFO--
+ * Address: 8036F870
+ * Size: 000008
+ */
+asm u32 PPCMfhid2 ( void )
+{
+ nofralloc
+ mfspr r3, HID2
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: 8036F878
+ * Size: 000008
+ */
+asm void PPCMthid2 ( register u32 newhid2 )
+{
+ nofralloc
+ mtspr HID2, newhid2
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: 8036F880
+ * Size: 00000C
+ */
+asm u32 PPCMfwpar(void)
+{
+ nofralloc
+ sync
+ mfspr r3, WPAR
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: 8036F88C
+ * Size: 000008
+ */
+asm void PPCMtwpar ( register u32 newwpar )
+{
+ nofralloc
+ mtspr WPAR, newwpar
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+asm void PPCMfdmaU(void)
+{
+ nofralloc
+ mfspr r3, DMA_U
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+asm void PPCMfdmaL(void)
+{
+ nofralloc
+ mfspr r3, DMA_L
+ blr
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+void PPCMtdmaU(void)
+{
+ // UNUSED FUNCTION
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+void PPCMtdmaL(void)
+{
+ // UNUSED FUNCTION
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000008
+ */
+void PPCMfpvr(void)
+{
+ // UNUSED FUNCTION
+}
+
+/*
+ * --INFO--
+ * Address: ........
+ * Size: 000028
+ */
+void PPCEnableSpeculation(void)
+{
+ // UNUSED FUNCTION
+}
+
+/*
+ * --INFO--
+ * Address: 8036F894
+ * Size: 000028
+ */
+void PPCDisableSpeculation (void)
+{
+ PPCMthid0(PPCMfhid0() | HID0_SPD);
+}
+
+/*
+ * --INFO--
+ * Address: 8036F8BC
+ * Size: 000008
+ */
+asm void PPCSetFpIEEEMode(void)
+{
+ nofralloc
+ mtfsb0 4*7+1
+ blr
+}
+/*
+ * --INFO--
+ * Address: 8036F8C4
+ * Size: 000008
+ */
+asm void PPCSetFpNonIEEEMode (void)
+{
+ nofralloc
+ mtfsb1 4*7+1
+ blr
+}
+// clang-format on