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