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