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

アクセスカウンタ

zoom RSS サブルーチン呼び出し:各アーキJump&Linkの分類

<<   作成日時 : 2013/05/13 02:07   >>

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

 サブルーチンを呼び出すときには戻り番地をどこかに保存しておかなければならない。多くは分岐命令の次の命令の位置を格納し、サブルーチンの終わりで格納した番地を取り出してそこにジャンプする。ここでは戻り番地をメモリ上のスタックに格納するものではなくレジスタに保存するものについて調べた。

 無条件で分岐する先を指定する方法は、即値を符号付きの値と見なして現在のPCに加算するPC相対、指定したレジスタの値に分岐するレジスタ間接、即値をそのままアドレス参照させる方法がある。その他、メモリ参照命令(ロード/ストア)で使用するアドレッシングモードでの値を使うもの(SPARC)もある。
 RISCアーキの特徴である固定長命令では、4バイト命令の時下3bitが0でないとトラップが発生する(SPARC)。この下位3bit分を左シフトして扱うもの(PA-RISC)、無視するもの(Alpha)がある。
 また、固定長命令だと長い即値を指定するのは難しいので必然的にPC相対またはレジスタ間接となる。
 戻り番地は任意の汎用レジスタに格納するもの、汎用レジスタのうち特定のものに格納するもの(ARM系、SPARCのcall命令)、専用のレジスタに格納するもの(POWER,IA-64)に分類される。
 レジスタ間接指定でR1の内容に分岐、R2に戻り番地を格納する命令を考えると、
 JMP R1,R2
 でR1の示す先に飛び、
 JMP R2,R0
 で元に戻れる(R0はゼロレジスタとする)。つまり同一命令でCallとReturnを実現できる。


MIPS
条件分岐はPC相対、PCの256MB領域内絶対番地
戻り番地は任意の汎用レジスタに格納。

SPARC V9
条件分岐命令はPC相対。
call PC相対で符号付き30bitの即値。
戻り番地は%r15(%o7)に格納される。これはレジスタウィンドウで動くのでサブルーチンをネストしても別に保存する必要がない。
jmpl [Ra+Rb]または[Ra+即値]でロードストアのアドレッシングモードと同じ。Rdに戻り番地を格納。
RETURN命令はjmpl命令と同じ。
retはjmpl %i7+8,%g0と同じ。※(これ以前にsave命令でレジスタウィンドウを戻すので%o7→%i7となる)
分岐するレジスタの値の下位2bitが00でなければトラップ発生。
トラップについては複数段のTPC/TNPCを持っている。ハードウェアスタック。

POWER ISA 2.06
PC相対または絶対番地。
命令中のLIビットを1にするとLR(リンクレジスタ)に現在のPCを格納する。
レジスタ間接はないが、リンクレジスタの指す番地に飛ぶ命令がある。

ARM
PC相対±32MBとレジスタ間接。
サブルーチンコールの場合はR14レジスタに保存。
レジスタ間接で分岐するのは汎用レジスタからPCへのコピー(MOV PC,R14等)

Aarch64(ARMv8)
PC相対±128MBとレジスタ間接。
サブルーチンコールの場合はX30レジスタに保存。

PA-RISC
レジスタ間接。レジスタ内の値を<<3した番地へ飛ぶ。戻り番地は任意の汎用レジスタに格納。
Branch Vectoredといって(GRx<<3)+GRb番地に飛べる。

IA-64
ブランチレジスタBR0~BR7を持つ。
ブランチレジスタの内容による間接分岐とIP(PC)相対±16MB。
br.ia 無条件分岐
br.call br0がリターンアドレス
br.ret

Alpha
相対分岐 PC±1MB。
分岐命令はレジスタ間接、次命令のPCを任意の汎用レジスタに格納。
JMP R31,(Rb) ... R31はゼロレジスタ。Rb番地に飛ぶ。
JSR Ra,(Rb) ... Rnに次PC(戻り番地)が入り、Rb番地に飛ぶ。
RET JMPと同じ動作
JSR_COROUTINE ...RaとRbを同じ番号のレジスタに設定すると、disp部の16bitで手続きを表す。ユーザートラップと同様。
JMP,JSR,RET,JSR_COROUTINEについては、分岐予測のターゲットに暗黙にスタックが使用される。

Am29000
絶対番地、PC相対、レジスタ間接。
サブルーチンコールの場合は汎用レジスタに戻り番地を格納。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




サブルーチン呼び出し:各アーキJump&Linkの分類 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる