--- a/hotspot/src/share/vm/opto/library_call.cpp Sat Jul 18 04:53:32 2015 +0200
+++ b/hotspot/src/share/vm/opto/library_call.cpp Tue Jul 21 07:28:37 2015 -0700
@@ -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);
@@ -776,6 +777,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 */);
@@ -2075,6 +2083,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)));