(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-10-11
(45)【発行日】2022-10-19
(54)【発明の名称】リタイアフェーズ中に部分書込み結果をマージするシステムおよび方法
(51)【国際特許分類】
G06F 9/38 20060101AFI20221012BHJP
G06F 9/30 20180101ALI20221012BHJP
G06F 9/34 20060101ALI20221012BHJP
【FI】
G06F9/38 350B
G06F9/30 370
G06F9/38 310F
G06F9/34 330
【外国語出願】
(21)【出願番号】P 2016224437
(22)【出願日】2016-11-17
【審査請求日】2019-11-07
(31)【優先権主張番号】201610455541.2
(32)【優先日】2016-06-22
(33)【優先権主張国・地域又は機関】CN
【前置審査】
(73)【特許権者】
【識別番号】514288853
【氏名又は名称】上海兆芯集成電路有限公司
(74)【代理人】
【識別番号】110002952
【氏名又は名称】弁理士法人鷲田国際特許事務所
(72)【発明者】
【氏名】▲費▼▲曉▼▲龍▼
【審査官】坂東 博司
(56)【参考文献】
【文献】特開平07-295811(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 9/30
G06F 9/34
(57)【特許請求の範囲】
【請求項1】
プロセッサであって、
複数の物理レジスタインデックスのうちの対応する1つによって、それぞれ識別される複数の物理レジスタを含む物理レジスタファイルであって、前記複数の物理レジスタは前記プロセッサの内部レジスタである、物理レジスタファイルと、
複数のエントリを有し、前記複数のエントリの各々は、複数のアーキテクチャレジスタのうちの1つ、より大きい物理レジスタインデックスおよびより小さい物理レジスタインデックスを識別するアーキテクチャ識別子を記憶するリネームテーブルと、
部分書込み命令より大きい書込みサイズを有する先行書込み命令に対する前記リネームテーブル内の既存エントリによってすでに識別されたアーキテクチャレジスタを指定する前記部分書込み命令を検出し、
フリーリストを調べ、前記複数の物理レジスタの第1の物理レジスタを割り当て、前記既存エントリの前記より小さい物理レジスタインデックスを前記第1の物理レジスタの第1の物理レジスタインデックスで更新するマッピングロジック
であって、前記フリーリストは、割り当てられていない物理レジスタに対応するインデックスのリストを記憶する、マッピングロジックと、
前記先行書込み命令の前記書込みサイズが前記部分書込み命令より大きい場合、前記部分書込み命令に対するマージ指示をセットするサイズトラッキングロジックと、
前記マージ指示に応じる前記部分書込み命令のリタイアメント中に、前記部分書込み命令の結果を前記複数の物理レジスタの第2の物理レジスタとマージし、前記第2の物理レジスタは、前記既存エントリの前記より大きい物理レジスタインデックスによって識別されるマージロジックと、を備え、前記先行書込み命令の前記書込みサイズは、前記既存エントリのより大きい書込みサイズ位置に記憶されることを特徴とするプロセッサ。
【請求項2】
前記サイズトラッキングロジックは、読出し命令が前記先行および部分書込み命令の両方にマッピングされた前記アーキテクチャレジスタとしてソースを指定するか否かを判定するために、前記既存エントリの最後書込みサイズ位置にアクセスし、前記最後書込みサイズ位置は、最後書込み命令の書込みサイズを記憶し、前記最後書込み命令は、前記先行書込み命令および前記部分書込み命令のうちの後に書込まれた1つであることを特徴とする請求項1に記載のプロセッサ。
【請求項3】
前記読出し命令の前記ソースのサイズが前記最後書込み命令の前記書込みサイズより大きい場合、前記サイズトラッキングロジックは、前記読出し命令が前記先行および部分書込み命令の両方にマッピングされた前記アーキテクチャレジスタとして前記ソースを指定するか否かを判定することを特徴とする請求項2に記載のプロセッサ。
【請求項4】
前記サイズトラッキングロジックは、読出し命令が、前記先行および部分書込み命令の両方にマッピングされた前記アーキテクチャレジスタとしてソースを指定すると判定した場合、前記サイズトラッキングロジックは、前記読出し命令を自己直列化するようにマーキングし、前記読出し命令を前記先行書込み命令に依存するようにセットすることを特徴とする請求項3に記載のプロセッサ。
【請求項5】
前記部分書込み命令のリタイアメントの時、前記第1の物理レジスタをリタイアされた非アーキテクチャ状態に移行させ、前記先行書込み命令のリタイアメントの時、前記第2の物理レジスタをリタイアされたアーキテクチャ状態に移行させるリネーミングスイッチロジックをさらに備えることを特徴とする請求項1に記載のプロセッサ。
【請求項6】
前記リネーミングスイッチロジックは、後続命令が、前記リネームテーブルの前記既存エントリに識別された前記アーキテクチャレジスタをリマッピングする時、前記第1および第2の物理レジスタをリサイクルすることを特徴とする請求項5に記載のプロセッサ。
【請求項7】
前記部分書込み命令のライトバック中に、前記部分書込み命令の前記結果を記憶する部分書込みバッファをさらに備え、前記マージロジックが、前記部分書込みバッファから前記部分書込み命令の前記結果を読出すことを特徴とする請求項1に記載のプロセッサ。
【請求項8】
前記マッピングロジックは、前記既存エントリの前記より小さい物理レジスタインデックスを更新するか否かを判定するために、前記より大きい書込みサイズ位置にアクセスすることを特徴とする請求項1に記載のプロセッサ。
【請求項9】
前記サイズトラッキングロジックは、前記マージ指示を提供するか否かを判定するために、前記より大きい書込みサイズ位置にアクセスすることを特徴とする請求項1に記載のプロセッサ。
【請求項10】
前記マージ指示は、前記部分書込み命令に対するリオーダバッファのエントリにマージビットとして記憶されることを特徴とする請求項1に記載のプロセッサ。
【請求項11】
部分書込み結果をマージしてプロセッサ内のサイズ問題を解決する方法であって、
前記プロセッサのマッピングロジックが、
フリーリストを調べ、第1の物理レジスタを物理レジスタファイルから第1の書込み命令に割り当て、前記第1の物理レジスタをアーキテクチャレジスタにマッピングするステップであって、前記プロセッサのリネームテーブルは、複数のエントリを有し、前記複数のエントリの各々は、複数のアーキテクチャレジスタのうちの1つ、より大きい物理レジスタインデックスおよびより小さい物理レジスタインデックスを識別するアーキテクチャ識別子を記憶
し、前記フリーリストは、割り当てられていない物理レジスタに対応するインデックスのリストを記憶する、マッピングするステップと、
前記プロセッサの前記マッピングロジックが、前記アーキテクチャレジスタを参照する第2の書込み命令に、第2の物理レジスタを前記レジスタファイルから割り当てるステップと、
前記プロセッサの前記マッピングロジックが、前記第2の書込み命令の書込みサイズを前記第1の書込み命令の書込みサイズと比較するステップであって、前記第1の書込み命令の前記書込みサイズは、既存エントリのより大きい書込みサイズ位置に記憶される、比較するステップと、
前記プロセッサの前記マッピングロジックが、前記比較の結果に従って前記第2の物理レジスタを前記アーキテクチャレジスタにマッピングするステップと、
前記プロセッサのサイズトラッキングロジックが、前記第2の書込み命令の前記書込みサイズが前記第1の書込み命令の前記書込みサイズよりも小さい場合、前記第2の書込み命令に対してマージ指示を提供するステップと、
前記第2の書込み命令のリタイアメントの時、前記プロセッサのマージロジックが、前記第2の書込み命令の結果を、前記マージ指示に応じて前記第1の物理レジスタにマージするステップであって、前記物理レジスタファイルは、それぞれが複数の物理レジスタインデックスの対応する1つによって識別される複数の物理レジスタを備え、前記複数の物理レジスタは、前記プロセッサの内部レジスタである、マージするステップと、を備え、
前記第1の物理レジスタおよび前記第2の物理レジスタは、前記複数の物理レジスタのレジスタであり、前記プロセッサの前記マッピングロジックが前記比較の結果に従って前記第2の物理レジスタを前記アーキテクチャレジスタにマッピングするステップは、前記第2の書込み命令の前記書込みサイズが前記第1の書込み命令の前記書込みサイズよりも小さい場合、前記第2の物理レジスタの第2のインデックスを前記アーキテクチャレジスタのリネームテーブルのエントリのより小さい位置に記憶するステップと、前記第2の書込み命令の前記書込みサイズが前記第1の書込み命令の前記書込みサイズよりも小さくない場合、前記第2の物理レジスタの前記第2のインデックスを前記エントリのより大きい位置に記憶することを特徴とする方法。
【請求項12】
前記プロセッサの前記マッピングロジックが前記第1の物理レジスタをアーキテクチャレジスタにマッピングするステップは、前記アーキテクチャレジスタに対するリネームテーブルの前記エントリの前記より大きい位置に前記第1の物理レジスタの第1のインデックスを記憶するステップを備えることを特徴とする請求項11に記載の方法。
【請求項13】
前記プロセッサの前記マッピングロジックが、前記第2の書込み命令にマッピングされたリネームテーブルのエントリに記憶された前記第2の書込み命令のサイズ値を読出すステップをさらに備えることを特徴とする請求項11に記載の方法。
【請求項14】
読出し命令が、前記第1の書込み命令および前記第2の書込み命令の両方にマッピングされた前記アーキテクチャレジスタをソースとして指定する時、前記プロセッサの前記サイズトラッキングロジックが、前記読出し命令を自己直列化するようにマーキングするステップと、前記読出し命令を第1の書込み命令に依存させるステップとをさらに備えることを特徴とする請求項11に記載の方法。
【請求項15】
前記第2の書込み命令のリタイアメントの時、前記プロセッサのリネーミングスイッチロジックが、前記第1の物理レジスタをリタイアされた非アーキテクチャ状態に移行させるステップと、
前記第1の書込み命令のリタイアメントの時、前記プロセッサの前記リネーミングスイッチロジックが、前記第2の物理レジスタをリタイアされたアーキテクチャ状態に移行させるステップと、をさらに備えることを特徴とする請求項11に記載の方法。
【請求項16】
後続命令が前記アーキテクチャレジスタをリマッピングする時、前記プロセッサの前記リネーミングスイッチロジックが、前記第1および第2の物理レジスタをリサイクルするステップをさらに備えることを特徴とする請求項15に記載の方法。
【請求項17】
前記第2の書込み命令の前記書込みサイズが、前記第1の書込み命令の前記書込みサイズよりも小さい場合、前記プロセッサの前記マッピングロジックが、前記第2の書込み命令のライトバック中に前記第2の書込み命令の結果を部分書込みバッファに記憶するステップと、前記プロセッサの前記マージロジックが、前記マージ中に、前記第2の書込み命令の結果を前記部分書込みバッファから読出すステップとをさらに備えることを特徴とする請求項11に記載の方法。
【請求項18】
前記プロセッサの前記マッピングロジックが、前記第1の書込み命令の前記書込みサイズを記憶するステップをさらに備えることを特徴とする請求項11に記載の方法。
【請求項19】
前記プロセッサの前記マッピングロジックが、前記マージ指示を、前記第2の書込み命令に対するリオーダバッファのエントリにマージビットとして記憶するステップをさらに備えることを特徴とする請求項11に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、プロセッサにおける記憶結果サイズの問題を解決するための物理レジスタリネーミングに関し、より詳細には、リタイアフェーズにおける後続部分書込み結果を、先行するより大きい書込み結果とマージすることに関する。
【背景技術】
【0002】
プロセッサは、書込み動作の結果を記憶するレジスタのセットを組み込んでいる。書込み動作は、インテル(登録商標)のx86アーキテクチャなどのプロセッサの標準命令セットアーキテクチャ(ISA)のサブセットによって実行される。書込み動作を実行する命令は、結果を記憶するための所定のアーキテクチャレジスタのセットの少なくとも1つを参照することができる。より最近のプロセッサ構成は、プロセッサ設計をより簡潔にし、より便利な設計拡張を可能にする物理レジスタファイル(PRF)リネーミングスタイルを実装する。PRFリネーミングを有するプロセッサは、演算結果を記憶するための物理レジスタファイル(PRF)と、アーキテクチャレジスタを物理レジスタにマッピングするためのリネーミング構造を組み込んでいます。PRFは、複数の物理レジスタのセットであり、それぞれがインデックスまたはポインタなどのセットの固有セットを使用して識別される。前記リネーミング構造は、対応する物理レジスタのインデックスへの命令によって参照されるアーキテクチャレジスタをマッピングする。
【0003】
ソフトウェアプログラムまたはアプリケーションの実行中に、命令の結果を記憶するためのアーキテクチャレジスタを参照する命令に遭遇すると、前記プロセッサは物理レジスタインデックスの「フリーリスト」の中から利用可能な物理レジスタを割り当て、前記選択されたインデックスを前記命令にアタッチあるいはアサインし、リネーミング構造の推定部分を更新して、前記アーキテクチャレジスタを前記選択された物理レジスタにマッピングする。前記命令が実行されると、前記インデックスを使用して前記物理レジスタにアクセスし、前記結果を記憶する。前記命令がリタイアされると、前記物理レジスタを前記指定されたアーキテクチャレジスタにマッピングするために、前記インデックスを前記リネーミング構造のリタイア部分(または異なるリネーミング構造)に移動してもよい。物理からアーキテクチャレジスタへのマッピングは、上書きまたは再定義されるまで、後続読取り動作によって使用されてもよい。物理アーキテクチャレジスタの別のセットは必要としない、代わりに、アーキテクチャ識別子などは単に物理レジスタにマッピングされる。レジスタ間で値を移動させるのではなく、単に前記インデックスを移動またはリマッピングするたけで、前記PRFリネーミングスタイルがより効率的になる。
【0004】
前記アーキテクチャが複雑なオペランドサイズを使用し、部分書込み動作がレジスタ全体の一部のみを修正することを可能にすると、サイジングの問題が生じる。前記x86アーキテクチャは、例えば、このような複雑なオペランドサイズを使用するが、本発明はx86アーキテクチャに限定されるものではない。
【発明の概要】
【発明が解決しようとする課題】
【0005】
複雑なオペランドサイズの例として、書込み命令は、64ビットレジスタの8ビット、16ビット、32ビットまたは64ビットを修正するために実行されてもよい、前記64ビットレジスタに、各より大きいサイズはより小さい書込みサイズを組み込む(レジスタの共通の端部から参照されるため)。同じアーキテクチャレジスタを参照しても、各命令は、別々の物理レジスタによってアサインされる。同じアーキテクチャレジスタへの優先書込み動作と同じまたはより大きいサイズの後続書込み動作は、それ以上修正することなくシステム内で適切に処理される。しかしながら、同じアーキテクチャレジスタを参照する読出し動作のソースが後続書込み動作よりも大きい場合、前記同じアーキテクチャレジスタへの優先書込み動作よりも小さい後続書込み動作は、完全な結果を保持しないので、前記同じアーキテクチャレジスタを参照する次の読出し動作に問題を引き起こす。
【0006】
複数のソース依存性はこの問題を解決することができるが、少なくともPRFのための2重リードポートを必要とする。別の可能な解決策としては、前記物理レジスタに記憶された値を読出し命令の前にマージすることであるが、このためには、発行された命令のすべてのソースが同じサイクルで検出される必要があり、複雑なケースでは発行の帯域幅が減少する可能性がある。この予備のマージ解決手段は、付加の非効率性を引き起こし、重大なタイミングの問題を引き起こす可能性がある。
【課題を解決するための手段】
【0007】
一実施形態によるプロセッサは、物理レジスタファイル、リネームテーブル、マッピングロジック、サイズトラッキングロジック、およびマージロジックを含むことを特徴とする。前記物理レジスタファイルは、複数の物理レジスタを含み、各物理レジスタは、対応する物理レジスタインデックスによって識別される。前記リネームテーブルは、複数のエントリを含み、各エントリは、複数のアーキテクチャレジスタのうちの1つ、より大きい物理レジスタインデックス、およびより小さい物理レジスタインデックスを識別するアーキテクチャ識別子を記憶する。マッピングロジックは、部分書込み命令より大きい書込みサイズを有する先行書込み命令に対する前記リネームテーブル内の既存エントリによってすでに識別されたアーキテクチャレジスタを指定する前記部分書込み命令を検出する。そうである場合、前記マッピングロジックは第1の物理レジスタを割り当て、前記既存エントリの前記より小さい物理レジスタインデックスを第1の物理レジスタの第1の物理レジスタインデックスで更新する。前記サイズトラッキングロジックは、前記先行書込み命令の前記書込みサイズが前記部分書込み命令より大きい場合、前記部分書込み命令に対するマージ指示をセットする。前記マージロジックは、前記マージ指示に応じる前記部分書込み命令のリタイアメント中に、前記部分書込み命令の結果を第2の物理レジスタとマージする。前記第2の物理レジスタは、前記既存エントリの前記より大きい物理レジスタインデックスによって識別される。
【0008】
前記サイズトラッキングロジックは、読出し命令が前記先行および部分書込み命令の両方にマッピングされた同じアーキテクチャレジスタとしてソースを指定するか否かを判定するために、前記既存エントリの最後書込みサイズ位置にアクセスし、前記最後書込みサイズ位置は、最後書込み命令の書込みサイズを記憶し、前記最後書込み命令は、前記先行書込み命令および前記部分書込み命令の後の1つである。前記読出し命令の前記ソースのサイズが前記最後書込み命令の前記書込みサイズより大きい場合、前記サイズトラッキングロジックは、前記読出し命令が前記先行および部分書込み命令の両方にマッピングされた同じアーキテクチャレジスタとして前記ソースを指定するか否かを判定する。
【0009】
前記サイズトラッキングロジックは、読出し命令が、前記先行および部分書込み命令の両方にマッピングされた同じアーキテクチャレジスタとしてソースを指定していると判定することができ、そうであれば、前記読出し命令を自己直列化するようにマーキングし、前記読出し命令を前記先行書込み命令に依存するようにセットする。
【0010】
前記プロセッサは、前記部分書込み命令のリタイアメントの時、前記第1の物理レジスタをリタイアされた非アーキテクチャ状態に移行させ、前記先行書込み命令のリタイアメントの時、前記第2の物理レジスタをリタイアされたアーキテクチャ状態に移行させるリネーミングスイッチロジックをさらに含んでもよい。前記リネーミングスイッチロジックは、後続命令が、前記リネームテーブルの前記既存エントリに識別された同じアーキテクチャレジスタをリマッピングする時、前記第1および第2の物理レジスタをさらにリサイクルしてもよい。
【0011】
前記プロセッサは、ライトバック中に、前記部分書込み命令の前記結果を記憶する部分書込みバッファをさらに含んでもよい。この場合、前記マージロジックが、代わりに、前記部分書込みバッファから前記部分書込み命令の前記結果を読出す。
【0012】
前記先行書込み命令の前記書込みサイズは、前記既存エントリのより大きい書込みサイズ位置に記憶されてもよい。この場合、前記マッピングロジックは、前記既存エントリの前記より小さい物理レジスタインデックスを更新するか否かを判定するために、前記より大きい書込みサイズ位置にアクセスしてもよい。また、前記サイズトラッキングロジックは、前記マージ指示を提供するか否かを判定するために、前記より大きい書込みサイズ位置にアクセスしてもよい。前記マージ指示は、前記部分書込み命令に対するリオーダバッファのエントリにマージビットとして記憶してもよい。
【0013】
部分書込み結果をマージしてプロセッサ内のサイズ問題を解決する方法であって、第1の物理レジスタをレジスタファイルから第1の書込み命令に割り当て、前記第1の物理レジスタをアーキテクチャレジスタにマッピングするステップと、前記アーキテクチャレジスタを参照して、第2の物理レジスタを前記レジスタファイルから第2の書込み命令に割り当てるステップと、前記第2の書込み命令の書込みサイズを前記第1の書込み命令の書込みサイズと比較するステップと、前記第1と第2の書込み命令を比較の結果に従って前記第2の物理レジスタを前記アーキテクチャレジスタにマッピングするステップと、前記第2の書込み命令の前記書込みサイズが前記第1の書込み命令の書込みサイズよりも小さい場合、前記第2の書込み命令に対してマージ指示を提供するステップと、前記第2の書込み命令のリタイアメントの時、前記第2の書込み命令の結果を、前記マージ指示に応じて前記第1の物理レジスタにマージするステップとを備えることを特徴とする。
【0014】
この方法は、前記アーキテクチャレジスタに対するリネームテーブルのエントリのより大きい位置に第1のインデックスを記憶するステップを含んでもよい。この方法は、前記第2の書込み命令の前記書込みサイズが前記第1の書込み命令の前記書込みサイズよりも小さい場合、前記エントリのより小さい位置に第2のインデックスを記憶するステップと、前記第2の書込み命令の前記書込みサイズが前記第1の書込み命令の前記書込みサイズよりも小さくない場合、前記第2のインデックスを前記エントリの前記より大きい位置に記憶するステップとを含んでもよい。この方法は、前記第2の書込み命令にマッピングされたリネームテーブルのエントリに記憶された前記第2の書込み命令のサイズ値を読出すステップを含んでもよい。この方法は、読出し命令が、前記第1の書込み命令および前記第2の書込み命令の両方にマッピングされた同じアーキテクチャレジスタをソースとして指定する時、前記読出し命令を自己直列化するようにマーキングするステップと、前記読出し命令を第1の書込み命令に依存させるステップとをさらに含んでもよい。
【0015】
この方法は、前記第2の書込み命令のリタイアメントの時、前記第1の物理レジスタをリタイアされた非アーキテクチャ状態に移行させるステップと、前記第1の書込み命令のリタイアメントの時、前記第2の物理レジスタをリタイアされたアーキテクチャ状態に移行させるステップとをさらに含んでもよい。この方法は、後続命令が前記リネームテーブル内の前記アーキテクチャレジスタをリマッピングする時、前記第1および第2の物理レジスタをリサイクルするステップを含んでもよい。
【0016】
前記第2の書込み命令の前記書込みサイズが、前記第1の書込み命令の前記書込みサイズよりも小さい場合、前記第2の書込み命令のライトバック中に前記第2の書込み命令の結果を部分書込みバッファに記憶するステップと、前記マージ動作中に、前記第2の書込み命令の結果を前記部分書込みバッファから読出すステップとをさらに含んでもよい。この方法は、前記第1の書込み命令の前記書込みサイズを記憶し、前記第2の書込み命令の前記書込みサイズを前記第1の書込み命令の前記記憶された書込みサイズと比較するステップを含んでもよい。この方法は、前記マージ指示を、前記第2の書込み命令に対するリオーダバッファのエントリにマージビットとして記憶するステップを含んでもよい。
【発明の効果】
【0017】
本発明の特徴および利点は、以下の説明および添付図面によってよりよく理解されるであろう。
【図面の簡単な説明】
【0018】
【
図1】
図1は、本発明の一実施形態に係る実装されたスーパースカラパイプラインプロセッサの簡略ブロック図である。
【
図2】
図2は、本発明の一実施形態に係る
図1のリネームテーブルの図である。
【
図3】
図3は、一実施形態に係る
図1のプロセッサの異なる処理段階中の命令μop1、μop2、およびμop3のそれぞれの動作を示す一連の図である。
【
図4】
図4は、一実施形態に係るサイズ分析の実行、マージ動作、命令依存性判定、および物理レジスタの状態のための、RATフェーズ中の
図1のRAT内などのフロントエンドでの動作、およびリタイアフェーズ中の
図1のROB内などのバックエンドでの動作を示すブロック図である。
【
図5】
図5は、
図4のリネーミングスイッチロジックによって制御される、
図1の物理レジスタファイルの各物理レジスタの状態を示す状態図である。
【
図6】
図6は、本発明の一実施形態に係る書込み命令のリタイアフェーズ中の部分書込み結果をマージする方法を示すフローチャート図である。
【発明を実施するための形態】
【0019】
本発明者は、複雑なオペランドサイズを使用する命令セットアーキテクチャによって引き起こされるPRFリネームスタイルのサイジングの問題を認識している。したがって、本発明者は部分書込み結果を記憶し、その結果をリタイアフェーズ中にマージするシステムおよび方法を開発しました。リネームテーブル内の各アーキテクチャエントリには、より大きい書込みインデックス位置と、より小さい書込みインデックス位置を含む。いくつかの実施形態では、各アーキテクチャエントリは、より大きい書込みサイズ位置および最後書込みサイズ位置をさらに含む。マッピングロジックは、各書込み命令に対して物理レジスタを割り当て、それに応じて前記リネームテーブルを更新する。サイズトラッキングロジックは、前記リネームテーブルを監視し、より小さい部分を先行するより大きい書込み命令として同じアーキテクチャレジスタに書込む部分書込み命令に対してマージ指示を提供する。いくつかの実施形態では、部分書込みバッファは、フルレジスタサイズの一部のみを修正する部分書込み命令の結果を一時的に記憶するために、提供される。前記マージ指示に前記第2の書込み指示が与えられている場合、前記第2およびより小さいサイズの書込み命令がリタイアすると、リタイアフェーズのマージロジックは、前記第2およびより小さいサイズの書込み命令の前記結果を、前記より大きい書込み動作の前記物理レジスタとマージする。前記アーキテクチャレジスタを読出す後続命令が、それ自体を自己直列化(SS)するようにマーキングするとは、前記読出し命令が、より小さい書込み命令およびより大きい書込み命令の両方にマッピングされるアーキテクチャレジスタとしてソースを指定する場合、前記後続命令は、実行のためにディスパッチする最も古いものとしてマーキングされ、前記より大きい書込み動作に依存するようにセットすることを意味する。
【0020】
より具体的な構成では、前記マッピングロジックは、第1の書込み命令のための割り当てられた物理レジスタのインデックスを、指定されたアーキテクチャエントリの前記より大きい書込みインデックス位置に記憶する。前記マッピングロジックは、同じアーキテクチュアレジスタに対する第2、後続、およびより小さいサイズの書込み命令を検出すると、第2の書込み命令に対する別の割り当てられた物理レジスタのインデックスを、指定されたアーキテクチャエントリの前記より小さい書込みインデックス位置に記憶する。より具体的な構成では、前記マッピングロジックは、前記第1の書込み命令の対応するサイズを、前記指定されたアーキテクチャエントリの前記より大きい書込みサイズ位置にさらに記憶する。このように、前記サイズトラッキングロジックは、前記第2の書込み命令のサイズを、前記より大きい書込みサイズ位置に記憶された前記第1の書込み命令のサイズと比較することによってサイジングの問題を検出し、そして、前記第2の書込み命令のサイズが前記第1の書込み命令のサイズよりも小さい場合、前記マージ指示を提供するので、前記第2の書込み命令のリタイアメントの時、前記部分書込み結果は前記アーキテクチャレジスタとマージされる。より具体的な構成では、前記マッピングロジックは、最後書込み命令の対応するサイズを、前記指定されたアーキテクチャエントリの前記最後書込みサイズ位置にさらに記憶し、前記最後書込み命令は、前記第1の書込み命令および前記第2の書込み命令のうちの後の1つである 。
【0021】
図1は、本発明の一実施形態に係る実装されたスーパースカラパイプラインプロセッサ100の簡略ブロック図である。本明細書で使用される「プロセッサ」という用語は、マイクロプロセッサ、中央処理装置(CPU)、処理コア、マイクロコントローラなどを含む任意のタイプの処理装置を指す。また、本明細書で使用される「プロセッサ」という用語は、システムオンチップ(SOC)などに内蔵されたものを含む、チップまたは集積回路(IC)上に集積された処理ユニットなど、任意のタイプのプロセッサ構成も含む。
【0022】
前記プロセッサ100は、命令セットアーキテクチャ(ISA)のマクロ命令、例えばx86命令セットアーキテクチャなどをキャッシュする命令キャッシュ102を含む。追加または代替命令セットアーキテクチャが考えられる。前記プロセッサ100は、前記マクロ命令を受信し、マイクロ命令に変換する命令変換器104を含む。次に、前記マイクロ命令は、マイクロ命令の依存性を生成し、プログラムオーダーでリザベーションステーション(RS)108およびリオーダバッファ(ROB)110に前記マイクロ命令を発行するレジスタエイリアステーブル(RAT)106に供給され、前記ROB110は、命令のインオーダーリタイアメントを保証する前記RAT106から発行されたすべての命令のエントリを記憶する。マイクロ命令に対して示された代表的なエントリ117は、“μopx”として示されている。前記RAT106から発行された前記マイクロ命令は、典型的にはマイクロ命令と呼ばれるが、より一般的には、ここでは単に“命令”と呼ばれる。
【0023】
RS108は、ディスパッチャとも呼ばれ、複数の実行ユニット112のうちの適切なものに命令をディスパッチする。特に図示していないが、前記実行ユニット112は、整数算術論理演算装置(ALU)などのような1つまたは複数の整数実行ユニット、MMXやSSEユニットなどの単一命令多重データ(SIMD)実行ユニットを含むような1つまたは複数の浮動小数点実行ユニット、およびメモリオーダーバッファ(MOB)などを含んでもよい。書込み命令の結果は、ライトバック(WB)経路を介して物理レジスタファイル(PRF)114内の物理レジスタに書き込まれる。前記書込み命令に対応する前記ROB110のエントリは、前記結果を書込むための前記物理レジスタへのインデックスを記憶する。いくつかの実施形態では、各部分書込み命令の前記ROB110エントリは、部分書込み命令が前記RAT106を通過し、前記マージ指示MIがアサートされた時、RAT106によってセットされるマージ(M)ビットをさらに記憶する。一実施形態では、前記部分書込み命令のリタイアメント中にマージを行う時、PRF114に対するリードポートを必要とする圧力を解放するために、ライトバック中に部分書込み結果を一時的に記憶するための部分書込みバッファ113がさらに含まれる。他の実施形態では、前記PRF114の前記リードポートが十分である場合、前記部分書込みバッファ113を省略することができ、前記部分書込み結果は、PRF114にのみ記憶される。一実施形態では、マージが指示されなくても、各部分書込み命令の前記結果は、部分書込みバッファ113に記憶される。本明細書でさらに記載されたように、前記ROB110は、マージビットがセットされたことに応じて、前記部分書込み結果を前記PRF114内の物理レジスタにマージするマージロジック115を含む。
【0024】
前記RAT106は、リネームテーブル116、マッピングロジック118、フリーリスト120、及びサイズトラッキングロジック122を含む。前記リネームテーブル116は、アーキテクチャレジスタを前記PRF114の前記物理レジスタに相互参照またはマッピングする。フリーリスト120は、割り当てられていない物理レジスタに対応するインデックスのリストを記憶する。書込み動作が結果を記憶するためのアーキテクチャレジスタを参照する時、前記マッピングロジック118は前記フリーリスト120を調べ、物理レジスタを選択して割り当てる。次に、前記マッピングロジック118は、前記割り当てられた物理レジスタの前記インデックスを、前記書込み命令で参照されたアーキテクチャレジスタに対応する前記リネームテーブル116のエントリに記憶する。このように、前記物理レジスタは、前記アーキテクチャレジスタと前記書込み命令の両方に最初でマッピングされる。さらにここで記載されたように、前記リネームテーブル116の各エントリは、同じアーキテクチャレジスタのより小さい及びより大きい書込みのために、物理レジスタインデックスを記憶するための位置を含む。前記サイズトラッキングロジック122は、第1の物理レジスタ(および/または前記部分書込みバッファ113、もし前記部分書込みバッファ113が提供されたら)に記憶された部分書込み結果で、マージ条件を検出する。前記部分書込み結果は、第1の物理レジスタと同じのアーキテクチャレジスタにマッピングされた第2の物理レジスタとマージされる。前記マージ条件が検出されると、前記サイズトラッキングロジック122は、前記部分書込み命令用の前記MI信号をアサートし、前記RAT106は、前記ROB110内で前記対応するエントリのMビットをセットする。前記Mビットは、命令情報がROB110エントリにプッシュされる前に予めセットされてもよく、前記ROB110の前記エントリ内で直接セットされてもよいことに留意されたい。一実施形態では、部分書込み命令の書込みサイズと、先行するより大きい書込み命令と比較し、比較結果で前者の方が小さい場合、前記マージ条件は満たされる。
【0025】
図2は、本発明の一実施形態に係るリネームテーブル116の図である。図示された構成におけるx86などのプロセッサ100用のISAは、複雑なオペランドサイズを使用して、各アーキテクチャレジスタへの部分書込みを可能にする。前記x86アーキテクチャは、複数のサイズでアクセスされることができるいくつかのアーキテクチャレジスタを含む。64ビットバージョンは、RAX、RBX、RCX、RDXなどのレジスタ表記を含み(64ビットは、プリペンドされた“R”表記を使用する)、これらの64ビット表記のいずれかを使用する書込み動作は、レジスタ全体への書込みとなる。これらのレジスタは、それぞれEAX、EBX、ECX、EDXなどの32ビット表記(32ビットは、プリペンドされた“E”表記を使用する)を含むと同様に、それぞれAX、BX、CX、DXなどの16ビット表記も含む(16ビットは、プリペンドされた文字なしのレジスタ名のみを使用する)。8ビットの表記も定義できるが、それぞれ16ビットバージョンの最上位バイト(MSB)または最下位バイト(LSB)になるので、これ以上は説明しない。前記リネームテーブル116内の前記アーキテクチャ識別子は、所与のレジスタまたはその一部に対する単一の参照を含むだけでよい。
【0026】
前記リネームテーブル116の新規な構成について論じる前に、まず従来の構成について説明する。従来の構成では、各テーブルエントリの推論部分は、割り当てられた物理レジスタのインデックスを記憶するための単一の位置のみを含み、アーキテクチャ識別子は、部分レジスタ表記を含む各レジスタを識別することができる。従来の構成の動作において、前記マッピングロジック118は、アーキテクチャレジスタを参照する書込み命令を検出し、書込み動作の結果を記憶するための物理レジスタを選択して割り当て、前記リネームテーブル116を参照して前記アーキテクチャレジスタにエントリが既に存在するか否かを判定する。前記エントリがまだ存在しない場合、前記マッピングロジック118は、前記リネームテーブル116内に新しいエントリを割り当て、アーキテクチャレジスタ識別子を前記新しいエントリのARCH位置に書き込む。次いで、前記マッピングロジック118は、割り当てられた物理レジスタのインデックスを、前記新しいエントリまたは更新されたエントリの推測部分に書き込む。リタイア位置はまだ決定されてない。前記書込み命令が同じアーキテクチャおよび物理レジスタマッピングでリタイアすると仮定すると、前記マッピングロジック118は、前記物理レジスタの前記インデックスを推定位置からそのアーキテクチャレジスタのリタイア位置に移動または他の方法でコピーすることによってアーキテクチャマッピングを変更する。様々な構成では異なる推定且つリタイアされたリネームを含んでもよいが、動作は実質的に同様であることに留意されたい。
【0027】
従来の構成は、一連の命令が複雑なオペランドサイズを使用する場合、複数の物理レジスタは同じアーキテクチャレジスタの一部を記憶することを課題として提示する。例として、次の命令パターンを検討する。
μop1) MOV EAX, EBX
μop2) MOV AX, CX
μop3) MOV ESP, EAX
各命令は、マイクロ命令またはマイクロ動作(μop)として示されている。第1の物理レジスタが第1のMOV命令(μop1)に割り当てられ、前記割り当てられた物理レジスタがEAXアーキテクチャレジスタにマッピングされる。前記第1のMOV命令μop1は、プロセッサ100に、32ビットレジスタEBXのコンテンツを32ビットレジスタEAXに移動するように命令する。動作中、EBXに割り当てられた物理レジスタのコンテンツは、EAXに割り当てられた物理レジスタに移動される。第2の物理レジスタは、第2のMOV命令(μop2)に割り当てられ、AXアーキテクチャレジスタにマッピングされる。前記第2のMOV命令μop2は、プロセッサ100に、16ビットレジスタCXのコンテンツを16ビットレジスタAXに移動するように命令する。動作中、前記コンテンツは、前記マッピングに従って1つの物理レジスタから別の物理レジスタに移動される。しかし、アーキテクチャレジスタAXは、前記EAXアーキテクチャレジスタの最下位部分(下半部)であるため、前記EAXレジスタのコンテンツはμop2によって効果的且つ意図的に修正される。したがって、前記第1および第2の物理レジスタのいずれも、前記EAXアーキテクチャレジスタの完全なコンテンツを保持しない、その代わりに、それぞれに一部が記憶される。第3の物理レジスタは、第3のMOV命令(μop3)に割り当てられ、ESPアーキテクチャレジスタ(例えば、スタックポインタレジスタ)にマッピングされる。前記第3のMOV命令は、EAXの前記コンテンツを意図的にESPに移動する。しかし、EAXの前記コンテンツは2つの異なる物理レジスタ間に分配されるため、μop3は単一の物理レジスタからEAXの前記完全なコンテンツをフェッチできない。このような条件を解決するには、複数のソース依存性やプリマージ動作など、さまざまな方法が使用されるが、これらの方法には重大な欠点がある。
【0028】
本明細書で記載されたように、リタイアフェーズ中に部分書込み結果をマージするシステムおよび方法は、同じ欠点を導入することなく、記憶結果サイズの問題の条件を解決する。オペレーションは、本明細書でさらに記載されたように、前記リネームテーブル116およびプロセッサ100の他の部分に対して修正される。前記リネームテーブル116の各行は、参照されたアーキテクチャレジスタに対応するエントリを形成し、各エントリは、そのエントリの対応する値を記憶するための複数の記憶位置を含む。各エントリについて、最初の列(左側)は前記エントリのアーキテクチャレジスタ(ARCH)識別子を記憶するための位置を含み、次の3つの列は前記エントリの推定動作値を記憶するための位置を含み、最後の列は前記エントリに対する動作の前記RETIREフェーズに対する物理レジスタインデックスを記憶するための位置を提供する。これらの推定演算値は、より大きい書込み命令に対する物理レジスタインデックスを記憶するためのLAGER位置と、より小さい書込み命令に対する物理レジスタインデックスを記憶するためのSMALLER位置とを含む。いくつかの実施形態では、これらの推定演算値は、前記エントリの最後書込みサイズを示すサイズ値を記憶するためのLAST WRITE SIZE位置をさらに含む。
【0029】
図示のように、第1のエントリ202は、インデックスPRA(または単に物理レジスタPRAともいう)によって識別された物理レジスタをアーキテクチャレジスタEBXにマッピングし、第2のエントリ204は、物理レジスタPRBを前記アーキテクチャレジスタECXにマッピングする。これらのマッピングは、それ以降完了した優先命令の結果であってもよく、インデックスPRAおよびPRBを記憶するエントリ202および204の前記RETIRE位置は、それぞれEBXが物理レジスタPRAにマッピングされ、ECXが物理レジスタPRBにマッピングされることを示す。第3のエントリ206および第4のエントリ208は、上述した前記MOV命令μop1、μop2およびμop3の結果を示す。μop1に応じて、前記マッピングロジック118は、前記エントリ206を前記リネームテーブル116内に割り当て、識別子EAXをARCH位置に記憶して、32ビット構成の前記アーキテクチャレジスタEAXを識別する。64ビット構成の場合、前記識別子は代わりにRAXであってもよい。前記マッピングロジック118は、前記フリーリスト120を参照し、インデックスPRCを使用してアクセスされた利用可能な物理レジスタを割り当て、前記エントリ206のLARGER位置に前記インデックスPRCを記憶する。前記マッピングロジック118は、さらに、前記書込みのサイズを32ビットとして検出し、サイズ値SZ1を最後書込みサイズ(これまでの第1の書込みサイズ)が32ビットであることを示す前記エントリ206の前記LAST WRITE SIZEに記憶する。前記エントリ206の前記SMALLERおよびRETIRE位置はまだ定義されていない。このようにして、インデックスPRCによって識別された前記物理レジスタは、前記アーキテクチャレジスタEAXおよび前記第1のMOV命令μop1に推測的にマッピングされる。
【0030】
前記第2のMOV命令μop2は、前記アーキテクチャレジスタEAXの最下位部分である前記アーキテクチャレジスタAXを参照する。前記マッピングロジック118が、前記第2のMOV命令μop2(16ビット)の前記書込みサイズが前記第1のMOV命令μop1(32ビット)より小さいことを検出すると、前記マッピングロジック118は、前記フリーリスト120を参照し、インデックスPRDを使用してアクセスされた利用可能な物理レジスタを割り当て、前記エントリ206の前記SMALLER位置に前記インデックスPRDを記憶する。なお、前記マッピングロジック118が、前記第2のMOV命令μop2(例えば、μop2の前記書込みサイズが32ビットである場合)の前記書込みサイズが第1のMOV命令μop1(32ビット)よりも大きいかまたは等しいことを検出する場合、代わりに前記インデックスPRCを上書きするために、前記インデックスPRCを前記エントリ206の前記LARGER位置内に記憶する。すなわち、前記エントリ206の前記LARGER位置は、常に同じアーキテクチャレジスタEAXを参照する最大書込み命令のサイズを記録する。前記マッピングロジック118は、さらに、前記エントリ206の前記LAST WRITE SIZEの値SZ1を、前記アーキテクチャレジスタEAXを参照する前記書込み命令の前記最後書込みサイズが16ビットであることを示す値SZ2に更新する。図示のように、SZ1はSZ2に置き換えられている。前記エントリ206の前記RETIRE位置は未だ定義されていない。μop3に応じて、前記マッピングロジック118は、前記リネームテーブル116内に前記エントリ208を割り当て、前記アーキテクチャレジスタESPを識別するために識別子ESPをARCH位置に記憶する。前記マッピングロジック118は、前記フリーリスト120を参照し、インデックスPREを使用してアクセスされた利用可能な物理レジスタを割り当て、前記エントリ208のLARGER位置に前記インデックスPREを記憶する。前記マッピングロジック118は、さらに、前記書込みのサイズを32ビットとして検出し、エントリ208の前記LAST WRITE SIZEにサイズ値SZ3を記憶する。
【0031】
従来の構成と同様に、前記第1および第2の物理レジスタPRCおよびPRDのいずれも、前記EAXアーキテクチャレジスタの完全なコンテンツを保持していない。前記第3と最後のMOV命令μop3は、単一の物理レジスタからEAXの完全なコンテンツをフェッチできない。前記サイズトラッキングロジック122は、前記第2のMOV命令μop2の書込みサイズが前記第1のMOV命令μop1より小さい場合に前記マージ条件を検出すると、前記リネームテーブル116を監視する。前記先行およびより大きい書込み結果は、前記物理レジスタPRCに記憶されるが、前記後続、より小さい書込み結果は、前記物理レジスタPRDに記憶される。したがって、前記サイズトラッキングロジック122は、前記第2のMOV命令μop2に対する前記マージ指示MIを提供する。前記マージ指示は、指示されると、μop2がRATフェーズを通過する時、前記第2のMOV命令μop2に割り当てられたROB110の対応するエントリ内にMビットとして記憶される。
【0032】
ROBエントリのMビットがセットされている場合、前記部分書込み命令がリタイアすると、マージ動作が呼び出される。本明細書でさらに記載されたように、前記マージロジック115は、前記ROBエントリのMビットセットを検出し、μop3が実行される前に、前記物理レジスタPRDの部分結果を前記物理レジスタPRCでマージする。一実施形態では、μop2が、書込みサイズが前記LARGER位置に対応する前記書込み命令のサイズよりも小さい部分書込み命令であると検出された場合、μop2のライトバック段階中に前記部分結果は、物理レジスタPRDまたは部分書込みバッファ113(提供されている場合)またはその両方に記憶される。PRF114のリードポートの要求に対する圧力を解放するための前記部分書込みバッファ113が提供された実施形態では、RPDから後述の結果を読出す代わりにマージ動作を行うと、前記マージロジック115は、前記部分書込みバッファ113からμop2の前記部分書込み命令の結果を読出す。前記部分書込みバッファ113が提供されていない他の実施形態では、前記部分結果は、μop2の前記ライトバック段階中にPRF114内の物理レジスタPRD内にのみ記憶される。そのような実施形態では、前記マージロジック115は、前記マージ動作を行う時、前記部分書込み命令μop2の結果をPRF114内の前記物理レジスタPRDから読出す。マージされた前記部分書込み結果のサイズは、ROB110内の前記対応するエントリに提供された前記部分書込み命令μop2自体によって示される。
【0033】
図3は、一実施形態に係るプロセッサ100の異なる処理段階中の命令μop1、μop2、およびμop3のそれぞれの動作を示す一連の図である。RATフェーズ302は、前記RAT106によって実行される動作および結果を示す。各命令は、例えば、命令識別子ID、ソース識別子SRC、デスティネーション識別子DST、および自己直列化フィールドSSなどの複数のフィールドを含む。図示されていないが、マージ指示ビットMを記憶するためにマージフィールドが含まれてもよい。前記サイズトラッキングロジック122は、読出し命令が単一の物理レジスタ内に含まれていないが複数の物理レジスタに分散されている値を読出し、前記値を前記読出し動作の前に一緒にマージする必要があるサイジングの問題を検出する。そうである場合、サイズトラッキングロジック122は、SSフィールド内の前記値をロジック“1”としてアサートすることによって、前記命令を自己直列化するようにマーキングする。追加フィールドは含まれてもよいが図示せず。また、任意の与えられた命令は、すべてのフィールドを使用しなくてもよい。例えば、レジスタまたはメモリ位置に記憶する即値を含むストア命令は、デスティネーション値を含んでもよいが、ソース値は含まない。
【0034】
前記RATフェーズ302に示すように、μop1のソースはEBXにマッピングされた物理レジスタPRAであり、デスティネーションはEAXにマッピングされた物理レジスタPRCである。μop1は自己直列化するようにマーキングされていないため、SS値は“0”である。μop2のソースはECXにマッピングされた前記物理レジスタPRBであり、デスティネーションはEAXにマッピングされた前記物理レジスタPRDである。また、μop2は自己直列化するようにマーキングされていないため、SS値は“0”である。μop3のソースはEAXにマッピングされた前記物理レジスタPRCであり、デスティネーションはESPにマッピングされた前記物理レジスタPREである。前記サイズトラッキングロジック122が、前記リネームテーブル116から、μop3(32ビット)のソースのサイズがLAST WRITE SIZE値SZ2(16ビット)より大きいことを検出した場合、前記読出し命令μop3がそのソースEAXをμop2とμop1の両方のデスティネーションにマッピングされっていると指定することを判定する。すなわち、2つの異なる物理レジスタPRCおよびPRDは、前記最後書込み命令μop2の前記物理レジスタPRDだけでなく、前記命令μop3によって読出される値を保持する。その場合、前記サイズトラッキングロジック122は、μop3を自己直列化するようにマーキングし、そのSS値が“1”になるようにする。μop3がRS108に発行されると、前記RS108は、前記命令μop1およびμop2がリタイアされる前にμop3をディスパッチして実行しない。さらに、前記サイズトラッキングロジック122は、μop3をμop2にではなく、μop1に依存するように設定する。
【0035】
RS/EU/WBフェーズ304は、各命令μop1~μop3の前記RS108内、前記EU112内およびWB中における動作の結果をまとめて示す。前記物理レジスタPRA、PRB、PRC、PRDおよびPREを含むPRF114の一部が示されている。μop1の実行中に、クロスハッチングされたシェーディングで示された前記物理レジスタPRAの前記コンテンツは、前記物理レジスタPRCに移動される。μop2の実行中に、斜線で示された前記物理レジスタPRBの前記部分コンテンツは、前記物理レジスタPRDに移動される。前記部分書込みバッファ113が含まれるいくつかの実施形態では、後続マージ動作が示されている場合、前記後続マージ動作を容易にするために、前記部分コンテンツも部分書込みバッファ113内の位置305に移動される。一実施形態では、前記部分書込みバッファ113が一杯になっている場合、前記プロセッサ100のフロントエンドは、前記部分書込みバッファ113中の記憶位置が利用可能になるまで一時的に停止してもよい。μop3の実行中、前記物理レジスタPRCの前記コンテンツは、前記物理レジスタPREに移動される。しかし、μop3が、RETIREフェーズ306中にマージ動作が実行されるまで、μop3のソースがLAST WRITE SIZE値SZ2よりも大きいと検出されると、μop3の実行は発生しない。もちろん、μop3のソースがLAST WRITE SIZE値SZ2より大きくないと検出された場合、μop3はμop2と同じ、最後書込み命令に依存するようにセットされる。
【0036】
前記RETIREフェーズ306は、μop1のリタイアメント中に、前記物理レジスタPRC(インデックスPRCを有する)に対するインデックスPRCを、前記リネームテーブル116内の前記エントリ206のRETIRE位置にコピーすることによって、EAXのアーキテクチャマッピングを変更することを示す。μop2のリタイアメント中に、前記マージロジック115がμop2のROBエントリ内にセットされた前記Mビットを検出すると、前記マージロジック115は、前記物理レジスタPRDの部分コンテンツまたは前記部分書込みバッファ113の位置305に記憶された部分コンテンツを前記物理レジスタPRCの前記対応する部分にマージする。μop2の前記ROBエントリ内に記憶されている値は、マージされた前記部分書込みのサイズを示す。μop3がそのROBエントリに従って前記物理レジスタPRCのコンテンツを前記物理レジスタPREに移動させると、前記物理レジスタPREが正しい結果を記憶するように、前記物理レジスタPRCのコンテンツは、前記部分書込みバッファ113から(または前記物理レジスタPRDから)のμop2の部分書込みとマージされる。μop3のリタイアメント中、前記ROB110は、前記物理レジスタPREに対する前記インデックスPREを、前記リネームテーブル116内の前記エントリ208のRETAIRE位置にコピーすることによって、ESPの前記アーキテクチャマッピングを変更する。このように、前記アーキテクチャレジスタESPは、前記命令μop1~μop3の前記正しい結果を記憶する前記物理レジスタPREにマッピングされる。
【0037】
一実施形態では、前記部分書込みバッファ113は、前記ROB110の各前記エントリに対して提供されるROBインデックスによって索引付けされる。前記部分書込みバッファ113の前記エントリは、前記RATフェーズ302で割り当てられ、先行する前記エントリを占有するために前記ROBインデックスを取る。前記WBフェーズの間、その結果は、前記命令の前記ROBインデックスに従って、部分書込みバッファ113に書込まれる。さらに、μop2の前記マージされたサイズ、μop1の前記マージされたサイズなど、前記マージ動作が必要とする任意の追加情報は、前記リタイアされた命令のROBエントリ内に記憶される。前記ROB110はμop2がリタイアしていることを検出し、前記マージロジック115がμop2に対する前記ROBエントリの前記Mビットがセットされていることを検出する場合、マージロジック115は前記マージ動作を行う。前記サイズトラッキングロジック122が、例えば、μop2の前記書込みサイズSZ2がμop1の前記より大きい書込みサイズSZ1より小さい時などのマージ条件が指示された場合、μop2の前記ROBエントリに前記Mビットをセットすることに留意されたい。
【0038】
図2にさらに示されるようないくつかの実施形態では、前記先行するより大きい書込み命令(例えば、μop1)の前記書込みサイズは、前記エントリ206のLARGER WRITE SIZE位置に記憶され、前記先行するより大きい書込み命令(例えば、μop1)によって少なくとも1回、そのLARGER位置が書込まれる。現在書込み命令(例えば、μop2)の書込みサイズは、前記LARGER WRITE SIZEと比較され、前記現在書込み命令の書込みサイズがより小さい場合、前記SMALLER位置は、μop2の前記物理レジスタPRDの前記インデックスによって更新され、前記μop2のROBエントリの前記Mビットは、μop2が部分書込み命令であり、前記RETIREフェーズ306中にマージ動作を必要とすることを示すようにセットされる。
【0039】
図4は、サイズ解析、マージ動作、命令依存性判定、および物理レジスタの状態を実行するためのRATフェーズ302中のRAT106内などのフロントエンドでの動作、およびRETIREフェーズ306中のROB110内などのバックエンドでの動作を示すブロック図である。前述したように、サイズトラッキングロジック122は、リネームテーブル116の変化を監視し、RATフェーズ302中のROBエントリ内のMI信号をアサートしてマージ動作を指示する。リネームスイッチロジック402はまた、リネームテーブル116およびサイズトラッキングロジック122からの情報を追跡し、命令の依存性をセットし、物理レジスタをフリーリスト120にリサイクルするように前記マッピングロジック118に指示する。前記マージロジック115は、(マージビットMなどを介して)前記MI信号を検出するリタイア解析ロジック404と、前記PRF114および前記部分書込みバッファ113の異なる物理レジスタ間のマージ動作を容易にして制御するマージ制御ロジック406とを含む。前記リタイア分析ロジック404はまた、前記RETIREフェーズ306中に前記アーキテクチャレジスタマッピングを更新するなどによって、前記マッピングロジック118と通信して、前記リネームテーブル116を更新する。
【0040】
図5は、前記リネーミングスイッチロジック402によって制御される前記PRF114の前記物理レジスタのそれぞれの状態を示す状態図である。各物理レジスタは、アイドル(I)状態502、未完了(NC)状態504、完了(C)状態、リサイクルに対するリタイアされた待機(RR)状態508、およびリタイアされたアーキテクチャ(RA)状態510を有する。前記フリーリスト120内で識別された各物理レジスタは、最初は前記I状態502にある。物理レジスタが割り当てられると、前記レジスタの状態は前記NC状態504に移行する。前記ライトバック(WB)フェーズ中に前記対応する書込み命令を実行した後、前記対応するレジスタの状態は前記C状態506に移行する。通常動作中、前記対応する命令のリタイアメントの時、前記レジスタの状態は前記RA状態510に移行する。例えば、前記リネームテーブル116に示され、前記アーキテクチャレジスタEBXおよびECXにマッピングされた前記物理レジスタPRAおよびPRBは、前記RA状態510にある。後続命令のリタイアメントの時、前記アーキテクチャレジスタを別の物理レジスタに再定義する前記後続命令は、同じアーキテクチャレジスタに先行にマッピングされた前記物理レジスタの状態をリサイクルまたは割り当てを解除し、前記I状態502に戻す。
【0041】
前記RR状態508は、前記対応する命令がリタイアされた時、前記RA状態510にリタイアされない部分書込み結果を保持する物理レジスタに対する追加状態である。基本的に、これは、前記物理レジスタがアーキテクチャレジスタにマッピングされず、代わりに結果を転送するためのテンポラリレジスタとして機能することを意味する。一例として、前記リネームテーブル116のエントリ206に示された前記物理レジスタPRDは、μop2のリタイアメントの時、前記アーキテクチャレジスタEAXにマッピングされないため、前記RA状態510に移行しない。代わりに、前記物理レジスタPRDは、μop2のリタイアメントの時、前記RR状態508に移行する。前記RR状態508または前記RA状態510のいずれかの前記物理レジスタは、後続書込みが同じアーキテクチャレジスタに発生する時、従来の方法と同じ方法でリサイクルされる。例えば、前記アーキテクチャレジスタEAX(前記リネームテーブル116の前記エントリ206内に示されているように、現在前記物理レジスタPRCにマッピングされている)への後続書込みにより、前記物理レジスタPRCおよびPRDの両方がリサイクルされる。前記プロセッサ100のフラッシュの時、前記NC状態504またはC状態506下の任意の物理レジスタは前記I状態502に戻される。
【0042】
第1のステップ602において、第1の物理レジスタがPRF114から第1の書込み命令に割り当てられる。 前の例では、前記マッピングロジック118は、前記第1の書込み命令μop1に前記物理レジスタPRCを割り当てる。次のステップ604において、前記第1の物理レジスタがアーキテクチャレジスタにマッピングされる。前記命令、例えばμop1は、アーキテクチャレジスタ、例えばEAXを指定し、PRCとEAXとの間のマッピングは、前記リネームテーブル116内に記憶される。EAXのためのマッピングが以前に存在しなかったと仮定すると、新しいエントリ(例えばエントリ206)は前記リネームテーブル116内に作成され、前記インデックスPRCは前記エントリのLARGER位置に書込まれる。前記LARGER位置は、前記第1の書込み命令に対する前記物理レジスタの前記インデックスと、同じサイズまたはより大きい後続書込み命令の書込みに使用される。
【0043】
次のステップ606において、第2の物理レジスタが前記PRF114から第2の書込み命令に割り当てられる。上記の例を続けると、前記マッピングロジック118は、前記物理レジスタPRDを前記第2の書込み命令μop2に割り当てる。前記第2の書込み命令が同じアーキテクチャレジスタ(例えば、EAX、またはそのサブセット、またはそのスーパーセット)を参照すると仮定すると、次のステップ608において、前記第2の書込み命令の前記書込みサイズが前記第1の書込み命令の前記書込みサイズと比較される。次のステップ610において、前記第2の物理レジスタが前記第1および第2の命令のサイズと比較した結果に従って、前記アーキテクチャレジスタにマッピングされる。前記第2の書込み命令のサイズが前記第1の書込み命令のサイズと同じかまたはそれより大きい場合、前記第1の書込み命令に対する前記エントリ内のインデックスは、前記第2の書込み命令に対する前記インデックスによって上書きされる。しかし、前記第2の書込み命令のサイズが前記第1の書込み命令のサイズよりも小さい場合、前記第2の書込み命令に対する前記インデックスは、同じアーキテクチャレジスタに対する同じエントリの前記SMALLER位置に書込まれる。前記リネームテーブル116に示すように、例えば、前記第2の書込み命令μop2に対する前記インデックスPRDは、EAXに対する前記エントリ206の前記SMALLER位置に記憶される。
【0044】
次のステップ612で述べたように、前記第2の書込み命令のサイズが前記第1の書込み命令のサイズよりも小さい場合、前記第2の書込み命令に対してマージ指示が提供される。
図1に示すように、マージ指示信号MIは、この条件が満たされた時にアサートされる。図示の一実施形態では、前記MI信号を使用して、前記第2の書込み命令μop2に対する前記ROB110のエントリにマージビットMをセットする。最後のステップ614において、前記第2の書込み命令のリタイアメントの時、前記第2の書込み命令の結果が前記マージ指示に応じて第1の物理レジスタとマージされる。
図3に示すように、前記第2の書込み命令μop2の前記RETIREフェーズ306中に、例えば、前記第2の書込み命令μop2に対する前記物理レジスタPRDに記憶された前記部分結果は、前記マージロジック115によって、前記第1の書込み命令μop1にアサインされた前記物理レジスタPRCとマージされる。あるいは、前記第2の書込み命令μop2の前記部分結果は、提供されている場合、前記部分書込みバッファ113に記憶され、代わりに前記部分結果は前記部分書込みバッファ113から検索される。
【0045】
本方法は、後続読出し命令(例えば、μop3)を自己直列化するようにマーキングし、前記読出し命令がソースと同じアーキテクチャを指定する時、前記第1の書込み命令に依存するようにする追加ステップを含んでもよい。本方法は、前記第2の書込み命令のリタイアメントの時、前記第1の物理レジスタをリタイアされた非アーキテクチャ状態に移行させ、前記第1の書込み命令のリタイアメントの時、前記第2の物理レジスタをリタイアされたアーキテクチャ状態に移行させることを含んでもよい。本方法は、後続命令が前記アーキテクチャレジスタを前記リネームテーブル内にリマッピングする時、前記第1および第2の物理レジスタをリサイクルすることを含んでもよい。本方法は、前記第2の書込み命令の前記書込みサイズが前記第1の書込み命令の前記書込みサイズよりも小さい場合、前記第2の書込み命令のライトバック中に前記第2の書込み命令の結果を部分書込みバッファに記憶し、前記マージ動作中に前記第2の書込み命令の結果を前記部分書込みバッファから読出すことを含んでもよい。本方法は、前記第1の書込み命令の前記書込みサイズを記憶し、前記第2の書込み命令の前記書込みサイズを前記第1の書込み命令の前記記憶された書込みサイズと比較することを含んでもよい。本方法は、前記マージ指示を、前記第2の書込み命令に対するリオーダバッファ(例えば、ROB110)のエントリ内にマージビットとして記憶することを含んでもよい。
【0046】
前述の説明は、当業者が特定の用途およびその要件の文脈内で提供される本発明を製造および使用することを可能にするために提示されたものである。本発明は、その特定の好ましいバージョンを参照してかなり詳細に記載されているが、他のバージョンおよび変形も可能であり、考えられる。好ましい実施形態に対する様々な変更が、当業者には明らかであり、本明細書で定義された一般的な原理は、他の実施形態に適用されてもよい。例えば、本明細書で説明された前記ブロックは、ロジックデバイスまたは回路などを含む任意の適切な方法で実装され得る。当業者であれば、開示された概念および特定の実施形態を、本発明の精神および範囲から逸脱することなく、本発明の同じ目的を実行するための他の構造を設計または変更するための基礎として容易に使用できることを理解すべきである。したがって、本発明は、本明細書に示され、記載された特定の実施形態に限定されることを意図するものではなく、本明細書に開示される原理および新規な特徴と一致する最も広い範囲が与えられるべきである。
【0047】
請求項は、後述の通りである。
【符号の説明】
【0048】
100…プロセッサ
102…命令キャッシュ
104…命令変換器
106…レジスタエイリアステーブル
108…リザベーションステーション
110…リオーダバッファ
112…実行ユニット
113…部分書込みバッファ
114…物理レジスタファイル
115…マージロジック
116…リネームテーブル
117…エントリ
118…マッピングロジック
120…フリーリスト
122…サイズトラッキングロジック
202…第1のエントリ
204…第2のエントリ
206…第3のエントリ
208…第4のエントリ
302…RATフェーズ
304…RS/EU/WBフェーズ
305…位置
306…RETIREフェーズ
402…リネーミングスイッチロジック
404…リタイア解析ロジック
406…マージ制御ロジック
502…アイドル状態
504…未完了状態
506…完了状態
508…リサイクルに対するリタイアされた待機状態
510…リタイアされたアーキテクチャ状態
MI…マージ指示
WB…ライトバック
SZ1、SZ2…サイズ値