(57)【特許請求の範囲】
【請求項１】
第１の複数のｎ個のデータフィールドの各々に、第１のデータタイプの要素を格納する第１のベクトルレジスタと、
前記第１の複数のｎ個のデータフィールドに対応する第２の複数のｎ個のデータフィールドの各々に、前記第１のデータタイプの要素を格納する第２のベクトルレジスタまたはメモリストレージのセットと、
ベクトルパックドタプル相互比較オペレーションおよびタプルサイズを指定する第１の命令をデコードするデコードステージと、
１または複数の実行ユニットとを備え、
前記１または複数の実行ユニットは、デコード済みの前記第１の命令に応答して、前記第１の複数のｎ個のデータフィールドの第１の部分におけるデータフィールド毎に、前記データフィールドに格納された前記要素を、前記第１の部分に対応する前記第２の複数のｎ個のデータフィールドの第２の部分における要素と比較し、
対応する比較に応じて前記第１の部分のマスクされない各要素に対応するビットマスクにおける前記第２の部分の各要素に対応するマスクビットをセットし、
前記第１の複数のｎ個のデータフィールドは複数の前記第１の部分を含み、各々の前記第１の部分は複数のデータフィールドを有し、
前記第２の複数のｎ個のデータフィールドは複数の前記第２の部分を含み、各々の前記第２の部分は複数のデータフィールドを有し、
前記第１の部分および前記第２の部分の各々が有するデータフィールドの数は、前記タプルサイズによって示される、プロセッサ。
【請求項２】
前記ベクトルパックドタプル相互比較オペレーションのための比較タイプは、前記第１の命令により指定された即値オペランドにより示される、請求項１に記載のプロセッサ。
【請求項３】
前記ベクトルパックドタプル相互比較オペレーションのための前記比較タイプは、ｅｑｕａｌ、ｌｅｓｓ‐ｔｈａｎ、ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、ｆａｌｓｅ、ｎｏｔ  ｅｑｕａｌ、ｎｏｔ  ｌｅｓｓ‐ｔｈａｎ、ｎｏｔ  ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、またはｔｒｕｅを含む、請求項２に記載のプロセッサ。
【請求項４】
前記ベクトルパックドタプル相互比較オペレーションは、前記第１の複数のｎ個のデータフィールドに含まれるデータフィールドのペアを、前記第２の複数のｎ個のデータフィールドに含まれるデータフィールドのペアと相互比較するベクトルパックドダブル相互比較オペレーションを含む、請求項１〜３のいずれか１項に記載のプロセッサ。
【請求項５】
前記ベクトルパックドタプル相互比較オペレーションは、前記第１の複数のｎ個のデータフィールドに含まれる４個のデータフィールドからなる４−タプルを、前記第２の複数のｎ個のデータフィールドに含まれる４個のデータフィールドからなる４−タプルと相互比較するベクトルパックドクワドラプル相互比較オペレーションを含む、請求項１〜３のいずれか１項に記載のプロセッサ。
【請求項６】
前記ベクトルパックドタプル相互比較オペレーションは、前記第１の複数のｎ個のデータフィールドに含まれる８個のデータフィールドからなる８−タプルを、前記第２の複数のｎ個のデータフィールドに含まれる８個のデータフィールドからなる８−タプルと相互比較するベクトルパックドオクタプル相互比較オペレーションを含む、請求項１〜３のいずれか１項に記載のプロセッサ。
【請求項７】
ｎは、６４である、請求項１〜６のいずれか１項に記載のプロセッサ。
【請求項８】
ｎは、３２である、請求項１〜６のいずれか１項に記載のプロセッサ。
【請求項９】
ｎは、１６である、請求項１〜６のいずれか１項に記載のプロセッサ。
【請求項１０】
ｎは、８である、請求項１〜５のいずれか１項に記載のプロセッサ。
【請求項１１】
前記第１の複数のｎ個のデータフィールドの各々は、８ビットである、請求項１〜１０のいずれか１項に記載のプロセッサ。
【請求項１２】
前記第１の複数のｎ個のデータフィールドの各々は、１６ビットである、請求項１〜１０のいずれか１項に記載のプロセッサ。
【請求項１３】
前記第１の部分に含まれる１つの要素に対応するビットマスクは、前記第２の部分の各要素に対応するマスクビットとして、２ビットを有する、請求項１〜４のいずれか１項に記載のプロセッサ。
【請求項１４】
前記第１の部分に含まれる１つの要素に対応するビットマスクは、前記第２の部分の各要素に対応するマスクビットとして、４ビットを有する、請求項１〜３、および、５のいずれか１項に記載のプロセッサ。
【請求項１５】
前記第１の部分に含まれる１つの要素に対応するビットマスクは、前記第２の部分の各要素に対応するマスクビットとして、８ビットを有する、請求項１〜３、および、６のいずれか１項に記載のプロセッサ。
【請求項１６】
前記第１の命令は、前記第１の複数のｎ個のデータフィールドの各データフィールドが各々、マスクされるか、またはマスクされないかを示すビットを有するマスクレジスタオペランドを指定する、請求項１〜１５のいずれか１項に記載のプロセッサ。
【請求項１７】
第１のベクトルレジスタの第１の複数のｎ個のデータフィールドの各々に、第１のデータタイプの要素を格納する段階と、
前記第１の複数のｎ個のデータフィールドに対応する第２のベクトルレジスタの第２の複数のｎ個のデータフィールドの各々に、前記第１のデータタイプの要素を格納する段階と、
プロセッサにおいて、ベクトルパックドタプル相互比較のための単一命令多重データ（ＳＩＭＤ）命令を実行する段階であって、前記ＳＩＭＤ命令は、タプルサイズを含む段階と、
前記第１の複数のｎ個のデータフィールドの第１の部分におけるデータフィールド毎に、前記データフィールドに格納された前記要素を、前記第１の部分に対応する前記第２の複数のｎ個のデータフィールドの第２の部分の各要素と比較する段階であって、前記第１の複数のｎ個のデータフィールドは複数の前記第１の部分を含み、各々の前記第１の部分は複数のデータフィールドを有し、前記第２の複数のｎ個のデータフィールドは複数の前記第２の部分を含み、各々の前記第２の部分は複数のデータフィールドを有し、前記第１の部分および前記第２の部分の各々が有するデータフィールドの数は、前記タプルサイズによって示される、段階と、
対応する比較に応じて前記第１の部分のマスクされない各要素に対応するビットマスクにおける前記第２の部分の各要素に対応するマスクビットをセットする段階とを備える、方法。
【請求項１８】
前記第１の部分の各要素は、暗黙的にマスクされない、請求項１７に記載の方法。
【請求項１９】
マスクレジスタのビットは、前記第１の部分の対応する要素が各々マスクされないか、またはマスクされるかを明示的に示すべく、１またはゼロにセットされる、請求項１７に記載の方法。
【請求項２０】
前記第１の部分および前記第２の部分は、各々２個のデータフィールドを含む、請求項１７〜１９のいずれか１項に記載の方法。
【請求項２１】
前記第１の部分および前記第２の部分は、各々４個のデータフィールドを含む、請求項１７〜１９のいずれか１項に記載の方法。
【請求項２２】
前記第１の部分および前記第２の部分は、各々８個のデータフィールドを含む、請求項１７〜１９のいずれか１項に記載の方法。
【請求項２３】
メモリと、
複数のプロセッサとを備え、
前記複数のプロセッサは、各々、
第１の複数のｎ個のデータフィールドの各々に、第１のデータタイプの要素を格納する第１のベクトルレジスタと、
前記第１の複数のｎ個のデータフィールドに対応する第２の複数のｎ個のデータフィールドの各々に、前記第１のデータタイプの要素を格納する第２のベクトルレジスタまたはメモリストレージのセットと、
ベクトルパックドタプル相互比較オペレーションおよびタプルサイズを指定する第１の命令をデコードするデコードステージと、
１または複数の実行ユニットとを有し、
前記１または複数の実行ユニットは、
デコード済みの前記第１の命令に応答して、前記第１の複数のｎ個のデータフィールドの第１の部分におけるデータフィールド毎に、前記データフィールドに格納された前記要素を、前記第１の部分に対応する前記第２の複数のｎ個のデータフィールドの第２の部分の各要素と比較し、
対応する比較に応じて、前記第１の部分のマスクされない各要素に対応するビットマスクにおける前記第２の部分の各要素に対応するマスクビットをセットし、
前記第１の複数のｎ個のデータフィールドは複数の前記第１の部分を含み、各々の前記第１の部分は複数のデータフィールドを有し、
前記第２の複数のｎ個のデータフィールドは複数の前記第２の部分を含み、各々の前記第２の部分は複数のデータフィールドを有し、
前記第１の部分および前記第２の部分の各々が有するデータフィールドの数は、前記タプルサイズによって示される、処理システム。
【請求項２４】
前記ベクトルパックドタプル相互比較オペレーションのための比較タイプは、前記第１の命令により指定された即値オペランドにより示される、請求項２３に記載の処理システム。
【請求項２５】
前記ベクトルパックドタプル相互比較オペレーションのための前記比較タイプは、ｅｑｕａｌ、ｌｅｓｓ‐ｔｈａｎ、ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、ｆａｌｓｅ、ｎｏｔ  ｅｑｕａｌ、ｎｏｔ  ｌｅｓｓ‐ｔｈａｎ、ｎｏｔ  ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、またはｔｒｕｅを含む、請求項２４に記載の処理システム。
【請求項２６】
前記ベクトルパックドタプル相互比較オペレーションは、前記第１の複数のｎ個のデータフィールドに含まれるデータフィールドのペアを、前記第２の複数のｎ個のデータフィールドに含まれるデータフィールドのペアと相互比較するベクトルパックドダブル相互比較オペレーションを含む、請求項２３〜２５のいずれか１項に記載の処理システム。
【請求項２７】
前記ベクトルパックドタプル相互比較オペレーションは、前記第１の複数のｎ個のデータフィールドに含まれる４個のデータフィールドからなる４−タプルを、前記第２の複数のｎ個のデータフィールドに含まれる４個のデータフィールドからなる４−タプルと相互比較するベクトルパックドクワドラプル相互比較オペレーションを含む、請求項２３〜２５のいずれか１項に記載の処理システム。
【請求項２８】
前記ベクトルパックドタプル相互比較オペレーションは、前記第１の複数のｎ個のデータフィールドに含まれる８個のデータフィールドからなる８−タプルを、前記第２の複数のｎ個のデータフィールドに含まれる８個のデータフィールドからなる８−タプルと相互比較するベクトルパックドオクタプル相互比較オペレーションを含む、請求項２３〜２５のいずれか１項に記載の処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願への相互参照  本願は、２０１０年１２月２１日に出願された「Ｍｅｃｈａｎｉｓｍ  ｆｏｒ  Ｃｏｎｆｌｉｃｔ  Ｄｅｔｅｃｔｉｏｎ  Ｕｓｉｎｇ  ＳＩＭＤ」という名称の米国特許出願第１２／９７４，１５７号、２０１０年１２月２２日に出願された「Ｖｅｃｔｏｒ  Ｃｏｎｆｌｉｃｔ  Ｉｎｓｔｒｕｃｔｉｏｎｓ」という名称の米国特許出願第１２／９７６，６１６号、および２０１２年１２月２９日に出願された「Ｍｅｔｈｏｄ，Ａｐｐａｒａｔｕｓ，Ｉｎｓｔｒｕｃｔｉｏｎｓ  ａｎｄ  Ｌｏｇｉｃ  ｔｏ  Ｐｒｏｖｉｄｅ  Ｖｅｃｔｏｒ  Ａｄｄｒｅｓｓ  Ｃｏｎｆｌｉｃｔ  Ｄｅｔｅｃｔｉｏｎ  Ｆｕｎｃｔｉｏｎａｌｉｔｙ」という名称の米国特許出願第１３／７３１，００６号に関する。
【０００２】
本開示は、プロセッサまたは他の処理ロジックにより実行されると、論理的、数学的、または他の関数オペレーションを実行する処理ロジック、マイクロプロセッサ、および関連する命令セットアーキテクチャの分野に関する。具体的には、本開示は、単一命令多重データ（ＳＩＭＤ）ベクトルパックドタプル相互比較機能を提供するプロセッサ命令およびロジックに関する。
【背景技術】
【０００３】
多くの場合、最新のプロセッサは、演算集約的であるが、例えば、ＳＩＭＤベクトルレジスタのような様々なデータストレージデバイスを用いた効率的実装を通して利用され得る高水準のデータ並列性を提示するオペレーションを提供する命令を含む。ＳＩＭＤの実行において、単一命令は、複数のデータ要素に対して同時に、または一斉に演算を行う。通常、これは、レジスタおよび演算論理装置（ＡＬＵ）等、様々なリソースの幅を拡張することにより実装され、これらが各々、複数のデータ要素を保持し、これらに対して演算を行うことを可能にする。
【０００４】
中央処理装置（ＣＰＵ）は、ベクトルのＳＩＭＤ処理をサポートするそのような並列ハードウェアを提供し得る。ベクトルは、いくつかの連続したデータ要素を保持するデータ構造体である。サイズＬのベクトルレジスタは、サイズＭのＮ個のベクトル要素を含み得、Ｎ＝Ｌ／Ｍである。例えば、６４バイトのベクトルレジスタは、（ａ）各要素が１バイトを占有するデータアイテムを保持する６４個のベクトル要素、（ｂ）各々が２バイト（または１「ワード」）を占有するデータアイテムを保持する３２個のベクトル要素、（ｃ）各々が４バイト（または１「ダブルワード」）を占有するデータアイテムを保持する１６個のベクトル要素、または（ｄ）各々が８バイト（または１「クワッドワード」）を占有するデータアイテムを保持する８個のベクトル要素にパーティショニングされ得る。
【０００５】
いくつかのアプリケーションは、大量のデータレベルの並列性を有し、ＳＩＭＤのサポートから利益を得ることができる場合がある。しかし、いくつかのアプリケーションは、スパース位置のセットに対するオペレーションでは著しい時間を費やす。更に、シーケンシャルなオペレーションは、同一のスパース位置に対して実行される場合があり、従ってこれらのアプリケーションは、ＳＩＭＤのオペレーションから限定的な利点しか見出せない場合がある。ＳＩＭＤの効率性を保持するべく、いくつかのアーキテクチャは、ＳＩＭＤ算術演算のみならず、（ギャザーおよびスキャターオペレーションによる）ＳＩＭＤメモリの読み出しおよび書き込みを可能にする。スキャターリダクションは、多くのアプリケーションにおいて一般的なオペレーションである。例えば、スキャター・加算オペレーションは、第１のアレイの複数の値が、インデックスの分布に応じて第２のアレイの選択要素に縮小（すなわち、加算）されることを可能にするために用いられ得、これは多くの場合、ランダムであり得る。しかし、これが理由となって、複数の要素を同時に（すなわち、ＳＩＭＤモードで）効率的に処理することが困難となる場合がある。１つの関心事は、必要な場合に、スカラプログラムの順序が保持されることを確実にすることである。別の関心事は、データがメモリ内にスキャターされた場合に、メモリアドレスの結果として生じるベクトルが一意のアドレスのみを含む（すなわち、重複するアドレスが存在しない）ことを確実にすることである。
【０００６】
例えば、ヒストグラム計算は、多くの画像処理アプリケーションにおいて一般的なオペレーションである。ヒストグラムは、画像におけるピクセルの色値の分布を追跡するべく用いられ得る。しかし、ヒストグラムアレイに対する更新は、アレイへの入力データに応じてランダムであり得る。具体的には、隣接要素のインデックスは、同じヒストグラムのビンを指し得る。従って、同一の位置に対する複数の依存性更新を検出し、スカラプログラムの順序が保持されることを確実にするべく、競合の検出および解決が必要とされる。まさに、これは、多重データを同時に、または一斉に（すなわち、ＳＩＭＤオペレーションを用いて）処理することを非常に困難なものとし得る類いの条件である。
【０００７】
現在に至るまで、そのような競合の懸念および関連する処理の困難さに対して潜在力のある解決法は、十分に調査されてはいない。
【図面の簡単な説明】
【０００８】
本発明は、添付の図面において限定ではなく例として示される。
【０００９】
【図１Ａ】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するシステムの一実施形態のブロック図である。
【００１０】
【図１Ｂ】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するシステムの別の実施形態のブロック図である。
【００１１】
【図１Ｃ】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するシステムの別の実施形態のブロック図である。
【００１２】
【図２】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。
【００１３】
【図３Ａ】一実施形態によるパックドデータタイプを示す。
【００１４】
【図３Ｂ】一実施形態によるパックドデータタイプを示す。
【００１５】
【図３Ｃ】一実施形態によるパックドデータタイプを示す。
【００１６】
【図３Ｄ】一実施形態による、ＳＩＭＤベクトルパックドタプル相互比較機能を提供するための命令エンコードを示す。
【００１７】
【図３Ｅ】別の実施形態による、ＳＩＭＤベクトルパックドタプル相互比較機能を提供するための命令エンコードを示す。
【００１８】
【図３Ｆ】別の実施形態による、ＳＩＭＤベクトルパックドタプル相互比較機能を提供するための命令エンコードを示す。
【００１９】
【図３Ｇ】別の実施形態による、ＳＩＭＤベクトルパックドタプル相互比較機能を提供するための命令エンコードを示す。
【００２０】
【図３Ｈ】別の実施形態による、ＳＩＭＤベクトルパックドタプル相互比較機能を提供するための命令エンコードを示す。
【００２１】
【図４Ａ】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するプロセッサマイクロアーキテクチャの一実施形態における要素を示す。
【００２２】
【図４Ｂ】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するプロセッサマイクロアーキテクチャの別の実施形態における要素を示す。
【００２３】
【図５】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。
【００２４】
【図６】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するコンピュータシステムの一実施形態のブロック図である。
【００２５】
【図７】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するコンピュータシステムの別の実施形態のブロック図である。
【００２６】
【図８】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するコンピュータシステムの別の実施形態のブロック図である。
【００２７】
【図９】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するシステムオンチップの一実施形態のブロック図である。
【００２８】
【図１０】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するプロセッサの実施形態のブロック図である。
【００２９】
【図１１】ＳＩＭＤベクトルパックドタプル相互比較機能を提供するＩＰコア開発システムの一実施形態のブロック図である。
【００３０】
【図１２】ＳＩＭＤベクトルパックドタプル相互比較機能を提供するアーキテクチャエミュレーションシステムの一実施形態を示す。
【００３１】
【図１３】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を変換するシステムの一実施形態を示す。
【００３２】
【図１４Ａ】効率的なベクトルアドレス競合解決のために置換制御を生成するＳＩＭＤベクトル先行ゼロカウント命令を用いる例の一実施形態におけるフロー図を示す。
【００３３】
【図１４Ｂ】効率的なベクトルアドレス競合解決にＳＩＭＤベクトルアドレス競合マスクを用いる例の一実施形態におけるフロー図を示す。
【００３４】
【図１５Ａ】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するプロセッサにおける処理の一実施形態のフロー図を示す。
【００３５】
【図１５Ｂ】効率的なベクトルアドレス競合解決にＳＩＭＤベクトルアドレス競合マスクを用いる処理の一実施形態におけるフロー図を示す。
【００３６】
【図１６】効率的なベクトルアドレス競合解決のために置換制御を生成するのに有用なＳＩＭＤベクトル先行ゼロカウント機能を提供する命令を実行するための装置の従来技術の実施形態を示す。
【００３７】
【図１７Ａ】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令のいくつかの代替的な実施形態を示す。
【図１７Ｂ】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令のいくつかの代替的な実施形態を示す。
【図１７Ｃ】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令のいくつかの代替的な実施形態を示す。
【００３８】
【図１８】効率的なベクトルアドレス競合解決のためにアドレス競合マスクを生成するＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令の結果を組み合わせる方法の実施形態を示す。
【００３９】
【図１９Ａ】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するための装置の実施形態を示す。
【００４０】
【図１９Ｂ】ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するための装置の代替的な実施形態を示す。
【発明を実施するための形態】
【００４１】
以下の説明は、プロセッサ、コンピュータシステム、もしくは他の処理装置内に、またはこれらに関連してＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令および処理ロジックを開示する。本明細書において、ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令およびロジックが開示されている。いくつかの実施形態は、可変の複数のデータフィールドを含む第１および第２のレジスタを有するプロセッサを備え、データフィールドの各々は、第１のデータタイプの要素を格納する。プロセッサは、いくつかの実施形態においてベクトルパックドタプル相互比較のためのＳＩＭＤ命令を実行し、この命令は、第１のレジスタのタプルにおけるデータフィールドの一部のデータフィールド毎に、その対応する要素を、第２のレジスタのタプルにおけるデータフィールドの対応する部分の全ての要素と比較し、対応する比較に応じて、対応する第１のレジスタ部分のマスクされない各要素に対応するビットマスクにおいて、第２のレジスタ部分の各要素に対応するマスクビットをセットする。いくつかの実施形態におけるパックドタプルは各々、２個、４個、または８個の要素を備え得る。また、いくつかの実施形態において、ビットマスクは、デスティネーションレジスタに格納される前に、第３のレジスタのデータフィールドにおける対応する要素によりシフトされ得る。比較タイプは、命令により指定された即値オペランドにより示され得る。いくつかの実施形態において、第３のレジスタは、デスティネーションレジスタと同一のレジスタであってもよい。
【００４２】
比較される要素、例えばインデックスが比較結果を表すのに必要とされるマスクと同じサイズである場合（例えば、２５６ビットレジスタにおける１６個の１６ビット要素）、全ての要素を相互比較する命令の実行が適切であり得る。しかし、比較結果を表すのに利用可能なビットより比較する要素の方が多い場合、代替的な解決法が必要とされる場合がある。本明細書に開示されるＳＩＭＤベクトルパックドタプル比較命令は、ＳＩＭＤベクトルアドレス競合検出機能、および効率的なＳＩＭＤアドレス競合解決のために競合マスクを生成するべく組み合わされた結果を提供する、可変サイズの要素およびメモリオフセットのための代替的な解決法として用いられ得ることが理解されよう。ＳＩＭＤベクトルパックドタプル比較命令は、（例えば、様々な異なる比較オペレーションのうちのいずれか１つが有用である得る場合に）より汎用に適用することが可能であり、面積および電力の観点では全要素を相互比較する命令と比べてあまり実装コストを必要としないことが理解されよう。
【００４３】
以下の説明において、本発明の実施形態のより完全な理解を提供するべく、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、有効化メカニズム等、様々な具体的詳細が記載される。しかし、当業者には、本発明がそのような具体的詳細を用いずに実施され得ることが理解されよう。更に、本発明の実施形態を不要なまでに不明瞭にすることを避けるべく、いくつかの周知の構造、回路等は、詳細に示されていない。
【００４４】
以下の実施形態はプロセッサを参照して説明されるが、他の実施形態が他のタイプの集積回路およびロジックデバイスに適用可能である。本発明の実施形態における類似の技術および教示が、より高いパイプラインスループットおよび向上した性能から利益を得ることができる他のタイプの回路または半導体デバイスに適用され得る。本発明の実施形態についての教示は、データ操作を実行するいずれのプロセッサまたは機械にも適用可能である。しかし、本発明は、５１２ビット、２５６ビット、１２８ビット、６４ビット、３２ビット、もしくは１６ビットのデータオペレーションを実行するプロセッサもしくは機械に限定されず、データの操作もしくは管理が実行されるいずれのプロセッサもしくは機械にも適用され得る。更に、以下の説明は例を提供し、添付の図面は、例示目的で様々な例を示す。しかし、これらの例は、本発明の実施形態における考えられる全ての実装についての網羅的一覧を提供するのではなく、本発明の実施形態における例を提供することを専ら意図しているので、限定的な意味に解釈されるべきではない。
【００４５】
以下の例は、実行ユニットおよび論理回路の文脈における命令の処理および分配を説明するが、本発明の他の実施形態は、機械可読有形媒体上に格納されたデータおよび／または命令として実現され得、これらは、機械により実行されると、当該機械に本発明の少なくとも一実施形態に即した機能を実行させる。一実施形態において、本発明の実施形態に関連する機能は、機械実行可能な命令の形で実施される。命令でプログラミングされた汎用または専用プロセッサに、本発明の段階を実行させるために、命令は用いられ得る。本発明の実施形態は、コンピュータプログラム製品またはソフトウェアとして提供され得、これらは、本発明の実施形態による１または複数のオペレーションを実行するようにコンピュータ（または他の電子デバイス）をプログラミングするために用いられ得る命令を格納した機械またはコンピュータ可読媒体を含み得る。あるいは、本発明の実施形態における段階は、段階を実行するための固定機能ロジックを含む特定ハードウェアコンポーネントにより、またはプログラミングされたコンピュータコンポーネントおよび固定機能ハードウェアコンポーネントの任意の組み合わせにより実行され得る。
【００４６】
本発明の実施形態を実行するロジックをプログラミングするために用いられる命令は、ＤＲＡＭ、キャッシュ、フラッシュメモリ、または他のストレージ等のシステムのメモリ内に格納され得る。更に、命令は、ネットワークを介して、または他のコンピュータ可読媒体により配信され得る。従って、機械可読媒体は、機械（例えば、コンピュータ）により可読な形式で情報を格納または送信するためのいずれのメカニズムも含み得るが、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク、リードオンリメモリ（ＣＤ‐ＲＯＭ）、および光磁気ディスク、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、磁気カードもしくは光カード、フラッシュメモリ、またはインターネットを介した電気信号、光信号、音響信号、または他の形式の伝搬信号（例えば、伝送波、赤外線信号、デジタル信号等）による情報の送信において用いられる有形機械可読ストレージに限定されない。従って、コンピュータ可読媒体は、機械（例えば、コンピュータ）により可読な形式で電子命令または情報を格納または送信するのに好適な任意のタイプの有形機械可読媒体を含む。
【００４７】
設計は、形成からシミュレーション、製造へと至る様々な段階を経る場合がある。設計を表すデータは、いくつかの態様で設計を表し得る。まず、シミュレーションで有用なように、ハードウェアは、ハードウェア記述言語、または別の機能記述言語を用いて表され得る。更に、ロジックおよび／またはトランジスタゲートを用いる回路レベルモデルは、設計工程のいくつかの段階において製造され得る。更に、いくつかの段階では、大部分の設計が、ハードウェアモデルで様々なデバイスの物理的配置を表すデータのレベルに到達する。従来の半導体製造技術が用いられる場合、ハードウェアモデルを表すデータは、集積回路を製造するのに用いられるマスクの異なるマスク層に、様々な機能の存在または不存在を指定するデータであり得る。設計の任意の表現において、データは、機械可読媒体に任意の形式で格納され得る。メモリ、または、ディスク等の磁気もしくは光ストレージは、変調された光または電気の波を介して送信される情報を、またはそうでなければそのような情報を送信するために生成された情報を格納する機械可読媒体であってもよい。コードまたは設計を示し、または搬送する電気的な搬送波が送信される場合、その電気信号のコピー、バッファリング処理、または再送信が実行される程度において、新しいコピーが作成される。従って、通信プロバイダまたはネットワークプロバイダは、本発明の実施形態における技術を実施する搬送波にエンコードされた情報等の物品を少なくとも一時的に有形機械可読媒体上に格納し得る。
【００４８】
最新のプロセッサにおいて、いくつかの異なる実行ユニットが用いられ、様々なコードおよび命令を処理して実行する。全ての命令が同等に作成されるわけではない。いくつかは完了するのにより迅速であるが、他のものは完了するためにいくつかのクロックサイクルを取り得るからである。命令のスループットが高速である程、プロセッサの全体的な性能は良くなる。従って、できるだけ速く、できるだけ多くの命令を実行させることは有益であろう。しかし、より大きな複雑性を有し、実行時間およびプロセッサリソースの観点からより多くのことを必要とする一定の命令が存在する。例えば、浮動小数点命令、ロード／ストアオペレーション、データムーブ等がある。
【００４９】
インターネット、テキスト、およびマルチメディアアプリケーションにおいてはより多くのコンピュータシステムが用いられるので、追加のプロセッサのサポートが経時的に導入されている。一実施形態において、命令セットは、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込みおよび例外処理、ならびに外部入出力（Ｉ／Ｏ）を含む１または複数のコンピュータアーキテクチャに関連付けられ得る。
【００５０】
一実施形態において、命令セットアーキテクチャ（ＩＳＡ）は、１または複数のマイクロアーキテクチャにより実装され得、これらのマイクロアーキテクチャは、１または複数の命令セットを実装するために用いられるプロセッサロジックおよび回路を含む。従って、異なるマイクロアーキテクチャを用いるプロセッサが、共通の命令セットのうちの少なくとも一部を共有し得る。例えば、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（登録商標）プロセッサ、およびカリフォルニア州サニーベールにあるＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ，Ｉｎｃ．のプロセッサは、（より新しいバージョンを追加されたいくつかの拡張を伴う）ほぼ同一のバージョンのｘ８６命令セットを実装するが、異なる内部設計を有する。同様に、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄ．、ＭＩＰＳ等の他のプロセッサ開発会社、またはそれらのラインセンシもしくは採用者により設計されたプロセッサは、共通の命令セットのうちの少なくとも一部を共有し得るが、異なるプロセッサ設計を含む場合がある。例えば、ＩＳＡの同一のレジスタアーキテクチャは、専用の物理レジスタ、レジスタリネームメカニズム（例えば、レジスタエイリアステーブル（ＲＡＴ）、リオーダバッファ（ＲＯＢ）およびリタイアメントレジスタファイルを用いる）を用いる１または複数の動的に割り当てられた物理レジスタ）を含む、新しいか、または周知の技術を用いる異なるマイクロアーキテクチャに異なる態様で実装され得る。一実施形態において、レジスタは、１または複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、またはソフトウェアプログラマによりアドレス指定可能であり得るか、またはそうでない場合がある他のレジスタセットを含み得る。
【００５１】
一実施形態において、命令は、１または複数の命令フォーマットを含み得る。一実施形態において、命令フォーマットは、とりわけ、実行されるべきオペレーションおよび当該オペレーションが実行されるオペランドを指定する様々なフィールド（ビットの数、ビットの位置等）を示し得る。いくつかの命令フォーマットは、命令テンプレート（またはサブフォーマット）により更に分割定義され得る。例えば、所与の命令フォーマットの命令テンプレートは、異なるサブセットの命令フォーマットのフィールドを有するものと定義され得、および／または異なるように解釈される所与のフィールドを有するものと定義され得る。一実施形態において、命令は、命令フォーマット（定義されている場合、当該命令フォーマットの命令テンプレートのうちの所与のものの形で）を用いて表され、オペレーション、および当該オペレーションが演算を行うオペランドを指定し、または示す。
【００５２】
サイエンティフィックアプリケーション、財務アプリケーション、自動ベクトル化汎用アプリケーション、ＲＭＳ（認識、マイニング、および合成）アプリケーション、および視覚アプリケーション、ならびにマルチメディアアプリケーション（例えば、２Ｄ／３Ｄグラフィックス、画像処理、動画圧縮／解凍、音声認識アルゴリズム、および音声操作）は、多数のデータアイテムに対して実行される同一のオペレーションを必要とする場合がある。一実施形態において、単一命令多重データ（ＳＩＭＤ）は、プロセッサに複数のデータ要素に対するオペレーションを実行させる命令タイプを指す。ＳＩＭＤ技術は、レジスタ内のビットをいくつかの固定サイズのデータ要素または可変サイズのデータ要素に論理的に分割し得るプロセッサにおいて用いられ得、これらのデータ要素の各々は、別個の値を表す。例えば、一実施形態において、６４ビットのレジスタにおけるビットは、４個の別個の１６ビットデータ要素を含むソースオペランドとして編成され得、これらのデータ要素の各々は、別個の１６ビットの値を表す。このタイプのデータは、「パックド」データタイプまたは「ベクトル」データタイプと称される場合があり、このデータタイプのオペランドは、パックドデータオペランドまたはベクトルオペランドと称される。一実施形態において、パックドデータアイテムまたはベクトルは、単一のレジスタ内に格納されたパックドデータ要素のシーケンスであってもよく、パックドデータオペランドまたはベクトルオペランドは、ＳＩＭＤ命令（または「パックドデータ命令」もしくは「ベクトル命令」）のソースオペランドもしくはデスティネーションオペランドであってもよい。一実施形態において、ＳＩＭＤ命令は、同一または異なる数のデータ要素を有し、同一または異なるデータ要素の順序の、同一または異なるサイズのデスティネーションベクトルオペランド（結果ベクトルオペランドとも称される）を生成するために、２つのソースベクトルオペランドに対して実行される単一のベクトルオペレーションを指定する。
【００５３】
ｘ８６、ＭＭＸ（登録商標）、ストリーミングＳＩＭＤ拡張（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１、およびＳＳＥ４．２の命令を含む命令セットを有するＩｎｔｅｌ（登録商標）Ｃｏｒｅ（登録商標）プロセッサ、ベクトル浮動小数点（ＶＦＰ）および／またはＮＥＯＮの命令を含む命令セットを有するＡＲＭ  Ｃｏｒｔｅｘ（登録商標）ファミリのプロセッサ等のＡＲＭプロセッサ、ならびに中国科学院計算技術研究所（ＩＣＴ）により開発された龍芯（Ｌｏｏｎｇｓｏｎ）ファミリのプロセッサ等のＭＩＰＳプロセッサにより使用されるもの等、ＳＩＭＤ技術は、アプリケーション性能における著しい向上を可能にした（Ｃｏｒｅ（登録商標）およびＭＭＸ（登録商標）は、カリフォルニア州サンタクララにあるＩｎｔｅｌ（登録商標）Ｃｏｒｐｏｒａｔｉｏｎの登録商標または商標である）。
【００５４】
一実施形態において、デスティネーションおよびソースのレジスタ／データは、対応するデータまたはオペレーションのソースおよびデスティネーションを表す一般的な用語である。いくつかの実施形態において、これらは、示されるもの以外の名前もしくは機能を有するレジスタ、メモリ、または他のストレージ領域により実装され得る。例えば、一実施形態において、「ＤＥＳＴ１」は一時的ストレージレジスタまたは他のストレージ領域であり得るが、「ＳＲＣ１」および「ＳＲＣ２」は、第１および第２のソースストレージレジスタまたは他のストレージ領域であり得る、等である。他の実施形態において、ＳＲＣおよびＤＥＳＴストレージ領域のうちの２またはそれより多くは、同じストレージ領域（例えば、ＳＩＭＤレジスタ）内の異なるデータストレージ要素に対応し得る。一実施形態において、ソースレジスタのうちの１つは、例えば、第１および第２のソースデータに対して実行されるオペレーションの結果を、デスティネーションレジスタとして機能する２つのソースレジスタのうちの１つにライトバックすることにより、デスティネーションレジスタとしても機能し得る。
【００５５】
図１Ａは、本発明の一実施形態による、命令を実行する実行ユニットを含むプロセッサと共に形成された例示的なコンピュータシステムのブロック図である。システム１００は、プロセッサ１０２のようなコンポーネントを含み、本明細書において説明される実施形態等、本発明によるロジックを含む実行ユニットを利用してデータを処理するためのアルゴリズムを実行する。システム１００は、カリフォルニア州サンタクララにあるＩｎｔｅｌ（登録商標）Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＰｅｎｔｉｕｍ（登録商標）ＩＩＩ、Ｐｅｎｔｉｕｍ（登録商標）４、Ｘｅｏｎ（登録商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（登録商標）、および／またはＳｔｒｏｎｇＡＲＭ（登録商標）マイクロプロセッサに基づいた処理システムを表すが、（他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックス等を有するＰＣを含む）他のシステムも用いられ得る。一実施形態において、例示的なシステム１００は、ワシントン州レドモンドにあるマイクロソフトコーポレーションから入手可能なウィンドウズ（登録商標）オペレーティングシステムのあるバージョンを実行し得るが、他のオペレーティングシステム（例えば、ＵＮＩＸ（登録商標）およびＬｉｎｕｘ（登録商標））、エンベデッドソフトウェア、および／またはグラフィカルユーザインタフェースも用いられ得る。従って、本発明の実施形態は、ハードウェア回路およびソフトウェアのいずれの特定の組み合わせにも限定されない。
【００５６】
実施形態は、コンピュータシステムに限定されない。本発明の代替的な実施形態は、ハンドヘルドデバイス等の他のデバイスおよびエンベデッドアプリケーションにおいて用いられ得る。ハンドヘルドデバイスのいくつかの例としては、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末（ＰＤＡ）、およびハンドヘルドＰＣが挙げられる。エンベデッドアプリケーションとしては、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、システムオンチップ、ネットワークコンピュータ（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、または少なくとも一実施形態による１または複数の命令を実行し得るその他のシステムが挙げられ得る。
【００５７】
図１Ａは、本発明の一実施形態による、少なくとも１つの命令を実行するアルゴリズムを実行するための１または複数の実行ユニット１０８を含むプロセッサ１０２と共に形成されたコンピュータシステム１００のブロック図である。一実施形態は、シングルプロセッサのデスクトップシステムまたはサーバシステムの文脈で説明され得るが、代替的な実施形態は、マルチプロセッサシステムに含まれ得る。システム１００は、「ハブ」システムアーキテクチャの一例である。コンピュータシステム１００は、データ信号を処理するプロセッサ１０２を含む。プロセッサ１０２は、例えば、複合命令セットコンピュータ（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、またはデジタル信号プロセッサ等のその他のプロセッサデバイスであり得る。プロセッサ１０２は、システム１００におけるプロセッサ１０２と他のコンポーネントとの間でデータ信号を送信し得るプロセッサバス１１０に結合される。システム１００の要素は、当業者に周知の従来の機能を実行する。
【００５８】
一実施形態において、プロセッサ１０２は、レベル１（Ｌ１）内部キャッシュメモリ１０４を含む。アーキテクチャに応じて、プロセッサ１０２は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有し得る。あるいは、別の実施形態において、キャッシュメモリは、プロセッサ１０２の外部に存在し得る。他の実施形態は、具体的な実装および必要性に応じて、内部キャッシュおよび外部キャッシュの両方の組み合わせも含み得る。レジスタファイル１０６は、整数レジスタ、浮動小数点レジスタ、状態レジスタ、および命令ポインタレジスタを含む様々なレジスタ内に異なるタイプのデータを格納し得る。
【００５９】
整数および浮動小数点オペレーションを実行するためのロジックを含む実行ユニット１０８も、プロセッサ１０２内に存在する。プロセッサ１０２は、特定のマクロ命令のためのマイクロコードを格納するマイクロコード（μコード）ＲＯＭも含む。一実施形態においては、実行ユニット１０８は、パックド命令セット１０９を処理するロジックを含む。命令を実行する関連回路と共に、汎用プロセッサ１０２の命令セットにパックド命令セット１０９を含むことにより、多くのマルチメディアアプリケーションにより用いられるオペレーションは、汎用プロセッサ１０２におけるパックドデータを用いて実行され得る。従って、多くのマルチメディアアプリケーションは、パックドデータに対するオペレーションを実行するためにプロセッサデータバスの全幅を用いることによってより効率的に加速および実行され得る。これにより、１データ要素に対して１または複数のオペレーションを一度に実行するべく、プロセッサデータバスにわたってより小さい単位のデータを転送する必要性を省き得る。
【００６０】
実行ユニット１０８の代替的な実施形態は、マイクロコントローラ、エンベデッドプロセッサ、グラフィックスデバイス、ＤＳＰ、および他のタイプの論理回路においても用いられ得る。システム１００は、メモリ１２０を含む。メモリ１２０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリデバイス、または他のメモリデバイスであり得る。メモリ１２０は、プロセッサ１０２により実行され得るデータ信号により表される命令および／またはデータを格納し得る。
【００６１】
システムロジックチップ１１６は、プロセッサバス１１０およびメモリ１２０に結合される。例示される実施形態におけるシステムロジックチップ１１６は、メモリコントローラハブ（ＭＣＨ）である。プロセッサ１０２は、プロセッサバス１１０を介してＭＣＨ１１６と通信し得る。ＭＣＨ１１６は、命令およびデータの格納、ならびにグラフィックスコマンド、データ、およびテクスチャの格納用のメモリ１２０に高帯域幅のメモリパス１１８を提供する。ＭＣＨ１１６は、システム１００におけるプロセッサ１０２と、メモリ１２０と、他のコンポーネントとの間にデータ信号を宛て、プロセッサバス１１０と、メモリ１２０と、システムＩ／Ｏ１２２との間でデータ信号をブリッジする。いくつかの実施形態において、システムロジックチップ１１６は、グラフィックスコントローラ１１２に結合するためのグラフィックスポートを提供し得る。ＭＣＨ１１６は、メモリインタフェース１１８を介してメモリ１２０に結合される。グラフィックスカード１１２は、アクセラレーテッドグラフィックスポート（ＡＧＰ）相互接続１１４を介してＭＣＨ１１６に結合される。
【００６２】
システム１００は、ＭＣＨ１１６をＩ／Ｏコントローラハブ（ＩＣＨ）１３０に結合するためにプロプライエタリハブインタフェースバス１２２を用いる。ＩＣＨ１３０は、ローカルＩ／Ｏバスを介していくつかのＩ／Ｏデバイスに直接接続を提供する。ローカルＩ／Ｏバスは、周辺機器をメモリ１２０、チップセット、およびプロセッサ１０２に接続するための高速Ｉ／Ｏバスである。いくつかの例は、オーディオコントローラ、ファームウェアハブ（フラッシュＢＩＯＳ）１２８、無線トランシーバ１２６、データストレージ１２４、ユーザ入力・キーボードインタフェースを含むレガシＩ／Ｏコントローラ、ユニバーサルシリアルバス（ＵＳＢ）等のシリアル拡張ポート、およびネットワークコントローラ１３４である。データストレージデバイス１２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ‐ＲＯＭデバイス、フラッシュメモリデバイス、または他の大容量ストレージデバイスを備え得る。
【００６３】
システムの別の実施形態においては、一実施形態による命令は、システムオンチップと共に用いられ得る。システムオンチップの一実施形態は、プロセッサおよびメモリを備える。１つのそのようなシステムのためのメモリは、フラッシュメモリである。フラッシュメモリは、プロセッサおよび他のシステムコンポーネントと同じダイ上に配置され得る。更に、メモリコントローラまたはグラフィックスコントローラ等、他のロジックブロックも、システムオンチップ上に配置され得る。
【００６４】
図１Ｂは、本発明の一実施形態の原理を実装するデータ処理システム１４０を示す。当業者には、本発明の実施形態の範囲を逸脱することなく、本明細書に説明される実施形態が代替的な処理システムと共に用いられ得ることが容易に理解されよう。
【００６５】
コンピュータシステム１４０は、一実施形態による少なくとも１つの命令を実行することができるプロセッシングコア１５９を備える。一実施形態においては、プロセッシングコア１５９は、ＣＩＳＣ、ＲＩＳＣ、またはＶＬＩＷタイプのアーキテクチャを含むが、これらに限定されない任意のタイプのアーキテクチャの処理ユニットを表す。また、プロセッシングコア１５９は、１または複数の処理技術における製造に好適であり得、機械可読媒体上に十分詳細に表されることにより当該製造を容易にするのに好適であり得る。
【００６６】
プロセッシングコア１５９は、実行ユニット１４２、レジスタファイル１４５のセット、およびデコーダ１４４を備える。プロセッシングコア１５９は、本発明の実施形態の理解には必須でない追加の回路（図示せず）も含む。実行ユニット１４２は、プロセッシングコア１５９により受信された命令を実行するために用いられる。典型的なプロセッサ命令を実行することに加えて、実行ユニット１４２は、パックドデータフォーマットに対するオペレーションを実行するためのパックド命令セット１４３の命令を実行し得る。パックド命令セット１４３は、本発明の実施形態を実行するための命令および他のパックド命令を含む。実行ユニット１４２は、内部バスによりレジスタファイル１４５に結合される。レジスタファイル１４５は、データを含む情報を格納するためのプロセッシングコア１５９上のストレージ領域を表す。上述のように、パックドデータを格納するために用いられるストレージ領域は、重要ではないことが理解される。実行ユニット１４２は、デコーダ１４４に結合される。デコーダ１４４は、プロセッシングコア１５９により受信された命令を、制御信号および／またはマイクロコードエントリポイントにデコードするために用いられる。これらの制御信号および／またはマイクロコードエントリポイントに応答して、実行ユニット１４２は、適切なオペレーションを実行する。一実施形態において、デコーダは、命令のオペコードを解釈するために用いられ、これにより、どのオペレーションが命令内に示された対応データに対して実行されるべきかを示す。
【００６７】
プロセッシングコア１５９は、様々な他のシステムデバイスと通信するためのバス１４１に結合される。そのようなシステムデバイスとしては、例えば、シンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）制御器１４６、スタティックランダムアクセスメモリ（ＳＲＡＭ）制御器１４７、バーストフラッシュメモリインタフェース１４８、ＰＣメモリカード国際協会（ＰＣＭＣＩＡ）／コンパクトフラッシュ（登録商標）（ＣＦ）カード制御器１４９、液晶ディスプレイ（ＬＣＤ）制御器１５０、ダイレクトメモリアクセス（ＤＭＡ）コントローラ１５１、および代替的なバスマスタインタフェース１５２が挙げられ得るが、これらに限定されない。一実施形態において、データ処理システム１４０は、Ｉ／Ｏバス１５３を介して様々なＩ／Ｏデバイスと通信するためのＩ／Ｏブリッジ１５４も備え得る。そのようなＩ／Ｏデバイスとしては、例えば、ユニバーサルアシンクロナスレシーバ／トランスミッタ（ＵＡＲＴ）１５５、ユニバーサルシリアルバス（ＵＳＢ）１５６、Ｂｌｕｅｔｏｏｔｈ（登録商標）無線ＵＡＲＴ１５７、およびＩ／Ｏ拡張インタフェース１５８が挙げられ得るが、これらに限定されない。
【００６８】
データ処理システム１４０の一実施形態は、モバイル、ネットワーク、および／または無線の通信、ならびにテキスト文字列比較オペレーションを含むＳＩＭＤオペレーションを実行することができるプロセッシングコア１５９を提供する。プロセッシングコア１５９は、ウォルシュアダマール変換、高速フーリエ変換（ＦＦＴ）、離散コサイン変換（ＤＣＴ）等の離散変換、およびそれらの各逆変換、色空間変換、動画エンコード動き推定、または動画デコード動き補償等の圧縮／解凍技術、ならびにパルス符号化変調（ＰＣＭ）等の変調／復調（ＭＯＤＥＭ）機能を含む様々なオーディオ、動画、画像、および通信のアルゴリズムでプログラミングされ得る。
【００６９】
図１Ｃは、ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行することができるデータ処理システムの代替的な別の実施形態を示す。代替的な一実施形態によれば、データ処理システム１６０は、メインプロセッサ１６６、ＳＩＭＤコプロセッサ１６１、キャッシュメモリ１６７、および入出力システム１６８を含み得る。任意選択で、入出力システム１６８は、無線インタフェース１６９に結合され得る。ＳＩＭＤコプロセッサ１６１は、一実施形態による命令を含むオペレーションを実行することができる。プロセッシングコア１７０は、１または複数の処理技術における製造に好適であり得、機械可読媒体上に十分詳細に表されることにより、プロセッシングコア１７０を含むデータ処理システム１６０の全てまたは一部の製造を容易にするのに好適であり得る。
【００７０】
一実施形態においては、ＳＩＭＤコプロセッサ１６１は、実行ユニット１６２およびレジスタファイル１６４のセットを備える。メインプロセッサ１６６の一実施形態は、実行ユニット１６２による実行のために一実施形態による命令を含む命令セット１６３の命令を認識するデコーダ１６５を備える。代替的な実施形態において、ＳＩＭＤコプロセッサ１６１は、命令セット１６３の命令をデコードするデコーダ１６５Ｂの少なくとも一部も備える。プロセッシングコア１７０は、本発明の実施形態の理解には必須でない追加の回路（図示せず）も含む。
【００７１】
オペレーションにおいて、メインプロセッサ１６６は、キャッシュメモリ１６７および入出力システム１６８とのインタラクションを含む一般的なタイプのデータ処理オペレーションを制御するデータ処理命令のストリームを実行する。ＳＩＭＤコプロセッサ命令は、データ処理命令のストリーム内に埋め込まれる。メインプロセッサ１６６のデコーダ１６５は、これらのＳＩＭＤコプロセッサ命令を、取り付けられたＳＩＭＤコプロセッサ１６１により実行されるべきタイプとして認識する。従って、メインプロセッサ１６６は、コプロセッサバス１７１上でこれらのＳＩＭＤコプロセッサ命令（またはＳＩＭＤコプロセッサ命令を表す制御信号）を発行し、命令は、取り付けられた任意のＳＩＭＤコプロセッサによりコプロセッサバス１７１から受信される。この場合、ＳＩＭＤコプロセッサ１６１は、そのための受信済みの任意のＳＩＭＤコプロセッサ命令を受け取って実行する。
【００７２】
データは、ＳＩＭＤコプロセッサ命令により処理するために無線インタフェース１６９を介して受信され得る。一例においては、音声通信は、デジタル信号の形式で受信され得、デジタル信号は、ＳＩＭＤコプロセッサ命令により処理され、音声通信を表すデジタルオーディオサンプルを再生成し得る。別の例において、圧縮した音声および／または動画は、デジタルビットストリームの形式で受信され得、デジタルビットストリームは、ＳＩＭＤコプロセッサ命令により処理され、デジタルオーディオサンプルおよび／または動画フレームを再生成し得る。プロセッシングコア１７０の一実施形態において、メインプロセッサ１６６、およびＳＩＭＤコプロセッサ１６１は、単一のプロセッシングコア１７０に統合される。単一のプロセッシングコア１７０は、実行ユニット１６２、レジスタファイル１６４のセット、および一実施形態による命令を含む命令セット１６３の命令を認識するデコーダ１６５を備える。
【００７３】
図２は、本発明の一実施形態による命令を実行する論理回路を含むプロセッサ２００のためのマイクロアーキテクチャのブロック図である。いくつかの実施形態において、一実施形態による命令は、バイト、ワード、ダブルワード、クワッドワード等のサイズ、ならびに単精度および倍精度の整数および浮動小数点のデータタイプのようなデータタイプを有するデータ要素に対して演算を行うように実装され得る。一実施形態において、インオーダフロントエンド２０１は、実行されるべき命令をフェッチし、それらをプロセッサパイプラインにおいて後に用いるために用意するプロセッサ２００の一部である。フロントエンド２０１は、いくつかのユニットを含み得る。一実施形態において、命令プリフェッチャ２２６は、メモリから命令をフェッチし、それらを命令デコーダ２２８へフィードし、命令デコーダ２２８はそれらをデコードまたは解釈する。例えば、一実施形態において、デコーダは、機械が実行し得る「マイクロ命令」または「マイクロオペレーション」（マイクロオプまたはμオプとも呼ばれる）と呼ばれる１または複数のオペレーションに、受信済み命令をデコードする。他の実施形態において、デコーダは、命令をパースして、一実施形態によるオペレーションを実行するマイクロアーキテクチャにより用いられるオペコードおよび対応するデータ、ならびに制御フィールドにする。一実施形態において、トレースキャッシュ２３０は、デコード済みのμオプを受け取り、それらをプログラムで順序付けられたシーケンスにアセンブルし、または実行するためにμオプキュー２３４においてトレースする。トレースキャッシュ２３０が複合命令を受け取ると、マイクロコードＲＯＭ２３２は、オペレーションを完了するのに必要とされるμオプを提供する。
【００７４】
いくつかの命令は、単一のマイクロオプに変換されるが、他のものは、オペレーション全体を完了するのにいくつかのマイクロオプを必要とする。一実施形態において、命令を完了するべく、５以上のマイクロオプが必要とされる場合、デコーダ２２８は、マイクロコードＲＯＭ２３２にアクセスして命令を実行する。一実施形態において、命令は、命令デコーダ２２８において処理するための少数のマイクロオプにデコードされ得る。別の実施形態において、オペレーションを実現するのにいくつかのマイクロオプが必要とされる場合、命令は、マイクロコードＲＯＭ２３２内に格納され得る。トレースキャッシュ２３０は、マイクロコードＲＯＭ２３２から一実施形態による１または複数の命令を完了するマイクロコードシーケンスを読み出すための適切なマイクロ命令ポインタを決定するエントリポイントプログラマブルロジックアレイ（ＰＬＡ）を参照する。マイクロコードＲＯＭ２３２が命令のためのマイクロオプを配列し終えた後、機械のフロントエンド２０１は、トレースキャッシュ２３０からマイクロオプのフェッチを再開する。
【００７５】
アウトオブオーダ実行エンジン２０３において、実行のために命令が用意される。アウトオブオーダ実行ロジックは、命令フローがパイプラインを下って、実行をスケジューリングされるときに性能を最適化するべく、命令フローを円滑にして並べ替えるためのいくつかのバッファを有する。アロケータロジックは、実行するために、各μオプが必要とするマシンバッファおよびリソースを割り当てる。レジスタリネームロジックは、ロジックレジスタをレジスタファイルにおけるエントリにリネームする。また、アロケータは命令スケジューラ、すなわちメモリスケジューラ、高速スケジューラ２０２、低速／一般浮動小数点スケジューラ２０４、および簡易浮動小数点スケジューラ２０６の前に、μオプ毎に２つのμオプキューのうちの１つのエントリを割り当てる。μオプオプキューの１つはメモリオペレーションに関するものであり、もう１つは非メモリオペレーションに関するものである。μオプがそのオペレーションを完了するのに必要とする依存先の入力レジスタオペランドソースの準備ができたことおよび実行リソースの利用可能性に基づいて、μオプスケジューラ２０２、２０４、２０６は、μオプがいつ実行する準備ができるかを判断する。一実施形態の高速スケジューラ２０２は、メインクロックサイクルの半分毎にスケジューリングし得るが、他のスケジューラは、メインプロセッサのクロックサイクル毎に１回のみスケジューリングし得る。スケジューラは、μオプの実行をスケジューリングするためにディスパッチポートを調整する。
【００７６】
レジスタファイル２０８、２１０は、スケジューラ２０２、２０４、２０６と、実行ブロック２１１の実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４との間にある。整数および浮動小数点のオペレーションのために各々、別個のレジスタファイル２０８、２１０が存在する。また、一実施形態の各レジスタファイル２０８、２１０は、レジスタファイルにまだ書き込まれていない完了したばかりの結果を、新しい依存性μオプへとバイパスし、または転送し得るバイパスネットワークを含む。また、整数レジスタファイル２０８および浮動小数点レジスタファイル２１０は、他方とデータを通信することができる。一実施形態においては、整数レジスタファイル２０８は、２つの別個のレジスタファイルに分割され、１つのレジスタファイルは、データの下位の３２ビット用であり、第２のレジスタファイルは、データの上位の３２ビット用である。一実施形態の浮動小数点レジスタファイル２１０は、１２８ビット幅のエントリを有する。典型的には、浮動小数点命令は、６４ビット〜１２８ビット幅のオペランドを有するからである。
【００７７】
実行ブロック２１１は、実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４を含み、命令がここで実際に実行される。このセクションは、マイクロ命令が実行する必要がある整数および浮動小数点のデータオペランド値を格納するレジスタファイル２０８、２１０を含む。一実施形態のプロセッサ２００は、いくつかの実行ユニット、すなわち、アドレス生成ユニット（ＡＧＵ）２１２、ＡＧＵ２１４、高速ＡＬＵ２１６、高速ＡＬＵ２１８、低速ＡＬＵ２２０、浮動小数点ＡＬＵ２２２、浮動小数点移動ユニット２２４から構成される。一実施形態において、浮動小数点実行ブロック２２２、２２４は、浮動小数点、ＭＭＸ、ＳＩＭＤ、およびＳＳＥ、または他のオペレーションを実行する。一実施形態の浮動小数点ＡＬＵ２２２は、除算、平方根、および剰余のマイクロオプを実行する６４ビットｘ６４ビットの浮動小数点除算器を含む。本発明の実施形態において、浮動小数点値を含む命令は、浮動小数点ハードウェアにより処理され得る。一実施形態において、ＡＬＵオペレーションは、高速ＡＬＵ実行ユニット２１６、２１８に向かう。一実施形態の高速ＡＬＵ２１６、２１８は、有効レイテンシがクロックサイクルの半分である高速のオペレーションを実行し得る。一実施形態については、複合整数オペレーションの大部分は、低速ＡＬＵ２２０に向かう。低速ＡＬＵ２２０は、乗算器、シフト、フラグロジック、および分岐処理等の長レイテンシタイプのオペレーション用の整数実行ハードウェアを含むからである。メモリロード／ストアオペレーションは、ＡＧＵ２１２、２１４により実行される。一実施形態においては、整数ＡＬＵ２１６、２１８、２２０は、６４ビットデータオペランドに対して整数オペレーションを実行する文脈で説明される。代替的な実施形態において、ＡＬＵ２１６、２１８、２２０は、１６、３２、１２８、２５６等を含む様々なデータビットをサポートするように実装され得る。同様に、浮動小数点ユニット２２２、２２４は、様々なビット幅を有するオペランドの範囲をサポートするように実装され得る。一実施形態において、浮動小数点ユニット２２２、２２４は、ＳＩＭＤ命令およびマルチメディア命令と連携して１２８ビット幅のパックドデータオペランドに対して演算を行い得る。
【００７８】
一実施形態において、μオプスケジューラ２０２、２０４、２０６は、親のロードが実行を終了する前に依存性オペレーションをディスパッチする。μオプはプロセッサ２００において投機的にスケジューリングされ、実行されるので、プロセッサ２００は、メモリミスを処理するロジックも含む。データロードがデータキャッシュ内でミスを起こした場合、一時的に誤ったデータを伴ってスケジューラを離れた依存性オペレーションがパイプライン内でインフライトであり得る。リプレイメカニズムは、誤ったデータを用いる命令を追跡し、再実行する。依存性オペレーションのみが再生される必要があり、非依存性オペレーションは、完了することが可能である。プロセッサの一実施形態におけるスケジューラおよびリプレイメカニズムは、ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令をキャッチするようにも設計される。
【００７９】
「レジスタ」という用語は、オペランドを識別する命令の一部として用いられるオンボードプロセッサのストレージ位置を指し得る。換言すれば、レジスタは、プロセッサの（プログラマの視点から）外部から利用可能なものであってもよい。しかし、実施形態のレジスタは、特定のタイプの回路にその意味が限定されるべきではない。むしろ、実施形態のレジスタは、データを格納および提供し、本明細書に説明されている機能を実行することができる。本明細書において説明されるレジスタは、専用物理レジスタ、レジスタリネームを用いて動的に割り当てられた物理レジスタ、専用レジスタおよび動的に割り当てられた物理レジスタ等の組み合わせのような任意の数の異なる技術を用いて、回路によりプロセッサ内に実装され得る。一実施形態において、整数レジスタは、３２ビットの整数データを格納する。一実施形態のレジスタファイルは、パックドデータ用の８個のマルチメディアＳＩＭＤレジスタも含む。後述のように、レジスタは、カリフォルニア州サンタクララにあるＩｎｔｅｌ（登録商標）ＣｏｒｐｏｒａｔｉｏｎのＭＭＸ技術で有効にされるマイクロプロセッサ内の６４ビット幅のＭＭＸ（商標）レジスタ（いくつかの例において「ｍｍ」レジスタとも称される）等、パックドデータを保持するように設計されるデータレジスタとして理解される。これらのＭＭＸレジスタは、整数および浮動小数点の両方の形式で利用可能であり、ＳＩＭＤ命令およびＳＳＥ命令を伴うパックドデータ要素で演算を行い得る。同様に、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４、またはそれ以降（汎用的に「ＳＳＥｘ」と称される）の技術に関連する１２８ビット幅のＸＭＭレジスタも、そのようなパックドデータオペランドを保持するために用いられ得る。一実施形態において、パックドデータおよび整数データを格納するときに、レジスタは、２つのデータタイプを区別する必要はない。一実施形態において、整数および浮動小数点は、同一のレジスタファイルか、または異なるレジスタファイルに含まれる。更に、一実施形態において、浮動小数点データおよび整数データは、異なるレジスタか、または同一のレジスタに格納され得る。
【００８０】
以下の図における例において、いくつかのデータオペランドが説明される。図３Ａは、本発明の一実施形態によるマルチメディアレジスタにおける様々なパックドデータタイプ表現を示す。図３Ａは、１２８ビット幅のオペランドのパックドバイト３１０、パックドワード３２０、およびパックドダブルワード（ｄｗｏｒｄ）３３０のデータタイプを示す。本例におけるパックドバイトフォーマット３１０は１２８ビット長であり、１６個のパックドバイトデータ要素を含む。ここでは、バイトは８ビットのデータとして定義される。各バイトデータ要素についての情報は、バイト０についてはビット７〜ビット０に格納され、バイト１についてはビット１５〜ビット８に格納され、バイト２についてはビット２３〜ビット１６に格納され、最後にバイト１５についてはビット１２０〜ビット１２７に格納される。従って、全ての利用可能なビットがレジスタにおいて用いられる。このストレージ構成は、プロセッサのストレージ効率を高める。同様に、ここでは１６個のデータ要素にアクセスするので、１つのオペレーションが１６個のデータ要素に対して並列に実行され得る。
【００８１】
一般には、データ要素は、同じ長さの他のデータ要素と共に単一のレジスタまたはメモリ位置に格納される個々のデータである。ＳＳＥｘ技術に関連するパックドデータシーケンスにおいては、ＸＭＭレジスタに格納されるデータ要素の数は、個々のデータ要素のビット長により分割された１２８ビットである。同様に、ＭＭＸおよびＳＳＥ技術に関連するパックドデータシーケンスにおいては、ＭＭＸレジスタに格納されるデータ要素の数は、個々のデータ要素のビット長により分割された６４ビットである。図３Ａに示されるデータタイプは、１２８ビット長であるが、本発明の実施形態は、６４ビット幅、２５６ビット幅、５１２ビット幅、または他のサイズのオペランドでも演算を行い得る。本例のパックドワードフォーマット３２０は、１２８ビット長であり、８個のパックドワードデータ要素を含む。各パックドワードは、１６ビットの情報を含む。図３Ａのパックドダブルワードフォーマット３３０は、１２８ビット長であり、４個のパックドダブルワードデータ要素を含む。各パックドダブルワードデータ要素は、３２ビットの情報を含む。パックドクワッドワードは、１２８ビット長であり、２個のパックドクワッドワードデータ要素を含む。
【００８２】
図３Ｂは、代替的なレジスタ内データストレージフォーマットを示す。各パックドデータは、２以上の非依存性データ要素を含み得る。３つのパックドデータフォーマットが示されている。すなわち、パックドハーフ３４１、パックドシングル３４２、およびパックドダブル３４３である。パックドハーフ３４１、パックドシングル３４２、およびパックドダブル３４３の一実施形態は、固定小数点データ要素を含む。代替的な実施形態において、パックドハーフ３４１、パックドシングル３４２、およびパックドダブル３４３のうちの１または複数は、浮動小数点データ要素を含み得る。パックドハーフ３４１の代替的な一実施形態は、８個の１６ビットデータ要素を含む１２８ビット長である。パックドシングル３４２の一実施形態は、１２８ビット長であり、４個の３２ビットデータ要素を含む。パックドダブル３４３の一実施形態は、１２８ビット長であり、２個の６４ビットデータ要素を含む。そのようなパックドデータフォーマットが他のレジスタ長、例えば、９６ビット、１６０ビット、１９２ビット、２２４ビット、２５６ビット、５１２ビット、またはそれより大きい長さに更に拡張され得ることが理解されよう。
【００８３】
図３Ｃは、本発明の一実施形態によるマルチメディアレジスタにおける様々な符号付きおよび符号なしのパックドデータタイプ表現を示す。符号なしパックドバイト表現３４４は、ＳＩＭＤレジスタにおける符号なしパックドバイトの格納を示す。各バイトデータ要素についての情報は、バイト０についてはビット７〜ビット０に格納され、バイト１についてはビット１５〜ビット８に格納され、バイト２についてはビット２３〜ビット１６に格納される等であり、最後にバイト１５についてはビット１２０〜ビット１２７に格納される。従って、全ての利用可能なビットがレジスタにおいて用いられる。このストレージ構成は、プロセッサのストレージ効率を高め得る。同様に、ここでは１６個のデータ要素にアクセスするので、１つのオペレーションが１６個のデータ要素に対して並列に実行され得る。符号付きパックドバイト表現３４５は、符号付きパックドバイトの格納を示す。各バイトデータ要素の８番目のビットは、符号インジケータであることに留意されたい。符号なしパックドワード表現３４６は、ワード７〜ワード０がどのようにしてＳＩＭＤレジスタに格納されるかを示す。符号付きパックドワード表現３４７は、符号なしパックドワードのレジスタ内表現３４６に類似する。各ワードデータ要素の１６番目のビットは、符号インジケータであることに留意されたい。符号なしパックドダブルワード表現３４８は、ダブルワードデータ要素がどのようにして格納されるかを示す。符号付きパックドダブルワード表現３４９は、符号なしパックドダブルワードのレジスタ内表現３４８に類似する。必要な符号ビットは、各ダブルワードデータ要素の３２番目のビットであることに留意されたい。
【００８４】
図３Ｄは、カリフォルニア州サンタクララにあるＩｎｔｅｌ（登録商標）Ｃｏｒｐｏｒａｔｉｏｎのワールドワイドウェブ（ｗｗｗ）のｉｎｔｅｌ．ｃｏｍ／ｐｒｏｄｕｃｔｓ／ｐｒｏｃｅｓｓｏｒ／ｍａｎｕａｌｓ／から入手可能である「Ｉｎｔｅｌ（登録商標）６４  ａｎｄ  ＩＡ−３２  Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ'ｓ  Ｍａｎｕａｌ  Ｃｏｍｂｉｎｅｄ  Ｖｏｌｕｍｅｓ  ２Ａ  ａｎｄ  ２Ｂ：Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｒｅｆｅｒｅｎｃｅ  Ａ−Ｚ」において説明されるタイプのオペコードフォーマットと一致する、３２またはそれより多くのビット、およびレジスタ／メモリオペランドアドレス指定モードを有するオペレーションエンコード（オペコード）フォーマット３６０の一実施形態の図示である。一実施形態において、命令は、フィールド３６１および３６２のうちの１または複数によりエンコードされ得る。最大で２つのソースオペランド識別子３６４および３６５を含む、１命令当たり最大で２つのオペランド位置が識別され得る。一実施形態において、デスティネーションオペランド識別子３６６は、ソースオペランド識別子３６４と同一であるが、他の実施形態においてこれらは異なる。代替的な実施形態において、デスティネーションオペランド識別子３６６は、ソースオペランド識別子３６５と同一であるが、他の実施形態においてこれらは異なる。一実施形態において、ソースオペランド識別子３６４および３６５により識別されたソースオペランドのうちの１つは、命令の結果により上書きされるが、他の実施形態において、識別子３６４は、ソースレジスタ要素に対応し、識別子３６５は、デスティネーションレジスタ要素に対応する。一実施形態において、オペランド識別子３６４および３６５は、３２ビットまたは６４ビットのソースオペランドおよびデスティネーションオペランドを識別するために用いられ得る。
【００８５】
図３Ｅは、４０個またはそれより多いビットを有する他の代替的なオペレーションエンコード（オペコード）フォーマット３７０の図示である。オペコードフォーマット３７０は、オペコードフォーマット３６０と一致し、任意選択のプレフィックスバイト３７８を含む。一実施形態による命令は、フィールド３７８、３７１、および３７２のうちの１または複数によりエンコードされ得る。１命令当たり最大で２つのオペランド位置が、ソースオペランド識別子３７４および３７５、ならびにプレフィックスバイト３７８により識別され得る。一実施形態において、プレフィックスバイト３７８は、３２ビットまたは６４ビットのソースオペランドおよびデスティネーションオペランドを識別するために用いられ得る。一実施形態において、デスティネーションオペランド識別子３７６は、ソースオペランド識別子３７４と同一であるが、他の実施形態においてこれらは異なる。代替的な実施形態において、デスティネーションオペランド識別子３７６は、ソースオペランド識別子３７５と同一であるが、他の実施形態においてこれらは異なる。一実施形態において、命令は、オペランド識別子３７４および３７５により識別されたオペランドのうちの１または複数に対して演算を行い、オペランド識別子３７４および３７５により識別された１または複数のオペランドは、命令の結果により上書きされるが、他の実施形態において、識別子３７４および３７５により識別されたオペランドは、別のレジスタにおける別のデータ要素に書き込まれる。オペコードフォーマット３６０および３７０は、ＭＯＤフィールド３６３および３７３、ならびに任意選択のスケール・インデックス・ベースバイトおよび変位バイトよって部分的に指定されたレジスタからレジスタへのアドレス指定、メモリからレジスタへのアドレス指定、メモリによるレジスタのアドレス指定、レジスタによるレジスタのアドレス指定、即値によるレジスタのアドレス指定、レジスタからメモリへのアドレス指定を可能にする。
【００８６】
次に図３Ｆを参照すると、いくつかの代替的な実施形態において、６４ビット（または１２８ビット、または２５６ビット、または５１２ビット、またはそれより大きいもの）の単一命令多重データ（ＳＩＭＤ）算術演算が、コプロセッサデータ処理（ＣＤＰ）命令により実行され得る。オペレーションエンコード（オペコード）フォーマット３８０は、ＣＤＰオペコードフィールド３８２および３８９を有するそのような１つのＣＤＰ命令を図示する。代替的な実施形態におけるこのタイプのＣＤＰ命令オペレーションは、フィールド３８３、３８４、３８７、および３８８のうちの１または複数によりエンコードされ得る。最大で２つのソースオペランド識別子３８５および３９０、ならびに１つのデスティネーションオペランド識別子３８６を含む、１命令当たり最大で３つのオペランド位置が識別され得る。コプロセッサの一実施形態は、８ビット、１６ビット、３２ビット、および６４ビットの値に対して演算を行い得る。一実施形態において、命令は整数データ要素に対して実行される。いくつかの実施形態において、命令は、条件フィールド３８１を用いて、条件付きで実行され得る。いくつかの実施形態においては、ソースデータサイズは、フィールド３８３によりエンコードされ得る。いくつかの実施形態において、ゼロ（Ｚ）、負（Ｎ）、キャリー（Ｃ）、およびオーバーフロー（Ｖ）の検出は、ＳＩＭＤフィールドに対して行われ得る。いくつかの命令において、飽和のタイプは、フィールド３８４によりエンコードされ得る。
【００８７】
次に図３Ｇを参照すると、カリフォルニア州サンタクララにあるＩｎｔｅｌ（登録商標）Ｃｏｒｐ．のワールドワイドウェブ（ｗｗｗ）のｉｎｔｅｌ．ｃｏｍ／ｐｒｏｄｕｃｔｓ／ｐｒｏｃｅｓｓｏｒ／ｍａｎｕａｌｓ／から入手可能な「Ｉｎｔｅｌ（登録商標）Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ」に説明されるオペコードフォーマットのタイプと一致する別の実施形態によるＳＩＭＤベクトルパックドタプル相互比較機能を提供する、他の代替的なオペレーションエンコード（オペコード）フォーマット３９７の図示である。
【００８８】
元のｘ８６命令セットは、様々なフォーマットのアドレスシラブルおよび即値オペランドが追加のバイトに含まれ、その存在が第１の「オペコード」バイトから分かる１バイトのオペコードを提供した。更に、オペコードに対する修飾子（命令の前に配置されなければならないのでプレフィックスと呼ばれた）として予約された特定のバイト値が存在した。（これらの特別なプレフィックス値を含む）元のパレットの２５６個のオペコードバイトが使い尽くされると、単一のバイトは、エスケープとして新しいセットの２５６個のオペコード専用となった。ベクトル命令（例えば、ＳＩＭＤ）が加えられると、より多くのオペコードに対する必要性が生じ、たとえプレフィックスを用いることによって拡張されても、「２バイト」のオペコードマップも不十分となった。このため、新しい命令が追加のマップに加えられ、このマップは、２バイトおよび任意選択のプレフィックスを識別子として用いる。
【００８９】
更に、６４ビットモードで追加のレジスタを容易なものとするべく、プレフィックスとオペコード（およびオペコードを決定するのに必要な任意のエスケープバイト）との間に追加のプレフィックスが用いられ得る（「ＲＥＸ」と呼ばれる）。一実施形態において、ＲＥＸは、６４ビットモードで追加のレジスタの使用を示す４個の「ペイロードビットを有し得る。他の実施形態において、ＲＥＸは、４ビットより少ないか、またはそれより大きなビットを有し得る。（概ねフォーマット３６０および／またはフォーマット３７０と一致する）少なくとも１つの命令セットの一般的なフォーマットが以下に汎用的に示されている。  ［ｐｒｅｆｉｘｅｓ］  ［ｒｅｘ］  ｅｓｃａｐｅ  ［ｅｓｃａｐｅ２］  ｏｐｃｏｄｅ  ｍｏｄｒｍ（等．）
【００９０】
オペコードフォーマット３９７は、オペコードフォーマット３７０と一致し、（一実施形態において１６進数のＣ４で開始する）任意選択のＶＥＸプレフィックスバイト３９１を備え、他の最も一般に用いられる命令プレフィックスバイトおよびエスケープコードを置き換える。例えば、以下は、２つのフィールドを用いて命令をエンコードする実施形態を示し、これは、第２のエスケープコードが元の命令中に存在する場合、またはＲＥＸフィールドにおける追加のビット（例えば、ＸＢフィールドおよびＷフィールド）が用いられる必要がある場合に用いられ得る。以下に示される実施形態において、レガシエスケープは、新しいエスケープ値により表され、レガシプレフィックスは、「ペイロード」バイトの一部として完全に圧縮され、レガシプレフィックスは、回収され、将来の拡張に利用可能であり、第２のエスケープコードは、フューチャマップまたは機能空間が利用可能な「マップ」フィールドにおいて圧縮され、新しい機能（例えば、大きくしたベクトル長および追加のソースレジスタ指定子）が追加される。
【数１】
0006745022.tif 000002
【００９１】
一実施形態による命令は、フィールド３９１および３９２のうちの１または複数によりエンコードされ得る。１命令当たり最大で４つのオペランド位置が、ソースオペランド識別子３７４および３７５と組み合わせ、任意選択のスケール・インデックス・ベース（ＳＩＢ）識別子３９３、任意選択の変位識別子３９４、および任意選択の即値バイト３９５と組み合わせてフィールド３９１により識別され得る。一実施形態において、ＶＥＸプレフィックスバイト３９１は、３２ビットもしくは６４ビットのソースオペランドおよびデスティネーションオペランド、ならびに／または１２８ビットもしくは２５６ビットのＳＩＭＤレジスタオペランドまたはメモリオペランドを識別するために用いられ得る。一実施形態において、オペコードフォーマット３９７により提供される機能は、オペコードフォーマット３７０で冗長であり得るが、他の実施形態においてこれらは異なる。オペコードフォーマット３７０および３９７は、ＭＯＤフィールド３７３、ならびに任意選択の（ＳＩＢ）識別子３９３、任意選択の変位識別子３９４、および任意選択の即値バイト３９５により部分的に指定されたレジスタからレジスタへのアドレス指定、メモリからレジスタへのアドレス指定、メモリによるレジスタのアドレス指定、レジスタによるレジスタのアドレス指定、即値によるレジスタのアドレス指定、レジスタからメモリへのアドレス指定を可能にする。
【００９２】
次に図３Ｈを参照すると、別の実施形態によるＳＩＭＤベクトルパックドタプル相互比較機能を提供する他の代替的なオペレーションエンコード（オペコード）フォーマット３９８の図示である。オペコードフォーマット３９８は、オペコードフォーマット３７０および３９７と一致し、（一実施形態において１６進数の６２個で開始する）任意選択のＥＶＥＸプレフィックスバイト３９６を備え、他の最も一般に用いられる命令プレフィックスバイトおよびエスケープコードを置き換え、追加の機能を提供する。一実施形態による命令は、フィールド３９６および３９２のうちの１または複数によりエンコードされ得る。１命令当たり最大で４つのオペランド位置および１つのマスクが、ソースオペランド識別子３７４および３７５と組み合わせ、任意選択のスケール・インデックス・ベース（ＳＩＢ）識別子３９３、任意選択の変位識別子３９４、および任意選択の即値バイト３９５と組み合わせてフィールド３９６により識別され得る。一実施形態において、ＥＶＥＸプレフィックスバイト３９６は、３２ビットもしくは６４ビットのソースオペランドおよびデスティネーションオペランド、ならびに／または１２８ビット、２５６ビット、もしくは５１２ビットのＳＩＭＤレジスタオペランドまたはメモリオペランドを識別するために用いられ得る。一実施形態において、オペコードフォーマット３９８により提供される機能は、オペコードフォーマット３７０または３９７で冗長であり得るが、他の実施形態においてこれらは異なる。オペコードフォーマット３９８は、ＭＯＤフィールド３７３、ならびに任意選択の（ＳＩＢ）識別子３９３、任意選択の変位識別子３９４、および任意選択の即値バイト３９５により部分的に指定された、マスクを用いるレジスタからレジスタへのアドレス指定、メモリからレジスタへのアドレス指定、メモリによるレジスタのアドレス指定、レジスタによるレジスタのアドレス指定、即値によるレジスタのアドレス指定、レジスタからメモリへのアドレス指定を可能にする。（概ねフォーマット３６０および／またはフォーマット３７０と一致する）少なくとも１つの命令セットの一般的なフォーマットが以下に汎用的に示されている。
ｅｖｅｘ１  ＲＸＢｍｍｍｍｍ  ＷｖｖｖＬｐｐ  ｅｖｅｘ４  ｏｐｃｏｄｅ  ｍｏｄｒｍ［ｓｉｂ］［ｄｉｓｐ］［ｉｍｍ］
【００９３】
一実施形態において、ＥＶＥＸフォーマット３９８に従ってエンコードされた命令は、例えば、ユーザ構成可能マスクレジスタ等の追加の新しい機能、または追加のオペランド、または１２８ビット、２５６ビット、もしくは５１２ビットのベクトルレジスタ、もしくはより高位レジスタからの選択等と共に用いるＳＩＭＤベクトルパックドタプル相互比較機能を提供するために用いられ得る追加の「ペイロード」ビットを有し得る。
【００９４】
例えば、マスクを用いないＳＩＭＤベクトルパックドタプル相互比較機能を提供するＶＥＸフォーマット３９７が用いられ得る場合、明示的なユーザ構成可能マスクを用いるＳＩＭＤベクトルパックドタプル相互比較機能を提供するＥＶＥＸフォーマット３９８が用いられ得る。更に、１２８ビットまたは２５６ビットのベクトルレジスタにＳＩＭＤベクトルパックドタプル相互比較機能を提供するＶＥＸフォーマット３９７が用いられ得る場合、１２８ビット、２５６ビット、５１２ビット、またはそれより大きい（またはより小さい）ベクトルレジスタにＳＩＭＤベクトルパックドタプル相互比較機能を提供するＥＶＥＸフォーマット３９８が用いられ得る。
【００９５】
効率的なベクトルアドレス競合解決のためのＳＩＭＤベクトルパックドタプル相互比較機能を提供する例示的な命令は、以下の例により示される。
【表１】
0006745022.tif 000003
【００９６】
比較される要素、例えばインデックスが比較結果を表すのに必要とされるマスクと同じサイズである場合（例えば、２５６ビットレジスタにおける１６個の１６ビット要素）、全ての要素を相互比較する命令の実行が適切であり得る。しかし、比較結果を表すのに利用可能なビットより比較する要素の方が多い場合、代替的な解決法が必要とされる場合がある。ＳＩＭＤベクトルパックドタプル比較命令は、上記の例におけるように、ＳＩＭＤベクトルアドレス競合検出機能、および効率的なＳＩＭＤアドレス競合解決のために競合マスクを生成するべく組み合わされた結果を提供する、可変サイズの要素およびメモリオフセットのための代替的な解決法として用いられ得ることが理解されよう。
【００９７】
例は、可変の複数のデータフィールドを含む第１および第２のレジスタを有するプロセッサを備え、データフィールドの各々は、第１のデータタイプの要素を格納する。いくつかの実施形態におけるプロセッサは、ベクトルパックドタプル（例えば、ダブル、クワドラプル、またはオクタプル）相互比較のためのＳＩＭＤ命令を実行し、この命令は、第１のレジスタのタプルを構成するデータフィールドの一部におけるデータフィールド毎に、その対応する要素を、第２のレジスタにおけるタプル（またはメモリにおけるベクトル）のデータフィールドの対応する部分の全ての要素と比較し、対応する比較に応じて、対応する第１のレジスタ部分のマスクされない各要素に対応するビットマスクにおいて、第２のベクトル部分の各要素に対応するマスクビットをセットする。パックドタプルは各々、２個、４個、または８個の要素を備え得、これらの要素は、符号付きまたは符号なしのバックトバイト（８ビット）、ワード（１６ビット）、ダブルワード（３２ビット）、またはクワッドワード（６４ビット）であってもよい。また、いくつかの実施形態において、任意の比較ビットマスクは、別のソース／デスティネーションレジスタに格納される前は、当該ソース／デスティネーションレジスタのデータフィールドにおける対応する要素によりシフトされた状態のままであり得る。通常、比較タイプは、命令によって指定された即値オペランドにより（例えば、ｅｑｕａｌ、ｌｅｓｓ‐ｔｈａｎ、ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、ａｌｗａｙｓ  ｆａｌｓｅ、ｎｏｔ  ｅｑｕａｌ、ｎｏｔ  ｌｅｓｓ−ｔｈａｎ、ｎｏｔ  ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、およびａｌｗａｙｓ  ｔｒｕｅのうちの１つとして）示され得る。また、以下に（例えば、図１４Ａに関連して）より詳細に説明されるＳＩＭＤ置換制御を提供するべく、ＳＩＭＤベクトル先行ゼロカウント命令が可変サイズの要素および競合マスクと共に用いられ得ることが理解されよう。これによりメモリを介して依存性計算を実行することなく、レジスタにおける効率的なＳＩＭＤアドレス競合解決を可能にする。従って、本明細書に開示される命令は、特にギャザー・変更・スキャターアプリケーションにおいて効率的なＳＩＭＤアドレス競合解決を提供する。
【００９８】
図４Ａは、本発明の少なくとも一実施形態による、インオーダパイプライン、およびレジスタリネームステージ、アウトオブオーダ発行／実行パイプラインを示すブロック図である。図４Ｂは、本発明の少なくとも一実施形態による、プロセッサに含まれるインオーダアーキテクチャコア、およびレジスタリネームロジック、アウトオブオーダ発行／実行ロジックを示すブロック図である。図４Ａにおける実線ボックスは、インオーダパイプラインを示すが、破線ボックスは、レジスタリネーム、アウトオブオーダ発行／実行パイプラインを示す。同様に、図４Ｂにおける実線ボックスは、インオーダアーキテクチャロジックを示すが、破線ボックスは、レジスタリネームロジックおよびアウトオブオーダ発行／実行ロジックを示す。
【００９９】
図４Ａにおいて、プロセッサパイプライン４００は、フェッチステージ４０２、長さデコードステージ４０４、デコードステージ４０６、アロケーションステージ４０８、リネームステージ４１０、スケジューリング（ディスパッチもしくは発行としても知られる）ステージ４１２、レジスタ読み出し／メモリ読み出しステージ４１４、実行ステージ４１６、ライトバック／メモリライトステージ４１８、例外処理ステージ４２２、およびコミットステージ４２４を含む。
【０１００】
図４Ｂにおいて、矢印は、２またはそれより多くのユニットの間の結合を示し、矢印の方向は、それらのユニット間のデータフローの方向を示す。図４Ｂは、実行エンジンユニット４５０に結合されたフロントエンドユニット４３０を含むプロセッサコア４９０を示し、これら両方はメモリユニット４７０に結合されている。
【０１０１】
コア４９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドもしくは代替的なコアタイプであり得る。なおも別の選択肢として、コア４９０は、例えば、ネットワークコアもしくは通信コア、圧縮エンジン、グラフィックスコア等のような専用コアであってもよい。
【０１０２】
フロントエンドユニット４３０は、命令キャッシュユニット４３４に結合された分岐予測ユニット４３２を含み、命令キャッシュユニット４３４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）４３６に結合され、ＴＬＢ４３６は、命令フェッチユニット４３８に結合され、命令フェッチユニット４３８は、デコードユニット４４０に結合される。デコードユニット（もしくはデコーダ）は、命令をデコードして、出力として１または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の命令からデコードされ、もしくは別の方法で元の命令を反映し、もしくは元の命令から派生した他の制御信号を生成し得る。デコーダは、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等が挙げられるが、これらに限定されない。命令キャッシュユニット４３４は、メモリユニット４７０におけるレベル２（Ｌ２）キャッシュユニット４７６に更に結合される。デコードユニット４４０は、実行エンジンユニット４５０におけるリネーム／アロケータユニット４５２に結合される。
【０１０３】
実行エンジンユニット４５０は、リタイアメントユニット４５４に結合されたリネーム／アロケータユニット４５２と、１または複数のスケジューラユニット４５６のセットとを含む。スケジューラユニット４５６は、リザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット４５６は、物理レジスタファイルユニット４５８に結合される。物理レジスタファイルユニット４５８の各々は、１または複数の物理レジスタファイルを表し、これらの異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点等、状態（例えば、実行されるべき次の命令のアドレスである命令ポインタ）等のような１または複数の異なるデータタイプを格納する。（例えば、リオーダバッファおよびリタイアメントレジスタファイルを用い、フューチャーファイル、履歴バッファ、およびリタイアメントレジスタファイルを用い、レジスタマップおよびレジスタのプールを用いる等して）レジスタリネームおよびアウトオブオーダ実行が実装され得る様々な態様を示すべく、物理レジスタファイルユニット４５８は、リタイアメントユニット４５４と重ね合わされている。一般に、アーキテクチャレジスタは、プロセッサの外部またはプログラマの視点から可視である。レジスタは、いずれの既知の特定タイプの回路にも限定されない。様々な異なるタイプのレジスタは、本明細書に説明されるようにデータを格納して提供することができる限り、好適である。好適なレジスタの例としては、専用の物理レジスタ、レジスタリネームを用いて動的に割り当てられた物理レジスタ、専用および動的に割り当てられた物理レジスタの組み合わせ等が挙げられるが、これらに限定されない。リタイアメントユニット４５４および物理レジスタファイルユニット４５８は、実行クラスタ４６０に結合される。実行クラスタ４６０は、１または複数の実行ユニット４６２のセット、および１または複数のメモリアクセスユニット４６４のセットを含む。実行ユニット４６２は、様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して様々なオペレーション（例えば、シフト、加算、減算、乗算）を実行し得る。いくつかの実施形態は、特定の関数または関数のセットに専用のいくつかの実行ユニットを含み得るが、他の実施形態は、１つの実行ユニットのみ、または全てがあらゆる関数を実行する複数の実行ユニットを含み得る。スケジューラユニット４５６、物理レジスタファイルユニット４５８、および実行クラスタ４６０は、場合によっては複数のものとして示される。なぜなら、ある実施形態は、一定のタイプのデータ／オペレーションのための別個のパイプライン（例えば、各々が自身のスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを有し、別個のメモリアクセスパイプラインの場合に、このパイプラインの実行クラスタのみがメモリアクセスユニット４６４を有する一定の実施形態が実装される）スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプラインを生成するからである。また、別個のパイプラインが用いられる場合に、これらのパイプラインのうちの１または複数は、アウトオブオーダ発行／実行であり、残りはインオーダであり得ることを理解されたい。
【０１０４】
メモリアクセスユニット４６４のセットは、メモリユニット４７０に結合される。メモリユニット４７０は、データキャッシュユニット４７４に結合されたデータＴＬＢユニット４７２を含み、データキャッシュユニット４７４は、レベル２（Ｌ２）キャッシュユニット４７６に結合される。例示的な一実施形態において、メモリアクセスユニット４６４は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み得、これらの各々は、メモリユニット４７０内のデータＴＬＢユニット４７２に結合される。Ｌ２キャッシュユニット４７６は、１または複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
【０１０５】
例として、例示的なレジスタリネーム、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン４００を以下のように実装し得る。１）命令フェッチ４３８は、フェッチステージ４０２および長さデコードステージ４０４を実行する。２）デコードユニット４４０はデコードステージ４０６を実行する。３）リネーム／アロケータユニット４５２は、アロケーションステージ４０８およびリネームステージ４１０を実行する。４）スケジューラユニット４５６は、スケジューリングステージ４１２を実行する。５）物理レジスタファイルユニット４５８およびメモリユニット４７０は、レジスタ読み出し／メモリ読み出しステージ４１４を実行し、実行クラスタ４６０は、実行ステージ４１６を実行する。６）メモリユニット４７０および物理レジスタファイルユニット４５８は、ライトバック／メモリライトステージ４１８を実行する。７）様々なユニットは、例外処理ステージ４２２に関与してもよい。８）リタイアメントユニット４５４および物理レジスタファイルユニット４５８は、コミットステージ４２４を実行する。
【０１０６】
コア４９０は、１または複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンを追加された、いくつかの拡張を伴う）、カリフォルニア州サニーベールにあるＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベールにあるＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セット（ＮＥＯＮ等の任意選択の追加拡張を伴う）をサポートし得る。
【０１０７】
コアは、（オペレーションまたはスレッドの２またはそれより多い並列セットを実行する）マルチスレッディングをサポートし得、時分割マルチスレッディング、同時マルチスレッディング（物理コアが同時にマルチスレッディングするスレッドの各々のための論理コアを、単一の物理コアが提供する）、またはこれらの組み合わせ（例えば、時分割フェッチおよびデコードを行い、その後にＩｎｔｅｌ（登録商標）ハイパースレッディング技術等の同時マルチスレッディングを行う）を含む様々な態様でこれを実行し得ることを理解されたい。
【０１０８】
レジスタリネームは、アウトオブオーダ実行の文脈で説明されているが、レジスタリネームは、インオーダアーキテクチャにおいて用いられ得ることを理解されたい。プロセッサの示される実施形態は、別個の命令およびデータキャッシュユニット４３４／４７４、ならびに共有Ｌ２キャッシュユニット４７６も含むが、代替的な実施形態は、例えば、レベル１（Ｌ１）内部キャッシュまたは複数のレベルの内部キャッシュ等の命令およびデータの両方に対する単一の内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュ、ならびにコアおよび／またはプロセッサの外部にある外部キャッシュの組み合わせを含み得る。あるいは、キャッシュの全てがコアおよび／またはプロセッサの外部にあってもよい。
【０１０９】
図５は、本発明の実施形態による統合メモリコントローラおよびグラフィックスを用いるシングルコアプロセッサおよびマルチコアプロセッサ５００のブロック図である。図５の実線ボックスは、シングルコア５０２Ａ、システムエージェント５１０、１または複数のバスコントローラユニット５１６のセットを有するプロセッサ５００を示すが、破線ボックスの任意選択の追加は、複数のコア５０２Ａ〜Ｎ、システムエージェントユニット５１０における１または複数の統合メモリコントローラユニット５１４のセット、および統合グラフィックスロジック５０８を有する代替的なプロセッサ５００を示す。
【０１１０】
メモリ階層は、コア内の１または複数のレベルのキャッシュ、１セットまたは１もしくは複数の共有キャッシュユニット５０６、および統合メモリコントローラユニット５１４のセットに結合された外部メモリ（図示せず）を含む。共有キャッシュユニット５０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）等の１または複数の中間レベルのキャッシュ、または他のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、および／またはこれらの組み合わせを含み得る。一実施形態において、リングベースの相互接続ユニット５１２は、統合グラフィックスロジック５０８、共有キャッシュユニット５０６のセット、およびシステムエージェントユニット５１０を相互接続し、代替的な実施形態は、そのようなユニットを相互接続するための任意の数の周知の技術を用い得る。
【０１１１】
いくつかの実施形態において、コア５０２Ａ〜Ｎのうちの１または複数は、マルチスレッディングすることができる。システムエージェント５１０は、コア５０２Ａ〜Ｎを調整および動作させるそれらのコンポーネントを含む。システムエージェントユニット５１０は、例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含み得る。ＰＣＵは、コア５０２Ａ〜Ｎおよび統合グラフィックスロジック５０８の電力状態を調整するのに必要とされるロジックおよびコンポーネントであるか、またはこれらを含み得る。ディスプレイユニットは、１または複数の外部接続ディスプレイを駆動するためのものである。
【０１１２】
コア５０２Ａ〜Ｎは、アーキテクチャおよび／または命令セットの観点からは同種または異種であり得る。例えば、コア５０２Ａ〜Ｎのうちのいくつかは、インオーダであり得るが、他のものは、アウトオブオーダであり得る。別の例として、コア５０２Ａ〜Ｎのうちの２またはそれより多いものは、同一の命令セットを実行することができる場合があるが、他のものは、当該命令セットのサブセットのみまたは異なる命令セットを実行することができる場合がある。
【０１１３】
プロセッサは、Ｃｏｒｅ（商標）ｉ３、ｉ５、ｉ７、２ＤｕｏおよびＱｕａｄ、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（商標）、ＸＳｃａｌｅ（商標）、またはＳｔｒｏｎｇＡＲＭ（商標）プロセッサ等の汎用プロセッサであってもよく、これらは、カリフォルニア州サンタクララにあるＩｎｔｅｌ（登録商標）Ｃｏｒｐｏｒａｔｉｏｎから入手可能である。あるいは、プロセッサは、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄ、ＭＩＰＳ等のような別の会社のものであってもよい。プロセッサは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、エンベデッドプロセッサ等の専用プロセッサであってもよい。プロセッサは、１または複数のチップ上に実装されてもよい。プロセッサ５００は、１または複数の基板の一部であってもよく、および／または、例えば、ＢｉＣＭＯＳ、ＣＭＯＳもしくはＮＭＯＳ等、任意の数の処理技術を用いて１または複数の基板上に実装されてもよい。
【０１１４】
図６〜図８は、プロセッサ５００を含むのに好適な例示的システムであるが、図９は、コア５０２のうちの１または複数を含み得る例示的なシステムオンチップ（ＳｏＣ）である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスの技術分野で既知の他のシステム設計および構成も好適である。一般に、本明細書において開示されるプロセッサおよび／または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが、概ね好適である。
【０１１５】
ここで図６を参照すると、本発明の一実施形態によるシステム６００のブロック図が示されている。システム６００は、１または複数のプロセッサ６１０、６１５を含み得、これらは、グラフィックスメモリコントローラハブ（ＧＭＣＨ）６２０に結合される。追加のプロセッサ６１５の任意選択の性質は、図６において破線で示される。
【０１１６】
各プロセッサ６１０、６１５は、プロセッサ５００のいくつかのバージョンであってもよい。しかし、統合グラフィックスロジックおよび集積メモリ制御ユニットがプロセッサ６１０、６１５内に存在する可能性は低いことに留意されたい。図６は、ＧＭＣＨ６２０が例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）であり得るメモリ６４０に結合され得ることを示す。ＤＲＡＭは、少なくとも一実施形態において不揮発性キャッシュに関連付けられ得る。
【０１１７】
ＧＭＣＨ６２０は、チップセット、またはチップセットの一部であり得る。ＧＭＣＨ６２０は、プロセッサ６１０、６１５と通信してプロセッサ６１０、６１５とメモリ６４０との間のインタラクションを制御し得る。ＧＭＣＨ６２０は、プロセッサ６１０、６１５とシステム６００の他の要素との間でアクセラレーティッドバスインタフェースとしても動作し得る。少なくとも一実施形態において、ＧＭＣＨ６２０は、フロントサイドバス（ＦＳＢ）６９５等のマルチドロップバスを介してプロセッサ６１０、６１５と通信する。
【０１１８】
更に、ＧＭＣＨ６２０は、ディスプレイ６４５（フラットパネルディスプレイ等）に結合される。ＧＭＣＨ６２０は、統合グラフィックスアクセラレータを含み得る。ＧＭＣＨ６２０は、様々な周辺デバイスをシステム６００に結合するために用いられ得る入出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）６５０に更に結合される。例えば、図６の実施形態において、外部グラフィックスデバイス６６０が示され、これは、別の周辺デバイス６７０と共にＩＣＨ６５０に結合された別個のグラフィックスデバイスであり得る。
【０１１９】
あるいは、更なるまたは異なるプロセッサは、システム６００内にも存在し得る。例えば、追加のプロセッサ６１５は、プロセッサ６１０と同一の追加のプロセッサ、プロセッサ６１０とは異種もしくは非対称な追加のプロセッサ、アクセラレータ（例えば、グラフィックスアクセラレータもしくはデジタル信号処理（ＤＳＰ）ユニット）、フィールドプログラマブルゲートアレイ、またはその他のプロセッサを含み得る。物理リソース６１０と物理リソース６１５との間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む幅広い価値基準に関して様々な違いが存在し得る。これらの違いは、プロセッサ６１０、６１５間の非対称性および異種性として実質的に現れ得る。少なくとも一実施形態において、様々なプロセッサ６１０、６１５は、同一のダイパッケージに存在する場合がある。
【０１２０】
ここで図７を参照すると、本発明の実施形態による第２のシステム７００のブロック図が示されている。図７に示されるように、マルチプロセッサシステム７００はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続７５０を介して結合される第１のプロセッサ７７０および第２のプロセッサ７８０を含む。プロセッサ７７０および７８０の各々は、プロセッサ６１０、６１５のうちの１または複数としてのプロセッサ５００のいくつかのバージョンであり得る。
【０１２１】
２つのプロセッサ７７０、７８０のみが示されているが、本発明の範囲はそのようには限定されないことを理解されたい。他の実施形態において、１または複数の追加のプロセッサは、所与のプロセッサ内に存在し得る。
【０１２２】
統合メモリコントローラユニット７７２および７８２を各々含むプロセッサ７７０および７８０が示される。プロセッサ７７０は、そのバスコントローラユニットの一部としてポイントツーポイント（Ｐ‐Ｐ）インタフェース７７６および７７８も含む。同様に、第２のプロセッサ７８０は、Ｐ‐Ｐインタフェース７８６および７８８を含む。プロセッサ７７０、７８０は、Ｐ‐Ｐインタフェース回路７７８、７８８を用いて、ポイントツーポイント（Ｐ‐Ｐ）インタフェース７５０を介して情報を交換し得る。図７に示されるように、ＩＭＣ７７２および７８２は、プロセッサを各メモリ、すなわち、各プロセッサにローカルに取り付けられたメインメモリの一部であり得るメモリ７３２およびメモリ７３４に結合する。
【０１２３】
プロセッサ７７０、７８０は各々、ポイントツーポイントインタフェース回路７７６、７９４、７８６、７９８を用い、個々のＰ‐Ｐインタフェース７５２、７５４を介してチップセット７９０と情報を交換し得る。また、チップセット７９０は、高性能グラフィックスインタフェース７３９を介して高性能グラフィックス回路７３８と情報を交換し得る。
【０１２４】
共有キャッシュ（図示せず）は、どちらかのプロセッサに含まれ、または両方のプロセッサの外部にあり得るが、プロセッサが低電力モードにされると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るように、Ｐ‐Ｐ相互接続を介してプロセッサとなおも接続され得る。
【０１２５】
チップセット７９０は、インタフェース７９６を介して第１のバス７１６に結合され得る。一実施形態において、第１のバス７１６は、周辺構成要素相互接続（ＰＣＩ）バス、またはＰＣＩ  Ｅｘｐｒｅｓｓバス等のバス、または別の第３世代Ｉ／Ｏ相互接続バスであり得るが、本発明の範囲はそのように限定されない。
【０１２６】
図７に示されるように、様々なＩ／Ｏデバイス７１４が、第１のバス７１６を第２のバス７２０に結合するバスブリッジ７１８と共に、第１のバス７１６に結合され得る。一実施形態において、第２のバス７２０は、低ピンカウント（ＬＰＣ）バスであり得る。様々なデバイスは、一実施形態において、例えば、キーボードおよび／またはマウス７２２、通信デバイス７２７、ならびに命令／コードおよびデータ７３０を含み得るディスクドライブもしくは他の大容量ストレージデバイス等のストレージユニット７２８を含む第２のバス７２０に結合され得る。更に、オーディオＩ／Ｏ７２４は、第２のバス７２０に結合され得る。他のアーキテクチャが可能であることに留意されたい。例えば、図７のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装し得る。
【０１２７】
ここで図８を参照すると、本発明の実施形態による第３のシステム８００のブロック図が示されている。図７および図８の同一の要素は、同一の参照番号を有し、図８の他の態様を不明瞭にするのを避けるべく、図７の特定の態様は、図８から省略されている。
【０１２８】
図８は、プロセッサ８７０、８８０が統合メモリおよびＩ／Ｏ制御ロジック（「ＣＬ」）８７２および８８２を各々含み得ることを示す。少なくとも一実施形態において、ＣＬ８７２、８８２は、図５および７に関連して上記されたもの等の統合メモリコントローラユニットを含み得る。更に、ＣＬ８７２、８８２は、Ｉ／Ｏ制御ロジックも含み得る。図８は、メモリ８３２、８３４がＣＬ８７２、８８２に結合されていることのみならず、Ｉ／Ｏデバイス８１４も制御ロジック８７２、８８２に結合されていることを示す。レガシＩ／Ｏデバイス８１５は、チップセット８９０に結合される。
【０１２９】
ここで図９を参照すると、本発明の実施形態によるＳｏＣ９００のブロック図が示されている。図５における類似の要素は、同一の参照番号を有する。また、破線ボックスは、より高度なＳｏＣの任意選択の特徴である。図９において、相互接続ユニット９０２は、１または複数のコア５０２Ａ〜Ｎのセットおよび共有キャッシュユニット５０６を含むアプリケーションプロセッサ９１０と、システムエージェントユニット５１０と、バスコントローラユニット５１６と、統合メモリコントローラユニット５１４と、統合グラフィックスロジック５０８、静止画および／または動画カメラ機能を提供するための画像プロセッサ９２４、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ９２６、ならびに動画のエンコード／デコード加速を提供するためのビデオプロセッサ９２８を含み得る１または複数のメディアプロセッサ９２０のセットと、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット９３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット９３２と、１または複数の外部ディスプレイに結合するためのディスプレイユニット９４０とに結合される。
【０１３０】
図１０は、一実施形態による少なくとも１つの命令を実行し得る中央処理装置（ＣＰＵ）およびグラフィックス処理ユニット（ＧＰＵ）を含むプロセッサを示す。一実施形態において、少なくとも一実施形態によるオペレーションを実行するための命令は、ＣＰＵにより実行され得るであろう。別の実施形態において、命令は、ＧＰＵにより実行され得るであろう。なおも別の実施形態において、命令は、ＧＰＵおよびＣＰＵによって実行されるオペレーションの組み合わせにより実行され得る。例えば、一実施形態において、一実施形態による命令は、ＧＰＵに対する実行のために受信およびデコードされ得る。しかし、デコード済みの命令における１または複数のオペレーションは、ＣＰＵにより実行され得、結果は、命令の最終的リタイヤメントのためにＧＰＵに戻され得る。逆に、いくつかの実施形態において、ＣＰＵは、プライマリプロセッサとして動作し得、ＧＰＵは、コプロセッサとして動作し得る。
【０１３１】
いくつかの実施形態において、高並列スループットプロセッサから利益を得る命令は、ＧＰＵにより実行され得るが、ディープパイプライン化アーキテクチャから利益を得るプロセッサの性能から利益を得る命令は、ＣＰＵにより実行され得る。例えば、グラフィックス、サイエンティフィックアプリケーション、財務アプリケーション、および他の並列ワークロードは、ＧＰＵの性能から利益を得て、これに応じて実行され得るが、オペレーティングシステムカーネルまたはアプリケーションコード等のよりシーケンシャルなアプリケーションは、ＣＰＵにより好適であり得る。
【０１３２】
図１０において、プロセッサ１０００は、ＣＰＵ１００５と、ＧＰＵ１０１０と、画像プロセッサ１０１５と、ビデオプロセッサ１０２０と、ＵＳＢコントローラ１０２５と、ＵＡＲＴコントローラ１０３０と、ＳＰＩ／ＳＤＩＯコントローラ１０３５と、ディスプレイデバイス１０４０と、高解像度マルチメディアインタフェース（ＨＤＭＩ（登録商標））コントローラ１０４５と、ＭＩＰＩコントローラ１０５０と、フラッシュメモリコントローラ１０５５と、デュアルデータレート（ＤＤＲ）コントローラ１０６０と、セキュリティエンジン１０６５と、Ｉ２Ｓ／Ｉ２Ｃ（集積回路間サウンド／集積回路間）インタフェース１０７０とを含む。より多くのＣＰＵまたはＧＰＵ、および他の周辺機器インタフェースコントローラを含む、他のロジックおよび回路が図１０のプロセッサに含まれ得る。
【０１３３】
少なくとも一実施形態の１または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上に格納された代表的なデータによって実装され得、これらのデータは、機械により読み出されると、当該機械に本明細書に説明される技術を実行させるロジックを作成させる。「ＩＰコア」として知られるそのような表現は、有形機械可読媒体（「テープ」）上に格納され、様々な顧客または製造施設に供給されて、ロジックまたはプロセッサを実際に作製する製造機械に読み込まれ得る。例えば、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄにより開発されたＣｏｒｔｅｘ（商標）ファミリのプロセッサ等のＩＰコア、および中国科学院計算技術研究所（ＩＣＴ）により開発された龍芯（Ｌｏｏｎｇｓｏｎ）ＩＰコアは、テキサスインスツルメンツ、クアルコム、アップル、またはサムスン等の様々な顧客またはライセンシにライセンス供与または販売され、これらの顧客またはライセンシにより製造されたプロセッサに実装され得る。
【０１３４】
図１１は、一実施形態によるＩＰコアの開発を例示するブロック図を示す。ストレージ１１３０は、シミュレーションソフトウェア１１２０、および／またはハードウェアもしくはソフトウェアモデル１１１０を含む。一実施形態において、ＩＰコア設計を表すデータは、メモリ１１４０（例えば、ハードディスク）、有線接続（例えば、インターネット）１１５０、または無線接続１１６０を介してストレージ１１３０に提供され得る。次に、シミュレーションツールおよびモデルにより生成されたＩＰコア情報は、製造施設に送信され得、ＩＰコアは、少なくとも一実施形態による少なくとも１つの命令を実行するべく第三者により製造され得る。
【０１３５】
いくつかの実施形態において、１または複数の命令は、第１のタイプまたはアーキテクチャ（例えば、ｘ８６）に対応し得、異なるタイプまたはアーキテクチャ（例えば、ＡＲＭ）のプロセッサ上で変換またはエミュレートされ得る。従って、一実施形態による命令は、ＡＲＭ、ｘ８６、ＭＩＰＳ、ＧＰＵ、または他のプロセッサタイプもしくはアーキテクチャを含む、任意のプロセッサもしくはプロセッサタイプにおいて実行され得る。
【０１３６】
図１２は、一実施形態に従って第１のタイプの命令が異なるタイプのプロセッサによりどのようにエミュレートされるかを示す。図１２において、プログラム１２０５は、一実施形態による命令と同一または実質的に同一の機能を実行し得るいくつかの命令を含む。しかし、プログラム１２０５の命令は、プロセッサ１２１５と異なるか、またはこれと非互換性のタイプおよび／またはフォーマットである場合があり、これは、プログラム１２０５における命令タイプがプロセッサ１２１５によりネイティブに実行することができない場合があることを意味する。しかし、エミュレーションロジック１２１０の支援により、プログラム１２０５の命令は、プロセッサ１２１５によりネイティブに実行することができる命令に変換される。一実施形態において、エミュレーションロジックは、ハードウェアの形で実施される。別の実施形態において、エミュレーションロジックは、プログラム１２０５における命令タイプを、プロセッサ１２１５によりネイティブに実行可能なタイプに変換するソフトウェアを含む有形機械可読媒体の形で実施される。他の実施形態において、エミュレーションロジックは、固定機能またはプログラミング可能なハードウェアと、有形機械可読媒体上に格納されたプログラムとの組み合わせである。一実施形態において、プロセッサは、エミュレーションロジックを含むが、他の実施形態において、エミュレーションロジックは、プロセッサの外部に存在し、第三者により提供される。一実施形態において、プロセッサは、プロセッサ内に含まれ、またはこれに関連付けられたマイクロコードまたはファームウェアを実行することにより、ソフトウェアを含む有形機械可読媒体の形で実施されるエミュレーションロジックを読み込むことができる。
【０１３７】
図１３は、本発明の実施形態による、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。図示された実施形態において、命令コンバータは、ソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装され得る。図１３は、ｘ８６コンパイラ１３０４を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコア１３１６を有するプロセッサによりネイティブに実行され得るｘ８６バイナリコード１３０６を生成し得る高水準言語１３０２のプログラムを示す。少なくとも１つのｘ８６命令セットコア１３１６を有するプロセッサは、（１）Ｉｎｔｅｌ（登録商標）ｘ８６命令セットコアの命令セットの実質的部分、または（２）少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌ（登録商標）プロセッサと実質的に同一の結果を実現するべく、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌ（登録商標）プロセッサ上で起動することを目的とするアプリケーションもしくは他のソフトウェアのオブジェクトコードバージョンを互換的に実行し、もしくは別の方法で処理することにより、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌ（登録商標）プロセッサと実質的に同一の機能を実行し得る任意のプロセッサを表す。ｘ８６コンパイラ１３０４は、追加の連携処理を用いるか、または用いることなく少なくとも１つのｘ８６命令セットコア１３１６を有するプロセッサ上で実行され得るｘ８６バイナリコード１３０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図１３は、代替的な命令セットコンパイラ１３０８を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコア１３１４を有しないプロセッサ（例えば、カリフォルニア州サニーベールにあるＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行し、および／またはカリフォルニア州サニーベールにあるＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するコアを有するプロセッサ）によりネイティブに実行され得る代替的な命令セットバイナリコード１３１０を生成し得る高水準言語１３０２のプログラムを示す。命令コンバータ１３１２は、ｘ８６バイナリコード１３０６を、ｘ８６命令セットコア１３１４を有しないプロセッサによりネイティブに実行され得るコードに変換するために用いられる。この変換済みコードは、代替的な命令セットバイナリコード１３１０と同じである可能性が高くない。なぜなら、これができる命令コンバータは、作成するのが困難だからである。しかし、変換済みコードは、一般的なオペレーションを実現し、代替的な命令セットの命令から構成される。従って、命令コンバータ１３１２は、エミュレーション、シミュレーション、またはその他の処理により、ｘ８６命令セットのプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがｘ８６バイナリコード１３０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
【０１３８】
図１４Ａは、効率的なベクトルアドレス競合解決のために置換制御を生成するＳＩＭＤベクトル先行ゼロカウント命令を用いる処理１４０１の例の一実施形態におけるフロー図を示す。本明細書に開示される処理１４０１および他の処理は、汎用機械もしくは専用機械、またはこれら両方の組み合わせにより実行可能な専用のハードウェアもしくはソフトウェアもしくはファームウェアのオペレーションコードを備え得る処理ブロックによって実行される。
【０１３９】
処理１４０１の処理ブロック１４１０において、インデックスのセットは、例えば、７、２、７、１、および７の値に初期化される。オフセットインデックスの数およびオフセットインデックスの値は、例示的であることが意図され、本発明の実施形態を限定するものではないことが理解されよう。具体的には、レジスタにおけるオフセットインデックスの数は、特定のアプリケーションおよび／またはインデックスに対応するデータ要素のサイズで判断され得る。オフセットインデックスの例示的な値は、単に依存性競合の解決を例示することを意図する。処理ブロック１４１５において、残りの要素マスク（Ｅｌｅｍｅｎｔｓ＿Ｌｅｆｔ＿Ｍａｓｋ）は、全て（例えば、５個）１にセットされる。処理ブロック１４２０において、依存性マスクは、一致する全てのオフセットインデックスを反映するように処理１４０５（図１８に関連して以下により詳細に説明される）の技術に応じてセットされ得る。次に、処理ブロック１４２５において、オーダマスクのセットが初期化される。処理ブロック１４３０において、競合マスク（Ｃｏｎｆｌｉｃｔ＿Ｍａｓｋ）は、依存性マスクと他のマスクとの間のビット単位のＡＮＤを実行することにより計算される。
【０１４０】
次に処理ブロック１４３９に進み、競合マスクに対してベクトルパックド先行ゼロカウント命令ＶＰＬＺＣＮＴを用いて、競合マスクのデータフィールド毎にゼロにセットされた隣接する最上位ビットの数をカウントし、各カウントを、先行ゼロカウントの対応するデータフィールドに値として格納することにより、先行ゼロカウントが計算される。処理ブロック１４４０において、最大カウントは、全て４に初期化される。これは、示される例において競合マスクを表すために用いられるビットの数より１だけ小さい値である。処理ブロック１４４５において、置換インデックスのセットは、ＳＩＭＤパックド減算ＰＳＵＢを実行することにより計算され、競合マスクを表すために用いられるビットの数より１だけ小さい対応する最大カウント値から、各先行ゼロカウントの値を減算し、最大カウントから先行ゼロカウントを引いた対応する差を生成する。以前の計算に依存しないオフセットインデックスに対応する位置が−１の置換インデックスを有し、これも有益に用いられ得ることが理解されよう。
【０１４１】
処理ブロック１４５０において、データは、オフセットインデックス、および（任意選択で）全て１である残りの要素マスクに応じてメモリからギャザーされる。次に処理ブロック１４５５において、残りの要素マスクは、パックド比較ｎｏｔ  ｅｑｕａｌ命令ＰＣＭＰＮＥＱを用い、置換インデックスを全ての−１と有益に比較して再計算される。処理ブロック１４６０において、残りの要素マスクがゼロ（０）であるか否かが判断される。そうである場合、処理ブロック１４６５において、オフセットインデックスを用いて、データがメモリにスキャターされ、ＳＩＭＤデータのこのセットの処理は、処理ブロック１４９９において終了する。
【０１４２】
そうでなければ、処理ブロック１４７０において、データは、ＳＩＭＤベクトルパックド置換ＶＰＥＲＭを実行し、処理されずに残された要素のみを有益に更新するために、置換インデックスおよび残りの要素マスクを完了マスクとして使用することにより、置換される。処理ブロック１４７５において、必要とされる計算は、残りの要素マスクを完了マスクとして用いて処理するデータ要素の左側に対して実行される。次に、前の技術的処理１４０６において、競合した要素のセットは、残りの要素マスクを処理ブロック１４８０における全ての要素にブロードキャストすることにより初期化される。次に、競合マスクのセットは、前の競合マスクおよび新たに競合した要素に対してベクトルパックドＡＮＤ命令を用いて再計算される。次に、新しい残りの要素マスクは、パックド比較ｎｏｔ  ｅｑｕａｌ命令ＰＣＭＰＮＥＱを用い、各競合マスクを全てのゼロと比較して計算される。次に、処理は、処理ブロック１４６０において新しい残りの要素マスクのテストを開始して再度繰り返される。本明細書に説明されるように、ＳＩＭＤベクトル先行ゼロカウント命令は、ＳＩＭＤ置換制御を提供するために可変サイズの要素および競合マスクと共に有益に用いられ、それによりメモリを介して依存性計算を実行することなくレジスタにおける効率的なＳＩＭＤアドレス競合解決を可能にし得ることが理解されよう。
【０１４３】
図１４Ｂは、効率的なベクトルアドレス競合解決にＳＩＭＤベクトルアドレス競合マスクを用いる例の一実施形態におけるフロー図を示す。処理１４０２の処理ブロック１４１０において、オフセットインデックスのセットは、例えば、７、２、７、１、および７の値に初期化される。やはり、オフセットインデックスの数およびオフセットインデックスの値は、例示的であることが意図され、本発明の実施形態を限定するものではないことが理解されよう。具体的には、レジスタにおけるオフセットインデックスの数は、特定のアプリケーションおよび／またはインデックスに対応するデータ要素のサイズで判断され得る。オフセットインデックスの例示的な値は、単に依存性競合の解決を例示することを意図する。処理ブロック１４１５において、残りの要素マスクは、全て（例えば、５個が）１にセットされる。処理ブロック１４２０において、依存性マスクは、一致する全てのオフセットインデックスを含むように処理１４０５（図１８に関連して以下により詳細に説明される）の技術に応じてセットされ得る。次に、処理ブロック１４２５において、オーダマスクのセットが初期化される。処理ブロック１４３０において、競合マスクは、依存性マスクと他のマスクとの間のビット単位のＡＮＤを実行することにより計算される。
【０１４４】
処理ブロック１４５０において、データは、オフセットインデックス、および（任意選択で）全て１である残りの要素マスクに応じてメモリからギャザーされる。次に処理１４０６において、競合した要素のセットは、残りの要素マスクを処理ブロック１４８０における全ての要素にブロードキャストすることにより初期化される。処理ブロック１４８５において、競合マスクのセットは、前の競合マスクおよび新たに競合した要素に対してベクトルパックドＡＮＤ命令を用いて再計算される。次に、新しい残りの要素マスクは、処理ブロック１４９０においてパックド比較ｎｏｔ  ｅｑｕａｌ命令ＰＣＭＰＮＥＱを用い、各競合マスクを全てのゼロと比較して、計算される。処理ブロック１４６２において、残りの要素マスクは、ｄｉｄ  ｔｈｅｓｅ  ｍａｓｋを形成するためにネゲートされ、データ要素は、処理ブロック１４６６においてオフセットインデックスに応じてメモリにスキャターされる。処理ブロック１４６０において、残りの要素マスクがゼロ（０）であるか否かが判断される。処理においてそうである場合、ＳＩＭＤデータのこのセットは、処理ブロック１４９９において終了する。そうでなければ、プロセスは、処理１４０２の処理ブロック１４５０から開始して再度繰り返される。
【０１４５】
図１５Ａは、ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するプロセッサにおける処理１５０１の一実施形態のフロー図を示す。パックドタプルは各々、２個、４個、または８個の要素を備え得る。いくつかの実施形態において、比較タイプは、命令によって指定された即値オペランドにより（例えば、ｅｑｕａｌ、ｌｅｓｓ‐ｔｈａｎ、ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、ｆａｌｓｅ、ｎｏｔ  ｅｑｕａｌ、ｎｏｔ  ｌｅｓｓ−ｔｈａｎ、ｎｏｔ  ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、およびｔｒｕｅのうちの１つとして）示され得る。処理ブロック１５１０において、第１のデータタイプの要素は、ベクトルレジスタにおける複数のｎ個のデータフィールドの各々に格納される。処理ブロック１５２０において、第１のデータタイプの要素は、第２のベクトルのｎ個のデータフィールドの各々に格納される。処理ブロック１５３０において、ベクトルパックドタプル相互比較のためのＳＩＭＤ命令は、プロセッサにおいてデコードされる。ベクトルパックドタプル相互比較のためのＳＩＭＤ命令に応答して、プロセスは、処理１５０３において処理ブロック１５４０に進む。
【０１４６】
処理ブロック１５４０において、ベクトルレジスタにおける次のタプルが処理のために選択される。処理ブロック１５５０において、タプルにおける次の要素は、第２のベクトルの複数のｎ個のデータフィールドにおける対応するタプルの各要素と比較される。処理ブロック１５６０において、第２のベクトルの各タプル要素に対応するマスクビットは、対応する比較に応じて、処理のために選択されたベクトルレジスタタプルの同時に比較される要素に対応する次のビットマスクにおいてセットされる。いくつかの実施形態において、ベクトルレジスタの要素に対応する全てのビットマスクは、ベクトルレジスタにおける対応する要素の最下位ビットと位置合わせされたデスティネーションレジスタに格納され得る。これに代えて、いくつかの代替的な実施形態においては、ベクトルレジスタの要素に対応するビットマスクは、ソース／デスティネーションレジスタの対応する要素に格納されたシフトカウントに応じて再度位置合わせされたソース／デスティネーションレジスタに格納され得る。処理ブロック１５７０において、処理のために現在選択されているタプルに関する全ての比較が終了したか否かが判断される。そうでない場合、処理ために現在選択されているタプルの各データフィールドが終了するまで、プロセスは、処理ブロック１５５０から開始するように再度繰り返される。いくつかの実施形態において、ベクトルレジスタのデータフィールドは、暗黙的にマスクされず、それらの各々が相互比較されることを必要とする場合がある。いくつかの代替的な実施形態において、ベクトルレジスタのデータフィールドは、（例えば、命令により指定されたマスクレジスタにおいて）明示的にマスクされるか、またはマスクされず、マスクされないデータフィールドにおける要素のみが相互比較されることを必要とする場合がある。現在選択されたタプルについて必要とされる全ての比較が終了した時点で、プロセスは、処理ブロック１５８０に進み、ベクトルレジスタにおけるｎ個の全てのデータフィールドの処理が終了したか否かについて判断される。そうでない場合、プロセスは、ベクトルレジスタにおける別のタプルが処理のために選択される処理ブロック１５４０から開始して再度繰り返される。そうでなければ、プロセスは、処理ブロック１５９０において終了する。
【０１４７】
ＳＩＭＤベクトルパックドタプル相互比較命令は、本明細書に説明される実施形態におけるように、効率的なＳＩＭＤアドレス競合解決のためにＳＩＭＤベクトルアドレス競合検出機能を提供し、競合マスクを生成する可変サイズの要素およびメモリオフセットに用いられ得ることが理解されよう。また、特に、メモリを介して依存性計算を実行することなく、レジスタにおけるアドレス競合解決を可能にする特定のギャザー・変更・スキャターアプリケーションにおいて効率的なＳＩＭＤアドレス競合解決のためにＳＩＭＤ置換制御を提供するべく、本明細書に説明される実施形態におけるように、ＳＩＭＤベクトル先行ゼロカウント命令を組み合わせてＳＩＭＤベクトルパックドタプル相互比較命令が用いられ得ることが理解されよう。
【０１４８】
図１５Ｂは、効率的なベクトルアドレス競合解決にＳＩＭＤベクトルアドレス競合マスクを用いる処理１５０２の一実施形態におけるフロー図を示す。処理ブロック１５０５において、一致するオフセットを保持するか否かを判断するべく、第１のレジスタまたはメモリベクトルソースの各要素におけるオフセットは、ベクトルソースの各下位要素におけるオフセットと比較される。処理ブロック１５１５において、第１のベクトルデスティネーションにおけるマスクに対応する要素のオフセットに一致するオフセットを保持する第１のベクトルソースにおける下位要素に対応する任意のマスクビットは、（例えば、処理１８０１に示されるように）１にセットされる。デスティネーションレジスタにおける任意の他のビットは、（例えば、処理１４０５に示されるように）処理ブロック１５２５において第２の値（例えば、０）にセットされる。
【０１４９】
処理ブロック１５３５において、第１のデスティネーションレジスタに格納されたマスクの各々の値は、下位要素の計算に依存する要素のマスクを生成するべく、別のベクトルにおける具体的な値（例えば、ゼロ）の対応するコピーと比較される。処理ブロック１５４５において、処理する準備ができた要素を検出して完了マスクを生成するべく、下位要素に対する不完全な計算に依存する要素のマスクが用いられる。処理ブロック１５５５において、ＳＩＭＤ計算は、完了マスクを用いてデータに対して実行される。次に、処理ブロック１５６５において、下位要素に対する不完全な計算に依存する要素のマスクが更新される。処理ブロック１５７５において、全ての要素の処理が終了したか否かが判断され、そうである場合、これらの要素の処理は、処理ブロック１５９５において終了する。そうでなければ、プロセスは、処理ブロック１５４５から開始して再度繰り返される。また、示されるように、処理１５０２は、処理された要素がメモリに格納される必要があることを前提としないが、任意のそのような格納、またはメモリへのスキャターは、処理１５０２の更なる後続のイテレーションと共に、本発明の代替的な実施形態に応じて実行され得ることが理解されよう。
【０１５０】
図１６は、効率的なベクトルアドレス競合解決のために置換制御を生成するのに有用なＳＩＭＤベクトル先行ゼロカウント機能を提供する命令を実行するための装置１６０１の従来技術の実施形態を示す。装置１６０１の実施形態は、パイプライン４００（例えば、実行ステージ４１６）の一部、またはＳＩＭＤベクトル先行ゼロカウント機能を提供する命令を実行するためのコア４９０（例えば、実行ユニット４６２）の一部であり得る。装置１６０１の実施形態は、効率的なベクトルアドレス競合解決を可能にし得るＳＩＭＤベクトル先行ゼロカウントのための命令をデコードするデコードステージ（例えば、デコード４０６）またはデコーダ（例えば、デコードユニット４４０）に結合され得る。１または複数の実行ユニット（例えば、実行装置１６０１）は、デコード済みの命令に応答して、メモリベクトルオペランドもしくはベクトルレジスタ１６１０もしくは１６２０におけるデータフィールドの各々の複数のビットを読み出し、メモリベクトルオペランドもしくはベクトルレジスタ１６１０もしくは１６２０のデータフィールド毎に、ゼロにセットされた隣接する最上位ビットの数をカウントし、当該カウントを、ＳＩＭＤデスティネーションレジスタ１６５０もしくは１６６０の対応するデータフィールドに値として格納する。
【０１５１】
例えば、装置１６０１の実施形態は、可変の複数のｎ個の可変サイズのデータ要素の値を格納する可変の複数のｎ個の可変サイズのデータフィールドを備えるベクトルレジスタ（例えば、物理レジスタファイルユニット４５８）と結合され得る。ＳＩＭＤベクトル先行ゼロカウント機能を提供する命令の実施形態は、メモリベクトルオペランドまたはベクトルレジスタ、例えば１６１０または１６２０のデータフィールド毎にＳＩＭＤ先行ゼロカウントを実行し、当該カウントを、ＳＩＭＤデスティネーションレジスタ、例えば１６５０または１６６０における指定サイズの対応するデータフィールドに値として格納するためのベクトル先行ゼロカウントオペレーションおよびデータフィールドサイズを指定する。
【０１５２】
例えば、ＳＩＭＤベクトル先行ゼロカウント機能を提供する命令を実行するための装置１６０１の一実施形態は、メモリベクトルオペランドまたはベクトルレジスタ１６２０における第１のサイズ（例えば、１６ビットまたは３２ビット）のデータフィールドの各々の複数のビットを読み出し、先行ゼロカウント回路１６０３の先行ゼロカウンタ１６３０〜１６３７においてゼロにセットされた隣接する最上位ビットの数をカウントして、次に、当該カウントを、ＳＩＭＤデスティネーションレジスタ１６６０における同一の指定サイズの対応するデータフィールドに値として格納する。ＳＩＭＤベクトル先行ゼロカウントを提供する命令を実行するための装置１６０１の別の実施形態は、メモリベクトルオペランドまたはベクトルレジスタ１６１０における第２のサイズ（例えば、３２ビットまたは６４ビット）のデータフィールドの各々の複数のビットを読み出し、奇数の先行ゼロカウンタ１６３１〜１６３７からゼロにセットされた隣接する最上位ビットのカウントを選択するか、または先行ゼロカウント組み合わせ回路１６０４の選択的な加算器回路１６４０〜１６４３において、偶数の先行ゼロカウンタ１６３０〜１６３６からのカウントに値ｍを各々加算し、次に、組み合わされたカウントを、ＳＩＭＤデスティネーションレジスタ１６５０における指定サイズの対応するデータフィールドに値として格納する。ＳＩＭＤベクトル先行ゼロカウントを提供する命令を実行するための装置１６０１の代替的な実施形態は、図１６に示されるように、第１のデータフィールドサイズのＳＩＭＤベクトル先行ゼロカウントおよび第２のデータフィールドサイズのＳＩＭＤベクトル先行ゼロカウントの両方を実行することができる場合があり、または様々な指定データフィールドサイズに対するＳＩＭＤベクトル先行ゼロカウントを実行するために変更され得ることが理解されよう。本明細書に説明される実施形態におけるように、ＳＩＭＤベクトル先行ゼロカウント命令は、ＳＩＭＤ置換制御を提供するために可変サイズの要素および競合マスクと共に用いられ、それによりメモリを介して依存性計算を実行することなくレジスタにおけるより効率的なＳＩＭＤアドレス競合解決を可能にし得る。従って、本明細書に開示されるＳＩＭＤベクトル先行ゼロカウント命令およびロジックは、例えば、図１４Ａに関連して説明されるように、特に特定のギャザー・変更・スキャターアプリケーションにおける効率的なＳＩＭＤアドレス競合解決を提供する。
【０１５３】
比較される要素、例えばインデックスが比較結果を表すのに必要とされるマスクと同じサイズである場合（例えば、２５６ビットレジスタにおける１６個の１６ビット要素）、全ての要素を相互比較する命令の実行が適切であり得る。しかし、比較結果を表すのに利用可能なビットより比較する要素の方が多い場合、代替的な解決法が必要とされる場合がある。本明細書に開示されるＳＩＭＤベクトルパックドタプル比較命令は、ＳＩＭＤベクトルアドレス競合検出機能、および効率的なＳＩＭＤアドレス競合解決のために競合マスクを生成するべく組み合わされた結果を提供する、可変サイズの要素およびメモリオフセットのための代替的な解決法として用いられ得ることが理解されよう。ＳＩＭＤベクトルパックドタプル比較命令は、（例えば、様々な異なる比較オペレーションのうちのいずれか１つが有用である得る場合に）より汎用に適用することが可能であり、面積および電力の観点では全要素を相互比較する命令と比べてあまり実装コストを必要としない場合があることが理解されよう。
【０１５４】
図１７Ａは、ＳＩＭＤベクトルパックドダブル相互比較機能を提供する例示的な命令１７０１の一実施形態を示す。いくつかの実施形態において、命令１７０１のエンコードは、専用機械または汎用処理機械により実行するために、機能的な記述的資料を記録するいくつかの機械可読媒体上に記録され得る。いくつかの実施形態において、命令１７０１のエンコードは、第１の複数のデータフィールド（例えば、ｎ個のデータフィールド）を備える第１のベクトルレジスタ１７１０を指定し得、第１の複数のデータフィールドは、第１の部分に分割され、各々の第１の部分は、第２の複数のデータフィールド（例えば、２個のデータフィールド）を有し、各データフィールドは、マスクされるか、またはマスクされないかのいずれかである。いくつかの実施形態において、第１のベクトルレジスタ１７１０のデータフィールドは、暗黙的にマスクされず、それらの各々が比較されることを必要とする場合がある。いくつかの代替的な実施形態において、第１のベクトルレジスタ１７１０のデータフィールドは、（例えば、命令１７０１により指定されたマスクレジスタにおいて）明示的にマスクされるか、またはマスクされず、マスクされないデータフィールドにおける要素のみが比較されることを必要とする場合がある。命令１７０１は、第１の複数のデータフィールドに対応する第３の複数のデータフィールドを表す第２のベクトルレジスタ１７２０またはメモリストレージのセットも指定し得、第３の複数のデータフィールドは、第２の部分に分割され、各々の第２の部分も当該第３の複数のデータフィールド（例えば、２個のデータフィールド）を有する。いくつかの実施形態において、パックド要素は、符号付きパックドバイトまたは符号なしのバックトバイト（８ビット）、ワード（１６ビット）、ダブルワード（３２ビット）、またはクワッドワード（６４ビット）であってもよい。命令１７０１は、特定のタイプの比較（例えば、ｇｒｅａｔｅｒ−ｔｈａｎ  ｏｒ  ｅｑｕａｌ，＞）をエンコードする即値バイトオペランド１７３１と、対応する第１の部分に分割され、各々の対応する第１の部分は、第２の複数のデータフィールド（例えば、２個のデータフィールド）を有する対応する第１の複数のデータフィールド（例えば、ｎ個のデータフィールド）を備えるデスティネーションベクトルレジスタ１７７１も指定し得る。いくつかの実施形態において、比較タイプは、即値オペランド１７３１によってｅｑｕａｌ、ｌｅｓｓ‐ｔｈａｎ、ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、ａｌｗａｙｓ  ｆａｌｓｅ、ｎｏｔ  ｅｑｕａｌ、ｎｏｔ  ｌｅｓｓ−ｔｈａｎ、ｎｏｔ  ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、およびａｌｗａｙｓ  ｔｒｕｅのうちの１つとして示され得る。
【０１５５】
第１のベクトルレジスタ１７１０における第１の複数のｎ個のデータフィールドの第１の部分（例えば、２個のタプル）のデータフィールドに格納された要素毎に、命令１７０１は、当該要素を、第２のベクトルレジスタ１７２０またはメモリストレージのセットの当該第３の複数のｎ個のデータフィールドを表す対応する部分（例えば、２個のタプル）の各要素と比較する。デスティネーションベクトルレジスタ１７７１において、命令１７０１は、対応する比較に応じて対応する第１のレジスタ１７１０部分のマスクされない各要素に対応するビットマスクにおいて、第２のベクトル１７２０部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の（例えば、ビットマスクにおいて上位の）ビットをゼロの値にセットする。いくつかの実施形態において、第１のベクトルレジスタ１７１０の要素に対応する全てのビットマスクは、第１のベクトルレジスタ１７１０における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ１７７１に格納され得る。これに代えて、いくつかの代替的な実施形態においては、第１のベクトルレジスタ１７１０の要素に対応するビットマスクは、ソース／デスティネーションベクトルレジスタ１７７１の対応する要素に格納されたシフトカウントに応じて再度位置合わせされたソース／デスティネーションベクトルレジスタ１７７１に格納され得る。
【０１５６】
図１７Ｂは、ＳＩＭＤベクトルパックドクワドラプル相互比較機能を提供する命令１７０２の代替的な実施形態を示す。また、いくつかの実施形態において、命令１７０２のエンコードは、専用機械または汎用処理機械により実行するために、機能的な記述的資料を記録するいくつかの機械可読媒体上に記録され得る。いくつかの実施形態において、命令１７０２のエンコードは、第１の複数のデータフィールド（例えば、ｎ個のデータフィールド）を備える第１のベクトルレジスタ１７１０を指定し得、第１の複数のデータフィールドは、第１の部分に分割され、各々の第１の部分は、第２の複数のデータフィールド（例えば、４個のデータフィールド）を有し、各データフィールドは、マスクされるか、またはマスクされないかのいずれかである。いくつかの実施形態において、第１のベクトルレジスタ１７１０のデータフィールドは、暗黙的にマスクされず、それらの各々が比較されることを必要とする場合がある。いくつかの代替的な実施形態において、第１のベクトルレジスタ１７１０のデータフィールドは、（例えば、命令１７０２により指定されたマスクレジスタにおいて）明示的にマスクされるか、またはマスクされず、マスクされないデータフィールドにおける要素のみが比較されることを必要とする場合がある。命令１７０２は、第１の複数のデータフィールドに対応する第３の複数のデータフィールドを表す第２のベクトルレジスタ１７２０またはメモリストレージのセットも指定し得、第３の複数のデータフィールドは、第２の部分に分割され、各々の第２の部分も当該第３の複数のデータフィールド（例えば、４個のデータフィールド）を有する。いくつかの実施形態において、パックド要素は、符号付きパックドバイトまたは符号なしのバックトバイト（８ビット）、ワード（１６ビット）、ダブルワード（３２ビット）、またはクワッドワード（６４ビット）であってもよい。命令１７０２は、特定のタイプの比較（例えば、ｌｅｓｓ−ｔｈａｎ，＜）をエンコードする即値バイトオペランド１７３２と、対応する第１の部分に分割され、各々の対応する第１の部分は、第２の複数のデータフィールド（例えば、４個のデータフィールド）を有する対応する第１の複数のデータフィールド（例えば、ｎ個のデータフィールド）を備えるデスティネーションベクトルレジスタ１７７２も指定し得る。いくつかの実施形態において、比較タイプは、即値オペランド１７３２によってｅｑｕａｌ、ｌｅｓｓ‐ｔｈａｎ、ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、ａｌｗａｙｓ  ｆａｌｓｅ、ｎｏｔ  ｅｑｕａｌ、ｎｏｔ  ｌｅｓｓ−ｔｈａｎ、ｎｏｔ  ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、およびａｌｗａｙｓ  ｔｒｕｅのうちの１つとして示され得る。
【０１５７】
第１のベクトルレジスタ１７１０における第１の複数のｎ個のデータフィールドの第１の部分（例えば、４個のタプル）のデータフィールドに格納された要素毎に、命令１７０２は、当該要素を、第２のベクトルレジスタ１７２０またはメモリストレージのセットの当該第３の複数のｎ個のデータフィールドを表す対応する部分（例えば、４個のタプル）の各要素と比較する。デスティネーションベクトルレジスタ１７７２において、命令１７０２は、対応する比較に応じて対応する第１のレジスタ１７１０部分のマスクされない各要素に対応するビットマスクにおいて、第２のベクトル１７２０部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の（例えば、ビットマスクにおいて上位の）ビットをゼロの値にセットする。いくつかの実施形態において、第１のベクトルレジスタ１７１０の要素に対応する全てのビットマスクは、第１のベクトルレジスタ１７１０における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ１７７２に格納され得る。これに代えて、いくつかの代替的な実施形態においては、第１のベクトルレジスタ１７１０の要素に対応するビットマスクは、ソース／デスティネーションベクトルレジスタ１７７２の対応する要素に格納されたシフトカウントに応じて再度位置合わせされたソース／デスティネーションベクトルレジスタ１７７２に格納され得る。
【０１５８】
図１７Ｃは、ＳＩＭＤベクトルパックドオクタプル相互比較機能を提供する命令１７０３の別の代替的な実施形態を示す。また、いくつかの実施形態において、命令１７０３のエンコードは、専用機械または汎用処理機械により実行するために、機能的な記述的資料を記録するいくつかの機械可読媒体上に記録され得る。いくつかの実施形態において、命令１７０３のエンコードは、第１の複数のデータフィールド（例えば、ｎ個のデータフィールド）を備える第１のベクトルレジスタ１７１０を指定し得、第１の複数のデータフィールドは、第１の部分に分割され、各々の第１の部分は、第２の複数のデータフィールド（例えば、８個のデータフィールド）を有し、各データフィールドは、マスクされるか、またはマスクされないかのいずれかである。いくつかの実施形態において、第１のベクトルレジスタ１７１０のデータフィールドは、暗黙的にマスクされず、それらの各々が比較されることを必要とする場合がある。いくつかの代替的な実施形態において、第１のベクトルレジスタ１７１０のデータフィールドは、（例えば、命令１７０３により指定されたマスクレジスタにおいて）明示的にマスクされるか、またはマスクされず、マスクされないデータフィールドにおける要素のみが比較されることを必要とする場合がある。命令１７０３は、第１の複数のデータフィールドに対応する第３の複数のデータフィールドを表す第２のベクトルレジスタ１７２０またはメモリストレージのセットも指定し得、第３の複数のデータフィールドは、第２の部分に分割され、各々の第２の部分も当該第３の複数のデータフィールド（例えば、８個のデータフィールド）を有する。いくつかの実施形態において、パックド要素は、符号付きパックドバイトまたは符号なしのバックトバイト（８ビット）、ワード（１６ビット）、ダブルワード（３２ビット）、またはクワッドワード（６４ビット）であってもよい。命令１７０３は、特定のタイプの比較（例えば、ｅｑｕａｌ，＝）をエンコードする即値バイトオペランド１７３３と、対応する第１の部分に分割され、各々の対応する第１の部分は、第２の複数のデータフィールド（例えば、８個のデータフィールド）を有する対応する第１の複数のデータフィールド（例えば、ｎ個のデータフィールド）を備えるデスティネーションベクトルレジスタ１７７３も指定し得る。いくつかの実施形態において、比較タイプは、即値オペランド１７３３によってｅｑｕａｌ、ｌｅｓｓ‐ｔｈａｎ、ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、ａｌｗａｙｓ  ｆａｌｓｅ、ｎｏｔ  ｅｑｕａｌ、ｎｏｔ  ｌｅｓｓ−ｔｈａｎ、ｎｏｔ  ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、およびａｌｗａｙｓ  ｔｒｕｅのうちの１つとして示され得る。
【０１５９】
第１のベクトルレジスタ１７１０における第１の複数のｎ個のデータフィールドの第１の部分（例えば、８個のタプル）のデータフィールドに格納された要素毎に、命令１７０３は、当該要素を、第２のベクトルレジスタ１７２０またはメモリストレージのセットの当該第３の複数のｎ個のデータフィールドを表す対応する部分（例えば、８個のタプル）の各要素と比較する。デスティネーションベクトルレジスタ１７７３において、命令１７０３は、対応する比較に応じて対応する第１のレジスタ１７１０部分のマスクされない各要素に対応するビットマスクにおいて、第２のベクトル１７２０部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の（例えば、ビットマスクにおいて上位の）ビットをゼロの値にセットする。いくつかの実施形態において、第１のベクトルレジスタ１７１０の要素に対応する全てのビットマスクは、第１のベクトルレジスタ１７１０における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ１７７３に格納され得る。これに代えて、いくつかの代替的な実施形態においては、第１のベクトルレジスタ１７１０の要素に対応するビットマスクは、ソース／デスティネーションベクトルレジスタ１７７３の対応する要素に格納されたシフトカウントに応じて再度位置合わせされたソース／デスティネーションベクトルレジスタ１７７３に格納され得る。
【０１６０】
図１８は、効率的なベクトルアドレス競合解決のためにアドレス競合マスク（例えば１４２０等）を生成するＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令の結果を組み合わせる例示的な方法１８０１の実施形態を示す。第１のベクトルパックドダブル相互比較１８０２においては、第１のデータタイプの要素は、ベクトルレジスタ１８１０のｎ個のデータフィールドの各々に格納される。第１のデータタイプの要素は、ベクトル１８２０のｎ個のデータフィールドの各々にも格納され、ベクトル１８２０を表すベクトルレジスタまたはメモリストレージのセットに格納されてもよい。プロセッサにおいて、ベクトルパックドダブル相互比較１８０２のためのＳＩＭＤ命令がデコードされる。
【０１６１】
ベクトルパックドダブル相互比較１８０２のためのＳＩＭＤ命令に応答して、ベクトルレジスタ１８１０におけるｎ個のデータフィールドの各部分（例えば２個のタプル）のデータフィールドに格納された要素毎に、命令１８０２は、当該要素を、ベクトル１８２０のｎ個のデータフィールドを表すベクトルレジスタまたはメモリストレージのセットの対応する部分（例えば２個のタプル）における各要素と比較する。デスティネーションベクトルレジスタ１８３０において、命令１８０２は、（例えば、等価性について）実行された対応する比較に応じて、対応するレジスタ１８１０部分のマスクされない各要素に対応するビットマスクにおいて、ベクトル１８２０部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の（例えば、ビットマスクにおける上位の）ビットをゼロの値にセットする。いくつかの実施形態において、ベクトルレジスタ１８１０の要素に対応する全てのビットマスクはまず、第１のベクトルレジスタ１８１０における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ１８３０に格納され得、次にパックドシフト１８１２は、別個のＳＩＭＤ命令に応じて実行され得る。これに代えて、いくつかの代替的な実施形態においては、第１のベクトルレジスタ１８１０の要素に対応するビットマスクは、ソース／デスティネーションベクトルレジスタ１８３０の対応する要素に格納されたシフトカウントに応じて再度位置合わせされたソース／デスティネーションベクトルレジスタ１８３０に格納され得る。
【０１６２】
第２のベクトルパックドダブル相互比較１８０３においては、第１のデータタイプの要素は、ベクトルレジスタ１８１５のｎ個のデータフィールドの各々に格納される。第１のデータタイプの要素は、ベクトル１８２５のｎ個のデータフィールドの各々にも格納され、ベクトル１８２５を表すベクトルレジスタまたはメモリストレージのセットに格納されてもよい。ベクトルパックドダブル相互比較１８０３のための第２のＳＩＭＤ命令がデコードされる。ベクトルパックドダブル相互比較１８０３のための第２のＳＩＭＤ命令に応答して、ベクトルレジスタ１８１５におけるｎ個のデータフィールドの各部分（例えば２個のタプル）のデータフィールドに格納された要素毎に、命令１８０３は、当該要素を、ベクトル１８２５のｎ個のデータフィールドを表すベクトルレジスタまたはメモリストレージのセットの対応する部分（例えば２個のタプル）における各要素と比較する。デスティネーションベクトルレジスタ１８３５において、命令１８０３は、（例えば、等価性について）実行された対応する比較に応じて、対応するレジスタ１８１５部分のマスクされない各要素に対応するビットマスクにおいて、ベクトル１８２５部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の（例えば、ビットマスクにおける上位の）ビットをゼロの値にセットする。いくつかの実施形態において、ベクトルレジスタ１８１５の要素に対応する全てのビットマスクはまず、第１のベクトルレジスタ１８１５における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ１８３５に格納され得、次にパックドシフト１８１３は、別個のＳＩＭＤ命令に応じて実行され得る。これに代えて、いくつかの代替的な実施形態においては、第１のベクトルレジスタ１８１５の要素に対応するビットマスクは、ソース／デスティネーションベクトルレジスタ１８３５の対応する要素にも格納されたシフトカウントに応じて再度位置合わせされたソース／デスティネーションベクトルレジスタ１８３５に格納され得る。次に、ベクトル置換は、一時的結果ベクトルレジスタ１８４５を生成するべく、置換ベクトル１８４０および別個のＳＩＭＤベクトル置換命令に応じて、ベクトルレジスタ１８３５のビットマスク要素に対して実行され得る。
【０１６３】
第３のベクトルパックドダブル相互比較１８０４においては、第１のデータタイプの要素は、ベクトル１８５０のｎ個のデータフィールドの各々に格納され、ベクトル１８５０を表すベクトルレジスタまたはメモリストレージのセットに格納されてもよい。ベクトルパックドダブル相互比較１８０４のための第３のＳＩＭＤ命令がデコードされる。ベクトルパックドダブル相互比較１８０４のための第３のＳＩＭＤ命令に応答して、ベクトルレジスタ１８１５におけるｎ個のデータフィールドの各部分（例えば２個のタプル）のデータフィールドに格納された要素毎に、命令１８０４は、当該要素を、ベクトル１８５０のｎ個のデータフィールドを表すベクトルレジスタまたはメモリストレージのセットの対応する部分（例えば２個のタプル）における各要素と比較する。デスティネーションベクトルレジスタ１８６０において、命令１８０４は、（例えば、等価性について）実行された対応する比較に応じて、対応するレジスタ１８１５部分のマスクされない各要素に対応するビットマスクにおいて、ベクトル１８５０部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の（例えば、ビットマスクにおける上位の）ビットをゼロの値にセットする。いくつかの実施形態において、ベクトルレジスタ１８１５の要素に対応する全てのビットマスクはまず、ベクトルレジスタ１８１５における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ１８６０に格納され得、次にパックドシフト１８１４は、別個のＳＩＭＤ命令に応じて実行され得る。これに代えて、いくつかの代替的な実施形態においては、第１のベクトルレジスタ１８１５の要素に対応するビットマスクは、ソース／デスティネーションベクトルレジスタ１８６０の対応する要素にも格納されたシフトカウントに応じて再度位置合わせされたソース／デスティネーションベクトルレジスタ１８６０に格納され得る。
【０１６４】
ベクトルレジスタ１８１５の要素に対応するソース／デスティネーションベクトルレジスタ１８６０に格納されたビットマスクは、第２の一時的結果ベクトルレジスタ１８７０を生成するべく、（例えば、別個のＳＩＭＤベクトルパックド加算命令に応じて）一時的結果ベクトルレジスタ１８４５に格納されたビットマスクと各々、組み合わされる。ベクトルレジスタ１８１５の要素に対応するソース／デスティネーションベクトルレジスタ１８３５に格納されたビットマスクは、第３の一時的結果ベクトルレジスタ１８８０を生成するべく、（例えば、もう１つの別個のＳＩＭＤベクトルパックド加算命令に応じて）第２の一時的結果ベクトルレジスタ１８７０に格納されたビットマスクと各々、組み合わされる。ベクトルレジスタ１８１０の要素に対応するソース／デスティネーションベクトルレジスタ１８３０に格納されたビットマスクは、ベクトルレジスタ１８１０の要素に対応するアドレス競合マスク（例えば、１４２０等）を有する結果ベクトルレジスタ１８９０を生成するべく、（例えば、もう１つの別個のＳＩＭＤベクトルパックド加算命令に応じて）第３の一時的結果ベクトルレジスタ１８８０に格納されたビットマスクと各々、組み合わされる。
【０１６５】
本明細書に開示されるＳＩＭＤベクトルパックドタプル比較命令は、ＳＩＭＤベクトルアドレス競合検出機能、および効率的なＳＩＭＤアドレス競合解決のために競合マスクを生成するべく組み合わされた結果を提供する、可変サイズの要素およびメモリオフセットのための代替的な解決法として用いられ得ることが理解されよう。ＳＩＭＤベクトルパックドタプル比較命令は、（例えば、様々な異なる比較オペレーションのうちのいずれか１つが有用である得る場合に）より汎用に適用することが可能であり、面積および電力の観点では全要素を相互比較する命令と比べてあまり実装コストを必要としないことが理解されよう。
【０１６６】
図１９Ａは、ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するための装置１９０１の実施形態を示す。装置１９０１の実施形態は、パイプライン４００（例えば、実行ステージ４１６）の一部、またはＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するためのコア４９０（例えば、実行ユニット４６２）の一部であり得る。装置１９０１のいくつかの実施形態は、制御ロジック１９４０およびコンパレータアレイ１９４２を有するパックドタプル比較装置１９０３を備え、シフタ１９５０、１９５１、１９５２、および１９５３等を有するシフト装置１９０５を任意選択で備える。装置１９０１の実施形態は、効率的なベクトルアドレス競合解決を可能にし得るＳＩＭＤベクトルパックドタプル相互比較のための命令をデコードするデコードステージ（例えば、デコード４０６）またはデコーダ（例えば、デコードユニット４４０）に結合され得る。１または複数の実行ユニット（例えば、実行装置１９０１）は、デコード済みの命令に応答して、ベクトルレジスタ１９１０におけるｎ個のデータフィールドの各部分（例えば、２個のタプル）のデータフィールドに格納された要素毎に、当該要素を、ベクトル１９２０のｎ個のデータフィールドを表すベクトルレジスタまたはメモリストレージのセットの対応する部分（例えば、２個のタプル）の各要素と比較する。装置１９０１の実施形態は、可変の複数のｎ個の可変サイズのデータ要素の値を格納する可変の複数のｎ個の可変サイズのデータフィールドを備えるベクトルレジスタ（例えば、物理レジスタファイルユニット４５８）に結合され得る。デスティネーションベクトルレジスタ１９７０において、装置１９０１は、実行された対応する比較（例えば、即値オペランド１９３０により指定される）に応じて、対応するレジスタ１９１０部分のマスクされない各要素に対応するビットマスクにおいて、ベクトル１９２０部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の（例えば、ビットマスクにおける上位の）ビットをゼロの値にセットする。いくつかの実施形態において、ベクトルレジスタ１９１０の要素に対応する全てのビットマスクは、ベクトルレジスタ１９１０における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ１９７０に格納され得る。いくつかの代替的な実施形態において、第１のベクトルレジスタ１９１０の要素に対応するビットマスクは、ソース／デスティネーションベクトルレジスタ１９７０の対応する要素に格納されたシフトカウントに応じて（例えば、シフト装置１９０５により）再度位置合わせされたソース／デスティネーションベクトルレジスタ１９７０に任意選択で格納され得る。
【０１６７】
図１９Ｂは、ＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するための装置１９０２の代替的な実施形態を示す。装置１９０２の実施形態は、パイプライン４００（例えば、実行ステージ４１６）の一部、またはＳＩＭＤベクトルパックドタプル相互比較機能を提供する命令を実行するためのコア４９０（例えば、実行ユニット４６２）の一部であり得る。装置１９０２のいくつかの実施形態は、制御ロジック１９４０およびコンパレータアレイ１９４４を有するパックドタプル比較装置１９０４を備え、シフタ１９６０、１９６１、１９６２、および１９６３等を有するシフト装置１９０６を任意選択で備える。装置１９０２の実施形態は、効率的なベクトルアドレス競合解決を可能にし得るＳＩＭＤベクトルパックドタプル相互比較のための命令をデコードするデコードステージ（例えば、デコード４０６）またはデコーダ（例えば、デコードユニット４４０）に結合され得る。１または複数の実行ユニット（例えば、実行装置１９０２）は、デコード済みの命令に応答して、ベクトルレジスタ１９１０におけるｎ個のデータフィールドの各部分（例えば、４個のタプル）のデータフィールドに格納された要素毎に、当該要素を、ベクトル１９２０のｎ個のデータフィールドを表すベクトルレジスタまたはメモリストレージのセットの対応する部分（例えば、４個のタプル）の各要素と比較する。装置１９０２の実施形態は、可変の複数のｎ個の可変サイズのデータ要素の値を格納する可変の複数のｎ個の可変サイズのデータフィールドを備えるベクトルレジスタ（例えば、物理レジスタファイルユニット４５８）に結合され得る。デスティネーションベクトルレジスタ１９７０において、装置１９０２は、実行された対応する比較（例えば、即値オペランド１９３０により指定される）に応じて、対応するレジスタ１９１０部分のマスクされない各要素に対応するビットマスクにおいて、ベクトル１９２０部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の（例えば、ビットマスクにおける上位の）ビットをゼロの値にセットする。いくつかの実施形態において、ベクトルレジスタ１９１０の要素に対応する全てのビットマスクは、ベクトルレジスタ１９１０における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ１９７０に格納され得る。いくつかの代替的な実施形態において、第１のベクトルレジスタ１９１０の要素に対応するビットマスクは、ソース／デスティネーションベクトルレジスタ１９７０の対応する要素に格納されたシフトカウントに応じて（例えば、シフト装置１９０６により）再度位置合わせされたソース／デスティネーションベクトルレジスタ１９７０に任意選択で格納され得る。
【０１６８】
ＳＩＭＤベクトルパックドタプル比較命令を用いると、符号付きまたは符号なしのバックトバイト（８ビット）、ワード（１６ビット）、ダブルワード（３２ビット）またはクワッドワード（６４ビット）を含む可変の複数のｎ個の可変サイズのデータ要素を可能にする。ＳＩＭＤベクトルパックドタプル比較命令は、（例えば、様々な異なる比較オペレーションのうちのいずれか１つが有用である得る場合に）ベクトル競合命令より汎用に適用することが可能であり、面積および電力の観点では全要素を相互比較する命令と比べてあまり実装コストを必要としないことが理解されよう。
【０１６９】
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせで実装され得る。本発明の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性メモリ、ならびに／またはストレージ要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを有するプログラミング可能なシステム上で実行するコンピュータプログラムまたはプログラムコードとして実装され得る。
【０１７０】
プログラムコードは、本明細書に説明される機能を実行して出力情報を生成するべく、命令の入力に適用され得る。出力情報は、既知の様式で１または複数の出力デバイスに適用され得る。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
【０１７１】
プログラムコードは、高水準手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装され、処理システムと通信し得る。所望であれば、プログラムコードは、アセンブリ言語または機械言語でも実装され得る。実際には、本明細書に説明されるメカニズムは、範囲においていずれの特定のプログラミング言語にも限定されない。いずれの場合においても、言語は、コンパイル型言語またはインタープリタ型言語であってもよい。
【０１７２】
少なくとも一実施形態の１または複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体上に格納された代表的命令により実装され得、命令は、機械により読み出されると、当該機械に本明細書に説明される技術を実行するためのロジックを生成させる。「ＩＰコア」として知られるそのような表現は、有形機械可読媒体上に格納され、様々な顧客または製造施設に供給されて、ロジックまたはプロセッサを実際に作製する製造機械に読み込まれ得る。
【０１７３】
そのような機械可読ストレージ媒体としては、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ‐ＲＯＭ）、書き換え可能コンパクトディスク（ＣＤ‐ＲＷ）、および光磁気ディスク等の任意の他のタイプのディスク、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）等の半導体デバイス、磁気カードもしくは光カード、または電子命令を格納するのに好適な任意の他のタイプの媒体を含むストレージ媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形な構成の物品が挙げられ得るが、これらに限定されない。
【０１７４】
従って、本発明の実施形態は、命令を含み、または本明細書に説明される構造体、回路、装置、プロセッサ、および／またはシステム機能を定義するハードウェア記述言語（ＨＤＬ）等の設計データを含む非一時的有形機械可読媒体も含む。そのような実施形態は、プログラム製品と称され得る。
【０１７５】
いくつかの場合に、命令コンバータは、ソース命令セットからターゲット命令セットへと命令を変換するべく用いられ得る。例えば、命令コンバータは、（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて）命令を、コアにより処理されるべき１または複数の他の命令に翻訳し、モーフィングし、エミュレートし、または別の方法で変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装され得る。命令コンバータは、プロセッサにあり、プロセッサから離れ、またはプロセッサ上の一部であり、プロセッサから離れた一部であり得る。
【０１７６】
このように、少なくとも一実施形態による１または複数の命令を実行するための技術が開示される。添付の図面において、特定の例示的な実施形態が説明され、示されているが、そのような実施形態は、広い発明を単に例示するものであってこれを限定するものではなく、本開示を研究すれば、当業者であれば様々な他の変更形態に想到し得るので、本発明は、示され、説明される具体的な構造および構成に限定されないことを理解されたい。成長が急激で、更なる進歩が容易には予見されない本技術のような技術分野において、開示される実施形態は、本開示の原理または添付の特許請求の範囲を逸脱することなく、技術的進歩を可能にすることによって容易なものにする構成および詳細に容易に変更可能であり得る。
［項目１］
第１の複数のｎ個のデータフィールドの各々に、第１のデータタイプの要素を格納する第１のベクトルレジスタと、
上記第１の複数のｎ個のデータフィールドに対応する第２の複数のｎ個のデータフィールドの各々に、上記第１のデータタイプの要素を格納する第２のベクトルレジスタまたはメモリストレージのセットと、
ベクトルパックドタプル相互比較オペレーションおよびタプルサイズを指定する第１の命令をデコードするデコードステージと、
１または複数の実行ユニットとを備え、
上記１または複数の実行ユニットは、デコード済みの上記第１の命令に応答して、上記第１の複数のｎ個のデータフィールドの第１の部分におけるデータフィールド毎に、上記データフィールドに格納された上記要素を、上記第１の部分に対応する上記第２の複数のｎ個のデータフィールドの第２の部分における要素と比較し、
対応する比較に応じて上記第１の部分のマスクされない各要素に対応するビットマスクにおける上記第２の部分の各要素に対応するマスクビットをセットし、
上記第１の部分および上記第２の部分は、上記タプルサイズである、プロセッサ。
［項目２］
上記ベクトルパックドタプル相互比較オペレーションのための比較タイプは、上記第１の命令により指定された即値オペランドにより示される、項目１に記載のプロセッサ。
［項目３］
上記ベクトルパックドタプル相互比較オペレーションのための上記比較タイプは、ｅｑｕａｌ、ｌｅｓｓ‐ｔｈａｎ、ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、ｆａｌｓｅ、ｎｏｔ  ｅｑｕａｌ、ｎｏｔ  ｌｅｓｓ‐ｔｈａｎ、ｎｏｔ  ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、またはｔｒｕｅを含む、項目２に記載のプロセッサ。
［項目４］
上記ベクトルパックドタプル相互比較オペレーションは、上記第１の複数のｎ個のデータフィールドのペアを上記第２の複数のｎ個のデータフィールドのペアと相互比較するベクトルパックドダブル相互比較オペレーションを含む、項目１〜３のいずれか１項に記載のプロセッサ。
［項目５］
上記ベクトルパックドタプル相互比較オペレーションは、上記第１の複数のｎ個のデータフィールドの４個のタプルを上記第２の複数のｎ個のデータフィールドの４個のタプルと相互比較するベクトルパックドクワドラプル相互比較オペレーションを含む、項目１〜４のいずれか１項に記載のプロセッサ。
［項目６］
上記ベクトルパックドタプル相互比較オペレーションは、上記第１の複数のｎ個のデータフィールドの８個のタプルを上記第２の複数のｎ個のデータフィールドの８個のタプルと相互比較するベクトルパックドオクタプル相互比較オペレーションを含む、項目１〜５のいずれか１項に記載のプロセッサ。
［項目７］
ｎは、６４である、項目１〜６のいずれか１項に記載のプロセッサ。
［項目８］
ｎは、３２である、項目１〜６のいずれか１項に記載のプロセッサ。
［項目９］
ｎは、１６である、項目１〜６のいずれか１項に記載のプロセッサ。
［項目１０］
ｎは、８である、項目１〜６のいずれか１項に記載のプロセッサ。
［項目１１］
上記第１の複数のｎ個のデータフィールドの各々は、８ビットである、項目１〜１０のいずれか１項に記載のプロセッサ。
［項目１２］
上記第１の複数のｎ個のデータフィールドの各々は、１６ビットである、項目１〜１０のいずれか１項に記載のプロセッサ。
［項目１３］
上記第２の部分の各要素に対応するマスクビットの数は、２ビットを含む、項目１〜１２のいずれか１項に記載のプロセッサ。
［項目１４］
上記第２の部分の各要素に対応するマスクビットの数は、４ビットを含む、項目１〜１３のいずれか１項に記載のプロセッサ。
［項目１５］
上記第２の部分の各要素に対応するマスクビットの数は、８ビットを含む、項目１〜１４のいずれか１項に記載のプロセッサ。
［項目１６］
上記第１の命令は、上記第１の複数のｎ個のデータフィールドの各データフィールドが各々、マスクされるか、またはマスクされないかを示すビットを有するマスクレジスタオペランドを指定する、項目１〜１５のいずれか１項に記載のプロセッサ。
［項目１７］
第１のベクトルレジスタの第１の複数のｎ個のデータフィールドの各々に、第１のデータタイプの要素を格納する段階と、
上記第１の複数のｎ個のデータフィールドに対応する第２のベクトルレジスタの第２の複数のｎ個のデータフィールドの各々に、上記第１のデータタイプの要素を格納する段階と、
プロセッサにおいて、ベクトルパックドタプル相互比較のための単一命令多重データ（ＳＩＭＤ）命令を実行する段階であって、上記ＳＩＭＤ命令は、タプルサイズを含む段階と、
上記第１の複数のｎ個のデータフィールドの第１の部分におけるデータフィールド毎に、上記データフィールドに格納された上記要素を、上記第１の部分に対応する上記第２の複数のｎ個のデータフィールドの第２の部分の各要素と比較する段階であって、上記第１の部分および上記第２の部分は、上記タプルサイズである段階と、
対応する比較に応じて上記第１の部分のマスクされない各要素に対応するビットマスクにおける上記第２の部分の各要素に対応するマスクビットをセットする段階とを備える、方法。
［項目１８］
上記第１の部分の各要素は、暗黙的にマスクされない、項目１７に記載の方法。
［項目１９］
マスクレジスタのビットの数は、上記第１の部分の対応する要素が各々マスクされないか、またはマスクされるかを明示的に示すべく、１またはゼロにセットされる、項目１７または１８に記載の方法。
［項目２０］
上記第１の部分および上記第２の部分は、各々２個のデータフィールドを含む、項目１７〜１９のいずれか１項に記載の方法。
［項目２１］
上記第１の部分および上記第２の部分は、各々４個のデータフィールドを含む、項目１７〜１９のいずれか１項に記載の方法。
［項目２２］
上記第１の部分および上記第２の部分は、各々８個のデータフィールドを含む、項目１７〜１９のいずれか１項に記載の方法。
［項目２３］
メモリと、
複数のプロセッサとを備え、
上記複数のプロセッサは、各々、
第１の複数のｎ個のデータフィールドの各々に、第１のデータタイプの要素を格納する第１のベクトルレジスタと、
上記第１の複数のｎ個のデータフィールドに対応する第２の複数のｎ個のデータフィールドの各々に、上記第１のデータタイプの要素を格納する第２のベクトルレジスタまたはメモリストレージのセットと、
ベクトルパックドタプル相互比較オペレーションおよびタプルサイズを指定する第１の命令をデコードするデコードステージと、
１または複数の実行ユニットとを有し、
上記１または複数の実行ユニットは、
デコード済みの上記第１の命令に応答して、上記第１の複数のｎ個のデータフィールドの第１の部分におけるデータフィールド毎に、上記データフィールドに格納された上記要素を、上記第１の部分に対応する上記第２の複数のｎ個のデータフィールドの第２の部分の各要素と比較し、
対応する比較に応じて、上記第１の部分のマスクされない各要素に対応するビットマスクにおける上記第２の部分の各要素に対応するマスクビットをセットし、
上記第１の部分および上記第２の部分は、上記タプルサイズである、処理システム。
［項目２４］
上記ベクトルパックドタプル相互比較オペレーションのための比較タイプは、上記第１の命令により指定された即値オペランドにより示される、項目２３に記載の処理システム。
［項目２５］
上記ベクトルパックドタプル相互比較オペレーションのための上記比較タイプは、ｅｑｕａｌ、ｌｅｓｓ‐ｔｈａｎ、ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、ｆａｌｓｅ、ｎｏｔ  ｅｑｕａｌ、ｎｏｔ  ｌｅｓｓ‐ｔｈａｎ、ｎｏｔ  ｌｅｓｓ‐ｔｈａｎ  ｏｒ  ｅｑｕａｌ、またはｔｒｕｅを含む、項目２４に記載の処理システム。
［項目２６］
上記ベクトルパックドタプル相互比較オペレーションは、上記第１の複数のｎ個のデータフィールドのペアを上記第２の複数のｎ個のデータフィールドのペアと相互比較するベクトルパックドダブル相互比較オペレーションを含む、項目２３〜２５のいずれか１項に記載の処理システム。
［項目２７］
上記ベクトルパックドタプル相互比較オペレーションは、上記第１の複数のｎ個のデータフィールドの４個のタプルを上記第２の複数のｎ個のデータフィールドの４個のタプルと相互比較するベクトルパックドクワドラプル相互比較オペレーションを含む、項目２３〜２６のいずれか１項に記載の処理システム。
［項目２８］
上記ベクトルパックドタプル相互比較オペレーションは、上記第１の複数のｎ個のデータフィールドの８個のタプルを上記第２の複数のｎ個のデータフィールドの８個のタプルと相互比較するベクトルパックドオクタプル相互比較オペレーションを含む、項目２３〜２７のいずれか１項に記載の処理システム。
【図１Ａ】
0006745022.tif 000004
【図１Ｂ】
0006745022.tif 000005
【図１Ｃ】
0006745022.tif 000006
【図２】
0006745022.tif 000007
【図３Ａ】
0006745022.tif 000008
【図３Ｂ】
0006745022.tif 000009
【図３Ｃ】
0006745022.tif 000010
【図３Ｄ】
0006745022.tif 000011
【図３Ｅ】
0006745022.tif 000012
【図３Ｆ】
0006745022.tif 000013
【図３Ｇ】
0006745022.tif 000014
【図３Ｈ】
0006745022.tif 000015
【図４Ａ】
0006745022.tif 000016
【図４Ｂ】
0006745022.tif 000017
【図５】
0006745022.tif 000018
【図６】
0006745022.tif 000019
【図７】
0006745022.tif 000020
【図８】
0006745022.tif 000021
【図９】
0006745022.tif 000022
【図１０】
0006745022.tif 000023
【図１１】
0006745022.tif 000024
【図１２】
0006745022.tif 000025
【図１３】
0006745022.tif 000026
【図１４Ａ】
0006745022.tif 000027
【図１４Ｂ】
0006745022.tif 000028
【図１５Ａ】
0006745022.tif 000029
【図１５Ｂ】
0006745022.tif 000030
【図１６】
0006745022.tif 000031
【図１７Ａ】
0006745022.tif 000032
【図１７Ｂ】
0006745022.tif 000033
【図１７Ｃ】
0006745022.tif 000034
【図１８】
0006745022.tif 000035
【図１９Ａ】
0006745022.tif 000036
【図１９Ｂ】
0006745022.tif 000037