< prev index next >
src/share/vm/oops/oop.inline.hpp
Print this page
rev 10933 : 8154736: enhancement of cmpxchg and copy_to_survivor for ppc64
Reviewed-by:
Contributed-by: HORII@jp.ibm.com, mdoerr
*** 90,101 ****
void oopDesc::release_set_mark(markOop m) {
OrderAccess::release_store_ptr(&_mark, m);
}
! markOop oopDesc::cas_set_mark(markOop new_mark, markOop old_mark) {
! return (markOop) Atomic::cmpxchg_ptr(new_mark, &_mark, old_mark);
}
void oopDesc::init_mark() {
set_mark(markOopDesc::prototype_for_object(this));
}
--- 90,101 ----
void oopDesc::release_set_mark(markOop m) {
OrderAccess::release_store_ptr(&_mark, m);
}
! markOop oopDesc::cas_set_mark(markOop new_mark, markOop old_mark, memory_order order) {
! return (markOop) Atomic::cmpxchg_ptr(new_mark, &_mark, old_mark, order);
}
void oopDesc::init_mark() {
set_mark(markOopDesc::prototype_for_object(this));
}
*** 576,593 ****
assert(m->decode_pointer() == p, "encoding must be reversable");
set_mark(m);
}
// Used by parallel scavengers
! bool oopDesc::cas_forward_to(oop p, markOop compare) {
assert(check_obj_alignment(p),
"forwarding to something not aligned");
assert(Universe::heap()->is_in_reserved(p),
"forwarding to something not in heap");
markOop m = markOopDesc::encode_pointer_as_mark(p);
assert(m->decode_pointer() == p, "encoding must be reversable");
! return cas_set_mark(m, compare) == compare;
}
#if INCLUDE_ALL_GCS
oop oopDesc::forward_to_atomic(oop p) {
markOop oldMark = mark();
--- 576,593 ----
assert(m->decode_pointer() == p, "encoding must be reversable");
set_mark(m);
}
// Used by parallel scavengers
! bool oopDesc::cas_forward_to(oop p, markOop compare, memory_order order) {
assert(check_obj_alignment(p),
"forwarding to something not aligned");
assert(Universe::heap()->is_in_reserved(p),
"forwarding to something not in heap");
markOop m = markOopDesc::encode_pointer_as_mark(p);
assert(m->decode_pointer() == p, "encoding must be reversable");
! return cas_set_mark(m, compare, order) == compare;
}
#if INCLUDE_ALL_GCS
oop oopDesc::forward_to_atomic(oop p) {
markOop oldMark = mark();
< prev index next >