(57)【特許請求の範囲】
【請求項１】
複数のパックデータ・レジスタと、
命令をデコードするデコードユニットと、
前記複数のパックデータ・レジスタおよび前記デコードユニットと結合された実行ユニットと
を備え、
前記命令は複数のビットレーンを有する第１のソースオペランドを示し、前記命令は各サブセットが前記複数のビットレーンのうちの異なる１つのビットレーンに対応する複数のサブセットとして配置された複数のサブレーンサイズのビット選択要素を有する第２のソースパックデータ・オペランドを示しており、前記複数のサブレーンサイズのビット選択要素はそれぞれ、前記１つのビットレーンのそれぞれよりビットが少なく、
前記実行ユニットは、前記命令に応じて、前記命令が示すデスティネーション記憶位置に結果オペランドを記憶し、前記結果オペランドは、前記複数のサブレーンサイズのビット選択要素のそれぞれに対応する異なるビットを含み、前記結果オペランドの各ビット値は、前記対応するサブレーンサイズのビット選択要素によって示される、前記対応するサブレーンサイズのビット選択要素を含むサブセットに対応する前記第１のソースオペランドのビットレーンの中のみのビットの値である、プロセッサ。
【請求項２】
前記実行ユニットは、前記命令に応じて、パックデータ・レジスタに前記結果オペランドを記憶する、請求項１に記載のプロセッサ。
【請求項３】
前記実行ユニットは、前記命令に応じて、前記サブレーンサイズのビット選択要素の各サブセットによって選択された前記ビットを、前記パックデータ・レジスタの対応するビットレーンに記憶する、請求項２に記載のプロセッサ。
【請求項４】
前記実行ユニットは、前記命令に応じて、前記サブレーンサイズのビット選択要素の各サブセットによって選択された前記ビットの少なくとも一つの複製を、前記パックデータ・レジスタの対応するビットレーンに記憶する、請求項３に記載のプロセッサ。
【請求項５】
前記デコードユニットは、ソースプレディケートマスクオペランドを示す前記命令をデコードし、前記実行ユニットは、前記命令に応じて、前記ソースプレディケートマスクオペランドを用い、前記サブレーンサイズのビット選択要素の各サブセットによって選択された前記ビットの記憶と、前記パックデータ・レジスタの前記対応するビットレーン内のこれらの複製をプレディケートする、請求項４に記載のプロセッサ。
【請求項６】
各サブレーンサイズのビット選択要素は、同じ相対位置にある前記結果オペランドのビットに対応し、前記第２のソースパックデータ・オペランドは、少なくとも１６のサブレーンサイズのビット選択要素を有している、請求項１に記載のプロセッサ。
【請求項７】
前記実行ユニットは、前記命令に応じて、パックデータ演算マスクレジスタである前記デスティネーション記憶位置に前記結果オペランドを記憶する、請求項１に記載のプロセッサ。
【請求項８】
前記実行ユニットは、前記命令に応じて、汎用レジスタである前記デスティネーション記憶位置に前記結果オペランドを記憶する、請求項１に記載のプロセッサ。
【請求項９】
前記デコードユニットは、前記第１のソースオペランドが複数の６４ビットのビットレーンを有することを示し、前記第２のソースパックデータ・オペランドが複数の少なくとも６ビットサイズのビット選択要素を有していることを示す前記命令をデコードする、請求項１から８のいずれか一項に記載のプロセッサ。
【請求項１０】
少なくとも６ビットのビット選択要素のそれぞれが、前記第２のソースパックデータ・オペランドの異なる対応する８ビットバイトにあり、前記第２のソースパックデータ・オペランドは少なくとも１６のビット選択要素を有している、請求項９に記載のプロセッサ。
【請求項１１】
前記デコードユニットは、前記第２のソースパックデータ・オペランドが、前記第１のソースオペランドの前記複数のビットレーンのそれぞれの中の複数のビットと同じ数の複数のサブレーンサイズのビット選択要素を有することを示す命令をデコードする、請求項１から８のいずれか一項に記載のプロセッサ。
【請求項１２】
プロセッサでの方法であって、
命令を受信する工程であって、前記命令は、第１のソースオペランドが複数のビットレーンを有することを示し、さらに前記命令は、第２のソースパックデータ・オペランドが各サブセットが前記複数のビットレーンのうちの異なる１つのビットレーンに対応する複数のサブセットとして配置された複数のサブレーンサイズのビット選択要素を有することを示し、前記複数のサブレーンサイズのビット選択要素はそれぞれ、前記１つのビットレーンのそれぞれよりビットが少ない、受信する工程と、
前記命令に応じて、前記命令が示すデスティネーション記憶位置に結果オペランドを記憶する工程であって、前記結果オペランドは、前記複数のサブレーンサイズのビット選択要素のそれぞれに対応する異なるビットを含み、前記結果オペランドの各ビット値は、前記対応するサブレーンサイズのビット選択要素によって示される、前記対応するサブレーンサイズのビット選択要素を含むサブセットに対応する前記第１のソースオペランドのビットレーンの中のみのビットの値である、記憶する工程とを備える、方法。
【請求項１３】
前記記憶する工程は、プレディケートマスクレジスタである前記デスティネーション記憶位置に前記結果オペランドを記憶する工程を含み、前記結果オペランドの各ビットは、同じ相対位置のサブレーンサイズのビット選択要素に対応している、請求項１２に記載の方法。
【請求項１４】
前記記憶する工程は、複数のビットレーンを有するパックデータ・レジスタに前記結果オペランドを記憶する工程を含み、前記結果オペランドの１ビットレーンは、前記対応するサブセットによって選択される前記ビットの複数の複製だけでなく、前記サブレーンサイズのビット選択要素の前記対応するサブセットによって選択される前記ビットを含む、請求項１２に記載の方法。
【請求項１５】
前記受信する工程は、前記第１のソースオペランドが複数の６４ビットのビットレーンを有することを示し、前記第２のソースパックデータ・オペランドが、前記複数の６４ビットのビットレーンの異なる一つにそれぞれが対応する複数の組として配置された複数の少なくとも６ビットのビット選択要素を有することを示す前記命令を受信する工程を含む、請求項１２に記載の方法。
【請求項１６】
命令を処理するシステムであって、
相互接続と、
前記相互接続に結合されるプロセッサと、
前記相互接続に結合されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）と
を備え、
前記プロセッサは、複数のビットレーンを有する第１のソースオペランドを示し、各サブセットが前記複数のビットレーンのうちの異なる１つのビットレーンに対応する複数のサブセットとして配置された複数のサブレーンサイズのビット選択要素を有する第２のソースパックデータ・オペランドを示し、前記複数のサブレーンサイズのビット選択要素はそれぞれ、前記１つのビットレーンのそれぞれよりビットが少なく、デスティネーション記憶位置を示す命令を受信し、前記プロセッサは、前記命令に応じて、結果オペランドを前記デスティネーション記憶位置に記憶し、前記結果オペランドは、前記複数のサブレーンサイズのビット選択要素のそれぞれに対応する異なるビットを含み、前記結果オペランドの各ビット値は、前記対応するサブレーンサイズのビット選択要素によって示される、前記対応するサブレーンサイズのビット選択要素を含むサブセットに対応する前記第１のソースオペランドのビットレーンの中のみのビットの値である、システム。
【請求項１７】
請求項１２から１５のいずれか一項に記載の方法を実行する手段を含む装置。
【請求項１８】
前記プロセッサを含む機械によって実行される場合、前記機械に請求項１２から１５のいずれか一項に記載の方法を実行させる命令を記憶する非一時的機械可読媒体を含む製品。
【発明の詳細な説明】
【技術分野】
【０００１】
ここで記載される実施形態は一般にプロセッサに関する。詳しくは、ここで記載される特定の実施形態は一般にプロセッサ内でのビット操作に関する。
【背景技術】
【０００２】
プロセッサは、データ要素を操作する様々な異なる種類の命令を実行する。たとえば加算命令は、第１のレジスタ内の第１の１６ビットデータ要素を、第２のレジスタ内の第２の１６ビットデータ要素に加算し、デスティネーションレジスタ内に１６ビット結果データを記憶するように用いられる場合がある。各データ要素は、たとえばピクセルのカラーコード、多くの項目を表示する整数値などの種類の異なる個別データを表すことができる。
【０００３】
データ要素全体（たとえば、８ビット、１６ビット、３２ビット、または６４ビットのデータ要素など）を演算対象とすることに加え、単一データ要素内の個別ビットを操作することが役に立つことも時々はある。但しデータ要素全体を演算対象とすることに比べて、単一データ要素内で個別ビットを操作すると、プロセッサ内での処理が比較的遅くなり、効率的でなくなる傾向を示すことが多い。一実施例として、単一データ要素内の個別ビット値を取得するアルゴリズムには、各個別ビットに関して、データ要素のすべてのビットをローテートまたはシフトし（たとえば１６ビットすべてのシフト）特定の位置に個別ビットを配置する命令や、ローテート・シフトされたビットと個別ビットを選択するよう構成されたマスクデータ要素とを用いてビット単位の論理演算（たとえば論理ＡＮＤ、論理ＯＲなど）を実行し個別ビットを分離または累計する別の命令が含まれる場合がある。
【０００４】
これはほんの一例であり、アルゴリズムで用いられる特定の方法にかかわらず、個別のビット値それぞれを取得するためには、一般に一つ以上の異なる命令が必要かもしれない。結果として、必要とされる命令の総数は、取得すべきビット値の総数にほぼ比例して増加する一般的な傾向がある。たとえば、３２ビットのデータ要素のすべてのビット値を取得するには、１６ビットのデータ要素のすべてのビット値を取得する際に必要とされるほぼ２倍の数の命令が必要とされる場合がある。加えて、そのアルゴリズムは、取得された個別のビット値それぞれについて、データ要素のすべてのビットを操作し（たとえばすべてのビットをシフトし、すべてのビットに論理演算を実行する）、アルゴリズムは最適に満たない性能を示す傾向もある。
【図面の簡単な説明】
【０００５】
本発明は、以下の記載および、実施形態を示すのに用いられる添付図面を参照することで、最もよく理解することができる。
【０００６】
【図１】ビットシャッフル命令の一実施形態を実行することができるプロセッサの一実施形態を示すブロック図。
【図２】ビットシャッフル命令の実施形態をプロセッサが実行する方法の一実施形態を示すブロックフロー図。
【図３】ビットシャッフル演算の一実施形態を示すブロック図。
【図４】第２のソースパックデータ・オペランド内の８ビットサイズのビット選択要素を用いて第１のソースパックデータ・オペランドの６４ビットレーンのビットをシャッフルし、スカラー結果オペランドを生成するビットシャッフル演算の一実施形態を示すブロック図。
【図５】第２のソースパックデータ・オペランド内の４ビットニブルサイズのビット選択要素を用いて第１のソースパックデータ・オペランドの１６ビットレーンのビットをシャッフルし、スカラー結果オペランドを生成するビットシャッフル演算の一実施形態を示すブロック図。
【図６】ビットシャッフル演算と随意に組み合わされる場合があるデータ要素ブロードキャスト演算の一実施形態を示すブロック図。
【図７】第２のソースパックデータ・オペランド内の８ビットバイトサイズのビット選択要素を用いて第１のソースパックデータ・オペランドの６４ビットレーンのビットをシャッフルし、結果パックデータ・オペランドを生成するビットシャッフル演算の一実施形態を示すブロック図。
【図８】ソースパックデータ演算マスクオペランド内のマスク要素の対象となる第２のソースパックデータ・オペランドの８ビットサイズのビット選択要素を用いて、第１のソースパックデータ・オペランドの６４ビットレーンのビットをシャッフルするマスクされたビットシャッフル演算の一実施形態を示すブロック図。
【図９】ビットシャッフル命令の一実施形態を示すブロック図。
【図１０】パックデータ・レジスタの適切な一組の一実施形態を示すブロック図。
【図１１】パックデータ演算マスクレジスタの適切な一組の実施形態を示すブロック図。
【図１２】パックデータ演算マスクレジスタを示すブロック図であり、マスクビット数は、パックデータおよびデータ要素サイズによって決まりうることを示している。
【図１３Ａ】本発明の実施形態に従う、一般的なベクトルを扱いやすい命令フォーマットおよびその命令テンプレートを示すブロック図。
【図１３Ｂ】本発明の実施形態に従う、一般的なベクトルを扱いやすい命令フォーマットおよびその命令テンプレートを示すブロック図。
【図１３Ｃ】本発明の実施形態に従う、一般的なベクトルを扱いやすい命令フォーマットおよびその命令テンプレートを示すブロック図。
【図１４Ａ】本発明の実施形態に従う、例示的な特定ベクトルを扱いやすい命令フォーマットおよび命令コードフィールドを示すブロック図。
【図１４Ｂ】本発明の実施形態に従う、例示的な特定ベクトルを扱いやすい命令フォーマットおよび命令コードフィールドを示すブロック図。
【図１５Ａ】本発明の実施形態に従う、例示的な特定ベクトルを扱いやすい命令フォーマットおよびそのフィールドを示すブロック図。
【図１５Ｂ】本発明の実施形態に従う、例示的な特定ベクトルを扱いやすい命令フォーマットおよびそのフィールドを示すブロック図。
【図１５Ｃ】本発明の実施形態に従う、例示的な特定ベクトルを扱いやすい命令フォーマットおよびそのフィールドを示すブロック図。
【図１５Ｄ】本発明の一実施形態に従う、例示的な特定ベクトルを扱いやすい命令フォーマットおよびそのフィールドを示すブロック図。
【図１６】レジスタアーキテクチャの一実施形態を示すブロック図。
【図１７Ａ】インオーダーでのパイプラインの一実施形態と、レジスタリネーミング・アウトオブオーダーでの発行／実行パイプラインの一実施形態を示すブロック図。
【図１７Ｂ】実行エンジンユニットと結合されるフロントエンドユニットと、メモリユニットと結合される両方を含むプロセッサコアの一実施形態を示すブロック図。
【図１８Ａ】オンダイの相互接続ネットワークへの接続と、レベル２（Ｌ２）キャッシュのローカルサブセットを備えた単一プロセッサコアの一実施形態を示すブロック図。
【図１８Ｂ】図１８（Ａ）のプロセッサコアの部分拡大図の一実施形態を示すブロック図。
【図１９】２つ以上のコアを備え、内蔵型メモリ制御器を備え、統合されたグラフィックスを備えることができるプロセッサの一実施形態を示すブロック図。
【図２０】コンピュータアーキテクチャの第１の実施形態を示すブロック図。
【図２１】コンピュータアーキテクチャの第２の実施形態を示すブロック図。
【図２２】コンピュータアーキテクチャの第３の実施形態を示すブロック図。
【図２３】コンピュータアーキテクチャの第４の実施形態を示すブロック図。
【図２４】本発明の実施形態に従う、ソース命令セット中のバイナリ命令を目標命令セット中のバイナリ命令に変換するソフトウェア命令コンバータの利用を示すブロック図。
【発明を実施するための形態】
【０００７】
ビットシャッフル命令、その命令を実行するプロセッサ、その命令を処理または実行する時にプロセッサが実行する方法、およびその命令を処理または実行するため一つ以上のプロセッサを組み込んだシステムを以下に開示する。以下の記載では、多くの具体的な詳細が説明される（たとえば、特定の命令演算、データフォーマット、プロセッサ構成、マイクロアーキテクチャ詳細、演算シーケンスなど）。但し、これらの具体的な詳細を用いずに、実施形態を実践することはできる。さらに、公知の回路、構造および技術は、記載の理解を曖昧にするのを避けるため、詳細には示さない。
【０００８】
図１は、ビットシャッフル命令１０２の一実施形態を演算可能に実行できるプロセッサ１００の一実施形態を示すブロック図である。実施形態によっては、プロセッサは汎用プロセッサ（たとえば、デスクトップ、ラップトップまたは他のコンピュータで用いられる種類の汎用マイクロプロセッサまたは中央処理ユニット（ＣＰＵ））の場合がある。あるいはそのプロセッサは、専用プロセッサの場合がある。適切な専用プロセッサの実施例には、暗号化プロセッサ、通信プロセッサ、ネットワークプロセッサ、コプロセッサ、グラフィックスプロセッサ、組込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、およびコントローラー（たとえばマイクロコントローラ）が含まれるが、これに限定するものではない。プロセッサは、複雑命令セットコンピュータ（ＣＩＳＣ）アーキテクチャ、縮小命令セットコンピュータ（ＲＩＳＣ）アーキテクチャ、超長命令語（ＶＬＩＷ）アーキテクチャ、ハイブリッドアーキテクチャ、及び他の種類のアーキテクチャのうちの任意のものを備えるか、異なるアーキテクチャを組み合わせたものを備える場合がある（たとえば、コアが異なると、アーキテクチャが異なる場合がある）。
【０００９】
演算中、プロセッサ１００は、ビットシャッフル命令１０２を受ける場合がある。たとえば、相互接続を介して、その命令をメモリから受け取るかもしれない。ビットシャッフル命令は、マクロ命令、アセンブリ言語命令、マシンコード命令、または他の命令またはプロセッサの命令セットの制御信号を表しているかもしれない。命令セットは、プロセッサの命令セットアーキテクチャ（ＩＳＡ）の一部であり、プロセッサが演算可能に実行できるネイティブ命令を含む。
【００１０】
実施形態によって、ビットシャッフル命令は、少なくとも１つのビットレーン（たとえば、１６ビット、３２ビット、６４ビット、または１２８ビットビットレーン）を備えうる第１のソースオペランド１１０を明示的に指定するか（たとえば一つ以上のソースオペランド指定フィールド、または一組のソースオペランド指定ビット）、あるいは示す（たとえば黙示的に示す）場合がある。実施形態によっては、少なくとも１つのビットレーンのそれぞれは、異なるパックデータ要素（たとえば、１６ビット、３２ビット、または６４ビットの整数または他のデータ要素）である場合がある。実施形態によっては、命令は、複数のサブレーンサイズのビット選択要素を備えうる第２のソースパックデータ・オペランドを明示的に指定するか、あるいは示す場合がある。サブレーンサイズのビット選択要素は、少なくとも１つのビットレーンのそれぞれよりは、それぞれビットが少ない場合がある（たとえば、サブレーンサイズのビット選択要素は、それぞれ８ビット、６ビット、５ビット、４ビット、または３ビットを備える場合がある）。以下でさらに記載されるように、サブレーンサイズのビット選択要素のそれぞれは、対応するレーン中の個別のビット位置を指定または選択するように作用する。一特定の実施例として、６ビットサイズのビット選択要素が、６４ビットレーン（例えば、６４ビットクワドワードの整数）の６４個の異なるビット位置の任意の一つを指定するように作用する場合がある。一側面では、６ビットサイズのビット選択要素が８ビットのバイトに含まれ、８ビットの中の６ビットだけが選択のために用いられる場合がある。
【００１１】
再び図１を参照すると、プロセッサはデコードユニットつまりデコーダ１０４を含む。デコードユニットはビットシャッフル命令１０２を受けてデコードすることができる。デコードユニットは、一つ以上の相対的に下位レベルの命令または制御信号（たとえば、一つ以上のマイクロ命令、マイクロ演算、マイクロコード・エントリポイント、デコードされた命令または制御信号など）を出力することができ、それらの命令・信号は相対的に上位レベルのビットシャッフル命令を反映するか表現する、あるいは相対的に上位レベルのビットシャッフル命令から導かれる。実施形態によっては、復号ユニットは、ビットシャッフル命令を受ける一つ以上の入力構造（たとえばポート、相互接続、インタフェース）と、それに結合されビットシャッフル命令を認識しデコードする命令認識・デコード論理と、それに結合され下位レベルの命令または制御信号を出力する一つ以上の出力構造（たとえばポート、相互接続、インタフェース）を含む場合がある。デコードユニットは、限定はしないがマイクロコード・リードオンリーメモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラマブル・ロジック・アレイ（ＰＬＡ）を含む様々な異なるメカニズム、および当技術分野で周知なデコードユニットを実装するために用いられる他のメカニズムを用いて実装される場合がある。実施形態によっては、ビットシャッフル命令をデコードユニットに直接与える代わりに、命令エミュレータ、トランスレータ、モーファー、インタープリタ、または他の命令変換モジュールを随意に用いる場合がある。
【００１２】
再び図１を参照すると、プロセッサ１００は一組のパックデータ・レジスタ１０８も含む。実施形態によっては、プロセッサは一組のパックデータ演算マスクレジスタ１１６も随意に含む場合がある。実施形態によっては、プロセッサは一組の汎用レジスタ１１８も随意に含む場合がある。これらのレジスタのそれぞれは、データを演算可能に記憶するオンダイの記憶位置を表すことができる。パックデータ・レジスタは、パックデータ、ベクトルデータ、または単一命令多重データ（ＳＩＭＤ）のデータを演算可能に記憶することができる。実施形態によっては、パックデータ演算マスクレジスタは、ビットシャッフル命令の結果を演算可能に記憶することができ、パックデータ演算マスク（たとえばプレディケーションを用いたマスク）を記憶することもできる。パックデータ・レジスタ、パックデータ演算マスクレジスタ、および汎用レジスタは、アーキテクチャ上は可視である、つまりソフトウェアおよび／またはプログラマには可視であるアーキテクチャ上のレジスタをそれぞれ示すことができ、および／またはオペランドを特定するプロセッサの命令セットの命令によって示されるレジスタである。これらのアーキテクチャ上のレジスタは、所定のマイクロアーキテクチャ中のアーキテクチャ上ではない他のレジスタと対比される（たとえば、一時レジスタ、リオーダーバッファ、リタイアメントレジスタなど）。これらのレジスタは、公知の技術を用い異なるマイクロアーキテクチャに異なる方法で実装されうるが、なんら特定の種類の設計に限定するものではない。適切な種類のレジスタの実施例には、専用物理レジスタ、レジスタリネーミングを用い動的に割り当てられるレジスタ、およびその組合せが含まれるが、それに限定するものではない。
【００１３】
実施形態によっては、複数のサブレーンサイズのビット選択要素を備えうる第２のソースパックデータ・オペランド１１２を、パックデータ・レジスタ１０８の一つに随意に記憶することができる。あるいは第２のソースパックデータ・オペランド１１２をメモリ位置、または他の記憶位置に随意に記憶することができる。図のように実施形態によっては、少なくとも１つのビットレーンを備えうる第１のソースオペランド１１０も、パックデータ・レジスタ１０８の一つに随意に記憶することができる（たとえば、第１のソースオペランドがパックデータ・オペランドの場合）。あるいは第１のソースオペランド１１０を汎用レジスタ１１８の一つに随意に記憶することができる（たとえば、第１のソースオペランドが単一の１６ビット、３２ビット、または６４ビットビットレーンを備える場合）。さらに他の実施形態によっては、第１のソースオペランド１１０をメモリに随意に記憶することができる（たとえば、第１のソースオペランドがパックデータ・オペランドである場合、または第１のソースオペランドが単一のスカラービットレーンである場合）。
【００１４】
再び図１を参照すると、実行ユニット１０６はデコードユニット１０４、パックデータ・レジスタ１０８、汎用レジスタ１１８、および随意のパックデータ演算マスクレジスタ１１６に結合されている。実行ユニットは、ビットシャッフル命令を表すか、ビットシャッフル命令から導かれる、一つ以上のデコードされたあるいは別の方法で変換された命令または制御信号を受け取ることができる。実行ユニットは第１のソースオペランド１１０（少なくとも１つのビットレーンを備えることである）と第２のソースパックデータ・オペランド１１２（複数のサブレーンのビット選択要素を備えることである）も受け取ることができる。実行ユニットは、ビットシャッフル命令に応じて、および／またはビットシャッフル命令の結果として（たとえば、ビットシャッフル命令からデコードされた一つ以上の命令または制御信号に応じて）、結果オペランド１１４をビットシャッフル命令が示すデスティネーション記憶位置に記憶するよう作用することができる。
【００１５】
実施形態によっては、結果オペランド１１４は、第２のソースパックデータ・オペランド１１２の複数のサブレーンサイズのビット選択要素それぞれに対して、異なる対応ビットを含む場合がある。実施形態によっては、サブレーンサイズのビット選択要素に対応する結果オペランド１１４の各ビット値は、第１のソースオペランド１１０の少なくとも１つのビットレーンの、対応するビットレーン内の選択、指定、あるいは別の方法で指示されたビットの値と、ビット値では等しい場合がある。選択または指示されたビットは、対応するサブレーンサイズのビット選択要素によって選択、指示される場合がある。たとえば、第２のソースパックデータ・オペランド１１２のサブレーンサイズのビット選択要素のそれぞれは、第１のソースオペランド１１０の対応するレーン内のビット位置を選択または指示することがあり、その値は、第２のソースパックデータ・オペランド１１２のビット選択要素に対応する結果オペランド１１４のビット内に含まれる。たとえばサブレーンサイズのビット選択要素は、対応するビットレーン内のビット位置（たとえば２３番目のビット位置）を指定または指示する値（たとえば値が２３）を備える場合がある。実施形態によっては、サブレーンサイズのビット選択要素のすべては、第１のソースオペランドの同じ単一レーンに対応する場合がある。他の実施形態によっては、サブレーンサイズのビット選択要素の異なるレーンは、対応する相対位置のレーンにそれぞれ対応する場合がある。実施形態によっては、結果オペランド１１４は、図３〜図８で示し記載するもののいずれかである場合があるが、発明の範囲を限定するものではない。
【００１６】
図示の実施形態では、結果オペランド１１４をパックデータ演算マスクレジスタ１１６の一つの中に随意に記憶できるが、これは必須ではない。他の実施形態では、代わりに結果オペランドを汎用レジスタ１１８の一つの中に記憶できる場合がある。さらに他の実施形態では、結果オペランドは、結果パックデータ・オペランドであり、パックデータ・レジスタ１０８の一つの中に記憶することがある。あるいは、結果オペランドを記憶するのにメモリまたは他の記憶位置を用いることがある。
【００１７】
実行ユニットおよび／またはプロセッサは、ビットシャッフル命令に応じ、および／またはビットシャッフル命令の結果として、ビットシャッフル命令を実行し、結果を記憶する具体的な、または特定の論理（たとえば、トランジスタ、集積回路、またはファームウェア（たとえば、不揮発性メモリに記憶される命令）および／またはソフトウェアと潜在的に組み合わせられる他のハードウェア）を含む場合がある（たとえば、ビットシャッフル命令からデコードされる一つ以上の命令または制御信号に応じて）。例えば、実行ユニットは、論理ユニット、算術論理ユニット、または論理またはビット操作演算を実行するデジタル回路などを含む場合がある。実施例によっては、実行ユニットは、ソースオペランドを受取るため一つ以上の入力構造体（たとえばポート、相互接続、インタフェース）と、それに結合されソースオペランドを受取り処理し結果オペランドを生成する回路または論理と、それに結合され結果オペランドを出力する一つ以上の出力構造体（たとえばポート、相互接続、インタフェース）を含む場合がある。考えられる実装において、ソースオペランドを処理し結果オペランドを生成する回路または論理には、入力としてレーンの全ビットと入力としてビット選択要素を結合する線または相互接続を備え、ビット選択要素が指示するレーンの単一ビットを選択できる各レーン毎の別個のマルチプレクサまたは他の選択論理が含まれ、選択された単一ビットをビット選択要素に対応する結果オペランド内のビット位置に結合する出力が含まれる場合がある。
【００１８】
ビットシャッフル命令をプロセッサでのビット操作演算性能を速め、および／または向上させるために有効に用いることができる。これらのビット操作演算は、パケット処理、暗号化、行列転置などのアプリケーションで広く用いられている。随意に極めて大きな番号（たとえば、少なくとも１６、少なくとも３２など）からなる第２のソースパックデータ・オペランド１１２の各ビット選択要素によって、単一の個別ビットは単一命令の実行範囲内で、第１のオペランドから結果オペランドへビット単位で選択され記憶される場合がある。これによって、個別のビットを、かなり柔軟にあちこち移動させまたは再配置することが可能となる（たとえば、単一命令で、すべてのビットが潜在的に異なる位置へ移動する完全シャッフルを可能として）。一特定の実施例として、第１のソースオペランドの６４ビットそれぞれを、単一命令の範囲内で第２のソースパックデータ・オペランドの６４個の異なるビット選択要素を用いて、結果オペランド内の異なるビット位置にシャッフルすることができる。さらに命令は、取得された各ビット値に関して、データ要素またはレーン全体を操作または演算対象にする必要性よりも、プロセッサに個別ビットを操作させるようにすることができる（たとえば、取得された各個別ビット値に関して、データ要素またはレーン全体をローテートまたはシフトする必要はない）。
【００１９】
記載が不明瞭になるのを避けるため、相対的に単純なプロセッサ１００を示し、説明する。但し、プロセッサは他の公知のプロセッサ構成部品を随意に含む可能性がある。この構成部品の可能な実施例には、汎用レジスタ、ステータスレジスタ（フラグレジスタと呼ばれることがある）、システム制御レジスタ、命令フェッチユニット、プリフェッチバッファ、一つ以上のキャッシュレベル（たとえば、レベル１（Ｌ１）命令キャッシュ、Ｌ１データキャッシュ、およびＬ２データ／命令キャッシュ）、命令トランスレーション・ルックアサイド・バッファ（ＴＬＢ）、データＴＬＢ、分岐予測ユニット、アウトオブオーダー実行ユニット（たとえば、命令スケジューリングユニット、レジスタリネームおよび／またはアロケーションユニット、命令ディスパッチユニット、リオーダーバッファ（ＲＯＢ）、リザベーションステーション、メモリオーダーバッファ、リタイアメントユニットなど）、バスインタフェースユニット、アドレス生成ユニット、デバックユニット、性能モニタユニット、電力管理ユニット、プロセッサ内に含まれた他の構成部品、これらの様々な組み合わせが含まれるが、これらに限定するものではない。この構成部品を、様々に異なる適切な組み合わせで、および／または当技術分野で周知な構成で一緒に結合することができる。実施形態は、公知であるこの組み合わせまたは構成に限定されるものではない。さらに実施形態は、少なくとも一つはビットシャッフル命令を実行できるマルチコアを備えるプロセッサ内に含まれる場合がある。
【００２０】
図２は、ビットシャッフル命令の一実施形態をプロセッサが実行する方法２２０の一実施形態を示すブロックフロー図である。実施例によっては、方法２２０は、図１のプロセッサ１００によって、あるいはその内部で実行される場合がある。またプロセッサ１００の構成部品、特徴的事項および具体的かつ随意にここに詳細に記載されることは、方法２２０にも随意に応用される。あるいは方法２２０は、同様または異なるプロセッサまたは装置によって、あるいはその内部で実行される場合がある。さらにプロセッサ１００は、方法２２０と同じ、同様の、あるいは異なった方法を実行することができる。
【００２１】
この方法は、ブロック２２１でビットシャッフル命令を受取る工程を含む。様々な側面によっては、プロセッサまたはその一部で、この命令を受け取る場合がある（たとえば、命令フェッチユニット、デコードユニット、バスインタフェースユニットなど）。様々な側面によっては、オフプロセッサおよび／またはオフダイソースから（たとえば、メモリ、相互接続などから）、またはオンプロセッサおよび／またはオンダイソースから（たとえば命令キャッシュ、命令キューなどから）、この命令を受取る場合がある。実施形態によっては、ビットシャッフル命令は、少なくとも１つのビットレーン、または時には複数のビットレーンを備える第１のソースオペランドを指定、あるいは指示する場合がある。この命令は、複数のサブレーンサイズのビット選択要素を備える第２のソースパックデータ・オペランドを指定、あるいは指示する場合もある。
【００２２】
結果オペランドは、ブロック２２２で、ビットシャッフル命令に応じて、あるいはビットシャッフル命令の結果として（たとえば、ビットシャッフル命令のデコードの結果として）生成され、ビットシャッフル命令が示すデスティネーション記憶位置に記憶される場合がある。実施形態によっては、結果オペランドは、複数のサブレーンサイズのビット選択要素それぞれに対して、異なった対応するビットを含む場合がある。実施形態によっては、サブレーンサイズのビット選択要素に対応する結果オペランドの各ビット値は、選択、指定、あるいは指示されたビット値、対応するビットレーンのビット値、第１のソースオペランドの少なくとも１つのビットレーンのビット値に等しい場合がある。選択または指示されたビットは、対応するサブレーンサイズのビット選択要素によって選択または指示される場合がある。
【００２３】
実施形態によっては、サブレーンサイズのビット選択要素はすべて、第１のソースオペランドの同じ単一のビットレーンに対応する場合がある。他の実施形態によっては、サブレーンサイズのビット選択要素の複数のレーンは、第１のソースオペランドのレーンセットの異なる対応レーンにそれぞれ対応する場合がある。
【００２４】
実施形態によっては、デスティネーション記憶位置は、命令セットの他の命令がパックデータ演算マスクを記憶するために用いうるパックデータ演算マスクレジスタである場合がある。他の実施形態によっては、デスティネーション記憶位置は、パックデータ・レジスタであり、結果オペランドのビットは、第２のソースパックデータ・オペランドの異なるレーンに対応する異なるレーン中に含まれる可能性がある。
【００２５】
説明される方法は、アーキテクチャ上の演算を含む（たとえば、ソフトウェアの視点からは可視である演算）。他の実施形態によっては、その方法は一つ以上のマイクロアーキテクチャ演算を随意に含む場合がある。実施例として、命令をフェッチ、デコード、アウトオブオーダーでスケジューリングし、ソースオペランドにアクセスし、実行ユニットがマイクロアーキテクチャ演算を実行して命令を実施するなどの場合がある。実施形態によっては、命令を実施するマイクロアーキテクチャ演算は、図３から図８に関連して以下に記載する任意のものを随意に含む場合があるが、発明の範囲を限定するものではない。
【００２６】
図３はビットシャッフル命令の一実施形態に応じて実行される場合があるビットシャッフル演算３３０の一実施形態を示すブロック図である。命令は第１のソースオペランド３１０を指定あるいは指示し、第２のソースパックデータ・オペランド３１２を指定あるいは指示することができる。様々な実施形態によっては、第１のソースパックデータ・オペランドの幅つまりサイズは、１６ビット、３２ビット、６４ビット、１２８ビット、２５６ビット、５１２ビット、または１０２４ビットの場合があるが、発明の範囲を限定するものではない。第１のソースオペランドは、少なくとも１つのビットレーンを備える。図に示すように、実施形態によっては、第１のソースオペランドは、第１のビットレーン３３２−１と随意に第２のビットレーン３３２−２を備える場合がある。様々な実施形態によっては、これらのビットレーンのそれぞれは、１６ビット、３２ビット、６４ビット、または１２８ビットである場合があるが、発明の範囲を限定するものではない。
【００２７】
第２のソースパックデータ・オペランドは、複数のサブレーンサイズのビット選択要素Ｓ０〜Ｓ２Ｎ＋１（まとめてＳ）を備える。これらのサブレーンサイズのビット選択要素の総数は、特定の実施に望ましい任意の数であるかもしれない。実施形態によっては、各サブレーンサイズのビット選択要素は、４ビット、５ビット、６ビット、７ビット、または８ビットである場合があるが、発明の範囲を限定するものではない。実施形態によっては、各サブレーンサイズのビット選択要素は、第２のソースパックデータ・オペランドの異なる対応８ビットバイトの中に含まれる場合がある。たとえば、各サブレーンサイズのビット選択要素は、４ビット、５ビット、６ビット、または７ビットであり、異なる対応バイト中に含まれる場合がある。代表的なものでは、各バイトの４、５、６、または７の最下位ビット（あるいは４，５，６、または７の最上位ビット）だけをビット選択に用いる場合がある。たとえば、各対応する８ビットバイトの最下位の６ビットだけをビット選択に用い、各バイトの残った最上位２ビットを随意に無視する（あるいは少なくともビット選択には用いない）場合がある。この場合、複数のサブレーンサイズのビット選択要素は、第２のソースパックデータ・オペランドのビットを８ビットで割ったサイズに等しくなる場合がある。あるいは２つの４ビットニブルサイズのビット選択要素が、各８ビットバイトに随意に含まれる場合がある。様々な実施形態によっては、第２のソースパックデータ・オペランドの幅つまりサイズは、６４ビット、１２８ビット、２５６ビット、５１２ビット、または１０２４ビットの場合があるが、発明の範囲を限定するものではない。６４ビット、１２８ビット、２５６ビット、５１２ビット、および１０２４ビットの第２のソースパックデータ・オペランドは、それぞれ８、１６、３２、６４、または１２８バイトを含むかもしれない。実施形態によっては、第２のソースパックデータ・オペランドには、少なくとも１６のサブレーンサイズのビット選択要素があるかもしれない。
【００２８】
命令／演算が第１のソースオペランド３１０の単一のビットレーンだけを用いる実施形態では、複数のサブレーンサイズのビット選択要素のすべて（たとえば、Ｓ０〜Ｓ２Ｎ＋１）は、単一のビットレーン（たとえば第１のレーン３３２−１）に対応する場合がある。代わりに他の実施例によっては、命令／演算が、第１のソースオペランド３１０の一部か、第１のソースオペランドから導かれたかのいずれかの複数のビットレーンを用いる場合がある（たとえば、ブロードキャスト、あるいは第１のソースオペランドから複製されるなど）。たとえば、命令は、命令／演算で用いられる複数のビットレーン中にブロードキャストされるか、複製される単一のビットレーンを備えた第１のソースオペランドを指示する場合がある。命令／演算が複数のビットレーンを用いる実施形態によっては、サブレーンサイズのビット選択要素は異なるサブセットにグループ化または分配され、各サブセットは異なるビットレーンに対応している場合がある。この場合、ビット選択要素の各サブセットは、対応するビットレーン内でだけ、第１のソースオペランドのビットを選択、指定、あるいは特定するのに用いられる場合がある。たとえば、サブレーンサイズのビット選択要素Ｓ０〜ＳＮは、第１のビットレーン３３２−１内のビットに対応し、第１のビットレーン３３２−１内のみのビットを特定するのに用いられ、サブレーンサイズのビット選択要素ＳＮ＋１〜Ｓ２Ｎ＋１は、第２のビットレーン３３２−２内のみのビットに対応し、第２のビットレーン３３２−２内のみのビットを特定するのに用いられる場合がある。
【００２９】
結果オペランド３１４は、ビットシャッフル命令／演算に応じてデスティネーション記憶位置に生成され（たとえば実行ユニット３０６によって）記憶される場合がある。デスティネーション記憶位置は、命令によって指定あるいは指示される場合がある。実施例によっては、結果オペランドは、第２のソースパックデータ・オペランドの複数のサブレーンサイズのビット選択要素それぞれに対して異なる対応ビットを含む場合がある。たとえば、結果オペランドのビット［０］は、ビット選択要素Ｓ０に対応し、結果オペランドのビット［１］は、ビット選択要素Ｓ１に対応するなどの場合がある。実施形態によっては、結果オペランドは、追加のビット（たとえば、ビットの複製コピー）も以下に記載されるように含む場合がある。実施形態によっては、結果オペランドの各ビット値（少なくともサブレーンサイズのビット選択要素に対応するビット）は、対応するサブレーンサイズのビット選択要素によって指定、選択、あるいは指示される、対応するビットレーンの値、第１のソースオペランドの少なくとも１つのビットレーンの値に等しくなる場合がある。たとえば、各ビット選択要素は、第１のソースオペランドの対応するビットレーンでビット位置を選択し、その位置でのビット値は、結果オペランドにおいて、そのビット選択要素に適切に対応したビット位置に記憶される場合がある。たとえば説明される例示的実施形態において、ビット選択要素Ｓ０はバイナリ値（１）を備える第１のビットレーン３３２−１のビット［３］を特定する値（３）を備え、ビット選択要素Ｓ１はバイナリ値（０）を備える第１のビットレーン３３２−１のビット［４］を特定する値（４）を備えるなどの場合がある（ビット［０］は最初のビットであることに留意）。実施形態によっては、結果オペランドを記憶するのに用いるデスティネーション記憶位置は、パックデータ演算マスクレジスタである場合がある。他の実施形態によっては、デスティネーション記憶位置は、汎用レジスタである場合がある。あるいは、メモリ位置または他の記憶位置が、必要に応じて随意に用いられる場合がある。
【００３０】
図４は、第２のソースパックデータ・オペランド４１２内の８ビットバイトサイズのビット選択要素を用いて第１のソースパックデータ・オペランド４１０の（例えば、クワドワードの整数を有する）６４ビットレーンのビットをシャッフルし、スカラー結果オペランド４１４を生成するために実行される場合があるビットシャッフル演算４４０の一実施形態を示すブロック図である。この演算は、ビットシャッフル命令の一実施形態に応じて、実行される場合がある。この命令は、第１のソースパックデータ・オペランドを指定あるいは指示し、第２のソースパックデータ・オペランドを指定あるいは指示する場合がある。
【００３１】
この実施形態では、第１のソースパックデータ・オペランド４１０は、少なくとも１２８ビット、随意に５１２ビットまで備え、複数のビットレーン４３２を備える。具体的には、示された実施形態において、第１のソースパックデータ・オペランドは、第１の６４ビットビットレーン４３２−０、第２の６４ビットビットレーン４３２−１、随意に第８の６４ビットビットレーン４３２−７までを備える場合がある。一側面では、これらの少なくとも２つ（あるいは８つまで）の６４ビットレーンは、少なくとも２つ（あるいは８つまで）の６４ビットクワドワードの整数（たとえばＱＷＯＲＤ０〜ＱＷＯＲＤ７）の対応する一つを、それぞれ保持できる場合がある。
【００３２】
この実施形態では、第２のソースパックデータ・オペランド４１２は、少なくとも１２８ビット、随意に５１２ビットまでを備え、複数の８ビットバイトサイズのビット選択要素（Ｂ）を備える。具体的には、示された実施形態において、第２のソースパックデータ・オペランドは、最下位１２８ビットに、少なくとも１６の８ビットバイトサイズのビット選択要素（Ｂ０〜Ｂ１５）を備える。随意的には、第２のソースパックデータ・オペランドは、５１２ビットまでのサイズのオペランド内に、最大６４の８ビットバイトサイズのビット選択要素（Ｂ０〜Ｂ６３）を備える場合がある。先に記載したように、実施形態によっては、バイトサイズのビット選択要素の８ビットすべてがビット選択に用いられない場合もある。たとえば実施形態によっては、各バイトの最下位（あるいは最上位）４，５，６、または７ビットだけがビット選択に用いられる場合がある。特に６４ビットレーンおよび／または６４ビットクワドワード（ＱＷＯＲＤ）の整数と共に、ビット選択に６ビットを用いる長所の一つは、レーンの６４ビットおよび／またはＱＷＯＲＤの任意の一つを一意に特定するのに６ビットは十分であることである。たとえば、バイトＢ０の最下位６ビットは、第１の６４ビットレーン４３２−０および／またはＱＷＯＲＤ０中の６４ビットの任意の一つを一意に特定できる。
【００３３】
示された実施形態において、８ビットバイトサイズのビット選択要素は、レーン４３２および／またはＱＷＯＲＤの異なる一つにそれぞれ対応する複数のグループまたはサブセットにグループ化または分配される。たとえば、８つのビット選択要素Ｂ０〜Ｂ７の第１のサブセットは、第１の６４ビットレーン４３２−０に対応し、８つのビット選択要素Ｂ８〜Ｂ１５の第２のサブセットは、第２の６４ビットレーン４３２−１に対応し、第８の６４ビットレーン４３２−７に対応する８つのビット選択要素Ｂ５６〜Ｂ６３の第８のサブセットにまで至る。ビット選択要素の各サブセットは、対応するビットレーンおよび／またはＱＷＯＲＤ内でのみビットを選択または特定するのに用いられる場合がある。たとえば、Ｂ０〜Ｂ７のそれぞれは、第１の６４ビットレーン４３２−０内でのみビット位置を特定するために用いられ、Ｂ８〜Ｂ１５のそれぞれは、第２の６４ビットレーン４３２−１内でのみビット位置を特定するために用いられるなどの場合がある。第８つのビット選択要素の各サブセットおよび／または第２のソースパックデータ・オペランド４１２の各６４ビットレーンは、第１のソースパックデータ・オペランドの対応する６４ビットレーンで、８つの潜在的／随意的に異なるビット位置を選択することができる。
【００３４】
結果オペランド４１４は、ビットシャッフル命令／演算４４０に応じて生成され（たとえば実行ユニット４０６によって）、デスティネーション記憶位置に記憶される場合がある。実施形態によっては、結果オペランドは、第２のソースパックデータ・オペランドの複数の８ビットバイトサイズのビット選択要素それぞれに対して異なる対応ビットを含む場合がある。たとえば示された実施形態において、結果オペランドは、６４のバイトサイズのビット選択要素Ｂ０〜Ｂ６３のそれぞれに対して異なるビットを含む６４ビットのオペランドである。代表的なものでは、結果ビットと対応するビット選択要素は、オペランド内で相対的に同じ位置である場合がある。たとえば、結果オペランドのビット［７：０］は、それぞれバイトＢ７〜Ｂ０に対応し、結果オペランドのビット［１５：８］は、それぞれバイトＢ１５〜Ｂ８に対応し、結果オペランドのビット［６３：５８］は、それぞれバイトＢ６３〜Ｂ５６に対応するなどの場合がある。図のように実施形態によっては、すべてのレーンに対するすべてのビット選択要素に対応する結果ビットは連結され、結果オペランドの隣接する一組のビットの中で隣接して記憶される場合がある。このような実施形態では、結果オペランドはパックデータ・オペランドではなく、むしろスカラーオペランドである（たとえば、単一スカラーの６４ビットＱＷＯＲＤ整数）。実施形態によっては、結果オペランドの各ビット値は、第１のソースパックデータ・オペランドの対応するビットレーンのうちの１ビット値と等しくなる場合があるが、各ビット値は、対応する８ビットバイトサイズのビット選択要素によって指定、選択、あるいは指示される。第２のソースパックデータ・オペランドの各ビット選択要素は、第１のソースオペランドの対応するビットレーンでのビット位置を特定し、特定されたビット位置でのビット値は、ビット選択要素に対応する（たとえば、相対的に同じ位置にある）結果オペランドのビット位置に記憶される場合がある。たとえば、Ｂ０は、バイナリ値で１を備える第１のレーン４３２−０のビット［５８］を指示する値５８を備えており、ビット［０］がＢ０に対応するので、バイナリ値の１は、結果オペランドのビット［０］に記憶され、Ｂ１、バイナリ値で０を備える第１のレーン４３２−０のビット［１５］を指示する値１５を備えており、バイナリ値の０は、結果オペランドのビット［１］に記憶されるなどの場合がある。
【００３５】
図のように実施形態によっては、第２のソースパックデータ・オペランド４１２は、第１のソースオペランドの１つのビットレーン（たとえば、６４ビットビットレーン）中のビットの数と同じ数のビット選択要素（たとえば６４）を備える場合がある。一可能な命令／演算の使用において、同じ値（たとえば、同じ６４ビット値）の同一コピーまたは複製が、第１のソースパックデータ・オペランドの各レーン（たとえば、８つの６４ビットレーン）に随意に記憶される場合がある。実施例として、単一の６４ビット値のビットそれぞれ、およびすべてが、６４のビット選択要素のうちの異なる対応する要素によって特定される場合がある。これによって、単一のビットシャッフル命令実行の制約内で、全６４ビットのビットシャッフルつまり置換が、単一６４ビット値上で有効に実行される場合がある。背景の部分で記載したように、従来であれば、このような全６４ビットのビットシャッフルを実行するためには、一般には多くの命令（たとえばシフトやローテート命令、論理ＡＮＤまたは論理ＯＲ命令など）が必要とされていた。さらにこうした可能な使用例をさらに容易にするため、ビットシャッフル命令の別の実施形態が検討され、その実施形態は、単一スカラービットレーン（たとえば単一スカラー６４ビット値）を備える第１のソースオペランドを随意に示し、その命令によってプロセッサは、この単一スカラービットレーンをブロードキャストし、あるいはこの単一スカラービットレーンを複製し、異なる対応レーンにそれぞれ、このビットレーンの複数（たとえば８つ）のコピーを作成することができる場合がある。
【００３６】
命令／演算の他の使用もまた、検討されている。たとえば、異なる値（たとえば異なる６４ビットクワドワードの整数）が、第１のソースパックデータ・オペランドの異なるレーンに随意に記憶される場合がある。命令／演算は、部分的なビットシャッフルを、異なる値のそれぞれに並行に実行する場合がある（たとえば、８つの異なる６４ビット値のそれぞれの８ビットだけのシャッフル）。複数（たとえば８つの）命令は、異なる値に全ビットシャッフル（たとえば、全６４ビットのビットシャッフル）をまとめて実行するのに用いられる場合がある。部分的な（たとえば８ビット）ビットシャッフルの結果は、全６４ビットのビットシャッフルされた結果を生成するため、次に合併または結合される場合がある。
【００３７】
結果オペランド４１４は、命令によって指定あるいは指示されたデスティネーション記憶位置に記憶される場合がある。実施形態によっては、随意に、デスティネーション記憶位置はパックデータ演算マスクレジスタである場合がある。パックデータ演算マスクレジスタは、汎用レジスタのようなより汎用的な目的（たとえばアドレス生成のためにも用いられる）よりも、主としてパックデータ演算マスクの記憶専用、および／またはプレディケーションで使用する場合がある。プロセッサの命令セットのうち、複数の他の命令は、プレディケートオペランドとして同じパックデータ演算マスクレジスタを指定し、対応するパックデータ演算をプレディケートする場合がある。こうした命令は、汎用レジスタ、パックデータ・レジスタ、および非パックデータ演算マスクレジスタを指定するのに使用されるものより、命令の異なるフィールドまたは一組のビットのパックデータ演算マスクレジスタを指定する場合がある。あるいは他の実施形態によっては、結果オペランド４１４のために用いられるデスティネーション記憶位置は、随意に汎用レジスタの場合がある。汎用レジスタに比較してパックデータ演算マスクレジスタを用いる実現する効果は、プロセッサのマイクロアーキテクチャにおいて、汎用レジスタよりもマスクレジスタは、他のパックデータ・リソース（たとえば、パックデータ・レジスタ、パックデータ実行ユニットなど）とともに、より近接して配置される傾向にあることである。さらに他の実施形態によっては、メモリ位置または他の記憶位置は必用に応じて随意に用いられる場合がある。
【００３８】
これは適切なビットシャッフル演算／命令を示したほんの一実施例であることが理解されるであろう。他の実施形態は、他のサイズのパックデータ・オペランドを用いる場合がある。パックデータ・オペランドの適切なサイズの実施例には、１２８ビット、２５６ビット、５１２ビット、および１０２４ビットが含まれるが、これらに限定するものではない。さらに他の実施形態によっては、より少ない（たとえば２）、またはより多い（たとえば６，８）レーンが随意に用いられ、および／または６４ビットレーン以外に、たとえば１６ビットレーン、３２ビットレーン、および他のサイズのレーンなどが随意に用いられる場合がある。また異なったサイズのビット選択要素が、随意に用いられる場合がある。適切なサイズのビット選択要素には、たとえば、８ビット、７ビット、６ビット、５ビット、および４ビットニブルサイズのビット選択要素が含まれる。尚、ここ以外で言及される他の変形例および代替物も適切であり、および／または本発明の開示の利益を有する当業者には明白であろう。
【００３９】
図５は、第２のソースパックデータ・オペランド５１２内の４ビットニブルサイズのビット選択要素を用いて第１のソースパックデータ・オペランド５１０の１６ビットレーン（たとえば１６ビットワードの整数を備える）のビットをシャッフルし、スカラー結果オペランド５１４を生成するよう実行できるビットシャッフル演算５５０の一実施形態のブロック図である。演算は、ビットシャッフル命令の一実施形態に応じて、実行される場合がある。図５の演算／命令は、図４の演算／命令とある類似点を持っている。記載が不明瞭になるのを避けるため、以下の記載では、図４の演算／命令と同じ、または類似する場合がある特徴すべてを繰り返さずに、相違点と図５の演算／命令のさらなる特徴事項に主に焦点を絞る。但し、当然のことだが、図４の演算／命令のすでに記載した特徴事項および詳細は、明記されないあるいは明白でない限りは、図５の演算／命令にも随意適用される場合がある。
【００４０】
この命令は、第１のソースパックデータ・オペランド５１０および第２のソースパック・オペランド５１２を特定するか指示する。この実施形態では、第１のソースパックデータ・オペランドは、６４ビット幅であり、４つの１６ビットビットレーンを備える。これらの４つのレーンには、第１の１６ビットワード（ＷＯＲＤ０）を記憶するのに用いられる場合がある第１の１６ビットレーン５３２−０、第２の１６ビットワード（ＷＯＲＤ１）を記憶するのに用いられる場合がある第２の１６ビットレーン５３２−１、第３の１６ビットワード（ＷＯＲＤ２）を記憶するのに用いられる場合がある第３１６ビットレーン５３２−２、第４の１６ビットワード（ＷＯＲＤ３）を記憶するのに用いられる場合がある第４の１６ビットのレーン５３２−３が含まれる。
【００４１】
この実施形態では、第２のソースパックデータ・オペランド５１２は６４ビットをまた備える。第２のソースパックデータ・オペランドは、１６の４ビットニブルサイズのビット選択要素Ｎ０〜Ｎ１５を備える。４つの４ビットニブルのビット選択要素Ｎ０〜Ｎ３の第１のサブセットまたはグループは、第１のレーン５３２−０に対応し、４つの４ビットニブルのビット選択要素Ｎ４〜Ｎ７の第２サブセットは、第２のレーン５３２−１に対応し、４つの４ビットニブルのビット選択要素Ｎ８〜Ｎ１１の第３のサブセットは、第３のレーン５３２−２に対応し、４つの４ビットニブルのビット選択要素Ｎ１２〜Ｎ１５の第４のサブセットは、第４のレーン５３２−３に対応する。４ビットニブルのビット選択要素の各サブセットは、対応する１６ビットワードおよび／または１６ビットレーン中のみから、ビットを選択または特定するために用いられる場合がある。４ビットニブルのビット選択要素はそれぞれ、対応する１６ビットワードおよび／または１６ビットレーン内で任意の単一ビットを一意に特定できる場合がある。
【００４２】
結果オペランド５１４は、ビットシャッフル命令／演算５５０に応じて生成され（たとえば実行ユニット５０６により）、デスティネーション記憶位置に記憶される場合がある。示された結果オペランドは１６ビットを備える。実施形態によっては、結果オペランドは、１６個の４ビットニブルのビット選択要素のそれぞれに対して異なる対応ビットを含む場合がある。図のように実施形態によっては、すべてのレーンに対する４ビットニブルのビット選択要素の１６個すべてに対応するビットは、連結され、結果オペランドの隣接する一組の１６ビットの中で隣接して記憶される場合がある。実施形態によっては、結果オペランドの各ビット値は、第１のソースパックデータ・オペランドの対応するビットレーンのうちの一ビット値と等しくなる場合があるが、各ビット値は、対応する４ビットニブルのビット選択要素によって指定、選択、あるいは指示される。たとえばＮ０は、バイナリ値で１を備える第１のレーン５３２−０のビット［４］を指示する値４を備えており、ビット［０］はＮ０に対応するので、バイナリ値の１は、結果オペランドのビット［０］に記憶される場合がある。実施形態によっては、第２のソースパックデータ・オペランドは、第１のソースオペランドの各レーン（たとえば１６ビットのレーン）中のビットの数と同じ数のビット選択要素（たとえば１６）を備える場合がある。実施形態によっては、結果オペランドを記憶するのに用いられるデスティネーション記憶位置は、随意にパックデータ演算マスクレジスタの場合がある。あるいはデスティネーション記憶位置は、随意に汎用レジスタ、メモリ位置、または他の記憶位置の場合がある。
【００４３】
図６は、随意にビットシャッフル演算６４０と結合する場合があるデータ要素ブロードキャスト演算６６０の一実施形態のブロック図である。この演算は、データ要素ブロードキャスト命令を伴うビットシャッフルの一実施形態に応じて実行される場合がある。実施形態によっては、この命令は、随意に、データ要素ブロードキャストが実行されることを指示するブロードキャスト指示制御（たとえば一つ以上のビット一組またはフィールド）を備える場合がある。他の実施形態によっては、データ要素ブロードキャスト演算は、命令に対して、随意に暗黙的な場合がある（たとえば命令コードに暗黙的）。命令は、ブロードキャストまたは複製される単一データ要素６３２（たとえば６４ビットクワドワード、１６ビットワードなど）を備えるソースオペランド６１０を示す場合がある。ソースオペランドは、複数のデータ要素を備えるパックデータ・オペランドに対し、単一データ要素のみを備えるスカラーオペランドの場合がある。実施形態によっては、単一データ要素６３２は、メモリ位置６６２に随意に記憶される場合があるが、これは必須ではない。この実施形態においては、単一データ要素は、（たとえば、データ要素ブロードキャスト命令と共に、デコードされあるいはビットシャッフルから導かれるロードまたは他のメモリアクセス演算によって）最初にメモリ位置からアクセスされる場合がある。
【００４４】
次に単一データ要素は、複数回ブロードキャストされ、または複製され６６４、単一データ要素の複数のコピーを作成する場合もある。図においては、第１の複製されたデータ要素６６８−１を作成し、随意にＮ番目の複製されたデータ要素６６８−Ｎまで作成する工程が含まれる。この複製の数は、先に記載されたデータ要素数のいずれかである場合がある。実施形態によっては、単一データ要素６３２の異なる複製またはコピーは、命令で指示される別のソースパックデータ・オペランドの各レーンおよび／またはデータ要素に関して作成される場合がある（たとえば、各レーンおよび／またはデータ要素に対するビット選択要素の異なるサブセットを備える第２のソースパックデータ・オペランド）。
【００４５】
図では、データ要素の複数の複数またはコピーが仮のソースパックデータ・オペランド６６２に合わせて示されている。この仮のソースパックデータ・オペランドは、実施形態によっては、単一データ要素の複製またはコピーが仮のレジスタまたは他のアーキテクチャ上ではない記憶位置内にまとめて記憶される場合があるが、他の実施形態では、データ要素の複製またはコピーは、実際にはレジスタまたは記憶位置に合わせて記憶されることは決してなく、代わりに実行ユニットに提供されるにすぎない場合がある。ブロードキャストまたは複製されたデータ要素６６８−１〜６６８−Ｎおよび／または仮のソースパックデータ・オペランド６６２は、ビットシャッフル演算６４０に与えられる場合がある。ビットシャッフル演算６４０は、ここ以外に記載されるビットシャッフル演算の任意のものを表す場合がある（たとえば、ビットシャッフル演算３３０、４４０、５５０の一つ）。ビットシャッフル演算は、先に記載のソースパックデータ・オペランドについて十分記載されたように、ブロードキャストまたは複製されたデータ要素上で実行される場合がある。
【００４６】
データ要素ブロードキャスト演算をビットシャッフル演算と組み合わせることで、複数のベクトル、パックデータ、またはビット選択要素のＳＩＭＤサブセットのそれぞれに関して同じ単一のデータ要素または値を用いることが望ましい様々のアプリケーションの効率が増加するのに役立つ場合がある。先に記載したように、一側面では、これによってデータ要素またはビットレーンすべての全ビット単位のシャッフルを実行するため、ビット選択要素の異なるサブセットを用いて、データ要素またはレーンの複製コピーから異なる組のビットを選択するのが可能になる場合があるが、発明の範囲を限定するものではない（たとえば、異なるレーンまたは結果オペランドのデータ要素それぞれに対して同じ組のビットを選択するため別の使用はあり得る）。
【００４７】
ある概念をさらに説明するため、連結したビット選択要素すべてによって選択される全ビットを含み、パックデータ演算マスクレジスタ内に記憶されている結果オペランドを記憶するビットシャッフル命令に関する以下の詳細で例示的な実施形態を検討する。この命令の名前はＶＰＳＨＵＦＢＩＴＱＭＢであり、オペランドとしてＤＥＳＴ、ＳＲＣ１およびＳＲＣ２を備える。実施形態では、この命令によってＳＲＣ１はパックデータ・レジスタになり、ＳＲＣ２はパックデータ・レジスタかメモリ位置のいずれかになり、ＤＥＳＴはマスクレジスタになる場合がある。あるいは汎用レジスタは、マスクレジスタの代わりにＤＥＳＴ用に用いられる可能性がある。表１は、この命令のいくつか異なる実施形態での命令コード、符号化、演算記述の一覧表である。表１．ＶＰＳＨＵＦＢＩＴＱＭＢ−パッククワドワード整数のシャットルビット−マスクレジスタデスティネーション
【表１】
0006526175.tif 000002
【００４８】
ＥＶＥＸは、ここ以外で記載されるようにＥＶＥＸ符号化を指す。Ｘｍｍ、ｙｍｍ、およびｚｍｍはそれぞれ１２８ビット、２５６ビット、および５１２ビットのパックデータ・レジスタを表す。ｍ１２８／ｍ２５６／ｍ５１２はそれぞれ、１２８ビット、２５６ビット、および５１２ビットのメモリ位置を指す。ｍ６４ｂｃｓｔは、６４ビットのメモリ位置を指し、そこでベクトルの複数要素へのデータ要素ブロードキャストが実行される。ｋ１オペランドは、デスティネーション記憶位置として用いられるマスクレジスタ（たとえばマスクレジスタｋ０〜ｋ７の一つ）を指定する。
【００４９】
ＶＰＳＨＵＦＢＩＴＱＭＢ命令は、第１のソースパックデータ・オペランド（ＳＲＣ１）内のビット選択制御に基づき第２のソースパックデータ・オペランド（ＳＲＣ２）内のパッククワドワード整数のビットを再配置またはシャッフルし、デスティネーション（ＤＥＳＴ）内にシャッフルされたビットを記憶するのに用いられる場合がある。一実施形態では、この命令は符号なし６ビット指標を用いる場合があり、それぞれは第１のソースオペランド（ＳＲＣ１）の異なる対応バイト内で、第２のソースオペランド（ＳＲＣ２）の対応するクワドワード整数からビット値を選択収集する。各６ビット指標は、単一クワドワード中で、６４の異なるビット位置の任意の一つを指定することができる。６ビット指標の値は、指標付きビット位置でのビット値を選択する。各出力ビットに関するビット選択制御データは、第１のソースオペランド（ＳＲＣ１）の８ビットバイト要素内に記憶されるが、各バイトの最下位６ビットだけがビット選択用に用いられる。各６ビット指標は、対応するビット位置を占める対応するクワドワード内でのビット選択に限定される。たとえばＳＲＣ１の最下位８バイトは、ＳＲＣ２の最下位クワドワード内でビットを選択し、ＳＲＣ１の最上位８バイトは、ＳＲＣ２の最上位クワドワード内でビットを選択するなどである。
【００５０】
ＶＰＳＨＵＦＢＩＴＱＭＢ命令の一実施形態に関する擬似コードの実施例は以下に示される。ＳＲＣ２は、第１のソースパックデータ・オペランドを表し、ＳＲＣ３は第２のソースパックデータ・オペランドを表し、ＤＥＳＴはデスティネーションを表す。ｋｌオペランドは、デスティネーション記憶位置として用いられるパックデータ演算マスクレジスタを表す。擬似コードでは、ＫＬはマスク長および／またはパックデータ・オペランド内の複数のデータ要素位置を表し、ＶＬはベクトルまたはパックデータ・オペランド長を表し、「ｉ」はクワドワードまたはレーンを選択し反復用に用いられる位置カウンタを表し、「ｊ」はレーン内でバイトを選択する位置カウンタを表す。ＥＶＥＸ．ｂ＝＝１は、ＳＲＣ３＊がメモリ＊の場合は、組み込みブロードキャストを設定する。パラメータ「ｍ」は、ＳＲＣ２の適切なバイトによって指示されるＳＲＣ３の適切なクワドワード内のビット位置を表す。他の実施形態は、異なる組のマイクロアーキテクチャ演算を用いて、この命令を実施する場合がある。VPSHUFBITQMB DEST, SRCl, SRC2 (KL, VL) = (16, 128), (32, 256), (64, 512)FOR i := 0 TO KL/8- 1 ; Qword    FOR j := 0 to 7 ; Byte      IF EVEX.b AND SRC2 *is memory*      THEN        Data := SRC2. qword [0];      ELSE        Data := SRC2.qword[i]      m := SRCl.qword[i].byte[j] & 0x3F      kl [i*8+j] := Data.bit[m]    ENDFOR;ENDFOR;kl[MAX_KL-l :KL] := 0;
【００５１】
当然のことだが、これらは適切な命令のほんの一例の実施形態にすぎない。他の実施形態では、もっと狭いか（たとえば６４ビット）もっと広いか（たとえば１０２４ビット）ただサイズが異なっているかのパックデータ・オペランドのいずれかを用いる場合がある。さらに他の実施形態では、クワドワードサイズのレーン以外に異なるサイズのレーン（たとえば１６ビットまたは３２ビットレーン）および／または異なるサイズの指標（たとえば４ビットニブルの指標、５ビットの指標など）を用いる場合がある。別の実施形態では、オペランドに他の記憶位置（たとえばメモリ位置）を用いる場合がある。他の実施形態では、随意に、マスキング／プレディケーションを省く場合がある。他の実施形態では、随意に、データ要素ブロードキャストを省く場合がある。
【００５２】
図７は、第２のソースパックデータ・オペランド７１２中の８ビットバイトサイズのビット選択要素を用いて第１のソースパックデータ・オペランド７１０の６４ビットレーン（６４ビットクワドワード（ＱＷＯＲＤ）の整数）のビットのシャッフルを実行し、結果パックデータ・オペランド７１４を生成するビットシャッフル演算７７０の一実施形態のブロック図である。この演算は、ビットシャッフル命令の一実施形態に応じて、実行される場合がある。図７の演算／命令は、パックデータ結果オペランド７１４がスカラー結果オペランド４１４の代わりに生成される点を除き、図４の演算／命令にある程度類似している。記載が不明瞭になるのを避けるため、以下の記載では、図４の演算／命令と同じ、または類似する場合がある特徴すべてを繰り返さずに、相違点と図７の演算／命令のさらなる特徴事項に主に焦点を絞る。但し、当然のことだが、図４の演算／命令のすでに記載した特徴および詳細は、明記されないあるいは明白でない限りは、図５の演算／命令にも随意応用される場合がある（たとえば特徴および詳細が、スカラー結果オペランド４１４に対して結果パックデータ・オペランド７１４に関係しない場合）。
【００５３】
この命令は、第１のソースパックデータ・オペランド７１０を指定あるいは指示する場合がある。第１のソースパックデータ・オペランドは、複数の６４ビットのビットレーン７３２および／または６４ビットクワドワード（ＱＷＯＲＤ）の整数を備える場合がある。この命令はまた、第２のソースパックデータ・オペランド７１２を指定あるいは指示する場合がある。第２のソースパックデータ・オペランドは、８ビットバイトサイズのビット選択要素（Ｂ）の複数の対応するサブセットを備える場合がある。第１および第２のパックデータ・オペランドは、先に図４に関して記載されたものと類似または同じものであり、類似の変形例を備える場合がある。
【００５４】
結果パックデータ・オペランド７１４は、ビットシャッフル命令／演算７７０に応じて、生成され（たとえば実行ユニット７０６によって）、デスティネーション記憶位置に記憶される場合がある。図４のパック形式でない結果オペランド４１４に対して、結果オペランド７１４はパックデータ・オペランドである。結果パックデータ・オペランドは、メモリ位置またはパックデータが記憶できる他の記憶位置中にパックデータ・オペランドとして、パックデータ・レジスタ（たとえば、レジスタ１０８または１００８の一つ）に記憶される場合がある。結果パックデータ・オペランドは、それぞれが第１のソースパックデータ・オペランド７１０の異なるビットレーンに対応し、および／またはそれぞれが第２のソースパックデータ・オペランド７１２の８ビットバイトサイズのビット選択要素の異なるサブセットに対応する複数のビットレーンを備える場合がある。たとえば、結果パックデータ・オペランドのビット［６３：０］は、第１の６４ビットレーン７３２−０に対応し、結果パックデータ・オペランドのビット［１２７：６４］は、第２の６４ビットレーン７３２−１に対応するなどの場合がある。図の説明で、結果パックデータ・オペランドのビットレーンは、第１のソースパックデータ・オペランドのビットレーンと同じサイズであるが、これは必須ではない（たとえば、ビットレーンサイズは代わりに大きくても（たとえば１２８ビット）、小さくても（たとえば３２ビット）てもよい）。
【００５５】
実施形態によっては、８ビットバイトサイズのビット選択要素の各サブセットが選択するビットは、結果パックデータ・オペランドの対応するレーンに記憶される場合がある。実施形態によっては、結果ビットおよび対応するビット選択要素は、レーン中、同じ相対位置の場合がある。たとえば、結果パックデータ・オペランドのビット［７：０］は、それぞれビット選択要素Ｂ７〜Ｂ０に対応し、結果パックデータ・オペランドのビット［７１：６４］は、それぞれビット選択要素Ｂ１５〜Ｂ８に対応するなどの場合がある。実施形態によっては、結果パックデータ・オペランドのビット［７：０］の各値は、対応するビット選択要素Ｂ７〜Ｂ０で同じ相対位置で指定、選択、あるいは指示される対応する第１のレーン７３２−０のビットと等しくなる場合がある。たとえば、結果パックデータ・オペランドのビット［７：０］は、ビット選択要素Ｂ７〜Ｂ０が選択するＱＷＯＲＤ０の８ビットを備え、結果パックデータ・オペランドのビット［７１：６４］は、ビット選択要素Ｂ１５〜Ｂ８が選択するＱＷＯＲＤ１の８ビットを備え、結果パックデータ・オペランドのビット［４５５：４４８］は、ビット選択要素Ｂ６３〜Ｂ５６が選択するＱＷＯＲＤ７の８ビットを備える場合がある。留意すべきは、結果パックデータ・オペランドの各レーン中のビットのいくつかのみが、対応するレーンに関するビット選択要素のサブセットが選択するビットすべてを記憶するのに必要とされることである。説明される実施例において、各レーンに対し８つのビット選択要素があり、よって対応するレーンに対し選択されるビットすべてを記憶するには、結果パックデータ・オペランドの各レーン中で８ビットのみが必要とされる。たとえば、結果ビット［７：０］は、第１のレーン７３２−０に対して用いられ、結果ビット［７１：６４］は、第２のレーン７３２−１に対して用いられる。示された実施例において、これらの結果ビットは随意に、対応するレーンの最下位ビットに記憶される。あるいは最上位ビット、または何か他のビットのサブセットが、随意に用いられる場合がある。
【００５６】
図のように実施形態によっては、第２のソースパックデータ・オペランド７１２は、第１のソースオペランドの１ビットレーン（６４ビットビットレーン）中の複数のビットと同じ複数のビット選択要素（たとえば６４）を備える場合がある。命令／演算の一可能な使用において、同じ値の同一コピーまたは複製（たとえば同じ６４ビットの値）が、第１のソースパックデータ・オペランドのレーン（たとえば８つの６４ビットレーン）のそれぞれに随意に記憶される場合がある。実施例として、単一の６４ビット値は６４ビットを備え、６４個のビット選択要素があるので、単一の６４ビット値のビットのそれぞれおよびすべては、６４個のビット選択の異なる対応ビット選択要素によって特定される場合がある。これによって、単一のビットシャッフル命令実行の制約内で、全６４ビットのビットシャッフルつまり置換が、単一６４ビット値上で有利に実行される場合がある。背景の部分で記載したように、従来であれば、このような全６４ビットのビットシャッフルを実行するためには、一般にはさらに多くのアルゴリズムの命令が必用とされていた。さらにこうした可能な使用例をさらに容易にするため、ビットシャッフル命令の別の実施形態が検討され、その実施形態は、単一のスカラービットレーン（たとえば単一スカラー６４ビット値）を備える第１のソースオペランドを随意に示し、その命令によってプロセッサは、単一スカラービットレーンをブロードキャストし、あるいは単一スカラービットレーンを複製し、異なる対応レーンにそれぞれ、このビットレーンの複数（たとえば８つ）のコピーを作成することができる場合がある。
【００５７】
命令／演算の他の使用もまた、検討されている。たとえば、異なる値（たとえば異なる６４ビットクワドワードの整数）が、第１のソースパックデータ・オペランドの異なるレーンに随意に記憶される場合がある。命令／演算は、部分的なビットシャッフルを、異なる値のそれぞれに並行に実行する場合がある（たとえば、８つの異なる６４ビット値のそれぞれの８ビットだけのシャッフル）。複数（たとえば８つの）命令は、異なる値に全ビットシャッフル（たとえば、全６４ビットのビットシャッフル）をまとめて実行するのに用いられる場合がある。部分的な（たとえば８ビット）ビットシャッフルの結果は、全６４ビットのビットシャッフルされた結果を生成するため、次に合併または結合される場合がある。
【００５８】
再び図７を参照すると、実施形態により、結果パックデータ・オペランドの各レーン内の残った他のビット（つまり、ビット選択要素が選択したビットを記憶するのに必要でないビット）は、随意に、同じレーンに対応するビット選択要素が選択したビットの一つ以上のコピーまたは複製を記憶する場合がある。たとえば結果ビット［６３：８］は、結果ビット［７：０］の７つの複製されたコピーを記憶し、結果ビット［１２７：７２］は結果ビット［７１：６３］の７つの複製されたコピーを記憶し、結果ビット［５１１：４５６］は結果ビット［４４８：４５５］の７つの複製されたコピーを記憶するなどの場合がある。さらに説明すると、結果ビット［７：０］が値１１１１１１００を備える場合、よって結果ビット［６３：０］は値１１１１１１００  １１１１１１００  １１１１１１００  １１１１１１００  １１１１１１００  １１１１１１００  １１１１１１００  １１１１１１００を備える場合がある。各レーンの選択された８ビットは、７回複製され、８ビットの８つの同一コピーが対応するレーン内に記憶される場合がある。こうした複製されたビットセットを記憶する可能な効果は、さらに以下で記載される（たとえば図８とともに）。但し、この複製されたビットセットを記憶することは随意であり、必須ではない。他の実施形態によっては、随意に、結果パックデータ・オペランド内の残ったビット中に、他の様々な所定値が記憶される場合もある。こうした所定値の実施例には、すべて０、すべて１、および第１のソースパックデータ・オペランド内の対応ビット位置から結合されたビット値が含まれるが、これに限定するものではない。
【００５９】
当然のことだが、これは適切なビットシャッフル演算／命令のほんの一例示的実施例にすぎない。他の実施形態は、他のサイズのパックデータ・オペランドを用いる場合がある。適切なパックデータ・オペランドサイズの実施例には、１２８ビット、２５６ビット、５１２ビット、および１０２４ビットが含まれるが、これに限定するものではない。第１、第２、および結果パックデータ・オペランドは、同じサイズのパックデータ・オペランドを備える場合があるが、必須ではない。さらに他の実施形態によっては、少ないレーン（たとえば２）または多いレーン（たとえば６、８など）が随意に用いられる場合もある。さらに６４ビットレーン以外に、たとえば１６ビットレーン、３２ビットレーン、または特定の実施には望ましい他のサイズのレーンなど、他のサイズのレーンが随意に用いられる場合もある。また、異なるサイズのビット選択要素も随意に用いられる場合がある。適切なサイズのビット選択要素には、８ビット、７ビット、６ビット、５ビット、および４ビットニブルサイズのビット選択要素が含まれる。尚、ここ以外で言及される他の変形例および代替物も適切であり、および／または本発明の開示の利益を有する当業者には明白である。
【００６０】
図８は、ソースパックデータ演算マスクオペランド８８２の対象となる第２のソースパックデータ・オペランド８１２内の８ビットバイトサイズのビット選択要素を用いて第１のソースパックデータ・オペランド８１０の６４ビットレーンのビットをシャッフルし、結果パックデータ・オペランド８１４を生成するマスクビットシャッフル演算８８０の一実施形態のブロック図である。マスク演算は、マスクビットシャッフル命令の一実施形態に応じて、実行される場合がある。図８のマスク演算は、図４および図７のマスクなし演算にある程度類似している。記載が不明瞭になるのを避けるため、図４および図７のマスクなし演算に対してすべての随意的に類似または共通な特徴および詳細を繰り返さずに、図８のマスク演算に関する異なるおよび／または追加の特徴事項を主に記載する。図４および図７のマスクなし演算のすでに記載された特徴および詳細は、明記されないあるいは明白でない限りは図８のマスク演算にも随意に応用されるかもしれない。
【００６１】
マスク命令は、第１のソースパックデータ・オペランド８１０、および第２のソースパックデータ・オペランド８１２を指定または指示する場合がある。これらの演算のそれぞれは、図４および／または図７の対応するオペランドと類似または同じであり、同じ変形例および代替物を備える場合がある。第１のソースパックデータ・オペランドは第１の６４ビットビットレーン８３２を備える。第２のソースパックデータ・オペランドは、第１のビットレーンに対応する８つの８ビットバイトサイズのビット選択要素Ｂ０〜Ｂ７のグループまたはサブセットを備える。
【００６２】
マスクビットシャッフル命令はさらに、ソースパックデータ演算マスクオペランド８８２を指定（たとえば明示的に指定）もしくは指示する（たとえば黙示的に示す）。またパックデータ演算マスクオペランドは、ここでは簡単に、演算マスクオペランド、プレディケートオペランド、マスクオペランド、または単にマスクと呼ぶ場合がある。マスクは複数のマスク要素、プレディケート要素、または条件制御要素を含む場合がある。図のように実施形態によっては、各マスク要素は単一のマスクビットの場合がある。あるいは２つ以上のビットが、各マスク要素に対して随意に用いられる場合もある。マスク要素はそれぞれ、対応する結果が対応位置に記憶されるかに関わらず、プレディケート、条件付き制御、マスクするため用いられる場合がある。一側面では、マスク要素はそれぞれ、オペランド内の同じ相対位置にある結果パックデータ・オペランドの対応するレーンの複数のサブレーンサイズの部分の異なる部分に対応する場合もある。実施形態によっては、結果パックデータ・オペランドの対応するサブレーンサイズの部分のそれぞれは、対応するレーンに対するビット選択要素のサブセットが選択するすべてのビットを保持するのに十分なビット幅を備える場合がある（たとえば、Ｂ０〜Ｂ７が選択するすべてのビットを保持するのに十分な場合がある）。示された実施形態において、マスクのビット［０］は結果パックデータ・オペランドのビット［７：０］に対応し、マスクのビット［１］は結果パックデータ・オペランドのビット［１５：８］に対応するなどの場合がある。
【００６３】
各マスクビット値は、対応する結果が、結果パックデータ・オペランドの対応するサブレーンサイズの部分に記憶されうるかを制御する場合がある。各マスクビットは、結果が記憶されるのを可能とする第１の値か、結果が記憶されるのを可能としない第２の異なる値のいずれかを備える場合がある。図に示される考えられる慣習にしたがい、バイナリゼロ（すなわち０）にクリアされたマスクビットは、結果が記憶されないマスクをかけるマスクビットを表し、バイナリワン（すなわち１）にセットされたマスクビットは、結果が記憶されるマスクしないマスクビットを表す場合がある。反対の慣習もありうる。さらに特定の実施に望ましい任意のマスク値が、結果を記憶するしないを指定する習慣で用いられる場合がある。示された実施形態において、マスクのビット［４］はバイナリワンに設定され（すなわち１）、よってマスクされず、ビット［３：０］およびビット［７：５］はすべてゼロにクリアされ（すなわち０）、よってマスクがかけられる。
【００６４】
結果パックデータ・オペランド８１４は、マスクビットシャッフル命令に応じて生成され（たとえば実行ユニットによって）、デスティネーション記憶位置に記憶される場合がある。様々な実施形態によっては、デスティネーション記憶位置は、パックデータ・レジスタ、メモリ位置、または他の記憶位置の場合がある。この実施例に関しては、マスクのうちマスクされないビット［４］に対応する結果パックデータ・オペランドのビット［３９：３２］だけが結果を記憶する場合がある。実施形態によっては、記憶がマスク要素によってプレディケートされる結果は、第２のソースパックデータ・オペランドビット選択要素の対応するサブセット（たとえばＢ０〜Ｂ７）が選択する第１のソースパックデータ・オペランドの対応するレーン（たとえば６４ビットレーン８３２）の一組のビットの場合がある。たとえば、結果パックデータ・オペランドのビット［３９：３２］だけがＢ０〜Ｂ７が選択するＱＷＯＲＤ０の８ビットを記憶する場合がある。その一方、マスクのマスクをかけるビット［３：０］およびビット［７：５］に対応する結果パックデータ・オペランドのビット［３１：０］およびビット［６３：４０］は、結果を記憶しない場合がある。むしろこれらのビットは、マスクをかける値を記憶する場合がある。様々な固定または所定値が、マスクをかける値に用いられる場合がある。実施形態によっては、随意に、ゼロ化マスキングが用いられる。ゼロ化マスキングでは、結果パックデータ・オペランドのマスクをかけるビットは、ゼロをかける場合がある（たとえば、強制的にゼロ値にする）。他の実施形態では、結合マスキングが用いられる場合がある。結合マスキングでは、結果パックデータ・オペランドのマスクをかけるビットは、ソースパックデータ・オペランドの対応ビットの値（たとえば、第１のソースパックデータ・オペランド）を備える場合がある。たとえば、同じビット位置の第１のパックデータ・オペランドの対応ビットは、結果パックデータ・オペランドの同じビット位置に記憶される場合がある。結合マスキングの一可能な効果は、新しい結果を、命令の先行例からの結果と結合または同化するために用いられる場合があることである。実施形態によっては、メモリオペランドが要素選択に対応している場合、マスクは、マスクがはずされたメモリ中の要素に関係しないようにし関連するメモリの障害が信号化されないようにすることで、メモリ障害抑制のためにも随意に用いられる場合があるが、これは必須ではない。
【００６５】
先に記載したマスキングは、プレディケーションまたはマスキングだけでなく、図７で記載した複製の両方を組み込む場合がある。この実施例では、単一のマスク要素だけがマスクされていないが、一つ以上のマスク要素がマスクされていない場合は、選択されたビットの複製コピーが結果パックデータ・オペランドのそれぞれ対応するサブレーンサイズの部分に記憶される場合がある。この複製および／またはマスキングの一可能な効果は、望ましいまたは効率的な位置にあるビットの組の一つがさらなる処理のために選択される場合があることである。いいかえると、複製およびマスキングは、結果パックデータ・オペランドの対応レーン内の望ましい位置に選択されたビットの組を配置するのに用いられる場合がある。これは、異なる実施形態中で、異なる方法で用いられる場合がある。一具体的な実施例として、複数の異なるマスクビットシャッフル命令がそれぞれ、異なるサブセットまたは値のビット部分をシャッフルするのに用いられる場合がある。たとえば、マスクビットシャッフル命令の８つのインスタンスは、それぞれ６４ビット値の８ビットの異なる組をシャッフルするのに用いられる場合がある。複製およびマスキングの考えられる一つの長所は、命令が選択したビットの組をレーンの適切な位置に効果的に移動することで、その結果、他の命令が選択するビットとの結合または組み合わせは容易または効率的にできるようになることである。たとえば、複製およびマスキングは、８ビットの一組を結果パックデータ・オペランドのビットレーン［７：０］に配置し、８ビットの別の組を結果パックデータ・オペランドのビットレーン［１５：８］に配置し、８ビットのさらに別の組を結果パックデータ・オペランドのビットレーン［２３：１６］に配置するなどのための用いられる場合がある。これは選択されたビットの異なる組を結合し、全６４ビットのビットシャッフル結果を形成する速度および／または効率を上げるのに役立つ場合がある。他の使用は、当業者および本発明の開示の利益を有するには明白である。他の実施形態によっては、マスキングの代わりに、複製されたビットの組を保持する位置を指定または指示するため、命令のイミディエイト（たとえば８ビットのイミディエイトｉｍｍ８）が用いられる場合があり、レーンの他のすべての位置は、所定値（たとえは０、結合値など）を備えている場合がある。たとえばイミディエイトは複製ビット３番目の最下位組に記憶された複製ビットセットを備えるため値３を指定する場合があり、レーンの他のすべてのビットは０にする。
【００６６】
ある概念をさらに説明するため、ビットシャッフル命令が結果パックデータ・オペランドを記憶する以下の詳細な例示的な実施形態を検討する。この命令の名前はＶＰＳＨＵＦＢＩＴＱＢであり、オペランドとしてＤＥＳＴ、ＭＳＫ、ＳＲＣ１およびＳＲＣ２を備える。実施形態では、この命令によってＳＲＣ１はパックデータ・レジスタになり、ＳＲＣ２はパックデータ・レジスタかメモリ位置のいずれかになり、ＤＥＳＴはパックデータ・レジスタになり、ＭＳＫはソースパックデータ演算マスクレジスタになる場合がある。表２は、この命令のいくつか異なる実施形態での命令コード、符号化、演算記述の一覧表である。    表２．ＶＰＳＨＵＦＢＩＴＱＢ−パッククワドワード整数のシャットルビット−パックレジスタデスティネーション
【表２】
0006526175.tif 000003
【００６７】
Ｘｍｍ、ｙｍｍ、およびｚｍｍはそれぞれ１２８ビット、２５６ビット、および５１２ビットのパックデータ・レジスタを表す。ｍ１２８／ｍ２５６／ｍ５１２はそれぞれ、１２８ビット、２５６ビット、および５１２ビットのメモリ位置を指す。ｍ６４ｂｃｓｔは、６４ビットのメモリ位置を指し、そこでベクトルの複数要素へのデータ要素ブロードキャストが実行される。｛ｋ１｝オペランドは、ソースプレディケートマスクとして用いられるソースマスクレジスタ（たとえばマスクレジスタｋ０〜ｋ７の一つ）を指定する。
【００６８】
ＶＰＳＨＵＦＢＩＴＱＢ命令は、後述のいくつかの例外はあるが、上記記載のＶＰＳＨＵＦＢＩＴＱＭＢ命令に類似する場合がある。違いの一つは、ＤＥＳＴがマスクレジスタの代わりにパックデータ・レジスタ（たとえばｘｍｍ１、ｙｍｍ１またはｚｍｍ１）の場合がある。別の違いとして、命令は随意のソースプレディケートマスクオペランド（たとえば｛ＭＳＫ｝、｛ｋｌ｝）を備えているが、これは必須ではない。上記記載のように、ＳＲＣ１はパックデータ・レジスタの場合があり、ＳＲＣ２はパックデータ・レジスタまたはメモリ位置のいずれかの場合がある。
【００６９】
ＶＰＳＨＵＦＢＩＴＱＢ命令の一実施形態の擬似コードの実施例が以下に示される。ＳＲＣ１は第１のソースパックデータ・オペランドを表し、ＳＲＣ２は第２のソースパックデータ・オペランドを表し、ＤＥＳＴはデスティネーションを表す。Ｋｌオペランドは、プレディケーションに用いられるソースパックデータ演算マスクレジスタを表す。擬似コードでは、ＫＬはマスク長および／またはパックデータ・オペランド内の複数のデータ要素位置を表し、ＶＬはベクトルまたはパックデータ・オペランド長を表し、「ｉ」はクワドワードまたはレーンを選択し反復用に用いられる位置カウンタを表し、「ｊ」はレーン内でバイトを選択する位置カウンタを表す。ＥＶＥＸ．ｂ＝＝１は、ＳＲＣ２＊がメモリ＊の場合は、組み込みブロードキャストを設定する。パラメータ「Ｍ」は、ＳＲＣ１の適切なバイトによって指示されるＳＲＣ２の適切なクワドワード内のビット位置を表す。他の実施形態は、異なる組のマイクロアーキテクチャ演算を用いて、この命令を実施する場合がある。この擬似コードでは、ゼロ化型マスキング「＊ゼロ化＊」または結合型マスキング「＊変化なし＊」のいずれかが用いられる場合がある。結果のすべての対応する６４ビットを通して選択される８ビットの複製は、随意に用いられる場合がある。VPSHUFBITQB DEST, SRC1, SRC2 (KL, VL) = (16, 128), (32, 256), (64, 512)FORj←O TO KL/8 - 1 ; Qword    BYTE_TEMP ←0    FOR j ←0 TO 7 ; Byte      IF EVEX.b AND SRC2 *is memory*      THEN        DATA[63:0] ←SRC2. qword [0] ;      ELSE DATA[63:0] ← SRC2. qword [i] ;      ENDIF        M ←SRCl.qword[i].byte[j] & 0x3F;      BIT ← DATA[M]      BYTE_TEMP[j] ← BIT    ENDFOR;    FOR j ← 0 TO 7      IF Kl [i*8+j]      THEN        DEST.qword[i].byte[j] ← BYTE_TEMP;      ELSIF *zeroing*        DEST.qword[i].byte[j] ← 0;      ELSE        DEST.qword[i].byte[j] *remains unchanged *      ENDIF;    ENDFOR;ENDFOR;DEST[MAX_VL-1 :VL] ←0;
【００７０】
当然のことだが、これらは適切な命令のほんの一例の実施形態にすぎない。他の実施形態では、もっと狭いか（たとえば６４ビット）もっと広いか（たとえば１０２４ビット）ただサイズが異なっているかのパックデータ・オペランドのいずれかを用いる場合がある。さらに他の実施形態では、クワドワードサイズのレーン以外に異なるサイズのレーン（たとえば１６ビットまたは３２ビットのレーン）および／または異なるサイズの指標（たとえば４ビットニブルの指標、５ビットの指標など）を用いる場合がある。別の実施形態では、オペランドに他の記憶位置（たとえばメモリ位置）を用いる場合がある。他の実施形態では、随意に、マスキング／プレディケーションを省く場合がある。他の実施形態では、随意に、データ要素ブロードキャストを省く場合がある。
【００７１】
図９はビットシャッフル命令９０２の一実施形態のブロック図である。命令は、演算コードつまり命令コード９８４を含む。命令コードは、命令および実行する演算を特定できる複数のビットまたは一つ以上のフィールドを表す場合がある。
【００７２】
命令は、第１のソースオペランドを記憶するのに用いるレジスタ、メモリ位置、または他の記憶位置を明示的に指定する第１のソースオペランド指定子９８５と、第２のソースオペランドを記憶するのに用いるレジスタまたは他の記憶位置を明示的に指定する第２のソースオペランド指定子９８６、および結果オペランドが記憶されるレジスタまたは他の記憶位置を明示的に指定するデスティネーションオペランド指定子９８７も含む。実施例として、これらの指定子のそれぞれは、レジスタ、メモリ位置、または他の記憶位置のアドレスを明示帝に指定するビットの組または一つ以上のフィールドを含む場合がある。あるいは一つ以上の黙示的な記憶位置が、これらのオペランドの一つ以上に関して用いられる場合がある。たとえば、命令コードに所定の固定レジスタを用いることは命令のコードには黙示的となる場合がある。別の実施例として、レジスタを初期にはソースオペランドに再利用し、それから結果オペランドに再利用することは黙示的となる場合がある（たとえば黙示的ソース／デスティネーションレジスタ）。
【００７３】
実施形態によっては、命令はパックデータ演算マスクまたは記憶位置（たとえばマスクレジスタ）を明示的に指定する随意的なパックデータ演算マスク指定子９８８を含む場合がある。あるいは、パックデータ演算マスクは黙示的に指示される場合もある。実施形態によっては、命令フォーマットは、マスキング演算の種類を指定するため、随意的な種類のマスキング演算指定子９８９も含む場合がある。実施例として、マスキング演算指定子の種類は、結合マスキングかゼロ化マスキングが実行されるかを指定する単一ビットを含む場合がある。マスキングは必須ではなく、随意である。
【００７４】
命令がデータ要素ブロードキャストを用いる実施形態では、命令は随意的にデータ要素ブロードキャスト制御９９０を含む場合がある。データ要素ブロードキャスト制御は、データ要素ブロードキャストが実行され、記憶位置（たとえばメモリ位置）からアクセスされる単一のソースデータ要素をビットシャッフル演算が用いる複数のソースデータ要素（たとえば仮のレジスタ）へブロードキャストすることを指示する一つ以上のビットまたはフィールドを含む場合がある。あるいは、データ要素ブロードキャストは明示的に指定される代わりに、命令に対して黙示的（たとえば命令コードへ黙示的）な場合もある。上記記載のように、データ要素ブロードキャストは、随意的であり必須ではない。
【００７５】
これは適切なビットシャッフル命令の本の一例である。別の実施形態は、示されたフィールド／指定子のサブセットを含む、追加のフィールド／指定子を加える、あるフィールド／指定子が重複しているなどの場合がある。加えて、示されたフィールド／指定子の順序および配列は必須ではない。フィールド／指定子は様々に再配置される場合がある。加えて、フィールド／指定子は隣接し連続したビットを含む必要はなく、むしろ隣接しないまたは別々のビットを含む場合がある。実施形態によっては、命令フォーマットはＶＥＸまたはＥＶＥＸ符号化または命令フォーマットを備える場合があるが、発明の範囲は限定するものではない。
【００７６】
図１０は、パックデータ・レジスタ１００８の適切な一組の一例の実施形態のブロック図である。パックデータ・レジスタは、ＺＭＭ０〜ＺＭＭ３１までの名前が付いた３２個の５１２ビットパックデータ・レジスタを含む。示された実施形態では、下の方１６のレジスタ、つまりＺＭＭ０〜ＺＭＭ１５の下位２５６ビットは、ＹＭＭ０〜ＹＭＭ１５までの名前が付いた２５６ビットのパックデータ・レジスタそれぞれと別名がつけられて重なっているが、これは必須ではない。同様に示された実施形態では、レジスタＹＭＭ０〜ＹＭＭ１５の下位１２８ビットは、ＸＭＭ０〜ＸＭＭ１５までの名前が付いた１２８ビットのバックデータ・レジスタそれぞれと別名がつけられて重なっているが、これも必須ではない。５１２ビットのレジスタＺＭＭ０〜ＺＭＭ３１までは、５１２ビットのパックデータ、２５６ビットのパックデータ、または１２８ビットのパックデータを保持できる。２５６ビットのレジスタＹＭＭ０〜ＹＭＭ１５は、２５６ビットのパックデータまたは１２８ビットのパックデータを保持できる。１２８ビットのレジスタＸＭＭ０〜ＸＭＭ１５は、１２８ビットのパックデータを保持できる。実施形態によっては、レジスタのそれぞれは、パック浮動小数点データまたはパック整数データを記憶するために用いられる場合がある。異なるデータ要素サイズは対応されており、少なくとも８ビットバイトデータ、１６ビットワードデータ、３２ビットダブルワード、３２ビット単精度浮動小数点データ、６４ビットクワドワード、および６４ビット倍精度浮動小数点データを含んでいる。別の実施形態では、異なる数のレジスタおよび／または異なるサイズのレジスタが用いられる場合もある。さらに他の実施形態では、レジスタが小さいレジスタ上で、大きなレジスタの別名を用いる場合もあれば、ない場合もあり、および／または浮動小数点データを記憶するために用いる場合もあれば、ない場合もある。
【００７７】
図１１はパックデータ演算マスクレジスタ１１１６の適切な一組の一例の実施例のブロック図である。示された実施形態では、一組は、ｋ０〜ｋ７の名前が付けられた８つのレジスタを含む。別の実施形態は、８つのレジスタより少ないか（たとえば２，４，６など）、８つのレジスタより多い（たとえば１６、３２など）いずれかを含む場合がある。これらのレジスタのそれぞれは、パックデータ演算マスクを記憶するため用いられる場合がある。示された実施形態では、各レジスタは６４ビットである。別の実施形態では、レジスタの幅は、６４ビットより広いか（たとえば８０ビット、１２８ビットなど）、６４ビットより狭いか（たとえば８ビット、１６ビット、３２ビットなど）のいずれかの場合である。レジスタは、公知の技術を使って異なる方法で実施される場合があるが、公知である特定の種類の回路に限定されるものではない。適切なレジスタの実施例は、専用物理レジスタ、レジスタリネーミングを使い動的に割当てられる物理レジスタ、およびこの組み合わせを含むが、これに限定するものではない。
【００７８】
実施形態では、パックデータ演算マスクレジスタ１０１６は、別々で専用の一組のアーキテクチャ上のレジスタである場合がある。実施形態によっては、命令は、他の種類のレジスタを符号化または指定するために用いるものとは異なる命令フォーマットのビットまたは一つ以上のフィールドで、パックデータ演算マスクレジスタを符号化または指定する場合がある。実施例として、８個のパックデータ演算マスクレジスタｋ０〜ｋ７の任意の一つを符号化または指定するため、３ビット（たとえば３ビットフィールド）を用いる場合がある。一特定の実施では、パックデータ演算マスクレジスタｋ１〜ｋ７（ｋ０ではない）だけがプレディケートオペランドとしてアドレス指定され、マスクされたパックデータ演算をプレディケートする場合がある。レジスタｋ０は正常なソースまたはデスティネーションとして用いられ、プレディケートオペランドとして符号化される場合はないが（たとえばｋ０が指定された場合、「マスク不可」で符号化される）、これは必須ではない。
【００７９】
図１２は、パックデータ演算マスクレジスタ１２１６および異なるサイズのパックデータ・オペランドに用いられる複数のマスクビットを示す。一側面では、これらのビットはプレディケーション用に用いられる場合がある。別の側面では、これらのビットは結果ビットを記憶するために用いられる場合がある。示される実施例は、８ビットデータ要素を検討する（たとえば８ビットバイトサイズのビット選択要素）。図のように、１６の最下位ビットは、８ビットのデータ要素を備える１２８ビットのパックデータに用いられ、３２の最下位ビットは、８ビットのデータ要素を備える２５６ビットのパックデータに用いられ、または６４ビットすべては、８ビットのデータ要素を備える５１２ビットのパックデータに用いられる場合がある。４ビットニブルのビット選択要素が用いられ、パックデータ・オペランドの所定バイトに２つのニブルが含まれる場合は、２倍の数のマスクビットが用いられる場合がある。
【００８０】
命令セットは、一つ以上の命令フォーマットを含む。所定の命令フォーマットは、様々なフィールド（ビット数、ビット位置）を画定し、中でも実行される演算（命令コード）および演算が実行されるオペランドを指定する。命令フォーマットのあるものは、命令テンプレート（または下位フォーマット）の定義により、さらに分解される。たとえば、所定の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを備えるよう画定され、および／または異なるように解釈される所定のフィールドを備えるように画定される場合がある。したがって、ＩＳＡの各命令は、所定の命令フォーマットを使って（および画定されている場合は、その命令フォーマットの命令テンプレートの所定の一つで）表され、演算とオペランドを指定するフィールドを含む。たとえば例示的なＡＤＤ命令は、具体的な命令コードと、命令コードを指定する命令フィールドとオペランドを選択するオペランドフィールドを含む命令フォーマット（ソース１／デスティネーションおよびソース２）を備え、命令ストリームでこのＡＤＤ命令が発生すると、具体的オペランドを選択するオペランドフィールド内に具体的コンテンツを備える。アドバンスト・ベクトル・エクステンション（ＡＶＸ）（ＡＶＸ１およびＡＶＸ２）と呼ばれベクトルエクステンション（ＶＥＸ）符号化体系を用いるＳＩＭＤ拡張セットはリリースされおよび／または公開されている（たとえば、Intel 64 and IA-32 Architectures Software Developers Manual（２０１１年１０月）およびIntel Advanced Vector Extensions Programming Reference（２０１１年６月）を参照）。
【００８１】
［例示的な命令フォーマット］
ここに記載する命令の実施形態は異なるフォーマットで具現化される場合もある。さらに例示的システム、アーキテクチャ、およびパイプラインは以下で詳しく記載される。命令の実施形態は、このシステム、アーキテクチャおよびパイプライン上で実行される場合があるが、この詳細な説明に限定するものではない。
【００８２】
［ＶＥＸ命令フォーマット］
ＶＥＸ符号化によって、命令は２つ以上のオペランドを備え、ＳＩＭＤベクトルレジスタを１２８ビットより長くできる。ＶＥＸプリフィックスを使用すると、３つ（あるいはもっと多く）のオペランド構文が可能になる。たとえば以前の２つのオペランド命令は、ソースオペランドを上書きするＡ＝Ａ＋Ｂなどの命令を実行した。ＶＥＸプリフィックスを使用すると、Ａ＝Ｂ＋Ｃなどの非破壊演算を実行できる。
【００８３】
図１３Ａは、ＶＥＸプリフィックス１３０２、実命令コードフィールド１３３０、Ｍｏｄ  Ｒ／Ｍ  バイト１３４０、ＳＩＢバイト１３５０、ディスプレースメントフィールド１３６２、およびＩＭＭ８  １３７２を含む例示的ＡＶＸ命令フォーマットを示す。図１３Ｂは、図１３Ａからどのフィールドがフル命令コードフィールド１３７４およびベース演算フィールド１３４２を構成するかを示す。図１３Ｃは、図１３Ａからどのフィールドがレジスタ指標フィールド１３４４を校正するかを示す。
【００８４】
ＶＥＸプリフィックス（バイト０〜２）１３０２は、３バイト形式で符号化される。第１のバイトは、明示的にＣ４バイト値（Ｃ４命令フォーマットを区別するのに用いられる固有値）を含むフォーマットフィールド１３４０（ＶＥＸバイト０、ビット［７：０］）である。第２から第３のバイト（ＶＥＸバイト１からバイト２）は具体的機能を提供する多くのビットフィールドを含む。具体的には、ＲＥＸフィールド１３０５（ＶＥＸバイト１、ビット［７〜５］は、ＶＥＸ．Ｒビットフィールド（ＶＥＸバイト１、ビット［７］−Ｒ）、ＶＥＸ．Ｘビットフィールド（ＶＥＸバイト１、ビット［６］−Ｘ）、ＶＥＸ．Ｂビットフィールド（ＶＥＸバイト１、ビット［５］−Ｂ）から成る。命令の他のフィールドは、当技術分野で周知なレジスタ指標（ｒｒｒ、ｘｘｘ、およびｂｂｂ）の下位３ビットを符号化し、結果としてＶＥＸ．Ｒ、ＶＥＸ．Ｘ、およびＶＥＸ．Ｂを加えてＲｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂを形成する場合がある。命令コードマップフィールド１３１５（ＶＥＸバイト１、ビット［４：０］−ｍｍｍｍｍ）は、暗黙の先頭命令コードバイトを符号化するコンテンツを含む。Ｗフィールド１３６４（ＶＥＸバイト２、ビット［７］−Ｗ）は、表記ＶＥＸ．Ｗで表され、命令による異なる機能を提供する。ＶＥＸ．ｖｖｖｖ１３２０（ＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）の役割は、以下を含む場合がある。１）ＶＥＸ．ｖｖｖｖは反転形式（１の補数）で指定された第１のソースレジスタオペランドを符号化し、２つ以上のオペランドを備えた命令に有効である、２）あるベクトルシフトに関して１の補数形式で指定されたデスティネーションレジスタオペランドを符号化する、または３）ＶＥＸ．ｖｖｖｖはいかなるオペランドも符号化せず、フィールドを蓄えておき、１１１１ｂを含むようにする。
【００８５】
ＶＥＸ．Ｌ１３６８サイズフィールド（ＶＥＸバイト２、ビット［２］−Ｌ）＝０の場合、それは１２８ビットベクトルを示し、ＶＥＸ．Ｌ＝１の場合は、それは２５６ビットベクトルを示す。プリフィックス符号化フィールド１３２５（ＶＥＸバイト２、ビット［１：０］−ｐｐ）はベース演算フィールドに対し追加ビットを与える。
【００８６】
実命令コードフィールド１３３０（バイト３）は、命令コードバイトとしても周知である。命令コードの部分はこのフィールドで指定される。
【００８７】
ＭＯＤ  Ｒ／Ｍ  フィールド１３４０（バイト４）は、ＭＯＤフィールド１３４２（ビット［７〜６］、Ｒｅｇフィールド１３４４（ビット［５〜３］）、およびＲ／Ｍフィールド１３４６（ビット［２〜０］）を含む。Ｒｅｇフィールド１３４４の役割は、以下を含む場合がある。デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかを符号化する、または命令コード拡張として扱われ、いかなる命令オペランドも符号化するためには用いられない。Ｒ／Ｍフィールド１３４６の役割は、以下を含む場合がある。メモリアドレスを参照する命令オペランドを符号化する、またはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかを符号化する。
【００８８】
スケール、指標、ベース（ＳＩＢ）−スケールフィールド１３５０（バイト５）のコンテンツは、メモリアドレス生成に用いられるＳＳ１３５２（ビット［７〜６］）を含む。ＳＩＢ．ｘｘｘ１３５４（ビット［５〜３］）およびＳＩＢ．ｂｂｂ１３５６（ビット［２〜０］）のコンテンツは、レジスタ指標ＸｘｘｘおよびＢｂｂｂに関して先に言及している。
【００８９】
ディスプレースメントフィールド１３６２とイミディエイトフィールド（ＩＭＭ８）１３７２はアドレスデータを含む。
【００９０】
［汎用的なベクトルを扱いやすい命令フォーマット］
ベクトルを扱いやすい命令フォーマットは、ベクトル命令に適した命令フォーマットである（たとえばベクトル演算に特有なあるフィールドがある）。ベクトルとスカラー演算両方を、ベクトルを扱いやすい命令フォーマットで対応する実施形態が記載されるが、別の実施形態は、ベクトルを扱いやすい命令フォーマットでベクトル演算のみに対応する。
【００９１】
図１４Ａ、図１４Ｂは、本発明の実施形態による汎用的なベクトルを扱いやすい命令フォーマットおよびその命令テンプレートを示すブロック図である。図１４Ａは、本発明の実施形態による汎用的なベクトルを扱いやすい命令フォーマットおよびそのクラスＡの命令テンプレートを示すブロック図であり、一方図１４Ｂは、汎用的なベクトルを扱いやすい命令フォーマットおよびそのクラスＢの命令テンプレートを示すブロック図である。具体的には、汎用的なベクトルを扱いやすい命令フォーマット１４００に関してクラスＡおよびクラスＢの命令テンプレートが画定されるが、両方ともメモリアクセスなし１４０５命令テンプレートとメモリアクセス１４２０命令テンプレートを含む。ベクトルを扱いやすい命令フォーマットとの関係での汎用という用語は、いかなる具体的な命令セットにも縛られない命令フォーマットを指している。
【００９２】
発明の実施形態が記載され、その中でベクトルを扱いやすい命令フォーマットは以下に対応する。３２ビット（４バイト）または６４ビット（８バイト）データ要素幅を備えた６４バイトのベクトルオペランド長（またはサイズ）（よって、１６ダブルワードサイズの要素あるいは８クワドワードサイズの要素を含む６４バイトのベクトル）、１６ビット（２バイト）または８ビット（１バイト）のデータ要素幅を備えた６４バイトのベクトルオペランド長（またはサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）のデータ要素幅を備えた３２バイトベクトルオペランド長（またはサイズ）、および３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）のデータ要素幅を備えた１６バイトベクトルオペランド長（またはサイズ）、一方、別の実施形態は、多い少ないまたは異なるデータ要素幅（たとえば１２８ビット（１６バイト）のデータ要素幅）を備えた多い少ないおよび／または異なるベクトルオペランドサイズ（たとえば２５６バイトのベクトルオペランド）に対応する場合がある。
【００９３】
図１４ＡでクラスＡの命令テンプレートは、以下を含む。１）メモリアクセスなし１４０５命令テンプレート内では、メモリアクセスなし、フルラウンド型演算１４１０命令テンプレートと、メモリアクセスなし、データ変換型演算１４１５命令テンプレートが示され、さらに２）メモリアクセス１４２０命令テンプレート内では、メモリアクセス、一時的１４２５命令テンプレートと、メモリアクセス、非一時的１４３０命令テンプレートが示される。図１４ＢでクラスＢの命令テンプレートは、以下を含む。１）メモリアクセスなし１４０５命令テンプレート内では、メモリアクセスなし、マスク書き込み制御、パーシャルラウンド型演算１４１２命令テンプレートと、メモリアクセスなし、マスク書き込み制御、ＶＳＩＺＥ型演算１４１７命令テンプレートが示され、さらに２）メモリアクセス１４２０命令テンプレート内では、メモリアクセス、マスク書き込み制御１４２７命令テンプレートが示される。
【００９４】
汎用的なベクトルを扱いやすい命令フォーマット１４００は、図１４Ａ、図１４Ｂに示される順番で以下に記載されるフィールドを含む。
【００９５】
フォーマットフィールド１４４０−このフィールドの特定値は、ベクトルを扱いやすい命令フォーマットを一意に特定し、よって命令ストリームでベクトルを扱いやすい命令フォーマットでの命令が発生したことを一意に特定する。このフィールドは、汎用的なベクトルを扱いやすい命令フォーマットのみを有する命令セットを必要としない、という意味では、必須ではない。
【００９６】
ベース演算フィールド１４４２−このコンテンツは、異なるベース演算を区別する。
【００９７】
レジスタ指標フィールド１４４４−このコンテンツは、ソースまたはデスティネーションオペランドの位置を、それらがレジスタまたはメモリ内にある場合に直接的またはアドレス生成により指定する。これらは、ＰｘＱ（たとえば３２×５１２、１６×１２８、３２×１０２４、６４×１０２４）レジスタファイルからＮ個のレジスタを選択するため、十分多くのビットを含む。一実施形態では、Ｎは３つのソースと１つのデスティネーションレジスタまでの場合があり、別の実施形態では多いか少ないソースレジスタとデスティネーションレジスタに対応する場合がある（たとえば２つのソースレジスタまで対応し、このソースレジスタの一つはデスティネーションとしても作動する場合、３つのソースレジスタまで対応し、この減の一つはデスティネーションとしても作動する場合、２つのソースレジスタと一つのデスティネーションまで対応する場合がある）。
【００９８】
変更フィールド１４４６−このコンテンツは、ベクトルを扱いやすい命令フォーマットでメモリアクセスを指定する命令の発生と、そうでないものの発生を区別することで、つまりメモリアクセスなし１４０５命令テンプレートとメモリアクセス１４２０命令テンプレートの間の区別をすることである。メモリアクセス演算は、メモリ階層へ読み出しおよび／または書き出しを行い（場合によっては、レジスタ内の値を使い、ソースおよび／またはデスティネーションアドレスを指定する）、一方メモリアクセスなし演算は行わない（たとえば、ソースおよびデスティネーションはレジスタである）。また一実施形態では、このフィールドは、メモリアドレス計算を実行するため３つの異なる方法から選択するが、別の実施形態は、メモリアドレス計算を実行するため、それより多い、少ない、または異なる方法で対応する場合がある。
【００９９】
拡張演算フィールド１４５０−このコンテンツは、ベース演算に加えて、様々に異なる演算のどの一つを実行するか区別する。このフィールドは、状況に固有である。本発明の一実施形態では、このフィールドはクラスフィールド１４６８、アルファフィールド１４５２、およびベータフィールド１４５４に分割されている。拡張演算フィールド１４５０によって、演算の共通グループは２，３、または４つの命令ではなく単一の命令で実行されるようになる。
【０１００】
スケールフィールド１４６０−このコンテンツは、メモリアドレス生成に関して指標フィールドのコンテンツのスケーリングを可能にする（たとえば２スケール×指標＋ベースを用いるアドレス生成に関して）。
【０１０１】
ディスプレースメントフィールド１４６２Ａ−このコンテンツはメモリアドレス生成の部分として用いられる（たとえば２スケール×指標＋ベース＋ディスプレースメントを用いるアドレス生成に関して）。
【０１０２】
ディスプレースメント因子フィールド１４６２Ｂ（なお、ディスプレースメント因子フィールド１４６２Ｂの上に直接ディスプレースメントフィールド１４６２Ａが並置してあるのは、一方または他方が用いられることを示す）−このコンテンツはアドレス生成の一部として用いられ、メモリアクセスのサイズ（Ｎ）によってスケーリングされるディスプレースメント因子を指定し、Ｎはメモリアクセスのバイト数である（たとえば、２スケール×指標＋ベース＋スケーリングされたディスプレースメントを用いるアドレス生成に関して）。冗長な下位ビットは無視され、よってディスプレースメント因子フィールドのコンテンツは、有効なアドレスを計算するのに用いられる最終ディスプレースメントを生成するため、メモリオペランド総サイズ（Ｎ）を掛ける。Ｎ値は、フル命令コードフィールド１４７４（後に記載する）とデータ操作フィールド１４５４Ｃに基づき、実行時にプロセッサであるハードウェアによって決定される。ディスプレースメントフィールド１４６２Ａおよびディスプレースメント因子フィールド１４６２Ｂは、メモリアクセスなし１４０５命令テンプレートに対して用いられない、および／または異なる実施形態が一つのみを実装するか、２つのいずれも実装しないとう点では、随意的である。
【０１０３】
データ要素幅フィールド１４６４−このコンテンツは、複数のデータ要素幅のどの一つを用いるのかを決定する（実施形態によっては、すべての命令に関して。他の実施形態によっては、命令のうちのいくつかだけに関して）。一つだけのデータ要素幅が対応される場合、および／またはデータ要素幅が、命令コードの側面を使って対応される場合には必要ではないという点で、このフィールドは随意的である。
【０１０４】
書き込みマスクフィールド１４７０−このコンテンツは、データ要素位置ごとに、デスティネーションベクトルオペランド内のデータ要素位置が、ベース演算および拡張演算の結果に反映するかを制御する。クラスＡの命令テンプレートは、結合書き込みマスキングに対応し、一方クラスＢの命令テンプレートは、結合およびゼロ化書き込みマスキング両方に対応する。結合時、ベクトルマスクによって、デスティネーション内の任意の組の要素は、（ベース演算と拡張演算により特定される）任意の演算実行中の更新からは保護され、他の一実施形態では、対応するマスクビットが０であるデスティネーションの各要素の古い値を維持する。一方、ゼロ化時、ベクトルマスクによって、デスティネーション内の任意の組の要素は、（ベース演算と拡張演算により特定される）任意の演算実行中にゼロ化され、他の一実施形態では、対応するマスクビットが０である時、デスティネーションの要素は０に設定される。この機能のサブセットは、実行される演算のベクトル長（つまり最初から最後まで、要素が変更される期間）を制御できることだが、但し、変更される要素は連続している必要はない。したがって、書き込みマスクフィールド１４７０によって、ロード、記憶、算術、論理などの部分的ベクトル演算が可能となる。発明の実施形態が記載され、その中で書き込みマスクフィールド１４７０のコンテンツは、用いられる書き込みマスクを含む複数の書き込みマスクレジスタの一つを選択し（こうして書き込みマスクフィールド１４７０のコンテンツは、実行されるマスキングを間接的に特定する）、別の実施形態によってマスク書き込みフィールド１４７０のコンテンツは、代わりにあるいはさらに、実行されるマスキングを直接指定できる。
【０１０５】
即値フィールド１４７２−このコンテンツによって即値の指定が可能になる。このフィールドは、即値に対応しない汎用的なベクトルを扱いやすい命令フォーマットの実装には存在せず、即値を用いない命令では存在しないという点から、随意である。
【０１０６】
クラスフィールド１４６８−このコンテンツは異なるクラスの命令を区別する。図１４Ａ、図１４Ｂを参照すると、このフィールドのコンテンツは、クラスＡとクラスＢの命令から選択する。図１４Ａ、図１４Ｂでは、丸みのある角部を持つ四角形は、特定値がフィールドにあることを示すために用いられている。
【０１０７】
［クラスＡの命令テンプレート］
クラスＡのメモリアクセスなし１４０５命令テンプレートの場合、アルファフィールドは、ＲＳフィールド１４５２Ａと解釈され、そのコンテンツは異なる拡張演算型のどの一つが実行されるかを区別し（たとえば、丸め型１４５２Ａ．１およびデータ変換型１４５２Ａ．２はそれぞれメモリアクセスなし、丸め型演算１４１０と、メモリアクセスなし、データ変換型演算１４１５命令テンプレートに指定される）、一方ベータフィールド１４５４は、指定された型のどの一つが実行されるかを区別する。メモリアクセスなし１４０５命令テンプレートでは、スケールフィールド１４６０、ディスプレースメントフィールド１４６２Ａ、およびディスプレースメント因子フィールド１４６２Ｂは存在しない。
【０１０８】
［メモリアクセスなし命令テンプレート−全丸め制御型演算］
メモリアクセスなし全丸め制御型演算１４１０命令テンプレートでは、ベータフィールド１４５４は、丸め制御フィールド１４５４Ａとして解釈され、そのコンテンツは静的丸めを与える。本発明の記載された実施形態では、丸め制御フィールド１４５４Ａは、全浮動小数点例外の無効（ＳＡＥ）フィールド１４５６および丸め演算制御フィールド１４５８を含み、別の実施形態ではこれらの概念の両方に対応し符号化し、同じフィールドの中に入れるか、またはこれらの概念／フィールドのどれか一方だけを備える場合がある（たとえば丸め演算制御フィールド１４５８のみを備える場合がある）。
【０１０９】
ＳＡＥフィールド１４５６−このコンテンツは、例外イベントの報告を無効にするかしないかを区別する。ＳＡＥフィールド１４５６のコンテンツが、無効が有効であることを示す時は、所定の命令はいかなる種類の浮動小数点例外フラグを報告せず、いかなる浮動小数点例外ハンドラも上げない。
【０１１０】
丸め演算制御フィールド１４５８−このコンテンツは丸め演算のグループのどの一つが実行されるかを区別する（たとえば、切り上げ、切り下げ、ゼロに丸める、四捨五入）。したがって、丸め演算制御フィールド１４５８によって、命令毎により丸めモードの変更が可能になる。プロセッサが丸めモードを指定する制御レジスタを含む本発明の実施形態では、丸め演算制御フィールド１４５０のコンテンツが、レジスタ値に優先する。
【０１１１】
［メモリアクセスなし命令テンプレート−データ変換型演算］
メモリアクセスなしデータ変換型演算１４１５命令テンプレートでは、ベータフィールド１４５４は、データ変換フィールド１４５４Ｂと解釈され、そのコンテンツは複数のデータ変換のどの一つが実行されるかを区別する（たとえばデータ変換なし、スウィズル、ブロードキャスト）。
【０１１２】
クラスＡのメモリアクセス１４２０命令テンプレートの場合、アルファフィールド１４５２は、メモリエビクションヒントフィールド１４５２Ｂとして解釈され、そのコンテンツはエビクションヒントのどの一つが用いられるか（図１４Ａでは、一時的１４５２Ｂ．１および非一時的１４５２Ｂ．２がメモリアクセス、一時的１４２５命令テンプレートとメモリアクセス、非一時的１４３０命令テンプレートに対してそれぞれ指定される）を区別し、一方ベータフィールド１４５４はデータ操作フィールド１４５４Ｃと解釈され、そのコンテンツは複数のデータ操作演算（基本的なものとしても周知）のどの一つが実行されるかを区別する（たとえば操作なし、ブロードキャスト、ソースの上方変換、およびデスティネーションの下方変換）。メモリアクセス１４２０命令テンプレートには、スケールフィールド１４６０、および随意的に、ディスプレースメントフィールド１４６２Ａまたはディスプレースメント・スケール・フィールド１４６２Ｂを含む。
【０１１３】
ベクトルメモリ命令は、変換対応で、メモリからのベクトルロードおおびメモリへのベクトル記憶を実行する。正規のベクトル命令と同様に、ベクトルメモリ命令は、データ要素毎に、メモリからデータを移動し／メモリへデータを移動し、実際に移動される要素は、書き込みマスクとして選択されるベクトルマスクのコンテンツによって指示される。
【０１１４】
［メモリアクセス命令テンプレート−一時的］
一時データは、キャッシュの恩恵を受けるのに十分な速さで再利用される可能性があるデータである。但しこれは、ヒントであり、異なるプロセッサは、ヒントを全く無視するなど異なった方法で実施する場合がある。
【０１１５】
［メモリアクセス命令テンプレート−非一時的］
非一時的データは、一次レベルキャッシュでキャッシュの恩恵を受けるのに十分の速さで再利用される可能性はないデータであり、エビクションで優先されるようにする。但しこれは、ヒントであり、異なるプロセッサは、ヒントを全く無視するなど異なった方法で実施する場合がある。
【０１１６】
［クラスＢの命令テンプレート］
クラスＢの命令テンプレートの場合、アルファフィールド１４５２は、書き込みマスク制御（Ｚ）フィールド１４５２Ｃとして解釈され、そのコンテンツは書き込みマスクフィールド１４７０で制御される書き込みマスキングを結合にすべきかゼロ化にすべきかを区別する。
【０１１７】
クラスＢのメモリアクセスなし１４０５命令テンプレートの場合、ベータフィールド１４５４の一部は、ＲＬフィールド１４５７Ａとして解釈され、そのコンテンツは異なる拡張演算型のどの一つが実行されるか（たとえば丸め１４５７Ａ．１とベクトル超（ＶＳＩＺＥ）１４５７Ａ．２は、メモリアクセスなし、書き込みマスク制御、部分的丸め制御型演算１４１２命令テンプレートと、メモリアクセスなし、書き込みマスク制御、ＶＳＩＺＥ型演算１４１７命令テンプレートにそれぞれ指定される）を区別し、一方ベータフィールド１４５４の残りは、指定された型の演算のどれが実行されるかを区別する。メモリアクセスなし１４０５命令テンプレートでは、スケールフィールド１４６０、ディスプレースメントフィールド１４６２Ａ、およびディスプレースメント・スケール・フィールド１４６２Ｂは存在しない。
【０１１８】
メモリアクセスなしでは、書き込みマスク制御、部分的丸め制御型演算１４１０命令テンプレート、ベータフィールド１４５４の残りは、丸め演算フィールド１４５９Ａと解釈され、例外イベントの報告は無効になっている（所定の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも上げない。
【０１１９】
丸め演算制御フィールド１４５９Ａのコンテンツは、丸め演算制御フィールド１４５８と同じように、丸め演算のグループのどの一つが実行されるかを区別する（たとえば、切り上げ、切り下げ、ゼロに丸める、四捨五入）。したがって、丸め演算制御フィールド１４５９Ａによって、命令毎により丸めモードの変更が可能になる。プロセッサが丸めモードを指定する制御レジスタを含む本発明の実施形態では、丸め演算制御フィールド１４５０のコンテンツが、レジスタ値に優先する。
【０１２０】
メモリアクセスなし、書き込みマスク制御、ＶＳＩＺＥ型演算１４１７命令テンプレートの場合、ベータフィールド１４５４の残りはベクトル長フィールド１４５９Ｂと解釈され、そのコンテンツは複数のデータベクトル長のどれが実行されるかを区別する（たとえば１２８、２５６、または５１２バイト）。
【０１２１】
クラスＢのメモリアクセス１４２０命令テンプレートの場合、ベータフィールド１４５４の一部はブロードキャストフィールド１４５７Ｂとして解釈され、そのコンテンツはブロードキャスト型データ操作演算が実行されるかを区別し、一方ベータフィールド１４５４の残りは、ベクトル長フィールド１４５９Ｂとして解釈される。メモリアクセス１４２０命令テンプレートは、スケールフィールド１４６０、および随意的にディスプレースメントフィールド１４６２Ａまたはディスプレースメント・スケール・フィールド１４６２Ｂを含む。
【０１２２】
汎用的なベクトルを扱いやすい命令フォーマット１４００に関して、フル命令コードフィールド１４７４は、フォーマットフィールド１４４０、ベース演算フィールド１４４２、およびデータ要素幅フィールド１４６４を含んで示される。フル命令コードフィールド１４７４がこれらのフィールドすべてを含む一実施形態が示される一方、フル命令コードフィールド１４７４は、すべてに対応しない実施形態においては、これらすべてのフィールドより少ないフィールドを含む。フル命令コードフィールド１４７４は、演算コード（命令コード）を与える。
【０１２３】
拡張演算フィールド１４５０、データ要素幅フィールド１４６４、および書き込みマスクフィールド１４７０によって、汎用的なベクトルを扱いやすい命令フォーマットの中で命令毎にこれらの特徴を指定することができる。
【０１２４】
書き込みマスクフィールドとデータ要素幅フィールドを組み合わせて、マスクが異なるデータ要素幅に基づき利用されるという型の命令が作成される。
【０１２５】
クラスＡおよびクラスＢで見つかる様々な命令テンプレートは、異なる状況で有益である。本発明の実施形態によっては、異なるプロセッサまたはプロセッサ内の異なるコアがクラスＡのみ、クラスＢのみ、またはその両方に対応する場合がある。たとえば、汎用計算を意図する高性能汎用型アウトオブオーダーコアはクラスＢのみに対応し、主としてグラフィックスおよび／または科学（スループット）計算を意図するコアは、クラスＡのみに対応し、両方を意図するコアは両方に対応する（もちろん両方のクラスからのテンプレートと命令のすべてではないが、混合したものを備えるコアは、本発明の範囲内である）。また単一のプロセッサは複数のコアを備える場合があり、そのすべてが同じクラスに対応する、または異なるコアが異なるクラスに対応する。たとえば別々のグラフィックスと汎用コアを備えるプロセッサにおいて、グラフィックスおよび／または科学計算を主に意図したグラフィックスコアの一つはクラスＡのみに対応し、一方汎用コアの一つ以上はクラスＢのみに対応する汎用計算を意図したアウトオブオーダーとレジスタリネーミングを備える高性能汎用コアの場合がある。別のグラフィックスコアを備えていない別のプロセッサは、クラスＡおよびクラスＢ両方に対応する一つ以上の汎用のインオーダーまたはアウトオブオーダーコアを含む場合がある。もちろん一方のクラスの特徴はまた、本発明の異なる実施形態において他方のクラスで実施される場合がある。高水準言語で書かれたプログラムは、様々な異なる実行形式に移され（たとえば、ジャスト・イン・タイムでのコンパイルや静的コンパイル）、１）実行用に目標プロセッサが対応するクラスの命令だけを備える形式、または２）すべてのクラスの命令の異なる組合せを使って書かれた別のルーティーンを備え、その時点でコードを実行しているプロセッサが対応する命令に基づき実行するルーティーンを選択する制御フローコードを備えた形式を含む。
【０１２６】
［例示的特定ベクトルを扱いやすい命令フォーマット］
図１５Ａ〜図１５Ｄは、本発明の実施形態による例示的特定ベクトルを扱いやすい命令フォーマットを示すブロック図である。図１５Ａ〜図１５Ｄは特定ベクトルを扱いやすい命令フォーマット１５００を示し、これはフィールドのあるものの値だけでなく、位置、サイズ、解釈、およびフィールドの順番を指定するという点で、特定している。特定ベクトルを扱いやすい命令フォーマット１５００は、ｘ８６命令セットを拡張するために用いられる場合があり、よってフィールドのあるものは、既存のｘ８６命令セットおよびその拡張（たとえばＡＶＸ）で用いられるフィールドと類似あるいは同じである。このフォーマットは、プリフィックス符号化フィールド、実命令コードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、ディスプレースメントフィールドおよび拡張した既存のｘ８６命令セットの即値フィールドと一致したままである。図１５Ａ〜図１５Ｄのフィールドのマッピング先である図１４Ａおよび図１４Ｂのフィールドが示される。
【０１２７】
当然のことだが、説明のために汎用的なベクトルを扱いやすい命令フォーマット１４００との関係で、特定ベクトルを扱いやすい命令フォーマット１５００を参照して本発明の実施形態は記載されるが、本発明は特許請求の範囲を除いて特定ベクトルを扱いやすい命令フォーマット１５００に限定するものではない。たとえば、汎用的なベクトルを扱いやすい命令フォーマット１４００は、様々なフィールドについて様々な可能なサイズを検討し、一方で特定ベクトルを扱いやすい命令フォーマット１５００は、特定サイズのフィールドを備えるように示される。特定の実施例として、データ要素幅フィールド１４６４は、特定ベクトルを扱いやすい命令フォーマット１５００で１ビットフィールドとして示されるが、発明を限定するものではない（すなわち、汎用的なベクトルを扱いやすい命令フォーマット１４００は、他のサイズのデータ要素幅フィールド１４６４を検討する）。
【０１２８】
汎用的なベクトルを扱いやすい命令フォーマット１４００は、図１５Ａで示される順番で以下に記載されるフィールドを含む。
【０１２９】
ＥＶＥＸプリフィックス（バイト０〜３）１５０２は４バイト形式で符号化される。
【０１３０】
フォーマットフィールド１４４０（ＥＶＥＸバイト０、ビット［７：０］−第１のバイト（ＥＶＥＸバイト０）はフォーマットフィールド１４４０であり、０ｘ６２を含む（本発明の一実施形態でのベクトルを扱いやすい命令フォーマットを区別するために用いられる固有値）。
【０１３１】
第２〜第４バイト（ＥＶＥＸバイト１〜３）は、特定の機能を可能とする複数のビットフィールドを含む。
【０１３２】
ＲＥＸフィールド１５０５（ＥＶＥＸバイト１、ビット［７〜５］−ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）および１４５７ＢＥＸバイト１、ビット［５］−Ｂ）からなる。ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、ＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同じ機能を提供し、１の補数形式を使って符号化される。つまりＺＭＭ０はＨＵＢと符号化され、ＺＭＭ１５はあ０００Ｂと符号化される。命令の他のフィールドは、当技術分野で周知であるようにレジスタ指標の下位３ビットを符号化し、その結果Ｒｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂは、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、ＥＶＥＸ．Ｂを加えることで形成される場合がある。
【０１３３】
ＲＥＸ'フィールド１４１０−これはＲＥＸ'フィールド１４１０の第１の部分で、拡張された３２レジスタセットの上位１６または下位１６いずれかを符号化するのに用いられるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）である。本発明の一実施形態では、以下に示される他のビットとともに、このビットはビット反転フォーマットで記憶され、（周知の３２ビットモードで）ＢＯＵＮＤ命令から区別する。その実命令コードバイトは６２であるが、ＭＯＤ  Ｒ／Ｍフィールド（以下に記載）では、ＭＯＤフィールド内の値１１は受け入れない。本発明の別の実施形態は、これともう一方の以下に示されるビットを反転フォーマットでは記憶しない。値１が下位１６レジスタを符号化するため用いられる。つまり、Ｒ'Ｒｒｒｒは、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒおよび他のフィールドからの他のＲＲＲを組み合わせて形成される。
【０１３４】
命令コードマップフィールド１５１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）−このコンテンツは、暗黙の先頭命令コードバイトを符号化する（ＯＦ、ＯＦ３８、またはＯＦ３）。
【０１３５】
データ要素幅フィールド１４６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）−表記ＥＶＥＸ．Ｗで示される。ＥＶＥＸ．Ｗはデータタイプの粒度（サイズ）を定義するのに用いられる（３２ビットデータ要素か６４ビットデータ要素のいずれか）。
【０１３６】
ＥＶＥＸｖｖｖｖ１５２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割は、以下を含む場合がある。１）ＥＶＥＸ．ｖｖｖｖは、反転（１の補数）形式で指定された第１のソースレジスタオペランドを符号化し、２つ以上のオペランドを備えた命令に有効である、２）ＥＶＥＸ．ｖｖｖｖは、あるベクトルシフトに関して１の補数形式で指定されたデスティネーションレジスタオペランドを符号化する３）ＥＶＥＸ．ｖｖｖｖはいかなるオペランドも符号化せず、フィールドを蓄えておき、１１１１ｂを含むようにする。よってＥＶＥＸ．ｖｖｖｖフィールド１５２０は、反転（１の補数）形式で記憶された第１のソースレジスタ指定子の４つの下位ビットを符号化する。命令によっては、追加の異なるＥＶＥＸビットフィールドが用いられ指定子のサイズを３２レジスタに拡張する。
【０１３７】
ＥＶＥＸ．Ｕ１４６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）−ＥＶＥＸ．Ｕ＝０の場合は、クラスＡまたはＥＶＥＸ．Ｕ０を示し、ＥＶＥＸ．Ｕ＝１の場合は、クラスＢまたはＥＶＥＸ．Ｕ１を示す。
【０１３８】
プリフィックス符号化フィールド１５２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）−ベース演算フィールドに追加のビットを与える。ＥＶＥＸプリフィックスフォーマットで、レガシーであるＳＳＥ命令への対応を提供することに加え、ＳＩＭＤプリフィックスを圧縮する恩恵もある（ＳＩＭＤプリフィックスを表すための２バイト要求より、ＥＶＥＸプリフィックスでは２ビットのみを要求する）。一実施形態では、レガシーのフォーマットおよびＥＶＥＸプリフィックスフォーマットでＳＩＭＤプリフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を用いるレガシーのＳＳＥ命令に対応するため、これらのレガシーのＳＩＭＤプリフィックスは符号化されＳＩＭＤプリフィックス符号化フィールドに入れられ、実行時にはデコーダのＰＬＡに与えられる前にレガシーのＳＩＭＤプリフィックスの中に拡張される（よってＰＬＡは、変更せずにこれらのレガシーの命令のレガシーフォーマットとＥＶＥＸフォーマット両方を実行できる）。新しい命令ではＥＶＥＸプリフィックス符号化フィールドのコンテンツを命令コード拡張として直接用いることができるにもかかわらず、ある実施形態では、同様なやり方で一致するよう拡張するが、これらのレガシーのＳＩＭＤプリフィックスによって異なる意味が指定されることが可能になる。別の実施形態は、２ビットＳＩＭＤプリフィックス符号化に対応するためＰＬＡを再設計する場合があり、よって拡張は要求しない。
【０１３９】
アルファフィールド１４５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ、ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ、書き込みマスク制御、およびＥＶＥＸ．Ｎとしても周知、またａ）と示される−先に記載したように、このフィールドは状況に固有である。
【０１４０】
ベータフィールド１４５４（ＥＶＥＸ．ｓ２，，０、ＥＶＥＸ．ｒ２，，０、ＥＶＥＸ．ｒｒｌ、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られている、６６６でも示される）−先に記載したように、このフィールドはコンテキストに固有である。
【０１４１】
ＲＥＸ'フィールド１４１０−これはＲＥＸ'フィールドの残余部で、拡張された３２レジスタセットの上位１６または下位１６いずれかを符号化するのに用いられるＥＶＥＸ．Ｖビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ）である。このビットは反転形式で記憶される。値１は下位の１６レジスタを符号化するのに用いられる。つまりＶＶＶＶＶは、ＥＶＥＸ．Ｖ、ＥＶＥＸ．ｖｖｖｖを結合することで形成される。
【０１４２】
書き込みマスクフィールド１４７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）−このコンテンツは、先に記載したように書き込みマスクレジスタ内でレジスタ指標を指定する。本発明の一実施形態では、特定値ＥＶＥＸ．ｋｋｋ＝０００は、特定の命令には書き込みマスクは用いられないことを意味する特別な動作を備える（これは、すべてに配線された書き込みマスクや、マスキングハードウェアを回避するハードウェアの使用を含む様々な方法で実装される場合がある）。
【０１４３】
実命令コードフィールド１５３０（バイト４）は、命令コードバイトとしても周知である。命令コードの一部は、このフィールドで指定される。
【０１４４】
ＭＯＤ  Ｒ  Ｍフィールド１５４０（バイト５）は、ＭＯＤフィールド１５４２、Ｒｅｇフィールド１５４４、およびＲ／Ｍフィールド１５４６を含む。先に記載したように、ＭＯＤフィールド１５４２のコンテンツは、メモリアクセスとメモリアクセスをしない演算とを区別する。Ｒｅｇフィールド１５４４の役割は２つの状況に要約することができ、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかを符号化する、または命令コード拡張として扱いいかなる命令オペランドも符合するのに用いないことである。Ｒ／Ｍフィールド１５４６の役割は、以下の含む場合がある。メモリアドレスを参照する命令オペランドを符号化する、またはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかを符号化することである。
【０１４５】
スケール、指標、ベース（ＳＩＢ）バイト（バイト６）−先に記載したように、スケールフィールド１４５０のコンテンツはメモリアドレス生成に用いられる。ＳＩＢｘｘｘ１５５４およびＳＩＢｂｂｂ１５５６−これらのフィールドのコンテンツは、レジスタ指標ＸｘｘｘおよびＢｂｂｂに関して先に参照されている。
【０１４６】
ディスプレースメントフィールド１４６２Ａ（バイト７〜１０）−ＭＯＤフィールド１５４２が１０を含む場合、バイト７〜１０はディスプレースメントフィールド１４６２Ａで、レガシーの３２ビットディスプレースメント（ｄｉｓｐ３２）と同じように動作し、バイト粒度で動作する。
【０１４７】
ディスプレースメント因子フィールド１４６２Ｂ（バイト７）−ＭＯＤフィールド１５４２が０１を含む場合、バイト７はディスプレースメント因子フィールド１４６２Ｂである。フィールドの位置はバイト粒度で動作するレガシーのｘ８６命令セット８ビットディスプレースメント（ｄｉｓｐ８）の位置と同じである。ｄｉｓｐ８は符号拡張であるので、−１２８バイト〜１２７バイトの間のオフセットのアドレス指定のみが可能であり、６４バイトのキャッシュラインに関して、ｄｉｓｐ８は４つの実際有益な値−１２８、−６４、０、および６４にだけ設定される８ビットを用いる。より広い範囲が必要とされることが多いので、ｄｉｓｐ３２が用いられる。但しｄｉｓｐ３２は４バイト必要になる。ｄｉｓｐ８およびｄｉｓｐ３２に対して、ディスプレースメント因子フィールド１４６２Ｂは、ｄｉｓｐ８の再解釈である。ディスプレースメント因子フィールド１４６２Ｂを用いる時は、メモリ・オペランド・アクセスのサイズ（Ｎ）をを掛けたディスプレースメント因子フィールドのコンテンツによって実際のディスプレースメントは決定される。このディスプレースメントの型は、ｄｉｓｐ８＊Ｎと呼ばれる。これは平均命令長を減少させる（ディスプレースメントに用いられるのは単一バイトだが、極めて広い範囲を備える）。この圧縮されたディスプレースメントは、効果的なディスプレースメントは、メモリアクセスの粒度の倍数であり、そのためアドレスオフセットの冗長な下位ビットは符号化する必要はないという仮説に基づいている。つまりディスプレースメント因子フィールド１４６２Ｂは、レガシーのｘ８６命令セット８ビットディスプレースメントの代わりになる。したがって、ディスプレースメント因子フィールド１４６２Ｂは、ｄｉＳｐ８がｄｉｓｐ８＊Ｎにオーバーロードされることを例外として、ｘ８６命令セット８ビットディスプレースメントと同じように符号化される（ＭｏｄＲＭ／ＳＩＢ符号化規則において何も変わらない）。つまり、符号化規則または符号化長ではなんら変更はなく、ハードウェアによるディスプレースメント値の解釈だけである（バイト単位のアドレスオフセットを取得するには、メモリオペランドのサイズによってディスプレースメントをスケーリングする必要がある）。
【０１４８】
即値フィールド１４７２は、先の記載のように演算する。
【０１４９】
［フル命令コードフィールド］
図１５Ｂは、本発明の一実施形態による、フル命令コードフィールド１４７４を構成する特定ベクトルを扱いやすい命令フォーマット１５００のフィールドを説明するブロック図である。具体的には、フル命令コードフィールド１４７４は、フォーマットフィールド１４４０、ベース演算フィールド１４４２、およびデータ要素幅（Ｗ）フィールド１４６４を含む。ベース演算フィールド１４４２は、プリフィックス符号化フィールド１５２３、命令コードマップフィールド１５１５、および実命令コードフィールド１５３０を含む。
【０１５０】
［レジスタ指標フィールド］
図１５Ｃは、本発明の一実施形態による、レジスタ指標フィールド１４４４を構成する特定ベクトルを扱いやすい命令フォーマット１５００のフィールドを説明するブロック図である。具体的には、レジスタ指標フィールド１４４４は、ＲＥＸフィールド１５０５、ＲＥＸ'フィールド１５１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド１５４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド１５４６、ｖｖｖｖフィールド１５２０、ｘｘｘフィールド１５５４、およびｂｂｂフィールド１５５６を含む。
【０１５１】
［拡張演算フィールド］
図１５Ｄは、本発明の一実施形態による、拡張演算フィールド１４５０を構成する特定ベクトルを扱いやすい命令フォーマット１５００のフィールドを説明するブロック図である。クラス（Ｕ）フィールド１４６８が０を含む時は、ＥＶＥＸ．Ｕ０（クラスＡ  １４６８Ａ）を意味し、１を含むときはＥＶＥＸ．Ｕ１（クラスＢ  １４６８Ｂ）を意味する。Ｕ＝０でＭＯＤフィールド１５４２が１１を含む（メモリアクセスなし演算を意味する）時は、アルファフィールド１４５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、ｒｓフィールド１４５２Ａと解釈される。ｒｓフィールド１４５２Ａがａ１（丸め１４５２Ａ．１）を含む時は、ベータフィールド１４５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は丸め制御フィールド１４５４Ａと解釈される。丸め制御フィールド１４５４Ａは、１ビットのＳＡＥフィールド１４５６と２ビットの丸め制御フィールド１４５８を含む。ｒｓフィールド１４５２Ａがａ０（データ変換１４５２Ａ．２）を含む時は、ベータフィールド１４５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ変換フィールド１４５４Ｂと解釈される。Ｕ＝０でＭＯＤフィールド１５４２が００、０１、または１０を含む時（メモリアクセス演算を意味する）は、アルファフィールド１４５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、エビクションヒント（ＥＨ）フィールド１４５２Ｂと解釈され、ベータフィールド１４５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ操作フィールド１４５４Ｃと解釈される。
【０１５２】
Ｕ＝１の時は、アルファフィールド１４５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は書き込みマスク制御（Ｚ）フィールド１４５２Ｃと解釈される。Ｕ＝１でＭＯＤフィールド１５４２が１１を含む（メモリアクセスなし演算を意味する）時は、ベータフィールド１４５４（ＥＶＥＸバイト３、ビット［４］−Ｓｏ）の一部はＲＬフィールド１４５７Ａと解釈され、それがａ１（丸め１４５７Ａ．１）を含む時は、ベータフィールド１４５４（ＥＶＥＸ３バイト、ビット［６〜５］−Ｓ２−１）は丸め演算フィールド１４５９Ａと解釈され、一方ＲＬフィールド１４５７Ａがａ０を含むときは（ＶＳＩＺＥ１４５７．Ａ２）、ベータフィールド１４５４（ＥＶＥＸバイト３、ビット［６〜５］、−Ｓ２−１）の残りは、ベクトル長フィールド１４５９Ｂ（ＥＶＥＸバイト３、ビット［６〜５］−Ｌ１−０）と解釈される。Ｕ＝１でＭＯＤフィールド１５４２が００、０１、または１０を含む時は（メモリアクセス演算を意味する）、ベータフィールド１４５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）はベクトル長フィールド１４５９Ｂ（ＥＶＥＸバイト３、ビット［６〜５］−Ｌｉ  ｏ）およびブロードキャストフィールド１４５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）と解釈される。
【０１５３】
［例示的レジスタアーキテクチャ］
図１６は、本発明の一実施形態による、レジスタアーキテクチャ１６００のブロック図である。示された実施形態では、５１２ビット幅を備える３２ベクトルレジスタ１６１０があり、これらのレジスタはｚｍｍ０〜ｚｍｍ３１で示される。下位１６のｚｍｍレジスタの下位２５６ビットは、レジスタｙｍｍ０〜ｙｍｍ１６上で重なる。下位１６のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０〜ｘｍｍ１５上で重なる。特定ベクトルを扱いやすい命令フォーマット１５００は、下表で示すように重なったレジスタファイルを処理する。
【表３】
0006526175.tif 000004
【０１５４】
つまりベクトル長フィールド１４５９Ｂは、最大長と一つ以上の他の短い長さとの間で選択し、この短い長さのそれぞれは、先行する長さの半分であり、さらにベクトル長フィールド１４５９Ｂがない命令テンプレートは、最大ベクトル長で動作する。さらに一実施形態では、特定ベクトルを扱いやすい命令フォーマット１５００のクラスＢの命令テンプレートは、パックまたはスカラーの単／倍精度浮動小数点データおよびパックまたはスカラー整数データを処理する。スカラー演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタ中の最下位データ要素位置で実行され、高位のデータ要素位置は、命令前と同じ状態のままか、ゼロにされるかは、実施形態による。
【０１５５】
書き込みマスクレジスタ１６１５−示された実施形態では、８つの書き込みマスクレジスタがあり（ｋ０〜ｋ７）、それぞれサイズは６４ビットである。別の実施形態では、書き込みマスクレジスタ１６１５のサイズは１６ビットである。先に記載されたように、本発明の一実施形態では、ベクトルマスクレジスタｋ０は書き込みマスクとして用いることはできない。通常ならｋ０を示す符号化が書き込みマスクに用いられた場合、符号化は配線された書き込みマスク０ｘＦＦＦＦを選択し、命令に対し書き込みマスキングを効果的に無効にする。
【０１５６】
汎用レジスタ１６２５−示された実施形態では、メモリオペランドをアドレス指定する既存のｘ８６アドレスモードと共に用いられる１６個の６４ビット汎用レジスタがある。このレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、およびＲ８〜Ｒ１５の名前で参照される。
【０１５７】
スカラー浮動小数点スタックレジスタファイル（ｘ８７スタック）１６４５、別名としてＭＭＸパック整数フラットレジスタファイル１６５０−示された実施形態では、ｘ８７スタックは８要素のスタックであり、ｘ８７命令セット拡張を使って３２／６４／８０ビット浮動小数点データのスカラー浮動小数点演算を実行するため用いられる。一方ＭＭＸレジスタは、ＭＭＸとＸＭＭレジスタ間で実行される演算に関するオペランドを保持するだけでなく、６４ビットのパック整数データへの演算を実行するために用いられる。
【０１５８】
本発明の別の実施形態は、広め、狭めのレジスタを用いる場合がある。さらに本発明の別の実施形態は、多め、少なめ、または異なるレジスタファイルおよびレジスタを用いる場合がある。
【０１５９】
［例示的コアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ］
プロセッサコアは、異なる方法で、異なる目的のために、異なるプロセッサにおいて実装される場合がある。たとえばこうしたコアの実装には、１）汎用計算を意図した汎用インオーダーコア、２）汎用計算を意図した高性能汎用アウトオブオーダーコア、３）グラフィックスおよび／または科学（スループット）計算を主に意図した専用コアが含まれる場合がある。異なるプロセッサの実装には、１）汎用計算を意図した一つ以上の汎用インオーダーコアおよび／または汎用計算を意図した一つ以上の汎用アウトオブオーダーコアを含むＣＰＵ、２）グラフィックスおよび／または科学（スループット）を主に意図した一つ以上の専用コアを含むコプロセッサが含まれる場合がある。こうした異なるプロセッサは異なるコンピュータシステム・アーキテクチャにつながり、１）ＣＰＵとは別のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内の別のダイ上にあるコプロセッサ、３）ＣＰＵと同じダイ上にあるコプロセッサ（この場合、このコプロセッサは、内蔵型グラフィックスおよび／または科学（スループット）論理あるいは専用コアなどの専用論理と呼ばれることもある）、４）同じダイ上に記載されたＣＰＵ、上記記載のコプロセッサ、および追加の機能を備えるかもしれないチップ上のシステムが含まれる場合がある。例示的コアアーキテクチャを以下に記載し、例示的なプロセッサおよびコンピュータアーキテクチャをさらに記載する。
【０１６０】
［例示的なコアアーキテクチャ］
インオーダーおよびアウトオブオーダーコアのブロック図
図１７Ａは、本発明の実施形態による、例示的なインオーダーパイプラインと、例示的なレジスタリネーミング、アウトオブオーダー発行／実行パイプライン両方を示すブロック図である。図１７Ｂは、本発明の実施形態による、インオーダーアーキテクチャコアの例示的実施形態と、プロセッサの中に含まれる例示的レジスタリネーミング、アウトオブオーダー発行／実行アーキテクチャコアの両方を示すブロック図である。図１７Ａ、図１７Ｂの実線で書かれた四角は、インオーダーパイプラインとインオーダーコアを示し、一方破線で書かれた四角の随意に加えた部分は、レジスタリネーミング、アウトオブオーダー発行／実行パイプラインとコアを示している。インオーダー側面は、アウトオブオーダー側面のサブセットであることを考え、アウトオブオーダー側面を記載する。
【０１６１】
図１７Ａで、プロセッサパイプライン１７００は、フェッチステージ１７０２、長さデコードステージ１７０４、デコードステージ１７０６、アロケーションステージ１７０８、リネーミングステージ１７１０、スケジューリングステージ１７１２（ディスパッチまたは発行としても周知）、レジスタ読み込み／メモリ読み出しステージ１７１４、実行ステージ１７１６、書き戻し／メモリ書き込みステージ１７１８、例外処理ステージ１７２２、およびコミットステージ１７２４を含む。
【０１６２】
図１７Ｂは、実行エンジンユニット１７５０に結合されたフロントエンドユニット１７３０を含むプロセッサコア１７９０を示し、フロントエンドユニットと実行エンジンユニットは両方ともメモリユニット１７７０に結合している。コア１７９０は、縮小命令セット計算（ＲＩＳＣ）コア、様々な命令セット計算（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッド及び他のコアの種類の場合がある。さらに別の選択として、コア１７９０は、たとえばネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用計算グラフィックス プロセッシング ユニット（ＧＰＧＰＵ）コア、グラフィックスコアなどの専用コアの場合がある。
【０１６３】
フロントエンドユニット１７３０は分岐予測ユニット１７３２を含み、それは命令キャッシュユニット１７３４に結合し、それは命令トランスレーション・ルックアサイド・バッファ（ＴＬＢ）１７３６に結合し、それは命令フェッチユニット１７３８に結合し、それはデコードユニット１７４０に結合している。デコードユニット１７４０（あるいはデコーダ）は、命令をデコードし、出力として一つ以上のマイクロ演算、マイクロコード・エントリポイント、マイクロ命令、他の命令、または他の制御信号を生成する場合があり、それらは元の命令からデコードされるか、そうでなければ元の命令を反映するか、元の命令から導かれる。デコードユニット１７４０は、様々に異なるメカニズムを使って実装されるかもしれない。適切なメカニズムの実施例には、ルックアップテーブル、ハードウェア実装、プログラマブル・ロジック・アレイ（ＰＬＡ）、マイクロコード・リードオンリーメモリ（ＲＯＭ）などが含まれるが、これに限定するものではない。一実施形態では、コア１７９０は、あるマクロ命令のマイクロコードを記憶するマイクロコードＲＯＭまたは他の媒体を含む（たとえば、デコードユニット１７４０に、もしくはフロントエンドユニット１７３０内に）。デコードユニット１７４０は、実行エンジンユニット１７５０内のリネーム／アロケーションユニット１７５２に結合されている。
【０１６４】
実行エンジンユニット１７５０は、リタイアメントユニット１７５４に結合するリネーム／アロケーションユニット１７５２および一つ以上のスケジューラユニット一式１７５６を含む。スケジューラユニット１７５６は、任意の数の異なるスケジューラを表し、リザベーションステーション、中央命令ウインドウなどを含む。スケジューラユニット１７５６は、物理レジスタファイルユニット１７５８に結合される。物理レジスタファイルユニット１７５８のそれぞれは、一つ以上の物理レジスタファイルを表し、その異なるものは、スカラー整数、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、状態（たとえば次に実行される命令のアドレスを示す命令ポインタ）など一つ以上の異なるデータ型を記憶する。一実施形態では、物理レジスタファイルユニット１７５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラーレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供する場合がある。物理レジスタファイルユニット１７５８は、リタイアメントユニット１７５４と重複し、レジスタリネーミングおよびアウトオブオーダー実行が実装される場合がある様々な方法を示す（たとえばリオーダーバッファとリタイアメントファイルを使う、フューチャファイル、履歴バッファ、およびリタイアメントレジスタファイルを使う、レジスタマップとレジスタプールを使うなど）。リタイアメントユニット１７５４と物理レジスタファイルユニット１７５８は、実行クラスタ１７６０に結合される。実行クラスタ１７６０は、一つ以上の実行ユニット１７６２一組と一つ以上のメモリアクセスユニット１７６４一組を含む。実行ユニット１７６２は、様々な演算（たとえばシフト、加算、減算、乗算）を様々な型のデータ（たとえばスカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点）に関して実行する場合がある。実施形態によっては、特定の関数または関数の組に専用の複数の実行ユニットを含む場合がある一方、他の実施形態はすべての関数を実行する一つだけの実行ユニットまたは複数の実行ユニットを含む場合がある。ユニット１７５６、物理レジスタファイルユニット１７５８、および実行クラスタ１７６０は、ある実施形態ではある型のデータ／演算のために別のパイプラインを作成するため、複数の可能性があるように示される（たとえば、スカラー整数パイプライン、スカラー浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはそれぞれ自分のスケジューラユニットを備えるメモリアクセスパイプライン、物理レジスタファイルユニット、および／または実行クラスタ−および別のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスのみがメモリアクセスユニット１７６４を備えるある実施形態が実装される）。当然のことだが、別のパイプラインが用いられるところでは、一つ以上のパイプラインは、アウトオブオーダー発行／実行であり、残りはインオーダーである場合がある。
【０１６５】
一組のメモリアクセスユニット１７６４は、メモリユニット１７７０に結合され、メモリユニットはレベル２（Ｌ２）キャッシュユニット１７７６に結合されるデータキャッシュユニット１７７４にさらに結合されるデータＴＬＢユニット１７７２を含む。一例示的実施形態では、メモリアクセスユニット１７６４は、ロードユニット、アドレス記憶ユニット、およびデータ記憶ユニットを含む場合があり、それぞれはメモリユニット１７７０内のデータＴＬＢユニット１７７２に結合される。命令キャッシュユニット１７３４は、さらにメモリユニット１７７０内のレベル２（Ｌ２）キャッシュユニット１７７６に結合される。Ｌ２キャッシュユニット１７７６は、一つ以上の他のレベルのキャッシュに結合され、最終的には、主メモリに結合される。
【０１６６】
実施例として、例示的レジスタリネーミング、アウトオブオーダー発行／実行コアアーキテクチャは、以下のようにパイプライン１７００を実装する場合がある。１）命令フェッチ１７３８はフェッチおよび長さデコードステージ１７０２と１７０４を実行する。２）デコードユニット１７４０は、デコードステージ１７０６を実行する。３）リネーム／アロケーションユニット１７５２はアロケーションステージ１７０８およびリネーミングステージ１７１０を実行する。４）スケジューラユニット１７５６は、スケジューリングステージ１７１２を実行する。５）物理レジスタファイルユニット１７５８およびメモリユニット１７７０は、レジスタ読み出し／メモリ読み出しステージ１７１４を実行し、実行クラスタ１７６０は、実行ステージ１７１６を実行する。６）メモリユニット１７７０および物理レジスタファイルユニット１７５８は、書き戻し／メモリ書き込みステージ１７１８を実行する。７）様々なユニットは、例外処理ステージ１７２２に含まれる場合がある。８）リタイアメントユニット１７５４および物理レジスタファイルユニット１７５８は、コミットステージ１７２４を実行する。
【０１６７】
コア１７９０は一つ以上の命令セット（たとえば、ｘ８６命令セット（新しいバージョンで加わったいくつかの拡張とともに）、MIPS Technologies（サニーベイル、カリフォルニア州）のＭＩＰＳ命令セット、のARM Holdings（サニーベイル）のＡＲＭ命令セット（ＮＥＯＮなど随意の増設拡張と共に））に対応する場合があり、ここに記載する命令を含む。一実施形態では、コア１７９０は、パックデータ命令セット拡張（たとえばＡＶＸ１、ＡＶＸ２）に対応する論理を含み、よって多くのマルチメディアのアプリケーションで用いられる演算は、パックデータを用いて実行することができる。
【０１６８】
当然のことだが、コアはマルチスレッディング（演算またはスレッドの２つ以上の組を並行して実行する）に対応し、タイムスライス・マルチスレッディング、同時マルチスレッディング（単一の物理コアが、物理コアが同時にマルチスレッディングしているスレッドそれぞれに論理コアを与える）またはその組合せを含む様々な方法で対応する場合がある（たとえば、インテルハイパースレッディング・テクノロジーなどのタイムスライス・フェッチと符号化、そしてその後のマルチスレッディング）。
【０１６９】
レジスタリネーミングはアウトオブオーダー実行との関係で記載されるが、当然のことだが、リネーミングはインオーダーアーキテクチャの中でも用いられる場合がある。プロセッサの示された実施形態は、別々の命令およびデータのキャッシュユニット１７３４／１７７４と共有のＬ２キャッシュユニット１７７６を含む一方、別の実施形態は、たとえばレベル１（Ｌ１）内部キャッシュ、または複数レベルの内部キャッシュなどの命令とデータ両方の単一内部キャッシュを備える場合がある。実施形態によっては、システムは内部キャッシュと、コアおよび／またはプロセッサに対して外部である外部キャッシュの組合せを含む場合がある。あるいはすべてのキャッシュが、コアおよび／またはプロセッサに対して外部である場合もある。
【０１７０】
［特定の例示的インオーダーコアアーキテクチャ］
図１８Ａ、図１８Ｂは、さらに特定の例示的インオーダーコアアーキテクチャのブロック図を示し、このコアは、チップ内のいくつかの論理ブロック（同じ種類および／または異なる種類の他のコアをふくむ）の一つになる。その論理ブロックは、アプリケーションによって、ある固定機能論理、メモリＩ／Ｏインタフェース、および他の必要なＩ／Ｏ論理で、広帯域相互接続ネットワーク（たとえばリングネットワーク）によって通信をする。
【０１７１】
図１８Ａは、本発明の実施形態による、オンダイ相互接続ネットワーク１８０２への接続とともに、レベル２（Ｌ２）キャッシュ１８０４のローカルサブセットを備える単一プロセッサコアのブロック図である。一実施形態では、命令デコーダ１８００は、パックデータ命令セット拡張を備えるｘ８６命令セットに対応する。Ｌ１キャッシュ１８０６によって、キャッシュメモリに、そしてスカラーおよびベクトルユニット内部に低レイテンシのアクセスが可能になる。一実施形態では（設計を簡単にするため）、スカラーユニット１８０８とベクトルユニット１８１０は別々のレジスタの組を用い（それぞれスカラーレジスタ１８１２およびベクトルレジスタ１８１４）、その間を移動するデータは、メモリに書き込まれ、それからレベル１（Ｌ１）キャッシュ１８０６から読み戻される一方、本発明の別の実施形態は、異なる取り組みを用いる場合がある（たとえば単一のレジスタ組を用いる、または書き戻すおよび読み戻さずに２つのレジスタファイル間でのデータ移動を可能にする通信経路を含む）。
【０１７２】
Ｌ２キャッシュ１８０４のローカルサブセットは、別々のローカルサブセットに分割されるグローバルＬ２キャッシュの一部であり、プロセッサコア毎に一つである。各プロセッサコアは、Ｌ２キャッシュ１８０４の自身のローカルサブセットへの直接アクセス経路を備える。プロセッサコアが読み出したデータは、Ｌ２キャッシュサブセット１８０４内に記憶され、他のプロセッサコアが自身のローカルＬ２キャッシュサブセットへアクセスするのと並行して、迅速にアクセスされることが可能である。プロセッサによって書き込まれたデータは、自身のＬ２キャッシュサブセット１８０４内に記憶され、必要ならば他のサブセットからフラッシュされる。リングネットワークは、共有データの一貫性を保証する。リングネットワークは双方向で、プロセッサコア、Ｌ２キャッシュおよび他の論理ブロックなどのエイジェントがチップ内で互いに通信することを可能にする。各リングデータ経路は、１０１２ビット幅／方向である。
【０１７３】
図１８Ｂは、本発明の実施形態による図１８Ａ内のプロセッサコアの一部の拡大図である。図１８Ｂは、ベクトルユニット１８１０およびベクトルレジスタ１８１４に関するより詳細な点だけでなく、Ｌ１キャッシュ１８０４の一部であるＬ１データキャッシュ１８０６Ａを含む。具体的には、ベクトルユニット１８１０は、１６ワイドベクトル処理ユニット（ＶＰＵ）（１６ワイドＡＬＵ１８２８参照）であり、一つ以上の整数、単精度浮動、および倍精度浮動命令を実行する。ＶＰＵは、スウィズルユニット１８２０を使ったレジスタ入力のスウィズリング、数値変換ユニット１８２２Ａ、１８２２Ｂを使った数値変換、およびメモリ入力上で複製ユニット１８２４を使った複製に対応する。書き込みマスクレジスタ１８２６は、結果としてのベクトル書き込みをプレディケートすることを可能にする。
【０１７４】
［メモリ制御器およびグラフィックスと一体化されたプロセッサ］
図１９は、本発明の実施形態により、一つ以上のコアを備え、内蔵型メモリ制御器を備え、内蔵したグラフィックスを備える場合があるプロセッサ１９００のブロック図である。図１９の実線で書かれた四角は、単一のコア１９０２Ａ、システムエージェント１９１０、一組の一つ以上のバス制御ユニット１９１６を示し、一方破線で書かれた四角の随意に加えた部分は、複数のコア１９０２Ａ〜１９０２Ｎ、システムエージェントユニット１９１０内の一つ以上の内蔵型メモリ制御ユニット１９１４一組および専用論理１９０８を備える別のプロセッサ１９００を示す。
【０１７５】
したがってプロセッサ１９００の異なる実装は、１）内蔵したグラフィックスおよび／または科学（スループット）論理（一つ以上のコアを含む場合がある）である専用論理１９０８、および一つ以上の汎用コアであるコア１９０２Ａ〜１９０２Ｎ（たとえば汎用インオーダーコア、汎用アウトオブオーダーコア、この２つの組合せ）を備えるＣＰＵ、２）主としてグラフィックスおよび／または科学（スループット）を意図した極めて多くの専用コアであるコア１９０２Ａ〜１９０２を備えるコプロセッサ、３）極めて多くの汎用インオーダーコアであるコア１９０２Ａ〜１９０２Ｎを備えるコプロセッサが含まれる場合がある。したがって、プロセッサ１９００は、たとえばネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループットメニー・インテグレイティド・コア（ＭＩＣ）コプロセッサ（３０以上のコアを含む）、組込みプロセッサなどの汎用プロセッサ、コプロセッサまたは専用プロセッサの場合がある。このプロセッサは一つ以上のチップ上に実装される場合がある。プロセッサ１９００は、たとえばＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどの複数のプロセス技術の任意のものを用い、一つ以上の基板の一部、および／またはその上に実装される場合がある。
【０１７６】
メモリ階層は、コア内の一つ以上のレベルキャッシュ、一組または一つ以上の共有キャッシュユニット１９０６、および一組の内蔵型メモリ制御ユニット１９１４に結合された外部メモリ（図示せず）を含む。一組の共有キャッシュユニット１９０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または他のレベルキャッシュ、最終レベルのキャッシュ（ＬＬＣ）、および／またはこれらの組合せなどの一つ以上の中間レベルキャッシュを含む場合がある。一実施形態では、リング方式の相互接続ユニット１９１２は、内蔵型グラフィックス論理１９０８、一組の共有キャッシュユニット１９０６、およびシステムエージェントユニット１９１０／内蔵型メモリ制御ユニット１９１４と相互接続する一方、別の実施形態は、これらのユニットを相互接続するため、任意の数の周知技術を用いる場合がある。一実施形態では、一つ以上のキャッシュユニット１９０６とコア１９０２Ａ〜１９０２Ｎの間の一貫性は維持される。
【０１７７】
実施形態によっては、コア１９０２Ａ〜１９０２Ｎの一つ以上が、マルチスレッディングをすることができる。システムエージェント１９１０は、コア１９０２Ａ〜１９０２Ｎを調整し操作するこれらの部品を含む。システムエージェントユニット１９１０は、たとえば電力制御ユニット（ＰＣＵ）および表示ユニットを含む場合がある。ＰＣＵは、コア１９０２Ａ〜１９０２Ｎおよび内蔵型グラフィックス論理１９０８の電力状態を調整するのに必要な論理および部品であるか、それらを含む場合がある。表示ユニットは、一つ以上の外部に接続された表示部を駆動するためのものである。
【０１７８】
コア１９０２Ａ〜１９０２Ｎは、アーキテクチャ命令セットの点では、均一または不均一の場合がある。つまり、コア１９０２Ａ〜１９０２Ｎの２つ以上は、同じ命令セットを実行できる場合があるが、一方他のコアは、命令セットのサブセットだけしか実行できない、または異なる命令セットしか実行できない場合がある。
【０１７９】
［例示的コンピュータアーキテクチャ］
図２０〜図２３は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリング・ワークステーション、サーバー、ネットワーク装置、ネットワークハブ、スイッチ、組込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックス装置、テレビゲーム装置、セットトップボックス、マイクロコントローラ、携帯電話、ポータブル・メディア・プレーヤー、ハンドヘルド装置、および様々な他の電子装置に関して当技術分野で周知な他のシステム設計および構成も適合する。一般に、ここで開示されるようなプロセッサおよび／または他の実行論理を組み込める極めて多様なシステムまたは電子装置は一般に適合する。
【０１８０】
図２０を参照すると、本発明の一実施形態によるシステム２０００のブロック図が示される。システム２０００は一つ以上のプロセッサ２０１０、２０１５を含み、これらは制御ハブ２０２０へ結合される。一実施形態において、制御ハブ２０２０は、グラフィックスメモリ制御ハブ（ＧＭＣＨ）２０９０および入／出力ハブ（ＩＯＨ）２０５０（別々のチップ上の場合もある）を含む。ＧＭＣＨ２０９０は、メモリおよびグラフィックス制御器を含み、そこにメモリ２０４０とコプロセッサ２０４５は結合される。ＩＯＨ２０５０は入／出力（Ｉ／Ｏ）装置２０６０をＧＭＣＨ２０９０へ結合する。あるいは、メモリおよびグラフィックス制御器の一つまたは両方はプロセッサ内で内蔵され（ここに記載したように）、メモリ２０４０とコプロセッサ２０４５は直接プロセッサ２０１０に結合され、制御ハブ２０２０は、ＩＯＨ２０５０を備えて単一チップ内にある。
【０１８１】
追加のプロセッサ２０１５の随意の働きは、図２０内の破線で示される。各プロセッサ２０１０，２０１５は、ここで記載される処理コアの一つ以上を含む場合があり、プロセッサ１９００のあるバージョンの場合がある。
【０１８２】
たとえばメモリ２０４０は、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、またはこの２つの組合せの場合がある。少なくとも一実施形態に関して、制御ハブ２０２０は、フロントサイドバス（ＦＳＢ）、クイック・パス・インターコネクト（ＱＰＩ）などのポイント・ツー・ポイント・インタフェースまたは類似の接続２０９５などのマルチドロップ・バスを介してプロセッサ２０１０、２０１５と通信する。
【０１８３】
一実施形態では、コプロセッサ２０４５は、たとえば高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、組込みプロセッサなどの専用プロセッサである。一実施形態では、制御ハブ２０２０は、内蔵型グラフィックスアクセラレータを含む場合がある。
【０１８４】
物理リソース２０１０、２０１５の間には、アーキテクチャの、マイクロアーキテクチャの、熱の、電力消費の特性などを含む長所の基準範囲という点で様々な差がある可能性がある。
【０１８５】
一実施形態では、プロセッサ２０１０は、汎用型のデータ処理演算を制御する命令意を実行する。命令内に組み込まれているのは、コプロセッサの命令の場合がある。プロセッサ２０１０は、これらのコプロセッサ命令を、付属するコプロセッサ２０４５で実行すべき型のものであることを認識する。したがってプロセッサ２０１０は、コプロセッサ命令（またはコプロセッサ命令を示す制御信号）をコプロセッサバスまたは他の相互接続上で、コプロセッサ２０４５に発行する。コプロセッサ２０４５は受諾し、受信されたコプロセッサ命令を実行する。
【０１８６】
図２１を参照すると、本発明の実施形態による第１のさらに特定委の例示的システム２１００のブロック図が示される。図２１に示すように、マルチプロセッサシステム２１００は、ポイント・ツー・ポイント相互接続システムであり、第１のプロセッサ２１７０およびポイント・ツー・ポイント相互接続２１５０を介して結合される第２のプロセッサ２１８０を含む。プロセッサ２１７０および２１８０のそれぞれは、プロセッサ１９００のあるバージョンの場合がある。本発明の一実施形態では、プロセッサ２１７０と２１８０はそれぞれプロセッサ２０１０および２０１５であり、一方コプロセッサ２１３８は、コプロセッサ２０４５である。別の実施形態では、プロセッサ２１７０および２１８０はそれぞれ、プロセッサ２０１０およびコプロセッサ２０４５である。
【０１８７】
プロセッサ２１７０および２１８０は、それぞれ内蔵型メモリ制御（ＩＭＣ）ユニット２１７２および２１８２を含むように示される。プロセッサ２１７０はまた、バス制御ユニットの一部として、ポイント・ツー・ポイント（Ｐ−Ｐ）インタフェース２１７６および２１７８を含み、どうように第２のプロセッサ２１８０はＰ−Ｐインタフェース２１８６および２１８８を含む。プロセッサ２１７０、２１８０は、ポイント・ツー・ポイント（Ｐ−Ｐ）インタフェース回路２１７８、２１８８を用いＰ−Ｐインタフェース２１５０を介して情報を交換する場合がある。図２１に示すように、ＩＭＣ２１７２および２１８２は、プロセッサをそれぞれのメモリ、すなわちメモリ２１３２およびメモリ２１３４に結合し、それらは各プロセッサにローカルに付属する主メモリの一部の場合がある。
【０１８８】
プロセッサ２１７０、２１８０は、ポイント・ツー・ポイントインタフェース回路２１７６、２１９４、２１８６、２１９８を用いて各Ｐ−Ｐインタフェース２１５２、２１５４を介してチップセット２１９０とそれぞれ情報を交換する場合がある。チップセット２１９０は、高性能インタフェース２１３９を介して、コプロセッサ２１３８と情報を随意に交換する場合がある。一実施形態では、コプロセッサ２１３８は、たとえば高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組込みプロセッサなどの専用プロセッサである。
【０１８９】
共有キャッシュ（図示せず）は、プロセッサまたは両方のプロセッサの外部に含まれ、それでもＰ−Ｐ相互接続を介してプロセッサと接続されており、その結果、いずれかのまたは両方のプロセッサのローカルキャッシュ情報は、プロセッサが低電力モードにある場合は、共有キャッシュに記憶される場合がある。
【０１９０】
チップセット２１９０は、インタフェース２１９６を介して第１のバス２１１６へ結合される場合がある。一実施形態では、第１のバス２１１６は、ペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）バス、またはＰＣＩエクスプレスバスまたは別の第３世代Ｉ／Ｏ相互接続バスなどのバスの場合があるが、発明の範囲を限定するものではない。
【０１９１】
図２１に示すように、様々なＩ／Ｏ装置２１１４が第１のバス２１１６を第２のバス２１２０に結合するバスブリッジ２１１８とともに、第１のバス２１１６に結合される場合がある。一実施形態では、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（たとえばグラフィクスアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブル・ゲートアレイ、または任意の他のプロセッサなどの一つ以上の追加のプロセッサ２１１５が第１のバス２１１６へ結合される。一実施形態では、第２のバス２１２０は、ローピンカウント（ＬＰＣ）バスの場合がある。様々な装置が第２のバス２１２０へ結合される場合があり、たとえばキーボードおよび／またはマウス２１２２、通信装置２１２７およびディスクドライブまたは命令／コードおよびデータ２１３０を含む場合があるディスクドライブまたは他の大量記憶装置などの記憶ユニット２１２８が含まれる。さらにオーディオＩ／Ｏ２１２４が第２のバス２１２０に結合される場合がある。他のアーキテクチャも考えらえることに留意されたい。たとえば図２１のポイント・ツー・ポイントアーキテクチャの代わりに、システムはマルチドロップ・バスなどのアーキテクチャを実装する場合がある。
【０１９２】
図２２を参照すると、本発明の実施形態による第２のさらに特定の例示的システム２２００のブロック図が示される。図２１および図２２中の同等の要素は、同等の参照番号を有し、図２１のある側面は、図２２の他の側面が不明瞭になるのを避けるため、図２２から省略されている。
【０１９３】
図２２は、プロセッサ２１７０、２１８０が内蔵メモリと、Ｉ／Ｏ制御論理（「ＣＬ」）２１７２と２１８２をそれぞれ含む場合があることを示している。ＣＬ２１７２、２１８２は、内蔵型メモリ制御ユニットを含み、Ｉ／Ｏ制御論理を含む。図２２は、ＣＬ２１７２、２１８２に結合されたメモリ２１３２、２１３４だけでなく、Ｉ／Ｏ装置２２１４もまた、制御論理２１７２、２１８２に接続されていることを示す。レガシーのＩ／Ｏ装置２２１５は、チップセット２１９０に結合されている。
【０１９４】
図２３を参照すると、本発明の実施形態によるＳｏＣ２３００のブロック図が示されている。図１９中の同様の要素は、同等の参照番号を有する。また破線で書かれた四角形は、より高度なＳｏＣｓの随意な特徴である。図２３で、相互接続ユニット２３０２は、以下に結合される。一組の一つ以上のコア２０２Ａ〜２０２Ｎおよび共有キャッシュユニット１９０６を含むアプリケーションプロセッサ２３１０、システムエージェントユニット１９１０、バス制御ユニット１９１６、内蔵型メモリ制御ユニット１９１４、内蔵型グラフィックス論理、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含む場合がある一組または一つ以上のコプロセッサ２３２０、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）ユニット２３３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット２３３２、および一つ以上の外部表示部に結合する表示ユニット２３４０に結合される。一実施形態では、コプロセッサ２３２０は、たとえばネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組込みプロセッサなどの専用プロセッサを含む。
【０１９５】
ここで開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、またはこうした実装方法の組み合わせで実装される場合がある。本発明の実施形態は、少なくとも一つのプロセッサ、記憶システム（揮発性および不揮発性メモリおよび／または記憶要素）、少なくとも一つの入力装置および少なくとも一つの出力装置を含むプログラム可能なシステム上で実行するコンピュータプログラムまたはプログラムコードとして実装される場合がある。
【０１９６】
図２１に示されるコード２１３０などのプログラムコードは、命令を入力してここに記載される機能を実行して出力情報を生成するように応用される場合がある。出力情報は、周知の方法で、一つ以上の出力装置に応用される場合がある。このアプリケーション目的のため、処理システムは、たとえばデジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサなどのプロセッサを備える任意のシステムを含む。
【０１９７】
プログラムコードは、高水準手続きまたはオブジェクト指向プログラミング言語で実装され、処理システムと通信する場合がある。プログラムコードは、必要に応じて、アセンブリまたは機械語でも実装される場合がある。実際、ここに記載されるメカニズムは、なんら特定のプログラミング言語の範囲に限定されない。いずれにしても、言語はコンパイル型またはインタープリタ型言語の場合がある。
【０１９８】
少なくとも一つの実施形態の一つ以上の側面は、プロセッサ内で様々な論理を表現する機械可読媒体に記憶される表現命令によって実装される場合があり、機械が読む時には、機械に論理を組み立てさせ、ここに記載する技術を実行する。こうした表現は、「ＩＰコア」として知られるが、有形の機械可読媒体に記憶され、様々な顧客または製造設備に供給され、実際に論理またはプロセッサを構成する生産機械の中にロードする。
【０１９９】
この機械可読記憶媒体は、限定なしに、機械または装置によって製造または形成された品目の非一時的、有形配列を含む場合があり、ハードディスク、任意の他の種類のディスクなどの記憶媒体を含んでおり、他の種類のディスクには、フロッピー（登録商標）ディスク、光学ディスク、コンパクトディスク・リードオンリーメモリ（ＣＤ−ＲＯＭ）、書き換え可能コンパクトディスク（ＣＤ−ＲＷ）、および磁気光学ディスク、リードオンリメモリなどの半導体装置、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気または光学カード、または電気命令を記憶するのに適した任意の他の種類の媒体が含まれる。
【０２００】
したがって、本発明の実施形態はまた、ここに記載される構造、回路、装置、プロセッサおよび／またはシステムの特徴を定義するハードウェア記述言語（ＨＤＬ）などの命令を含むか、設計データを含む非一時的な有形機械可読媒体を含む。この実施形態は、プログラム製品としても、参照される場合がある。
【０２０１】
［エミュレーション（バイナリ変換、コードモーフィングなどを含む）］
場合によっては、命令変換器は、ソース命令セットから目標命令セットに命令を変換するために用いられる場合がある。たとえば命令変換器は、翻訳（たとえば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換）、モーフ、エミュレートし、あるいは命令をコアによって処理されるように一つ以上の他の命令に変換する場合がある。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装される場合がある。命令変換器は、プロセッサ上にある、プロセッサ上にない、または一部はプロセッサ上に一部はプロセッサ上にない場合がある。
【０２０２】
図２４は、本発明の実施形態により、ソース命令セット中のバイナリ命令を目標命令セット中のバイナリ命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。示された実施形態では、命令変換器はソフトウェア命令変換器であるが、あるいはこの命令変換器は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装される場合がある。図２４は、高水準言語２４０２のプログラムがｘ８６コンパイラ２４０４を使ってコンパイルされ、少なくとも一つのｘ８６命令セットコア２４１６を備えるプロセッサによってネイティブに実行される場合があるｘ８６バイナリコード２４０６を生成する場合があることを示す。少なくとも一つのｘ８６命令セットコア２４１６を備えるプロセッサは、少なくとも一つのｘ８６命令セットコアを備えたインテルプロセッサと実質的に同じ結果を実現するために、（１）インテルｘ８６命令セットコアの命令セットの実質的な部分、（２）少なくとも一つのｘ８６命令セットコアを備えたインテルプロセッサ上で走ることを目的としたアプリケーションまたは他のソフトウェアのオブジェクトコード版を、互換性を持って実行あるいは処理することで、少なくとも一つのｘ８６命令セットコアを備えたインテルプロセッサと実質的に同じ機能を実行できる任意のプロセッサを表す。ｘ８６コンパイラ２４０４は、少なくとも一つのｘ８６命令セットコア２４１６を備えたプロセッサ上で、追加のリンケージ処理とともに、あるいはなしで、実行される可能性があるｘ８６バイナリコード２４０６（たとえばオブジェクトコード）を生成することができるコンパイラを示す。同様に図２４は、高水準言語２４０２のプログラムが、別の命令セットコンパイラ２４０８を用いてコンパイルされ、少なくとも一つのｘ８６命令セットコア２４１４を持たないプロセッサ（たとえばMIPS Technologies（サニーベイル、カリフォルニア州）のＭＩＰＳ命令セットを実行する、および／またはARM Holdings（サニーベイル、カリフォルニア州）のＡＲＭ命令セットを実行するコアを備えるプロセッサ）によってネイティブに実行される場合がある別の命令セットバイナリコード２４１０を生成することを示す。命令変換器２４１２は、ｘ８６バイナリコード２４０６を、ｘ８６命令セットコア２４１４を持たないプロセッサがネイティブに実行する場合があるコードに変換するのに用いられる。この変換されたコードは、これが可能な命令変換器は使えるようにするのが難しいため、別の命令セットバイナリコード２４１０と同じになりそうではない。しかし、変換されたコードによりこの一般の演算は完了し、別の命令セットからの命令が構成される。したがって命令変換器２４１２は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組合せを示し、エミュレーション、シミュレーションまたは任意の他の処理により、ｘ８６命令セットプロセッサまたはコアを備えていないプロセッサまたは他の電子装置がｘ８６バイナリコード２４０６を実行できるようにする。
【０２０３】
図３〜図１２のいずれかについて記載した構成部品、特徴事項、および詳細は、図１、図２のいずれかにも随意に応用できる場合がある。さらに装置のいずれかについて記載した構成部品、特徴、および詳細は、方法のいずれかにも随意に応用できる場合があり、実施形態においてこの装置によって、および／または装置を使って、実行される場合がある。ここに記載されるプロセッサのいずれかは、ここに記載されるコンピュータシステムのいうれかに含まれる場合がある。実施形態では、命令は、ここに開示される命令フォーマットの特徴または詳細を備える場合があるが、これは必須ではない。
【０２０４】
明細書および特許請求の範囲で、用語「結合された」および／または「接続された」がその派生語とともに、用いられる場合がある。これらの用語は互いに同義語としては意図されていない。むしろ実施形態では、「接続された」は、２つ以上の要素が、物理的および／または電気的に互いに直接接触していることを示すために用いられる場合がある。「結合された」は、２つ以上の要素が、物理的および／または電気的に互いに直接接触していることを意味する場合がある。但し、「結合された」はまた、２つ以上の要素が互いに直接には接触していないが、それでも尚互いに協力あるいは相互作用することを意味する場合がある。たとえば、実行ユニットは、一つ以上の介在する構成部品を通して、レジスタおよび／またはデコードユニットと結合する場合がある。図では、矢印は、接続と結合を示すために用いられる。
【０２０５】
用語「および／または」が用いられた場合がある。  ここで用いられるように、用語「および／または」は一方またはもう一方または両方を意味する（たとえばＡおよび／またはＢは、ＡまたはＢまたはＡとＢの両方を意味する）。
【０２０６】
上記明細書中で、実施形態を十分に理解するために、具体的な詳細が説明されてきた。但し、他の実施形態はこれらの具体的な詳細のいくつかを欠いても実行される場合がある。発明の範囲は、上記で与えた具体的な実施例で判断されず、以下の発明の特許請求の範囲によってのみ判断される。さらに周知の回路、構造、装置、および演算は、明細書の理解が不明瞭になるのを避けるため、ブロック図形式で、および／または詳細を省略して示されている。適切に検討された場合には、参照番号、または参照番号の末尾部は、対応するまたは類似する要素を示すため図の間で繰り返され、特段の定めがないあるいは自明であれば、類似もしくは同じ特性を随意に備える場合がある。
【０２０７】
実施形態によっては機械可読媒体を含む製造品目（たとえばコンピュータプログラム製品）を含む。その媒体は、機械が読める形式で情報を提供、たとえば記憶するメカニズムを含む場合がある。機械可読媒体は、機械が実行する場合および／または時には、機械に実行させ、および／または機械が実行したもの、あるいはここに記載された演算、方法、または技術をもたらすようにできる一つの命令または連続した命令を提供または記憶している場合がある。
【０２０８】
実施形態においては、機械可読媒体は、非一時的機械可読記憶媒体を含む場合がある。たとえば、非一時的機械可読記憶媒体は、フロッピー（登録商標）ディスク、光学記憶媒体、光学ディスク、光学データ記憶装置、ＣＤ−ＲＯＭ、磁気ディスク、磁気光学ディスク、リードオンリメモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、非揮発性メモリ、非揮発性データ記憶装置、非一時的メモリ、非一時的データ記憶装置などを含む。非一時的機械可読記憶媒体は、一時的な伝搬信号は含まない。
【０２０９】
適切な機械の実施例には、汎用プロセッサ、専用プロセッサ、デジタル論理回路、集積回路などが含まれるが、これに限定するものではない。さらに適切な機械の実施例にはプロセッサ、デジタル論理回路、または集積回路を含むコンピュータシステムまたは他の電子装置が含まれる。このコンピュータシステムまたは電子装置の実施例には、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバー、ネットワーク装置（たとえばルータおよびスイッチ）、モバイルインターネット装置（ＭＩＤ）、メディアプレーヤー、スマートテレビ、ネットトップ、セットトップボックス、およびテレビゲーム制御装置が含まれるが、これに限定するものではない。
【０２１０】
この明細書内で、「一実施形態」、「実施形態」、「一つ以上の実施形態」、「実施形態では」を例えば参照するときは、特定の特徴がその発明を実行する中に含まれる場合があることを示し、必ずしも必須ではない。同様に、詳細な説明中で、開示を効率的にし、様々な発明の側面を理解するのを助ける目的で、単一の実施形態、図、またはその詳細な説明において、様々な特徴が分類されることもある。但しこの開示方法は、発明が各特許請求の範囲に明確に列挙された特徴を超えて要求する意図を反映しているとして解釈されるものではない。むしろ以下の特許請求の範囲に反映されるように、発明の側面は、単一の開示された実施形態のすべての特徴事項未満にある。したがって、詳細な説明に続く特許請求の範囲は、ここでこの詳細な説明に明確に組み入れられ、各特許請求の範囲は、本発明の別々の実施形態としてのそれ自体に基づく。
【０２１１】
［実施形態例］
以下の実施例はさらなる実施形態に関連する。実施例の仕様は、一つ以上の実施形態のすべてのところで用いられる場合がある。
【０２１２】
実施例１は、複数のパックデータ・レジスタと、命令をデコードするデコードユニットを備えるプロセッサである。命令は、少なくとも１つのビットレーンを備える第１のソースオペランンドを示す。命令はまた、複数のサブレーンサイズのビット選択要素を備える第２のソースパックデータ・オペランドを示す。プロセッサは、パックデータ・レジスタおよびデコードユニットに結合した実行ユニットを備える。実行ユニットは、命令に応じて、命令が示すデスティネーション記憶位置に結果オペランドを記憶する。結果オペランドは、複数のサブレーンサイズのビット選択要素のそれぞれに対し異なる対応ビットを含む。サブレーンサイズのビット選択要素に対応する結果オペランドの各ビット値は、対応するビットレーン値、対応するサブレーンサイズのビット選択要素によって示される第１のソースオペランドの少なくとも１つのビットレーンの値である。
【０２１３】
実施例２は、実施例１のプロセッサを含んでおり、その複数のサブレーンサイズのビット選択要素は、複数のビットレーンのうちの異なる一つにそれぞれ対応する複数のサブセットを含む。また実行ユニットは、命令に応じて、サブレーンサイズのビット選択要素の各サブセットを用い、対応するビットレーンの中のみからビットを選択する。
【０２１４】
実施例３は実施例２のプロセッサを含んでおり、その実行ユニットは、命令に応じて、複数のビットレーンを有するパックデータ・レジスタに結果オペランドを記憶する。
【０２１５】
実施例４は実施例３のプロセッサを含んでおり、その実行ユニットは、命令に応じて、サブレーンサイズのビット選択要素の各サブセットによって選択されたビットを、パックデータ・レジスタの対応するビットレーンに記憶する。
【０２１６】
実施例５は実施例４のプロセッサを含んでおり、その実行ユニットは、命令に応じて、サブレーンサイズのビット選択要素の各サブセットによって選択されたビットの少なくとも一つの複製をパックデータ・レジスタの対応するビットレーンに記憶する。
【０２１７】
実施例６は実施例５のプロセッサを含んでおり、そのデコードユニットは、ソースプレディケートマスクオペランドを示す命令をデコードする。また実行ユニットは、命令に応じて、ソースプレディケートマスクオペランドを随意に用い、サブレーンサイズのビット選択要素の各サブセットによって選択されたビットの記憶と、パックデータ・レジスタの対応するビットレーン内の複製をプレディケートもする。
【０２１８】
実施例７は実施例１のプロセッサを含んでおり、各サブレーンサイズのビット選択要素は、同じ相対位置の結果オペランドのビットに対応する。また随意に、第２のソースパックデータ・オペランドは、少なくとも１６のサブレーンサイズのビット選択要素を有する。
【０２１９】
実施例８は実施例１のプロセッサを含んでおり、その実行ユニットは、命令に応じて、パックデータ演算マスクレジスタであるデスティネーション記憶位置に結果オペランドを記憶する。
【０２２０】
実施例９は実施例１のプロセッサを含んでおり、その実行ユニットは、命令に応じて、汎用レジスタであるデスティネーション記憶位置に結果オペランドを記憶する。
【０２２１】
実施例１０は実施例１のプロセッサを含んでおり、そのデコードユニットは、単一のビットレーンを有する第１のソースオペランドを示す命令をデコードし、複数のサブレーンサイズのビット選択要素すべてが、単一のビットレーンに対応している。また随意に、実行ユニットは、命令に応じて、複数のサブレーンサイズのビット選択要素のそれぞれに対して、単一のビットレーンのうちの一ビットに関して結果オペランドを記憶する。
【０２２２】
実施例１１は実施例１から実施例９のいずれか一つのプロセッサを含んでおり、そのデコードユニットは、第１のソースオペランドが複数のビットレーンを有することを示す命令をデコードする。
【０２２３】
実施例１２は実施例１から実施例９のいずれか一つのプロセッサを含んでおり、そのデコードユニットは、単一のビットレーンを有する第１のソースオペランドを示す命令をデコードし、そのプロセッサは、命令に応じて、第１のソースオペランドの単一のビットレーンを複数回複製し、複数のビットレーンを作成する。
【０２２４】
実施例１３は実施例１から実施例９のいずれか一つのプロセッサを含んでおり、そのデコードユニットは、第１のソースオペランドが少なくとも一つの６４ビットレーンを有することを示し、第２のソースパックデータ・オペランドが複数の少なくとも６ビットサイズのビット選択要素を有することを示す命令をデコードする。
【０２２５】
実施例１４は実施例１３のプロセッサを含んでおり、少なくとも６ビットのビット選択要素それぞれが、第２のソースパックデータ・オペランドの異なる対応する８ビットバイトにある。また随意に、その第２のソースパックデータ・オペランドは、少なくとも１６のビット選択要素を有している。
【０２２６】
実施例１５は実施例１から実施例９のいずれか一つのプロセッサを含んでおり、そのデコードユニットは、第２のソースパックデータ・オペランドが、第１のソースオペランドの少なくとも１つのビットレーンのそれぞれの中の複数ビットと同じ複数のサブレーンサイズのビット選択要素を有することを示す命令をデコードする。
【０２２７】
実施例１６は、第１のソースオペランドが少なくとも１つのビットレーンを有することを示す命令を受信する工程を含むプロセッサでの方法である。その命令はまた、第２のソースパックデータ・オペランドが、複数のサブレーンサイズのビット選択要素を有することを示す。その方法はまた、命令に応じて、命令が示すデスティネーション記憶位置に結果オペランドを記憶する工程を含む。その結果オペランドは、複数のサブレーンサイズのビット選択要素のそれぞれに対して異なる対応ビットを含む。サブレーンサイズのビット選択要素に対応する結果オペランドの各ビット値は、対応するビットレーンのビット値、対応するサブレーンサイズのビット選択要素によって示される第１のソースオペランドの少なくとも１つのビットレーン値である。
【０２２８】
実施例１７は実施例１６の方法を含んでおり、その記憶する工程は、プレディケートマスクレジスタであるデスティネーション記憶位置に結果オペランドを記憶する工程を含む。また随意に、結果オペランドの各ビットは、同じ相対位置のサブレーンサイズのビット選択要素に対応する。
【０２２９】
実施例１８は実施例１６の方法を含んでおり、その受信する工程は、第２のソースパックデータ・オペランドが、それぞれが複数のビットレーンのうちの異なる一つに対応する複数のサブセットを含む複数のサブレーンサイズのビット選択要素を有することを示す命令を受信する工程を含む。その方法は随意に、サブレーンサイズのビット選択要素の各サブセットを用い、対応するビットレーンの中のみからビットを選択する工程を含む。
【０２３０】
実施例１９は実施例１８の方法を含んでおり、その記憶する工程は、複数のビットレーンを有するパックデータ・レジスタに結果オペランドを記憶する工程を含み、結果オペランドの１ビットレーンは、対応するサブセットによって選択されるビットの複数の複製だけでなく、サブレーンサイズのビット選択要素の対応するサブセットによって選択されるビットを含む。
【０２３１】
実施例２０は実施例１６の方法を含んでおり、その受信する工程は、第１のソースオペランドが複数の６４ビットのビットレーンを有することを示し、第２のソースパックデータ・オペランドが、６４ビットのビットレーンの異なる一つにそれぞれが対応する複数の組として配置された複数の少なくとも６ビットのビット選択要素を有することを示す命令を受信する工程を含む。
【０２３２】
実施例２１は実施例１６の方法を含んでおり、その受信する工程は、単一のビットレーンを有する第１のソースオペランドを示す命令を受信する工程を含む。またその方法は随意に、命令に応じて、第１のソースオペランドの単一のビットレーンを複数回複製し、複数のビットレーンを作成する工程を含む場合がある。
【０２３３】
実施例２２は、相互接続を含む命令を処理するシステム、および相互接続で結合されるプロセッサである。そのプロセッサは、第１のソースオペランドが少なくとも１つのビットレーンを有することを示し、第２のソースパックデータ・オペランドが複数のサブレーンサイズのビット選択要素を有することを示す命令を受信する。その命令はデスティネーション記憶位置も示す。そのプロセッサは、命令に応じて、結果オペランドをデスティネーション記憶位置に記憶する。結果オペランドは、複数のサブレーンサイズのビット選択要素のそれぞれに対して異なる対応ビットを含む。サブレーンサイズのビット選択要素に対応する結果オペランドの各ビット値は、対応するビットレーンのビット値、対応するサブレーンサイズのビット選択要素によって示される第１のソースオペランドの少なくとも１つのビットレーンの値である。システムは、相互接続に結合されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）も含む。
【０２３４】
実施例２３は実施例２２のシステムを含んでおり、その複数のサブレーンサイズのビット選択要素は、複数のビットレーンのうちの異なる一つにそれぞれが対応する複数のサブセットを含む。また随意に、そのプロセッサは、命令に応じて、サブレーンサイズのビット選択要素の各サブセットを用い、対応するビットレーンの中のみからビットを選択する。
【０２３５】
実施例２４は、非一時的機械可読記憶媒体を含む製造品目である。その非一時的機械可読記憶媒体は命令を記憶する。その命令は、少なくとも１つのビットレーンを備える第１のソースオペランドを含み、複数のサブレーンサイズのビット選択要素を備える第２のソースパックデータ・オペランドを示す。機械によって実行された場合、その命令によって機械は、結果オペランドを命令が示すデスティネーション記憶位置に記憶する工程を含む演算を実行する。結果オペランドは、複数のサブレーンサイズのビット選択要素のそれぞれに対して異なる対応ビットを含む。サブレーンサイズのビット選択要素に対応する結果オペランドの各ビット値は、対応するビットレーンのうちの一ビット値、第１のソースオペランドの少なくとも１つのビットレーンの値であり、対応するサブレーンサイズのビット選択要素によって示される。
【０２３６】
実施例２５は実施例２２の製造品目を含んでおり、機械によって実行された場合、その命令によって機械は、結果オペランドをプレディケートマスクレジスタに記憶する。
【０２３７】
実施例２６は、実施例１６から実施例２１のいずれか一つの方法を実行できるプロセッサまたは他の装置である。
【０２３８】
実施例２７は実施例１６から実施例２１のいずれか一つの方法を実行する手段を含むプロセッサまたは他の装置である。
【０２３９】
実施例２８は実施例１６から実施例２１のいずれか一つの方法を実行するモジュールを含むプロセッサまたは他の装置である。
【０２４０】
実施例２９は実施例１６から実施例２１のいずれか一つの方法を実行するモジュールおよび／またはユニットおよび／または論理および／または回路および／または手段の任意の組合せを含むプロセッサである。
【０２４１】
実施例３０は随意に非一時的機械可読媒体を含む製造品目であり、プロセッサ、システム、電子装置または他の機械によって実行される場合および／または時には、機械に実施例１６から実施例２１のいずれか一つの方法を実行させる命令を、随意に記憶あるいは与える。
【０２４２】
実施例３１は、コンピュータシステム、他の電子装置、またはバスまたは他の相互接続を含む他の装置、実施例１から実施例１５のいずれか一つのプロセッサ、およびダイナミックランダムアクセスメモリ（ＤＲＡＭ）、ネットワークインタフェース、グラフィックスチップ、無線通信チップ、グローバル・システム・フォー・モバイル・コミュニケーションズ（ＧＳＭ（登録商標））アンテナ、相変化メモリ、およびビデオカメラから選択される相互接続に結合される少なくとも一つの構成部品である。
【０２４３】
実施例３２は、ここで実質的に記載されるプロセッサまたは他の装置である。
【０２４４】
実施例３３は、ここで実質的に記載される任意の方法を実行できるプロセッサまたは他の装置である。
【０２４５】
実施例３４は、ここで実質的に記載される任意のビットシャッフル命令を実行できるプロセッサまたは他の装置である。
【０２４６】
実施例３５は、第１の命令セットの命令をデコードするデコードユニットを含むプロセッサまたは他の装置である。デコードユニットは、第１の命令をエミュレートする第１の命令セットの一つ以上の命令を受信する。第１の命令は、実質的にここで開示される任意のビットシャッフル命令の場合があり、第２の異なる命令セットの命令である。プロセッサまたは他の装置はデコードユニットと結合された一つ以上の実行ユニットも含み、第１の命令セットの一つ以上の命令を実行する。その一つ以上の実行ユニットは、第１の命令セットの一つ以上の命令に応じ、結果をデスティネーションに記憶する。その結果は、第１の命令に関して実質的にここで開示されたビットシャッフル命令の任意の結果を含む場合がある。
【０２４７】
実施例３６は、第１の命令セットの命令をデコードするデコードユニットを備えるプロセッサを含むコンピュータシステムまたは他の電子装置である。そのプロセッサは、一つ以上の実行ユニットも備える。その電子装置は、プロセッサと結合された記憶装置も含む。その記憶装置は、第１の命令を記憶し、それは実質的にここに記載された任意のビットシャッフル命令の場合があり、第２の異なる命令セットの命令である。その記憶装置はまた、第１の命令を第１の命令セットの一つ以上の命令に変換する命令を記憶する。その第１の命令セットの一つ以上の命令は、プロセッサが実行する場合、プロセッサに結果をデスティネーションに記憶させる。その結果は、第１の命令に関してここで実質的に開示するように、ビットシャッフル命令の任意の結果を含む場合がある。
【図１】
0006526175.tif 000005
【図２】
0006526175.tif 000006
【図３】
0006526175.tif 000007
【図４】
0006526175.tif 000008
【図５】
0006526175.tif 000009
【図６】
0006526175.tif 000010
【図７】
0006526175.tif 000011
【図８】
0006526175.tif 000012
【図９】
0006526175.tif 000013
【図１０】
0006526175.tif 000014
【図１１】
0006526175.tif 000015
【図１２】
0006526175.tif 000016
【図１３Ａ】
0006526175.tif 000017
【図１３Ｂ】
0006526175.tif 000018
【図１３Ｃ】
0006526175.tif 000019
【図１４Ａ】
0006526175.tif 000020
【図１４Ｂ】
0006526175.tif 000021
【図１５Ａ】
0006526175.tif 000022
【図１５Ｂ】
0006526175.tif 000023
【図１５Ｃ】
0006526175.tif 000024
【図１５Ｄ】
0006526175.tif 000025
【図１６】
0006526175.tif 000026
【図１７Ａ】
0006526175.tif 000027
【図１７Ｂ】
0006526175.tif 000028
【図１８Ａ】
0006526175.tif 000029
【図１８Ｂ】
0006526175.tif 000030
【図１９】
0006526175.tif 000031
【図２０】
0006526175.tif 000032
【図２１】
0006526175.tif 000033
【図２２】
0006526175.tif 000034
【図２３】
0006526175.tif 000035
【図２４】
0006526175.tif 000036