< prev index next >
src/hotspot/share/c1/c1_Runtime1.cpp
Print this page
*** 445,488 ****
JRT_END
JRT_ENTRY(void, Runtime1::load_flattened_array(JavaThread* thread, valueArrayOopDesc* array, int index))
NOT_PRODUCT(_load_flattened_array_slowcase_cnt++;)
- Klass* klass = array->klass();
- assert(klass->is_valueArray_klass(), "expected value array oop");
assert(array->length() > 0 && index < array->length(), "already checked");
!
! ValueArrayKlass* vaklass = ValueArrayKlass::cast(klass);
! ValueKlass* vklass = vaklass->element_klass();
!
! // We have a non-empty flattened array, so the element type must have been initialized.
! assert(vklass->is_initialized(), "must be");
! Handle holder(THREAD, vklass->klass_holder()); // keep the vklass alive
! valueArrayHandle ha(THREAD, array);
! oop obj = vklass->allocate_instance(CHECK);
!
! void* src = ha()->value_at_addr(index, vaklass->layout_helper());
! vklass->value_store(src, vklass->data_for_oop(obj),
! vaklass->element_byte_size(), true, false);
thread->set_vm_result(obj);
JRT_END
JRT_ENTRY(void, Runtime1::store_flattened_array(JavaThread* thread, valueArrayOopDesc* array, int index, oopDesc* value))
NOT_PRODUCT(_store_flattened_array_slowcase_cnt++;)
if (value == NULL) {
SharedRuntime::throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_NullPointerException());
} else {
! Klass* klass = array->klass();
! assert(klass->is_valueArray_klass(), "expected value array");
! assert(ArrayKlass::cast(klass)->element_klass() == value->klass(), "Store type incorrect");
!
! ValueArrayKlass* vaklass = ValueArrayKlass::cast(klass);
! ValueKlass* vklass = vaklass->element_klass();
! const int lh = vaklass->layout_helper();
! vklass->value_store(vklass->data_for_oop(value), array->value_at_addr(index, lh),
! vaklass->element_byte_size(), true, false);
}
JRT_END
JRT_ENTRY(int, Runtime1::substitutability_check(JavaThread* thread, oopDesc* left, oopDesc* right))
--- 445,467 ----
JRT_END
JRT_ENTRY(void, Runtime1::load_flattened_array(JavaThread* thread, valueArrayOopDesc* array, int index))
NOT_PRODUCT(_load_flattened_array_slowcase_cnt++;)
assert(array->length() > 0 && index < array->length(), "already checked");
! valueArrayHandle vah(thread, array);
! oop obj = valueArrayOopDesc::value_copy_from_index(vah, index, CHECK);
thread->set_vm_result(obj);
JRT_END
JRT_ENTRY(void, Runtime1::store_flattened_array(JavaThread* thread, valueArrayOopDesc* array, int index, oopDesc* value))
NOT_PRODUCT(_store_flattened_array_slowcase_cnt++;)
if (value == NULL) {
SharedRuntime::throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_NullPointerException());
} else {
! array->value_copy_to_index(value, index);
}
JRT_END
JRT_ENTRY(int, Runtime1::substitutability_check(JavaThread* thread, oopDesc* left, oopDesc* right))
< prev index next >