Add mmap allocator
This commit is contained in:
+24
-8
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user