From 170728bbb974602ceb8a52a4226e8b83bf97b17b Mon Sep 17 00:00:00 2001 From: Max Date: Sat, 17 Oct 2020 23:14:47 -0400 Subject: match func_801DAAE0 --- src/code_801DAAE0.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/code_801DAAE0.cpp (limited to 'src/code_801DAAE0.cpp') diff --git a/src/code_801DAAE0.cpp b/src/code_801DAAE0.cpp new file mode 100644 index 0000000..0a7a460 --- /dev/null +++ b/src/code_801DAAE0.cpp @@ -0,0 +1,21 @@ +#include "types.h" +#include "unkStruct.h" +#include "code_801DAAE0.h" + +// TODO: C or C++ + +extern "C" { + +// unkStruct gUnk8063F2D0(1, 4, 0); + +unkClass gUnk804912B0[16]; + +unkClass* func_801DAAE0(void) +{ + for (u32 i = 0; i < 16; i++) + if (gUnk804912B0[i].unk0 == 0) + return &gUnk804912B0[i]; + return NULL; +} + +} -- cgit v1.2.3 From f4bba77e25e70dc342724435af05d3ae1fe19c5b Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 18 Oct 2020 00:06:45 -0400 Subject: match func_801DAB28, func_801DAB30, and func_801DAB78 --- src/code_801DAAE0.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/code_801DAAE0.cpp') diff --git a/src/code_801DAAE0.cpp b/src/code_801DAAE0.cpp index 0a7a460..2398148 100644 --- a/src/code_801DAAE0.cpp +++ b/src/code_801DAAE0.cpp @@ -7,6 +7,14 @@ extern "C" { // unkStruct gUnk8063F2D0(1, 4, 0); +// TODO: move +extern u8 lbl_8063F2D6; +extern u8 lbl_8063F2D7; +extern u32 lbl_8063F2D8; +extern u16 lbl_8063F2DC; +void *memset(void *s, int c, size_t n); +MEMHeapHandle MEMCreateExpHeapEx(void* p1, u32 p2, u16 p3); + unkClass gUnk804912B0[16]; @@ -18,4 +26,32 @@ unkClass* func_801DAAE0(void) return NULL; } +BOOL func_801DAB28(void) +{ + return lbl_8063F2D6; +} + +void func_801DAB30(void) +{ + memset(gUnk804912B0, 0, sizeof(gUnk804912B0)); + lbl_8063F2D8 = 0; + lbl_8063F2DC = 0; + lbl_8063F2D6 = 1; + lbl_8063F2D7 = 0; +} + +MEMHeapHandle func_801DAB78(void* p1, u32 p2, u16 p3) +{ + if (!func_801DAB28()) + return 0; + unkClass* r31 = func_801DAAE0(); + if (!r31) + return 0; + MEMHeapHandle r3 = MEMCreateExpHeapEx(p1, p2, p3); + r31->unk0 = 1; + r31->unk4 = r3; + r31->unk8 = p2; + return r3; +} + } -- cgit v1.2.3 From 0403eb6c4ba1c8d6fe8bb1e542d6737cb2bfc46e Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 18 Oct 2020 00:55:49 -0400 Subject: match func_801DAC0C, func_801DAC14, func_801DAC44 --- src/code_801DAAE0.cpp | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'src/code_801DAAE0.cpp') diff --git a/src/code_801DAAE0.cpp b/src/code_801DAAE0.cpp index 2398148..f54450d 100644 --- a/src/code_801DAAE0.cpp +++ b/src/code_801DAAE0.cpp @@ -8,13 +8,16 @@ extern "C" { // unkStruct gUnk8063F2D0(1, 4, 0); // TODO: move +extern u32 lbl_8063E8E8; +extern u32 lbl_8063E8EC; extern u8 lbl_8063F2D6; extern u8 lbl_8063F2D7; extern u32 lbl_8063F2D8; extern u16 lbl_8063F2DC; + void *memset(void *s, int c, size_t n); MEMHeapHandle MEMCreateExpHeapEx(void* p1, u32 p2, u16 p3); - +u16 MEMSetGroupIDForExpHeap(MEMHeapHandle heap, u16 groupID); unkClass gUnk804912B0[16]; @@ -54,4 +57,28 @@ MEMHeapHandle func_801DAB78(void* p1, u32 p2, u16 p3) return r3; } +u32 func_801DAC0C(void) +{ + return lbl_8063F2D8; +} + +u32 func_801DAC14(u32 p1) +{ + u32 r3 = func_801DAC0C(); + lbl_8063F2D8 = p1; + return r3; +} + +u16 func_801DAC44(u16 p1) +{ + u16 r31 = lbl_8063F2DC; + lbl_8063F2DC = p1; + MEMSetGroupIDForExpHeap(lbl_8063E8E8, (u16)(p1 & 0xff)); + MEMSetGroupIDForExpHeap(lbl_8063E8EC, (u16)(lbl_8063F2DC & 0xff)); + return r31; +} + + + + } -- cgit v1.2.3 From 3ac8c8de6aefd3d31498a8a638f196838cffd523 Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 18 Oct 2020 02:22:36 -0400 Subject: match up to func_801DAF70 --- src/code_801DAAE0.cpp | 149 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 142 insertions(+), 7 deletions(-) (limited to 'src/code_801DAAE0.cpp') diff --git a/src/code_801DAAE0.cpp b/src/code_801DAAE0.cpp index f54450d..d999cdc 100644 --- a/src/code_801DAAE0.cpp +++ b/src/code_801DAAE0.cpp @@ -7,17 +7,25 @@ extern "C" { // unkStruct gUnk8063F2D0(1, 4, 0); -// TODO: move -extern u32 lbl_8063E8E8; -extern u32 lbl_8063E8EC; +// TODO: move to headers +extern MEMHeapHandle lbl_8063E8E8; +extern MEMHeapHandle lbl_8063E8EC; extern u8 lbl_8063F2D6; extern u8 lbl_8063F2D7; -extern u32 lbl_8063F2D8; +extern MEMHeapHandle lbl_8063F2D8; extern u16 lbl_8063F2DC; void *memset(void *s, int c, size_t n); MEMHeapHandle MEMCreateExpHeapEx(void* p1, u32 p2, u16 p3); u16 MEMSetGroupIDForExpHeap(MEMHeapHandle heap, u16 groupID); +void *MEMAllocFromExpHeapEx(MEMHeapHandle heap, u32 size, int alignment); +u32 MEMResizeForMBlockExpHeap(MEMHeapHandle heap, void *memBlock, u32 size); +void MEMFreeToExpHeap(MEMHeapHandle heap, void *memBlock); +u32 MEMGetSizeForMBlockExpHeap(const void *memBlock); +u32 MEMGetTotalFreeSizeForExpHeap(MEMHeapHandle heap); +u16 MEMGetGroupIDForMBlockExpHeap(const void *memBlock); +//void MEMVisitAllocatedForExpHeap(MEMHeapHandle heap, MEMHeapVisitor visitor, u32 userParam); + unkClass gUnk804912B0[16]; @@ -57,14 +65,14 @@ MEMHeapHandle func_801DAB78(void* p1, u32 p2, u16 p3) return r3; } -u32 func_801DAC0C(void) +MEMHeapHandle func_801DAC0C(void) { return lbl_8063F2D8; } -u32 func_801DAC14(u32 p1) +MEMHeapHandle func_801DAC14(MEMHeapHandle p1) { - u32 r3 = func_801DAC0C(); + MEMHeapHandle r3 = func_801DAC0C(); lbl_8063F2D8 = p1; return r3; } @@ -78,6 +86,133 @@ u16 func_801DAC44(u16 p1) return r31; } +u16 func_801DAC90(MEMHeapHandle heap, u16 groupID) +{ + return MEMSetGroupIDForExpHeap(heap, groupID); +} + +void* func_801DAC94(MEMHeapHandle heap, u32 size) +{ + return MEMAllocFromExpHeapEx(heap, size, 32); +} + +void* lbl_801DAC9C(MEMHeapHandle heap, u32 size, int fill) +{ + void* r31 = func_801DAC94(heap, size); + if (!r31) + return NULL; + memset(r31, fill, size); + return r31; +} + +void* func_801DAD00(MEMHeapHandle heap, u32 size) +{ + return lbl_801DAC9C(heap, size, 0); +} + +void* func_801DAD08(MEMHeapHandle heap, u32 size, int alignment) +{ + return MEMAllocFromExpHeapEx(heap, size, alignment); +} + +void* func_801DAD0C(MEMHeapHandle heap, u32 size, int alignment) +{ + return MEMAllocFromExpHeapEx(heap, size, (alignment > 0) ? -alignment : alignment); +} + +BOOL func_801DAD1C(MEMHeapHandle heap, void *memBlock, u32 size) +{ + return MEMResizeForMBlockExpHeap(heap, memBlock, size) != 0; +} + +void func_801DAD48(MEMHeapHandle heap, void *memBlock) +{ + if (memBlock) + MEMFreeToExpHeap(heap, memBlock); +} + +u32 func_801DAD58(u32, const void *memBlock) +{ + return MEMGetSizeForMBlockExpHeap(memBlock); +} + +u32 func_801DAD60(MEMHeapHandle heap) +{ + return MEMGetTotalFreeSizeForExpHeap(heap); +} + +void *func_801DAD64(size_t size) +{ + return func_801DAC94(func_801DAC0C(), size); +} + +void *func_801DAD98(u32 size) +{ + return func_801DAD00(func_801DAC0C(), size); +} + +void *func_801DADCC(u32 size, int alignment) +{ + return func_801DAD08(func_801DAC0C(), size, alignment); +} + +void *func_801DAE10(u32 size, int alignment) +{ + return func_801DAD08(func_801DAC0C(), size, (alignment > 0) ? -alignment : alignment); +} + +BOOL func_801DAE60(void *memBlock, u32 size) +{ + return func_801DAD1C(func_801DAC0C(), memBlock, size); +} + +void func_801DAEA4(void *memBlock) +{ + if (memBlock) + func_801DAD48(func_801DAC0C(), memBlock); +} + +u32 func_801DAEE0(const void *memBlock) +{ + if (memBlock == NULL) + return 0; + return MEMGetSizeForMBlockExpHeap(memBlock); +} + +u32 func_801DAEF8(void) +{ + return func_801DAD60(func_801DAC0C()); +} + +void lbl_801DAF1C(void *memBlock, MEMHeapHandle, u32 p3) +{ + if (MEMGetGroupIDForMBlockExpHeap(memBlock) == ((unkClass2 *)p3)->groupID) + MEMFreeToExpHeap(((unkClass2 *)p3)->heap, memBlock); +} + +/* +func_801DAF70 +{ + lbl_801DAF1C +} +*/ + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From 8568daeb69769a56131bb4451fe3e18a7a252fb0 Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 18 Oct 2020 13:51:17 -0400 Subject: match func_801DAFAC using an inline asm block --- src/code_801DAAE0.cpp | 88 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 33 deletions(-) (limited to 'src/code_801DAAE0.cpp') diff --git a/src/code_801DAAE0.cpp b/src/code_801DAAE0.cpp index d999cdc..795607d 100644 --- a/src/code_801DAAE0.cpp +++ b/src/code_801DAAE0.cpp @@ -6,16 +6,19 @@ extern "C" { -// unkStruct gUnk8063F2D0(1, 4, 0); +unkStruct gUnk8063F2D0(1, 4, 0); +MEMHeapHandle lbl_8063F2D8; +u16 lbl_8063F2DC; + // TODO: move to headers extern MEMHeapHandle lbl_8063E8E8; extern MEMHeapHandle lbl_8063E8EC; -extern u8 lbl_8063F2D6; -extern u8 lbl_8063F2D7; -extern MEMHeapHandle lbl_8063F2D8; -extern u16 lbl_8063F2DC; + + +typedef void (*MEMHeapVisitor)(void *memBlock, MEMHeapHandle heap, u32 userParam); void *memset(void *s, int c, size_t n); +void *memcpy(void *dest, const void *src, size_t n); MEMHeapHandle MEMCreateExpHeapEx(void* p1, u32 p2, u16 p3); u16 MEMSetGroupIDForExpHeap(MEMHeapHandle heap, u16 groupID); void *MEMAllocFromExpHeapEx(MEMHeapHandle heap, u32 size, int alignment); @@ -24,7 +27,7 @@ void MEMFreeToExpHeap(MEMHeapHandle heap, void *memBlock); u32 MEMGetSizeForMBlockExpHeap(const void *memBlock); u32 MEMGetTotalFreeSizeForExpHeap(MEMHeapHandle heap); u16 MEMGetGroupIDForMBlockExpHeap(const void *memBlock); -//void MEMVisitAllocatedForExpHeap(MEMHeapHandle heap, MEMHeapVisitor visitor, u32 userParam); +void MEMVisitAllocatedForExpHeap(MEMHeapHandle heap, MEMHeapVisitor visitor, u32 userParam); unkClass gUnk804912B0[16]; @@ -39,7 +42,7 @@ unkClass* func_801DAAE0(void) BOOL func_801DAB28(void) { - return lbl_8063F2D6; + return gUnk8063F2D0.unk6; } void func_801DAB30(void) @@ -47,8 +50,8 @@ void func_801DAB30(void) memset(gUnk804912B0, 0, sizeof(gUnk804912B0)); lbl_8063F2D8 = 0; lbl_8063F2DC = 0; - lbl_8063F2D6 = 1; - lbl_8063F2D7 = 0; + gUnk8063F2D0.unk6 = 1; + gUnk8063F2D0.unk7 = 0; } MEMHeapHandle func_801DAB78(void* p1, u32 p2, u16 p3) @@ -190,30 +193,49 @@ void lbl_801DAF1C(void *memBlock, MEMHeapHandle, u32 p3) MEMFreeToExpHeap(((unkClass2 *)p3)->heap, memBlock); } -/* -func_801DAF70 -{ - lbl_801DAF1C +void func_801DAF70(MEMHeapHandle heap, u16 groupID) +{ + unkClass2 param; + param.heap = heap; + param.groupID = groupID; + param.unk8 = 0; + MEMVisitAllocatedForExpHeap(heap, lbl_801DAF1C, (u32)¶m); +} + +void func_801DAFAC(register void *dest, register const void *src, register size_t n) +{ + if ((u32)dest & 0x1f || (u32)src & 0x1f || n & 0x1f) { + memcpy(dest, src, n); + } else { + n /= 32; + // Note: reg0 prevents the previous if condition from using + // r12 as its scratch register instead of r0 + register u32 reg0; + asm + { + mtctr n + addi r3, dest, -4 + addi r4, src, -4 + lbl_801DAFD8: + lwzu reg0, 4(r4) + lwzu r5, 4(r4) + lwzu r6, 4(r4) + lwzu r7, 4(r4) + lwzu r8, 4(r4) + lwzu r9, 4(r4) + lwzu r10, 4(r4) + lwzu r11, 4(r4) + stwu reg0, 4(r3) + stwu r5, 4(r3) + stwu r6, 4(r3) + stwu r7, 4(r3) + stwu r8, 4(r3) + stwu r9, 4(r3) + stwu r10, 4(r3) + stwu r11, 4(r3) + bdnz lbl_801DAFD8 + } + } } -*/ - - - - - - - - - - - - - - - - - - - } -- cgit v1.2.3 From d3966a0f679b41932d857feb0341df04e4fd6744 Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 18 Oct 2020 16:39:39 -0400 Subject: match code_801DAAE0.cpp --- src/code_801DAAE0.cpp | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) (limited to 'src/code_801DAAE0.cpp') diff --git a/src/code_801DAAE0.cpp b/src/code_801DAAE0.cpp index 795607d..4527388 100644 --- a/src/code_801DAAE0.cpp +++ b/src/code_801DAAE0.cpp @@ -6,15 +6,12 @@ extern "C" { -unkStruct gUnk8063F2D0(1, 4, 0); -MEMHeapHandle lbl_8063F2D8; -u16 lbl_8063F2DC; - -// TODO: move to headers -extern MEMHeapHandle lbl_8063E8E8; -extern MEMHeapHandle lbl_8063E8EC; +// TODO: define, don't reference +extern MEMHeapHandle lbl_8063F2D8; +extern u16 lbl_8063F2DC; +// TODO: move, determine actual type definition typedef void (*MEMHeapVisitor)(void *memBlock, MEMHeapHandle heap, u32 userParam); void *memset(void *s, int c, size_t n); @@ -30,11 +27,20 @@ u16 MEMGetGroupIDForMBlockExpHeap(const void *memBlock); void MEMVisitAllocatedForExpHeap(MEMHeapHandle heap, MEMHeapVisitor visitor, u32 userParam); -unkClass gUnk804912B0[16]; +#define ARR_SIZE 16 +static unkClass gUnk804912B0[ARR_SIZE]; + +static unkStruct gUnk8063F2D0(1, 4, 0); +static u8 gUnk8063F2D6; +static u8 gUnk8063F2D7; +// TODO: move to headers +extern MEMHeapHandle lbl_8063E8E8; +extern MEMHeapHandle lbl_8063E8EC; + unkClass* func_801DAAE0(void) { - for (u32 i = 0; i < 16; i++) + for (u32 i = 0; i < ARR_SIZE; i++) if (gUnk804912B0[i].unk0 == 0) return &gUnk804912B0[i]; return NULL; @@ -42,7 +48,7 @@ unkClass* func_801DAAE0(void) BOOL func_801DAB28(void) { - return gUnk8063F2D0.unk6; + return gUnk8063F2D6; } void func_801DAB30(void) @@ -50,8 +56,8 @@ void func_801DAB30(void) memset(gUnk804912B0, 0, sizeof(gUnk804912B0)); lbl_8063F2D8 = 0; lbl_8063F2DC = 0; - gUnk8063F2D0.unk6 = 1; - gUnk8063F2D0.unk7 = 0; + gUnk8063F2D6 = 1; + gUnk8063F2D7 = 0; } MEMHeapHandle func_801DAB78(void* p1, u32 p2, u16 p3) -- cgit v1.2.3 From f18777bd8f8b34bf5541be31e80686f835a3682a Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 18 Oct 2020 18:13:02 -0400 Subject: add headers, and mark internal functions as static --- src/code_801DAAE0.cpp | 95 +++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 52 deletions(-) (limited to 'src/code_801DAAE0.cpp') diff --git a/src/code_801DAAE0.cpp b/src/code_801DAAE0.cpp index 4527388..03f47ce 100644 --- a/src/code_801DAAE0.cpp +++ b/src/code_801DAAE0.cpp @@ -1,44 +1,35 @@ #include "types.h" #include "unkStruct.h" #include "code_801DAAE0.h" - -// TODO: C or C++ +#include "Runtime/__mem.h" +#include "SDK/mem.h" extern "C" { +struct unkClass +{ + u8 unk0; + MEMHeapHandle unk4; + u32 unk8; +}; -// TODO: define, don't reference -extern MEMHeapHandle lbl_8063F2D8; -extern u16 lbl_8063F2DC; - -// TODO: move, determine actual type definition -typedef void (*MEMHeapVisitor)(void *memBlock, MEMHeapHandle heap, u32 userParam); - -void *memset(void *s, int c, size_t n); -void *memcpy(void *dest, const void *src, size_t n); -MEMHeapHandle MEMCreateExpHeapEx(void* p1, u32 p2, u16 p3); -u16 MEMSetGroupIDForExpHeap(MEMHeapHandle heap, u16 groupID); -void *MEMAllocFromExpHeapEx(MEMHeapHandle heap, u32 size, int alignment); -u32 MEMResizeForMBlockExpHeap(MEMHeapHandle heap, void *memBlock, u32 size); -void MEMFreeToExpHeap(MEMHeapHandle heap, void *memBlock); -u32 MEMGetSizeForMBlockExpHeap(const void *memBlock); -u32 MEMGetTotalFreeSizeForExpHeap(MEMHeapHandle heap); -u16 MEMGetGroupIDForMBlockExpHeap(const void *memBlock); -void MEMVisitAllocatedForExpHeap(MEMHeapHandle heap, MEMHeapVisitor visitor, u32 userParam); - +struct unkClass2 +{ + MEMHeapHandle heap; + u16 groupID; + u32 unk8; +}; #define ARR_SIZE 16 -static unkClass gUnk804912B0[ARR_SIZE]; +unkClass gUnk804912B0[ARR_SIZE]; -static unkStruct gUnk8063F2D0(1, 4, 0); -static u8 gUnk8063F2D6; -static u8 gUnk8063F2D7; -// TODO: move to headers -extern MEMHeapHandle lbl_8063E8E8; -extern MEMHeapHandle lbl_8063E8EC; +unkStruct gUnk8063F2D0(1, 4, 0); +u8 gUnk8063F2D6; +u8 gUnk8063F2D7; +MEMHeapHandle gUnk8063F2D8; +u16 gUnk8063F2DC; - -unkClass* func_801DAAE0(void) +static unkClass* func_801DAAE0(void) { for (u32 i = 0; i < ARR_SIZE; i++) if (gUnk804912B0[i].unk0 == 0) @@ -54,8 +45,8 @@ BOOL func_801DAB28(void) void func_801DAB30(void) { memset(gUnk804912B0, 0, sizeof(gUnk804912B0)); - lbl_8063F2D8 = 0; - lbl_8063F2DC = 0; + gUnk8063F2D8 = 0; + gUnk8063F2DC = 0; gUnk8063F2D6 = 1; gUnk8063F2D7 = 0; } @@ -76,22 +67,22 @@ MEMHeapHandle func_801DAB78(void* p1, u32 p2, u16 p3) MEMHeapHandle func_801DAC0C(void) { - return lbl_8063F2D8; + return gUnk8063F2D8; } MEMHeapHandle func_801DAC14(MEMHeapHandle p1) { MEMHeapHandle r3 = func_801DAC0C(); - lbl_8063F2D8 = p1; + gUnk8063F2D8 = p1; return r3; } u16 func_801DAC44(u16 p1) { - u16 r31 = lbl_8063F2DC; - lbl_8063F2DC = p1; + u16 r31 = gUnk8063F2DC; + gUnk8063F2DC = p1; MEMSetGroupIDForExpHeap(lbl_8063E8E8, (u16)(p1 & 0xff)); - MEMSetGroupIDForExpHeap(lbl_8063E8EC, (u16)(lbl_8063F2DC & 0xff)); + MEMSetGroupIDForExpHeap(lbl_8063E8EC, (u16)(gUnk8063F2DC & 0xff)); return r31; } @@ -105,7 +96,7 @@ void* func_801DAC94(MEMHeapHandle heap, u32 size) return MEMAllocFromExpHeapEx(heap, size, 32); } -void* lbl_801DAC9C(MEMHeapHandle heap, u32 size, int fill) +static void* lbl_801DAC9C(MEMHeapHandle heap, u32 size, int fill) { void* r31 = func_801DAC94(heap, size); if (!r31) @@ -129,59 +120,59 @@ void* func_801DAD0C(MEMHeapHandle heap, u32 size, int alignment) return MEMAllocFromExpHeapEx(heap, size, (alignment > 0) ? -alignment : alignment); } -BOOL func_801DAD1C(MEMHeapHandle heap, void *memBlock, u32 size) +static BOOL func_801DAD1C(MEMHeapHandle heap, void* memBlock, u32 size) { return MEMResizeForMBlockExpHeap(heap, memBlock, size) != 0; } -void func_801DAD48(MEMHeapHandle heap, void *memBlock) +void func_801DAD48(MEMHeapHandle heap, void* memBlock) { if (memBlock) MEMFreeToExpHeap(heap, memBlock); } -u32 func_801DAD58(u32, const void *memBlock) +u32 func_801DAD58(u32, const void* memBlock) { return MEMGetSizeForMBlockExpHeap(memBlock); } -u32 func_801DAD60(MEMHeapHandle heap) +static u32 func_801DAD60(MEMHeapHandle heap) { return MEMGetTotalFreeSizeForExpHeap(heap); } -void *func_801DAD64(size_t size) +void* func_801DAD64(size_t size) { return func_801DAC94(func_801DAC0C(), size); } -void *func_801DAD98(u32 size) +void* func_801DAD98(u32 size) { return func_801DAD00(func_801DAC0C(), size); } -void *func_801DADCC(u32 size, int alignment) +void* func_801DADCC(u32 size, int alignment) { return func_801DAD08(func_801DAC0C(), size, alignment); } -void *func_801DAE10(u32 size, int alignment) +void* func_801DAE10(u32 size, int alignment) { return func_801DAD08(func_801DAC0C(), size, (alignment > 0) ? -alignment : alignment); } -BOOL func_801DAE60(void *memBlock, u32 size) +BOOL func_801DAE60(void* memBlock, u32 size) { return func_801DAD1C(func_801DAC0C(), memBlock, size); } -void func_801DAEA4(void *memBlock) +void func_801DAEA4(void* memBlock) { if (memBlock) func_801DAD48(func_801DAC0C(), memBlock); } -u32 func_801DAEE0(const void *memBlock) +u32 func_801DAEE0(const void* memBlock) { if (memBlock == NULL) return 0; @@ -193,7 +184,7 @@ u32 func_801DAEF8(void) return func_801DAD60(func_801DAC0C()); } -void lbl_801DAF1C(void *memBlock, MEMHeapHandle, u32 p3) +static void lbl_801DAF1C(void* memBlock, MEMHeapHandle, u32 p3) { if (MEMGetGroupIDForMBlockExpHeap(memBlock) == ((unkClass2 *)p3)->groupID) MEMFreeToExpHeap(((unkClass2 *)p3)->heap, memBlock); @@ -208,7 +199,7 @@ void func_801DAF70(MEMHeapHandle heap, u16 groupID) MEMVisitAllocatedForExpHeap(heap, lbl_801DAF1C, (u32)¶m); } -void func_801DAFAC(register void *dest, register const void *src, register size_t n) +void func_801DAFAC(register void* dest, register const void* src, register size_t n) { if ((u32)dest & 0x1f || (u32)src & 0x1f || n & 0x1f) { memcpy(dest, src, n); @@ -244,4 +235,4 @@ void func_801DAFAC(register void *dest, register const void *src, register size_ } } -} +} //extern "C" -- cgit v1.2.3 From e773605fd49dca29ebb74f0e387576e7eaea3cee Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 18 Oct 2020 18:24:23 -0400 Subject: arrange file-local type definitions, constants, and objects into an unnamed namespace --- src/code_801DAAE0.cpp | 49 ++++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 23 deletions(-) (limited to 'src/code_801DAAE0.cpp') diff --git a/src/code_801DAAE0.cpp b/src/code_801DAAE0.cpp index 03f47ce..6d77fd3 100644 --- a/src/code_801DAAE0.cpp +++ b/src/code_801DAAE0.cpp @@ -4,30 +4,33 @@ #include "Runtime/__mem.h" #include "SDK/mem.h" -extern "C" { - -struct unkClass -{ - u8 unk0; - MEMHeapHandle unk4; - u32 unk8; -}; - -struct unkClass2 -{ - MEMHeapHandle heap; - u16 groupID; - u32 unk8; -}; - -#define ARR_SIZE 16 -unkClass gUnk804912B0[ARR_SIZE]; +namespace +{ + struct unkClass + { + u8 unk0; + MEMHeapHandle unk4; + u32 unk8; + }; + + struct unkClass2 + { + MEMHeapHandle heap; + u16 groupID; + u32 unk8; + }; + + const size_t ARR_SIZE = 16; + unkClass gUnk804912B0[ARR_SIZE]; + + unkStruct gUnk8063F2D0(1, 4, 0); + u8 gUnk8063F2D6; + u8 gUnk8063F2D7; + MEMHeapHandle gUnk8063F2D8; + u16 gUnk8063F2DC; +} -unkStruct gUnk8063F2D0(1, 4, 0); -u8 gUnk8063F2D6; -u8 gUnk8063F2D7; -MEMHeapHandle gUnk8063F2D8; -u16 gUnk8063F2DC; +extern "C" { static unkClass* func_801DAAE0(void) { -- cgit v1.2.3 From 041ed059a45caad65808c65e2e39fd614e5f5a37 Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 18 Oct 2020 19:28:05 -0400 Subject: wrapped func_801DAFAC in a ifdef --- src/code_801DAAE0.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'src/code_801DAAE0.cpp') diff --git a/src/code_801DAAE0.cpp b/src/code_801DAAE0.cpp index 6d77fd3..6b830b8 100644 --- a/src/code_801DAAE0.cpp +++ b/src/code_801DAAE0.cpp @@ -202,6 +202,7 @@ void func_801DAF70(MEMHeapHandle heap, u16 groupID) MEMVisitAllocatedForExpHeap(heap, lbl_801DAF1C, (u32)¶m); } +#ifdef USES_INLINE_ASM void func_801DAFAC(register void* dest, register const void* src, register size_t n) { if ((u32)dest & 0x1f || (u32)src & 0x1f || n & 0x1f) { @@ -237,5 +238,44 @@ void func_801DAFAC(register void* dest, register const void* src, register size_ } } } +#else +asm void func_801DAFAC(register void* dest, register const void* src, register size_t n) +{ + nofralloc + /* 801DAFAC 001D6C0C 54 60 06 FF */ clrlwi. r0, r3, 0x1b + /* 801DAFB0 001D6C10 40 82 00 14 */ bne lbl_801DAFC4 + /* 801DAFB4 001D6C14 54 80 06 FF */ clrlwi. r0, r4, 0x1b + /* 801DAFB8 001D6C18 40 82 00 0C */ bne lbl_801DAFC4 + /* 801DAFBC 001D6C1C 54 A0 06 FF */ clrlwi. r0, r5, 0x1b + /* 801DAFC0 001D6C20 41 82 00 08 */ beq lbl_801DAFC8 + lbl_801DAFC4: + /* 801DAFC4 001D6C24 4B E2 90 3C */ b memcpy + lbl_801DAFC8: + /* 801DAFC8 001D6C28 54 A5 D9 7E */ srwi r5, r5, 5 + /* 801DAFCC 001D6C2C 7C A9 03 A6 */ mtctr r5 + /* 801DAFD0 001D6C30 38 63 FF FC */ addi r3, r3, -4 + /* 801DAFD4 001D6C34 38 84 FF FC */ addi r4, r4, -4 + lbl_801DAFD8: + /* 801DAFD8 001D6C38 84 04 00 04 */ lwzu r0, 4(r4) + /* 801DAFDC 001D6C3C 84 A4 00 04 */ lwzu r5, 4(r4) + /* 801DAFE0 001D6C40 84 C4 00 04 */ lwzu r6, 4(r4) + /* 801DAFE4 001D6C44 84 E4 00 04 */ lwzu r7, 4(r4) + /* 801DAFE8 001D6C48 85 04 00 04 */ lwzu r8, 4(r4) + /* 801DAFEC 001D6C4C 85 24 00 04 */ lwzu r9, 4(r4) + /* 801DAFF0 001D6C50 85 44 00 04 */ lwzu r10, 4(r4) + /* 801DAFF4 001D6C54 85 64 00 04 */ lwzu r11, 4(r4) + /* 801DAFF8 001D6C58 94 03 00 04 */ stwu r0, 4(r3) + /* 801DAFFC 001D6C5C 94 A3 00 04 */ stwu r5, 4(r3) + /* 801DB000 001D6C60 94 C3 00 04 */ stwu r6, 4(r3) + /* 801DB004 001D6C64 94 E3 00 04 */ stwu r7, 4(r3) + /* 801DB008 001D6C68 95 03 00 04 */ stwu r8, 4(r3) + /* 801DB00C 001D6C6C 95 23 00 04 */ stwu r9, 4(r3) + /* 801DB010 001D6C70 95 43 00 04 */ stwu r10, 4(r3) + /* 801DB014 001D6C74 95 63 00 04 */ stwu r11, 4(r3) + /* 801DB018 001D6C78 42 00 FF C0 */ bdnz lbl_801DAFD8 + /* 801DB01C 001D6C7C 4E 80 00 20 */ blr +} +#pragma peephole on +#endif } //extern "C" -- cgit v1.2.3 From fbd635cb89c6e6f8f0e1e9603a515b902e69de06 Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 18 Oct 2020 20:35:35 -0400 Subject: mark else block of func_801DAFAC as nonmatching --- src/code_801DAAE0.cpp | 61 +++++++++++++++++---------------------------------- 1 file changed, 20 insertions(+), 41 deletions(-) (limited to 'src/code_801DAAE0.cpp') diff --git a/src/code_801DAAE0.cpp b/src/code_801DAAE0.cpp index 6b830b8..c03d384 100644 --- a/src/code_801DAAE0.cpp +++ b/src/code_801DAAE0.cpp @@ -202,13 +202,29 @@ void func_801DAF70(MEMHeapHandle heap, u16 groupID) MEMVisitAllocatedForExpHeap(heap, lbl_801DAF1C, (u32)¶m); } -#ifdef USES_INLINE_ASM -void func_801DAFAC(register void* dest, register const void* src, register size_t n) +void func_801DAFAC(register u32* dest, register const u32* src, register size_t n) { if ((u32)dest & 0x1f || (u32)src & 0x1f || n & 0x1f) { memcpy(dest, src, n); } else { n /= 32; + #ifdef NONMATCHING + // 1. instruction order of loads and stores is not right + // 2. branch instruction should be bdnz, not bne + dest--; + src--; + do + { + *++dest = *++src; + *++dest = *++src; + *++dest = *++src; + *++dest = *++src; + *++dest = *++src; + *++dest = *++src; + *++dest = *++src; + *++dest = *++src; + } while (--n > 0); + #else // Note: reg0 prevents the previous if condition from using // r12 as its scratch register instead of r0 register u32 reg0; @@ -236,46 +252,9 @@ void func_801DAFAC(register void* dest, register const void* src, register size_ stwu r11, 4(r3) bdnz lbl_801DAFD8 } + #pragma peephole on + #endif } } -#else -asm void func_801DAFAC(register void* dest, register const void* src, register size_t n) -{ - nofralloc - /* 801DAFAC 001D6C0C 54 60 06 FF */ clrlwi. r0, r3, 0x1b - /* 801DAFB0 001D6C10 40 82 00 14 */ bne lbl_801DAFC4 - /* 801DAFB4 001D6C14 54 80 06 FF */ clrlwi. r0, r4, 0x1b - /* 801DAFB8 001D6C18 40 82 00 0C */ bne lbl_801DAFC4 - /* 801DAFBC 001D6C1C 54 A0 06 FF */ clrlwi. r0, r5, 0x1b - /* 801DAFC0 001D6C20 41 82 00 08 */ beq lbl_801DAFC8 - lbl_801DAFC4: - /* 801DAFC4 001D6C24 4B E2 90 3C */ b memcpy - lbl_801DAFC8: - /* 801DAFC8 001D6C28 54 A5 D9 7E */ srwi r5, r5, 5 - /* 801DAFCC 001D6C2C 7C A9 03 A6 */ mtctr r5 - /* 801DAFD0 001D6C30 38 63 FF FC */ addi r3, r3, -4 - /* 801DAFD4 001D6C34 38 84 FF FC */ addi r4, r4, -4 - lbl_801DAFD8: - /* 801DAFD8 001D6C38 84 04 00 04 */ lwzu r0, 4(r4) - /* 801DAFDC 001D6C3C 84 A4 00 04 */ lwzu r5, 4(r4) - /* 801DAFE0 001D6C40 84 C4 00 04 */ lwzu r6, 4(r4) - /* 801DAFE4 001D6C44 84 E4 00 04 */ lwzu r7, 4(r4) - /* 801DAFE8 001D6C48 85 04 00 04 */ lwzu r8, 4(r4) - /* 801DAFEC 001D6C4C 85 24 00 04 */ lwzu r9, 4(r4) - /* 801DAFF0 001D6C50 85 44 00 04 */ lwzu r10, 4(r4) - /* 801DAFF4 001D6C54 85 64 00 04 */ lwzu r11, 4(r4) - /* 801DAFF8 001D6C58 94 03 00 04 */ stwu r0, 4(r3) - /* 801DAFFC 001D6C5C 94 A3 00 04 */ stwu r5, 4(r3) - /* 801DB000 001D6C60 94 C3 00 04 */ stwu r6, 4(r3) - /* 801DB004 001D6C64 94 E3 00 04 */ stwu r7, 4(r3) - /* 801DB008 001D6C68 95 03 00 04 */ stwu r8, 4(r3) - /* 801DB00C 001D6C6C 95 23 00 04 */ stwu r9, 4(r3) - /* 801DB010 001D6C70 95 43 00 04 */ stwu r10, 4(r3) - /* 801DB014 001D6C74 95 63 00 04 */ stwu r11, 4(r3) - /* 801DB018 001D6C78 42 00 FF C0 */ bdnz lbl_801DAFD8 - /* 801DB01C 001D6C7C 4E 80 00 20 */ blr -} -#pragma peephole on -#endif } //extern "C" -- cgit v1.2.3