vm: cleanup
parent
21f55ab1a3
commit
cb2673a6f5
|
@ -17,7 +17,7 @@ struct copying_collector : collector<TargetGeneration,Policy> {
|
|||
}
|
||||
}
|
||||
|
||||
template<typename SourceGeneration> void trace_card(SourceGeneration *gen, card *ptr)
|
||||
template<typename SourceGeneration> void trace_card(SourceGeneration *gen, card *ptr, card unmask)
|
||||
{
|
||||
cell card_start = this->myvm->card_to_addr(ptr);
|
||||
cell card_scan = card_start + gen->card_offset(card_start);
|
||||
|
@ -25,6 +25,8 @@ struct copying_collector : collector<TargetGeneration,Policy> {
|
|||
|
||||
trace_objects_between(gen,card_scan,&card_end);
|
||||
|
||||
*ptr &= ~unmask;
|
||||
|
||||
this->myvm->gc_stats.cards_scanned++;
|
||||
}
|
||||
|
||||
|
@ -42,14 +44,10 @@ struct copying_collector : collector<TargetGeneration,Policy> {
|
|||
{
|
||||
card *ptr = (card *)quad_ptr;
|
||||
|
||||
for(int card = 0; card < 4; card++)
|
||||
{
|
||||
if(ptr[card] & mask)
|
||||
{
|
||||
trace_card(gen,&ptr[card]);
|
||||
ptr[card] &= ~unmask;
|
||||
}
|
||||
}
|
||||
if(ptr[0] & mask) trace_card(gen,&ptr[0],unmask);
|
||||
if(ptr[1] & mask) trace_card(gen,&ptr[1],unmask);
|
||||
if(ptr[2] & mask) trace_card(gen,&ptr[2],unmask);
|
||||
if(ptr[3] & mask) trace_card(gen,&ptr[3],unmask);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -129,6 +127,7 @@ struct copying_collector : collector<TargetGeneration,Policy> {
|
|||
this->trace_handle(&compiled->owner);
|
||||
this->trace_handle(&compiled->literals);
|
||||
this->trace_handle(&compiled->relocation);
|
||||
this->myvm->gc_stats.code_blocks_scanned++;
|
||||
}
|
||||
|
||||
void trace_code_heap_roots(std::set<code_block *> *remembered_set)
|
||||
|
|
|
@ -36,8 +36,8 @@ void factor_vm::free_unmarked_code_blocks()
|
|||
void factor_vm::update_dirty_code_blocks(std::set<code_block *> *remembered_set)
|
||||
{
|
||||
/* The youngest generation that any code block can now reference */
|
||||
std::set<code_block *>::iterator iter = remembered_set->begin();
|
||||
std::set<code_block *>::iterator end = remembered_set->end();
|
||||
std::set<code_block *>::const_iterator iter = remembered_set->begin();
|
||||
std::set<code_block *>::const_iterator end = remembered_set->end();
|
||||
|
||||
for(; iter != end; iter++) update_literal_references(*iter);
|
||||
}
|
||||
|
@ -146,7 +146,7 @@ void factor_vm::primitive_gc_stats()
|
|||
result.add(tag<bignum>(ulong_long_to_bignum(gc_stats.cards_scanned)));
|
||||
result.add(tag<bignum>(ulong_long_to_bignum(gc_stats.decks_scanned)));
|
||||
result.add(tag<bignum>(ulong_long_to_bignum(gc_stats.card_scan_time)));
|
||||
result.add(allot_cell(gc_stats.code_heap_scans));
|
||||
result.add(allot_cell(gc_stats.code_blocks_scanned));
|
||||
|
||||
result.trim();
|
||||
dpush(result.elements.value());
|
||||
|
|
Loading…
Reference in New Issue