135 __ verify_oop(recv); |
135 __ verify_oop(recv); |
136 __ load_heap_oop(method_temp, Address(recv, NONZERO(java_lang_invoke_MethodHandle::form_offset_in_bytes()))); |
136 __ load_heap_oop(method_temp, Address(recv, NONZERO(java_lang_invoke_MethodHandle::form_offset_in_bytes()))); |
137 __ verify_oop(method_temp); |
137 __ verify_oop(method_temp); |
138 __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes()))); |
138 __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes()))); |
139 __ verify_oop(method_temp); |
139 __ verify_oop(method_temp); |
140 // the following assumes that a Method* is normally compressed in the vmtarget field: |
140 __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes()))); |
141 __ ldr(method_temp, Address(method_temp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes()))); |
141 __ verify_oop(method_temp); |
|
142 __ ldr(method_temp, Address(method_temp, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes()))); |
142 |
143 |
143 if (VerifyMethodHandles && !for_compiler_entry) { |
144 if (VerifyMethodHandles && !for_compiler_entry) { |
144 // make sure recv is already on stack |
145 // make sure recv is already on stack |
145 __ ldr(temp2, Address(method_temp, Method::const_offset())); |
146 __ ldr(temp2, Address(method_temp, Method::const_offset())); |
146 __ load_sized_value(temp2, |
147 __ load_sized_value(temp2, |
280 "MemberName required for invokeVirtual etc."); |
281 "MemberName required for invokeVirtual etc."); |
281 } |
282 } |
282 |
283 |
283 Address member_clazz( member_reg, NONZERO(java_lang_invoke_MemberName::clazz_offset_in_bytes())); |
284 Address member_clazz( member_reg, NONZERO(java_lang_invoke_MemberName::clazz_offset_in_bytes())); |
284 Address member_vmindex( member_reg, NONZERO(java_lang_invoke_MemberName::vmindex_offset_in_bytes())); |
285 Address member_vmindex( member_reg, NONZERO(java_lang_invoke_MemberName::vmindex_offset_in_bytes())); |
285 Address member_vmtarget( member_reg, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes())); |
286 Address member_vmtarget( member_reg, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes())); |
|
287 Address vmtarget_method( rmethod, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes())); |
286 |
288 |
287 Register temp1_recv_klass = temp1; |
289 Register temp1_recv_klass = temp1; |
288 if (iid != vmIntrinsics::_linkToStatic) { |
290 if (iid != vmIntrinsics::_linkToStatic) { |
289 __ verify_oop(receiver_reg); |
291 __ verify_oop(receiver_reg); |
290 if (iid == vmIntrinsics::_linkToSpecial) { |
292 if (iid == vmIntrinsics::_linkToSpecial) { |
333 switch (iid) { |
335 switch (iid) { |
334 case vmIntrinsics::_linkToSpecial: |
336 case vmIntrinsics::_linkToSpecial: |
335 if (VerifyMethodHandles) { |
337 if (VerifyMethodHandles) { |
336 verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3); |
338 verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3); |
337 } |
339 } |
338 __ ldr(rmethod, member_vmtarget); |
340 __ load_heap_oop(rmethod, member_vmtarget); |
|
341 __ ldr(rmethod, vmtarget_method); |
339 break; |
342 break; |
340 |
343 |
341 case vmIntrinsics::_linkToStatic: |
344 case vmIntrinsics::_linkToStatic: |
342 if (VerifyMethodHandles) { |
345 if (VerifyMethodHandles) { |
343 verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3); |
346 verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3); |
344 } |
347 } |
345 __ ldr(rmethod, member_vmtarget); |
348 __ load_heap_oop(rmethod, member_vmtarget); |
|
349 __ ldr(rmethod, vmtarget_method); |
346 break; |
350 break; |
347 |
351 |
348 case vmIntrinsics::_linkToVirtual: |
352 case vmIntrinsics::_linkToVirtual: |
349 { |
353 { |
350 // same as TemplateTable::invokevirtual, |
354 // same as TemplateTable::invokevirtual, |