説明

サブルーチン呼び出しを認識(recognize)する方法及び装置

【解決手段】サブルーチン呼び出しを認識する装置が開示される。装置は、レジスタの内容を受信する第1入力と、プログラムフローにおける非逐次的な変化を受信する第2入力と、前記プログラムフローにおける非逐次的な変化の後の逐次的な次のアドレスを受信する第3入力とを備える回路を含む。前記回路は、前記プログラムフローにおける非逐次的な変化がサブルーチン呼び出しであるかを判断するために、前記逐次的な次のアドレスと、前記レジスタの内容とを比較するように構成されている。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、大まかにはパイプライン型のプロセッサの領域に関する。より具体的には、消費電力を削減し、またパイプライン型のプロセッサの稼働率を向上させるために、サブルーチン呼び出しを認識する方法に関する。
【背景技術】
【0002】
マイクロプロセッサは、多種多様なアプリケーションにおいて計算のタスクを実行する。プロセッサの性能の向上は、高速動作、及び/またはソフトウェアの変更を通じた強化された機能性を可能にするために、ほぼ常に望ましい。ポータブルの電子機器のような多くの組み込みアプリケーションでは、省電力もまた、プロセッサの設計及び実装に重要な目標となる。
【0003】
多くの現代のプロセッサは、パイプラインアーキテクチャを採用する。パイプラインアーキテクチャでは、プロセッサ全体としてのスループットを向上させるため、逐次的な命令が、実行の際にオーバーラップする。パイプライン全体を通して円滑な実行を維持することは、高い性能の実現に寄与する。最新のプロセッサはまた、最近アクセスされたデータ及び命令のローカルコピーを保持する、高速なオンチップキャッシュメモリを有する、階層化メモリを利用する。
【0004】
実世界におけるプログラムは間接分岐命令を含み、間接分岐命令では、実行パイプラインの深いところで命令が実際に判断されるまでは、分岐の実際のふるまいは分からない。最新のプロセッサは、パイプステージのデコードやフェッチの期間のようなパイプラインの早期に、間接分岐命令における分岐動作が予測される、分岐予測のいくつかの形態を使用する。分岐予測技術の使用によりプロセッサは、間接分岐命令のターゲットを投機的に(speculatively)フェッチし、また投機的にフェッチされた命令の処理を開始するためにパイプラインをリダイレクト(redirect)する。実際の分岐ターゲットが、実行パイプステージのような後段のパイプステージにおいて判断される際には、もし分岐が予測ミスされた場合、投機的にフェッチされた命令はパイプラインからフラッシュされなければならず、新たな命令が正しいターゲットアドレスからフェッチされる。誤った分岐ターゲット予測に応答したプリフェッチ命令は、プロセッサの性能や消費電力に不利に影響する。
【0005】
間接分岐命令の一例は、サブルーチンから復帰するために使用される分岐命令を含む。例えば、サブルーチンからの復帰呼び出しは、復帰アドレスがレジスタのコンテンツによって定義された分岐命令を含み得る。復帰アドレスは、このサブルーチンが完了した後にフェッチされる次の命令を定義し、このサブルーチンをそもそも呼び出す分岐命令の後の一般的な命令である。多くの高性能アーキテクチャは、サブルーチン復帰に使用するための、リンクレジスタと一般的に呼ばれる個々の汎用レジスタを指定する。
【0006】
便宜上、復帰呼び出しはまた、分岐復帰命令とも呼ばれ得る。プロセッサパイプラインが分岐復帰命令につき分岐予測を使用するために、従来のソフトウェアは、復帰アドレスをリンクレジスタに記録するために、分岐及びリンク命令のような直接的(explicit)なサブルーチン呼び出しを含む。多くの高性能実装では、分岐及びリンク命令の処理のデコードステージにリンクスタック構造(link stack structure)が含まれる。リンク戻り値は、このスタック上にプッシュされる。これは、対応するサブルーチンが復帰する際に精密な分岐予測を可能にするためである。従来のリンクスタック構造は、パイプラインを通じて流れる複数のサブルーチン呼び出しをサポートし、またサブルーチン呼び出しの複数のレベルのネスト化をサポートするために、復帰アドレスのリストを含む。続いて、サブルーチン内の分岐復帰命令がデコードされている際、もし他の分岐予測ハードウェアが、プロセッサがパイプラインをリダイレクトすべきと決定した場合、ターゲットアドレスを予測する分岐予測において使用されるリンクスタック構造から、復帰アドレスが読み出される。もし、予測結果がパイプラインのリダイレクトすることを示していれば、パイプラインは、リンクスタック構造から読み出された復帰アドレスからの命令のフェッチを開始する。
【0007】
しかしながら、サブルーチンの呼び出しの際に、従来の分岐及びリンク命令を生成せずまたは組み込まないような、多くのコンパイラ及びレガシーコードが存在する。従って、そのような状況では、リンクスタック構造は、リンクスタック構造のインテグリティ(integrity)が脅かされる結果、使用されない。例えば、従来の、リンクスタック構造からの復帰アドレスのポップ(popping)は、そもそも復帰アドレスのポップをシミュレートした復帰命令に関連付けられないかもしれない。脅かされたリンクスタック構造の一つの影響には、復帰命令上における予測ミスの増加が含まれる。更に、サブルーチンの読み出しがプログラムセグメントにおいて認識されないそのような状況では、問題は複雑になる。なぜなら、分岐予測ハードウェアが、連続する認識不能なサブルーチン呼び出し上のリンクスタック構造を満たすためには使用されないからである。例として、ARM Ltd. コンパチブルプロセッサ上で実行され得るコードセグメントを含む下記の表を参照する。
【表1】

【0008】
表1のコードセグメントのプログラムフローは、アドレス0x00899808からスタートしてアドレス0x00899814までの連続的な順番での命令の処理を含む。アドレス0x00899814では、分岐命令はプログラムフローを、処理される次の命令がアドレス0x00990000(サブルーチンの開始)に位置するように変更する。
【0009】
リンクレジスタのセット(例えばLDR LR、0x00899818)と分岐命令(例えばBR)の組み合わせは、プロセッサに、その後のサブルーチンへの分岐を準備させる。本例では、呼び出される実際のサブルーチンは、アドレス0x00990000で開始し、アドレス0x0099000Cで終了する。LDR、LR、0x00899818命令は、アドレス0x00899818がリンクレジスタ(LR)にコピーされるべきことを示し、その結果、復帰アドレス(0x00899818)がリンクレジスタに保持される。サブルーチンの終わりでは、復帰アドレスがリンクレジスタから読み出される。より具体的には、復帰アドレスは、分岐復帰命令であるBX LRの実行時に読み出される。サブルーチン呼び出しを意味するその他のコードセグメントが存在し、リンクレジスタを変形する命令を含む。それは、MOV LR、PC BR [A]命令の連続した組み合わせのようなものである。なお、[A]は、サブルーチンの開始アドレスである。
【発明の概要】
【0010】
本開示は、そのようなレガシーソフトウェア、サブルーチン呼び出しに対応する2つまたはそれ以上の命令を有するコードセグメントを生成するコンパイラ、及びサブルーチンを呼び出す際に従来の分岐及びリンク命令を使用するためのレガシーソフトウェアの書き換えに必要なコストの拡がりを考慮する。更に本開示は、分岐復帰命令の際に復帰アドレスを効果的に予測し、リンクスタック構造を使用するために、サブルーチン呼び出しを意味する命令列を認識する、今日開発されたマイクロプロセッサの必要性を考慮する。
【0011】
一形態によれば、サブルーチン呼び出しの認識方法が与えられる。方法は、プログラムフローにおける非逐次的な変化を検出することと、前記プログラムフローにおける前記検出された非逐次的な変化の後の逐次的な次のアドレスを読み出すことと、前記非逐次的な変化がサブルーチン呼び出しであるかを判断するために、前記逐次的な次のアドレスをレジスタの内容と比較することと、を含む。
【0012】
別の形態は、サブルーチン呼び出しを認識するプロセッサにおける装置に関する。前記装置は、3つの入力を有する回路を含む。第1入力は、レジスタの内容を受信するように構成されている。第2入力は、プログラムフローにおける非逐次的な変化を受信するように構成されている。第3入力は、前記プログラムフローにおける非逐次的な変化の後の逐次的な次のアドレスを受信するように構成されている。前記回路は、前記プログラムフローにおける非逐次的な変化がサブルーチン呼び出しであるかを判断するために、前記逐次的な次のアドレスと、前記レジスタの内容とを比較するように構成されている。
【0013】
更に別の形態によれば、別の装置が開示される。前記装置は、命令を処理するプロセッサパイプラインと、それに結合された回路とを備える。前記回路は、レジスタの内容と、プログラムフローにおける非逐次的な変化の表示と、前記プログラムフローにおける非逐次的な変化の表示の後の逐次的な次のアドレスとを受信するように構成されている。前記回路はまた、プログラムフローにおける非逐次的な変化の前記表示がサブルーチン呼び出しであるかを判断するために、前記逐次的な次のアドレスと、前記リンクレジスタの内容とを比較するように構成されている。
【0014】
本発明の他の形態が容易に明らかになるであろうことが、本発明の種々の形態が例として図示され説明される、後述する詳細な説明から、当業者に理解される。理解されるように、本発明は、その他の異なる形態が可能であり、その幾つかの詳細は、本発明から逸脱しない種々のその他の観点から変形されることが出来る。従って、図面及び詳細な説明は、本来、例示的なものとみなされ、限定的なものとしてみなされるべきものでは無い。
【図面の簡単な説明】
【0015】
【図1】図1は、プロセッサの機能ブロック図。
【図2】図2は、図1に示すパイプラインを通過する命令の典型的な流れに従うタイミング図。
【図3】図3は、分岐ターゲットアドレスキャッシュ(BTAC)の典型的な部分。
【図4A】図4Aは、図1に示すIsCallロジック回路の典型的な形態。
【図4B】図4Bは、図1に示すIsCallロジック回路の典型的な形態。
【図5】図5は、サブルーチン呼び出しをrecognizeする方法を示すフローチャート。
【発明を実施するための形態】
【0016】
図1は、本発明の側面が用いられ得るプロセッサ100の機能ブロック図を示す。プロセッサ100は、最近処理された命令をキャッシュする命令キャッシュ(I-キャッシュ)110と、I-キャッシュで命令が見つからなかった際にメモリ138にアクセスするためのメモリインターフェース136を含む。メモリ138は、プロセッサ100内または外に配置され得、レイヤ2(L2)メモリ要素を備え得る。
【0017】
プロセッサ100はまた、命令を処理する命令パイプライン105と、間接分岐命令についてターゲットアドレスを予測し、ターゲットアドレスを処理するために命令パイプライン105をリダイレクトするかを予測する分岐予測回路132とを含み得る。もし、分岐予測回路132が命令パイプライン105のリダイレクトを予測した場合には、間接分岐命令は、「予測成立」したと呼ばれる。もし間接分岐命令が「予測成立」した場合には、分岐予測回路132は、分岐予測回路132は、間接分岐命令のターゲットアドレスを予測し、このターゲットアドレスにおける命令のフェッチを開始するために、命令パイプライン105をリダイレクトする。
【0018】
プロセッサ100は、制御ロジック回路122に従って、命令パイプライン105における命令を処理する。ある形態では、パイプライン105は2つまたはそれ以上の並列パイプラインを有するスーパースカラ設計であり得る。パイプライン105は、種々のパイプステージを含む。それは、命令フェッチユニット(IFU)ステージ102、デコード(DCD)ステージ106、命令キュー(IQ)ステージ108、レジスタアクセス(RACC)ステージ112、及び実行ステージ(EXE)120である。ある形態では、パイプステージは一度に単一の命令を処理し得る。別の形態では、パイプステージは、同時に2つまたはそれ以上の命令を、同時に処理し得る。本開示の範囲に限定されることなく、パイプステージはパイプライン105に加えられ、または削除され得ることに注意すべきである。プロセッサ100はまた、マイクロアーキテクチャラル仕様(microarchitectural convention)を介して、パイプステージ112及び120によってアクセス可能なレジスタを含む汎用レジスタ(GPR)ファイル118を含む。
【0019】
命令フェッチユニット(IFU)ステージ102は、I-キャッシュ110からの命令の読み出しを試みる。もし、命令アドレスがI-キャッシュ110内に見つからない場合には、命令フェッチユニット(IFU)は、対応する命令をメモリ138から取り出す要求を開始する。デコードステージ106は、命令を十分にデコードする。更に、デコードステージにおいて実行される従来の機能に加えてデコードステージ106は、ARM Inc.の分岐及びリンク命令のような従来のサブルーチン呼び出し命令を認識し、復帰アドレスをリンクスタック構造134に書き込む。リンクスタック構造134は、サーキュラーバッファとして管理されるレジスタのセットであり得る。復帰アドレスは、サブルーチンの完了時にパイプライン105がリダイレクトされる命令のアドレスである。間接分岐命令においてデコードステージ106は、分岐命令の投機的なターゲットからパイプライン105への命令のフェッチを開始するかを判断するために、分岐予測回路132を呼び出す。
【0020】
命令キューステージ108は、実行パイプラインのストールが生じた場合には、その期間、投機的なフェッチを継続するための1つまたはそれ以上の命令をバッファリングする。レジスタアクセスステージ112は、命令によって必要とされ得る際に、汎用レジスタ118から1つまたはそれ以上のオペランドを読み出す。実行ステージ(EXE)は、命令を実行するために、算術論理演算ユニット等の既知の要素を含む。実行ステージ120で生成された結果は、GPRファイル118に書き込まれる。実行ステージ120の期間に、実際の分岐の解決(resolution)が行われ、デコードステージ106で成された分岐予測が正しいかが確認される。もし実際の分岐先が予測された行き先と異なっていれば、分岐は予測ミスされたと言われる。
【0021】
実行ステージ120はまた、IsCall論理回路114を呼び出し、分岐命令が間接的(implicit)なサブルーチン呼び出しに対応するかを確認する。IsCall論理回路114は、この結果を分岐予測(BP)回路132に記録する。これは、その後の、間接的なサブルーチン呼び出しとして解釈される分岐命令の、DCD106またはIFU102のような前段のパイプステージの期間における実行のためである。一形態では、記録された結果は、BP回路132に保持され、分岐命令に関連付けられたフラグである。もし分岐命令が間接的なサブルーチン呼び出しであれば、IsCall論理回路114は、分岐命令に引き続く命令のアドレスによって、リンクスタック構造134をアップデートする。IsCall論理回路114は、図4の議論に関連して、更に詳細に説明される。
【0022】
図1では、IsCall論理回路114と結合された実行ステージ(EXE)120が図示されているが、IsCall論理回路114は、代わりにパイプライン105のより前段のステージに結合され得る。代わりの形態としては、デコードステージ(DCD)106が、IsCall論理回路114に結合され得る。この形態では、BR命令がデコードされたと判断するたびに、デコードステージ(DCD)106がIsCall論理回路114を呼び出す。
【0023】
当業者は、プロセッサ100の多数の変形例が可能であることを認識するだろう。例えば、プロセッサ100はI-キャッシュ110について、第2レベル(L2)キャッシュを含んでも良い。更に、プロセッサ100に示された1つまたはそれ以上の機能ブロックが、特定の形態から省略されても良い。変換索引バッファ(translation lookaside buffer)やデータキャッシュ等のような、プロセッサ100内に配置し得る他の機能ブロックは、本願の説明に密接に関係するものでは無く、明瞭化のために省略している。
【0024】
図2は、図1に示すパイプライン105を通り抜ける命令の流れを追ったタイミング図200である。より具体的には、タイミング図200でトレースされた命令の流れは、表1に示すコードセグメントである。本開示の目的のため、用語「間接的なサブルーチン呼び出し」は、組み合わされた機能が、サブルーチン呼び出しを準備するレジスタのセットと、サブルーチン呼び出しである、2つまたはそれ以上の命令の組み合わせを指す。例えば表1を参照して、2つの命令LDR LR、0x0089908と、BR 0x00990000が、間接的なサブルーチン呼び出しを定義する。この場合、LDR命令は、間接的なサブルーチン呼び出しの開始を定義し、BR命令は、間接的なサブルーチン呼び出しの終了を定義する。
【0025】
タイミング図200の列210A−210Eは、パイプライン105のステージに相当する。行1−11は、連続するタイミングサイクルに相当する。説明の目的で、各パイプステージは1サイクルあたり1つの命令を処理する。しかし、本開示の教示は、複数サイクルのパイプステージや、1サイクルあたり複数の命令を処理することが可能なパイプステージに適用出来ることが、当業者によって認識されるべきである。
【0026】
タイミング図200の列210Fは、間接分岐命令の結果がサブルーチン呼び出しであるかを示す、IsCallフラグと呼ばれるフラグの内容に相当する。列210Gは、リンクレジスタ(LR)の内容に相当する。列210Hは、IsCall論理回路114の結果としての、リンクスタック構造134のようなリンクスタック構造の内容に相当する。
【0027】
一般的に、命令はIFUステージ210Aに投入されて、次のサイクルで次のステージに伝搬される。サイクル1では、LDR LR、0x00899818命令がIFUステージ210A内にある。命令ADD、SUB、BR、及び一般的な(generic)命令INSTRが、順次、IFUパイプステージ210Aからフェッチされる。サイクル5では、時刻215において、デコードステージ210BがBR命令をデコードし、分岐予測回路132のような分岐予測を呼び出す。分岐予測は、BR命令が取り込まれることを予測し、よってサブルーチン命令ADD、SUB、MOV、及びBXを順次フェッチするためにパイプライン105がリダイレクトされる。サブルーチンは、表1に示されるADD命令から始まってBX命令で終了するまでの全ての命令を備える。パイプライン105をリダイレクトする前に、INSTRがパイプライン105からフラッシュされる。これは、INSTRが分岐予測の前にフェッチされたからである。BR命令に引き続くブランクサイクルは、パイプライン105において、フラッシュされずに取り込まれた場合のINSTR命令の位置を示す。
【0028】
サイクル1−5で、LDR命令がパイプステージ210B−210Eを伝搬する。時刻205のサイクル5において、実行ステージ210EはLDR命令を実行して、復帰アドレス0x00899818をリンクレジスタ(LR)にロードする。時刻220において、復帰アドレス(RA)0x00899818はリンクレジスタに取り込まれる。復帰アドレスは、表1におけるINSTRを指す。これは、アドレス0x00990000で開始するサブルーチンの実行終了時に、命令実行のフローがアドレス0x00899818に戻るべきであることを意味する。
【0029】
時刻225において、実行ステージ210Eは、BR命令を実行する。実行ステージ210Eは、BR命令が取り込まれるべきだったか否かを確認する。実行ステージ210EはまたIsCall論理回路114を呼び出し、BR命令がサブルーチンへの分岐であるかを判断する。フレーズ「サブルーチンへの分岐」はまたサブルーチン呼び出しとも呼ばれる。IsCall論理回路114は、INSTRが先にパイプライン105からフラッシュされたにもかかわらず、INSTRのアドレスである、BR命令に続く次のアドレスを使用する。この次の命令のアドレスはリンクレジスタ(LR)に保持される復帰アドレスと等しいので、IsCall論理回路114は、このBR命令に関連付けられたIsCallフラグ210Fをセットし、これを分岐予測回路132内にBR命令のアドレスと共に保持する。典型的な分岐予測保持要素は、図3に関連して説明される。また、IsCall論理回路114は、時刻230において、復帰アドレスをリンクスタック構造210Hにコピーする。
【0030】
サブルーチンの最後の命令BXは、時刻235のサイクル10でデコードされる。デコードステージ210Bは、BX命令を復帰呼び出しとして認識し、従って分岐予測132は、復帰アドレス(RA)をリンクスタック構造210Hからポップすることにより、プログラムフローを予測する。デコードステージ210Bは、アドレスが復帰アドレス(RA)に等しいINSTRからのフェッチを開始するため、パイプライン105をリダイレクトする(ポイント240参照)。またサイクル11では、RAがポップされたため(例えば、リンクスタック構造から読み出されて削除される)、リンクスタック構造210Hはもはや、復帰アドレスを保持しない。図1のプロセッサをタイミング図200に示されるように用いることで、リンクスタック構造に復帰アドレスを保持させることが可能な、LDR及びBRの組み合わせ命令によって、間接的なサブルーチン呼び出しが定義される。
【0031】
次回、BR命令がパイプライン105によって処理される際、分岐予測回路132は、そこに保持され、BR命令のアドレスに関連付けられた、セットされたIsCallフラグを使用し得る。そしてこれにより、最初にBR命令がパイプライン105によって処理された際よりも速やかに、リンクスタック構造を満たし(populate)得る。
【0032】
クロックサイクルnでは、同様のBR命令がパイプライン105に、IFUステージ210Aで投入される。クロックサイクルn+1では、INSTRがIFUステージ210Aに投入され、BR命令はDCDステージ210Bでデコードされる。DCDステージ210Bの期間、分岐予測回路132はBR命令のアドレスを調べ、それが、該BR命令はサブルーチン呼び出しであることを示す、セットされたIsCallフラグに対応していることを見いだす。従ってDCDステージ210Bは、参照符号245に示されるように、次のアドレス(INSTRのアドレス)をリンクスタック構造210Hにプッシュする。
【0033】
図3は、分岐ターゲットアドレスキャッシュ(BTAC)の一部の典型例である。BTAC300は、分岐予測回路132によって適切に使用される。BTAC300は、少なくとも3つの列、列310A、310B、及び310Nを含む。列310Aは、分岐命令のアドレスを収容する。列310Bは、分岐ターゲットアドレス、すなわち、対応する分岐命令が分岐する最初のアドレスを収容する。列310Nは、IsCallフラグの値を収容する。IsCallフラグは、セットされている際には、関連付けられた分岐命令がサブルーチン呼び出しであることを示す。行305は、表1においてアドレスが0x00899814のBR命令に対応し、そのターゲットアドレスはADD命令に対応する0x00990000であり、そのIsCallフラグはセットされている。
【0034】
図4A及び4Bは、IsCall論理回路の種々の形態を示す。これらの形態は、図1に示される実行パイプステージ120、またはより前段のパイプステージに結合され得る。図4Aは、図1に適切に使用され得るIsCall論理回路400の典型的な形態である。IsCall論理回路400は、比較器440、2ポートORゲート445、及び2ポートANDゲート450を含む。比較器440は、2つの入力を受信する。この入力は、リンクレジスタ(LR)405の値を含む入力と、次のアドレス410を含む入力である。図2で説明したように、次のアドレスは、BR命令の後に引き続いてフェッチされる次のアドレスである。比較器440の出力は、2ポートORゲート445の1ポートに結合される。他のポートは、IsCall論理回路400が結合されたパイプステージにおける現在の命令が分岐及びリンク命令であるかを示す信号415に結合される。ORゲート445は任意であり、間接的なサブルーチンと同じように分岐及びリンク命令をサポートするために使用される。ORゲート445の出力は、2ポートANDゲート425の1ポートに結合される。他のポートは、分岐予測回路132によって生成されたisTakenBranch信号420が結合される。分岐予測回路132は、IsCall論理回路400を呼び出したBR命令から、isTakenBranch信号420を生成する。投機的でない形態では、EXEステージ120が代わりにisTakenBranch信号420を生成し得る。IsCall論理回路400の出力425が正である際には、出力425は分岐予測回路132においてisCallフラグをセットするために用いられ、またリンクスタック構造に復帰アドレスをコピーするために用いられる。当業者によれば、他のロジック回路が、間接分岐命令がサブルーチン呼び出しに相当することを示しているかを制御し、もしそうならリンクスタック構造を次のアドレスでアップデートするように制御するために、IsCall論理回路400において使用し得ることを認識するだろう。
【0035】
図4Bは、図1で適切に使用され得るIsCall論理回路401の第2の形態である。比較器440とその入力と、IsCall論理回路401の出力とは、図4Aに示されたものと同様である。比較器440の出力は、入力として、ANDゲート455へ送り込まれる。ANDゲート455はまた、入力としてisBranch信号430を受信する。isBranch信号430は、IsCall論理回路401に結合されたパイプステージによって処理されている現在の命令が分岐命令である際に、アクティブとなる。動作中、もし現在の命令が分岐命令であり、分岐命令の次のアドレスがリンクレジスタに保持されるアドレスと等しければ、出力信号425は、isCallフラグを、分岐予測回路132内においてこの分岐命令に関連付けるために使用され、リンクスタック構造134は次のアドレスによりアップデートされる。この第2の形態によれば、従来の方法によって、IsCall論理回路401の外で分岐及びリンク命令を処理可能となる。
【0036】
図5は、サブルーチンを認識する方法500を示すフローチャートである。ブロック510において、非逐次的(non-sequential)な変化がプログラムフロー内で検出される。例えば、分岐命令である。より具体的には、分岐及びリンク命令では無い分岐命令が検出される。そのような検出は、すでに知られたデコード技術によって実行可能である。ブロック515では、方法500は、プログラムフロー内で検出された非逐次的な変化が、サブルーチン呼び出しとして既に示されているかを判断する。例えば、もし分岐命令が既にパイプライン105によって処理されていれば、目下処理された分岐命令がサブルーチン呼び出しとして示されまたは明らかとされていることを示すisCallフラグが、分岐予測回路132にセットされただろう。もしそうなら、方法500は、プログラムフローにおけるこの非逐次的な変化を前に処理しているので、ブロック550に進む。
【0037】
もし、プログラムフローにおいて検出された非逐次的な変化が、以前にサブルーチン呼び出しとして示されていなければ、方法500はブロック520に進む。ブロック520において、プログラムフローにおいて検出された非逐次的な変化の後の次の逐次的なアドレスが読み出される(retrieve)。例えば、分岐命令の後の次のアドレスである。次のこのアドレスは、IFUステージ102内の次のプログラムカウンタ(PC)生成回路や、先行するパイプステージ等を含む、種々の手段によって与えられ得る。ブロック530では、逐次的な次のアドレスが、リンクレジスタの内容と比較される。図2に関連して上記説明したように、サブルーチン呼び出しを予想して、リンクレジスタ(LR)は復帰アドレスを割り当てられる。ブロック540では、プログラムフローにおける検出された非逐次的な変化が、サブルーチン呼び出しとして示される。例えば、分岐命令に関連付けられたフラグがセットされ、分岐予測回路132に保持され得る。方法500はその後、ブロック550に進む。
【0038】
ブロック550において、リンクレジスタの内容が、リンクスタック構造にプッシュされる。例えば、分岐命令が図2に示すように実行された際、リンクレジスタはリンクスタック構造にコピーされる。同等に、逐次的な次のアドレスが代わりにリンクスタック構造にプッシュされても良い。説明されていないが、プログラムフローにおける非逐次な変化は、パイプラインによって処理されるサブルーチンを読み出す。ブロック560において方法500は、サブルーチンの終了を示す復帰呼び出しを待つ。復帰呼びだしが認識されると、方法500はブロック570に進み、逐次的な次のアドレスがリンクスタック構造からポップされる。ブロック570はプロセッサに対して、復帰呼び出しのアドレスにおける命令の処理を開始するために、パイプラインの処理をリダイレクトさせる。
【0039】
方法500は、プログラムフローにおける次の非逐次的な変化を待つ、待ちブロック580に進む。プログラムフローにおける次の非逐次な変化がパイプラインに達すると、方法500はブロック510に進み、その後ブロック515に進む。もし、プログラムフローにおける次の非逐次的な変化が以前に検出されていれば、プログラムフローにおけるこの次の非逐次的なこの変化は、既に表示されているだろうから、よってブロック515はブロック550に進む。
【0040】
本明細書で開示された形態に関連して説明された、種々の例示的な論理ブロック、モジュール、回路、素子、及び/または要素は、汎用レジスタ、デジタルシグナルプロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイシグナル(FPGA)またはその他のプログラマブルな論理回路、ディスクリートゲートまたはトランジスタロジック、ディスクリートハードウェア要素、または本明細書で述べられた機能を実行するように設計されたこれらの組み合わせによって、実行または実装され得る。汎用プロセッサは、マイクロプロセッサであり得るが、代わりにプロセッサは従来の任意のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンであっても良い。プロセッサはまた、DSPとマイクロプロセッサとの組み合わせなど、演算デバイスの組み合わせ、DSPコアと接続された1つまたはそれ以上のマイクロプロセッサ、または他のそのような構成として、実装され得る。
【0041】
本明細書に開示された形態に関連して述べられた方法は、ハードウェア、プロセッサによって実行されるソフトウェアモジュール、またはこれらの2つの組み合わせにおいて、直接的に実施され得る。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD−ROM、または技術的に知られたその他の形態の記憶媒体に保持され得る。記憶媒体は、この記憶媒体から情報を読み出し、またこの記憶媒体に情報を書き込むことが出来るプロセッサのようなプロセッサに接続され得る。代わりに、この記憶媒体はプロセッサと一体化されても良い。
【0042】
本発明は、実施形態に照らして開示されたが、広く種々の実施が、上記の議論と下記に続き特許請求の範囲に一致する当業者によって認識されるだろう。

【特許請求の範囲】
【請求項1】
プログラムフローにおける非逐次的な変化を検出することと、
前記プログラムフローにおける前記検出された非逐次的な変化の後の逐次的な次のアドレスを読み出すことと、
前記非逐次的な変化がサブルーチン呼び出しであるかを判断するために、前記逐次的な次のアドレスをレジスタの内容と比較することと
を備えた、サブルーチン呼び出しの認識方法。
【請求項2】
前記プログラムフローにおける非逐次的な変化は、分岐命令である、請求項1記載の方法。
【請求項3】
前記レジスタは、リンクレジスタである、請求項1記載の方法。
【請求項4】
前記プログラムフローにおける非逐次的な変化の後の前記逐次的な次のアドレスを、リンクスタック構造にプッシュすること、
を更に備える請求項1記載の方法。
【請求項5】
前記プログラムフローにおける非逐次的な変化はサブルーチン呼び出しであることを示すこと、
を更に備える請求項1記載の方法。
【請求項6】
前記プログラムフローにおける非逐次的な変化はサブルーチン呼び出しであることを示すことは、
前記プログラムフローにおける非逐次的な変化に関連付けられたフラグを、分岐予測回路に格納すること、を備える、請求項5記載の方法。
【請求項7】
サブルーチン呼び出しを認識するプロセッサにおける装置であって、
回路を備え、前記回路は、
レジスタの内容を受信する第1入力と、
プログラムフローにおける非逐次的な変化を受信する第2入力と、
前記プログラムフローにおける非逐次的な変化の後の逐次的な次のアドレスを受信する第3入力と
を備え、前記回路は、前記プログラムフローにおける非逐次的な変化がサブルーチン呼び出しであるかを判断するために、前記逐次的な次のアドレスと、前記レジスタの内容とを比較するように構成されている、装置。
【請求項8】
前記プログラムフローにおける非逐次的な変化は、分岐命令である、請求項7記載の装置。
【請求項9】
前記レジスタは、リンクレジスタである、請求項7記載の装置。
【請求項10】
リンクレジスタを更に備え、前記装置は、前記プログラムフローにおける非逐次的な変化の後の前記逐次的な次のアドレスを、前記リンクスタック構造にプッシュするように構成されている、請求項7記載の装置。
【請求項11】
前記プログラムフローにおける非逐次的な変化がサブルーチン呼び出しであることの表示、を格納するように構成された、分岐予測回路を更に備える、請求項7記載の装置。
【請求項12】
サブルーチン呼び出しを認識する装置であって、
プログラムフローにおける非逐次的な変化を検出する手段と、
前記プログラムフローにおける検出された非逐次的な変化の後の逐次的な次のアドレスを読み出す手段と、
前記非逐次的な変化がサブルーチン呼び出しであるかを判断するために、前記逐次的な次のアドレスをレジスタの内容と比較する手段と
を備えた、装置。
【請求項13】
前記プログラムフローにおける非逐次的な変化は、分岐命令である、請求項12記載の装置。
【請求項14】
前記レジスタは、リンクレジスタである、請求項12記載の装置。
【請求項15】
前記プログラムフローにおける非逐次的な変化の後の前記逐次的な次のアドレスを、リンクスタック構造にプッシュする手段を更に備える、請求項12記載の装置。
【請求項16】
前記プログラムフローにおける非逐次的な変化がサブルーチン呼び出しであることを示す手段を更に備える、請求項12記載の装置。
【請求項17】
前記プログラムフローにおける非逐次的な変化がサブルーチン呼び出しであることを示す手段は、
前記プログラムフローにおける非逐次的な変化に関連付けられたフラグを、分岐予測回路に格納する手段を備える、請求項12記載の装置。
【請求項18】
サブルーチン呼び出しを認識するプロセッサにおける装置であって、
命令を処理するプロセッサパイプラインと、
前記プロセッサパイプラインに結合された回路と
を備え、前記回路は、レジスタの内容と、プログラムフローにおける非逐次的な変化の表示と、前記プログラムフローにおける非逐次的な変化の表示の後の逐次的な次のアドレスと、を受信するように構成され、
前記回路は、前記プログラムフローにおける非逐次的な変化の表示がサブルーチン呼び出しであるかを判断するために、前記逐次的な次のアドレスと、前記リンクレジスタの内容とを比較するように構成されている、装置。
【請求項19】
リンクスタック構造を更に備え、前記回路は、前記リンクレジスタの前記内容を、前記リンクスタック構造にプッシュするように構成されている、請求項18記載の装置。
【請求項20】
分岐予測回路を更に備え、前記回路は、前記プログラムフローにおける非逐次的な変化がサブルーチン呼び出しであることの表示を格納するように構成されている、請求項18記載の装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4A】
image rotate

【図4B】
image rotate

【図5】
image rotate


【公表番号】特表2010−511251(P2010−511251A)
【公表日】平成22年4月8日(2010.4.8)
【国際特許分類】
【出願番号】特願2009−539433(P2009−539433)
【出願日】平成19年11月27日(2007.11.27)
【国際出願番号】PCT/US2007/085574
【国際公開番号】WO2008/067277
【国際公開日】平成20年6月5日(2008.6.5)
【出願人】(595020643)クゥアルコム・インコーポレイテッド (7,166)
【氏名又は名称原語表記】QUALCOMM INCORPORATED
【Fターム(参考)】