< prev index next >
src/hotspot/share/oops/valueArrayKlass.cpp
Print this page
*** 246,261 ****
swap(src, src_end);
dst = dst + (length << log2_element_size());
do {
src -= elem_incr;
dst -= elem_incr;
! s_elem_vklass->value_store(src, dst, element_byte_size(), true, false);
} while (src > src_end);
} else {
address src_end = src + (length << log2_element_size());
while (src < src_end) {
! s_elem_vklass->value_store(src, dst, element_byte_size(), true, false);
src += elem_incr;
dst += elem_incr;
}
}
} else {
--- 246,261 ----
swap(src, src_end);
dst = dst + (length << log2_element_size());
do {
src -= elem_incr;
dst -= elem_incr;
! HeapAccess<>::value_copy(src, dst, s_elem_vklass);
} while (src > src_end);
} else {
address src_end = src + (length << log2_element_size());
while (src < src_end) {
! HeapAccess<>::value_copy(src, dst, s_elem_vklass);
src += elem_incr;
dst += elem_incr;
}
}
} else {
*** 269,281 ****
// Need to allocate each new src elem payload -> dst oop
objArrayHandle dh(THREAD, (objArrayOop)d);
valueArrayHandle sh(THREAD, sa);
int dst_end = dst_pos + length;
while (dst_pos < dst_end) {
! oop o = s_elem_vklass->allocate_instance(CHECK);
! s_elem_vklass->value_store(sh->value_at_addr(src_pos, layout_helper()),
! s_elem_vklass->data_for_oop(o), true, true);
dh->obj_at_put(dst_pos, o);
dst_pos++;
src_pos++;
}
}
--- 269,279 ----
// Need to allocate each new src elem payload -> dst oop
objArrayHandle dh(THREAD, (objArrayOop)d);
valueArrayHandle sh(THREAD, sa);
int dst_end = dst_pos + length;
while (dst_pos < dst_end) {
! oop o = valueArrayOopDesc::value_copy_from_index(sh, src_pos, CHECK);
dh->obj_at_put(dst_pos, o);
dst_pos++;
src_pos++;
}
}
*** 296,306 ****
}
// Check exact type per element
if (se->klass() != d_elem_klass) {
THROW(vmSymbols::java_lang_ArrayStoreException());
}
! d_elem_vklass->value_store(d_elem_vklass->data_for_oop(se), dst, true, false);
dst += delem_incr;
src_pos++;
}
}
}
--- 294,304 ----
}
// Check exact type per element
if (se->klass() != d_elem_klass) {
THROW(vmSymbols::java_lang_ArrayStoreException());
}
! d_elem_vklass->value_copy_oop_to_payload(se, dst);
dst += delem_incr;
src_pos++;
}
}
}
< prev index next >