mirror of
https://github.com/projectPiki/pikmin2.git
synced 2025-02-26 00:28:02 +00:00
link _ppc_eabi_init.cpp
thanks, Antidote! this old compiler is jank with its peephole bug Co-Authored-By: Phillip Stephens <antidote.crk@gmail.com>
This commit is contained in:
parent
329ef4bff4
commit
52972ccd88
1
Makefile
1
Makefile
@ -130,6 +130,7 @@ $(BUILD_DIR)/src/Dolphin/dvdFatal.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/Dolphin/dvderror.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/Dolphin/dvdidutils.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/Dolphin/__start.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/Dolphin/__ppc_eabi_init.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/Dolphin/OSLink.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/Dolphin/PPCArch.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/Dolphin/vec.o: MWCC_VERSION := 1.2.5
|
||||
|
@ -1,81 +0,0 @@
|
||||
.include "macros.inc"
|
||||
.section .init, "ax" # 0x80003100 - 0x80005600
|
||||
|
||||
.global __init_hardware
|
||||
__init_hardware:
|
||||
/* 800054EC 000024EC 7C 00 00 A6 */ mfmsr r0
|
||||
/* 800054F0 000024F0 60 00 20 00 */ ori r0, r0, 0x2000
|
||||
/* 800054F4 000024F4 7C 00 01 24 */ mtmsr r0
|
||||
/* 800054F8 000024F8 7F E8 02 A6 */ mflr r31
|
||||
/* 800054FC 000024FC 48 0E 65 25 */ bl __OSPSInit
|
||||
/* 80005500 00002500 48 0E 5A C9 */ bl __OSFPRInit
|
||||
/* 80005504 00002504 48 0E 77 59 */ bl __OSCacheInit
|
||||
/* 80005508 00002508 7F E8 03 A6 */ mtlr r31
|
||||
/* 8000550C 0000250C 4E 80 00 20 */ blr
|
||||
|
||||
.global __flush_cache
|
||||
__flush_cache:
|
||||
/* 80005510 00002510 3C A0 FF FF */ lis r5, 0xFFFFFFF1@h
|
||||
/* 80005514 00002514 60 A5 FF F1 */ ori r5, r5, 0xFFFFFFF1@l
|
||||
/* 80005518 00002518 7C A5 18 38 */ and r5, r5, r3
|
||||
/* 8000551C 0000251C 7C 65 18 50 */ subf r3, r5, r3
|
||||
/* 80005520 00002520 7C 84 1A 14 */ add r4, r4, r3
|
||||
lbl_80005524:
|
||||
/* 80005524 00002524 7C 00 28 6C */ dcbst 0, r5
|
||||
/* 80005528 00002528 7C 00 04 AC */ sync 0
|
||||
/* 8000552C 0000252C 7C 00 2F AC */ icbi 0, r5
|
||||
/* 80005530 00002530 30 A5 00 08 */ addic r5, r5, 8
|
||||
/* 80005534 00002534 34 84 FF F8 */ addic. r4, r4, -8
|
||||
/* 80005538 00002538 40 80 FF EC */ bge lbl_80005524
|
||||
/* 8000553C 0000253C 4C 00 01 2C */ isync
|
||||
/* 80005540 00002540 4E 80 00 20 */ blr
|
||||
|
||||
.section .text, "ax" # 0x800056C0 - 0x80472F00
|
||||
.global __init_user
|
||||
__init_user:
|
||||
/* 800F2FB4 000EFEF4 7C 08 02 A6 */ mflr r0
|
||||
/* 800F2FB8 000EFEF8 90 01 00 04 */ stw r0, 4(r1)
|
||||
/* 800F2FBC 000EFEFC 94 21 FF F8 */ stwu r1, -8(r1)
|
||||
/* 800F2FC0 000EFF00 48 00 00 15 */ bl __init_cpp
|
||||
/* 800F2FC4 000EFF04 80 01 00 0C */ lwz r0, 0xc(r1)
|
||||
/* 800F2FC8 000EFF08 38 21 00 08 */ addi r1, r1, 8
|
||||
/* 800F2FCC 000EFF0C 7C 08 03 A6 */ mtlr r0
|
||||
/* 800F2FD0 000EFF10 4E 80 00 20 */ blr
|
||||
|
||||
__init_cpp: # local function
|
||||
/* 800F2FD4 000EFF14 7C 08 02 A6 */ mflr r0
|
||||
/* 800F2FD8 000EFF18 90 01 00 04 */ stw r0, 4(r1)
|
||||
/* 800F2FDC 000EFF1C 94 21 FF F0 */ stwu r1, -0x10(r1)
|
||||
/* 800F2FE0 000EFF20 93 E1 00 0C */ stw r31, 0xc(r1)
|
||||
/* 800F2FE4 000EFF24 3C 60 80 47 */ lis r3, _ctors@ha
|
||||
/* 800F2FE8 000EFF28 38 03 2F 00 */ addi r0, r3, _ctors@l
|
||||
/* 800F2FEC 000EFF2C 7C 1F 03 78 */ mr r31, r0
|
||||
/* 800F2FF0 000EFF30 48 00 00 04 */ b lbl_800F2FF4
|
||||
lbl_800F2FF4:
|
||||
/* 800F2FF4 000EFF34 48 00 00 04 */ b lbl_800F2FF8
|
||||
lbl_800F2FF8:
|
||||
/* 800F2FF8 000EFF38 48 00 00 10 */ b lbl_800F3008
|
||||
lbl_800F2FFC:
|
||||
/* 800F2FFC 000EFF3C 7D 88 03 A6 */ mtlr r12
|
||||
/* 800F3000 000EFF40 4E 80 00 21 */ blrl
|
||||
/* 800F3004 000EFF44 3B FF 00 04 */ addi r31, r31, 4
|
||||
lbl_800F3008:
|
||||
/* 800F3008 000EFF48 81 9F 00 00 */ lwz r12, 0(r31)
|
||||
/* 800F300C 000EFF4C 28 0C 00 00 */ cmplwi r12, 0
|
||||
/* 800F3010 000EFF50 40 82 FF EC */ bne lbl_800F2FFC
|
||||
/* 800F3014 000EFF54 80 01 00 14 */ lwz r0, 0x14(r1)
|
||||
/* 800F3018 000EFF58 83 E1 00 0C */ lwz r31, 0xc(r1)
|
||||
/* 800F301C 000EFF5C 38 21 00 10 */ addi r1, r1, 0x10
|
||||
/* 800F3020 000EFF60 7C 08 03 A6 */ mtlr r0
|
||||
/* 800F3024 000EFF64 4E 80 00 20 */ blr
|
||||
|
||||
.global _ExitProcess
|
||||
_ExitProcess:
|
||||
/* 800F3028 000EFF68 7C 08 02 A6 */ mflr r0
|
||||
/* 800F302C 000EFF6C 90 01 00 04 */ stw r0, 4(r1)
|
||||
/* 800F3030 000EFF70 94 21 FF F8 */ stwu r1, -8(r1)
|
||||
/* 800F3034 000EFF74 4B FE 15 65 */ bl PPCHalt
|
||||
/* 800F3038 000EFF78 80 01 00 0C */ lwz r0, 0xc(r1)
|
||||
/* 800F303C 000EFF7C 38 21 00 08 */ addi r1, r1, 8
|
||||
/* 800F3040 000EFF80 7C 08 03 A6 */ mtlr r0
|
||||
/* 800F3044 000EFF84 4E 80 00 20 */ blr
|
36
include/Dolphin/PPCArch.h
Normal file
36
include/Dolphin/PPCArch.h
Normal file
@ -0,0 +1,36 @@
|
||||
#ifndef _DOLPHIN_PPCARCH_H
|
||||
#define _DOLPHIN_PPCARCH_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
u32 PPCMfmsr();
|
||||
void PPCMtmsr(u32 newMSR);
|
||||
// u32 PPCOrMsr(u32 value);
|
||||
void PPCOrMsr();
|
||||
u32 PPCMfhid0();
|
||||
void PPCMthid0(u32 newHID0);
|
||||
u32 PPCMfl2cr();
|
||||
void PPCMtl2cr(u32 newL2cr);
|
||||
void PPCMtdec(u32 newDec);
|
||||
void PPCSync();
|
||||
void PPCHalt();
|
||||
u32 PPCMffpscr();
|
||||
void PPCMtfpscr(u32 newFPSCR);
|
||||
u32 PPCMfhid2();
|
||||
void PPCMthid2(u32 newhid2);
|
||||
u32 PPCMfwpar();
|
||||
void PPCMtwpar(u32 newwpar);
|
||||
void PPCEnableSpeculation();
|
||||
void PPCDisableSpeculation();
|
||||
void PPCSetFpIEEEMode();
|
||||
void PPCSetFpNonIEEEMode();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
@ -417,7 +417,7 @@ DOLPHIN:=\
|
||||
$(BUILD_DIR)/asm/Dolphin/OSTime.o\
|
||||
$(BUILD_DIR)/asm/Dolphin/__mem.o\
|
||||
$(BUILD_DIR)/src/Dolphin/__start.o\
|
||||
$(BUILD_DIR)/asm/Dolphin/__ppc_eabi_init.o\
|
||||
$(BUILD_DIR)/src/Dolphin/__ppc_eabi_init.o\
|
||||
$(BUILD_DIR)/asm/Dolphin/Padclamp.o\
|
||||
$(BUILD_DIR)/asm/Dolphin/Pad.o\
|
||||
$(BUILD_DIR)/asm/Dolphin/SIBios.o\
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "types.h"
|
||||
#include "Dolphin/PPCArch.h"
|
||||
// clang-format off
|
||||
|
||||
union FpscrUnion
|
||||
|
@ -1,5 +1,48 @@
|
||||
#include "types.h"
|
||||
#include "Dolphin/os.h"
|
||||
#include "Dolphin/PPCArch.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
typedef void (*voidfunctionptr)(void); // pointer to function returning void
|
||||
__declspec(section ".ctors") extern voidfunctionptr _ctors[];
|
||||
__declspec(section ".dtors") extern voidfunctionptr _dtors[];
|
||||
|
||||
static void __init_cpp(void);
|
||||
|
||||
// clang-format off
|
||||
__declspec(section ".init") asm void __init_hardware(void) {
|
||||
nofralloc
|
||||
mfmsr r0
|
||||
ori r0,r0,0x2000
|
||||
mtmsr r0
|
||||
mflr r31
|
||||
bl __OSPSInit
|
||||
bl __OSFPRInit
|
||||
bl __OSCacheInit
|
||||
mtlr r31
|
||||
blr
|
||||
}
|
||||
|
||||
__declspec(section ".init") asm void __flush_cache(void) {
|
||||
nofralloc
|
||||
lis r5, 0xFFFFFFF1@h
|
||||
ori r5, r5, 0xFFFFFFF1@l
|
||||
and r5, r5, r3
|
||||
subf r3, r5, r3
|
||||
add r4, r4, r3
|
||||
loop:
|
||||
dcbst 0, r5
|
||||
sync
|
||||
icbi 0, r5
|
||||
addic r5, r5, 8
|
||||
addic. r4, r4, -8
|
||||
bge loop
|
||||
isync
|
||||
blr
|
||||
}
|
||||
// clang-format on
|
||||
|
||||
/*
|
||||
* --INFO--
|
||||
@ -15,38 +58,13 @@ void __init_user(void) { __init_cpp(); }
|
||||
*/
|
||||
static void __init_cpp(void)
|
||||
{
|
||||
voidfunctionptr* constructor;
|
||||
/*
|
||||
.loc_0x0:
|
||||
mflr r0
|
||||
stw r0, 0x4(r1)
|
||||
stwu r1, -0x10(r1)
|
||||
stw r31, 0xC(r1)
|
||||
lis r3, 0x8047
|
||||
addi r0, r3, 0x2F00
|
||||
mr r31, r0
|
||||
b .loc_0x20
|
||||
|
||||
.loc_0x20:
|
||||
b .loc_0x24
|
||||
|
||||
.loc_0x24:
|
||||
b .loc_0x34
|
||||
|
||||
.loc_0x28:
|
||||
mtlr r12
|
||||
blrl
|
||||
addi r31, r31, 0x4
|
||||
|
||||
.loc_0x34:
|
||||
lwz r12, 0x0(r31)
|
||||
cmplwi r12, 0
|
||||
bne+ .loc_0x28
|
||||
lwz r0, 0x14(r1)
|
||||
lwz r31, 0xC(r1)
|
||||
addi r1, r1, 0x10
|
||||
mtlr r0
|
||||
blr
|
||||
*/
|
||||
* call static initializers
|
||||
*/
|
||||
for (constructor = _ctors; *constructor; constructor++) {
|
||||
(*constructor)();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -64,50 +82,7 @@ void __fini_cpp(void)
|
||||
* Address: 800F3028
|
||||
* Size: 000020
|
||||
*/
|
||||
void _ExitProcess(void)
|
||||
{
|
||||
/*
|
||||
.loc_0x0:
|
||||
mflr r0
|
||||
stw r0, 0x4(r1)
|
||||
stwu r1, -0x8(r1)
|
||||
bl -0x1EA9C
|
||||
lwz r0, 0xC(r1)
|
||||
addi r1, r1, 0x8
|
||||
mtlr r0
|
||||
blr
|
||||
*/
|
||||
void _ExitProcess(void) { PPCHalt(); }
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
#pragma section code_type ".init"
|
||||
// clang-format off
|
||||
asm void __init_hardware(void) {
|
||||
nofralloc
|
||||
mfmsr r0
|
||||
ori r0,r0,0x2000
|
||||
mtmsr r0
|
||||
mflr r31
|
||||
bl __OSPSInit
|
||||
bl __OSFPRInit
|
||||
bl __OSCacheInit
|
||||
mtlr r31
|
||||
blr
|
||||
}
|
||||
|
||||
asm void __flush_cache(void) {
|
||||
lis r5, 0xFFFFFFF1@h
|
||||
ori r5, r5, 0xFFFFFFF1@l
|
||||
and r5, r5, r3
|
||||
subf r3, r5, r3
|
||||
add r4, r4, r3
|
||||
loop:
|
||||
dcbst 0, r5
|
||||
sync
|
||||
icbi 0, r5
|
||||
addic r5, r5, 8
|
||||
addic. r4, r4, -8
|
||||
bge loop
|
||||
isync
|
||||
blr
|
||||
}
|
||||
// clang-format on
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user