extract bucket definitions from template

This commit is contained in:
dzaima 2021-07-11 21:11:15 +03:00
parent edd1f308ce
commit 1d5e7212fd
7 changed files with 22 additions and 26 deletions

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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) {

View File

@ -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

View File

@ -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