hotspot/src/cpu/x86/vm/methodHandles_x86.cpp
changeset 46505 fd4bc78630b1
parent 46329 53ccc37bda19
child 46560 388aa8d67c80
equal deleted inserted replaced
46504:38048d4d20e7 46505:fd4bc78630b1
   167   __ verify_oop(recv);
   167   __ verify_oop(recv);
   168   __ load_heap_oop(method_temp, Address(recv, NONZERO(java_lang_invoke_MethodHandle::form_offset_in_bytes())));
   168   __ load_heap_oop(method_temp, Address(recv, NONZERO(java_lang_invoke_MethodHandle::form_offset_in_bytes())));
   169   __ verify_oop(method_temp);
   169   __ verify_oop(method_temp);
   170   __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes())));
   170   __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes())));
   171   __ verify_oop(method_temp);
   171   __ verify_oop(method_temp);
   172   // the following assumes that a Method* is normally compressed in the vmtarget field:
   172   __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes())));
   173   __ movptr(method_temp, Address(method_temp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes())));
   173   __ verify_oop(method_temp);
       
   174   __ movptr(method_temp, Address(method_temp, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes())));
   174 
   175 
   175   if (VerifyMethodHandles && !for_compiler_entry) {
   176   if (VerifyMethodHandles && !for_compiler_entry) {
   176     // make sure recv is already on stack
   177     // make sure recv is already on stack
   177     __ movptr(temp2, Address(method_temp, Method::const_offset()));
   178     __ movptr(temp2, Address(method_temp, Method::const_offset()));
   178     __ load_sized_value(temp2,
   179     __ load_sized_value(temp2,
   329                    "MemberName required for invokeVirtual etc.");
   330                    "MemberName required for invokeVirtual etc.");
   330     }
   331     }
   331 
   332 
   332     Address member_clazz(    member_reg, NONZERO(java_lang_invoke_MemberName::clazz_offset_in_bytes()));
   333     Address member_clazz(    member_reg, NONZERO(java_lang_invoke_MemberName::clazz_offset_in_bytes()));
   333     Address member_vmindex(  member_reg, NONZERO(java_lang_invoke_MemberName::vmindex_offset_in_bytes()));
   334     Address member_vmindex(  member_reg, NONZERO(java_lang_invoke_MemberName::vmindex_offset_in_bytes()));
   334     Address member_vmtarget( member_reg, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes()));
   335     Address member_vmtarget( member_reg, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes()));
       
   336     Address vmtarget_method( rbx_method, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes()));
   335 
   337 
   336     Register temp1_recv_klass = temp1;
   338     Register temp1_recv_klass = temp1;
   337     if (iid != vmIntrinsics::_linkToStatic) {
   339     if (iid != vmIntrinsics::_linkToStatic) {
   338       __ verify_oop(receiver_reg);
   340       __ verify_oop(receiver_reg);
   339       if (iid == vmIntrinsics::_linkToSpecial) {
   341       if (iid == vmIntrinsics::_linkToSpecial) {
   381     switch (iid) {
   383     switch (iid) {
   382     case vmIntrinsics::_linkToSpecial:
   384     case vmIntrinsics::_linkToSpecial:
   383       if (VerifyMethodHandles) {
   385       if (VerifyMethodHandles) {
   384         verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3);
   386         verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3);
   385       }
   387       }
   386       __ movptr(rbx_method, member_vmtarget);
   388       __ load_heap_oop(rbx_method, member_vmtarget);
       
   389       __ movptr(rbx_method, vmtarget_method);
   387       break;
   390       break;
   388 
   391 
   389     case vmIntrinsics::_linkToStatic:
   392     case vmIntrinsics::_linkToStatic:
   390       if (VerifyMethodHandles) {
   393       if (VerifyMethodHandles) {
   391         verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3);
   394         verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3);
   392       }
   395       }
   393       __ movptr(rbx_method, member_vmtarget);
   396       __ load_heap_oop(rbx_method, member_vmtarget);
       
   397       __ movptr(rbx_method, vmtarget_method);
   394       break;
   398       break;
   395 
   399 
   396     case vmIntrinsics::_linkToVirtual:
   400     case vmIntrinsics::_linkToVirtual:
   397     {
   401     {
   398       // same as TemplateTable::invokevirtual,
   402       // same as TemplateTable::invokevirtual,