Add mmap allocator

This commit is contained in:
Nils O. Selåsdal
2026-06-07 02:27:56 +02:00
parent 256de68410
commit c31aff806d
7 changed files with 116 additions and 51 deletions
+24 -8
View File
@@ -49,6 +49,8 @@ typedef unsigned __int128 U128;
// asserts
#define Trap() __builtin_trap()
#define Abort() __builtin_abort()
#define Assert(x) do { if (!(x)) { Trap(); }} while(0)
#define NotImplemented Assert(!"Not Implemented")
@@ -71,7 +73,7 @@ typedef unsigned __int128 U128;
_amn < _bmn ? _amn : _bmn; \
})
#define ArraySize(a) (sizeof(a) / sizeof(a[0]))
#define ArraySize(a) (sizeof(a) / sizeof((a)[0]))
#define Swap(a, b) \
do { \
@@ -133,8 +135,8 @@ typedef unsigned __int128 U128;
/**
* Round x up to nearest multiple of y
* e.g. ROUND_UP(30,48) == 48
* e.g. ROUND_UP(49,48) == 96
* e.g. RoundUp(30,48) == 48
* e.g. RoundUp(49,48) == 96
*
* @param x numerator, must be positive
* @param y denominator
@@ -144,8 +146,8 @@ typedef unsigned __int128 U128;
/**
* Round x down to nearest multiple of y
* e.g. ROUND_UP(30,48) == 0
* e.g. ROUND_UP(49,48) == 48
* e.g. RoundDown(30,48) == 0
* e.g. RoundDown(49,48) == 48
*
* @param x numerator, must be positive
* @param y denominator
@@ -194,15 +196,15 @@ typedef unsigned __int128 U128;
#define MemoryZero(ptr, len) explicit_bzero(ptr, len)
#endif
#define MemMove(dst, src, len) memmove(dst, src, len)
#define MemCpy(dst, src, len) memcpy(dst, src, len)
#define MemCopy(dst, src, len) memcpy(dst, src, len)
#define MemAppend(dst, src, len) mempcpy(dst, src, len)
// atomics
#define Atomic(type) _Atomic(type)
#define AtomicSub(ptr, val) __atomic_fetch_sub((ptr), (val), __ATOMIC_SEQ_CST)
#define AtomicAdd(ptr, val) __atomic_fetch_add((ptr), (val), __ATOMIC_SEQ_CST)
#define AtomicDec(ptr) UC_ATOMIC_SUB((ptr), 1)
#define AtomicInc(ptr) UC_ATOMIC_ADD((ptr), 1)
#define AtomicDec(ptr) AtomicSub((ptr), 1)
#define AtomicInc(ptr) AtomicAdd((ptr), 1)
#define AtomicGet(ptr) __c11_atomic_load((ptr), __ATOMIC_SEQ_CST)
#define AtomicCAS(ptr, oldval, newval) \
__atomic_compare_exchange((ptr), (oldval), (newval),0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
@@ -290,3 +292,17 @@ static INLINE U64 SaturatingMult64(U64 a, U64 b)
return SaturatingMult(a, b, U64, U64_Max);
}
// address-sanitizer helpers (-fsanitize=address)
#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
#include <sanitizer/asan_interface.h>
#define ASAN_POISON_MEMORY_REGION(addr, size) \
__asan_poison_memory_region((addr), (size))
#define ASAN_UNPOISON_MEMORY_REGION(addr, size) \
__asan_unpoison_memory_region((addr), (size))
#else
#define ASAN_POISON_MEMORY_REGION(addr, size) \
((void)(addr), (void)(size))
#define ASAN_UNPOISON_MEMORY_REGION(addr, size) \
((void)(addr), (void)(size))
#endif