< prev index next >

src/hotspot/share/c1/c1_Runtime1.cpp

Print this page




 688   char* message = SharedRuntime::generate_class_cast_message(
 689     thread, object->klass());
 690   SharedRuntime::throw_and_post_jvmti_exception(
 691     thread, vmSymbols::java_lang_ClassCastException(), message);
 692 JRT_END
 693 
 694 
 695 JRT_ENTRY(void, Runtime1::throw_incompatible_class_change_error(JavaThread* thread))
 696   NOT_PRODUCT(_throw_incompatible_class_change_error_count++;)
 697   ResourceMark rm(thread);
 698   SharedRuntime::throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_IncompatibleClassChangeError());
 699 JRT_END
 700 
 701 
 702 JRT_ENTRY_NO_ASYNC(void, Runtime1::monitorenter(JavaThread* thread, oopDesc* obj, BasicObjectLock* lock))
 703   NOT_PRODUCT(_monitorenter_slowcase_cnt++;)
 704   if (PrintBiasedLockingStatistics) {
 705     Atomic::inc(BiasedLocking::slow_path_entry_count_addr());
 706   }
 707   Handle h_obj(thread, obj);
 708   if (UseBiasedLocking) {
 709     // Retry fast entry if bias is revoked to avoid unnecessary inflation
 710     ObjectSynchronizer::fast_enter(h_obj, lock->lock(), true, CHECK);
 711   } else {
 712     if (UseFastLocking) {
 713       // When using fast locking, the compiled code has already tried the fast case
 714       assert(obj == lock->obj(), "must match");
 715       ObjectSynchronizer::slow_enter(h_obj, lock->lock(), THREAD);
 716     } else {
 717       lock->set_obj(obj);
 718       ObjectSynchronizer::fast_enter(h_obj, lock->lock(), false, THREAD);
 719     }
 720   }
 721 JRT_END
 722 
 723 
 724 JRT_LEAF(void, Runtime1::monitorexit(JavaThread* thread, BasicObjectLock* lock))
 725   NOT_PRODUCT(_monitorexit_slowcase_cnt++;)
 726   assert(thread == JavaThread::current(), "threads must correspond");
 727   assert(thread->last_Java_sp(), "last_Java_sp must be set");
 728   // monitorexit is non-blocking (leaf routine) => no exceptions can be thrown
 729   EXCEPTION_MARK;
 730 
 731   oop obj = lock->obj();
 732   assert(oopDesc::is_oop(obj), "must be NULL or an object");
 733   if (UseFastLocking) {
 734     // When using fast locking, the compiled code has already tried the fast case
 735     ObjectSynchronizer::slow_exit(obj, lock->lock(), THREAD);
 736   } else {
 737     ObjectSynchronizer::fast_exit(obj, lock->lock(), THREAD);
 738   }
 739 JRT_END
 740 
 741 // Cf. OptoRuntime::deoptimize_caller_frame
 742 JRT_ENTRY(void, Runtime1::deoptimize(JavaThread* thread, jint trap_request))
 743   // Called from within the owner thread, so no need for safepoint
 744   RegisterMap reg_map(thread, false);
 745   frame stub_frame = thread->last_frame();
 746   assert(stub_frame.is_runtime_frame(), "Sanity check");
 747   frame caller_frame = stub_frame.sender(&reg_map);
 748   nmethod* nm = caller_frame.cb()->as_nmethod_or_null();
 749   assert(nm != NULL, "Sanity check");
 750   methodHandle method(thread, nm->method());
 751   assert(nm == CodeCache::find_nmethod(caller_frame.pc()), "Should be the same");
 752   Deoptimization::DeoptAction action = Deoptimization::trap_request_action(trap_request);
 753   Deoptimization::DeoptReason reason = Deoptimization::trap_request_reason(trap_request);
 754 
 755   if (action == Deoptimization::Action_make_not_entrant) {
 756     if (nm->make_not_entrant()) {
 757       if (reason == Deoptimization::Reason_tenured) {
 758         MethodData* trap_mdo = Deoptimization::get_method_data(thread, method, true /*create_if_missing*/);




 688   char* message = SharedRuntime::generate_class_cast_message(
 689     thread, object->klass());
 690   SharedRuntime::throw_and_post_jvmti_exception(
 691     thread, vmSymbols::java_lang_ClassCastException(), message);
 692 JRT_END
 693 
 694 
 695 JRT_ENTRY(void, Runtime1::throw_incompatible_class_change_error(JavaThread* thread))
 696   NOT_PRODUCT(_throw_incompatible_class_change_error_count++;)
 697   ResourceMark rm(thread);
 698   SharedRuntime::throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_IncompatibleClassChangeError());
 699 JRT_END
 700 
 701 
 702 JRT_ENTRY_NO_ASYNC(void, Runtime1::monitorenter(JavaThread* thread, oopDesc* obj, BasicObjectLock* lock))
 703   NOT_PRODUCT(_monitorenter_slowcase_cnt++;)
 704   if (PrintBiasedLockingStatistics) {
 705     Atomic::inc(BiasedLocking::slow_path_entry_count_addr());
 706   }
 707   Handle h_obj(thread, obj);






 708   assert(obj == lock->obj(), "must match");
 709   ObjectSynchronizer::enter(h_obj, lock->lock(), THREAD);





 710 JRT_END
 711 
 712 
 713 JRT_LEAF(void, Runtime1::monitorexit(JavaThread* thread, BasicObjectLock* lock))
 714   NOT_PRODUCT(_monitorexit_slowcase_cnt++;)
 715   assert(thread == JavaThread::current(), "threads must correspond");
 716   assert(thread->last_Java_sp(), "last_Java_sp must be set");
 717   // monitorexit is non-blocking (leaf routine) => no exceptions can be thrown
 718   EXCEPTION_MARK;
 719 
 720   oop obj = lock->obj();
 721   assert(oopDesc::is_oop(obj), "must be NULL or an object");
 722   ObjectSynchronizer::exit(obj, lock->lock(), THREAD);





 723 JRT_END
 724 
 725 // Cf. OptoRuntime::deoptimize_caller_frame
 726 JRT_ENTRY(void, Runtime1::deoptimize(JavaThread* thread, jint trap_request))
 727   // Called from within the owner thread, so no need for safepoint
 728   RegisterMap reg_map(thread, false);
 729   frame stub_frame = thread->last_frame();
 730   assert(stub_frame.is_runtime_frame(), "Sanity check");
 731   frame caller_frame = stub_frame.sender(&reg_map);
 732   nmethod* nm = caller_frame.cb()->as_nmethod_or_null();
 733   assert(nm != NULL, "Sanity check");
 734   methodHandle method(thread, nm->method());
 735   assert(nm == CodeCache::find_nmethod(caller_frame.pc()), "Should be the same");
 736   Deoptimization::DeoptAction action = Deoptimization::trap_request_action(trap_request);
 737   Deoptimization::DeoptReason reason = Deoptimization::trap_request_reason(trap_request);
 738 
 739   if (action == Deoptimization::Action_make_not_entrant) {
 740     if (nm->make_not_entrant()) {
 741       if (reason == Deoptimization::Reason_tenured) {
 742         MethodData* trap_mdo = Deoptimization::get_method_data(thread, method, true /*create_if_missing*/);


< prev index next >