--- a/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp Fri May 26 13:47:33 2017 -0700
+++ b/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp Sat May 27 09:21:01 2017 -0400
@@ -181,8 +181,9 @@
__ verify_oop(method_temp);
__ load_heap_oop(Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes())), method_temp);
__ verify_oop(method_temp);
- // the following assumes that a Method* is normally compressed in the vmtarget field:
- __ ld_ptr( Address(method_temp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes())), method_temp);
+ __ load_heap_oop(Address(method_temp, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes())), method_temp);
+ __ verify_oop(method_temp);
+ __ ld_ptr( Address(method_temp, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes())), method_temp);
if (VerifyMethodHandles && !for_compiler_entry) {
// make sure recv is already on stack
@@ -332,7 +333,8 @@
Address member_clazz( member_reg, NONZERO(java_lang_invoke_MemberName::clazz_offset_in_bytes()));
Address member_vmindex( member_reg, NONZERO(java_lang_invoke_MemberName::vmindex_offset_in_bytes()));
- Address member_vmtarget( member_reg, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes()));
+ Address member_vmtarget( member_reg, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes()));
+ Address vmtarget_method( G5_method, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes()));
Register temp1_recv_klass = temp1;
if (iid != vmIntrinsics::_linkToStatic) {
@@ -384,14 +386,16 @@
if (VerifyMethodHandles) {
verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp2);
}
- __ ld_ptr(member_vmtarget, G5_method);
+ __ load_heap_oop(member_vmtarget, G5_method);
+ __ ld_ptr(vmtarget_method, G5_method);
break;
case vmIntrinsics::_linkToStatic:
if (VerifyMethodHandles) {
verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp2);
}
- __ ld_ptr(member_vmtarget, G5_method);
+ __ load_heap_oop(member_vmtarget, G5_method);
+ __ ld_ptr(vmtarget_method, G5_method);
break;
case vmIntrinsics::_linkToVirtual: