(57)【要約】  一実施形態によれば、プロセッサは、第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算を実行するための第１の命令を受信するための命令デコーダを有し、この第１の命令は、複数の奇数ワードを格納するための第１のストレージロケーションに関連した第１のオペランド、複数の偶数ワードを格納するための第２のストレージロケーションに関連した第２のオペランド、および第３のオペランドを有する。プロセッサは、第１の命令に応答して、第３のオペランドによって示される第３のストレージロケーションから得られる第１のローテート値を用いて複数の奇数ワードおよび複数の偶数ワードに基づいた複数の第１のＳＫＥＩＮ２５６ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行するべく、ならびに、第１のオペランドによって新奇数ワードを第１のストレージロケーション示に格納するべく、命令デコーダに連結する第１の実行部をさらに有する。
2015532477.tif 000002
【特許請求の範囲】
【請求項１】
複数の第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算を実行するための第１の命令を受信するための命令デコーダと、
前記命令デコーダに連結した第１の実行部とを備え、
前記第１の命令は、
複数の奇数ワードを格納するべく第１のストレージロケーションに関連付けられた第１のオペランドと、
複数の偶数ワードを格納するべく第２のストレージロケーションに関連付けられた第２のオペランドと、
第３のオペランドとを有し、
前記第１の実行部は、
前記第１の命令に応答して、前記第３のオペランドによって示された第３のストレージロケーションから得られた第１のローテート値を用いて、前記複数の奇数ワードおよび前記複数の偶数ワードに基づいた前記複数の第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行すること、ならびに、
前記第１のオペランドによって示される前記第１のストレージロケーションに複数の新奇数ワードを格納することを行う、プロセッサ。
【請求項２】
前記第１のオペランドおよび前記第２のオペランドは、複数の１２８ビットレジスタである、請求項１に記載のプロセッサ。
【請求項３】
前記第１のオペランドは、ソースとして、ワード１を上位６４ビットに、ワード３を下位６４ビットに格納する、請求項２に記載のプロセッサ。
【請求項４】
前記第２のオペランドは、ソースとして、ワード０を上位６４ビットに、ワード２を下位６４ビットに格納する、請求項２に記載のプロセッサ。
【請求項５】
前記第１のオペランドは、デスティネーションとして、新ワード３を上位６４ビットに格納し、新ワード１を下位６４ビットに格納する、請求項２に記載のプロセッサ。
【請求項６】
第４のオペランド、第５のオペランド、第６のオペランドを有する第２の命令に応答して、前記第６のオペランドによって示される第６のストレージロケーションから得た第２のローテート値を用いて、前記第４のオペランドによって示される第４のストレージロケーションから得た前記複数の偶数ワードと前記第５のオペランドによって示された第５のストレージロケーションから得た前記複数の奇数ワードに基づいて複数の第２のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行すること、ならびに、
前記第４のストレージロケーションに複数の新偶数ワードを格納すること、
を行うべく、前記命令デコーダに連結する第２の実行部を、さらに備える、請求項１に記載のプロセッサ。
【請求項７】
前記第４のオペランドおよび前記第５のオペランドは１２８ビットレジスタであり、デスティネーションとして、前記第４のオペランドは新ワード０を上位６４ビットに格納し、新ワード２を下位６４ビットに格納する、請求項６に記載のプロセッサ。
【請求項８】
複数の奇数ワードを格納するべく第１のストレージロケーションに関連付けられた第１のオペランド、複数の偶数ワードを格納するべく第２のストレージロケーションに関連付けられた第２のオペランド、および第３のオペランドを有する、複数の第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算を実行するための第１の命令を、プロセッサの命令デコーダによって受信する段階と、
前記第１の命令に応答して、前記第３のオペランドによって示される第３のストレージロケーションから得た第１のローテート値を用い、前記複数の奇数ワードおよび前記複数の偶数ワードに基づいて、前記複数の第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を前記プロセッサの第１の実行部によって実行し、ならびに、前記第１のオペランドによって示される前記第１のストレージロケーションに複数の新奇数ワードを格納する段階と、を備える方法。
【請求項９】
前記第１のオペランドおよび前記第２のオペランドは、複数の１２８ビットレジスタである、請求項８に記載の方法。
【請求項１０】
前記第１のオペランドは、ソースとして、ワード１を上位６４ビットに格納し、ワード３を下位６４ビットに格納する、請求項９に記載の方法。
【請求項１１】
前記第２のオペランドは、ソースとして、ワード０を上位６４ビットに格納し、ワード２を下位６４ビットに格納する、請求項９に記載の方法。
【請求項１２】
前記第１のオペランドは、デスティネーションとして、新ワード３を上位６４ビットに格納し、新ワード１を下位６４ビットに格納する、請求項９に記載の方法。
【請求項１３】
前記プロセッサの第２の実行部によって、第４のオペランド、第５のオペランド、および第６のオペランドを有する第２の命令に応答して、前記第６のオペランドによって示された第６のストレージロケーションから得た第２のローテート値を用い、第４のオペランドによって示された第４のストレージロケーションから得た前記複数の偶数ワードと前記第５のオペランドによって示された第５のストレージロケーションから得た前記複数の奇数ワードとに基づいて、複数の第２のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を、実行する段階、および
前記第４のストレージロケーションに複数の新偶数ワードを格納する段階と、をさらに備える、請求項８に記載の方法。
【請求項１４】
前記第４のオペランドおよび前記第５のオペランドは１２８ビットレジスタであり、デスティネーションとして、前記第４のオペランドは新ワード０を上位６４ビットに格納し、新ワード２を下位６４ビットに格納する、請求項１３に記載の方法。
【請求項１５】
インターコネクトと、
前記インターコネクトに連結したダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、
前記インターコネクトに連結したプロセッサとを備え、
前記プロセッサは、
複数の第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算を実行するための第１の命令を受信するための命令デコーダと、
前記命令デコーダに連結した第１の実行部とを備え、
前記第１の命令は、
複数の奇数ワードを格納するべく第１のストレージロケーションに関連付けられた第１のオペランドと、
複数の偶数ワードを格納するべく第２のストレージロケーションに関連付けられた第２のオペランドと、
第３のオペランドとを有し、
前記第１の実行部は、
前記第１の命令に応答して、前記第３のオペランドによって示された第３のストレージロケーションから得られた第１のローテート値を用いて、前記複数の奇数ワードおよび前記複数の偶数ワードに基づいた前記複数の第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行すること、ならびに、
前記第１のオペランドによって示される前記第１のストレージロケーションに複数の新奇数ワードを格納することを行う、データプロセッシングシステム。
【請求項１６】
前記第１のオペランドおよび前記第２のオペランドは、１２８ビットレジスタである、請求項１５に記載のシステム。
【請求項１７】
前記第１のオペランドは、ソースとして、ワード１を上位６４ビットに格納し、ワード３を下位６４ビットに格納する、請求項１６に記載のシステム。
【請求項１８】
前記第２のオペランドは、ソースとして、ワード０を上位６４ビットに格納し、ワード２を下位６４ビットに格納する、請求項１６に記載のシステム。
【請求項１９】
前記第１のオペランドは、デスティネーションとして、新ワード３を上位６４ビットに格納し、新ワード１を下位６４ビットに格納する、請求項１６に記載のシステム。
【請求項２０】
前記プロセッサは、
第４のオペランド、第５のオペランド、第６のオペランドを有する第２の命令に応答して、前記第６のオペランドによって示される第６のストレージロケーションから得た第２のローテート値を用いて、前記第４のオペランドによって示される第４のストレージロケーションから得た前記複数の偶数ワードと前記第５のオペランドによって示された第５のストレージロケーションから得た前記複数の奇数ワードに基づいて複数の第２のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行すること、ならびに、
前記第４のストレージロケーションに新たな複数の偶数ワードを格納すること、
を行うべく、前記命令デコーダに連結する第２の実行部を、さらに備える、請求項１５に記載のシステム。
【請求項２１】
前記第４のオペランドおよび前記第５のオペランドは１２８ビットレジスタであり、デスティネーションとして、前記第４のオペランドは新ワード０を上位６４ビットに格納し、新ワード２を下位６４ビットに格納する、請求項２０に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の複数の実施形態は、概して、複数の命令処理装置に関する。より具体的には、本発明の複数の実施形態は、複数のＳＫＥＩＮ２５６  ＳＨＡ３セキュアハッシングアルゴリズムを処理するための命令処理装置に関する。
【背景技術】
【０００２】
暗号ハッシュ関数は、暗号化の主力であり、どこにでも見られる。もともとはデジタル署名をより効率的にするために生成され、それらは今や私達の情報インフラの非常に基礎的な部分をセキュアするべく、すなわち、パスワードのログイン、セキュアなＷｅｂ接続、暗号鍵管理、ウイルスおよびマルウェアスキャン、ならびに現在用いられているほぼすべての暗号化プロトコルにおいて、用いられている。ハッシュ関数がなければ、インターネットは、簡単に動作しないと思われる。
【０００３】
ＳＫＥＩＮアルゴリズムは、ＳＨＡ３として特定された新しいセキュアなハッシュ規格に関するＮＩＳＴ選択として、主要な選択肢になっている。ＳＫＥＩＮは、（１）ＭＩＸ、（２）ＰＥＲＭＵＴＥ、および（３）副鍵加算という３つの主要な関数から構成される。ＭＩＸ関数は、３種類の数学的演算、すなわち、図１Ａに示されるように、一組の６４ビットワードに対する（１）ＸＯＲ、（２）ローテート、および（３）伝搬加算を利用する。図１Ａを参照すると、各ＭＩＸ関数は２つの６４ビット入力Ｘ０およびＸ１を加算することで、結果（例えば、Ｙ０）の第１の６４ビットが生成され、第２の入力のローテートバージョンによる加算結果のＸＯＲにより、結果（例えばＹ１）の第２の６４ビットが生成される。ＭＩＸ関数は、１２８ビット幅であり、ＳＫＥＩＮ２５６の１回のラウンド処理（ｒｏｕｎｄ）ごとに２つのＭＩＸ関数、ＳＫＥＩＮ５１２の１回のラウンド処理ごとに４つのＭＩＸ関数、およびＳＫＥＩＮ１０２４の１回のラウンド処理ごとに８つのＭＩＸ関数を必要とする。
【０００４】
ＳＫＥＩＮアルゴリズムのラウンド処理、２５６、５１２、または１０２４ビットにわたるＭＩＸ関数であり、６４ビットワードのＰＥＲＭＵＴＥが後に続く。図１Ｂは、ＳＫＥＩＮ２５６（例えば、Ｎｗ＝４）、ＳＫＥＩＮ５１２（例えば、Ｎｗ＝８）、およびＳＫＥＩＮ１０２４（例えば、Ｎｗ＝１６）に関する複数のＰＥＲＭＵＴＥを定義するテーブルを示す。ＭＩＸ／ＰＥＲＭＵＴＥの７２回ラウンド処理があり、図２に示されるように、副鍵加算が１回目のラウンド処理の前に行われ、その後、ラウンド処理を４回行うごとになされる。ＭＵＸ関数のローテーション値または量は、図３に示されるように、ラウンド処理８回ごとに繰り返される。さらに、ＳＫＥＩＮハッシュ関数に関するさらなる詳細な情報は、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．によって２００８年に公開された「Ｔｈｅ  Ｓｋｅｉｎ  Ｈａｓｈ  Ｆｕｎｃｔｉｏｎ  Ｆａｍｉｌｙ」と題する論文に見出される。
【図面の簡単な説明】
【０００５】
本発明の複数の実施形態は、例として示されるものであり、同様の参照番号は、添付した複数の図面にある複数の図にある同様の要素を示すものに限定されない。
【図１Ａ】ＳＫＥＩＮハッシュアルゴリズムの典型的な動作を示すブロック図である。
【図１Ｂ】ＳＫＥＩＮハッシュアルゴリズムの典型的な動作を示すブロック図である。
【図２】ＳＫＥＩＮハッシュアルゴリズムの典型的な動作を示すブロック図である。
【図３】ＳＫＥＩＮハッシュアルゴリズムの典型的な動作を示すブロック図である。
【図４】本発明の一実施形態に係るプロセッサまたはプロセッサコアの実行パイプラインのブロック図である。
【図５】本発明の特定の実施形態に係るＳＫＥＩＮ演算を示すブロック図である。
【図６】本発明の特定の実施形態に係るＳＫＥＩＮ演算を示すブロック図である。
【図７Ａ】本発明の特定の実施形態に係るＳＫＥＩＮ演算を示すブロック図である。
【図７Ｂ】本発明の特定の実施形態に係るＳＫＥＩＮ演算を示すブロック図である。
【図８】本発明の一実施形態に係る複数のＳＫＥＩＮ演算を実行するための方法を示すフロー図である。
【図９Ａ】本発明の一実施形態に係る、例示的なアドバンスドベクトル拡張（ＡＶＸ）命令フォーマットを示す。
【図９Ｂ】本発明の別の実施形態に係る、例示的なアドバンスドベクトル拡張（ＡＶＸ）命令フォーマットを示す。
【図９Ｃ】本発明の別の実施形態に係る、例示的なアドバンスドベクトル拡張（ＡＶＸ）命令フォーマットを示す。
【図１０Ａ】本発明の複数の実施形態に係る、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＡ命令テンプレートを示すブロック図である。
【図１０Ｂ】本発明の複数の実施形態に係る、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。
【図１１Ａ】本発明の一実施形態に係る、例示的な特有のベクトルフレンドリ命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。
【図１１Ｂ】本発明の別の実施形態に係る、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。
【図１１Ｃ】本発明の別の実施形態に係る、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。
【図１１Ｄ】本発明の別の実施形態に係る、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。
【図１２】本発明に一実施形態に係るレジスタアーキテクチャのブロック図である。
【図１３Ａ】本発明の複数の実施形態に係るアウトオブオーダ発行／実行パイプラインをレジスタリネーミングする、例示的なインオーダパイプラインおよび例示的なレジスタの両方を示すブロック図である。
【図１３Ｂ】本発明の複数の実施形態に係るプロセッサに含まれるべきアウトオブオーダ発行／実行アーキテクチャコアをリネービングする、例示的なインオーダアーキテクチャコアおよび例示的なレジスタリネーミングの両方を示すブロック図である。
【図１４Ａ】本発明の一実施形態に係るプロセッサコアのブロック図である。
【図１４Ｂ】本発明の別の実施形態に係るプロセッサコアのブロック図である。
【図１５】本発明の複数の実施形態に係るプロセッサのブロック図である。
【図１６】本発明の一実施形態に係るシステムのブロック図である。
【図１７】本発明の実施形態に係る、より具体的かつ例示的なシステムのブロック図である。
【図１８】本発明の別の実施形態に係る、より具体的かつ例示的なシステムのブロック図である。
【図１９】本発明の実施形態に係る、ＳｏＣのブロック図である。
【図２０】本発明の複数の実施形態に係る、ターゲット命令セット内の複数のバイナリ命令にソース命令セット内の複数のバイナリ命令を変換するためのソフトウェア命令変換部の使用を対比するブロック図である。
【発明を実施するための形態】
【０００６】
本発明の様々な実施形態および態様は、以下に述べる詳細に関連して説明され、添付した複数の図面は、様々な実施形態を例示する。以下の説明および図面は、本発明の例示であり、本発明を限定するものとして解釈されるべきではない。本発明の様々な実施形態を深く理解するべく、様々な具体的詳細を説明する。しかし、場合によっては、本発明の複数の実施形態の簡潔な説明を提供するためには、周知または従来の詳細が説明されていない。
【０００７】
「一実施形態」または「実施形態」に対する本明細書における言及は、その実施形態に関連して特有の機能、構造、または特性が本発明の少なくとも１つの実施形態に含まれ得ることを意味している。本明細書の各所における「一実施形態において」という文言の出現は、必ずしも全てが同じ実施形態を指しているわけではない。
【０００８】
いくつかの実施形態によれば、命令セットは、効率的に複数のＳＫＥＩＮ  ＭＩＸ−ＰＥＲＭＵＴＥ演算を処理するべく、定義される。各命令を実行して、ＳＫＥＩＮ演算（例えば、ＳＫＥＩＮ２５６、ＳＫＥＩＮ５１２、またはＳＫＥＩＮ１０２４）の複数のラウンド処理を行うことができる。本願全体にわたって、ＳＫＥＩＮ２５６は、本発明の複数の実施形態に鑑みて説明されている。しかし、その技術をＳＫＥＩＮ５１２およびＳＫＥＩＮ１０２４に対して等しく適用することができる。
【０００９】
図４は、本発明の一実施形態に係るプロセッサまたはプロセッサコアの実行パイプラインのブロック図である。図４を参照すると、プロセッサ１００は、任意の種類の命令処理装置を表してもよい。例えば、プロセッサ１００は汎用プロセッサであってもよい。プロセッサ１００は、もっぱら、様々な複合命令セットコンピューティング（ＣＩＳＣ）プロセッサ、様々な縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、様々な超長命令語（ＶＬＩＷ）プロセッサ、それらの様々なハイブリッド、または他のタイプのプロセッサのいずれかであってもよい。プロセッサ１００は、１または複数のプロセッサコアを表すものであってもよい。
【００１０】
複数のプロセッサコアは、複数の異なる方法で、複数の異なる目的で、さらに複数の異なるプロセッサに、実装されてもよい。例えば、そのような複数のコアの複数の実装として、（１）汎用コンピューティングを意図した汎用インオーダコア、（２）汎用コンピューティングを意図したハイパフォーマンス汎用アウトオブオーダコア、（３）グラフィクスおよび／またはサイエンス（スループット）コンピューティングを意図した特定用途向けコアを挙げることが可能である。複数の異なるプロセッサの複数の実装は、（１）汎用コンピューティングを意図した１または複数の汎用インオーダコアおよび／または汎用コンピューティングを意図した１または複数の汎用アウトオブオーダコアを含む中央処理装置（ＣＰＵ）と、（２）グラフィクスおよび／またはサイエンス（スループット）を主に意図した１または複数の特定用途向けコアを含むコプロセッサとを、備えてもよい。そのような複数の異なるプロセッサは、複数の異なるコンピュータシステムアーキテクチャをもたらし、それには、（１）ＣＰＵとは別のチップ上のコプロセッサと、（２）ＣＰＵとして同じパッケージ内の別個のダイ上のコプロセッサと、（３）ＣＰＵとして同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、しばしば、統合グラフィクスおよび／またはサイエンス（スループット）ロジックとして、または特定用途向けコアなどの、特定用途向けロジックと称される）と、（４）同じダイ上に上記ＣＰＵ（場合によっては、アプリケーションコア（複数可）もしくはアプリケーションプロセッサ（複数可）と称される）、上記コプロセッサ、および追加の機能性を有してもよいチップ上のシステムとを、挙げることが可能である。例示的なコアアーキテクチャを次に説明し、その後に例示的なプロセッサとコンピュータアーキテクチャとの説明を行う。
【００１１】
一実施形態において、プロセッサ１００は、限定されるものではないが、命令デコーダ１０１と、１または複数の実行部１０２とを備える。命令デコーダ１０１は、命令フェッチ部（不図示）からの複数の命令１０３を受信して復号化するものである。命令デコーダ１０１は、１または複数のマイクロ演算、マイクロコード、複数のエントリポイント、複数のマイクロ命令、複数の他の命令、またはこれらの命令を反映もしくはそれらから派生される他の制御信号を生成および出力することが可能である。命令デコーダ１０１は、様々な異なるメカニズムを用いて、実装されてもよい。複数の適したメカニズムの例として、限定されるものではないが、複数のリードオンリメモリ（ＲＯＭ）、複数のルックアップテーブル、複数のハードウェア実装プログラマブルロジックアレイ（ＰＬＡ）、およびその他が挙げられる。
【００１２】
実行部（複数可）１０２は、演算ロジック部、または命令に基づいて演算を実行可能な別のタイプのロジック部を有してもよい。命令を復号化する命令デコーダ１０１の結果として、実行部１０２は、１または複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、または該命令を反映もしくは該命令から派生される他の制御シグナル他の制御信号を受信してもよい。実行部１０２は、１または複数のソースオペランド（ＳＲＣ）を示している複数の命令の結果として、かつこれらの命令によって示されるレジスタセットの１または複数のデスティネーションオペランド（ＤＥＳＴ）の結果を格納するべく、動作可能である。実行部１０２は、複数の命令またはこれらの命令から派生される複数の他の制御信号を実行し、それに応じて演算を行うべく、動作可能である回路または他の実行ロジック（例えば、ハードウェアおよび／もしくはファームウェアと組み合わさったソフトウェア）を有してもよい。実行部１０２は、例えば、複数のロジック部、複数の演算ロジック部（ＡＬＵ）、複数の演算部、複数の整数部、その他の任意の種類の実行部を表してもよい。
【００１３】
ソースのいくつかまたは全てとデスティネーションオペランドとは、レジスタセットの複数のレジスタまたはメモリに格納されてもよい。レジスタセットは、考えられる他のレジスタ（例えばステータスレジスタ、フラグレジスタ、その他）と共に、レジスタファイルの一部であってもよい。レジスタは、データの格納に用いることが可能であるストレージロケーションまたはデバイスであってもよい。レジスタセットは、しばしば、実行部（複数可）を有するダイ上に、物理的に置かれる場合がある。レジスタは、プロセッサの外側から、またはプログラマの視点から見えてもよい。例えば、複数の命令は複数のレジスタに格納された複数のオペランドを特定してもよい。複数の異なるタイプのレジスタは、本明細書中に説明されるように、データを格納および提供可能である限り、適している。レジスタは、リネームされてもよく、されなくてもよい。複数の適したレジスタの例として、限定されるものではないが、複数の専用物理レジスタ、レジスタリネーミングを用いてダイナミックに割り当てられた複数の物理レジスタ、複数の専用物理レジスタとダイナミックに割り当てられた複数の物理レジスタとの組み合わせ、その他が挙げられる。あるいは、複数のソースオペランドおよび複数のデスティネーションオペランドのうちの１または複数がレジスタ以外のストレージロケーション、例えばシステムメモリ内のロケーションなどに、格納されてもよい。
【００１４】
一実施形態によれば、実行部１０２はさらに、１または複数のＳＫＥＩＮ部１０６を有する。このＳＫＥＩＮ部１０６は、単一命令多重データ（ＳＩＭＤ）命令に応答して複数のＳＫＥＩＮ  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行することができる。ＳＩＭＤデータは、複数のＳＫＥＩＮ状態、複数のワード入力、および１または複数のレジスタ１０４（例えば、少なくとも１２８ビットを有するレジスタ）に特化したローテーション値などのデータ１１０を用いて、命令デコーダ１０１により受信および提供される。一実施形態において、各々が少なくとも１２８ビットを有する一組のレジスタ（例えばレジスタ１０４）は、ＭＩＸ−ＰＥＲＭＵＴＥ演算の入力および／または出力を格納するために利用される。２５６ビットＳＫＥＩＮ状態は、少なくとも１２８ビットを有するレジスタペア、例えばＸＭＭレジスタに格納される。
【００１５】
ＳＫＥＩＮ２５６に関して、次のラウンド処理ではオペランドペア０，３および２、１に置き換えられるオペランドペア０、１、および２、３を有する４つの６４ビットオペランドが存在する。
【数１】
2015532477.tif 000003
ＳＫＥＩＮ２５６に関して、ワードのペアリングは、ラウンド処理２回ごとに反復する。奇数ラウンド処理１、３、５、７、・・・に関して、オペランド０および１は第１のＭＩＸ関数に関してペアを形成し、オペランド２および３は第２のＭＩＸ関数に関してペアを形成する。偶数ラウンド処理０、２、４、６、・・・に関して、図５に示されるように、オペランド０および３は第１のＭＩＸ関数に関してペアを形成し、オペランド２および１は第２のＭＩＸ関数に関してペアを形成する。図５を参照すると、一実施形態によれば、第１の１２８ビットＸＭＭレジスタ５０１は、２つの６４ビットワードを第１のオペランドとして格納し、第２の１２８ビットＸＭＭレジスタ５０２は別の２つの６４ビットワードを第２のオペランドとして格納する。第３のオペランドとしての即値バイト５０３は、ＭＩＸ関数のローテーション値を格納する。ＳＫＥＩＮ部１０６は、次のラウンド処理のための新ワード５０４を生成するべく、複数のＳＫＥＩＮ  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行するものである。一実施形態において、ワード１および３（例えば、奇数ワード（ｏｄｄ  ｗｏｒｄ））はＸＭＭレジスタ５０１に格納され、一方でワード０および２（例えば、複数の偶数ワード（ｅｖｅｎ  ｗｏｒｄ））はＸＭＭレジスタ５０３に格納される。オペランド５０３は、図１Ａのローテーション値Ｒｄ，ｉを表し、ここで、Ｒｄ，ｉは、図３に示されるように、表に基づいて決定される。
【００１６】
一実施形態によれば、奇数および偶数のＸＭＭレジスタのビット［１２７：６４］および奇数および偶数のＸＭＭレジスタのビット［６３：０］に基づいたＳＫＥＩＮ  ＭＩＸ関数の実行によって、４つの内部６４ビット値、すなわちｒｏｕｎｄｌ＿ｅｖｅｎ＿ｈｉｇｈ、ｒｏｕｎｄｌ＿ｏｄｄ＿ｈｉｇｈ、ｒｏｕｎｄｌ＿ｅｖｅｎ  ｌｏｗ、およびｒｏｕｎｄｌ＿ｏｄｄ  ｌｏｗを生成する。次に、第２の対のＭＩＸ関数は、ｒｏｕｎｄ１＿ｏｄｄ＿ｈｉｇｈによってｒｏｕｎｄ１＿ｅｖｅｎ＿ｌｏｗ上で、および、ｒｏｕｎｄ１＿ｏｄｄ＿ｌｏｗによってｒｏｕｎｄ１＿ｅｖｅｎ＿ｈｉｇｈ上で、実行され、４つの内部６４ビット値からなる第２の組、すなわちｒｏｕｎｄ２＿ｅｖｅｎ＿ｈｉｇｈ、ｒｏｕｎｄ２＿ｅｖｅｎ＿ｌｏｗ、およびｒｏｕｎｄ２＿ｏｄｄ＿ｌｏｗが生成される。このことは、図６に示されるように、ラウンド処理１の順列とラウンド処理２のＭＩＸ関数とを効果的に実行する。
【００１７】
一実施形態によれば、ＳＫＥＩＮ２５６に関して、複数のＳＫＥＩＮ  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理（例えば、ＳＫＥＩＮ２５６の２回のラウンド処理）を実行するべく、ＳＫＥＩＮ２５６＿ＯＤＤおよびＳＫＥＩＮ２５６＿ＥＶＥＮという２つの命令が定義される。命令ＳＫＥＩＮ２５６＿ＯＤＤは、複数のＳＫＥＩＮ  ＭＩＸ−ＰＥＲＭＵＴＥ演算の２回のラウンド処理の後に、奇数ワード（ｏｄｄ  ｗｏｒｄ）１および３の新たな値を生成する。命令ＳＫＥＩＮ２５６＿ＥＶＥＮは、複数のＳＫＥＩＮ  ＭＩＸ−ＰＥＲＭＵＴＥ演算の２回のラウンド処理の後に、偶数ワード（ｅｖｅｎ  ｗｏｒｄ）０および２の新たな値を生成する。
【００１８】
一実施形態において、図７Ａに示されるように、命令ＳＫＥＩＮ２５６＿ＯＤＤは、以下のように定義される。
【数２】
2015532477.tif 000004
ソースとして、ＸＭＭ１は以下のように定義される。
【数３】
2015532477.tif 000005
ソースとして、ＸＭＭ２は以下のように定義される。
【数４】
2015532477.tif 000006
即値バイトｉｍｍは、Ｒｄ，ｉを表すデスティネーションとして、新奇数ワード（ｎｅｗ  ｏｄｄ  ｗｏｒｄ）１および３を、以下のようにして、ＸＭＭ１によって示されるストレージロケーションに格納される。
【数５】
2015532477.tif 000007
一実施形態において、図７Ｂに示されるように、命令ＳＫＥＩＮ２５６＿ＥＶＥＮは以下のように定義される。
【数６】
2015532477.tif 000008
ソースとして、ＸＭＭ１は以下のように定義される。
【数７】
2015532477.tif 000009
ソースとして、ＸＭＭ２は以下のように定義される。
【数８】
2015532477.tif 000010
即値バイトｉｍｍは、Ｒｄ，ｉを表す。デスティネーションとして、以下のようにして、新奇数ワード０および２は、ＸＭＭ１によって示されるストレージロケーションに格納される。
【数９】
2015532477.tif 000011
【００１９】
上記命令を利用する擬似コードの例を以下に示す。
【数１０】
2015532477.tif 000012
３サイクルパイプラインにより、４サイクルごとにラウンド処理を２回達成することができる。即値オペランドは、複数のＭＩＸ関数の複数のローテート値を特定する。
【００２０】
図８は、一実施形態に係わる複数のＳＫＥＩＮ  ＭＩＸ−ＰＥＲＭＵＴＥ演算を実行する方法を示すフロー図である。方法８００は、図５のプロセッサ１００によって実行されてもよい。図８を参照すると、ブロック８０１では、処理ロジックは、複数のＳＫＥＩＮ  ＭＩＸ−ＰＥＲＭＵＴＥ演算を実行する第１のオペランド、第２のオペランド、および第３のオペランドを有する命令（例えば、ＳＫＥＩＮ２５６＿ＥＶＥＮまたはＳＫＥＩＮ２５６＿ＯＤＤ）を受信する。ブロック８０２では、処理ロジックは、第１のオペランドによって示されるストレージロケーションから複数の奇数ワードを取得する。ブロック８０３では、処理ロジックは、第２のオペランドによって示されるストレージロケーションから偶数ワードを取得する。ブロック８０４では、処理ロジックは、第３のオペランドによって示されるストレージロケーションから取得したローテーション値を用いて、奇数ワードおよび偶数ワードに基づく複数のＳＫＥＩＮ  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行する。ブロック８０５では、ＳＫＥＩＮ  ＭＩＸ−ＰＥＲＭＵＴＥ演算の結果は、第１のオペランドによって示されるストレージロケーションに格納される。
【００２１】
別の実施形態によれば、オペランドの代替的レイアウトもまた実装可能である。例えば、ワード（ｗｏｒｄ）０およびワード（ｗｏｒｄ）１は、１つのＸＭＭレジスタ：ＸＭＭ１［１２７：６４］＝ｗｏｒｄ０；ＸＭＭ１［６３：０］＝ｗｏｒｄ１に格納されてもよい。ワード（ｗｏｒｄ）２およびワード（ｗｏｒｄ）３は、別のＸＭＭレジスタ：ＸＭＭ２［１２７：６４］＝ｗｏｒｄ２；ＸＭＭ２［６３：０］＝ｗｏｒｄ３に格納してもよい。このことは、正規レイアウト（上述のような奇数偶数レイアウトの代わり）と称される。２回のラウンド処理が複数回実行される場合、複数の順列は、オリジナルレイアウトへのオペランドの復帰をもたらす。したがって、命令セットは、上述した２つの代わりに４回のラウンド処理を実行し得る。
【数１１】
2015532477.tif 000013
【００２２】
即値バイトは、図３のローテート値の表にある複数の行の複数のペアにマッピングされる２回のラウンド処理ＩＳＡ用として４つの値を許容するものとして定義されることになる。４回のラウンド処理ＩＳＡに関して、２つの値を即値バイトとして特定することができ、これらの値は表の上半分または下半分を選択することになる。
【００２３】
さらなる実施形態によれば、上述の技術はＳＫＥＴＮ５１２にも適用され得る。ＳＫＥＩＮ５１２では、４回のラウンド処理が完了した後に、サブキーが追加される。５１２ビットＳＫＥＩＮステートデータは、４つの１２８ビットレジスタ、例えばＸＭＭレジスタに格納される必要がある。ＳＫＥＴＮ５１２に関して、次のラウンド処理ではオペランドペア（２，１）、（４，７）、（６，５）、および（０，３）に置き換えられるオペランドペア（０，１）、（２，３）、（４，５）、および（６，７）による８つの６４ビット演算が存在する。
【数１２】
2015532477.tif 000014
【００２４】
ＳＫＥＩＮ５１２に関しては、４回のラウンド処理ごとにワードのペアリングが反復する。ラウンド処理間でオペランドをシャッフルする必要がある命令を避けるべく、複数のＸＭＭレジスタにおいて、複数の奇数オペランドを一緒に格納し、かつ複数の偶数オペランドを一緒に格納する。ＳＫＥＩＮ５１２の複数の順列によって、繰り返し４回のラウンド処理パターンにおいて異なる偶数ワードとペアリングする各々の奇数ワードが結果として生ずる。
【数１３】
2015532477.tif 000015
【００２５】
上記表は、ＳＫＥＩＮ５１２演算の４回のラウンド処理に関する奇数／偶数ワードのペアリングを示す。ラウンド処理１および２では、奇数ワード１および３は、ＳＫＥＩＮ２５６の場合と同様のやり方で１回目のラウンド処理には同じレーンおよび２回目のラウンド処理には交差レーンにある偶数ワード０および２とペアリングする。また、ラウンド処理１および２において、奇数ワード５および７は、同じやり方で偶数ワード４および６とペアリングする。ラウンド処理３および４では、奇数ワード１および３は、偶数ワード４および６とペアリングし、一方で奇数ワード５および７は、１回目のラウンド処理には同じレーンおよび２回目のラウンド処理には交差レーンにある偶数ワード０および２とペアリングする。このように、２つの奇数ワードおよび２つの偶数ワードを処理するための命令は、ＳＫＥＩＮの２回のラウンド処理に関して、ＳＫＥＩＮ５１２およびＳＫＥＩＮ２５６（奇数偶数レイアウトで２回のラウンド処理を実行する命令セット用）の全ての場合において、類似している。命令の主な違いは、即値オペランドによって特定される、異なるラウンド処理およびペアリングに必要であるラウンド処理制御である。
【００２６】
一実施形態に従って、上記命令を利用する擬似コードの例を以下に示す。
【数１４】
2015532477.tif 000016
【００２７】
３サイクル命令パイプラインに関して、ＳＫＥＩＮ５１２のパフォーマンスは、５サイクルで２回のラウンド処理である（両方の偶数の更新は、次の２回のラウンド処理に必要である）。１２８ビットＸＭＭレジスタは、２つの６４ビットオペランドを格納する。一実施形態において、ワード１および３は、ＸＭＭレジスタに格納される。すなわち、ＸＭＭ［１２７：６４］＝ｗｏｒｄ１；ＸＭＭ［６３：０］＝ｗｏｒｄ３。同様に、ワード０およびワード２は、別のＸＭＭレジスタに格納される。すなわち、ＸＭＭ［１２７：６４］＝ｗｏｒｄ０；ＸＭＭ［６３：０］＝ｗｏｒｄ２。オペランドペア（５，７）および（４，６）も同様である。
【００２８】
同様に、一実施形態によれば、２つの命令が定義される。すなわち、ＳＫＥＩＮ５１２＿ＯＤＤおよびＳＫＥＩＮ５１２＿ＥＶＥＮ。ＳＫＥＩＮ５１２＿ＯＤＤは、ＭＩＸ−ＰＥＲＭＵＴＥ−ＭＩＸ−ＰＥＲＭＵＴＥの２回のラウンド処理の後に、奇数ワードに関して新たな値を生成する。ＳＫＥＩＮ５１２＿ＥＶＥＮは、ＭＩＸ−ＰＥＲＭＵＴＥ−ＭＩＸ−ＰＥＲＭＵＴＥの２回のラウンド処理の後に、偶数ワード用の新たな値を生成する。即値オペランドは、ＭＩＸ関数のローテート値を特定する。命令ＳＫＥＩＮ５１２＿ＥＶＥＮに関して、偶数ワードの第２の順列を完了するためのデスティネーションＸＭＭ［１２７：６４］＝ｒｏｕｎｄ２＿ｅｖｅｎ＿ｌｏｗおよびＸＭＭ［６３：０］＝ｒｏｕｎｄ２＿ｅｖｅｎ＿ｈｉｇｈである。命令ＳＫＥＩＮ５１２＿ＯＤＤに関して、デスティネーションＸＭＭ［１２７：６４］＝ｒｏｕｎｄ２＿ｏｄｄ＿ｈｉｇｈおよびＸＭＭ［６３：０］＝ｒｏｕｎｄ２＿ｏｄｄ＿ｌｏｗである。奇数ワードは、同じワードレーンにとどまる。なぜなら、複数の順列を達成するべく、複数の下位ワードのみが上位ワードレーンおよび下位ワードレーンをスワッピングしなければならない。
【００２９】
一実施形態によれば、即値バイトは、図３に示される表において複数の行からなる複数の対にマッピングする２回のラウンド処理ＩＳＡ用として４つの値を許容するものとして定義され得る。しかし、ＳＫＥＩＮ２５６と違って、各ラウンド処理に関する異なるローテート値セットは、我々がより高位な２５６ビットの状態で演算しているかに依存している。我々は、このＩＳＡをＳＫＥＩＮ１０２４に拡張可能にもしたい。一実施形態において、即値制御は２つの値Ｘ||Ｙを有すると定義する。一実施形態において、各命令は、以下のようなやり方で図３の表から４回のローテート値を利用する。
【数１５】
2015532477.tif 000017
【００３０】
したがって、ＹおよびＸは、０から３の間の値を取ることが許されるであろう。一実施形態によれば、適用可能なマッピングは、Ｘ＝ｉｍｍ８［３：２］、Ｙ＝ｉｍｍ８［１：０］であろう。ＳＫＥＩＮ５１２に関して、Ｘは２つの値０および１によって特定されよう。ＳＫＥＩＮ２５６に関して、Ｘは０であり、Ｙは処理されているラウンド処理に応じて変動する。
【００３１】
命令セット、すなわち命令セットアーキテクチャ（ＩＳＡ）は、プログラミングに関連したコンピュータアーキテクチャの一部であり、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割り込および例外処理、ならいに外部入力および出力（Ｉ／Ｏ）を有してもよい。命令の用語は、概して本明細書中では、マクロ命令のことを言う。すなわち、マクロ命令は、実行のためにプロセッサ（あるいは、プロセッサによって処理される１または複数の他の命令に１つの命令をトランスレート（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用）、モーフィング、エミュレート、またはさもなければ変換する命令変換部）に提供される命令であり、マイクロ命令またはマイクロ演算（マイクロｏｐ）とは対照的に、マクロ命令を復号化するプロセッサのデコーダの結果である。
【００３２】
ＩＳＡは、命令セットを実装するプロセッサの内部設計であるマイクロアーキテクチャと識別される。異なるマイクロアーキテクチャを有する複数のプロセッサは、共通命令セットを共有し得る。例えば、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサ、およびカリフォルニア州サニーベールのＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．のプロセッサは、ほぼ同じのバージョンの×８６命令セット（より新しいバージョンが追加されているいくつかの拡張を有する）を実装するが、異なる内部設計を有する。  例えば、ＩＳＡの同じレジスタアーキテクチャは、周知の技術を用いて、異なる方法で異なるマイクロアーキテクチャに実装されてもよく、専用物理レジスタ、レジスタリネーミングメカニズム（例えば、レジスタエイリアステーブル（ＲＡＴ）、リオーダバッファ（ＲＯＢの使用）、およびリタイアレジスタファイル；複数のマップと複数のレジスタからなるプールとの使用）を用いた１または複数のダイナミックに割り当てられた物理レジスタ、その他が含まれる。別段の定めがない限り、文言であるレジスタアーキテクチャ、レジスタファイル、およびレジスタの極は、ソフトウェア／プログラマに見えるもの、および、命令がレジスタを特定するやり方に言及するべく、本明細書中で用いられる。特定性が所望される場合、ロジックカル、アーキテクチャ、またはソフトウェアビジブルの形容詞は、レジスタアーキテクチャ内のレジスタ／ファイルを示すべく、用いられる。一方で、異なる形容詞は、所与のマイクロアーキテクチャ内の複数の指定レジスタ（例えば、物理レジスタ、リオーダバッファ、リタイアメントレジスタ、レジスタプール）に対して用いられる。
【００３３】
命令セットは、１または複数の命令フォーマットを設定する。所与の命令フォーマットは、他にもあるうち、実行される演算（オペコード）およびその演算が実行されるように構成されるオペランド（複数可）を特定するべく、様々なフィールド（ビット数、ビットのロケーション）を定義する。いくつかの命令フォーマットは、複数の命令テンプレート（または複数のサブフォーマット）の定義を介して、さらに分割される。例えば、所与の命令フォーマットの複数の命令テンプレートは、命令フォーマットの複数のフィールドからなる異なるサブセットを複数持つように定義されてもよく（含まれた複数のフィールドは一般的に同じ順位にあるが、含まれているフィールドがより少ないことから少なくともいくつかは複数の異なるビットポジションを有する）、および／または異なるように解釈された所与のフィールドを持つように定義されてもよい。したがって、ＩＳＡの各命令は、所与の命令フォーマット（および、もし定義されているならば、その命令フォーマットの所与の１または複数の命令テンプレート内）を用いて表わされ、演算およびオペランドを特定するための複数のフィールドを含む。例えば、例示的なＡＤＤ命令は、特定のオペコードと命令フォーマットとを有する。命令フォーマットは、そのオペコードを特定するためのオペコードフィールドと複数のオペランド（ソース１／デスティネーションおよびソース２）を選択するための複数のオペランドフィールドとを含む。命令ストリームにおけるこのＡＤＤ命令の発生は、複数の特定オペランドを選択する複数のオペランドフィールド内の複数の特定のコンテンツを有するであろう。
【００３４】
サイエンス的、財政的、自動ベクトル化汎用、ＲＭＳ（認識、マイニング、および合成）、ならびにビジュアルおよびマルチメディアアプリケーション（例えば、２Ｄ／３Ｄグラフィクス、イメージ処理、ビデオ圧縮／解凍、音声認識アルゴリズム、およびオーディオ操作）は、多数のデータアイテム上で実行される同じ演算（「データパラレリズム」と称される）を、しばしば必要とする。Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ（ＳＩＭＤ）は、複数のデータアイテム上で演算をプロセッサに実行させる命令の一タイプに言及する。ＳＩＭＤ技術は、特に、レジスタのビットを、各々が個別の値を表しているいくつかの一定のサイズのデータ要素に論理的に分割し得るプロセッサに、適している。例えば、２５６ビットレジスタ内の複数のビットは、４つの別々の６４ビットパックドデータ要素（クワッドワード（Ｑ）サイズデータ要素）、８つの別々の３２ビットパックドデータ要素（ダブルワード（Ｄ）サイズデータ要素）、１６個の別々の１６ビットパックドデータ要素（ワード（Ｗ）サイズデータ要素）、または３２の別個の８ビットデータ要素（バイト（Ｂ）サイズデータ要素）として演算されるソースオペランドとして、特定されてもよい。このタイプのデータは、パックドデータタイプまたはベクトルデータタイプと称される。また、このデータタイプの複数のオペランドは、複数のパックドデータオペランドまたは複数のベクトルオペランドと称される。言い換えれば、パックドデータアイテムまたはベクトルは、一連のパックドデータ要素と称され、また、パックドデータオペランドまたはベクトルオペランドはＳＩＭＤ命令（パックドデータ命令またはベクトル命令としても知られている）のソースまたはデスティネーションオペランドである。
【００３５】
例として、ＳＩＭＤ命令の１つのタイプは、同数のデータ要素によって、かつ同じのデータ要素順序で、同じサイズの複数のデスティネーションベクトルオペランド（結果ベクトルオペランドとも称される）を生成するべく、垂直様式の２つのソースベクトルオペランド上で実行される単一のベクトル演算を特定する。複数のソースベクトルオペランド内のデータ要素は、ソースデータ要素と称される。その一方で、デスティネーションベクトルオペランド内のデータ要素は、デスティネーションまたは結果データ要素と称される。これら複数のソースベクトルオペランドは、同じサイズであり、同じ幅の複数のデータ要素を含むので、それらは同数のデータ要素を含む。２つのソースベクトルオペランド内の複数の同じビットポジションの複数のソースデータ要素は、複数のデータ要素（対応データ要素とも称される；すなわち、各ソースオペランドのデータ要素ポジション０にあるデータ要素が対応し、各ソースオペランドのデータ要素ポジション１にあるデータ要素が対応し、以下同様である）からなる複数の対を形成する。そのＳＩＭＤ命令によって特定された演算は、ソースデータ要素のこれらの各対の上で別々に実行され、適合する数の結果データ要素を生成するので、ソースデータ要素の各々の対は対応する結果データ要素を有する。演算が垂直であることから、ならびに、結果ベクトルオペランドが同じサイズであり、同数のデータ要素を有し、複数の結果データ要素が複数のソースベクトルオペランドとして同じデータ要素順序で格納されることから、結果データ要素は、複数のソースベクトルオペランド内の対応ソースデータ要素対として、結果ベクトルオペランドの同じビットポジションにある。ＳＩＭＤ命令のこの例示的なタイプに加えて、様々な他のタイプのＳＩＭＤ命令（例えば、たった１つの、または２を上回る複数のソースベクトルオペランドを有するもの、水平様式で動作するもの、異なるサイズの結果ベクトルオペランドを生成するもの、複数の異なるサイズデータ要素を有するもの、および／または異なるデータ要素順序を有するもの）が存在する。理解するべきことは、デスティネーションベクトルオペランド（またはデスティネーションオペランド）という用語は、命令によって特定された演算を実行する直接的な結果として定義され、それには、別の命令によって（別の命令による同じロケーションの特定によって）ソースオペランドとしてアクセス可能であるように、１つのロケーション（それがレジスタであること、または、その命令によって特定されるメモリアドレス上）でのデスティネーションオペランドの格納が含まれる。
【００３６】
ＳＥＶＩＤ技術、例えば、ｘ８６、ＭＭＸ（商標）、ストリーミングＳＥＶＩＤ拡張（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１、およびＳＳＥ４．２命令を含む命令セットを有するＩｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサによって採用されたものは、アプリケーションパフォーマンスの顕著な向上を可能にした。アドバンスドベクトル拡張（ＡＶＸ）（ＡＶＸ１およびＡＶＸ２）と称され、ベクトル拡張（ＶＥＸ）符号化スキームが用いられる複数のＳＥＶＩＤ拡張からなる追加のセットがリリースおよび／または公開されている（例えば、Ｉｎｔｅｌ（登録商標）６４およびＩＡ−３２アーキテクチャソフトウェアデベロッパーズマニュアル、２０１１年１０月を参照、および、Ｉｎｔｅｌ（登録商標）Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ    Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ、２０１１年６月を参照）。
【００３７】
本明細書中に説明される命令（複数可）の複数の実施形態は、異なるフォーマットで具現化されてもよい。さらに、例示的なシステムアーキテクチャ、および、パイプラインの詳細を以下に示す。命令（複数可）の複数の実施形態は、詳細に説明されたものに限定されるものではないが、そのようなシステム、アーキテクチャ、およびパイプライン上で実行され得る。
【００３８】
ＶＥＸ符号化は、複数の命令が２を上回る数のオペランドを有することを可能にし、複数のＳＥＶＩＤベクトルレジスタが１２８ビットより長くなることを可能にする。ＶＥＸプレフィックスの使用は、３オペランド（またはより多くの）構文を提供する。例えば、以前の複数の２オペランド命令は、ソースオペランドを上書きするＡ＝Ａ＋Ｂなどの複数の演算を、実行した。ＶＥＸプレフィックスの使用は、オペランドがＡ＝Ｂ＋Ｃのような非破壊の演算を遂行することを可能にする。
【００３９】
図９Ａは、ＶＥＸプレフィックス２１０２、リアルオペコードフィールド２１３０、Ｍｏｄ  Ｒ／Ｍバイト２１４０、ＳＩＢバイト２１５０、変位フィールド２１６２、およびＩＭＭ８  ２１７２を含む例示的なＡＶＸ命令フォーマットを例示する。図９Ｂは、図９Ａからのどのフィールドがフルオペコードフィールド２１７４と基本演算フィールド２１４２とを作るかについて説明する。図９Ｃは、図９Ａからのどのフィールドがレジスタインデックスフィールド２１４４を作るかについて説明する。
【００４０】
ＶＥＸプレフィックス（バイト０〜２）２１０２は、３バイトの形で符号化される。第１のバイトは、フォーマットフィールド２１４０（ＶＥＸバイト０、ビット［７：０］）であり、これは、明確なＣ４バイト値（Ｃ４命令フォーマットを識別するために使用される固有値）を含む。第２、第３のバイト（ＶＥＸバイト１〜２）は、特定の機能を提供するいくつかのビットフィールドを含む。具体的には、ＲＥＸフィールド２１０５（ＶＥＸバイト１、ビット［７〜５］は、ＶＥＸ．Ｒビットフィールド（ＶＥＸバイト１、ビット［７］−Ｒ）、ＶＥＸ．Ｘビットフィールド（ＶＥＸバイト１、ビット［６］−Ｘ）、およびＶＥＸ．Ｂビットフィールド（ＶＥＸバイト１、ビット［５］−Ｂ）からなる。複数の命令の他のフィールドは、当技術分野で知られているように、下位３ビットのレジスタインデックス（ｒｒｒ、ｘｘｘ、およびｂｂｂ）を符号化するので、Ｒｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂは、ＶＥＸ．Ｒ、ＶＥＸ．Ｘ、およびＶＥＸ．Ｂを追加することによって形成可能である。オペコードマップフィールド２１１５（ＶＥＸバイト１、ビット［４：０］−ｍｍｍｍｍ）は、暗示リーディングオペコードバイトを符号化するコンテンツを含む。Ｗ  Ｆｉｅｌｄ  ２１６４（ＶＥＸバイト２、ビット［７］−Ｗ）は、表記ＶＥＸ．Ｗによって表され、そして、命令に応じて異なる関数を提供する。ＶＥＸ．ｖｖｖｖ  ２１２０（ＶＥＸバイト２、ビット［６：３］ｖｖｖｖ）の役割として、以下のものを挙げることができる。
（１）ＶＥＸ．ｖｖｖｖは、反転（１の補数）形式で特定された第１のソースレジスタオペランドを符号化し、２またはそれ以上のソースオペランドを有する複数の命令に有効である。
（２）ＶＥＸ．ｖｖｖｖは、特定のベクトルシフトに関して１の補数形式に特化したデスティネーションレジスタオペランドを符号化する。または、
（３）ＶＥＸ．ｖｖｖｖは、任意のオペランドを符号化せず、フィールドがリザーブされ、１１１１ｂを含まなければならない。もしＶＥＸ．Ｌ２１６８サイズフィールド（ＶＥＸバイト２ビット［２］−Ｌ）＝０であるならば、それは１２８ビットベクトルを示し、もしＶＥＸ．Ｌ＝１ならば、それは２５６ビットベクトルを示す。プレフィックス符号化フィールド２１２５（ＶＥＸバイト２、ビット［１：０］−ｐｐは、基本演算フィールド用の複数の追加のビットを提供する。
【００４１】
リアルオペコードフィールド２１３０（バイト３）もまた、オペコードバイトとしても知られている。オペコードの一部は、このフィールドに特定される。ＭＯＤ  Ｒ／Ｍフィル−ド２１４０（バイト４）は、ＭＯＤフィールド２１４２（ビット［７−６］）、Ｒｅｇフィールド２１４４（（ビット［５−３］）、およびＲ／Ｍフィールド２１４６（ビット［２−０］）を含む。Ｒｅｇフィールド２１４４の役割は、以下のものを含んでもよい。すなわち、デスティネーションレジスタオペランドまたはソースレジスタオペランド（Ｒｒｒｒのｒｒｒ）のいずれかを符号化すること、またはオペコードエクステンションとして処理され、いっさいの命令オペランドを符号化するためには使用されないことである。Ｒ／Ｍフィールド２１４６の役割として、以下のものを含んでもよい。すなわち、メモリアドレスを参照する命令オペランドを符号化すること、またはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかを符号化することである。
【００４２】
スケール、インデックス、ベース（ＳＩＢ）  −  スケールフィールドのコンテンツ２１５０（バイト５）は、メモリアドレス発生に用いられるＳＳ２１５２（ビット［７−６］）を含む。ＳＩＢ．ｘｘｘ  ２１５４ビット］［５−３］およびＳＩＢ．ｂｂｂ２１５６ビット［２−０］のコンテンツは、以前は、レジスタインデックスＸｘｘｘおよびＢｂｂｂに関連して言及されてきた。変位フィールド２１６２および即値フィールド（ＩＭＭ８）２１７２は、アドレスデータを含む。
【００４３】
ベクトルフレンドリ命令フォーマットは、複数のベクトル命令（例えば、複数のベクトル演算に特有のいくつかのフィールドを含む）に適している複数の命令フォーマットである。ベクトルおよびスカラ演算の両方がベクトルフレンドリ命令フォーマットを介してサポートされている一方で、複数の代替実施形態はベクトルフレンドリ命令フォーマットである複数のベクトル演算のみしか使用しない。
【００４４】
図１０Ａおよび図１０Ｂは、ブロック図であり、これらの図は本発明の複数の実施形態に係る汎用ベクトルフレンドリ命令フォーマットおよびその複数の命令テンプレートを例示する。図１０Ａは、本発明の複数の実施形態に係る汎用ベクトルフレンドリ命令フォーマットおよびその複数のクラスＡ命令テンプレートを例示するブロック図である。一方で、図１０Ｂは、本発明の複数の実施形態に係る汎用ベクトルフレンドリ命令フォーマットおよびその複数のクラスＢ命令テンプレートを例示するブロック図である。より具体的には、クラスＡおよびクラスＢ命令テンプレートに対して定義される汎用ベクトルフレンドリ命令フォーマット２２００は、両方とも複数の非メモリアクセス２２０５の命令テンプレートと複数のメモリアクセス２２２０の命令テンプレートとを含む。ベクトルフレンドリ命令フォーマットとの関連で使用される用語である「汎用」は、任意の具体的な命令セットと結びついていない命令フォーマットのことをいう。
【００４５】
本発明の複数の実施形態は、ベクトルフレンドリ命令フォーマットが以下のものをサポートすることを説明する。すなわち、３２ビット（４バイト）または６４ビット（８バイト）データ要素幅（またはサイズ）を有する６４バイトベクトルオペランド長（または８バイト）（したがって、６４バイトベクトルは、１６個のダブルワードサイズ要素、または代替的に、８個のクアドワードサイズ要素のいずれかからなる）。１６ビット（２バイト）または８ビット（１バイト）データ要素幅（またはサイズ）を有する６４バイトベクトルオペランド長（またはサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）データ要素幅（またはサイズ）を有する３２バイトベクトルオペランド長（またはサイズ）；ならびに、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、８ビット（１バイト）データ要素幅（またはサイズ）を有する１６バイトベクトルオペランド長（またはサイズ）である。その一方で、複数の代替実施形態は、より大きい、より少ない、または異なるデータ要素幅（例えば、複数の１２８ビット（１６バイト）データ要素幅）を有する、より大きい、より少ない、および／または異なる複数のベクトルオペランドサイズ（例えば、複数の２５６バイトベクトルオペランド）を、サポートするものであってもよい。
【００４６】
図１０Ａの複数のクラスＡ命令テンプレートは、（１）複数の非メモリアクセス２２０５の命令テンプレート内に、非メモリアクセス、完全ラウンド制御型演算２２１０の命令テンプレート、および非メモリアクセス、データ変換型演算２２１５の命令テンプレートが示されていること、ならびに、（２）複数のメモリアクセス２２２０の命令テンプレート内に、メモリアクセス、一時的２２２５の命令テンプレート、およびメモリアクセス、非一時的２２３０の命令テンプレートが示されていること、を含む。図１０Ｂの複数のクラスＢ命令テンプレートは、（１）複数の非メモリアクセス２２０５の命令テンプレート内に、非メモリアクセス、書き込みマスク制御、部分的ラウンド制御処理型演算２２１２の命令テンプレート、および非メモリアクセス、書き込みマスク制御、ＶＳＩＺＥ型演算２２１７の命令テンプレートが示されていこと、（２）複数のメモリアクセス２２２０の命令テンプレート内に、メモリアクセス、書き込みマスク制御２２２７の命令テンプレートが示されていること、を含む。
【００４７】
汎用ベクトルフレンドリ命令フォーマット２２００は、図１０Ａおよび図１０Ｂに示す順序で、下にリストアップした以下の複数のフィールドを含む。フォーマットフィールド２２４０  −  このフィールドの特定の値（命令フォーマット識別子値）は一意的にベクトルフレンドリ命令フォーマットを識別し、複数の命令ストリーム内のベクトルフレンドリ命令フォーマットの複数の命令の発生が識別される。このように、このフィールドは、汎用ベクトルフレンドリ命令フォーマットのみを有する命令セットに必要とされないという意味で任意である。基本演算フィールド２２４２  −  そのコンテンツは複数の異なる基本演算を識別する。
【００４８】
レジスタインデックスフィールド２２４４  −  そのコンテンツは、直接、または、アドレス発生を介して、ソースの複数のロケーションと複数のデスティネーションオペランドとを、それらがレジスタにあろうともメモリにあろうとも、特定する。これらは、ＰｘＱ（例えば、３２ｘ５１２、１６ｘ１２８、３２ｘ１０２４、６４ｘ１０２４）レジスタファイルからＮ個のレジスタを選択するべく、十分な数のビットを含む。一実施形態において、Ｎが最大で３つのソースと１つのデスティネーションレジスタまでであってもよい。一方で、複数の代替実施形態において、より多くのまたはより少ない、複数のソースと複数のデスティネーションレジスタとをサポートしてもよい（例えば、最大２つのソースをサポートしてもよくこれらのソースの１つはデスティネーションとしても機能するものをサポートしてもよく、最大で３つのソースをサポートしてもよくこれらのソースのうちの１つはデスティネーションとして機能するものをサポートしてもよく、あるいは最大で２つのソースと１つのデスティネーションとをサポートしてもよい）。
【００４９】
変形子フィールド２２４６  −  そのコンテンツは、ジェネリックベクトル命令フォーマットの複数の命令の発生を識別する。これらの命令は、複数の非メモリアクセス２２０５の命令テンプレートと複数のメモリアクセス２２２０の命令テンプレートとのうち、メモリアクセスをするものを、そうでないものから特定する。複数のメモリアクセス演算は、メモリ階層に対して読み取および／または書き込み（場合によっては、複数のレジスタ内の複数の値を用いてソースおよび／またはデスティネーションアドレスを特定）を行う。一方で、非メモリアクセス演算はそのようなことを行わない（例えば、ソースおよび複数のデスティネーションは、複数のレジスタ）。一実施形態において、このフィールドは、複数のメモリアドレス計算を実行するべく、３つの異なる方法の間で選択する。一方で、代替実施形態は、複数のメモリアドレス計算を実行するべく、より多い、より少ない、または異なる方法をサポートするものであってもよい。
【００５０】
追加演算フィールド２２５０  −  そのコンテンツは、基本演算に加えて、様々な異なる演算のうちのどれが実行されるべきかを識別する。このフィールドはコンテキストに特有である。本発明の一実施形態において、このフィールドはクラスフィールド２２６８、アルファフィールド２２５２、およびベータフィールド２２５４に分割される。追加演算フィールド２２５０は、複数の演算からなる複数の共通グループが、２、３、または４つの命令よりはむしろ単一の命令で実行されるのを可能にする。スケールフィールド２２６０  −  そのコンテンツはメモリアドレス発生用（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅを用いるアドレス発生用）のインデックスフィールドのコンテンツのスケーリングを可能にする。
【００５１】
変位フィールド２２６２Ａ  −  そのコンテンツはメモリアドレス発生の一部として用いられる（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅ＋ｄｉｓｐｌａｃｅｍｅｎｔを用いるアドレス発生用）。変位係数フィールド２２６２Ｂ（変位係数フィールド２２６２Ｂに直に加えて変位フィールド２２６２Ａを並置することは一方または他方が用いられることを示す点に留意）  −  そのコンテンツは、アドレス発生の一部として用いられる。それはメモリアクセス（Ｎ）のサイズによって基準化されるように変位係数を特定する。ここで、Ｎはメモリアクセスのバイト数（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅ＋ｓｃａｌｅｄ  ｄｉｓｐｌａｃｅｍｅｎｔを用いるアドレス発生用）である。複数の冗長な下位ビットは無視される。それ故、変位係数フィールドのコンテンツは、有効なアドレスを計算する際に用いられる最終的な変位を生成するために、メモリオペランド総計サイズ（Ｎ）によって乗算される。Ｎの値は、フルオペコードフィールド２２７４（本明細書中に後述）およびデータ操作フィールド２２５４Ｃに基づいて、ランタイム時、プロセッサハードウェアによってランダムに決定される。変位フィールド２２６２Ａおよび変位係数フィールド２２６２Ｂは、非メモリアクセス２２０５の命令テンプレートに用いられるという意味で、任意であり、および／または、複数の異なる実施形態はそれら２つのうちの１つを実装してもよく、もしくは全く実装されなくてもよい。
【００５２】
データ要素幅フィールド２２６４  −  そのコンテンツは、いくつかのデータ要素幅のうちのどれが用いられるべきかを識別する（いくつかの実施形態において、すべての命令に関するものであり、複数の他の実施形態において、複数の命令のいくつかに関する）。このフィールドは、１つのみデータ要素幅がサポートされる、および／または、複数のデータ要素幅がオペコードのいくつかの態様を用いてサポートされる場合にそれが必要でないという意味で、任意である。
【００５３】
書き込みマスクフィールド２２７０  −  そのコンテンツは、１つのデータ要素ポジション毎に基準として、デスティネーションベクトルオペランドのそのデータ要素ポジションが基本演算と追加演算との結果を反映するかどうかを、制御する。複数のクラスＡ命令テンプレートは、マージング・ライトマスキングをサポートし、一方で複数のクラスＢ命令テンプレートは、マージングおよびゼロイング・ライトマスキングの両方をサポートする。マージングする場合、複数のベクトルマスクは、任意の演算（基本演算および追加演算によって特定）の実行中、デスティネーションおける任意の要素の組が、更新から保護されることを可能とする。他の一実施形態において、対応マスクビットが０を有するデスティネーションの各要素の古い値を保護する。対照的に、複数のベクトルマスクをゼロにする場合、任意の演算（基本演算および追加演算によって特定）の実行中、デスティネーションの複数の要素からなる任意の組をゼロとすることを可能にする。一実施形態において、デスティネーションの要素は、対応マスクビットが０の値を有する場合に、０に設定される。この機能のサブセットは、実行されている演算のベクトル長を制御する能力である（すなわち、最初から最後のものの中で修正されている複数の要素のスパン）。しかし、修正される要素が連続であることは、必要でない。したがって、書き込みマスクフィールド２２７０は、複数のロード、複数の格納、演算、ロジック、その他を含む、部分的な複数のベクトル演算を可能にする。本発明の複数の実施形態において、使用される書き込みマスクを含むいくつかの書き込みマスクレジスタの１つを書き込みマスクフィールド２２７０のコンテンツが選択すること（したがって、書き込みマスクフィールド２２７０のコンテンツは間接的に、実行されるマスキングを識別すること）が説明される。その一方で、複数の別の実施形態は、その代わりに、またはそれに追加して、実行されるマスキングを直接的に特定するべくマスク書き込みフィールド２２７０のコンテンツを可能にする。
【００５４】
即値フィールド２２７２  −  そのコンテンツは、即値の定義を考慮に入れる。このフィールドは、即値をサポートせず、かつ即値を用いない命令には存在しない汎用ベクトルフレンドリフォーマットの実装に存在しないという意味で、任意である。クラスフィールド２２６８  −  そのコンテンツは複数の命令の異なる複数のクラス間を識別する。図１０Ａおよび図１０Ｂに関連して、このフィールドのコンテンツはクラスＡおよびクラスＢの複数の命令間で選択する。図１０Ａおよび図１０Ｂにおいて、角が丸みを帯びた複数の四角は、特定の値がフィールドに存在することを示すために用いられる（例えば、図１０Ａおよび図１０Ｂのそれぞれにおいて、クラスフィールド２２６８のクラスＡ  ２２６８ＡおよびクラスＢ  ２２６８Ｂ）。
【００５５】
クラスＡの非メモリアクセス２２０５の命令テンプレートの場合、アルファフィールド２２５２はＲＳフィールド２２５２Ａとして解釈される。このＲＳフィールド２２５２Ａのコンテンツは、複数の異なる追加演算タイプのうちのどれが実行されるべきかを識別する（例えば、ラウンド処理２２５２Ａ．１およびデータ変換２２５２Ａ．２は、非メモリアクセスであるラウンドタイプ演算２２１０と非メモリアクセスである複数のデータ変換型演算２２１５の命令テンプレートとのそれぞれに対して特定される）。一方で、ベータフィールド２２５４が特定のタイプの演算のうちのいずれが実行されるべきかを識別する。非メモリアクセス２２０５の命令テンプレートであるスケールフィールド２２６０では、変位フィールド２２６２Ａおよび変位スケールフィールド２２６２Ｂは存在しない。
【００５６】
非メモリアクセス完全ラウンド制御型演算２２１０の命令テンプレートでは、ベータフィールド２２５４はラウンド制御フィールド２２５４Ａとして解釈され、このコンテンツ（複数可）は静的ラウンド処理を提供する。説明される本発明の複数の実施形態において、ラウンド制御フィールド２２５４Ａは、浮動小数点例外抑制（ＳＡＥ）フィールド２２５６と、ラウンド演算制御フィールド２２５８とを含む。一方で、複数の代替実施形態は、これらのコンセプトの両方をサポートしてもよく、同じフィールドに符号化してもよく、または、これらのコンセプト／フィールドのうちの一方または他方を有してもよい（例えば、ラウンド演算制御フィールド２２５８のみを有してもよい）。
【００５７】
ＳＡＥフィールド２２５６  −  そのコンテンツは、例外事象報告を無効化するか否かを識別する。抑制が有効であることをＳＡＥフィールド２２５６コンテンツが示す場合、所与の命令はいかなる種類の浮動小数点例外フラグもレポートせず、いかなる浮動小数点例外ハンドラも持ち上げない。
【００５８】
ラウンド演算制御フィールド２２５８  −  そのコンテンツは、一群のラウンド演算のうちのどれが実行されるべきかを識別する（例えば、切り上げ、切り下げ、ゼロ方向へのラウンド処理、および最近接値へのラウンド処理）。したがって、ラウンド演算制御フィールド２２５８は、１命令ごとにラウンド処理モードの変更を可能にする。
【００５９】
プロセッサがラウンド処理モードを特定するための制御レジスタを含む本発明の一実施形態において、ラウンド演算制御フィールドの２２５０のコンテンツは、そのレジスタ値をオーバーライドする。非メモリアクセスデータ変換型演算２２１５の命令テンプレートでは、ベータフィールド２２５４はデータ変換フィールド２２５４Ｂとして解釈され、そのコンテンツはいくつかのデータ変換のうちのどれが実行されるべきかを識別する（例えば、非データ変換、スウィズル、ブロードキャスト）。
【００６０】
クラスＡのメモリアクセス２２２０の命令テンプレートの場合、アルファフィールド２２５２は、エビクションヒントフィールド２２５２Ｂと解釈され、そのコンテンツが、複数のエビクションヒントのうちのどれが用いられるべきかを識別する（図１０Ａにおいて、一時的２２５２Ｂ．１および非一時的２２５２Ｂ．２は、メモリアクセス、一時的２２２５の命令テンプレートと、メモリアクセス、非一時的２２３０の命令テンプレートとに、それぞれ特定される）。その一方で、ベータフィールド２２５４がデータ操作フィールド２２５４Ｃと解釈される。そのコンテンツは、いくつかのデータ操作演算（プリミティブとしても知られている）のうちのどれが実行されるべきかを識別する（例えば、操作なし；ブロードキャスト；ソースのアップコンバージョン；およびデスティネーションのダウンコンバージョン）。複数のメモリアクセス２２２０の命令テンプレートはスケールフィールド２２６０を含み、任意選択的に、変位フィールド２２６２Ａまたは変位スケールフィールド２２６２Ｂを含む。
【００６１】
複数のベクトルメモリ命令は、変換サポートにより、メモリからの複数のベクトルロードとそれに対する複数のベクトル格納を行う。複数の通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素的様式で、メモリからデータを送信すること、および、メモリへデータを送信することを行う。実際に送信される複数の要素が、書き込みマスクとして選択されるベクトルマスクのコンテンツによって、規定される。
【００６２】
一時的データは、キャッシングから利益を得るのに十分なほどすぐに再利用される可能性が高いデータである。しかし、これはヒントであり、複数の異なるプロセッサが異なる方法でそれを実装してもよく、それにはヒントを完全に無視することも含まれる。非一時的データは、一次レベルキャッシュのキャッシングから利益を得るのに十分なほどすぐに再利用される可能性がなく、エビクションに対して優先権が与えられなければならないデータである。しかし、これはヒントであり、複数の異なるプロセッサが異なる方法でそれを実装してもよく、それにはヒントを完全に無視することも含まれる。
【００６３】
クラスＢの複数の命令テンプレートの場合、アルファフィールド２２５２は書き込みマスク制御（Ｚ）フィールド２２５２Ｃとして解釈される。そのコンテンツは、書き込みマスクフィールド２２７０によって制御される書き込みマスキングがマージまたはゼロ化されるべきかどうかを識別する。
【００６４】
非メモリアクセス２２０５のクラスＢの複数の命令テンプレートの場合、ベータフィールド２２５４の一部はＲＬフィールド２２５７Ａとして解釈される。そのコンテンツは、複数の異なる追加演算タイプのうちのどれが実行されるべきかを識別する（例えば、ラウンド処理２２５７Ａ．１およびベクトル長（ＶＳＩＺＥ）２２５７Ａ．２は、それぞれ、非メモリアクセス、書き込みマスク制御、部分的ラウンド制御処理型演算２２１２の命令テンプレートと、非メモリアクセス、書き込みマスク制御、ＶＳＩＺＥ型演算２２１７命令テンプレートと、に対して特定される）。一方で、ベータフィールド２２５４の残りは、特定のタイプの複数の演算のどれが実行されるべきかを識別する。
【００６５】
非メモリアクセス２２０５の命令テンプレートでは、スケールフィールド２２６０、変位フィールド２２６２Ａ、および変位スケールフィールド２２６２Ｂは存在しない。非メモリアクセス、書き込みマスク制御、部分的ラウンド制御処理型演算２２１０の命令テンプレートでは、ベータフィールド２２５４の残りは、ラウンド演算フィールド２２５９Ａと解釈され、例外事象報告はディセーブルである（所与の命令では浮動小数点例外フラグのいかなる種類もレポートせず、いかなる浮動小数点例外ハンドラも持ち上げない）。
【００６６】
ラウンド演算制御フィールド２２５９Ａ  −  ラウンド演算制御フィールド２２５８と同様に、そのコンテンツは、一群のラウンド演算のうちのいずれが実行されるべきかを識別する（例えば、切り上げ、切り下げ、ゼロ方向へのラウンド処理、および最近接値へのラウンド処理）。したがって、ラウンド演算制御フィールド２２５９Ａは、１命令ごとにラウンド処理モードの変更を可能にする。プロセッサがラウンド処理モードを特定するための制御レジスタを含む本発明の一実施形態において、ラウンド演算制御フィールドの２２５０のコンテンツは、そのレジスタ値をオーバーライドする。
【００６７】
非メモリアクセス、書き込みマスク制御、ＶＳＩＺＥ型演算２２１７の命令テンプレートでは、ベータフィールド２２５４の残りは、ベクトル長フィールド２２５９Ｂと解釈され、そのコンテンツは、いくつかのデータベクトル長のうちのどれが実行されるべきかを識別する（例えば、１２８、２５６、または５１２バイト）。
【００６８】
クラスＢのメモリアクセス２２２０の命令テンプレートの場合、ベータフィールド２２５４の一部は、ブロードキャストフィールド２２５７Ｂと解釈され、そのコンテンツは、ブロードキャストタイプデータ操作演算が実行される一方で、ベータフィールド２２５４の残りがベクトル長フィールド２２５９Ｂとして解釈されるか否かを識別する。複数のメモリアクセス２２２０の命令テンプレートは、スケールフィールド２２６０と、任意選択的に、変位フィールド２２６２Ａまたは変位スケールフィールド２２６２Ｂとを含む。
【００６９】
汎用ベクトルフレンドリ命令フォーマット２２００に関連して、フルオペコードフィールド２２７４は、フォーマットフィールド２２４０、基本演算フィールド２２４２、およびデータ要素幅フィールド２２６４を含むように示されている。フルオペコードフィールド２２７４がこれらのフィールドの全てを含む一実施形態が示される一方で、それらの全てをサポートしない複数の実施形態においては、フルオペコードフィールド２２７４に含まれるものは、それらのフィールドの全てよりも少ない。フルオペコードフィールド２２７４は、演算コード（オペコード）を提供する。
【００７０】
追加演算フィールド２２５０、データ要素幅フィールド２２６４、および書き込みマスクフィールド２２７０は、汎用ベクトルフレンドリ命令フォーマットにおいてこれらの特徴が１命令ごとに特定されるのを可能にする。書き込みマスクフィールドとデータ要素幅フィールドとの組み合わせは、複数の異なるデータ要素幅に基づいてマスクを適用させる複数の型付き命令を生成する。
【００７１】
クラスＡとクラスＢとの範囲内で見つかる様々な命令テンプレートは、複数の異なる状況下で有益である。本発明のいくつかの実施形態において、プロセッサ内の複数の異なるプロセッサまたは複数の異なるコアは、クラスＡのみ、クラスＢのみ、または両方のクラスをサポートしてもよい。例えば、汎用コンピューティングを意図したハイパフォーマンス汎用性アウトオブオーダコアは、クラスＢだけをサポートしてもよく、グラフィクスおよび／またはサイエンス（スループット）演算を主たる目的とするコアは、クラスＡのみをサポートしてもよく、両方を意図したコアは、両方をサポートしてもよい（もちろん、両方のクラスからの複数のテンプレートおよび複数の命令の全てを含むわけではないが両方クラスからの複数のテンプレートと複数の命令とからなるいくつかのミックスを有するコアは本発明の範囲内にある）。また、単一のプロセッサは、複数のコアを有してもよく、それらの全てが同じのクラスをサポートし、または異なるコアが異なるクラスをサポートする。例えば、別個のグラフィクスと汎用コアとを有するプロセッサにおいて、グラフィクスおよび／またはサイエンス的演算を主な目的とする複数のグラフィクスコアの１つは、クラスＡのみをサポートしてもよく、一方で、汎用コアのうちの１または複数は、クラスＢのみをサポートする汎用コンピューティングを意図したアウトオブオーダ実行およびレジスタリネーミングを有する複数のハイパフォーマンス汎用コアであってもよい。別個のグラフィクスコアを持たない別のプロセッサは、クラスＡおよびクラスＢの両方をサポートする１または複数の汎用インオーダまたはアウトオブオーダコアを有してもよい。もちろん、１つのクラスからの特徴もまた、本発明の複数の異なる実施形態において他のクラスで実装可能である。高水準言語で書かれている複数のプログラムは、様々な異なる実行可能な形式に換えてもよい（例えば、ジャストインタイムにコンパイルまたは静的にコンパイルする）。そのような形式には、（１）実行用のターゲットプロセッサによってサポートされるクラス（複数可）の複数の命令のみを有する形式、または、（２）全てのクラスの複数の命令からなる複数の異なる組み合わせを用いて書かれている複数の別のルーチンを有し、かつコードを目下実行しているプロセッサによってサポートされる命令に基づいて実行するべく複数のルーチンを選択する制御フローコードを有する形式、が含まれる。
【００７２】
図１１Ａ〜１１Ｄは、本発明の複数の実施形態に係る例示的な特有のベクトルフレンドリ命令フォーマットを例示するブロック図である。図１１Ａ〜１１Ｄは、それが複数のフィールドのロケーション、サイズ、インタプリテーション、および順序と、それらのフィールドのいくつかの複数の値とを特定するという意味で特有である特有のベクトルフレンドリ命令フォーマット２３００を示す。特有のベクトルフレンドリ命令フォーマット２３００は、ｘ８６命令セットを拡張するために用いられてもよく、したがって複数のフィールドのいくつかは、既存のｘ８６命令セットおよびその拡張（例えば、ＡＶＸ）に使用されたものと類似または同じである。このフォーマットは、複数の拡張を有する既存のｘ８６命令セットのプレフィックス符号化フィールド、実オペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、および即値フィールドと整合性を保つ。図１１Ａ〜１１Ｄからの複数のフィールドがマッピングされる図１０Ａおよび１０Ｂの複数のフィールドは、例示される。
【００７３】
理解するべきことは、本発明の複数の実施形態は、例示目的のための汎用ベクトルフレンドリ命令フォーマット２２００のコンテキストとの関連で、特有のベクトルフレンドリ命令フォーマット２３００に関連して説明されるにもかかわらず、本発明は、クレームされた場合を除き、特有のベクトルフレンドリ命令フォーマット２３００に限定されない。例えば、汎用ベクトルフレンドリ命令フォーマット２２００は様々なフィールド用の種々の適用可能サイズを予測する一方で、特有のベクトルフレンドリ命令フォーマット２３００は、具体的サイズのフィールドを有するものとして示される。具体例を用いて、データ要素幅フィールド２２６４は、特有のベクトルフレンドリ命令フォーマット２３００の唯一のビットフィールドとして例示される一方で、本発明は、そのようには限定されない（すなわち、汎用ベクトルフレンドリ命令フォーマット２２００はデータ要素幅フィールド２２６４の他のサイズを予測する）。
【００７４】
汎用ベクトルフレンドリ命令フォーマット２２００は、図１１Ａに図示される順序で、以下に挙げた以下の複数のフィールドを含む。ＥＶＥＸプレフィックス（バイト０〜３）２３０２  −  ４バイト形式で符号化される。フォーマットフィールド２２４０フィールド（ＥＶＥＸバイト０、ビット［７：０］）−第１のバイト（ＥＶＥＸバイト０）は、フォーマットフィールド２２４０であり、それは０ｘ６２（本発明の一実施形態においてベクトルフレンドリ命令フォーマットを識別するために用いられる固有値）を含む。第２から第４のバイト（ＥＶＥＸバイト１〜３）は、特定の機能を提供するいくつかのビットフィールドを含む。
【００７５】
ＲＥＸフィールド２３０５（ＥＶＥＸバイト１、ビット［７−５］）  −  ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）、および２２５７ＢＥＸバイト１、ビット［５］−Ｂ）からなる。ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂビットフィールドは、対応する複数のＶＥＸビットフィールドと同様の機能を提供し、１の補数形式を用いて符号化される。すなわち、ＺＭＭＯは１１１１Ｂとして符号化され、ＺＭＭ１５は００００Ｂとして符号化される。複数の命令の複数の他のフィールドは、当技術分野で知られているように、複数のレジスタインデックスの下位３ビットを符号化（ｒｒｒ、ｘｘｘ、およびｂｂｂ）するので、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂを追加することによって、Ｒｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂが形成可能である。
【００７６】
ＲＥＸ'フィールド２２１０  −  これは、ＲＥＸ'フィールド２２１０の第１の部分であり、拡張３２レジスタセットの上位１６または下位１６ＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）のいずれかを符号化するために用いられる。本発明の一実施形態において、このビットは、以下に示されるように他のものと共に実オペコードバイトが６２であるが、ＭＯＤ  Ｒ／Ｍフィールド（後述）では、ＭＯＤフィールドの値１１を受け付けないＢＯＵＮＤ命令から識別されるべくビット反転形式で格納される（周知のｘ８６  ３２ビットモードで）。本発明の複数の代替実施形態は、これを格納せず、他は反転形式で下記の複数のビットを示した。１の値は、下位の１６個のレジスタを符号化するために用いられる。言い換えれば、Ｒ'Ｒｒｒｒは、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、および複数の他のフィールドからの他のＲＲＲを組み合わせることによって、形成される。
【００７７】
オペコードマップフィールド２３１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）−そのコンテンツは暗黙的なリーディングオペコードバイト（ＯＦ、ＯＦ３８、またはＯＦ３）を符号化する。データ要素幅フィールド２２６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）は、表記ＥＶＥＸ．Ｗによって表される。ＥＶＥＸ．Ｗは、データタイプの粒度（サイズ）（３２ビットデータ要素または６４ビットデータ要素のいずれか）を決定するために用いられる。ＥＶＥＸ．ｖｖｖｖ２３２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割は以下のものを含んでもよい。（１）ＥＶＥＸ．ｖｖｖｖは、反転（１の補数）形式に特定された第１のソースレジスタオペランドを符号化し、２またはそれ以上のソースオペランドを有する複数の命令に有効である。（２）ＥＶＥＸ．ｖｖｖｖは、特定のベクトルシフト用の１の補数形式で特定されるデスティネーションレジスタオペランドを符号化する。あるいは、（３）ＥＶＥＸ．ｖｖｖｖはいかなるオペランドも符号化せず、フィールドはリザーブされて１１１１ｂを含まなければならない。したがって、ＥＶＥＸ．ｖｖｖｖフィールド２３２０は、反転（１の補数）形式で格納された第１のソースレジスタスペシファイヤの４つの下位ビットを符号化する。命令に応じて、追加の異なるＥＶＥＸビットフィールドは、スペシファイヤサイズを３２レジスタまで延ばすために用いられる。ＥＶＥＸ．Ｕ２２６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）  −  もしＥＶＥＸ．Ｕ＝０ならば、それはクラスＡまたはＥＶＥＸ．Ｕ０を示す；もしＥＶＥＸ．Ｕ＝１ならば、それはクラスＢまたはＥＶＥＸ．Ｕ１を示す。
【００７８】
プレフィックス符号化フィールド２３２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）  −  は、基本演算フィールド用の複数の追加のビットを提供する。ＥＶＥＸプレフィックス形式のレガシーＳＳＥ命令に対するサポートを提供することに加えて、このことは、ＳＩＭＤプレフィックスをコンパクト化する利益も有する（ＳＩＭＤプレフィックスを表すために１バイトを必要とするのではなく、ＥＶＥＸプレフィックスは２ビットのみを必要とする）一実施形態において、レガシー形式およびＥＶＥＸプレフィックス形式の両方のＳＩＭＤプレフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を使用する複数のレガシーＳＳＥ命令をサポートするべく、これらのレガシーＳＩＭＤプレフィックスはＳＩＭＤプレフィックス符号化フィールドに符号化され、ランタイム時、デコーダのＰＬＡの提供に先立って、レガシーＳＩＭＤプレフィックスに拡張される（したがって、ＰＬＡは、変形なしでこれらのレガシー命令のレガシーおよびＥＶＥＸフォーマットの両方を実行できる）。より新しい複数の命令は、ＥＶＥＸプレフィックス符号化フィールドコンテンツをオペコードエクステンションとして直接用いることが可能である。しかし、複数の特定の実施形態は、一貫性のために同様の様式で拡張するが、これらのレガシーＳＩＭＤプレフィックスによって複数の異なる意味を特定することを可能にする。代替実施形態は、２ビットＳＩＭＤプレフィックス符号化をサポートするべく、ＰＬＡを再設計してもよいので、拡張を必要としない。
【００７９】
アルファフィールド２２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ；ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．書き込みマスク制御、およびＥＶＥＸ．Ｎとしても知られており、また、αとともに図示されている）  −  先述したように、このフィールドは、コンテキストに特有である。ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、ＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒ１、ＥＶＥＸ．ＬＬＯ、ＥＶＥＸ．ＬＬＢとしても知られており、また、βββにとともに図示されている）  −  先述したように、このフィールドはコンテキストに特有である。
【００８０】
ＲＥＸ'フィールド２２１０−これはＲＥＸ'フィールドの残りであり、拡張３２レジスタセットの上位１６または下位１６を符号化するために用いられてもよいＥＶＥＸ．Ｖビットフィールド（ＥＶＥＸバイト３、ビット［３］―Ｖ）のいずれかである。このビットは、ビット反転形式で格納される。１の値は、下位１６レジスタを符号化するために用いられる。言い換えれば、ｖ'ｖｖｖｖは、ＥＶＥＸ．Ｖ'、ＥＶＥＸ．ｖｖｖｖを組み合わせることによって、形成される。
【００８１】
書き込みマスクフィールド２２７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）−そのコンテンツは先述した書き込みマスクレジスタにあるレジスタのインデックスを特定する。本発明の一実施形態において、特定の値ＥＶＥＸ．ｋｋｋ＝０００は、書き込みマスクが特定の命令に使用されないことを示す特有のふるまいを暗示する（これは、様々なやり方で実装可能であり、すべてのものに対してハードワイヤドされた書き込みマスク、または、マスキングハードウェアを迂回するハードウェアの使用が含まれる）。
【００８２】
リアルオペコードフィールド２３３０（バイト４）は、オペコードバイトとしても知られている。オペコードの一部は、このフィールドで特定される。ＭＯＤ  Ｒ／Ｍフィールド２３４０（バイト５）は、ＭＯＤフィールド２３４２、Ｒｅｇフィールド２３４４、およびＲ／Ｍフィールド２３４６を含む。先述したように、ＭＯＤフィールド２３４２のコンテンツは、メモリアクセスと複数の非メモリアクセス演算との間を識別する。Ｒｅｇフィールド２３４４の役割は、２つの状況に要約され得る。すなわち、デスティネーションレジスタオペランドまたはソースレジスタオペランドを符号化すること、または、オペコードエクステンションとして処理され、任意の命令オペランドを符号化するために用いられないこと、のいずれかである。Ｒ／Ｍフィールド２３４６の役割は、以下のことを含む。すなわち、メモリアドレスを参照する命令オペランドを符号化すること、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかを符号化すること、である。スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）−先述したように、スケールフィールドの２２５０コンテンツは、メモリアドレス発生に用いられる。
【００８３】
ＳＩＢ．ｘｘｘ２３５４およびＳＩＢ．ｂｂｂ２３５６−これらのフィールドのコンテンツは、レジスタインデックスＸｘｘｘおよびＢｂｂｂに関連して前に言及されている。
【００８４】
変位フィールド２２６２Ａ（バイト７―１０）  −      ＭＯＤフィールド２３４２が１０を含む場合、バイト７〜１０が変位フィールド２２６２Ａであり、それはレガシー３２ビット変位（ｄｉｓｐ３２）と同様に作動し、バイト粒度で作動する。変位係数フィールド２２６２Ｂ（バイト７）  −  ＭＯＤフィールド２３４２が０１を含む場合、バイト７は変位係数フィールド２２６２Ｂである。このフィールドのロケーションがレガシーｘ８６命令セットの８ビット変位（ｄｉｓｐ８）であり、バイト粒度で作動する。ｄｉｓｐ８が拡張された符号であることから、それは−１２８および１２７バイトオフセットの間をアドレスし、６４バイトキャッシュラインに関して、ｄｉｓｐ８は、４つの実に有用な値−１２８、−６４、０、および６４に設定され得る８ビットを用いる。より大きな範囲がしばしば必要となることから、ｄｉｓｐ３２が使用される。しかし、ｄｉｓｐ３２は４バイトを必要とする。ｄｉｓｐ８およびｄｉｓｐ３２とは対照的に、変位係数フィールド２２６２Ｂは、ｄｉｓｐ８の再解釈である。変位係数フィールド２２６２Ｂを用いる場合、実際の変位はメモリオペランドアクセス（Ｎ）のサイズによって乗算される変位係数フィールドのコンテンツによって決定される。このタイプの変位は、ｄｉｓｐ８＊Ｎと称される。これは、平均命令長（非常により大きな範囲による以外、変位のために用いられるものの単一バイト）を減らす。そのような圧縮変位は、有効な変位がメモリアクセスの粒度の倍数であり得るから、アドレスオフセットの冗長な下位ビットは符号化される必要はないという、前提に基づく。言い換えれば、変位係数フィールド２２６２Ｂは、レガシーｘ８６命令セット８ビット変位を置換する。したがって、変位係数フィールド２２６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８＊Ｎに多重定義されることを唯一の例外として、レガシーｘ８６命令セット８ビット変位と同様のやり方で符号化される（したがって、複数のＭｏｄＲＭ／ＳＩＢ符号化規則は変化しない）。言い換えれば、変化は、符号化規則または符号化長にはなく、ハードウェアによる変位値のインタプリテーションにのみにある（バイト単位アドレスオフセットを得るべく、メモリオペランドのサイズによって変位をスケーリングする必要がある）。即値フィールド２２７２は、先述したように、動作する。
【００８５】
図１１Ｂは、ブロック図であり、本発明の一実施形態に係わるフルオペコードフィールド２２７４を構成する特有のベクトルフレンドリ命令フォーマット２３００の複数のフィールドを示す。具体的にはフルオペコードフィールド２２７４は、フォーマットフィールド２２４０、基本演算フィールド２２４２、およびデータ要素幅（Ｗ）フィールド２２６４を含む。基本演算フィールド２２４２は、プレフィックス符号化フィールド２３２５、オペコードマップフィールド２３１５、およびリアルオペコードフィールド２３３０を含む。
【００８６】
図１１Ｃは、ブロック図であり、本発明の一実施形態に係るレジスタインデックスフィールド２２４４を構成する特有のベクトルフレンドリ命令フォーマット２３００の複数のフィールドを示す。具体的には、レジスタインデックスフィールド２２４４は、ＲＥＸフィールド２３０５、ＲＥＸ'フィールド２３１０、ＭＯＤＲ／Ｍ．Ｒｅｇフィールド２３４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド２３４６、ＷＷフィールド２３２０、ｘｘｘフィールド２３５４、およびｂｂｂフィールド２３５６を含む。
【００８７】
図１１Ｄは、本発明の一実施形態に係る追加演算フィールド２２５０を構成する特有のベクトルフレンドリ命令フォーマット２３００の複数のフィールドを示すブロック図である。クラス（Ｕ）フィールド２２６８が０を含む場合、それはＥＶＥＸ．Ｕ０（クラスＡ２２６８Ａ）を示す。それが１を含む場合、それはＥＶＥＸ．Ｕｌ（クラスＢ２２６８Ｂ）を示す。Ｕ＝０およびＭＯＤフィールド２３４２が１１（非メモリアクセス演算を示す）を含む場合、アルファフィールド２２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）はｒｓフィールド２２５２Ａと解釈される。ｒｓフィールド２２５２Ａが１（ラウンド処理２２５２Ａ．１）を含む場合、ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）はラウンド制御フィールド２２５４Ａと解釈される。ラウンド制御フィールド２２５４Ａは、１ビットＳＡＥフィールド２２５６と、２ビットラウンド演算フィールド２２５８とを含む。ＲＳフィールド２２５２Ａが０（データ変換２２５２Ａ．２）を含む場合、ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットデータ変換フィールド２２５４Ｂとして解釈される。Ｕ＝０およびＭＯＤフィールド２３４２が００、０１または１０（メモリアクセス演算を示す）を含む場合、アルファフィールド２２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、エビクションヒント（ＥＨ）フィールド２２５２Ｂと解釈され、ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットデータ操作フィールド２２５４Ｃと解釈される。
【００８８】
Ｕ＝１の場合、アルファフィールド２２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は書き込みマスク制御（Ｚ）フィールド２２５２Ｃと解釈される。Ｕ＝１およびＭＯＤフィールド２３４２が１１（非メモリアクセス演算を示す）を含む場合、ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［４］―Ｓ０）の一部分はＲＬフィールド２２５７Ａと解釈される。それが１（ラウンド２２５７Ａ．１）を含む場合、ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）の残りは、ラウンド演算フィールド２２５９Ａと解釈される。一方で、ＲＬフィールド２２５７Ａが０（ＶＳＩＺＥ２２５７．Ａ２）を含む場合、ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［６−５］―Ｓ２−１）の残りは、ベクトル長フィールド２２５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］―Ｌ１−０）と解釈される。Ｕ＝１およびＭＯＤフィールド２３４２が００、０１または１０（メモリアクセス演算を示す）を含む場合、ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド２２５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）およびブロードキャストフィールド２２５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）と解釈される。
【００８９】
図１２は、本発明の一実施形態によるレジスタアーキテクチャ２４００のブロック図である。例示した実施形態において、５１２ビット幅の３２ベクトルレジスタ２４１０がある。これらのレジスタはｚｍｍ０からｚｍｍ３１として参照される。下位１６ｚｍｍレジスタの下位順位２５６ビットは複数のレジスタｙｍｍ０〜１６にオーバーレイされている。下位１６ｚｍｍレジスタの下位順位１２８ビット（複数のｙｍｍレジスタの下位順位１２８ビット）は、複数のレジスタｘｍｍ０〜１５にオーバーレイされている。特有のベクトルフレンドリ命令フォーマット２３００は、以下の表に示されるように、オーバーレイレジスタファイル上で動作する。
【表１】
2015532477.tif 000018
【００９０】
言い換えれば、ベクトル長フィールド２２５９Ｂは、最大長と１または複数の他のより短い長さとの間を選択し、ここで、各々のそのようなより短い長さは、先行する長さの半分の長さであり、ベクトル長フィールド２２５９Ｂを持たない複数の命令テンプレートは、最大ベクトル長で機能する。さらに、一実施形態において、特有のベクトルフレンドリ命令フォーマット２３００のクラスＢ命令テンプレートは、パックドまたはスカラ単／倍精度浮動小数点データとパックドまたはスカラ整数データとで機能する。複数のスカラ演算は、ＺＭＭ／ｙｍｍ／ＸＭＭレジスタで最も低い順序データ要素ポジションに対して実行される複数の演算である。複数の高位データ要素ポジションは、実施形態に応じて、それらが命令に先立ったロケーションと同じまま、または、ゼロにされるかのいずれかである。
【００９１】
複数の書き込みマスクレジスタ２４１５  −  例示される実施形態において、８つの書き込みマスクレジスタ（ｋ０からｋ７）があり、各々のサイズは６４ビットである。代替的な複数の実施形態において、書き込みマスクレジスタ２４１５はサイズが１６ビットである。先述したように、本発明の一実施形態において、ベクトルマスクレジスタｋ０は、書き込みマスクとして使用できない。通常ｋ０を示す符号化が書き込みマスクに用いられる場合、それが０ｘＦＦＦＦのハードワイヤドされた書き込みマスクを選択して、その命令に対する書き込みマスキングを無効にする。
【００９２】
複数の汎用レジスタ２４２５  −  アドレスメモリオペランドに対して、複数の既存のｘ８６アドレッシングモードと共に用いられる１６個の６４ビット汎用レジスタが存在する。これらのレジスタは、名称ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、およびＲ８からＲ１５によって参照される。
【００９３】
スカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）２４４５、別名ＭＭＸパック型整数フラットレジスタファイル２４５０  −  例示した実施形態では、ｘ８７スタックは、ｘ８７命令セット拡張を用いている３２／６４／８０ビット浮動小数点データに対して複数のスカラ浮動小数点演算を実行するために用いられる８要素スタックである。一方で、ＭＭＸレジスタは、６４ビットパック型整数データで演算を実行するために、ならびに、ＭＭＸおよびＸＭＭレジスタの間で実行されるいくつかの演算用のオペランドを保持するために用いられる。
【００９４】
本発明の複数の代替実施形態は、より広いかより狭いレジスタを用いてもよい。さらに、本発明の複数の代替実施形態は、より大きい、より少ない、または異なる、複数のレジスタファイルおよび複数のレジスタを用いてもよい。
【００９５】
複数のプロセッサコアは、複数の異なる方法で、複数の異なる目的のために、さらに、複数の異なるプロセッサで、実装されてもよい。例えば、そのような複数のコアの複数の実装は、（１）汎用コンピューティングを意図した汎用インオーダコア、（２）汎用コンピューティングを意図したハイパフォーマンス汎用アウトオブオーダコア、（３）主にグラフィクスおよび／またはサイエンス（スループット）演算を意図した特定用途向けコアを含でもよい。複数の異なるプロセッサの複数の実装は、（１）汎用コンピューティングを意図した１または複数の汎用インオーダコアおよび／または汎用コンピューティングを意図した１または複数のアウトオブオーダコアを含むＣＰＵと、（２）グラフィクスおよび／またはサイエンス（スループット）を主に意図した１または複数の特定用途向けコアを含むコプロセッサとを含んでもよい。そのような複数の異なるプロセッサは、複数の異なるコンピュータシステムアーキテクチャをもたらし、それには、（１）ＣＰＵとは別のチップ上のコプロセッサ、（２）ＣＰＵと同じパッケージの別個のダイ上のコプロセッサ、（３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、場合によっては、統合グラフィクスおよび／またはサイエンス（スループット）ロジックなどの特定用途向けロジック、または、特定用途向けコアと称される）、ならびに、（４）同じダイ上に上述ＣＰＵ（場合によっては、アプリケーションコア（複数可）またはアプリケーションプロセッサ（複数可）と称される）、上述のコプロセッサ、および追加の機能性を含んでもよいチップ上のシステムが含まれてもよい。複数の例示的なコアアーキテクチャを次に説明し、その後、複数の例示的なプロセッサおよびコンピュータアーキテクチャを説明する。
【００９６】
図１３Ａは、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング（本発明の複数の実施形態に係るアウトオブオーダ発行／実行パイプライン）の両方を示すブロック図である。
【００９７】
図１３Ｂは、インオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミングの両方（本発明の複数の実施形態に係るプロセッサに含まれるべきアウトオブオーダ発行／実行アーキテクチャコア）を示すブロック図である。実線で囲まれた複数のボックスは、インオーダパイプラインとインオーダコアとを示し、一方で、点線で囲まれた複数のボックスの任意の加算はレジスタリネーミング（アウトオブオーダ発行／実行パイプラインおよびコア）を示す。インオーダ態様がアウトオブオーダ態様のサブセットであるので、アウトオブオーダ態様を説明する。
【００９８】
図１３Ａの中で、プロセッサ・パイプライン２５００は、フェッチステージ２５０２（長さデコードステージ２５０４）、デコードステージ２５０６、アロケーションステージ２５０８、リネームステージ２５１０、スケジューリング（ディスパッチまたは発行としても知られている）ステージ２５１２、レジスタリード／メモリリードステージ２５１４、実行ステージ２５１６、ライトバック／メモリライトステージ２５１８、例外処理ステージ２５２２、およびコミットステージ２５２４を含む。図１３Ｂは、実行エンジン部２５５０に連結したフロントエンド部２５３０を含み、これら両方ともメモリ部２５７０に連結したプロセッサコア２５９０を示す。コア２５９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドもしくは別のコアタイプであってもよい。さらに別のオプションとして、コア２５９０は特定用途向けコア、例えば、ネットワークもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィクスプロセッシングユニット（ＧＰＧＰＵ）コア、グラフィクスコア、またはその他、などであってもよい。
【００９９】
フロントエンド部２５３０は、命令キャッシュ部２５３４に連結する分岐予測部２５３２を含み、ここで、命令キャッシュ部２５３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ）２５３６に連結し、ＴＬＢ２５３６は命令フェッチ部２５３８に連結し、命令フェッチ部２５３８はデコード部２５４０に連結している。デコード部２５４０（またはデコーダ）は、複数の命令を復号化してもよく、それらの命令は出力として、１または複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を生成する。これらは、複数のオリジナル命令から復号化、さもなければそれらを反映、またはそれらから派生される。デコード部２５４０は、様々な異なるメカニズムを用いて実装でされてもよい。複数の適切なメカニズムの複数の例として、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）、その他が挙げられる。一実施形態において、コア２５９０は、複数の特定のマクロ命令用のマイクロコードを格納するマイクロコードＲＯＭまたは他の媒体を含む（例えば、デコード部２５４０またはさもなければフロントエンド部２５３０内）。デコード部２５４０は、実行エンジン部２５５０のリネーム／アロケータ部２５５２に連結される。
【０１００】
実行エンジン部２５５０は、リタイアメント部２５５４に連結したリネーム／アロケータ部２５５２と、一組の１または複数のスケジューラ部（複数可）２５５６とを含む。スケジューラ部（複数可）２５５６は、複数のリザベーションステーション、中央命令ウィンドウ、その他を含む任意の数の異なるスケジューラを表す。スケジューラ部（複数可）２５５６は、複数の物理レジスタファイル（複数可）部（複数可）２５５８に連結されている。複数の物理レジスタファイル（複数可）部２５５８のそれぞれは、１または複数の物理レジスタファイル、１または複数の異なるデータタイプ、例えば、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）、その他を格納する様々なもの、を表す。
【０１０１】
一実施形態において、物理レジスタファイル（複数可）部２５５８は、ベクトルレジスタ部、書き込みマスクレジスタ部、およびスカラレジスタ部を有する。これらのレジスタ部は、アーキテクチャ上の複数のベクトルレジスタ、複数のベクトルマスクレジスタ、および複数の汎用レジスタを提供するものであってもよい。物理レジスタファイル（複数可）部（複数可）２５５８には、様々な方法を例示するべく、リタイアメント部２５５４がオーバーラップされている。これらのやり方では、レジスタリネーミングおよびアウトオブオーダ実行を実装可能とする（例えば、リオーダバッファ（複数可）およびリタイアレジスタファイル（複数可）を用いて、フューチャーファイル（複数可）、ヒストリーファイル（複数可）、およびリタイアレジスタファイル（複数可）を用いて、複数のレジスタマップと複数のレジスタマップからなるプールとを用いて、その他）。リタイアメント部２５５４および物理レジスタファイル（複数可）部（複数可）２５５８は、実行クラスタ（複数可）２５６０に連結される。
【０１０２】
実行クラスタ（複数可）２５６０は、一組の１または複数の実行部２５６２と一組の１または複数のメモリアクセス部２５６４とを含む。実行部２５６２は、様々な演算（例えば、シフト、加算、減算、乗算）を実行可能であり、様々なタイプのデータ（例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点）上で演算可能である。いくつかの実施形態が複数の特定関数または複数の関数からなるセットに対して専用の多くの実行部を含んでもよい一方で、複数の他の実施形態は、すべての関数をすべて実行するたった１つの実行部または複数の実行部を含んでもよい。
【０１０３】
スケジューラ部（複数可）２５５６、物理レジスタファイル（複数可）部（複数可）２５５８、および実行クラスタ（複数可）２５６０は、場合によっては、複数として示される。なぜなら、複数の特定の実施形態が複数の特定のタイプのデータ／演算に対して別々のパイプラインを生成するからである（例えば、スカラ整数パイプライン、スカラ浮動小数点／パック型整数／パック型浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、ならびに／あるいはメモリアクセスパイプラインであり、それらは、各々、それ自体のスケジューラ部、物理レジスタファイル（複数可）部および／または実行クラスタを有し、さらに、別々のメモリアクセスパイプラインの場合、複数の特定の実施形態は、このパイプラインの実行クラスタだけがメモリアクセス部（複数可）２５６４を有する実装である）。理解されるべきことは、別々のパイプラインが用いられる場合、これらのパイプラインのうちの１または複数はアウトオブオーダ発行／実行であり、残りはインオーダであってもよい。
【０１０４】
複数のメモリアクセス部２５６４からなるセットはメモリ部２５７０に連結されており、このメモリ部２５７０は、データキャッシュ部２５７４に連結したデータＴＬＢ部２５７２を含み、データキャッシュ部２５７４はレベル２（Ｌ２）キャッシュ部２５７６に連結している。１つの例示的な実施形態において、メモリアクセス部２５６４はロード部、ストアアドレス部、およびストアデータ部を含んでもよく、それらのそれぞれはメモリ部２５７０内のデータＴＬＢ部２５７２に連結されている。命令キャッシュ部２５３４は、メモリ部２５７０のレベル２（Ｌ２）キャッシュ部２５７６に、さらに連結されている。Ｌ２キャッシュ部２５７６は、キャッシュの１または複数の他のレベルに連結され、最終的にはメインメモリに連結される。
【０１０５】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン２５００を実装してもよい。（１）命令フェッチ２５３８は、フェッチおよびレングスデコーディングステージ２５０２および２５０４を実行する。（２）デコード部２５４０はデコードステージ２５０６を実行する。（３）リネーム／アロケータ部２５５２はアロケーションステージ２５０８およびリネームステージ２５１０を実行する。（４）スケジューラ部（複数可）２５５６は、スケジュールステージ２５１２を実行する。（５）物理レジスタファイル（複数可）部（複数可）２５５８およびメモリ部２５７０はレジスタリード／メモリリードステージ２５１４を実行する。実行クラスタ２５６０は、実行ステージ２５１６を実行する。（６）メモリ部２５７０および物理レジスタファイル（複数可）部（複数可）２５５８は、ライトバック／メモリライトステージ２５１８を実行する。（７）様々なユニットは例外処理ステージ２５２２に関わってもよい。（８）リタイアメント部２５５４と物理レジスタファイル（複数可）部（複数可）２５５８は、コミットステージ２５２４を実行する。
【０１０６】
コア２５９０は、本明細書に説明された命令（複数可）を含む１または複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンで追加された、いくつかの拡張を有する）、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングズのＡＲＭ命令セット（ＮＥＯＮなどの、オプションの複数の追加拡張を有する））、をサポートしてもよい。一実施形態において、コア２５９０はパックドデータ命令セット拡張をサポートするためのロジック（例えば、先述したＡＶＸ１、ＡＶＸ２、および／または汎用ベクトルフレンドリ命令フォーマットのいくつかの形態（Ｕ＝０および／またはＵ＝１）を含み、それによって、パックドデータを用いて実行される多くのマルチメディアアプリケーションにより用いられる複数の演算を可能にする。
【０１０７】
理解するべきことは、コアがマルチスレッディング（２またはそれ以上の演算またはスレッドの並列セットを実行すること）をサポートしていてもよく、およびタイムスライスドマルチスレッディング、同時マルチスレッディング（単一の物理コアは、物理コアが同時にマルチスレッディングする複数のスレッドの各々に対して論理コアを提供）、またはそれらの組み合わせ（例えば、タイムスライスドフェッチおよび復号化、ならびに、その後、Ｉｎｔｅｌ（登録商標）ハイパースレッディングテクノロジーなどで、同時マルチスレッディング）を含む様々なやり方でそうしてもよいこと、である。
【０１０８】
レジスタリネーミングはアウトオブオーダ実行との関連で説明されている一方で、理解するべきことは、レジスタリネーミングはインオーダーアーキテクチャで使用されてもよいことである。プロセッサの図示の実施形態はまた別々の命令およびデータキャッシュ部２５３４／２５７４および共有Ｌ２キャッシュ部２５７６を含む一方で、別の実施形態は、例えばレベル１（Ｌ１）内部キャッシュ、または複数レベルの内部キャッシュなどの命令およびデータの両方のための単一の内部キャッシュを有していてもよい。いくつかの実施形態において、システムは内部キャッシュおよびコアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでいてもよい。あるいは、キャッシュのすべてがコアおよび／またはプロセッサの外部にあってもよい。
【０１０９】
図１４Ａおよび図１４Ｂは、コアがチップ内のいくつかのロジックブロック（同じタイプおよび／または異なるタイプの他のコアを含む）の１つであるより具体的かつ例示的なインオーダコアアーキテクチャのブロック図を示す。複数のロジックブロックは、高帯域幅のインターコネクトネットワーク（例えば、リングネットワーク）を介して、アプリケーションに応じて、いくつかの固定機能ロジック、メモリＩ／Ｏインターフェース、および他の必要なＩ／Ｏロジックと通信する。
【０１１０】
図１４Ａは、本発明の複数の実施形態に係るオンダイインターコネクトネットワーク２６０２への接続およびレベル２（Ｌ２）キャッシュ２６０４のローカルサブセットと共に、単一のプロセッサコアを示すブロック図である。一実施形態において、命令デコーダ２６００はパックドデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ２６０６はスカラおよびベクトル部内のキャッシュメモリへのローレイテンシー（低遅延）アクセスを可能とする。一実施形態において（設計を単純化するために）、スカラ部２６０８およびベクトル部２６１０は別々のレジスタセット（それぞれ、スカラレジスタ２６１２およびベクトルレジスタ２６１４）を使用し、それらの間で転送されるデータがメモリに書き込まれ、その後レベル１（Ｌ１）キャッシュ２６０６から再度読み出される。一方で、本発明の複数の代替実施形態は異なるアプローチ（例えば、単一のレジスタセットを使用するか、または２つのレジスタファイル間で転送されるデータが書き込みおよび再度読み出されないことを可能にする通信パスを含む）を使用してもよい。
【０１１１】
Ｌ２キャッシュ２６０４のローカルサブセットはプロセッサコアあたり１つの別々のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアはＬ２キャッシュ２６０４の独自のローカルサブセットへの直接アクセスパスを有する。プロセッサコアにより読み取られたデータは、Ｌ２キャッシュのサブセット２６０４に格納され、他のプロセッサコアが自分自身のローカルＬ２キャッシュのサブセットへアクセスすることと並行に、迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは独自のＬ２キャッシュのサブセット２６０４に格納され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは共有データのコヒーレンシを保証する。リングネットワークは、プロセッサコア、Ｌ２キャッシュおよび他のロジックブロックのようなエージェントをチップ内で互いに通信することを可能にするべく、双方向性である。各リングデータパスは方向ごとに１０１２ビット幅である。
【０１１２】
図１４Ｂは、本発明の複数の実施形態に係る図１４Ａ内のプロセッサコアの部分拡大図である。図１４Ｂは、Ｌ１キャッシュ２６０４のＬ１データキャッシュ２６０６Ａ部分、ならびに、ベクトル部２６１０および複数のベクトルレジスタ２６１４に関するより詳細なこと、を含む。具体的には、ベクトル部２６１０は、整数、単精度浮動小数点、倍精度浮動小数点命令のうちの１または複数を実行する、１６幅のベクトル処理部（ＶＰＵ）（１６幅のＡＬＵ２６２８を参照）である。ＶＰＵはスウィズル部２６２０でのレジスタの入力のスウィズリング（ベクトル要素の入れ替え）、複数の数値変換部２６２２Ａ〜Ｂでの数値変換、およびメモリ入力上のレプリケーション部２６２４でのレプリケーションをサポートする。書き込みマスクレジスタ２６２６は、結果として生じる複数のベクトル書き込みをプレディケートすることを可能にする。
【０１１３】
図１５は本発明の複数の実施形態に係る１より多くのコアを有していてもよい、統合メモリコントローラを有していてもよい、および統合グラフィクスを有していてもよいプロセッサ２７００のブロック図である。図１５において実線で囲まれた複数のボックスは、シングルコア２７０２Ａと、システムエージェント２７１０と、１または複数のバスコントローラ部２７１６からなるセットとを有するプロセッサ２７００を示す。一方で、点線で囲まれた複数のボックスのオプション追加部が複数のコア２７０２Ａ〜Ｎと、システムエージェント部２７１０内の１または複数の統合メモリコントローラ部（複数可）２７１４からなるセットと、特定用途向けロジック２７０８とを有する別のプロセッサ２７００を示す。
【０１１４】
このように、プロセッサ２７００の異なる実装は、（１）統合グラフィクスおよび／またはサイエンス（スループット）ロジック（１または複数のコアを含んでいてもよい）を統合されている特定用途向けロジック２７０８を有するＣＰＵ、および１または複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、それら２つの組み合わせ）であるコア２７０２Ａ〜Ｎ、（２）主にグラフィクスおよび／またはサイエンス（スループット）を対象とした多数の特定用途向けコアである複数のコア２７０２Ａ〜Ｎを有するコプロセッサ；および３）多数の汎用インオーダコアである複数のコア２７０２Ａ〜Ｎを有するコプロセッサを含んでいてもよい。このように、プロセッサ２７００は汎用プロセッサ、コプロセッサまたは特定用途向けプロセッサ、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用グラフィクスプロセッシングユニット）、ハイスループットメニー統合型コア（ＭＩＣ）コプロセッサ（３０またはそれよりも多くのコアを含む）、組み込みプロセッサ、またはその他、などであってもよい。プロセッサは１または複数のチップ上に実装されてもよい。プロセッサ２７００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどの、いくつかの処理技術のうちのいずれかを使用した１または複数の基板の一部および／またはその上に実装されてもよい。
【０１１５】
メモリ階層は、コア、セットまたは１または複数の共有キャッシュ部２７０６、および統合メモリコントローラ部２７１４のセットに連結された外部メモリ（不図示）内のキャッシュの１または複数のレベルを含む。共有キャッシュ部２７０６のセットはレベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、またはキャッシュの他のレベル、ラストレベルキャッシュ（ＬＬＣ）、および／またはこれらの組み合わせなどの、１または複数の中間レベルのキャッシュを含んでいてもよい。一実施形態において、リングベースのインターコネクト部２７１２は統合グラフィクスロジック２７０８、共有キャッシュ部２７０６のセット、およびシステムエージェント部２７１０／統合メモリコントローラ部（複数可）２７１４をインターコネクトする一方で、複数の別の実施形態においてそのような複数のユニットとをインターコネクトするための任意の数の周知の技術を使用してもよい。一実施形態において、コヒーレンシは、１または複数の共有キャッシュ部２７０６およびコア２７０２Ａ〜Ｎとの間で保持される。
【０１１６】
いくつかの実施形態において、コア２７０２Ａ〜Ｎのうちの１または複数はマルチスレッディングが可能である。システムエージェント部２７１０はコア２７０２Ａ〜Ｎの調整および操作をするこれらのコンポーネントを含む。システムエージェント部２７１０は、例えばパワーコントロール部（ＰＣＵ）およびディスプレイ部を含んでいてもよい。ＰＣＵは、複数のコア２７０２Ａ〜Ｎおよび統合グラフィクスロジック２７０８の電源状態を調整するために必要なロジックおよび複数のコンポーネントを含んでいてもよい。ディスプレイ部は１または複数の外部接続されたディスプレイの駆動用である。
【０１１７】
複数のコア２７０２Ａ〜Ｎはアーキテクチャ命令セットに関して均質または不均一であってもよい。すなわち、２またはそれ以上のコア２７０２Ａ〜Ｎは同じ命令セットを実行可能であってもよい一方で、他のものはその命令セットまたは異なる命令セットのサブセットのみを実行可能であってもよい。
【０１１８】
図１６から図２０は例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための当技術分野において知られている他のシステム設計および構成もまた適している。概して、本明細書に開示される膨大な種類の、プロセッサおよび／または他の実行ロジックを組み込むことが可能なシステムまたは電子デバイスは概ね適している。
【０１１９】
次に図１６を参照すると、本発明の一実施形態に係るシステム２８００のブロック図が図示される。システム２８００はコントローラハブ２８２０に連結された１または複数のプロセッサ２８１０、２８１５を含んでいてもよい。一実施形態において、コントローラハブ２８２０は、グラフィクスメモリコントローラハブ（ＧＭＣＨ）２８９０および入力／出力ハブ（ＩＯＨ）２８５０（複数の別のチップ上にあってもよい）を含む。ＧＭＣＨ  ２８９０は、メモリ２８４０およびコプロセッサ２８４５に連結されたメモリおよびグラフィクスコントローラを含む。ＩＯＨ２８５０は、入力／出力（Ｉ／Ｏ）デバイス２８６０をＧＭＣＨ２８９０に連結する。あるいは、メモリおよびグラフィクスコントローラの１つまたは両方がプロセッサ内に統合され（本明細書中に説明されるように）、およびメモリ２８４０およびコプロセッサ２８４５がプロセッサ２８１０、およびＩＯＨ  ２８５０を有する単一チップのコントローラハブ２８２０に直接連結される。
【０１２０】
複数の追加のプロセッサ２８１５のオプション機能は図１６内の複数の破線で示される。プロセッサ２８１０、２８１５の各々は、本明細書中に説明される複数のプロセッシングコアのうちの１または複数を含んでいてもよく、プロセッサ２７００のいくつかのバージョンであってもよい。
【０１２１】
メモリ２８４０は、例えばダイナミックランダムアクセスメモリ（ＤＲＡＭ）、位相変化メモリ（ＰＣＭ）、またはそれら２つの組み合わせであってもよい。少なくとも１つの実施形態の場合、コントローラハブ２８２０は、フロントサイドバス（ＦＳＢ）、クイックパスインターコネクト（ＱＰＩ）のようなポイントツーポイントインターフェース、または同様の接続２８９５などのマルチドロップバスを介して、プロセッサ（複数可）２８１０、２８１５と通信する。
【０１２２】
一実施形態において、コプロセッサ２８４５は、特定用途向けプロセッサ、例えば、ハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ、またはその他、などである。一実施形態において、コントローラハブ２８２０は統合グラフィクスアクセラレータを含んでいてもよい。
【０１２３】
物理リソース２８１０、２８１５との間には、アーキテクチャ的、マイクロアーキテクチャ的、熱的、電力消費的な特性、およびその他を含む、複数の長所に関する基準のスペクトルに関して、様々な違いがあり得る。
【０１２４】
一実施形態において、プロセッサ２８１０は一般的なタイプの複数のデータ処理演算を制御する命令を実行する。命令内に埋め込まれたコプロセッサ命令であってもよい。プロセッサ２８１０はこれらのコプロセッサ命令を接続コプロセッサ２８４５により実行されるべきであるタイプのものであるとして認識する。したがって、プロセッサ２８１０はコプロセッサ２８４５に対してコプロセッサバスまたは他のインターコネクト上にこれらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）を発行する。コプロセッサ（複数可）２８４５はこれを受け取り、受け取ったコプロセッサ命令を実行する。
【０１２５】
次に図１７を参照すると、本発明の実施形態に係る第１のより具体的かつ例示的なシステム２９００のブロック図が図示される。図１７に示されるように、マルチプロセッサシステム２９００はポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト２９５０を介して連結された第１のプロセッサ２９７０および第２のプロセッサ２９８０を含む。プロセッサ２９７０および２９８０のそれぞれはプロセッサ２７００のいくつかのバージョンであってもよい。本発明の一実施形態において、プロセッサ２９７０および２９８０はそれぞれプロセッサ２８１０および２８１５である一方で、コプロセッサ２９３８はコプロセッサ２８４５である。別の実施形態において、プロセッサ２９７０および２９８０はそれぞれプロセッサ２８１０およびコプロセッサ２８４５である。
【０１２６】
プロセッサ２９７０および２９８０は統合メモリコントローラ（ＩＭＣ）部２９７２および２９８２それぞれを含んで表示される。プロセッサ２９７０はまたそのバスコントローラ部の一部としてポイントツーポイント（Ｐ−Ｐ）インターフェース２９７６および２９７８を含み、同様に、第２のプロセッサ２９８０は、Ｐ−Ｐインターフェース２９８６および２９８８を含む。
【０１２７】
プロセッサ２９７０、２９８０はＰ−Ｐインターフェース２９７８、２９８８を使用してポイントツーポイント（Ｐ−Ｐ）インターフェース２９５０を介して情報交換してもよい。図１７に示されるように、ＩＭＣ２９７２および２９８２はプロセッサを、それぞれのプロセッサにローカルに接続されたメインメモリの一部であってもよいそれぞれのメモリ、つまりメモリ２９３２およびメモリ２９３４に連結する。プロセッサ２９７０、２９８０は、各々、ポイントツーポイントインターフェース回路２９７６、２９９４、２９８６、２９９８を使用して、個々のＰ−Ｐインターフェース２９５２、２９５４を介したチップセット２９９０との情報交換を、行ってもよい。チップセット２９９０は、ハイパフォーマンスインターフェース２９３９を介してコプロセッサ２９３８と任意選択的に情報交換をしてもよい。一実施形態において、コプロセッサ２９３８は、特定用途向けプロセッサ、例えばハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ、またはその他、などである。
【０１２８】
共有キャッシュ（不図示）はいずれかのプロセッサ内に含まれるかあるいは両方のプロセッサ外であってもよく、プロセッサが低電力モードに配置される場合いずれかのまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納されてもよいように、Ｐ−Ｐインターコネクトを介してまだプロセッサに接続される。チップセット２９９０はインターフェース２９９６を介して第１のバス２９１６に連結されてもよい。一実施形態において、第１のバス２９１６はペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、またはＰＣＩ  Ｅｘｐｒｅｓｓバスまたは別の第３世代Ｉ／Ｏインターコネクトバスなどのバスであってもよいが、本発明の範囲はこれに限定されない。
【０１２９】
図１７に示されるように、様々なＩ／Ｏデバイス２９１４は、第１のバス２９１６を第２のバス２９２０に連結するバスブリッジ２９１８と共に、第１のバス２９１６に連結されてもよい。一実施形態において、１または複数の追加のプロセッサ（複数可）２９１５、例えば、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィクスアクセラレータまたはデジタル信号処理（ＤＳＰ）部など）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサは、第１のバス２９１６に連結される。一実施形態において、第２のバス２９２０はローピンカウント（ＬＰＣ）バスであってもよい。一実施形態において、様々なデバイスは、例えば、キーボードおよび／またはマウス２９２２、通信デバイス２９２７、ならびに命令／コードおよびデータ２９３０を含んでもよいディスクドライブまたは他の大容量ストレージデバイスなどのストレージ部２９２８を有する第２のバス２９２０に、連結されてもよい。さらに、オーディオＩ／Ｏ２９２４は第２のバス２９２０に連結されてもよい。他のアーキテクチャも適用可能であることに留意されたい。例えば、図１７のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
【０１３０】
ここで図１８を参照すると、本発明の実施形態に係る第２のより具体的かつ例示的なシステム３０００のブロック図が図示される。図１８および図１９内の同様の要素は同様の参照番号の関係を有し、図１７の特定の態様は図１８の他の態様を不明瞭にするのを避けるために図１８から省略されている。
図１８はプロセッサ２９７０、２９８０が統合型メモリおよびＩ／Ｏ制御ロジック（「ＣＬ」）２９７２および２９８２をそれぞれ含んでいてもよいことを示す。このように、ＣＬ２９７２、２９８２は統合メモリコントローラ部を含み、Ｉ／Ｏ制御ロジックを含む。  図１８はメモリ２９３２、２９３４がＣＬ２９７２、２９８２に連結されていることだけでなく、Ｉ／Ｏデバイス３０１４もまた制御ロジック２９７２、２９８２に連結されていることも示す。レガシーＩ／Ｏデバイス３０１５はチップセット２９９０に連結される。
【０１３１】
次に図１９を参照すると、本発明の実施形態に係るＳｏＣ３１００のブロック図が図示される。図１５内の同様の要素が同様の参照番号を付してある。また、点線で囲まれた複数のボックスは、より高度なＳｏＣ上のオプション機能である。図１９において、インターコネクト部（複数可）３１０２は：１または複数のコア２０２Ａ〜Ｎおよび共有キャッシュ部（複数可）２７０６のセットを含むアプリケーションプロセッサ３１１０、システムエージェント部２７１０、バスコントローラ部（複数可）２７１６、統合メモリコントローラ部（複数可）２７１４、統合グラフィクスロジック、画像処理プロセッサ、オーディオプロセッサ、ビデオプロセッサを含んでいてもよいセットまたは１または複数のコプロセッサ３１２０、スタティックランダムアクセスメモリ（ＳＲＡＭ）部３１３０、ダイレクトメモリアクセス（ＤＭＡ）部３１３２、および１または複数の外部ディスプレイを連結するためのディスプレイ部３１４０に連結される。一実施形態において、コプロセッサ（複数可）３１２０は、特定用途向けプロセッサ、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組み込みプロセッサ、またはその他、などを含む。
【０１３２】
明細書に開示された複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせで実装されてもよい。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性メモリおよび／またはストレージ要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備えるプログラマブルなシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてもよい。
【０１３３】
図１７に示されるコード２９３０などのプログラムコードは本明細書に説明された複数の関数を実行し、出力情報を生成するために入力命令に適用されてもよい。出力情報は公知の様式で１または複数の出力デバイスに適用されてもよい。本願の目的のために、プロセッシングシステムは、例えばデジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０１３４】
プログラムコードはプロセッシングシステムと通信するためにハイレベルプロシージャルまたはオブジェクト指向プログラミング言語で実装されてもよい。必要に応じて、プログラムコードは、アセンブリ言語または機械言語で実装されてもよい。実際に、本明細書に説明されたメカニズムは任意の特定のプログラミング言語の範囲に限定されない。いずれの場合であっても、言語はコンパイラまたはインタープリタ型言語であってもよい。
【０１３５】
少なくとも１つの実施形態の１または複数の態様は、機械により読み取られた場合、本明細書中に説明された複数の技術を実行するためのロジックを機械に組み立てさせるプロセッサ内の様々なロジックを表す、機械可読媒体上に格納された複数の代表的な命令によって、実装されてもよい。「複数のＩＰコア」として知られているそのような複数の表現は、有形の機械可読媒体上に格納され、実際にロジックまたはプロセッサを作る製造機械にロードするべく、様々な顧客または製造施設に供給されてもよい。
【０１３６】
そのような複数の機械可読ストレージ媒体は、これらに限定されないが、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、および光磁気ディスクを含む任意の他のタイプ、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、位相変化メモリ（ＰＣＭ）、磁気または光カード、または電子命令を格納するのに適した媒体の任意の他のタイプなどの半導体デバイスなどのストレージ媒体を含む、機械またはデバイスにより製造または形成された複数の構成要素の非一時的な、有形の構成を含んでいてもよい。
【０１３７】
したがって、本発明の複数の実施形態は、本明細書に説明された命令を含む、または構造、回路、装置、プロセッサ、および／またはシステムの特徴を規定するハードウェア記述言語（ＨＤＬ）などの設計データを含む非一時的な、有形の機械可読媒体をも含む。そのような実施形態はまたプログラムプロダクトと称されることもある。
【０１３８】
場合によっては、命令変換部は命令をソース命令セットからターゲット命令セットに変換するために使用されてもよい。例えば、命令変換部は命令をコアにより処理される１または複数の他の命令にトランスレート（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して）、モーフ（モーフィング）、エミュレート、またはそうでなければ変換してもよい。命令変換部はソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装されてもよい。命令変換部はプロセッサ上、プロセッサ外、または一部がプロセッサ上および一部がプロセッサ外であってもよい。
【０１３９】
図２０は、本発明の複数の実施形態に係るターゲット命令セット内の複数のバイナリ命令にソース命令セット内の複数のバイナリ命令を変換するためのソフトウェア命令変換部の使用を対比するブロック図である。図示の実施形態において、代替的に命令変換部はソフトウェア、ファームウェア、ハードウェア、またはそれらの様々な組み合わせで実装されてもよいが、命令変換部はソフトウェア命令変換部である。図２０は少なくとも１つのｘ８６命令セットコア３２１６を有するプロセッサによりネイティブに実行されてもよいｘ８６バイナリコード３２０６を生成させるためのｘ８６コンパイラ３２０４を使用してコンパイルされてもよい高水準言語３２０２でのプログラムを示す。少なくとも１つのｘ８６命令セットコア３２１６を有するプロセッサは互換性のある実行またはそうでなければ、（１）Ｉｎｔｅｌ（登録商標）ｘ８６命令セットコアの命令セットの実質的な部分、または（２）少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌ（登録商標）プロセッサと実質的に同じ結果を達成するために、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌ（登録商標）プロセッサ上で実行することを目標とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを処理することにより、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌ（登録商標）プロセッサと実質的に同じ関数を実行することができる任意のプロセッサを表す。ｘ８６コンパイラ３２０４は、追加のリンク処理を有してまたは有せずに、少なくとも１つのｘ８６命令セットコア３２１６を有するプロセッサ上で実行されることができる、ｘ８６バイナリコード３２０６（例えば、オブジェクトコード）を生成するべく動作可能であるコンパイラを表す。同様に、図２０は、高水準言語３２０２でのプログラムを示し、このプログラムは、少なくとも１つのｘ８６命令セットコア３２１４を有しないプロセッサ（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セットを実行する、および／またはカリフォルニア州サニーベールのＡＲＭホールディングズのＡＲＭ命令セットを実行するコアを有するプロセッサ）によりネイティブに実行されてもよい別の命令セットバイナリコード３２１０を生成する別の命令セットコンパイラ３２０８を使用してコンパイルされてもよい。命令変換部３２１２は、ｘ８６命令セットコア３２１４を有しないプロセッサによって、ｘ８６バイナリコード３２０６をネイティブに実行されてもよいコードに変換するために、使用される。この変換後のコードは、別の命令セットバイナリコード３２１０と同じである可能性が高いわけではない。なぜなら、このことが可能な命令変換部は、作製が難しいためである。しかしながら、変換後のコードは一般的な動作を達成し、別の命令セットからの命令で構成される。このように、命令変換部３２１２は、エミュレーション、シミュレーション、または他の任意の処理を介して、ｘ８６命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがｘ８６バイナリコード３２０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
【０１４０】
一実施形態によれば、プロセッサは、第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算を実行するための第１の命令を受信するための命令デコーダを有し、この第１の命令は、複数の奇数ワードを格納するための第１のストレージロケーションに関連した第１のオペランド、複数の偶数ワードを格納する第２のストレージロケーションに関連した第２のオペランド、および第３のオペランドを有する。プロセッサは、第１の命令に応答して、第３のオペランドによって示される第３のストレージロケーション示から得られる第１のローテート値を用いて複数の奇数ワードおよび複数の偶数ワードに基づいた複数の第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行するべく、ならびに、第１のオペランドによって新奇数ワードを第１のストレージロケーションに格納するべく、命令デコーダに連結する第１の実行部をさらに有する。第１のオペランドおよび第２のオペランドは、１２８ビットレジスタである。ソースとして、第１のオペランドは上位６４ビットにワード１（ｗｏｒｄ１）を格納し、下位６４ビットにワード３（ｗｏｒｄ３）を格納する。ソースとして、第２のオペランドは下位６４ビットにワード０（ｗｏｒｄ０）を格納し、上位６４ビットにワード２（ｗｏｒｄ２）を格納する。デスティネーションとして、第１のオペランドは下位６４ビットに新ワード３（ｎｅｗ  ｗｏｒｄ３）を格納し、上位６４ビットに新ワード１（ｎｅｗ  ｗｏｒｄ１）を格納する。プロセッサは、第４のオペランド、第５のオペランド、および第６のオペランドを有する第２の命令に応答して、第６のオペランドによって示される第６のストレージロケーションから得られる第２のローテート値を用いることによって、第４のオペランドによって示される第４のストレージロケーションから得られる複数の偶数ワードと第５のオペランドによって示される第５のストレージロケーションから得られる複数の奇数ワードとに基づいた第２のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行するべく、ならびに、第４のストレージロケーションに複数の新偶数ワードを格納するべく、命令デコーダに連結する第２の実行部をさらに有する。第４のオペランドおよび第５のオペランドは１２８ビットレジスタであり、デスティネーションとして、第４のオペランドは上位６４ビットに新ワード０を格納し、下位６４ビットに新ワード２を格納する。
【０１４１】
前述の詳細な説明のいくつかの部分は、コンピュータメモリ内の複数のデータビットに対する複数の演算の複数のアルゴリズムおよび複数の記号表現に関して、示された。これらのアルゴリズム的記述および表現は、他の当業者に最も効果的にそれらの作業の実体を伝えるべく、データ処理技術の当業者によって用いられるやり方ある。アルゴリズムは、ここにあって、概して、一貫性のある一連の演算であり、所望の結果をもたらすと理解される。複数の演算は、複数の物理量の複数の物理的操作を必要とするものである。
【０１４２】
しかしながら、これらの、ならびに類似の用語のすべてが、適切な物理量に関連付けされており、その量に適用された単に便宜上のラベルであることを念頭に置く必要がある。特に示さない限り、上記の議論から明らかように、説明の全体を通じて、以下の特許請求の範囲に記載されたものなどの複数の用語を利用した議論は、コンピュータシステムもしくは類似の電子コンピューティングデバイスの、コンピュータシステムの複数のレジスタおよび複数のメモリ内における物理的な（電子的な）量として表されたデータを操作し、物理量として同様に表現される、コンピュータシステムの複数のメモリまたは複数のレジスタまたは他のそのような情報記憶デバイス、送信デバイス、またはディスプレイデバイス内における他のデータに変換する動作および処理を指すと、理解される。
【０１４３】
図面で示される技術は、１または複数の電子デバイスに格納されて実行されるコードおよびデータを用いて、実装され得る。そのような複数の電子デバイスは、複数のコンピュータ可読媒体を用いて、コードおよびデータを格納し、（内部での、および／または、ネットワーク上で複数の他の電子デバイスとの）通信を実行する。そのような複数のコンピュータ可読媒体として、例えば、複数の非一時的なコンピュータ可読ストレージ媒体（例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、位相変化メモリ）と、トランジトリな複数のコンピュータ可読伝送媒体（例えば、電気信号、光信号、音響信号、または他の形態の伝搬信号（伝送波、赤外線信号、デジタル信号など））とがある。
【０１４４】
前述の図面に示した複数の処理または複数の方法は、この処理ロジックは、ハードウェア（例えば、回路、特定用途向けロジック、その他）、ファームウェア、ソフトウェア（例えば、非一時的なコンピュータ可読媒体上で具体化されるもの）、または両方の組み合わせを含む処理ロジックによって実行されてもよい。複数の処理または複数の方法はいくつかのシーケンシャル演算に関して上述されているが、説明された複数の演算のいくつかは異なる順序で実行されてもよいことは、理解されるべきである。さらに、いくつかの演算は、順番に実行されるのではなく、並行に実行されてもよい。
【０１４５】
上記の明細書内において、本発明の複数の実施形態は、それらの具体的かつ例示的な実施形態に関連して説明された。様々な変形が、以下の特許請求の範囲に記載の本発明のより広い精神および範囲から逸脱することなくなされ得ることは明らかであろう。したがって、明細書および図面は、例示的な意味ではなく、限定的な意味で解釈されるべきである。
【図１Ａ】
2015532477.tif 000019
【図１Ｂ】
2015532477.tif 000020
【図２】
2015532477.tif 000021
【図３】
2015532477.tif 000022
【図４】
2015532477.tif 000023
【図５】
2015532477.tif 000024
【図６】
2015532477.tif 000025
【図７Ａ】
2015532477.tif 000026
【図７Ｂ】
2015532477.tif 000027
【図８】
2015532477.tif 000028
【図９Ａ】
2015532477.tif 000029
【図９Ｂ】
2015532477.tif 000030
【図９Ｃ】
2015532477.tif 000031
【図１０Ａ】
2015532477.tif 000032
【図１０Ｂ】
2015532477.tif 000033
【図１１Ａ】
2015532477.tif 000034
【図１１Ｂ】
2015532477.tif 000035
【図１１Ｃ】
2015532477.tif 000036
【図１１Ｄ】
2015532477.tif 000037
【図１２】
2015532477.tif 000038
【図１３Ａ】
2015532477.tif 000039
【図１３Ｂ】
2015532477.tif 000040
【図１４Ａ】
2015532477.tif 000041
【図１４Ｂ】
2015532477.tif 000042
【図１５】
2015532477.tif 000043
【図１６】
2015532477.tif 000044
【図１７】
2015532477.tif 000045
【図１８】
2015532477.tif 000046
【図１９】
2015532477.tif 000047
【図２０】
2015532477.tif 000048
【手続補正書】
【提出日】平成27年3月27日(2015.3.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算を実行するための第１の命令を受信するための命令デコーダと、
前記命令デコーダに連結した第１の実行部とを備え、
前記第１の命令は、
複数の奇数ワードを格納するべく第１のストレージロケーションに関連付けられた第１のオペランドと、
複数の偶数ワードを格納するべく第２のストレージロケーションに関連付けられた第２のオペランドと、
第３のオペランドとを有し、
前記第１の実行部は、
前記第１の命令に応答して、前記第３のオペランドによって示された第３のストレージロケーションから得られた第１のローテート値を用いて、前記複数の奇数ワードおよび前記複数の偶数ワードに基づいた前記複数の第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行すること、ならびに、
前記第１のオペランドによって示される前記第１のストレージロケーションに複数の新奇数ワードを格納することを行う、プロセッサ。
【請求項２】
前記第１のオペランドおよび前記第２のオペランドは、複数の１２８ビットレジスタである、請求項１に記載のプロセッサ。
【請求項３】
前記第１のオペランドは、ソースとして、ワード１を上位６４ビットに、ワード３を下位６４ビットに格納する、請求項２に記載のプロセッサ。
【請求項４】
前記第２のオペランドは、ソースとして、ワード０を上位６４ビットに、ワード２を下位６４ビットに格納する、請求項２に記載のプロセッサ。
【請求項５】
前記第１のオペランドは、デスティネーションとして、新ワード３を上位６４ビットに格納し、新ワード１を下位６４ビットに格納する、請求項２に記載のプロセッサ。
【請求項６】
第４のオペランド、第５のオペランド、第６のオペランドを有する第２の命令に応答して、前記第６のオペランドによって示される第６のストレージロケーションから得た第２のローテート値を用いて、前記第４のオペランドによって示される第４のストレージロケーションから得た前記複数の偶数ワードと前記第５のオペランドによって示された第５のストレージロケーションから得た前記複数の奇数ワードに基づいて複数の第２のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行すること、ならびに、
前記第４のストレージロケーションに新たな複数の偶数ワードを格納すること、
を行うべく、前記命令デコーダに連結する第２の実行部を、さらに備える、請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記第４のオペランドおよび前記第５のオペランドは１２８ビットレジスタであり、デスティネーションとして、前記第４のオペランドは新ワード０を上位６４ビットに格納し、新ワード２を下位６４ビットに格納する、請求項６に記載のプロセッサ。
【請求項８】
複数の奇数ワードを格納するべく第１のストレージロケーションに関連付けられた第１のオペランド、複数の偶数ワードを格納するべく第２のストレージロケーションに関連付けられた第２のオペランド、および第３のオペランドを有する、複数の第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算を実行するための第１の命令を、プロセッサの命令デコーダによって受信する段階と、
前記第１の命令に応答して、前記第３のオペランドによって示される第３のストレージロケーションから得た第１のローテート値を用い、前記複数の奇数ワードおよび前記複数の偶数ワードに基づいて、前記複数の第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を前記プロセッサの第１の実行部によって実行し、ならびに、前記第１のオペランドによって示される前記第１のストレージロケーションに複数の新奇数ワードを格納する段階と、を備える方法。
【請求項９】
前記第１のオペランドおよび前記第２のオペランドは、複数の１２８ビットレジスタである、請求項８に記載の方法。
【請求項１０】
前記第１のオペランドは、ソースとして、ワード１を上位６４ビットに格納し、ワード３を下位６４ビットに格納する、請求項９に記載の方法。
【請求項１１】
前記第２のオペランドは、ソースとして、ワード０を上位６４ビットに格納し、ワード２を下位６４ビットに格納する、請求項９に記載の方法。
【請求項１２】
前記第１のオペランドは、デスティネーションとして、新ワード３を上位６４ビットに格納し、新ワード１を下位６４ビットに格納する、請求項９に記載の方法。
【請求項１３】
前記プロセッサの第２の実行部によって、第４のオペランド、第５のオペランド、および第６のオペランドを有する第２の命令に応答して、前記第６のオペランドによって示された第６のストレージロケーションから得た第２のローテート値を用い、第４のオペランドによって示された第４のストレージロケーションから得た前記複数の偶数ワードと前記第５のオペランドによって示された第５のストレージロケーションから得た前記複数の奇数ワードとに基づいて、複数の第２のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を、実行する段階、および
前記第４のストレージロケーションに複数の新偶数ワードを格納する段階と、をさらに備える、請求項８から１２のいずれか一項に記載の方法。
【請求項１４】
前記第４のオペランドおよび前記第５のオペランドは１２８ビットレジスタであり、デスティネーションとして、前記第４のオペランドは新ワード０を上位６４ビットに格納し、新ワード２を下位６４ビットに格納する、請求項１３に記載の方法。
【請求項１５】
インターコネクトと、
前記インターコネクトに連結したダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、
前記インターコネクトに連結したプロセッサとを備え、
前記プロセッサは、
複数の第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算を実行するための第１の命令を受信するための命令デコーダと、
前記命令デコーダに連結した第１の実行部とを備え、
前記第１の命令は、
複数の奇数ワードを格納するべく第１のストレージロケーションに関連付けられた第１のオペランドと、
複数の偶数ワードを格納するべく第２のストレージロケーションに関連付けられた第２のオペランドと、
第３のオペランドとを有し、
前記第１の実行部は、
前記第１の命令に応答して、前記第３のオペランドによって示された第３のストレージロケーションから得られた第１のローテート値を用いて、前記複数の奇数ワードおよび前記複数の偶数ワードに基づいた前記複数の第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行すること、ならびに、
前記第１のオペランドによって示される前記第１のストレージロケーションに複数の新奇数ワードを格納することを行う、データプロセッシングシステム。
【請求項１６】
前記第１のオペランドおよび前記第２のオペランドは、１２８ビットレジスタである、請求項１５に記載のデータプロセッシングシステム。
【請求項１７】
前記第１のオペランドは、ソースとして、ワード１を上位６４ビットに格納し、ワード３を下位６４ビットに格納する、請求項１６に記載のデータプロセッシングシステム。
【請求項１８】
前記第２のオペランドは、ソースとして、ワード０を上位６４ビットに格納し、ワード２を下位６４ビットに格納する、請求項１６に記載のデータプロセッシングシステム。
【請求項１９】
前記第１のオペランドは、デスティネーションとして、新ワード３を上位６４ビットに格納し、新ワード１を下位６４ビットに格納する、請求項１６に記載のデータプロセッシングシステム。
【請求項２０】
前記プロセッサは、
第４のオペランド、第５のオペランド、第６のオペランドを有する第２の命令に応答して、前記第６のオペランドによって示される第６のストレージロケーションから得た第２のローテート値を用いて、前記第４のオペランドによって示される第４のストレージロケーションから得た前記複数の偶数ワードと前記第５のオペランドによって示された第５のストレージロケーションから得た前記複数の奇数ワードに基づいて複数の第２のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行すること、ならびに、
前記第４のストレージロケーションに新たな複数の偶数ワードを格納すること、
を行うべく、前記命令デコーダに連結する第２の実行部を、さらに備える、請求項１５から１９のいずれか一項に記載のデータプロセッシングシステム。
【請求項２１】
前記第４のオペランドおよび前記第５のオペランドは１２８ビットレジスタであり、デスティネーションとして、前記第４のオペランドは新ワード０を上位６４ビットに格納し、新ワード２を下位６４ビットに格納する、請求項２０に記載のデータプロセッシングシステム。
【請求項２２】
複数の奇数ワードを格納するべく第１のストレージロケーションに関連付けられた第１のオペランド、複数の偶数ワードを格納するべく第２のストレージロケーションに関連付けられた第２のオペランド、および第３のオペランドを有する第１の命令を、第１のＳＫＥＩＮ２５６  ＭＩＸ−ＰＥＲＭＵＴＥ演算を実行するべく受信するための手段と、
前記第１の命令に応答して、前記第３のオペランドによって示される第３のストレージロケーションから得られる第１のローテート値を用いて前記複数の奇数ワードおよび前記複数の偶数ワードに基づいた複数の第１のＳＫＥＩＮ２５６ＭＩＸ−ＰＥＲＭＵＴＥ演算の複数のラウンド処理を実行すること、ならびに、前記第１のオペランドによって示される第１のストレージロケーションに新奇数ワードを格納すること、を行うための手段と、を備える、装置。
【請求項２３】
前記第１のオペランドおよび前記第２のオペランドは、１２８ビットレジスタである、請求項２２に記載の装置。
【請求項２４】
前記第１のオペランドは、ソースとして、上位６４ビットにワード１を格納し、下位６４ビットにワード３を格納する、請求項２３に記載の装置。
【請求項２５】
前記第２のオペランドは、ソースとして、上位６４ビットにワード０を格納し、下位６４ビットにワード２を格納する、請求項２３に記載の装置。
【国際調査報告】
2015532477.tif 000049
2015532477.tif 000050
2015532477.tif 000051