(57)【要約】 【課題】  命令キューと復帰先命令キューを連携させるための制御を簡単にする。【解決手段】  分岐予測を行なう情報処理装置は、命令キューと復帰先命令キューに割当てられ命令ストリーム毎にアドレスポインタが管理されるキューイングバッファ（２３）とその制御部（２１）を有し、制御部は、予測方向命令ストリームと非予測方向命令ストリームをキューイングバッファに格納し、分岐予測の失敗に応答して、実行対象とする命令ストリームをキューイングバッファ内の予測方向命令ストリームから非予測方向命令ストリームに切り換える。バッファ領域（Ｑａ１、Ｑｂ）を命令キューとするときバッファ領域Ｑａ２を復帰用命令キューとし、バッファ領域を命令キューとするときバッファ領域Ｑａ１を復帰用命令キューとする。命令キューと復帰先命令キューを固定的に個別化することなくストリーム管理によって分岐予測失敗時の非予測方向命令列の復帰動作を実現する。【選択図】        図１
2005078234.tif 000002
【特許請求の範囲】
【請求項１】
分岐予測を行なう情報処理装置であって、命令キューと復帰先命令キューに割当てられ命令ストリーム毎にアドレスポインタが管理されるキューイングバッファとその制御部を有し、
前記制御部は、予測方向命令ストリームと非予測方向命令ストリームをキューイングバッファに格納し、分岐予測の失敗に応答して、実行対象とする命令ストリームをキューイングバッファ内の予測方向命令ストリームから非予測方向命令ストリームに切り換えることを特徴とする情報処理装置。
【請求項２】
前記キューイングバッファは、同じ物理アドレスが割り付けられた第１の記憶領域と第２の記憶領域を有し、前記第１の記憶領域と第２の記憶領域は、相互に一方を命令キュー、他方を復帰先命令キューとする割当てが切換え可能にされることを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記第１の記憶領域と第２の記憶領域の夫々に割り付けられる物理アドレスに連続する物理アドレスが割り付けられる第３の記憶領域を有し、前記第３の記憶領域は命令キューに割当てられた前記第１の記憶領域又は第２の記憶領域に連続する命令キューの一部に割当てられることを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記制御部は、分岐予測が非分岐のときは復帰先命令キューに非予測方向命令ストリームを格納することを特徴とする請求項１記載の情報処理装置。
【請求項５】
前記制御部は、分岐予測が分岐のときは命令キューの空きに非予測方向命令ストリームを格納することを特徴とする請求項４記載の情報処理装置。
【請求項６】
前記制御部は、非予測方向命令ストリームが復帰先命令キューにあるとき、分岐予測の失敗に応答して、復帰先命令キューを命令キューに、命令キューを復帰先命令キューに割り当てを切り換えることを特徴とする請求項５記載の情報処理装置。
【請求項７】
前記制御部は、非予測方向命令ストリームが命令キューの空き領域にあるとき、分岐予測の失敗に応答して、当該空き領域が保有する非予測方向命令ストリームを、実行すべき命令ストリームとし、当該非予測方向命令ストリームに続けて予測方向命令ストリームを格納することを特徴とする請求項６記載の情報処理装置。
【請求項８】
命令キューのアドレスポインタか復帰先命令キューのアドレスポインタかを示すための書換え可能なフラグ手段をアドレスポインタと対で有することを特徴とする請求項７記載の情報処理装置。
【請求項９】
キューイングバッファに格納される非予測方向命令ストリームとその予測に係る分岐命令とを対応付ける情報を保持する記憶手段を有することを特徴とする請求項７記載の情報処理装置。
【請求項１０】
前記記憶手段は、キューイングバッファに格納される非予測方向命令ストリームの識別情報を分岐命令の実行順に格納する復帰命令ストリーム番号キューであることを特徴とする請求項９記載の情報処理装置。
【請求項１１】
分岐予測を行なう情報処理装置であって、命令キューと復帰先命令キューに割当てられ命令ストリーム毎にアドレスポインタが管理されるキューイングバッファとその制御部を有し、
前記制御部は、予測方向命令ストリームを命令キューに格納し、分岐予測が非分岐のときは復帰先命令キューに非予測方向命令ストリームを格納し、分岐予測が分岐のときは命令キューの空きに非予測方向命令ストリームを格納することを特徴とする情報処理装置。
【請求項１２】
前記制御部は、分岐予測の失敗に応答して、実行対象とする命令ストリームをキューイングバッファ内の予測方向命令ストリームから非予測方向命令ストリームに切り換えることを特徴とする請求項１１記載の情報処理装置。
【請求項１３】
前記制御部は、非予測方向命令ストリームが復帰先命令キューにあるとき、分岐予測の失敗に応答して、復帰先命令キューを命令キューに、命令キューを復帰先命令キューに割り当てを切り換えることを特徴とする請求項１２記載の情報処理装置。
【請求項１４】
前記制御部は、非予測方向命令ストリームが命令キューの空き領域にあるとき、分岐予測の失敗に応答して、当該空き領域が保有する非予測方向命令ストリームを、実行すべき命令ストリームとし、当該非予測方向命令ストリームに続けて予測方向命令ストリームを格納することを特徴とする請求項１３記載の情報処理装置。
【請求項１５】
命令キューのアドレスポインタか復帰先命令キューのアドレスポインタかを示すための書換え可能なフラグ手段をアドレスポインタと対で有することを特徴とする請求項１４記載の情報処理装置。
【請求項１６】
キューイングバッファに格納される非予測方向命令ストリームとその予測に係る分岐命令とを対応付ける情報を保持する記憶手段を有することを特徴とする請求項１１記載の情報処理装置。
【請求項１７】
前記記憶手段は、キューイングバッファに格納される非予測方向命令ストリームの識別情報を分岐命令の実行順に格納する復帰命令ストリーム番号キューであることを特徴とする請求項１６記載の情報処理装置。
【請求項１８】
前記命令ストリームの始点となる命令にはリセット後に実行開始する命令と分岐先命令を含み、前記命令ストリームの終点となる命令には無条件分岐命令と分岐する予測の条件分岐命令を含むことを特徴とする請求項1乃至１７の何れか１項記載の情報処理装置。
【請求項１９】
前記キューイングバッファとその制御部は中央処理装置の命令制御部に配置されることを特徴とする請求項１乃至１８の何れか１項記載の情報処理装置。
【請求項２０】
前記中央処理装置に接続された命令キャッシュメモリを有し、半導体チップに形成されたことを特徴とする請求項１９記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置、特に分岐予測を行う情報処理装置における命令フェッチ及び予測方向の投機命令実行の制御に関し、例えば半導体集積回路化されたデータプロセッサ若しくはマイクロコンピュータに適用して有効な技術に関する。
【背景技術】
【０００２】
分岐予測による命令プリフェッチ技術として、命令キューに予測側の命令列を格納する技術が有る。命令キューに対するリード／ライトポインタ管理は制御装置が行なう。分岐予測が失敗した時は、復帰先の命令をプログラムメモリ等からフェッチして命令デコーダに供給しなければならない。これにより、分岐予測が失敗した後の復帰先の命令フェッチ操作という点で、分岐予測失敗によるペナルティが大きくなり、効率が悪い。
【０００３】
この種の命令プリフェッチ技術について特許文献１に記載がある。ここでは、分岐予測バッファと呼ばれる小バッファが、分岐予測失敗の時に、命令キャッシュから要求される可能性のある命令のグループを記憶する。分岐予測失敗のとき、目標アドレスに対応する命令が使用可能かどうかを確認するために、分岐予測バッファがチェックされる。使用可能な場合、これらの命令が適切なバッファにコピーされる。目標アドレスに対応する命令が使用不能な場合、これらの命令が命令キャッシュからフェッチされ、バッファ及び選択的に分岐予測バッファに配置される。
【０００４】
更に命令キューと共に復帰先命令キューを採用する技術も有る。命令キューには予測側の命令列を格納し、復帰先命令キューには非予測側の命令列を格納する。復帰先命令キューのリード／ライトポインタと命令キューのリード／ライトポインタは別々に管理される。分岐予測が失敗の時は、復帰先命令キューから復帰先の命令列を命令デコーダに供給する。復帰先命令キューから命令デコーダへの命令の供給に並行して、続行すべき命令列をフェッチして命令キューに格納する。復帰先命令キューが保有する復帰先の命令が尽きたとき、命令デコーダへの命令供給元を命令キューに切換え制御する。
【０００５】
【特許文献１】特開平０７−７３１０４号公報（図２）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、命令キューと共に復帰先命令キューを採用する上記技術においても、分岐予測失敗時に命令キューと復帰先命令キューを連携させるための夫々のリード／ライトポインタの操作が煩雑であり、そのための制御論理も複雑化し、ポインタ管理が効率的ではない。このことは、分岐予測が失敗したとき、復帰動作にかかるサイクル数が命令実行性能に影響を及ぼすことになる。
【０００７】
本発明の目的は、命令キューと復帰先命令キューを連携させるための制御が簡単になる情報処理装置を提供することにある。
【０００８】
本発明の別の目的は、分岐予測が失敗したとき、復帰動作にかかるサイクル数を少なくでき、命令実行性能を向上させることができる情報処理装置を提供することにある。
【０００９】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１０】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１１】
〔１〕分岐予測を行なう情報処理装置は、命令キュー（ＩＱＵＥ）と復帰先命令キュー（ＲＢＵＦ）に割当てられ命令ストリーム毎にアドレスポインタ（ｒｐｉ，ｗｐｉ）が管理されるキューイングバッファ（２３）とその制御部（２１）を有し、前記制御部は、予測方向命令ストリームと非予測方向命令ストリームをキューイングバッファに格納し、分岐予測の失敗に応答して、実行対象とする命令ストリームをキューイングバッファ内の予測方向命令ストリームから非予測方向命令ストリームに切り換える。
【００１２】
前記命令ストリームの始点となる命令は例えばリセット後に実行開始する命令と分岐先命令であり、前記命令ストリームの終点となる命令は例えば無条件分岐命令と分岐する予測の条件分岐命令である。
【００１３】
前記キューイングバッファは、例えば同じ物理アドレスが割り付けられた第１の記憶領域（Ｑａ１）と第２の記憶領域（Ｑａ２）を有し、前記第１の記憶領域と第２の記憶領域は、相互に一方を命令キュー、他方を復帰先命令キューとする割当てが切換え可能にされる。更に、前記第１の記憶領域と第２の記憶領域の夫々に割り付けられる物理アドレスに連続する物理アドレスが割り付けられる第３の記憶領域（Ｑｂ）を有し、前記第３の記憶領域は命令キューに割当てられた前記第１の記憶領域又は第２の記憶領域に連続する命令キューの一部に割当てられるようにしてもよい。
【００１４】
前記キューイングバッファは命令ストリーム毎にアドレスポインタが管理されるから、実行対象とする命令ストリームをキューイングバッファ内の予測方向命令ストリームから非予測方向命令ストリームに切り換えるとき、キューイングされている命令を読み出すのに用いるアドレスポインタを、使用する命令ストリームのアドレスポインタに切り換えるだけでよい。切り換えられたアドレスポインタはその時点で予測方向命令ストリームのアドレスポインタとなり、予測方向命令ストリームの格納を継続するには当該アドレスポインタを続けてもちいればよい。これにより、命令キューと復帰先命令キューを連携させるための制御が簡単になり、また、分岐予測が失敗したとき、復帰動作にかかるサイクル数を少なくでき、命令実行性能を向上させることが可能になる。
【００１５】
本発明の具体的な態様として、前記制御部は、分岐予測が非分岐のときは復帰先命令キューに非予測方向命令ストリーム（つまり分岐した場合の分岐先命令ストリーム）を格納する。一方、分岐予測が分岐のときは命令キューの空きに非予測方向命令ストリームを格納すればよい。命令キューの空きとは、当該分岐予測が分岐とされる分岐命令の属する命令ストリームに係る記憶領域である。要するに、分岐予測が分岐なのでこの予測に従って命令プリフェッチアドレスを分岐先に変更することになるが、この予測には少なくとも当該分岐命令のプリデコードを必要とするから、当該分岐命令のプリフェッチ以降、予測までの間に先行してプリフェッチが要求された命令（非予測方向命令ストリームの一部である非予測方向の命令列）も命令キューに格納する。そのため分岐予測が分岐のときの非予測方向命令ストリームの格納にあえて復帰用命令キューの記憶段を割くことを要しない。
【００１６】
前記制御部は、非予測方向命令ストリームが復帰先命令キューにあるとき、分岐予測の失敗に応答して、復帰先命令キューを命令キューに、命令キューを復帰先命令キューに割り当てを切り換える。一方、非予測方向命令ストリームが命令キューの空き領域にあるときは、分岐予測の失敗に応答して、当該空き領域が保有する非予測方向命令ストリームを、実行すべき命令ストリームとし、当該非予測方向命令ストリームに続けて予測方向命令ストリームを格納する。命令キューのアドレスポインタか復帰先命令キューのアドレスポインタかを示すための書換え可能なフラグ手段をアドレスポインタと対で有することにより、命令キューと復帰先命令キューに分けて夫々に専用のアドレスポインタを設けることを要しない。
【００１７】
キューイングバッファに格納される非予測方向命令ストリームとその予測に係る分岐命令とを対応付ける情報を保持する記憶手段を設けることにより、複数の非予測方向命令ストリームが存在する場合にも対処が容易である。例えば非予測方向命令ストリームの格納領域は命令キューの空き領域と復帰先命令キューの双方とされる場合である。更に具体的な形態では、前記記憶手段は、キューイングバッファに格納される非予測方向命令ストリームの識別情報を分岐命令の実行順に格納する復帰命令ストリーム番号キューである。
【００１８】
前記キューイングバッファとその制御部は例えば中央処理装置の命令制御部に配置される。情報処理装置は、例えば前記中央処理装置に接続された命令キャッシュメモリを有し、半導体チップに形成される。
【００１９】
ここで、上記情報処理装置による分岐予測による命令プリフェッチの全体的な作用を説明する。条件分岐において分岐方向が予測される。予測方向の命令列は命令キューに格納される。分岐方向を予測する以前に命令フェッチ要求を出していた分岐しない（ｎｔｋｎ）方向の命令列は、命令キューに格納され、分岐する（ｔｋｎ）予測時の復帰先命令とされ、その命令ストリームは復帰先命令ストリームとされる。分岐しない予測（ｎｔｋｎ）の時は、非予測側であるｔｋｎ側の命令列に対するフェッチ要求を出して復帰先命令キューに格納し、その命令列を復帰先命令ストリームとする。条件分岐と予測失敗時の復帰先命令列を格納するストリーム番号との対応は、条件分岐命令の実行順に復帰先命令ストリーム番号キューに格納する。条件分岐命令の実行時に分岐条件判定を行い、予測失敗の時は予測が失敗した分岐に対応する復帰先命令ストリーム番号を発行する。復帰先命令ストリームが命令キューにある時は命令キューから復帰先命令が命令デコーダに供給される。復帰先命令ストリームが復帰先命令キューにある場合は、復帰先命令キューと命令キューを入れ替えて復帰先命令ストリームを格納するキューを命令キューとし、命令キューから復帰先命令が命令デコーダに供給される。以後、復帰先命令に続行する命令のフェッチと命令デコーダへの命令供給が、ストリーム管理で行えるようになる。
【００２０】
〔２〕本発明の別に観点によると、分岐予測を行なう情報処理装置は、命令キューと復帰先命令キューに割当てられ命令ストリーム毎にアドレスポインタが管理されるキューイングバッファとその制御部を有し、前記制御部は、予測方向命令ストリームを命令キューに格納し、分岐予測が非分岐のときは復帰先命令キューに非予測方向命令ストリームを格納し、分岐予測が分岐のときは命令キューの空きに非予測方向命令ストリームを格納する。
【発明の効果】
【００２１】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００２２】
即ち、命令キューと復帰先命令キューを固定的に個別化することなくストリーム管理によって分岐予測失敗時の非予測方向命令列の復帰動作を実現するから、命令キューと復帰先命令キューを連携させるための制御を簡単にすることができる。さらに、分岐予測が失敗したとき、復帰動作にかかるサイクル数を少なくでき、命令実行性能を向上させることができる。
【発明を実施するための最良の形態】
【００２３】
図２には本発明の一例に係る半導体データプロセッサもしくはマイクロコンピュータ等とも称されるマイクロプロセッサ１が示される。同図に示されるマイクロプロセッサ１は、例えばＣＭＯＳ集積回路製造技術によって単結晶シリコンのような１個の半導体基板に形成される。
【００２４】
マイクロプロセッサ１は、中央処理装置（ＣＰＵ）２、命令キャッシュメモリ（ＩＣＡＣＨ）３、データキャッシュメモリ（ＤＣＡＣＨ）４、バスステートコントローラ（ＢＳＣ）５、ダイレクトメモリアクセスコントローラ（ＤＭＡＣ）６、割込みコントローラ（ＩＮＴＣ）７、クロックパルスジェネレータ（ＣＰＧ）８、タイマユニット（ＴＭＵ）９、及び外部インタフェース回路（ＥＸＩＦ）１０を有する。外部インタフェース回路（ＥＸＩＦ）１０には外部メモリ（ＥＸＭＥＭ）１３が接続される。
【００２５】
前記ＣＰＵ２は命令制御部（ＩＣＮＴ）１１と実行部（ＥＸＥＣ）１２を有する。ＩＣＮＴ１１は分岐予測を行なってＩＣＡＣＨ３から命令をフェッチし、フェッチした命令をデコードしてＥＸＥＣ１２を制御する。ＥＸＥＣ１２は図示を省略する汎用レジスタ及び演算器などを有し、ＩＣＮＴ１１から供給される制御信号や制御データを用いてアドレス演算やデータ演算を行なって命令を実行する。命令実行に必要なオペランドデータ等はＤＣＡＣＨ４又は外部メモリ１３等から読み込まれる。ＩＣＡＣＨ３に一時的に保持される命令はＥＸＩＦ１０を介して外部メモリ（ＥＸＭＥＭ）１３から読み込まれる。ここでは、ＣＰＵ２は２ウェイのスーパースカラ構成を有する。
【００２６】
図３には前記命令制御部１１の一例が示される。命令フェッチ制御部２１は分岐予測を行なって命令フェッチの制御を行なう。命令フェッチ制御部２１による制御でＩＣＡＣＨ３から読み出された命令はプリデコーダ２２、キューイングバッファ２３及び命令デコーダ２４に供給される。ＩＣＡＣＨ３からの命令読み出しは、特に制限されないが、４命令単位で行なわれる。ＩＣＡＣＨ３から読み出される命令数４とＣＰＵ２で一度に実行される命令数２との差の２命令はキューイングバッファ２３の命令キューに蓄えられる。実行すべき命令がキューイングバッファ２３の命令キューに保持されているときは命令キューから出力される命令が命令デコーダ２４に供給される。非予測方向の命令ストリームはキューイングバッファ２３が持つ復帰先命令キュー等に格納される。キューイングバッファ２３をＦＩＦＯ動作させるアドレスポインタ（リードアドレスポインタ及びライトアドレスポインタ）の管理は命令フェッチ制御部２１の命令ストリーム管理部３０が行ない、ここでは命令ストリーム毎にアドレスポインタを管理する。プリデコーダ２２はＩＣＡＣＨ３から出力される命令をプリデコードして分岐命令の存否や分岐命令の種類を予め判定する。その判定結果は命令フェッチ制御部２１に与えられる。命令フェッチ制御部２１は、過去に実行された分岐命令毎に分岐の履歴情報を有する分岐予測器２０を参照して分岐予測方向を決定し、分岐予測方向の命令ストリームと非予測方向の命令ストリームを取り込むためのキューイングバッファ２３のアドレスポインタ管理とメモリアクセス制御、復帰先命令ストリーム番号キュー２５のアドレスポインタ管理等を行なう。復帰先命令ストリーム番号キュー２５はキューイングバッファ２３に格納されている非予測方向命令ストリームの識別情報（ストリーム番号）を分岐命令の実行順に格納する。当該分岐命令の分岐条件などが確定するのは当該分岐命令の実行ステージとされるのがほとんどであり、分岐予測が失敗したか否かはその段階で明らかになる。分岐予測結果判定部２６はＥＸＥＣ１２における演算結果などに基づいて分岐予測が失敗したか否かを判定する。命令フェッチ制御部２１は分岐予測の失敗を検出すると、キューイングバッファ２３から命令デコーダ２４に供給する命令を非予測方向命令ストリームの命令に切り換える。このとき、キューイングバッファ２３に保持されている非予測方向命令ストリームが複数ある場合にどの非予測方向命令ストリームを実行命令ストリーム（ＣＰＵが実行すべき命令ストリーム）に切り換えればよいかは、復帰先命令ストリーム番号キュー２５の出力を分岐予測結果判定部２６が認識してそのストリーム番号を命令フェッチ制御部２１に伝えることによって、復帰先の命令ストリーム番号が解る。
【００２７】
図１にはキューイングバッファ２３と命令ストリーム管理部３０の詳細が例示される。キューイングバッファ２３は３分割されたバッファ領域Ｑａ１，Ｑａ２，Ｑｂを有する。バッファ領域Ｑａ１とバッファ領域Ｑａ２は、夫々ｍ個のエントリ（ＦＩＦＯエントリ）を持ち、各エントリには物理アドレスとしての０〜ｍ−１の番号（エントリアドレス）が割り付けられている。バッファ領域Ｑｂは、ｎ−ｍ個（ｎ≧ｍ）のエントリを持ち、各エントリには物理アドレスとしてのｍ〜ｎ−１の番号（エントリアドレス）が割り付けられている。バッファ領域Ｑａ１，Ｑａ２，Ｑｂをキューイングバッファ即ちＦＩＦＯ（First in-First out）として利用するための命令読み出し用のリードポインタｒｐｉと書き込み用のライトポインタｗｐｉ（ｉ＝０〜Ｘ）は、命令ストリーム毎に持つことができるようになっている。命令ストリーム毎のリードポインタｒｐｉ及びライトポインタｗｐｉ（単にアドレスポインタｒｐｉ，ｗｐｉとも記す）は、命令ストリーム管理部３０で制御される。リードポインタｒｐｉとライトポインタｗｐｉは、夫々最大でバッファ領域Ｑａ１とＱｂ又はＱａ２とＱｂのエントリアドレス０〜ｎ−１にあるｎ個のエントリを指すことができる。リードポインタｒｐｉ及びライトポインタｗｐｉの値に対するインクリメントなどのアドレス演算は図示を省略する演算器で行なわれ、演算されたリードポインタｒｐｉ及びライトポインタｗｐｉの値はバッファ領域Ｑａ１，Ｑａ２，Ｑｂ毎に専用アドレス線ＡＤＲａ１，ＡＤＲａ２，ＡＤＲｂで与えられる。バッファ領域Ｑａ１，Ｑａ２，Ｑｂは、Ｑａ１とＱｂを連続する一つの命令キューＩＱＵＥとして用いるときＱａ２は復帰先命令キューＲＢＵＦとして用いられ、Ｑａ２とＱｂを連続する一つの命令キューＩＱＵＥとして用いるときＱａ１が復帰先命令キューＲＢＵＦとして用いられる。
【００２８】
アドレスポインタｒｐｉ，ｗｐｉがバッファ領域Ｑａ１を用いるキューに対応されるのか、バッファ領域Ｑａ２を利用するキューに対応されるのかを示すためにアドレスポインタｒｐｉ，ｗｐｉと対でフラグＦＬＧｉが設けられている。例えばＦＬＧｉ＝１でＱａ１側、ＦＬＧｉ＝０でＱａ２側に対応されることを意味する。更にバッファ領域Ｑａ１又はＱａ２の何れが復帰用命令キューに割当てられているかを示すフラグＦＬＧｒｃが設けられている。例えばＦＬＧｒｃ＝１でＱａ１、ＦＬＧｒｃ＝０でＱａ２が復帰用命令キューであることを意味する。命令ストリーム管理部３０は、前記フラグＦＬＧｉとＦＬＧｒｃにより、最大でＸ＋１個の命令ストリーム毎のアドレスポインタｒｐｉ，ｗｐｉが命令キューのアドレスポインタか復帰先命令キューのアドレスポインタかを認識することができる。
【００２９】
マルチプレクサ３１は選択信号ＳＥＬ１によりバッファ領域Ｑａ１又はＱａ２の一方の出力を選択する。マルチプレクサ３１の出力又はバッファ領域Ｑｂの出力は選択信号ＳＥＬ２によりマルチプレクサ３２で選択され、マルチプレクサ３２の出力が命令デコーダ２４に供給される。
【００３０】
図４にはバッファ領域Ｑａ１とＱｂで命令キューＩＱＵＥを構成し、バッファ領域Ｑａ２をｍ個のエントリを持つ復帰先命令キューＲＢＵＦとして使用する状態を示す。予測方向命令ストリームは命令キューＩＱＵＥに格納され、ｎｔｋｎ予測の時の非予測方向命令ストリームは復帰先命令キューＲＢＵＦに格納される。ｎｔｋｎ予測が失敗した時、命令キューＩＱＵＥと復帰先命令キューＲＢＵＦの割り当ては図４から図５のように切り換えられる。バッファ領域Ｑａ２とＱｂが連続したｎ個のエントリを持つ命令キューＩＱＵＥとされ、バッファ領域Ｑａ２に格納されている非予測方向命令ストリームが復帰先命令ストリームとして命令デコーダ２４に供給される。図４から図５に状態への切換えは前記フラグＦＬＧｒｃの値に反映される。
【００３１】
図６の命令ストリームを一例として命令ストリーム管理部３０によるストリーム管理の具体例を説明する。
【００３２】
先ず、命令フェッチ制御部２１は、命令ストリームの始点と終点を下記のように定義する。命令ストリームの始点は、リセット後に実行開始する命令、分岐先の命令とする。命令ストリームの終点は、無条件分岐命令、ｔｋｎ予測の条件分岐命令とする。
【００３３】
命令フェッチ制御部２１は、プリデコーダ２２のプリデコード結果に基づいて命令ストリームの始点と終点を検出する。図６の例では、命令列先頭のＳＴＡＲＴ：をリセット後に実行開始する命令アドレスとすると、命令フェッチ制御部２１は命令ＩＳＲ１以降の命令列を命令ストリーム０として管理する。プリデコード結果によって命令フェッチ制御部２１が無条件分岐命令αを検出すると、命令αを命令ストリーム０の終点とする。無条件分岐命令αの分岐先は、命令ＩＳＲ２である。命令フェッチ制御部２１は、命令ＩＳＲ２以降を命令ストリーム１として管理する。命令フェッチ制御部２１は、プリデコード結果によって条件分岐命令βを検出すると、分岐予測器２０を参照して動的分岐予測を行う。ここでは条件分岐命令βの分岐予測結果を「ｎｔｋｎ予測」とする。ｎｔｋｎ予測の条件分岐命令はストリームの終点としないため、命令フェッチ制御部２１は条件分岐命令β以降の命令列も命令ストリーム１として管理する。命令フェッチ制御部２１が条件分岐命令γを検出すると、条件分岐命令βと同様にして分岐予測器２０を参照して動的分岐予測を行う。ここでは条件分岐命令γの分岐予測結果を「ｔｋｎ予測」とする。ｔｋｎ予測の遅延条件分岐命令はストリームの終点なので、命令フェッチ制御部は命令γを命令ストリーム１の終点とする。
【００３４】
図７は２命令同時フェッチ、１命令実行の場合の命令フェッチと命令実行のパイプライン動作の一例を示す。上記、図６の「ｔｋｎ予測」の時、図７に示すように、条件分岐命令γのプリデコード（ＰＤ）と分岐予測を行うまでに、条件分岐命令γの続行命令ＩＳＲ３以降の命令フェッチ要求が出ており、ＩＣＡＣＨ３から入力された命令ＩＳＲ３以降の命令は、命令ストリーム１の後ろに格納される。遅延分岐命令γの分岐先は、命令ＩＳＲ４である。命令フェッチ制御部２１は、命令ＩＳＲ４以降を命令ストリーム２として管理する。
【００３５】
図８は、図６の命令ストリーム０〜３を命令キューＩＱＵＥと復帰先命令キューＲＢＵＦに格納している例である。ここでは、各バッファ領域はＱａ１，Ｑａ２，Ｑｂのサイズは、各ライン４エントリで合計４ライン（合計１６エントリ、１６命令格納可能）有るものとする。バッファ領域Ｑａ１とＱｂが命令キューＩＱＵＥであり、バッファ領域Ｑａ２が復帰先命令キューＲＢＵＦであるとき、命令ストリーム０〜２はバッファ領域Ｑａ１、Ｑｂに、命令ストリーム３はバッファ領域Ｑａ２に格納する。条件分岐命令βがまだＩＤステージに発行されていない場合は、２つの条件分岐命令β、γについて命令フェッチに関し投機実行している状態となる。この時、復帰先命令ストリーム番号キュー２５には、図９に例示されるように、最初に実行される条件分岐命令βの予測がはずれた場合の復帰先となる命令ストリーム番号３（＃３）と、２番目に実行される条件分岐命令γの予測がはずれた場合の復帰先となる命令ストリーム番号１（＃１）が入る。図１の命令ストリーム管理部３０が命令ストリームを４本管理可能な場合、最大３つの分岐命令について、命令フェッチに関し投機実行することができる。要するに、最大３つの分岐命令の夫々の非予測方向命令ストリームをキューイングバッファ２３に格納することができる、ということである。
【００３６】
ここで、命令キューＩＱＵＥと復帰先命令キューＲＢＵＦが図８の状態になっているとき、アドレスポインタｒｐｉ，ｗｐｉの状態について説明する。命令キューＩＱＵＥのエントリアドレスは左上エントリのＡ０から右下エントリのＡ３１とし、復帰先命令キューＲＢＵＦのエントリアドレスは左上エントリのＡ０から右下エントリのＡ１５とする。命令キューＩＱＵＥからの命令フェッチは命令ストリーム２の途中アドレスＡ３０まで、命令デコードは命令ストリーム０の途中アドレスＡ１まで進んでいるとする。このとき、命令ストリーム０に対応するアドレスポインタはｒｐ０＝Ａ１、ｗｐ０＝Ａ２になる。命令ストリーム１に対応するアドレスポインタはｒｐ１＝Ａ４、ｗｐ１＝Ａ１６になる。命令ストリーム２に対応するアドレスポインタはｒｐ２＝Ａ２０、ｗｐ２＝Ａ３０になる。命令ストリーム３に対応するアドレスポインタはｒｐ３＝Ａ０、ｗｐ３＝Ａ３になる。
【００３７】
図１０には命令フェッチ制御部２１による上記命令ストリーム制御の手順が示される。外部メモリからの命令フェッチの指示により命令制御部１１に命令が入力されると（Ｓ１）、その命令がプリデコードされる（Ｓ２）。プリデコードされた命令が条件分岐命令でなければ、次の命令フェッチの指示を待つ。プリデコードされた命令が条件分岐命令のときは、分岐予測を行なう（Ｓ３）。ｔｋｎ予測の場合、命令キューのストリームを復帰先、即ち非予測方向命令ストリームとして命令キューＩＱＥの空きに格納する。予測方向である分岐先の命令ストリームは、命令キューＩＱＵＥの別の空きに格納する（Ｓ４）。一方、ｎｔｋｎ予測の場合、復帰先命令キューＲＢＵＦに格納する復帰先命令列のフェッチ要求を出し（Ｓ５）、復帰先命令キューＲＢＵＦに復帰先命令ストリームである非予測方向命令ストリームを格納する（Ｓ６）。その後、予測方向（ここではｎｔｋｎ予測）の命令のフェッチ要求を出力し、該要求された命令を命令キューＩＱＥに格納する。
【００３８】
ｔｋｎ予測及びｎｔｋｎ予測の何れにおいても、命令実行により予測成功であることが認識されたときは、予測成功に係る分岐命令を起点とする復帰先命令ストリームを消去する（Ｓ７）。ｔｋｎ予測において、命令実行により予測失敗であることが認識されたときは、予測失敗に係る分岐命令を起点とする復帰先命令ストリーム以外を消去する（Ｓ８）。ｎｔｋｎ予測において、命令実行により予測失敗であることが認識されたときは、予測失敗に係る分岐命令を起点とする復帰先命令ストリーム以外を消去し、バッファ領域Ｑａ１とＱａ２の機能を切り換える（Ｓ９）。
【００３９】
図１１には分岐予測失敗時における復帰先命令キューによる効果が例示される。例えば予測失敗の条件分岐命令のデコード（ｔ０）から予測結果の判定に３サイクル要するとすれば、復帰先命令キューがなければ、予測結果失敗の判定結果を得た時点（ｔ１）から復帰先命令をフェッチしなければならず、命令フェッチに２サイクル要すると、復帰先命令のデコードまで（ｔ２）に合わせて５サイクルのペナルティーサイクルが発生する。これに対し、非予測方向命令ストリームが復帰先命令キュー等に格納されていれば、予測結果の失敗判定に応答して復帰先命令キューから復帰先命令を読み出してその命令を命令デコーダに供給することができる。復帰先命令キューにその次に実行すべき命令が少なくとも格納されていれば、時刻ｔ１のサイクルより復帰先命令に続行する命令のフェッチを始めれば、３サイクルのペナルティーサイクルの後、途切れることなく分岐予測失敗に係る命令を順次実行していくことができる。このように、復帰先命令キューを持たない場合に比べて分岐失敗のペナルティを５サイクルから３サイクルに削減することができる。
【００４０】
図１２には図１に対する比較例が示される。復帰先命令キューと命令キューが別個独立に設けられ、これに呼応して命令ストリーム管理部も復帰先命令キューと命令キュー用に別個独立に設けられる。分岐予測が失敗の時は、復帰先命令キューから復帰先の命令列を命令デコーダに供給する。復帰先命令キューから命令デコーダへの命令の供給に並行して、続行の命令列をフェッチして命令キューに格納する。復帰先命令キューに格納している復帰先の命令が尽きると、命令キューから命令を命令デコーダに供給する。命令キューと復帰先命令キューに対するリード／ライトポインタを別々に管理する必要があるため、ポインタ管理が複雑である。図１の構成では、命令キューＩＱＵＥの一部と復帰先命令キューＲＢＵＦを置き換えることで、復帰先命令をその命令ストリームのリードポインタを用いて命令デコーダに供給できる。これにより、命令キューと復帰先命令キューを固定的に個別化することなく、ストリーム管理によって復帰動作を実現できるため、分岐予測失敗時等における制御論理を簡略化でき、処理も高速化できる。
【００４１】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００４２】
例えば、キューイングバッファを構成するバッファ領域の数とそのエントリ容量は適宜変更可能である。ＣＰＵは２ウェイスーパースカラに限定されない。シングルスカラであってもよい。また、マイクロプロセッサにオンチップされる回路モジュールも適宜変更可能である。更に本発明は１チップの情報処理装置に限定されず、マルチチップ構成であってよい。
【００４３】
例えば、復帰先命令キューに格納される命令ストリームは４ライン分格納可能で、４命令ストリーム格納可能となっているが、この格納ライン数、格納命令ストリーム数は適宜変更可能である。
【００４４】
さらに、マイクロプロセッサは、内部にＣＰＵによって実行される命令格納領域、ワーク領域としての内部メモリを有するものであってもよい。
【００４５】
また、マイクロプロセッサ、外部メモリ及びその他図示しない周辺回路を１個の半導体基板に形成するものであってよいし、マイクロプロセッサ、外部メモリ及びその他周辺回路をそれぞれ別の半導体基板に形成し、１個のパッケージに封入されるものであってよい。
【図面の簡単な説明】
【００４６】
【図１】キューイングバッファと命令ストリーム管理部の詳細を例示するブロック図である。
【図２】本発明の一例に係るマイクロプロセッサのブロック図である。
【図３】ＣＰＵが有する命令制御部の一例を示すブロック図である。
【図４】バッファ領域Ｑａ１とＱｂで命令キューを構成し、バッファ領域Ｑａ２をｍ個のエントリを持つ復帰先命令キューとして使用するキューイングバッファの状態を示す説明図である。
【図５】ｎｔｋｎ予測が失敗した時に命令キューと復帰先命令キューの割り当てを切り換えた後のキューイングバッファの状態を示す説明図である。
【図６】命令ストリーム管理部によるストリーム管理の具体例を示す説明図である。
【図７】命令フェッチと命令実行のパイプライン動作の一例を示す説明図である。
【図８】命令キューと復帰先命令キューへの命令ストリームの格納状態を例示する説明図である。
【図９】復帰先命令ストリーム番号キューの説明図である。
【図１０】命令フェッチ制御部による命令ストリーム制御の手順を例示するフローチャートである。
【図１１】分岐予測失敗時における復帰先命令キューによる効果を比較例と共に示す説明図である。
【図１２】図１に対する比較例に係る命令フェッチの構成を概略的に示すブロック図である。
【符号の説明】
【００４７】
１  マイクロプロセッサ
２  ＣＰＵ
３  ＩＣＡＣＨ
１１  ＩＣＮＴ
１２  ＥＸＥＣ
２０  分岐予測器
２１  命令フェッチ制御部
２２  プリデコーダ
２３  キューイングバッファ
２４  命令デコーダ
２５  復帰先命令ストリーム番号キュー
２６  分岐予測結果判定部
３０  命令ストリーム管理部
Ｑａ１、Ｑａ２、Ｑｂ  バッファ領域
ｒｐｉ  リードポインタ
ｗｐｉ  ライトポインタ
ＦＬＧｉ  
ＦＬＧｒｃ  
ＩＱＵＥ  命令キュー
ＲＢＦＦ  復帰用命令キュー
【図１】
2005078234.tif 000003
【図２】
2005078234.tif 000004
【図３】
2005078234.tif 000005
【図４】
2005078234.tif 000006
【図５】
2005078234.tif 000007
【図６】
2005078234.tif 000008
【図７】
2005078234.tif 000009
【図８】
2005078234.tif 000010
【図９】
2005078234.tif 000011
【図１０】
2005078234.tif 000012
【図１１】
2005078234.tif 000013
【図１２】
2005078234.tif 000014