< 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 >