竹下世界塔の計算機よもやま話

アクセスカウンタ

zoom RSS 各種プロセッサ Jump&Link命令の調査

<<   作成日時 : 2009/08/03 22:26   >>

ブログ気持玉 0 / トラックバック 1 / コメント 1

 サブルーチンに分岐するときは戻る番地をどこかに覚えておかないといけない。各種プロセッサでどのように扱っているか調べてみた。

・SH-4(32bit命令長)(16bit命令長)(ディレイドスロットあり)
 PR(プロシージャ・レジスタ)というのを持つ。PR=PC+4が入る(ディレイドスロットのため)。JSR/JMP/RET命令で参照。

・ARM(32bit命令長,16bit長のThumb命令あり)
 lr(R14)にPC+4が入る。
 Thumb命令は?→24bit長のThumb命令の組み合わせではPC+3、SWI命令ではPC+1がlrに入る。
例:
bl sub
...
sub:
...
mov pc,r14

・MIPS(32bit命令長,16bit長のMIPS16e命令あり) (ディレイドスロットあり)
 ra($31)リターン・アドレス・レジスタに戻り番地を格納する。JAL,JALX,BGEZAL,BLTZAL,BGEZALL,BLTZALL命令で使用。条件付きサブルーチンコールができる。
 戻り番地はディレイドスロットを考えるとPC+8?→JAL,JALX,BGEZAL,BGEZALL,BLTZAL,BLTZALLではPC+8が格納される。(パターソン&ヘネシー初版コンピュータの構成と設計上巻ではPC+4となっていた。誤記?)
 MIPS16eについてはJALR(PC+4),JALRC(PC+2),JALX(PC+6)はそれぞれ括弧の中の値が格納される。また、JAL命令ではPC+6が格納される。16bit長+ディレイドスロットの実行の有無で面倒になってる。

・SPARC(32bit命令長) (ディレイドスロットあり)
 JMPL命令は指定したレジスタに現PCを格納する。CALL命令は即値ジャンプし、現PCを%r15(%o7)に格納する。両方ともディレイドスロットを使用。サブルーチンから戻るときはjmpl %r15+8,%g0と明示的に戻りアドレスを計算してやる。また、レジスタウィンドウがスタック代わりとなる。

・PowerPC(32bit命令長)
 分岐命令でフラグLK=1のとき、LR(リンクレジスタ)に次の実効アドレス(PC+4)が格納される。bclr命令でサブルーチンから戻る。

・Alpha(32bit命令長)
 JSR/RET/JSR_COROUTINE命令でスタックを使う。スタックがあるの?明示的には持っていないが、PAL命令で操作できる。

・PA-RISC2.0(32bit命令長) (ディレイドスロットあり)
 BLR命令で任意の汎用レジスタにPC+8を格納。サブルーチンから戻るときもBLR命令。指定したレジスタの値に飛び、リンクレジスタをゼロレジスタに指定する。

・IA-64(VLIW)
 BRレジスタを使う。BR0〜BR7まである。
例:
br.call b0=sub
...
sub:
...
br.ret b0

このくらいか。戻り番地の保存方法を分類すると:
・スタックを使うもの ー PCに対するPUSH,POP操作が必要
・専用レジスタに保存 ー 専用レジスタの内容の番地にジャンプする命令が必要
・汎用レジスタにPC+戻り番地を格納 ー 汎用レジスタの内容の番地にジャンプする命令が必要
・汎用レジスタにPCを格納。戻るときに計算 ー 汎用レジスタの内容+即値にジャンプする命令が必要

コンテキストスイッチを考えるとスタックポインタや専用レジスタは保存の対象となる。SH-4は組み込み系だからいらないか。見たところPA-RISC2.0がいちばんスマートなやり方に思える。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(1件)

タイトル (本文) ブログ名/日時
ぼくのかんがえたさいきょうCPU Jump&Link
 前回の各種プロセッサJump&Link命令の調査では、大きく分けて専用レジスタ(または特定の汎用レジスタ)に復帰アドレスを格納するものと汎用レジスタに格納するもの、スタックを使うものに分けられることがわかった。 戻り番地の保存に専用レジスタを使うものは、汎用レジスタへの転送が相互にできる。そしてさらにサブルーチンコールをすることができる。利点は、実行時にPC→専用レジスタへ転送するだけなので実装が楽なことである。 戻り番地の保存に汎用レジスタを使うものは、コンパイラが適切に割り振って... ...続きを見る
竹下世界塔の計算機よもやま話
2009/08/21 21:02

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(1件)

内 容 ニックネーム/日時
SHシリーズは(16bit命令長)(ディレイドスロットあり)だったので修正。
SH-4は2命令を同時にフェッチするので間違えた。
houmei
2009/08/06 22:15

コメントする help

ニックネーム
URL(任意)
本 文




各種プロセッサ Jump&Link命令の調査 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる