hotspot/src/cpu/sparc/vm/assembler_sparc.cpp
void MacroAssembler::check_and_forward_exception(Register scratch_reg)
{
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
Label L;
{- -------------------------------------------
(1) コード生成:
「InterpreterMacroAssembler::check_and_handle_popframe() や
InterpreterMacroAssembler::check_and_handle_earlyret() が生成したコードにより,
JVMTI の PopFrame() や ForceEarlyReturn*() が呼ばれていないかをチェックする.
もし呼ばれていれば, ここでそれぞれの処理ルーチンへジャンプする.」
(See: [here](no3059hIn.html) for details)
---------------------------------------- -}
check_and_handle_popframe(scratch_reg);
check_and_handle_earlyret(scratch_reg);
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
Address exception_addr(G2_thread, Thread::pending_exception_offset());
{- -------------------------------------------
(1) コード生成:
「カレントスレッドの pending_exception フィールドを確認する.
もし 0 でなければ, 例外が発生したということなので
StubRoutines::forward_exception_entry() が指しているコードを呼び出す.
(0 であればこのままフォールスルー)」
(See: [here](no3059uSt.html) for details)
---------------------------------------- -}
ld_ptr(exception_addr, scratch_reg);
br_null(scratch_reg,false,pt,L);
delayed()->nop();
// we use O7 linkage so that forward_exception_entry has the issuing PC
call(StubRoutines::forward_exception_entry(), relocInfo::runtime_call_type);
delayed()->nop();
bind(L);
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.