hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp
void TemplateTable::ret() {
{- -------------------------------------------
(1) (assert) (See: TemplateTable::transition())
---------------------------------------- -}
transition(vtos, vtos);
{- -------------------------------------------
(1) コード生成:
「リターン先の bci を Otos_i レジスタにロードする」
---------------------------------------- -}
locals_index(G3_scratch);
__ access_local_returnAddress(G3_scratch, Otos_i);
// Otos_i contains the bci, compute the bcp from that
{- -------------------------------------------
(1) (デバッグ用の処理) (#ifdef ASSERT 時にのみ実行)
コード生成: (デバッグ用の処理)
---------------------------------------- -}
#ifdef _LP64
#ifdef ASSERT
// jsr result was labeled as an 'itos' not an 'atos' because we cannot GC
// the result. The return address (really a BCI) was stored with an
// 'astore' because JVM specs claim it's a pointer-sized thing. Hence in
// the 64-bit build the 32-bit BCI is actually in the low bits of a 64-bit
// loaded value.
{ Label zzz ;
__ set (65536, G3_scratch) ;
__ cmp (Otos_i, G3_scratch) ;
__ bp( Assembler::lessEqualUnsigned, false, Assembler::xcc, Assembler::pn, zzz);
__ delayed()->nop();
__ stop("BCI is in the wrong register half?");
__ bind (zzz) ;
}
#endif
#endif
{- -------------------------------------------
(1) コード生成: (JIT コンパイラ用のプロファイル情報の取得) (See: [here](no2935fdD.html) for details)
---------------------------------------- -}
__ profile_ret(vtos, Otos_i, G4_scratch);
{- -------------------------------------------
(1) コード生成:
「Otos_i にロード済みの bci 値を (実行メソッドのバイトコードの先頭アドレスに加えることで) bcp に変換し,
結果を Lbcp レジスタにセットする」
---------------------------------------- -}
__ ld_ptr(Lmethod, methodOopDesc::const_offset(), G3_scratch);
__ add(G3_scratch, Otos_i, G3_scratch);
__ add(G3_scratch, in_bytes(constMethodOopDesc::codes_offset()), Lbcp);
{- -------------------------------------------
(1) コード生成:
「dispatch_next() が生成するコードで,
次のバイトコードに対応するテンプレートへとジャンプする」
---------------------------------------- -}
__ dispatch_next(vtos);
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.