src/cpu/x86/vm/methodHandles_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8068945-8u-patched Sdiff src/cpu/x86/vm

src/cpu/x86/vm/methodHandles_x86.cpp

Print this page
rev 7386 : 8068945: Use RBP register as proper frame pointer in JIT compiled code on x86
Summary: Introduce the PreserveFramePointer flag to control if RBP is used as the frame pointer or as a general purpose register.
Reviewed-by: kvn, roland, dlong, enevill, shade


 356         Register temp2_defc = temp2;
 357         __ load_heap_oop(temp2_defc, member_clazz);
 358         load_klass_from_Class(_masm, temp2_defc);
 359         __ verify_klass_ptr(temp2_defc);
 360         __ check_klass_subtype(temp1_recv_klass, temp2_defc, temp3, L_ok);
 361         // If we get here, the type check failed!
 362         __ STOP("receiver class disagrees with MemberName.clazz");
 363         __ bind(L_ok);
 364       }
 365       BLOCK_COMMENT("} check_receiver");
 366     }
 367     if (iid == vmIntrinsics::_linkToSpecial ||
 368         iid == vmIntrinsics::_linkToStatic) {
 369       DEBUG_ONLY(temp1_recv_klass = noreg);  // these guys didn't load the recv_klass
 370     }
 371 
 372     // Live registers at this point:
 373     //  member_reg - MemberName that was the trailing argument
 374     //  temp1_recv_klass - klass of stacked receiver, if needed
 375     //  rsi/r13 - interpreter linkage (if interpreted)
 376     //  rcx, rdx, rsi, rdi, r8, r8 - compiler arguments (if compiled)
 377 
 378     Label L_incompatible_class_change_error;
 379     switch (iid) {
 380     case vmIntrinsics::_linkToSpecial:
 381       if (VerifyMethodHandles) {
 382         verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3);
 383       }
 384       __ movptr(rbx_method, member_vmtarget);
 385       break;
 386 
 387     case vmIntrinsics::_linkToStatic:
 388       if (VerifyMethodHandles) {
 389         verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3);
 390       }
 391       __ movptr(rbx_method, member_vmtarget);
 392       break;
 393 
 394     case vmIntrinsics::_linkToVirtual:
 395     {
 396       // same as TemplateTable::invokevirtual,




 356         Register temp2_defc = temp2;
 357         __ load_heap_oop(temp2_defc, member_clazz);
 358         load_klass_from_Class(_masm, temp2_defc);
 359         __ verify_klass_ptr(temp2_defc);
 360         __ check_klass_subtype(temp1_recv_klass, temp2_defc, temp3, L_ok);
 361         // If we get here, the type check failed!
 362         __ STOP("receiver class disagrees with MemberName.clazz");
 363         __ bind(L_ok);
 364       }
 365       BLOCK_COMMENT("} check_receiver");
 366     }
 367     if (iid == vmIntrinsics::_linkToSpecial ||
 368         iid == vmIntrinsics::_linkToStatic) {
 369       DEBUG_ONLY(temp1_recv_klass = noreg);  // these guys didn't load the recv_klass
 370     }
 371 
 372     // Live registers at this point:
 373     //  member_reg - MemberName that was the trailing argument
 374     //  temp1_recv_klass - klass of stacked receiver, if needed
 375     //  rsi/r13 - interpreter linkage (if interpreted)
 376     //  rcx, rdx, rsi, rdi, r8 - compiler arguments (if compiled)
 377 
 378     Label L_incompatible_class_change_error;
 379     switch (iid) {
 380     case vmIntrinsics::_linkToSpecial:
 381       if (VerifyMethodHandles) {
 382         verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3);
 383       }
 384       __ movptr(rbx_method, member_vmtarget);
 385       break;
 386 
 387     case vmIntrinsics::_linkToStatic:
 388       if (VerifyMethodHandles) {
 389         verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3);
 390       }
 391       __ movptr(rbx_method, member_vmtarget);
 392       break;
 393 
 394     case vmIntrinsics::_linkToVirtual:
 395     {
 396       // same as TemplateTable::invokevirtual,


src/cpu/x86/vm/methodHandles_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File