hotspot/src/share/vm/c1/c1_Runtime1.cpp
changeset 14488 ab48109f7d1b
parent 13952 e3cf184080bc
child 16611 6807a703dd6b
equal deleted inserted replaced
14486:7d079e0eedef 14488:ab48109f7d1b
   372 JRT_END
   372 JRT_END
   373 
   373 
   374 
   374 
   375 JRT_ENTRY(void, Runtime1::throw_array_store_exception(JavaThread* thread, oopDesc* obj))
   375 JRT_ENTRY(void, Runtime1::throw_array_store_exception(JavaThread* thread, oopDesc* obj))
   376   ResourceMark rm(thread);
   376   ResourceMark rm(thread);
   377   const char* klass_name = Klass::cast(obj->klass())->external_name();
   377   const char* klass_name = obj->klass()->external_name();
   378   SharedRuntime::throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_ArrayStoreException(), klass_name);
   378   SharedRuntime::throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_ArrayStoreException(), klass_name);
   379 JRT_END
   379 JRT_END
   380 
   380 
   381 
   381 
   382 // counter_overflow() is called from within C1-compiled methods. The enclosing method is the method
   382 // counter_overflow() is called from within C1-compiled methods. The enclosing method is the method
   629 
   629 
   630 JRT_ENTRY(void, Runtime1::throw_class_cast_exception(JavaThread* thread, oopDesc* object))
   630 JRT_ENTRY(void, Runtime1::throw_class_cast_exception(JavaThread* thread, oopDesc* object))
   631   NOT_PRODUCT(_throw_class_cast_exception_count++;)
   631   NOT_PRODUCT(_throw_class_cast_exception_count++;)
   632   ResourceMark rm(thread);
   632   ResourceMark rm(thread);
   633   char* message = SharedRuntime::generate_class_cast_message(
   633   char* message = SharedRuntime::generate_class_cast_message(
   634     thread, Klass::cast(object->klass())->external_name());
   634     thread, object->klass()->external_name());
   635   SharedRuntime::throw_and_post_jvmti_exception(
   635   SharedRuntime::throw_and_post_jvmti_exception(
   636     thread, vmSymbols::java_lang_ClassCastException(), message);
   636     thread, vmSymbols::java_lang_ClassCastException(), message);
   637 JRT_END
   637 JRT_END
   638 
   638 
   639 
   639 
   874         }
   874         }
   875         break;
   875         break;
   876       case Bytecodes::_anewarray:
   876       case Bytecodes::_anewarray:
   877         { Bytecode_anewarray anew(caller_method(), caller_method->bcp_from(bci));
   877         { Bytecode_anewarray anew(caller_method(), caller_method->bcp_from(bci));
   878           Klass* ek = caller_method->constants()->klass_at(anew.index(), CHECK);
   878           Klass* ek = caller_method->constants()->klass_at(anew.index(), CHECK);
   879           k = Klass::cast(ek)->array_klass(CHECK);
   879           k = ek->array_klass(CHECK);
   880         }
   880         }
   881         break;
   881         break;
   882       case Bytecodes::_ldc:
   882       case Bytecodes::_ldc:
   883       case Bytecodes::_ldc_w:
   883       case Bytecodes::_ldc_w:
   884         {
   884         {
  1234     bs->write_ref_array((HeapWord*)dst_addr, length);
  1234     bs->write_ref_array((HeapWord*)dst_addr, length);
  1235     return ac_ok;
  1235     return ac_ok;
  1236   } else {
  1236   } else {
  1237     Klass* bound = ObjArrayKlass::cast(dst->klass())->element_klass();
  1237     Klass* bound = ObjArrayKlass::cast(dst->klass())->element_klass();
  1238     Klass* stype = ObjArrayKlass::cast(src->klass())->element_klass();
  1238     Klass* stype = ObjArrayKlass::cast(src->klass())->element_klass();
  1239     if (stype == bound || Klass::cast(stype)->is_subtype_of(bound)) {
  1239     if (stype == bound || stype->is_subtype_of(bound)) {
  1240       // Elements are guaranteed to be subtypes, so no check necessary
  1240       // Elements are guaranteed to be subtypes, so no check necessary
  1241       bs->write_ref_array_pre(dst_addr, length);
  1241       bs->write_ref_array_pre(dst_addr, length);
  1242       Copy::conjoint_oops_atomic(src_addr, dst_addr, length);
  1242       Copy::conjoint_oops_atomic(src_addr, dst_addr, length);
  1243       bs->write_ref_array((HeapWord*)dst_addr, length);
  1243       bs->write_ref_array((HeapWord*)dst_addr, length);
  1244       return ac_ok;
  1244       return ac_ok;