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
|