#define SGEN_CARDTABLE_END (sgen_cardtable + CARD_COUNT_IN_BYTES)
static gboolean
-sgen_card_table_region_begin_scanning (mword start, mword end)
+sgen_card_table_region_begin_scanning (mword start, mword size)
{
+ mword end = start + size;
/*XXX this can be improved to work on words and have a single loop induction var */
- while (start <= end) {
+ while (start < end) {
if (sgen_card_table_card_begin_scanning (start))
return TRUE;
start += CARD_SIZE_IN_BYTES;
#endif
static void
-sgen_card_table_prepare_for_major_collection (void)
+sgen_card_table_clear_cards (void)
{
/*XXX we could do this in 2 ways. using mincore or iterating over all sections/los objects */
sgen_major_collector_iterate_live_block_ranges (clear_cards);
}
static void
-sgen_card_table_finish_scan_remsets (void *start_nursery, void *end_nursery, SgenGrayQueue *queue)
+sgen_card_table_scan_remsets (SgenGrayQueue *queue)
{
SGEN_TV_DECLARE (atv);
SGEN_TV_DECLARE (btv);
sgen_los_iterate_live_block_ranges (move_cards_to_shadow_table);
/*Then we clear*/
- sgen_card_table_prepare_for_major_collection ();
+ sgen_card_table_clear_cards ();
#endif
SGEN_TV_GETTIME (atv);
sgen_major_collector_scan_card_table (queue);
}
void
-sgen_card_table_init (SgenRemeberedSet *remset)
+sgen_card_table_init (SgenRememberedSet *remset)
{
sgen_cardtable = sgen_alloc_os_memory (CARD_COUNT_IN_BYTES, SGEN_ALLOC_INTERNAL | SGEN_ALLOC_ACTIVATE, "card table");
remset->wbarrier_generic_nostore = sgen_card_table_wbarrier_generic_nostore;
remset->record_pointer = sgen_card_table_record_pointer;
- remset->finish_scan_remsets = sgen_card_table_finish_scan_remsets;
+ remset->scan_remsets = sgen_card_table_scan_remsets;
remset->finish_minor_collection = sgen_card_table_finish_minor_collection;
- remset->prepare_for_major_collection = sgen_card_table_prepare_for_major_collection;
+ remset->clear_cards = sgen_card_table_clear_cards;
remset->find_address = sgen_card_table_find_address;
remset->find_address_with_cards = sgen_card_table_find_address_with_cards;