VM: the unmarker classes are not needed, easier to just send the unmask pattern to the trace_cards function directly
parent
b5a206c587
commit
a43a455990
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue