(57)【特許請求の範囲】
【請求項１】
パイプラインデジタルプロセッサでジャンプ動作を実施するための方法であって、
該プロセッサによって実行されるジャンプ命令の目標アドレスをメモリテーブルに書き込むことと、
該プロセッサによって実行されている第１のジャンプ命令を検出することであって、該第１のジャンプ命令は、該メモリテーブルの中の第１の目標アドレスに対するポインタを参照する、ことと、
該プロセッサが、
該第１の目標アドレスにジャンプすることと、
該メモリテーブルの中の第２の目標アドレスを指すように該ポインタを修正することであって、該第２の目標アドレスは第２のジャンプ命令に対応する、ことと
を行うことによって、該第１のジャンプ命令を実行することと
を含み、
該第１のジャンプ命令を実行することは、
該メモリテーブルから少なくとも１つの将来の目標アドレスをプリフェッチすることと、
該少なくとも１つの将来の目標アドレスをローカルメモリに書き込むことと
をさらに含む、方法。
【請求項２】
前記第２のジャンプ命令を検出することに応答して、前記ローカルメモリの中の前記第２の目標アドレスにアクセスすることをさらに含む、請求項１に記載の方法。
【請求項３】
前記ポインタを修正することは、該ポインタをポストインクリメントすることを含む、請求項１に記載の方法。
【請求項４】
前記第１のジャンプ命令を実行することは、前記メモリテーブルの中の前記第１の目標アドレスにアクセスすることをさらに含む、請求項１に記載の方法。
【請求項５】
一連の命令の実行前に、前記メモリテーブルに書き込まれる前記目標アドレスを事前計算することをさらに含む、請求項１に記載の方法。
【請求項６】
前記第２のジャンプ命令がコミットする時に、前記ローカルメモリから前記第２の目標アドレスを回収することをさらに含む、請求項２に記載の方法。
【請求項７】
前記少なくとも１つの将来の目標アドレスは、前記第１のジャンプ命令がコミットする時に、前記ローカルメモリに書き込まれる、請求項２に記載の方法。
【請求項８】
前記少なくとも１つの将来の目標アドレスをプリフェッチすることは、前記ローカルメモリが満杯ではない時に、２つの将来の目標アドレスをプリフェッチすることを含む、請求項２に記載の方法。
【請求項９】
前記デジタルプロセッサは、パイプラインを含み、前記方法は、誤予測条件を検出することに応答して、該パイプラインをクリアすることをさらに含む、請求項２に記載の方法。
【請求項１０】
前記第１のジャンプ命令を検出することは、前記プロセッサの中の分岐予測器によって実施される、請求項１に記載の方法。
【請求項１１】
前記目標アドレスをメモリテーブルに書き込むことは、ジャンプ命令の前記目標アドレスを、複数回実行される一連のジャンプ命令の開始時と、再度、該一連のジャンプ命令の終了時とに書き込むことを含む、請求項１に記載の方法。
【請求項１２】
分岐予測器を有するパイプラインデジタルプロセッサでジャンプ動作を実施するための方法であって、
該プロセッサによって実行されるジャンプ命令の目標アドレスをメモリテーブルに書き込むことと、
該プロセッサの命令セットアーキテクチャにおいてジャンプ命令を提供することであって、該ジャンプ命令は、該メモリテーブルの中の目標アドレスに対するポインタを参照する、ことと、
該分岐予測器が第１のジャンプ命令を検出することに応答して、第１の目標アドレスにジャンプすることと、
該メモリテーブルの中の第２の目標アドレスを指すように該ポインタを修正することであって、該第２の目標アドレスは、第２のジャンプ命令に対応する、ことと、
該メモリテーブルから少なくとも１つの将来の目標アドレスをプリフェッチすることと、該少なくとも１つの将来の目標アドレスをローカルメモリに書き込むことと
を含む、方法。
【請求項１３】
前記分岐予測器が前記第２のジャンプ命令を検出することに応答して、前記ローカルメモリの中の前記第２の目標アドレスにアクセスすることをさらに含む、請求項１２に記載の方法。
【請求項１４】
前記第２のジャンプ命令がコミットする時に、前記ローカルメモリから前記第２の目標アドレスを回収することをさらに含む、請求項１３に記載の方法。
【請求項１５】
前記少なくとも１つの将来の目標アドレスは、前記第１のジャンプ命令がコミットする時に、前記ローカルメモリに書き込まれる、請求項１３に記載の方法。
【請求項１６】
前記少なくとも１つの将来の目標アドレスをプリフェッチすることは、前記ローカルメモリが満杯ではない時に、２つの将来の目標アドレスをプリフェッチすることを含む、請求項１３に記載の方法。
【請求項１７】
前記デジタルプロセッサは、パイプラインを含み、前記方法は、誤予測条件を検出することに応答して、該パイプラインをクリアすることをさらに含む、請求項１３に記載の方法。
【請求項１８】
前記ポインタを修正することは、該ポインタをポストインクリメントすることを含む、請求項１２に記載の方法。
【請求項１９】
前記第１の目標アドレスにジャンプすることは、該第１の目標アドレスを前記プロセッサの命令フェッチステージに提供することを含む、請求項１２に記載の方法。
【請求項２０】
前記目標アドレスをメモリテーブルに書き込むことは、ジャンプ命令の前記目標アドレスを、複数回実行される一連のジャンプ命令の開始時と、再度、前記一連のジャンプ命令の終了時とに書き込むことを含む、請求項１２に記載の方法。
【請求項２１】
パイプラインデジタルプロセッサでジャンプ動作を実施するための装置であって、
実行されるジャンプ命令の目標アドレスを記憶するメモリテーブルと、
ローカルメモリと、
該メモリテーブルの中の目標アドレスに対するポインタを参照するジャンプ命令の実行を制御するためのジャンプ命令制御ユニットと
を備え、
該ジャンプ命令制御ユニットは、第１の目標アドレスにジャンプする第１のジャンプ命令に応答して、
該メモリテーブルの中の第２の目標アドレスを指すようにポインタを修正することと、
該メモリテーブルから少なくとも１つの将来の目標アドレスをプリフェッチすることと、
該少なくとも１つの将来の目標アドレスを該ローカルメモリに書き込むことと
を行う、装置。
【請求項２２】
前記第２の目標アドレスは第２のジャンプ命令に対応し、前記ジャンプ命令制御ユニットは、該第２のジャンプ命令を検出することに応答して、前記ローカルメモリの中の該第２の目標アドレスにアクセスするように構成されている、請求項２１に記載の装置。
【請求項２３】
前記ジャンプ命令制御ユニットは、前記第２のジャンプ命令がコミットする時に、前記ローカルメモリから前記第２の目標アドレスを回収するようにさらに構成されている、請求項２２に記載の装置。
【請求項２４】
前記ジャンプ命令制御ユニットは、前記第１のジャンプ命令がコミットする時に、前記少なくとも１つの将来の目標アドレスを前記ローカルメモリに書き込むように構成されている、請求項２２に記載の装置。
【請求項２５】
前記ジャンプ命令制御ユニットは、前記ローカルメモリが満杯ではない時に、２つの将来の目標アドレスをプリフェッチするように構成されている、請求項２２に記載の装置。
【請求項２６】
前記デジタルプロセッサは、パイプラインを含み、前記ジャンプ命令制御ユニットは、誤予測条件を検出することに応答して、該パイプラインをクリアするように構成されている、請求項２２に記載の装置。
【請求項２７】
パイプラインデジタルプロセッサでジャンプ動作を実施するための方法であって、
該プロセッサによって実行されるジャンプ命令の目標アドレスをメモリテーブルに書き込むことと、
該プロセッサの分岐予測器で第１のジャンプ命令を学習することであって、該第１のジャンプ命令は、該メモリテーブルの中の第１の目標アドレスに対するポインタを参照する、ことと、
該プロセッサのフェッチブロックで該第１のジャンプ命令をフェッチすることと、
該分岐予測器で該第１のジャンプ命令を検出することと、
ローカルメモリから該第１のジャンプ命令に対応する該第１の目標アドレスを読み取り、該第１の目標アドレスを該プロセッサの該フェッチブロックに提供することと、
該メモリテーブルの中の第２の目標アドレスを指すように該ポインタを修正することであって、該第２の目標アドレスは、第２のジャンプ命令に対応する、ことと、
該メモリテーブルから将来の目標アドレスをプリフェッチすることと、
該第１のジャンプ命令がコミットする時に、該プリフェッチされた将来の目標アドレスを該ローカルメモリに書き込むことと、
該第１のジャンプ命令がコミットする時に、該ローカルメモリから該第１の目標アドレスを回収することと
を含む、方法。
【請求項２８】
前記第２のジャンプ命令を検出することと、前記ローカルメモリの中の前記第２の目標アドレスを読み取ることとをさらに含む、請求項２７に記載の方法。
【請求項２９】
前記第２のジャンプ命令がコミットする時に、前記ローカルメモリから前記第２の目標アドレスを回収することをさらに含む、請求項２８に記載の方法。
【請求項３０】
前記デジタルプロセッサは、パイプラインを含み、前記方法は、誤予測条件を検出することに応答して、前記パイプラインをクリアすることをさらに含む、請求項２８に記載の方法。
【請求項３１】
前記目標アドレスをメモリテーブルに書き込むことは、ジャンプ命令の前記目標アドレスを、複数回実行される一連のジャンプ命令の開始時と、再度、該一連のジャンプ命令の終了時とに書き込むことを含む、請求項２７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の引用）
本願は、同時係属の米国特許出願第１２／３２８，４８４号（２００８年１２月４日出願）に基づく優先権および利益を主張する。該出願の全体が参照により本明細書に引用される。
【０００２】
（発明の分野）
本発明は、デジタルプロセッサでのジャンプ動作の実行に関し、より具体的には、新規のジャンプ二重間接命令およびジャンプ二重間接命令を実装するための装置に関する。
【背景技術】
【０００３】
ジャンプ命令は、一般に、デジタルプロセッサの命令セットアーキテクチャの中に含まれる。逐次プログラム実行中に、プロセッサは、逐次メモリアドレスから命令をフェッチする。ジャンプ命令は、第１の命令シーケンスから第２の命令シーケンスにプログラム実行を切り替えるように使用され、直接的または間接的に、目標アドレスを指定する。目標アドレスは、第２の命令シーケンスの第１の命令を含む。プロセッサがメモリからジャンプ命令をフェッチした時に、目標アドレスにジャンプして、第２の命令シーケンスの実行を開始する。
【０００４】
プログラムは、それぞれが異なる目標アドレスを伴う、複数のジャンプ命令を含み得る。ジャンプ命令は、例えば、異なるサブルーチンを実行するように使用され得る。ジャンプ命令は、条件付き、または無条件であり得る。条件ジャンプ命令は、一般に、分岐命令として既知である。
【０００５】
現在のプロセッサは、典型的に、パイプラインアーキテクチャを使用する。このようなプロセッサは、高速動作を達成するように、複数のパイプラインステージを含む。各パイプラインステージは、命令フェッチ、命令解読、データアドレス発生、計算等の、命令実行に関与する機能のうちの１つを実施する。プログラム命令は、連続するクロックサイクル上のパイプラインステージを通して進み、複数の命令が、同時に、種々のステージの完了時にあり得る。理想的には、パイプラインプロセッサは、クロックサイクルあたり１つの命令の実行を完了することができる。性能は、多数のパイプラインステージを提供することによって高めることができる。プロセッサの中のパイプラインステージの数は、一般に、「パイプライン深さ」と称される。
【０００６】
パイプラインアーキテクチャによって提供される高められた性能にも関わらず、特定のプログラム条件は、性能を低下させ得る。そのようなプログラム条件の実施例は、ジャンプ命令である。ジャンプ命令は、例えばデジタル信号プロセッサアプリケーションおよびマイクロコントローラアプリケーションを含む、大部分のコンピュータプログラムで一般的である。ジャンプ命令がパイプラインプロセッサを通して進み、かつ分岐予測が利用されない時、逐次命令は、パイプラインの中のジャンプ命令に従う。パイプラインの終わりにジャンプ命令がコミットする時には、現在パイプラインの中にある全ての命令を中止し、そしてジャンプ命令の目標アドレスから開始する命令を再実行することによって、パイプラインをクリアしなければならない。性能ペナルティは、パイプライン深さによって増大する。深いパイプラインアーキテクチャおよび頻繁なジャンプ命令を有するプログラムの場合、性能ペナルティが深刻になる可能性がある。
【０００７】
分岐予測技術は、当技術分野において既知である。典型的な分岐予測器では、分岐キャッシュメモリは、分岐のアドレスおよびジャンプ命令のアドレス、ならびに対応する予測情報を含む。ジャンプ命令がプログラムシーケンサによってフェッチされた時、分岐予測器は、そのメモリアドレスに基づいてジャンプ命令を検出する。分岐キャッシュメモリに含まれる予測情報は、プロセッサが、パイプラインをフラッシュせずに、目標アドレスにジャンプすることを可能にする。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従来の技術の分岐予測器は、性能に関して限定的な影響しか持たなかった。故に、デジタルプロセッサでジャンプ動作を実施するための、改良された方法および装置の必要性がある。
【課題を解決するための手段】
【０００９】
本発明の第１の局面によれば、パイプラインデジタルプロセッサでジャンプ動作を実施するための方法が提供される。方法は、プロセッサによって実行されるジャンプ命令の目標アドレスをメモリテーブルに書き込むことと、プロセッサによって実行されている第１のジャンプ命令を検出することであって、第１のジャンプ命令は、メモリテーブルの中の第１の目標アドレスに対するポインタを参照することと、プロセッサが、第１の目標アドレスにジャンプし、メモリテーブルの中の第２の目標アドレスであって、第２のジャンプ命令に対応する第２の目標アドレスを指すようにポインタを修正することによって、第１のジャンプ命令を実行することとを含む。
【００１０】
第１のジャンプ命令の実行はさらに、メモリテーブルから少なくとも１つの将来の目標アドレスをプリフェッチして、少なくとも１つの将来の目標アドレスをローカルメモリに書き込むことを含み得る。第２のジャンプ命令の検出に応答して、ローカルメモリの中で第２の目標アドレスがアクセスされ得る。
【００１１】
本発明の第２の局面によれば、分岐予測器を有するパイプラインデジタルプロセッサでジャンプ動作を実施するための方法が提供される。方法は、プロセッサによって実行されるジャンプ命令の目標アドレスを、メモリテーブルに書き込むことと、プロセッサの命令セットアーキテクチャでジャンプ命令を提供することであって、ジャンプ命令は、メモリテーブルの中の目標アドレスに対するポインタを参照する、ことと、第１のジャンプ命令を検出する分岐予測器に応答して、第１の目標アドレスにジャンプすることと、メモリテーブルの中の第２の目標アドレスを指すようにポインタを修正することであって、第２の目標アドレスは、第２のジャンプ命令に対応する、こととを含む。
【００１２】
第３の本発明の局面によれば、パイプラインデジタルプロセッサでジャンプ動作を実施するための装置が提供される。装置は、実行されるジャンプ命令の目標アドレスを記憶するメモリテーブルと、ローカルメモリと、メモリテーブルの中の目標アドレスに対するポインタを参照する、ジャンプ命令の実行を制御するためのジャンプ命令制御ユニットであって、第１の目標アドレスにジャンプする第１のジャンプ命令に応答し、メモリテーブルの中の第２の目標アドレスを指すようにポインタを修正し、メモリテーブルから少なくとも１つの将来の目標アドレスをプリフェッチし、および少なくとも１つの将来の目標アドレスをローカルメモリ書き込むためのジャンプ命令制御ユニットとを備える。
【００１３】
本発明の第４の局面によれば、パイプラインデジタルプロセッサでジャンプ動作を実施するための方法を提供する。方法は、プロセッサによって実行されるジャンプ命令の目標アドレスを、メモリテーブルに書き込むことと、プロセッサの分岐予測器で第１のジャンプ命令を学習することであって、第１のジャンプ命令は、メモリテーブルの中の第１の目標アドレスに対するポインタを参照する、ことと、プロセッサのフェッチブロックで第１のジャンプ命令をフェッチすることと、分岐予測器で第１のジャンプ命令を検出することと、ローカルメモリから第１のジャンプ命令に対応する第１の目標アドレスを読み取り、第１の目標アドレスをプロセッサのフェッチブロックに提供することと、メモリテーブルの中の第２の目標アドレスを指すようにポインタを修正することであって、第２の目標アドレスは、第２のジャンプ命令に対応する、ことと、メモリテーブルから将来の目標アドレスをプリフェッチすることと、第１のジャンプ命令がコミットする時に、プリフェッチされた将来の目標アドレスをローカルメモリに書き込むことと、第１のジャンプ命令がコミットする時に、ローカルメモリから第１の目標アドレスを回収することとを含む。
本明細書は、例えば、以下の項目も提供する。
（項目１）
パイプラインデジタルプロセッサでジャンプ動作を実施するための方法であって、
該プロセッサによって実行されるジャンプ命令の目標アドレスをメモリテーブルに書き込むことと、
該プロセッサによって実行されている第１のジャンプ命令を検出することであって、該第１のジャンプ命令は、該メモリテーブルの中の第１の目標アドレスに対するポインタを参照する、ことと、
該プロセッサが、
該第１の目標アドレスにジャンプすることと、
該メモリテーブルの中の第２の目標アドレスを指すように該ポインタを修正することであって、該第２の目標アドレスは第２のジャンプ命令に対応する、ことと
を行うことによって、該第１のジャンプ命令を実行することと
を含む、方法。
（項目２）
前記第１のジャンプ命令を実行することは、
前記メモリテーブルから少なくとも１つの将来の目標アドレスをプリフェッチすることと、
該少なくとも１つの将来の目標アドレスをローカルメモリに書き込むことと
をさらに含む、項目１に記載の方法。
（項目３）
前記第２のジャンプ命令を検出することに応答して、前記ローカルメモリの中の前記第２の目標アドレスにアクセスすることをさらに含む、項目２に記載の方法。
（項目４）
前記ポインタを修正することは、該ポインタをポストインクリメントすることを含む、項目１に記載の方法。
（項目５）
前記第１のジャンプ命令を実行することは、前記メモリテーブルの中の前記第１の目標アドレスにアクセスすることをさらに含む、項目１に記載の方法。
（項目６）
一連の命令の実行前に、前記メモリテーブルに書き込まれる前記目標アドレスを事前計算することをさらに含む、項目１に記載の方法。
（項目７）
前記第２のジャンプ命令がコミットする時に、前記ローカルメモリから前記第２の目標アドレスを回収することをさらに含む、項目３に記載の方法。
（項目８）
前記少なくとも１つの将来の目標アドレスは、前記第１のジャンプ命令がコミットする時に、前記ローカルメモリに書き込まれる、項目３に記載の方法。
（項目９）
前記少なくとも１つの将来の目標アドレスをプリフェッチすることは、前記ローカルメモリが満杯ではない時に、２つの将来の目標アドレスをプリフェッチすることを含む、項目３に記載の方法。
（項目１０）
前記デジタルプロセッサは、パイプラインを含み、前記方法は、誤予測条件を検出することに応答して、該パイプラインをクリアすることをさらに含む、項目３に記載の方法。
（項目１１）
前記第１のジャンプ命令を検出することは、前記プロセッサの中の分岐予測器によって実施される、項目１に記載の方法。
（項目１２）
前記目標アドレスをメモリテーブルに書き込むことは、ジャンプ命令の前記目標アドレスを、複数回実行される一連のジャンプ命令の開始時と、再度、該一連のジャンプ命令の終了時とに書き込むことを含む、項目１に記載の方法。
（項目１３）
分岐予測器を有するパイプラインデジタルプロセッサでジャンプ動作を実施するための方法であって、
該プロセッサによって実行されるジャンプ命令の目標アドレスをメモリテーブルに書き込むことと、
該プロセッサの命令セットアーキテクチャにおいてジャンプ命令を提供することであって、該ジャンプ命令は、該メモリテーブルの中の目標アドレスに対するポインタを参照する、ことと、
該分岐予測器が第１のジャンプ命令を検出することに応答して、第１の目標アドレスにジャンプすることと、
該メモリテーブルの中の第２の目標アドレスを指すように該ポインタを修正することであって、該第２の目標アドレスは、第２のジャンプ命令に対応する、ことと
を含む、方法。
（項目１４）
前記メモリテーブルから少なくとも１つの将来の目標アドレスをプリフェッチすることと、該少なくとも１つの将来の目標アドレスをローカルメモリに書き込むこととをさらに含む、項目１３に記載の方法。
（項目１５）
前記分岐予測器が前記第２のジャンプ命令を検出することに応答して、前記ローカルメモリの中の前記第２の目標アドレスにアクセスすることをさらに含む、項目１４に記載の方法。
（項目１６）
前記第２のジャンプ命令がコミットする時に、前記ローカルメモリから前記第２の目標アドレスを回収することをさらに含む、項目１５に記載の方法。
（項目１７）
前記少なくとも１つの将来の目標アドレスは、前記第１のジャンプ命令がコミットする時に、前記ローカルメモリに書き込まれる、項目１５に記載の方法。
（項目１８）
前記少なくとも１つの将来の目標アドレスをプリフェッチすることは、前記ローカルメモリが満杯ではない時に、２つの将来の目標アドレスをプリフェッチすることを含む、項目１５に記載の方法。
（項目１９）
前記デジタルプロセッサは、パイプラインを含み、前記方法は、誤予測条件を検出することに応答して、該パイプラインをクリアすることをさらに含む、項目１５に記載の方法。
（項目２０）
前記ポインタを修正することは、該ポインタをポストインクリメントすることを含む、項目１３に記載の方法。
（項目２１）
前記第１の目標アドレスにジャンプすることは、該第１の目標アドレスを前記プロセッサの命令フェッチステージに提供することを含む、項目１３に記載の方法。
（項目２２）
前記目標アドレスをメモリテーブルに書き込むことは、ジャンプ命令の前記目標アドレスを、複数回実行される一連のジャンプ命令の開始時と、再度、前記一連のジャンプ命令の終了時とに書き込むことを含む、項目１３に記載の方法。
（項目２３）
パイプラインデジタルプロセッサでジャンプ動作を実施するための装置であって、
実行されるジャンプ命令の目標アドレスを記憶するメモリテーブルと、
ローカルメモリと、
該メモリテーブルの中の目標アドレスに対するポインタを参照するジャンプ命令の実行を制御するためのジャンプ命令制御ユニットと
を備え、
該ジャンプ命令制御ユニットは、第１の目標アドレスにジャンプする第１のジャンプ命令に応答して、
該メモリテーブルの中の第２の目標アドレスを指すようにポインタを修正することと、
該メモリテーブルから少なくとも１つの将来の目標アドレスをプリフェッチすることと、
該少なくとも１つの将来の目標アドレスを該ローカルメモリに書き込むことと
を行う、装置。
（項目２４）
前記ジャンプ命令制御ユニットは、前記第２のジャンプ命令を検出することに応答して、前記ローカルメモリの中の前記第２の目標アドレスにアクセスするように構成されている、項目２３に記載の装置。
（項目２５）
前記ジャンプ命令制御ユニットは、前記第２のジャンプ命令がコミットする時に、前記ローカルメモリから前記第２の目標アドレスを回収するようにさらに構成されている、項目２４に記載の装置。
（項目２６）
前記ジャンプ命令制御ユニットは、前記第１のジャンプ命令がコミットする時に、前記少なくとも１つの将来の目標アドレスを前記ローカルメモリに書き込むように構成されている、項目２４に記載の装置。
（項目２７）
前記ローカルメモリが満杯ではない時に、２つの目標アドレスをプリフェッチするように構成されている、項目２４に記載の装置。
（項目２８）
前記デジタルプロセッサは、パイプラインを含み、前記ジャンプ命令制御ユニットは、誤予測条件を検出することに応答して、該パイプラインをクリアするように構成されている、項目２４に記載の装置。
（項目２９）
パイプラインデジタルプロセッサでジャンプ動作を実施するための方法であって、
該プロセッサによって実行されるジャンプ命令の目標アドレスをメモリテーブルに書き込むことと、
該プロセッサの分岐予測器で第１のジャンプ命令を学習することであって、該第１のジャンプ命令は、該メモリテーブルの中の第１の目標アドレスに対するポインタを参照する、ことと、
該プロセッサのフェッチブロックで該第１のジャンプ命令をフェッチすることと、
該分岐予測器で該第１のジャンプ命令を検出することと、
ローカルメモリから該第１のジャンプ命令に対応する該第１の目標アドレスを読み取り、該第１の目標アドレスを該プロセッサの該フェッチブロックに提供することと、
該メモリテーブルの中の第２の目標アドレスを指すように該ポインタを修正することであって、該第２の目標アドレスは、第２のジャンプ命令に対応する、ことと、
該メモリテーブルから将来の目標アドレスをプリフェッチすることと、
該第１のジャンプ命令がコミットする時に、該プリフェッチされた将来の目標アドレスを該ローカルメモリに書き込むことと、
該第１のジャンプ命令がコミットする時に、該ローカルメモリから該第１の目標アドレスを回収することと
を含む、方法。
（項目３０）
前記第２のジャンプ命令を検出することと、前記ローカルメモリの中の前記第２の目標アドレスを読み取ることとをさらに含む、項目２９に記載の方法。
（項目３１）
前記第２のジャンプ命令がコミットする時に、前記ローカルメモリから前記第２の目標アドレスを回収することをさらに含む、項目３０に記載の方法。
（項目３２）
前記デジタルプロセッサは、パイプラインを含み、前記方法は、誤予測条件を検出することに応答して、前記パイプラインをクリアすることをさらに含む、項目３０に記載の方法。
（項目３３）
前記目標アドレスをメモリテーブルに書き込むことは、ジャンプ命令の前記目標アドレスを、複数回実行される一連のジャンプ命令の開始時と、再度、該一連のジャンプ命令の終了時とに書き込むことを含む、項目２９に記載の方法。
【図面の簡単な説明】
【００１４】
本発明のさらなる理解のために、参照することにより本明細書に組み込まれる、添付の図面を参照する。
【図１】図１は、本発明の実施形態による、ジャンプ動作を実施するための装置の簡略ブロック図である。
【図２】図２は、本発明の実施形態による、ジャンプ動作を実施するためのジャンプ制御装置の簡略ブロック図である。
【図３】図３は、分岐予測器の読取ポインタの計算およびメモリテーブルを読み取るためのパラメータを例示する、ジャンプ制御装置のブロック図である。
【図４Ａ】図４Ａは、ローカルメモリの中の推論的な空条件の検出を例示する、ジャンプ制御装置のブロック図である。
【図４Ｂ】図４Ｂは、ローカルメモリの中の推論的な空条件の検出を例示する、ジャンプ制御装置のブロック図である。
【図５Ａ】図５Ａは、ローカルメモリの制御を例示する、ジャンプ制御装置のブロック図である。
【図５Ｂ】図５Ｂは、ローカルメモリの制御を例示する、ジャンプ制御装置のブロック図である。
【図６Ａ】図６Ａは、誤予測条件の処理を例示する、ジャンプ制御装置のブロック図である。
【図６Ｂ】図６Ｂは、誤予測条件の処理を例示する、ジャンプ制御装置のブロック図である。
【図７Ａ】図７Ａは、本発明の実施形態による、ジャンプ制御装置の動作を例示する、概略図である。
【図７Ｂ】図７Ｂは、本発明の実施形態による、ジャンプ制御装置の動作を例示する、概略図である。
【発明を実施するための形態】
【００１５】
本発明の実施形態による、ジャンプ命令を処理するためのデジタルプロセッサを図１に示す。デジタルプロセッサは、計算コア１０と、メモリ１２とを含む。計算コア１０およびメモリ１２は、従来技術で既知であるように、パイプラインアーキテクチャを有し得る。計算コア１０は、ステージＡ−Ｌを有する、パイプライン２０を含み得る。命令実行に関与する機能は、命令フェッチブロック５０と、分岐予測器５１と、命令デコーダ５３と、データアドレス発生器（ＤＡＧ）５４と、計算ブロックと、コミットブロック６１とを含む、パイプライン２０の機能ブロックによって実施される。異なるプロセッサ設計は、より多い、またはより少ないステージを有する場合があり、また、各機能が、パイプラインの１つ以上のステージを必要とする場合があることを理解されるであろう。また、ステージは、２つ以上の機能を実施し得る。
【００１６】
デジタルプロセッサは、様々な動作を実施するための命令を含む、命令セットを実行するように構成されている。本発明の実施形態によれば、命令セットは、本明細書で「ジャンプ二重間接」または「ＪＤＩ」命令と称される、新規のジャンプ命令を含む。特定のアルゴリズムを起動する深いパイプラインプロセッサでは、ＪＤＩ命令は、ジャンプ動作を実行する間、パイプラインバブルを回避することができる。
【００１７】
ＪＤＩ命令の実行と関連するデジタルプロセッサの構成要素を図１に示す。計算コア１０は、ＪＤＩ制御ユニット３０と、ローカルＪＤＩメモリ３２とを含む。加えて、メモリ１２は、メモリテーブル３４を含む。以下に説明するように、ＪＤＩ制御ユニット３０、ローカルＪＤＩメモリ３２、およびメモリテーブル３４は、ＪＤＩ命令を実行するように、パイプライン２０の構成要素と相互作用する。
【００１８】
ジャンプ二重間接命令（ＪＤＩ）は、実行されるルーチンの目標アドレスがジャンプ命令の実行前に既知である時に、ジャンプ動作を加速することができる。命令構文は、以下の通りであることができる。
ＪＵＭＰ（［Ｐｘ＋＋］）；
ここで、Ｐｘは、メモリテーブル３４の中のエントリに対するポインタを含む、一組のポインタレジスタのうちの１つである。メモリテーブル３４の中のエントリは、ジャンプ命令の目標アドレスを含む。加えて、ポインタは、ジャンプ命令がコミットする時に修正されるポストである。次の目標アドレスを得る際には、「ジャンプ二重間接」という名称で示唆されるように、２つの間接のレベルがある。
【００１９】
ＪＤＩ命令は、次の２つの条件が満たされる時に加速することができる。（１）目標アドレスを前もって計算して、メモリテーブル３４に配置することができ、かつ（２）ＪＤＩ命令を、パイプライン２０の分岐予測器によって学習することができる。目標アドレスは、ＪＤＩ命令の実行前に事前計算されて、メモリテーブル３４に記憶される。以下に説明するように、複数のＪＤＩ命令による使用のために、複数の目標アドレスをメモリテーブル３４に書き込むことができる。メモリテーブルは、「エンドテーブル」マーカーによって終了し得る。
【００２０】
ＪＤＩ命令の目標アドレスは、事前計算されて、ＪＤＩ命令が実行される順番でメモリテーブル３４に書き込まれる。メモリテーブル３４の中の各目標アドレスは、実行されるサブルーチンの第１の命令のアドレスを含み得る。ポインタレジスタＰｘは、メモリテーブル３４の開始場所を指すように初期化される。メモリテーブル３４に対応するＪＤＩ命令のうちのいくつかまたは全てがループで実行される場合、ポインタレジスタＰｘは、各ループ反復に関するループの開始を指すように初期化される。プロセッサは、単一のメモリテーブル３４を使用することができ、または、２組以上のサブルーチンを実行することが所望される場合は、２つ以上のメモリテーブルを使用することができる。ポインタレジスタＰｘは、メモリテーブルの中の開始場所を指すように初期化される。
【００２１】
ＪＤＩ命令は、各命令が初めて実行される時に、分岐予測器によって学習される。分岐予測器は、初めてアプリケーションプログラムで実行されるジャンプ命令を識別し、それらの命令のアドレスを記憶することによって、ジャンプ命令を「学習」する。プログラムの後続の反復に関してジャンプ命令のアドレスがアクセスされた時に、ジャンプ命令は、解読前に即時に予測され、命令の実行を開始することができる。分岐予測器によって学習されると、ＪＤＩ命令は、パイプライン２０の中で早期に検出され、予測が行われる。
【００２２】
ＪＤＩ予測は、メモリテーブル３４の中の目標アドレスを前もって読み取るという原理に基づいて動作する。ＪＤＩ命令を実行する時には、アドレス［Ｐｘ］に位置する現在のＪＤＩ命令の目標アドレスを含む、最高で３つの目標アドレスを読み取ってもよい。加えて、アドレス［Ｐｘ＋ｏｆｆｓｅｔ］に位置する、将来のＪＤＩ命令の目標アドレスが読み取られる。以下に説明するように、１つまたは２つの将来の目標アドレスが読み取られてもよい。将来の目標アドレスの小さいテーブル（図１のローカルＪＤＩメモリ３２）は、ＪＤＩ命令が、パイプラインのフェッチステージで検出された時に、推論的に予測を行うように利用される。ＪＤＩ命令が実行されるたびに、エントリをローカルＪＤＩメモリ３２に追加するように、付加的なプリフェッチが行われる。
【００２３】
ＪＤＩ制御ユニット３０を、図２にさらに詳細に示す。図２の実施形態では、ＪＤＩ制御ユニット３０は、ＪＤＩ制御論理１００と、ＪＤＩ検出ブロック１０２と、ＭＥＭ０パイプ１１０と、ＭＥＭ１パイプ１１２と、予測ＪＤＩパイプ１２０と、予測外ＪＤＩパイプ１２２とを含む。ＪＤＩ制御ユニット３０は、ＪＤＩ命令を実行するように、少なくともフェッチブロック５０と、分岐予測器５１と、デコーダ５３と、ＤＡＧ５４、ならびにメモリテーブル３４と、ローカルＪＤＩメモリ３２とを含む、パイプライン２０の要素とともに動作する。ＪＤＩ制御論理１００は、フェッチサイズおよびオフセット値をＤＡＧ５４に提供する。ＤＡＧ５４は、ＪＤＩ命令によって指定されるポインタレジスタＰｘに対応する、ポインタレジスタ１４０を含む。ＤＡＧ５４はまた、メモリテーブル３４からプリフェッチされるべき目標アドレスを指す、プリフェッチレジスタ１４２を含む。ポインタレジスタ１４０は、テーブル３４の中の現在の目標アドレスを指し、プリフェッチレジスタ１４２は、メモリテーブル３４の中の将来の目標アドレスを指す。
【００２４】
ＭＥＭ０パイプ１１０、ＭＥＭ１パイプ１１２、予測ＪＤＩパイプ１２０、および予測外ＪＤＩパイプ１２２は、１つもしくは複数のＪＤＩ命令の実行に関する情報を搬送する。現在の目標アドレスは、メモリテーブル３４からＭＥＭ０パイプ１１０にロードされる。１つもしくは複数の将来の目標アドレスは、メモリテーブル３４からＭＥＭ１パイプ１１２にロードされる。ＭＥＭ０パイプ１１０およびＭＥＭ１パイプ１１２は、パイプライン２０のステージＨからステージＬまで延在し得る。メモリテーブル３４から読み取られる目標アドレスは、パイプライン２０のステージＨで、ＭＥＭ０パイプ１１０およびＭＥＭ１パイプ１１２にロードされ得る。予測ＪＤＩ命令の指標は、予測ＪＤＩパイプ１２０にロードされ、予測外ＪＤＩ命令の指標は、予測外ＪＤＩパイプ１２２にロードされる。ＪＤＩパイプ１２０および１２２は、パイプライン２０のステージＥからステージＬまで延在し得る。パイプ１１０、１１２、１２０、および１２２にロードされる値は、連続したクロックサイクルでそれぞれのパイプを通して進み、以下に説明するように利用される。
【００２５】
ＪＤＩ制御論理１００は、ローカルＪＤＩメモリ３２を制御する。特に、ＪＤＩ制御論理１００は、プリフェッチされた目標アドレスのローカルＪＤＩメモリ３２の中への書き込み、ローカルＪＤＩメモリ３２からの目標アドレスの読み取り、および各ＪＤＩ命令がコミットした後にローカルＪＤＩメモリ３２からの目標アドレスの回収を制御する。
【００２６】
ローカルＪＤＩメモリ３２は、先入れ先出し（ＦＩＦＯ）構成を有し得る。いくつかの実施形態では、ローカルＪＤＩメモリ３２は、４の深さとも称される、４つの場所を有する。図２−７の実施形態では、ローカルＪＤＩメモリ３２は、ＦＩＦＯ構成を有し、「ローカルＪＤＩ  ＦＩＦＯ」と表記される。このＪＤＩメモリ３２の構成は、単に一例として与えられるものであり、本発明の範囲を限定するものではないことを理解されるであろう。
【００２７】
ジャンプ二重間接命令は、複数のサブルーチンの目標アドレスが事前に既知である時に、ジャンプを加速する。目標アドレスは、メモリテーブル３４に記憶され、ポインタレジスタ１４０の中の現在のポインタは、デコーダ５３の中のＪＤＩ命令の現在の目標アドレスを指す。プリフェッチレジスタ１４２の第２のポインタは、まだパイプライン２０に進入していない将来のＪＤＩ命令のための、メモリテーブル３４の中の目標アドレスを指す、先読みポインタである。第２のポインタは、プリフェッチされる目標アドレスのメモリテーブル３４の場所を決定するために、オフセット値およびフェッチサイズを使用する。
【００２８】
デコーダ５３のＪＤＩ命令は、ＤＡＧ５４に、プリフェッチされたアドレスをＪＤＩメモリ３２に送信させる。したがって、ＪＤＩメモリ３２は、パイプライン２０の中で早期に分岐予測器５１によって予測される、将来のＪＤＩ命令のアドレスを保持する。予測されたＪＤＩ命令がコミットブロック６１においてコミットする時に、それは、ＪＤＩメモリ３２から対応する目標アドレスを回収し、ＪＤＩ命令が解読ステージ５３を通過した時に、メモリテーブル３４からプリフェッチされた目標アドレスをＪＤＩメモリ３２に書き込む。
【００２９】
下記の表１は、ＪＤＩ命令、ポインタレジスタ１４０に含まれる対応するポインタ、およびメモリテーブル３４に含まれる目標アドレスの実施例を示す。第１のＪＤＩ命令ＪＤＩ０は、メモリテーブル３４の中の場所３２７に対するポインタを含む、レジスタＰ０を参照する。場所３２７は、目標アドレス０１９８を含む。命令ＪＤＩ０が、パイプライン２０を通して進み、コミットするものと仮定する。ＪＤＩメモリ３２は、命令ＪＤＩ０がパイプラインを通して進んだ時に空であった。したがって、命令ＪＤＩ０は、２つの目標アドレス０２０８および０２７８が、メモリテーブル３４からプリフェッチされるようにした。命令ＪＤＩ０がコミットする時に、２つのプリフェッチされた目標アドレスをＪＤＩメモリ３２に書き込む。
【００３０】
【表１】
0005611972.tif 000002
複数のポインタは、ＪＤＩメモリ３２の動作と関連する。レジスタ１３０の中のアーキテクチャの書込ポインタｆｆ＿ｗｒｐｔｒ（図３）は、書き込むことができるＪＤＩメモリの中の次の場所を指す。レジスタ１３２のアーキテクチャの読取ポインタｆｆ＿ｒｄｐｔｒは、読み取ることができるＪＤＩメモリの中の次の場所を指す。レジスタ１３４の中の分岐予測器の読取ポインタｂｐ＿ｒｄｐｔｒは、分岐予測器５１によって検出される次のＪＤＩ命令の目標アドレスを読み取るように、プリインクリメントする。上記の実施例では、命令ＪＤＩ０がコミットした後の、ＪＤＩメモリ３２の読取ポインタｆｆ＿ｒｄｐｔｒおよび書込ポインタｆｆ＿ｗｒｐｔｒの状態は、以下の通りである。ｆｆ＿ｒｄｐｔｒは、目標アドレス０２０８を含む、場所０を指し、ｆｆ＿ｗｒｐｔｒは、ＪＤＩメモリ３２の次の空場所である、場所２を指す。
【００３１】
分岐予測器の読取ポインタｂｐ＿ｒｄｐｔｒは、パイプライン２０に進入する次のＪＤＩ命令の目標アドレスを含むＪＤＩメモリ３２のエントリを指す。分岐予測器の読取ポインタは、次式で与えられる。
ｂｐ＿ｒｄｐｔｒ＝ｆｆ＿ｒｄｐｔｒ＋ｓｕｍ（ｕｊｄｉ）＋ｓｕｍ（ｊｄｉ）＋ｓｕｍ（ｐｊｄｉ）  （１）
式中、ｓｕｍ（ｕｊｄｉ）は、予測外ＪＤＩパイプ１２２を通して進む予測外ＪＤＩ命令の合計であり、ｓｕｍ（ｊｄｉ）は、予測ＪＤＩパイプ１２０を通して進む予測ＪＤＩ命令の合計であり、ｓｕｍ（ｐｊｄｉ）は、パイプライン２０の上流ステージの予測ＪＤＩ命令の合計である。
【００３２】
したがって、分岐予測器の読取ポインタは、現在パイプラインを通して進むあらゆるＪＤＩ命令を考慮する。
【００３３】
将来のＦＩＦＯのサイズパラメータｆｕｔｕｒｅ＿ｆｉｆｏ＿ｓｉｚｅは、予測ＪＤＩパイプ１２０および予測外ＪＤＩパイプ１２２の中の全てのＪＤＩ命令がコミットして、それらのプリフェッチされた目標アドレスをＪＤＩメモリ３２に書き込んだ時の、ＪＤＩメモリ３２の状態を表す。ＪＤＩ命令がコミットする時に、それらはまた、ＪＤＩメモリ３２からアドレスを回収する。将来のＦＩＦＯサイズは、新しいＪＤＩ命令が解読される時に、メモリテーブル３４から正しい目標アドレスをプリフェッチするように、ＤＡＧ５４を制御するために利用される。将来のＦＩＦＯサイズは、次式で与えられる。
ｆｕｔｕｒｅ＿ｆｉｆｏ＿ｓｉｚｅ＝ｆｉｆｏ＿ｅｎｔｒｉｅｓ＋ｓｕｍ（ｐｆｅｔｃｈ＿ａｄｄｒ）−ｓｕｍ（ｊｄｉ）  （２）
式中、ｆｉｆｏ＿ｅｎｔｒｉｅｓは、ＪＤＩメモリ３２の中の現在の目標アドレスの数であり、ｓｕｍ（ｐｆｅｔｃｈ＿ａｄｄｒ）は、メモリテーブル３４からプリフェッチされ、ＭＥＭ１パイプ１１２を通して進むアドレスの合計であり、ｓｕｍ（ｊｄｉ）は、予測ＪＤＩパイプ１２０を通して進む予測ＪＤＩと、予測外ＪＤＩパイプ１２２を通して進む予測外ＪＤＩとの合計である。
【００３４】
分岐予測器の読取ポインタｂｐ＿ｒｄｐｔｒを決定する、ＪＤＩ制御論理１００の要素を図３に示す。加算ユニット２００は、パイプ１２０および１２２を通過中のＪＤＩ命令の総数ｓｕｍｔ（ｊｄｉ）を提供するように、予測ＪＤＩパイプ１２０の中の予測ＪＤＩ命令の数と、予測外ＪＤＩパイプ１２２の中の予測外ＪＤＩ命令の数とを組み合わせる。加算ユニット２０２は、分岐予測器の読取ポインタｂｐ＿ｒｄｐｔｒを提供するように、パイプライン２０のステージ初期において、通過中のＪＤＩ命令の数ｓｕｍｔ（ｊｄｉ）と、読取ポインタｆｆ＿ｒｄｐｔｒと、予測ＪＤＩ命令の数ｓｕｍ（ｐｊｄｉ）とを組み合わせる。上記に示されるように、分岐予測器の読取ポインタは、パイプラインに進入するように、次のＪＤＩ命令のＪＤＩメモリ３２の中の目標アドレスを指す。
【００３５】
図３にさらに示されるように、ＪＤＩ制御論理１００は、将来のＦＩＦＯサイズｆｕｔｕｒｅ＿ｆｉｆｏ＿ｓｉｚｅを提供するように、上述の式（２）による値を組み合わせる、加算ユニット２１０、２１２、および２１４を含む。将来のＦＩＦＯサイズは、ＤＡＧオフセットおよびフェッチサイズ論理２２０に提供される。ＤＡＧオフセットおよびフェッチサイズ論理２２０は、下記の表２に従って、フェッチサイズおよびオフセット値をプリフェッチレジスタ１４２（図２）に提供する。
【００３６】
【表２】
0005611972.tif 000003
表２では、「ｆｕｔｕｒｅ＿ｆｉｆｏ＿ｓｉｚｅ」欄は、現在パイプ１２０および１２２を通過中である全てのＪＤＩ命令がコミットして、あらゆるプリフェッチされた目標アドレスをＪＤＩメモリ３２に書き込んだ時の、ＪＤＩメモリ３２の状態を表す。「ステージＥのＪＤＩ」欄は、現在のＪＤＩ命令がステージＤにある時に、ＪＤＩ命令がパイプラインのステージＥにあるといった、可能性は低いが、可能である状態を説明する。「オフセット」欄は、メモリテーブル３４の中の現在の目標アドレスから、プリフェッチされる第１の目標アドレスへのオフセットを表す。「Ｆｅｔｃｈ＿ｓｉｚｅ」欄は、プリフェッチされる目標アドレスの数を表す。「ｆｉｆｏサイズ増加」欄は、現在のＪＤＩ命令がコミットする時の、ＪＤＩメモリ３２の中の目標アドレス数の正味の変化を表す。
【００３７】
解読ＪＤＩ命令は、ＪＤＩ命令がコミットする時にＪＤＩメモリ３２が満杯にならないことが分かっている場合に、メモリテーブル３４から２つの目標アドレスをプリフェッチする。そうでない場合は、１つの目標アドレスがプリフェッチされる。２つの目標アドレスをプリフェッチすることで、ＪＤＩメモリ３２を満たすことを可能にし、それによって、ＪＤＩメモリの深さに等しい、多数の目標アドレスを予測に利用できる。ＪＤＩ命令がコミットする時に、ＪＤＩメモリ３２が満杯になるかどうかは、パイプラインの中の各ＪＤＩ命令がコミットする時にＪＤＩメモリに関与する変化を加算することによって、決定することができる。例えば、ＪＤＩメモリが空であり、第１のＪＤＩメモリＪＤＩ０が解読された場合、命令ＪＤＩ０がコミットする時にＪＤＩメモリが２つの目標アドレスを保持することが分かる。
【００３８】
第１のＪＤＩ命令は、２つの目標アドレスをＪＤＩメモリに書き込むが、ＪＤＩメモリが空であった場合、どちらも回収しない。第２の命令ＪＤＩ１が少し後に解読される場合、次いで命令ＪＤＩ１がコミットすると、ＪＤＩメモリが３つの目標アドレスを保持することが分かる。これは、命令ＪＤＩ１は、２つのアドレスをプリフェッチするが、ＪＤＩメモリから１つのエントリ（命令ＪＤＩ０によってプリフェッチされたエントリ）を回収するからである。将来のエントリの数がＪＤＩメモリの深さに等しい場合は、１つの目標アドレスがプリフェッチされる。ＪＤＩ命令は、満杯のＪＤＩメモリからそれ自体の目標アドレスを回収し、即時に、１つのプリフェッチされたアドレスをその場所に書き込み、ＪＤＩメモリを満杯の状態に保つ。
【００３９】
以下、将来の目標アドレスのプリフェッチングの実施例を説明する。ＪＤＩメモリ３２は、４つの場所を有し、メモリテーブル３４は、それぞれ、命令ＪＤＩ０−ＪＤＩ３に対応する、目標アドレスａｄｒ０−ａｄｒ３を含むものと仮定する。ＪＤＩメモリ３２が空である時、ポインタレジスタ１４０は、アドレスａｄｒ０を指し、プリフェッチレジスタ１４２は、アドレスａｄｒ１を指す。命令ＪＤＩ０は、アドレスａｄｒ０を指し、アドレスａｄｒ１およびａｄｒ２がプリフェッチされるようにする。したがって、ＪＤＩメモリ３２は、命令ＪＤＩ０がコミットする時に、アドレスａｄｒ１およびａｄｒ２を含む。アドレスａｄｒ０は、ＪＤＩメモリ３２に配置されず、したがって、命令ＪＤＩ０がコミットする時に、ＪＤＩメモリ３２から回収されない。
【００４０】
命令ＪＤＩ１が、パイプラインの中にある時に、それは目標アドレスａｄｒ１を指し、ＪＤＩメモリ３２では２つのエントリが検出される。したがって、命令ＪＤＩ１は、メモリテーブル３４からアドレスａｄｒ３およびａｄｒ４をプリフェッチする。命令ＪＤＩ１は、コミットする時にアドレスａｄｒ１を回収し、したがって、アドレスａｄｒ２、ａｄｒ３、およびａｄｒ４をＪＤＩメモリ３２に残す。同様に、命令ＪＤＩ２は、メモリテーブル３４からアドレスａｄｒ５およびａｄｒ６をプリフェッチし、コミットする時にアドレスａｄｒ２を回収する。したがって、命令ＪＤＩ２がコミットする時に、ＪＤＩメモリ３２は、アドレスａｄｒ３、ａｄｒ４、ａｄｒ５、およびａｄｒ６によって満杯になる。
【００４１】
以降、残りの各ＪＤＩ命令は、メモリテーブル３４から１つのアドレスをプリフェッチし、コミットする時にＪＤＩメモリ３２から１つのアドレスを回収する。ＪＤＩメモリ３２は、満杯の状態のままであり、最高で４つの将来のＪＤＩ命令のアドレスを、分岐予測ポインタによる予測に利用できる。
【００４２】
複数のＪＤＩ命令が間断なくパイプラインに進入する場合、分岐予測器の読取ポインタｂｐ＿ｒｄｐｔｒは、ＪＤＩメモリ書込ポインタｆｆ＿ｗｒｐｔｒを超えて、プリフェッチされたアドレスがまだ書き込まれていないＪＤＩメモリ３２の中の場所を指す場合がある。これは、エラー状態であり、より多くのプリフェッチされた目標アドレスがＪＤＩメモリ３２に書き込まれるまで、プロセッサが待機することを必要とする。この事例に対処するために、図４に示されるように、推論的な空信号が発生される。比較器ブロック２５０は、分岐予測器の読取ポインタｂｐ＿ｒｄｐｔｒを、ＪＤＩメモリの書込ポインタｆｆ＿ｗｒｐｔｒと比較する。２つのポインタが等しい場合、推論的な空信号がアサートされる。推論的な空信号は、フェッチブロック５０を待ち状態にさせる。それ以降、いかなる予測ＪＤＩ命令も、パイプラインに送信されない。推論的な空信号は、さらなる目標アドレスがＪＤＩメモリに書き込まれる時にアサート解除され、そして動作を再開する。
【００４３】
推論的な空信号はまた、ＪＤＩメモリ３２の中の未書込場所を指すことを回避するように、補正因子を分岐予測器の読取ポインタｂｐ＿ｒｄｐｔｒの式（１）に提供する。再び図４を参照すると、推論的な空信号は、マルチプレクサ２５２の制御入力に供給される。マルチプレクサ２５２は、推論的な空信号がアサート解除された時に、通常の分岐予測器の読取ポインタｂｐ＿ｒｄｐｔｒをＪＤＩメモリ３２に供給し、推論的な空信号がアサートされた時に、１つだけデクリメントされた分岐予測器の読取ポインタを供給する。加算ユニット２５４は、分岐予測器の読取ポインタをデクリメントする。
【００４４】
推論的な空信号がアサートされた時に、現在のＪＤＩメモリ書込ポインタｆｆ＿ｗｒｐｔｒが、推論的な空ポインタｓｐｅｃ＿ｅｍｐｔｙ＿ｐｔｒとして、レジスタ２６０に記憶される。推論的な空ポインタは、ＪＤＩメモリ３２の中の対応する場所を回収しようと試みる、ＪＤＩ命令の後の識別を可能にする。識別されたＪＤＩ命令は、そのアドレスがＪＤＩメモリに書き込まれていないので、待ち状態であり、そのアドレスが分岐予測器の読取ポインタｂｐ＿ｒｄｐｔｒによって分配されなかった命令である。
【００４５】
書込ポインタｆｆ＿ｗｒｐｔｒは、書き込むことができるＪＤＩメモリの中の次の場所を指す。分岐予測器がＪＤＩ命令を高速で予測する場合、分岐予測器の読取ポインタｂｐ＿ｒｄｐｔｒは、書込ポインタｆｆ＿ｗｒｐｔｒに追いついて、推論的な空状態を引き起こす。推論的な空状態である間にＪＤＩ命令が予測される場合、そのＪＤＩ命令は、推論的な空のＪＤＩ命令としてタグが付けられる。推論的な空のＪＤＩ命令の目標アドレスは、ＪＤＩ命令が分岐予測器によって予測された場合には、ＪＤＩメモリからの予測に利用できない。
【００４６】
プロセッサは、以下の状態まで推論的な空状態のままである。（１）パイプラインの中の通常のＪＤＩ命令がコミットし、より多くのエントリをＪＤＩメモリに書き込み、その時間中にいかなる予測も行われなかった。すなわち、その時間中に推論的な空のＪＤＩ命令が予測されなかった。または（２）推論的な空のＪＤＩ命令が、パイプラインの終わりに到達する。推論的な空のＪＤＩ命令が、コミットステージにおける誤予測信号を生じさせ、パイプラインをクリアする。推論的な空のＪＤＩ命令は、ポインタレジスタ１４０によって提供される目標アドレスへのジャンプを強制する。誤予測信号はまた、フェッチステージ５０が命令のフェッチを再開することができるように、推論的な空状態をクリアする。
【００４７】
ＪＤＩ予測の速度が高い場合、第４のＪＤＩ命令は、推論的な空のＪＤＩである傾向がある。ＪＤＩ０命令は、目標アドレス１および２をＪＤＩメモリ３２に書き込む。命令ＪＤＩ１およびＪＤＩ２がその後すぐに予測された場合、命令ＪＤＩ３は、目標アドレス３がまだＪＤＩメモリに書き込まれていないので、推論的な空状態を有効にする。分岐予測器が命令ＪＤＩ３を予測する前に、命令ＪＤＩ１がコミットステージに到達し、目標アドレス３をＪＤＩメモリに書き込む場合、誤予測を伴わずに、推論的な空状態は無効になる。目標アドレス３がＪＤＩメモリに書き込まれる前に、命令ＪＤＩ３が予測された場合、推論的な空状態は、命令ＪＤＩ３がコミットステージで誤予測信号を生じさせた時に、無効になる。誤予測信号は、命令ＪＤＩ３が予測された時に、それに対する目標アドレスが提供されなかったことを示す。
【００４８】
付加的なＪＤＩ制御機能を図５および６に例示する。予測ＪＤＩパイプ１２０を通して進むＪＤＩ命令の目標アドレスは、メモリテーブル３４からＭＥＭ０パイプ１１０にロードされる（図６）。ＭＥＭ０パイプ１１０からの目標アドレスは、ＪＤＩメモリ３２から回収されるべきであるプリフェッチされた目標アドレスと比較される。比較は、図６に示される比較器３００によって行われる。比較器３００は、パイプライン２０のステージＪに位置する。ＭＥＭ０パイプ１１０からの目標アドレスが、ＪＤＩメモリ３２からプリフェッチされた目標アドレスに整合しない場合、ＪＤＩ誤予測信号を発生させる。
【００４９】
ＭＥＭ０パイプ１１０の目標アドレスがＪＤＩメモリ３２からの目標アドレスに整合すると仮定すると、コミットステージ６１の中のＪＤＩ命令は、ＪＤＩメモリ３２から対応するエントリを回収し、プリフェッチされたアドレスをＪＤＩメモリ３２に書き込み、ＪＤＩメモリ３２の読取ポインタおよび書込ポインタを更新する。
【００５０】
図５を参照すると、ＪＤＩ制御論理１００は、プリフェッチされた目標アドレスが、メモリテーブル３４の終わりに到達したかどうかを決定するように、ｅｎｄ＿ｔａｂｌｅ検出器３０８および３１０を含む。目標アドレスは、ｅｎｄ＿ｔａｂｌｅ検出器３０８および３１０からレジスタ３１２および３１４に供給される。ｅｎｄ＿ｔａｂｌｅ検出論理３０８および３１０は、ＭＥＭ１パイプ１１２を通して進むプリフェッチされた目標アドレスを監視する。ｅｎｄ＿ｔａｂｌｅマーカーがＭＥＭ１パイプ１１２の出力で検出された場合、ｅｎｄ＿ｔａｂｌｅマーカーは、ＪＤＩメモリ３２への書き込みが遮断される。図５の実施例では、２つの目標アドレスがプリフェッチされた。第１のプリフェッチされた目標アドレス０１９８は、有効であり、ＪＤＩメモリ３２に書き込まれた。第２のプリフェッチされた目標アドレスは、ｅｎｄ＿ｔａｂｌｅマーカーであった。ｅｎｄ＿ｔａｂｌｅマーカーの検出に応答して、まだパイプ１１２を通して進んでいるプリフェッチされた目標アドレスを取り消すように、取消プリフェッチ信号がＭＥＭ１パイプ１１２に送信される。これらの目標アドレスは、規定のメモリテーブル３４の範囲外にある。取消プリフェッチ信号は、ＭＥＭ１パイプ１１２からの変数ｓｕｍ（ｐｆｅｔｃｈ＿ａｄｄｒ）が補正されるように利用される。その結果、将来のＦＩＦＯサイズパラメータは、プリフェッチレジスタ１４２のプリフェッチポインタに、メモリテーブル３４の中のｅｎｄ＿ｔａｂｌｅの場所を指させるように再調整される。これは、パイプラインに進入してエンドテーブルマーカーをプリフェッチすることを新しいＪＤＩ命令に強制する。
【００５１】
図５に示されるように、ポインタ制御論理３２０は、予測ＪＤＩパイプ１２０からＪＤＩコミット信号を受信し、ｅｎｄ＿ｔａｂｌｅ検出器３０８および３１０から有効なプリフェッチアドレス信号を受信する。ポインタ制御論理３２０は、有効なプリフェッチアドレスの数を計算し、制御信号をマルチプレクサ３３０に提供する。制御信号は、０、１、または２で、有効なプリフェッチアドレスの数を示す。マルチプレクサ３３０は、その入力で、ＪＤＩメモリ３２の書込ポインタｆｆ＿ｗｒｐｔｒと、加算ユニット３３２によって＋１だけインクリメントした書込ポインタと、加算ユニット３３４によって＋２だけインクリメントした書込ポインタとを受信する。マルチプレクサ３３０の出力は、更新した書込ポインタをＪＤＩメモリ３２に提供する。
【００５２】
ＪＤＩ命令がコミットする時に発生される回収エントリ信号は、対応する目標エントリをＪＤＩメモリ３２から回収させ、ＪＤＩメモリ３２の読取ポインタｆｆ＿ｒｄｐｔｒを更新するように使用される。回収エントリ信号は、制御信号として、マルチプレクサ３４０に提供される。マルチプレクサ３４０は、その入力で、読取ポインタｆｆ＿ｒｄｐｔｒと、加算ユニット３４２によって＋１だけインクリメントした読取ポインタとを受信する。マルチプレクサ３４０の出力は、更新した読取ポインタである。
【００５３】
本明細書で「ＪＤＩ誤予測」状態と称される複数の状態は、パイプラインをクリアさせ、したがって、ＪＤＩ誤予測ペナルティを被る。以下の状態は、ＪＤＩ誤予測を発生する。（１）コミットし、かつ、ローカルＪＤＩメモリがそのＪＤＩ命令の目標アドレスを含まない（ＦＩＦＯが空）と決定される第１のＪＤＩ命令、（２）前述した推論的な空状態、すなわち、分岐予測器の読取ポインタｂｐ＿ｒｄｐｔｒが、ＪＤＩメモリ３２の書込ポインタｆｆ＿ｗｒｐｔｒを超えた時に予測された、ＪＤＩ命令、（３）コミットしている予測外ＪＤＩ命令、および（４）ＪＤＩメモリ３２にあるそのアドレスが、メモリテーブル３４からの目標アドレスに整合しない予測ＪＤＩ命令。
【００５４】
図６を参照すると、ＪＤＩ誤予測論理４００は、上述の誤予測状態を表す信号を受信し、計算コア１０のフェッチブロック５０およびプログラムシーケンサにＪＤＩ誤予測信号を供給する。ＪＤＩ誤予測信号はまた、以下に説明するように、フェッチブロックに対する、およびプログラムシーケンサに対するＪＤＩ目標アドレスの出力を制御する。ＪＤＩ誤予測信号は、パイプラインをクリアさせる。ＪＤＩ誤予測論理４００は、比較器３００から予測ＪＤＩ不整合信号を受信し、予測外ＪＤＩパイプ１２２から予測外ＪＤＩコミット信号を受信する。加えて、ＪＤＩ誤予測論理４００は、ＦＩＦＯ空論理４１０からＦＩＦＯ空信号を受信し、推論的な空論理４１２から推論的な空信号を受信する。誤予測状態を示す任意の信号がアサートされた場合、ＪＤＩ誤予測信号がアサートされ、パイプラインをクリアさせる。
【００５５】
ＦＩＦＯの空の誤予測状態を決定するために、加算ユニット４２０は、書込ポインタｆｆ＿ｗｒｐｔｒから読取ポインタｆｆ＿ｒｄｐｔｒを減算して、ＪＤＩメモリ３２の中のエントリの数を決定する。ＪＤＩ命令がコミットする時にエントリの数がゼロであると、ＦＩＦＯ空論理４１０によって決定された場合、ＦＩＦＯの空の誤予測信号がＪＤＩ誤予測論理４００に提供される。
【００５６】
コミットポインタｆｆ＿ｃｍｐｐｔｒは、ＪＤＩ命令がコミットするＪＤＩメモリ３２から、どのアドレスを回収するべきかを決定する。加算ユニット４３０は、予測ＪＤＩパイプ１２０の最後の３つのステージの中のＪＤＩ命令の合計を決定する。加算ユニット４３２は、コミットポインタｆｆ＿ｃｍｐｐｔｒを提供するように、加算ユニット４３０の結果を読取ポインタｆｆ＿ｒｄｐｔｒと組み合わせる。コミットポインタは、ＪＤＩメモリ３２、および推論的な空論理４１２に提供される。ＪＤＩ命令がコミットする時にコミットポインタｆｆ＿ｃｍｐｐｔｒが推論的な空ポインタと等しいと、推論的な空論理４１２によって決定された場合、推論的な空の誤予測信号が、ＪＤＩ誤予測論理４００に提供される。
【００５７】
図６に示されるように、コミットステージの中のマルチプレクサ４５０は、第１の入力４５２で、ローカルＪＤＩメモリ３２から予測目標アドレスを受信する。分岐予測器の読取ポインタｂｐ＿ｒｄｐｔｒによって、ローカルＪＤＩメモリ３２の中で予測目標アドレスがアクセスされる。図６の実施例では、分岐予測器５１の中のＪＤＩ命令ｐｊｄｉ３の予測目標アドレスは、マルチプレクサ４５０の第１の入力４５２に供給される。マルチプレクサ４５０は、第２の入力４５４で、ＭＥＭ０パイプ１１０から、コミットステージの中の現在のＪＤＩ命令の目標アドレスを受信する。マルチプレクサ４５０は、ＪＤＩ誤予測論理４００からのＪＤＩ誤予測信号によって制御される。特に、ＪＤＩ誤予測信号がアサートされない時に、マルチプレクサ４５０は、ＪＤＩ目標アドレスとして、予測目標アドレスをフェッチブロックおよびプログラムシーケンサに供給する。ＪＤＩ誤予測信号がアサートされた時に、マルチプレクサ４５０は、ＪＤＩ目標アドレスとして、コミットステージの中の現在のＪＤＩ命令の目標アドレスを供給する。
【００５８】
ＪＤＩ命令の処理を、図７の概略図に例示する。図７では、理解し易いように、プロセッサのパイプラインアーキテクチャを無視する。ＪＤＩ命令は、ブロック５００の中の一連の命令から検出される。検出したＪＤＩ命令の目標アドレスは、ＭＥＭ０パイプ１１０にロードされる。動作５０２で、将来の目標アドレスがメモリテーブル３４からプリフェッチされ、プリフェッチされた目標アドレスは、ＭＥＭ１パイプ１１２にロードされる。ＪＤＩ命令は、処理中に、ブロック５１０の予測されたもの、ブロック５１２の予測外のもの、ブロック５１４の処理される第１のＪＤＩ命令、またはブロック５１６の推論的な空のＪＤＩ命令として識別される。動作５３０で、ＭＥＭ１パイプ１１２からのｅｎｄ＿ｔａｂｌｅマーカーが検出される。ｅｎｄ＿ｔａｂｌｅマーカーが検出されなかった場合、動作５３２で、ローカルＪＤＩメモリ３２の書込ポインタが更新される。ｅｎｄ＿ｔａｂｌｅマーカーが検出された場合、動作５３４で、ＪＤＩメモリ３２の書込ポインタは、その現在の状態に保持される。プリフェッチされた目標アドレスは、検出したＪＤＩ命令がコミットする時にローカルＪＤＩメモリ３２に書き込まれる。
【００５９】
動作５４０での分岐予測器の読取ポインタの更新は、論理機能５４２によって制御される。特に、分岐予測器の読取ポインタは、ＪＤＩ命令が予測されたものであり、第１のＪＤＩ命令ではなく、かつ推論的な空のＪＤＩ命令ではないと、論理機能５４２によって決定された場合に更新される。
【００６０】
誤予測状態は、論理機能５４４によって決定される。特に、ＪＤＩ誤予測状態は、ＪＤＩが予測外であるか、第１のＪＤＩ命令であるか、推論的な空のＪＤＩ命令であるか、またはＪＤＩメモリ３２からのプリフェッチアドレスがＭＥＭ０パイプ１１０からの現在のアドレスに整合していないかが示される。これらの状態のうちのいずれかでは、ＪＤＩ誤予測信号が、フェッチブロックおよびプログラムシーケンサに発行される。ＪＤＩ誤予測信号はまた、マルチプレクサ４５０に対する制御信号として供給される。
【００６１】
動作５５０で、コミットステージでの現在のＪＤＩ命令の目標アドレスは、ＪＤＩメモリ３２からのプリフェッチアドレスと比較される。比較は、論理機能５５２に従って、第１のＪＤＩ命令を除いて、あらゆるＪＤＩ命令について行われる。動作５５０の比較が失敗した（現在のＪＤＩ命令の目標アドレスが、プリフェッチされた目標アドレスに整合していない）場合、動作５５４で、ＪＤＩメモリ３２のための読取および書込ポインタがクリアされる。比較結果はまた、論理機能５４４および論理機能５６０に供給される。あらゆるＪＤＩ命令について動作５５０の比較が失敗しなかった（現在のＪＤＩ命令の目標アドレスが、プリフェッチされた目標アドレスに整合している）場合、動作５６２で、ＪＤＩメモリ３２の読取ポインタが更新され、プリフェッチされた目標アドレスを効果的に回収する。
【００６２】
前述のように、マルチプレクサ４５０は、ＪＤＩ誤予測信号がアサートされなかった場合、ＪＤＩ目標アドレスとして、ＪＤＩメモリ３２から、プリフェッチされた目標アドレスを出力し、ＪＤＩ誤予測信号がアサートされた場合、ＭＥＭ０パイプ１１０から現在のアドレスを出力する。ＪＤＩ目標アドレスは、さらなる処理のために、フェッチブロックおよびプログラムシーケンサに供給される。
【００６３】
性能を高めるための技術を、上記の表１を参照して説明する。目標アドレス０１９８、０２０８、および０２７８で開始するサブルーチンは、ループ中に複数回実行されるものと仮定する。性能は、追加の目標アドレスをメモリテーブル３４に書き込むことによって高めることができる。特に、複数回実行される一連のＪＤＩメモリの中の第１のＪＤＩメモリの目標アドレスは、一連のＪＤＩ命令の開始時に、および再度、終了時に、メモリテーブル３４に書き込まれる。表１に示されるように、目標アドレス０１９８は、メモリテーブル３４の開始時に、および再度、複数回実行されるＪＤＩ命令の終了時に書き込まれる。この技術は、ループの１回目の実行以外は、一連の中の最後のＪＤＩ命令を実行するたびのＪＤＩ誤予測のペナルティを回避する。
【００６４】
したがって、本発明の少なくとも１つの実施形態の複数の局面を説明したが、当業者には、種々の変更、修正、および改良が容易に生じるものと理解されたい。このような変更、修正、および改良は、本開示の一部であるとされ、また本発明の精神と範囲内にあるものとされる。したがって、上述の説明および図面は単に例示を目的としたものである。
【図１】
0005611972.tif 000004
【図２】
0005611972.tif 000005
【図３】
0005611972.tif 000006
【図４Ａ】
0005611972.tif 000007
【図４Ｂ】
0005611972.tif 000008
【図５Ａ】
0005611972.tif 000009
【図５Ｂ】
0005611972.tif 000010
【図６Ａ】
0005611972.tif 000011
【図６Ｂ】
0005611972.tif 000012
【図７Ａ】
0005611972.tif 000013
【図７Ｂ】
0005611972.tif 000014