448 jump_from_method_handle(_masm, R19_method, temp1, temp2, for_compiler_entry);
449
450 if (iid == vmIntrinsics::_linkToInterface) {
451 __ BIND(L_incompatible_class_change_error);
452 __ load_const_optimized(temp1, StubRoutines::throw_IncompatibleClassChangeError_entry());
453 __ mtctr(temp1);
454 __ bctr();
455 }
456 }
457 }
458
459 #ifndef PRODUCT
460 void trace_method_handle_stub(const char* adaptername,
461 oopDesc* mh,
462 intptr_t* entry_sp,
463 intptr_t* saved_regs) {
464
465 bool has_mh = (strstr(adaptername, "/static") == NULL &&
466 strstr(adaptername, "linkTo") == NULL); // static linkers don't have MH
467 const char* mh_reg_name = has_mh ? "R23_method_handle" : "G23";
468 tty->print_cr("MH %s %s="INTPTR_FORMAT " sp=" INTPTR_FORMAT,
469 adaptername, mh_reg_name, p2i(mh), p2i(entry_sp));
470
471 if (Verbose) {
472 tty->print_cr("Registers:");
473 const int abi_offset = frame::abi_reg_args_size / 8;
474 for (int i = R3->encoding(); i <= R12->encoding(); i++) {
475 Register r = as_Register(i);
476 int count = i - R3->encoding();
477 // The registers are stored in reverse order on the stack (by save_volatile_gprs(R1_SP, abi_reg_args_size)).
478 tty->print("%3s=" PTR_FORMAT, r->name(), saved_regs[abi_offset + count]);
479 if ((count + 1) % 4 == 0) {
480 tty->cr();
481 } else {
482 tty->print(", ");
483 }
484 }
485 tty->cr();
486
487 {
488 // dumping last frame with frame::describe
|
448 jump_from_method_handle(_masm, R19_method, temp1, temp2, for_compiler_entry);
449
450 if (iid == vmIntrinsics::_linkToInterface) {
451 __ BIND(L_incompatible_class_change_error);
452 __ load_const_optimized(temp1, StubRoutines::throw_IncompatibleClassChangeError_entry());
453 __ mtctr(temp1);
454 __ bctr();
455 }
456 }
457 }
458
459 #ifndef PRODUCT
460 void trace_method_handle_stub(const char* adaptername,
461 oopDesc* mh,
462 intptr_t* entry_sp,
463 intptr_t* saved_regs) {
464
465 bool has_mh = (strstr(adaptername, "/static") == NULL &&
466 strstr(adaptername, "linkTo") == NULL); // static linkers don't have MH
467 const char* mh_reg_name = has_mh ? "R23_method_handle" : "G23";
468 tty->print_cr("MH %s %s=" INTPTR_FORMAT " sp=" INTPTR_FORMAT,
469 adaptername, mh_reg_name, p2i(mh), p2i(entry_sp));
470
471 if (Verbose) {
472 tty->print_cr("Registers:");
473 const int abi_offset = frame::abi_reg_args_size / 8;
474 for (int i = R3->encoding(); i <= R12->encoding(); i++) {
475 Register r = as_Register(i);
476 int count = i - R3->encoding();
477 // The registers are stored in reverse order on the stack (by save_volatile_gprs(R1_SP, abi_reg_args_size)).
478 tty->print("%3s=" PTR_FORMAT, r->name(), saved_regs[abi_offset + count]);
479 if ((count + 1) % 4 == 0) {
480 tty->cr();
481 } else {
482 tty->print(", ");
483 }
484 }
485 tty->cr();
486
487 {
488 // dumping last frame with frame::describe
|