(57)【要約】レジスタファイル（６０）、およびレジスタファイル（６０）に結合された実行コア（５２）を含む、中央処理装置（ＣＰＵ）（３２）が記載される。レジスタファイル（６０）は、標準レジスタセット（８４）および拡張レジスタセット（８６）を含む。標準レジスタセット（８４）は、複数の標準レジスタを含み、拡張レジスタセット（８６）は、複数の拡張レジスタを含む。実行コア（５２）は、命令をフェッチおよび実行し、ＣＰＵ（３２）の演算モードを示す信号を受取る。信号によってＣＰＵ（３２）が拡張レジスタモードで演算していることが示され、かつ命令（８０）が、少なくとも１つの拡張レジスタにアクセスするために使用する情報を含む接頭部（８２）を含む場合、実行コア（５２）は、その少なくとも１つの拡張レジスタにアクセスすることによって、命令（８０）に応答する。
2004506263.tif 000002
【特許請求の範囲】
【請求項１】
中央処理装置（ＣＰＵ）（３２）であって、
標準レジスタセット（８４）と拡張レジスタセット（８６）とを含むレジスタファイル（６０）を含み、前記標準レジスタセット（８４）は、複数の標準レジスタを含み、前記拡張レジスタセット（８６）は、複数の拡張レジスタを含み、前記中央処理装置（ＣＰＵ）はさらに、
前記レジスタファイル（６０）に結合された実行コア（５２）を含み、前記実行コア（５２）は、命令（８０）が、少なくとも１つの拡張レジスタにアクセスするために使用する情報を含む接頭部（８２）を含む場合、前記少なくとも１つの拡張レジスタにアクセスすることによって、前記命令（８０）に応答するように構成される、ＣＰＵ（３２）。
【請求項２】
標準レジスタの数は、ＣＰＵアーキテクチャによって規定される汎用レジスタの数より少ないか、または等しく、拡張レジスタの数は、前記ＣＰＵアーキテクチャによって規定される汎用レジスタの前記数よりも多い、請求項１に記載のＣＰＵ（３２）。
【請求項３】
前記接頭部（８２）のない前記命令（８０）は、前記標準レジスタのうちの選択されたレジスタを識別するのに十分なレジスタ識別情報を含み、前記命令（８０）の前記接頭部（８２）は、前記拡張レジスタのうちの選択されたレジスタを識別するために使用する付加的なレジスタ識別情報を含む、請求項１に記載のＣＰＵ（３２）。
【請求項４】
前記接頭部（８２）を含めて前記命令（８０）をコード化したものは、前記実行コア（５２）によってアクセスされる前記少なくとも１つの拡張レジスタを識別する、請求項１に記載のＣＰＵ（３２）。
【請求項５】
前記実行コア（５２）は、可変長命令をフェッチおよび実行するように構成される、請求項１に記載のＣＰＵ（３２）。
【請求項６】
前記接頭部（８２）は、拡張レジスタ接頭バイト（９０）を含み、前記拡張レジスタ接頭バイト（９０）は、拡張レジスタキーフィールド（９２）を含み、前記拡張レジスタキーフィールド（９２）の内容は、前記拡張レジスタ接頭バイト（９０）を識別する、請求項１に記載のＣＰＵ（３２）。
【請求項７】
拡張レジスタモードが大域的にイネーブルされているかどうかを示す情報を記憶するための制御レジスタ（６２）と、
拡張レジスタモードが現在のプロセスによってイネーブルされているかどうかを示す情報を記憶するためのフラグレジスタ（６４）と、
前記ＣＰＵ（３２）の演算モードを示す信号を生成するための生成手段（５８）とをさらに含み、前記拡張レジスタモードが大域的にイネーブルされ、かつ現在のプロセスによってイネーブルされている場合、前記信号は、前記ＣＰＵ（３２）が前記拡張レジスタモードで演算することを示す、請求項１に記載のＣＰＵ（３２）。
【請求項８】
前記拡張レジスタの幅は、前記ＣＰＵアーキテクチャによって規定される前記汎用レジスタの幅よりも大きく、前記命令（８０）に応答してアクセスされるべき前記幅は、前記接頭部（８２）の中で特定される、請求項１に記載のＣＰＵ（３２）。
【請求項９】
前記実行コア（５２）は、前記ＣＰＵ（３２）の演算モードを示す信号を受取るように結合され、前記実行コア（５２）は、前記ＣＰＵ（３２）が拡張レジスタモードで演算していることを示す信号に応答して、前記少なくとも１つの拡張レジスタにアクセスするようにさらに構成される、請求項１に記載のＣＰＵ（３２）。
【請求項１０】
前記接頭部（８２）は、各レジスタにアクセスするための情報を含み、前記命令（８０）の演算である、請求項１に記載のＣＰＵ（３２）。
【請求項１１】
命令（８０）をデコードするステップと、
前記命令（８０）の接頭部（８２）に含まれる情報に応答して、標準レジスタセット（８４）および拡張レジスタセット（８６）のうちの１つにアクセスするステップとを含む、方法。
【請求項１２】
前記アクセスは、拡張レジスタモードを示す演算モードにさらに応答する、請求項１１に記載の方法。
【請求項１３】
前記命令（８０）の前記接頭部（８２）の付加的な情報に応答して、レジスタの幅にアクセスするステップをさらに含む、請求項１１に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の背景】
技術分野
この発明は、マイクロプロセッサに関し、特に、既存のマイクロプロセッサアーキテクチャ内でレジスタアドレス空間を拡張するための仕組みに関する。
【０００２】
背景技術
マイクロプロセッサの製造業者は、ｘ８６の命令を実行する新製品の開発を続けている。これは以前の８０ｘ８６世代のために、すなわち８０８６／８、８０２８６、８０３８６および８０４８６のために開発された大量のソフトウェアとの互換性を維持するためである。ソフトウェアの互換性を維持するため、新製品は、アーキテクチャに関してさまざまな妥協を余儀なくされている。以前の製品の機能を維持するため、マイクロプロセッサハードウェアは、しばしば変更または拡張されて、能力および性能を向上してきた。
【０００３】
ｘ８６の命令セットは、比較的複雑であり、複数の可変バイト長命令によって特徴付けられている。図１は、ｘ８６の命令１０の一般的なフォーマットである。ｘ８６の命令１０では、オプションの接頭バイト１２がオペコードフィールド１４内の１から２バイトのオペレーションコード（オペコード）バイトの前に来ることができる。オプションのアドレス指定モード（Ｍｏｄ　Ｒ／Ｍ）バイト１６がオペコードフィールド１４に続くことができる。オプションのスケールインデックスベース（ＳＩＢ）バイト１８がオプションのＭｏｄ　Ｒ／Ｍバイト１６に続くことができる。オプションの変位フィールド２０がオプションのＳＩＢバイト１８に、オプションの即値データフィールド２２がオプションの変位フィールド２０に続くことができる。オプションの変位フィールド２０は、アドレス計算で使用される定数を含み、オプションの即値フィールド２２は、命令オペランドとして使用される定数を含む。
【０００４】
オペコードフィールド１４の中の１から２バイトのオペコードバイトがｘ８６の命令１０の基本演算を規定する。基本演算は、典型的には少なくとも１つのオペランドに関わる。ｘ８６のアーキテクチャでは、メモリ間の伝送は不可能であるため、オペランドのうちの少なくとも１つは、常にレジスタ（すなわちレジスタオペランド）となる。オペコードバイトの最下位３ビットは、レジスタオペランドを特定することができる。最も短いｘ８６の命令は、たった１バイトの長さであり、単一のオペコードバイトを含む。８０２８６は、ｘ８６の命令の最大の長さを１０バイトに設定しているのに対し、８０３８６および８０４８６は、ともに最高１５バイトのｘ８６の命令が可能である。
【０００５】
ｘ８６命令の演算は、接頭バイト１２によって変更することができる。たとえば、接頭バイト１２は、ｘ８６の命令のアドレスまたはオペランドのサイズを変更することができ、メモリのアドレス指定で使用されるデフォルトのセグメントをオーバーライドすること、または、ｘ８６の命令を実行しているプロセッサに一連の演算を何度か繰返すように指示することができる。命令オペランドのサイズは、オペランドの中のビット数、またはビットで表したオペランドの「幅」を示すことが注目される。
【０００６】
オプションのＭｏｄ　Ｒ／Ｍバイト１６は、使用するレジスタ、およびメモリのアドレス指定モードを特定する。図２は、Ｍｏｄ　Ｒ／Ｍバイト１６のフィールドを示す。図２に示すように、Ｍｏｄ　Ｒ／Ｍバイト１６は、３つのフィールド、すなわち、モード（ＭＯＤ）フィールド、レジスタ／オペコード（ＲＥＧ／ＯＰ）フィールドおよびレジスタ／メモリ（Ｒ／Ｍ）フィールドに分けられる。ＭＯＤフィールドの内容が、Ｒ／Ｍフィールドおよび変位フィールド２０がどのように解釈されるかを決定する。ＲＥＧ／ＯＰフィールドは、レジスタオペランドを特定するために、または付加的なオペコードビットを保持するために使用する。Ｒ／Ｍフィールドは、ＭＯＤフィールドの内容に依存して、レジスタオペランドまたはメモリオペランドを特定する。
【０００７】
オプションのＳＩＢバイト１８は、スケールおよびインデックスファクタを使用する３２ビット基底相対アドレス指定でのみ使用される。図３は、ＳＩＢバイト１８のフィールドを示す。図３に示すように、ＳＩＢバイト１８は３つのフィールド、すなわち、ＳＣＡＬＥフィールド、ＩＮＤＥＸフィールドおよびＢＡＳＥフィールドに分けられる。ＢＡＳＥフィールドは、どのレジスタがアドレス計算のための基底値を含むかを特定する。ＩＮＤＥＸフィールドは、どのレジスタがアドレス計算のためのインデックス値を含むかを特定し、ＳＣＡＬＥフィールドは、２の累乗を特定する。インデックス値は、この２の累乗によって乗じられてから、何らかの変位とともにベース値に加えられる。
【０００８】
ｘ８６アーキテクチャの特定のレジスタへの参照は、オペコードバイトの最下位３ビット内、オプションのＭｏｄ　Ｒ／Ｍバイト１６のＲＥＧ／ＯＰフィールド内、オプションのＭｏｄ　Ｒ／Ｍバイト１６のＲ／Ｍフィールド内またはオプションのＳＩＢバイト１８のＢＡＳＥフィールドおよびＩＮＤＥＸフィールドに現われ得る。このため、ｘ８６の命令においては、４つのレジスタ参照があり得る。上述のように、オペコードバイトの最下位３ビットは、レジスタオペランドを特定することができる。Ｍｏｄ　Ｒ／Ｍバイト１６のＲＥＧ／ＯＰフィールドおよびＲ／Ｍフィールドは、ソースおよび目的レジスタを特定することができる。ＳＩＢバイト１８のＢＡＳＥフィールドおよびＩＮＤＥＸフィールドは、メモリにアクセスするためにオペランドアドレス計算で使用される基底値およびインデックス値を含むレジスタを特定することができる。レジスタへの４つの参照には４つあるが、どのｘ８６命令もそのうちの３つの参照しか含み得ないことが注目される。
【０００９】
ｘ８６のアーキテクチャの重大な欠点は、汎用レジスタの数が比較的少ないことである。ｘ８６のアーキテクチャは、現在８個の３２ビット汎用レジスタ、すなわち、ＥＡＸレジスタ、ＥＢＸレジスタ、ＥＣＸレジスタ、ＥＤＸレジスタ、ＥＳＰレジスタ、ＥＢＰレジスタ、ＥＳＩレジスタおよびＥＤＩレジスタを規定している。これに対して、典型的なＲＩＳＣプロセッサは、少なくとも３２の汎用レジスタを有する。レジスタのセットが大きければ、より多くのオペランドを比較的アクセスの遅いメモリではなく、比較的アクセスの早いレジスタファイルに記憶することができる。現在のコンパイラもレジスタの数が多いことを利用して、命令レベルでより大きな並行処理を行なって、スーパースカラ実行の性能を向上させることができる。ｘ８６レジスタの数が限られていることに加え、コンパイラによるレジスタの使用は、大半のレジスタには、さまざまな命令の中で特別な暗示的な使用方法があるという事実のために複雑である。
【００１０】
【発明の開示】
レジスタファイル、およびレジスタファイルに結合される実行コアを含む、中央処理装置（ＣＰＵ）が記載される。レジスタファイルは、標準レジスタセットおよび拡張レジスタセットを含む。標準レジスタセットは、複数の標準レジスタを含み、拡張レジスタセットは、複数の拡張レジスタを含む。実行コアは、命令をフェッチおよび命令を実行し、ＣＰＵの演算モードを示す信号を受取る。信号によってＣＰＵが拡張レジスタモードで演算していることが示され、命令が接頭部を含み、その接頭部に少なくとも１つの拡張レジスタにアクセスするのに必要な命令が含まれる場合、実行コアは、その少なくとも１つの拡張レジスタにアクセスすることによって、命令に応答する。ＣＰＵを含むコンピュータシステムも説明する。
【００１１】
標準レジスタは、命令に関連してＣＰＵアーキテクチャによって規定される汎用レジスタであってもよい。たとえば、標準レジスタは、ｘ８６のアーキテクチャによって規定される汎用レジスタであってもよく、命令は、ｘ８６の命令セットのものであってもよい。標準レジスタの数は、ＣＰＵアーキテクチャによって規定される汎用レジスタの数より少ないか、またはそれと等しくてもよい。拡張レジスタの数は、ＣＰＵアーキテクチャによって規定される汎用レジスタの数より多くてもよい。この場合、接頭部のない命令は、標準レジスタのうちの選択されたレジスタを識別するのに十分なレジスタ識別情報を含むことができる。しかしながら、拡張レジスタの数は、ＣＰＵアーキテクチャによって規定される汎用レジスタの数を超えるため、レジスタ識別情報は、拡張レジスタのうちの選択されたレジスタを識別するためには十分ではないことがあり得る。命令の接頭部は、拡張レジスタのうちの選択されたレジスタを識別するために必要な付加的な情報を含む。このため、接頭部を含めて命令をコード化したものにより、実行コアによってアクセスされる少なくとも１つの拡張レジスタを識別することができる。
【００１２】
一実施例では、標準レジスタセットは、ｘ８６アーキテクチャにより規定される８個の３２ビット汎用レジスタを含む。８個の３２ビット汎用レジスタは、たとえばＥＡＸレジスタ、ＥＢＸレジスタ、ＥＣＸレジスタ、ＥＤＸレジスタ、ＥＳＰレジスタ、ＥＢＰレジスタ、ＥＳＩレジスタおよびＥＤＩレジスタを含んでもよい。拡張レジスタセットは、標準レジスタセットの８個の３２ビット汎用レジスタ、およびｘ８６のアーキテクチャによって規定されない８個の付加的な３２ビットレジスタを含んでもよい。実行コアは、可変長ｘ８６命令をフェッチおよび実行できるように構成することができる。
【００１３】
接頭部は、拡張レジスタ接頭バイトを含んでもよく、拡張レジスタ接頭バイトは、拡張レジスタキーフィールドを含んでもよい。拡張レジスタキーフィールドの内容は、拡張レジスタ拡張バイトが、少なくとも１つの拡張レジスタにアクセスするために必要な情報を含んでいるかどうかを示すことができる。たとえば、拡張レジスタ接頭バイトは、拡張レジスタキーフィールドが予め定められた拡張レジスタキー値（たとえば二進値「０１００」）を含む場合のみ、少なくとも１つの拡張レジスタにアクセスするのに必要な情報を含むことができる。
【００１４】
ＣＰＵは、拡張レジスタモードが大域的にイネーブルされているかどうか示す情報を記憶するための制御レジスタ、拡張レジスタモードが現在のプロセスによってイネーブルされているかどうかを示す情報を記憶するためのフラグレジスタ、およびＣＰＵの演算モードを示す信号を生成するための生成手段を含んでもよい。拡張レジスタモードが大域的にイネーブルされ、かつ現在のプロセスによってイネーブルされている場合、信号は、ＣＰＵが拡張レジスタモードで演算していることを示すことができる。
【００１５】
標準レジスタセットは、ＣＰＵアーキテクチャ（たとえばｘ８６のアーキテクチャ）によって規定される複数の汎用レジスタを含んでもよく、拡張レジスタセットの拡張レジスタの幅は、標準レジスタの幅より大きくてもよい。レジスタの幅は、そのレジスタ内のビットの総数である。実行コアは、次の場合に、少なくとも１つの拡張レジスタの内容全体にアクセスすることによって命令に応答することができる。（ｉ）信号によって、ＣＰＵが拡張レジスタモードで演算していることが示される場合、（ｉｉ）命令が接頭部を含み、その接頭部が少なくとも１つの拡張レジスタにアクセスするために必要な情報を含む場合、（ｉｉｉ）接頭部が、少なくとも１つの拡張レジスタの内容全体にアクセスすべきであるとの表示を含む場合。このようにして、ＣＰＵが拡張レジスタモードで演算している場合、命令オペランドサイズを選択的に増やすことができる。標準レジスタセットは、拡張レジスタセットのサブセットであってもよく、標準レジスタは、拡張レジスタの下位（すなわち最下位）の部分であってもよい。
【００１６】
上述の拡張レジスタキーフィールドに加え、拡張レジスタ接頭バイトは、オペランドサイズオーバーライドビットを含んでもよい。オペランドサイズオーバービットの値は、少なくとも１つの拡張レジスタの内容全体にアクセスすべきかどうかを示すことができる。命令オペランドのサイズは、そのオペランド内のビット数、またはビットで表わしたオペランドの「幅」を指すことが注目される。
【００１７】
この発明には、さまざまな変形および代替の形があり得るが、具体的な実施例を図面による例によって示し、詳細に説明する。しかしながら、その図面および詳細な説明は、この発明を開示された具体的な形に限定することは意図しておらず、反対に、この発明は、特許請求の範囲に規定されるこの発明の精神および範囲内にあるすべての変形、均等物および代替物を含むことを意図する。
【００１８】
【発明を実施するためのモード】
図４は、コンピュータシステム３０の一実施例の図である。コンピュータシステム３０は、中央処理装置（ＣＰＵ）３２、ノースブリッジ３４、メモリ３６、周辺装置接続（ＰＣＩ）バス３８、サウスブリッジ４０、および業界標準アーキテクチャ（ＩＳＡ）バス４２を含む。ＣＰＵ３２は、メモリ３６内に記憶された命令（たとえばｘ８６の命令）を実行する。ノースブリッジ３４は、ＣＰＵ３２、メモリ３６およびＰＣＩバス３８の間のインターフェイスを形成する。メモリ３６は、たとえば半導体読出専用メモリ（ＲＯＭ）および／または半導体ランダムアクセスメモリ（ＲＡＭ）を含み得る。サウスブリッジ４０は、ＰＣＩバス３８とＩＳＡバス４２との間のインターフェイスを形成する。
【００１９】
コンピュータシステム３０は、ＰＣＩバス３８に結合された第１の装置４４Ａ、およびＩＳＡバス４２に結合された第２の装置４４Ｂを含む。装置４４Ａは、たとえば、モデム、サウンドカード、ネットワークアダプタなどの入出力（Ｉ／Ｏ）装置であってもよい。図４に示すように、装置４４Ａは、ＰＣＩバス３８でなく、ＩＳＡバス４２に結合することができる。装置４４Ｂは、たとえば、ハードディスクドライブ、フロッピー（Ｒ）ディスクドライブ、コンパクトディスク読出専用メモリ（ＣＤ−ＲＯＭ）ドライブなどの周辺装置であってもよい。図４に示すように、装置４４Ｂは、ＩＳＡバス４２ではなく、ＰＣＩバス３８に結合することができる。
【００２０】
ＣＰＵ３２は、ノースブリッジ３４を介して、メモリ３６から命令をフェッチ（または伝送）し、その命令を実行する。メモリ３６に記憶されたデータを命令によって操作することができる。命令およびデータは、メモリ３６内のアドレスに存在し、アドレスは、メモリ３６内での記憶場所または場所を特定する値である。命令およびデータのアドレスは、ノースブリッジ３４に与えられる前に、ＣＰＵ３２によって翻訳することができる。この場合、ＣＰＵ３２は、アドレス翻訳ハードウェアを含んでもよく、メモリ３６は、ＣＰＵ３２が仮想アドレスを物理的なアドレスに翻訳するために使用する、アドレス翻訳情報を記憶することができる。
【００２１】
後に説明するように、ＣＰＵ３２は、以前にＣＰＵ３２によってアクセスされた命令およびデータを記憶するように構成される内部キャッシュメモリ（すなわち内部キャッシュ）を含む。コンピュータシステム３０も、以前にＣＰＵ３２によってアクセスされた命令およびデータを記憶するように構成される外部キャッシュを含んでもよい。メモリ３６に記憶されていると称される情報は、ＣＰＵ３２の内部キャッシュに記憶されてもよいし、またはコンピュータシステム３０の外部キャッシュに記憶されてもよいと理解される。
【００２２】
図５は、図４のＣＰＵ３２の一実施例の図である。ＣＰＵ３２の他の実施例も可能であり、企図される。図５の実施例では、ＣＰＵ３２は、命令キャッシュ５０、実行コア５２、データキャッシュ５４、インターフェイスユニット５６、デコード制御ユニット５８およびレジスタファイル６０を含む。命令キャッシュ５０は、実行コア５２、デコード制御ユニット５８およびインターフェイスユニット５６に結合される。実行コア５２は、デコード制御ユニット５８、レジスタファイル６０およびデータキャッシュ５４に結合される。データキャッシュ５４は、実行コア５２、デコード制御ユニット５８、およびインターフェイスユニット５６に結合される。インターフェイスユニット５６は、命令キャッシュ５０、データキャッシュ５４、デコード制御ユニット５８およびノースブリッジ３４（図４）に結合される。
【００２３】
デコード制御ユニット５８は、制御レジスタ６２を含む。デコード制御ユニット５８は、ＣＰＵ３２の状態を報告および制御するために使用するフラグレジスタ６４も含む。フラグレジスタ６４は、ｘ８６フラグレジスタであってもよい。現代のｘ８６プロセッサは、３２ビット拡張フラグレジスタまたは「ＥＦＬＡＧＳ」レジスタを含む。フラグレジスタ３４は、現代のｘ８６プロセッサの３２ビットＥＦＬＡＧＳレジスタであるのが好ましい。
【００２４】
一般的に言って、ＣＰＵ３２は、ｘ８６アーキテクチャと互換性のあるプロセッサアーキテクチャを用い、６４ビット処理をサポートするために、さらなるアーキテクチャ上の特徴を含む。ＣＰＵ３２は、制御レジスタ６２およびフラグレジスタ６４に記憶されるイネーブル表示に応答して、演算モードを確立するように構成される。
【００２５】
ここで使用される、ＣＰＵ３２の「演算モード」は、さまざまなプログラムによって選択可能なプロセッサ属性のためのデフォルト値を特定する。説明した実施例では、ＣＰＵ３２の演算モードは、デフォルトのオペランドサイズを特定する。命令オペランドのサイズは、そのオペランド内のビット数、またはビットで表わしたそのオペランドの「幅」を指すことが注目される。後に詳しく説明するように、命令をコード化したものは、デフォルトのオペランドサイズをオーバーライドすることができる。
【００２６】
図５の実施例では、デコード制御ユニット５８は、ＣＰＵ３２の演算モードを示す演算モード信号を生成し、その演算モード信号を実行コア５２に与える。実行コア５２は、演算モード信号（すなわちＣＰＵ３２の演算モード）に依存して、命令を実行する。ＣＰＵ３２の演算モードは、「３２ビット互換性」モード、および「３２ビットレジスタ拡張」または「ＲＥＸ３２」モードを含む。３２ビット互換性モードおよびＲＥＸ３２モードのどちらにおいても、デフォルトのオペランドサイズは３２ビットである。ＲＥＸ３２モードでは、命令は、後に説明する、命令をコード化したものに従って、デフォルトの３２ビットオペランドサイズを６４ビットオペランドサイズでオーバーライドすることができる。さらに、後に詳しく説明するように、ＲＥＸ３２モード７４では、命令をコード化したものにフィールド拡張ビットを含めて、命令内で参照できるレジスタの数を増やすことができる。
【００２７】
ＲＥＸ３２モードは、制御レジスタ６２の「ＲＥＸ３２」ビット６３、およびフラグレジスタ６４の「ＲＸ」ビット６６によってイネーブルされる。ＲＥＸ３２ビット６３は、ＲＥＸ３２モードの大域的イネーブルを与える。たとえば、ＲＥＸ３２モードは、論理値「１」がＲＥＸ３２ビット６３に記憶される場合にイネーブルされ、論理値「０」がＲＥＸ３２ビット６３に記憶される場合にディスエーブルされ得る。ＲＥＸ３２ビット６３は、比較的高いアクセスまたは特権レベル（たとえばオペレーティングシステム、基本的入出力システムまたはＢＩＯＳ、またはスーパーバイザモードユーティリティなどの「特権コード」）を有するコードによって書かれることが好ましい。
【００２８】
制御レジスタ６２は、ｘ８６アーキテクチャの現在の状態によって規定される制御レジスタのうちの１つであってもよく、このため、周知の技術を使用してアクセスできることが注目される。たとえば、ＲＥＸ３２ビット６３は、現在規定さる３２ビット制御レジスタＣＲ０〜ＣＲ４のうちの１つの中のビットであってもよい。またはこれに代えて、制御レジスタ６２は、ｘ８６アーキテクチャの現在の状態によって規定されるモデル専用のレジスタのうちの１つであってもよく、したがって、既存のモデル専用読出レジスタ（ＲＤＭＳＲ）およびモデル専用書込レジスタ（ＷＲＭＳＲ）命令を使用してアクセスすることができる。
【００２９】
ＲＸビット６６は、ＲＥＸ３２モードのプロセス専用イネーブルを与える。ＣＰＵ３２によって現在実行されているアプリケーションプログラム（すなわち現在のプロセス）は、ＲＸビット６６を設定することによって、ＲＥＸ３２モードをイネーブルすることができる。ＲＥＸ３２モードがＲＥＸ３２ビット６３によってイネーブルされて初めて、プロセスは、ＲＸビット６６を設定することによって、ＲＥＸ３２モードに入ることができる。ＲＥＸ３２モードがＲＥＸ３２ビット６３によってイネーブルされていると、現在のプロセスは、論理値「１」をＲＸビット６６に記憶することによって、ＲＥＸ３２モードに入ることができる。ＲＥＸ３２ビット６４およびＲＸビット６６の両方が設定されて初めて、デコード制御ユニット５８は、ＲＥＸ３２モードを示す演算モード信号を生成する。現在のプロセスは、論理値「０」をＲＸビット６６に記憶することによって、ＲＥＸ３２モードを終了することができる。
【００３０】
ここで紹介する２つの新たなｘ８６命令をアプリケーションプログラムによって使用して、フラグレジスタ６４の中のＲＸビット６６を設定およびクリアすることができる。新たな「ＳＴＸ」命令は、論理値「１」をＲＥＸ３２ビット６３に記憶し、新たな「ＣＬＸ」命令は、論理値「０」をＲＥＸ３２ビット６３に記憶する。ＳＴＸ命令およびＣＬＸ命令は、命令の実行の直後に効力を持つことが好ましい。ＲＥＸ３２モードがＲＥＸ３２によってイネーブルされていない（すなわちディスエーブルされている）場合にＳＴＸおよびＣＬＸ命令を使用すると、結果として、例外的な「規定されていないオペコード」につながり得る。
【００３１】
上述のように、演算モードは、デフォルトのオペランドサイズを規定する。ある具体的な命令をコード化したものが、デフォルトのオペランドサイズをオーバーライドしない場合、実行コア５２は、デフォルトのオペランドサイズを有するオペランドに関わる演算を行なう。これに対して、命令をコード化したものがデフォルトのオペランドサイズをオーバーライドする場合、実行コア５２は、オーバーライドするオペランドサイズを有するオペランドに関わる演算を行なう。
【００３２】
実行コア５２は、レジスタファイル６０からレジスタオペランドを、データキャッシュ５４からメモリオペランドをフェッチする。メモリオペランドがキャッシュ可能であり、かつデータキャッシュ５４内に存在する場合、データキャッシュ５４は、メモリオペランドを実行コア５２に与える。メモリオペランドがキャッシュ可能でないか、またはデータキャッシュ５４内に存在しない場合、データキャッシュ５４は、インターフェイスユニット５６およびノースブリッジ３４（図４）を介して、メモリ３６からメモリオペランドを獲得し、メモリオペランドを実行コア５２に与える。
【００３３】
図６は、図５のＣＰＵ３２の、７２と示される３２ビット互換性モードと７４と示されるＲＥＸ３２モードとの間の移行を示す。上述のように、３２ビット互換性モード７２およびＲＥＸ３２モード７４のどちらにおいても、デフォルトのオペランドサイズは３２ビットである。しかしながら、ＲＥＸ３２モードでは、命令をコード化したもの従って、命令は、デフォルトの３２ビットのオペランドサイズを６４ビットのオペランドサイズでオーバーライドすることができる。さらに後に詳しく説明するように、ＲＥＸ３２モード７４では、命令をコード化したものにフィールド拡張ビットを含めて、命令の中で参照できるレジスタの数を増やすことができる。
【００３４】
図６に示されるように、ＣＰＵ３２が３２ビット互換性モード７２で演算している場合、ＣＰＵ３２は、大域的イネーブルＲＥＸ３２ビット６３およびプロセス専用イネーブルＲＸビット６６の両方が論理値「１」を有する場合に、ＲＥＸ３２モード７４に移行する。上述のとおり、オペレーティングシステム、基本的入出力システムまたはＢＩＯＳ、もしくはスーパーバイザモードユーティリティなどの特権コードは、論理「１」を大域的イネーブルＲＥＸ３２ビット６３に記憶することができる。ＣＰＵ３２が３２ビット互換性モード７２で演算している場合、ＣＰＵ３２によって現在実行されているアプリケーションプログラム（すなわち現在のプロセス）は、ＲＸビット６６に論理「１」を記憶して、ＲＥＸ３２モード７４に入ることができる。ＣＰＵ３２は、大域的イネーブルＲＥＸ３２ビット６４またはプロセス専用イネーブルＲＸビット６６のどちらかが論理「０」である場合に、ＲＥＸ３２モード７４から３２ビット互換性モード７２に移行する。たとえば、ＣＰＵ３２がＲＥＸ３２モード７４で演算している場合、現在のプロセスは、論理「０」をＲＸビット６６に記憶して、ＲＥＸ３２モード７４を終了し、３２ビット互換性モード７２に戻ることができる。
【００３５】
再び図５を参照すると、ＣＰＵ３２は、ページングハードウェアを有するメモリ管理ユニットを含んでもよいことが注目される。ページングハードウェアは、仮想アドレスから物理的なアドレスへのページングアドレス翻訳を行なうためのものである。「仮想アドレス」は、アドレス翻訳機構（たとえばページング機構）を介して「物理的なアドレス」に翻訳される前の、生成されたアドレスであり、「物理的なアドレス」は、メモリにアクセスするために実際に使用されるアドレスである。ページングハードウェアは、ページ翻訳を記憶するために翻訳索引バッファ（ＴＬＢ）を含んでもよい。
【００３６】
命令キャッシュ５０は、命令を記憶するための高速キャッシュメモリである。実行コア５２は、命令キャッシュ５０から命令をフェッチして実行する。命令キャッシュ５０は、直接マッピング、セットアソシエーティブおよびフルアソシエーティブの構成を含め、好適なキャッシュ構成ならどれでも用いることができる。要求された命令が命令キャッシュ５０に存在しない場合、命令キャッシュ５０は、インターフェイスユニット５６と通信して、要求された命令を獲得することができる。そのように通信することは、結果として、命令キャッシュ５０内のキャッシュラインが充足／置換されることにつながり得る。さらに、命令キャッシュ５０は、メモリ管理ユニットと通信して、命令キャッシュ５０からフェッチされた仮想アドレスに対する物理的アドレス翻訳を受取ることができる。
【００３７】
実行コア５２は、命令キャッシュ５０からフェッチされた命令を実行する。実行コア５２は、レジスタファイル６０からレジスタオペランドを獲得し、レジスタ結果値をレジスタファイル６０内に記憶する。オペランドのサイズは、ＣＰＵ３２の演算モードに依存し、後に説明するように、命令によってオーバーライドすることができる。後に説明するように、実行コア５２は、データキャッシュ５４からメモリオペランドを獲得し、メモリ結果値をデータキャッシュ５４に与える。
【００３８】
実行コア５２は、好適な構成であればどれでも用いることができる。たとえば、実行コア５２は、スーパーパイプラインコア、スーパースカラコア、またはそれらの組合せであってもよい。実行コア５２は、設計上の選択に従って、順序付けのない推論的な実行または順序付けによる実行を用いることができる。
【００３９】
データキャッシュ５４は、データを記憶するように構成された高速キャッシュメモリである。データキャッシュ５４は、直接マッピング、セットアソシエーティブおよびフルアソシエーティブの構成を含め、好適なキャッシュ構成であればどれでも用いることができる。メモリオペランドの値がデータキャッシュ５４に存在しない場合、データキャッシュ５４は、インターフェイスユニット５６と通信して、そのメモリオペランドにアクセスすることができる。そのような通信は、結果として、データキャッシュ５４内のキャッシュラインの充足／置き換えにつながり得る。さらに、データキャッシュ５４がライトバックキャッシング方式を用いている場合、更新されて置き換えられているキャッシュラインをインターフェイスユニット５６に通信して、メモリに書き戻すことができる。データキャッシュ５４は、メモリ管理ユニットと通信して、データキャッシュ５４に提示された仮想アドレスに対する物理的なアドレス翻訳を受取ることができる。
【００４０】
インターフェイスユニット５６は、ノースブリッジ３４（図４）と通信する。命令キャッシュ５０からの要求に応答して、インターフェイスユニット５６は、ノースブリッジ３４を介して、メモリ３６（図４）から命令を獲得し、その命令を命令キャッシュ５０に与える。インターフェイスユニット５６は、上述のように、ノースブリッジ３４とデータキャッシュ５４との間でメモリオペランドの伝達も行なう。
【００４１】
図７は、図５のレジスタファイル６０と実行コア５２の例示的な実施例の図である。図５の実施例では、実行コア５２は、実行ユニット７８とレジスタファイル６０とに結合されたデコードユニット７６を含む。一般的に言って、デコードユニット７６は、命令キャッシュ５０（図５）からフェッチされた命令をデコードする。図７では、デコードユニット７６が代表的な命令８０を受取っているところが示される。命令８０は、ｘ８６命令であることが好ましく、オプションの接頭部８２を有してもよい。後に説明するように、接頭部８２は、少なくとも１つの拡張レジスタにアクセスするために必要な情報を含む。
【００４２】
デコードユニット７６は、命令の中のレジスタソースオペランド参照を検知し、レジスタファイル６０からオペランドの値を要求する。レジスタファイル６０は、要求されたソースオペランド値を実行ユニット７８に伝える。同時に（たとえば同じクロックサイクル内で）、デコードされた命令をデコードユニット７６から実行ユニット７８に伝送することができる。このようにして、典型的には、デコードされた命令およびオペランドは、同時に（たとえば同じクロックサイクル内で）実行ユニット７８に与えられる。
【００４３】
実行ユニット７８は、デコードユニット７６によって与えられた、デコードされた命令を実行する。実行ユニット７８は、メモリオペランドアドレスを形成するために使用することもでき、メモリオペランドアドレスをデータキャッシュ５４（図５）に与えることができる。上述のとおり、データキャッシュ５４は、メモリオペランドを実行ユニット７８に与えることに対して責任を負い得る。データキャッシュ５４は、メモリオペランドのアドレスをメモリ管理ユニット内のページングハードウェアに与えて、仮想アドレスから物理的なアドレスに翻訳させることができる。メモリオペランドの値がデータキャッシュ５４に存在しない場合、データキャッシュ５４は、ノースブリッジ３４（図４）を介して、そのメモリオペランドアドレスをインターフェイスユニット５６に与えて、メモリ３６（図４）から検索することができる。
【００４４】
実行ユニット７８は、命令実行の結果をレジスタファイル６０またはデータキャッシュ５４（図５）のどちらかに与える。結果がレジスタに記憶されるべき値である場合、実行ユニット７８は、その結果をレジスタファイル６０に与える。その結果がメモリの或る場所に記憶されるべき値である場合は、実行ユニット７８は、その結果とメモリの場所の対応するアドレスとをデータキャッシュ５４に与える。メモリの場所の内容がデータキャッシュ５４に存在しない場合、データキャッシュ５４は、結果およびメモリの場所の対応するアドレスをインターフェイスユニット５６に与えることができる。インターフェイスユニット５６は、ノースブリッジ３４（図４）を介して、メモリ３６（図４）の、対応するメモリの場所にその値を記憶させることができる。
【００４５】
図７の実施例では、レジスタファイル６０は、標準レジスタセット８４および拡張レジスタセット８６を含む。標準レジスタセット８４は、８個の３２ビット汎用レジスタ、すなわち、ＥＡＸレジスタ、ＥＢＸレジスタ、ＥＣＸレジスタ、ＥＤＸレジスタ、ＥＳＰレジスタ、ＥＢＰレジスタ、ＥＳＩレジスタおよびＥＤＩレジスタを含み、これらはｘ８６アーキテクチャによって規定される。拡張レジスタセット８６は、たとえば８個の付加的または拡張レジスタを含む。後に説明するように、拡張レジスタセット８６の拡張レジスタは、６４ビットレジスタであってもよい。
【００４６】
命令８０は、ｘ８６命令で参照される８個のｘ８６汎用レジスタの各々を識別するための、３ビットのレジスタオペランド識別情報を含むｘ８６命令であってもよい。しかしながら、拡張レジスタセット８６の拡張レジスタの数は、ｘ８６アーキテクチャによって規定される８個の汎用レジスタを越える。このため、８個のｘ８６汎用レジスタのうちの選択されたレジスタを識別するために命令８０で使用される３ビットのレジスタオペランド識別情報は、拡張レジスタのうちの選択されたレジスタを識別するには不十分である。このため、命令８０の接頭部８２を使用して、拡張レジスタのうちの選択されたレジスタを識別するのに必要な付加的なレジスタ識別情報を与える。接頭部８２を含めて命令８０をコード化したものは、命令８０で参照される各拡張レジスタを識別することができる。
【００４７】
ＣＰＵ３２（図５）がＲＥＸ３２モードで演算しており、かつ命令８０がレジスタソースオペランドを識別しているが、オプションの接頭部８２を含まない場合、デコードユニット７６は、標準レジスタセット８４の対応する標準レジスタの内容をレジスタファイル６０から要求する。命令８０の実行は、レジスタファイル６０の標準レジスタセット８４からの標準レジスタを使用して行なわれる。これに対して、ＣＰＵ３２がＲＥＸ３２モードで演算しており、命令８０がオプションの接頭部８２を含み、かつレジスタソースオペランドを参照する場合、デコードユニット７６は、拡張レジスタセット８６の対応する拡張レジスタの内容をレジスタファイル６０から要求する。命令８０の実行は、レジスタファイル６０の拡張レジスタセット８６からの拡張レジスタを使用して行なわれる。
【００４８】
デコードユニット７６は、オペランドサイズ信号を生成し、オペランドサイズ信号を実行ユニット７８に与えることができる。オペランドサイズ信号は、命令８０のためのオペランドサイズを示す。デコードユニット７６は、デコード制御ユニット５８によって生成され、ＣＰＵ３２の演算モードを示す、演算モード信号を受取ることができる。演算モード信号によって、ＣＰＵ３２がＲＥＸ３２モードで演算していることが示され、かつ命令８０が接頭部８２を含む場合、デコードユニット７６は、たとえば、命令８０のためのオペランドサイズが６４ビットであることを示すオペランドサイズ信号をアサートする。演算モード信号によって、ＣＰＵ３２がＲＥＸ３２モードで演算していることが示され、かつ命令８０が接頭部８２を含まない場合、デコードユニット７６は、たとえば、命令８０のためのオペランドサイズが３２ビットであることを示すオペランドサイズ信号をデアサートする。
【００４９】
オペランドサイズ信号がアサートされている場合、実行ユニット７８は、６４ビットのオペランドに関わる演算を行なうことができる。実行ユニット７８は、レジスタファイル６０から６４ビット拡張レジスタオペランドを受取り、６４ビット拡張レジスタ結果値をレジスタファイル６０内に記憶することができる。これに対して、オペランドサイズ信号がデアサートされている場合、実行ユニット７８は、３２ビットのオペランドに関わる演算を行なうことができる。実行ユニット７４は、レジスタファイル６０から３２ビットのレジスタオペランドを受取り、３２ビットレジスタ結果値をレジスタファイル６０内に記憶することができる。
【００５０】
実行ユニット７８は、データキャッシュ５４から受取った３２ビットのメモリオペランド値に先行ゼロを「埋め込んで」、６４ビットのオペランドを形成することができる。実行ユニット７８は６４ビットのメモリ結果値の下位（すなわち最下位）の３２ビットをデータキャッシュ５４に与えて記憶させることもできる。これに代えて、実行ユニット７８は、オペランドサイズ信号をデータキャッシュ５４に与えることができ、実行コア５２とデータキャッシュ５４との間で伝達されるメモリオペランドのサイズは、オペランドサイズ信号に依存してもよい。たとえば、オペランドサイズ信号がアサートされている場合、実行ユニット７８は、データキャッシュ５４から６４ビットのメモリオペランドを獲得し、６４ビットのメモリ結果値をデータキャッシュ５４に与えることができる。これに対し、オペランドサイズ信号がデアサートされている場合、実行ユニット７８は、データキャッシュ５４から３２ビットのメモリオペランドを獲得し、３２ビットのメモリ結果値をデータキャッシュ５４に与えることができる。
【００５１】
デコードユニット７６は、演算モード信号、および命令８０の接頭部８２の存在の有無に依存して、例外信号を生成することもできる。命令８０が接頭部８２を含み、かつ演算モード信号によって、ＣＰＵ３２がＲＥＸ３２モードで演算していないことが示される場合、デコードユニット７６は、たとえば例外信号をアサートすることができる。アサートされた例外信号は、結果として、例外的な「操作利用不能」になり得る。
【００５２】
図８は、図７の命令８０のオプションの接頭部８２の一実施例の図である。図８の実施例では、接頭部８２は、拡張レジスタ接頭バイト９０であり、拡張レジスタキーフィールド９２、６４ビットオペランドサイズオーバーライドビット９４ならびに３つのフィールド拡張ビット９６、９８および１００を含む。拡張レジスタキーフィールド９２は、拡張レジスタ接頭バイト９０のビット４〜７を占め、図８に示される拡張レジスタキーフィールド９２の二進値の拡張レジスタキー値「０１００」は、拡張レジスタ接頭バイト９０を識別するために使用される。デコードユニット７６は、拡張レジスタキーフィールド９２の拡張レジスタキー値「０１００」を介して、拡張レジスタ接頭バイト９０を認識する。拡張レジスタキーフィールド９２が拡張レジスタキー値「０１００」を含まない場合、デコードユニット７６は、接頭バイトを拡張レジスタ接頭バイトとして認識しない。
【００５３】
６４ビットオペランドサイズオーバーライドビット９４は、拡張レジスタ接頭バイト９０のビット３を占める。６４ビットオペランドサイズオーバーライドビット９４を使用して、たとえば拡張レジスタ接頭バイト９０を含む命令８０（図７）のためのデフォルトの３２ビットのオペランドサイズをオーバーライドして、６４ビットのレジスタオペランドにレジスタファイル６０（図７）内でアクセスできるようにすることができる。フィールド拡張ビット９６、９８および１００を使用して、オペコード内の３ビットのフィールド、Ｍｏｄ　Ｒ／Ｍバイトおよび／またはＳＩＢバイトを４ビットに拡張することができる。このことによって、８個ではなく、１６個のレジスタにアクセスすることが可能になる。したがって、フィールド拡張バイト９６、９８および１００を使用して、ＣＰＵ３２（図４および図５）の中の汎用レジスタの数を増やすことができる。
【００５４】
ＣＰＵ３２がＲＥＸ３２モードであり、命令８０は拡張レジスタ接頭バイト９０を含み、拡張レジスタ接頭バイト９０の拡張レジスタキーフィールド９２が拡張レジスタキー値「０１００」を含み、拡張レジスタ接頭バイト９０の６４ビットオペランドサイズオーバーライドビット９４が論理「０」である場合、命令８０内のレジスタオペランドサイズは、デフォルトの３２ビットを含むと想定され、３２ビットのレジスタオペランドが命令８０のためにレジスタファイル６０からフェッチされる。これに対し、６４ビットオペランドサイズオーバーライドビット９４の値が論理「１」である場合、デフォルトの３２ビットのオペランドサイズは、命令８０のためにオーバーライドされ、６４ビットのオペランドが命令８０のためにレジスタファイル６０からフェッチされる。
【００５５】
フィールド拡張ビット９６、９８および１００は、それぞれ拡張レジスタ接頭バイト９０のビット２、ビット１およびビット０を占める。フィールド拡張ビット９６を使用して、たとえば、Ｍｏｄ　Ｒ／ＭバイトＲＥＧフィールドを３ビットから４ビットに拡張することができ、したがって、拡張ＲＥＧフィールドを形成することができる。フィールド拡張ビット９６は、拡張ＲＥＧフィールドの最上位ビットを形成し得る。３ビットのＲＥＧフィールドは、レジスタファイル６０内の８個の異なるレジスタのうちの１つにアクセスするために使用されるのに対し、４ビットの拡張ＲＥＧフィールドは、レジスタファイル６０内の１６個の異なるレジスタのうちの１つにアクセスするために使用することができる。
【００５６】
フィールド拡張ビット９８を使用して、たとえば、ＳＩＢバイトＩＮＤＥＸフィールドを３ビットから４ビットに拡張することができ、こうして、拡張ＩＮＤＥＸフィールドを形成する。フィールド拡張ビット９８は、拡張ＩＮＤＥＸフィールドの最上位ビットを形成し得る。３ビットのＩＮＤＥＸフィールドは、レジスタファイル６０内の８個の異なるレジスタのうちの１つにアクセスするために使用されるのに対し、４ビットの拡張ＩＮＤＥＸフィールドは、レジスタファイル６０内の１６個の異なるレジスタのうちの１つにアクセスするために使用することができる。
【００５７】
フィールド拡張ビット１００を使用して、たとえば、Ｍｏｄ　Ｒ／ＭバイトＲ／Ｍフィールド、ＳＩＢバイトＢＡＳＥフィールドまたはオペコードレジスタ参照フィールドを３ビットから４ビットに拡張することができ、したがって、拡張フィールドを形成することができる。フィールド拡張ビット１００は、拡張フィールドの最上位ビットを形成し得る。３ビットのフィールドは、レジスタファイル６０内の８個の異なるレジスタのうちの１つにアクセスするために使用されるのに対し、４ビットの拡張フィールドは、レジスタファイル６０内の１６個の異なるレジスタのうちの１つにアクセスするために使用することができる。
【００５８】
図９は、図７のレジスタファイル６０の一実施例の図であり、標準レジスタセット８４は、拡張レジスタセット８６のサブセットである。上述のように、標準レジスタセット８４は、８個の３２ビットｘ８６レジスタ、つまりＥＡＸレジスタ、ＥＣＸレジスタ、ＥＤＸレジスタ、ＥＢＸレジスタ、ＥＳＰレジスタ、ＥＢＰレジスタ、ＥＳＩレジスタおよびＥＤＩレジスタを含み、これらはそれぞれ０〜７の番号を付けられる。拡張レジスタセット８０は、１６個の６４ビットレジスタを含み、これらは０〜１５の番号を付けられる。標準レジスタセット８４の３２ビットレジスタ０〜７は、拡張レジスタセット８６の、６４ビットレジスタ０〜７のそれぞれの下位（すなわち最下位）の３２ビット部分を形成する。図９に示されるように、拡張レジスタセット８６は、標準レジスタセット８４のスーパーセットである。
【００５９】
図９は、図８の拡張レジスタ接頭バイト９０がレジスタファイル６０内のレジスタに与える影響も示す。拡張レジスタ接頭バイト９０のビット０〜２（それぞれフィールド拡張ビット１００、９８および９６）によって、命令８０は、拡張レジスタセット８６のうちの選択されたレジスタを識別することができる。拡張レジスタ接頭バイト９０のビット３（すなわち６４ビットオペランドサイズオーバーライドビット９４）がクリアされる（すなわち論理「０」にされる）と、拡張レジスタセット８６の中の拡張レジスタの下位（すなわち最下位）の３２ビットのみがアクセスされる。これに対して、拡張レジスタ接頭バイト９０のビット３（すなわち６４ビットオペランドサイズオーバーライドビット９４）が設定される（すなわち論理「１」にされる）と、拡張レジスタセット８６の中の拡張レジスタの６４ビット全体がアクセスされる。
【００６０】
レジスタファイル６０（図７）の拡張レジスタセット８６を実現する際、ＣＰＵ３２（図５）の３２ビットオペレーティングシステムが拡張レジスタに気づかない可能性が高く、このため、コンテクスト切替中に拡張レジスタを保存しようとしないことがあり得るという点で、問題が起こり得る。ここからは、図１０および１１を使用して、ＣＰＵ３２（図５）が３２ビットオペレーティングシステムを含む場合に、コンテクスト切替中に拡張レジスタセット８６の拡張レジスタの内容を保存するためのシステムおよび方法を説明する。この例では、標準ＭＭＸレジスタセット１１０および標準ＳＳＥレジスタセット１１４は、上で説明した、標準レジスタセット８４を拡張する方法と同様のやり方で拡張できることが注目される（拡張レジスタセット１１２および１１６、またはどちらかが設けられる場合）。コンテクスト切替中、オペレーティングシステムは、ＣＰＵ３２に第１のプログラムまたはタスクの命令の実行を停止させ、第２のプログラムまたはタスクの命令の実行を開始する。オペレーティングシステムは、コンテクスト切替中、ＣＰＵ３２の状態をセーブし、後に第１のプログラムまたはタスクの命令実行を再開できるようにする。しかしながら、上述のように、３２ビットオペレーティングシステムは、拡張レジスタセット８６の拡張レジスタに気づかないことがあり得るため、コンテクストの切替中、拡張レジスタをセーブしようとしないことがあり得る。
【００６１】
図１０は、図７のレジスタファイル６０の別の実施例の図であり、上述のように、レジスタファイル６０は、標準レジスタセット８４および拡張レジスタセット８６を含む。図１０の実施例では、レジスタファイル６０は、標準マルチメディア拡張（ＭＭＸ）レジスタセット１１０および拡張ＭＭＸレジスタセット１１２、標準ストリーミング単一命令複数データ（ＳＩＭＤ）拡張またはＳＳＥレジスタセット１１４および拡張ＳＳＥレジスタセット１１６も含む。
【００６２】
コンテクスト切替中、典型的な３２ビットオペレーティングシステムは、中断されたプログラムまたはタスクを復元するために必要なＣＰＵ３２の状態の情報を、タスク状態セグメント（ＴＳＳ）またはメモリ３６（図４）に（明示的に）形成されたプログラムスタック上にセーブする。ＴＳＳは、コンテクスト切替前の汎用レジスタＥＡＸレジスタ、ＥＢＸレジスタ、ＥＣＸレジスタ、ＥＤＸレジスタ、ＥＳＰレジスタ、ＥＢＰレジスタ、ＥＳＩレジスタおよびＥＤＩレジスタの内容を含み、したがって標準レジスタセット８４の標準レジスタの内容を含む。上述のように、３２ビットオペレーティングシステムは、拡張レジスタセット８６の拡張レジスタ（および拡張レジスタセット１１２および１１６）に気づかない可能性が高いため、コンテクスト切替中に拡張レジスタセット８６の拡張レジスタの内容をセーブしようとしないことがあり得る。
【００６３】
３２ビッのオペレーティングシステムは、利用可能なｘ８６「ＦＸＳＡＶＥ」命令を使用して、コンテクスト切替中、標準ＭＭＸレジスタセット１１０の標準ＭＭＸレジスタの内容および標準ＳＳＥレジスタセット１１４の標準ＳＳＥレジスタの内容を、メモリ３６に形成された特別な５１２バイトのデータ構造に記憶しようとする可能性が高い。３２ビットオペレーティングシステムは、利用可能なｘ８６「ＦＸＲＳＴＯＲ」命令を使用し、ＦＸＳＡＶＥ命令を介して５１２バイトのデータ構造に記憶されたデータを使用して、標準ＭＭＸレジスタセット１１０の標準ＭＭＸレジスタの内容および標準ＳＳＥレジスタセット１１４の標準ＳＳＥレジスタの内容を復元しようとする可能性が高い。典型的であるが、ＦＸＳＡＶＥ命令およびＦＸＲＳＴＯＲ命令は、マイクロコードを介して、ＣＰＵ３２で実現することができる。一実施例では、このマイクロコードを拡張して、拡張レジスタセット８６、１１２、および／または１１４の内容をセーブ（および復元）する。このため、３２ビットオペレーティングシステムは、ｘ８６ＦＸＳＡＥＶ命令およびＦＸＲＳＴＯＲ命令を実行して、コンテクストの切替中、標準ＭＭＸレジスタセット１１０の標準ＭＭＸレジスタの内容、および標準ＳＳＥレジスタセット１１４の標準ＳＳＥレジスタの内容をセーブおよび復元するが、拡張レジスタセット８６のレジスタの内容、拡張ＭＭＸレジスタセット１１２のレジスタの内容、および拡張ＳＳＥレジスタセット１１６のレジスタの内容がセーブおよび復元されるようにすることもできる。
【００６４】
図１１は、特別な５１２バイトのデータ構造の一実施例の図である。データ構造は、１２０と示され、メモリ内に形成され、レジスタの内容（従来はｘ８６アーキテクチャの標準ＭＭＸレジスタおよび標準ＳＳＥレジスタの内容）を記憶するために使用される。データ構造１２０は、使用済み部分１２２と未使用部分１２４とを含む。標準ＭＭＸレジスタセットデータ部分１２６および標準ＳＳＥレジスタセットデータ部分１３０は、標準ＭＭＸレジスタセット１１０および標準ＳＳＥレジスタセット１１４（図１０）のレジスタの内容を記憶するための使用済み部分１２２に存在する。図１１に示されるように、データ構造１２０の未使用部分１２４を使用して、コンテクスト切替の際、拡張レジスタセット８６、１１２および１１６の内容を記憶領域１３４、１３５および１３６にそれぞれ記憶することができる。このようにして、３２ビットオペレーティングシステムは、ｘ８６ＦＸＳＡＶＥ命令およびＦＸＲＳＴＯＲ命令を実行して、コンテクスト切替中、標準ＭＭＸおよび標準ＳＳＥレジスタの内容をセーブおよび復元するが、拡張レジスタセットの内容もセーブおよび復元する。
【００６５】
【産業的利用可能性】
この発明は、一般に、集積回路、および集積回路の電力セーブモードに利用可能である。
【図面の簡単な説明】
【図１】ｘ８６命令の一般的なフォーマットの図であり、ｘ８６命令は、オプションのアドレス指定モード（Ｍｏｄ　Ｒ／Ｍ）バイトおよびオプションのスケールインデックスベース（ＳＩＢ）バイトを含む。
【図２】図１のｘ８６命令のＭｏｄ　Ｒ／Ｍバイトのフィールドの図である。
【図３】図１のｘ８６命令のＳＩＢバイトのフィールドの図である。
【図４】中央処理装置（ＣＰＵ）を含むコンピュータシステムの一実施例の図である。
【図５】図４のＣＰＵの一実施例の図であり、ＣＰＵは、レジスタファイルに結合された実行コアを含む。
【図６】図５のＣＰＵの、「３２ビット互換性」モードとＣＰＵの「３２ビットレジスタ拡張」（ＲＥＸ３２）モードとの間の移行を示す図である。
【図７】図５の実行コアおよびレジスタファイルの例示的な実施例の図であり、実行コアは、実行ユニットとレジスタファイルとに結合されたデコードユニットを含み、レジスタファイルは、標準レジスタセットおよび拡張レジスタセットを含み、デコードユニットは、代表的な命令を受取っている状態で示され、命令は、オプションの接頭部を含んでもよい。
【図８】図７の命令のオプションの接頭部の一実施例の図であり、接頭部は、拡張レジスタ接頭バイトであり、拡張レジスタキーフィールド、６４ビットオペランドサイズオーバーライドビットおよび３つのフィールド拡張ビットを含む。
【図９】図７のレジスタファイルの一実施例の図であり、標準レジスタセットは、拡張レジスタセットのサブセットである。
【図１０】図７のレジスタファイルの別の実施例の図であり、レジスタファイルは、標準レジスタセットおよび拡張レジスタセットを含み、標準マルチメディア拡張（ＭＭＸ）レジスタセット、拡張ＭＭＸレジスタセット、標準ストリーミング単一命令複数データ（ＳＩＭＤ）拡張またはＳＳＥレジスタセットおよび拡張ＳＳＥレジスタセットも含む。
【図１１】メモリに形成され、コンテクスト切替中にレジスタの内容を記憶するための使用される、データ構造の一実施例の図であり、データ構造は、標準ＭＭＸレジスタセット、拡張ＭＭＸレジスタセット、標準ＳＳＥレジスタセット、拡張ＳＳＥレジスタセットの内容を記憶するために使用され、データ構造の未使用部分は、拡張レジスタセットの内容を記憶するために使用される。
【図１】
2004506263.tif 000003
【図２】
2004506263.tif 000004
【図３】
2004506263.tif 000005
【図４】
2004506263.tif 000006
【図５】
2004506263.tif 000007
【図６】
2004506263.tif 000008
【図７】
2004506263.tif 000009
【図８】
2004506263.tif 000010
【図９】
2004506263.tif 000011
【図１０】
2004506263.tif 000012
【図１１】
2004506263.tif 000013
【国際公開パンフレット】
2004506263.tif 000014
2004506263.tif 000015
2004506263.tif 000016
2004506263.tif 000017
2004506263.tif 000018
2004506263.tif 000019
2004506263.tif 000020
2004506263.tif 000021
2004506263.tif 000022
2004506263.tif 000023
2004506263.tif 000024
2004506263.tif 000025
2004506263.tif 000026
2004506263.tif 000027
2004506263.tif 000028
2004506263.tif 000029
2004506263.tif 000030
2004506263.tif 000031
2004506263.tif 000032
2004506263.tif 000033
2004506263.tif 000034
2004506263.tif 000035
2004506263.tif 000036
2004506263.tif 000037
【手続補正書】
【提出日】平成14年8月30日(2002.8.30)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
中央処理装置（ＣＰＵ）（３２）であって、
標準レジスタセット（８４）と拡張レジスタセット（８６）とを含むレジスタファイル（６０）を含み、前記標準レジスタセット（８４）は、複数の標準レジスタを含み、前記拡張レジスタセット（８６）は、ＣＰＵアーキテクチャによって規定される汎用レジスタの幅よりも大きい幅を有する複数の拡張レジスタを含み、前記中央処理装置（ＣＰＵ）はさらに、
前記レジスタファイル（６０）に結合された実行コア（５２）を含み、前記実行コア（５２）は、命令（８０）が、少なくとも１つの拡張レジスタにアクセスするために使用する情報を含む接頭部（８２）を含む場合、前記少なくとも１つの拡張レジスタにアクセスすることによって、前記命令（８０）に応答するように構成され、前記実行コア（５２）は、前記接頭部（８２）に含まれる幅情報に依存して、前記より大きい幅に選択的にアクセスするようにさらに構成される、ＣＰＵ（３２）。
【請求項２】
標準レジスタの数は、前記ＣＰＵアーキテクチャによって規定される汎用レジスタの数より少ないか、または等しく、拡張レジスタの数は、前記ＣＰＵアーキテクチャによって規定される汎用レジスタの前記数よりも多い、請求項１に記載のＣＰＵ（３２）。
【請求項３】
前記接頭部（８２）のない前記命令（８０）は、前記標準レジスタのうちの選択されたレジスタを識別するのに十分なレジスタ識別情報を含み、前記命令（８０）の前記接頭部（８２）は、前記拡張レジスタのうちの選択されたレジスタを識別するために使用する付加的なレジスタ識別情報を含む、請求項１または２に記載のＣＰＵ（３２）。
【請求項４】
前記接頭部（８２）を含めて前記命令（８０）をコード化したものは、前記実行コア（５２）によってアクセスされる前記少なくとも１つの拡張レジスタを識別する、請求項１から３のいずれかに記載のＣＰＵ（３２）。
【請求項５】
前記実行コア（５２）は、可変長命令をフェッチおよび実行するように構成される、請求項１から４のいずれかに記載のＣＰＵ（３２）。
【請求項６】
前記接頭部（８２）は、拡張レジスタ接頭バイト（９０）を含み、前記拡張レジスタ接頭バイト（９０）は、拡張レジスタキーフィールド（９２）を含み、前記拡張レジスタキーフィールド（９２）の内容は、前記拡張レジスタ接頭バイト（９０）を識別する、請求項１から５のいずれかに記載のＣＰＵ（３２）。
【請求項７】
拡張レジスタモードが大域的にイネーブルされているかどうかを示す情報を記憶するための制御レジスタ（６２）と、
前記拡張レジスタモードが現在のプロセスによってイネーブルされているかどうかを示す情報を記憶するためのフラグレジスタ（６４）と、
前記ＣＰＵ（３２）の演算モードを示す信号を生成するための生成手段（５８）とをさらに含み、前記拡張レジスタモードが大域的にイネーブルされ、かつ現在のプロセスによってイネーブルされている場合、前記信号は、前記ＣＰＵ（３２）が前記拡張レジスタモードで演算していることを示す、請求項１から６のいずれかに記載のＣＰＵ（３２）。
【請求項８】
前記実行コア（５２）は、前記ＣＰＵ（３２）の演算モードを示す信号を受取るように結合され、前記実行コア（５２）は、前記ＣＰＵ（３２）が拡張レジスタモードで演算していることを示す信号に応答して、前記少なくとも１つの拡張レジスタにアクセスするようにさらに構成される、請求項１から７のいずれかに記載のＣＰＵ（３２）。
【請求項９】
前記接頭部（８２）は、各レジスタにアクセスするための情報を含み、前記命令（８０）の演算である、請求項１から８のいずれかに記載のＣＰＵ（３２）。
【請求項１０】
前記標準レジスタセットは、前記接頭部（８２）が、前記少なくとも１つの拡張レジスタにアクセスするために使用する情報を含む場合、前記拡張レジスタセットのセブセットである、請求項１から９のいずれかに記載のＣＰＵ。
【請求項１１】
前記接頭部（８２）に含まれる前記幅情報は、オペランドサイズオーバーライドビットである、請求項１から１０のいずれかに記載のＣＰＵ。
【請求項１２】
命令（８０）をデコードするステップと、
前記命令（８０）が、拡張レジスタにアクセスするために使用する情報を含む接頭部（８２）を含む場合に、標準レジスタセット（８４）と拡張レジスタセット（８６）とを含むレジスタファイル（６０）の或る拡張レジスタに選択的にアクセスするステップとを含み、前記拡張レジスタの各々は、ＣＰＵアーキテクチャによって規定される汎用レジスタの幅よりも大きい幅を有し、
前記接頭部（８２）に含まれる幅情報に依存して、前記より大きい幅に選択的にアクセスするステップとを含む、方法。
【請求項１３】
前記アクセスは、拡張レジスタモードを示す演算モードにさらに応答する、請求項１２に記載の方法。
【請求項１４】
前記接頭部（８２）に含まれる前記幅情報は、オペランドサイズオーバーライドビットである、請求項１２または１３に記載の方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
ＥＰ−Ａ−０，９４２，３５７は、複数の命令フォーマットと互換性のあるデータプロセッサを開示する。具体的には、第１の命令フォーマットは、予め定められたサイズのレジスタアドレス指定フィールドを規定し、第２の命令フォーマットは、より大きなレジスタアドレス指定フィールドを規定する。受け取った命令が第１の命令フォーマットであると識別されると、プロセッサは、第１のレジスタファイルに保持されるデータを使用して、その命令を実行する。これに対し、命令が第２の命令フォーマットであると識別されると、プロセッサは、第２のレジスタファイルに保持されるデータを使用して、その命令を実行し、第２のレジスタファイルは、第１のレジスタファイルよりも多くのレジスタを有する。
当社のＵＳ−Ａ−６，０１３，７３９は、マイクロプロセッサを開示し、このマイクロプロセッサは、標準レジスタセットと拡張レジスタセットとを含むレジスタファイルを有する。命令デコード回路は、拡張レジスタキーフィールドを含む命令を受け取るように適合され、命令の拡張レジスタキーフィールドは、拡張レジスタキーフィールドが拡張レジスタキー値でない値を含む場合、標準レジスタフィールドとして機能する。
レジスタファイル、およびレジスタファイルに結合された実行コアを含む、中央処理装置（ＣＰＵ）を記載する。レジスタファイルは、標準レジスタセットと拡張レジスタセットとを含む。標準レジスタセットは、複数の標準レジスタを含み、拡張レジスタセットは、複数の拡張レジスタを含む。実行コアは、命令をフェッチおよび命令を実行し、ＣＰＵの演算モードを示す信号を受取る。信号によってＣＰＵが拡張レジスタモードで演算していることが示され、命令が接頭部を含み、その接頭部に少なくとも１つの拡張レジスタにアクセスするのに必要な命令が含まれる場合、実行コアは、その少なくとも１つの拡張レジスタにアクセスすることによって命令に応答する。ＣＰＵを含むコンピュータシステムも説明する。




【国際調査報告】
2004506263.tif 000038
2004506263.tif 000039
2004506263.tif 000040