172 __ verify_oop(recv); |
172 __ verify_oop(recv); |
173 __ load_heap_oop_not_null(method_temp, NONZERO(java_lang_invoke_MethodHandle::form_offset_in_bytes()), recv, temp2); |
173 __ load_heap_oop_not_null(method_temp, NONZERO(java_lang_invoke_MethodHandle::form_offset_in_bytes()), recv, temp2); |
174 __ verify_oop(method_temp); |
174 __ verify_oop(method_temp); |
175 __ load_heap_oop_not_null(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes()), method_temp, temp2); |
175 __ load_heap_oop_not_null(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes()), method_temp, temp2); |
176 __ verify_oop(method_temp); |
176 __ verify_oop(method_temp); |
177 // The following assumes that a Method* is normally compressed in the vmtarget field: |
177 __ load_heap_oop_not_null(method_temp, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes()), method_temp); |
178 __ ld(method_temp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes()), method_temp); |
178 __ verify_oop(method_temp); |
|
179 __ ld(method_temp, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes()), method_temp); |
179 |
180 |
180 if (VerifyMethodHandles && !for_compiler_entry) { |
181 if (VerifyMethodHandles && !for_compiler_entry) { |
181 // Make sure recv is already on stack. |
182 // Make sure recv is already on stack. |
182 __ ld(temp2, in_bytes(Method::const_offset()), method_temp); |
183 __ ld(temp2, in_bytes(Method::const_offset()), method_temp); |
183 __ load_sized_value(temp2, in_bytes(ConstMethod::size_of_parameters_offset()), temp2, |
184 __ load_sized_value(temp2, in_bytes(ConstMethod::size_of_parameters_offset()), temp2, |
359 switch (iid) { |
360 switch (iid) { |
360 case vmIntrinsics::_linkToSpecial: |
361 case vmIntrinsics::_linkToSpecial: |
361 if (VerifyMethodHandles) { |
362 if (VerifyMethodHandles) { |
362 verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp2); |
363 verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp2); |
363 } |
364 } |
364 __ ld(R19_method, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes()), member_reg); |
365 __ load_heap_oop(member_reg, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes()), member_reg); |
|
366 __ ld(R19_method, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes()), member_reg); |
365 break; |
367 break; |
366 |
368 |
367 case vmIntrinsics::_linkToStatic: |
369 case vmIntrinsics::_linkToStatic: |
368 if (VerifyMethodHandles) { |
370 if (VerifyMethodHandles) { |
369 verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp2); |
371 verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp2); |
370 } |
372 } |
371 __ ld(R19_method, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes()), member_reg); |
373 __ load_heap_oop(member_reg, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes()), member_reg); |
|
374 __ ld(R19_method, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes()), member_reg); |
372 break; |
375 break; |
373 |
376 |
374 case vmIntrinsics::_linkToVirtual: |
377 case vmIntrinsics::_linkToVirtual: |
375 { |
378 { |
376 // same as TemplateTable::invokevirtual, |
379 // same as TemplateTable::invokevirtual, |