< prev index next >

src/hotspot/cpu/x86/methodHandles_x86.cpp

Print this page
rev 50081 : [mq]: primitives2.patch

*** 165,186 **** assert(method_temp == rbx, "required register for loading method"); //NOT_PRODUCT({ FlagSetting fs(TraceMethodHandles, true); trace_method_handle(_masm, "LZMH"); }); // Load the invoker, as MH -> MH.form -> LF.vmentry - __ resolve_for_read(0, recv); __ verify_oop(recv); __ load_heap_oop(method_temp, Address(recv, NONZERO(java_lang_invoke_MethodHandle::form_offset_in_bytes())), temp2); - __ resolve_for_read(0, method_temp); __ verify_oop(method_temp); __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes())), temp2); - __ resolve_for_read(0, method_temp); __ verify_oop(method_temp); __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes())), temp2); - __ resolve_for_read(OOP_NOT_NULL, method_temp); __ verify_oop(method_temp); ! __ movptr(method_temp, Address(method_temp, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes()))); if (VerifyMethodHandles && !for_compiler_entry) { // make sure recv is already on stack __ movptr(temp2, Address(method_temp, Method::const_offset())); __ load_sized_value(temp2, --- 165,184 ---- assert(method_temp == rbx, "required register for loading method"); //NOT_PRODUCT({ FlagSetting fs(TraceMethodHandles, true); trace_method_handle(_masm, "LZMH"); }); // Load the invoker, as MH -> MH.form -> LF.vmentry __ verify_oop(recv); __ load_heap_oop(method_temp, Address(recv, NONZERO(java_lang_invoke_MethodHandle::form_offset_in_bytes())), temp2); __ verify_oop(method_temp); __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes())), temp2); __ verify_oop(method_temp); __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_MemberName::method_offset_in_bytes())), temp2); __ verify_oop(method_temp); ! __ access_load_at(T_ADDRESS, IN_HEAP, method_temp, ! Address(method_temp, NONZERO(java_lang_invoke_ResolvedMethodName::vmtarget_offset_in_bytes())), ! noreg, noreg); if (VerifyMethodHandles && !for_compiler_entry) { // make sure recv is already on stack __ movptr(temp2, Address(method_temp, Method::const_offset())); __ load_sized_value(temp2,
*** 385,413 **** // member_reg - MemberName that was the trailing argument // temp1_recv_klass - klass of stacked receiver, if needed // rsi/r13 - interpreter linkage (if interpreted) // rcx, rdx, rsi, rdi, r8 - compiler arguments (if compiled) - __ resolve_for_read(0, member_reg); Label L_incompatible_class_change_error; switch (iid) { case vmIntrinsics::_linkToSpecial: if (VerifyMethodHandles) { verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3); } __ load_heap_oop(rbx_method, member_vmtarget); ! __ resolve_for_read(0, rbx_method); ! __ movptr(rbx_method, vmtarget_method); break; case vmIntrinsics::_linkToStatic: if (VerifyMethodHandles) { verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3); } __ load_heap_oop(rbx_method, member_vmtarget); ! __ resolve_for_read(0, rbx_method); ! __ movptr(rbx_method, vmtarget_method); break; case vmIntrinsics::_linkToVirtual: { // same as TemplateTable::invokevirtual, --- 383,408 ---- // member_reg - MemberName that was the trailing argument // temp1_recv_klass - klass of stacked receiver, if needed // rsi/r13 - interpreter linkage (if interpreted) // rcx, rdx, rsi, rdi, r8 - compiler arguments (if compiled) Label L_incompatible_class_change_error; switch (iid) { case vmIntrinsics::_linkToSpecial: if (VerifyMethodHandles) { verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3); } __ load_heap_oop(rbx_method, member_vmtarget); ! __ access_load_at(T_ADDRESS, IN_HEAP, rbx_method, vmtarget_method, noreg, noreg); break; case vmIntrinsics::_linkToStatic: if (VerifyMethodHandles) { verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3); } __ load_heap_oop(rbx_method, member_vmtarget); ! __ access_load_at(T_ADDRESS, IN_HEAP, rbx_method, vmtarget_method, noreg, noreg); break; case vmIntrinsics::_linkToVirtual: { // same as TemplateTable::invokevirtual,
*** 417,427 **** verify_ref_kind(_masm, JVM_REF_invokeVirtual, member_reg, temp3); } // pick out the vtable index from the MemberName, and then we can discard it: Register temp2_index = temp2; ! __ movptr(temp2_index, member_vmindex); if (VerifyMethodHandles) { Label L_index_ok; __ cmpl(temp2_index, 0); __ jcc(Assembler::greaterEqual, L_index_ok); --- 412,422 ---- verify_ref_kind(_masm, JVM_REF_invokeVirtual, member_reg, temp3); } // pick out the vtable index from the MemberName, and then we can discard it: Register temp2_index = temp2; ! __ access_load_at(T_ADDRESS, IN_HEAP, temp2_index, member_vmindex, noreg, noreg); if (VerifyMethodHandles) { Label L_index_ok; __ cmpl(temp2_index, 0); __ jcc(Assembler::greaterEqual, L_index_ok);
*** 449,459 **** __ load_heap_oop(temp3_intf, member_clazz); load_klass_from_Class(_masm, temp3_intf); __ verify_klass_ptr(temp3_intf); Register rbx_index = rbx_method; ! __ movptr(rbx_index, member_vmindex); if (VerifyMethodHandles) { Label L; __ cmpl(rbx_index, 0); __ jcc(Assembler::greaterEqual, L); __ STOP("invalid vtable index for MH.invokeInterface"); --- 444,454 ---- __ load_heap_oop(temp3_intf, member_clazz); load_klass_from_Class(_masm, temp3_intf); __ verify_klass_ptr(temp3_intf); Register rbx_index = rbx_method; ! __ access_load_at(T_ADDRESS, IN_HEAP, rbx_index, member_vmindex, noreg, noreg); if (VerifyMethodHandles) { Label L; __ cmpl(rbx_index, 0); __ jcc(Assembler::greaterEqual, L); __ STOP("invalid vtable index for MH.invokeInterface");
< prev index next >