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