vm: simplify some code
parent
2311891910
commit
93d49428fb
|
@ -555,7 +555,7 @@ void factor_vm::collect_nursery()
|
||||||
void factor_vm::collect_aging()
|
void factor_vm::collect_aging()
|
||||||
{
|
{
|
||||||
std::swap(data->generations[data->aging()],data->semispaces[data->aging()]);
|
std::swap(data->generations[data->aging()],data->semispaces[data->aging()]);
|
||||||
reset_generations(data->aging(),data->aging());
|
reset_generation(data->aging());
|
||||||
|
|
||||||
aging_collector collector(this,&data->generations[data->aging()]);
|
aging_collector collector(this,&data->generations[data->aging()]);
|
||||||
|
|
||||||
|
@ -566,7 +566,7 @@ void factor_vm::collect_aging()
|
||||||
collector.go();
|
collector.go();
|
||||||
update_dirty_code_blocks();
|
update_dirty_code_blocks();
|
||||||
|
|
||||||
reset_generations(data->nursery(),data->nursery());
|
nursery.here = nursery.start;
|
||||||
}
|
}
|
||||||
|
|
||||||
void factor_vm::collect_aging_again()
|
void factor_vm::collect_aging_again()
|
||||||
|
@ -580,7 +580,8 @@ void factor_vm::collect_aging_again()
|
||||||
collector.go();
|
collector.go();
|
||||||
update_dirty_code_blocks();
|
update_dirty_code_blocks();
|
||||||
|
|
||||||
reset_generations(data->nursery(),data->aging());
|
reset_generation(data->aging());
|
||||||
|
nursery.here = nursery.start;
|
||||||
}
|
}
|
||||||
|
|
||||||
void factor_vm::collect_tenured(cell requested_bytes, bool trace_contexts_)
|
void factor_vm::collect_tenured(cell requested_bytes, bool trace_contexts_)
|
||||||
|
@ -593,7 +594,7 @@ void factor_vm::collect_tenured(cell requested_bytes, bool trace_contexts_)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::swap(data->generations[data->tenured()],data->semispaces[data->tenured()]);
|
std::swap(data->generations[data->tenured()],data->semispaces[data->tenured()]);
|
||||||
reset_generations(data->tenured(),data->tenured());
|
reset_generation(data->tenured());
|
||||||
}
|
}
|
||||||
|
|
||||||
tenured_collector collector(this,&data->generations[data->tenured()]);
|
tenured_collector collector(this,&data->generations[data->tenured()]);
|
||||||
|
@ -603,7 +604,8 @@ void factor_vm::collect_tenured(cell requested_bytes, bool trace_contexts_)
|
||||||
collector.go();
|
collector.go();
|
||||||
free_unmarked_code_blocks();
|
free_unmarked_code_blocks();
|
||||||
|
|
||||||
reset_generations(data->nursery(),data->aging());
|
reset_generation(data->aging());
|
||||||
|
nursery.here = nursery.start;
|
||||||
|
|
||||||
if(current_gc->growing_data_heap)
|
if(current_gc->growing_data_heap)
|
||||||
delete current_gc->old_data_heap;
|
delete current_gc->old_data_heap;
|
||||||
|
|
|
@ -76,60 +76,52 @@ data_heap::~data_heap()
|
||||||
delete[] decks;
|
delete[] decks;
|
||||||
}
|
}
|
||||||
|
|
||||||
void factor_vm::clear_cards(cell from, cell to)
|
void factor_vm::clear_cards(cell gen)
|
||||||
{
|
{
|
||||||
/* NOTE: reverse order due to heap layout. */
|
/* NOTE: reverse order due to heap layout. */
|
||||||
card *first_card = addr_to_card(data->generations[to].start);
|
card *first_card = addr_to_card(data->generations[gen].start);
|
||||||
card *last_card = addr_to_card(data->generations[from].end);
|
card *last_card = addr_to_card(data->generations[gen].end);
|
||||||
memset(first_card,0,last_card - first_card);
|
memset(first_card,0,last_card - first_card);
|
||||||
}
|
}
|
||||||
|
|
||||||
void factor_vm::clear_decks(cell from, cell to)
|
void factor_vm::clear_decks(cell gen)
|
||||||
{
|
{
|
||||||
/* NOTE: reverse order due to heap layout. */
|
/* NOTE: reverse order due to heap layout. */
|
||||||
card_deck *first_deck = addr_to_deck(data->generations[to].start);
|
card_deck *first_deck = addr_to_deck(data->generations[gen].start);
|
||||||
card_deck *last_deck = addr_to_deck(data->generations[from].end);
|
card_deck *last_deck = addr_to_deck(data->generations[gen].end);
|
||||||
memset(first_deck,0,last_deck - first_deck);
|
memset(first_deck,0,last_deck - first_deck);
|
||||||
}
|
}
|
||||||
|
|
||||||
void factor_vm::clear_allot_markers(cell from, cell to)
|
void factor_vm::clear_allot_markers(cell gen)
|
||||||
{
|
{
|
||||||
/* NOTE: reverse order due to heap layout. */
|
card *first_card = addr_to_allot_marker((object *)data->generations[gen].start);
|
||||||
card *first_card = addr_to_allot_marker((object *)data->generations[to].start);
|
card *last_card = addr_to_allot_marker((object *)data->generations[gen].end);
|
||||||
card *last_card = addr_to_allot_marker((object *)data->generations[from].end);
|
|
||||||
memset(first_card,invalid_allot_marker,last_card - first_card);
|
memset(first_card,invalid_allot_marker,last_card - first_card);
|
||||||
}
|
}
|
||||||
|
|
||||||
void factor_vm::reset_generation(cell i)
|
|
||||||
{
|
|
||||||
zone *z = (i == data->nursery() ? &nursery : &data->generations[i]);
|
|
||||||
|
|
||||||
z->here = z->start;
|
|
||||||
if(secure_gc)
|
|
||||||
memset((void*)z->start,69,z->size);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* After garbage collection, any generations which are now empty need to have
|
/* After garbage collection, any generations which are now empty need to have
|
||||||
their allocation pointers and cards reset. */
|
their allocation pointers and cards reset. */
|
||||||
void factor_vm::reset_generations(cell from, cell to)
|
void factor_vm::reset_generation(cell gen)
|
||||||
{
|
{
|
||||||
cell i;
|
assert(gen != data->nursery());
|
||||||
for(i = from; i <= to; i++)
|
|
||||||
reset_generation(i);
|
|
||||||
|
|
||||||
clear_cards(from,to);
|
zone *z = &data->generations[gen];
|
||||||
clear_decks(from,to);
|
z->here = z->start;
|
||||||
clear_allot_markers(from,to);
|
if(secure_gc) memset((void*)z->start,69,z->size);
|
||||||
|
|
||||||
|
clear_cards(gen);
|
||||||
|
clear_decks(gen);
|
||||||
|
clear_allot_markers(gen);
|
||||||
}
|
}
|
||||||
|
|
||||||
void factor_vm::set_data_heap(data_heap *data_)
|
void factor_vm::set_data_heap(data_heap *data_)
|
||||||
{
|
{
|
||||||
data = data_;
|
data = data_;
|
||||||
nursery = data->generations[data->nursery()];
|
nursery = data->generations[data->nursery()];
|
||||||
|
nursery.here = nursery.start;
|
||||||
init_card_decks();
|
init_card_decks();
|
||||||
clear_cards(data->nursery(),data->tenured());
|
reset_generation(data->aging());
|
||||||
clear_decks(data->nursery(),data->tenured());
|
reset_generation(data->tenured());
|
||||||
clear_allot_markers(data->nursery(),data->tenured());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void factor_vm::init_data_heap(cell young_size, cell aging_size, cell tenured_size, bool secure_gc_)
|
void factor_vm::init_data_heap(cell young_size, cell aging_size, cell tenured_size, bool secure_gc_)
|
||||||
|
|
|
@ -151,11 +151,10 @@ struct factor_vm
|
||||||
|
|
||||||
void init_card_decks();
|
void init_card_decks();
|
||||||
data_heap *grow_data_heap(data_heap *data, cell requested_bytes);
|
data_heap *grow_data_heap(data_heap *data, cell requested_bytes);
|
||||||
void clear_cards(cell from, cell to);
|
void clear_cards(cell gen);
|
||||||
void clear_decks(cell from, cell to);
|
void clear_decks(cell gen);
|
||||||
void clear_allot_markers(cell from, cell to);
|
void clear_allot_markers(cell gen);
|
||||||
void reset_generation(cell i);
|
void reset_generation(cell gen);
|
||||||
void reset_generations(cell from, cell to);
|
|
||||||
void set_data_heap(data_heap *data_);
|
void set_data_heap(data_heap *data_);
|
||||||
void init_data_heap(cell young_size, cell aging_size, cell tenured_size, bool secure_gc_);
|
void init_data_heap(cell young_size, cell aging_size, cell tenured_size, bool secure_gc_);
|
||||||
cell untagged_object_size(object *pointer);
|
cell untagged_object_size(object *pointer);
|
||||||
|
|
Loading…
Reference in New Issue