Match and link OSContext, add ability to turn off frank

This commit is contained in:
Phillip Stephens
2022-12-17 22:04:23 -08:00
parent 42555103a2
commit e924a90c59
5 changed files with 564 additions and 8 deletions
+4 -6
View File
@@ -154,7 +154,7 @@ __OSSaveFPUContext:
/* 8037F380 0037C2E0 C8 05 00 90 */ lfd f0, 0x90(r5)
/* 8037F384 0037C2E4 7C 78 E2 A6 */ mfspr r3, 0x398
/* 8037F388 0037C2E8 54 63 1F FF */ rlwinm. r3, r3, 3, 0x1f, 0x1f
/* 8037F38C 0037C2EC 41 82 00 84 */ beq sub_8037f410
/* 8037F38C 0037C2EC 41 82 00 84 */ beq lbl_8037f410
/* 8037F390 0037C2F0 F0 05 01 C8 */ psq_st f0, 456(r5), 0, qr0
/* 8037F394 0037C2F4 F0 25 01 D0 */ psq_st f1, 464(r5), 0, qr0
/* 8037F398 0037C2F8 F0 45 01 D8 */ psq_st f2, 472(r5), 0, qr0
@@ -187,9 +187,7 @@ __OSSaveFPUContext:
/* 8037F404 0037C364 F3 A5 02 B0 */ psq_st f29, 688(r5), 0, qr0
/* 8037F408 0037C368 F3 C5 02 B8 */ psq_st f30, 696(r5), 0, qr0
/* 8037F40C 0037C36C F3 E5 02 C0 */ psq_st f31, 704(r5), 0, qr0
.global sub_8037f410
sub_8037f410:
lbl_8037f410:
/* 8037F410 0037C370 4E 80 00 20 */ blr
.global OSSaveFPUContext
@@ -267,9 +265,9 @@ OSSaveContext:
.global OSLoadContext
OSLoadContext:
/* 8037F504 0037C464 3C 80 80 38 */ lis r4, OSDisableInterrupts@ha
/* 8037F504 0037C464 3C 80 80 38 */ lis r4, __RAS_OSDisableInterrupts_begin@ha
/* 8037F508 0037C468 80 C3 01 98 */ lwz r6, 0x198(r3)
/* 8037F50C 0037C46C 38 A4 16 60 */ addi r5, r4, OSDisableInterrupts@l
/* 8037F50C 0037C46C 38 A4 16 60 */ addi r5, r4, __RAS_OSDisableInterrupts_begin@l
/* 8037F510 0037C470 7C 06 28 40 */ cmplw r6, r5
/* 8037F514 0037C474 40 81 00 18 */ ble lbl_8037F52C
/* 8037F518 0037C478 3C 80 80 38 */ lis r4, __RAS_OSDisableInterrupts_end@ha
+6 -2
View File
@@ -809,7 +809,7 @@ LIBS = [
["Dolphin/os/OSArena", True],
["Dolphin/os/OSAudioSystem", True],
["Dolphin/os/OSCache", True],
"Dolphin/os/OSContext",
["Dolphin/os/OSContext", True, True, True],
"Dolphin/os/OSError",
"Dolphin/os/OSFatal",
"Dolphin/os/OSFont",
@@ -1339,9 +1339,12 @@ if __name__ == "__main__":
for object in lib["objects"]:
completed = None
add_to_all = True
no_frank = False
if type(object) is list:
if len(object) > 2:
add_to_all = object[2]
if len(object) > 3:
no_frank = object[3]
completed = object[1]
object = object[0]
@@ -1357,7 +1360,8 @@ if __name__ == "__main__":
rule = "mwcc"
if mwcc_version == "1.2.5e":
mwcc_version = "1.2.5"
rule = "mwcc_frank"
if no_frank is False:
rule = "mwcc_frank"
n.build(
outputs=f"$builddir/src/{object}.o",
rule=rule,
+2
View File
@@ -132,6 +132,8 @@ extern "C" {
#define OS_CONTEXT_PSF31 704
#define OS_CONTEXT_STATE_EXC 0x02u
#define OS_CONTEXT_STATE_FPSAVED 0x01u
typedef struct OSContext {
u32 gpr[32];
u32 cr;
+2
View File
@@ -8,6 +8,8 @@
#ifdef __cplusplus
extern "C" {
#endif
#define __OS_EXCEPTION_FLOATING_POINT 7
typedef u8 __OSException;
typedef void (*__OSExceptionHandler)(__OSException exception, OSContext* context);
File diff suppressed because it is too large Load Diff