179 __ verify_oop(recv); |
179 __ verify_oop(recv); |
180 __ load_heap_oop(Address(recv, NONZERO(java_lang_invoke_MethodHandle::form_offset_in_bytes())), method_temp); |
180 __ load_heap_oop(Address(recv, NONZERO(java_lang_invoke_MethodHandle::form_offset_in_bytes())), method_temp); |
181 __ verify_oop(method_temp); |
181 __ verify_oop(method_temp); |
182 __ load_heap_oop(Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes())), method_temp); |
182 __ load_heap_oop(Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes())), method_temp); |
183 __ verify_oop(method_temp); |
183 __ verify_oop(method_temp); |
184 // the following assumes that a Method* is normally compressed in the vmtarget field: |
184 __ load_heap_oop(Address(method_temp, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes())), method_temp); |
185 __ ld_ptr( Address(method_temp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes())), method_temp); |
185 __ verify_oop(method_temp); |
|
186 __ ld_ptr( Address(method_temp, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes())), method_temp); |
186 |
187 |
187 if (VerifyMethodHandles && !for_compiler_entry) { |
188 if (VerifyMethodHandles && !for_compiler_entry) { |
188 // make sure recv is already on stack |
189 // make sure recv is already on stack |
189 __ ld_ptr(method_temp, in_bytes(Method::const_offset()), temp2); |
190 __ ld_ptr(method_temp, in_bytes(Method::const_offset()), temp2); |
190 __ load_sized_value(Address(temp2, ConstMethod::size_of_parameters_offset()), |
191 __ load_sized_value(Address(temp2, ConstMethod::size_of_parameters_offset()), |
330 "MemberName required for invokeVirtual etc."); |
331 "MemberName required for invokeVirtual etc."); |
331 } |
332 } |
332 |
333 |
333 Address member_clazz( member_reg, NONZERO(java_lang_invoke_MemberName::clazz_offset_in_bytes())); |
334 Address member_clazz( member_reg, NONZERO(java_lang_invoke_MemberName::clazz_offset_in_bytes())); |
334 Address member_vmindex( member_reg, NONZERO(java_lang_invoke_MemberName::vmindex_offset_in_bytes())); |
335 Address member_vmindex( member_reg, NONZERO(java_lang_invoke_MemberName::vmindex_offset_in_bytes())); |
335 Address member_vmtarget( member_reg, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes())); |
336 Address member_vmtarget( member_reg, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes())); |
|
337 Address vmtarget_method( G5_method, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes())); |
336 |
338 |
337 Register temp1_recv_klass = temp1; |
339 Register temp1_recv_klass = temp1; |
338 if (iid != vmIntrinsics::_linkToStatic) { |
340 if (iid != vmIntrinsics::_linkToStatic) { |
339 __ verify_oop(receiver_reg); |
341 __ verify_oop(receiver_reg); |
340 if (iid == vmIntrinsics::_linkToSpecial) { |
342 if (iid == vmIntrinsics::_linkToSpecial) { |
382 switch (iid) { |
384 switch (iid) { |
383 case vmIntrinsics::_linkToSpecial: |
385 case vmIntrinsics::_linkToSpecial: |
384 if (VerifyMethodHandles) { |
386 if (VerifyMethodHandles) { |
385 verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp2); |
387 verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp2); |
386 } |
388 } |
387 __ ld_ptr(member_vmtarget, G5_method); |
389 __ load_heap_oop(member_vmtarget, G5_method); |
|
390 __ ld_ptr(vmtarget_method, G5_method); |
388 break; |
391 break; |
389 |
392 |
390 case vmIntrinsics::_linkToStatic: |
393 case vmIntrinsics::_linkToStatic: |
391 if (VerifyMethodHandles) { |
394 if (VerifyMethodHandles) { |
392 verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp2); |
395 verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp2); |
393 } |
396 } |
394 __ ld_ptr(member_vmtarget, G5_method); |
397 __ load_heap_oop(member_vmtarget, G5_method); |
|
398 __ ld_ptr(vmtarget_method, G5_method); |
395 break; |
399 break; |
396 |
400 |
397 case vmIntrinsics::_linkToVirtual: |
401 case vmIntrinsics::_linkToVirtual: |
398 { |
402 { |
399 // same as TemplateTable::invokevirtual, |
403 // same as TemplateTable::invokevirtual, |