Top


定義場所(file name)

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

名前(function name)

void TemplateTable::ldiv() {

本体部(body)

  {- -------------------------------------------
  (1) (assert) (See: TemplateTable::transition())
      ---------------------------------------- -}

      transition(ltos, ltos);

  {- -------------------------------------------
  (1) コード生成:
      「dividend を O2 レジスタにロード」
      ---------------------------------------- -}

      // check for zero
      __ pop_l(O2);

  {- -------------------------------------------
  (1) コード生成:
      「divisor(Otos_i)が 0 かどうかを確認する.
        0 の場合は ArithmeticException (See: [here](no3059cDE.html) for details).
        そうでなければ, 以下のどちらかを行うことで除算計算を実施.
        * 64bit の場合
          sdivx 命令を実行
        * 32bit の場合
          SharedRuntime::ldiv() を呼び出す               」
      ---------------------------------------- -}

    #ifdef _LP64
      __ tst(Otos_l);
      __ throw_if_not_xcc( Assembler::notZero, Interpreter::_throw_ArithmeticException_entry, G3_scratch);
      __ sdivx(O2, Otos_l, Otos_l);
    #else
      __ orcc(Otos_l1, Otos_l2, G0);
      __ throw_if_not_icc( Assembler::notZero, Interpreter::_throw_ArithmeticException_entry, G3_scratch);
      __ call_VM_leaf(Lscratch, CAST_FROM_FN_PTR(address, SharedRuntime::ldiv));
    #endif
    }

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