src/share/vm/interpreter/interpreterRuntime.cpp

Print this page




1302 #endif
1303 
1304 #if INCLUDE_JVMTI
1305 // This is a support of the JVMTI PopFrame interface.
1306 // Make sure it is an invokestatic of a polymorphic intrinsic that has a member_name argument
1307 // and return it as a vm_result so that it can be reloaded in the list of invokestatic parameters.
1308 // The member_name argument is a saved reference (in local#0) to the member_name.
1309 // For backward compatibility with some JDK versions (7, 8) it can also be a direct method handle.
1310 // FIXME: remove DMH case after j.l.i.InvokerBytecodeGenerator code shape is updated.
1311 IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address member_name,
1312                                                             Method* method, address bcp))
1313   Bytecodes::Code code = Bytecodes::code_at(method, bcp);
1314   if (code != Bytecodes::_invokestatic) {
1315     return;
1316   }
1317   ConstantPool* cpool = method->constants();
1318   int cp_index = Bytes::get_native_u2(bcp + 1) + ConstantPool::CPCACHE_INDEX_TAG;
1319   Symbol* cname = cpool->klass_name_at(cpool->klass_ref_index_at(cp_index));
1320   Symbol* mname = cpool->name_ref_at(cp_index);
1321 

1322   if (MethodHandles::has_member_arg(cname, mname)) {
1323     oop member_name_oop = (oop) member_name;
1324     if (java_lang_invoke_DirectMethodHandle::is_instance(member_name_oop)) {
1325       // FIXME: remove after j.l.i.InvokerBytecodeGenerator code shape is updated.
1326       member_name_oop = java_lang_invoke_DirectMethodHandle::member(member_name_oop);
1327     }
1328     thread->set_vm_result(member_name_oop);
1329   }
1330 IRT_END
1331 #endif // INCLUDE_JVMTI


1302 #endif
1303 
1304 #if INCLUDE_JVMTI
1305 // This is a support of the JVMTI PopFrame interface.
1306 // Make sure it is an invokestatic of a polymorphic intrinsic that has a member_name argument
1307 // and return it as a vm_result so that it can be reloaded in the list of invokestatic parameters.
1308 // The member_name argument is a saved reference (in local#0) to the member_name.
1309 // For backward compatibility with some JDK versions (7, 8) it can also be a direct method handle.
1310 // FIXME: remove DMH case after j.l.i.InvokerBytecodeGenerator code shape is updated.
1311 IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address member_name,
1312                                                             Method* method, address bcp))
1313   Bytecodes::Code code = Bytecodes::code_at(method, bcp);
1314   if (code != Bytecodes::_invokestatic) {
1315     return;
1316   }
1317   ConstantPool* cpool = method->constants();
1318   int cp_index = Bytes::get_native_u2(bcp + 1) + ConstantPool::CPCACHE_INDEX_TAG;
1319   Symbol* cname = cpool->klass_name_at(cpool->klass_ref_index_at(cp_index));
1320   Symbol* mname = cpool->name_ref_at(cp_index);
1321 
1322   thread->set_vm_result(NULL);
1323   if (MethodHandles::has_member_arg(cname, mname)) {
1324     oop member_name_oop = (oop) member_name;
1325     if (java_lang_invoke_DirectMethodHandle::is_instance(member_name_oop)) {
1326       // FIXME: remove after j.l.i.InvokerBytecodeGenerator code shape is updated.
1327       member_name_oop = java_lang_invoke_DirectMethodHandle::member(member_name_oop);
1328     }
1329     thread->set_vm_result(member_name_oop);
1330   }
1331 IRT_END
1332 #endif // INCLUDE_JVMTI