(57)【要約】【課題】プロセッサ内のマップに基づく間接レジスタ・ファイル・アクセスのために、レジスタ・マップを管理するための機構が提供される。【解決手段】管理機構はマップ・セットを含むレジスタ・マッピングを含み、マップ・セットの各マップは複数のマップ・レジスタを有する。実レジスタ・セットには、マップ・セットのマップ・エントリを介してプロセッサによって間接的にアクセスされる。実レジスタ・セット内の実レジスタの数は、マップ・セット内のマップ・エントリの数より多く、マップ・セットのマップ・エントリは、任意の時点で実レジスタ・セットのサブセットのみを参照する。この機構は、単一の更新命令の実行に応答して、マップ・セットのうちの少なくとも１つのマップの複数のマップ・エントリを更新することにより、レジスタ・マッピングのマップ・セットの複数のエントリへの更新を管理するステップを含む。【選択図】  図３
2007234011.tif 000002
【特許請求の範囲】
【請求項１】
マップ・セットを備え、前記マップ・セットのそれぞれのマップが複数のマップ・レジスタを備える、レジスタ・マッピングを提供するステップと、
前記レジスタ・マッピングの前記マップ・セットのマップ・エントリを介して前記プロセッサによって間接的にアクセスされる実レジスタ・セットを提供するステップであって、前記実レジスタ・セットにおける実レジスタの数が前記マップ・セットにおけるマップ・エントリの数よりも多く、前記マップ・セットの前記マップ・エントリが任意の時点で前記実レジスタ・セットのサブセットのみを参照する、実レジスタ・セットを提供するステップと、
単一の更新命令の実行に応答して、前記マップ・セットのうちの少なくとも１つのマップの複数のマップ・エントリを更新することによって、前記レジスタ・マッピングの前記マップ・セットのマップ・エントリへの更新を管理するステップと、
を含む、プロセッサのレジスタ管理の方法。
【請求項２】
前記管理するステップは、前記プロセッサがデータ処理のために前記実レジスタ・セットに間接的にアクセスするために、前記マップ・セットの他のマップ・エントリを使用するのと同時に行われる、請求項１に記載の方法。
【請求項３】
前記管理するステップは、前記プロセッサが、前記単一の更新命令を介して更新される前記複数のマップ・エントリを有する少なくとも１つのマップの他のマップ・エントリを使用するのと同時に行われ、前記単一の更新命令は単一命令多重データ（ＳＩＭＤ）命令である、請求項２に記載の方法。
【請求項４】
前記単一の更新命令を介して更新される前記複数のマップ・エントリが、前記マップ・セットの前記少なくとも１つのマップのすべてのマップ・エントリよりも少ない、請求項１に記載の方法。
【請求項５】
前記プロセッサは、単一命令多重データ（ＳＩＭＤ）に基づく実行ユニットおよび関連付けられたＳＩＭＤレジスタをさらに備え、前記管理するステップは、少なくとも１つのＳＩＭＤレジスタ内で複数のマップ・エントリ更新をセットアップするために、前記プロセッサの前記ＳＩＭＤに基づく実行ユニットおよび関連付けられたＳＩＭＤレジスタを使用するステップをさらに含み、前記管理するステップは、前記複数のマップ・エントリ更新を、前記単一の更新命令を使用して前記少なくとも１つのＳＩＭＤレジスタから前記少なくとも１つのマップのうちの少なくとも１つのマップ・レジスタへと移動するステップをさらに含み、前記複数のマップ・レジスタは前記ＳＩＭＤレジスタと同じビット・サイズおよび論理構造を有し、前記単一の更新命令は前記ＳＩＤＭレジスタから前記マップ・レジスタへデータを移動する命令である、請求項１に記載の方法。
【請求項６】
前記複数のマップ・エントリ更新を、前記少なくとも１つのＳＩＭＤレジスタから前記少なくとも１つのマップ・レジスタへと移動するステップは、前記プロセッサのロード／ストア・ユニットを使用せずに、前記少なくとも１つのＳＩＭＤレジスタから前記レジスタ・マッピングの前記少なくとも１つのマップ・レジスタへと直接行われる、請求項５に記載の方法。
【請求項７】
前記管理するステップは、前記レジスタ・マッピングの前記マップ・セットのうちの少なくとも１つのマップの複数のマップ・エントリを、別の単一の移動命令に応答して、前記ＳＩＭＤ実行ユニットに関連付けられた前記ＳＩＭＤレジスタのうちの少なくとも１つのＳＩＭＤレジスタに移動するステップをさらに含み、前記別の単一の移動命令は前記マップ・レジスタから前記ＳＩＭＤレジスタへデータを移動する命令である、請求項５に記載の方法。
【請求項８】
前記レジスタ・マッピングを提供するステップは、前記レジスタ・マッピングに複数の増分レジスタを提供するステップをさらに含み、各増分レジスタは前記複数のマップ・レジスタのそれぞれのマップ・レジスタに関連付けられ、前記管理するステップは、前記単一の更新命令に応答して、前記マップ・セットの前記少なくとも１つのマップの前記複数のマップ・エントリを更新するために、前記複数の増分レジスタのうちの少なくとも１つの増分レジスタを使用するステップを含み、前記単一の更新命令はマップ・レジスタ増分命令を含む、請求項１に記載の方法。
【請求項９】
前記レジスタ・マッピングを提供するステップは、前記レジスタ・マッピングに複数の事前増分マップ・レジスタを提供するステップをさらに含み、各事前増分マップ・レジスタは前記複数のマップ・レジスタのそれぞれのマップ・レジスタに関連付けられ、前記管理するステップは、少なくとも１つの事前増分マップ・レジスタから、前記単一の更新命令を使用する前記少なくとも１つのマップのうちの少なくとも１つのマップ・レジスタへ、事前増分マップ・エントリを移動するステップをさらに含む、請求項８に記載の方法。
【請求項１０】
前記複数のマップ・レジスタのうちの関連付けられたマップ・レジスタのマップ・エントリの、または前記複数の増分レジスタのうちのその関連付けられた増分レジスタの、更新に応答して、前記複数の事前増分マップ・レジスタのうちの１つの事前増分マップ・レジスタのマップ・エントリを自動的に決定するステップをさらに含む、請求項９に記載の方法。
【請求項１１】
前記単一の更新命令はマップ・レジスタ即時設定命令を含み、前記管理するステップは、前記マップ・レジスタ即時設定命令のフィールドから初期設定値を取得するステップと、前記マップ・レジスタ即時設定命令から取得された前記初期設定値を使用して、前記複数のマップ・エントリの増分的更新を初期設定するステップと、を含む、請求項１に記載の方法。
【請求項１２】
前記更新される複数のマップ・エントリは少なくとも１つのマップ・レジスタ内にあり、前記少なくとも１つのマップ・レジスタは複数のハーフ・ワードを含み、前記管理するステップは、前記マップ・レジスタ即時設定命令から取得された前記初期設定値を使用して、前記少なくとも１つのマップ・レジスタの第１のハーフ・ワードを初期設定するステップと、前記マップ・レジスタの各連続するハーフ・ワードを、増分１、または、前記少なくとも１つのマップ・レジスタについて少なくとも１つの関連付けられた増分レジスタの増分値ｉの、いずれかだけそれぞれ更新するステップと、をさらに含む、請求項１１に記載の方法。
【請求項１３】
前記マップ・セットはターゲット・マップと３つのソース・マップとを備え、前記ターゲット・マップおよび３つのソース・マップはそれぞれ４つのマップ・レジスタを備え、各マップ・レジスタは８つのハーフ・ワード・エントリを備え、前記マップ・セットの各マップ内に３２のマップ・エントリを備え、前記単一の更新命令は４つのオペランドを備え、１つのオペランドはターゲット・マップ識別子であり、残りの３つのオペランドのうちの少なくとも２つはソース・マップ識別子である、請求項１に記載の方法。
【請求項１４】
プロセッサのレジスタを管理するためのシステムであって、
それぞれのマップが複数のマップ・レジスタを備えるマップ・セットを含むレジスタ・マッピングと、
前記レジスタ・マッピングの前記マップ・セットのマップ・エントリを介して前記プロセッサによって間接的にアクセスされる実レジスタ・セットであって、前記実レジスタ・セットにおける実レジスタの数が前記マップ・セットにおけるマップ・エントリの数よりも多く、前記マップ・セットの前記マップ・エントリが任意の時点で前記実レジスタ・セットのサブセットのみを参照する、実レジスタ・セットと、
単一の更新命令の実行に応答して、前記マップ・セットのうちの少なくとも１つのマップの複数のマップ・エントリを更新することによって、前記レジスタ・マッピングの前記マップ・セットのマップ・エントリへの更新を管理するための手段と、
を備える、プロセッサのレジスタを管理するためのシステム。
【請求項１５】
プロセッサのレジスタを管理する方法を実行するために、コンピュータによって実行可能なプログラムを有形に具体化する、コンピュータによって読み取り可能なプログラム・ストレージ・デバイスであって、前記レジスタは実レジスタ・セットを含み、前記方法は、
それぞれのマップが複数のマップ・レジスタを備えるマップ・セットを提供するステップと、
前記プロセッサが、前記マップ・セットのマップ・エントリを介して前記複数の実レジスタに間接的にアクセスできるようにするステップであって、前記実レジスタ・セットにおける実レジスタの数が前記マップ・セットにおけるマップ・エントリの数よりも多く、前記マップ・セットの前記マップ・エントリが任意の時点で前記実レジスタ・セットのサブセットのみを参照する、間接的にアクセスできるようにするステップと、
単一の更新命令の実行に応答して、前記マップ・セットのうちの少なくとも１つのマップの複数のマップ・エントリを更新することによって、前記マップ・セットのマップ・エントリへの更新を管理するステップと、
を含む、プログラム・ストレージ・デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、プロセッサ内でのレジスタの管理に関し、とりわけ、マップに基づくレジスタ・ファイルへの間接アクセスのためにレジスタ・マップを単一命令多重データ（ＳＩＭＤ）指向管理するための方法、システム、およびプログラムに関する。
【背景技術】
【０００２】
レジスタは、操作を対象とした様々なデータを格納するために、プロセッサまたは実行ユニットによって採用される。レジスタは、多くの面で、たとえばシステム・メモリよりもデータ操作に好適である。たとえばレジスタは、通常、システム・メモリ内のロケーションがアドレス指定で必要とするよりも少ない命令内のビットによって指定することができる。加えてレジスタは、ほとんどのシステム・メモリよりも高い帯域幅および短いアクセス時間を有する。さらにレジスタは、比較的設計およびテストが容易である。したがって、現在のプロセッサ・アーキテクチャは、比較的多数のレジスタを有する傾向がある。
【０００３】
プロセッサ／実行ユニットの性能は、一般に、プロセッサ内のレジスタの数を増加することによって向上させることができるが、レジスタの数が多いことにより問題が提示される場合もある。これらの問題の１つが、レジスタのアドレス可能度である。プロセッサが多数のアドレス可能レジスタを含む場合、レジスタをアドレス指定するためだけに、１つまたは複数のレジスタ指定（designation）を有する命令に多くのビットを割り振る必要が生じることになる。たとえば、プロセッサが３２のレジスタを有する場合、３２のレジスタすべてをアドレス指定するために５ビットが必要であるため、命令内で４つのレジスタを指定するためには合計２０ビットが必要である。このようにして、プロセッサ・アーキテクチャ内で直接アクセス可能なレジスタの最大数は事実上制約される。
【０００４】
間接化（indirection）は、大規模なレジスタ・ファイルにアクセスするために使用されている技法である。インターナショナル・ビジネス・マシンズ・コーポレーションによって販売されているＰｏｗｅｒＰＣ（Ｒ）プロセッサなどのアーキテクチャを拡張するために有用な間接化機構は、非常に大規模なレジスタ・ファイルに対応し、以下の目標を満たすものである。
・標準ＰｏｗｅｒＰＣ（Ｒ）命令フォーマットとの互換性
・再コンパイルなしでの既存のコードのサポート
・ループのアンロール、ソフトウェアのパイプライン化、および長いパイプライン待ち時間を軽減するために使用される関連ソフトウェア技法をサポートするのに十分な柔軟性
・内部ループ内のレジスタ・ファイル内で作業データセットの大規模サブセットを適切に維持するためのソフトウェア技法をサポートするのに十分な柔軟性
【０００５】
大規模レジスタ・ファイルにアクセスするための従来技術の間接化機構は、前述の目標の１つまたは複数を満たしていない。これらの従来技術の間接化機構には、以下のものが含まれる。
【０００６】
Ｉｔａｎｉｕｍ（Ｒ）――１２８のレジスタを備えたレジスタ・ファイル内の上位９６のレジスタからレジスタの連続セットへの間接アクセスを提供するために、「回転レジスタ」と呼ばれる技法を採用する。Ｉｔａｎｉｕｍ（Ｒ）はループのアンロールには有用であるが、より一般的な方法で大規模レジスタ・ファイルを活用するには有用でない。（「Intel Itanium Architecture Software Developer’s Manual」２００２年１０月）
【０００７】
「レジスタ・キュー（Register Queue）」――いくつかの点で回転レジスタと同様であり、連続レジスタ・セットへのアクセスの定義および確立において明らかに柔軟性が増加している。間接アクセスは依然として連続レジスタ・セットに制限されるため、柔軟性は不十分である。（Tyson外によるIEEE Trans.Computers、２００１年８月）
【０００８】
「レジスタ接続（Register Connection）」――大規模レジスタ・ファイルの間接アクセスに関して、回転レジスタおよびレジスタ・キューよりも一般的、すなわちより柔軟な機構であるように思われる。しかしながらこれは、ＰｏｗｅｒＰＣ（Ｒ）アーキテクチャで使用される場合、命令において符号化されたレジスタ名をレジスタ・ファイル内の実際の物理レジスタにマッピングするために使用される機構により、３２のレジスタのみが任意のサイクルで発行される命令によってアクセス可能であるという点において限られる。（Kiyohara外によるProc., 1993,ISCA）
【非特許文献１】「Intel Itanium Architecture Software Developer’s Manual」２００２年１０月
【非特許文献２】Tyson等によるIEEE Trans.Computers、２００１年８月
【非特許文献３】Kiyohara等によるProc., 1993,ISCA
【発明の開示】
【発明が解決しようとする課題】
【０００９】
したがって、レジスタのアドレス指定のためにプロセッサの機能を向上させるための改善された装置を提供することが望ましい。
【課題を解決するための手段】
【００１０】
２００５年２月２４日付けの米国特許出願第１１／０６５６０２号は、上記に概説された４つの目標を満たす新規な間接化機構を開示している。この機構は、レジスタ名の基本セットとレジスタ名の拡張セットとの間のマッピングを採用する。ＰｏｗｅｒＰＣ（Ｒ）アーキテクチャの場合、名前の基本セットは既存のアーキテクチャにおける名前のセット、すなわち０〜３１であり、名前の拡張セットはアーキテクチャの拡張バージョンで実際に実装可能なレジスタの数によって決定される。マッピングには以下の特性がある。
・マッピングはレジスタ内に含まれる。
・マッピングはソフトウェアによって管理される、すなわち、マッピングを含むレジスタへの書き込みおよびレジスタからの読み取りは、間接化機構をサポートしている拡張アーキテクチャの一部である命令によって実行可能である。
・マッピングは任意であり、ソフトウェアがどのような管理を選択するかに基づく。
・マッピングは、マシン命令に見られるレジスタ・オペランドとの位置的な関連を有する。
【００１１】
これらの特徴を備えたマップに基づく間接化機構の場合、マッピングがどのように管理されるかに関して満たすべき、下記を含む目標セットがある。
【００１２】
１．マップ管理機構は、前述の間接化機構に関する基本目標を満たすのに適した、マップがどのように使用されるかにおけるある程度の柔軟性をサポートするものとする。
【００１３】
２．マップ管理は、たとえばマップ管理のために内部ループで実行される命令の数の一部に関して効率的であるものとする。
【００１４】
３．マップ管理に関連付けられたパイプライン待ち時間が、その柔軟性または効率に悪影響を与えないものとする。
【００１５】
本明細書では、これらの３つの目標を満たすレジスタ・マップのＳＩＭＤ指向管理のための方法、システム、およびプログラムを提示する。
【００１６】
本発明の一態様に従って、プロセッサのレジスタ管理の方法が提供される。この方法は、マップ・セットを備え、マップ・セットのそれぞれのマップが複数のマップ・レジスタを備える、レジスタ・マッピングを提供するステップと、レジスタ・マッピングのマップ・セットのマップ・エントリを介してプロセッサによって間接的に参照／アクセスされる実レジスタ・セットを提供するステップと、単一の更新命令の実行に応答して、マップ・セットのうちの少なくとも１つのマップの複数のマップ・エントリを更新することによって、レジスタ・マッピングのマップ・セットのマップ・エントリへの更新を管理するステップと、を含み、実レジスタ・セットにおける実レジスタの数がマップ・セットにおける実マップ・エントリの数よりも多く、マップ・セットのマップ・エントリが任意の時点で実レジスタ・セットのサブセットのみを参照する。
【００１７】
他の態様では、マップ・エントリ更新の管理は、プロセッサがデータ処理のために実レジスタ・セットに間接的にアクセスするために、マップ・セットの他のマップ・エントリを使用するのと同時に行われる。さらに、マップ更新の管理は、プロセッサが、単一の更新命令を介して更新される複数のマップ・エントリを有する少なくとも１つのマップの他のマップ・エントリを使用するのと同時に行われ、単一の更新命令は単一命令多重データ（ＳＩＭＤ）命令である。マップ・エントリ更新を実施するための複数の手法が開示され、特許請求される。たとえば、単一の更新命令が、ＳＩＭＤレジスタからマップ・レジスタへデータを移動する命令を含むことができる。別の方法として、関連付けられた増分レジスタの増分値を使用するマップ・レジスタ増分命令を使用して、または、複数のマップ・レジスタに関連付けられた事前増分マップ・レジスタを使用して、マップ・エントリを更新することができる。さらに、複数マップ・エントリの増分初期設定を開始するための初期設定値が命令それ自体に提供される、マップ・レジスタ即時設定命令を使用して、マップ・エントリを更新することができる。
【００１８】
他の態様では、プロセッサのレジスタを管理するためのシステムが提供される。システムは、マップ・セットのそれぞれのマップが複数のマップ・レジスタを備え、プロセッサが、レジスタ・マッピングのマップ・セットのマップ・エントリを介して実レジスタ・セットに間接的にアクセスする、マップ・セットを備えたレジスタ・マッピングを含む。実レジスタ・セットにおける実レジスタの数はマップ・セットにおけるマップ・エントリの数よりも多く、マップ・セットのマップ・エントリは、任意の時点で実レジスタ・セットのレジスタのサブセットのみを参照する。システムは、単一の更新命令の実行に応答して、マップ・セットのうちの少なくとも１つのマップの複数のマップ・エントリを更新することによって、レジスタ・マッピングのマップ・セットの複数のマップ・エントリへの更新を管理するための手段をさらに含む。
【００１９】
他の態様では、レジスタが実レジスタ・セットを含む、プロセッサのレジスタを管理する方法を実行するために、コンピュータによって実行可能なプログラムを有形に具体化する、コンピュータによって読み取り可能なプログラム・ストレージ・デバイスが提供される。この方法は、マップ・セットのそれぞれのマップが複数のマップ・レジスタを備える、マップ・セットを提供するステップと、プロセッサがマップ・セットのマップ・エントリを介して複数の実レジスタに間接的にアクセスできるようにするステップと、単一の更新命令の実行に応答して、マップ・セットのうちの少なくとも１つのマップの複数のマップ・エントリを更新することによって、マップ・セットのマップ・エントリへの更新を管理するステップと、を含み、実レジスタ・セットにおける実レジスタの数がマップ・セットにおけるマップ・エントリの数よりも多く、マップ・セットのマップ・エントリが任意の所与の時点で実レジスタ・セットのサブセットのみを参照する。
【００２０】
さらに、本発明の諸技法により追加の特徴および利点が実現される。本発明の他の諸実施形態および諸態様が本明細書で詳細に説明され、特許請求の範囲に記載されている発明の一部とみなされる。
【００２１】
特許請求の範囲では、本発明とみなされる主題が具体的に指摘され、明確に主張される。本発明の前述および他の目的、特徴、および利点は、添付の図面に関連した以下の詳細な説明から明らかとなる。
【発明を実施するための最良の形態】
【００２２】
本発明は、縮小命令セット・コンピューティング（ＲＩＳＣ）プロセッサまたは複合命令セット・コンピューティング（ＣＩＳＣ）プロセッサで実施することができる。本発明の一実施形態は、以下で説明するように例示の目的で、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシンズ・コーポレーションによって製造されるＰｏｗｅｒＰＣ（Ｒ）ファミリ・プロセッサなどの、ＲＩＳＣプロセッサ上で実施される。
【００２３】
図１は、本発明の態様に従った、間接レジスタ・ファイル・アクセスを実施するためのプロセッサ１００を示すブロック図である。プロセッサ１００は、データ・キャッシュ１１１および命令キャッシュ１１２を含み、どちらもバス・インターフェース・ユニット１２０に接続される。命令は、バス・インターフェース・ユニット１２０を介してメモリ（図示せず）からプロセッサ１００に取り出され、命令キャッシュ１１２に格納される。取り出されたデータは、バス・インターフェース・ユニット１２０を介してデータ・キャッシュ１１１に格納される。命令は必要に応じて、命令フェッチャ、分岐予測モジュール、命令キュー、およびディスパッチ・ユニットを含む、命令ユニット１１５によって、命令キャッシュ１１２からフェッチされる。
【００２４】
命令ユニット１１５は、整数ユニット１１６、ロード／ストア・ユニット１１７、浮動小数点ユニット１１８などの実行ユニットに、命令を適宜ディスパッチする。整数ユニット１１６は、整数に関する加算、減算、乗算、除算、シフト、または回転の操作を実行し、汎用レジスタ１１３からオペランドを取り出して、汎用レジスタ１１３に結果を格納する。浮動小数点ユニット１１８は、単精度または倍精度乗算／加算操作を実行し、浮動小数点レジスタ１１４からオペランドを取り出して、浮動小数点レジスタ１１４に結果を格納する。ロード／ストア・ユニット１１７は、必要に応じてデータ・キャッシュ１１１から汎用レジスタ１１３または浮動小数点レジスタ１１４へ命令オペランドをロードし、使用可能な場合は、命令の結果を汎用レジスタ１１３または浮動小数点レジスタ１１４からデータ・キャッシュ１１１に格納する。
【００２５】
複数の再配列バッファを含む完了ユニット１１９は、アウト・オブ・オーダー命令処理をサポートするために、命令ユニット１１５に関連して動作する。完了ユニット１１９はさらに、命令結果に関する特定レジスタ内での競合を避けるために、汎用レジスタ１１３および浮動小数点レジスタ１１４内の名前変更バッファと共に動作する。
【００２６】
本発明の一態様によれば、プロセッサ内の実レジスタ・セットのアドレス可能度を向上させるために、見かけ（apparent）レジスタ・セットが使用される。見かけレジスタは、見かけレジスタ名スペースと呼ばれるスペース内でアドレス指定され、実レジスタは、実レジスタ名スペースと呼ばれるより大きなスペース内でアドレス指定される。見かけレジスタ内のエントリは、実レジスタ名スペース内のレジスタの名前を参照する。見かけレジスタ名スペースは、命令で使用されるレジスタ番号によって直接アドレス可能である。他方で、実レジスタ名スペースは、（何らかの命令から）直接、または見かけレジスタ内に格納された値を介して間接的に、アドレス可能である。
【００２７】
図２は、本発明の態様に従った見かけレジスタ・セットおよび実レジスタ・セットを示す図である。図に示されるように、見かけレジスタ２２１は複数のレジスタ・エントリを含む。見かけレジスタ２２１内のレジスタ・エントリの総数は、２を、レジスタのアドレス指定用に予約された命令２２３の見かけレジスタ・フィールド内のビット数乗した数に等しいものとすることができる。たとえば、命令２２３内のレジスタ・フィールド内のビット数が３の場合、見かけレジスタ２２１内のレジスタ・エントリ数は８であり、命令２２３内の見かけレジスタ・フィールド内のビット数が４の場合、見かけレジスタ２２１内のレジスタ・エントリ数は１６である。図２の実施形態では、命令２２３内のｖＡフィールド、ｖＢフィールド、ｖＣフィールド、およびｖＤフィールドなどの見かけレジスタ・フィールド内のビット数は５であり、見かけレジスタ２２１内のレジスタ・エントリ数は３２である。ＰｏｗｅｒＰＣ（Ｒ）プロセッサとの関連において、ｖＡ、ｖＢ、ｖＣ、およびｖＤフィールドはベクトル（すなわちＶＭＸまたはＡｌｔｉｖｅｃ）レジスタの名前であり、本発明の一実施形態ではＰｏｗｅｒＰＣ（Ｒ）ベクトル・レジスタと呼ぶ。
【００２８】
実レジスタ２２２も複数のレジスタ・エントリを含む。それぞれの見かけレジストリ・エントリ内のビット数は、提供された実レジスタをアドレス指定するのに十分な数であり、実レジスタの増加に対応できるスペースを持たせておいてもよい。実レジスタ２２２内のレジスタの総数は、少なくとも２を、見かけレジスタ２２１のレジスタ・エントリ内のビット数乗した数に等しいものとすることができる。たとえば、見かけレジスタ２２１の各レジスタ・エントリ内のビット数が５の場合、実レジスタ２２２内のレジスタの総数は３２であり、見かけレジスタ２２１の各レジスタ・エントリ内のビット数が６の場合、実レジスタ２２２内のレジスタの総数は６４である。図２の実施形態では、見かけレジスタ２２１の各レジスタ・エントリ内のビット数は７であり、実レジスタ２２２内のレジスタの総数は１２８である。
【００２９】
オペレーション時に、実レジスタ２２２内の１つのレジスタが、命令２２３などの、命令の見かけレジスタ・フィールド内のビットによって選択された、見かけレジスタ２２１のレジスタ・エントリ内のビットによって選択される。たとえば、図２に示されるように、実レジスタ２２２内のレジスタ１２３は、命令２２３の見かけレジスタ・フィールドｖＤ内のビットによって選択された、見かけレジスタ２２１のレジスタ・エントリ２３内のビットによって選択される。同様に、実レジスタ２２２内のレジスタ１２５は、命令２２３の見かけレジスタ・フィールドｖＡ内のビットによって選択された、見かけレジスタ２２１のレジスタ・エントリ１９内のビットによって選択される。
【００３０】
命令は、２つの異なる種類のレジスタ・フィールドを含むことができる。図２に示されるように、命令２２４は、前述のように見かけレジスタ２２１内にインデックス付けするための見かけレジスタｖＤフィールドを含む。命令２２４は、汎用レジスタ・セット２２５に直接インデックス付けするための、ｒＡフィールドおよびｒＢフィールドなどの標準レジスタ・フィールドも含む。汎用レジスタ２２５内のレジスタの総数は、実レジスタ２２２内のレジスタの総数よりもかなり少ない。ｒＡフィールドおよびｒＢフィールドそれぞれのビット数が５であるため、汎用レジスタ・セット内のレジスタの最大数は３２に制限される。
【００３１】
見かけレジスタ２２１の制御は、本発明が組み込まれるプロセッサ・アーキテクチャに適した方法で設計することができる。たとえば、ＰｏｗｅｒＰＣ（Ｒ）アーキテクチャでは、図３〜１５に関連して以下で詳細に説明するように、２つまたはそれ以上のレジスタを介してマッピングを制御するのが好ましい。
【００３２】
本発明のレジスタ再マッピングは、異なるレジスタ・セットに別々に適用することができる。たとえば、ＰｏｗｅｒＰＣ（商標）アーキテクチャとの関連において、レジスタ再マッピングは、ベクトル・レジスタおよび浮動小数点レジスタに適用可能であるが、汎用レジスタには適用不能である。したがって、本発明は、プロセッサ内のレジスタのアドレス可能度を向上させるための柔軟な装置を提供し、既存のプロセッサ・アーキテクチャと互換性のある方法で実施することができる。
【００３３】
前述の教示に基づいて、実レジスタ・ファイルをマップに基づいて間接的に参照するためにマップ・エントリを単一命令多重データ（ＳＩＭＤ）指向管理するための方法、システム、およびプログラムも提示される。現在の多くのプロセッサ・アーキテクチャは、たとえばＰｏｗｅｒＰＣ（Ｒ）がＶＭＸを有し、Ｉｎｔｅｌ（Ｒ）  ＩＡ−３２がＳＳＥ３を組み込んでいるなど、単一命令多重データ（ＳＩＭＤ）拡張を組み込んでいる。したがって本明細書では、柔軟かつ効率的な方法でマップ・エントリ更新を提供するために、プロセッサのＳＩＭＤ機能を利用するマップ管理機構を開示する。
【００３４】
図３は、本発明の態様に従った、マップに基づく間接レジスタ・ファイル・アクセスのためのレジスタ・マップのＳＩＭＤ指向管理を使用する、プロセッサの一実施形態を示す。ここでもプロセッサは、データ・キャッシュ１１１、命令キャッシュ１１２、汎用レジスタ１１３、浮動小数点レジスタ１１４、命令ユニット１１５、整数ユニット１１６、ロード／ストア・ユニット１１７、浮動小数点ユニット１１８、および完了ユニット１１９を含み、これらはそれぞれ図１のプロセッサに関連して述べたように機能する。図３のプロセッサは、ＶＭＸユニット３００および関連付けられたＶＭＸレジスタ（ＶＭＸＲ）３１０をさらに含む。良く知られているように、ＶＭＸユニットおよび関連付けられたレジスタは、ＳＩＭＤ処理を使用し、たとえば複数のデータ要素に対して並列に共通操作を実行する、計算機能を提供する。一実施形態では、データ要素はハーフ・ワードとすることが可能であり、ＶＭＸレジスタはそれぞれ、８つの１６ビット・ハーフ・ワードとして解釈される１２８ビットを備えることができる（図６および７を参照のこと）。したがって、一例として単一のＳＩＭＤ命令をＶＭＸ内で実行すると、結果として一度に８つの操作が実行されることになる。
【００３５】
図３のプロセッサ内には、レジスタ・マップ・ユニット３２０も提供され、これはＶＭＸレジスタ３１０および浮動小数点レジスタ１１４の両方に結合されるように示されている。この例では、間接的に参照されることになる実レジスタ・セットを含む大規模レジスタ・ファイルが、浮動小数点ユニットによって使用される浮動小数点レジスタ・ファイル１１４であると想定している。以下で説明するように、レジスタ・マップ・ユニット３２０とＶＭＸＲ←３１０との間の両方向矢印は、ＶＭＸレジスタとマップ・レジスタとの間でそれぞれの内容を移動させるための機能を表している。
【００３６】
例を挙げると、典型的な浮動小数点レジスタは３２のレジスタを備えることが可能であり、本発明の態様によって想定されるような大規模レジスタ・ファイルは、１０２４のレジスタを備えることが可能である。浮動小数点レジスタ内での大規模レジスタ・ファイルの配置は、単なる一例である。別の方法として、または加えて、間接的にアクセスされることになる大規模レジスタ・ファイルはＶＭＸレジスタ・ファイル３１０とすることができる。しかしながら一考察として、大規模レジスタ・ファイルは、好ましくはパイプライン待ち時間が問題であるプロセッサ内の実行ユニットに関連付けられ、大規模レジスタ・ファイルの使用が、たとえばループのアンロールおよびソフトウェアのパイプライン化などの技法によりパイプライン待ち時間の影響を軽減する。
【００３７】
図４は、本発明の態様に従ったレジスタ・マップ・ユニット３２０の一実施形態を、より詳細に示す。レジスタ・マップ・ユニットはマップ・セットを含み、マップ・セットのそれぞれのマップは複数のマップ・レジスタを備え、それらすべてが全体としてマップ・レジスタ（ＭＲ）４００として示される。一例では、マップ・レジスタは、ＳＩＭＤ実行ユニットのレジスタ、すなわち図３および４の例のＶＭＸレジスタと同じフォーマットで構築された、マップ・エントリを含む。たとえば、図６に示すＶＭＸレジスタは１２８ビット幅であり、それぞれが１６の１バイト・データ要素、８つのハーフ・ワード・データ要素、または４つのフル・ワード・データ要素を保持すると想定する。マップ・エントリを含むレジスタも、１２８ビット幅であるものする。さらに、拡張レジスタ・セットのサイズに基づき、マップ・エントリを符号化するために必要なビット数が８より大きく１７より小さいものと想定する。次に、図７に示されるように、それぞれの１２８ビット・マップ・レジスタは８つのマップ・エントリを含み、各マップ・エントリがレジスタの１つのハーフ・ワードを占有する。ここでは、これらのマップ・エントリを含むレジスタがマップ・レジスタ４００と呼ばれる。
【００３８】
したがって注目すべき点は、マップ・レジスタの物理構造がＳＩＭＤレジスタ（たとえばＶＭＸレジスタ）のそれと同一である、すなわち、図６に示されるように各マップ・レジスタは１２８ビット幅であるという点である。第２の関係するポイントは、マップ・レジスタの論理構造がＳＩＭＤレジスタ（たとえばＶＭＸレジスタ）のそれと同一であり、内容は（図７に示される各マップ・レジスタの論理構造を備えた）１６ビット・ハーフ・ワードとして解釈される。マップ・レジスタ内の各ハーフ・ワードがマップ・エントリである。各マップ・レジスタ内に８つのマップ・エントリが保持される。各マップが３２のエントリを有するため、１つのマップについて４つのマップ・レジスタがある。４つのマップがあるため、全部合わせて１６のマップ・レジスタがある。マップ・レジスタとＳＩＭＤレジスタとの間で物理構造および論理構造の両方において対応を維持することの重要な利点は、ＳＩＭＤレジスタの内容に関して算術演算および論理演算を実行するため、およびＳＩＭＤレジスタの内容をメモリとの間で移動させるための、ＳＩＭＤ実行ユニットの既存の機能を使用して、本質的に任意のエントリでマップを効率良く構築できることである。８つのマップ・エントリのセットをＳＩＭＤレジスタ内に構築し、移動操作の一部としていかなるデータ変換の必要もなしに、ＳＩＭＤレジスタの内容をマップ・レジスタに移動することができる。したがって、ハードウェアの観点から、レジスタ・マップ・ユニット（ＲＭＵ）を比較的単純にすることができる。マップ・エントリの単純な設定（たとえば、マップ・レジスタ内に８つの連続値を設定する、またはマップ・レジスタ内の８つのエントリをすべて同じ定数ずつ増分する）は、ＲＭＵ内の基本ハードウェアで実行することができる。ＳＩＭＤ実行ユニットを使用して、より複雑なマップ・エントリ・セットをＳＩＭＤレジスタ内にセットアップした後、マップ・レジスタ内に移動することができる。
【００３９】
図４では、レジスタ・マップ・ユニット（ＲＭＵ）内に２つの他のレジスタ・セットが示されている。これらのレジスタ・セットは、増分レジスタ（ＩＲ）４２０および事前増分マップ・レジスタ（ＰＩＭＲ）４３０を備え、そのどちらも、以下で説明するようにマップ・エントリの管理に使用することができる。
【００４０】
図４のターゲット・ユニット４１０は、そのレジスタ・ファイルにマップに基づく間接化による間接アクセスが提供されるユニット、すなわち、図３の例では浮動小数点レジスタ１１４である。「Ｔ」、「Ａ」、「Ｂ」、および「Ｃ」とラベル付けされた矢印は、ターゲット・ユニット４１０がマップ・レジスタ４００から入手可能な、レジスタ・オペランドに関するインデックス付けされたマップ・エントリを示す。ＲＭＵ←３２０とＶＭＸＲ←３１０との間の「移動」矢印は、以下で詳細に説明するように、ＶＭＸレジスタの内容をマップ・レジスタへ、およびその逆へ移動させる機能示す。
【００４１】
前述のように、一実施形態では、それぞれが３２のエントリを備える４つのマップ・セットがレジスタ・マップ・ユニット内にある。これらのマッピングが図５に示され、以下のように、ターゲット・ユニット内で実行される命令の命令フォーマットにあるレジスタ・オペランドに関連付けられる。
・Ｔマップ：Ｔマップはターゲット・オペランドに関連付けられる。
・Ａマップ：Ａマップは、命令フォーマットで「Ａ」オペランドと指定された入力レジスタ・オペランドに関連付けられる。
・Ｂマップ：Ｂマップは、命令フォーマットで「Ｂ」オペランドと指定された入力レジスタ・オペランドに関連付けられる。
・Ｃマップ：Ｃマップは、命令フォーマットで「Ｃ」オペランドと指定された入力レジスタ・オペランドに関連付けられる。
加えて、これらのマップのうちの１つ、たとえばＣマップを、ターゲット・ユニットのレジスタ・ファイル内にあるソースまたはターゲットのレジスタを示す、ロードおよびストア命令内のレジスタ・オペランドに関連付けることもできる。
【００４２】
再度図５の例を見ると、それぞれが３２のマップ・エントリを備える４つのマップ・セットがある。１つのマップ・レジスタにつき８つのハーフ・ワード（ＨＷ）、すなわち８つのマップ・エントリがあるため、Ｍ０〜Ｍ１５とラベル付けされた１６のマップ・レジスタがある。１６のマップ・レジスタそれぞれが（図６および７に示されるような）１２８ビット・レジスタである。さらに、マップ・レジスタ内の８スロットのそれぞれがハーフ・ワードであり、１つのマップ・エントリを含む。
【００４３】
マップとレジスタ・オペランドとの関連性は、０から３１までの範囲にあるオペランド用に符号化された値をマップのインデックスとして使用できることを意味しており、すなわち、このようにして参照されるマップ・エントリに含まれる値はアクセスされる大規模レジスタ・ファイル内のレジスタのインデックスである。たとえば、ターゲット・ユニットが浮動小数点であり、浮動小数点レジスタ・ファイルが図３に示されるような間接化を使用してアクセスされる大規模レジスタ・ファイルであると考え、さらに、図８に示される命令「ｆａｄｄ  ｆＴ、ｆＡ、ｆＢ」を考えてみる。既存のＰｏｗｅｒＰＣ（Ｒ）アーキテクチャでは、これによって浮動小数点レジスタｆＡ内のデータ要素と浮動小数点レジスタｆＢ内のデータ要素との浮動小数点加算が実行され、その結果が浮動小数点レジスタｆＴ内に配置される。命令が「ｆａｄｄ  １、２、３」として符号化された場合、すなわちｆＴオペランドは「１」で符号化され、ｆＡオペランドは「２」で符号化され、ｆＢオペランドは「３」で符号化された場合、既存のアーキテクチャによれば、入力値は浮動小数点レジスタ・ファイルのレジスタ２および３から取得され、その結果は浮動小数点レジスタ・ファイルのレジスタ１に書き込まれる。間接化を使用する場合、符号化された値「１」、「２」、および「３」が、それぞれＴマップ、Ａマップ、およびＢマップへのインデックスとして使用される。たとえば、Ａマップ内のエントリ「２」が値「１７」を含み、Ｂマップ内のエントリ「３」が値「９５」を含み、Ｔマップ内のエントリ「１」が値「６」を含むと想定すると、「ｆａｄｄ  １、２、３」として符号化された命令は、レジスタ１７および９５から入力オペランドを取得し、その結果を大規模レジスタ・ファイルのレジスタ６に配置する。このプロセスが、図８に図式化されている。
【００４４】
図８に関して、以下の事項に留意されたい。
・この例では、（たとえば、浮動小数点レジスタまたはＶＭＸレジスタ内に配置された）大規模レジスタ・ファイルは１０２４個のレジスタを有する。したがって、レジスタ名の拡張セットは少なくともゼロから１０２３を含み、各マップ・エントリを符号化するには最低１０ビットが必要である。
・この例の命令はレジスタ・オペランドが３つしかないため、Ｃマップは使用されない。
・マップ・エントリは、マップを任意に構成できることを例示している。例えば、Ｔマップでは、ほとんどのエントリが同じ物理レジスタを指しているが、これはおそらく現実的な状況ではない。Ａマップではエントリにパターンはない。Ｂマップは、８つの連続する実レジスタ・インデックス（名前）のグループを有する。Ｃマップは識別マップである。
【００４５】
前述の内容に鑑み、本発明の態様に従ったマップ管理機構の特徴は以下の通りである。
【００４６】
１．マップ・エントリを含むレジスタは、好ましくは、ＳＩＭＤ実行ユニット内のレジスタ（たとえばＶＭＸレジスタ）と同じフォーマットを有するように構築される。たとえば、ＳＩＭＤユニットのレジスタが１２８ビット幅であり、それぞれが１６の１バイト・データ要素、８つのハーフ・ワード・データ要素、または４つのフル・ワード・データ要素を保持すると想定する。マップ・エントリを含むレジスタも１２８ビット幅である。拡張されたレジスタ・セットのサイズに基づき、マップ・エントリを符号化するのに必要なビット数が８より大きく１７より小さいと想定する。その結果、１２８ビットの「マップ・レジスタ」それぞれが８つのマップ・エントリを含み、それぞれがレジスタ内の１つのハーフ・ワードを占有する。
【００４７】
２．マップ・エントリの設定、修正、または読み取りを行う操作は、単一命令が単一マップ・レジスタの内容を参照する、たとえば１２８ビット・レジスタの例では、それぞれがハーフ・ワードを占有する、８つのマップ・エントリすべてを参照する、ＳＩＭＤ様式でこれを行う。
【００４８】
３．単純なハードウェアを使用して、（ａ）マップ・エントリを連続値に設定する（たとえば、マップ・レジスタ内の８つのマップ・エントリを、何らかの指定された初期設定値から始まる８つの連続値に設定する）こと、および（ｂ）レジスタ内のすべてのマップ・エントリを同じ定数値ずつ増分することを含む、マップ・レジスタの内容に関する単純な操作を実行することができる。
【００４９】
４．マップ・レジスタのフォーマットがＳＩＭＤレジスタ（たとえばＶＭＸレジスタ）のそれと一致することを考えると、データをＳＩＭＤユニット・レジスタからマップ・レジスタに直接移動することが可能であり、その逆もまた同様である。このように、すでにＳＩＭＤ実行ユニット（たとえばＶＭＸユニット）で使用可能な算術機能および論理機能を使用して、マップ・エントリの任意のセットを構築し、その後、レジスタ・マップ・ユニット内のマップ・レジスタに移動することができる。別の方法として、マップ・エントリのセットをメモリからＳＩＭＤユニット・レジスタ（すなわち、ＶＭＸレジスタ）にロードし、その後、マップ・レジスタに移動することもできる。したがって、特にマップ管理用に提供されるハードウェアは、比較的単純なものでよい。
【００５０】
５．再コンパイルなしの既存コードのサポートは、マップ内の各エントリがマップ内でのそれ自体のインデックスを含む（たとえば、識別マップ内のエントリｋが値ｋを含む）「識別マップ」を使用して提供可能である。アプリケーション・バイナリ・インターフェース（ＡＢＩ）の一部としてマップを効率的にかつ既存コードとの互換性をもって初期設定するために、各マップを識別マップに設定する命令を提供することができる。
【００５１】
図９〜１５は、本発明の諸態様に従ったマップ管理命令処理の様々な例を示す。マップ管理命令は、プロセッサの一般的な命令フォーマットを使用する。こうしたフォーマットは、一般的に、命令（たとえば、浮動小数点加算、メモリ・ロケーションからのロードなど）によって実行される機能を識別する命令コード・フィールド、ならびに、ソース・データまたはソース・データのロケーションさらにはターゲット・ロケーションを識別するｎ個のオペランドを含む。ＰｏｗｅｒＰＣ（Ｒ）アーキテクチャの場合、すべての命令が３２ビットを占有する。命令コードは少なくとも６ビットを有し、ほとんどの場合は６ビットより多い。オペランド・フィールドの数およびそれぞれのサイズは、命令によって異なる。
【００５２】
図９は、マップ管理命令の適切な命令フィールドからの値を復号すること８１０による、一般的なマップ管理命令の処理８００を示す。オペランド値が取得されると、復号されたオペランド値を使用して命令（すなわち命令コード）を実行することができる８２０。必要であれば、図４の事前増分マップ・レジスタ（ＰＩＭＲ）セット内の事前に増分されたマップ・エントリが、自動的に増分される。前述のように、マップ管理命令内の命令フィールドは命令の機能を定義し、前述の間接レジスタ・ファイル・アクセスのためのマップ・エントリ参照を提供する。一般に、プロセッサの命令ユニットは、この機能に基づいてプロセッサ内のどの実行ユニットが所望の機能を実行することになるかを理解し、その実行ユニットに命令を渡す。したがって、マップ・エントリ管理に関して、マップ管理命令が実行のためにマップ・レジスタ・ユニットに渡される。
【００５３】
一例では、事前増分メモリ・レジスタは、マップ・レジスタの変更または関連付けられた増分レジスタ値の変更があればいつでも更新可能である。マップ・エントリ値を事前に計算することにより、増分されたマップ・エントリがその後のマップ管理増分命令に使用可能となる。本明細書で説明される事前増分マップ・レジスタは、単なる１つのマップ・エントリ管理オプションにすぎない。一例では、マップ・レジスタと事前増分マップ・レジスタとの間に１対１の対応があるため、受け取ったマップ管理命令に依存して、事前に増分されたマップ・エントリの値を単にマップ・レジスタにスワップさせることができる。この処理については、図１４および１５を参照しながら以下でより詳細に説明する。
【００５４】
図１０は、「マップ・レジスタ即時設定」命令９００の処理例を示す。命令は、最初に命令の適切な命令フィールドからマップ・レジスタＩＤを取得するために解析され９１０、変数ｋがこのマップ・レジスタＩＤに設定される。「マップ・レジスタ即時設定」命令では、マップ・エントリ更新のための初期設定値は命令それ自体の中に提供される。したがって、次の処理は適切な命令フィールドから即時初期設定値を取得し９２０、変数ｉをこの初期設定値に設定する。この命令は、識別されたマップ・レジスタの８つのハーフ・ワード（たとえば図７を参照のこと）を８つの連続値に初期設定すると想定される。したがって、最初のハーフ・ワード（ｊ＝０、ここではｊ＝０から７）は命令から即時初期設定値に設定され、続いて、数式ＨＷｊ［Ｍｋ］＝ｉ＋ｊで表されるように、後続の各ハーフ・ワードは値１ずつ増分される。ここでも、当業者であれば、このマップ・レジスタ即時設定命令がマップ・エントリ更新の単なる１つの手法を表すにすぎないことを理解されよう。
【００５５】
他の手法が図１１に示されており、これは、前述のようなマップ・レジスタとＶＭＸレジスタとの間の物理フォーマットおよび論理フォーマットの類似性に基づくものである。この命令は、「ＶＭＸレジスタからマップ・レジスタへ移動」命令１０００とラベル付けされ、これは最初に、命令からマップ・レジスタＩＤを取得する１０１０ために処理される。このマップ・レジスタＩＤには変数ｋが再度設定される。次に、命令の適切な命令フィールドからＶＭＸレジスタＩＤが取得され、このＶＭＸレジスタＩＤは変数ｉに設定される１０２０。次に、マップ・レジスタの連続するハーフ・ワードそれぞれについて、そのマップ・エントリの値（ＨＷｊ［Ｍｋ］）がＶＭＸレジスタｉ内の対応するハーフ・ワード（ＨＷｊ［Ｖｉ］）に設定される１０３０。別の方法として、処理は単に、識別されたＶＭＸレジスタの内容全体を識別されたマップ・レジスタ内にブロック・コピーするだけでもよい。
【００５６】
図１２は、図１１と反対の命令を示し、マップ・エントリの内容がマップ・レジスタから識別されたＶＭＸレジスタへと移動される。この「マップ・レジスタからＶＭＸレジスタへ移動」命令１１００の処理は、命令の適切な命令フィールドからマップ・レジスタＩＤを取得すること１１１０、およびこのマップ・レジスタＩＤを変数ｋに設定することによって開始される。次に、命令の適切な命令フィールドからＶＭＸレジスタＩＤが取得され１１２０、この値は変数ｉに設定される。次に、マップ・レジスタ内のそれぞれのハーフ・ワード（ＨＷｊ［Ｍｋ］）について、対応するＶＭＸレジスタ・ハーフ・ワード（ＨＷｊ［Ｖｉ］）の内容がマップ・エントリの内容に設定される。
【００５７】
図１３および１４は、単純な「マップ・レジスタ増分」命令の代替実施形態を示す。初めに図１３では、「マップ・レジスタ増分」命令１２００が解析され、命令の適切な命令フィールドからマップ・レジスタＩＤが取得され１２１０、これが変数ｋに設定される。さらに、マップ・レジスタｋについて関連付けられた増分レジスタ（ＩＲ）からの増分値が取得され１２２０、この増分値は変数ｉに設定される。次に、処理は、識別されたマップ・レジスタの各連続するハーフ・ワードを増分値ｉだけ増分する１２３０。
【００５８】
図１４の代替実施形態では、「マップ・レジスタ増分」命令１３００が解析され、命令の適切な命令フィールドからマップ・レジスタＩＤが取得される１３１０。このマップ・レジスタＩＤは変数ｋに設定される。次に、対応する事前増分マップ・レジスタｋ（ＰＩＭｋ）が使用され、事前増分マップ・レジスタ（ＨＷｊ［ＰＩＭｋ］）から、識別されたマップ・レジスタの対応するハーフ・ワード（ＨＷｊ［Ｍｋ］）へと、それぞれのハーフ・ワード・マップ・エントリが単にコピーされる１３２０。
【００５９】
図１５は、事前に増分されたマップ・エントリを自動的に更新するための処理の一実施形態を示す。この、必要な場合、事前に増分されたマップ・エントリを更新する処理１４００は、マップ・レジスタの更新命令が実行されたかどうかを問い合わせること１４１０によって開始される。「ｙｅｓ」の場合、マップ・レジスタｋは更新された１４２０と想定され、変数ｉは、マップ・レジスタｋの現在の増分値に等しく設定される１４３０。「ｎｏ」の場合、プロセスは、増分レジスタの更新命令が実行されたかどうかを問い合わせる１４６０。「ｙｅｓ」の場合、マップ・レジスタｋの増分は更新された１４７０と想定され、変数ｉは、マップ・レジスタｋの現在の増分値に等しく設定される１４３０。再度、マップ・レジスタｋの現在の増分値が、図４に示される増分レジスタ（ＩＲ）４２０内に保持される。次に、各ハーフ・ワードｊ＝０から７について、マップ・レジスタｋ内の現在のエントリ（ＨＷｊ［Ｍｋ］）が値ｉずつ増分され（ＨＷｊ［Ｍｋ］＋ｉ）、その結果が事前増分マップ・レジスタｋのハーフ・ワードｊに配置される１４４０。ここで（および上記で）述べるＨＷｊ［ＰＩＭｋ］とは、事前増分マップ・レジスタｋ内のｊ番目のハーフ・ワードを意味することに留意されたい。事前増分マップ・レジスタが更新されるか、または両方の問い合わせに対する回答が「ｎｏ」の場合、処理は完了する１４５０。
【００６０】
実行されたばかりの命令がレジスタを更新しなかった１４１０と想定すると、処理は、前に実行された命令が増分レジスタを更新したかどうかを判別する１４６０。「ｎｏ」の場合、処理は完了する１４５０。そうでない場合、処理は、更新された増分レジスタがマップ・レジスタｋのためであったものと識別し１４７０、前述のように、対応する事前増分マップ・レジスタの更新へと進む。
【００６１】
当業者であれば、前述の考察から、本明細書ではマップに基づく間接レジスタ参照のためにマップ・レジスタのマップ・エントリ管理のための柔軟な機構が提供されることを理解されよう。このマップ・エントリ管理機構および本明細書に記載されたレジスタ・マップ・ユニットは、（一実施形態において）以下のマップ管理機能をサポートする。
・「マップ・レジスタ設定」命令を使用して、マップ・レジスタを一連の連続値に初期設定する機能。前述の１つのマップ・レジスタにつき８つのマップ・エントリを使用する場合、この操作は、８つのマップ・エントリを一連の８つの連続する値に初期設定することができる。一実施形態では、「マップ・レジスタ即時設定」命令の即時フィールド内に開始値を提供することが可能であるため、命令の待ち時間を１サイクルに保持することができる（すなわち、初期設定されたマップ・レジスタを、「マップ・レジスタ即時設定」命令が発行される、直後のサイクルで発行される命令に使用することができる）。
・「マップ・レジスタ増分」命令を使用して、マップ・レジスタ内のエントリを定数だけ増分する機能。この増分は、マップ・レジスタに関連付けられた対応する増分レジスタ（ＩＲ）から実行され、マップ・レジスタ内の各エントリが同じ増分値だけ増分される。各マップ・レジスタについて１つの増分レジスタがあることに留意されたい。また、一実施形態では、操作に関連付けられた待ち時間を１サイクルに保持することができる（すなわち、増分されたマップ・レジスタを、「マップ・レジスタ増分」命令が発行される、直後のサイクルで発行される命令に使用することができる）ことにも留意されたい。このため、事前増分マップ・レジスタ（ＰＩＭＲ）は、１つのマップ・レジスタにつき１つの事前増分マップ・レジスタで、レジスタ・マップ・ユニットに含められる。事前増分マップ・レジスタ内の各エントリは、対応する増分レジスタ内の現在の値だけ増分された、対応するマップ・レジスタ内の対応するエントリの現在の値に等しい値を有する。「マップ・レジスタ増分」命令の実行により、ターゲット・マップ・レジスタが対応する事前増分マップ・レジスタからロードされ（すなわち、図４のＲＭＵ下部の矢印）、同時に、ターゲット・マップ・レジスタ内の新しい値を、対応する増分レジスタ内の現在の値だけ増分させ、対応する事前増分マップ・レジスタにロードする（すなわち、図４のＲＭＵ上部の矢印）。たとえば、「マップ・レジスタ即時設定」命令または「マップ・レジスタへの移動」命令などにより、マップ・レジスタの内容に対する変更があれば、マップ・レジスタの新しい内容からの増分された値が対応する事前増分マップ・レジスタに配置されることになる。
・「マップ・レジスタへの／からの移動」命令を使用して（たとえば、図４のレジスタ間での「移動」ラインを介して）、ＶＭＸレジスタの内容をマップ・レジスタに移動するか、またはその逆を実行する機能。命令のソースまたはターゲットであるＶＭＸレジスタには、Ｃマップによる間接化を使用してアクセスすることができる。「マップ・レジスタへ移動」操作は、ターゲット・ユニット内のレジスタに間接的にアクセスする方法に関して完璧な柔軟性を提供する。マップは、ＶＭＸユニットの算術、論理、および置換機能を使用してＶＭＸレジスタ内に作成するか、または、それらをメモリからＶＭＸレジスタにロードすることが可能であり、必要に応じて、マップ・レジスタに移動することができる。これらの命令にはレジスタ・ファイル間の移動が必要であるため、それらの待ち時間が１サイクルよりも長くなることが予想される。これらの命令には、おそらく４サイクルの待ち時間が許容されるものとみなされる。
【００６２】
さらに一実施形態では、即時フィールドに符号化されたマスクを使用して、マスクによって決定されたマップ・レジスタ内のエントリのうちの１つまたは複数が、マップ命令によって変更されるのを防ぐことができる。命令は、増分レジスタ内の値を設定するためにも容易に提供することができる。
【００６３】
当業者であれば、前述の説明から、本明細書では、大規模レジスタ・ファイルのマップに基づく間接レジスタ・ファイル・アクセスのためにレジスタ・マップ管理のためのＳＩＭＤ指向管理機構が提供されることを理解されよう。
【００６４】
この管理機構はマップ・セットを有し、このマップ・セットの各マップは複数のマップ・レジスタを含む。さらに、レジスタ・マップ・ユニットのマップ・セットのマップ・エントリを介してプロセッサが間接的にアクセスする、実レジスタのセットが提供される。実レジスタ・セット内の実レジスタの数は、マップ・セット内のマップ・エントリの数よりも多く、マップ・セット内のマップ・エントリは、所与の時点で実レジスタのサブセットのみを参照する。この機構は、単一の更新命令の実行に応答してマップ・セットのうちの少なくとも１つのマップの複数のマップ・エントリを更新することによって、レジスタ・マップ・ユニットのマップ・セットのマップ・エントリへの更新を管理する。この管理は、プロセッサがデータを処理するために実レジスタ・セットに間接的にアクセスするために、マップ・セットのうちの少なくともいくつかの他のマップ・エントリを使用するのと同時に行うことができる。本発明の諸態様によれば、マップ・エントリの更新を実施するためには、プロセッサまたは実行ユニットが停止しないことが必要である。さらに、本発明は、所与のマップにおけるすべてのエントリの修正を強制する必要はないが、単一の更新命令の実行から複数のマップ・エントリを修正することができる。単一の更新命令は、単一命令多重データ（ＳＩＭＤ）命令を含むことができる。ＳＩＭＤ命令を実行すると、結果として、マップ・セットのうちの少なくとも１つのマップのすべてのマップ・エントリよりも少ないが複数のマップ・エントリが更新される。
【００６５】
マップ・エントリを更新するようにレジスタ・マップ・ユニットに命令するための様々な技法について説明する。たとえば、ＳＩＭＤに基づく実行ユニットおよび関連付けられたＳＩＭＤレジスタ（たとえば、ＶＭＸ実行ユニットおよびＶＭＸレジスタ）を使用して、少なくとも１つのＳＩＭＤレジスタ内の複数のマップ・エントリをセットアップすることが可能であり、少なくとも１つのＳＩＭＤレジスタの内容を少なくとも１つのマップ・レジスタへと転送するために「移動」命令が使用される。同様に、マップ・レジスタおよびＳＩＭＤレジスタが共通の物理および論理フォーマットを有するため、少なくとも１つのマップ・レジスタの内容を少なくとも１つのＳＩＭＤレジスタに転送することができる。マップ・エントリをマップ・レジスタからＳＩＭＤレジスタに転送することは、プロセッサの状態をキャプチャする際に、またはコンテキストを切り替える際に、有利な場合がある。マップ・エントリを更新するための他の技法には、単純な「マップ・レジスタ増分」命令の使用が含まれ、その結果として複数の連続したマップ・エントリが、たとえば更新されるマップ・レジスタに関連付けられた増分レジスタに格納された、所望の値だけ増分的に更新される。ある拡張として、事前増分マップ・レジスタを使用して、既存マップ・レジスタ値への増分的更新を事前に計算することが可能であり、さらに単一の更新命令を使用して、事前増分マップ・エントリを対応するマップ・レジスタにスワップすることが可能である。またさらに、「マップ・レジスタ即時設定」命令を使用して、命令それ自体のフィールドに提供された値による一連のマップ・エントリの更新を初期設定することができる。レジスタ・マップ・ユニットのマップ・セット内のマップ・エントリを更新するための複数の手法を提供することで、本発明の管理機構は、たとえばマップの管理に必要な内部ループで実行されるわずかな数の命令に関して、非常に柔軟なマップ管理メカニズムである。さらに、マップ管理に関連付けられたパイプライン待ち時間が、その柔軟性または効率に悪影響を与えることはない。
【００６６】
前述の詳細な説明は、コンピュータまたはコンピュータ・ネットワークで実行されるプログラム・プロシージャに関して論じた。これらのプロシージャに関する説明および表現は、当業者が他の当業者に自分の業務の内容を最も効果的に伝えるために使用される。これらは、ハードウェアまたはソフトウェア、あるいはその２つの組み合わせで実施することができる。
【００６７】
本明細書では、かつ一般的には、プロシージャとは、所望の結果に導くための一連のステップであると考えられる。これらのステップは、物理量の物理的操作を必要とするものである。通常、これらの物理量は、格納、転送、組み合わせ、比較、およびその他の操作が可能な電気信号または磁気信号の形を取るが、必ずしもこの限りではない。これらの信号は時に、主として一般的な用途で、ビット、値、要素、記号、文字、項、数、オブジェクト、属性、その他として言い表すことが便利であることがわかっている。しかしながら、これらおよび同様の用語はすべて、適切な物理量に関連付けられるものであり、これらの物理量に適用される単なる便宜上のラベルであることに留意されたい。
【００６８】
さらに実行される操作は、しばしば、一般に人間のオペレータによって実行される知的操作に関連付けられる加算または比較などの用語で言い表される。本発明の一部を形成する本明細書に記載された任意の操作において、こうした人間のオペレータの能力は必要ではなく、あるいはほとんどの場合望ましくなく、操作はマシン操作である。本発明の操作を実行するために有用なマシンには、汎用デジタル・コンピュータまたは同様のデバイスが含まれる。
【００６９】
本方法の各ステップは、メインフレーム・コンピュータ、パーソナル・コンピュータなどの任意の一般的なコンピュータ上で実行可能であり、Ｃ＋＋、Ｊａｖａ、Ｆｏｒｔｒａｎなどの任意のプログラム言語から生成されたプログラム・モジュールまたはオブジェクトの、１つまたは複数、あるいは１つまたは複数のうちの一部に準拠する。またさらに、各ステップ、または各ステップを実施するファイル、オブジェクト、などは、特定用途向けハードウェアまたはその用途向けに設計された回路モジュールによって実行可能である。
【００７０】
本発明は、好ましくは、コンピュータと通信するために高水準プロシージャまたはオブジェクト指向プログラミング言語で実施される。しかしながら、本発明は、所望であればアセンブリまたはマシン言語で実施可能である。いずれの場合も、言語はコンパイル済みまたは解釈済み言語とすることができる。
【００７１】
本発明は、記録媒体を備えたメカニズムすなわちコンピュータ・プログラム製品として実施することができる。こうしたメカニズムは、ＣＤ−ＲＯＭ、ディスケット、テープ、ハード・ドライブ、コンピュータＲＡＭまたはＲＯＭ、あるいは、プログラムの電子的、磁気的、光的、生体的、または他の同様の実施形態、あるいはそれらすべてを含むことができるが、これらに限定されるものではない。実際、メカニズムは、本発明の方法に従った汎用または特定用途向けのプログラム可能コンピュータの操作を制御するため、あるいは、本発明のシステムに従ってその構成要素を構築するため、またはその両方のために、マシンによって読み取り可能な信号を格納または伝送するための、磁気媒体、光学媒体等を含む任意の固体または流体の媒体を含むことができる。
【００７２】
本発明は、システムで実施することも可能である。システムは、プロセッサおよびメモリ・デバイスを含み、オプションでストレージ・デバイス、ビデオ・ディスプレイなどの出力デバイス、あるいはキーボードまたはコンピュータ・マウスなどの入力デバイス、またはそれらすべてを含む、コンピュータを備えることができる。さらに、システムは、相互接続されたコンピュータ・ネットワークも備えることができる。コンピュータは、等しくスタンド・アロン型（従来のデスクトップ・パーソナル・コンピュータ）とするか、または他の装置（電子テスト機器など）に組み込むことが可能である。システムは、たとえば本発明の方法ステップを実行するのに必要な目的のために特別に構築するか、あるいはコンピュータに格納された本明細書の教示に関連して、コンピュータ・プログラムによって選択的に活動化または再構成されるような１つまたは複数の汎用コンピュータを備えることができる。本明細書に提示されたプロシージャは、特定のコンピュータ・システムまたは他の装置に本質的に関連していない。多種多様なこれらのシステムに必要な構造は、上記の説明から明らかとなろう。
【００７３】
ここでも、本発明の１つまたは複数の態様の機能は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの何らかの組み合わせで実施することができる。
【００７４】
本発明の１つまたは複数の態様は、たとえばコンピュータ使用可能媒体を有する製品（たとえば、１つまたは複数のコンピュータ・プログラム製品）に含めることができる。媒体は、本発明の機能を提供および容易にするための、たとえばコンピュータ読み取り可能プログラム・コード手段または論理（たとえば命令、コード、コマンドなど）をその中に有する。製品は、コンピュータ・システムの一部として含めるか、または別々に販売することが可能である。
【００７５】
加えて、本発明の機能を実行するためにマシンによる実行が可能な命令の少なくとも１つのプログラムを具体化する、マシンによる読み取りが可能な少なくとも１つのプログラム・ストレージ・デバイスを提供することができる。
【００７６】
本明細書に図示された流れ図は、単なる例である。本発明の趣旨を逸脱することなく、本明細書で説明されたこれらの図またはステップ（または操作）に対する多くの変形形態が可能である。たとえば、ステップは異なる順序で実行可能であるか、あるいはステップを追加、削除、または修正することが可能である。これらの変形形態は、すべて特許請求の範囲に記載されている発明の一部とみなされる。
【００７７】
以上、好ましい諸実施形態について本明細書で詳細に図示および説明してきたが、当業者であれば、本発明の趣旨を逸脱することなく様々な修正、追加、置換、その他が実行可能であること、および、したがってこれらが特許請求の範囲に定義された本発明の範囲内にあるものとみなされることが明らかとなろう。
【図面の簡単な説明】
【００７８】
【図１】本発明の態様に従った、マップに基づく間接レジスタ・ファイル・アクセスを使用するプロセッサを示すブロック図である。
【図２】本発明の態様に従った、図１のプロセッサ内での、レジスタのアドレス可能度を向上させるためのマップに基づく間接レジスタ・ファイル・アクセスのためのメカニズムの一実施形態を示す図である。
【図３】本発明の態様に従った、マップに基づく間接レジスタ・ファイル・アクセスのためのマップ管理機構を使用する、プロセッサの他の実施形態を示すブロック図である。
【図４】本発明の態様に従った、レジスタ・マップ・ユニットの一実施形態と、マップ・エントリの管理、およびターゲット・ユニットにおける実レジスタ・セットの間接アクセスの態様とを示す、ブロック図である。
【図５】本発明の態様に従った、レジスタ・マップ・ユニットによって使用されるマップ・セットを示す図である。
【図６】たとえばＰｏｗｅｒＰＣ（Ｒ）プロセッサのＶＭＸユニットに関連付けられた、従来の１２８ビットＶＭＸレジスタを示す図である。
【図７】本発明の態様に従った、８つの１６ビット・ハーフ・ワードに分割された１２８ビットを備えるマップ・レジスタ、ならびにマップ・レジスタおよびＶＭＸレジスタの共通サイズ変更の一実施形態を示す図である。
【図８】本発明の態様に従った、マップに基づく間接レジスタ・ファイル・アクセスの他の例を示す図である。
【図９】本発明の態様に従った、マップ管理命令の処理を示す概略流れ図である。
【図１０】本発明の態様に従った、「マップ・レジスタ即時設定」命令処理の一実施形態を示す流れ図である。
【図１１】本発明の態様に従った、「ＶＭＸからマップ・レジスタへの移動」命令処理の一実施形態を示す流れ図である。
【図１２】本発明の態様に従った、「マップ・レジスタからＶＭＸレジスタへの移動」命令処理の一実施形態を示す流れ図である。
【図１３】本発明の態様に従った、「マップ・レジスタ増分」命令処理の一実施形態を示す流れ図である。
【図１４】本発明の態様に従った、「マップ・レジスタ増分」命令処理の他の実施形態を示す流れ図である。
【図１５】本発明の態様に従った、事前増分マップ・レジスタの事前増分されたマップ・エントリを自動的に更新するためのプロセスの一実施形態を示す流れ図である。
【符号の説明】
【００７９】
１１１    データ・キャッシュ
１１２    命令キャッシュ
１１３    汎用レジスタ
１１４    浮動小数点レジスタ
１１５    命令ユニット
１１６    整数ユニット
１１７    ロード／ストア・ユニット
１１８    浮動小数点ユニット
１１９    完了ユニット
３００    ＶＭＸユニット
３１０    ＶＭＸＲ
３２０    レジスタ・マップ・ユニット
【図１】
2007234011.tif 000003
【図２】
2007234011.tif 000004
【図３】
2007234011.tif 000005
【図４】
2007234011.tif 000006
【図５】
2007234011.tif 000007
【図６】
2007234011.tif 000008
【図７】
2007234011.tif 000009
【図８】
2007234011.tif 000010
【図９】
2007234011.tif 000011
【図１０】
2007234011.tif 000012
【図１１】
2007234011.tif 000013
【図１２】
2007234011.tif 000014
【図１３】
2007234011.tif 000015
【図１４】
2007234011.tif 000016
【図１５】
2007234011.tif 000017