hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp
void InterpreterMacroAssembler::verify_method_data_pointer() {
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(ProfileInterpreter, "must be profiling interpreter");
{- -------------------------------------------
(1) (デバッグ用の処理) (#ifdef ASSERT 時にのみ実行)
---------------------------------------- -}
#ifdef ASSERT
Label verify_continue;
test_method_data_pointer(verify_continue);
// If the mdp is valid, it will point to a DataLayout header which is
// consistent with the bcp. The converse is highly probable also.
lduh(ImethodDataPtr, in_bytes(DataLayout::bci_offset()), G3_scratch);
ld_ptr(Lmethod, methodOopDesc::const_offset(), O5);
add(G3_scratch, in_bytes(constMethodOopDesc::codes_offset()), G3_scratch);
add(G3_scratch, O5, G3_scratch);
cmp(Lbcp, G3_scratch);
brx(Assembler::equal, false, Assembler::pt, verify_continue);
Register temp_reg = O5;
delayed()->mov(ImethodDataPtr, temp_reg);
// %%% should use call_VM_leaf here?
//call_VM_leaf(noreg, ..., Lmethod, Lbcp, ImethodDataPtr);
save_frame_and_mov(sizeof(jdouble) / wordSize, Lmethod, O0, Lbcp, O1);
Address d_save(FP, -sizeof(jdouble) + STACK_BIAS);
stf(FloatRegisterImpl::D, Ftos_d, d_save);
mov(temp_reg->after_save(), O2);
save_thread(L7_thread_cache);
call(CAST_FROM_FN_PTR(address, InterpreterRuntime::verify_mdp), relocInfo::none);
delayed()->nop();
restore_thread(L7_thread_cache);
ldf(FloatRegisterImpl::D, d_save, Ftos_d);
restore();
bind(verify_continue);
#endif // ASSERT
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.