78 it does not it will only result in duplicate entry in the update 79 buffer because of the "cache-miss". So it's not worth spinning. 80 */ 81 82 bool is_card_claimed(size_t card_index) { 83 jbyte val = _byte_map[card_index]; 84 return (val & (clean_card_mask_val() | claimed_card_val())) == claimed_card_val(); 85 } 86 87 inline void set_card_claimed(size_t card_index); 88 89 void verify_g1_young_region(MemRegion mr) PRODUCT_RETURN; 90 void g1_mark_as_young(const MemRegion& mr); 91 92 bool mark_card_deferred(size_t card_index); 93 94 bool is_card_deferred(size_t card_index) { 95 jbyte val = _byte_map[card_index]; 96 return (val & (clean_card_mask_val() | deferred_card_val())) == deferred_card_val(); 97 } 98 virtual void write_ref_nmethod_pre(oop* dst, nmethod* nm); 99 virtual void write_ref_nmethod_post(oop* dst, nmethod* nm); 100 101 }; 102 103 template<> 104 struct BarrierSet::GetName<G1SATBCardTableModRefBS> { 105 static const BarrierSet::Name value = BarrierSet::G1SATBCT; 106 }; 107 108 class G1SATBCardTableLoggingModRefBSChangedListener : public G1MappingChangedListener { 109 private: 110 G1SATBCardTableLoggingModRefBS* _card_table; 111 public: 112 G1SATBCardTableLoggingModRefBSChangedListener() : _card_table(NULL) { } 113 114 void set_card_table(G1SATBCardTableLoggingModRefBS* card_table) { _card_table = card_table; } 115 116 virtual void on_commit(uint start_idx, size_t num_regions, bool zero_filled); 117 }; 118 119 // Adds card-table logging to the post-barrier. 120 // Usual invariant: all dirty cards are logged in the DirtyCardQueueSet. | 78 it does not it will only result in duplicate entry in the update 79 buffer because of the "cache-miss". So it's not worth spinning. 80 */ 81 82 bool is_card_claimed(size_t card_index) { 83 jbyte val = _byte_map[card_index]; 84 return (val & (clean_card_mask_val() | claimed_card_val())) == claimed_card_val(); 85 } 86 87 inline void set_card_claimed(size_t card_index); 88 89 void verify_g1_young_region(MemRegion mr) PRODUCT_RETURN; 90 void g1_mark_as_young(const MemRegion& mr); 91 92 bool mark_card_deferred(size_t card_index); 93 94 bool is_card_deferred(size_t card_index) { 95 jbyte val = _byte_map[card_index]; 96 return (val & (clean_card_mask_val() | deferred_card_val())) == deferred_card_val(); 97 } 98 }; 99 100 template<> 101 struct BarrierSet::GetName<G1SATBCardTableModRefBS> { 102 static const BarrierSet::Name value = BarrierSet::G1SATBCT; 103 }; 104 105 class G1SATBCardTableLoggingModRefBSChangedListener : public G1MappingChangedListener { 106 private: 107 G1SATBCardTableLoggingModRefBS* _card_table; 108 public: 109 G1SATBCardTableLoggingModRefBSChangedListener() : _card_table(NULL) { } 110 111 void set_card_table(G1SATBCardTableLoggingModRefBS* card_table) { _card_table = card_table; } 112 113 virtual void on_commit(uint start_idx, size_t num_regions, bool zero_filled); 114 }; 115 116 // Adds card-table logging to the post-barrier. 117 // Usual invariant: all dirty cards are logged in the DirtyCardQueueSet. |