From cb2673a6f526c76fea13875e4553ec009058cc64 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 8 Oct 2009 23:39:54 -0500 Subject: [PATCH] vm: cleanup --- vm/copying_collector.hpp | 17 ++++++++--------- vm/gc.cpp | 6 +++--- vm/gc.hpp | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/vm/copying_collector.hpp b/vm/copying_collector.hpp index 11465a0de7..9e16753660 100644 --- a/vm/copying_collector.hpp +++ b/vm/copying_collector.hpp @@ -17,7 +17,7 @@ struct copying_collector : collector { } } - template void trace_card(SourceGeneration *gen, card *ptr) + template 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 { trace_objects_between(gen,card_scan,&card_end); + *ptr &= ~unmask; + this->myvm->gc_stats.cards_scanned++; } @@ -42,14 +44,10 @@ struct copying_collector : collector { { 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 { 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 *remembered_set) diff --git a/vm/gc.cpp b/vm/gc.cpp index 795b75f149..a435e5f465 100755 --- a/vm/gc.cpp +++ b/vm/gc.cpp @@ -36,8 +36,8 @@ void factor_vm::free_unmarked_code_blocks() void factor_vm::update_dirty_code_blocks(std::set *remembered_set) { /* The youngest generation that any code block can now reference */ - std::set::iterator iter = remembered_set->begin(); - std::set::iterator end = remembered_set->end(); + std::set::const_iterator iter = remembered_set->begin(); + std::set::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(ulong_long_to_bignum(gc_stats.cards_scanned))); result.add(tag(ulong_long_to_bignum(gc_stats.decks_scanned))); result.add(tag(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()); diff --git a/vm/gc.hpp b/vm/gc.hpp index 9304a3ad03..d95d8df833 100755 --- a/vm/gc.hpp +++ b/vm/gc.hpp @@ -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 {