(57)【要約】  中間結果は、レジスタリネーミングリソースおよび制御ロジックを用いて拡張命令の構成命令間で送出される。第１の構成命令は中間結果を生成し、構成命令リネームテーブル内のＰＲＮが割り振られ、識別された物理レジスタに中間結果を書き込む。第２の構成命令は、構成命令リネームテーブル内で自動照合を行い、物理レジスタから中間結果を読み出す。構成命令リネームロジックは、パイプラインを通じて構成命令をトラックし、構成命令リネームテーブルエントリを削除し、第２の構成命令が中間結果を読み出した時に、フリーリストにＰＲＮを戻す。
2010517180.tif 000002
【特許請求の範囲】
【請求項１】
拡張命令を実行する方法であって、
二あるいはそれ以上の別々に実行可能な構成命令に前記拡張命令を変換することと、
中間結果を生成する第１の構成命令にプールから物理レジスタ番号を割り振ることと、
割り振られた物理レジスタ番号を中間結果を取得する第２の構成命令に関連付けることと、
を具備する方法。
【請求項２】
前記中間結果を生成するために前記第１の構成命令を実行することをさらに具備する請求項１記載の方法。
【請求項３】
前記第２の構成命令を実行することをさらに具備し、それによって中間結果が前記第１の構成命令から前記第２の構成命令にオペランド転送される請求項２記載の方法。
【請求項４】
前記物理レジスタ番号により識別されたレジスタに中間結果を蓄積することをさらに具備する請求項２記載の方法。
【請求項５】
前記第２の構成命令を実行し、前記物理レジスタ番号により識別されたレジスタから中間結果を検索することをさらに具備する請求項４記載の方法。
【請求項６】
前記第１の構成命令にプールから物理レジスタ番号を割り振ることは、物理レジスタ番号に第１の構成命令の識別名を割り振る構成命令リネームテーブル内でエントリを創ることを具備する請求項１記載の方法。
【請求項７】
前記物理レジスタ番号が利用可能な物理レジスタのリストから選択され、前記リストから取り除かれる請求項６記載の方法。
【請求項８】
前記割り振られた物理レジスタ番号を第２の構成命令に関連付けることは第１の構成命令識別名を使用して構成命令リネームテーブル内で自動照合を行うことを具備する請求項７記載の方法。
【請求項９】
前記第２の構成命令が中間結果を読み出した後に、前記プールに物理レジスタ番号をリリースすることをさらに具備する請求項８記載の方法。
【請求項１０】
前記プールに物理レジスタ番号をリリースすることは、利用可能な物理レジスタのリストへの物理レジスタ番号の追加することを具備する請求項９記載の方法。
【請求項１１】
前記物理レジスタプールはレジスタリネーミングプールである請求項１記載の方法。
【請求項１２】
中間結果を生成する第１の構成命令および中間結果を取得する第２の構成命令を生成することにより、拡張命令を実行するように動作する一あるいはそれ以上の命令実行パイプラインと、
物理レジスタ番号を各々有する物理レジスタのプールと、
物理レジスタ番号に命令識別名を割り振るように動作する構成命令リネームテーブルと、
第１の構成命令のために構成命令リネームテーブルにエントリを創り、第２の構成命令のために構成命令リネームテーブル自動照合をさらに行うように動作する制御ロジックと、
を具備し、それにより中間結果が物理レジスタ番号により識別された物理レジスタを介して、第１の構成命令から第２の構成命令に送出されるプロセッサ。
【請求項１３】
前記プールで利用可能な物理レジスタ番号のフリーリストをさらに具備し、
前記制御ロジックが構成命令リネームテーブルでのエントリを取り除き、且つ前記第２の構成命令が中間結果を取得後に、前記フリーリストに前記物理レジスタ番号を戻す請求項１２記載のプロセッサ。
【請求項１４】
前記構成命令リネームテーブルエントリは、前記第１の物理レジスタ番号に、第１の構成命令識別名を割り振る請求項１２記載のプロセッサ。
【請求項１５】
前記第１の構成命令が、前記第１の物理レジスタ番号により識別された物理レジスタに中間結果を書き込む請求項１４記載のプロセッサ。
【請求項１６】
前記第２の構成命令が、第１の物理レジスタ番号により識別された物理レジスタから中間結果を読み出す請求項１５記載のプロセッサ。
【請求項１７】
前記第２の構成命令は、第１の構成命令識別子を用いて構成命令リネームテーブルの自動照合を介して、第１の物理レジスタ番号を検索する請求項１６記載のプロセッサ。
【請求項１８】
前記物理レジスタのプールがレジスタリネーミングのためにさらに利用される請求項１２記載のプロセッサ。
【請求項１９】
前記構成命令リネームテーブルが、レジスタリネーミングテーブルである請求項１２記載のプロセッサ。
【発明の詳細な説明】
【背景技術】
【０００１】
本発明は、一般的にはプロセッサに関連するものであり、特に、部分的な結果を送出する拡張命令を実行するための既存のレジスタリネーミングリソースを利用するシステムおよび方法に関連するものである。
【０００２】
プロセッサ命令は、記憶装置から得たデータの処理を行い、記憶装置にそれらの結果を書き込む。最近のプロセッサは、上位レベルには、例えば、レジスタのように動作が速く、高価な記憶素子を具備する階層的な記憶構造を利用する。記憶階層は、下位レベルには、例えば、キャッシュメモリ（ＳＲＡＭ）、ソリッドステートメインメモリ（ＤＲＡＭ）、およびディスク（磁気あるいは光学媒体）のように、動作は遅いがコスト効率の良い記憶技術を順次具備する。例えば携帯用電子機器のようなアプリケーションにおいて、ＤＲＡＭはしばしば記憶階層の最も低いレベルとなる。
【０００３】
大抵のプロセッサの命令セットアーキテクチャ（ＩＳＡ）は、命令間でデータを送出し、メモリにデータの入出力をするために使用されるアーキテクトレジスタ（architected register）である、汎用レジスタのセット（ＧＰＲｓ）を含んでいる。論理的且つ算術的にデータ処理を行う命令は、特定したＧＰＲｓからオペランドを読み出し、特定したＧＰＲｓに結果を書き込む。同様に、メモリアクセス命令は、ＧＰＲｓからメモリに蓄積されるべきデータを読み出し、ＧＰＲｓにメモリから読み出したデータを書き込む。コンパイラは、各々の命令に、ソースおよびターゲットＧＰＲ識別子を割り当て、適切な結果が算出されるように命令を命じる。すなわち、特定したＧＰＲｓに結果を蓄積するための初期命令、およびさらなるプロセスのためのオペランドを得るためにそれらＧＰＲｓを読み出すための後期命令を命令することにより、命令は正しい結果を保証する“プログラム順”に配置される。前記ＧＰＲ識別子は、論理的なラベル（例えば、ｒ０−ｒ１５）である。
【０００４】
最近のあるプロセッサは、“拡張した”命令−すなわち、ひとつの算術的あるいは論理的な処理より多くの処理をする命令−に関する機能を有する。例えば、ＡＤＤｒ１，ｒ２，ｒ３ＬＳＬｒ４命令は、方程式ｒ１＝ｒ２＋（ｒ３＜＜[ｒ４]）を実行する。すなわち、ｒ４に蓄積された量だけレジスタｒ３の値を左シフトし、この結果にｒ２の値を加え、レジスタｒ１にその和を蓄積する。加算器が十分なサイクル期間を要求するプロセッサでは、この拡張命令は、２つの別々な複合命令−中間結果を生成するｒ３の値を左シフトするシフト命令およびｒ２の値に中間結果を加算し、ｒ１にその和を蓄積する加算命令−として実行してもよい。あるプロセッサ−すなわちオペランド転送の機能を有し、プログラム順に拡張命令を実行するのみのプロセッサ−では、シフト命令から加算命令に中間結果を送出することはまっすぐなものである。しかしながら一般的な、−特に、アウトオブオーダー（out of order）命令実行の機能を有するスーパースカラプロセッサ−では、例えば非アーキテクト（non-architected）“スクラッチ”レジスタおよび複雑な制御ロジックなどの追加リソースは、拡張命令の構成命令間での中間結果の転送を確実に実行するためにプロセッサに追加しなくてはならない。
【発明の概要】
【０００５】
ここに記述および請求された一あるいはそれ以上の実施形態によれば、拡張命令の構成命令の構成命令間での中間結果の送出は、レジスタリネーミングリソースおよび制御ロジックを使用して行われる。第１の構成命令は中間結果を生成し、構成命令リネームテーブルでＰＲＮが割り振られる。そして、物理レジスタに中間結果を書き込む。第２の構成命令は構成命令リネームテーブルで自動照合を行い、物理レジスタから中間結果を読み出す。構成命令リネームロジックは、パイプラインを通じて構成命令を追跡し、第２の構成命令が中間結果を読み出した時に、構成命令リネームテーブルエントリの削除をし、フリーリストにＰＲＮを戻す。
【０００６】
第１の実施形態は、拡張命令の実行方法に関連する。拡張命令は、二あるいはそれ以上の別々に実行可能な構成命令に変換される。物理レジスタ番号は、中間結果を生成する第１の構成命令に割り振られる。割り振られた物理レジスタ番号は、中間結果を取得する第２の構成命令に関連している。
【０００７】
もう一つの実施形態は、プロセッサに関連する。プロセッサは、中間結果を生成する第１の構成命令および中間結果を取得する第２の構成命令を生成することにより拡張命令を実行する、一あるいはそれ以上の命令実行パイプラインを含んでいる。プロセッサは、物理レジスタ番号を各々有している物理レジスタのプールおよび物理レジスタ番号に命令識別子を割り振る構成命令リネームテーブルもまた含んでいる。プロセッサは、第１の構成命令のために構成命令リネームテーブルでエントリを創る制御ロジックを更に含み、第２の構成命令のために構成命令リネームテーブルでの自動照合を更に行う。中間結果は、物理レジスタ番号により識別された物理レジスタを介して、第１の構成命令から第２の構成命令に送出される。
【図面の簡単な説明】
【０００８】
【図１】図１は、拡張命令の構成命令間で中間結果を送出するためのレジスタリネーミングリソースを利用するプロセッサの機能ブロック図である。
【図２】図２は、図１のプロセッサのパイプラインの機能ブロック図である。
【図３】図３は、拡張命令を実行する方法のフローチャートである。
【発明を実施するための形態】
【０００９】
図１は、拡張命令によって生成された構成命令間での中間結果の送出を追跡するためにレジスタリネーミングリソースを利用するためのロジックを有しているプロセッサ１０の機能ブロック図を描く。プロセッサ１０は、制御ロジック１４に従って、命令実行パイプライン１２で命令を実行する。パイプライン１２は、複数の並列の下層パイプライン１２ａ，１２ｂを持つスーパースカラ設計にしてもよい。パイプライン１２は、例えば算術論理ユニット（ＡＬＵ）（図示せず）のような論理的且つ算術的な回路と同様に、パイプステージに配置されるいくつかのレジスタまたはラッチ１６を含んでいる。汎用レジスタ（ＧＰＲ）ファイル１８は、記憶階層の上位レベルを具備するレジスタを提供する。ここに記述されるように、ＧＰＲ１８は、拡張命令の構成命令間で中間結果を効率的且つ確実に転送するためのレジスタリネーミングリソースの使用を可能とするためにリネーミングテーブル（ＲＴ）２０、フリーリスト２２、および構成命令リネーミングテーブル（ＣＩＴＲ）２４を含むことができる。
【００１０】
パイプライン１２は、命令側変換索引バッファ（ＩＴＬＢ）２８により管理されたメモリアドレシングおよび許諾と共に、命令キャッシュ（Ｉ−キャッシュまたはＩ＄）２６から命令を取得する。データは、主変換索引バッファ（ＴＬＢ）３２により管理されたメモリアドレシングおよび許諾と共に、データキャッシュ（Ｄ−キャッシュまたはＤ＄）３０から入手される。いくつかの実施形態では、ＩＴＬＢ２８は、ＴＬＢの一部のコピーを具備することができるものとする。あるいは、ＩＴＬＢ２８およびＴＬＢ３２は統合されてもよい。同様に、プロセッサ１０のいくつかの実施形態では、Ｉ−キャッシュ２６およびＤ−キャッシュ３０は、統合または統一されてもよい。
【００１１】
メモリインターフェース３６の制御の下、Ｉ−キャッシュ２８および／またはＤ−キャッシュ３０のミスは、メイン（オフ−チップ）メモリ３４へのアクセスの原因となる（示されていないその他のキャッシュは、プロセッサ１０とメインメモリ３４の間に挿入されてもよい）。プロセッサ１０は、いくつかの周辺装置４０，４２へのアクセスを制御する、インプット／アウトプット（Ｉ／Ｏ）インターフェース３８を含むことができる。当業者は、プロセッサ１０の多数の変形が可能であることを認識するであろう。例えば、プロセッサ１０は、Ｉキャッシュ２６およびＤキャッシュ３０の一方または両方のためにレベル２（Ｌ２）キャッシュを含んでもよい。さらに、プロセッサ１０内に描かれた機能ブロックの一あるいはそれ以上は、特定の実施形態から省略されてもよい。
【００１２】
多くの最近のプロセッサ１０は、複数のパイプライン１２ａ，１２ｂを十分に利用するために“アウトオブオーダー”−すなわち、命令のプログラム順序と異なる順序で−命令を実行し、総合的な性能を向上させる。アウトオブオーダー命令実行は、“ハザード”として知られる、命令間での多数の依存性を提起する。再命令が、依存性に関与するオペランドへのアクセスの順序を変更する場合に、データハザードは生じる。データハザードは、書き込み後の読み出し（ＲａＷ），書き込み後の書き込み（ＷａＷ），および読み出し後の書き込み（ＷａＲ）の３つのタイプに分類してもよい。ここで、読み出し後の読み出し（ＲａＲ）の場合は、データハザードではない。読み出しは、どんな順序で行われてもよい。例えば命令が再び指示されなかった時にＲａＷのようなデータハザードも起こり得る。しかし、そのようなデータハザードは、それらの結果がライトバックされる、または転送のための準備がされるまで、特定のステージに単に保持する必要がある。
【００１３】
アウトオブオーダー命令実行の機能を有するプロセッサ１０で、データハザードを扱うための既知のシステムがレジスタリネーミングである。レジスタリネーミングシステムでは、各々が物理レジスタ番号（ＰＲＮ）を有する物理レジスタの大きなセットまたはプールが、物理レジスタに論理的なレジスタ番号（ＬＲＮｓ）を動的に割り振ることで管理されている。前記ＬＲＮｓは、例えば、論理的なＧＰＲ識別子（ｒ０，ｒ１，ｒ２…）を具備することができる。物理レジスタの数は、ＬＲＮｓの数またはアーキテクト（architected）ＧＰＲｓの数より大きい。リネーミングテーブル（ＲＴ）２０は、ＬＲＮｓとＰＲＮｓとの間での動的なマッピングを維持し、利用可能なＰＲＮｓはフリーリスト２２内に維持される。
【００１４】
図２は、パイプライン１２およびいくつかのレジスタリネーミングリソースの機能ブロック図をより詳細に描く。パイプライン１２の取得ステージ５０は、命令キャッシュ２６から命令を取得する。前記命令は、複合ステージ５２で複合され、出力バッファ５４に入力してもよい。命令は、出力バッファ５４からパイプライン１２ａ，１２ｂに出力される。リネームロジック５６は、命令のレジスタアクセス特性を調べ、リネームテーブル２０およびフリーリスト２２を介して、必要に応じて命令に関連したＬＲＮｓ（例えば、ＧＰＲ識別名）をＰＲＮｓに変換する。レジスタに書き込む命令において、新しい物理レジスタはフリーリスト２２から選択され、新しいＬＲＮ−ｔｏ−ＰＲＮマッピングはリネームテーブル２０に入力される。前述のＬＲＮ−ｔｏ−ＰＲＮマッピングはＬＲＮを未使用のＰＲＮに割り振り、その結果、前記書き込みが関連した物理レジスタに指示される（すなわち、ＬＲＮは“リネーム”される）。レジスタアクセスパイプステージ５８ａ，５８ｂでレジスタを読み出す命令は、リネームテーブル２０での自動照合によって、ＬＲＮをＰＲＮに変換する。前記ＰＲＮは、パイプライン１２ａ，１２ｂを通じて保持する間、レジスタ読み出し命令に関連されつづける。
【００１５】
レジスタ書き込み命令は、同じＬＲＮを書き込んだ前の値を“信頼できないもの”にしない。前記書き込みは、新しく、未使用のＰＲＮに指示される（ＬＲＮが新しいＰＲＮにリネームされる故に）。プログラム順で書き込み命令に続く命令は、書き込まれた値を得るために、同じＰＲＮに命令されるだろう。プログラムの順で書き込み命令に先行する命令は、リネームテーブル２０により異なる物理レジスタに割り振られ（リネーミングオペレーションより前に）、物理レジスタにアクセスし続けるだろう。このように、与えられたＬＲＮを書き込む命令は、ＬＲＮから前の値を読み出す（ＷａＲ）またはＬＲＮに前の結果を書き込む（ＷａＷ）命令より先に実行されてもよい。
【００１６】
レジスタ書き込み命令が、パイプステージ６０ａ，６０ｂでの実行に関係する時は−すなわち、命令がレジスタ書き込み命令を確認しない、あるいはプログラム順でレジスタ書き込み命令に先立つどんな命令も例外を引き起こさない時は−、レジスタ書き込み命令に割り振られたＰＲＮは、関連性のあるアーキテクト（architected）ＧＰＲになる。前記命令は、ライトバックパイプステージ６２ａ，６２ｂで、このＰＲＮにその結果を書き込むだろう（おそらく、ライトバッファ６４ａ，６４ｂの後に）。この時点において、他のＰＲＮｓへの同じＬＲＮ（ＧＰＲ識別名）のいずれかの古いリネーミングも、リネームテーブル２０から取り除かれる。ＧＰＲを読み出す全ての命令が実行し終わる時、前記ＰＲＮは、別のリネームオペレーションのために利用可能なリソースとして、フリーリスト２２に戻される。インフライトリネームロジック６６は、実行に関係する命令としてパイプライン１２を監視し、リネームテーブル２０およびフリーリスト２２に適切な制御信号を送出することによって、これらの機能を実行する。
【００１７】
一あるいはそれ以上の実施形態によれば、レジスタリネーミングシステムは、拡張命令から生成された構成命令間での中間結果の転送を提供するために利用される。拡張命令がパイプステージ５２で複合される時、二あるいはそれ以上の構成命令が生成され、命令出力バッファ５４に送出されてもよい。一あるいはそれ以上の中間結果を生成する、およびオペランドとして中間結果を取得する構成命令はフラグが付けられてもよい。リネームロジック５６は構成命令を調べ、中間結果を生成する構成命令にフリーリスト２２から、一あるいはそれ以上のＰＲＮを割り振る。リネームロジック５６は、その上、割り振られたＰＲＮに対して中間結果を生成する構成命令を識別する標識子を割り振る構成命令リネームテーブル２４内でエントリを創り出す。リネームロジック５６は、中間結果を生成する構成命令を識別する標識子と共に中間結果を取得する構成命令に、さらにタグを付ける。
【００１８】
中間結果を取得する構成命令が、レジスタアクセスパイプステージ５８ａ，５８ｂに到達する時、その命令は、それらの中間結果を保持するレジスタを識別するＰＲＮを検索するために、構成命令リネームテーブル２４にアクセスする。中間結果を取得する構成命令が、パイプステージ６０ａ，６０ｂでの実行に関係する時、構成命令リネームロジック６８は、構成命令リネームテーブル２４から関連性のあるエントリを取り除き、フリーリスト２２にＰＲＮを戻す。ここで、構成命令リネームテーブル２４は、独立した機能的な実体として図２に描かれているが、その他の実施形態では、その機能性は、リネームテーブル２０に含んでもよい。この場合、中間結果を生成し、中間結果を取得する拡張命令の構成命令は、ＬＲＮではなく命令識別子がリネームされるレジスタリネーミングの特別な事例として扱われる。その他の実施形態では、物理レジスタの別々のプールおよび別々のフリーリスト２２を拡張命令専用にし、構成命令レジスタリネーミングはレジスタリネーミングから分離してもよい。
【００１９】
図３は、拡張命令を実行する方法について描く。拡張命令は、二あるいはそれ以上の別々に実行可能な構成命令に変換される（ブロック１００）。中間結果を生成する第１の構成命令は、ＰＲＮを割り振られる（ブロック１０２）。一つの実施形態では、前記ＰＲＮはレジスタリネーミングプールから選ばれる。割り振られたＰＲＮは、中間結果を取得する第２の構成命令に関連付けられる（ブロック１０４）。前記関連付けは、構成命令リネームテーブル２４またはレジスタリネーミングシステムのリネームテーブル２０でのエントリを介してもよい。
【００２０】
第１の構成命令は、実行され（ブロック１０６）、第１の構成命令が生成する中間結果は、割り振られたＰＲＮにより識別したレジスタに蓄積される。第２の構成命令は、実行され（ブロック１０８）、割り振られたＰＲＮにより識別したレジスタから中間結果を検索する。当業者は、ブロック１０６およびブロック１０８は、物理レジスタへ実際に中間結果を書き込むことなく、命令を識別するため割り振られたＰＲＮを使用して、オペランド転送により実行されてもよいことを認識するだろう。
【００２１】
第２の構成命令が、中間結果を取得した後に、前記ＰＲＮは、例えば、構成命令リネームテーブル２４（あるいはレジスタリネームテーブル２０）から関連性のあるエントリを取り除くことにより、第２の構成命令から分離される（ブロック１１０）。前記ＰＲＮは、例えば、フリーリスト２２にＰＲＮが戻ることにより、レジスタリネーミングプールに戻される（ブロック１１２）。第２の構成命令がその実行中に中間結果を読み出すとすぐに、あるいは後のいずれかの時に、前記ＰＲＮは第２の構成命令から分離され、フリーリスト２２に戻される。
【００２２】
既存のレジスタリネーミングシステムのリソースおよび方法を利用することにより、ここに記述されるように、拡張命令は、構成命令間で中間結果の送出を実施するための大規模な追加のプロセッサリソースおよびロジックの必要なしに、二あるいはそれ以上の命令として実行されてもよい。一つの中間結果を送出する二つの構成命令に関してここに記述したが、当業者は、本発明がこの実施形態に限られていないことを、たやすく認識するだろう。一般的に、多くの構成命令が任意の拡張命令から生成されてもよい。また、ここに記述されるように、構成命令は、レジスタリネーミングシステムを利用することにより、構成命令間における多くの中間結果を送出してもよい。
【００２３】
本発明は、もちろん、発明の本質的な特徴から逸脱することなく、ここに示す以外のその他の方法で実行されてもよい。本実施形態は、実例であり、且つ限定しないものとして全ての点において考慮されている。また、付け加えられた請求項の意味および均等範囲内にあたる全ての変更は、そこに包含されるように解釈される。
【図１】
2010517180.tif 000003
【図２】
2010517180.tif 000004
【図３】
2010517180.tif 000005
【国際調査報告】
2010517180.tif 000006
2010517180.tif 000007
2010517180.tif 000008