分岐命令

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

分岐命令(ぶんきめいれい)は、プロセッサ命令の一種である。ジャンプ命令ともいう。条件ジャンプ命令と無条件ジャンプ命令があり、厳密には「分岐」するのは条件ジャンプであって無条件ジャンプは「分岐」と言えないかもしれないが、特に区別しないことが多い。サブルーチン呼出や戻りの命令も分岐命令の一種とすることもある。

一般的なプロセッサでは、機械語の命令列はアドレスの昇順に逐次実行されるが、分岐命令が実行されると次に実行される命令が切り替わる。高水準言語コンパイラは、条件文Goto文サブルーチンなどの制御構造から分岐命令を生成する。

分岐命令は引数として少なくともターゲットアドレスを持つ。ターゲットアドレスとは、分岐命令が実行される時、プログラムカウンタに代入される値である。元来、分岐命令が実行された直後に実行される命令は、ターゲットアドレスに配置された命令であった。

命令パイプラインが深い一方で、先読みが浅いプロセッサでは、ジャンプによりパイプラインにバブルが発生しペナルティとなる設計にならざるをえないことがある。そのペナルティを軽減するため、分岐命令の直後を「遅延スロット」と称し、そこにある命令は分岐処理の直前に実行されるものとする、遅延分岐という方式がある。MIPSSHSPARCなど、初期のいわゆるRISCに採用例が多いが、1986年にNECから発表されたμPD77230、1988年にTIから発表されたTMS320C30、デジタルシグナルプロセッサにも(その前から)多い。ディレイスロット(にある命令)の数は、μPD77320の場合で 1 、TMS320C30の場合で 3 であった。大多数のRISCのディレイスロットは 1 である。

パイプライン処理では命令のフェッチが重要であり、分岐予測が用いられることがある。分岐予測は失敗時のコストが大きいので、これを減らすために投機的実行などの技術が用いられる。

ARMIA-64では、全ての命令を条件実行命令として、分岐命令の必要性を低減しパイプラインストールの可能性を低くする工夫をしている。

関連項目[編集]