From 9fa0a7f1da1b70bee995f53c6c96c43189018772 Mon Sep 17 00:00:00 2001 From: mrb0nk500 Date: Wed, 1 Feb 2023 18:45:02 -0400 Subject: global: Import Dolphin SDK This version comes from the Metroid Prime decompilation project. https://github.com/PrimeDecomp/prime --- src/Dolphin/os/OSArena.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/Dolphin/os/OSArena.c (limited to 'src/Dolphin/os/OSArena.c') diff --git a/src/Dolphin/os/OSArena.c b/src/Dolphin/os/OSArena.c new file mode 100644 index 0000000..da864ab --- /dev/null +++ b/src/Dolphin/os/OSArena.c @@ -0,0 +1,39 @@ +#include + +#define ROUND(n, a) (((u32)(n) + (a)-1) & ~((a)-1)) +#define TRUNC(n, a) (((u32)(n)) & ~((a)-1)) + +void* __OSArenaHi; +void* __OSArenaLo = (void*)-1; + +void* OSGetArenaHi(void) { return __OSArenaHi; } + +void* OSGetArenaLo(void) { return __OSArenaLo; } + +void OSSetArenaHi(void* addr) { __OSArenaHi = addr; } + +void OSSetArenaLo(void* addr) { __OSArenaLo = addr; } + +void* OSAllocFromArenaLo(u32 size, u32 align) { + void* ptr; + u8* arenaLo; + + ptr = OSGetArenaLo(); + arenaLo = ptr = (void*)ROUND(ptr, align); + arenaLo += size; + arenaLo = (u8*)ROUND(arenaLo, align); + OSSetArenaLo(arenaLo); + return ptr; +} + +void* OSAllocFromArenaHi(u32 size, u32 align) { + void* ptr; + u8* arenaHi; + + arenaHi = OSGetArenaHi(); + arenaHi = (u8*)TRUNC(arenaHi, align); + arenaHi -= size; + arenaHi = ptr = (void*)TRUNC(arenaHi, align); + OSSetArenaHi(arenaHi); + return ptr; +} -- cgit v1.2.3-13-gbd6f