Top


定義場所(file name)

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

名前(function name)

void InterpreterMacroAssembler::get_cache_and_index_at_bcp(Register cache, Register tmp,
                                                           int bcp_offset, size_t index_size) {

本体部(body)

  {- -------------------------------------------
  (1) (assert)
      ---------------------------------------- -}

      assert(bcp_offset > 0, "bcp is still pointing to start of bytecode");
      assert_different_registers(cache, tmp);
      assert_not_delayed();

  {- -------------------------------------------
  (1) コード生成:
      「InterpreterMacroAssembler::get_cache_index_at_bcp() が生成したコードで, 
        現在箇所のバイトコードが参照している index を取得する (これは, バイトコード命令中に埋め込まれている情報を取ってくるだけ).
        その後, それをシフトした後で LcpoolCache に足し込むことで, 目的の CPCache エントリのアドレスを算出する.

       (算出したアドレスは, cache 引数で指定されたレジスタに格納される)」
      ---------------------------------------- -}

      get_cache_index_at_bcp(cache, tmp, bcp_offset, index_size);
      // convert from field index to ConstantPoolCacheEntry index and from
      // word index to byte offset
      sll(tmp, exact_log2(in_words(ConstantPoolCacheEntry::size()) * BytesPerWord), tmp);
      add(LcpoolCache, tmp, cache);
    }

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