From 0e8e7da5472a020b4b5d3076befb299ca4e8957c Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 30 Oct 2021 11:50:50 +1000 Subject: [PATCH] Decompile memaRealloc --- src/game/bg.c | 4 ++-- src/include/lib/lib_126b0.h | 5 +++-- src/lib/lib_126b0.c | 44 +++++++++++-------------------------- 3 files changed, 18 insertions(+), 35 deletions(-) diff --git a/src/game/bg.c b/src/game/bg.c index 9fb1a3f16..116722284 100644 --- a/src/game/bg.c +++ b/src/game/bg.c @@ -10069,7 +10069,7 @@ glabel func0f15dc58 /* f15e27c: 01e02825 */ or $a1,$t7,$zero /* f15e280: 51e20009 */ beql $t7,$v0,.L0f15e2a8 /* f15e284: 8c730014 */ lw $s3,0x14($v1) -/* f15e288: 0c004b52 */ jal func00012d48 +/* f15e288: 0c004b52 */ jal memaRealloc /* f15e28c: 00403025 */ or $a2,$v0,$zero /* f15e290: 3c19800a */ lui $t9,%hi(g_Rooms) /* f15e294: 8f394928 */ lw $t9,%lo(g_Rooms)($t9) @@ -10658,7 +10658,7 @@ glabel func0f15dc58 /* f158a74: 01a02825 */ or $a1,$t5,$zero /* f158a78: 51a20009 */ beql $t5,$v0,.NB0f158aa0 /* f158a7c: 8c720014 */ lw $s2,0x14($v1) -/* f158a80: 0c004d69 */ jal func00012d48 +/* f158a80: 0c004d69 */ jal memaRealloc /* f158a84: 00403025 */ or $a2,$v0,$zero /* f158a88: 3c0e800b */ lui $t6,0x800b /* f158a8c: 8dce90a8 */ lw $t6,-0x6f58($t6) diff --git a/src/include/lib/lib_126b0.h b/src/include/lib/lib_126b0.h index 6446c18bd..7f7e3b061 100644 --- a/src/include/lib/lib_126b0.h +++ b/src/include/lib/lib_126b0.h @@ -9,9 +9,10 @@ void memaInit(void); void memaHeapInit(void *ptr, u32 size); void memaPrint(void); void *memaAlloc(u32 size); -u32 func00012c3c(void); +bool memaGrow(u32 arg0, u32 arg1); +void _memaFree(s32 addr, s32 size); void memaFree(void *addr, s32 size); s32 memaGetLongestFree(void); -u32 func00012d48(void); +bool memaRealloc(s32 addr, u32 oldsize, u32 newsize); #endif diff --git a/src/lib/lib_126b0.c b/src/lib/lib_126b0.c index 36095d662..95f14581b 100644 --- a/src/lib/lib_126b0.c +++ b/src/lib/lib_126b0.c @@ -621,7 +621,7 @@ glabel memaAlloc //} GLOBAL_ASM( -glabel func00012c3c +glabel memaGrow /* 12c3c: 3c0f800a */ lui $t7,%hi(g_MemaHeap+0xc) /* 12c40: 8def9484 */ lw $t7,%lo(g_MemaHeap+0xc)($t7) /* 12c44: 3c0e800a */ lui $t6,%hi(g_MemaHeap+0xc) @@ -697,36 +697,18 @@ s32 memaGetLongestFree(void) return 0; } -GLOBAL_ASM( -glabel func00012d48 -/* 12d48: 27bdffe8 */ addiu $sp,$sp,-24 -/* 12d4c: 00a6082b */ sltu $at,$a1,$a2 -/* 12d50: afbf0014 */ sw $ra,0x14($sp) -/* 12d54: afa40018 */ sw $a0,0x18($sp) -/* 12d58: 10200008 */ beqz $at,.L00012d7c -/* 12d5c: 00a03825 */ or $a3,$a1,$zero -/* 12d60: 00852021 */ addu $a0,$a0,$a1 -/* 12d64: 0c004b0f */ jal func00012c3c -/* 12d68: 00c52823 */ subu $a1,$a2,$a1 -/* 12d6c: 5440000a */ bnezl $v0,.L00012d98 -/* 12d70: 24020001 */ addiu $v0,$zero,0x1 -/* 12d74: 10000008 */ b .L00012d98 -/* 12d78: 00001025 */ or $v0,$zero,$zero -.L00012d7c: -/* 12d7c: 00c7082b */ sltu $at,$a2,$a3 -/* 12d80: 10200004 */ beqz $at,.L00012d94 -/* 12d84: 8faf0018 */ lw $t7,0x18($sp) -/* 12d88: 01e62021 */ addu $a0,$t7,$a2 -/* 12d8c: 0c004b2d */ jal memaFree -/* 12d90: 00e62823 */ subu $a1,$a3,$a2 -.L00012d94: -/* 12d94: 24020001 */ addiu $v0,$zero,0x1 -.L00012d98: -/* 12d98: 8fbf0014 */ lw $ra,0x14($sp) -/* 12d9c: 27bd0018 */ addiu $sp,$sp,0x18 -/* 12da0: 03e00008 */ jr $ra -/* 12da4: 00000000 */ nop -); +bool memaRealloc(s32 addr, u32 oldsize, u32 newsize) +{ + if (newsize > oldsize) { + if (!memaGrow(addr + oldsize, newsize - oldsize)) { + return false; + } + } else if (oldsize > newsize) { + memaFree((void *)(addr + newsize), oldsize - newsize); + } + + return true; +} u32 memaGetSize(void) {