VM: the unmarker classes are not needed, easier to just send the unmask pattern to the trace_cards function directly

db4
Björn Lindqvist 2015-02-21 13:08:40 +00:00 committed by John Benediktsson
parent b5a206c587
commit a43a455990
4 changed files with 11 additions and 24 deletions

View File

@ -16,7 +16,7 @@ void factor_vm::collect_aging() {
if (event)
event->started_card_scan();
collector.trace_cards(data->tenured, card_points_to_aging, full_unmarker());
collector.trace_cards(data->tenured, card_points_to_aging, 0xff);
if (event)
event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);

View File

@ -58,21 +58,6 @@ struct gc_workhorse : no_fixup {
}
};
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 {
full_unmarker() {}
void operator()(card* ptr) { *ptr = 0; }
};
template <typename TargetGeneration, typename Policy> struct collector {
factor_vm* parent;
data_heap* data;
@ -152,8 +137,8 @@ template <typename TargetGeneration, typename Policy> struct collector {
}
}
template <typename SourceGeneration, typename Unmarker>
void trace_cards(SourceGeneration* gen, card mask, Unmarker unmarker) {
template <typename SourceGeneration>
void trace_cards(SourceGeneration* gen, card mask, card unmask) {
card_deck* decks = data->decks;
card_deck* cards = data->cards;
@ -162,7 +147,9 @@ template <typename TargetGeneration, typename Policy> struct collector {
cell first_deck = card_deck_for_address(gen->start);
cell last_deck = card_deck_for_address(gen->end);
cell start = 0, binary_start = 0, end = 0;
cell start = 0;
cell binary_start = 0;
cell end = 0;
for (cell deck_index = first_deck; deck_index < last_deck; deck_index++) {
if (decks[deck_index] & mask) {
@ -199,14 +186,14 @@ template <typename TargetGeneration, typename Policy> struct collector {
}
}
unmarker(&cards[card_index]);
cards[card_index] &= ~unmask;
if (!start)
return;
}
}
unmarker(&decks[deck_index]);
decks[deck_index] &= ~unmask;
}
}
}

View File

@ -15,8 +15,8 @@ void factor_vm::collect_nursery() {
if (event)
event->started_card_scan();
collector.trace_cards(data->tenured, card_points_to_nursery,
simple_unmarker(card_points_to_nursery));
collector.trace_cards(data->aging, card_points_to_nursery, full_unmarker());
card_points_to_nursery);
collector.trace_cards(data->aging, card_points_to_nursery, 0xff);
if (event)
event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);

View File

@ -18,7 +18,7 @@ void factor_vm::collect_to_tenured() {
if (event)
event->started_card_scan();
collector.trace_cards(data->tenured, card_points_to_aging, full_unmarker());
collector.trace_cards(data->tenured, card_points_to_aging, 0xff);
if (event)
event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);