1192 1193 #if defined(IA32) || defined(AMD64) || defined(ARM) 1194 IRT_LEAF(void, InterpreterRuntime::popframe_move_outgoing_args(JavaThread* thread, void* src_address, void* dest_address)) 1195 if (src_address == dest_address) { 1196 return; 1197 } 1198 ResetNoHandleMark rnm; // In a LEAF entry. 1199 HandleMark hm; 1200 ResourceMark rm; 1201 frame fr = thread->last_frame(); 1202 assert(fr.is_interpreted_frame(), ""); 1203 jint bci = fr.interpreter_frame_bci(); 1204 methodHandle mh(thread, fr.interpreter_frame_method()); 1205 Bytecode_invoke invoke(mh, bci); 1206 ArgumentSizeComputer asc(invoke.signature()); 1207 int size_of_arguments = (asc.size() + (invoke.has_receiver() ? 1 : 0)); // receiver 1208 Copy::conjoint_jbytes(src_address, dest_address, 1209 size_of_arguments * Interpreter::stackElementSize); 1210 IRT_END 1211 #endif | 1192 1193 #if defined(IA32) || defined(AMD64) || defined(ARM) 1194 IRT_LEAF(void, InterpreterRuntime::popframe_move_outgoing_args(JavaThread* thread, void* src_address, void* dest_address)) 1195 if (src_address == dest_address) { 1196 return; 1197 } 1198 ResetNoHandleMark rnm; // In a LEAF entry. 1199 HandleMark hm; 1200 ResourceMark rm; 1201 frame fr = thread->last_frame(); 1202 assert(fr.is_interpreted_frame(), ""); 1203 jint bci = fr.interpreter_frame_bci(); 1204 methodHandle mh(thread, fr.interpreter_frame_method()); 1205 Bytecode_invoke invoke(mh, bci); 1206 ArgumentSizeComputer asc(invoke.signature()); 1207 int size_of_arguments = (asc.size() + (invoke.has_receiver() ? 1 : 0)); // receiver 1208 Copy::conjoint_jbytes(src_address, dest_address, 1209 size_of_arguments * Interpreter::stackElementSize); 1210 IRT_END 1211 #endif 1212 1213 #if INCLUDE_JVMTI 1214 // This is a support of the JVMTI PopFrame interface. 1215 // Make sure it is an invokestatic of a polymorphic intrinsic that has a member_name argument 1216 // and return it as a vm_result so that it can be reloaded in the list of invokestatic parameters. 1217 // The dmh argument is a reference to a DirectMethoHandle that has a member name field. 1218 IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address dmh, 1219 Method* method, address bcp)) 1220 Bytecodes::Code code = Bytecodes::code_at(method, bcp); 1221 if (code != Bytecodes::_invokestatic) { 1222 return; 1223 } 1224 ConstantPool* cpool = method->constants(); 1225 int cp_index = Bytes::get_native_u2(bcp + 1) + ConstantPool::CPCACHE_INDEX_TAG; 1226 Symbol* cname = cpool->klass_name_at(cpool->klass_ref_index_at(cp_index)); 1227 Symbol* mname = cpool->name_ref_at(cp_index); 1228 1229 if (MethodHandles::has_member_arg(cname, mname)) { 1230 oop member_name = java_lang_invoke_DirectMethodHandle::member((oop)dmh); 1231 thread->set_vm_result(member_name); 1232 } 1233 IRT_END 1234 #endif // INCLUDE_JVMTI |