(57)【要約】  命令実行速度を高速化することができるプロセッサ及びプロセッサの命令処理方法を提供する。プロセッサ１は、分岐命令の分岐先情報と、分岐命令がフェッチラインの境界上にあることを示す境界情報とが格納されたＢＴＡＣ１２と、ＢＴＡＣ１２を参照し、分岐命令を含む可変長命令セットの分岐予測を行う分岐予測ユニット１３と、分岐予測結果に基づき命令をフェッチするフェッチユニット１４とを有する。分岐予測ユニット１３は、ＢＴＡＣ１２を参照し、分岐予測ユニット１３にフェッチさせる命令に境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で分岐先情報にしたがって分岐予測先をフェッチさせる。
2012132214.tif 000002
【特許請求の範囲】
【請求項１】
分岐命令を含む可変長命令セットを実行するプロセッサであって、
分岐命令の分岐先情報と、前記分岐命令がフェッチラインの境界上にあることを示す境界情報とが格納された分岐情報テーブルと、
前記分岐情報テーブルを参照し、分岐命令を含む可変長命令セットの分岐予測を行う分岐予測ユニットと、
前記分岐予測結果に基づき命令をフェッチするフェッチユニットとを有し、
前記分岐予測ユニットは、前記分岐情報テーブルを参照し、前記フェッチユニットにフェッチさせる命令に前記境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で前記分岐先情報にしたがって分岐予測先をフェッチさせる、プロセッサ。
【請求項２】
同一サイクルで前記キャッシュの検索及び前記分岐先情報の取得が可能な場合、前記分岐命令がフェッチライン境界上にある場合に当該分岐先情報を一時的に格納するバッファを更に有し、
前記分岐予測ユニットは、前記分岐情報テーブルを参照し、前記フェッチユニットにフェッチさせる命令に前記境界情報がある場合は、前記フェッチユニットが続く次のフェッチラインをフェッチするまで前記分岐先情報を保持する、請求項１記載のプロセッサ。
【請求項３】
前記分岐情報テーブルは、分岐命令の分岐元アドレス、分岐先アドレス、実際に分岐したか否かを示す予測情報、及び前記境界情報を有する、請求項１又は２記載のプロセッサ。
【請求項４】
前記分岐命令は、所定の条件が成立したときのみ分離する条件付き分岐命令である、請求項１乃至３のいずれか１項記載のプロセッサ。
【請求項５】
前記フェッチユニットによりフェッチされた命令を出力する命令メモリと、
前記命令メモリから出力された命令群をデコードするデコードユニットと、
デコードされた命令を実行する実行ユニットとを有し、
前記分岐情報テーブルは、前記実行ユニットから出力される実行アドレス、実行結果、実行先アドレス及びフェッチライン境界情報の情報に基づき更新される、請求項３記載のプロセッサ。
【請求項６】
分岐命令を含む可変長命令セットを実行するプロセッサの命令処理方法であって、
分岐命令の分岐先情報と、前記分岐命令がフェッチラインの境界上にあることを示す境界情報とが格納された分岐情報テーブルを参照し、分岐命令を含む可変長命令セットの分岐予測を行う分岐予測工程と、
前記分岐予測結果に基づき命令をフェッチするフェッチ工程とを有し、
前記分岐予測工程では、前記分岐情報テーブルを参照し、前記フェッチ工程にてフェッチさせる命令に前記境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で前記分岐先情報にしたがって分岐予測先をフェッチさせる、プロセッサの命令処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一度に複数の命令を同時にフェッチ可能であり、可変長命令セットを有するプロセッサ及びその命令処理方法に関し、特に、可変長命令セットを有し、分岐予測を行うことが可能なプロセッサ及びその命令処理方法に関する。
【背景技術】
【０００２】
マイクロプロセッサにおけるパイプライン処理による高速化手法では、命令を途切れなく（ハザードを発生させることなく)実行させることが重要となる。例えば条件分岐命令の場合、条件を満たして分岐が成立するか、不成立するかは実際にその命令を実行するまでわからないため、パイプラインの流れを止める必要がある。これは制御ハザードと呼ばれている。【０００３】
分岐予測は、制御ハザードの影響を小さくするプロセッサの機能である。分岐予測で予測したほうの実行を投機的に開始し、予測した結果が正解であれば、そのまま実行を続け、不正解であれば条件分岐命令以降に実行した命令の結果をすべて破棄する。【０００４】
一般的な分岐予測の技術では、一度実行し、結果が成立だった分岐命令を、ある記憶領域(分岐ターゲットアドレスキャッシュ(ＢＴＡＣ))に覚えておく。図１２は、ＢＴＡＣの構成を示す図である。【０００５】
図１２に示すように、ＢＴＡＣに登録する情報は、実行した条件分岐命令のＰＣ(Program Counter)（分岐元ＰＣ）（ｅ１）、分岐先のＰＣ（ｅ２）、及び予測情報（ｅ３）である。実行した条件分岐命令のＰＣ（ｅ１）は、分岐命令を実行する際に、以前にその分岐命令が実行されたかどうかを知るために登録する。分岐先のＰＣは分岐命令の分岐先の命令をあらかじめフェッチするために必要な情報である。予測情報は登録されている分岐命令が過去に成立したか、不成立だったかを元に、次回当該分岐命令が実行されるときにそれが成立か不成立かの予測を示す情報である。【０００６】
図１３は、ＢＴＡＣへの格納の動作を示すフローチャートである。図１３に示すように、先ず、分岐命令の実行を行う(ステップＳ１１)。次に、実行した分岐命令が成立したか、不成立だったかを確認する(ステップＳ１２)。分岐命令が成立だった場合、ＢＴＡＣへの登録を開始する(ステップＳ１３)。そして、予測情報（ｅ３）に、成立を示す例えば"１"を登録する(ステップＳ１４)。【０００７】
従来の技術としては、例えば、特許文献１には、可変長命令セットにおいて、成立した分岐命令の最後の粒度(末尾)を示すインジケーションを分岐ターゲットアドレスキャッシュ(ＢＴＡＣ)に保存することが示されている。この技術により、ＢＴＡＣ空間を節約し、フラッシュをどこから開始するかを計算する必要性を取り除くことによって性能を改善することが可能である。【０００８】
図１４は、この特許文献１に記載のプロセッサを示す機能ブロック図である。図１４に示すように、プロセッサ１１０は、命令ユニット１１２と、１つ又は複数の実行ユニット１１４とを含む。命令ユニット１１２は、命令側変換索引バッファ（ＩＴＬＢ）１１８によって管理されるメモリアドレス変換及び許可を用いて、命令キャッシュ（命令キャッシュ）１１６から命令をフェッチする。【０００９】
実行ユニット１１４は、命令ユニット１１２によってディスパッチされた命令を実行する。実行ユニット１１４は、汎用レジスタ（ＧＰＲ）１２０からの読出し及びＧＰＲ１２０への書込みを行い、主要変換索引バッファ（ＴＬＢ）１２４によって管理されるメモリアドレス変換及び許可を用いて、データキャッシュ１２２からのデータにアクセスする。データキャッシュ１２２は、Ｌ２キャッシュ１２６と接続され、Ｌ２キャッシュ１２６は、バスインタフェースユニットを介して外部のメモリ１２８と接続さえる。【００１０】
命令ユニット１１２は、パイプラインのフェッチステージ１３２及び復号ステージ１３６を含む。復号ステージ１３６は、検索した命令を復号する。命令ユニット１１２は更に、復号ステージ１３６によって復号された命令を格納するための命令キュー１３８と、キューにされた命令を適切な実行ユニット１１４へディスパッチするための命令割当ユニット１４０とを含む。【００１１】
分岐予測ユニット（ＢＰＵ）１４２は、条件付分岐命令の分岐予測をする。フェッチステージ１３２内の命令アドレスは、命令キャッシュ１１６からの命令のフェッチと並行して、分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）１４４及び分岐履歴テーブル（ＢＨＴ）１４６に提供される。ＢＴＡＣ１４４内でそのアドレスがヒットすれば、そのアドレスの分岐命令は以前成立したことを示し、ＢＴＡＣ１４４は、分岐命令の分岐先アドレスを提供する。ＢＨＴ１４６は、分岐命令の分岐予測が成立したか否かの記録を保持する。ＢＰＵ１４２は、ＢＴＡＣ１４４からのヒット／ミス情報と、ＢＨＴ１４６からの分岐履歴情報とに基づき分岐予測を実施する。【００１２】
図１５は、命令ユニット１１２の分岐予測ユニット（ＢＰＵ）１４２及びフェッチステージ１３２をより詳細に示す機能ブロック図である。フェッチステージ１３２は、様々なソースから命令アドレスを選択するキャッシュアクセスステアリングロジック１４８を含む。また、命令フェッチパイプラインは、フェッチ１ステージ１５０と、フェッチ２ステージ１５２と、フェッチ３ステージ１５４との３つのステージを有する。【００１３】
フェッチ１ステージ１５０及びフェッチ２ステージ１５２は、命令キャッシュ１１６、ＢＴＡＣ１４４、及びＢＨＴ１４６へ同時にアクセスする。フェッチ１ステージ１５０内の命令アドレスは、アドレスに関連する命令が命令キャッシュ１１６内に存在するかを確かめる。また、分岐命令が命令アドレスに関連付けられているかをＢＴＡＣ１４４内のヒット又はミスによって確かめるために、第１のキャッシュアクセスサイクル中、命令キャッシュ１１６及びＢＴＡＣ１４４にアクセスする。続く第２のキャッシュアクセスサイクルで、命令アドレスはフェッチ２ステージ１５２へ移動し、もし命令アドレスがキャッシュ１１６内でヒットすれば、命令キャッシュ１１６からの命令が利用可能であり、もし命令アドレスがＢＴＡＣ１４４内でヒットすれば、ＢＴＡＣ１４４からの分岐ターゲットアドレス（ＢＴＡ）が利用可能となる。もし命令アドレスが命令キャッシ１１６内でミスすれば、命令アドレスは、Ｌ２キャッシュ１２６にアクセスするために、フェッチ３ステージ１５４へ進む。フェッチ３ステージ１５４でフェッチされた命令は復号ステージ１３６に渡される。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特表２０１０−５０１９１３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
ところで、固定長命令セットを処理するプロセッサの場合、フェッチラインの境界上に命令が存在することはないが、可変長命令セットではフェッチラインの境界上に分岐命令が存在する可能性がある。図１６は、分岐命令がフェッチラインの境界上に存在する例を示す図である。フェッチラインの境界上に分岐命令が存在するとは、図１６で示すように、最初のフェッチラインｎ（以降、前側フェッチラインという。）の最後尾に、ある分岐命令の下位側の一部が存在し、次のフェッチラインｎ＋１（以降、後ろ側フェッチラインという。）の先頭位置に、ある分岐命令の残りの部分が存在することをいう。【００１６】
この場合、前側のフェッチラインに合わせて分岐予測を行うと、即座に次フェッチで分岐先をフェッチしてしまうため、後ろ側に存在する分岐命令の一部を読み出すことができない。すなわち、前側をフェッチした段階では、命令のデコード前であるために、対象の分岐命令がフェッチラインの境界上に存在するかどうかが判明しない。したがって、次のフェッチを後ろ側のフェッチラインにするか分岐先フェッチラインにするかの判断ができない（図１７参照）。これを回避するため、分岐命令がフェッチラインをまたぐ可能性のある場合には、常に、後続側のフェッチラインをフェッチする必要がある。したがって、従来技術においては、後ろ側のフェッチラインのフェッチを行うまで、分岐予測ができない。このため、分岐先をフェッチするのに１サイクルのペナルティが生まれるという問題点がある（図１８参照）。
【課題を解決するための手段】
【００１７】
本発明に係るプロセッサは、分岐命令を含む可変長命令セットを実行するプロセッサであって、分岐命令の分岐先情報と、前記分岐命令がフェッチラインの境界上にあることを示す境界情報とが格納された分岐情報テーブルと、前記分岐情報テーブルを参照し、分岐命令を含む可変長命令セットの分岐予測を行う分岐予測ユニットと、前記分岐予測結果に基づき命令をフェッチするフェッチユニットとを有し、前記分岐予測ユニットは、前記分岐情報テーブルを参照し、前記フェッチユニットにフェッチさせる命令に前記境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で前記分岐先情報にしたがって分岐予測先をフェッチさせるものである。【００１８】
本発明に係るプロセッサの命令処理方法は、分岐命令を含む可変長命令セットを実行するプロセッサの命令処理方法であって、分岐命令の分岐先情報と、前記分岐命令がフェッチラインの境界上にあることを示す境界情報とが格納された分岐情報テーブルを参照し、分岐命令を含む可変長命令セットの分岐予測を行う分岐予測工程と、前記分岐予測結果に基づき命令をフェッチするフェッチ工程とを有し、前記分岐予測工程では、前記分岐情報テーブルを参照し、前記フェッチ工程にてフェッチさせる命令に前記境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で前記分岐先情報にしたがって分岐予測先をフェッチさせるものである。【００１９】
本発明においては、分岐命令がフェッチラインの境界上にあることを示す境界情報を有するため、分岐予測ユニットは、フェッチユニットにフェッチさせる命令に境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で分岐先情報にしたがって分岐予測先をフェッチさせることができるため、前側のフェッチラインに分岐予測が紐づけされていても後ろ側フェッチラインを読み出すことができるため、分岐命令を正しくデコードすることができると共に、分岐予測を早いタイミングで実施することができる。
【発明の効果】
【００２０】
本発明によれば、命令実行速度を高速化することができるプロセッサ及びプロセッサの命令処理方法を提供することができる。
【図面の簡単な説明】
【００２１】
【図１】本発明の実施の形態１にかかるプロセッサを示す図である。
【図２Ａ】フェッチライン境界上に分岐命令が存在する場合を示す図である。
【図２Ｂ】フェッチライン境界上に分岐命令が存在する場合を示す図である。
【図２Ｃ】フェッチライン境界上に分岐命令が存在する場合を示す図である。
【図３】本発明の実施の形態１におけるＢＴＡＣ１２（分岐ターゲットアドレスキャッシュ）を示す図である。
【図４】本発明の実施の形態１におけるＢＴＡＣ１２への情報登録方法を示すフローチャートである。
【図５】本発明の実施の形態１にかかるプロセッサのサイクル１乃至ｎ＋１における命令フェッチから命令が実行されＢＴＡＣ１２に登録されるまでの動作を示す図である。
【図６】本発明の実施の形態１におけるＢＴＡＣ１２の登録例を示す図である。
【図７】予測情報の状態遷移の一例を示す図である。
【図８】ＢＴＡＣ１２の登録があり、かつ分岐予測がヒットした場合の動作を示す図である。
【図９】ＢＴＡＣ１２の登録があり、かつ分岐予測がミスした場合の動作を示す図である。
【図１０】ＢＴＡＣ１２に登録あり、かつＱＣ情報を有する場合であって、分岐命令がフェッチライン上にある場合の動作を示す図である。
【図１１】フェッチライン境界上に分岐命令が存在する場合であって、ＢＴＡＣ１２の高速検索が可能な場合の動作を示す図である。
【図１２】従来のＢＴＡＣの構成を示す図である。
【図１３】従来のＢＴＡＣへの格納の動作を示すフローチャートである。
【図１４】特許文献１に記載のプロセッサを示す機能ブロック図である。
【図１５】特許文献１に記載の命令ユニットの分岐予測ユニット及びフェッチステージをより詳細に示す機能ブロック図である
【図１６】分岐命令がフェッチラインの境界上に存在する例を示す図である。
【図１７】従来技術の問題点を説明する図であって、分岐命令がフェッチラインの境界上に存在する場合であって、前側フェッチラインに分岐予測の紐付けがなされている場合を示す図である。
【図１８】従来技術の問題点を説明する図であって、分岐命令がフェッチラインの境界上に存在する場合であって、後ろ側フェッチラインに分岐予測の紐付けがなされている場合を示す図である。
【発明を実施するための形態】
【００２２】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。この実施の形態は、本発明を、条件付き分岐命令を含む可変長命令セットを処理するプロセッサに適用したものである。
【００２３】
本実施の形態においては、分岐命令がフェッチラインをまたぐことを示す情報（以下、ＱＣ情報又は境界情報ともいう。）をＢＴＡＣに保存する（図３）。そして、このＱＣ情報をもとに、前側フェッチラインをフェッチした後に、ＢＴＡＣの検索を開始し、分岐先取得の準備を行う。こののとき、ＱＣ情報があるため、後側フェッチラインをフェッチした後で分岐先アドレスをフェッチすることができる。したがって、ＢＴＡＣの検索を速めても、分岐命令を正しくデコードすることができ、１サイクルのペナルティを解消することができる。
【００２４】
図１は、本実施の形態にかかるプロセッサ１を示す図である。図１に示すように、実行ユニット１１、ＢＴＡＣ１２、分岐予測ユニット１３、フェッチユニット１４、命令メモリ１５、命令キュー１６及びデコード＆ディスパッチユニット１７を有する。ＢＴＡＣ１２は、分岐命令の分岐先情報と、分岐命令がフェッチラインの境界上にあることを示す境界情報とが格納された分岐情報テーブルを有する。分岐予測ユニット１３は、ＢＴＡＣ１２を参照し、分岐命令を含む可変長命令セットの分岐予測を行う。フェッチユニット１４は、分岐予測ユニット１３の分岐予測結果に基づき命令をフェッチする。つまり、命令メモリ１５に、読み出す命令のＰＣを渡す。
【００２５】
命令メモリ１５は、フェッチユニット１４によりフェッチされたＰＣの値をアドレスに換算し、当該アドレスの命令を読み出し命令キュー１６に出力する。命令キュー１６は、命令を一旦格納する。デコード＆ディスパッチユニット１７は、命令キュー１６から出力された命令群をデコードし、例えばどの命令とどの命令とが並列処理できるか等を解釈して実行ユニット１１に渡す。実行ユニット１１は、命令を実行し、分岐予測実行結果をフェッチユニット１４に通知する。さらに、実行ユニット１１は、実行ＰＣＥ１、実行先ＰＣＥ２、実行結果Ｅ３及びフェッチライン境界情報Ｅ４をＢＴＡＣ１２に出力する。ＢＴＡＣ１２は、実行ユニット１１から出力されるこれらの情報に基づき、分岐情報テーブルを更新する。
【００２６】
ここで、本実施の形態にかかる分岐予測ユニット１３は、ＢＴＡＣ１２を参照し、フェッチユニット１４にフェッチさせる命令に境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で分岐先情報にしたがって分岐予測先をフェッチさせるものである。
【００２７】
先ず、分岐命令がフェッチライン境界上にある場合について説明する。図２は、フェッチライン境界上に分岐命令が存在する場合を示す図である。図２Ａ、図２Ｂ及び図２Ｃにおいては、命令の最小単位を１６ビットとしこれが４つで１つのフェッチラインを構成する場合について説明する。１つのフェッチラインが１回のフェッチでフェッチされる命令となる。すなわち、命令は、フェッチライン単位でフェッチされる。
【００２８】
図２Ａは、フェッチラインＦ０とフェッチラインＦ１とにまたがって３２ビットの分岐命令がある場合を示している。図２Ｂは、フェッチラインＦ０とフェッチラインＦ１とにまたがって４８ビットの分岐命令がある場合を示している。図２Ｃも、フェッチラインＦ０とフェッチラインＦ１とにまたがって４８ビットの分岐命令がある場合を示している。すなわち、いずれもフェッチラインＦ０、Ｆ１の境界上に分岐命令が存在する場合を示している。このような分岐命令がある場合、フェッチラインＦ０をフェッチするのみでは、分岐命令は正しくデコードできない。この場合は、必ずフェッチラインＦ１もフェッチしなければならない。
【００２９】
図３は、ＢＴＡＣ１２（分岐情報テーブル）を示す図である。本実施の形態におけるＢＴＡＣ１２には、分岐元ＰＣ（ｅ１）、分岐先ＰＣ（ｅ２）、及び予測情報ｅ３のみならず、ＱＣ情報ｅ４が登録されている。分岐元ＰＣ（ｅ１）は、実行ユニット１１から送られる実行ＰＣＥ１から得られる情報である。分岐命令が開始するアドレスを示す。分岐先ＰＣｅ２は、実行先ＰＣＥ２から得られる情報であり、実行結果Ｅ２が分岐命令が成功したことを示した場合、実行先ＰＣＥ２は、分岐先ＰＣｅ２として登録される。予測情報ｅ３は、実行結果Ｅ３が成立したか否かを登録するもので、成立の可否のみ示す１ビットのデータとしてもよいし、後述するように、何回連続して成立するかを示すために多ビットの情報としてもよい。ＱＣ情報ｅ４は、フェッチライン境界情報Ｅ４に基づき登録される。命令は、デコードしなければ、それが分岐命令であるか否かが判別できないため、実行ユニット１１の結果Ｅ４から命令が分岐命令であって、かつフェッチライン境界に存在しているか否かを判別することができる。
【００３０】
次に、本実施の形態にかかるプロセッサ１のＢＴＡＣ１２への登録方法について説明する。図４は、ＢＴＡＣ１２への情報登録方法を示すブローチャートである。また、図５は、プロセッサ１のサイクル１乃至ｎ＋１における命令フェッチから命令が実行されＢＴＡＣ１２に登録されるまでの動作を示す図である。図５では、フェッチライン０８００、それに続くフェッチライン０８０８の２つのフェッチラインを処理する場合であって、分岐命令がフェッチライン０８００に含まれる場合の動作を示す。
【００３１】
分岐命令を含んだフェッチライン０８００のアドレスがフェッチユニット１４より命令メモリ１５に出力される。命令メモリ１５から読み出された命令群は、一度命令キュー１６に保存される。デコード＆ディスパッチユニット１７は、命令キュー１６から命令を読み出しデコードを行う。デコード結果から更にディスパッチを行い、その結果を実行ユニット１１へ渡す。
【００３２】
ここで、デコード＆ディスパッチユニット１７は、デコードした結果、命令がフェッチラインの境界上に存在していることが判明すれば、実行ユニットへその情報も併せて転送する。実行ユニット１１では、デコード＆ディスパッチユニット１７から送られてきた情報を元に命令の実行を行う。実行ユニット１１が分岐命令を実行し(ステップＳ１)、分岐が成立した場合(ステップＳ２：Ｙｅｓ)、その実行結果がＢＴＡＣ１２に送られ、そこに保存される(ステップＳ３〜Ｓ６)。
【００３３】
このとき分岐命令の実行ＰＣと実行結果Ｅ３に基づき予測情報ｅ３が登録され(ステップＳ４)、実行結果Ｅ３に基づき分岐先ＰＣｅ３が登録される。これらと共に、デコード時に検出されデコード＆ディスパッチユニット１７から実行ユニット１１に渡されたフェッチライン境界情報Ｅ４もＢＴＡＣ１２に送られ、このフェッチライン境界情報Ｅ４に基づき、ＱＣ情報ｅ４もＢＴＡＣ１２へ登録される。つまり、分岐命令がフェッチライン境界をまたぐ場合(ステップＳ５：Ｙｅｓ)は、ＱＣ情報に１が格納される。
【００３４】
図５では、フェッチユニット１４がサイクル１でアドレス０８００をフェッチするとこのフェッチアドレス０８００が分岐予測ユニット１３、命令メモリ１５及び実行ユニット１１に通知される。これに基づき分岐予測ユニット１３は、ＢＴＡＣ１２においてフェッチアドレス０８００の検索を実施する。ここでは、ＢＴＡＣ１２にフェッチアドレス０８００は登録されていないものとする。
【００３５】
したがって、分岐予測ユニット１３は、分岐予測できず、フェッチユニット１４に何も渡さない。フェッチユニット１４は、したがってアドレス通り順次フェッチラインをフェッチする。サイクルｎで実行ユニット１１がフェッチライン０８００の命令を実行している。実行の結果、分岐が発生するため、後続の命令は破棄される。この実行結果に基づき、図６に示すように、ＢＴＡＣ１２にデータが登録される。ここでは、エントリ番号２に、分岐元ＰＣとして０８０４が、分岐先ＰＣとしてＢが、予測情報として"１０"が、ＱＣ情報として"０"が登録される。なお、分岐元ＰＣは、分岐命令がどのフェッチラインにあるかではなく、フェッチラインのどの位置にあるか、までを示すＰＣの値が保存される。
【００３６】
次に、予測情報を図６のように２ビットで保存する場合の予測情報状態遷移について説明する。図７は、予測情報の状態遷移の一例を示す図である。図７に示すように、本実施の形態における予測状態には、４つの状態、Strongly Taken(11)、Weakly Taken(10)、Strongly Not-Taken(00)、Weakly Not-Taken(01)を有する。
【００３７】
Strongly Taken(11)のとき
実行した分岐命令が成立（Taken）すると、すなわち予測ヒットすると、Strongly Taken(11)状態をそのまま維持する。実行した分岐命令が不成立（Not Taken）であれば、すなわち予測ミスであれば、Weakly Taken(10)に遷移する。
【００３８】
Weakly Taken(10)のとき
実行した分岐命令が成立（Taken）すると（予測ヒット）、Strongly Taken(11)に遷移する。実行した分岐命令が不成立（Not Taken）である（予測ミス）、Strongly Not-Taken(00)に遷移する。
【００３９】
Weakly Not-Taken(01)のとき
実行した分岐命令が成立（Taken）すると（予測ヒット）、Strongly Taken(11)に遷移する。
実行した分岐命令が不成立（Not Taken）であると（予測ミス）、Strongly Not-Taken(00)に遷移する。
【００４０】
Strongly Not-Taken(00)のとき
実行した分岐命令が成立（Taken）すると（予測ヒット）、Weakly Not-Taken(01)に遷移する。実行した分岐命令が不成立（Not Taken）であれば（予測ミス）、Strongly Not-Taken(00)状態をそのまま維持する。
【００４１】
次に、本実施の形態にかかるプロセッサ１の動作について説明する。図８は、ＢＴＡＣ１２の登録があり、かつ分岐予測がヒットした場合の動作を示す図である。ただし、分岐命令は、フェッチライン０８００に存在し、フェッチライン境界上には存在しない場合を示す。
【００４２】
フェッチユニット１４が命令をフェッチすると、このフェッチアドレスが分岐予測ユニット１３にも入力される。分岐予測ユニット１３は、フェッチユニット１４がフェッチしたアドレスがＢＴＡＣ１２に登録されているかの検索要求をＢＴＡＣ１２に出力する。ＢＴＡＣ１２からは、検索したアドレス０８００に対応する分岐先情報と実行履歴、フェッチライン境界情報に命令が存在しているか否かを示すＱＣ情報が検索結果として分岐予測ユニット１３に返される。このとき、ＢＴＡＣ１２に検索したアドレス０８００が登録されており、且つそのアドレスの分岐命令が前回も成立していた場合、すなわち、予測情報がStrongly Taken(11)又はWeakly Taken(10)の場合、分岐予測ユニット１３はフェッチユニット１４に対して、予測分岐先アドレスである予測先ＰＣを、予測結果として出力する。
【００４３】
ここでは、サイクル１でフェッチアドレス０８００の検索要求があり、検索結果が返され、サイクル２で分岐予測ユニット１３が分岐予測結果としてアドレスＢを出力している例を示す。これに従い、フェッチユニット１４は、サイクル３でアドレスＢをフェッチする。その後、サイクルｎになって、実行ユニット１１がフェッチライン０８００の分岐命令を実施する。本例では、分岐予測がヒットし、分岐先アドレスＢ以降の後続命令がサイクルｎ＋１以降も続けて実行される例を示している。
【００４４】
分岐予測がなければ、分岐先のフェッチアドレスは分岐命令の実行結果を待つ必要があるが、分岐予測ユニット１３が先読みすることで、分岐命令の実行結果を待たずに分岐先のフェッチアドレスをフェッチすることが可能となる。なお、図７に示す例において、予測結果が２回続けて不成立となり、予測情報がStrongly Not-taken(00)となった時点でエントリから削除するようにしてもよい。また、Weakly Taken(10)の場合に分岐予測を行わないこととしたり、Weakly Not-taken(01)の場合に分岐予測を行うようにしてもよい。
【００４５】
図９は、ＢＴＡＣ１２の登録があり、かつ分岐予測がミスした場合の動作を示す図である。さらに、図８と同様に、分岐命令は、フェッチライン０８００に存在し、フェッチライン境界上には存在しない場合を示す。
【００４６】
図９に示すように、サイクル１でＢＴＡＣ１２に検索要求がだされるとＢＴＡＣ１２から分岐先ＰＣ（ｅ２）が送られＢＴＡＣ１２は、それを予測結果としてフェッチアドレスＢをサイクル２で出力している。これにより、フェッチユニット１４はサイクル３でアドレスＢをフェッチしている。しかし、図９では、サイクルｎで実行ユニット１１がフェッチライン０８００の分岐命令を実施すると、分岐予測通りに分岐命令が実施されなかった場合を示している。この場合、実行ユニット１１は、サイクルｎ＋１以降において分岐予測がミスした以降にフェッチユニット１４がフェッチした命令を破棄する。以上の動作、すなわち、分岐命令がフェッチアドレス境界上にない場合は、従来の動作と同様である。
【００４７】
次に、図１０は、ＢＴＡＣ１２に登録あり、かつＱＣ情報を有する場合であって、分岐命令がフェッチライン上にある場合の動作を示す図である。図１０に示すように、サイクル１でアドレス０８００の検索要求を分岐予測ユニット１３がＢＴＡＣ１２に対して行うと、検索結果として登録あり、すなわち分岐先アドレスＢが通知される。分岐予測ユニット１３は、分岐予測結果としてサイクル２でアドレスＢをフェッチユニット１４に出力する。これにより、フェッチユニット１４は、サイクル３でアドレスＢをフェッチする。サイクルｎで実行ユニット１１が分岐命令を実施し、分岐予測がヒットすると、サイクルｎ＋１以降もフェッチユニット１４がフェッチした命令を実行することができる。
【００４８】
上述したように、ここで、もしＢＴＡＣ１２に登録がない場合には、デコード＆ディスパッチユニット１７でのデコード時に、フェッチライン境界上に分岐命令が存在することが判明し、更に実行ユニット１１で分岐命令が成立したとき、ＢＴＡＣ１２に、フェッチライン境界情報Ｅ４や実行結果Ｅ３等が送られ、ＢＴＡＣ１２にそれらの情報が新たに登録され、又は予測情報が更新される。
【００４９】
次に、本実施の形態の効果について説明する。図１７は、分岐命令がフェッチライン０８００及び０８０８にわたって存在する場合であって、フェッチライン０８００に分岐予測の紐付けがなされている場合を示す図である。サイクル１でフェッチアドレス０８００をフェッチすると、分岐予測ユニット１３がＢＴＡＣ１２の検索要求を出力する。ＢＴＡＣ１２からは登録ありの検索結果が出力され、分岐予測ユニット１３からフェッチユニット１４に対して、サイクル１で分岐予測結果としてフェッチラインＢを出力するものとする。
【００５０】
この場合、フェッチユニット１４は、サイクル２でフェッチラインＢをフェッチすることになる。すると、デコード＆ディスパッチユニット１７は、フェッチライン０８００、フェッチラインＢを順次デコードすることになるが、分岐命令は、フェッチライン０８００及び０８０８にわたっているため、フェッチライン０８０８に存在する分岐命令の残りの部分を読み出していないこととなり、分岐命令を正しくデコードできない。
【００５１】
このような事態を避けるために、従来は、分岐命令に対する紐付けは、分岐命令の後ろ側のフェッチライン０８０８に対してなされている。図１８は、フェッチライン０８００、０８０８に分岐命令がわたって存在する場合であって、フェッチライン０８０８に存在する分岐命令に対して分岐予測の紐付けがなされている場合を示す図である。
【００５２】
この場合、フェッチライン０８０８をフェッチすると分岐予測ユニット１３は、分岐予測ユニット１３に対して検索要求を行う。検索結果が登録ありと返され、サイクル３において、分岐予測ユニット１３が分岐予測結果としてフェッチユニット１４にフェッチアドレスＢを出力する。フェッチユニット１４は、これを受けてサイクル４でフェッチアドレスＢをフェッチする。すなわち、従来においては、ＱＣ情報を有さないため、フェッチライン０８００で分岐予測ができないため、分岐予測のタイミングが１サイクル分遅れ、本実施の形態であれば、サイクル３でフェッチアドレスＢをフェッチするのに対し、従来技術においては、サイクル３では続くフェッチアドレス０８１６をフェッチすることになり、分岐先のフェッチアドレスをフェッチできていない。図１８に示す例では、フェッチアドレスＢはサイクル４でフェッチされることになる。
【００５３】
これに対し、本実施の形態においては、前側フェッチラインをフェッチした段階で、ＢＴＡＣ１２の検索が可能であるため、図１８に示すように、従来で発生していた１サイクルのペナルティを解消することが可能である。また、フェッチライン境界上を示すＱＣ情報を有することで、前側フェッチラインに分岐予測情報を紐付けしていても、フェッチライン境界上にあるか判断可能である。このため、図１７に示すように後ろ側フェッチラインのフェッチを行わずに分岐予測先をフェッチしてしまい、命令の後半を読み出すことができない、という状況を回避することができる。
【００５４】
次に、本発明の実施の形態２について説明する。本実施の形態においては、ＢＴＡＣ１２の検索要求に対する検索結果が同一サイクル内得られるものとする。また、フェッチライン境界上に分岐命令が存在している場合であっても、実施の形態１と同様、前側のフェッチラインをフェッチする場合に分岐予測を実施する場合について説明する。
【００５５】
本実施の形態にように、高速にＢＴＡＣ１２の検索が可能な場合、つまり分岐予測によりＢＴＡＣ１２の検索を開始し、同じサイクル内において、分岐予測ユニット１３がＢＴＡＣ１２から全予測情報の応答を受け取ることが可能な場合には、可変長命令セットにおいてフェッチライン境界上に分岐命令が存在すると、図１７に示したように、後ろ側のフェッチラインのフェッチを行わずに分岐予測先をフェッチしてしまうため、分岐命令を正しくデコードすることができない。本実施の形態においては、このような場合においても、フェッチライン境界情報（ＱＣ情報）を有することで、このような問題を回避することができる。
【００５６】
図１１は、フェッチライン境界（フェッチライン０８００とフェッチライン０８０８）上に分岐命令が存在する場合であって、ＢＴＡＣ１２の高速検索が可能な場合の動作を示す図である。図１１に示すように、サイクル１でフェッチライン０８００がフェッチされると、分岐予測ユニット１３はＢＴＡＣ１２にフェッチライン０８００の検索を要求する。ここで、ＢＴＡＣ１２から同一サイクル内に検索結果が分岐予測ユニット１３に出力される。この場合、分岐予測ユニット１３がフェッチユニット１４に対し、分岐予測先アドレスとしてフェッチラインＢを同一サイクル内、すなわちサイクル１で出力することができる。ただし、その場合は、フェッチユニット１４が次のサイクル２で、フェッチライン０８０８をフェッチせずに、分岐先フェッチラインＢをフェッチしてしまうことになる。
【００５７】
これに対し、本実施の形態においては、分岐予測ユニット１３には、検索結果としてＱＣ情報も入力されており、フェッチユニット１４が次のサイクル２では、続くフェッチライン０８０８をフェッチする必要があることを判断することができる。したがって、分岐予測ユニット１３は、例えば自身が有する一時バッファ内などにこのフェッチアドレスＢを一時保存しておく。そして、サイクル２でこのフェッチアドレスＢをフェッチユニット１４に渡す。フェッチユニット１４は、これにより、サイクル３でフェッチアドレスＢをフェッチする。
【００５８】
通常、分岐予測ユニット１３は、フェッチユニット１４からフェッチアドレスが出力される各サイクル毎に、分岐予測をしようとする。これに対し、本実施の形態においては、ＢＴＡＣ１２から検索結果としてＱＣ情報が入力される。分岐予測ユニット１３は、このＱＣ情報が、分岐命令がフェッチライン境界上に存在することを示す場合、フェッチアドレスが入力されても分岐予測を一旦止め、所定のタイミングで分岐予測結果をフェッチラインユニット１４に渡し、分岐予測を再開することができる。
【００５９】
本実施の形態においては、実施の形態１と同様にフェッチライン境界情報（ＱＣ情報）を保持する。このＱＣ情報を保持しておくことで、次フェッチを、分岐予測先のフェッチラインか、分岐命令の後半部分が存在している後ろ側フェッチラインかのいずれかを選択することができ、分岐命令の前半部分に分岐予測が紐付けされている場合であっても、分岐命令の後半部分を読み飛ばすことなく、よって分岐命令を正しくデコードすることができる。
【００６０】
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【００６１】
この出願は、２０１１年３月３１日に出願された日本出願特願２０１１−０７８５６１を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【００６２】
１  プロセッサ
１１  実行ユニット
１２  ＢＴＡＣ
１３  分岐予測ユニット
１４  フェッチユニット
１５  命令メモリ
１６  命令キュー
１７  デコード＆ディスパッチユニット
ｅ１  分岐元ＰＣ
ｅ２  分岐先ＰＣ
ｅ３  予測情報
ｅ４  ＱＣ情報
Ｅ１  実行ＰＣ
Ｅ２  実行先ＰＣ
Ｅ３  実行結果
Ｅ４  フェッチライン境界情報
【図１】
2012132214.tif 000003
【図２Ａ】
2012132214.tif 000004
【図２Ｂ】
2012132214.tif 000005
【図２Ｃ】
2012132214.tif 000006
【図３】
2012132214.tif 000007
【図４】
2012132214.tif 000008
【図５】
2012132214.tif 000009
【図６】
2012132214.tif 000010
【図７】
2012132214.tif 000011
【図８】
2012132214.tif 000012
【図９】
2012132214.tif 000013
【図１０】
2012132214.tif 000014
【図１１】
2012132214.tif 000015
【図１２】
2012132214.tif 000016
【図１３】
2012132214.tif 000017
【図１４】
2012132214.tif 000018
【図１５】
2012132214.tif 000019
【図１６】
2012132214.tif 000020
【図１７】
2012132214.tif 000021
【図１８】
2012132214.tif 000022
【手続補正書】
【提出日】平成25年9月19日(2013.9.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
分岐命令を含む可変長命令セットを実行するプロセッサであって、
分岐命令の分岐先情報と、前記分岐命令がフェッチラインの境界上にあることを示す境界情報とが格納された分岐情報テーブルと、
前記分岐情報テーブルを参照し、分岐命令を含む可変長命令セットの分岐予測を行う分岐予測ユニットと、
前記分岐予測結果に基づき命令をフェッチするフェッチユニットとを有し、
前記分岐予測ユニットは、前記分岐情報テーブルを参照し、前記フェッチユニットにフェッチさせる命令に前記境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で前記分岐先情報にしたがって分岐予測先をフェッチさせる、プロセッサ。
【請求項２】
同一サイクルで前記分岐情報テーブルの検索及び前記分岐先情報の取得が可能な場合、フェッチライン境界上にある前記分岐命令の前記分岐先情報を一時的に格納するバッファを更に有し、
前記分岐予測ユニットは、前記分岐情報テーブルを参照し、前記フェッチユニットにフェッチさせる命令に前記境界情報がある場合は、前記フェッチユニットが続く次のフェッチラインをフェッチするまで前記分岐先情報を保持する、請求項１記載のプロセッサ。
【請求項３】
前記分岐情報テーブルは、分岐命令の分岐元アドレス、分岐先アドレス、実際に分岐したか否かを示す予測情報、及び前記境界情報を有する、請求項１又は２記載のプロセッサ。
【請求項４】
前記分岐命令は、所定の条件が成立したときのみ分岐する条件付き分岐命令である、請求項１乃至３のいずれか１項記載のプロセッサ。
【請求項５】
前記フェッチユニットによりフェッチされた命令を出力する命令メモリと、
前記命令メモリから出力された命令群をデコードするデコードユニットと、
デコードされた命令を実行する実行ユニットとを有し、
前記分岐情報テーブルは、前記実行ユニットから出力される実行アドレス、実行結果、実行先アドレス及びフェッチライン境界情報の情報に基づき更新される、請求項３記載のプロセッサ。
【請求項６】
分岐命令を含む可変長命令セットを実行するプロセッサの命令処理方法であって、
分岐命令の分岐先情報と、前記分岐命令がフェッチラインの境界上にあることを示す境界情報とが格納された分岐情報テーブルを参照し、分岐命令を含む可変長命令セットの分岐予測を行う分岐予測工程と、
前記分岐予測結果に基づき命令をフェッチするフェッチ工程とを有し、
前記分岐予測工程では、前記分岐情報テーブルを参照し、前記フェッチ工程にてフェッチさせる命令に前記境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で前記分岐先情報にしたがって分岐予測先をフェッチさせる、プロセッサの命令処理方法。
【国際調査報告】
2012132214.tif 000023
2012132214.tif 000024
2012132214.tif 000025
2012132214.tif 000026