【誤訳訂正書】
【提出日】平成24年1月16日(2012.1.16)
【誤訳訂正１】
【訂正対象書類名】明細書
【訂正対象項目名】全文
【訂正方法】変更
【訂正の内容】
【書類名】明細書
【発明の名称】オペランドの早期の条件付き選択
【技術分野】
【０００１】
本開示は、全体的に、プロセッサパイプラインにおいて命令を処理する技術、より具体的には、パイプラインプロセッサにおける前の命令の実行によって設定された条件に基づいて複数のオペランドからオペランドを早期に条件付きで選択することに関する。
【背景技術】
【０００２】
携帯電話、ラップトップコンピュータ、パーソナルデータアシスタント（personal data assistant, PDA）、等のような一般にポータブルの製品は、通信およびマルチメディアアプリケーションをサポートするプログラムを実行するプロセッサの使用を必要とする。このような製品のための処理システムは、プロセッサ、命令のソース、入力オペランドのソース、および実行結果を記憶する記憶空間を含む。例えば、命令および入力オペランドは、汎用レジスタ、例えば命令キャッシュおよびデータキャッシュを含む多段キャッシュ（multi-level cache）、並びにシステムメモリから成る階層メモリ構成に記憶され得る。
【０００３】
プログラムの実行において高い性能を提供するために、プロセッサは、一般に、プロセッサを製造するのに使用される処理技術およびアプリケーションに対して最適化されたパイプラインで命令を実行する。高性能プロセッサにおいて、記憶装置からオペランドにアクセスする速度は、プロセッサの命令実行速度よりも遅いことが多い。したがって、記憶装置からオペランドを指定した命令を得ることにより、記憶装置のアクセス時間とプロセッサのクロックサイクル時間との差に相当する１以上のサイクルの間、プロセッサをストールすることになり得る。さらに、命令が、前の命令の実行結果であるソースオペランドを指定することは、しばしば行われる。複数ステージの実行パイプラインにおいて、前の実行結果を必要とする命令は、前の命令の実行が完了するまで、ストールされなければならない。これらのストールは、プロセッサの性能を制限する。
【発明の開示】
【発明の概要】
【０００４】
幾つかの態様において、本開示は、命令を実行するときに生じ得るストール数を最小化することが一般に好都合であると認識している。したがって、ストールを最小化し、通信およびマルチメディア アプリケーションをサポートするプログラムのようなプログラムにおいて分岐命令の使用を回避または最小化するのを助ける、選択オペランド命令（select operand instruction）を実施することが望まれ得る。プロセッサに対するこのような改良は、プロセッサの動作の性能および効率を向上する。
【０００５】
本開示の実施形態は、パイプライン動作の方法に適用される。方法は、少なくとも２つのオペランドのグループから選択される少なくとも１つのオペランドを指定する命令を検出することを含み、その中の少なくとも１つは、パイプラインにおいて実行中（in flight）であり得る。別のステップは、次に、命令によって指定されたオペランド選択基準を決定する。選択基準が決定されると、次に、それを評価して、少なくとも２つのオペランドのグループから少なくとも１つのオペランドを選択する。少なくとも１つの選択されたオペランドが使用可能になると、選択されていないオペランドが使用可能になるのを待つことなく、命令は実行に引き渡され得る。
【０００６】
本開示の別の態様は、パイプラインプロセッサにおいて命令を処理する装置に関する。装置は、複数の命令の中の各命令によって要求される入力オペランドデータを使用して、命令を実行する実行ステージを含む。ホールド回路を使用して、各命令に対してホールド（hold）を発生し、全ての入力オペランドデータが受信されると、ホールドを終了する。装置は、入力オペランドデータの受信を完了する前に、選択するオペランドデータを決定し、選択されたオペランドデータが使用可能であると決定すると、実行中の命令において指定された選択基準に関してホールドを終了する手段をさらに含む。
【０００７】
本明細書に開示された発明の概念および別の特徴のより完全な理解は、次の詳細な説明および添付の図面から明らかになるであろう。
【詳細な説明】
【０００８】
ここで、本開示の幾つかの実施形態が示されている添付の図面を参照して、本開示をより完全に説明する。しかしながら、この開示は、種々の形で具現することができ、本明細書で説明された実施形態に制限されると解釈されるべきではない。むしろ、この開示が行われて達成され、本開示の範囲を当業者に十分に伝えるために、これらの実施形態は与えられている。
【０００９】
本開示の教示にしたがって動作を行うときまたは行うために実行されるコンピュータプログラムコードまたは“プログラムコード”は、Ｃ、Ｃ＋＋、ＪＡＶＡ（登録商標）、Ｓｍａｌｌｔａｌｋ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｖｉｓｕａｌ  Ｂａｓｉｃ（登録商標）、ＴＳＱＬ、Ｐｅｒｌ、または種々の他のプログラミング言語のような高水準のプログラミング言語で最初に書かれ得る。これらの言語の１つで書かれたプログラムは、ターゲット プロセッサ アーキテクチャにコンパイルされ、高水準のプログラムコードをネイティブ アセンブラ プログラムに変換する。ターゲット プロセッサ アーキテクチャのプログラムは、直接にネイティブ アセンブラ言語で書かれることもある。ネイティブアセンブラ プログラムは、機械レベルの２値命令の命令ニーモニック表現（instruction mnemonic representation）を使用する。本明細書で使用されるプログラムコードまたはコンピュータ読み出し可能媒体は、そのフォーマットがプロセッサによって理解可能であるオブジェクトコードのような機械語コードを指す。
【００１０】
図１は、本開示の実施形態が使用され得る例示的な無線通信システム100のブロック図である。説明の目的で、図１は、３つの遠隔ユニット120、130、および150と、２つの基地局140とを示している。一般に、無線通信システムは追加の遠隔ユニットおよび基地局を有し得ることが分かるであろう。遠隔ユニット120、130、および150は、本開示にしたがってプログラムコードを実行して、動作するプロセッサを有するハードウェア構成要素125A、125B、および125Cをそれぞれ含む。図１は、基地局140から遠隔ユニット120、130、および150への順方向リンク信号180と、遠隔ユニット120、130、および150から基地局140への逆方向リンク信号190とを示している。
【００１１】
図１において、遠隔ユニット120は移動電話として示され、遠隔ユニット130はポータブルコンピュータとして示され、遠隔ユニット150は無線ローカルループシステムにおける固定位置の遠隔ユニットとして示されている。例えば、遠隔ユニットは、ハンドヘルド型のパーソナル通信システム(personal communication systems, PCS)ユニット、パーソナル データ アシスタントのようなポータブル データ ユニット、またはメータ示度装置（meter reading equipment）のような固定位置のデータユニットであり得る。図１は、本開示の教示にしたがう遠隔ユニットを示しているが、本開示は、これらの例示的な図示されたユニットに制限されない。例えば、向上した処理効率は、一般に、図示された遠隔デバイスだけでなく、内部プロセッサを有する大多数の製品にとって望ましい特徴である。命令の効率的な実行における改善は、本開示にしたがって、パイプラインプロセッサにおいて、ソースオペランドを条件付きで選択する命令をもつことによって得ることができる。
【００１２】
プロセッサは、一般に、命令が指定したオペランドを演算する命令の様々なセットを使用する。ロード（load）、記憶（store）、加算(add)、乗算（multiply）、シフト（shift）、選択(select)、ＡＮＤ命令、またはＯＲ命令は、命令セットアーキテクチャにおいて与えられ得る命令の例である。選択命令は、命令の一例であって、ここでは、オペランドは２つ以上のオペランドの選択肢から条件付きで選択され、選択されたオペランドはターゲット レジスタ アドレスに記憶され得る。選択命令を効率的に実行するために、どのオペランドを選択するかの決定およびフェッチ動作は、プロセッサのストールのために失われる時間を最短にして処理される。
【００１３】
図２Ａは、オペランド機能の条件付き選択が使用され得る、例示的なパイプラインプロセッサ複合体（pipelined processor complex）200の機能ブロック図である。プロセッサ複合体200は、プロセッサパイプライン202、Ｌ１命令キャッシュ204、Ｌ１データキャッシュ206、およびメモリ階層208を含む。プロセッサ複合体に接続し得る周辺デバイスは、説明を分かり易くするために示されていない。本開示の第１の実施形態にしたがって、プロセッサ複合体200は、メモリ階層208に記憶されているプログラムコードを実行するために、ハードウェア構成要素125Aないし125Cにおいて適切に使用され得る。
【００１４】
プロセッサパイプライン202は、５つの主なステージ、命令フェッチステージ210、デコードステージ212、レジスタ読み出しステージ214、実行ステージ216、およびライトバックステージ218を含む。当業者は、これらのステージの何れが複数のステージに分割されて、関連する機能の一部を行い得るか、またはパイプラインが、追加の機能を提供する他のステージを含み得るかが分かるであろう。説明のために、主なステージの幾つかが１つのステージとして示されているが、各々は、高速設計のために２つ以上のステージに分割されてもよい。例えば、実行ステージ216は、３つのサブステージ、すなわち、実行Ａ（executeA）220、実行Ｂ（executeB）222、および実行Ｃ（executeC）224に分割される。
【００１５】
１つのプロセッサパイプライン202が示されているが、条件付きで選択されるオペランドに関する命令の処理は、スーパースカラ設計、および並列パイプラインを実施する他のアーキテクチャに適用可能である。別の実施においてオペランド命令の条件付き選択をサポートするプロセッサは、プロセッサパイプライン202よりも少ないステージまたは多いステージをもつこともある。例えば、高クロックレートのために設計されたスーパースカラ プロセッサは、２つ以上の並列パイプラインをもつことができ、各パイプラインは、高クロックレートをサポートするために、命令フェッチステージ210、デコードステージ212、レジスタ読み出しステージ214、実行Ａステージ220、実行Ｂステージ222、および実行Ｃステージ224、およびライトバックステージ218を、２つ以上のパイプラインステージに分割し、全体的なプロセッサパイプラインの深度（depth）を高め得る。
【００１６】
プロセッサパイプライン202において、第１のステージは、命令フェッチステージ210である。命令フェッチステージ210は、Ｌ１命令キャッシュ204から、後のステージによって処理するための命令をフェッチする。命令フェッチが、Ｌ１命令キャッシュ204においてミスすると、命令は、レベル２（Ｌ２）キャッシュおよびメインメモリを含み得るメモリ階層208からフェッチされる。命令は、ブート読み出し専用メモリ(read only memory, ROM)、ハードドライブ、光ディスクのような他のソースから、あるいはインターネットのような外部インターフェースから、メインメモリにロードされてもよい。
【００１７】
命令フェッチステージ210は、各フェッチされた命令をデコードステージ212へ供給する。デコードステージ212は、命令を、パイプラインの次のステージに供給される制御ビットの集まり（collection）にデコードし、フェッチされた命令の実行に関連したデコードにおける追加の動作をサポートし得る。
【００１８】
選択オペランドタイプ命令（select operand type instruction）の一般的な形態は、プロセッサパイプライン202において使用および実行され、例えば、後述で説明されるように、分岐を回避して、処理の前にデータを操作するか、またはデータをマージ（merge）し得る。例えば、ロード、記憶、算術(arithmetic）、論理、シフト、比較、ビット操作命令、等は、オペランドデータを条件付きで処理するために、オペランド選択機能の追加により増補（augment）され得る。選択オペランドロード命令（select operand load instruction）および選択オペランド記憶命令（select operand store instruction）において、選択は、少なくとも２つのメモリベースアドレス間で行われる。これらは、汎用レジスタ（general purpose register, GPR）ファイルに記憶され、ＧＰＲレジスタアドレスとして参照される。選択加算命令（select add instruction）において、オペランドは、少なくとも２つのオペランドの選択肢から選択され、選択されたオペランドは、別のオペランドに加算される。選択オペランド命令の一般的な形態において、オペランドの１つまたはグループは、満たされた１つ以上の選択基準に基づいて、オペランドのより大きなグループから選択され得る。オペランドの選択された１つまたはグループは、選択オペランド命令によって指示されるように、さらなる処理のために実行パスに供給される。１つ以上の基準が、選択を決定する基準として使用され得ることに注意すべきである。選択オペランドタイプ命令の一般的な形態のサブセットは、選択命令であり、オペランドは、２つのレジスタオペランドから条件付きで選択され、選択されたオペランドは、ターゲットレジスタ アドレスに記憶される。選択オペランド命令の別の形態は、レジスタオペランドおよび即値（immediate value）からの選択を指定する命令である。
【００１９】
別の例は、ベクトルプロセッサで使用され得るオペランドの２つ以上のブロックの選択肢からオペランドのブロックを選択するのに使用される選択オペランド命令である。オペランドの各ブロックは、ブロックの始まりのポインタを含んでいる選択オペランド命令内のフィールドによって参照される。さらに、一般的な選択基準は、複数ビット選択基準から得ることができる３つ以上の選択肢を指定し得る。選択基準は、どのオペランドがより大きなグループから選択されるか、選択されるオペランドの数、またはプロセッサの命令セットアーキテクチャによって指定される他の選択機構を指定し得る。
【００２０】
オペランドの選択を決定するのに使用される条件は、種々の算術、論理、および命令セットアーキテクチャにおいて一般に指定されている他の機能命令の実行において、プロセッサによって設定された条件フラグから生成され得る。例えば、負(negative, N)ビット226は、Ｎビットに影響を与える命令に対して、実行結果が負であるかどうかを示す。ゼロ（zero, Z）ビット228は、Ｚビットに影響を与える命令に対して、実行結果が全てゼロであるかどうかを示す。桁上げ（carry, C）ビット230は、Ｃビットに影響を与える命令に対して、実行結果が桁上げ（carry out）に関わるかどうかを示す。オーバーフロー（overflow, V）ビット232は、Ｖビットに影響を与える命令に対して、実行結果がオーバーフローするかどうかを示す。これらのビットは、プログラム状態レジスタの一部でもあり得る条件コード（condition code, CC）レジスタ234またはフラグレジスタに記憶され得る。
【００２１】
条件コードビットは、実行の種々のステージによって設定され得るが、条件コードビットを変更するプログラムの順序（program order）は維持される。例えば、加算、論理演算、ビット選択、アドレス生成、等のような特定の演算は、実行Ａステージ220において達成され得る。これらの実行Ａステージ220の命令は、条件コードレジスタ234に影響を与えるようにも指定され、実行の最後に、影響を受けた条件コードビットをパス240により送り得る。レジスタシフト命令を用いた算術論理ユニット(arithmetic logic unit, ALU)の演算において指定されるようなより複雑な演算は、２つの別々の演算ステップに分割され得る。第１の演算ステップは、実行Ａステージ220において達成され、第２の演算ステップは、実行Ｂステージ222において達成される。実行Ｂステージ222における命令の実行が完了すると、条件コードレジスタ234に対する変更は、パス242により送られ得る。より複雑な性質をもつ演算は、追加の実行ステージを利用して、達成し得る。例えば、乗算命令は、３つのステージ、すなわち、実行Ａステージ220、実行Ｂステージ222、および実行Ｃステージ224を利用して、乗算の演算を完了し得る。第３のステージが完了すると、条件コードレジスタ234は、パス244を通って送られた適切なビットによって再び影響を受け得る。命令は、実行の長さの違いのために、プログラムの順序とは異なる順序で完了し得るので、条件コードレジスタ234内のビットは、プログラムの順序にしたがって設定される。条件レジスタ234のビットの設定を制御する機能は、説明のために、ＣＣ制御論理246に含まれている。
【００２２】
選択オペランド命令の処理は、デコードステージ212から始まり得る。オペランド選択基準の状態を決定する前に、全てのオペランドがフェッチされるのを待つのではなく、デコードステージは、オペランド選択基準を最初に決定する。オペランド選択基準を決定するために、パイプラインを調べて、オペランド選択基準に影響を与え得る命令が、パイプラインに既に存在しているかどうかを決定しなければならない。条件コードレジスタに影響を与える命令は、レジスタ内の１ビットのみ、全ビット、またはビットのある組合せに影響を与え得るので、選択オペランド命令によって指定されるオペランド選択基準をデコードして、条件コードレジスタ内のビットのどの組合せが要求されているかを決定する。例えば、前の結果が、Ｚビット228の設定によりゼロであったときは、１つのオペランドが選択され、Ｚビットが設定されなかったときは、異なるオペランドが選択される。前の計算が正の非ゼロ（positive nonzero）になった場合のオペランドの選択は、Ｎビット226およびＺビット228の両者を調べて、その両者が“ゼロ”に設定されているかどうかを確認することによって得ることがきる。条件コードレジスタ234の値は、条件コード(condition code, CC)パス248により、デコードステージ212、レジスタ読み出しステージ214、および実行Ａステージ220へ転送（forward）され、ここで条件コードビットは監視され得る。
【００２３】
デコードステージ212において選択オペランド命令を用いるとき、それの先に、プロセッサパイプライン202内に４つまでの追加の命令があり得る。これらの４つの追加の命令の中の３つは、異なる実行ステージにあり得る。複数の実行ステージが、同じ条件コードビットに影響を与え得る命令を用いて、同時に処理されるとき、実行のプログラムの順序は、条件コードビットの設定において、どの命令が優先されるかを指示する。選択オペランド命令よりも前にあって、オペランド選択基準に使用される条件コードビットに影響を与える最後の命令は、ルックアヘッド プロセスによって決定される。
【００２４】
ルックアヘッド プロセスは、さらに、パイプラインを通っている各命令からデコードされた制御ビットを用いて、デコードを開始する。制御ビットの一部は、命令が影響を与える条件ビットを、もしあれば示す。各デコードされた命令の制御ビットは、パイプラインを通っている命令指定動作にしたがい、各パイプラインステージを調べて、その動作ステージが条件コードレジスタ234に影響を与えるかどうかを決定することができる。例えば、ルックアヘッドは、各パイプラインの実行ステージにおいて特定の制御ビットのＯＲとして演算し得る。このアプローチは、パイプライン実行ステージにおける命令が、１つ以上の関連する条件ビットに影響を与えない場合のクイックテスト（quick test）として有益である。制御ビットは、パイプラインの各実行ステージにおいて使用可能であるので、条件レジスタが影響を受け得るときを決定することもできる。
【００２５】
パイプライン実行ステージにおける命令が、１つ以上の関連する条件ビットに影響を与えないとき、デコードステージにおけるオペランド選択基準を決定するのに使用可能な十分な情報がある。どのオペランドが選択されるかが決定されると、処理は、次のレジスタ読み出しステージ214に進み、読み出しステージ214は、制御情報を与えられ、選択されたオペランドのみをフェッチする。
【００２６】
パイプライン実行ステージにおける少なくとも１つの命令が、１つ以上の関連する条件ビットに影響を与えるとき、処理は、次のレジスタ読み出しステージ214に進み、レジスタ読み出しステージ214は、制御情報を与えられ、選択オペランド命令によって要求された全オペランドをフェッチする。全オペランドがフェッチされる一方で、選択基準の決定が監視される。さらに詳しく別途記載されるように、全てのオペランドがフェッチされる前に、選択基準が決定されてもよく、これを使用して、ストール時間を低減することができる。
【００２７】
レジスタ読み出しステージ214は、例えば、実行Ａステージ220において、処理されることを要求されたオペランドをフェッチする。オペランドは、汎用レジスタ(general purpose register, GPR)ファイル250から、または転送ネットワーク(forwarding network)(図示されていない)からフェッチされ得る。転送ネットワークは、実行ステージから結果のオペランドが使用可能になると直ぐにそれらを供給するために、ＧＰＲファイル250の周りに高速のパスを与えている。転送ネットワークを用いても、深い実行パイプライン202からの結果のオペランドは、プロセッサパイプライン202のように３サイクル、または別の実施では４サイクル以上かかり得る。これらのサイクルの間、実行パイプラインから結果のオペランドデータを要求するレジスタ読み出しステージ214における命令は、結果のオペランドが使用可能になるまで待たなければならない。
【００２８】
説明されなければならないストーリング状況（stalling situation）の別の例は、ロード命令の実行により生じる。Ｌ１データキャッシュ206においてミスがあると、ロード命令の実行には、相当な数のサイクルがかかり得る。ロード命令は、ＧＰＲファイル250のレジスタを使用して、ベースアドレスを供給し、実行Ａステージ220においてベースアドレスに即値を加えて、有効アドレスを生成し得る。有効アドレスは、データパスによりＬ１データキャッシュ206に送られる。Ｌ１データキャッシュ206においてミスがあると、データは、Ｌ２キャッシュおよびメインメモリを含み得る記憶階層208からフェッチされなければならない。Ｌ１データキャッシュのミスの後でデータをフェッチするのにかかるサイクルの間、ソースオペランドのような実行中のロードデータを要求する命令は、実行中のオペランドが使用可能になるまで、パイプラインにおいてストールされる。ストールは、レジスタ読み出しステージ214において、または実行Ａステージ220の最初に生じると考えられ得る。ミスが解決すると、ロードデータは、パス254により、ライトバックステージ218の一部であると考えられ得るライトバック動作に転送される。次に、オペランドは、ＧＰＲファイルに書き込まれ、さらに、転送ネットワークへ送られ得る。後述で説明されるように、ロード動作が原因の、選択オペランド命令の実行におけるストールの影響は、最小化され得る。
【００２９】
幾つかのプロセッサパイプラインでは、レジスタファイルへのアクセスが始まった後で、選択基準の評価が行われ得ることに注意すべきである。この場合に、オペランドが不要であって、まだ受信されていないと決定されると、オペランドが実行中であるときは、命令の処理が追跡を停止するか、またはプロセッサが、オペランドが使用可能であることを示すタグに対して、転送ネットワークを“リッスンすること（listening）”を停止する。この手続きは、フェッチ動作よりもパッシブな動作（passive operation）である。何れのアプローチも、本開示の教示の中で実行可能である。
【００３０】
図２Ｂは、プロセッサの実行ステージに入る前にプロセッサパイプラインをストールするときを決定する条件を識別する例示的な判定テーブル265である。評価されるパイプライン内の命令は、２つのオペランドの選択肢、すなわち、オペランドＡ（operandA）およびオペランドＢ（operandB）から一方のオペランドの選択を指定する、選択オペランド命令である。オペランドＢおよびオペランドＡの使用可能性（availability）は、列（column）266および267にそれぞれ示されている。テーブル265は、選択基準がオペランドＡの選択を決定するというシナリオに基づく。オペランドが使用可能であると示されると、オペランドを得るための追加のサイクルは不要である。選択基準の状態は、列268に示されている。フェッチ動作は、列269に示されているように、使用可能でない一方または両方のオペランドを得るように指示される。オペランドは、転送ネットワークによって、またはＧＰＲファイルから与えられると、パイプラインをストールすることなく、使用可能であり得る。選択基準を決定することができない(使用可能でない)とき、これは、選択基準に影響を与え得る少なくとも１つの命令がパイプライン中にあるためであると見なされる。ストールの列270に示されているように、オペランドおよび選択基準を含めて、実行を完了するための入力が使用可能でないとき、パイプラインはストールされる。全体的な動作のシナリオは、テーブルの行(row)によって示されている。
【００３１】
行271は、オペランドＡもオペランドＢも使用可能でなく、選択基準も使用可能でないことを示している。パイプラインはオペランド読出しステージにおいてストールされ、その間に両者のオペランドはフェッチされ、１つ以上の選択基準条件ビットは監視される。行272は、両者のオペランドが使用可能になる前に、選択基準が決定されることを示し、この場合、オペランドＢは不要であることが分かる。例えば、行271のシナリオで、オペランドＢのフェッチが始まっていた場合は、オペランドＢのフェッチは支障なく（safely）終了することができる。パイプラインは、読み出しステージにおいてストールされ、オペランドＡが使用可能になるのを待つ。行273および275のシナリオにおけるように、選択基準が決定される前に、オペランドＡまたはオペランドＢが使用可能になると、処理は読み出しステージにおいてストールされたままになって、他方のオペランドが使用可能になるか、または選択基準がオペランドフェッチ動作において影響を与え得るように選択基準が決定されるのを待つ。シナリオ277におけるように、パイプラインのストールは始まった後であるが、選択基準が決定される前に、両者のオペランドが使用可能である、または使用可能になると、処理は読み出しステージにおいてストールされたままになって、選択基準が決定されるのを待つ。行274のシナリオにおけるように、読み出しストールが始まった後で、選択基準が決定され、オペランドＡは使用可能であるが、オペランドＢが使用可能ではないときは、オペランドＢのフェッチは終了し、処理は実行ステージを進む。処理が、ストールすることなく、行274のようなシナリオに達すると、入力は使用可能であり、処理は実行ステージを進むので、レジスタ読み出しステージにおけるストールは不要である。行276のシナリオにおけるように、読み出しストールが始まった後で、選択基準が決定され、オペランドＢは使用可能であるが、オペランドＡは使用可能ではないときは、オペランドＡが使用可能になるまで、ストールは続く。処理が、ストールすることなく、行276のようなシナリオに達すると、オペランドＡが使用可能ではないので、レジスタ読み出しステージにおいてストールが必要である。オペランドおよび選択基準の両者が使用可能であるとき、パイプラインのストールは不要であり、処理は実行ステージを進む。
【００３２】
本明細書に教示されているように、選択オペランド命令が実行を開始し、選択されたオペランドが使用可能であるときは、使用されない他方のオペランドが使用可能でなくても、オペランドデータを待つのに必要なストールをスキップするか、またはストールを早く終了する。選択基準が決定され、選択されたオペランドがフェッチされ、使用可能になるまで、選択オペランド命令のオペランドを待つことに因るストールは、維持される。
【００３３】
オペランドが処理のために使用可能になると、実行ステージに入る。選択基準に基づいて２つのＧＰＲファイルのオペランドの中から選択し、選択されたオペランドをターゲットＧＰＲファイルアドレスに記憶する選択命令において、動作は、実行ステージをバイパスし、選択されたオペランドをライトバックステージ218および転送ネットワーク(図示されていない)に転送し得る。通常、結果の転送ネットワーク(図示されていない)があり、各実行ステージの結果を、パイプラインを通っている後の命令に転送する。一般の選択オペランド命令（general select operand instruction）において、選択されたオペランドは、実行Ａステージ220に渡され、実行ステージの処理が始まる。
【００３４】
各実行ステージは、命令が指定した動作の複雑さに応じて、命令の処理を完了するか、または要求された動作の一部のみを処理し得る。各実行ステージがその動作を完了すると、結果は、ライトバックステージ218に直接に送られ得る。例えば、命令が、実行Ａステージ220の最後に、その指定された動作を完了すると、結果は、パス252によりライトバックステージ218に転送され得る。同様に、実行Ｂステージ222の最後にその動作を完了する命令は、パス258により結果をライトバックステージ218に転送し、実行Ｃステージ224の最後にその動作を完了する命令は、パス260により結果をライトバックステージ218に転送する。ライトバックステージ218は、結果をレジスタのＧＰＲファイル250にライトバックする。結果は、プログラムの順序と比較して順序を狂わせて(out of order)、ライトバックステージ218において受信され得るので、ライトバックステージ218は、ＧＰＲファイル250に結果を書き込むときに、プロセッサの機能を使用して、プログラムの順序を守る。
【００３５】
パックされたデータの処理を使用するとき、選択オペランドタイプ命令は、追加のフラグの使用によって拡張され得る。例えば、フラグのセットは、パックされたデータの処理において、バイトベースで、同数以上の（greater than or equal, GE）フラグ、より少ないフラグ（less than flags, LE)、または他の条件指示（conditional indication, CI)のように設定され得る。３２ビットのデータタイプでは、４個のＣＩフラグを使用することができる。６４ビットのデータタイプでは、８個のＣＩフラグを使用することができる。
【００３６】
図２Ｃは、本開示の第２の実施形態にしたがう、パックされたデータの選択オペランド命令（packed data select operand instruction）が使用され得る、パイプラインプロセッサ複合体280の機能ブロック図である。パイプラインプロセッサ282は、パックされた３２ビットのオペランドをサポートするＣＩフラグ284に基づいて、１以上の選択基準を使用する。ＣＩフラグ284は、プログラム状態語で、条件コードレジスタ286と共に、組み合わされたＣＣ／ＣＩレジスタ288として含まれ得る。
【００３７】
パックされたデータの選択オペランド命令は、ＣＩフラグを使用して、２つのパックされたデータオペランドからバイトを選択することができる。例えば、３２ビットのパックされたデータ選択命令は、命令セットアーキテクチャにおいて、個々のＣＩ[３：０]フラグを使用するように指定され得る。ＣＩ[３：０]フラグは、１で、オペランドＡから対応するバイトを選択し、ゼロであるときは、オペランドＢから対応するバイトを選択する。ＣＩ[３：０]＝１０１０は、オペランドＡからバイト３を選択し、オペランドＢからバイト２を選択し、オペランドＡからバイト１を選択し、オペランドＢからバイト０を選択し、選択されたバイトを含んだ３２ビットのターゲットレジスタを生成する。ＣＩ[３：０]＝１１１１であるときは、オペランドＡの全バイトが選択される。ＣＩ[３：０]＝００００であるときは、オペランドＢの全バイトが選択される。ＣＩ[３：０]＝１１１１の条件では、オペランドＢは不要であり、フェッチされる必要はない。ＣＩ[３：０]＝００００の条件では、オペランドＡは不要であり、フェッチされる必要はない。選択基準は、プログラム状態語におけるＣＩフラグのビット設定によって決定される。オペランドをフェッチするか、またはオペランドのフェッチングを抑えるかを決定するために、全て１であるか、または全て０であるＣＩフラグに基づいて選択基準が使用され得る。
【００３８】
図２Ａのホールド回路262および図２Ｃのホールド回路290のようなホールド回路を使用することによって、プロセッサパイプラインにおけるストールが生成され得る。ホールド回路は、ホールド信号を発生し、ホールド信号を使用して、例えば、パイプラインステージレジスタをゲート制御して、パイプラインにおいて命令をストールすることができる。図２Ａのプロセッサパイプライン202および図２Ｃのパイプライン282では、レジスタ読み出しステージにおいて、全入力が使用可能であるわけではないとき、ホールド信号がアクティブにされ、入力が届くまで、パイプラインはホールドされる。全オペランドが使用可能になり、選択基準が決定されると、ホールド信号は解除される。例えば、図２Ｂのテーブル265に指定されているような動作シナリオにしたがって、ホールド信号を適切にアクティブにしたり、解除したりすることができる。
【００３９】
選択オペランド命令の処理は、命令のタイプを決定し、条件コードおよびフラグ、例えば、ＣＩフラグを調べ、条件およびフラグ状態を示し、選択基準を決定することを伴う。命令は、それが選択オペランド命令であることを示すフィールドを命令フォーマット内にもち得る。本開示の教示は、種々の命令フォーマットおよびアーキテクチャの仕様に適用可能である。
【００４０】
図３は、本開示の教示にしたがう条件付きオペランド選択機能を指定する３２ビットの命令300の一般的なフォーマットである。選択オペランド命令300は、命令を選択オペランド命令として識別するオペコード（opcode）302と、少なくとも２つのソース オペランドアドレス フィールドＲａ304およびＲｂ306とを含んでいる。オペコード302は、選択基準と命令演算の両者を指定し、命令演算は、例えば、加算、乗算、シフト、論理、ビット操作、等である。その代わりに、１つ以上の別々のビットが、命令フォーマットにおいて、機能指定のみに使用されるオペコードおよび選択オペランド命令としての命令を識別するために指定され得る。他のビットフィールド308、310、および312は、命令を実行するかまたは命令を実行しないかを制御する条件フィールド、ターゲット レジスタ アドレスフィールド、データタイプ、等に使用するための命令指定フィールドであり得る。
【００４１】
図４は、プロセッサパイプラインにおいてオペランドを条件付きで早期に選択するのに必要な演算ステップを示すフローチャート400である。ステップ404において、フェッチされた命令は、例えば、デコードステージ212のようなデコードステージにおいてデコードされる。ステップ406において、命令が選択オペランド命令であるかどうかが決定される。命令が選択オペランド命令でないときは、処理はステップ408に移る。ステップ408において、オペランドの全ては、例えば、ＧＰＲファイル250のような汎用レジスタファイルから、レジスタ読み出しステージ214に適宜にアクセスされる。オペランドが直ちに使用可能でないとステップ410で決定されると、ステップ412で指示されるように、命令はストールされ、オペランドの全てを待たなければならない。全てのオペランドが使用可能であるとステップ410で決定されると、命令は、ステップ414において、例えば、図２Ａの実行ステージ220から始まる、実行パイプラインを進むことを許される。
【００４２】
選択オペランド命令がフェッチされ、ステップ404でデコードされる別のシナリオを検討する。この場合には、ステップ406において、フェッチされた命令は選択オペランド命令であると決定され、処理はステップ416に移る。ステップ416において、図２ＡのＣＣレジスタ234または図２ＣのＣＣ／ＣＩレジスタ288のような条件コードレジスタの現在の状態に基づいて、オペランド選択基準を決定することができるかどうかを判定するテストが行われる。パイプライン内の実行中の命令または前の命令が条件フラグに影響を与え、したがって、オペランド選択基準に影響を与え得るときは、選択基準を決定することができない。ＣＣまたはＣＩレジスタの現在の状態に基づいて、オペランド選択基準を決定することができるとき、処理はステップ418に移る。ステップ418において、選択基準に基づいて選択されたオペランドがフェッチされる。処理は、続いてステップ420に進み、例えば、レジスタ読み出しステージ214に達する。ステップ420において、選択されたオペランドが使用可能であるかどうかが決定される。選択されたオペランドが直ちに使用可能ではないとステップ420において決定されると、ステップ422で指示されるように、命令はストールされ、選択されたオペランドを待たなければならない。
【００４３】
選択されたオペランドが使用可能であるとステップ420で決定されると、処理はステップ424に進み、命令が、一般の選択オペランド命令のタイプ（general select operand instruction type）のサブセットまたは一般の選択オペランド命令のタイプである選択命令であるかどうかを決定する。命令が選択命令であるときは、処理は、ステップ426に進み、実行ステージ216のような実行ステージはバイパスされ、オペランドは、ライトバックステージ218のようなライトバックステージに転送される。オペランドはさらに、転送ネットワークへ送られ得る。命令が、一般の選択オペランド命令であるとき、処理は、例えば、実行ステージ220から開始することによって、ステップ414に進む。
【００４４】
ステップ416におけるテストが、パイプライン内の実行中の命令または前の命令がＣＣレジスタ234またはＣＣ／ＣＩレジスタ288に影響を与え、したがってオペランド選択基準に影響を与え得ると決定するといったシナリオが存在し得る。この場合に、処理はステップ430に進み、全てのオペランドをフェッチするプロセスが始まり、条件フラグは更新のために監視される。ステップ432において、選択基準の決定に関連する全てのＣＣまたはＣＩビットが更新されたかをどうかを決定するテストが行われる。関連するＣＣまたはＣＩビットが更新されていないときは、処理はステップ430に戻り、全オペランドのフェッチが続けられる。全ての関連するＣＣまたはＣＩビットが更新されたとステップ432において決定されると、処理はステップ434に進み、選択基準によって決定されるように、不要なオペランドのフェッチングは停止される。次に、処理はステップ420に進み、選択されたオペランドが使用可能であるかどうかが決定される。使用可能でないときは、ステップ422で指示されるように、選択されたオペランドが使用可能であると決定されるまで、命令の処理はストールされなければならない。
【００４５】
選択されたオペランドが使用可能であるときは、処理はステップ424に進み、命令が、一般の選択オペランド命令のタイプのサブセットまたは一般の選択オペランド命令のタイプである選択命令であるかどうかを決定する。命令が選択命令であるときは、処理はステップ426に進み、実行ステージ216のような実行ステージはバイパスされ、オペランドは、ライトバックステージ218のようなライトバックステージに転送される。オペランドはさらに、転送ネットワークへ送られる。命令が一般の選択オペランド命令であるときは、処理は、例えば、実行ステージ220から開始することによって、ステップ414に進む。
【００４６】
本開示は、現在の好ましいコンテキスト（context）において開示されたが、この教示は、この開示および本発明の請求項にしたがう種々のコンテキストに適応し得ることが分かるであろう。
【図面の簡単な説明】
【００４７】
【図１】本開示の実施形態が使用され得る例示的な無線通信システムのブロック図。
【図２Ａ】本開示の第１の実施形態にしたがう、オペランド機能の条件付き選択が使用され得る、パイプラインプロセッサ複合体の機能ブロック図。
【図２Ｂ】本開示にしたがってプロセッサの実行ステージに入る前にプロセッサパイプラインをストールするときを決定する条件を識別する判定テーブル。
【図２Ｃ】本開示の第２の実施形態にしたがう、パックされたデータオペランド機能の条件付き選択が使用され得る、パイプラインプロセッサ複合体の機能ブロック図。
【図３】本開示にしたがう、条件付きオペランド選択機能を指定する３２ビットの命令の一般的なフォーマットの図。
【図４】本開示にしたがう、パイプラインにおいてオペランドを条件付きで初期に選択するのに必要な動作ステップのフローチャート。