(57)【特許請求の範囲】
【請求項１】
複数の命令セットのうちのいずれかからの命令を実行するためのプロセッサコアと、
メモリからの命令を実行のためにプロセッサコアに送る前に、メモリから命令をプリフェッチするためのプリフェッチユニットと、
前記プリフェッチユニットによってどの命令をプリフェッチすべきかを予測するための予測ロジックとを備え、該予測ロジックがプリフェッチされた命令を検討し、そのプリフェッチされた命令を実行することによって命令フローの変化が生じるかどうかを予測し、命令フローの変化が生じると予測された場合に次の命令を検索すべき前記メモリ内のアドレスを前記プリフェッチユニットに表示するようになっており、
前記予測ロジックがプリフェッチされた命令によって更に命令セットの変化が生じるかどうかを予測し、変化が生じると予測された場合に命令セット識別信号を発生させ、これをプロセッサコアに送り、前記次の命令が属する命令セットを表示するようになっているデータ処理装置。
【請求項２】
実行する結果、命令フローの変化も生じる場合に、実行時に前記命令セットの変化を生じさせる第１タイプの命令が存在することを前記予測ロジックが検出するようになっている、請求項１記載のデータ処理装置。
【請求項３】
第１タイプの前記命令の実行が無条件に命令フローの前記変化を生じさせ、前記次の命令を検索すべき前記メモリ内のアドレスが命令内で指定される、請求項２記載のデータ処理装置。
【請求項４】
実行時に前記命令フローの変化を生じさせ得る第２タイプの命令が存在することを前記予測ロジックが検出するようになっており、前記命令フローの変化の後に命令セットを識別するデータが命令によって指定される、請求項１記載のデータ処理装置。
【請求項５】
前記第２タイプの前記命令が、前記命令フローの変化の後の命令セットを識別する前記データを含むレジスタを指定する、請求項４記載のデータ処理装置。
【請求項６】
前記レジスタが、命令フローの変化が生じると仮定した場合に次の命令を検索すべき前記メモリ内のアドレスの表示も含む、請求項５記載のデータ処理装置。
【請求項７】
前記第２タイプの命令が実行された時に所定の条件が存在すると判断された場合に限り、前記命令フローの変化が生じる、請求項４記載のデータ処理装置。
【請求項８】
前記予測ロジックが分岐予測ロジックであり、分岐命令を実行する結果、前記命令フローの変化が生じる、請求項１記載のデータ処理装置。
【請求項９】
前記プリフェッチされた命令を実行すると前記命令フローの変化が生じると予測ロジックが予測した場合に、前記プリフェッチされた命令がプリフェッチユニットにより実行のためにプロセッサコアには送られないようになっている、請求項１記載のデータ処理装置。
【請求項１０】
前記命令フローの変化がプリフェッチされた命令の実行時に存在する所定の条件に依存しており、前記次の命令の実行時にプロセッサコアによる参照のためにプロセッサコアに条件信号が送られ、前記所定の条件がプロセッサコアによって存在しないと判断された場合に前記プロセッサコアが前記次の命令の実行を停止し、前記プリフェッチユニットに誤予測信号を発生するようになっている、請求項９記載のデータ処理装置。
【請求項１１】
前記予測ロジックが分岐予測ロジックであり、前記プリフェッチされた命令が分岐命令であり、前記分岐命令が完了時に分岐命令にシーケンシャルに続く命令に命令フローを復帰させるサブルーチンを指定するタイプであり、前記予測ロジックがプロセッサコアに書き込み信号を出力し、プロセッサコアが分岐命令にシーケンシャルに従う前記命令を検索するのにその後使用できるアドレス識別子をプロセッサコアに記憶させるようになっている、請求項９記載のデータ処理装置。
【請求項１２】
前記予測ロジックが前記プリフェッチユニット内に含まれる、請求項１記載のデータ処理装置。
【請求項１３】
複数の命令セットのいずれかからの命令を実行するためのプロセッサコアを有するデータ処理装置のプリフェッチユニットのための予測ロジックであって、前記プリフェッチユニットが命令を実行するためにプロセッサコアに送る前にメモリから命令をプリフェッチするようになっており、前記予測ロジックが前記プリフェッチユニットによってどの命令をプリフェッチすべきかを予測するようになっており、
前記プリフェッチされた命令を実行すると、命令フローの変化が生じるのかどうかを予測するように、プリフェッチされた命令を検討し、命令フローの変化が生じると予測した場合に次の命令を検索すべき前記メモリ内のアドレスを前記プリフェッチユニットに表示するようになっている検討ロジックと、
プリフェッチされた命令が更に命令セットの変化を生じさせるかどうかを予測し、命令セットの変化が生じると予測された場合に命令セット識別信号を発生させ、この信号をプロセッサコアに送り、前記次の命令が属す命令セットを表示するようになっている命令セット検討ロジックとを備えた、プリフェッチユニットのための予測ロジック。
【請求項１４】
データ処理装置が複数の命令セットのうちのいずれかからの命令を実行するためのプロセッサコアを有し、プリフェッチユニットが前記命令を実行のためにプロセッサコアに送る前にメモリから命令をプリフェッチするようになっている、データ処理装置のプリフェッチユニットによってどの命令をプリフェッチすべきかを予測する方法において、
（ａ）  前記プリフェッチされた命令を実行すると、命令フローの変化が生じるかどうかを予測し、命令フローの変化が生じると予測された場合に、次の命令を検索すべき前記命令内のアドレスを前記プリフェッチユニットに表示するよう、プリフェッチされた命令を検討する工程と、
（ｂ）  プリフェッチされた命令が更に命令セットの変化を生じさせるかどうかを予測し、変化を生じさせると予測された場合に命令セット識別信号を発生させ、これをプロセッサコアに送り、次の命令が属す命令セットを表示する工程とを備えた、どの命令をプリフェッチすべきかを予測する方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ処理装置において命令を予測するための技術に関し、より詳細には、多数の命令セットをサポートするデータ処理装置におけるかかる予測に関する。
【０００２】
【従来の技術】
データ処理装置は命令を実行するためのプロセッサコアを一般に含む。プロセッサコアが実行する命令の定常的流れを有することを保証し、プロセッサコアの性能を最大にする目的で、プロセッサコアが要求するメモリからの命令をプリフェッチするためのプリフェッチユニットが一般に設けられている。
【０００３】
プロセッサコアのための命令を検索するタスクにおいて、プリフェッチユニットをアシストすることはプリフェッチユニットによりどの命令をプリフェッチするかを予測するために行われることが多い。ソフトウェアの実行は、実行中のタスクに応じてコードの異なる部分の間でプロセッサコアを移動させるような命令フローの変更を生じさせることが多いので、メモリには命令シーケンスが次々に記憶されないことが多く、このため予測ロジックは有効となっている。
【０００４】
ソフトウェアの実行時に生じ得る命令フローの変化の一例として分岐がある。この分岐の結果、命令フローは分岐が指定するコードの特定部分にジャンプする。従って、予測ロジックは分岐を取るかどうかを予測するために設けられる分岐予測ユニットとなることがある。ある分岐を取ると分岐予測ユニットが予測した場合、予測ユニットは分岐が指定する命令を検索することをプリフェッチユニットに命令し、分岐の予測が明らかに正しければ、このような予測はプロセッサコアの性能を高めるのに役立つ。その理由は、メモリからその命令が検索される間、その実行フローを停止する必要がないからである。一般に、分岐予測ロジックが行った予測が誤りであれば、必要であった命令のアドレスの記録が維持され、よってその後、予測が誤りであったとプロセッサコアが判断した場合、プリフェッチユニットは必要な命令を検索できる。
【０００５】
データプロセッサ装置が２つ以上の命令セットの実行をサポートすると、これによってプリフェッチユニットおよび／または予測ロジックが実行すべき作業が更に複雑となることが多い。例えば米国特許第６，０８８，７９３号はＲＩＳＣタイプの命令とＣＩＳＣタイプの命令の双方を実行できるマイクロプロセッサについて述べている。ＲＩＳＣタイプの命令はＲＩＳＣ実行エンジンによって直接実行され、ＣＩＳＣタイプの命令は、まずＣＩＳＣフロントエンドによってＲＩＳＣタイプの命令に変換され、ＲＩＳＣ実行エンジンによって実行できるようになっている。ＲＩＳＣタイプの命令またはＣＩＳＣタイプの命令のいずれかを実行する際のより高速のオペレーションを容易にするために、ＣＩＳＣフロントエンドとＲＩＳＣ実行エンジンの双方は互いに独立して作動する分岐予測ユニットを含む。更に、ＣＩＳＣタイプの命令はＲＩＳＣタイプの命令に変換され、その結果変換されたＲＩＳＣタイプの命令の分岐作動により、誤って予測された分岐が容易に識別される。
【０００６】
米国特許第６，０８８，７９３号は２つ以上の命令セットをサポートする際の効率的な予測を維持し、よってマイクロプロセッサの性能を高めるために別個の分岐予測ユニットを使用することを教示しているが、かかる方法は常に最適なものとは言えない。例えば米国特許第６，０２１，４８９号では、２命令セットのアーキテクチャを実現するマイクロプロセッサにおいて１つの分岐予測ユニットを共用する技術が記載されている。この米国特許は１つのチップ上で６４ビットの命令アーキテクチャ（インテルのアーキテクチャ６４、すなわちＩＡ−６４）と３２ビット命令のアーキテクチャ（インテルのアーキテクチャ３２、すなわちＩＡ−３２）の双方を集積化したマイクロプロセッサを使用することを述べている。しかしながら、チップの面積を縮小する目的のために、各アーキテクチャに設けられる命令フェッチユニットを分離するように結合された共用分岐予測ユニットが設けられている。
【０００７】
【発明が解決しようとする課題】
上記いずれの米国特許も、多数の命令セットをサポートするデータ処理装置において、命令フロー、例えば分岐予測の変化を予測できることを示しているが、多数の命令セットをどのように効率的に切り換えるかについて問題がまだ存在している。従って、本発明の目的は、多数の命令セットから命令を実行するためのプロセッサコアを有するデータ処理装置内で命令セットを効率的に切り換えることを可能にする技術を提供することにある。
【０００８】
【課題を解決するための手段】
第１の様相からみれば、本発明は、複数の命令セットのうちのいずれかからの命令を実行するためのプロセッサコアと、メモリからの命令を実行のためにプロセッサコアに送る前に、メモリから命令をプリフェッチするためのプリフェッチユニットと、前記プリフェッチユニットによってどの命令をプリフェッチすべきかを予測するための予測ロジックとを備え、該予測ロジックがプリフェッチされた命令を検討し、そのプリフェッチされた命令を実行することによって命令フローの変化が生じるかどうかを予測し、命令フローの変化が生じると予測された場合に次の命令を検索すべき前記メモリ内のアドレスを前記プリフェッチユニットに表示するようになっており、前記予測ロジックがプリフェッチされた命令によって更に命令セットの変化が生じるかどうかを予測し、変化が生じると予測された場合に命令セット識別信号を発生させ、これをプロセッサコアに送り、前記次の命令が属する命令セットを表示するようになっているデータ処理装置を提供する。
【０００９】
本発明のデータ処理装置は、複数の命令セットのうちのいずれかからの命令を実行するためのプロセッサコアと、プロセッサコアに送るべき命令をプリフェッチするためのプリフェッチユニットと、プリフェッチされた命令を実行することによって命令フローの変化が生じるかどうかを予測するための予測ロジックとを有する。更に本発明によれば、前記予測ロジックがプリフェッチされた命令によって更に命令セットの変化が生じるかどうかを予測し、変化が生じると予測された場合に命令セット識別信号を発生させ、これをプロセッサコアに送り、前記次の命令が属する命令セットを表示するようになっている。予測ロジックによって発生されるこの命令セット識別信号は、プロセッサコアが命令セットを効率的に切り換えできるようにする。
【００１０】
従って、本発明によれば、予測ロジックは、命令フローの変化を予測するのに使用されるだけでなく、更に命令セットの変化の予測にも使用され、よってデータ処理装置の効率を改善する。
【００１１】
好ましい実施例によれば、前記予測ロジックは、実行の結果、命令フローの変化も生じる場合に、実行時に前記命令セットの変化を生じさせる第１タイプの命令が存在することを検出するようになっている。第１タイプの命令の場合、予測ロジックが実行の結果、命令フローの変化が生じると予測した場合、自動的に命令セットの変化が生じ、かかる場合、予測ロジックは命令セット識別信号をセットし、次の命令（すなわち第１タイプの命令の分析の結果として予測ロジックによりプリフェッチユニットに指定される命令）に対して使用すべき命令セットをプロセッサコアに表示するようになっている。
【００１２】
第１タイプの命令は条件付きまたは無条件で命令コアの変化を生じさせるようにできることが理解できよう。しかしながら、本発明の実施例では、第１タイプの前記命令の実行は、無条件に命令フローの前記変化を生じさせ、前記次の命令を検索すべき前記メモリ内のアドレスが命令内で指定される。従って、かかる実施例では予測ロジックは第１タイプの命令を識別するようになっており、次にかかる命令の識別の結果として命令フローの変化および命令セットの変化を自動的に予測する。従って、命令セット識別信号がセットされ、次の命令が属する命令セットをプロセッサコアに表示する。
【００１３】
ある実施例では、予測ロジックが（命令フローの変化を生じさせるが、命令セットを変化させないような他の命令の検出と共に、またはそのような検出を行わないで）第１タイプの命令が存在することを検出するだけとなっている場合に、予測ロジックは命令セットの切換効率を大幅に改善できることが判っている。しかしながら、本発明の他の実施例では、実行時に前記命令フローの変化を生じさせ得る第２タイプの命令が存在することを前記予測ロジックが検出するようになっており、前記命令フローの変化の後に命令セットを識別するデータが命令によって指定される。第２タイプの命令の場合、命令フローの変化がある場合に命令セットの変化は自動的には生じることはなく、その代わりに命令フローの変化の後で適用できる命令セットが命令自身によって指定される。この予測ロジックは第１タイプの命令の代わりに、または第１タイプの命令に加えて第２タイプの命令を検出するようにできることが理解できよう。
【００１４】
第２タイプの命令を用いた場合、命令フローの変化から自動的に命令セットの変化が生じることはないので、予測ロジックは第２タイプの命令が更に命令セットの変化を生じさせるかを予測する前、従って予測ロジックが命令セット識別信号を適正にセットできる前に更にチェックを実行する必要があることが理解できよう。
【００１５】
好ましい実施例では、前記第２タイプの前記命令が、前記命令フローの変化の後の命令セットを識別する前記データを含むレジスタを指定する。従って、第２タイプの命令が命令フローの変化を生じさせると予測ロジックが予測した場合、予測ロジックは命令フローの変化の後で命令セットを判断するようにレジスタにアクセスし、従って、次に命令セット識別信号をセットする。
【００１６】
更に好ましい実施例では、命令フローの変化が生じると仮定した場合に、前記レジスタは次の命令を検索すべき前記メモリ内のアドレスの表示も含む。従って、第２タイプの命令の実行が命令フローの変化を生じさせると予測ロジックが予測した場合、予測ロジックはレジスタからアドレス情報を検索し、そのアドレス情報をプリフェッチユニットへ提供し、プリフェッチユニットが次の命令としてそのアドレスが指定した命令を検索できるようにする。
【００１７】
第１タイプの命令と同じように、第２タイプの命令は命令フローの変化を条件付きでまたは無条件で生じさせるようにできることが理解できよう。しかしながら好ましい実施例では、第２タイプの命令は第２タイプの命令が実行された時に存在するための所定の条件が判断された場合に限り、命令フローの変化が生じるようになっている。好ましい実施例では、この所定の条件は命令内で指定され、従って、予測ロジックはプロセッサコアが命令を実行した時に、その所定の条件が存在するかどうかを予測するようになっている。
【００１８】
前に述べたように、種々の理由から命令フローの変化が生じ得る。しかしながら命令フローが変化する共通する１つの理由は分岐が発生することである。従って、好ましい実施例では予測ロジックは分岐予測ロジックであり、分析命令の実行の結果、命令フローの変化が生じる。
【００１９】
データ処理装置をオペレートする１つの方法は、プリフェッチユニットによってプリフェッチされた各命令を実行のためにプロセッサコアに送ることである。しかしながら、プロセッサコアの性能を更に高める目的で、本発明の実施例はプロセッサコアに命令を選択的に送らないようにすることができる。より詳細には、ある実施例では前記プリフェッチされた命令の実行によって前記命令フローの変化が生じると予測ロジックが予測した場合、前記プリフェッチされた命令は実行のためにプロセッサコアへプリフェッチユニットによって送られない。従って、プリフェッチされた命令の主な目的は命令フローの変化を生じさせることであり、プリフェッチされた命令を実行する結果、命令フローの変化が生じると予測ロジックが予測した場合、そのプリフェッチされた命令を実行のためにプロセッサコアに送らないような判断をすることができる。かかる方法は命令の「フォールディング（folding）」として知られている。かかるフォールディングが生じると、本発明の好ましい実施例では予測ロジックはプリフェッチユニットに適当なアドレスをパスオンし、プリフェッチユニットが命令フローの変化の結果として必要な命令を次の命令として検索することを保証し、更に予測ロジックはプロセッサコアが次の命令が属す命令セットに気づくことができるように、命令セット識別信号を正しくセットする。
【００２０】
プリフェッチされた命令によって指定される命令フローの変化が無条件である場合、上記工程は一般に必要なすべてのステップであることは明らかである。しかしながら、命令フローの変化が条件付き、例えばプリフェッチされた命令が実行される時に存在する所定の条件に依存している場合、好ましい実施例では前記次の命令の実行時にプロセッサコアによって参照のためにプロセッサコアに条件信号が送られる。このプロセッサコアはプロセッサコアによって前記所定の条件が存在しないと判断された場合に、前記次の命令の実行を停止し、更にプリフェッチユニットに誤予測信号を発生するようになっている。この方法によりプロセッサコアはプロセッサコアがプリフェッチユニットによって検索された次の命令を実行する前に所定の条件が存在するかどうかを判断でき、その条件が存在していないと判断した場合に、プリフェッチユニットに誤予測信号を発生し、プリフェッチユニットが適当な命令を検索し、プロセッサコアが実行を続けることができるようにする。
【００２１】
先に述べたように、好ましい実施例では予測ロジックは分岐予測ロジックであり、プリフェッチされる命令は分岐命令である。分岐命令が完了時に分岐命令のシーケンシャルに後の命令に命令フローをリターンさせるようなサブルーチンを指定するタイプである場合、好ましい実施例では予測ロジックはプロセッサコアに書き込み信号を出力し、分岐命令のシーケンシャルに後の前記命令を検出するのにその後使用できるアドレス識別子をプロセッサコアが記憶させるようになっている。これによって分岐命令が指定したサブルーチンの完了後のデータ処理装置の正しいオペレーションが保証される。
【００２２】
当業者であれば、この予測ロジックはプリフェッチユニットと別個のユニットとして設けることができると理解できよう。しかしながら、好ましい実施例ではプリフェッチユニット内に予測ロジックが含まれているので、これによって特に効率的に実現できる。
【００２３】
第２の様相から見れば、本発明は、複数の命令セットのいずれかからの命令を実行するためのプロセッサコアを有するデータ処理装置のプリフェッチユニットのための予測ロジックであって、前記プリフェッチユニットが命令を実行するためにプロセッサコアに送る前にメモリから命令をプリフェッチするようになっており、前記予測ロジックが前記プリフェッチユニットによってどの命令をプリフェッチすべきかを予測するようになっており、前記プリフェッチされた命令を実行すると、命令フローの変化が生じるのかどうかを予測するように、プリフェッチされた命令を検討し、命令フローの変化が生じると予測した場合に次の命令を検索すべき前記メモリ内のアドレスを前記プリフェッチユニットに表示するようになっている検討ロジックと、プリフェッチされた命令が更に命令セットの変化を生じさせるかどうかを予測し、命令セットの変化が生じると予測された場合に命令セット識別信号を発生させ、この信号をプロセッサコアに送り、前記次の命令が属す命令セットを表示するようになっている命令セット検討ロジックとを備えた、プリフェッチユニットのための予測ロジックを提供するものである。
【００２４】
第３の様相から見れば、本発明は、データ処理装置が複数の命令セットのうちのいずれかからの命令を実行するためのプロセッサコアを有し、プリフェッチユニットが前記命令を実行のためにプロセッサコアに送る前にメモリから命令をプリフェッチするようになっている、データ処理装置のプリフェッチユニットによってどの命令をプリフェッチすべきかを予測する方法において、（ａ）  前記プリフェッチされた命令を実行すると、命令フローの変化が生じるかどうかを予測し、命令フローの変化が生じると予測された場合に、次の命令を検索すべき前記命令内のアドレスを前記プリフェッチユニットに表示するよう、プリフェッチされた命令を検討する工程と、（ｂ）  プリフェッチされた命令が更に命令セットの変化を生じさせるかどうかを予測し、変化を生じさせると予測された場合に命令セット識別信号を発生させ、これをプロセッサコアに送り、次の命令が属す命令セットを表示する工程とを備えた、どの命令をプリフェッチすべきかを予測する方法を提供するものである。
【００２５】
以下、添付図面に示された本発明の好ましい実施例を参照し、単なる例として本発明について更に説明する。
【００２６】
【発明の実施の形態】
図１は、本発明の実施例に係わるデータ処理装置のブロック図である。この実施例によれば、データ処理装置のプロセッサコア３０は２つの命令セットからの命令を処理できる。以下、第１命令セットをＡＲＭ命令セットと称し、一方、第２命令セットをサム（Thumb）命令セットと称することにする。一般にＡＲＭ命令は長さが３２ビットであり、一方、サム命令は長さが１６ビットである。本発明の好ましい実施例によれば、プロセッサコア３２は別個のＡＲＭデコーダ２００と、別個のサムデコーダ１９０が設けられ、双方のデコーダはマルチプレクサ２７０を介して単一の実行パイプライン２４０に結合されている。
【００２７】
例えばリセットの後にデータ処理装置が初期化されると、パス１５を通して実行パイプライン２４０によって一般に１つのアドレスが出力され、このアドレスはプリフェッチユニット２０のマルチプレクサ４０に入力される。後に詳述するように、マルチプレクサ４０はパス２５および３５を通してそれぞれリカバリーアドレスレジスタ５０およびプログラムカウンターレジスタ６０からの入力信号を受信するようにもなっている。しかしながら、パス１５を通してプロセッサコア３０によりアドレスが提供される場合にはいつも、パス２５または３５を通して受信される入力信号よりも優先的にメモリ１０へそのアドレスを出力するようになっている。この結果、メモリ１０はプロセッサコアが提供するアドレスによって指定される命令を検索し、パス１２を通してその命令を命令バッファ１００へ出力する。
【００２８】
プリフェッチユニット２０内にはプロセッサコア３０のためにプリフェッチユニット２０が次のどの命令を検索するかを判断するのをアシストするための予測ロジック９０が設けられている。好ましい実施例では、この予測ロジック９０は分岐予測ロジックであり、この分岐予測ロジックは、パス１２を通してメモリ１０から命令バッファ１００が受信する分岐命令の存在を判断し、その分岐命令が指定する分岐がプロセッサコアによって取り込まれるか否かを予測するようになっている。
【００２９】
好ましい実施例では、予測ロジックは命令バッファ１００内の特定の命令がＡＲＭ命令であるか、またはサム命令であるかを知る。この理由は、後に詳述するようにＴビットレジスタ１１０、すなわち命令バッファ内の各命令のための入力を有することが好ましいＴビットレジスタの対応する入力にこの情報が与えられるからである。
【００３０】
命令バッファ１００内で受信される各命令に対し、予測ロジック９０はＴビットレジスタ内の対応する入力がどのタイプの命令として識別するかに応じて、アーム命令またはサム命令のいずれかに適用できるある分岐予測方法を実行する。当業者であれば理解できるように、多くの分岐予測方法があるので、これについてはこれ以上詳細には説明しない。
【００３１】
予測ロジックが実行する予測の結果として、予測ロジックは予測ロジックが分岐命令が存在していると判断したかどうかを表示する予測信号を、パス７５を通してマルチプレクサ８０に出力し、分岐命令をとる旨を予測する。分岐命令が存在していると予測ロジックが判断し、分岐が取り込まれると予測した場合、予測ロジックは次の命令のためのターゲットアドレスをパス８５を通してマルチプレクサ８０に発生することも行う。このターゲットアドレスは、一般に分岐命令によって指定され、分岐のための宛て先アドレスである。
【００３２】
マルチプレクサ８０はパス６５を通してインクリメンタ７０の出力信号も別の入力端で受信する。次に、インクリメンタ７０はマルチプレクサ４０がメモリ１０に出力したアドレスをその入力端で受信する。このインクリメンタ７０はパス４５を通してこのインクリメンタ７０に与えられたアドレスを取り込み、そのアドレスにインクリメント値を適用し、インクリメントされたアドレスをパス６５を通してマルチプレクサ８０に出力するようになっている。好ましい実施例では、インクリメンタ７０が行うインクリメントは、受信されたアドレスが指定する命令がＡＲＭ命令であるのか、またはサム命令であるのかどうかによって決まる。ＡＲＭ命令に対しては好ましい実施例ではアドレスは４だけインクリメントされ、一方、サム命令に対してはアドレスは２だけインクリメントされる。後により詳細に理解できるように、好ましい実施例の予測ロジック９０はプリフェッチすべき次の命令に適用できる命令セットを示す信号を発生するようになっており、この信号はパス５５を通してインクリメンタ７０へ送られ、インクリメンタがパス４５を通して受信されたアドレスへの適当なインクリメントを実行できるようにする。
【００３３】
分岐を取ると予測ロジックが予測した旨をパス７５を通してマルチプレクサ８０が受信した予測信号が示している場合、マルチプレクサ８０は、パス８５を通して予測ロジック９０から受信されたターゲットアドレスをそのマルチプレクサがプログラムカウンターレジスタ６０に出力するようになっている。他のすべての状況では、マルチプレクサ８０はパス６５を通して受信されたインクリメントされたアドレスをプログラムカウンターレジスタ６０へ出力する。
【００３４】
従って、プログラムカウンタレジスタ６０はプリフェッチユニット２０によってメモリ１０が検索すべき次の命令のアドレスを記録することが理解できよう。従って、マルチプレクサ４０はそのアドレスをメモリ１０に出力するようになっており、この結果、次の命令はパス１２を通してプリフェッチユニット２０の命令バッファ１００へ戻される。
【００３５】
次に、予測ロジック９０の説明に戻る。本発明の好ましい実施例によれば、このロジックは分岐命令をとるのかどうかを予測するだけでなく、分岐命令の結果として命令セットが変わるかどうかも予測する。好ましい実施例では、この命令セットは命令フロー、一般に分岐命令の変更を生じさせる命令の実行の結果として変化するだけである。従って、ある分岐をとると予測ロジック９０が予測した場合、この予測ロジックはその分岐の結果として命令が命令セットの変化が生じるかどうかを予測し、その予測を示す命令セット識別信号を発生するようになっている。好ましい実施例では、この命令セットの識別信号はＴビットレジスタ１１０へ出力されるサムビット（すなわちＴビット）信号を称され、以前説明したようにパス５５を通してインクリメンタ７０へも送られる。
【００３６】
好ましい実施例では、予測ロジックはその予測ロジックが命令バッファからの命令に関する予測を実行する度にＴビット信号を発生するようになっている。このＴビット信号の値は予測ロジック９０が実行する予測の結果としてプリフェッチされる次の命令に関連している。従って、次の命令がプリフェッチされ、次の命令が命令バッファに入ると、予測ロジックはその命令が属しているのはどの命令セットであるかをＴビットレジスタ内の対応するＴビットから知る。既に述べたように、Ｔビットレジスタ信号は好ましい実施例では命令フローの変化を生じさせる命令の結果として変化するに過ぎない。従って、分岐をとるかどうかを予測する好ましい実施例の予測ロジック９０を検討すると、分岐をとると予測ロジックが予測し、更に予測ロジックが分岐をとる結果、命令セットの変化が生じると予測した場合に限り、Ｔビット信号が変化するに過ぎない。
【００３７】
好ましい実施例では、次の命令がサム命令であると予測ロジック９０が予測した場合、Ｔビット信号は論理１の値にセットされ、次の命令がアーム命令となると予測論理９０が予測した場合、論理ゼロの値にセットされる。従って、命令バッファ１００からパス９５を通してプロセッサコア３０に命令が出力されるごとに、これに対応してＴビットレジスタ１１０からパス１０５を通してプロセッサコア３０にＴビット信号が出力される。命令とＴビット信号の双方はプロセッサコア３０のデコードおよび実行ユニット１８０に入力される。
【００３８】
この命令およびＴビット信号は出力端がサムデコーダ１９０に接続されている第１ＡＮＤゲート２１０へ入力される。従って、命令がサム命令であることを示すようにＴビット信号が論理１の値にセットされている場合、この結果、ＡＮＤゲート２１０によってサムデコーダ１９０に命令が出力される。この命令およびＴビット信号の（インバータ２３０によって反転された）反転信号は、第２ＡＮＤゲート２２０にも送られる。このゲート２２０はその出力端でＡＲＭデコーダ２００を発生する。従って、命令がサム命令であることを示すように、Ｔビット信号が論理１の値にセットされている場合、この結果、ＡＮＤゲート２２０により命令は、ＡＲＭデコーダ２００へは送られない。逆に命令がＡＲＭ命令であることを示すように、Ｔビット信号が論理ゼロの値にセットされている場合、この結果、命令はＡＮＤゲート２２０を通してＡＲＭデコーダ２００へ送られるが、ＡＮＤゲート２１０を通してサムデコーダ１９０へは送られないことが理解できよう。ＡＮＤゲート２１０、２２０を使用することによって省電力を行うことが可能になっている。その理由は、使用されないデコーダが論理レベルを不必要に変えないからである。
【００３９】
デコーダ１９０、２００からの出力信号はマルチプレクサ２７０へ入力される。このマルチプレクサはデコーダされた適当な命令を実行パイプライン２４０へ送るようになっている。マルチプレクサに対する駆動信号はＴビット信号から誘導され、よってデコードされた適当な命令を自動的に選択し、実行パイプライン２４０にルーティングできることが好ましい。命令の実行中、実行パイプライン２４０はプロセッサコア３０内のレジスタバンク１３０からデータを検索し、および／またはこのレジスタバンクにデータを記憶できる。更に、実行パイプライン２４０によって実行される命令の結果、「計算された分岐」が必要となることがある。この場合、実行パイプライン２４０は必要とされる次の命令のアドレスをパス１５を通してプリフェッチユニット２０に発生する。このプリフェッチユニット２０にてマルチプレクサ４０にそのアドレスが入力される。計算された分岐を生じさせるかかる命令は分岐命令ではないので、好ましい実施例の予測論理回路９０によって予測できないことに留意すべきである。しかしながら、所望する場合、予測ロジック９０が計算された分岐を予測するようにもできるが、この場合、予測ロジックが更に複雑となることが理解できよう。
【００４０】
実行パイプライン２４０によってかかる計算された分岐が決定されると、プロセッサコアおよびプリフェッチユニットは実行される次の命令がパス１５を通して発生されたアドレスが指定する命令となることを保証するために、既にプリフェッチユニットおよびプロセッサコア内にあるすべての命令はフラッシュ（flush）されなければならない。このフラッシュを実行するのに必要な信号は、実行パイプライン２４０によりプリフェッチユニットおよびプロセッサコアの対応する部品、例えば命令バッファ１００、サムデコーダ１９０、ＡＲＭデコーダ２００および実行パイプライン２４０の初期のステージに対して発行される。図面を明瞭にするため、これら種々の信号ラインは省略されている。
【００４１】
しかしながら、プロセッサコア３０からのアドレス信号がパス１５上にない場合、プリフェッチユニット２０はプログラムカウンターレジスタ６０内に記憶されているプログラムカウンターの値に応じて命令をプリフェッチし続け、よって命令バッファ１００内に検索された命令は予測ロジック９０が予測した分岐予測を考慮したシーケンス状態となる。
【００４２】
システムが効率的に作動できるようにするには、予測ロジック９０がほとんどの時間で分岐を正確に予測することが期待される。しかしながら、命令バッファ１００から出力される命令シーケンスを実行する際に、予測ロジック９０が行う予測が実際に正しくないとプロセッサコア３０が判断することが時々あり、この場合にこの誤りを訂正するためのステップが必要となる。
【００４３】
好ましい実施例では、予測ロジック９０が行った予測が正しくないと実行パイプライン２４０が判断した場合、実行パイプラインはパス１５５を通してプリフェッチユニット２０に誤予測信号を発生し、既に命令バッファ内にある命令をプリフェッチユニットにフラッシュさせ、リカバリーアドレスレジスタ５０内のアドレスによって指定された命令を次の命令として検索させる。実行パイプライン２４０はプロセッサコア３０の内部で適当な信号を発生し、既にサムデコーダ１９０またはＡＲＭデコーダ２００、および実行パイプライン２４０の初期のパイプラインステージにある命令をフラッシュさせることも行う。
【００４４】
リカバリーアドレスレジスタ５０内に記憶されているアドレスは次のように決定される。レジスタ５０はマルチプレクサ８０と同じようにパス８５を通して予測ロジック９０によって出力されたターゲットアドレスおよびパス６５を通してインクリメンタ７０によって出力されたインクリメントされたアドレスを受けるようになっている、マルチプレクサ（図１には示されず）からの出力を受けるようになっている。しかしながら、リカバリーアドレスレジスタ５０に関連するマルチプレクサはパス７５を通して予測ロジックから出力される予測信号の反転信号を受けるようになっている。従って、予測ロジック９０が分岐を予測した場合、リカバリーアドレスレジスタ５０にはインクリメンタ７０が出力した値が記憶され、他方、分岐をとらないと予測ロジックが予測した場合、リカバリーアドレスレジスタ５０には分岐のターゲットアドレスが記憶されることが理解できよう。従って、予測が誤っていた場合、リカバリーアドレスレジスタ５０はプロセッサコア３０が必要とする次の命令の正しいアドレスを記憶し、よってマルチプレクサ４０は誤予測信号１５５の場合にメモリ１０にそのリカバリーアドレスを出力し、適当な命令を命令バッファ１００に検索させ、よってこの命令をプロセッサコア３０のデコードおよび実行ユニット１８０へ送るようになっている。
【００４５】
マルチプレクサ４０によってメモリ１０へ出力される各アドレスはプリフェッチユニット内のプログラムカウンターバッファ１２０へもルーティングされる。命令バッファ１００によりパス９５を通してプロセッサコア３０に各命令が出力される際に、プログラムカウンターバッファ１２０からパス１１５を通してプロセッサコア３０に対応するプログラムカウンターの値が出力される。次にこの値はプロセッサコア内の一連のレジスタ２５０、２６０を通過されるので、必要な場合にデコーダ１９０、２００および実行パイプライン２４０に対応するプログラムカウンターの値が利用できる。
【００４６】
本発明の一実施例では、命令バッファ１００に検索されたすべての命令は実行のためにプロセッサコア３０へ送られる。しかしながら、所定の実施例ではプロセッサコアの性能を高めるために、一旦分岐命令が予測ロジック９０によって検出されると、この命令は命令バッファ１００から除かれる。
【００４７】
分岐命令は広く２つのカテゴリー、すなわち無条件分岐命令と条件付分岐命令とに分けることができる。無条件分岐命令では予測ロジック９０がこのような無条件分岐命令の存在を正確に判断できることを条件に、分岐が生じてからプロセッサコアが実際にその分岐命令を実行するのに必要な条件があってはならない。従って、好ましい実施例では命令バッファ１００内の命令シーケンスからかかかる無条件分岐命令が除かれ、かかるプロセスは「フォールディング（folding）」と称される。
【００４８】
更に本発明の一実施例では、条件付分岐命令もフォールドすることができるが、この場合、予測ロジック９０はその分岐に関する対応する条件情報をプロセッサコア３０に出力するようになっている。フォールドされた命令の一部を形成するこの条件情報は、パス１３５を通してプロセッサコア３０のレジスタ１６０にファントム信号として出力され、これと同時に予測ロジック９０が計算する、その命令に関する命令セットを識別する対応するＴビット信号と共に、パス９５を通してプロセッサコア３０に、分岐命令のターゲットアドレスが指定する次の命令が出力される。この条件情報は必要な時にデコードおよび実行ユニット１８０の種々の要素により、参照のために一連のレジスタ１６０、１７０を通過させられる。特に分岐から生じる命令が実行パイプライン２４０に達すると、条件情報が指定する条件が実際に存在するかどうかを判断するように、実行パイプライン２４０はその条件情報を検討するようになっている。そのような条件が存在する場合、実行パイプラインはその次の命令の実行を続け、他方、条件が存在しない場合、実行パイプライン２４０はパス１５５を通して誤予測信号を発生し、この結果、これまで述べた処理が行われる。
【００４９】
ある分岐命令は、終了時に分岐命令にシーケンシャルに続く命令に命令フローを戻すようにさせるサブルーチンを指定できる。かかる分岐命令に対してこれら命令をフォールドすべき場合、サブルーチンの完了後に復帰すべき命令のアドレスの記録を維持することが明らかに重要である。好ましい実施例では、このアドレスはレジスタバンク１３０のレジスタＲ１４内に記憶されるので、かかる分岐命令がフォールドされる場合、予測ロジック９０はパス１２５を通してプロセッサコア３０内のレジスタ１４０にファントム「Ｒ１４書き込み」信号を発生するようになっている。このアドレス値は一連のレジスタ１４０、１５０を通過させられ、この分岐が正しく予測されたと判断されたと仮定する結果、レジスタＲ１４はデコードおよび実行ユニット１８０により対応するアドレスで更新される。
【００５０】
本発明の好ましい実施例の重要な特徴は、予測ロジック９０が分岐命令をとる可能性を予測するだけでなく、その分岐をとる結果、命令セットが変わるかどうかも予測する。この場合、予測された命令セットを示すためにＴビット信号がセットされる。命令バッファ１００からの対応する命令と共にこのＴビット信号をプロセッサコア３０に送ることにより、実行パイプライン２４０へルーティングするよう、デコードされた適当な命令の自動選択を行うことができ、デコードおよび実行ユニット１８０内で命令セットの変更を自動的に呼び出すことにより、プロセッサコアの効率を大幅に高めることができる。以下、図２を参照して予測ロジック９０によって実行されるプロセスの更に細部についてより詳細に説明する。
【００５１】
ステップ３００において、予測ロジックは命令バッファ１００内に受信すべき新しい命令を待ち、ステップ３１０に進み、このステップで予測をオフにするかオンにするかが判断される。予測が必要であると見なされた場合、プロセスはステップ３３０に進み、ここでプリフェッチアボートをセットするかどうか判断される。当業者であれば理解できるように、プリフェッチアボートはメモリ管理ユニット（ＭＭＵ）を有し、内外にマッピングできる仮想メモリを使用するシステムによって使用される。プロセッサコアがマッピングアウトされたメモリのエリアに分岐する場合、このプロセッサコアはＭＭＵからのプリフェッチアボートを受信する。アボートルーチンは次にメモリの正しいエリアをマップインし、同じ命令に戻す。かかる実施例ではデータは分岐のように見え得るので、ＭＭＵがプリフェッチアボート（abort）を表示する場合、メモリから戻される（潜在的に）ランダムデータに関する分岐予測をしないことが重要である。従って、予測がオフにされるか、またはプリフェッチアボートがセットされる場合、プロセスはステップ３２０に分岐し、ここで予測は行われない。
【００５２】
しかしながら、プリフェッチアボートをセットしないと判断されたと仮定した場合、プロセスはステップ３４０に進み、このステップで受信された命令がＡＲＭ命令であるかどうかが判断される。このことはＴビットレジスタ１１０内に記憶されている対応するＴビットを参照すれば容易に判断できる。
【００５３】
ステップ３４０にて命令がＡＲＭ命令であると判断された場合、プロセスはステップ３５０まで進み、ここで命令が分岐命令であるかどうかが判断される。次に図３Ａ〜３Ｆを参照し、予測ロジック９０が探す分岐命令の例についてより詳細に説明する。しかしながら、一般的な条件では命令の所定ビットの値と既知の分岐命令に対するそのビットの値とを比較することによって、分岐命令の検出が判断される。ステップ３５０において、分岐命令が検出されない場合、プロセスはステップ３６０まで進み、ここで他の任意の特定の予測を実行できる。好ましい実施例では、予測ロジック９０は分岐予測ロジックユニットだけであり、このロジックは他の特定の予測を実行しない。しかしながら、予測ロジック９０が他の予測だけでなく分岐予測、例えばステップ３６０で行われるような他の予測を実行するように、この予測ロジック９０を拡張できることが理解できよう。
【００５４】
ステップ３５０で分岐が検出されたとみなされた場合、ステップ３７０で分岐が無条件であるかどうかが判断される。好ましい実施例において、あるタイプの分岐命令は定義により無条件とされるが、他の分岐命令は分岐をとるべき場合に分岐命令を実行する時に存在しなければならない１つ以上の条件を指定するための条件ビットをセットすることができる。無条件分岐命令または条件ビットをセットされていない条件分岐命令に対してはプロセスはステップ３７０からステップ４００に進み、このステップにて予測ロジック９０がその分岐をとることを予測する。
【００５５】
次にプロセスはステップ４００からステップ４３０に進み、このステップにおいて分岐の結果として命令セットが変わるかどうかが判断される。図３Ａ〜３Ｆを参照して後述するように、好ましい実施例ではあるタイプの分岐命令は分岐をとる場合に命令セットが常に変化するようになっているので、かかる状況ではプロセスはステップ４３０からステップ４４０にフローし、この結果、新しい命令セットを示すようにＴビットが変化する。前に述べたように、好ましい実施例ではＴビットはサム命令を示すのに１にセットされ、ＡＲＭ命令を示すのに０にセットされる。他の分岐命令は分岐の後に適用できる命令セットを識別するデータが命令内で指定されるようなタイプとなっている。より詳細には、好ましい実施例ではかかる分岐命令は分岐をとる場合に適用できる命令セットを識別する情報を含むレジスタを指定する。命令セットが変わることをその命令が示す場合、プロセスはステップ４３０からステップ４４０に進み、Ｔビット信号が変えられる（更に対応するＴビット信号は予測ロジック９０によりＴビットレジスタ１１０へ発生される）。そうでない場合、プロセスはステップ４３０からステップ４２０に進み、このステップでＴビットの変更は行われない。好ましい実施例では、Ｔビットの値は変わらないが、予測ロジック９０によりＴビットレジスタ１１０にＴビット信号が発生されるので、命令バッファ内の命令ごとにＴビットレジスタ内に別個のＴビット値が記憶される。
【００５６】
ステップ３７０に戻ると、分岐命令が無条件でない場合、プロセスはステップ３８０に進み、ここで分岐を取ると予測するかどうかの判断をするのに所定の予測方法を適用する。後に理解できるように、使用できる公知の予測方法は多数あるので、これら方法については本書では詳細には説明しない。しかしながら、本発明の実施例で使用できる簡単な分岐予測方法の一例として次の方法がある。後方条件分岐（下方のアドレスを有する命令をポイントする分岐）を取るとして予測し、前方条件分岐（すなわちより高いアドレスを有する命令をポイントする分岐）を取らないとして予測する方法がある。この方法は一般にループの底部にあるループの開始点まで戻る分岐を有するループが多数あるときに使用される。
【００５７】
次にプロセスはステップ３９０に進み、ここで分岐を取ることを予測が示しているかどうかが判断される。このステップにおいて、分岐を取らないと予測された場合、プロセスはステップ４１０に進み、このステップで予測ロジック９０は分岐を取らないように予測することを示す信号を、パス７５を通して予測信号として発生する。次にプロセスはステップ４２０に進む。好ましい実施例では、命令セットは分岐の後で変化するだけであるので、Ｔビットの変化は行われない。
【００５８】
ステップ３９０において、分岐を取ると判断された場合、プロセスはステップ４００に進み、ここで初期に述べたステップが実行される。
【００５９】
図２から判るように、ステップ３４０にて命令がＡＲＭ命令ではなく、従ってサム命令であると判断された場合、予測ロジック９０によって類似のシーケンスのステップも実行される。ステップ３５５、３７５、３８５、３９５および４１５はＡＲＭ命令に対してステップ３５０、３７０、３８０、３９０および４１０がそれぞれ実行したのと等価的な機能をサム命令に対して実行する。実行される実際の処理は異なるので、図２にはこれら命令は別々に示されている。例えばＡＲＭ分岐命令はサム分岐命令と異なるフォーマットを有するので、サム命令が分岐命令であるかどうかを判断するためにステップ３５５で必要な比較はステップ３５０にてＡＲＭ命令に対して実行しなければならない比較と異なる。同様に、サム分岐命令に対してステップ３８５で使用される予測方法はステップ３８０においてＡＲＭ分岐命令に対して使用される予測方法と異なることがある。
【００６０】
当業者であれば理解できるように、プロセスがステップ３２０、３６０、４２０または４４０のいずれかを完了すると、プロセスは自動的にステップ３００に戻り、このステップで予測ロジック９０は命令バッファ１００による新しい命令の受信を待つ。
【００６１】
図３Ａ〜３Ｆは予測ロジック９０が検出し、予測を実行するようになっている所定の分岐命令のフォーマットを示す。図３Ａ〜３Ｃは３つのタイプのＡＲＭ分岐命令を示すが、図３Ｄ〜３Ｆはサム分岐命令の対応するバージョンを示す。これら図から判るようにＡＲＭ分岐命令は３２ビット命令であり、一方、サム分岐命令は１６ビット命令である。
【００６２】
図３Ａで見ると、この図はあるフォームのＡＲＭ  ＢＬＸ（リンクおよびイクスチェンジを有する分岐）命令（ＢＬＸ（１）と称す）を示す。この命令は命令内で指定されたアドレスにあるＡＲＭ命令セットからサムサブルーチンを呼び出すのに使用される。この命令は無条件であるので、常にプログラムフローの変化を生じさせ、リンクレジスタ（図１を参照してこれまで説明したように、このリンクレジスタはレジスタバンク１３０のレジスタＲ１４であることが好ましい）内の分岐に従う命令のアドレスを保留する。次のように、ＢＬＸ命令内で指定されたアドレスから誘導されたターゲットアドレスにおいて、サム命令の実行が開始する。
【００６３】
１．  符号付（２の補数）２４ビット即値を３２ビットに符号拡張する。
２．  その結果を左に２ビットシフトする。
３．  ステップ２の結果のビット［１］をＨビットにセットする。
４．  分岐命令のアドレスを表示するＰＣの内容にステップ３の結果を加える。
従って、この命令は好ましい実施例では約±３２ＭＢの分岐を指定できる。
【００６４】
図１を参照して先に述べたように、このターゲットアドレスは新しいプログラムカウンターとしてプログラムカウンターレジスタ６０内に記憶される。更に分岐命令は無条件であり、更にこの命令の結果、命令セットが変わるので、次の命令がサム命令となることを示すためにＴビット信号は論理１の値に更新される。更に、前に述べたようにレジスタＲ１４はＢＬＸ命令の後の命令のアドレスを記憶するように更新される。
【００６５】
この予測ロジック９０は命令のうちのビット２５〜３１を見ることによってＡＲＭ  ＢＬＸ（１）命令が存在することを検出する。ビット２５〜３１は図３Ａに示されるように命令がＡＲＭ  ＢＬＸ（１）命令である場合、好ましい実施例では値「１１１１１０１」を有する。
【００６６】
図３Ｂはレジスタ内で指定されたアドレスにあるＡＲＭ命令セットからＡＲＭまたはサブルーチンを呼び出すのに使用される別のフォームのＡＲＭ  ＢＬＸ命令（ＢＬＸ（２）と称す）を示す。特に分岐ターゲットアドレスはレジスタＲｍに記憶された値であり、この場合、ビット［０］は強制的に０にされる。レジスタＲｍはＢＬＸ（２）命令のうちのビット０〜３によって識別される。更に分岐ターゲットアドレスで使用すべき命令セットはＲｍのうちのビット［０］によって特定される。従って［０］が１であれば、このことは分岐ターゲットアドレスにある命令セットがサムとなり、他方、ビット［０］が０の値を有する場合、このことは分岐ターゲットアドレスにある命令セットがＡＲＭとなることを示す。ＡＲＭ  ＢＬＸ（１）命令の場合と同じように、分岐の後の命令のアドレスはレジスタＲ１４に記憶され、一旦サブルーチンが完了した場合、プロセスはその命令に戻ることができる。
【００６７】
予測ロジック９０は候補分岐命令がＢＬＸ（２）命令であるかどうかを判断するために、候補分岐命令のうちのビット４〜７および２０〜２７の検討を行うようになっている。この場合、これらビットは図３ｂに示されるように、例えばそれぞれ「００１１」および「０００１００１０」となる。更にビット２８〜３１が分岐を取るために存在しなければならない条件を指定する。当業者であれば理解できるように、セットできる異なる条件が多数ある。更にこれら４つのビットは分岐が実際に無条件であることを示す（Always）条件コードにセットできる。図３Ｂに示されるように好ましい実施例ではビット８〜１９はＢＬＸ（２）命令に対して１にすべきである。
【００６８】
図３ＣはＡＲＭ  ＢＸ（分岐およびイクスチェンジ）命令を示す。この命令はサムの実行に対するオプションスイッチによりレジスタＲｍに保持されているアドレスへ分岐するのに使用される命令である。ＢＬＸ（２）命令と同じように、分岐ターゲットアドレスは強制的に０にされたビット［０］を有するレジスタＲｍの値であり、分岐ターゲットアドレスで使用すべき命令セットはレジスタＲｍのビット［０］によって指定される。再び予測ロジック９０は候補分岐命令のビット４〜９および２０〜２７を見る。これらビットは命令がＡＲＭ  ＢＸ命令である場合、それぞれ値「０００１」および「００１００１０」を有する。ＡＲＭＢＬＸ（２）命令と同じように、ビット０〜３はレジスタＲｍを識別し、ビット２８〜３１は条件コードを指定し、ビット８〜１９は１となるはずである。
【００６９】
図３ＤはサムＢＬ（リンクを有する分岐）、すなわちあるフォームのサムＢＬＸ（リンクおよびエクスチェンジを有する分岐）命令を示す。このＢＬ命令は別のサブルーチンへの無条件サブルーチンコールを行う。レジスタＲ１４の内容を新しいプログラムカウンターにするか、またはレジスタＲ１４で指定されたアドレスへ分岐するか、または新しいプログラムカウンター値を特にロードするための命令を実行するかのいずれかによって、サブルーチンからのリターンが一般に実行される。
【００７０】
ＢＬＸ（１）フォームのサムＢＬＸ命令はＡＲＭルーチンへの無条件サブルーチンコールを行う。また、レジスタＲ１４内に指定されたアドレスへ分岐するための分岐命令を実行するか、または新しいプログラムカウンター値をロードするためのロード命令を実行することにより、一般にサブルーチンからのリターンが実行される。
【００７１】
ターゲットサブルーチンへの妥当な大きさのオフセットを可能にするために、これら２つの命令の各々は、次のようにアセンブラーによりあるシーケンスの２つの１６ビットサム命令に自動変換される。
【００７２】
・第１サム命令はＨ＝１０を有し、分岐オフセットの高い部分を提供する。この命令はサブルーチンコールのためにセットアップし、ＢＬフォームとＢＬＸフォームの間で共用される。
・第２サム命令は（ＢＬに対し）Ｈ＝１１を有し、または（ＢＬＸに対し）Ｈ＝０１を有する。この命令は分岐オフセットの低い部分を提供し、サブルーチンコールを生じさせる。
【００７３】
好ましい実施例では、分岐のためのターゲットアドレスは次のように計算される。
１．  第１命令のオフセット＿１１フィールドを左に１２ビットシフトする。
２．  その結果を３２ビットに符号拡張する。
３．  これを（第１命令のアドレスを識別する）ＰＣの内容に加える。
４．  第２命令のオフセット＿１１フィールドを２回加える。ＢＬＸに対しては、ビット［１］をクリアすることにより、上記の結果得られたアドレスを強制的にワード整合する。
従って、好ましい実施例ではこの命令は約±４ＭＢの分岐を指定できる。
【００７４】
従って、予測ロード９０が候補サム分岐命令のうちのビット１１〜１５を検討し、ビット１３〜１５が「１１１」であり、一方、ビット１１および１２が「１０」であると判断した場合、予測ロジック９０はこれが分岐を指定する２つの命令のうちの最初の命令であると結論付ける。次の命令を検討した際に、ビット１３〜１５が「１１１」であり、ビット１１および１２が「１１」であると判断されれば、予測ロジック９０はサムＢＬ命令が存在すると判断し、一方、ビット１３〜１５が「１１１」であり、次の命令のビット１１および１２が「０１」であると判断した場合、予測ロジック９０はサムＢＬＸ（１）命令が存在すると判断する。後者の場合、上記のようにターゲットアドレスを計算する他に、予測ロジック９０は次の命令がＡＲＭ命令となることを示すためにＴビットをゼロにセットすることも行う。更に、レジスタＲ１４にはＡＲＭルーチンの実行に従うサム命令を指定するリターンアドレスが記憶される。
【００７５】
図３Ｅはレジスタで指定されるアドレスにあるサム命令セットからＡＲＭまたはサムサブルーチンを検討するのに使用される別のフォームのサムＢＬＸ命令（ＢＬＸ（２）と称される）を示す。この分岐命令はＡＲＭ  ＢＬＸ（２）命令と異なり無条件である。予測ロジック９０は候補命令のうちのビット７〜１５を検討することによってサムＢＬＸ（２）命令が存在することを認識する。候補命令のビット７〜１５はこの命令がサムＢＬＸ（２）命令である場合、値「０１０００１１１１」となる。かかる命令が生じたときに予測ロジック９０はＴビットフラグをレジスタＲｍのビット［０］が指定する値に更新する。従って、このビットが０の値を有する場合、このことはターゲットアドレスの命令がＡＲＭ命令であり、一方、１の値を有する場合、このことはターゲットアドレスの命令がサブ命令であることを示す。好ましい実施例では分岐ターゲットアドレスを含むレジスタはレジスタバンク１３０のうちのレジスタＲ０〜Ｒ１４のいずれかとなり得る。この場合、レジスタ番号は命令内でＨ２（最大位ビット）およびＲｍ（残りの３つのビット）でコード化される。サムＢＬＸ（２）のビット０〜２はゼロにしなければならない。
【００７６】
図３ＦはサムＢＸ（分岐およびエクスチェンジ）命令を示し、この命令はサムコードとＡＲＭコードとの間を分岐させるのに使用される。図３Ｅと３Ｆとの比較から、この命令はサムＢＬＸ（２）命令に類似したフォームを有することが理解できよう。しかしながらＢＸ命令に対してビット７はゼロにセットされるので、予測ロジック９０はこの命令のビット１５〜７が値「０１０００１１１０」を有する場合にサムＢＸ命令を認識する。サムＢＬＸ（２）命令の場合と同じように、予測ロジック９０はＴビットをＲｍのビット［０］内に記憶された値にセットする。分岐ターゲットアドレスを含むレジスタはレジスタＲ０〜Ｒ１５のいずれかでよく、この場合、レジスタ番号は命令内でＨ２（最大位ビット）およびＲｍ（残りの３ビット）でコード化される。この命令のビット２〜０はゼロにしなければならない。
【００７７】
本発明の実施例の上記説明から明らかなように、予測ロジックはプリフェッチされた命令の実行によって命令フロー（例えば分岐）の変化が生じるかどうかだけでなく、かかる命令フローの変化が命令セットの変化を生じさせるかどうかも予測するのに使用される。命令セットの変更が検出された場合、予測ロジック９０はＴビットフラグの値を変えるようになっており、このフラグはプリフェッチユニットからプロセッサコアに送られる各命令に関連しており、命令を自動的に適当なデコーダにルーティングできる。これによって多数の命令セットからの命令の実行をサポートするデータ処理装置において、命令セットを切り換えるための特に効率的な技術が提供される。
【００７８】
以上で本発明の特定の実施例について説明したが、本発明はこの実施例だけに限定されるものでなく、本発明の範囲内で多くの変形および追加を行うことができることは明らかである。例えば本発明の範囲から逸脱することなく、次の従属請求項の特徴事項と独立請求項の特徴事項とを種々に組み合わせることは可能である。
【図面の簡単な説明】
【図１】本発明の実施例に係わるデータ処理装置のブロック図である。
【図２】図１の予測ロジックによって実行される方法のフロー図である。
【図３】命令セットの変化を結果として生じさせ得る、本発明の実施例で使用される分岐命令のフォームを示す図である。
【符号の説明】
１０  メモリ
２０  プリフェッチユニット
３０  プロセッサコア
４０  マルチプロセッサ
５０  リカバリアドレスレジスタ
６０  プログラムカウンタレジスタ
９０  予測ロジック
１００  命令バッファ
【図１】
0003768473.tif 000002
【図２】
0003768473.tif 000003
【図３】
0003768473.tif 000004