< prev index next >

src/hotspot/share/runtime/sharedRuntime.cpp

Print this page

        

@@ -1368,10 +1368,20 @@
   // make sure caller is not getting deoptimized
   // and removed before we are done with it.
   // CLEANUP - with lazy deopt shouldn't need this lock
   nmethodLocker caller_lock(caller_nm);
 
+  if (!is_virtual && !is_optimized) {
+    SimpleScopeDesc ssd(caller_nm, caller_frame.pc());
+    Bytecode bc(ssd.method(), ssd.method()->bcp_from(ssd.bci()));
+    // Substituability test implementation piggy backs on static call resolution
+    if (bc.code() == Bytecodes::_if_acmpeq || bc.code() == Bytecodes::_if_acmpne) {
+      SystemDictionary::ValueBootstrapMethods_klass()->initialize(CHECK_NULL);
+      return SystemDictionary::ValueBootstrapMethods_klass()->find_method(vmSymbols::isSubstitutable_name(), vmSymbols::object_object_boolean_signature());
+    }
+  }
+
   // determine call info & receiver
   // note: a) receiver is NULL for static calls
   //       b) an exception is thrown if receiver is NULL for non-static calls
   CallInfo call_info;
   Bytecodes::Code invoke_code = Bytecodes::_illegal;
< prev index next >