vm: clean up card unmarking
parent
8e0ce6aca7
commit
a737a78110
|
|
@ -25,7 +25,7 @@ void factor_vm::collect_aging()
|
||||||
current_gc->event->started_code_scan();
|
current_gc->event->started_code_scan();
|
||||||
collector.trace_cards(data->tenured,
|
collector.trace_cards(data->tenured,
|
||||||
card_points_to_aging,
|
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->ended_card_scan(collector.cards_scanned,collector.decks_scanned);
|
||||||
|
|
||||||
collector.tenure_reachable_objects();
|
collector.tenure_reachable_objects();
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,21 @@ inline static slot_visitor<collector_workhorse<TargetGeneration,Policy> > make_c
|
||||||
collector_workhorse<TargetGeneration,Policy>(parent,target,policy));
|
collector_workhorse<TargetGeneration,Policy>(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<typename TargetGeneration, typename Policy> struct collector {
|
template<typename TargetGeneration, typename Policy> struct collector {
|
||||||
factor_vm *parent;
|
factor_vm *parent;
|
||||||
data_heap *data;
|
data_heap *data;
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,6 @@
|
||||||
namespace factor
|
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<typename TargetGeneration, typename Policy>
|
template<typename TargetGeneration, typename Policy>
|
||||||
struct copying_collector : collector<TargetGeneration,Policy> {
|
struct copying_collector : collector<TargetGeneration,Policy> {
|
||||||
cell scan;
|
cell scan;
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ void factor_vm::collect_nursery()
|
||||||
simple_unmarker(card_points_to_nursery));
|
simple_unmarker(card_points_to_nursery));
|
||||||
collector.trace_cards(data->aging,
|
collector.trace_cards(data->aging,
|
||||||
card_points_to_nursery,
|
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->ended_card_scan(collector.cards_scanned,collector.decks_scanned);
|
||||||
|
|
||||||
current_gc->event->started_code_scan();
|
current_gc->event->started_code_scan();
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ void factor_vm::collect_to_tenured()
|
||||||
current_gc->event->started_card_scan();
|
current_gc->event->started_card_scan();
|
||||||
collector.trace_cards(data->tenured,
|
collector.trace_cards(data->tenured,
|
||||||
card_points_to_aging,
|
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->ended_card_scan(collector.cards_scanned,collector.decks_scanned);
|
||||||
|
|
||||||
current_gc->event->started_code_scan();
|
current_gc->event->started_code_scan();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue