(57)【要約】      （修正有）【課題】ソート加速命令をデコードするためのデコードユニットと複数のパックドデータレジスタとを有するプロセッサを提供する。【解決手段】ソート加速命令１０２は、少なくとも４つのデータ要素を含む第１又は第２のソースパックドデータ１１０、１１２を示し、行き先格納位置１１４を示する。実行ユニット１０６は、複数のパックドデータレジスタ１０８及びデコードユニット１０４と結合される。実行ユニット１０８は、命令に応答して、行き先格納位置１１４に、結果パックドデータを格納する。結果パックドデータは、第１及び第２のソースパックドデータでの対応する複数のデータ要素位置を特定することのできる少なくとも４つのインデックスを有する。複数のインデックスは、第１及び第２のソースパックドデータでの対応する複数のデータ要素のソートされた順序を表す結果パックドデータにおける複数の位置に格納される。【選択図】図１
2015191659.tif 000002
【特許請求の範囲】
【請求項１】
複数のパックドデータレジスタと、
命令をデコードするデコードユニットであって、前記命令は、少なくとも４つのデータ要素の第１のセットを有する第１のソースパックドデータを示し、少なくとも４つのデータ要素の第２のセットを有する第２のソースパックドデータを示し、かつ、行き先格納位置を示す、デコードユニットと、
前記複数のパックドデータレジスタおよび前記デコードユニットに結合された実行ユニットであって、前記実行ユニットは前記命令に応答して結果パックドデータを前記行き先格納位置に格納し、前記結果パックドデータは少なくとも４つのインデックスを有する、実行ユニットと
を備え、
前記複数のインデックスは、前記第１のソースパックドデータおよび前記第２のソースパックドデータにおける対応する複数のデータ要素位置を特定し、
前記複数のインデックスは、前記第１のソースパックドデータおよび前記第２のソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す前記結果パックドデータにおける複数の位置に格納されるである、プロセッサ。
【請求項２】
前記実行ユニットは、前記第１および第２のソースパックドデータのそれぞれにおいて前記複数のインデックスのそれぞれが対応するデータ要素位置を特定する前記結果パックドデータを、格納し、
前記実行ユニットは、前記命令に応答して少なくとも４つのマスク要素を有する結果マスクを格納し、
前記結果マスクにおいて、
各マスク要素は前記複数のインデックスの異なる１つに対応し、かつ、各マスク要素は前記対応するインデックスに対する前記データ要素位置が前記第１のソースパックドデータにあるか、または前記第２のソースパックドデータにあるかを示す、請求項１に記載のプロセッサ。
【請求項３】
前記結果マスクを格納するマスクレジスタを更に備え、
前記命令は、パックドデータオペレーションをプレディケートする叙述オペランドとして前記結果マスクを示すことができる第２の命令を有する命令セットに含まれる、請求項２に記載のプロセッサ。
【請求項４】
実行ユニットは、前記結果パックドデータを格納し、前記結果パックドデータにおける前記複数のインデックスのそれぞれが、前記第１のソースパックドデータおよび前記第２のソースパックドデータのうちの１つにおいて前記対応する単一のデータ要素を特定する、請求項１に記載のプロセッサ。
【請求項５】
前記実行ユニットは、前記命令に応答して、第２の結果パックドデータを、前記命令によって示されるべき第２の行き先格納位置に格納し、
前記第２の結果パックドデータは、前記ソートされた順序を反映した前記第２の結果パックドデータの複数の位置に格納された前記複数のインデックスに対応する前記第１のソースパックドデータおよび前記第２のソースパックドデータからの前記複数のデータ要素を有する、請求項１から４のいずれか１項に記載のプロセッサ。
【請求項６】
前記デコードユニットは、前記命令に対してソートされた順序となっていると仮定される前記少なくとも４つのデータ要素を含む前記第１のソースパックドデータを示し、かつ前記命令に対してソートされた順序となっていると仮定される前記少なくとも４つのデータ要素を含む前記第２のソースパックドデータを示す前記命令、をデコードする、請求項１から４のいずれか１項に記載のプロセッサ。
【請求項７】
前記デコードユニットは、前記命令に対してソートされた順序となっていないと仮定される前記少なくとも４つのデータ要素を含む前記第１のソースパックドデータを示し、かつ前記命令に対してソートされた順序となっていないと仮定される前記少なくとも４つのデータ要素を含む前記第２のソースパックドデータを示す前記命令、をデコードする、請求項１から４のいずれか１項に記載のプロセッサ。
【請求項８】
前記実行ユニットは前記結果パックドデータを格納し、
前記結果パックドデータにおいて、前記複数のインデックスが、前記第１のソースパックドデータおよび前記第２のソースパックドデータの前記複数のデータ要素の全てにおける最小の半分を含む前記対応する複数のデータ要素の前記ソートされた順序を表す前記複数の位置に格納される、請求項１から４のいずれか１項に記載のプロセッサ。
【請求項９】
前記実行ユニットは、前記結果パックドデータを格納し、
前記結果パックドデータにおいて、前記複数のインデックスが、前記第１のソースパックドデータおよび前記第２のソースパックドデータの前記複数のデータ要素の全てにおける最大の半分を含む前記対応する複数のデータ要素の前記ソートされた順序を表す前記複数の位置に、格納される、請求項１から４のいずれか１項に記載のプロセッサ。
【請求項１０】
前記デコードユニットは、それぞれが３２ビットおよび６４ビットの一方を有する少なくとも８つのデータ要素を含む前記第１のソースパックドデータを示す前記命令を、デコードする、請求項１から４のいずれか１項に記載のプロセッサ。
【請求項１１】
プロセッサにおける方法であって、
命令を受信する段階であって、前記命令が、少なくとも４つのデータ要素の第１のセットを有する第１のソースパックドデータを示し、少なくとも４つのデータ要素の第２のセットを有する第２のソースパックドデータを示し、かつ行き先格納位置を示す、受信する段階と、
前記命令に応答して結果パックドデータを前記行き先格納位置に格納する段階と
を備え、
前記結果パックドデータは少なくとも４つのインデックスを有し、
前記複数のインデックスは、前記第１のソースパックドデータおよび前記第２のソースパックドデータにおける対応する複数のデータ要素位置を特定し、
前記複数のインデックスは、前記第１のソースパックドデータおよび前記第２のソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す前記結果パックドデータにおける複数の位置に格納される、方法。
【請求項１２】
受信する段階が、前記少なくとも４つのデータ要素をソートされた順序で有する前記第１のソースパックドデータを示す前記命令を受信する段階を有する、請求項１１に記載の方法。
【請求項１３】
複数のパックドデータレジスタと、
命令をデコードするデコードユニットであって、前記命令が、ソートされた順序ではない少なくとも４つのデータ要素を有するソースパックドデータを示し、かつ行き先格納位置を示す、デコードユニットと、
前記複数のパックドデータレジスタおよび前記デコードユニットに結合された実行ユニットであって、前記命令に応答して結果パックドデータを前記行き先格納位置に格納し、前記結果パックドデータは少なくとも４つのインデックスを有する、実行ユニットと
を備え、
前記複数のインデックスは、前記ソースパックドデータにおける対応する複数のデータ要素を特定し、
前記複数のインデックスは、前記ソースパックドデータにおいて前記対応する複数のデータ要素の前記ソートされた順序を表す前記結果パックドデータにおける複数の位置に格納される、プロセッサ。
【請求項１４】
前記実行ユニットは、前記命令に応答して、第２の結果パックドデータを、前記命令によって示される第２の行き先格納位置に格納し、
前記第２の結果パックドデータは、前記ソートされた順序を反映した前記第２の結果パックドデータの複数の位置に格納された前記対応する複数のデータ要素を有する、請求項１３に記載のプロセッサ。
【請求項１５】
前記結果パックドデータは、前記ソースパックドデータにおける全てのデータ要素に対応する複数のインデックスを有する、請求項１３または１４に記載のプロセッサ。
【請求項１６】
前記デコードユニットは、それぞれが３２ビットおよび６４ビットの一方を有する少なくとも８つのデータ要素を含む前記ソースパックドデータを示す前記命令を、デコードする、請求項１３または１４に記載のプロセッサ。
【請求項１７】
プロセッサにおける方法であって、
命令を受信する段階であって、前記命令が、ソートされた順序ではない少なくとも４つのデータ要素を有するソースパックドデータを示し、かつ行き先格納位置を示す、受信する段階と、
前記命令に応答して結果パックドデータを前記行き先格納位置に格納する段階と
を備え、
前記結果パックドデータは少なくとも４つのインデックスを有し、
前記複数のインデックスは、前記ソースパックドデータにおける対応する複数のデータ要素を特定し、
前記複数のインデックスは、前記ソースパックドデータにおいて前記対応する複数のデータ要素の前記ソートされた順序を表す前記結果パックドデータにおける複数の位置に格納される、方法。
【請求項１８】
前記命令によって示される第２の行き先格納位置に第２の結果パックドデータを格納する段階を更に備え、
前記第２の結果パックドデータは、前記ソートされた順序を反映した複数の位置に格納された前記対応する複数のデータ要素を有する、請求項１７に記載の方法。
【請求項１９】
複数の命令を処理するシステムであって、
相互接続と、
前記相互接続に結合されたプロセッサと、
前記相互接続に結合されたダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）と
を備え、
前記プロセッサは命令を受信し、前記命令が、少なくとも４つのデータ要素の第１のセットを有する第１のソースパックドデータを示し、少なくとも４つのデータ要素の第２のセットを有する第２のソースパックドデータを示し、かつ宛先レジスタを示し、前記プロセッサは、前記命令に応答して、結果パックドデータを前記宛先レジスタに格納し、
前記結果パックドデータは少なくとも４つのインデックスを有し、
前記複数のインデックスは、前記第１のソースパックドデータおよび前記第２のソースパックドデータにおける対応する複数のデータ要素位置を特定し、
前記複数のインデックスは、前記第１のソースパックドデータおよび前記第２のソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す前記結果パックドデータにおける複数の位置に格納され、
前記ＤＲＡＭは、データをソートすべく前記結果パックドデータの前記複数のインデックスを使用するためのアルゴリズムを格納する、システム。
【請求項２０】
前記プロセッサは、前記結果パックドデータを格納し、前記結果パックドデータにおける前記複数のインデックスのそれぞれが、前記第１のソースパックドデータおよび前記第２のソースパックドデータのうちの１つにおいて、前記対応する単一のデータ要素を特定する、請求項１９に記載のシステム。
【請求項２１】
コンピュータに命令を実行させるためのプログラムであって、
前記命令は少なくとも４つのデータ要素の第１のセットを有する第１のソースパックドデータを示し、少なくとも４つのデータ要素の第２のセットを有する第２のソースパックドデータを示し、かつ行き先格納位置を示し、
前記命令は前記コンピュータに実行されると前記コンピュータに複数のオペレーションを実行させ、前記複数のオペレーションは、
前記命令に応答して結果パックドデータを前記行き先格納位置に格納する段階を備え、
前記結果パックドデータは少なくとも４つのインデックスを有し、
前記複数のインデックスは、前記第１のソースパックドデータおよび前記第２のソースパックドデータにおける対応する複数のデータ要素位置を特定し、
前記複数のインデックスは、前記第１のソースパックドデータおよび前記第２のソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す前記結果パックドデータにおける複数の位置に格納される、プログラム。
【請求項２２】
前記命令は、ソートされた順序で前記少なくとも４つのデータ要素を有する前記第１のソースパックドデータを示す、請求項２１に記載のプログラム。
【請求項２３】
請求項１１または１２に記載の方法を実行するための手段を備える、プロセッサ。
【請求項２４】
コンピュータに実行されると、前記コンピュータに請求項１１または１２に記載の方法を実行させるためのプログラム。
【請求項２５】
請求項１７または１８に記載の方法を実行するための手段を備える、プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
本明細書で記載される複数の実施形態は、概して、プロセッサに関する。具体的には、本明細書で記載される複数の実施形態は、概して、複数のプロセッサにおけるソートデータに関する。
【０００２】
背景情報
データソートオペレーションは、コンピュータ、サーバ、データセンタ、ソートネットワーク等において、広く使用される。例えば、ソートオペレーションは一般的には、ごく僅かな例を挙げるならば、スプレッドシート、データベース、構造化照会言語（ＳＱＬ）データベースまたはサーバ、データセンタ、高性能コンピューティング（ＨＰＣ）、アパッチ・ハドゥープ・ソフトウェア・フレームワーク、（例えば、メジアンフィルタやジェスチャ認識等のための）画像処理、およびニューラル・ネットワークで使用される。特に大きなデータセットをソートする際に、ソートオペレーションは、コンピュータ的に集約される可能性があり、全体的な性能に影響を与える傾向があるかもしれない。
【図面の簡単な説明】
【０００３】
本発明は、複数の実施形態を例示するために用いられる以下の説明と添付の図面とを参照することにより、最も良く理解される。
【図１】ソート加速命令の実施形態を実行可能なプロセッサの実施形態のブロック図である。
【図２】シングル・ソースソート・複数インデックス・命令の実施形態を実行する方法の実施形態のブロック流れ図である。
【図３】シングル・ソースソート・複数インデックス・オペレーションの実施形態のブロック図である。
【図４】シングル・ソースソート・複数インデックスおよび複数データ要素・オペレーションの実施形態のブロック図である。
【図５】２つのソースソート・複数インデックス・命令の実施形態を実行する方法の実施形態のブロック流れ図である。
【図６】複数データ要素・オペレーションの最小の半分のための２つのソースソート・複数インデックスの実施形態のブロック図である。
【図７】複数データ要素・オペレーションの最大の半分のための２つのソースソート・複数インデックスの実施形態のブロック図である。
【図８】複数データ要素・オペレーションの最小の半分のための２つのソートされていないソースソート・複数インデックスの実施形態のブロック図である。
【図９】複数データ要素・オペレーションの最小の半分のための２つのソースソート・複数インデックスおよびデータの実施形態のブロック図である。
【図１０】複数データ要素・オペレーションの最小の半分のためのマスクを有する２つのソースソート・複数インデックスの実施形態のブロック図である。
【図１１】複数データ要素・オペレーションの最大の半分のためのマスクを有する２つのソースソート・複数インデックスの実施形態のブロック図である。
【図１２】複数データ要素・オペレーションの最小の半分のためのマスクを有する２つのソートされていないソースソート・複数インデックスの実施形態のブロック図である。
【図１３】マスクを有する２つのソースソート・複数インデックス、および複数データ要素・オペレーションの最小の半分のためのソートデータの実施形態のブロック図である。
【図１４】複数のパックドデータレジスタの適切な一セットの実施形態のブロック図である。
【図１５】図１５Ａおよび図１５Ｂは、本発明の複数の実施形態における、一般的なベクトルフレンドリな命令フォーマットおよびその命令テンプレートを例示するブロック図である。
【図１６Ａ】本発明の複数の実施形態における、例示的な特定のベクトルフレンドリな命令フォーマットを例示するブロック図である。
【図１６Ｂ】本発明の一実施形態における、フルオペコードフィールドを構成する、特定のベクトルフレンドリな命令フォーマットの複数のフィールドを例示するブロック図である。
【図１６Ｃ】本発明の一実施形態における、レジスタインデックスフィールドを構成する、特定のベクトルフレンドリな命令フォーマットの複数のフィールドを例示するブロック図である。
【図１６Ｄ】本発明の一実施形態における、拡大オペレーションフィールドを構成する、特定のベクトルフレンドリな命令フォーマットの複数のフィールドを例示するブロック図である。
【図１７】レジスタ・アーキテクチャの実施形態のブロック図である。
【図１８Ａ】インオーダパイプラインの実施形態およびレジスタリネーミング・アウトオブオーダ発行／実行パイプラインの実施形態を例示するブロック図である。
【図１８Ｂ】実行エンジンユニットに連結されたフロントエンド・ユニットを有し、両者がメモリユニットに連結された、プロセッサコアの実施形態のブロック図である。
【図１９Ａ】オンダイ相互接続ネットワークへの接続およびレベル２（Ｌ２）キャッシュのローカルサブセットと共に、単一のプロセッサコアの実施形態のブロック図を示す。
【図１９Ｂ】図１９Ａのプロセッサコアの部分の拡張図の実施形態のブロック図である。
【図２０】１より多くのコアを有してよく、統合メモリコントローラを有してよく、かつ集積化されたグラフィックスを有してよいプロセッサの実施形態のブロック図である。
【図２１】コンピューターアーキテクチャの第１実施形態のブロック図である。
【図２２】コンピューターアーキテクチャの第２実施形態のブロック図である。
【図２３】コンピューターアーキテクチャの第３実施形態のブロック図である。
【図２４】コンピューターアーキテクチャの第４実施形態のブロック図である。
【図２５】本発明の実施形態における、ソース命令セット中の複数のバイナリ命令を、ターゲット命令セット中の複数のバイナリ命令へと変換するためのソフトウエア命令コンバータの使用のブロック図である。
【発明を実施するための形態】
【０００４】
ここでは、複数のソート加速命令、複数の命令を実行するための複数のプロセッサ、複数の命令を処理または実行する場合に複数のプロセッサによって実行される複数の方法、および、複数の命令を処理または実行するための１または複数のプロセッサを組み込んだ複数のシステム、が開示される。以下の説明では、多数の特定の詳細が記載される（例えば、複数の特定の命令オペレーション、複数のパックドデータフォーマット、複数のプロセッサ構成、マイクロアーキテクチャの詳細、複数のオペレーションによる複数のシーケンスなど）。しかしながら、複数の実施形態が、これらの特定の詳細を有さずに実施されてよい。他の複数の例では、説明の理解が分かりにくくなることを避けるべく、周知の回路、周知の構造および周知の技術は、詳細を示していない。
【０００５】
図１は、ソート加速命令１０２の実施形態を実行可能なプロセッサ１００の実施形態のブロック図である。いくつかの実施形態において、プロセッサは、（例えば、デスクトップ、ラップトップ、または他の複数のコンピュータでしばしば使用されるタイプの）汎用プロセッサであってよい。あるいは、プロセッサは特殊目的プロセッサであってよい。これらに限られるわけではないが、適切な特殊目的プロセッサの例として、ネットワークプロセッサ、通信プロセッサ、グラフィクスプロセッサ、暗号プロセッサ、コプロセッサ、組込みプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、およびコントローラ（マイクロコントローラ）を含む。プロセッサは、さまざまな複合命令セットコンピューティング（ＣＩＳＣ）プロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、超長命令語（ＶＬＩＷ）プロセッサ、それらのハイブリッド、またはその他のタイプのいずれであってよく、あるいは、そのような異なるプロセッサ（例えば、異なる複数のコア中で）の組み合わせを有してもよい。
【０００６】
オペレーションの間、プロセッサ１００は、ソート加速命令１０２の実施形態を受信してよい。例えば、命令は、命令取出しユニットおよび命令キューなどから受信されてよい。ソート加速命令は、マクロ命令、アセンブリ言語命令、マシン語命令、または、プロセッサの命令セットの命令若しくは制御信号、を表してよい。いくつかの実施形態においてソート加速命令は、ソースパックドデータ１１０を、（例えば、１または複数のフィールドまたは１セットの複数ビットによって）明示的に規定するか、あるいは（例えば暗示的に示すなどして）示してよく、結果パックドデータ１１４が格納されるべき宛先（例えば、行き先格納位置）を規定するかあるいは示してよい。いくつかの実施形態において、命令は、任意選択的に第２のソースパックドデータ１１２を規定するかあるいは示してよく、いくつかの実施形態では、第２の結果パックドデータ１１６が格納されるべき第２の宛先（例えば、行き先格納位置）を、任意選択的に規定するかあるいは示してよい。
【０００７】
再び図１を参照するとプロセッサはデコードユニットまたはデコーダ１０４を含む。デコードユニットは、ソート加速命令をデコードしてよい。デコードユニットは、１または複数の、マイクロ命令／マイクロオペレーション／マイクロコードエントリーポイント／デコードされた命令もしくは制御信号、または、その他の比較的下位レベルの命令もしくは制御信号を出力してよく、これらはソート加速命令を反映し、表し、および／またはソート加速命令から導出される。１または複数の下位レベルの命令または制御信号は、１または複数の下位レベルのオペレーション（例えば、回路レベルまたはハードウェアレベル）によって、高位レベルの命令を実行してよい。いくつかの実施形態においてデコードユニットは、命令を受信するための１または複数の入力構造（１または複数のポート、１または複数の相互接続、インターフェース、など）、複数の入力構造に連結され、命令を認識しデコードするための命令認証デコードロジック、命令認証デコードロジックに連結され１または複数の対応する下位レベルの命令または制御信号を出力するための１または複数の出力構造（１または複数のポート、１または複数の相互接続、インターフェース、など）を有してよい。デコードユニットは様々な異なるメカニズムを用いて実装されてよく、これに限定されるものではないが、当該メカニズムは、複数のマイクロコード読み出し専用メモリ（ＲＯＭ）、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラム可能ロジックアレイ（ＰＬＡ）、および、当技術分野において周知のデコードユニットを実装するために用いられるその他の複数のメカニズムを含む。
【０００８】
いくつかの実施形態では、デコードユニットへ直接提供されるソート加速命令ではなく、命令エミュレータ、翻訳器、モーフィング器、インタープリター、またはその他の命令変換モジュールが、任意選択的に使用されてよい。当技術分野において、様々なタイプの命令変換モジュールが知られており、ソフトウェア、ハードウェア、ファームウェアまたはその組み合わせで実装されてよい。いくつかの実施形態では、命令変換モジュールは、例えば、別個のダイの上、および／またはメモリの中（スタティック、ダイナミックまたはランタイムエミュレーションモジュール等として）などのように、プロセッサ外に位置してよい。一例として、命令変換モジュールは、ソート加速命令を受信してよく、これは第１の命令セットであってよく、そして命令変換モジュールは、ソート加速命令を、１または複数の対応または導出された中間命令または制御信号へとエミュレート、翻訳、モーフィング、解釈、または変換してよく、この中間命令または制御信号は第２の異なる命令セットであってよい。第２の命令セットにおける１または複数の中間命令または制御信号は、デコードユニットへ提供されてよく、デコードユニットは、それらを、プロセッサのネイティブハードウェア（１または複数の実行ユニットなど）によって実行可能な、１または複数の下位レベルの命令または制御信号へとデコードしてよい。
【０００９】
プロセッサ１００は、また、複数のパックドデータレジスタ１０８の１セットを含んでよい。複数のパックドデータレジスタのそれぞれは、パックドデータ、ベクトルデータまたはＳＩＭＤデータを格納可能なオンダイの格納位置を表してよい。複数のパックドデータレジスタは、アーキテクチャ的に可視の複数のレジスタ（アーキテクチャレジスタファイルなど）を表してよい。アーキテクチャ的に可視の複数のレジスタまたはアーキテクチャ的な複数のレジスタは、ソフトウェアおよび／またはプログラマにとって可視であり、かつ／あるいは、複数のオペランドを特定するプロセッサの命令セットにおける複数の命令により示される複数のレジスタである。これらの複数のアーキテクチャレジスタは、所与のマイクロアーキテクチャ（例えば、複数の一時レジスタ、複数のリオーダ・バッファ、複数のリタイアメントレジスタなど）における、その他の非アーキテクチャ的なまたは非アーキテクチャ的に可視の複数のレジスタとは、対照をなす。複数のパックドデータレジスタは、複数の周知の技法を用いて異なる複数のマイクロアーキテクチャに異なる方法で実装されてよく、そして、いかなる特定の回路のタイプにも限定されない。これに限定されるわけではないが、複数のレジスタの適切なタイプの例としては、複数の専用物理レジスタ、レジスタリネーミングを使用して動的に割り当てられる複数の物理レジスタ、およびそれらの組み合わせを含む。
【００１０】
いくつかの実施形態において示されるように、第１のソースパックドデータ１１０、オプショナルの第２のソースパックドデータ１１２、第１の結果パックドデータ１１４、およびオプショナルの第２の結果パックドデータ１１６は、それぞれ、複数のパックドデータレジスタに任意選択的に格納されてよい。これに代えて、複数のメモリ位置またはその他の複数の格納位置が、これらの複数のオペランドのうちの１または複数のために使用されてよい。さらには、別個のものとして図示されてはいるが、いくつかの実施形態においては、１つのソースパックドデータのために用いられる１つのパックドデータレジスタは、行き先格納位置として再利用されてよい（例えば、１つの結果パックドデータは、そのソースパックドデータの上に書き込まれてよい）。
【００１１】
再び図１を参照すると、実行ユニット１０６が、デコードユニット１０４および複数のパックドデータレジスタ１０８に連結される。実行ユニットは、ソート加速命令を表すおよび／またはソート加速命令から導出される、１または複数のデコードまたは変換された複数の命令または複数の制御信号を受信してよい。実行ユニットは、また、第１のソースパックドデータ１１０を受信してよく、いくつかの実施形態では、第２のソースパックドデータ１１２を受信してよい。実行ユニットは、ソート加速命令に応答して、および／または、ソート加速命令の結果として、（例えば、命令からデコードされた１または複数の命令または制御信号に応答して）、命令によって示された第１の宛先に第１の結果パックドデータ１１４を格納し、かつ、いくつかの実施形態においては、命令によって示された第２の宛先に第２の結果パックドデータ１１６格納するように、動作可能であるか、またはそのように構成される。いくつかの実施形態において、実行ユニットは、また、任意選択的に結果マスク１２０を（例えば、複数のマスクレジスタ１１８のオプショナルなセットに）格納してよい。様々な実施形態において、結果パックドデータおよび／または結果マスクは、図３−４または６−１３のいずれであってもよい。
【００１２】
実行ユニットおよび／またはプロセッサは、具体的なまたは特定のロジック（例えば、複数のトランジスタ、集積回路または、ファームウェア（例えば、不揮発性メモリに格納された命令）および／またはソフトウェアと組み合わせることができるその他のハードウェア）を有してよく、上記ロジックは、命令に応答しておよび／または命令の結果として、ソート加速命令および／またはその結果の格納を実行可能である。一例として、実行ユニットは、算術ロジックユニット、ロジックユニット、データ再配列ユニット、またはそれに同等のものを有してよい。いくつかの実施形態において、実行ユニットは、複数のソースオペランドを受信するための１または複数の入力構造（１または複数のポート、１または複数の相互接続、インターフェース、など）と、ソースパックドデータを受信・処理し、結果パックドデータを生成するための、１または複数の入力構造に連結されたソート回路またはロジック１０７と、結果パックドデータを出力するための、ソート回路またはロジック１０７に連結された、１または複数の出力構造（１または複数のポート、１または複数の相互接続、インターフェース、など）と、を有してよい。一例として、ソート回路またはロジックは、比較交換チェーン、選択もしくはルーティングヒエラルキーに基づく値、または、その他のソート回路もしくはロジックを有してよい。
【００１３】
図２は、シングル・ソースソート・複数インデックス・命令の実施形態を実行する方法２２５の実施形態のブロック流れ図である。様々な実施形態において、方法は、プロセッサ（例えば図１のプロセッサ）、命令処理装置または集積回路により実行されてよい。図１のプロセッサのためにここで記載された複数のコンポーネント、複数の特徴および複数の特定のオプショナルな詳細は、また任意選択的に、図２における複数のオペレーションおよび／または方法へ適用する。
【００１４】
ブロック２２６において、方法は、シングル・ソースソート・複数インデックス・命令を受信する段階を有する。命令は、プロセッサまたはその一部（例えば、命令取出しユニット、デコードユニット、バスインターフェースユニット）で受信されてよい。様々な態様において、命令は、オフダイのソースから（例えば、メモリ、相互接続などから）、または、オンダイのソースから（例えば、命令キャッシュ、命令キューから）受信されてよい。命令は、ソートされた順序とはなっていない（例えば、パックドデータにおいて大きさが増加または減少するようには、ソートされていない）少なくとも４つのデータ要素を含むソースパックドデータを、規定しあるいは示してよい。命令は、また、行き先格納位置を、規定しあるいは示してよい。
【００１５】
ブロック２２７において、命令に応答して、および／または、命令の結果として、結果パックドデータが、行き先格納位置に格納される。典型的には、実行ユニットまたはプロセッサは、命令を実行して、その結果を格納してよい。結果パックドデータは、少なくとも４つのインデックスを有してよい。いくつかの実施形態において、複数インデックスは、ソースパックドデータにおける対応する複数のデータ要素を特定してよい。いくつかの実施形態において、複数インデックスは、結果パックドデータにおける複数の位置に格納されてよく、これらの位置は、ソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す。即ち、複数インデックスは、複数のインデックス自体の値に基づいてではなく、むしろ、ソースパックドデータにおいて、それらのインデックスが対応する複数のデータ要素の値に基づいて、ソートされた順序で格納されてよい。いくつかの実施形態において、結果パックドデータは、ソースパックドデータにおける全データ要素に対応する複数インデックスを有してよい。
【００１６】
図３は、シングル・ソースソート・複数インデックス・オペレーション３３０の実施形態を例示するブロック図であって、シングル・ソースソート・複数インデックス・命令の実施形態に応答して実行されてよい。シングル・ソースソート・複数インデックス・命令は、少なくとも４つのデータ要素を含むソースパックドデータ３１０を、規定しあるいは示してよい。ソースパックドデータは、パックドデータレジスタ、メモリ位置、またはその他の格納位置に格納されてよい。一般的に、ソースパックドデータにおける複数のデータ要素の数は、各データ要素のビットサイズまたはビット幅で割り算されたソースパックドデータのビットサイズまたはビット幅に等しくてよい。様々な実施形態において、ソースパックドデータの幅は、６４ビット、１２８ビット、２５６ビット、５１２ビットまたは１０２４ビットであってよい。様々な実施形態において、各データ要素の幅は、８ビット、１６ビット、３２ビットまたは６４ビットであってよい。ある特定の限定的ではない例において、ソースパックドデータは５１２ビット幅であってよく、かつ、１６個の３２ビットのデータ要素または８個の６４ビットのデータ要素を有してよい。複数のデータ要素は、整数、固定小数点、または浮動小数点の形式を有してよい。
【００１７】
特定の図示された例において、ソースパックドデータは、８個のデータ要素を有する。８個のデータ要素は、右側の最小有効ビットまたは最下位ビット位置から、左側の最大有効ビットまたは最上位ビット位置まで、−４、１、８、１２、４３、５５、１、１２という複数の値を有する。これらの値は、ソートされた順序になっていない（例えば、パックドデータにおいて増加順または減少順ではソートされていない）。
【００１８】
結果パックドデータ３１４は、シングル・ソースソート・複数インデックス・命令に応答して、（例えば、実行ユニット１０６により）生成され、行き先格納位置に格納されてよい。行き先格納位置は、命令により、規定されるかまたは示されてよい。様々な実施形態において、行き先格納位置は、パックドデータレジスタ、メモリ位置、または、その他の格納位置であってよい。行き先格納位置は、ソースパックドデータのために用いられるのと同じ格納位置または異なる格納位置のいずれかであってよい。
【００１９】
いくつかの実施形態において、結果パックドデータは、少なくとも４個のインデックスを有してよい。特に図示された例では、結果パックドデータは８個のインデックスを有する。各インデックスは、ソースパックドデータにおける対応する単一のデータ要素を、指し示し、特定し、または、単一のデータ要素と関連してよい。複数のデータ要素のそれぞれは、対応するインデックスによって示されるソースパックドデータ内に位置してよい。インデックスは、オペランド内でのデータ要素の相対位置またはオフセットを表してよい。例えば、可能性のある１つの規定によれば、これは図中で使用されているものであるが、０から７のインデックス値が、パックドデータを最下位のビット位置から最上位のビット位置へと（見て取れるように右から左へ）横断する第１から第８の位置における８個のデータ要素を表してよい。更に例示すると、−４という値を有するデータ要素はインデックス０を有し、８という値を有するデータ要素はインデックス２を有し、４３という値を有するデータ要素はインデックス４を有する、という具合である。これに代えて、様々なその他のインデックスを付す規定が、任意選択的に使用されてよい（例えば、０ではなく１から開始する、７から０へと逆にインデックスを付ける、任意のマッピング規定とする、など）。示される例において、複数のインデックスは、インデックスが付けられた複数の位置を表すのに十分な多数のビット数（例えば、示される例では３ビット）を有してよい。
【００２０】
いくつかの実施形態において、複数インデックスは、結果パックドデータにおける複数の位置に格納されてよく、それらはソースパックドデータにおける対応する複数のデータ要素のソートされた順序を表す。示される例において、ソートされた順序とは最下位のビット位置から最上位のビット位置へと増加する増加順であるが、これに代えて減少順を任意選択的に使用してもよい。示される例において、複数の値に対して、増加するソート順序は、−４、１、１、８、１２、１２、４３、５５となる。結果として、−４という値を有するデータ要素に対応するインデックス値０が、結果パックドデータの第１のまたは最下位の位置に格納され、１という値を有する最も右側のデータ要素に対応するインデックス値１が、第２のまたは次に最下位の位置に格納される、という具合である。この図では、複数の矢印が、複数インデックスおよび複数データ要素の間の対応を示すために用いられる。
【００２１】
結果パックドデータは、ソートされた複数インデックスを格納するが、ソートされた複数のソースデータ要素を格納しないことに注意されたい。いくつかの実施形態では、複数のソースデータ要素をソートするために、ソートされた複数のインデックスが、任意選択的に、異なる命令により続けて使用されてよい。例えばいくつかの実施形態において、複数のソースデータ要素をソートするために、並べ替え命令やシャッフル命令などが複数インデックスを使用してよい。例えば、並べ替えまたはシャッフル命令は、複数インデックスを有する結果パックドデータ３１４を第１のソースオペランドとして、およびソースパックドデータ３１０を第２のソースオペランドとして示してよく、それら複数のインデックスを制御することに基づいて格納される複数データ要素を有する結果パックドデータを格納してもよい。適切な命令の一つの特定な例としては、ＶＰＥＲＭＤ命令があり、これはカリフォルニア、サンタクララのインテル株式会社から利用可能な、２０１３年１２月に出版された、Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ、３１９４３３−０１７に記載されている。
【００２２】
しかしながら、いくつかの実装においては、ソートされた複数データ要素ではなく、複数インデックスを格納する方が有利である。例えば、ソートされた複数インデックスは、ソースパックドデータ３１０における複数のソースデータ要素に加えて、または代えて、他のデータをソートするために用いられてよい。例えば、このことは、複数のソースデータ要素が、複数のソートキーとして用いられ、かつ多数のデータ要素とそれぞれ関連するような様々な異なるデータ構造において、あてはまってよい。更に例示するために、複数の行と列とに配列されたテーブルの（例えば、スプレッドシートにおける）簡単な例を検討する。１つの列が複数の発明者名をリストし、別の１列が発明者識別番号をリストする。複数の名前および複数の識別番号の両方が、一緒にかつ互いに一貫性を保ったままソートされる必要があるかもしれない。１例として、ソートは、ソートキーとして名前に基づくものであってよく、ソートされた複数インデックスが結果として格納されてよい。ソートされた複数インデックスは、複数の名前および複数の識別番号の両方をソートするために用いられてよい。従って、いくつかの実装では、ソートされた複数インデックスを格納することは、ソートされた複数のデータ要素を格納する場合と比して、フレキシビリティと、関連する他のデータをソートすることができるなどの、複数の利点を提供してよい。
【００２３】
いくつかの実施形態において、ソートは、不変の順序（例えば、昇順）で行われてよい。不変というのは、２つの要素が等しい複数のサーチキーを有する場合に、それらの要素の間の相対的順序が変化しないことを意味する。例えば、２つの行に同じ発明者名であるが異なる識別番号がある場合、名前に従ってテーブルをソートしてもこれらの識別番号の順序は変化しない。これは、不変ではない順序とは対照的であって、そのような場合には、相対的順序は保証されず、等しい複数のキーを有する複数の要素はシャッフルされうる。
【００２４】
図４は、シングル・ソースソート・複数インデックスおよび複数データ要素・オペレーション４３２の実施形態を例示するブロック図であって、オペレーションはシングル・ソースソート・複数インデックスおよび複数データ要素・命令の実施形態に応答して実行されてよい。図４のオペレーションは、図３のオペレーションとある程度の類似性を有する。説明が分かりにくくなることを避けるために、図４のオペレーションに対する異なるおよび／または追加の複数の特徴が主として説明され、図３のオペレーションと比べて、任意選択的に類似または共通する全ての特徴および詳細を、繰り返すことはしない。しかしながら、そうではない旨が述べられるか、あるいは、そうではないことが明確であるという場合以外には、先述した図３のオペレーションにおける複数の特徴および詳細は、また、任意選択的に図４のオペレーションに適用してよい。
【００２５】
シングル・ソースソート・複数インデックスおよび複数データ要素命令は、少なくとも４つのデータ要素を有するソースパックドデータ４１０を、規定しあるいは示してよい。ソースパックドデータおよび複数データ要素は、本明細書の他の箇所で（例えば、図３において）記載されたものであってよい。
【００２６】
第１の結果パックドデータ４１４は、命令に応答して（例えば、実行ユニット１０６によって）生成され、第１の行き先格納位置に格納されてよい。第１の結果パックドデータ４１４は、少なくとも４個のインデックスを有してよい。第１の結果パックドデータは、本明細書の他の箇所で（例えば、図３において）記載されたものであってよい。
【００２７】
本実施形態では、命令に応答して、第２の結果パックドデータ４１６がまた生成され、第２の行き先格納位置に格納されてよい。第２の行き先格納位置は、命令によって規定されるかまたは示されてよく、そしてパックドデータレジスタ、メモリ位置、またはその他の格納位置であってよい。第２の結果パックドデータは、対応する複数のデータ要素を有してよく、これらのデータ要素は、第１の結果パックドデータ４１４に格納され、ソートされた順序を反映する第２の結果パックドデータ４１６における複数の位置に格納された、複数のインデックスに対応する。例えば、増加するソート順序では、第２の結果パックドデータは、図の右から左へ−４、１、１、８、１２、１２、４３、５５という複数の値を格納してよい。他の実施形態では、代わりに、複数インデックスおよび複数データ要素に対して減少順が用いられてよい。
【００２８】
ソートされた複数インデックスは、図３において、結果として格納される。ソートされた複数インデックスおよびソートされた複数のデータ要素の両方が、図４において、結果として格納される。他の実施形態では、複数インデックスではなく複数のソートデータ要素が、命令に応答して任意選択的に格納されてよい。
【００２９】
図５は、２つのソースソート・複数インデックス・命令の実施形態を実行する方法５３５の実施形態のブロック流れ図である。様々な実施形態において、方法は、プロセッサ（例えば、図１のプロセッサ）、命令処理装置、デジタルロジックデバイス、または集積回路により実行されてよい。図１のプロセッサのためにここで記載された複数のコンポーネント、複数の特徴および複数の特定のオプショナルな詳細は、また任意選択的に、図５における複数のオペレーションおよび／または方法へ適用する。
【００３０】
ブロック５３６において、方法は、２つのソースソート・複数インデックス・命令を受信する段階を有する。様々な態様において、命令は、プロセッサまたはその一部（例えば、命令取出しユニット、デコードユニット、バスインターフェースユニット）で受信されてよい。様々な態様において、命令は、オフダイのソースから（例えば、メモリ、相互接続などから）、または、オンダイのソースから（例えば、命令キャッシュ、命令キューから）受信されてよい。２つのソースソート・複数インデックス・命令は、少なくとも４つのデータ要素の第１のセットを含む第１のソースパックドデータを規定しあるいは示してよく、そして、少なくとも４つのデータ要素の第２のセットを含む第２のソースパックドデータを規定しあるいは示してよい。命令は、また、行き先格納位置を規定し、あるいは示してよい。
【００３１】
再度図５を参照すると、ブロック５３７において、２つのソースソート・複数インデックス・命令に応答して、および／または、その結果として、結果パックドデータが、行き先格納位置に格納される。典型的には、実行ユニットまたはプロセッサは、命令を実行し、その結果を格納してよい。結果パックドデータは、少なくとも４つのインデックスを有してよい。いくつかの実施形態において、複数インデックスは、第１および第２のソースパックドデータにおける対応するデータ要素の複数の位置を特定してよい。いくつかの実施形態において、複数インデックスは、実際には、第１および第２のソースパックドデータの１つにおいて、単一の対応する複数データ要素を特定してよい（例えば図６−９を参照）。或いは、複数インデックスは、第１および第２のソースパックドデータのそれぞれにおいて、対応するデータ要素の複数の位置を特定するだけであってもよく、そして第１および第２のソースパックドデータの１つを示すために別のビットが用いられてよく、これにより単一の対応するデータ要素を示す（例えば図１０−１３を参照）。複数インデックスは、第１および第２のソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す結果パックドデータにおける複数の位置に格納されてよい。その結果は、２つのソースのいずれかにおける複数データ要素に対応するソートされた複数インデックスを格納した併合ソートを表す。
【００３２】
図６は、複数データ要素・オペレーション６４０の最小の半分のための２つのソースソート・複数インデックスの実施形態を例示するブロック図であり、オペレーションは複数データ要素の命令における最小の半分に対する２つのソースソート・複数インデックスの実施形態に応答して実行されてよい。命令は、少なくとも４つのデータ要素の第１のセットを含む第１のソースパックドデータ６１０を、規定しあるいは示してよく、そして、少なくとも４つのデータ要素の第２のセットを含む第２のソースパックドデータ６１２を、規定しあるいは示してよい。第１および第２のソースパックドデータは、それぞれが一方のデータとは独立して、パックドデータレジスタ、メモリ位置、またはその他の格納位置に、格納されてよい。第１および第２のソースパックドデータは、複数のサイズ、複数データ要素の個数、複数データ要素のサイズ、および、本明細書の他の箇所で開示された複数データ要素のタイプ、を有してよい。
【００３３】
特定の図示された例において、第１のソースパックドデータおよび第２のソースパックドデータは、それぞれ、８個のデータ要素を有する。第１のソースパックドデータは、右側の最下位ビット位置から、左側の最上位ビット位置まで、−４、１、１、８、１２、１２、４３、５５という複数の値を有する。第２のソースパックドデータは、右側の最下位ビット位置から、左側の最上位ビット位置まで、−１４、−１２、０、１０、１６、１８、２４、６０という複数の値を有する。本実施形態において、第１のソースパックドデータでの複数の値および第２のソースパックドデータでの複数の値は、それぞれ、最下位のビット位置から最上位のビット位置へ増加順にソートされる。いくつかの実施形態において、第１および第２のソースパックドデータのそれぞれの中の複数データ要素は、それぞれのパックドデータオペランド（例えば、正しく動作する命令に対して）内においてソートされた順序であることを仮定されるか（例えば、暗示的に命令に対して仮定される）、または要求されてよい。他のいくつかの実施形態において、第１および第２のソースパックドデータのそれぞれの中の複数データ要素は、ソートされた順序であることを仮定または要求されなくてよい（例えば、複数の要素がソートされない順序である場合に、命令が正しく動作してよい）。
【００３４】
結果パックドデータ６１４は、命令に応答して（例えば、実行ユニット１０６によって）生成され、行き先格納位置に格納されてよい。様々な実施形態において、行き先格納位置は、パックドデータレジスタ、メモリ位置、またはその他の格納位置であってよい。行き先格納位置は、第１および第２のソースパックドデータの１つのために用いられるのと同じ格納位置あるいは異なる格納位置のいずれかであってよい。
【００３５】
いくつかの実施形態において、結果パックドデータは、少なくとも４個のインデックスを有してよい。いくつかの実施形態において、結果パックドデータはソースパックドデータの１つにおける複数のデータ要素の数と同数の複数のインデックスを有してよいが、これは必ずしも必要ではない。特に図示された例では、結果パックドデータは８個のインデックスを有する。各インデックスは、第１および第２のソースパックドデータにおける対応するデータ要素の複数の位置を、指し示し、特定し、または、対応するデータ要素の複数の位置と関連してよい。いくつかの実施形態において、複数インデックスは、実際には、第１および第２のソースパックドデータの１つにおいて、単一の対応する複数データ要素を特定してよい。複数データ要素のそれぞれは、第１および第２のソースパックドデータ内に、インデックスが付けられた位置を有してよい。インデックスは、第１および第２のソースパックドデータ内でのデータ要素の相対位置またはオフセットを表してよい。例えば可能性のある１つの規定によれば、これは図中で使用されているものであるが、第１のソースパックドデータ６１０を最下位のビット位置から最上位のビット位置へ（見て取れるように右から左へ）横断する際に、０から７のインデックス値が８個のデータ要素のインデックスとなってよく、第２のソースパックドデータ６１２を最下位のビット位置から最上位のビット位置へ（見て取れるように右から左へ）横断する際に、８から１５のインデックス値が８個のデータ要素のインデックスとなってよい。示される例において、複数の矢印が、複数インデックスおよび複数データ要素の間の対応を示すために用いられる。図示されるように、−１４という値を有するデータ要素はインデックス８を有し、−１２という値を有するデータ要素はインデックス９を有する、といった具合である。或いは、特定の実装のための様々なその他のインデックスを付す望ましい規定が、任意選択的に用いられてよい（例えば、０ではなく１から開始する、逆にインデックスを付ける、任意にマッピングされたインデックスを付す規定、など）。
【００３６】
複数インデックスは、結果パックドデータにおける複数の位置に格納されてよく、これらは第１および第２のソースパックドデータにおける対応する複数のデータ要素のソートされた順序を表す。いくつかの実施形態において、複数インデックスは、第１および第２のソースパックドデータにおける複数データ要素の全ての順序部分集合のみに対して格納されてよい。いくつかの実施形態において、順序部分集合とは、全データ要素における順序づけられた最小の部分集合（例えば、最小の半分）であってよい。示される例において、８個の最小の値は、−１４、 −１２、−４、０、１、１、８、１０である。示される実施形態において、８個のインデックスは、結果パックドデータにおける複数の位置に格納され、複数の位置は、第１および第２のソースパックドデータにおける対応する８個の最小のデータ要素のソートされた増加順（最下位のビット位置から最上位のビット位置へと増加する）を表す。図示されるように、−１４という値を有するデータ要素に対応するインデックス８が、結果パックドデータにおける最下位の位置に格納され、−１２という値を有するデータ要素に対応するインデックス９が、次に最下位の位置に格納され、−４という値を有するデータ要素に対応するインデックス０が、３番目の最下位の位置に格納される、という具合である。他の実施形態において、減少順または逆順序が任意選択的に用いられてよい。ソートオペレーションは、第１および第２のソースパックドデータの両方に対するソートされた複数インデックスを、併合する。
【００３７】
図７は、複数データ要素・オペレーション７４２の最大の半分のための２つのソースソート・複数インデックスの実施形態を例示するブロック図であり、オペレーションは複数データ要素の命令における最大の半分に対する２つのソースソート・複数インデックスの実施形態に応答して実行されてよい。命令は、少なくとも４つのデータ要素の第１のセットを含む第１のソースパックドデータ７１０を、規定あるいは示してよく、そして、少なくとも４つのデータ要素の第２のセットを含む第２のソースパックドデータ７１２を、規定あるいは示してよい。第１および第２のソースパックドデータは、本明細書の他の箇所で記載した複数の特徴および変形例を有してよい。他の複数の実施形態やその他の命令ではこのことは必要ではないが、示される実施形態では、第１のソースパックドデータの複数の値、および第２のソースパックドデータの複数の値は、増加順にソートされる。
【００３８】
結果パックドデータ７１４は、命令に応答して（例えば、実行ユニット１０６によって）生成され、行き先格納位置に格納されてよい。いくつかの実施形態において、結果パックドデータは、少なくとも４個のインデックスを有してよい。いくつかの実施形態において、複数インデックスは、第１および第２のソースパックドデータの１つにおいて、単一の対応する複数データ要素を特定してよい。いくつかの実施形態において、複数インデックスは、第１および第２のソースパックドデータにおいて対応する複数データ要素のソートされた順序を表す結果パックドデータにおける複数の位置に格納されてよい。
【００３９】
図７の実施形態において順序部分集合は、最小の部分集合である順序部分集合ではなく、順序づけられた最大の部分集合であってよく、例えば、第１および第２のソースパックドデータにおける複数データ要素の全ての最大の半分、であってよい。例えば、８個のインデックスは、結果パックドデータにおける複数の位置に格納されてよく、複数の位置は、第１および第２のソースパックドデータにおいて対応する８個の最大のデータ要素のソートされた順序を表す。例に示された複数データ要素の数値例を検討すると、８個の最大のデータ要素は、１２、１２、１６、１８、２４、４３、５５、６０という値を有する。示される実施形態において、８個のインデックスは、結果パックドデータにおける複数の位置に格納され、複数の位置は、第１および第２のソースパックドデータにおいて対応する８個の最大のデータ要素のソートされた増加順（最下位のビット位置から最上位ビット位置へと増加する）を表す。図示されるように、１２という値を有する最も右側のデータ要素に対応するインデックス４が、最下位の位置に格納され、１２という値を有するデータ要素に対応するインデックス５が、次に最下位の位置に格納され、１６という値を有するデータ要素に対応するインデックス１２が、３番目の最下位の位置に格納される、という具合である。他の実施形態において、代わりに、減少順が任意選択的に用いられてよい。
【００４０】
図６、図７では、最小または最大の半分のみに対する複数インデックスが格納される実施形態を示している。他の実施形態においては、複数のソースオペランドと同じサイズの結果に、最小および最大の半分の両方に対する複数インデックスが、格納されてよい。例えば、このことは、複数インデックスが対応する複数のデータ要素よりも十分に小さい場合（例えば、半分のサイズであるか、それよりも小さい）に、可能であってよい。そのようなアプローチは、いくつかの実装では、長所を提供しうる。或いは、最小および最大の半分に対する複数インデックスは、対応するシャッフル命令やブレンド命令などの利用を促すために、別個のままとされてよい。
【００４１】
図８は、複数データ要素・オペレーション８４４の最小の半分のための２つのソートされていないソースソート・複数インデックスの実施形態を例示するブロック図であり、オペレーションは複数データ要素の命令の最小の半分のための２つのソートされていないソースソート・複数インデックスの実施形態に応答して実行されてよい。命令は、少なくとも４つのデータ要素の第１のセットを含む第１のソースパックドデータ８１０を、規定あるいは示してよく、そして、少なくとも４つのデータ要素の第２のセットを含む第２のソースパックドデータ８１２を、規定あるいは示してよい。特定の図示された例では、第１のソースパックドデータおよび第２のソースパックドデータは、それぞれ、８個のデータ要素を有する。第１のソースパックドデータは、右側の最下位位置から左側の最上位位置まで、−４、１、８、１２、４３、５５、１、１２という複数の値を有する。本実施形態において、第１のソースパックドデータにおける複数の値は、ソートされた順序にはなっていない。同様に、第２のソースパックドデータにおける複数の値は、順にソートされてはいない。そのような実施形態において、第１および第２のソースパックドデータのそれぞれの中の複数データ要素は、ソートされた順序であることを仮定または要求されなくてよい（例えば、複数の要素がソートされていない順序である場合に、命令が正しく動作してよい）。
【００４２】
結果パックドデータ８１４は、命令に応答して（例えば、実行ユニット１０６によって）生成され、行き先格納位置に格納されてよい。いくつかの実施形態において、結果パックドデータは、少なくとも４個のインデックスを有してよい。いくつかの実施形態において、複数インデックスは、第１および第２のソースパックドデータの１つにおいて、単一の対応する複数データ要素を特定してよい。いくつかの実施形態において、複数インデックスは、第１および第２のソースパックドデータにおける対応する複数データ要素のソートされた順序を表す、結果パックドデータにおける複数の位置、に格納されてよい。示される実施形態において、結果パックドデータは最小の部分集合に対応する複数インデックスを有し、この場合、第１および第２のソースパックドデータにおける全てのデータ要素の最小の半分を有する。他の実施形態では、結果パックドデータは最大の部分集合に対応する複数インデックスを有してよく、例えば、第１および第２のソースパックドデータにおける全てのデータ要素の最大の半分を有してよい。
【００４３】
図９は、複数データ要素・オペレーション９４６の最小の半分のための、２つのソースソート・複数インデックスおよびデータの実施形態を例示するブロック図であり、オペレーションは、複数データ要素・命令の最小の半分のための２つのソースソート・複数インデックスおよびデータの実施形態に応答して実行されてよい。命令は、少なくとも４つのデータ要素の第１のセットを含む第１のソースパックドデータ９１０を、規定あるいは示してよく、そして、少なくとも４つのデータ要素の第２のセットを含む第２のソースパックドデータ９１２を、規定あるいは示してよい。第１および第２のソースパックドデータは、複数のサイズ、複数のデータ要素の個数、複数のデータ要素のサイズ、および、本明細書の他の箇所で開示された複数のデータ要素のタイプ、を有してよい。示された実施形態において、第１および第２のソースパックドデータのそれぞれの中の複数データ要素は、それぞれのパックドデータオペランド内においてソートされた順序であることを仮定されるか（例えば、暗示的に、命令に対して仮定される）、または要求されてよい。他のいくつかの実施形態において、第１のソースパックドデータおよび第２のソースパックドデータのそれぞれの中の複数データ要素は、それぞれのパックドデータオペランド内においてソートされた順序であることを仮定または要求されなくてよい。
【００４４】
第１の結果パックドデータ９１４は、命令に応答して（例えば、実行ユニット１０６によって）生成され、第１の行き先格納位置に格納されてよい。第１の結果パックドデータ９１４は、複数インデックスを有してよい。第１の結果パックドデータおよび複数インデックスは、図６に対して先述したのと同類または共通の複数の特徴および詳細を有してよい。示される実施形態において、結果パックドデータは最小の部分集合に対応する複数インデックスを有し、この場合、第１および第２のソースパックドデータにおける全てのデータ要素の最小の半分を有する。他の実施形態では、結果パックドデータは最大の部分集合に対応する複数インデックスを有してよく、例えば、第１および第２のソースパックドデータにおける全てのデータ要素の最大の半分を有してよい。
【００４５】
本実施形態において、第２の結果パックドデータ９１６は、また命令に応答して生成され、第２の行き先格納位置に格納されてよい。第２の行き先格納位置は、命令によって規定されるかまたは示されてよく、そしてパックドデータレジスタ、メモリ位置、またはその他の格納位置であってよい。第２の行き先格納位置は、第１または第２のソースパックドデータの１つのために用いられるのと同じ格納位置あるいは異なる格納位置のいずれかであってよい。第２の結果パックドデータは、対応する複数データ要素を有してよく、これらのデータ要素は、第１の結果パックドデータに格納され、ソートされた順序を反映する第２の結果パックドデータにおける複数の位置に格納された、複数インデックスに対応する。示される実施形態において、第２の結果パックドデータはソートされた最小の部分集合を有し、この場合、第１および第２のソースパックドデータにおける全てのデータ要素のソートされた最小の半分を有する。具体的には、第２の結果パックドデータは、右から左へ、複数のデータ要素である−１４、−１２、−４、０、１、１、８、１０を格納する。他の実施形態では、第２の結果パックドデータは、代わりに、ソートされた最大の部分集合を有し、例えば、第１および第２のソースパックドデータにおける全てのデータ要素のソートされた最大の半分である。
【００４６】
結果として、ソートされた複数インデックスが図６に格納される。結果として、ソートされた複数インデックスおよびソートされた複数のデータ要素の両方が、図９に格納される。他の実施形態では、複数インデックスではなく複数のソートデータ要素が、命令に応答して任意選択的に格納されてよい。
【００４７】
図７−９には、図６のオペレーションと特定の類似性を有する複数のオペレーションを示す。説明を分かりにくくすることを避けるために、図７−９における複数のオペレーションに対する異なるおよび／または追加の複数の特徴が主として説明され、図６のオペレーションと比べて、任意選択的に類似または共通する全ての特徴および詳細を、繰り返すことはしない。しかしながら、そうではない旨が述べられるか、あるいは、そうではないことが明確であるという場合以外には、先述した図６のオペレーションにおける複数の特徴および詳細は、また、任意選択的に図７−９の複数のオペレーションのいずれに適用してよいことが、認められべきである。
【００４８】
図１０は、複数データ要素・オペレーション１０４８の最小の半分のためのマスクを有する２つのソースソート・複数インデックスの実施形態を例示するブロック図であり、オペレーションは複数データ要素の命令における最小の半分のためのマスクを有する２つのソースソート・複数インデックスの実施形態に応答して実行されてよい。命令は、少なくとも４つのデータ要素の第１のセットを含む第１のソースパックドデータ１０１０を、規定あるいは示してよく、そして、少なくとも４つのデータ要素の第２のセットを含む第２のソースパックドデータ１０１２を、規定あるいは示してよい。第１および第２のソースパックドデータは、複数のサイズ、複数のデータ要素の個数、複数のデータ要素のサイズ、および、本明細書の他の箇所で開示された複数のデータ要素のタイプ、を有してよい。
【００４９】
このことは必要ではないが、示される実施形態では、第１のソースパックドデータおよび第２のソースパックドデータのそれぞれにおける複数の値は、順番にソートされる。いくつかの実施形態において、複数のソースデータ要素がそれぞれのパックドデータ内においてソートされた順序であることが仮定される（例えば、暗示的に命令に対して仮定される）か、または要求されてよい。他の実施形態では、減少順が任意選択的に用いられてもよいが、示される例では、複数のオペランドにおいて増加するビット桁を有する増加順が用いられてよい。他の実施形態において、第１のソースパックドデータおよび第２のソースパックドデータのそれぞれの中の複数データ要素は、それぞれのパックドデータ内においてソートされた順序であることを仮定または要求されなくてよい（例えば、複数の要素がソートされていない順序である場合に、命令が正しく動作してよい）。
【００５０】
結果パックドデータ１０１４は、命令に応答して（例えば、実行ユニット１０６によって）生成され、行き先格納位置に格納されてよい。いくつかの実施形態において、結果パックドデータは、少なくとも４個のインデックスを有してよい。いくつかの実施形態において、各インデックスは、第１および第２のソースパックドデータにおける一対の対応するデータ要素の位置を、指し示し、特定し、またはその位置と関連してよい。複数インデックス自体は、単一の対応するデータ要素を実際に特定しなくてもよく、むしろ、実際の対応するデータ要素が第１または第２のソースパックドデータに位置するかどうかを示すことなく、第１および第２のパックドデータにおける一対の対応するデータ要素位置を特定してよい。例えば可能性のある１つの規定によれば、これは図中で使用されているものであるが、第１のソースパックドデータを最下位のビット位置から最上位のビット位置へ（見て取れるように右から左へ）横断する際に、０から７のインデックス値が８個のデータ要素位置を表してよく、そして、第２のソースパックドデータを最下位のビット位置から最上位のビット位置へ横断する際に、同じ０から７のインデックス値が８個のデータ要素位置を表してよい。例えば、４３という値を有するデータ要素および２４という値を有するデータ要素は両方とも、同じインデックス６を有してよい。以前に述べたように、複数インデックスに対して、様々なその他のインデックスを付す規定が、任意選択的に用いられてよい（例えば、０ではなく１から開始する、逆にまたは降順に規定する、任意にマッピングされた規定とする、など）。そのような実施形態において、インデックス単独では、単一の対応するデータ要素を特定するのには不十分であってよい。
【００５１】
いくつかの実施形態において、複数インデックスは、対応する複数データ要素のソートされた順序を表す結果パックドデータにおける複数の位置に格納されてよい。示される実施形態において、複数インデックスは、結果パックドデータにおける複数の位置に格納され、複数の位置は、対応する複数データ要素のソートされた増加順を表す。他の実施形態においては、減少順が任意選択的に用いられてよい。さらには、示される実施形態において、複数インデックスは、順序づけられた最小の部分集合、例えば、全データ要素における最小の半分のみに対して格納されてよい。或いは、他の実施形態では、最大の部分集合（例えば、最大の半分）や中間の部分集合などが、用いられてよい。或いは、ソースパックドデータにおける全てのデータ要素のための複数インデックスが、任意選択的に格納されてよい。
【００５２】
再度、図１０を参照すると、命令に応答して、結果マスク１０２０が生成され、第２の行き先格納位置に格納されてよい。行き先格納位置は、命令によって規定されるか、または示されてよい。いくつかの実施形態において、第２の行き先格納位置は、マスクレジスタ（例えば、複数のマスクレジスタ１１８の１つ）であってよい。或いは、結果マスクは、汎用レジスタ、メモリ位置、またはその他の格納位置に格納されてよい。
【００５３】
いくつかの実施形態において、結果マスクは、少なくとも４つのマスク要素を有してよい。いくつかの実施形態において、結果マスクは、結果パックドデータにおける複数インデックスと同じ個数のマスク要素を有してよい。各マスク要素は、結果パックドデータで対応する複数インデックスのうちの異なる１つに対応してよい。各マスク要素は、対応するインデックスによって示されたデータ要素位置における単一の対応するデータ要素が、第１のソースパックドデータに位置するか、その代わりに、第２のソースパックドデータに位置するかを、示してよい。即ち、各マスク要素は、第１および第２のソースパックドデータのうちの１つを特定または選択してよく、これにより、特定のまたは選択されたソースパックドデータにおける複数インデックスが付けられた位置で対応する単一のデータ要素を特定する。
【００５４】
いくつかの実施形態において、各マスク要素は、単一ビットであってよいが、或いは、２又はそれ以上のビットが任意選択的に用いられてよい（例えば、マルチビットデータ要素における最上位または最下位のビット）。例えば可能性のある１つの規定によれば、これは図中で使用されているものであるが、バイナリ値１が設定されている単一ビット（即ち１）は、そのデータ要素が第１のソースパックドデータ１０１０に位置することを示し、これに対して、バイナリ値ゼロにクリアされているビット（即ち０）は、そのデータ要素が第２のソースパックドデータ１０１２に位置することを示す。或いは、逆の規定が任意選択的に用いられてよい。更に例示すると、（第２のソースパックドデータを示すために）、−１４という値を有するデータ要素は、結果パックドデータの最も右側の位置における対応するインデックス０、および、結果マスクの最も右側の位置におけるマスク要素値０によって、特定される。同様に、（第１のソースパックドデータを示すために）、−４という値を有するデータ要素は、結果パックドデータの右から３番目の位置における対応するインデックス０、および、結果マスクの右から３番目の位置におけるマスク要素値１によって、特定される。
【００５５】
いくつかの実施形態において、必須ではないものの、異なるソースパックドデータにおける２つのインターオペランドデータ要素が複数の等しい値を有する場合に、ソースパックドデータの１つからのそれらの要素は、あたかもより小さな値を有するものとして解釈されるという規定が、採用されてよい。いくつかの実施形態では、必須ではないものの、同じソースパックドデータにおける２つのイントラオペランドデータ要素が複数の等しい値を有する場合に、最下位のデータ要素は、あたかもより小さな値を有するものとして解釈されるという規定が、採用されてよい。
【００５６】
（図６−９で示されたアプローチで行われているように）複数インデックスの中へ組み込むのではなく、結果マスクに追加のパックドデータオペランド選択ビットを含めることが（複数のマスク要素など）、特定の実施形態では、利点を提供してよい。これは、例えば、パックドデータオペレーションをマスクするまたは述語とする（プレディケートする・叙述する）べく、プロセッサが、結果マスクを叙述オペランドとして利用することができる場合に、あてはまってよい。いくつかの実施形態では、対応する複数データ要素の異なる複数ペアに対する複数のオペレーションが、別々におよび／または他と独立してプレディケーションされるかまたは条件付きで制御されるように、マスキングやプレディケーションはデータ要素毎の粒度におけるものであってよい。結果マスクにおける複数のマスク要素は、複数のプレディケート要素または複数の条件付き制御要素を表してよい。１つの態様では、複数のマスク要素は、対応する複数のソースデータ要素および／または対応する複数の結果データ要素との１対１対応に含まれてよい。例として、対応するオペレーションが実行されるべきものであるか否か、および／または、対応する結果データ要素が格納されるべきものであるか否かを、各マスク要素の値またはビットが制御してよい。各マスク要素の値またはビットは、対応する複数のソースデータ要素のペア上でオペレーションを実行させることを許可し、かつ対応する結果データ要素が宛先に格納されることを許可するための第１の値を有してよく、あるいは、対応する複数のソースデータ要素のペア上でオペレーションを実行させることを許可せず、および／または対応する結果データ要素が宛先に格納されることを許可しないための第２異なる値を有してよい。可能性のある１つの規定によれば、バイナリゼロにクリアされたマスクビット（即ち、０）は、マスクされたオペレーションを表してよく、これに対して、バイナリワンに設定されたマスクビット（即ち、１）は、マスクされていないオペレーションを表してよい。
【００５７】
いくつかの実施形態において、結果マスクを生成する命令に加えて、命令セットはまた、ソース叙述オペランドまたは条件付き制御オペランドとして結果マスクを示すまたはアクセスすることのできる第２の命令を有してよく、これらのオペランドは、対応する複数のオペレーションが実行されるべきものであるか否か、および／または、対応する複数の結果が格納されるべきものであるか否かを、プレディケートするか、条件付きで制御するか、またはマスクするために用いられる。特定の複数の実装において、ソース叙述オペランドとして結果マスクを示してよい命令の１つの具体的な例は、ＶＭＯＶＤＱＡ３２命令であり、これは２０１３年１２月に出版されたＩｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ、３１９４３３−０１７に記載されている。ＶＭＯＶＤＱＡ３２命令は、アラインされパックされたダブル・ワード（倍長語）整数値を、ソースパックドデータオペランドから結果パックドデータオペランドへ、プレディケーションのためのソース書込みマスクを用いて移動させることができる。結果マスクば、ＶＭＯＶＤＱＡ３２命令によって、ソース書込みマスクとして示されてよい。いくつかの実装において、および／またはいくつかのアルゴリズムに対して、結果マスクは、そのようなプレディケートされた複数の命令によって用いられてよく、アルゴリズムに関する総合的な視点から、特定の性能および／または効率の利点を提供する。いくつかの実施形態では、結果パックドデータ１０１４がたとえ、代わりに追加のビットを複数のインデックスへ組み込むことができるほど十分なビットを有するとしても、結果マスクが用いられてよい。
【００５８】
図１１は、複数データ要素・オペレーション１１５０の最大の半分のためのマスクを有する２つのソースソート・複数インデックスの実施形態を例示するブロック図であり、オペレーションは複数データ要素の命令の最大の半分に対するマスクを有する２つのソースソート・複数インデックスの実施形態に応答して実行されてよい。命令は、少なくとも４つのデータ要素の第１のセットを含む第１のソースパックドデータ１１１０を、規定あるいは示してよく、かつ、少なくとも４つのデータ要素の第２のセットを含む第２のソースパックドデータ１１１２を、規定あるいは示してよい。これは必ずしも必要ではないが、示される実施形態では、第１のソースパックドデータおよび第２のソースパックドデータのそれぞれにおける複数の値は、順番にソートされる。いくつかの実施形態において、複数のソースデータ要素がそれぞれのパックドデータ内においてソートされた順序であることが、仮定されるか（例えば、暗示的に命令に対して仮定される）または要求されてよい。他の実施形態では、減少順が任意選択的に用いられてもよいが、示される例では、複数のオペランドにおいて増加するビット桁と共に増加順が用いられてよい。他の実施形態において、第１のソースパックドデータおよび第２のソースパックドデータのそれぞれの中の複数データ要素は、それぞれのパックドデータ内においてソートされた順序であることを、仮定または要求されなくてよい（例えば、複数の要素がソートされていない順序である場合に、命令が正しく動作してよい）。
【００５９】
結果パックドデータ１１１４は、命令に応答して（例えば、実行ユニット１０６によって）生成され、行き先格納位置に格納されてよい。いくつかの実施形態において、結果パックドデータは、少なくとも４個のインデックスを有してよい。いくつかの実施形態において、各インデックスは、第１および第２のソースパックドデータにおける一対の対応するデータ要素の位置を、指し示し、特定し、または関連してよい。同様に、命令に応答して、結果マスク１１２０が格納されてよい。結果マスクは、複数インデックスに対応する複数のマスク要素を有してよい。
【００６０】
図１１の実施形態において、複数インデックスは、順序づけられた最大の部分集合に対応してよく、例えば、例示された実施形態において、第１および第２のソースパックドデータにおける複数データ要素の全てにおける最大の半分に対応してよい。例えば、８個のインデックスは、結果パックドデータにおける複数の位置に格納されてよく、複数の位置は、第１および第２のソースパックドデータにおいて対応する８個の最大のデータ要素のソートされた順序（例えば、１２、１２、１６、１８、２４、４３、５５、６０）を表す。同様に、結果マスクの複数のマスク要素は、順序づけられた最大の部分集合に対応してよく、例えば、例示された実施形態において、第１および第２のソースパックドデータにおける複数データ要素の全てにおける最大の半分に対応してよい。
【００６１】
示される実施形態において、８個のインデックスは、結果パックドデータにおける複数の位置に格納され、複数の位置は、第１および第２のソースパックドデータにおいて対応する８個の最大のデータ要素のソートされた増加順を表す。他の実施形態において、減少順または逆順序が任意選択的に用いられてよい。
【００６２】
図１２は、複数データ要素・オペレーション１２５２の最小の半分のためのマスクを有する２つのソートされていないソースソート・複数インデックスの実施形態を例示するブロック図であって、オペレーションは複数データ要素の命令の最小の半分のためのマスクを有する２つのソートされていないソースソート・複数インデックスの実施形態に応答して実行されてよい。命令は、少なくとも４つのデータ要素の第１のセットを含む第１のソースパックドデータ１２１０を、規定あるいは示してよく、かつ、少なくとも４つのデータ要素の第２のセットを含む第２のソースパックドデータ１２１２を、規定あるいは示してよい。図１２のオペレーションにおいて、第１のソースパックドデータオペランドにおける複数データ要素の複数の値は、ソートされた順序になっていない。同様に、第２のソースパックドデータオペランドにおける複数データ要素の複数の値は、ソートされた順序になっていない。第１のソースパックドデータおよび第２のソースパックドデータのそれぞれの中の複数データ要素は、それぞれのパックドデータオペランド内においてソートされた順序であることを仮定または要求されなくてよい（例えば、複数の要素が、複数のソースパックドデータオペランドにおいてソートされていない順序である場合に、命令が正しく動作してよい）。結果パックドデータ１２１４は、命令に応答して（例えば実行ユニット１０６によって）生成され、行き先格納位置に格納されてよい。
【００６３】
いくつかの実施形態において、結果パックドデータは、少なくとも４個のインデックスを有してよい。いくつかの実施形態において、各インデックスは、第１および第２のソースパックドデータにおける一対の対応するデータ要素の位置を、指し示し、特定し、または関連してよい。同様に、命令に応答して、結果マスク１２２０が格納されてよい。結果マスクは、複数のインデックスに対応する複数のマスク要素を有してよい。
【００６４】
示される実施形態において、複数のインデックスおよび複数のマスク要素は、最小の部分集合に対応し、この場合、第１および第２のソースパックドデータにおける全てのデータ要素における最小の半分に対応する。他の実施形態では、複数のインデックスおよび複数のマスク要素は、最大の部分集合に対応してよく、例えば、第１および第２のソースパックドデータにおける全てのデータ要素における最大の半分に対応してよい。
【００６５】
示される実施形態において、８個のインデックスは、結果パックドデータにおける複数の位置に格納され、複数の位置は、第１および第２のソースパックドデータにおいて対応する８個の最大のデータ要素のソートされた増加順を表す。他の実施形態において、減少順または逆順序が任意選択的に用いられてよい。
【００６６】
図１３は、複数データ要素・オペレーション１３５４の最小の半分のための、マスクおよびソートデータを有する２つのソースソート・複数インデックスの実施形態を例示するブロック図であって、オペレーションは、複数データ要素の命令の最小の半分のためのマスクおよびソートデータを有する２つのソースソート・複数インデックスの実施形態に応答して実行されてよい。命令は、少なくとも４つのデータ要素の第１のセットを含む第１のソースパックドデータ１３１０を、規定あるいは示してよく、かつ、少なくとも４つのデータ要素の第２のセットを含む第２のソースパックドデータ１３１２を、規定あるいは示してよい。これは必ずしも必要ではないが、示される実施形態では、第１のソースパックドデータおよび第２のソースパックドデータのそれぞれにおける複数の値は、順番にソートされる。いくつかの実施形態において、複数のソースデータ要素がそれぞれのパックドデータ内においてソートされた順序であることが仮定されるか（例えば、暗示的に命令に対して仮定される）、または要求されてよい。他の実施形態では、減少順が任意選択的に用いられてもよいが、示される例では、複数のオペランドにおいて増加するビット桁と共に増加順が用いられてよい。他の実施形態において、第１のソースパックドデータおよび第２のソースパックドデータのそれぞれの中の複数データ要素は、それぞれのパックドデータ内においてソートされた順序であることを仮定または要求されなくてよい（例えば、複数の要素がソートされていない順序である場合に命令が正しく動作してよい）。
【００６７】
第１の結果パックドデータ１３１４は、命令に応答して（例えば、実行ユニット１０６によって）生成され、行き先格納位置に格納されてよい。いくつかの実施形態において、結果パックドデータは、少なくとも４個のインデックスを有してよい。いくつかの実施形態において、各インデックスは、第１および第２のソースパックドデータにおける一対の対応するデータ要素の複数の位置を、指し示し、特定し、または関連してよい。同様に、命令に応答して結果マスク１３２０が格納されてよい。結果マスクは、複数インデックスに対応する複数のマスク要素を有してよい。
【００６８】
本実施形態では、また第２の結果パックドデータ１３１６が、命令に応答して生成され、第２の行き先格納位置に格納されてよい。第２の行き先格納位置は、命令によって規定されるか、または示されてよく、かつ、パックドデータレジスタ、メモリ位置、または、その他の格納位置であってよい。第２の行き先格納位置は、第１または第２のソースパックドデータの１つのために用いられるのと同じ格納位置あるいは異なる格納位置のいずれかであってよい。第２の結果パックドデータは、対応する複数データ要素を有してよく、これらのデータ要素は、ソートされた順序を反映する第２の結果パックドデータにおける複数の位置に格納された、複数インデックスおよび複数のマスク要素に対応する。
【００６９】
示された実施形態において、ソートされた複数の要素、複数インデックスおよび複数のマスク要素は、最小の部分集合に対応し、この場合、第１および第２のソースパックドデータにおける全てのデータ要素の最小の半分に対応する。他の実施形態において、ソートされた複数の要素、複数インデックスおよび複数のマスク要素は、最大の部分集合に対応してよく、例えば、第１および第２のソースパックドデータにおける全てのデータ要素の最大の半分に対応してよい。
【００７０】
示された実施形態において、ソートされた複数の要素、複数インデックスおよび複数のマスク要素は複数の位置に格納され、増加順を表す。他の複数の実施形態では、減少順または逆順序が任意選択的に用いられてよい。
【００７１】
結果として、ソートされた複数インデックスが図１０に格納される。結果として、ソートされた複数インデックスおよびソートされた複数のデータ要素の両方が、図１３に格納される。他の実施形態では、複数インデックスではなく複数のソートデータ要素が、命令に応答して任意選択的に格納されてよい。
【００７２】
図１１−１３における複数のオペレーションは、図１０のオペレーションと特定の類似性を有する。説明を分かりにくくすることを避けるために、図１１−１３における複数のオペレーションに対する異なるおよび／または追加の複数の特徴が主として説明され、図１０のオペレーションと比べて、任意選択的に類似または共通する全ての特徴および詳細を、繰り返すことはしない。しかしながら、そうではない旨が述べられるか、あるいは、そうではないことが明確であるという場合以外には、先述した図１０のオペレーションにおける複数の特徴および詳細は、また、任意選択的に図１１−１３のいずれの複数のオペレーションに適用してよいことが、認められべきである。
【００７３】
命令セットは、ここで開示される複数の命令のうちの１または複数を有してよい。例えば、いくつかの実施形態において、命令セットは、ソートされた結果を生成することができる第１の命令（例えば、図３−４の１つのために示されたまたは記載されたような）、および、ソースパックドデータを仮定するかまたは必要とする第２の命令（例えば、図６、７、９、１０、１１、１３の１つのために示されたまたは記載されたような）を、任意選択的に有してよい。他の例として、いくつかの実施形態において、命令セットは、全てのソースデータ要素における最小の半分のソートのための第１の命令（例えば、図６および１０の１つのために示されたまたは記載されたような）、および、全てのデータ要素命令における最大の半分のソートのための第２の命令（例えば、図７および１１の１つのために示されたまたは記載されたような）を、任意選択的に有してよい。或いは、命令セットは、ここで示され記載された複数の命令のうちの１つのみを有してもよい。
【００７４】
以下のコード片は、３２の整数をソートするために、ここで開示された複数の命令の例を用いたアルゴリズムの例示的な実施形態を表す。ｓｏｒｔａｓｓｉｓｔｄ命令は、図３に示されたのと同様のオペレーションを用いて、複数のダブル・ワードの要素を昇順にソートする。ｓｏｒｔｅｄｍｅｒｇｅｄａｓｓｉｓｔｌ命令およびｓｏｒｔｅｄｍｅｒｇｅｄａｓｓｉｓｔｈ命令は、図１０、１１におけるオペレーションと同様に、第１および第２のソースパックドデータに、既にソートされた複数の要素に対するソートされた複数のインデックスを格納する２つのソース命令である。
sort32:
vmovdqu32 (%rdi), %zmm0
vmovdqu32 64(%rdi), %zmm1
sortassistd %zmm0, %zmm2
sortassistd %zmm1, %zmm3
vpermd %zmm0, %zmm2, %zmm0 
vpermd %zmm1, %zmm3, %zmm1 
sortedmergedassistl %zmm1, %zmm0, %zmm2, %k1
sortedmergedassisth %zmm1, %zmm0, %zmm3, %k2
vpermd %zmm0, %zmm2, %zmm4 
vpermd %zmm1, %zmm2, %zmm5 
vpermd %zmm0, %zmm3, %zmm6 
vpermd %zmm1, %zmm3, %zmm7 
vmovdqu32 %zmm5, %zmm4, {%k1}
vmovdqu32 %zmm7, %zmm6, {%k2}
vmovdqu32 %zmm4, {%rdi}
vmovdqu32 %zmm6, 64{%rdi}
ret
【００７５】
いくつかの実施形態において、命令フォーマットは、オペコードまたは命令コードを有してよい。オペコードは、実行されるべき命令および／またはオペレーション（例えば、ソートインデックスオペレーション）を特定可能な、複数のビットまたは１もしくは複数のフィールドを表してよい。特定の命令に応じて、命令フォーマットは、また、１または複数のソースおよび／または複数の宛先指示子を、任意選択的に有してよい。例として、複数の指示子のそれぞれは、レジスタ、メモリ位置、またはその他の格納位置のアドレスを規定するために、複数のビット、または、１または複数のフィールドを有してよい。或いは、そのような明示的な指示子に代えて、１または複数のソースおよび／または宛先は、命令に対して明示的に規定されるのではなく、任意選択的に黙示的に規定されてよい。加えて、あるソースが宛先として再利用されることは、任意選択的に黙示的であってよい。加えて、命令フォーマットは、任意選択的に複数の追加フィールドを追加してよく、特定の複数のフィールドと重なり合ってもよい。複数のフィールドは、隣接するビット配列を有する必要がなく、むしろ、隣接しないかまたは分離された複数のビットから構成されてよい。いくつかの実施形態において、命令フォーマットは、ＶＥＸまたはＥＶＥＸの符号化または命令フォーマットに従ってよいが、本発明の範囲は、それに限定されない。
【００７６】
図１４は、複数のパックドデータレジスタ１４０８の適切な一つのセットの実施形態の一例のブロック図である。複数のパックドデータレジスタは、ＺＭＭ０からＺＭＭ３１までラベルが付けられた、３２個の５１２ビットパックドデータレジスタを有する。示される実施形態において、これは必ずしも必要ではないが、下位の１６個のレジスタ、即ちＺＭＭ０−ＺＭＭ１５における下位２５６ビットは、ＹＭＭ０−ＹＭＭ１５のラベルが付けられた複数の２５６ビットパックドデータレジスタのそれぞれに、エイリアスまたはオーバーレイされる。同様に、示される実施形態において、これはまた必ずしも必要ではないが、レジスタＹＭＭ０−ＹＭＭ１５における下位１２８ビットは、ＸＭＭ０−ＸＭＭ１５のラベルが付けられた複数の１２８ビットパックドデータレジスタのそれぞれに、エイリアスまたはオーバーレイされる。５１２ビットレジスタＺＭＭ０−ＺＭＭ３１は、５１２ビットのパックドデータ、２５６ビットのパックドデータ、または１２８ビットのパックドデータを保持することが可能である。２５６ビットレジスタＹＭＭ０−ＹＭＭ１５は、２５６ビットのパックドデータまたは１２８ビットのパックドデータを保持することが可能である。１２８ビットレジスタＸＭＭ０−ＸＭＭ１５は、１２８ビットのパックドデータを保持することが可能である。いくつかの実施形態において、複数のレジスタのそれぞれは、パックド浮動小数点データまたはパックド整数データのいずれかを格納するために用いられてよい。異なったデータ要素サイズがサポートされ、少なくとも、８ビットのバイトデータ、１６ビットのワードデータ、３２ビットのダブル・ワード、３２ビットの単精度浮動小数点データ、６４ビットのクアッド・ワード、および６４ビットの倍精度浮動小数点データを含む。代替的な複数の実施形態においては、異なる個数のレジスタおよび／または異なるサイズのレジスタが用いられてよい。更なる他の複数の実施形態では、複数のレジスタは、より小さな複数のレジスタ上においてより大きな複数のレジスタのエイリアシングを利用しても利用しなくてもよく、および／または、複数のレジスタは、浮動小数点データを格納するために用いられても用いられなくてもよい。
【００７７】
命令セットは、１または複数の命令フォーマットを有してよい。所与の命令フォーマットは、様々なフィールド（ビット数、ビット位置）を定義し、特に、実行されるべきオペレーション（オペコード）と、そのオペレーションがそこで実行されるべき１または複数のオペランドとを規定する。いくつかの命令フォーマットは、複数の命令テンプレート（または複数のサブフォーマット）による定義によって、更に分解される。例えば、所定の命令フォーマットにおける複数の命令テンプレートは、命令フォーマットの複数のフィールド（含まれる複数のフィールドは、典型的には同じ順序であるが、少なくともそのいくつかは異なるビット位置を有する。というのも、より少ないフィールドが含まれるからである。）の異なるサブセットを有するように定義されてよく、および／または、異なって解釈される所与のフィールドを有するように定義されてもよい。従って、ＩＳＡの各命令は、所与の命令フォーマット（および、もし定義されるのであれば、その命令フォーマットにおける複数の命令テンプレートの所与の１つにおいて）を用いて表現され、かつ、オペレーションおよび複数のオペランドを特定するための複数のフィールドを有する。例えば、例示的なＡＤＤ命令は、特定のオペコードと、そのオペコードを規定するためのオペコードフィールドおよび複数のオペランド（ソース１／宛先およびソース２）を選択するための複数のオペランドフィールドとを有する命令フォーマットとを有しており、命令ストリーム中にこのＡＤＤ命令が存在すると、特定の複数のオペランドを選択する複数のオペランドフィールドに、特定の複数のコンテンツを含むことになる。Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ（ＡＶＸ）（ＡＶＸ１およびＡＶＸ２）で参照され、ベクトル拡張（ＶＥＸ）スキームを利用している複数のＳＩＭＤ拡張のセットが存在し、リリースされ、および／または公開されている（例えば、インテル６４およびＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒｓ  Ｍａｎｕａｌ、２０１１年１０月、およびインテル  Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ  ２０１１年６月  を参照）。
【００７８】
例示的な複数の命令フォーマット  ここで記載される１または複数の命令に関する複数の実施形態は、異なる複数のフォーマットで具体化されてもよい。加えて、複数の例示的なシステム、アーキテクチャ、およびパイプラインが、以下で詳述される。１または複数の命令に関する複数の実施形態は、そうした複数のシステム、アーキテクチャ、およびパイプライン上で実行されてよいが、そうした詳細には限定されない。
【００７９】
一般的なベクトルフレンドリな命令フォーマット  ベクトルフレンドリな命令フォーマットとは、複数のベクトル命令適した命令フォーマットである（例えば、複数のベクトル演算を特定するための特定の複数のフィールドが存在する）。ベクトルフレンドリな命令フォーマットによってベクトル演算およびスカラー演算の両方がサポートされた複数の実施形態が記載されているが、代替の複数の実施形態では、ベクトルフレンドリな命令フォーマットによってベクトル演算のみを用いてよい。
【００８０】
図１５Ａおよび図１５Ｂは、本発明の実施形態における、一般的なベクトルフレンドリな命令フォーマットおよびその複数の命令テンプレートを例示するブロック図である。図１５Ａは、本発明の実施形態における、一般的なベクトルフレンドリな命令フォーマットおよびそのクラスＡの複数の命令テンプレートを例示するブロック図であり、一方、図１５Ｂは、本発明の実施形態における、上記の一般的なベクトルフレンドリな命令フォーマットおよびそのクラスＢの複数の命令テンプレートを例示するブロック図である。具体的には、一般的なベクトルフレンドリな命令フォーマット１５００に対してクラスＡおよびクラスＢの複数の命令テンプレートが定義され、両者が、非メモリアクセス１５０５の命令テンプレートと、メモリアクセス１５２０命令テンプレートとを含む。
ベクトルフレンドリな命令フォーマットというコンテキストにおいて一般的（ジェネリック）という用語は、命令フォーマットが、いかなる特定の命令セットにも関連していないことを指す。
【００８１】
本発明の複数の実施形態が記載され、そこでは、ベクトルフレンドリな命令フォーマットが以下の、
３２ビット（４バイト）または６４ビット（８バイト）のデータ要素幅（またはサイズ）を有する６４バイトベクトルオペランド長（またはサイズ）（従って、６４バイトベクトルは、１６個のダブル・ワードサイズの要素または、８個のクアッド・ワードサイズの要素のいずれかから構成される）、
１６ビット（２バイト）または８ビット（１バイト）のデータ要素幅（またはサイズ）を有する６４バイトベクトルオペランド長（またはサイズ）、
３２ビット（４バイト）、６４ビット（８バイト）、または１６ビット（２バイト）のデータ要素幅（またはサイズ）を有する３２バイトベクトルオペランド長（またはサイズ）、および
３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）または８ビット（１バイト）のデータ要素幅（またはサイズ）を有する１６バイトベクトルオペランド長（またはサイズ）、
をサポートするが、
代替の実施形態は、より多い、より少ない、または異なるデータ要素幅（例えば、１２８ビット（１６バイト）データ要素幅）を有する、より多い、より少ない、および／または異なる、ベクトルオペランドサイズ（例えば、２５６バイトベクトルオペランド）を、サポートしてよい。
【００８２】
図１５ＡのクラスＡの命令テンプレートは、１）非メモリアクセス１５０５の命令テンプレート内に、図示される、非メモリアクセス・フルラウンド制御型オペレーション１５１０の命令テンプレートと、非メモリアクセス・データ変換型オペレーション１５１５の命令テンプレートとを有し、２）メモリアクセス１５２０の命令テンプレート内に、図示される、メモリアクセス・一時的１５２５の命令テンプレートと、メモリアクセス・非一時的１５３０の命令テンプレートとを有する。図１５ＢのクラスＢの命令テンプレートは、１）非メモリアクセス１５０５の命令テンプレート内に、図示される、非メモリアクセス・書込みマスク制御・一部ラウンド制御型オペレーション１５１２の命令テンプレートと、非メモリアクセス・書込みマスク制御・Ｖサイズ型オペレーション１５１７の命令テンプレートとを有し、２）メモリアクセス１５２０の命令テンプレート内に、図示される、メモリアクセス・書込みマスク制御１５２７の命令テンプレートを有する。
【００８３】
一般的なベクトルフレンドリな命令フォーマット１５００は、図１５Ａおよび図１５Ｂに例示された順序で、下にリストされた以下の複数のフィールドを有する。
【００８４】
フォーマットフィールド１５４０−このフィールドにおける特定の値（命令フォーマット識別値）は、一意にベクトルフレンドリな命令フォーマットを特定し、従って、命令ストリームにおけるベクトルフレンドリな命令フォーマットの複数の命令の発生を特定する。このフィールドそれ自体は、一般的なベクトルフレンドリな命令フォーマットのみを有する命令セットに対してはこのフィールドは必要ではないという意味では、オプショナルである。
【００８５】
ベースオペレーションフィールド１５４２−そのコンテンツは、異なるベースオペレーションを区別する。
【００８６】
レジスタインデックスフィールド１５４４−そのコンテンツは、直接的またはアドレス発生を介して、ソースおよび複数の宛先オペランドの位置を規定し、それらはレジスタまたはメモリにある。これらは、Ｐ×Ｑ個（例えば、３２×５１２、１６×１２８、３２×１０２４、６４×１０２４）のレジスタファイルからＮ個のレジスタを選択するのに十分なビット数を有する。一実施形態では、Ｎは、３つのソースおよび１つの宛先レジスタまでであってよく、代替の実施形態では、それよりも多いかまたは少ないソースおよび宛先レジスタをサポートしてよい（例えば、２つのソースまでをサポートしてよくそのうちの１つは宛先としての役割も果たす。３つのソースまでをサポートしてよくそのうちの１つが宛先としての役割も果たす。２つのソースと１つの宛先までをサポートしてよい）。
【００８７】
修飾子フィールド１５４６−そのコンテンツは、一般的なベクトル命令フォーマットの中にメモリアクセスを規定する命令が存在するものと、存在しないものとを区別する。即ち、非メモリアクセス１５０５の命令テンプレートと、メモリアクセス１５２０の命令テンプレートとを区別する。複数のメモリアクセスオペレーションは、メモリ階層に対して読み取りおよび／または書込みを行うが（場合によっては、レジスタ内の値を用いてソースおよび／または宛先のアドレスを特定する）、これに対して、複数の非メモリアクセスオペレーションは、そうした特定を行わない（例えば、ソースおよび複数の宛先は、複数のレジスタである）。一実施形態では、このフィールドは、また、メモリアドレス計算を実行するために３つの異なる方法の間において選択を行うが、代替の実施形態は、複数のメモリアドレス計算を実行するためにより多くの、より少ない、または異なる方法を、サポートしてよい。
【００８８】
拡大オペレーションフィールド１５５０−そのコンテンツは、様々な異なる複数のオペレーションのどの１つがベースオペレーションに加えて実行されるべきかを区別する。このフィールドは、前後関係に応じて特定される。本発明の一実施形態において、このフィールドは、クラスフィールド１５６８、アルファフィールド１５５２およびベータフィールド１５５４へと分割される。拡大オペレーションフィールド１５５０は、２、３または４つの命令ではなく単一の命令において、共通する複数のオペレーションのグループが実行されることを可能とする。
【００８９】
スケール（ｓｃａｌｅ）フィールド１５６０−そのコンテンツは、メモリアドレス発生（例えば、２ｓｃａｌｅ×ｉｎｄｅｘ＋ｂａｓｅを使用するアドレス発生）に対する、インデックスフィールドのコンテンツのスケーリングを許容する。
【００９０】
置換（ｄｉｓｐｌａｃｅｍｅｎｔ）フィールド１５６２Ａ−そのコンテンツは、メモリアドレス発生の一部として使用される（例えば、アドレス発生のために２ｓｃａｌｅ×ｉｎｄｅｘ＋ｂａｓｅ＋ｄｉｓｐｌａｃｅｍｅｎｔを用いる）。
【００９１】
置換ファクターフィールド１５６２Ｂ（置換フィールド１５６２Ａを直接的に置換ファクターフィールド１５６２Ｂに並置すると、これらのうちの１つまたは他方が使用されることを意味する）−そのコンテンツは、アドレス発生の一部として使用され、メモリアクセス（Ｎ）のサイズによってスケーリングされるべき、置換ファクターを規定する。ここで、Ｎはメモリアクセスのバイト数である（例えば、アドレス発生のために２ｓｃａｌｅ×ｉｎｄｅｘ＋ｂａｓｅ＋スケールされたｄｉｓｐｌａｃｅｍｅｎｔを用いる）。重複する複数の下位ビットは無視され、これによって、有効なアドレスを計算するために用いられる最終的な置換を生成するべく、置換ファクターフィールドのコンテンツが、メモリオペランドの総サイズ（Ｎ）と乗算される。Ｎ値は、（後に記載される）フルオペコードフィールド１５７４およびデータ操作フィールド１５５４Ｃに基づき、プロセッサハードウェアによってランタイムで決定される。置換フィールド１５６２Ａおよび置換ファクターフィールド１５６２Ｂは、それらが非メモリアクセス１５０５命令テンプレートでは用いられないという意味ではオプショナルであり、および／または、異なる実施形態では、１つのみのフィールドを実装してよく、または、この２つのいずれを実装しなくてもよい。
【００９２】
データ要素幅フィールド１５６４−そのコンテンツは、多数のデータ要素幅のいずれが用いられるべきか（いくつかの実施形態では全命令に対して、他の複数の実施形態では、複数の命令のうちの一部のみに対して）を区別する。このフィールドは、１つのみのデータ要素幅がサポートされるか、および／または、オペコードのある態様を用いて複数のデータ要素幅がサポートされる場合には、必要ではないという意味において、オプショナルである。
【００９３】
書込みマスクフィールド１５７０−そのコンテンツは、データ要素位置毎に基づいて、宛先ベクトルオペランドにおけるそのデータ要素位置が、ベースオペレーションおよび拡大オペレーションの結果を反映しているかどうかを制御する。クラスＡの命令テンプレートは、マージ−書込みマスキングをサポートし、一方で、クラスＢの命令テンプレートは、マージおよびゼロ化の両方のマスキングをサポートする。マージする場合には、複数のベクトルマスクは、いかなるオペレーション（ベースオペレーションおよび拡大オペレーションによって規定される）を実行中であっても、その宛先のいかなる要素のセットも更新されないようにプロテクトする。他の１つの実施形態では、対応するマスクビットが０である宛先の各要素の古い値を失わないようにする。対照的に、ゼロ化する場合には、複数のベクトルマスクは、いかなるオペレーション（ベースオペレーションおよび拡大オペレーションによって規定される）を実行中であっても、その宛先のいかなる要素のセットもゼロ化する。一つの実施形態では、対応するマスクビットが０である場合に、宛先の要素がゼロ値に設定される。この機能性のサブセットは、実行されているオペレーション（即ち、最初から最後の要素まで、修正されている複数要素のスパン）のベクトル長を制御する能力を有する。しかしながら、修正される複数の要素は、連続している必要は無い。従って、書込みマスクフィールド１５７０は、ロード、格納、算術、論理、その他を含む部分的なベクトル演算を許容する。書込みマスクフィールド１５７０のコンテンツが、使用されるべき書込みマスクを含んだ多数の書込みマスクレジスタの１つを選択する（そして、これにより、書込みマスクフィールド１５７０のコンテンツが間接的に実行されるべきマスキングを特定する）ような本発明の複数の実施形態が記載されたが、或いは、代替または追加の複数の実施形態では、書込みマスクフィールド１５７０のコンテンツが実行されるべきマスキングを直接的に規定することを許容する。
【００９４】
即時フィールド１５７２−そのコンテンツは、即値（イミディエイト）の仕様を許容する。このフィールドは、即値をサポートしない一般的なベクトルフレンドリなフォーマットの実装には存在せず、かつ、即値を使用しない命令には存在しないという意味で、オプショナルである。
【００９５】
クラスフィールド１５６８−そのコンテンツは、異なる命令のクラス間を区別する。図１５Ａ−Ｂを参照すると、このフィールドのコンテンツは、クラスＡ命令とクラスＢ命令との間を選択する。図１５Ａ−Ｂにおいて、角が丸められた四角は、特定の値がそのフィールドに存在することを示すために用いられる（例えば、図１５Ａ−Ｂのそれぞれにおける、クラスフィールド１５６８に対するクラスＡ１５６８Ａ、クラスＢ１５６８Ｂ）。
【００９６】
クラスＡの命令テンプレート
クラスＡの非メモリアクセス１５０５の命令テンプレートの場合、アルファフィールド１５５２は、ＲＳフィールド１５５２Ａとして解釈され、そのコンテンツは、異なる拡大オペレーション型のいずれを実行すべきかを区別し（例えば、ラウンド１５５２Ａ．１およびデータ変換１５５２Ａ．２は、それぞれ、非メモリアクセス・ラウンド型オペレーション１５１０、非メモリアクセス・データ変換型オペレーション１５１５命令テンプレートのために規定される）、他方で、ベータフィールド１５５４は、規定された型のオペレーションのいずれが実行されるべきかを区別する。非メモリアクセス１５０５の命令テンプレートにおいて、スケールフィールド１５６０、置換フィールド１５６２Ａ、および置換スケールフィールド１５６２Ｂは存在しない。
【００９７】
非メモリアクセスの命令テンプレート−フルラウンド制御型オペレーション  非メモリアクセス・フルラウンド制御型オペレーション１５１０の命令テンプレートでは、ベータフィールド１５５４はラウンド制御フィールド１５５４Ａとして解釈され、そのコンテンツは静的な丸め（ラウンディング）を提供する。本発明の複数の実施形態においてラウンド制御フィールド１５５４Ａは、ＳＡＥ（Ｓｕｐｐｒｅｓｓ  ａｌｌ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ  ｅｘｃｅｐｔｉｏｎｓ）フィールド１５５６およびラウンドオペレーション制御フィールド１５５８を有するが、代替の実施形態では、これらの両方のコンセプトをサポートし、同じフィールドへとエンコードしてもよく、或いは、これらのコンセプト／フィールドの１つだけ、または他方を有してもよい（例えば、ラウンドオペレーション制御フィールド１５５８だけを有してもよい）。
【００９８】
ＳＡＥフィールド１５５６−そのコンテンツは、例外イベントの報告を無効化するか否かを区別する。ＳＡＥフィールド１５５６のコンテンツが、禁止が有効化されていることを示す場合に、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、またいかなる浮動小数点例外ハンドラも立ち上げない。
【００９９】
ラウンドオペレーション制御フィールド１５５８−そのコンテンツは、実行すべき丸め演算のグループの１つを区別する（例えば、切り上げ、切り捨て、ゼロ方向へ丸める、最も近く丸める）。従って、ラウンドオペレーション制御フィールド１５５８は、命令毎に基づいて、丸めモードの変化を許容する。プロセッサが、複数の丸めモードを規定するための制御レジスタを有するような本発明の一実施形態において、ラウンドオペレーション制御フィールド１５５８のコンテンツは、そのレジスタ値を無効にする。
【０１００】
非メモリアクセスの命令テンプレート−データ変換オペレーション  非メモリアクセス・データ変換型オペレーション１５１５の命令テンプレートにおいてベータフィールド１５５４は、データ変換フィールド１５５４Ｂとして解釈され、そのコンテンツは、多数のデータ変換のいずれが実行されるべきかを区別する（例えば、データ変換無し、スウィズル、ブロードキャスト）。
【０１０１】
クラスＡのメモリアクセス１５２０の命令テンプレートの場合、アルファフィールド１５５２がエビクションヒントフィールド１５５２Ｂとして解釈され、そのコンテンツは、複数のエビクションヒントのうちのいずれが用いられるべきかを区別し（図１５Ａでは、一時的１５５２Ｂ．１および非一時的１５５２Ｂ．１は、それぞれ、メモリアクセス一時的１５２５命令テンプレートおよびメモリアクセス非一時的１５３０命令テンプレートに対して規定される）、他方では、ベータフィールド１５５４はデータ操作フィールド１５５４Ｃとして解釈され、そのコンテンツは、多数のデータ操作オペレーション（基本的なものとしても知られている）のいずれが実行されるべきかを区別する（例えば、操作無し、ブロードキャスト、ソースのアップ変換、宛先のダウン変換）。メモリアクセス１５２０の命令テンプレートはスケールフィールド１５６０を有し、任意選択的に、置換フィールド１５６２Ａまたは置換スケールフィールド１５６２Ｂを有する。
【０１０２】
複数のベクトルメモリ命令は、メモリからのベクトルの複数のロード、およびメモリへのベクトルの複数の格納を、変換サポートと共に実行する。通常のベクトル命令と同様に、複数のベクトルメモリ命令は、メモリへ／メモリから、データ要素として賢いやり方でデータを転送し、実際に転送される要素は、書込みマスクとして選択されたベクトルマスクのコンテンツによってディクテイトされる。
【０１０３】
メモリアクセスの命令テンプレート−一時的
一時的データは、キャッシュすることの利益を得るのに十分な程度に、直ちに再利用される可能性の高いデータである。しかしながらこれはヒントであって、異なる複数のプロセッサがそれを異なる方法で実装してもよく、ヒントを全く無視することも含む。
【０１０４】
メモリアクセスの命令テンプレート−非一時的
非一時的データは、第１レベルキャッシュでキャッシュすることの利益を得るのに十分な程度に直ちに再利用される可能性の低いデータであり、エビクションが優先される。しかしながらこれはヒントであって、異なる複数のプロセッサがそれを異なる方法で実装してもよく、ヒントを全く無視することも含む。
【０１０５】
クラスＢの命令テンプレート
クラスＢの命令テンプレートの場合、アルファフィールド１５５２は、書込みマスク制御（Ｚ）フィールド１５５２Ｃとして解釈され、そのコンテンツは、書込みマスクフィールド１５７０によって制御される書込みマスキングが、マージであるべきかゼロ化であるべきかを区別する。
【０１０６】
クラスＢの非メモリアクセス１５０５の命令テンプレートの場合、ベータフィールド１５５４の一部はＲＬフィールド１５５７Ａとして解釈され、そのコンテンツは、異なる拡大オペレーション型のいずれを実行すべきかを区別し（例えば、ラウンド１５５７Ａ．１およびベクトル長（ＶＳＩＺＥ）１５５７Ａ．２はそれぞれ、非メモリアクセス・書込みマスク制御・部分ラウンド制御型オペレーション１５１２命令テンプレート、および非メモリアクセス・書込みマスク制御・ＶＳＩＺＥ型オペレーション１５１７命令テンプレートのために規定される）、他方では、ベータフィールド１５５４の残り部分は、規定された型のオペレーションのいずれが実行されるべきかを区別する。非メモリアクセス１５０５の命令テンプレートにおいて、スケールフィールド１５６０、置換フィールド１５６２Ａ、および置換スケールフィールド１５６２Ｂは存在しない。
【０１０７】
非メモリアクセス・書込みマスク制御・部分ラウンド制御型オペレーション１５１０の命令テンプレートでは、ベータフィールド１５５４の残り部分は、ラウンドオペレーションフィールド１５５９Ａとして解釈され、例外イベントの報告は無効化される（所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、またいかなる浮動小数点例外ハンドラも立ち上げない）。
【０１０８】
ラウンドオペレーション制御フィールド１５５９Ａ−ラウンドオペレーション制御フィールド１５５８と同様に、そのコンテンツは、実行すべき丸め演算（ラウンディングオペレーション）のグループの１つを区別する（例えば、切り上げ、切り捨て、ゼロ方向へ丸める、最も近くに丸める）。したがって、ラウンドオペレーション制御フィールド１５５９Ａは、命令毎に基づいて、丸めモードの変化を許容する。プロセッサが、複数の丸めモードを規定するための制御レジスタを有するような本発明の一実施形態において、ラウンドオペレーション制御フィールド１５５０のコンテンツは、そのレジスタ値を無効にする。
【０１０９】
非メモリアクセス・書込みマスク制御・ＶＳＩＺＥ型オペレーション１５１７の命令テンプレートにおいて、ベータフィールド１５５４の残り部分はベクトル長フィールド１５５９Ｂとして解釈され、そのコンテンツは、多数のデータベクトル長のいずれが実行されるべきかを区別する（例えば、１２８、２５６、または５１２バイト）。
【０１１０】
クラスＢのメモリアクセス１５２０の命令テンプレートの場合、ベータフィールド１５５４の一部はブロードキャストフィールド１５５７Ｂとして解釈され、そのコンテンツはそのブロードキャスト型データ操作オペレーションが実行されるべきかどうかを区別し、他方で、ベータフィールド１５５４の残り部分は、ベクトル長フィールド１５５９Ｂとして解釈される。メモリアクセス１５２０の命令テンプレートはスケールフィールド１５６０を有し、任意選択的に、置換フィールド１５６２Ａまたは置換スケールフィールド１５６２Ｂを有する。
【０１１１】
一般的なベクトルフレンドリな命令フォーマット１５００に関して、フォーマットフィールド１５４０、ベースオペレーションフィールド１５４２およびデータ要素幅フィールド１５６４を有するフルオペコードフィールド１５７４が示される。これらのフィールドの全てをフルオペコードフィールド１５７４が有するような１つの実施形態が示されているが、フルオペコードフィールド１５７４は、これらの全フィールドをサポートしていない実施形態では、これらの全てのフィールドよりも少ないフィールドを有する。フルオペコードフィールド１５７４は、オペレーションコード（オペコード）を提供する。
【０１１２】
拡大オペレーションフィールド１５５０、データ要素幅フィールド１５６４、および書込みマスクフィールド１５７０は、これらの特徴が、一般的なベクトルフレンドリな命令フォーマットおいて命令毎に規定されることを許容する。
【０１１３】
書込みマスクフィールドおよびデータ要素幅フィールドの組み合わせにより型（タイプ）が付された複数の命令を生成し、それらの命令では、これらのフィールドが、異なるデータ要素幅に基づきマスクが適用されることを許容する。
【０１１４】
クラスＡおよびクラスＢ内に見つけられる様々な命令テンプレートは、異なる複数の状況で有益である。本発明のいくつかの実施形態において、異なる複数のプロセッサまたは、１つのプロセッサ内の異なる複数のコアが、クラスＡだけ、クラスＢだけ、または両方のクラスを、サポートしてよい。例えば、汎用計算用の高性能汎用アウトオブオーダコアは、クラスＢのみをサポートしてよい。主としてグラフィックスおよび／または科学（スループット）計算用のコアは、クラスAのみをサポートしてよい。両方を目的とするコアは両方をサポートしてよい（無論、コアは複数のテンプレートおよび複数の命令の混合を有するが、両クラスに由来するテンプレートおよび命令の全てではないものも本発明の範囲内である）。また、単一のプロセッサがマルチコアを有してよく、コアの全てが同じクラスをサポートし、または異なるコアが異なるクラスをサポートする。例えば、複数のグラフィックスコアと複数の汎用コアとを別個に有するプロセッサにおいて、複数のグラフィックスコアにおける、主としてグラフィックスおよび／または科学計算用の１つのコアがクラスAのみをサポートし、その一方で、１または複数の汎用コアが、クラスＢのみサポートする汎用計算を目的とするアウトオブオーダ実行およびレジスタリネーミングを備えた高性能汎用コアであってよい。別個のグラフィックコアを有さない他のプロセッサは、クラスＡおよびクラスＢの両方をサポートする、もう１つの汎用のインオーダまたはアウトオブオーダのコアを有してよい。無論、本発明の異なる実施形態では、１つのクラスに由来する特徴は、また、他のクラスで実装されてよい。高水準言語で書かれたプログラムが、異なる多様な実行可能な形式へと変換される（例えば、実行時コンパイルされ、または静的コンパイルされる）。そしてこの形式は、１）実行の為のターゲットプロセッサによってサポートされる１の（または複数の）クラスの命令のみを含む形式、または２）全てのクラスに含まれる命令の異なる組合せを用いて書かれた代替的なルーチンを有し、かつ、現在コードを実行しているプロセッサによってサポートされる複数の命令に基づいて実行するためのルーチンを選択する制御フローコードを有する形式、を含む。
【０１１５】
例示的な特定のベクトルフレンドリな命令フォーマット
図１６は、本発明の実施形態における、例示的な特定のベクトルフレンドリな命令フォーマットを例示するブロック図である。図１６は、特定のベクトルフレンドリな命令フォーマット１６００を示し、このフォーマットは、複数フィールドのいくつかに対する値のみならず、位置、サイズ、インタプリテーション、フィールド順序をも規定するという意味において、特定のフォーマットである。特定のベクトルフレンドリな命令フォーマット１６００はｘ８６命令セットを拡張するために用いられ、これにより、複数フィールドのいくつかは現存のｘ８６命令セットおよびその拡張（例えば、ＡＶＸ）で用いられる複数のフィールドと、類似するかまたは同じとなる。このフォーマットは、拡張を伴う現存のｘ８６命令セットにおけるプレフィックス符号化フィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、置換フィールド、および即時フィールドと整合性を保ったままである。図１５に由来する複数のフィールドであって、図１６に由来する複数のフィールドが描かれた複数のフィールドが、例示される。
【０１１６】
例示の目的から、一般的なベクトルフレンドリな命令フォーマット１５００のコンテキストの中で、本発明の複数の実施形態が特定のベクトルフレンドリな命令フォーマット１６００を参照しつつ記載されるが、本発明は、請求項に記載された場合を除き、特定のベクトルフレンドリな命令フォーマット１６００には限定されないことが理解されるべきである。例えば一般的なベクトルフレンドリな命令フォーマット１５００は、様々なフィールドに対して様々な可能なサイズを予期するが、これに対し、特定のベクトルフレンドリな命令フォーマット１６００は、複数の特定サイズの複数のフィールドを有するものとして示されている。特定の例を用いて、データ要素幅フィールド１５６４が、特定のベクトルフレンドリな命令フォーマット１６００における１ビットフィールドとして例示されるが、本発明はこれに限定されない（即ち、一般的なベクトルフレンドリな命令フォーマット１５００は、データ要素幅フィールド１５６４における他の複数のサイズを予期する。）
【０１１７】
一般的なベクトルフレンドリな命令フォーマット１５００は、図１６Ａに例示される順序で、以下にリストされた複数のフィールドを有する。
【０１１８】
ＥＶＥＸプレフィックス（バイト０―３）１６０２−４バイト形式でエンコードされる。
【０１１９】
フォーマットフィールド１５４０（ＥＶＥＸバイト０、ビット［７：０］）−第１のバイト（ＥＶＥＸバイト０）はフォーマットフィールド１５４０であり、０ｘ６２を含む（本発明の一実施形態では、ベクトルフレンドリな命令フォーマットを区別するために用いられる固有の値である）。
【０１２０】
第２の４バイト（ＥＶＥＸバイト１−３）は、特定の機能を提供する多数のビットフィールドを有する。
【０１２１】
ＲＥＸフィールド１６０５（ＥＶＥＸバイト１、ビット［７−５］−ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）および１５５７ＢＥＸ  バイト１、ビット［５］−Ｂ）、からなる。ＥＶＥＸ．Ｒ、ＥＶＥＸ．ＸおよびＥＶＥＸ．Ｂビットフィールドは、対応する複数のＶＥＸビットフィールドと同じ機能を提供し、複数個の１の補数形式を用いてエンコードされる。即ち、ＺＭＭ０は、１１１１Ｂとしてエンコードされ、ＺＭＭ１５は００００Ｂとしてエンコードされる。複数の命令についての他の複数のフィールドは、当技術分野で知られているように（ｒｒｒ、ｘｘｘおよびｂｂｂ）、レジスタの複数のインデックスにおける下位の３ビットをエンコードし、ＥＶＥＸ．Ｒ、ＥＶＥＸ．ＸおよびＥＶＥＸ．Ｂを追加することによって、Ｒｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂが形成されてよい。
【０１２２】
ＲＥＸ´フィールド１５１０−これは、ＲＥＸ´フィールド１５１０の第１の部分であり、拡張された３２レジスタセットにおける上位１６または下位１６のいずれかをエンコードするのに用いられるＥＶＥＸ．Ｒ´ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ´）である。本発明の一実施形態において、このビットは、ＢＯＵＮＤ命令と区別すべく、下記に示すように他のビットを伴って、（よく知られたｘ８６  ３２ビットモードにおいて）ビット反転形式で格納され、そのリアルオペコードバイトは６２であるが、ＭＯＤ  Ｒ／Ｍフィールド（後述）において、ＭＯＤフィールドの１１の値を受け付けない。本発明の複数の代替の実施形態では、このビットおよび、以下で記載されるその他の示されたビットを反転形式では格納しない。値１は、下位の１６レジスタをエンコードするために用いられる。言い換えると、ＥＶＥＸ．Ｒ´、ＥＶＥＸ．Ｒ、および、他のフィールドに由来するその他のＲＲＲを組み合わせることにより、Ｒ´Ｒｒｒｒが形成される。
【０１２３】
オペコードマップフィールド１６１５（ＥＶＥＸ  バイト１、ビット［３：０］−ｍｍｍｍ）−そのコンテンツは、黙示的なリーディング・オペコード（０Ｆ、 ０Ｆ３８または０Ｆ３）をエンコードする。
【０１２４】
データ要素幅フィールド１５６４（ＥＶＥＸ  バイト２、ビット［７］−Ｗ）は、ＥＶＥＸ．Ｗという表記により表される。ＥＶＥＸ．Ｗは、データ型の粒度（サイズ）を定義するために用いられる（３２ビットの複数のデータ要素または６４ビットの複数のデータ要素のいずれか）。
【０１２５】
ＥＶＥＸ．ｖｖｖｖ１６２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割としては以下を含んでよい。（１）ＥＶＥＸ．ｖｖｖｖは、反転形式（複数の１の補数）で規定された第１のソースレジスタオペランドをエンコードし、複数の命令に対して２またはそれよりも多くのソースオペランドと共に有効である。（２）ＥＶＥＸ．ｖｖｖｖは、所定の複数のベクトルシフトに対する反転形式（複数の１の補数）で規定された宛先レジスタオペランドをエンコードする。または、（３）ＥＶＥＸ．ｖｖｖｖは、いかなるオペランドもエンコードせず、フィールドはリザーブされ、１１１１ｂを含む。このように、ＥＶＥＸ．ｖｖｖｖフィールド１６２０は、反転形式（複数の１の補数）で格納された、第１ソースレジスタ指示子の４つの低位ビットをエンコードする。命令に応じて、追加の異なるＥＸＥＶビットフィールドが、識別子サイズを３２レジスタへ拡張するために用いられる。
【０１２６】
ＥＶＥＸ．Ｕ１５６８クラスフィールド（ＥＶＥＸ  バイト２、ビット［２］−Ｕ）−ＥＶＥＸ．Ｕ＝０の場合には、クラスＡまたはＥＶＥＸ．Ｕ０を示し、ＥＶＥＸ．Ｕ＝１の場合には、クラスＢまたはＥＶＥＸ．Ｕ１を示す。
【０１２７】
プレフィックス符号化フィールド１６２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）は、ベースオペレーションフィールドのために追加ビットを提供する。ＥＶＥＸプレフィックスフォーマットにおける複数のレガシーＳＳＥ命令に対してサポートを提供することに加えて、当該フィールドは、またＳＩＭＤプレフィックスを圧縮する利益も有する（ＳＩＭＤプレフィックスを表すためのバイトを必要とするのではなく、ＥＶＥＸプレフィックスは、２ビットだけを必要とする。）  一実施形態において、レガシーフォーマットおよびＥＶＥＸプレフィックスフォーマットの両方でＳＩＭＤプレフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を使用する複数のレガシーＳＳＥ命令をサポートするために、これらのレガシーＳＩＭＤプレフィックスは、ＳＩＭＤプレフィックス符号化フィールドへとエンコードされ、そしてデコーダのＰＬＡへ提供されるのに先立ちレガシーＳＩＭＤプレフィックスへランタイムで拡張される（ＰＬＡが、修正なしでこれらの複数のレガシー命令におけるレガシーおよびＥＶＥＸフォーマットの両方を実行することができるように）。より新しい複数の命令は、オペコードとしてＥＶＥＸプレフィックス符号化フィールドのコンテンツを直接的に使用しうるが、特定の複数の実施形態では一貫性を保つべく同様のやり方で拡張を行い、しかし、これらの複数のレガシーＳＩＭＤプレフィックスによって規定される異なる複数の意味を許容する。代替の実施形態では、２ビットＳＩＭＤプレフィックス符号化をサポートすべくＰＬＡを再設計してよく、これにより拡張が不要となってよい。
【０１２８】
アルファフィールド１５５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ、これはＥＶＥＸ.ＥＨ、 ＥＶＥＸ.ｒｓ、ＥＶＥＸ.ＲＬ、ＥＶＥＸ書込みマスク制御、およびＥＶＥＸ.Ｎとしても知られており、また、αとして示される）−先に述べたように、当該フィールドは、前後関係に応じて特定される。
【０１２９】
ベータフィールド１５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、これはＥＶＥＸ.ｓ２−０、ＥＶＥＸ.ｒ２−０、ＥＶＥＸ.ｒｒ１、ＥＶＥＸ.ＬＬ０、ＥＶＥＸ.ＬＬＢとしても知られ、また、βββとして示される) −先に述べたように、当該フィールドは、前後関係に応じて特定される。
【０１３０】
ＲＥＸ´フィールド１５１０−これは、ＲＥＸ´フィールドの残り部分であり、拡張された３２レジスタセットにおける上位１６または下位１６のいずれかをエンコードするのに用いられてよいＥＶＥＸ.Ｖ´ビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ´）である。このビットは、ビット反転形式で格納される。値１は、下位の１６レジスタをエンコードするために用いられる。言い換えると、ＥＶＥＸ．Ｖ´およびＥＶＥＸ．ｖｖｖｖを組み合わせることによりＶ´ＶＶＶＶが形成される。
【０１３１】
書込みマスクフィールド１５７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）−このコンテンツは、先述したように、複数の書込みマスクレジスタにおける一のレジスタのインデックスを規定する。本発明の一実施形態において、特定の値ＥＶＥＸ.ｋｋｋ＝０００は特別な振る舞いを有し、特定の命令に対して書込みマスクが用いられないことを暗示する（これは様々なやり方で実装されてよく、全ての書込みマスクまたはマスキングハードウェアを迂回するハードウェアに配線接続された一の書込みマスクを使用することを含む）。
【０１３２】
リアルオペコードフィールド１６３０（バイト４）が、また、オペコードバイトとして知られる。オペコードの一部は、このフィールドにおいて規定される。
【０１３３】
ＭＯＤ  Ｒ／Ｍフィールド１６４０（バイト５）は、ＭＯＤフィールド１６４２、Ｒｅｇフィールド１６４４およびＲ／Ｍフィールド１６４６を有する。先述したように、ＭＯＤフィールド１６４２のコンテンツは、メモリアクセスオペレーションと非メモリアクセスオペレーションとを区別する。Ｒｅｇフィールド１６４４の役割は、２つの状況に集約することができる。宛先レジスタオペランドおよびソースレジスタオペランドのいずれかをエンコードするか、または、オペコード拡張として扱われ、命令オペランドをエンコードするためには用いられない。Ｒ／Ｍフィールド１６４６の役割としては以下を有してよい。メモリアドレスを参照する命令オペランドをエンコードするか、または、宛先レジスタオペランドおよびソースレジスタオペランドのいずれかをエンコードする。
【０１３４】
スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）−先述したように、スケールフィールド１５５０のコンテンツは、メモリアドレス発生のために用いられる。ＳＩＢ．ｘｘｘ１６５４およびＳＩＢ．ｂｂｂ１６５６−これら複数のフィールドの複数のコンテンツは、レジスタの複数インデックスＸｘｘｘおよびＢｂｂｂに関連して事前に参照されている。
【０１３５】
置換フィールド１５６２Ａ（バイト７―１０）−ＭＯＤフィールド１６４２が１０を含む場合、バイト７―１０が置換フィールド１５６２Ａであり、レガシー３２ビット置換（ｄｉｓｐ３２）と同様に機能し、かつバイト粒度で機能する。
【０１３６】
置換ファクターフィールド１５６２Ｂ（バイト７）−ＭＯＤフィールド１６４２が０１を含む場合、バイト７が置換ファクターフィールド１５６２Ｂである。このフィールド位置は、レガシーｘ８６命令セット８ビット置換（ｄｉｓｐ８）と同様であり、バイト粒度で機能する。ｄｉｓｐ８は符号拡張されるので、−１２８と１２７バイトのオフセット間でアドレス指定のみ可能である。６４バイトのキャッシュラインに関してｄｉｓｐ８は８ビットを使用し、この８ビットは実際に有用な４つの値、−１２８、６４、０、６４のみに設定されうる。しばしばより広いレンジが必要となるので、ｄｉｓｐ３２が用いられる。しかしながら、ｄｉｓｐ３２は４バイトを要する。ｄｉｓｐ８およびｄｉｓｐ３２とは対照的に、置換ファクターフィールド１５６２Ｂは、ｄｉｓｐ８の再解釈である。置換ファクターフィールド１５６２Ｂを使用する場合、実際の置換は、メモリオペランドアクセス（Ｎ）のサイズが乗じられた置換ファクターフィールドのコンテンツによって決定される。このタイプの置換は、ｄｉｓｐ８＊Ｎとして参照される。これにより、平均の命令長さが短くなる（置換に対して単一のバイトが使用されるが、より広いレンジを備える）。そうした圧縮された置換は、効果的な置換とはメモリアクセスの多様な粒度であり、よって、アドレスオフセットにおける冗長な複数の低位ビットはエンコードされる必要が無い、という前提に基づく。言い換えると、置換ファクターフィールド１５６２Ｂは、レガシーｘ８６命令セットの８ビット置換を、代用する。したがって、置換ファクターフィールド１５６２Ｂは、ｄｉｓｐ８はｄｉｓｐ８＊Ｎへオーバーロードされるという唯一の例外があるが、ｘ８６命令セット８ビット置換と同じやり方でエンコードされる（つまりＭｏｄＲＭ／ＳＩＢエンコード規則には変更はない）。言い換えると、エンコード規則またはエンコード長に変更はなく、ハードウェア（バイト単位のアドレスオフセットを得るためにメモリオペランドのサイズにより、その置換をスケールする必要がある）による置換値の解釈にのみ変更がある。
【０１３７】
即時フィールド１５７２は、先述したように動作する。
【０１３８】
フルオペコードフィールド
図１６Ｂは、本発明の一実施形態における、フルオペコードフィールド１５７４を作り上げる、特定のベクトルフレンドリな命令フォーマット１６００の複数のフィールドを例示するブロック図である。具体的には、フルオペコードフィールド１５７４は、フォーマットフィールド１５４０、ベースオペレーションフィールド１５４２およびデータ要素幅（Ｗ）フィールド１５６４を有する。ベースオペレーションフィールド１５４２は、プレフィックス符号化フィールド１６２５、オペコードマップフィールド１６１５、およびリアルオペコードフィールド１６３０を含む。
【０１３９】
レジスタインデックスフィールド
図１６Ｃは、本発明の一実施形態における、レジスタインデックスフィールド１５４４を作り上げる、特定のベクトルフレンドリな命令フォーマット１６００の複数のフィールドを例示するブロック図である。具体的には、レジスタインデックスフィールド１５４４は、ＲＥＸフィールド１６０５、ＲＥＸ´フィールド１６１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド１６４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド１６４６、ＶＶＶＶフィールド１６２０、ｘｘｘフィールド１６５４およびｂｂｂフィールド１６５６を有する。
【０１４０】
拡大オペレーションフィールド
図１６Ｄは、本発明の一実施形態における、拡大オペレーションフィールド１５５０を作り上げる、特定のベクトルフレンドリな命令フォーマット１６００の複数のフィールドを例示するブロック図である。クラス（Ｕ）フィールド１５６８が０を含む場合にはＥＶＥＸ．Ｕ０（クラスＡ  １５６８Ａ）を意味し、０を含む場合には、ＥＶＥＸ．Ｕ１（クラスＢ  １５６８Ｂ）を意味する。Ｕ＝０で、かつＭＯＤフィールド１６４２が１１を含む場合（非メモリアクセスオペレーションを意味する）、アルファフィールド１５５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、ｒｓフィールド１５５２Ａとして解釈される。ｒｓフィールド１５５２Ａがａ１（ラウンド１５５２Ａ.１）を含む場合、ベータフィールド１５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ラウンド制御フィールド１５５４Ａとして解釈される。ラウンド制御フィールド１５５４Ａは、１ビットのＳＡＥフィールド１５５６および２ビットのラウンドオペレーションフィールド１５５８を含む。ｒｓフィールド１５５２Ａが０を含む場合（データ変換１５５２Ａ．２）、ベータフィールド１５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ変換フィールド１５５４Ｂとして解釈される。Ｕ＝０で、かつＭＯＤフィールド１６４２が００、０１、または１０を含む場合（メモリアクセスオペレーションを意味する）、アルファフィールド１５５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）はエビクションヒント（ＥＨ）フィールド１５５２Ｂとして解釈され、ベータフィールド１５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ操作フィールド１５５４Ｃとして解釈される。
【０１４１】
Ｕ＝１の場合、アルファフィールド１５５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、書込みマスク制御（Ｚ）フィールド１５５２Ｃとして解釈される。Ｕ＝１で、かつＭＯＤフィールド１６４２が１１を含む場合（非メモリアクセスオペレーションを意味する）、ベータフィールド１５５４の一部（ＥＶＥＸバイト３、ビット［４］−Ｓ０）は、ＲＬフィールド１５５７Ａとして解釈される。これが１（ラウンド１５５７Ａ．１）を含む場合、ベータフィールド１５５４の残り（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）はラウンドオペレーションフィールド１５５９Ａとして解釈されるが、その一方で、ＲＬフィールド１５５７Ａが０（ＶＳＩＺＥ１５５７．Ａ２）を含む場合、ベータフィールド１５５４の残り（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）はベクトル長フィールド１５５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）として解釈される。Ｕ＝１で、かつＭＯＤフィールド１６４２が００、０１または１０を含む場合（メモリアクセスオペレーションを意味する）、ベータフィールド１５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド１５５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）およびブロードキャストフィールド１５５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）として解釈される。
【０１４２】
例示的なレジスタ・アーキテクチャ
図１７は、本発明の一実施形態における、レジスタ・アーキテクチャ１７００のブロック図である。例示される実施形態では、５１２ビット幅の３２のベクトルレジスタ１７１０があり、これらのレジスタは、ｚｍｍ０からｚｍｍ３１として参照される。下位の１６のｚｍｍレジスタにおける下位２５６ビットは、レジスタｙｍｍ０−１６にオーバーレイされる。下位の１６のｚｍｍレジスタにおける下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０−１５にオーバーレイされる。特定のベクトルフレンドリな命令フォーマット１６００は、これらのオーバーレイレジスタファイルにおいて、以下の複数のテーブルに図示されるように動作する。
【表１】
2015191659.tif 000003
【０１４３】
言い換えると、ベクトル長フィールド１５５９Ｂは、最大の長さおよび１または複数のより短い長さから選択し、これらのより短い長さのそれぞれは先行する長さの半分であり、ベクトル長フィールド１５５９Ｂを有していない命令テンプレートは、最大のベクトル長で動作する。更には一実施形態において、特定のベクトルフレンドリな命令フォーマット１６００におけるクラスＢの複数の命令テンプレートは、パックドまたはスカラー単精度／倍精度浮動小数点データ、および、パックドまたはスカラー整数データ、で動作する。複数のスカラー演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタにおける最低位のデータ要素位置で実行される複数のオペレーションである。より高位の複数のデータ要素位置は、その命令に先だってそれらのデータがあったのと同じままとされるか、実施形態に応じてゼロに設定される。
【０１４４】
書込みマスクレジスタ１７１５−例示の実施形態では、８個の書込みマスクレジスタ（ｋ０からｋ７）があり、それぞれ６４ビットのサイズである。代替的な実施形態では、書込みマスクレジスタ１７１５は、１６ビットのサイズである。先述したように本発明の一実施形態において、ベクトルマスクレジスタｋ０は、書込みマスクとして使用することはできず、通常はｋ０を示す符号化が書込みマスクのために用いられる場合には、配線接続された０ｘＦＦＦＦの書込みマスクを選択し、その命令に対する書込みマスクを効果的に無効化する。
【０１４５】
複数の汎用レジスタ１７２５−例示の実施形態では、メモリオペランドのアドレスを指定するための既存のｘ８６アドレス指定モードと共に用いられる、１６個の６４ビット汎用レジスタがある。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰおよびＲ８からＲ１５という名称で参照される。
【０１４６】
スカラー浮動小数点スタックレジスタファイル（x87スタック）１７４５では、ＭＭＸパックド整数フラットレジスタファイル１７５０が、その上でエイリアスされる。例示の実施形態では、ｘ８７スタックは、ｘ８７命令セット拡張を用いて、３２／６４／８０ビットの浮動小数点データにおけるスカラー浮動小数点演算を実行するために用いられる８つの要素のスタックであり、その一方で、複数のＭＭＸレジスタは、複数のＭＭＸおよびＸＭＭレジスタの間で実行されるいくつかの演算のための複数のオペランドを保持するだけでなく６４ビットのパックド整数データにける複数の演算を実行するために用いられる。
【０１４７】
本発明の代替の実施形態では、より広範な、或いは、より限定した複数のレジスタを使用してもよい。加えて、本発明の代替の実施形態では、より多くの、より少ない、または異なった、複数のレジスタファイルまたは複数のレジスタを使用してもよい。
【０１４８】
例示的な複数のコアアーキテクチャ、複数のプロセッサ、および複数のコンピューターアーキテクチャ  複数のプロセッサコアは、異なる方法、異なる目的で、異なるプロセッサに実装されてよい。例えば、そのような複数コアの実装は、１）汎用計算用の汎用インオーダコア、２）汎用計算用の高性能汎用アウトオブオーダコア、３）グラフィックスおよび／または科学（スループット）計算を主に意図された特殊目的コアを有してよい。異なるプロセッサの実装は、１）汎用計算用の１または複数の汎用インオーダコア、および／または、汎用計算用の１または複数の汎用アウトオブオーダコアを含むＣＰＵ、および、２）グラフィックスおよび／または科学（スループット）計算を主に意図した１または複数の特殊目的コアを含むコプロセッサ、を有してよい。そのような異なる複数のプロセッサは、異なるコンピュータシステムアーキテクチャへとつながり、そうしたアーキテクチャは、１）ＣＰＵから分離したチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内の別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そうしたコプロセッサは、時折、統合化されたグラフィックスおよび／または科学（スループット）ロジック等の特殊目的ロジックとして参照される）、および、４）同じダイ上に上述のＣＰＵ（時折、１または複数のアプリケーションコア、１または複数のアプリケーションプロセッサとして参照される）、上述のコプロセッサ、および追加の機能を有してよいチップ上のシステム、を備えてよい。例示的な複数のコアアーキテクチャが、例示的な複数のプロセッサおよび複数のコンピューターアーキテクチャの記載を伴って、次に記載される。
【０１４９】
例示的な複数のコアアーキテクチャ
インオーダおよびアウトオブオーダコアのブロック図
図１８Ａは、本発明の複数の実施形態における、インオーダパイプラインの典型例およびレジスタリネーミング・アウトオブオーダ発行／実行パイプラインの典型例の両方を例示するブロック図である。図１８Ｂは、本発明の複数の実施形態における、プロセッサに含まれるべき、インオーダコア・アーキテクチャの典型的な実施形態と、典型的なレジスタリネーミング・アウトオブオーダ発行／実行アーキテクチャコアとの両方を例示するブロック図である。図１８Ａ−Ｂの実線で囲まれた複数のボックスは、インオーダパイプラインおよびインオーダコアを例示し、一方で、オプショナルで追加される点線で囲まれた複数のボックスは、レジスタリネーミング・アウトオブオーダ発行／実行パイプラインおよびコアを例示する。インオーダの態様が、アウトオブオーダの態様のサブセットであることから、アウトオブオーダの態様が記述される。
【０１５０】
図１８Ａにおいて、プロセッサパイプライン１８００は、フェッチ段１８０２、符号長デコード段１８０４、デコード段１８０６、割り当て段１８０８、リネーム段１８１０、スケジューリング段１８１２（ディスパッチまたは発行としても知られる）、レジスタ読み出し／メモリ読み出し段１８１４、実行段１８１６、ライトバック／メモリ書込み段１８１８、例外処理段１８２２、およびコミット段１８２４を有する。
【０１５１】
図１８Ｂは、実行エンジンユニット１８５０に連結されたフロントエンド・ユニット１８３０を有するプロセッサコア１８９０を示し、両方がメモリユニット１８７０に連結される。コア１８９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、それらのハイブリッド、またはその他のタイプのコアであってよい。他のオプションとしては、コア１８９０は、例えば、ネットワークまたはコミュニケーションコア、圧縮エンジン、コプロセッサコア、汎用計算グラフィクス処理ユニット（ＧＰＧＰＵ）コア、グラフィックスコア、その同等物、等の特殊目的コアであってよい。
【０１５２】
フロントエンド・ユニット１８３０は、命令キャッシュユニット１８３４に連結された分岐予測ユニット１８３２を有し、当該キャッシュユニットは命令トランスレーション・ルックアサイド・バッファ（ＴＬＢ）１８３６に連結され、当該バッファは命令取出しユニット１８３８に連結され、当該ユニットはデコードユニット１８４０に連結される。デコードユニット１８４０（またはデコーダ）は、複数の命令をデコードし、出力として１または複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、その他の命令、またはその他の制御信号を生成してよく、これらはオリジナルの命令からデコードされるか、複数のオリジナル命令を反映しているか、或いは、複数のオリジナル命令から導出される。デコードユニット１８４０は、様々な異なるメカニズムを用いて実装されてよい。複数の適したメカニズムの複数の例としては、これに限定されるわけではないが、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラム可能ロジックアレイ（ＰＬＡ）、複数のマイクロコード読み出し専用メモリ（ＲＯＭ）などである。一実施形態において、コア１８９０は、マイクロコードＲＯＭ、または、特定のマクロ命令のためのマイクロコードを格納する他の媒体を（デコードユニット１８４０内、またはフロントエンド・ユニット１８３０の内部に）有する。デコードユニット１８４０は、実行エンジンユニット１８５０においてリネーム／アロケータユニット１８５２に連結される。
【０１５３】
実行エンジンユニット１８５０は、リタイアメントユニット１８５４に連結されたリネーム／アロケータユニット１８５２と、１セットの１または複数のスケジューラユニット１８５６とを有する。１または複数のスケジューラユニット１８５６は、 あらゆる個数の異なるスケジューラを表し、予約ステーション、中央命令窓などを含む。１または複数のスケジューラユニット１８５６は、１または複数の物理レジスタファイル・ユニット１８５８に連結される。複数の物理レジスタファイルユニット１８５８のそれぞれが、１または複数の物理レジスタファイルを表し、それらのファイルのうちの異なるいくつかは、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行されるべき次の命令のアドレスである命令ポインタ）等の、１または複数の異なるデータ型を格納する。一実施形態において、物理レジスタファイルユニット１８５８は、ベクトルレジスタユニット、書込みマスクレジスタユニットおよびスカラーレジスタユニットを備える。これらの複数のレジスタユニットは、複数のアーキテクチャベクトルレジスタ、複数のベクトルマスクレジスタ、および複数の汎用レジスタを提供してよい。１または複数の物理レジスタファイルユニット１８５８はリタイアメントユニット１８５４によって一部が重複して様々な方法を例示し、それらの方法では、レジスタリネーミングおよびアウトオブオーダ実行が実装されてよい（例えば、１または複数のリオーダ・バッファおよびリタイアレジスタファイルを用いる。１または複数のフューチャーファイル、ヒストリーファイル、およびリタイアレジスタファイルを用いる。レジスタマップと複数レジスタのプールを用いる、等）。リタイアメントユニット１８５４および１または複数の物理レジスタファイルユニット１８５８が、１または複数の実行クラスタ１８６０に連結される。１または複数の実行クラスタ１８６０は、１セットの１または複数の実行ユニット１８６２、および、１セットの１または複数のメモリアクセスユニット１８６４を有する。複数の実行ユニット１８６２は、様々なオペレーションを実行してよく（例えば、シフト、加算、減算、乗算）、かつ様々なデータ型（例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）で実行してよい。いくつかの実施形態では、特定機能専用のまたは複数機能のセットに専用の多数の実行ユニットを備えてよいが、他の実施形態では、実行ユニットを１つだけ備えてもよく、または、全ての機能を実行するマルチ実行ユニットを備えてもよい。スケジューラユニット１８５６、物理レジスタファイルユニット１８５８、および実行クラスタ１８６０が、場合によっては複数であり得るものとして示される。なぜなら、特定の実施形態では、特定の複数のデータ型／複数のオペレーションのための別個の複数のパイプラインを生成する（例えば、スカラー整数パイプライン、スカラー浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプラインおよび／またはメモリアクセスパイプライン等であり、それぞれが自身のスケジューラユニ��ト、１または複数の物理レジスタファイルユニットおよび／または実行クラスタを有する。そして、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみが１または複数のメモリアクセスユニット１８６４を有するような特定の複数の実施形態が実装される）。個別の複数パイプラインが用いられるにあたり、これらの１または複数のパイプラインは、アウトオブオーダ発行／実行であり、残りがインオーダであってよいことも理解されるべきである。
【０１５４】
複数のメモリアクセスユニット１８６４のセットはメモリユニット１８７０に連結され、当該ユニットは、レベル２（Ｌ２）キャッシュユニット１８７６に連結されたデータキャッシュユニット１８７４に連結されたデータＴＬＢユニット１８７２を有する。例示的な１つの実施形態において、複数のメモリアクセスユニット１８６４は、ロードユニット、格納アドレスユニット、および格納データユニットを備え、その各々がメモリユニット１８７０において、データＴＬＢユニット１８７２に連結される。命令キャッシュユニット１８３４は、メモリユニット１８７０において、さらにレベル２（Ｌ２）キャッシュユニット１８７６に連結される。Ｌ２キャッシュユニット１８７６は１または複数のその他のレベルのキャッシュに連結され、最終的にはメインメモリに連結される。
【０１５５】
例として、例示的なレジスタリネーミング・アウトオウブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン１８００を実装してよい。
１）命令フェッチ１８３８がフェッチ段１８０２と符号長デコード段１８０４とを実行する。
２）デコードユニット１８４０がデコード段１８０６を実行する。
３）リネーム／アロケータユニット１８５２が、割り当て段１８０８とリネーム段１８１０とを実行する。
４）１または複数のスケジューラユニット１８５６が、スケジュール段１８１２を実行する。
５）１または複数の物理レジスタファイルユニット１８５８およびメモリユニット１８７０が、レジスタ読み出し／メモリ読み出し段１８１４を実行し、実行クラスタ１８６０が実行段１８１６を実行する。
６）メモリユニット１８７０および１または複数の物理レジスタファイルユニット１８５８が、ライトバック／メモリ書込み段１８１８を実行する。
７）様々なユニットが例外処理段１８２２に含まれてよい。
８）リタイアメントユニット１８５４および１または複数の物理レジスタファイルユニット１８５８が、コミット段１８２４を実行する。
【０１５６】
コア１８９０は、１または複数の命令セット（例えば、Ｘ８６命令セット（新規のバージョンが追加されたいくつかの拡張と共に）、カリフォルニア州サニーベールのＭＩＰＳテクノロジーにおけるＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セット（ＮＥＯＮ等のオプショナルな追加拡張と共に）など）をサポートしてよく、ここで記載された１または複数の命令を含んでよい。一実施形態において、コア１８９０はパックデータ命令セット拡張（ＡＶＸ１、ＡＶＸ２など）をサポートするロジックを有し、それによって、多数のマルチメディアアプリケーションによって使用される複数のオペレーションがパックドデータを用いて実行されることを許容する。
【０１５７】
このコアは、マルチスレッド（２又はそれ以上の並列のオペレーションやスレッドのセットを実行する）をサポートしてよく、そして様々なやり方でその実行をサポートしてもよいことが理解されるべきであり、その方法としては、タイム・スライス・マルチスレッド、同時マルチスレッド（物理コアが同時にマルチスレッドを行うように、単一の物理コアが複数スレッドのそれぞれに対して論理コアを提供する）、またはその組み合せ（例えば、インテル（登録商標）のハイパースレッド技術のように、タイム・スライスでフェッチし、デコードし、その後、同時マルチスレッドを行う）を含んでよい。
【０１５８】
レジスタリネーミングはアウトオブオーダ実行のコンテキストで記載されるものであるが、レジスタリネーミングがインオーダアーキテクチャで用いられてもよいことが理解されるべきである。例示されたプロセッサの実施形態では、別個の命令キャッシュユニット１８３４、データキャッシュユニット１８７４、および共有レベル２キャッシュユニット１８７６を有しているが、代替の複数の実施形態では、例えばレベル１（Ｌ１）内部キャッシュまたはマルチレベルの内部キャッシュ等の、命令とデータの両方のための単一の内部キャッシュを有してもよい。いくつかの実施形態においてシステムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせ、を有してよい。或いは、全てのキャッシュが、コアおよび／またはプロセッサの外部にあってもよい。
【０１５９】
特定の例示的なインオーダコアアーキテクチャ
図１９Ａ、Ｂは、インオーダコアアーキテクチャのより具体的な例のブロック図を示し、そのコアは、１つのチップにおけるいくつかのロジックブロック（同じタイプのおよび／または異なるタイプの他の複数コアを含む）の１つでありうる。複数のロジックブロックは、アプリケーションに応じて、何らかの固定機能ロジック、複数のメモリＩ／Ｏインターフェースおよび他の必要なＩ／Ｏロジックと共に、高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を介して通信する。
【０１６０】
図１９Ａは、本発明の複数の実施形態における、オンダイ相互接続ネットワーク１９０２への接続およびレベル２（Ｌ２）キャッシュ１９０４のローカルサブセットと共に、単一のプロセッサコアのブロック図を示す。一実施形態において、命令デコーダ１９００は、パックデータ命令セット拡張と共に、ｘ８６命令セットをサポートする。Ｌ１キャッシュ１９０６は、低レイテンシアクセスで、スカラーユニットおよびベクトルユニットへとメモリをキャッシュすることを許容する。（設計を単純化した）一実施形態において、スカラーユニット１９０８およびベクトルユニット１９１０が別個の複数のレジスタセット（それぞれ、複数のスカラーレジスタ１９１２および複数のベクトルレジスタ１９１４）を使用し、これらの間で転送されるデータはメモリに書込まれ、そして、レベル１（Ｌ１）キャッシュ１９０６から再度読み出されるが、本発明の複数の代替の実施形態においては、異なるアプローチを用いてもよい（例えば、単一のレジスタセットを用いる、または、２つのレジスタファイル間で書込み・再度読み出しをすることなく、データが転送されることを許容する通信パスを備える、など）。
【０１６１】
Ｌ２キャッシュ１９０４のローカルサブセットは、１プロセッサコアにつき別個の複数のローカルサブセットへと分割される、グローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ１９０４における自身のローカルサブセットへの直接のアクセスパスを有する。プロセッサコアに読み取られるデータは、そのＬ２キャッシュのサブセット１９０４に格納され、かつ、自身のローカルＬ２キャッシュの複数のサブセットにアクセスする他の複数のプロセッサコアと並行して素早くアクセスされることが可能である。プロセッサコアに書き込まれるデータは、その自身のＬ２キャッシュのサブセット１９０４に格納され、必要に応じて、他の複数のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを保証する。リングネットワークは、双方向的であり、複数のプロセッサコア、複数のＬ２キャッシュおよび他の複数のロジックブロック等のエージェントが、チップ内で互いに通信することを可能とする。各リングデータパスは、１方向当たり１０１２ビット幅である。
【０１６２】
図１９Ｂは、本発明の実施形態における図１９Ａのプロセッサコアの部分の拡張図である。図１９Ｂは、Ｌ１キャッシュ１９０４のＬ１データキャッシュ１９０６Ａ部分だけでなく、ベクトルユニット１９１０およびベクトルレジスタ１９１４に関して、より詳細を有する。具体的には、ベクトルユニット１９１０は、１６−ワイド・ベクトル処理ユニット（ＶＰＵ）であり（１６−ワイドＡＬＵ１９２８を参照）、このユニットは、整数命令、単精度浮動小数命令および倍精度浮動小数命令の１つまたは複数を実行する。ＶＰＵは、メモリ入力において、スウィズルユニット１９２０による複数のレジスタ入力のスウィズル、数字変換ユニット１９２２Ａ−Ｂによる数字変換、および、複製ユニット１９２４による複製をサポートする。複数の書込みマスクレジスタ１９２６は、結果としてのベクトル書き込みをプレディケートすることを許容する。
【０１６３】
統合メモリコントローラおよびグラフィックスを備えたプロセッサ  図２０は、本発明の実施形態におけるプロセッサ２０００のブロック図であって、１より多くのコアを有してよく、統合メモリコントローラを有してよく、集積化されたグラフィックスを有してよい。図２０において実線で囲まれた複数のボックスは、単一のコア２００２Ａを有するプロセッサ２０００、システムエージェント２０１０、１セットの１または複数のバスコントローラユニット２０１６を例示し、一方で、オプショナルで追加される点線で囲まれた複数のボックスは、マルチコア２００２Ａ−Ｎを有する代替のプロセッサ２０００、システムエージェントユニット２０１０における１セットの１または複数の統合メモリコントローラユニット２０１４、および特殊目的ロジック２００８を例示する。
【０１６４】
したがって、プロセッサ２０００の異なる複数の実装としては、１）統合化されたグラフィックおよび／または科学（スループット）ロジックである特殊目的ロジック２００８を有する１つのＣＰＵ（このロジックは１または複数のコアを含んでよい）、および、１または複数の汎用コア２００２Ａ−Ｎである複数コア２００２Ａ−Ｎ（例えば、複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、これら２つの組み合わせ）、２）グラフィックスおよび／または科学（スループット）を主目的とした多数の特殊目的コアである複数コア２００２Ａ−Ｎを有する１つのコプロセッサ、および、３）多数の汎用インオーダコアである複数コア２００２Ａ−Ｎを有する１つのコプロセッサ、を備えてよい。したがって、プロセッサ２０００は、例えばネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用グラフィクス処理ユニット）、高スループット多数統合コア（ＭＩＣ）コプロセッサ（３０またはそれよりも多くのコアを含む）、組込みプロセッサ、またはその同等物等の、汎用プロセッサ、コプロセッサ、または特殊目的プロセッサであってよい。プロセッサは、１または複数のチップに実装されてよい。プロセッサ２０００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳまたはＮＭＯＳ等の多くのプロセス技術のいずれを用いた１または複数の基板の一部であってよく、および／または、１または複数の基板に実装されてよい。
【０１６５】
メモリ階層は、複数のコア内における１または複数のキャッシュレベル、１セットのまたは１若しくは複数の共有キャッシュユニット２００６、および、1セットの複数の統合メモリコントローラユニット２０１４に連結された外部メモリ（不図示）を有する。複数の共有キャッシュユニット２００６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）または他のキャッシュレベル等の１または複数の中レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、および／またはこれらの組み合わせを、有してよい。一実施形態において、リングベース相互接続部２０１２は、統合グラフィックスロジック２００８、複数の共有キャッシュユニット２００６のセット、および、システムエージェントユニット２０１０／１または複数の統合メモリコントロールユニット２０１４を相互接続するが、代替の複数の実施形態では、これらのユニットを相互接続するために周知の技法をいくつ用いてもよい。一実施形態では、１または複数のキャッシュユニット２００６とコア２００２Ａ−Ｎとの間で、コヒーレンシが維持される。
【０１６６】
いくつかの実施形態では、コア２００２Ａ−Ｎのうちの１つまたは複数が、マルチスレッドを行うことができる。システムエージェント２０１０は、コア２００２Ａ−Ｎを調整し操作する複数のコンポーネントを有する。システムエージェントユニット２０１０は、例えば、電力制御ユニット（ＰＣＵ）とディスプレイユニットとを有してよい。ＰＣＵは、コア２００２Ａ−Ｎおよび統合グラフィックスロジック２００８の電力状態を調整するための必要なロジックおよびコンポーネントであってよく、または、それらのロジックおよびコンポーネントを有してもよい。ディスプレイユニットは、１または複数の外部接続されたディスプレイを駆動するためのものである。
【０１６７】
コア２００２Ａ−Ｎは、アーキテクチャ命令セットに関して同種（ホモジニアス）または異種（ヘテロジニアス）であってよい。即ち、コア２００２Ａ−Ｎの２又はそれ以上が同じ命令セットを実行することができ、その一方で、他のコアは、その命令セットのサブセットまたは異なる命令セットだけを実行することができてよい。
【０１６８】
例示的な複数のコンピューターアーキテクチャ  図２１−２４は、例示的な複数のコンピューターアーキテクチャの複数のブロック図である。ラップトップ、デスクトップ、ハンドヘルド型ＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組込みプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、および、様々なその他の電子デバイスのための技術において知られている他の複数のシステム設計および複数の構成もまた適する。一般的には、本明細書で開示されたようなプロセッサおよび／または他の実行ロジックを組み込むことが可能な、非常に多様なシステムまたは電子デバイスが、概して適する。
【０１６９】
ここで図２１を参照すると、本発明の一実施形態におけるシステム２１００のブロック図が示される。システム２１００は、１または複数のプロセッサ２１１０、２１１５を備えてよく、これらはコントローラハブ２１２０に連結される。一実施形態においてコントローラハブ２１２０は、グラフィックメモリコントローラハブ（ＧＭＣＨ）２１９０と、入出力ハブ（ＩＯＨ）２１５０を有し（これらは別のチップに搭載されてよい）、ＧＭＣＨ２１９０は、メモリ２１４０およびコプロセッサ２１４５が連結されたメモリおよびグラフィクスコントローラを含み、ＩＯＨ２１５０は、入出力（Ｉ／Ｏ）デバイス２１６０をＧＭＣＨ２１９０と連結する。或いは、メモリおよびグラフィクスコントローラの１つまたは両方がプロセッサ内で統合され（本明細書で記載されるように）、メモリ２１４０とコプロセッサ２１４５がプロセッサ２１１０に直接連結され、かつ、単一のチップのコントローラハブ２１２０にＩＯＨ２１５０と共に連結される。
【０１７０】
複数の追加プロセッサ２１１５がオプショナルなものであることが、図２１では破線で示されている。プロセッサ２１１０、２１１５のそれぞれが、本明細書で記載される１または複数の処理コアを有してよく、プロセッサ２０００のあるバージョンであってよい。
【０１７１】
メモリ２１４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、位相変化メモリ（ＰＣＭ）、またはこの２つの組み合わせであってよい。少なくとも１つの実施形態では、コントローラハブ２１２０が、フロントサイドバス（ＦＳＢ）などのマルチドロップバス、クイックパス相互接続（ＱＰＩ）などのポイントツーポイントインターフェース、または、同様の接続２１９５を介して、１または複数のプロセッサ２１１０、２１１５と通信する。
【０１７２】
一実施形態においてコプロセッサ２１４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組込みプロセッサ、またはその同等物などの特殊目的プロセッサである。一実施形態において、コントローラハブ２１２０は、統合化グラフィックアクセラレータを有してよい。
【０１７３】
アーキテクチャ特性、マイクロアーキテクチャ特性、温度特性、電力消費特などを含んだ性能指標の範囲に関して、物理的なリソース２１１０、２１１５の間には、様々な違いがあり得る。
【０１７４】
一実施形態において、プロセッサ２１１０は、一般的なタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令が複数の命令の内部に埋め込まれてよい。プロセッサ２１１０は、これらのコプロセッサ命令を、取り付けられたコプロセッサ２１４５によって実行されるべきタイプのものとして認識する。従って、プロセッサ２１１０は、コプロセッサバスまたは他の相互接続において、これらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）を、コプロセッサ２１４５へと発行する。１または複数のコプロセッサ２１４５は、受信した複数のコプロセッサ命令を受け付け、そして実行する。
【０１７５】
ここで図２２を参照すると、本発明の実施形態に従う、第１のより具体的な例示的システム２２００のブロック図が示される。図２２に示されるように、マルチプロセッサシステム２２００は、ポイントツーポイント相互接続システムであって、ポイントツーポイント相互接続２２５０を介して連結された第１のプロセッサ２２７０と第２のプロセッサ２２８０とを含む。プロセッサ２２７０および２２８０のそれぞれは、プロセッサ２０００のあるバージョンであってよい。本発明の一実施形態において、プロセッサ２２７０および２２８０は、それぞれ、プロセッサ２１１０および２１１５であり、その一方で、コプロセッサ２２３８はコプロセッサ２１４５である。他の実施形態では、プロセッサ２２７０および２２８０はそれぞれ、プロセッサ２１１０およびコプロセッサ２１４５である。
【０１７６】
プロセッサ２２７０および２２８０は、統合メモリコントローラ（ＩＭＣ）ユニット２２７２および２２８２をそれぞれ含むように示されている。プロセッサ２２７０は、また、その複数のバスコントローラユニットの一部としてポイントツーポイント（Ｐ−Ｐ）インターフェース２２７６および２２７８を有し、同様に、第２のプロセッサ２２８０は、Ｐ−Ｐインターフェース２２８６および２２８８を有する。プロセッサ２２７０、２２８０は、Ｐ−Ｐインターフェース回路２２７８、２２８８を用いて、ポイントツーポイント（Ｐ−Ｐ）インターフェース２２５０を介して、情報を交換してよい。図２２に示されるように、ＩＭＣ２２７２および２２８２は、プロセッサを各メモリ、即ち、メモリ２２３２およびメモリ２２３４へと連結し、これらのメモリは、ローカルに複数のプロセッサへと取り付けられたメインメモリにおける複数の部分であってよい。
【０１７７】
プロセッサ２２７０、２２８０は、Ｐ−Ｐインターフェース回路２２７６、２２９４、２２８６、２２９８を用いて、Ｐ−Ｐインターフェース２２５２、２２５４を介して、チップセット２２９０と情報をそれぞれ交換してよい。チップセット２２９０は、高性能インターフェース２２３９を介して、コプロセッサ２２３８と、任意選択的に情報を交換してよい。一実施形態では、コプロセッサ２２３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組込みプロセッサ、またはその同等物などの特殊目的プロセッサである。
【０１７８】
共有キャッシュ（不図示）は、プロセッサに含まれてもよく、または両プロセッサの外にあってもよく、であるにもかかわらずＰ−Ｐ相互接続を介してプロセッサと接続されてよく、これにより、もし１つのプロセッサが低電力モードになった場合には、一方または両方のプロセッサのローカルキャッシュの情報が共有キャッシュに格納されてよい。
【０１７９】
チップセット２２９０は、インターフェース２２９６を介して第１バス２２１６へ連結されてよい。本発明はこれには限定されないが、一実施形態において、第１バス２２１６はペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、ＰＣＩエクスプレスバスなどのバス、或いは、他の第３世代Ｉ／Ｏ相互接続バスであってよい。
【０１８０】
図２２に示されるように、様々な複数のＩ／Ｏデバイス２２１４がバスブリッジ２２１８と共に第１バス２２１６に連結されてよく、当該バスブリッジは第１バス２２１６を第２バス２２２０へ連結する。一実施形態において、複数のコプロセッサ、複数のハイスループットＭＩＣプロセッサ、複数のＧＰＧＰＵ、複数のアクセラレータ（複数のグラフィックアクセラレータや複数のデジタルシグナル処理（ＤＳＰ）ユニットなど）、複数のフィールドプログラマブルゲートアレイ、または他のプロセッサなどの１または複数の追加のプロセッサ２２１５が、第１バス２２１６に連結される。一実施形態において、第２バス２２２０は、低ピンカウント（ＬＰＣ）バスであってよい。様々なデバイスが第２バス２２２０に連結されてよく、一実施形態では、そのようなデバイスとしては、例えば、キーボードおよび／またはマウス２２２２、複数の通信デバイス２２２７、および、命令／コードおよびデータ２２３０を備えてよいディスクドライブまたは他の大容量ストレージデバイス等の記憶ユニット２２２８、を含む。更には、オーディオＩ／Ｏ２２２４が、第２バス２２２０に連結されてよい。他の複数のアーキテクチャが可能であることに留意されたい。例えば、システムは、図２２のポイントツーポイントアーキテクチャではなく、マルチドロップバスや他のそのようなアーキテクチャを実装してもよい。
【０１８１】
ここで図２３を参照すると、本発明の実施形態に従う、第２のより具体的な例示的システム２３００のブロック図が示される。図２２および２３と同じ要素には同様の参照番号を有し、図２３における他の様態が分かりにくくなるのを避けるために、図２２における所定の態様が図２３から省略されている。図２３は、プロセッサ２２７０、２２８０が、それぞれ、統合化されたメモリおよびＩ／Ｏ制御ロジック（ＣＬ）２２７２、２２８２を有してよいことを例示する。従って、ＣＬ２２７２、２２８２は、複数の統合メモリコントローラユニットおよびＩ／Ｏ制御ロジックを有する。
【０１８２】
図２３は、メモリ２２３２、２２３４がＣＬ２２７２、２２８２に連結されるだけでなく、複数のＩ／Ｏデバイス２３１４もまた制御ロジック２２７２、２２８２に連結されることを、例示する。複数のレガシーＩ／Ｏデバイス２３１５がチップセット２２９０に連結される。
【０１８３】
ここで図２４を参照すると、本発明の実施形態に従う、ＳｏＣ２４００のブロック図が示される。図２０と類似の要素は、同じ参照番号を有する。また点線で囲まれた複数のボックスは、より上級版のＳｏＣにおける、任意選択的な特徴である。図２４において、１または複数の相互接続ユニット２４０２が、１セットの１または複数のコア２０２Ａ−Ｎおよび１または複数のキャッシュユニット２００６を有するアプリケーションプロセッサ２４１０；システムエージェントユニット２０１０；１または複数のバスコントローラユニッ２０１６；１または複数の統合メモリコントローラユニット２０１４；統合グラフィックスロジック、イメージプロセッサ、オーディオプロセッサおよびビデオプロセッサを有してよい１セットのまたは１若しくは複数のコプロセッサ２４２０；スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット２４３０；ダイレクトメモリアクセス（ＤＭＡ）ユニット２４３２；および１または複数の外部のディスプレイへ結合するためのディスプレイユニット２４４０、に連結される。一実施形態において、１または複数のコプロセッサ２４２０は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組込みプロセッサ、またはその同等物などの特殊目的プロセッサである。
【０１８４】
本明細書に開示される複数のメカニズムの複数の実施形態が、ハードウェア、ソフトウェア、ファームウェア、または、そのような実装アプローチの組み合わせで、実装されてよい。本発明の複数の実施形態が、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性メモリおよび／または記憶要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備えたプログラム可能なシステムで実行される複数のコンピュータプログラムまたはプログラムコードとして実装されてよい。
【０１８５】
本明細書に記載された複数の機能を実行し、そして出力情報を生成するために、図２２に図示されたコード２２３０のようなプログラムコードが、入力命令へ適用されてよい。出力情報は周知のやり方で１または複数の出力デバイスへ適用されてよい。この適用のために、処理システムは、例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、特殊目的集積回路（ＡＳＩＣ）またはマイクロプロセッサなどのプロセッサを有する任意のシステムを備えてよい。
【０１８６】
プログラムコードは、処理システムとの通信を行うべく、高水準の手続型またはオブジェクト指向型のプログラミング言語で実装されてよい。プログラムコードは、また、要求に応じてアセンブリ言語またはマシン言語で実装されてよい。実際に、ここで記載されるメカニズムは、その範囲に関して、いかなる特定のプログラミング言語にも限定されない。いずれの場合であっても、言語はコンパイラ型またはインタプリタ型の言語であってよい。
【０１８７】
少なくとも１つの実施形態における１または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的な命令により実装されてよく、機械によって読み取られると、ここに記載された複数の技術を実行させるべく機械にロジックを組み上げさせる。ＩＰコアとして知られるそのようなリプレゼンテーションは有形の機械可読媒体に格納され、実際にロジックまたはプロセッサを作る製造機械へと搭載すべく、様々なカスタマーまたは製造施設へ供給されてよい。
【０１８８】
そのような機械可読格納媒体は、これに限定されるわけではないが、機械またはデバイスによって製造または形成された品物の非一時的な有形の配列を有してよく、ハードディスクや、フロッピー（登録商標）ディスク、光ディスク、リードオンリコンパクトディスクメモリ（ＣＤ−ＲＯＭ）、書換可能なコンパクトディスク（ＣＤ−ＲＷ）、光磁気ディスクを含む他のディスクタイプ、そして、読み取専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）やスタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、フラッシュメモリ、電気消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、位相変化メモリ（ＰＣＭ）、磁気または光カードなどの半導体デバイスや、電子的な命令を格納するのに適したその他の媒体、を有してよい。
【０１８９】
従って、また本発明の実施形態によると、非一時的で有形の機械可読媒体は、複数の命令を含み、またはハードウェア記述言語（ＨＤＬ）のような設計データを含み、これにより、ここで記載された構造、回路、装置、プロセッサおよび／またはシステムの特徴を定義する。そのような実施形態はまた、プログラム製品として参照されてよい。
【０１９０】
エミュレーション（バイナリ変換、コードモーフィングなどを含む)  場合によっては、ソース命令セットからの命令をターゲット命令セットへと変換すべく、命令コンバータが用いられよい。例えば、命令コンバータは、（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて）、１の命令を、コアによって処理されるべき１または複数の命令へと、翻訳、モーフィング、エミュレートまたは変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装されてよい。命令コンバータは、プロセッサ上にあってもなくてもよく、或いは、一部がプロセッサにあり一部がプロセッサになくてもよい。
【０１９１】
図２５は、本発明の複数の実施形態における、ソース命令セット中の複数のバイナリ命令を、ターゲット命令セット中の複数のバイナリ命令へと変換するためのソフトウエア命令コンバータの使用を対比したブロック図である。代替的には、命令コンバータはソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてよいが、例示された実施形態では、命令コンバータはソフトウエア命令コンバータである。図２５は、高水準言語２５０２によるプログラムを示しており、Ｘ８６バイナリコード２５０６を生成すべくＸ８６コンパイラ２５０４を用いてコンパイルされてよく、Ｘ８６バイナリコード２５０６は、少なくとも１つのＸ８６命令セットコアを有するプロセッサ２５１６によってネイティブで実行される。少なくとも１つのＸ８６命令セットコアを有するプロセッサ２５１６は、少なくとも１つのＸ８６命令セットコアを有するインテルプロセッサと実質的に同じ複数の機能を実行できる全てのプロセッサを表しており、これらの同じ機能は、１）インテルＸ８６命令セットコアの命令セットの実質的な一部、または２）少なくとも１つのＸ８６命令セットコアを有するインテルプロセッサと実質的に同じ結果をもたらすべく、少なくとも１つのＸ８６命令セットコアを有するインテルプロセッサで実行することをターゲットとした、アプリケーションのオブジェクトコードバージョンまたは他のソフトウェア、を互換的に実行または処理することによって、実行できる。ｘ８６コンパイラ２５０４は、Ｘ８６バイナリコード２５０６（例えば、オブジェクトコード）を生成することが可能なコンパイラを表しており、このバイナリコードは、追加の結合処理を用いて、または用いずに、少なくとも１つのｘ８６命令セットコアを有するプロセッサ２５１６上で実行されうる。同様に、図２５は、高水準言語２５０２によるプログラムを示しており、代替の命令セットバイナリコード２５１０を生成すべく代替の命令セットコンパイラ２５０８を用いてコンパイルされてよく、バイナリコード２５１０は、少なくとも１つのＸ８６命令セットコアを有さないプロセッサ２５１４によってネイティブで実行される（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーにおけるＭＩＰＳ命令セットを実行する、および／または、カリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セットを実行する、複数のコアを備えるプロセッサ）。命令コンバータ２５１２は、Ｘ８６バイナリコード２５０６を、Ｘ８６命令セットコアを有さないプロセッサ２５１４によってネイティブ実行されうるコードへと変換するために用いられる。この変換後のコードは、代替の命令セットバイナリコード２５１０と同じではない可能性が高い。なぜならば、これができるような命令コンバータを作成することは難しいからである。しかしながら変換後のコードは、一般的なオペレーションを達成し、代替の命令セットからの命令によって作られうる。従って、命令コンバータ２５１２は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表し、これらは、エミュレーション、シミュレーションまたはその他のプロセスを通じて、Ｘ８６命令セットプロセッサまたはコアを有さないプロセッサや他の電子デバイスが、ｘ８６バイナリコード２５０６を実行することを許容する。
【０１９２】
図３−４に記載された複数のコンポーネント、複数の特徴および複数の詳細は、また図１−２において、任意選択的に用いられてよい。図６−１３に記載された複数のコンポーネント、複数の特徴および複数の詳細は、また、図１または５において、任意選択的に用いられてよい。さらには、本明細書で記載されたいずれかの装置のための複数のコンポーネント、複数の特徴および複数の詳細は、また、本明細書で記載されたいずれかの方法において、任意選択的に用いられてよく、および／または適用されてよく、それらの方法は、複数の実施形態において、そうした装置によっておよび／または装置と共に実行されてよい。本明細書で記載されたどの複数のプロセッサが、本明細書で開示されたどのコンピュータシステムまたは他のシステムに含まれてもよい。いくつかの実施形態において、複数の命令は、本明細書で開示された複数の命令フォーマットにおける複数の特徴や複数の詳細を有してよいが、これは必須ではない。
【０１９３】
詳細な説明と請求項において、「連結される」および／または「接続される」という用語は、それらの派生的な意味を伴って、用いられていたかもしれない。これらの用語は、互いに同義語としては意図されていない。むしろ、複数の実施形態において、「接続され」とは、互いに２又はそれ以上の要素が直接に物理的および／または電気的に接触した状態にあることを示すために用いられてよい。「連結され」とは、２又はそれ以上の要素が、互いに、直接に物理的および／または電気的に接触した状態にあることを意味してよい。しかしながら、「連結され」とは、また、２又はそれ以上の要素が、互いに直接的には接触はしていないが、なおも、互いに協力し、または相互作用することを意味してよい。例えば、実行ユニットは、１または複数の介在コンポーネントを通じて、レジスタおよび／またはデコードユニットに連結されてよい。図中、矢印は、接続および連結を示すのに用いられる。
【０１９４】
「および／または」という用語が用いられていたかもしれない。本明細書で用いられるように、「および／または」という用語は、１つまたは他の１つまたはその両方を意味する（例えば、Ａおよび／またはＢとは、Ａ、Ｂ、または、ＡかつＢを意味する。）
【０１９５】
上記の説明において、実施形態の深い理解を提供するために、特定の複数の詳細が説明された。しかしながら、これらの特定の詳細のいくつかを有することなく、他の複数の実施形態が実施されてよい。本発明の範囲は、上記で提供された特定の実施例によって決定されるものではなく、下記の特許請求の範囲によってのみ決定されるべきである。他の複数の例において、説明の理解が分かりにくくしなるのを避けるために、周知の回路、構造、デバイス、およびオペレーションは、ブロック図の形態でおよび／または詳細を省いて示された。適切であると考えられる場合には、対応または類似する要素であることを示すために、参照符号または参照符号の末端部が複数の図面に渡って繰り返され、これらは、その旨が規定されるかまたはそうではないことが明らかな場合以外は、類似のまたは同一の特性を任意選択に有してよい。
【０１９６】
特定のオペレーションは、ハードウェア構成要素により実行されてよく、または機械実行可能また回路実行可能な命令に具現化されてもよく、これらの命令は、命令と共にプログラムされた機械構成要素、回路構成要素、またはハードウェア構成要素（例えば、プロセッサ、プロセッサの一部、回路など）に、オペレーションを実行させ、および／または、オペレーションを実行するという結果をもたらす。オペレーションは、また任意選択的に、ハードウェアとソフトウェアとの組み合わせによって実行されてよい。プロセッサ、機械、回路、またはハードウェアは、具体的または特定の回路を備えてよく、他のロジック（ハードウェアは、潜在的に、ファームウェアおよび／またはソフトウェアと組み合される）は、命令を実行および／または処理可能であり、かつ、命令に応答して結果を格納可能である。
【０１９７】
いくつかの実施形態では、機械可読媒体を含んだ製品（例えば、コンピュータプログラム製品）を有する。媒体は、機械により読み取り可能な形態で情報を提供し、例えば、格納するメカニズムを有してよい。機械可読媒体は、命令または命令列を提供、または媒体上に格納していてよく、これらの命令は、機械によって実行された場合および／または実行された時に、当該機械に本明細書で開示された１または複数のオペレーション、方法または技術を実行させ、および／または、実行させるという結果をもたらす。機械可読媒体は、本明細書で開示された命令の実施形態の１つまたは複数を、格納または提供してよい。
【０１９８】
いくつかの実施形態において機械可読媒体は、有形のおよび／または非一時的な機械可読記憶媒体を含んでよい。例えば、有形のおよび／または非一時的な機械可読記憶媒体は、フロッピー（登録商標）・ディスケット、光学ストレージ媒体、光ディスク、光データ記憶デバイス、ＣＤ−ＲＯＭ、磁気ディスク、光磁気ディスク、読み出し専用メモリ（ＲＯＭ）、プログラム可能ＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、位相変化メモリ、位相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶デバイス、非一時的メモリ、非一時的データ記憶デバイス、またはその同等物を、含んでよい。非一時的機械可読記憶媒体は、一時的に伝播された信号からは構成されない。
【０１９９】
適した機械の例は、これらに限られるわけではないが、汎用プロセッサ、特殊目的プロセッサ、命令処理装置、デジタルロジック回路、集積回路などを含む。さらに、適した機械の他の例は、コンピューティングデバイスまたは、プロセッサ、命令処理装置、デジタルロジック回路もしくは集積回路を含む他の電子デバイスを有する。そのようなコンピューティングデバイスおよび電子デバイスの例は、これらに限られるわけではないが、デスクトップ型コンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス（例えば、ルータおよびスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、メディアプレイヤ、スマートテレビ、ネットトップ、セットトップボックス、およびビデオゲームコントローラを含む。
【０２００】
本明細書を通じ、例えば「一つの実施形態」「実施形態」「１または複数の実施形態」「いくつかの実施形態」として参照した場合には、必ずしもそうであることが必要ではないが、本発明の実施のための特定の特徴が含まれてよいことを示している。同様に、詳細な説明では、開示を合理化し様々な発明の態様の理解を手助けする目的で、様々な特徴が、時には、単一の実施形態、図、またはそれらの記載において一緒にグループ化される。しかしながら、こうした方法での開示だからといって、本発明が各請求項に明示的に記載された内容よりも多くの特徴を必要とする意図を示したものとして解釈されるべきではない。むしろ、以下の請求項が示すように、発明の態様は、単一の開示された実施形態に含まれる全ての特徴よりも少ない特徴にある。従って、発明を実施するための形態の後に続く請求項は、これにより、各請求項はそれ自身を本発明の別個の実施形態として主張しつつ、明示的に発明を実施するための形態へと組み込まれる。
【０２０１】
例示的な複数の実施形態  以下の複数の例は、さらなる実施形態に関する。複数例における詳細は、１または複数の実施形態のどこで用いられてもい。
【０２０２】
例１は、複数のパックドデータレジスタと、命令をデコードするデコードユニットとを有するプロセッサである。上記命令は、少なくとも４つのデータ要素の第１のセットを有する第１のソースパックドデータを示し、少なくとも４つのデータ要素の第２のセットを有する第２のソースパックドデータを示し、かつ行き先格納位置を示す。実行ユニットは、上記の複数のパックドデータレジスタおよび上記のデコードユニットに結合される。実行ユニットは、上記命令に応答して結果パックドデータを上記行き先格納位置に格納する。上記結果パックドデータは、少なくとも４つのインデックスを有する。上記複数のインデックスは、上記第１および第２のソースパックドデータにおける対応する複数のデータ要素位置を特定する。上記複数のインデックスは、上記第１および第２のソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す上記結果パックドデータにおける複数の位置に格納される。
【０２０３】
例２は、例１のプロセッサを備えており、上記実行ユニットは、上記第１および第２のソースパックドデータのそれぞれにおいて、上記複数のインデックスのそれぞれが対応するデータ要素位置を特定する結果パックドデータを格納する。また、実行ユニットは上記命令に応答して少なくとも４つのマスク要素を有する結果マスクを格納し、この結果マスクにおいて、各マスク要素は上記複数のインデックスの異なる１つに対応する。また、各マスク要素は上記対応するインデックスに対する上記データ要素位置が上記第１のソースパックドデータにあるか、または上記第２のソースパックドデータにあるかを示す。
【０２０４】
例３は、例２のプロセッサを備え、さらに結果マスクを格納するマスクレジスタを備える。上記命令は、パックドデータオペレーションをプレディケートする叙述オペランドとして結果マスクを示すことができる第２の命令を有する命令セットに含まれる。
【０２０５】
例４は、例１のプロセッサを備え、上記実行ユニットは、上記結果パックドデータを格納し、この結果パックドデータにおける上記複数のインデックスのそれぞれが、上記第１および第２のソースパックドデータのうちの１つにおいて、対応する単一のデータ要素を特定する。
【０２０６】
例５は、例１から４のいずれかに記載のプロセッサを備え、上記実行ユニットは、上記命令に応答して、第２の結果パックドデータを、上記命令によって示される第２の行き先格納位置に格納する。上記第２の結果パックドデータは、上記ソートされた順序を反映した上記第２の結果パックドデータの複数の位置に格納された上記複数のインデックスに対応する上記第１および第２のソースパックドデータからの上記複数のデータ要素を有する。
【０２０７】
例６は、例１から４のいずれかに記載のプロセッサを備え、上記デコードユニットは、上記命令に対してソートされた順序となっていると仮定される上記少なくとも４つのデータ要素を含む上記第１のソースパックドデータを示し、かつ上記命令に対してソートされた順序となっていると仮定される前記少なくとも４つのデータ要素を含む上記第２のソースパックドデータを示す命令、をデコードする。
【０２０８】
例７は、例１から４のいずれかに記載のプロセッサを備え、上記デコードユニットは、上記命令に対してソートされた順序となっていないと仮定される上記少なくとも４つのデータ要素を含む上記第１のソースパックドデータを示し、かつ上記命令に対してソートされた順序となっていないと仮定される前記少なくとも４つのデータ要素を含む上記第２のソースパックドデータを示す命令、をデコードする。
【０２０９】
例８は、例１から４のいずれかに記載のプロセッサを備え、上記実行ユニットは上記結果パックドデータを格納し、この結果パックドデータにおいて、上記複数のインデックスが、上記第１および第２のソースパックドデータの上記複数のデータ要素の全てにおける最小の半分を含む上記対応する複数のデータ要素の上記ソートされた順序を表す上記複数の位置に、格納される。
【０２１０】
例９は、例１から４のいずれかに記載のプロセッサを備え、上記実行ユニットは、上記結果パックドデータを格納し、この結果パックドデータにおいて、上記複数のインデックスが、上記第１および第２のソースパックドデータの上記複数のデータ要素の全てにおける最大の半分を含む上記対応する複数のデータ要素の前記ソートされた順序を表す上記複数の位置に、格納される。
【０２１１】
例１０は、例１から４のいずれかに記載のプロセッサを備え、上記デコードユニットは、それぞれが３２ビットおよび６４ビットの一方を有する少なくとも８つのデータ要素を含む上記第１のソースパックドデータを示す上記命令を、デコードする。
【０２１２】
例１１は、命令を受信する段階を備えるプロセッサにおける方法である。上記命令が、少なくとも４つのデータ要素の第１のセットを有する第１のソースパックドデータを示し、少なくとも４つのデータ要素の第２のセットを有する第２のソースパックドデータを示し、かつ行き先格納位置を示す。上記命令に応答して結果パックドデータを上記行き先格納位置に格納する。上記結果パックドデータは少なくとも４つのインデックスを有する。上記複数のインデックスは、上記第１および第２のソースパックドデータにおける対応する複数のデータ要素位置を特定する。上記複数のインデックスは、上記第１および第２のソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す上記結果パックドデータにおける複数の位置に格納される。
【０２１３】
例１２は、例１１の方法を備え、受信する段階が、上記少なくとも４つのデータ要素をソートされた順序で有する上記第１のソースパックドデータを示す上記命令を受信する段階を有する。
【０２１４】
例１３は、例１１または１２の方法を備え、上記結果パックドデータを格納する段階は、結果パックドデータを格納する段階を有し、当該段階において、上記複数のインデックスのそれぞれが、上記第１および第２のソースパックドデータのうちの１つにおいて、対応する単一のデータ要素を特定する。
【０２１５】
例１４は、複数のパックドデータレジスタと、命令をデコードするデコードユニットとを有するプロセッサである。上記命令は、ソートされた順序ではない少なくとも４つのデータ要素を有するソースパックドデータを示し、かつ行き先格納位置を示す。実行ユニットが、上記複数のパックドデータレジスタおよび上記デコードユニットに結合される。上記実行ユニットは、上記命令に応答して結果パックドデータを上記行き先格納位置に格納する。上記結果パックドデータは少なくとも４つのインデックスを有する。上記複数のインデックスは、上記ソースパックドデータにおける対応する複数のデータ要素を特定する。上記複数のインデックスは、上記ソースパックドデータにおいて上記対応する複数のデータ要素の上記ソートされた順序を表す上記結果パックドデータにおける複数の位置に格納される。
【０２１６】
例１５は、例１４のプロセッサを備え、上記実行ユニットは、上記命令に応答して、第２の結果パックドデータを、上記命令によって示される第２の行き先格納位置に格納し、上記第２の結果パックドデータは、上記ソートされた順序を反映した上記第２の結果パックドデータの複数の位置に格納された前記対応する複数のデータ要素を有する。
【０２１７】
例１６は、例１４または１５のプロセッサを備え、上記結果パックドデータは、上記ソースパックドデータにおける全てのデータ要素に対応する複数のインデックスを有する。
【０２１８】
例１７は、例１４または１５のプロセッサを備え、上記デコードユニットは、それぞれが３２ビットおよび６４ビットの一方を有する少なくとも８つのデータ要素を含む上記ソースパックドデータを示す上記命令を、デコードする。
【０２１９】
例１８は、命令を受信する段階を備えたるプロセッサにおける方法であり、上記命令は、ソートされた順序ではない少なくとも４つのデータ要素を有するソースパックドデータを示し、かつ行き先格納位置を示す。
上記命令に応答して上記行き先格納位置に、結果パックドデータを格納する。上記結果パックドデータは少なくとも４つのインデックスを有する。上記複数のインデックスは、上記ソースパックドデータにおける対応する複数のデータ要素を特定する。上記複数のインデックスは、上記ソースパックドデータにおいて前記対応する複数のデータ要素の前記ソートされた順序を表す前記結果パックドデータにおける複数の位置に格納される。
【０２２０】
例１９は、例１８の方法を備え、上記命令によって示される第２の行き先格納位置に第２の結果パックドデータを格納する段階を更に備え、上記第２の結果パックドデータは、上記ソートされた順序を反映した複数の位置に格納された上記対応する複数のデータ要素を有する。
【０２２１】
例２０は例１８または１９の方法を備え、受信する段階は、それぞれが３２ビットおよび６４ビットの一方を有する少なくとも８つのデータ要素を含む上記ソースパックドデータを示す上記命令を受信する段階を有し、格納する段階は、上記ソースパックドデータにおける全てのデータ要素に対応する複数のインデックスを有する上記結果パックドデータを格納する段階を有する。
【０２２２】
例２１は、相互接続と、この相互接続に結合されたプロセッサとを有する、複数の命令を処理するシステムである。上記プロセッサは命令を受信し、上記命令は、少なくとも４つのデータ要素の第１のセットを有する第１のソースパックドデータを示し、少なくとも４つのデータ要素の第２のセットを有する第２のソースパックドデータを示し、かつ宛先レジスタを示す。上記プロセッサは、上記命令に応答して、結果パックドデータを上記宛先レジスタに格納する。上記結果パックドデータは少なくとも４つのインデックスを有する。上記複数のインデックスは、上記第１および第２のソースパックドデータにおける対応する複数のデータ要素位置を特定する。上記複数のインデックスは、上記第１および第２のソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す上記結果パックドデータにおける複数の位置に格納される。ダイナミックランダムアクセスメモリ（ＤＲＡＭ）が、上記相互接続に結合される。上記ＤＲＡＭは、データをソートすべく上記結果パックドデータの上記複数のインデックスを使用するためのアルゴリズムを任意選択的に格納する。
【０２２３】
例２２は、例２１のシステムを備え、上記プロセッサは、結果パックドデータを格納し、この結果パックドデータにおける上記複数のインデックスのそれぞれが、上記第１および第２のソースパックドデータのうちの１つにおいて、上記対応する単一のデータ要素を特定する。
【０２２４】
例２３は、非一時的機械可読記憶媒体を備えた製造品であり、この非一時的機械可読記憶媒体は命令を格納する。上記命令は少なくとも４つのデータ要素の第１のセットを有する第１のソースパックドデータを示し、少なくとも４つのデータ要素の第２のセットを有する第２のソースパックドデータを示し、かつ行き先格納位置を示す。上記命令は機械に実行されると上記機械に複数のオペレーションを実行させ、上記複数のオペレーションは、上記命令に応答して結果パックドデータを上記行き先格納位置に格納する段階を備える。上記結果パックドデータは少なくとも４つのインデックスを有する。上記複数のインデックスは、上記第１および第２のソースパックドデータにおける対応する複数のデータ要素位置を特定する。上記複数のインデックスは、上記第１および第２のソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す上記結果パックドデータにおける複数の位置に格納される。
【０２２５】
例２４は、例２３の製造品を備え、上記命令は、上記少なくとも４つのデータ要素をソートされた順序で有する上記第１のソースパックドデータを示す。
【０２２６】
例２５は、例１１から１３のいずれか１つに記載された方法を実行するための手段を備えた、プロセッサまたは他の装置である。
【０２２７】
例２６は、例１１から１３のいずれか１つに記載された方法を実行するための、モジュール、ユニット、ロジック、回路、手段、またはこれらの任意の組み合せを備えた、プロセッサまたは他の装置である。
【０２２８】
例２７は、機械可読媒体を備える製造品であり、任意選択的に、機械可読媒体は、プロセッサ、コンピュータシステム、またはその他の機械によって実行された場合および／または時に、当該機械に、例１１から１３のいずれか１つの方法を実行させる命令を提供する非一時的機械可読記憶媒体であってよい。
【０２２９】
例２８は、相互接続と、この相互接続に連結されたプロセッサと、この相互接続に連結された少なくとも１つのコンポーネントとを備えたコンピュータシステムまたは他の電子デバイスであり、上記コンポーネントは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、グラフィックスチップ、無線通信チップ、位相変化メモリ、ビデオカメラから選択され、上記コンピュータシステムまたは他の電子デバイスは、例１１から１３のいずれか１つの方法を実行可能である。
【０２３０】
例２９は、例１８から２０のいずれか１つの方法を実行するための手段を備えた、プロセッサまたは他の装置である。
【０２３１】
例３０は、例１８から２０のいずれか１つに記載された方法を実行するための、モジュール、ユニット、ロジック、回路、手段、またはこれらの任意の組み合せを備えた、プロセッサまたは他の装置である。
【０２３２】
例３１は、機械可読媒体を備える製造品であり、任意選択的に、機械可読媒体は、プロセッサ、コンピュータシステム、またはその他の機械によって実行された場合および／または時に、当該機械に、例１８から２０のいずれか１つの方法を実行させる命令を提供する非一時的機械可読記憶媒体であってよい。
【０２３３】
例３２は、相互接続と、この相互接続に連結されたプロセッサと、この相互接続に連結された少なくとも１つのコンポーネントとを備えたコンピュータシステムまたは他の電子デバイスであり、上記コンポーネントは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、グラフィックスチップ、無線通信チップ、位相変化メモリ、ビデオカメラから選択され、上記コンピュータシステムまたは他の電子デバイスは、例１８から２０のいずれか１つの方法を実行可能である。
【０２３４】
例３３は、本明細書に実質的に記載された、１または複数のオペレーションまたはあらゆる方法を実行可能な、プロセッサまたは他の装置である。
【０２３５】
例３４は、本明細書に実質的に記載された、１または複数のオペレーションまたはあらゆる方法を実行するための手段を備えた、プロセッサまたは他の装置である。
【０２３６】
例３５は、本明細書に実質的に記載されたあらゆる命令を実行する、プロセッサまたは他の装置である。
【０２３７】
例３６は、本明細書に実質的に記載されたあらゆる命令を実行するための手段を備えた、プロセッサまたは他の装置である。
【０２３８】
例３７は、第１の命令を変換する有する方法を備え、この命令は、本明細書で実質的に開示された命令のいずれであってもよく、また第１の命令セットからの命令であってよく、上記第１の命令は第２の命令セットにおける１または複数の命令へと変換される。上記方法は、また、プロセッサ上で、上記第２の命令セットにおける１または複数の命令を、デコードし実行する段階を有する。上記実行する段階は、宛先に結果を格納する段階を有する。上記結果は、第１の命令のために本明細書で実質的に開示された複数の結果のうちのいずれを有してもよい。
【０２３９】
例３８は、第１の命令セットにおける複数の命令をデコード可能なデコードユニットを有するプロセッサまたは他の装置を備える。上記デコードユニットは、第１の命令をエミュレートする１または複数の命令を受信し、この第１の命令は、本明細書で実質的に開示された複数の命令のうちのいずれであってもよく、また、第２の命令セットからの命令である。上記プロセッサまたは他の装置は、また、上記第１の命令セットにおける１または複数の命令を実行するために、上記デコードユニットに連結された１または複数の実行ユニットを有する。１または複数の実行ユニットは、第１の命令セットにおける１または複数の命令に応答して、宛先に結果を格納することが可能である。この結果は、第１の命令のために本明細書で実質的に開示された複数の結果のうちのいずれを有してもよい。
【０２４０】
例３９は、第１の命令セットの命令をデコード可能なデコードユニットを含み、かつ、１または複数の実行ユニットを含むプロセッサを有するコンピュータシステムまたは他の電子デバイスを備える。コンピュータシステムは、また、上記プロセッサに連結された記憶デバイスを有する。上記記憶デバイスは第１の命令を格納し、この第１の命令は、本明細書で実質的に開示された複数の命令のうちのいずれであってもよく、また、第２の命令セットからの命令である。上記記憶デバイスは、また、上記第１の命令を、第１の命令セットにおける１または複数の命令へと変換するための複数の命令を格納する。第１の命令セットにおける１または複数の命令は、プロセッサによって実行されると、当該プロセッサに、宛先に結果を格納させるように動作可能である。この結果は、第１の命令のために本明細書で実質的に開示された複数の結果のうちのいずれを有してもよい。
【図１】
2015191659.tif 000004
【図２】
2015191659.tif 000005
【図３】
2015191659.tif 000006
【図４】
2015191659.tif 000007
【図５】
2015191659.tif 000008
【図６】
2015191659.tif 000009
【図７】
2015191659.tif 000010
【図８】
2015191659.tif 000011
【図９】
2015191659.tif 000012
【図１０】
2015191659.tif 000013
【図１１】
2015191659.tif 000014
【図１２】
2015191659.tif 000015
【図１３】
2015191659.tif 000016
【図１４】
2015191659.tif 000017
【図１５Ａ】
2015191659.tif 000018
【図１５Ｂ】
2015191659.tif 000019
【図１６Ａ】
2015191659.tif 000020
【図１６Ｂ】
2015191659.tif 000021
【図１６Ｃ】
2015191659.tif 000022
【図１６Ｄ】
2015191659.tif 000023
【図１７】
2015191659.tif 000024
【図１８Ａ】
2015191659.tif 000025
【図１８Ｂ】
2015191659.tif 000026
【図１９Ａ】
2015191659.tif 000027
【図１９Ｂ】
2015191659.tif 000028
【図２０】
2015191659.tif 000029
【図２１】
2015191659.tif 000030
【図２２】
2015191659.tif 000031
【図２３】
2015191659.tif 000032
【図２４】
2015191659.tif 000033
【図２５】
2015191659.tif 000034
【外国語明細書】
2015191659000001.pdf