(57)【特許請求の範囲】
【請求項１】
ＳＭ３ハッシュラウンドスライスのための第１の命令をデコードするためのデコードステージと、
１または複数の実行ユニットと、を備え、
前記第１の命令はハッシュのアルゴリズムのラウンドスライス部分、中間ハッシュ値入力オペランド、ソースデータオペランドセットおよびラウンド定数オペランドセットを指定し、
前記１または複数の実行ユニットはデコードされた前記第１の命令に応答して、
前記中間ハッシュ値入力オペランドおよび前記ラウンド定数オペランドセットを適用することを含め、複数のラウンド反復から成るＳＭ３ハッシュラウンドスライスセットを前記ソースデータオペランドセットに実行し、
前記第１の命令の結果をＳＩＭＤデスティネーションレジスタに格納する、プロセッサ。
【請求項２】
前記第１の命令は前記ＳＩＭＤデスティネーションレジスタを、前記中間ハッシュ値入力オペランドとしても指定する、請求項１に記載のプロセッサ。
【請求項３】
前記第１の命令は、前記ハッシュのアルゴリズムの前記ラウンドスライス部分を即値オペランド内の第１のフィールドによって指定する、請求項１または２に記載のプロセッサ。
【請求項４】
前記第１の命令は、前記ラウンド定数オペランドセットを前記即値オペランド内の第２のフィールドによって少なくとも部分的に指定する、請求項３に記載のプロセッサ。
【請求項５】
前記第１の命令は、前記即値オペランド内の前記第２のフィールドによってブール関数ＦＦｊおよびＧＧｊセレクタをさらに指定する、請求項４に記載のプロセッサ。
【請求項６】
前記第１の命令は前記ハッシュのアルゴリズムの前記ラウンドスライス部分を４回のラウンドとして指定する、請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記ラウンド定数オペランドセットは、４個の予め回転された３２ビット定数値を有する、請求項６に記載のプロセッサ。
【請求項８】
前記第１の命令は、前記ハッシュのアルゴリズムの前記ラウンドスライス部分を２回のラウンドとして指定する、請求項１から５のいずれか一項に記載のプロセッサ。
【請求項９】
前記第１の命令は、前記ハッシュのアルゴリズムの前記ラウンドスライス部分を１回のラウンドとして指定する、請求項１から５のいずれか一項に記載のプロセッサ。
【請求項１０】
前記第１の命令は、前記ソースデータオペランドセットを８個の３２ビット値を有するＳＩＭＤレジスタとして指定する、請求項１から９のいずれか一項に記載のプロセッサ。
【請求項１１】
前記第１の命令は、前記ソースデータオペランドセットを８個の３２ビット値を有するメモリ場所として指定する、請求項１から９のいずれか一項に記載のプロセッサ。
【請求項１２】
前記第１の命令は、前記ソースデータオペランドセットをそれぞれ４個の３２ビット値を有する２つのＳＩＭＤレジスタとして指定する、請求項１から９のいずれか一項に記載のプロセッサ。
【請求項１３】
前記第１の命令は、前記ハッシュのアルゴリズムの前記ラウンドスライス部分を、０から６３の間のラウンド回数を格納すべく、即値オペランド内の第１のフィールドによって指定し、０から３の間の反復カウントを格納すべく、第２のフィールドによって指定する、請求項１から３のいずれか一項に記載のプロセッサ。
【請求項１４】
第１のベクトルレジスタの複数のｍ個のデータフィールドの第１の部分に、ＳＭ３ハッシュアルゴリズムの中間ハッシュ値入力状態のソースオペランドを格納する段階と、
第２のベクトルレジスタの複数のｍ個のデータフィールドの第２の部分に、ソースデータオペランドセットを格納する段階と、
プロセッサで、前記ＳＭ３ハッシュアルゴリズムのＳＭ３ハッシュラウンドスライスの部分のための命令を実行する段階であって、前記ＳＭ３ハッシュラウンドスライスの部分は前記ＳＭ３ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数を有する、段階と、
前記ＳＭ３ハッシュラウンドスライスの部分の各反復において、反復の結果を生成し、前記反復の前記結果として生成されたハッシュ値出力状態を格納し、複数の前記反復の次の各反復のために、前記ハッシュ値出力状態を前記中間ハッシュ値入力状態にバイパスする段階と、を備える、方法。
【請求項１５】
第３のベクトルレジスタの前記複数のｍ個のデータフィールドの第３の部分に、ラウンド定数オペランドセットを格納する段階と、
前記ＳＭ３ハッシュラウンドスライスの各反復において、
前記ラウンド定数オペランドセットのそれぞれのラウンド定数Ｔｊを読み取り、前記それぞれのラウンド定数を前記第１のベクトルレジスタの左回転された各データフィールドＡおよび前記第１のベクトルレジスタの第２の回転されていないデータフィールドＥを用いて加算する段階と、をさらに備える、請求項１４に記載の方法。
【請求項１６】
前記第３の部分は、前記第３のベクトルレジスタの前記複数のｍ個のデータフィールドのうちの４個を有し、前記格納されたラウンド定数オペランドセットの各ラウンド定数Ｔｊはｊビット分予め左回転されている、請求項１５に記載の方法。
【請求項１７】
前記ＳＭ３ハッシュラウンドスライスの各反復において、
前記第２のベクトルレジスタの各データフィールドＷｊを読み取り、前記第２のベクトルレジスタの前記各データフィールドを前記第２のベクトルレジスタの第２のデータフィールドＷｊ＋４を用いてＸＯＲする段階をさらに備える、請求項１４から１６のいずれか一項に記載の方法。
【請求項１８】
前記第２の部分は、前記第２のベクトルレジスタの前記複数のｍ個のデータフィールドのうちの８個を有する、請求項１７に記載の方法。
【請求項１９】
前記第１の部分は、前記第１のベクトルレジスタの前記複数のｍ個のデータフィールドのうちの８個を有する、請求項１４から１７のいずれか一項に記載の方法。
【請求項２０】
前記命令は、前記ＳＭ３ハッシュアルゴリズムの前記ＳＭ３ハッシュラウンドスライスの部分を即値オペランド内の第１のフィールドによって指定する、請求項１４から１９のいずれか一項に記載の方法。
【請求項２１】
前記命令は、ラウンド定数オペランドセットを前記即値オペランド内の第２のフィールドによって少なくとも部分的に指定する、請求項２０に記載の方法。
【請求項２２】
前記命令は、ブール関数ＦＦｊおよびＧＧｊセレクタを前記即値オペランド内の前記第２のフィールドによってさらに指定する、請求項２１に記載の方法。
【請求項２３】
ＳＭ３ハッシュアルゴリズムのラウンドスライスのための第１の命令と、前記ＳＭ３ハッシュアルゴリズムのためのＳＭ３メッセージ拡張スライスのための第２の命令と、を格納するためのメモリと、
プロセッサと、を備え、
前記プロセッサは、
前記第１の命令をフェッチするための命令フェッチステージと、
前記第１の命令をデコードするためのデコードステージと、
前記第２の命令もまたデコードするための前記デコードステージと、
１または複数の実行ユニットと、を有し、
前記第１の命令は、前記ＳＭ３ハッシュアルゴリズムのラウンドスライス部分と、中間ハッシュ値入力オペランドと、ラウンドスライスソースデータオペランドセットと、ラウンド定数オペランドセットと、を指定し、前記第２の命令は、第１のソースデータオペランドセットと、第２のソースデータオペランドセットと、拡張範囲と、を指定し、
前記１または複数の実行ユニットは、前記第１の命令の前記デコードに応答し、
前記中間ハッシュ値入力オペランドおよび前記ラウンド定数オペランドセットを適用し、前記第１の命令の第１の結果を第１のＳＩＭＤデスティネーションレジスタに格納することを含め、複数のラウンド反復から成るＳＭ３ハッシュラウンドスライスセットを前記ラウンドスライスソースデータオペランドセットに実行し、
前記１または複数の実行ユニットは、前記第２の命令の前記デコードに応答し、
前記第１のソースデータオペランドセットおよび前記第２のソースデータオペランドセットから、ＳＭ３メッセージ拡張の数を実行し、前記ＳＭ３メッセージ拡張の数は前記指定された拡張範囲によって判断され、前記第２の命令の第２の結果を第２のＳＩＭＤデスティネーションレジスタ内に格納する、処理システム。
【請求項２４】
前記第１の命令は、前記ＳＭ３ハッシュアルゴリズムの前記ラウンドスライス部分を即値オペランド内の第１のフィールドによって指定する、請求項２３に記載の処理システム。
【請求項２５】
前記第１の命令は、前記ラウンド定数オペランドセットを即値オペランド内の第２のフィールドによって少なくとも部分的に指定する、請求項２３または２４に記載の処理システム。
【請求項２６】
前記第１の命令は、ブール関数ＦＦｊおよびＧＧｊセレクタを前記即値オペランド内の前記第２のフィールドによってさらに指定する、請求項２５に記載の処理システム。
【請求項２７】
前記第１の命令は、前記ＳＭ３ハッシュアルゴリズムの前記ラウンドスライス部分を４回のラウンドとして指定する、請求項２３から２６のいずれか一項に記載の処理システム。
【請求項２８】
前記ラウンド定数オペランドセットは、初期の予め回転された３２ビット定数値を有する、請求項２７に記載の処理システム。
【請求項２９】
前記ラウンド定数オペランドセットは、４個の予め回転された３２ビット定数値を有する、請求項２８に記載の処理システム。
【請求項３０】
前記第２の命令は、前記第１のソースデータオペランドセットおよび前記第２のソースデータオペランドセットをそれぞれ８個の３２ビット値を有する２つのＳＩＭＤレジスタとして指定する、請求項２３から２９のいずれか一項に記載の処理システム。
【請求項３１】
前記第２の命令は、前記拡張範囲を即値オペランド内の第１のフィールドによって指定する、請求項２３から３０のいずれか一項に記載の処理システム。
【請求項３２】
前記第２の命令は、前記拡張範囲を４個の新規３２ビットワードのメッセージ拡張を示すように指定する、請求項２３から３１のいずれか一項に記載の処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プロセッサまたは他の処理ロジックによる実行時、論理演算、数学演算、または他の関数演算を実行する処理ロジック、マイクロプロセッサ、および関連付けられた命令セットアーキテクチャの分野に関する。特に、本開示は、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための命令およびロジックに関する。
【背景技術】
【０００２】
暗号化ハッシュ関数とは一種のハッシュ関数、すなわち恣意的なデータブロックを取得し、固定サイズのビットストリング、（暗号化）ハッシュ値を返すアルゴリズムであり、データに対する（偶発的または意図的）変更がハッシュ値を変更することになる（非常に高い確率で）。エンコードされるデータは通常、「メッセージ」と称され、ハッシュ値はメッセージダイジェストまたは「ダイジェスト」と称されることがある。
【０００３】
暗号化ハッシュ関数は、特にデジタル署名、メッセージ認証コード（ＭＡＣ）、および他の形態の認証等、情報セキュリティの適用例を多く有する。暗号化ハッシュ関数はまた、ハッシュテーブル内のデータのインデックス付け、フィンガープリントについては重複データの検出またはファイルの一意識別を行う通常のハッシュ関数として使用可能であり、また偶発的なデータ破損を検出するチェックサムとして使用可能である。情報セキュリティの文脈においては、暗号化ハッシュ値は（デジタル）フィンガープリント、チェックサム、または単にハッシュ値と称されることがあるが、しかしながら、これらすべての用語はかなり異なる特性および目的を持つ機能を意味する。
【０００４】
プログラマにとって可視の暗号化ハッシュ関数の設計における２つの主要なトレードオフとしては（１）計算の複雑さ、すなわち、計算があまりに単純だとハッシュが容易に破壊される、計算があまりに複雑だと、ハッシュが要する計算時間が長くなりすぎること、および（２）出力のサイズ、すなわち、サイズあまりに小さすぎると総当たり攻撃があまりに容易になる、サイズがあまりに大きすぎると、ハッシュ値の格納および送信のコストが高くなりすぎることである。最も有名な暗号化ハッシュ関数のうちの１つは、Ｒｏｎａｌｄ  Ｒｉｖｅｓｔにより開発されたＭＤ５（メッセージダイジェストアルゴリズム５）アルゴリズムである。他の一般的なアルゴリズムは、ＳＨＡ‐１（セキュアハッシュアルゴリズム１）に加え、米国国立標準技術研究所（ＮＩＳＴ）により公開された米国連邦情報処理標準（ＦＩＰＳ）としてのバリアントＳＨＡ‐２およびＳＨＡ‐３である。関心の寄せられている別の暗号化ハッシュアルゴリズムとして、Ｘｉａｏｙｕｎ  Ｗａｎｇその他によって発明されたＳＭ３暗号化ハッシュ関数がある。これはＣｈｉｎｅｓｅ  Ｃｏｍｍｅｒｃｉａｌ  Ｃｒｙｐｔｏｇｒａｐｈｙ  Ａｄｍｉｎｉｓｔｒａｔｉｏｎ  Ｏｆｆｉｃｅ（中国商用暗号化管理庁）によって公開され、電子認証サービスシステムの使用のためにインターネットエンジニアリングタスクフォース（ＩＥＴＦ）にインターネットドラフトとして提出された。
【０００５】
一般的に、ハッシュアルゴリズムのために、ハードウェア加速化は要求されない。というのは、ハッシュアルゴリズムは、とりわけコンピュータ処理に要求を課すものとして設計されてはいないからである。しかしながら、ハードウェアにＳＭ３暗号化ハッシュアルゴリズムを実装した特定用途向け動的パスワード暗号化チップが中国のＳｈｅｎｚｈｅｎ  Ｔｏｎｇｆａｎｇ  Ｅｌｅｃｔｒｏｎｉｃ  Ｅｑｕｉｐｍｅｎｔ社によって製造されている。
【０００６】
ルックアップメモリ、真理値表、二分決定図またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を使用する典型的な単純なハードウェア実装は、回路面積の見地からはコスト高である。ガロア体（２５６）と同型の有限体を使用する代替的なアプローチは当該面積において有効である可能性があるが、単純なハードウェア実装よりも速度が遅い可能性もある。
【０００７】
全面的なハードウェアによるアプローチの欠点の１つは、当該アプローチは、特に割り込み処理、または他の命令の同時スーパースカラ実行等の特別な考慮を行わずに、現在のマイクロプロセッサの標準的な実行パイプラインに容易に組み込めないということである。標準的な実行パイプラインとの別のミスマッチとして、ハッシュアルゴリズム全体を実行するために要求されるレイテンシが挙げられる。
【０００８】
現在のプロセッサは通常、集中計算の演算を提供するものの、例えば、単一命令複数データ（ＳＩＭＤ）ベクトルレジスタ等の様々なデータストレージデバイスを使用する効率的な実装を介して採用可能な高レベルのデータ並列処理を供給する命令を含む。よって、中央処理装置（ＣＰＵ）はベクトルの処理をサポートするための並列ハードウェアを提供してよい。ベクトルとは、複数の連続的なデータ要素を保持するデータ構造である。サイズＭのベクトルレジスタは、サイズＯのＮ個のベクトル要素を含むことができる（Ｎ＝Ｍ／Ｏ）。例えば、６４バイトのベクトルレジスタは、（ａ）各要素が１バイトを占有するデータアイテムを保持する、６４個のベクトル要素、（ｂ）それぞれが２バイト（または１つの「ワード」）を占有するデータアイテムを保持する、３２個のベクトル要素、（ｃ）それぞれが４バイト（または１つの「ダブルワード」）を占有するデータアイテムを保持する、１６個のベクトル要素、または（ｄ）それぞれが８バイト（または１つの「クワッドワード」）を占有するデータアイテムを保持する、８個のベクトル要素に分割されてよい。ＳＩＭＤベクトルレジスタにおける並列処理の特性は、セキュアハッシュアルゴリズムの処理に非常に好適であり得る。
【０００９】
今日まで、このような複雑度、ミスマッチ、性能制約に関する諸問題、および他のボトルネックに対する潜在的な解決手段は、適切に探究されていない。
【図面の簡単な説明】
【００１０】
本発明は、添付図面中に、限定ではなく例示として示されている。
【００１１】
【図１Ａ】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令を実行するシステムの一実施形態のブロック図である。
【００１２】
【図１Ｂ】機能を提供する命令を実行するシステムの別の実施形態のブロック図である。
【００１３】
【図１Ｃ】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令を実行するシステムの別の実施形態のブロック図である。
【００１４】
【図２】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。
【００１５】
【図３Ａ】一実施形態によるパックされたデータタイプを示す。
【００１６】
【図３Ｂ】一実施形態によるパックされたデータタイプを示す。
【００１７】
【図３Ｃ】一実施形態によるパックされたデータタイプを示す。
【００１８】
【図３Ｄ】一実施形態による、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための命令エンコーディングを示す。
【００１９】
【図３Ｅ】別の実施形態によるＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための命令エンコーディングを示す。
【００２０】
【図３Ｆ】別の実施形態によるＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための命令エンコーディングを示す。
【００２１】
【図３Ｇ】別の実施形態によるＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための命令エンコーディングを示す。
【００２２】
【図３Ｈ】別の実施形態によるＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための命令エンコーディングを示す。
【００２３】
【図４Ａ】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令を実行するためのプロセッサマイクロアーキテクチャの一実施形態の要素を示す。
【００２４】
【図４Ｂ】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令を実行するためのプロセッサマイクロアーキテクチャの別の実施形態の要素を示す。
【００２５】
【図５】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令を実行するためのプロセッサの一実施形態のブロック図である。
【００２６】
【図６】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令を実行するためのコンピュータシステムの一実施形態のブロック図である。
【００２７】
【図７】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令を実行するためのコンピュータシステムの別の実施形態のブロック図である。
【００２８】
【図８】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令を実行するためのコンピュータシステムの別の実施形態のブロック図である。
【００２９】
【図９】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令を実行するためのシステムオンチップの一実施形態のブロック図である。
【００３０】
【図１０】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令を実行するためのプロセッサの実施形態のブロック図である。
【００３１】
【図１１】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するＩＰコア開発システムの一実施形態のブロック図である。
【００３２】
【図１２】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するアーキテクチャエミュレーションシステムの一実施形態を示す。
【００３３】
【図１３】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令を変換するシステムの一実施形態を示す。
【００３４】
【図１４Ａ】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令の実行のための装置の一実施形態の図を示す。
【００３５】
【図１４Ｂ】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令の実行のための装置の代替的な実施形態の図を示す。
【００３６】
【図１５】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令の実行のための装置の別の代替の実施形態の図を示す。
【００３７】
【図１６】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令の実行のための装置の別の代替の実施形態の図を示す。
【００３８】
【図１７Ａ】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する別の命令の実行のための装置の一実施形態の図を示す。
【００３９】
【図１７Ｂ】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する別の命令の実行のための装置の代替的な実施形態の図を示す。
【００４０】
【図１８Ａ】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する別の命令の実行のための装置の別の代替の実施形態の図を示す。
【００４１】
【図１８Ｂ】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する別の命令の実行のための装置のさらなる別の代替的な実施形態の図を示す。
【００４２】
【図１９】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための命令の実行のためのプロセスの一実施形態のためのフロー図を示す。
【００４３】
【図２０】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための命令の実行のためのプロセスの別の実施形態のフロー図を示す。
【００４４】
【図２１】ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための代替の命令の実行のためのプロセスの一実施形態のためのフロー図を示す。
【発明を実施するための形態】
【００４５】
以下の詳細な説明は、プロセッサ内、コンピュータシステム内若しくは他の処理装置内で、またはプロセッサ、コンピュータシステム若しくは他の処理装置と関連して、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令および処理ロジックについて開示する。いくつかの実施形態は、ＳＩＭＤ  ＳＭ３メッセージ拡張のための命令をデコードするためのデコーダを有するプロセッサを含み、当該命令は第１のソースデータオペランドセットおよび第２のソースデータオペランドセット並びに拡張範囲を指定する。プロセッサ実行ユニットは命令に応答して、第１のソースデータオペランドセットおよび第２のソースデータオペランドセットからＳＭ３メッセージ拡張の数を実行し、ＳＭ３メッセージ拡張の数は指定された拡張範囲によって判断され、その結果をＳＩＭＤデスティネーションレジスタに格納する。いくつかの実施形態はまた、中間ハッシュ値入力、ソースデータセット、およびラウンド定数セットからハッシュアルゴリズムのＳＩＭＤ  ＳＭ３ハッシュラウンドスライス部分のための命令を実行する。プロセッサ実行ユニットは、複数のＳＭ３ハッシュラウンド反復から成るセットをソースデータセットに実行して、中間ハッシュ値入力およびラウンド定数セットを適用し、新しいハッシュ値結果をＳＩＭＤデスティネーションレジスタに格納する。ＳＭ３暗号化ハッシュアルゴリズムの詳細は、ｗｏｒｌｄ  ｗｉｄｅ  ｗｅｂのtools.ietf.org/pdf/draft-shen- sm3 -hash-01.pdfから入手可能な２０１４年２月１４日のバージョン０１の中国科学院によるＩＥＴＦインターネットドラフトである「ＳＭ３ハッシュ関数」にて確認できるであろう。
【００４６】
ＳＩＭＤ  ＳＭ３暗号化ハッシュ命令を使用して、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を複数のアプリケーションに提供できることを理解されたい。そのようなアプリケーションとしては、財務トランザクション、電子商取引、電子メール、ソフトウェア配布、データストレージ、乱数生成等のためのデータ整合性、デジタル署名、本人確認、メッセージコンテンツ認証およびメッセージ元認証を保証するための暗号化プロトコルおよびインターネット通信が挙げられる。
【００４７】
ＳＭ３暗号化ハッシュ機能を提供するためのＳＩＭＤ命令および処理ロジックのいくつかの実施形態について、ＳＭ３メッセージ拡張およびＳＭ３暗号化ハッシュラウンドは、現在のマイクロプロセッサの標準的な実行パイプラインの中で、複数の反復のスライスにおいて同時におよび／または並列に実行されてよい。ＳＭ３メッセージ拡張のスライスおよび／またはＳＭ３暗号化ハッシュラウンドのスライスの実行に関連するレイテンシによる他の同時インフライト命令に対し、十分なカバーを提供すべく、１スライスごとの反復数は好都合に選択されてよいことを理解されたい。故に、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数（例えば、１スライスごとに２、４または８回の反復）を有する、ＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムラウンドスライスのための命令の実行を提供することによって、スーパースカラ実行パイプライン、および／またはアウトオブオーダプロセッサパイプライン内のこのような他の要求される命令（例えば、ＳＭ３メッセージ拡張命令）の同時実行を許容し、それによって多数のアプリケーションの処理スループットを大きく改善し、汎用プロセッサに関連する製造処理改善のために周波数スケーリングを利用できるようになることも理解されたい。
【００４８】
以下の詳細な説明において、本発明の実施形態に対するより完全な理解を提供すべく、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、有効化メカニズム等の多くの具体的な詳細が記載されている。しかしながら、当業者ならば、そのような具体的な詳細なしに本発明は実施され得ることを理解されたい。また、本発明の実施形態を不要に不明瞭にするのを回避すべく、いくつかの周知の構造、回路等は詳細に示されていない。
【００４９】
以下の実施形態は、プロセッサに関して記載されているが、他のタイプの集積回路およびロジックデバイスには他の実施形態が適用可能である。本発明の実施形態に係る類似の技術および教示は、他のタイプの回路または半導体デバイスに適用可能であり、当該回路または半導体デバイスは、より高いパイプラインスループットおよび改善された性能の利益を享受できる。本発明の実施形態の教示は、データ操作を実行するあらゆるプロセッサまたは機械に適用可能である。しかしながら、本発明は５１２ビット、２５６ビット、１２８ビット、６４ビット、３２ビットまたは１６ビットデータの操作を実行するプロセッサまたは機械に限定されず、本発明は、データ操作またはデータ管理が行われるあらゆるプロセッサおよび機械に適用可能である。また、以下の詳細な説明は例示を提供しており、添付図面は例示目的のために様々な例を図示している。しかしながら、これらの例は、本発明の実施形態に係るあらゆる可能性のある実装を網羅的に列挙するのではなく、単に本発明の実施形態の例を提供する意図であって、限定的な意味において解釈されるべきではない。
【００５０】
以下の例示は、実行ユニットおよびロジック回路の文脈で命令処理および命令配信について記載するが、本発明の他の実施形態は、有形な機械可読媒体上に格納されたデータおよび／または命令を用いて実現され得、当該データおよび／または命令は機械による実行時、機械に対して、本発明の少なくとも一実施形態と一貫性のある機能を実行させる。一実施形態において、本発明の実施形態に関連する機能は、機械で実行可能な命令に具現化される。命令は、当該命令でプログラムされる汎用プロセッサまたは特定用途向けプロセッサに対し、本発明の複数の段階を実行させるために使用可能である。本発明の実施形態は、コンピュータプログラム製品またはソフトウェアとして提供されてよく、当該コンピュータプログラム製品またはソフトウェアは、自身に格納された命令を有する機械またはコンピュータ可読媒体を含んでよく、当該命令を使用して、本発明の実施形態による１または複数の演算を実行するようにコンピュータ（または他の電子デバイス）をプログラムしてよい。代替的に、本発明の実施形態の複数の段階は、当該段階を実行するための固定機能ロジックを含む特別なハードウェアコンポーネント、またはプログラムされたコンピュータコンポーネントおよび固定機能のハードウェアコンポーネントの任意の組み合わせによって実行されてよい。
【００５１】
本発明の実施形態を実行するためのロジックをプログラムするために使用される命令は、ＤＲＡＭ、キャッシュ、フラッシュメモリまたは他のストレージ等のシステム内のメモリに格納されてよい。さらに、命令はネットワークを介してまたは他のコンピュータ可読媒体を通して配信されてよい。故に、機械可読媒体としては、特に限定されないが、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク、リードオンリメモリ（ＣＤ‐ＲＯＭ）、および光磁気ディスク、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、磁気若しくは光カード、フラッシュメモリ、または電気、光、音波または他の形態の伝搬信号（例えば、搬送波、赤外線信号、デジタル信号等）を介したインターネット経由での情報送信に使用される有形の機械可読ストレージ等、機械（例えばコンピュータ）によって読み取り可能な形態で情報を格納または送信するための任意のメカニズムが含まれてよい。従って、コンピュータ可読媒体としては、機械（例えばコンピュータ）によって読み取り可能な形態で電子的命令または情報を格納または送信するために好適な任意のタイプの有形の機械可読媒体が含まれる。
【００５２】
設計は、作成からシミュレーション、製造まで様々なステージを経てよい。設計を表わすデータは、多数の方法で設計を表わしてよい。まず、シミュレーションで有用であるように、ハードウェアはハードウェア記述言語または別の機能記述言語を使用して表わされてよい。また、ロジックおよび／またはトランジスタゲートを用いる回路レベルモデルが、設計プロセスのどこかのステージで生成されてよい。さらに、多くの設計はどこかのステージにおいて、ハードウェアモデルの様々なデバイスの物理的配置を表わすデータレベルに到達する。従来の半導体製造技術が使用される場合、ハードウェアモデルを表わすデータは、集積回路の生成に使用されるマスクについて異なるマスク層における様々な特徴部の存在または不存在を指定するデータであってよい。設計のあらゆる表現において、データは任意の形態の機械可読媒体に格納されてよい。メモリ、またはディスク等の磁気若しくは光ストレージは、このような情報を送信するために変調または変調以外の方法で生成された光波または電波を介して送信される情報を格納する機械可読媒体であってよい。コードまたは設計を示すまたは搬送する電気搬送波が送信される場合、電気信号のコピー、バッファリング、または再送信が実行される限度において、新しいコピーが作成される。故に、通信プロバイダまたはネットワークプロバイダは、搬送波にエンコードされた情報等の項目を有形の機械可読媒体上に少なくとも一時的に格納し、本発明の実施形態の技術を具現化してよい。
【００５３】
現在のプロセッサでは、多数の異なる実行ユニットを使用し、様々なコードおよび命令が処理および実行されている。いくつかの命令はより迅速に終了する一方、他の命令は完了までに複数のクロックサイクルを必要とし得る等、すべての命令は等しく作成されているわけではない。命令のスループットがより高速なほど、プロセッサの性能全体はより良好になる。故に、多数の命令を可能な限り高速で実行させると有利になろう。しかしながら、より複雑なもの、実行時間およびプロセッサリソースの観点からより多くのものを要求するような特定の命令が存在する。例えば、浮動小数点命令、ロード／ストア操作、データ移動等がある。
【００５４】
より多くのコンピュータシステムがインターネット、テキストおよびマルチメディアアプリケーションで使用されるにつれ、追加のプロセッササポートが経時的に導入されている。一実施形態において、命令セットは、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み処理および例外処理、並びに外部入力および出力（Ｉ／Ｏ）を含む１または複数のコンピュータアーキテクチャに関連付けられてよい。
【００５５】
一実施形態において、命令セットアーキテクチャ（ＩＳＡ）は、１または複数のマイクロアーキテクチャによって実装されてよく、当該マイクロアーキテクチャは１または複数の命令セットを実装するために使用されるプロセッサロジックおよび回路を含む。従って、異なるマイクロアーキテクチャを備えるプロセッサは、共通の命令セットの少なくとも一部を共有してよい。例えば、インテル（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、インテル（登録商標）Ｃｏｒｅ（商標）プロセッサ、およびカリフォルニア州サニーベールのアドバンストマイクロデバイス社のプロセッサは、異なる内部設計を有するもののｘ８６命令セット（より新しいバージョンに追加されたいくつかの拡張機能を持つ）のバージョンとほぼ同一のものを実装する。同様に、ＡＲＭ  Ｈｏｌｄｉｎｇｓ、ＭＩＰＳ、またはそれらのライセンシ若しくは採用者等の他のプロセッサ開発企業によって設計されたプロセッサは、共通の命令セットの少なくとも一部を共有してよいが、異なるプロセッサ設計を含んでよい。例えば、ＩＳＡとの同一レジスタアーキテクチャは、新規または周知の技術を使用して異なるマイクロアーキテクチャにおいて異なる方法で実装されてよく、このようなものとしては専用物理レジスタ、レジスタリネーミングメカニズムを使用（例えばレジスタエイリアステーブル（ＲＡＴ）、リオーダバッファ（ＲＯＢ）およびリタイアメントレジスタファイルの使用）して動的に割り当てられた１または複数の物理レジスタが含まれる。一実施形態において、レジスタは、１または複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、またはソフトウェアプログラマによってアドレス指定可能であってもなくてもよい他のレジスタセットを含んでよい。
【００５６】
一実施形態において、命令は、１または複数の命令フォーマットを含んでよい。一実施形態において、命令フォーマットは、実行されるべき演算およびその演算が実行されるオペランドをとりわけ指定するための様々なフィールド（ビット数、ビットの場所等）を示してよい。いくつかの命令フォーマットは、命令テンプレート（またはサブフォーマット）によってさらに定義されてよい。例えば、特定の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてよく、および／または、異なって解釈される特定のフィールドを有するように定義されてよい。一実施形態において、命令は命令フォーマット（および、定義されている場合は、その命令フォーマットの複数の命令テンプレートのうちの特定の１つにおいて）を使用して表わされ、命令は演算およびその演算が行われるオペランドを指定または示す。
【００５７】
科学的アプリケーション、財務アプリケーション、自動ベクトル化汎用アプリケーション、ＲＭＳ（Ｒｅｃｏｇｎｉｔｉｏｎ（認識）、ｍｉｎｉｎｇ（マイニング）、およびｓｙｎｔｈｅｓｉｓ（合成））アプリケーション、並びにビジュアルおよびマルチメディアアプリケーション（例えば、２Ｄ／３Ｄグラフィックス、画像処理、ビデオ圧縮／圧縮解除、音声認識アルゴリズムおよびオーディオ操作）は、多数のデータアイテム上に同一の演算が実行されることを要求してよい。一実施形態において、単一命令複数データ（ＳＩＭＤ）とは、プロセッサに、複数のデータ要素への演算を実行させるタイプの命令を指す。ＳＩＭＤ技術は、レジスタ内のビットを複数の固定サイズまたは可変サイズのデータ要素に論理的に分割可能なプロセッサにおいて使用されてよく、データ要素の各々は別個の値を表わす。例えば、一実施形態において、６４ビットレジスタ内のビットは、４つの別個の１６ビットデータ要素を含むソースオペランドとして編成されてよく、当該データ要素の各々は別箇の１６ビット値を表わす。このタイプのデータは、「パックされた」データタイプまたは「ベクトル」データタイプと称されてよく、このデータタイプのオペランドは、パックされたデータオペランドまたはベクトルオペランドと称される。一実施形態において、パックされたデータアイテムまたはベクトルは、単一のレジスタ内に格納されたパックされたデータ要素のシーケンスであってよく、パックされたデータオペランドまたはベクトルオペランドは、ＳＩＭＤ命令（または「パックされたデータ命令または「ベクトル命令」）のソースオペランドまたはデスティネーションオペランドであってよい。一実施形態において、ＳＩＭＤ命令は、同一または異なるサイズのデスティネーションベクトルオペランド（結果のベクトルオペランドとも称される）を同一または異なる数のデータ要素を備える状態で同一または異なるデータ要素順序において生成すべく、単一のベクトル演算が２つのソースベクトルオペランドに行われることを指定する。
【００５８】
ｘ８６命令、ＭＭＸ（商標）命令、ストリーミングＳＩＭＤ拡張（ＳＳＥ）命令、ＳＳＥ２命令、ＳＳＥ３命令、ＳＳＥ４．１命令およびＳＳＥ４．２命令を含む命令セットを有するＩｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサ、ベクトル浮動小数点（ＶＦＰ）命令および／またはＮＥＯＮ命令を含む命令セットを有するＡＲＭ  Ｃｏｒｔｅｘ（登録商標）ファミリのプロセッサ等のＡＲＭプロセッサ、中国科学アカデミーのコンピューティング技術協会（ＩＣＴ）によって開発されたＬｏｏｎｇｓｏｎファミリのプロセッサ等のＭＩＰＳプロセッサによって採用されるようなＳＩＭＤ技術がアプリケーション性能の大きな改善を可能にした（Ｃｏｒｅ（商標）およびＭＭＸ（商標）は、カリフォルニア州サンタクララのインテルコーポレーションの登録商標または商標である）。
【００５９】
一実施形態において、デスティネーションおよびソースのレジスタ／データとは、対応するデータまたは演算のソースおよびデスティネーションを表わす一般的な用語である。いくつかの実施形態において、それらはレジスタ、メモリ、または本明細書に記載されたものではない他の名前または機能を有する他のストレージ領域によって実装されてよい。例えば、一実施形態において、「ＤＥＳＴ１」が一時的なストレージレジスタまたは他のストレージ領域であってよい一方で、「ＳＲＣ１」および「ＳＲＣ２」は、第１のソースストレージレジスタおよび第２のソースストレージレジスタまたは他のストレージ領域等であってよい。他の実施形態において、ＳＲＣおよびＤＥＳＴストレージ領域のうちの２または２より多いものが、同一のストレージ領域（例えばＳＩＭＤレジスタ）内の複数の異なるデータストレージ要素に対応してよい。一実施形態において、複数のソースレジスタのうちの１つは、例えば、第１のソースデータおよび第２のソースデータで行われた演算結果をデスティネーションレジスタとして機能する２つのソースレジスタのうちの１つにライトバックすることによって、デスティネーションレジスタとして動作してもよい。
【００６０】
図１Ａは、プロセッサと共に形成された例示的なコンピュータシステムのブロック図であり、プロセッサは本発明の一実施形態による命令を実行するための実行ユニットを含む。システム１００は、本明細書に記載の実施形態におけるような本発明による、処理データに対するアルゴリズムを実行するためのロジックを含む実行ユニットを採用するプロセッサ１０２等のコンポーネントを含む。システム１００は、カリフォルニア州サンタクララのインテルコーポレーションから入手可能なＰＥＮＴＩＵＭ（登録商標）ＩＩＩ、ＰＥＮＴＩＵＭ（登録商標）４、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（商標）および／またはＳｔｒｏｎｇＡＲＭ（商標）マイクロプロセッサに基づく処理システムの典型的なものであるが、他のシステム（他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックス等を有するＰＣを含む）も使用されてよい。一実施形態において、サンプルシステム１００は、ワシントン州レドモンドのマイクロソフト社から入手可能なＷＩＮＤＯＷＳ（登録商標）オペレーティングシステムのバージョンを実行してよいが、他のオペレーティングシステム（例えばＵＮＩＸ（登録商標）およびＬｉｎｕｘ（登録商標））、埋め込みソフトウェアおよび／またはグラフィックユーザインタフェースも使用されてよい。故に、本発明の実施形態は、ハードウェア回路およびソフトウェアの任意の特定の組み合わせに限定されない。
【００６１】
実施形態はコンピュータシステムに限定されない。本発明の代替的な実施形態は、ハンドヘルドデバイスおよび埋め込みアプリケーション等の他のデバイスにおいて使用されてよい。ハンドヘルドデバイスのいくつかの例としては、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末（ＰＤＡ）およびハンドヘルドＰＣが含まれる。埋め込みアプリケーションとしては、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、システムオンチップ、ネットワークコンピュータ（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、または少なくとも一実施形態に係る１または複数の命令を実行し得る任意の他のシステムが含まれ得る。
【００６２】
図１Ａは、プロセッサ１０２と共に形成されたコンピュータシステム１００のブロック図であり、プロセッサ１０２は本発明の一実施形態による少なくとも１つの命令を実行するアルゴリズムを実行するための１または複数の実行ユニット１０８を含む。一実施形態は、単一プロセッサのデスクトップまたはサーバシステムの文脈で記載され得るが、代替の実施形態がマルチプロセッサシステム内に含まれてよい。システム１００は、「ハブ」システムアーキテクチャの一例である。コンピュータシステム１００は、データ信号を処理するためのプロセッサ１０２を含む。プロセッサ１０２は、複合命令セットコンピュータ（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、複数の命令セットの組み合わせを実装するプロセッサ、または、例えばデジタル信号プロセッサ等の任意の他のプロセッサデバイスであってよい。プロセッサ１０２はプロセッサバス１１０に連結され、プロセッサバス１１０は、プロセッサ１０２とシステム１００内の他のコンポーネントとの間でデータ信号を送信し得る。システム１００の複数の要素は、当該技術分野に習熟した者にとって周知であるそれらの従来機能を実行する。
【００６３】
一実施形態において、プロセッサ１０２はレベル１（Ｌ１）内部キャッシュメモリ１０４を含む。アーキテクチャに応じて、プロセッサ１０２は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有してよい。代替的に、別の実施形態においては、キャッシュメモリは、プロセッサ１０２の外部に存在してよい。他の実施形態はまた、特定の実装およびニーズに応じて、内部および外部の両方のキャッシュの組み合わせを含んでよい。レジスタファイル１０６は、異なるタイプのデータを整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタを含む様々なレジスタに格納してよい。
【００６４】
整数演算および浮動小数点演算を実行するためのロジックを含む実行ユニット１０８も、プロセッサ１０２内に存在する。プロセッサ１０２はまた、特定のマクロ命令のためのマイクロコードを格納するマイクロコード（μコード）ＲＯＭを含む。一実施形態では、実行ユニット１０８は、パックされた命令セット１０９を処理するためのロジックを含む。命令を実行するための関連回路と共に、汎用プロセッサ１０２の命令セット内にパックされた命令セット１０９を含めることによって、多くのマルチメディアアプリケーションによって使用される演算が、汎用プロセッサ１０２内のパックされたデータを使用して実行されてよい。故に、多くのマルチメディアアプリケーションはパックされたデータに演算を実行するために、プロセッサのデータバスの全幅を使用することによって、加速化され、より効率的に実行されてよい。これにより、１データ要素に１または複数の演算を一度に実行すべく、データのより小さな単位をプロセッサのデータバスにわたり転送する必要性をなくしてよい。
【００６５】
実行ユニット１０８の代替の実施形態はマイクロコントローラ、埋め込みプロセッサ、グラフィックデバイス、ＤＳＰ、および他のタイプのロジック回路内で使用されてもよい。システム１００は、メモリ１２０を含む。メモリ１２０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリデバイス、または他のメモリデバイスであってよい。メモリ１２０は、プロセッサ１０２によって実行可能な、データ信号によって表現される命令および／またはデータを格納してよい。
【００６６】
システムロジックチップ１１６は、プロセッサバス１１０およびメモリ１２０に連結される。示される実施形態中のシステムロジックチップ１１６は、メモリコントローラハブ（ＭＣＨ）である。プロセッサ１０２は、ＭＣＨ１１６とプロセッサバス１１０を介して通信してよい。ＭＣＨ１１６は、命令およびデータの格納およびグラフィックコマンド、データおよびテクスチャの格納のためにメモリ１２０への高帯域幅メモリパス１１８を提供する。ＭＣＨ１１６は、システム１００内のプロセッサ１０２、メモリ１２０、および他のコンポーネント間にわたり、データ信号を送信し、データ信号をプロセッサバス１１０、メモリ１２０、およびシステムＩ／Ｏ  １２２間にわたり橋渡しする。いくつかの実施形態において、システムロジックチップ１１６は、グラフィックコントローラ１１２に連結するためのグラフィックポートを提供してよい。ＭＣＨ１１６は、メモリインタフェース１１８を介してメモリ１２０に連結される。グラフィックカード１１２が、アクセラレーテッドグラフィックポート（ＡＧＰ）相互接続１１４を介してＭＣＨ１１６に連結される。
【００６７】
システム１００は、ＭＣＨ１１６をＩ／Ｏコントローラハブ（ＩＣＨ）１３０に連結するための独自のハブインタフェースバス１２２を使用する。ＩＣＨ１３０は、ローカルＩ／Ｏバスを介していくつかのＩ／Ｏデバイスへの直接的な接続を提供する。ローカルＩ／Ｏバスは、周辺機器をメモリ１２０、チップセットおよびプロセッサ１０２に接続するための高速Ｉ／Ｏバスである。いくつかの例としては、オーディオコントローラ、ファームウェアハブ（フラッシュＢＩＯＳ）１２８、無線送受信器１２６、データストレージ１２４、ユーザ入力およびキーボードインタフェースを含むレガシＩ／Ｏコントローラ、ユニバーサルシリアルバス（ＵＳＢ）等のシリアル拡張ポート、およびネットワークコントローラ１３４が挙げられる。データストレージデバイス１２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ‐ＲＯＭデバイス、フラッシュメモリデバイス、または他の大容量ストレージデバイスを含んでよい。
【００６８】
システムの別の実施形態について、一実施形態による命令はシステムオンチップと共に使用されてよい。システムオンチップの一実施形態は、プロセッサおよびメモリで構成される。このような１システムのためのメモリはフラッシュメモリである。フラッシュメモリは、プロセッサおよび他のシステムコンポーネントと同一ダイ上に配置されてよい。また、メモリコントローラまたはグラフィックコントローラ等の他のロジックブロックもシステムオンチップ上に配置されてよい。
【００６９】
図１Ｂは、本発明の一実施形態に係る原理を実装するデータ処理システム１４０を示す。本明細書に記載の実施形態は、本発明の実施形態の範囲から逸脱することなく、代替の処理システムと共に使用し得ることを当業者は容易に理解されたい。
【００７０】
コンピュータシステム１４０は、一実施形態による少なくとも１つの命令を実行可能な処理コア１５９を備える。一実施形態について、処理コア１５９は、特に限定されないが、ＣＩＳＣ、ＲＩＳＣ、またはＶＬＩＷタイプのアーキテクチャを含む任意のタイプのアーキテクチャの処理ユニットを表わす。処理コア１５９はまた、１または複数の処理技術における製造に好適であってよく、また機械可読媒体に対し十分詳細に表現されることによって、当該製造を容易にするために好適であってよい。
【００７１】
処理コア１５９は、実行ユニット１４２、レジスタファイルのセット１４５、およびデコーダ１４４を備える。処理コア１５９はまた、本発明の実施形態の理解には不要である追加の回路（不図示）を含む。実行ユニット１４２は処理コア１５９によって受信される命令を実行するために使用される。典型的なプロセッサ命令の実行に加え、実行ユニット１４２は、パックされたデータフォーマットに演算を実行するために、パックされた命令セット１４３内の命令を実行してよい。パックされた命令セット１４３は、本発明の実施形態を実行するための命令および他のパックされた命令を含む。実行ユニット１４２は、内部バスによってレジスタファイル１４５に連結される。レジスタファイル１４５は、データを含む情報を格納するための処理コア１５９上のストレージ領域を表わす。上記の通り、パックされたデータを格納するために使用されるストレージ領域は、重要ではないことを理解されたい。実行ユニット１４２はデコーダ１４４に連結される。デコーダ１４４は、処理コア１５９によって受信される命令を、制御信号および／またはマイクロコードエントリポイントにデコードするために使用される。これらの制御信号および／またはマイクロコードエントリポイントに応答して、実行ユニット１４２は適切な演算を実行する。一実施形態において、デコーダは命令のオペコードを解釈するために使用され、当該オペコードは、命令内で示される該当データに対しどのような演算を実行すべきかを示すであろう。
【００７２】
処理コア１５９は、様々な他のシステムデバイスとの通信のためにバス１４１に連結され、当該システムデバイスとしては特に限定されないが、例えば、シンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）コントロール１４６、スタティックランダムアクセスメモリ（ＳＲＡＭ）コントロール１４７、バーストフラッシュメモリインタフェース１４８、ＰＣメモリカード国際協会（ＰＣＭＣＩＡ）／コンパクトフラッシュ（登録商標）（ＣＦ）カードコントロール１４９、液晶ディスプレイ（ＬＣＤ）コントロール１５０、ダイレクトメモリアクセス（ＤＭＡ）コントローラ１５１、および代替のバスマスターインタフェース１５２が含まれてよい。一実施形態において、データ処理システム１４０はまたＩ／Ｏバス１５３を介して様々なＩ／Ｏデバイスと通信するためのＩ／Ｏブリッジ１５４を含んでよい。このようなＩ／Ｏデバイスとしては特に限定されないが、例えば、汎用非同期送受信回路（ＵＡＲＴ）１５５、ユニバーサルシリアルバス（ＵＳＢ）１５６、Ｂｌｕｅｔｏｏｔｈ（登録商標）無線ＵＡＲＴ１５７およびＩ／Ｏ拡張インタフェース１５８が含まれてよい。
【００７３】
データ処理システム１４０の一実施形態は、モバイル、ネットワークおよび／または無線通信、並びに文字列比較演算等を含むＳＩＭＤ演算を実行可能な処理コア１５９を提供する。処理コア１５９は、様々なオーディオアルゴリズム、ビデオアルゴリズム、イメージ処理アルゴリズムおよび通信アルゴリズムでプログラムされてよく、当該アルゴリズムにはウォルシュアダマール変換、高速フーリエ変換（ＦＦＴ）、離散コサイン変換（ＤＣＴ）、およびそれらそれぞれの逆変換等の離散変換と、色空間変換、ビデオエンコードモーション推定またはビデオデコードモーション補償等の圧縮／圧縮解除技法と、パルス符号変調（ＰＣＭ）等の変調／復調（ＭＯＤＥＭ）機能とが含まれる。
【００７４】
図１Ｃは、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための命令を実行可能なデータ処理システムの別の代替の実施形態を示す。代替の一実施形態により、データ処理システム１６０は、メインプロセッサ１６６、ＳＩＭＤコプロセッサ１６１、キャッシュメモリ１６７、および入／出力システム１６８を含んでよい。随意で、入／出力システム１６８は、無線インタフェース１６９に連結されてよい。ＳＩＭＤコプロセッサ１６１は、一実施形態による命令を含む演算を実行可能である。処理コア１７０は１または複数の処理技術における製造に好適であってよく、また機械可読媒体上で十分詳細に表現されることによって、処理コア１７０を含むデータ処理システム１６０のうちの全部または一部の製造を容易にするために好適であってよい。
【００７５】
一実施形態について、ＳＩＭＤコプロセッサ１６１は実行ユニット１６２およびレジスタファイルのセット１６４を備える。メインプロセッサ１６６の一実施形態は、実行ユニット１６２による実行のための一実施形態による命令を含む命令セット１６３のうちの命令を認識するためのデコーダ１６５を備える。代替の実施形態については、ＳＩＭＤコプロセッサ１６１はまた、命令セット１６３のうちの命令をデコードするためのデコーダ１６５Ｂのうちの少なくとも一部を備える。処理コア１７０はまた、本発明の実施形態の理解には不要である追加の回路（不図示）を含む。
【００７６】
演算時、メインプロセッサ１６６は、キャッシュメモリ１６７および入／出力システム１６８とのやり取りを含む一般的なタイプのデータ処理操作を制御するデータ処理命令ストリームを実行する。ＳＩＭＤコプロセッサ命令がデータ処理命令ストリーム内に埋め込まれている。メインプロセッサ１６６のデコーダ１６５は、これらのＳＩＭＤコプロセッサ命令を付属のＳＩＭＤコプロセッサ１６１によって実行される必要があるタイプのものであると認識する。従って、メインプロセッサ１６６は、これらのＳＩＭＤコプロセッサ命令（または、ＳＩＭＤコプロセッサ命令を表わす制御信号）をコプロセッサバス１７１に対し発行し、当該コプロセッサバス１７１から、これらのＳＩＭＤコプロセッサ命令が任意の付属のＳＩＭＤコプロセッサによって受信される。この場合、ＳＩＭＤコプロセッサ１６１は、自身を宛先とするあらゆる受信されたＳＩＭＤコプロセッサ命令を受け付けおよび実行する。
【００７７】
データは、ＳＩＭＤコプロセッサ命令による処理のために、無線インタフェース１６９を介して受信されてよい。一例として、音声通信がデジタル信号の形態で受信されてよく、当該デジタル信号はＳＩＭＤコプロセッサ命令によって処理され、当該音声通信を表わすデジタルオーディオサンプルを再生成してよい。別の例として、圧縮されたオーディオおよび／またはビデオがデジタルビットストリームの形態で受信されてよく、当該デジタルビットストリームはＳＩＭＤコプロセッサ命令によって処理され、デジタルオーディオサンプルおよび／またはモーションビデオフレームを再生成してよい。処理コア１７０の一実施形態について、メインプロセッサ１６６およびＳＩＭＤコプロセッサ１６１は、単一の処理コア１７０に統合され、当該単一の処理コア１７０は実行ユニット１６２、レジスタファイルのセット１６４および一実施形態による命令を含む命令セット１６３のうちの命令を認識するためのデコーダ１６５を備える。
【００７８】
図２は、本発明の一実施形態による命令を実行するためのロジック回路を含むプロセッサ２００のためのマイクロアーキテクチャのブロック図である。いくつかの実施形態において、一実施形態による命令は、バイト、ワード、ダブルワード、クワッドワード等のサイズに加え、単精度整数データタイプおよび倍精度整数データタイプおよび単精度浮動小数点データタイプおよび倍精度浮動小数点データタイプのようなデータタイプを有するデータ要素に演算を行うように実装されてよい。一実施形態において、インオーダフロントエンド２０１は実行されるべき命令をフェッチするプロセッサ２００の一部であり、当該命令をプロセッサパイプラインにおいて後で使用されるように準備する。フロントエンド２０１はいくつかのユニットを含んでよい。一実施形態において、命令プリフェッチャ２２６は、メモリから命令をフェッチし、当該命令を命令デコーダ２２８にフィードすると、命令デコーダ２２８が今度は当該命令をデコードまたは解釈する。例えば、一実施形態において、デコーダは、受信された命令を、機械が実行可能な「マイクロ命令」または「マイクロオペレーション」（マイクロｏｐまたはμｏｐとも称される）と称される１または複数の演算にデコードする。他の実施形態において、デコーダは命令を、オペコード並びに対応するデータおよび制御フィールドに解析する。オペコード並びに対応するデータおよび制御フィールドは、マイクロアーキテクチャによって使用され、一実施形態による演算を実行する。一実施形態において、トレースキャッシュ２３０はデコードされたμｏｐを取得し、実行のために、それらをプログラムにより順序付けられたシーケンスまたはμｏｐキュー２３４内のトレースに組み立てる。トレースキャッシュ２３０が複雑な命令に遭遇する場合、マイクロコードＲＯＭ２３２は演算の完了に必要なμｏｐを提供する。
【００７９】
いくつかの命令が単一のマイクロｏｐに変換される一方、他の命令は完全な演算を完了させるためのいくつかのマイクロｏｐを必要とする。一実施形態において、命令の完了に４つより多いマイクロｏｐが必要な場合、デコーダ２２８はマイクロコードＲＯＭ２３２にアクセスし、命令を実行する。一実施形態において、命令は、命令デコーダ２２８で処理するための少数のマイクロｏｐにデコードされてよい。別の実施形態において、演算を遂行するために多数のマイクロｏｐが必要な場合、命令はマイクロコードＲＯＭ２３２内に格納されてよい。トレースキャッシュ２３０とは、一実施形態によるマイクロコードＲＯＭ２３２からの１または複数の命令を完了すべく、マイクロコードシーケンスを読み取るための正しいマイクロ命令ポインタを判断するためのエントリポイントプログラマブルロジックアレイ（ＰＬＡ）を指す。マイクロコードＲＯＭ２３２が命令のためのマイクロｏｐのシーケンス処理を完了した後、機械のフロントエンド２０１は、トレースキャッシュ２３０からのマイクロｏｐのフェッチを再開する。
【００８０】
アウトオブオーダ実行エンジン２０３は、命令を実行のために準備する場所である。アウトオブオーダ実行ロジックは、命令フローがパイプラインに行き、実行のためにスケジュールされる際、性能を最適化するために、命令フローを円滑化し、並べ替えるための複数のバッファを有する。アロケータロジックは、各μｏｐが実行のために必要とする機械のバッファおよびリソースを割り当てる。レジスタリネーミングロジックはロジックレジスタをレジスタファイル内のエントリにリネーム（名前変更）する。アロケータはまた、命令スケジューラの前にある２つのμｏｐキューのうちの一方にある各μｏｐのためにエントリを割り当てる。当該μｏｐキューのうちの１つはメモリ操作用、もう１つは非メモリ操作用のものであり、当該命令スケジューラはメモリスケジューラ、高速スケジューラ２０２、低速／全般浮動小数点スケジューラ２０４、および簡易浮動小数点スケジューラ２０６で構成される。μｏｐスケジューラ２０２、２０４、２０６は、それらの従属入力レジスタオペランドソースの準備状態およびμｏｐがそれらの演算の完了に必要とする実行リソースの利用可能性に基づいて、μｏｐが、いつ実行準備が整うかを判断する。一実施形態の高速スケジューラ２０２は、メインクロックサイクルの各半分においてスケジュールしてよい一方、他のスケジューラはメインプロセッサクロックサイクルごとに一回のみスケジュールしてよい。スケジューラは、μｏｐの実行をスケジュールするためのディスパッチポートを調整する。
【００８１】
レジスタファイル２０８、２１０は、スケジューラ２０２、２０４、２０６および実行ブロック２１１内の実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４間に配置される。それぞれ整数演算および浮動小数点演算のための別個のレジスタファイル２０８、２１０が存在する。一実施形態の各レジスタファイル２０８、２１０はまた、レジスタファイル内にまだ書き込まれていない完了したばかりの結果を、新しい従属μｏｐにバイパスまたは転送し得るバイパスネットワークを含む。整数レジスタファイル２０８および浮動小数点レジスタファイル２１０はまた、それら同士でデータを通信可能である。一実施形態について、整数レジスタファイル２０８は２つの別個のレジスタファイルに分割され、１つのレジスタファイルは低次の３２ビットデータ用、第２のレジスタファイルは高次の３２ビットデータ用である。一実施形態の浮動小数点レジスタファイル２１０は、１２８ビット幅エントリを有する。というのは、浮動小数点命令は通常、６４〜１２８ビット幅のオペランドを有するからである。
【００８２】
実行ブロック２１１は、命令が実際に実行される場所である実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４を含む。このセクションは、マイクロ命令が実行する必要のある整数データオペランド値および浮動小数点データオペラント値を格納するレジスタファイル２０８、２１０を含む。一実施形態のプロセッサ２００は複数の実行ユニット、すなわちアドレス生成ユニット（ＡＧＵ）２１２、ＡＧＵ２１４、高速ＡＬＵ２１６、高速ＡＬＵ２１８、低速ＡＬＵ２２０、浮動小数点ＡＬＵ２２２、浮動小数点移動ユニット２２４で構成される。一実施形態では、浮動小数点実行ブロック２２２、２２４は、浮動小数点演算、ＭＭＸ演算、ＳＩＭＤ演算およびＳＳＥ演算または他の演算を実行する。一実施形態の浮動小数点ＡＬＵ２２２は、マイクロｏｐの除算、平方根および剰余を実行するための６４ビット単位の浮動小数点除算器を含む。本発明のいくつかの実施形態について、浮動小数点値を含む命令は、浮動小数点ハードウェアで処理されてよい。一実施形態において、ＡＬＵ演算が高速ＡＬＵ実行ユニット２１６、２１８に移動する。一実施形態の高速ＡＬＵ２１６、２１８は、高速演算をクロックサイクルの半分の有効なレイテンシで実行してよい。一実施形態では、複素整数演算の大半は低速ＡＬＵ２２０に移動される。というのは、低速ＡＬＵ２２０は、乗算、シフト、フラグロジック、および分岐処理等の長レイテンシタイプの演算のための整数実行ハードウェアを含むからである。メモリロード／ストア操作は、ＡＧＵ２１２、２１４によって実行される。一実施形態では、整数ＡＬＵ２１６、２１８、２２０は、６４ビットデータオペランドに整数演算を実行する文脈で記載される。代替の実施形態において、ＡＬＵ２１６、２１８、２２０は、１６、３２、１２８、２５６等の様々なデータビットをサポートするように実装されてよい。同様に、浮動小数点ユニット２２２、２２４は、様々なビット幅を有するオペランドの範囲をサポートするように実装されてよい。一実施形態では、浮動小数点ユニット２２２、２２４は、ＳＩＭＤ命令およびマルチメディア命令と連携して、１２８ビット幅のパックされたデータオペランドに演算を行ってよい。
【００８３】
一実施形態において、μｏｐスケジューラ２０２、２０４、２０６は、親ロードが実行を終了する前に、従属する演算をディスパッチする。μｏｐはプロセッサ２００内で予測的にスケジュールされ、実行され、プロセッサ２００はまたメモリミスを処理するためのロジックを含む。データロードがデータキャッシュ内で失敗する場合、従属する演算がパイプライン内にインフライトで存在する可能性があり、これにより、スケジューラは一時的に誤ったデータが残された状態になっている。再生メカニズムは、誤ったデータを使用する命令を追跡および再実行する。従属する演算のみが再生の必要があり、独立した演算は完了を許可される。プロセッサの一実施形態に係るスケジューラおよび再生メカニズムはまた、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令をキャッチするように設計されている。
【００８４】
「レジスタ」という用語は、オペランドを識別するための命令の一部として使用されるオンボードプロセッサのストレージ場所を指してよい。換言すると、レジスタとは、プロセッサの外部（プログラマの視点から）から使用可能なレジスタであってよい。しかしながら、一実施形態のレジスタは特定のタイプの回路を意味するものとして限定されるべきではない。一実施形態のレジスタは、データの格納、データの供給、および本明細書に記載の機能を実行可能である。本明細書に記載のレジスタは、プロセッサ内の回路によって、専用物理レジスタ、レジスタリネーミングを使用して動的に割り当てられた物理レジスタ、専用物理レジスタおよび動的に割り当てられた物理レジスタの組み合わせ等、任意の数の異なる技術を使用して実装されてよい。一実施形態において、整数レジスタは３２ビットの整数データを格納する。一実施形態のレジスタファイルはまた、パックされたデータのための８つのマルチメディアＳＩＭＤレジスタを含む。後述の通り、レジスタはパックされたデータを保持するように設計されたデータレジスタであると理解されてよく、当該データレジスタとしては、カリフォルニア州サンタクララのインテルコーポレーションのＭＭＸ技術で有効にされるマイクロプロセッサ内の６４ビット幅ＭＭＸ（商標）レジスタ（いくつかの例において「ｍｍ」レジスタとも称される）といったものが挙げられる。整数および浮動小数点の両方の形態で利用可能なこれらのＭＭＸレジスタは、ＳＩＭＤ命令およびＳＳＥ命令に伴うパックされたデータ要素と共に動作してよい。同様に、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４、またはそれ以降（概して「ＳＳＥｘ」と称される）に関する１２８ビット幅ＸＭＭレジスタ技術は、このようなパックされたデータオペランドを保持するためにも使用されてよい。一実施形態において、パックされたデータおよび整数データを格納する際、レジスタは当該２つのデータタイプ間を区別する必要はない。一実施形態において、整数および浮動小数点は同一のレジスタファイル内または異なるレジスタファイル内に含まれる。さらに、一実施形態において、浮動小数点データおよび整数データは異なるレジスタ内または同一のレジスタ内に格納されてよい。
【００８５】
以下の図中の例示において、多数のデータオペランドについて説明される。図３Ａは、本発明の一実施形態による、マルチメディアレジスタ内の様々なパックされたデータタイプを表わしたものを示す。図３Ａは、１２８ビット幅オペランドのパックされたバイト３１０、パックされたワード３２０、およびパックされたダブルワード（ｄｗｏｒｄ）３３０のデータタイプを示す。この例のパックされたバイトフォーマット３１０は１２８ビット長であり、１６個のパックされたバイトデータ要素を含む。１バイトは、例えば、８ビットのデータとして定義される。各バイトデータ要素の情報は、０ビットから７ビットまではバイト０、８ビットから１５ビットまではバイト１、１６ビットから２３ビットまではバイト２、および最終の１２０ビットから１２７ビットまではバイト１５内に格納される。故に、すべての利用可能なビットがレジスタ内で使用される。このストレージ構成によって、プロセッサのストレージ効率が向上する。なお、１６個のデータ要素にアクセスされるので、１６個のデータ要素に対し１つの演算が並列に実行されてよい。
【００８６】
概して、一データ要素は、同一の長さを持つ他のデータ要素と共に、単一のレジスタまたはメモリ場所に格納される個々のデータである。ＳＳＥｘ技術に関するパックされたデータシーケンスにおいては、ＸＭＭレジスタ内に格納されたデータ要素の数は、個々のデータ要素のビット長で分割された１２８ビットである。同様に、ＭＭＸおよびＳＳＥ技術に関するパックされたデータシーケンスにおいては、ＭＭＸレジスタ内に格納されたデータ要素の数は、個々のデータ要素のビット長で分割された６４ビットである。図３Ａに示すデータタイプは１２８ビット長であるが、本発明の実施形態は、６４ビット幅、２５６ビット幅、５１２ビット幅のオペランドまたは他のサイズのオペランドと共に動作してもよい。この例のパックされたワードフォーマット３２０は１２８ビット長であり、８個のパックされたワードデータ要素を含む。各パックされたワードは、１６ビットの情報を含む。図３Ａのパックされたダブルワードフォーマット３３０は１２８ビット長であり、４個のパックされたダブルワードデータ要素を含む。各パックされたダブルワードデータ要素は、３２ビットの情報を含む。パックされたクワッドワードは１２８ビット長であり、２個のパックされたクワッドワードデータ要素を含む。
【００８７】
図３Ｂは、代替的なレジスタ内データストレージフォーマットを示す。各パックされたデータは、１より多い独立データ要素を含んでよい。パックされたハーフ３４１、パックされたシングル３４２およびパックされたダブル３４３の３つのパックされたデータフォーマットが図示されている。パックされたハーフ３４１、パックされたシングル３４２およびパックされたダブル３４３の一実施形態は、固定小数点データ要素を含む。代替的な実施形態については、パックされたハーフ３４１、パックされたシングル３４２およびパックされたダブル３４３のうちの１または複数は、浮動小数点データ要素を含んでよい。パックされたハーフ３４１の代替的な一実施形態は、８個の１６ビットデータ要素を含む１２８ビット長である。パックされたシングル３４２の一実施形態は１２８ビット長であり、４個の３２ビットデータ要素を含む。パックされたダブル３４３の一実施形態は１２８ビット長であり、２個の６４ビットデータ要素を含む。このようなパックされたデータフォーマットは、例えば、９６ビット、１６０ビット、１９２ビット、２２４ビット、２５６ビット、５１２ビットまたはそれ以上といった他のレジスタ長にさらに拡張されてよいことを理解されたい。
【００８８】
図３Ｃは、本発明の一実施形態による、マルチメディアレジスタ内の様々な符号付きおよび符号なしのパックされたデータタイプを表わしたものを示す。符号なしのパックされたバイト表現３４４は、ＳＩＭＤレジスタ内の符号なしのパックされたバイトの格納状態を示す。各バイトデータ要素の情報は、０ビットから７ビットまではバイト０、８ビットから１５ビットまではバイト１、１６ビットから２３ビットまではバイト２等、および最終の１２０ビットから１２７ビットまではバイト１５内に格納される。故に、すべての利用可能なビットがレジスタ内で使用される。このストレージ構成によって、プロセッサのストレージ効率が向上されてよい。なお、１６個のデータ要素にアクセスされるので、１６個のデータ要素に対し１つの演算が並列に実行されてよい。符号付きのパックされたバイト表現３４５は、符号付きのパックされたバイトの格納状態を示す。各バイトデータ要素の第８番目のビットは、符号インジケータであることに留意されたい。符号なしのパックされたワード表現３４６は、ワード０からワード７がＳＩＭＤレジスタ内にどのように格納されるかを示す。符号付きのパックされたワード表現３４７は、符号なしのパックされたワードのレジスタ内表現３４６と類似する。各ワードデータ要素の第１６番目のビットが符号インジケータであることに留意されたい。符号なしのパックされたダブルワード表現３４８は、ダブルワードデータ要素の格納方法を示す。符号付きパックされたダブルワード表現３４９は、符号なしのパックされたダブルワードのレジスタ内表現３４８と類似する。必要な符号ビットは、各ダブルワードデータ要素の第３２番目のビットであることに留意されたい。
【００８９】
図３Ｄは、演算エンコーディング（オペコード）フォーマット３６０の一実施形態の図であり、演算エンコーディング（オペコード）フォーマット３６０は３２ビットまたは３２ビットより多いビットを有し、カリフォルニア州サンタクララのインテルコーポレーションのｗｏｒｌｄ  ｗｉｄｅ  ｗｅｂ（ｗｗｗ）(intel.com/products/processor/manuals/)から入手可能な「インテル（登録商標）６４およびＩＡ‐３２インテルアーキテクチャソフトウェア開発者のマニュアル第２Ａと第２Ｂとの組み合わせ：命令セットリファレンスＡ-Ｚ」に記載のタイプのオペコードフォーマットと一致するレジスタ／メモリオペランドアドレス指定モードを有する。一実施形態において、命令はフィールド３６１および３６２のうちの１または複数によってエンコードされてよい。１命令ごとに、最大２つのソースオペランド識別子３６４および３６５を含む、最大２つのオペランド位置が識別されてよい。一実施形態では、デスティネーションオペランド識別子３６６は、ソースオペランド識別子３６４と同一である一方、他の実施形態においては、それらは異なる。代替の実施形態では、デスティネーションオペランド識別子３６６は、ソースオペランド識別子３６５と同一である一方、他の実施形態においては、それらは異なる。一実施形態において、ソースオペランド識別子３６４および３６５によって識別される複数のソースオペランドのうちの１つは、命令の結果によって上書きされる一方、他の実施形態においては、識別子３６４はソースレジスタ要素に対応し、識別子３６５はデスティネーションレジスタ要素に対応する。一実施形態では、オペランド識別子３６４および３６５を使用して、３２ビットまたは６４ビットのソースオペランドおよびデスティネーションオペランドを識別してよい。
【００９０】
図３Ｅは、４０または４０より多くのビットを有する別の代替の演算エンコーディング（オペコード）フォーマット３７０の図である。オペコードフォーマット３７０は、オペコードフォーマット３６０と対応し、オプションのプレフィックスバイト３７８を含む。一実施形態による命令は、フィールド３７８、３７１および３７２のうちの１または複数によってエンコードされてよい。１命令ごとに最大２つのオペランド位置が、ソースオペランド識別子３７４および３７５並びにプレフィックスバイト３７８によって識別されてよい。一実施形態では、プレフィックスバイト３７８が使用され、３２ビットまたは６４ビットのソースオペランドおよびデスティネーションオペランドを識別してよい。一実施形態では、デスティネーションオペランド識別子３７６はソースオペランド識別子３７４と同一である一方、他の実施形態においては、それらは異なる。代替の実施形態では、デスティネーションオペランド識別子３７６は、ソースオペランド識別子３７５と同一である一方、他の実施形態においては、それらは異なる。一実施形態において、命令はオペランド識別子３７４および３７５によって識別されるオペランドのうちの１または複数に対し演算を行い、オペランド識別子３７４および３７５によって識別される１または複数のオペランドは命令の結果で上書きされる一方、他の実施形態においては、識別子３７４および３７５によって識別されるオペランドは別のレジスタ内の別のデータ要素に書き込まれる。オペコードフォーマット３６０および３７０は、レジスタ対レジスタ、メモリ対レジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタ対メモリのアドレス指定が、ＭＯＤフィールド３６３および３７３によって並びにオプションのスケールインデックスベースおよび変位バイトによって部分的に指定されることを可能にする。
【００９１】
次に図３Ｆを参照すると、いくつかの代替の実施形態において、６４ビット（または１２８ビットまたは２５６ビットまたは５１２ビットまたはそれ以上）の単一命令複数データ（ＳＩＭＤ）算術演算は、コプロセッサデータ処理（ＣＤＰ）命令を介して実行されてよい。演算エンコーディング（オペコード）フォーマット３８０は、ＣＤＰオペコードフィールド３８２および３８９を有する１つのそのようなＣＤＰ命令を表示する。代替の実施形態における、当該タイプのＣＤＰ命令演算は、フィールド３８３、３８４、３８７および３８８のうちの１または複数によってエンコードされてよい。１命令ごとに、最大２つのソースオペランド識別子３８５および３９０並びに１つのデスティネーションオペランド識別子３８６を含む、最大３つのオペランド位置が識別されてよい。コプロセッサの一実施形態は、８ビット、１６ビット、３２ビット、および６４ビットの値に演算を行ってよい。一実施形態について、命令は整数データ要素に対し実行される。いくつかの実施形態において、命令は条件フィールド３８１を使用して条件的に実行されてよい。いくつかの実施形態では、ソースデータサイズがフィールド３８３によってエンコードされてよい。いくつかの実施形態において、ゼロ（Ｚ）、負（Ｎ）、キャリー（Ｃ）およびオーバーフロー（Ｖ）検出がＳＩＭＤフィールドでなされてよい。いくつかの命令については、飽和タイプがフィールド３８４によってエンコードされてよい。
【００９２】
次に図３Ｇを参照すると、カリフォルニア州サンタクララのインテルコーポレーションのｗｏｒｌｄ−ｗｉｄｅ−ｗｅｂ（ｗｗｗ）のintel.com/products/processor/manuals/から入手可能な「Ｉｎｔｅｌ（登録商標）Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ」に記載されたオペコードフォーマットタイプに一致する、別の実施形態によるＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための別の代替的な演算エンコーディング（オペコード）フォーマット３９７の図である。
【００９３】
オリジナルのｘ８６命令セットは、アドレスシラブルの様々なフォーマットおよび追加のバイト内に含まれる即値オペランドを持つ１バイトオペコードのために提供されており、追加のバイトの存在は第１の「オペコード」バイトから認識される。また、オペコードに対する修飾子として予約された特定のバイト値が存在した（命令の前に配置される必要があったことから、プレフィックスと称される）。２５６オペコードバイトの元のパレット（これらの特別なプレフィックス値を含む）が使用され尽くすと、単一のバイトが２５６オペコードの新しいセットへのエスケープとして使用された。ベクトル命令（例えば、ＳＩＭＤ）が追加されたら、より多くのオペコードの必要性が生じるので、たとえプレフィックスの使用を介して拡張された場合であっても、「２バイト」オペコードマッピングもまた不十分であった。この目的のために、２バイトにさらに、オプションのプレフィックスを識別子として使用する追加のマップ内に、新しい命令が追加された。
【００９４】
また、６４ビットモードの追加のレジスタを容易化すべく、プレフィックスとオペコード（および、オペコードを判断するために必要な任意のエスケープバイト）との間に追加のプレフィックス（「ＲＥＸ」と称する）が使用されてよい。一実施形態において、６４ビットモードの追加のレジスタの使用を示すべく、ＲＥＸは４つの「ペイロード」ビットを有してよい。他の実施形態において、ＲＥＸは４ビットより少ないまたは多いビットを有してよい。少なくとも１つの命令セットの一般的なフォーマット（フォーマット３６０および／またはフォーマット３７０に概して対応する）は一般的に、以下のように示される。
[prefixes] [rex] escape [escape2] opcode modrm (等)
【００９５】
オペコードフォーマット３９７は、オペコードフォーマット３７０に対応し、最も一般的に使用される他のレガシの命令プレフィックスバイトおよびエスケープコードに代わるオプションのＶＥＸプレフィックスバイト３９１（一実施形態では、１６進数の「Ｃ４」で開始する）を含む。例えば、以下は、命令をエンコードするための２つのフィールドを使用する一実施形態を示す。それは、元の命令内に第２のエスケープコードが存在する場合、またはＲＥＸフィールド内の追加のビット（例えば、ＸＢフィールドおよびＷフィールド）が使用される必要がある場合に、使用されてよい。以下に示される実施形態では、レガシエスケープが新しいエスケープ値によって表され、レガシプレフィックスは「ペイロード」バイトの一部として完全に圧縮され、レガシプレフィックスは将来の拡張のために再利用され、利用可能であり、第２のエスケープコードは、利用可能な将来のマップまたは特徴空間とともに「マップ」フィールドに圧縮され、新しい特徴（例えば、増大されたベクトル長および追加のソースレジスタ指定子）が追加される。
【数１】
0006535972.tif 000002
【００９６】
一実施形態による命令が、フィールド３９１および３９２のうちの１または複数によってエンコードされてよい。１命令につき最大４つのオペランド位置が、ソースオペランド識別子３７４および３７５との組み合わせ、並びにオプションのスケールインデックスベース（ＳＩＢ）識別子３９３と、オプションの変位識別子３９４と、オプションの即値バイト３９５との組み合わせによるフィールド３９１によって識別されてよい。一実施形態について、３２ビット若しくは６４ビットのソースオペランドおよびデスティネーションオペランド、並びに／または１２８ビット若しくは２５６ビットのＳＩＭＤレジスタオペランドまたはメモリオペランドを識別すべく、ＶＥＸプレフィックスバイト３９１が使用されてよい。一実施形態について、オペコードフォーマット３９７によって提供される機能は、オペコードフォーマット３７０と冗長的であってよい一方、他の実施形態においては、それらは異なる。オペコードフォーマット３７０および３９７は、レジスタ対レジスタ、メモリ対レジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタ対メモリのアドレス指定が、ＭＯＤフィールド３７３によって部分的に並びにオプションの（ＳＩＢ）識別子３９３と、オプションの変位識別子３９４と、オプションの即値バイト３９５とによって指定されることを可能にする。
【００９７】
次に図３Ｈを参照すると、別の実施形態による、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための別の代替的な演算エンコーディング（オペコード）フォーマット３９８の図である。オペコードフォーマット３９８は、オペコードフォーマット３７０および３９７に対応し、最も一般的に使用される他のレガシの命令プレフィックスバイトおよびエスケープコードに代わり、かつ、追加の機能を提供するためのオプションのＥＶＥＸプレフィックスバイト３９６（一実施形態では、１６進数の「６２」から開始）を含む。  一実施形態による命令が、フィールド３９６および３９２のうちの１または複数によってエンコードされてよい。１命令につき最大４つのオペランド位置およびマスクが、ソースオペランド識別子３７４と３７５との組み合わせ、およびオプションのスケールインデックスベース（ＳＩＢ）識別子３９３と、オプションの変位識別子３９４と、オプションの即値バイト３９５との組み合わせによるフィールド３９６によって識別されてよい。一実施形態について、３２ビット若しくは６４ビットのソースオペランドおよびデスティネーションオペランド、並びに／または１２８ビット、２５６ビット若しくは５１２ビットのＳＩＭＤレジスタオペランドまたはメモリオペランドを識別すべく、ＥＶＥＸプレフィックスバイト３９６が使用されてよい。一実施形態について、オペコードフォーマット３９８によって提供される機能は、オペコードフォーマット３７０または３９７と冗長的であってよい一方、他の実施形態においては、それらは異なる。オペコードフォーマット３９８は、レジスタ対レジスタ、メモリ対レジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタ対メモリのマスクを用いるアドレス指定が、ＭＯＤフィールド３７３によって部分的に並びにオプションの（ＳＩＢ）識別子３９３と、オプションの変位識別子３９４と、オプションの即値バイト３９５とによって指定されることを可能にする。少なくとも１つの命令セットの一般的なフォーマット（フォーマット３６０および／またはフォーマット３７０に概して対応する）は一般的に、以下のように示される。
evexl RXBmmmmm WvvvLpp evex4 opcode modrm [sib] [disp] [imm] 
【００９８】
一実施形態について、ＥＶＥＸフォーマット３９８によりエンコードされた命令は、追加の新しい機能と共にＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するために使用され得る追加の「ペイロード」ビットを有してよい。追加の新しい機能としては、例えば、ユーザ構成可能マスクレジスタ、または追加のオペランド、または１２８ビット、２５６ビット若しくは５１２ビットのベクトルレジスタまたはそれより多いビットのレジスタからの選択等が含まれ、選択はこれらのレジスタからなされる。
【００９９】
例えば、暗黙的なマスクを持つＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するためにＶＥＸフォーマット３９７が使用されてよい場合、明示的なユーザ構成可能マスクを持つＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するためにＥＶＥＸフォーマット３９８が使用されてよい。また、１２８ビットまたは２５６ビットのベクトルレジスタにＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するためにＶＥＸフォーマット３９７が使用されてよい場合、１２８ビット、２５６ビット、５１２ビットまたはそれより大きい（またはより小さい）ベクトルレジスタにＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するために、ＥＶＥＸフォーマット３９８が使用されてよい。
【０１００】
ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための例示的命令が、以下の例によって示される。
【表１】
0006535972.tif 000003
【０１０１】
ＳＩＭＤ  ＳＭ３暗号化ハッシュ命令は上の例の通り、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を複数のアプリケーションに提供するために使用できることを理解されたい。そのようなアプリケーションとしては、財務トランザクション、電子商取引、電子メール、ソフトウェア配布、データストレージ、乱数生成等のためのデータ整合性、デジタル署名、本人確認、メッセージコンテンツ認証およびメッセージ元認証を保証するための暗号化プロトコルおよびインターネット通信が挙げられる。
【０１０２】
ハッシュラウンドの予め指定された数の反復を行うＳＩＭＤ  ＳＭ３暗号化ハッシュ命令を提供することによって、特定のハッシュアルゴリズム実装によるメッセージ「チャンク」の処理および予め回転されたラウンド定数（例えば、Ｔｊ＜＜＜ｊ）の準備等の他のＳＩＭＤ処理およびスカラ処理と同時に、プロセッサパイプライン内でハッシュアルゴリズムのＳＩＭＤ実行を可能にし得ることも理解されたい。つまり、ハッシュラウンドの単一の反復が３サイクル（例えば、１ラウンドにつき３サイクル）のパイプラインレイテンシを有し得る場合、結果がパイプライン経由で戻されることをバイパスすることによって、２回の反復が４サイクル（例えば、１ラウンドにつき２サイクル）のみのレイテンシを有してよく、４回の反復が６サイクル（例えば、１ラウンドにつき１．５サイクル）のみのレイテンシを有してよい。４または６サイクルのそのパイプラインレイテンシ中、他の有用な処理が、ハッシュラウンドスライスと並列にまたは同時に実行されてよい。故に、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数（例えば、１スライスごとに２、４または８回の反復）を有する、ＳＩＭＤセキュアハッシュアルゴリズムラウンドスライスのための命令を提供することによって、スーパースカラ実行パイプライン、および／またはアウトオブオーダプロセッサパイプライン内の他の命令の同時実行を許容し、それによって処理スループットを大きく改善し、汎用プロセッサに関連する製造処理改善のために周波数スケーリングを利用できるようになる。
【０１０３】
このような実施形態は、ＳＩＭＤ  ＳＭ３メッセージ拡張のための命令をデコードするためのデコーダを有するプロセッサを備え、命令は第１のソースデータオペランドセットおよび第２のソースデータオペランドセット並びに拡張範囲を指定する。プロセッサ実行ユニットは命令に応答して、第１のソースデータオペランドセットおよび第２のソースデータオペランドセットからＳＭ３メッセージ拡張の数を実行し、ＳＭ３メッセージ拡張の数は指定された拡張範囲によって判断され、その結果をＳＩＭＤデスティネーションレジスタに格納する。いくつかの実施形態はまた、中間ハッシュ値入力、ソースデータセット、およびラウンド定数セット（例えば、１または複数の予め回転された定数Ｔｊ＜＜＜ｊ）から、ハッシュアルゴリズムのＳＩＭＤ  ＳＭ３ハッシュラウンドスライス部分のための命令を実行する。プロセッサ実行ユニットは、複数のＳＭ３ハッシュラウンド反復から成るセットをソースデータセットに実行して、中間ハッシュ値入力およびラウンド定数セットを適用し、新しいハッシュ値結果をＳＩＭＤデスティネーションレジスタに格納する。
【０１０４】
ＳＭ３暗号化ハッシュ機能を提供するためのＳＩＭＤ命令および処理ロジックのいくつかの実施形態について、ＳＭ３メッセージ拡張およびＳＭ３暗号化ハッシュラウンドの両方は、現在のマイクロプロセッサの標準的な実行パイプラインの中で、複数の反復のスライスにおいて同時におよび／または並列に実行されてよい。ＳＭ３メッセージ拡張のスライスおよび／またはＳＭ３暗号化ハッシュラウンドのスライスの実行に関連するレイテンシによる他の同時インフライト命令に対し、十分なカバーを提供すべく、１スライスごとの反復数は好都合に選択されてよいことを理解されたい。故に、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数（例えば、１スライスごとに２、４または８回の反復）を有するＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムラウンドスライスのための命令の実行を提供することによって、スーパースカラ実行パイプラインおよび／またはアウトオブオーダプロセッサパイプライン内のこのような他の要求される命令（例えば、ＳＭ３メッセージ拡張命令）の同時実行を許容し、それによって多数のアプリケーションの処理スループットを大きく改善し、汎用プロセッサに関連する製造処理改善のために周波数スケーリングを利用できるようになることも理解されたい。
【０１０５】
図４Ａは、本発明の少なくとも一実施形態に従う、インオーダパイプラインおよびレジスタリネーミングステージ、アウトオブオーダ発行／実行パイプラインを示すブロック図である。図４Ｂは、本発明の少なくとも一実施形態による、インオーダアーキテクチャコアおよびレジスタリネーミングロジック、プロセッサ内に含まれるアウトオブオーダ発行／実行ロジックを示すブロック図である。図４Ａ中の実線ボックスはインオーダパイプラインを示す一方、破線ボックスはレジスタリネーミング、アウトオブオーダ発行／実行パイプラインを示す。同様に、図４Ｂ中の実線ボックスはインオーダアーキテクチャロジックを示す一方、破線ボックスはレジスタリネーミングロジックおよびアウトオブオーダ発行／実行ロジックを示す。
【０１０６】
図４Ａ中、プロセッサパイプライン４００はフェッチステージ４０２、長さデコードステージ４０４、デコードステージ４０６、割り当てステージ４０８、リネーミングステージ４１０、スケジューリング（ディスパッチまたは発行としても知られる）ステージ４１２、レジスタ読み取り／メモリ読み取りステージ４１４、実行ステージ４１６、ライトバック／メモリ書き込みステージ４１８、例外処理ステージ４２２、およびコミットステージ４２４を含む。
【０１０７】
図４Ｂ中、矢印は２または２より多いユニット間の連結を示し、矢印の方向はそれらのユニット間のデータフロー方向を示す。図４Ｂは、実行エンジンユニット４５０に連結されたフロントエンドユニット４３０を含むプロセッサコア４９０を示し、これら両方はメモリユニット４７０に連結される。
【０１０８】
コア４９０は縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッド若しくは代替的なコアタイプであってよい。さらなる別のオプションとして、コア４９０は、例えば、ネットワークコアまたは通信コア、圧縮エンジンコア、グラフィックコア等の特定用途のコアであってよい。
【０１０９】
フロントエンドユニット４３０は、命令キャッシュユニット４３４に連結された分岐予測ユニット４３２を含み、命令キャッシュユニット４３４は、命令変換ルックアサイドバッファ（ＴＬＢ）４３６に連結され、ＴＬＢ４３６は命令フェッチユニット４３８に連結され、命令フェッチユニット４３８はデコードユニット４４０に連結される。デコードユニットまたはデコーダは命令をデコードしてよく、１または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成してよく、これらは元の命令からデコードされ、あるいは元の命令を反映し、あるいは元の命令から導かれる。デコーダは、様々な異なるメカニズムを使用して実装されてよい。好適なメカニズムの例としては特に限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等が含まれる。命令キャッシュユニット４３４はさらにメモリユニット４７０内のレベル２（Ｌ２）キャッシュユニット４７６に連結される。デコードユニット４４０は、実行エンジンユニット４５０内のリネーム／アロケータユニット４５２に連結される。
【０１１０】
実行エンジンユニット４５０は、リタイアメントユニット４５４に連結されたリネーム／アロケータユニット４５２および１または複数のスケジューラユニット４５６のセットを含む。スケジューラユニット４５６は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表わす。スケジューラユニット４５６は物理レジスタファイルユニット４５８に連結される。複数の物理レジスタファイルユニット４５８の各々は１または複数の物理レジスタファイルを表わしており、それぞれ異なる物理レジスタファイルは、スカラ整数、スカラ浮動小数点、パックされた整数、パックされた浮動小数点、ベクトル整数、ベクトル浮動小数点等、ステータス（例えば、実行されるべき次の命令のアドレスである命令ポインタ）等の１または複数の異なるデータタイプを格納する。物理レジスタファイルユニット４５８にリタイアメントユニット４５４を重複させ、レジスタリネーミングおよびアウトオブオーダ実行を実装可能な様々な方法を示してよい（例えば、リオーダバッファおよびリタイアメントレジスタファイルを使用して、将来のファイル、履歴バッファおよびタイアメントレジスタファイルを使用して、レジスタマップおよびレジスタプールを使用して等）。概して、アーキテクチャレジスタは、プロセッサの外部から、またはプログラマの視点から可視である。レジスタは、任意の既知の特定のタイプの回路に限定されない。様々な異なるタイプのレジスタが、それらが本明細書に記載のデータを格納し、提供可能な限り、好適である。好適なレジスタの例としては特に限定されないが、専用物理レジスタ、レジスタリネーミングを使用して動的に割り当てられた物理レジスタ、専用物理レジスタおよび動的に割り当てられた物理レジスタの組み合わせ等が含まれる。リタイアメントユニット４５４および物理レジスタファイルユニット４５８は、実行クラスタ４６０に連結される。実行クラスタ４６０は、１または複数の実行ユニット４６２のセット、１または複数のメモリアクセスユニット４６４のセットを含む。実行ユニット４６２は、様々な演算（例えば、シフト、加算、減算、乗算）を様々なタイプのデータ（例えば、スカラ浮動小数点、パックされた整数、パックされた浮動小数点、ベクトル整数、ベクトル浮動小数点）に行ってよい。いくつかの実施形態は、特定の関数または関数セットに専用の複数の実行ユニットを含んでよい一方、他の実施形態は、１つのみの実行ユニットまたは、それらすべてが全関数を実行する複数の実行ユニットを含んでよい。スケジューラユニット４５６、物理レジスタファイルユニット４５８、および実行クラスタ４６０が可能性として複数形で図示されているのは、特定の実施形態は、特定タイプのデータ／演算のために別個のパイプライン（例えば、スカラ整数のパイプライン、スカラ浮動小数点／パックされた整数／パックされた浮動小数点／ベクトル整数／ベクトル浮動小数点のパイプラインおよび／またはメモリアクセスパイプライン。これらの各々は独自のスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを有する。別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット４６４を有する特定の実施形態が実装される）を形成するからである。別個のパイプラインが使用される場合、これらのパイプラインのうちの１または複数はアウトオブオーダ発行／実行であってよく、残りはインオーダであってよいことも理解されたい。
【０１１１】
メモリアクセスユニット４６４のセットがメモリユニット４７０に連結され、当該メモリユニット４７０はレベル２（Ｌ２）キャッシュユニット４７６に連結されたデータキャッシュユニット４７４に連結されたデータＴＬＢユニット４７２を含む。一例示的な実施形態において、メモリアクセスユニット４６４は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、これらの各々はメモリユニット４７０内のデータＴＬＢユニット４７２に連結される。Ｌ２キャッシュユニット４７６は、１または複数の他のレベルのキャッシュに連結され、最終的にメインメモリに連結される。
【０１１２】
例を挙げると、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン４００を以下のように実装してよい。すなわち、（１）命令フェッチ４３８がフェッチステージ４０２および長さデコードステージ４０４を実行する。（２）デコードユニット４４０がデコードステージ４０６を実行する。（３）リネーム／アロケータユニット４５２が割り当てステージ４０８およびリネーミングステージ４１０を実行する。（４）スケジューラユニット４５６がスケジュールステージ４１２を実行する。（５）物理レジスタファイルユニット４５８およびメモリユニット４７０がレジスタ読み取り／メモリ読み取りステージ４１４を実行する。実行クラスタ４６０が実行ステージ４１６を実行する。（６）メモリユニット４７０および物理レジスタファイルユニット４５８がライトバック／メモリ書き込みステージ４１８を実行する。（７）様々なユニットが例外処理ステージ４２２の実行に使用されてよい。（８）リタイアメントユニット４５４および物理レジスタファイルユニット４５８がコミットステージ４２４を実行する。
【０１１３】
コア４９０は、１または複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンに追加されたいくつかの拡張機能を持つ）、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セット（ＮＥＯＮ等のオプションの追加拡張機能を持つ）をサポートしてよい。
【０１１４】
コアは、マルチスレッディング（演算またはスレッドの２または２より多い並列セットの実行）をサポートし、様々な方法でマルチスレッディングを実行してよいことを理解されたい。そのようなものとしては、時分割マルチスレッディング、同時マルチスレッディング（この場合、単一の物理コアは、物理コアが同時にマルチスレッディングを行う複数のスレッドの各々に対する論理コアを提供する）、またはこれらの組み合わせ（例えば、時分割フェッチおよび時分割デコード並びにインテル（登録商標）ハイパースレッド技術等のそれら以降の同時マルチスレッディング）が含まれる。
【０１１５】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャにおいて使用されてよいことを理解されたい。プロセッサの示された実施形態は、別個の命令キャッシュユニット４３４／データキャッシュユニット４７４および共有Ｌ２キャッシュユニット４７６も含む一方、代替の実施形態は、例えば、レベル１（Ｌ１）内部キャッシュまたは複数のレベルの内部キャッシュ等、命令およびデータの両方のための単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュおよび外部キャッシュの組み合わせを含んでよく、外部キャッシュはコアおよび／またはプロセッサの外部に存在する。代替的に、すべてのキャッシュは、コアおよび／またはプロセッサの外部に存在してよい。
【０１１６】
図５は、本発明の実施形態による統合メモリコントローラおよびグラフィックを持つシングルコアプロセッサおよびマルチコアプロセッサ５００のブロック図である。図５の実線のボックスは、シングルコア５０２Ａ、システムエージェント５１０、１または複数のバスコントローラユニットのセット５１６を持つプロセッサ５００を示す一方で、オプションの追加である破線のボックスは複数のコア５０２Ａ〜Ｎ、システムエージェントユニット５１０内の１または複数の統合メモリコントローラユニットのセット５１４、および統合グラフィックロジック５０８を持つ代替のプロセッサ５００示す。
【０１１７】
メモリ階層は、複数のコア内の１または複数のレベルのキャッシュ、共有キャッシュユニットのセットまたは１または複数の共有キャッシュユニット５０６、および統合メモリコントローラユニット５１４のセットに連結された外部メモリ（不図示）を含む。共有キャッシュユニットのセット５０６はレベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）等の１または複数の中レベルのキャッシュ、または他のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、および／またはこれらの組み合わせを含んでよい。一実施形態では、リングベースの相互接続ユニット５１２が、統合グラフィックロジック５０８、共有キャッシュユニット５０６のセット、およびシステムエージェントユニット５１０を相互接続する一方で、代替的な実施形態は、このようなユニットを相互接続するための任意の数の周知技術を使用してよい。
【０１１８】
いくつかの実施形態において、コア５０２Ａ〜Ｎのうちの１または複数は、マルチスレッディングが可能である。システムエージェント５１０は、コア５０２Ａ〜Ｎを調整し、コア５０２Ａ〜Ｎを操作するためのそれらのコンポーネントを含む。システムエージェントユニット５１０は、例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含んでよい。ＰＣＵは、コア５０２Ａ〜Ｎの電力状態を調整するために必要なロジックおよびコンポーネント並びに統合グラフィックロジック５０８であってよく、または当該ロジックおよび当該コンポーネント並びに統合グラフィックロジック５０８を含んでよい。ディスプレイユニットは、１または複数の外部接続されたディスプレイを駆動するためのものである。
【０１１９】
コア５０２Ａ〜Ｎはアーキテクチャおよび／または命令セットの観点から、同種または異種であってよい。例えば、コア５０２Ａ〜Ｎのうちのいくつかは、インオーダであってよい一方、他のものはアウトオブオーダである。別の例として、コア５０２Ａ〜Ｎのうちの２または２より多いものは同一の命令セットを実行可能であってよい一方、他のものは、その命令セットのサブセットのみまたは異なる命令セットを実行可能であってよい。
【０１２０】
プロセッサは、カリフォルニア州サンタクララのインテルコーポレーションから入手可能なＣｏｒｅ（商標）ｉ３、ｉ５、ｉ７、２ＤｕｏおよびＱｕａｄ、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（商標）、ＸＳｃａｌｅ（商標）またはＳｔｒｏｎｇＡＲＭ（商標）プロセッサ等の汎用プロセッサであってよい。代替的に、プロセッサは、ＡＲＭ  Ｈｏｌｄｉｎｇｓ社、ＭＩＰＳ等の別の会社のものであってもよい。プロセッサは、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジンプロセッサ、グラフィックプロセッサ、コプロセッサ、埋め込みプロセッサ等の特定用途向けプロセッサであってよい。プロセッサは、１または複数のチップ上に実装されてよい。プロセッサ５００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳ等の多数のプロセス技術のうちの任意のものを使用する１または複数の基板の一部であってよく、および／または当該基板上に実装されてよい。
【０１２１】
図６〜８は、プロセッサ５００を含めるために好適な例示的なシステムである一方、図９はコア５０２のうちの１または複数を含んでよい例示的なシステムオンチップ（ＳｏＣ）である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための当該技術分野で既知の他のシステム設計および構成も好適である。一般的に、本明細書に開示のプロセッサおよび／または他の実行ロジックを組み込み可能な非常に多種多様なシステムまたは電子デバイスが概して好適である。
【０１２２】
ここで図６を参照すると、本発明の一実施形態によるシステム６００のブロック図が示されている。システム６００は、１または複数のプロセッサ６１０、６１５を含んでよく、当該１または複数のプロセッサ６１０、６１５は、グラフィックメモリコントローラハブ（ＧＭＣＨ）６２０に連結される。図６中、追加のプロセッサ６１５のオプションとしての性質は、破線で示されている。
【０１２３】
各プロセッサ６１０、６１５はプロセッサ５００の何らかのバージョンであってよい。しかしながら、統合グラフィックロジックおよび統合メモリ制御ユニットは、プロセッサ６１０、６１５内に存在しない可能性があることに留意されたい。図６は、ＧＭＣＨ６２０はメモリ６４０に連結されてよく、メモリ６４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）であってよいことを示す。少なくとも一実施形態で、ＤＲＡＭは不揮発性キャッシュに関連付けられてよい。
【０１２４】
ＧＭＣＨ６２０は、チップセットまたはチップセットの一部であってよい。ＧＭＣＨ６２０はプロセッサ６１０、６１５と通信し、プロセッサ６１０、６１５とメモリ６４０との間のやり取りを制御してよい。また、ＧＭＣＨ６２０は、プロセッサ６１０、６１５と、システム６００の他の要素との間の加速バスインタフェースとして動作してもよい。少なくとも一実施形態では、ＧＭＣＨ６２０は、プロセッサ６１０、６１５とフロントサイドバス（ＦＳＢ）６９５等のマルチドロップバスを介して通信する。
【０１２５】
さらに、ＧＭＣＨ６２０はディスプレイ６４５（フラットパネルディスプレイ等）に連結される。ＧＭＣＨ６２０は統合グラフィックアクセラレータを含んでよい。さらにＧＭＣＨ６２０は、入／出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）６５０に連結され、当該入／出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）６５０は、様々な周辺デバイスをシステム６００に連結するために使用されてよい。図６の実施形態の例のために、外部グラフィックデバイス６６０が示されており、当該外部グラフィックデバイス６６０は別の周辺デバイス６７０と共にＩＣＨ６５０に連結された別個のグラフィックデバイスであってよい。
【０１２６】
代替的に、追加のまたは異なるプロセッサがシステム６００内に存在してもよい。例えば、追加のプロセッサ６１５は、プロセッサ６１０と同一である追加のプロセッサ、プロセッサ６１０と異種または非対称である追加のプロセッサ、アクセラレータ（例えば、グラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット等）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサを含んでよい。物理リソース６１０と６１５の間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む利点の指標範囲から見て様々な差異があってよい。これらの差異は、プロセッサ６１０、６１５間の非対称性および異種性として差異自体が効果的に表われてよい。少なくとも一実施形態について、様々なプロセッサ６１０、６１５が同一のダイパッケージ内に存在してよい。
【０１２７】
ここで図７を参照すると、本発明の実施形態による第２のシステム７００のブロック図が示されている。図７に図示の通り、マルチプロセッサシステム７００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続７５０を介して連結された第１のプロセッサ７７０および第２のプロセッサ７８０を含む。プロセッサ７７０および７８０の各々は、プロセッサ６１０、６１５のうちの１または複数と同様、プロセッサ５００の何らかのバージョンであってよい。
【０１２８】
２つのプロセッサ７７０、７８０のみが図示されるものの、本発明の範囲はそのようには限定されないことを理解されたい。他の実施形態においては、１または複数の追加のプロセッサが特定のプロセッサ内に存在してよい。
【０１２９】
プロセッサ７７０および７８０は、統合メモリコントローラユニット７７２および７８２をそれぞれ含むものとして図示されている。プロセッサ７７０はまた、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース７７６および７７８を含み、同様に第２のプロセッサ７８０はＰ−Ｐインタフェース７８６および７８８を含む。プロセッサ７７０、７８０は、Ｐ−Ｐインタフェース回路７７８、７８８を使用してポイントツーポイント（Ｐ−Ｐ）インタフェース７５０を介して情報を交換してよい。図７に図示の通り、ＩＭＣ  ７７２および７８２は当該プロセッサをそれぞれのメモリ、すなわちメモリ７３２とメモリ７３４とに連結し、当該メモリは、それぞれのプロセッサに局所的に取り付けられたメインメモリの一部であってよい。
【０１３０】
プロセッサ７７０、７８０はそれぞれ、ポイントツーポイントインタフェース回路７７６、７９４、７８６、７９８を使用して、個々のＰ−Ｐインタフェース７５２、７５４を介してチップセット７９０と情報を交換してよい。チップセット７９０はまた、高性能グラフィックスインタフェース７３９を介して高性能グラフィックス回路７３８と情報を交換してもよい。
【０１３１】
共有キャッシュ（不図示）がいずれかのプロセッサの内部または両方のプロセッサの外部に含まれてよく、共有キャッシュはさらに当該プロセッサとＰ−Ｐ相互接続を介して接続されていてよく、その結果、プロセッサが低電力モードの場合、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るようになる。
【０１３２】
チップセット７９０はインタフェース７９６を介して第１のバス７１６に連結されてよい。一実施形態において、第１のバス７１６はペリフェラルコンポーネントインターコネクト（ＰＣＩ）バスであってよく、またはＰＣＩエクスプレスバス若しくは別の第３世代Ｉ／Ｏ相互接続バス等のバスであってよいが、本発明の範囲はそのようには限定されない。
【０１３３】
図７に図示の通り、様々なＩ／Ｏデバイス７１４が、バスブリッジ７１８と共に第１のバス７１６に連結されてよく、当該バスブリッジ７１８は第１のバス７１６を第２のバス７２０に連結する。一実施形態において、第２のバス７２０はローピンカウント（ＬＰＣ）バスであってよい。一実施形態において、様々なデバイスが第２のバス７２０に連結されてよく、これらとしては、例えば、キーボードおよび／またはマウス７２２、通信デバイス７２７、並びに命令／コードおよびデータ７３０を含み得るディスクドライブ若しくは他の大容量ストレージデバイス等のストレージユニット７２８が含まれる。さらに、オーディオＩ／Ｏ７２４が第２のバス７２０に連結されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図７のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のこのようなアーキテクチャを実装してよい。
【０１３４】
ここで図８を参照すると、本発明の一実施形態による第３のシステム８００のブロック図が示されている。図７および図８中で同様の要素は同様の参照符号が付されており、図８の他の態様を不明瞭にするのを回避すべく、図７の特定の態様は図８で省略されている。
【０１３５】
図８は、プロセッサ８７０、８８０が統合メモリおよびＩ／Ｏ制御ロジック（ＣＬ）８７２、８８２をそれぞれ含んでよいことを示す。少なくとも一実施形態について、ＣＬ  ８７２、８８２は、図５および図７に関し上記したもののような統合メモリコントローラユニットを含んでよい。また、ＣＬ８７２、８８２はＩ／Ｏ制御ロジックも含んでよい。図８は、メモリ８３２、８３４がＣＬ８７２、８８２に連結されるだけでなく、Ｉ／Ｏデバイス８１４が制御ロジック８７２、８８２に連結されることも示している。レガシＩ／Ｏデバイス８１５がチップセット８９０に連結される。
【０１３６】
ここで図９を参照すると、本発明の一実施形態によるＳｏＣ９００のブロック図が示されている。図５中と同様の要素は同様の参照番号が付されている。また、破線は、より高度なＳｏＣ上でのオプションの機能を表わす。図９中、相互接続ユニット９０２は、アプリケーションプロセッサ９１０、システムエージェントユニット５１０、バスコントローラユニット５１６、統合メモリコントローラユニット５１４、１または複数のメディアプロセッサ９２０のセット、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット９３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット９３２、および１または複数の外部ディスプレイに連結するためのディスプレイユニット９４０に連結される。ここで、当該アプリケーションプロセッサ９１０は１または複数のコア５０２Ａ〜Ｎのセットおよび共有キャッシュユニット５０６を含む。当該１または複数のメディアプロセッサ９２０のセットは統合グラフィックロジック５０８、静止および／またはビデオカメラ機能を提供するためのイメージプロセッサ９２４、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ９２６、およびビデオエンコード／デコードアクセラレーションを提供するためのビデオプロセッサ９２８を含んでよい。
【０１３７】
図１０は、中央処理装置（ＣＰＵ）およびグラフィック処理ユニット（ＧＰＵ）を含むプロセッサを示し、これらは一実施形態による少なくとも１つの命令を実行してよい。一実施形態において、少なくとも一実施形態による演算を実行するための命令は、ＣＰＵによって実行され得る。別の実施形態においては、命令はＧＰＵによって実行され得る。さらなる別の実施形態においては、命令はＧＰＵおよびＣＰＵによって実行される演算の組み合わせを通して実行されてよい。例えば、一実施形態においては、一実施形態による命令は、ＧＰＵでの実行のために受信およびデコードされてよい。しかしながら、デコードされた命令内の１または複数の演算はＣＰＵによって実行されてよく、命令の最終的なリタイアのために結果がＧＰＵに戻されてよい。逆に、いくつかの実施形態において、ＣＰＵがプライマリプロセッサとして、ＧＰＵがコプロセッサとして動作してよい。
【０１３８】
いくつかの実施形態において、高度に並列化されたスループットの高いプロセッサから利益享受する命令はＧＰＵによって実行されてよい一方で、深くパイプライン化されたアーキテクチャから利益享受するプロセッサの性能から利益享受する命令はＣＰＵによって実行されてよい。例えば、グラフィック、科学アプリケーション、財務アプリケーションおよび他の並列ワークロードは、ＧＰＵの性能から利益享受してよく、そのように実行可能であるのに対して、オペレーティングシステムのカーネルまたはアプリケーションコード等のよりシーケンシャルなアプリケーションは、ＣＰＵにより好適であってよい。
【０１３９】
図１０中、プロセッサ１０００は、ＣＰＵ１００５、ＧＰＵ１０１０、イメージプロセッサ１０１５、ビデオプロセッサ１０２０、ＵＳＢコントローラ１０２５、ＵＡＲＴコントローラ１０３０、ＳＰＩ／ＳＤＩＯコントローラ１０３５、ディスプレイデバイス１０４０、高解像度マルチメディアインタフェース（ＨＤＭＩ（登録商標））コントローラ１０４５、ＭＩＰＩコントローラ１０５０、フラッシュメモリコントローラ１０５５、デュアルデータレート（ＤＤＲ）コントローラ１０６０、セキュリティエンジン１０６５、およびＩ２Ｓ／Ｉ２Ｃ（Ｉｎｔｅｇｒａｔｅｄ  Ｉｎｔｅｒｃｈｉｐ  Ｓｏｕｎｄ／Ｉｎｔｅｒ−Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）インタフェース１０７０を含む。図１０中のプロセッサ内に、より多くのＣＰＵまたはＧＰＵおよび他の周辺インタフェースコントローラを含む、他のロジックおよび回路が含まれてもよい。
【０１４０】
少なくとも一実施形態に係る１または複数の態様は、機械可読媒体上に格納された、プロセッサ内の様々なロジックを表わす典型的データによって実装されてよく、当該データは機械による読み取り時に、機械に対し本明細書に記載の技術を実行するためのロジックを生成させる。このような「ＩＰコア」として知られる典型的なものが有形の機械可読媒体（「テープ」）上に格納され、様々な顧客または製造施設に供給され、実際にロジックまたはプロセッサを生産する製造機械にロードされてよい。例えば、ＡＲＭ  Ｈｏｌｄｉｎｇｓによって開発されたＣｏｒｔｅｘ（商標）プロセッサファミリおよび中国科学院のコンピューティング技術協会（ＩＣＴ）により開発された龍芯（Ｌｏｏｎｇｓｏｎ）ＩＰコア等のＩＰコアが、テキサスインスツルメンツ、クアルコム、アップルまたはサムスン等の様々な顧客またはライセンシにライセンスまたは販売されてよく、またこれらの顧客またはライセンシによって生産されるプロセッサに実装されてよい。
【０１４１】
図１１は、一実施形態によるＩＰコアの開発を示すブロック図を示す。ストレージ１１３０は、シミュレーションソフトウェア１１２０および／またはハードウェア若しくはソフトウェアモデル１１１０を含む。一実施形態において、ＩＰコア設計を表わすデータがメモリ１１４０（例えばハードディスク）、有線接続（例えばインターネット）１１５０または無線接続１１６０を介してストレージ１１３０に提供されてよい。次に、シミュレーションツールおよびモデルによって生成されるＩＰコア情報が製造施設に送信されてよく、製造施設において、少なくとも一実施形態による少なくとも１つの命令を実行するためのＩＰコア情報がサードパーティによって製造されてよい。
【０１４２】
いくつかの実施形態において、１または複数の命令は第１のタイプまたはアーキテクチャ（例えばｘ８６）に対応してよく、１または複数の命令は異なるタイプまたはアーキテクチャ（例えばＡＲＭ）のプロセッサで変換またはエミュレートされてよい。従って、一実施形態による命令は、ＡＲＭ、ｘ８６、ＭＩＰＳ、ＧＰＵを含む任意のプロセッサ若しくはプロセッサタイプまたは他のプロセッサタイプ若しくはアーキテクチャで実行されてよい。
【０１４３】
図１２は、一実施形態による第１のタイプの命令が異なるタイプのプロセッサによってエミュレートされる方法を示す。図１２中、プログラム１２０５は、一実施形態による命令と同一または実質的に同一の機能を実行してよいいくつかの命令を含む。しかしながら、プログラム１２０５の命令はプロセッサ１２１５と異なるまたはプロセッサ１２１５と互換性のないタイプおよび／またはフォーマットであってよく、つまりプログラム１２０５内の命令タイプはプロセッサ１２１５によってネイティブに実行可能でなくてよいことを意味する。しかしながら、エミュレーションロジック１２１０の補助を用いて、プログラム１２０５の命令は、プロセッサ１２１５によってネイティブに実行可能な命令に変換される。一実施形態において、エミュレーションロジックはハードウェアで具現化される。別の実施形態においては、エミュレーションロジックは、プログラム１２０５内の命令タイプを、プロセッサ１２１５でネイティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体で具現化される。他の実施形態においては、エミュレーションロジックは、固定機能のハードウェアまたはプログラム可能なハードウェアと、有形の機械可読媒体上に格納されたプログラムとの組み合わせである。一実施形態において、プロセッサはエミュレーションロジックを含む一方で、他の実施形態においては、エミュレーションロジックはプロセッサの外部に存在し、サードパーティによって供給される。一実施形態において、プロセッサは、プロセッサ内に含まれる、またはプロセッサに関連付けられたマイクロコードまたはファームウェアを実行することにより、ソフトウェアを有する有形の機械可読媒体に具現化されたエミュレーションロジックをロード可能である。
【０１４４】
図１３は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。図示された実施形態において、命令コンバータはソフトウェア命令コンバータであるものの、代替的に、命令コンバータはソフトウェア、ファームウェア、ハードウェアまたはこれらの様々な組み合わせで実装されてもよい。図１３は、高水準言語１３０２のプログラムが、ｘ８６バイナリコード１３０６を生成するｘ８６コンパイラ１３０４を使用してコンパイルされ得ることを示しており、当該ｘ８６バイナリコード１３０６は、少なくとも１つのｘ８６命令セットコア１３１６を持つプロセッサによってネイティブに実行されてよい。少なくとも１つのｘ８６命令セットコアを持つプロセッサ１３１６は、少なくとも１つのｘ８６命令セットコアを持つインテルのプロセッサと実質的に同一の諸機能を実行できる任意のプロセッサを表わしており、これは次のように行う。すなわち、少なくとも１つのｘ８６命令セットコアを持つインテルのプロセッサと実質的に同一の結果を得るべく、（１）インテルｘ８６命令セットコアの命令セットの大部分、または（２）少なくとも１つのｘ８６命令セットコアを持つインテルのプロセッサ上での実行を目的とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョン、を互換性のある状態で実行またはそれ以外の方法で処理することによってである。ｘ８６コンパイラ１３０４は、ｘ８６バイナリコード１３０６（例えばオブジェクトコード）を生成するよう動作可能なコンパイラを表わし、当該ｘ８６バイナリコード１３０６は、追加のリンク処理と共に、または追加のリンク処理なく、少なくとも１つのｘ８６命令セットコアを持つプロセッサ１３１６上で実行可能である。同様に、図１３は、高水準言語１３０２のプログラムが、代替の命令セットバイナリコード１３１０を生成する代替の命令セットコンパイラ１３０８を使用してコンパイルされ得ることを示しており、当該代替の命令セットバイナリコード１３１０は、少なくとも１つのｘ８６命令セットコアを持たないプロセッサ１３１４（例えば、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行する、および／または、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するコアを持つプロセッサ）によってネイティブに実行されてよい。命令コンバータ１３１２は、ｘ８６バイナリコード１３０６を、ｘ８６命令セットコアを持たないプロセッサ１３１４によってネイティブに実行可能なコードに変換されるのに使用される。この変換されたコードは、これが可能な命令コンバータの作成は難しいため、代替の命令セットバイナリコード１３１０と同じである可能性は低いが、しかしながら、変換されたコードは、一般的な演算を達成し、代替的な命令セットに属する複数の命令で構成されるであろう。故に、命令コンバータ１３１２はエミュレーション、シミュレーションまたは任意の他の処理を介して、ｘ８６命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがｘ８６バ��ナリコード１３０６を実行できるようにするソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表わす。
【０１４５】
図１４Ａは、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令の実行のための装置１４０１の一実施形態の図を示す。装置１４０１の実施形態は、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令の実行のためのパイプライン４００（例えば、実行ステージ４１６）の一部またはコア４９０（例えば、実行ユニット４６２）の一部であってよい。装置１４０１の実施形態は、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数（例えば、２または４回の反復、これによってスーパースカラ実行パイプライン内の他の命令の同時実行を許容できる）を有するＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムラウンドスライスのための命令をデコードする、デコードステージ（例えば、デコード４０６）またはデコーダ（例えば、デコードユニット４４０）に連結されてよく、当該命令は中間ハッシュ値入力オペランド１４１０、ソースデータオペランド１４１５セット、およびハッシュアルゴリズムのラウンドスライス部分（例えば、オプションの即値オペランド１４１８内または命令ニーモニックおよび／または演算コード内で、初期ラウンドとしてｊ、および／または反復数としてｉ）を指定する。命令の実施形態はまた、ラウンド定数オペランドセット（例えば、オプションの即値オペランド１４１８内でＴｊ...Ｔｊ＋ｉ−１、ここで初期ラウンドｊおよび反復数ｉ）を指定してもよい。１または複数の実行ユニット（例えば、実行装置１４０５）はデコードされた命令に応答して、複数のラウンド反復から成るＳＭ３ハッシュラウンドスライスセットをソースデータオペランドセット１４１５に実行して、中間ハッシュ値入力オペランド１４１０およびラウンド定数オペランドセットを適用し、第１の命令の結果１４８０をＳＩＭＤデスティネーションレジスタに格納する。
【０１４６】
ハッシュラウンドの予め指定された数の反復を行うＳＩＭＤ  ＳＭ３暗号化ハッシュ命令を提供することによって、特定のハッシュアルゴリズム実装によるメッセージ「チャンク」の前処理および予め回転されたラウンド定数（例えば、Ｔｊ＜＜＜ｊ）の準備等の他のＳＩＭＤ処理およびスカラ処理と同時に、プロセッサパイプライン内でハッシュアルゴリズムのＳＩＭＤ実行を可能にし得ることを理解されたい。つまり、ハッシュラウンドの単一の反復が３サイクル（例えば、１ラウンドにつき３サイクル）のパイプラインレイテンシを有し得る場合、指定数の反復を行い、および／または結果がパイプライン経由で戻されることをバイパスすることによって、２回の反復が４サイクル（例えば、１ラウンドにつき２サイクル）のみのレイテンシを有してよく、４回の反復が６サイクル（例えば、１ラウンドにつき１．５サイクル）のみのレイテンシを有してよい。４または６サイクルのそのパイプラインレイテンシ中、他の有用な処理が、ハッシュラウンドスライスと並列にまたは同時に実行されてよい。故に、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数（例えば、１スライスにつき２、４または８回等の反復）を有する、ＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムラウンドスライスのための命令を提供することによって、スーパースカラ実行パイプライン、および／またはアウトオブオーダプロセッサパイプライン内の他の命令の同時実行を許容し、それによって処理スループットを大きく改善し、ベクトルレジスタを持つ汎用プロセッサに関連する製造処理改善のために周波数スケーリングを利用できるようになる。
【０１４７】
例えば、装置１４０１の実施形態は、変動可能な複数のｍ個の可変サイズのデータ要素の値を格納するための変動可能な複数のｍ個の可変サイズのデータフィールドを含むベクトルレジスタ（例えば、物理レジスタファイルユニット４５８）に連結されてよい。ＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムラウンドスライスを提供するための命令の実施形態は、中間ハッシュ値入力状態オペランド１４１０を指定し、複数のベクトルレジスタのうちの１つ、即値オペランド１４１８およびソースデータオペランド１４１５セットを指定する。装置の実施形態１４０１は、レジスタファイル（例えば、物理レジスタファイルユニット４５８）に連結された実行ユニット１４０５を含んでよく、実行ユニット１４０５はデコードされた命令に応答して、ＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムラウンドスライス機能を提供し、中間ハッシュ値入力状態オペランド１４１０およびメッセージソースデータオペランド１４１５セットを受信し、複数の反復のうちの各反復に対する出力状態１４８０を生成する。次に、デコードされた命令の結果１４８０はＳＩＭＤデスティネーションレジスタ（例えば物理レジスタファイルユニット４５８内）に格納されてよい。
【０１４８】
図１４Ｂは、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令の実行のための装置１４０２の代替的な実施形態の図を示す。装置１４０２の実施形態は、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための命令の実行のためのパイプライン４００（例えば実行ステージ４１６）の一部またはコア４９０（例えば実行ユニット４６２）の一部であってよい。装置１４０２の実施形態は、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数（例えば、２または４回の反復、これによってスーパースカラ実行パイプライン内の他の命令の同時実行を許容できる）を有するＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムラウンドスライスのための命令をデコードするためのデコードステージ（例えばデコード４０６）またはデコーダ（例えばデコードユニット４４０）に連結されてよく、当該命令は中間ハッシュ値入力オペランド１４１０、ソースデータオペランド１４１５セット、ラウンド定数オペランド１４１２セット（例えば、初期ラウンドのための単一の予め回転されたＴｊ、または随意で４つの予め回転されたセットＴｊ...Ｔｊ+３）およびハッシュアルゴリズムのラウンドスライス部分（例えば、即値オペランド１４１８内の初期ラウンドｊおよび／または反復数ｉとして）を指定する。１または複数の実行ユニット（例えば、実行装置１４０５）はデコードされた命令に応答して、複数のラウンド反復から成るＳＭ３ハッシュラウンドスライスセットをソースデータオペランド１４１５セットに実行して、中間ハッシュ値入力オペランド１４１０およびラウンド定数オペランド１４１２セットを適用し、第１の命令の結果１４８０をＳＩＭＤデスティネーションレジスタ（例えば、いくつかの実施形態において、中間ハッシュ値入力オペランド１４１０に使用されるのと同一のＳＩＭＤレジスタ）に格納する。
【０１４９】
図１５は、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令の実行のための装置１５０１の別の代替の実施形態の図を示す。装置１５０１の実施形態は、複数の反復（例えば、図面には１回のみの反復が示されるものの、２または４回の反復、）を有するＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムラウンドスライスのための命令をデコードするためのデコードステージ（例えばデコード４０６）またはデコーダ（例えばデコードユニット４４０）に連結されてよく、これにより、スーパースカラ実行パイプライン内での他の命令の同時実行を許容してよく、当該命令は中間ハッシュ値入力オペランド１５１０、ソースデータオペランドセット（例えば、メッセージワードＷｊおよびＷｊ＋４を含む）、ラウンド定数オペランドセット（例えば、予め回転されたＴｊを含む）、およびハッシュアルゴリズムのラウンドスライス部分（例えば、随意に即値オペランド内に初期ラウンドｊおよび／または反復数ｉのインジケータを含める）を指定する。１または複数の実行ユニット（例えば、実行装置１５０１を含む）はデコードされた命令に応答して、複数のラウンド反復から成るＳＭ３ハッシュラウンドスライスセットをソースデータオペランドセット（例えば、１５１４および１５１６を含む）に実行して、中間ハッシュ値入力オペランド１５１０およびラウンド定数１５１２オペランドセットのうちの１または複数を適用し、デコードされた命令の結果１５８０をＳＩＭＤデスティネーションレジスタ（例えば、いくつかの実施形態において、中間ハッシュ値入力オペランド１５１０に使用されるのと同一のＳＩＭＤレジスタ）に格納する。
【０１５０】
実行装置１５０１に図示の通り、ブール関数ＦＦｊ１５２２およびＧＧｊ１５２４が、中間ハッシュ値３２ビットデータフィールド入力、Ａ、Ｂ、ＣおよびＥ、Ｆ、Ｇをそれぞれ処理するためにハッシュアルゴリズムの指定されたラウンドスライス部分（例えば、初期ラウンドｊのインジケータを含める）により選択されてよい。一実施形態により、ブール関数ＦＦｊおよびＧＧｊは、ｊが１６未満の場合、それぞれ
【数２】
0006535972.tif 000004
として、ｊが１５を超える場合、それぞれ
【数３】
0006535972.tif 000005
として、選択されてよい。ＳＭ３ハッシュラウンドスライスの各反復において、ラウンド定数オペランドセットの各ラウンド定数１５１２  Ｔｊは、中間ハッシュ値ベクトル１５２０の左回転された各データフィールドＡ（例えば、回転器１５２６を介して回転量１５２５分）および中間ハッシュ値ベクトル１５２０の第２の回転されていないデータフィールドＥを用いて加算（例えば加算器１５３０を介して）される。ＳＭ３ハッシュラウンドスライスの各反復において、ソースデータオペランドセットの各データフィールド１５１４Ｗｊは、ブール関数ＧＧｊ１５２４の出力、中間ハッシュ値ベクトル１５２０の各データフィールドＨ、および加算器１５３０の左回転された出力ＳＳ１（例えば、回転器１５３２を介して回転量１５３１分）を用いて加算（例えば、加算器１５４０を介して）される。ＳＭ３ハッシュラウンドスライスの各反復において、ソースデータオペランドセットの各データフィールド１５１４  Ｗｊおよび１５１６  Ｗｊ＋４がＸＯＲされ、各データフィールド１５３４  Ｗ'ｊを生成し、左回転された各データフィールドＡが加算器１５３０の左回転された出力ＳＳ１を用いてＸＯＲされ、各データフィールドＳＳ２を出力する。各データフィールド１５３４  Ｗ'ｊおよびＳＳ２の両方は、ブール関数ＦＦｊ  １５２２の出力および中間ハッシュ値ベクトル１５２０の各データフィールドＤを用いて加算（例えば、加算器１５５０を介して）され、予備出力状態１５７０の新しい各データフィールドＡを生成する。中間ハッシュ値ベクトル１５２０の回転されていない各データフィールドＡは、予備出力状態１５７０の新しい各データフィールドＢになる。中間ハッシュ値ベクトル１５２０の左回転された各データフィールドＢ（例えば、回転器１５６２を介して回転量１５６１分）は、予備出力状態１５７０の新しい各データフィールドＣになる。中間ハッシュ値ベクトル１５２０の回転されていない各データフィールドＣは、予備出力状態１５７０の新しい各データフィールドＤになる。加算器１５４０の出力は転置器１５４２  Ｐ０を介して転置され、予備出力状態１５７０の新しい各データフィールドＥを生成する。中間ハッシュ値ベクトル１５２０の回転されていない各データフィールドＥは、予備出力状態１５７０の新しい各データフィールドＦになる。中間ハッシュ値ベクトル１５２０の左回転された各データフィールドＦ（例えば、回転器１５６６を介して回転量１５６５分）は、予備出力状態１５７０の新しい各データフィールドＧになる。中間ハッシュ値ベクトル１５２０の回転されていない各データフィールドＧは、予備出力状態１５７０の新しい各データフィールドＨになる。
【０１５１】
最終的に、ＳＭ３ハッシュラウンドスライスの各反復において、予備出力状態１５７０が新しい出力状態１５８０  Ｖｊ＋１として格納される。いくつかの実施形態において、出力状態ラッチが、反復の結果として生成された出力状態１５８０（例えば、新規Ｖｊ＋１値）を格納する。いくつかの実施形態において、ハッシュ値出力状態１５８０を中間ハッシュ値入力状態にバイパスすることは、ＳＭ３ハッシュラウンドスライスの複数の反復のうちの次の各反復のために、出力状態１５８０をバイパスする出力状態１５８０ラッチから入力状態１５２０へのバイパス（例えば、バイパスネットワーク２０８または２１０）によって行われてよい。ブール関数、転置、ラウンド定数パラメータおよびメッセージ拡張等のさらなる詳細は、ｗｏｒｌｄ  ｗｉｄｅ  ｗｅｂのtools.ietf.org/pdf/draft-shen- sm3 -hash-01.pdfから入手可能な２０１４年２月１４日のバージョン０１の中国科学院によるＩＥＴＦインターネットドラフトである「ＳＭ３ハッシュ関数」にて確認できるであろう。
【０１５２】
図１６は、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための命令の実行のための装置１６０１の別の代替の実施形態の図を示す。装置１６０１の実施形態は、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令の実行のためのパイプライン４００（例えば、実行ステージ４１６）の一部またはコア４９０（例えば、実行ユニット４６２）の一部であってよい。装置１６０１の実施形態は、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数（例えば、４回の反復、これによってスーパースカラ実行パイプライン内の他の命令の同時実行を許容できる）を有するＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムラウンドスライスのための命令をデコードするためのデコードステージ（例えばデコード４０６）またはデコーダ（例えばデコードユニット４４０）に連結されてよく、当該命令は中間ハッシュ値入力オペランド１６１０、ソースデータオペランド１６１５セット、オプションのラウンド定数オペランド１６１２セット（例えば、単一の予め回転された初期Ｔｊ、または随意で４つの予め回転されたセットＴｊ...Ｔｊ+３のセットを含む）およびハッシュアルゴリズムのラウンドスライス部分（例えば、随意で即値オペランド１４１８内の初期ラウンドｊおよび／または反復数ｉとして）を指定する。ＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムラウンドスライスのための命令に係るいくつかの実施形態は、単一の予め回転された初期定数Ｔｊを指定し、スライスの各ラウンドにおいて、その単一の初期定数の１ビットを内部で回転してよい。ＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムラウンドスライスのための命令に係る他の代替的な実施形態は、ｊの値のみを指定（例えば、即値オペランド１６１８内で）し、各回転された定数Ｔｊ＜＜＜ｊを内部で検索または生成してよい。ＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムラウンドスライスのための命令に係るさらなる他の代替的な実施形態は、複数の予め回転された定数をセット（例えば、４つの予め回転されたＴｊ...Ｔｊ＋３）として指定してよい。１または複数の実行ユニット（例えば、実行装置１６０１）はデコードされた命令に応答して、複数のラウンド反復から成るＳＭ３ハッシュラウンドスライスセットをソースデータオペランド１６１５セット（例えば、ＷｊおよびＷｊ＋４の各データフィールド）に実行して、ＳＭ３ラウンドｊ  １６０５において中間ハッシュ値入力オペランド１６１０およびラウンド定数オペランド１６１２セット（例えばＴｊ）のうちの１または複数を適用し、予備出力状態１６８１  Ｖｊ＋１を生成する。さらに、デコードされた命令に応答して、第２のＳＭ３ハッシュラウンド反復がソースデータオペランド１６１５セット（例えば、Ｗｊ＋１およびＷｊ＋５の各データフィールド）に実行され、ＳＭ３ラウンドｊ＋１  １６０６において、第２の中間ハッシュ値入力１６８１  Ｖｊ＋１およびラウンド定数オペランド１６１２セット（例えば、Ｔｊ＋１）のうちの１または複数を適用し、予備出力状態１６８２  Ｖｊ＋２を生成し、...第４のＳＭ３ハッシュラウンド反復がソースデータオペランド１６１５セット（例えば、Ｗｊ＋３およびＷｊ＋７の各データフィールド）に実行され、ＳＭ３ラウンドｊ���３  １６０８において、第４の中間ハッシュ値入力Ｖｊ＋３（不図示）およびラウンド定数オペランド１６１２セット（例えば、Ｔｊ＋３）のうちの１または複数を適用し、命令の結果として新しい出力状態１６８４  Ｖｊ＋４を生成し、命令の結果１６８４をＳＩＭＤデスティネーションレジスタ（例えば、いくつかの実施形態において、中間ハッシュ値入力オペランド１６１０に使用されるのと同一のＳＩＭＤレジスタ）に格納する。
【０１５３】
また、いくつかの実施形態は、ＳＩＭＤ  ＳＭ３メッセージ拡張のための命令をデコードするためのデコーダを備えるプロセッサを含んでもよく、命令は第１のソースデータオペランドセットおよび第２のソースデータオペランドセット並びに拡張範囲を指定する。プロセッサ実行ユニットは命令に応答して、第１のソースデータオペランドセットおよび第２のソースデータオペランドセットから、ＳＭ３メッセージ拡張の数を実行し、ＳＭ３メッセージ拡張の数は指定された拡張範囲によって判断され、その結果をＳＩＭＤデスティネーションレジスタに格納する。ＳＭ３暗号化ハッシュ機能を提供するためのＳＩＭＤ命令および処理ロジックのいくつかの実施形態について、ＳＭ３メッセージ拡張およびＳＭ３暗号化ハッシュラウンドの両方は、現在のマイクロプロセッサの標準的な実行パイプラインの中で、複数の反復のスライスにおいて同時におよび／または並列に実行されてよい。ＳＭ３メッセージ拡張のスライスおよび／またはＳＭ３暗号化ハッシュラウンドのスライスの実行に関連するレイテンシによる他の同時インフライト命令に対し、十分なカバーを提供すべく、１スライスごとの反復数は好都合に選択されてよいことを理解されたい。
【０１５４】
図１７Ａは、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する別の命令の実行のための装置１７０１の一実施形態の図を示す。装置１７０１の実施形態は、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令の実行のためのパイプライン４００（例えば、実行ステージ４１６）の一部またはコア４９０（例えば、実行ユニット４６２）の一部であってよい。装置１７０１の実施形態は、ハッシュアルゴリズムのメッセージ拡張の反復合計数（例えば、５２回のメッセージ拡張反復未満）より少ない反復数（例えば、２または４回の反復、これによりスーパースカラ実行パイプライン内の他の命令の同時実行を許容する）を有するＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムメッセージ拡張のための命令をデコードするためのデコードステージ（例えば、デコード４０６）またはデコーダ（例えば、デコードユニット４４０）に連結されてよく、当該命令は第１のソースデータオペランド１７１９セット（例えば、Ｗｊ−１６，Ｗｊ−１５，...Ｗｊ−９）および第２のソースデータオペランド１７１１セット（例えば、Ｗｊ−８，Ｗｊ−７，...Ｗｊ−１）並びに拡張範囲（例えば、随意で、即値オペランド１７１８内または命令ニーモニックおよび／または演算コード内で反復の拡張範囲数ｅとして）を指定する。１または複数の実行ユニット（例えば、実行装置１７０４）はデコードされた命令に応答して、複数のメッセージ拡張反復から成るＳＭ３ハッシュアルゴリズムスライスセットを第１のソースデータオペランド１７１９セットおよび第２のソースデータオペランド１７１１セットに実行し、ＳＭ３メッセージ拡張の数は指定された拡張範囲によって判断され、命令の結果１７９０（例えば、Ｗｊ−４...Ｗｊ−１、Ｗｊ...Ｗｊ＋３）をＳＩＭＤデスティネーションレジスタに格納する。
【０１５５】
図１７Ｂは、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する別の命令の実行のための装置１７０２の代替的な実施形態の図を示す。装置１７０２の実施形態は、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令の実行のためのパイプライン４００（例えば、実行ステージ４１６）の一部またはコア４９０（例えば、実行ユニット４６２）の一部であってよい。装置１７０２の実施形態は、ハッシュアルゴリズムのメッセージ拡張の反復合計数（例えば、５２回のメッセージ拡張反復より少ない）より少ない反復数（例えば、２または４回の反復、これによりスーパースカラ実行パイプライン内の他の命令の同時実行を許容する）を有するＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムメッセージ拡張のための命令をデコードするためのデコードステージ（例えば、デコード４０６）またはデコーダ（例えば、デコードユニット４４０）に連結されてよく、当該命令は第１のソースデータオペランド１７１９セット（例えば、Ｗｊ−１６，Ｗｊ−１５，...Ｗｊ−９）および第２のソースデータオペランド１７１１セット（例えば、Ｗｊ−８，Ｗｊ−７，...Ｗｊ−１）並びに拡張範囲（例えば、随意で、即値オペランド１７１８内または命令ニーモニックおよび／または演算コード内で反復の拡張範囲数ｅ＋１として）を指定する。１または複数の実行ユニット（例えば、実行装置１７０３）はデコードされた命令に応答して、複数のメッセージ拡張反復から成るＳＭ３ハッシュアルゴリズムスライスセットを第１のソースデータオペランド１７１９セットおよび第２のソースデータオペランド１７１１セットに実行し、ＳＭ３メッセージ拡張の数は指定された拡張範囲によって判断され、命令の結果１７９２（例えば、Ｗｊ＋ｅ−７...Ｗｊ−１、Ｗｊ...Ｗｊ＋ｅ）をＳＩＭＤデスティネーションレジスタ（例えば、いくつかの実施形態において、第１のソースデータオペランド１７１９または第２のソースデータオペランド１７１１に使用されるのと同一のＳＩＭＤレジスタ）に格納する。
【０１５６】
図１８Ａは、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する別の命令の実行のための装置１８０１の別の代替の実施形態の図を示す。装置１８０１の実施形態は、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令の実行のためのパイプライン４００（例えば、実行ステージ４１６）の一部またはコア４９０（例えば、実行ユニット４６２）の一部であってよい。装置１８０１の実施形態は、ハッシュアルゴリズムのメッセージ拡張の反復合計数（例えば、５２回のメッセージ拡張反復より少ない）より少ない反復数（例えば、２または４回の反復、これによりスーパースカラ実行パイプライン内の他の命令の同時実行を許容してよい）を有するＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムメッセージ拡張のための命令をデコードするためのデコードステージ（例えば、デコード４０６）またはデコーダ（例えば、デコードユニット４４０）に連結されてよく、当該命令は第１のソースデータオペランド１８１９セット（例えば、Ｗ０，Ｗ１，...Ｗ７）および第２のソースデータオペランド１８１１セット（例えば、Ｗ８，Ｗ９，...Ｗ１５）並びに拡張範囲（例えば、随意で、即値オペランド（不図示）内または命令ニーモニックおよび／または演算コード内で反復の拡張範囲数または反復−１のｅとして）を指定する。１または複数の実行ユニット（例えば、実行装置１８０８）はデコードされた命令に応答して、複数のメッセージ拡張反復から成るＳＭ３ハッシュアルゴリズムスライスセットを第１のソースデータオペランド１８１９セットおよび第２のソースデータオペランド１８１１セットに実行し、ＳＭ３メッセージ拡張の数は指定された拡張範囲によって判断される。例えば、一実施形態において、新規拡張（または拡大）メッセージワードＷ１６は、１８０４において命令の結果１８９０の要素として次のように生成される。
【数４】
0006535972.tif 000006
ここで、転置１８０３  Ｐ１は次のように定義される。
【数５】
0006535972.tif 000007
新規拡張（または拡大）メッセージワードＷ１７は、１８０５において、命令の結果１８９０の要素として次のように生成される。
【数６】
0006535972.tif 000008
新規拡張（または拡大）メッセージワードＷ１８は、１８０６において、命令の結果１８９０の要素として次のように生成される。
【数７】
0006535972.tif 000009
４個の新規３２ビットワードＷ１９のうちの１つに対するメッセージ拡張は、第１（例えば１８１９）のソースデータオペランドセットおよび第２（例えば１８１１）のソースデータオペランドセットの３２ビットワードデータ要素に加え、当該４個の新規３２ビットワードのうちのもう１つ（すなわちＷ１６）を必要とする。従って、一実施形態において、転置
【数８】
0006535972.tif 000010
は、処理ブロック１８０２内で
【数９】
0006535972.tif 000011
として図示される通り生成され、１８０７において（Ｗ６＜＜＜７）およびＷ１３を用いてＸＯＲされ、新規拡張（拡大）メッセージワードＷ１９を命令の結果１８９０の要素として生成してよい。次に、命令の結果１８９０（例えば、Ｗ１２，...Ｗ１５，Ｗ１６，...Ｗ１９）はＳＩＭＤデスティネーションレジスタ内に格納されてよい。いくつかの実施形態においては、出力ラッチが反復の中間結果として生成された結果１８９０を格納する。いくつかの実施形態においては、中間結果１８９０を別のマイクロ命令（またはマイクロオペレーションまたはμｏｐ）の１または複数の入力ソースデータオペランドにバイパスすることはバイパス（例えば、バイパスネットワーク２０８または２１０）によって実行されてよい。
【０１５７】
図１８Ｂは、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する別の命令の実行のための装置１８１０のさらなる別の代替的な実施形態の図を示す。装置１８１０の実施形態は、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供する命令の実行のためのパイプライン４００（例えば、実行ステージ４１６）の一部またはコア４９０（例えば、実行ユニット４６２）の一部であってよい。装置１８１０の実施形態は、ハッシュアルゴリズムのメッセージ拡張の反復合計数（例えば、５２回のメッセージ拡張反復より少ない）より少ない反復数（例えば、８回の反復、これによりスーパースカラ実行パイプライン内の他の命令の同時実行を許容してよい）を有するＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムメッセージ拡張のための命令をデコードするためのデコードステージ（例えば、デコード４０６）またはデコーダ（例えば、デコードユニット４４０）に連結されてよく、当該命令は第１のソースデータオペランド１８１９セット（例えば、Ｗ０，Ｗ１，...Ｗ７）および第２のソースデータオペランド１８１１セット（例えば、Ｗ８，Ｗ９，...Ｗ１５）並びに拡張範囲（例えば、随意で、即値オペランド１８１８内または命令ニーモニックおよび／または演算コード内で反復の拡張範囲数または反復マイナス１のｅとして）を指定する。１または複数の実行ユニット（例えば、実行装置１８０９）はデコードされた命令に応答して、複数のメッセージ拡張反復から成るＳＭ３ハッシュアルゴリズムスライスセットを第１のソースデータオペランド１８１９セットおよび第２のソースデータオペランド１８１１セットに実行し、ＳＭ３メッセージ拡張の数は指定された拡張範囲によって判断される。一実施形態において、中間結果１８２１（例えば、Ｗ１２，...Ｗ１５，Ｗ１６，...Ｗ１９）が、デコードされた命令（例えば、マイクロ命令、マイクロオペレーションまたはμｏｐの結果として）に応答する１または複数の実行ユニット（例えば、実行装置１８０８）によって生成されてよい。次に、デコードされた命令（例えば、第２のマイクロ命令、マイクロオペレーションまたはμｏｐの結果として）に応答して、中間結果１８２１は、後のロジックレイヤ（例えば、実行装置１８０８）に第１のソースデータオペランド１８１９セット（例えばＷ４，Ｗ５，...Ｗ７）および第２のソースデータオペランド１８１１セット（例えばＷ８，Ｗ９，...Ｗ１１）の要素と共に提供され、拡張（または拡大）されたメッセージ結果１８９０（例えば、Ｗ１６，...Ｗ１９，Ｗ２０，...Ｗ２３）を生成してよい。次に、命令の結果１８９０（例えば、Ｗ１６，...Ｗ１９，Ｗ２０，...Ｗ２３）はＳＩＭＤデスティネーションレジスタ（例えば、いくつかの実施形態において、第１のソースデータオペランド１７１９に使用されるのと同一のＳＩＭＤレジスタ）に格納されてよい。
【０１５８】
図１９は、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための命令の実行のためのプロセス１９０１の一実施形態のためのフロー図を示す。処理１９０１および本明細書に開示された他の処理は、汎用機械または特定用途機械またはそれら両方の組み合わせによって実行可能な、専用ハードウェア若しくはソフトウェア若しくはファームウェアの演算コードを備えてよい処理ブロックによって実行される。
【０１５９】
処理１９０１の処理ブロック１９１０において、ＳＭ３ハッシュアルゴリズムの中間ハッシュ値入力状態ソースオペランドが第１のＳＩＭＤベクトルレジスタ内に格納（例えば、複数のｍ個のデータフィールドの第１の部分内）される。処理ブロック１９２０において、ソースデータオペランドセットが第２のＳＩＭＤベクトルレジスタに格納（例えば、複数のｍ個のデータフィールドの第２の部分内）される。処理ブロック１９２５において、ＳＭ３ハッシュアルゴリズムのＳＩＭＤ  ＳＭ３ハッシュラウンドスライス部分のための命令が受信される。処理ブロック１９５０において、ハッシュ値出力状態がＳＩＭＤ  ＳＭ３ハッシュラウンドスライスの反復の結果として生成される。処理ブロック１９６０において、ハッシュラウンドスライスのすべての反復が終了したか否かに関する判断がなされる。終了していない場合、随意で処理ブロック１９７０において、ハッシュラウンドスライスの次の反復のために、出力状態結果は入力状態にバイパスされ、処理は処理ブロック１９５０における開始を反復する。そうでなければ、処理は処理ブロック１９８０に進み、処理ブロック１９８０では、ハッシュ値出力状態結果が第１のＳＩＭＤレジスタ内のデスティネーションオペランドに格納される。
【０１６０】
処理１９０１の処理ブロックおよび本明細書に開示の他の処理は、反復方法で実行されるものとして示されているものの、可能な場合はいつでも代替の順序、または同時若しくは並列での実行が好ましく行われてよいことを理解されたい。
【０１６１】
図２０は、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための命令の実行のためのプロセス２００１の別の実施形態のフロー図を示す。処理２００１の処理ブロック２０１０において、ＳＭ３ハッシュアルゴリズムの中間ハッシュ値入力状態ソースオペランドが第１のＳＩＭＤベクトルレジスタ内に格納（例えば、複数のｍ個のデータフィールドの第１の部分内）される。処理ブロック２０１５において、メッセージブロックがラウンドスライスソースデータオペランドセットのために拡張される。処理ブロック２０２０において、ソースデータオペランドセットが第２のＳＩＭＤベクトルレジスタ内またはメモリ内に格納（例えば、複数のｍ個のデータフィールドの第２の部分内）される。処理ブロック２０２５において、ＳＭ３ハッシュアルゴリズムのＳＩＭＤ  ＳＭ３ハッシュラウンドスライス部分のための命令がデコードされ、当該命令は即値オペランド内で上記ラウンドスライス部分を指定する。処理ブロック２０３０において、第２のＳＩＭＤレジスタから、またはメモリから、現在の反復のための１組のラウンドスライスソースデータ（例えば、ＷｊおよびＷｊ＋４）が選択される。処理ブロック２０３５において、現在のラウンドスライス部分の反復のためのラウンド定数（例えばＴｊ）が選択される。処理ブロック２０４０において、現在の反復のための１組のブール関数（例えばＦＦｊおよびＧＧｊ）が選択される。処理ブロック２０４５において、ＳＭ３ハッシュラウンドが選択されたソースデータおよび中間ハッシュ値入力状態に行われる。処理ブロック２０５０において、ハッシュ値出力状態が、ＳＩＭＤ  ＳＭ３ハッシュラウンドスライスの反復の結果として生成される。処理ブロック２０６０において、ハッシュラウンドスライスのすべての反復が終了したか否かの判断がなされる。終了していない場合、随意で処理ブロック２０７０において、ハッシュラウンドスライスの次の反復のために、出力状態結果は入力状態にバイパスされ、処理は処理ブロック２０３０における開始を反復する。そうでなければ、処理は処理ブロック２０８０に進み、処理ブロック２０８０では、ハッシュ値出力状態結果が第１のＳＩＭＤレジスタ内のデスティネーションオペランドに格納される。いくつかの代替的な実施形態において、ハッシュ値出力状態結果は、第１のＳＩＭＤレジスタ以外のＳＩＭＤレジスタ内またはメモリ内のデスティネーションオペランドに格納されてよい。
【０１６２】
図２１は、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を提供するための代替の命令の実行のためのプロセス２１０１の一実施形態のためのフロー図を示す。処理２１０１の処理ブロック２１１０において、ＳＭ３ハッシュアルゴリズムの第１のソースデータオペランドセットが第１のＳＩＭＤベクトルレジスタ内に格納（例えば、複数のｍ個のデータフィールドの第１の部分内）される。処理ブロック２１２０において、第２のソースデータオペランドセットが第２のＳＩＭＤベクトルレジスタ内に格納（例えば、複数のｍ個のデータフィールドの第２の部分内）される。処理ブロック２１３０において、ＳＭ３ハッシュアルゴリズムのＳＩＭＤ  ＳＭ３メッセージ拡張（または拡大）のための命令が受信される。処理ブロック２１４０において、新規メッセージワードが、ＳＩＭＤ  ＳＭ３メッセージ拡張スライスの反復の結果として生成される。処理ブロック２１５０において、メッセージ拡張のすべての反復が終了したか否かに関する判断がなされる。終了していない場合、随意で処理ブロック２１６０において、メッセージ拡張スライスの次の反復のために、拡張されたメッセージブロック結果は入力状態にバイパスされ、処理は処理ブロック２１４０における開始を反復する。そうでなければ、処理は処理ブロック２１７０に進み、処理ブロック２１７０では、拡張されたメッセージブロック結果が第１のＳＩＭＤレジスタ内のデスティネーションオペランドに格納される。いくつかの代替的な実施形態において、拡張されたメッセージブロック結果は、第１のＳＩＭＤレジスタ以外のＳＩＭＤレジスタ内またはメモリ内のデスティネーションオペランドに格納されてよい。
【０１６３】
ＳＩＭＤ  ＳＭ３暗号化ハッシュ命令は本明細書で開示の通り、ＳＩＭＤ  ＳＭ３暗号化ハッシュ機能を複数のアプリケーションに提供するために使用できることを理解されたい。そのようなアプリケーションとしては、財務トランザクション、電子商取引、電子メール、ソフトウェア配布、データストレージ、乱数生成等のためのデータ整合性、デジタル署名、本人確認、メッセージコンテンツ認証およびメッセージ元認証を保証するための暗号化プロトコルおよびインターネット通信が挙げられる。
【０１６４】
ＳＭ３暗号化ハッシュ機能を提供するためのＳＩＭＤ命令および処理ロジックのいくつかの実施形態について、ＳＭ３メッセージ拡張およびＳＭ３暗号化ハッシュラウンドの両方は、現在のマイクロプロセッサの標準的な実行パイプラインの中で、複数の反復のスライスにおいて同時におよび／または並列に実行されてよい。ＳＭ３メッセージ拡張のスライスおよび／またはＳＭ３暗号化ハッシュラウンドのスライスの実行に関連するレイテンシによる他の同時インフライト命令に対し、十分なカバーを提供すべく、１スライスごとの反復数は好都合に選択されてよいことを理解されたい。
【０１６５】
従って、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数（例えば、１スライスごとに２、４または８回の反復）を有する、ＳＩＭＤ  ＳＭ３暗号化ハッシュアルゴリズムラウンドスライスのための命令の実行を提供することによって、スーパースカラ実行パイプライン、および／またはアウトオブオーダプロセッサパイプライン内の他の命令（例えば、ＳＭ３メッセージ拡張命令）の同時実行を許容し、それによって多数のアプリケーションの処理スループットを大きく改善し、汎用プロセッサに関連する製造処理改善のために周波数スケーリングを利用できることも理解されたい。
【０１６６】
本明細書に開示のメカニズムに係る実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはこれらの実装アプローチの組み合わせにおいて実装されてよい。本発明の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性メモリおよび／またはストレージ要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備えるプログラム可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
【０１６７】
本明細書に記載の機能を実行し、出力情報を生成すべく、プログラムコードが入力命令に適用されてよい。出力情報は、既知の方法で１または複数の出力デバイスに適用されてよい。本願の意図する処理システムとは、例えばデジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサ等のプロセッサを有する任意のシステムが含まれる。
【０１６８】
プログラムコードは、処理システムと通信するために、高水準の手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、必要に応じて、アセンブリ言語または機械言語で実装されてもよい。実際、本明細書に記載のメカニズムは特定のプログラミング言語には一切範囲限定されない。いずれの場合においても、言語はコンパイル型言語または解釈型言語であってよい。
【０１６９】
少なくとも一実施形態に係る１または複数の態様は、機械可読媒体上に格納された、プロセッサ内で様々なロジックを表わす典型的命令によって実装されてよく、当該命令は機械による読み取り時に、機械に対し、本明細書に記載の技術を実行するためのロジックを生成させる。このような「ＩＰコア」として知られる典型的なものが、有形の機械可読媒体上に格納され、様々な顧客または製造施設に供給され、実際にロジックまたはプロセッサを生産する製造機械にロードされてよい。
【０１７０】
このような機械可読ストレージ媒体としては特に限定されないが、機械またはデバイスによって製造または形成される複数の物品から成る非一時的な有形の構成が含まれてよく、それらとしては、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ‐ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ‐ＲＷ）、および光磁気ディスクを含む任意の他のタイプのディスク、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）等の半導体デバイス、磁気カード若しくは光カードといった記憶媒体、または電子的命令を格納するのに好適な任意の他のタイプの媒体が含まれる。
【０１７１】
従って、また、本発明の実施形態は、命令を含む、または本明細書に記載の構造、回路、装置、プロセッサおよび／またはシステム機能を定義するハードウェア記述言語（ＨＤＬ）等の設計データを含む非一時的な有形の機械可読媒体を含む。また、このような実施形態はプログラム製品としても称されてよい。
【０１７２】
いくつかの場合において、命令コンバータを使用し、命令はソース命令セットからターゲット命令セットへ変換されてよい。例えば、命令コンバータは、ある命令を、コアによって処理されるべき１または複数の他の命令へと、トランスレート（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して）、モーフィング、エミュレーション、またはそれら以外の方法による変換を行ってよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによって実装されてよい。命令コンバータは、プロセッサ内、プロセッサ外、または部分的にプロセッサ内または部分的にプロセッサ外に存在してよい。
【０１７３】
故に、少なくとも一実施形態による１または複数の命令を実行するための技術が開示されている。具体的な例示的実施形態が記載され、添付図面に図示されているものの、このような実施形態は専ら例示にすぎず、広範な本発明においての限定となるものではなく、本開示に接する当業者には様々な他の変形例が想起され得るので、本発明は図示および記載された具体的な構造および構成に限定されないことを理解されたい。本技術分野等、成長が速く、さらなる進歩が容易に予測できない技術分野においては、当該開示の実施形態は、技術の進展を可能にすることで容易となるように、本開示の原理または添付の特許請求の範囲から逸脱することなく構成および詳細において容易に変更可能である。
［項目１］
ＳＩＭＤ  ＳＭ３ハッシュラウンドスライスのための第１の命令をデコードするためのデコードステージと、
１または複数の実行ユニットと、を備え、
前記第１の命令はハッシュのアルゴリズムのラウンドスライス部分、中間ハッシュ値入力オペランド、ソースデータオペランドセットおよびラウンド定数オペランドセットを指定し、
前記１または複数の実行ユニットは前記デコードされた第１の命令に応答して、
複数のラウンド反復から成るＳＭ３ハッシュラウンドスライスセットを前記ソースデータオペランドセットに実行して、前記中間ハッシュ値入力オペランドおよび前記ラウンド定数オペランドセットを適用し、
前記第１の命令の結果をＳＩＭＤデスティネーションレジスタに格納する、プロセッサ。
［項目２］
前記第１の命令は前記ＳＩＭＤデスティネーションレジスタを、前記中間ハッシュ値入力オペランドとしても指定する、項目１に記載のプロセッサ。
［項目３］
前記第１の命令は、前記ハッシュのアルゴリズムの前記ラウンドスライス部分を即値オペランド内の第１のフィールドによって指定する、項目１または２に記載のプロセッサ。
［項目４］
前記第１の命令は、前記ラウンド定数オペランドセットを前記即値オペランド内の第２のフィールドによって少なくとも部分的に指定する、項目３に記載のプロセッサ。
［項目５］
前記第１の命令は、前記即値オペランド内の前記第２のフィールドによってブール関数ＦＦｊおよびＧＧｊセレクタをさらに指定する、項目４に記載のプロセッサ。
［項目６］
前記第１の命令は前記ハッシュのアルゴリズムの前記ラウンドスライス部分を第１の命令ニーモニック内で４回のラウンドとして指定する、項目１から５のいずれか一項に記載のプロセッサ。
［項目７］
前記ラウンド定数オペランドセットは、４個の予め回転された３２ビット定数値を有する、項目６に記載のプロセッサ。
［項目８］
前記第１の命令は、前記ハッシュのアルゴリズムの前記ラウンドスライス部分を第１の命令ニーモニック内で２回のラウンドとして指定する、項目１から５のいずれか一項に記載のプロセッサ。
［項目９］
前記第１の命令は、前記ハッシュのアルゴリズムの前記ラウンドスライス部分を第１の命令ニーモニック内で１回のラウンドとして指定する、項目１から５のいずれか一項に記載のプロセッサ。
［項目１０］
前記第１の命令は、前記ソースデータオペランドセットを８個の３２ビット値を有するＳＩＭＤレジスタとして指定する、項目１から９のいずれか一項に記載のプロセッサ。
［項目１１］
前記第１の命令は、前記ソースデータオペランドセットを８個の３２ビット値を有するメモリ場所として指定する、項目１から９のいずれか一項に記載のプロセッサ。
［項目１２］
前記第１の命令は、前記ソースデータオペランドセットをそれぞれ４個の３２ビット値を有する２つのＳＩＭＤレジスタとして指定する、項目１から９のいずれか一項に記載のプロセッサ。
［項目１３］
前記第１の命令は、前記ハッシュのアルゴリズムの前記ラウンドスライス部分を、０から６３の間のラウンド回数を格納すべく、即値オペランド内の第１のフィールドによって指定し、０から３の間の反復カウントを格納すべく、第２のフィールドによって指定する、項目１から３のいずれか一項に記載のプロセッサ。
［項目１４］
ＳＩＭＤ  ＳＭ３メッセージ拡張のための第１の命令をデコードするためのデコードステージと、
１または複数の実行ユニットと、を備え、
前記第１の命令は第１のソースデータオペランドセットと、第２のソースデータオペランドセットと、拡張範囲と、を指定し、
前記１または複数の実行ユニットは前記デコードされた第１の命令に応答して、
前記第１のソースデータオペランドセットおよび前記第２のソースデータオペランドセットから、ＳＭ３メッセージ拡張の数を実行し、前記ＳＭ３メッセージ拡張の数は前記指定された拡張範囲によって判断され、
前記第１の命令の結果をＳＩＭＤデスティネーションレジスタに格納する、プロセッサ。
［項目１５］
前記第１の命令は、前記ＳＩＭＤデスティネーションレジスタをデスティネーションオペランドとして指定する、項目１４に記載のプロセッサ。
［項目１６］
前記第１の命令は、前記第１のソースデータオペランドセットおよび前記第２のソースデータオペランドセットをそれぞれ８個の３２ビット値を有する２つのＳＩＭＤレジスタとして指定する、項目１４または１５に記載のプロセッサ。
［項目１７］
前記第１の命令は、前記拡張範囲を即値オペランド内の第１のフィールドによって指定する、項目１４から１６のいずれか一項に記載のプロセッサ。
［項目１８］
前記第１の命令は、前記拡張範囲を第１の命令ニーモニック内で、４個の新規３２ビットワードのメッセージ拡張を示すように指定する、項目１４から１７のいずれか一項に記載のプロセッサ。
［項目１９］
前記４個の新規３２ビットワードのうちの１つのための前記メッセージ拡張は、前記第１のソースデータオペランドセットおよび前記第２のソースデータオペランドセットに加え、前記４個の新規３２ビットワードのうちのもう１つを必要とする、項目１８に記載のプロセッサ。
［項目２０］
前記第１の命令は、前記拡張範囲を第１の命令ニーモニック内で、２個の新規３２ビットワードのメッセージ拡張を示すように指定する、項目１４から１７のいずれか一項に記載のプロセッサ。
［項目２１］
前記第１の命令は、前記拡張範囲を第１の命令ニーモニック内で、１個の新規３２ビットワードのメッセージ拡張を示すように指定する、項目１４から１７のいずれか一項に記載のプロセッサ。
［項目２２］
前記第１の命令は、前記拡張範囲を第１の命令ニーモニック内で、４個の新規３２ビットワードのメッセージ拡張を示すように指定する、項目１４から１７のいずれか一項に記載のプロセッサ。
［項目２３］
第１のベクトルレジスタの複数のｍ個のデータフィールドの第１の部分に、ＳＭ３ハッシュアルゴリズムの中間ハッシュ値入力状態のソースオペランドを格納する段階と、
第２のベクトルレジスタの複数のｍ個のデータフィールドの第２の部分に、ソースデータオペランドセットを格納する段階と、
プロセッサで、前記ＳＭ３ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数を有する前記ＳＭ３ハッシュアルゴリズムのＳＭ３ハッシュラウンドスライスの部分のためのＳＩＭＤ命令を実行する段階と、
前記ＳＭ３ハッシュラウンドスライスの各反復において、反復の結果を生成し、前記反復の前記結果として生成されたハッシュ値出力状態を格納し、複数の前記反復の次の各反復のために、前記ハッシュ値出力状態を前記中間ハッシュ値入力状態にバイパスする段階と、を備える、方法。
［項目２４］
第３のベクトルレジスタの前記複数のｍ個のデータフィールドの第３の部分に、ラウンド定数オペランドセットを格納する段階と、
前記ＳＭ３ハッシュラウンドスライスの各反復において、
前記ラウンド定数オペランドセットのそれぞれのラウンド定数Ｔｊを読み取り、前記それぞれのラウンド定数を前記第１のベクトルレジスタの左回転された各データフィールドＡおよび前記第１のベクトルレジスタの第２の回転されていないデータフィールドＥを用いて加算する段階と、をさらに備える、項目２３に記載の方法。
［項目２５］
前記第３の部分は、前記第３のベクトルレジスタの前記複数のｍ個のデータフィールドのうちの４個を有し、前記格納されたラウンド定数オペランドセットの各ラウンド定数Ｔｊはｊビット分予め左回転されている、項目２４に記載の方法。
［項目２６］
前記ＳＭ３ハッシュラウンドスライスの各反復において、
前記第２のベクトルレジスタの各データフィールドＷｊを読み取り、前記第２のベクトルレジスタの前記各データフィールドを前記第２のベクトルレジスタの第２のデータフィールドＷｊ＋４を用いてＸＯＲする段階をさらに備える、項目２３から２５のいずれか一項に記載の方法。
［項目２７］
前記第２の部分は、前記第２のベクトルレジスタの前記複数のｍ個のデータフィールドのうちの８個を有する、項目２６に記載の方法。
［項目２８］
前記第１の部分は、前記第１のベクトルレジスタの前記複数のｍ個のデータフィールドのうちの８個を有する、項目２３から２６のいずれか一項に記載の方法。
［項目２９］
前記ＳＩＭＤ命令は、前記ＳＭ３ハッシュアルゴリズムの前記ＳＭ３ハッシュラウンドスライスの部分を即値オペランド内の第１のフィールドによって指定する、項目２３から２８のいずれか一項に記載の方法。
［項目３０］
前記ＳＩＭＤ命令は、ラウンド定数オペランドセットを前記即値オペランド内の第２のフィールドによって少なくとも部分的に指定する、項目２９に記載の方法。
［項目３１］
前記ＳＩＭＤ命令は、ブール関数ＦＦｊおよびＧＧｊセレクタを前記即値オペランド内の前記第２のフィールドによってさらに指定する、項目３０に記載の方法。
［項目３２］
第１のベクトルレジスタの複数のｍ個のデータフィールドの第１の部分に、第１のソースデータオペランドセットを格納する段階と、
第２のベクトルレジスタの前記複数のｍ個のデータフィールドの第２の部分に、第２のソースデータオペランドセットを格納する段階と、
プロセッサで、ＳＩＭＤ命令を実行する段階と、
前記ＳＩＭＤ命令の結果をＳＩＭＤデスティネーションレジスタに格納する段階と、を備え、
前記ＳＩＭＤ命令は、前記第１のソースデータオペランドセットおよび前記第２のソースデータオペランドセットから、ＳＭ３メッセージ拡張の数を有するＳＭ３のハッシュアルゴリズムのＳＭ３メッセージ拡張スライス部分のための拡張範囲を指定し、前記ＳＭ３メッセージ拡張の数は、前記指定された拡張範囲によって判断される、方法。
［項目３３］
前記ＳＩＭＤ命令は、前記第１のソースデータオペランドセットおよび前記第２のソースデータオペランドセットを８個の３２ビット値をそれぞれ有する２つのＳＩＭＤレジスタとして指定する、項目３２に記載の方法。
［項目３４］
前記ＳＩＭＤ命令は、前記拡張範囲を即値オペランド内の第１のフィールドによって指定する、項目３２または３３に記載の方法。
［項目３５］
前記ＳＩＭＤ命令は、前記拡張範囲を第１の命令ニーモニック内で、４個の新規３２ビットワードのメッセージ拡張を示すように指定する、項目３２から３４のいずれか一項に記載の方法。
［項目３６］
前記４個の新規３２ビットワードのうちの１つのための前記メッセージ拡張は、前記第１のソースデータオペランドセットおよび前記第２のソースデータオペランドセットに加え、前記４個の新規３２ビットワードのうちのもう１つを必要とする、項目３５に記載の方法。
［項目３７］
ＳＩＭＤ  ＳＭ３ハッシュアルゴリズムラウンドスライスのための第１の命令と、前記ＳＩＭＤ  ＳＭ３ハッシュアルゴリズムのためのＳＭ３メッセージ拡張スライスのための第２の命令と、を格納するためのメモリと、
プロセッサと、を備え、
前記プロセッサは、
前記第１の命令をフェッチするための命令フェッチステージと、
前記第１の命令をデコードするためのデコードステージと、
前記第２の命令をデコードするための前記デコードステージと、
１または複数の実行ユニットと、を有し、
前記第１の命令は、前記ＳＭ３ハッシュアルゴリズムのラウンドスライス部分と、中間ハッシュ値入力オペランドと、ラウンドスライスソースデータオペランドセットと、ラウンド定数オペランドセットと、を指定し、前記第２の命令は、第１のソースデータオペランドセットと、第２のソースデータオペランドセットと、拡張範囲と、を指定し、
前記１または複数の実行ユニットは、前記デコードされた第１の命令に応答し、
複数のラウンド反復から成るＳＭ３ハッシュラウンドスライスセットを前記ラウンドスライスソースデータオペランドセットに実行して、前記中間ハッシュ値入力オペランドおよび前記ラウンド定数オペランドセットを適用し、前記第１の命令の第１の結果を第１のＳＩＭＤデスティネーションレジスタに格納し、
前記１または複数の実行ユニットは、前記デコードされた第２の命令に応答し、
前記第１のソースデータオペランドセットおよび前記第２のソースデータオペランドセットから、ＳＭ３メッセージ拡張の数を実行し、前記ＳＭ３メッセージ拡張の数は前記指定された拡張範囲によって判断され、前記第２の命令の第２の結果を第２のＳＩＭＤデスティネーションレジスタ内に格納する、処理システム。
［項目３８］
前記第１の命令は、前記ＳＭ３ハッシュアルゴリズムの前記ラウンドスライス部分を即値オペランド内の第１のフィールドによって指定する、項目３７に記載の処理システム。
［項目３９］
前記第１の命令は、前記ラウンド定数オペランドセットを即値オペランド内の第２のフィールドによって少なくとも部分的に指定する、項目３７または３８に記載の処理システム。
［項目４０］
前記第１の命令は、ブール関数ＦＦｊおよびＧＧｊセレクタを前記即値オペランド内の前記第２のフィールドによってさらに指定する、項目３９に記載の処理システム。
［項目４１］
前記第１の命令は、前記ＳＭ３ハッシュアルゴリズムの前記ラウンドスライス部分を第１の命令ニーモニック内で４回のラウンドとして指定する、項目３７から４０のいずれか一項に記載の処理システム。
［項目４２］
前記ラウンド定数オペランドセットは、初期の予め回転された３２ビット定数値を有する、項目４１に記載の処理システム。
［項目４３］
前記ラウンド定数オペランドセットは、４個の予め回転された３２ビット定数値を有する、項目４２に記載の処理システム。
［項目４４］
前記第２の命令は、前記第１のソースデータオペランドセットおよび前記第２のソースデータオペランドセットをそれぞれ８個の３２ビット値を有する２つのＳＩＭＤレジスタとして指定する、項目３７から４３のいずれか一項に記載の処理システム。
［項目４５］
前記第２の命令は、前記拡張範囲を即値オペランド内の第１のフィールドによって指定する、項目３７から４４のいずれか一項に記載の処理システム。
［項目４６］
前記第２の命令は、前記拡張範囲を第１の命令ニーモニック内で４個の新規３２ビットワードのメッセージ拡張を示すように指定する、項目３７から４５のいずれか一項に記載の処理システム。
【図１Ａ】
0006535972.tif 000012
【図１Ｂ】
0006535972.tif 000013
【図１Ｃ】
0006535972.tif 000014
【図２】
0006535972.tif 000015
【図３Ａ】
0006535972.tif 000016
【図３Ｂ】
0006535972.tif 000017
【図３Ｃ】
0006535972.tif 000018
【図３Ｄ】
0006535972.tif 000019
【図３Ｅ】
0006535972.tif 000020
【図３Ｆ】
0006535972.tif 000021
【図３Ｇ】
0006535972.tif 000022
【図３Ｈ】
0006535972.tif 000023
【図４Ａ】
0006535972.tif 000024
【図４Ｂ】
0006535972.tif 000025
【図５】
0006535972.tif 000026
【図６】
0006535972.tif 000027
【図７】
0006535972.tif 000028
【図８】
0006535972.tif 000029
【図９】
0006535972.tif 000030
【図１０】
0006535972.tif 000031
【図１１】
0006535972.tif 000032
【図１２】
0006535972.tif 000033
【図１３】
0006535972.tif 000034
【図１４Ａ】
0006535972.tif 000035
【図１４Ｂ】
0006535972.tif 000036
【図１５】
0006535972.tif 000037
【図１６】
0006535972.tif 000038
【図１７Ａ】
0006535972.tif 000039
【図１７Ｂ】
0006535972.tif 000040
【図１８Ａ】
0006535972.tif 000041
【図１８Ｂ】
0006535972.tif 000042
【図１９】
0006535972.tif 000043
【図２０】
0006535972.tif 000044
【図２１】
0006535972.tif 000045