(57)【特許請求の範囲】
【請求項１】
物理メモリに記憶されたパックされたレジスタであって、パックされたレジスタのビットは物理レジスタファイルの少なくとも第１の物理レジスタに記憶される、パックされたレジスタにアクセスする方法であって、
前記パックされたレジスタの状態を記憶することと、
命令が前記パックされたレジスタのレジスタのアクセスを含む状況において、前記パックされたレジスタの状態に基づいて前記レジスタに直接アクセスできるか否かを決定することと、
前記レジスタに直接アクセスできない状況において、前記レジスタに直接アクセス可能になる動作を行うことと、を含み、
前記動作は、前記アクセスの前に、第２の物理レジスタの前記パックされたレジスタのビットの少なくとも一部を記憶する少なくとも１つのマイクロ操作（ｕｏｐ）を導入することを含む、
方法。
【請求項２】
前記動作は、少なくとも１つのｕｏｐを導入することと、前記状態を変更することと、前記レジスタの最下位ビット（ＬＳＢ）を物理レジスタのＬＳＢに揃えることと、のうち少なくとも１つを含む、請求項１の方法。
【請求項３】
前記アクセスは、読込み操作又は書込み操作を含み、前記動作は、前記レジスタを直接読込み又は書込み可能にする、請求項１の方法。
【請求項４】
履歴を生成するために、前記動作及び少なくとも１つの次の動作と、前記レジスタのパッキング及び前記レジスタの少なくとも１つの次のパッキングと、前記状態及び前記レジスタの少なくとも１つの次の状態と、のうち少なくとも１つを追跡することと、
次の動作が必要であるか否か、又は、どのような次の動作が必要であるかを、前記履歴に基づいて決定することと、をさらに含む、請求項１の方法。
【請求項５】
前記状態は、前記パックされたレジスタが単一の物理レジスタに記憶されているか否かと、前記パックされたレジスタが２つ以上の物理レジスタに記憶されているか否かと、前記記憶されたパックされたレジスタを少なくとも１つの物理レジスタに配置する指示と、のうち少なくとも１つを示す、請求項１の方法。
【請求項６】
複数の論理レジスタ名（ＬＲＮ）の各々は、１つ以上の前記パックされたレジスタに関連し、各ＬＲＮは、物理レジスタに関連する物理レジスタ名（ＰＲＮ）にマッピングされる、請求項１の方法。
【請求項７】
前記レジスタは、前記レジスタの最下位ビット（ＬＳＢ）が物理レジスタのＬＳＢに揃っている場合に直接アクセス可能である、請求項１の方法。
【請求項８】
前記レジスタは、物理メモリに記憶された前記レジスタのビットにアクセスする前に当該ビットを移動することなく前記命令によってアクセス可能である場合に、直接アクセス可能である、請求項１の方法。
【請求項９】
前記パックされたレジスタの１つに対する書込みの後に、前記パックされたレジスタ内のより多くのレジスタを読取り可能である、請求項１の方法。
【請求項１０】
物理メモリに記憶されたパックされたレジスタであって、パックされたレジスタのビットは物理レジスタファイルの少なくとも第１の物理レジスタに記憶される、パックされたレジスタにアクセスする装置であって、
前記パックされたレジスタの状態を記憶する回路と、
命令が前記パックされたレジスタのレジスタにアクセスする状況において、前記レジスタに直接アクセスできるか否かを、前記状態に基づいて決定する回路と、
前記レジスタに直接アクセスできない状況において、前記レジスタに直接アクセス可能になる動作を行う回路と、を備え、
前記動作は、前記アクセスの前に、第２の物理レジスタの前記パックされたレジスタのビットの少なくとも一部を記憶する少なくとも１つのマイクロ操作（ｕｏｐ）を導入することを含む、
装置。
【請求項１１】
前記動作は、少なくとも１つのｕｏｐを導入することと、前記状態を変更することと、前記レジスタの最下位ビット（ＬＳＢ）を物理レジスタのＬＳＢに揃えることと、のうち少なくとも１つを含む、請求項１０の装置。
【請求項１２】
履歴を生成するために、前記動作及び少なくとも１つの次の動作と、前記レジスタのパッキング及び前記レジスタの少なくとも１つの次のパッキングと、前記状態及び前記レジスタの少なくとも１つの次の状態と、のうち少なくとも１つを追跡する回路と、
次の動作が必要であるか否か、又は、どのような次の動作が必要であるかを、前記履歴に基づいて決定する回路と、をさらに備える、請求項１０の装置。
【請求項１３】
前記状態は、前記パックされたレジスタが単一の物理レジスタに記憶されているか否かと、前記パックされたレジスタが２つ以上の物理レジスタに記憶されているか否かと、前記記憶されたパックされたレジスタを少なくとも１つの物理レジスタに配置する指示と、のうち少なくとも１つを示す、請求項１０の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１３年１０月２７日に出願された米国仮特許出願第６１／８９６，０９１号の利益を主張し、その内容が引用によって本明細書に組み込まれている。
【０００２】
本発明は、概して電子回路に関し、具体的には、マイクロプロセッサ及びマイクロプロセッシングの方法に関する。
【背景技術】
【０００３】
多くのコンピュータシステムは、浮動小数点数の演算を行うように設計されたハードウェアを有する。かかるハードウェアは、浮動小数点ユニットと呼ばれる場合があり、中央処理装置と一体化することができる。浮動小数点ユニット（ＦＰＵ）は、浮動小数点命令を実行するのに用いられることができ、浮動小数点命令は、浮動小数点アーキテクチャレジスタのセットを参照することができる。
【０００４】
例えばＡＲＭ  ｖ７等のいくつかの命令セットのアーキテクチャ（ＩＳＡｓ）は、浮動小数点アーキテクチャレジスタが高密度にパック化されるように構成することができる。例えば、アーキテクチャレジスタは、１つのビット空間が、１つの四倍精度（Ｑ）レジスタ、２つの倍精度（Ｄ）レジスタ、又は、４つの単精度（Ｓ）レジスタとして参照されるように構成することができる。図１Ａは、この方法で構成された例示的なビット空間を示す図である。図１Ａでは、１２８ビット空間であってもよく、例えば、１つの１２８ビットＱレジスタと、２つの６４ビットＤレジスタと、４つの３２ビットＳレジスタと、を有する。
【０００５】
図１Ｂは、かかるビット空間の１６セットの例を示す図であり、全部で１６のＱレジスタ（Ｑ０〜Ｑ１５）と、３２のＤレジスタ（Ｄ０〜Ｄ３１）と、３２のＳレジスタ（Ｓ０〜Ｓ３１）と、を有する。図１Ｂの例では、（全部で８０のアーキテクチャレジスタについて）、第１の８つのＱレジスタ（Ｑ０〜Ｑ７）のみがＳレジスタとパックされているが、概念上、全てのＱレジスタがＳレジスタとパックされてもよいことに留意されたい。（全幅レジスタを含む）所定の全幅レジスタにパックされたアークテクチャレジスタのグループは、「４倍」として呼ばれてもよいし、最大レジスタの名前で呼ばれてもよい。
【０００６】
いくつかの実施形態においては、浮動小数点命令をリネーミングしてかかる命令のアーキテクチャレジスタオペランドを物理レジスタにマッピングするレジスタを使用することが望ましい場合がある。レジスタリネーマは、このような目的のために実装され得る。レジスタリネーミングは、浮動小数点命令の実行を非直列化するために使用し得る。２つの命令（偽の依存関係（ｆａｌｓｅ  ｄｅｐｅｎｄｅｎｃｙ）が存在する）により参照される同一のアーキテクチャレジスタを異なる物理レジスタにマッピングすることによって（すなわち、その命令により参照されるアーキテクチャレジスタを「リネーミング」することによって）、例えば、同一のアーキテクチャレジスタを参照することによる危険が発生し得る複数の命令が、同時又は順不同に実行され得る。
【発明の概要】
【課題を解決するための手段】
【０００７】
いくつかの実施形態は、パックされたレジスタにアクセスする方法を提供する。パックされたレジスタの状態が記憶される。この状態に基づいて、パックされたレジスタのレジスタに命令がアクセスするという状況で、レジスタに直接アクセスできるか否かが決定される。レジスタに直接アクセスできない状況において、レジスタに直接アクセス可能になる動作が行われる。
【０００８】
いくつかの実施形態は、パックされたレジスタにアクセスするように構成された装置を提供する。回路は、パックされたレジスタの状態を記憶する。回路は、この状態に基づいて、パックされたレジスタのレジスタに命令がアクセスするという状況で、レジスタに直接アクセスできるか否かを決定する。回路は、レジスタに直接アクセスできない状況において、レジスタに直接アクセス可能になる動作を行う。
【０００９】
添付する以下の図面とともに説明される例示的な方法が与えられる以下の記載から、より詳細な理解が得られるであろう。
【図面の簡単な説明】
【００１０】
【図１Ａ】例示的な高密度のパックされたレジスタのブロック図である。
【図１Ｂ】複数の高密度のパックされたレジスタを表すブロック図ある。
【図２】１つ以上の開示された実施形態が実装され得る例示的な装置のブロック図である。
【図３】命令を復号し、且つ、アライジング効果を操作する例示的な回路を示すブロック図である。
【図４】命令を復号し、且つ、アライジング効果を操作する例示的な方法を示すフロー図である。
【発明を実施するための形態】
【００１１】
図２は、１つ以上の開示された実施形態を実装し得る例示的な装置１００のブロック図である。装置１００は、例えば、コンピュータ、ゲーミングデバイス、ハンドヘルド装置、セットトップボックス、テレビ受信機、携帯電話又はタブレット型コンピュータで構成し得る。装置１００は、プロセッサ１０２と、メモリ１０４と、記憶装置１０６と、１つ以上の入力装置１０８と、１つ以上の出力装置１１０と、を備えている。さらに、装置１００は、オプションとして、入力ドライバ１１２及び出力ドライバ１１４を備えてもよい。装置１００が、図１に示されていない他のコンポーネントを備え得ることが理解されるであろう。
【００１２】
プロセッサ１０２は、中央処理装置（ＣＰＵ）、グラフィック処理装置（ＧＰＵ）、同一のチップに配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含んでもよい。各プロセッサコアは、ＣＰＵ又はＧＰＵであってもよい。メモリ１０４は、同一のチップ上にプロセッサ１０２として配置されてもよいし、プロセッサ１０２から離れて配置されてもよい。メモリ１０４は、揮発性メモリ又は不揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ又はキャッシュ）を含んでもよい。メモリ１０４は、１つ以上の単一の装置として実装されてもよいし、複数の単一のメモリ（図示省略）を含んでもよいことに留意されたい。例えば、装置１００は、この明細書でさらに説明するように、ＣＰＵメモリ及びＧＰＵメモリ（図示省略）の両方を含んでもよい。
【００１３】
記憶装置１０６は、固定型の記憶装置又は可搬型の記憶装置（例えば、ハードディスク装置、固定型のドライブ、光ディスク又はフラッシュドライブ）を含んでもよい。入力装置１０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロホン、加速度計、ジャイロスコープ、生物測定スキャナ又はネットワーク接続装置（例えば、無線ＩＥＥＥ８０２信号を送信及び／又は受信するための無線ローカルエリアネットワークカード）を含んでもよい。出力装置１１０は、ディスプレイ、スピーカ、プリンタ、触角フィードバック装置、１つ以上の発光体、アンテナ又はネットワーク接続装置（例えば、無線ＩＥＥＥ８０２信号を送信及び／又は受信するための無線ローカルエリアネットワークカード）を含んでもよい。
【００１４】
入力ドライバ１１２は、プロセッサ１０２及び入力装置１０８と通信し、入力装置１０８からの入力をプロセッサ１０２が受信できるようにする。出力ドライバ１１４は、プロセッサ１０２及び出力装置１１０と通信し、プロセッサ１０２が出力装置１１０に出力を送信できるようにする。入力ドライバ１１２及び出力ドライバ１１４は、オプションの要素であること、及び、装置１００は、入力ドライバ１１２及び出力ドライバ１１４を備えていない場合でも同様の方法で動作することに留意されたい。
【００１５】
説明を簡潔にするため、集積回路設計、キャッシング、メモリ操作、メモリコントローラ、及び、システムの他の機能的態様（及びシステムの要素の個々の操作）に関する従来技術は、この明細書では詳細に記載されていない。さらに、この明細書に含まれる様々な図面に示された接続線は、例示の機能的関係及び／又は様々な要素間の物理的結合を表わすことを意味している。多くの代替若しくは追加の機能的関係又は物理的結合は、本発明の実施形態において表し得ることに留意されたい。さらに、特定の専門用語は、参照のみの目的のために下記の説明において使用することができ、したがって限定する意図ではない。構成を参照する用語「第１」、「第２」及び他の数値用語は、文脈によって明確に指示されない限り、連続又は順序を意味するものではない。
【００１６】
下記の説明は、互いに「接続」又は「結合」されている要素、ノード、機能に言及する。この明細書で使用されているように、明確に説明されていない限り、「接続」は、１つの要素／ノード／機能が別の要素／ノード／機能に直接結合され（又は直接通信する）ことを意味し、必ずしも機械的に接続されている訳ではない。同様に、明確に説明されていない限り、「結合」は、１つの要素／ノード／機能が別の要素／ノード／機能に直接結合又は間接結合され（又は直接通信若しくは間接通信する）ことを意味し、必ずしも機械的に接続されている訳ではない。したがって、その特徴は要素の１つの例示配列を示してもよいが、追加の介在する要素、装置、機能、又は、要素が説明された本発明の実施形態において提示されてもよい。
【００１７】
少なくとも１つの例示の実施形態が下記の説明において提示されるが、非常に多くのバリエーションが存在することが認められるべきである。この明細書における例示の実施形態又は複数の実施形態は、いかなる場合においても、特許が請求された範囲、応用性又は構成を限定するものではない。むしろ、上記の詳細な説明は、記載された実施形態又は複数の実施形態を実装するための指針を当業者に提供するであろう。特許請求によって定義された範囲から逸脱することなく、様々な変更が要素の機能及び配列においてなされ得る。
【００１８】
物理レジスタにおいて図１Ａ及び図１Ｂに関して示されるように、高密度のパックされたレジスタを記憶することにより、いくつかのプロセッサアーキテクチャにおいて問題となるエイリアシング効果が発生し得る。例えば、異なるサイズの高密度のパックされたアーキテクチャレジスタが全て同じサイズを有する物理レジスタにマッピングされた場合には、この明細書でさらに説明するように、マッピングを訂正するために採用される追加の測定がない限り、書込まれ又は読込まれる不適正なデータにエイリアシング効果が生じる結果となり得る。さらに、プロセッサアーキテクチャのマイクロ操作（ｕｏｐ）のストリームは、全てのアーキテクチャレジスタが独立して読出し可能且つ書込み可能であるように要求できる。例えば、Ｓ３への書込みに続くＱ０の読出しのために、Ｓ３への書込みの結果を含む値を戻すことが必要となり得る。また、プロセッサアーキテクチャは、全ての操作の最下位ビット（ＬＳＢ）がデータパスのＬＳＢと揃うことを要求し得る。したがって、（図１Ａ及び図１Ｂの例におけるＱ０のビット９６と揃った）Ｓ３を読出すために、物理レジスタに記憶されたＳ３データが未だそのように揃っていない場合には、Ｓ３データを先ずビット０に揃えることが必要になり得る。
【００１９】
このような問題を解決するために、全幅のアーキテクチャレジスタ（すなわち、４倍）内にパックされた全てのレジスタのレジスタ状態が記憶され得る。全幅のアーキテクチャレジスタは、全体的にパックされたレジスタとして４倍が記憶されているかどうか、又は、４倍が異なる物理レジスタに個別に（又は同じ物理レジスタ若しくは両方のレジスタに順不同に）記憶されている２つのレジスタ（図１Ａ及び図１Ｂの例においてＤレジスタ若しくは６４ビットレジスタ）、４つのレジスタ（図１Ａ及び図１Ｂの例においてＳレジスタ若しくは３２ビットレジスタ）又は３つのレジスタ（例えば、１つのＤレジスタ及び２つのＳレジスタ）に分割されているかどうかを表す。
【００２０】
命令が、全幅のアーキテクチャレジスタ又はその中にパックされた１つのアーキテクチャレジスタにアクセスしようとする場合には、その状態をチェックすることができ、所望のレジスタが単一の物理レジスタから直接アクセスできるか否か、データが異なる物理レジスタから最初にリアセンブルされるべきであるか否か、又は、物理レジスタのデータが再編成されるべきであるか否かを、例えば、物理レジスタに記憶されたデータの一部を、異なるビット位置における新たな物理レジスタに書込むことによって判断する。例えば、命令が、全幅のアーキテクチャレジスタ又はその中にパックされた１つのアーキテクチャレジスタを読取ろうとする場合には、その状態をチェックすることができ、所望のレジスタが単一の物理レジスタから直接アクセスできるか否か、データが異なる物理レジスタから最初にリアセンブルされるべきであるか否か、又は、物理レジスタのデータが再編成されるべきであるか否かを、例えば、物理レジスタに記憶されたデータの一部を、異なるビット位置における新たな物理レジスタに書込むことによって判断する。また、状態は、他のタイプのアクセス（例えば、書込み等）のためにチェックすることができる。
【００２１】
高密度のパックされたレジスタを独立して読出し且つ書込むことが望ましいプロセッサアーキテクチャにおいては、パックされたレジスタに対応するより大きなレジスタが書込まれた後により小さなレジスタに書き込むことは、より大きなパックされたレジスタのために記憶されたデータの一部だけしか確認できない。したがって、データの残りを保持することが必要になり得る。例えば、Ｑ０が書込まれ、続いてＳ０が書込まれた（新たな物理レジスタに対応する新たな物理レジスタ名（ＰＲＮ）にマッピングされた）場合には、Ｑ０を記憶している物理レジスタのＳ１、Ｓ２及びＳ３に対するデータは、依然として有効であり且つ保持されなければならず、すなわち、Ｑ０を記憶している物理レジスタ全体を上書きすることによっては廃棄されない。パックされたレジスタがどのように物理的に記憶されるかを表わす４倍レジスタＱ０の状態を記憶することにより、パックされたレジスタの各々にアクセスすることが可能になる。この実施例において、いくつかのパックされたレジスタは、物理レジスタから直接アクセスすることができ、いくつかのパックされえたレジスタは、この明細書でさらに説明するように、再編成される物理レジスタに記憶されたビットを新たな物理レジスタにできる限り移動することによって、要求することができる。
【００２２】
リネーミングを容易にするため、論理レジスタ名（ＬＲＮ）が各アーキテクチャレジスタに割り当てられ得る。次に、マッピングは、マッピングが書き込まれる物理レジスタのＬＲＮとＰＲＮとの間に記憶される。ＬＲＮとＰＲＮとの間のマッピングを含むテーブルをレジスタマップと称することができる。
【００２３】
新たな物理レジスタは、書込まれる毎に、（例えば、リネーミングを容易にするために）アーキテクチャレジスタに対して割り当てることができる。この物理レジスタは、データがもはや有効でない場合、その後「廃棄」され「フリーリスト」に戻される（すなわち、読取りのために無効にされ得るとともに、新たなアーキテクチャレジスタにマッピングするために使用することができる）。
【００２４】
表１は、４倍でエイリアス又は「パック」された異なるアーキテクチャレジスタが以前に書込まれた後に、所定のサイズの所定のアーキテクチャレジスタが命令によって読込まれ又は書込まれる場合に生じ得る例示的な問題を記述する表である。表１は、図２及び３のＱ０によってパックされたアーキテクチャレジスタに関して記述されている。表は、４倍内にパックされたアーキテクチャレジスタＱ、Ｄ又はＳが、当該４倍内にパックされた同一又は異なるレジスタＱ、Ｄ若しくはＳが書き込まれた後に読込まれ又は書込まれる場合に生じ得る問題を記述している。
【表１】
0006511462.tif 000002
【００２５】
上述したように、かかる問題を解決するために、各４倍のレジスタ状態を記憶することができる。その状態を追跡するために、各４倍は複数のＬＲＮに対応することができ、各ＬＲＮは物理レジスタに独立してマッピング可能である。独立してマッピング可能なＬＲＮの各々は、１つ以上のパックされたアーキテクチャレジスタを表すことができる。図１Ａ及び図１Ｂの例においては、各アーキテクチャレジスタは、４つのＬＲＮを有することができる。
【００２６】
第１のＬＲＮは、全Ｑレジスタ、下位Ｄレジスタ（これはＱレジスタに揃っている）及び最下位Ｓレジスタ（これはＱレジスタ及び下位Ｄレジスタに揃っている）の何れかを表すことができる。図１Ａの例において、これらのレジスタは、Ｑ０、Ｄ０及びＳ０に対応し、第１のＬＲＮをＱ０／Ｄ０／Ｓ０と称することができる。第２のＬＲＮは、第２のＳレジスタのみを表すことができる。図１Ａの例において、これはＳ１に対応し、第２のＬＲＮをＳ１と称することができる。第３のＬＲＮは、上位Ｄレジスタ及び第３のＳレジスタをともに表すことができる。図１Ａの例において、これらはＤ１及びＳ２に対応し、それらは揃っており、第３のＬＲＮをＤ１／Ｓ２と称することができる。第４のＬＲＮは、第４のＳレジスタのみを表すことができる。図１Ａの例において、これはＳ３に対応し、第４のＬＲＮをＳ３と称することができる。
【００２７】
ＬＲＮの例示的なセット、例えば、図１ＢのアーキテクチャレジスタＱ０〜Ｑ３（及びこれらに対応するパックされたＤ及びＳレジスタ）は、下記の表２に示される。
【表２】
0006511462.tif 000003
【００２８】
各ＬＲＮは、独立してＰＲＮにマッピングされ得る。ＰＲＮに対するＬＲＮのマッピングを示すレジスタマップの例は、下記の表３に示される。
【表３】
0006511462.tif 000004
【００２９】
ＬＲＮ−ＰＲＮマッピングの状態は、所定のＬＲＮをアクセスすることにより読取られるデータが有効であることが確かではないかもしれないので、上記したエイリアシング問題を処理するために追跡しなければならない。各ＬＲＮ−ＰＲＮマッピングの状態は、４倍毎に追跡することができる（すなわち、その状態は互いにエイリアスされ又はパックされるＬＲＮの全てに関係する）。４倍は、他のレジスタが内部でパックされるＱレジスタの名前によって参照することができる。例えば、Ｑ０に関する状態は、ＬＲＮＱ０／Ｄ０／Ｓ０、Ｓ１、Ｄ１／Ｓ２及びＳ３とＰＲＮｓとの間のＬＲＮ−ＰＲＮマッピングの状態を追跡することができる。したがって、例えば（この明細書においてさらに説明するように）Ｑ０が状態Ｄ０／Ｄ１である場合には、その状態がこれらのアーキテクチャレジスタに対するＬＲＮの全てに関係するので、アーキテクチャレジスタＱ０、Ｄ０、Ｄ１、Ｓ０、Ｓ１、Ｓ２又はＳ３に対する全ての読取り又は書込みが復号期間中にこの状態を考慮する必要があることを、その状態が示すことができる。表４は、ＬＲＮ−ＰＲＮマッピングに対する８つの例示的なレジスタ状態を示す表である。
【表４】
0006511462.tif 000005
【００３０】
マッピング状態の追跡を維持するために、各４倍のためにビットを記憶することができる。これらのビットは、復号装置（ＤＥ）又はプロセッサの任意の他の適切な装置によって追跡され及び／又は記憶され得る。例えば、３ビットは、各４倍におけるＤＥ内の装置によって記憶され且つ追跡されて、８つの状態を追跡することができる。８つの状態を使用する例では、表５に記載されたビット符号化の例を用いて追跡することができる。
【表５】
0006511462.tif 000006
【００３１】
表４及び表５に記載された状態は例示であることに留意されたい。例えば、４倍、Ｄ０／Ｄ１及びＳ０／Ｓ１／Ｓ２／Ｓ３の状態は、エイリアシング問題を処理するために重要であり得る。しかしながら、他の状態、すなわち、Ｑ／Ｄ１、Ｄ０／Ｄ１Ｕ、Ｄ０／Ｓ２／Ｓ３及びＳ０／Ｓ１／Ｄ１は、最適化の目的（例えば、これらの追加状態が追跡される場合に、物理レジスタにおけるデータに要求されるより少ない操作）を実行するために使用することができる。その方法は、不特定多数の最適化のために、例えば、状態の数を増加することにより、又は、異なる状態を用いることにより、さらに拡張することができることが留意され且つ理解されるであろう。そのような追加の又は異なる状態は、Ｑ０／Ｄ１／Ｓ３、Ｑ０／Ｓ３、Ｑ０／Ｓ１、Ｄ０／Ｓ１／Ｄ１、Ｄ０／Ｓ１／Ｓ２／Ｓ３、Ｄ０／Ｓ１／Ｓ２／Ｓ３、Ｄ０／Ｓ１／Ｄ１／Ｓ３、Ｓ０／Ｓ１Ｕ／Ｄ１、Ｄ０／Ｓ２／Ｓ３Ｕ、Ｓ０／Ｓ１Ｕ／Ｓ２／Ｓ３、Ｓ０／Ｓ１／Ｓ２／Ｓ３Ｕ、Ｓ０／Ｓ１Ｕ／Ｓ２／Ｓ３Ｕ等を含むことができ、それらはこの明細書において説明される原理から導かれる。
【００３２】
物理レジスタに記憶されたデータを操作しなければならず、（ＬＲＮ−ＰＲＮマッピング状態及びエイリアシングレジスタに対するアクセスのタイプ及びサイズに基づいて）命令を実行する際にデータの有効性を維持することを決定する場合には、追加の「フィックスアップ（ｆｉｘｕｐ）」マイクロ操作（ｕｏｐ）をｕｏｐストリーム又は命令に対して復号化されたｕｏｐｓに先行するバッファの中に導入することによって、物理レジスタのデータを操作（例えば、物理レジスタの部分から異なる物理レジスタの部分に移動）することができる。フィックスアップｕｏｐｓは、ＤＥ又はプロセッサの任意の他の適切な構成によって決定及び／又は導入することができる。いくつかのケースにおいて、アーキテクチャレジスタの読取り又は書込みを有効にするために、この明細書においてさらに説明するように、他の選択肢としてマッピング状態を変更することも必要となり得る。
【００３３】
フィックスアップｕｏｐｓは、命令に対するｕｏｐｓの中に又は先行して導入することができ、様々な構成の中にレジスタをパックし及び／又はパック解除する。これらのｕｏｐｓ又はその組み合わせは、表６に記載された１つ以上の例のフィックスアップｕｏｐｓを含むことができる。これらのｕｏｐｓの名称は任意であることに留意されたい。物理レジスタのビットが１２８ビットの４倍に関して記載されているが、他のアーキテクチャに対応するように変更して他のビット幅が使用できることも留意されたい。
【表６】
0006511462.tif 000007
【００３４】
これらのフィックスアップｕｐｏｓの１つ以上を導入すること、及び／又は、４倍の状態を変更することが必要であるか否かを決定するため、プロセッサの適切な部分は、命令のオペランドアーキテクチャレジスタの中及びリネームされた他の命令の中の任意のエイリアシングをチェックし、任意のかかるレジスタの状態をチェックし、その状態に基づいてかかるレジスタの有効な読取り又は書込みのために任意のｕｏｐｓが命令に対して導入されるべきか否かを決定し、任意のレジスタ状態が変更されるべきか否かを決定する。これらの決定は、例えば、復号装置又は復号装置からの復号された命令のオペランドレジスタに関する情報を受信するエイリアシング論理（ｌｏｇｉｃ）によって行うことができる。しかしながら、これらの決定は、任意の適切な構成によって行われ得ることに留意されたい。
【００３５】
表７〜１３は、状態遷移及び４倍の現在の状態（すなわち、アーキテクチャレジスタがその中でパックされる４倍におけるＬＲＮ−ＰＲＮパッキングの状態）に基づいてアーキテクチャレジスタに対する読込み又は書込みのために必要となり得るｕｏｐ導入の例を示す表である。状態名は、Ｑ０について表されるが、この明細書においてさらに説明するように、任意のパックされたアーキテクチャレジスタＱ０〜Ｑ１５の変化に関係する。
【表７】
0006511462.tif 000008
【表８】
0006511462.tif 000009
【表９】
0006511462.tif 000010
【表１０】
0006511462.tif 000011
【表１１】
0006511462.tif 000012
【表１２】
0006511462.tif 000013
【表１３】
0006511462.tif 000014
【００３６】
各４倍における状態を追跡するため、レジスタ状態テーブルを管理することができる。表１４は、アーキテクチャレジスタＱ０〜Ｑ３によってパックされたレジスタの状態の例を表すレジスタ状態テーブルを示す表である。
【表１４】
0006511462.tif 000015
【００３７】
図３は、上記したように、命令を復号化し、エイリアシング効果を処理する回路３００の例を示すブロック図である。回路３００は、命令抽出論理回路３０５と、命令復号装置３１０，３１５，３２０と、エイリアシング及び状態追跡論理回路３２５と、ｕｏｐバッファ３３０と、を備えている。回路３００は、プロセッサ１０２（図２）等のプロセッサの一部であってもよい。これらの装置は、単なる一例であり、いくつかの実施例において適宜に代替又は省略することができることに留意されたい。
【００３８】
抽出論理回路３０５は、命令のストリームを受信し、ストリームからＮ個の命令（本例では浮動小数点命令）を抽出し、Ｎ個の復号装置にその命令をロードする。３つの復号装置３１０，３１５，３２０が示されているが、復号装置及び命令の数は、任意に増加又は減少することができることに留意されたい。
【００３９】
抽出論理回路３０５は、命令取得装置（図示せず）から又は任意の他の適切な入力元から命令のストリームを受信することができる。次に、抽出論理回路３０５は、抽出された命令を復号装置３１０，３１５，３２０にロードすることができる。３つの抽出された命令を復号化するために３つの復号装置のみが示されているが、基本的には、任意の数の復号装置が、任意の数の抽出された命令を復号化するために使用することができる。
【００４０】
復号装置３１０は、命令ＩＮＳＴ１を実行するために１つ以上のｕｏｐｓに復号化して、復号化されたｕｏｐｓをｕｏｐバッファ３３０にロードする。いくつかの実施例（図示省略）では、ｕｏｐバッファ３３０を省略することができ、ｕｏｐｓは、下流の実行装置３３５にそのまま発送され得ることに留意されたい。また、復号装置３１０は、ＩＮＳＴ１のオペランドレジスタに関する情報を論理回路３２５に送信する。復号装置３１５は、命令ＩＮＳＴ２を実行するために１つ以上のｕｏｐｓに復号化して、復号化されたｕｏｐｓをｕｏｐバッファ３３０にロードする。また、復号装置３１５は、ＩＮＳＴ２のオペランドレジスタに関する情報を論理回路３２５に送信する。復号装置３２０は、命令ＩＮＳＴ３を実行するために１つ以上のｕｏｐｓに復号化して、復号化されたｕｏｐｓをｕｏｐバッファ３３０にロードする。また、復号装置３２０は、ＩＮＳＴ３のオペランドレジスタに関する情報を論理回路３２５に送信する。復号装置３１５，３２０，３２５は、３つの命令を同時に復号化することができるが、他の実施例では非同時に復号化することができることに留意されたい。
【００４１】
論理回路３２５は、ＩＮＳＴ１の各オペランドレジスタに対するＬＲＮ−ＰＲＮマッピングの状態をチェックして、それが有効であるか否かを決定する。マッピングの状態が無効である場合には、論理回路３２５は、ｕｏｐｓが導入されるべきであるか否かを決定し、且つ、状態の変更が必要であるか否かを決定する。ｕｏｐの導入が必要な場合には、論理回路３２５は、ＩＮＳＴ１に対する復号化されたｕｏｐｓに先立って、適切にフィックスアップｕｏｐｓをｕｏｐバッファ３３０に導入する。上述したように、（図示しない）いくつかの実施例では、ｕｏｐバッファ３３０を省略することができ、ｕｏｐｓは、ＩＮＳＴ１に対する復号化されたｕｏｐｓに先立ってそのまま導入されて、下流の実行装置３３５に送出され得ることに留意されたい。状態の変更が必要な場合には、論理回路３２５は、４倍に対するマッピングの状態を更新する。また、論理回路３２５は、ＩＮＳＴ２及びＩＮＳＴ３に対して同じタスクを実行する。
【００４２】
ＩＮＳＴ１、ＩＮＳＴ２及びＩＮＳＴ３に対する復号化されたｏｐｓの全てがバッファ３３０にロードされた後、任意の要求されたフィックスアップｏｐｓが導入され、状態が要求に応じて更新され、ｕｏｐバッファ３３０におけるｕｏｐｓの待ち行列が、実行のために１つ以上の実行装置３３５に送出され得る。上述したように、ｕｏｐバッファを使用しない実施例（図示せず）においては、ｕｏｐｓは、既に下流の実行装置３３５に送出されている場合がある。
【００４３】
図４は、上述したように、命令を復号化する方法の例を示すフロー図４００である。
【００４４】
ステップ４０５において、任意の命令が復号化するのに有効か否かが決定される。命令が復号化するのに有効である場合には、ステップ４１０において、ｕｏｐｓに復号化される。この決定は復号装置によって行われ、ｕｏｐｓを、図３に関して説明されたように記憶することができる。
【００４５】
ステップ４１５において、命令の任意のオペランドレジスタが、有効なＬＲＮ−ＰＲＮ状態マッピングのために未だチェックされていないかどうかが決定される。そうである場合には、各レジスタの状態がステップ４２０においてチェックされる。これらの決定は、図３に関して説明されたように、オペランドレジスタに関する情報を受信するエイリアシング論理回路によって行われ得る。
【００４６】
いくつかの実施例（図示省略）において、ＬＲＮ−ＰＲＮ状態マッピングの有効性を、ｕｏｐｓの復号化の前又は同時にチェックすることができる。
【００４７】
レジスタ状態が有効でないと決定された場合には、ステップ４２５において、フィックスアップｕｏｐｓを導入する必要があるか否かが決定される。この決定は、エイリアシング論理回路によって行われる。フィックスアップｕｏｐｓを導入する必要があると決定された場合には、ステップ４３０において、フィックスアップｕｏｐｓが導入される。フィックスアップｕｏｐｓは、命令に対する復号化されたｕｏｐｓに先立って、ｕｏｐ待ち行列に導入され、図３に関して説明されたように記憶され得る。
【００４８】
ステップ４２５においてｕｏｐｓを導入することが決定されたか否かに応じて、ステップ４３５においてＬＲＮ−ＰＲＮマッピングの状態を変更する必要があるか否かも決定される。そうである場合には、ステップ４４０において、マッピングが更新される。何れかのイベントにおいて、フローはステップ４１５に戻る。
【００４９】
有効な状態に関してチェックすべきレジスタがもはや存在しない場合には、ステップ４４５において、復号化され且つ導入されたｕｏｐｓが、実行のために発送され得る。
【００５０】
３つの浮動小数点命令の並行復号化の下記の実施例は、この明細書において説明される基本を示し、図１〜４に関して説明された構成及び方法を用いて実行することができる。しかしながら、多くの修正及び加工が可能であり得ることに留意されたい。例えば、各４倍におけるＬＲＮ−ＰＲＮマッピングの初期状態（すなわち、レジスタ状態）は、表１５によって示される。この例では、４つの４倍のみが使用されているので、４つの状態のみが示されている。
【表１５】
0006511462.tif 000016
【００５１】
ＬＲＮ−ＰＲＮマッピングの初期状態（すなわち、レジスタ状態）は、表１６によって示される。
【表１６】
0006511462.tif 000017
【００５２】
物理レジスタファイル（ＰＲＦ）の初期の内容は、表１７によって示される。
【表１７】
0006511462.tif 000018
【００５３】
この実施例において復号化される３つの例示的な浮動小数点命令は以下の通りである。
ＩＮＳＴ１：Ａｄｄ  Ｑ０＝Ｑ１＋Ｑ２
ＩＮＳＴ２：Ｓｕｂ  Ｄ０＝Ｄ１−Ｄ２
ＩＮＳＴ３：Ｍｕｌ  Ｑ３＝Ｑ０×Ｑ１
【００５４】
この実施例では、命令は、図３に示すように、復号装置３１０，３１５，３２０によって並行して復号化される。しかしながら、他の実施例においては、命令は、順次又は順不同に復号化され得ることに留意されたい。
【００５５】
復号装置３１０は、ＩＮＳＴ１を復号化して、ＩＮＳＴ１に対するｕｏｐｓを後の実行に備えて下流のバッファ３３０に送り込む。また、復号装置３１０は、情報を論理回路３２５に送信して、そのオペランドがレジスタＱ０、Ｑ１及びＱ２であることを通知する。論理回路３２５は、アーキテクチャレジスタＱ０、Ｑ１及びＱ２が互いにエイリアスされていないことを検出する。したがって、ｕｏｐｓは、ＩＮＳＴ１に対するｕｏｐｓに先立って導入される必要がなく、レジスタ状態が変更される必要はない。
【００５６】
復号装置３１５は、ＩＮＳＴ２を復号化して、ＩＮＳＴ１に対するｕｏｐｓに続いて、ＩＮＳＴ２に対するｕｏｐｓを、後の実行に備えて下流のバッファ３３０に送り込む。また、復号装置３１５は、情報を論理回路３２５に送信して、そのオペランドがレジスタＤ０、Ｄ１及びＤ２であることを通知する。
【００５７】
論理回路３２５は、レジスタＤ２がＱ１によってエイリアスされていることを検出する。Ｑ１は状態Ｑである。また、論理回路３２５は、レジスタのＤ１の読込み及びＤ０の書込みがＱ０によってエイリアシングされていることを検出する。Ｑ０は状態Ｑである。
【００５８】
Ｄ２は状態ＱにおいてＱ１から読取ることができる。このことは、Ｄ２がＱ１の下位の２倍であり、Ｑ１が状態Ｑである場合にＤ２の読取りが有効になるからである。したがって、論理回路３２５は、ＩＮＳＴ２に対するｕｏｐｓに先立っていかなるｕｏｐｓをも導入せず、このエイリアシングに対してレジスタ状態を変更することはない。
【００５９】
Ｑ０が状態Ｑである場合には、Ｄ１の読取りは有効ではない。したがって、Ｄ１を読取るためには、ｆｋｒｅｇｑ２ｄ  Ｄ１，Ｑ０の導入、及び、ＱからＱ０／Ｄ１へのＱ０の状態遷移が必要である。したがって、論理回路３２５は、ＩＮＳＴ２に対するｕｏｐｓに先立ってこのｕｏｐを待ち行列に導入し、Ｑ０に対する状態ビットを更新して状態Ｑ０／Ｄ１に合わせる。このことがなされるのは、Ｄ１が上位の倍であり、Ｑ０が状態Ｑである場合には、Ｄ１が物理レジスタのＬＳＢに揃わないからである。
【００６０】
導入されたｕｏｐのｆｋｒｅｇｑ２ｄ  Ｄ１，Ｑ０は、Ｑ０を記憶する物理レジスタの上位の２倍を取ることになり（すなわち、上位６４ビット−Ｄ１に対するデータ）、このデータを新たな物理レジスタの下位の２倍に書込む。Ｄ１は、このｕｏｐが実行された後に新たな物理レジスタにマッピングされて、Ｄ１に対するデータが物理レジスタのＬＳＢに揃うことになるので、有効に読取ることができる。このｕｏｐは、そのＰＲＮをフリーリストに戻さず、元のデータが元の物理レジスタに残ることに留意されたい。
【００６１】
このパッキング解除の後、（Ｑ０にパックされた全てのアーキテクチャレジスタを表す）Ｑ０の状態は、Ｑ／Ｄ１に変更され、４倍状態に対して有効であろう読取りがなおも有効であることを表示するが（すなわち、このデータは元の物理レジスタに今まで通り残るが）、Ｄ１の読取りが現在もなお有効であることは表示しない。なぜならば、Ｄ１は、新たな物理レジスタにマッピングされるからである。
【００６２】
Ｄ０は、Ｑ０が状態Ｑ／Ｄ１である場合には、いかなるｕｏｐｓも導入することなく書込まれ得る。しかしながら、書込みの後には、Ｄ０は、新たな物理レジスタにマッピングされ、Ｄ１は、他の物理レジスタにおいて有効な読取りのためにそのまま使用できる。したがって、Ｑ０は、もはや直接には読み取ることができないので、Ｑ０の状態を、Ｑ／Ｄ１からＤ１／Ｄ０に更新しなければならない。このため、論理回路３２５は、Ｑ０に対する状態ビットを更新して状態Ｄ１／Ｄ０に合わせる。
【００６３】
この点でのレジスタ状態は、表１８に反映されている。
【表１８】
0006511462.tif 000019
【００６４】
復号装置３２０は、ＩＮＳＴ３を復号化して、ＩＮＳＴ３に対するｕｏｐｓに続いて、ＩＮＳＴ２に対するｕｏｐｓを、後の実行に備えて下流のバッファ３３０に送り込む。また、復号装置３２０は、情報を論理回路３２５に送信して、そのオペランドがレジスタＱ３、Ｑ０及びＱ１であることを通知する。論理回路３２５は、レジスタＱ０がＤ０及びＤ１によってエイリアスされていることを検出する。
【００６５】
Ｑ０は状態Ｄ０／Ｄ１であり、この状態ではＱ０を直接読取ることができない。これは、Ｄ０及びＤ１レジスタが、異なる物理レジスタにマッピングされているからである。Ｑ０を読取るためには、ｕｏｐｓを導入することによって状態が変更されなければならない。したがって、論理回路３２５は、ＩＮＳＴ３に対するｕｏｐｓに先立って、２つの連続したｕｏｐｓを導入する。第１のｕｏｐ（ｆｋｒｅｃｌａｉｍｐｒｎ  Ｄ１）は、Ｄ１が再びマッピングされる物理レジスタをフリーリストに置くが、レジスタマップにマッピングされたままにする。これは、第２のｕｏｐのための準備の段階である。第２のｕｏｐ（ｆｋｒｅｇｄ２ｑ  Ｑ０、Ｄ０、Ｄ１）は、Ｑ０に対して新たな物理レジスタを割り当て、Ｄ０にマッピングされた物理レジスタから新たな物理レジスタの下位の２倍に下位の２倍を書き込み、Ｄ１にマッピングされた物理レジスタから新たな物理レジスタの上位の２倍に下位の２倍を書き込む。このことは、新たなレジスタに４倍を「再度組み立てて（ｒｅａｓｓｅｍｂｌｅ）」、Ｑ０を読取ることを有効にする。したがって、Ｑ０にパックされたレジスタに関する状態は、次にＱに変更される。（図示省略した）いくつかの実施例において、ｆｋｒｅｃｌａｉｍｐｒｎ  Ｄ１  ｕｏｐを省略でき、その状態をＱ／Ｄ１に変更することができ、マッピングされたＤ１に対するＰＲＮを維持することに留意されたい。ｆｋｒｅｃｌａｉｍｐｒｎ  ｕｏｐｓは、例えば表６に示すように、第２のフィックスアップｕｏｐ（ここでは、ｆｋｒｇｄ２ｑ）によって自動的に実行され得ることに留意されたい。
【００６６】
この点でのレジスタ状態は、表１９に反映されている。
【表１９】
0006511462.tif 000020
【００６７】
命令の復号化、ｕｏｐｓの導入、及び／又は、レジスタ状態の適宜の変更の後の命令ｕｏｐｓの待ち行列は以下の通りである。
１）Ａｄｄ  Ｑ０＝Ｑ１＋Ｑ２に関するｕｏｐｓ
２）ｆｋｒｅｇｑ２ｄ  Ｄ１，Ｑ０に関するｕｏｐ
３）Ｓｕｂ  Ｄ０＝Ｄ１−Ｄ２に関するｕｏｐｓ
４）ｆｋｒｅｃｌａｉｍｐｒｎ  Ｄ１に関するｕｏｐ
５）ｆｋｒｅｇｄ２ｑ  Ｑ０，Ｄ１に関するｕｏｐ
６）Ｍｕｌ  Ｑ３＝Ｑ０×Ｑ１に関するｕｏｐｓ
【００６８】
したがって、命令が復号化されると、フィックスアップｕｏｐｓが導入され、状態が適宜変更され、ｕｏｐｓは、論理回路３２５のレジスタマップ論理によって以下のように処理され得る。
【００６９】
Ａｄｄ  Ｑ０＝Ｑ１＋Ｑ２に関する復号化されたｕｏｐ又はｕｏｐｓがレジスタマップ論理によって処理された場合には、Ｑ０を記憶するための新たなＰＲＮ（ＰＲＮＥ）は、Ｑ０にパックされたアーキテクチャレジスタ（すなわち、Ｑ０／Ｄ０／Ｓ０、Ｓ１、Ｄ１／Ｓ２及びＳ３）に対するＬＲＮにマッピングされる。この操作も、マッピングを使用してＡｄｄ  ＰＲＮＥ＝ＰＲＮＢ＋ＰＲＮＣに変換される。この操作の後のレジスタマップの状態は、表２０に示される。
【表２０】
0006511462.tif 000021
【００７０】
ｆｋｒｅｇｑ２ｄ  Ｄ１，Ｑ０に対して導入されたｕｏｐ又はｕｏｐｓがレジスタマップ論理によって処理された場合には、Ｄ１を記憶するための新たなＰＲＮ（ＰＲＮＦ）は、Ｄ１にパックされたアーキテクチャレジスタ（すなわち、Ｄ１／Ｓ２及びＳ３）に対するＬＲＮにマッピングされる。この操作も、マッピングを使用してｆｋｒｅｇｑ２ｄ  ＰＲＮＦ＝ＰＲＮＥ［１２７：６４］に変換される。この操作の後のレジスタマップの状態は、表２１に示される。
【表２１】
0006511462.tif 000022
【００７１】
Ｓｕｂ  Ｄ０＝Ｄ１−Ｄ２に対して導入されたｕｏｐ又はｕｏｐｓがレジスタマップ論理によって処理された場合には、Ｄ０を記憶するための新たなＰＲＮ（ＰＲＮＧ）は、Ｄ０にパックされたアーキテクチャレジスタ（すなわち、Ｑ０／Ｄ０／Ｓ０及びＳ１）に対するＬＲＮにマッピングされる。この操作も、マッピングを使用してＳｕｂ  ＰＲＮＧ＝ＰＲＮＦ−ＰＲＮＣに変換される。この操作の後のレジスタマップの状態は、表２２に示される。
【表２２】
0006511462.tif 000023
【００７２】
ｆｋｒｅｃｌａｉｍｐｒｎ  Ｄ１に対して導入されたｕｏｐ又はｕｏｐｓがレジスタマップ論理によって処理された場合には、レジスタマップへの変更がなく、その操作は、マッピングを用いてｆｋｒｅｃｌａｉｍｐｒｎ  ＰＲＮＦに変換される。
【００７３】
ｆｋｒｅｇｄ２ｑ  Ｑ０，Ｄ１に対して導入されたｕｏｐ又はｕｏｐｓがレジスタマップ論理によって処理された場合には、Ｑ０を記憶するための新たなＰＲＮ（ＰＲＮＨ）は、Ｑ０にパックされたアーキテクチャレジスタ（すなわち、Ｑ０／Ｄ０／Ｓ０、Ｓ１、Ｄ１／Ｓ２及びＳ３）に対するＬＲＮにマッピングされる。その操作は、ｆｋｒｅｇｄ２ｑ  ＰＲＮＨ［１２７：０］＝ＰＲＮＦ［６３：０］，ＰＲＮＧ［６３：０］に変換される。この操作の後のレジスタマップの状態は、表２３に示される。
【表２３】
0006511462.tif 000024
【００７４】
Ｍｕｌ  Ｑ３＝Ｑ０×Ｑ１に対して復号化されたｕｏｐ又はｕｏｐｓがレジスタマップ論理によって処理された場合には、Ｑ３を記憶するための新たなＰＲＮ（ＰＲＮＩ）は、Ｑ３にパックされたアーキテクチャレジスタ（すなわち、Ｑ３／Ｄ６／Ｓ１２、Ｓ１３、Ｄ７／Ｓ１４及びＳ１５）に対するＬＲＮにマッピングされる。その操作は、マッピングを用いてＭｕｌ  ＰＲＮＩ＝ＰＲＮＨ×ＰＲＮＢに変換される。この操作後のレジスタマップの状態は、表２４に示される。
【表２４】
0006511462.tif 000025
【００７５】
レジスタマップ論理によって全てのｕｏｐｓが処理された後、それらは実行装置３３５によって実行され、下記のＰＲＦファイルに変化する結果となり得る。
【００７６】
ａ．Ａｄｄ  ＰＲＮＥ＝ＰＲＮＢ＋ＰＲＮＣ（Ａｄｄ  Ｑ０＝Ｑ１＋Ｑ２から）。対応するｏｐｓが実行された後のＰＲＦ状態は、表２５に示される。
【表２５】
0006511462.tif 000026
【００７７】
ｂ．ｆｋｒｅｇｑ２ｄ  ＰＲＮＦ＝ＰＲＮＥ［１２７：６４］（ｆｋｒｅｇｑ２ｄ  Ｄ１，Ｑ０から）。対応するｏｐｓが実行された後のＰＲＦ状態は、表２６に示される。
【表２６】
0006511462.tif 000027
【００７８】
ｃ．Ｓｕｂ  ＰＲＮＧ＝ＰＲＮＦ−ＰＲＮＢ（Ｓｕｂ  Ｄ０＝Ｄ１−Ｄ２から）。対応するｏｐｓが実行された後のＰＲＦ状態は、表２７に示される。
【表２７】
0006511462.tif 000028
【００７９】
ｄ．ｆｋｒｅｃｌａｉｍｐｒｎ  ＰＲＮＦ（ｆｋｒｅｃｌａｉｍｐｒｎ  Ｄ１から）。レジスタがフリーリストに戻されるときに、ｆｋｒｅｃｌａｉｍｐｒｎが終了するまでＰＲＦへの変更がないが、ｆｋｒｅｃｌａｉｍｐｒｎは、その後のｕｏｐによって終了されなければならない。したがって、ＰＲＦ効果が発生するのは、ｆｋｒｅｇｄ２ｑがｆｋｒｅｃｌａｉｍｐｒｎを有するアトミックになった後である。
【００８０】
ｅ．ｆｋｒｅｇｄ２ｑ  ＰＲＮＨ［１２７：０］＝ＰＲＮＦ［６３：０］，ＰＲＮＧ［６３：０］（ｆｋｒｅｇｄ２ｑ  Ｑ０，Ｄ１）。対応するｏｐｓが実行された後のＰＲＦ状態は、表２８に示される。
【表２８】
0006511462.tif 000029
【００８１】
ｆ．Ｍｕｌ  ＰＲＮＩ＝ＰＲＮＨ×ＰＲＮＢ（Ｍｕｌ  Ｑ３＝Ｑ０×Ｑ１から）。対応するｏｐｓが実行された後のＰＲＦ状態は、表２９に示される。
【表２９】
0006511462.tif 000030
【００８２】
いくつかの実施例において、特定のレジスタのパッキングは、長時間にわたって追跡されて、命令の復号化を最適化することができる。かかる追跡は、エイリアシング及び状態追跡論理又はプロセッサの他の適切な部分において行うことができ、ｕｏｐｓのパッキング解除を導入する必要性を最小化するために使用することができる。例えば、命令のストリームが特定のレジスタにアクセスする少数の命令を含み、その方法が当該レジスタの多数の使用と競合する場合には、プロセッサは、当該少数の命令を復号化する方法に変更することができる。特に、命令のストリームが特定のパックされたレジスタにアクセスする少数の命令を含み、使用するレジスタサイズが、そのレジスタが通常アクセスされるサイズと競合する場合には、プロセッサは、競合サイズを有するそれらの命令の符号化方法を変更することができる。
【００８３】
かかる競合は、ＩＳＡの構成の結果として発生し得る。例えば、１つのサイズのロード命令又は記憶命令（例えば、６４ビット）のみを含むＩＳＡにおいては、他の命令は、異なるサイズ（例えば、１２８ビット）としてそれらのロード又は記憶の結果を利用することができる。また、かかる競合は、同様の行為を生じる特定の符号化形式のために発生し得る。例えば、特定のプログラムは、１つのサイズ又は１つのサイズセットにデータをロード又は記憶して、ＩＳＡがこの方法で制約されない場合であっても、異なるサイズ又はサイズセットとして記憶されたデータに対して操作することができる。
【００８４】
かかる場合を解決するため、レジスタのパッキングの履歴を追跡することができる。いくつかの実施例においては、アクセスのサイズを追跡するために、各レジスタに対して１つ以上の計数回路を管理することができる。飽和カウンタは、そのような目的のために使用することができる。例えば、飽和カウンタは、Ｑ０に対するアクセスのために管理することができ、かかるカウンタは、各４倍サイズのアクセス毎にインクリメントされ、且つ、各２倍サイズのアクセス毎にデクリメントされる。閾値ポイントを決定することができるので、プロセッサは、Ｑ０が４倍として又はＱ０の２倍としてより頻繁にアクセスされるか否かによって、２つの６４ビットのロードｕｏｐｓ及び１つの１２８ビットのｕｏｐの何れかを導入することになる。履歴追跡の他の方法が可能であることに留意されたい。
【００８５】
例えば、フィックスアップｕｏｐ導入の履歴が同様に又は代替として追跡され、プロセッサは、この履歴情報を使用して、命令の復号化がより良い実行を様々にもたらし得る飽和を検出することができる。いくつかの実施例においては、復号化される命令のアドレスを、ハッシュアルゴリズムを用いて分析することができ、かかる履歴を、各レジスタに対するメモリに記憶することができる。説明のために、（例えば、１２８ビットの）Ｑ０が最初に半分にロード（例えば、最初にＤ０をロード、次にＤ１をロード）され、その後に４倍のレジスタ（例えば、１２８ビット）としてアクセスされた場合には、ｕｏｐｓを、ローディングに先立ってＱ０を最初にパック解除するために導入することができ、ｕｏｐも、アクセスに先立ってＱ０をパック解除するために導入することができる。しかしながら、特定の命令のストリームが、主に４倍のレジスタ（例えば、１２８ビット）としてＱ０をアクセスし、主に２つの半分にレジスタをロード（例えば、最初にＤ０をロード、次にＤ１をロード）する場合には、プロセッサは、命令のストリームに対するｕｏｐｓの導入を長時間追跡することによって、このことを検出することができる。（例えば、履歴、飽和計数回路、又は、上記した実施例を統計的に使用して）この動作が検出された場合には、２つの６４ビットのロードを行うためのｕｏｐｓを連続したＤレジスタに送らずに、プロセッサは、１つの１２８ビットのロードｕｏｐのみを全４倍レジスタに対して送出して、使用に先立つローディング後のＱ０のローディング及びパック解除の前に、Ｑ０をパック解除する必要性を除去することができる。かかる検出は、ローディング及び記憶のために必要とされるｕｏｐｓの正味数を削減することによって、性能を改善する利点を有し得る。この追跡の様々な他の置き換えは、当業者にとって明らかである。
【００８６】
下記の例示の最適化は、レジスタマッピングの機能として実行することができる。上述したように、いくつかのアーキテクチャにおいてフィックスされサポートされたロードサイズのみが存在し得る。例えば、ベクターロード命令ＶＬＤ＊の実施例に対する１つだけのサポートされたロードサイズは６４ビットでよい。この場合において、１２８ビット演算を実行する任意の命令は、前もって２つの６４ビット領域にロードされていたデータを使用する必要がある。
【００８７】
この場合において、ロードする長さとともに出力先のレジスタの現在のマッピング及び出力先のレジスタの開始番号は、２倍又は４倍としてデータをロードすべきか否かを決定するプロセッサによって使用することができる。命令がレジスタの偶数番号をロードし、最初のレジスタが偶数のレジスタ番号であり、及び、出力先が以前４倍として使用されていたことを現在のマップが示す場合には、データを４倍としてロードすることができる。命令がレジスタの奇数番号をロードし、奇数番号のレジスタから開始し、又は、以前に使用したレジスタが４倍ではなかったことを現在のマッピングが示す場合には、データを２倍としてロードすることができる。
【００８８】
同様の最適化は、命令を記憶することにも応用することができる。現在のマッピングによって２倍又は４倍として入力元を記憶することが可能であり、レジスタの番号が偶数又は奇数であるかどうかが記憶され、偶数又は奇数のレジスタから開始するかどうかが記憶される。
【００８９】
一般に、データを長くする（すなわち、１つ以上の入力元のレジスタよりも長いアーキテクチャレジスタに書込む）命令は、かかる最適化の余地があり得る。かかる命令の実施例は、２倍のレジスタとして指定された入力元、及び、４倍のレジスタとして指定された出力先の１つ又は両方を有することができる。これらの命令がｕｏｐｓに復号化される方法によって、それらが４倍として現在パックされている場合、且つ、復号装置がｕｏｐｓを順に変換できる場合には、入力元をパッキング解除することなく、かかる命令を実行することが可能である。
【００９０】
例えば、命令ＶＡＤＤＬ．Ｓ８＜Ｑｄ＞，＜Ｄｎ＞，＜Ｄｍ＞は、加算を実行するためにＤｎ、Ｄｍ及び第３のｕｏｐにおいてデータを長くする２つのシャッフルｕｏｐｓに分割することができる。シャッフルｕｏｐは、命令のレジスタを例えば上位ビット及び下位ビット（６４ビット）の何れかから長くすることができる。特定の実施例において、ｆｋｐｍｏｖｓｘｂｗ＜出力先＞＜入力元＞は、入力元のビット６３：０にパックされたデータを長くするために使用することができ、一方、ｆｋｐｍｏｖｓｘｂｗｈ＜出力先＞＜入力元＞は、入力元のビット１２７：６４にパックされたデータを長くするために使用することができる。例えば、命令の入力元が、ビット１２７：６４として４倍に現在パックされている奇数のＤレジスタである場合には、ｆｋｐｍｏｖｓｘｂｗの代わりにｆｋｐｍｏｖｓｘｂｗｈ  ｕｏｐを使用することができ、レジスタが、導入されたｕｏｐｓによってパック解除される必要がない。レジスタが奇数又は偶数であるかどうか、及び、レジスタが４倍又は２倍としてパックされているかどうかに基づいて、最初の２つのシャッフルｏｐｓが変換される場合には、ｕｏｐｓは、下記のようになり得る（レジスタが単一としてパックされていることは仮定しない）。
１）（Ｄｎが偶数であるか又は２倍としてパックされている）場合には、（ｆｋｐｍｏｖｓｘｂｗ  ＦＴ０，Ｄｎ）、そうでない場合には（ｆｋｐｍｏｖｓｘｂｗｈ  ＦＴ０，Ｑｘ）  ここで、ｘ＝（ｎ−１）／２
２）（Ｄｍが偶数であるか又は２倍としてパックされている）場合には、（ｆｋｐｍｏｖｓｘｂｗ  ＦＴ１，Ｄｍ）、そうでない場合には（ｆｋｐｍｏｖｓｘｂｗｈ  ＦＴ１，Ｑｙ）  ここで、ｙ＝（ｍ−１）／２
３）ｆｋｐａｄｄｗ  Ｑｄ，ＦＴ０，ＦＴ１
【００９１】
１つの入力元のみが２倍であるが、他が４倍であり、且つ、出力先が４倍の場合に命令を広げることについても同様に真である。この場合において、上記のｏｐ変換は、入力元の２倍に対して実行することができる。
【００９２】
浮動小数点の装置及び浮動小数点のレジスタに関して様々な実施形態が説明されてきたが、これらのコンセプトは、エイリアシング効果が発生し得る他の処理装置及びパックされたレジスタにも応用できることに留意されたい。例えば、本明細書に記載されたコンセプトは、図１Ａ及び図１Ｂに示されたものと同様の高密度にパックされた構成において、ＩＳＡが浮動小数点レジスタ以外のレジスタを構成する場合に適用することができる。
【００９３】
本明細書において提供された方法又はフローチャートは、汎用のコンピュータ又はプロセッサによる実行のために、非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアにおいて実施することができる。非一時的なコンピュータ可読記憶媒体の例には、読出専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリ装置、内部ハードディスク及び可搬型ディスク等の磁気媒体、光磁気媒体、並びに、ＣＤ−ＲＯＭディスクやデジタル多機能ディスク（ＤＶＤｓ）等の光媒体が含まれる。
【００９４】
（実施形態）
１．物理メモリに記憶されたパックされたレジスタをアクセスする方法であって、パックされたレジスタの状態を記憶することと、パックされたレジスタのレジスタに命令がアクセスする状況において、パックされたレジスタの状態に基づいてレジスタに直接アクセスできるか否かを決定することと、レジスタに直接アクセスできない状況において、レジスタに直接アクセス可能になる動作を行うことと、を含む。
【００９５】
２．動作は、少なくとも１つのｕｏｐを導入すること、又は、状態を変更することを含む、実施形態１の方法。
【００９６】
３．動作は、状態を変更することを含む、上記何れかの実施形態の方法。
【００９７】
４．動作は、レジスタの最下位ビット（ＬＳＢ）を物理レジスタのＬＳＢに揃えることを含む、上記何れかの実施形態の方法。
【００９８】
５．アクセスは、読取り操作又は書込み操作を含む、上記何れかの実施形態の方法。
【００９９】
６．アクセスは、書込み操作を含む、上記何れかの実施形態の方法。
【０１００】
７．パックされたレジスタのビットは、物理メモリの少なくとも１つの物理レジスタに記憶されている、上記何れかの実施形態の方法。
【０１０１】
８．物理メモリは、物理レジスタファイルを含む、上記何れかの実施形態の方法。
【０１０２】
９．履歴を生成するために、動作及び次の動作、又は、レジスタのパッキング及びレジスタの次のパッキングを追跡することと、次の動作が必要であるか否か、又は、どのような次の動作が必要であるかを履歴に基づいて決定することと、を含む、上記何れかの実施形態の方法。
【０１０３】
１０．動作は、アクセスの前に、第２の物理レジスタのパックされたレジスタのビットの少なくとも一部を記憶する少なくとも１つのｕｏｐを導入することを含む、上記何れかの実施形態の方法。
【０１０４】
１１．レジスタは、導入された少なくとも１つのｕｏｐの実行の後に、第２の物理レジスタにて直接アクセス可能である、上記何れかの実施形態の方法。
【０１０５】
１２．レジスタの最下位ビット（ＬＳＢ）は、導入された少なくとも１つのｕｏｐの実行の後に、第２の物理レジスタのＬＳＢに揃えられる、上記何れかの実施形態の方法。
【０１０６】
１３．状態は、パックされたレジスタが単一の物理レジスタ又は２つ以上の物理レジスタに記憶されているか否かを示す、上記何れかの実施形態の方法。
【０１０７】
１４．状態は、記憶されたパックされたレジスタを少なくとも１つの物理レジスタに配置する指示を示す、上記何れかの実施形態の方法。
【０１０８】
１５．パックされたレジスタの各々は物理レジスタにマッピングされる、上記何れかの実施形態の方法。
【０１０９】
１６．複数の論理レジスタ名（ＬＲＮ）の各々は、１つ以上のパックされたレジスタに関連し、各ＬＲＮは、物理レジスタに関連する物理レジスタ名（ＰＲＮ）にマッピングされる、上記何れかの実施形態の方法。
【０１１０】
１７．状態は、各ＬＲＮの有効性を、パックされたレジスタのＰＲＮマッピングに反映する、上記何れかの実施形態の方法。
【０１１１】
１８．レジスタの最下位ビット（ＬＳＢ）が物理レジスタのＬＳＢに揃っている場合に、レジスタに直接アクセス可能である、上記何れかの実施形態の方法。
【０１１２】
１９．レジスタは、ビットにアクセスする前に物理メモリに記憶されたレジスタのビットを移動することなく命令によってアクセス可能である場合に、直接アクセス可能である、上記何れかの実施形態の方法。
【０１１３】
２０．レジスタは、浮動小数点レジスタである、上記何れかの実施形態の方法。
【０１１４】
２１．命令は、浮動小数点命令である、上記何れかの実施形態の方法。
【０１１５】
２２．導入される少なくとも１つのｕｏｐが復号化される少なくとも１つのｕｏｐの前に実行されるように、導入される少なくとも１つのｕｏｐは、命令の復号化される少なくとも１つのｕｏｐに先立って導入される、上記何れかの実施形態の方法。
【０１１６】
２３．導入される少なくとも１つのｕｏｐは、２つのｕｏｐｓを含む、上記何れかの実施形態の方法。
【０１１７】
２４．２つのｕｏｐｓは、分割できないものとして（アトミックに）実行するように構成されている、上記何れかの実施形態の方法。
【０１１８】
２５．２つのｕｏｐｓの両方は、状態が更新される前に実行するように構成されている、上記何れかの実施形態の方法。
【０１１９】
２６．パックされたレジスタは、１つの４倍精度レジスタと、２つの倍精度レジスタと、４つの単精度レジスタと、を含む、上記何れかの実施形態の方法。
【０１２０】
２７．パックされたレジスタの１つに対する書き込みの後に、パックされたレジスタ内のより多くのレジスタを読取り可能である、上記何れかの実施形態の方法。
【０１２１】
２８．パックされたレジスタは、アーキテクチャレジスタである、上記何れかの実施形態の方法。
【０１２２】
２９．物理メモリに記憶されたパックされたレジスタにアクセスする装置であって、パックされたレジスタの状態を記憶する回路と、パックされたレジスタのレジスタに命令がアクセスする状況において、レジスタに直接アクセスできるか否かを状態に基づいて決定する回路と、レジスタに直接アクセスできない状況において、レジスタに直接アクセス可能になる動作を行う回路と、を備えている。
【０１２３】
３０．動作は、少なくとも１つのｕｏｐを導入することを含む、実施形態２９の装置。
【０１２４】
３１．動作は、状態を変更することを含む、上記何れかの実施形態の装置。
【０１２５】
３２．動作は、レジスタの最下位ビット（ＬＳＢ）を物理レジスタのＬＳＢに揃えることを含む、上記何れかの実施形態の装置。
【０１２６】
３３．アクセスは、読取り操作である、上記何れかの実施形態の装置。
【０１２７】
３４．アクセスは、書込み操作である、上記何れかの実施形態の装置。
【０１２８】
３５．パックされたレジスタのビットは、物理メモリの少なくとも１つの物理レジスタに記憶される、上記何れかの実施形態の装置。
【０１２９】
３６．物理的メモリは、物理レジスタファイルを含む、上記何れかの実施形態の装置。
【０１３０】
３７．履歴を生成するために、動作及び次の動作、又は、レジスタのパッキング及びレジスタの次のパッキングを追跡する回路と、次の動作が必要であるか否か、又は、どのような次の動作が必要かを履歴に基づいて決定する回路と、を備える、上記何れかの実施形態の装置。
【０１３１】
３８．アクセスの前に、第２の物理レジスタのパックされたレジスタのビットの少なくとも一部を記憶する少なくとも１つのｕｏｐを導入する回路を備える、上記何れかの実施形態の装置。
【０１３２】
３９．レジスタは、導入された少なくとも１つのｕｏｐの実行の後に、第２の物理レジスタにて直接アクセス可能である、上記何れかの実施形態の装置。
【０１３３】
４０．レジスタの最下位ビット（ＬＳＢ）は、導入された少なくとも１つのｕｏｐの実行の後に、第２の物理レジスタのＬＳＢに揃えられる、上記何れかの実施形態の装置。
【０１３４】
４１．状態は、パックされたレジスタが単一の物理レジスタ又は２つ以上の物理レジスタに記憶されているか否かを示す、上記何れかの実施形態の装置。
【０１３５】
４２．状態は、記憶されたパックされたレジスタを少なくとも１つの物理レジスタに配列する指示を示す、上記何れかの実施形態の装置。
【０１３６】
４３．パックされたレジスタの各々は物理レジスタにマッピングされる、上記何れかの実施形態の装置。
【０１３７】
４４．複数の論理レジスタ名（ＬＲＮ）の各々は、１つ以上のパックされたレジスタに関連し、各ＬＲＮは、物理レジスタに関連する物理レジスタ名（ＰＲＮ）にマッピングされる、上記何れかの実施形態の装置。
【０１３８】
４５．状態は、各ＬＲＮの有効性を、パックされたレジスタのＰＲＮマッピングに反映する、上記何れかの実施形態の装置。
【０１３９】
４６．レジスタの最下位ビット（ＬＳＢ）が物理レジスタのＬＳＢに揃っている場合に、レジスタに直接アクセス可能である、上記何れかの実施形態の装置。
【０１４０】
４７．レジスタは、ビットにアクセスする前に物理メモリに記憶されたレジスタのビットを移動することなく命令によってアクセス可能である場合に、直接アクセス可能である、上記何れかの実施形態の装置。
【０１４１】
４８．レジスタは、浮動小数点レジスタである、上記何れかの実施形態の装置。
【０１４２】
４９．命令は、浮動小数点命令である、上記何れかの実施形態の装置。
【０１４３】
５０．導入される少なくとも１つのｕｏｐが復号化される少なくとも１つのｕｏｐの前に実行されるように、導入される少なくとも１つのｕｏｐは、命令の復号化される少なくとも１つのｕｏｐに先立って導入される、上記何れかの実施形態の装置。
【０１４４】
５１．導入される少なくとも１つのｕｏｐは、２つのｕｏｐｓを含む、上記何れかの実施形態の装置。
【０１４５】
５２．２つのｕｏｐｓは、分割できないものとして（アトミックに）実行するように構成されている、上記何れかの実施形態の装置。
【０１４６】
５３．２つのｕｏｐｓの両方は、状態が更新される前に実行するように構成されている、上記何れかの実施形態の装置。
【０１４７】
５４．パックされたレジスタは、１つの４倍精度レジスタと、２つの倍精度レジスタと、４つの単精度レジスタと、を備える、上記何れかの実施形態の装置。
【０１４８】
５５．パックされたレジスタの１つに対する書き込みの後に、パックされたレジスタ内のより多くのレジスタを読取り可能である、上記何れかの実施形態の装置。
【０１４９】
５６．パックされたレジスタは、アーキテクチャレジスタである、上記何れかの実施形態の装置。
【図１Ａ】
0006511462.tif 000031
【図１Ｂ】
0006511462.tif 000032
【図２】
0006511462.tif 000033
【図３】
0006511462.tif 000034
【図４】
0006511462.tif 000035