リンクレジスタ
表示
リンクレジスタは、関数コール時にリターンアドレスを保持するレジスタである。この方式は、リターンアドレスをコールスタックに保持する古典的な方式と比べ、メモリの読み書きを行わなくて済む点で効率的である。
リンクレジスタはPowerPC、ARM、PA-RISCといった多くの命令セットアーキテクチャで使われている。また、他のアーキテクチャでも名称は異なるが同じ目的のものをもつものもある。例えばSPARCにおけるoutput register 7 (o7)がそれである。[1]
リンクレジスタを使うことで葉の(末端の)サブルーチンへの呼び出しを高速化することができる。葉でないサブルーチンの場合でも、リターンアドレスをレジスタで渡すことはサンク(en:Thunk)(引数を整形して他の関数を呼び出すためだけの関数)のコードの効率化につながる。そのほかのサブルーチンも、リンクレジスタと他の呼び出し先使用レジスタとをまとめて一度に保存することでメモリ書き込みが効率化される。
例えばARMでSTMDB SP!, {R4-R7, LR}
のコードは1命令でレジスタ4-7とリンクレジスタLRを合わせてパイプライン化してスタックにpushする。
参考文献
[編集]- ^ “RTEMS SPARC Applications Supplement” (May 2000). 2013年4月19日閲覧。