< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahHeap.inline.hpp
Print this page
*** 47,57 ****
#include "utilities/copy.hpp"
#include "utilities/globalDefinitions.hpp"
inline ShenandoahHeapRegion* ShenandoahRegionIterator::next() {
! size_t new_index = Atomic::add((size_t) 1, &_index);
// get_region() provides the bounds-check and returns NULL on OOB.
return _heap->get_region(new_index - 1);
}
inline bool ShenandoahHeap::has_forwarded_objects() const {
--- 47,57 ----
#include "utilities/copy.hpp"
#include "utilities/globalDefinitions.hpp"
inline ShenandoahHeapRegion* ShenandoahRegionIterator::next() {
! size_t new_index = Atomic::add(&_index, (size_t) 1);
// get_region() provides the bounds-check and returns NULL on OOB.
return _heap->get_region(new_index - 1);
}
inline bool ShenandoahHeap::has_forwarded_objects() const {
*** 129,152 ****
}
}
inline oop ShenandoahHeap::cas_oop(oop n, oop* addr, oop c) {
assert(is_aligned(addr, HeapWordSize), "Address should be aligned: " PTR_FORMAT, p2i(addr));
! return (oop) Atomic::cmpxchg(n, addr, c);
}
inline oop ShenandoahHeap::cas_oop(oop n, narrowOop* addr, narrowOop c) {
assert(is_aligned(addr, sizeof(narrowOop)), "Address should be aligned: " PTR_FORMAT, p2i(addr));
narrowOop val = CompressedOops::encode(n);
! return CompressedOops::decode((narrowOop) Atomic::cmpxchg(val, addr, c));
}
inline oop ShenandoahHeap::cas_oop(oop n, narrowOop* addr, oop c) {
assert(is_aligned(addr, sizeof(narrowOop)), "Address should be aligned: " PTR_FORMAT, p2i(addr));
narrowOop cmp = CompressedOops::encode(c);
narrowOop val = CompressedOops::encode(n);
! return CompressedOops::decode((narrowOop) Atomic::cmpxchg(val, addr, cmp));
}
template <class T>
inline oop ShenandoahHeap::maybe_update_with_forwarded_not_null(T* p, oop heap_oop) {
shenandoah_assert_not_in_cset_loc_except(p, !is_in(p) || is_full_gc_in_progress() || is_degenerated_gc_in_progress());
--- 129,152 ----
}
}
inline oop ShenandoahHeap::cas_oop(oop n, oop* addr, oop c) {
assert(is_aligned(addr, HeapWordSize), "Address should be aligned: " PTR_FORMAT, p2i(addr));
! return (oop) Atomic::cmpxchg(addr, c, n);
}
inline oop ShenandoahHeap::cas_oop(oop n, narrowOop* addr, narrowOop c) {
assert(is_aligned(addr, sizeof(narrowOop)), "Address should be aligned: " PTR_FORMAT, p2i(addr));
narrowOop val = CompressedOops::encode(n);
! return CompressedOops::decode((narrowOop) Atomic::cmpxchg(addr, c, val));
}
inline oop ShenandoahHeap::cas_oop(oop n, narrowOop* addr, oop c) {
assert(is_aligned(addr, sizeof(narrowOop)), "Address should be aligned: " PTR_FORMAT, p2i(addr));
narrowOop cmp = CompressedOops::encode(c);
narrowOop val = CompressedOops::encode(n);
! return CompressedOops::decode((narrowOop) Atomic::cmpxchg(addr, cmp, val));
}
template <class T>
inline oop ShenandoahHeap::maybe_update_with_forwarded_not_null(T* p, oop heap_oop) {
shenandoah_assert_not_in_cset_loc_except(p, !is_in(p) || is_full_gc_in_progress() || is_degenerated_gc_in_progress());
< prev index next >