26 #define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSEQ_INLINE_HPP |
26 #define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSEQ_INLINE_HPP |
27 |
27 |
28 #include "gc_implementation/g1/heapRegion.hpp" |
28 #include "gc_implementation/g1/heapRegion.hpp" |
29 #include "gc_implementation/g1/heapRegionSeq.hpp" |
29 #include "gc_implementation/g1/heapRegionSeq.hpp" |
30 |
30 |
31 inline uintx HeapRegionSeq::addr_to_index_biased(HeapWord* addr) const { |
|
32 assert(_heap_bottom <= addr && addr < _heap_end, |
|
33 err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT" end: "PTR_FORMAT, |
|
34 addr, _heap_bottom, _heap_end)); |
|
35 uintx index = (uintx) addr >> _region_shift; |
|
36 return index; |
|
37 } |
|
38 |
|
39 inline HeapRegion* HeapRegionSeq::addr_to_region_unsafe(HeapWord* addr) const { |
31 inline HeapRegion* HeapRegionSeq::addr_to_region_unsafe(HeapWord* addr) const { |
40 assert(_heap_bottom <= addr && addr < _heap_end, |
32 HeapRegion* hr = _regions.get_by_address(addr); |
41 err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT" end: "PTR_FORMAT, |
|
42 addr, _heap_bottom, _heap_end)); |
|
43 uintx index_biased = addr_to_index_biased(addr); |
|
44 HeapRegion* hr = _regions_biased[index_biased]; |
|
45 assert(hr != NULL, "invariant"); |
33 assert(hr != NULL, "invariant"); |
46 return hr; |
34 return hr; |
47 } |
35 } |
48 |
36 |
49 inline HeapRegion* HeapRegionSeq::addr_to_region(HeapWord* addr) const { |
37 inline HeapRegion* HeapRegionSeq::addr_to_region(HeapWord* addr) const { |
50 if (addr != NULL && addr < _heap_end) { |
38 if (addr != NULL && addr < heap_end()) { |
51 assert(addr >= _heap_bottom, |
39 assert(addr >= heap_bottom(), |
52 err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT, addr, _heap_bottom)); |
40 err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT, addr, heap_bottom())); |
53 return addr_to_region_unsafe(addr); |
41 return addr_to_region_unsafe(addr); |
54 } |
42 } |
55 return NULL; |
43 return NULL; |
56 } |
44 } |
57 |
45 |
58 inline HeapRegion* HeapRegionSeq::at(uint index) const { |
46 inline HeapRegion* HeapRegionSeq::at(uint index) const { |
59 assert(index < length(), "pre-condition"); |
47 assert(index < length(), "pre-condition"); |
60 HeapRegion* hr = _regions[index]; |
48 HeapRegion* hr = _regions.get_by_index(index); |
61 assert(hr != NULL, "sanity"); |
49 assert(hr != NULL, "sanity"); |
62 assert(hr->hrs_index() == index, "sanity"); |
50 assert(hr->hrs_index() == index, "sanity"); |
63 return hr; |
51 return hr; |
64 } |
52 } |
65 |
53 |