< prev index next >

src/hotspot/share/gc/parallel/parMarkBitMap.inline.hpp

Print this page

 99 }
100 
101 inline ParMarkBitMap::idx_t ParMarkBitMap::align_range_end(idx_t range_end) const {
102   // size is aligned, so if range_end <= size then so is aligned result.
103   assert(range_end <= size(), "range end out of range");
104   return align_up(range_end, BitsPerWord);
105 }
106 
107 inline HeapWord* ParMarkBitMap::find_obj_beg(HeapWord* beg, HeapWord* end) const {
108   const idx_t beg_bit = addr_to_bit(beg);
109   const idx_t end_bit = addr_to_bit(end);
110   const idx_t search_end = align_range_end(end_bit);
111   const idx_t res_bit = MIN2(_beg_bits.find_first_set_bit_aligned_right(beg_bit, search_end),
112                              end_bit);
113   return bit_to_addr(res_bit);
114 }
115 
116 inline HeapWord* ParMarkBitMap::find_obj_beg_reverse(HeapWord* beg, HeapWord* end) const {
117   const idx_t beg_bit = addr_to_bit(beg);
118   const idx_t end_bit = addr_to_bit(end);
119   const idx_t res_bit = _beg_bits.find_last_set_bit_aligned_left(beg_bit, end_bit);
120   return bit_to_addr(res_bit);
121 }
122 
123 #ifdef  ASSERT
124 inline void ParMarkBitMap::verify_bit(idx_t bit) const {
125   // Allow one past the last valid bit; useful for loop bounds.
126   assert(bit <= _beg_bits.size(), "bit out of range");
127 }
128 
129 inline void ParMarkBitMap::verify_addr(HeapWord* addr) const {
130   // Allow one past the last valid address; useful for loop bounds.
131   assert(addr >= heap_start(),
132          "addr too small, addr: " PTR_FORMAT " heap start: " PTR_FORMAT, p2i(addr), p2i(heap_start()));
133   assert(addr <= heap_end(),
134          "addr too big, addr: " PTR_FORMAT " heap end: " PTR_FORMAT, p2i(addr), p2i(heap_end()));
135 }
136 #endif  // #ifdef ASSERT
137 
138 #endif // SHARE_GC_PARALLEL_PARMARKBITMAP_INLINE_HPP

 99 }
100 
101 inline ParMarkBitMap::idx_t ParMarkBitMap::align_range_end(idx_t range_end) const {
102   // size is aligned, so if range_end <= size then so is aligned result.
103   assert(range_end <= size(), "range end out of range");
104   return align_up(range_end, BitsPerWord);
105 }
106 
107 inline HeapWord* ParMarkBitMap::find_obj_beg(HeapWord* beg, HeapWord* end) const {
108   const idx_t beg_bit = addr_to_bit(beg);
109   const idx_t end_bit = addr_to_bit(end);
110   const idx_t search_end = align_range_end(end_bit);
111   const idx_t res_bit = MIN2(_beg_bits.find_first_set_bit_aligned_right(beg_bit, search_end),
112                              end_bit);
113   return bit_to_addr(res_bit);
114 }
115 
116 inline HeapWord* ParMarkBitMap::find_obj_beg_reverse(HeapWord* beg, HeapWord* end) const {
117   const idx_t beg_bit = addr_to_bit(beg);
118   const idx_t end_bit = addr_to_bit(end);
119   const idx_t res_bit = _beg_bits.find_last_set_bit(beg_bit, end_bit);
120   return bit_to_addr(res_bit);
121 }
122 
123 #ifdef  ASSERT
124 inline void ParMarkBitMap::verify_bit(idx_t bit) const {
125   // Allow one past the last valid bit; useful for loop bounds.
126   assert(bit <= _beg_bits.size(), "bit out of range");
127 }
128 
129 inline void ParMarkBitMap::verify_addr(HeapWord* addr) const {
130   // Allow one past the last valid address; useful for loop bounds.
131   assert(addr >= heap_start(),
132          "addr too small, addr: " PTR_FORMAT " heap start: " PTR_FORMAT, p2i(addr), p2i(heap_start()));
133   assert(addr <= heap_end(),
134          "addr too big, addr: " PTR_FORMAT " heap end: " PTR_FORMAT, p2i(addr), p2i(heap_end()));
135 }
136 #endif  // #ifdef ASSERT
137 
138 #endif // SHARE_GC_PARALLEL_PARMARKBITMAP_INLINE_HPP
< prev index next >