< prev index next >
src/share/vm/oops/objArrayOop.cpp
Print this page
rev 12906 : [mq]: gc_interface
@@ -25,25 +25,31 @@
#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);
}
- 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;
+ 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 >