Top


定義場所(file name)

hotspot/src/cpu/sparc/vm/assembler_sparc.cpp

名前(function name)

void MacroAssembler::check_and_forward_exception(Register scratch_reg)
{

本体部(body)

  {- -------------------------------------------
  (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.