From bccb280f6daad2b96cc44f393f275f5030c2c1a7 Mon Sep 17 00:00:00 2001 From: mrb0nk500 Date: Sun, 5 Feb 2023 14:29:41 -0400 Subject: THeap: Get `heap_alloc()`, and the constructor closer to matching Mostly regalloc issues. --- src/pso/THeap.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/pso/THeap.cpp b/src/pso/THeap.cpp index 87598b9..2ed961a 100644 --- a/src/pso/THeap.cpp +++ b/src/pso/THeap.cpp @@ -57,10 +57,12 @@ void *THeap::heap_zalloc(size_t size) { // Getting closer, but register allocation issues. #ifndef MATCHING void *THeap::heap_alloc(size_t size) { - const u32 aligned_size = ((heap_offset - 1) + align + size) & -align; THeap *parent = (THeap *)heap; THeap *child; + u32 size_align = (heap_offset - 1) + align + size; + u32 aligned_size = size_align & -align; goto start; + cond: if (child->alloc_size < aligned_size) { goto loop_body; @@ -74,15 +76,14 @@ void *THeap::heap_alloc(size_t size) { tmp->heap = child->heap; tmp->alloc_size = child->alloc_size - aligned_size; child->alloc_size = aligned_size; - parent->heap = (u8 *)tmp; + parent->heap = (u8 *)&tmp->heap; } return (void *)&child->align; loop_body: parent = child; start: - child = (THeap *)parent->heap; - if (child == NULL) { + if (child = (THeap *)parent->heap, child == NULL) { return NULL; } goto cond; @@ -133,7 +134,7 @@ THeap::~THeap() { xfree(heap); } -// Not sure how to get this matching. +// Getting closer, still not sure how to match though. #ifndef MATCHING THeap::THeap(size_t size, int alignment) { heap_size = 0; @@ -141,11 +142,15 @@ THeap::THeap(size_t size, int alignment) { align = alignment; heap = (u8 *)xmalloc(heap_size); if (heap != NULL) { - THeap *tmp_heap = (THeap *)memset(heap, 0, size); + const u32 new_size = size - heap_offset; + THeap *tmp_heap; + memset(heap, 0, size); + + tmp_heap = (THeap *)heap; tmp_heap->heap = &heap[heap_offset]; ((THeap *)heap)->alloc_size = 0; tmp_heap->align = 0; - tmp_heap->heap_size = size - heap_offset; + tmp_heap->heap_size = new_size; } } #else -- cgit v1.2.3-13-gbd6f