(57)【要約】【課題】与えられた命令をパイプライン処理するデータ処理装置について、分岐命令流の命令列退避用の専用バッファなどを設けることなく、分岐ペナルティを軽減する。【解決手段】命令バッファ部（１１）は、分岐命令検出部（１２）によって分岐命令が検出され、かつ、分岐予測部（１６）によって当該分岐命令によって分岐が生じることが予測されているとき、先読みして格納している命令列を所定領域に退避させ、当該命令列を格納していた領域に当該分岐命令の分岐先の命令を先読みして格納する。一方、当該分岐命令について分岐予測部（１６）による分岐予測と分岐判定部（１７）による分岐判定結果とが異なるとき、命令バッファ部（１１）は、退避させた命令列の中から命令を出力し、残りの命令を元の領域に戻す。【選択図】図１
2005107666.tif 000002
【特許請求の範囲】
【請求項１】
与えられた命令をパイプライン処理するデータ処理装置であって、
命令を先読みして一時的に格納する命令バッファ部と、
前記命令バッファ部から出力される命令が分岐命令であるか否かを検出する分岐命令検出部と、
前記分岐命令検出部によって検出された分岐命令によって分岐が生じるか否かを予測する分岐予測部と、
前記分岐命令の分岐条件の実行結果から、前記分岐命令によって分岐が生じるか否かを判定する分岐判定部とを備え、
前記命令バッファ部は、
前記分岐命令検出部によって分岐命令が検出され、かつ、前記分岐予測部によって当該分岐命令によって分岐が生じることが予測されているとき、先読みして格納している命令列を所定領域に退避させ、当該命令列を格納していた領域に当該分岐命令の分岐先の命令を先読みして格納する一方、当該分岐命令について前記分岐予測部による分岐予測と前記分岐判定部による分岐判定結果とが異なるとき、前記退避させた命令列の中から命令を出力し、残りの命令を元の領域に戻す
ことを特徴とするデータ処理装置。
【請求項２】
請求項１に記載のデータ処理装置において、
前記命令バッファ部は、前記所定領域において、先読みした命令を順次格納していく方向とは逆方向に命令を順次格納して、前記先読みして格納している命令列を退避させる
ことを特徴とするデータ処理装置。
【請求項３】
請求項２に記載のデータ処理装置において、
前記命令バッファ部は、前記退避させた命令列のうち少なくとも最初に実行すべき命令を残して、先読みした命令の上書きを行う
ことを特徴とするデータ処理装置。
【請求項４】
請求項３に記載のデータ処理装置において、
前記命令バッファ部に格納されている命令のうち前記退避させたものを除く残りについて、総命令語長を算出する有効命令語長算出部と、
前記退避させた命令列のうち最初に実行すべき命令の命令語長を算出する命令語長算出部とを備え、
前記命令バッファ部は、前記有効命令長算出部によって算出された総命令語長および前記命令長算出部によって算出された命令語長から、前記退避させた命令列に先読みした命令を上書きするか否かを判断する
ことを特徴とするデータ処理装置。
【請求項５】
請求項２に記載のデータ処理装置において、
前記命令バッファ部は、先読みした命令を格納するための領域と退避させる命令を格納するための領域との境界を変更可能である
ことを特徴とするデータ処理装置。
【請求項６】
請求項５に記載のデータ処理装置において、
前記命令予測部は、前記分岐命令検出部によって検出された分岐命令について、動的分岐予測を行うものであり、
前記命令バッファ部は、前記分岐予測部による分岐予測に応じて、先読みした命令を格納するための領域と退避させる命令を格納するための領域との境界を変更する
ことを特徴とするデータ処理装置。
【請求項７】
請求項１に記載のデータ処理装置において、
前記命令バッファ部は、格納している命令の中に前記分岐命令検出部によって検出された分岐命令の分岐先の命令列が含まれているとき、当該命令列以外の命令を前記所定領域に退避させるとともに、当該命令列を、当該命令列以外の命令を格納していた領域に移動させる
ことを特徴とするデータ処理装置。
【請求項８】
請求項７に記載のデータ処理装置において、
前記命令バッファ部に格納されている命令のうち前記退避させたものを除く残りについて、総命令語長を算出する有効命令語長算出部と、
前記分岐命令検出部によって検出された分岐命令から分岐先の命令までの距離を算出する分岐距離算出部とを備え、
前記命令バッファ部は、前記有効命令長算出部によって算出された総命令語長および前記分岐距離算出部によって算出された距離から、格納している命令の中に前記命令列が含まれているか否かを判断する
ことを特徴とするデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、与えられた命令をパイプライン処理するデータ処理装置に関し、特に、可変語長命令を処理可能なパイプラインプロセッサや、高速化を目的としたスーパーパイプラインプロセッサなどに好適な、分岐ペナルティ軽減の技術に関する。
【背景技術】
【０００２】
プロセッサの性能を決定する重要な要素として、ＣＰＩ（Clock Per Instruction）値および動作周波数がある。このうちＣＰＩ値は、プロセッサが１命令の実行に必要となる平均マシンサイクル数を表したものである。
【０００３】
ＣＰＩ値は、パイプライン方式の採用により、理想的には１マシンサイクルごとに１命令の実行、すなわち、“１”にすることができる。しかし、実際には、データ依存、制御依存、資源競合などのパイプラインハザード要因により、ＣＰＩ値を低減することは容易ではない。さらに、ＣＰＩ値を低減するとパイプライン制御が複雑化して１サイクル当たりの論理段数が増加し、プロセッサ性能を決定付けるもう一つの重要な要素である動作周波数を向上しにくくなるという問題が生じる。すなわち、ＣＰＩ値の低減と動作周波数の向上とのトレードオフが生じる。
【０００４】
従来、分岐命令の内容をできるだけ早く判定したり（たとえば、特許文献１参照）、分岐命令の実行結果が分岐／非分岐のいずれであってもよいように両方を実行し、条件分岐命令の条件が確定する実行ステージでそのうちのいずれか一方を選択したり（たとえば、特許文献２および３参照）することによって、パイプラインハザードの影響、すなわち、ＣＰＩ値に影響を与える分岐ペナルティの軽減を図っている。
【特許文献１】特開平１０―２１４１８７号公報（第４―７頁、第１―４図）
【特許文献２】特開平５―１６５６３３号公報（第３―４頁、第１，２および７図）
【特許文献３】特開平６―３０１５３７号公報（第３―４頁、第１―３図）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記第１の技術の場合、分岐命令流の命令列を退避させるための専用バッファが必要となる。また、上記第２の技術の場合、分岐先命令流および非分岐命令流を並列実行するための演算器やデータ記憶装置が必要となる。このため、今後、パイプライン構成が深くなるに連れて、分岐ペナルティ軽減のために必要なハードウェア資源がますます増大するおそれがある。
【０００６】
上記問題に鑑み、本発明は、与えられた命令をパイプライン処理するデータ処理装置について、ハードウェア資源、特に分岐命令流の命令列退避用の専用バッファなどを別途設けることなく、分岐ペナルティを軽減することを課題とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために本発明が講じた手段は、与えられた命令をパイプライン処理するデータ処理装置として、命令を先読みして一時的に格納する命令バッファ部と、前記命令バッファ部から出力される命令が分岐命令であるか否かを検出する分岐命令検出部と、前記分岐命令検出部によって検出された分岐命令によって分岐が生じるか否かを予測する分岐予測部と、前記分岐命令の分岐条件の実行結果から、前記分岐命令によって分岐が生じるか否かを判定する分岐判定部とを備え、前記命令バッファ部は、前記分岐命令検出部によって分岐命令が検出され、かつ、前記分岐予測部によって当該分岐命令によって分岐が生じることが予測されているとき、先読みして格納している命令列を所定領域に退避させ、当該命令列を格納していた領域に当該分岐命令の分岐先の命令を先読みして格納する一方、当該分岐命令について前記分岐予測部による分岐予測と前記分岐判定部による分岐判定結果とが異なるとき、前記退避させた命令列の中から命令を出力し、残りの命令を元の領域に戻すものとする。
【０００８】
これによると、分岐命令が検出され、分岐が予測されている場合、それまで先読みして格納済みの命令列が命令バッファ部の所定領域に退避させられる。そして、分岐予測がヒットしなかった場合、その退避させた命令列から次に実行すべき命令が発行されるとともに、残りの命令が元の領域に戻される。このように、先読み命令を格納する命令バッファ部の一部を分岐命令流の命令列の格納のために使用することで、別途バッファを設けることなく、分岐ペナルティの軽減を図ることができる。
【０００９】
好ましくは、前記命令バッファ部は、前記所定領域において、先読みした命令を順次格納していく方向とは逆方向に命令を順次格納して、前記先読みして格納している命令列を退避させるものとする。
【００１０】
このように、命令バッファ部において両方向から分岐先の命令および退避させる非分岐命令流の命令を格納することによって、退避させた命令列の一部に先読みした命令が上書きされる場合、特別な制御回路を設けることなく、退避させた命令列の初めの部分についてできるだけ上書きされなくすることができる。
【００１１】
より好ましくは、前記命令バッファ部は、前記退避させた命令列のうち少なくとも最初に実行すべき命令を残して、先読みした命令の上書きを行うものとする。
【００１２】
このように、退避させた命令列のうち少なくとも最初に実行すべき命令を残しつつ、分岐先の命令を先読みして格納することによって、分岐ペナルティの軽減を図りつつ、命令の先読み動作を行わせることができる。
【００１３】
そして、具体的には、上記データ処理装置は、前記命令バッファ部に格納されている命令のうち前記退避させたものを除く残りについて総命令語長を算出する有効命令語長算出部と、前記退避させた命令列のうち最初に実行すべき命令の命令語長を算出する命令語長算出部とを備え、前記命令バッファ部は、前記有効命令長算出部によって算出された総命令語長および前記命令長算出部によって算出された命令語長から、前記退避させた命令列に先読みした命令を上書きするか否かを判断するものとする。
【００１４】
また、上述した、退避させる命令を、先読みした命令を順次格納していく方向とは逆方向に順次格納する命令バッファ部は、先読みした命令を格納するための領域と退避させる命令を格納するための領域との境界を変更可能であることが好ましい。
【００１５】
これにより、たとえば、データ処理装置が実行すべきプログラムのコーディング方法に応じて、命令バッファ部における当該境界を変更することができ、有限である命令バッファ部の命令格納領域を最適に使用することができる。
【００１６】
より好ましくは、上記のデータ処理装置における命令予測部は、前記分岐命令検出部によって検出された分岐命令について、動的分岐予測を行うものであり、前記命令バッファ部は、前記分岐予測部による分岐予測に応じて、先読みした命令を格納するための領域と退避させる命令を格納するための領域との境界を変更するものとする。
【００１７】
また、上記データ処理装置において、前記命令バッファ部は、格納している命令の中に前記分岐命令検出部によって検出された分岐命令の分岐先の命令列が含まれているとき、当該命令列以外の命令を前記所定領域に退避させるとともに、当該命令列を、当該命令列以外の命令を格納していた領域に移動させるものであることが好ましい。
【００１８】
このように、分岐先の命令列が先読みされ既に命令バッファ部に格納されている場合、当該命令列を命令バッファ部においてシフトすることによって、当該命令列を再読み出しする必要がなくなる。これにより、分岐ペナルティを軽減することができる。
【００１９】
具体的には、上記データ処理装置は、前記命令バッファ部に格納されている命令のうち前記退避させたものを除く残りについて総命令語長を算出する有効命令語長算出部と、前記分岐命令検出部によって検出された分岐命令から分岐先の命令までの距離を算出する分岐距離算出部とを備え、前記命令バッファ部は、前記有効命令長算出部によって算出された総命令語長および前記分岐距離算出部によって算出された距離から、格納している命令の中に前記命令列が含まれているか否かを判断するものとする。
【発明の効果】
【００２０】
以上、本発明によると、与えられた命令をパイプライン処理するデータ処理装置について、新たなハードウェア資源を追加することなく、命令の先読みによる命令供給不足の問題解消を図りつつ、分岐ペナルティの軽減をも図ることができる。
【発明を実施するための最良の形態】
【００２１】
以下、本発明を実施するための最良の形態について、図面を参照しながら説明する。なお、以下では、図１３に示したプログラム例を用いて動作説明を行う。
【００２２】
ここで、図１３のプログラム例について簡単に説明する。
【００２３】
命令（１）は、クリア演算（clr）である。本例では、レジスタ（Ｄ０）に“０”をセットする命令であり、命令コードは“９０”、命令アドレスは“０００００”である。
【００２４】
命令（２）は、ムーブ演算（mov）である。本例では、レジスタ（Ｄ１）に“０ｘ０３”をセットする命令であり、命令コードは“Ｆ０３１”、命令アドレスは“００００１”である。
【００２５】
命令（３）は、クリア演算（clr）である。本例では、レジスタ（Ｄ２）に“０”をセットする命令であり、命令コードは“９２”、命令アドレスは“０００１１”である。
【００２６】
命令（４）は、インクリメント演算（inc）である。本例では、レジスタ（Ｄ０）に“１”を足す命令であり、命令コードは“Ａ０”、命令アドレスは“００１００”である。
【００２７】
命令（５）は、加算演算（add）である。本例では、レジスタ（Ｄ２）にレジスタ（Ｄ０）を足して結果をレジスタ（Ｄ２）に格納する命令であり、命令コードは“Ｅ１０２”、命令アドレスは“００１０１”である。
【００２８】
命令（６）は、比較命令（cmp）である。本例では、レジスタ（Ｄ０）とレジスタ（Ｄ１）とを比較してフラグビットを更新する命令であり、命令コードは“Ｃ００１”、命令アドレスは“００１１１”である。
【００２９】
命令（７）は、条件分岐命令（bne）である。本例では、演算結果が“０”でない場合に分岐先の命令（４）に分岐する命令であり、命令コードは“Ｂ５”、命令アドレスは“０１００１”である。
【００３０】
命令（８）は、インクリメント演算（inc）である。本例では、レジスタ（Ｄ２）に“１”を足す命令であり、命令コードは“Ａ２”、命令アドレスは“０１０１０”である。
【００３１】
命令（９）は、無条件分岐命令（bra）である。本例では、無条件に分岐先の命令（１１）に分岐する命令であり、命令コードは“５４”、命令アドレスは“０１０１１”である。
【００３２】
命令（１０）は、ノンオペレーション命令（nop）である。何もしない命令であり、命令コードは“００”、命令アドレスは“０１１００”である。
【００３３】
命令（１１）は、デクリメント演算（dec）である。本例では、レジスタ（Ｄ０）から“１”を減じる命令であり、命令コードは“Ｄ０”、命令アドレスは“０１１０１”である。
【００３４】
命令（１２）は、減算演算（sub）である。本例では、レジスタ（Ｄ２）からレジスタ（Ｄ０）を減じて結果をレジスタ（Ｄ２）に格納する命令であり、命令コードは“Ｅ２１２”、命令アドレスは“０１１１０”である。
【００３５】
命令（１３）は、比較命令（cmp）である。本例では、レジスタ（Ｄ０）とレジスタ（Ｄ０）とを比較してフラグビットを更新する命令であり、命令コードは“Ｃ００２”、命令アドレスは“１００００”である。
【００３６】
命令（１４）は、条件分岐命令（bne）である。本例では、演算結果が“０”でない場合に分岐先の命令（１１）に分岐する命令であり、命令コードは“Ｂ５”、命令アドレスは“１００１０”である。
【００３７】
命令（１５）は、ムーブ演算（mov）である。本例では、レジスタ（Ｄ０）に“０ｘｅｅ”をセットする命令であり、命令コードは“ＦＥＥ０”、命令アドレスは“１００１１”である。
【００３８】
（第１の実施形態）
図１は、本発明の第１の実施形態に係るデータ処理装置の構成を示す。本実施形態に係るデータ処理装置は、外部メモリから読み込んだ命令をキャッシュする命令キャッシュ部１０と、命令キャッシュ部１０から命令を読み出して一時的に格納する命令バッファ部１１と、命令バッファ部１１から出力される命令が分岐命令であるか否かを検出する分岐命令検出部１２と、命令バッファ部１１から出力された命令を解読する命令解読部１３と、命令解読部１３によって解読された命令を実行する演算部１４と、演算部１３の演算結果および外部メモリから読み込んだデータを一時的に格納するデータキャッシュ部１５と、分岐命令検出部１２によって検出された分岐命令によって分岐が生じるか否かを予測する分岐予測部１６と、分岐命令検出部１２によって検出された分岐命令の分岐条件の実行結果を受けて実際に分岐が生じるか否かを判定する分岐判定部１７と、分岐予測部１６による分岐予測および分岐判定部１７による分岐判定結果から、外部メモリからの命令読み出しに係るアドレスを生成する命令アドレス生成部１８とを備えている。
【００３９】
命令キャッシュ部１０は、命令アドレス生成部１８によって生成された３２ビットアドレスＦＡを受け、アドレスＦＡに対応する命令をレジスタＣ０およびＣ１から出力する。命令キャッシュ部１０は、１６ビット境界を越えない単位で命令を出力する。すなわち、命令キャッシュ部１０は、アドレスＦＡの下位１ビットに関わらず、１６ビット境界にアラインされた命令を出力する。したがって、命令キャッシュ部１０は、アドレスＦＡの下位１ビットが“０”のときはレジスタＣ０およびＣ１から２バイト分の命令を出力し、“１”のときはレジスタＣ１から１バイト分の命令を出力する。
【００４０】
命令バッファ部１１は、命令キャッシュ部１０におけるレジスタＣ０およびＣ１から命令を読み出して、命令流に従って順に格納していく。アドレスＦＡで指定された命令が命令キャッシュ部１０に存在しない、もしくは、命令キャッシュ部１０が動作不可能な場合は、命令バッファ部１１は、直接的に外部メモリから命令を読み出す。また、命令バッファ部１１は、格納している命令を命令解読部１３に出力した後、その出力した命令の分だけ後続の命令をシフトして、次に出力すべき命令を最前段へと移動させる。なお、命令バッファ部１１は、命令キャッシュ部１０から供給される命令を格納できない場合、命令キャッシュ部１０および命令アドレス生成部１８に通知をし、命令供給を停止させる。そして、新たな命令を格納できるようになったとき、命令キャッシュ部１０および命令アドレス生成部１８に通知をして新たな命令の格納を再開する。
【００４１】
データ処理装置に命令バッファ部１１を設ける本来の目的は、命令キャッシュ部１０のキャッシュミスによる命令供給不足の問題をできるだけ生じさせないようにすることにある。命令バッファ部１１は、命令を格納することができる間は次々と命令を読み込む。すなわち、命令バッファ部１１を設けることによって、命令の先読みが可能になる。特に、可変語長命令を実行可能なデータ処理装置にとっては、命令バッファ部１１はより重要な意味を持つ。
【００４２】
また、データ処理装置によっては、命令キャッシュ部１０から供給される命令よりも長い命令語長の命令を解読可能なものがある。このようなデータ処理装置においては、平均命令語長が命令キャッシュ部１０から供給される命令よりも短い場合であっても、局所的に比較的長い命令語長の命令流が継続したときには、命令供給不足の問題が発生するおそれがある。この問題をできるだけ生じさせないようにするためには、命令バッファ部１１の容量を平均命令語長よりも十分に大きくしておく必要がある。命令バッファ部１１の容量の増大はＣＰＩ値の変化として現れるが、命令バッファ部１１の容量をどの程度にするかはチップコストとのトレードオフを考慮して決定する必要がある。
【００４３】
ところで、本発明に係る命令バッファ部１１は、先読みした命令を格納するだけではなく、分岐命令が検出された場合に、先読みして既に格納している命令列を一時的に別の領域に退避させておき、その検出された分岐命令によって分岐が生じないことが判明した場合には、退避させた命令を元に戻すということを行う。以下、命令バッファ部１１について詳細に説明する。
【００４４】
図２は、命令バッファ部１１の内部構成を示す。命令バッファ部１１は、入力セレクタ回路１１１と、命令バッファ１１２と、出力セレクタ回路１１３と、制御回路１１４とを備えている。
【００４５】
命令バッファ１１２は、８個のレジスタＡ０、Ａ１、Ａ２、Ａ３、Ｂ３、Ｂ２、Ｂ１およびＢ０から構成されている。レジスタＡ０〜Ｂ０は、それぞれセレクタ回路１１１１〜１１１８によって選択された１バイト分の命令を格納する。
【００４６】
制御回路１１４は、分岐命令検出部１２からの信号ＢＩＳ、分岐予測部１６からの信号ＢＰＳ、および分岐判定部１７からの信号ＢＥＳを入力する。そして、これら信号ＢＩＳ、ＢＰＳおよびＢＥＳ、命令バッファ１１２に格納されている今現在の命令のバイト数、命令解読部１３に出力すべき命令のバイト数、ならびに命令キャッシュ部１０から供給される命令のバイト数から、入力セレクタ回路１１１を制御するためのセレクト信号ＳＡ０、ＳＡ１、Ａ２、ＳＡ３、ＳＢ０、ＳＢ１、ＳＢ２およびＳＢ３、出力セレクタ回路１１３を制御するためのセレクト信号ＩＢＳ、ならびに命令バッファ１１２に格納されている命令をフラッシュするための信号Ｆｌｕｓｈを生成する。
【００４７】
入力セレクタ回路１１１は、８個のセレクタ１１１１、１１１２、１１１３、１１１４、１１１５、１１１６、１１１７および１１１８を備えている。
【００４８】
セレクタ１１１１は、命令キャッシュ部１０のレジスタＣ０およびＣ１の出力、ならびに命令バッファ１１２のレジスタＡ０、Ａ１、Ａ２、Ｂ２およびＢ１の出力を入力とし、制御回路１１４からのセレクト信号ＳＡ０に応じてこれらのいずれか一つを選択してレジスタＡ０に出力する。具体的には、セレクタ１１１１は、先読みした命令を格納する場合にはレジスタＣ０またはＣ１の出力を選択する。命令バッファ１１２の状態をホールドさせる場合にはレジスタＡ０の出力を選択する。命令バッファ１１２に格納されている命令を１バイトまたは２バイト分シフトさせる場合には、レジスタＡ１またはＡ２の出力を選択する。そして、レジスタＢ２またはＢ１に退避させていた命令を元に戻す場合には、レジスタＢ２またはＢ１の出力を選択する。
【００４９】
セレクタ１１１２は、命令キャッシュ部１０のレジスタＣ０およびＣ１の出力、ならびに命令バッファ１１２のレジスタＡ１、Ａ２、Ａ３、Ｂ１およびＢ０の出力を入力とし、制御回路１１４からのセレクト信号ＳＡ１に応じてこれらのいずれか一つを選択してレジスタＡ１に出力する。具体的には、セレクタ１１１２は、先読みした命令を格納する場合にはレジスタＣ０またはＣ１の出力を選択する。命令バッファ１１２の状態をホールドさせる場合にはレジスタＡ１の出力を選択する。命令バッファ１１２に格納されている命令を１バイトまたは２バイト分シフトさせる場合には、レジスタＡ２またはＡ３の出力を選択する。そして、レジスタＢ１またはＢ０に退避させていた命令を元に戻す場合には、レジスタＢ１またはＢ０の出力を選択する。
【００５０】
セレクタ１１１３は、命令キャッシュ部１０のレジスタＣ０およびＣ１の出力、ならびに命令バッファ１１２のレジスタＡ２、Ａ３、Ｂ３およびＢ０の出力を入力とし、制御回路１１４からのセレクト信号ＳＡ２に応じてこれらのいずれか一つを選択してレジスタＡ２に出力する。具体的には、セレクタ１１１３は、先読みした命令を格納する場合にはレジスタＣ０またはＣ１の出力を選択する。命令バッファ１１２の状態をホールドさせる場合にはレジスタＡ２の出力を選択する。命令バッファ１１２に格納されている命令を１バイトまたは２バイト分シフトさせる場合には、レジスタＡ３またはＢ３の出力を選択する。そして、レジスタＢ０に退避させていた命令を元に戻す場合には、レジスタＢ０の出力を選択する。
【００５１】
セレクタ１１１４は、命令キャッシュ部１０のレジスタ命令Ｃ０およびＣ１の出力、ならびに命令バッファ１１２のレジスタＡ３、Ｂ３およびＢ２の出力を入力とし、制御回路１１４からのセレクト信号ＳＡ３に応じてこれらのいずれか一つを選択してレジスタＡ３に出力する。具体的には、セレクタ１１１４は、先読みした命令を格納する場合にはレジスタＣ０またはＣ１の出力を選択する。命令バッファ１１２の状態をホールドさせる場合にはレジスタＡ３の出力を選択する。そして、命令バッファ１１２に格納されている命令を１バイトまたは２バイト分シフトさせる場合には、レジスタＢ３またはＢ２の出力を選択する。
【００５２】
セレクタ１１１５は、命令キャッシュ部１０のレジスタＣ０およびＣ１の出力、ならびに命令バッファ１１２のレジスタＢ３、Ｂ２、Ｂ１、Ａ２、Ａ１およびＡ０の出力を入力とし、制御回路１１４からのセレクト信号ＳＢ３に応じてこれらのいずれか一つを選択してレジスタＢ３に出力する。具体的には、セレクタ１１１５は、先読みした命令を格納する場合にはレジスタＣ０またはＣ１の出力を選択する。命令バッファ１１２の状態をホールドさせる場合にはレジスタＢ３の出力を選択する。命令バッファ１１２に格納されている命令を１バイトまたは２バイト分シフトさせる場合には、レジスタＢ２またはＢ１の出力を選択する。そして、レジスタＡ０、Ａ１またはＡ２に格納されている命令を退避させる場合には、レジスタＡ０、Ａ１またはＡ２の出力を選択する。
【００５３】
セレクタ１１１６は、命令キャッシュ部１０のレジスタＣ０およびＣ１の出力、ならびに命令バッファ１１２のレジスタＢ２、Ｂ１、Ｂ０、Ａ３、Ａ２およびＡ１の出力を入力とし、制御回路１１４からのセレクト信号ＳＢ２に応じてこれらのいずれか一つを選択してレジスタＢ２に出力する。具体的には、セレクタ１１１６は、先読みした命令を格納する場合にはレジスタＣ０またはＣ１の出力を選択する。命令バッファ１１２の状態をホールドさせる場合にはレジスタＢ２の出力を選択する。命令バッファ１１２に格納されている命令を１バイトまたは２バイト分シフトさせる場合には、レジスタＢ１またはＢ０の出力を選択する。そして、レジスタＡ１、Ａ２またはＡ３に格納されている命令を退避させる場合には、レジスタＡ１、Ａ２またはＡ３の出力を選択する。
【００５４】
セレクタ１１１７は、命令キャッシュ部１０のレジスタＣ０およびＣ１の出力、ならびに命令バッファ１１２のレジスタＢ１、Ｂ０、Ａ３およびＡ２の出力を入力とし、制御回路１１４からのセレクト信号ＳＢ１に応じてこれらのいずれか一つを選択してレジスタＢ１に出力する。具体的には、セレクタ１１１７は、先読みした命令を格納する場合にはレジスタＣ０またはＣ１の出力を選択する。命令バッファ１１２の状態をホールドさせる場合にはレジスタＢ１の出力を選択する。命令バッファ１１２に格納されている命令を１バイト分シフトさせる場合には、レジスタＢ０の出力を選択する。そして、レジスタＡ２またはＡ３に格納されている命令を退避させる場合には、レジスタＡ２またはＡ３の出力を選択する。
【００５５】
セレクタ１１１８は、命令キャッシュ部１０のレジスタＣ０の出力、ならびに命令バッファ１１２のレジスタＢ０、Ｂ３およびＡ３の出力を入力とし、制御回路１１４からのセレクト信号ＳＢ０に応じてこれらのいずれか一つを選択してレジスタＢ０に出力する。具体的には、セレクタ１１１８は、先読みした命令を格納する場合にはレジスタＣ０の出力を選択する。命令バッファ１１２の状態をホールドさせる場合にはレジスタＢ０の出力を選択する。そして、レジスタＡ３またはＢ３に格納されている命令を退避させる場合には、レジスタＡ３またはＢ３の出力を選択する。
【００５６】
一方、出力セレクタ回路１１３は、２個のセレクタ１１３１および１２３２を備えている。セレクタ１１３１は、命令バッファ１１２のレジスタＡ０およびＢ３の出力を入力とし、制御回路１１４からのセレクト信号ＩＢＳに応じてこれらのいずれか一方を選択して出力する。セレクタ１１３２は、命令バッファ１１２のレジスタＡ１およびＢ２の出力を入力とし、制御回路１１４からのセレクト信号ＩＢＳに応じてこれらのいずれか一方を選択して出力する。具体的には、出力セレクタ回路１１３は、先読みされ格納されている命令を出力する場合にはレジスタＡ０およびＡ１の出力を選択し、退避させている命令を出力する場合にはレジスタＢ３およびＢ２の出力を選択する。
【００５７】
分岐命令検出部１２によって命令バッファ１１２の最前段、すなわちレジスタＡ０（２バイト命令の場合にはレジスタＡ０およびＡ１）に位置する命令が分岐命令であることが検出されたとき、制御回路１１４は、分岐命令検出部１２からその旨を伝達する信号ＢＩＳを受ける。また、制御回路１１４は、分岐予測部１６から、分岐予測を伝達する信号ＢＰＳを受ける。そして、分岐が予測されている場合、制御回路１１４は、次のマシンサイクルで信号Ｆｌｕｓｈを出力して命令バッファ１１２の内部をフラッシュし、分岐先の命令を命令バッファ１１２の先頭に格納できるようにする。一方、命令アドレス生成部１８は、分岐先の命令のアドレスを算出して命令キャッシュ部１０に出力する。
【００５８】
次に、本実施形態に係るデータ処理装置が図１３のプログラムを実行するときの動作について図３を参照しながら説明する。なお、前提条件として、当該データ処理装置で実行可能な命令の命令語長は１または２バイトであり、命令キャッシュ部１０は２バイト単位で命令を供給し、当該データ処理装置は、Ｆ、Ｄ、Ｅ、ＭおよびＷの５段のステージに分割されるパイプライン処理を行うものとする。そして、分岐予測部１６は、静的分岐予測装置であり、後方分岐の場合は分岐予測（Ｔａｋｅｎ予測）を行う一方、前方分岐の場合は非分岐予測（Ｎｏｔ−Ｔａｋｅｎ予測）を行うものとする。また、図３は、図１３のプログラムを何サイクルか実行している途中の状態を示しており、命令バッファ部１１は空の状態であり、レジスタＤ０の値は“２”、レジスタＤ１の値は“１”、そしてレジスタＤ２の値は“２”とする。ただし、この前提条件は説明を簡略化するためのものであって、本発明を限定するものではない。
【００５９】
サイクルタイムＴ１では、命令（１）がＦステージで実行され、命令アドレス“０００００”から命令が読み読み込まれる。この結果、命令バッファ状態は“９０Ｆ０”となる。
【００６０】
サイクルタイムＴ２では、命令（１）はＤステージで実行され、命令コード“９０”が命令バッファ部１１から発行され、後続の命令が１バイトだけシフトされる。そして、命令（２）がＦステージで実行され、命令アドレス“０００１０”から命令が読み込まれる。この結果、命令バッファ状態は“Ｆ０３１９２”となる。
【００６１】
サイクルタイムＴ３では、命令（１）はＥステージで実行される。命令（２）はＤステージで実行され、命令コード“Ｆ０３１”が命令バッファ部１１から発行され、後続の命令が２バイトだけシフトされる。そして、命令（３）がＦステージで実行され、命令アドレス“００１００”から命令が読み込まれる。この結果、命令バッファ状態は“９２Ａ０Ｅ１”となる。
【００６２】
サイクルタイムＴ４では、命令（１）はＭステージで実行される。命令（２）はＥステージで実行される。命令（３）はＤステージで実行され、命令コード“９２”が命令バッファ部１１から発行され、後続の命令が１バイトだけシフトされる。そして、命令（４）がＦステージで実行され、命令アドレス“００１１０”から命令が読み込まれる。この結果、命令バッファ状態は“Ａ０Ｅ１０２Ｃ０”となる。
【００６３】
サイクルタイムＴ５では、命令（１）はＷステージで実行される。命令（２）はＭステージで実行される。命令（３）はＥステージで実行される。命令（４）はＤステージで実行され、命令コード“Ａ０”が命令バッファ部１１から発行され、後続の命令が１バイトだけシフトされる。そして、命令（５）がＦステージで実行され、命令アドレス“０１０００”から命令が読み込まれる。この結果、命令バッファ状態は“Ｅ１０２Ｃ００１Ｂ５”となる。
【００６４】
サイクルタイムＴ６では、命令（２）はＷステージで実行される。命令（３）はＭステージで実行される。命令（４）はＥステージで実行される。命令（５）はＤステージで実行され、命令コード“Ｅ１０２”が命令バッファ部１１から発行され、後続の命令が２バイトだけシフトされる。そして、命令（６）がＦステージで実行され、命令アドレス“０１０１０”から命令が読み込まれる。この結果、命令バッファ状態は“Ｃ００１Ｂ５Ａ２５４”となる。
【００６５】
サイクルタイムＴ７では、命令（３）はＷステージで実行される。命令（４）はＭステージで実行される。命令（５）はＥステージで実行される。命令（６）はＤステージで実行され、命令コード“Ｃ００１”が命令バッファ部１１から発行され、後続の命令が２バイトだけシフトされる。そして、命令（７）がＦステージで実行され、命令アドレス“０１１００”から命令が読み込まれる。この結果、命令バッファ状態は“Ｂ５Ａ２５４００Ｄ０”となる。また、命令バッファの先頭に位置する命令コード“Ｂ５”が分岐命令であることが分岐命令検出部１２によって検出される。
【００６６】
サイクルタイムＴ８では、命令（４）はＷステージで実行される。命令（５）はＭステージで実行される。命令（６）はＥステージで実行される。命令（７）はＤステージで実行され、命令コード“Ｂ５”が命令バッファ部１１から発行される。そして、前サイクルタイムＴ７において分岐命令が検出されているため、分岐先の命令アドレス“００１００”から命令が読み込まれるとともに、非分岐命令流の命令列“Ａ２５４００Ｄ０”が退避される。すなわち、分岐先の命令（４）´がＦステージで実行される。この結果、命令バッファ状態は“Ａ０Ｅ１”となる。
【００６７】
サイクルタイムＴ９では、命令（５）はＷステージで実行される。命令（６）はＭステージで実行される。命令（７）はＥステージで実行され、分岐判定部１７によって分岐予測ミスであったことが検出される。この結果、命令（８）がＤステージで実行され、退避させていた命令列から命令コード“Ａ２”が発行され、残りの命令が命令バッファの先頭部分に移動する。そして、命令（９）がＦステージで実行され、命令アドレス“０１１１０”から命令が読み込まれる。この結果、命令バッファ状態は“５４００Ｄ０Ｅ２１２”となる。
【００６８】
すなわち、分岐命令が検出され、分岐先命令の格納の必要性が生じた場合に、命令バッファ１１２に既に格納されている非分岐命令流の命令列を逆方向にシフトして退避させる。そして、分岐予測ミスが発生した場合、退避させた命令列から非分岐命令流の先頭の命令を発行する。
【００６９】
以上、本実施形態によると、先読みした命令の格納用の命令バッファ１１２の空き領域に命令を退避させることができるため、命令退避用の専用バッファを設けることなく、分岐ペナルティの軽減を図ることができる。本実施形態では、分岐命令によって命令流が変わったときにそれまで格納していた命令が無効化されて命令バッファ１１２の一部が局所時間的に使用されなくなる点に着目して、その使用されなくなる空き領域に命令を退避させるため、命令バッファ部１１の本来の目的である先読みした命令の格納については、何ら機能を損なうものではない。
【００７０】
さらに、命令バッファ１１２の一部を命令退避に用いることについては、退避させる命令の命令語長が命令バッファ１１２のサイズ以下なら理論的に可能であるため、退避専用のバッファを設ける場合と比較して、命令退避可能なサイズを設定することが容易である。
【００７１】
なお、上記説明では、命令バッファ１１２の後段４バイトを動的に一時的に退避用バッファとして用いたが、命令バッファ１１２の容量、退避用バッファとして使用可能なバッファサイズはこの限りではない。
【００７２】
また、本実施形態では、分岐予測部１６は静的分岐予測を行うものとして説明したが、本発明はこれに限定されるものではない。分岐予測部１６は、動的分岐予測を行うものであってもよく、また、静的および動的分岐を混合したものであってもよい。
【００７３】
（第２の実施形態）
第１の実施形態に係る命令バッファ部１１の構成では、分岐命令検出後にパイプラインがストールした場合、命令バッファ１１２に分岐命令流の命令が次々と格納されていく。一方、命令フェッチが複数ステージに跨る場合、分岐命令が検出された次のサイクルにおいても命令キャッシュ部１０から非分岐命令流の命令が供給される。このような場合には、命令バッファ１１２の後段に退避させた非分岐命令列と命令バッファの前段から格納されていく分岐先命令列とが混在し、退避していたデータが上書きされてしまう。
【００７４】
たとえば、第１の実施形態に係る命令バッファ部１１において、非分岐命令流の命令列を退避させている状態で分岐先の命令を格納していき、分岐先の命令が５バイト以上読み込まれた時点で、退避させていた非分岐命令流の命令が上書きされてしまう。このような上書きが発生しないように制限することは可能であるが、上書きを制限すると、分岐予測部１６によって分岐予測がされているにも関わらず、分岐先の命令が最大４バイトまでしか格納できなくなる。その結果、分岐判定部１７によって分岐することが判定された時点で、次に解読すべき命令が命令バッファ部１１に格納されていないことが生じるおそれがあり、この場合には、パイプラインストールが発生してしまう。また、４バイト以上の命令語長の命令を実行可能なデータ処理装置の場合、上書きを制限することによって、命令バッファ部１１に格納した命令が不完全なものとなり、命令を発行できなくなるおそれがある。そこで、退避させる命令の格納方法を工夫することによって、新たに特別な構成要素を追加することなく上記の問題の解決を図ることを考える。
【００７５】
図４は、本発明の第２の実施形態に係るデータ処理装置における命令バッファ部１１の内部構成図を示す。本実施形態に係るデータ処理装置の構成は、図１に示した第１の実施形態に係るデータ処理装置と同様であるため説明を省略する。以下、本実施形態に係る命令バッファ部１１について、第１の実施形態と異なる点についてのみ説明する。
【００７６】
セレクタ１１１２´は、命令キャッシュ部１０のレジスタＣ０およびＣ１の出力、ならびに命令バッファ１１２のレジスタＡ１、Ａ２、Ａ３、Ｂ２およびＢ３の出力を入力とし、制御回路１１４からのセレクト信号ＳＡ１に応じてこれらのいずれか一つを選択してレジスタＡ１に出力する。具体的には、セレクタ１１１２´は、先読みした命令を格納する場合にはレジスタＣ０またはＣ１の出力を選択する。命令バッファ１１２の状態をホールドさせる場合にはレジスタＡ１の出力を選択する。命令バッファ１１２に格納されている命令を１バイトまたは２バイト分シフトさせる場合には、レジスタＡ２またはＡ３の出力を選択する。そして、レジスタＢ２またはＢ３に退避させていた命令を元に戻す場合には、レジスタＢ２またはＢ３の出力を選択する。
【００７７】
セレクタ１１１３´は、命令キャッシュ部１０のレジスタＣ０およびＣ１の出力、ならびに命令バッファ１１２のレジスタＡ２、Ａ３およびＢ３の出力を入力とし、制御回路１１４からのセレクト信号ＳＡ２に応じてこれらのいずれか一つを選択してレジスタＡ２に出力する。具体的には、セレクタ１１１３´は、先読みした命令を格納する場合にはレジスタＣ０またはＣ１の出力を選択する。命令バッファ１１２の状態をホールドさせる場合にはレジスタＡ２の出力を選択する。命令バッファ１１２に格納されている命令を１バイト分シフトさせる場合には、レジスタＡ３の出力を選択する。そして、命令バッファ１１２に格納されている命令を２バイト分シフトさせる、または、レジスタＢ３に退避させていた命令を元に戻す場合には、レジスタＢ３の出力を選択する。
【００７８】
セレクタ１１１５´は、命令キャッシュ部１０のレジスタＣ０およびＣ１の出力、ならびに命令バッファ１１２のレジスタＢ３、Ｂ２、Ｂ１およびＡ３の出力を入力とし、制御回路１１４からのセレクト信号ＳＢ３に応じてこれらのいずれか一つを選択してレジスタＢ３に出力する。具体的には、セレクタ１１１５´は、先読みした命令を格納する場合にはレジスタＣ０またはＣ１の出力を選択する。命令バッファ１１２の状態をホールドさせる場合にはレジスタＢ３の出力を選択する。命令バッファ１１２に格納されている命令を１バイトまたは２バイト分シフトさせる場合には、レジスタＢ２またはＢ１の出力を選択する。そして、レジスタＡ３に格納されている命令を退避させる場合には、レジスタＡ３の出力を選択する。
【００７９】
セレクタ１１１６´は、命令キャッシュ部１０のレジスタＣ０およびＣ１の出力、ならびに命令バッファ１１２のレジスタＢ２、Ｂ１、Ｂ０、Ａ２およびＡ３の出力を入力とし、制御回路１１４からのセレクト信号ＳＢ２に応じてこれらのいずれか一つを選択してレジスタＢ２に出力する。具体的には、セレクタ１１１６´は、先読みした命令を格納する場合にはレジスタＣ０またはＣ１の出力を選択する。命令バッファ１１２の状態をホールドさせる場合にはレジスタＢ２の出力を選択する。命令バッファ１１２に格納されている命令を１バイトまたは２バイト分シフトさせる場合には、レジスタＢ１またはＢ０の出力を選択する。そして、レジスタＡ２またはＡ３に格納されている命令を退避させる場合には、レジスタＡ２またはＡ３の出力を選択する。
【００８０】
セレクタ１１１７´は、命令キャッシュ部１０のレジスタＣ０およびＣ１の出力、ならびに命令バッファ１１２のレジスタＢ１、Ｂ０、Ａ３、Ａ２およびＡ１の出力を入力とし、制御回路１１４からのセレクト信号ＳＢ１に応じてこれらのいずれか一つを選択してレジスタＢ１に出力する。具体的には、セレクタ１１１７´は、先読みした命令を格納する場合にはレジスタＣ０またはＣ１の出力を選択する。命令バッファ１１２の状態をホールドさせる場合にはレジスタＢ１の出力を選択する。命令バッファ１１２に格納されている命令を１バイト分シフトさせる場合には、レジスタＢ０の出力を選択する。そして、レジスタＡ３、Ａ２またはＡ３に格納されている命令を退避させる場合には、レジスタＡ３、Ａ２またはＡ１の出力を選択する。
【００８１】
セレクタ１１１８´は、命令キャッシュ部１０のレジスタＣ０の出力、ならびに命令バッファ１１２のレジスタＢ０、Ａ０、Ａ１およびＡ２の出力を入力とし、制御回路１１４からのセレクト信号ＳＢ０に応じてこれらのいずれか一つを選択してレジスタＢ０に出力する。具体的には、セレクタ１１１８´は、先読みした命令を格納する場合にはレジスタＣ０の出力を選択する。命令バッファ１１２の状態をホールドさせる場合にはレジスタＢ０の出力を選択する。そして、レジスタＡ０、Ａ１またはＡ２に格納されている命令を退避させる場合には、レジスタＡ０、Ａ１またはＡ２の出力を選択する。
【００８２】
一方、セレクタ１１３１´は、命令バッファ１１２のレジスタＡ０およびＢ０の出力を入力とし、制御回路１１４からのセレクト信号ＩＢＳに応じていずれか一方を選択して出力する。また、セレクタ１１３２´は、命令バッファ１１２のレジスタＡ１およびＢ１の出力を入力とし、制御回路１１４からのセレクト信号ＩＢＳに応じていずれか一方を選択して出力する。具体的には、出力セレクタ回路１１３は、先読みして格納している命令を出力する場合にはレジスタＡ０およびＡ１の出力を選択し、退避させている命令を出力する場合にはレジスタＢ０およびＢ１の出力を選択する。
【００８３】
次に、本実施形態に係るデータ処理装置が図１３のプログラムを実行するときの動作について図５を参照しながら説明する。なお、前提条件として、本実施形態に係るデータ処理装置は、Ｆ１、Ｆ２、Ｄ１、Ｄ２、Ｅ、Ｍ１およびＭ２の７段のステージに分割されるパイプライン処理を行うものとする。これ以外の前提条件については、第１の実施形態で説明したものと同じとする。
【００８４】
サイクルタイムＴ１では、命令（４）がＦ１ステージで実行され、命令アドレス“００１００”からの命令読み込み要求が発行される。
【００８５】
サイクルタイムＴ２では、命令（４）はＦ２ステージで実行され、前サイクルタイムＴ１で要求された命令アドレス“００１００”から命令が読み込まれ、命令バッファ状態は“Ａ０Ｅ１”となる。そして、命令（５）がＦ１ステージで実行され、命令アドレス“００１１０”からの命令読み込み要求が発行される。
【００８６】
サイクルタイムＴ３では、命令（４）はＤ１ステージで実行され、命令コード“Ａ０”が命令バッファ部１１から発行され、後続の命令が１バイトだけシフトされるとともに、命令（４）の解読が行われる。命令（５）はＦ２ステージで実行され、前サイクルタイムＴ２で要求された命令アドレス“００１１０”から命令が読み込まれ、命令バッファ状態は“Ｅ１０２Ｃ０”となる。そして、命令（６）がＦ１ステージで実行され、命令アドレス“０１０００”からの命令読み込み要求が発行される。
【００８７】
サイクルタイムＴ４では、命令（４）はＤ２ステージで実行され、解読された命令（４）が演算部１４へ送られる。命令（５）はＤ１ステージで実行され、命令コード“Ｅ１０２”が命令バッファ部１１から発行され、後続の命令が２バイトだけシフトされるとともに、命令（５）の解読が行われる。命令（６）はＦ２ステージで実行され、前サイクルタイムＴ３で要求された命令アドレス“０１０００”から命令が読み込まれ、命令バッファ状態は“Ｃ００１Ｂ５”となる。そして、命令（７）がＦ１ステージで実行され、命令アドレス“０１０１０”からの命令読み込み要求が発行される。
【００８８】
サイクルタイムＴ５では、命令（４）はＥステージで実行され、レジスタＤ０に“１”が加算される。命令（５）はＤ２ステージで実行され、解読された命令（５）が演算部１４へ送られる。命令（６）はＤ１ステージで実行され、命令コード“Ｃ００１”が命令バッファ部１１から発行され、後続の命令が２バイトだけシフトされるとともに、命令（６）の解読が行われる。命令（７）はＦ２ステージで実行され、前サイクルタイムＴ４で要求された命令アドレス“０１０１０”から命令が読み込まれ、命令バッファ状態は“Ｂ５Ａ２５４”となる。そして、命令（８）がＦ１ステージで実行され、命令アドレス“０１１００”からの命令読み込み要求が発行される。また、命令バッファの先頭に位置する命令コード“Ｂ５”が分岐命令であることが分岐命令検出部１２によって検出される。
【００８９】
サイクルタイムＴ６では、命令（４）はＭ１ステージで実行され、レジスタＤ０に演算結果を書き込む準備が行われる。命令（５）はＥステージで実行され、レジスタＤ０とレジスタＤ２との加算が行われる。命令（６）はＤ２ステージで実行され、解読された命令（５）が演算部１４へ送られる。命令（７）はＤ１ステージで実行され、命令コード“Ｂ５”が命令バッファ部１１から発行され、後続の命令が１バイトだけシフトされるとともに、命令（７）の解読が行われる。命令（８）はＦ２ステージで実行され、前サイクルタイムＴ５で要求された命令アドレス“０１１００”から命令が読み込まれ、命令バッファ状態は“Ａ２５４００Ｄ０”となる。そして、前サイクルタイムＴ５において分岐命令が検出されているため、分岐先の命令アドレス“００１００”からの命令読み込み要求が発行される。すなわち、分岐先の命令（４）´がＦ１ステージで実行される。
【００９０】
サイクルタイムＴ７では、命令（４）はＭ２ステージで実行され、レジスタＤ０に演算結果が書き込まれる。命令（５）はＭ１ステージで実行され、レジスタＤ２に演算結果を書き込む準備が行われる。命令（６）はＥステージで実行され、レジスタＤ０とレジスタＤ１との比較（減算）が行われるが、Ｍ２ステージにおいてレジスタＤ０への書き込みが完了していないためＥステージはストールする。命令（７）はＤ２ステージで実行され、解読された命令（６）が演算部１４へ送られようとするが、ＥステージがストールしているためＤ２ステージもまたストールする。命令（８）は非分岐命令であるためキャンセルされ、Ｄ１ステージはフラッシュされる。命令（４）´はＦ２ステージで実行され、前サイクルタイムＴ６で要求された命令アドレス“００１００”から命令が読み込まれるとともに、非分岐命令流の命令列“Ａ２５４００Ｄ０”が退避される。この結果、命令バッファ状態は“Ａ０Ｅ１”となる。そして、命令（５）´がＦ１ステージで実行され、命令アドレス“００１１０”からの命令読み込み要求が発行される。
【００９１】
サイクルタイムＴ８では、命令（５）はＭ２ステージで実行され、レジスタＤ２に演算結果が書き込まれる。Ｍ１ステージでは、前サイクルタイムＴ７においてＥステージがストールしていたためバブルが発生する。命令（６）はＥステージで実行され、レジスタＤ０とレジスタＤ１との比較（減算）が行われる。命令（７）は再びＤ２ステージで実行され、解読された命令（７）が演算部１４へ送られる。Ｄ１ステージはフラッシュされたままである。命令（４）´は引き続きＦ２ステージで実行され、前サイクルタイムＴ７で要求された命令アドレス“００１１０”から命令が読み込まれ、命令バッファ状態は“Ａ０Ｅ１０２Ｃ０”となる。そして、命令（５）´は引き続きＦ１ステージで実行され、命令アドレス“０１０００”からの命令読み込み要求が発行される。
【００９２】
サイクルタイムＴ９では、Ｍ２ステージについては、前々サイクルタイムＴ７でＥステージがストールしていたためバブルが発生する。命令（６）はＭ１ステージで実行される。命令（７）はＥステージで実行され、分岐判定部１７によって分岐予測ミスであったことが検出される。Ｄ２ステージについては、前サイクルタイムＴ８でＤ１ステージがフラッシュされたためバブルが発生する。命令（４）´はＤ１ステージで実行され、命令コード“Ａ０”が命令バッファ部１１から発行され、後続の命令が１バイトだけシフトされるとともに、命令（４）´の解読が行われる。命令（５）´はＦ２ステージで実行され、前サイクルタイムＴ８で要求された命令アドレス“０１０００”から命令が読み込まれ、命令バッファ状態は“Ｅ１０２Ｃ００１Ｂ５”となる。そして、命令（９）がＦ１ステージで実行され、非分岐命令流の命令アドレス“０１１０１”からの命令読み込み要求が発行される。
【００９３】
サイクルタイムＴＡでは、命令（６）はＭ２ステージで実行される。命令（７）はＭ１ステージで実行される。Ｅステージについては、前サイクルタイムＴ９でＤ２ステージがフラッシュされたためバブルが発生する。命令（４）´および（５）´は分岐命令流であるためキャンセルされ、Ｄ２ステージはフラッシュされる。命令（８）´はＤ１ステージで実行され、退避させていた命令列から命令コード“Ａ２”が発行され、残りの命令が命令バッファの先頭部分に移動する。命令（９）はＦ２ステージで実行され、前サイクルタイムＴ９で要求された命令アドレス“０１１０１”から命令が読み込まれ、命令バッファ状態は“５４００Ｄ０”となる。そして、命令（１０）がＦ１ステージで実行され、命令アドレス“０１１１０”からの命令読み込み要求が発行される。
【００９４】
以上のように、命令バッファ１１２において、退避させる命令を、先読み命令を格納していく方向とは逆方向に、末尾部分から順に格納していくことにより、退避させた命令列の先頭の命令が上書きされないようにすることができる。図５中のサイクルタイムＴ９における命令バッファ状態を見てわかるように、退避させた非分岐命令流の命令列の一部が分岐命令流の命令によって上書きされているが、非分岐命令流の先頭の命令コード“Ａ２”は上書きされずに残っている。このため、次のサイクルタイムＴＡにおいて、命令コード“Ａ２”を出力することができ、パイプラインハザードを生じさせることがない。上記例では、さらに１サイクルタイム分の分岐命令流の命令が格納されても、命令コード“Ａ２”が上書きされることはない。
【００９５】
第１の実施形態では、命令バッファ１１２において、あらかじめ想定していた非分岐命令流の命令列を退避させる領域を除いた残りの領域が、分岐先の命令列を格納するために用いられる。しかし、分岐することが予測されている場合には必ずしも分岐先の命令の格納を制限する必要はなく、分岐予測のヒット率を考慮するに、分岐先の命令の格納を優先する方が好ましい結果をもたらす場合が多い。
【００９６】
本実施形態では、分岐すると予測されている命令、すなわち、分岐命令流の命令の格納範囲があらかじめ想定されていた非分岐命令流の退避バッファ領域に達した場合でも、その分岐命令流の命令を格納すること許可する。ただし、命令バッファ１１２の末尾から先頭方向に非分岐命令流の命令列を格納しておき、非分岐命令流の初めの部分の命令についてはなるべく上書きされないようにしている。これにより、退避された非分岐命令流の命令をできるだけ有効な状態で格納しつつ、できるだけ分岐命令流の命令を格納し、分岐することが判定された時点で命令供給不足が発生しないようにすることができる。
【００９７】
また、本実施形態に係る命令バッファ部１１の構成は、第１の実施形態と比較しても、特に入力端子や構成要素が増えるわけではなく、回路規模が増大することはない。
【００９８】
なお、上記説明では、命令語長が１バイト単位であることに着目し、非分岐命令流の命令の退避単位を１バイトとして、命令バッファ１１２の末尾から先頭方向にこの単位で命令の格納を行っている。しかし、本発明はこれに限定されるものではなく、データ処理装置において実行可能な命令語長、たとえば、２バイトを単位として、退避させる命令を格納してもよい。
【００９９】
また、上記説明では、Ｆステージは２段であるとしたが、これが３段以上続く場合には、分岐命令が検出されてから分岐命令流が命令バッファに格納されるまでのサイクル数が増加する。これにより、非分岐命令流の命令キャッシュからの命令の格納が数サイクル継続されるため、非分岐命令流の命令によって命令バッファが飽和してしまうことがある。この場合、これら命令を退避させると、命令バッファ１１２の先頭部分まで非分岐命令流の命令が占めてしまうことになるが、特に問題はない。相異なる命令流の命令の格納方向を互いに逆にすることにより、上述した効果を得ることができる。
【０１００】
（第３の実施形態）
分岐予測が適切な場合、分岐処理が確定する確率が高くなり、その後の分岐先命令の供給問題が発生する確率が低くなることは明らかである。しかし、分岐予測ミスが発生する回数や、分岐予測ミスが発生した後の処理の内容によっては、データ処理装置の性能が低下する可能性も否定できない。たとえば、分岐が成立した直後には命令語長が比較的短い命令が、そして、分岐が非成立の場合には命令語長が比較的長い命令が使用されているプログラムの場合、命令バッファにおいて非分岐命令流と分岐先命令流との格納境界の決め方によってはデータ処理装置の性能に差が生じる。
【０１０１】
一方、組み込み用のデータ処理装置などでは、実行すべきプログラムをあらかじめ評価することができる。すなわち、事前にプログラムを評価することによって、非分岐命令流と分岐先命令流との格納境界を最適に決定することができる。そこで、非分岐命令流と分岐先命令流との格納境界を変更可能な命令バッファの構成を考える。
【０１０２】
図６は、本発明の第３の実施形態に係るデータ処理装置における命令バッファ部の内部構成図を示す。本実施形態に係るデータ処理装置の構成は、図１に示した第１の実施形態に係るデータ処理装置と同様であるため説明を省略する。以下、本実施形態に係る命令バッファ部１１について、図４に示した第２の実施形態に係る命令バッファ部１１と異なる点についてのみ説明する。
【０１０３】
制御回路１１４´は、命令バッファ１１２において非分岐命令流と分岐命令流とが互いの格納境界を越えるような命令供給があった場合に、その重複する領域に上書きを許可するか否かを設定するためのレジスタ１１４１を備えている。レジスタ１１４１は、上書きを許可するか否かを示す信号ＢＢＳを出力し、上書きを許可する場合には信号ＢＢＳを“１”に設定する一方、許可しない場合には“０”に設定する。
【０１０４】
また、制御回路１１４´は、分岐予測状態にあるか否かを示す信号ＢＰＳを出力する。信号ＢＰＳは、分岐命令検出部１２によって分岐命令が検出され、その分岐命令について分岐予測部１６によって分岐予測がされた場合、分岐予測状態を示す所定値“１”となる。
【０１０５】
信号ＢＢＳと信号ＢＰＳを論理反転したものとが、ＯＲ回路１２５に入力される。そして、ＡＮＤ回路１２６に、ＯＲ回路１２５の出力とクロック信号ＣＬＫとが入力される。命令バッファ１１２において、レジスタＡ０〜Ａ３にはクロック信号ＣＬＫが与えられる一方、レジスタＢ０〜Ｂ３には、ＡＮＤ回路１２６の出力であるゲーテッドクロック信号ＧＣＬＫが与えられる。すなわち、信号ＢＢＳが“１”のとき、ＡＮＤ回路１２６はマスクされ、ゲーテッドクロック信号ＧＣＬＫは、実質的にクロック信号ＣＬＫと同一となる。一方、信号ＢＢＳが“０”のとき、信号ＢＰＳの値に応じて、ゲーテッドクロック信号ＧＣＬＫが決定される。具体的には、信号ＢＰＳが“１”、すなわち、分岐予測状態にあるとき、ゲーテッドクロック信号ＧＣＬＫは、実質的にクロック信号ＣＬＫと同一となる一方、信号ＢＰＳが“０”、すなわち、分岐予測状態にないとき、ゲーテッドクロック信号ＧＣＬＫとして“０”が出力される。これにより、レジスタＢ０〜Ｂ３に新たな命令の上書きをするか否かを制御する。
【０１０６】
次に、本実施形態に係る命令バッファ部１１を備えたデータ処理装置が図１３のプログラムを実行するときの動作について図７を参照しながら説明する。なお、図６に示した信号ＢＢＳによって上書きが許可されている場合、図５と同様の動作となるため、ここでは信号ＢＢＳによって上書きが禁止されている場合について説明する。
【０１０７】
サイクルタイムＴ１〜Ｔ８までの動作は、第２の実施形態で説明したとおりである。サイクルタイムＴ９では、前サイクルタイムＴ８で要求された命令アドレス“０１０００”から２バイト分の命令コード“０１Ｂ５”が読み込まれるが、非分岐命令流の命令列を格納する領域への上書きが禁止されているため、このうち前半の命令コード“０１”のみ格納され、命令バッファ状態は“Ｅ１０２Ｃ００１”となる。命令（７）はＥステージで実行されることにより、分岐判定部１７によって分岐予測ミスであったことが検出される。このため、Ｆ１ステージにおいて命令アドレス“０１１１０”からの命令読み込み要求が発行される。
【０１０８】
このように、サイクルタイムＴ９において、第２の実施形態とは異なり、退避させた命令列は上書きされることがない。このため、次のサイクルタイムＴＡにおいて、たとえば、４バイト命令を出力しようとする場合、命令の供給不足問題が生じることがない。
【０１０９】
以上、本実施形態によると非分岐命令流と分岐命令流との格納境界を変更することができるため、たとえば、実行すべきプログラムに応じてその格納境界を最適化することができる。これにより、プログラムのコーディング方法に関わらず、データ処理装置を一定の性能に保つことができる。
【０１１０】
なお、上記説明では、ゲーテッドクロック信号ＧＣＬＫを生成し、これを用いてレジスタＢ０〜Ｂ３への上書きを禁止するか否かを制御しているが、本発明はこれに限定されるものではない。ゲーテッドクロック信号ＧＣＬＫを用いなくとも、たとえば、セレクト信号ＳＢ０〜ＳＢ３によって、レジスタＢ０〜Ｂ３にそれぞれ自己の出力を入力するようにしてもよい。
【０１１１】
（第４の実施形態）
動的分岐予測を行うデータ処理装置の場合、第３の実施形態で説明した、非分岐命令流と分岐先命令流との格納境界の変更を動的に行うことができる。静的分岐予測のヒット率が６０％から８０％程度であるのに対し、動的分岐予測のヒット率は８０〜９０％程度である。すなわち、動的分岐予測は、静的分岐予測よりも予測ヒット率の面で優れており、分岐予測ヒット後の命令供給問題の発生確率（分岐先命令が多く格納されている程問題が発生しない）が比較的低い。したがって、動的分岐予測を行うデータ処理装置では、命令バッファにおける非分岐命令流と分岐先命令流との格納境界の変更を動的に行うことにより、分岐ペナルティ軽減の点でより一層の効果が期待できる。
【０１１２】
図８は、本発明の第４の実施形態に係るデータ処理装置の構成を示す。本実施形態に係るデータ処理装置は、分岐予測部１６として動的分岐予測装置を備えている。以下、図１に示した第１の実施形態に係るデータ処理装置と異なる点についてのみ説明する。
【０１１３】
命令アドレス生成部１８は、命令キャッシュ部１０に要求する命令アドレスを保持するアドレスレジスタ１８１と、前サイクルにおいて命令キャッシュ部１０に要求した命令アドレスを保持するアドレスレジスタ１８２と、命令解読部１３によって解読されている命令の命令アドレスを保持するアドレスレジスタ１８３と、命令語長算出部１９によって算出された命令バッファの先頭に位置する命令の命令語長をアドレスレジスタ１８３に保持された命令アドレスに加算する加算器１８４と、アドレスレジスタ１８２に保持された命令アドレスおよび加算器１８４の演算結果のいずれか一方を選択してアドレスレジスタ１８３に出力するセレクタ１８５とを備えている。
【０１１４】
分岐予測部１６は、分岐命令検出部１２によって分岐命令が検出された場合に、その分岐命令についてのこれまでの分岐予測およびその分岐予測がヒットしたか否かという履歴に基づいて、動的に分岐予測を行う。具体的には、分岐予測部１６は、アドレスレジスタ１８３から命令解読器１３によって解読されている命令の命令アドレスを受け、この命令アドレスが分岐予測テーブル１６１においてタグ１６２として記憶されているか否かを検索し、検索結果に基づいてセレクタ１６３から２ビットの信号ＢＰＳを命令バッファ部１１に出力する。なお、分岐予測テーブル１６１は分岐命令が処理されるたびに更新される。
【０１１５】
信号ＢＰＳに含まれる分岐予測ビットはステートマシンであり、その分岐予測方法は一般的な手法である（Jonny K.F.LeeおよびAlan Jay Smith著、「Branch Prediction Strategies and Branch Target Buffer Design」、IEEE COMPUTER January 1984を参照）。ステートマシンについて簡単に説明すると、分岐予測を２ビットで管理するというものである。具体的には、分岐予測部１６は、分岐予測ビットが“１１”および“１０”の場合、その分岐命令についてＴａｋｅｎ予測を行う一方、分岐予測ビットが“０１”および“００”の場合、その分岐命令についてＮｏｔ−ｔａｋｅｎ予測を行う。
【０１１６】
状態遷移方法についてはいくつかの事例が紹介されている。そのうちの一例を挙げると、分岐予測部１６によってＴａｋｅｎ予測がされ、当該予測がヒットした場合は、分岐予測ビット＝“１１”（ＳｔｒｏｎｇＴａｋｅｎ）として予測管理を継続する。また、分岐予測がミスした場合、現状の分岐予測ビットが“１１”のときは、分岐予測ビット＝“１０”（ＷｅａｋｌｙＴａｋｅｎ）とし、現状の分岐予測ビットが“１０”のときは、分岐予測ビット＝“００”（ＳｔｒｏｎｇＮｏｔ−ｔａｋｅｎ）として予測管理を継続する。同様に、分岐予測部１６によってＮｏｔ−ｔａｋｅｎ予測がされ、当該予測がヒットした場合は、分岐予測ビット＝“００”（ＳｔｒｏｎｇＮｏｔ−ｔａｋｅｎ）として予測管理を継続する。また、分岐予測がミスした場合、現状の分岐予測ビットが“０１”のときは、分岐予測ビット＝“１１”（ＳｔｒｏｎｇＴａｋｅｎ）とし、現状の分岐予測ビットが“００”のときは、分岐予測ビット＝“０１”（ＷｅａｋｌｙＮｏｔ−ｔａｋｅｎ）として予測管理を継続する。なお、ここで説明した２ビットデータを用いた分岐予測管理方法はほんの一例であり、本発明はこれに限定されるものではない。
【０１１７】
一方、図９は、本実施形態に係るデータ処理装置における命令バッファ部１１の内部構成を示す。図６に示した第３の実施形態に係る命令バッファ部１１と比較してわかるように、本実施形態に係る命令バッファ部１１における制御回路１１４は、信号ＢＰＳに代えて信号ＢＰＢの上位１ビットを入力し、そして、ＯＲ回路１１５は、信号ＢＢＳに代えて信号ＢＰＢの下位１ビットを入力する。これにより、レジスタＢ０〜Ｂ３に上書きを許可するか否かを、分岐予測部１６の分岐予測に応じて動的に制御することができる。具体的には、分岐予測がＳｔｒｏｎｇＴａｋｅｎ（信号ＢＢＳ＝“１１”）の場合、レジスタＢ０〜Ｂ３にゲーテッドクロック信号ＧＣＬＫが供給され、命令の上書きが可能となる。一方、分岐予測がＷｅａｋｌｙＴａｋｅｎ（信号ＢＢＳ＝“１０”）の場合、ゲーテッドクロック信号ＧＣＬＫは“０”に固定され、命令の上書きが不可能となる。
【０１１８】
以上、本実施形態によると、動的分岐予測を行うデータ処理装置において、命令バッファにおける非分岐命令流と分岐先命令流との格納境界を動的分岐予測に応じて変更することができる。これにより、より一層の分岐ペナルティ軽減を図ることができる。
【０１１９】
（第５の実施形態）
命令バッファにおける非分岐命令流および分岐先命令流の格納領域の設定について、第３の実施形態では静的に行う方法、第４の実施形態では動的に行う方法を示した。一方で、分岐命令によって分岐が生じるか否かの判定がなされてから、退避させていた非分岐命令流の命令の最読み込み完了までに要するパイプライのステージ数応じて、非分岐命令流の命令列の格納サイズを決定することも可能である。たとえば、データ処理装置が解読可能な最大命令語長が２バイト、かつ、命令の再読み出しに必要なサイクル数が“１”（すなわち、Ｆステージが１段のみ）の場合、１サイクル分の非分岐命令流の命令が退避されていれば、命令の再読み出しに係る分岐ミスペナルティは発生しない。すなわち、非分岐命令流の格納領域として２バイト確保されていれば、命令供給不足による分岐ミスペナルティは発生しない。同様に、命令の再読み出しに必要なサイクル数が“２”（すなわち、Ｆステージが２段）の場合、２サイクル分の非分岐命令流の命令が退避されていれば、命令の再読み出しに係る分岐ミスペナルティは発生しない。すなわち、非分岐命令流の格納領域として４バイト確保されていれば、命令供給不足による分岐ミスペナルティは発生しない。
【０１２０】
これを一般的に考えると、データ処理装置が解読可能な最大命令語長をｍバイト、命令の再読み出しに必要なサイクル数がｋサイクル（すなわち、Ｆステージがｋ段）である場合、非分岐命令流の格納領域としてｋ×ｍバイト確保されていれば、分岐予測ミスの場合でも分岐ミスペナルティは発生しない。さらに、非分岐命令流の最初の命令の命令語長がｎバイト（ｍ＞ｎ）の場合、ｋ×ｍ−（ｍ−ｎ）バイト分の命令が非分岐命令流の格納領域に退避されていれば、分岐ペナルティは発生しない。そこで、上記のとおりの非分岐命令流の格納領域を確保することが可能なデータ処理装置について考える。
【０１２１】
図１０は、本発明の第５の実施形態に係るデータ処理装置の構成を示す。本実施形態に係るデータ処理装置は、図８に示した第４の実施形態に係るデータ処理装置に、有効命令語長算出部２０を設けた構成となっている。以下、第４の実施形態に係るデータ処理装置と異なる点についてのみ説明する。
【０１２２】
有効命令語長算出部２０は、命令バッファ部１１に格納されている命令のうち退避させた非分岐命令流の命令を除く残りのものについての総命令語長を有効命令語長として算出する。たとえば、図８に示したタイムサイクルＴ７において、アクティブな命令バッファ領域は命令コード“Ａ０Ｅ１”が格納されている部分である。したがって、この場合の有効命令語長は２バイトとなる。
【０１２３】
命令バッファ部１１は、有効命令語長算出部２０によって算出された有効命令語長ｌおよび命令語長算出部１９によって算出された命令語長ｎを受けて次の処理を行う。なお、命令バッファ部１１のバッファサイズをｍバイトとする。また、命令語長算出部１９によって算出される命令語長ｎは、ここでは、命令バッファ部１１において退避されている命令列のうち最初に実行すべき命令、すなわち、命令バッファの末尾に位置する命令の命令語長とする。
【０１２４】
命令バッファ部１１は、命令バッファ部１１のバッファサイズｍから有効命令語長算出部２０によって算出された有効命令語長ｌを減じた残りのバイト数（ｍ−ｌ）と、命令語長算出部１９によって算出された命令語長ｎとの比較を行う。そして、（ｍ−ｌ）≧ｎの場合には、命令バッファ部１１は、非分岐命令流の命令の格納を優先すべく、非分岐命令流の格納領域への上書きを禁止する。具体的には、たとえば図６に示した命令バッファ部１１の場合、レジスタ１１４１に“０”を設定する。一方、（ｍ−ｌ）＜ｎの場合には、分岐命令流の命令を続けて格納してもよいため、命令バッファ部１１は、非分岐命令流の格納領域への上書きを禁止する。具体的には、たとえば図６に示した命令バッファ部１１の場合、レジスタ１１４１に“１”を設定する。
【０１２５】
以上、本実施形態によると、退避された非分岐命令流の格納領域として必要最小限のものを確保することができる。これにより、分岐命令流および非分岐命令流の命令を格納するに当たり、有限の命令バッファ領域を最適に割り当てることが可能となる。
【０１２６】
なお、上記説明は、Ｆステージが１段であるという前提で、非分岐命令流において最初に実行される命令の確保を目的としたものであるが、本発明はこれに限定されるものではない。Ｆステージが複数ステージからなる場合は、命令バッファにおいて退避されている命令を、そのステージ数に応じた数だけ確保する必要がある。この場合、命令バッファ部１１は、そのステージ数に応じた関係式に基づいて、非分岐命令流の格納領域に上書きを許可するか否かを制御すればよい。
【０１２７】
（第６の実施形態）
第１から第５の実施形態では、分岐命令が検出された場合に、命令バッファおよびパイプラインがフラッシュされて資源の一部が未使用状態になることに着目し、命令バッファにおいて未使用状態となる領域に非分岐命令流の命令列を退避させている。しかし、フラッシュされる命令バッファに分岐先の命令列が既に先読みによって格納されている場合もある。たとえば、図５に示した例では、サイクルタイムＴＢにおいて、分岐命令（９）（命令コード“５４”）の分岐先の命令列である命令（１１）（命令コード“Ｄ０”）および命令（１２）（命令コード“Ｅ１２１”）が既に命令バッファに格納されている。そこで、既に命令バッファに格納されている分岐先の命令列を再読み出ししなくてもよいように、当該命令列を退避させることが可能なデータ処理装置について考える。
【０１２８】
図１１は、本発明の第６の実施形態に係るデータ処理装置の構成を示す。本実施形態に係るデータ処理装置は、図１に示した第１の実施形態に係るデータ処理装置に、命令語長算出部１９、有効命令語長算出部２０および分岐距離算出部２１を設けた構成となっている。以下、第１の実施形態に係るデータ処理装置と異なる点についてのみ説明する。
【０１２９】
分岐距離算出部２１は、分岐命令検出部１２によって検出された分岐命令から分岐先の命令までの距離を算出する。有効命令語長算出部２０は、第５の実施形態において説明したように、命令バッファ部１１に格納されている命令のうち退避させた非分岐命令流の命令を除く残りのものについての総命令語長を有効命令語長として算出する。また、命令語長算出部１９は、第４の実施形態において説明したように、命令バッファの先頭に位置する命令の命令語長を算出する。
【０１３０】
命令バッファ部１１は、有効命令語長算出部２０によって算出された有効命令語長ｍバイトと、分岐距離算出部２１によって算出された分岐距離ｎバイトとを比較する。そして、ｍ＞ｎのとき、命令バッファに分岐先の命令が既に格納されているため、命令バッファの先頭からｎバイトを非分岐命令流の命令列として退避させるとともに、残りの（ｍ−ｎ）バイトを分岐命令流の命令列として命令バッファの先頭部分にシフトする。
【０１３１】
次に、本実施形態に係るデータ処理装置が図１３のプログラムを実行するときの動作について図１２を参照しながら説明する。なお、前提条件として、本実施形態に係るデータ処理装置は、Ｆ１、Ｆ２、Ｄ１、Ｄ２、Ｅ、Ｍ１およびＭ２の７段のステージに分割されるパイプライン処理を行うものとする。これ以外の前提条件については、第１の実施形態で説明したものと同じとする。
【０１３２】
サイクルタイムＴ１〜Ｔ９までの動作は、第２の実施形態で説明したとおりである。サイクルタイムＴＡでは、退避させていた命令列が命令バッファの先頭部分にシフトされ、また、前サイクルタイムＴ９で要求された命令アドレス“０１１０１”から１バイト分の命令コード“Ｄ０”が読み込まれ、命令バッファ状態は“５４００Ｄ０”となる。そして、命令（１１）がＦ１ステージで実行され、命令アドレス“０１１１０”からの命令読み込み要求が発行される。また、命令バッファの先頭に位置する命令コード“５４”が分岐命令であることが分岐命令検出部１２によって検出される。
【０１３３】
サイクルタイムＴＢでは、有効命令語長算出部２０によって有効命令語長が４バイトであることが算出され、また、分岐距離算出部２１によって分岐距離が２バイトであることが算出される。そして、命令語長算出部１９によって分岐命令（９）の命令語長が１バイトであることが算出されているため、分岐先の命令が命令バッファの先頭から２バイト目以降に格納されていることが検出される。
【０１３４】
そして、サイクルタイムＴＣにおいて、非分岐命令流の命令列（この場合、“００Ｄ０”）を退避させるとともに、命令バッファの先頭部分に、既に格納している分岐命令流の命令列を移動する（この場合、“Ｅ２１２”）。そして、前サイクルタイムＴＢで要求された命令アドレス“１００００”から命令が読み込まれ、命令バッファ状態は“Ｅ２１２Ｃ００２”となる。
【０１３５】
以上、本実施形態のように、命令バッファに先読みして既に格納している分岐先の命令を命令バッファの先頭にシフトすることによって、分岐先の命令を再読み込みしなくてよくなる。これにより、データ処理装置における分岐ペナルティを軽減することができ、処理性能を向上させることができる。
【産業上の利用可能性】
【０１３６】
本発明に係るデータ処理装置は、ハードウェア資源を増大させることなく、命令の先読みによる命令供給不足の問題解消および分岐ペナルティの軽減を実現することができるため、パイプラインプロセッサ、分岐予測装置を有するプロセッサ、スーパスカラープロセッサ、ＶＬＩＷプロセッサ、およびマルチスレッド方式のプロセッサなどに有用である。
【図面の簡単な説明】
【０１３７】
【図１】本発明の第１の実施形態に係るデータ処理装置の構成図である。
【図２】本発明の第１の実施形態に係る命令バッファ部の内部構成図である。
【図３】本発明の第１の実施形態に係るデータ処理装置の動作を説明するための図である。
【図４】本発明の第２の実施形態に係るデータ処理装置における命令バッファ部の内部構成図である。
【図５】本発明の第２の実施形態に係るデータ処理装置の動作を説明するための図である。
【図６】本発明の第３の実施形態に係るデータ処理装置における命令バッファ部の内部構成図である。
【図７】本発明の第３の実施形態に係るデータ処理装置の動作を説明するための図である。
【図８】本発明の第４の実施形態に係るデータ処理装置の構成図である。
【図９】本発明の第４の実施形態に係るデータ処理装置における命令バッファ部の内部構成図である。
【図１０】本発明の第５の実施形態に係るデータ処理装置の構成図である。
【図１１】本発明の第６の実施形態に係るデータ処理装置の構成図である。
【図１２】本発明の第６の実施形態に係るデータ処理装置の動作を説明するための図である。
【図１３】本発明のデータ処理装置によって実行されるプログラム例を示す図である。
【符号の説明】
【０１３８】
１１  命令バッファ部
１２  分岐命令検出部
１６  分岐予測部
１７  分岐判定部
１９  命令語長算出部
２０  有効命令語長算出部
２１  分岐距離算出部
【図１】
2005107666.tif 000003
【図２】
2005107666.tif 000004
【図３】
2005107666.tif 000005
【図４】
2005107666.tif 000006
【図５】
2005107666.tif 000007
【図６】
2005107666.tif 000008
【図７】
2005107666.tif 000009
【図８】
2005107666.tif 000010
【図９】
2005107666.tif 000011
【図１０】
2005107666.tif 000012
【図１１】
2005107666.tif 000013
【図１２】
2005107666.tif 000014
【図１３】
2005107666.tif 000015