summaryrefslogtreecommitdiff
path: root/mm/src/buffers/heaps.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/src/buffers/heaps.c')
-rw-r--r--mm/src/buffers/heaps.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/mm/src/buffers/heaps.c b/mm/src/buffers/heaps.c
index 1e779720f..c87312ee4 100644
--- a/mm/src/buffers/heaps.c
+++ b/mm/src/buffers/heaps.c
@@ -2,23 +2,22 @@
#include "z64.h"
#include <assert.h>
#include <stdlib.h>
-#ifndef _MSC_VER
-#include <unistd.h>
+#if defined(__unix__) || defined(__APPLE__)
+#include <sys/mman.h>
#endif
u8* gAudioHeap;
-
u8* gSystemHeap;
void Heaps_Alloc(void) {
#ifdef _MSC_VER
gAudioHeap = (u8*)_aligned_malloc(AUDIO_HEAP_SIZE, 0x10);
gSystemHeap = (u8*)_aligned_malloc(SYSTEM_HEAP_SIZE, 0x10);
-#elif defined(_POSIX_VERSION) && (_POSIX_VERSION >= 200112L)
- if (posix_memalign((void**)&gAudioHeap, 0x10, AUDIO_HEAP_SIZE) != 0)
- gAudioHeap = NULL;
- if (posix_memalign((void**)&gSystemHeap, 0x10, SYSTEM_HEAP_SIZE) != 0)
- gSystemHeap = NULL;
+#elif defined(__unix__) || defined(__APPLE__)
+ gAudioHeap = mmap(NULL, AUDIO_HEAP_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
+ gSystemHeap = mmap(NULL, SYSTEM_HEAP_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
+ assert(gAudioHeap != MAP_FAILED);
+ assert(gSystemHeap != MAP_FAILED);
#else
gAudioHeap = (u8*)memalign(0x10, AUDIO_HEAP_SIZE);
gSystemHeap = (u8*)memalign(0x10, SYSTEM_HEAP_SIZE);
@@ -26,4 +25,17 @@ void Heaps_Alloc(void) {
assert(gAudioHeap != NULL);
assert(gSystemHeap != NULL);
-} \ No newline at end of file
+}
+
+void Heaps_Free(void) {
+#ifdef _MSC_VER
+ _aligned_free(gAudioHeap);
+ _aligned_free(gSystemHeap);
+#elif defined(__unix__) || defined(__APPLE__)
+ munmap(gAudioHeap, AUDIO_HEAP_SIZE);
+ munmap(gSystemHeap, SYSTEM_HEAP_SIZE);
+#else
+ free(gAudioHeap);
+ free(gSystemHeap);
+#endif
+}