(57)【要約】      （修正有）【課題】より広いパックドデータオペランドを利用する命令が存在する場合に、それより狭いパックドデータオペランドを利用する旧式の命令をサポートする後方互換性を提供する。【解決手段】デコーダユニットは第１の狭いソースパックドデータオペランド及びデスティネーションオペランドを示すパックドデータ命令を、第１の狭いソースオペランドよりも広く当該第１の狭いソースオペランドを含む広いソースパックドデータオペランド及びデスティネーションオペランドを示すマスクされたパックドデータ演算にマッピングする。このマスクされたパックドデータ演算に対応するパックドデータ演算マスクが生成される。マスクされた演算は、パックドデータ演算マスクを用いて実行される。パックドデータ命令の演算結果は、広いデスティネーションオペランドにストアされる。【選択図】図１
2014199663.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサであって、
少なくとも第１の狭いソースパックドデータオペランド及び狭いデスティネーションオペランドを示すパックドデータ命令を、前記第１の狭いソースパックドデータオペランドよりも広く該第１の狭いソースパックドデータオペランドを含む少なくとも第１の広いソースパックドデータオペランドを示すとともに、前記狭いデスティネーションオペランドよりも広く該狭いデスティネーションオペランドを含む広いデスティネーションオペランドを示すマスクされたパックドデータ演算にマッピングするデコードユニットと、
前記デコードユニットと結合された実行ユニットであって、該実行ユニットは、パックドデータ演算マスクを用いて、前記マスクされたパックドデータ演算を実行し、前記パックドデータ演算マスクは、前記マスクされたパックドデータ演算によってストアされるパックドデータ結果の対応する結果データ要素ごとのマスク要素を含み、前記パックドデータ命令によってストアされない前記マスクされたパックドデータ演算によってストアされる複数の結果データ要素に対応する全てのマスク要素は、マスクアウトするものであり、前記実行ユニットは、前記パックドデータ結果を前記広いデスティネーションオペランドにストアする、実行ユニットと、
を備える、プロセッサ。
【請求項２】
前記実行ユニットは、前記広いデスティネーションオペランドに対応するレジスタの幅全体を書き込み、前記狭いデスティネーションオペランドは、前記レジスタの前記幅の一部分のみに対応する、請求項１に記載のプロセッサ。
【請求項３】
前記実行ユニットは、前記パックドデータ命令に関連付けられた演算によって更新される複数の結果データ要素がレジスタの最下位部分と該レジスタの最上位部分との間の該レジスタの中間部分のみを占有する前記パックドデータ結果をストアする、請求項１又は２に記載のプロセッサ。
【請求項４】
前記デコードユニットは、第２の狭いソースパックドデータオペランドも示す前記パックドデータ命令を受信し、前記デコードユニットは、前記パックドデータ命令を、前記第２の狭いソースパックドデータオペランドよりも広く該第２の狭いソースパックドデータオペランドを含む第２の広いソースパックドデータオペランドも示す前記マスクされたパックドデータ演算にマッピングする、請求項１から３のいずれか１項に記載のプロセッサ。
【請求項５】
前記デコードユニットは、前記第１の狭いソースパックドデータオペランド及び前記第２の狭いソースパックドデータオペランドにおける対応するビット位置にない対応しないデータ要素の少なくとも１つの対に対する演算を示す前記パックドデータ命令を受信し、前記プロセッサは、前記マスクされたパックドデータ演算を実行するときに、前記対応しないデータ要素の対を、前記実行ユニットによって演算される対応するビット位置に配置する演算を更に実行する、請求項４に記載のプロセッサ。
【請求項６】
前記プロセッサは、シフト演算、シャッフル演算、及び置換演算のうちの１つを実行することによって、前記対応しないデータ要素の対を前記対応するビット位置に配置する前記演算を実行する、請求項５に記載のプロセッサ。
【請求項７】
前記パックドデータ命令は、パックドデータ演算マスクを示さない、請求項１から６のいずれか１項に記載のプロセッサ。
【請求項８】
前記パックドデータ命令は、前記マスクされたパックドデータ演算を実行するために前記実行ユニットによって用いられる前記パックドデータ演算マスクよりも少ないマスク要素を有するパックドデータ演算マスクを示す、請求項１から６のいずれか１項に記載のプロセッサ。
【請求項９】
前記実行ユニットは、マスクアウトされたマスク要素に対応する前記複数の結果データ要素の各々の値が変更されないとともに、マスクされていないマスク要素に対応する前記複数の結果データ要素の各々の値が前記パックドデータ命令に関連付けられた演算によって更新される、前記パックドデータ結果をストアする、請求項１から８のいずれか１項に記載のプロセッサ。
【請求項１０】
プロセッサにおける方法であって、
少なくとも第１の狭いソースパックドデータオペランド及び狭いデスティネーションオペランドを示すパックドデータ命令を受信することと、
前記パックドデータ命令を、前記第１の狭いソースパックドデータオペランドよりも広く該第１の狭いソースパックドデータオペランドを含む少なくとも第１の広いソースパックドデータオペランドを示すとともに、前記狭いデスティネーションオペランドよりも広く該狭いデスティネーションオペランドを含む広いデスティネーションオペランドを示すマスクされたパックドデータ演算にマッピングすることと、
前記マスクされたパックドデータ演算によってストアされるパックドデータ結果の対応する結果データ要素ごとのマスク要素を含むパックドデータ演算マスクを生成することであって、前記パックドデータ命令によってストアされない前記マスクされたパックドデータ演算によってストアされる複数の結果データ要素に対応する全てのマスク要素は、マスクアウトするものであることと、
前記パックドデータ演算マスクを用いて前記マスクされたパックドデータ演算を実行することと、
前記パックドデータ結果を前記広いデスティネーションオペランドにストアすることと、
を含む、プロセッサにおける方法。
【請求項１１】
前記パックドデータ結果をストアすることは、前記広いデスティネーションオペランドに対応するレジスタの幅全体を書き込むことを含み、前記狭いデスティネーションオペランドは、前記レジスタの前記幅の一部分のみに対応する、請求項１０に記載の方法。
【請求項１２】
前記ストアすることは、前記パックドデータ命令に関連付けられた演算によって更新される複数の結果データ要素がレジスタの最下位部分と該レジスタの最上位部分との間の該レジスタの中間部分のみを占有する前記パックドデータ結果をストアすることを含む、請求項１０又は１１に記載の方法。
【請求項１３】
前記受信することは、第２の狭いソースパックドデータオペランドも示す前記パックドデータ命令を受信することを含み、前記マッピングすることは、前記パックドデータ命令を、前記第２の狭いソースパックドデータオペランドよりも広く該第２の狭いソースパックドデータオペランドを含む第２の広いソースパックドデータオペランドも示す前記マスクされたパックドデータ演算にマッピングすることを含む、請求項１０から１２のいずれか１項に記載の方法。
【請求項１４】
請求項１３に記載の方法であって、前記受信することは、前記第１の狭いソースパックドデータオペランド及び前記第２の狭いソースパックドデータオペランドにおける対応するビット位置にない対応しないデータ要素の少なくとも１つの対に対する演算を示す前記パックドデータ命令を受信することを含み、該方法は、前記対応しないデータ要素の対を、前記マスクされたパックドデータ演算によって演算される対応するビット位置に配置する演算を実行することを更に含む、請求項１３に記載の方法。
【請求項１５】
前記対応しないデータ要素の対を対応するビット位置に配置する前記演算を実行することは、シフト演算、シャッフル演算、及び置換演算のうちの１つを実行することを含む、請求項１４に記載の方法。
【請求項１６】
前記受信することは、パックドデータ演算マスクを示さない前記パックドデータ命令を受信することを含む、請求項１０から１５のいずれか１項に記載の方法。
【請求項１７】
前記受信することは、前記生成されるパックドデータ演算マスクよりも少ない数のマスク要素を有する第２のパックドデータ演算マスクを示す前記パックドデータ命令を受信することを含む、請求項１０から１５のいずれか１項に記載の方法。
【請求項１８】
前記第１の狭いソースパックドデータオペランドは、レジスタにおいて前記第１の広いソースパックドデータオペランド上にエイリアスされる、請求項１０から１７のいずれか１項に記載の方法。
【請求項１９】
前記ストアすることは、マスクアウトされたマスク要素に対応する前記複数の結果データ要素の各々の値が変更されないとともに、マスクされていないマスク要素に対応する前記複数の結果データ要素の各々の値が前記パックドデータ命令に関連付けられた演算によって更新される、前記パックドデータ結果をストアすることを含む、請求項１０から１８のいずれか１項に記載の方法。
【請求項２０】
命令を処理するシステムであって、
相互接続部と、
前記相互接続部と結合されたプロセッサであって、
少なくとも第１の狭いソースパックドデータオペランド及び狭いデスティネーションオペランドを示すパックドデータ命令を、前記第１の狭いソースパックドデータオペランドを含む少なくとも第１の広いソースパックドデータオペランドを示すとともに、前記狭いデスティネーションオペランドを含む広いデスティネーションオペランドを示すマスクされたパックドデータ演算にマッピングする第１のユニットと、
前記第１のユニットと結合された集積回路部であって、該集積回路部は、前記マスクされたパックドデータ演算によってストアされるパックドデータ結果の対応するデータ要素ごとのマスクビットを含むマスクを用いて、前記マスクされたパックドデータ演算を実行し、前記パックドデータ命令によってストアされるデータ要素に対応するマスクビットのみをマスクアウトしないことが許可される、集積回路部と、
を備える、プロセッサと、
前記相互接続部と結合されて前記パックドデータ命令をストアするダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、
を備える、命令を処理するシステム。
【請求項２１】
前記集積回路部は、前記第１の狭いソースパックドデータオペランドのデータ要素を前記パックドデータ結果のデータ要素と整列させるデータ再配置演算を更に実行する、請求項２０に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に説明される実施形態は、包括的には、プロセッサに関する。特に、本明細書に説明される実施形態は、包括的には、プロセッサ内のレジスタにアクセスすることに関する。
【背景技術】
【０００２】
多くのプロセッサは、単一命令複数データ（ＳＩＭＤ）アーキテクチャを有する。ＳＩＭＤアーキテクチャでは、パックドデータ命令、ベクトル命令、又はＳＩＭＤ命令が、複数のデータ要素又は複数対のデータ要素に同時又は並列に動作することができる。プロセッサは、バックドデータ命令に応答する並列実行ハードウェアを有し、複数の演算を同時又はパラレルに実行することができる。
【０００３】
複数のデータ要素を１つのレジスタ又はメモリロケーション内にパックドデータとしてパックすることができる。パックドデータでは、レジスタ又は他の記憶ロケーションのビットをデータ要素のシーケンスに論理的に分割することができる。例えば、１２８ビット幅のパックドデータレジスタは、２つの６４ビット幅のデータ要素、４つの３２ビットデータ要素、８つの１６ビットデータ要素等を有することができる。
【０００４】
幾つかのプロセッサアーキテクチャでは、命令によって用いられるパックドデータオペランドの幅が何年もかけて増加されてきた。そのような増加したパックドデータ幅は、一般に、より多くのデータ要素を同時に又は並列に処理することを可能にし、これによって、性能が改善される傾向がある。より広いパックドデータオペランドを利用する命令が存在する場合であっても、一般的には、依然として、それより狭いパックドデータオペランドを利用する旧式の命令をサポートすること、例えば、後方互換性を提供することが望ましい。その上、多くの場合、狭いパックドデータオペランドをストアするのに用いられる狭いレジスタは、広い又は拡張されたパックドデータオペランドをストアするのに用いられる広いレジスタ上にエイリアスされる場合がある。
【０００５】
本発明は、本発明の実施形態を例示するのに用いられる以下の説明及び添付図面を参照することによって最もよく理解することができる。
【図面の簡単な説明】
【０００６】
【図１】プロセッサの一実施形態のブロック図である。
【０００７】
【図２】一組の好適なパックドデータレジスタの第１の実施形態のブロック図である。
【０００８】
【図３Ａ】幾つかのプロセッサにおける既存の一組のレジスタのブロック図である。
【０００９】
【図３Ｂ】一組の好適なパックドデータレジスタの第２の実施形態のブロック図である。
【００１０】
【図４】命令処理装置の一実施形態のブロック図である。
【００１１】
【図５】プロセッサにおける方法の一実施形態のブロック流れ図である。
【００１２】
【図６】部分レジスタアクセス命令に応答して、広いオペランド上にオーバーレイされた狭いオペランドに対して実行することができる部分レジスタアクセス演算を示すブロック図である。
【００１３】
【図７】狭いオペランドを示す部分レジスタアクセスパックドデータ命令に応答して実行することができる広いオペランドに対するマスクされたフルレジスタアクセスパックドデータ演算の一例示の実施形態のブロック図である。
【００１４】
【図８】部分レジスタアクセス命令に応答して、広いオペランド上にオーバーレイされた狭いオペランドに対して実行することができる部分レジスタアクセス演算を示すブロック図である。
【００１５】
【図９】狭いオペランドを示す部分レジスタアクセスパックドデータ命令に応答して実行することができる広いオペランドに対するマスクされたフルレジスタアクセスパックドデータ演算の一例示の実施形態のブロック図である。
【００１６】
【図１０】部分レジスタアクセス命令に応答して、広いオペランド上にオーバーレイされた狭いオペランドの対応しないデータ要素に対して実行することができる部分レジスタアクセス演算を示すブロック図である。
【００１７】
【図１１】広いオペランドの対応するデータ要素に対して実行することができ、狭いオペランドの対応しないデータ要素に対する演算を示す部分レジスタアクセスパックドデータ命令に応答して実行することができる、マスクされたフルレジスタアクセスパックドデータ演算の一例示の実施形態のブロック図である。
【００１８】
【図１２】パックドデータ演算マスクビットの数がパックドデータ幅及びパックドデータ要素幅に依存することを示すテーブルである。
【００１９】
【図１３】好適な一組のパックドデータ演算マスクレジスタの一例示の実施形態のブロック図である。
【００２０】
【図１４】パックドデータ演算マスクとして用いられ及び／又はマスキングに用いられるビット数がパックドデータ幅及びデータ要素幅に依存し得ることを示す図である。
【００２１】
【図１５Ａ】本発明の実施形態による例示的なインオーダーパイプライン及び例示的なレジスタリネームアウトオブオーダー発行／実行パイプラインの双方を示すブロック図である。
【００２２】
【図１５Ｂ】本発明の実施形態によるプロセッサに備えられるインオーダーアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネームアウトオブオーダー発行／実行アーキテクチャコアの双方を示すブロック図である。
【００２３】
【図１６Ａ】本発明の実施形態による単一のプロセッサコアを、オンダイ相互接続ネットワークへのその接続及びレベル２（Ｌ２）キャッシュのそのローカルサブセットとともに示すブロック図である。
【００２４】
【図１６Ｂ】本発明の実施形態による図１６Ａにおけるプロセッサコアの一部の拡大図である。
【００２５】
【図１７】本発明の実施形態による、２つ以上のコアを有することができ、統合メモリコントローラーを有することができ、統合グラフィックスを有することができるプロセッサのブロック図である。
【００２６】
【図１８】本発明の１つの実施形態によるシステムのブロック図である。
【００２７】
【図１９】本発明の一実施形態による第１のより具体的な例示的システムのブロック図である。
【００２８】
【図２０】本発明の一実施形態による第２のより具体的な例示的システムのブロック図である。
【００２９】
【図２１】本発明の一実施形態によるＳｏＣのブロック図である。
【００３０】
【図２２】本発明の実施形態による、ソース命令セット内のバイナリー命令をターゲット命令セット内のバイナリー命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。
【発明を実施するための形態】
【００３１】
本明細書では、部分レジスタアクセス方法、プロセッサ、及びシステムが開示される。以下の説明では、多数の具体的な詳細（例えば、具体的なレジスタ、命令、マスク、部分レジスタアクセスを実行する方法、ロジック実施態様、プロセッサ構成、マイクロアーキテクチャの詳細、演算のシーケンス、ロジック分割／統合の詳細、システム構成要素のタイプ及び相互関係等）が述べられる。しかしながら、本発明の実施形態は、これらの具体的な詳細がなくても実施することができることが理解される。それ以外の場合には、この説明の理解を妨げないように、よく知られた回路、構造、及び技法は詳細に示されていない。
【００３２】
図１は、プロセッサ１００の一実施形態のブロック図である。幾つかの実施形態では、このプロセッサは、汎用プロセッサ（例えば、様々なタイプのコンピューターシステムにおいて中央処理ユニットとして用いられるタイプの汎用マイクロプロセッサ）とすることができる。代替的に、プロセッサは、専用プロセッサとすることができる。好適な専用プロセッサの例には、ほんの数例を挙げると、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックスプロセッサ、コプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、及びコントローラー（例えばマイクロコントローラー）が含まれるが、これらに限定されるものではない。プロセッサは、様々な複合命令セットコンピューティング（ＣＩＳＣ）プロセッサ、様々な縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、様々な超長命令語（ＶＬＩＷ）プロセッサ、それらの様々なハイブリッド、又は完全に他のタイプのプロセッサのうちの任意のものとすることができる。
【００３３】
このプロセッサは命令セット１０２を有する。この命令セットの命令は、実行のためにプロセッサに提供されるマクロ命令、アセンブリ言語命令、又は機械レベル命令を表す。この命令セットは、１つ又は複数の部分レジスタアクセスパックドデータ命令１０３を含む。幾つかの実施形態では、部分レジスタアクセスパックドデータ命令は、レジスタの全幅ではないレジスタの一部のみを表す１つ又は複数のソースオペランド及び／又はデスティネーションオペランドにアクセスする命令を表すことができる。一例として、部分レジスタアクセスパックドデータ命令は、５１２ビットレジスタにストアされた１２８ビットのソースオペランド及びデスティネーションオペランドにアクセスする命令を表すことができる。命令セットは、オプションとして、１つ又は複数のマスクされたパックドデータ命令１０４も含む。オプションとして、このマスクされたパックドデータ命令（複数の場合もある）は、１つ又は複数のマスクされたフルレジスタアクセス命令１０４Ｂを含む。幾つかの実施形態では、マスクされたフルレジスタアクセス命令は、レジスタの全幅を表すか又は占有する１つ又は複数のソースオペランド及び／又はデスティネーションオペランドにアクセスする命令を表すことができる。一例として、マスクされたフルレジスタアクセス命令は、５１２ビットレジスタにストアされた５１２ビットのソースオペランド及びデスティネーションオペランドにアクセスする命令を表すことができる。
【００３４】
プロセッサは、アーキテクチャ的に可視のレジスタ（例えば、アーキテクチャレジスタファイル）１０５を含む。アーキテクチャレジスタは、本明細書においては、単にレジスタと呼ばれる場合もある。特に別段の指定がないか又は明らかでない限り、アーキテクチャレジスタ、レジスタファイル、及びレジスタという語句は、本明細書においては、ソフトウェア及び／又はプログラマーに可視のレジスタ、及び／又はオペランドを識別するためにマクロ命令によって指定されるレジスタを指すのに用いられる。これらのレジスタは、所与のマイクロアーキテクチャにおける他の非アーキテクチャレジスタ又はアーキテクチャ的に可視でないレジスタ（例えば、命令によって用いられる一時レジスタ、リオーダーバッファー、リタイアメントレジスタ等）と対照をなす。これらのレジスタは、一般に、オンダイプロセッサ記憶ロケーションを表す。図示したレジスタは、スカラー汎用レジスタ１０６、パックドデータレジスタ１０７、及びオプションのパックドデータ演算マスクレジスタ１０８を含む。
【００３５】
プロセッサは、実行ロジック１０９（例えば、１つ又は複数の実行ユニット）も備える。この実行ロジックは、命令セットの命令を実行又は処理するように動作可能である。例えば、この実行ロジックは、部分レジスタアクセスパックドデータ命令（複数の場合もある）１０３及びマスクされたフルレジスタアクセスパックドデータ命令（複数の場合もある）１０４Ｂを実行又は処理するように動作可能とすることができる。
【００３６】
図２は、一組の好適なパックドデータレジスタ２０７の第１の実施形態のブロック図である。図示したパックドデータレジスタは、３２個の５１２ビット幅のパックドレジスタ又はベクトルレジスタを含む。これらの３２個の５１２ビットレジスタは、ＺＭＭ０〜ＺＭＭ３１のラベルが付けられている。これらの５１２ビットレジスタのうちの下位１６個は、ＺＭＭ０〜ＺＭＭ１５である。図示するように、幾つかの実施形態では、ＺＭＭ０レジスタ〜ＺＭＭ１５レジスタの低順序の２５６ビットは、それぞれの２５６ビットパックドレジスタ又はベクトルレジスタＹＭＭ０〜ＹＭＭ１５上にエイリアス又はオーバーレイされているが、これは必須ではない。同様に、幾つかの実施形態では、ＹＭＭ０レジスタ〜ＹＭＭ１５レジスタの低順序の１２８ビットは、それぞれの１２８ビットパックドレジスタ又はベクトルレジスタＸＭＭ０〜ＸＭＭ１５上にエイリアス又はオーバーレイされているが、これも必須ではない。
【００３７】
５１２ビットレジスタＺＭＭ０〜ＺＭＭ３１はそれぞれ、５１２ビットパックドデータ、２５６ビットパックドデータ、又は１２８ビットパックドデータを保持するように動作可能である。２５６ビットレジスタＹＭＭ０〜ＹＭＭ１５はそれぞれ、２５６ビットパックドデータ又は１２８ビットパックドデータを保持するように動作可能である。１２８ビットレジスタＸＭＭ０〜ＸＭＭ１はそれぞれ、１２８ビットパックドデータを保持するように動作可能である。少なくとも８ビットバイトデータ、１６ビットワードデータ、３２ビットダブルワードデータ、３２ビット単精度浮動小数点データ、６４ビットクワッドワードデータ、及び６４ビット倍精度浮動小数点データを含む異なるデータ要素サイズがサポートされる。パックドデータレジスタの代替の実施形態は、異なる数のレジスタ、異なるサイズのレジスタを含むことができ、大きい側のレジスタを小さい側のレジスタ上にエイリアスする場合もあるし、しない場合もある。
【００３８】
歴史的に、プロセッサは、当初、ＸＭＭレジスタしか備えていなかった。命令セット内の命令は、ＸＭＭレジスタに対して演算を行った。後に、パックド幅又はベクトル幅を増加させるためにＹＭＭレジスタが加えられ、より多くのデータ要素を同時又は並列に処理することが可能になった。これらのより広いＹＭＭレジスタに対して演算を行う新たな命令が命令セットに加えられた。最近になって、パックド幅又はベクトル幅を更に増加させるＺＭＭレジスタが加えられ、更に多くのデータ要素を同時又は並列に処理することが可能になった。これらの更に広いＺＭＭレジスタに対して演算を行う追加の新たな命令が命令セットに加えられた。これらのより新しい命令及びより広いパックドデータ幅が利用可能であっても、依然として、一般的には、後方互換性を提供し、旧式の命令を依然としてサポートすることが望ましい。例えば、プロセッサはＸＭＭレジスタ及びＹＭＭレジスタに対して演算を行う旧式の命令を継続してサポートすることが一般的には望ましい。しかしながら、ＸＭＭレジスタ及びＹＭＭレジスタは、それよりも広いＺＭＭレジスタ上にエイリアス又はオーバーレイされるので、これらの命令の使用は、多くの場合、広い５１２ビットレジスタ内にストアされた狭いＸＭＭオペランド及び／又はＹＭＭオペランドへの部分レジスタアクセスを伴う。
【００３９】
図３Ａは、幾つかのプロセッサ内の既存の一組のアーキテクチャレジスタ３１０のブロック図である。図示したレジスタは、４つの６４ビットパックドデータレジスタＰ０〜Ｐ３を含むが、オプションとしてより多くのレジスタを含むことができる。これらの４つの６４ビットパックドデータレジスタは、論理的には、その数の２分の１、説明図では２つの１２８ビットパックドデータレジスタＱ０及びＱ１として見ることもできる。１２８ビットレジスタＱ０の最低順序の６４ビット（すなわち、ビット６３：０）は、６４ビットレジスタＰ０に対応するのに対して、１２８ビットレジスタＱ０の最高順序の６４ビット（すなわち、ビット１２７：６４）は、６４ビットレジスタＰ１に対応する。同様に、１２８ビットレジスタＱ１の最低順序の６４ビット（すなわち、ビット６３：０）は、６４ビットレジスタＰ２に対応するのに対して、１２８ビットレジスタＱ１の最高順序の６４ビット（すなわち、ビット１２７：６４）は、６４ビットレジスタＰ３に対応する。
【００４０】
図２の手法に示すようにエイリアシングを用いてパックドデータレジスタの幅を増加させる代わりに、これらの既存のレジスタに用いられるこの手法は、狭い６４ビットＰ０〜Ｐ３レジスタの隣接する対を論理的にともにグルーピングしてそれよりも広い１２８ビットＱ０及びＱ１レジスタを形成することである。しかしながら、複数の狭いパックドデータレジスタを論理的にグルーピングして単一のそれよりも広いパックドデータレジスタを形成するそのような手法に伴う１つの起こり得る欠点は、広いパックドデータレジスタの数が減少することである。６４ビットレジスタの数の２分の１の１２８ビットレジスタしか存在しない。その上、この問題は、１２８ビットよりも更に広いパックドデータ幅が検討されるときに悪化するおそれがある。なぜならば、これは、３つ以上の狭いレジスタを論理的にグルーピングして、単一のそれよりも広いレジスタを作成することを伴う場合があるからである。例えば、４つの６４ビットレジスタが、各２５６ビットレジスタを作成するのに必要とされる場合がある。
【００４１】
図３Ｂは、一組の好適なアーキテクチャパックドデータレジスタ３０７の第２の実施形態のブロック図である。１つの態様では、レジスタ３０７は、図３Ａの既存のレジスタ３１０の拡幅／拡張された互換バージョンを表すことができる。レジスタ３０７は、４つの広い２５６ビットパックドデータレジスタＲ０〜Ｒ３を含む。これらの４つの広い２５６ビットパックドデータレジスタＲ０〜Ｒ３は、既存のレジスタＰ０〜Ｐ３並びにＱ０及びＱ１を実施する。図示するように、幾つかの実施形態では、Ｒ０〜Ｒ３レジスタの低順序の６４ビットは、それぞれの６４ビットレジスタＰ０〜Ｐ３に重なり、Ｒ０〜Ｒ３レジスタの低順序の１２８ビットは、それぞれの１２８ビットレジスタＱ０〜Ｑ３に重なるが、これは必須ではない。様々な実施形態では、例えば、１６個、３２個、６４個、又は他の或る数のレジスタ等、任意の所望の数のそのような２５６ビットレジスタが存在し得る。他の実施形態では、２５６ビットレジスタの代わりに、５１２ビットレジスタ、１０２４ビットレジスタ、又は２５６ビットよりも広いか若しくは狭い他の幅を用いることができる。例えば、８ビットバイト、１６ビットワード、３２ビットダブルワード、３２ビット単精度浮動小数点、６４ビットクワッドワード、６４ビット倍精度浮動小数点、又はそれらの様々な組み合わせを含む種々のデータ要素サイズをサポートすることができる。
【００４２】
既存／レガシー命令は、それでもＰ０〜Ｐ３レジスタ及び／又はＱ０及びＱ１レジスタを指定することができ、そのような既存／レガシー命令を廃止（deprecating）するには何年又は何十年もかかる場合があるので、後方互換性を提供すること及び既存／レガシー命令もサポートすることを可能にすることが重要であり得る。例えば、既存／レガシー命令がＰ０〜Ｐ３レジスタ及び／又はＱ０及びＱ１レジスタに対して演算を行うことを可能にすることが依然として重要であり得る。しかしながら、Ｐ０〜Ｐ３レジスタ及び／又はＱ０及びＱ１レジスタが（例えば、図３Ｂに示すように）それらよりも広いレジスタ上にオーバーレイされている場合、そのような命令の実行は、広いレジスタ上にオーバーレイされたＰ０〜Ｐ３レジスタ及び／又はＱ０及びＱ１レジスタからデータを読み出し及び／又は当該レジスタにデータを書き込む部分レジスタアクセスを伴う場合がある。
【００４３】
図４は、命令処理装置４００の一実施形態のブロック図である。幾つかの実施形態では、この命令処理装置は、プロセッサとすることができ及び／又はプロセッサ内に含めることもできる。例えば、幾つかの実施形態では、この命令処理装置は、図１のプロセッサとすることもできるし、図１のプロセッサ内に含めることもできる。代替的に、この命令処理装置は、同様の又は異なるプロセッサ内に含めることができる。その上、図１のプロセッサは、同様の又は異なる装置内に含めることができる。
【００４４】
装置４００は、アーキテクチャレジスタ４０５を備える。これらのレジスタのそれぞれは、データをストアするように動作可能なオンダイ記憶ロケーションを表すことができる。これらのレジスタは、よく知られた技法を用いて種々のマイクロアーキテクチャに種々の方法で実装することができ、どの特定のタイプの回路にも限定されるものではない。様々な異なるタイプのレジスタが好適である。好適なタイプのレジスタの例には、専用化された物理レジスタ、レジスタリネームを用いて動的にアロケートされる物理レジスタ、及びそれらの組み合わせが含まれるが、これらに限定されるものではない。幾つかの実施形態では、図２のパックドデータレジスタ２０７又は図３のパックドデータレジスタ３０７をレジスタ４０５に用いることができる。代替的に、他のレジスタをレジスタ４０５に用いることができる。
【００４５】
この装置は、１つ又は複数の相対的に狭いオペランドを示すことができる部分レジスタアクセス命令４０３を受信することができる。例として、この命令は、命令フェッチユニット、命令キュー等から受信することができる。幾つかの実施形態では、部分レジスタアクセス命令は、第１の相対的に狭いソースオペランド（例えば、レジスタ）４２２を（例えば、１つ若しくは複数のフィールド又は一組のビットを通じて）明示的に指定するか又は別の方法で示す（例えば、暗黙的に示す）ことができ、相対的に狭いデスティネーションオペランド（例えば、レジスタ）４２４を指定するか又は別の方法で示すことができる。幾つかの実施形態では、第１の狭いソースオペランド４２２は、第１の広いソースオペランド４２３の一部とすることができ、及び／又はより狭いデスティネーションオペランド４２４は、広いデスティネーションオペランド４２５の一部とすることができる。一例として、第１の狭いソースオペランド４２２は、第１の１２８ビットＸＭＭレジスタとすることができ、第１の広いソースオペランド４２３は、第１の１２８ビットＸＭＭレジスタがオーバーレイされる第１の５１２ビットＺＭＭレジスタとすることができ、狭いデスティネーションオペランド４２４は、第２の１２８ビットＸＭＭレジスタとすることができ、広いデスティネーションオペランド４２５は、第２の１２８ビットＸＭＭレジスタがオーバーレイされる第２の５１２ビットＺＭＭレジスタとすることができる。「狭い」及び「広い」という用語は、本明細書において用いられるとき、互いに対して相対的である相対的用語である（すなわち、絶対的用語ではない）（例えば、狭いソースオペランドは、広いソースオペランドよりも狭い等である）。他の実施形態では、部分レジスタアクセス命令は、僅かに単一の相対的に狭いレジスタを示すことができる。その上、他の実施形態では、１つ又は複数のメモリロケーションを用いて、レジスタのうちの１つ又は複数に置き換えることができ、及び／又はデスティネーションレジスタをソースレジスタと同じとすることができる。
【００４６】
装置４００は、デコードロジック４２０も備える。このデコードロジックは、デコードユニット又はデコーダーとも呼ばれる場合がある。部分レジスタアクセス命令は、この装置の命令セットの機械コード命令、アセンブリ言語命令、マクロ命令、又は命令及び／又は制御信号を表すことができる。デコーダーは、部分レジスタアクセス命令をデコード、トランスレート、解釈、モーフィング、又は別の方法で変換することができる。例えば、デコーダーは、相対的に高水準の部分レジスタアクセス命令を、高水準命令を反映し、表し、及び／又は高水準命令から導出された１つ又は複数の対応する相対的に低水準のマイクロ命令、マイクロ演算、マイクロコードエントリーポイント、又は他の相対的に低水準の命令若しくは制御信号にデコードすることができる。デコーダーは、様々な異なるメカニズムを用いて実施することができる。これらのメカニズムには、マイクロコード読み出し専用メモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実施態様、プログラマブルロジックアレイ（ＰＬＡ）、及び当該技術分野で知られているデコーダーを実施するのに用いられる他のメカニズムが含まれるが、これらに限定されるものではない。
【００４７】
幾つかの実施形態では、デコードロジック４２０は、（第１の狭いソースパックドデータオペランド４２２及び狭いデスティネーションオペランド４２４を示す）部分レジスタアクセスパックドデータ命令を、第１の広いソースパックドデータオペランド４２３及び広いデスティネーションオペランド４２５を示すマスクされたフルレジスタアクセスパックドデータ命令／演算にマッピングするロジック４２１を備えることができる。第１の広いソースパックドデータオペランド４２３は、第１の狭いソースパックドデータオペランド４２２よりも広く、この第１の狭いソースパックドデータオペランドを含む（例えば、狭いオペランド４２２を広いオペランド４２３上にエイリアスすることができる）。広いデスティネーションオペランド４２５は、狭いデスティネーションオペランド４２４よりも広く、この狭いデスティネーションオペランドを含む。幾つかの実施形態では、部分レジスタアクセス命令及びマスクされたフルレジスタアクセス命令は、同じ又は密接に類似した算術演算、論理演算、又は他の演算を有することができる（例えば、ともに加算演算を実行することができ、ともにシフト演算を実行することができる等）。幾つかの実施形態では、マスクされたフルレジスタアクセス命令は、部分レジスタアクセス命令に、マスクアウトすることができる追加の演算を加えた全ての演算を実行することができる。「マスクされた」という用語は、以下で更に論述するプレディケーション又は条件付き実行を指す。利点として、幾つかの実施形態では、フルレジスタアクセス命令は、部分レジスタアクセスの代わりにフルレジスタアクセスを実行することができる。
【００４８】
図４を再び参照すると、実行ロジック４０９は、デコードロジック４２０及びレジスタ４０５と結合されている。例として、実行ロジックは、実行ユニット、算術ユニット、算術論理ユニット、算術演算及び論理演算を実行するデジタル回路、機能ユニット、集積回路部又はハードウェアを含むユニット等を含むことができる。実行ユニット及び／又は命令処理装置は、部分レジスタアクセス命令４０３に応答して（例えば、部分レジスタアクセス命令４０３からデコードロジックによって導出された１つ又は複数の命令又は制御信号に応答して）演算を実行するように動作可能な具体的な又は特定のロジック（例えば、回路部、又は潜在的にファームウェア及び／又はソフトウェアと組み合わされる他のハードウェア）を含むことができる。
【００４９】
幾つかの実施形態では、実行ユニットは、パックドデータ演算マスク４０８を用いて、マスクされたフルレジスタアクセスパックドデータ命令／演算を実行するように動作可能とすることができる。幾つかの実施形態では、パックドデータ演算マスクは、マスクされたフルレジスタアクセスパックドデータ命令／演算によってストアされるパックドデータ結果の対応する結果データ要素ごとのマスク要素を備えることができる。幾つかの実施形態では、部分レジスタアクセスパックドデータ命令によってストアされないマスクされたフルレジスタアクセスパックドデータ命令／演算によってストアされる複数の結果データ要素に対応する全てのマスク要素は、マスクアウトするものである。実行ユニットは、広いデスティネーションオペランド４２５にパックドデータ結果をストアすることができる。
【００５０】
幾つかの実施形態では、部分レジスタアクセス命令がパックドデータ演算マスクを示さない場合があるが、それにもかかわらず、パックドデータ演算マスク４０８を用いて、部分レジスタアクセス命令の実行を実施することができる。他の実施形態では、部分レジスタアクセス命令がパックドデータ演算マスクを示すことができるが、パックドデータ演算マスク４０８は、部分レジスタアクセス命令によって示されるパックドデータ演算マスクよりもビットを広くすることができる（例えば、全て意図的にマスクアウトされた追加のマスクビットを有することができる）。
【００５１】
パックドデータ演算マスクは、プレディケートオペランド又は条件付き制御オペランドを表すことができる。パックドデータ演算マスクは、本明細書においては、単にマスクと呼ばれる場合もある。各マスクは、命令に関連付けられた演算をソースデータ要素に対して実行するか否か及び／又は演算の結果をパックドデータ結果にストアするか否かをプレディケート、条件付き制御、又はマスクすることができる。各マスクはそれぞれ、複数のマスク要素、プレディケート要素、又は条件付き制御要素を含むことができる。
【００５２】
幾つかの実施形態では、各マスクは、結果データ要素ごとの粒度で演算をマスクするように動作可能とすることができる。１つの態様では、マスク要素は、結果データ要素と１対１対応で含めることができる（例えば、４つの結果データ要素と４つの対応するマスク要素とが存在することができる）。各異なるマスク要素は、異なる対応するパックドデータ演算、及び／又は異なる対応する結果データ要素のマスクストレージを別々に及び／又は他のものとは独立にマスクするように動作可能とすることができる。例えば、マスク要素は、パックドデータ演算がソースパックドデータの対応するデータ要素（又は２つのソースパックドデータの対応するデータ要素対）に対して実行されるか否か、及び／又はパックドデータ演算の結果が対応する結果データ要素にストアされるか否かをマスクするように動作可能とすることができる。
【００５３】
一般に、各マスク要素は、単一ビットとすることができる。この単一ビットは、２つの異なる可能性のうちのいずれかを指定することを可能にすることができる。一例として、各ビットは、演算を実行すること対演算を実行しないことのいずれかを指定することができる。別の例として、各ビットは、演算の結果をストアすること対演算の結果をストアしないことを指定することができる。１つの可能な規定によれば、各マスクビットは、パックド演算の結果を対応する結果データ要素にストアすることを許可する第１の値（例えば、バイナリー１にセットされる）を有することもできるし、パックド演算の結果を対応する結果データ要素にストアすることを防止する第２の値（例えば、バイナリー０にクリアされる）を有することもできる。反対の規定も可能である。
【００５４】
幾つかの実施形態では、対応するマスクビット又は要素にかかわらず、演算をオプションとして実行することができるが、演算の対応する結果は、対応するマスクビット又は要素の値に応じて、結果パックドデータにストアされる場合もあるし、されない場合もある。代替的に、他の実施形態では、演算は、対応するマスクビット又は要素がマスクアウトされている場合、オプションとして省略することができる（すなわち、実行されない）。幾つかの実施形態では、例外及び／又は違反は、オプションとしてマスクオフされた要素に対する演算について抑制することもできるし、この演算によって起動されないようにすることもできる。幾つかの実施形態では、マスクオフされたデータ要素に対応するメモリフォールトは、オプションとして抑制することもできるし、起動されないようにすることもできる。
【００５５】
説明を分かりにくくしないようにするために、比較的単純な命令処理装置４００が図示及び説明されてきた。他の実施形態では、この装置は、オプションとして、プロセッサ内に見られる他のよく知られた構成要素を備えることができる。そのような構成要素の例には、分岐予測ユニット、命令フェッチユニット、命令キャッシュ及びデータキャッシュ、命令変換索引バッファー及びデータ変換索引バッファー、プリフェッチバッファー、マイクロ命令キュー、マイクロ命令シーケンサー、レジスタリネームユニット、命令スケジューリングユニット、バスインターフェースユニット、第２のキャッシュ又は更に高レベルキャッシュ、リタイアメントユニット、プロセッサに含まれる他の構成要素、並びにそれらの様々な組合せが含まれるが、これらに限定されるものではない。プロセッサ内の構成要素の文字どおり多数の異なる組合せ及び構成があり、実施形態は、どの特定の組合せにも構成にも限定されるものではない。実施形態は、複数のコアを有するプロセッサ、論理プロセッサ、又は実行エンジンに含めることができ、これらのうちの少なくとも１つは、本明細書において開示される命令の一実施形態を実行するように動作可能な実行ロジックを有する。
【００５６】
図５は、プロセッサにおける方法５３０の一実施形態のブロック流れ図である。幾つかの実施形態では、図５の演算及び／又は方法は、図１のプロセッサ及び／又は図４の装置によって及び／又はそれらの内部において実行することができる。図１のプロセッサ及び図４の装置について本明細書において説明した構成要素、特徴、及び具体的なオプションの詳細は、図５の演算及び／又は方法にもオプションとして適用される。代替的に、図５の演算及び／又は方法は、同様の又は完全に異なるプロセッサ又は装置によって及び／又はそれらの内部において実行することができる。その上、図１のプロセッサ及び図４の装置は、図５のものと同様か、又は異なる演算及び／又は方法を実行することができる。
【００５７】
この方法は、ブロック５３１において、パックドデータ命令を受信することを含む。様々な態様では、第１の命令は、オフダイソース（例えば、システムメモリ、ディスク、又はシステム相互接続部）から受信することもできるし、オンダイソース（例えば、命令キャッシュ又は命令フェッチユニット）から受信することもできる。幾つかの実施形態では、パックドデータ命令は、第１の狭いソースパックドデータオペランド、オプションとして第２の狭いソースパックドデータオペランド、及び狭いデスティネーションオペランドを示すことができる。
【００５８】
この方法は、ブロック５３２において、パックドデータ命令をマスクされたパックドデータ演算にマッピングすることを含む。幾つかの実施形態では、マスクされたパックドデータ演算は、第１の狭いソースパックドデータオペランドよりも広くこの第１の狭いソースパックドデータオペランドを含む第１の広いソースパックドデータオペランド、オプションとして、第２の狭いソースパックドデータオペランドよりも広くこの第２の狭いソースパックドデータオペランドを含む第２の広いソースパックドデータオペランド、及び狭いデスティネーションオペランドよりも広くこの狭いデスティネーションオペランドを含む広いデスティネーションオペランドを示すことができる。幾つかの実施形態では、マスクされたパックドデータ演算は、受信されたパックドデータ命令がマスクされた命令であるか否か及び／又はパックドデータ演算マスクを示すか否かのパックドデータ演算マスクを示すことができる。幾つかの実施形態では、デコードロジック（例えば、デコードユニット）が、このマッピングを実行することができる。
【００５９】
この方法は、ブロック５３３において、パックドデータ演算マスクを生成することを含む。幾つかの実施形態では、パックドデータ演算マスクは、マスクされたパックドデータ演算によってストアされるパックドデータ結果の各対応する結果データ要素用のマスク要素を含むことができる。幾つかの実施形態では、パックドデータ命令によってストアされないマスクされたパックドデータ演算によってストアされる結果データ要素に対応する全てのマスク要素はマスクアウトするものとすることができる。
【００６０】
この方法は、ブロック５３４において、パックドデータ演算マスクを用いて、マスクされたパックドデータ演算を実行することを含む。この方法は、ブロック５３５において、パックドデータ結果を広いデスティネーションオペランドにストアすることを含む。幾つかの実施形態では、パックドデータ結果を広いデスティネーションオペランドにストアすることは、部分レジスタ書き込みの代わりにフルレジスタ書き込みを実行することを含むことができる。幾つかの実施形態では、広いデスティネーションオペランドは、デスティネーションレジスタを完全に満たすことができるのに対して、狭いデスティネーションオペランドは、マッピングが実行されていなかった場合には部分レジスタ書き込みが必要とされていた可能性があるようにデスティネーションレジスタを部分的にしか満たしていなかったことになる。
【００６１】
図６は、部分レジスタアクセス命令に応答して、広いオペランド上にオーバーレイされる狭いオペランドに対して実行することができる部分レジスタアクセス演算６０３を示すブロック図である。部分レジスタアクセス命令は、第１の狭いソースパックドデータ６２２−１を指定するか又は別の方法で示すことができ、第２の狭いソースパックドデータ６２２−２を指定するか又は別の方法で示すことができ、結果パックドデータをストアすることができる狭いデスティネーションオペランド６２４（例えば、記憶ロケーション）を指定するか又は別の方法で示すことができる。図示した例では、第１の狭いソースオペランド、第２の狭いソースオペランド、及び狭いデスティネーションオペランドのそれぞれは、１２８ビット幅であり、４つの３２ビットデータ要素を含む。この説明図では、第１の狭いソースパックドデータは、最下位位置（右側）から最上位位置（左側）に値Ａ１、Ａ２、Ａ３、及びＡ４を有する。同様に、第２の狭いソースパックドデータは、最下位位置（右側）から最上位位置（左側）に値Ｂ１、Ｂ２、Ｂ３、及びＢ４を有する。他の例は、これよりも狭い（例えば、８ビット、１６ビット等）か又は広い（例えば、６４ビット）データ要素を有する他のパックドデータ幅（例えば、６４ビット、２５６ビット、５１２ビット等）を用いることができる。
【００６２】
狭い１２８ビットオペランドは、広いレジスタにストアされる。この説明図では、広いレジスタは５１２ビットレジスタである。詳細には、第１の狭いソースパックドデータ６２２−１は、第１の５１２ビットレジスタ６０７−１にストアされ、第２の狭いソースパックドデータ６２２−２は、第２の５１２ビットレジスタ６０７−２にストアされ、狭いデスティネーションオペランド６２４は、第３の５１２ビットレジスタ６０７−３にストアされる。他の実施形態では、例えば、２５６ビットレジスタ又は１０２４ビットレジスタ等の他のレジスタ幅を用いることができる。第１の５１２ビットレジスタのビット５１１：１２８は、値Ａ５〜Ａ１６をストアする。同様に、第２の５１２ビットレジスタのビット５１１：１２８は、値Ｂ５〜Ｂ１６をストアする。
【００６３】
結果パックドデータは、命令／演算に応答して生成され、狭いデスティネーションオペランド６２４にストアされる。結果パックドデータは、複数の結果パックドデータ要素を含む。図示した例では、結果パックドデータは、１２８ビット幅であり、４つの３２ビット結果データ要素を含む。結果データ要素のそれぞれは、演算の結果を含み、この場合、第１の狭いソースパックドデータ及び第２の狭いソースパックドデータからの対応するソースデータ要素対に対して対応する相対ビット位置において実行される加算演算又は和の結果を含む。例えば、この説明図では、結果パックドデータは、最下位位置（右側）から最上位位置（左側）に値Ａ１＋Ｂ１、Ａ２＋Ｂ２、Ａ３＋Ｂ３、及びＡ４＋Ｂ４を有する。加算演算は１つの説明例にすぎないこと、並びに他の算術（例えば、乗算、減算等）及び／又は論理（例えば、シフト、回転、論理ＡＮＤ、論理ＸＯＲ等）演算も好適であることが認識されるべきである。
【００６４】
１２８ビットの第１の狭いソースパックドデータ６２２−１及び第２の狭いソースパックドデータ６２２−２は、広い第１の５１２ビットレジスタ６０７−１及び第２の５１２ビットレジスタ６０７−２の一部にすぎないので、狭いソースオペランドにアクセスすることは、第１の５１２ビットレジスタ及び第２の５１２ビットレジスタの部分レジスタ読み出しを伴うことができる。例えば、値Ａ１〜Ａ４は、値Ａ５〜Ａ１６を読み出すことなく読み出すことができる。その上、狭い１２８ビット結果パックドデータ及び／又は狭い１２８ビットデスティネーションオペランドは、広い第３の５１２ビットレジスタ６０７−３の一部にすぎないので、結果をストアすることは、第３の５１２ビットレジスタへの部分レジスタ書き込みを伴うことができる。例えば、値Ａ１＋Ｂ１、Ａ２＋Ｂ２、Ａ３＋Ｂ３、及びＡ４＋Ｂ４は、第３の５１２ビットレジスタのビット５１１：１２８の既存の内容を破壊することなく（例えば、Ａ５〜Ａ１６又はＢ５〜Ｂ１６の値を破壊することなく）第３の５１２ビットレジスタにストアすることができる。幾つかの実施形態では、そのような部分レジスタアクセスの数をなくすか又は少なくとも削減することが望ましい場合がある。
【００６５】
図７は、狭いオペランドを示す部分レジスタアクセスパックドデータ命令に応答して実行することができる広いオペランドに対するマスクされたフルレジスタアクセスパックドデータ演算７４０の一例示の実施形態のブロック図である。幾つかの実施形態では、プロセッサ又はその一部分（例えば、デコードユニット）は、部分レジスタアクセスパックドデータ命令によって実行される１つ又は複数の部分レジスタアクセスをマスクされたフルレジスタアクセスパックドデータ演算によって実行される１つ又は複数の対応するフルレジスタアクセスに置き換えるために、部分レジスタアクセスパックドデータ命令をマスクされたフルレジスタアクセスパックドデータ演算にマッピングすることができる。幾つかの実施形態では、図７のマスクされたフルレジスタアクセスパックドデータ演算は、図６の部分レジスタアクセス命令及び／又は演算を実施するのに用いることができる。
【００６６】
マスクされたフルレジスタアクセスパックドデータ演算は、部分レジスタアクセス命令によって示される第１の狭いソースパックドデータ７２２−１を有する第１の広いソースパックドデータ７２３−１と、部分レジスタアクセス命令によって示される第２の狭いソースパックドデータ７２２−２を有する第２の広いソースパックドデータ７２３−２とを用いることができる。図示した実施形態では、第１の広いソースパックドデータ及び第２の広いソースパックドデータのそれぞれは、５１２ビット幅であり、１６個の３２ビットデータ要素を有し、第１の狭いソースパックドデータ及び第２の狭いソースパックドデータのそれぞれは、１２８ビット幅であり、４つの３２ビットデータ要素を有するが、本発明の範囲はそのように限定されるものではない。
この説明図では、第１の広いソースパックドデータは、最下位位置（右側）から最上位位置（左側）に値Ａ１，Ａ２，Ａ３，Ａ４，Ａ５，Ａ６...Ａ１６を有する。この説明図では、第２の広いソースパックドデータは、最下位位置（右側）から最上位位置（左側）に値Ｂ１，Ｂ２，Ｂ３，Ｂ４，Ｂ５，Ｂ６...Ｂ１６を有する。２つのソースパックドデータ内の同じ相対ビット位置（例えば、図示した同じ垂直位置）におけるソースデータ要素が、対応するデータ要素の対を表す。他の実施形態では、他の任意の適切な広いソースパックドデータ幅及び狭いソースパックドデータ幅を代わりに用いることができる（例えば、３２ビット、６４ビット、１２８ビット、又は２５６ビットの狭い幅を有する１２８ビット、２５６ビット、又は１０２４ビットの広い幅）。その上、他の実施形態では、例えば、幾つか例を挙げると、８ビットバイト、１６ビットワード、又は６４ビットダブルワード若しくは倍精度浮動小数点等の３２ビット以外の他のデータ要素幅をオプションとして用いることができる。
【００６７】
マスクされたフルレジスタアクセスパックドデータ演算は、ソースパックドデータ演算マスク７０８も用いることができる。この説明図に示すように、一般に、各マスク要素は単一ビットとすることができる。代替的に、３つ以上の異なるオプションから選択することが所望されている場合、各マスク要素に２ビット以上を用いることができる。同様に図示するように、対応するソースデータ要素の対ごと及び／又は結果データ要素ごとに１つのマスク要素、この場合、単一ビットが存在することができる。図示した実施形態では、第１のソースパックドデータ及び第２のソースパックドデータには、対応するデータ要素の１６個の対が存在するので、パックドデータ演算マスクは、１６個のマスク要素又はビットを含む。これらの１６個のマスクビットのそれぞれは、広いデスティネーションオペランド７２５内のパックドデータ結果の異なる結果データ要素に対応することができる。この説明図では、対応するデータ要素及びそれらの対応するマスクビットは、互いに対して垂直に整列されている。マスクビットのそれぞれは、バイナリー１（すなわち、１）にセットされるか又はバイナリー０（すなわち、０）にクリアされる。バイナリー１（すなわち、１）にセットされたマスクビットは、マスクされていないビットを表すのに対して、バイナリー０（すなわち、０）にクリアされたマスクビットは、マスクされたビットを表す。
【００６８】
５１２ビットの結果パックドデータは、マスクされたフルレジスタアクセスパックドデータ演算に応答して広いデスティネーションオペランド７２５にストアされる。幾つかの実施形態では、５１２ビットの結果パックドデータは、フルレジスタ書き込み又はストアを通じて広いデスティネーションオペランド（例えば、５１２ビットレジスタ）にストアされる。幾つかの実施形態では、５１２ビットの結果パックドデータ及び／又は広いデスティネーションオペランド７２５は、対応する部分レジスタアクセス命令によって示される狭い１２８ビットデスティネーションオペランド７２４を含む。この特定の例では、マスクされたフルレジスタアクセスパックドデータ演算は、パックドデータ演算マスク７０８の対応するマスクビットからのプレディケーションに基づいて、第１の広いソースパックドデータ及び第２の広いソースパックドデータからのデータ要素の対応する対の和を結果パックドデータとして広いデスティネーションオペランド７２５に条件付きでストアするマスクされたパックドデータ加算演算である。所与のマスクビットがセットされている（すなわち、１である）とき、対応するソースデータ要素の対の和を対応する結果データ要素にストアすることが許可される。逆に、所与のマスクビットがクリアされている（すなわち、０である）とき、対応するソースデータ要素の対の和を対応する結果データ要素にストアすることが許可されない。それどころか、幾つかの実施形態では、その結果データ要素におけるオリジナル／開始値を変更せずに保持又は保存することができる。
【００６９】
幾つかの実施形態では、狭いデスティネーションオペランドではなく広いデスティネーションオペランド内の結果データ要素に対応するマスク要素は、全て意図的にマスクアウトすることができる。幾つかの実施形態では、広いデスティネーションオペランドではなく狭いデスティネーションオペランド内の結果データ要素に対応する全てのマスク要素は、全てのマスクされていないようにすることができる（例えば、部分レジスタアクセス命令自体がこれらの結果データ要素のうちの幾つかをマスクアウトするプレディケーションを用いていない限り）。例えば、狭いデスティネーションオペランド内の結果データ要素と同じ数の最低順序又は最下位のマスクビットをバイナリー１にセットすることができるのに対して、狭いデスティネーションオペランドではなく広いデスティネーションオペランド内の結果データ要素と同じ数の最高順序又は最上位のマスクビットをバイナリー０にクリアすることができる。図示した実施形態を再び参照すると、ソースパックドデータ演算マスクは、最下位位置（右側）から最上位位置（左側）に値１，１，１，１，０，０...０を有する。すなわち、４つの最低順序のマスクビットはセットされているのに対して、１２個の最高順序のマスクビットはクリアされている。これらのマスクビットは、実行時に動的に決定することができるのに対して、部分レジスタアクセスは、一般にコンパイル時に静的に固定されている。セットされたマスクビットのそれぞれについて、和を対応する結果データ要素にストアすることができる。例えば、図示するように、最低順序の４つの結果データ要素は、値Ａ１＋Ｂ１、Ａ２＋Ｂ２、Ａ３＋Ｂ３、及びＡ４＋Ｂ４をストアする。この実施形態では、オリジナルの部分レジスタアクセス命令／演算（例えば、図６の命令／演算）に関係する５１２ビットオペランドの低順序の１２８ビットの部分内の全てのデータ要素は、全てマスクされていない。
【００７０】
逆に、ビット５１１：１２８における全ての高順序のデータ要素は、全てマスクアウトされている。なぜならば、それらのデータ要素は、１２８ビットオペランドのみを用いたオリジナルの部分レジスタアクセス命令／演算に関係していないからである。クリアされているマスクビットのそれぞれについては、和以外の別の値を対応する結果データ要素にストアすることができる。例えば、ソースがデスティネーションとして再利用される幾つかの実施形態では、広いソースパックドデータからのデータ要素の対応する値を所与のマスクアウトされた結果データ要素にストアすることができるマージングマスキングを実行することができる。例えば、この説明図に示すように、第１の広いソースパックドデータのビット５１１：１２８からの値Ａ５〜Ａ１６は、広いデスティネーションオペランドのビット５１１：１２８にストアすることができる。代替的に、別の実施形態では、値Ｂ５〜Ｂ１６を広いデスティネーションオペランドのビット５１１：１２８にストアすることができる。他の実施形態では、デスティネーションがソースレジスタと異なるレジスタである場合、デスティネーションのマスクアウトされた結果データ要素内のオリジナルの内容を保持するか又は変更しないままとすることができる。利点として、これらのクリアされた最上位マスクビットを用いて、１２８ビットオペランドのみを用いたオリジナルの部分レジスタアクセス命令（例えば、図６の命令／演算）に必要とされない広い５１２ビットレジスタのその部分をマスクアウトすることができる。
【００７１】
これらのマスクビットは、種々の方法で実施することができる。一例として、幾つかの実施形態では、選択演算を実行することができる。この選択演算では、演算の結果が、対応する結果データ要素に書き込まれるように選択されるか、又はデスティネーションにおける対応する結果データ要素のオリジナルの値（すなわち、オリジナル／開始の内容）が、対応する結果データ要素にライトバックされるように選択される場合もある。別の例として、他の実施形態では、条件付き書き込みを実行することができる。この条件付き書き込みでは、マスクビットが、演算の結果が対応する結果データ要素に書き込まれるのか、又は書き込みが実行されず、それによって、結果データ要素がそのオリジナル／開始の内容のままとされるのかを条件付ける。
【００７２】
これは、狭いオペランドを示す部分レジスタアクセスパックドデータ命令を実施するのに用いることができる広いオペランドに対する好適なマスクされたフルレジスタアクセスパックドデータ演算のほんの１つの説明例にすぎないことが認識されるべきである。例えば、減算、乗算、除算、パックド比較等の２つのソースパックドデータに対する他の演算も好適である。更に他の好適な演算は、単一のソースパックドデータオペランドを伴う。例には、パックドシフト、パックド回転、パックド大きさスケーリング（packed magnitude scaling）、パックド逆数平方根等が含まれるが、これらに限定されるものではない。更に他の好適な演算には、３つ以上のソースパックドデータ、異なるサイズのソースパックドデータ、異なる数のデータ要素のソースパックドデータ、水平形式又は非垂直に整列された形式で実行される演算、部分的スカラー演算及び部分的パックド演算、並びに当該技術分野で知られている更に他の演算が含まれる。
【００７３】
他の実施形態では、上記部分レジスタアクセスパックドデータ命令を実施するのに用いられる部分レジスタアクセス命令／演算及び／又は対応するマスクされたフルレジスタアクセスパックドデータ演算は、レジスタ内の中間のビットに対して演算を行うことができる。例えば、中間のビットは、最下位範囲のビット（例えば、１つ又は複数のパックドデータ要素）と最上位範囲のビット（例えば、１つ又は複数のパックドデータ要素）との間の連続した範囲のビット（例えば、１つ又は複数のパックドデータ要素）を表すことができる。
【００７４】
図８は、部分レジスタアクセス命令に応答して、広いオペランド上にオーバーレイされた狭いオペランドに対して実行することができる部分レジスタアクセス演算８０３を示すブロック図である。この部分レジスタアクセス命令は、第１の狭いソースパックドデータ８２２−１を指定するか又は別の方法で示すことができ、第２の狭いソースパックドデータ８２２−２を指定するか又は別の方法で示すことができ、結果パックドデータをストアすることができる狭いデスティネーションオペランド８２４（例えば、記憶ロケーション）を指定するか又は別の方法で示すことができる。図示した例では、第１の狭いソースオペランド、第２の狭いソースオペランド、及び狭いデスティネーションオペランドのそれぞれは、１２８ビット幅であり、２つの６４ビットデータ要素を含むが、本発明の範囲はそのように限定されるものではない。この説明図では、第１の狭いソースパックドデータは、最下位位置（右側）から最上位位置（左側）に値Ａ１及びＡ２を有する。同様に、第２の狭いソースパックドデータは、最下位位置（右側）から最上位位置（左側）に値Ｂ１及びＢ２を有する。他の例は、これよりも狭い（例えば、８ビット、１６ビット等）データ要素又はこれよりも広い（例えば、６４ビット）データ要素のいずれかを有する他のパックドデータ幅（例えば、６４ビット、２５６ビット、５１２ビット等）を用いることができる。
【００７５】
狭い１２８ビットオペランドは、広いレジスタにストアされる。この説明図では、これらの広いレジスタは、２５６ビットレジスタである。詳細には、第１の狭いソースパックドデータ８２２−１は、第１の２５６ビットレジスタ８０７−１にストアされ、第２の狭いソースパックドデータ８２２−２は、第２の２５６ビットレジスタ８０７−２にストアされ、狭いデスティネーションオペランド８２４は、第３の２５６ビットレジスタ８０７−３にストアされる。他の実施形態では、例えば、５１２ビットレジスタ又は１０２４ビットレジスタ等の他のレジスタ幅を用いることができる。第１の２５６ビットレジスタのビット２５５：１２８は、値Ａ３及びＡ４をストアする。同様に、第２の２５６ビットレジスタのビット２５５：１２８は、値Ｂ３及びＢ４をストアする。
【００７６】
結果パックドデータは、命令／演算に応答して生成され、狭いデスティネーションオペランド８２４にストアされる。図示した例では、結果パックドデータは、１２８ビット幅であり、２つのデータ要素を含む。ビット６３：０における最低順序のデータ要素は、第１のソースパックドデータからの対応するデータ要素の値Ａ１を含む。この場合では、このデータ要素を生成する加算演算は実行されていない。ビット１２７：６４における高順序のデータ要素は、第１のソースパックドデータ及び第２のソースパックドデータからの対応するデータ要素の対の和を表す和Ａ２＋Ｂ２を含む。１２８ビットの第１の狭いソースパックドデータ８２２−１及び第２の狭いソースパックドデータ８２２−２は、広い第１の２５６ビットレジスタ８０７−１及び第２の２５６ビットレジスタ８０７−２の一部でしかないので、狭いソースオペランドにアクセスすることは、部分レジスタ読み出しを伴うことができる。その上、狭い１２８ビット結果パックドデータ及び／又は狭い１２８ビットデスティネーションオペランドは、広い第３の２５６ビットレジスタ８０７−３の一部でしかないので、結果をストアすることは、部分レジスタ書き込みを伴うことができる。例えば、幾つかの実施形態では、第１の２５６ビットレジスタは、デスティネーションオペランドとして再利用することができ、和Ａ２＋Ｂ２は、この２５６ビットレジスタの他の既存の内容を上書きすることなく（例えば、Ａ１、Ａ３、及びＡ４を上書きすることなく）、このレジスタのビット１２７：６４にストアすることができる。これは、部分レジスタ書き込みを伴うことができる。幾つかの実施形態では、そのような部分レジスタアクセスの数をなくすか又は少なくとも削減することが望ましい場合がある。
【００７７】
図９は、狭いオペランドを示す部分レジスタアクセスパックドデータ命令に応答して実行することができる広いオペランドに対するマスクされたフルレジスタアクセスパックドデータ演算９４０の一例示の実施形態のブロック図である。幾つかの実施形態では、プロセッサ又はその一部分（例えば、デコードユニット）は、部分レジスタアクセスパックドデータ命令によって実行される１つ又は複数の部分レジスタアクセスをマスクされたフルレジスタアクセスパックドデータ演算によって実行される１つ又は複数の対応するフルレジスタアクセスに置き換えるために、部分レジスタアクセスパックドデータ命令をマスクされたフルレジスタアクセスパックドデータ演算にマッピングすることができる。幾つかの実施形態では、図９のマスクされたフルレジスタアクセスパックドデータ演算は、図８の部分レジスタアクセス命令及び／又は演算を実施するのに用いることができる。
【００７８】
マスクされたフルレジスタアクセスパックドデータ演算は、部分レジスタアクセス命令によって示される第１の狭いソースパックドデータ９２２−１を有する第１の広いソースパックドデータ９２３−１と、部分レジスタアクセス命令によって示される第２の狭いソースパックドデータ９２２−２を有する第２の広いソースパックドデータ９２３−２とを用いることができる。図示した実施形態では、第１の広いソースパックドデータ及び第２の広いソースパックドデータのそれぞれは、２５６ビット幅であり、４つの６４ビットデータ要素を有し、第１の狭いソースパックドデータ及び第２の狭いソースパックドデータのそれぞれは、１２８ビット幅であり、２つの６４ビットデータ要素を有するが、本発明の範囲はそのように限定されるものではない。この説明図では、第１の広いソースパックドデータは、最下位位置（右側）から最上位位置（左側）に値Ａ１、Ａ２、Ａ３、及びＡ４を有する。この説明図では、第２の広いソースパックドデータは、最下位位置（右側）から最上位位置（左側）に値Ｂ１、Ｂ２、Ｂ３、及びＢ４を有する。他の実施形態では、他の任意の適切な広いソースパックドデータ幅及び狭いソースパックドデータ幅を代わりに用いることができる。その上、他の実施形態では、他のデータ要素幅をオプションとして用いることができる。
【００７９】
マスクされたフルレジスタアクセスパックドデータ演算は、ソースパックドデータ演算マスク９０８も用いることができる。図示した実施形態では、デスティネーションオペランドに４つのデータ要素があるので、４つの対応するマスクビットが存在する。この例では、ソースパックドデータ演算マスクは、最下位位置（右側）から最上位位置（左側）に値０，１，０，０を有する。
【００８０】
２５６ビットの結果パックドデータは、マスクされたフルレジスタアクセスパックドデータ演算に応答して広いデスティネーションオペランド９２５にストアされる。幾つかの実施形態では、２５６ビットの結果パックドデータは、フルレジスタ書き込み又はストアを通じて広いデスティネーションオペランド（例えば、２５６ビットレジスタ）にストアされる。幾つかの実施形態では、２５６ビットの結果パックドデータ及び／又は広いデスティネーションオペランド９２５は、対応する部分レジスタアクセス命令によって示される狭い１２８ビットデスティネーションオペランド９２４を含む。図示するように、単一の和のみを２５６ビットの結果パックドデータにストアすることができる。すなわち、和Ａ２＋Ｂ２は、デスティネーションオペランド９２５のビット１２７：６４にストアすることができる。和Ａ２＋Ｂ２がストアされるデスティネーションオペランド９２５のビット１２７：６４に対応する単一のマスクビットのみがセットされる。
他の全てのマスクビットはクリアされる。クリアされたマスクビットのそれぞれについて、第１の広いソースパックドデータ９２３−１からの対応するデータ要素の値はデスティネーションオペランド９２５にストアされる。詳細には、値Ａ１は、デスティネーションオペランドのビット６３：０にストアされ、値Ａ３は、デスティネーションオペランドのビット１９１：１２８にストアされ、値Ａ４は、デスティネーションオペランドのビット２５５：１９２にストアされる。これらの他のマスクビットは、オリジナルの部分レジスタアクセス命令／演算による単一の和Ａ２＋Ｂ２に関係していないので、マスクアウトされている。利点として、これらのクリアされた最上位マスクビットを用いて、オリジナルの部分レジスタアクセス命令（例えば、図８の命令／演算）に必要とされない広い２５６ビットレジスタのその部分をマスクアウトすることができ、部分レジスタアクセスの代わりにフルレジスタアクセスの実行を可能にすることができる。既に述べたように、多くの他の算術演算及び／又は論理演算も好適である。
【００８１】
図６及び図７は、狭いオペランドが広いオペランドの最下位ビットを占有する一実施形態を示している。図８及び図９は、狭いオペランド、又は狭いオペランドの少なくとも対象となる部分が広いオペランドの最下位端と最上位端との間の中間部分を占有する一実施形態を示している。更に他の実施形態では、狭いオペランドは、広いオペランドの最上位部分を占有することができる。更に他の実施形態では、そのような位置の組み合わせをオプションとして用いることができる。
【００８２】
上述した例では、部分レジスタアクセス命令／演算は、データ要素の対応する対（すなわち、第１のソースオペランド及び第２のソースオペランド内の対応する相対ビット位置における対）に対して演算を行っていた。上記説明図では、データ要素のそれらの対応する対は、垂直に整列されていた。他の実施形態では、部分レジスタアクセス命令／演算は、少なくとも幾つかの対応しないデータ要素（すなわち、第１のソースオペランド及び第２のソースオペランド内の対応する相対ビット位置にないデータ要素）に対して演算を行うことができる。そのような対応しないデータ要素は、不整列（unaligned）であると言われる場合がある。幾つかの実施形態では、シフト、シャッフル、置換（permute）、又は他のデータ再配置演算を実行して対応しないデータ要素の整列を助けることができ、その結果、それらのデータ要素は、第１のソースオペランド及び第２のソースオペランドにおいて整列された／対応する相対ビット位置になり、その結果、部分レジスタアクセス命令／演算を実施するのに用いられるマスクされたフルレジスタアクセスパックドデータ演算によって、第１のソースオペランド及び第２のソースオペランドにおける整列された／対応するデータ要素に対して垂直ＳＩＭＤ演算を実行することができる。幾つかの実施形態では、このデータ再配置演算は、第１のオペランド、又は第１のオペランドからの１つ若しくは複数のデータ要素を、第２のオペランド、若しくは第２のオペランドからの１つ若しくは複数のデータ要素、及び／又はデスティネーションオペランド、若しくはデスティネーションオペランドからの１つ若しくは複数のデータ要素と整列するのに用いることができる。幾つかの実施形態では、データ再配置演算は、デコーダーが、部分レジスタアクセスパックドデータ命令をデコードし、データ再配置演算及びマスクされたフルレジスタアクセスパックドデータ演算を通じて部分レジスタアクセスパックドデータ命令を実施することを決定した際に決定することができる。
【００８３】
以下に説明する図１０及び図１１は、それぞれ、前述した図８及び図９と或る特定の類似点を有する。説明を分かりにくくしないように、以下の論述は、オプションとして同じ又は類似であり得る全ての特徴及び／又は態様を繰り返すとは限らず、図１０及び図１１の新しい特徴及び／又は態様又は異なる特徴及び／又は態様を強調する傾向がある。しかしながら、図８及び図９について前述したオプションの特徴及び／又は態様並びに変形形態は、別段の規定のない限り又は別段明確に明らかにされていない限り、一般に図１０及び図１１にも適用可能であることが認識されるべきである。
【００８４】
図１０は、部分レジスタアクセス命令に応答して、広いオペランド上にオーバーレイされた狭いオペランドの対応しない及び／又は不整列のデータ要素に対して実行することができる部分レジスタアクセス演算１００３を示すブロック図である。この部分レジスタアクセス命令は、第１の狭いソースパックドデータ１０２２−１、第２の狭いソースパックドデータ１０２２−２、及び狭いデスティネーションオペランド１０２４を指定するか又は別の方法で示すことができる。図示した例では、第１の狭いソースオペランド、第２の狭いソースオペランド、及び狭いデスティネーションオペランドのそれぞれは、１２８ビット幅であり、２つの６４ビットデータ要素を含むが、本発明の範囲はそのように限定されるものではない。この説明図では、第１の狭いソースパックドデータは、値Ａ１及びＡ２を有する。同様に、第２の狭いソースパックドデータは、値Ｂ１及びＢ２を有する。第１の狭いソースパックドデータ１０２２−１は、第１の広い２５６ビットレジスタ１００７−１にストアされ、第２の狭いソースパックドデータ１０２２−２は、第２の広い２５６ビットレジスタ１００７−２にストアされ、狭いデスティネーションオペランド１０２４は、第３の広い２５６ビットレジスタ１００７−３にストアされる。第１の広い２５６ビットレジスタのビット２５５：１２８は、値Ａ３及びＡ４をストアする。同様に、第２の広い２５６ビットレジスタのビット２５５：１２８は、値Ｂ３及びＢ４をストアする。
【００８５】
命令／演算に応答して、結果パックドデータが生成され、狭いデスティネーションオペランド１０２４にストアされる。図示した例では、結果パックドデータは、１２８ビット幅であり、２つのデータ要素を含む。ビット６３：０における最低順序のデータ要素は、第１のソースパックドデータからの対応するデータ要素の値Ａ１を含む。この場合では、このデータ要素を生成する加算演算は実行されていない。ビット１２７：６４における高順序のデータ要素は、和Ａ２＋Ｂ１を含む。これは、第１の狭いソースパックドデータ及び第２の狭いソースパックドデータにおける対応しないデータ要素の和であることに留意されたい。詳細には、第１の狭いソースパックドデータのビット１２７：６４におけるデータ要素Ａ２は、第２の狭いソースパックドデータのビット６３：０におけるデータ要素Ｂ１に加えられている。データ要素Ａ２及びＢ１は、第１のソースパックドデータ及び第２のソースパックドデータにおける対応しない又は不整列のビット位置を占有する。
【００８６】
図１１は、広いオペランドの対応する及び／又は整列されたデータ要素に対して実行することができ、狭いオペランドの対応しない及び／又は不整列のデータ要素に対する演算を示す部分レジスタアクセスパックドデータ命令に応答して実行することができるマスクされたフルレジスタアクセスパックドデータ演算１１４０の一例示の実施形態のブロック図である。幾つかの実施形態では、プロセッサ又はその一部分（例えば、デコードユニット）は、部分レジスタアクセスパックドデータ命令によって実行される１つ又は複数の部分レジスタアクセスを、マスクされたフルレジスタアクセスパックドデータ演算によって実行される１つ又は複数の対応するフルレジスタアクセスに置き換えるために、部分レジスタアクセスパックドデータ命令をマスクされたフルレジスタアクセスパックドデータ演算にマッピングすることができる。幾つかの実施形態では、図１１の対応する及び／又は整列されたデータ要素を伴うマスクされたフルレジスタアクセスパックドデータ演算は、図１０の対応しない及び／又は不整列のデータ要素を伴う部分レジスタアクセス命令及び／又は演算を実施するのに用いることができる。
【００８７】
マスクされたフルレジスタアクセスパックドデータ演算は、部分レジスタアクセス命令によって示される第１の狭いソースパックドデータ１１２２−１を有する第１の広いソースパックドデータ１１２３−１と、部分レジスタアクセス命令によって示される第２の狭いソースパックドデータ１１２２−２を有する第２の広いソースパックドデータ１１２３−２とを用いることができる。図示した実施形態では、第１の広いソースパックドデータ及び第２の広いソースパックドデータのそれぞれは、２５６ビット幅であり、４つの６４ビットデータ要素を有し、第１の狭いソースパックドデータ及び第２の狭いソースパックドデータのそれぞれは、１２８ビット幅であり、２つの６４ビットデータ要素を有するが、本発明の範囲はそのように限定されるものではない。この説明図では、第１の広いソースパックドデータは、値Ａ１、Ａ２、Ａ３、及びＡ４を有する。第２の広いソースパックドデータは、値Ｂ１、Ｂ２、Ｂ３、及びＢ４を有する。他の実施形態では、他の任意の適切な広いソースパックドデータ幅及び狭いソースパックドデータ幅及び／又は他の任意の適切なデータ要素幅をオプションとして代わりに用いることができる。
【００８８】
幾つかの実施形態では、シフト、シャッフル、置換、又は他のデータ再配置演算を実行して、部分レジスタアクセス命令によって演算されることが示される対応しない及び／又は不整列のデータ要素を整列するのを助けることができ、その結果、広いオペランドに対するマスクされたフルレジスタアクセスパックドデータ演算によって、整列された形式でそれらのデータ要素を演算することができる。例えば、図１１のマスクされたフルレジスタアクセスパックドデータ演算に先立って、シフト、シャッフル、置換、又は他のデータ再配置演算を実行して、図１０の部分レジスタアクセスパックドデータ命令／演算の対応しない及び／又は不整列のデータ要素Ａ２及びＢ１を整列するのを助けることができる。図示するように、図示した実施形態では、第２の広いソースパックドデータ１１２３−２は、値Ｂ１を有するデータ要素が第２の広いソースパックドデータのビット６３：０内ではなく第２の広いソースパックドデータのビット１２７：６４内となるように６４ビットだけシフトすることができる。この時、値Ａ２及びＢ１は、対応するビット位置にある対応するデータ要素になり、及び／又は互いに対して整列されている。利点として、これは、垂直タイプＳＩＭＤ演算（例えば、パックド加算）を実行することを可能にすることができる。
【００８９】
他の実施形態では、シフトの代わりに、例えば、回転、シャッフル、置換、又は当該技術分野で知られているとともに整列を達成するのに必要とされる特定の再配置に好適な様々な他のデータ再配置演算等の他のデータ再配置演算を実行することができる。
【００９０】
幾つかの部分レジスタアクセス命令／演算（例えば、図６及び図８に示すもの）について、整列演算もデータ再配置演算も必要とされない場合がある。幾つかの実施形態では、プロセッサがそのような整列演算又はデータ再配置演算を用いる場合、その整列演算又はデータ再配置演算は、必要とされないときは無効化することができる。例えば、実際のシフトの代わりに、０ビット分のシフトを実行することができる。別の例として、シャッフル演算又は置換演算は、データ要素をそれらの元の開始位置にシャッフル又は置換することができる。
【００９１】
マスクされたフルレジスタアクセスパックドデータ演算は、ソースパックドデータ演算マスク１１０８も用いることができる。図示した実施形態では、４つのデータ要素がデスティネーションオペランドにあるので、４つの対応するマスクビットがある。この例では、ソースパックドデータ演算マスクは、最下位位置（右側）から最上位位置（左側）に値０，１，０，０を有する。
【００９２】
２５６ビットの結果パックドデータは、マスクされたフルレジスタアクセスパックドデータ演算に応答して、広い２５６ビットデスティネーションオペランド１１２５にストアされる。幾つかの実施形態では、２５６ビットの結果パックドデータは、フルレジスタ書き込み又はストアを通じて広いデスティネーションオペランド（例えば、２５６ビットレジスタ）にストアされる。幾つかの実施形態では、２５６ビットの結果パックドデータ及び／又は広いデスティネーションオペランド１１２５は、対応する部分レジスタアクセス命令によって示される狭い１２８ビットデスティネーションオペランド１１２４を含む。図示するように、単一の和のみを２５６ビットの結果パックドデータにストアすることができる。すなわち、和Ａ２＋Ｂ１をデスティネーションオペランド１１２５のビット１２７：６４にストアすることができる。和Ａ２＋Ｂ１がストアされるデスティネーションオペランド１１２５のビット１２７：６４に対応する単一のマスクビットのみがセットされる。他の全てのマスクビットはクリアされる。クリアされたマスクビットのそれぞれについて、第１の広いソースパックドデータ１１２３−１からの対応するデータ要素の値が、デスティネーションオペランド１１２５にストアされる。
詳細には、値Ａ１はデスティネーションオペランドのビット６３：０にストアされ、値Ａ３はデスティネーションオペランドのビット１９１：１２８にストアされ、値Ａ４はデスティネーションオペランドのビット２５５：１９２にストアされる。これらの他のマスクビットは、オリジナルの部分レジスタアクセス命令／演算による単一の和Ａ２＋Ｂ１に関係していないのでマスクアウトされている。利点として、これらのクリアされた最上位マスクビットは、オリジナルの部分レジスタアクセス命令（例えば、図１０の命令／演算）に必要とされない広い２５６ビットレジスタの部分をマスクアウトするとともに部分レジスタアクセスの代わりにフルレジスタアクセスの実行を可能にするのに用いることができる。既に述べたように、加算以外の他の多くの算術演算及び／又は論理演算が、同様に／代替的に好適である。
【００９３】
図１２は、パックドデータ演算マスクビットの数がパックドデータ幅及びパックドデータ要素幅に依存することを示す表１２５０である。１２８ビット、２５６ビット、及び５１２ビットのパックドデータ幅が示されているが、他の幅も可能である。８ビットバイト、１６ビットワード、３２ビットダブルワード（ｄｗｏｒｄ）又は単精度浮動小数点、及び６４ビットクワッドワード（Ｑｗｏｒｄ）又は倍精度浮動小数点のパックドデータ要素幅が考慮されているが、他の幅も可能である。図示するように、パックドデータ幅が１２８ビットであるときにおいて、パックドデータ要素幅が８ビットであるときは１６ビットをマスキングに用いることができ、パックドデータ要素幅が１６ビットであるときは８ビットをマスキングに用いることができ、パックドデータ要素幅が３２ビットであるときは４ビットをマスキングに用いることができ、パックドデータ要素幅が６４ビットであるときは２ビットをマスキングに用いることができる。パックドデータ幅が２５６ビットであるときにおいて、パックドデータ要素幅が８ビットであるときは３２ビットをマスキングに用いることができ、パックドデータ要素幅が１６ビットであるときは１６ビットをマスキングに用いることができ、パックドデータ要素幅が３２ビットであるときは８ビットをマスキングに用いることができ、パックドデータ要素幅が６４ビットであるときは４ビットをマスキングに用いることができる。パックドデータ幅が５１２ビットであるときにおいて、パックドデータ要素幅が８ビットであるときは６４ビットをマスキングに用いることができ、パックドデータ要素幅が１６ビットであるときは３２ビットをマスキングに用いることができ、パックドデータ要素幅が３２ビットであるときは１６ビットをマスキングに用いることができ、パックドデータ要素幅が６４ビットであるときは８ビットをマスキングに用いることができる。
【００９４】
図１３は、好適な一組のパックドデータ演算マスクレジスタ１３０８の一例示の実施形態のブロック図である。パックドデータ演算マスクレジスタのそれぞれは、パックドデータ演算マスクをストアするのに用いることができる。図示した実施形態では、この一組は、Ｋ０〜Ｋ７のラベルが付けられた８つのパックドデータ演算マスクレジスタを含む。代替の実施形態は、８つよりも少ない（例えば、２つ、４つ、７つ等）か又は８つよりも多い（例えば、１０個、１６個、３２個等）パックドデータ演算マスクレジスタを含むことができる。図示した実施形態では、パックドデータ演算マスクレジスタのそれぞれは６４ビット幅である。代替の実施形態では、パックドデータ演算マスクレジスタの幅は、６４ビットよりも広くすることもできるし（例えば、１２８ビット等）、６４ビットよりも狭くすることもできる（例えば、８ビット、１６ビット、３２ビット等）。パックドデータ演算マスクレジスタは、よく知られた技法を用いて種々の方法で実装することができ、どの既知の特定のタイプの回路にも限定されるものではない。幾つかの実施形態では、パックドデータ演算マスクレジスタは、別個の専用の一組のアーキテクチャレジスタとすることができる。幾つかの実施形態では、命令は、パックドデータ演算マスクレジスタをビットで又はフィールドにおいてエンコード又は指定することができる。例として、プレディケートされた命令は、３ビット（例えば、３ビットフィールド）を用いて、８つのパックドデータ演算マスクレジスタのうちの任意の１つをエンコード又は指定することができる。代替の実施形態では、これよりも少ない又はこれよりも多くのパックドデータ演算マスクレジスタがあるとき、それぞれこれよりも少ない又はこれよりも多くのビットを用いることができる。
【００９５】
図１４は、パックドデータ演算マスクレジスタ１４０８の一例示の実施形態を示すとともに、パックドデータ演算マスクとして及び／又はマスキングに用いられるビット数がパックドデータ幅及びデータ要素幅に依存する場合があることを示す図である。図示したマスクレジスタは６４ビット幅であるが、これは必須ではない。パックドデータ幅及びデータ要素幅に応じて、６４ビット全て又は６４ビットのサブセットのみをマスキング用に用いることができる。一般に、単一の要素ごとのマスクビットが用いられるとき、マスキング用に用いられるマスクビット数は、パックドデータ幅をパックドデータ要素幅によって除算したものに等しい。５１２ビット幅のパックドデータの幾つかの説明例が示されている。すなわち、パックドデータ幅が５１２ビットであり、データ要素幅が６４ビットであるとき、レジスタの８ビットのみ（例えば最低順序の８ビット）が、マスキングに用いられる。パックドデータ幅が５１２ビットであり、データ要素幅が３２ビットであるとき、１６ビットのみがマスキングに用いられる。
パックドデータ幅が５１２ビットであり、データ要素幅が１６ビットであるとき、３２ビットのみがマスキングに用いられる。パックドデータ幅が５１２ビットであり、データ要素幅が８ビットであるとき、６４ビット全てがマスキングに用いられる。プレディケートされた命令は、この命令に関連付けられたパックドデータ幅及びデータ要素幅に基づいて、マスキングに必要なビットのサブセット（例えば、ビットの下位順序又は最下位のサブセット）のみにアクセスすることができ及び／又はそのビットのサブセットを利用することができる。図示した実施形態では、レジスタの最低順序のサブセット又は部分がマスキングに用いられるが、これは必須ではない。代替の実施形態では、最高順序のサブセット又は他の或るサブセットをオプションとして用いることができる。その上、図示した実施形態では、５１２ビットのパックドデータ幅のみが考慮されているが、同じ原理が、例えば、２５６ビット幅及び１２８ビット幅等の他のパックドデータ幅に適用される。
【００９６】
例示的なコアアーキテクチャ、プロセッサ、及びコンピューターアーキテクチャ  プロセッサコアは、種々の目的で種々のプロセッサにおいて種々の方法で実施することができる。例えば、そのようなコアの実施態様は、１）汎用コンピューティングを対象とした汎用インオーダーコア、２）汎用コンピューティングを対象とした高性能汎用アウトオブオーダーコア、３）主としてグラフィックス及び／又は科学（スループット）コンピューティングを対象とした専用コアを含むことができる。種々のプロセッサの実施態様は、１）汎用コンピューティングを対象とした１つ若しくは複数の汎用インオーダーコア及び／又は汎用コンピューティングを対象とした１つ若しくは複数の汎用アウトオブオーダーコアを備えるＣＰＵ、並びに２）主としてグラフィックス及び／又は科学（スループット）を対象とした１つ又は複数の専用コアを備えるコプロセッサを含むことができる。
そのような種々のプロセッサは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内にある別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、統合グラフィックスロジック及び／又は科学（スループット）ロジック等の専用ロジック又は専用コアと呼ばれることがある）、並びに４）説明したＣＰＵ（アプリケーションコア（複数の場合もある）又はアプリケーションプロセッサ（複数の場合もある）と呼ばれることがある）、上述したコプロセッサ、及び追加の機能と同じダイ上に備えることができるシステムオンチップ、を備えることができる種々のコンピューターシステムアーキテクチャをもたらす。例示的なコアアーキテクチャを次に説明し、その後に例示的なプロセッサ及びコンピューターアーキテクチャを説明する。
【００９７】
例示的なコアアーキテクチャインオーダーコア及びアウトオブオーダーコアのブロック図  図１５Ａは、本発明の実施形態による例示的なインオーダーパイプライン及び例示的なレジスタリネームアウトオブオーダー発行／実行パイプラインの双方を示すブロック図である。図１５Ｂは、本発明の実施形態によるプロセッサに含まれる、インオーダーアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネームアウトオブオーダー発行／実行アーキテクチャコアの双方を示すブロック図である。図１５Ａ及び図１５Ｂにおける実線のボックスは、インオーダーパイプライン及びインオーダーコアを示している一方、破線のボックスのオプションの追加は、レジスタリネームアウトオブオーダー発行／実行パイプライン及びコアを示している。インオーダーの態様はアウトオブオーダーの態様のサブセットであることから、アウトオブオーダーの態様を説明することにする。
【００９８】
図１５Ａにおいて、プロセッサパイプライン１５００は、フェッチステージ１５０２、長さデコードステージ１５０４、デコードステージ１５０６、アロケーションステージ１５０８、リネームステージ１５１０、スケジューリング（ディスパッチ又は発行としても知られている）ステージ１５１２、レジスタ読み出し／メモリ読み出しステージ１５１４、実行ステージ１５１６、ライトバック／メモリ書き込みステージ１５１８、例外ハンドリングステージ１５２２、及びコミットステージ１５２４を備える。
【００９９】
図１５Ｂは、実行エンジンユニット１５５０に結合されたフロントエンドユニット１５３０を備えるプロセッサコア１５９０を示し、双方は、メモリユニット１５７０に結合されている。コア１５９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、又はハイブリッドコアタイプ若しくは代替のコアタイプとすることができる。更に別のオプションとして、コア１５９０は、例えば、ネットワークコア又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ＧＰＧＰＵ）コア、グラフィックスコア等のような専用コアとすることができる。
【０１００】
フロントエンドユニット１５３０は、命令キャッシュユニット１５３４に結合された分岐予測ユニット１５３２を備え、この命令キャッシュユニットは、命令変換索引バッファー（ＴＬＢ）１５３６に結合され、この命令変換索引バッファーは、命令フェッチユニット１５３８に結合され、この命令フェッチユニットは、デコードユニット１５４０に結合されている。デコードユニット１５４０（又はデコーダー）は、命令をデコードし、オリジナルの命令からデコードされるか、又はオリジナルの命令を別の方法で反映するか、又はオリジナルの命令から導出される１つ又は複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成することができる。デコードユニット１５４０は、様々な異なるメカニズムを用いて実施することができる。好適なメカニズムの例には、ルックアップテーブル、ハードウェア実施態様、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコード読み出し専用メモリ（ＲＯＭ）等が含まれるが、これらに限定されるものではない。１つの実施形態では、コア１５９０は、（例えば、デコードユニット１５４０内又は別の状況ではフロントエンドユニット１５３０内において）或る特定のマクロ命令用のマイクロコードをストアするマイクロコードＲＯＭ又は他の媒体を備える。デコードユニット１５４０は、実行エンジンユニット１５５０内のリネーム／アロケーターユニット１５５２に結合されている。
【０１０１】
実行エンジンユニット１５５０は、リタイアメントユニット１５５４と一組の１つ又は複数のスケジューラユニット１５５６とに結合されたリネーム／アロケーターユニット１５５２を備える。スケジューラユニット（複数の場合もある）１５５６は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット（複数の場合もある）１５５６は、物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）１５５８に結合されている。
物理レジスタファイル（複数の場合もある）ユニット１５５８のそれぞれは、１つ又は複数の物理レジスタファイルを表し、これらの物理レジスタファイルの異なるものは、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインター）等の１つ又は複数の異なるデータタイプをストアする。１つの実施形態では、物理レジスタファイル（複数の場合もある）ユニット１５５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラーレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供することができる。物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）１５５８は、（例えば、リオーダーバッファー（複数の場合もある）及びリタイアメントレジスタファイル（複数の場合もある）を用いる；フューチャーファイル（複数の場合もある）、履歴バッファー（複数の場合もある）、及びリタイアメントレジスタファイル（複数の場合もある）を用いる；レジスタマップ及びレジスタのプールを用いる等して）レジスタリネーム及びアウトオブオーダー実行を実施することができる様々な方法を示すリタイアメントユニット１５５４によって重ね合わされる。
リタイアメントユニット１５５４及び物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）１５５８は、実行クラスター（複数の場合もある）１５６０に結合されている。実行クラスター（複数の場合もある）１５６０は、一組の１つ又は複数の実行ユニット１５６２及び一組の１つ又は複数のメモリアクセスユニット１５６４を備える。実行ユニット１５６２は、様々なタイプのデータ（例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して様々な演算（例えば、シフト、加算、減算、乗算）を実行することができる。幾つかの実施形態は、特定の機能又は特定の数組の機能に専用の複数の実行ユニットを備えることができるが、他の実施形態は、全ての機能を全て実行する１つの実行ユニットのみ又は複数の実行ユニットを備えることができる。スケジューラユニット（複数の場合もある）１５５６、物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）１５５８、及び実行クラスター（複数の場合もある）１５６０は、場合によっては複数のものとして示される。
なぜならば、或る特定の実施形態は、或る特定のタイプのデータ／演算用の別々のパイプライン（例えば、それぞれがそれ自体のスケジューラユニット、物理レジスタファイル（複数の場合もある）ユニット、及び／又は実行クラスターを有するスカラー整数パイプライン、スカラー浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／又はメモリアクセスパイプラインであり、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスターのみがメモリアクセスユニット（複数の場合もある）１５６４を有する或る特定の実施形態が実施される）を作成するからである。別々のパイプラインが用いられる場合、これらのパイプラインのうちの１つ又は複数はアウトオブオーダー発行／実行とすることができ、残りはインオーダーとすることができることも理解されるべきである。
【０１０２】
一組のメモリアクセスユニット１５６４は、メモリユニット１５７０に結合され、このメモリユニットは、レベル２（Ｌ２）キャッシュユニット１５７６に結合されたデータキャッシュユニット１５７４に結合されているデータＴＬＢユニット１５７２を備える。１つの例示的な実施形態では、メモリアクセスユニット１５６４は、ロードユニット、アドレスストアユニット、及びデータストアユニットを備えることができ、これらのそれぞれは、メモリユニット１５７０内のデータＴＬＢユニット１５７２に結合されている。命令キャッシュユニット１５３４は、メモリユニット１５７０内のレベル２（Ｌ２）キャッシュユニット１５７６に更に結合されている。Ｌ２キャッシュユニット１５７６は、１つ又は複数の他のレベルのキャッシュ及び最終的にはメインメモリに結合されている。
【０１０３】
例として、例示的なレジスタリネームアウトオブオーダー発行／実行コアアーキテクチャは、次のようにパイプライン１５００を実施することができる。すなわち、１）命令フェッチ１５３８が、フェッチステージ１５０２及び長さデコードステージ１５０４を実行する；２）デコードユニット１５４０が、デコードステージ１５０６を実行する；３）リネーム／アロケーターユニット１５５２が、アロケーションステージ１５０８及びリネームステージ１５１０を実行する；４）スケジューラユニット（複数の場合もある）１５５６が、スケジュールステージ１５１２を実行する；５）物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）１５５８及びメモリユニット１５７０が、レジスタ読み出し／メモリ読み出しステージ１５１４を実行する；実行クラスター１５６０が、実行ステージ１５１６を実行する；６）メモリユニット１５７０及び物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）１５５８が、ライトバック／メモリ書き込みステージ１５１８を実行する；７）様々なユニットが、例外ハンドリングステージ１５２２に関与することができる；並びに８）リタイアメントユニット１５５４及び物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）１５５８が、コミットステージ１５２４を実行する。
【０１０４】
コア１５９０は、本明細書において説明する命令（複数の場合もある）を含む１つ又は複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンとともに追加された幾つかの拡張を有する）；カリフォルニア州サニーベールのMIPS Technologies社のＭＩＰＳ命令セット；カリフォルニア州サニーベールのARM Holdings社のＡＲＭ命令セット（ＮＥＯＮ等のオプションの追加の拡張を有する）をサポートすることができる。１つの実施形態では、コア１５９０は、パックドデータ命令セットエクステンション（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを備え、それによって、多くのマルチメディアアプリケーションによって用いられる演算をパックドデータを用いて実行することが可能になる。
【０１０５】
コアはマルチスレッド化（並列の２つ以上の組の演算又はスレッドを実行する）をサポートすることができ、タイムスライスマルチスレッド化、同時マルチスレッド化（単一の物理コアが、当該物理コアが同時にマルチスレッド化しているスレッドのそれぞれについて論理コアを提供する）、又はそれらの組合せ（例えば、Ｉｎｔｅｌ（登録商標）のＨｙｐｅｒｔｈｒｅａｄｉｎｇ  ｔｅｃｈｎｏｌｏｇｙ等のタイムスライスフェッチ及びデコード、並びにその後の同時のマルチスレッド化）を含む様々な方法でそれを行うことができることが理解されるべきである。
【０１０６】
レジスタリネームは、アウトオブオーダー実行との関連で説明されているが、レジスタリネームは、インオーダーアーキテクチャにおいても用いることができることが理解されるべきである。プロセッサの図示した実施形態は、別々の命令キャッシュユニット１５３４及びデータキャッシュユニット１５７４並びに共有Ｌ２キャッシュユニット１５７６を備えるが、代替の実施形態は、例えば、レベル１（Ｌ１）内部キャッシュ、又は複数のレベルの内部キャッシュ等の命令及びデータの双方用の単一の内部キャッシュを有することができる。幾つかの実施形態では、システムは、内部キャッシュと、コア及び／又はプロセッサの外部にある外部キャッシュとの組合せを備えることができる。代替的に、キャッシュの全てを、コア及び／又はプロセッサの外部にすることができる。
【０１０７】
具体的な例示的インオーダーコアアーキテクチャ  図１６Ａ及び図１６Ｂは、より具体的な例示的インオーダーコアアーキテクチャのブロック図を示している。このコアは、チップ内の幾つかの論理ブロック（同じタイプ及び／又は異なるタイプの他のコアを含む）のうちの１つである。これらの論理ブロックは、アプリケーションに応じて、或る固定機能ロジック、メモリＩ／Ｏインターフェース、及び他の必要なＩ／Ｏロジックと、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を通じて通信する。
【０１０８】
図１６Ａは、本発明の実施形態による、オンダイ相互接続ネットワーク１６０２への接続と、レベル２（Ｌ２）キャッシュ１６０４のローカルサブセットとを伴ったシングルプロセッサコアのブロック図である。１つの実施形態では、命令デコーダー１６００は、パックドデータ命令セットエクステンションを有するｘ８６命令セットをサポートする。Ｌ１キャッシュ１６０６は、スカラーユニット及びベクトルユニット内へのキャッシュメモリへの低レイテンシーアクセスを可能にする。１つの実施形態（設計を単純化する）では、スカラーユニット１６０８及びベクトルユニット１６１０は、別々のレジスタセット（それぞれ、スカラーレジスタ１６１２及びベクトルレジスタ１６１４）を用い、それらの間で転送されるデータは、メモリに書き込まれ、次いで、レベル１（Ｌ１）キャッシュ１６０６からリードバックされるが、本発明の代替の実施形態は、異なる手法を用いる（例えば、単一のレジスタセットを用いるか、又はライトバック及びリードバックされることなく２つのレジスタファイル間でデータを転送することを可能にする通信パスを備える）ことができる。
【０１０９】
Ｌ２キャッシュ１６０４のローカルサブセットは、プロセッサコアごとに１つの別々のローカルサブセットに分割されたグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ１６０４のそれ自身のローカルサブセットへの直接アクセスパスを有する。プロセッサコアによって読み出されたデータは、当該プロセッサコアのＬ２キャッシュサブセット１６０４にストアされ、他のプロセッサコアがそれら自身のローカルＬ２キャッシュサブセットにアクセスすることと並列に高速にアクセスすることができる。プロセッサコアによって書き込まれたデータは、それ自身のＬ２キャッシュサブセット１６０４にストアされ、必要な場合に他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシーを保証する。リングネットワークは、プロセッサコア、Ｌ２キャッシュ、及び他の論理ブロック等のエージェントがチップ内で互いに通信することを可能にするために双方向である。各リングデータパスは、方向あたり１０１２ビット幅である。
【０１１０】
図１６Ｂは、本発明の実施形態による、図１６Ａにおけるプロセッサコアの一部の拡大図である。図１６Ｂは、Ｌ１キャッシュ１６０４のＬ１データキャッシュ１６０６Ａ部分、並びにベクトルユニット１６１０及びベクトルレジスタ１６１４に関するより詳細な内容を含む。具体的には、ベクトルユニット１６１０は、整数命令、単精度浮動小数点命令、倍精度浮動小数点命令のうちの１つ又は複数を実行する１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ１６２８を参照）である。ＶＰＵは、スウィズルユニット１６２０を用いたレジスタ入力のスウィズルと、数値変換ユニット１６２２Ａ及び１６２２Ｂを用いた数値変換と、メモリ入力に関する複製ユニット１６２４を用いた複製とをサポートする。書き込みマスクレジスタ１６２６は、結果のベクトル書き込みを断定することを可能にする。
【０１１１】
統合メモリコントローラー及び統合グラフィックスを有するプロセッサ  図１７は、本発明の実施形態による、２つ以上のコアを有することができ、統合メモリコントローラーを有することができ、統合グラフィックスを有することができるプロセッサ１７００のブロック図である。図１７における実線のボックスは、単一のコア１７０２Ａと、システムエージェント１７１０と、一組の１つ又は複数のバスコントローラーユニット１７１６とを有するプロセッサ１７００を示している一方、破線のボックスのオプションの追加は、複数のコア１７０２Ａ〜１７０２Ｎと、システムエージェントユニット１７１０内の一組の１つ又は複数の統合メモリコントローラーユニット１７１４と、専用ロジック１７０８とを有する代替のプロセッサ１７００を示している。
【０１１２】
したがって、プロセッサ１７００の種々の実施態様は、１）統合グラフィックス及び／又は科学（スループット）ロジック（１つ又は複数のコアを備えることができる）である専用ロジック１７０８と、１つ又は複数の汎用コア（例えば、汎用インオーダーコア、汎用アウトオブオーダーコア、これらの２つの組合せ）であるコア１７０２Ａ〜１７０２Ｎとを有するＣＰＵと、２）主としてグラフィックス及び／又は科学（スループット）向けの多数の専用コアであるコア１７０２Ａ〜１７０２Ｎを有するコプロセッサと、３）多数の汎用インオーダーコアであるコア１７０２Ａ〜１７０２Ｎを有するコプロセッサとを備えることができる。したがって、プロセッサ１７００は、汎用プロセッサ、例えば、ネットワークプロセッサ若しくは通信プロセッサ等のコプロセッサ又は専用プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループットメニーインテグレーテッドコア（ＭＩＣ）コプロセッサ（３０個以上のコアを備える）、組み込みプロセッサ等とすることができる。このプロセッサは、１つ又は複数のチップ上に実装することができる。プロセッサ１７００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、又はＮＭＯＳ等の複数のプロセス技術のうちの任意のものを用いた１つ若しくは複数の基板の一部とすることができ、及び／又は１つ若しくは複数の基板上に実装することができる。
【０１１３】
メモリ階層は、コア内の１つ又は複数のレベルのキャッシュと、一組の１つ又は複数の共有キャッシュユニット１７０６と、一組の統合メモリコントローラーユニット１７１４に結合された外部メモリ（図示せず）とを含む。一組の共有キャッシュユニット１７０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、若しくは他のレベルのキャッシュ等の１つ又は複数の中間レベルキャッシュ、最終レベルキャッシュ（ＬＬＣ）、及び／又はそれらの組合せを含むことができる。１つの実施形態では、リングベースの相互接続部ユニット１７１２が、統合グラフィックスロジック１７０８、一組の共有キャッシュユニット１７０６、及びシステムエージェントユニット１７１０／統合メモリコントローラーユニット（複数の場合もある）１７１４を相互接続するが、代替の実施形態は、そのようなユニットを相互接続するための任意の数のよく知られた技法を用いることができる。１つの実施形態では、１つ又は複数のキャッシュユニット１７０６とコア１７０２Ａ〜１７０２Ｎとの間にコヒーレンシーが維持される。
【０１１４】
幾つかの実施形態では、コア１７０２Ａ〜１７０２Ｎのうちの１つ又は複数は、マルチスレッド化することができる。システムエージェント１７１０は、コア１７０２Ａ〜１７０２Ｎを連係及び動作させる構成要素を備える。システムエージェントユニット１７１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを備えることができる。ＰＣＵは、コア１７０２Ａ〜１７０２Ｎ及び統合グラフィックスロジック１７０８の電力状態を調整するのに必要なロジック及び構成要素とすることができるか又はそれらを備えることができる。ディスプレイユニットは、１つ又は複数の外部に接続されたディスプレイを駆動するためのものである。
【０１１５】
コア１７０２Ａ〜１７０２Ｎは、アーキテクチャ命令セットの観点で同種のものとすることもできるし、異種のものとすることもできる。すなわち、コア１７０２Ａ〜１７０２Ｎのうちの２つ以上は、同じ命令セットを実行可能とすることができる一方、他のものは、その命令セットのサブセットのみ又は異なる命令セットを実行可能とすることができる。
【０１１６】
例示的なコンピューターアーキテクチャ  図１８〜図２１は、例示的なコンピューターアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバー、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラー、携帯電話、ポータブルメディアプレイヤー、ハンドヘルドデバイス、及び他の様々な電子デバイスについて当該技術分野において知られている他のシステム設計及び構成も適している。概して、本明細書において開示されるようなプロセッサ及び／又は他の実行ロジックを組み込むことができる非常に多くの様々なシステム又は電子デバイスが一般に適している。
【０１１７】
次に図１８を参照すると、本発明の１つの実施形態によるシステム１８００のブロック図が示されている。システム１８００は、コントローラーハブ１８２０に結合された１つ又は複数のプロセッサ１８１０、１８１５を備えることができる。１つの実施形態では、コントローラーハブ１８２０は、グラフィックスメモリコントローラーハブ（ＧＭＣＨ）１８９０及び入力／出力ハブ（ＩＯＨ）１８５０（別々のチップ上に存在することができる）を含む。ＧＭＣＨ１８９０は、メモリと、メモリ１８４０及びコプロセッサ１８４５が結合されたグラフィックスコントローラーとを備える。ＩＯＨ１８５０は、入力／出力（Ｉ／Ｏ）デバイス１８６０をＧＭＣＨ１８９０に結合する。代替的に、メモリ及びグラフィックスコントローラーの一方又は双方は、（本明細書において説明するように）プロセッサ内に統合され、メモリ１８４０及びコプロセッサ１８４５は、プロセッサ１８１０と、ＩＯＨ１８５０を有する単一のチップ内のコントローラーハブ１８２０とに直接結合されている。
【０１１８】
追加のプロセッサ１８１５のオプションの特性が、図１８に破線で示されている。各プロセッサ１８１０、１８１５は、本明細書において説明する処理コアのうちの１つ又は複数を備えることができ、プロセッサ１７００の或るバージョンとすることができる。
【０１１９】
メモリ１８４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、又はこれらの２つの組合せとすることができる。少なくとも１つの実施形態について、コントローラーハブ１８２０は、フロントサイドバス（ＦＳＢ）等のマルチドロップバス、ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＱＰＩ）等のポイントツーポイントインターフェース、又は同様の接続１８９５を介してプロセッサ（複数の場合もある）１８１０、１８１５と通信する。
【０１２０】
１つの実施形態では、コプロセッサ１８４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等のような専用プロセッサである。１つの実施形態では、コントローラーハブ１８２０は、統合グラフィックスアクセラレーターを備えることができる。
【０１２１】
アーキテクチャの特性、マイクロアーキテクチャの特性、熱特性、電力消費特性等を含む多様なメリットメトリック（metrics of merit）の観点から、物理リソース１８１０、１８１５間には様々な相違が存在する可能性がある。
【０１２２】
１つの実施形態では、プロセッサ１８１０は、一般のタイプのデータ処理演算を制御する命令を実行する。命令内には、コプロセッサ命令を組み込むことができる。プロセッサ１８１０は、これらのコプロセッサ命令を、アタッチされたコプロセッサ１８４５によって実行されるべきタイプであるとして認識する。したがって、プロセッサ１８１０は、これらのコプロセッサ命令（又はコプロセッサ命令を表す制御信号）を、コプロセッサ１８４５に向けてコプロセッサバス又は他の相互接続上に発行する。コプロセッサ（複数の場合もある）１８４５は、受信したコプロセッサ命令を受理して実行する。
【０１２３】
次に図１９を参照すると、本発明の一実施形態による第１のより具体的な例示的システム１９００のブロック図が示されている。図１９に示すように、マルチプロセッサシステム１９００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１９５０を介して結合された第１のプロセッサ１９７０及び第２のプロセッサ１９８０を備える。プロセッサ１９７０及び１９８０のそれぞれは、プロセッサ１７００の或るバージョンとすることができる。本発明の１つの実施形態では、プロセッサ１９７０及び１９８０は、それぞれプロセッサ１８１０及び１８１５である一方、コプロセッサ１９３８は、コプロセッサ１８４５である。別の実施形態では、プロセッサ１９７０及び１９８０は、それぞれプロセッサ１８１０及びコプロセッサ１８４５である。
【０１２４】
プロセッサ１９７０及び１９８０は、それぞれ統合メモリコントローラー（ＩＭＣ）ユニット１９７２及び１９８２を備えるものとして示されている。プロセッサ１９７０は、そのバスコントローラーユニットの一部としてポイントツーポイント（Ｐ−Ｐ）インターフェース１９７６及び１９７８も備える。同様に、第２のプロセッサ１９８０も、Ｐ−Ｐインターフェース１９８６及び１９８８を備える。プロセッサ１９７０、１９８０は、ポイントツーポイント（Ｐ−Ｐ）インターフェース回路１９７８、１９８８を用いてＰ−Ｐインターフェース１９５０を介して情報を交換することができる。図１９に示すように、ＩＭＣ１９７２及び１９８２は、プロセッサをそれぞれのメモリ、すなわちメモリ１９３２及びメモリ１９３４に結合している。これらのメモリは、それぞれのプロセッサにローカルにアタッチされたメインメモリの一部分とすることができる。
【０１２５】
プロセッサ１９７０、１９８０はそれぞれ、ポイントツーポイントインターフェース回路１９７６、１９９４、１９８６、１９９８を用いて個々のＰ−Ｐインターフェース１９５２、１９５４を介してチップセット１９９０と情報を交換することができる。チップセット１９９０は、オプションとして、高性能インターフェース１９３９を介してコプロセッサ１９３８と情報を交換することができる。１つの実施形態では、コプロセッサ１９３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等のような専用プロセッサである。
【０１２６】
共有キャッシュ（図示せず）を、いずれかのプロセッサ内に備えることもできるし、双方のプロセッサの外部に備えて、さらに、Ｐ−Ｐ相互接続を介してプロセッサと接続することもでき、その結果、プロセッサが低電力モードになった場合に、いずれかのプロセッサ又は双方のプロセッサのローカルキャッシュ情報を共有キャッシュにストアすることができる。
【０１２７】
チップセット１９９０は、インターフェース１９９６を介して第１のバス１９１６に結合することができる。１つの実施形態では、第１のバス１９１６は、周辺機器相互接続（ＰＣＩ）バス、又はＰＣＩエクスプレスバス若しくは別の第３世代Ｉ／Ｏ相互接続バス等のバスとすることができるが、本発明の範囲は、そのように限定されるものではない。
【０１２８】
図１９に示すように、様々なＩ／Ｏデバイス１９１４を、第１のバス１９１６を第２のバス１９２０に結合するバスブリッジ１９１８とともに第１のバス１９１６に結合することができる。１つの実施形態では、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレーター（例えば、グラフィックスアクセラレーター又はデジタル信号処理（ＤＳＰ）ユニット等）、フィールドプログラマブルゲートアレイ、又は他の任意のプロセッサ等の１つ又は複数の追加のプロセッサ（複数の場合もある）１９１５が第１のバス１９１６に結合されている。１つの実施形態では、第２のバス１９２０は、ローピンカウント（ＬＰＣ）バスとすることができる。様々なデバイスを第２のバス１９２０に結合することができる。これらの様々なデバイスには、例えば、キーボード及び／又はマウス１９２２、通信デバイス１９２７、並びに１つの実施形態では命令／コード及びデータ１９３０を含むことができるディスクドライブ若しくは他のマスストレージデバイス等の記憶ユニット１９２８が含まれる。さらに、オーディオＩ／Ｏ１９２４を第２のバス１９２０に結合することができる。他のアーキテクチャが可能であることに留意されたい。例えば、図１９のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスアーキテクチャ又は他のそのようなアーキテクチャを実装することができる。
【０１２９】
次に図２０を参照すると、本発明の一実施形態による第２のより具体的な例示的なシステム２０００のブロック図が示されている。図１９及び図２０における同様の要素は、同様の参照符号を有し、図１９の或る特定の態様は、図２０の他の態様を分かりにくくしないように図２０から省略されている。
【０１３０】
図２０は、プロセッサ１９７０、１９８０が、それぞれ、統合されたメモリ及びＩ／Ｏの制御ロジック（「ＣＬ」）１９７２及び１９８２を備えることができることを示している。したがって、ＣＬ１９７２、１９８２は、統合メモリコントローラーユニットを備え、Ｉ／Ｏ制御ロジックを備える。図２０は、メモリ１９３２、１９３４がＣＬ１９７２、１９８２に結合されていることだけでなく、Ｉ／Ｏデバイス２０１４も制御ロジック１９７２、１９８２に結合されていることを示している。レガシーＩ／Ｏデバイス２０１５がチップセット１９９０に結合されている。
【０１３１】
次に図２１を参照すると、本発明の一実施形態によるＳｏＣ２１００のブロック図が示されている。図１７における同様の要素は、同様の参照符号を有する。また、破線のボックスは、より高度なＳｏＣ上のオプションの特徴である。図２１において、相互接続ユニット（複数の場合もある）２１０２は、一組の１つ又は複数のコア２０２Ａ〜２０２Ｎ及び共有キャッシュユニット（複数の場合もある）１７０６を備えるアプリケーションプロセッサ２１１０と、システムエージェントユニット１７１０と、バスコントローラーユニット（複数の場合もある）１７１６と、統合メモリコントローラーユニット（複数の場合もある）１７１４と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含むことができる一組の１つ又は複数のコプロセッサ２１２０と、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット２１３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット２１３２と、１つ又は複数の外部ディスプレイに結合するためのディスプレイユニット２１４０とに結合されている。１つの実施形態では、コプロセッサ（複数の場合もある）２１２０は、例えば、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組み込みプロセッサ等のような専用プロセッサを含む。
【０１３２】
本明細書において開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実施手法の組合せで実施することができる。本発明の実施形態は、少なくとも１つのプロセッサと、記憶システム（揮発性及び不揮発性メモリ及び／又は記憶素子を含む）と、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスとを備えるプログラマブルシステム上で実行されるコンピュータープログラム又はプログラムコードとして実施することができる。
【０１３３】
図１９に図示したコード１９３０等のプログラムコードは、入力された命令に適用されて、本明細書において説明した機能を実行し、出力情報を生成することができる。この出力情報は、既知の方法で１つ又は複数の出力デバイスに適用することができる。この適用のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラー、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
【０１３４】
プログラムコードは、処理システムと通信する高水準手続型プログラム言語又はオブジェクト指向型プログラム言語で実施することができる。プログラムコードは、所望の場合には、アセンブリ言語又は機械語で実施することもできる。実際に、本明細書において説明したメカニズムは、どの特定のプログラム言語にも範囲が限定されるものではない。いずれにしても、この言語は、コンパイル型言語又は解釈型言語とすることができる。
【０１３５】
少なくとも１つの実施形態の１つ又は複数の態様は、機械によって読み出されると、当該機械に、本明細書において説明した技法を実行するロジックを作製させるプロセッサ内の様々なロジックを表す機械可読媒体上にストアされた代表的な命令によって実施することができる。「ＩＰコア」として知られているそのような表現は、有形の機械可読媒体上にストアすることができ、様々な顧客又は製造設備に供給して、ロジック又はプロセッサを実際に作製する製造機械にロードすることができる。
【０１３６】
そのような機械可読記憶媒体は、機械又はデバイスによって製造又は形成された物品の非一時的な有形の構成を含むことができるが、これに限定されるものではない。これらの物品は、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、再書込み可能コンパクトディスク（ＣＤ−ＲＷ）、及び光磁気ディスクを含む他の任意のタイプのディスク、読み出し専用メモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気カード若しくは光カード、又は電子命令をストアするのに好適な他の任意のタイプの媒体等の半導体デバイス等の記憶媒体を含む。
【０１３７】
したがって、本発明の実施形態は、命令を含む非一時的な有形の機械可読媒体、又は本明細書において説明した構造、回路、装置、プロセッサ及び／又はシステムの特徴を定義するハードウェア記述言語（ＨＤＬ）等の設計データを含む。そのような実施形態は、プログラム製品と呼ばれる場合もある。
【０１３８】
エミュレーション（バイナリー変換、コードモーフィング等を含む）  場合によっては、命令変換器を用いて、命令をソース命令セットからターゲット命令セットに変換することができる。例えば、命令変換器は、命令を、コアによって処理される１つ又は複数の他の命令に変換（例えば、静的バイナリー変換、動的コンパイルを含む動的バイナリー変換を用いる）、モーフィング、エミュレート、又は別の方法で変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はそれらの組合せで実施することができる。命令変換器は、オンプロセッサ、オフプロセッサ、又は一部分がオンプロセッサ及び一部分がオフプロセッサとすることができる。
【０１３９】
図２２は、本発明の実施形態による、ソフトウェア命令変換器を用いて、ソース命令セット内のバイナリー命令をターゲット命令セット内のバイナリー命令に変換することを対比したブロック図である。図示した実施形態では、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はそれらの様々な組合せで実施することができる。図２２は、高水準言語２２０２によるプログラムを、ｘ８６コンパイラー２２０４を用いてコンパイルしてｘ８６バイナリーコード２２０６を生成することができることを示している。
このｘ８６バイナリーコードは、少なくとも１つのｘ８６命令セットコア２２１６を有するプロセッサが本来的に実行することができるものである。少なくとも１つのｘ８６命令セットコア２２１６を有するプロセッサは、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ結果を達成するために、（１）Ｉｎｔｅｌ  ｘ８６命令セットコアの命令セットの実質的部分、又は（２）少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサ上で実行されることを目的としたアプリケーション又は他のソフトウェアのオブジェクトコードバージョン、を矛盾なく実行又は別の方法で処理することによって、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表している。
ｘ８６コンパイラー２２０４は、追加のリンク処理の有無を問わず、少なくとも１つのｘ８６命令セットコア２２１６を有するプロセッサ上で実行することができるｘ８６バイナリーコード２２０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラーを表している。同様に、図２２は、高水準言語２２０２によるプログラムを、代替の命令セットコンパイラー２２０８を用いてコンパイルして代替の命令セットバイナリーコード２２１０を生成することができることを示している。
この代替の命令セットバイナリーコードは、少なくとも１つのｘ８６命令セットコア２２１４を有しないプロセッサ（例えば、カリフォルニア州サニーベールのMIPS Technologies社のＭＩＰＳ命令セットを実行するコアを有するプロセッサ及び／又はカリフォルニア州サニーベールのARM Holdings社のＡＲＭ命令セットを実行するコアを有するプロセッサ）が本来的に実行することができるものである。命令変換器２２１２は、ｘ８６バイナリーコード２２０６を、ｘ８６命令セットコア２２１４を有しないプロセッサが本来的に実行することができるコードに変換するのに用いられる。この変換されたコードは、代替の命令セットバイナリーコード２２１０と同じである可能性は低い。なぜならば、これを行うことができる命令変換器は、作製が困難であるからである。しかしながら、変換されたコードは、一般的な演算を達成し、代替の命令セットからの命令で構成される。したがって、命令変換器２２１２は、エミュレーション、シミュレーション、又は他の任意のプロセスを通じて、ｘ８６命令セットプロセッサもコアも有しないプロセッサ又は他の電子デバイスがｘ８６バイナリーコード２２０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はそれらの組合せを表している。
【０１４０】
図２、図３Ａ、図３Ｂ、及び図６〜図１４のうちの任意のものについて説明した構成要素、特徴、及び詳細は、オプションとして、図４及び図５のうちの任意のものにおいても用いることができる。その上、装置のうちの任意のものについて本明細書において説明した構成要素、特徴、及び詳細は、オプションとして、実施形態においてそのような装置によって及び／又はそのような装置を用いて実行することができる本明細書において説明した方法のうちの任意のものにおいても用いることができる。
【０１４１】
例示の実施形態  以下の例は、更なる実施形態に関係している。それらの例における細部は、１つ又は複数の実施形態における任意の箇所に用いることができる。
【０１４２】
例１は、少なくとも第１の狭いソースパックドデータオペランド及び狭いデスティネーションオペランドを示すパックドデータ命令をマスクされたパックドデータ演算にマッピングするデコードユニットを備えるプロセッサである。このマスクされたパックドデータ演算は、第１の狭いソースパックドデータオペランドよりも広く当該第１の狭いソースパックドデータオペランドを含む少なくとも第１の広いソースパックドデータオペランドを示すとともに、狭いデスティネーションオペランドよりも広く当該狭いデスティネーションオペランドを含む広いデスティネーションオペランドを示す。このプロセッサは、デコードユニットと結合された実行ユニットも備える。この実行ユニットは、パックドデータ演算マスクを用いて、マスクされたパックドデータ演算を実行する。このパックドデータ演算マスクは、マスクされたパックドデータ演算によってストアされるパックドデータ結果の対応する結果データ要素ごとのマスク要素を含む。上記パックドデータ命令によってストアされないマスクされたパックドデータ演算によってストアされる結果データ要素に対応する全てのマスク要素は、マスクアウトするものである。この実行ユニットは、パックドデータ結果を広いデスティネーションオペランドにストアする。
【０１４３】
例２は、いずれかの先行例のプロセッサを含み、オプションとして、実行ユニットは、広いデスティネーションオペランドに対応するレジスタの幅全体を書き込み、オプションとして、狭いデスティネーションオペランドは、レジスタの幅の一部分のみに対応する。
【０１４４】
例３は、いずれかの先行例のプロセッサを含み、オプションとして、実行ユニットは、パックドデータ命令に関連付けられた演算によって更新される結果データ要素がレジスタの最下位部分と当該レジスタの最上位部分との間の当該レジスタの中間部分のみを占有するパックドデータ結果をストアする。
【０１４５】
例４は、いずれかの先行例のプロセッサを含み、オプションとして、デコードユニットは、第２の狭いソースパックドデータオペランドも示すパックドデータ命令を受信し、オプションとして、デコードユニットは、パックドデータ命令を、第２の狭いソースパックドデータオペランドよりも広く当該第２の狭いソースパックドデータオペランドを含む第２の広いソースパックドデータオペランドも示すマスクされたパックドデータ演算にマッピングする。
【０１４６】
例５は、いずれかの先行例のプロセッサを含み、オプションとして、デコードユニットは、第１の狭いソースパックドデータオペランド及び第２の狭いソースパックドデータオペランドにおける対応するビット位置にない対応しないデータ要素の少なくとも１つの対に対する演算を示すパックドデータ命令を受信し、オプションとして、プロセッサは、マスクされたパックドデータ演算を実行するときに、対応しないデータ要素の対を、実行ユニットによって演算される対応するビット位置に配置する演算を更に実行する。
【０１４７】
例６は、いずれかの先行例のプロセッサを含み、オプションとして、プロセッサは、シフト演算、シャッフル演算、及び置換演算のうちの１つを実行することによって、対応しないデータ要素の対を対応するビット位置に配置する演算を実行する。
【０１４８】
例７は、いずれかの先行例のプロセッサを含み、オプションとして、パックドデータ命令は、パックドデータ演算マスクを示さない。
【０１４９】
例８は、いずれかの先行例のプロセッサを含み、オプションとして、パックドデータ命令は、マスクされたパックドデータ演算を実行するために実行ユニットによって用いられるパックドデータ演算マスクよりも少ないマスク要素を有するパックドデータ演算マスクを示す。
【０１５０】
例９は、いずれかの先行例のプロセッサを含み、オプションとして、実行ユニットは、マスクアウトされたマスク要素に対応する各結果データ要素の値が変更されないパックドデータ結果をストアし、オプションとして、マスクされていないマスク要素に対応する各結果データ要素の値がパックドデータ命令に関連付けられた演算によって更新される。
【０１５１】
例１０は、少なくとも第１の狭いソースパックドデータオペランド及び狭いデスティネーションオペランドを示すパックドデータ命令を受信することを含む、プロセッサにおける方法である。この方法は、パックドデータ命令を、第１の狭いソースパックドデータオペランドよりも広く当該第１の狭いソースパックドデータオペランドを含む少なくとも第１の広いソースパックドデータオペランドを示すとともに、狭いデスティネーションオペランドよりも広く当該狭いデスティネーションオペランドを含む広いデスティネーションオペランドを示すマスクされたパックドデータ演算にマッピングすることも含む。この方法は、マスクされたパックドデータ演算によってストアされるパックドデータ結果の対応する結果データ要素ごとのマスク要素を含むパックドデータ演算マスクを生成することも含む。パックドデータ命令によってストアされないマスクされたパックドデータ演算によってストアされる結果データ要素に対応する全てのマスク要素は、マスクアウトするものである。この方法は、パックドデータ演算マスクを用いてマスクされたパックドデータ演算を実行することも含む。この方法は、パックドデータ結果を広いデスティネーションオペランドにストアすることも含む。
【０１５２】
例１１は、いずれかの先行例の方法を含み、オプションとして、上記パックドデータ結果をストアすることは、広いデスティネーションオペランドに対応するレジスタの幅全体を書き込むことを含み、オプションとして、狭いデスティネーションオペランドは、レジスタの幅の一部分のみに対応する。
【０１５３】
例１２は、いずれかの先行例の方法を含み、オプションとして、上記ストアすることは、パックドデータ命令に関連付けられた演算によって更新される結果データ要素がレジスタの最下位部分と当該レジスタの最上位部分との間の当該レジスタの中間部分のみを占有するパックドデータ結果をストアすることを含む。
【０１５４】
例１３は、いずれかの先行例の方法を含み、オプションとして、上記受信することは、第２の狭いソースパックドデータオペランドも示すパックドデータ命令を受信することを含み、オプションとして、上記マッピングすることは、パックドデータ命令を、第２の狭いソースパックドデータオペランドよりも広く当該第２の狭いソースパックドデータオペランドを含む第２の広いソースパックドデータオペランドも示すマスクされたパックドデータ演算にマッピングすることを含む。
【０１５５】
例１４は、いずれかの先行例の方法を含み、オプションとして、上記受信することは、第１の狭いソースパックドデータオペランド及び第２の狭いソースパックドデータオペランドにおける対応するビット位置にない対応しないデータ要素の少なくとも１つの対に対する演算を示すパックドデータ命令を受信することを含み、オプションとして、この例は、対応しないデータ要素の対を、マスクされたパックドデータ演算によって演算される対応するビット位置に配置する演算を実行することを更に含む。
【０１５６】
例１５は、いずれかの先行例の方法を含み、オプションとして、上記対応しないデータ要素の対を対応するビット位置に配置する演算を実行することは、シフト演算、シャッフル演算、及び置換演算のうちの１つを実行することを含む。
【０１５７】
例１６は、いずれかの先行例の方法を含み、オプションとして、上記受信することは、パックドデータ演算マスクを示さないパックドデータ命令を受信することを含む。
【０１５８】
例１７は、いずれかの先行例の方法を含み、オプションとして、上記受信することは、生成されるパックドデータ演算マスクよりも少ない数のマスク要素を有する第２のパックドデータ演算マスクを示すパックドデータ命令を受信することを含む。
【０１５９】
例１８は、いずれかの先行例の方法を含み、オプションとして、第１の狭いソースパックドデータオペランドは、レジスタにおいて第１の広いソースパックドデータオペランド上にエイリアスされる。
【０１６０】
例１９は、いずれかの先行例の方法を含み、オプションとして、上記ストアすることは、マスクアウトされたマスク要素に対応する各結果データ要素の値が変更されないとともに、オプションとして、マスクされていないマスク要素に対応する各結果データ要素の値がパックドデータ命令に関連付けられた演算によって更新される、パックドデータ結果をストアすることを含む。
【０１６１】
例２０は、相互接続部と、この相互接続部と結合されたプロセッサとを備える、命令を処理するシステムである。このプロセッサは、少なくとも第１の狭いソースパックドデータオペランド及び狭いデスティネーションオペランドを示すパックドデータ命令を、第１の狭いソースパックドデータオペランドを含む少なくとも第１の広いソースパックドデータオペランドを示すとともに、狭いデスティネーションオペランドを含む広いデスティネーションオペランドを示すマスクされたパックドデータ演算にマッピングする第１のユニットを備える。上記プロセッサは、第１のユニットと結合された集積回路部も備える。この集積回路部は、マスクされたパックドデータ演算によってストアされるパックドデータ結果の対応する結果データ要素ごとのマスクビットを含むマスクを用いて、マスクされたパックドデータ演算を実行する。パックドデータ命令によってストアされるデータ要素に対応するマスクビットのみをマスクアウトしないことが可能である。このシステムは、相互接続部と結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）も備える。
【０１６２】
例２１は、例２０のシステムを含み、オプションとして、上記集積回路部は、第１の狭いソースパックドデータオペランドのデータ要素をパックドデータ結果のデータ要素と整列させるデータ再配置演算を更に実行する。
【０１６３】
例２２は、少なくとも第１の狭いソースパックドデータオペランド及び狭いデスティネーションオペランドを示すパックドデータ命令を受信する手段を備えるプロセッサを含む。このプロセッサは、パックドデータ命令を、第１の狭いソースパックドデータオペランドよりも広く当該第１の狭いソースパックドデータオペランドを含む少なくとも第１の広いソースパックドデータオペランドを示すとともに、狭いデスティネーションオペランドよりも広く当該狭いデスティネーションオペランドを含む広いデスティネーションオペランドを示すマスクされたパックドデータ演算にマッピングする手段も備える。このプロセッサは、マスクされたパックドデータ演算によってストアされるパックドデータ結果の対応する結果データ要素ごとのマスク要素を含むパックドデータ演算マスクを生成する手段も備える。パックドデータ命令によってストアされないマスクされたパックドデータ演算によってストアされる結果データ要素に対応する全てのマスク要素は、マスクアウトするものである。
【０１６４】
例２３は、例２２のシステムを含み、オプションとして、第１の狭いソースパックドデータオペランドのデータ要素をパックドデータ結果のデータ要素と整列させる手段を更に備える。
【０１６５】
例２４は、例１０〜１９のいずれかの方法を実行する装置を含む。
【０１６６】
例２５は、例１０〜１９のいずれかの方法を実行する手段を備える装置を含む。
【０１６７】
例２６は、例１０〜１９のいずれかの方法を実行する手段を備えるプロセッサを含む。
【０１６８】
例２７は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、例１０〜１９のいずれかの方法を実行する手段を備える、上記ＤＲＡＭと結合されたプロセッサとを備えるコンピューターシステムを含む。
【０１６９】
例２８は、本明細書において実質的に説明したような方法を実行する装置を含む。
【０１７０】
例２９は、本明細書において実質的に説明したような方法を実行する手段を備える装置を含む。
【０１７１】
この説明及び特許請求の範囲において、「結合された」及び「接続された」という用語が、それらの派生語とともに用いられている。これらの用語は互いに同義語として意図されていないことが理解されるべきである。逆に、特定の実施形態では、「接続された」は、２つ以上の要素が互いに直接物理的又は電気的に接触していることを示すのに用いることができる。「結合された」は、２つ以上の要素が直接物理的又は電気的に接触していることを意味することができる。しかしながら、「結合された」は、２つ以上の要素が互いに直接接触していないが、それでも、互いに協働又は相互作用することも意味することができる。図では、矢印が接続及び結合を示すのに用いられる。
【０１７２】
この説明及び特許請求の範囲において、「ロジック」という用語が用いられている場合がある。ロジックは、本明細書において用いられるとき、ハードウェア、ファームウェア、ソフトウェア、又はそれらの組合せを含むことができる。ロジックの例には、集積回路部、特定用途向け集積回路、アナログ回路、デジタル回路、プログラムされたロジックデバイス、命令を含むメモリデバイス等が含まれる。幾つかの実施形態では、ハードウェアロジックは、他の回路部構成要素とともにトランジスタ及び／又はゲートを潜在的に含むことができる。
【０１７３】
「及び／又は」という用語が用いられている場合がある。「及び／又は」という用語は、本明細書において用いられるとき、一方若しくは他方又は双方を意味する（例えば、Ａ及び／又はＢは、Ａ若しくはＢ、又はＡ及びＢの双方を意味する）。
【０１７４】
上記説明では、説明の目的で、本発明の実施形態の十分な理解を提供するために、多数の具体的な詳細が述べられてきた。しかしながら、これらの具体的な詳細のうちの幾つかがなくても１つ又は複数の他の実施形態を実施することができることが当業者には明らかであろう。説明した特定の実施形態は、本発明を限定するためではなく本発明を例示の実施形態を通じて例示するために提供されている。本発明の範囲は、これらの具体的な例によって決定されるべきではなく、特許請求の範囲のみによって決定されるべきである。それ以外の場合には、よく知られた回路、構造体、デバイス、及び演算は、説明の理解を分かりにくくしないようにブロック図の形式又は細部を伴わずに示されている。
【０１７５】
適切であると考えられる場合には、参照符号、又は参照符号の末端部分が、別段の指定がない限り又は別段明確に明らかでない限り、オプションとして類似の又は同じ特性を有する場合がある対応する要素又は類似する要素を示すために図の間で繰り返されている。複数の構成要素が説明されている幾つかの場合には、それらの構成要素は、単一の構成要素内に組み込むことができる。単一の構成要素が説明されている他の場合には、その単一の構成要素を複数の構成要素に分割することができる。
【０１７６】
様々な演算及び方法が説明されてきた。これらの方法のうちの幾つかは、比較的基本的な形式で流れ図に説明されているが、演算は、オプションとして、これらの方法に追加することができ、及び／又はこれらの方法から除去することができる。加えて、流れ図は、例示の実施形態による演算の特定の順序を示しているが、その特定の順序は例示である。代替の実施形態は、オプションとして演算を異なる順序で実行し、或る特定の演算を組み合わせ、或る特定の演算を重ねる等することができる。
【０１７７】
幾つかの実施形態は、機械可読媒体を備える製造物品（例えば、コンピュータープログラム製品）を含む。この媒体は、機械によって可読な形式で情報を提供する、例えばストアするメカニズムを含むことができる。機械可読媒体は、機械によって実行された場合及び／又は実行されたとき、本明細書において開示された演算、方法、又は技法のうちの１つを当該機械に実行させ及び／又は機械がこれを実行することをもたらすように動作可能な１つ又は複数の命令を提供することができる、すなわち、当該媒体にストアしておくことができる。
【０１７８】
幾つかの実施形態では、機械可読媒体は、有形の及び／又は非一時的な機械可読記憶媒体を含むことができる。例えば、有形の及び／又は非一時的な機械可読記憶媒体は、フロッピー（登録商標）ディスケット、光記憶媒体、光ディスク、光データ記憶デバイス、ＣＤ−ＲＯＭ、磁気ディスク、光磁気ディスク、読み出し専用メモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶デバイス、非一時的メモリ、非一時的データ記憶デバイス等を含むことができる。非一時的な機械可読記憶媒体は、一時的な伝播信号からなるものではない。別の実施形態では、機械可読媒体は、一時的機械可読通信媒体、例えば、搬送波、赤外線信号、デジタル信号等の電気的伝播信号、光学的伝播信号、音響的伝播信号、又は他の形式の伝播信号を含むことができる。
【０１７９】
好適な機械の例には、汎用プロセッサ、専用プロセッサ、命令処理装置、デジタル論理回路、集積回路等が含まれるが、これらに限定されるものではない。好適な機械の更に他の例には、そのようなプロセッサ、命令処理装置、デジタル論理回路、又は集積回路を組み込んだコンピューティングデバイス及び他の電子デバイスが含まれる。そのようなコンピューティングデバイス及び電子デバイスの例には、デスクトップコンピューター、ラップトップコンピューター、ノートブックコンピューター、タブレットコンピューター、ネットブック、スマートフォン、携帯電話、サーバー、ネットワークデバイス（例えば、ルーター及びスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、メディアプレイヤー、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラーが含まれるが、これらに限定されるものではない。
【０１８０】
また、この明細書全体を通じて、例えば、「１つの実施形態」、「一実施形態」、「１つ又は複数の実施形態」というとき、これは、特定の特徴が本発明の実施において含まれ得ることを示すことが理解されるべきである。同様に、この説明において、様々な特徴は、開示を能率化するとともに様々な発明の態様の理解を助ける目的で、単一の実施形態、図、又はその説明においてともにグループ化されることがあることが理解されるべきである。しかしながら、開示のこの方法は、本発明が各請求項において明確に列挙されたものよりも多くの特徴を必要とするという意図を反映するものと解釈されるべきではない。逆に、添付の特許請求の範囲が反映しているように、本発明の態様は、単一の開示された実施形態の全ての特徴よりも少ないものに存し得る。したがって、この詳細な説明に続く特許請求の範囲は、ここでこの詳細な説明に明確に組み込まれ、各請求項は、本発明の個々の実施形態として自立している。
【図１】
2014199663.tif 000003
【図２】
2014199663.tif 000004
【図３Ａ】
2014199663.tif 000005
【図３Ｂ】
2014199663.tif 000006
【図４】
2014199663.tif 000007
【図５】
2014199663.tif 000008
【図６】
2014199663.tif 000009
【図７】
2014199663.tif 000010
【図８】
2014199663.tif 000011
【図９】
2014199663.tif 000012
【図１０】
2014199663.tif 000013
【図１１】
2014199663.tif 000014
【図１２】
2014199663.tif 000015
【図１３】
2014199663.tif 000016
【図１４】
2014199663.tif 000017
【図１５Ａ】
2014199663.tif 000018
【図１５Ｂ】
2014199663.tif 000019
【図１６Ａ】
2014199663.tif 000020
【図１６Ｂ】
2014199663.tif 000021
【図１７】
2014199663.tif 000022
【図１８】
2014199663.tif 000023
【図１９】
2014199663.tif 000024
【図２０】
2014199663.tif 000025
【図２１】
2014199663.tif 000026
【図２２】
2014199663.tif 000027
【外国語明細書】
2014199663000001.pdf