diff --git a/src/jit/nvm_x86_64.c b/src/jit/nvm_x86_64.c index b6c37760..2944cfe5 100644 --- a/src/jit/nvm_x86_64.c +++ b/src/jit/nvm_x86_64.c @@ -61,9 +61,9 @@ static void* mmap_nvm(u64 sz) { #define MMAP(SZ) mmap_nvm(sz); #define MUL 1 -#define BUDDY_NO_GC 1 +#define ALLOC_MODE 1 #include "../opt/mm_buddyTemplate.c" -#undef BUDDY_NO_GC +#undef ALLOC_MODE static void* mmX_allocN(usz sz, u8 type) { assert(sz>=16); return mmX_allocL(64-CLZ(sz-1ull), type); } #undef BN #undef BSZ diff --git a/src/opt/mm_2buddy.c b/src/opt/mm_2buddy.c index 29d88630..d3211b52 100644 --- a/src/opt/mm_2buddy.c +++ b/src/opt/mm_2buddy.c @@ -11,6 +11,7 @@ #error MM=2 doesn't support VERIFY_TAIL #endif +#define ALLOC_MODE 0 u64 mm_ctrs[128]; EmptyValue* mm_buckets[128]; #define b1_buckets mm_buckets @@ -34,6 +35,7 @@ EmptyValue* mm_buckets[128]; #include "mm_buddyTemplate.c" #undef BN #undef BSZ +#undef ALLOC_MODE NOINLINE void* mm_allocS(i64 bucket, u8 type) { return bucket&64? b3_allocS(bucket, type) : b1_allocS(bucket, type); diff --git a/src/opt/mm_buddyTemplate.c b/src/opt/mm_buddyTemplate.c index 8f39598f..a9ea6e0c 100644 --- a/src/opt/mm_buddyTemplate.c +++ b/src/opt/mm_buddyTemplate.c @@ -36,7 +36,7 @@ FORCE_INLINE void BN(splitTo)(EmptyValue* c, i64 from, i64 to, bool notEqual) { buckets[from] = c; } -#if !BUDDY_NO_GC && ENABLE_GC +#if ALLOC_MODE==0 && ENABLE_GC static bool BN(allocMore_rec); #endif @@ -44,12 +44,12 @@ static NOINLINE void* BN(allocateMore)(i64 bucket, u8 type, i64 from, i64 to) { u64 sz = BSZ(from); CHECK_INTERRUPT; - #if !BUDDY_NO_GC && ENABLE_GC + #if ALLOC_MODE==0 && ENABLE_GC if (gc_maybeGC(false)) goto alloc_rec; #endif if (mm_heapAlloc+sz >= mm_heapMax) { - #if !BUDDY_NO_GC && ENABLE_GC + #if ALLOC_MODE==0 && ENABLE_GC if (!BN(allocMore_rec)) { gc_forceGC(false); BN(allocMore_rec) = true; @@ -67,8 +67,13 @@ static NOINLINE void* BN(allocateMore)(i64 bucket, u8 type, i64 from, i64 to) { #if NO_MMAP EmptyValue* c = calloc(sz+getPageSize(), 1); #else - EmptyValue* c = MMAP(sz); - if (c==MAP_FAILED) thrOOM(); + u8* mem = MMAP(sz); + if (mem==MAP_FAILED) thrOOM(); + #if ALLOC_MODE==0 + // ux off = offsetof(TyArr,a); + // if (off&31) mem+= 32-(off&31); // align heap such that arr->a is 32-byte-aligned + #endif + EmptyValue* c = (void*)mem; #endif mm_heapAlloc+= sz; @@ -130,7 +135,7 @@ void BN(forFreedHeap)(V2v f) { } } } -#if !BUDDY_NO_GC && ENABLE_GC +#if ALLOC_MODE==0 && ENABLE_GC static void BN(freeFreedAndMerge)() { for (u64 i = 0; i < 64; i++) buckets[i] = NULL;