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