summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJcw87 <Jcw87@users.noreply.github.com>2021-09-11 11:38:50 -0700
committerGitHub <noreply@github.com>2021-09-11 20:38:50 +0200
commitea42afb6f8a29f3a279b34efffcca365e308ca1e (patch)
treedea08a4b27e04f178663dd4486e73a54ae62cd1f
parentf25c24699bf57f8cfee8e959e998cc82ccb32b36 (diff)
JKRExpHeap (#146)
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/__ct__10JKRExpHeapFPvUlP7JKRHeapb.s37
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/__dt__10JKRExpHeapFv.s28
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/allocBack__Q210JKRExpHeap9CMemBlockFUlUcUcUcUc.s25
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/allocFromHead__10JKRExpHeapFUl.s66
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/allocFromTail__10JKRExpHeapFUl.s64
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/appendUsedList__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s44
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/createRoot__10JKRExpHeapFib.s33
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/create__10JKRExpHeapFPvUlP7JKRHeapb.s49
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/do_alloc__10JKRExpHeapFUli.s74
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/do_changeGroupID__10JKRExpHeapFUc.s21
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/do_destroy__10JKRExpHeapFv.s36
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/do_freeAll__10JKRExpHeapFv.s32
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/do_free__10JKRExpHeapFPv.s31
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/do_getCurrentGroupId__10JKRExpHeapFv.s3
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/do_getFreeSize__10JKRExpHeapFv.s31
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/do_getMaxFreeBlock__10JKRExpHeapFv.s33
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/do_getSize__10JKRExpHeapFPv.s36
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/do_getTotalFreeSize__10JKRExpHeapFv.s28
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/func_802CFE68.s24
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/func_802D0810.s9
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/getHeapBlock__Q210JKRExpHeap9CMemBlockFPv.s9
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/getHeapType__10JKRExpHeapFv.s4
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/getTotalUsedSize__10JKRExpHeapCFv.s29
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/getUsedSize__10JKRExpHeapCFUc.s35
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/removeFreeBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s17
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/removeUsedBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s17
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/state_compare__10JKRExpHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState.s14
-rw-r--r--asm/JSystem/JKernel/JKRExpHeap/state_register__10JKRExpHeapCFPQ27JKRHeap6TStateUl.s49
-rw-r--r--include/JSystem/JKernel/JKRExpHeap.h30
-rw-r--r--libs/JSystem/JKernel/JKRExpHeap.cpp1090
30 files changed, 871 insertions, 1127 deletions
diff --git a/asm/JSystem/JKernel/JKRExpHeap/__ct__10JKRExpHeapFPvUlP7JKRHeapb.s b/asm/JSystem/JKernel/JKRExpHeap/__ct__10JKRExpHeapFPvUlP7JKRHeapb.s
deleted file mode 100644
index 27f62203f2..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/__ct__10JKRExpHeapFPvUlP7JKRHeapb.s
+++ /dev/null
@@ -1,37 +0,0 @@
-lbl_802CF030:
-/* 802CF030 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 802CF034 7C 08 02 A6 */ mflr r0
-/* 802CF038 90 01 00 24 */ stw r0, 0x24(r1)
-/* 802CF03C 39 61 00 20 */ addi r11, r1, 0x20
-/* 802CF040 48 09 31 9D */ bl _savegpr_29
-/* 802CF044 7C 7D 1B 78 */ mr r29, r3
-/* 802CF048 7C 9E 23 78 */ mr r30, r4
-/* 802CF04C 7C BF 2B 78 */ mr r31, r5
-/* 802CF050 4B FF F0 E9 */ bl __ct__7JKRHeapFPvUlP7JKRHeapb
-/* 802CF054 3C 60 80 3D */ lis r3, __vt__10JKRExpHeap@ha /* 0x803CBFD0@ha */
-/* 802CF058 38 03 BF D0 */ addi r0, r3, __vt__10JKRExpHeap@l /* 0x803CBFD0@l */
-/* 802CF05C 90 1D 00 00 */ stw r0, 0(r29)
-/* 802CF060 38 00 00 00 */ li r0, 0
-/* 802CF064 98 1D 00 6C */ stb r0, 0x6c(r29)
-/* 802CF068 38 00 00 FF */ li r0, 0xff
-/* 802CF06C 98 1D 00 6D */ stb r0, 0x6d(r29)
-/* 802CF070 93 DD 00 78 */ stw r30, 0x78(r29)
-/* 802CF074 80 1D 00 78 */ lwz r0, 0x78(r29)
-/* 802CF078 90 1D 00 7C */ stw r0, 0x7c(r29)
-/* 802CF07C 80 7D 00 78 */ lwz r3, 0x78(r29)
-/* 802CF080 38 80 00 00 */ li r4, 0
-/* 802CF084 38 A0 00 00 */ li r5, 0
-/* 802CF088 38 DF FF F0 */ addi r6, r31, -16
-/* 802CF08C 38 E0 00 00 */ li r7, 0
-/* 802CF090 39 00 00 00 */ li r8, 0
-/* 802CF094 48 00 17 7D */ bl initiate__Q210JKRExpHeap9CMemBlockFPQ210JKRExpHeap9CMemBlockPQ210JKRExpHeap9CMemBlockUlUcUc
-/* 802CF098 38 00 00 00 */ li r0, 0
-/* 802CF09C 90 1D 00 80 */ stw r0, 0x80(r29)
-/* 802CF0A0 90 1D 00 84 */ stw r0, 0x84(r29)
-/* 802CF0A4 7F A3 EB 78 */ mr r3, r29
-/* 802CF0A8 39 61 00 20 */ addi r11, r1, 0x20
-/* 802CF0AC 48 09 31 7D */ bl _restgpr_29
-/* 802CF0B0 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 802CF0B4 7C 08 03 A6 */ mtlr r0
-/* 802CF0B8 38 21 00 20 */ addi r1, r1, 0x20
-/* 802CF0BC 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/__dt__10JKRExpHeapFv.s b/asm/JSystem/JKernel/JKRExpHeap/__dt__10JKRExpHeapFv.s
deleted file mode 100644
index 7b977b4f3d..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/__dt__10JKRExpHeapFv.s
+++ /dev/null
@@ -1,28 +0,0 @@
-lbl_802CF0C0:
-/* 802CF0C0 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 802CF0C4 7C 08 02 A6 */ mflr r0
-/* 802CF0C8 90 01 00 14 */ stw r0, 0x14(r1)
-/* 802CF0CC 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 802CF0D0 93 C1 00 08 */ stw r30, 8(r1)
-/* 802CF0D4 7C 7E 1B 79 */ or. r30, r3, r3
-/* 802CF0D8 7C 9F 23 78 */ mr r31, r4
-/* 802CF0DC 41 82 00 30 */ beq lbl_802CF10C
-/* 802CF0E0 3C 80 80 3D */ lis r4, __vt__10JKRExpHeap@ha /* 0x803CBFD0@ha */
-/* 802CF0E4 38 04 BF D0 */ addi r0, r4, __vt__10JKRExpHeap@l /* 0x803CBFD0@l */
-/* 802CF0E8 90 1E 00 00 */ stw r0, 0(r30)
-/* 802CF0EC 4B FF F9 D5 */ bl dispose__7JKRHeapFv
-/* 802CF0F0 7F C3 F3 78 */ mr r3, r30
-/* 802CF0F4 38 80 00 00 */ li r4, 0
-/* 802CF0F8 4B FF F1 6D */ bl __dt__7JKRHeapFv
-/* 802CF0FC 7F E0 07 35 */ extsh. r0, r31
-/* 802CF100 40 81 00 0C */ ble lbl_802CF10C
-/* 802CF104 7F C3 F3 78 */ mr r3, r30
-/* 802CF108 4B FF FC 35 */ bl __dl__FPv
-lbl_802CF10C:
-/* 802CF10C 7F C3 F3 78 */ mr r3, r30
-/* 802CF110 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 802CF114 83 C1 00 08 */ lwz r30, 8(r1)
-/* 802CF118 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 802CF11C 7C 08 03 A6 */ mtlr r0
-/* 802CF120 38 21 00 10 */ addi r1, r1, 0x10
-/* 802CF124 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/allocBack__Q210JKRExpHeap9CMemBlockFUlUcUcUcUc.s b/asm/JSystem/JKernel/JKRExpHeap/allocBack__Q210JKRExpHeap9CMemBlockFUlUcUcUcUc.s
deleted file mode 100644
index 00db82582c..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/allocBack__Q210JKRExpHeap9CMemBlockFUlUcUcUcUc.s
+++ /dev/null
@@ -1,25 +0,0 @@
-lbl_802D0874:
-/* 802D0874 39 40 00 00 */ li r10, 0
-/* 802D0878 80 03 00 04 */ lwz r0, 4(r3)
-/* 802D087C 39 24 00 10 */ addi r9, r4, 0x10
-/* 802D0880 7C 00 48 40 */ cmplw r0, r9
-/* 802D0884 41 80 00 34 */ blt lbl_802D08B8
-/* 802D0888 7C 03 02 14 */ add r0, r3, r0
-/* 802D088C 7D 44 00 50 */ subf r10, r4, r0
-/* 802D0890 98 EA 00 03 */ stb r7, 3(r10)
-/* 802D0894 61 00 00 80 */ ori r0, r8, 0x80
-/* 802D0898 98 0A 00 02 */ stb r0, 2(r10)
-/* 802D089C 90 8A 00 04 */ stw r4, 4(r10)
-/* 802D08A0 98 A3 00 03 */ stb r5, 3(r3)
-/* 802D08A4 98 C3 00 02 */ stb r6, 2(r3)
-/* 802D08A8 80 03 00 04 */ lwz r0, 4(r3)
-/* 802D08AC 7C 09 00 50 */ subf r0, r9, r0
-/* 802D08B0 90 03 00 04 */ stw r0, 4(r3)
-/* 802D08B4 48 00 00 10 */ b lbl_802D08C4
-lbl_802D08B8:
-/* 802D08B8 98 E3 00 03 */ stb r7, 3(r3)
-/* 802D08BC 38 00 00 80 */ li r0, 0x80
-/* 802D08C0 98 03 00 02 */ stb r0, 2(r3)
-lbl_802D08C4:
-/* 802D08C4 7D 43 53 78 */ mr r3, r10
-/* 802D08C8 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/allocFromHead__10JKRExpHeapFUl.s b/asm/JSystem/JKernel/JKRExpHeap/allocFromHead__10JKRExpHeapFUl.s
deleted file mode 100644
index b999521ca0..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/allocFromHead__10JKRExpHeapFUl.s
+++ /dev/null
@@ -1,66 +0,0 @@
-lbl_802CF490:
-/* 802CF490 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 802CF494 7C 08 02 A6 */ mflr r0
-/* 802CF498 90 01 00 14 */ stw r0, 0x14(r1)
-/* 802CF49C 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 802CF4A0 93 C1 00 08 */ stw r30, 8(r1)
-/* 802CF4A4 7C 7E 1B 78 */ mr r30, r3
-/* 802CF4A8 38 04 00 03 */ addi r0, r4, 3
-/* 802CF4AC 54 04 00 3A */ rlwinm r4, r0, 0, 0, 0x1d
-/* 802CF4B0 38 A0 FF FF */ li r5, -1
-/* 802CF4B4 3B E0 00 00 */ li r31, 0
-/* 802CF4B8 80 C3 00 78 */ lwz r6, 0x78(r3)
-/* 802CF4BC 48 00 00 38 */ b lbl_802CF4F4
-lbl_802CF4C0:
-/* 802CF4C0 80 66 00 04 */ lwz r3, 4(r6)
-/* 802CF4C4 7C 03 20 40 */ cmplw r3, r4
-/* 802CF4C8 41 80 00 28 */ blt lbl_802CF4F0
-/* 802CF4CC 7C 05 18 40 */ cmplw r5, r3
-/* 802CF4D0 40 81 00 20 */ ble lbl_802CF4F0
-/* 802CF4D4 7C 65 1B 78 */ mr r5, r3
-/* 802CF4D8 7C DF 33 78 */ mr r31, r6
-/* 802CF4DC 88 1E 00 6C */ lbz r0, 0x6c(r30)
-/* 802CF4E0 28 00 00 00 */ cmplwi r0, 0
-/* 802CF4E4 40 82 00 18 */ bne lbl_802CF4FC
-/* 802CF4E8 7C 03 20 40 */ cmplw r3, r4
-/* 802CF4EC 41 82 00 10 */ beq lbl_802CF4FC
-lbl_802CF4F0:
-/* 802CF4F0 80 C6 00 0C */ lwz r6, 0xc(r6)
-lbl_802CF4F4:
-/* 802CF4F4 28 06 00 00 */ cmplwi r6, 0
-/* 802CF4F8 40 82 FF C8 */ bne lbl_802CF4C0
-lbl_802CF4FC:
-/* 802CF4FC 28 1F 00 00 */ cmplwi r31, 0
-/* 802CF500 41 82 00 58 */ beq lbl_802CF558
-/* 802CF504 7F E3 FB 78 */ mr r3, r31
-/* 802CF508 88 BE 00 6D */ lbz r5, 0x6d(r30)
-/* 802CF50C 38 C0 00 00 */ li r6, 0
-/* 802CF510 38 E0 00 00 */ li r7, 0
-/* 802CF514 39 00 00 00 */ li r8, 0
-/* 802CF518 48 00 13 19 */ bl allocFore__Q210JKRExpHeap9CMemBlockFUlUcUcUcUc
-/* 802CF51C 7C 64 1B 79 */ or. r4, r3, r3
-/* 802CF520 41 82 00 18 */ beq lbl_802CF538
-/* 802CF524 7F C3 F3 78 */ mr r3, r30
-/* 802CF528 80 BF 00 08 */ lwz r5, 8(r31)
-/* 802CF52C 80 DF 00 0C */ lwz r6, 0xc(r31)
-/* 802CF530 48 00 09 39 */ bl setFreeBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlockPQ210JKRExpHeap9CMemBlockPQ210JKRExpHeap9CMemBlock
-/* 802CF534 48 00 00 10 */ b lbl_802CF544
-lbl_802CF538:
-/* 802CF538 7F C3 F3 78 */ mr r3, r30
-/* 802CF53C 7F E4 FB 78 */ mr r4, r31
-/* 802CF540 48 00 09 75 */ bl removeFreeBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock
-lbl_802CF544:
-/* 802CF544 7F C3 F3 78 */ mr r3, r30
-/* 802CF548 7F E4 FB 78 */ mr r4, r31
-/* 802CF54C 48 00 08 81 */ bl appendUsedList__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock
-/* 802CF550 38 7F 00 10 */ addi r3, r31, 0x10
-/* 802CF554 48 00 00 08 */ b lbl_802CF55C
-lbl_802CF558:
-/* 802CF558 38 60 00 00 */ li r3, 0
-lbl_802CF55C:
-/* 802CF55C 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 802CF560 83 C1 00 08 */ lwz r30, 8(r1)
-/* 802CF564 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 802CF568 7C 08 03 A6 */ mtlr r0
-/* 802CF56C 38 21 00 10 */ addi r1, r1, 0x10
-/* 802CF570 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/allocFromTail__10JKRExpHeapFUl.s b/asm/JSystem/JKernel/JKRExpHeap/allocFromTail__10JKRExpHeapFUl.s
deleted file mode 100644
index 37eff3efc6..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/allocFromTail__10JKRExpHeapFUl.s
+++ /dev/null
@@ -1,64 +0,0 @@
-lbl_802CF6D4:
-/* 802CF6D4 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 802CF6D8 7C 08 02 A6 */ mflr r0
-/* 802CF6DC 90 01 00 24 */ stw r0, 0x24(r1)
-/* 802CF6E0 39 61 00 20 */ addi r11, r1, 0x20
-/* 802CF6E4 48 09 2A F9 */ bl _savegpr_29
-/* 802CF6E8 7C 7D 1B 78 */ mr r29, r3
-/* 802CF6EC 38 04 00 03 */ addi r0, r4, 3
-/* 802CF6F0 54 04 00 3A */ rlwinm r4, r0, 0, 0, 0x1d
-/* 802CF6F4 3B E0 00 00 */ li r31, 0
-/* 802CF6F8 80 63 00 7C */ lwz r3, 0x7c(r3)
-/* 802CF6FC 48 00 00 1C */ b lbl_802CF718
-lbl_802CF700:
-/* 802CF700 80 03 00 04 */ lwz r0, 4(r3)
-/* 802CF704 7C 00 20 40 */ cmplw r0, r4
-/* 802CF708 41 80 00 0C */ blt lbl_802CF714
-/* 802CF70C 7C 7F 1B 78 */ mr r31, r3
-/* 802CF710 48 00 00 10 */ b lbl_802CF720
-lbl_802CF714:
-/* 802CF714 80 63 00 08 */ lwz r3, 8(r3)
-lbl_802CF718:
-/* 802CF718 28 03 00 00 */ cmplwi r3, 0
-/* 802CF71C 40 82 FF E4 */ bne lbl_802CF700
-lbl_802CF720:
-/* 802CF720 28 1F 00 00 */ cmplwi r31, 0
-/* 802CF724 41 82 00 6C */ beq lbl_802CF790
-/* 802CF728 7F E3 FB 78 */ mr r3, r31
-/* 802CF72C 38 A0 00 00 */ li r5, 0
-/* 802CF730 38 C0 00 00 */ li r6, 0
-/* 802CF734 88 FD 00 6D */ lbz r7, 0x6d(r29)
-/* 802CF738 39 00 00 00 */ li r8, 0
-/* 802CF73C 48 00 11 39 */ bl allocBack__Q210JKRExpHeap9CMemBlockFUlUcUcUcUc
-/* 802CF740 7C 7E 1B 79 */ or. r30, r3, r3
-/* 802CF744 41 82 00 0C */ beq lbl_802CF750
-/* 802CF748 7F E4 FB 78 */ mr r4, r31
-/* 802CF74C 48 00 00 18 */ b lbl_802CF764
-lbl_802CF750:
-/* 802CF750 7F A3 EB 78 */ mr r3, r29
-/* 802CF754 7F E4 FB 78 */ mr r4, r31
-/* 802CF758 48 00 07 5D */ bl removeFreeBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock
-/* 802CF75C 7F FE FB 78 */ mr r30, r31
-/* 802CF760 38 80 00 00 */ li r4, 0
-lbl_802CF764:
-/* 802CF764 28 04 00 00 */ cmplwi r4, 0
-/* 802CF768 41 82 00 14 */ beq lbl_802CF77C
-/* 802CF76C 7F A3 EB 78 */ mr r3, r29
-/* 802CF770 80 BF 00 08 */ lwz r5, 8(r31)
-/* 802CF774 80 DF 00 0C */ lwz r6, 0xc(r31)
-/* 802CF778 48 00 06 F1 */ bl setFreeBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlockPQ210JKRExpHeap9CMemBlockPQ210JKRExpHeap9CMemBlock
-lbl_802CF77C:
-/* 802CF77C 7F A3 EB 78 */ mr r3, r29
-/* 802CF780 7F C4 F3 78 */ mr r4, r30
-/* 802CF784 48 00 06 49 */ bl appendUsedList__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock
-/* 802CF788 38 7E 00 10 */ addi r3, r30, 0x10
-/* 802CF78C 48 00 00 08 */ b lbl_802CF794
-lbl_802CF790:
-/* 802CF790 38 60 00 00 */ li r3, 0
-lbl_802CF794:
-/* 802CF794 39 61 00 20 */ addi r11, r1, 0x20
-/* 802CF798 48 09 2A 91 */ bl _restgpr_29
-/* 802CF79C 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 802CF7A0 7C 08 03 A6 */ mtlr r0
-/* 802CF7A4 38 21 00 20 */ addi r1, r1, 0x20
-/* 802CF7A8 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/appendUsedList__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s b/asm/JSystem/JKernel/JKRExpHeap/appendUsedList__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s
deleted file mode 100644
index 6f4211587c..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/appendUsedList__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s
+++ /dev/null
@@ -1,44 +0,0 @@
-lbl_802CFDCC:
-/* 802CFDCC 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 802CFDD0 7C 08 02 A6 */ mflr r0
-/* 802CFDD4 90 01 00 14 */ stw r0, 0x14(r1)
-/* 802CFDD8 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 802CFDDC 93 C1 00 08 */ stw r30, 8(r1)
-/* 802CFDE0 7C 7E 1B 78 */ mr r30, r3
-/* 802CFDE4 7C 9F 23 79 */ or. r31, r4, r4
-/* 802CFDE8 40 82 00 24 */ bne lbl_802CFE0C
-/* 802CFDEC 3C 60 80 3A */ lis r3, JKRExpHeap__stringBase0@ha /* 0x8039CAF0@ha */
-/* 802CFDF0 38 C3 CA F0 */ addi r6, r3, JKRExpHeap__stringBase0@l /* 0x8039CAF0@l */
-/* 802CFDF4 38 66 00 25 */ addi r3, r6, 0x25
-/* 802CFDF8 38 80 06 20 */ li r4, 0x620
-/* 802CFDFC 38 A6 00 34 */ addi r5, r6, 0x34
-/* 802CFE00 38 C6 00 37 */ addi r6, r6, 0x37
-/* 802CFE04 4C C6 31 82 */ crclr 6
-/* 802CFE08 48 01 23 F5 */ bl panic_f__12JUTExceptionFPCciPCce
-lbl_802CFE0C:
-/* 802CFE0C 80 7E 00 84 */ lwz r3, 0x84(r30)
-/* 802CFE10 38 00 48 4D */ li r0, 0x484d
-/* 802CFE14 B0 1F 00 00 */ sth r0, 0(r31)
-/* 802CFE18 28 03 00 00 */ cmplwi r3, 0
-/* 802CFE1C 41 82 00 10 */ beq lbl_802CFE2C
-/* 802CFE20 93 E3 00 0C */ stw r31, 0xc(r3)
-/* 802CFE24 90 7F 00 08 */ stw r3, 8(r31)
-/* 802CFE28 48 00 00 0C */ b lbl_802CFE34
-lbl_802CFE2C:
-/* 802CFE2C 38 00 00 00 */ li r0, 0
-/* 802CFE30 90 1F 00 08 */ stw r0, 8(r31)
-lbl_802CFE34:
-/* 802CFE34 93 FE 00 84 */ stw r31, 0x84(r30)
-/* 802CFE38 80 1E 00 80 */ lwz r0, 0x80(r30)
-/* 802CFE3C 28 00 00 00 */ cmplwi r0, 0
-/* 802CFE40 40 82 00 08 */ bne lbl_802CFE48
-/* 802CFE44 93 FE 00 80 */ stw r31, 0x80(r30)
-lbl_802CFE48:
-/* 802CFE48 38 00 00 00 */ li r0, 0
-/* 802CFE4C 90 1F 00 0C */ stw r0, 0xc(r31)
-/* 802CFE50 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 802CFE54 83 C1 00 08 */ lwz r30, 8(r1)
-/* 802CFE58 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 802CFE5C 7C 08 03 A6 */ mtlr r0
-/* 802CFE60 38 21 00 10 */ addi r1, r1, 0x10
-/* 802CFE64 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/createRoot__10JKRExpHeapFib.s b/asm/JSystem/JKernel/JKRExpHeap/createRoot__10JKRExpHeapFib.s
deleted file mode 100644
index 0d4e6c94ce..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/createRoot__10JKRExpHeapFib.s
+++ /dev/null
@@ -1,33 +0,0 @@
-lbl_802CEDB4:
-/* 802CEDB4 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 802CEDB8 7C 08 02 A6 */ mflr r0
-/* 802CEDBC 90 01 00 24 */ stw r0, 0x24(r1)
-/* 802CEDC0 93 E1 00 1C */ stw r31, 0x1c(r1)
-/* 802CEDC4 7C 65 1B 78 */ mr r5, r3
-/* 802CEDC8 7C 9F 23 78 */ mr r31, r4
-/* 802CEDCC 38 60 00 00 */ li r3, 0
-/* 802CEDD0 80 0D 8D F8 */ lwz r0, sRootHeap__7JKRHeap(r13)
-/* 802CEDD4 28 00 00 00 */ cmplwi r0, 0
-/* 802CEDD8 40 82 00 38 */ bne lbl_802CEE10
-/* 802CEDDC 38 61 00 0C */ addi r3, r1, 0xc
-/* 802CEDE0 38 81 00 08 */ addi r4, r1, 8
-/* 802CEDE4 4B FF F5 95 */ bl initArena__7JKRHeapFPPcPUli
-/* 802CEDE8 80 61 00 0C */ lwz r3, 0xc(r1)
-/* 802CEDEC 38 83 00 90 */ addi r4, r3, 0x90
-/* 802CEDF0 80 A1 00 08 */ lwz r5, 8(r1)
-/* 802CEDF4 38 A5 FF 70 */ addi r5, r5, -144
-/* 802CEDF8 28 03 00 00 */ cmplwi r3, 0
-/* 802CEDFC 41 82 00 10 */ beq lbl_802CEE0C
-/* 802CEE00 38 C0 00 00 */ li r6, 0
-/* 802CEE04 7F E7 FB 78 */ mr r7, r31
-/* 802CEE08 48 00 02 29 */ bl __ct__10JKRExpHeapFPvUlP7JKRHeapb
-lbl_802CEE0C:
-/* 802CEE0C 90 6D 8D F8 */ stw r3, sRootHeap__7JKRHeap(r13)
-lbl_802CEE10:
-/* 802CEE10 38 00 00 01 */ li r0, 1
-/* 802CEE14 98 03 00 6E */ stb r0, 0x6e(r3)
-/* 802CEE18 83 E1 00 1C */ lwz r31, 0x1c(r1)
-/* 802CEE1C 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 802CEE20 7C 08 03 A6 */ mtlr r0
-/* 802CEE24 38 21 00 20 */ addi r1, r1, 0x20
-/* 802CEE28 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/create__10JKRExpHeapFPvUlP7JKRHeapb.s b/asm/JSystem/JKernel/JKRExpHeap/create__10JKRExpHeapFPvUlP7JKRHeapb.s
deleted file mode 100644
index 1e9541a7de..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/create__10JKRExpHeapFPvUlP7JKRHeapb.s
+++ /dev/null
@@ -1,49 +0,0 @@
-lbl_802CEF00:
-/* 802CEF00 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 802CEF04 7C 08 02 A6 */ mflr r0
-/* 802CEF08 90 01 00 24 */ stw r0, 0x24(r1)
-/* 802CEF0C 39 61 00 20 */ addi r11, r1, 0x20
-/* 802CEF10 48 09 32 CD */ bl _savegpr_29
-/* 802CEF14 7C 7D 1B 78 */ mr r29, r3
-/* 802CEF18 7C 9E 23 78 */ mr r30, r4
-/* 802CEF1C 7C DF 33 78 */ mr r31, r6
-/* 802CEF20 28 05 00 00 */ cmplwi r5, 0
-/* 802CEF24 40 82 00 20 */ bne lbl_802CEF44
-/* 802CEF28 80 6D 8D F8 */ lwz r3, sRootHeap__7JKRHeap(r13)
-/* 802CEF2C 7F A4 EB 78 */ mr r4, r29
-/* 802CEF30 4B FF F9 65 */ bl find__7JKRHeapCFPv
-/* 802CEF34 7C 66 1B 79 */ or. r6, r3, r3
-/* 802CEF38 40 82 00 10 */ bne lbl_802CEF48
-/* 802CEF3C 38 60 00 00 */ li r3, 0
-/* 802CEF40 48 00 00 54 */ b lbl_802CEF94
-lbl_802CEF44:
-/* 802CEF44 7C A6 2B 78 */ mr r6, r5
-lbl_802CEF48:
-/* 802CEF48 38 60 00 00 */ li r3, 0
-/* 802CEF4C 28 1E 00 90 */ cmplwi r30, 0x90
-/* 802CEF50 40 80 00 0C */ bge lbl_802CEF5C
-/* 802CEF54 38 60 00 00 */ li r3, 0
-/* 802CEF58 48 00 00 3C */ b lbl_802CEF94
-lbl_802CEF5C:
-/* 802CEF5C 38 9D 00 90 */ addi r4, r29, 0x90
-/* 802CEF60 7C 1D F2 14 */ add r0, r29, r30
-/* 802CEF64 7C 04 00 50 */ subf r0, r4, r0
-/* 802CEF68 54 05 00 36 */ rlwinm r5, r0, 0, 0, 0x1b
-/* 802CEF6C 28 1D 00 00 */ cmplwi r29, 0
-/* 802CEF70 41 82 00 14 */ beq lbl_802CEF84
-/* 802CEF74 7F A3 EB 78 */ mr r3, r29
-/* 802CEF78 41 82 00 0C */ beq lbl_802CEF84
-/* 802CEF7C 7F E7 FB 78 */ mr r7, r31
-/* 802CEF80 48 00 00 B1 */ bl __ct__10JKRExpHeapFPvUlP7JKRHeapb
-lbl_802CEF84:
-/* 802CEF84 38 00 00 01 */ li r0, 1
-/* 802CEF88 98 03 00 6E */ stb r0, 0x6e(r3)
-/* 802CEF8C 93 A3 00 70 */ stw r29, 0x70(r3)
-/* 802CEF90 93 C3 00 74 */ stw r30, 0x74(r3)
-lbl_802CEF94:
-/* 802CEF94 39 61 00 20 */ addi r11, r1, 0x20
-/* 802CEF98 48 09 32 91 */ bl _restgpr_29
-/* 802CEF9C 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 802CEFA0 7C 08 03 A6 */ mtlr r0
-/* 802CEFA4 38 21 00 20 */ addi r1, r1, 0x20
-/* 802CEFA8 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/do_alloc__10JKRExpHeapFUli.s b/asm/JSystem/JKernel/JKRExpHeap/do_alloc__10JKRExpHeapFUli.s
deleted file mode 100644
index af13d3957c..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/do_alloc__10JKRExpHeapFUli.s
+++ /dev/null
@@ -1,74 +0,0 @@
-lbl_802CF128:
-/* 802CF128 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 802CF12C 7C 08 02 A6 */ mflr r0
-/* 802CF130 90 01 00 24 */ stw r0, 0x24(r1)
-/* 802CF134 39 61 00 20 */ addi r11, r1, 0x20
-/* 802CF138 48 09 30 A1 */ bl _savegpr_28
-/* 802CF13C 7C 7C 1B 78 */ mr r28, r3
-/* 802CF140 7C 9D 23 78 */ mr r29, r4
-/* 802CF144 7C BE 2B 78 */ mr r30, r5
-/* 802CF148 38 7C 00 18 */ addi r3, r28, 0x18
-/* 802CF14C 48 06 FE F5 */ bl OSLockMutex
-/* 802CF150 28 1D 00 04 */ cmplwi r29, 4
-/* 802CF154 40 80 00 08 */ bge lbl_802CF15C
-/* 802CF158 3B A0 00 04 */ li r29, 4
-lbl_802CF15C:
-/* 802CF15C 2C 1E 00 00 */ cmpwi r30, 0
-/* 802CF160 41 80 00 38 */ blt lbl_802CF198
-/* 802CF164 2C 1E 00 04 */ cmpwi r30, 4
-/* 802CF168 41 81 00 18 */ bgt lbl_802CF180
-/* 802CF16C 7F 83 E3 78 */ mr r3, r28
-/* 802CF170 7F A4 EB 78 */ mr r4, r29
-/* 802CF174 48 00 03 1D */ bl allocFromHead__10JKRExpHeapFUl
-/* 802CF178 7C 7F 1B 78 */ mr r31, r3
-/* 802CF17C 48 00 00 4C */ b lbl_802CF1C8
-lbl_802CF180:
-/* 802CF180 7F 83 E3 78 */ mr r3, r28
-/* 802CF184 7F A4 EB 78 */ mr r4, r29
-/* 802CF188 7F C5 F3 78 */ mr r5, r30
-/* 802CF18C 48 00 00 A9 */ bl allocFromHead__10JKRExpHeapFUli
-/* 802CF190 7C 7F 1B 78 */ mr r31, r3
-/* 802CF194 48 00 00 34 */ b lbl_802CF1C8
-lbl_802CF198:
-/* 802CF198 7C BE 00 D0 */ neg r5, r30
-/* 802CF19C 2C 05 00 04 */ cmpwi r5, 4
-/* 802CF1A0 41 81 00 18 */ bgt lbl_802CF1B8
-/* 802CF1A4 7F 83 E3 78 */ mr r3, r28
-/* 802CF1A8 7F A4 EB 78 */ mr r4, r29
-/* 802CF1AC 48 00 05 29 */ bl allocFromTail__10JKRExpHeapFUl
-/* 802CF1B0 7C 7F 1B 78 */ mr r31, r3
-/* 802CF1B4 48 00 00 14 */ b lbl_802CF1C8
-lbl_802CF1B8:
-/* 802CF1B8 7F 83 E3 78 */ mr r3, r28
-/* 802CF1BC 7F A4 EB 78 */ mr r4, r29
-/* 802CF1C0 48 00 03 B5 */ bl allocFromTail__10JKRExpHeapFUli
-/* 802CF1C4 7C 7F 1B 78 */ mr r31, r3
-lbl_802CF1C8:
-/* 802CF1C8 28 1F 00 00 */ cmplwi r31, 0
-/* 802CF1CC 40 82 00 44 */ bne lbl_802CF210
-/* 802CF1D0 3C 60 80 3A */ lis r3, JKRExpHeap__stringBase0@ha /* 0x8039CAF0@ha */
-/* 802CF1D4 38 63 CA F0 */ addi r3, r3, JKRExpHeap__stringBase0@l /* 0x8039CAF0@l */
-/* 802CF1D8 7F A4 EB 78 */ mr r4, r29
-/* 802CF1DC 4C C6 31 82 */ crclr 6
-/* 802CF1E0 48 01 94 9D */ bl JUTWarningConsole_f
-/* 802CF1E4 88 1C 00 68 */ lbz r0, 0x68(r28)
-/* 802CF1E8 28 00 00 01 */ cmplwi r0, 1
-/* 802CF1EC 40 82 00 24 */ bne lbl_802CF210
-/* 802CF1F0 81 8D 8D FC */ lwz r12, mErrorHandler__7JKRHeap(r13)
-/* 802CF1F4 28 0C 00 00 */ cmplwi r12, 0
-/* 802CF1F8 41 82 00 18 */ beq lbl_802CF210
-/* 802CF1FC 7F 83 E3 78 */ mr r3, r28
-/* 802CF200 7F A4 EB 78 */ mr r4, r29
-/* 802CF204 7F C5 F3 78 */ mr r5, r30
-/* 802CF208 7D 89 03 A6 */ mtctr r12
-/* 802CF20C 4E 80 04 21 */ bctrl
-lbl_802CF210:
-/* 802CF210 38 7C 00 18 */ addi r3, r28, 0x18
-/* 802CF214 48 06 FF 09 */ bl OSUnlockMutex
-/* 802CF218 7F E3 FB 78 */ mr r3, r31
-/* 802CF21C 39 61 00 20 */ addi r11, r1, 0x20
-/* 802CF220 48 09 30 05 */ bl _restgpr_28
-/* 802CF224 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 802CF228 7C 08 03 A6 */ mtlr r0
-/* 802CF22C 38 21 00 20 */ addi r1, r1, 0x20
-/* 802CF230 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/do_changeGroupID__10JKRExpHeapFUc.s b/asm/JSystem/JKernel/JKRExpHeap/do_changeGroupID__10JKRExpHeapFUc.s
deleted file mode 100644
index a1a69faabd..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/do_changeGroupID__10JKRExpHeapFUc.s
+++ /dev/null
@@ -1,21 +0,0 @@
-lbl_802CF928:
-/* 802CF928 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 802CF92C 7C 08 02 A6 */ mflr r0
-/* 802CF930 90 01 00 24 */ stw r0, 0x24(r1)
-/* 802CF934 39 61 00 20 */ addi r11, r1, 0x20
-/* 802CF938 48 09 28 A5 */ bl _savegpr_29
-/* 802CF93C 7C 7D 1B 78 */ mr r29, r3
-/* 802CF940 7C 9E 23 78 */ mr r30, r4
-/* 802CF944 38 7D 00 18 */ addi r3, r29, 0x18
-/* 802CF948 48 06 F6 F9 */ bl OSLockMutex
-/* 802CF94C 8B FD 00 6D */ lbz r31, 0x6d(r29)
-/* 802CF950 9B DD 00 6D */ stb r30, 0x6d(r29)
-/* 802CF954 38 7D 00 18 */ addi r3, r29, 0x18
-/* 802CF958 48 06 F7 C5 */ bl OSUnlockMutex
-/* 802CF95C 7F E3 FB 78 */ mr r3, r31
-/* 802CF960 39 61 00 20 */ addi r11, r1, 0x20
-/* 802CF964 48 09 28 C5 */ bl _restgpr_29
-/* 802CF968 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 802CF96C 7C 08 03 A6 */ mtlr r0
-/* 802CF970 38 21 00 20 */ addi r1, r1, 0x20
-/* 802CF974 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/do_destroy__10JKRExpHeapFv.s b/asm/JSystem/JKernel/JKRExpHeap/do_destroy__10JKRExpHeapFv.s
deleted file mode 100644
index 63729f517c..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/do_destroy__10JKRExpHeapFv.s
+++ /dev/null
@@ -1,36 +0,0 @@
-lbl_802CEFAC:
-/* 802CEFAC 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 802CEFB0 7C 08 02 A6 */ mflr r0
-/* 802CEFB4 90 01 00 14 */ stw r0, 0x14(r1)
-/* 802CEFB8 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 802CEFBC 93 C1 00 08 */ stw r30, 8(r1)
-/* 802CEFC0 7C 7E 1B 78 */ mr r30, r3
-/* 802CEFC4 88 03 00 6E */ lbz r0, 0x6e(r3)
-/* 802CEFC8 28 00 00 00 */ cmplwi r0, 0
-/* 802CEFCC 40 82 00 38 */ bne lbl_802CF004
-/* 802CEFD0 80 9E 00 50 */ lwz r4, 0x50(r30)
-/* 802CEFD4 83 E4 00 0C */ lwz r31, 0xc(r4)
-/* 802CEFD8 28 1F 00 00 */ cmplwi r31, 0
-/* 802CEFDC 41 82 00 3C */ beq lbl_802CF018
-/* 802CEFE0 38 80 FF FF */ li r4, -1
-/* 802CEFE4 81 83 00 00 */ lwz r12, 0(r3)
-/* 802CEFE8 81 8C 00 08 */ lwz r12, 8(r12)
-/* 802CEFEC 7D 89 03 A6 */ mtctr r12
-/* 802CEFF0 4E 80 04 21 */ bctrl
-/* 802CEFF4 7F C3 F3 78 */ mr r3, r30
-/* 802CEFF8 7F E4 FB 78 */ mr r4, r31
-/* 802CEFFC 4B FF F5 05 */ bl free__7JKRHeapFPvP7JKRHeap
-/* 802CF000 48 00 00 18 */ b lbl_802CF018
-lbl_802CF004:
-/* 802CF004 38 80 FF FF */ li r4, -1
-/* 802CF008 81 83 00 00 */ lwz r12, 0(r3)
-/* 802CF00C 81 8C 00 08 */ lwz r12, 8(r12)
-/* 802CF010 7D 89 03 A6 */ mtctr r12
-/* 802CF014 4E 80 04 21 */ bctrl
-lbl_802CF018:
-/* 802CF018 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 802CF01C 83 C1 00 08 */ lwz r30, 8(r1)
-/* 802CF020 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 802CF024 7C 08 03 A6 */ mtlr r0
-/* 802CF028 38 21 00 10 */ addi r1, r1, 0x10
-/* 802CF02C 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/do_freeAll__10JKRExpHeapFv.s b/asm/JSystem/JKernel/JKRExpHeap/do_freeAll__10JKRExpHeapFv.s
deleted file mode 100644
index d8a71bc708..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/do_freeAll__10JKRExpHeapFv.s
+++ /dev/null
@@ -1,32 +0,0 @@
-lbl_802CF820:
-/* 802CF820 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 802CF824 7C 08 02 A6 */ mflr r0
-/* 802CF828 90 01 00 14 */ stw r0, 0x14(r1)
-/* 802CF82C 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 802CF830 7C 7F 1B 78 */ mr r31, r3
-/* 802CF834 38 7F 00 18 */ addi r3, r31, 0x18
-/* 802CF838 48 06 F8 09 */ bl OSLockMutex
-/* 802CF83C 7F E3 FB 78 */ mr r3, r31
-/* 802CF840 4B FF ED 35 */ bl callAllDisposer__7JKRHeapFv
-/* 802CF844 80 1F 00 30 */ lwz r0, 0x30(r31)
-/* 802CF848 90 1F 00 78 */ stw r0, 0x78(r31)
-/* 802CF84C 80 1F 00 78 */ lwz r0, 0x78(r31)
-/* 802CF850 90 1F 00 7C */ stw r0, 0x7c(r31)
-/* 802CF854 80 7F 00 78 */ lwz r3, 0x78(r31)
-/* 802CF858 38 80 00 00 */ li r4, 0
-/* 802CF85C 38 A0 00 00 */ li r5, 0
-/* 802CF860 80 DF 00 38 */ lwz r6, 0x38(r31)
-/* 802CF864 38 C6 FF F0 */ addi r6, r6, -16
-/* 802CF868 38 E0 00 00 */ li r7, 0
-/* 802CF86C 39 00 00 00 */ li r8, 0
-/* 802CF870 48 00 0F A1 */ bl initiate__Q210JKRExpHeap9CMemBlockFPQ210JKRExpHeap9CMemBlockPQ210JKRExpHeap9CMemBlockUlUcUc
-/* 802CF874 38 00 00 00 */ li r0, 0
-/* 802CF878 90 1F 00 80 */ stw r0, 0x80(r31)
-/* 802CF87C 90 1F 00 84 */ stw r0, 0x84(r31)
-/* 802CF880 38 7F 00 18 */ addi r3, r31, 0x18
-/* 802CF884 48 06 F8 99 */ bl OSUnlockMutex
-/* 802CF888 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 802CF88C 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 802CF890 7C 08 03 A6 */ mtlr r0
-/* 802CF894 38 21 00 10 */ addi r1, r1, 0x10
-/* 802CF898 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/do_free__10JKRExpHeapFPv.s b/asm/JSystem/JKernel/JKRExpHeap/do_free__10JKRExpHeapFPv.s
deleted file mode 100644
index 142f7bb808..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/do_free__10JKRExpHeapFPv.s
+++ /dev/null
@@ -1,31 +0,0 @@
-lbl_802CF7AC:
-/* 802CF7AC 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 802CF7B0 7C 08 02 A6 */ mflr r0
-/* 802CF7B4 90 01 00 14 */ stw r0, 0x14(r1)
-/* 802CF7B8 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 802CF7BC 93 C1 00 08 */ stw r30, 8(r1)
-/* 802CF7C0 7C 7E 1B 78 */ mr r30, r3
-/* 802CF7C4 7C 9F 23 78 */ mr r31, r4
-/* 802CF7C8 38 7E 00 18 */ addi r3, r30, 0x18
-/* 802CF7CC 48 06 F8 75 */ bl OSLockMutex
-/* 802CF7D0 80 1E 00 30 */ lwz r0, 0x30(r30)
-/* 802CF7D4 7C 00 F8 40 */ cmplw r0, r31
-/* 802CF7D8 41 81 00 28 */ bgt lbl_802CF800
-/* 802CF7DC 80 1E 00 34 */ lwz r0, 0x34(r30)
-/* 802CF7E0 7C 1F 00 40 */ cmplw r31, r0
-/* 802CF7E4 41 81 00 1C */ bgt lbl_802CF800
-/* 802CF7E8 7F E3 FB 78 */ mr r3, r31
-/* 802CF7EC 48 00 11 31 */ bl getHeapBlock__Q210JKRExpHeap9CMemBlockFPv
-/* 802CF7F0 28 03 00 00 */ cmplwi r3, 0
-/* 802CF7F4 41 82 00 0C */ beq lbl_802CF800
-/* 802CF7F8 7F C4 F3 78 */ mr r4, r30
-/* 802CF7FC 48 00 10 D1 */ bl free__Q210JKRExpHeap9CMemBlockFP10JKRExpHeap
-lbl_802CF800:
-/* 802CF800 38 7E 00 18 */ addi r3, r30, 0x18
-/* 802CF804 48 06 F9 19 */ bl OSUnlockMutex
-/* 802CF808 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 802CF80C 83 C1 00 08 */ lwz r30, 8(r1)
-/* 802CF810 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 802CF814 7C 08 03 A6 */ mtlr r0
-/* 802CF818 38 21 00 10 */ addi r1, r1, 0x10
-/* 802CF81C 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/do_getCurrentGroupId__10JKRExpHeapFv.s b/asm/JSystem/JKernel/JKRExpHeap/do_getCurrentGroupId__10JKRExpHeapFv.s
deleted file mode 100644
index 7451dc6625..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/do_getCurrentGroupId__10JKRExpHeapFv.s
+++ /dev/null
@@ -1,3 +0,0 @@
-lbl_802D0A1C:
-/* 802D0A1C 88 63 00 6D */ lbz r3, 0x6d(r3)
-/* 802D0A20 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/do_getFreeSize__10JKRExpHeapFv.s b/asm/JSystem/JKernel/JKRExpHeap/do_getFreeSize__10JKRExpHeapFv.s
deleted file mode 100644
index 655755bbdc..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/do_getFreeSize__10JKRExpHeapFv.s
+++ /dev/null
@@ -1,31 +0,0 @@
-lbl_802CFBA4:
-/* 802CFBA4 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 802CFBA8 7C 08 02 A6 */ mflr r0
-/* 802CFBAC 90 01 00 14 */ stw r0, 0x14(r1)
-/* 802CFBB0 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 802CFBB4 93 C1 00 08 */ stw r30, 8(r1)
-/* 802CFBB8 7C 7E 1B 78 */ mr r30, r3
-/* 802CFBBC 38 7E 00 18 */ addi r3, r30, 0x18
-/* 802CFBC0 48 06 F4 81 */ bl OSLockMutex
-/* 802CFBC4 3B E0 00 00 */ li r31, 0
-/* 802CFBC8 80 7E 00 78 */ lwz r3, 0x78(r30)
-/* 802CFBCC 48 00 00 18 */ b lbl_802CFBE4
-lbl_802CFBD0:
-/* 802CFBD0 80 03 00 04 */ lwz r0, 4(r3)
-/* 802CFBD4 7C 1F 00 00 */ cmpw r31, r0
-/* 802CFBD8 40 80 00 08 */ bge lbl_802CFBE0
-/* 802CFBDC 7C 1F 03 78 */ mr r31, r0
-lbl_802CFBE0:
-/* 802CFBE0 80 63 00 0C */ lwz r3, 0xc(r3)
-lbl_802CFBE4:
-/* 802CFBE4 28 03 00 00 */ cmplwi r3, 0
-/* 802CFBE8 40 82 FF E8 */ bne lbl_802CFBD0
-/* 802CFBEC 38 7E 00 18 */ addi r3, r30, 0x18
-/* 802CFBF0 48 06 F5 2D */ bl OSUnlockMutex
-/* 802CFBF4 7F E3 FB 78 */ mr r3, r31
-/* 802CFBF8 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 802CFBFC 83 C1 00 08 */ lwz r30, 8(r1)
-/* 802CFC00 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 802CFC04 7C 08 03 A6 */ mtlr r0
-/* 802CFC08 38 21 00 10 */ addi r1, r1, 0x10
-/* 802CFC0C 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/do_getMaxFreeBlock__10JKRExpHeapFv.s b/asm/JSystem/JKernel/JKRExpHeap/do_getMaxFreeBlock__10JKRExpHeapFv.s
deleted file mode 100644
index ee74522270..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/do_getMaxFreeBlock__10JKRExpHeapFv.s
+++ /dev/null
@@ -1,33 +0,0 @@
-lbl_802CFC10:
-/* 802CFC10 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 802CFC14 7C 08 02 A6 */ mflr r0
-/* 802CFC18 90 01 00 14 */ stw r0, 0x14(r1)
-/* 802CFC1C 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 802CFC20 93 C1 00 08 */ stw r30, 8(r1)
-/* 802CFC24 7C 7E 1B 78 */ mr r30, r3
-/* 802CFC28 38 7E 00 18 */ addi r3, r30, 0x18
-/* 802CFC2C 48 06 F4 15 */ bl OSLockMutex
-/* 802CFC30 38 60 00 00 */ li r3, 0
-/* 802CFC34 3B E0 00 00 */ li r31, 0
-/* 802CFC38 80 9E 00 78 */ lwz r4, 0x78(r30)
-/* 802CFC3C 48 00 00 1C */ b lbl_802CFC58
-lbl_802CFC40:
-/* 802CFC40 80 04 00 04 */ lwz r0, 4(r4)
-/* 802CFC44 7C 03 00 00 */ cmpw r3, r0
-/* 802CFC48 40 80 00 0C */ bge lbl_802CFC54
-/* 802CFC4C 7C 03 03 78 */ mr r3, r0
-/* 802CFC50 7C 9F 23 78 */ mr r31, r4
-lbl_802CFC54:
-/* 802CFC54 80 84 00 0C */ lwz r4, 0xc(r4)
-lbl_802CFC58:
-/* 802CFC58 28 04 00 00 */ cmplwi r4, 0
-/* 802CFC5C 40 82 FF E4 */ bne lbl_802CFC40
-/* 802CFC60 38 7E 00 18 */ addi r3, r30, 0x18
-/* 802CFC64 48 06 F4 B9 */ bl OSUnlockMutex
-/* 802CFC68 7F E3 FB 78 */ mr r3, r31
-/* 802CFC6C 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 802CFC70 83 C1 00 08 */ lwz r30, 8(r1)
-/* 802CFC74 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 802CFC78 7C 08 03 A6 */ mtlr r0
-/* 802CFC7C 38 21 00 10 */ addi r1, r1, 0x10
-/* 802CFC80 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/do_getSize__10JKRExpHeapFPv.s b/asm/JSystem/JKernel/JKRExpHeap/do_getSize__10JKRExpHeapFPv.s
deleted file mode 100644
index 5598acc784..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/do_getSize__10JKRExpHeapFPv.s
+++ /dev/null
@@ -1,36 +0,0 @@
-lbl_802CFB24:
-/* 802CFB24 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 802CFB28 7C 08 02 A6 */ mflr r0
-/* 802CFB2C 90 01 00 24 */ stw r0, 0x24(r1)
-/* 802CFB30 39 61 00 20 */ addi r11, r1, 0x20
-/* 802CFB34 48 09 26 A9 */ bl _savegpr_29
-/* 802CFB38 7C 7D 1B 78 */ mr r29, r3
-/* 802CFB3C 7C 9E 23 78 */ mr r30, r4
-/* 802CFB40 38 7D 00 18 */ addi r3, r29, 0x18
-/* 802CFB44 48 06 F4 FD */ bl OSLockMutex
-/* 802CFB48 7F C3 F3 78 */ mr r3, r30
-/* 802CFB4C 48 00 0D D1 */ bl getHeapBlock__Q210JKRExpHeap9CMemBlockFPv
-/* 802CFB50 7C 7F 1B 79 */ or. r31, r3, r3
-/* 802CFB54 41 82 00 1C */ beq lbl_802CFB70
-/* 802CFB58 80 1D 00 30 */ lwz r0, 0x30(r29)
-/* 802CFB5C 7C 1E 00 40 */ cmplw r30, r0
-/* 802CFB60 41 80 00 10 */ blt lbl_802CFB70
-/* 802CFB64 80 1D 00 34 */ lwz r0, 0x34(r29)
-/* 802CFB68 7C 00 F0 40 */ cmplw r0, r30
-/* 802CFB6C 40 80 00 14 */ bge lbl_802CFB80
-lbl_802CFB70:
-/* 802CFB70 38 7D 00 18 */ addi r3, r29, 0x18
-/* 802CFB74 48 06 F5 A9 */ bl OSUnlockMutex
-/* 802CFB78 38 60 FF FF */ li r3, -1
-/* 802CFB7C 48 00 00 10 */ b lbl_802CFB8C
-lbl_802CFB80:
-/* 802CFB80 38 7D 00 18 */ addi r3, r29, 0x18
-/* 802CFB84 48 06 F5 99 */ bl OSUnlockMutex
-/* 802CFB88 80 7F 00 04 */ lwz r3, 4(r31)
-lbl_802CFB8C:
-/* 802CFB8C 39 61 00 20 */ addi r11, r1, 0x20
-/* 802CFB90 48 09 26 99 */ bl _restgpr_29
-/* 802CFB94 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 802CFB98 7C 08 03 A6 */ mtlr r0
-/* 802CFB9C 38 21 00 20 */ addi r1, r1, 0x20
-/* 802CFBA0 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/do_getTotalFreeSize__10JKRExpHeapFv.s b/asm/JSystem/JKernel/JKRExpHeap/do_getTotalFreeSize__10JKRExpHeapFv.s
deleted file mode 100644
index 744f124ae4..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/do_getTotalFreeSize__10JKRExpHeapFv.s
+++ /dev/null
@@ -1,28 +0,0 @@
-lbl_802CFC84:
-/* 802CFC84 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 802CFC88 7C 08 02 A6 */ mflr r0
-/* 802CFC8C 90 01 00 14 */ stw r0, 0x14(r1)
-/* 802CFC90 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 802CFC94 93 C1 00 08 */ stw r30, 8(r1)
-/* 802CFC98 7C 7E 1B 78 */ mr r30, r3
-/* 802CFC9C 3B E0 00 00 */ li r31, 0
-/* 802CFCA0 38 7E 00 18 */ addi r3, r30, 0x18
-/* 802CFCA4 48 06 F3 9D */ bl OSLockMutex
-/* 802CFCA8 80 7E 00 78 */ lwz r3, 0x78(r30)
-/* 802CFCAC 48 00 00 10 */ b lbl_802CFCBC
-lbl_802CFCB0:
-/* 802CFCB0 80 03 00 04 */ lwz r0, 4(r3)
-/* 802CFCB4 7F FF 02 14 */ add r31, r31, r0
-/* 802CFCB8 80 63 00 0C */ lwz r3, 0xc(r3)
-lbl_802CFCBC:
-/* 802CFCBC 28 03 00 00 */ cmplwi r3, 0
-/* 802CFCC0 40 82 FF F0 */ bne lbl_802CFCB0
-/* 802CFCC4 38 7E 00 18 */ addi r3, r30, 0x18
-/* 802CFCC8 48 06 F4 55 */ bl OSUnlockMutex
-/* 802CFCCC 7F E3 FB 78 */ mr r3, r31
-/* 802CFCD0 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 802CFCD4 83 C1 00 08 */ lwz r30, 8(r1)
-/* 802CFCD8 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 802CFCDC 7C 08 03 A6 */ mtlr r0
-/* 802CFCE0 38 21 00 10 */ addi r1, r1, 0x10
-/* 802CFCE4 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/func_802CFE68.s b/asm/JSystem/JKernel/JKRExpHeap/func_802CFE68.s
deleted file mode 100644
index 9e372a7dc0..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/func_802CFE68.s
+++ /dev/null
@@ -1,24 +0,0 @@
-lbl_802CFE68:
-/* 802CFE68 28 05 00 00 */ cmplwi r5, 0
-/* 802CFE6C 40 82 00 14 */ bne lbl_802CFE80
-/* 802CFE70 90 83 00 78 */ stw r4, 0x78(r3)
-/* 802CFE74 38 00 00 00 */ li r0, 0
-/* 802CFE78 90 04 00 08 */ stw r0, 8(r4)
-/* 802CFE7C 48 00 00 0C */ b lbl_802CFE88
-lbl_802CFE80:
-/* 802CFE80 90 85 00 0C */ stw r4, 0xc(r5)
-/* 802CFE84 90 A4 00 08 */ stw r5, 8(r4)
-lbl_802CFE88:
-/* 802CFE88 28 06 00 00 */ cmplwi r6, 0
-/* 802CFE8C 40 82 00 14 */ bne lbl_802CFEA0
-/* 802CFE90 90 83 00 7C */ stw r4, 0x7c(r3)
-/* 802CFE94 38 00 00 00 */ li r0, 0
-/* 802CFE98 90 04 00 0C */ stw r0, 0xc(r4)
-/* 802CFE9C 48 00 00 0C */ b lbl_802CFEA8
-lbl_802CFEA0:
-/* 802CFEA0 90 86 00 08 */ stw r4, 8(r6)
-/* 802CFEA4 90 C4 00 0C */ stw r6, 0xc(r4)
-lbl_802CFEA8:
-/* 802CFEA8 38 00 00 00 */ li r0, 0
-/* 802CFEAC B0 04 00 00 */ sth r0, 0(r4)
-/* 802CFEB0 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/func_802D0810.s b/asm/JSystem/JKernel/JKRExpHeap/func_802D0810.s
deleted file mode 100644
index a4eef31d57..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/func_802D0810.s
+++ /dev/null
@@ -1,9 +0,0 @@
-lbl_802D0810:
-/* 802D0810 38 00 48 4D */ li r0, 0x484d
-/* 802D0814 B0 03 00 00 */ sth r0, 0(r3)
-/* 802D0818 99 03 00 02 */ stb r8, 2(r3)
-/* 802D081C 98 E3 00 03 */ stb r7, 3(r3)
-/* 802D0820 90 C3 00 04 */ stw r6, 4(r3)
-/* 802D0824 90 83 00 08 */ stw r4, 8(r3)
-/* 802D0828 90 A3 00 0C */ stw r5, 0xc(r3)
-/* 802D082C 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/getHeapBlock__Q210JKRExpHeap9CMemBlockFPv.s b/asm/JSystem/JKernel/JKRExpHeap/getHeapBlock__Q210JKRExpHeap9CMemBlockFPv.s
deleted file mode 100644
index 371ff77d71..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/getHeapBlock__Q210JKRExpHeap9CMemBlockFPv.s
+++ /dev/null
@@ -1,9 +0,0 @@
-lbl_802D091C:
-/* 802D091C 28 03 00 00 */ cmplwi r3, 0
-/* 802D0920 41 82 00 10 */ beq lbl_802D0930
-/* 802D0924 A4 03 FF F0 */ lhzu r0, -0x10(r3)
-/* 802D0928 28 00 48 4D */ cmplwi r0, 0x484d
-/* 802D092C 4D 82 00 20 */ beqlr
-lbl_802D0930:
-/* 802D0930 38 60 00 00 */ li r3, 0
-/* 802D0934 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/getHeapType__10JKRExpHeapFv.s b/asm/JSystem/JKernel/JKRExpHeap/getHeapType__10JKRExpHeapFv.s
deleted file mode 100644
index a9f0dec3f8..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/getHeapType__10JKRExpHeapFv.s
+++ /dev/null
@@ -1,4 +0,0 @@
-lbl_802D0A10:
-/* 802D0A10 3C 60 45 58 */ lis r3, 0x4558 /* 0x45585048@ha */
-/* 802D0A14 38 63 50 48 */ addi r3, r3, 0x5048 /* 0x45585048@l */
-/* 802D0A18 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/getTotalUsedSize__10JKRExpHeapCFv.s b/asm/JSystem/JKernel/JKRExpHeap/getTotalUsedSize__10JKRExpHeapCFv.s
deleted file mode 100644
index 913157232d..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/getTotalUsedSize__10JKRExpHeapCFv.s
+++ /dev/null
@@ -1,29 +0,0 @@
-lbl_802CFD64:
-/* 802CFD64 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 802CFD68 7C 08 02 A6 */ mflr r0
-/* 802CFD6C 90 01 00 14 */ stw r0, 0x14(r1)
-/* 802CFD70 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 802CFD74 93 C1 00 08 */ stw r30, 8(r1)
-/* 802CFD78 7C 7E 1B 78 */ mr r30, r3
-/* 802CFD7C 38 7E 00 18 */ addi r3, r30, 0x18
-/* 802CFD80 48 06 F2 C1 */ bl OSLockMutex
-/* 802CFD84 3B E0 00 00 */ li r31, 0
-/* 802CFD88 80 7E 00 80 */ lwz r3, 0x80(r30)
-/* 802CFD8C 48 00 00 14 */ b lbl_802CFDA0
-lbl_802CFD90:
-/* 802CFD90 80 03 00 04 */ lwz r0, 4(r3)
-/* 802CFD94 7F E0 FA 14 */ add r31, r0, r31
-/* 802CFD98 80 63 00 0C */ lwz r3, 0xc(r3)
-/* 802CFD9C 3B FF 00 10 */ addi r31, r31, 0x10
-lbl_802CFDA0:
-/* 802CFDA0 28 03 00 00 */ cmplwi r3, 0
-/* 802CFDA4 40 82 FF EC */ bne lbl_802CFD90
-/* 802CFDA8 38 7E 00 18 */ addi r3, r30, 0x18
-/* 802CFDAC 48 06 F3 71 */ bl OSUnlockMutex
-/* 802CFDB0 7F E3 FB 78 */ mr r3, r31
-/* 802CFDB4 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 802CFDB8 83 C1 00 08 */ lwz r30, 8(r1)
-/* 802CFDBC 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 802CFDC0 7C 08 03 A6 */ mtlr r0
-/* 802CFDC4 38 21 00 10 */ addi r1, r1, 0x10
-/* 802CFDC8 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/getUsedSize__10JKRExpHeapCFUc.s b/asm/JSystem/JKernel/JKRExpHeap/getUsedSize__10JKRExpHeapCFUc.s
deleted file mode 100644
index d3c9c1b1e7..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/getUsedSize__10JKRExpHeapCFUc.s
+++ /dev/null
@@ -1,35 +0,0 @@
-lbl_802CFCE8:
-/* 802CFCE8 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 802CFCEC 7C 08 02 A6 */ mflr r0
-/* 802CFCF0 90 01 00 24 */ stw r0, 0x24(r1)
-/* 802CFCF4 39 61 00 20 */ addi r11, r1, 0x20
-/* 802CFCF8 48 09 24 E5 */ bl _savegpr_29
-/* 802CFCFC 7C 7D 1B 78 */ mr r29, r3
-/* 802CFD00 7C 9E 23 78 */ mr r30, r4
-/* 802CFD04 38 7D 00 18 */ addi r3, r29, 0x18
-/* 802CFD08 48 06 F3 39 */ bl OSLockMutex
-/* 802CFD0C 3B E0 00 00 */ li r31, 0
-/* 802CFD10 80 9D 00 80 */ lwz r4, 0x80(r29)
-/* 802CFD14 57 C3 06 3E */ clrlwi r3, r30, 0x18
-/* 802CFD18 48 00 00 20 */ b lbl_802CFD38
-lbl_802CFD1C:
-/* 802CFD1C 88 04 00 03 */ lbz r0, 3(r4)
-/* 802CFD20 7C 00 18 40 */ cmplw r0, r3
-/* 802CFD24 40 82 00 10 */ bne lbl_802CFD34
-/* 802CFD28 80 04 00 04 */ lwz r0, 4(r4)
-/* 802CFD2C 7F E0 FA 14 */ add r31, r0, r31
-/* 802CFD30 3B FF 00 10 */ addi r31, r31, 0x10
-lbl_802CFD34:
-/* 802CFD34 80 84 00 0C */ lwz r4, 0xc(r4)
-lbl_802CFD38:
-/* 802CFD38 28 04 00 00 */ cmplwi r4, 0
-/* 802CFD3C 40 82 FF E0 */ bne lbl_802CFD1C
-/* 802CFD40 38 7D 00 18 */ addi r3, r29, 0x18
-/* 802CFD44 48 06 F3 D9 */ bl OSUnlockMutex
-/* 802CFD48 7F E3 FB 78 */ mr r3, r31
-/* 802CFD4C 39 61 00 20 */ addi r11, r1, 0x20
-/* 802CFD50 48 09 24 D9 */ bl _restgpr_29
-/* 802CFD54 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 802CFD58 7C 08 03 A6 */ mtlr r0
-/* 802CFD5C 38 21 00 20 */ addi r1, r1, 0x20
-/* 802CFD60 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/removeFreeBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s b/asm/JSystem/JKernel/JKRExpHeap/removeFreeBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s
deleted file mode 100644
index 5393cf95d6..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/removeFreeBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s
+++ /dev/null
@@ -1,17 +0,0 @@
-lbl_802CFEB4:
-/* 802CFEB4 80 A4 00 08 */ lwz r5, 8(r4)
-/* 802CFEB8 80 84 00 0C */ lwz r4, 0xc(r4)
-/* 802CFEBC 28 05 00 00 */ cmplwi r5, 0
-/* 802CFEC0 40 82 00 0C */ bne lbl_802CFECC
-/* 802CFEC4 90 83 00 78 */ stw r4, 0x78(r3)
-/* 802CFEC8 48 00 00 08 */ b lbl_802CFED0
-lbl_802CFECC:
-/* 802CFECC 90 85 00 0C */ stw r4, 0xc(r5)
-lbl_802CFED0:
-/* 802CFED0 28 04 00 00 */ cmplwi r4, 0
-/* 802CFED4 40 82 00 0C */ bne lbl_802CFEE0
-/* 802CFED8 90 A3 00 7C */ stw r5, 0x7c(r3)
-/* 802CFEDC 4E 80 00 20 */ blr
-lbl_802CFEE0:
-/* 802CFEE0 90 A4 00 08 */ stw r5, 8(r4)
-/* 802CFEE4 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/removeUsedBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s b/asm/JSystem/JKernel/JKRExpHeap/removeUsedBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s
deleted file mode 100644
index 6ef922b3a8..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/removeUsedBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s
+++ /dev/null
@@ -1,17 +0,0 @@
-lbl_802CFEE8:
-/* 802CFEE8 80 A4 00 08 */ lwz r5, 8(r4)
-/* 802CFEEC 80 84 00 0C */ lwz r4, 0xc(r4)
-/* 802CFEF0 28 05 00 00 */ cmplwi r5, 0
-/* 802CFEF4 40 82 00 0C */ bne lbl_802CFF00
-/* 802CFEF8 90 83 00 80 */ stw r4, 0x80(r3)
-/* 802CFEFC 48 00 00 08 */ b lbl_802CFF04
-lbl_802CFF00:
-/* 802CFF00 90 85 00 0C */ stw r4, 0xc(r5)
-lbl_802CFF04:
-/* 802CFF04 28 04 00 00 */ cmplwi r4, 0
-/* 802CFF08 40 82 00 0C */ bne lbl_802CFF14
-/* 802CFF0C 90 A3 00 84 */ stw r5, 0x84(r3)
-/* 802CFF10 4E 80 00 20 */ blr
-lbl_802CFF14:
-/* 802CFF14 90 A4 00 08 */ stw r5, 8(r4)
-/* 802CFF18 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/state_compare__10JKRExpHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState.s b/asm/JSystem/JKernel/JKRExpHeap/state_compare__10JKRExpHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState.s
deleted file mode 100644
index ddbe0faa60..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/state_compare__10JKRExpHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState.s
+++ /dev/null
@@ -1,14 +0,0 @@
-lbl_802D09E0:
-/* 802D09E0 38 60 00 01 */ li r3, 1
-/* 802D09E4 80 C4 00 04 */ lwz r6, 4(r4)
-/* 802D09E8 80 05 00 04 */ lwz r0, 4(r5)
-/* 802D09EC 7C 06 00 40 */ cmplw r6, r0
-/* 802D09F0 41 82 00 08 */ beq lbl_802D09F8
-/* 802D09F4 38 60 00 00 */ li r3, 0
-lbl_802D09F8:
-/* 802D09F8 80 84 00 00 */ lwz r4, 0(r4)
-/* 802D09FC 80 05 00 00 */ lwz r0, 0(r5)
-/* 802D0A00 7C 04 00 40 */ cmplw r4, r0
-/* 802D0A04 4D 82 00 20 */ beqlr
-/* 802D0A08 38 60 00 00 */ li r3, 0
-/* 802D0A0C 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JKernel/JKRExpHeap/state_register__10JKRExpHeapCFPQ27JKRHeap6TStateUl.s b/asm/JSystem/JKernel/JKRExpHeap/state_register__10JKRExpHeapCFPQ27JKRHeap6TStateUl.s
deleted file mode 100644
index 8753c14aaf..0000000000
--- a/asm/JSystem/JKernel/JKRExpHeap/state_register__10JKRExpHeapCFPQ27JKRHeap6TStateUl.s
+++ /dev/null
@@ -1,49 +0,0 @@
-lbl_802D0938:
-/* 802D0938 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 802D093C 7C 08 02 A6 */ mflr r0
-/* 802D0940 90 01 00 24 */ stw r0, 0x24(r1)
-/* 802D0944 39 61 00 20 */ addi r11, r1, 0x20
-/* 802D0948 48 09 18 95 */ bl _savegpr_29
-/* 802D094C 7C 7D 1B 78 */ mr r29, r3
-/* 802D0950 7C 9E 23 78 */ mr r30, r4
-/* 802D0954 7C BF 2B 78 */ mr r31, r5
-/* 802D0958 93 E4 00 14 */ stw r31, 0x14(r4)
-/* 802D095C 28 1F 00 FF */ cmplwi r31, 0xff
-/* 802D0960 41 81 00 14 */ bgt lbl_802D0974
-/* 802D0964 57 E4 06 3E */ clrlwi r4, r31, 0x18
-/* 802D0968 4B FF F3 81 */ bl getUsedSize__10JKRExpHeapCFUc
-/* 802D096C 90 7E 00 00 */ stw r3, 0(r30)
-/* 802D0970 48 00 00 14 */ b lbl_802D0984
-lbl_802D0974:
-/* 802D0974 4B FF DE 11 */ bl getTotalFreeSize__7JKRHeapFv
-/* 802D0978 80 1D 00 38 */ lwz r0, 0x38(r29)
-/* 802D097C 7C 03 00 50 */ subf r0, r3, r0
-/* 802D0980 90 1E 00 00 */ stw r0, 0(r30)
-lbl_802D0984:
-/* 802D0984 38 60 00 00 */ li r3, 0
-/* 802D0988 80 9D 00 80 */ lwz r4, 0x80(r29)
-/* 802D098C 48 00 00 30 */ b lbl_802D09BC
-lbl_802D0990:
-/* 802D0990 28 1F 00 FF */ cmplwi r31, 0xff
-/* 802D0994 41 81 00 1C */ bgt lbl_802D09B0
-/* 802D0998 88 04 00 03 */ lbz r0, 3(r4)
-/* 802D099C 7C 00 F8 40 */ cmplw r0, r31
-/* 802D09A0 40 82 00 18 */ bne lbl_802D09B8
-/* 802D09A4 1C 04 00 03 */ mulli r0, r4, 3
-/* 802D09A8 7C 63 02 14 */ add r3, r3, r0
-/* 802D09AC 48 00 00 0C */ b lbl_802D09B8
-lbl_802D09B0:
-/* 802D09B0 1C 04 00 03 */ mulli r0, r4, 3
-/* 802D09B4 7C 63 02 14 */ add r3, r3, r0
-lbl_802D09B8:
-/* 802D09B8 80 84 00 0C */ lwz r4, 0xc(r4)
-lbl_802D09BC:
-/* 802D09BC 28 04 00 00 */ cmplwi r4, 0
-/* 802D09C0 40 82 FF D0 */ bne lbl_802D0990
-/* 802D09C4 90 7E 00 04 */ stw r3, 4(r30)
-/* 802D09C8 39 61 00 20 */ addi r11, r1, 0x20
-/* 802D09CC 48 09 18 5D */ bl _restgpr_29
-/* 802D09D0 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 802D09D4 7C 08 03 A6 */ mtlr r0
-/* 802D09D8 38 21 00 20 */ addi r1, r1, 0x20
-/* 802D09DC 4E 80 00 20 */ blr
diff --git a/include/JSystem/JKernel/JKRExpHeap.h b/include/JSystem/JKernel/JKRExpHeap.h
index eeeab96a39..d2e93baa53 100644
--- a/include/JSystem/JKernel/JKRExpHeap.h
+++ b/include/JSystem/JKernel/JKRExpHeap.h
@@ -7,21 +7,24 @@
class JKRExpHeap : public JKRHeap {
public:
class CMemBlock {
+ friend class JKRExpHeap;
+
public:
void initiate(CMemBlock*, CMemBlock*, u32, u8, u8);
- void allocFore(u32, u8, u8, u8, u8);
- void allocBack(u32, u8, u8, u8, u8);
- void free(JKRExpHeap*);
- void getHeapBlock(void*);
+ JKRExpHeap::CMemBlock* allocFore(u32, u8, u8, u8, u8);
+ JKRExpHeap::CMemBlock* allocBack(u32, u8, u8, u8, u8);
+ int free(JKRExpHeap*);
+ static CMemBlock* getHeapBlock(void*);
void newGroupId(u8 groupId) { this->mGroupId = groupId; }
- bool isValid() const { return this->mMagic == 0x484d; }
+ bool isValid() const { return this->mMagic == 'HM'; }
bool _isTempMemBlock() const { return (this->mFlags & 0x80) ? true : false; }
int getAlignment() const { return this->mFlags & 0x7f; }
void* getContent() const { return (void*)(this + 1); }
CMemBlock* getPrevBlock() const { return this->mPrev; }
CMemBlock* getNextBlock() const { return this->mNext; }
u32 getSize() const { return this->size; }
+ u8 getGroupId() const { return this->mGroupId; }
static CMemBlock* getBlock(void* data) { return (CMemBlock*)((u32)data + -0x10); }
private:
@@ -32,15 +35,16 @@ public:
CMemBlock* mPrev;
CMemBlock* mNext;
};
+ friend class CMemBlock;
protected:
JKRExpHeap(void*, u32, JKRHeap*, bool);
virtual ~JKRExpHeap();
- void allocFromHead(u32, int);
- void allocFromHead(u32);
- void allocFromTail(u32, int);
- void allocFromTail(u32);
+ void* allocFromHead(u32, int);
+ void* allocFromHead(u32);
+ void* allocFromTail(u32, int);
+ void* allocFromTail(u32);
void appendUsedList(CMemBlock*);
void setFreeBlock(CMemBlock*, CMemBlock*, CMemBlock*);
void removeFreeBlock(CMemBlock*);
@@ -76,9 +80,11 @@ public:
JKRHeap::TState const&) const; /* override */
u8 field_0x6c;
+ u8 mCurrentGroupId;
+ bool field_0x6e;
private:
- u32 field_0x70;
+ void* field_0x70;
u32 field_0x74;
CMemBlock* mHeadFreeList;
CMemBlock* mTailFreeList;
@@ -91,8 +97,8 @@ public:
static JKRExpHeap* create(void*, u32, JKRHeap*, bool);
};
-inline JKRExpHeap* JKRCreateExpHeap(u32 param_0, JKRHeap* param_1, bool param_2) {
- return JKRExpHeap::create(param_0, param_1, param_2);
+inline JKRExpHeap* JKRCreateExpHeap(u32 size, JKRHeap* parent, bool errorFlag) {
+ return JKRExpHeap::create(size, parent, errorFlag);
}
#endif /* JKREXPHEAP_H */
diff --git a/libs/JSystem/JKernel/JKRExpHeap.cpp b/libs/JSystem/JKernel/JKRExpHeap.cpp
index 6dca878c65..9bfb17e015 100644
--- a/libs/JSystem/JKernel/JKRExpHeap.cpp
+++ b/libs/JSystem/JKernel/JKRExpHeap.cpp
@@ -7,6 +7,7 @@
#include "JSystem/JUtility/JUTException.h"
#include "dol2asm.h"
#include "dolphin/types.h"
+#include "global.h"
//
// Forward References:
@@ -75,10 +76,10 @@ extern "C" void dispose__7JKRHeapFv();
extern "C" void __dl__FPv();
extern "C" void state_dump__7JKRHeapCFRCQ27JKRHeap6TState();
extern "C" void panic_f__12JUTExceptionFPCciPCce();
-extern "C" void JUTReportConsole_f();
-extern "C" void JUTReportConsole();
-extern "C" void JUTWarningConsole_f();
-extern "C" void JUTWarningConsole();
+extern "C" void JUTReportConsole_f(const char*, ...);
+extern "C" void JUTReportConsole(const char*);
+extern "C" void JUTWarningConsole_f(const char*, ...);
+extern "C" void JUTWarningConsole(const char*);
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
@@ -96,17 +97,53 @@ extern "C" u8 mErrorHandler__7JKRHeap[4];
//
/* 802CEDB4-802CEE2C 2C96F4 0078+00 0/0 1/1 0/0 .text createRoot__10JKRExpHeapFib */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm JKRExpHeap* JKRExpHeap::createRoot(int param_0, bool param_1) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/createRoot__10JKRExpHeapFib.s"
+JKRExpHeap* JKRExpHeap::createRoot(int param_0, bool errorFlag) {
+ JKRExpHeap* heap = NULL;
+ if (!sRootHeap) {
+ void* memory;
+ u32 memorySize;
+ initArena((char**)&memory, &memorySize, param_0);
+ u8* start = (u8*)memory + ALIGN_NEXT(sizeof(JKRExpHeap), 0x10);
+ u32 alignedSize = memorySize - ALIGN_NEXT(sizeof(JKRExpHeap), 0x10);
+ heap = new (memory) JKRExpHeap(start, alignedSize, NULL, errorFlag);
+ sRootHeap = heap;
+ }
+ heap->field_0x6e = true;
+ return heap;
}
-#pragma pop
/* 802CEE2C-802CEF00 2C976C 00D4+00 0/0 19/19 1/1 .text create__10JKRExpHeapFUlP7JKRHeapb
*/
+#if NONMATCHING
+JKRExpHeap* JKRExpHeap::create(u32 size, JKRHeap* parent, bool errorFlag) {
+ if (!parent) {
+ parent = sRootHeap;
+ }
+
+ if (size == 0xffffffff) {
+ size = parent->getMaxAllocatableSize(0x10);
+ }
+
+ u32 alignedSize = ALIGN_PREV(size, 0x10);
+ u32 expHeapSize = ALIGN_NEXT(sizeof(JKRExpHeap), 0x10);
+ if (alignedSize < 0xa0)
+ return NULL;
+
+ void* memory = alloc(alignedSize, 0x10, parent);
+ void* dataPtr = (u8*)memory + expHeapSize;
+ if (!memory) {
+ return NULL;
+ }
+ JKRExpHeap* newHeap =
+ new (memory) JKRExpHeap(dataPtr, alignedSize - expHeapSize, parent, errorFlag);
+ if (newHeap == NULL) {
+ free(memory, NULL);
+ return NULL;
+ };
+ newHeap->field_0x6e = false;
+ return newHeap;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -115,27 +152,46 @@ asm JKRExpHeap* JKRExpHeap::create(u32 param_0, JKRHeap* param_1, bool param_2)
#include "asm/JSystem/JKernel/JKRExpHeap/create__10JKRExpHeapFUlP7JKRHeapb.s"
}
#pragma pop
+#endif
/* 802CEF00-802CEFAC 2C9840 00AC+00 0/0 1/1 0/0 .text create__10JKRExpHeapFPvUlP7JKRHeapb
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm JKRExpHeap* JKRExpHeap::create(void* param_0, u32 param_1, JKRHeap* param_2, bool param_3) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/create__10JKRExpHeapFPvUlP7JKRHeapb.s"
+JKRExpHeap* JKRExpHeap::create(void* ptr, u32 size, JKRHeap* parent, bool errorFlag) {
+ JKRHeap* parent2;
+ if (parent == NULL) {
+ parent2 = sRootHeap->find(ptr);
+ if (!parent2)
+ return NULL;
+ } else {
+ parent2 = parent;
+ }
+ JKRExpHeap* newHeap = NULL;
+ u32 expHeapSize = ALIGN_NEXT(sizeof(JKRExpHeap), 0x10);
+ if (size < expHeapSize)
+ return NULL;
+ void* dataPtr = (u8*)ptr + expHeapSize;
+ u32 alignedSize = ALIGN_PREV((u32)ptr + size - (u32)dataPtr, 0x10);
+ if (ptr) {
+ newHeap = new (ptr) JKRExpHeap(dataPtr, alignedSize, parent2, errorFlag);
+ }
+ newHeap->field_0x6e = true;
+ newHeap->field_0x70 = ptr;
+ newHeap->field_0x74 = size;
+ return newHeap;
}
-#pragma pop
/* 802CEFAC-802CF030 2C98EC 0084+00 1/0 0/0 0/0 .text do_destroy__10JKRExpHeapFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JKRExpHeap::do_destroy() {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/do_destroy__10JKRExpHeapFv.s"
+void JKRExpHeap::do_destroy() {
+ if (!field_0x6e) {
+ JKRHeap* heap = mChildTree.getParent()->getObject();
+ if (heap) {
+ this->~JKRExpHeap();
+ JKRHeap::free(this, heap);
+ }
+ } else {
+ this->~JKRExpHeap();
+ }
}
-#pragma pop
/* ############################################################################################## */
/* 803CBFD0-803CC030 0290F0 0060+00 2/2 0/0 0/0 .data __vt__10JKRExpHeap */
@@ -168,119 +224,323 @@ SECTION_DATA extern void* __vt__10JKRExpHeap[24] = {
/* 802CF030-802CF0C0 2C9970 0090+00 3/3 0/0 0/0 .text __ct__10JKRExpHeapFPvUlP7JKRHeapb
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm JKRExpHeap::JKRExpHeap(void* param_0, u32 param_1, JKRHeap* param_2, bool param_3) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/__ct__10JKRExpHeapFPvUlP7JKRHeapb.s"
+JKRExpHeap::JKRExpHeap(void* data, u32 size, JKRHeap* parent, bool errorFlag)
+ : JKRHeap(data, size, parent, errorFlag) {
+ field_0x6c = 0;
+ mCurrentGroupId = 0xff;
+ mHeadFreeList = (CMemBlock*)data;
+ mTailFreeList = mHeadFreeList;
+ mHeadFreeList->initiate(NULL, NULL, size - sizeof(CMemBlock), 0, 0);
+ mHeadUsedList = NULL;
+ mTailUsedList = NULL;
}
-#pragma pop
/* 802CF0C0-802CF128 2C9A00 0068+00 1/0 0/0 0/0 .text __dt__10JKRExpHeapFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm JKRExpHeap::~JKRExpHeap() {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/__dt__10JKRExpHeapFv.s"
+JKRExpHeap::~JKRExpHeap() {
+ dispose();
}
-#pragma pop
-
-/* ############################################################################################## */
-/* 8039CAF0-8039CAF0 029150 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8039CAF0 = ":::cannot alloc memory (0x%x byte).\n";
-#pragma pop
/* 802CF128-802CF234 2C9A68 010C+00 1/0 0/0 0/0 .text do_alloc__10JKRExpHeapFUli */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void* JKRExpHeap::do_alloc(u32 param_0, int param_1) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/do_alloc__10JKRExpHeapFUli.s"
+void* JKRExpHeap::do_alloc(u32 size, int alignment) {
+ void* ptr;
+
+ lock();
+ if (size < 4) {
+ size = 4;
+ }
+ if (alignment >= 0) {
+ if (alignment <= 4) {
+ ptr = allocFromHead(size);
+ } else {
+ ptr = allocFromHead(size, alignment);
+ }
+ } else {
+ if (-alignment <= 4) {
+ ptr = allocFromTail(size);
+ } else {
+ ptr = allocFromTail(size, -alignment);
+ }
+ }
+ if (ptr == NULL) {
+ JUTWarningConsole_f(":::cannot alloc memory (0x%x byte).\n", size);
+ if (mErrorFlag == true) {
+ callErrorHandler(this, size, alignment);
+ }
+ }
+ unlock();
+
+ return ptr;
}
-#pragma pop
/* ############################################################################################## */
/* 80451398-8045139C 000898 0004+00 1/1 0/0 0/0 .sbss DBfoundSize */
-static u8 DBfoundSize[4];
+static u32 DBfoundSize;
/* 8045139C-804513A0 00089C 0004+00 1/1 0/0 0/0 .sbss DBfoundOffset */
-static u8 DBfoundOffset[4];
+static u32 DBfoundOffset;
/* 804513A0-804513A4 0008A0 0004+00 1/1 0/0 0/0 .sbss DBfoundBlock */
-static u8 DBfoundBlock[4];
+static JKRExpHeap::CMemBlock* DBfoundBlock;
/* 804513A4-804513A8 0008A4 0004+00 1/1 0/0 0/0 .sbss DBnewFreeBlock */
-static u8 DBnewFreeBlock[4];
+static JKRExpHeap::CMemBlock* DBnewFreeBlock;
/* 804513A8-804513B0 0008A8 0004+04 1/1 0/0 0/0 .sbss DBnewUsedBlock */
-static u8 DBnewUsedBlock[4 + 4 /* padding */];
+static JKRExpHeap::CMemBlock* DBnewUsedBlock;
/* 802CF234-802CF490 2C9B74 025C+00 1/1 0/0 0/0 .text allocFromHead__10JKRExpHeapFUli */
+#if NONMATCHING
+void* JKRExpHeap::allocFromHead(u32 size, int align) {
+ size = ALIGN_NEXT(size, 4);
+ s32 foundSize = -1;
+ u32 foundOffset = 0;
+ CMemBlock* foundBlock = NULL;
+
+ for (CMemBlock* block = mHeadFreeList; block; block = block->getNextBlock()) {
+ u32 start = (u32)(block->getContent());
+ u32 offset = ALIGN_PREV(align - 1 + start, align) - start;
+ if (block->getSize() < size + offset) {
+ continue;
+ }
+ if (foundSize <= block->getSize()) {
+ continue;
+ }
+ foundSize = block->getSize();
+ foundBlock = block;
+ foundOffset = offset;
+ if (field_0x6c != 0) {
+ break;
+ }
+ u32 blockSize = block->getSize();
+ if (blockSize == size) {
+ break;
+ }
+ }
+ DBfoundSize = foundSize;
+ DBfoundOffset = foundOffset;
+ DBfoundBlock = foundBlock;
+ if (foundBlock) {
+ if (foundOffset >= sizeof(CMemBlock)) {
+ CMemBlock* prev = foundBlock->getPrevBlock();
+ CMemBlock* next = foundBlock->getNextBlock();
+ CMemBlock* newUsedBlock =
+ foundBlock->allocFore(foundOffset - sizeof(CMemBlock), 0, 0, 0, 0);
+ CMemBlock* newFreeBlock;
+ if (newUsedBlock) {
+ newFreeBlock = newUsedBlock->allocFore(size, mCurrentGroupId, 0, 0, 0);
+ } else {
+ newFreeBlock = NULL;
+ }
+ if (newFreeBlock) {
+ setFreeBlock(foundBlock, prev, newFreeBlock);
+ } else {
+ setFreeBlock(foundBlock, prev, next);
+ }
+ if (newFreeBlock) {
+ setFreeBlock(newFreeBlock, foundBlock, next);
+ }
+ appendUsedList(newUsedBlock);
+ DBnewFreeBlock = newFreeBlock;
+ DBnewUsedBlock = newUsedBlock;
+ return newUsedBlock->getContent();
+ } else {
+ if (foundOffset != 0) {
+ CMemBlock* prev = foundBlock->getPrevBlock();
+ CMemBlock* next = foundBlock->getNextBlock();
+ removeFreeBlock(foundBlock);
+ CMemBlock* newUsedBlock = (CMemBlock*)((u32)foundBlock + foundOffset);
+ newUsedBlock->size = foundBlock->getSize() - foundOffset;
+ CMemBlock* newFreeBlock =
+ newUsedBlock->allocFore(size, mCurrentGroupId, (u8)foundOffset, 0, 0);
+ if (newFreeBlock) {
+ setFreeBlock(newFreeBlock, prev, next);
+ }
+ appendUsedList(newUsedBlock);
+ return newUsedBlock->getContent();
+ } else {
+ CMemBlock* prev = foundBlock->getPrevBlock();
+ CMemBlock* next = foundBlock->getNextBlock();
+ CMemBlock* newFreeBlock = foundBlock->allocFore(size, mCurrentGroupId, 0, 0, 0);
+ removeFreeBlock(foundBlock);
+ if (newFreeBlock) {
+ setFreeBlock(newFreeBlock, prev, next);
+ }
+ appendUsedList(foundBlock);
+ return foundBlock->getContent();
+ }
+ }
+ }
+ return NULL;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void JKRExpHeap::allocFromHead(u32 param_0, int param_1) {
+asm void* JKRExpHeap::allocFromHead(u32 param_0, int param_1) {
nofralloc
#include "asm/JSystem/JKernel/JKRExpHeap/allocFromHead__10JKRExpHeapFUli.s"
}
#pragma pop
+#endif
/* 802CF490-802CF574 2C9DD0 00E4+00 1/1 0/0 0/0 .text allocFromHead__10JKRExpHeapFUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JKRExpHeap::allocFromHead(u32 param_0) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/allocFromHead__10JKRExpHeapFUl.s"
+void* JKRExpHeap::allocFromHead(u32 size) {
+ size = ALIGN_NEXT(size, 4);
+ s32 foundSize = -1;
+ CMemBlock* foundBlock = NULL;
+ for (CMemBlock* block = mHeadFreeList; block; block = block->getNextBlock()) {
+ if (block->getSize() < size) {
+ continue;
+ }
+ if (foundSize <= block->getSize()) {
+ continue;
+ }
+ foundSize = block->getSize();
+ foundBlock = block;
+ if (field_0x6c != 0) {
+ break;
+ }
+ if (foundSize == size) {
+ break;
+ }
+ }
+ if (foundBlock) {
+ CMemBlock* newblock = foundBlock->allocFore(size, mCurrentGroupId, 0, 0, 0);
+ if (newblock) {
+ setFreeBlock(newblock, foundBlock->getPrevBlock(), foundBlock->getNextBlock());
+ } else {
+ removeFreeBlock(foundBlock);
+ }
+ appendUsedList(foundBlock);
+ return foundBlock->getContent();
+ }
+ return NULL;
}
-#pragma pop
/* 802CF574-802CF6D4 2C9EB4 0160+00 1/1 0/0 0/0 .text allocFromTail__10JKRExpHeapFUli */
+#if NONMATCHING
+void* JKRExpHeap::allocFromTail(u32 size, int align) {
+ u32 offset = 0;
+ CMemBlock* foundBlock = NULL;
+ CMemBlock* newBlock = NULL;
+ u32 end;
+ u32 start;
+ u32 usedSize;
+ for (CMemBlock* block = mTailFreeList; block; block = block->getPrevBlock()) {
+ end = (u32)block->getContent() + block->getSize();
+ start = ALIGN_PREV(end - size, align);
+ usedSize = end - start;
+ if (block->getSize() >= usedSize) {
+ foundBlock = block;
+ offset = block->getSize() - usedSize;
+ newBlock = (CMemBlock*)start - 1;
+ break;
+ }
+ }
+ if (foundBlock != NULL) {
+ if (offset >= sizeof(CMemBlock)) {
+ newBlock->initiate(NULL, NULL, usedSize, mCurrentGroupId, -0x80);
+ foundBlock->size = foundBlock->size - usedSize - sizeof(CMemBlock);
+ appendUsedList(newBlock);
+ return newBlock->getContent();
+ } else {
+ if (offset != 0) {
+ removeFreeBlock(foundBlock);
+ newBlock->initiate(NULL, NULL, usedSize, mCurrentGroupId, offset | 0x80);
+ appendUsedList(newBlock);
+ return newBlock->getContent();
+ } else {
+ removeFreeBlock(foundBlock);
+ newBlock->initiate(NULL, NULL, usedSize, mCurrentGroupId, -0x80);
+ appendUsedList(newBlock);
+ return newBlock->getContent();
+ }
+ }
+ }
+ return NULL;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void JKRExpHeap::allocFromTail(u32 param_0, int param_1) {
+asm void* JKRExpHeap::allocFromTail(u32 param_0, int param_1) {
nofralloc
#include "asm/JSystem/JKernel/JKRExpHeap/allocFromTail__10JKRExpHeapFUli.s"
}
#pragma pop
+#endif
/* 802CF6D4-802CF7AC 2CA014 00D8+00 1/1 0/0 0/0 .text allocFromTail__10JKRExpHeapFUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JKRExpHeap::allocFromTail(u32 param_0) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/allocFromTail__10JKRExpHeapFUl.s"
+void* JKRExpHeap::allocFromTail(u32 size) {
+ u32 size2 = ALIGN_NEXT(size, 4);
+ CMemBlock* foundBlock = NULL;
+ for (CMemBlock* block = mTailFreeList; block; block = block->getPrevBlock()) {
+ if (block->getSize() >= size2) {
+ foundBlock = block;
+ break;
+ }
+ }
+ if (foundBlock != NULL) {
+ CMemBlock* usedBlock = foundBlock->allocBack(size2, 0, 0, mCurrentGroupId, 0);
+ CMemBlock* freeBlock;
+ if (usedBlock) {
+ freeBlock = foundBlock;
+ } else {
+ removeFreeBlock(foundBlock);
+ usedBlock = foundBlock;
+ freeBlock = NULL;
+ }
+ if (freeBlock) {
+ setFreeBlock(freeBlock, foundBlock->getPrevBlock(), foundBlock->getNextBlock());
+ }
+ appendUsedList(usedBlock);
+ return usedBlock->getContent();
+ }
+ return NULL;
}
-#pragma pop
/* 802CF7AC-802CF820 2CA0EC 0074+00 1/0 0/0 0/0 .text do_free__10JKRExpHeapFPv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JKRExpHeap::do_free(void* param_0) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/do_free__10JKRExpHeapFPv.s"
+void JKRExpHeap::do_free(void* ptr) {
+ lock();
+ if (getStartAddr() <= ptr && ptr <= getEndAddr()) {
+ CMemBlock* block = CMemBlock::getHeapBlock(ptr);
+ if (block) {
+ block->free(this);
+ }
+ }
+ unlock();
}
-#pragma pop
/* 802CF820-802CF89C 2CA160 007C+00 1/0 0/0 0/0 .text do_freeAll__10JKRExpHeapFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JKRExpHeap::do_freeAll() {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/do_freeAll__10JKRExpHeapFv.s"
+void JKRExpHeap::do_freeAll() {
+ lock();
+ JKRHeap::callAllDisposer();
+ mHeadFreeList = (CMemBlock*)getStartAddr();
+ mTailFreeList = mHeadFreeList;
+ mHeadFreeList->initiate(NULL, NULL, getSize() - 0x10, 0, 0);
+ mHeadUsedList = NULL;
+ mTailUsedList = NULL;
+ unlock();
}
-#pragma pop
/* 802CF89C-802CF924 2CA1DC 0088+00 1/0 0/0 0/0 .text do_freeTail__10JKRExpHeapFv */
+#if NONMATCHING
+void JKRExpHeap::do_freeTail() {
+ lock();
+ CMemBlock* block = mHeadUsedList;
+ while (block) {
+ if (block->_isTempMemBlock()) {
+ dispose(block->getContent(), block->getSize());
+ CMemBlock* next = block->getNextBlock();
+ block->free(this);
+ block = next;
+ } else {
+ block = block->getNextBlock();
+ }
+ }
+ unlock();
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -289,6 +549,7 @@ asm void JKRExpHeap::do_freeTail() {
#include "asm/JSystem/JKernel/JKRExpHeap/do_freeTail__10JKRExpHeapFv.s"
}
#pragma pop
+#endif
/* 802CF924-802CF928 2CA264 0004+00 1/0 0/0 0/0 .text do_fillFreeArea__10JKRExpHeapFv */
void JKRExpHeap::do_fillFreeArea() {
@@ -297,16 +558,67 @@ void JKRExpHeap::do_fillFreeArea() {
/* 802CF928-802CF978 2CA268 0050+00 1/0 0/0 0/0 .text do_changeGroupID__10JKRExpHeapFUc
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm u8 JKRExpHeap::do_changeGroupID(u8 param_0) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/do_changeGroupID__10JKRExpHeapFUc.s"
+u8 JKRExpHeap::do_changeGroupID(u8 param_0) {
+ lock();
+ u8 prev = mCurrentGroupId;
+ mCurrentGroupId = param_0;
+ unlock();
+ return prev;
}
-#pragma pop
/* 802CF978-802CFB24 2CA2B8 01AC+00 1/0 0/0 0/0 .text do_resize__10JKRExpHeapFPvUl */
+#if NONMATCHING
+s32 JKRExpHeap::do_resize(void* ptr, u32 size) {
+ lock();
+ CMemBlock* block = CMemBlock::getHeapBlock(ptr);
+ if (block == NULL || ptr < getStartAddr() || getEndAddr() < ptr) {
+ unlock();
+ return -1;
+ }
+ u32 newSize = ALIGN_NEXT(size, 4);
+ if (newSize == block->getSize()) {
+ unlock();
+ return newSize;
+ }
+ if (newSize > block->getSize()) {
+ CMemBlock* foundBlock = NULL;
+ for (CMemBlock* freeBlock = mHeadFreeList; freeBlock;
+ freeBlock = freeBlock->getNextBlock()) {
+ if (freeBlock == (CMemBlock*)((u32)block->getContent() + block->getSize())) {
+ foundBlock = freeBlock;
+ break;
+ }
+ }
+ if (foundBlock == NULL) {
+ unlock();
+ return -1;
+ }
+ if (newSize > block->getSize() + sizeof(CMemBlock) + foundBlock->getSize()) {
+ unlock();
+ return -1;
+ }
+ removeFreeBlock(foundBlock);
+ block->size += foundBlock->getSize() + sizeof(CMemBlock);
+ if (block->getSize() - newSize > sizeof(CMemBlock)) {
+ CMemBlock* newBlock =
+ block->allocFore(newSize, block->getGroupId(), block->mFlags, 0, 0);
+ if (newBlock) {
+ recycleFreeBlock(newBlock);
+ }
+ }
+ } else {
+ if (block->getSize() - newSize > 0x10) {
+ CMemBlock* freeBlock =
+ block->allocFore(newSize, block->getGroupId(), block->mFlags, 0, 0);
+ if (freeBlock) {
+ recycleFreeBlock(freeBlock);
+ }
+ }
+ }
+ unlock();
+ return block->getSize();
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -315,127 +627,216 @@ asm s32 JKRExpHeap::do_resize(void* param_0, u32 param_1) {
#include "asm/JSystem/JKernel/JKRExpHeap/do_resize__10JKRExpHeapFPvUl.s"
}
#pragma pop
+#endif
/* 802CFB24-802CFBA4 2CA464 0080+00 1/0 0/0 0/0 .text do_getSize__10JKRExpHeapFPv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm s32 JKRExpHeap::do_getSize(void* param_0) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/do_getSize__10JKRExpHeapFPv.s"
+s32 JKRExpHeap::do_getSize(void* ptr) {
+ lock();
+ CMemBlock* block = CMemBlock::getHeapBlock(ptr);
+ if (!block || ptr < getStartAddr() || getEndAddr() < ptr) {
+ unlock();
+ return -1;
+ }
+ unlock();
+ return block->getSize();
}
-#pragma pop
/* 802CFBA4-802CFC10 2CA4E4 006C+00 1/0 0/0 0/0 .text do_getFreeSize__10JKRExpHeapFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm s32 JKRExpHeap::do_getFreeSize() {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/do_getFreeSize__10JKRExpHeapFv.s"
+s32 JKRExpHeap::do_getFreeSize() {
+ lock();
+ s32 size = 0;
+ for (CMemBlock* block = mHeadFreeList; block; block = block->getNextBlock()) {
+ if (size < (s32)block->getSize()) {
+ size = block->getSize();
+ }
+ }
+ unlock();
+ return size;
}
-#pragma pop
/* 802CFC10-802CFC84 2CA550 0074+00 1/0 0/0 0/0 .text do_getMaxFreeBlock__10JKRExpHeapFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void* JKRExpHeap::do_getMaxFreeBlock() {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/do_getMaxFreeBlock__10JKRExpHeapFv.s"
+void* JKRExpHeap::do_getMaxFreeBlock() {
+ lock();
+ s32 size = 0;
+ CMemBlock* res = NULL;
+ for (CMemBlock* block = mHeadFreeList; block; block = block->getNextBlock()) {
+ if (size < (s32)block->getSize()) {
+ size = block->getSize();
+ res = block;
+ }
+ }
+ unlock();
+ return res;
}
-#pragma pop
/* 802CFC84-802CFCE8 2CA5C4 0064+00 1/0 0/0 0/0 .text do_getTotalFreeSize__10JKRExpHeapFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm s32 JKRExpHeap::do_getTotalFreeSize() {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/do_getTotalFreeSize__10JKRExpHeapFv.s"
+s32 JKRExpHeap::do_getTotalFreeSize() {
+ u32 size = 0;
+ lock();
+ for (CMemBlock* block = mHeadFreeList; block; block = block->getNextBlock()) {
+ size += block->getSize();
+ }
+ unlock();
+ return size;
}
-#pragma pop
/* 802CFCE8-802CFD64 2CA628 007C+00 1/1 0/0 0/0 .text getUsedSize__10JKRExpHeapCFUc */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm s32 JKRExpHeap::getUsedSize(u8 param_0) const {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/getUsedSize__10JKRExpHeapCFUc.s"
+s32 JKRExpHeap::getUsedSize(u8 groupId) const {
+ JKRExpHeap* this2 = const_cast<JKRExpHeap*>(this);
+ this2->lock();
+ u32 size = 0;
+ for (CMemBlock* block = mHeadUsedList; block; block = block->getNextBlock()) {
+ u8 blockGroupId = block->getGroupId();
+ if (blockGroupId == groupId) {
+ size += block->getSize() + sizeof(CMemBlock);
+ }
+ }
+ this2->unlock();
+ return size;
}
-#pragma pop
/* 802CFD64-802CFDCC 2CA6A4 0068+00 0/0 5/5 0/0 .text getTotalUsedSize__10JKRExpHeapCFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm s32 JKRExpHeap::getTotalUsedSize() const {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/getTotalUsedSize__10JKRExpHeapCFv.s"
+s32 JKRExpHeap::getTotalUsedSize() const {
+ JKRExpHeap* this2 = const_cast<JKRExpHeap*>(this);
+ this2->lock();
+ u32 size = 0;
+ for (CMemBlock* block = mHeadUsedList; block; block = block->getNextBlock()) {
+ size += block->getSize() + sizeof(CMemBlock);
+ }
+ this2->unlock();
+ return size;
}
-#pragma pop
-
-/* ############################################################################################## */
-/* 8039CAF0-8039CAF0 029150 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8039CB15 = "JKRExpHeap.cpp";
-SECTION_DEAD static char const* const stringBase_8039CB24 = "%s";
-SECTION_DEAD static char const* const stringBase_8039CB27 = "bad appendUsedList\n";
-#pragma pop
/* 802CFDCC-802CFE68 2CA70C 009C+00 4/4 0/0 0/0 .text
* appendUsedList__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JKRExpHeap::appendUsedList(JKRExpHeap::CMemBlock* param_0) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/appendUsedList__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s"
+void JKRExpHeap::appendUsedList(JKRExpHeap::CMemBlock* newblock) {
+ if (!newblock) {
+ JUTException::panic_f("JKRExpHeap.cpp", 0x620, "%s", "bad appendUsedList\n");
+ }
+ CMemBlock* block = mTailUsedList;
+ newblock->mMagic = 'HM';
+ if (block) {
+ block->mNext = newblock;
+ newblock->mPrev = block;
+ } else {
+ newblock->mPrev = NULL;
+ }
+ mTailUsedList = newblock;
+ if (!mHeadUsedList) {
+ mHeadUsedList = newblock;
+ }
+ newblock->mNext = NULL;
}
-#pragma pop
/* 802CFE68-802CFEB4 2CA7A8 004C+00 5/5 0/0 0/0 .text
* setFreeBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlockPQ210JKRExpHeap9CMemBlockPQ210JKRExpHeap9CMemBlock
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JKRExpHeap::setFreeBlock(JKRExpHeap::CMemBlock* param_0, JKRExpHeap::CMemBlock* param_1,
- JKRExpHeap::CMemBlock* param_2) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/func_802CFE68.s"
+void JKRExpHeap::setFreeBlock(CMemBlock* block, CMemBlock* prev, CMemBlock* next) {
+ if (prev == NULL) {
+ mHeadFreeList = block;
+ block->mPrev = NULL;
+ } else {
+ prev->mNext = block;
+ block->mPrev = prev;
+ }
+ if (next == NULL) {
+ mTailFreeList = block;
+ block->mNext = NULL;
+ } else {
+ next->mPrev = block;
+ block->mNext = next;
+ }
+ block->mMagic = 0;
}
-#pragma pop
/* 802CFEB4-802CFEE8 2CA7F4 0034+00 5/5 0/0 0/0 .text
* removeFreeBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JKRExpHeap::removeFreeBlock(JKRExpHeap::CMemBlock* param_0) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/removeFreeBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s"
+void JKRExpHeap::removeFreeBlock(CMemBlock* block) {
+ CMemBlock* prev = block->mPrev;
+ CMemBlock* next = block->mNext;
+ if (prev == NULL) {
+ mHeadFreeList = next;
+ } else {
+ prev->mNext = next;
+ }
+ if (next == NULL) {
+ mTailFreeList = prev;
+ } else {
+ next->mPrev = prev;
+ }
}
-#pragma pop
/* 802CFEE8-802CFF1C 2CA828 0034+00 1/1 0/0 0/0 .text
* removeUsedBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JKRExpHeap::removeUsedBlock(JKRExpHeap::CMemBlock* param_0) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/removeUsedBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s"
+void JKRExpHeap::removeUsedBlock(JKRExpHeap::CMemBlock* block) {
+ CMemBlock* prev = block->mPrev;
+ CMemBlock* next = block->mNext;
+ if (prev == NULL) {
+ mHeadUsedList = next;
+ } else {
+ prev->mNext = next;
+ }
+ if (next == NULL) {
+ mTailUsedList = prev;
+ } else {
+ next->mPrev = prev;
+ }
}
-#pragma pop
/* 802CFF1C-802D00B4 2CA85C 0198+00 2/2 0/0 0/0 .text
* recycleFreeBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock */
+#if NONMATCHING
+void JKRExpHeap::recycleFreeBlock(JKRExpHeap::CMemBlock* block) {
+ u32 size = block->size;
+ void* blockEnd = (u8*)block + size;
+ block->mMagic = 0;
+ u32 offset = block->getAlignment();
+ if (offset) {
+ block = (CMemBlock*)((u8*)block - offset);
+ size += offset;
+ blockEnd = (u8*)block + size;
+ block->mGroupId = 0;
+ block->mFlags = 0;
+ block->size = size;
+ }
+
+ if (!mHeadFreeList) {
+ block->initiate(NULL, NULL, size, 0, 0);
+ mHeadFreeList = block;
+ mTailFreeList = block;
+ setFreeBlock(block, NULL, NULL);
+ return;
+ }
+ if (mHeadFreeList >= blockEnd) {
+ block->initiate(NULL, NULL, size, 0, 0);
+ setFreeBlock(block, NULL, mHeadFreeList);
+ joinTwoBlocks(block);
+ return;
+ }
+ if (mTailFreeList <= block) {
+ block->initiate(NULL, NULL, size, 0, 0);
+ setFreeBlock(block, mTailFreeList, NULL);
+ joinTwoBlocks(block->getPrevBlock());
+ return;
+ }
+ for (CMemBlock* freeBlock = mHeadFreeList; freeBlock; freeBlock = freeBlock->getNextBlock()) {
+ if (freeBlock >= block || block >= freeBlock->getNextBlock()) {
+ continue;
+ }
+ block->mNext = freeBlock->getNextBlock();
+ block->mPrev = freeBlock;
+ freeBlock->mNext = block;
+ block->mNext->mPrev = block;
+ block->mGroupId = 0;
+ joinTwoBlocks(block);
+ joinTwoBlocks(freeBlock);
+ return;
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -444,6 +845,7 @@ asm void JKRExpHeap::recycleFreeBlock(JKRExpHeap::CMemBlock* param_0) {
#include "asm/JSystem/JKernel/JKRExpHeap/recycleFreeBlock__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 8039CAF0-8039CAF0 029150 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@@ -455,6 +857,22 @@ SECTION_DEAD static char const* const stringBase_8039CB5F = "Bad Block\n";
/* 802D00B4-802D0190 2CA9F4 00DC+00 1/1 0/0 0/0 .text
* joinTwoBlocks__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock */
+#if NONMATCHING
+void JKRExpHeap::joinTwoBlocks(CMemBlock* block) {
+ u32 endAddr = (u32)block->getContent() + block->getSize();
+ CMemBlock* next = block->getNextBlock();
+ u32 nextAddr = (u32)next - next->getAlignment();
+ if (endAddr > nextAddr) {
+ JUTWarningConsole_f(":::Heap may be broken. (block = %x)", block);
+ getCurrentHeap()->dump();
+ JUTException::panic_f("JKRExpHeap.cpp", 0x71c, "%s", "Bad Block\n");
+ }
+ if (endAddr == nextAddr) {
+ block->size = next->getSize() + sizeof(CMemBlock) + next->getAlignment() + block->getSize();
+ setFreeBlock(block, block->getPrevBlock(), next->getNextBlock());
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -463,6 +881,7 @@ asm void JKRExpHeap::joinTwoBlocks(JKRExpHeap::CMemBlock* param_0) {
#include "asm/JSystem/JKernel/JKRExpHeap/joinTwoBlocks__10JKRExpHeapFPQ210JKRExpHeap9CMemBlock.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 8039CAF0-8039CAF0 029150 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@@ -484,6 +903,72 @@ SECTION_DEAD static char const* const stringBase_8039CC67 =
#pragma pop
/* 802D0190-802D03B8 2CAAD0 0228+00 1/0 0/0 0/0 .text check__10JKRExpHeapFv */
+#if NONMATCHING
+bool JKRExpHeap::check() {
+ lock();
+ int totalBytes = 0;
+ bool ok = true;
+ for (CMemBlock* block = mHeadUsedList; block; block = block->getNextBlock()) {
+ if (!block->isValid()) {
+ ok = false;
+ JUTWarningConsole_f(":::addr %08x: bad heap signature. (%c%c)\n", block,
+ block->mMagic >> 8, block->mMagic & 0xff);
+ }
+ if (block->getNextBlock()) {
+ if (!block->getNextBlock()->isValid()) {
+ ok = false;
+ JUTWarningConsole_f(":::addr %08x: bad next pointer (%08x)\nabort\n", block,
+ block->getNextBlock());
+ break;
+ }
+ if (block->getNextBlock()->getPrevBlock() != block) {
+ ok = false;
+ JUTWarningConsole_f(":::addr %08x: bad previous pointer (%08x)\n",
+ block->getNextBlock(), block->getNextBlock()->getPrevBlock());
+ }
+ } else {
+ if (mTailUsedList != block) {
+ ok = false;
+ JUTWarningConsole_f(":::addr %08x: bad used list(REV) (%08x)\n", block,
+ mTailUsedList);
+ }
+ }
+ totalBytes += sizeof(CMemBlock) + block->getSize() + block->getAlignment();
+ }
+ for (CMemBlock* block = mHeadFreeList; block; block = block->getNextBlock()) {
+ totalBytes += block->getSize() + sizeof(CMemBlock);
+ if (block->getNextBlock()) {
+ if (block->getNextBlock()->getPrevBlock() != block) {
+ ok = false;
+ JUTWarningConsole_f(":::addr %08x: bad previous pointer (%08x)\n",
+ block->getNextBlock(), block->getNextBlock()->getPrevBlock());
+ }
+ if ((u32)block + block->getSize() + sizeof(CMemBlock) > (u32)block->getNextBlock()) {
+ ok = false;
+ JUTWarningConsole_f(":::addr %08x: bad block size (%08x)\n", block,
+ block->getSize());
+ }
+ } else {
+ if (mTailFreeList != block) {
+ ok = false;
+ JUTWarningConsole_f(":::addr %08x: bad used list(REV) (%08x)\n", block,
+ mTailFreeList);
+ }
+ }
+ }
+ if (totalBytes != getSize()) {
+ ok = false;
+ JUTWarningConsole_f(":::bad total memory block size (%08X, %08X)\n", getSize(), totalBytes);
+ }
+
+ if (!ok) {
+ JUTWarningConsole(":::there is some error in this heap!\n");
+ }
+
+ unlock();
+ return ok;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -492,6 +977,7 @@ asm bool JKRExpHeap::check() {
#include "asm/JSystem/JKernel/JKRExpHeap/check__10JKRExpHeapFv.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 8039CAF0-8039CAF0 029150 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@@ -525,6 +1011,51 @@ SECTION_SDATA2 static f32 lit_1121[1 + 1 /* padding */] = {
SECTION_SDATA2 static f64 lit_1123 = 4503599627370496.0 /* cast u32 to float */;
/* 802D03B8-802D05CC 2CACF8 0214+00 1/0 0/0 0/0 .text dump__10JKRExpHeapFv */
+#if NONMATCHING
+bool JKRExpHeap::dump() {
+ lock();
+ bool result = check();
+ u32 usedBytes = 0;
+ u32 usedCount = 0;
+ u32 freeCount = 0;
+ JUTReportConsole(" attr address: size gid aln prev_ptr next_ptr\n");
+ JUTReportConsole("(Used Blocks)\n");
+ if (!mHeadUsedList) {
+ JUTReportConsole(" NONE\n");
+ }
+ for (CMemBlock* block = mHeadUsedList; block; block = block->getNextBlock()) {
+ if (!block->isValid()) {
+ JUTReportConsole_f("xxxxx %08x: -------- --- --- (-------- --------)\nabort\n",
+ block);
+ break;
+ }
+ int offset = block->getAlignment();
+ void* content = block->getContent();
+ const char* type = block->_isTempMemBlock() ? " temp" : "alloc";
+
+ JUTReportConsole_f("%s %08x: %08x %3d %3d (%08x %08x)\n", type, content, block->getSize(),
+ block->getGroupId(), offset, block->getPrevBlock(),
+ block->getNextBlock());
+ usedBytes += sizeof(CMemBlock) + block->getSize() + block->getAlignment();
+ usedCount++;
+ }
+ JUTReportConsole("(Free Blocks)\n");
+ if (!mHeadFreeList) {
+ JUTReportConsole(" NONE\n");
+ }
+ for (CMemBlock* block = mHeadFreeList; block; block = block->getNextBlock()) {
+ JUTReportConsole_f("%s %08x: %08x %3d %3d (%08x %08x)\n", " free", block->getContent(),
+ block->getSize(), block->getGroupId(), block->getAlignment(),
+ block->getPrevBlock(), block->getNextBlock());
+ freeCount++;
+ }
+ float percent = ((float)usedBytes / (float)getSize()) * 100.0f;
+ JUTReportConsole_f("%d / %d bytes (%6.2f%%) used (U:%d F:%d)\n", usedBytes, getSize(), percent,
+ usedCount, freeCount);
+ unlock();
+ return result;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -533,8 +1064,65 @@ asm bool JKRExpHeap::dump() {
#include "asm/JSystem/JKernel/JKRExpHeap/dump__10JKRExpHeapFv.s"
}
#pragma pop
+#endif
/* 802D05CC-802D0810 2CAF0C 0244+00 1/0 0/0 0/0 .text dump_sort__10JKRExpHeapFv */
+#if NONMATCHING
+bool JKRExpHeap::dump_sort() {
+ lock();
+ bool result = check();
+ u32 usedBytes = 0;
+ u32 usedCount = 0;
+ u32 freeCount = 0;
+ JUTReportConsole(" attr address: size gid aln prev_ptr next_ptr\n");
+ JUTReportConsole("(Used Blocks)\n");
+ if (mHeadUsedList == NULL) {
+ JUTReportConsole(" NONE\n");
+ } else {
+ CMemBlock* var1 = NULL;
+ while (true) {
+ CMemBlock* block = (CMemBlock*)0xffffffff;
+ for (CMemBlock* iterBlock = mHeadUsedList; iterBlock;
+ iterBlock = iterBlock->getNextBlock()) {
+ if (var1 < iterBlock && iterBlock < block) {
+ block = iterBlock;
+ }
+ }
+ if (block == (CMemBlock*)0xffffffff) {
+ break;
+ }
+ if (!block->isValid()) {
+ JUTReportConsole_f("xxxxx %08x: -------- --- --- (-------- --------)\nabort\n");
+ break;
+ }
+ int offset = block->getAlignment();
+ void* content = block->getContent();
+ const char* type = block->_isTempMemBlock() ? " temp" : "alloc";
+ JUTReportConsole_f("%s %08x: %08x %3d %3d (%08x %08x)\n", type, content,
+ block->getSize(), block->getGroupId(), offset, block->getPrevBlock(),
+ block->getNextBlock());
+ usedBytes += sizeof(CMemBlock) + block->getSize() + block->getAlignment();
+ usedCount++;
+ var1 = block;
+ }
+ }
+ JUTReportConsole("(Free Blocks)\n");
+ if (mHeadFreeList == NULL) {
+ JUTReportConsole(" NONE\n");
+ }
+ for (CMemBlock* block = mHeadFreeList; block; block = block->getNextBlock()) {
+ JUTReportConsole_f("%s %08x: %08x %3d %3d (%08x %08x)\n", " free", block->getContent(),
+ block->getSize(), block->getGroupId(), block->getAlignment(),
+ block->getPrevBlock(), block->getNextBlock());
+ freeCount++;
+ }
+ float percent = ((float)usedBytes / (float)getSize()) * 100.0f;
+ JUTReportConsole_f("%d / %d bytes (%6.2f%%) used (U:%d F:%d)\n", usedBytes, getSize(), percent,
+ usedCount, freeCount);
+ unlock();
+ return result;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -543,107 +1131,135 @@ asm bool JKRExpHeap::dump_sort() {
#include "asm/JSystem/JKernel/JKRExpHeap/dump_sort__10JKRExpHeapFv.s"
}
#pragma pop
+#endif
/* 802D0810-802D0830 2CB150 0020+00 4/4 0/0 0/0 .text
* initiate__Q210JKRExpHeap9CMemBlockFPQ210JKRExpHeap9CMemBlockPQ210JKRExpHeap9CMemBlockUlUcUc */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JKRExpHeap::CMemBlock::initiate(JKRExpHeap::CMemBlock* param_0,
- JKRExpHeap::CMemBlock* param_1, u32 param_2, u8 param_3,
- u8 param_4) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/func_802D0810.s"
+void JKRExpHeap::CMemBlock::initiate(JKRExpHeap::CMemBlock* prev, JKRExpHeap::CMemBlock* next,
+ u32 size, u8 groupId, u8 alignment) {
+ mMagic = 'HM';
+ mFlags = alignment;
+ mGroupId = groupId;
+ this->size = size;
+ mPrev = prev;
+ mNext = next;
}
-#pragma pop
/* 802D0830-802D0874 2CB170 0044+00 3/3 0/0 0/0 .text
* allocFore__Q210JKRExpHeap9CMemBlockFUlUcUcUcUc */
+#if NONMATCHING
+JKRExpHeap::CMemBlock* JKRExpHeap::CMemBlock::allocFore(u32 size, u8 groupId1, u8 alignment1,
+ u8 groupId2, u8 alignment2) {
+ CMemBlock* block = NULL;
+ mGroupId = groupId1;
+ mFlags = alignment1;
+ if (getSize() >= size + sizeof(CMemBlock)) {
+ CMemBlock* newblock = (CMemBlock*)(size + (u32)this);
+ newblock[1].mGroupId = groupId2;
+ newblock[1].mFlags = alignment2;
+ newblock[1].size = this->size - (size + sizeof(CMemBlock));
+ this->size = size;
+ block = newblock + 1;
+ }
+ return block;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void JKRExpHeap::CMemBlock::allocFore(u32 param_0, u8 param_1, u8 param_2, u8 param_3,
- u8 param_4) {
+asm JKRExpHeap::CMemBlock* JKRExpHeap::CMemBlock::allocFore(u32 param_0, u8 param_1, u8 param_2,
+ u8 param_3, u8 param_4) {
nofralloc
#include "asm/JSystem/JKernel/JKRExpHeap/allocFore__Q210JKRExpHeap9CMemBlockFUlUcUcUcUc.s"
}
#pragma pop
+#endif
/* 802D0874-802D08CC 2CB1B4 0058+00 1/1 0/0 0/0 .text
* allocBack__Q210JKRExpHeap9CMemBlockFUlUcUcUcUc */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JKRExpHeap::CMemBlock::allocBack(u32 param_0, u8 param_1, u8 param_2, u8 param_3,
- u8 param_4) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/allocBack__Q210JKRExpHeap9CMemBlockFUlUcUcUcUc.s"
+JKRExpHeap::CMemBlock* JKRExpHeap::CMemBlock::allocBack(u32 size, u8 groupId1, u8 alignment1,
+ u8 groupId2, u8 alignment2) {
+ CMemBlock* newblock = NULL;
+ if (getSize() >= size + sizeof(CMemBlock)) {
+ newblock = (CMemBlock*)((u32)this + getSize() - size);
+ newblock->mGroupId = groupId2;
+ newblock->mFlags = alignment2 | 0x80;
+ newblock->size = size;
+ mGroupId = groupId1;
+ mFlags = alignment1;
+ this->size -= size + sizeof(CMemBlock);
+ } else {
+ mGroupId = groupId2;
+ mFlags = 0x80;
+ }
+ return newblock;
}
-#pragma pop
/* 802D08CC-802D091C 2CB20C 0050+00 2/2 0/0 0/0 .text free__Q210JKRExpHeap9CMemBlockFP10JKRExpHeap
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JKRExpHeap::CMemBlock::free(JKRExpHeap* param_0) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/free__Q210JKRExpHeap9CMemBlockFP10JKRExpHeap.s"
+int JKRExpHeap::CMemBlock::free(JKRExpHeap* heap) {
+ heap->removeUsedBlock(this);
+ heap->recycleFreeBlock(this);
+ return 0;
}
-#pragma pop
/* 802D091C-802D0938 2CB25C 001C+00 3/3 0/0 0/0 .text getHeapBlock__Q210JKRExpHeap9CMemBlockFPv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JKRExpHeap::CMemBlock::getHeapBlock(void* param_0) {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/getHeapBlock__Q210JKRExpHeap9CMemBlockFPv.s"
+JKRExpHeap::CMemBlock* JKRExpHeap::CMemBlock::getHeapBlock(void* ptr) {
+ if (ptr) {
+ CMemBlock* block = (CMemBlock*)ptr - 1;
+ if (block->isValid()) {
+ return block;
+ }
+ }
+ return NULL;
}
-#pragma pop
/* 802D0938-802D09E0 2CB278 00A8+00 1/0 0/0 0/0 .text
* state_register__10JKRExpHeapCFPQ27JKRHeap6TStateUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JKRExpHeap::state_register(JKRHeap::TState* param_0, u32 param_1) const {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/state_register__10JKRExpHeapCFPQ27JKRHeap6TStateUl.s"
+void JKRExpHeap::state_register(JKRHeap::TState* p, u32 param_1) const {
+ p->mId = param_1;
+ if (param_1 <= 0xff) {
+ p->mUsedSize = getUsedSize(param_1);
+ } else {
+ s32 freeSize = const_cast<JKRExpHeap*>(this)->getTotalFreeSize();
+ p->mUsedSize = getSize() - freeSize;
+ }
+ u32 checkCode = 0;
+ for (CMemBlock* block = mHeadUsedList; block; block = block->getNextBlock()) {
+ if (param_1 <= 0xff) {
+ u8 groupId = block->getGroupId();
+ if (groupId == param_1) {
+ checkCode += (u32)block * 3;
+ }
+ } else {
+ checkCode += (u32)block * 3;
+ }
+ }
+ p->mCheckCode = checkCode;
}
-#pragma pop
/* 802D09E0-802D0A10 2CB320 0030+00 1/0 0/0 0/0 .text
* state_compare__10JKRExpHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool JKRExpHeap::state_compare(JKRHeap::TState const& param_0,
- JKRHeap::TState const& param_1) const {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/state_compare__10JKRExpHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState.s"
+bool JKRExpHeap::state_compare(JKRHeap::TState const& r1, JKRHeap::TState const& r2) const {
+ bool result = true;
+ if (r1.mCheckCode != r2.mCheckCode) {
+ result = false;
+ }
+ if (r1.mUsedSize != r2.mUsedSize) {
+ result = false;
+ }
+ return result;
}
-#pragma pop
/* 802D0A10-802D0A1C 2CB350 000C+00 1/0 0/0 0/0 .text getHeapType__10JKRExpHeapFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm u32 JKRExpHeap::getHeapType() {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/getHeapType__10JKRExpHeapFv.s"
+u32 JKRExpHeap::getHeapType() {
+ return 'EXPH';
}
-#pragma pop
/* 802D0A1C-802D0A24 2CB35C 0008+00 1/0 0/0 0/0 .text do_getCurrentGroupId__10JKRExpHeapFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm u8 JKRExpHeap::do_getCurrentGroupId() {
- nofralloc
-#include "asm/JSystem/JKernel/JKRExpHeap/do_getCurrentGroupId__10JKRExpHeapFv.s"
+u8 JKRExpHeap::do_getCurrentGroupId() {
+ return mCurrentGroupId;
}
-#pragma pop
/* ############################################################################################## */
/* 8039CD84-8039CDA0 0293E4 001C+00 0/0 0/0 0/0 .rodata None */