分岐命令(ぶんきめいれい)は、プロセッサの命令の一種である。ジャンプ命令ともいう。
機械語の命令
列は逐次実
行されるが、分岐命令が実
行されると次に実
行される命令が切り替わる。
高級言語のプログラムでは、条件文・Goto文・サブルーチンなどの制御構文の実現に用いられる。
分岐命令は
引数として少なくともターゲットアドレスを持つ。ターゲットアドレスとは、分岐命令が実
行される時、プログラムカウンタに代入される値である。元来、分岐命令が実
行された直後に実
行される命令は、ターゲットアドレスに配置された命令であった。
しかし、増え過ぎた
パイプライン段数に伴って肥大化した分岐命令実
行ペナルティを少しでも軽減するため、遅延分岐方式を採用した
CPUもある(
MIPS、
SH、
SPARCなど)。遅延分岐方式では、分岐命令が配置されたアドレスに後続するアドレスに配置された命令(ディレイスロットにある命令)を実
行してから、ターゲットアドレスに配置された命令に制御を移す。
RISCでは比較的採用例が多い遅延分岐方式は、1986年にNECから発表されたμPD77230、1988年にTIから発表されたTMS320
C30、などに見られるように当初
DSPによって採用されていた。ディレイスロット(にある命令)の数は、μPD77320の場合で 1 、TMS320
C30の場合で 3 であった。大多数の
RISCのディレイスロットは 1 である。
分岐命令には、ある条件が成り立った場合のみ分岐する
条件分岐と、無条件で分岐する無
条件分岐がある。
パイプライン処理では命令の
フェッチが重要であり、
分岐予測が用いられることがある。
分岐予測は失敗時のコストが大きいので、これを減らすために投機的実
行などの技術が用いられる。
また、
ARMアーキテクチャや
IA-64アーキテクチャーでは、全ての命令を条件実
行命令とし、分岐命令の必要性を低減し
パイプラインストールの可能性を低くする工夫が見られる。