hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp
void InterpreterMacroAssembler::get_cache_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");
{- -------------------------------------------
(1) コード生成:
「バイトコード命令中に埋め込まれている index 情報を取得する」
(なお, 引数で指定された大きさ(index_size) に応じて, 適切な大きさ分だけロードするコードを生成)
---------------------------------------- -}
if (index_size == sizeof(u2)) {
get_2_byte_integer_at_bcp(bcp_offset, cache, tmp, Unsigned);
} else if (index_size == sizeof(u4)) {
assert(EnableInvokeDynamic, "giant index used only for JSR 292");
get_4_byte_integer_at_bcp(bcp_offset, cache, tmp);
assert(constantPoolCacheOopDesc::decode_secondary_index(~123) == 123, "else change next line");
xor3(tmp, -1, tmp); // convert to plain index
} else if (index_size == sizeof(u1)) {
assert(EnableInvokeDynamic, "tiny index used only for JSR 292");
ldub(Lbcp, bcp_offset, tmp);
} else {
ShouldNotReachHere();
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.