(57)【要約】      （修正有）【課題】より大きいインデックスおよび、より小さいインデックスを有するアーキテクチャレジスタを物理レジスタにマッピングするプロセッサを提供する。【解決手段】スーパースカラパイプラインプロセッサにおいて、マッピングロジック１１８は、部分書込み命令より大きい書込みサイズを有する先行書込み命令に対するリネームテーブル１１６内の既存エントリによってすでに識別されたアーキテクチャレジスタを指定する部分書込み命令を検出する。サイズトラッキングロジック１２２は、先行書込み命令の書込みサイズが部分書込み命令より大きい場合、部分書込み命令に対するマージ指示をセットする。マージロジック１１５は、マージ指示に応じる部分書込み命令のリタイアメント中に、部分書込み命令の結果を第２の物理レジスタとマージする。【選択図】図１
2017228267.tif 000002
【特許請求の範囲】
【請求項１】
複数の物理レジスタインデックスのうちの対応する１つによって、それぞれ識別される複数の物理レジスタを含む物理レジスタファイルと、
複数のエントリを有し、前記複数のエントリの各々は、複数のアーキテクチャレジスタのうちの１つ、より大きい物理レジスタインデックスおよびより小さい物理レジスタインデックスを識別するアーキテクチャ識別子を記憶するリネームテーブルと、
部分書込み命令より大きい書込みサイズを有する先行書込み命令に対する前記リネームテーブル内の既存エントリによってすでに識別されたアーキテクチャレジスタを指定する前記部分書込み命令を検出し、第１の物理レジスタを割り当て、前記既存エントリの前記より小さい物理レジスタインデックスを前記第１の物理レジスタの第１の物理レジスタインデックスで更新するマッピングロジックと、
前記先行書込み命令の前記書込みサイズが前記部分書込み命令より大きい場合、前記部分書込み命令に対するマージ指示をセットするサイズトラッキングロジックと、
前記マージ指示に応じる前記部分書込み命令のリタイアメント中に、前記部分書込み命令の結果を第２の物理レジスタとマージし、前記第２の物理レジスタは、前記既存エントリの前記より大きい物理レジスタインデックスによって識別されるマージロジックと、を備えることを特徴とするプロセッサ。
【請求項２】
前記サイズトラッキングロジックは、読出し命令が前記先行および部分書込み命令の両方にマッピングされた前記アーキテクチャレジスタとしてソースを指定するか否かを判定するために、前記既存エントリの最後書込みサイズ位置にアクセスし、前記最後書込みサイズ位置は、最後書込み命令の書込みサイズを記憶し、前記最後書込み命令は、前記先行書込み命令および前記部分書込み命令の後の１つであることを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記読出し命令の前記ソースのサイズが前記最後書込み命令の前記書込みサイズより大きい場合、前記サイズトラッキングロジックは、前記読出し命令が前記先行および部分書込み命令の両方にマッピングされた前記アーキテクチャレジスタとして前記ソースを指定するか否かを判定することを特徴とする請求項２に記載のプロセッサ。
【請求項４】
前記サイズトラッキングロジックは、読出し命令が、前記先行および部分書込み命令の両方にマッピングされた前記アーキテクチャレジスタとしてソースを指定すると判定した場合、前記サイズトラッキングロジックは、前記読出し命令を自己直列化するようにマーキングし、前記読出し命令を前記先行書込み命令に依存するようにセットすることを特徴とする請求項１に記載のプロセッサ。
【請求項５】
前記部分書込み命令のリタイアメントの時、前記第１の物理レジスタをリタイアされた非アーキテクチャ状態に移行させ、前記先行書込み命令のリタイアメントの時、前記第２の物理レジスタをリタイアされたアーキテクチャ状態に移行させるリネーミングスイッチロジックをさらに備えることを特徴とする請求項１に記載のプロセッサ。
【請求項６】
前記リネーミングスイッチロジックは、後続命令が、前記リネームテーブルの前記既存エントリに識別された前記アーキテクチャレジスタをリマッピングする時、前記第１および第２の物理レジスタをリサイクルすることを特徴とする請求項５に記載のプロセッサ。
【請求項７】
前記部分書込み命令のライトバック中に、前記部分書込み命令の前記結果を記憶する部分書込みバッファをさらに備え、前記マージロジックが、前記部分書込みバッファから前記部分書込み命令の前記結果を読出すことを特徴とする請求項１に記載のプロセッサ。
【請求項８】
前記先行書込み命令の前記書込みサイズは、前記既存エントリのより大きい書込みサイズ位置に記憶され、前記マッピングロジックは、前記既存エントリの前記より小さい物理レジスタインデックスを更新するか否かを判定するために、前記より大きい書込みサイズ位置にアクセスすることを特徴とする請求項１に記載のプロセッサ。
【請求項９】
前記先行書込み命令の前記書込みサイズは、前記既存エントリのより大きい書込みサイズ位置に記憶され、前記サイズトラッキングロジックは、前記マージ指示を提供するか否かを判定するために、前記より大きい書込みサイズ位置にアクセスすることを特徴とする請求項１に記載のプロセッサ。
【請求項１０】
前記マージ指示は、前記部分書込み命令に対するリオーダバッファのエントリにマージビットとして記憶されることを特徴とする請求項１に記載のプロセッサ。
【請求項１１】
部分書込み結果をマージしてプロセッサ内のサイズ問題を解決する方法であって、
第１の物理レジスタをレジスタファイルから第１の書込み命令に割り当て、前記第１の物理レジスタをアーキテクチャレジスタにマッピングするステップと、
前記アーキテクチャレジスタを参照して、第２の物理レジスタを前記レジスタファイルから第２の書込み命令に割り当てるステップと、
前記第２の書込み命令の書込みサイズを前記第１の書込み命令の書込みサイズと比較するステップと、
前記比較の結果に従って前記第２の物理レジスタを前記アーキテクチャレジスタにマッピングするステップと、
前記第２の書込み命令の前記書込みサイズが前記第１の書込み命令の前記書込みサイズよりも小さい場合、前記第２の書込み命令に対してマージ指示を提供するステップと、
前記第２の書込み命令のリタイアメントの時、前記第２の書込み命令の結果を、前記マージ指示に応じて前記第１の物理レジスタにマージするステップと、を備えることを特徴とする方法。
【請求項１２】
前記第１の物理レジスタをアーキテクチャレジスタにマッピングする前記ステップは、前記アーキテクチャレジスタに対するリネームテーブルのエントリのより大きい位置に第１のインデックスを記憶するステップを備えることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記比較の結果に従って前記第２の物理レジスタを前記アーキテクチャレジスタにマッピングする前記ステップは、前記第２の書込み命令の前記書込みサイズが前記第１の書込み命令の前記書込みサイズよりも小さい場合、第２のインデックスを前記エントリのより小さい位置に記憶するステップと、前記第２の書込み命令の前記書込みサイズが前記第１の書込み命令の前記書込みサイズよりも小さくない場合、前記第２のインデックスを前記エントリの前記より大きい位置に記憶するステップとを備えることを特徴とする請求項１２に記載の方法。
【請求項１４】
前記第２の書込み命令の結果を前記第１の物理レジスタにマージするステップは、前記第２の書込み命令にマッピングされたリネームテーブルのエントリに記憶された前記第２の書込み命令のサイズ値を読出すステップを備えることを特徴とする請求項１１に記載の方法。
【請求項１５】
読出し命令が、前記第１の書込み命令および前記第２の書込み命令の両方にマッピングされた前記アーキテクチャレジスタをソースとして指定する時、前記読出し命令を自己直列化するようにマーキングするステップと、前記読出し命令を第１の書込み命令に依存させるステップとをさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１６】
前記第２の書込み命令のリタイアメントの時、前記第１の物理レジスタをリタイアされた非アーキテクチャ状態に移行させるステップと、
前記第１の書込み命令のリタイアメントの時、前記第２の物理レジスタをリタイアされたアーキテクチャ状態に移行させるステップと、をさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１７】
後続命令が前記アーキテクチャレジスタをリマッピングする時、前記第１および第２の物理レジスタをリサイクルするステップをさらに備えることを特徴とする請求項１６に記載の方法。
【請求項１８】
前記第２の書込み命令の前記書込みサイズが、前記第１の書込み命令の前記書込みサイズよりも小さい場合、前記第２の書込み命令のライトバック中に前記第２の書込み命令の結果を部分書込みバッファに記憶するステップと、前記マージ中に、前記第２の書込み命令の結果を前記部分書込みバッファから読出すステップとをさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１９】
前記第１の書込み命令の前記書込みサイズを記憶し、前記第２の書込み命令の前記書込みサイズを前記第１の書込み命令の前記記憶された書込みサイズと比較するステップをさらに備えることを特徴とする請求項１１に記載の方法。
【請求項２０】
前記マージ指示を、前記第２の書込み命令に対するリオーダバッファのエントリにマージビットとして記憶するステップをさらに備えることを特徴とする請求項１１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、プロセッサにおける記憶結果サイズの問題を解決するための物理レジスタリネーミングに関し、より詳細には、リタイアフェーズにおける後続部分書込み結果を、先行するより大きい書込み結果とマージすることに関する。
【背景技術】
【０００２】
プロセッサは、書込み動作の結果を記憶するレジスタのセットを組み込んでいる。書込み動作は、インテル（登録商標）のｘ８６アーキテクチャなどのプロセッサの標準命令セットアーキテクチャ（ＩＳＡ）のサブセットによって実行される。書込み動作を実行する命令は、結果を記憶するための所定のアーキテクチャレジスタのセットの少なくとも１つを参照することができる。より最近のプロセッサ構成は、プロセッサ設計をより簡潔にし、より便利な設計拡張を可能にする物理レジスタファイル（ＰＲＦ）リネーミングスタイルを実装する。ＰＲＦリネーミングを有するプロセッサは、演算結果を記憶するための物理レジスタファイル（ＰＲＦ）と、アーキテクチャレジスタを物理レジスタにマッピングするためのリネーミング構造を組み込んでいます。ＰＲＦは、複数の物理レジスタのセットであり、それぞれがインデックスまたはポインタなどのセットの固有セットを使用して識別される。前記リネーミング構造は、対応する物理レジスタのインデックスへの命令によって参照されるアーキテクチャレジスタをマッピングする。
【０００３】
ソフトウェアプログラムまたはアプリケーションの実行中に、命令の結果を記憶するためのアーキテクチャレジスタを参照する命令に遭遇すると、前記プロセッサは物理レジスタインデックスの「フリーリスト」の中から利用可能な物理レジスタを割り当て、前記選択されたインデックスを前記命令にアタッチあるいはアサインし、リネーミング構造の推定部分を更新して、前記アーキテクチャレジスタを前記選択された物理レジスタにマッピングする。前記命令が実行されると、前記インデックスを使用して前記物理レジスタにアクセスし、前記結果を記憶する。前記命令がリタイアされると、前記物理レジスタを前記指定されたアーキテクチャレジスタにマッピングするために、前記インデックスを前記リネーミング構造のリタイア部分（または異なるリネーミング構造）に移動してもよい。物理からアーキテクチャレジスタへのマッピングは、上書きまたは再定義されるまで、後続読取り動作によって使用されてもよい。物理アーキテクチャレジスタの別のセットは必要としない、代わりに、アーキテクチャ識別子などは単に物理レジスタにマッピングされる。レジスタ間で値を移動させるのではなく、単に前記インデックスを移動またはリマッピングするたけで、前記ＰＲＦリネーミングスタイルがより効率的になる。
【０００４】
前記アーキテクチャが複雑なオペランドサイズを使用し、部分書込み動作がレジスタ全体の一部のみを修正することを可能にすると、サイジングの問題が生じる。前記ｘ８６アーキテクチャは、例えば、このような複雑なオペランドサイズを使用するが、本発明はｘ８６アーキテクチャに限定されるものではない。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
複雑なオペランドサイズの例として、書込み命令は、６４ビットレジスタの８ビット、１６ビット、３２ビットまたは６４ビットを修正するために実行されてもよい、前記６４ビットレジスタに、各より大きいサイズはより小さい書込みサイズを組み込む（レジスタの共通の端部から参照されるため）。同じアーキテクチャレジスタを参照しても、各命令は、別々の物理レジスタによってアサインされる。同じアーキテクチャレジスタへの優先書込み動作と同じまたはより大きいサイズの後続書込み動作は、それ以上修正することなくシステム内で適切に処理される。しかしながら、同じアーキテクチャレジスタを参照する読出し動作のソースが後続書込み動作よりも大きい場合、前記同じアーキテクチャレジスタへの優先書込み動作よりも小さい後続書込み動作は、完全な結果を保持しないので、前記同じアーキテクチャレジスタを参照する次の読出し動作に問題を引き起こす。
【０００６】
複数のソース依存性はこの問題を解決することができるが、少なくともＰＲＦのための２重リードポートを必要とする。別の可能な解決策としては、前記物理レジスタに記憶された値を読出し命令の前にマージすることであるが、このためには、発行された命令のすべてのソースが同じサイクルで検出される必要があり、複雑なケースでは発行の帯域幅が減少する可能性がある。この予備のマージ解決手段は、付加の非効率性を引き起こし、重大なタイミングの問題を引き起こす可能性がある。
【課題を解決するための手段】
【０００７】
一実施形態によるプロセッサは、物理レジスタファイル、リネームテーブル、マッピングロジック、サイズトラッキングロジック、およびマージロジックを含むことを特徴とする。前記物理レジスタファイルは、複数の物理レジスタを含み、各物理レジスタは、対応する物理レジスタインデックスによって識別される。前記リネームテーブルは、複数のエントリを含み、各エントリは、複数のアーキテクチャレジスタのうちの１つ、より大きい物理レジスタインデックス、およびより小さい物理レジスタインデックスを識別するアーキテクチャ識別子を記憶する。マッピングロジックは、部分書込み命令より大きい書込みサイズを有する先行書込み命令に対する前記リネームテーブル内の既存エントリによってすでに識別されたアーキテクチャレジスタを指定する前記部分書込み命令を検出する。そうである場合、前記マッピングロジックは第１の物理レジスタを割り当て、前記既存エントリの前記より小さい物理レジスタインデックスを第１の物理レジスタの第１の物理レジスタインデックスで更新する。前記サイズトラッキングロジックは、前記先行書込み命令の前記書込みサイズが前記部分書込み命令より大きい場合、前記部分書込み命令に対するマージ指示をセットする。前記マージロジックは、前記マージ指示に応じる前記部分書込み命令のリタイアメント中に、前記部分書込み命令の結果を第２の物理レジスタとマージする。前記第２の物理レジスタは、前記既存エントリの前記より大きい物理レジスタインデックスによって識別される。
【０００８】
前記サイズトラッキングロジックは、読出し命令が前記先行および部分書込み命令の両方にマッピングされた同じアーキテクチャレジスタとしてソースを指定するか否かを判定するために、前記既存エントリの最後書込みサイズ位置にアクセスし、前記最後書込みサイズ位置は、最後書込み命令の書込みサイズを記憶し、前記最後書込み命令は、前記先行書込み命令および前記部分書込み命令の後の１つである。前記読出し命令の前記ソースのサイズが前記最後書込み命令の前記書込みサイズより大きい場合、前記サイズトラッキングロジックは、前記読出し命令が前記先行および部分書込み命令の両方にマッピングされた同じアーキテクチャレジスタとして前記ソースを指定するか否かを判定する。
【０００９】
前記サイズトラッキングロジックは、読出し命令が、前記先行および部分書込み命令の両方にマッピングされた同じアーキテクチャレジスタとしてソースを指定していると判定することができ、そうであれば、前記読出し命令を自己直列化するようにマーキングし、前記読出し命令を前記先行書込み命令に依存するようにセットする。
【００１０】
前記プロセッサは、前記部分書込み命令のリタイアメントの時、前記第１の物理レジスタをリタイアされた非アーキテクチャ状態に移行させ、前記先行書込み命令のリタイアメントの時、前記第２の物理レジスタをリタイアされたアーキテクチャ状態に移行させるリネーミングスイッチロジックをさらに含んでもよい。前記リネーミングスイッチロジックは、後続命令が、前記リネームテーブルの前記既存エントリに識別された同じアーキテクチャレジスタをリマッピングする時、前記第１および第２の物理レジスタをさらにリサイクルしてもよい。
【００１１】
前記プロセッサは、ライトバック中に、前記部分書込み命令の前記結果を記憶する部分書込みバッファをさらに含んでもよい。この場合、前記マージロジックが、代わりに、前記部分書込みバッファから前記部分書込み命令の前記結果を読出す。
【００１２】
前記先行書込み命令の前記書込みサイズは、前記既存エントリのより大きい書込みサイズ位置に記憶されてもよい。この場合、前記マッピングロジックは、前記既存エントリの前記より小さい物理レジスタインデックスを更新するか否かを判定するために、前記より大きい書込みサイズ位置にアクセスしてもよい。また、前記サイズトラッキングロジックは、前記マージ指示を提供するか否かを判定するために、前記より大きい書込みサイズ位置にアクセスしてもよい。前記マージ指示は、前記部分書込み命令に対するリオーダバッファのエントリにマージビットとして記憶してもよい。
【００１３】
部分書込み結果をマージしてプロセッサ内のサイズ問題を解決する方法であって、第１の物理レジスタをレジスタファイルから第１の書込み命令に割り当て、前記第１の物理レジスタをアーキテクチャレジスタにマッピングするステップと、前記アーキテクチャレジスタを参照して、第２の物理レジスタを前記レジスタファイルから第２の書込み命令に割り当てるステップと、前記第２の書込み命令の書込みサイズを前記第１の書込み命令の書込みサイズと比較するステップと、前記第１と第２の書込み命令を比較の結果に従って前記第２の物理レジスタを前記アーキテクチャレジスタにマッピングするステップと、前記第２の書込み命令の前記書込みサイズが前記第１の書込み命令の書込みサイズよりも小さい場合、前記第２の書込み命令に対してマージ指示を提供するステップと、前記第２の書込み命令のリタイアメントの時、前記第２の書込み命令の結果を、前記マージ指示に応じて前記第１の物理レジスタにマージするステップとを備えることを特徴とする。
【００１４】
この方法は、前記アーキテクチャレジスタに対するリネームテーブルのエントリのより大きい位置に第１のインデックスを記憶するステップを含んでもよい。この方法は、前記第２の書込み命令の前記書込みサイズが前記第１の書込み命令の前記書込みサイズよりも小さい場合、前記エントリのより小さい位置に第２のインデックスを記憶するステップと、前記第２の書込み命令の前記書込みサイズが前記第１の書込み命令の前記書込みサイズよりも小さくない場合、前記第２のインデックスを前記エントリの前記より大きい位置に記憶するステップとを含んでもよい。この方法は、前記第２の書込み命令にマッピングされたリネームテーブルのエントリに記憶された前記第２の書込み命令のサイズ値を読出すステップを含んでもよい。この方法は、読出し命令が、前記第１の書込み命令および前記第２の書込み命令の両方にマッピングされた同じアーキテクチャレジスタをソースとして指定する時、前記読出し命令を自己直列化するようにマーキングするステップと、前記読出し命令を第１の書込み命令に依存させるステップとをさらに含んでもよい。
【００１５】
この方法は、前記第２の書込み命令のリタイアメントの時、前記第１の物理レジスタをリタイアされた非アーキテクチャ状態に移行させるステップと、前記第１の書込み命令のリタイアメントの時、前記第２の物理レジスタをリタイアされたアーキテクチャ状態に移行させるステップとをさらに含んでもよい。この方法は、後続命令が前記リネームテーブル内の前記アーキテクチャレジスタをリマッピングする時、前記第１および第２の物理レジスタをリサイクルするステップを含んでもよい。
【００１６】
前記第２の書込み命令の前記書込みサイズが、前記第１の書込み命令の前記書込みサイズよりも小さい場合、前記第２の書込み命令のライトバック中に前記第２の書込み命令の結果を部分書込みバッファに記憶するステップと、前記マージ動作中に、前記第２の書込み命令の結果を前記部分書込みバッファから読出すステップとをさらに含んでもよい。この方法は、前記第１の書込み命令の前記書込みサイズを記憶し、前記第２の書込み命令の前記書込みサイズを前記第１の書込み命令の前記記憶された書込みサイズと比較するステップを含んでもよい。この方法は、前記マージ指示を、前記第２の書込み命令に対するリオーダバッファのエントリにマージビットとして記憶するステップを含んでもよい。
【発明の効果】
【００１７】
本発明の特徴および利点は、以下の説明および添付図面によってよりよく理解されるであろう。
【図面の簡単な説明】
【００１８】
【図１】図１は、本発明の一実施形態に係る実装されたスーパースカラパイプラインプロセッサの簡略ブロック図である。
【図２】図２は、本発明の一実施形態に係る図１のリネームテーブルの図である。
【図３】図３は、一実施形態に係る図１のプロセッサの異なる処理段階中の命令μｏｐ１、μｏｐ２、およびμｏｐ３のそれぞれの動作を示す一連の図である。
【図４】図４は、一実施形態に係るサイズ分析の実行、マージ動作、命令依存性判定、および物理レジスタの状態のための、ＲＡＴフェーズ中の図１のＲＡＴ内などのフロントエンドでの動作、およびリタイアフェーズ中の図１のＲＯＢ内などのバックエンドでの動作を示すブロック図である。
【図５】図５は、図４のリネーミングスイッチロジックによって制御される、図１の物理レジスタファイルの各物理レジスタの状態を示す状態図である。
【図６】図６は、本発明の一実施形態に係る書込み命令のリタイアフェーズ中の部分書込み結果をマージする方法を示すフローチャート図である。
【発明を実施するための形態】
【００１９】
本発明者は、複雑なオペランドサイズを使用する命令セットアーキテクチャによって引き起こされるＰＲＦリネームスタイルのサイジングの問題を認識している。したがって、本発明者は部分書込み結果を記憶し、その結果をリタイアフェーズ中にマージするシステムおよび方法を開発しました。リネームテーブル内の各アーキテクチャエントリには、より大きい書込みインデックス位置と、より小さい書込みインデックス位置を含む。いくつかの実施形態では、各アーキテクチャエントリは、より大きい書込みサイズ位置および最後書込みサイズ位置をさらに含む。マッピングロジックは、各書込み命令に対して物理レジスタを割り当て、それに応じて前記リネームテーブルを更新する。サイズトラッキングロジックは、前記リネームテーブルを監視し、より小さい部分を先行するより大きい書込み命令として同じアーキテクチャレジスタに書込む部分書込み命令に対してマージ指示を提供する。いくつかの実施形態では、部分書込みバッファは、フルレジスタサイズの一部のみを修正する部分書込み命令の結果を一時的に記憶するために、提供される。前記マージ指示に前記第２の書込み指示が与えられている場合、前記第２およびより小さいサイズの書込み命令がリタイアすると、リタイアフェーズのマージロジックは、前記第２およびより小さいサイズの書込み命令の前記結果を、前記より大きい書込み動作の前記物理レジスタとマージする。前記アーキテクチャレジスタを読出す後続命令が、それ自体を自己直列化（ＳＳ）するようにマーキングするとは、前記読出し命令が、より小さい書込み命令およびより大きい書込み命令の両方にマッピングされるアーキテクチャレジスタとしてソースを指定する場合、前記後続命令は、実行のためにディスパッチする最も古いものとしてマーキングされ、前記より大きい書込み動作に依存するようにセットすることを意味する。
【００２０】
より具体的な構成では、前記マッピングロジックは、第１の書込み命令のための割り当てられた物理レジスタのインデックスを、指定されたアーキテクチャエントリの前記より大きい書込みインデックス位置に記憶する。前記マッピングロジックは、同じアーキテクチュアレジスタに対する第２、後続、およびより小さいサイズの書込み命令を検出すると、第２の書込み命令に対する別の割り当てられた物理レジスタのインデックスを、指定されたアーキテクチャエントリの前記より小さい書込みインデックス位置に記憶する。より具体的な構成では、前記マッピングロジックは、前記第１の書込み命令の対応するサイズを、前記指定されたアーキテクチャエントリの前記より大きい書込みサイズ位置にさらに記憶する。このように、前記サイズトラッキングロジックは、前記第２の書込み命令のサイズを、前記より大きい書込みサイズ位置に記憶された前記第１の書込み命令のサイズと比較することによってサイジングの問題を検出し、そして、前記第２の書込み命令のサイズが前記第１の書込み命令のサイズよりも小さい場合、前記マージ指示を提供するので、前記第２の書込み命令のリタイアメントの時、前記部分書込み結果は前記アーキテクチャレジスタとマージされる。より具体的な構成では、前記マッピングロジックは、最後書込み命令の対応するサイズを、前記指定されたアーキテクチャエントリの前記最後書込みサイズ位置にさらに記憶し、前記最後書込み命令は、前記第１の書込み命令および前記第２の書込み命令のうちの後の１つである 。
【００２１】
図１は、本発明の一実施形態に係る実装されたスーパースカラパイプラインプロセッサ１００の簡略ブロック図である。本明細書で使用される「プロセッサ」という用語は、マイクロプロセッサ、中央処理装置（ＣＰＵ）、処理コア、マイクロコントローラなどを含む任意のタイプの処理装置を指す。また、本明細書で使用される「プロセッサ」という用語は、システムオンチップ（ＳＯＣ）などに内蔵されたものを含む、チップまたは集積回路（ＩＣ）上に集積された処理ユニットなど、任意のタイプのプロセッサ構成も含む。
【００２２】
前記プロセッサ１００は、命令セットアーキテクチャ（ＩＳＡ）のマクロ命令、例えばｘ８６命令セットアーキテクチャなどをキャッシュする命令キャッシュ１０２を含む。追加または代替命令セットアーキテクチャが考えられる。前記プロセッサ１００は、前記マクロ命令を受信し、マイクロ命令に変換する命令変換器１０４を含む。次に、前記マイクロ命令は、マイクロ命令の依存性を生成し、プログラムオーダーでリザベーションステーション（ＲＳ）１０８およびリオーダバッファ（ＲＯＢ）１１０に前記マイクロ命令を発行するレジスタエイリアステーブル（ＲＡＴ）１０６に供給され、前記ＲＯＢ１１０は、命令のインオーダーリタイアメントを保証する前記ＲＡＴ１０６から発行されたすべての命令のエントリを記憶する。マイクロ命令に対して示された代表的なエントリ１１７は、“μｏｐｘ”として示されている。前記ＲＡＴ１０６から発行された前記マイクロ命令は、典型的にはマイクロ命令と呼ばれるが、より一般的には、ここでは単に“命令”と呼ばれる。
【００２３】
ＲＳ１０８は、ディスパッチャとも呼ばれ、複数の実行ユニット１１２のうちの適切なものに命令をディスパッチする。特に図示していないが、前記実行ユニット１１２は、整数算術論理演算装置（ＡＬＵ）などのような１つまたは複数の整数実行ユニット、ＭＭＸやＳＳＥユニットなどの単一命令多重データ（ＳＩＭＤ）実行ユニットを含むような１つまたは複数の浮動小数点実行ユニット、およびメモリオーダーバッファ（ＭＯＢ）などを含んでもよい。書込み命令の結果は、ライトバック（ＷＢ）経路を介して物理レジスタファイル（ＰＲＦ）１１４内の物理レジスタに書き込まれる。前記書込み命令に対応する前記ＲＯＢ１１０のエントリは、前記結果を書込むための前記物理レジスタへのインデックスを記憶する。いくつかの実施形態では、各部分書込み命令の前記ＲＯＢ１１０エントリは、部分書込み命令が前記ＲＡＴ１０６を通過し、前記マージ指示ＭＩがアサートされた時、ＲＡＴ１０６によってセットされるマージ（Ｍ）ビットをさらに記憶する。一実施形態では、前記部分書込み命令のリタイアメント中にマージを行う時、ＰＲＦ１１４に対するリードポートを必要とする圧力を解放するために、ライトバック中に部分書込み結果を一時的に記憶するための部分書込みバッファ１１３がさらに含まれる。他の実施形態では、前記ＰＲＦ１１４の前記リードポートが十分である場合、前記部分書込みバッファ１１３を省略することができ、前記部分書込み結果は、ＰＲＦ１１４にのみ記憶される。一実施形態では、マージが指示されなくても、各部分書込み命令の前記結果は、部分書込みバッファ１１３に記憶される。本明細書でさらに記載されたように、前記ＲＯＢ１１０は、マージビットがセットされたことに応じて、前記部分書込み結果を前記ＰＲＦ１１４内の物理レジスタにマージするマージロジック１１５を含む。
【００２４】
前記ＲＡＴ１０６は、リネームテーブル１１６、マッピングロジック１１８、フリーリスト１２０、及びサイズトラッキングロジック１２２を含む。前記リネームテーブル１１６は、アーキテクチャレジスタを前記ＰＲＦ１１４の前記物理レジスタに相互参照またはマッピングする。前記フリーリスト１２０は、インデックスのリストを割り当てられていない対応する物理レジスタへ記憶する。書込み動作が結果を格納するためのアーキテクチャレジスタを参照する時、前記マッピングロジック１１８は前記フリーリスト１２０を参照し、物理レジスタを選択して割り当てる。次に、前記マッピングロジック１１８は、前記割り当てられた物理レジスタの前記インデックスを、前記書込み命令で参照されるアーキテクチャレジスタに対応する前記リネームテーブル１１６のエントリに記憶する。このようにして、前記物理レジスタは、最初に前記アーキテクチャレジスタと前記書込み命令の両方にマッピングされる。本明細書でさらに記載されたように、前記リネームテーブル１１６の各エントリは、同じアーキテクチャレジスタへのより小さいおよびより大きい書込みのための物理レジスタインデックスを記憶するための場所を含む。前記サイズトラッキングロジック１２２は、第１の物理レジスタ（および／または前記部分書込みバッファ１１３、提供される場合のみ）に記憶された部分書込み結果を、前記第１の物理レジスタと同じアーキテクチャレジスタにマッピングされる第２の物理レジスタにマージされるマージ条件を検出する。前記マージ条件が検出されると、前記サイズトラッキングロジック１２２は、前記部分書込み命令用の前記ＭＩ信号をアサートし、前記ＲＡＴ１０６は前記ＲＯＢ１１０内の前記対応するエントリのＭビットをセットする。前記Ｍビットは、命令情報がＲＯＢ１１０エントリにプッシュされる前に予めセットされてもよく、前記ＲＯＢ１１０の前記エントリ内に直接セットされてもよいことに留意されたい。一実施形態では、前記部分書込み命令の前記書込みサイズを前記先行するより大きい書込み命令の前記書込みサイズと比較し、前記比較結果がより小さい時、前記マージ条件は満たされる。
【００２５】
図２は、本発明の一実施形態に係るリネームテーブル１１６の図である。図示された構成におけるｘ８６などのプロセッサ１００用のＩＳＡは、複雑なオペランドサイズを使用して、各アーキテクチャレジスタへの部分書込みを可能にする。前記ｘ８６アーキテクチャは、複数のサイズでアクセスされることができるいくつかのアーキテクチャレジスタを含む。６４ビットバージョンは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸなどのレジスタ表記を含み（６４ビットは、プリペンドされた“Ｒ”表記を使用する）、これらの６４ビット表記のいずれかを使用する書込み動作は、レジスタ全体への書込みとなる。これらのレジスタは、それぞれＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸなどの３２ビット表記（３２ビットは、プリペンドされた“Ｅ”表記を使用する）を含むと同様に、それぞれＡＸ、ＢＸ、ＣＸ、ＤＸなどの１６ビット表記も含む（１６ビットは、プリペンドされた文字なしのレジスタ名のみを使用する）。８ビットの表記も定義できるが、それぞれ１６ビットバージョンの最上位バイト（ＭＳＢ）または最下位バイト（ＬＳＢ）になるので、これ以上は説明しない。前記リネームテーブル１１６内の前記アーキテクチャ識別子は、所与のレジスタまたはその一部に対する単一の参照を含むだけでよい。
【００２６】
前記リネームテーブル１１６の新規な構成について論じる前に、まず従来の構成について説明する。従来の構成では、各テーブルエントリの推論部分は、割り当てられた物理レジスタのインデックスを記憶するための単一の位置のみを含み、アーキテクチャ識別子は、部分レジスタ表記を含む各レジスタを識別することができる。従来の構成の動作において、前記マッピングロジック１１８は、アーキテクチャレジスタを参照する書込み命令を検出し、書込み動作の結果を記憶するための物理レジスタを選択して割り当て、前記リネームテーブル１１６を参照して前記アーキテクチャレジスタにエントリが既に存在するか否かを判定する。前記エントリがまだ存在しない場合、前記マッピングロジック１１８は、前記リネームテーブル１１６内に新しいエントリを割り当て、アーキテクチャレジスタ識別子を前記新しいエントリのＡＲＣＨ位置に書き込む。次いで、前記マッピングロジック１１８は、割り当てられた物理レジスタのインデックスを、前記新しいエントリまたは更新されたエントリの推測部分に書き込む。リタイア位置はまだ決定されてない。前記書込み命令が同じアーキテクチャおよび物理レジスタマッピングでリタイアすると仮定すると、前記マッピングロジック１１８は、前記物理レジスタの前記インデックスを推定位置からそのアーキテクチャレジスタのリタイア位置に移動または他の方法でコピーすることによってアーキテクチャマッピングを変更する。様々な構成では異なる推定且つリタイアされたリネームを含んでもよいが、動作は実質的に同様であることに留意されたい。
【００２７】
従来の構成は、一連の命令が複雑なオペランドサイズを使用する場合、複数の物理レジスタは同じアーキテクチャレジスタの一部を記憶することを課題として提示する。例として、次の命令パターンを検討する。
μｏｐ１）          ＭＯＶ  ＥＡＸ，  ＥＢＸ
μｏｐ２）          ＭＯＶ  ＡＸ，  ＣＸ
μｏｐ３）          ＭＯＶ  ＥＳＰ，  ＥＡＸ
各命令は、マイクロ命令またはマイクロ動作（μｏｐ）として示されている。第１の物理レジスタが第１のＭＯＶ命令（μｏｐ１）に割り当てられ、前記割り当てられた物理レジスタがＥＡＸアーキテクチャレジスタにマッピングされる。前記第１のＭＯＶ命令μｏｐ１は、プロセッサ１００に、３２ビットレジスタＥＢＸのコンテンツを３２ビットレジスタＥＡＸに移動するように命令する。動作中、ＥＢＸに割り当てられた物理レジスタのコンテンツは、ＥＡＸに割り当てられた物理レジスタに移動される。第２の物理レジスタは、第２のＭＯＶ命令（μｏｐ２）に割り当てられ、ＡＸアーキテクチャレジスタにマッピングされる。前記第２のＭＯＶ命令μｏｐ２は、プロセッサ１００に、１６ビットレジスタＣＸのコンテンツを１６ビットレジスタＡＸに移動するように命令する。動作中、前記コンテンツは、前記マッピングに従って１つの物理レジスタから別の物理レジスタに移動される。しかし、アーキテクチャレジスタＡＸは、前記ＥＡＸアーキテクチャレジスタの最下位部分（下半部）であるため、前記ＥＡＸレジスタのコンテンツはμｏｐ２によって効果的且つ意図的に修正される。したがって、前記第１および第２の物理レジスタのいずれも、前記ＥＡＸアーキテクチャレジスタの完全なコンテンツを保持しない、その代わりに、それぞれに一部が記憶される。第３の物理レジスタは、第３のＭＯＶ命令（μｏｐ３）に割り当てられ、ＥＳＰアーキテクチャレジスタ（例えば、スタックポインタレジスタ）にマッピングされる。前記第３のＭＯＶ命令は、ＥＡＸの前記コンテンツを意図的にＥＳＰに移動する。しかし、ＥＡＸの前記コンテンツは２つの異なる物理レジスタ間に分配されるため、μｏｐ３は単一の物理レジスタからＥＡＸの前記完全なコンテンツをフェッチできない。このような条件を解決するには、複数のソース依存性やプリマージ動作など、さまざまな方法が使用されるが、これらの方法には重大な欠点がある。
【００２８】
本明細書で記載されたように、リタイアフェーズ中に部分書込み結果をマージするシステムおよび方法は、同じ欠点を導入することなく、記憶結果サイズの問題の条件を解決する。オペレーションは、本明細書でさらに記載されたように、前記リネームテーブル１１６およびプロセッサ１００の他の部分に対して修正される。前記リネームテーブル１１６の各行は、参照されたアーキテクチャレジスタに対応するエントリを形成し、各エントリは、そのエントリの対応する値を記憶するための複数の記憶位置を含む。各エントリについて、最初の列（左側）は前記エントリのアーキテクチャレジスタ（ＡＲＣＨ）識別子を記憶するための位置を含み、次の３つの列は前記エントリの推定動作値を記憶するための位置を含み、最後の列は前記エントリに対する動作の前記ＲＥＴＩＲＥフェーズに対する物理レジスタインデックスを記憶するための位置を提供する。これらの推定演算値は、より大きい書込み命令に対する物理レジスタインデックスを記憶するためのＬＡＧＥＲ位置と、より小さい書込み命令に対する物理レジスタインデックスを記憶するためのＳＭＡＬＬＥＲ位置とを含む。いくつかの実施形態では、これらの推定演算値は、前記エントリの最後書込みサイズを示すサイズ値を記憶するためのＬＡＳＴ ＷＲＩＴＥ ＳＩＺＥ位置をさらに含む。
【００２９】
図示のように、第１のエントリ２０２は、インデックスＰＲＡ（または単に物理レジスタＰＲＡともいう）によって識別された物理レジスタをアーキテクチャレジスタＥＢＸにマッピングし、第２のエントリ２０４は、物理レジスタＰＲＢを前記アーキテクチャレジスタＥＣＸにマッピングする。これらのマッピングは、それ以降完了した優先命令の結果であってもよく、インデックスＰＲＡおよびＰＲＢを記憶するエントリ２０２および２０４の前記ＲＥＴＩＲＥ位置は、それぞれＥＢＸが物理レジスタＰＲＡにマッピングされ、ＥＣＸが物理レジスタＰＲＢにマッピングされることを示す。第３のエントリ２０６および第４のエントリ２０８は、上述した前記ＭＯＶ命令μｏｐ１、μｏｐ２およびμｏｐ３の結果を示す。μｏｐ１に応じて、前記マッピングロジック１１８は、前記エントリ２０６を前記リネームテーブル１１６内に割り当て、識別子ＥＡＸをＡＲＣＨ位置に記憶して、３２ビット構成の前記アーキテクチャレジスタＥＡＸを識別する。６４ビット構成の場合、前記識別子は代わりにRAXであってもよい。前記マッピングロジック１１８は、前記フリーリスト１２０を参照し、インデックスＰＲＣを使用してアクセスされた利用可能な物理レジスタを割り当て、前記エントリ２０６のＬＡＲＧＥＲ位置に前記インデックスＰＲＣを記憶する。前記マッピングロジック１１８は、さらに、前記書込みのサイズを３２ビットとして検出し、サイズ値ＳＺ１を最後書込みサイズ（これまでの第１の書込みサイズ）が３２ビットであることを示す前記エントリ２０６の前記ＬＡＳＴ ＷＲＩＴＥ ＳＩＺＥに記憶する。前記エントリ２０６の前記ＳＭＡＬＬＥＲおよびＲＥＴＩＲＥ位置はまだ定義されていない。このようにして、インデックスＰＲＣによって識別された前記物理レジスタは、前記アーキテクチャレジスタＥＡＸおよび前記第１のＭＯＶ命令μｏｐ１に推測的にマッピングされる。
【００３０】
前記第２のＭＯＶ命令μｏｐ２は、前記アーキテクチャレジスタＥＡＸの最下位部分である前記アーキテクチャレジスタＡＸを参照する。前記マッピングロジック１１８が、前記第２のＭＯＶ命令μｏｐ２（１６ビット）の前記書込みサイズが前記第１のＭＯＶ命令μｏｐ１（３２ビット）より小さいことを検出すると、前記マッピングロジック１１８は、前記フリーリスト１２０を参照し、インデックスＰＲＤを使用してアクセスされた利用可能な物理レジスタを割り当て、前記エントリ２０６の前記ＳＭＡＬＬＥＲ位置に前記インデックスＰＲＤを記憶する。なお、前記マッピングロジック１１８が、前記第２のＭＯＶ命令μｏｐ２（例えば、μｏｐ２の前記書込みサイズが３２ビットである場合）の前記書込みサイズが第１のＭＯＶ命令μｏｐ１（３２ビット）よりも大きいかまたは等しいことを検出する場合、代わりに前記インデックスＰＲＣを上書きするために、前記インデックスＰＲＣを前記エントリ２０６の前記ＬＡＲＧＥＲ位置内に記憶する。すなわち、前記エントリ２０６の前記ＬＡＲＧＥＲ位置は、常に同じアーキテクチャレジスタＥＡＸを参照する最大書込み命令のサイズを記録する。前記マッピングロジック１１８は、さらに、前記エントリ２０６の前記ＬＡＳＴ ＷＲＩＴＥ ＳＩＺＥの値ＳＺ１を、前記アーキテクチャレジスタＥＡＸを参照する前記書込み命令の前記最後書込みサイズが１６ビットであることを示す値ＳＺ２に更新する。図示のように、ＳＺ１はＳＺ２に置き換えられている。前記エントリ２０６の前記ＲＥＴＩＲＥ位置は未だ定義されていない。μｏｐ３に応じて、前記マッピングロジック１１８は、前記リネームテーブル１１６内に前記エントリ２０８を割り当て、前記アーキテクチャレジスタＥＳＰを識別するために識別子ＥＳＰをＡＲＣＨ位置に記憶する。前記マッピングロジック１１８は、前記フリーリスト１２０を参照し、インデックスＰＲＥを使用してアクセスされた利用可能な物理レジスタを割り当て、前記エントリ２０８のＬＡＲＧＥＲ位置に前記インデックスＰＲＥを記憶する。前記マッピングロジック１１８は、さらに、前記書込みのサイズを３２ビットとして検出し、エントリ２０８の前記ＬＡＳＴ ＷＲＩＴＥ ＳＩＺＥにサイズ値ＳＺ３を記憶する。
【００３１】
従来の構成と同様に、前記第１および第２の物理レジスタＰＲＣおよびＰＲＤのいずれも、前記ＥＡＸアーキテクチャレジスタの完全なコンテンツを保持していない。前記第３と最後のＭＯＶ命令μｏｐ３は、単一の物理レジスタからＥＡＸの完全なコンテンツをフェッチできない。前記サイズトラッキングロジック１２２は、前記第２のＭＯＶ命令μｏｐ２の書込みサイズが前記第１のＭＯＶ命令μｏｐ１より小さい場合に前記マージ条件を検出すると、前記リネームテーブル１１６を監視する。前記先行およびより大きい書込み結果は、前記物理レジスタＰＲＣに記憶されるが、前記後続、より小さい書込み結果は、前記物理レジスタＰＲＤに記憶される。したがって、前記サイズトラッキングロジック１２２は、前記第２のＭＯＶ命令μｏｐ２に対する前記マージ指示ＭＩを提供する。前記マージ指示は、指示されると、μｏｐ２がＲＡＴフェーズを通過する時、前記第２のＭＯＶ命令μｏｐ２に割り当てられたＲＯＢ１１０の対応するエントリ内にＭビットとして記憶される。
【００３２】
ＲＯＢエントリのＭビットがセットされている場合、前記部分書込み命令がリタイアすると、マージ動作が呼び出される。本明細書でさらに記載されたように、前記マージロジック１１５は、前記ＲＯＢエントリのＭビットセットを検出し、μｏｐ３が実行される前に、前記物理レジスタＰＲＤの部分結果を前記物理レジスタＰＲＣでマージする。一実施形態では、μｏｐ２が、書込みサイズが前記ＬＡＲＧＥＲ位置に対応する前記書込み命令のサイズよりも小さい部分書込み命令であると検出された場合、μｏｐ２のライトバック段階中に前記部分結果は、物理レジスタＰＲＤまたは部分書込みバッファ１１３（提供されている場合）またはその両方に記憶される。ＰＲＦ１１４のリードポートの要求に対する圧力を解放するための前記部分書込みバッファ１１３が提供された実施形態では、ＲＰＤから後述の結果を読出す代わりにマージ動作を行うと、前記マージロジック１１５は、前記部分書込みバッファ１１３からμｏｐ２の前記部分書込み命令の結果を読出す。前記部分書込みバッファ１１３が提供されていない他の実施形態では、前記部分結果は、μｏｐ２の前記ライトバック段階中にＰＲＦ１１４内の物理レジスタＰＲＤ内にのみ記憶される。そのような実施形態では、前記マージロジック１１５は、前記マージ動作を行う時、前記部分書込み命令μｏｐ２の結果をＰＲＦ１１４内の前記物理レジスタＰＲＤから読出す。マージされた前記部分書込み結果のサイズは、ＲＯＢ１１０内の前記対応するエントリに提供された前記部分書込み命令μｏｐ２自体によって示される。
【００３３】
図３は、一実施形態に係るプロセッサ１００の異なる処理段階中の命令μｏｐ１、μｏｐ２、およびμｏｐ３のそれぞれの動作を示す一連の図である。ＲＡＴフェーズ３０２は、前記ＲＡＴ１０６によって実行される動作および結果を示す。各命令は、例えば、命令識別子ＩＤ、ソース識別子ＳＲＣ、デスティネーション識別子ＤＳＴ、および自己直列化フィールドＳＳなどの複数のフィールドを含む。図示されていないが、マージ指示ビットＭを記憶するためにマージフィールドが含まれてもよい。前記サイズトラッキングロジック１２２は、読出し命令が単一の物理レジスタ内に含まれていないが複数の物理レジスタに分散されている値を読出し、前記値を前記読出し動作の前に一緒にマージする必要があるサイジングの問題を検出する。そうである場合、サイズトラッキングロジック１２２は、ＳＳフィールド内の前記値をロジック“１”としてアサートすることによって、前記命令を自己直列化するようにマーキングする。追加フィールドは含まれてもよいが図示せず。また、任意の与えられた命令は、すべてのフィールドを使用しなくてもよい。例えば、レジスタまたはメモリ位置に記憶する即値を含むストア命令は、デスティネーション値を含んでもよいが、ソース値は含まない。
【００３４】
前記ＲＡＴフェーズ３０２に示すように、μｏｐ１のソースはＥＢＸにマッピングされた物理レジスタＰＲＡであり、デスティネーションはＥＡＸにマッピングされた物理レジスタＰＲＣである。μｏｐ１は自己直列化するようにマーキングされていないため、ＳＳ値は“０”である。μｏｐ２のソースはＥＣＸにマッピングされた前記物理レジスタＰＲＢであり、デスティネーションはＥＡＸにマッピングされた前記物理レジスタＰＲＤである。また、μｏｐ２は自己直列化するようにマーキングされていないため、ＳＳ値は“０”である。μｏｐ３のソースはＥＡＸにマッピングされた前記物理レジスタＰＲＣであり、デスティネーションはＥＳＰにマッピングされた前記物理レジスタＰＲＥである。前記サイズトラッキングロジック１２２が、前記リネームテーブル１１６から、μｏｐ３（３２ビット）のソースのサイズがＬＡＳＴ ＷＲＩＴＥ ＳＩＺＥ値ＳＺ2（１６ビット）より大きいことを検出した場合、前記読出し命令μｏｐ３がそのソースＥＡＸをμｏｐ２とμｏｐ１の両方のデスティネーションにマッピングされっていると指定することを判定する。すなわち、２つの異なる物理レジスタＰＲＣおよびＰＲＤは、前記最後書込み命令μｏｐ２の前記物理レジスタＰＲＤだけでなく、前記命令μｏｐ３によって読出される値を保持する。その場合、前記サイズトラッキングロジック１２２は、μｏｐ３を自己直列化するようにマーキングし、そのＳＳ値が“１”になるようにする。μｏｐ３がＲＳ１０８に発行されると、前記ＲＳ１０８は、前記命令μｏｐ１およびμｏｐ２がリタイアされる前にμｏｐ３をディスパッチして実行しない。さらに、前記サイズトラッキングロジック１２２は、μｏｐ３をμｏｐ２にではなく、μｏｐ１に依存するように設定する。
【００３５】
ＲＳ／ＥＵ／ＷＢフェーズ３０４は、各命令μｏｐ１〜μｏｐ３の前記ＲＳ１０８内、前記ＥＵ１１２内およびＷＢ中における動作の結果をまとめて示す。前記物理レジスタＰＲＡ、ＰＲＢ、ＰＲＣ、ＰＲＤおよびＰＲＥを含むＰＲＦ１１４の一部が示されている。μｏｐ１の実行中に、クロスハッチングされたシェーディングで示された前記物理レジスタＰＲＡの前記コンテンツは、前記物理レジスタＰＲＣに移動される。μｏｐ２の実行中に、斜線で示された前記物理レジスタＰＲＢの前記部分コンテンツは、前記物理レジスタＰＲＤに移動される。前記部分書込みバッファ１１３が含まれるいくつかの実施形態では、後続マージ動作が示されている場合、前記後続マージ動作を容易にするために、前記部分コンテンツも部分書込みバッファ１１３内の位置３０５に移動される。一実施形態では、前記部分書込みバッファ１１３が一杯になっている場合、前記プロセッサ１００のフロントエンドは、前記部分書込みバッファ１１３中の記憶位置が利用可能になるまで一時的に停止してもよい。μｏｐ３の実行中、前記物理レジスタＰＲＣの前記コンテンツは、前記物理レジスタＰＲＥに移動される。しかし、μｏｐ３が、ＲＥＴＩＲＥフェーズ３０６中にマージ動作が実行されるまで、μｏｐ３のソースがＬＡＳＴ  ＷＲＩＴＥ  ＳＩＺＥ値ＳＺ２よりも大きいと検出されると、μｏｐ３の実行は発生しない。もちろん、μｏｐ３のソースがＬＡＳＴ  ＷＲＩＴＥ  ＳＩＺＥ値ＳＺ２より大きくないと検出された場合、μｏｐ３はμｏｐ２と同じ、最後書込み命令に依存するようにセットされる。
【００３６】
前記ＲＥＴＩＲＥフェーズ３０６は、μｏｐ１のリタイアメント中に、前記物理レジスタＰＲＣ（インデックスＰＲＣを有する）に対するインデックスＰＲＣを、前記リネームテーブル１１６内の前記エントリ２０６のＲＥＴＩＲＥ位置にコピーすることによって、ＥＡＸのアーキテクチャマッピングを変更することを示す。μｏｐ２のリタイアメント中に、前記マージロジック１１５がμｏｐ２のＲＯＢエントリ内にセットされた前記Ｍビットを検出すると、前記マージロジック１１５は、前記物理レジスタＰＲＤの部分コンテンツまたは前記部分書込みバッファ１１３の位置３０５に記憶された部分コンテンツを前記物理レジスタＰＲＣの前記対応する部分にマージする。μｏｐ２の前記ＲＯＢエントリ内に記憶されている値は、マージされた前記部分書込みのサイズを示す。μｏｐ３がそのＲＯＢエントリに従って前記物理レジスタＰＲＣのコンテンツを前記物理レジスタＰＲＥに移動させると、前記物理レジスタＰＲＥが正しい結果を記憶するように、前記物理レジスタＰＲＣのコンテンツは、前記部分書込みバッファ１１３から（または前記物理レジスタＰＲＤから）のμｏｐ２の部分書込みとマージされる。μｏｐ３のリタイアメント中、前記ＲＯＢ１１０は、前記物理レジスタＰＲＥに対する前記インデックスＰＲＥを、前記リネームテーブル１１６内の前記エントリ２０８のＲＥＴＡＩＲＥ位置にコピーすることによって、ＥＳＰの前記アーキテクチャマッピングを変更する。このように、前記アーキテクチャレジスタＥＳＰは、前記命令μｏｐ１〜μｏｐ３の前記正しい結果を記憶する前記物理レジスタＰＲＥにマッピングされる。
【００３７】
一実施形態では、前記部分書込みバッファ１１３は、前記ＲＯＢ１１０の各前記エントリに対して提供されるＲＯＢインデックスによって索引付けされる。前記部分書込みバッファ１１３の前記エントリは、前記ＲＡＴフェーズ３０２で割り当てられ、先行する前記エントリを占有するために前記ＲＯＢインデックスを取る。前記ＷＢフェーズの間、その結果は、前記命令の前記ＲＯＢインデックスに従って、部分書込みバッファ１１３に書込まれる。さらに、μｏｐ２の前記マージされたサイズ、μｏｐ１の前記マージされたサイズなど、前記マージ動作が必要とする任意の追加情報は、前記リタイアされた命令のＲＯＢエントリ内に記憶される。前記ＲＯＢ１１０はμｏｐ２がリタイアしていることを検出し、前記マージロジック１１５がμｏｐ２に対する前記ＲＯＢエントリの前記Ｍビットがセットされていることを検出する場合、マージロジック１１５は前記マージ動作を行う。前記サイズトラッキングロジック１２２が、例えば、μｏｐ２の前記書込みサイズＳＺ２がμｏｐ１の前記より大きい書込みサイズＳＺ１より小さい時などのマージ条件が指示された場合、μｏｐ２の前記ＲＯＢエントリに前記Ｍビットをセットすることに留意されたい。
【００３８】
図２にさらに示されるようないくつかの実施形態では、前記先行するより大きい書込み命令（例えば、μｏｐ１）の前記書込みサイズは、前記エントリ２０６のＬＡＲＧＥＲ ＷＲＩＴＥ ＳＩＺＥ位置に記憶され、前記先行するより大きい書込み命令（例えば、μｏｐ１）によって少なくとも１回、そのＬＡＲＧＥＲ位置が書込まれる。現在書込み命令（例えば、μｏｐ２）の書込みサイズは、前記ＬＡＲＧＥＲ  ＷＲＩＴＥ ＳＩＺＥと比較され、前記現在書込み命令の書込みサイズがより小さい場合、前記ＳＭＡＬＬＥＲ位置は、μｏｐ２の前記物理レジスタＰＲＤの前記インデックスによって更新され、前記μｏｐ２のＲＯＢエントリの前記Ｍビットは、μｏｐ２が部分書込み命令であり、前記ＲＥＴＩＲＥフェーズ３０６中にマージ動作を必要とすることを示すようにセットされる。
【００３９】
図４は、サイズ解析、マージ動作、命令依存性判定、および物理レジスタの状態を実行するためのＲＡＴフェーズ３０２中のＲＡＴ１０６内などのフロントエンドでの動作、およびＲＥＴＩＲＥフェーズ３０６中のＲＯＢ１１０内などのバックエンドでの動作を示すブロック図である。前述したように、サイズトラッキングロジック１２２は、リネームテーブル１１６の変化を監視し、ＲＡＴフェーズ３０２中のＲＯＢエントリ内のＭＩ信号をアサートしてマージ動作を指示する。リネームスイッチロジック４０２はまた、リネームテーブル１１６およびサイズトラッキングロジック１２２からの情報を追跡し、命令の依存性をセットし、物理レジスタをフリーリスト１２０にリサイクルするように前記マッピングロジック１１８に指示する。前記マージロジック１１５は、（マージビットＭなどを介して）前記ＭＩ信号を検出するリタイア解析ロジック４０４と、前記ＰＲＦ１１４および前記部分書込みバッファ１１３の異なる物理レジスタ間のマージ動作を容易にして制御するマージ制御ロジック４０６とを含む。前記リタイア分析ロジック４０４はまた、前記ＲＥＴＩＲＥフェーズ３０６中に前記アーキテクチャレジスタマッピングを更新するなどによって、前記マッピングロジック１１８と通信して、前記リネームテーブル１１６を更新する。
【００４０】
図５は、前記リネーミングスイッチロジック４０２によって制御される前記ＰＲＦ１１４の前記物理レジスタのそれぞれの状態を示す状態図である。各物理レジスタは、アイドル（Ｉ）状態５０２、未完了（ＮＣ）状態５０４、完了（Ｃ）状態、リサイクルに対するリタイアされた待機（ＲＲ）状態５０８、およびリタイアされたアーキテクチャ（ＲＡ）状態５１０を有する。前記フリーリスト１２０内で識別された各物理レジスタは、最初は前記Ｉ状態５０２にある。物理レジスタが割り当てられると、前記レジスタの状態は前記ＮＣ状態５０４に移行する。前記ライトバック（ＷＢ）フェーズ中に前記対応する書込み命令を実行した後、前記対応するレジスタの状態は前記Ｃ状態５０６に移行する。通常動作中、前記対応する命令のリタイアメントの時、前記レジスタの状態は前記ＲＡ状態５１０に移行する。例えば、前記リネームテーブル１１６に示され、前記アーキテクチャレジスタＥＢＸおよびＥＣＸにマッピングされた前記物理レジスタＰＲＡおよびＰＲＢは、前記ＲＡ状態５１０にある。後続命令のリタイアメントの時、前記アーキテクチャレジスタを別の物理レジスタに再定義する前記後続命令は、同じアーキテクチャレジスタに先行にマッピングされた前記物理レジスタの状態をリサイクルまたは割り当てを解除し、前記Ｉ状態５０２に戻す。
【００４１】
前記ＲＲ状態５０８は、前記対応する命令がリタイアされた時、前記ＲＡ状態５１０にリタイアされない部分書込み結果を保持する物理レジスタに対する追加状態である。基本的に、これは、前記物理レジスタがアーキテクチャレジスタにマッピングされず、代わりに結果を転送するためのテンポラリレジスタとして機能することを意味する。一例として、前記リネームテーブル１１６のエントリ２０６に示された前記物理レジスタＰＲＤは、μｏｐ２のリタイアメントの時、前記アーキテクチャレジスタＥＡＸにマッピングされないため、前記ＲＡ状態５１０に移行しない。代わりに、前記物理レジスタＰＲＤは、μｏｐ２のリタイアメントの時、前記ＲＲ状態５０８に移行する。前記ＲＲ状態５０８または前記ＲＡ状態５１０のいずれかの前記物理レジスタは、後続書込みが同じアーキテクチャレジスタに発生する時、従来の方法と同じ方法でリサイクルされる。例えば、前記アーキテクチャレジスタＥＡＸ（前記リネームテーブル１１６の前記エントリ２０６内に示されているように、現在前記物理レジスタＰＲＣにマッピングされている）への後続書込みにより、前記物理レジスタＰＲＣおよびＰＲＤの両方がリサイクルされる。前記プロセッサ１００のフラッシュの時、前記ＮＣ状態５０４またはＣ状態５０６下の任意の物理レジスタは前記Ｉ状態５０２に戻される。
【００４２】
第１のステップ６０２において、第１の物理レジスタがＰＲＦ１１４から第１の書込み命令に割り当てられる。 前の例では、前記マッピングロジック１１８は、前記第１の書込み命令μｏｐ１に前記物理レジスタＰＲＣを割り当てる。次のステップ６０４において、前記第１の物理レジスタがアーキテクチャレジスタにマッピングされる。前記命令、例えばμｏｐ１は、アーキテクチャレジスタ、例えばＥＡＸを指定し、ＰＲＣとＥＡＸとの間のマッピングは、前記リネームテーブル１１６内に記憶される。ＥＡＸのためのマッピングが以前に存在しなかったと仮定すると、新しいエントリ（例えばエントリ２０６）は前記リネームテーブル１１６内に作成され、前記インデックスＰＲＣは前記エントリのＬＡＲＧＥＲ位置に書込まれる。前記ＬＡＲＧＥＲ位置は、前記第１の書込み命令に対する前記物理レジスタの前記インデックスと、同じサイズまたはより大きい後続書込み命令の書込みに使用される。
【００４３】
次のステップ６０６において、第２の物理レジスタが前記ＰＲＦ１１４から第２の書込み命令に割り当てられる。上記の例を続けると、前記マッピングロジック１１８は、前記物理レジスタＰＲＤを前記第２の書込み命令μｏｐ２に割り当てる。前記第２の書込み命令が同じアーキテクチャレジスタ（例えば、ＥＡＸ、またはそのサブセット、またはそのスーパーセット）を参照すると仮定すると、次のステップ６０８において、前記第２の書込み命令の前記書込みサイズが前記第１の書込み命令の前記書込みサイズと比較される。次のステップ６１０において、前記第２の物理レジスタが前記第１および第２の命令のサイズと比較した結果に従って、前記アーキテクチャレジスタにマッピングされる。前記第２の書込み命令のサイズが前記第１の書込み命令のサイズと同じかまたはそれより大きい場合、前記第１の書込み命令に対する前記エントリ内のインデックスは、前記第２の書込み命令に対する前記インデックスによって上書きされる。しかし、前記第２の書込み命令のサイズが前記第１の書込み命令のサイズよりも小さい場合、前記第２の書込み命令に対する前記インデックスは、同じアーキテクチャレジスタに対する同じエントリの前記ＳＭＡＬＬＥＲ位置に書込まれる。前記リネームテーブル１１６に示すように、例えば、前記第２の書込み命令μｏｐ２に対する前記インデックスＰＲＤは、ＥＡＸに対する前記エントリ２０６の前記ＳＭＡＬＬＥＲ位置に記憶される。
【００４４】
次のステップ６１２で述べたように、前記第２の書込み命令のサイズが前記第１の書込み命令のサイズよりも小さい場合、前記第２の書込み命令に対してマージ指示が提供される。図１に示すように、マージ指示信号ＭＩは、この条件が満たされた時にアサートされる。図示の一実施形態では、前記ＭＩ信号を使用して、前記第２の書込み命令μｏｐ２に対する前記ＲＯＢ１１０のエントリにマージビットＭをセットする。最後のステップ６１４において、前記第２の書込み命令のリタイアメントの時、前記第２の書込み命令の結果が前記マージ指示に応じて第１の物理レジスタとマージされる。図３に示すように、前記第２の書込み命令μｏｐ２の前記ＲＥＴＩＲＥフェーズ３０６中に、例えば、前記第２の書込み命令μｏｐ２に対する前記物理レジスタＰＲＤに記憶された前記部分結果は、前記マージロジック１１５によって、前記第１の書込み命令μｏｐ１にアサインされた前記物理レジスタＰＲＣとマージされる。あるいは、前記第２の書込み命令μｏｐ２の前記部分結果は、提供されている場合、前記部分書込みバッファ１１３に記憶され、代わりに前記部分結果は前記部分書込みバッファ１１３から検索される。
【００４５】
本方法は、後続読出し命令（例えば、μｏｐ３）を自己直列化するようにマーキングし、前記読出し命令がソースと同じアーキテクチャを指定する時、前記第１の書込み命令に依存するようにする追加ステップを含んでもよい。本方法は、前記第２の書込み命令のリタイアメントの時、前記第１の物理レジスタをリタイアされた非アーキテクチャ状態に移行させ、前記第１の書込み命令のリタイアメントの時、前記第２の物理レジスタをリタイアされたアーキテクチャ状態に移行させることを含んでもよい。本方法は、後続命令が前記アーキテクチャレジスタを前記リネームテーブル内にリマッピングする時、前記第１および第２の物理レジスタをリサイクルすることを含んでもよい。本方法は、前記第２の書込み命令の前記書込みサイズが前記第１の書込み命令の前記書込みサイズよりも小さい場合、前記第２の書込み命令のライトバック中に前記第２の書込み命令の結果を部分書込みバッファに記憶し、前記マージ動作中に前記第２の書込み命令の結果を前記部分書込みバッファから読出すことを含んでもよい。本方法は、前記第１の書込み命令の前記書込みサイズを記憶し、前記第２の書込み命令の前記書込みサイズを前記第１の書込み命令の前記記憶された書込みサイズと比較することを含んでもよい。本方法は、前記マージ指示を、前記第２の書込み命令に対するリオーダバッファ（例えば、ＲＯＢ１１０）のエントリ内にマージビットとして記憶することを含んでもよい。
【００４６】
前述の説明は、当業者が特定の用途およびその要件の文脈内で提供される本発明を製造および使用することを可能にするために提示されたものである。本発明は、その特定の好ましいバージョンを参照してかなり詳細に記載されているが、他のバージョンおよび変形も可能であり、考えられる。好ましい実施形態に対する様々な変更が、当業者には明らかであり、本明細書で定義された一般的な原理は、他の実施形態に適用されてもよい。例えば、本明細書で説明された前記ブロックは、ロジックデバイスまたは回路などを含む任意の適切な方法で実装され得る。当業者であれば、開示された概念および特定の実施形態を、本発明の精神および範囲から逸脱することなく、本発明の同じ目的を実行するための他の構造を設計または変更するための基礎として容易に使用できることを理解すべきである。したがって、本発明は、本明細書に示され、記載された特定の実施形態に限定されることを意図するものではなく、本明細書に開示される原理および新規な特徴と一致する最も広い範囲が与えられるべきである。
【００４７】
請求項は、後述の通りである。
【符号の説明】
【００４８】
１００…プロセッサ
１０２…命令キャッシュ
１０４…命令変換器
１０６…レジスタエイリアステーブル
１０８…リザベーションステーション
１１０…リオーダバッファ
１１２…実行ユニット
１１３…部分書込みバッファ
１１４…物理レジスタファイル
１１５…マージロジック
１１６…リネームテーブル
１１７…エントリ
１１８…マッピングロジック
１２０…フリーリスト
１２２…サイズトラッキングロジック
２０２…第１のエントリ
２０４…第２のエントリ
２０６…第３のエントリ
２０８…第４のエントリ
３０２…ＲＡＴフェーズ
３０４…ＲＳ／ＥＵ／ＷＢフェーズ
３０５…位置
３０６…ＲＥＴＩＲＥフェーズ
４０２…リネーミングスイッチロジック
４０４…リタイア解析ロジック
４０６…マージ制御ロジック
５０２…アイドル状態
５０４…未完了状態
５０６…完了状態
５０８…リサイクルに対するリタイアされた待機状態
５１０…リタイアされたアーキテクチャ状態
ＭＩ…マージ指示
ＷＢ…ライトバック
ＳＺ１、ＳＺ２…サイズ値
【図１】
2017228267.tif 000003
【図２】
2017228267.tif 000004
【図３】
2017228267.tif 000005
【図４】
2017228267.tif 000006
【図５】
2017228267.tif 000007
【図６】
2017228267.tif 000008
【外国語明細書】
Title of Invention 
SYSTEM AND METHOD OF MERGING PARTIAL WRITE RESULT DURING RETIRE PHASE
BACKGROUND OF THE INVENTION
Field of the Invention
The present invention relates in general to physical register renaming to resolve stored result size issues in a processor, and more particularly to merging a subsequent partial write result with a previous larger write result in the retire phase.  
Description of the Related Art
A processor incorporates a set of registers to store the results of write operations. Write operations are performed by a subset of the standard instruction set architecture (ISA) of the processor, such as the x86 architecture or the like by Intel( Registered Trademark ).  In many architectures, including x86, instructions that perform a write operation may refer to at least one of a set of predefined architectural registers for storing the results.  More recent processor configurations implement a physical register file (PRF) renaming style that makes the processor design more concise and enables more convenient design expansion.  A processor with PRF renaming incorporates a physical register file (PRF) for storing operation results and a renaming structure for mapping architectural registers to physical registers.  The PRF is a set of physical registers, each being identified using a unique one of a set of indexes or pointers or the like.  The renaming structure maps an architectural register referenced by an instruction to an index of a corresponding physical register.
During execution of a software program or application, when an instruction is encountered that references an architectural register for storing the results of the instruction, the processor allocates an available physical register from among a “freelist” of physical register indexes, attaches or otherwise assigns the selected index to the instruction, and updates a speculative portion of the renaming structure to map the architectural register to the selected physical register.  When the instruction is executed, the index is used to access the physical register to store the results.  When the instruction is retired, the index may be moved to a retire portion of the renaming structure (or else to a different renaming structure) to map the physical register to the specified architectural register.  The physical to architectural register mapping may be used by subsequent read operations until overwritten or redefined.  A separate set of physical architectural registers are not needed; instead, architectural identifiers or the like are simply mapped to the physical registers.  The PRF renaming style is more efficient since the indexes are simply moved or remapped rather than having to move values between registers.
A sizing issue arises when the architecture uses complex operand sizes which allows partial write operations to modify only a portion of the entire register.  The x86 architecture, for example, uses such complex operand sizes although the present invention is not limited to the x86 architecture.  As an example of complex operand sizes, write instructions may be executed to modify 8 bits, 16 bits, 32 bits or 64 bits of a 64-bit register, in which each larger size incorporates the smaller write sizes (since referenced from a common end of the register). Each instruction is assigned a separate physical register even if referencing the same architectural register.  A subsequent write operation that is the same size or larger than a prior write operation to the same architectural register is properly handled in the system without further modification. A subsequent write operation that is smaller than a prior write operation to the same architectural register, however, causes a problem for a following read operation referencing the same architectural register since it does not hold the complete result if the source of the read operation referencing the same architectural register is larger than the subsequent write operation.
Multiple source dependency may solve this issue, but at least requires double read ports for the PRF.  Another possible solution is to merge the values stored in the physical registers before the read instruction, but this requires that all of the sources of the issued instructions be detected in the same cycle which may decrease issue bandwidth for complex cases.  This preliminary merge solution may cause additional inefficiencies and may impose critical timing issues.
SUMMARY of THE INVENTION
A processor according to one embodiment includes a physical register file, a rename table, mapping logic, size tracking logic, and merge logic.  The physical register file includes multiple physical registers, each identified by a corresponding physical register index.  The rename table includes multiple entries, each storing an architectural identifier identifying one of multiple architectural registers, a larger physical register index and a smaller physical register index.  The mapping logic detects a partial write instruction specifying an architectural register already identified by an existing entry within the rename table for a previous write instruction having a write size that is larger than the partial write instruction.  If so, the mapping logic allocates a first physical register and updates the smaller physical register index of the existing entry with a first physical register index of the first physical register.  The size tracking logic that sets a merge indication for the partial write instruction if the write size of the previous write instruction is larger than the partial write instruction.  The merge logic merges a result of the partial write instruction with a second physical register during the retirement of the partial write instruction in response to the merge indication.  The second physical register is identified by the larger physical register index of the existing entry.
The size tracking logic may access a last write size location of the existing entry to determine whether a read instruction specifies a source as the same architectural register mapped to both the previous and partial write instructions, in which the last write size stores a write size of a last write instruction and in which the last write instruction is a later one of the previous write instruction and the partial write instruction.  If a size of the source of the read instruction is larger than the write size of the last write instruction, then the size tracking logic determines whether the read instruction specifies the source as the same architectural register mapped to both the previous and partial write instructions.
The size tracking logic may determine that a read instruction specifies a source as the same architectural register mapped to both the previous and partial write instructions, and if so, marks the read instruction as self-serializing and sets the read instruction as dependent upon the previous write instruction.  
The processor may further include renaming switch logic that transitions the first physical register to a retired non-architectural state upon retirement of the partial write instruction and that transitions the second physical register to a retired architectural state upon retirement of the previous write instruction.  The renaming switch logic may further recycle the first and second physical registers when a subsequent instruction remaps the same architectural register identified in the existing entry of the rename table.
The processor may further include a partial write buffer that stores the result of the partial write instruction during write back.  In this case, the merge logic instead reads the result of the partial write instruction from the partial write buffer.
The write size of the previous write instruction may be stored in a larger write size location of the existing entry.  In this case, the mapping logic may access the larger write size location to determine whether to update the smaller physical register index of the existing entry.  Also, the size tracking logic may access the larger write size location to determine whether to provide the merge indication.  The merge indication may be stored as a merge bit in an entry of a reorder buffer for the partial write instruction.
A method of merging partial write results to resolve size issues in a processor, including allocating a first physical register from a register file for a first write instruction and mapping the first physical register to an architectural register, allocating a second physical register from the register file for a second write instruction that references the architectural register, comparing a write size of the second write instruction with a write size of the first write instruction, mapping the second physical register to the architectural register according to a result of comparing the sizes of the first and second write instructions, providing a merge indication for the second write instruction if the write size of the second write instruction is smaller than a write size of the first write instruction, and upon retirement of the second write instruction, merging a result of the second write instruction into the first physical register in response to the merge indication.
The method may include storing a first index in a larger location of an entry of a rename table for the architectural register.  The method may include storing a second index in a smaller location of the entry if the write size of the second write instruction is smaller than the write size of the first write instruction, and storing the second index in the larger location of the entry if the write size of the second write instruction is not smaller than the write size of the first write instruction.  The method may include reading a size value of the second write instruction stored in an entry of a rename table mapped to the second write instruction.  The method may include marking a subsequent read instruction as self-serializing and making the read instruction dependent upon the first write instruction when the read instruction specifies the same architectural register mapped to both the first write instruction and the second write instruction as a source.
The method may further include transitioning the first physical register to a retired non-architectural state upon retirement of the second write instruction, and transitioning the second physical register to a retired architectural state upon retirement of the first write instruction.  The method may include recycling the first and second physical registers when a subsequent instruction remaps the architectural register in the rename table. 
The method may further include storing the result of the second write instruction into a partial write buffer during write back of the second write instruction if the write size of the second write instruction is smaller than the write size of the first write instruction, and reading the result of the second write instruction from the partial write buffer during the merging operation.  The method may include storing the write size of the first write instruction, and comparing the write size of the second write instruction with the stored write size of the first write instruction.  The method may include storing the merge indication as a merge bit in an entry of a reorder buffer for the second write instruction..
BRIEF DESCRIPTION OF DRAWINGS
The benefits, features, and advantages of the present invention will become better understood with regard to the following description, and accompanying drawings where:
FIG. 1 is a simplified block diagram of a superscalar, pipelined processor implemented according to one embodiment of the present invention;
FIG. 2 is a diagram of the rename table of FIG. 1 according to one embodiment of the present invention;
FIG. 3 is a series of diagrams illustrating operation of each of the instructions μop1, μop2 and μop3 during the different processing stages of the processor of FIG. 1 according to one embodiment;
FIG. 4 is a block diagram illustrating operation at the front end, such as within the RAT of FIG. 1 during a RAT phase, and operation at the back end, such as within the ROB of FIG. 1 during a retire phase, for performing size analysis, merge operations, instruction dependency determinations and the state of the physical registers according to one embodiment;
FIG. 5 is a state diagram illustrating the states of each of the physical registers of the physical register file of FIG. 1 as controlled by the renaming switch logic of FIG. 4; and
FIG. 6 is a flowchart diagram illustrated a method of merging partial write result during the retire phase of a write instruction according to one embodiment of the present invention.
DETAILED DESCRIPTION OF INVENTION
The inventor has recognized sizing issues of the PRF renaming style caused by an instruction set architecture that use complex operand sizes.  He has therefore developed a system and method of storing partial write results and merging the results in the retire phase.  Each architectural entry in a rename table includes a larger write index location and a smaller write index location. In some embodiments, each architectural entry further includes a larger write size location and a last write size location. Mapping logic allocates a physical register for each write instruction and updates the rename table accordingly. Size tracking logic monitors the rename table and provides a merge indication for a partial write instruction that writes a smaller portion to the same architectural register as a previous larger write instruction.  In some embodiments, a partial write buffer is provided to temporarily store the results of partial write instructions that modify only a portion of the full register size.  When the second and smaller-sized write instruction retires, merge logic in the retire phase merges the results of the second and smaller-sized write instruction with the physical register of the larger write operation if the merge indication is provided with the second write instruction.  A subsequent instruction that reads the architectural register marks itself as self-serializing (SS), meaning that it is marked to be the oldest to dispatch for execution, and sets its dependency upon the larger write operation if the read instruction specifies a source as an architectural register mapped to both the smaller write instruction and the larger write instruction.
In a more specific configuration, the mapping logic stores an index of an allocated physical register for a first write instruction into the larger write index location of a specified architectural entry.  When the mapping logic detects a second, subsequent and smaller-sized write instruction to the same architectural register, it stores an index of another allocated physical register for a second write instruction into the smaller write index location of the specified architectural entry. In a more specific configuration, the mapping logic further stores the corresponding size of the first write instruction into the larger write size location of the specified architectural entry.  In this manner, the size tracking logic detects a sizing issue by comparing the size of the second write instruction with the size of the first write instruction stored in the larger write size location, and then provides the merge indication if the size of the second write instruction is smaller than the size of the first write instruction so that the partial write results are merged with the architectural register upon retirement of the second write instruction. In a more specific configuration, the mapping logic further stores the corresponding size of a last write instruction into the last write size location of the specified architectural entry, and the last write instruction is a later one of the first write instruction and the second write instruction.
FIG. 1 is a simplified block diagram of a superscalar, pipelined processor 100 implemented according to one embodiment of the present invention. The term “processor” as used herein refers to any type of processing unit, including a microprocessor, a central processing unit (CPU), a processing core, a microcontroller, etc.  The term “processor” as used herein also includes any type of processor configuration, such as processing units integrated on a chip or integrated circuit (IC) including those incorporated within a system on a chip (SOC) or the like. 
The processor 100 includes an instruction cache 102 that caches macroinstructions of an instruction set architecture (ISA), such as the x86 instruction set architecture or the like.  Additional or alternative instruction set architectures are contemplated.  The processor 100 includes an instruction translator 104 that receives and translates the macroinstructions into microinstructions.  The microinstructions are then provided to a register alias table (RAT) 106, which generates microinstruction dependencies and issues the microinstructions in program order to reservations station (RS) 108 and to a reorder buffer (ROB) 110, which stores an entry for every instruction issued from the RAT 106 and which ensures in-order retirement of instructions.  An exemplary entry 117 is shown for a microinstruction, shown as “μopx.”  The microinstructions issued from the RAT 106 may typically be referred to as microinstructions, but are more generally referred to herein simply as “instructions.”
The RS 108, otherwise referred to as a dispatcher, dispatches the instructions to an appropriate one of multiple execution units 112. Although not specifically shown, the execution units 112 may include one or more integer execution units, such as an integer arithmetic/logic unit (ALU) or the like, one or more floating point execution units, such as including a single-instruction-multiple-data (SIMD) execution unit such as MMX and SSE units or the like, a memory order buffer (MOB), etc.  Any result of a write instruction is written to a physical register within a physical register file (PRF) 114 via a write back (WB) path.  The entry of the ROB 110 corresponding to the write instruction stores an index to the physical register for writing the results. In some embodiments, the ROB 110 entry of each partial write instruction further stores a merge (M) bit, which is set by the RAT 106 when a partial write instruction passes through the RAT 106 and the merge indication MI is asserted.  In one embodiment, a partial write buffer 113 is further included for temporarily storing partial write results during write back in order to release the pressure of requiring read ports for the PRF 114 when doing merge during retirement of the partial write instruction. In other embodiments, the partial write buffer 113 could be omitted, and the partial write results are only stored in the PRF 114 if the read ports of the PRF 114 are sufficient.  In one embodiment, the results of each partial write instruction are stored in the partial write buffer 113 even when a merge may not be indicated.  As further described herein, the ROB 110 includes merge logic 115 that, in response to the merge bit being set, merges the partial write results into a physical register within the PRF 114.
The RAT 106 includes a rename table 116, mapping logic 118, a free list 120, and size tracking logic 122.  The rename table 116 cross-references or maps architectural registers to the physical registers of the PRF 114.  The free list 120 stores a list of indexes to corresponding physical registers that are not allocated.  When a write operation references an architectural register for storing results, the mapping logic 118 consults the free list 120 and selects and allocates a physical register.   The mapping logic 118 then stores the index of the allocated physical register into an entry of the rename table 116 corresponding to the architectural register referenced in the write instruction.  In this manner, the physical register is initially mapped to both the architectural register and the write instruction.  As further described herein, each entry of the rename table 116 includes locations for storing physical register indexes for smaller and larger writes to the same architectural register.  The size tracking logic 122 detects a merge condition in which partial write results stored in a first physical register (and/or the partial write buffer 113, if provided) are to be merged with a second physical register that is mapped to the same architectural register as the first physical register.  When the merge condition is detected, the size tracking logic 122 asserts the MI signal for the partial write instruction and the RAT 106 sets the M bit of the corresponding entry in the ROB 110. It is noted that the M bit may be set beforehand in the instruction information being pushed into the ROB 110 entry, or may be set directly within the entry of the ROB 110.  In one embodiment, the merge condition is met when comparing the write size of the partial write instruction with the write size of the previous and larger write instruction, and the comparing result of the former is smaller.
FIG. 2 is a diagram of the rename table 116 according to one embodiment of the present invention.  The ISA for the processor 100, such as x86 in the illustrated configuration, uses complex operand sizes allowing partial writes to each architectural register. The x86 architecture includes several architectural registers that may be accessed with multiple sizes.  The 64-bit versions include register notations RAX, RBX, RCX, RDX, etc., (64-bit uses pre-pended ‘R’ notations) in which a write operation using any of these 64-bit notations is a write to the entire register.  These registers include 32-bit notations EAX, EBX, ECX, EDX, etc., respectively, (32-bit uses pre-pended ‘E’ notations) as well as 16-bit notations AX, BX, CX, DX, etc., respectively (16-bit uses only register name without a pre-pended letter).  8-bit notations may also be defined, but each is typically to the most significant byte (MSB) or the least significant byte (LSB) of the 16-bit version and are not further described.  The architectural identifiers in the rename table 116 need only include a single reference for any given register or portions thereof.  
Prior to discussing the novel configuration of the rename table 116, a conventional configuration is first described.  In a conventional configuration, the speculative portion of each table entry only includes a single location for storing the index of the allocated physical register, and the architectural identifiers may identify each register including partial register notations.  In operation of the conventional configuration, the mapping logic 118 detects a write instruction that references an architectural register, selects and allocates a physical register for storing the results of the write operation, and consults the rename table 116 to determine whether an entry already exists for the architectural register.  If the entry does not already exist, then the mapping logic 118 allocates a new entry in the rename table 116 and writes an architectural register identifier into the ARCH location of the new entry.  The mapping logic 118 then writes the index of the allocated physical register into the speculative portion of the new or updated entry. The RETIRE location is not yet determined.  Assuming that the write instruction retires with the same architectural and physical register mapping, the mapping logic 118 changes the architecture mapping by moving or otherwise copying the index of the physical register from the speculative location to the retire location for that architectural register.  It is noted that various configurations may include different speculative and retired rename tables, but operation is substantially similar.
The conventional configuration presents a challenge when a series of instructions employ complex operand sizes in which multiple physical registers store portions of the same architectural register.  As an example, consider the following instruction pattern:
μop1)  MOV EAX, EBX
μop2)  MOV AX, CX
μop3) MOV ESP, EAX
in which each instruction is illustrated as a microinstruction or micro-op (μop). A first physical register is allocated for the first MOV instruction (μop1) and the allocated physical register is mapped to the EAX architectural register. The first MOV instruction μop1 instructs the processor 100 to move the contents of the 32-bit register EBX into the 32-bit register EAX. In operation, the content of a physical register allocated to EBX is moved to the physical register allocated for EAX.  A second physical register is allocated for the second MOV instruction (μop2) and mapped to the AX architectural register. The second MOV instruction μop2 instructs the processor 100 to move the contents of the 16-bit register CX into the 16-bit register AX.  In operation, the content is moved from one physical register to another according to the mapping.  It is noted, however, that architectural register AX is the least significant portion (lower half) of the EAX architectural register, so that effectively the contents of the EAX register are intended to be modified by μop2.  Thus, neither of the first and second physical registers holds the complete contents of the EAX architectural register; instead, a portion is stored in each. A third physical register is allocated for the third MOV instruction (μop3) and mapped to the ESP architectural register (e.g., stack pointer register). The third MOV instruction is intended to move the contents of EAX into ESP.  The contents of EAX, however, are distributed between two different physical registers, so that μop3 cannot fetch the complete contents of EAX from a single physical register.  Various methods have been used to resolve this condition, such as multiple source dependency and pre-merge operations, but these approaches have significant drawbacks.
A system and method of merging a partial write result during the retire phase as described herein resolves the condition of stored result size issues without introducing the same drawbacks.  Operation is modified for the rename table 116 and other portions of the processor 100 as further described herein.  Each row of the rename table 116 forms an entry that corresponds to a referenced architectural register, and each entry includes multiple storage locations for storing corresponding values for that entry.  For each entry, the first column (on left) includes a location for storing an architectural register (ARCH) identifier of the entry, the next three columns includes locations for storing speculative operation values for the entry, and the last column provides a location for storing a physical register index for the RETIRE phase of operation for the entry.  These speculative operation values include a LARGER location for storing a physical register index for a larger write instruction and a SMALLER location for storing a physical register index for a smaller write instruction. In some embodiments, these speculative operation values further include a LAST WRITE SIZE location for storing a size value indicating the last write size for the entry.
As shown, a first entry 202 maps a physical register identified by index PRA (or simply referred to as physical register PRA) to the architectural register EBX, and a second entry 204 maps a physical register PRB to the architectural register ECX.  These mappings may be the result of prior instructions that have since completed, in which the RETIRE locations of entries 202 and 204 store indexes PRA and PRB, respectively, indicating that EBX is mapped to physical register PRA and ECX is mapped to physical register PRB.  A third entry 206 and a fourth entry 208 illustrate results of the MOV instructions μop1, μop2 and μop3 described above.  In response to μop1, the mapping logic 118 allocates the entry 206 in the rename table 116 and stores the identifier EAX into the ARCH location to identify the architectural register EAX for a 32-bit configuration.  For a 64-bit configuration, the identifier may instead be RAX.  The mapping logic 118 consults the free list 120, allocates an available physical register accessed using an index PRC, and stores the index PRC in the LARGER location of the entry 206.  The mapping logic 118 further detects the size of the write as 32-bits, and stores a size value SZ1 in the LAST WRITE SIZE of entry 206 indicating that the last write size (which is the first write size so far) is 32 bits.  The SMALLER and RETIRE locations of the entry 206 are not yet defined.  In this manner, the physical register identified by index PRC is speculatively mapped to the architectural register EAX and to the first MOV instruction μop1.
The second MOV instruction μop2 references the architectural register AX, which is the least significant portion of the architectural register EAX. The mapping logic 118 consults the free list 120, allocates an available physical register accessed using an index PRD, and stores the index PRD in the SMALLER location of the entry 206 when the mapping logic 118 detects the write size of the second MOV instruction μop2 (16-bits) is smaller than the first MOV instruction μop1 (32-bits). It is noted that if the mapping logic 118 detects that the write size of the second MOV instruction μop2 (e.g., if the write size of μop2 is 32-bits) is larger than or equal to the first MOV instruction μop1 (32-bits), it stores the index PRD in the LARGER location of the entry 206 to overwrite the index PRC instead. That is, the LARGER location of the entry 206 always records the size of the largest write instruction referencing the same architectural register EAX.  The mapping logic 118 further updates the value SZ1 in the LAST WRITE SIZE of entry 206 to a value SZ2 indicating the last write size of the write instruction referencing the architectural register EAX is 16 bits.  As shown, SZ1 is replaced by SZ2.  The RETIRE location of the entry 206 is still not yet defined. In response to μop3, the mapping logic 118 allocates the entry 208 in the rename table 116 and stores the identifier ESP into the ARCH location to identify the architectural register ESP. The mapping logic 118 consults the free list 120, allocates an available physical register accessed using an index PRE, and stores the index PRE in the LARGER location of the entry 208. The mapping logic 118 further detects the size of the write as 32-bits, and stores a size value SZ3 in the LAST WRITE SIZE of entry 208. 
In a similar manner as with the conventional configuration, neither of the first and second physical registers PRC and PRD holds the complete contents of the EAX architectural register. The third and last MOV instruction μop3 cannot fetch the complete contents of EAX from a single physical register. The size tracking logic 122 monitors the rename table 116 if detects the merge condition if the write size of the second MOV instruction μop2 is smaller than the first MOV instruction μop1.  The previous, larger write results are to be stored in the physical register PRC whereas the subsequent, smaller write results are to be stored in the physical register PRD.  Thus the size tracking logic 122 provides the merge indication MI for the second MOV instruction μop2. The merge indication, when indicated, is stored as the M bit in the corresponding entry of ROB 110 allocated for the second MOV instruction μop2 when μop2 passes through RAT phase.
When the partial write instruction retires, a merge operation is invoked if the M bit of the ROB entry is set.  As further described herein, the merge logic 115 detects the M bit set of the ROB entry and merges the partial results of the physical register PRD with the physical register PRC before μop3 is executed.  In one embodiment, if μop2 is detected to be a partial write instruction whose write size is smaller than the size of the write instruction corresponding to the LARGER location, then during the write back stage of μop2, the partial result is stored in either the physical register PRD, or the partial write buffer 113 (if provided), or both. In embodiments in which the partial write buffer 113 is provided to release pressure on the requirement of the read ports of the PRF 114, the merge logic 115 reads the result of the partial write instruction of μop2 from the partial write buffer 113 when doing merge instead of reading it from PRD. In other embodiments in which the partial write buffer 113 is not provided, the partial results are only stored into the physical register PRD in the PRF 114 during the write back stage of μop2. In such embodiment, the merge logic 115 reads the result of the partial write instruction μop2 from the physical register PRD in PRF 114 when doing the merge operation. The size of the partial write results to be merged is indicated by the partial write instruction μop2 itself provided in the corresponding entry in ROB 110.
FIG. 3 is a series of diagrams illustrating operation of each of the instructions μop1, μop2 and μop3 during the different processing stages of the processor 100 according to one embodiment.   A RAT phase 302 is shown illustrating operation and results performed by the RAT 106.  Each instruction includes multiple fields, such as an instruction identifier ID, a source identifier SRC, a destination identifier DST, and a self-serializing field SS.  Although not shown, a merge field may be included for storing the merge indication bit M.  The size tracking logic 122 detects a sizing issue in which a read instruction reads a value that is not contained within a single physical register but instead is distributed into multiple physical registers, such that the values need to be merged together prior to the read operation.  If so, the size tracking logic 122 marks the instruction as self-serializing by asserting the value in the SS field as a logic “1”.  Additional fields may be included but are not shown.  Also, any given instruction may not use all of the fields provides.  For example, a store instruction including an immediate value to store in a register or a memory location may include a destination value but not a source value.  
As shown in the RAT phase 302, the source of μop1 is the physical register PRA mapped to EBX and the destination is the physical register PRC mapped to EAX. μop1 is not marked as self-serializing so that its SS value is “0”.  The source of μop2 is the physical register PRB mapped to ECX and the destination is the physical register PRD mapped to EAX. Also, μop2 is not marked as self-serializing so that its SS value is “0”. The source of μop3 is the physical register PRC mapped to EAX and the destination is the physical register PRE mapped to ESP. If the size tracking logic 122 detects from the rename table 116 that the size of the source of μop3 (32-bit) is larger than the LAST WRITE SIZE value SZ2 (16-bit), it determines that the read instruction μop3 specifies its source EAX as mapped to the destinations of both μop2 and μop1. That is, two different physical registers PRC and PRD hold values to be read by the instruction μop3 rather than just the physical register PRD of the last write instruction μop2.  In that case, the size tracking logic 122 marks μop3 as self-serializing so that its SS value is “1”.  When μop3 is issued to the RS 108, the RS 108 does not dispatch μop3 for execution before the instructions μop1 and μop2 have been retired. Moreover, the size tracking logic 122 sets μop3 as dependent upon μop1 but not μop2.
An RS/EU/WB phase 304 collectively shows the results of operations in the RS  108, the EU 112 and during WB of each of the instructions μop1 - μop3.  A portion of the PRF 114 is shown including the physical registers PRA, PRB, PRC, PRD and PRE.  During execution of μop1, the contents of the physical register PRA, shown with cross-hatched shading, are moved to the physical register PRC. During execution of μop2, the partial contents of the physical register PRB, shown with hatched line shading, are moved to the physical register PRD.  In some embodiments in which the partial write buffer 113 is included, the partial contents are also moved to a location 305 within the partial write buffer 113 in order to facilitate a subsequent merge operation if indicated.  In one embodiment, if the partial write buffer 113 is full, the front end of the processor 100 may be temporarily stalled until a storage location is available in the partial write buffer 113. During execution of μop3, the contents of the physical register PRC are moved to the physical register PRE.  However, execution of μop3 does not occur when it is detected that its source is larger than the LAST WRITE SIZE value SZ2 until after a merge operation is performed in a RETIRE phase 306. Of course, if the source of μop3 is detected to be not larger than the LAST WRITE SIZE value SZ2, μop3 is set dependent upon the last write instruction, like μop2.
The RETIRE phase 306 illustrates that during retirement of μop1, the ROB 110 changes the architectural mapping of EAX by copying the index PRC for the physical register PRC (with index PRC) to the RETIRE location of the entry 206 within the rename table 116.  During retirement of μop2, if the merge logic 115 detects the M bit set in the ROB entry of μop2, the merge logic 115 merges the partial contents of the physical register PRD or the partial contents stored in location 305 of the partial write buffer 113 into the corresponding portion of the physical register PRC.  The value stored in the ROB entry of μop2 indicates the size of the partial write to be merged.  When μop3 moves the contents of the physical register PRC to the physical register PRE according to its ROB entry, the contents of the physical register PRC have been merged with the partial write of μop2 from the partial write buffer 113 (or from the physical register PRD) so that the physical register PRE stores the correct result.  During retirement of μop3, the ROB 110 changes the architectural mapping of ESP by copying the index PRE for the physical register PRE to the RETIRE location of the entry 208 within the rename table 116.  In this manner, the architectural register ESP is mapped to the physical register PRE storing the correct results of the instructions μop1 - μop3.
In one embodiment, the partial write buffer 113 is indexed by a ROB index provided for each of the entries of the ROB 110. The entries of the partial write buffer 113 are allocated in the RAT phase 302 and takes the ROB index to occupy the entry ahead. During the WB phase, the result is written into the partial write buffer 113 according to the ROB index of the instruction.  Furthermore, any additional information that the merge operation needs, like the merged size of μop2, the merged size of μop1, etc., is stored in ROB entries of the retired instructions.  The ROB 110 detects that μop2 is retiring, and if the merge logic 115 detects that the M bit of the ROB entry for μop2 is set, then the merge logic 115 conducts the merge operation. It is noted that the size tracking logic 122 sets the M bit in the ROB entry of μop2 if a merge condition is indicated, such as when the write size SZ2 of μop2 is smaller than the larger write size SZ1 of μop1.
In some embodiments as further shown in FIG. 2, the write size of the previous and larger write instruction (e.g., μop1) is stored in a LARGER WRITE SIZE location of the entry 206, whose LARGER location has been written at least once by the previous and larger write instruction (e.g., μop1). The write size of the current write instruction (e.g., μop2) is compared with the LARGER WRITE SIZE, and if the write size of the current write instruction is smaller, then the SMALLER location is updated by the index of the physical register PRD of μop2, and the M bit of ROB entry of the μop2 is set to indicate that μop2 is a partial write instruction and needs a merge operation during the RETIRE phase 306.
FIG. 4 is a block diagram illustrating operation at the front end, such as within the RAT 106 during the RAT phase 302, and operation at the back end, such as within the ROB 110 during the RETIRE phase 306, for performing size analysis, merge operations, instruction dependency determinations and the state of the physical registers according to one embodiment.  As previously described, the size tracking logic 122 monitors changes of the rename table 116 and asserts the MI signal in the ROB entry during the RAT phase 302 to indicate merge operations.  Renaming switch logic 402 also tracks the information from the rename table 116 and the size tracking logic 122 to set dependency of the instructions and to instruct said mapping logic 118 to recycle the physical registers back to the free list 120.  The merge logic 115 includes retire analysis logic 404 detecting the MI signal (via a merge bit M or the like) and merge control logic 406 for facilitating and controlling merge operations between different physical registers of the PRF 114 and the partial write buffer 113.  The retire analysis logic 404 also communicates with the mapping logic 118 to update the rename table 116, such as by updating the architecture register mapping during the RETIRE phase 306.
FIG. 5 is a state diagram illustrating the states of each of the physical registers of the PRF 114 as controlled by the renaming switch logic 402.  Each physical register has an idle (I) state 502, a not completed (NC) state 504, a completed (C) state, a retired and wait for recycle (RR) state 508, and a retired architectural (RA) state 510.  Each physical register identified in the free list 120 is initially in the I state 502.  When a physical register is allocated, the state of the register transitions to the NC state 504.  After execution of the corresponding write instruction during the write back (WB) phase, the state of the corresponding register transitions to the C state 506.  During normal operation, upon retirement of the corresponding instruction, the state of the register transitions to the RA state 510.  For example, the physical registers PRA and PRB shown in the rename table 116 mapped to the architectural registers EBX and ECX, respectively, are in the RA state 510.  A subsequent instruction that redefines an architectural register to another physical register upon retirement of that subsequent instruction causes the state of the physical register previously mapped to that same architectural register to be recycled or de-allocated back to the I state 502.
The RR state 508 is an additional state for physical registers that hold partial write results that are not retired to the RA state 510 when the corresponding instruction is retired.  Essentially, this means that the physical register is not mapped to an architectural register, but instead acts as a temporary register for forwarding results.  As an example, the physical register PRD shown in entry 206 of the rename table 116 is not mapped to the architectural register EAX upon retirement of μop2, so that it does not transition to the RA state 510.  Instead, the physical register PRD transitions to the RR state 508 upon retirement of μop2.  The physical registers in either the RR state 508 or the RA state 510 are recycled in the same manner as in the conventional method when a subsequent write occurs to the same architectural register. For example, a subsequent write to the architectural register EAX (currently mapped to the physical register PRC as shown in the entry 206 of the rename table 116) causes both the physical registers PRC and PRD to be recycled.  In the event of a flush of the processor 100, any physical registers in the NC state 504 or the C state 506 are returned to the I state 502.
FIG. 6 is a flowchart diagram illustrated a method of merging a partial write result during the retire phase of a write instruction according to one embodiment of the present invention.  At a first step 602, a first physical register is allocated from the PRF 114 for a first write instruction.  In the previous example, the mapping logic 118 allocates the physical register PRC for the first write instruction μop1.  At next step 604, the first physical register is mapped to an architectural register.  The instruction, such as μop1, specifies an architectural register, such as EAX, and the mapping between PRC and EAX is stored in the rename table 116.  Assuming a mapping for EAX did not previously exist, a new entry (e.g., entry 206) is made in the rename table 116 and the index PRC is written into the LARGER location for the entry.  The LARGER location is used to write the index of the physical register for the first write instruction and any subsequent write instructions that are the same size or larger.
At next step 606, a second physical register is allocated from the PRF 114 for a second write instruction. Continuing the example above, the mapping logic 118 allocates the physical register PRD for the second write instruction μop2.  Assuming the second write instruction references the same architectural register (e.g., EAX, or a subset or superset thereof), then at next step 608, the write size of the second write instruction is compared with the write size of the first write instruction.  At next step 610, the second physical register is mapped to the architectural register according to a result of comparing the sizes of the first and second instructions.  If the size of the second write instruction is the same size or larger than the size of the first write instruction, then index in the entry for the first write instruction is overwritten by the index for the second write instruction.  If the size of the second write instruction is smaller than the size of the first write instruction, however, then the index for the second write instruction is written into the SMALLER location of the same entry for the same architectural register.  As shown in the rename table 116, for example, the index PRD for the second write instruction μop2 is stored in the SMALLER location of the entry 206 for EAX.
As stated in next step 612, a merge indication is provided for the second write instruction if the size of the second write instruction is smaller than the size of the first write instruction.  As shown in FIG. 1, a merge indication signal MI is asserted when this condition is met.  In one embodiment as shown, the MI signal is used to set a merge bit M in an entry of the ROB 110 for the second write instruction μop2.  At last step 614, upon retirement of the second write instruction, the result of the second write instruction is merged with first physical register in response to the merge indication.  As shown in FIG. 3 during the RETIRE phase 306 of the second write instruction μop2, for example, the partial result stored in the physical register PRD for the second write instruction μop2 is merged by the merge logic 115 with the physical register PRC assigned to the first write instruction μop1.  Alternatively, the partial result of the second write instruction μop2 is stored in the partial write buffer 113, if provided, so that the partial result is instead retrieved from the partial write buffer 113.
The method may include additional steps, such as marking a subsequent read instruction (e.g., μop3) as self-serializing and making the read instruction dependent upon the first write instruction when the read instruction specifies the same architectural as a source.  The method may include transitioning the first physical register to a retired non-architectural state upon retirement of the second write instruction, and transitioning the second physical register to a retired architectural state upon retirement of the first write instruction.  The method may include recycling the first and second physical registers when a subsequent instruction remaps the architectural register in the rename table.  The method may include storing the result of the second write instruction into a partial write buffer during write back of the second write instruction if the write size of the second write instruction is smaller than the write size of the first write instruction, and reading the result of the second write instruction from the partial write buffer during the merge operation.  The method may include storing the write size of the first write instruction, and comparing the write size of the second write instruction with the stored write size of the first write instruction.  The method may include storing the merge indication as a merge bit in an entry of a reorder buffer (e.g., ROB 110) for the second write instruction.
The foregoing description has been presented to enable one of ordinary skill in the art to make and use the present invention as provided within the context of a particular application and its requirements.  Although the present invention has been described in considerable detail with reference to certain preferred versions thereof, other versions and variations are possible and contemplated. Various modifications to the preferred embodiments will be apparent to one skilled in the art, and the general principles defined herein may be applied to other embodiments.  For example, the blocks described herein may be implemented in any suitable manner including logic devices or circuitry or the like.  Those skilled in the art should appreciate that they can readily use the disclosed conception and specific embodiments as a basis for designing or modifying other structures for carrying out the same purposes of the present invention without departing from the spirit and scope of the invention. Therefore, the present invention is not intended to be limited to the particular embodiments shown and described herein, but is to be accorded the widest scope consistent with the principles and novel features herein disclosed.
What is claimed is:
Claims 
1.            A processor, comprising:
a physical register file comprising a plurality of physical registers each identified by a corresponding one of a plurality of physical register indexes;
a rename table with a plurality of entries, each of said plurality of entries storing an architectural identifier identifying one of a plurality of architectural registers, a larger physical register index and a smaller physical register index; 
mapping logic that detects a partial write instruction specifying an architectural register already identified by an existing entry within said rename table for a previous write instruction having a write size that is larger than said partial write instruction, wherein said mapping logic allocates a first physical register and updates said smaller physical register index of said existing entry with a first physical register index of said first physical register;
size tracking logic that sets a merge indication for said partial write instruction if said write size of said previous write instruction is larger than said partial write instruction; and
merge logic that merges a result of said partial write instruction with a second physical register during retirement of said partial write instruction in response to said merge indication, wherein said second physical register is identified by said larger physical register index of said existing entry.
2.            The processor of claim 1, wherein said size tracking logic accesses a last write size location of said existing entry to determine whether a read instruction specifies a source as said architectural register mapped to both said previous and partial write instructions, wherein said last write size location stores a write size of a last write instruction, and wherein said last write instruction is a later one of said previous write instruction and said partial write instruction.
3.            The processor of claim 2, wherein if a size of said source of said read instruction is larger than said write size of said last write instruction, said size tracking logic determines whether said read instruction specifies said source as said architectural register mapped to both said previous and partial write instructions.
4.            The processor of claim 1, wherein if said size tracking logic determines that a read instruction specifies a source as said architectural register mapped to both said previous and partial write instructions, said size tracking logic marks said read instruction as self-serializing and sets said read instruction as dependent upon said previous write instruction.
5.            The processor of claim 1, further comprising renaming switch logic that transitions said first physical register to a retired non-architectural state upon retirement of said partial write instruction and that transitions said second physical register to a retired architectural state upon retirement of said previous write instruction.
6.            The processor of claim 5, wherein said renaming switch logic recycles said first and second physical registers when a subsequent instruction remaps said architectural register identified in said existing entry of said rename table.
7.            The processor of claim 1, further comprising a partial write buffer that stores said result of said partial write instruction during write back of said partial write instruction, and wherein said merge logic reads said result of said partial write instruction from said partial write buffer.
8.            The processor of claim 1, wherein said write size of said previous write instruction is stored in a larger write size location of said existing entry, and wherein said mapping logic accesses said larger write size location to determine whether to update said smaller physical register index of said existing entry.
9.            The processor of claim 1, wherein said write size of said previous write instruction is stored in a larger write size location of said existing entry, and wherein said size tracking logic accesses said larger write size location to determine whether to provide said merge indication.
10.            The processor of claim 1, wherein said merge indication is stored as a merge bit in an entry of a reorder buffer for said partial write instruction.
11.            A method of merging partial write results to resolve size issues in a processor, comprising:
allocating a first physical register from a register file for a first write instruction and mapping the first physical register to an architectural register;
allocating a second physical register from the register file for a second write instruction that references the architectural register;
comparing a write size of the second write instruction with a write size of the first write instruction;
mapping the second physical register to the architectural register according to a result of said comparing;
providing a merge indication for the second write instruction if the write size of the second write instruction is smaller than the write size the first write instruction; and
upon retirement of the second write instruction, merging a result of the second write instruction into the first physical register in response to the merge indication.
12.            The method of claim 11, wherein said mapping the first physical register to an architectural register comprises storing a first index in a larger location of an entry of a rename table for the architectural register. 
13.            The method of claim 12, wherein said mapping the second physical register to the architectural register according to the result of said comparing comprises storing a second index in a smaller location of the entry if the write size of the second write instruction is smaller than the write size of the first write instruction, and storing the second index in the larger location of the entry if the write size of the second write instruction is not smaller than the write size of the first write instruction.
14.            The method of claim 11, wherein said merging the result of the second write instruction into the first physical register comprises reading a size value of the second write instruction stored in an entry of a rename table mapped to the second write instruction.
15.            The method of claim 11, further comprising marking a read instruction as self-serializing and making the read instruction dependent upon the first write instruction when the read instruction specifies the architectural register mapped to both the first write instruction and the second write instruction as a source.
16.            The method of claim 11, further comprising:
transitioning the first physical register to a retired non-architectural state upon retirement of the second write instruction; and
transitioning the second physical register to a retired architectural state upon retirement of the first write instruction.
17.            The method of claim 16, further comprising recycling the first and second physical registers when a subsequent instruction remaps the architectural register. 
18.            The method of claim 11, further comprising storing the result of the second write instruction into a partial write buffer during write back of the second write instruction if the write size of the second write instruction is smaller than the write size of the first write instruction, and reading the result of the second write instruction from the partial write buffer during said merging.
19.            The method of claim 11, further comprising storing the write size of the first write instruction, and comparing the write size of the second write instruction with the stored write size of the first write instruction.
20.            The method of claim 11, further comprising storing the merge indication as a merge bit in an entry of a reorder buffer for the second write instruction.
Abstract 
A processor including a physical register file, a rename table, mapping logic, size tracking logic, and merge logic.  The rename table maps an architectural register with a larger index and a smaller index.  The mapping logic detects a partial write instruction that specifies an architectural register that is already identified by an entry of the rename table mapped to a second physical register allocated for a larger write operation, and includes an index for the allocated register for the partial write instruction into the smaller index location of the entry.  The size tracking logic provides a merge indication for the partial write instruction if the write size of the previous write instruction is larger.  The merge logic merges the result of the partial write instruction with the second physical register during retirement of the partial write instruction.
Representative Drawing Fig.1
Figure 1
2017228267.tif 000009
Figure 2
2017228267.tif 000010
Figure 3
2017228267.tif 000011
Figure 4
2017228267.tif 000012
Figure 5
2017228267.tif 000013
Figure 6
2017228267.tif 000014