hotspot/src/cpu/arm/vm/methodHandles_arm.cpp
changeset 46505 fd4bc78630b1
parent 46329 53ccc37bda19
child 46560 388aa8d67c80
equal deleted inserted replaced
46504:38048d4d20e7 46505:fd4bc78630b1
   155   __ verify_oop(tmp);
   155   __ verify_oop(tmp);
   156 
   156 
   157   __ load_heap_oop(tmp, Address(tmp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes())));
   157   __ load_heap_oop(tmp, Address(tmp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes())));
   158   __ verify_oop(tmp);
   158   __ verify_oop(tmp);
   159 
   159 
   160   // the following assumes that a Method* is normally compressed in the vmtarget field:
   160   __ load_heap_oop(Rmethod, Address(tmp, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes())));
   161   __ ldr(Rmethod, Address(tmp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes())));
   161   __ verify_oop(Rmethod);
       
   162   __ ldr(Rmethod, Address(Rmethod, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes())));
   162 
   163 
   163   if (VerifyMethodHandles && !for_compiler_entry) {
   164   if (VerifyMethodHandles && !for_compiler_entry) {
   164     // make sure recv is already on stack
   165     // make sure recv is already on stack
   165     __ ldr(tmp, Address(Rmethod, Method::const_offset()));
   166     __ ldr(tmp, Address(Rmethod, Method::const_offset()));
   166     __ load_sized_value(tmp,
   167     __ load_sized_value(tmp,
   318                    "MemberName required for invokeVirtual etc.");
   319                    "MemberName required for invokeVirtual etc.");
   319     }
   320     }
   320 
   321 
   321     Address member_clazz(   member_reg, NONZERO(java_lang_invoke_MemberName::clazz_offset_in_bytes()));
   322     Address member_clazz(   member_reg, NONZERO(java_lang_invoke_MemberName::clazz_offset_in_bytes()));
   322     Address member_vmindex( member_reg, NONZERO(java_lang_invoke_MemberName::vmindex_offset_in_bytes()));
   323     Address member_vmindex( member_reg, NONZERO(java_lang_invoke_MemberName::vmindex_offset_in_bytes()));
   323     Address member_vmtarget(member_reg, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes()));
   324     Address member_vmtarget(member_reg, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes()));
       
   325     Address vmtarget_method(Rmethod, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes()));
   324 
   326 
   325     Register temp1_recv_klass = temp1;
   327     Register temp1_recv_klass = temp1;
   326     if (iid != vmIntrinsics::_linkToStatic) {
   328     if (iid != vmIntrinsics::_linkToStatic) {
   327       if (iid == vmIntrinsics::_linkToSpecial) {
   329       if (iid == vmIntrinsics::_linkToSpecial) {
   328         // Don't actually load the klass; just null-check the receiver.
   330         // Don't actually load the klass; just null-check the receiver.
   373     switch (iid) {
   375     switch (iid) {
   374     case vmIntrinsics::_linkToSpecial:
   376     case vmIntrinsics::_linkToSpecial:
   375       if (VerifyMethodHandles) {
   377       if (VerifyMethodHandles) {
   376         verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3);
   378         verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3);
   377       }
   379       }
   378       __ ldr(Rmethod, member_vmtarget);
   380       __ load_heap_oop(Rmethod, member_vmtarget);
       
   381       __ ldr(Rmethod, vmtarget_method);
   379       break;
   382       break;
   380 
   383 
   381     case vmIntrinsics::_linkToStatic:
   384     case vmIntrinsics::_linkToStatic:
   382       if (VerifyMethodHandles) {
   385       if (VerifyMethodHandles) {
   383         verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3);
   386         verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3);
   384       }
   387       }
   385       __ ldr(Rmethod, member_vmtarget);
   388       __ load_heap_oop(Rmethod, member_vmtarget);
       
   389       __ ldr(Rmethod, vmtarget_method);
       
   390       break;
   386       break;
   391       break;
   387 
   392 
   388     case vmIntrinsics::_linkToVirtual:
   393     case vmIntrinsics::_linkToVirtual:
   389     {
   394     {
   390       // same as TemplateTable::invokevirtual,
   395       // same as TemplateTable::invokevirtual,