71 void oopDesc::release_set_mark(markWord m) { |
71 void oopDesc::release_set_mark(markWord m) { |
72 HeapAccess<MO_RELEASE>::store_at(as_oop(), mark_offset_in_bytes(), m.value()); |
72 HeapAccess<MO_RELEASE>::store_at(as_oop(), mark_offset_in_bytes(), m.value()); |
73 } |
73 } |
74 |
74 |
75 markWord oopDesc::cas_set_mark(markWord new_mark, markWord old_mark) { |
75 markWord oopDesc::cas_set_mark(markWord new_mark, markWord old_mark) { |
76 uintptr_t v = HeapAccess<>::atomic_cmpxchg_at(new_mark.value(), as_oop(), mark_offset_in_bytes(), old_mark.value()); |
76 uintptr_t v = HeapAccess<>::atomic_cmpxchg_at(as_oop(), mark_offset_in_bytes(), old_mark.value(), new_mark.value()); |
77 return markWord(v); |
77 return markWord(v); |
78 } |
78 } |
79 |
79 |
80 markWord oopDesc::cas_set_mark_raw(markWord new_mark, markWord old_mark, atomic_memory_order order) { |
80 markWord oopDesc::cas_set_mark_raw(markWord new_mark, markWord old_mark, atomic_memory_order order) { |
81 return Atomic::cmpxchg(new_mark, &_mark, old_mark, order); |
81 return Atomic::cmpxchg(&_mark, old_mark, new_mark, order); |
82 } |
82 } |
83 |
83 |
84 void oopDesc::init_mark() { |
84 void oopDesc::init_mark() { |
85 set_mark(markWord::prototype_for_klass(klass())); |
85 set_mark(markWord::prototype_for_klass(klass())); |
86 } |
86 } |