(57)【要約】【課題】  分岐命令の検出に依存せずに分岐先命令のプリフェッチを開始することが可能な命令プリフェッチ装置及び分岐先命令の命令プリフェッチ方法を提供する。【解決手段】  プロセッサ・システム１は、プリフェッチした命令を格納する命令キャッシュ１４、命令キャッシュ１４に格納された命令を実行する命令実行部１１、分岐先命令の命令アドレスを格納する分岐先アドレス・レジスタ１７、命令実行部１１による分岐先アドレス・レジスタ１７への書き込みを検出するレジスタ書込検出部１８、及び、レジスタ書込み検出部１８による分岐先命令の検出に応じて分岐先命令のプリフェッチを行うプリフェッチ制御部１３を備える。【選択図】  図１
2007041837.tif 000002
【特許請求の範囲】
【請求項１】
命令の実行に先立ってメモリから命令をプリフェッチする命令プリフェッチ装置であって、
分岐命令より前に実行される分岐先命令のアドレスを指定する命令に基づいて、前記メモリから命令をプリフェッチする命令プリフェッチ装置。
【請求項２】
前記分岐先命令のアドレスを格納する分岐先アドレス格納部を備え、
前記分岐先アドレス格納部に対する書き込みを検出し、前記分岐先アドレス格納部に格納される命令アドレスのプリフェッチを行う請求項１に記載の命令プリフェッチ装置。
【請求項３】
プリフェッチした命令を格納する命令バッファと、
前記命令バッファに格納された命令を実行する命令実行部と、
前記分岐先命令のアドレスを格納する分岐先アドレス格納部と、
前記命令実行部による前記分岐先アドレス格納部への書き込みに基づいて、前記分岐先命令のプリフェッチを行うプリフェッチ制御部とを備える請求項１に記載の命令プリフェッチ装置。
【請求項４】
前記プリフェッチ制御部は、前記命令実行部による前記分岐先アドレス格納部への書き込みを検出することにより、前記分岐先アドレス格納部に格納される命令アドレスのプリフェッチを行う請求項３に記載の命令プリフェッチ装置。
【請求項５】
前記分岐先アドレス格納部は、前記命令実行部が割り込み処理又は例外処理から復帰する際の復帰先の命令アドレスを格納するレジスタである請求項３に記載の命令プリフェッチ装置。
【請求項６】
前記分岐先アドレス格納部は、前記命令実行部での実行タスクを切り替える際に、切り替え先タスクの命令アドレスを格納するレジスタである請求項３に記載の命令プリフェッチ装置。
【請求項７】
命令の実行に先立ってメモリから命令をプリフェッチする方法であって、
分岐命令より前に実行される分岐先命令のアドレスを指定する命令に基づいて、前記メモリから命令をプリフェッチする命令プリフェッチ方法。
【請求項８】
前記分岐先命令のアドレスを格納する分岐先アドレス格納部に対する書き込みを検出し、
前記分岐先アドレス格納部に格納される命令アドレスのプリフェッチを行う請求項７に記載の命令プリフェッチ方法。
【請求項９】
前記分岐先アドレス格納部は、割り込み処理又は例外処理から復帰する際の復帰先の命令アドレスを格納するレジスタである請求項８に記載の命令プリフェッチ方法。
【請求項１０】
前記分岐先アドレス格納部は、実行タスクを切り替える際に、切り替え先タスクの命令アドレスを格納するレジスタである請求項８に記載の命令プリフェッチ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令の実行に先立って命令を取得する命令プリフェッチに関し、特に、分岐命令の後に実行される分岐先命令のプリフェッチを行う命令プリフェッチ装置及びプリフェッチ方法に関する。
に関する。
【背景技術】
【０００２】
プロセッサの処理性能を向上するためには、命令を実行する命令実行部に対して滞りなく命令を供給できることが重要である。命令実行部に対して命令を滞りなく供給するために、実行予定の命令を命令フェッチステージに先立って、外部のメインメモリ等の命令が格納された記憶領域から命令キャッシュ等の高速アクセス可能な記憶領域にコピーする技術が知られている。このような技術によって、命令キャッシュのヒット率を向上することができる。また、命令デコードステージと実行ステージとの間に命令キュー（ＦＩＦＯ）を設け、命令キューにデコード済みの命令を絶えず格納しておく技術もある。
【０００３】
なお以下では、上述したような命令実行部に対する命令の供給が停止することを防ぐことを目的とし、実行予定の命令を予め命令キャッシュや命令キュー等の一次保存領域（以下、命令バッファ）に取得しておく技術を総称して「プリフェッチ技術」と呼ぶ。
【０００４】
実行される命令列には分岐命令が存在するため、命令がアドレス順に実行されるとは限らず、まったく別のアドレスに分岐する場合がある。ここで、分岐命令とは、プログラム・カウンタの値を更新することにより、次に実行する命令アドレスを変更する命令を指す。具体的には、割り込み処理や例外処理からの復帰命令などの無条件分岐命令、条件判定を伴う条件分岐命令がある。その他に、複数のタスク（プロセス）を並列に実行するオペレーティング・システム（以下、マルチタスクＯＳと呼ぶ）によるタスク・ディスパッチも、プログラム・カウンタの値が不連続に更新されるため広義の分岐命令である。このような分岐命令が実行する命令列に存在すると、分岐命令後の命令のプリフェッチを行ったとしても、分岐先命令のフェッチ時にキャッシュ・ミスが発生する可能性が高い。
【０００５】
そこで、分岐命令が存在する命令列に対して効率的にプリフェッチを行うため、フェッチした命令が無条件分岐命令であった場合に分岐先命令のプリフェッチを開始する技術、プリフェッチした命令をプリデコードし、無条件分岐命令であれば分岐先命令のプリフェッチを開始する技術が知られている（例えば特許文献１を参照）。また、分岐命令の検出に加えて分岐方向の予測を行い、予測した分岐先アドレスに対するプリフェッチを行う技術等が知られている。（例えば特許文献２を参照）。
【０００６】
ＣＰＵ等の命令実行部と命令キャッシュを備える従来のプロセッサ・システム７の構成例を図６に示す。ここで、命令実行部１１は、命令キャッシュ１４又はＲＯＭ１９から命令をフェッチして実行する処理部である。プログラム・カウンタ１２は、命令実行部１１で実行されている命令のアドレスを格納するカウンタであり、プログラム・カウンタ１２の値は命令実行部１１によって更新される。なお、命令が逐次実行されている場合には、プログラム・カウンタ１２の値は命令長に相当する値ずつ更新されるが、分岐命令が存在すると分岐先命令のアドレスによって不連続に更新されることになる。
【０００７】
分岐先アドレス・レジスタ１７は、分岐先命令のアドレスが格納されるレジスタであり、分岐先命令の格納先をレジスタ間接アドレッシングで指定する際に用いられるものである。分岐先アドレス・レジスタ１７への値の格納は、命令実行部１１により行われる。分岐先アドレス・レジスタ１７に格納された値は、後に実行される分岐命令により明示的又は黙示的に分岐先命令アドレスとして指定される。
【０００８】
ここで、レジスタ間接アドレッシングとは、メモリ上でのデータ格納位置をレジスタに格納されたアドレス値によって指定するアドレス指定方法である。例えば、３２ビット命令によって３２ビットアドレスを指定する場合など命令のオペランド部分で直接アドレス指定をできない場合や、参照するアドレス自体の演算が必要である場合等に使用される。
【０００９】
なお、分岐先アドレス・レジスタ１７は、分岐先命令アドレスを格納する専用レジスタとして設けられる場合、命令実行部１１が使用する汎用レジスタのうちからコンパイラによって指定される場合がある。
【００１０】
分岐先アドレス・レジスタ１７の具体例には、（１）割り込み処理や例外処理からの復帰時に復帰先命令のアドレスを格納するレジスタ、（２）マルチタスクＯＳによりディスパッチされるタスクのエントリ・アドレスを格納するレジスタ、（３）ソフトウェア割り込みからの復帰時並びに関数呼び出し時及び復帰時などにおいて、分岐先命令アドレスをレジスタ間接アドレッシングにより指定する際のベースレジスタとして、コンパイラによって指定されるレジスタ等がある。
【００１１】
プリフェッチ制御部７３は、外部メモリ１５から命令キャッシュ１４への命令プリフェッチを制御する。プリフェッチ制御部７３は、プログラム・カウンタ１２の値に命令長を加算したアドレスから順次プリフェッチを行う。また、プリフェッチ制御部７３は、命令実行部１１で実行されるプログラム中に分岐先命令のプリフェッチを指示する命令が明示的に含まれている場合に、命令実行部１１によるプリフェッチ指示に基づいて分岐先命令のプリフェッチを行う。さらに、プリフェッチ制御部７３は、分岐検出部１６によるプリフェッチ指示に基づいて分岐先命令のプリフェッチを行う。
【００１２】
分岐検出部１６は、命令実行部１１が命令キャッシュ１４からフェッチする命令が分岐命令であるか否かを検出し、分岐命令を検出した場合にプリフェッチ制御部７３に対して分岐先命令のプリフェッチを指示するものである。なお、特許文献１に示されているように、プリフェッチした命令に対して分岐検出部１６がプリデコードを行う構成とし、いち早く分岐命令の検出を行うこともできる。
【００１３】
このような構成により、従来のプロセッサ・システム７は、命令実行部１１において実行予定の命令を、低速な外部メモリ７５から高速アクセス可能な命令キャッシュ１４にリフィルすることが可能となる。
【００１４】
しかしながら、上述した従来のプロセッサ・システム７における命令プリフェッチ処理では、少なくとも命令プリフェッチ後のプリデコードにおいて分岐命令を検出した後でなければ、分岐先命令のプリフェッチを開始することができないという問題がある。このため、分岐先命令のプリフェッチが命令実行部による分岐先命令のフェッチ又は命令実行のタイミングに間に合わず、命令実行部１１に対する命令の供給に中断を生じやすい。
【００１５】
従来のプロセッサ・システム７による分岐命令及び分岐先命令の実行動作について図７を用いて説明する。ステップＳ２０１では、プリフェッチ制御部７３が、プログラム・カウンタ１２の値に基づいて命令キャッシュ１４に分岐命令をリフィルする。ステップＳ２０２では、命令実行部１１が、命令キャッシュ１４からフェッチした分岐命令を実行する。ステップＳ２０３では、分岐検出部１６が、命令実行部１１による分岐命令のフェッチ時の転送データから分岐命令の存在を検出し、プリフェッチ制御部７３に対して分岐先命令アドレスを通知する。ステップＳ２０４では、プリフェッチ制御部７３が、分岐検出部１６からの通知に応答して、分岐先命令のプリフェッチを開始する。
【００１６】
ステップＳ２０５は、分岐先命令を命令キャッシュ１４から取得する処理であり、ステップＳ２０２の分岐命令に連続して実行される。しかしながら、分岐先命令のプリフェッチは、ステップＳ２０３での分岐命令の検出後に行われるため、ステップＳ２０４の分岐先命令のプリフェッチがステップＳ２０５の命令実行部１１による分岐先命令のフェッチに間に合わない場合がある。この場合、ステップＳ２０５の分岐先命令のフェッチはキャッシュ・ミスとなり、命令実行部１１に対する命令供給が停止してしまう。命令実行部１１は、分岐先命令が命令キャッシュ１７に格納された後に分岐先命令をフェッチし、これを実行することになり、命令実行部１１に対する命令供給に中断が生じる結果となる（ステップＳ２０５、Ｓ２０６）。
【００１７】
次に、分岐命令の存在によって命令実行部１１に対する命令供給が中断される具体例として、割り込み処理から復帰する際の動作を説明する。まず、通常の処理から割り込み処理に分岐する際には、プログラム・カウンタ１２の値、プログラム・ステータス・ワード（ＰＳＷ）の値、プログラムがアクセス可能なレジスタの値が退避される。割り込み処理が終了した後に元のプログラムに復帰できるようにするためである。ここで、ＰＳＷは、プログラム状態やプロセッサ状態を示すフラグの集合であり、ＰＳＷ用のレジスタに保持されている。図８（ａ）は、割り込み処理からの復帰時に、退避していた割り込み前のプログラム・カウンタの値等を復元するための命令列を抜き出して示したものである。また、図８（ｂ）は、図８（ａ）に示した割り込み処理の概念図を示したものである。
【００１８】
図８（ａ）１行目のｄｉ命令は、ＰＳＷ内の割り込み許可・禁止を示すフラグを割り込み禁止に設定する命令である。２行目のｌｄ．ｗ命令は、１ワードのデータを読み出してレジスタに格納する命令である。ニーモニック"ｌｄ.ｗ ０００８［ｓｐ］,ｒ１"は、スタック・ポインタの値にディスプレースメント（０００８）を加算したアドレスからデータを読み出して、レジスタｒ１に格納する命令を表している。当該命令によって、割り込み処理の実行時に退避していた復帰先命令のアドレスが、汎用レジスタｒ１に読み込まれる。ここで、スタック・ポインタ（ＳＰ）は、プログラム・カウンタの値などを一時退避したメモリ領域（スタック）のアドレスを意味しており、ＳＰの値は、命令実行部１１が備える汎用レジスタに保持されている。図８（ａ）では、ＳＰの値を格納したレジスタを"ＳＰ"と表している。
【００１９】
図８（ａ）３行目のｌｄｓｒ命令は、システムレジスタに対するロード命令である。ニーモニック"ｌｄｓｒ ｒ１,００"は、汎用レジスタｒ１の内容を、システムレジスタ番号（００）で指定されるシステムレジスタ００に設定する命令を表している。ここで、システムレジスタ００は、割り込み処理からの復帰先の命令アドレス、つまり分岐先命令アドレスを格納するものであり、上述した分岐先アドレス・レジスタ１７に相当するものである。
【００２０】
図８（ａ）４行目のｌｄ．ｗ命令と５行目のｌｄｓｒ命令は、スタックに退避されていた割り込み前のＰＳＷを読み出し、システムレジスタ０１に格納するための命令群である。
【００２１】
図８（ａ）６行目のｌｄ．ｗ命令は、スタックに退避されていた割り込み処理前のレジスタｒ１の格納値を読み出し、レジスタｒ１に再格納するための命令である。また、７行目のａｄｄｉ命令は、スタック・ポインタＳＰの値を更新するための算術加算命令である。
【００２２】
図８（ａ）８行目のｒｅｔｉ命令は、割り込み処理からの復帰を指示する命令である。具体的には、復帰先命令アドレスが格納され、分岐先アドレス・レジスタ１７に相当するシステムレジスタ００の値によってプログラム・カウンタ１２を更新し、復帰先のＰＳＷが格納されたシステムレジスタ０１の値によってＰＳＷ用のレジスタを更新する。これにより割り込み処理ルーチン実行前の状態が回復できる。このように、ｒｅｔｉ命令はプログラム・カウンタ１２の値を更新するので分岐命令の１つである。９行目のｍｏｖ命令は、レジスタ間のコピーを行う命令であり、割り込み処理から復帰した後の通常処理において実行される命令の一例として示したものである。
【００２３】
図９は、図８（ａ）の命令列を従来のプロセッサ・システム７で実行した場合のタイミング図を示している。図８（ａ）１行目のｄｉ命令から８行目のｒｅｔｉ命令までは、割り込み処理中の命令であるためＲＯＭ１９に格納されている。このため、これらの命令は、ＲＯＭ１９からフェッチして実行される。
【００２４】
一方、復帰後のｍｏｖ命令は、命令キャッシュ１４からフェッチして実行されるものである。図７のステップＳ２０３及びＳ２０４で説明しように、分岐先命令であるｍｏｖ命令のプリフェッチは、命令実行部１１が命令キャッシュ１４からｒｅｔｉ命令をフェッチするタイミングに、分岐検出部１６がｒｅｔｉ命令の存在を検出することによって開始される。このため、１０クロック目の命令実行部１１によるｍｏｖ命令のフェッチの際にｍｏｖ命令のプリフェッチが完了していなければ、ｍｏｖ命令のフェッチはキャッシュ・ミスとなる。この結果、外部メモリ１５へのアクセスによって命令キャッシュ１４にｍｏｖ命令が格納される１２クロック目まで、命令実行部１１に対する命令供給が停止することになる。
【特許文献１】特開平８ー２７２６１０号公報
【特許文献２】特開２００３−７６６０９号公報
【発明の開示】
【発明が解決しようとする課題】
【００２５】
上述したように、従来のプリフェッチ技術では、少なくとも命令プリフェッチ後のプリデコードにおいて分岐命令を検出した後でなければ、分岐先命令のプリフェッチを行うことができないという問題がある。
【００２６】
なお、この問題は、命令実行部による命令フェッチステージに先立って命令キャッシュにプリフェッチする場合に限らず、低速な命令格納領域に格納された命令列の一部を高速読み出し可能な命令バッファにコピーするアーキテクチャを採用するプロセッサ・システムにおける命令プリフェッチにおいて、一般的に生ずる課題である。
【課題を解決するための手段】
【００２７】
本発明にかかる命令プリフェッチ装置は、命令の実行に先立ってメモリから命令をプリフェッチする命令プリフェッチ装置であり、分岐命令より前に実行される分岐先命令のアドレスを指定する命令に基づいて、前記メモリから命令をプリフェッチするものである。
【００２８】
また、本発明にかかる命令プリフェッチ方法は、命令の実行に先立ってメモリから命令をプリフェッチする方法であって、分岐命令より前に実行される分岐先命令のアドレスを指定する命令に基づいて、前記メモリから命令をプリフェッチするものである。
【００２９】
これにより、分岐命令の検出に依存することなく、分岐先命令のプリフェッチを開始することができ、分岐命令のプリデコードや分岐予測の結果を待つ必要がない。このため、従来の分岐命令の検出に応じて分岐先命令のプリフェッチを開始するものに比べて、より早いタイミングで分岐先命令のプリフェッチを行うことができる。
【発明の効果】
【００３０】
本発明により、分岐命令の検出に依存せずに分岐先命令のプリフェッチを開始することが可能な命令プリフェッチ装置及び分岐先命令の命令プリフェッチ方法を提供することができる。
【発明を実施するための最良の形態】
【００３１】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。なお、以下に説明する実施の形態は、命令キャッシュと命令実行部を備え、外部メモリから命令キャッシュに命令プリフェッチを行うプロセッサ・システムに対して本発明を適用したものである。
【００３２】
発明の実施の形態１．
本実施の形態にかかるプロセッサ・システム１の構成を図１に示す。プロセッサ・システム１は、分岐先アドレス・レジスタ１７、分岐先アドレス・レジスタ１７への書き込みを検出するレジスタ書込検出部１８、レジスタ書込検出部１８の検出結果に応じて命令プリフェッチを行うプリフェッチ制御部１３を備えること特徴としている。なお、プロセッサ・システム１が備える命令実行部１１、プログラム・カウンタ１２、命令キャッシュ１４、外部メモリ１５、分岐検出部１６、分岐先アドレス・レジスタ１７及びＲＯＭ１９は、上述した従来のプロセッサ・システム７が備えるものと同様であるため、同一の符号を付して説明を省略する。
【００３３】
レジスタ書込検出部１８は、命令実行部１１による分岐先アドレス・レジスタ１７への書込みを検出し、検出したアドレス値をプリフェッチ制御部１３に通知する。プリフェッチ制御部１３は、レジスタ書込検出部１８から通知されたアドレス値を用いて分岐先命令のプリフェッチを行う。なお、レジスタ書込検出部１８は、分岐先アドレス・レジスタ１７への書込みを検出したことをプリフェッチ制御部１３に通知することとし、通知を受信したプリフェッチ制御部１３が分岐先アドレス・レジスタ１７を参照してプリフェッチするアドレスを取得することとしてもよい。要するに、プリフェッチ制御部１３が、分岐先アドレス・レジスタ１７の書き込みに応じて分岐先命令アドレスを取得することができるよう構成すればよい。
【００３４】
なお、上述したように、分岐先アドレス・レジスタ１７には、（１）割り込み処理や例外処理からの復帰時に復帰先命令のアドレスを格納するレジスタ、（２）マルチタスクＯＳによりディスパッチされるタスクのエントリ・アドレスを格納するレジスタ、（３）ソフトウェア割り込みからの復帰時並びに関数呼び出し時及び復帰時などにおいて、分岐先命令アドレスをレジスタ間接アドレッシングにより指定する際のベースレジスタとして、コンパイラによって指定されるレジスタ等がある。これら全てのレジスタをレジスタ書込検出部１８による検出対象としてもよいし、一部のレジスタのみを検出対象としてもよい。
【００３５】
このように、本実施の形態にかかるプロセッサ・システム１は、レジスタ間接アドレッシングにより、分岐先命令アドレスを格納した分岐先アドレス・レジスタ１７が分岐命令のオペランドにおいて指定されることに着目し、分岐命令の実行に先立って分岐先アドレス・レジスタ１７に分岐先命令アドレスをセットされることに基づいて、分岐先命令のプリフェッチを開始する。
【００３６】
具体的には、レジスタ書込検出部１８が、分岐命令の実行に先立って分岐先アドレス・レジスタ１７に分岐先命令の命令アドレスがセットされたことを検出し、これを契機としてプリフェッチ制御部１３が分岐先命令のプリフェッチを開始することにより、分岐検出部１６による分岐命令の検出に依存することなく、分岐先命令のプリフェッチを行うことができる。
【００３７】
次に図２及び図３を参照し、本実施の形態にかかるプロセッサ・システム１における分岐先命令のプリフェッチ動作を説明する。図２は、命令実行部１１において分岐命令が実行される際の動作タイミングを、レジスタ書込検出部１８及びプリフェッチ制御部１３との関係を含むフローチャートによって表したものである。
【００３８】
まずステップＳ１０１において、命令実行部１１が分岐先命令アドレスを分岐先アドレス・レジスタ１７に格納する命令を実行する。ステップＳ１０２では、レジスタ書込検出部１８が、命令実行部１１による分岐先アドレス・レジスタ１７への書込みを検出し、レジスタへの格納値である分岐先命令アドレスをプリフェッチ制御部１３に通知する。ステップＳ１０３では、プリフェッチ制御部１３が、レジスタ書込検出部１８からの通知に応答して、分岐先命令のプリフェッチを開始する。
【００３９】
ステップＳ１０４では、プログラム・カウンタ１２の値に基づいて、プリフェッチ制御部１３が分岐命令のプリフェッチを行う。ステップＳ１０５では、命令実行部１５が、命令キャッシュ１４からフェッチした分岐命令を実行し、プログラム・カウンタ１２が分岐先命令アドレスによって更新される。ステップＳ１０６では、命令実行部１１が命令キャッシュ１４から分岐先命令をフェッチする。最後に、ステップＳ１０７では、命令実行部１１において分岐先命令が滞りなく実行される。
【００４０】
このように、本実施の形態のプロセッサ・システム１では、ステップＳ１０３において分岐先命令アドレスの設定動作に応じていち早く分岐先命令のプリフェッチを開始し、命令キャッシュ１４への分岐先命令のリフィルを実行する。このため、ステップＳ１０６での分岐先命令のフェッチはキャッシュ・ヒットし、命令実行部１１に対して分岐先命令を滞りなく供給することができる。
【００４１】
次に、分岐命令の具体例として、割り込み処理から復帰する際の動作を、図３用いて説明する。図３は、図８（ａ）に示した割り込み処理から復帰する際の命令列をプロセッサ・システム１で実行した場合のタイミング図である。上述したように、図８（ａ）３行目のｌｄｓｒ命令が、分岐先命令アドレスを分岐先アドレス・レジスタ１７に格納する命令に相当する。このため、レジスタ書込検出部１８は、図８（ａ）３行目のｌｄｓｒ命令の実行結果として発生するシステムレジスタ００に対する書き込みを検出し、その格納値をプリフェッチ制御部１３に通知する。これにより、後続のｒｅｔｉ命令（分岐命令）の検出に先立って、復帰先のｍｏｖ命令（分岐先命令）のプリフェッチを開始することができる。
【００４２】
具体的には、図３において、３クロック目のｌｄｓｒ命令の実行後に、プリフェッチ制御部１３によるプリフェッチ要求が発生し、分岐先命令であるｍｏｖ命令のアドレスを含む領域が外部メモリ１５から命令キャッシュ１４にリフィルされる。このため、９クロック目の分岐先のｍｏｖ命令に対する命令フェッチは、キャッシュ・ヒットし、割り込み処理からの復帰後のｍｏｖ命令を滞りなく実行することができる。
【００４３】
なお、上述した割り込み処理からの復帰に限らず、条件分岐命令の実行、マルチタスクＯＳによるタスク・ディスパッチなどその他の分岐命令の実行時においても、割り込み処理からの復帰時と同様に、分岐先アドレス・レジスタ１７に対する書き込みを検出することによって、分岐先命令のプリフェッチを開始することが可能である。
【００４４】
上述したように、本実施の形態にかかるプロセッサ・システム１は、分岐命令の実行前に分岐先命令アドレスをレジスタ等の記憶領域に格納する処理が行われることに着目し、この分岐先命令アドレスの格納処理を契機として、分岐先命令のプリフェッチを開始するものである。これにより、分岐命令の検出に依存せず、分岐命令に先立って行われる処理に基づいて分岐先命令のプリフェッチを行うことができる。このため、プロセッサ・システム１は、分岐命令の検出を契機として分岐先命令のプリフェッチを開始する従来のプロセッサ・システム７に比べて、分岐先命令のプリフェッチを早く開始することができる。
【００４５】
また、分岐命令に先立って分岐先命令アドレスを指定する処理は従来のプログラムにおいて行われているものである。したがって、本発明は、従来のプログラム及びこれを生成するコンパイラに改変を行うことなく、上記の効果を発揮することができる。
【００４６】
さらに、プログラムの改変が許容される場合には、分岐命令と別個に実行される分岐先命令アドレスを分岐先アドレス・レジスタ１７に設定する命令（以下、分岐先アドレス設定命令）を、分岐先アドレスより十分早く実行するようにコンパイラがプログラム生成を行うことにより、分岐先命令のプリフェッチに要する時間の確保を柔軟に行うことができる。
【００４７】
発明の実施の形態２．
本実施の形態にかかるプロセッサ・システム２の構成を図４に示す。プロセッサ・システム２は、上述したプロセッサ・システム１が備えるレジスタ書込検出部１８に替えて、分岐先アドレス設定命令検出部２８を備えている。分岐先アドレス設定命令検出部２８は、命令実行部１１が、分岐先アドレス設定命令をフェッチしたことを検出し、プリフェッチ制御部１３に分岐先命令のプリフェッチの開始を指示するものである。
【００４８】
これにより、プロセッサ・システム２は、上述したプロセッサ・システム１がレジスタ書込検出部１８によって分岐先アドレス設定命令の実行結果として行われる分岐先アドレス・レジスタ１７に対する書込みを検出するのに比べて、より早いタイミングに分岐先命令のプリフェッチを開始することができる。
【００４９】
図５は、本実施の形態のプロセッサ・システム２において、図８（ａ）に示した割り込み復帰処理を実行する場合のタイミング図である。図５に示すように、プロセッサ・システム２は、分岐先アドレス設定命令である３クロック目のｌｄｓｒ命令を検出した時点で分岐先命令のプリフェッチ要求を行うことができ、分岐先命令のプリフェッチをいち早く開始することができる。
【００５０】
なお、上述した実施の形態では、外部メモリから命令キャッシュに命令プリフェッチを行うプロセッサ・システムに本発明を適用した場合について説明した。しかしながら、本発明の適用先は、このような構成に限られない。要するに、本発明は、分岐命令に先立って分岐先アドレスを指定する処理が実行されることに着目し、分岐先アドレスを指定する処理に基づいて分岐先命令のプリフェッチを開始するものである。このため本発明は、実施の形態で説明したメインメモリからキャッシュメモリへのプリフェッチを行うプリフェッチ制御装置に限らず、命令実行に先立って命令を一次保存領域（命令バッファ）にプリフェッチする構成を有している場合に広く適用可能なものである。
【図面の簡単な説明】
【００５１】
【図１】本発明にかかるプロセッサ・システムの構成図である。
【図２】本発明のプロセッサ・システムの動作フローを示す図である。
【図３】本発明のプロセッサ・システムの動作を説明するためのタイミング図である。
【図４】本発明にかかるプロセッサ・システムの構成図である。
【図５】本発明のプロセッサ・システムの動作を説明するためのタイミング図である。
【図６】従来のプロセッサ・システムの構成図である。
【図７】従来のプロセッサ・システムの動作フローを示す図である。
【図８】割り込み復帰処理を説明するための図である。
【図９】従来のプロセッサ・システムの動作を説明するためのタイミング図である。
【符号の説明】
【００５２】
１、２  プロセッサ・システム
１１  命令実行部
１２  プログラム・カウンタ
１３  プリフェッチ制御部
１４  命令キャッシュ
１５  外部メモリ
１６  分岐検出部
１７  分岐先アドレス・レジスタ
１８  レジスタ書込検出部
１９  ＲＯＭ
２８  分岐先アドレス設定命令検出部
【図１】
2007041837.tif 000003
【図２】
2007041837.tif 000004
【図３】
2007041837.tif 000005
【図４】
2007041837.tif 000006
【図５】
2007041837.tif 000007
【図６】
2007041837.tif 000008
【図７】
2007041837.tif 000009
【図８】
2007041837.tif 000010
【図９】
2007041837.tif 000011