Top


定義場所(file name)

hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp

名前(function name)

address TemplateInterpreterGenerator::generate_earlyret_entry_for(TosState state) {

本体部(body)

  {- -------------------------------------------
  (1) (ここからが生成するコードの始まり)
      ---------------------------------------- -}

      address entry = __ pc();

  {- -------------------------------------------
  (1) コード生成:
      「r13(bcp)や r14(locals) を元の値に復帰させる」
      ---------------------------------------- -}

      __ restore_bcp();
      __ restore_locals();

  {- -------------------------------------------
  (1) コード生成:
      「オペランドスタック("expression stack")を空にする.」
      ---------------------------------------- -}

      __ empty_expression_stack();

  {- -------------------------------------------
  (1) コード生成:
      「ForceEarlyReturn*() で指定された返り値を TOS にロードする.」
      ---------------------------------------- -}

      __ load_earlyret_value(state);

  {- -------------------------------------------
  (1) コード生成:
      「カレントスレッドに対応する JvmtiThreadState オブジェクトを取得し,  
        その JvmtiThreadState::_earlyret_state フィールドをクリアする.」
      ---------------------------------------- -}

      __ movptr(rdx, Address(r15_thread, JavaThread::jvmti_thread_state_offset()));
      Address cond_addr(rdx, JvmtiThreadState::earlyret_state_offset());

      // Clear the earlyret state
      __ movl(cond_addr, JvmtiThreadState::earlyret_inactive);

  {- -------------------------------------------
  (1) コード生成:
      「InterpreterMacroAssembler::remove_activation() が生成するコードで
        スタックフレームを破棄する.
        synchronized method であればロックの解除も行う」
      ---------------------------------------- -}

      __ remove_activation(state, rsi,
                           false, /* throw_monitor_exception */
                           false, /* install_monitor_exception */
                           true); /* notify_jvmdi */

  {- -------------------------------------------
  (1) コード生成:
      「return address へとジャンプすることで, 
       ForceEarlyReturn*() 対象になったフレームから呼び出し元へとリターンさせる.」
      ---------------------------------------- -}

      __ jmp(rsi);

  {- -------------------------------------------
  (1) 以上で生成したコードの先頭アドレスをリターン.
      ---------------------------------------- -}

      return entry;
    } // end of ForceEarlyReturn support

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.