< prev index next >

src/hotspot/share/c1/c1_Runtime1.cpp

Print this page


 412   assert(klass->is_klass(), "not a class");
 413   assert(rank >= 1, "rank must be nonzero");
 414   Handle holder(THREAD, klass->klass_holder()); // keep the klass alive
 415   oop obj = ArrayKlass::cast(klass)->multi_allocate(rank, dims, CHECK);
 416   thread->set_vm_result(obj);
 417 JRT_END
 418 
 419 
 420 JRT_ENTRY(void, Runtime1::load_flattened_array(JavaThread* thread, valueArrayOopDesc* array, int index))
 421   NOT_PRODUCT(_load_flattened_array_slowcase_cnt++;)
 422   Klass* klass = array->klass();
 423   assert(klass->is_valueArray_klass(), "expected value array oop");
 424   assert(array->length() > 0 && index < array->length(), "already checked");
 425 
 426   ValueArrayKlass* vaklass = ValueArrayKlass::cast(klass);
 427   ValueKlass* vklass = vaklass->element_klass();
 428 
 429   // We have a non-empty flattened array, so the element type must have been initialized.
 430   assert(vklass->is_initialized(), "must be");
 431   Handle holder(THREAD, vklass->klass_holder()); // keep the vklass alive

 432   oop obj = vklass->allocate_instance(CHECK);
 433 
 434   void* src = array->value_at_addr(index, vaklass->layout_helper());
 435   vklass->value_store(src, vklass->data_for_oop(obj),
 436                       vaklass->element_byte_size(), true, false);
 437   thread->set_vm_result(obj);
 438 JRT_END
 439 
 440 
 441 JRT_ENTRY(void, Runtime1::store_flattened_array(JavaThread* thread, valueArrayOopDesc* array, int index, oopDesc* value))
 442   NOT_PRODUCT(_store_flattened_array_slowcase_cnt++;)
 443   if (value == NULL) {
 444     SharedRuntime::throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_NullPointerException());
 445   } else {
 446     Klass* klass = array->klass();
 447     assert(klass->is_valueArray_klass(), "expected value array");
 448     assert(ArrayKlass::cast(klass)->element_klass() == value->klass(), "Store type incorrect");
 449 
 450     ValueArrayKlass* vaklass = ValueArrayKlass::cast(klass);
 451     ValueKlass* vklass = vaklass->element_klass();
 452     const int lh = vaklass->layout_helper();
 453     vklass->value_store(vklass->data_for_oop(value), array->value_at_addr(index, lh),
 454                         vaklass->element_byte_size(), true, false);




 412   assert(klass->is_klass(), "not a class");
 413   assert(rank >= 1, "rank must be nonzero");
 414   Handle holder(THREAD, klass->klass_holder()); // keep the klass alive
 415   oop obj = ArrayKlass::cast(klass)->multi_allocate(rank, dims, CHECK);
 416   thread->set_vm_result(obj);
 417 JRT_END
 418 
 419 
 420 JRT_ENTRY(void, Runtime1::load_flattened_array(JavaThread* thread, valueArrayOopDesc* array, int index))
 421   NOT_PRODUCT(_load_flattened_array_slowcase_cnt++;)
 422   Klass* klass = array->klass();
 423   assert(klass->is_valueArray_klass(), "expected value array oop");
 424   assert(array->length() > 0 && index < array->length(), "already checked");
 425 
 426   ValueArrayKlass* vaklass = ValueArrayKlass::cast(klass);
 427   ValueKlass* vklass = vaklass->element_klass();
 428 
 429   // We have a non-empty flattened array, so the element type must have been initialized.
 430   assert(vklass->is_initialized(), "must be");
 431   Handle holder(THREAD, vklass->klass_holder()); // keep the vklass alive
 432   valueArrayHandle ha(THREAD, array);
 433   oop obj = vklass->allocate_instance(CHECK);
 434 
 435   void* src = ha()->value_at_addr(index, vaklass->layout_helper());
 436   vklass->value_store(src, vklass->data_for_oop(obj),
 437                       vaklass->element_byte_size(), true, false);
 438   thread->set_vm_result(obj);
 439 JRT_END
 440 
 441 
 442 JRT_ENTRY(void, Runtime1::store_flattened_array(JavaThread* thread, valueArrayOopDesc* array, int index, oopDesc* value))
 443   NOT_PRODUCT(_store_flattened_array_slowcase_cnt++;)
 444   if (value == NULL) {
 445     SharedRuntime::throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_NullPointerException());
 446   } else {
 447     Klass* klass = array->klass();
 448     assert(klass->is_valueArray_klass(), "expected value array");
 449     assert(ArrayKlass::cast(klass)->element_klass() == value->klass(), "Store type incorrect");
 450 
 451     ValueArrayKlass* vaklass = ValueArrayKlass::cast(klass);
 452     ValueKlass* vklass = vaklass->element_klass();
 453     const int lh = vaklass->layout_helper();
 454     vklass->value_store(vklass->data_for_oop(value), array->value_at_addr(index, lh),
 455                         vaklass->element_byte_size(), true, false);


< prev index next >