< prev index next >

src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp

Print this page

        

*** 25,34 **** --- 25,35 ---- #ifndef SHARE_VM_GC_SHARED_MODREFBARRIERSET_INLINE_HPP #define SHARE_VM_GC_SHARED_MODREFBARRIERSET_INLINE_HPP #include "gc/shared/barrierSet.inline.hpp" #include "gc/shared/modRefBarrierSet.hpp" + #include "oops/compressedOops.inline.hpp" #include "oops/klass.inline.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.hpp" template <DecoratorSet decorators, typename BarrierSetT>
*** 81,91 **** Klass* bound = objArrayOop(dst_obj)->element_klass(); T* from = src; T* end = from + length; for (T* p = dst; from < end; from++, p++) { T element = *from; ! if (bound->is_instanceof_or_null(element)) { bs->template write_ref_field_pre<decorators>(p); *p = element; } else { // We must do a barrier to cover the partial copy. const size_t pd = pointer_delta(p, dst, (size_t)heapOopSize); --- 82,92 ---- Klass* bound = objArrayOop(dst_obj)->element_klass(); T* from = src; T* end = from + length; for (T* p = dst; from < end; from++, p++) { T element = *from; ! if (oopDesc::is_instanceof_or_null(CompressedOops::decode(element), bound)) { bs->template write_ref_field_pre<decorators>(p); *p = element; } else { // We must do a barrier to cover the partial copy. const size_t pd = pointer_delta(p, dst, (size_t)heapOopSize);
< prev index next >