From 1d5e7212fd7f025c65c8bc30eef2df6f825bc19c Mon Sep 17 00:00:00 2001 From: dzaima Date: Sun, 11 Jul 2021 21:11:15 +0300 Subject: [PATCH] extract bucket definitions from template --- src/jit/nvm_x86_64.c | 2 +- src/opt/mm_2buddy.c | 8 +++----- src/opt/mm_2buddy.h | 12 +++++------- src/opt/mm_buddy.c | 5 ++--- src/opt/mm_buddy.h | 8 ++++---- src/opt/mm_buddyTemplate.c | 9 +++++---- src/opt/mm_buddyTemplate.h | 4 ++-- 7 files changed, 22 insertions(+), 26 deletions(-) diff --git a/src/jit/nvm_x86_64.c b/src/jit/nvm_x86_64.c index 0663f993..1af563fd 100644 --- a/src/jit/nvm_x86_64.c +++ b/src/jit/nvm_x86_64.c @@ -15,11 +15,11 @@ // separate memory management system for executable code; isn't garbage-collected +EmptyValue* mmX_buckets[64]; #define BSZ(X) (1ull<<(X)) #define BSZI(X) ((u8)(64-__builtin_clzl((X)-1ull))) #define MMI(X) X #define BN(X) mmX_##X -#define buckets mmX_buckets #include "../opt/mm_buddyTemplate.h" #define MMI(X) X #define ALSZ 17 diff --git a/src/opt/mm_2buddy.c b/src/opt/mm_2buddy.c index 651b9736..3a90f129 100644 --- a/src/opt/mm_2buddy.c +++ b/src/opt/mm_2buddy.c @@ -1,26 +1,24 @@ #include "gc.c" #ifdef OBJ_COUNTER -u64 currObjCounter; + u64 currObjCounter; #endif +EmptyValue* b1_buckets[64]; #define ALSZ 20 #define BSZ(X) (1ull<<(X)) #define MMI(X) X #define BN(X) b1_##X -#define buckets b1_buckets #include "mm_buddyTemplate.c" -#undef buckets #undef BN #undef BSZ +EmptyValue* b3_buckets[64]; #define ALSZ 20 #define BSZ(X) (3ull<<(X)) #define MMI(X) ((X)|64) #define BN(X) b3_##X -#define buckets b3_buckets #include "mm_buddyTemplate.c" -#undef buckets #undef BN #undef BSZ diff --git a/src/opt/mm_2buddy.h b/src/opt/mm_2buddy.h index afaa6169..ccd4b413 100644 --- a/src/opt/mm_2buddy.h +++ b/src/opt/mm_2buddy.h @@ -6,28 +6,26 @@ struct EmptyValue { // needs set: mmInfo; type=t_empty; next; everything else ca struct Value; EmptyValue* next; }; +#ifdef OBJ_COUNTER + extern u64 currObjCounter; +#endif extern u64 mm_heapAlloc; extern u64 mm_heapMax; +extern EmptyValue* b1_buckets[64]; #define BSZ(X) (1ull<<(X)) #define BN(X) b1_##X -#define buckets b1_buckets #include "mm_buddyTemplate.h" -#undef buckets #undef BN #undef BSZ +extern EmptyValue* b3_buckets[64]; #define BSZ(X) (3ull<<(X)) #define BN(X) b3_##X -#define buckets b3_buckets #include "mm_buddyTemplate.h" -#undef buckets #undef BN #undef BSZ -#ifdef OBJ_COUNTER -extern u64 currObjCounter; -#endif static void* mm_alloc(usz sz, u8 type) { assert(sz>=16); diff --git a/src/opt/mm_buddy.c b/src/opt/mm_buddy.c index 19ab5261..9f8ea5f3 100644 --- a/src/opt/mm_buddy.c +++ b/src/opt/mm_buddy.c @@ -1,15 +1,14 @@ #include "gc.c" #ifdef OBJ_COUNTER -u64 currObjCounter; + u64 currObjCounter; #endif +EmptyValue* mm_buckets[64]; #define ALSZ 20 #define BSZ(X) (1ull<<(X)) #define MMI(X) X #define BN(X) mm_##X - #include "mm_buddyTemplate.c" - #undef BN #undef BSZ diff --git a/src/opt/mm_buddy.h b/src/opt/mm_buddy.h index 9cdef9ef..f1bd5391 100644 --- a/src/opt/mm_buddy.h +++ b/src/opt/mm_buddy.h @@ -6,17 +6,17 @@ struct EmptyValue { // needs set: mmInfo; type=t_empty; next; everything else ca struct Value; EmptyValue* next; }; +#ifdef OBJ_COUNTER + extern u64 currObjCounter; +#endif extern u64 mm_heapAlloc; extern u64 mm_heapMax; +extern EmptyValue* mm_buckets[64]; #define BSZ(X) (1ull<<(X)) #define BN(X) mm_##X - #include "mm_buddyTemplate.h" -#ifdef OBJ_COUNTER -extern u64 currObjCounter; -#endif #define BSZI(X) ((u8)(64-__builtin_clzl((X)-1ull))) static void* mm_alloc(usz sz, u8 type) { diff --git a/src/opt/mm_buddyTemplate.c b/src/opt/mm_buddyTemplate.c index 13266849..59f5e6cc 100644 --- a/src/opt/mm_buddyTemplate.c +++ b/src/opt/mm_buddyTemplate.c @@ -1,7 +1,8 @@ #define AllocInfo BN(AllocInfo) -#define al BN(al) -#define alCap BN(alCap) -#define alSize BN(alSize) +#define buckets BN(buckets) +#define al BN(al) +#define alCap BN(alCap) +#define alSize BN(alSize) #define str(X) #X #ifndef PROT #define PROT PROT_READ|PROT_WRITE @@ -10,7 +11,6 @@ #define FLAGS MAP_NORESERVE|MAP_PRIVATE|MAP_ANON #endif -EmptyValue* buckets[64]; typedef struct AllocInfo { Value* p; u64 sz; @@ -83,6 +83,7 @@ void BN(forHeap)(V2v f) { #undef FLAGS #undef PROT #undef AllocInfo +#undef buckets #undef al #undef alSize #undef alCap diff --git a/src/opt/mm_buddyTemplate.h b/src/opt/mm_buddyTemplate.h index 09a3516a..0e7cb59b 100644 --- a/src/opt/mm_buddyTemplate.h +++ b/src/opt/mm_buddyTemplate.h @@ -1,5 +1,4 @@ -extern EmptyValue* buckets[64]; - +#define buckets BN(buckets) static void BN(free)(Value* x) { onFree(x); #ifdef USE_VALGRIND @@ -41,3 +40,4 @@ static void* BN(allocL)(i64 bucket, u8 type) { #endif return x; } +#undef buckets