< prev index next >

src/share/vm/oops/objArrayOop.cpp

Print this page
rev 12906 : [mq]: gc_interface

*** 25,49 **** #include "precompiled.hpp" #include "gc/shared/specialized_oop_closures.hpp" #include "oops/objArrayKlass.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" oop objArrayOopDesc::atomic_compare_exchange_oop(int index, oop exchange_value, oop compare_value) { volatile HeapWord* dest; if (UseCompressedOops) { dest = (HeapWord*)obj_at_addr<narrowOop>(index); } else { dest = (HeapWord*)obj_at_addr<oop>(index); } ! oop res = oopDesc::atomic_compare_exchange_oop(exchange_value, dest, compare_value, true); ! // update card mark if success ! if (res == compare_value) { ! update_barrier_set((void*)dest, exchange_value); ! } ! return res; } #define ObjArrayOop_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ \ void objArrayOopDesc::oop_iterate_range(OopClosureType* blk, int start, int end) { \ --- 25,55 ---- #include "precompiled.hpp" #include "gc/shared/specialized_oop_closures.hpp" #include "oops/objArrayKlass.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" + #include "runtime/access.inline.hpp" + + oop objArrayOopDesc::obj_at(int index) const { + ptrdiff_t offset = UseCompressedOops ? obj_at_offset<narrowOop>(index) : obj_at_offset<oop>(index); + return HeapAccess<ACCESS_ON_ARRAY>::oop_load_at(oop_base(), offset); + } + + void objArrayOopDesc::obj_at_put(int index, oop value) { + ptrdiff_t offset = UseCompressedOops ? obj_at_offset<narrowOop>(index) : obj_at_offset<oop>(index); + HeapAccess<ACCESS_ON_ARRAY>::oop_store_at(oop_base(), offset, value); + } oop objArrayOopDesc::atomic_compare_exchange_oop(int index, oop exchange_value, oop compare_value) { volatile HeapWord* dest; if (UseCompressedOops) { dest = (HeapWord*)obj_at_addr<narrowOop>(index); } else { dest = (HeapWord*)obj_at_addr<oop>(index); } ! return oopDesc::atomic_compare_exchange_oop(exchange_value, dest, compare_value); } #define ObjArrayOop_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ \ void objArrayOopDesc::oop_iterate_range(OopClosureType* blk, int start, int end) { \
< prev index next >