Use C Macro to communicate real meaning of page->previous_size
This commit is contained in:
parent
d8dd03c728
commit
7eba20b236
|
@ -692,7 +692,7 @@ static void *allocate_big(const size_t request_size_bytes, int type)
|
||||||
return objptr;
|
return objptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#define MED_NEXT_SEARCH_SLOT(page) ((page)->previous_size)
|
||||||
inline static mpage *create_new_medium_page(NewGC *gc, const int sz, const int pos) {
|
inline static mpage *create_new_medium_page(NewGC *gc, const int sz, const int pos) {
|
||||||
mpage *page;
|
mpage *page;
|
||||||
int n;
|
int n;
|
||||||
|
@ -702,11 +702,11 @@ inline static mpage *create_new_medium_page(NewGC *gc, const int sz, const int p
|
||||||
page->size = sz;
|
page->size = sz;
|
||||||
page->size_class = 1;
|
page->size_class = 1;
|
||||||
page->page_type = PAGE_BIG;
|
page->page_type = PAGE_BIG;
|
||||||
page->previous_size = PREFIX_SIZE;
|
MED_NEXT_SEARCH_SLOT(page) = PREFIX_SIZE;
|
||||||
page->live_size = sz;
|
page->live_size = sz;
|
||||||
GCVERBOSEPAGE("NEW MED PAGE", page);
|
GCVERBOSEPAGE("NEW MED PAGE", page);
|
||||||
|
|
||||||
for (n = page->previous_size; ((n + sz) <= APAGE_SIZE); n += sz) {
|
for (n = MED_NEXT_SEARCH_SLOT(page); ((n + sz) <= APAGE_SIZE); n += sz) {
|
||||||
objhead *info = (objhead *)PTR(NUM(page->addr) + n);
|
objhead *info = (objhead *)PTR(NUM(page->addr) + n);
|
||||||
info->dead = 1;
|
info->dead = 1;
|
||||||
info->size = gcBYTES_TO_WORDS(sz);
|
info->size = gcBYTES_TO_WORDS(sz);
|
||||||
|
@ -728,12 +728,12 @@ inline static void *medium_page_realloc_dead_slot(NewGC *gc, const int sz, const
|
||||||
mpage *page;
|
mpage *page;
|
||||||
|
|
||||||
for (page = gc->med_freelist_pages[pos]; page; page = gc->med_freelist_pages[pos] = page->prev) {
|
for (page = gc->med_freelist_pages[pos]; page; page = gc->med_freelist_pages[pos] = page->prev) {
|
||||||
for (n = page->previous_size; ((n + sz) <= APAGE_SIZE); n += sz) {
|
for (n = MED_NEXT_SEARCH_SLOT(page); ((n + sz) <= APAGE_SIZE); n += sz) {
|
||||||
objhead * info = (objhead *)PTR(NUM(page->addr) + n);
|
objhead * info = (objhead *)PTR(NUM(page->addr) + n);
|
||||||
if (info->dead) {
|
if (info->dead) {
|
||||||
void *p;
|
void *p;
|
||||||
|
|
||||||
page->previous_size = (n + sz);
|
MED_NEXT_SEARCH_SLOT(page) = (n + sz);
|
||||||
page->live_size += sz;
|
page->live_size += sz;
|
||||||
|
|
||||||
info->dead = 0;
|
info->dead = 0;
|
||||||
|
@ -798,7 +798,7 @@ static void *allocate_medium(const size_t request_size_bytes, const int type)
|
||||||
objhead *info;
|
objhead *info;
|
||||||
|
|
||||||
page = create_new_medium_page(gc, sz, pos);
|
page = create_new_medium_page(gc, sz, pos);
|
||||||
info = (objhead *)PTR(NUM(page->addr) + page->previous_size);
|
info = (objhead *)PTR(NUM(page->addr) + MED_NEXT_SEARCH_SLOT(page));
|
||||||
|
|
||||||
info->dead = 0;
|
info->dead = 0;
|
||||||
info->type = type;
|
info->type = type;
|
||||||
|
@ -817,6 +817,7 @@ static void *allocate_medium(const size_t request_size_bytes, const int type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define GEN0_ALLOC_SIZE(page) ((page)->previous_size)
|
||||||
inline static mpage *gen0_create_new_nursery_mpage(NewGC *gc, const size_t page_size) {
|
inline static mpage *gen0_create_new_nursery_mpage(NewGC *gc, const size_t page_size) {
|
||||||
mpage *newmpage;
|
mpage *newmpage;
|
||||||
|
|
||||||
|
@ -824,7 +825,7 @@ inline static mpage *gen0_create_new_nursery_mpage(NewGC *gc, const size_t page_
|
||||||
newmpage->addr = malloc_dirty_pages(gc, page_size, APAGE_SIZE);
|
newmpage->addr = malloc_dirty_pages(gc, page_size, APAGE_SIZE);
|
||||||
newmpage->size_class = 0;
|
newmpage->size_class = 0;
|
||||||
newmpage->size = PREFIX_SIZE;
|
newmpage->size = PREFIX_SIZE;
|
||||||
newmpage->previous_size = page_size;
|
GEN0_ALLOC_SIZE(newmpage) = page_size;
|
||||||
pagemap_add_with_size(gc->page_maps, newmpage, page_size);
|
pagemap_add_with_size(gc->page_maps, newmpage, page_size);
|
||||||
GCVERBOSEPAGE("NEW gen0", newmpage);
|
GCVERBOSEPAGE("NEW gen0", newmpage);
|
||||||
|
|
||||||
|
@ -877,7 +878,7 @@ unsigned long GC_make_jit_nursery_page(int count) {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline static void gen0_free_jit_nursery_page(NewGC *gc, mpage *page) {
|
inline static void gen0_free_jit_nursery_page(NewGC *gc, mpage *page) {
|
||||||
gen0_free_nursery_mpage(gc, page, page->previous_size);
|
gen0_free_nursery_mpage(gc, page, GEN0_ALLOC_SIZE(page));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline static mpage *gen0_create_new_mpage(NewGC *gc) {
|
inline static mpage *gen0_create_new_mpage(NewGC *gc) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user