< prev index next >

src/cpu/x86/vm/interp_masm_x86.cpp

Print this page

        

*** 932,942 **** void InterpreterMacroAssembler::remove_activation( TosState state, Register ret_addr, bool throw_monitor_exception, bool install_monitor_exception, ! bool notify_jvmdi) { // Note: Registers rdx xmm0 may be in use for the // result check if synchronized method Label unlocked, unlock, no_unlock; const Register rthread = LP64_ONLY(r15_thread) NOT_LP64(rcx); --- 932,943 ---- void InterpreterMacroAssembler::remove_activation( TosState state, Register ret_addr, bool throw_monitor_exception, bool install_monitor_exception, ! bool notify_jvmdi, ! bool load_values) { // Note: Registers rdx xmm0 may be in use for the // result check if synchronized method Label unlocked, unlock, no_unlock; const Register rthread = LP64_ONLY(r15_thread) NOT_LP64(rcx);
*** 1100,1109 **** --- 1101,1119 ---- InterpreterRuntime::throw_delayed_StackOverflowError)); should_not_reach_here(); bind(no_reserved_zone_enabling); } + if (load_values) { + // We are returning a value type, load its fields into registers + + super_call_VM_leaf(StubRoutines::load_value_type_fields_in_regs()); + + // call above kills the value in rbx. Reload it. + movptr(rbx, + Address(rbp, frame::interpreter_frame_sender_sp_offset * wordSize)); + } leave(); // remove frame anchor pop(ret_addr); // get return address mov(rsp, rbx); // set sp to sender sp }
< prev index next >