From 33a285f17982d6f9a2f3b32289ed6ac24b73351a Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Fri, 20 Oct 2023 09:36:29 -0700 Subject: [PATCH] JASHeapCtrl (#1965) --- .../JASHeapCtrl/__ct__17JASGenericMemPoolFv.s | 7 - .../__ct__7JASHeapFP11JASDisposer.s | 28 -- .../JASHeapCtrl/alloc__7JASHeapFP7JASHeapUl.s | 130 --------- .../JASHeapCtrl/getAramHeap__9JASKernelFv.s | 4 - .../JASHeapCtrl/getCurOffset__7JASHeapFv.s | 29 -- .../JASHeapCtrl/getTailHeap__7JASHeapFv.s | 40 --- .../JASHeapCtrl/getTailOffset__7JASHeapFv.s | 28 -- .../JASHeapCtrl/initRootHeap__7JASHeapFPvUl.s | 29 -- .../setupAramHeap__9JASKernelFUlUl.s | 15 - include/JSystem/JAudio2/JASHeapCtrl.h | 17 +- include/JSystem/JSupport/JSUList.h | 2 +- libs/JSystem/JAudio2/JASHeapCtrl.cpp | 261 ++++++++++++------ libs/JSystem/JAudio2/JASTaskThread.cpp | 8 +- 13 files changed, 196 insertions(+), 402 deletions(-) delete mode 100644 asm/JSystem/JAudio2/JASHeapCtrl/__ct__17JASGenericMemPoolFv.s delete mode 100644 asm/JSystem/JAudio2/JASHeapCtrl/__ct__7JASHeapFP11JASDisposer.s delete mode 100644 asm/JSystem/JAudio2/JASHeapCtrl/alloc__7JASHeapFP7JASHeapUl.s delete mode 100644 asm/JSystem/JAudio2/JASHeapCtrl/getAramHeap__9JASKernelFv.s delete mode 100644 asm/JSystem/JAudio2/JASHeapCtrl/getCurOffset__7JASHeapFv.s delete mode 100644 asm/JSystem/JAudio2/JASHeapCtrl/getTailHeap__7JASHeapFv.s delete mode 100644 asm/JSystem/JAudio2/JASHeapCtrl/getTailOffset__7JASHeapFv.s delete mode 100644 asm/JSystem/JAudio2/JASHeapCtrl/initRootHeap__7JASHeapFPvUl.s delete mode 100644 asm/JSystem/JAudio2/JASHeapCtrl/setupAramHeap__9JASKernelFUlUl.s diff --git a/asm/JSystem/JAudio2/JASHeapCtrl/__ct__17JASGenericMemPoolFv.s b/asm/JSystem/JAudio2/JASHeapCtrl/__ct__17JASGenericMemPoolFv.s deleted file mode 100644 index 838b5523ccb..00000000000 --- a/asm/JSystem/JAudio2/JASHeapCtrl/__ct__17JASGenericMemPoolFv.s +++ /dev/null @@ -1,7 +0,0 @@ -lbl_80290848: -/* 80290848 38 00 00 00 */ li r0, 0 -/* 8029084C 90 03 00 00 */ stw r0, 0(r3) -/* 80290850 90 03 00 04 */ stw r0, 4(r3) -/* 80290854 90 03 00 08 */ stw r0, 8(r3) -/* 80290858 90 03 00 0C */ stw r0, 0xc(r3) -/* 8029085C 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASHeapCtrl/__ct__7JASHeapFP11JASDisposer.s b/asm/JSystem/JAudio2/JASHeapCtrl/__ct__7JASHeapFP11JASDisposer.s deleted file mode 100644 index 34133d707ab..00000000000 --- a/asm/JSystem/JAudio2/JASHeapCtrl/__ct__7JASHeapFP11JASDisposer.s +++ /dev/null @@ -1,28 +0,0 @@ -lbl_80290140: -/* 80290140 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80290144 7C 08 02 A6 */ mflr r0 -/* 80290148 90 01 00 24 */ stw r0, 0x24(r1) -/* 8029014C 39 61 00 20 */ addi r11, r1, 0x20 -/* 80290150 48 0D 20 8D */ bl _savegpr_29 -/* 80290154 7C 7D 1B 78 */ mr r29, r3 -/* 80290158 7C 9F 23 78 */ mr r31, r4 -/* 8029015C 7F A0 EB 78 */ mr r0, r29 -/* 80290160 7C 1E 03 78 */ mr r30, r0 -/* 80290164 48 04 BD B1 */ bl initiate__10JSUPtrListFv -/* 80290168 38 7E 00 0C */ addi r3, r30, 0xc -/* 8029016C 7F A4 EB 78 */ mr r4, r29 -/* 80290170 48 04 BC 8D */ bl __ct__10JSUPtrLinkFPv -/* 80290174 93 FD 00 34 */ stw r31, 0x34(r29) -/* 80290178 38 00 00 00 */ li r0, 0 -/* 8029017C 90 1D 00 38 */ stw r0, 0x38(r29) -/* 80290180 90 1D 00 3C */ stw r0, 0x3c(r29) -/* 80290184 90 1D 00 40 */ stw r0, 0x40(r29) -/* 80290188 38 7D 00 1C */ addi r3, r29, 0x1c -/* 8029018C 48 0A EE 7D */ bl OSInitMutex -/* 80290190 7F A3 EB 78 */ mr r3, r29 -/* 80290194 39 61 00 20 */ addi r11, r1, 0x20 -/* 80290198 48 0D 20 91 */ bl _restgpr_29 -/* 8029019C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 802901A0 7C 08 03 A6 */ mtlr r0 -/* 802901A4 38 21 00 20 */ addi r1, r1, 0x20 -/* 802901A8 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASHeapCtrl/alloc__7JASHeapFP7JASHeapUl.s b/asm/JSystem/JAudio2/JASHeapCtrl/alloc__7JASHeapFP7JASHeapUl.s deleted file mode 100644 index bd5b8922999..00000000000 --- a/asm/JSystem/JAudio2/JASHeapCtrl/alloc__7JASHeapFP7JASHeapUl.s +++ /dev/null @@ -1,130 +0,0 @@ -lbl_8029021C: -/* 8029021C 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 80290220 7C 08 02 A6 */ mflr r0 -/* 80290224 90 01 00 34 */ stw r0, 0x34(r1) -/* 80290228 39 61 00 30 */ addi r11, r1, 0x30 -/* 8029022C 48 0D 1F A9 */ bl _savegpr_27 -/* 80290230 7C 7C 1B 78 */ mr r28, r3 -/* 80290234 7C 9D 23 78 */ mr r29, r4 -/* 80290238 7C BE 2B 78 */ mr r30, r5 -/* 8029023C 38 7C 00 1C */ addi r3, r28, 0x1c -/* 80290240 90 61 00 08 */ stw r3, 8(r1) -/* 80290244 48 0A ED FD */ bl OSLockMutex -/* 80290248 80 1C 00 38 */ lwz r0, 0x38(r28) -/* 8029024C 28 00 00 00 */ cmplwi r0, 0 -/* 80290250 41 82 00 14 */ beq lbl_80290264 -/* 80290254 80 61 00 08 */ lwz r3, 8(r1) -/* 80290258 48 0A EE C5 */ bl OSUnlockMutex -/* 8029025C 38 60 00 00 */ li r3, 0 -/* 80290260 48 00 01 7C */ b lbl_802903DC -lbl_80290264: -/* 80290264 80 1D 00 38 */ lwz r0, 0x38(r29) -/* 80290268 28 00 00 00 */ cmplwi r0, 0 -/* 8029026C 40 82 00 14 */ bne lbl_80290280 -/* 80290270 80 61 00 08 */ lwz r3, 8(r1) -/* 80290274 48 0A EE A9 */ bl OSUnlockMutex -/* 80290278 38 60 00 00 */ li r3, 0 -/* 8029027C 48 00 01 60 */ b lbl_802903DC -lbl_80290280: -/* 80290280 38 1E 00 1F */ addi r0, r30, 0x1f -/* 80290284 54 1E 00 34 */ rlwinm r30, r0, 0, 0, 0x1a -/* 80290288 7F A3 EB 78 */ mr r3, r29 -/* 8029028C 48 00 05 55 */ bl getCurOffset__7JASHeapFv -/* 80290290 7C 7B 1B 78 */ mr r27, r3 -/* 80290294 7F A3 EB 78 */ mr r3, r29 -/* 80290298 48 00 04 E5 */ bl getTailOffset__7JASHeapFv -/* 8029029C 7C 1B F2 14 */ add r0, r27, r30 -/* 802902A0 7C 00 18 40 */ cmplw r0, r3 -/* 802902A4 41 81 00 3C */ bgt lbl_802902E0 -/* 802902A8 7F A3 EB 78 */ mr r3, r29 -/* 802902AC 48 00 04 45 */ bl getTailHeap__7JASHeapFv -/* 802902B0 7C 65 1B 78 */ mr r5, r3 -/* 802902B4 7F A3 EB 78 */ mr r3, r29 -/* 802902B8 7F 84 E3 78 */ mr r4, r28 -/* 802902BC 80 1D 00 38 */ lwz r0, 0x38(r29) -/* 802902C0 7C C0 DA 14 */ add r6, r0, r27 -/* 802902C4 7F C7 F3 78 */ mr r7, r30 -/* 802902C8 39 00 00 00 */ li r8, 0 -/* 802902CC 48 00 03 3D */ bl insertChild__7JASHeapFP7JASHeapP7JASHeapPvUlb -/* 802902D0 80 61 00 08 */ lwz r3, 8(r1) -/* 802902D4 48 0A EE 49 */ bl OSUnlockMutex -/* 802902D8 38 60 00 01 */ li r3, 1 -/* 802902DC 48 00 01 00 */ b lbl_802903DC -lbl_802902E0: -/* 802902E0 39 40 FF FF */ li r10, -1 -/* 802902E4 81 1D 00 38 */ lwz r8, 0x38(r29) -/* 802902E8 7D 04 43 78 */ mr r4, r8 -/* 802902EC 39 60 00 00 */ li r11, 0 -/* 802902F0 38 A0 00 00 */ li r5, 0 -/* 802902F4 80 FD 00 00 */ lwz r7, 0(r29) -/* 802902F8 28 07 00 00 */ cmplwi r7, 0 -/* 802902FC 41 82 00 08 */ beq lbl_80290304 -/* 80290300 38 E7 FF F4 */ addi r7, r7, -12 -lbl_80290304: -/* 80290304 7C C8 1A 14 */ add r6, r8, r3 -/* 80290308 48 00 00 54 */ b lbl_8029035C -lbl_8029030C: -/* 8029030C 7C 04 30 40 */ cmplw r4, r6 -/* 80290310 40 80 00 54 */ bge lbl_80290364 -/* 80290314 81 27 00 0C */ lwz r9, 0xc(r7) -/* 80290318 80 09 00 38 */ lwz r0, 0x38(r9) -/* 8029031C 7C 04 00 50 */ subf r0, r4, r0 -/* 80290320 7C 00 F0 40 */ cmplw r0, r30 -/* 80290324 41 80 00 1C */ blt lbl_80290340 -/* 80290328 7C 00 50 40 */ cmplw r0, r10 -/* 8029032C 40 80 00 14 */ bge lbl_80290340 -/* 80290330 7D 25 4B 78 */ mr r5, r9 -/* 80290334 7C 9F 23 78 */ mr r31, r4 -/* 80290338 7C 0A 03 78 */ mr r10, r0 -/* 8029033C 39 60 00 01 */ li r11, 1 -lbl_80290340: -/* 80290340 80 89 00 38 */ lwz r4, 0x38(r9) -/* 80290344 80 09 00 3C */ lwz r0, 0x3c(r9) -/* 80290348 7C 84 02 14 */ add r4, r4, r0 -/* 8029034C 80 E7 00 18 */ lwz r7, 0x18(r7) -/* 80290350 28 07 00 00 */ cmplwi r7, 0 -/* 80290354 41 82 00 08 */ beq lbl_8029035C -/* 80290358 38 E7 FF F4 */ addi r7, r7, -12 -lbl_8029035C: -/* 8029035C 28 07 00 00 */ cmplwi r7, 0 -/* 80290360 40 82 FF AC */ bne lbl_8029030C -lbl_80290364: -/* 80290364 7C 04 40 40 */ cmplw r4, r8 -/* 80290368 41 82 00 38 */ beq lbl_802903A0 -/* 8029036C 7C 08 1A 14 */ add r0, r8, r3 -/* 80290370 7C 04 00 40 */ cmplw r4, r0 -/* 80290374 40 80 00 2C */ bge lbl_802903A0 -/* 80290378 80 1D 00 3C */ lwz r0, 0x3c(r29) -/* 8029037C 7C 08 02 14 */ add r0, r8, r0 -/* 80290380 7C 04 00 50 */ subf r0, r4, r0 -/* 80290384 7C 00 F0 40 */ cmplw r0, r30 -/* 80290388 41 80 00 18 */ blt lbl_802903A0 -/* 8029038C 7C 00 50 40 */ cmplw r0, r10 -/* 80290390 40 80 00 10 */ bge lbl_802903A0 -/* 80290394 38 A0 00 00 */ li r5, 0 -/* 80290398 7C 9F 23 78 */ mr r31, r4 -/* 8029039C 39 60 00 01 */ li r11, 1 -lbl_802903A0: -/* 802903A0 55 60 06 3F */ clrlwi. r0, r11, 0x18 -/* 802903A4 40 82 00 14 */ bne lbl_802903B8 -/* 802903A8 80 61 00 08 */ lwz r3, 8(r1) -/* 802903AC 48 0A ED 71 */ bl OSUnlockMutex -/* 802903B0 38 60 00 00 */ li r3, 0 -/* 802903B4 48 00 00 28 */ b lbl_802903DC -lbl_802903B8: -/* 802903B8 7F A3 EB 78 */ mr r3, r29 -/* 802903BC 7F 84 E3 78 */ mr r4, r28 -/* 802903C0 7F E6 FB 78 */ mr r6, r31 -/* 802903C4 7F C7 F3 78 */ mr r7, r30 -/* 802903C8 39 00 00 00 */ li r8, 0 -/* 802903CC 48 00 02 3D */ bl insertChild__7JASHeapFP7JASHeapP7JASHeapPvUlb -/* 802903D0 80 61 00 08 */ lwz r3, 8(r1) -/* 802903D4 48 0A ED 49 */ bl OSUnlockMutex -/* 802903D8 38 60 00 01 */ li r3, 1 -lbl_802903DC: -/* 802903DC 39 61 00 30 */ addi r11, r1, 0x30 -/* 802903E0 48 0D 1E 41 */ bl _restgpr_27 -/* 802903E4 80 01 00 34 */ lwz r0, 0x34(r1) -/* 802903E8 7C 08 03 A6 */ mtlr r0 -/* 802903EC 38 21 00 30 */ addi r1, r1, 0x30 -/* 802903F0 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASHeapCtrl/getAramHeap__9JASKernelFv.s b/asm/JSystem/JAudio2/JASHeapCtrl/getAramHeap__9JASKernelFv.s deleted file mode 100644 index 4aec7e2e3e1..00000000000 --- a/asm/JSystem/JAudio2/JASHeapCtrl/getAramHeap__9JASKernelFv.s +++ /dev/null @@ -1,4 +0,0 @@ -lbl_80290B08: -/* 80290B08 3C 60 80 43 */ lis r3, audioAramHeap__9JASKernel@ha /* 0x804315DC@ha */ -/* 80290B0C 38 63 15 DC */ addi r3, r3, audioAramHeap__9JASKernel@l /* 0x804315DC@l */ -/* 80290B10 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASHeapCtrl/getCurOffset__7JASHeapFv.s b/asm/JSystem/JAudio2/JASHeapCtrl/getCurOffset__7JASHeapFv.s deleted file mode 100644 index 177026f801c..00000000000 --- a/asm/JSystem/JAudio2/JASHeapCtrl/getCurOffset__7JASHeapFv.s +++ /dev/null @@ -1,29 +0,0 @@ -lbl_802907E0: -/* 802907E0 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 802907E4 7C 08 02 A6 */ mflr r0 -/* 802907E8 90 01 00 24 */ stw r0, 0x24(r1) -/* 802907EC 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 802907F0 7C 7F 1B 78 */ mr r31, r3 -/* 802907F4 38 7F 00 1C */ addi r3, r31, 0x1c -/* 802907F8 90 61 00 08 */ stw r3, 8(r1) -/* 802907FC 48 0A E8 45 */ bl OSLockMutex -/* 80290800 80 BF 00 40 */ lwz r5, 0x40(r31) -/* 80290804 28 05 00 00 */ cmplwi r5, 0 -/* 80290808 40 82 00 0C */ bne lbl_80290814 -/* 8029080C 3B E0 00 00 */ li r31, 0 -/* 80290810 48 00 00 18 */ b lbl_80290828 -lbl_80290814: -/* 80290814 80 9F 00 38 */ lwz r4, 0x38(r31) -/* 80290818 80 65 00 38 */ lwz r3, 0x38(r5) -/* 8029081C 80 05 00 3C */ lwz r0, 0x3c(r5) -/* 80290820 7C 03 02 14 */ add r0, r3, r0 -/* 80290824 7F E4 00 50 */ subf r31, r4, r0 -lbl_80290828: -/* 80290828 80 61 00 08 */ lwz r3, 8(r1) -/* 8029082C 48 0A E8 F1 */ bl OSUnlockMutex -/* 80290830 7F E3 FB 78 */ mr r3, r31 -/* 80290834 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 80290838 80 01 00 24 */ lwz r0, 0x24(r1) -/* 8029083C 7C 08 03 A6 */ mtlr r0 -/* 80290840 38 21 00 20 */ addi r1, r1, 0x20 -/* 80290844 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASHeapCtrl/getTailHeap__7JASHeapFv.s b/asm/JSystem/JAudio2/JASHeapCtrl/getTailHeap__7JASHeapFv.s deleted file mode 100644 index 26299314007..00000000000 --- a/asm/JSystem/JAudio2/JASHeapCtrl/getTailHeap__7JASHeapFv.s +++ /dev/null @@ -1,40 +0,0 @@ -lbl_802906F0: -/* 802906F0 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 802906F4 7C 08 02 A6 */ mflr r0 -/* 802906F8 90 01 00 24 */ stw r0, 0x24(r1) -/* 802906FC 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 80290700 7C 7F 1B 78 */ mr r31, r3 -/* 80290704 38 7F 00 1C */ addi r3, r31, 0x1c -/* 80290708 90 61 00 08 */ stw r3, 8(r1) -/* 8029070C 48 0A E9 35 */ bl OSLockMutex -/* 80290710 80 7F 00 40 */ lwz r3, 0x40(r31) -/* 80290714 28 03 00 00 */ cmplwi r3, 0 -/* 80290718 40 82 00 18 */ bne lbl_80290730 -/* 8029071C 80 7F 00 00 */ lwz r3, 0(r31) -/* 80290720 28 03 00 00 */ cmplwi r3, 0 -/* 80290724 41 82 00 1C */ beq lbl_80290740 -/* 80290728 38 63 FF F4 */ addi r3, r3, -12 -/* 8029072C 48 00 00 14 */ b lbl_80290740 -lbl_80290730: -/* 80290730 80 63 00 18 */ lwz r3, 0x18(r3) -/* 80290734 28 03 00 00 */ cmplwi r3, 0 -/* 80290738 41 82 00 08 */ beq lbl_80290740 -/* 8029073C 38 63 FF F4 */ addi r3, r3, -12 -lbl_80290740: -/* 80290740 28 03 00 00 */ cmplwi r3, 0 -/* 80290744 40 82 00 14 */ bne lbl_80290758 -/* 80290748 80 61 00 08 */ lwz r3, 8(r1) -/* 8029074C 48 0A E9 D1 */ bl OSUnlockMutex -/* 80290750 38 60 00 00 */ li r3, 0 -/* 80290754 48 00 00 14 */ b lbl_80290768 -lbl_80290758: -/* 80290758 83 E3 00 0C */ lwz r31, 0xc(r3) -/* 8029075C 80 61 00 08 */ lwz r3, 8(r1) -/* 80290760 48 0A E9 BD */ bl OSUnlockMutex -/* 80290764 7F E3 FB 78 */ mr r3, r31 -lbl_80290768: -/* 80290768 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 8029076C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80290770 7C 08 03 A6 */ mtlr r0 -/* 80290774 38 21 00 20 */ addi r1, r1, 0x20 -/* 80290778 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASHeapCtrl/getTailOffset__7JASHeapFv.s b/asm/JSystem/JAudio2/JASHeapCtrl/getTailOffset__7JASHeapFv.s deleted file mode 100644 index e2902b2acfe..00000000000 --- a/asm/JSystem/JAudio2/JASHeapCtrl/getTailOffset__7JASHeapFv.s +++ /dev/null @@ -1,28 +0,0 @@ -lbl_8029077C: -/* 8029077C 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80290780 7C 08 02 A6 */ mflr r0 -/* 80290784 90 01 00 24 */ stw r0, 0x24(r1) -/* 80290788 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 8029078C 7C 7F 1B 78 */ mr r31, r3 -/* 80290790 38 7F 00 1C */ addi r3, r31, 0x1c -/* 80290794 90 61 00 08 */ stw r3, 8(r1) -/* 80290798 48 0A E8 A9 */ bl OSLockMutex -/* 8029079C 7F E3 FB 78 */ mr r3, r31 -/* 802907A0 4B FF FF 51 */ bl getTailHeap__7JASHeapFv -/* 802907A4 28 03 00 00 */ cmplwi r3, 0 -/* 802907A8 40 82 00 0C */ bne lbl_802907B4 -/* 802907AC 83 FF 00 3C */ lwz r31, 0x3c(r31) -/* 802907B0 48 00 00 10 */ b lbl_802907C0 -lbl_802907B4: -/* 802907B4 80 9F 00 38 */ lwz r4, 0x38(r31) -/* 802907B8 80 03 00 38 */ lwz r0, 0x38(r3) -/* 802907BC 7F E4 00 50 */ subf r31, r4, r0 -lbl_802907C0: -/* 802907C0 80 61 00 08 */ lwz r3, 8(r1) -/* 802907C4 48 0A E9 59 */ bl OSUnlockMutex -/* 802907C8 7F E3 FB 78 */ mr r3, r31 -/* 802907CC 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 802907D0 80 01 00 24 */ lwz r0, 0x24(r1) -/* 802907D4 7C 08 03 A6 */ mtlr r0 -/* 802907D8 38 21 00 20 */ addi r1, r1, 0x20 -/* 802907DC 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASHeapCtrl/initRootHeap__7JASHeapFPvUl.s b/asm/JSystem/JAudio2/JASHeapCtrl/initRootHeap__7JASHeapFPvUl.s deleted file mode 100644 index 320b19c45ce..00000000000 --- a/asm/JSystem/JAudio2/JASHeapCtrl/initRootHeap__7JASHeapFPvUl.s +++ /dev/null @@ -1,29 +0,0 @@ -lbl_802901AC: -/* 802901AC 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 802901B0 7C 08 02 A6 */ mflr r0 -/* 802901B4 90 01 00 24 */ stw r0, 0x24(r1) -/* 802901B8 39 61 00 20 */ addi r11, r1, 0x20 -/* 802901BC 48 0D 20 21 */ bl _savegpr_29 -/* 802901C0 7C 7D 1B 78 */ mr r29, r3 -/* 802901C4 7C 9E 23 78 */ mr r30, r4 -/* 802901C8 7C BF 2B 78 */ mr r31, r5 -/* 802901CC 38 7D 00 1C */ addi r3, r29, 0x1c -/* 802901D0 90 61 00 08 */ stw r3, 8(r1) -/* 802901D4 48 0A EE 6D */ bl OSLockMutex -/* 802901D8 38 1E 00 1F */ addi r0, r30, 0x1f -/* 802901DC 54 00 00 34 */ rlwinm r0, r0, 0, 0, 0x1a -/* 802901E0 90 1D 00 38 */ stw r0, 0x38(r29) -/* 802901E4 38 00 00 00 */ li r0, 0 -/* 802901E8 90 1D 00 40 */ stw r0, 0x40(r29) -/* 802901EC 80 1D 00 38 */ lwz r0, 0x38(r29) -/* 802901F0 7C 1E 00 50 */ subf r0, r30, r0 -/* 802901F4 7C 00 F8 50 */ subf r0, r0, r31 -/* 802901F8 90 1D 00 3C */ stw r0, 0x3c(r29) -/* 802901FC 80 61 00 08 */ lwz r3, 8(r1) -/* 80290200 48 0A EF 1D */ bl OSUnlockMutex -/* 80290204 39 61 00 20 */ addi r11, r1, 0x20 -/* 80290208 48 0D 20 21 */ bl _restgpr_29 -/* 8029020C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80290210 7C 08 03 A6 */ mtlr r0 -/* 80290214 38 21 00 20 */ addi r1, r1, 0x20 -/* 80290218 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASHeapCtrl/setupAramHeap__9JASKernelFUlUl.s b/asm/JSystem/JAudio2/JASHeapCtrl/setupAramHeap__9JASKernelFUlUl.s deleted file mode 100644 index a40b3cd9119..00000000000 --- a/asm/JSystem/JAudio2/JASHeapCtrl/setupAramHeap__9JASKernelFUlUl.s +++ /dev/null @@ -1,15 +0,0 @@ -lbl_80290AD0: -/* 80290AD0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80290AD4 7C 08 02 A6 */ mflr r0 -/* 80290AD8 90 01 00 14 */ stw r0, 0x14(r1) -/* 80290ADC 7C 60 1B 78 */ mr r0, r3 -/* 80290AE0 7C 85 23 78 */ mr r5, r4 -/* 80290AE4 90 0D 8C 94 */ stw r0, sAramBase__9JASKernel(r13) -/* 80290AE8 3C 60 80 43 */ lis r3, audioAramHeap__9JASKernel@ha /* 0x804315DC@ha */ -/* 80290AEC 38 63 15 DC */ addi r3, r3, audioAramHeap__9JASKernel@l /* 0x804315DC@l */ -/* 80290AF0 7C 04 03 78 */ mr r4, r0 -/* 80290AF4 4B FF F6 B9 */ bl initRootHeap__7JASHeapFPvUl -/* 80290AF8 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80290AFC 7C 08 03 A6 */ mtlr r0 -/* 80290B00 38 21 00 10 */ addi r1, r1, 0x10 -/* 80290B04 4E 80 00 20 */ blr diff --git a/include/JSystem/JAudio2/JASHeapCtrl.h b/include/JSystem/JAudio2/JASHeapCtrl.h index e58e2e75f82..b5d7f50c996 100644 --- a/include/JSystem/JAudio2/JASHeapCtrl.h +++ b/include/JSystem/JAudio2/JASHeapCtrl.h @@ -15,19 +15,20 @@ public: /* 802901AC */ void initRootHeap(void*, u32); /* 8029021C */ bool alloc(JASHeap*, u32); /* 802903F4 */ bool allocTail(JASHeap*, u32); - /* 802904E4 */ void free(); + /* 802904E4 */ bool free(); /* 80290608 */ void insertChild(JASHeap*, JASHeap*, void*, u32, bool); - /* 802906F0 */ void getTailHeap(); - /* 8029077C */ void getTailOffset(); - /* 802907E0 */ void getCurOffset(); + /* 802906F0 */ JASHeap* getTailHeap(); + /* 8029077C */ u32 getTailOffset(); + /* 802907E0 */ u32 getCurOffset(); /* 80290B54 */ ~JASHeap(); void* getBase() { return mBase; } + bool isAllocated() { return mBase; } /* 0x00 */ JSUTree mTree; /* 0x1C */ OSMutex mMutex; /* 0x34 */ JASDisposer* mDisposer; - /* 0x38 */ void* mBase; + /* 0x38 */ u8* mBase; /* 0x3c */ u32 mSize; /* 0x40 */ JASHeap* field_0x40; }; @@ -35,14 +36,14 @@ public: namespace JASKernel { /* 802909B8 */ void setupRootHeap(JKRSolidHeap*, u32); /* 80290AC0 */ JKRHeap* getSystemHeap(); - /* 80290AC8 */ u32 getCommandHeap(); + /* 80290AC8 */ void* getCommandHeap(); /* 80290AD0 */ void setupAramHeap(u32, u32); /* 80290B08 */ JASHeap* getAramHeap(); extern u8 audioAramHeap[68]; - extern u8 sAramBase[4]; + extern u32 sAramBase; extern JKRHeap* sSystemHeap; - extern u8 sCommandHeap[4]; + extern void* sCommandHeap; }; struct JASGenericMemPool { diff --git a/include/JSystem/JSupport/JSUList.h b/include/JSystem/JSupport/JSUList.h index 6adb0bc74bc..e117824b060 100644 --- a/include/JSystem/JSupport/JSUList.h +++ b/include/JSystem/JSupport/JSUList.h @@ -212,7 +212,7 @@ public: return *this; } - T& operator*() { return *this->getObject(); } + T* operator*() { return this->getObject(); } T* operator->() { return this->getObject(); } diff --git a/libs/JSystem/JAudio2/JASHeapCtrl.cpp b/libs/JSystem/JAudio2/JASHeapCtrl.cpp index 290d2c2df73..1c1dcda5100 100644 --- a/libs/JSystem/JAudio2/JASHeapCtrl.cpp +++ b/libs/JSystem/JAudio2/JASHeapCtrl.cpp @@ -4,24 +4,19 @@ // #include "JSystem/JAudio2/JASHeapCtrl.h" +#include "JSystem/JAudio2/JASMutex.h" +#include "JSystem/JKernel/JKRExpHeap.h" +#include "JSystem/JKernel/JKRSolidHeap.h" +#include "JSystem/JUtility/JUTAssert.h" #include "dol2asm.h" // // Types: // -struct JKRSolidHeap {}; - -struct JKRHeap { - static u8 sSystemHeap[4]; -}; - -struct JKRExpHeap { - /* 802CEE2C */ void create(u32, JKRHeap*, bool); -}; - struct JASDisposer { - /* 80290BCC */ void onDispose(); + virtual ~JASDisposer(); + /* 80290BCC */ virtual void onDispose(); }; // @@ -86,34 +81,80 @@ extern "C" u8 sSystemHeap__7JKRHeap[4]; // /* 80290140-802901AC 28AA80 006C+00 1/1 2/2 0/0 .text __ct__7JASHeapFP11JASDisposer */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JASHeap::JASHeap(JASDisposer* param_0) : mTree(this) { - nofralloc -#include "asm/JSystem/JAudio2/JASHeapCtrl/__ct__7JASHeapFP11JASDisposer.s" +JASHeap::JASHeap(JASDisposer* disposer) : mTree(this) { + mDisposer = disposer; + mBase = NULL; + mSize = 0; + field_0x40 = 0; + OSInitMutex(&mMutex); } -#pragma pop /* 802901AC-8029021C 28AAEC 0070+00 1/1 0/0 0/0 .text initRootHeap__7JASHeapFPvUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASHeap::initRootHeap(void* param_0, u32 param_1) { - nofralloc -#include "asm/JSystem/JAudio2/JASHeapCtrl/initRootHeap__7JASHeapFPvUl.s" +void JASHeap::initRootHeap(void* param_0, u32 param_1) { + JUT_ASSERT(97, ! isAllocated()); + JASMutexLock lock(&mMutex); + mBase = (u8*)OSRoundUpPtr(param_0, 0x20); + field_0x40 = NULL; + mSize = param_1 - (u32(mBase) - u32(param_0)); } -#pragma pop /* 8029021C-802903F4 28AB5C 01D8+00 0/0 2/2 0/0 .text alloc__7JASHeapFP7JASHeapUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm bool JASHeap::alloc(JASHeap* param_0, u32 param_1) { - nofralloc -#include "asm/JSystem/JAudio2/JASHeapCtrl/alloc__7JASHeapFP7JASHeapUl.s" +bool JASHeap::alloc(JASHeap* mother, u32 param_1) { + JUT_ASSERT(120, mother != 0); + JASMutexLock lock(&mMutex); + if (isAllocated()) { +#ifdef DEBUG + OSReport("[JASHeap::alloc] すでにヒープは確保されています。初期化してからにしてください。\n"); +#endif + return 0; + } + if (!mother->isAllocated()) { + return 0; + } + param_1 = OSRoundUp32B(param_1); + u32 local_28 = mother->getCurOffset(); + u32 local_2c = mother->getTailOffset(); + if (local_28 + param_1 <= local_2c) { + mother->insertChild(this, mother->getTailHeap(), mother->mBase + local_28, param_1, false); + return 1; + } + s32 r27 = -1; + u8* r29 = mother->mBase; + bool local_43 = false; + JASHeap* local_30 = NULL; + void* local_34; + for (JSUTreeIterator it = mother->mTree.getFirstChild(); it != mother->mTree.getEndChild(); it++) { + if (r29 >= mother->mBase + local_2c) { + break; + } + u32 local_3c = u32(it->mBase) - u32(r29); + if (local_3c >= param_1 && local_3c < r27) { + local_30 = *it; + local_34 = r29; + r27 = local_3c; + local_43 = true; + } + u32 r25 = it->mSize; + r29 = (u8*)it->mBase + r25; + } + if (r29 != mother->mBase && r29 < mother->mBase + local_2c) { + u32 local_40 = mother->mBase + mother->mSize - r29; + if (local_40 >= param_1 && local_40 < r27) { + local_30 = NULL; + local_34 = r29; + r27 = local_40; + local_43 = true; + } + } + if (!local_43) { +#ifdef DEBUG + OSReport("[JASHeap::alloc] マザーメモリが足りないので確保できません。\n"); +#endif + return 0; + } + mother->insertChild(this, local_30, local_34, param_1, false); + return 1; } -#pragma pop /* 802903F4-802904E4 28AD34 00F0+00 0/0 1/1 0/0 .text allocTail__7JASHeapFP7JASHeapUl */ #pragma push @@ -126,17 +167,77 @@ asm bool JASHeap::allocTail(JASHeap* param_0, u32 param_1) { #pragma pop /* 802904E4-80290608 28AE24 0124+00 0/0 4/4 0/0 .text free__7JASHeapFv */ +// regswap +#ifdef NONMATCHING +bool JASHeap::free() { + JASMutexLock lock(&mMutex); + if (!isAllocated()) { + return false; + } + JSUTreeIterator stack_20; + for (JSUTreeIterator it(mTree.getFirstChild()); it != mTree.getEndChild(); it = stack_20) { + stack_20 = it; + stack_20++; + it->free(); + } + JSUTree* parentTree = mTree.getParent(); + if (parentTree) { + JASHeap* parentHeap = parentTree->getObject(); + if (parentHeap->field_0x40 == this) { + JSUTreeIterator stack_28(mTree.getPrevChild()); + if (stack_28 != mTree.getEndChild()) { + parentHeap->field_0x40 = *stack_28; + } else { + parentHeap->field_0x40 = NULL; + } + } + parentTree->removeChild(&mTree); + } + mBase = NULL; + field_0x40 = NULL; + mSize = 0; + if (mDisposer) { + mDisposer->onDispose(); + } + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JASHeap::free() { +asm bool JASHeap::free() { nofralloc #include "asm/JSystem/JAudio2/JASHeapCtrl/free__7JASHeapFv.s" } #pragma pop +#endif /* 80290608-802906F0 28AF48 00E8+00 2/2 0/0 0/0 .text * insertChild__7JASHeapFP7JASHeapP7JASHeapPvUlb */ +// regalloc +#ifdef NONMATCHING +void JASHeap::insertChild(JASHeap* heap, JASHeap* next, void* param_2, u32 param_3, bool param_4) { + JUT_ASSERT(537, heap != 0); + JUT_ASSERT(538, next == 0 || &mTree == next->mTree.getParent()); + JASMutexLock lock(&mMutex); + if (!param_4) { + JSUTreeIterator it; + if (!next) { + it = mTree.getLastChild(); + } else { + it = next->mTree.getPrevChild(); + } + JASHeap* r24 = it != mTree.getEndChild() ? it.getObject() : NULL; + if (field_0x40 == r24) { + field_0x40 = heap; + } + } + heap->mBase = (u8*)param_2; + heap->mSize = param_3; + heap->field_0x40 = NULL; + mTree.insertChild(&next->mTree, &heap->mTree); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -146,46 +247,45 @@ asm void JASHeap::insertChild(JASHeap* param_0, JASHeap* param_1, void* param_2, #include "asm/JSystem/JAudio2/JASHeapCtrl/insertChild__7JASHeapFP7JASHeapP7JASHeapPvUlb.s" } #pragma pop +#endif /* 802906F0-8029077C 28B030 008C+00 3/3 0/0 0/0 .text getTailHeap__7JASHeapFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASHeap::getTailHeap() { - nofralloc -#include "asm/JSystem/JAudio2/JASHeapCtrl/getTailHeap__7JASHeapFv.s" +JASHeap* JASHeap::getTailHeap() { + JSUTreeIterator it; + JASMutexLock lock(&mMutex); + if (!field_0x40) { + it = mTree.getFirstChild(); + } else { + it = field_0x40->mTree.getNextChild(); + } + if (it == mTree.getEndChild()) { + return NULL; + } + return it.getObject(); } -#pragma pop /* 8029077C-802907E0 28B0BC 0064+00 2/2 0/0 0/0 .text getTailOffset__7JASHeapFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASHeap::getTailOffset() { - nofralloc -#include "asm/JSystem/JAudio2/JASHeapCtrl/getTailOffset__7JASHeapFv.s" +u32 JASHeap::getTailOffset() { + JASMutexLock lock(&mMutex); + JASHeap* heap = getTailHeap(); + u32 offset = !heap ? mSize : heap->mBase - mBase; + return offset; } -#pragma pop /* 802907E0-80290848 28B120 0068+00 2/2 0/0 0/0 .text getCurOffset__7JASHeapFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASHeap::getCurOffset() { - nofralloc -#include "asm/JSystem/JAudio2/JASHeapCtrl/getCurOffset__7JASHeapFv.s" +u32 JASHeap::getCurOffset() { + JASMutexLock lock(&mMutex); + u32 offset = !field_0x40 ? 0 : field_0x40->mBase + field_0x40->mSize - mBase; + return offset; } -#pragma pop /* 80290848-80290860 28B188 0018+00 0/0 32/32 0/0 .text __ct__17JASGenericMemPoolFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JASGenericMemPool::JASGenericMemPool() { - nofralloc -#include "asm/JSystem/JAudio2/JASHeapCtrl/__ct__17JASGenericMemPoolFv.s" +JASGenericMemPool::JASGenericMemPool() { + field_0x0 = NULL; + freeMemCount = 0; + totalMemCount = 0; + field_0xc = 0; } -#pragma pop /* 80290860-802908C8 28B1A0 0068+00 0/0 9/9 0/0 .text __dt__17JASGenericMemPoolFv */ #pragma push @@ -234,16 +334,27 @@ asm void JASGenericMemPool::free(void* param_0, u32 param_1) { /* ############################################################################################## */ /* 80451214-80451218 000714 0004+00 1/1 0/0 0/0 .sbss sAramBase__9JASKernel */ -u8 JASKernel::sAramBase[4]; +u32 JASKernel::sAramBase; /* 80451218-8045121C 000718 0004+00 2/1 0/0 0/0 .sbss sSystemHeap__9JASKernel */ JKRHeap* JASKernel::sSystemHeap; /* 8045121C-80451220 00071C 0004+00 2/1 0/0 0/0 .sbss sCommandHeap__9JASKernel */ -u8 JASKernel::sCommandHeap[4]; +void* JASKernel::sCommandHeap; /* 802909B8-80290AC0 28B2F8 0108+00 0/0 1/1 0/0 .text setupRootHeap__9JASKernelFP12JKRSolidHeapUl */ +// implement JASMemChunkPool +#ifdef NONMATCHING +void JASKernel::setupRootHeap(JKRSolidHeap* heap, u32 size) { + JUT_ASSERT(784, heap); + sSystemHeap = JKRExpHeap::create(size, heap, false); + JUT_ASSERT(787, sSystemHeap); + sCommandHeap = new JASMemChunkPool(); + JUT_ASSERT(790, sCommandHeap); + JASDram = heap; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -252,6 +363,7 @@ asm void JASKernel::setupRootHeap(JKRSolidHeap* param_0, u32 param_1) { #include "asm/JSystem/JAudio2/JASHeapCtrl/setupRootHeap__9JASKernelFP12JKRSolidHeapUl.s" } #pragma pop +#endif /* 80290AC0-80290AC8 -00001 0008+00 0/0 0/0 0/0 .text getSystemHeap__9JASKernelFv */ JKRHeap* JASKernel::getSystemHeap() { @@ -259,8 +371,8 @@ JKRHeap* JASKernel::getSystemHeap() { } /* 80290AC8-80290AD0 -00001 0008+00 0/0 0/0 0/0 .text getCommandHeap__9JASKernelFv */ -u32 JASKernel::getCommandHeap() { - return *(u32*)(&JASKernel::sCommandHeap); +void* JASKernel::getCommandHeap() { + return JASKernel::sCommandHeap; } /* ############################################################################################## */ @@ -271,24 +383,15 @@ static u8 lit_313[12]; u8 JASKernel::audioAramHeap[68]; /* 80290AD0-80290B08 28B410 0038+00 0/0 1/1 0/0 .text setupAramHeap__9JASKernelFUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASKernel::setupAramHeap(u32 param_0, u32 param_1) { - nofralloc -#include "asm/JSystem/JAudio2/JASHeapCtrl/setupAramHeap__9JASKernelFUlUl.s" +void JASKernel::setupAramHeap(u32 param_0, u32 param_1) { + sAramBase = param_0; + (*(JASHeap*)audioAramHeap).initRootHeap((void*)sAramBase, param_1); } -#pragma pop /* 80290B08-80290B14 28B448 000C+00 0/0 3/2 0/0 .text getAramHeap__9JASKernelFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JASHeap* JASKernel::getAramHeap() { - nofralloc -#include "asm/JSystem/JAudio2/JASHeapCtrl/getAramHeap__9JASKernelFv.s" +JASHeap* JASKernel::getAramHeap() { + return (JASHeap*)audioAramHeap; } -#pragma pop /* 80290B14-80290B54 28B454 0040+00 0/0 1/0 0/0 .text __sinit_JASHeapCtrl_cpp */ #pragma push diff --git a/libs/JSystem/JAudio2/JASTaskThread.cpp b/libs/JSystem/JAudio2/JASTaskThread.cpp index 5013df614ce..f3fc426e6ac 100644 --- a/libs/JSystem/JAudio2/JASTaskThread.cpp +++ b/libs/JSystem/JAudio2/JASTaskThread.cpp @@ -130,8 +130,8 @@ int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void const* param_1, u32 p } int iVar2 = sendMessage(pvVar1); if (iVar2 == 0) { - u32 heap = JASKernel::getCommandHeap(); - ((ThreadMemPool*)pvVar1)->free((void*)heap); + void* heap = JASKernel::getCommandHeap(); + ((ThreadMemPool*)pvVar1)->free(heap); } return iVar2; } @@ -146,8 +146,8 @@ int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void* param_1) { } int iVar2 = sendMessage(pvVar1); if (iVar2 == 0) { - u32 heap = JASKernel::getCommandHeap(); - ((ThreadMemPool*)pvVar1)->free((void*)heap); + void* heap = JASKernel::getCommandHeap(); + ((ThreadMemPool*)pvVar1)->free(heap); } return iVar2; }