vm: cleanup

db4
Slava Pestov 2009-10-08 23:39:54 -05:00
parent 21f55ab1a3
commit cb2673a6f5
3 changed files with 12 additions and 13 deletions

View File

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

View File

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

View File

@ -15,7 +15,7 @@ struct gc_statistics {
u64 cards_scanned;
u64 decks_scanned;
u64 card_scan_time;
cell code_heap_scans;
u64 code_blocks_scanned;
};
struct gc_state {