hotspot/src/share/vm/opto/macro.cpp
changeset 30244 d4e471395ff5
parent 29086 74100114a95a
child 30248 5c6dacbd17ae
--- a/hotspot/src/share/vm/opto/macro.cpp	Wed Apr 15 17:34:28 2015 -0700
+++ b/hotspot/src/share/vm/opto/macro.cpp	Thu Apr 16 08:23:26 2015 -0700
@@ -144,7 +144,9 @@
 }
 
 //------------------------------make_slow_call---------------------------------
-CallNode* PhaseMacroExpand::make_slow_call(CallNode *oldcall, const TypeFunc* slow_call_type, address slow_call, const char* leaf_name, Node* slow_path, Node* parm0, Node* parm1) {
+CallNode* PhaseMacroExpand::make_slow_call(CallNode *oldcall, const TypeFunc* slow_call_type,
+                                           address slow_call, const char* leaf_name, Node* slow_path,
+                                           Node* parm0, Node* parm1, Node* parm2) {
 
   // Slow-path call
  CallNode *call = leaf_name
@@ -155,6 +157,7 @@
   copy_predefined_input_for_runtime_call(slow_path, oldcall, call );
   if (parm0 != NULL)  call->init_req(TypeFunc::Parms+0, parm0);
   if (parm1 != NULL)  call->init_req(TypeFunc::Parms+1, parm1);
+  if (parm2 != NULL)  call->init_req(TypeFunc::Parms+2, parm2);
   copy_call_debug_info(oldcall, call);
   call->set_cnt(PROB_UNLIKELY_MAG(4));  // Same effect as RC_UNCOMMON.
   _igvn.replace_node(oldcall, call);
@@ -2328,7 +2331,9 @@
   }
 
   // Make slow path call
-  CallNode *call = make_slow_call( (CallNode *) lock, OptoRuntime::complete_monitor_enter_Type(), OptoRuntime::complete_monitor_locking_Java(), NULL, slow_path, obj, box );
+  CallNode *call = make_slow_call((CallNode *) lock, OptoRuntime::complete_monitor_enter_Type(),
+                                  OptoRuntime::complete_monitor_locking_Java(), NULL, slow_path,
+                                  obj, box, NULL);
 
   extract_call_projections(call);
 
@@ -2395,8 +2400,11 @@
   funlock = transform_later( funlock )->as_FastUnlock();
   // Optimize test; set region slot 2
   Node *slow_path = opt_bits_test(ctrl, region, 2, funlock, 0, 0);
+  Node *thread = transform_later(new ThreadLocalNode());
 
-  CallNode *call = make_slow_call( (CallNode *) unlock, OptoRuntime::complete_monitor_exit_Type(), CAST_FROM_FN_PTR(address, SharedRuntime::complete_monitor_unlocking_C), "complete_monitor_unlocking_C", slow_path, obj, box );
+  CallNode *call = make_slow_call((CallNode *) unlock, OptoRuntime::complete_monitor_exit_Type(),
+                                  CAST_FROM_FN_PTR(address, SharedRuntime::complete_monitor_unlocking_C),
+                                  "complete_monitor_unlocking_C", slow_path, obj, box, thread);
 
   extract_call_projections(call);