復帰スタックを管理する方法であって、復帰命令に関連する復帰レベルの数を決定すること、およびその数の復帰アドレスを前記復帰スタックからポップすることを含む、方法。前記復帰スタックから最後にポップされた復帰アドレスを、命令プリフェッチングのための予測復帰アドレスとして命令プリフェッチユニットに与えることをさらに含む、請求項1に記載の方法。復帰命令に関連する復帰レベルの数を決定することが、前記復帰命令に関連する復帰レベル標識値を読み取ることを含む、請求項1に記載の方法。前記復帰命令に関連する復帰レベル標識値を読み取ることが、前記復帰命令に埋め込まれた値を読み取ることを含む、請求項3に記載の方法。復帰命令に関連する復帰レベルの数を決定することが、埋込み復帰レベル標識を復帰命令が有しているかどうかを判定することを含み、有している場合は、前記復帰レベル標識を読み取ることによって復帰レベルの数を決定することを含み、そうでない場合は、前記復帰スタックのデフォルト復帰レベル設定に基づき復帰レベル標識の数を決定することを含む、請求項1に記載の方法。前記復帰スタックが、埋込み復帰レベル標識を欠いている復帰命令に対しては前記復帰スタックから1つの復帰アドレスをポップするように、また、埋込み復帰レベル標識を有する復帰アドレスに対しては前記復帰スタックから標識で示される数の復帰アドレスをポップするように、前記復帰スタックの前記デフォルト復帰レベル設定を1に設定することをさらに含む、請求項5に記載の方法。復帰命令に関連する復帰レベルの数を決定することが、プロシージャ呼出しの連鎖系列中のプロシージャ呼出しの数をカウントすることを含む、請求項1に記載の方法。復帰命令に関連する復帰レベルの数を決定することが、連鎖プロシージャ呼出しを検出すること、所与の一連のプロシージャ呼出しのネスティング深さをトラッキングすること、および前記ネスティング深さに応じて前記所与の一連のプロシージャ呼出し中の最後の復帰命令に対する復帰レベルの数を設定することを含む、請求項1に記載の方法。複数の復帰アドレスを記憶するように構成された復帰スタックと、復帰アドレスを前記復帰スタックに順次プッシュし、復帰アドレスを前記復帰スタックから順次ポップするように概して構成され、特に、所与の復帰命令に関連する復帰レベルの数を決定し、その数の復帰アドレスを前記復帰スタックからポップするように広く構成された復帰スタックコントローラとを含む、復帰スタック回路。前記復帰スタックコントローラがさらに、前記復帰スタックから最後にポップされた復帰アドレスを命令プリフェッチングのための予測復帰アドレスとして命令プリフェッチユニットに与えるように構成された、請求項9に記載の復帰スタック回路。前記復帰スタックコントローラが、前記所与の復帰命令に関連する復帰レベル標識値を読み取ることによって復帰命令に関連する復帰レベルの数を決定するように構成された、請求項9に記載の復帰スタック回路。前記復帰スタックコントローラが、前記所与の復帰命令に埋め込まれた値を前記復帰レベル標識として読み取るように構成された、請求項11に記載の復帰スタック回路。前記復帰スタックコントローラが、埋込み復帰レベル標識を前記所与の復帰命令が有しているかどうかを判定し、有している場合は、前記復帰レベル標識を読み取ることによって復帰レベルの数を決定し、そうでない場合は、前記復帰スタックのデフォルト復帰レベル設定に基づき復帰レベル標識の数を決定することによって、前記所与の復帰命令に関連する復帰レベルの数を決定するように構成された、請求項9に記載の復帰スタック回路。前記復帰スタックが、埋込み復帰レベル標識を欠いている復帰命令に対しては前記復帰スタックから1つの復帰アドレスをポップするように、また、埋込み復帰レベル標識を有する復帰命令に対しては前記復帰スタックから標識で示される数の復帰アドレスをポップするように、前記復帰スタックの前記デフォルト復帰レベル設定を1に設定することをさらに含む、請求項13に記載の復帰スタック回路。前記復帰スタックコントローラが、プロシージャ呼出しの連鎖系列中のプロシージャ呼出しの数をカウントすることによって前記所与の復帰命令に関連する復帰レベルの数を決定するように構成された、請求項9に記載の復帰スタック回路。前記復帰スタックコントローラが、連鎖プロシージャ呼出しを検出すること、所与の一連のプロシージャ呼出しのネスティング深さをトラッキングすること、および前記ネスティング深さに応じて前記所与の一連のプロシージャ呼出し中の最後の復帰命令に対する復帰レベルの数を設定することによって、前記所与の復帰命令に関連する復帰レベルの数を決定するように構成された、請求項9に記載の復帰スタック回路。復帰命令に関連する復帰レベルの数を決定すること、およびその数に対応する値に、前記復帰命令に関連する復帰レベル標識を設定することを含む、コンピュータプログラムコンパイルの方法。復帰命令に関連する復帰レベルの数を決定することが、プロシージャ呼出しの連鎖系列中のプロシージャ呼出しの数をカウントすることを含む、請求項17に記載の方法。復帰命令に関連する復帰レベルの数を決定することが、連鎖プロシージャ呼出しを検出すること、所与の一連のプロシージャ呼出しのネスティング深さをトラッキングすること、および前記ネスティング深さに応じて前記所与の一連のプロシージャ呼出し中の最後の復帰命令に対する復帰レベルの数を設定することを含む、請求項17に記載の方法。前記その数に対応する値に、前記復帰命令に関連する復帰レベル標識を設定することが、前記復帰命令に埋め込まれた値に設定することを含む、請求項17に記載の方法。プロシージャ呼出しの連鎖系列に対する命令プリフェッチングのための復帰アドレスを予測する方法であって、プロシージャ呼出しの前記連鎖系列中の最後のプロシージャ呼出しの復帰アドレスの代わりに、プロシージャ呼出しの前記連鎖系列中の第1のプロシージャ呼出しの復帰アドレスを代用することと、前記代用の復帰アドレスを命令プリフェッチングに与えることとを含む、方法。所与の現在のプログラムプロシージャに関し、次のプログラムプロシージャへの呼出しが現在のプロシージャの復帰命令より前の最後の命令であることを認識することによってプロシージャ呼出しの連鎖系列を検出することをさらに含む、請求項22に記載の方法。プログラムコンパイル中にプロシージャ呼出しの連鎖系列を検出することをさらに含む、請求項22に記載の方法。プログラム実行中にプロシージャ呼出しの連鎖系列を検出することをさらに含む、請求項22に記載の方法。プロシージャ呼出しの前記連鎖系列中の最後のプロシージャ呼出しの復帰アドレスの代わりに、プロシージャ呼出しの前記連鎖系列中の第1のプロシージャ呼出しの復帰アドレスを代用することが、プロシージャ呼出しの前記連鎖系列中の連続したプロシージャ呼出しに対する復帰スタックに復帰アドレスを順次プッシュすること、および前記最後のプロシージャ呼出しに対する復帰命令に応答して、前記第1のプロシージャ呼出しの前記復帰アドレスを得るのに必要な回数だけ前記復帰スタックをポップすることを含む、請求項21に記載の方法。図1は、プロセッサコア12、命令プリフェッチユニット14、命令キャッシュ16、命令キャッシュコントローラ18、ロード/記憶ユニット20、データキャッシュ22、データキャッシュコントローラ24、および主トランスレーションルックアサイドバッファtranslationlookasidebuffer26を含む、マイクロプロセッサ10を少なくとも部分的に示す。非限定的な例として、マイクロプロセッサ10は、縮小命令セットコンピュータRISCアーキテクチャに基づくパイプラインプロセッサとすることができる。1つまたは複数の実施形態では、コア12は、1つまたは複数の多段命令パイプラインを備える命令実行ユニット図示せずを含む。動作の際、コア12はプログラム命令を実行し、また対応するロード/記憶データ操作を実行する。トランスレーションルックアサイドバッファ26は、コア12からの入力を受け入れ、コア12に出力を与える。より具体的には、トランスレーションルックアサイドバッファ26は、命令キャッシュ16およびデータキャッシュ22それぞれとコア12のインターフェースをとる。命令キャッシュ16およびデータキャッシュ22は高速のオンボードメモリを含み、マイクロプロセッサ10は、次に必要な命令およびデータでキャッシュを満たしておくために、命令キャッシュコントローラ18およびデータキャッシュコントローラ24を介して命令およびデータプリフェッチングを使用する。特に、マイクロプロセッサ10の命令プリフェッチング動作は、呼び出されたプロシージャからの復帰についての命令ストリームの予測を含む。プロシージャ復帰のアドレスを予測すると、プロシージャが完了した後に最も必要とされそうな命令のプリフェッチをマイクロプロセッサ10が開始できるようになることによって、性能が向上する。図2は、プロシージャ復帰命令の目標アドレスを予測するためにコア12によって使用される復帰スタック回路30の一実施例を示す。図示の復帰スタック回路30は、復帰スタック32、および付随する復帰スタックコントローラ34を含む。一時記憶レジスタを復帰スタックコントローラ34の制御のもとで論理的に一緒にリンクさせて、復帰スタック32を形成することができる。様々なバッファ構成を実施することができるが、一実施形態では、復帰スタック32は後入れ先出しメモリスタックとして構成される。コアの命令パイプライン図示せず中の命令実行ユニットがプロシージャ呼出しを予測またはその他の方法で認識したとき、復帰スタックコントローラ34は、対応する復帰アドレスを受け取り、それを復帰スタック32にプッシュする。すなわち、復帰スタックコントローラ34は、プロシージャ呼出しが予測されると1度に1つずつプロシージャ復帰アドレスを復帰スタック32に順次プッシュする。プロシージャ復帰命令が発生または予測されると、復帰スタックコントローラ34は通常、そのプロシージャ復帰アドレスをポップして、それを命令プリフェッチユニット14に与える。しかし、従来の復帰スタック管理方法に反して、復帰スタックコントローラ34は、復帰スタック32から1度に1つだけの復帰アドレスをポップすることによって命令プリフェッチングのための復帰アドレスを常に得るのではない。実際のところ、復帰スタックコントローラ34は一般に、復帰アドレスを復帰スタック32に順次プッシュするように、また、復帰アドレスを復帰スタック32から順次ポップするように構成されるが、特に、所与の復帰命令に関連する復帰レベルの数を決定するように、また、その数の復帰アドレスを復帰スタック32からポップするように構成される。次いで、最後にポップされた復帰アドレスが予測プロシージャ復帰アドレスとしてプリフェッチユニット14に与えられる。複数のアドレスを1度に復帰スタック32からポップできることにより、復帰スタックコントローラ34は、多重レベルプロシージャ呼出し中の最初のトップレベル呼出プロシージャの復帰アドレスを正しく予測することができる。このような多重レベルプロシージャ呼出しは、一連の連続した2つ以上のプロシージャ呼出しを含み、連続する各プロシージャの復帰アドレスが、直前のプロシージャの復帰命令に戻るように指している。図3は、多重レベルプロシージャ呼出しを含むいくつかのプロシージャ呼出しを有する、一連のプログラム命令を示す。図示のプログラム流れによれば、主プログラムは、proc1と呼ばれるプロシージャへの呼出しを含む。proc1のプロシージャは、proc2と呼ばれるプロシージャへの呼出しを含む。proc2のプロシージャは、proc3と呼ばれるプロシージャへの呼出しを含む。したがってproc1は、連続したプロシージャ呼出しのリンク連鎖中の最初のトップレベルプロシージャを含む。プロシージャ連鎖は、連続して呼び出された各プロシージャ中の復帰命令に対する復帰アドレスが、直前のプロシージャの復帰命令に戻るように指すことを特徴とする。つまり、proc3の復帰命令に対する復帰アドレスは、proc2の復帰命令のアドレスであり、proc2の復帰命令に対する復帰アドレスは、最初の呼出プロシージャであるproc1の後の次の命令のアドレスである。図4は、図3のプログラム流れに対する復帰スタックコントローラ34の動作を示す。主プログラムは、アドレスb1にプロシージャproc1への呼出命令を含み、したがって、復帰スタックコントローラ34は、復帰アドレスb11を復帰スタック32にプッシュするステップ100。次にプロシージャproc1は、アドレスb2にプロシージャproc2への呼出命令を含み、したがって、復帰スタックコントローラ34は、復帰アドレスb21を復帰スタック32にプッシュするステップ102。最後に、プロシージャproc2は、アドレスb3にプロシージャproc3への呼出命令を含み、したがって、復帰スタックコントローラ34は、復帰アドレスb31を復帰スタック32にプッシュするステップ104。この順番のプッシュにより、復帰アドレスb31、b21、およびb11を保持する復帰スタック32が得られ、b31は復帰スタック32の先頭に保持されている。proc3の復帰命令の場合、復帰スタック管理の従来の方法では、一番上のスタック値であるb31をポップし、それを命令プリフェッチングのための予測復帰アドレスとして使用する。こうするとproc2の復帰命令がフェッチされ、それにより復帰スタック32がアドレスb21をポップすることになり、このためproc1の復帰命令がフェッチされ、それにより復帰スタック32がb11をポップすることになる。この連続した復帰スタックポッピングおよび命令プリフェッチングは、電力もプロセッサ実行時間も浪費して、性能に悪影響を及ぼす。連続したプロシージャ呼出しの連鎖性質のために、実際の復帰アドレス位置は、最初のトップレベル呼出プロシージャであるproc1中のb11である。したがって、復帰スタックコントローラ34は、それが復帰スタック32からポップしなければならないレベルの数を決定することによって性能を最適化して、proc3の復帰命令に対する正しいトップレベル復帰アドレスを得るステップ106。復帰スタックコントローラ34は、その数の復帰アドレスを復帰スタック32からポップしステップ108、最後にポップされた復帰アドレスここではb11をプリフェッチユニットPFU14の予測復帰アドレスとして使用するステップ110。この論議では、復帰アドレスを復帰スタック32にプッシュし、また復帰スタック32からポップする観点で動作説明を構成しているが、このような動作は、スタックポインタを必要に応じ論理的に移動させることに基づくものとしてよく、それによって復帰スタック32中の指示値が命令プリフェッチングのために使用される復帰アドレスを表すようになることを理解されたい。図4は、復帰スタックコントローラの能力の非限定的な例であり、復帰スタック32に記憶された中間の復帰アドレスを飛び越すことができ、また、一連の連続したプロシージャ呼出し中の最初のトップレベルプロシージャに対応する復帰アドレスを、その連鎖中の最後のプロシージャの復帰命令を予測することにより、あるいは別な方法でその復帰命令に出会うことにより与えることができる。より一般的には、復帰スタックコントローラ34は、所与の復帰命令に関連する復帰レベルの数を決定し、対応する回数だけ復帰スタック32をポップして命令プリフェッチングのための復帰アドレスを得るように構成される。図5は、任意の所与の復帰命令に関連する復帰レベルの数を決定するための1つの機構を示し、この復帰命令は、復帰レベルの数をその値が示す復帰レベル標識を含み、あるいはそれと関連している。すなわち、1つまたは複数の実施形態では、マイクロプロセッサ10によって認識され使用される命令セットは、復帰操作符号操作符号opcodeと、操作符号と共に埋め込まれた、または別な方法でそれとリンクされた復帰レベル標識フィールドまたは復帰レベル標識タグとを備える復帰命令を含む。したがって、図6に示されるように、任意の所与の復帰命令に関連する復帰レベルの数を決定することは、命令の復帰レベルフィールドまたは復帰レベルタグを読み取ることを含む。復帰スタックコントローラ34は、図6の論理の処理を実施するように構成することができ、所与の復帰命令が復帰レベル標識を含んでいるか、あるいはそれと関連しているかどうかを判定するステップ120。含んでいる、あるいは関連している場合はステップ122、復帰スタックコントローラ34は、対応する回数だけ復帰スタック32をポップしてステップ124、命令プリフェッチングのための復帰アドレスを得る。そうでない場合はステップ122、復帰スタックコントローラ34は、デフォルト回数だけ復帰スタック32をポップしてステップ126、命令プリフェッチングのための復帰アドレスを得る。デフォルト回数は、例えば1回とすることができる。一実施形態では、プログラムコンパイラは、復帰命令ごとに復帰レベル標識を生成するように構成することもでき、したがって、復帰スタックコントローラ34は常に、復帰命令ごとに対応する復帰レベル標識値を読み取り、それに応じて復帰スタックポッピングを制御するように構成することができる。しかし、図6に示されるように、プログラムコンパイラは、復帰レベルの数が省略値の1を超える場合だけ復帰レベル標識を生成してもよい。言い換えると、第1のタイプの復帰命令は復帰レベル標識を含まず、復帰スタックコントローラ34は、このことを復帰スタック32が1度ポップされるべきという暗黙の標識として認識するように構成される。第2のタイプの復帰命令は復帰レベル標識を含み、復帰スタックコントローラは、その復帰レベル標識の値を使用してスタックポッピングを制御するように構成される。プログラムコンパイラの1つまたは複数の実施形態は、図7に示された処理論理にしたがって復帰命令の復帰レベル標識を生成するように構成されてもよい。コンパイラは、連続した2つ以上のプロシージャ呼出しが多重レベルプロシージャ呼出しとして一緒に連鎖されているかどうかを判定するように構成することができるステップ130。コンパイラは、例えば、呼び出されたプロシージャの復帰命令が呼出プロシージャの復帰命令に戻るように指しているかどうかを判定することによって、多重レベルプロシージャ呼出しを認識することができる。所与のプロシージャ呼出しが多重レベルプロシージャ呼出し連鎖の一部ではない場合、コンパイラは、呼出レベルカウンタなどの復帰レベルトラッキング情報をクリアしステップ132、通常のコンパイル動作を必要に応じ継続することができる。しかし、コンパイラが多重レベルプロシージャ呼出しを検出した場合、コンパイラは、多重レベルプロシージャ呼出しのネスティング呼出深さをトラッキングする。ネスティング深さをトラッキングする1つの方法は、連続して連鎖したプロシージャ呼出しをカウントすることを含むステップ134。したがってコンパイラは、多重レベルプロシージャの呼出深さを累算するためのカウンタを保持することがある。連鎖中の最後のプロシージャの復帰命令を検出するとステップ136、コンパイラは、トラッキングされたカウントに基づいて、その命令に対する復帰レベル標識を設定するステップ138。すなわち、上記で説明したように、コンパイラは、累算されたカウントに基づき、その最後のプロシージャの復帰命令に対する復帰レベル標識の値を設定することができる。したがって、コンパイル時にこの値を設定すると、実行時に、すなわちコンパイルされたプログラムコードをマイクロプロセッサ10が実行しているときに、復帰スタックコントローラ34が多重レベル復帰アドレス予測を実行できるようになる。図7の処理論理が、復帰スタックコントローラ34によって、またはマイクロプロセッサ10内の他のサポート論理によって実行される、動的な実行時処理として実施されてよいことも理解されたい。例えば、復帰スタックコントローラ34は、多重レベルプロシージャを検出するための実行時処理中にコアの命令実行ユニットまたは他の論理回路と協働するように構成することができ、それらのプロシージャの呼出深さをトラッキングするように構成することができ、またトップレベル復帰アドレスを予測するための適切な復帰レベル標識を生成するように構成することができる。したがって、復帰スタックコントローラ34、またはコア12内の他の回路は、必要な論理回路と、連鎖プロシージャ呼出しの認識、連鎖プロシージャ呼出しの呼出深さのトラッキング/カウント、および復帰アドレス予測を制御するための対応する復帰レベル標識値の生成のために必要なメモリ回路要素とを用いて構成することができる。一般に、復帰レベルの数は、コンパイル時または実行時に決定することができる。どちらの場合でも、所与の命令に関連する復帰レベルの数は、連鎖系列中のプロシージャ呼出しをカウントすることによって、その連鎖中の最後のプロシージャの復帰命令に対して予測される復帰アドレスが、連鎖中の直前のプロシージャのアドレスではなくトップレベルの最初の呼出プロシージャの復帰アドレスになるように決定することができる。どんな場合でも、マイクロプロセッサ10は、プロシージャ呼出しの連鎖系列中の最後のプロシージャ呼出しの復帰アドレスの代わりに、プロシージャ呼出しの連鎖系列中の第1のプロシージャ呼出しの復帰アドレスを代用すること、およびその代用の復帰アドレスを命令プリフェッチングに与えることに基づいて、プロシージャ呼出しの連鎖系列に対する命令プリフェッチングのための復帰アドレスを予測する方法を実施する。連鎖プロシージャ呼出しは、所与の現在のプログラムプロシージャに関し、次のプログラムプロシージャへの呼出しが現在のプロシージャの復帰命令より前の最後の命令であることを認識することによって検出することができる。このようにして、マイクロプロセッサ10の性能は、不必要な中間復帰命令がマイクロプロセッサの命令パイプラインにフェッチされ実行されることがないので、連鎖プロシージャ呼出しの実行に際して最適化される。1つまたは複数の実施形態についての上述の議論は本発明を限定せず、添付の図もまた限定しないことを当業者は理解されよう。正しくは、本発明は添付の特許請求の範囲、およびそれらの法的等価物によってのみ限定される。