From a737a78110613b9b8f3192c38c6c44548a79d878 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Fri, 30 Oct 2009 03:15:50 -0500 Subject: [PATCH] vm: clean up card unmarking --- vm/aging_collector.cpp | 2 +- vm/collector.hpp | 15 +++++++++++++++ vm/copying_collector.hpp | 10 ---------- vm/nursery_collector.cpp | 2 +- vm/to_tenured_collector.cpp | 2 +- 5 files changed, 18 insertions(+), 13 deletions(-) diff --git a/vm/aging_collector.cpp b/vm/aging_collector.cpp index e39e7e7d6f..1979769b81 100644 --- a/vm/aging_collector.cpp +++ b/vm/aging_collector.cpp @@ -25,7 +25,7 @@ void factor_vm::collect_aging() current_gc->event->started_code_scan(); collector.trace_cards(data->tenured, card_points_to_aging, - simple_unmarker(card_mark_mask)); + full_unmarker()); current_gc->event->ended_card_scan(collector.cards_scanned,collector.decks_scanned); collector.tenure_reachable_objects(); diff --git a/vm/collector.hpp b/vm/collector.hpp index 4535f98dd7..31d830256d 100644 --- a/vm/collector.hpp +++ b/vm/collector.hpp @@ -71,6 +71,21 @@ inline static slot_visitor > make_c collector_workhorse(parent,target,policy)); } +struct dummy_unmarker { + void operator()(card *ptr) {} +}; + +struct simple_unmarker { + card unmask; + explicit simple_unmarker(card unmask_) : unmask(unmask_) {} + void operator()(card *ptr) { *ptr &= ~unmask; } +}; + +struct full_unmarker { + explicit full_unmarker() {} + void operator()(card *ptr) { *ptr = 0; } +}; + template struct collector { factor_vm *parent; data_heap *data; diff --git a/vm/copying_collector.hpp b/vm/copying_collector.hpp index 2264b600dd..a21147ff0c 100644 --- a/vm/copying_collector.hpp +++ b/vm/copying_collector.hpp @@ -1,16 +1,6 @@ namespace factor { -struct dummy_unmarker { - void operator()(card *ptr) {} -}; - -struct simple_unmarker { - card unmask; - explicit simple_unmarker(card unmask_) : unmask(unmask_) {} - void operator()(card *ptr) { *ptr &= ~unmask; } -}; - template struct copying_collector : collector { cell scan; diff --git a/vm/nursery_collector.cpp b/vm/nursery_collector.cpp index 240fac60d9..155da243d4 100644 --- a/vm/nursery_collector.cpp +++ b/vm/nursery_collector.cpp @@ -24,7 +24,7 @@ void factor_vm::collect_nursery() simple_unmarker(card_points_to_nursery)); collector.trace_cards(data->aging, card_points_to_nursery, - simple_unmarker(card_mark_mask)); + full_unmarker()); current_gc->event->ended_card_scan(collector.cards_scanned,collector.decks_scanned); current_gc->event->started_code_scan(); diff --git a/vm/to_tenured_collector.cpp b/vm/to_tenured_collector.cpp index a39d92d869..6067bf1bf4 100644 --- a/vm/to_tenured_collector.cpp +++ b/vm/to_tenured_collector.cpp @@ -33,7 +33,7 @@ void factor_vm::collect_to_tenured() current_gc->event->started_card_scan(); collector.trace_cards(data->tenured, card_points_to_aging, - simple_unmarker(card_mark_mask)); + full_unmarker()); current_gc->event->ended_card_scan(collector.cards_scanned,collector.decks_scanned); current_gc->event->started_code_scan();