hotspot/src/cpu/x86/vm/interp_masm_x86_64.cpp
void InterpreterMacroAssembler::call_VM_base(Register oop_result,
Register java_thread,
Register last_java_sp,
address entry_point,
int number_of_arguments,
bool check_exceptions) {
{- -------------------------------------------
(1) コード生成:
「MacroAssembler::call_VM_base() が生成するコードによって呼び出しを行う.
(なお, 以下の関数が生成するコードにより,
呼び出しの前後で r13(bcp) や r14(locals)の待避復帰も行っている.
InterpreterMacroAssembler::save_bcp(),
InterpreterMacroAssembler::restore_bcp(),
InterpreterMacroAssembler::restore_locals())
(なおコメントによると,
restore_locals() は省略できるかもしれないが, 元が重いからどのみち差なんか出ないよ,
とのこと)
---------------------------------------- -}
// interpreter specific
//
// Note: Could avoid restoring locals ptr (callee saved) - however doesn't
// really make a difference for these runtime calls, since they are
// slow anyway. Btw., bcp must be saved/restored since it may change
// due to GC.
// assert(java_thread == noreg , "not expecting a precomputed java thread");
save_bcp();
#ifdef ASSERT
{
Label L;
cmpptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD);
jcc(Assembler::equal, L);
stop("InterpreterMacroAssembler::call_VM_leaf_base:"
" last_sp != NULL");
bind(L);
}
#endif /* ASSERT */
// super call
MacroAssembler::call_VM_base(oop_result, noreg, last_java_sp,
entry_point, number_of_arguments,
check_exceptions);
// interpreter specific
restore_bcp();
restore_locals();
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.