< prev index next >

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

Print this page
rev 57098 : [mq]: max_size

@@ -24,10 +24,11 @@
 
 #ifndef SHARE_GC_PARALLEL_PARMARKBITMAP_INLINE_HPP
 #define SHARE_GC_PARALLEL_PARMARKBITMAP_INLINE_HPP
 
 #include "gc/parallel/parMarkBitMap.hpp"
+#include "utilities/align.hpp"
 #include "utilities/bitMap.inline.hpp"
 
 inline ParMarkBitMap::ParMarkBitMap():
   _region_start(NULL), _region_size(0), _beg_bits(), _end_bits(), _virtual_space(NULL), _reserved_byte_size(0)
 { }

@@ -144,20 +145,26 @@
 
 inline bool ParMarkBitMap::mark_obj(oop obj, int size) {
   return mark_obj((HeapWord*)obj, (size_t)size);
 }
 
-inline BitMap::idx_t ParMarkBitMap::addr_to_bit(HeapWord* addr) const {
+inline ParMarkBitMap::idx_t ParMarkBitMap::addr_to_bit(HeapWord* addr) const {
   DEBUG_ONLY(verify_addr(addr);)
   return words_to_bits(pointer_delta(addr, region_start()));
 }
 
 inline HeapWord* ParMarkBitMap::bit_to_addr(idx_t bit) const {
   DEBUG_ONLY(verify_bit(bit);)
   return region_start() + bits_to_words(bit);
 }
 
+inline ParMarkBitMap::idx_t ParMarkBitMap::align_range_end(idx_t range_end) const {
+  // size is aligned, so if range_end <= size then so is aligned result.
+  assert(range_end <= size(), "range end out of range");
+  return align_up(range_end, BitsPerWord);
+}
+
 inline ParMarkBitMap::idx_t ParMarkBitMap::find_obj_beg(idx_t beg, idx_t end) const {
   return _beg_bits.get_next_one_offset_aligned_right(beg, end);
 }
 
 inline ParMarkBitMap::idx_t ParMarkBitMap::find_obj_end(idx_t beg, idx_t end) const {

@@ -165,19 +172,19 @@
 }
 
 inline HeapWord* ParMarkBitMap::find_obj_beg(HeapWord* beg, HeapWord* end) const {
   const idx_t beg_bit = addr_to_bit(beg);
   const idx_t end_bit = addr_to_bit(end);
-  const idx_t search_end = BitMap::word_align_up(end_bit);
+  const idx_t search_end = align_range_end(end_bit);
   const idx_t res_bit = MIN2(find_obj_beg(beg_bit, search_end), end_bit);
   return bit_to_addr(res_bit);
 }
 
 inline HeapWord* ParMarkBitMap::find_obj_end(HeapWord* beg, HeapWord* end) const {
   const idx_t beg_bit = addr_to_bit(beg);
   const idx_t end_bit = addr_to_bit(end);
-  const idx_t search_end = BitMap::word_align_up(end_bit);
+  const idx_t search_end = align_range_end(end_bit);
   const idx_t res_bit = MIN2(find_obj_end(beg_bit, search_end), end_bit);
   return bit_to_addr(res_bit);
 }
 
 #ifdef  ASSERT
< prev index next >