mirror of
https://github.com/Noratrieb/riverdelta.git
synced 2026-01-14 16:35:03 +01:00
list or whatever
This commit is contained in:
parent
179c4b3505
commit
b2b80fe2ee
5 changed files with 59 additions and 33 deletions
|
|
@ -7,23 +7,13 @@ global HEAD_PTR: I32 = 1024_I32;
|
|||
|
||||
// Allocate a new item. We do not deallocate anything yet.
|
||||
// lol.
|
||||
function allocateItem(objSize: I32, align: I32): I32 = (
|
||||
function allocate(size: I32, align: I32): I32 = (
|
||||
if align < 4_I32 then std.abort("invalid alignment");
|
||||
|
||||
// Include the refcount header.
|
||||
let actualSize = 4_I32 + objSize;
|
||||
|
||||
// Let's see whether we can fit the refcount into the align bits.
|
||||
// I happen to know that everything will always be at least 4 bytes aligned.
|
||||
let alignedPtr = std.alignUp(HEAD_PTR, align);
|
||||
let actualObjPtr = if (alignedPtr - HEAD_PTR) > align then (
|
||||
alignedPtr - 4_I32
|
||||
) else (
|
||||
// Take up the next spot.
|
||||
alignedPtr + align - 4_I32
|
||||
);
|
||||
|
||||
let newHeadPtr = actualObjPtr + actualSize;
|
||||
let newHeadPtr = alignedPtr + size;
|
||||
|
||||
if newHeadPtr > __memory_size() then (
|
||||
// 16 pages, very arbitrary.
|
||||
|
|
@ -36,10 +26,10 @@ function allocateItem(objSize: I32, align: I32): I32 = (
|
|||
|
||||
HEAD_PTR = newHeadPtr;
|
||||
|
||||
actualObjPtr
|
||||
alignedPtr
|
||||
);
|
||||
|
||||
function deallocateItem(ptr: I32, objSize: I32) = (
|
||||
function deallocate(ptr: I32, size: I32) = (
|
||||
std.println("uwu deawwocate :3");
|
||||
);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue