hotspot/src/cpu/aarch64/vm/methodHandles_aarch64.cpp
changeset 46505 fd4bc78630b1
parent 46329 53ccc37bda19
equal deleted inserted replaced
46504:38048d4d20e7 46505:fd4bc78630b1
   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,