Top


定義場所(file name)

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

名前(function name)

address TemplateInterpreterGenerator::generate_StackOverflowError_handler() {

本体部(body)

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

      address entry = __ pc();

  {- -------------------------------------------
  (1) (デバッグ用の処理) (#ifdef ASSERT 時にのみ実行)
      コード生成: (デバッグ用の処理)
      ---------------------------------------- -}

    #ifdef ASSERT
      {
        Label L;
        __ lea(rax, Address(rbp,
                            frame::interpreter_frame_monitor_block_top_offset *
                            wordSize));
        __ cmpptr(rax, rsp); // rax = maximal rsp for current rbp (stack
                             // grows negative)
        __ jcc(Assembler::aboveEqual, L); // check if frame is complete
        __ stop ("interpreter frame not set up");
        __ bind(L);
      }
    #endif // ASSERT

  {- -------------------------------------------
  (1) #TODO
      ---------------------------------------- -}

      // Restore bcp under the assumption that the current frame is still
      // interpreted
      __ restore_bcp();

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

      // expression stack must be empty before entering the VM if an
      // exception happened
      __ empty_expression_stack();

  {- -------------------------------------------
  (1) コード生成:
      「InterpreterRuntime::throw_StackOverflowError() を呼び出す.」
      ---------------------------------------- -}

      // throw exception
      __ call_VM(noreg,
                 CAST_FROM_FN_PTR(address,
                                  InterpreterRuntime::throw_StackOverflowError));

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

      return entry;
    }

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