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)
|
if (event)
|
||||||
event->started_card_scan();
|
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)
|
if (event)
|
||||||
event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);
|
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 {
|
template <typename TargetGeneration, typename Policy> struct collector {
|
||||||
factor_vm* parent;
|
factor_vm* parent;
|
||||||
data_heap* data;
|
data_heap* data;
|
||||||
|
@ -152,8 +137,8 @@ template <typename TargetGeneration, typename Policy> struct collector {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename SourceGeneration, typename Unmarker>
|
template <typename SourceGeneration>
|
||||||
void trace_cards(SourceGeneration* gen, card mask, Unmarker unmarker) {
|
void trace_cards(SourceGeneration* gen, card mask, card unmask) {
|
||||||
card_deck* decks = data->decks;
|
card_deck* decks = data->decks;
|
||||||
card_deck* cards = data->cards;
|
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 first_deck = card_deck_for_address(gen->start);
|
||||||
cell last_deck = card_deck_for_address(gen->end);
|
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++) {
|
for (cell deck_index = first_deck; deck_index < last_deck; deck_index++) {
|
||||||
if (decks[deck_index] & mask) {
|
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)
|
if (!start)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unmarker(&decks[deck_index]);
|
decks[deck_index] &= ~unmask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,8 +15,8 @@ void factor_vm::collect_nursery() {
|
||||||
if (event)
|
if (event)
|
||||||
event->started_card_scan();
|
event->started_card_scan();
|
||||||
collector.trace_cards(data->tenured, card_points_to_nursery,
|
collector.trace_cards(data->tenured, card_points_to_nursery,
|
||||||
simple_unmarker(card_points_to_nursery));
|
card_points_to_nursery);
|
||||||
collector.trace_cards(data->aging, card_points_to_nursery, full_unmarker());
|
collector.trace_cards(data->aging, card_points_to_nursery, 0xff);
|
||||||
|
|
||||||
if (event)
|
if (event)
|
||||||
event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);
|
event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);
|
||||||
|
|
|
@ -18,7 +18,7 @@ void factor_vm::collect_to_tenured() {
|
||||||
|
|
||||||
if (event)
|
if (event)
|
||||||
event->started_card_scan();
|
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)
|
if (event)
|
||||||
event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);
|
event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue