hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp
void InterpreterMacroAssembler::get_cache_and_index_at_bcp(Register cache, Register tmp,
int bcp_offset, size_t index_size) {
{- -------------------------------------------
(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.