]> gitweb.factorcode.org Git - factor.git/commitdiff
VM: the unmarker classes are not needed, easier to just send the unmask pattern to...
authorBjörn Lindqvist <bjourne@gmail.com>
Sat, 21 Feb 2015 13:08:40 +0000 (13:08 +0000)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 28 Feb 2015 22:14:30 +0000 (14:14 -0800)
vm/aging_collector.cpp
vm/collector.hpp
vm/nursery_collector.cpp
vm/to_tenured_collector.cpp

index 8c6e4ae837c56a6fcb488f27681be4a06bc04e22..92b7f1fffb314b946f3ac774391e1a4f25431085 100644 (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);
 
index 7e3e57a5994da98cebb7b6e6fd4b1a9ac45392bc..8a1cc86853417c7505baf82edc7388104a49170b 100644 (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;
       }
     }
   }
index c902ebbeae959c979b3a63a9f935bd1d85abdd1d..72c7df0eabd6d48e4aa3b5471b0b9d2793d1c738 100644 (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);
index 42883292815e15f09a3bffb8b0584316628265f8..3a8fd52ddba7a017efb8b51bd0f4da6421f6a73c 100644 (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);