hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp
// The Rcache and index registers must be set before call
void TemplateTable::load_field_cp_cache_entry(Register obj,
Register cache,
Register index,
Register off,
Register flags,
bool is_static = false) {
{- -------------------------------------------
(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.