(57)【要約】      （修正有）【課題】命令に応答して複数のデータ要素を複数の他のデータ要素と比較するためのプロセッサを提供する。【解決手段】装置がパックデータレジスタ２０８および実行ユニット２１０を含む。命令が、第１パックデータ要素を含む第１ソースパックデータ２１３、第２パックデータ要素を含む第２ソースパックデータ２１５、およびデスティネーション記憶位置２１６を示す。実行ユニットは、命令に応答して、パック結果データ要素を含むパックデータ結果をデスティネーション記憶位置内に格納する。結果データ要素の各々は、第２ソースパックデータのデータ要素の別個のものに対応する。結果データ要素の各々は、第２ソースパックデータの対応するデータ要素と比較された第１ソースパックデータの各対応するデータ要素毎に異なる比較マスクビットを含む複数ビット比較マスクを含む。【選択図】図２
2014179076.tif 000002
【特許請求の範囲】
【請求項１】
命令を処理する装置であって、
複数のパックデータレジスタと、
前記複数のパックデータレジスタと結合され、第１の複数のパックデータ要素を含む第１ソースパックデータ、第２の複数のパックデータ要素を含む第２ソースパックデータ、および、デスティネーション記憶位置を示す複数要素対複数要素比較命令に応答して、複数のパック結果データ要素を含むパックデータ結果を前記デスティネーション記憶位置に格納するように動作可能である実行ユニットと、を備え、
前記複数のパック結果データ要素の各々は、前記第２ソースパックデータの前記第２の複数のパックデータ要素の別個の一つに対応し、
前記複数のパック結果データ要素の各々は、当該パック結果データ要素に対応する前記第２ソースパックデータのパックデータ要素と比較される前記第１ソースパックデータのパックデータ要素それぞれに対して異なる比較マスクビットを含む複数ビット比較マスクを含み、
前記比較マスクビットはそれぞれ、対応する比較の結果を示す、装置。
【請求項２】
前記実行ユニットが、前記命令に応答して、前記第１ソースパックデータのデータ要素全てと前記第２ソースパックデータのデータ要素全てとの比較の結果を示す前記パックデータ結果を格納する、請求項１に記載の装置。
【請求項３】
前記実行ユニットが、前記命令に応答して、所与のパック結果データ要素に、前記第１ソースパックデータの前記第１の複数のパックデータ要素のうちのどれが、前記所与のパック結果データ要素に対応する前記第２ソースパックデータのパックデータ要素と等しいかを示す複数ビット比較マスクを格納する、請求項１に記載の装置。
【請求項４】
前記第１ソースパックデータがＮ個のパックデータ要素を有し、
前記第２ソースパックデータがＮ個のパックデータ要素を有し、
前記実行ユニットが、前記命令に応答して、Ｎ個のＮビットパック結果データ要素を含む前記パックデータ結果を格納する、請求項１に記載の装置。
【請求項５】
前記第１ソースパックデータが８個の８ビットパックデータ要素を有し、
前記第２ソースパックデータが８個の８ビットパックデータ要素を有し、
前記実行ユニットが、前記命令に応答して、８個の８ビットパック結果データ要素を含む前記パックデータ結果を格納する、請求項４に記載の装置。
【請求項６】
前記第１ソースパックデータが１６個の８ビットパックデータ要素を有し、
前記第２ソースパックデータが１６個の８ビットパックデータ要素を有し、
前記実行ユニットが、前記命令に応答して、１６個の１６ビットパック結果データ要素を含む前記パックデータ結果を格納する、請求項４に記載の装置。
【請求項７】
前記第１ソースパックデータが３２個の８ビットパックデータ要素を有し、
前記第２ソースパックデータが３２個の８ビットパックデータ要素を有し、
前記実行ユニットが、前記命令に応答して、３２個の３２ビットパック結果データ要素を含む前記パックデータ結果を格納する、請求項４に記載の装置。
【請求項８】
前記第１ソースパックデータがＮ個のパックデータ要素を有し、
前記第２ソースパックデータがＮ個のパックデータ要素を有し、
前記命令がオフセットを示し、
前記実行ユニットが、前記命令に応答して、Ｎ／２個のＮビットパック結果データ要素を含む前記パックデータ結果を格納し、
前記Ｎ／２個のＮビットパック結果データ要素のうちの最下位のものが、前記オフセットによって示される前記第２ソースパックデータの一のパックデータ要素に対応する、請求項１に記載の装置。
【請求項９】
前記実行ユニットが、前記命令に応答して、複数ビット比較マスクを含むパック結果データ要素を格納し、
前記複数ビット比較マスクにおけるマスクビットはそれぞれ、
前記第１ソースパックデータの前記対応するパックデータ要素が、前記パック結果データ要素に対応する前記第２ソースパックデータのパックデータ要素と等しいことを示すための２進値の１の値、および
前記第１ソースパックデータの前記対応するパックデータ要素が、前記パック結果データ要素に対応する前記第２ソースパックデータの前記パックデータ要素と等しくないことを示すための２進値の０の値、
のうちの一方を有する、請求項１に記載の装置。
【請求項１０】
前記実行ユニットが、前記命令に応答して、前記第１ソースパックデータおよび前記第２ソースパックデータの一方のパックデータ要素のサブセットのみと前記第１ソースパックデータおよび前記第２ソースパックデータの他方のパックデータ要素との前記比較の結果を示す複数ビット比較マスクを格納する、請求項１に記載の装置。
【請求項１１】
前記命令が、比較される前記第１ソースパックデータおよび前記第２ソースパックデータの一方のパックデータ要素のサブセットを示す、請求項１から１０の何れか一項に記載の装置。
【請求項１２】
前記命令が前記デスティネーション記憶位置を暗黙的に示す、請求項１から１１の何れか一項に記載の装置。
【請求項１３】
命令処理方法であって、
第１の複数のパックデータ要素を有する第１ソースパックデータ、第２の複数のパックデータ要素を有する第２ソースパックデータおよびデスティネーション記憶位置を示す複数要素対複数要素比較命令を受信することと、
前記複数要素対複数要素比較命令に応答して、複数のパック結果データ要素を含むパックデータ結果を前記デスティネーション記憶位置内に格納することと、を含み、
前記複数のパック結果データ要素の各々は、前記第２ソースパックデータの前記第２の複数のパックデータ要素の別個の１つに対応し、
前記複数のパック結果データ要素の各々は、比較の結果を示すために、当該パック結果データ要素に対応する前記第２ソースパックデータの前記パックデータ要素と比較された、前記第１ソースパックデータの対応する前記パックデータ要素それぞれに対して異なるマスクビットを含む複数ビット比較マスクを含む、
方法。
【請求項１４】
前記格納することが、前記第１ソースパックデータのデータ要素全てと前記第２ソースパックデータのパックデータ要素全てとの比較結果を示すパックデータ結果を格納することを含む、請求項１３に記載の方法。
【請求項１５】
前記受信することが、Ｎ個のパックデータ要素を有する前記第１ソースパックデータ、および、Ｎ個のパックデータ要素を有する前記第２ソースパックデータを示す前記命令を受信することを含み、
前記格納することが、Ｎ個のＮビットパック結果データ要素を含む前記パックデータ結果を格納することを含む、請求項１３に記載の方法。
【請求項１６】
前記受信することが、１６個の８ビットパックデータ要素を有する前記第１ソースパックデータおよび１６個の８ビットパックデータ要素を有する前記第２ソースパックデータを示す前記命令を受信することを含み、
前記格納が、１６個の１６ビットパック結果データ要素を含む前記パックデータ結果を格納することを含む、請求項１５に記載の方法。
【請求項１７】
前記受信することが、Ｎ個のパックデータ要素を有する前記第１ソースパックデータを示し、Ｎ個のパックデータ要素を有する前記第２ソースパックデータを示し、オフセットを示す前記命令を受信することを含み、
前記格納することが、Ｎ／２個のＮビットパック結果データ要素を含む前記パックデータ結果を格納することを含み、
前記Ｎ／２個のＮビットパック結果データ要素のうちの最下位のものは、前記オフセットによって示される前記第２ソースパックデータの一のパックデータ要素に対応する、請求項１３に記載の方法。
【請求項１８】
前記格納することが、前記第１ソースパックデータおよび前記第２ソースパックデータの一方のパックデータ要素のサブセットのみと前記第１ソースパックデータおよび前記第２ソースパックデータの他方のパックデータ要素との前記比較の結果を示す複数ビット比較マスクを格納することを含む、請求項１３に記載の方法。
【請求項１９】
前記受信することが、第１の生物学的配列を表す前記第１ソースパックデータを示し、第２の生物学的配列を表す前記第２ソースパックデータを示す前記命令を受信することを含む、請求項１３に記載の方法。
【請求項２０】
命令を処理するシステムであって、
相互接続部と、
前記相互接続部と結合されるプロセッサと、
前記相互接続部と結合されるダイナミック・ランダムアクセスメモリ（ＤＲＡＭ）と、を備え、
前記ＤＲＡＭは、複数要素対複数要素比較命令を格納し、前記命令は、第１の複数のパックデータ要素を含む第１ソースパックデータ、第２の複数のパックデータ要素を含む第２ソースパックデータおよびデスティネーション記憶位置を指示し、
前記命令は、前記プロセッサによって実行されると、前記プロセッサに、
複数のパック結果データ要素を含むパックデータ結果を前記デスティネーション記憶位置内に格納すること、を含むオペレーションを実行させ、
前記複数のパック結果データ要素の各々は、前記第２ソースパックデータの前記第２の複数のパックデータ要素の別個の一つに対応し、
前記複数のパック結果データ要素の各々は、前記第１ソースパックデータの複数のパックデータ要素と、当該パック結果データ要素に対応する前記第２ソースパックデータのパックデータ要素との比較の結果を示す複数ビット比較マスクを含む、システム。
【請求項２１】
前記命令が、前記プロセッサによって実行されると、前記プロセッサに、前記第１ソースパックデータのパックデータ要素全てと前記第２ソースパックデータのデータ要素全てとの比較の結果を示す前記パックデータ結果を格納させるように動作可能である、請求項２０に記載のシステム。
【請求項２２】
前記命令が、Ｎ個のパックデータ要素を有する前記第１ソースパックデータ、および、Ｎ個のパックデータ要素を有する前記第２ソースパックデータを示し、
前記命令が、前記プロセッサによって実行されると、前記プロセッサに、Ｎ個のＮビットパック結果データ要素を含む前記パックデータ結果を格納させるように動作可能である、請求項２０に記載のシステム。
【請求項２３】
命令を提供するための物品であって、
命令を格納する非一時的機械可読記憶媒体
を含み、
前記命令は、第１の複数のパックデータ要素を有する第１ソースパックデータ、第２の複数のパックデータ要素を有する第２ソースパックデータ、および、デスティネーション記憶位置を指示し、
前記命令は、機械によって実行されると、前記機械に、
複数のパック結果データ要素を含むパックデータ結果を前記デスティネーション記憶位置内に格納すること、を含むオペレーションを実行させ、
前記複数のパック結果データ要素の各々は、前記第２ソースパックデータの前記第２の複数のパックデータ要素の別個の一つに対応し、
前記複数のパック結果データ要素の各々は、複数ビット比較マスクを含み、
前記複数ビット比較マスクはそれぞれ、前記第１ソースパックデータの複数のパックデータ要素と、前記複数ビット比較マスクを有する前記パック結果データ要素に対応する前記第２ソースパックデータのパックデータ要素との比較の結果を示す、
物品。
【請求項２４】
前記命令が、Ｎ個のパックデータ要素を有する前記第１ソースパックデータ、および、Ｎ個のパックデータ要素を有する前記第２ソースパックデータを示し、
前記命令が、前記機械によって実行されると、前記機械に、Ｎ個のＮビットパック結果データ要素を含む前記パックデータ結果を格納させるように動作可能である、請求項２３に記載の物品。
【請求項２５】
前記非一時的機械可読記憶媒体が、不揮発性メモリ、ＤＲＡＭ、およびＣＤ−ＲＯＭのうちの１つを含み、
前記命令が、前記機械によって実行されると、前記機械に、前記第１ソースパックデータの全てのパックデータ要素のうちの何れが前記第２ソースパックデータの全てのデータ要素のうちの何れと等しいのかを示す前記パックデータ結果を格納させるように動作可能である、請求項２３に記載の物品。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に記載されている実施形態は概してプロセッサに関する。特に、本明細書に記載されている実施形態は概して、命令に応答して複数のデータ要素を複数の他のデータ要素と比較するためのプロセッサに関する。
【背景技術】
【０００２】
多くのプロセッサは、単一命令、複数データ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ，  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ、ＳＩＭＤ）アーキテクチャを有する。ＳＩＭＤアーキテクチャでは、パックデータ命令、ベクトル命令、またはＳＩＭＤ命令が、複数のデータ要素または複数のデータ要素対に対して同時または並列に演算し得る。プロセッサは、パックデータ命令に応答して複数の演算を同時または並列に遂行するための並列実行ハードウェアを有してよい。
【０００３】
複数データの要素は、１つのレジスタまたはメモリ位置内にパックデータまたはベクトルデータとしてパックされてよい。パックデータにおいては、レジスタまたはその他の記憶位置のビットが一連のデータ要素に論理的に分割されてよい。例えば、２５６ビット幅パックデータレジスタは、４つの６４ビット幅データ要素、８つの３２ビットデータ要素、１６個の１６ビットデータ要素等を有し得る。データ要素の各々は、互いに単独におよび／または独立に演算が行われてよい、データの単独の個別部分（例えば、画素色等）を表してよい。
【０００４】
パックデータ要素の比較は、様々な方法で利用される一般的で広く知られた演算である。データ要素のパック、ベクトル、またはＳＩＭＤ比較を遂行するための種々のベクトル、パックデータ、またはＳＩＭＤ命令が当技術分野において知られている。例えば、インテルアーキテクチャ（Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ、ＩＡ）におけるＭＭＸ（商標）技術は種々のパック比較命令を含む。より最近では、インテル（登録商標）ストリーミングＳＩＭＤ拡張４．２（Ｓｔｒｅａｍｉｎｇ  ＳＩＭＤ  Ｅｘｔｅｎｓｉｏｎｓ  ４．２、ＳＳＥ４．２）がいくつかのストリングおよびテキスト処理命令を導入した。
【図面の簡単な説明】
【０００５】
本発明は、以下の説明と、実施形態を例示するために用いられる添付の図面を参照することによって、最も良く理解することができる。
【０００６】
【図１】１つ以上の複数データ要素対複数データ要素比較命令を含む命令セットを有するプロセッサの一実施形態のブロック図である。
【０００７】
【図２】複数データ要素対複数データ要素比較命令の一実施形態を実行するように動作可能な実行ユニットを有する命令処理装置の一実施形態のブロック図である。
【０００８】
【図３】複数データ要素対複数データ要素比較命令の一実施形態を処理する方法の一実施形態のブロックフロー図である。
【０００９】
【図４】好適なパックデータフォーマットの諸実施形態例を示すブロック図である。
【００１０】
【図５】命令の一実施形態に応答して遂行されてよい演算の一実施形態を示すブロック図である。
【００１１】
【図６】命令の一実施形態に応答して１６ビットワード要素を有する１２８ビット幅パックソースに対して遂行されてよい演算の一実施形態例を示すブロック図である。
【００１２】
【図７】命令の一実施形態に応答して８ビットバイト要素を有する１２８ビット幅パックソースに対して遂行されてよい演算の一実施形態例を示すブロック図である。
【００１３】
【図８】パックデータ結果内に報告するべき比較マスクのサブセットを選択するように動作可能な命令の一実施形態に応答して遂行されてよい演算の一実施形態例を示すブロック図である。
【００１４】
【図９】諸実施形態に適したマイクロアーキテクチャ細部のブロック図である。
【００１５】
【図１０】パックデータレジスタの好適なセットの一実施形態例のブロック図である。
【００１６】
【図１１Ａ】ＶＥＸプリフィックス、実オペコードフィールド、ＭＯＤ  Ｒ／Ｍバイト、ＳＩＢバイト、変位フィールド、およびＩＭＭ８を含む例示的なＡＶＸ命令フォーマットを示す図である。
【００１７】
【図１１Ｂ】図１１Ａのどのフィールドが完全オペコードフィールドおよび基本演算フィールドを構成するのかを示す図である。
【００１８】
【図１１Ｃ】図１１Ａのどのフィールドがレジスタインデックスフィールドを構成するのかを示す図である。
【００１９】
【図１２Ａ】本発明の諸実施形態に係る汎用ベクトル対応命令フォーマットおよびそのクラスＡ命令テンプレートを示すブロック図である。
【００２０】
【図１２Ｂ】本発明の諸実施形態に係る汎用ベクトル対応命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。
【００２１】
【図１３Ａ】本発明の諸実施形態に係る例示的な特定的ベクトル対応命令フォーマットを示すブロック図である。
【００２２】
【図１３Ｂ】本発明の一実施形態に係る完全オペコードフィールドを構成する特定的ベクトル対応命令フォーマットのフィールドを示すブロック図である。
【００２３】
【図１３Ｃ】本発明の一実施形態に係るレジスタインデックスフィールドを構成する特定的ベクトル対応命令フォーマットのフィールドを示すブロック図である。
【００２４】
【図１３Ｄ】本発明の一実施形態に係る拡大演算フィールドを構成する特定的ベクトル対応命令フォーマットのフィールドを示すブロック図である。
【００２５】
【図１４】本発明の一実施形態に係るレジスタアーキテクチャのブロック図である。
【００２６】
【図１５Ａ】本発明の諸実施形態に係る例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。
【００２７】
【図１５Ｂ】本発明の諸実施形態に係るプロセッサ内に含まれるべきインオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。
【００２８】
【図１６Ａ】本発明の諸実施形態に係る、シングルプロセッサコアのブロック図であって、その、オンダイ相互接続ネットワークへの接続、およびその、レベル２（Ｌｅｖｅｌ  ２、Ｌ２）キャッシュのローカルサブセットを伴う、ブロック図である。
【００２９】
【図１６Ｂ】本発明の諸実施形態に係る図１６Ａにおけるプロセッサコアの一部の拡大図である。
【００３０】
【図１７】本発明の諸実施形態に係る、１つを超えるコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよいプロセッサのブロック図である。
【００３１】
【図１８】本発明の一実施形態に係るシステムのブロック図である。
【００３２】
【図１９】本発明の一実施形態に係る第１のより特定的な例示的システムのブロック図である。
【００３３】
【図２０】本発明の一実施形態に係る第２のより特定的な例示的システムのブロック図である。
【００３４】
【図２１】本発明の一実施形態に係るＳｏＣのブロック図である。
【００３５】
【図２２】本発明の諸実施形態に係るソース命令セット内の２進命令をターゲット命令セット内の２進命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。
【発明を実施するための形態】
【００３６】
以下の説明では、数多くの特定の細部が記載されている（例えば、特定の命令演算、パックデータフォーマット、マスクの種類、オペランドの指示方法、プロセッサ構成、マイクロアーキテクチャ細部、演算の順序等）。しかし、諸実施形態はこれらの特定の細部を備えずに実施されてもよい。他の例では、説明の理解を不明瞭にすることを回避するために、周知の回路、構造および技法は詳細に示していない。
【００３７】
本明細書に開示されているのは、種々の複数データ要素対複数データ要素比較命令、命令を実行するためのプロセッサ、命令を処理または実行する際にプロセッサによって遂行される方法、ならびに命令を処理または実行するための１つ以上のプロセッサを組み込むシステムである。図１は、１つ以上の複数データ要素対複数データ要素比較命令１０３を含む命令セット１０２を有するプロセッサ１００の一実施形態のブロック図である。実施形態によっては、プロセッサは、汎用プロセッサ（例えば、デスクトップ、ラップトップ、および同様のコンピュータに使用される種類の汎用マイクロプロセッサ）であってよい。代替的に、プロセッサは専用プロセッサであってもよい。好適な専用プロセッサの例としては、以下のものに限定されるわけではないが、ほんの数例を挙げると、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックスプロセッサ、コプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ（ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ、ＤＳＰ）、およびコントローラ（例えば、マイクロコントローラ）が挙げられる。プロセッサは、種々の複合命令セットコンピューティング（ｃｏｍｐｌｅｘ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｉｎｇ、ＣＩＳＣ）プロセッサ、種々の縮小命令セットコンピューティング（ｒｅｄｕｃｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｉｎｇ、ＲＩＳＣ）プロセッサ、種々の超長命令語（ｖｅｒｙ  ｌｏｎｇ  ｉｎｓｔｒｕｃｔｉｏｎ  ｗｏｒｄ、ＶＬＩＷ）プロセッサ、これらの種々のハイブリッド、または全く別の種類のプロセッサのいずれのものであってもよい。
【００３８】
プロセッサは命令セットアーキテクチャ（ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ、ＩＳＡ）１０１を有する。ＩＳＡは、プログラミングに関連するプロセッサのアーキテクチャの一部を表し、通例、プロセッサの、ネイティブ命令、アーキテクチャレジスタ、データ型、アドレス指定方式、メモリアーキテクチャ、および同様のものを含む。ＩＳＡは、ＩＳＡを実装するために選択される特定のプロセッサ設計技法を一般的に表すマイクロアーキテクチャとは区別される。
【００３９】
ＩＳＡは、アーキテクチャ的に可視のレジスタ（例えば、アーキテクチャレジスタファイル）１０７を含む。アーキテクチャレジスタは本明細書において単にレジスタと呼ばれる場合もある。特に指定のない限りまたは明らかでない限り、アーキテクチャレジスタ、レジスタファイル、およびレジスタという表現は、本明細書において、ソフトウェアおよび／またはプログラマから可視のレジスタ、ならびに／あるいはオペランドを識別するべく汎用マクロ命令によって指定されるレジスタに言及するために用いられる。これらのレジスタは、所与のマイクロアーキテクチャのその他の非アーキテクチャレジスタまたはアーキテクチャ的に可視でないレジスタ（例えば、命令によって用いられる一時レジスタ、リオーダバッファ、リタイアメントレジスタ等）とは対照をなす。レジスタは一般的にオンダイのプロセッサ記憶位置を表す。図示のレジスタは、パックデータ、ベクトルデータ、またはＳＩＭＤデータを格納するように動作可能であるパックデータレジスタ１０８を含む。アーキテクチャレジスタは汎用レジスタ１０９を含んでもよく、汎用レジスタ１０９は、実施形態によっては、複数要素対複数要素比較命令によって任意追加的に指示され、ソースオペランドを提供する（例えば、データ要素のサブセットを示す、宛先内に含まれるべき比較結果を示すオフセットを提供する、等）。
【００４０】
図示のＩＳＡは命令セット１０２を含む。命令セットの命令は、マイクロ命令またはマイクロ演算（例えば、マクロ命令をデコードする結果生じるもの）とは対照的に、マクロ命令（例えば、プロセッサに実行のために提供されるアセンブリ言語またはマシンレベル命令）を表す。命令セットは１つ以上の複数データ要素対複数データ要素比較命令１０３を含む。以下に、複数データ要素対複数データ要素比較命令の様々な実施形態をさらに開示する。実施形態によっては、命令１０３は１つ以上の全データ要素対全データ要素比較命令１０４を含んでよい。実施形態によっては、命令１０３は、１つ以上の指定サブセット対全体、または指定サブセット対指定サブセット比較命令１０５を含んでよい。実施形態によっては、命令１０３は、宛先内に格納させる比較の部分を選択する（例えば、選択までのオフセットを示す）ように動作可能な１つ以上の複数要素対複数要素比較命令を含んでよい。
【００４１】
プロセッサは実行論理１１０も含む。実行論理は、命令セットの命令（例えば、複数データ要素対複数データ要素比較命令１０３）を実行または処理するように動作可能である。実施形態によっては、実行論理は、これらの命令を実行するための特定の論理（例えば、場合によってはファームウェアと組み合わせられる、特定の回路機構またはハードウェア）を含んでよい。
【００４２】
図２は、複数データ要素対複数データ要素比較命令２０３の一実施形態を実行するように動作可能である実行ユニット２１０を有する命令処理装置２００の一実施形態のブロック図である。実施形態によっては、命令処理装置はプロセッサであってよく、および／またはプロセッサ内に含まれてよい。例えば、実施形態によっては、命令処理装置は図１のプロセッサであってよく、またはその中に含まれてもよい。代替的に、命令処理装置は、同様のプロセッサまたは異なるプロセッサ内に含まれてもよい。さらに、図１のプロセッサは、同様の命令処理装置または異なる命令処理装置のいずれかを含んでもよい。
【００４３】
装置２００は複数データ要素対複数データ要素比較命令２０３を受信してよい。例えば、命令は、命令フェッチユニット、命令キュー、または同様のものから受信されてよい。複数データ要素対複数データ要素比較命令は、装置のＩＳＡの機械コード命令、アセンブリ言語命令、マクロ命令、または制御信号を表してよい。複数データ要素対複数データ要素比較命令は、（例えば、第１ソースパックデータレジスタ２１２内の）第１ソースパックデータ２１３を（例えば、１つ以上のフィールドまたは一連のビットを通じて）明示的に指定するか、または別の方法で指示してよく（例えば、暗黙的に示す）、（例えば、第２ソースパックデータレジスタ２１４内の）第２ソースパックデータ２１５を指定するかまたは別の方法で指示してよく、パックデータ結果２１７が格納されるデスティネーション記憶位置２１６を指定するかまたは別の方法で指示してよい（例えば、暗黙的に示す）。
【００４４】
図示の命令処理装置は命令デコードユニットまたはデコーダ２１１を含む。デコーダは、比較的高レベルの機械コードあるいはアセンブリ言語命令またはマクロ命令を受信してデコードし、１つ以上の比較的低レベルのマイクロ命令、マイクロ演算、マイクロコード入口点、あるいは高レベル命令を反映する、表す、および／またはそれらから生成されるその他の比較的低レベルの命令または制御信号を出力してよい。１つ以上の低レベル命令または制御信号は、１つ以上の低レベル（例えば、回路レベルまたはハードウェアレベル）演算を通じて、高レベル命令を実施してよい。デコーダは、以下のものに限定されるわけではないが、マイクロコード・リードオンリーメモリ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｉｅｓ、ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラム可能論理アレイ（ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ａｒｒａｙ、ＰＬＡ）、および当該技術分野において周知のデコーダを実装するために用いられるその他の機構を含む、種々の異なる機構を用いて実装されてよい。
【００４５】
他の実施形態では、命令エミュレータ、トランスレータ、モーフィングプログラム、インタプリタ、またはその他の命令変換論理が用いられてよい。様々な種類の命令変換論理が当技術分野において知られており、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせの形で実装されてよい。命令変換論理は命令を受信し、この命令を、１つ以上の対応する生成命令または制御信号にエミュレート、変換、モーフィング、解釈実行するか、または別の方法で変換してよい。他の実施形態では、命令変換論理およびデコーダの両方が用いられてよい。例えば、装置は、受信した機械コード命令を１つ以上の中間命令に変換するための命令変換論理、ならびに１つ以上の中間命令を、装置のネイティブハードウェア（例えば、実行ユニット）によって実行可能な１つ以上の低レベル命令または制御信号にデコードするためのデコーダを有してよい。命令変換論理の一部または全ては、命令処理装置の外部、例えば、独立したダイ上および／またはメモリ内等、に位置付けられてよい。
【００４６】
装置２００は一連のパックデータレジスタ２０８も含む。パックデータレジスタの各々は、パックデータ、ベクトルデータ、またはＳＩＭＤデータを格納するように動作可能であるオンダイの記憶位置を表してよい。実施形態によっては、第１ソースパックデータ２１３は第１ソースパックデータレジスタ２１２内に格納されてよく、第２ソースパックデータ２１５は第２ソースパックデータレジスタ２１４内に格納されてよく、パックデータ結果２１７は、第３パックデータレジスタであってよい、デスティネーション記憶位置２１６内に格納されてよい。代替的に、メモリ位置、またはその他の記憶位置がこれらのうちの１つ以上のために用いられてもよい。パックデータレジスタは、周知の技法を用い、種々のマイクロアーキテクチャで種々の方法で実装されてよく、いかなる特定の種類の回路にも限定されない。様々な種類のレジスタが好適である。好適な種類のレジスタの例としては、以下のものに限定されるわけではないが、専用物理レジスタ、レジスタリネーミングを用いる動的割り当て物理レジスタ、およびこれらの組み合わせが挙げられる。
【００４７】
図２を再び参照すると、実行ユニット２１０はデコーダ２１１およびパックデータレジスタ２０８と結合される。例として、実行ユニットは、算術論理演算ユニット、算術および論理演算を遂行するためのデジタル回路、論理ユニット、データ要素を比較するための比較論理を含む実行ユニットまたは機能ユニット、あるいは同様のものを含んでよい。実行ユニットは、複数データ要素対複数データ要素比較命令２０３を表す、および／またはそれから生成される１つ以上のデコードされた、または別の方法で変換された命令または制御信号を受信してよい。命令は、第１の複数のパックデータ要素を含む第１ソースパックデータ２１３を指定するかまたは別の方法で指示し（例えば、第１パックデータレジスタ２１２を指定するかまたは別の方法で指示し）、第２の複数のパックデータ要素を含む第２ソースパックデータ２１５を指定するかまたは別の方法で指示し（例えば、第２パックデータレジスタ２１４を指定するかまたは別の方法で指示し）、デスティネーション記憶位置２１６を指定するかまたは別の方法で指示してよい。
【００４８】
実行ユニットは、複数データ要素対複数データ要素比較命令２０３に応答して、および／またはその結果として、デスティネーション記憶位置２１６内にパックデータ結果２１７を格納するように動作可能である。実行ユニットおよび／または命令処理装置は、複数データ要素対複数データ要素比較命令２０３を実行し、命令に応答して（例えば、命令からデコードされるかまたは別の方法で生成される１つ以上の命令または制御信号に応答して）結果２１７を格納するように動作可能である特定または特別の論理（例えば、場合によってはファームウェアおよび／またはソフトウェアと組み合わせられる回路機構またはその他のハードウェア）を含んでよい。
【００４９】
パックデータ結果２１７は複数のパック結果データ要素を含んでよい。実施形態によっては、パック結果データ要素の各々は複数ビット比較マスクを有してよい。例えば、実施形態によっては、パック結果データ要素の各々は、第２ソースパックデータ２１５のパックデータ要素の別個のものに対応してよい。実施形態によっては、パック結果データ要素の各々は、第１ソースパックデータの複数のパックデータ要素と、パック結果データ要素に対応する第２ソースのパックデータ要素との比較の結果を示す複数ビット比較マスクを含んでよい。実施形態によっては、パック結果データ要素の各々は、第２ソースパックデータ２１５の対応パックデータ要素に対応し、それについての比較結果を示す複数ビット比較マスクを含んでよい。実施形態によっては、各複数ビット比較マスクは、第２ソースパックデータ２１５の関連／対応パックデータ要素と比較される第１ソースパックデータ２１３の各対応パックデータ要素毎に異なる比較マスクビットを含んでよい。実施形態によっては、各比較マスクビットは、対応する比較の結果を指示してよい。実施形態によっては、各マスクは、第２ソースパックデータからの対応データ要素との一致がいくつあるのか、それらの一致が第１ソースパックデータ内のどのポジションで生じているのかを示す。
【００５０】
実施形態によっては、所与のパック結果データ要素内の複数ビット比較マスクは、第１ソースパックデータ２１３のパックデータ要素のうちのどれが、その所与のパック結果データ要素に対応する第２ソースパックデータ２１５のパックデータ要素と等しいのかを指示してよい。実施形態によっては、比較は相当に関するものであってよく、各比較マスクビットは、比較されたデータ要素同士が等しいことを示すべく第１の２進値を有するか（例えば、１つの可能な規則に従って２進値の１に設定される）、または比較されたデータ要素同士が等しくないことを示すべく第２の２進値を有してよい（例えば、２進値のゼロにクリアされる）。他の実施形態では、他の比較（例えば、超過、未満、等）が任意選択的に用いられてよい。
【００５１】
実施形態によっては、パックデータ結果は、第１ソースパックデータの全データ要素と第２ソースパックデータの全データ要素との比較の結果を指示してよい。他の実施形態では、パックデータ結果は、一方のソースパックデータのデータ要素のサブセットのみと、もう一方のソースパックデータのデータ要素の全て、またはサブセットのみのいずれかとの比較の結果を指示してよい。実施形態によっては、命令は、比較されるサブセットまたはサブセット同士を指定するかまたは別の方法で指示してよい。例えば、実施形態によっては、命令は、第１および／または第２ソースパックデータのサブセットのみに比較を限定して用いるために、例えば汎用レジスタ２０９の暗黙のレジスタ内の、第１サブセット２１８、および任意追加的に、例えば汎用レジスタ２０９の暗黙のレジスタ内の、第２サブセット２１９を任意追加的に明示的に指定するかまたは暗黙的に指示してよい。
【００５２】
説明を不明瞭にすることを回避するために、比較的単純な命令処理装置２００を示し、説明した。他の実施形態では、装置は、プロセッサに含まれる他の周知の構成要素を任意追加的に含んでもよい。このような構成要素の例としては、以下のものに限定されるわけではないが、分岐予測ユニット、命令フェッチユニット、命令およびデータキャッシュ、命令およびデータ・トランスレーション・ルックアサイド・バッファ、プリフェッチバッファ、マイクロ命令キュー、マイクロ命令シーケンサ、レジスタリネーミングユニット、命令スケジューリングユニット、バスインタフェースユニット、第２レベルまたはより高レベルのキャッシュ、リタイアメントユニット、プロセッサ内に含まれるその他の構成要素、ならびにこれらの種々の組み合わせが挙げられる。プロセッサ内の構成要素の組み合わせおよび構成は文字通り数多くの様々なものが存在し、実施形態はいかなる特定の組み合せまたは構成にも限定されない。諸実施形態は、複数のコアを有するプロセッサ、論理プロセッサ、または実行エンジンであって、それらのうち少なくとも１つは、本明細書に開示されている命令の一実施形態を実行するように動作可能な実行論理を有する実行エンジン内に含まれてよい。
【００５３】
図３は、複数データ要素対複数データ要素比較命令の一実施形態を処理する方法３２５の一実施形態のブロックフロー図である。種々の実施形態において、本方法は、汎用、専用プロセッサ、あるいはその他の命令処理装置またはデジタル論理デバイスによって遂行されてよい。実施形態によっては、図３の演算および／または方法は、図１のプロセッサおよび／または図２の装置によって、および／またはその内部で遂行されてよい。本明細書において図１〜２のプロセッサおよび装置に関して記載されている構成要素、特徴、および特定の任意追加的な細部は、図３の演算および／または方法にも必要に応じて適用される。代替的に、図３の演算および／または方法が、同様のまたは完全に異なるプロセッサまたは装置によって、および／またはその内部で遂行されてもよい。さらに、図１のプロセッサおよび／または図２の装置が、図３のものと同じであるか、類似しているか、またはそれとは完全に異なる演算および／または方法を遂行してよい。
【００５４】
本方法は、ブロック３２６において、複数データ要素対複数データ要素比較命令を受信することを含む。種々の態様において、命令は、プロセッサ、命令処理装置、またはそれらの一部（例えば、命令フェッチユニット、デコーダ、命令コンバータ等）において受信されてよい。種々の態様において、命令は、オフダイソースから（例えば、主メモリ、ディスク、もしくは相互接続部から）、またはオンダイソースから（例えば、命令キャッシュから）受信されてよい。複数データ要素対複数データ要素比較命令は、第１の複数のパックデータ要素を有する第１ソースパックデータ、第２の複数のパックデータ要素を有する第２ソースパックデータ、およびデスティネーション記憶位置を指定するかまたは別の方法で指示してよい。
【００５５】
ブロック３２７において、複数データ要素対複数データ要素比較命令に応答して、および／またはその結果として、複数のパック結果データ要素を含むパックデータ結果がデスティネーション記憶位置内に格納されてよい。典型的には、実行ユニット、命令処理装置、あるいは汎用または専用プロセッサが、命令によって指定された演算を遂行し、パックデータ結果を格納してよい。実施形態によってはパック結果データ要素の各々は、第２ソースパックデータのパックデータ要素の別個のものに対応してよい。実施形態によっては、パック結果データ要素の各々は複数ビット比較マスクを含んでよい。実施形態によっては、各複数ビット比較マスクは、パック結果データ要素に対応する第２ソースのパックデータ要素と比較された第１ソースパックデータの各対応パックデータ要素毎に異なるマスクビットを含んでよい。実施形態によっては、各マスクビットは、対応する比較の結果を指示してよい。同じ命令を任意追加的に処理し、および／または同じ装置内で任意追加的に遂行されてよい方法内に、図２に関連して上述した他の任意追加的な細部が任意追加的に含まれてもよい。
【００５６】
図示の方法は、アーキテクチャ的に可視の演算（例えば、ソフトウェアの視点から可視のもの）を伴う。他の実施形態では、本方法は１つ以上のマイクロアーキテクチャ演算を任意追加的に含んでよい。例として、命令がアウトオブオーダでフェッチ、デコード、場合によってはスケジュールされてよく、ソースオペランドがアクセスされてよく、実行論理が、命令を実施するべくマイクロアーキテクチャ演算を遂行するために使用可能にされてよく、実行論理がマイクロアーキテクチャ演算を遂行してよく、結果が任意追加的に元のプログラム順に並べ直されてよい、等である。様々なマイクロアーキテクチャ上の演算遂行方法が企図されている。例えば、実施形態によっては、例えば、図９と関連して説明されるもの等の、比較マスクビットゼロ拡張演算、パック左シフト論理演算、および論理ＯＲ演算が任意追加的に遂行されてよい。他の実施形態では、これらのマイクロアーキテクチャ演算のいずれかが任意追加的に図３の方法に追加されてよい。ただし、本方法はその他の異なるマイクロアーキテクチャ演算によって実装されてもよい。
【００５７】
図４は、好適なパックデータフォーマットのいくつかの実施形態例を示すブロック図である。１２８ビットパックバイトフォーマット４２８は１２８ビット幅であり、図において最下位から最上位ビットポジションまでＢ１〜Ｂ１６と標識されている１６個の８ビット幅バイトデータ要素を含む。２５６ビットパックワードフォーマット４２９は２５６ビット幅であり、図において最下位から最上位ビットポジションまでＷ１〜Ｗ１６と標識されている１６個の１６ビット幅ワードデータ要素を含む。２５６ビットフォーマットはページに収まるように２片に分割されて示されているが、全体のフォーマットは、実施形態によっては、単一の物理レジスタまたは論理レジスタ内に含まれてよい。これらはほんの数例の実例にすぎない。
【００５８】
その他のパックデータフォーマットも好適である。例えば、他の好適な１２８ビットパックデータフォーマットとしては、１２８ビットパック１６ビットワードフォーマットおよび１２８ビットパック３２ビットダブルワードフォーマットがある。他の好適な２５６ビットパックデータフォーマットとしては、２５６ビットパック８ビットバイトフォーマットおよび２５６ビットパック３２ビットダブルワードフォーマットがある。６４ビット幅パックデータ８ビットバイトフォーマット等の、１２８ビットよりもより小さなパックデータフォーマットも好適である。５１２ビット幅またはそれを超える幅のパック８ビットバイト、１６ビットワード、あるいは３２ビットダブルワードフォーマット等の、２５６ビットよりも大きなパックデータフォーマットも好適である。一般的に、パックデータオペランド内のパックデータ要素の数は、パックデータオペランドのビット単位サイズをパックデータ要素のビット単位サイズで割ったものと等しい。
【００５９】
図５は、複数データ要素対複数データ要素比較命令の一実施形態に応答して遂行されてよい複数データ要素対複数データ要素比較演算５３９の一実施形態を示すブロック図である。命令は、第１セットのＮ個のパックデータ要素５４０−１〜５４０−Ｎを含む第１ソースパックデータ５１３を指定するかまたは別の方法で指示してよく、第２セットのＮ個のパックデータ要素５４１−１〜５４１−Ｎを含む第２ソースパックデータ５１５を指定するかまたは別の方法で指示してよい。図示の例では、第１ソースパックデータ５１３において、１番目の最下位データ要素５４０−１が、値Ａを表すデータを格納し、２番目のデータ要素５４０−２が、値Ｂを表すデータを格納し、３番目のデータ要素５４０−３が、値Ｃを表すデータを格納し、Ｎ番目の最上位データ要素５４０−Ｎが、値Ｂを表すデータを格納している。図示の例では、第２ソースパックデータ５１５において、１番目の最下位データ要素５４１−１が、値Ｂを表すデータを格納し、２番目のデータ要素５４１−２が、値Ａを表すデータを格納し、３番目のデータ要素５４１−３が、値Ｂを表すデータを格納し、Ｎ番目の最上位データ要素５４１−Ｎが、値Ａを表すデータを格納している。
【００６０】
数Ｎは、ソースパックデータのビット単位サイズをパックデータ要素のビット単位サイズで割ったものと等しくてよい。通例、数Ｎは、多くの場合、約４から約６４のオーダ、またはさらにより大きな数に及ぶ整数であってよい。Ｎの具体例としては、以下のものに限定されるわけではないが、４、８、１６、３２、および６４がある。種々の実施形態において、ソースパックデータの幅は、６４ビット、１２８ビット、２５６ビット、５１２ビット、またはさらにより大きな幅であってよい。ただし、本発明の範囲はこれらの幅のみに限定されない。種々の実施形態において、パックデータ要素の幅は、８ビットバイト、１６ビットワード、または３２ビットダブルワードであってよい。ただし、本発明の範囲はこれらの幅のみに限定されない。通例、命令がストリングおよび／またはテキスト素片比較に用いられる実施形態では、データ要素の幅は通例、８ビットバイトまたは１６ビットワードのいずれかであってよい。これは、関心のあるほとんどの英数字値は８ビットバイトまたは少なくとも１６ビットワードで表すことができるためである。ただし、所望の場合には、より大きな幅のフォーマット（例えば、３２ビットダブルワードフォーマット）が用いられてもよい（例えば、他の演算との互換性のため、フォーマット変換を回避するため、効率性のため、等）。実施形態によっては、第１および第２ソースパックデータ内のデータ要素は符号付き整数または符号なし整数のいずれかであってよい。
【００６１】
命令に応答して、プロセッサまたはその他の装置がパックデータ結果５１７を生成し、命令によって指定されるかまたは別の方法で指示されたデスティネーション記憶位置５１６内に格納するように動作可能であってよい。実施形態によっては、命令はプロセッサまたはその他の装置に、全データ要素−全データ要素比較マスク５４２を中間結果として生成させてよい。全体−全体比較マスク５４２は、第１ソースパックデータのＮ個のデータ要素の各々／全てと第２ソースパックデータのＮ個のデータ要素の各々／全てとの間で遂行されるＮ×Ｎ比較についてのＮ×Ｎ比較結果を含んでよい。すなわち、全要素対全要素比較が遂行されてよい。
【００６２】
実施形態によっては、マスク内の各比較結果は、相当に関して比較されたデータ要素の比較の結果を指示してよく、各比較結果は、比較されたデータ要素同士が等しいことを示すために第１の２進値（例えば、２進値の１にセットされるかまたは論理的に真とされる）を有するか、あるいは比較されたデータ要素同士が等しくないことを示すために第２の２進値（例えば、２進値のゼロにクリアされるかまたは論理的に偽とされる）を有し得る単一ビットであってよい。その他の規則もあり得る。図示のように、第１ソースパックデータ５１３の１番目のデータ要素５４０−１（「Ａ」の値を表す）と第２ソースパックデータ５１５の１番目のデータ要素５４１−１（「Ｂ」の値を表す）との比較については、これらの値は不等であるので、全体−全体比較マスクの上右隅内に２進値−０が示されている。対照的に、第１ソースパックデータ５１３の１番目のデータ要素５４０−１（「Ａ」の値を表す）と第２ソースパックデータ５１５の２番目のデータ要素５４１−２（「Ａ」の値を表す）との比較については、これらの値は等しいので、全体−全体比較マスク内のそのポジションの１つ左のポジションに２進値−１が示されている。一致値の連続が、全体−全体比較マスク内において、対角方向に沿った２進値−１群として現れており、対角方向のものを丸で囲んだセットによって示されている。全体−全体比較マスクは、一部の実施形態において任意追加的に生成されるマイクロアーキテクチャの態様であるが、他の実施形態においては生成を必要としない。むしろ、デスティネーション内の結果は、中間結果を用いずに生成され、格納されてもよい。
【００６３】
図５を再び参照すると、実施形態によっては、デスティネーション記憶位置５１６内に格納されるパックデータ結果５１７は、Ｎ個のNビット比較マスクからなるセットを含んでよい。例えば、パックデータ結果は、一連のＮ個のパック結果データ要素５４４−１〜５４４−Ｎを含んでよい。実施形態によっては、Ｎ個のパック結果データ要素５４４−１〜５４４−Ｎの各々は、第２ソースパックデータ５１５のＮ個のパックデータ要素５４１−１〜５４１−Ｎのうちの、対応する相対ポジションにおける１つに対応してよい。例えば、１番目のパック結果データ要素５４４−１は第２ソースの１番目のパックデータ要素５４１−１に対応してよく、３番目のパック結果データ要素５４４−３は第２ソースの３番目のパックデータ要素５４１−３に対応してよく、以下同様である。実施形態によっては、Ｎ個のパック結果データ要素５４４の各々はＮビット比較マスクを有してよい。実施形態によっては、各Ｎビット比較マスクは、第２ソースパックデータ５１５の対応パックデータ要素５４１に対応し、それについての比較結果を指示してよい。実施形態によっては、各Ｎビット比較マスクは、第２ソースパックデータ５１５の関連／対応パックデータ要素と比較される、（命令が、サブセットが比較されるべきであることを指示しているかどうかなど、命令に応じた）第１ソースパックデータ５１３のＮ個の異なる対応パックデータ要素の各々毎に、異なる比較マスクビットを含んでよい
【００６４】
実施形態によっては、各比較マスクビットは対応する比較の結果を指示してよい（例えば、比較された値同士が等しければ２進値−１とされ、またはそれらが等しくなければ２進値−０とされる）。例えば、Ｎビット比較マスクのビットｋは、第１ソースパックデータのｋ番目のデータ要素と、そのＮビット比較マスク全体が対応する第２ソースパックデータのデータ要素との比較についての比較結果を表してよい。少なくとも概念的に、各マスクビットは、全体−全体比較マスク５４２の単一の列の一連のマスクビットを表してよい。例えば、１番目の結果パックデータ要素５４４−１は、値（右から左へ）「０，１，０，・・・１」を含み、この値は、第２ソース５１５の（Ｎビットマスクが対応する）１番目のデータ要素５４１−１内の値「Ｂ」は、第１ソースの１番目のデータ要素５４０−１内の値「Ａ」とは等しくなく、第１ソースの２番目のデータ要素５４０−２内の値「Ｂ」とは等しく、第１ソースの３番目のデータ要素５４０−３内の値「Ｃ」とは等しくなく、第１ソースのＮ番目のデータ要素５４０−Ｎ内の値「Ｂ」とは等しいことを指示してよい。実施形態によっては、各マスクは、第２ソースパックデータの対応するデータ要素との一致がいくつあるのか、それらの一致は第１ソースパックデータ内のどのポジションで生じているのかを示す。
【００６５】
図６は、命令の一実施形態に応答して、１６ビットワード要素を有する１２８ビット幅パックソースに対して遂行されてよい比較演算６３９の一実施形態例を示すブロック図である。命令は、第１セットの８つのパック１６ビットワードデータ要素６４０−１〜６４０−８を含む第１ソース１２８ビット幅パックデータ６１３を指定するかまたは別の方法で指示してよく、第２セットの８つのパック１６ビットワードデータ要素６４１−１〜６４１−８を含む第２ソース１２８ビット幅パックデータ６１５を指定するかまたは別の方法で指示してよい。
【００６６】
実施形態によっては、命令は、第１ソースパックデータのデータ要素のうちのいくつ（例えば、サブセット）が比較されるのかを示すための任意追加の第３ソース６４７（例えば、暗黙の汎用レジスタ）、および／または第２ソースパックデータのデータ要素のうちのいくつ（例えば、サブセット）が比較されるのかを示すための任意追加の第４ソース６４８（例えば、暗黙の汎用レジスタ）を任意追加的に指定するかまたは別の方法で指示してよい。代替的に、この情報を提供するために、命令の１つ以上の即値が用いられてもよい。図示の例では、第３ソース６４７は、第１ソースパックデータの８つのデータ要素のうちの最下位の５つのみが比較されることを規定し、第４ソース６４８は、第２ソースパックデータの８つのデータ要素全てが比較されることを規定している。ただし、これは単なる１つの実例にすぎない。
【００６７】
命令に応答して、プロセッサまたはその他の装置が、パックデータ結果６１７を生成し、命令によって指定されるかまたはその他の方法で指示されたデスティネーション記憶位置６１６内に格納するように動作可能であってよい。第３ソース６４７および／または第４ソース６４８によって１つ以上のサブセットが指示される一部の実施形態では、命令は、プロセッサまたはその他の装置に全有効データ要素−全有効データ要素比較マスク６４２を中間結果として生成させてよい。全有効−全有効比較マスク６４２は、第３および第４ソース内の値に応じて遂行される比較のサブセットについての比較結果を含んでよい。この特定例では、４０個の比較結果（すなわち、８×５）が生成される。実施形態によっては、比較が遂行されない比較マスクのビット（例えば、第１ソースの最上位の３つのデータ要素のためのもの）は所定の値に強制設定されてよく、例えば図において「Ｆ０」によって示されているように２進値−０に強制設定されてよい。
【００６８】
実施形態によっては、デスティネーション記憶位置６１６内に格納されるパックデータ結果６１７は一連の８つの８ビット比較マスクを含んでよい。例えば、パックデータ結果は一連の８つのパック結果データ要素６４４−１〜６４４−Ｎを含んでよい。実施形態によっては、これらの８つのパック結果データ要素６４４の各々は、第２ソースパックデータ６１５の８つのパックデータ要素６４１のうちの、対応する相対ポジション内の１つに対応してよい。実施形態によっては、８つのパック結果データ要素６４４の各々は８ビット比較マスクを有してよい。実施形態によっては、各８ビット比較マスクは第２ソースパックデータ６１５の対応パックデータ要素６４１に対応し、それについての比較結果を指示してよい。実施形態によっては、各８ビット比較マスクは、第２ソースパックデータ６１５の関連／対応パックデータ要素と比較される、（例えば、第３ソース内の値に応じた）第１ソースパックデータ６１３の８つの異なる対応パックデータ要素の各有効なもの毎に、異なる比較マスクビットを含んでよい。８ビットのうちの他のものは強制設定（例えばＦ０）ビットであってよい。上述同様に、少なくとも概念的に、各８ビットマスクはマスク６４２の単一の列の一連のマスクビットを表してよい。
【００６９】
図７は、命令の一実施形態に応答して、８ビットバイト要素を有する１２８ビット幅パックソースに対して遂行されてよい比較演算７３９の一実施形態例を示すブロック図である。命令は、第１セットの１６個のパック８ビットバイトデータ要素７４０−１〜７４０−１６を含む第１ソース１２８ビット幅パックデータ７１３を指定するかまたは別の方法で指示してよく、第２セットの１６個のパック８ビットバイトデータ要素７４１−１〜７４１−１６を含む第２ソース１２８ビット幅パックデータ７１５を指定するかまたは別の方法で指示してよい。
【００７０】
実施形態によっては、命令は、第１ソースパックデータのデータ要素のうちのいくつ（例えば、サブセット）が比較されるのかを示すための任意追加の第３ソース７４７（例えば、暗黙の汎用レジスタ）を任意追加的に指定するかまたは別の方法で指示してよく、および／または命令は、第２ソースパックデータのデータ要素のうちのいくつ（例えば、サブセット）が比較されるのかを示すための任意追加の第４ソース７４８（例えば、暗黙の汎用レジスタ）を任意追加的に指定するかまたは別の方法で指示してよい。図示の例では、第３ソース７４７は、第１ソースパックデータの１６個のデータ要素のうちの最下位の１４個のみが比較されることを規定し、第４ソース７４８は、第２ソースパックデータの１６個のデータ要素のうちの最下位の１５個のみが比較されることを規定している。ただし、これは単なる１つの実例にすぎない。他の実施形態では、最上位または中間範囲が任意選択的に用いられてもよい。これらの値は、番号、ポジション、インデックス、中間範囲など等の、様々な方法で指定されてよい。
【００７１】
命令に応答して、プロセッサまたはその他の装置が、パックデータ結果７１７を生成し、命令によって指定されるかまたはその他の方法で指示されたデスティネーション記憶位置７１６内に格納するように動作可能であってよい。第３ソース７４７および／または第４ソース７４８によって１つ以上のサブセットが指示される一部の実施形態では、命令はプロセッサまたはその他の装置に全有効データ要素−全有効データ要素比較マスク７４２を中間結果として生成させてよい。これは上述のものと同様であってもよく、または異なってもよい。
【００７２】
実施形態によっては、パックデータ結果７１７は一連の１６個の１６ビット比較マスクを含んでよい。例えば、パックデータ結果は一連の１６個のパック結果データ要素７４４−１〜７４４−１６を含んでよい。実施形態によっては、デスティネーション記憶位置は、第１および第２ソースパックデータの各々の２倍の幅がある、２５６ビットレジスタまたはその他の記憶位置を表してよい。実施形態によっては、暗黙のデスティネーションレジスタが用いられてよい。他の実施形態では、デスティネーションレジスタは、例えば、インテルアーキテクチャベクトル拡張（Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ、ＶＥＸ）コード体系を用いて指定されてよい。別の選択物として、２つの１２８ビットレジスタまたはその他の記憶位置が任意追加的に用いられてもよい。実施形態によっては、これらの１６個のパック結果データ要素７４４の各々は、第２ソースパックデータ７１５の１６個のパックデータ要素７４１のうちの、対応する相対ポジション内の１つに対応してよい。実施形態によっては、１６個のパック結果データ要素７４４の各々は１６ビット比較マスクを有してよい。実施形態によっては、各１６ビット比較マスクは第２ソースパックデータ７１５の対応パックデータ要素７４１に対応し、それについての比較結果を指示してよい。実施形態によっては、各１６ビット比較マスクは、（例えば、第４ソース内の値に応じた）第２ソースパックデータ７１５の関連／対応パックデータ要素の各有効なものと比較される、（例えば、第３ソース内の値に応じた）第１ソースパックデータ７１３の１６個の異なる対応パックデータ要素の各有効なもの毎に、異なる比較マスクビットを含んでよい。１６ビットのうちの他のものは強制設定（例えばＦ０）ビットであってよい。
【００７３】
さらに別の実施形態が企図されている。例えば、実施形態によっては、第１ソースパックデータは８つの８ビットパックデータ要素を有してよく、第２ソースパックデータは８つの８ビットパックデータ要素を有してよく、パックデータ結果は８つの８ビットパック結果データ要素を有してよい。さらに別の実施形態では、第１ソースパックデータは３２個の８ビットパックデータ要素を有してよく、第２ソースパックデータは３２個の８ビットパックデータ要素を有してよく、パックデータ結果は３２個の３２ビットパック結果データ要素を有してよい。すなわち、実施形態によっては、各ソースオペランド内に存在するソースデータ要素と同数のマスクがデスティネーション内に存在してよく、各マスクは、各ソースオペランド内に存在するソースデータ要素と同数のビットを有してよい。
【００７４】
一態様では、以下の擬似コードが図７の命令の演算を表してよい。この擬似コードにおいて、ＥＡＸおよびＥＤＸはそれぞれ、第１および第２ソースのサブセットを示すために用いられる暗黙の汎用レジスタである。
Ｂｏｕｎｄ１  ＝  Ｍｉｎ  （１６，  ＥＡＸ）；
Ｂｏｕｎｄ２  ＝  Ｍｉｎ  （１６，  ＥＤＸ）；
Ｆｏｒ  （ｊ  ＝  ０；  ｊ  ＜  １６；  ｊ  ＋＋  ）  ｛
Ｄｅｓｔ  ［２５５：０］  ＜−  ０；
Ｆｏｒ  （ｋ  ＝  ０；  ｋ  ＜  １６；  ｋ  ＋＋）  ｛
Ｉｆ  （ｊ  ＜  Ｂｏｕｎｄ１  ＆＆  ｋ  ＜  Ｂｏｕｎｄ２）  Ｂｉｔｐｌａｎｅ［ｋ］［ｊ］  ＜−  （ｓｒｃ１［ｊ］  ｅｑｕａｌ  ｓｒｃ２［ｋ］）  ？  １  ：  ０；
Ｅｌｓｅ  Ｂｉｔｐｌａｎｅ［ｋ］［ｊ］  ＜−０；
Ｄｅｓｔ［１６＊ｋ＋ｊ：１６＊ｋ］  ＜−  Ｄｅｓｔ［１６＊ｋ＋ｊ：１６＊ｋ］  ｜  （ｂｉｔｐｌａｎｅ［ｋ］［ｊ］＜＜ｊ）；
｝
｝
【００７５】
図８は、命令が、パックデータ結果８１８内に報告するべき比較マスクのサブセットを選択するためにオフセット８５０を指定または示すように動作可能である、命令の一実施形態に応答して、８ビットバイト要素を有する１２８ビット幅パックソースに対して遂行されてよい比較演算８３９の一実施形態例を示すブロック図である。本演算は、図７について示され、説明されているものと同様であり、図７について説明されている任意追加の細部および態様は図８の実施形態に任意追加的に用いられてよい。説明を不明瞭にすることを回避するために、任意追加の類似点は繰り返さず、異なるまたは追加の態様を説明する。
【００７６】
図７におけるように、第１および第２ソースの各々は１２８ビット幅であり、１６個の８ビットバイトデータ要素を各々含む。これらのオペランドの全体対全体比較は２５６ビットの比較ビット（すなわち、１６×１６）を生じさせるであろう。一態様では、これは、本明細書の他の箇所で説明されるように、１６個の１６ビット比較マスクとして整理されてよい。
【００７７】
実施形態によっては、例えば、２５６ビットレジスタまたはその他の記憶位置の代わりに１２８ビットレジスタまたはその他の記憶位置を用いるために、命令は任意追加のオフセット８５０を任意追加的に指定するかまたは別の方法で指示してよい。実施形態によっては、オフセットは、ソースオペランド、または命令の即値によって（例えば、暗黙のレジスタを通じて）、あるいは別の方法で指定されてよい。実施形態によっては、オフセットは、完全な全体対全体比較結果のうちの、結果パックデータ内に報告するべきサブセットまたは部分を選択してよい。実施形態によっては、オフセットは起点を指示してよい。例えば、それは、パックデータ結果内に含めるべき最初の比較マスクを指示してよい。図示の実施形態例に示されているように、オフセットは、最初の２つの比較マスクは飛ばし、結果内に報告しないことを指定するために、２の値を指示してよい。図示のように、この２のオフセットに基づき、パックデータ結果８１８は、１６個のあり得る１６ビット比較マスクのうちの３番目の７４４−３から１０番目の７４４−１０を格納してよい。実施形態によっては、３番目の１６ビット比較マスク７４４−３は第２ソースの３番目のパックデータ要素７４１−３に対応してよく、１０番目の１６ビット比較マスク７４４−１０は第２ソースの１０番目のパックデータ要素７４１−１０に対応してよい。実施形態によっては、デスティネーションは暗黙のレジスタである。ただし、これは必須ではない。
【００７８】
図９は、諸実施形態を実装するために任意追加的に用いられてよいマイクロアーキテクチャアプローチの一実施形態を示すブロック図である。実行論理９１０の一部が示されている。実行論理は全有効−全有効要素比較論理９６０を含む。全有効−全有効要素比較論理は、全ての有効要素を全ての他の有効要素と比較するように動作可能である。これらの比較は、並列に、順次に、あるいは一部は並列および一部は順次に行われてよい。これらの比較の各々は、例えば、パック比較命令において遂行される比較に用いられるものと同様の、実質的に従来の比較論理を用いて行われてよい。全有効−全有効要素比較論理は全有効−全有効比較マスク９４２を生成してよい。例として、マスク９４２のその部分は図６のマスク６４２の２つの右端の列を表してよい。全有効−全有効要素比較論理は全有効−全有効比較マスク生成論理の一実施形態を表してもよい。
【００７９】
実行論理は、比較論理９６０と結合されるマスクビットゼロ拡張論理９６２も含む。マスクビットゼロ拡張論理は、全有効−全有効要素比較マスク９４２の単一ビット比較結果の各々をゼロ拡張するように動作可能であってよい。図示のように、８ビットマスクを最終的に生成するこの場合には、実施形態によっては、より上位の７ビットの各々の中にゼロが埋められてよい。これで、マスク９４２からの単一ビットマスクビットが最下位ビットを占め、より上位のビットは全てゼロとなる。
【００８０】
実行論理は、マスクビットゼロ拡張論理９６２と結合される左シフト論理マスクビット整列論理９６４も含む。左シフト論理マスクビット整列論理は、ゼロ拡張されたマスクビットを左に論理シフトさせるように動作可能であってよい。図示のように、実施形態によっては、ゼロ拡張されたマスクビットは、整列の達成を助けるために、異なるシフト量、左に論理シフトされてよい。特に、第１行は７ビット左に論理シフトされてよく、第２行は６ビット、第３行は５ビット、第４行は４ビット、第５行は３ビット、以下同様である。シフトされた要素は、シフトアウトされた全ビットの分、最下位側でゼロ拡張されてよい。これは、結果マスクのためのマスクビットの整列の達成を助ける。
【００８１】
実行論理は、左シフト論理マスクビット整列論理９６４と結合される列ＯＲ論理９６６も含む。列ＯＲ論理は、整列論理９６４からの、左に論理シフトされ、整列された要素の列の論理和をとるように動作可能であってよい。この列ＯＲ演算は、列内の異なる行の各々からの単一マスクのビットの全てを、この場合では８ビットマスクである単一の結果データ要素内の、それらの現在の整列ポジション内に結合してよい。この演算は、元の比較マスク９４２の列内のセットになったマスクビットを、異なる比較結果マスクデータ要素内に効果的に「転置する」。
【００８２】
これは好適なマイクロアーキテクチャの単なる１つの実例にすぎないことを理解されたい。他の実施形態は、同様のデータ処理または再配列を達成するために他の演算を用いてもよい。例えば、行列転置型の演算が任意選択的に遂行されてもよく、またはビットが、意図された位置に単に送られてもよい。
【００８３】
本明細書に開示されている命令は汎用比較命令である。当業者は、これらの命令の、様々な目的／アルゴリズムのための種々の利用法を考案するであろう。実施形態によっては、本明細書に開示されている命令は、２つのテキストパターンのサブパターン関係の特定の迅速化を助けるために用いられてよい。
【００８４】
有利には、本明細書に開示されている命令の諸実施形態は、少なくとも場合によっては、当技術分野において周知の他の命令よりもサブパターン検出のために比較的有用となり得る。さらに詳しく説明するために、一実施例について考えることが役に立ち得る。以上において図６に関して示され、説明された実施形態について考える。この実施形態では、このデータの場合、（１）ポジション１における長さ３の１つのプリフィックス一致、（２）ポジション５における長さ３の１つの中間辞一致、（３）ポジション７における長さ１の１つのプリフィックス一致、および（４）長さ１の追加の非プリフィックス一致がある。もし、同じデータがＳＳＥ４．２命令ＰＣＭＰＥＳＴＲＭによって処理されるならば、検出される一致はもっと少なくなるであろう。例えば、ＰＣＭＰＥＳＴＲＭは、ポジション７における長さ１の１つのプリフィックス一致を検出するのみであり得る。ＰＣＭＰＥＳＴＭが（１）のサブパターンを検出することができるようになるには、ｓｒｃ２が１だけシフトされ、レジスタ内にリロードされ、新たなＰＣＭＥＳＴＲＭ命令を実行することが必要となり得る。ＰＣＭＰＥＳＴＭが（２）のサブパターンを検出することができるようになるには、ｓｒｃ１が１バイトシフトされ、リロードされ、新たなＰＣＭＥＳＴＲＭ命令が実行されることが必要となり得る。より一般的には、ｍバイトであるｎｅｅｄｌｅ、およびｎバイトであるレジスタ内のｈａｙｓｔａｃｋ、ただし、ｍ＜ｎ、の場合には、ＰＣＭＰＥＳＴＲＭは、（１）ポジション０〜ｎ−ｍ−１におけるｍバイト一致、（２）ポジションｎ−ｍ〜ｎ−１において、それぞれｍ−１．．１の長さのサブプリフィックス一致のみを検出し得る。対照的に、本明細書において示され、説明されている種々の実施形態は、より多くの、および実施形態によっては、全てのあり得る組み合わせを検出することができる。その結果、本明細書に開示されている命令の諸実施形態は、当技術分野において周知の種々の異なるパターンおよび／またはサブパターン検出アルゴリズムの速度および効率を高める助けとなり得る。実施形態によっては、本明細書に開示されている命令は、分子および／または生物学的配列を比較するために用いられてよい。このような配列の例としては、以下のものに限定されるわけではないが、ＤＮＡ配列、ＲＮＡ配列、タンパク質配列、アミノ酸配列、ヌクレオチド配列、および同様のものが挙げられる。タンパク質、ＤＮＡ、ＲＮＡ、およびその他のこうしたシークエンシングは一般的に、大量の計算を要するタスクになる傾向がある。このような配列は多くの場合、アミノ酸またはヌクレオチドの標的または参照ＤＮＡ／ＲＮＡ／タンパク質配列／断片／キーワードに対して遺伝子配列データベースまたはライブラリを探索することを伴う。データベース内の何百万個もの既知の配列に対する遺伝子断片／キーワードの整列は通常、入力パターンと保存された配列との空間的関係を発見することから開始する。所与のサイズの入力パターンは典型的にはアルファベットのサブパターンの一群として扱われる。アルファベットのサブパターンは「ｎｅｅｄｌｅ」を表してよい。これらのアルファベットは、本明細書に開示されている命令の第１ソースパックデータ内に含まれてよい。データベース／ライブラリの各部分は、第２ソースパックデータオペランド内の命令の各インスタンス内に含まれてよい。
【００８５】
ライブラリまたはデータベースは、ｈａｙｓｔａｃｋ内でｎｅｅｄｌｅを捜し出そうと試みるアルゴリズムの一部として探索されている「ｈａｙｓｔａｃｋ」を表してよい。命令の各インスタンスは、ｎｅｅｄｌｅを発見しようとｈａｙｓｔａｃｋ全体が探索されるまで、同じｎｅｅｄｌｅ、およびｈａｙｓｔａｃｋの各部分を用いてよい。各保存配列に対する入力の一致および非一致サブパターンに基づいて、所与の空間的整列関係の整列得点が評価される。配列整列ツールが比較の結果を、ＤＮＡ／ＲＮＡおよびその他のアミノ酸配列の膨大な群の間の機能、構造および進化を評価する一部として用いてよい。一態様では、整列ツールは、ほんの数個のアルファベットのサブパターンを根幹として整列得点を評価してよい。二重入れ子ループは、バイト粒度等の特定の粒度における２次元探索空間を網羅し得る。有利には、本明細書に開示されている命令は、このような探索／シークエンシングを大幅に迅速化する助けとなり得る。例えば、図７の命令と同様の命令は入れ子ループ構造を１６×１６のオーダで縮小する助けとなり得、図８の命令と同様の命令は入れ子ループ構造を１６×８のオーダで縮小する助けとなり得ると目下考えられている。
【００８６】
本明細書に開示されている命令は、演算コードすなわちオペコードを含む命令フォーマットを有してよい。オペコードは、遂行されるべき命令および／または演算を特定するように動作可能である複数のビットまたは１つ以上のフィールドを表してよい。命令フォーマットは１つ以上のソース指定子、およびデスティネーション指定子を含んでもよい。例として、これらの指定子の各々は、レジスタ、メモリ位置、またはその他の記憶位置のアドレスを指定するためのビットまたは１つ以上のフィールドを含んでよい。他の実施形態では、明示的指定子の代わりに、ソースまたはデスティネーションは代わりに命令に対して暗黙的であってよい。他の実施形態では、ソースレジスタまたはその他のソース記憶位置内で指定される情報は、代わりに命令の即値を通じて指定されてよい。
【００８７】
図１０は、パックデータレジスタ１００８の好適なセットの一実施形態例のブロック図である。図示のパックデータレジスタは３２個の５１２ビットパックデータまたはベクトルレジスタを含む。これらの３２個の５１２ビットレジスタはＺＭＭ０〜ＺＭＭ３１と標識されている。図示の実施形態では、これらのレジスタの下位１６個、すなわちＺＭＭ０〜ＺＭＭ１５、の下位順の２５６ビットは、ＹＭＭ０〜ＹＭＭ１５と標識されたそれぞれの２５６ビットパックデータまたはベクトルレジスタにエイリアスされるかまたは重ね合わせられる。ただし、これは必須ではない。同様に、図示の実施形態では、ＹＭＭ０〜ＹＭＭ１５の下位順の１２８ビットは、ＸＭＭ０〜ＸＭＭ１と標識されたそれぞれの１２８ビットパックデータまたはベクトルレジスタにエイリアスされるかまたは重ね合わせられる。ただし、これも必須ではない。５１２ビットレジスタＺＭＭ０〜ＺＭＭ３１は、５１２ビットパックデータ、２５６ビットパックデータ、または１２８ビットパックデータを保持するように動作可能である。２５６ビットレジスタＹＭＭ０〜ＹＭＭ１５は、２５６ビットパックデータ、または１２８ビットパックデータを保持するように動作可能である。１２８ビットレジスタＸＭＭ０〜ＸＭＭ１は、１２８ビットパックデータを保持するように動作可能である。レジスタの各々は、パック浮動小数点データまたはパック整数データのいずれかを格納するために用いられてよい。８ビットバイトデータ、１６ビットワードデータ、３２ビットダブルワードまたは単精度浮動小数点データ、ならびに６４ビットクワッドワードまたは倍精度浮動小数点データを少なくとも含む各種のデータ要素サイズがサポートされる。パックデータレジスタの代替実施形態は、異なる数のレジスタ、異なるサイズのレジスタを含んでよく、より大きなレジスタをより小さなレジスタにエイリアスしてもよく、またはエイリアスしなくてもよい。
【００８８】
命令セットは１つ以上の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、遂行される演算（オペコード）、およびその演算が遂行される対象のオペランド（単数または複数）を指定するための種々のフィールド（ビットの数、ビットの位置）を定義する。一部の命令フォーマットは、命令テンプレート（またはサブフォーマット）の定義を通じてさらに分解される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの種々のサブセットを有するように定義され（含まれるフィールドは通常、同じ順序であるが、含まれるフィールドが少なくなっているため、少なくとも一部は異なるビットポジションを有する）、および／または異なって解釈される所与のフィールドを有するように定義されてよい。それゆえ、ＩＳＡの各命令は、所与の命令フォーマットを用いて（および、定義されている場合には、その命令フォーマットの命令テンプレートのうちの所与のもので）表現され、演算およびオペランドを指定するためのフィールドを含む。例えば、例示的なＡＤＤ命令は、特定のオペコードと、そのオペコードを指定するためのオペコードフィールド、ならびにオペランド（ソース１／デスティネーションおよびソース２）を選択するためのオペランドフィールドを含む命令フォーマットとを有し、命令ストリーム内にこのＡＤＤ命令が出現すると、オペランドフィールド内に、特定のオペランドを選択する特定の内容を有することになる。高度ベクトル拡張（Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ、ＡＶＸ）（ＡＶＸ１およびＡＶＸ２）と呼ばれ、ベクトル拡張（ＶＥＸ）コード体系を用いるＳＩＭＤ拡張のセットが発売および／または公開されている（例えば、インテル（登録商標）６４およびＩＡ−３２アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル（Ｉｎｔｅｌ（Ｒ）  ６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒｓ  Ｍａｎｕａｌ）、２０１１年１０月参照、およびインテル（登録商標）高度ベクトル拡張プログラミング・レファレンス（Ｉｎｔｅｌ（Ｒ）  Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ）、２０１１年６月参照）。
【００８９】
例示的な命令フォーマット  本明細書に記載されている命令（単数または複数）の諸実施形態は各種のフォーマットで具体化されてよい。追加的に、例示的なシステム、アーキテクチャ、およびパイプラインを以下に詳述する。命令（単数または複数）の諸実施形態はこのようなシステム、アーキテクチャ、およびパイプライン上で実行されてよい。ただし、詳述されているものに限定されるわけではない。
【００９０】
ＶＥＸ命令フォーマット  ＶＥＸエンコーディングは、命令が、２つを超えるオペランドを有することを可能にし、ＳＩＭＤベクトルレジスタが１２８ビットよりも長くなることを可能にする。ＶＥＸプリフィックスの利用は３オペランド（またはそれより多数）構文を提供する。例えば、以前の２オペランド命令は、ソースオペランドを上書きする、Ａ＝Ａ＋Ｂ等の演算を遂行した。ＶＥＸプリフィックスの利用は、オペランドがＡ＝Ｂ＋Ｃ等の非破壊的演算を遂行することを可能にする。
【００９１】
図１１Ａは、ＶＥＸプリフィックス１１０２、実オペコードフィールド１１３０、Ｍｏｄ  Ｒ／Ｍバイト１１４０、ＳＩＢバイト１１５０、変位フィールド１１６２、およびＩＭＭ８  １１７２を含む例示的なＡＶＸ命令フォーマットを示す。図１１Ｂは、図１１Ａからのどのフィールドが完全オペコードフィールド１１７４および基本演算フィールド１１４２を構成するのかを示す。図１１Ｃは、図１１Ａからのどのフィールドがレジスタインデックスフィールド１１４４を構成するのかを示す。
【００９２】
ＶＥＸプリフィックス（バイト０〜２）１１０２は３バイト形式でエンコードされる。１番目のバイトはフォーマットフィールド１１４０（ＶＥＸバイト０、ビット［７：０］）であり、このフィールドは明示的Ｃ４バイト値（Ｃ４命令フォーマットを識別するために用いられる固有値）を包含する。２〜３番目のバイト（ＶＥＸバイト１〜２）は、特定の機能を提供する多数のビットフィールドを含む。具体的には、ＲＥＸフィールド１１０５（ＶＥＸバイト１、ビット［７〜５］）が、ＶＥＸ．Ｒビットフィールド（ＶＥＸバイト１、ビット［７］−Ｒ）、ＶＥＸ．Ｘビットフィールド（ＶＥＸバイト１、ビット［６］−Ｘ）、およびＶＥＸ．Ｂビットフィールド（ＶＥＸバイト１、ビット［５］−Ｂ）からなる。命令のその他のフィールドは、当技術分野において周知の通りのレジスタインデックスの下位の３つのビット（ｒｒｒ、ｘｘｘ、およびｂｂｂ）をエンコードし、そのため、ＶＥＸ．Ｒ、ＶＥＸ．Ｘ、およびＶＥＸ．Ｂを加えることによってＲｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂが形成されてよい。オペコードマップフィールド１１１５（ＶＥＸバイト１、ビット［４：０］−ｍｍｍｍｍ）は、暗黙の先頭オペコードバイトをエンコードするための内容を含む。Ｗフィールド１１６４（ＶＥＸバイト２、ビット［７］−Ｗ）は表記ＶＥＸ．Ｗによって表され、命令によって異なる機能を提供する。ＶＥＸ．ｖｖｖｖ  １１２０（ＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）の役割は以下のものを含んでよい：１）ＶＥＸ．ｖｖｖｖは、反転（１の補数）形式で指定される、第１ソースレジスタオペランドをエンコードし、２つ以上のソースオペランドを有する命令に有効である、２）ＶＥＸ．ｖｖｖｖは、一定のベクトルシフトのために１の補数の形式で指定される、デスティネーションレジスタオペランドをエンコードする、または３）ＶＥＸ．ｖｖｖｖはどのオペランドもエンコードせず、フィールドは確保され、１１１１ｂを包含しなくてはならない。ＶＥＸ．Ｌ  １１６８サイズフィールド（ＶＥＸバイト２、ビット［２］−Ｌ）＝０であれば、それは１２８ビットベクトルを指示し、ＶＥＸ．Ｌ  ＝  １であれば、それは２５６ビットベクトルを示す。プリフィックスエンコーディングフィールド１１２５（ＶＥＸバイト２、ビット［１：０］−ｐｐ）は基本演算フィールドに追加ビットを提供する。
【００９３】
実オペコードフィールド１１３０（バイト３）はオペコードバイトとしても知られる。オペコードの一部はこのフィールド内で指定される。
【００９４】
ＭＯＤ  Ｒ／Ｍフィールド１１４０（バイト４）は、ＭＯＤフィールド１１４２（ビット［７〜６］）、Ｒｅｇフィールド１１４４（ビット［５〜３］）、およびＲ／Ｍフィールド１１４６（ビット［２〜０］）を含む。Ｒｅｇフィールド１１４４の役割は以下のものを含んでよい：デスティネーションレジスタオペランドまたはソースレジスタオペランド（Ｒｒｒｒのｒｒｒ）のいずれかをエンコードする、あるいはオペコード拡張として扱われ、いずれの命令オペランドのエンコードにも用いられない。Ｒ／Ｍフィールド１１４６の役割は以下のものを含んでよい：メモリアドレスを参照する命令オペランドをエンコードする、あるいはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードする。
【００９５】
スケール、インデックス、ベース（Ｓｃａｌｅ、Ｉｎｄｅｘ、Ｂａｓｅ、ＳＩＢ）−スケールフィールド１１５０（バイト５）の内容は、メモリアドレス生成に用いられるＳＳ  １１５２（ビット［７〜６］）を含む。ＳＩＢ．ｘｘｘ  １１５４（ビット［５〜３］）およびＳＩＢ．ｂｂｂ  １１５６（ビット［２〜０］）の内容は、レジスタインデックスＸｘｘｘおよびＢｂｂｂに関して先に言及された。
【００９６】
変位フィールド１１６２および即値フィールド（ＩＭＭ８）１１７２はアドレスデータを包含する。
【００９７】
汎用ベクトル対応命令フォーマット  ベクトル対応命令フォーマットとは、ベクトル命令に適した命令フォーマットである（例えば、ベクトル演算に特化した特定のフィールドが存在する）。ベクトル対応命令フォーマットを通じてベクトルおよびスカラ演算の両方がサポートされる実施形態が記載されているが、代替実施形態はベクトル対応命令フォーマットのベクトル演算のみを用いる。
【００９８】
図１２Ａ〜１２Ｂは、本発明の諸実施形態に係る汎用ベクトル対応命令フォーマットおよびその命令テンプレートを示すブロック図である。図１２Ａは、本発明の諸実施形態に係る汎用ベクトル対応命令フォーマットおよびそのクラスＡ命令テンプレートを示すブロック図であり、一方、図１２Ｂは、本発明の諸実施形態に係る汎用ベクトル対応命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。具体的には、クラスＡおよびクラスＢ命令テンプレートが定義される汎用ベクトル対応命令フォーマット１２００はどちらも非メモリアクセス１２０５命令テンプレートおよびメモリアクセス１２２０命令テンプレートを含む。ベクトル対応命令フォーマットの文脈における用語、汎用は、いかなる特定の命令セットにも束縛されない命令フォーマットを指す。
【００９９】
ベクトル対応命令フォーマットが以下のものをサポートする本発明の諸実施形態が記載されている：３２ビット（４バイト）または６４ビット（８バイト）データ要素幅（またはサイズ）を有する６４バイトベクトルオペランド長（またはサイズ）（およびそれゆえ、６４バイトベクトルが、１６個のダブルワードサイズ要素、または代替的に、８個のクワッドワードサイズ要素のいずれかからなる）、１６ビット（２バイト）または８ビット（１バイト）データ要素幅（またはサイズ）を有する６４バイトベクトルオペランド長（またはサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）データ要素幅（またはサイズ）を有する３２バイトベクトルオペランド長（またはサイズ）、ならびに３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）データ要素幅（またはサイズ）を有する１６バイトベクトルオペランド長（またはサイズ）。しかし、代替実施形態は、より大きな、より小さな、または異なるデータ要素幅（例えば、１２８ビット（１６バイト）データ要素幅）を有する、より大きな、より小さな、および／または異なるベクトルオペランドサイズ（例えば、２５６バイトベクトルオペランド）をサポートしてもよい。
【０１００】
図１２ＡにおけるクラスＡ命令テンプレートは以下のものを含む：１）非メモリアクセス１２０５命令テンプレート内には、非メモリアクセス、完全丸め制御型演算１２１０命令テンプレート、および非メモリアクセス、データ変形型演算１２１５命令テンプレートが示され、２）メモリアクセス１２２０命令テンプレート内には、メモリアクセス、一時性１２２５命令テンプレート、およびメモリアクセス、非一時性１２３０命令テンプレートが示されている。図１２ＢにおけるクラスＢ命令テンプレートは以下のものを含む：１）非メモリアクセス１２０５命令テンプレート内には、非メモリアクセス、書き込みマスク制御、部分丸め制御型演算１２１２命令テンプレート、および非メモリアクセス、書き込みマスク制御、ｖｓｉｚｅ型演算１２１７命令テンプレートが示され；２）メモリアクセス１２２０命令テンプレート内には、メモリアクセス、書き込みマスク制御１２２７命令テンプレートが示されている。
【０１０１】
汎用ベクトル対応命令フォーマット１２００は、図１２Ａ〜１２Ｂに示されている順に以下に列挙する以下のフィールドを含む。
【０１０２】
フォーマットフィールド１２４０−このフィールド内の特定値（命令フォーマット識別子の値）はベクトル対応命令フォーマットを一意に特定し、それゆえ、命令ストリーム内におけるベクトル対応命令フォーマットの命令の出現を特定する。そのため、このフィールドは、汎用ベクトル対応命令フォーマットのみを有する命令セットには必要ないという意味で、任意追加的なものである。
【０１０３】
基本演算フィールド１２４２−その内容は各種の基本演算を識別する。
【０１０４】
レジスタインデックスフィールド１２４４−その内容は、ソースおよびデスティネーションオペランドがレジスタ内またはメモリ内にある場合には、ソースおよびデスティネーションオペランドの位置を、直接またはアドレス生成を通じて、指定する。これらは、Ｐ×Ｑ（例えば３２×５１２、１６×１２８、３２×１０２４、６４×１０２４）レジスタファイルからＮ個のレジスタを選択するために十分な数のビットを含む。一実施形態では、Ｎが最大で３つのソースおよび１つのデスティネーションレジスタとなり得るが、代替実施形態はより多数またはより少数のソースおよびデスティネーションレジスタをサポートしてもよい（例えば、最大で２つのソースをサポートしてもよい、ただし、これらのソースのうちの１つはデスティネーションの役割も果たす、最大で３つのソースをサポートしてもよい、ただし、これらのソースのうちの１つ方はデスティネーションの役割も果たす、および最大で２つのソースおよび１つのデスティネーションをサポートしてもよい）。
【０１０５】
修飾子フィールド１２４６−その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマットの命令の出現を、メモリアクセスを指定しないものと識別する。すなわち、非メモリアクセス１２０５命令テンプレートとメモリアクセス１２２０命令テンプレートとを識別する。メモリアクセス演算はメモリ階層に対して読み込みおよび／または書き込みを行い（場合によっては、レジスタ内の値を用いてソースおよび／またはデスティネーションアドレスを指定する）、一方、非メモリアクセス演算はそれを行わない（例えば、ソースおよびデスティネーションはレジスタである）。一実施形態では、このフィールドは、メモリアドレス計算を遂行するための３つの異なる方法の間の選択も行うが、代替実施形態は、メモリアドレス計算を遂行するためのより多数の、より少数の、または異なる方法をサポートしてもよい。
【０１０６】
拡大演算フィールド１２５０−その内容は、基本演算に加えて様々な演算のうちのどれが遂行されるべきであるのかを識別する。このフィールドは文脈依存性である。本発明の一実施形態では、このフィールドは、クラスフィールド１２６８、アルファフィールド１２５２、およびベータフィールド１２５４に分割される。拡大演算フィールド１２５０は、共通グループの演算が、２つ、３つ、または４つの命令ではなく、単一の命令内で遂行されることを可能にする。
【０１０７】
スケール（ｓｃａｌｅ）フィールド１２６０−その内容は、メモリアドレス生成のための（例えば、２ｓｃａｌｅ  ＊  インデックス  ＋  基底、を用いるアドレス生成のための）インデックスフィールドの内容のスケーリングを可能にする。
【０１０８】
変位フィールド１２６２Ａ−その内容は、メモリアドレス生成の一部として（例えば、２ｓｃａｌｅ  ＊インデックス  ＋  基底  ＋  変位、を用いるアドレス生成のために）用いられる。
【０１０９】
変位係数フィールド１２６２Ｂ（変位フィールド１２６２Ａが変位係数フィールド１２６２Ｂの真上に並置されているのは、一方または他方が用いられること指示していることに留意されたい）−その内容は、アドレス生成の一部として（例えば、２ｓｃａｌｅ  ＊  インデックス  ＋  基底  ＋  スケーリングされた変位、を用いるアドレス生成のために）用いられる。それは、メモリアクセスのサイズ（Ｎ）−ここで、Ｎはメモリアクセス内のバイト数である−によってスケーリングされる変位係数を指定する。冗長な下位ビットは無視され、したがって、実効アドレスを計算する際に用いられるべき最終変位を生成するために、変位係数フィールドの内容にはメモリオペランド合計サイズ（Ｎ）が乗算される。Ｎの値は、プロセッサハードウェアによって実行時に完全オペコードフィールド１２７４（本明細書において後述）およびデータ操作フィールド１２５４Ｃに基づいて求められる。変位フィールド１２６２Ａおよび変位係数フィールド１２６２Ｂは、それらは非メモリアクセス１２０５命令テンプレートには用いられず、および／または別の実施形態は２つのうちの１つのみを実装するかどちらも実装しない場合があるという意味において、任意追加的なものである。
【０１１０】
データ要素幅フィールド１２６４−その内容は、多数のデータ要素幅のうちのいずれが用いられるべきであるのかを識別する（一部の実施形態では全ての命令のため、他の実施形態では命令の一部のみのため）。このフィールドは、１つのデータ要素幅のみがサポートされ、かつ／またはデータ要素幅はオペコードの何らかの態様を用いてサポートされている場合には、それは必要ないという意味において、任意追加的なものである。
【０１１１】
書き込みマスクフィールド１２７０−その内容は、データ要素ポジション毎に、デスティネーションベクトルオペランド内のそのデータ要素ポジションは基本演算および拡大演算の結果を反映するのかどうかを制御する。クラスＡ命令テンプレートはマージ書き込みマスキングをサポートし、一方、クラスＢ命令テンプレートはマージおよびゼロ化書き込みマスキングの両方をサポートする。マージの際、ベクトルマスクは、デスティネーション内の要素の任意のセットが、（基本演算および拡大演算によって指定された）いかなる演算の実行中にも更新されないように保護されることを可能にし、別の一実施形態では、対応するマスクビットが０を有する場合には、デスティネーションの各要素の古い値を保存する。対照的に、ゼロ化ベクトルマスクは、デスティネーション内の要素の任意のセットが、（基本演算および拡大演算によって指定された）あらゆる演算の実行中にゼロ化されることを可能にし、一実施形態では、対応するマスクビットが０の値を有する場合には、デスティネーションの要素が０にセットされる。この機能性のサブセットは、遂行される演算のベクトル長（すなわち、変更される要素の、最初から最後のものまでのスパン）を制御する機能である。ただし、変更される要素が連続している必要はない。それゆえ、書き込みマスクフィールド１２７０は、ロード、格納、算術、論理等を含む、部分ベクトル演算を可能にする。書き込みマスクフィールド１２７０の内容が、多数の書き込みマスクレジスタのうちの、用いられるべき書き込みマスクを包含する１つを選択する（およびそれゆえ、書き込みマスクフィールド１２７０の内容が、遂行されるべきそのマスキングを間接的に特定する）本発明の実施形態が記載されているが、代替実施形態は、その代わりにまたはそれに加えて、書き込みマスクフィールド１２７０の内容が、遂行されるべきマスキングを直接指定することを可能にする。
【０１１２】
即値フィールド１２７２−その内容は即値の指定を可能にする。このフィールドは、即値をサポートしない汎用ベクトル対応フォーマットの実装時にはそれは存在しない、および即値を用いない命令内にはそれは存在しないという意味において、任意追加的なものである。
【０１１３】
クラスフィールド１２６８−その内容は異なるクラスの命令の間の識別をする。図１２Ａ〜１２Ｂを参照すると、このフィールドの内容はクラスＡおよびクラスＢ命令の間の選択を行う。図１２Ａ〜１２Ｂでは、フィールド内に特定値が存在することを示すために、角の丸いマス目が用いられている（例えば、図１２Ａ〜１２Ｂにおいて、それぞれ、クラスフィールド１２６８のためのクラスＡ  １２６８ＡおよびクラスＢ  １２６８Ｂ）。
【０１１４】
クラスＡの命令テンプレート  クラスＡの非メモリアクセス１２０５命令テンプレートの場合には、アルファフィールド１２５２はＲＳフィールド１２５２Ａとして解釈される。ＲＳフィールド１２５２Ａの内容は、各種の拡大演算型のいずれのものが遂行されるべきであるのかを識別する（例えば、丸め１２５２Ａ．１およびデータ変形１２５２Ａ．２が、非メモリアクセス、丸め型演算１２１０、および非メモリアクセス、データ変形型演算１２１５命令テンプレートのためにそれぞれ指定されている）。一方、ベータフィールド１２５４は、指定された型の演算のいずれが遂行されるべきであるのかを識別する。非メモリアクセス１２０５命令テンプレート内には、スケールフィールド１２６０、変位フィールド１２６２Ａ、および変位スケールフィールド１２６２Ｂは存在しない。
【０１１５】
非メモリアクセス命令テンプレート−完全丸め制御型演算
【０１１６】
非メモリアクセス完全丸め制御型演算１２１０命令テンプレートでは、ベータフィールド１２５４は丸め制御フィールド１２５４Ａとして解釈される。丸め制御フィールド１２５４Ａの内容（単数または複数）は静的丸めを提供する。記載されている本発明の実施形態では、丸め制御フィールド１２５４Ａは、全浮動小数点例外抑制（ｓｕｐｐｒｅｓｓ  ａｌｌ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ  ｅｘｃｅｐｔｉｏｎｓ、ＳＡＥ）フィールド１２５６および丸め演算制御フィールド１２５８を含むが、代替実施形態は、これらのコンセプトを両方ともサポートしてよく、それらを同じフィールド内にエンコードしてよく、あるいはこれらのコンセプト／フィールドの一方または他方のみを有してよい（例えば、丸め演算制御フィールド１２５８のみを有してよい）。
【０１１７】
ＳＡＥフィールド１２５６−その内容は、例外事象報告を無効にするかまたはしないかを識別する。ＳＡＥフィールド１２５６の内容が、抑制が有効であることを示す場合には、所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない。
【０１１８】
丸め演算制御フィールド１２５８−その内容は、一群の丸め演算（例えば、切り上げ、切り捨て、ゼロ方向への丸めおよび最近接数への丸め）のうちいずれのものを遂行するべきなのかを識別する。それゆえ、丸め演算制御フィールド１２５８は命令毎の丸めモードの変更を可能にする。プロセッサが、丸めモードを指定するための制御レジスタを含む本発明の一実施形態では、丸め演算制御フィールド１２５８の内容がそのレジスタ値をオーバライドする。
【０１１９】
非メモリアクセス命令テンプレート−データ変形型演算
【０１２０】
非メモリアクセスデータ変形型演算１２１５命令テンプレートでは、ベータフィールド１２５４はデータ変形フィールド１２５４Ｂとして解釈される。データ変形フィールド１２５４Ｂの内容は、多数のデータ変形のうちのいずれのものが遂行されるべきであるのかを識別する（例えば、データ変形なし、スウィズル（ｓｗｉｚｚｌｅ）、ブロードキャスト）。
【０１２１】
クラスＡのメモリアクセス１２２０命令テンプレートの場合には、アルファフィールド１２５２はエビクションヒントフィールド１２５２Ｂとして解釈される。エビクションヒントフィールド１２５２Ｂの内容は、エビクションヒントのいずれのものが用いられるべきであるのかを識別する（図１２Ａでは、一時性１２５２Ｂ．１および非一時性１２５２Ｂ．２が、メモリアクセス、一時性１２２５命令テンプレートおよび、メモリアクセス、非一時性１２３０命令テンプレートのためにそれぞれ指定されている）。一方、ベータフィールド１２５４はデータ操作フィールド１２５４Ｃとして解釈される。データ操作フィールド１２５４Ｃの内容は、多数のデータ操作演算（基本命令としても知られる）のいずれのものが遂行されるべきであるのかを識別する（例えば、操作なし、ブロードキャスト、ソースの上方変換、および宛先の下方変換）。メモリアクセス１２２０命令テンプレートは、スケールフィールド１２６０、ならびに任意追加的に、変位フィールド１２６２Ａまたは変位スケールフィールド１２６２Ｂを含む。
【０１２２】
ベクトルメモリ命令は、変換支援を受けて、メモリからのベクトルロードおよびそこへのベクトル格納を遂行する。標準ベクトル命令と同様に、ベクトルメモリ命令はデータ要素式の方法でデータをメモリから／へ転送する。実際に転送される要素は、書き込みマスクとして選択されているベクトルマスクの内容によって決定される。
【０１２３】
メモリアクセス命令テンプレート−一時性
【０１２４】
一時性データは、キャッシングの恩恵を受けるのに足るほど早く再使用される可能性が高いデータである。ただし、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含む、異なる方法でそれを実装してもよい。
【０１２５】
メモリアクセス命令テンプレート−非一時性
【０１２６】
非一時性データは、一次キャッシュ内へのキャッシングの恩恵を受けるのに足るほど早く再使用される可能性が低いデータであり、エビクションを優先させなければならない。ただし、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含む、異なる方法でそれを実装してもよい。
【０１２７】
クラスＢの命令テンプレート  クラスＢの命令テンプレートの場合には、アルファフィールド１２５２は書き込みマスク制御（Ｚ）フィールド１２５２Ｃとして解釈される。書き込みマスク制御（Ｚ）フィールド１２５２Ｃの内容は、書き込みマスクフィールド１２７０によって制御される書き込みマスキングはマージであるべきなのかまたはゼロ化であるべきなのかを識別する。
【０１２８】
クラスＢの非メモリアクセス１２０５命令テンプレートの場合には、ベータフィールド１２５４の一部はＲＬフィールド１２５７Ａとして解釈される。ＲＬフィールド１２５７Ａの内容は、各種の拡大演算型のいずれのものが遂行されるべきであるのかを識別する（例えば、丸め１２５７Ａ．１およびベクトル長（ＶＳＩＺＥ）１２５７Ａ．２が、非メモリアクセス、書き込みマスク制御、部分丸め制御型演算１２１２命令テンプレート、および非メモリアクセス、書き込みマスク制御、ＶＳＩＺＥ型演算１２１７命令テンプレートのためにそれぞれ指定されている）。一方、ベータフィールド１２５４の残りのものは、指定された型の演算のいずれが遂行されるべきであるのかを識別する。非メモリアクセス１２０５命令テンプレート内には、スケールフィールド１２６０、変位フィールド１２６２Ａ、および変位スケールフィールド１２６２Ｂは存在しない。
【０１２９】
非メモリアクセス、書き込みマスク制御、部分丸め制御型演算１２１２命令テンプレートでは、ベータフィールド１２５４の残りのものは丸め演算フィールド１２５９Ａとして解釈され、例外事象報告は無効にされる（所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない）。
【０１３０】
丸め演算制御フィールド１２５９Ａ−丸め演算制御フィールド１２５８と全く同じように、その内容は、一群の丸め演算（例えば、切り上げ、切り捨て、ゼロ方向への丸めおよび最近接数への丸め）のうちいずれのものを遂行するべきなのかを識別する。それゆえ、丸め演算制御フィールド１２５９Ａは命令毎の丸めモードの変更を可能にする。プロセッサが、丸めモードを指定するための制御レジスタを含む本発明の一実施形態では、丸め演算制御フィールド１２５８の内容がそのレジスタ値をオーバライドする。
【０１３１】
非メモリアクセス、書き込みマスク制御、ＶＳＩＺＥ型演算１２１７命令テンプレートでは、ベータフィールド１２５４の残りのものはベクトル長フィールド１２５９Ｂとして解釈される。ベクトル長フィールド１２５９Ｂの内容は、多数のデータベクトル長のいずれのもので遂行されるべきであるのかを識別する（例えば、１２８、２５６、または５１２バイト）。
【０１３２】
クラスＢのメモリアクセス１２２０命令テンプレートの場合には、ベータフィールド１２５４の一部はブロードキャストフィールド１２５７Ｂとして解釈される。ブロードキャストフィールド１２５７Ｂの内容は、ブロードキャスト型データ操作演算が遂行されるべきであるのか否かを識別する。一方、ベータフィールド１２５４の残りのものはベクトル長フィールド１２５９Ｂとして解釈される。メモリアクセス１２２０命令テンプレートは、スケールフィールド１２６０、ならびに任意追加的に、変位フィールド１２６２Ａまたは変位スケールフィールド１２６２Ｂを含む。
【０１３３】
汎用ベクトル対応命令フォーマット１２００に関しては、フォーマットフィールド１２４０、基本演算フィールド１２４２、およびデータ要素幅フィールド１２６４を含む完全オペコードフィールド１２７４が示されている。完全オペコードフィールド１２７４がこれらのフィールドの全てを含む一実施形態が示されているが、それらを全てはサポートしていない実施形態では、完全オペコードフィールド１２７４は、これらのフィールドの全てよりも少ないフィールドを含む。完全オペコードフィールド１２７４は演算コード（オペコード）を提供する。
【０１３４】
拡大演算フィールド１２５０、データ要素幅フィールド１２６４、および書き込みマスクフィールド１２７０は、これらの特徴を汎用ベクトル対応命令フォーマットの命令毎に指定することを可能にする。
【０１３５】
書き込みマスクフィールドとデータ要素幅フィールドの組み合わせは、それらは、種々のデータ要素幅に基づいてマスクを適用することを可能にするという点で、型付き命令を作り出す。
【０１３６】
クラスＡおよびクラスＢ内に含まれる種々の命令テンプレートは様々な状況で有益である。本発明の一部の実施形態では、各プロセッサまたはプロセッサ内の各コアによって、サポートされるのはクラスＡのみ、クラスＢ、または両クラスであり得る。例えば、汎用コンピューティング向きの高性能汎用アウトオブオーダコアはクラスＢのみをサポートしてよく、主としてグラフィックスおよび／または科学（スループット）コンピューティング向きのコアはクラスＡのみをサポートしてよく、両者向きのコアは両者をサポートしてよい（無論、両クラスからのテンプレートおよび命令の何らかの混合、ただし両クラスの全てのテンプレートおよび命令ではない、を有するコアは本発明の範囲である）。同様に、単一のプロセッサが、複数のコアであって、それらの全てが、同じクラスをサポートするかまたはコアによって異なるクラスをサポートする、複数のコアを含んでよい。例えば、独立したグラフィックスおよび汎用コアを備えるプロセッサでは、主としてグラフィックスおよび／または科学コンピューティング向きのグラフィックスコアのうちの１つはクラスＡのみをサポートしてよく、一方、汎用コアのうちの１つ以上は、クラスＢのみをサポートする汎用コンピューティング向きのアウトオブオーダ実行およびレジスタリネーミングを備える高性能汎用コアであってよい。独立グラフィックスコアを有しない別のプロセッサは、クラスＡおよびクラスＢを両方サポートするもう１つの汎用インオーダまたはアウトオブオーダコアを含んでよい。無論、本発明の異なる実施形態では、一方のクラスからの特徴が他方のクラス内に実装されてもよい。高レベル言語で書かれたプログラムは、以下のものを含む、様々な実行可能形式に変換されるであろう（例えば、実行時にコンパイルされるかまたは静的にコンパイルされる）：１）実行用ターゲットプロセッサによってサポートされているクラス（単数または複数）の命令のみを有する形式、あるいは２）全クラスの命令の種々の組み合わせを用いて書かれた代替ルーチンを有し、制御フローコードであって、そのコードを現在実行しているプロセッサによってサポートされている命令に基づいて実行するべきルーチンを選択する制御フローコードを有する形式。
【０１３７】
例示的な特定的ベクトル対応命令フォーマット  図１３Ａは、本発明の諸実施形態に係る例示的な特定的ベクトル対応命令フォーマットを示すブロック図である。図１３Ａは特定的ベクトル対応命令フォーマット１３００を示す。特定的ベクトル対応命令フォーマット１３００は、それがフィールドの位置、サイズ、解釈、および順序、ならびにそれらのフィールドの一部の値を指定するという意味において、特定的である。特定的ベクトル対応命令フォーマット１３００は、ｘ８６命令セットを拡張するために用いられてよく、それゆえ、フィールドの一部は、既存のｘ８６命令セットおよびその拡張（例えば、ＡＶＸ）において用いられているものと同様または同じである。このフォーマットは、拡張を備えた既存のｘ８６命令セットのプリフィックスエンコーディングフィールド、実オペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、および即値フィールドと一致したままである。図１３Ａのフィールドが対応する図１２Ａおよび１２Ｂのフィールドが示されている。
【０１３８】
本発明の諸実施形態は、例示の目的のために汎用ベクトル対応命令フォーマット１２００の文脈において特定的ベクトル対応命令フォーマット１３００を参照して説明されているが、本発明は、特に断りのない限り、特定的ベクトル対応命令フォーマット１３００に限定されるわけではないことを理解されたい。例えば、汎用ベクトル対応命令フォーマット１２００は種々のフィールドのために種々の可能なサイズを企図しているが、一方で、特定的ベクトル対応命令フォーマット１３００は特定のサイズのフィールドを有するように示されている。具体例として、特定的ベクトル対応命令フォーマット１３００においてデータ要素幅フィールド１２６４は１ビットフィールドとして示されているが、本発明はそのように限定されるわけではない（すなわち、汎用ベクトル対応命令フォーマット１２００はデータ要素幅フィールド１２６４のその他のサイズを企図している）。
【０１３９】
汎用ベクトル対応命令フォーマット１２００は、図１３Ａに示されている順に以下に列挙する以下のフィールドを含む。
【０１４０】
ＥＶＥＸプリフィックス（バイト０〜３）１３０２−４バイト形式でエンコードされる。
【０１４１】
フォーマットフィールド１２４０（ＥＶＥＸバイト０、ビット［７：０］）−１番目のバイト（ＥＶＥＸバイト０）はフォーマットフィールド１２４０であり、それは０ｘ６２（本発明の一実施形態においてベクトル対応命令フォーマットを識別するために用いられる固有値）を包含する。
【０１４２】
２〜４番目のバイト（ＥＶＥＸバイト１〜３）は、特定の機能を提供する多数のビットフィールドを含む。
【０１４３】
ＲＥＸフィールド１３０５（ＥＶＥＸバイト１、ビット［７〜５］）−ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）、および１２５７ＢＥＸバイト１、ビット［５］−Ｂ）からなる。ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同じ機能性を提供し、１の補数の形式を用いてエンコードされる、すなわちＺＭＭ０は１１１１Ｂとエンコードされ、ＺＭＭ１５は００００Ｂとエンコードされる。命令のその他のフィールドは、当技術分野において周知の通りのレジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、およびｂｂｂ）をエンコードし、そのため、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂを加えることによってＲｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂが形成されてよい。
【０１４４】
ＲＥＸ'フィールド１３１０−これはＲＥＸ'フィールド１３１０の１番目の部分であり、拡張３２レジスタセットの上位１６個または下位１６個のいずれかをエンコードするために用いられるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）である。本発明の一実施形態では、このビットは、以下に指示されている他のものとともに、（周知のｘ８６  ３２ビットモードで、）実オペコードバイトが６２であるＢＯＵＮＤ命令と区別するために、ビット反転フォーマットで格納されるが、ＭＯＤ  Ｒ／Ｍフィールド（後述）内では、ＭＯＤフィールド内に１１の値を受け入れない。本発明の代替実施形態は、これと、以下に指示されているその他のビットとを反転フォーマットで格納しない。下位１６個のレジスタをエンコードするためには１の値が用いられる。換言すると、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、および他のフィールドからの他のＲＲＲを組み合わせることによって、Ｒ'Ｒｒｒｒ  が形成される。
【０１４５】
オペコードマップフィールド１３１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）−その内容は暗黙の先頭オペコードバイト（０Ｆ、０Ｆ  ３８、または０Ｆ  ３）をエンコードする。
【０１４６】
データ要素幅フィールド１２６４（ＥＶＥＸバイト２、ビット［７］-Ｗ）−表記ＥＶＥＸ．Ｗによって表される。ＥＶＥＸ．Ｗは、データ型の粒度（サイズ）を定義するために用いられる（３２ビットデータ要素または６４ビットデータ要素のいずれか）。
【０１４７】
ＥＶＥＸ．ｖｖｖｖ  １３２０（ＥＶＥＸ．バイト２、ビット［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割は以下のものを含んでよい：１）ＥＶＥＸ．ｖｖｖｖは、反転（１の補数）形式で指定される、第１ソースレジスタオペランドをエンコードし、２つ以上のソースオペランドを有する命令に有効である、２）ＥＶＥＸ．ｖｖｖｖは、一定のベクトルシフトのために１の補数の形式で指定される、デスティネーションレジスタオペランドをエンコードする、または３）ＥＶＥＸ．ｖｖｖｖはどのオペランドもエンコードせず、フィールドは確保され、１１１１ｂを包含しなくてはならない。それゆえ、ＥＶＥＸ．ｖｖｖｖフィールド１３２０は、反転（１の補数）形式で格納された第１ソースレジスタ指定子の４つの下位ビットをエンコードする。命令によっては、指定子サイズを３２個のレジスタに拡張するために、追加の異なるＥＶＥＸビットフィールドが用いられる。
【０１４８】
ＥＶＥＸ．Ｕ  １２６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）−ＥＶＥＸ．Ｕ  ＝  ０であれば、それはクラスＡまたはＥＶＥＸ．Ｕ０を指示し、ＥＶＥＸ．Ｕ  ＝  １であれば、それはクラスＢまたはＥＶＥＸ．Ｕ１を示す。
【０１４９】
プリフィックスエンコーディングフィールド１３２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）−基本演算フィールドに追加ビットを提供する。ＥＶＥＸプリフィックスフォーマットのレガシーＳＳＥ命令へのサポートを提供すること加えて、これはＳＩＭＤプリフィックスを短縮する利点も有する（ＳＩＭＤプリフィックスを表現するためにバイトを必要とする代わりに、ＥＶＥＸプリフィックスは２ビットのみを必要とする）。一実施形態では、ＳＩＭＤプリフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を用いるレガシーＳＳＥ命令をレガシーフォーマットおよびＥＶＥＸプリフィックスフォーマットの両方でサポートするために、これらのレガシーＳＩＭＤプリフィックスはＳＩＭＤプリフィックスエンコーディングフィールド内にエンコードされ、デコーダのＰＬＡに提供される前に実行時にレガシーＳＩＭＤプリフィックスに展開される（それにより、ＰＬＡは、変更を行うことなく、これらのレガシー命令のレガシーフォーマットおよびＥＶＥＸフォーマットの両方を実行することができる）。より新しい命令はＥＶＥＸプリフィックスエンコーディングフィールドの内容をオペコード拡張として直接用いることができるであろうが、一部の実施形態は一貫性のために同様の方法で展開し、ただし、異なる意味がこれらのレガシーＳＩＭＤプリフィックスによって指定されることを可能にする。代替実施形態は、２ビットＳＩＭＤプリフィックスエンコーディングをサポートするようにＰＬＡを設計し直してよく、それゆえ、展開を必要としない。
【０１５０】
アルファフィールド１２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ；ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．書き込みマスク制御（ｗｒｉｔｅ  ｍａｓｋ  ｃｏｎｔｒｏｌ）、およびＥＶＥＸ．Ｎとしても知られる；αによっても示されている）−上述のように、このフィールドは文脈依存性である。
【０１５１】
ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、ＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒ１、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られる；βββによっても示されている）−上述のように、このフィールドは文脈依存性である。
【０１５２】
ＲＥＸ'フィールド１３１０−これはＲＥＸ'フィールドの残りであり、拡張３２レジスタセットの上位１６または下位１６個のいずれかをエンコードするために用いられてよいＥＶＥＸ．Ｖ'ビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ'）である。このビットはビット反転フォーマットで格納される。下位１６個のレジスタをエンコードするためには１の値が用いられる。換言すると、ＥＶＥＸ．Ｖ'、ＥＶＥＸ．ｖｖｖｖを組み合わせることによってＶ'ＶＶＶＶが形成される。
【０１５３】
書き込みマスクフィールド１２７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）−その内容は、上述のように、書き込みマスクレジスタ内のレジスタのインデックスを指定する。本発明の一実施形態では、特定値ＥＶＥＸ．ｋｋｋ＝０００は、書き込みマスクを特定の命令のために用いないことを暗に示す特別な動作を有する（これは、ハード的に全て１にセットされる書き込みマスク、またはマスキングハードウェアをバイパスするハードウェアの利用を含む種々の方法で実装され得る）。
【０１５４】
実オペコードフィールド１３３０（バイト４）はオペコードバイトとしても知られる。オペコードの一部はこのフィールド内で指定される。
【０１５５】
ＭＯＤ  Ｒ／Ｍフィールド１３４０（バイト５）は、ＭＯＤフィールド１３４２、Ｒｅｇフィールド１３４４、およびＲ／Ｍフィールド１３４６を含む。上述のように、ＭＯＤフィールド１３４２の内容はメモリアクセス演算と非メモリアクセス演算とを識別する。Ｒｅｇフィールド１３４４の役割は２つの状況にまとめることができる：デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードする、あるいはオペコード拡張として扱われ、いずれの命令オペランドのエンコードにも用いられない。Ｒ／Ｍフィールド１３４６の役割は以下のものを含んでよい：メモリアドレスを参照する命令オペランドをエンコードする、あるいはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードする。
【０１５６】
スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）−上述のように、スケールフィールド１２６０の内容はメモリアドレス生成のために用いられる。ＳＩＢ．ｘｘｘ  １３５４およびＳＩＢ．ｂｂｂ  １３５６−これらのフィールドの内容はレジスタインデックスＸｘｘｘおよびＢｂｂｂに関して先に言及された。
【０１５７】
変位フィールド１２６２Ａ（バイト７〜１０）−ＭＯＤフィールド１３４２が１０を包含するときには、バイト７〜１０は変位フィールド１２６２Ａとなり、それはレガシー３２ビット変位（ｄｉｓｐ３２）と同じように動作し、バイト粒度で動作する。
【０１５８】
変位係数フィールド１２６２Ｂ（バイト７）−ＭＯＤフィールド１３４２が０１を包含するときには、バイト７は変位係数フィールド１２６２Ｂとなる。このフィールドの位置は、バイト粒度で動作する、レガシーｘ８６命令セット８ビット変位（ｄｉｓｐ８）のものと同じである。ｄｉｓｐ８は符号拡張されるので、それは−１２８〜１２７バイトのオフセットしかアドレス指定することができない。６４バイトキャッシュラインに関して言うと、ｄｉｓｐ８は、４つの実際に有用な値、−１２８、−６４、０、および６４、にしかセットすることができない８ビットを用いる。より大きな範囲がしばしば必要となるため、ｄｉｓｐ３２が用いられる。しかし、ｄｉｓｐ３２は４バイトを必要とする。ｄｉｓｐ８およびｄｉｓｐ３２とは対照的に、変位係数フィールド１２６２Ｂはｄｉｓｐ８の再解釈である。変位係数フィールド１２６２Ｂを用いる場合、実際の変位は、変位係数フィールドの内容にメモリオペランドアクセスのサイズ（Ｎ）を乗算することによって求められる。この種の変位はｄｉｓｐ８＊Ｎと呼ばれる。これは平均命令長を縮小する（単一のバイトが変位に用いられるが、より広い範囲を有する）。このような圧縮変位は、有効変位はメモリアクセスの粒度の倍数であり、したがって、アドレスオフセットの冗長な下位ビットはエンコードする必要がないとの仮定に基づいている。換言すると、変位係数フィールド１２６２Ｂがレガシーｘ８６命令セット８ビット変位の代わりとなる。それゆえ、変位係数フィールド１２６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８＊Ｎにオーバロードされることのみを除き、ｘ８６命令セット８ビット変位と同じようにエンコードされる（そのため、ＭｏｄＲＭ／ＳＩＢエンコーディング規則に変更はない）。換言すると、エンコーディング規則またはエンコーディング長に変更はなく、ハードウェアによる変位値の解釈にのみ変更がある（これは、バイト単位のアドレスオフセットを得るためにメモリオペランドのサイズによって変位をスケーリングすることを必要とする）。
【０１５９】
即値フィールド１２７２は上述のように動作する。
【０１６０】
完全オペコードフィールド  図１３Ｂは、本発明の一実施形態に係る完全オペコードフィールド１２７４を構成する特定的ベクトル対応命令フォーマット１３００のフィールドを示すブロック図である。具体的には、完全オペコードフィールド１２７４は、フォーマットフィールド１２４０、基本演算フィールド１２４２、およびデータ要素幅（Ｗ）フィールド１２６４を含む。基本演算フィールド１２４２は、プリフィックスエンコーディングフィールド１３２５、オペコードマップフィールド１３１５、および実オペコードフィールド１３３０を含む。
【０１６１】
レジスタインデックスフィールド  図１３Ｃは、本発明の一実施形態に係るレジスタインデックスフィールド１２４４を構成する特定的ベクトル対応命令フォーマット１３００のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド１２４４は、ＲＥＸフィールド１３０５、ＲＥＸ'フィールド１３１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド１３４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド１３４６、ＶＶＶＶフィールド１３２０、ｘｘｘフィールド１３５４、およびｂｂｂフィールド１３５６を含む。
【０１６２】
拡大演算フィールド  図１３Ｄは、本発明の一実施形態に係る拡大演算フィールド１２５０を構成する特定的ベクトル対応命令フォーマット１３００のフィールドを示すブロック図である。クラス（Ｕ）フィールド１２６８が０を包含するときには、それはＥＶＥＸ．Ｕ０（クラスＡ  １２６８Ａ）を意味し、それが１を包含するときには、それはＥＶＥＸ．Ｕ１（クラスＢ  １２６８Ｂ）を意味する。Ｕ＝０かつＭＯＤフィールド１３４２が１１を包含する（非メモリアクセス演算を意味する）ときには、アルファフィールド１２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）はｒｓフィールド１２５２Ａとして解釈される。ｒｓフィールド１２５２Ａが１（丸め１２５２Ａ．１）を包含するときには、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は丸め制御フィールド１２５４Ａとして解釈される。丸め制御フィールド１２５４Ａは、１ビットＳＡＥフィールド１２５６および２ビット丸め演算フィールド１２５８を含む。ｒｓフィールド１２５２Ａが０（データ変形１２５２Ａ．２）を包含するときには、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は３ビットデータ変形フィールド１２５４Ｂとして解釈される。Ｕ＝０かつＭＯＤフィールド１３４２が００、０１、または１０を包含する（メモリアクセス演算を意味する）ときには、アルファフィールド１２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）はエビクションヒント（ｅｖｉｃｔｉｏｎ  ｈｉｎｔ、ＥＨ）フィールド１２５２Ｂとして解釈され、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は３ビットデータ操作フィールド１２５４Ｃとして解釈される。
【０１６３】
Ｕ＝１のときには、アルファフィールド１２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は書き込みマスク制御（Ｚ）フィールド１２５２Ｃとして解釈される。Ｕ＝１かつＭＯＤフィールド１３４２が１１を包含する（非メモリアクセス演算を意味する）ときには、ベータフィールド１２５４の一部（ＥＶＥＸバイト３、ビット［４］−Ｓ０）はＲＬフィールド１２５７Ａとして解釈され、それが１（丸め１２５７Ａ．１）を包含するときには、ベータフィールド１２５４の残りのもの（ＥＶＥＸバイト３、ビット［６〜５］−Ｓ２−１）は丸め演算フィールド１２５９Ａとして解釈される。一方、ＲＬフィールド１２５７Ａが０（ＶＳＩＺＥ  １２５７．Ａ２）を包含するときには、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６〜５］−Ｓ２−１）の残りのものはベクトル長フィールド１２５９Ｂ（ＥＶＥＸバイト３、ビット［６〜５］−Ｌ１−０）として解釈される。Ｕ＝１かつＭＯＤフィールド１３４２が００、０１、または１０を包含する（メモリアクセス演算を意味する）ときには、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）はベクトル長フィールド１２５９Ｂ（ＥＶＥＸバイト３、ビット［６〜５］−Ｌ１−０）およびブロードキャストフィールド１２５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）として解釈される。
【０１６４】
例示的なレジスタアーキテクチャ  図１４は、本発明の一実施形態に係るレジスタアーキテクチャ１４００のブロック図である。図示の実施形態では、５１２ビット幅である３２個のベクトルレジスタ１４１０があり、これらのレジスタはｚｍｍ０〜ｚｍｍ３１として参照される。下位１６個のｚｍｍレジスタの下位順２５６ビットはレジスタｙｍｍ０〜１６に重ね合わせられる。下位１６個のｚｍｍレジスタの下位順１２８ビット（ｙｍｍレジスタの下位順１２８ビット）はレジスタｘｍｍ０〜１５に重ね合わせられる。以下の表に示されているように、特定的ベクトル対応命令フォーマット１３００は、これらの重ね合わせられたレジスタファイル上で演算を行う。
【表１】
2014179076.tif 000003
【０１６５】
換言すると、ベクトル長フィールド１２５９Ｂは、最大長と、各々直前の長さの半分である１つ以上の他のより短い長さとの間で選択を行い、ベクトル長フィールド１２５９Ｂを備えない命令テンプレートは最大ベクトル長で演算を行う。さらに、一実施形態では、特定的ベクトル対応命令フォーマット１３００のクラスＢ命令テンプレートは、パックまたはスカラ単／倍精度浮動小数点データおよびパックまたはスカラ整数データに対して演算を行う。スカラ演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタ内の最下位データ要素ポジションに対して遂行される演算であり、上位のデータ要素ポジションは実施形態に依存して命令の前の状態と同じままに残されるかまたはゼロ化される。
【０１６６】
書き込みマスクレジスタ１４１５−図示の実施形態では、各々６４ビットのサイズである、８つの書き込みマスクレジスタ（ｋ０〜ｋ７）が存在する。代替実施形態では、書き込みマスクレジスタ１４１５は１６ビットのサイズである。上述のように、本発明の一実施形態では、ベクトルマスクレジスタｋ０は書き込みマスクとして用いることができない。ｋ０を通常示すであろうエンコーディングが書き込みマスクのために用いられる場合には、それは０ｘＦＦＦＦのハードワイヤード書き込みマスクを選択し、その命令のために書き込みマスキングを効果的に無効にする。
【０１６７】
汎用レジスタ１４２５−図示の実施形態では、メモリオペランドをアドレス指定するための既存のｘ８６アドレス指定方式とともに用いられる１６個の６４ビット汎用レジスタが存在する。これらのレジスタは、名前ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、およびＲ８〜Ｒ１５によって参照される。
【０１６８】
ＭＭＸパック整数フラットレジスタファイル１４５０がエイリアスされる、スカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）１４４５−図示の実施形態では、ｘ８７スタックは、ｘ８７命令セット拡張を用いて３２／６４／８０ビット浮動小数点データに対してスカラ浮動小数点演算を遂行するために用いられる８要素スタックである。一方、ＭＭＸレジスタは、６４ビットパック整数データに対して演算を遂行するため、ならびにＭＭＸおよびＸＭＭレジスタの間で遂行される一部の演算用にオペランドを保持するために用いられる。
【０１６９】
本発明の代替実施形態は、より幅の広いまたは狭いレジスタを用いてもよい。加えて、本発明の代替実施形態は、より多数の、より少数の、または異なるレジスタファイルおよびレジスタを用いてもよい。
【０１７０】
例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ  プロセッサコアは、種々の方法で、種々の目的のために、種々のプロセッサ内に実装されてよい。例えば、このようなコアの実装は以下のものを含んでよい：１）汎用コンピューティング向きの汎用インオーダコア、２）汎用コンピューティング向きの高性能汎用アウトオブオーダコア、３）主としてグラフィックスおよび／または科学（スループット）コンピューティング向きの専用コア。種々のプロセッサの実装は以下のものを含んでよい：１）汎用コンピューティング向きの１つ以上の汎用インオーダコアおよび／または汎用コンピューティング向きの１つ以上の汎用アウトオブオーダコアを含むＣＰＵ、ならびに２）主としてグラフィックスおよび／または科学（スループット）向きの１つ以上の専用コアを含むコプロセッサ。こうした種々のプロセッサは、以下のものを含んでよい、種々のコンピュータシステムアーキテクチャをもたらす：１）ＣＰＵから独立したチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内の独立したダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合には、このようなコプロセッサは、時として、統合グラフィックスおよび／または科学（スループット）論理等の、専用論理、あるいは専用コアと呼ばれる）、ならびに４）上述のＣＰＵ（時として、アプリケーションコア（単数または複数）またはアプリケーションプロセッサ（単数または複数）と呼ばれる）、上述のコプロセッサ、および追加の機能性を同じダイ上に含んでよい１チップ上のシステム。次に、例示的なコアアーキテクチャを説明し、その後、例示的なプロセッサおよびコンピュータアーキテクチャを説明する。
【０１７１】
例示的なコアアーキテクチャインオーダおよびアウトオブオーダコアブロック図  図１５Ａは、本発明の諸実施形態に係る例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図１５Ｂは、本発明の諸実施形態に係るプロセッサ内に含まれるべきインオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図１５Ａ〜１５Ｂにおける実線の囲み線はインオーダパイプラインおよびインオーダコアを示し、一方、破線の囲み線の任意の追加はレジスタリネーミング、アウトオブオーダ発行／実行パイプラインおよびコアを示す。インオーダの態様はアウトオブオーダの態様のサブセットであることを考慮し、アウトオブオーダの態様を説明する。
【０１７２】
図１５Ａでは、プロセッサパイプライン１５００が、フェッチステージ１５０２、長さデコードステージ１５０４、デコードステージ１５０６、割り当てステージ１５０８、リネームステージ１５１０、スケジューリング（配付または発行としても知られる）ステージ１５１２、レジスタ読み出し／メモリ読み出しステージ１５１４、実行ステージ１５１６、書き戻し／メモリ書き込みステージ１５１８、例外処理ステージ１５２２、および完遂ステージ１５２４を含む。
【０１７３】
図１５Ｂは、実行エンジンユニット１５５０と結合されるフロントエンドユニット１５３０を含むプロセッサコア１５９０を示し、両者ともメモリユニット１５７０と結合されている。コア１５９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドあるいは代替的なコア形式であってよい。さらに別の選択物として、コア１５９０は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ｇｅｎｅｒａｌ  ｐｕｒｐｏｓｅ  ｃｏｍｐｕｔｉｎｇ  ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ、ＧＰＧＰＵ）コア、グラフィックスコア、あるいは同様のもの等の、専用コアであってよい。
【０１７４】
フロントエンドユニット１５３０は、命令キャッシュユニット１５３４と結合される分岐予測ユニット１５３２を含み、命令キャッシュユニット１５３４は命令トランスレーションルックアサイドバッファ（ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ、ＴＬＢ）１５３６と結合され、命令トランスレーションルックアサイドバッファ１５３６は命令フェッチユニット１５３８と結合され、命令フェッチユニット１５３８はデコードユニット１５４０と結合される。デコードユニット１５４０（またはデコーダ）は命令をデコードし、元の命令からデコードされるか、または別の方法でそれを反映するか、もしくはそれから生成される、１つ以上のマイクロ演算、マイクロコード入口点、マイクロ命令、その他の命令、またはその他の制御信号を出力として生成してよい。デコードユニット１５４０は種々の異なる機構を用いて実装され得る。好適な機構の例としては、以下のものに限定されるわけではないが、ルックアップテーブル、ハードウェア実装、プログラム可能論理アレイ（ＰＬＡ）、マイクロコード・リードオンリーメモリ（ＲＯＭ）等が挙げられる。一実施形態では、コア１５９０は、特定のマクロ命令のためのマイクロコードを格納するマイクロコードＲＯＭまたはその他の媒体を（例えば、デコードユニット１５４０内、または別の方法でフロントエンドユニット１５３０内部に）含む。デコードユニット１５４０は実行エンジンユニット１５５０内のリネーム／アロケータユニット１５５２と結合される。
【０１７５】
実行エンジンユニット１５５０は、リタイアメントユニット１５５４および一連の１つ以上のスケジューラユニット（単数または複数）１５５６と結合されるリネーム／アロケータユニット１５５２を含む。スケジューラユニット（単数または複数）１５５６は、リザベーションステーション、中央命令ウィンドウ等を含む、任意の数の種々のスケジューラを表す。スケジューラユニット（単数または複数）１５５６は物理レジスタファイル（単数または複数）ユニット（単数または複数）１５５８と結合される。物理レジスタファイル（単数または複数）ユニット１５５８の各々は１つ以上の物理レジスタファイルを表す。物理レジスタファイルはそれぞれ、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）など等の、１つ以上の異なるデータ型を格納する。一実施形態では、物理レジスタファイル（単数または複数）ユニット１５５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供してよい。レジスタリネーミングおよびアウトオブオーダ実行が実装され得る種々の方法を示すために（例えば、リオーダバッファ（単数または複数）ならびにリタイアメントレジスタファイル（単数または複数）を用いる方法、将来のファイル（単数または複数）、履歴バッファ（単数または複数）、およびリタイアメントレジスタファイル（単数または複数）を用いる方法、レジスタマップおよびレジスタのプールを用いる方法等）、物理レジスタファイル（単数または複数）ユニット（単数または複数）１５５８はリタイアメントユニット１５５４によってオーバラップされている。リタイアメントユニット１５５４および物理レジスタファイル（単数または複数）ユニット（単数または複数）１５５８は実行クラスタ（単数または複数）１５６０と結合される。実行クラスタ（単数または複数）１５６０は、一連の１つ以上の実行ユニット１５６２および一連の１つ以上のメモリアクセスユニット１５６４を含む。実行ユニット１５６２は種々の演算（例えば、シフト、加算、減算、乗算）を種々の型のデータ（例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して遂行してよい。
一部の実施形態は特定の機能または機能セット専用の多数の実行ユニットを含んでよく、一方、他の実施形態は、全てが全機能を遂行する唯一の実行ユニットまたは複数の実行ユニットを含んでよい。スケジューラユニット（単数または複数）１５５６、物理レジスタファイル（単数または複数）ユニット（単数または複数）１５５８、および実行クラスタ（単数または複数）１５６０は、場合により複数あるように示されている。これは、一部の実施形態は、一部の型のデータ／演算用に独立したパイプラインを作成するためである（例えば、独自のスケジューラユニット、物理レジスタファイル（単数または複数）ユニット、および／または実行クラスタを各々有するスカラ整数パイプライン、スカラ浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプラインである−ならびに、独立したメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット（単数または複数）１５６４を有する特定の実施形態が実装される）。独立パイプラインが用いられる場合、これらのパイプラインのうちの１つ以上はアウトオブオーダ発行／実行であり、残りのものはインオーダであってよいことも理解されたい。
【０１７６】
一連のメモリアクセスユニット１５６４はメモリユニット１５７０と結合される。メモリユニット１５７０は、レベル２（Ｌ２）キャッシュユニット１５７６と結合されるデータキャッシュユニット１５７４と結合されるデータＴＬＢユニット１５７２を含む。１つの例示的な実施形態では、メモリアクセスユニット１５６４は、メモリユニット１５７０内のデータＴＬＢユニット１５７２と各々結合される、ロードユニット、アドレス格納ユニット、およびデータ格納ユニットを含んでよい。命令キャッシュユニット１５３４はメモリユニット１５７０内のレベル２（Ｌ２）キャッシュユニット１５７６とさらに結合される。Ｌ２キャッシュユニット１５７６は１つ以上の他のレベルのキャッシュと結合され、最終的に主メモリと結合される。
【０１７７】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは以下のようにパイプライン１５００を実装し得る：１）命令フェッチ１５３８がフェッチおよび長さデコードステージ１５０２および１５０４を遂行する、２）デコードユニット１５４０がデコードステージ１５０６を遂行する、３）リネーム／アロケータユニット１５５２が割り当てステージ１５０８およびリネームステージ１５１０を遂行する、４）スケジューラユニット（単数または複数）１５５６がスケジュールステージ１５１２を遂行する、５）物理レジスタファイル（単数または複数）ユニット（単数または複数）１５５８およびメモリユニット１５７０がレジスタ読み出し／メモリ読み出しステージ１５１４を遂行し、実行クラスタ１５６０が実行ステージ１５１６を遂行する、６）メモリユニット１５７０および物理レジスタファイル（単数または複数）ユニット（単数または複数）１５５８が書き戻し／メモリ書き込みステージ１５１８を遂行する、７）種々のユニットが例外処理ステージ１５２２に関わり得る、ならびに８）リタイアメントユニット１５５４および物理レジスタファイル（単数または複数）ユニット（単数または複数）１５５８が完遂ステージ１５２４を遂行する。
【０１７８】
コア１５９０は、本明細書に記載されている命令（単数または複数）を含む、１つ以上の命令セット（例えば、ｘ８６命令セット（より新しいバージョンに追加されたいくつかの拡張を含む）、サニーベール（Ｓｕｎｎｙｖａｌｅ）、ＣＡのミップス・テクノロジーズ（ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ）のＭＩＰＳ命令セット、サニーベール、ＣＡのＡＲＭホールディングス（ＡＲＭ  Ｈｏｌｄｉｎｇｓ）のＡＲＭ命令セット（ＮＥＯＮ等の任意追加の拡張を含む））をサポートしてよい。一実施形態では、コア１５９０は、パックデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするための論理を含み、それにより、多くのマルチメディアアプリケーションによって用いられる演算を、パックデータを用いて遂行することを可能にする。
【０１７９】
コアはマルチスレッド（演算またはスレッドの２つ以上の並列セットを実行する）をサポートしてよく、タイムスライスマルチスレッド、同時マルチスレッド（単一の物理コアが、その物理コアが同時にマルチスレッド化しているスレッドの各々のための論理コアを提供する）、あるいはそれらの組み合わせ（例えば、インテル（登録商標）ハイパースレッディング技術におけるもの等のタイムスライスフェッチおよびデコードとその後の同時マルチスレッド）を含む、種々の方法でそれを行ってよいことを理解されたい。
【０１８０】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャにおいて用いられてもよいことを理解されたい。プロセッサの図示の実施形態は、独立した命令およびデータキャッシュユニット１５３４／１５７４および共有Ｌ２キャッシュユニット１５７６も含むが、代替実施形態は、例えば、レベル１（Ｌｅｖｅｌ  １、Ｌ１）内部キャッシュ、または複数のレベルの内部キャッシュ等の、命令およびデータの双方のための単一の内部キャッシュを有してもよい。実施形態によっては、システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代替的に、キャッシュは全てコアおよび／またはプロセッサの外部にあってもよい。
【０１８１】
具体的な例示的インオーダコアアーキテクチャ  図１６Ａ〜１６Ｂは、インオーダコアアーキテクチャであって、このコアはチップ内のいくつかの（同じ種類および／または異なる種類の他のコアを含む）論理ブロックの１つになるであろう、より特定的な例示的インオーダコアアーキテクチャのブロック図を示す。論理ブロックは、用途に応じて、何らかの固定機能論理、メモリＩ／Ｏインタフェース、およびその他の必要なＩ／Ｏ論理を用い、高帯域幅相互接続ネットワーク（例えば、環状ネットワーク）を通じて通信する。
【０１８２】
図１６Ａは、本発明の諸実施形態に係る、シングルプロセッサコアのブロック図であって、その、オンダイ相互接続ネットワーク１６０２への接続、およびその、レベル２（Ｌ２）キャッシュのローカルサブセット１６０４を伴うブロック図である。一実施形態では、命令デコーダ１６００が、パックデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ１６０６が、スカラおよびベクトルユニットに入るキャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態では（設計を単純にするために）、スカラユニット１６０８およびベクトルユニット１６１０が、独立したレジスタセット（それぞれ、スカラレジスタ１６１２およびベクトルレジスタ１６１４）を用い、それらの間で転送されたデータはメモリに書き込まれ、その後、レベル１（Ｌ１）キャッシュ１６０６から読み戻されるが、本発明の代替実施形態は異なるアプローチを用いてもよい（例えば、単一のレジスタセットを用いるか、またはデータを、書き込みおよび読み戻しせずに、２つのレジスタファイルの間で転送することを可能にする通信経路を含む）。
【０１８３】
Ｌ２キャッシュ１６０４のローカルサブセットは、プロセッサコア毎に１つずつ、独立したローカルサブセットに分割された大域的Ｌ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ１６０４のそれ自身のローカルサブセットへの直接アクセス経路を有する。プロセッサコアによって読み込まれたデータはそのＬ２キャッシュサブセット１６０４内に格納され、他のプロセッサコアがそれら自身のローカルＬ２キャッシュサブセットにアクセスするのと並列に、迅速にアクセスすることができる。プロセッサコアによって書き出されたデータは、必要に応じて、それ自身のＬ２キャッシュサブセット１６０４内に格納され、他のサブセットからフラッシュされる。環状ネットワークは共有データのためのコヒーレンシを確実にする。環状ネットワークは双方向性であり、プロセッサコア、Ｌ２キャッシュおよびその他の論理ブロック等のエージェントがチップ内で互いに通信することを可能にする。各環状データ経路は方向毎に１０１２ビット幅である。
【０１８４】
図１６Ｂは、本発明の諸実施形態に係る図１６Ａにおけるプロセッサコアの一部の拡大図である。図１６Ｂは、Ｌ１キャッシュ１６０６のＬ１データキャッシュ１６０６Ａ部分、ならびにベクトルユニット１６１０およびベクトルレジスタ１６１４に関するさらなる詳細を含む。具体的には、ベクトルユニット１６１０は、整数、単精度浮動小数、および倍精度浮動小数命令のうちの１つ以上を実行する、１６幅ベクトル処理ユニット（ｖｅｃｔｏｒ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ、ＶＰＵ）（１６幅ＡＬＵ  １６２８参照）である。ＶＰＵは、スウィズルユニット１６２０によるレジスタ入力のスウィズル、数値変換ユニット１６２２Ａ〜Ｂによる数値変換、および複製ユニット１６２４によるメモリ入力に対する複製をサポートする。書き込みマスクレジスタ１６２６は、結果として生じるベクトル書き込みの叙述を可能にする。
【０１８５】
統合メモリコントローラおよびグラフィックスを備えるプロセッサ  図１７は、本発明の諸実施形態に係る、１つを超えるコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよいプロセッサ１７００のブロック図である。図１７における実線の囲み線は、単一のコア１７０２Ａ、システムエージェント１７１０、一連の１つ以上のバスコントローラユニット１７１６を備えるプロセッサ１７００を示し、一方、破線の囲み線の任意の追加は、複数のコア１７０２Ａ〜Ｎ、システムエージェントユニット１７１０内の一連の１つ以上の統合メモリコントローラユニット（単数または複数）１７１４、および専用論理１７０８を備える代替プロセッサ１７００を示す。
【０１８６】
それゆえ、プロセッサ１７００の種々の実装には以下のものがあり得る：１）専用論理１７０８が統合グラフィックスおよび／または科学（スループット）論理（１つ以上のコアを含んでよい）であり、コア１７０２Ａ〜Ｎが１つ以上の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、その２つの組み合わせ）である、ＣＰＵ、２）コア１７０２Ａ〜Ｎが、主としてグラフィックスおよび／または科学（スループット）向けの多数の専用コアである、コプロセッサ、ならびに３）コア１７０２Ａ〜Ｎが多数の汎用インオーダコアである、コプロセッサ。それゆえ、プロセッサ１７００は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループット・メニー・インテグレーテッド・コア（ｍａｎｙ  ｉｎｔｅｇｒａｔｅｄ  ｃｏｒｅ、ＭＩＣ）コプロセッサ（３０個以上のコアを含む）、組み込みプロセッサ、または同様のもの等の、汎用プロセッサ、コプロセッサまたは専用プロセッサであってよい。プロセッサは１つ以上のチップ上に実装されてよい。プロセッサ１７００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳ等の、多数の製造技術の任意のものを用いた１つ以上の基板の一部であってよく、および／またはその上に実装されてよい。
【０１８７】
メモリ階層は、コア内部の１つ以上のレベルのキャッシュ、一連の１つ以上の共有キャッシュユニット１７０６、および一連の統合メモリコントローラユニット１７１４と結合される外部メモリ（不図示）を含む。一連の共有キャッシュユニット１７０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、またはその他のレベルのキャッシュ等の、１つ以上の中間レベルキャッシュ、ラストレベルキャッシュ（ｌａｓｔ  ｌｅｖｅｌ  ｃａｃｈｅ、ＬＬＣ）、および／またはこれらの組み合わせを含んでよい。一実施形態では、環状ベースの相互接続ユニット１７１２が、統合グラフィックス論理１７０８、一連の共有キャッシュユニット１７０６、およびシステムエージェントユニット１７１０／統合メモリコントローラユニット（単数または複数）１７１４を相互接続するが、代替実施形態は、このようなユニットを相互接続するための周知の技法をいくつ用いてもよい。一実施形態では、１つ以上のキャッシュユニット１７０６とコア１７０２−Ａ〜Ｎとの間においてコヒーレンシが維持される。
【０１８８】
実施形態によっては、コア１７０２Ａ〜Ｎのうちの１つ以上はマルチスレッドの能力を有する。システムエージェント１７１０は、コア１７０２Ａ〜Ｎを調整および操作するそれらの構成要素を含む。システムエージェントユニット１７１０は、例えば、出力調整装置（ｐｏｗｅｒ  ｃｏｎｔｒｏｌ  ｕｎｉｔ、ＰＣＵ）および表示ユニットを含んでよい。ＰＣＵは、コア１７０２Ａ〜Ｎおよび統合グラフィックス論理１７０８の電力状態の調整に必要な論理および構成要素であるか、またはそれらを含んでよい。表示ユニットは、１つ以上の外部接続ディスプレイを駆動するためのものである。
【０１８９】
コア１７０２Ａ〜Ｎはアーキテクチャ命令セットに関して同種または異種であってよい。すなわち、コア１７０２Ａ〜Ｎのうちの２つ以上は同じ命令セットを実行する能力を有してよく、一方、その他のものはその命令セットのサブセットのみまたは異なる命令セットを実行する能力を有してよい。
【０１９０】
例示的なコンピュータアーキテクチャ  図１８〜２１は例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ、ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、および種々のその他の電子デバイス用の当技術分野において周知のその他のシステム設計および構成も好適である。概して、本明細書に開示されている通りのプロセッサおよび／またはその他の実行論理を組み込む能力を有する多様なシステムまたは電子デバイスが一般的に好適である。
【０１９１】
次に図１８を参照すると、図示されているのは、本発明の一実施形態に係るシステム１８００のブロック図である。システム１８００は、コントローラハブ１８２０と結合される、１つ以上のプロセッサ１８１０、１８１５を含んでよい。一実施形態では、コントローラハブ１８２０は、グラフィックスメモリコントローラハブ（ｇｒａｐｈｉｃｓ  ｍｅｍｏｒｙ  ｃｏｎｔｒｏｌｌｅｒ  ｈｕｂ、ＧＭＣＨ）１８９０および入力／出力ハブ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｈｕｂ、ＩＯＨ）１８５０（独立したチップ上にあってよい）を含む。ＧＭＣＨ  １８９０は、メモリ１８４０およびコプロセッサ１８４５が結合されるメモリコントローラおよびグラフィックスコントローラを含む。ＩＯＨ  １８５０が入力／出力（Ｉ／Ｏ）デバイス１８６０をＧＭＣＨ  １８９０に結合する。代替的に、メモリコントローラおよびグラフィックスコントローラの一方または両方は（本明細書に記載されているように）プロセッサ内部に統合され、メモリ１８４０およびコプロセッサ１８４５は、プロセッサ１８１０と、ＩＯＨ  １８５０を備える単一のチップ内のコントローラハブ１８２０とに直接結合される。
【０１９２】
図１８では、追加プロセッサ１８１５の任意追加性が破線で表されている。各プロセッサ１８１０、１８１５は、本明細書に記載されている処理コアのうちの１つ以上を含んでよく、プロセッサ１７００をいくらか変形したものであってよい。
【０１９３】
メモリ１８４０は、例えば、ダイナミック・ランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ｐｈａｓｅ  ｃｈａｎｇｅ  ｍｅｍｏｒｙ、ＰＣＭ）、またはその２つの組み合わせであってよい。少なくとも１つの実施形態のために、コントローラハブ１８２０は、フロントサイドバス（ｆｒｏｎｔｓｉｄｅ  ｂｕｓ、ＦＳＢ）等のマルチドロップバス、クイックパスインターコネクト（ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ、ＱＰＩ）等のポイント・ツー・ポイント・インタフェース、または同様の接続１８９５を介してプロセッサ（単数または複数）１８１０、１８１５と通信する。
【０１９４】
一実施形態では、コプロセッサ１８４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ、あるいは同様のもの等の、専用プロセッサである。一実施形態では、コントローラハブ１８２０は統合グラフィックスアクセラレータを含んでよい。
【０１９５】
物理資源１８１０、１８１５の間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱的特性、電力消費特性、および同様のものを含む様々な利点のメトリクスに関して、種々の相違がある。
【０１９６】
一実施形態では、プロセッサ１８１０は、一般型のデータ処理演算制御する命令を実行する。命令内にはコプロセッサ命令が組み込まれていてよい。プロセッサ１８１０は、これらのコプロセッサ命令を、付加コプロセッサ１８４５によって実行するべきである型のものであると認識する。それに応じて、プロセッサ１８１０は、これらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）をコプロセッサバスまたはその他の相互接続部上においてコプロセッサ１８４５へと発する。コプロセッサ（単数または複数）１８４５は、受信されたコプロセッサ命令を受け付け、実行する。
【０１９７】
次に図１９を参照すると、図示されているのは、本発明の一実施形態に係る第１のより特定的な例示的システム１９００のブロック図である。図１９に示されているように、多重プロセッサシステム１９００はポイント・ツー・ポイント相互接続システムであり、ポイント・ツー・ポイント相互接続１９５０を介して結合される第１プロセッサ１９７０および第２プロセッサ１９８０を含む。プロセッサ１９７０および１９８０の各々はプロセッサ１７００をいくらか変形したものであってよい。本発明の一実施形態では、プロセッサ１９７０および１９８０はそれぞれプロセッサ１８１０および１８１５であり、一方、コプロセッサ１９３８はコプロセッサ１８４５である。別の実施形態では、プロセッサ１９７０および１９８０はそれぞれプロセッサ１８１０およびコプロセッサ１８４５である。
【０１９８】
プロセッサ１９７０および１９８０は、統合メモリコントローラ（ＩＭＣ）ユニット１９７２および１９８２をそれぞれ含んで示されている。プロセッサ１９７０はそのバスコントローラユニットの一部としてポイント・ツー・ポイント（ｐｏｉｎｔ−ｔｏ−ｐｏｉｎｔ、Ｐ−Ｐ）インタフェース１９７６および１９７８も含み、同様に、第２プロセッサ１９８０はＰ−Ｐインタフェース１９８６および１９８８を含む。プロセッサ１９７０、１９８０は、Ｐ−Ｐインタフェース回路１９７８、１９８８を用い、ポイント・ツー・ポイント（Ｐ−Ｐ）インタフェース１９５０を介して情報を交換してよい。図１９に示されるように、ＩＭＣ１９７２および１９８２はプロセッサをそれぞれのメモリ、すなわちメモリ１９３２およびメモリ１９３４、に結合する。それぞれのメモリは、それぞれのプロセッサにローカルに付加された主メモリの一部あってよい。
【０１９９】
プロセッサ１９７０、１９８０は各々、ポイント・ツー・ポイント・インタフェース回路１９７６、１９９４、１９８６、１９９８を用い、個々のＰ−Ｐインタフェース１９５２、１９５４を介してチップセット１９９０と情報を交換してよい。チップセット１９９０は、高性能インタフェース１９３９を介してコプロセッサ１９３８と情報を任意追加的に交換してよい。一実施形態では、コプロセッサ１９３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ、あるいは同様のもの等の、専用プロセッサである。
【０２００】
共有キャッシュ（不図示）がどちらかのプロセッサ内に含まれるか、または両プロセッサの外部に、Ｐ−Ｐ相互接続を介してプロセッサとなお接続されて含まれてよく、それにより、プロセッサが低電力モードに置かれると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納されてよい。
【０２０１】
チップセット１９９０はインタフェース１９９６を介して第１バス１９１６と結合されてよい。一実施形態では、第１バス１９１６は、周辺装置相互接続（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ、ＰＣＩ）バス、あるいはＰＣＩエクスプレスバスまたは別の第３世代Ｉ／Ｏ相互接続バス等のバスであってよい。ただし、本発明の範囲はそのように限定されるわけではない。
【０２０２】
図１９に示されるように、種々のＩ／Ｏデバイス１９１４が、第１バス１９１６を第２バス１９２０に結合するバスブリッジ１９１８とともに、第１バス１９１６に結合されてよい。一実施形態では、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックスアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット等）、フィールド・プログラマブル・ゲート・アレイ、あるいは任意の他のプロセッサ等の、１つ以上の追加プロセッサ（単数または複数）１９１５が第１バス１９１６に結合される。一実施形態では、第２バス１９２０はローピンカウント（ｌｏｗ  ｐｉｎ  ｃｏｕｎｔ、ＬＰＣ）バスであってよい。一実施形態では、例えば、キーボードおよび／またはマウス１９２２、通信デバイス１９２７、ならびに命令／コードおよびデータ１９３０を含んでよいディスクドライブまたはその他の大容量記憶デバイス等の記憶ユニット１９２８を含む、種々のデバイスが第２バス１９２０に結合されてよい。さらに、オーディオＩ／Ｏ１９２４が第２バス１９２０に結合されてよい。その他のアーキテクチャがあり得ることに留意されたい。例えば、図１９のポイント・ツー・ポイント・アーキテクチャの代わりに、システムがマルチドロップバスまたはその他のこうしたアーキテクチャを実装してよい。
【０２０３】
次に図２０を参照すると、図示されているのは、本発明の一実施形態に係る第２のより特定的な例示的システム２０００のブロック図である。図１９および２０における同様の要素は同様の参照番号を有し、図１９の一部の態様は、図２０の他の態様を不明瞭にすることを回避するために、図２０から省かれている。
【０２０４】
図２０は、プロセッサ１９７０、１９８０は統合メモリおよびＩ／Ｏ制御論理（ｃｏｎｔｒｏｌ  ｌｏｇｉｃ、「ＣＬ」）１９７２および１９８２それぞれを含んでよいことを示している。それゆえ、ＣＬ１９７２、１９８２は統合メモリコントローラユニットを含み、Ｉ／Ｏ制御論理を含む。図２０は、メモリ１９３２、１９３４がＣＬ１９７２、１９８２と結合されることだけではなく、Ｉ／Ｏデバイス２０１４が制御論理１９７２、１９８２と結合されることも示している。レガシーＩ／Ｏデバイス２０１５がチップセット１９９０と結合されている。
【０２０５】
次に図２１を参照すると、示されているのは、本発明の一実施形態に係るＳｏＣ  ２１００のブロック図である。図１７における同様の要素は同様の参照番号を有する。さらに、破線の囲み線は、より高度のＳｏＣ上の任意追加の特徴である。図２１では、相互接続ユニット（単数または複数）２１０２が以下のものと結合されている：一連の１つ以上のコア１７０２Ａ〜Ｎ、および共有キャッシュユニット（単数または複数）１７０６を含むアプリケーションプロセッサ２１１０；システムエージェントユニット１７１０；バスコントローラユニット（単数または複数）１７１６；統合メモリコントローラユニット（単数または複数）１７１４；統合グラフィックス論理、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサを含んでよい一連の１つ以上のコプロセッサ２１２０；スタティック・ランダムアクセスメモリ（ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ、ＳＲＡＭ）ユニット２１３０；直接メモリアクセス（ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ、ＤＭＡ）ユニット２１３２；および１つ以上の外部ディスプレイと結合するための表示ユニット２１４０。一実施形態では、コプロセッサ（単数または複数）２１２０は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組み込みプロセッサ、あるいは同様のもの等の、専用プロセッサを含む。
【０２０６】
本明細書に開示されている機構の諸実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはこうした実装アプローチの組み合わせの形で実装されてよい。本発明の実施形態は、少なくとも１つのプロセッサ、記憶システム（揮発性および不揮発性メモリおよび／または記憶要素を含む）、少なくとも１つの入力デバイス、ならびに少なくとも１つの出力デバイスを含むプログラム可能システム上で実行するコンピュータプログラムまたはプログラムコードとして実装されてよい。
【０２０７】
本明細書に記載されている機能を遂行し、出力情報を生成するための命令を入力するために、図１９に示されているコード１９３０等のプログラムコードが適用されてよい。出力情報は既知の方法で１つ以上の出力デバイスに適用されてよい。この適用の目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ａｐｐｌｉｃａｔｉｏｎ  ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ、ＡＳＩＣ）、またはマイクロプロセッサ等の、プロセッサを有する任意のシステムを含む。
【０２０８】
プログラムコードは、処理システムと通信するために、高レベル手続き形またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、所望の場合には、アセンブリまたは機械言語で実装されてもよい。実際には、本明細書に記載されている機構はいかなる特定のプログラミング言語にも範囲を限定されない。いずれにせよ、言語はコンパイラ型またはインタプリタ型言語であってよい。
【０２０９】
少なくとも１つの実施形態の１つ以上の態様は、機械によって読み込まれると、本明細書に記載されている技法を遂行するための論理を機械に作らせる、プロセッサ内の種々の論理を代表する機械可読媒体上に格納された代表命令によって実装されてよい。「ＩＰコア」としても知られるこのような代表は、有形の機械可読媒体上に格納され、論理またはプロセッサを実際に作る製作機械内にロードするために種々の顧客または製造工場に供給されてよい。
【０２１０】
このような機械可読記憶媒体としては、限定されるわけではないが、ハードディスク；フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク・リードオンリーメモリ（ｃｏｍｐａｃｔ  ｄｉｓｋ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｉｅｓ、ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ｃｏｍｐａｃｔ  ｄｉｓｋ  ｒｅｗｒｉｔａｂｌｅ、ＣＤ−ＲＷ）、および磁気光ディスクを含む任意の他の種類のディスク；リードオンリーメモリ（ＲＯＭ）、ダイナミック・ランダムアクセスメモリ（ＤＲＡＭ）、スタティック・ランダムアクセスメモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラム可能リードオンリーメモリ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｉｅｓ、ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラム可能リードオンリーメモリ（ｅｌｅｃｔｒｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｉｅｓ、ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）等の半導体デバイス；磁気または光カード；あるいは電子命令の格納に適した任意の他の種類の媒体を含む記憶媒体等の、機械またはデバイスによって製造または形成される非一時的な有形の物品の機構が挙げられる。
【０２１１】
したがって、本発明の諸実施形態は、本明細書に記載されている構造、回路、装置、プロセッサおよび／またはシステムの特徴を定義する、ハードウェア記述言語（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ、ＨＤＬ）等の、命令を包含するかまたは設計データを包含する非一時的な有形の機械可読媒体も含む。このような実施形態はプログラム製品と呼ばれてもよい。
【０２１２】
エミュレーション（バイナリトランスレーション、コードモーフィング等を含む）  場合によっては、命令をソース命令セットからターゲット命令セットに変換するために、命令コンバータが用いられてよい。例えば、命令コンバータは、命令を、コアによって処理されるべき１つ以上の他の命令に変換するか（例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて）、モーフィングするか、エミュレートするか、または別の方法で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせの形で実装されてよい。命令コンバータは、プロセッサ上、プロセッサ外、あるいは一部プロセッサ上および一部プロセッサ外にあってよい。
【０２１３】
図２２は、本発明の諸実施形態に係る、ソース命令セット内の２進命令をターゲット命令セット内の２進命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。図示の実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータはソフトウェア、ファームウェア、ハードウェア、あるいはこれらの種々の組み合わせの形で実装されてもよい。図２２は、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ２２１６によってネイティブに実行され得るｘ８６  ２進コード２２０６を生成するために、高レベル言語２２０２のプログラムが、ｘ８６コンパイラ２２０４を用いてコンパイルされてよいことを示している。少なくとも１つのｘ８６命令セットコアを備えるプロセッサ２２１６は、少なくとも１つのｘ８６命令セットコアを備えるインテルプロセッサと実質的に同じ結果を達成するために、（１）インテルｘ８６命令セットコアの命令セットの相当の部分、あるいは（２）少なくとも１つのｘ８６命令セットコアを備えるインテルプロセッサ上で走ることを目的としたアプリケーションまたはその他のソフトウェアの目的コードバージョンを、互換的に実行するかまたは別の方法でを処理することによって、少なくとも１つのｘ８６命令セットコアを備えるインテルプロセッサと実質的に同じ機能を遂行することができる任意のプロセッサを表す。ｘ８６コンパイラ２２０４は、追加の連係処理を用いて、または用いずに、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ２２１６上で実行することができるｘ８６  ２進コード２２０６（例えば、目的コード）を生成するように動作可能であるコンパイラを表す。
同様に、図２２は、少なくとも１つのｘ８６命令セットコアを備えないプロセッサ２２１４（例えば、サニーベール、ＣＡのミップス・テクノロジーズのＭＩＰＳ命令セットを実行し、かつ／またはサニーベール、ＣＡのＡＲＭホールディングスのＡＲＭ命令セットを実行するコアを備えるプロセッサ）によってネイティブに実行され得る代替命令セット２進コード２２１０を生成するために、高レベル言語２２０２のプログラムが、代替の命令セットコンパイラ２２０８を用いてコンパイルされてよいことを示している。命令コンバータ２２１２は、ｘ８６  ２進コード２２０６を、ｘ８６命令セットコアを備えないプロセッサ２２１４によってネイティブに実行され得るコードに変換するために用いられる。この変換されたコードは代替命令セット２進コード２２１０と同じにはなりにくい。なぜなら、この能力を有する命令コンバータは製作が難しいからである。しかし、変換されたコードは一般的な演算を果たし、代替命令セットからの命令で構成されることになる。それゆえ、命令コンバータ２２１２は、エミュレーション、シミュレーションまたは任意の他のプロセスを通じて、ｘ８６命令セットプロセッサまたはコアを有しないプロセッサまたはその他の電子デバイスがｘ８６  ２進コード２２０６を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
【０２１４】
図４〜９のいずれかについて説明されている構成要素、特徴、および細部は、図１〜３のいずれかにおいて任意追加的に用いられてもよい。図４のフォーマットは、本明細書に開示されている命令または実施形態のいずれのものによって用いられてもよい。図１０のレジスタは、本明細書に開示されている命令または実施形態のいずれのものによって用いられてもよい。さらに、本明細書に記載されている、いずれの装置に関する構成要素、特徴、および細部も、諸実施形態においてこうした装置によっておよび／またはそれを用いて遂行され得る、本明細書に記載されているあらゆる方法において同様に任意追加的に用いられ得る。
【０２１５】
実施形態例  以下の例はさらなる実施形態に関連する。各例における特質は１つ以上の実施形態のどこかに用いられ得る。
【０２１６】
例１は命令処理装置である。装置は複数のパックデータレジスタを含む。装置は、パックデータレジスタと結合される実行ユニットであって、この実行ユニットは、第１の複数のパックデータ要素を含む第１ソースパックデータ、第２の複数のパックデータ要素を含む第２ソースパックデータ、およびデスティネーション記憶位置を示す複数要素対複数要素比較命令に応答して、複数のパック結果データ要素を含むパックデータ結果をデスティネーション記憶位置内に格納するように動作可能である、実行ユニットも含む。結果データ要素の各々は第２ソースパックデータのデータ要素の別個のものに対応し、結果データ要素の各々は、結果データ要素に対応する第２ソースパックデータのデータ要素と比較された第１ソースパックデータの各対応するデータ要素毎に異なる比較マスクビットを含む複数ビット比較マスクを含み、各比較マスクビットは、対応する比較の結果を示す。
【０２１７】
例２は例１の主題を含み、任意追加的に、実行ユニットが、命令に応答して、第１ソースパックデータの全データ要素と第２ソースパックデータの全データ要素との比較の結果を示すパックデータ結果を格納する。
【０２１８】
例３は例１の主題を含み、任意追加的に、実行ユニットが、命令に応答して、所与のパック結果データ要素内に、第１ソースパックデータのパックデータ要素のうちのどれが、所与のパック結果データ要素に対応する第２ソースのパックデータ要素と等しいのかを示す複数ビット比較マスクを格納する。
【０２１９】
例４は例１〜３のいずれか１つの主題を含み、任意追加的に、第１ソースパックデータがＮ個のパックデータ要素を有し、第２ソースパックデータがＮ個のパックデータ要素を有し、実行ユニットが、命令に応答して、Ｎ個のＮビットパック結果データ要素を含むパックデータ結果を格納する。
【０２２０】
例５は例４の主題を含み、任意追加的に、第１ソースパックデータが８個の８ビットパックデータ要素を有し、第２ソースパックデータが８個の８ビットパックデータ要素を有し、実行ユニットが、命令に応答して、８個の８ビットパック結果データ要素を含むパックデータ結果を格納する。
【０２２１】
例６は例４の主題を含み、任意追加的に、第１ソースパックデータが１６個の８ビットパックデータ要素を有し、第２ソースパックデータが１６個の８ビットパックデータ要素を有し、実行ユニットが、命令に応答して、１６個の１６ビットパック結果データ要素を含むパックデータ結果を格納する。
【０２２２】
例７は例４の主題を含み、任意追加的に、第１ソースパックデータが３２個の８ビットパックデータ要素を有し、第２ソースパックデータが３２個の８ビットパックデータ要素を有し、実行ユニットが、命令に応答して、３２個の３２ビットパック結果データ要素を含むパックデータ結果を格納する。
【０２２３】
例８は例１〜３のいずれか１つの主題を含み、任意追加的に、第１ソースパックデータがＮ個のパックデータ要素を有し、第２ソースパックデータがＮ個のパックデータ要素を有し、命令がオフセットを指示し、実行ユニットが、命令に応答してＮ／２個のＮビットパック結果データ要素を含むパックデータ結果を格納し、Ｎ／２個のＮビットパック結果データ要素のうちの最下位のものが、オフセットによって指示される第２ソースのパックデータ要素に対応する。
【０２２４】
例９は例１〜３のいずれかの主題を含み、任意追加的に、実行ユニットが、命令に応答して、複数ビット比較マスクを含むパック結果データ要素を格納し、複数ビット比較マスクにおいて、各マスクビットは、第１ソースパックデータの対応パックデータ要素が、パック結果データ要素に対応する第２ソースのパックデータ要素と等しいことを示すための２進値の１の値、および第１ソースパックデータの対応パックデータ要素が、パック結果データ要素に対応する第２ソースのパックデータ要素と等しくないことを示すための２進値の０の値を有する。
【０２２５】
例１０は例１〜３のいずれか１つの主題を含み、任意追加的に、実行ユニットが、命令に応答して、第１および第２ソースパックデータの一方のデータ要素のサブセットのみと第１および第２ソースパックデータのもう一方のデータ要素との比較の結果を示す複数ビット比較マスクを格納する。
【０２２６】
例１１は例１〜３のいずれかの主題を含み、任意追加的に、命令が、比較される第１および第２ソースパックデータの一方のデータ要素のサブセットを示す。
【０２２７】
例１２は例１〜３のいずれかの主題を含み、任意追加的に、命令がデスティネーション記憶位置を暗黙的に示す。
【０２２８】
例１３は命令処理方法である。方法は、複数要素対複数要素比較命令を受信することであって、複数要素対複数要素比較命令は、第１の複数のパックデータ要素を有する第１ソースパックデータ、第２の複数のパックデータ要素を有する第２ソースパックデータ、およびデスティネーション記憶位置を示す、複数要素対複数要素比較命令を受信することを含む。方法は、複数要素対複数要素比較命令に応答して、複数のパック結果データ要素を含むパックデータ結果をデスティネーション記憶位置内に格納することも含む。パック結果データ要素の各々は第２ソースパックデータのパックデータ要素の個別のものに対応し、パック結果データ要素の各々は、比較の結果を示すために、パック結果データ要素に対応する第２ソースのパックデータ要素と比較された、第１ソースパックデータの各対応パックデータ要素毎に異なるマスクビットを含む複数ビット比較マスクを含む。
【０２２９】
例１４は例１３の主題を含み、任意追加的に、格納が、第１ソースパックデータの全データ要素と第２ソースパックデータの全データ要素との比較結果を示すパックデータ結果を格納することを含む。
【０２３０】
例１５は例１３の主題を含み、任意追加的に、受信が、Ｎ個のパックデータ要素を有する第１ソースパックデータ、およびＮ個のパックデータ要素を有する第２ソースパックデータを示す命令を受信することを含み、格納が、Ｎ個のＮビットパック結果データ要素を含むパックデータ結果を格納することを含む。
【０２３１】
例１６は例１５の主題を含み、任意追加的に、受信が、１６個の８ビットパックデータ要素を有する第１ソースパックデータ、および１６個の８ビットパックデータ要素を有する第２ソースパックデータを示す命令を受信することを含み、格納が、１６個の１６ビットパック結果データ要素を含むパックデータ結果を格納することを含む。
【０２３２】
例１７は例１３の主題を含み、任意追加的に、受信が、Ｎ個のパックデータ要素を有する第１ソースパックデータを指示し、Ｎ個のパックデータ要素を有する第２ソースパックデータを指示し、オフセットを示す命令を受信することを含み、格納が、Ｎ／２個のＮビットパック結果データ要素を含むパックデータ結果を格納することを含み、Ｎ／２個のＮビットパック結果データ要素のうちの最下位のものは、オフセットによって指示される第２ソースのパックデータ要素に対応する。
【０２３３】
例１８は例１３のいずれかの主題を含み、任意追加的に、受信が、Ｎ個のパックデータ要素を有する第１ソースパックデータを指示し、Ｎ個のパックデータ要素を有する第２ソースパックデータを指示し、オフセットを示す命令を受信することを含み、格納が、Ｎ／２個のＮビットパック結果データ要素を含むパックデータ結果を格納することを含み、Ｎ／２個のＮビットパック結果データ要素のうちの最下位のものは、オフセットによって指示される第２ソースのパックデータ要素に対応する。
【０２３４】
例１９は例１３のいずれかの主題を含み、任意追加的に、受信が、第１の生物学的配列を表す第１ソースパックデータを指示し、第２の生物学的配列を表す第２ソースパックデータを示す命令を受信することを含む。
【０２３５】
例２０は命令処理システムである。システムは相互接続部を含む。システムは、相互接続部と結合されるプロセッサも含む。システムは、相互接続部と結合されるダイナミック・ランダムアクセスメモリ（ＤＲＡＭ）であって、このＤＲＡＭは複数要素対複数要素比較命令を格納し、この命令は、第１の複数のパックデータ要素を含む第１ソースパックデータ、第２の複数のパックデータ要素を含む第２ソースパックデータ、およびデスティネーション記憶位置を示す、ＤＲＡＭも含む。命令は、プロセッサによって実行されると、プロセッサに、複数のパック結果データ要素を含むパックデータ結果をデスティネーション記憶位置内に格納することであって、パック結果データ要素の各々は第２ソースパックデータのパックデータ要素の別個のものに対応する、格納すること、を含む演算を遂行させるように動作可能である。パック結果データ要素の各々は、第１ソースパックデータの複数のパックデータ要素と、パック結果データ要素に対応する第２ソースのパックデータ要素との比較の結果を示す複数ビット比較マスクを含む。
【０２３６】
例２１は例２０の主題を含み、任意追加的に、命令が、プロセッサによって実行されると、プロセッサに、第１ソースパックデータの全パックデータ要素と第２ソースパックデータの全データ要素との比較の結果を示すパックデータ結果を格納させるように動作可能である。
【０２３７】
例２２は例２０〜２１のいずれかの主題を含み、任意追加的に、命令が、Ｎ個のパックデータ要素を有する第１ソースパックデータ、およびＮ個のパックデータ要素を有する第２ソースパックデータを指示し、命令が、プロセッサによって実行されると、プロセッサに、Ｎ個のＮビットパック結果データ要素を含むパックデータ結果を格納させるように動作可能である。
【０２３８】
例２３は、命令を提供するための物品である。物品は、命令を格納する非一時的機械可読記憶媒体を含む。物品は、命令は、第１の複数のパックデータ要素を有する第１ソースパックデータ、第２の複数のパックデータ要素を有する第２ソースパックデータ、およびデスティネーション記憶位置を指示し、命令は、機械によって実行されると、機械に、複数のパック結果データ要素を含むパックデータ結果をデスティネーション記憶位置内に格納することであって、パック結果データ要素の各々は第２ソースパックデータのパックデータ要素の個別のものに対応し、パック結果データ要素の各々は複数ビット比較マスクを含み、各複数ビット比較マスクは、第１ソースパックデータの複数のパックデータ要素と、複数ビット比較マスクを有するパック結果データ要素に対応する第２ソースのパックデータ要素との比較の結果を示す、格納すること、を含む演算を遂行させるように動作可能であること、も含む。
【０２３９】
例２４は例２３の主題を含み、任意追加的に、命令が、Ｎ個のパックデータ要素を有する第１ソースパックデータ、およびＮ個のパックデータ要素を有する第２ソースパックデータを指示し、命令が、機械によって実行されると、機械に、Ｎ個のＮビットパック結果データ要素を含むパックデータ結果を格納させるように動作可能である。
【０２４０】
例２５は例２３〜２４の主題を含み、任意追加的に、非一時的機械可読記憶媒体が、不揮発性メモリ、ＤＲＡＭ、およびＣＤ−ＲＯＭのうちの１つを含み、命令が、機械によって実行されると、機械に、第１ソースパックデータの全パックデータ要素の中のどれが第２ソースパックデータの全データ要素の中のどれと等しいのかを示すパックデータ結果を格納させるように動作可能である。
【０２４１】
例２６は、例１３〜１９のいずれか１つの方法を遂行するための装置を含む。
【０２４２】
例２７は、例１３〜１９のいずれか１つの方法を遂行する手段を含む装置を含む。
【０２４３】
例２８は、例１３〜１９のいずれか１つの方法を遂行するためのデコード手段および実行手段を含む装置を含む。
【０２４４】
例２９は、機械によって実行されると、機械に、例１３〜１９のいずれか１つの方法を遂行させる命令を格納する機械可読記憶媒体を含む。
【０２４５】
例３０は、実質的に本明細書に記載されている通りの方法を遂行するための装置を含む。
【０２４６】
例３１は、実質的に本明細書に記載されている通りの命令を実行するための装置を含む。
【０２４７】
例３２は、実質的に本明細書に記載されている通りの方法を遂行する手段を含む装置を含む。
【０２４８】
明細書および請求項では、用語「結合される（ｃｏｕｐｌｅｄ）」および／または「接続される（ｃｏｎｎｅｃｔｅｄ）」がそれらの派生語とともに用いられている。これらの用語は互いに同義語として意図されているのではないことを理解されたい。むしろ、特定の実施形態では、「接続される」は、２つ以上の要素が互いに物理的または電気的に直接接触していることを示すために用いられていてよい。「結合される」は、２つ以上の要素が物理的または電気的に接触していることを意味してよい。しかし、「結合される」は、２つ以上の要素が互いに直接接触してはいないが、それでもなお互いに協働または相互作用することを意味する場合もある。例えば、実行ユニットが１つ以上の介在構成要素を通じてレジスタまたはデコーダと結合されてよい。図では、接続および結合を示すために矢印が用いられている。
【０２４９】
明細書および請求項では、用語「論理」が用いられている。本明細書で用いるとき、論理は、ハードウェア、ファームウェア、ソフトウェア、またはこれらの種々の組み合わせを含んでよい。論理の例としては、集積回路機構、特定用途向け集積回路、アナログ回路、デジタル回路、プログラム化論理デバイス、命令を含むメモリデバイス、等が挙げられる。実施形態によっては、ハードウェア論理は、場合によっては他の回路機構構成要素を伴うトランジスタおよび／またはゲートを含んでよい。
【０２５０】
上述の説明では、諸実施形態の完全な理解を提供するために特定の細部が説明された。しかし、他の実施形態は、これらの特定の細部の一部を用いずに実施されてもよい。本発明の範囲は、以上に提供されている具体例によって定まるのではなく、添付の請求項によってのみ定まる。図面に示され、本明細書に記載されているものと同等関係のものは全て実施形態の範囲に含まれる。他の例では、説明の理解を不明瞭にすることを回避するために、周知の回路、構造、デバイス、および演算がブロック図の形式で、または細部を有せずに示されている。複数の構成要素が示され、説明されている一部の例では、それらはまとめて単一の構成要素に統合されてもよい。単一の構成要素が示され、説明されている場合、一部の例では、この単一の構成要素は２つ以上の構成要素に分離されてもよい。
【０２５１】
種々の演算および方法が説明されている。フロー図では、方法の一部は比較的基本的な形で記載されているが、演算が方法に任意に追加されてもよく、および／またはそれらから削除されてもよい。加えて、フロー図は実施形態例に係る演算の特定の順序を示しているが、その特定の順序は例示的なものである。代替実施形態は、必要に応じて、異なる順序で演算を遂行する、一部の演算を組み合わせる、一部の演算を重複させるなどしてよい。
【０２５２】
一部の演算は、ハードウェア構成要素によって遂行され得るか、あるいは機械実行可能または回路実行可能命令であって、演算を遂行する命令をプログラムされた機械、回路、またはハードウェア構成要素（例えば、プロセッサ、プロセッサの一部、回路、等）を生じさせ、および／またはもたらすべく用いられ得る、機械実行可能または回路実行可能命令の形で具体化され得る。演算は任意選択的にハードウェアおよびソフトウェアの組み合わせによって遂行されてもよい。プロセッサ、機械、回路、またはハードウェアが、命令を実行および／または処理し、命令に応答した結果を格納するように動作可能である特定または特別の回路機構あるいはその他の論理（例えば、場合によってはファームウェアおよび／またはソフトウェアと組み合わせられるハードウェア）を含んでもよい。
【０２５３】
一部の実施形態は、機械可読媒体を含む物品（例えば、コンピュータプログラム製品）を含む。媒体は、機械によって読み取り可能である形式で情報を提供する、例えば格納する、機構を含んでよい。機械可読媒体は、機械によって実行されると、および／または実行された時に、本明細書に開示されている１つ以上の演算、方法、または技法を機械に遂行させ、ならびに／あるいはそれらを遂行する機械をもたらすように動作可能である命令または命令列を提供するか、またはそれらをその上に格納させてよい。機械可読媒体は、本明細書に開示されている命令の実施形態のうちの１つ以上を提供してよい、例えば格納してよい。
【０２５４】
実施形態によっては、機械可読媒体は有形かつ／または非一時的機械可読記憶媒体を含んでよい。例えば、有形かつ／または非一時的機械可読記憶媒体としては、フロッピー（登録商標）ディスケット、光記憶媒体、光ディスク、光学式データ記憶デバイス、ＣＤ−ＲＯＭ、磁気ディスク、磁気光ディスク、リードオンリーメモリ（ＲＯＭ）、プログラム可能ＲＯＭ（ＰＲＯＭ）、消去可能プログラム可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラム可能ＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶デバイス、非一時的メモリ、非一時的データ記憶デバイス、または同様のものが挙げられる。非一時的機械可読記憶媒体は一時的な伝播信号からなるものではない。別の実施形態では、機械可読媒体は、一時的機械可読通信媒体、例えば、搬送波、赤外線信号、デジタル信号、または同様のもの等の、電気的、光学的、音響的またはその他の形態の伝播信号、を含んでよい。
【０２５５】
好適な機械の例としては、以下のものに限定されるわけではないが、汎用プロセッサ、専用プロセッサ、命令処理装置、デジタル論理回路、集積回路、および同様のものが挙げられる。好適な機械のさらに別の例としては、このようなプロセッサ、命令処理装置、デジタル論理回路、または集積回路を組み込むコンピューティングデバイスおよびその他の電子デバイスが挙げられる。このようなコンピューティングデバイスおよび電子デバイスの例としては、以下のものに限定されるわけではないが、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス（例えば、ルータおよびスイッチ）、携帯インターネットデバイス（Ｍｏｂｉｌｅ  Ｉｎｔｅｒｎｅｔ  ｄｅｖｉｃｅ、ＭＩＤ）、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、およびビデオゲームコントローラが挙げられる。
【０２５６】
本明細書全体にわたる、例えば、「一実施形態（ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ）」、「一実施形態（ａｎ  ｅｍｂｏｄｉｍｅｎｔ）」、「１つ以上の実施形態（ｏｎｅ  ｏｒ  ｍｏｒｅ  ｅｍｂｏｄｉｍｅｎｔｓ）」、「一部の実施形態（ｓｏｍｅ  ｅｍｂｏｄｉｍｅｎｔｓ）」への言及は、特定の特徴が本発明の実施に含まれ得るが、必ずしも含まれることを必須とされるわけではないことを示す。同様に、本明細書では、開示の合理化および種々の本発明の態様の理解の助けを目的として、種々の特徴が時として単一の実施形態、図、またはその説明内にまとめてグループ化されている。しかし、この開示方法は、本発明は、各請求項において明示的に列挙されているよりも多くの特徴を必要とするという意図を反映するものと解釈してはならない。むしろ、添付の請求項が反映している通り、本発明の態様は、単一の開示実施形態の全ての特徴よりも少ない特徴に存する。それゆえ、発明を実施するための形態に続く請求項は、本明細書において、この発明を実施するための形態に明示的に組み込まれており、各請求項は本発明の独立した実施形態として自立している。
【図１】
2014179076.tif 000004
【図２】
2014179076.tif 000005
【図３】
2014179076.tif 000006
【図４】
2014179076.tif 000007
【図５】
2014179076.tif 000008
【図６】
2014179076.tif 000009
【図７】
2014179076.tif 000010
【図８】
2014179076.tif 000011
【図９】
2014179076.tif 000012
【図１０】
2014179076.tif 000013
【図１１Ａ】
2014179076.tif 000014
【図１１Ｂ】
2014179076.tif 000015
【図１１Ｃ】
2014179076.tif 000016
【図１２Ａ】
2014179076.tif 000017
【図１２Ｂ】
2014179076.tif 000018
【図１３Ａ】
2014179076.tif 000019
【図１３Ｂ】
2014179076.tif 000020
【図１３Ｃ】
2014179076.tif 000021
【図１３Ｄ】
2014179076.tif 000022
【図１４】
2014179076.tif 000023
【図１５Ａ】
2014179076.tif 000024
【図１５Ｂ】
2014179076.tif 000025
【図１６Ａ】
2014179076.tif 000026
【図１６Ｂ】
2014179076.tif 000027
【図１７】
2014179076.tif 000028
【図１８】
2014179076.tif 000029
【図１９】
2014179076.tif 000030
【図２０】
2014179076.tif 000031
【図２１】
2014179076.tif 000032
【図２２】
2014179076.tif 000033
【外国語明細書】
2014179076000001.pdf