Top


定義場所(file name)

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

説明(description)

// The Rcache and index registers must be set before call

名前(function name)

void TemplateTable::load_field_cp_cache_entry(Register obj,
                                              Register cache,
                                              Register index,
                                              Register off,
                                              Register flags,
                                              bool is_static = false) {

本体部(body)

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

      assert_different_registers(cache, index, flags, off);

  {- -------------------------------------------
  (1) (変数宣言など)
      ---------------------------------------- -}

      ByteSize cp_base_offset = constantPoolCacheOopDesc::base_offset();

  {- -------------------------------------------
  (1) コード生成:
      「CPcache エントリ中から, 以下の情報をそれぞれ取得して, レジスタに格納する.
        * _flags 情報 -> off 引数で指定されたレジスタ
        * _f2 情報 -> flags 引数で指定されたレジスタ
        * _f1 情報 -> obj 引数で指定されたレジスタ (ただしこれは is_static が true の場合のみ取得)」
      ---------------------------------------- -}

      // Field offset
      __ movptr(off, Address(cache, index, Address::times_8,
                             in_bytes(cp_base_offset +
                                      ConstantPoolCacheEntry::f2_offset())));
      // Flags
      __ movl(flags, Address(cache, index, Address::times_8,
                             in_bytes(cp_base_offset +
                                      ConstantPoolCacheEntry::flags_offset())));

      // klass overwrite register
      if (is_static) {
        __ movptr(obj, Address(cache, index, Address::times_8,
                               in_bytes(cp_base_offset +
                                        ConstantPoolCacheEntry::f1_offset())));
      }
    }

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