167 __ verify_oop(recv); |
167 __ verify_oop(recv); |
168 __ load_heap_oop(method_temp, Address(recv, NONZERO(java_lang_invoke_MethodHandle::form_offset_in_bytes()))); |
168 __ load_heap_oop(method_temp, Address(recv, NONZERO(java_lang_invoke_MethodHandle::form_offset_in_bytes()))); |
169 __ verify_oop(method_temp); |
169 __ verify_oop(method_temp); |
170 __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes()))); |
170 __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes()))); |
171 __ verify_oop(method_temp); |
171 __ verify_oop(method_temp); |
172 // the following assumes that a Method* is normally compressed in the vmtarget field: |
172 __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes()))); |
173 __ movptr(method_temp, Address(method_temp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes()))); |
173 __ verify_oop(method_temp); |
|
174 __ movptr(method_temp, Address(method_temp, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes()))); |
174 |
175 |
175 if (VerifyMethodHandles && !for_compiler_entry) { |
176 if (VerifyMethodHandles && !for_compiler_entry) { |
176 // make sure recv is already on stack |
177 // make sure recv is already on stack |
177 __ movptr(temp2, Address(method_temp, Method::const_offset())); |
178 __ movptr(temp2, Address(method_temp, Method::const_offset())); |
178 __ load_sized_value(temp2, |
179 __ load_sized_value(temp2, |
329 "MemberName required for invokeVirtual etc."); |
330 "MemberName required for invokeVirtual etc."); |
330 } |
331 } |
331 |
332 |
332 Address member_clazz( member_reg, NONZERO(java_lang_invoke_MemberName::clazz_offset_in_bytes())); |
333 Address member_clazz( member_reg, NONZERO(java_lang_invoke_MemberName::clazz_offset_in_bytes())); |
333 Address member_vmindex( member_reg, NONZERO(java_lang_invoke_MemberName::vmindex_offset_in_bytes())); |
334 Address member_vmindex( member_reg, NONZERO(java_lang_invoke_MemberName::vmindex_offset_in_bytes())); |
334 Address member_vmtarget( member_reg, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes())); |
335 Address member_vmtarget( member_reg, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes())); |
|
336 Address vmtarget_method( rbx_method, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes())); |
335 |
337 |
336 Register temp1_recv_klass = temp1; |
338 Register temp1_recv_klass = temp1; |
337 if (iid != vmIntrinsics::_linkToStatic) { |
339 if (iid != vmIntrinsics::_linkToStatic) { |
338 __ verify_oop(receiver_reg); |
340 __ verify_oop(receiver_reg); |
339 if (iid == vmIntrinsics::_linkToSpecial) { |
341 if (iid == vmIntrinsics::_linkToSpecial) { |
381 switch (iid) { |
383 switch (iid) { |
382 case vmIntrinsics::_linkToSpecial: |
384 case vmIntrinsics::_linkToSpecial: |
383 if (VerifyMethodHandles) { |
385 if (VerifyMethodHandles) { |
384 verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3); |
386 verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3); |
385 } |
387 } |
386 __ movptr(rbx_method, member_vmtarget); |
388 __ load_heap_oop(rbx_method, member_vmtarget); |
|
389 __ movptr(rbx_method, vmtarget_method); |
387 break; |
390 break; |
388 |
391 |
389 case vmIntrinsics::_linkToStatic: |
392 case vmIntrinsics::_linkToStatic: |
390 if (VerifyMethodHandles) { |
393 if (VerifyMethodHandles) { |
391 verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3); |
394 verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3); |
392 } |
395 } |
393 __ movptr(rbx_method, member_vmtarget); |
396 __ load_heap_oop(rbx_method, member_vmtarget); |
|
397 __ movptr(rbx_method, vmtarget_method); |
394 break; |
398 break; |
395 |
399 |
396 case vmIntrinsics::_linkToVirtual: |
400 case vmIntrinsics::_linkToVirtual: |
397 { |
401 { |
398 // same as TemplateTable::invokevirtual, |
402 // same as TemplateTable::invokevirtual, |