(57)【特許請求の範囲】
【請求項１】
複数のパックドデータレジスタと、
３次元（３Ｄ）モートン座標変換命令を復号する復号ユニットであって、前記３Ｄモートン座標変換命令は複数の３Ｄモートン座標を含むソースパックドデータオペランドを示し、且つ１つ又は複数のデスティネーション記憶位置を示す、復号ユニットと、
前記複数のパックドデータレジスタと前記復号ユニットとに結合された実行ユニットであって、前記実行ユニットは、前記３Ｄモートン座標変換命令を復号する前記復号ユニットに応答して、１つ又は複数の結果パックドデータオペランドを前記１つ又は複数のデスティネーション記憶位置に格納し、前記１つ又は複数の結果パックドデータオペランドは、３つの３Ｄ座標からなる複数のセットを含み、前記３つの３Ｄ座標からなる前記複数のセットのそれぞれは、前記複数の３Ｄモートン座標のうち異なる１つに対応する、実行ユニットと
を備える
プロセッサ。
【請求項２】
前記実行ユニットは、前記３Ｄモートン座標変換命令を復号する前記復号ユニットに応答し、対応する３Ｄモートン座標のビットに３ウェイのビット単位のデインターリーブを実行して、前記３つの３Ｄ座標のうち異なる１つにそれぞれ対応する３つの連続したビットストリングにすることで、前記３つの３Ｄ座標からなる前記複数のセットのそれぞれを生成する、
請求項１に記載のプロセッサ。
【請求項３】
前記実行ユニットは、前記３Ｄモートン座標変換命令を復号する前記復号ユニットに応答して、
所定の３Ｄモートン座標の少なくとも０、３、６、９、１２、１５、及び１８の位置におけるビットの値を、前記所定の３Ｄモートン座標に対応する３つの３Ｄ座標からなる所定のセットのうち第１の３Ｄ座標に対応する第１の連続したビットストリングとして前記結果パックドデータオペランドのいずれかに格納し、
前記所定の３Ｄモートン座標の少なくとも１、４、７、１０、１３、１６、及び１９の位置におけるビットの値を、３つの３Ｄ座標からなる前記所定のセットのうち第２の３Ｄ座標に対応する第２の連続したビットストリングとして前記結果パックドデータオペランドのいずれかに格納し、
前記所定の３Ｄモートン座標の少なくとも２、５、８、１１、１４、１７、及び２０の位置におけるビットの値を、３つの３Ｄ座標からなる前記所定のセットのうち第３の３Ｄ座標に対応する第３の連続したビットストリングとして前記結果パックドデータオペランドのいずれかに格納する、
請求項１に記載のプロセッサ。
【請求項４】
前記実行ユニットは、前記３Ｄモートン座標変換命令を復号する前記復号ユニットに応答して、
所定の３Ｄモートン座標の少なくとも０、３、６、９、１２、１５、１８、２１、２４、２７、３０、及び３３の位置におけるビットの値を、前記所定の３Ｄモートン座標に対応する３つの３Ｄ座標からなる所定のセットのうち第１の３Ｄ座標に対応する第１の連続したビットストリングとして前記結果パックドデータオペランドのいずれかに格納し、
前記所定の３Ｄモートン座標の少なくとも１、４、７、１０、１３、１６、１９、２２、２５、２８、３１、及び３４の位置におけるビットの値を、３つの３Ｄ座標からなる前記所定のセットのうち第２の３Ｄ座標に対応する第２の連続したビットストリングとして前記結果パックドデータオペランドのいずれかに格納し、
前記所定の３Ｄモートン座標の少なくとも２、５、８、１１、１４、１７、２０、２３、２６、２９、３２、及び３５の位置におけるビットの値を、３つの３Ｄ座標からなる前記所定のセットのうち第３の３Ｄ座標に対応する第３の連続したビットストリングとして前記結果パックドデータオペランドのいずれかに格納する、
請求項１に記載のプロセッサ。
【請求項５】
前記実行ユニットは、前記３Ｄモートン座標変換命令を復号する前記復号ユニットに応答して、前記３Ｄモートン座標変換命令により示される３つのデスティネーション記憶位置に３つの結果パックドデータオペランドを格納し、
同じ結果パックドデータオペランドに含まれる３Ｄ座標は、それぞれ同じ次元に対応する、
請求項１に記載のプロセッサ。
【請求項６】
前記ソースパックドデータオペランドを格納するのに用いられるパックドデータレジスタが、前記３つの結果パックドデータオペランドの１つを格納する前記３つのデスティネーション記憶位置の１つとしても用いられるということは、前記３Ｄモートン座標変換命令に暗に示される、
請求項５に記載のプロセッサ。
【請求項７】
前記実行ユニットは、前記３Ｄモートン座標変換命令を復号する前記復号ユニットに応答して、前記３Ｄモートン座標変換命令により示される単一のデスティネーション記憶位置に単一の結果パックドデータオペランドを格納し、
３つの３Ｄ座標の各セットは、対応する３Ｄモートン座標を有する前記ソースパックドデータオペランドのデータ要素と同じ相対位置にある前記単一の結果パックドデータオペランドの異なるデータ要素に格納される、
請求項１に記載のプロセッサ。
【請求項８】
所定の３Ｄモートン座標が前記ソースパックドデータオペランドの３２ビットデータ要素に格納され、
前記所定の３Ｄモートン座標に対応する３つの３Ｄ座標からなる所定のセットの各３Ｄ座標は、７ビットから１０ビットを含む、
請求項１から７のいずれか一項に記載のプロセッサ。
【請求項９】
所定の３Ｄモートン座標が前記ソースパックドデータオペランドの６４ビットデータ要素に格納され、
前記所定の３Ｄモートン座標に対応する３つの３Ｄ座標からなる所定のセットの各３Ｄ座標は、１５ビットから２１ビットを含む、
請求項１から７のいずれか一項に記載のプロセッサ。
【請求項１０】
分岐を予測する分岐予測ユニットと、
前記分岐予測ユニットに結合され、前記３Ｄモートン座標変換命令を含む命令をプリフェッチする命令プリフェッチユニットと、
前記命令プリフェッチユニットに結合され、前記３Ｄモートン座標変換命令を含む命令を格納するレベル１（Ｌ１）命令キャッシュと、
データを格納するＬ１データキャッシュと、
データと前記３Ｄモートン座標変換命令を含む命令とを格納するレベル２（Ｌ２）キャッシュと、
前記Ｌ１命令キャッシュから前記３Ｄモートン座標変換命令をフェッチして前記３Ｄモートン座標変換命令を前記復号ユニットに提供すべく、前記Ｌ１命令キャッシュと前記復号ユニットとに結合された命令フェッチユニットと、
前記複数のパックドデータレジスタをリネームすべく、前記複数のパックドデータレジスタに結合されたレジスタリネームユニットと
をさらに備える、
請求項１から７のいずれか一項に記載のプロセッサ。
【請求項１１】
プロセッサにおける方法であって、
３次元（３Ｄ）モートン座標変換命令を受信する段階であって、前記３Ｄモートン座標変換命令は複数の３Ｄモートン座標を含むソースパックドデータオペランドを示し、且つ１つ又は複数のデスティネーション記憶位置を示す、段階と、
１つ又は複数の結果パックドデータオペランドを前記１つ又は複数のデスティネーション記憶位置に格納する段階であって、前記１つ又は複数の結果パックドデータオペランドは３つの３Ｄ座標からなる複数のセットを含み、前記３つの３Ｄ座標からなる前記複数のセットのそれぞれは、前記複数の３Ｄモートン座標のうち異なる１つに対応する、段階と
を備える
方法。
【請求項１２】
対応する３Ｄモートン座標のビットに３ウェイのビット単位のデインターリーブを実行して、前記３つの３Ｄ座標のうち異なる１つにそれぞれ対応する３つの連続したビットストリングにすることで、前記３つの３Ｄ座標からなる前記複数のセットのそれぞれを生成する段階をさらに備える、
請求項１１に記載の方法。
【請求項１３】
前記１つ又は複数の結果パックドデータオペランドを格納する段階は、前記３Ｄモートン座標変換命令により示される３つのデスティネーション記憶位置に３つの結果パックドデータオペランドを格納する段階を含み、
同じ結果パックドデータオペランドに含まれる３Ｄ座標は、それぞれ同じ次元に対応する、
請求項１１に記載の方法。
【請求項１４】
前記１つ又は複数の結果パックドデータオペランドを格納する段階は、前記３Ｄモートン座標変換命令により示される単一のデスティネーション記憶位置に単一の結果パックドデータオペランドを格納する段階を含み、対応する３Ｄモートン座標を有する前記ソースパックドデータオペランドのデータ要素と同じ相対位置にある前記単一の結果パックドデータオペランドの異なるデータ要素に３つの３Ｄ座標の各セットを格納する段階を含む、
請求項１１に記載の方法。
【請求項１５】
３２ビットデータ要素に格納された所定の３Ｄモートン座標を有する前記ソースパックドデータオペランドを受信する段階をさらに備え、
格納する段階は、前記所定の３Ｄモートン座標に対応する３つの３Ｄ座標からなる所定のセットを格納する段階を含み、各３Ｄ座標は７ビットから１０ビットを含む、
請求項１１に記載の方法。
【請求項１６】
前記１つ又は複数の結果パックドデータオペランドを格納する段階は、
所定の３Ｄモートン座標の少なくとも０、３、６、９、１２、１５、及び１８の位置におけるビットの値を、前記所定の３Ｄモートン座標に対応する３つの３Ｄ座標からなる所定のセットのうち第１の３Ｄ座標に対応する第１の連続したビットストリングとして前記結果パックドデータオペランドのいずれかに格納する段階と、
前記所定の３Ｄモートン座標の少なくとも１、４、７、１０、１３、１６、及び１９の位置におけるビットの値を、３つの３Ｄ座標からなる前記所定のセットのうち第２の３Ｄ座標に対応する第２の連続したビットストリングとして前記結果パックドデータオペランドのいずれかに格納する段階と、
前記所定の３Ｄモートン座標の少なくとも２、５、８、１１、１４、１７、及び２０の位置におけるビットの値を、３つの３Ｄ座標からなる前記所定のセットのうち第３の３Ｄ座標に対応する第３の連続したビットストリングとして前記結果パックドデータオペランドのいずれかに格納する段階とを
含む、
請求項１１に記載の方法。
【請求項１７】
６４ビットデータ要素に格納された所定の３Ｄモートン座標を有する前記ソースパックドデータオペランドを受信する段階をさらに備え、
格納する段階は、前記所定の３Ｄモートン座標に対応する３つの３Ｄ座標からなる所定のセットを格納する段階を含み、各３Ｄ座標は１５ビットから２１ビットを含む、
請求項１１に記載の方法。
【請求項１８】
前記１つ又は複数の結果パックドデータオペランドを格納する段階は、
所定の３Ｄモートン座標の少なくとも０、３、６、９、１２、１５、１８、２１、２４、２７、３０、及び３３の位置におけるビットの値を、前記所定の３Ｄモートン座標に対応する３つの３Ｄ座標からなる所定のセットのうち第１の３Ｄ座標に対応する第１の連続したビットストリングとして前記結果パックドデータオペランドのいずれかに格納する段階と、
前記所定の３Ｄモートン座標の少なくとも１、４、７、１０、１３、１６、１９、２２、２５、２８、３１、及び３４の位置におけるビットの値を、３つの３Ｄ座標からなる前記所定のセットのうち第２の３Ｄ座標に対応する第２の連続したビットストリングとして前記結果パックドデータオペランドのいずれかに格納する段階と、
前記所定の３Ｄモートン座標の少なくとも２、５、８、１１、１４、１７、２０、２３、２６、２９、３２、及び３５の位置におけるビットの値を、３つの３Ｄ座標からなる前記所定のセットのうち第３の３Ｄ座標に対応する第３の連続したビットストリングとして前記結果パックドデータオペランドのいずれかに格納する段階とを
含む、
請求項１１に記載の方法。
【請求項１９】
命令を処理するシステムであって、
相互接続と、
前記相互接続に結合されたプロセッサであって、
前記プロセッサは、複数のデータ要素を含むソースパックドデータオペランドを示し且つ１つ又は複数のデスティネーション記憶位置を示す命令を受信し、前記プロセッサは前記命令に応答して、１つ又は複数の結果パックドデータオペランドを前記１つ又は複数のデスティネーション記憶位置に格納し、
前記１つ又は複数の結果パックドデータオペランドは、前記ソースパックドデータオペランドの各データ要素のための対応する３つのビットストリングのセットを含み、
３つのビットストリングの各セットは、第１のビットストリング、第２のビットストリング、及び第３のビットストリングを含み、
第１のビットストリングのそれぞれは、前記ソースパックドデータオペランドの前記対応するデータ要素の少なくとも０、３、６、９、１２、１５、及び１８の位置におけるビットの値を含み、
第２のビットストリングのそれぞれは、前記ソースパックドデータオペランドの前記対応するデータ要素の少なくとも１、４、７、１０、１３、１６、及び１９の位置におけるビットの値を含み、
第３のビットストリングのそれぞれは、前記ソースパックドデータオペランドの前記対応するデータ要素の少なくとも２、５、８、１１、１４、１７、及び２０の位置におけるビットの値を含む、プロセッサと、
前記相互接続に結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）と
を備える
システム。
【請求項２０】
前記プロセッサは前記命令に応答して、３つの結果パックドデータオペランドを３つのデスティネーション記憶位置に格納し、前記３つの結果パックドデータオペランドのうち１つは、前記第１のビットストリングの全てを格納する、
請求項１９に記載のシステム。
【請求項２１】
命令をコンピュータに実行させるプログラムであって、
前記命令は、複数のデータ要素を含むソースパックドデータオペランドを示し且つ１つ又は複数のデスティネーション記憶位置を示し、前記プログラムは、１つ又は複数の結果パックドデータオペランドを前記１つ又は複数のデスティネーション記憶位置に格納することを含むオペレーションを前記コンピュータに実行させ、
前記１つ又は複数の結果パックドデータオペランドは、前記ソースパックドデータオペランドの各データ要素のための対応する３つのビットストリングのセットを含み、
３つのビットストリングの各セットは、第１のビットストリング、第２のビットストリング、及び第３のビットストリングを含み、
第１のビットストリングのそれぞれは、前記ソースパックドデータオペランドの前記対応するデータ要素の少なくとも０、３、６、９、１２、１５、及び１８の位置におけるビットの値を含み、
第２のビットストリングのそれぞれは、前記ソースパックドデータオペランドの前記対応するデータ要素の少なくとも１、４、７、１０、１３、１６、及び１９の位置におけるビットの値を含み、
第３のビットストリングのそれぞれは、前記ソースパックドデータオペランドの前記対応するデータ要素の少なくとも２、５、８、１１、１４、１７、及び２０の位置におけるビットの値を含む、
プログラム。
【請求項２２】
プロセッサが前記命令に応答して、単一のデスティネーション記憶位置に単一の結果パックドデータオペランドを格納する、
請求項２１に記載のプログラム。
【請求項２３】
請求項１１から１８のいずれか一項に記載の方法を実行する手段を備える
装置。
【請求項２４】
請求項１１から１８のいずれか一項に記載の方法をコンピュータに実行させる
プログラム。
【請求項２５】
請求項２１、２２、２４のいずれか一項に記載のプログラムを格納する、
コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に説明される実施形態は概してプロセッサに関する。特に、本明細書に説明される実施形態は概して、プロセッサ内の異なる座標系の間で変換することに関する。
【背景技術】
【０００２】
コンピュータシステム及び他の電子デバイスは、データ構造に構成されたデータを利用することが多い。データ構造は、データの特定の配列又は構成を表し得る。コンピュータシステムによく用いられる１つの一般的なタイプのデータ構造は、２次元（２Ｄ）配列などの配列である。
【０００３】
図１は２次元（２Ｄ）配列１００の例を示し、ここでは、データ項目（例えば、７、１６、２４、２７などの値）が２つの次元に配列されている。典型的には、２Ｄデータ構造は、表、行列などを表し得る。この説明図では、２つの次元が、第１の次元又はｘ軸１０２、及び第２の次元又はｙ軸１０４によって定められる。ｘ軸及びｙ軸は互いに直交して２Ｄグリッドを規定し、その中にデータ項目が配列されている。２Ｄ配列内のデータ項目は、ｘインデックス及びｙインデックスの値、又は２つの軸に沿った座標によって特定され得る。ｘ座標は、２つの軸が交差する原点から測定されるｘ軸に沿った距離及び／又は相対位置を表し、ｙ座標は、原点から測定されるｙ軸に沿った距離及び／又は相対位置を表す。示された例では、ｘ座標及びｙ座標は、０、１、２、及び３の値を有する。典型的には、座標又はインデックスは、行番号及び列番号を表し得る。例として、１４の値を有するデータ項目は、ｘ−ｙ座標（１、２）によって特定され得、この座標は、列２、行３でデータ項目を示し得る。２Ｄデータ構造が直交座標系を表す他の例が考えられ、座標は直交座標系においてポイントの位置を表し得る。
【０００４】
コンピュータシステム及び他の電子デバイス内で、配列及び他のデータ構造が、メモリ又は他のリニアストレージに格納され得る。２Ｄ及び他の多次元配列をメモリ内に格納するには、様々な方法が可能である。例えば、２Ｄ配列は行優先順序で格納されてよい。行優先順序では、配列の行がメモリ内で連続している。例えば、データ項目は、２７、３、８、１１、９、２４、７、１、８、１４、１６、２、７、１６、４、２０の順にメモリ内に格納され得る。あるいは、２Ｄ配列は列優先順序でメモリ内に格納されてもよい。列優先順序では、配列の列がメモリ内で連続している。例えば、データ項目は、２７、９、８、７、３、２４、１４、１６、８、７、１６、４、１１、１、２、２０の順にメモリ内に格納され得る。
【図面の簡単な説明】
【０００５】
本発明は、以下の説明、及び実施形態を示すのに用いられる添付図面を参照することで最も良く理解され得る。その図面は次の通りである。
【図１】２次元（２Ｄ）配列の例を示す。
【図２】図１の２Ｄ配列にマッピングされたモートン順序曲線の例を示す。
【図３】３Ｄモートン座標変換命令の実施形態を実行するよう動作可能なプロセッサに関する実施形態のブロック図である。
【図４】３Ｄモートン座標変換命令の実施形態を実行するための方法に関する、実施形態のブロックフロー図である。
【図５】３２ビットデータ要素に格納された３Ｄモートン座標を、対応する３つの３Ｄ座標に変換する３Ｄモートン座標変換オペレーションに関する例示的な実施形態のブロック図であり、これらの座標は、３つの結果パックドデータオペランドの対応するデータ要素に格納される。
【図６】６４ビットデータ要素に格納された３Ｄモートン座標を、対応する３つの３Ｄ座標に変換する３Ｄモートン座標変換オペレーションに関する例示的な実施形態のブロック図であり、これらの座標は、３つの結果パックドデータオペランドの対応するデータ要素に格納される。
【図７】３２ビットデータ要素に格納された３Ｄモートン座標を、対応する３つの３Ｄ座標に変換する３Ｄモートン座標変換オペレーションに関する例示的な実施形態のブロック図であり、これらの座標は、単一の結果パックドデータオペランドの対応する３２ビットデータ要素の異なる部分に格納される。
【図８】６４ビットデータ要素に格納された３Ｄモートン座標を、対応する３つの３Ｄ座標に変換する３Ｄモートン座標変換オペレーションに関する例示的な実施形態のブロック図であり、これらの座標は、単一の結果パックドデータオペランドの対応する６４ビットデータ要素の異なる部分に格納される。
【図９】モートン座標変換命令の実施形態を実行するよう動作可能な適切なプロセッサについての、より詳細な例示的な実施形態のブロック図である。
【図１０】座標変換命令の実施形態についてのブロック図である。
【図１１Ａ】本発明の実施形態に従って、汎用ベクトル対応命令フォーマット、及びその命令テンプレートを示すブロック図である。
【図１１Ｂ】本発明の実施形態に従って、汎用ベクトル対応命令フォーマット、及びその命令テンプレートを示すブロック図である。
【図１１Ｃ】本発明の実施形態に従って、汎用ベクトル対応命令フォーマット、及びその命令テンプレートを示すブロック図である。
【図１２Ａ】本発明の実施形態に従って、例示的な特定ベクトル対応命令フォーマット、及びオペコードフィールドを示すブロック図である。
【図１２Ｂ】本発明の実施形態に従って、例示的な特定ベクトル対応命令フォーマット、及びオペコードフィールドを示すブロック図である。
【図１３Ａ】本発明の実施形態に従って、例示的な特定ベクトル対応命令フォーマット、及びそのフィールドを示すブロック図である。
【図１３Ｂ】本発明の実施形態に従って、例示的な特定ベクトル対応命令フォーマット、及びそのフィールドを示すブロック図である。
【図１３Ｃ】本発明の実施形態に従って、例示的な特定ベクトル対応命令フォーマット、及びそのフィールドを示すブロック図である。
【図１３Ｄ】本発明の実施形態に従って、例示的な特定ベクトル対応命令フォーマット、及びそのフィールドを示すブロック図である。
【図１４】レジスタアーキテクチャの実施形態のブロック図である。
【図１５Ａ】インオーダパイプラインの実施形態、及びレジスタリネーミング・アウトオブオーダ発行／実行パイプラインの実施形態を示すブロック図である。
【図１５Ｂ】実行エンジンユニットに結合されたフロントエンドユニットを含むプロセッサコアの実施形態のブロック図であり、両方のユニットはメモリユニットに結合されている。
【図１６Ａ】オンダイ相互接続ネットワークへの接続、及びレベル２（Ｌ２）キャッシュのローカルサブセットを伴う単一のプロセッサコアに関する、実施形態のブロック図である。
【図１６Ｂ】図１６Ａのプロセッサコアの部分拡大図に関する実施形態のブロック図である。
【図１７】１つより多くのコアを有し得、統合メモリコントローラを有し得、統合グラフィックスを有し得るプロセッサの実施形態のブロック図である。
【図１８】コンピュータアーキテクチャの第１の実施形態に関するブロック図である。
【図１９】コンピュータアーキテクチャの第２の実施形態に関するブロック図である。
【図２０】コンピュータアーキテクチャの第３の実施形態に関するブロック図である。
【図２１】コンピュータアーキテクチャの第４の実施形態に関するブロック図である。
【図２２】本発明の実施形態に従って、ソース命令セットのバイナリ命令を、ターゲット命令セットのバイナリ命令に変換するソフトウェア命令変換器の使用に関するブロック図である。
【発明を実施するための形態】
【０００６】
本明細書に開示されるのは、３次元（３Ｄ）モートン座標を３つの３Ｄ座標（例えば、ｘ座標，ｙ座標，及びｚ座標）に変換する３Ｄモートン座標変換命令と、命令を実行するプロセッサと、命令を処理又は実行する際にプロセッサにより実行される方法と、命令を処理又は実行する１つ又は複数のプロセッサを組み込むシステムである。以下の説明には、多くの具体的な詳細が明記されている（例えば、具体的な命令オペレーション、データフォーマット、プロセッサの構成、マイクロアーキテクチャの詳細、オペレーションの順序など）。しかし、これらの具体的な詳細がなくても、実施形態は実施され得る。他の例では、説明の理解をあいまいにしないように、周知の回路、構造、及び技術は詳細に示されてはいない。
【０００７】
１つの課題は、データ項目をメモリ又はリニアストレージに格納する方法が、データ項目を用いるアルゴリズムの性能に著しく影響を与え得るということである。一例を挙げると、データ項目は概してメモリからプロセッサに読み出される必要があるが、メモリからプロセッサに一度に読み出され得るのは限られた数のビットだけである。例えば、プロセッサは、５１２ビットの連続したデータをメモリから一度に（例えば、１つの読み出しオペレーションで）読み出すことしかできないのが一般的である。データ項目が行優先順序で格納されているか、列優先順序で格納されているか、又は何らかの他の順序で格納されているかに応じて、異なるデータ項目が連続した順序で読み出される。例えば、データ項目が行優先順序で格納されている場合、データ項目は、２７、３、８、１１、９、２４などの順に、最大５１２ビットまで読み出され得る。反対に、データ項目が行優先順序で格納されている場合、データ項目は、２７、９、８、７、３、２４などの順に、最大５１２ビットまで読み出され得る。一般的に、メモリからの各読み出しオペレーションは、対象のデータ項目の一部だけを配列から取得することができ得る。例として、特に配列が大きい（例えば、少なくとも５１２ビットより大きい）場合、データ項目が行優先順序で格納されているならば、異なる行でも同じ列にある隣接したデータ（例えば、データ項目２７及び９）を、これらのデータ項目が配列内で互いに隣接しているのに、配列の第１列から同じ読み出しオペレーションで取得することさえ不可能であり得る。データが、列優先順序であり、３Ｄ配列及び４Ｄ配列用のデータストレージ向けである場合にも、類似した状況に直面し得る。
【０００８】
概して、データ項目をメモリ内に配列する方法はまた、データ項目をプロセッサの１つ又は複数のキャッシュ内に効率的にキャッシュする能力に影響を与える。典型的には、キャッシュ内のデータ項目へのアクセスは、メモリ内のデータ項目へのアクセスより低レイテンシである。しかし、対象のデータ項目がキャッシュ内にあったとしても、データ項目が多数の異なるキャッシュラインの中に分散している場合には、十分なキャッシュ利用ができないことが生じやすい場合がある。一般的に、各キャッシュラインは、メモリから読み出された５１２ビットの連続したデータを格納する。データ項目が、データを用いる関連アルゴリズムに効率的な方法でメモリに配列されていない場合、データ項目はキャッシュライン内に散在し得る。深刻なシナリオにおいては、各キャッシュラインは、対象のデータ項目を１つしか保持しない場合がある。反対に、特定のアルゴリズムに非常に効率的な方法でデータ項目がメモリ内に配列されているならば、対象のデータ項目は、各キャッシュラインが複数から多数の対象のデータ項目を含んだ状態で、キャッシュライン内により密に詰め込まれ得る。これが、キャッシュの有効性を改善するのに役立ち得る。同様に、特定のアルゴリズムに非常に効率的な方法でデータ項目がメモリ内に配列されているならば、少なくとも平均では、より多くの対象データ項目が各読み出しオペレーションにおいてプロセッサに読み出され得る。したがって、特定のアルゴリズムに効率的な方法でデータをメモリ内に配列することが可能となるであろう手法が、性能を改善するのに役立ち得る。
【０００９】
他のデータに対して、多次元の局所性又は近接関係を有するデータを処理しやすい様々な異なるタイプのアルゴリズムが存在する。１つの例として、画像処理アルゴリズム（例えば、赤目軽減、圧縮など）は，隣接したピクセル、周囲のピクセル、又はそうでなければ近くのピクセルのグループ用のデータを共に又は同時に処理しやすいことが多い。アルゴリズムは、単一の行又は列内にある全ピクセルのデータ（例えば、行優先配列の場合でも列優先配列の場合でもよいが）ではなく、隣接する画素のブロックのデータに比較的関心があり得る。同様に、多くの映像処理アルゴリズム（例えば、圧縮、映像監視分析、ロボットビジョンなど）では、隣接する画素からなるグループのデータ、及び／又はシーケンシャルな映像フレームのピクセルに対応するデータを共に又は同時に処理することが一般的である。例えば、ピクセルの絶対値ではなく、そのようなピクセル間の差異を格納することで、圧縮が実現されることが多い。多次元の局所性を有するデータも利用しやすい他のアプリケーション、又はアルゴリズムの例をいくつか挙げると、限定されないが、トモグラフィ解析、耐震解析、形状モデリング、行列演算（例えば、行列乗算及び／又は行列転置）、有限要素解析、光線追跡法、フーリエ変換、並列データ構築アプリケーション、及びグラフィックスアプリケーションなどが含まれる。しかし、上述されたように、特に比較的大きい配列が含まれる場合、行優先順序のデータ、列優先順序のデータ、及び様々な他の配列のデータは、多次元の局所性を有するデータを頻繁に利用するアプリケーションに効率的な配列のデータを提供しないことが多い。結果として、多次元の局所性を維持するデータを構成する他の方法が、特定の利点を特定のアプリケーションに提供しやすいであろう。
【００１０】
Ｚ順序曲線は、モートン順序曲線としても知られており、連続した空間充填曲線、又はデータの多次元の局所性又は近接関係を維持しながら、多次元のデータを１次元にマッピングすることができる機能である。すなわち、モートン順序曲線は、２Ｄ空間、３Ｄ空間，４Ｄ空間、又は他の多次元空間内のデータを、データの多次元の局所性を維持する方法で、データの線形リスト又は配列の上にマッピングし得る（例えば、多次元空間内に局所性を有するデータはまた、モートン曲線により提供される線形リスト又は配列内に局所性を有する）。モートン順序曲線に沿ったデータの順序は、Ｚ曲線順序又はモートン順序と呼ばれる。モートン順序は、各ポイントのモートンコード又はモートン座標に反映される。Ｚ順序曲線は、基本ユニットとして４つのポイントを線形に接続するＺ字形状の曲線である。Ｚ順序空間充填曲線全体は、これら複数の又は多くのＺ字形状の曲線又はユニットを共に接続することで形成され、２Ｄ空間、３Ｄ空間，４Ｄ空間、又は他の多次元空間を充填する。
【００１１】
図２は、図１の２Ｄ配列１００にマッピングされたＺ順序曲線又はモートン順序曲線２０６の例を示す。示されるように、複数のＺ字形状の曲線又はユニット（この例では４つ）が、２Ｄ配列内の全てのポイントを通過又は充填すべく線形配列内で共に接続され得る。この例では、２Ｄ配列内に１６個のデータ項目があるので、４つのポイントをそれぞれ有する４つのＺ字形状のユニットが、１６個のデータ項目の２Ｄ配列を完全に通過する。この説明図では、座標は１０進数表記（例えば、１，２，３など）で示されている。座標の同等の２進表現２０７がまた、１０進数の座標と並んで括弧にくくられて示されている（例えば、１０、１１）。例として、１０進数の座標値２は、２進数のインデックス値「１０」と同等である。
【００１２】
モートン順序曲線を配列にマッピングすることは、配列のポイント又はデータ項目のモートンコード又は座標２０８を決定することを含む。モートン順序曲線に沿った個々のポイントのモートン座標は、複数の多次元座標の２進表現からなるビットを固定パターンにインターリーブすることで計算され得る。例えば、ｘ座標の第１及び第２のビットがｘ１及びｘ２とそれぞれ表される場合、且つｙ座標の第１及び第２のビットがｙ１及びｙ２とそれぞれ表される場合、あるポイントのモートン座標は、これらのビットをｘ１ｙ１ｘ２ｙ２の順序にインターリーブすることで計算され得る。さらに説明すると、そのポイントのモートン座標（ｘ＝１、ｙ＝０）は、これらの座標の２進表現からなるビット（すなわち、０１、００）をインターリーブすることで求めることができ、値「０００１」というモートン座標２０８を得る。同様に、３Ｄ及び４Ｄでは、３Ｄモートン座標又は４Ｄモートン座標は、３つの座標及び４つの座標の２進表現からなるビットをそれぞれインターリーブすることで求められ得る。反対に、複数の多次元座標の２進表現を計算することは、モートン座標のビットを別々の座標にする逆方向の固定デインターリーブを必要とする。例えば、モートン座標ｘ１ｙ１ｘ２ｙ２は、ビットｘ１ｙ１ｘ２ｙ２をデインターリーブすることでｘ座標及びｙ座標の２進表現に変換され、ｘ座標をｘ１ｘ２として、ｙ座標をｙ１ｙ２として生成し得る。さらに説明すると、モートン座標「０００１」は、２進表現のｘ座標「０１」及びｙ座標「００」に変換され得る。同様に、３Ｄ及び４Ｄでは、２進表現の３つ又は４つの異なる座標は、３Ｄモートン座標又は４Ｄモートン座標のビットをデインターリーブすることで求められ得る。
【００１３】
データ内の多次元の局所性を表す能力に部分的に起因して、特定のタイプのアプリケーションに関する性能を改善するのに役立つべく、２Ｄ配列、３Ｄ配列、又は４Ｄ配列が、対応する２Ｄモートン順序表現、３Ｄモートン順序表現、又は４Ｄモートン順序表現に再配列され得る。例えば、アプリケーションがデータを処理する前に、データは２Ｄ配列、３Ｄ配列、又は４Ｄ配列から、対応する２Ｄモートン順序表現、３Ｄモートン順序表現、又は４Ｄモートン順序表現にメモリ内で再配列され得る。そのアプリケーションがデータを処理した後、２Ｄモートン順序表現、３Ｄモートン順序表現、又は４Ｄモートン順序表現を２Ｄ配列、３Ｄ配列、又は４Ｄ配列に戻すよう変換することが好ましい場合がある。他のシナリオでは、データは最初に２Ｄモートン順序表現、３Ｄモートン順序表現、又は４Ｄモートン順序表現で構成され、性能を改善すべく又は他の理由により、２Ｄ配列、３Ｄ配列、又は４Ｄ配列に再配列され得る。いずれにしても、モートン順序配列と、多次元配列及び／又は多次元空間との間で変換することが好ましいことが多い。そのような変換は一般的に、計算集約型になりやすい。そのような変換を加速することができる命令は、性能を改善するのに役立ち得る。
【００１４】
図３は、３Ｄモートン座標変換命令３１２の実施形態を実行するよう動作可能なプロセッサ３１０の実施形態に関するブロック図である。実施形態によっては、プロセッサは汎用プロセッサ（例えば、デスクトップ、ラップトップ、又は他のコンピュータに用いられるタイプの汎用マイクロプロセッサ又は中央処理装置（ＣＰＵ））でよい。あるいは、プロセッサは専用プロセッサでもよい。適切な専用プロセッサの例には、限定されないが、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックスプロセッサ、コプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、及びコントローラ（例えば、マイクロコントローラ）が含まれる。プロセッサは、様々な複合命令セット計算（ＣＩＳＣ）アーキテクチャ、縮小命令セット計算（ＲＩＳＣ）アーキテクチャ、超長命令語（ＶＬＩＷ）アーキテクチャ、ハイブリッドアーキテクチャ、又は他のタイプのアーキテクチャのうちいずれかを有してよく、あるいは異なるアーキテクチャの組み合わせを有してもよい（例えば、異なるコアが異なるアーキテクチャを有してよい）。
【００１５】
動作中に、プロセッサ３１０は３Ｄモートン座標変換命令３１２を受信してよい。例えば命令は、相互接続しているメモリからフェッチされてよく、又は別の方法でそこから受信されてもよい。命令は、マクロ命令、アセンブリ言語命令、機械語命令、あるいはプロセッサの命令セットの制御信号又は他の命令を表してよい。
【００１６】
再度図３を参照すると、プロセッサは、復号ユニット又はデコーダ３１４を含む。復号ユニットは、３Ｄモートン座標変換命令を受信して復号してよい。３Ｄモートン座標変換命令は、プロセッサの命令セットの一部であってよい。復号ユニットは、１つ又は複数の比較的低水準の命令又は制御信号（例えば、１つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、復号命令、又は制御信号など）を出力してよく、この命令又は制御信号は、比較的高水準の３Ｄモートン座標変換命令を反映する、表す、及び／又はそこから得られる。復号ユニットは、限定されないが、マイクロコードリードオンリメモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、及び復号ユニットを実装するのに適した他のメカニズムを含む様々な異なるメカニズムを用いて実装されてよい。
【００１７】
実施形態によっては、３Ｄモートン座標変換命令が復号ユニットに直接提供される代わりに、命令エミュレータ、トランスレータ、モーファ、インタプリタ又は他の命令変換モジュールが任意に用いられてよい。様々なタイプの適切な命令変換モジュールが、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせを使って実装されてよい。実施形態によっては、命令変換モジュールは、例えば、別個のダイ上、及び／又はメモリ内など、プロセッサの外部に設けられてよい（例えば、スタティック、ダイナミック、又はランタイムエミュレーションモジュールとして）。例として命令変換モジュールは、３Ｄモートン座標変換命令（第１の命令セットでよい）を受信してよく、３Ｄモートン座標変換命令を１つ又は複数の対応する中間命令あるいは制御信号（第２の異なる命令セットでよい）にエミュレーションしてよく、翻訳してよく、モーフィングしてよく、解釈してよく、又は別の方法で変換してよい。第２の命令セットの１つ又は複数の中間命令又は制御信号は復号ユニットに提供されてよく、復号ユニットは、１つ又は複数の中間命令又は制御信号を、プロセッサのネイティブハードウェア（例えば、１つ又は複数の実行ユニット）が実行可能な１つ又は複数の低水準の命令又は制御信号に復号してよい。
【００１８】
再度図３を参照すると、プロセッサはまた、パックドデータレジスタ３１８のセットを含む。パックドデータレジスタのそれぞれは、パックドデータ、ベクトルデータ、又は単一命令・複数データ（ＳＩＭＤ）のデータを格納するよう動作可能なオンダイの記憶位置を表し得る。ＳＩＭＤアーキテクチャでは、パックドデータ命令、ベクトル命令、又はＳＩＭＤ命令が、複数のデータ要素又は複数の組のデータ要素を同時に又は並列に処理し得る。プロセッサは、複数のオペレーションを同時に又は並列に実行するための、パックドデータ命令に対応する並列実行ハードウェアを有してよい。複数のデータ要素は、パックドデータ又はベクトルデータとして１つのレジスタ又はメモリ位置内にパックされてよい。パックドデータでは、レジスタ又は他の記憶位置のビットは、一連のデータ要素に論理的に分割されてよい。例えば、２５６ビット幅のパックドデータレジスタは、４個の６４ビット幅のデータ要素、８個の３２ビットデータ要素、１６個の１６ビットデータ要素などを有してよい。データ要素のそれぞれは、別々の個々のデータ（例えば、ピクセル色、座標など）を表してよく、他のものとは別々に及び／又は別個に影響され得る。パックドデータレジスタは、アーキテクチャ的に可視なレジスタ又はアーキテクチャレジスタを表してよく、これらは、ソフトウェア及び／又はプログラマに可視であり、及び／又は、オペランドを特定するためにプロセッサの命令セットの命令によって示されるレジスタである。これらのアーキテクチャレジスタは、所定のマイクロアーキテクチャ内の他の非アーキテクチャレジスタ（例えば、一時レジスタ、リオーダバッファ、リタイアメントレジスタなど）と対比される。パックドデータレジスタは、公知技術を用いて異なる方法で異なるマイクロアーキテクチャに実装されてよく、いかなる特定のタイプの設計にも限定されない。適切なタイプのレジスタの例には、限定されないが、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられる物理レジスタ、及びこれらの組み合わせが含まれる。
【００１９】
実施形態によっては、命令は、複数の３Ｄモートン座標を含むソースパックドデータオペランド３２０を（例えば、１つ又は複数のフィールド又はビットのセットを通じて）明示的に指定しても、別の方法で示してもよく（例えば、暗黙に示してもよい）、あるいは、１つ又は複数の結果パックドデータオペランド３２４が格納される１つ又は複数のデスティネーション記憶位置を指定しても、別の方法で示してもよい。１つの例として、命令は、ソースオペランド及び結果オペランドのうち１つ又は複数用のレジスタ、メモリ位置、又は他の記憶位置を指定するためのオペランド指定フィールドを有してよい。あるいは、これらのオペランドのうち１つ又は複数は、任意で、命令に対して暗黙的（例えば、命令のオペコードに対して暗黙的）でよい。別の選択肢として、ソースオペランド用に用いられる記憶位置はまた、結果オペランド用として再利用されてよい（例えば、同じ記憶位置を最初はソースオペランド用に、その後は結果オペランド用に用いることは、命令に対して暗黙的でよい）。示されるように、実施形態によっては、ソースパックドデータオペランド３２０は任意で、第１のパックドデータレジスタに格納されてよい。さらに示されるように、実施形態によっては、１つ又は複数の結果パックドデータオペランド３２４は、１つ又は複数のパックドデータレジスタに格納されてよい。あるいは、実施形態によっては、ソースパックドデータオペランドに用いられるパックドデータレジスタが、結果パックドデータオペランドを格納するのに任意で再利用されてよい。１つの態様において、ソース／デスティネーションレジスタが、ソースオペランド及び結果オペランドの両方に用いられると暗黙に又は黙示的に理解され得る。さらに、メモリ位置又は他の記憶位置が、これらのオペランドのうち１つ又は複数のために任意で用いられ得るので、パックドデータレジスタの使用は必須ではない。
【００２０】
再度図３を参照すると、実行ユニット３１６は、復号ユニット３１４及びパックドデータレジスタ３１８に結合されている。実行ユニットは、１つ又は複数の復号された又は別の方法で変換された命令又は制御信号を受信してよく、これらは３Ｄモートン座標変換命令３１２を表す、及び／又は３Ｄモートン座標変換命令３１２から得られる。実行ユニットはまた、複数の３Ｄモートン座標を含むソースパックドデータオペランド３２０を受信してよい。実行ユニットは、３Ｄモートン座標変換命令に応答して、及び／又は３Ｄモートン座標変換命令の結果として（例えば、当該命令から復号される１つ又は複数の命令又は制御信号に応答して）、当該命令により示される１つ又は複数のデスティネーション記憶位置に１つ又は複数の結果パックドデータオペランド３２４を格納するよう動作可能である。実施形態によっては、１つ又は複数の結果パックドデータオペランドは、３つの３Ｄ座標からなる複数のセットを含んでよい。実施形態によっては、３つの３Ｄ座標は、３Ｄ空間、３Ｄ配列、又は他の３Ｄデータ構造のｘ座標，ｙ座標，及びｚ座標を表してよい。ｘ、ｙ、及びｚは、３つの異なる次元を指定するのに本明細書では広く用いられており、３Ｄ空間であるこれらの次元に限定されるのではなく、関心のあるその他の所望の特性（例えば、圧力、時間、温度など）を表してもよい。３Ｄ座標のセットのそれぞれ（例えば、ｘ座標、ｙ座標、ｚ座標の各セット）は、複数の３Ｄモートン座標の異なる１つに対応してよい。実施形態によっては、その結果は、図５〜図８で示され説明されるもののうちいずれであってもよいが、本発明の範囲はそのように限定されてはいない。
【００２１】
実施形態によっては、命令は、各３Ｄモートン座標のビットについて、３通りのビット単位の固定デインターリーブを実行ユニットに実行させてよい。例えば、１番目のビットから始まる所定のモートン座標の３ビットごとの値は、対応する第１の座標（例えば、ｘ座標）として共に連結されて１つ又は複数の結果パックドデータオペランドに格納されてよく、２番目のビットから始まる所定のモートン座標の３ビットごとの値は、対応する第２の座標（例えば、ｙ座標）として共に連結されて１つ又は複数の結果パックドデータオペランドに格納されてよく、３番目のビットから始まる所定のモートン座標の３ビットごとの値は、対応する第３の座標（例えば、ｚ座標）として共に連結されて１つ又は複数の結果パックドデータオペランドに格納されてよい。３ビットの幅、並びに０ビット、１ビット、及び２ビットのオフセットがあることに留意されたい。さらに説明すると、実行ユニットは、少なくとも０、３、６、９、１２、１５、及び１８の位置（並びに、実施形態によっては任意で２１、２４、２７の位置のうち１つ又は複数も）におけるビットの値を、所定の３Ｄモートン座標に対応する３Ｄ座標のセットの第１の３Ｄ座標（例えば、ｘ座標）に対応する連続した最下位ビットストリングに格納してよい。同様に、実行ユニットは、少なくとも１、４、７、１０、１３、１６、及び１９の位置（並びに、実施形態によっては任意で２２、２５、２８の位置のうち１つ又は複数も）におけるビットの値を、３Ｄ座標の対応するセットの第２の３Ｄ座標（例えば、ｙ座標）に対応する連続した最下位ビットストリングに格納してよい。同じく、実行ユニットは、少なくとも２、５、８、１１、１４、１７、及び２０の位置（並びに、実施形態によっては任意で２３、２６、２９の位置のうち１つ又は複数も）におけるビットの値を、３Ｄ座標の対応するセットの第３の３Ｄ座標（例えば、ｚ座標）に対応する連続した最下位ビットストリングに格納してよい。
【００２２】
実施形態によっては、３つの結果パックドデータオペランドが、座標変換命令により示される対応する３つのデスティネーション記憶位置（例えば、パックドデータレジスタ）に格納されてよい。実施形態によっては、３つの結果パックドデータオペランドのそれぞれは、同じ次元に全て対応する複数の３Ｄ座標（例えば、第１の結果オペランドの全てのｘ座標、第２の結果オペランドの全てのｙ座標、第３の結果オペランドの全てのｚ座標）を任意で含んでよい。あるいは、単一の結果パックドデータオペランドが、座標変換命令により示される単一のデスティネーション記憶位置（例えば、単一のパックドデータレジスタ）に任意で格納されてもよい。実施形態によっては、３つの３Ｄ座標（例えば、ｘ座標、ｙ座標、及びｚ座標）の各セットは、対応する３Ｄモートン座標と同じ相対位置にある単一のデータ要素に任意で格納されてよい（例えば、ｘ、ｙ、ｚ座標のタプルが単一の３２ビット結果データ要素に任意で格納されてよい）。
【００２３】
実行ユニット及び／又はプロセッサは、特定又は特殊なロジック（例えば、トランジスタ、集積回路、又はファームウェア（例えば、不揮発性メモリに格納される命令）と組み合わされる可能性のある他のハードウェア、及び／又はソフトウェア）を含んでよく、当該ロジックは、３Ｄモートン座標変換命令を実行するよう動作可能である、及び／又は、３Ｄモートン座標変換命令に応答して及び／又は３Ｄモートン座標変換命令の結果として（例えば、３Ｄモートン座標変換命令から復号された１つ又は複数の命令又は制御信号に応答して）、その結果を格納する。例として、実行ユニットは、ロジックユニット、算術ロジックユニットなどを含んでよい。実施形態によっては、実行ユニットは、３通りのビット単位の固定デインターリーブを実行するマルチプレクサを利用してよい。他の実施形態では、様々な異なるタイプのマスク処理及び論理演算が、３通りのビット単位の固定デインターリーブを実行するのに用いられてよい。
【００２４】
説明をあいまいにしないように、比較的簡単なプロセッサ３１０が示され、説明されている。しかし、プロセッサは他の構成要素を任意で含んでよい。そのような構成要素の可能性のある例には、限定されないが、図９及び／又は図１６Ａ〜１９のいずれかのうちのいずれかに示され説明される構成要素が含まれる。様々な異なる実施形態が、そのような構成要素の様々な異なる組み合わせ及び構成を含んでよい。そのような構成要素は、それぞれのオペレーションに従って動作できるようにすべく、互いに結合されてよい。実施形態によっては、構成要素の全てが少なくとも１つのコア、いくつかのコア、コアのサブセット、又はプロセッサのコア全てに含まれてよい。様々な実施形態では、プロセッサは、少なくとも１つ、２つ、４つ、８つ、１６個、３２個、又はさらに多くのコアを有してよい。
【００２５】
図４は、３Ｄモートン座標変換命令の実施形態を実行する方法４３０に関する実施形態のブロックフロー図である。様々な実施形態において、本方法はプロセッサ、命令処理装置、又は他のデジタルロジックデバイスによって実行されてよい。実施形態によっては、図４の方法は、図３のプロセッサによって、及び／又はその内部で実行されてよい。図３のプロセッサについて、本明細書で説明される構成要素、機能、及び特定の任意の詳細はまた、図４の方法に任意で適用される。代わりに、図４の方法が、同種の又は異なるプロセッサ又は装置によって、及び／又はその内部で実行されてよい。さらに、図３のプロセッサは、図４の方法と同じ方法、同様の方法、又は異なる方法を実行してもよい。
【００２６】
本方法は、ブロック４３２において３Ｄモートン座標変換命令を受信する段階を含む。様々な局面において、命令はプロセッサ又はその一部（例えば、命令フェッチユニット、復号ユニット、バスインタフェースユニットなど）で受信されてよい。様々な局面において、命令は、オフプロセッサ及び／又はオフダイソース（例えば、メモリ、相互接続など）から、又はオンプロセッサ及び／又はオンダイソース（例えば、命令キャッシュ、命令キューなど）から受信されてよい。３Ｄモートン座標変換命令は、複数の３Ｄモートン座標を含むソースパックドデータオペランドを指定するか、又は別の方法でそれを示してよく、且つ１つ又は複数のデスティネーション記憶位置を指定するか、又は別の方法でそれを示してもよい。
【００２７】
ブロック４３４において、１つ又は複数の結果パックドデータオペランドは、３Ｄモートン座標変換命令に応答して、及び／又は３Ｄモートン座標変換命令の結果として、１つ又は複数のデスティネーション記憶位置に格納されてよい。実施形態によっては、その結果は、３つの３Ｄ座標からなる複数のセットを含んでよい。３次元座標のセットのそれぞれは、３次元モートン座標の異なる１つに対応する。実施形態によっては、ソースパックドデータオペランド及び１つ又は複数の結果パックドデータオペランドは、図５〜図８のオペランドのいずれであってもよいが、本発明の範囲はそのように限定されてはいない。
【００２８】
示される方法は、アーキテクチャ上のオペレーション（例えば、ソフトウェアの観点から可視のもの）を含む。他の実施形態において、本方法は、１つ又は複数のマイクロアーキテクチャ上のオペレーションを任意で含んでよい。例として、命令はプリフェッチされ、命令キャッシュに格納され、命令フェッチユニットによってフェッチされ、復号され、スケジューリングされてよく、ソースオペランドはアクセスされ、他の命令に対してアウトオブオーダに実行されてよく、実行ユニットは命令を実行するためにマイクロアーキテクチャ上のオペレーションを実行してよい、など。
【００２９】
図５は、ソースパックドデータオペランド５２０の異なる３２ビットデータ要素にそれぞれ格納される３Ｄモートン座標（ｍ）を、対応する３つの３Ｄ座標（ｘ、ｙ、及びｚ）に変換する３Ｄモートン座標変換オペレーション５４０の例示的な実施形態を示すブロック図であり、対応する３つの３Ｄ座標は、３つの結果パックドデータオペランド５４２、５４４、５４６の異なる１つの対応する３２ビットデータ要素にそれぞれ格納される。このオペレーションは、３つの３Ｄ座標命令への３Ｄモートン座標変換に関する例示的な実施形態に応じて実行されてよい。
【００３０】
その命令は、ソースパックドデータオペランド５２０を指定又は別の方法で示してよい。ソースパックドデータオペランドは、複数の３Ｄモートン座標（ｍ）を有する。３Ｄモートン座標のそれぞれは、ソースパックドデータオペランドの異なる３２ビットデータ要素に格納されている。特定の例示された実施形態において、ソースパックドデータオペランドは、１６個の３２ビットデータ要素を有する５１２ビットのソースパックドデータオペランドであるが、本発明の範囲はそのように限定されてはいない。１６個の３２ビットデータ要素は、対応する１６個の３Ｄモートン座標（ｍ１からｍ１６）を含む。他の実施形態では、他の幅のソースパックドデータオペランド、及び／又は他の数の３Ｄモートン座標が任意で用いられてよい。例えば、様々な実施形態において、ソースパックドデータオペランドの幅は、６４ビット、１２８ビット、２５６ビット、５１２ビット、又は１０２４ビットでもよいが、本発明の範囲はそのように限定されてはいない。この例示的な実施形態では、データ要素は３２ビットデータ要素であるが、本発明の範囲はそのように限定されてはいない。例えば、６４ビットデータ要素など、他のサイズのデータ要素も適している。ソースパックドデータオペランド内のデータ要素及び／又は３Ｄモートン座標の数字は、データ要素のそれぞれのビット幅で分割されたソースパックドデータオペランドのビット幅になり得る。様々な実施形態において、少なくとも２個、少なくとも４個、少なくとも８個、少なくとも１６個、少なくとも３２個、又は３２個より多くのデータ要素及び／又は３Ｄモートン座標がソースパックドデータオペランドに存在してもよい。
【００３１】
この例示的な実施形態では、３つの結果パックドデータオペランド５４２、５４４、５４６が（例えば、実行ユニット５１６によって）生成され、命令に応答して格納されてよい。具体的には、第１の結果パックドデータオペランド５２０、第２の結果パックドデータオペランド５４４、及び第３の結果パックドデータオペランド５４６が生成されてよい。これら３つの結果パックドデータオペランドは、対応する３つのデスティネーション記憶位置に格納されてよく、これらのデスティネーション記憶位置は命令によって指定されてよく、又は別の方法で示されてよい。様々な実施形態において、これらのデスティネーション記憶位置は、パックドデータレジスタ、メモリ位置、他の記憶位置、又はそれらの組み合わせであってよい。
【００３２】
３つの結果パックドデータオペランドは、複数の３Ｄモートン座標から変換された３つの３Ｄ座標の複数のセットを含む。具体的には、３つの結果パックドデータオペランドは、ソースパックドデータオペランドの３Ｄモートン座標の数と同じ数の３つの３Ｄ座標からなるセットを含む。３Ｄモートン座標のそれぞれは、（例えば、オペランド内の同じ相対ビット位置にある）結果パックドデータオペランドの３つの３Ｄ座標からなる別の対応するセットに対応し、またそれに変換されてよい。例えば、ソースパックドデータオペランドの最下位（右端）３２ビットデータ要素にある３Ｄモートン座標（ｍ１）は、第１の結果パックドデータオペランドの最下位（右端）３２ビットデータ要素にある第１の対応する３Ｄ座標（ｘ１）、第２の結果パックドデータオペランドの最下位３２ビットデータ要素にある第２の対応する３Ｄ座標（ｙ１）、及び第３の結果パックドデータオペランドの最下位３２ビットデータ要素にある第３の対応する３Ｄ座標（ｚ１）に変換されてよい。同様に、ソースパックドデータオペランドの最上位（左端）３２ビットデータ要素にある３Ｄモートン座標（ｍ１６）は、第１の結果パックドデータオペランドの最上位３２ビットデータ要素にある第１の対応する３Ｄ座標（ｘ１６）、第２の結果パックドデータオペランドの最上位３２ビットデータ要素にある第２の対応する３Ｄ座標（ｙ１６）、及び第３の結果パックドデータオペランドの最上位３２ビットデータ要素にある第３の対応する３Ｄ座標（ｚ１６）に変換されてよい。他の全ての座標が同様に又は類似して変換されてよい。アルゴリズム全体の観点から効率性をうまく利用するために、多くの場合、命令／オペレーションが同じタイプの座標を同じ結果パックドデータオペランドに（例えば、全てのｘ座標を１つの結果パックドデータオペランドに、全てのｙ座標を別の結果パックドデータオペランドに、そして全てのｚ座標をさらに別の結果パックドデータオペランドに）格納してよいことに留意されたい。ただし、これは必須ではない。
【００３３】
前述したように、３つの３Ｄ座標からなるセットのそれぞれは、対応する３Ｄモートン座標のビットに、固定した３通りのビット単位のデインターリーブを実行して、３つの３Ｄ座標のうち異なる１つにそれぞれ対応する３つの連続したビットストリングにすることで、対応する３Ｄモートン座標から生成されてよい。示された例示的な実施形態では、３Ｄモートン座標（ｍ）はそれぞれ３０ビットであり、対応する３つの３Ｄ座標（ｘ、ｙ、及びｚ）の各々はそれぞれ１０ビットであるが、本発明の範囲はそのように限定されてはいない。１０ビットの３つのセットはそれぞれ、モートン座標として単一の３２ビットデータ要素に入ることができる最大の同一セットサイズである（すなわち、１０＋１０＋１０＝３０、３２−３０＝２）。他の実施形態において、結果パックドデータオペランドの３つの３Ｄ座標のそれぞれは、７ビット、８ビット、９ビット、又は１０ビットといった同じ数のビットを用いて表され得、複数の３Ｄモートン座標のそれぞれは、その数のビットの３倍になり得る。多くの用途では、より多くの座標系を表すことができるように、３つの３Ｄ座標のビットの数は９ビット又は１０ビットになる。
【００３４】
３２ビットソースデータ要素（ＳＲＣ１）に格納された所定の３Ｄモートン座標（例えば、ｍ１）を対応する３つの１０ビット３Ｄ座標（ｘ１、ｙ１、ｚ１）に変換し、それぞれが別の対応する結果（ＲＥＳ１、ＲＥＳ２、ＲＥＳ３）のデータ要素に格納されるオペレーションが、以下のように表され得る。ここで、「０：２７：３」の中の「３」は、３ビットごとにビットを飛び越していくことを表す。
【数１】
0006696674.tif 000002
【００３５】
これが意味するのは、１０ビットのｘ座標は、０、３、６、９、１２、１５、１８、２１、２４、及び２７の位置における３０ビット３Ｄモートン座標（ｍ）のビットの値を格納してよく、１０ビットのｙ座標は、１、４、７、１０、１３、１６、１９、２２、２５、及び２８の位置におけるビットの値を格納してよく、１０ビットのｚ座標は、２、５、８、１１、１４、１７、２０、２３、２６、及び２９の位置におけるビットの値を格納してよいということである。さらに説明すると、以下の表１は、３Ｄモートン座標（ｍ）及びその対応する３つの３Ｄ座標（ｘ、ｙ、ｚ）に関する１つの可能な例をリストにしており、最下位ビットを右側に示し、ｘ座標に対応するビットをモートン座標に太字で示している。
【表１】
0006696674.tif 000003
【００３６】
示された実施形態では、結果パックドデータオペランドのそれぞれは、ソースパックドデータオペランドと同じ幅を任意で有するが、これは必須ではない。３つの３Ｄ座標のそれぞれは、３Ｄモートン座標の１／３の数のビットしか有していないので、必要に応じてより小さい結果パックドデータオペランドが任意で用いられてよい。例えば、結果パックドデータオペランドはソースパックドデータオペランドの半分のビットを任意で有してよく、３つの３Ｄ座標のそれぞれは、ソースパックドデータオペランドのデータ要素の半分のビットしか任意で有さないデータ要素に格納されてよい。例えば、結果パックドデータオペランドは任意で、１６ビットデータ要素を有する２５６ビットの結果パックドデータオペランドであってよい。
【００３７】
図６は、ソースパックドデータオペランド６２０の異なる６４ビットデータ要素にそれぞれ格納される３Ｄモートン座標（ｍ）を、対応する３つの３Ｄ座標（ｘ、ｙ、及びｚ）に変換する３Ｄモートン座標変換オペレーション６４７の例示的な実施形態を示すブロック図であり、対応する３つの３Ｄ座標は、３つの結果パックドデータオペランド６４２、６４４、６４６のうち異なる１つの対応する６４ビットデータ要素にそれぞれ格納される。このオペレーションは、３つの３Ｄ座標命令への３Ｄモートン座標変換に関する例示的な実施形態に応じて実行されてよい。
【００３８】
図６のオペレーションは、図５のオペレーションとある程度の類似性を有するが、３Ｄモートン座標及び対応する３Ｄ座標の幅と、データ要素が３２ビットデータ要素の代わりに６４ビットデータ要素である点とが主に異なる。説明をあいまいにしないように、図６のオペレーションについて異なる特性及び／又は追加の特性を主に説明し、図５のオペレーションに関する任意に類似又は共通した特性及び詳細を全て繰り返すことはしない。しかし、図５のオペレーションについて前述した特性及び詳細は、変形例及び代替例を含めて、別段の定めがない限り、又は別の方法で明らかに識別できない限り、図６のオペレーションに任意で適用されてもよいことが理解されるべきである。
【００３９】
前述したように、命令は、ソースパックドデータオペランド６２０を指定してよく、又は別の方法でそれを示してもよい。この実施形態では、３Ｄモートン座標のそれぞれは、ソースパックドデータオペランドの異なる６４ビットデータ要素に格納されている。特定の例示された実施形態において、ソースパックドデータオペランドは、８つの６４ビットデータ要素、及び／又は８つの３Ｄモートン座標（ｍ１からｍ８）を有する５１２ビットのソースパックドデータオペランドであるが、本発明の範囲はそのように限定されてはいない。他の実施形態では、ソースパックドデータオペランドは５１２ビットより広くても、それより狭くてもよい（例えば、１２８ビット、２５６ビット、１０２４ビットなど）。
【００４０】
この例示的な実施形態では、３つの結果パックドデータオペランド６４２、６４４、６４６が（例えば、実行ユニット６１６によって）生成され、命令に応じて格納されてよい。３つの結果パックドデータオペランドは３つの３Ｄ座標からなる複数のセットを含み、これらのセットはソースパックドデータオペランドの同じ数の３Ｄモートン座標から生成又は変換される。３Ｄモートン座標のそれぞれは、（例えば、オペランド内の同じ相対ビット位置にある）結果パックドデータオペランドの３つの３Ｄ座標からなる別の対応するセットに対応し、またそれに変換されてよい。例えば、ソースパックドデータオペランドの最下位（右端）６４ビットデータ要素にある３Ｄモートン座標（ｍ１）は、第１の結果パックドデータオペランドの最下位６４ビットデータ要素にある第１の対応する３Ｄ座標（ｘ１）、第２の結果パックドデータオペランドの最下位６４ビットデータ要素にある第２の対応する３Ｄ座標（ｙ１）、及び第３の結果パックドデータオペランドの最下位６４ビットデータ要素にある第３の対応する３Ｄ座標（ｚ１）に変換されてよい。他の３Ｄモートン座標は、結果パックドデータオペランドに格納された３つの３Ｄ座標からなる対応するセットに同様に又は類似して変換されてよい。
【００４１】
前述したように、３つの３Ｄ座標からなるセットのそれぞれは、対応する３Ｄモートン座標のビットに、固定した３通りのビット単位のデインターリーブを実行して、３つの３Ｄ座標のうち異なる１つにそれぞれ対応する３つの連続したビットストリングにすることで、対応する３Ｄモートン座標から生成されてよい。示された例示的な実施形態では、３Ｄモートン座標（ｍ）はそれぞれ６３ビットであり、対応する３つの３Ｄ座標（ｘ、ｙ、及びｚ）の各々はそれぞれ２１ビットであるが、本発明の範囲はそのように限定されてはいない。２１ビットの３つのセットはそれぞれ、モートン座標として単一の６４ビットデータ要素に入ることができる最大の同一セットサイズである（すなわち、２１＋２１＋２１＝６３、６４−６３＝１）。他の実施形態において、結果パックドデータオペランドの３つの３Ｄ座標のそれぞれは、１２ビットから２１ビット、又は１５ビットから２１ビット、又は１８ビットから２１ビットの範囲をとる同じ数のビットで表されてよく、３Ｄモートン座標のそれぞれは、その数のビットの３倍になり得る。概して、より多くのビットによって、より多くのデータポイント及び／又はより多くの座標系を表すことが可能になる。
【００４２】
６４ビットソースデータ要素（ＳＲＣ１）に格納された所定の３Ｄモートン座標（例えば、ｍ１）を対応する３つの２１ビット３Ｄ座標（ｘ１、ｙ１、ｚ１）に変換し、それぞれが別の対応する結果（ＲＥＳ１、ＲＥＳ２、ＲＥＳ３）のデータ要素に格納されるオペレーションが、以下のように表され得る。ここで、「０：６０：３」の中の「３」は、３ビットごとにビットを飛び越していくことを表す。
【数２】
0006696674.tif 000004
【００４３】
２１ビットのｘ座標は、０、３、６、９、１２などと続いて６０までの位置における３０ビット３Ｄモートン座標（ｍ）のビットの値を格納してよく、２１ビットのｙ座標は、１、４、７、１０、１３などと続いて６１までの位置におけるビットの値を格納してよく、２１ビットのｚ座標は２、５、８、１１、１４などと続いて６２までの位置におけるビットの値を格納してよい。
【００４４】
図７は、ソースパックドデータオペランド７２０の異なる３２ビットデータ要素にそれぞれ格納される３Ｄモートン座標（ｍ）を、対応する３つの３Ｄ座標（ｘ、ｙ、及びｚ）に変換する３Ｄモートン座標変換オペレーション７５０の例示的な実施形態を示すブロック図であり、対応する３つの３Ｄ座標は、単一の結果パックドデータオペランド７４８の対応する３２ビットデータ要素の異なる連続したビット部分にそれぞれ格納される。このオペレーションは、３つの３Ｄ座標命令への３Ｄモートン座標変換に関する例示的な実施形態に応じて実行されてよい。
【００４５】
図７のオペレーションは、図５のオペレーションとある程度の類似性を有するが、３つの３Ｄ座標のセットが、それぞれ異なる結果パックドデータオペランドの異なるデータ要素に格納される代わりに、単一の結果パックドデータオペランドのデータ要素の３つの異なる部分に格納されるという点で主に異なる。説明をあいまいにしないように、図７のオペレーションについて異なる特性及び／又は追加の特性を主に説明し、図５のオペレーションに関する任意に類似又は共通した特性及び詳細を全て繰り返すことはしない。しかし、図５のオペレーションについて前述した特性及び詳細は、変形例及び代替例を含めて、別段の定めがない限り、又は別の方法で明らかに識別できない限り、図７のオペレーションに任意で適用されてもよいことが理解されるべきである。
【００４６】
前述したように、命令は、ソースパックドデータオペランド７２０を指定してよく、又は別の方法でそれを示してもよい。この実施形態では、３Ｄモートン座標のそれぞれは、ソースパックドデータオペランドの異なる３２ビットデータ要素に格納されている。特定の例示された実施形態において、ソースパックドデータオペランドは、１６個の３２ビットデータ要素、及び／又は１６個の３Ｄモートン座標（ｍ１からｍ１６）を有する５１２ビットのソースパックドデータオペランドであるが、本発明の範囲はそのように限定されてはいない。他の実施形態では、ソースパックドデータオペランドは５１２ビットより広くても、それより狭くてもよく（例えば、１２８ビット、２５６ビット、１０２４ビットなど）、より少ない又はより多いデータ要素及び／又は３Ｄモートン座標を有してもよい。
【００４７】
この例示的な実施形態では、単一の結果パックドデータオペランド７４８が（例えば、実行ユニット７１６によって）生成され、命令に応答して格納されてよい。結果パックドデータオペランドは３つの３Ｄ座標からなる複数のセットを含み、それらのセットはソースパックドデータオペランドの同じ数の３Ｄモートン座標から生成又は変換される。ソースパックドデータオペランドの３Ｄモートン座標のそれぞれは、（例えば、オペランド内の同じ相対ビット位置にある）結果パックドデータオペランドの３つの３Ｄ座標からなる別の対応するセットに対応し、またそれに変換されてよい。例えば、ソースパックドデータオペランドの最下位（右端）３２ビットデータ要素にある３Ｄモートン座標（ｍ１）は、結果パックドデータオペランドの最下位３２ビットデータ要素にある３つの座標（ｘ１、ｙ１、ｚ１）からなるセットに変換されてよい。他の３Ｄモートン座標は、結果パックドデータオペランドの異なるデータ要素にそれぞれ格納された３つの３Ｄ座標からなる対応するセットに同様に又は類似して変換されてよい。
【００４８】
前述したように、３つの３Ｄ座標からなるセットのそれぞれは、対応する３Ｄモートン座標のビットに、固定した３通りのビット単位のデインターリーブを実行して、３つの３Ｄ座標のうち異なる１つにそれぞれ対応する３つの連続したビットストリングにすることで、対応する３Ｄモートン座標から生成されてよい。示された例示的な実施形態では、３Ｄモートン座標（ｍ）はそれぞれ３０ビットであり、対応する３つの３Ｄ座標（ｘ、ｙ、及びｚ）の各々はそれぞれ１０ビットであるが、本発明の範囲はそのように限定されてはいない。他の実施形態において、結果パックドデータオペランドの３つの３Ｄ座標のそれぞれは、７ビットから１０ビット、又は９ビットから１０ビットの範囲をとる同じ数のビットで表されてよく、３Ｄモートン座標のそれぞれは、その数のビットの３倍になり得る。概して、より多くのビットによって、より多くのデータポイント及び／又はより多くの座標系を表すことが可能になる。
【００４９】
３２ビットソースデータ要素（ＳＲＣ１）に格納された所定の３Ｄモートン座標（例えば、ｍ１）を対応する３つの１０ビット３Ｄ座標（ｘ１、ｙ１、ｚ１）に変換し、それぞれが単一の結果パックドデータオペランドの単一の結果データ要素（ＲＥＳ１）の異なる連続したビット部分に格納されるオペレーションが、以下のように表され得る。ここで、「０：２７：３」の中の「３」は、３ビットごとにビットを飛び越していくことを表す。
【数３】
0006696674.tif 000005
【００５０】
これが意味するのは、ＲＥＳ１のビット［０：９］にある１０ビットのｘ座標は、０、３、６、９、１２、１５、１８、２１、２４、及び２７の位置における３０ビット３Ｄモートン座標（ｍ）のビットの値を格納してよく、ＲＥＳ１のビット［１０：１９］にある１０ビットのｙ座標は、１、４、７、１０、１３、１６、１９、２２、２５、及び２８の位置におけるビットの値を格納してよく、ＲＥＳ１のビット［２０：２９］にある１０ビットのｚ座標は、２、５、８、１１、１４、１７、２０、２３、２６、及び２９の位置におけるビットの値を格納してよいということである。さらに説明すると、以下の表２は、３Ｄモートン座標（ｍ）及びその対応する３つの３Ｄ座標（ｘ、ｙ、ｚ）に関する１つの可能な例をリストにしており、最下位ビットを右側に示し、ｘ座標のビットをモートン座標に太字で示している。
【表２】
0006696674.tif 000006
【００５１】
図８は、ソースパックドデータオペランド８２０の異なる６４ビットデータ要素にそれぞれ格納される３Ｄモートン座標（ｍ）を、対応する３つの３Ｄ座標（ｘ、ｙ、及びｚ）に変換する３Ｄモートン座標変換オペレーション８５２の例示的な実施形態を示すブロック図であり、対応する３つの３Ｄ座標は、単一の結果パックドデータオペランド８４８の対応する６４ビットデータ要素の異なる連続したビット部分にそれぞれ格納される。このオペレーションは、３つの３Ｄ座標命令への３Ｄモートン座標変換に関する例示的な実施形態に応じて実行されてよい。
【００５２】
図８のオペレーションは図７のオペレーションとある程度の類似性を有するが、６４ビットデータ要素と、それに対応してより広い３Ｄモートン座標及び３Ｄ座標とが用いられているという点で主に異なる。説明をあいまいにしないように、図８のオペレーションについて異なる特性及び／又は追加の特性を主に説明し、図７のオペレーションに関する任意に類似又は共通した特性及び詳細を全て繰り返すことはしない。しかし、図７のオペレーションについて前述した特性及び詳細は、変形例及び代替例を含めて、別段の定めがない限り、又は別の方法で明らかに識別できない限り、図８のオペレーションに任意で適用されてもよいことが理解されるべきである。
【００５３】
前述したように、命令は、ソースパックドデータオペランド８２０を指定してよく、又は別の方法でそれを示してもよい。この実施形態では、３Ｄモートン座標のそれぞれは、ソースパックドデータオペランドの異なる６４ビットデータ要素に格納されている。特定の例示された実施形態において、ソースパックドデータオペランドは、８つの６４ビットデータ要素、及び／又は８つの３Ｄモートン座標（ｍ１からｍ８）を有する５１２ビットのソースパックドデータオペランドであるが、本発明の範囲はそのように限定されてはいない。他の実施形態では、ソースパックドデータオペランドは５１２ビットより広くても、それより狭くてもよく（例えば、１２８ビット、２５６ビット、１０２４ビットなど）、より少ない又はより多いデータ要素及び／又は３Ｄモートン座標を有してもよい。
【００５４】
この例示的な実施形態では、単一の結果パックドデータオペランド８４８が（例えば、実行ユニット８１６によって）生成され、命令に応答して格納されてよい。結果パックドデータオペランドは３つの３Ｄ座標からなる複数のセットを含み、それらのセットはソースパックドデータオペランドの同じ数の３Ｄモートン座標から生成又は変換される。ソースパックドデータオペランドの３Ｄモートン座標のそれぞれは、（例えば、オペランド内の同じ相対ビット位置にある）結果パックドデータオペランドの３つの３Ｄ座標からなる別の対応するセットに対応し、またそれに変換されてよい。例えば、ソースパックドデータオペランドの最下位（右端）６４ビットデータ要素にある３Ｄモートン座標（ｍ１）は、結果パックドデータオペランドの最下位６４ビットデータ要素にある３つの座標（ｘ１、ｙ１、ｚ１）からなるセットに変換されてよい。他の３Ｄモートン座標は、結果パックドデータオペランドの異なるデータ要素にそれぞれ格納された３つの３Ｄ座標からなる対応するセットに同様に又は類似して変換されてよい。
【００５５】
前述したように、３つの３Ｄ座標からなるセットのそれぞれは、対応する３Ｄモートン座標のビットに、固定した３通りのビット単位のデインターリーブを実行して、３つの３Ｄ座標のうち異なる１つにそれぞれ対応する３つの連続したビットストリングにすることで、対応する３Ｄモートン座標から生成されてよい。示された例示的な実施形態では、３Ｄモートン座標（ｍ）はそれぞれ６３ビットであり、対応する３つの３Ｄ座標（ｘ、ｙ、及びｚ）の各々はそれぞれ２１ビットであるが、本発明の範囲はそのように限定されてはいない。他の実施形態において、結果パックドデータオペランドの３つの３Ｄ座標のそれぞれは、１２ビットから２１ビット、又は１５ビットから２１ビット、又は１８ビットから２１ビットの範囲をとる同じ数のビットで表されてよく、３Ｄモートン座標のそれぞれは、その数のビットの３倍になり得る。
【００５６】
６４ビットソースデータ要素（ＳＲＣ１）に格納された所定の３Ｄモートン座標（例えば、ｍ１）を対応する３つの２１ビット３Ｄ座標（ｘ１、ｙ１、ｚ１）に変換し、それぞれが単一の結果パックドデータオペランドの単一の結果データ要素（ＲＥＳ１）の異なる連続したビット部分に格納されるオペレーションが、以下のように表され得る。ここで、「０：６０：３」の中の「３」は、３ビットごとにビットを飛び越していくことを表す。
【数４】
0006696674.tif 000007
【００５７】
図９は、モートン座標変換命令の実施形態を実行するよう動作可能な適切なプロセッサについての、より詳細な例示的な実施形態のブロック図である。プロセッサはコア９８０を含む。プロセッサは複数のコア（例えば、少なくとも２つ、少なくとも４つ、少なくとも８つ、少なくとも３０個など）を任意で有してよい。場合によっては、全てのコアが、示されるコアと同じであってよく、又は他の場合には、複数のコアの一部が異なっていてもよい（例えば、異なる構成要素又は命令セットを有してもよい）。場合によっては、全てのコアが、本明細書に開示されるモートン座標変換を実行できてよく、又は他の場合には、複数のコアの一部だけがそうであってもよい。コア９８０は、プログラムフローの分岐を予測する分岐予測ユニット９８１を含む。分岐予測ユニットは、命令プリフェッチユニット９８２に結合されている。命令プリフェッチユニットは、外部メモリから、それに結合されたメモリユニット９８９を通じて、モートン座標変換命令を含む命令をプリフェッチしてよく、又は別の方法でその命令を受信してもよい。レベル１（Ｌ１）命令キャッシュが命令プリフェッチユニットに結合されている。Ｌ１命令キャッシュは、プリフェッチ済みの、又は別の方法で受信済みのモートン座標変換命令を含む命令をキャッシュしてよく、又は別の方法で格納してもよい。命令フェッチユニット９８４が、Ｌ１命令キャッシュ及び復号ユニット９１４に結合されている。命令フェッチユニットは、モートン座標変換命令を含む命令をＬ１命令キャッシュからフェッチし、又は別の方法でそれを受信し、モートン座標変換命令を含む命令を復号ユニットに提供してよい。復号ユニットは、本明細書で説明される他の復号ユニットと同じであっても類似していてもよい。
【００５８】
プロセッサは、１つ又は複数のレジスタファイルユニット９１８を含む。一般的に、レジスタファイルユニットは様々な異なるタイプのレジスタを含んでよく、例えば、パックドデータレジスタ、汎用レジスタ、ステータスレジスタ又はフラグレジスタ、制御レジスタ又は構成レジスタなどがある。アウトオブオーダ（ＯＯＯ）実行を用いる実施形態では、プロセッサはまた、リソースを割り当ててレジスタ（例えば、モートン座標変換命令に関連するパックドデータレジスタ）上でレジスタリネーミングを実行するために、レジスタファイルユニットに結合されたレジスタリネーム及び／又はアロケータユニットを任意で含んでよい。また、ＯＯＯ実行の場合には、プロセッサは、復号ユニットと、リネーム／アロケーションユニットと、１つ又は複数の実行ユニット９１６とに結合された１つ又は複数のスケジューラユニット９８６を任意で含んでよい。スケジューラユニットは、実行ユニット上のオペレーションをスケジューリングしてよい。複数の実行ユニットのうち少なくとも１つは、本明細書で開示される他の実行ユニットと同じであっても類似していてもよい。一般的に、プロセッサは複数の異なるタイプの実行ユニットを任意で有してよく、例えば、整数実行ユニット、浮動小数点実行ユニット、ベクトル実行ユニット、１つ又は複数のメモリアクセスユニット９８７、又はバスインタフェースユニットなどがある。アウトオブオーダ（ＯＯＯ）実行を用いる実施形態では、プロセッサはまた、命令をリタイア又はコミットするために、レジスタファイルユニットとリネーム／アロケータユニット９８５とに結合されたリタイアメント又はコミットユニット９９１を任意で含んでよい。プロセッサは、モートン座標変換命令を含む命令のデータ要素及び／又はオペランドを含んだデータをキャッシュする、又は別の方法でこれを格納するＬ１データキャッシュユニット９７４を含んでよい。レベル２（Ｌ２）キャッシュユニット９９０が任意で含まれてよく、また複数のコアによって任意で共有されてもよい。Ｌ２キャッシュユニットは、データと、モートン座標変換命令を含む命令とを格納してよい。プロセッサはまた、アドレス変換データをキャッシュするために、１つ又は複数の変換ルックアサイドバッファ（不図示）を任意で含んでよい。アウトオブオーダ（ＯＯＯ）実行を用いる実施形態では、プロセッサはまた、実行結果をリオーダするためのリオーダバッファ（不図示）、及び／又は、１つ又は複数のリザベーションステーション（不図示）を任意で含んでよい。プロセッサの様々な実施形態は、これらの構成要素の一部又は全てからなる様々な異なる組み合わせ及び構成を含んでよい。これらの実施形態は、任意の既知のそのような組み合わせ又は構成に限定されてはいない。
【００５９】
図１０は、３Ｄモートン座標変換命令１０１２の実施形態のブロック図である。命令は、オペレーションコードつまりオペコード１０８０を含む。オペコードは、（例えば、３Ｄモートン座標を３Ｄ座標に変換するために）実行される命令及び／又はオペレーションを特定するよう動作可能な複数のビット、あるいは１つ又は複数のフィールドを表してよい。
【００６０】
命令はまた、ソースパックドデータオペランドを格納するのに用いられるレジスタ、メモリ位置、又は他の記憶位置を明示的に指定するソースオペランド指定子１０８２を含む。命令はまた、第１の結果パックドデータオペランドを格納するレジスタ又は他の記憶位置を明示的に指定する第１のデスティネーション記憶位置指定子１０８４と、任意の第２の結果パックドデータオペランドを格納するレジスタ又は他の記憶位置を明示的に指定する任意の第２のデスティネーション記憶位置指定子１０８６と、任意の第３の結果パックドデータオペランドを格納するレジスタ又は他の記憶位置を明示的に指定する任意の第３のデスティネーション記憶位置指定子１０８８とを含む。例として、これらの指定子のそれぞれは、レジスタ、メモリ位置、又は他の記憶位置のアドレスを明示的に指定する複数のビットのセットあるいは１つ又は複数のフィールドを含んでよい。あるいは前述したように、単一の結果パックドデータオペランド、及び対応する単一のデスティネーション記憶位置が必要に応じて任意で用いられてもよい。さらに、これらの記憶位置のそれぞれに明示的な指定子を有する命令の代わりに、命令は、ソースオペランド及びデスティネーション記憶位置のうち１つ又は複数に対し、１つ又は複数の暗黙的な記憶位置（例えば、命令のオペコードに対して暗黙的）を任意で有してよい。例えば、所定の固定レジスタが明示的に指定される必要がないように、ソースオペランド、又は複数のデスティネーション記憶位置の１つに所定の固定レジスタを用いることは、命令のオペコードに対して暗黙的であってよい。別の例として、ソースオペランド、及び複数の結果オペランドのうち１つを格納するデスティネーション記憶位置の両方（例えば、暗黙的なソース／デスティネーションレジスタ）に、（例えば、命令によって一度は明示的に指定された）同じレジスタ又は他の記憶位置を再利用することは、暗黙的であってよい。実施形態によっては、命令は他のフィールド又はビットを有してよく、例えば、３２ビット又６４ビットの実行状態又はモードを示すビットなどがある。これは、適切な３Ｄモートン座標変換命令の単に１つの説明のための実例であることが、理解されるべきである。代替的な実施形態は、示されたフィールド／指定子のサブセットを含んでよく、追加のフィールド／指定子を加えてもよく、特定のフィールド／指定子を重ねてもよいなどである。さらに、フィールド／指定子の示された順序及び配列は必須ではない。フィールド／指定子は様々に再配列されてもよい。さらに、フィールド／指定子は、連続したビット配列を含む必要はなく、むしろ、非連続なビット又は分離したビットを含んでもよい。実施形態によっては、命令フォーマットは、本明細書の他の箇所に開示されるＶＥＸ又はＥＶＥＸ符号化、又は命令フォーマット、及び属性を有してよいが、本発明の範囲はそのように限定されてはいない。ＶＥＸ及びＥＶＥＸ符号化、並びにフォーマットに関するさらなる詳細が以下でさらに説明される。
【００６１】
命令セットは、１つ又は複数の命令フォーマットを含む。所定の命令フォーマットは、とりわけ、実行されるオペレーション（オペコード）及び当該オペレーションが実行されるオペランドを指定すべく、様々なフィールド（ビット数、ビット位置）を規定する。一部の命令フォーマットは、命令テンプレート（又はサブフォーマット）の定義によってさらに分類される。例えば、所定の命令フォーマットの命令テンプレートは、命令フォーマットの複数のフィールドからなる異なるサブセットを有するよう定義されてよく（含まれるフィールドは典型的には同じ順位にあるが、含まれるフィールドがより少ないことから、少なくともいくつかは異なるビット位置を有する）、及び／又は、異なるように解釈された所定のフィールドを有するよう定義されてもよい。したがって、ＩＳＡの各命令は、所定の命令フォーマットを用いて（且つ、定義された場合には、その命令フォーマットの命令テンプレートのうち所定の１つに）表され、オペレーション及びオペランドを指定するフィールドを含む。例えば、例示的なＡＤＤ命令は、特定のオペコードと、そのオペコードを指定するためのオペコードフィールド、及びオペランド（ソース１／デスティネーション及びソース２）を選択するためのオペランドフィールドを含む命令フォーマットとを有し、このＡＤＤ命令が命令ストリーム内に出現すると、オペランドフィールド内に、特定のオペランドを選択する特定のコンテンツを有することになる。アドバンスト・ベクトル・エクステンション（ＡＶＸ）（ＡＶＸ１及びＡＶＸ２）と呼ばれ、ベクトル拡張（ＶＥＸ）コード体系を用いるＳＩＭＤ拡張のセットが公表及び／又は公開されている（例えば、Ｉｎｔｅｌ（登録商標）６４及びＩＡ−３２アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル（２０１１年１０月）を参照、並びにＩｎｔｅｌ（登録商標）アドバンスト・ベクトル・エクステンション・プログラミング・レファレンス（２０１１年６月）を参照）。
［例示的な命令フォーマット］
【００６２】
本明細書に説明される命令の実施形態は、異なるフォーマットで具現化され得る。さらに、例示的なシステム、アーキテクチャ、及びパイプラインが以下に詳述される。命令の実施形態は、このようなシステム、アーキテクチャ、及びパイプライン上で実行されてよいが、詳述されているものに限定されてはいない。
［ＶＥＸ命令フォーマット］
【００６３】
ＶＥＸ符号化は、命令が２つより多くのオペランドを有することを可能にし、ＳＩＭＤベクトルレジスタが１２８ビットより長くなることを可能にする。ＶＥＸプリフィックスを使用することで、３つ（又はそれより多く）のオペランド構文が提供される。例えば、直前の２つのオペランド命令が、Ａ＝Ａ＋Ｂなどの演算を実行し、これによってソースオペランドが置き換えられる。ＶＥＸプリフィックスを用いることで、オペランドはＡ＝Ｂ＋Ｃなどの非破壊演算を実行することが可能となる。
【００６４】
図１１Ａは、ＶＥＸプリフィックス１１０２、リアルオペコードフィールド１１３０、Ｍｏｄ  Ｒ／Ｍバイト１１４０、ＳＩＢバイト１１５０、変位フィールド１１６２、及びＩＭＭ８  １１７２を含む例示的なＡＶＸ命令フォーマットを示す。図１１Ｂは、図１１Ａのどのフィールドが、フルオペコードフィールド１１７４及びベースオペレーションフィールド１１４２を構成するかを示す。図１１Ｃは、図１１Ａのどのフィールドが、レジスタインデックスフィールド１１４４を構成するかを示す。
【００６５】
ＶＥＸプリフィックス（バイト０−２）１１０２は、３バイト形式で符号化される。第１のバイトは、フォーマットフィールド１１４０（ＶＥＸバイト０、ビット［７：０］）であり、これは、明示的なＣ４バイト値（Ｃ４命令フォーマットを識別するのに用いられる固有値）を含む。第２〜第３のバイト（ＶＥＸバイト１−２）は、特定の機能を提供する複数のビットフィールドを含む。具体的には、ＲＥＸフィールド１１０５（ＶＥＸバイト１、ビット［７−５］）は、ＶＥＸ．Ｒビットフィールド（ＶＥＸバイト１、ビット［７］−Ｒ）、ＶＥＸ．Ｘビットフィールド（ＶＥＸバイト１、ビット［６］−Ｘ）、及びＶＥＸ．Ｂビットフィールド（ＶＥＸバイト１、ビット［５］−Ｂ）から構成される。命令の他のフィールドは、Ｒｒｒｒ、Ｘｘｘｘ、及びＢｂｂｂがＶＥＸ．Ｒ、ＶＥＸ．Ｘ、及びＶＥＸ．Ｂを加えることで形成され得るように、当技術分野において知られるレジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、及びｂｂｂ）を符号化する。オペコードマップフィールド１１１５（ＶＥＸバイト１、ビット［４：０］−ｍｍｍｍｍ）は、暗黙の先頭オペコードバイトを符号化するコンテンツを含む。Ｗフィールド１１６４（ＶＥＸバイト２、ビット［７］−Ｗ）は、ＶＥＸ．Ｗの表記で表され、命令に応じて異なる機能を提供する。ＶＥＸ．ｖｖｖｖ１１２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）の役割は、以下のことを含んでよい。１）ＶＥＸ．ｖｖｖｖは、第１のソースレジスタオペランドを符号化し、反転（１の補数）形式で指定され、２又はそれより多くのソースオペランドを有する命令に有効である。２）ＶＥＸ．ｖｖｖｖは、デスティネーションレジスタオペランドを符号化し、特定のベクトルシフトについて１の補数形式で指定される。又は、３）ＶＥＸ．ｖｖｖｖは、いかなるオペランドも符号化せず、フィールドは予約され１１１１ｂを含むはずである。ＶＥＸ．Ｌ１１６８サイズフィールド（ＶＥＸバイト２、ビット［２］−Ｌ）＝０の場合、このフィールドは１２８ビットベクトルを示し、ＶＥＸ．Ｌ＝１の場合は２５６ビットベクトルを示す。プリフィックス符号化フィールド１１２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）は、ベースオペレーションフィールドに追加ビットを提供する。
【００６６】
リアルオペコードフィールド１１３０（バイト３）はまた、オペコードバイトとして知られる。オペコードの一部はこのフィールドで指定される。
【００６７】
ＭＯＤ  Ｒ／Ｍフィールド１１４０（バイト４）は、ＭＯＤフィールド１１４２（ビット［７−６］）、Ｒｅｇフィールド１１４４（ビット［５−３］）及びＲ／Ｍフィールド１１４６（ビット［２−０］）を含む。Ｒｅｇフィールド１１４４の役割は、以下のことを含んでよい。つまり、デスティネーションレジスタオペランド又はソースレジスタオペランド（Ｒｒｒｒのｒｒｒ）を符号化する、又はオペコード拡張として扱われて、いかなる命令オペランドを符号化するのにも用いられない。Ｒ／Ｍフィールド１１４６の役割は、以下のことを含んでよい。つまり、メモリアドレスを参照する命令オペランドを符号化する、あるいはデスティネーションレジスタオペランド又はソースレジスタオペランドを符号化する。
【００６８】
スケール・インデックス・ベース（ＳＩＢ）：スケールフィールド１１５０（バイト５）のコンテンツはＳＳ  １１５２（ビット［７−６］）を含み、これはメモリアドレス生成に用いられる。ＳＩＢ．ｘｘｘ  １１５４（ビット［５−３］）及びＳＩＢ．ｂｂｂ  １１５６（ビット［２−０］）のコンテンツは、レジスタインデックスＸｘｘｘ及びＢｂｂｂに関して前述されている。
【００６９】
変位フィールド１１６２及び即値フィールド（ＩＭＭ８）１１７２は、アドレスデータを含む。
［汎用ベクトル対応命令フォーマット］
【００７０】
ベクトル対応命令フォーマットは、ベクトル命令に適した命令フォーマットである（例えば、ベクトル演算に固有の特定のフィールドが存在する）。ベクトル演算及びスカラ演算の両方がベクトル対応命令フォーマットを通じてサポートされる実施形態が説明されているが、代替的な実施形態はベクトル対応命令フォーマットを通じてベクトル演算のみを用いる。
【００７１】
図１２Ａ及び図１２Ｂは、本発明の実施形態に従って、汎用ベクトル対応命令フォーマット及びその命令テンプレートを示すブロック図である。図１２Ａは、本発明の実施形態に従って、汎用ベクトル対応命令フォーマット及びそのクラスＡ命令テンプレートを示すブロック図である。図１２Ｂは、本発明の実施形態に従って、汎用ベクトル対応命令フォーマット及びそのクラスＢ命令テンプレートを示すブロック図である。具体的には、汎用ベクトル対応命令フォーマット１２００に対してクラスＡ命令テンプレート及びクラスＢ命令テンプレートが定義され、その両方が非メモリアクセス１２０５命令テンプレート及びメモリアクセス１２２０命令テンプレートを含む。ベクトル対応命令フォーマットとの関連で、汎用という用語は、いかなる特定の命令セットにも関係していない命令フォーマットを意味する。
【００７２】
本発明の実施形態が説明されるが、ここでベクトル対応命令フォーマットは以下のものをサポートする。つまり、３２ビット（４バイト）又は６４ビット（８バイト）データ要素幅（又はサイズ）を有する６４バイトベクトルオペランド長（又はサイズ）（したがって、６４バイトベクトルは、ダブルワードサイズの１６個の要素、又は代わりにクワッドワードサイズの８個の要素で構成される）と、１６ビット（２バイト）又は８ビット（１バイト）データ要素幅（又はサイズ）を有する６４バイトベクトルオペランド長（又はサイズ）と、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、又は８ビット（１バイト）データ要素幅（又はサイズ）を有する３２バイトベクトルオペランド長（又はサイズ）と、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、又は８ビット（１バイト）データ要素幅（又はサイズ）を有する１６バイトベクトルオペランド長（又はサイズ）である。代替的な実施形態は、より大きいデータ要素幅、より小さいデータ要素幅、又は異なるデータ要素幅（例えば、１２８ビット（１６バイト）データ要素幅）を有する、より大きいベクトルオペランドサイズ、より小さいベクトルオペランドサイズ、及び／又は異なるベクトルオペランドサイズ（例えば、２５６バイトベクトルオペランド）をサポートしてよい。
【００７３】
図１２ＡのクラスＡ命令テンプレートは以下のものを含む。つまり、１）非メモリアクセス１２０５の命令テンプレート内に示されている、非メモリアクセス・フルラウンド制御型オペレーション１２１０の命令テンプレート、及び非メモリアクセス・データ変換型オペレーション１２１５の命令テンプレート、並びに２）メモリアクセス１２２０の命令テンプレート内に示されている、メモリアクセス・一時的１２２５の命令テンプレート、及びメモリアクセス・非一時的１２３０の命令テンプレートである。図１２ＢのクラスＢ命令テンプレートは以下のものを含む。つまり、１）非メモリアクセス１２０５の命令テンプレート内に示されている、非メモリアクセス・書き込みマスク制御・部分ラウンド制御型オペレーション１２１２の命令テンプレート、及び非メモリアクセス・書き込みマスク制御・ｖｓｉｚｅ型オペレーション１２１７の命令テンプレート、並びに２）メモリアクセス１２２０命令テンプレート内に示されている、メモリアクセス・書き込みマスク制御１２２７の命令テンプレートである。
【００７４】
汎用ベクトル対応命令フォーマット１２００は、図１２Ａ〜１２Ｂに示される順で以下に列挙する次のフィールドを含む。
【００７５】
フォーマットフィールド１２４０：このフィールドの特定値（命令フォーマット識別子の値）は、ベクトル対応命令フォーマットを一意に特定し、したがって、命令ストリーム内のベクトル対応命令フォーマットにおける命令の出現を特定する。そのため、このフィールドは、汎用ベクトル対応命令フォーマットのみを有する命令セットには必要とされないという点で、任意なものである。
【００７６】
ベースオペレーションフィールド１２４２：このコンテンツは、異なるベースオペレーションを識別する。
【００７７】
レジスタインデックスフィールド１２４４：このコンテンツは、ソース及びデスティネーションオペランドの位置を、それらがレジスタ内にあってもメモリ内にあっても、直接又はアドレス生成を通じて指定する。これらは、ＰｘＱ（例えば３２ｘ５１２、１６ｘ１２８、３２ｘ１０２４、６４ｘ１０２４）レジスタファイルからＮ個のレジスタを選択するのに十分な数のビットを含む。１つの実施形態において、Ｎは３つのソース及び１つのデスティネーションレジスタまでであってよいが、代替的な実施形態はより多くの又はより少ないソース及びデスティネーションレジスタをサポートしてもよい（例えば、２つのソース（このうち１つはデスティネーションの役割も果たす）までをサポートしてよく、３つのソース（このうち１つはデスティネーションの役割も果たす）までをサポートしてもよく、２つのソース及び１つのデスティネーションまでをサポートしてもよい）。
【００７８】
修飾子フィールド１２４６：このコンテンツは、汎用ベクトル命令フォーマットにおいてメモリアクセスを指定する命令の出現をそうでない命令の出現と識別する。すなわち、非メモリアクセス１２０５の命令テンプレートとメモリアクセス１２２０の命令テンプレートとを識別する。メモリアクセスオペレーションは、メモリ階層を読み出す、及び／又はメモリ階層へ書き込む（場合によっては、レジスタ内の値を用いてソースアドレス及び／又はデスティネーションアドレスを指定する）が、非メモリアクセスオペレーションはこうしたことを行わない（例えば、ソース及びデスティネーションはレジスタである）。１つの実施形態において、このフィールドはまた、メモリアドレス計算を実行するための３つの異なる方法から選択するが、代替的な実施形態は、メモリアドレス計算を実行するためのより多くの方法、より少ない方法、又は異なる方法をサポートしてもよい。
【００７９】
拡大オペレーションフィールド１２５０：このコンテンツは、様々な異なるオペレーションのどれがベースオペレーションに加えて実行されるかを識別する。このフィールドは、コンテキスト固有のものである。本発明の１つの実施形態において、このフィールドは、クラスフィールド１２６８、アルファフィールド１２５２、及びベータフィールド１２５４に分割される。拡大オペレーションフィールド１２５０は、共通グループのオペレーションが２つ、３つ、又は４つの命令ではなく、単一の命令で実行されることを可能にする。
【００８０】
スケールフィールド１２６０：このコンテンツは、メモリアドレス生成のために（例えば、２［スケール］×［インデックス］＋［ベース］を用いるアドレス生成のために）インデックスフィールドのコンテンツをスケーリングすることを可能にする。
【００８１】
変位フィールド１２６２Ａ：このコンテンツは、（例えば、２［スケール］×［インデックス］＋［ベース］＋［変位］を用いるアドレス生成のために）メモリアドレス生成の一部として用いられる。
【００８２】
変位係数フィールド１２６２Ｂ（なお、変位フィールド１２６２Ａを変位係数フィールド１２６２Ｂのすぐ上に並置することで、一方又は他方が使用されていることが示される点に注意）：このコンテンツは、アドレス生成の一部として用いられ、これは、メモリアクセスのサイズ（Ｎ）によってスケーリングされる変位係数を指定する。ここで、Ｎは、（例えば、２［スケール］×［インデックス］＋［ベース］＋［スケーリングされた変位］を用いるアドレス生成のための）メモリアクセス内のバイト数である。冗長下位ビットは無視され、したがって、有効アドレスの計算に用いられる最終的な変位を生成するために、変位係数フィールドのコンテンツはメモリオペランドの合計サイズ（Ｎ）を乗じる。Ｎの値は、フルオペコードフィールド１２７４（本明細書に後述）及びデータ操作フィールド１２５４Ｃに基づき、プロセッサハードウェアによって実行時に決定される。変位フィールド１２６２Ａ及び変位係数フィールド１２６２Ｂは、これらが非メモリアクセス１２０５の命令テンプレートには用いられず、及び／又は異なる実施形態では２つのうち一方のみを実装するかどちらも実装しない場合があるという点で任意である。
【００８３】
データ要素幅フィールド１２６４：このコンテンツは、（実施形態によっては全ての命令に、他の実施形態ではいくつかの命令だけに）複数のデータ要素幅のどれが用いられるべきかを識別する。このフィールドは、１つのデータ要素幅のみがサポートされる場合、及び／又は複数のデータ要素幅がオペコードの何らかの態様を用いてサポートされる場合は、必要とされないという点で任意である。
【００８４】
書き込みマスクフィールド１２７０：このコンテンツは、データ要素位置に基づいて、デスティネーションベクトルオペランドのそのデータ要素位置がベースオペレーション及び拡大オペレーションの結果を反映するかどうかを制御する。クラスＡ命令テンプレートは、マージ処理・書き込みマスク処理をサポートし、クラスＢ命令テンプレートは、マージ・書き込みマスク処理、及びゼロ設定・書き込みマスク処理の両方をサポートする。マージする場合、ベクトルマスクは、（ベースオペレーション及び拡大オペレーションによって指定される）任意のオペレーションを実行中に、デスティネーションにおける任意のセットの要素が更新から保護されることを可能とし、他の１つの実施形態では、対応するマスクビットが０である場合、デスティネーションの各要素の古い値を保護する。これに対して、ゼロ設定する場合、ベクトルマスクは、デスティネーションにおける任意のセットの要素が（ベースオペレーション及び拡大オペレーションによって指定される）任意のオペレーションの実行中にゼロ設定されることを可能とし、１つの実施形態では、対応するマスクビットの値が０である場合、デスティネーションの要素は０に設定される。この機能のサブセットは、実行されているオペレーションのベクトル長（すなわち、変更される要素の最初から最後の要素までの長さ）を制御する能力である。しかし、変更される要素は連続的である必要はない。したがって、書き込みマスクフィールド１２７０は、ロード演算、ストア演算、算術演算、論理演算などを含む一部のベクトル演算を可能にする。書き込みマスクフィールド１２７０のコンテンツが用いられる書き込みマスクを含む複数の書き込みマスクレジスタのうち１つを選択する（したがって、書き込みマスクフィールド１２７０のコンテンツが実行されるマスク処理を間接的に特定する）本発明の実施形態が説明されるが、代替的な実施形態では代わりに又は追加的に、書き込みマスクフィールド１２７０のコンテンツが、実行されるマスク処理を直接指定することを可能にする。
【００８５】
即値フィールド１２７２：このコンテンツは、即値の指定を可能とする。このフィールドは、即値をサポートしない汎用ベクトル対応フォーマットの実装には存在せず、また即値を用いない命令には存在しないという点で任意である。
【００８６】
クラスフィールド１２６８：このコンテンツは、複数の異なるクラスの命令を識別する。図１２Ａ〜図１２Ｂに関連して、このフィールドのコンテンツは、クラスＡ命令及びクラスＢ命令から選択する。図１２Ａ〜図１２Ｂでは、角が丸い四角が、フィールド内に特定値が存在することを示すのに用いられている（例えば、図１２Ａ〜図１２Ｂにそれぞれあるクラスフィールド１２６８用のクラスＡ  １２６８Ａ、及びクラスＢ  １２６８Ｂ）。
［クラスＡの命令テンプレート］
【００８７】
クラスＡの非メモリアクセス１２０５命令テンプレートの場合、アルファフィールド１２５２はＲＳフィールド１２５２Ａと解釈され、そのコンテンツは、異なる拡大オペレーションタイプのどれが実行されるべきかを識別し（例えば、非メモリアクセス・ラウンド型オペレーション１２１０及び非メモリアクセス・データ変換型オペレーション１２１５の命令テンプレートに対し、ラウンド１２５２Ａ．１及びデータ変換１２５２Ａ．２がそれぞれ指定される）、ベータフィールド１２５４は、指定されるタイプのオペレーションのどれが実行されるべきかを識別する。非メモリアクセス１２０５の命令テンプレートには、スケールフィールド１２６０、変位フィールド１２６２Ａ、及び変位係数フィールド１２６２Ｂが存在しない。
［非メモリアクセス命令テンプレート−フルラウンド制御型オペレーション］
【００８８】
非メモリアクセスフルラウンド制御型オペレーション１２１０の命令テンプレートにおいて、ベータフィールド１２５４はラウンド制御フィールド１２５４Ａと解釈され、そのコンテンツは静的なラウンド処理を提供する。説明された本発明の実施形態では、ラウンド制御フィールド１２５４Ａは、全浮動小数点例外抑制（ＳＡＥ）フィールド１２５６及びラウンド演算制御フィールド１２５８を含むが、代替的な実施形態では、これらのコンセプトを両方ともサポートしてよく、それらを同じフィールド内に符号化してよく、あるいはこれらのコンセプト／フィールドの一方又は他方のみを有してもよい（例えば、ラウンド演算制御フィールド１２５８のみを有してよい）。
【００８９】
ＳＡＥフィールド１２５６：このコンテンツは、例外イベント報告を無効化するかどうか識別する。ＳＡＥフィールド１２５６のコンテンツが、抑制が可能であることを示す場合、所定の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも呼び出さない。
【００９０】
ラウンド演算制御フィールド１２５８：このコンテンツは、ラウンド演算のグループのどれを実行すべきかを識別する（例えば、切り上げ、切り捨て、０への丸め、及び最近接丸め）。したがって、ラウンド演算制御フィールド１２５８は、命令に基づいてラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定する制御レジスタを含む本発明の１つの実施形態において、ラウンド演算制御フィールド１２５０のコンテンツは、当該レジスタの値をオーバーライドする。
［非メモリアクセス命令テンプレート−データ変換型オペレーション］
【００９１】
非メモリアクセスデータ変換型オペレーション１２１５の命令テンプレートでは、ベータフィールド１２５４はデータ変換フィールド１２５４Ｂとして解釈され、そのコンテンツは、複数のデータ変換のどれが実行されるべきかを識別する（例えば、データ変換なし、スウィズル、ブロードキャスト）。
【００９２】
クラスＡのメモリアクセス１２２０の命令テンプレートの場合、アルファフィールド１２５２はエビクションヒントフィールド１２５２Ｂと解釈され、そのコンテンツは、エビクションヒントのどれが用いられるべきかを識別する（図１２Ａにおいて、一時的１２５２Ｂ．１及び非一時的１２５２Ｂ．２はそれぞれ、メモリアクセス・一時的１２２５の命令テンプレート及びメモリアクセス・非一時的１２３０の命令テンプレートに指定される）。ベータフィールド１２５４はデータ操作フィールド１２５４Ｃと解釈され、そのコンテンツは、（プリミティブとしても知られる）複数のデータ操作オペレーションのどれが実行されるべきかを識別する（例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、デスティネーションのダウンコンバージョン）。メモリアクセス１２２０の命令テンプレートはスケールフィールド１２６０を含み、任意で変位フィールド１２６２Ａ又は変位係数フィールド１２６２Ｂを含む。
【００９３】
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロード及びメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令はデータ要素単位の形式でデータをメモリから転送し、データをメモリに転送する。実際に転送される要素は、書き込みマスクとして選択されるベクトルマスクのコンテンツによって指示される。
［メモリアクセス命令テンプレート−一時的］
【００９４】
一時的データは、すぐに再利用されてキャッシュによる恩恵を受ける可能性の高いデータである。しかし、これはヒントであり、異なるプロセッサが異なる方法でヒントを実行してよく、その方法には、ヒントを完全に無視することも含まれる。
［メモリアクセス命令テンプレート−非一時的］
【００９５】
非一時的データは、すぐに再利用されてレベル１キャッシュにキャッシュすることから恩恵を受ける可能性が低いデータであり、エビクションが優先されなければならない。しかし、これはヒントであり、異なるプロセッサが異なる方法でヒントを実行してよく、その方法には、ヒントを完全に無視することも含まれる。
［クラスＢの命令テンプレート］
【００９６】
クラスＢの命令テンプレートの場合には、アルファフィールド１２５２は書き込みマスク制御（Ｚ）フィールド１２５２Ｃと解釈され、そのコンテンツは、書き込みマスクフィールド１２７０によって制御される書き込みマスク処理がマージ処理であるべきか、ゼロ設定処理であるべきかを識別する。
【００９７】
クラスＢの非メモリアクセス１２０５の命令テンプレートの場合、ベータフィールド１２５４の一部はＲＬフィールド１２５７Ａと解釈され、そのコンテンツは、異なる拡大オペレーションタイプのどれが実行されるべきかを識別し（例えば、非メモリアクセス・書き込みマスク制御・部分ラウンド制御型オペレーション１２１２の命令テンプレート、及び非メモリアクセス・書き込みマスク制御・ＶＳＩＺＥ型オペレーション１２１７の命令テンプレートに対し、ラウンド１２５７Ａ．１及びベクトル長（ＶＳＩＺＥ）１２５７Ａ．２がそれぞれ指定される）、ベータフィールド１２５４の残りは、指定されるタイプのオペレーションのどれが実行されるべきかを識別する。非メモリアクセス１２０５の命令テンプレートには、スケールフィールド１２６０、変位フィールド１２６２Ａ、及び変位係数フィールド１２６２Ｂが存在しない。
【００９８】
非メモリアクセス・書き込みマスク制御・部分ラウンド制御型オペレーション１２１２の命令テンプレートでは、ベータフィールド１２５４の残りのものはラウンド演算フィールド１２５９Ａと解釈され、例外イベント報告は無効にされる（所定の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも呼び出さない）。
【００９９】
ラウンド演算制御フィールド１２５９Ａ：ラウンド演算制御フィールド１２５８と全く同じように、このコンテンツは、ラウンド演算のグループのどれを実行すべきかを識別する（例えば、切り上げ、切り捨て、０への丸め、及び最近接丸め）。したがって、ラウンド演算制御フィールド１２５９Ａは、命令に基づいてラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定する制御レジスタを含む本発明の１つの実施形態において、ラウンド演算制御フィールド１２５０のコンテンツは、当該レジスタの値をオーバーライドする。
【０１００】
非メモリアクセス・書き込みマスク制御・ＶＳＩＺＥ型オペレーション１２１７の命令テンプレートでは、ベータフィールド１２５４の残りのものはベクトル長フィールド１２５９Ｂと解釈され、そのコンテンツは、複数のデータベクトル長のどれが実行されるべきかを識別する（例えば、１２８バイト、２５６バイト、又は５１２バイト）。
【０１０１】
クラスＢのメモリアクセス１２２０の命令テンプレートの場合には、ベータフィールド１２５４の一部はブロードキャストフィールド１２５７Ｂと解釈され、そのコンテンツは、ブロードキャスト型のデータ操作オペレーションが実行されるべきかどうかを識別し、ベータフィールド１２５４の残りはベクトル長フィールド１２５９Ｂと解釈される。メモリアクセス１２２０の命令テンプレートはスケールフィールド１２６０を含み、任意で変位フィールド１２６２Ａ又は変位係数フィールド１２６２Ｂを含む。
【０１０２】
汎用ベクトル対応命令フォーマット１２００に関して、フォーマットフィールド１２４０、ベースオペレーションフィールド１２４２、及びデータ要素幅フィールド１２６４を含むフルオペコードフィールド１２７４が示されている。フルオペコードフィールド１２７４がこれらのフィールド全てを含む１つの実施形態が示されているが、これらを全てサポートしない実施形態では、フルオペコードフィールド１２７４は、これら全てのフィールドより少ないフィールドを含む。フルオペコードフィールド１２７４は、オペレーションコード（オペコード）を提供する。
【０１０３】
拡大オペレーションフィールド１２５０、データ要素幅フィールド１２６４、及び書き込みマスクフィールド１２７０は、これらの機能が汎用ベクトル対応命令フォーマットの命令に基づいて指定されることを可能にする。
【０１０４】
書き込みマスクフィールドとデータ要素幅フィールドの組み合わせは、それらが異なるデータ要素幅に基づいてマスクが適用されることを可能にするという点で、型付き命令を形成する。
【０１０５】
クラスＡ及びクラスＢ内で見られる様々な命令テンプレートは、異なる状況において有益である。本発明の実施形態によっては、異なるプロセッサ又はプロセッサ内の異なるコアが、クラスＡのみ、クラスＢのみ、又は両方のクラスをサポートしてよい。例えば、汎用計算を対象とした高性能汎用アウトオブオーダコアは、クラスＢのみをサポートしてよく、グラフィックス及び／又は科学的（スループット）計算を主に対象としたコアは、クラスＡのみをサポートしてよく、両方を対象としたコアは、両方をサポートしてよい（もちろん、コアは、両方のクラスのテンプレート及び命令の何らかの組み合わせを有するが、両方のクラスの全てのテンプレート及び命令が本発明の範囲内にあるわけではない）。また、単一のプロセッサは複数のコアを含んでよく、その全てが同じクラスをサポートし、又はその異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックス及び汎用コアを有するプロセッサにおいて、グラフィックス及び／又は科学計算を主に対象とする複数のグラフィックスコアのうち１つがクラスＡのみをサポートしてよく、複数の汎用コアのうち１つ又は複数が、クラスＢのみをサポートする汎用計算を対象としたアウトオブオーダ実行及びレジスタリネーミングを有する高性能汎用コアであってもよい。別個のグラフィックスコアを持たない別のプロセッサは、クラスＡ及びクラスＢの両方をサポートするもう１つの汎用インオーダ又はアウトオブオーダコアを含んでよい。もちろん、一方のクラスの特徴はまた、本発明の異なる実施形態において他方のクラスに実装されてよい。高水準言語で書かれたプログラムは、以下の形式を含む様々な異なる実行可能形式に変換される（例えば、ジャスト・イン・タイム方式でコンパイルされる、又は静的にコンパイルされる）であろう。例えば、１）実行用ターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、あるいは２）全クラスの命令の様々な組み合わせを用いて書かれた代替ルーチンを有し、プロセッサによってサポートされる命令に基づいて、実行するルーチンを選択する制御フローコードを有する形式であって、当該プロセッサが当該コードを現時点で実行している、形式である。
［例示的な特定ベクトル対応命令フォーマット］
【０１０６】
図１３Ａ〜図１３Ｄは、本発明の実施形態に従って例示的な特定ベクトル対応命令フォーマットを示すブロック図である。図１３Ａは、特定ベクトル対応命令フォーマット１３００を示し、これは位置、サイズ、解釈、及びフィールドの順序、並びにこれらのフィールドのいくつかに対する値を指定するという点で特定のものである。特定ベクトル対応命令フォーマット１３００は、ｘ８６命令セットを拡張するのに用いられてよく、したがって、フィールドのいくつかは、既存のｘ８６命令セット及びその拡張版（例えば、ＡＶＸ）に用いられるものと同様又は同じである。このフォーマットは、拡張された既存のｘ８６命令セットのプリフィックス符号化フィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、及び即値フィールドと一致した状態のままである。図１３Ａのフィールドがマッピングされる図１２Ａ〜図１２Ｂのフィールドが示されている。
【０１０７】
本発明の実施形態は、例示を目的として汎用ベクトル対応命令フォーマット１２００との関連で特定ベクトル対応命令フォーマット１３００に関連して説明されるが、本発明は、特許請求される場合を除いて、特定ベクトル対応命令フォーマット１３００に限定されないことが理解されるべきである。例えば、汎用ベクトル対応命令フォーマット１２００では、様々なフィールドについて様々な可能なサイズを検討するが、特定ベクトル対応命令フォーマット１３００は、特定のサイズのフィールドを有するものとして示されている。具体的な例として、データ要素幅フィールド１２６４が、特定ベクトル対応命令フォーマット１３００内の１ビットフィールドとして示されているが、本発明はそのように限定されてはいない（すなわち、汎用ベクトル対応命令フォーマット１２００では、他のサイズのデータ要素幅フィールド１２６４を検討する）。
【０１０８】
汎用ベクトル対応命令フォーマット１２００は、図１３Ａに示される順で以下に列挙される次のフィールドを含む。
【０１０９】
ＥＶＥＸプリフィックス（バイト０−３）１３０２：４バイト形式で符号化される。
【０１１０】
フォーマットフィールド１２４０（ＥＶＥＸバイト０、ビット［７：０］：１番目のバイト（ＥＶＥＸバイト０）はフォーマットフィールド１２４０であり、ここには０ｘ６２（本発明の１つの実施形態において、ベクトル対応命令フォーマットを識別するのに用いられる固有値）が入っている。
【０１１１】
２〜４番目のバイト（ＥＶＥＸバイト１−３）は、特定の機能を提供する複数のビットフィールドを含む。
【０１１２】
ＲＥＸフィールド１３０５（ＥＶＥＸバイト１、ビット［７−５］）：ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）、及びＥＶＥＸ．Ｂビットフィールド（ＥＶＥＸバイト１、ビット［５］−Ｂ）から構成される。ＥＶＥＸ．Ｒビットフィールド、ＥＶＥＸ．Ｘビットフィールド、及びＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同じ機能を提供し、１の補数形式を用いて符号化される。すなわちＺＭＭ０は１１１１Ｂとして符号化され、ＺＭＭ１５は００００Ｂとして符号化される。当技術分野において知られているように、命令の他のフィールドは、レジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、及びｂｂｂ）を符号化し、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、及びＥＶＥＸ．Ｂを加えることで、Ｒｒｒｒ、Ｘｘｘｘ、Ｂｂｂｂが形成され得る。
【０１１３】
ＲＥＸ´フィールド１２１０：これはＲＥＸ´フィールド１２１０の１番目の部分であり、拡張された３２個のレジスタセットの上位１６又は下位１６を符号化するのに用いられるＥＶＥＸ．Ｒ´ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ´）である。本発明の１つの実施形態において、このビットは、以下に示されるように他のビットと共にビット反転フォーマットで格納され、（周知のｘ８６の３２ビットモードにおいて）ＢＯＵＮＤ命令と識別する。ＢＯＵＮＤ命令のリアルオペコードバイトは６２であるが、（後述の）ＭＯＤ  Ｒ／ＭフィールドにおいてＭＯＤフィールドの値１１を受け付けない。本発明の代替的な実施形態は、このビット及び他の以下に示されるビットを反転フォーマットで格納しない。１の値が、下位１６個のレジスタを符号化するのに用いられる。換言すると、ＥＶＥＸ．Ｒ´、ＥＶＥＸ．Ｒ、及び他のフィールドの他のＲＲＲを組み合わせことで、Ｒ´Ｒｒｒｒが形成される。
【０１１４】
オペコードマップフィールド１３１５（ＥＶＥＸバイト１、ビット［３：０  ］−ｍｍｍｍ）：このコンテンツは、暗黙の先頭オペコードバイト（０Ｆ、０Ｆ３８、又は０Ｆ３）を符号化する。
【０１１５】
データ要素幅フィールド１２６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）：ＥＶＥＸ．Ｗという表記によって表される。ＥＶＥＸ．Ｗは、データタイプ（３２ビットデータ要素又は６４ビットデータ要素）の粒度（サイズ）を規定するのに用いられる。
【０１１６】
ＥＶＥＸ．ｖｖｖｖ１３２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）：ＥＶＥＸ．ｖｖｖｖの役割は以下のことを含み得る。１）ＥＶＥＸ．ｖｖｖｖは、第１のソースレジスタオペランドを符号化し、反転（１の補数）形式で指定され、２又はそれより多くのソースオペランドを有する命令に有効である。２）ＥＶＥＸ．ｖｖｖｖは、デスティネーションレジスタオペランドを符号化し、特定のベクトルシフトについて１の補数形式で指定される。又は、３）ＥＶＥＸ．ｖｖｖｖはいかなるオペランドも符号化せず、フィールドは予約され１１１１ｂを含むはずである。したがって、ＥＶＥＸ．ｖｖｖｖフィールド１３２０は、反転（１の補数）形式で格納される第１のソースレジスタ指定子の下位ビット４つを符号化する。命令に応じて、追加の異なるＥＶＥＸビットフィールドが、指定子サイズを３２個のレジスタに拡張するのに用いられる。
【０１１７】
ＥＶＥＸ．Ｕクラスフィールド１２６８（ＥＶＥＸバイト２、ビット［２］−Ｕ）：ＥＶＥＸ．Ｕ＝０の場合にクラスＡ又はＥＶＥＸ．Ｕ０を示し、ＥＶＥＸ．Ｕ＝１の場合にクラスＢ又はＥＶＥＸ．Ｕ１を示す。
【０１１８】
プリフィックス符号化フィールド１３２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）：ベースオペレーションフィールドに追加のビットを提供する。ＥＶＥＸプリフィックスフォーマットのレガシＳＳＥ命令にサポートを提供することに加え、ＳＩＭＤプリフィックスを圧縮するという利点も有する（ＳＩＭＤプリフィックスを示すのに１バイトを必要とするのではなく、ＥＶＥＸプリフィックスは２ビットしか必要としない）。１つの実施形態において、レガシフォーマット及びＥＶＥＸプリフィックスフォーマットの両方でＳＩＭＤプリフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を用いるレガシＳＳＥ命令をサポートすべく、このレガシＳＩＭＤプリフィックスはＳＩＭＤプリフィックス符号化フィールドに符号化され、実行時には、デコーダのＰＬＡに提供される前にレガシＳＩＭＤプリフィックスに拡張される（そのため、ＰＬＡは、このレガシ命令のレガシフォーマットとＥＶＥＸフォーマットとの両方を変更せずに実行し得る）。より新たな命令がＥＶＥＸプリフィックス符号化フィールドのコンテンツをオペコード拡張として直接用いる場合があるが、特定の実施形態は一貫性のために同様の形式で拡張しても、このレガシＳＩＭＤプリフィックスによって指定される異なる目的を可能とする。代替的な実施形態は、２ビットＳＩＭＤプリフィックス符号化をサポートするようにＰＬＡを再設計してよく、したがって拡張を必要としない。
【０１１９】
アルファフィールド１２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ、ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．ｗｒｉｔｅ  ｍａｓｋ  ｃｏｎｔｒｏｌ、及びＥＶＥＸ．Ｎとしても知られ、αでも示される）：前述したように、このフィールドはコンテキスト固有である。
【０１２０】
ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、ＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒ１、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られ、βββでも示される）：前述したように、このフィールドはコンテキスト固有である。
【０１２１】
ＲＥＸ´フィールド１２１０：これは、ＲＥＸ´フィールドの残りであり、拡張された３２個のレジスタセットの上位１６又は下位１６を符号化するのに用いられ得るＥＶＥＸ．Ｖ´ビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ´）である。このビットは、ビット反転フォーマットで格納される。１の値が、下位１６個のレジスタを符号化するのに用いられる。換言すると、Ｖ´ＶＶＶＶは、ＥＶＥＸ．Ｖ´、ＥＶＥＸ．ｖｖｖｖを組み合わせることで形成される。
【０１２２】
書き込みマスクフィールド１２７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）：このコンテンツは、前述したように、書き込みマスクレジスタにおいてレジスタのインデックスを指定する。本発明の１つの実施形態において、特定値ＥＶＥＸ．ｋｋｋ＝０００は、どの書き込みマスクも特定の命令に用いられないことを示唆する特別な挙動を有する（これは、全て１に物理的に組み込まれた書き込みマスクの使用、又はマスキングハードウェアをバイパスするハードウェアの使用を含む様々な方法で実装され得る）。
【０１２３】
リアルオペコードフィールド１３３０（バイト４）はまた、オペコードバイトとしても知られている。そのオペコードの一部はこのフィールドに指定されている。
【０１２４】
ＭＯＤ  Ｒ／Ｍフィールド１３４０（バイト５）は、ＭＯＤフィールド１３４２、Ｒｅｇフィールド１３４４、及びＲ／Ｍフィールド１３４６を含む。前述したように、ＭＯＤフィールド１３４２のコンテンツは、メモリアクセスオペレーションと非メモリアクセスオペレーションとを識別する。Ｒｅｇフィールド１３４４の役割は、デスティネーションレジスタオペランド又はソースレジスタオペランドを符号化すること、あるいはオペコード拡張として扱われ、いかなる命令オペランドを符号化するのにも用いられないこと、という２つの状況に要約され得る。Ｒ／Ｍフィールド１３４６の役割は、メモリアドレスを参照する命令オペランドを符号化すること、あるいはデスティネーションレジスタオペランド又はソースレジスタオペランドを符号化することを含んでよい。
【０１２５】
スケール・インデックス・ベース（ＳＩＢ）バイト（バイト６）：前述したように、スケールフィールド１２５０のコンテンツは、メモリアドレス生成に用いられる。ＳＩＢ．ｘｘｘ１３５４及びＳＩＢ．ｂｂｂ１３５６：これらのフィールドのコンテンツは、レジスタインデックスＸｘｘｘ及びＢｂｂｂに関して前述されている。
【０１２６】
変位フィールド１２６２Ａ（バイト７−１０）：ＭＯＤフィールド１３４２に１０が入っている場合、バイト７−１０は変位フィールド１２６２Ａであり、これは、レガシ３２ビット変位（ｄｉｓｐ３２）と同じように機能し、バイト粒度で機能する。
【０１２７】
変位係数フィールド１２６２Ｂ（バイト７）：ＭＯＤフィールド１３４２に０１が入っている場合、バイト７は変位係数フィールド１２６２Ｂである。このフィールドの位置は、バイト粒度で機能するレガシｘ８６命令セットの８ビット変位（ｄｉｓｐ８）のものと同じである。ｄｉｓｐ８は符号拡張されているので、−１２８と１２７バイトとの間のオフセットをアドレス指定できるだけであり、６４バイトキャッシュラインに関しては、ｄｉｓｐ８は本当に有用な４つの値−１２８、−６４、０及び６４にだけ設定され得る８ビットを用いる。より広い範囲が必要となることが多いのでｄｉｓｐ３２が用いられるが、ｄｉｓｐ３２は４バイトを必要とする。ｄｉｓｐ８及びｄｉｓｐ３２と対照的に、変位係数フィールド１２６２Ｂはｄｉｓｐ８を再解釈したものであり、変位係数フィールド１２６２Ｂを用いる場合、実際の変位は、メモリオペランドアクセスのサイズ（Ｎ）を乗じた変位係数フィールドのコンテンツによって決定される。このタイプの変位は、ｄｉｓｐ８×Ｎと呼ばれる。これにより、平均命令長（変位のために用いられる単一のバイトであるが、はるかに広い範囲を有する）が減少する。そのような圧縮された変位は、有効変位がメモリアクセスの粒度の倍数であるという前提に基づいており、したがって、アドレスオフセットの冗長下位ビットは、符号化される必要がない。換言すると、変位係数フィールド１２６２Ｂは、レガシｘ８６命令セットの８ビット変位を代用する。したがって、変位係数フィールド１２６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８×Ｎにオーバーロードされることを唯一の例外として、ｘ８６命令セットの８ビット変位と同じように符号化される（そのため、ＭｏｄＲＭ／ＳＩＢ符号化ルールに変更はない）。換言すると、符号化ルール又は符号化長に変更はなく、ハードウェアによる変位値の解釈にだけ変更がある（これにより、バイト単位のアドレスオフセットを取得するために、メモリオペランドのサイズによって変位をスケーリングすることが必要となる）。
【０１２８】
即値フィールド１２７２は、前述したように作用する。
［フルオペコードフィールド］
【０１２９】
図１３Ｂは、本発明の１つの実施形態に従って、フルオペコードフィールド１２７４を構成する特定ベクトル対応命令フォーマット１３００のフィールドを示すブロック図である。具体的には、フルオペコードフィールド１２７４は、フォーマットフィールド１２４０、ベースオペレーションフィールド１２４２、及びデータ要素幅（Ｗ）フィールド１２６４を含む。ベースオペレーションフィールド１２４２は、プリフィックス符号化フィールド１３２５、オペコードマップフィールド１３１５、及びリアルオペコードフィールド１３３０を含む。
［レジスタインデックスフィールド］
【０１３０】
図１３Ｃは、本発明の１つの実施形態に従って、レジスタインデックスフィールド１２４４を構成する特定ベクトル対応命令フォーマット１３００のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド１２４４は、ＲＥＸフィールド１３０５、ＲＥＸ´フィールド１３１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド１３４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド１３４６、ＶＶＶＶフィールド１３２０、ｘｘｘフィールド１３５４、及びｂｂｂフィールド１３５６を含む。
［拡大オペレーションフィールド］
【０１３１】
図１３Ｄは、本発明の１つの実施形態に従って、拡大オペレーションフィールド１２５０を構成する特定ベクトル対応命令フォーマット１３００のフィールドを示すブロック図である。クラス（Ｕ）フィールド１２６８に０が入っている場合、これはＥＶＥＸ．Ｕ０（クラスＡ１２６８Ａ）を意味し、１が入っている場合には、ＥＶＥＸ．Ｕ１（クラスＢ１２６８Ｂ）を意味する。Ｕ＝０、且つＭＯＤフィールド１３４２に１１が入っている場合（非メモリアクセスオペレーションを意味する）、アルファフィールド１２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）はｒｓフィールド１２５２Ａと解釈される。ｒｓフィールド１２５２Ａに１が入っている場合（ラウンド１２５２Ａ．１）、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）はラウンド制御フィールド１２５４Ａと解釈される。ラウンド制御フィールド１２５４Ａは、１ビットのＳＡＥフィールド１２５６及び２ビットのラウンド演算フィールド１２５８を含む。ｒｓフィールド１２５２Ａに０が入っている場合（データ変換１２５２Ａ．２）、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は３ビットのデータ変換フィールド１２５４Ｂと解釈される。Ｕ＝０、且つＭＯＤフィールド１３４２に００、０１、又は１０が入っている場合（メモリアクセスオペレーションを意味する）、アルファフィールド１２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）はエビクションヒント（ＥＨ）フィールド１２５２Ｂと解釈され、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は３ビットのデータ操作フィールド１２５４Ｃと解釈される。
【０１３２】
Ｕ＝１の場合、アルファフィールド１２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は書き込みマスク制御（Ｚ）フィールド１２５２Ｃと解釈される。Ｕ＝１、且つＭＯＤフィールド１３４２に１１が入っている場合（非メモリアクセスオペレーションを意味する）、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［４］−Ｓ０）の一部はＲＬフィールド１２５７Ａと解釈され、１（ラウンド１２５７Ａ．１）が入っている場合には、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）の残りはラウンド演算フィールド１２５９Ａと解釈される。ＲＬフィールド１２５７Ａに０（ＶＳＩＺＥ１２５７．Ａ２）が入っている場合、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）の残りはベクトル長フィールド１２５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）と解釈される。Ｕ＝１、且つＭＯＤフィールド１３４２に００、０１、又は１０が入っている場合（メモリアクセスオペレーションを意味する）、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド１２５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）及びブロードキャストフィールド１２５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）と解釈される。
［例示的なレジスタアーキテクチャ］
【０１３３】
図１４は、本発明の１つの実施形態によるレジスタアーキテクチャ１４００のブロック図である。示される実施形態には、５１２ビット幅の３２個のベクトルレジスタ１４１０があり、これらのレジスタは、ｚｍｍ０〜ｚｍｍ３１と参照符号が付けられている。下位１６個のｚｍｍレジスタの下位２５６ビットは、レジスタｙｍｍ０〜１５にオーバーレイされる。下位１６個のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０〜１５にオーバーレイされる。特定ベクトル対応命令フォーマット１３００は、以下の表に示されるように、これらのオーバーレイされたレジスタファイルを処理する。
【表３】
0006696674.tif 000008
【０１３４】
換言すると、ベクトル長フィールド１２５９Ｂは、最大長さと１つ又は複数の他のより短い長さとの間から選択し、このようなより短い長さはそれぞれ、前述の長さの半分の長さであり、ベクトル長フィールド１２５９Ｂを用いない命令テンプレートは、最大ベクトル長を処理する。さらに１つの実施形態において、特定ベクトル対応命令フォーマット１３００のクラスＢ命令テンプレートは、パックド又はスカラ単精度／倍精度浮動小数点データ、及びパックド又はスカラ整数データを処理する。スカラ演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタ内の最下位データ要素位置において実行される演算であり、上位のデータ要素位置は、実施形態に応じて、命令の前と同じ状態のままにされるか又はゼロ設定される。
【０１３５】
書き込みマスクレジスタ１４１５：示される実施形態には、８個の書き込みマスクレジスタ（ｋ０〜ｋ７）があり、それぞれのサイズは６４ビットである。代替的な実施形態において、書き込みマスクレジスタ１４１５のサイズは１６ビットである。前述したように、本発明の１つの実施形態において、ベクトルマスクレジスタｋ０は書き込みマスクとして用いられることができず、ｋ０を標準的に示すであろう符号化が書き込みマスクに用いられる場合、これは、物理的に組み込まれた０ｘＦＦＦＦという書き込みマスクを選択し、当該命令用の書き込みマスクを事実上無効にする。
【０１３６】
汎用レジスタ１４２５：示される実施形態には、メモリオペランドをアドレス指定する既存のｘ８６アドレッシングモードと共に用いられる１６個の６４ビット汎用レジスタが存在する。これらのレジスタには、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、及びＲ８〜Ｒ１５という名称で参照符号が付けられている。
【０１３７】
ＭＭＸパックド整数フラットレジスタファイル１４５０がエイリアスされるスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）１４４５：示される実施形態において、ｘ８７スタックは、ｘ８７命令セット拡張を用いて３２／６４／８０ビット浮動小数点データに対してスカラ浮動小数点演算を実行するのに用いられる８要素スタックである。一方、ＭＭＸレジスタは、６４ビットパックド整数データに対して演算を実行するのに用いられ、さらにＭＭＸとＸＭＭレジスタとの間で実行される一部の演算用にオペランドを保持するのに用いられる。
【０１３８】
本発明の代替的な実施形態は、より広いレジスタを用いても、又はより狭いレジスタを用いてもよい。さらに、本発明の代替的な実施形態は、より多くのレジスタファイル、より少ないレジスタファイル、又は異なるレジスタファイル及びレジスタを用いてもよい。
［例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ］
【０１３９】
プロセッサコアは、異なる方法で、異なる目的のために、異なるプロセッサに実装されてよい。例えば、そのようなコアの実装は、１）汎用計算を対象とした汎用インオーダコア、２）汎用計算を対象とした高性能汎用アウトオブオーダコア、３）グラフィックス及び／又は科学（スループット）計算を主に対象とした専用コアを含んでよい。異なるプロセッサの実装は、１）汎用計算を対象とした１つ又は複数の汎用インオーダコア、及び／又は、汎用計算を対象とした１つ又は複数の汎用アウトオブオーダコアを含むＣＰＵ、並びに２）グラフィックス及び／又は科学（スループット）を主に対象とした１つ又は複数の専用コアを含むコプロセッサを含んでよい。そのような異なるプロセッサによって異なるコンピュータシステムアーキテクチャがもたらされるが、それは次のようなものを含んでよい。１）ＣＰＵとは別個のチップに搭載されたコプロセッサ、２）ＣＰＵと同じパッケージ内の別個のダイに搭載されたコプロセッサ、３）ＣＰＵと同じダイに搭載されたコプロセッサ（この場合、そのようなコプロセッサは専用ロジックと呼ばれることがあり、例えば統合グラフィックスロジック及び／又は科学（スループット）ロジック、あるいは専用コアなどがある）、及び４）説明されたＣＰＵ（アプリケーションコア又はアプリケーションプロセッサと呼ばれることがある）、上述のコプロセッサ、及び追加機能を同じダイ上に含み得るシステムオンチップである。例示的なコアアーキテクチャが次に説明され、その後に例示的なプロセッサ及びコンピュータアーキテクチャの説明が続く。
［例示的なコアアーキテクチャ］
［インオーダコア及びアウトオブオーダコアのブロック図］
【０１４０】
図１５Ａは、本発明の実施形態に従って、例示的なインオーダパイプラインと、例示的なレジスタリネーミング・アウトオブオーダ発行／実行パイプラインとの両方を示すブロック図である。図１５Ｂは、本発明の実施形態に従って、プロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング・アウトオブオーダ発行／実行アーキテクチャコアとの両方を示すブロック図である。図１５Ａ〜図１５Ｂの実線で示されたボックスは、インオーダパイプライン及びインオーダコアを示す。一方、破線で示されたボックスの任意の追加は、レジスタリネーミング・アウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダ態様はアウトオブオーダ態様のサブセットであると仮定して、アウトオブオーダ態様が説明される。
【０１４１】
図１５Ａにおいて、プロセッサパイプライン１５００は、フェッチステージ１５０２、レングス復号ステージ１５０４、復号ステージ１５０６、割り当てステージ１５０８、リネーミングステージ１５１０、スケジューリング（ディスパッチ又は発行としても知られる）ステージ１５１２、レジスタ読み出し／メモリ読み出しステージ１５１４、実行ステージ１５１６、ライトバック／メモリ書き込みステージ１５１８、例外処理ステージ１５２２、及びコミットステージ１５２４を含む。
【０１４２】
図１５Ｂは、実行エンジンユニット１５５０に結合されたフロントエンドユニット１５３０を含むプロセッサコア１５９０を示し、両方ともメモリユニット１５７０に結合されている。コア１５９０は、縮小命令セット計算（ＲＩＳＣ）コア、複合命令セット計算（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、あるいはハイブリッド又は代替的なコアタイプであってよい。さらに別の選択肢として、コア１５９０は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用計算グラフィックス処理ユニット（ＧＰＧＰＵ）コア、グラフィックスコアなどの専用コアであってもよい。
【０１４３】
フロントエンドユニット１５３０は、命令キャッシュユニット１５３４に結合された分岐予測ユニット１５３２を含み、命令キャッシュユニット１５３４は命令変換ルックアサイドバッファ（ＴＬＢ）１５３６に結合され、命令変換ルックアサイドバッファ（ＴＬＢ）１５３６は命令フェッチユニット１５３８に結合され、命令フェッチユニット１５３８は復号ユニット１５４０に結合されている。復号ユニット１５４０（又はデコーダ）は、複数の命令を復号し、１つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成し得る。これらは、元の命令から復号され、又は別の方法で元の命令を反映し、又は元の命令から導出される。復号ユニット１５４０は、様々な異なるメカニズムを用いて実装されてよい。適切なメカニズムの例には、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）などが含まれる。１つの実施形態において、コア１５９０は、特定のマクロ命令用のマイクロコードを（例えば、復号ユニット１５４０の中に、そうでなければフロントエンドユニット１５３０内に）格納するマイクロコードＲＯＭ又は他の媒体を含む。復号ユニット１５４０は、実行エンジンユニット１５５０内のリネーム／アロケータユニット１５５２に結合されている。
【０１４４】
実行エンジンユニット１５５０は、リタイアメントユニット１５５４と、１つ又は複数のスケジューラユニット１５５６のセットとに結合されたリネーム／アロケータユニット１５５２を含む。スケジューラユニット１５５６は、リザベーションステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット１５５６は、物理レジスタファイルユニット１５５８に結合されている。物理レジスタファイルユニット１５５８のそれぞれは、１つ又は複数の物理レジスタファイルを表し、そのそれぞれ異なる物理レジスタファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）など、１つ又は複数の異なるデータタイプを格納する。１つの実施形態において、物理レジスタファイルユニット１５５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイルユニット１５５８は、リタイアメントユニット１５５４によってオーバーラップされ、レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な方法を示す（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いる、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いる、並びにレジスタマップ及びレジスタのプールを用いるなど）。リタイアメントユニット１５５４及び物理レジスタファイルユニット１５５８は、実行クラスタ１５６０に結合されている。実行クラスタ１５６０は、１つ又は複数の実行ユニット１５６２のセットと、１つ又は複数のメモリアクセスユニット１５６４のセットとを含む。実行ユニット１５６２は、様々な演算（例えば、シフト、加算、減算、乗算）を様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に実行してよい。いくつかの実施形態は、特定の機能又は機能のセットに専用の複数の実行ユニットを含んでよく、他の実施形態は、１つのみの実行ユニット、又は全ての機能を全て実行する複数の実行ユニットを含んでもよい。特定の実施形態は、特定のタイプのデータ／オペレーションに対して別個のパイプラインを形成するので、スケジューラユニット１５５６、物理レジスタファイルユニット１５５８、及び実行クラスタ１５６０は、可能性として複数であると示されている（例えば、スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／又はメモリアクセスパイプラインはそれぞれ、独自のスケジューラユニット、物理レジスタファイルユニット、及び／又は実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット１５６４を有する特定の実施形態が実装される）。別個のパイプラインが用いられる場合、これらのパイプラインのうち１つ又は複数がアウトオブオーダ発行／実行であってよく、残りがインオーダであってもよいことも理解されるべきである。
【０１４５】
メモリアクセスユニット１５６４のセットがメモリユニット１５７０に結合され、メモリユニット１５７０は、レベル２（Ｌ２）キャッシュユニット１５７６に結合されたデータキャッシュユニット１５７４に結合されたデータＴＬＢユニット１５７２を含む。１つの例示的な実施形態において、メモリアクセスユニット１５６４は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでよく、これらのそれぞれはメモリユニット１５７０内のデータＴＬＢユニット１５７２に結合されている。命令キャッシュユニット１５３４は、メモリユニット１５７０内のレベル２（Ｌ２）キャッシュユニット１５７６にさらに結合される。Ｌ２キャッシュユニット１５７６は、１つ又は複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
【０１４６】
例として、例示的なレジスタリネーミング・アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン１５００を以下のように実装してよい。すなわち、１）命令フェッチ１５３８がフェッチステージ１５０２及びレングス復号ステージ１５０４を実行する。２）復号ユニット１５４０が復号ステージ１５０６を実行する。３）リネーム／アロケータユニット１５５２が割り当てステージ１５０８及びリネーミングステージ１５１０を実行する。４）スケジューラユニット１５５６がスケジュールステージ１５１２を実行する。５）物理レジスタファイルユニット１５５８及びメモリユニット１５７０がレジスタ読み出し／メモリ読み出しステージ１５１４を実行する。実行クラスタ１５６０が実行ステージ１５１６を実行する。６）メモリユニット１５７０及び物理レジスタファイルユニット１５５８がライトバック／メモリ書き込みステージ１５１８を実行する。７）様々なユニットが例外処理ステージ１５２２に関与し得る。８）リタイアメントユニット１５５４及び物理レジスタファイルユニット１５５８がコミットステージ１５２４を実行する。
【０１４７】
コア１５９０は、本明細書で説明される命令を含む１つ又は複数の命令セット（例えば、ｘ８６命令セット（より新たなバージョンと共に追加されたいくつかの拡張を有する）、ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ（カリフォルニア州／サニーベール）のＭＩＰＳ命令セット、ＡＲＭ  Ｈｏｌｄｉｎｇｓ（カリフォルニア州／サニーベール）のＡＲＭ命令セット（ＮＥＯＮなどの任意の追加拡張を有する））をサポートしてよい。１つの実施形態において、コア１５９０はパックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、それによって多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能にする。
【０１４８】
コアはマルチスレッディング（オペレーション又はスレッドからなる２つ又はそれより多くの並列セットを実行）をサポートしてよく、タイムスライスマルチスレッディング、同時マルチスレッディング（物理コアが同時にマルチスレッディングしているスレッドのそれぞれに対して、単一の物理コアが論理コアを提供する）、又はこれらの組み合わせ（例えば、タイムスライスフェッチ及び復号、並びにそれ以降のＩｎｔｅｌ（登録商標）ハイパースレッディング・テクノロジーなどの同時マルチスレッディング）を含む様々な方法でサポートしてよいことが理解されるべきである。
【０１４９】
レジスタリネーミングがアウトオブオーダ実行との関連で説明されるが、レジスタリネーミングはインオーダアーキテクチャで用いられてもよいことが理解されるべきである。示されたプロセッサの実施形態はまた、別々の命令キャッシュユニット１５３４とデータキャッシュユニット１５７４、並びに共有Ｌ２キャッシュユニット１５７６を含むが、代替的な実施形態は、命令及びデータの両方に対して、例えばレベル１（Ｌ１）内部キャッシュ又は複数のレベルの内部キャッシュなど、単一の内部キャッシュを有してもよい。実施形態によっては、システムは、内部キャッシュ及び外部キャッシュの組み合わせを含んでよく、外部キャッシュはコア及び／又はプロセッサの外部に存在する。あるいは、全てのキャッシュが、コア及び／又はプロセッサの外部にあってもよい。
［具体的な例示的インオーダコアアーキテクチャ］
【０１５０】
図１６Ａ〜図１６Ｂは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック（同じタイプ及び／又は異なるタイプの他のコアを含む）の１つになるであろう。論理ブロックは、用途に応じて、高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を通じて、何らかの固定機能ロジック、メモリＩ／Ｏインタフェース、及び他の必要なＩ／Ｏロジックと通信する。
【０１５１】
図１６Ａは、本発明の実施形態による単一のプロセッサコアのブロック図であり、オンダイ相互接続ネットワーク１６０２への接続に加え、レベル２（Ｌ２）キャッシュ１６０４のローカルサブセットを有する。１つの実施形態において、命令デコーダ１６００はパックドデータ命令セット拡張を用いてｘ８６命令セットをサポートする。Ｌ１キャッシュ１６０６によって、キャッシュメモリからスカラユニット及びベクトルユニットへの低レイテンシアクセスが可能となる。１つの実施形態において、（設計の単純化のために）スカラユニット１６０８及びベクトルユニット１６１０が、別々のレジスタセット（それぞれ、複数のスカラレジスタ１６１２及び複数のベクトルレジスタ１６１４）を用い、これらの間で転送されるデータはメモリに書き込まれ、その後、レベル１（Ｌ１）キャッシュ１６０６から読み戻されるが、本発明の代替的な実施形態は、異なる手法を用いてよい（例えば、単一のレジスタセットを用いる、又は書き込み及び読み戻しを行うことなく、２つのレジスタファイル間でのデータ転送を可能にする通信経路を含む）。
【０１５２】
Ｌ２キャッシュのローカルサブセット１６０４は、別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部であり、プロセッサコアごとに１つである。各プロセッサコアは、独自のＬ２キャッシュのローカルサブセット１６０４に直接アクセスする経路を有する。プロセッサコアにより読み出されたデータは、Ｌ２キャッシュサブセット１６０４に格納され、他のプロセッサコアが独自のローカルＬ２キャッシュサブセットにアクセスするのと並行して、高速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、独自のＬ２キャッシュサブセット１６０４に格納され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは双方向性であり、プロセッサコア、Ｌ２キャッシュ、及び他の論理ブロックなどのエージェントが、チップ内で互いに通信することを可能にする。各リングデータ経路は、方向ごとに１０１２ビット幅である。
【０１５３】
図１６Ｂは、本発明の実施形態による図１６Ａのプロセッサコアに関する部分拡大図である。図１６Ｂは、Ｌ１キャッシュ１６０４の一部であるＬ１データキャッシュ１６０６Ａと、ベクトルユニット１６１０及びベクトルレジスタ１６１４に関するより詳細とを含む。具体的には、ベクトルユニット１６１０は１６幅のベクトル処理ユニット（ＶＰＵ）（１６幅のＡＬＵ１６２８を参照）であり、整数命令、単精度浮動小数点命令、及び倍精度浮動小数点命令のうち１つ又は複数を実行する。ＶＰＵは、スウィズルユニット１６２０を用いたレジスタ入力のスウィズル処理、数値変換ユニット１６２２Ａ〜１６２２Ｂを用いた数値変換、並びに複製ユニット１６２４を用いたメモリ入力の複製をサポートする。書き込みマスクレジスタ１６２６は、結果として生じるベクトル書き込みをプレディケートする（ｐｒｅｄｉｃａｔｅｉｎｇ  ）ことを可能にする。
［統合メモリコントローラ及び統合グラフィックスを有するプロセッサ］
【０１５４】
図１７は、本発明の実施形態によるプロセッサ１７００のブロック図であり、これは１つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよい。図１７の実線で示されたボックスは、単一のコア１７０２Ａ、システムエージェント１７１０、１つ又は複数のバスコントローラユニット１７１６のセットを有するプロセッサ１７００を示し、破線で示されたボックスの任意の追加は、複数のコア１７０２Ａ〜１７０２Ｎ、システムエージェントユニット１７１０内にある１つ又は複数の統合メモリコントローラユニット１７１４のセット、及び専用ロジック１７０８を有する代替プロセッサ１７００を示す。
【０１５５】
したがって、プロセッサ１７００の異なる実装は、１）専用ロジック１７０８が統合グラフィックス及び／又は科学（スループット）ロジック（１つ又は複数のコアを含んでよい）であり、コア１７０２Ａ〜１７０２Ｎが１つ又は複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、その２つの組み合わせ）であるＣＰＵ、２）コア１７０２Ａ〜１７０２Ｎが、グラフィックス及び／又は科学（スループット）を主に対象とした多数の専用コアであるコプロセッサ、並びに３）コア１７０２Ａ〜１７０２Ｎが多数の汎用インオーダコアであるコプロセッサを含んでよい。したがって、プロセッサ１７００は汎用プロセッサ、コプロセッサであってよく、あるいは専用プロセッサ、例えばネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループットの多数統合コア（ＭＩＣ）コプロセッサ（３０個又はそれより多くのコアを含む）、組み込みプロセッサなどであってもよい。プロセッサは、１つ又は複数のチップ上に実装されてよい。プロセッサ１７００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、又はＮＭＯＳなどの複数のプロセス技術のいずれかを用いる１つ又は複数の基板の一部であってよく、及び／又は当該基板上に実装されてもよい。
【０１５６】
メモリ階層は、コア内にある１つ又は複数のレベルのキャッシュと、共有キャッシュユニット１７０６のセットあるいは１つ又は複数の共有キャッシュユニット１７０６と、統合メモリコントローラユニット１７１４のセットに結合された外部メモリ（不図示）とを含む。共有キャッシュユニット１７０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、又は他のレベルのキャッシュなど、１つ又は複数の中間レベルのキャッシュ、又は他のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、及び／又はこれらの組み合わせを含んでよい。１つの実施形態において、リングベースの相互接続ユニット１７１２が、統合グラフィックスロジック１７０８、共有キャッシュユニット１７０６のセット、及びシステムエージェントユニット１７１０／統合メモリコントローラユニット１７１４を相互接続するが、代替的な実施形態は、このようなユニットを相互接続するのに任意の数の周知技術を用いてよい。１つの実施形態において、１つ又は複数のキャッシュユニット１７０６と、コア１７０２Ａ〜１７０２Ｎとの間でコヒーレンシが維持される。
【０１５７】
実施形態によっては、コア１７０２Ａ〜１７０２Ｎのうち１つ又は複数がマルチスレッディング可能である。システムエージェント１７１０は、コア１７０２Ａ〜１７０２Ｎを調整し動作させるこうした構成要素を含む。システムエージェントユニット１７１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含んでよい。ＰＣＵは、コア１７０２Ａ〜１７０２Ｎ及び統合グラフィックスロジック１７０８の電力状態を管理するのに必要なロジック及び構成要素であってよく、又は当該ロジック及び当該構成要素を含んでもよい。ディスプレイユニットは、外部接続された１つ又は複数のディスプレイを駆動するためのものである。
【０１５８】
コア１７０２Ａ〜１７０２Ｎは、アーキテクチャ命令セットに関して同種でも異種でもよい。すなわち、コア１７０２Ａ〜１７０２Ｎのうち２つ又はそれより多くは同じ命令セットを実行することが可能であってよいが、他のものはその命令セットのサブセット又は別の命令セットだけを実行することが可能であってもよい。
［例示的なコンピュータアーキテクチャ］
【０１５９】
図１８〜図２１は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ型ＰＣ、デスクトップ型ＰＣ、ハンドヘルド型ＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルド型デバイス、及び様々な他の電子デバイス向けの当技術分野において知られる他のシステム設計及び構成も適している。概して、本明細書に開示されるプロセッサ及び／又は他の実行ロジックを組み込むことが可能である多様なシステム又は電子デバイスが一般的に適している。
【０１６０】
ここで図１８を参照すると、本発明の１つの実施形態によるシステム１８００のブロック図が示されている。システム１８００は、１つ又は複数のプロセッサ１８１０、１８１５を含んでよく、これらはコントローラハブ１８２０に結合されている。１つの実施形態において、コントローラハブ１８２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ）１８９０と、入力／出力ハブ（ＩＯＨ）１８５０（これは別個のチップ上にあってよい）とを含む。ＧＭＣＨ１８９０は、メモリ及びグラフィックスコントローラを含み、これらにメモリ１８４０及びコプロセッサ１８４５が結合されている。ＩＯＨ１８５０は入力／出力（Ｉ／Ｏ）デバイス１８６０をＧＭＣＨ１８９０に結合する。あるいは、メモリ及びグラフィックスコントローラの一方又は両方が、（本明細書に説明されるように）プロセッサ内に統合され、メモリ１８４０及びコプロセッサ１８４５は、プロセッサ１８１０と、ＩＯＨ１８５０と共に単一チップに入ったコントローラハブ１８２０とに直接結合される。
【０１６１】
任意的な性質の追加のプロセッサ１８１５は、図１８に破線で示されている。各プロセッサ１８１０、１８１５は、本明細書で説明される処理コアのうち１つ又は複数を含んでよく、何らかのバージョンのプロセッサ１７００であってよい。
【０１６２】
メモリ１８４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、又はこの２つの組み合わせであってよい。少なくとも１つの実施形態では、コントローラハブ１８２０は、フロントサイドバス（ＦＳＢ）などのマルチドロップバス、ＱｕｉｃｋＰａｔｈ相互接続（ＱＰＩ）などのポイントツーポイントインタフェース、又は同種の接続１８９５を介してプロセッサ１８１０、１８１５と通信する。
【０１６３】
１つの実施形態において、コプロセッサ１８４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどの専用プロセッサである。１つの実施形態において、コントローラハブ１８２０は統合グラフィックスアクセラレータを含んでよい。
【０１６４】
物理リソース１８１０と１８１５との間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、電力消費特性などを含む広範な価値基準に関して、様々な差異が存在し得る。
【０１６５】
１つの実施形態において、プロセッサ１８１０は、一般的タイプのデータ処理オペレーションを制御する命令を実行する。この命令内にコプロセッサ命令が組み込まれてもよい。プロセッサ１８１０は、このコプロセッサ命令を、付属のコプロセッサ１８４５が実行すべきタイプの命令であると認識する。したがって、プロセッサ１８１０は、このコプロセッサ命令（又はコプロセッサ命令を表す制御信号）をコプロセッサバス又は他の相互接続を使ってコプロセッサ１８４５に発行する。コプロセッサ１８４５は、受信したコプロセッサ命令を受け付けて実行する。
【０１６６】
ここで図１９を参照すると、本発明の実施形態に従って、より具体的な第１の例示的なシステム１９００のブロック図が示されている。図１９に示されるように、マルチプロセッサシステム１９００はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１９５０を介して結合される第１のプロセッサ１９７０と、第２のプロセッサ１９８０とを含む。プロセッサ１９７０及び１９８０のそれぞれは、何らかのバージョンのプロセッサ１７００であってよい。本発明の１つの実施形態において、プロセッサ１９７０及び１９８０はそれぞれ、プロセッサ１８１０及び１８１５であり、コプロセッサ１９３８はコプロセッサ１８４５である。別の実施形態において、プロセッサ１９７０及び１９８０はそれぞれ、プロセッサ１８１０及びコプロセッサ１８４５である。
【０１６７】
プロセッサ１９７０及び１９８０は、統合メモリコントローラ（ＩＭＣ）ユニット１９７２及び１９８２をそれぞれ含んで示されている。プロセッサ１９７０はまた、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース１９７６及び１９７８を含み、同様に第２のプロセッサ１９８０はＰ−Ｐインタフェース１９８６及び１９８８を含む。プロセッサ１９７０、１９８０は、ポイントツーポイント（Ｐ−Ｐ）インタフェース１９５０を介し、Ｐ−Ｐインタフェース回路１９７８、１９８８を用いて情報を交換してよい。図１９に示されるように、ＩＭＣ１９７２及び１９８２は、プロセッサをそれぞれのメモリ、すなわちメモリ１９３２及びメモリ１９３４に結合する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
【０１６８】
プロセッサ１９７０、１９８０はそれぞれ、個々のＰ−Ｐインタフェース１９５２、１９５４を介し、ポイントツーポイントインタフェース回路１９７６、１９９４、１９８６、１９９８を用いてチップセット１９９０と情報を交換してよい。チップセット１９９０は任意で、高性能インタフェース１９３９を介してコプロセッサ１９３８と情報を交換してよい。１つの実施形態において、コプロセッサ１９３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどの専用プロセッサである。
【０１６９】
共有キャッシュ（不図示）がどちらかのプロセッサに含まれても、又は両方のプロセッサの外部に含まれてもよく、さらにＰ−Ｐ相互接続を介してこれらのプロセッサに接続されてもよい。これにより、プロセッサが低電力モードに置かれている場合に、どちらかのプロセッサ又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
【０１７０】
チップセット１９９０は、インタフェース１９９６を介して第１のバス１９１６に結合されてよい。１つの実施形態において、第１のバス１９１６は、ペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）バス、あるいはＰＣＩエクスプレスバス又は別の第３世代Ｉ／Ｏ相互接続バスなどのバスであってよいが、本発明の範囲はそのように限定されてはいない。
【０１７１】
図１９に示されるように、第１のバス１９１６を第２のバス１９２０に結合するバスブリッジ１９１８と共に、様々なＩ／Ｏデバイス１９１４が第１のバス１９１６に結合されてよい。１つの実施形態において、１つ又は複数の追加のプロセッサ１９１５が第１のバス１９１６に結合される。追加のプロセッサとは、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えば、グラフィックスアクセラレータ、又はデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイ、又はその他のプロセッサなどである。１つの実施形態において、第２のバス１９２０はローピンカウント（ＬＰＣ）バスであってよい。様々なデバイスが第２のバス１９２０に結合されてよく、１つの実施形態において、そのようなデバイスには例えば、キーボード及び／又はマウス１９２２、通信デバイス１９２７、及びストレージユニット１９２８が含まれ、ストレージユニットには、命令／コード及びデータ１９３０を含み得るディスクドライブ又は他の大容量ストレージデバイスなどがある。さらに、オーディオＩ／Ｏ１９２４が第２のバス１９２０に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図１９のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバスアーキテクチャ又は他のそのようなアーキテクチャを実装してよい。
【０１７２】
ここで図２０を参照すると、本発明の実施形態に従って、より具体的な第２の例示的なシステム２０００のブロック図が示されている。図１９及び図２０内の同様の要素は同様の参照番号を有しており、図１９の特定の態様が、図２０の他の態様をあいまいにしないように、図２０から省略されている。
【０１７３】
図２０は、プロセッサ１９７０、１９８０がそれぞれ、統合メモリと、Ｉ／Ｏ制御ロジック（「ＣＬ」）１９７２及び１９８２とを含んでよいことを示す。したがって、ＣＬ１９７２、１９８２は統合メモリコントローラユニットを含み、且つＩ／Ｏ制御ロジックを含む。図２０は、メモリ１９３２、１９３４だけがＣＬ１９７２、１９８２に結合されているのでなく、Ｉ／Ｏデバイス２０１４もまた、制御ロジック１９７２、１９８２に結合されていることを示している。レガシＩ／Ｏデバイス２０１５がチップセット１９９０に結合されている。
【０１７４】
ここで図２１を参照すると、本発明の実施形態に従ってＳｏＣ２１００のブロック図が示されている。図１７内の同種の要素は同様の参照番号を有している。また、破線で示されるボックスは、より高度なＳｏＣにおける任意の機能である。図２１において、相互接続ユニット２１０２が、１つ又は複数のコア１７０２Ａ〜１７０２Ｎ及び共有キャッシュユニット１７０６のセットを含むアプリケーションプロセッサ２１１０と、システムエージェントユニット１７１０と、バスコントローラユニット１７１６と、統合メモリコントローラユニット１７１４と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及び映像プロセッサを含み得る１つ又は複数のコプロセッサ２１２０又はそのセットと、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット２１３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット２１３２と、１つ又は複数の外部ディスプレイに結合するためのディスプレイユニット２１４０とに結合されている。１つの実施形態において、コプロセッサ２１２０は専用プロセッサを含み、例えば、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組み込みプロセッサなどがある。
【０１７５】
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装手法の組み合わせで実装されてよい。本発明の実施形態は、少なくとも１つのプロセッサと、ストレージシステム（揮発性メモリ及び不揮発性メモリ、及び／又は記憶素子を含む）と、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスとを有するプログラマブルシステム上で実行されるコンピュータプログラム又はプログラムコードとして実装されてよい。
【０１７６】
図１９に示されるコード１９３０などのプログラムコードは、本明細書で説明される機能を実行し、出力情報を生成する命令を入力するのに適用されてよい。出力情報は、１つ又は複数の出力デバイスに既知の方法で適用されてよい。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０１７７】
プログラムコードは、処理システムと通信すべく、高水準の手続き型又はオブジェクト指向型プログラミング言語で実装されてよい。プログラムコードはまた、必要に応じて、アセンブリ言語又は機械語で実装されてよい。実際には、本明細書で説明されるメカニズムは、いかなる特定のプログラミング言語にも範囲を限定されてはいない。どのような場合でも、言語はコンパイラ型言語又はインタプリタ型言語であってよい。
【０１７８】
少なくとも１つの実施形態の１つ又は複数の態様は、機械可読媒体に格納された典型的な命令により実装されてよい。この命令は、プロセッサ内の様々なロジックを表し、機械により読み出されると、本明細書で説明される技術を実行すべく機械にロジックを作成させる。「ＩＰコア」として知られるそのような表現は、有形の機械可読媒体に格納され、ロジック又はプロセッサを実際に作成する製造装置にロードすべく、様々な顧客又は製造施設に供給されてよい。
【０１７９】
そのような機械可読記憶媒体は、限定されることなく、機械又は装置により製造される又は形成される非一時的な有形の構成の物品を含んでよく、そのような物品には、ハードディスクや、フロッピ（登録商標）ディスク、光ディスク、コンパクトディスク・リードオンリメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク・リライタブル（ＣＤ−ＲＷ）、及び光磁気ディスクを含むその他のタイプのディスク、半導体デバイスとして、例えば、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）やスタティックランダムアクセスメモリ（ＳＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）など、磁気カード又は光カード、又は電子命令を格納するのに適したその他のタイプの媒体などの記憶媒体を含む。
【０１８０】
したがって、本発明の実施形態はまた、命令を含んだ、又はハードウェア記述言語（ＨＤＬ）などの設計データを含んだ非一時的な有形の機械可読媒体を含む。ＨＤＬは、本明細書で説明される構造、回路、装置、プロセッサ、及び／又はシステム機能を規定する。そのような実施形態はまた、プログラム製品と呼ばれ得る。
［エミュレーション（バイナリ変換、コードモーフィングなどを含む）］
【０１８１】
場合によっては、命令をソース命令セットからターゲット命令セットに変換するのに命令変換器が用いられてよい。例えば命令変換器は、ある命令を、コアによって処理される１つ又は複数の他の命令に翻訳（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる）、モーフィング、エミュレーション、又は別の方法で変換してよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令変換器は、プロセッサ上にあっても、プロセッサ外にあっても、又は一部がプロセッサ上にあり且つ一部がプロセッサ外にあってもよい。
【０１８２】
図２２は、本発明の実施形態に従って、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令変換器の使用法を対比するブロック図である。図示された実施形態では、命令変換器はソフトウェア命令変換器であるが、代わりに命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてもよい。図２２は、高水準言語２２０２のプログラムがｘ８６コンパイラ２２０４を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ２２１６によってネイティブに実行され得るｘ８６バイナリコード２２０６を生成し得ることを示す。少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ２２１６は、少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサと実質的に同じ結果を実現すべく、（１）Ｉｎｔｅｌ（登録商標）ｘ８６命令セットコアの命令セットの大部分、又は（２）少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサ上で動作することを目的としたオブジェクトコード形式のアプリケーション又は他のソフトウェアを、互換的に実行する、又は別の方法で処理することで、少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。ｘ８６コンパイラ２２０４は、追加のリンケージ処理をしてもしなくても、少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ２２１６上で実行され得るｘ８６バイナリコード２２０６（例えば、オブジェクトコード）を生成するよう動作可能なコンパイラを表す。同様に、図２２は、高水準言語２２０２のプログラムが、別の命令セットコンパイラ２２０８を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコアを搭載しないプロセッサ２２１４（例えば、ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ（カリフォルニア州／サニーベール）のＭＩＰＳ命令セットを実行するコア、及び／又は、ＡＲＭ  Ｈｏｌｄｉｎｇｓ（カリフォルニア州／サニーベール）のＡＲＭ命令セットを実行するコアを搭載したプロセッサ）によりネイティブに実行され得る別の命令セットバイナリコード２２１０を生成し得ることを示す。命令変換器２２１２は、ｘ８６バイナリコード２２０６を、ｘ８６命令セットコアを搭載しないプロセッサ２２１４によりネイティブに実行され得るコードに変換するのに用いられる。この変換されたコードは、別の命令セットバイナリコード２２１０と同じになる可能性は低い。なぜなら、同じにできる命令変換器を作るのは難しいからである。しかし、変換されたコードは一般的なオペレーションを実現し、別の命令セットの命令で構成される。したがって、命令変換器２２１２は、エミュレーション、シミュレーション、又はその他の処理を通じて、ｘ８６命令セットプロセッサ又はコアを持たないプロセッサ又は他の電子デバイスがｘ８６バイナリコード２２０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
【０１８３】
図５〜図１０のいずれかについて説明された構成要素、特徴、及び詳細はまた、図３〜図４のいずれかに任意で適用されてよい。さらに、複数の装置のいずれかについて説明された構成要素、特徴、及び詳細はまた、複数の方法のいずれかに任意で適用されてよく、その方法は複数の実施形態において、そのような装置によって及び／又はそのような装置を用いて実行され得る。本明細書で説明されるプロセッサのいずれも、システムオンチップ（ＳｏＣ）及び／又は本明細書で開示されるコンピュータシステム、及び／又は他のコンピュータシステム（例えば、デスクトップ又は携帯電話）、及び／又は他のＳｏＣのいずれかに含まれてよい。実施形態によっては、コンピュータシステムは、相互接続と、当該相互接続に結合されたプロセッサと、当該相互接続に結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）とを含んでよい。あるいは、ＤＲＡＭの代わりに、リフレッシュする必要がない他のタイプの揮発性メモリが用いられてよく、又はフラッシュメモリが用いられてもよい。任意で、ＳｏＣ内のプロセッサとオンダイ又はオンチップに統合され得る又はそこに含まれ得る他の構成要素の例には、限定されないが、メモリコントローラ、メモリ（例えば、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、及び／又はフラッシュメモリ）、グラフィックスデバイス（例えば、グラフィックス処理ユニット（ＧＰＵ）、グラフィックスコア、又はグラフィックスプロセッサなど）、デジタル信号プロセッサ、画像信号プロセッサ、液晶ディスプレイ（ＬＣＤ）又は他のディスプレイコントローラ、及び１つ又は複数の外部インタフェース（例えば、ユニバーサルシリアルバス（ＵＳＢ）、汎用非同期送受信回路（ＵＡＲＴ）、ファイヤワイヤ、イーサネット（登録商標）、Ｂｌｕｅｔｏｏｔｈ（登録商標）など）に制御を提供するための１つ又は複数の入力及び／又は出力（Ｉ／Ｏ）コントローラが含まれる。携帯電話用のＳｏＣはまた、ロングタームエボリューション（ＬＴＥ）モデム、センサエンジン、及び衛星航法システムコントローラ（例えば、全地球測位衛星（ＧＰＳ）、ガリレオ（Ｇａｌｉｌｅｏ）、及び／又は北斗（Ｂｅｉｄｏｕ））を任意で含んでよい。実施形態によっては、命令は、本明細書で開示される命令フォーマットの機能又は詳細を有してよいが、これは必須ではない。
【０１８４】
本明細書及び請求項において、「結合」及び／又は「接続」という用語が、これらの派生語と共に用いられている場合がある。これらの用語は、互いに同義語であると意図されてはいない。むしろ、複数の実施形態において、「接続」は、２つ又はそれより多くの要素が互いに物理的及び／又は電気的に直接接触していることを示すのに用いられてよい。「結合」も、２つ又はそれより多くの要素が互いに物理的及び／又は電気的に直接接触していることを意味し得る。しかし、「結合」はまた、２つ又はそれより多くの要素が互いに直接接触していないが、それでもまだ互いに協同又は相互作用していることを意味し得る。例えば、実行ユニットは、レジスタ及び／又は復号ユニットと、間にある１つ又は複数の構成要素を通じて結合されてよい。図には、接続及び結合を示すのに矢印が用いられている。
【０１８５】
「及び／又は」という用語が用いられている場合がある。本明細書で用いられる場合、「及び／又は」という用語は、一方又は他方、あるいは両方を意味する（例えば、Ａ及び／又はＢは、Ａ又はＢ、あるいはＡ及びＢの両方を意味する）。
【０１８６】
上記明細書には、実施形態の完全な理解を提供すべく、具体的な詳細が明記されている。しかし、これらの具体的な詳細の一部がなくても他の実施形態が実施され得る。本発明の範囲は、上述された具体的な例によって決定されるのではなく、以下の請求項によってのみ決定される。他の例において、周知の回路、構造、装置、及びオペレーションが、説明の理解をあいまいにしないよう、ブロック図の形態で、及び／又は詳細を省いて示されている。適切と考えられる場合、参照番号、又は参照番号の末尾部分は、対応する要素又は類似の要素を示すために複数の図の間で繰り返されている。そのような要素は、他に明記されない限り、又は明らかに識別できない限り、同様又は同じ特性を任意で有してよい。
【０１８７】
特定のオペレーションは、ハードウェア要素によって実行されてよく、あるいは機械実行可能又は回路実行可能な複数の命令で具現化されてよい。これらの命令は、オペレーションを実行する命令を用いてプログラミングされた機械、回路、又はハードウェア要素（例えば、プロセッサ、プロセッサの一部、回路など）を生じさせ、及び／又はもたらすのに用いられてよい。オペレーションはまた、任意で、ハードウェア及びソフトウェアの組み合わせによって実行されてよい。プロセッサ、機械、回路、又はハードウェアは特定又は特殊な回路を含んでよく、あるいは他のロジック（例えば、ファームウェア及び／又はソフトウェアと組み合わされる可能性のあるハードウェア）は、命令を実行及び／又は処理し、命令に応答して結果を格納するよう動作可能である。
【０１８８】
いくつかの実施形態は、機械可読媒体を含む製造品（例えば、コンピュータプログラム製品）を含む。媒体は、機械によって可読な形態で情報を提供する、例えば格納するメカニズムを含んでよい。機械可読媒体は、命令又は一連の命令を提供してよく、又はこれらを機械可読媒体上に格納していてもよい。命令又は一連の命令は、機械によって実行された場合及び／又は実行されたときに、本明細書に開示されるオペレーション、方法、又は技術のうち１つを機械に実行させる、及び／又はそれを実行する機械をもたらすよう動作可能である。
【０１８９】
実施形態によっては、機械可読媒体は非一時的機械可読記憶媒体を含んでよい。例えば、非一時的機械可読記憶媒体は、フロッピ（登録商標）ディスケット、光記憶媒体、光ディスク、光データストレージデバイス、ＣＤ−ＲＯＭ、磁気ディスク、光磁気ディスク、リードオンリメモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データストレージ材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイスなどを含んでよい。非一時的機械可読記憶媒体は、一時的な伝搬信号で構成されるものではない。実施形態によっては、記憶媒体は固体物質を含む有形の媒体を含んでよい。
【０１９０】
適した機械の例には、限定されないが、汎用プロセッサ、専用プロセッサ、デジタル論理回路、集積回路、システムオンチップ（ＳｏＣ）などが含まれる。適した機械のさらに他の例には、プロセッサ、デジタル論理回路、又は集積回路を含んだコンピュータシステム又は他の電子デバイスが含まれる。そのようなコンピュータシステム又は電子デバイスの例には、限定されないが、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、携帯電話（例えばスマートフォン）、サーバ、ネットワークデバイス（例えば、ルータ及びスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラが含まれる。
【０１９１】
本明細書の全体にわたる「１つの実施形態」、「ある実施形態」、「１つ又は複数の実施形態」、「いくつかの実施形態」への言及は、例えば、特定の特徴が本発明の実施に含まれてよいが、必ずしもそれが必須ではないことを示す。同様に、本明細書では、本開示を簡素化すること及び様々な発明的側面の理解を助けることを目的に、様々な特徴が単一の実施形態、図、又はその説明において共にグループ化されることがある。しかし、この開示方法によって、本発明が各請求項に明確に説明されている以上の特徴を必要としているという意図が反映されていると解釈するべきではない。むしろ、以下の特許請求の範囲が反映するように、発明的側面は、開示された単一の実施形態の全ての特徴より少ない特徴にある。したがって、詳細な説明に続く特許請求の範囲は、これにより、この詳細な説明に明確に組み込まれ、各請求項は本発明の別々の実施形態として独立している。
［例示的な実施形態］
【０１９２】
以下の例は、さらなる実施形態に関する。これらの例の詳細は、１つ又は複数の実施形態のどこでも用いられてよい。
【０１９３】
例１は、複数のパックドデータレジスタと、３次元（３Ｄ）モートン座標変換命令を復号する復号ユニットとを含むプロセッサ又は他の装置である。３Ｄモートン座標変換命令は、複数の３Ｄモートン座標を含むソースパックドデータオペランドを示し、且つ１つ又は複数のデスティネーション記憶位置を示す。実行ユニットは、パックドデータレジスタと復号ユニットとに結合される。実行ユニットは、３Ｄモートン座標変換命令を復号する復号ユニットに応答して、１つ又は複数の結果パックドデータオペランドを１つ又は複数のデスティネーション記憶位置に格納する。１つ又は複数の結果パックドデータオペランドは、３つの３Ｄ座標からなる複数のセットを含む。３つの３Ｄ座標からなる複数のセットのそれぞれは、複数の３Ｄモートン座標のうち異なる１つに対応する。
【０１９４】
例２は例１に記載のプロセッサを含み、ここで実行ユニットは、３Ｄモートン座標変換命令を復号する復号ユニットに応答し、対応する３Ｄモートン座標のビットに３通りのビット単位のデインターリーブを実行して、３つの３Ｄ座標のうち異なる１つにそれぞれ対応する３つの連続したビットストリングにすることで、３つの３Ｄ座標からなる複数のセットのそれぞれを生成する。
【０１９５】
例３は例１から例２のいずれか１つに記載のプロセッサを含み、ここで実行ユニットは、３Ｄモートン座標変換命令を復号する復号ユニットに応答して格納する。実行ユニットはまた、少なくとも所定の３Ｄモートン座標の０、３、６、９、１２、１５、及び１８の位置におけるビットの値を第１の連続したビットストリングとして１つ又は複数の結果パックドデータオペランドに格納し、第１の連続したビットストリングは、所定の３Ｄモートン座標に対応する３つの３Ｄ座標からなる所定のセットのうち第１の３Ｄ座標に対応する。実行ユニットはまた、少なくとも所定の３Ｄモートン座標の１、４、７、１０、１３、１６、及び１９の位置におけるビットの値を第２の連続したビットストリングとして１つ又は複数の結果パックドデータオペランドに格納し、第２の連続したビットストリングは、３つの３Ｄ座標からなる所定のセットのうち第２の３Ｄ座標に対応する。実行ユニットはまた、少なくとも所定の３Ｄモートン座標の２、５、８、１１、１４、１７、及び２０の位置におけるビットの値を第３の連続したビットストリングとして１つ又は複数の結果パックドデータオペランドに格納し、第３の連続したビットストリングは、３つの３Ｄ座標からなる所定のセットのうち第３の３Ｄ座標に対応する。
【０１９６】
例４は例１から例２のいずれか１つに記載のプロセッサを含み、ここで実行ユニットは、３Ｄモートン座標変換命令を復号する復号ユニットに応答して、少なくとも所定の３Ｄモートン座標の０、３、６、９、１２、１５、１８、２１、２４、２７、３０、及び３３の位置におけるビットの値を第１の連続したビットストリングとして１つ又は複数の結果パックドデータオペランドに格納し、第１の連続したビットストリングは、所定の３Ｄモートン座標に対応する３つの３Ｄ座標からなる所定のセットのうち第１の３Ｄ座標に対応する。実行ユニットはまた、少なくとも所定の３Ｄモートン座標の１、４、７、１０、１３、１６、１９、２２、２５、２８、３１、及び３４の位置におけるビットの値を第２の連続したビットストリングとして１つ又は複数の結果パックドデータオペランドに格納し、第２の連続したビットストリングは、３つの３Ｄ座標からなる所定のセットのうち第２の３Ｄ座標に対応する。実行ユニットはまた、少なくとも所定の３Ｄモートン座標の２、５、８、１１、１４、１７、２０、２３、２６、２９、３２、及び３５の位置におけるビットの値を第３の連続したビットストリングとして１つ又は複数の結果パックドデータオペランドに格納し、第３の連続したビットストリングは、３つの３Ｄ座標からなる所定のセットのうち第３の３Ｄ座標に対応する。
【０１９７】
例５は例１に記載のプロセッサを含み、ここで実行ユニットは、３Ｄモートン座標変換命令を復号する復号ユニットに応答して、３Ｄモートン座標変換命令により示される３つのデスティネーション記憶位置に３つの結果パックドデータオペランドを格納する。これらの結果パックドデータオペランドのそれぞれにおける３Ｄ座標は、同じ次元に任意で対応する。
【０１９８】
例６は例５に記載のプロセッサを含み、ここで、ソースパックドデータオペランドを格納するのに用いられるパックドデータレジスタが、複数の結果パックドデータオペランドの１つを格納する３つのデスティネーション記憶位置の１つとしても用いられるということは任意で、３Ｄモートン座標変換命令に暗に示される。
【０１９９】
例７は例１に記載のプロセッサを含み、ここで、実行ユニットは、３Ｄモートン座標変換命令を復号する復号ユニットに応答して、３Ｄモートン座標変換命令により示される単一のデスティネーション記憶位置に単一の結果パックドデータオペランドを格納する。３つの３Ｄ座標からなる各セットは任意で、対応する３Ｄモートン座標を有するソースパックドデータオペランドのデータ要素と同じ相対位置にある単一の結果パックドデータオペランドの異なるデータ要素に格納される。
【０２００】
例８は例１に記載のプロセッサを含み、ここで所定の３Ｄモートン座標は、ソースパックドデータオペランドの３２ビットデータ要素に格納される。所定の３Ｄモートン座標に対応する、３つの３Ｄ座標からなる所定のセットの各３Ｄ座標は任意で、７ビットから１０ビット、又は８ビットから１０ビット、あるいは９ビット又は１０ビットを含む。
【０２０１】
例９は例１に記載のプロセッサを含み、ここで所定の３Ｄモートン座標は、ソースパックドデータオペランドの６４ビットデータ要素に格納される。所定の３Ｄモートン座標に対応する、３つの３Ｄ座標からなる所定のセットの各３Ｄ座標は任意で、１５ビットから２１ビット、又は１８ビットから２１ビットを含む。
【０２０２】
例１０は例１に記載のプロセッサを含み、分岐を予測する任意の分岐予測ユニットと、この分岐予測ユニットに結合される任意の命令プリフェッチユニットとをさらに含む。命令プリフェッチユニットは、３Ｄモートン座標変換命令を含む命令をプリフェッチする。任意で、レベル１（Ｌ１）命令キャッシュが含まれ、命令プリフェッチユニットに結合される。Ｌ１命令キャッシュは、３Ｄモートン座標変換命令を含む命令を格納する。任意のＬ１データキャッシュが、データを格納するために含まれてよい。任意のレベル２（Ｌ２）キャッシュが、データと３Ｄモートン座標変換命令を含む命令とを格納するために含まれてよい。任意の命令フェッチユニットが、３Ｄモートン座標変換命令をＬ１命令キャッシュからフェッチし、その３Ｄモートン座標変換命令を復号ユニットに提供するために、Ｌ１命令キャッシュ及び復号ユニットに結合される。
任意のレジスタリネームユニットが、パックドデータレジスタをリネームするためにパックドデータレジスタに結合される。
【０２０３】
例１１は、３次元（３Ｄ）モートン座標変換命令を受信する段階を含むプロセッサにおける方法である。３Ｄモートン座標変換命令は、複数の３Ｄモートン座標を含むソースパックドデータオペランドを示し、且つ１つ又は複数のデスティネーション記憶位置を示す。本方法はまた、１つ又は複数の結果パックドデータオペランドを１つ又は複数のデスティネーション記憶位置に格納する段階を含む。１つ又は複数の結果パックドデータオペランドは、３つの３Ｄ座標からなる複数のセットを含む。３次元座標のセットのそれぞれは、３次元モートン座標の異なる１つに対応する。
【０２０４】
例１２は例１１に記載の方法を含み、対応する３Ｄモートン座標のビットに３通りのビット単位のデインターリーブを実行して、３つの３Ｄ座標のうち異なる１つにそれぞれ対応する３つの連続したビットストリングにすることで、３つの３Ｄ座標からなるセットのそれぞれを生成する段階をさらに含む。
【０２０５】
例１３は例１１に記載の方法を含み、ここで１つ又は複数の結果パックドデータオペランドを格納する段階は、３Ｄモートン座標変換命令により示される３つのデスティネーション記憶位置に３つの結果パックドデータオペランドを格納する段階を任意で含む。結果パックドデータオペランドのそれぞれの３Ｄ座標は、全て任意で同じ次元に対応する。
【０２０６】
例１４は例１１に記載の方法を含み、ここで１つ又は複数の結果パックドデータオペランドを格納する段階は、３Ｄモートン座標変換命令により示される単一のデスティネーション記憶位置に単一の結果パックドデータオペランドを格納する段階を任意で含む。３つの３Ｄ座標の各セットは、対応する３Ｄモートン座標を有するソースパックドデータオペランドのデータ要素と同じ相対位置にある単一の結果パックドデータオペランドの異なるデータ要素に任意で存在する。
【０２０７】
例１５は例１１に記載の方法を含み、３２ビットデータ要素に格納された所定の３Ｄモートン座標を有するソースパックドデータオペランドを受信する段階をさらに含む。また任意で、格納する段階は、所定の３Ｄモートン座標に対応する３つの３Ｄ座標からなる所定のセットを格納する段階を含み、各３Ｄ座標は７ビットから１０ビットを含む。
【０２０８】
例１６は例１１に記載の方法を含み、ここで１つ又は複数の結果パックドデータオペランドを格納する段階は、少なくとも所定の３Ｄモートン座標の０、３、６、９、１２、１５、及び１８の位置におけるビットの値を第１の連続したビットストリングとして１つ又は複数の結果パックドデータオペランドに格納する段階を含み、第１の連続したビットストリングは、所定の３Ｄモートン座標に対応する３つの３Ｄ座標からなる所定のセットのうち第１の３Ｄ座標に対応する。また任意で、少なくとも所定の３Ｄモートン座標の１、４、７、１０、１３、１６、及び１９の位置におけるビットの値を第２の連続したビットストリングとして１つ又は複数の結果パックドデータオペランドに格納する段階を含み、第２の連続したビットストリングは、３つの３Ｄ座標からなる所定のセットのうち第２の３Ｄ座標に対応する。また任意で、少なくとも所定の３Ｄモートン座標の２、５、８、１１、１４、１７、及び２０の位置におけるビットの値を第３の連続したビットストリングとして１つ又は複数の結果パックドデータオペランドに格納する段階を含み、第３の連続したビットストリングは、３つの３Ｄ座標からなる所定のセットのうち第３の３Ｄ座標に対応する。
【０２０９】
例１７は例１１に記載の方法を含み、６４ビットデータ要素に格納された所定の３Ｄモートン座標を有するソースパックドデータオペランドを受信する段階をさらに含む。本方法はまた、所定の３Ｄモートン座標に対応する３つの３Ｄ座標からなる所定のセットを格納する段階を含み、各３Ｄ座標は１５ビットから２１ビットを含む。
【０２１０】
例１８は例１１に記載の方法を含み、ここで１つ又は複数の結果パックドデータオペランドを格納する段階は、少なくとも所定の３Ｄモートン座標の０、３、６、９、１２、１５、１８、２１、２４、２７、３０、及び３３の位置におけるビットの値を第１の連続したビットストリングとして１つ又は複数の結果パックドデータオペランドに格納する段階を含み、第１の連続したビットストリングは、所定の３Ｄモートン座標に対応する３つの３Ｄ座標からなる所定のセットのうち第１の３Ｄ座標に対応する。また任意で、少なくとも所定の３Ｄモートン座標の１、４、７、１０、１３、１６、１９、２２、２５、２８、３１、及び３４の位置におけるビットの値を第２の連続したビットストリングとして１つ又は複数の結果パックドデータオペランドに格納する段階を含み、第２の連続したビットストリングは、３つの３Ｄ座標からなる所定のセットのうち第２の３Ｄ座標に対応する。また任意で、少なくとも所定の３Ｄモートン座標の２、５、８、１１、１４、１７、２０、２３、２６、２９、３２、及び３５の位置におけるビットの値を第３の連続したビットストリングとして１つ又は複数の結果パックドデータオペランドに格納する段階を含み、第３の連続したビットストリングは、３つの３Ｄ座標からなる所定のセットのうち第３の３Ｄ座標に対応する。
【０２１１】
例１９は命令を処理するシステムであり、本システムは相互接続と当該相互接続に結合されたプロセッサとを含む。複数のデータ要素を含むソースパックドデータオペランドを示し、且つ１つ又は複数のデスティネーション記憶位置を示す命令を、プロセッサは受信する。プロセッサは、命令に応答して、１つ又は複数の結果パックドデータオペランドを１つ又は複数のデスティネーション記憶位置に格納する。１つ又は複数の結果パックドデータオペランドは、ソースパックドデータオペランド内の各データ要素に対して、対応する３つのビットストリングのセットを含む。３つのビットストリングの各セットは、第１のビットストリング、第２のビットストリング、及び第３のビットストリングを含む。第１のビットストリングはそれぞれ、ソースパックドデータオペランドの対応するデータ要素の少なくとも０、３、６、９、１２、１５、及び１８の位置におけるビットの値を含む。第２のビットストリングはそれぞれ、ソースパックドデータオペランドの対応するデータ要素の少なくとも１、４、７、１０、１３、１６、及び１９の位置におけるビットの値を含む。第３のビットストリングはそれぞれ、ソースパックドデータオペランドの対応するデータ要素の少なくとも２、５、８、１１、１４、１７、及び２０の位置におけるビットの値を含む。システムはまた、相互接続に結合された任意のダイナミックランダムアクセスメモリ（ＤＲＡＭ）を含む。
【０２１２】
例２０は例１９に記載のシステムを含み、ここでプロセッサは命令に応答して、３つの結果パックドデータオペランドを３つのデスティネーション記憶位置に格納し、３つの結果パックドデータオペランドのうち１つは、第１のビットストリングの全てを格納する。
【０２１３】
例２１は、非一時的機械可読記憶媒体を含む製造品である。非一時的機械可読記憶媒体は命令を格納する。命令は、複数のデータ要素を含むソースパックドデータオペランドを示し、且つ１つ又は複数のデスティネーション記憶位置を示す。命令は、機械により実行されると、１つ又は複数の結果パックドデータオペランドを１つ又は複数のデスティネーション記憶位置に格納することを含むオペレーションを機械に実行させる。１つ又は複数の結果パックドデータオペランドは、ソースパックドデータオペランド内の各データ要素に対して対応する３つのビットストリングのセットを含む。３つのビットストリングの各セットは、第１のビットストリング、第２のビットストリング、及び第３のビットストリングを含む。第１のビットストリングはそれぞれ、ソースパックドデータオペランドの対応するデータ要素の少なくとも０、３、６、９、１２、１５、及び１８の位置におけるビットの値を含む。第２のビットストリングはそれぞれ、ソースパックドデータオペランドの対応するデータ要素の少なくとも１、４、７、１０、１３、１６、及び１９の位置におけるビットの値を含む。第３のビットストリングはそれぞれ、ソースパックドデータオペランドの対応するデータ要素の少なくとも２、５、８、１１、１４、１７、及び２０の位置におけるビットの値を含む。
【０２１４】
例２２は例２１に記載の製造品を含み、ここでプロセッサは命令に応答して、単一の結果パックドデータオペランドを単一のデスティネーション記憶位置に格納する。
【０２１５】
例２３は、例１１から例１８のいずれか１つに記載の方法を実行するよう動作するプロセッサ又は他の装置である。
【０２１６】
例２４は、例１１から例１８のいずれか１つに記載の方法を実行する手段を含むプロセッサ又は他の装置である。
【０２１７】
例２５は、例１１から例１８のいずれか１つに記載の方法を実行するモジュール及び／又はユニット及び／又はロジック及び／又は回路及び／又は手段のうち任意の組み合わせを含むプロセッサ又は他の装置である。
【０２１８】
例２６は、プロセッサ、コンピュータシステム、電子デバイス、又は他の機械により実行された場合、及び／又は実行されるとき、例１１から例１８のいずれか１つに記載の方法を機械に実行させるよう動作する命令を任意で格納する、又は別の方法でそれを提供する非一時的機械可読媒体を任意に含む製造品である。
【０２１９】
例２７は、実質的に本明細書に説明されるプロセッサ又は他の装置である。
【０２２０】
例２８は、実質的に本明細書に説明される任意の方法を実行するよう動作するプロセッサ又は他の装置である。
【図１】
0006696674.tif 000009
【図２】
0006696674.tif 000010
【図３】
0006696674.tif 000011
【図４】
0006696674.tif 000012
【図５】
0006696674.tif 000013
【図６】
0006696674.tif 000014
【図７】
0006696674.tif 000015
【図８】
0006696674.tif 000016
【図９】
0006696674.tif 000017
【図１０】
0006696674.tif 000018
【図１１Ａ】
0006696674.tif 000019
【図１１Ｂ】
0006696674.tif 000020
【図１１Ｃ】
0006696674.tif 000021
【図１２Ａ】
0006696674.tif 000022
【図１２Ｂ】
0006696674.tif 000023
【図１３Ａ】
0006696674.tif 000024
【図１３Ｂ】
0006696674.tif 000025
【図１３Ｃ】
0006696674.tif 000026
【図１３Ｄ】
0006696674.tif 000027
【図１４】
0006696674.tif 000028
【図１５Ａ】
0006696674.tif 000029
【図１５Ｂ】
0006696674.tif 000030
【図１６Ａ】
0006696674.tif 000031
【図１６Ｂ】
0006696674.tif 000032
【図１７】
0006696674.tif 000033
【図１８】
0006696674.tif 000034
【図１９】
0006696674.tif 000035
【図２０】
0006696674.tif 000036
【図２１】
0006696674.tif 000037
【図２２】
0006696674.tif 000038