--- old/src/share/vm/opto/library_call.cpp Fri Jul 3 16:07:21 2015 +++ new/src/share/vm/opto/library_call.cpp Fri Jul 3 16:07:20 2015 @@ -225,6 +225,7 @@ bool inline_pow(); Node* finish_pow_exp(Node* result, Node* x, Node* y, const TypeFunc* call_type, address funcAddr, const char* funcName); bool inline_min_max(vmIntrinsics::ID id); + bool inline_notify(vmIntrinsics::ID id); Node* generate_min_max(vmIntrinsics::ID id, Node* x, Node* y); // This returns Type::AnyPtr, RawPtr, or OopPtr. int classify_unsafe_addr(Node* &base, Node* &offset); @@ -760,6 +761,13 @@ case vmIntrinsics::_min: case vmIntrinsics::_max: return inline_min_max(intrinsic_id()); + case vmIntrinsics::_notify: + case vmIntrinsics::_notifyAll: + if (InlineNotify) { + return inline_notify(intrinsic_id()); + } + return false; + case vmIntrinsics::_addExactI: return inline_math_addExactI(false /* add */); case vmIntrinsics::_addExactL: return inline_math_addExactL(false /* add */); case vmIntrinsics::_decrementExactI: return inline_math_subtractExactI(true /* decrement */); @@ -2054,6 +2062,21 @@ ); } +//----------------------------inline_notify-----------------------------------* +bool LibraryCallKit::inline_notify(vmIntrinsics::ID id) { + const TypeFunc* ftype = OptoRuntime::monitor_notify_Type(); + address func; + if (id == vmIntrinsics::_notify) { + func = OptoRuntime::monitor_notify_Java(); + } else { + func = OptoRuntime::monitor_notifyAll_Java(); + } + Node* call = make_runtime_call(RC_NO_LEAF, ftype, func, NULL, TypeRawPtr::BOTTOM, argument(0)); + make_slow_call_ex(call, env()->Throwable_klass(), false); + return true; +} + + //----------------------------inline_min_max----------------------------------- bool LibraryCallKit::inline_min_max(vmIntrinsics::ID id) { set_result(generate_min_max(id, argument(0), argument(1)));