(57)【特許請求の範囲】
【請求項１】
フラグハンドリングの方法であって、
ディスパッチされた命令から少なくとも１つのデスティネーションフラグを判定することと、
前記少なくとも１つのデスティネーションフラグに対応する少なくとも１つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、前記少なくとも１つのデスティネーションフラグをリネームすることであって、前記フラググループが独立したフラグに対応する、ことと、
リネームされたフラグの各々をアウトオブオーダフラグマッピングテーブルに書き込むことと、
書き込みフラグをインオーダフラグマッピングテーブルに書き込むことであって、前記書き込みフラグは、前記ディスパッチされた命令のアウトオブオーダ実行によって生成される、ことと、
前記書き込みフラグに基づいてフラッシュ操作を選択的に実行することであって、前記フラッシュ操作は、前記インオーダフラグマッピングテーブルに基づいて前記アウトオブオーダフラグマッピングテーブルを復元する、ことと、を備える、
方法。
【請求項２】
前記少なくとも１つのデスティネーションフラグに対応しないフラググループは、前記リネームされたフラグの各々を書き込むことにおいて影響を受けない、請求項１の方法。
【請求項３】
前記ディスパッチされた命令のアウトオブオーダ実行は、データ依存性に基づいている、請求項２の方法。
【請求項４】
前記書き込みフラグは、廃棄サイクルの間に前記インオーダフラグマッピングテーブルに書き込まれる、請求項３の方法。
【請求項５】
前記アウトオブオーダフラグマッピングテーブルは、ソースフラググループによりインデックス化される、請求項１の方法。
【請求項６】
ゼロシフトの発生という条件に応じてポイズンビットを設定することと、
ゼロシフトの２回目の発生という条件に応じて前記ポイズンビットをクリアすることと、
前記ポイズンビットがクリアされることをもたらす命令を再度ディスパッチして再度実行することと、をさらに備え、
前記フラッシュ操作は、前記ポイズンビットがクリアされるときに実行される、請求項４の方法。
【請求項７】
アウトオブオーダフラグマッピングテーブルと、
インオーダフラグマッピングテーブルと、
前記アウトオブオーダフラグマッピングテーブル及び前記インオーダフラグマッピングテーブルと通信可能に接続された実行ユニットと、
少なくとも１つのデスティネーションフラグに対応する少なくとも１つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、前記少なくとも１つのデスティネーションフラグをリネームするように構成されたリネーム回路と、を備え、
前記フラググループが独立したフラグに対応しており、
前記実行ユニットは、
ディスパッチされた命令から少なくとも１つのデスティネーションフラグを判定し、
リネームされたフラグの各々を前記アウトオブオーダフラグマッピングテーブルに書き込み、
前記ディスパッチされた命令のアウトオブオーダ実行によって生成された書き込みフラグを前記インオーダフラグマッピングテーブルに書き込み、
前記インオーダフラグマッピングテーブルに基づいて前記アウトオブオーダフラグマッピングテーブルを復元するフラッシュ操作を、前記書き込みフラグに基づいて選択的に実行する、
プロセッサ。
【請求項８】
前記少なくとも１つのデスティネーションフラグに対応しないフラググループは、リネームされたフラグの各々を前記実行ユニットが書き込むときに影響を受けない、請求項７のプロセッサ。
【請求項９】
前記ディスパッチされた命令のアウトオブオーダ実行は、データ依存性に基づいている、請求項７のプロセッサ。
【請求項１０】
前記実行ユニットは、前記書き込みフラグを、廃棄サイクルの間に前記インオーダフラグマッピングテーブルに書き込む、請求項８のプロセッサ。
【請求項１１】
前記アウトオブオーダフラグマッピングテーブルは、ソースフラググループによりインデックス化される、請求項７のプロセッサ。
【請求項１２】
前記実行ユニットは、
ゼロシフトの発生という条件に応じてポイズンビットを設定し、
ゼロシフトの２回目の発生という条件に応じて前記ポイズンビットをクリアし、
前記ポイズンビットがクリアされることをもたらす命令を再度ディスパッチして再度実行し、
前記フラッシュ操作は、前記ポイズンビットがクリアされるときに実行される、請求項１０のプロセッサ。
【請求項１３】
デコードユニットと、
前記デコードユニットと前記実行ユニットとの間をインタフェースで接続するように構成された１６ビット即値バスと、
前記デコードユニットと前記実行ユニットとの間をインタフェースで接続するように構成された４ビット制御バスと、をさらに備え、
前記１６ビット即値バスは、即値定数を搬送するように構成されており、前記１６ビット即値バス及び前記４ビット制御バスの組み合わせは、即値定数を含む命令用の符号化情報を搬送するように構成されており、前記１６ビット即値バスは、非１６ビット即値定数の場合に前記符号化情報のいくつかのオーバーロードを搬送する、請求項７のプロセッサ。
【請求項１４】
プロセッサがフラグハンドリングを実行するために、汎用コンピュータによって実行される１セットの命令を記憶するコンピュータ可読記憶媒体であって、
ディスパッチされた命令から少なくとも１つのデスティネーションフラグを判定するための判定コードセグメントと、
前記少なくとも１つのデスティネーションフラグに対応する少なくとも１つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、前記少なくとも１つのデスティネーションフラグをリネームするためのリネームコードセグメントと、
リネームされたフラグの各々をアウトオブオーダフラグマッピングテーブルに書き込み、前記ディスパッチされた命令のアウトオブオーダ実行によって生成された書き込みフラグをインオーダフラグマッピングテーブルに書き込むための書き込みコードセグメントと、
前記書き込みフラグに基づいてフラッシュ操作が要求されていると判定したときに、前記インオーダフラグマッピングテーブルに基づいて前記アウトオブオーダフラグマッピングテーブルを復元するためのフラッシュコードセグメントと、を備え、
前記フラググループが独立したフラグに対応する、
コンピュータ可読記憶媒体。
【請求項１５】
前記命令は、デバイスの製造に使用されるハードウェア記述言語（ＨＤＬ）命令である、請求項１４のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１３年１０月２５日に出願された米国仮特許出願第６１／８９５，７１５号の利益を主張し、その内容は、引用により本明細書に組み込まれる。
【０００２】
本開示の実施形態は、概して電子回路を対象とする。
【背景技術】
【０００３】
プロセッサ（例えば、中央処理装置（ＣＰＵ）、グラフィックスプロセッシングユニット（ＧＰＵ）等）は、より高速な処理速度を達成するために、複数のコア及びパイプラインアーキテクチャを使用する。より高速な実行スループットを容易にするために、プロセッサコアのデコーダ及び実行ユニット内での操作の「パイプライン」実行を使用する。しかしながら、プロセッサのより高速で効率的なスループットに対する継続的な需要がある。
【発明の概要】
【課題を解決するための手段】
【０００４】
本明細書に記載されるのは、命令の依存性を解消するためにグループにおいてフラグをリネームするための方法及びプロセッサのいくつかの実施形態である。プロセッサのデコーダ及び実行ユニットは、グループにフラグをリネームするように構成されてもよく、各グループを適切に別々に処理することを可能にする。このフラグのリネームは、命令に関するフラグ依存性を解消する。これは、マージ依存性を生成する必要がなく、命令に対して正確に命令が望むフラグを書き込むことを可能にする。
【０００５】
本明細書に記載されるのは、命令に埋め込まれた即値（ｉｍｍｅｄｉａｔｅ）を扱うための方法及びプロセッサのいくつかの実施形態である。１つの実施形態において、命令に埋め込まれた即値のハンドリングは、プロセッサのデコード及び実行ユニット間のインタフェースに１６ビット即値バス及び４ビット符号化／制御バスを加えることで達成され得る。符号化空間は、１６ビット即値バス上へ符号化情報をオーバーロードすることで最小化されるため、デコード及び実行ユニットから情報を転送しながらストレージ及びルートリソースを効率的に使用する。８又は１２ビット即値の場合、即値バスの上位４ビットは符号化ビットを含むことができ、符号化／制御バスはＩＳＡタイプを示すことができる。１６ビット即値の場合、符号化／制御バスは、符号化ビットを含む。符号化／制御バスは、即値バスの上位４ビットをいつ参照すべきか、及び、データが全体として使用されるときの情報を含む。このようにして、全体的な符号化空間は、インタフェースに追加のビットを必要とせずに増大される。
【０００６】
より詳細な理解は、添付の図面と併せて実施例として与えられる以下の説明から得ることが可能である。
【図面の簡単な説明】
【０００７】
【図１】１つ以上の開示された実施形態が実施され得る例示的なデバイスのブロック図である。
【図２】いくつかの実施形態によるプロセッサ用の例示的な命令パイプラインである。
【図３】いくつかの実施形態によるフラグハンドリング用の例示的なブロック図である。
【図４】データ及びフラグ依存性の例示的な図である。
【図５】図５における実施例の例示的な実行パターンである。
【図６】単一のエンティティのフラグの組み合わせを使用したときのフラグ依存性の例示的な図である。
【図７】図７における実施例の例示的な実行パターンである。
【図８】いくつかの実施形態による真のデータフラグ依存性の例示的な図である。
【図９】いくつかの実施形態による真のデータフラグ依存性を用いる通常操作の実施例である。
【図１０】いくつかの実施形態による真のデータフラグ依存性を用いるフラッシュ操作の実施例である。
【図１１】いくつかの実施形態による真のデータフラグ依存性を用いるポイズン生成の実施例である。
【図１２】いくつかの実施形態による真のデータフラグ依存性を用いるポイズン操作の実施例である。
【図１３Ａ】いくつかの実施形態による即値及び定数を含む命令の実施例である。
【図１３Ｂ】いくつかの実施形態による即値及び定数を含む命令の実施例である。
【図１４Ａ】いくつかの実施形態による即値及び定数を含む別の命令の実施例である。
【図１４Ｂ】いくつかの実施形態による即値及び定数を含む別の命令の実施例である。
【図１５】いくつかの実施形態による即値及び定数を含む命令の実施例である。
【図１６】いくつかの実施形態による即値ハンドリングの例示的なブロック図である。
【発明を実施するための形態】
【０００８】
簡潔にするために、集積回路設計、キャッシング、メモリ操作、メモリコントローラ、及びシステムの他の機能的な態様（及びシステムの個々の操作コンポーネント）に関する従来の技術は、本明細書において詳細に記載されていない。また、本明細書に含まれる様々な図に示された接続線は、様々な要素間の例示的で機能的な関係及び／又は物理的な結合を表すことを意図している。多くの代替又は追加の機能的な関係又は物理的接続が、主題の実施形態に存在し得ることに留意すべきである。さらに、特定の専門用語は、参照目的のみのために以下の説明で使用されることができるため、限定していることを意図せず、構造について言及する用語や、「第１」、「第２」及び他のかかる数値用語は、その文脈により明確に示されない限り、順番又は順序を意味するものではない。
【０００９】
以下の説明は、互いに「接続される」若しくは「結合される」、要素、ノード又は機能を言及する。本明細書で使用されるように、他に明記されない限り、「接続される」は、１つの要素／ノード／機能が別の要素／ノード／機能に直接接合され（又はこれと直接通信し）、必ずしも機械的でないことを意味する。同様に、他で明記されない限り、「結合される」は、１つの要素／ノード／機能が別の要素／ノード／機能に直接又は間接接合され（又はこれと直接若しくは間接通信し）、必ずしも機械的でないことを意味する。このようにして、図が要素の１つの例示的な配列を描写することができるが、追加の介在する要素、デバイス、機能又はコンポーネントは、描写された主題の実施形態に存在し得る。
【００１０】
少なくとも１つの例示的な実施形態は、以下の説明に存在しながら、膨大な数の変形した形態が存在することを理解するべきである。本明細書に記載された例示的な１つの実施形態又は複数の実施形態は、いかなる方法でも特許請求された発明の範囲、適用性又は構成を限定することを意図しないことを理解するであろう。むしろ、前述の詳細な説明は、記載された１つの実施形態又は複数の実施形態を実施するための指針を当業者に提供するであろう。様々な変更が特許請求の範囲により定義された範囲から逸脱することなく、要素の機能及び配列で行われ得ることを理解するであろう。
【００１１】
図１は、１つ以上の開示された実施形態が実施され得る例示的なデバイス１００のブロック図である。このデバイス１００は、たとえば、コンピュータ、ゲーミングデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含み得る。デバイス１００は、プロセッサ１０２と、メモリ１０４と、ストレージ１０６と、１つ以上の入力デバイス１０８と、１つ以上の出力デバイス１１０と、を含む。また、デバイス１００は、入力ドライバ１１２及び出力ドライバ１１４を任意に含み得る。デバイス１００が、図１で示されない追加のコンポーネントを含み得ることが理解できるであろう。
【００１２】
プロセッサ１０２は、中央処理装置（ＣＰＵ）、グラフィックスプロセッシングユニット（ＧＰＵ）、同じダイ上に設置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含んでもよい。各プロセッサコアは、ＣＰＵ又はＧＰＵであってもよい。メモリ１０４は、プロセッサ１０２として同じダイ上に設置されてもよいし、プロセッサ１０２とは別個に設置されてもよい。メモリ１０４は、例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ又はキャッシュ等の揮発性又は不揮発性メモリを含み得る。
【００１３】
ストレージ１０６は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク又はフラッシュドライブ等の固定又はリムーバブルストレージを含み得る。入力デバイス１０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、ディテクタ、マイクロフォン、加速度センサ、ジャイロスコープ、生体スキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／又は受信用の無線ローカルエリアネットワークカード）を含み得る。出力デバイス１１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／又は受信用の無線ローカルエリアネットワークカード）を含むことができる。
【００１４】
入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８から入力を受信することを可能にする。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０へ出力を送信することを可能にする。入力ドライバ１１２及び出力ドライバ１１４が任意のコンポーネントであること、並びに、入力ドライバ１１２及び出力ドライバ１１４が存在しない場合にはデバイス１００が同じ方式で動作することに留意する。
【００１５】
命令セットアーキテクチャ（ＩＳＡ）は、プロセッサにより復号されて実行されることのできる少なくとも１つの命令セットを定義する。限定されないが、インテルのｘ８６  ＩＳＡ及びＡＲＭの標準ＡＲＭ  ＩＳＡ、並びに、Ｔｈｕｍｂ  ＩＳＡを含む複数のＩＳＡが存在する。本明細書に記載された実施形態では、例示的な実施例としてＡＲＭ又はＴｈｕｍｂ  ＩＳＡを引用するが、方法及び装置は、他のＩＳＡ、関連システム及びプロセッサアーキテクチャにも同様に適用可能である。
【００１６】
プロセッサは、従来、オペレーション（Ｏｐ）コード（ＯｐＣｏｄｅ）又は命令コードにより典型的に識別されるオペレーション又は命令を処理するように設計されている。命令は、実行される実際の作業を表し、暗黙的（例えば加算）又は明示的（例えば除算）機能ユニットへオペランドの発行を示す。命令は、スケジューラキューにより周囲に移動できる。オペランドは、命令に対する引数であり、式、レジスタ又は定数を含み得る。
【００１７】
図２は、少なくとも１つのフェッチユニット２０５と、デコーダユニット２１０と、実行ユニット２１５と、を含むプロセッサ用の例示的な命令パイプライン２００を説明する図である。フェッチユニット２０５は、メモリ（図示せず）からの命令をフェッチし、デコーダユニット２１０へ命令を送信する。この命令は、例えば、固定長のＡＲＭ命令であって、３２バイト及び１６バイトの何れかであってもよい。デコーダユニット２１０は、フェッチされた命令のレジスタ、コンテンツ及びコンテキストを復号し、１つ以上の実行ユニット又は実行／スケジューリングユニット２１５へ、固定長内部命令（マイクロオペレーション又はマイクロ命令（μｏｐ））をディスパッチし得る。実行ユニット２１５は、復号された命令を実行する。この命令は、一般に、μｏｐと関連した入力データの位置を識別するソースと、データレジスタデスティネーションを用いてμｏｐと関連した出力／結果データの位置を識別するデスティネーションと、を含む。各命令は、一般に、１つ、２つ又はそれ以上のμｏｐに翻訳される、すなわち、復号されることが可能である。プロセッサのデコードユニット２１０及び実行ユニット２１５は、例えば、フラグハンドリング及び即値ハンドリングのための方法及び装置を含み得る。
【００１８】
例えばＡＲＭ  ＩＳＡ等の殆どのＩＳＡは、条件付き命令実行用の様々なフラグを利用する。ＡＲＭ  ＩＳＡフラグは、符号条件用のＮ、ゼロ条件用のＺ、キャリー条件用のＣ、オーバーフロー条件用のＶ、飽和条件用のＱ、及び、バイト特定のキャリー条件であるＧＥ、ビット３：０を含み得る。
【００１９】
一般的に、特定のタイプのＡＲＭ命令は、フラグの特定の組み合わせを生成し、又は書き込む。例えば、ＮＺ（符号及びゼロ）フラグの組み合わせは、多くのＡＡｒｃｈ３２命令（ＡＡｒｃｈ３２は、３２ビット汎用レジスタ及び３２ビットプログラムカウンタ（ＰＣ）、スタックポインタ（ＳＰ）及びリンクレジスタ（ＬＲ）を使用し、２つの命令セット、即ちＡ３２及びＴ３２の選択肢を提供する、ＡＲＭ  ｖ８  ３２ビット実行状態である）により書き込まれ得る。これらは、例えば、２つのフラグのみ書き込む、乗算（ＭＵＬ）と乗算＋加算（ＭＬＡ）とを含み得る。また、いくつかの種類の移動（ＭＯＶ）命令及び論理命令は、これら２つのフラグのみ書き込む。ＮＺＣ（符号、ゼロ及びキャリー）フラグの組み合わせは、ＡＡｒｃｈ３２  ＡＮＤ、論理左シフト（ＬＳＬ）、右ローテートレジスタ（ＲＯＲ）、ＭＯＶ等の、ＭＯＶ及び論理命令のいくつかの特性により書き込まれる。ＮＺＣＶ（符号、ゼロ、キャリー及びオーバーフロー）フラグの組み合わせは、ＡＡｒｃｈ３２  ＡＤＤ、ＳＵＢ等の算術命令により、及び、フラグを書き込む全てのＡＡｒｃｈ６４  ｏｐにより、全て書き込まれる。Ｑフラグは、信号飽和（ＳＳＡＴ）、飽和加算（ＱＡＤＤ）、飽和減算（ＱＳＵＢ）等の算術命令を飽和させることによってのみ書き込まれる。ＧＥフラグ（４つのフラグのグループである）は、実行ユニットの汎用レジスタで実行されたシングルインストラクションマルチプルデータ（ＳＩＭＤ）命令により書き込まれ、ＡＤＤ１６、ＳＵＢ１６等の命令を含む。６４ビットＡＲＭ命令（ＡＡｒｃｈ６４）において、フラグＱ及びＧＥは、書き込まれることが不可能であり、常に０である。
【００２０】
殆どのＡＲＭ命令が１つ又は２つのグループのフラグを読み出すことに留意する。全ての条件コードは、２つのグループのみを必要とする。この２つの例外は、プレディケーション（ｐｒｅｄｉｃａｔｉｏｎ）及びフラグコピーである。プレディケーションに関して、プレディケーション用の条件コードは、２つのグループのみから生成されることが可能である。フラグを書き込むプレディケートされた命令のために、古いフラグ値は、プレディケートが偽である場合にコピーされなければならない。条件コードで使用されたフラグと、コピーされる必要があるものとの間で、これらの命令は、３つのフラグソースまでを必要とすることが可能である。フラグコピーに関して、いくつかの命令は、全てのフラグをコピーすることが可能である。
【００２１】
ＡＡｒｃｈ６４  ＩＳＡ命令が同じ時間に（ＮＺＣＶ）全ての条件フラグのみを書き込むことが可能であり、追加の依存性がフラグを書き込む異なる命令間で生成されないため、単一のフラググループが提供され得ることに留意する。
【００２２】
本明細書に記載されるのは、命令の依存性を解消するためにグループにおいてフラグをリネームするための方法及びプロセッサの実施形態である。依存性の解消は、性能及びアウトオブオーダスケジューリングを改良する。一般に、プロセッサのデコーダ及び実行ユニットは、グループにフラグをリネームするように構成されることが可能であり、各グループを適切に別々に処理することを可能にする。このフラグのリネームは、命令に関するフラグ依存性を解消する。例えば、ＡＲＭ  ＩＳＡフラグは、５つのグループ、すなわち、ＮＺ、Ｃ、Ｖ、Ｑ及びＧＥにリネームされ得る。これは、任意の３２ビットＡＲＭ命令（ＡＡｒｃｈ３２）に対してこの命令を欲するフラグを正確に書き込むことを可能にし、マージ依存性を生成する必要がない。
【００２３】
一般的に、フラグハンドリングの目的のために、Ｎ、Ｚ、Ｃ、Ｖ、Ｑ及びＧＥフラグは、単一のエンティティ又は組み合わせとして扱われる。これは、フラグを部分的に書き込む命令間のマージ依存性の多くを引き起こす。例えば、フラグＺのみを書き込む命令がある場合には、フラグＮは依存性（結果で変化せずにソース及びコピーされた）として搬送される必要がある。ＡＲＭ及びＴｈｕｍｂ３２  ＩＳＡのために、コンパイラは、どのインストラクションがフラグを生成する必要があるかを決定する（したがって、余分なソース依存性を得る）ことが可能であるので、効果は幾らか限定される。Ｔｈｕｍｂ１６  ＩＳＡのために、フラグデスティネーションは、暗黙的であるので、ペナルティを制限する方法がない。
【００２４】
図３は、１つの実施形態によるフラグハンドリングのためのプロセッサ３００の実施形態を示す図である。プロセッサ３００は、整数デコードユニット３０５と、実行ユニット３１０と、を含む。デコーダユニット３０５は、フェッチユニット（図示せず）から、命令、ＩＮＳＴＲ１、ＩＮＳＴＲ２、ＩＮＳＴＲ３及びＩＮＳＴＲ４を受信する。各命令は、フラグデスティネーション（Ｆｌａｇ  Ｄｅｓｔ１、Ｆｌａｇ  Ｄｅｓｔ２、Ｆｌａｇ  Ｄｅｓｔ３及びＦｌａｇ  Ｄｅｓｔ４）、オペランドＡ、オペランドＢ、オペランドＣ、フラグソースＡ及びフラグソースＢを含み得る（殆どのＡＲＭ命令が１つ又は２つのグループのフラグを読み出し、全ての条件コードが２つのグループのみを要求することに注意する）。これらの命令は、ディスパッチサイクル３５０の間に実行ユニット３１０へ適切にディスパッチされる。
【００２５】
実行ユニット３１０は、リネームサイクル３６０の間に、リネーム回路３１５を使用して、各デスティネーションフラグにフリーフラグレジスタ番号（ＦＲＮ）を割り当てることによって、Ｆｌａｇ  Ｄｅｓｔ１、Ｆｌａｇ  Ｄｅｓｔ２、Ｆｌａｇ  Ｄｅｓｔ３及びＦｌａｇ  Ｄｅｓｔ４にフラグをリネームし、アウトオブオーダフラグマッピングテーブル３２０へ新規のリネームされたフラグを書き込み、アウトオブオーダフラグマッピングテーブルに現在書き込まれているこのフラググループのみに影響を与え、その他のフラググループを元のままに保つ。図示目的のために、フラグのリネームは、４つのフラググループ、すなわち、ＮＺ、Ｃ、Ｖ及びＧＥを使用することができる。他のフラググループを使用してもよい。同様に、ＩＮＳＴＲ１、ＩＮＳＴＲ２、ＩＮＳＴＲ３及びＩＮＳＴＲ４からの各フラグソースＡ及びＢは、フラググループに基づきそれらの対応するＦＲＮへリネームされる。命令又は操作と関連したフラグは、それぞれのエントリがＦＲＮに割り当てられる、フラグレジスタファイル３２５のエントリとして追跡される。実行ユニット３１０は、本明細書に記載されるようにフラグが別々のグループで扱われるので、真のデータ依存性に基づき、フラグ読み出しサイクル３７０の間にフラグレジスタファイル３２５からフラグ値を読み出し、アウトオブオーダの命令を（実行サイクル３８０の間に）実行する（３３０）。この実行ユニット３１０は、廃棄サイクル３９０の間に、フラグレジスタファイル３２５と、インオーダフラグマッピングテーブル３３５とに戻って、得られたフラグを書き込む。図３の操作態様は、図９〜１２に関して本明細書に記載される。
【００２６】
図３〜８を参照する例示的な実施例において、表１に示されたコードスニペットを検討する。
【表１】
0006491655.tif 000002
【００２７】
図４は、ソースレジスタ及びデスティネーションレジスタ間の真のデータ依存性を説明する図である。例えば、ＡＤＣ命令は、ソースレジスタとしてレジスタｒ１を使用するが、ｒ１の値はＯＲ命令の実行に依存する。また、図４は、フラグ依存性を説明する。例えば、ＡＤＣ命令は、ソースフラグとしてＣフラグを含む。しかしながら、Ｃフラグは、ＮＺＣフラグの組み合わせを生成するＬＳＬ命令に関して何が起こるかに依存する。したがって、ＡＤＣ命令は、ＬＳＬ命令の実行に依存する。よって、ＡＤＣ命令は、最終的に、ＯＲ及びＬＳＬ命令に依存する。結果として、ＡＤＣ命令は、ＯＲ及びＬＳＬ命令が実行されるまで待機しなければならない。これは、図５で説明されるように、真のデータ依存性にのみ基づく、可能な限り最高の実行順序をもたらす。全ての命令が、例えば、１２個の実行ユニットがあってもよい、最大数の実行ユニットを使用して１回のサイクルで完了することが最良の状況であることに留意する。最悪の状況は、データ及びフラグ依存性のため、コードスニペットを完了させるために１２サイクルを要することである。
【００２８】
図６は、例えば、ＮＺＣＶ等の単一のエンティティフラグの組み合わせとしてフラグがリネームされる実施例を説明する。レジスタ依存性は、図４と同様である。この状況において、命令又は操作が、ＮＺＣＶエンティティの２つのフラグのみを生成又は書き込むことを実行する場合に、実行ユニットは、フラグレジスタから他の２つのフラグの前の値を読み出さなければならず、ＮＺＣＶ結果にそれらをマージしなければならない。例えば、論理命令ＯＲ（＃５，＃７，＃１１）及びＡＮＤ（＃９）は、ＮＺフラグの組み合わせのみを生成する。このため、これらの命令は、ＣＶフラグ条件を取得し、ＮＺＣＶ単一エンティティを完了させるために実行するＡＤＣ命令（＃４）を待機しなければならない。これらの依存性は、図７で説明する実行順序をもたらす。図５及び図７の比較は、単一エンティティフラグの組み合わせが、最適解よりさらに２サイクル又はさらに１／２回を要求することを示す。
【００２９】
図８は、リネームするフラグコンベンション（ｃｏｎｖｅｎｔｉｏｎ）が真のデータ依存性に従う実施形態を説明する図である。この実施例において、フラグＮＺ、Ｃ及びＶは、それぞれグループ０、１及び２として独立して書き込まれることが可能である。３つのフラグ群（ＮＺ、Ｃ、Ｖ）にフラグをリネームすることによって、例えば、各命令は、その他のマッピングを変わらないままに残して、全体のフラググループ（又はそれらのうち複数）を書き込む。このように、任意の不要な依存性を生成する必要がない。これは、効果的に任意の偽の依存性を削除する。
【００３０】
本明細書に記載されるのは、ゼロによるシフト（ＳＢＺ）を扱うための方法及び装置である。一般的に、通常シフト／ローテート命令は、Ｖフラグを修正されないままに残し、ＮＺＣフラグを書き込む。Ｎフラグは、符号ビット（結果のビット３１）をコピーし、Ｚフラグは、この結果がすべてゼロである場合に設定され、Ｃフラグは、操作によりシフトされた最後のビットをコピーする。シフト量がゼロである場合に、Ｃフラグは修正されないままである。この同じ挙動は、シフトされた第２オペランドを許可する多くの命令へ持ち越され、Ｃフラグはこのシフトから生成される。一般的な実施例は、ＡＮＤ、ＯＲＲ、ＢＩＣ等の論理命令である。これらの命令は、論理演算結果に基づきＮ及びＺフラグを設定するが、それらは、任意の第２ソースシフト結果に基づきＣフラグを設定する。シフト量がゼロでない場合に、これらの命令は、新しいＣフラグを生成する。シフト量がゼロである場合に、これらの命令は、先のＣフラグを保持しなければならない。反例は、ＡＤＤ、ＳＵＢ等の算術命令である。これらの命令は、シフトされた第２オペランドを許可するが、それらはシフト結果に基づきＣフラグを設定しない。Ｃフラグは、ＡＬＵ結果（計算のビット３３）に基づき設定される。
【００３１】
ＡＡｒｃｈ３２  ＩＳＡは、これらの命令の各々へ複数の符号化を提供する。いくつかの場合において、シフト量は、命令符号化に埋め込まれた即値から生じる。他の場合において、シフト量はレジスタから生じる。
【００３２】
シフト量が命令において明示的に符号化される場合に、デコーダユニットは、リネームする前に命令が何をする必要があるかを決定することが可能である。例えば、シフト量がゼロである場合に、命令は明示的なシフト操作なしで復号し、命令はＮＺのみを書き込む。シフト量が１、２又は３である場合に、命令は、明示的なシフトｏｐなしで復号するが、命令はＮＺＣを書き込む。実行ユニットは、３ビットまでオペランドをシフトする能力を有し、また、これらの場合にＣフラグを選択する。シフト量が３より大きい場合には、イ命令は明示的なシフト操作で復号する。このシフト操作は、デスティネーションとしてＣフラグを得る一方で、論理演算（シフトされたデータを使用する）はＮＺのみを書き込む。
【００３３】
シフト量が汎用レジスタ（ＧＰＲ）から得られる場合に、デコーダユニットは、量がゼロであるか否かを先行して決定することが不可能である。例えば、命令ＡＮＤ  ｒ０，ｒ１，ｒ２は、ＮＺのみを書き込む単一μｏｐとして復号され得る。別の実施例において、命令ＡＮＤ  ｒ０，ｒ１，ｒ２  ＬＳＬ＃１は、ＮＺ及びＣを書き込む単一μｏｐとして復号され得る。別の実施例において、命令ＡＮＤ  ｒ０，ｒ１，ｒ２  ＬＳＬ＃５は、ダブルμｏｐ（ＡＮＤがＬＳＬに続く）として復号され得る。ＬＳＬ命令は、Ｃフラグを書き込む一方で、ＡＮＤ命令は、ＮＺフラグの組み合わせを書き込む。別の実施例において、命令ＡＮＤ  ｒ０，ｒ１，ｒ２  ＬＳＬ  ｒ３は、ダブルμｏｐ（ＡＮＤがＬＳＬに続く）として復号され得る。ＬＳＬ命令は、Ｃフラグを書き込み、ＳＢＺ挙動を有することが可能である一方で、ＡＮＤ命令は、ＮＺフラグの組み合わせを書き込む。
【００３４】
シフト量が復号中に判定されることが不可能である場合のために、フラグポイズンソリューションは、図３及び図９〜１２に関して、本明細書の以下に記載されるように実装され得る。図において、アウトオブオーダテーブルの網掛けボックスは、現在の命令又は操作が更新しているフラググループを参照する。全てのその他のフラググループは、そのまま残され、前の値を保持する。インオーダテーブルの網掛けボックスは、現在のアーキテクチャ状態のために有効なフラググループを参照する。全てのフラグＮ、Ｚ、Ｃ、Ｖ及びＧＥのための最新値は、これらの有効なグループのみから導かれる。インオーダテーブルの網掛けでないボックスのコンテンツは関係がない。グループが有効であるか否かの状態は、インオーダテーブルの有効なビットを使用して維持される。
【００３５】
図９は、フラグの正常又は通常操作の例示的な図である。この実施例において、実行時間に、デスティネーションフラグは、フリーＦＲＮの１つへリネームされる。これは、命令又は操作がプログラム順序で実行されないので、アウトオブオーダで行われる。アウトオブオーダテーブルは、ソースフラググループによりインデックス化される。これは、より後の操作にソースを割り当てることを簡便にする。次の命令は、より古い操作により前に書き込まれたフラグの１つをソースする場合に、そのソースレジスタとしてより古い操作のデスティネーションレジスタを得る。例えば、ＡＤＣ命令は、Ｃフラグをソースする。Ｃフラグへの最後の書き込みはＬＳＬ命令によるもので、ＬＳＬ命令のＣフラグは、レジスタＦ８へマッピングされている。このようにして、ＡＤＣ命令は、レジスタＦ８をソースし、Ｃフラグの値を得る。操作は、順に（すなわち、古い順に）廃棄する。インオーダテーブルは、廃棄した操作へＦＲＮへのフラグのマッピングを追跡する。このテーブルは、デスティネーションフラググループによりインデックス化される。例えば、ＡＤＣ命令は、ＮＺＣＶフラグへ書き込む。インオーダテーブルは、Ｆ７が全てのフラグへの値を有するので、唯一の有効なグループとしてレジスタＦ７をマークする。次のＯＲ命令が廃棄すると、ＮＺフラグは、レジスタＦ１１へマッピングされる。このようにして、レジスタＦ７及びＦ１１は、両方とも有効である。レジスタＦ１１は、ＮＺフラグ用の値を有し、レジスタＦ７は、ＣＶフラグ用の値を有する。ＢＳＬ命令は、ＺＣフラグをソースする。ＡＤＣ命令は、Ｃフラグを書き込む最後の操作であるため、ＢＳＬ命令は、Ｃフラグ用に、レジスタＦ７（ＡＤＣのデスティネーションＦＲＮ）をソースする。同様に、Ｚフラグは、ＯＲ命令のデスティネーションＦＲＮであるレジスタＦ１１からソースされる。
【００３６】
図１０を参照すると、フラッシュ上で、アウトオブオーダテーブルは、インオーダテーブルから復元される。フラッシュ操作は、複数の理由で発生する可能性があり、全てのこれらの場合において、機械の推測状態、すなわち、この場合ではアウトオブオーダテーブルは、ロールバックされなければならない。これは、上述したように操作廃棄へ同様に実装される。フラッシュ操作の実施例において、レジスタＦ６及びＦ８は、ＬＳＬ命令が廃棄した後に有効である。ＮＺＣフラググループマッピングが有効であるので、ＮＺ及びＣフラグ用のアウトオブオーダテーブルのマッピングは、レジスタＦ８に更新される。ＮＺＣＶフラグとともに有効であるＮＺＣフラグは、レジスタＦ６（ＮＺＣＶへマッピングされた）は、Ｖフラグだけのための値を含む。
【００３７】
図１１は、フラグ操作及びポイズンフラグ操作用のフラッシュの例示的な図である。この実施例において、第１ＬＳＬ命令がＳＢＺプロデューサである（すなわち、ゼロによるシフトが実行される）場合に、ＬＳＬ命令デスティネーションＦＲＮ，Ｆ１は、ポイズンされたものとしてマークされる。アウトオブオーダテーブルは、実行が完了する前に更新されるので、Ｃフラグは、レジスタＦ１（今、ポイズンされた）へマッピングされる。このような場合において、アーキテクチャの予想は、Ｃフラグが、その前回のＦＲＮ（この場合、Ｆ６である）へまだマッピングされる必要があることである。ＬＳＬ命令が廃棄するとき、Ｃフラグがポイズンされると知り、ＬＳＬ命令ンのＤｅｓｔフラグは、ＮＺＣからＮＺへ変更される。したがって、インオーダテーブルは、ＮＺのみのためにカラムを更新し、有効としてそれをマークする。レジスタＦ１は、インオーダテーブルのポイズンフラグへ常にマッピングされる。レジスタＦ６（ＮＺＣＶ用の）及びレジスタＦ１（ＮＺ用の）は、両方とも有効であるため、Ｃフラグ用にマッピングするインオーダテーブルは、レジスタＦ６であり、アーキテクチャ上、正しいマッピングである。
【００３８】
上述したように、殆どのＳＢＺの場合において、有効なＣフラグは、ポイズンされたＣフラグをソースする機会がある前に上書きされる。これは、よい結果である。この実施例において、まさにその次の命令及びＬＳＬ命令は、有効なＣフラグを書き込む。第２ＬＳＬ命令がゼロによるシフトの場合ではないため、Ｃフラグは、もはやポイズンされていない。そのため、第２ＬＳＬ命令が廃棄するときに、ＬＳＬ命令はインオーダテーブルでマッピングするＮＺＣを更新し、また、インオーダテーブルからのポイズンフラグを無効にする。したがって、ＡＤＣ命令がＣフラグをソースするときに、ＡＤＣ命令は、Ｃフラグ用のソースレジスタとしてレジスタＦ８を得て、正常に廃棄する。
【００３９】
図１２を参照して、第２ＬＳＬ命令がＳＢＺであるなら、ＡＤＣ命令は、ポイズンされる（本明細書の上記で説明されるように）Ｃフラグ用のレジスタＦ８をソースすることで終了する。これは、アーキテクチャ上正しくない。ＡＤＣ命令は、ＳＢＺ  ＬＳＬ命令の前にＣフラグのマッピングを含むレジスタＦ１をソースしている必要がある。したがって、ＡＤＣ命令は、再同期されフラッシュする必要がある、すなわち、ＡＤＣ命令は、再度ディスパッチされて再度実行される必要がある。したがって、ＡＤＣ命令は、再びディスパッチされ、アウトオブオーダテーブルは、補正される必要がある。これは、インオーダテーブルからアウトオブオーダテーブルを生成するためにフラッシュ復元機構を使用することで完成することができる。フラッシュが完了すると、Ｃフラグは、そのときにレジスタＦ１（第１ＬＳＬ命令のデスティネーション）へ正確にマッピングされ、ＮＺは、レジスタＦ８（第２ＬＳＬ命令のデスティネーション）へ正確にマッピングされる。
【００４０】
ポイズンされたフラグインジケータは、ゼロに等しいシフト量でシフト／ローテート、インストラクション／操作により生成されたフラグ用に１のみに設定される。全ての他の操作は、ポイズンされたフラグインジケータをゼロとして書き込む。また、インオーダテーブルは、フリーＦＲＮリストへ保持された前回のＦＲＮを戻す原因となる。すなわち、ＦＲＮは、リネーム回路３１５で使用するために再循環される。例えば、フラグＮＺＣＶを生成する操作が廃棄するときに、ＮＺＣＶフラグにより保持されたＦＲＮは、フリーＦＲＮリストへ戻され、廃棄された操作のＦＲＮは、廃棄操作用の新規のＦＲＮへ更新される。フラッシュ復元は、インオーダテーブルに依存し、再同期を引き起こした操作の前の操作のそれにアウトオブオーダテーブルを復元する（３４０）。
【００４１】
この機構は、ゼロによるシフトが低頻度であるという事実に依存し、シフトにより作成されたフラグは、一般にソースされない。したがって、再同期する必要が非常に低頻度で起こり、性能上に最小限の影響をもたらす。また、「レジスタによるシフト」第２オペランドを使用する任意の論理命令は、通常の論理演算がその後に続くシフト操作で復号することができる。このシフト操作は、シフト／ローテート命令から生じるシフト／ローテート操作として同じＳＢＺ挙動を有する。
【００４２】
別の実施形態において、フラグをポイズンする代替案は、フラグを書き込む（シフト量がレジスタから生じるときに）全てのシフト操作にＣフラグ及びシフト量がゼロであることが判明する場合に出力フラグへのＭＵＸをソースすることである。これは、新規のデータ依存性を導入し、これらのケースが普通である場合に大幅に性能を削減する可能性がある。
【００４３】
本明細書に記載されるのは、いくつかの実施形態による、命令に埋め込まれた即値を扱う方法及び装置である。例えばＡＲＭ及びＴｈｕｍｂ  ＩＳＡ等のいくつかのＩＳＡにおいて、インストラクション自体から幾つかのフィールドに基づく即値修正が必要な幾つかの命令がある。即値定数及び符号化の両方は、命令から生じるビットフィールドである。例えば、命令ＡＤＤ  Ｒｄ，Ｒａ，Ｉｍｍ３２のために、Ｉｍｍ３２用の値は命令の８ビットフィールド及び符号化ビットから導かれる。図１３Ａは、ビット０〜７が即値定数値１３０５の１６進数表現であり、ビット８〜１１が符号化ビット１３１０である、ＡＲＭ命令１３００で修正された即値定数の符号化の実施例を説明する。図１３Ｂは、ａｂｃｄｅｆｇｈを符号化ビット１３１０へ関連付ける場合のバイナリ形式で即値定数値１３０５を説明する。
【００４４】
図１４Ａは、ビット０〜７が即値定数値１４０５の１６進数表現であり、下位ワードのビット７及び１２〜１４並びに上位ワードのビット１０が符号化ビット１４１０である、Ｔｈｕｍｂインストラクション１４００で修正された即値定数の符号化を説明する図である。図１４Ｂは、ａｂｃｄｅｆｇｈを符号化ビット１４１０に関連付ける場合のバイナリ形式で即値定数値１４０５を説明する図である。アセンブリ構文において、即値は、通常方式（デフォルトによる１０進数）で指定される。
【００４５】
図１３Ａ、１３Ｂ、１４Ａ及び１４Ｂは、ＡＲＭ  ＩＳＡでサポートされた修正形態の幾つかを説明する図である。また、例えばＡＤＤ又はＳＵＢ等の命令を実行する前に修正を要求する、例えば「デコードビットマスク」、「左シフト」、「符号拡張」及び「ゼロ拡張」等の命令に埋め込まれる他の符号化がある。
【００４６】
実行ユニットに回覧される必要がある多くの符号化がある。ＯｐＣｏｄｅ空間でそれらを符号化し、そのとき実行時間にこの修正を行うことは困難である。さらに、余分なサイクルが即値修正を行うために必要とされる。拡張がデコードユニットで行われる場合に、そのときの配線数は、実行及びデコードユニットに亘って大幅に増加するであろう。これは、電力及びエリア要件を増し、また、限られたルートリソースがある場合にはタイミング問題につながる。
【００４７】
１つの実施形態において、命令に埋め込まれた即値のハンドリングは、デコード及び実行ユニット間のインタフェースに、１６ビット即値バス及び４ビット符号化／制御バス（図１５でＳｒｃＢＣｔｌとして示される）を加えることで達成され得る。この命令は、典型的に、即値データの８〜１６ビットを必要とし、そして３２又は６４ビットに変換されて得られる。符号化空間は、１６ビット即値バス上へ符号化情報をオーバーロードすることで最小化されるため、デコード及び実行ユニットからの情報を転送しながらストレージ及びルートリソースを効率的に使用する。
【００４８】
図１５は、１６ビット即値バス及び４ビット符号化／制御バスを使用する即値ケースのサンプリングを提供する図である。第１カラムは、必要な修正の性質を詳述し、第２カラムは、４符号化ビットであり（ＳｒｃＢＣｔｌ〈３：０〉である）、第３及び第４カラムは、１６ビット即値バスである。図１５において、略語は、ＬＳＬが論理左シフト（データ、〈シフト量〉）であり、ＺｅｒｏＥｘｔｅｎｄがデータサイズに基づき上位４８／１６ビットをゼロにするであり、ＳｉｇｎＥｘｔｅｎｄがデータサイズに基づき上位４８／１６ビット上で１５番目のビットをコピーするである。図１５で示すように、即値は、８、１２又は１６ビットを必要とする可能性がある。８又は１２ビット即値の場合に、即値バスの上位４ビットは、符号化ビットを含むことができ、符号化／制御バスは、ＩＳＡタイプを示すことができる。１６ビット即値の場合に、符号化／制御バスは、符号化ビットを含む。ＳｒｃＢＣｔｌ〈３：０〉は、即値バスの上位４ビットをいつ参照するか、及び、データが全体としていつ使用されるべきかの情報を含む。このようにして、全体的な符号化空間は、インタフェースに追加のビットを必要とせずに増大される。
【００４９】
一般に、プロセッサは、少なくとも１つのデコードユニット及び実行ユニットを含む。デコードユニットは、フェッチユニットから命令を受信する。各命令は、少なくとも１つのオペランドＡ、オペランドＢ、オペランドＣ及び他のビットを含む。１６ビット即値バス及び４ビット符号化／制御バスは、命令に埋め込まれた幾つかの即値を扱うためにデコードユニットから実行ユニットへ加えられる。実際には、即値バス及び符号化／制御バスは、データビットを拡張して消費される最終即値データを生成する方法について知らせる。即値データは、シフト及びアライメント後、すなわち、修正及び／又は拡張後にアレイに直接記憶される。例えば、回路（少なくとも１６ビット即値バス及び４ビット符号化／制御バスを含む）は、μｏｐが複数のソースを参照するのに対して、拡張された即値、例えば、６４ビットに拡張された修正された即値が特定の１つのソースへのみ行くことが可能であるように構成されることが可能である。
【００５０】
図１６は、命令に埋め込まれた即値を扱うための実施形態の例示的なブロック図である。プロセッサ１６００は、少なくとも１つの整数デコードユニット１６０５と、実行ユニット１６１０と、を含む。デコードユニット１６０５は、例えば、ＡＲＭ  ＩＳＡ命令１６１５及び／又はＴｈｕｍｂ  ＩＳＡ命令１６１７を受信することが可能である。命令１６１５及び１６１７は、デコードサイクル１６９０の間に復号され、本明細書で上述したように、制御ビット１６１８は、マルチプレクサ１６２０を対象とする。制御ビット１６１８は、処理され、転送サイクル１６９４の間に即値制御バス１６３０を使用して実行ユニット１６１０へ渡される。データビット１６１９は、データ処理サイクル１６９２の間にディスパッチされて処理され、転送サイクル１８９４の間に即値データバス１６３２を使用して実行ユニット１６１０へ渡される。
【００５１】
本明細書で上述したように、即値の性質に依存して、すなわち、それが８、１２又は１６ビット即値であるか否か、適切な制御又は符号化ビット（すなわち、即値Ｃｔｒｌ［３：０］及び／又は即値データ［１５：１２］）は、拡張サイクルの間に処理の性質を決定する。例えば、制御又は符号化ビットは、Ｔｈｕｍｂ拡張１６５０、シフタ１６５２、ゼロ拡張１６５４、符号拡張１６５６、デコードビットマスク１６５８、ローテータ１６６０及び／又はバイトコピー１６６２を要求する可能性がある。これらの操作１６５０〜１６６２の出力及び適切な制御又は符号化ビットは、マルチプレクサ１６７０を対象とされ、これは選択サイクル１６９８の間に即値ストレージ１６８０に順に格納される。拡張サイクルは、余分な実行サイクルではないが、実際の命令又は操作の処理とほぼ同時に及び／又は並行して実行される。結果として、即値定数値は、実際の命令による使用及び実行のために即値ストレージ１６８０で利用可能である。
【００５２】
本明細書に記載されるのは、修正された即値からのキャリーフラグを扱う方法及び装置である。デコードユニットからのディスパッチ時間に行われる即値のローテーションに基づきキャリーフラグを書き出す幾つかの命令がある。それらの殆どは、論理命令である。ＡＲＭ  ＩＳＡ  ｖ７用に、このカテゴリにある、おおよそ８つの命令、例えば、ＡＮＤ、ＥＯＲ、ＴＳＴ、ＴＥＱ、ＯＲＲ、ＭＯＶ、ＢＩＣ、ＭＶＮがある。通常の論理命令の殆どはキャリーフラグを更新しないので、即値ローテーションにより生成されたキャリーフラグは、実行ユニットへ簡単に転送されることができ、実行時間にＦＲＦ（フラグレジスタファイル）に書き込まれることが可能である。修正された即値により生成されたこのキャリーフラグを記憶するために即値ストレージのストレージの余分なビットは、回路が常に右ローテートするように構成されており、データサイズが３２であることが必要とされない可能性がある。その理由は、即値ストレージ読み出しデータのビット３１が、その特定のμｏｐ用に更新される必要のある最終キャリーフラグであることを保証するからである。
【００５３】
これが適用できない唯一の場合は、本明細書で上述したようなゼロによるシフトの場合である。ローテーション量が操作コードから生じているので、ゼロによるシフトは、早期に検出されることが可能であり、Ｃフラグへ有効なＤｅｓｔフラグを無効にすることは、実行されることが可能であるので、ＦＲＦに書き込まれているものは重要ではなく、次の操作は、以前に生成された適切なキャリーでソースされる。しかしながら、ＡＲＭ  ｖ８の場合、「０」としてキャリーフラグを更新するＡＮＤ及びＢＩＣ命令がある。このような場合のために、２つの操作、ＡＮＤ  ｖ８及びＢＩＣ  ｖ８は、Ｃフラグを書き込むもの、及び、即値の実際のローテーションにより生成されたキャリーフラグを書き込むＡＲＭ  ｖ７内のものを区別するために提供され得る。
【００５４】
概して、フラグハンドリング方法は、ディスパッチされた命令から少なくとも１つのデスティネーションフラグを決定すること、及び、少なくとも１つのデスティネーションフラグに対応する少なくとも１つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、少なくとも１つのデスティネーションフラグをリネームすることを備え、フラググループは、独立したフラグに対応する。この方法は、リネームされたフラグの各々をアウトオブオーダフラグマッピングテーブルへ書き込むことを備えてもよく、少なくとも１つのデスティネーションフラグに対応しないフラググループは、影響を受けない。方法は、データ依存性に基づきアウトオブオーダのディスパッチされた命令を実行することを備えてもよい。方法は、廃棄サイクルの間にインオーダフラグマッピングテーブルへのアウトオブオーダ実行に起因するフラグを書き込むことを備え、インオーダテーブルは、廃棄された、ディスパッチされた命令へのフラグのマッピングを追跡する。インオーダフラグマッピングテーブルは、特定のフラググループが有効であるか否かを維持してもよい。アウトオブオーダフラグマッピングテーブルは、ソースフラググループによりインデックス化されてもよい。インオーダフラグマッピングテーブルは、フラッシュされたアウトオブオーダテーブルを復元してもよい。インオーダフラグマッピングテーブルは、ゼロによるシフト条件用のポイズンビットを維持してもよい。方法は、ゼロによるシフトが発生する条件でポイズンビットを設定し、ゼロによる第２シフトが発生する条件でポイズンビットを消費し、ポイズンビットが消費される条件でアウトオブオーダフラグマッピングテーブルをフラッシュし、ポイズンビットの消費をもたらすインストラクションを再度ディスパッチして再度実行することを備えてもよい。
【００５５】
概して、プロセッサは、ディスパッチされた命令から少なくとも１つのデスティネーションフラグを決定するように構成された実行ユニットと、少なくとも１つのデスティネーションフラグに対応する少なくとも１つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、少なくとも１つのデスティネーションフラグをリネームするように構成されたリネーム回路と、を含み、フラググループは、独立したフラグに対応する。このプロセッサは、アウトオブオーダフラグマッピングテーブルを含んでもよく、実行ユニットは、リネームされたフラグの各々をアウトオブオーダフラグマッピングテーブルへ書き込むようにさらに構成されてもよく、少なくとも１つのデスティネーションフラグに対応しないフラググループは、影響を受けない。実行ユニットは、データ依存性に基づきアウトオブオーダのディスパッチされた命令を実行するようにさらに構成されてもよい。プロセッサは、インオーダフラグマッピングテーブルをさらに含んでもよく、実行ユニットは、廃棄サイクルの間にインオーダフラグマッピングテーブルへアウトオブオーダ実行に起因するフラグを書き込むようにさらに構成されてもよく、インオーダフラグマッピングテーブルは、廃棄された、ディスパッチされた命令へのフラグのマッピングを追跡する。インオーダフラグマッピングテーブルは、特定のフラググループが有効であるか否かを維持することができる。アウトオブオーダフラグマッピングテーブルは、ソースフラググループによりインデックス化されてもよい。インオーダフラグマッピングテーブルは、フラッシュされたアウトオブオーダテーブルを復元してもよい。インオーダフラグマッピングテーブルは、ゼロによるシフト条件用のポイズンビットを維持してもよい。実行ユニットは、ゼロによるシフトが発生する条件でポイズンビットを設定し、ゼロによる第２シフトが発生する条件でポイズンビットを消費し、ポイズンビットが消費される条件でアウトオブオーダフラグマッピングテーブルをフラッシュし、ポイズンビットの消費をもたらす命令を再度ディスパッチして再度実行するように構成されてもよい。プロセッサは、デコードユニットと、デコードユニット及び実行ユニット間をインタフェースで接続するように構成された１６ビット即値バスと、デコードユニット及び実行ユニット間をインタフェースで接続するように構成された４ビット制御バスと、を含んでもよく、１６ビット即値バス及び４ビット制御バスの組み合わせは、即値定数を含む命令用の符号化情報を搬送するように構成され、１６ビット即値バスは、即値定数を搬送するように構成される。
【００５６】
プロセッサでフラグハンドリングを実行するために汎用コンピュータによる実行用の１セットの命令を記憶する非一時的なコンピュータ可読記憶媒体は、ディスパッチされた命令から少なくとも１つのデスティネーションフラグを判定するための判定コードセグメントと、少なくとも１つのデスティネーションフラグに対応する少なくとも１つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、少なくとも１つのデスティネーションフラグをリネームするためのリネームコードセグメントと、を含み、フラググループは、独立したフラグに対応する。この命令は、デバイスの製造のために使用されるハードウェア記述言語（ＨＤＬ）命令である。
【００５７】
概して、プロセッサは、デコードユニットと、デコードユニット及び実行ユニット間をインタフェースで接続するように構成された１６ビット即値バスと、デコードユニット及び実行ユニット間をインタフェースで接続するように構成された４ビット制御バスと、を含み、１６ビット即値バス及び４ビット制御バスの組み合わせは、即値定数を含む命令用の符号化情報を搬送するように構成されており、１６ビット即値バスは、即値定数を搬送するように構成されている。即値定数を含む命令用の符号化情報は、マルチプレクサを使用して１６ビット即値バス及び４ビット制御バスの組み合わせに圧縮される。１６ビット即値バスの上位４ビットは、特定の命令用の符号化情報を搬送するために使用され得る。この符号化情報は、Ｔｈｕｍｂ拡張、シフト、ゼロ拡張、符号拡張、デコードビットマスク、回転及びバイトコピー操作／拡張のうち少なくとも１つを実行することを決定する。操作／拡張及び符号化情報の出力は、命令による可用性のために即値ストレージに多重送信されて記憶される。操作／拡張中に生成されたキャリーフラグは、フラグレジスタファイルへ転送される。
【００５８】
（実施形態）
（実施形態１）
ディスパッチされた命令から少なくとも１つのデスティネーションフラグを判定することを備える、フラグハンドリング方法。
【００５９】
（実施形態２）
前記少なくとも１つのデスティネーションフラグに対応する少なくとも１つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、前記少なくとも１つのデスティネーションフラグをリネームすることであって、フラググループは独立したフラグに対応する、こと、をさらに備える、実施形態１の方法。
【００６０】
（実施形態３）
リネームされたフラグの各々をアウトオブオーダフラグマッピングテーブルに書き込むことであって、前記少なくとも１つのデスティネーションフラグに対応しないフラググループは影響を受けない、こと、をさらに備える、上記実施形態の何れかの方法。
【００６１】
（実施形態４）
データ依存性に基づきアウトオブオーダの前記ディスパッチされた命令を実行することをさらに備える、上記実施形態の何れかの方法。
【００６２】
（実施形態５）
廃棄サイクルの間にインオーダフラグマッピングテーブルへ前記アウトオブオーダ実行に起因するフラグを書き込むことであって、前記インオーダテーブルは、廃棄された、ディスパッチされた命令へのフラグのマッピングを追跡する、こと、をさらに備える、上記実施形態の何れかの方法。
【００６３】
（実施形態６）
前記インオーダフラグマッピングテーブルは、特定のフラググループが有効であるか否かを維持する、上記実施形態の何れかの方法。
【００６４】
（実施形態７）
前記アウトオブオーダフラグマッピングテーブルは、ソースフラググループによりインデックス化される、上記実施形態の何れかの方法。
【００６５】
（実施形態８）
前記インオーダフラグマッピングテーブルは、フラッシュされたアウトオブオーダテーブルを復元する、上記実施形態の何れかの方法。
【００６６】
（実施形態９）
前記インオーダフラグマッピングテーブルは、ゼロによるシフト条件のためのポイズンビットを維持する、上記実施形態の何れかの方法。
【００６７】
（実施形態１０）
ゼロによるシフトが発生する条件でポイズンビットを設定することをさらに備える、上記実施形態の何れかの方法。
【００６８】
（実施形態１１）
ゼロによる第２シフトが発生する条件で前記ポイズンビットを消費することをさらに備える、上記実施形態の何れかの方法。
【００６９】
（実施形態１２）
前記ポイズンビットが消費される条件で前記アウトオブオーダフラグマッピングテーブルをフラッシュすることをさらに備える、上記実施形態の何れかの方法。
【００７０】
（実施形態１３）
前記ポイズンビットの前記消費をもたらす命令を再度ディスパッチして再度実行することをさらに備える、上記実施形態の何れかの方法。
【００７１】
（実施形態１４）
ディスパッチされた命令から少なくとも１つのデスティネーションフラグを判定するように構成された実行ユニットを備える、プロセッサ。
【００７２】
（実施形態１５）
前記少なくとも１つのデスティネーションフラグに対応する少なくとも１つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、前記少なくとも１つのデスティネーションフラグをリネームするように構成されたリネーム回路をさらに備え、フラググループは独立したフラグに対応する、実施形態１４のプロセッサ。
【００７３】
（実施形態１６）
アウトオブオーダフラグマッピングテーブルをさらに備え、前記実行ユニットは、リネームされたフラグの各々を前記アウトオブオーダフラグマッピング・テーブルに書き込むようにさらに構成されており、前記少なくとも１つのデスティネーションフラグに対応しないフラググループは、影響を受けない、実施形態１４又は１５のプロセッサ。
【００７４】
（実施形態１７）
前記実行部は、データ依存性に基づきアウトオブオーダの前記ディスパッチされた命令を実行するようにさらに構成されている、実施形態１４〜１６の何れかのプロセッサ。
【００７５】
（実施形態１８）
インオーダフラグマッピングテーブルをさらに備え、前記実行ユニットは、廃棄サイクルの間に前記インオーダフラグマッピングテーブルへ前記アウトオブオーダ実行に起因するフラグを書き込むようにさらに構成されており、前記インオーダフラグマッピングテーブルは、廃棄された、ディスパッチされた命令へのフラグのマッピングを追跡する、実施形態１４〜１７の何れかのプロセッサ。
【００７６】
（実施形態１９）
前記インオーダフラグマッピングテーブルは、特定のフラググループが有効であるか否かを維持する、実施形態１４〜１８の何れかのプロセッサ。
【００７７】
（実施形態２０）
前記アウトオブオーダフラグマッピングテーブルは、ソースフラググループによりインデックス化される、実施形態１４〜１９の何れかのプロセッサ。
【００７８】
（実施形態２１）
前記インオーダフラグマッピングテーブルは、フラッシュされたアウトオブオーダテーブルを復元する、実施形態１４〜２０の何れかのプロセッサ。
【００７９】
（実施形態２２）
前記インオーダフラグマッピングテーブルは、ゼロによるシフト条件のためにポイズンビットを維持する、実施形態１４〜２１の何れかのプロセッサ。
【００８０】
（実施形態２３）
前記実行ユニットは、ゼロによるシフトが発生する条件でポイズンビットを設定するように構成されている、実施形態１４〜２２の何れかのプロセッサ。
【００８１】
（実施形態２４）
前記実行ユニットは、ゼロによる第２シフトが発生する条件で前記ポイズンビットを消費するように構成されている、実施形態１４〜２３の何れかのプロセッサ。
【００８２】
（実施形態２５）
前記実行ユニットは、前記ポイズンビットが消費される条件で前記アウトオブオーダフラグマッピングテーブルをフラッシュするように構成されている、実施形態１４〜２４の何れかのプロセッサ。
【００８３】
（実施形態２６）
前記実行ユニットは、前記ポイズンビットの前記消費をもたらすディスパッチされた命令を再度ディスパッチして再度実行するように構成されている、実施形態１４〜２５の何れかのプロセッサ。
【００８４】
（実施形態２７）
デコードユニットをさらに備える、実施形態１４〜２６の何れかのプロセッサ。
【００８５】
（実施形態２８）
前記デコードユニット及び前記実行ユニット間をインタフェースで接続するように構成された１６ビット即値バスをさらに備える、実施形態１４〜２７の何れかのプロセッサ。
【００８６】
（実施形態２９）
前記デコードユニット及び前記実行ユニット間をインタフェースで接続するように構成された４ビット制御バスをさらに備える、実施形態１４〜２８の何れかのプロセッサ。
【００８７】
（実施形態３０）
前記１６ビット即値バスは、前記即値定数を搬送するように構成されており、前記１６ビット即値バス及び前記４ビット制御バスの組み合わせは、即値定数を含む命令用の符号化情報を搬送するように構成されており、前記１６ビット即値バスは、非１６ビット即値定数の場合に前記符号化情報のいくつかのオーバーロードを搬送する、実施形態１４〜２９の何れかのプロセッサ。
【００８８】
（実施形態３１）
プロセッサがフラグハンドリングを実行するために、汎用コンピュータによって実行される１セットの命令を記憶する非一時的なコンピュータ可読記憶媒体であって、ディスパッチされた命令から少なくとも１つのデスティネーションフラグを判定するための判定コードセグメントを備える、コンピュータ可読記憶媒体。
【００８９】
（実施形態３２）
前記少なくとも１つのデスティネーションフラグに対応する少なくとも１つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、前記少なくとも１つのデスティネーションフラグをリネームするためのリネームコードセグメントをさらに備え、フラググループは、独立したフラグに対応する、実施形態３１のコンピュータ可読記憶媒体。
【００９０】
（実施形態３３）
前記命令は、デバイスの製造に使用されるハードウェア記述言語（ＨＤＬ）命令である、実施形態３１又は３２のコンピュータ可読記憶媒体。
【００９１】
（実施形態３４）
デコードユニットを含むプロセッサ。
【００９２】
（実施形態３５）
前記デコードユニット及び実行ユニット間をインタフェースで接続するように構成された１６ビット即値バスをさらに備える、実施形態３４のプロセッサ。
【００９３】
（実施形態３６）
前記デコードユニット及び前記実行ユニット間をインタフェースで接続するように構成された４ビット制御バスをさらに備える、実施形態３４又は３５のプロセッサ。
【００９４】
（実施形態３７）
前記１６ビット即値バス及び前記４ビット制御バスの組み合わせは、即値定数を含む命令用の符号化情報を搬送するように構成されており、前記１６ビット即値バスは、前記即値定数を搬送するように構成されている、実施形態３４〜３６の何れかのプロセッサ。
【００９５】
（実施形態３８）
即値定数を含む命令用の前記符号化情報は、マルチプレクサを使用して前記１６ビット即値バス及び前記４ビット制御バスの前記組み合わせ内に圧縮される、実施形態３４〜３７の何れかのプロセッサ。
【００９６】
（実施形態３９）
前記１６ビット即値バスの前記上位４ビットは、特定の命令用の前記符号化情報を搬送するために使用され得る、実施形態３４〜３８の何れかのプロセッサ。
【００９７】
（実施形態４０）
前記符号化情報は、Ｔｈｕｍｂ拡張、シフト、ゼロ拡張、符号拡張、デコードビットマスク、ローテーション及びバイトコピー操作／拡張のうち少なくとも１つが実行されることを判定する、実施形態３４〜３９の何れかのプロセッサ。
【００９８】
（実施形態４１）
前記操作／拡張及び前記符号化情報の前記出力は、前記命令による可用性のために即値ストレージに多重送信されて格納される、実施形態３４〜４０の何れかのプロセッサ。
【００９９】
（実施形態４２）
操作／拡張中に生成されたキャリーフラグは、フラグレジスタファイルに転送される、実施形態３４〜４１の何れかのプロセッサ。
【０１００】
多くの変形形態が本明細書の本開示に基づき可能であることを理解するべきである。機能及び要素を特定の組み合わせで上述したが、各機能又は要素は、その他の機能及び要素なしに単独で、又は、他の機能及び要素を有し若しくは有していない、様々な組み合わせで使用され得る。
【０１０１】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアに実装され得る。適切なプロセッサは、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアと関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他の種類の集積回路（ＩＣ）、及び／又は、ステートマシンを含む。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令、及び、ネットリストを含む他の中間データ（コンピュータ可読媒体上に記憶可能な命令）の結果を使用して製造工程を構成することによって、製造され得る。このような処理の結果は、本実施形態の態様を実装するプロセッサを製造する半導体製造工程で使用されるマスクワークであってよい。
【０１０２】
本明細書で提供された方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行用の非一時的なコンピュータ可読記憶媒体に組み込まれた、コンピュータプログラム、ソフトウェア又はファームウェアに実装され得る。非一時的なコンピュータ可読記憶媒体の例は、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、並びに、ＣＤ−ＲＯＭディスク及びデジタル多目的ディスク（ＤＶＤ）等の光媒体を含む。
【図１】
0006491655.tif 000003
【図２】
0006491655.tif 000004
【図３】
0006491655.tif 000005
【図４】
0006491655.tif 000006
【図５】
0006491655.tif 000007
【図６】
0006491655.tif 000008
【図７】
0006491655.tif 000009
【図８】
0006491655.tif 000010
【図９】
0006491655.tif 000011
【図１０】
0006491655.tif 000012
【図１１】
0006491655.tif 000013
【図１２】
0006491655.tif 000014
【図１３Ａ】
0006491655.tif 000015
【図１３Ｂ】
0006491655.tif 000016
【図１４Ａ】
0006491655.tif 000017
【図１４Ｂ】
0006491655.tif 000018
【図１５】
0006491655.tif 000019
【図１６】
0006491655.tif 000020