(57)【要約】      （修正有）【課題】複数のＳＨＡ１セキュアハッシングアルゴリズムを処理する命令処理装置を提供する。【解決手段】プロセッサ１００において、第１の命令は、第１のオペランド、第２のオペランドおよび第３のオペランドを有し、第１のオペランドは、４つのＳＨＡ状態を格納する第１の格納位置を指定し、第２のオペランドは、複数のＳＨＡ１メッセージ入力を、第５のＳＨＡ１状態と組み合わせて格納する第２の格納位置を指定する、ＳＨＡ１ハッシュアルゴリズムを処理する第１の命令を受信するための命令デコーダを備える。プロセッサは、命令デコーダに結合され、第１の命令に応答して、第３のオペランドにおいて指定された組み合わせの論理関数を用いて、第１のオペランドおよび第２のオペランドから得られた複数のＳＨＡ１状態およびメッセージ入力に、複数のＳＨＡ１ラウンドオペレーションの少なくとも４つのラウンドを実行する、実行ユニットを更に備える。【選択図】図２
2019071075.tif 000002
【特許請求の範囲】
【請求項１】
第１のオペランド、第２のオペランド、および第３のオペランドを有し、前記第１のオペランドは、４つのＳＨＡ１状態を格納する第１の格納位置を指定し、前記第２のオペランドは、複数のＳＨＡ１メッセージ入力を、第５のＳＨＡ１状態と組み合わせて格納する第２の格納位置を指定する、ＳＨＡ１ハッシュアルゴリズムを処理するための第１の命令を受信するための命令デコーダと、
前記命令デコーダに結合され、前記第１の命令に応答して、前記第３のオペランドにおいて指定された組み合わせの論理関数を用いて、前記第１の格納位置および前記第２の格納位置から得られた複数のＳＨＡ１状態および前記複数のＳＨＡ１メッセージ入力に、複数のＳＨＡ１ラウンドオペレーションのうち少なくとも４つのラウンドを実行する実行ユニットとを備える、プロセッサ。
【請求項２】
前記第１のオペランドおよび前記第２のオペランドは、少なくとも１２８ビットを有するレジスタを指定する、請求項１に記載のプロセッサ。
【請求項３】
前記第１の格納位置は、複数のＳＨＡ１状態Ａ、Ｂ、Ｃ、およびＤを格納する、請求項１または２に記載のプロセッサ。
【請求項４】
前記第５のＳＨＡ１状態は、ＳＨＡ１状態Ｅである、請求項３に記載のプロセッサ。
【請求項５】
前記複数のＳＨＡ１ラウンドオペレーションのうち前記少なくとも４つのラウンドの結果は、前記第１のオペランドにより示される前記第１の格納位置に格納される、請求項１に記載のプロセッサ。
【請求項６】
前記結果は、新しい複数のＳＨＡ１状態Ａ、Ｂ、Ｃ、およびＤを表す、請求項５に記載のプロセッサ。
【請求項７】
前記命令デコーダは、第４の格納位置を指定する第４のオペランドおよび第５の格納位置を指定する第５のオペランドを有する第２の命令を受信し、
前記実行ユニットは、前記第２の命令に応答して、前記第４の格納位置から得られた先行する複数のメッセージ入力の第１のセット、および前記第５の格納位置から得られた先行する複数のメッセージ入力の第２のセットに基づいて、複数のメッセージスケジューリングオペレーションの第１の部分を実行し、前記第４の格納位置に第１の中間結果を格納する、請求項１に記載のプロセッサ。
【請求項８】
前記命令デコーダは、第６の格納位置を指定する第６のオペランドおよび第７の格納位置を指定する第７のオペランドを有する第３の命令と、第８の格納位置を指定する第８のオペランドおよび第９の格納位置を指定する第９のオペランドを有する第４の命令を受信しうるものであり、
前記第４の格納位置と前記第６の格納位置と前記第８の格納位置は、互いに同じ格納位置であり、
前記実行ユニットは、前記第３の命令に応答して、前記第６の格納位置から得られた前記第１の中間結果および前記第７の格納位置から得られた先行する複数のメッセージ入力の第３のセットに基づいて、複数のメッセージスケジューリングオペレーションの第２の部分を実行し、前記第６の格納位置に第２の中間結果を格納するものであり、
前記実行ユニットは、前記第４の命令に応答して、前記第８の格納位置から得られた前記第２の中間結果および前記第９の格納位置から得られた先行する複数のメッセージ入力の第４のセットに基づいて、複数のメッセージスケジューリングオペレーションの第３の部分を実行し、前記第８の格納位置に、次の複数のメッセージ入力を格納するものであり、
前記次の複数のメッセージ入力は、ＳＨＡ１アルゴリズムの次の複数のラウンド中に実行される前記ＳＨＡ１アルゴリズムの複数のラウンドオペレーションにおいて用いるためのものである、請求項７に記載のプロセッサ。
【請求項９】
第１のオペランド、第２のオペランド、および第３のオペランドを有し、前記第１のオペランドは、４つのＳＨＡ１状態を格納する第１の格納位置を指定し、前記第２のオペランドは、複数のＳＨＡ１メッセージ入力を、第５のＳＨＡ１状態と組み合わせて格納する第２の格納位置を指定する、ＳＨＡ１ハッシュアルゴリズムを処理するための第１の命令をプロセッサの命令デコーダにより受信する段階と、
前記第１の命令に応答して、前記第３のオペランドにおいて指定された組み合わせの論理関数を用いて、前記第１の格納位置および前記第２の格納位置から得られた複数のＳＨＡ１状態および前記複数のＳＨＡ１メッセージ入力に、複数のＳＨＡ１ラウンドオペレーションのうち少なくとも４つのラウンドを前記プロセッサの実行ユニットにより実行する段階とを備える、方法。
【請求項１０】
前記第１のオペランドおよび前記第２のオペランドは、少なくとも１２８ビットを有するレジスタを指定する、請求項９に記載の方法。
【請求項１１】
前記第１の格納位置は、複数のＳＨＡ１状態Ａ、Ｂ、Ｃ、およびＤを格納する、請求項９または１０に記載の方法。
【請求項１２】
前記第５のＳＨＡ１状態は、ＳＨＡ１状態Ｅである、請求項１１に記載の方法。
【請求項１３】
前記複数のＳＨＡ１ラウンドオペレーションの前記少なくとも４つのラウンドの結果は、前記第１のオペランドにより示される前記第１の格納位置に格納される、請求項９に記載の方法。
【請求項１４】
前記結果は、新しい複数のＳＨＡ１状態Ａ、Ｂ、Ｃ、およびＤを表す、請求項１３に記載の方法。
【請求項１５】
前記命令デコーダは、第４の格納位置を指定する第４のオペランドおよび第５の格納位置を指定する第５のオペランドを有する第２の命令を受信し、
前記実行ユニットは、前記第２の命令に応答して、前記第４の格納位置から得られた先行する複数のメッセージ入力の第１のセット、および前記第５の格納位置から得られた先行する複数のメッセージ入力の第２のセットに基づいて、複数のメッセージスケジューリングオペレーションの第１の部分を実行し、第１の中間結果を前記第４の格納位置に格納する、請求項９に記載の方法。
【請求項１６】
前記命令デコーダは、第６の格納位置を指定する第６のオペランドおよび第７の格納位置を指定する第７のオペランドを有する第３の命令と、第８の格納位置を指定する第８のオペランドおよび第９の格納位置を指定する第９のオペランドを有する第４の命令を受信しうるものであり、
前記第４の格納位置と前記第６の格納位置と前記第８の格納位置は、互いに同じ格納位置であり、
前記実行ユニットは、前記第３の命令に応答して、前記第６の格納位置から得られた前記第１の中間結果および前記第７の格納位置から得られた先行する複数のメッセージ入力の第３のセットに基づいて、複数のメッセージスケジューリングオペレーションの第２の部分を実行し、前記第６の格納位置に第２の中間結果を格納するものであり、
前記実行ユニットは、前記第４の命令に応答して、前記第８の格納位置から得られた前記第２の中間結果および前記第９の格納位置から得られた先行する複数のメッセージ入力の第４のセットに基づいて、複数のメッセージスケジューリングオペレーションの第３の部分を実行し、前記第８の格納位置に、次の複数のメッセージ入力を格納するものであり、
前記次の複数のメッセージ入力は、ＳＨＡ１アルゴリズムの次の複数のラウンド中に実行される前記ＳＨＡ１アルゴリズムの複数のラウンドオペレーションにおいて用いるためのものである、請求項１５に記載の方法。
【請求項１７】
相互接続と、
前記相互接続に結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、
前記相互接続に結合されたプロセッサとを備え、
前記プロセッサは、
第１のオペランド、第２のオペランド、および第３のオペランドを有し、前記第１のオペランドは、４つのＳＨＡ１状態を格納する第１の格納位置を指定し、前記第２のオペランドは、複数のＳＨＡ１メッセージ入力を、第５のＳＨＡ１状態と組み合わせて格納する第２の格納位置を指定する、ＳＨＡ１ハッシュアルゴリズムを処理するための第１の命令を受信するための命令デコーダと、
前記命令デコーダに結合され、前記第１の命令に応答して、前記第３のオペランドにおいて指定された組み合わせの論理関数を用いて、前記第１の格納位置および前記第２の格納位置から得られた複数のＳＨＡ１状態および前記複数のＳＨＡ１メッセージ入力に、複数のＳＨＡ１ラウンドオペレーションのうち少なくとも４つのラウンドを実行する実行ユニットとを有する、データ処理システム。
【請求項１８】
前記第１のオペランドおよび前記第２のオペランドは、少なくとも１２８ビットを有するレジスタを指定する、請求項１７に記載のデータ処理システム。
【請求項１９】
前記第１の格納位置は、複数のＳＨＡ１状態Ａ、Ｂ、Ｃ、およびＤを格納する、請求項１７または１８に記載のデータ処理システム。
【請求項２０】
前記第５のＳＨＡ１状態は、ＳＨＡ１状態Ｅである、請求項１９に記載のデータ処理システム。
【請求項２１】
前記複数のＳＨＡ１ラウンドオペレーションの前記少なくとも４つのラウンドの結果は、前記第１のオペランドにより示される前記第１の格納位置に格納される、請求項１７に記載のデータ処理システム。
【請求項２２】
前記結果は、新しい複数のＳＨＡ１状態Ａ、Ｂ、Ｃ、およびＤを表す、請求項２１に記載のデータ処理システム。
【請求項２３】
前記命令デコーダは、第４の格納位置を指定する第４のオペランドおよび第５の格納位置を指定する第５のオペランドを有する第２の命令を受信し、
前記実行ユニットは、前記第２の命令に応答して、前記第４の格納位置から得られた先行する複数のメッセージ入力の第１のセット、および前記第５の格納位置から得られた先行する複数のメッセージ入力の第２のセットに基づいて、複数のメッセージスケジューリングオペレーションの第１の部分を実行し、第１の中間結果を前記第４の格納位置に格納する、請求項１７に記載のデータ処理システム。
【請求項２４】
前記命令デコーダは、第６の格納位置を指定する第６のオペランドおよび第７の格納位置を指定する第７のオペランドを有する第３の命令と、第８の格納位置を指定する第８のオペランドおよび第９の格納位置を指定する第９のオペランドを有する第４の命令を受信しうるものであり、
前記第４の格納位置と前記第６の格納位置と前記第８の格納位置は、互いに同じ格納位置であり、
前記実行ユニットは、前記第３の命令に応答して、前記第６の格納位置から得られた前記第１の中間結果および前記第７の格納位置から得られた先行する複数のメッセージ入力の第３のセットに基づいて、複数のメッセージスケジューリングオペレーションの第２の部分を実行し、前記第６の格納位置に第２の中間結果を格納するものであり、
前記実行ユニットは、前記第４の命令に応答して、前記第８の格納位置から得られた前記第２の中間結果および前記第９の格納位置から得られた先行する複数のメッセージ入力の第４のセットに基づいて、複数のメッセージスケジューリングオペレーションの第３の部分を実行し、前記第８の格納位置に、次の複数のメッセージ入力を格納するものであり、
前記次の複数のメッセージ入力は、ＳＨＡ１アルゴリズムの次の複数のラウンド中に実行される前記ＳＨＡ１アルゴリズムの複数のラウンドオペレーションにおいて用いるためのものである、請求項２３に記載のデータ処理システム。
【請求項２５】
請求項９から１６のいずれか１項に記載の方法を実行するための手段を備える、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の複数の実施形態は、概ね、複数の命令処理装置に関する。より具体的には、本発明の複数の実施形態は、複数のＳＨＡ１セキュアハッシングアルゴリズムを処理する命令処理装置に関する。
【背景技術】
【０００２】
ＳＨＡは、セキュアハッシュアルゴリズムを表す。ＳＨＡは、国家安全保障局（ＮＳＡ）により設計され、国立標準技術研究所（ＮＩＳＴ）により公開された５つのハッシュ関数からなる。その全てのうちで、ＳＨＡ１が最も普及しているものである。ＳＨＡ１は、２６４の最大長を有するメッセージのための１６０ビットのメッセージダイジェストを生成する。メッセージダイジェストは、メッセージの固定長出力である。そして、メッセージダイジェストは、デジタル署名アルゴリズム（ＤＳＡ）に入力され、次いで、デジタル署名アルゴリズムは、メッセージのための署名を生成する。メッセージではなく、メッセージダイジェストに署名することは、メッセージダイジェストがメッセージより小さいので、性能の改善を提供する。次に、メッセージの受信者は、署名を検証するべく同一のハッシュアルゴリズムを使用する。転送中に生じるいずれの変更も、異なるメッセージダイジェストをもたらし、従って、署名を検証しない。署名がｔｒｕｅとして検証されると、受信者は、メッセージのロック解除をすることができる。この方法は、複数の未承認ユーザが自身に向けられていない複数のメッセージを見ることを阻止する。
【０００３】
メッセージダイジェストを計算する場合に、ＳＨＡ１は、５１２ビットの複数のブロックを処理する。メッセージダイジェストの全長は、５１２の倍数になる。図１Ａは、複数のＳＨＡ１オペレーションの典型的イテレーションを図示するブロック図である。図１Ｂおよび１Ｃは、複数のＳＨＡ１オペレーションの複数のラウンド中に使用される複数の関数および定数をそれぞれ示す。ＳＨＡ１ハッシュアルゴリズムを用いて５１２ビット／６４バイトブロックのデータを処理することは、８０ラウンド（イテレーション）のラウンドアルゴリズムを実行することからなる。各ラウンドに対して、３２ビットのメッセージ入力が要求され、ハッシュされる５１２ビットのブロックが最初の１６ラウンドのメッセージデータ入力に直接使用され、１７〜８０ラウンドに対する複数のメッセージ入力は、ＳＨＡ１規格により指定される複数の「メッセージスケジューリング関数」に従って先行するメッセージ入力を組み合わせることにより派生する。
【０００４】
具体的には、ＳＨＡ１規格によれば、メッセージダイジェストは、埋め込みメッセージを用いて計算される。計算は、２つのバッファを用い、それぞれは、５つの３２ビットワード、および８０の３２ビットワードのシーケンスからなる。最初の５ワードのバッファのワードは、Ａ、Ｂ、Ｃ、Ｄ、およびＥとラベリングされている。次の５ワードのバッファのワードは、Ｈ０、Ｈ１、Ｈ２、Ｈ３、およびＨ４とラベリングされている。８０ワードのシーケンスのワードは、Ｗ０、Ｗ１，...，Ｗ７９とラベリングされている。また、１つのワードバッファＴＥＭＰが使用される。メッセージダイジェストを生成するべく、規格において定義される複数の１６ワードのブロックＭ１、Ｍ２，...，Ｍｎは、順番に処理される。各Ｍ；の処理は、８０の段階を伴う。任意の複数のブロックを処理する前に、｛３／４｝は、Ｈ０＝０ｘ６７４５２３０１、Ｈ１＝０ｘＥＦＣＤＡＢ８９、Ｈ２＝０ｘ９８ＢＡＤＣＦＥ、Ｈ３＝０ｘ１０３２５４７６、およびＨ４＝０ｘＣ３Ｄ２ＥｌＦ０のように初期化される。
次に、Ｍ１、Ｍ２，...，Ｍｎが処理される。
Ｍ１を処理するべく、以下の複数のオペレーションが実行される。
ａ）Ｍ；を１６ワードのＷ０、Ｗ１，...，Ｗ１５に分割する。ただし、Ｗ０が左端のワードのである。
ｂ）ｔ＝１６〜７９の場合、Ｗ１＝Ｓ１（Ｗｔ−３ＸＯＲ  Ｗｔ＿８ＸＯＲ  Ｗｔ−１４  ＸＯＲ  Ｗｔ−１６）とする。
ｃ）Ａ＝Ｈ０、Ｂ＝Ｈ１、Ｃ＝Ｈ２、Ｄ＝Ｈ３、Ｅ＝Ｈ４とする。
ｄ）Ｆｏｒ  ｔ＝０〜７９  ｄｏ
ＴＥＭＰ＝Ｓ５（Ａ）＋ｆ１（Ｂ，Ｃ，Ｄ）＋Ｅ＋Ｗｔ＋Ｋｔ
Ｅ＝Ｄ；Ｄ＝Ｃ；Ｃ＝Ｓ３０（Ｂ）；Ｂ＝Ａ；Ａ＝ＴＥＭＰ
ｅ）Ｈ０＝Ｈ０＋Ａ、Ｈ１＝Ｈ１＋Ｂ，Ｈ２＝Ｈ２＋Ｃ，Ｈ３＝Ｈ３＋Ｄ，Ｈ４＝Ｈ４＋Ｅ
【０００５】
Ｍｎを処理した後、メッセージダイジェストは、５ワードＨ０、Ｈ１、Ｈ２、Ｈ３、およびＨ４により表される１６０ビットの文字列となる。
【０００６】
あるいは、ＳＨＡ１規格によれば、上記は、シーケンスＷ０，...，Ｗ７９が８０の３２ビットワードのアレイとして実装されるものと仮定する。これは、段階（ｂ）におけるＷｔ−３，...，Ｗｔ−１６の複数のアドレスが容易に計算されるので、実行時間の最小化の観点から効率的である。スペースが貴重である場合、代替例は、｛Ｗｔ｝を巡回待ちキューとみなし、これは、１６の３２ビットワードＷ［０］，...，Ｗ［１５］のアレイを用いて実装され得る。この場合、ＭＡＳＫ＝ＯｘＯＯＯＯＯＯＯＦとし、Ｍ；の処理は以下のようになる。
ａ）Ｍを１６ワードのＷ［０］，...，Ｗ［１５］に分割する。ただし、Ｗ［０］が左端のワードである。
ｂ）Ａ＝Ｈ０、Ｂ＝Ｈ１、Ｃ＝Ｈ２、Ｄ＝Ｈ３、Ｅ＝Ｈ４とする。
ｃ）Ｆｏｒ  ｔ  ＝０  ｔｏ  ７９  ｄｏ
ｓ＝ｔΛＭＡＳＫ
ｉｆ（ｔ＞＝１６）Ｗ［ｓ］＝Ｓ１（Ｗ［（ｓ＋１３）ΛＭＡＳＫ］ＸＯＲ  Ｗ［（ｓ＋８）ＡＮＤ  ＭＡＳＫ］ＸＯＲ  Ｗ［（ｓ＋２）＜Λ＞ＭＡＳＫ］ＸＯＲ  Ｗ［ｓ］）
ＴＥＭＰ＝Ｓ５（Ａ）＋ｆ１（Ｂ，Ｃ，Ｄ）＋Ｅ＋Ｗ［ｓ］＋Ｋｔ
Ｅ＝Ｄ；Ｄ＝Ｃ；Ｃ＝Ｓ３０（Ｂ）；Ｂ＝Ａ；Ａ＝ＴＥＭＰ
ｄ）Ｌｅｔ  Ｈ０＝Ｈ０＋Ａ，Ｈ１＝Ｈ１＋Ｂ，Ｈ２＝Ｈ２＋Ｃ，Ｈ３＝Ｈ３＋Ｄ，Ｈ４＝Ｈ４＋Ｅ
【０００７】
ＳＨＡ１仕様に関する更なる詳細な情報は、連邦情報処理規格刊行物（ＦＩＰＳ  ＰＵＢ  １８０  −  １９９５  Ａｐｒｉｌ  １７）により公開されたセキュアハッシュ規格に見出され得る。
【０００８】
従来の複数のソフトウェアソリューションは、標準の３２ビット命令および３２ビットレジスタ／メモリストレージを利用する。ラウンド計算は、４つの３２ビット加算、２つの３２ビット循環、複数の論理関数および移動を必要とする。複数のラウンド１７〜８０に対する各メッセージ入力は、循環および３つの排他的ＯＲ（ＸＯＲ）を必要とする。８０ラウンド／メッセージパスのそれぞれに対する４つの３２ビットの加算、３つの循環、およびいくつかの論理関数を用い、複数の実行ユニットプロセッサを更に用いて、いくつかのサイクルが処理するために要求される。上記の複数のオペレーションを実行する効率的なやり方が欠如していた。
【図面の簡単な説明】
【０００９】
本発明の複数の実施形態は、添付の複数の図面において限定ではなく例として図示され、複数の同様の参照符号は、複数の類似の要素を示す。
【図１Ａ】ＳＨＡ１標準アルゴリズムの典型的処理を図示するブロック図である。
【図１Ｂ】ＳＨＡ１標準アルゴリズムにおいて使用される複数の関数および定数を図示する図である。
【図１Ｃ】ＳＨＡ１標準アルゴリズムにおいて使用される複数の関数および定数を図示する図である。
【図２】一実施形態によるプロセッサの一例を図示するブロック図である。
【図３】一実施形態によるＳＨＡ１ラウンド処理を図示するブロック図である。
【図４】一実施形態による複数のＳＨＡ１オペレーションのパイプライン処理を図示するブロック図である。
【図５】一実施形態による複数のＳＨＡ１ラウンドオペレーションを実行する方法を図示するフロー図である。
【図６】一実施形態による複数のＳＨＡ１メッセージスケジューリングオペレーションを実行する方法を図示するフロー図である。
【図７】一実施形態による複数のＳＨＡ１メッセージスケジューリングオペレーションを実行する方法を図示するフロー図である。
【図８】一実施形態による複数のＳＨＡ１オペレーション用の疑似コードである。
【図９Ａ】本発明の一実施形態による、例示的な高度ベクトル拡張（ＡＶＸ）の命令フォーマットを図示する。
【図９Ｂ】本発明の別の実施形態による、例示的な高度ベクトル拡張（ＡＶＸ）の命令フォーマットを図示する。
【図９Ｃ】本発明の別の実施形態による、例示的な高度ベクトル拡張（ＡＶＸ）命令フォーマットを図示する。
【図１０Ａ】本発明の複数の実施形態による、一般ベクトル向け命令フォーマットおよびそのクラスＡ命令テンプレートを図示するブロック図である。
【図１０Ｂ】本発明の複数の実施形態による、一般ベクトル向け命令フォーマットおよびそのクラスＢ命令テンプレートを図示するブロック図である。
【図１１Ａ】本発明の一実施形態による、例示的な特定ベクトル向け命令フォーマットを図示するブロック図である。
【図１１Ｂ】本発明の別の実施形態による一般ベクトル向け命令フォーマットを図示するブロック図である。
【図１１Ｃ】本発明の別の実施形態による、一般ベクトル向け命令フォーマットを図示するブロック図である。
【図１１Ｄ】本発明の別の実施形態による一般ベクトル向け命令フォーマットを図示するブロック図である。
【図１２】本発明の一実施形態によるレジスタアーキテクチャのブロック図である。
【図１３Ａ】本発明の複数の実施形態による、例示的なインオーダパイプライン、および例示的なレジスタリネーム、アウトオブオーダ発行／実行パイプラインの双方を図示するブロック図である。
【図１３Ｂ】本発明の複数の実施形態によるプロセッサに含まれる、インオーダアーキテクチャコアの例示的な実施形態、および例示的なレジスタリネーム、アウトオブオーダ発行／実行アーキテクチャコアの双方を図示するブロック図である。
【図１４Ａ】本発明の一実施形態による、プロセッサコアのブロック図である。
【図１４Ｂ】本発明の別の実施形態によるプロセッサコアのブロック図である。
【図１５】本発明の複数の実施形態によるプロセッサのブロック図である。
【図１６】本発明の一実施形態によるシステムのブロック図である。
【図１７】本発明の実施形態による、より具体的な例示的システムのブロック図である。
【図１８】本発明の別の実施形態による、より具体的な例示的システムのブロック図である。
【図１９】本発明の実施形態によるＳｏＣのブロック図である。
【図２０】本発明の複数の実施形態による、ソース命令セットの複数のバイナリ命令を、ターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の使用を対比させるブロック図である。
【発明を実施するための形態】
【００１０】
本発明の様々な実施形態および態様は、以下に論じられる詳細、および様々な実施形態を図示する添付の複数の図面を参照して説明される。以下の説明および複数の図面は、本発明を図示するものであって、本発明を限定するものと解釈されるものではない。多くの具体的詳細は、本発明の様々な実施形態の完全な理解を提供するべく説明される。しかし、複数の一定の例において、周知または従来の詳細は、本発明の複数の実施形態の正確な論述を提供するべく記載されない。
【００１１】
本明細書において「一実施形態」または「実施形態」に言及することは、実施形態と共に説明される特定の機能、構造、または特性が本発明の少なくとも一実施形態に含まれ得ることを意味する。本明細書の様々な個所において「一実施形態において」という文言が現れても、全てが必ずしも同一の実施形態を指す訳ではない。
【００１２】
いくつかの実施形態によれば、新しい命令セットアーキテクチャ（ＩＳＡ）は、上記の複数のＳＨＡ１オペレーションに利用される。複数のプロセッサ命令の新しいセットは、複数の既存のプロセッサ命令に対し著しい性能改善を伴ったＳＨＡ１のセキュアハッシング規格を実装するべく用いられる。ＩＳＡは、ｘｍｍレジスタ等、複数の１２８ビット単一命令多重データ（ＳＩＭＤ）レジスタ上で動作するように定義される。本発明の実施形態は、５１２ビットブロックのメッセージデータ用の複数のＳＨＡ１ハッシュラウンド計算関数を最適化するように設計された複数の命令を含む。ＳＨＡハッシュアルゴリズムを用いるデータの５１２ビット／６４バイトブロックを処理することは、ラウンドアルゴリズムの８０のラウンドまたはイテレーションを実行することを含む。各ラウンドに対して、３２ビットのメッセージ入力が要求され、ハッシュされるブロックの５１２ビットがメッセージデータ入力の最初の１６ラウンドに直接使用され、ラウンド１７〜８０に対するメッセージ入力は、ＳＨＡ１規格により指定されるメッセージスケジューリング関数に従って、先行するメッセージ入力を組み合わせることにより派生する。最適化された性能は、ＳＨＡ１ラウンド関数計算を実行するべく要求される時間を最小化することにより実現される。本発明の複数の実施形態は、複数の１２８ビットＳＩＭＤレジスタを、複数のＳＨＡ１状態に対するソース／デスティネーションとして使用する新しい命令およびデータパスを含み、ＳＨＡ１の４つのラウンドを処理する。
【００１３】
図２は、一実施形態によるプロセッサの一例を図示するブロック図である。図２を参照すると、プロセッサ１００は、任意の種類の命令処理装置を表し得る。例えば、プロセッサ１０１は、汎用プロセッサであってもよい。プロセッサ１００は、様々な複合命令セットコンピューティング（ＣＩＳＣ）プロセッサ、様々な縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、様々な超長命令語（ＶＬｒＷ）プロセッサ、その様々なハイブリッド、または他の複数のタイプのプロセッサの全くいずれであってもよい。一実施形態において、プロセッサ１００は、命令１０６を受信およびデコードする命令デコーダ１０１を含む。命令デコーダ１０１は、１または複数のマイクロオペレーション、マイクロコード、複数のエントリポイント、マイクロ命令、他の命令、または他の制御信号を生成および出力することができ、これらは、命令１０６を反映し、または命令１０６から派生する。命令デコーダ１０１は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの複数の例示的としては、マイクロコードリードオンリメモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）等が挙げられるが、これらに限定されるものではない。
【００１４】
プロセッサ１００は、１または複数の実行ユニット１０２を更に含み、１または複数の実行ユニット１０２は、算術ロジックユニット、または命令１０６に基づいて複数のオペレーションを実行することが可能な別のタイプのロジックユニットを含み得る。命令デコーダ１０１が命令１０６をデコードする結果として、実行ユニット１０２は、１または複数のマイクロオペレーション、複数のマイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を受信することができ、これらは、命令１０６を反映し、または命令１０６から派生する実行ユニット１０２は、１または複数のソースオペランド（ＳＲＣ）１０８を示す命令１０６の結果として、命令１０６により示されるレジスタセット１０５の１または複数のデスティネーションオペランド（ＤＥＳＴ）１０９における結果を格納するように動作可能であってもよい。実行ユニット１０２は、複数の命令または命令１０６から派生する他の複数の制御信号を実行し、それに応じてオペレーションを実行するように動作可能な回路または他の実行ロジック（例えば、ハードウェアおよび／またはファームウェアと組み合わされるソフトウェア）を含み得る。実行ユニット１０２は、ロジックユニット、算術ロジックユニット（ＡＬＵ）、算術ユニット、整数ユニット等、任意の種類の複数の実行ユニットを表し得る。
【００１５】
一実施形態において、命令１０６は、（例えば、１または複数の専用フィールドまたは複数のビットのセットにより）ソースおよびデスティネーションオペランドを黙示的に示し、および／または明示的に指定し得る。複数の好適なソースおよび／またはオペランドのデスティネーションの例としては、レジスタ、メモリ、命令の即値、およびこれらの組み合わせが挙げられる。様々な実施形態において、ソースおよびデスティネーションオペランドは、８ビット、１６ビット、３２ビット、または６４ビットのオペランドであり得るが、これは、要求されない。
【００１６】
一実施形態において、ソースおよび複数のデスティネーションオペランドのいくつかまたは全ては、レジスタセットおよび／またはメモリ１０４の複数のレジスタに格納され得る。レジスタセットは、ステータスレジスタ、フラグレジスタ等、潜在的には他の複数のレジスタを伴うレジスタファイルの一部であってもよい。レジスタは、データを格納するべく用いられ得る格納位置またはデバイスであってもよい。多くの場合、レジスタセットは、実行ユニットを有するダイ上に物理的に位置し得る。複数のレジスタは、プロセッサの外側またはプログラマの視野から可視であり得る。例えば、複数の命令は、複数のレジスタ内に格納された複数のオペランドを指定し得る。本明細書において説明されるデータを格納および提供することが可能である限りにおいて、様々な異なるタイプのレジスタは、好適である。複数のレジスタは、名前を変更することができ、またはできないことがある。好適な複数のレジスタの例としては、専用物理レジスタ、レジスタリネームを用いて動的に割り当てられる物理レジスタ、専用レジスタおよび動的に割り当てられる物理レジスタの組み合わせ等が挙げられるが、これらに限定されるものではない。あるいは、ソースおよび複数のデスティネーションオペランドの１または複数は、例えば、システムメモリの位置等、レジスタ以外の格納位置に格納され得る。
【００１７】
一実施形態によれば、実行ユニット１０２は、命令デコーダ１０１により受信および提供される第１の命令に応答して、１または複数のレジスタ１０４（例えば、少なくとも１２８ビットを有するレジスタ）において指定される複数のＳＨＡ１状態、複数のメッセージ入力、およびハッシュ関数等のデータ１１０を用いて、複数のＳＨＡ１ラウンドオペレーションの複数のラウンドを実行する、１または複数のＳＨＡ１ユニット１０６を含む。複数のＳＨＡ１ラウンドオペレーションの複数のラウンドは、単一命令多重データ（ＳＩＭＤ）命令に応答して実行される。一実施形態において、第１の命令は、３つのオペランドを含む。第１のオペランドは、現在のイテレーションの５つのＳＨＡ１状態のうち４つ（例えば、Ａ、Ｂ、Ｃ、およびＤ）、および複数のＳＨＡ１ラウンドオペレーションの結果としての次のイテレーションのＳＨＡ１状態を格納する、ソース／デスティネーションレジスタを表す。第２のオペランドは、複数のラウンドオペレーションに対する複数のメッセージ入力、および複数のＳＨＡ１状態の５番目（例えば状態Ｅ）を格納する、レジスタ／メモリを表す。第３のオペランドは、図１Ｂに示される、複数のラウンドオペレーションのために用いられる複数のハッシュ関数のうちの１つ等、ハッシュ関数を表す。複数のＳＨＡ１ラウンドオペレーションが実行された後、複数のＳＨＡ１状態が更新され、第１のオペランドにより指定されたレジスタに再度格納される。一実施形態において、複数のＳＨＡ１ラウンドオペレーションのうち少なくとも４つのラウンドが、１つのＳＩＭＤ命令に応答して実行され、関連する複数のレジスタは、複数のＳＨＡ１状態変数およびメッセージ入力を格納するべく、少なくとも１２８ビットを有する。
【００１８】
別の実施形態によれば、ＳＨＡ１ユニット１０６は、第２の命令に応答して、ＳＨＡ１メッセージスケジューリングオペレーションを実行し、次のイテレーションまたはサイクルに対する複数のメッセージ入力（例えば、次のＳＩＭＤ命令サイクルにおける複数のＳＨＡ１ラウンドオペレーション）を生成するように構成される。一実施形態において、次のＳＩＭＤサイクルに対する複数のメッセージ入力を準備するべく必要とされる２つの命令が存在することがある。複数のＳＨＡ１ラウンドオペレーションのうち少なくとも４つのラウンドをサポートするときに、第１の命令は、少なくとも８つの先行するメッセージ入力を格納する２つのオペランドを含み、第１の命令が実行された後、中間結果が生成され、複数のオペランドのうちの１つにおいて指定されたレジスタに戻る。第２の命令は、第１の命令から生成された中間結果を、４つの他のメッセージ入力と組み合わせた１つのオペランドにおける入力とみなす。第２の命令の別のオペランドは、少なくとも４つの先行するメッセージ入力を指定する。最終結果は、次のＳＩＭＤサイクルに対する４つのメッセージ入力を表す。一実施形態において、複数のメッセージスケジューリングオペレーションに関連する複数のレジスタは、少なくとも１２８ビットを有する。本願全体を通して、ｘｍｍレジスタは、１２８ビットレジスタの一例として利用される。
【００１９】
図示の目的のために、１つのＳＩＭＤサイクルにおいて、複数のＳＨＡ１ラウンドオペレーションのうち４つのラウンドが実行されるものと仮定される。また、十分なビットを有するレジスタ等、要求される複数のリソースが利用可能である限り、複数のＳＨＡ１ラウンドオペレーションのうちより多いか、またはより少ないラウンドが、１つのＳＩＭＤサイクルにおいて実行され得ることが理解されるであろう。いくつかの実施形態によれば、本発明の複数の実施形態は、５つのＳＨＡ１状態（例えば、Ａ、Ｂ、Ｃ、およびＤ）のうち４つを格納するソース／デスティネーションオペランドとして、ＸＭＭ  ＳＩＭＤレジスタを利用する新しい命令およびデータパスを含む。ここで、ＸＭＭ  ＳＩＭＤレジスタは、１２８ビットを有し、カリフォルニア州サンタクララのインテル（登録商標）株式会社のＡＶＸプロセッサと互換性がある。別のｘｍｍレジスタまたはメモリ位置は、（図１Ｃに示されるように）次の４つのＳＨＡ１ラウンドに対する複数のメッセージ入力と複数の定数Ｋ値を、残余のＳＨＡ１状態（例えば状態Ｅ）と組み合わせて格納する第２のソースオペランドとして利用される。図１Ｂに示されるように、直近のオペランドは、複数のラウンド１〜２０、２１〜４０、４１〜６０、および６１〜８０のために要求される異なる組み合わせの論理関数「Ｆ」を指定するべく用いられる。
【００２０】
一実施形態によれば、本明細書においてＳＨＡ１ＲＮＤＳ４（ＳＨＡ１  ４  ｒｏｕｎｄｓ）として言及されるＳＨＡ１ラウンド命令は、以下のように定義され得る。
ＳＨＡ１ＲＮＤＳ４  ＸＭＭ０，ＸＭＭ１，ｉｍｍ
図１Ｂおよび１Ｃに示されるように、即値ｉｍｍは、様々なラウンドに用いられる論理関数Ｆの定義、およびＳＨＡ１ラウンド処理において消費される前に、スケジューリングメッセージ語に加算される定数Ｋを指定する。
【００２１】
ＸＭＭ０は、ソース／デスティネーションレジスタである。入力として、ＸＭＭ０は、現在ラウンドの状態Ａｎ、Ｂｎ、Ｃｎ、およびＤｎを格納し、出力として、ＸＭＭ０は、４つのラウンドの後の状態Ａｎ＋４、Ｂｎ＋４、Ｃｎ＋４、およびＤｎ＋４を格納する。一実施形態において、ＸＭＭ０は、以下のように定義される。
ＸＭＭ０［１２７：９６］＝Ａ
ＸＭＭ０［９５：６４］＝Ｂ
ＸＭＭ０［６３：３２］＝Ｃ
ＸＭＭ０［３１：０］＝Ｄ
【００２２】
ＸＭＭ１は、複数のメッセージ入力、定数、および状態Ｅを格納するソースレジスタである。一実施形態において、ＸＭＭ１は以下のように定義され、
ＸＭＭ１［１２７：９６］＝ＫＷ３
ＸＭＭ０［９５：６４］＝ＫＷ２
ＸＭＭ０［６３：３２］＝ＫＷ１  ＸＭＭ０［３１：０］＝ＫＷ０＋Ｅ
式中、ＫＷ３、ＫＷ２、ＫＷ１、およびＫＷ０は、複数のＳＨＡ１スケジューリングオペレーションにより算出される。
【００２３】
一実施形態において、状態Ｅは、状態Ａ：Ｅｎ＋４＝Ａｎ＜＜＜３０を循環させることにより、先行するサイクルの状態Ａに基づいて算出され、演算子＜＜＜は、ｒｏｔａｔｅ―ｌｅｆｔ演算子を表す。これは、以下に定義される別の命令ＳＨＡ１ＮＥＸＴ＿Ｅにより実行し得、
ＳＨＡ１ＮＥＸＴ＿Ｅ  ＸＭＭ０，ＸＭＭ１
式中、ＸＭＭ０［３１：０］＝ＸＭＭ１［１２７：９６］＜＜＜３０およびＸＭＭ０［１２７：３２］＝０である。図３は、上記のＳＨＡ１ラウンド処理を図示するブロック図である。本願全体を通して、ＸＭＭ［ｙｙｙ，ｘｘｘ］のフォーマットは、レジスタＸＭＭのビット「ｘｘｘ」からビット「ｙｙｙ」を包括的に指すことに留意されたい。
【００２４】
我々が３つのサイクルのパイプラインレイテンシを用いる命令により４つのラウンドを処理する場合、０．７５サイクル／ラウンド（８０ｘ０．７５）／６４＝０．９４サイクル／バイトの性能を実現し得る。ブロックサイズは、６４バイトであり、ラウンドの数は、８０である。この性能を実現するには、我々は、複数のメッセージスケジューリング計算を保持し、これらに対する複数の新しい命令も要求する必要がある。一実施形態によれば、ＳＨＡ１  ｗ［ｉ］関数のメッセージスケジューリングは、以下の複数の命令により実行され得る。
ＭＳＧ１ＳＨＡ１  ＸＭＭ０，ＸＭＭ１
ＶＰＸＯＲ  ＸＭＭ０，ＸＭＭ１
ＭＳＧ２ＳＨＡ１
ＸＭＭ０，ＸＭＭ１
【００２５】
一実施形態において、ＭＳＧ１  ＳＨＡ１は、以下の複数のオペレーションを実行する。
ＸＭＭ０［３１：０］＝Ｗｏｒｄ０＝ｗ［ｉ−１２］ＸＯＲ  ｗ［ｉ−１６］
ＸＭＭ０［６３：３２］＝Ｗｏｒｄ１＝ｗ［ｉ−１１］ＸＯＲ  ｗ［ｉ−１５］
ＸＭＭ０［９５：６４］＝Ｗｏｒｄ２＝ｗ［ｉ−１０］ＸＯＲ  ｗ［ｉ−１４］
ＸＭＭ０［１２７：９６］＝Ｗｏｒｄ３＝ｗ［ｉ−９］ＸＯＲ  ｗ［ｉ−１３］
ＸＭＭ０は、ソース／デスティネーションレジスタである。ソースとして、ＸＭＭ０は、以下のように定義され得る。
ＸＭＭ０［３１：０］＝ｗ［ｉ−１６］
ＸＭＭ０［６３：３２］＝ｗ［ｉ−１５］
ＸＭＭ０［９５：６４］＝ｗ［ｉ−１４］
ＸＭＭ０［１２７：９６］＝ｗ［ｉ−１３］
ＸＭＭ１は、以下のように定義されるソースレジスタである。
ＸＭＭ１［３１：０］＝ｗ［ｉ−１２］
ＸＭＭ１［６３：３２］＝ｗ［ｉ−１１］
ＸＭＭ１［９５：６４］＝ｗ［ｉ−１０］
ＸＭＭ１［１２７：９６］＝ｗ［ｉ−１９］
【００２６】
ＶＰＸＯＲは、ＸＭＭ１の対応する複数のデータ要素を用いて、ＸＭＭ０の複数のデータ要素で複数のＸＯＲオペレーションを実行し、ＸＭＭ０にＸＯＲの結果を再度格納する、ベクトルＸＯＲ命令である。一実施形態において、ＶＰＸＯＲは、以下の複数のオペレーションを実行する。
ｍｏｄｉｆｉｅｄ  ＭＳＧ１Ｗｏｒｄ０＝ＭＳＧ１Ｗｏｒｄ０  ＸＯＲ  ｗ［ｉ−８］
ｍｏｄｉｆｉｅｄ  ＭＳＧ１Ｗｏｒｄ０＝ＭＳＧ１Ｗｏｒｄ１  ＸＯＲ  ｗ［ｉ−７］
ｍｏｄｉｆｉｅｄ  ＭＳＧ１Ｗｏｒｄ０＝ＭＳＧ１Ｗｏｒｄ２  ＸＯＲ  ｗ［ｉ−６］
ｍｏｄｉｆｉｅｄ  ＭＳＧ１Ｗｏｒｄ０＝ＭＳＧ１Ｗｏｒｄ３  ＸＯＲ  ｗ［ｉ−５］
ＭＳＧ１Ｗｏｒｄ０、ＭＳＧ１Ｗｏｒｄ１、ＭＳＧ１Ｗｏｒｄ２、およびＭＳＧ１Ｗｏｒｄ３は、ＭＳＧ１ＳＨＡ１命令により生成され、ソース／デスティネーションレジスタとしてＸＭＭ０内に格納されるが、メッセージ入力ｗ［ｉ−８］〜ｗ［ｉ−５］は、ソースレジスタとしてＸＭＭ１内に格納される。
【００２７】
一実施形態において、ＭＳＧ２ＳＨＡ１は、以下の複数のオペレーションを実行する。
Ｗｏｒｄ０＝ｗ［ｉ］＝（ｗ［ｉ−３］ＸＯＲ  ｍｏｄｉｆｉｅｄ  ＭＳＧ１Ｗｏｒｄ０）＜＜＜１
Ｗｏｒｄ１＝ｗ［ｉ＋１］＝（ｗ［ｉ−２］  ＸＯＲ  ｍｏｄｉｆｉｅｄ  ＭＳＧ１Ｗｏｒｄ１）＜＜＜１
Ｗｏｒｄ２＝ｗ［ｉ＋２］＝（ｗ［ｉ−１］  ＸＯＲ  ｍｏｄｉｆｉｅｄ  ＭＳＧ１Ｗｏｒｄ２）＜＜＜１
Ｗｏｒｄ３＝ｗ［ｉ＋３］＝（ｗ［ｉ］ＸＯＲ  ｍｏｄｉｆｉｅｄ  ＭＳＧ１Ｗｏｒｄ３）＜＜＜１
【００２８】
Ｗｏｒｄ３のｗ［ｉ］入力は、ｗｏｒｄ０の結果であることに留意されたい。従って、Ｗｏｒｄ０とＷｏｒｄ３の計算の間のいくつかの遅延が必要とされることがある。
【００２９】
ＭＳＧ２ＳＨＡ１に対しては、ＸＭＭ０は、ソース／デスティネーションレジスタであり、ＸＭＭ１は、ソースレジスタである。一実施形態において、ソースとして、ＸＭＭ０は以下のようにと定義される。
ＸＭＭ０［３１：０］＝ｍｏｄｉｆｉｅｄ  ＭＳＧ１  Ｗｏｒｄ０＝ＭＳＧ１  Ｗｏｒｄ０  ＸＯＲ  ｗ［ｉ−８］
ＸＭＭ０［６３：３２］＝ｍｏｄｉｆｉｅｄ  ＭＳＧ１Ｗｏｒｄ０＝ＭＳＧ１Ｗｏｒｄ１  ＸＯＲ  ｗ［ｉ−７］
ＸＭＭ０［９５：６４］＝ｍｏｄｉｆｉｅｄ  ＭＳＧ１Ｗｏｒｄ０＝ＭＳＧ１Ｗｏｒｄ２  ＸＯＲ  ｗ［ｉ−６］
ＸＭＭ０［１２７：９６］＝ｍｏｄｉｆｉｅｄ  ＭＳＧ１Ｗｏｒｄ０＝ＭＳＧ１Ｗｏｒｄ３  ＸＯＲ  ｗ［ｉ−５］
ソースとして、ＸＭＭ１は、以下のように定義される。
ＸＭＭ１［３１：０］＝ｗ［ｉ−３］
ＸＭＭ１［６３：３２］＝ｗ［ｉ−２］
ＸＭＭ１［９５：６４］＝ｗ［ｉ−１］
ＸＭＭ１［１２７：９６］＝ｗ［ｉ］
ＭＳＧ１Ｗｏｒｄ０からＭＳＧ１Ｗｏｒｄ３は、ＭＳＧ１ＳＨＡ１命令により生成され、ｍｏｄｉｆｉｅｄ  ＭＳＧ１Ｗｏｒｄ０からＭＳＧ１Ｗｏｒｄ３は、ＭＳＧ２ＳＨＡ１命令を呼び出す前にＶＰＸＯＲ命令を用いて生成され得る。
【００３０】
図４は、一実施形態による複数のＳＨＡ１オペレーションのパイプライン処理を図示するブロック図である。図４を参照すると、処理の実施形態は、プロセッサまたはプロセッサコアの少なくとも３つのパイプラインステージ４０１〜４０３を用いて定義され得る。パイプラインステージ４０１〜４０３は、プロセッサの特定の設計または構成に依存する連続したパイプラインステージであってもよく、またはそうでなくともよいことに留意されたい。ＭＳＧ１ＳＨＡ１マイクロコード４０４、ＭＳＧ２ＳＨＡ１マイクロコード４０５、およびＳＨＡ１ラウンドマイクロコード４０６は、図２のＳＨＡ１ユニット１０６の一部として実装されてもよい。一実施形態において、ＳＨＡ１ラウンドマイクロコード４０６は、図３のロジック３００の一部として実装されてもよい。
【００３１】
一実施形態によれば、命令ＭＳＧ１ＳＨＡ１に応答して、ＭＳＧ１ＳＨＡ１マイクロコード４０４は、上記の複数のＳＨＡ１メッセージスケジューリングオペレーションのうち第１の部分を実行する。複数のＳＨＡ１ラウンドオペレーションの所与のラウンドｉについて、パイプラインステージ４０１の間に、ＭＳＧ１ＳＨＡ１マイクロコード４０４は、複数のメッセージスケジューリングオペレーションのうち第１の部分を、すでに生成された複数のメッセージ４０７〜４０８に実行し、中間メッセージ４０９を生成する。
【００３２】
一実施形態によれば、命令ＭＳＧ２ＳＨＡ１に応答して、ＭＳＧ２ＳＨＡ１マイクロコード４０５は、上記の複数のＳＨＡ１メッセージスケジューリングオペレーションのうち第２の部分を実行する。複数のＳＨＡ１ラウンドオペレーションの所与のラウンドｉについて、パイプラインステージ４０２の間に、ＭＳＧ２ＳＨＡ１マイクロコード４０５は、すでに生成されたメッセージ４１０と、中間メッセージ４０９と、複数のメッセージ入力４１１（ＶＰＸＯＲ等の別の命令を用いて組み合わされ得る）において、複数のメッセージスケジューリングオペレーションのうち第２の部分を実行し、メッセージ４１２を生成する。
【００３３】
一実施形態によれば、命令ＳＨＡ１ＲＮＤＳ４および／またはＳＨＡ１ＮＥＸＴ＿Ｅに応答して、ＳＨＡ１ＲＮＤＳ４マイクロコード４０６は、上記の複数のＳＨＡ１ラウンドオペレーションのうち４つのラウンドを実行する。複数のＳＨＡ１ラウンドオペレーションの所与のラウンドｉについて、パイプラインステージ４０３の間に、ＳＨＡ１ＲＮＤＳ４マイクロコード４０６は、複数のメッセージ４１２および現在の複数のＳＨＡ１状態４１３においてラウンドオペレーションを実行し、次のラウンドまたはイテレーションに対する複数のＳＨＡ１状態４１４を生成する。この例において、レジスタ４１２に格納されるｗ（ｉ＋３）、ｗ（ｉ＋２）、ｗ（ｉ＋１）、およびｗ（ｉ）のそれぞれは、３２ビットを有することに留意されたい。これは、複数のＳＨＡ１ラウンドオペレーションのうち少なくとも４つのラウンドを実行するべく用いられ得る。また、パイプラインレイテンシ要件が満たされ得る限り、レジスタ４１２がより多くのメッセージ入力を格納し得るとき、複数のＳＨＡ１ラウンドオペレーションのうちより多くのラウンドが実行され得る。
【００３４】
図５は、一実施形態による複数のＳＨＡ１ラウンドオペレーションを実行する方法を図示するフロー図である。方法５００は、図２のプロセッサ１００により実行され得る。図５を参照すると、ブロック５０１で、命令（例えば、ＳＨＡ１ＲＮＤＳ４）がプロセッサにおいて受信される。命令はそれぞれ、少なくとも１２８ビットを有する３つのオペランドを含む。ブロック５０２で、４つのＳＨＡ１状態は、第１のオペランド（例えば、ＸＭＭ０）により示される格納位置から得られる。４つのメッセージ入力（例えば、ＫＷ０からＫＷ３）および第５のＳＨＡ１状態（例えば、状態Ｅ）は、第２のオペランドにより示される格納位置から得られる。第５のＳＨＡ１状態は、複数のメッセージ入力のうち１つと組み合わされる。ブロック５０３で、複数のＳＨＡ１ラウンドオペレーションのうち少なくとも４つのラウンドは、第３のオペランドにより指定された組み合わせの論理関数を用いて、複数のＳＨＡ１状態および第１および第２のオペランドから得られた複数のメッセージ入力に基づいて実行される。ブロック５０４で、複数のラウンドオペレーション（例えば、複数の新しいＳＨＡ１状態）の結果は、第１のオペランドに関連する格納位置に格納される。一実施形態において、状態Ａ〜Ｄのみが第１のオペランド内に格納され、状態Ｅは、上記のＥｎ＋４＝Ａ  ｎ＜＜＜３０として得ることができる。
【００３５】
図６は、一実施形態による複数のＳＨＡ１メッセージスケジューリングオペレーションを実行する方法を図示するフロー図である。方法６００は、図２のプロセッサ１００により実行され得る。図６を参照すると、ブロック６０１で、ＳＨＡ１メッセージスケジューリングオペレーションを実行する命令（例えば、ＭＳＧＩＳＨＡ１）が受信される。命令は、第１および第２のオペランド（例えば、ＸＭＭ０、ＸＭＭ１）を含み、それぞれは、少なくとも１２８ビットを有する格納位置を参照する。ブロック６０２で、複数のメッセージ入力（例えば、８つのメッセージ入力）は、第１および第２のオペランドにより示される複数の格納位置から得られる。ブロック６０３で、複数のＳＨＡ１メッセージスケジューリングオペレーションのうち第１の部分は、第１および第２のオペランドから得られる複数のメッセージ入力に基づいて実行される。ブロック６０４で、中間結果は、第１のオペランド（例えば、ＸＭＭ０）に関連する格納位置に格納される。
【００３６】
図７は、一実施形態による複数のＳＨＡ１メッセージスケジューリングオペレーションを実行する方法を図示するフロー図である。方法７００は、図２のプロセッサ１００により実行され得る。図７を参照すると、ブロック７０１で、複数のＳＨＡ１メッセージスケジューリングオペレーションを実行する命令（例えば、ＭＳＧ２ＳＨＡ１）が受信される。命令は、２つのオペランドを含み、それぞれは、少なくとも１２８ビットを有する格納位置を参照する。ブロック７０２で、複数のＳＨＡ１メッセージスケジューリングオペレーションのうち第１の部分の中間結果は、第１のオペランドに関連する格納位置から得られる。中間結果は、ＭＳＧ１ＳＨＡ１命令により生成され、４つのメッセージ入力（例えば、ｗ（ｉ−５）からｗ（ｉ−８））との排他的論理和をとる。他の４つのメッセージ入力（例えば、ｗ（ｉ）からｗ（ｉ−３））は、第２のオペランドに関連する格納位置から得られる。ブロック７０３で、複数のＳＨＡ１メッセージスケジューリングオペレーションのうち第２の部分が実行される。ブロック７０４で、次のサイクルのメッセージ入力（例えば、ｗ（ｉ）からｗ（ｉ＋３））を表す最終結果は、第１のオペランド（例えば、ＸＭＭ０）に関連する格納位置に格納される。図８は、一実施形態による、上記の命令セットを用いる複数のＳＨＡ１オペレーション用の疑似コードである。
【００３７】
命令セットまたは命令セットアーキテクチャ（ＩＳＡ）は、プログラミングに関連するコンピュータアーキテクチャの一部であり、複数のネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレスモード、メモリアーキテクチャ、割り込みおよび例外処理、ならびに外部入力および出力（Ｉ／Ｏ）を含み得る。一般に、命令という用語は、本明細書においてマクロ命令を指す。マクロ命令は、複数のマクロ命令をデコードするプロセッサのデコーダの結果であるマイクロ命令またはマイクロオペレーション（マイクロオペ）とは異なり、実行のためにプロセッサ（または（例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて）命令をプロセッサにより処理される１または複数の他の命令にトランスレート、モーフィング、エミュレート、または変換する命令変換器）に提供される複数の命令である。
【００３８】
ＩＳＡは、命令セットを実装するプロセッサの内部設計であるマイクロアーキテクチャとは区別される。複数の異なるマイクロアーキテクチャを有するプロセッサは、共通の命令セットを共有し得る。例えば、インテル（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、インテル（登録商標）Ｃｏｒｅ（商標）プロセッサ、カリフォルニア州サニーベールのアドバンストマイクロデバイセズ株式会社のプロセッサは、ほぼ同一のバージョンのｘ８６命令セット（複数のより新しいバージョンを追加されたいくつかの拡張を伴う）を実装するが、複数の異なる内部設計を有する。例えば、ＩＳＡの同一のレジスタアーキテクチャは、複数の専用物理レジスタ、レジスタリネームメカニズム（例えば、レジスタエイリアステーブル（ＲＡＴ）の使用、リオーダバッファ（ＲＯＢ）、およびリタイアメントレジスタファイル、複数のレジスタの複数のマップおよびプールの使用）等を用いる１または複数の動的に割り当てられる物理レジスタ、を含む複数の周知技術を用いて、異なる形で複数の異なるマイクロアーキテクチャに実装され得る。指定されない限り、レジスタアーキテクチャ、レジスタファイル、およびレジスタという文言は、どの複数の命令が複数のレジスタを指定するように、ソフトウェア／プログラマに可視であるものを言及するべく本明細書において用いられる。特定性が所望である場合、論理の、アーキテクチャの、または可視のソフトウェアという形容詞が、レジスタアーキテクチャにおける複数のレジスタ／ファイルを示すべく用いられるが、複数の異なる形容詞は、所与のマイクロアーキテクチャ（例えば、物理レジスタ、リオーダバッファ、リタイアメントレジスタ、レジスタプール）における複数の指定レジスタに対して用いられる。
【００３９】
命令セットは、１または複数の命令のフォーマットを含む。所与の命令フォーマットは、とりわけ、実行されるオペレーション（オペコード）および当該オペレーションが実行されるオペランドを指定する様々なフィールド（ビット数、複数のビットの位置）を定義する。いくつかの命令フォーマットは、複数の命令テンプレート（または、サブフォーマット）の定義により更に分類される例えば、所与の命令フォーマットの複数の命令テンプレートは、複数の命令フォーマットフィールドの複数の異なるサブセット（通常、含まれる複数のフィールドは、同一の順序であるが、より少ないフィールドが含まれるため、少なくともいくつかは、複数の異なるビット位置を有する）を有するものと定義されてもよく、および／または異なるように解釈される所与のフィールドを有するものと定義されてもよい。従って、ＩＳＡの各命令は、所与の命令フォーマットを用いて表され（定義される場合、当該命令フォーマットの複数の命令テンプレートのうち所与の１つで）、オペレーションおよび複数のオペランドを指定する複数のフィールドを含む。例えば、例示的なＡＤＤ命令は、特定のオペコード、ならびに当該オペコードを指定するオペコードフィールドおよび複数のオペランド（ソース１／デスティネーション、およびソース２を選択する複数のオペランドフィールドを含む命令フォーマットを有する。命令ストリームにおけるこのＡＤＤ命令が生じることにより、複数の特定のオペランドを選択する複数のオペランドフィールドに特定の複数のコンテンツを有する。
【００４０】
多くの場合、サイエンティフィック、金融的、自動ベクトル化した汎用、ＲＭＳ（認識、マイニング、および合成）、ならびに視覚およびマルチメディアのアプリケーション（例えば、２Ｄ／３Ｄグラフィックス、画像処理、映像圧縮／復元、音声認識のアルゴリズムおよびオーディオ操作）は、多数のデータアイテム（「データ並列性」と呼ばれる）に実行される同一のオペレーションを要求する。単一命令多重データ（ＳＩＭＤ）は、プロセッサに複数のデータアイテムにオペレーションを実行させるタイプの命令を指す。ＳＩＭＤ技術は、レジスタにおける複数のビットをいくつかの固定サイズのデータ要素に論理的に分割し、固定サイズのデータ要素のそれぞれが別個の値を表す複数のプロセッサに特に好適である。例えば、２５６ビットレジスタにおける複数のビットは、４つの別個の６４ビットパックドデータ要素（クワッドワード（Ｑ）サイズのデータ要素）、８つの別個の３２ビットパックドデータ要素（倍長語（Ｄ）サイズのデータ要素）、別個の１６ビットパックドデータ要素（ワード（Ｗ）サイズのデータ要素）、または３２の別個の８ビットデータ要素（バイト（Ｂ）サイズのデータ要素）として実行されるソースオペランドとして指定されてもよい。このタイプのデータは、パックドデータタイプまたはベクトルデータタイプと呼ばれ、このデータタイプの複数のオペランドは、パックドデータオペランドまたはベクトルオペランドと呼ばれる。換言すると、パックドデータアイテムまたはベクトルは、複数のパックドデータ要素のシーケンスを指し、パックドデータオペランドまたはベクトルオペランドは、ＳＩＭＤ命令（パックドデータ命令またはベクトル命令としても知られる）のソースまたはデスティネーションオペランドである。
【００４１】
例として、１つのタイプのＳＩＭＤ命令は、２つのソースベクトルオペランドに垂直な様式で実行される１つのベクトルオペレーションを指定し、同一の数の複数のデータ要素を有し、同一のデータ要素の順序の同一のサイズのデスティネーションベクトルオペランド（結果として、ベクトルオペランドとも呼ばれる）を生成する。複数のソースベクトルオペランドにおける複数のデータ要素は、ソースデータ要素と呼ばれるが、デスティネーションベクトルオペランドにおける複数のデータ要素は、デスティネーションまたは結果データ要素と呼ばれる。これらのソースベクトルオペランドは、同一のサイズであり、同一の幅の複数のデータ要素を含み、従って同一の数の複数のデータ要素を含む。２つのソースベクトルオペランドの同一の複数のビット位置における複数のソースデータ要素は、データ要素のペア（対応するデータ要素とも呼ばれる。つまり、各ソースオペランドのデータ要素位置０におけるデータ要素が対応し、各ソースオペランドのデータ要素位置１におけるデータ要素が対応する等）を形成する。当該ＳＩＭＤ命令により指定されるオペレーションは、これらのペアのソースデータ要素のそれぞれに別個に実行され、複数の結果データ要素の一致する数を生成し、従って各ペアのソースデータ要素は、対応する結果データ要素を有する。オペレーションは垂直であり、結果ベクトルオペランドは同一のサイズであり、同一の数の複数のデータ要素を有し、複数の結果データ要素は、同一のデータ要素の順序で複数のソースベクトルオペランドとして格納されるので、複数の結果データ要素は、複数のソースベクトルオペランドにおける対応するペアのソースデータ要素として、結果ベクトルオペランドの複数の同一ビット位置に存在する。この例示的タイプのＳＩＭＤ命令に加えて、（例えば、１つのみまたは３つ以上のソースベクトルオペランドを有し、水平な様式で演算し、異なるサイズの結果ベクトルオペランドを生成し、複数の異なるサイズのデータ要素を有し、および／または異なるデータ要素の順序を有する）様々な他のタイプのＳＩＭＤ命令が存在する。デスティネーションベクトルオペランド（またはデスティネーションオペランド）という用語は、ある位置にある当該デスティネーションオペランドのストレージを含む命令（またはその命令により指定されたメモリアドレスにおけるレジスタであっても）により指定されるオペレーションを実行する結果と定義され、別の命令により（別の命令によるその同一の位置の指定により）ソースオペランドとしてアクセスされ得ることを理解されたい。
【００４２】
ｘ８６、ＭＭＸ（商標）、ストリーミングＳＩＭＤ拡張（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１、およびＳＳＥ４．２命令を含む命令セットを有する、複数のインテル（登録商標）Ｃｏｒｅ（商標）プロセッサにより使用されるもの等、ＳＩＭＤ技術は、アプリケーション性能における著しい改善を可能にした。Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ（ＡＶＸ）（ＡＶＸ１およびＡＶＸ２）と呼ばれ、ベクトル拡張（ＶＥＸ）エンコードスキームを用いる追加のセットのＳＩＭＤ拡張が、リリースおよび／または公開されている（例えば、インテル（登録商標）６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒｓ  Ｍａｎｕａｌ，Ｏｃｔｏｂｅｒ  ２０１１およびインテル（登録商標）Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ，Ｊｕｎｅ  ２０１１を参照されたい）。本明細書において説明される命令の複数の実施形態は、複数の異なるフォーマットで実施され得る。更に、例示的な複数のシステム、アーキテクチャ、およびパイプラインが、以下に詳述される。
【００４３】
命令の複数の実施形態は、そのような複数のシステム、アーキテクチャ、およびパイプラインで実行され得るが詳述されるものに限定されるものではない。
【００４４】
ＶＥＸエンコードは、複数の命令が３つ以上のオペランドを有することを可能にし、複数のＳＩＭＤベクトルレジスタが１２８ビットより長くなることを可能にする。ＶＥＸプレフィックスを使用することにより、３つのオペランド（またはそれ以上）による構文を提供する。例えば、先行する２つのオペランドによる複数の命令は、Ａ＝Ａ＋Ｂ等の複数のオペレーションを実行し、これによりソースオペランドを上書きする。ＶＥＸプレフィックスを使用することにより、Ａ＝Ｂ＋Ｃ等の複数の非破壊オペレーションを実行する複数のオペランドをイネーブルにする。
【００４５】
図９Ａは、ＶＥＸプレフィックス２１０２、リアルオペコードフィールド２１３０、Ｍｏｄ  Ｒ／Ｍバイト２１４０、ＳＩＢバイト２１５０、変位フィールド２１６２、およびＩＭＭ８  ２１７２を含む例示的なＡＶＸ命令フォーマット図示する。図９Ｂは、図９Ａのどのフィールドがフルオペコードフィールド２１７４およびベースオペレーションフィールド２１４２を構成するかを図示する。図９Ｃは、図９Ａのどのフィールドがレジスタインデックスフィールド２１４４を構成するかを図示する。
【００４６】
ＶＥＸプレフィックス（バイト０〜２）２１０２は、３バイト形式でエンコードされる。第１のバイトは、フォーマットフィールド２１４０（ＶＥＸバイト０、ビット［７：０］）であり、これは、明示的なＣ４バイト値（Ｃ４命令フォーマットを区別するべく用いられる一意な値）を含む。第２〜第３のバイト（ＶＥＸバイト１〜２）は、特定の能力を提供するいくつかのビットフィールドを含む。具体的には、ＲＥＸフィールド２１０５（ＶＥＸバイト１、ビット［７−５］）は、ＶＥＸ．Ｒビットフィールド（ＶＥＸバイト１、ビット［７］−Ｒ）、ＶＥＸ．Ｘビットフィールド（ＶＥＸバイト１、ビット［６］−Ｘ）、およびＶＥＸ．Ｂビットフィールド（ＶＥＸバイト１、ビット［５］−Ｂ）からなる。複数の命令の他のフィールドは、Ｒｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂがＶＥＸ．Ｒ、ＶＥＸ．Ｘ、およびＶＥＸ．Ｂを加算することにより形成され得るように、当技術分野において既知の複数のレジスタインデックス（ｒｒｒ、ｘｘｘ、およびｂｂｂ）のより小さい３ビットをエンコードする。オペコードマップフィールド２１１５（ＶＥＸバイト１、ビット［４：０］−ｍｍｍｍｍ）は、暗黙に示される先頭オペコードバイトをエンコードするコンテンツを含む。Ｗフィールド２１６４（ＶＥＸバイト２、ビット［７］−Ｗ）は、表記ＶＥＸ．Ｗにより表され、命令に応じて複数の異なる関数を提供する。ＶＥＸ．ｖｖｖｖ２１２０（ＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）の役割は、以下を含み得る。１）ＶＥＸ．ｖｖｖｖは、反転された（１の補数）形式で指定された、第１のソースレジスタオペランドをエンコードし、２またはそれ以上のソースオペランドを用いる複数の命令に対して有効であり、２）ＶＥＸ．ｖｖｖｖは、一定の複数のベクトルシフトに対して１ｓ補数形式で指定されたデスティネーションレジスタオペランドをエンコードし、または３）ＶＥＸ．ｖｖｖｖは、いずれのオペランドもエンコードせず、フィールドは、予約され、１１１ｌｂを含むはずである。ＶＥＸ．Ｌ２１６８サイズフィールド（ＶＥＸバイト２、ビット［２］−Ｌ）＝０である場合、１２８ビットベクトルを示し、ＶＥＸ．Ｌ＝１である場合、２５６ビットベクトルを示す。プレフィックスエンコードフィールド２１２５（ＶＥＸバイト２、ビット［１：０］−ｐｐ）は、ベースオペレーションフィールド用の追加ビットを提供する。
【００４７】
また、リアルオペコードフィールド２１３０（バイト３）は、オペコードバイトとしても知られる。オペコードの一部は、このフィールド内に指定される。ＭＯＤ  Ｒ／Ｍフィールド２１４０（バイト４）は、ＭＯＤフィールド２１４２（ビット［７−６］）、Ｒｅｇフィールド２１４４（ビット［５−３］）、およびＲ／Ｍフィールド２１４６（ビット［２−０］）を含む。Ｒｅｇフィールド２１４４の役割は、デスティネーションレジスタオペランドまたはソースレジスタオペランド（Ｒｒｒｒのｒｒｒ）のいずれかをエンコードすることを含み、オペコード拡張として扱われ、命令オペランドをエンコードするべく用いられなくともよい。Ｒ／Ｍフィールド２１４６の役割は、メモリアドレスを参照する命令オペランドをエンコードし、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードすることを含み得る。
【００４８】
スケール、インデックス、ベース（ＳＩＢ）。スケールフィールド２１５０（バイト５）のコンテンツは、ＳＳ２１５２（ビット［７−６］）を含み、ＳＳ２１５２は、メモリアドレス生成に用いられる。ＳＩＢ．ｘｘｘ２１５４（ビット［５−３］）およびＳＩＢ．ｂｂｂ２１５６（ビット［２−０］）のコンテンツは、レジスタインデックスＸｘｘｘおよびＢｂｂｂに関連してすでに言及された。変位フィールド２１６２および即値フィールド（ＩＭＭ８）２１７２は、アドレスデータを含む。
【００４９】
ベクトル向け命令フォーマットは、複数のベクトル命令に好適な命令フォーマットである（例えば、複数のベクトルオペレーションに固有の一定の複数のフィールドが存在する）。ベクトルおよびスカラオペレーションの双方がベクトル向け命令フォーマットによりサポートされる複数の実施形態が説明されるが、複数の代替的な実施形態は、ベクトル向け命令フォーマットによるベクトルオペレーションのみを用いる。
【００５０】
図１０Ａおよび図１０Ｂは、本発明の複数の実施形態による、一般ベクトル向け命令フォーマット、およびその複数の命令テンプレートを図示するブロック図である。図１０Ａは、本発明の複数の実施形態による、一般ベクトル向け命令フォーマット、およびその複数のクラスＡ命令テンプレートを図示するブロック図である。図１０Ｂは、本発明の複数の実施形態による、一般ベクトル向け命令フォーマット、およびその複数のクラスＢ命令テンプレートを図示するブロック図である。具体的には、一般ベクトル向け命令フォーマット２２００に対して、クラスＡおよびクラスＢ命令のテンプレートが定義され、それら双方は、メモリアクセス２２０５の複数の命令テンプレートおよびメモリアクセス２２２０の複数の命令テンプレートを含まない。ベクトル向け命令フォーマットの文脈における一般という用語は、いずれの特定命令セットにも関係しない命令フォーマットを指す。
【００５１】
ベクトル向け命令フォーマットが、３２ビット（４バイト）または６４ビット（８バイト）のデータ要素幅（またはサイズ）を有する６４バイトのベクトルオペランド長（またはサイズ）（従って、６４バイトのベクトルは、１６倍長ワードサイズの複数の要素、または代替的に８クワッドワードサイズの複数の要素のいずれかからなる）、１６ビット（２バイト）または８ビット（１バイト）のデータ要素幅（またはサイズ）を有する６４バイトのベクトルオペランド長（またはサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）のデータ要素幅（またはサイズ）を有する３２バイトのベクトルオペランド長さ（またはサイズ）、および３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）のデータ要素幅（またはサイズ）を有する１６バイトのベクトルオペランド長（またはサイズ）をサポートする本発明の複数の実施形態が説明されるが、代替的な複数の実施形態は、より多く、より多く、より少なく、または複数の異なるデータ要素幅（例えば、１２８ビット（１６バイト）のデータ要素幅）を有するより少なく、および／または複数の異なるベクトルオペランドサイズ（例えば、２５６バイトのベクトルオペランド）をサポートし得る。
【００５２】
図１０ＡにおけるクラスＡ命令テンプレートは、以下を含む。１）非メモリアクセス２２０５の複数の命令テンプレート内に、非メモリアクセス、フルラウンド制御タイプオペレーション２２１０の命令テンプレート、および非メモリアクセス、データ変換タイプオペレーション２２１５の命令テンプレートが示され、および２）メモリアクセス２２２０の複数の命令テンプレート内に、一時的メモリアクセス２２２５の命令テンプレートおよび非一時的メモリアクセス２２３０の命令テンプレートが示される。図１０Ｂにおける複数のクラスＢ命令テンプレートは、以下を含む。１）非メモリアクセス２２０５の複数の命令テンプレート内に、非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション２２１２の命令テンプレート、およびメモリアクセス、ライトマスク制御、ＶＳＩＺＥタイプオペレーション２２１７の命令テンプレートが示され、および２）メモリアクセス２２２０の複数の命令テンプレート内に、メモリアクセス、ライトマスク制御２２２７の命令テンプレートが示される。
【００５３】
一般ベクトル向け命令フォーマット２２００は、図１０Ａおよび図１０Ｂにおいて図示される順序で、以下に列挙される複数のフィールドを含む。フォーマットフィールド２２４０は、このフィールドにおける特定の値（命令フォーマット識別子の値）であり、ベクトル向け命令フォーマット、従って、複数の命令ストリーム中のベクトル向け命令フォーマットにおける複数の命令の複数の発生を一意に識別する。従って、このフィールドは、一般ベクトル向け命令フォーマットのみを有する命令セット用に必要とされないという意味で任意選択である。ベースオペレーションフィールド２２４２のコンテンツは、複数の異なるベースオペレーションを区別する。
【００５４】
レジスタインデックスフィールド２２４４のコンテンツは、複数のレジスタ内であれ、メモリ内であれ、直接に、またはアドレス生成により、ソースの複数の位置および複数のデスティネーションオペランドを指定する。これらは、十分な数のビットを含み、ＰｘＱ（例えば、３２ｘ５１２、１６ｘ１２８、３２ｘ１０２４、６４ｘ１０２４）レジスタファイルのＮのレジスタを選択する。一実施形態において、Ｎは、最大３つのソースおよび１つのデスティネーションレジスタであり得るが、代替的な複数の実施形態において、それより多いか、または少ない複数のソースおよびデスティネーションレジスタをサポートし得る（例えば、最大２つのソースをサポートし得、その場合にこれらのソースのうち１つは、デスティネーションとしても機能し、最大３つのソースをサポートし得、その場合にこれらのソースのうち１つは、デスティネーションとしても機能し、最大２つのソースおよび１つのデスティネーションをサポートし得る）。
【００５５】
修飾子フィールド２２４６のコンテンツは、メモリアクセスを指定する一般ベクトル命令フォーマット中の複数の命令の複数の発生とメモリアクセスを指定しないものとを、すなわち、非メモリアクセス２２０５の複数の命令テンプレートとメモリアクセス２２２０の複数の命令テンプレートを区別する。複数のメモリアクセスオペレーションは、メモリ階層を読み取り、および／またはこれに書き込むが（いくつかの場合には、複数のレジスタにおける複数の値を用いて、ソースアドレスおよび／またはデスティネーションアドレスを指定する）、複数の非メモリアクセスオペレーションは、これを行わない（例えば、ソースおよびデスティネーションは、レジスタではない）。また、一実施形態において、このフィールドは、３つの異なる様式のうちで選択し、複数のメモリアドレス算出を実行するが、代替的な複数の実施形態は、より多く、より少なく、または複数の異なる様式をサポートし、複数のメモリアドレス算出を実行し得る。
【００５６】
増加オペレーションフィールド２２５０のコンテンツは、ベースオペレーションに加えて、様々な異なるオペレーションのうちどちらが実行されるかを区別する。このフィールドは、コンテキスト固有である。本発明の一実施形態において、このフィールドは、クラスフィールド２２６８、アルファフィールド２２５２、およびベータフィールド２２５４に分割される。増加オペレーションフィールド２２５０は、複数のオペレーションの共通グループが２、３、または４つの命令ではなく、１つの命令で実行されることを可能にする。スケールフィールド２２６０のコンテンツは、メモリアドレス生成用の（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅを用いるアドレス生成用の）インデックスフィールドのコンテンツのスケーリングを可能にする。
【００５７】
変位フィールド２２６２Ａのコンテンツは、メモリアドレス生成の一部として（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅ＋ｄｉｓｐｌａｃｅｍｅｎｔを用いるアドレス生成のために）用いられる。変位係数フィールド２２６２Ｂ（変位係数フィールド２２６２Ｂのすぐ上に変位フィールド２２６２Ａを並置することにより、一方または他方が使用されることを示すことに留意されたい）のコンテンツは、アドレス生成の一部として用いられる。変位係数フィールド２２６２Ｂは、メモリアクセス（Ｎ）のサイズに比例して描写される変位係数を指定する。Ｎは、（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅ＋ｓｃａｌｅｄ  ｄｉｓｐｌａｃｅｍｅｎｔを用いるアドレス生成用の）メモリアクセスにおけるバイトの数である。有効なアドレスを算出するときに使用される最終的変位を生成するべく、複数の冗長下位ビットは、無視され、従って、変位係数フィールドのコンテンツは、複数のメモリオペランドの合計サイズ（Ｎ）で乗算される。Ｎの値は、フルオペコードフィールド２２７４（本明細書において後に説明される）およびデータ操作フィールド２２５４Ｃに基づくランタイム時にプロセッサハードウェアにより決定される。変位フィールド２２６２Ａおよび変位係数フィールド２２６２Ｂは、非メモリアクセス２２０５の複数の命令テンプレートに用いられず、および／または複数の異なる実施形態が１つのみまたは２つのうちいずれも実装しないことがあるという意味で任意選択である。
【００５８】
データ要素幅フィールド２２６４のコンテンツは、（いくつかの実施形態において全ての命令に対して、他の複数の実施形態において複数の命令のうちいくつかのみについて）いくつかのデータ要素幅のうちどちらが用いられるかを区別する。このフィールドは、複数のオペコードのいくつかの態様を用いて、１つのデータ要素幅のみがサポートされ、および／または複数のデータ要素幅がサポートされる場合には必要とされないという意味で任意選択である。
【００５９】
ライトマスクフィールド２２７０のコンテンツは、データ要素位置ベースで、デスティネーションベクトルオペランドにおける当該データ要素位置が、ベースオペレーションおよび増加オペレーションの結果を反映しているか否かを制御する。複数のクラスＡ命令テンプレートは、マージングとライトマスキングをサポートするが、複数のクラスＢ命令テンプレートは、マージングとゼロイング・ライトマスキングの双方をサポートする。マージングする場合、複数のベクトルマスクは、デスティネーションにおける要素の任意のセットが（ベースオペレーションおよび増加オペレーションにより指定された）任意のオペレーションを実行する間に複数の更新から保護されることを可能にし、他の一実施形態において、対応するマスクビットが０を有するデスティネーションの各要素における古い値を保存する。対照的に、ゼロイングする場合、複数のベクトルマスクは、デスティネーションにおける要素の任意のセットが（ベースオペレーションおよび増加オペレーションにより指定された）任意のオペレーションを実行する間にゼロイングされることを可能にし、一実施形態において、対応するマスクビットが０の値を有する場合に、デスティネーションの要素は、０に設定される。この機能性のサブセットは、実行されるオペレーションのベクトル長を制御することができるが（つまり、最初から最後のものまでの修飾される複数の要素のスパン）、修飾される複数の要素が連続していることは、必要ではない。このように、ライトマスクフィールド２２７０は、ロード、ストア、算術、論理等を含む、複数の部分的ベクトルオペレーションを可能にする。ライトマスクフィールド２２７０のコンテンツが、用いられるライトマスクを含むいくつかのライトマスクレジスタのうち１つを選択する（従って、ライトマスクフィールド２２７０のコンテンツは、実行される当該マスキングを間接的に識別する）本発明の複数の実施形態が、説明されるが、代替的な複数の実施形態は、これに代えて、または更にライトマスクフィールド２２７０のコンテンツが実行されるマスキングを直接に指定することを可能にする。
【００６０】
即値フィールド２２７２のコンテンツは、即値の仕様を可能にする。このフィールドは、即値をサポートしない一般ベクトル向け命令フォーマットの実装において存在せず、即値を用いない複数の命令中に存在しないという意味で任意選択である。クラスフィールド２２６８のコンテンツは、複数の命令の複数の異なるクラスを区別する。図１０Ａおよび図１０Ｂを参照すると、このフィールドの複数のコンテンツは、クラスＡ命令およびクラスＢ命令から選択される。図１０Ａおよび図１０Ｂにおいて、角が丸められた複数の四角形は、特定の値がフィールド内に存在することを示すべく用いられる（例えば、図１０Ａおよび図１０Ｂにおけるクラスフィールド２２６８のクラスＡ２２６８ＡおよびクラスＢ２２６８Ｂのそれぞれ）。
【００６１】
クラスＡの非メモリアクセス２２０５の複数の命令テンプレートの場合、アルファフィールド２２５２は、ＲＳフィールド２２５２Ａとして解釈され、そのコンテンツは、複数の異なる増加オペレーションタイプのうちどちらが実行されるかを区別し（例えば、ラウンド２２５２Ａ．１およびデータ変換２２５２Ａ．２は、それぞれ、非メモリアクセス、ラウンドタイプオペレーション２２１０、および非メモリアクセス、データ変換タイプオペレーション２２１５の複数の命令テンプレート）に対して指定されるが、ベータフィールド２２５４は、指定されるタイプの複数のオペレーションのうちいずれが実行されるかを区別する。非メモリアクセス２２０５の複数の命令テンプレートにおいて、スケールフィールド２２６０、変位フィールド２２６２Ａ、およびファイル済み変位スケール２２６２Ｂは、存在しない。
【００６２】
非メモリアクセスのフルラウンド制御タイプオペレーション２２１０の命令テンプレートにおいて、ベータフィールド２２５４は、ラウンド制御フィールド２２５４Ａとして解釈され、そのコンテンツは、静的ラウンドを提供する。本発明の説明される複数の実施形態において、ラウンド制御フィールド２２５４Ａは、抑圧全浮動小数点例外（ＳＡＥ）フィールド２２５６およびラウンドオペレーション制御フィールド２２５８を含み、代替的な複数の実施形態は、これら双方のコンセプトをサポートおよびエンコードして同一のフィールドとすることができ、またはこれらのコンセプト／フィールドのうち一方または他方のみを有し得る（例えば、ラウンドオペレーション制御フィールド２２５８のみを有し得る）。
【００６３】
ＳＡＥフィールド２２５６のコンテンツは、例外イベント報告をディスエーブルにするか否かを区別する。ＳＡＥフィールド２２５６のコンテンツが、抑圧がイネーブルにされたことを示す場合、所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外処理部も立ち上げない。
【００６４】
ラウンドオペレーション制御フィールド２２５８のコンテンツは、複数のラウンドオペレーションのグループのうちどちらを実行するかを区別する（例えば、大きくなる方向に丸める、小さくなる方向に丸める、ゼロに向けて丸める、最も近い方向に丸める）。このように、ラウンドオペレーション制御フィールド２２５８は、命令ベースでラウンドモードの変更を可能にする。プロセッサが複数のラウンドモードを指定する制御レジスタを含む本発明の一実施形態において、ラウンドオペレーション制御フィールド２２５０のコンテンツは、当該レジスタ値を上書きする。
【００６５】
非メモリアクセスのデータ変換タイプオペレーション２２１５の命令テンプレートにおいて、ベータフィールド２２５４は、データ変換フィールド２２５４Ｂとして解釈され、そのコンテンツは、いくつかのデータ変換のうちどちらが実行されるかを区別する（例えば、非データ変換、スウィズル、ブロードキャスト）。
【００６６】
クラスＡのメモリアクセス２２２０の命令テンプレートの場合、アルファフィールド２２５２は、追い出し示唆フィールド２２５２Ｂとして解釈され、そのコンテンツは、複数の追い出し示唆のうちどちらが用いられるかを区別するが（図１０Ａにおいて、一時的２２５２Ｂ．１および非一時的２２５２Ｂ．２は、それぞれ、メモリアクセス、一時的２２２５の命令テンプレート、およびメモリアクセス、非一時的２２３０の命令テンプレートに対して指定される）、ベータフィールド２２５４は、データ操作フィールド２２５４Ｃとして解釈され、そのコンテンツは、いくつかのデータ総裁オペレーション（プリミティブとしても知られる）のうちどちらが実行されるかを区別する（例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン）。メモリアクセス２２２０の複数の命令テンプレートは、スケールフィールド２２６０を含み、変位フィールド２２６２Ａまたは変位スケールフィールド２２６２Ｂを任意選択で含む。
【００６７】
複数のベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常の複数のベクトル命令の場合のように、複数のベクトルメモリ命令は、データ要素の様式で、メモリから／にデータを転送し、実際に転送される複数の要素は、ライトマスクとして選択されるベクトルマスクの複数のコンテンツにより規定される。
【００６８】
一時的データは、キャッシングから利益を得るのに十分なほど速やかに再利用される可能性が高いデータである。しかし、それは示唆であり、異なるプロセッサは、示唆を完全に無視することを含め、複数の異なる様式で一時的データを実装してもよい。非一時的データは、第１のレベルのキャッシュにおけるキャッシングから利益を得るのに十分なほど速やかに再利用される可能性が低いデータであり、追い出しの優先権を与えられるべきである。しかし、それは示唆であり、複数の異なるプロセッサは、示唆を完全に無視することを含め、複数の異なる様式で非一時的データを実装してもよい。クラスＢの複数の命令テンプレートの場合、アルファフィールド２２５２は、ライトマスク制御（Ｚ）フィールド２２５２Ｃとして解釈され、そのコンテンツは、ライトマスクフィールド２２７０により制御されるライトマスキングがマージングであるべきか、またはゼロイングであるべきかを区別する。
【００６９】
クラスＢの非メモリアクセス２２０５の複数の命令テンプレートの場合、ベータフィールド２２５４の一部は、ＲＬフィールド２２５７Ａとして解釈され、そのコンテンツは、複数の異なる増加オペレーションタイプのうちどちらが実行されるかを区別するが（例えば、ラウンド２２５７Ａ．１およびベクトル長（ＶＳＩＺＥ）２２５７Ａ．２は、それぞれ、非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション２２１２の命令テンプレート、および非メモリアクセス、ライトマスク制御、ＶＳＩＺＥタイプオペレーション２２１７の命令テンプレートに対して指定される）、ベータフィールド２２５４の残りは、指定されるタイプの複数のオペレーションのうちいずれが実行されるかを区別する。非メモリアクセス２２０５の複数の命令テンプレートにおいて、スケールフィールド２２６０、変位フィールド２２６２Ａ、およびファイル済み変位スケール２２６２Ｂは、存在しない。
【００７０】
非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション２２１０の命令テンプレートにおいて、ベータフィールド２２５４の残りは、ラウンドオペレーションフィールド２２５９Ａとして解釈され、例外イベント報告は、ディセーブルにされる（所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、任意の浮動小数点例外処理部も立ち上げない）。
【００７１】
ラウンドオペレーション制御フィールド２２５８と同様に、ラウンドオペレーション制御フィールド２２５９Ａのコンテンツは、複数のラウンドオペレーションのグループのうちどちらを実行するかを区別する（例えば、大きくなる方向に丸める、小さくなる方向に丸める、ゼロに向けて丸める、最も近い方向に丸める）。このように、ラウンドオペレーション制御フィールド２２５９Ａは、命令ベースでラウンドモードの変更を可能にする。プロセッサが複数のラウンドモードを指定する制御レジスタを含む本発明の一実施形態において、ラウンドオペレーション制御フィールド２２５０のコンテンツは、当該レジスタ値を上書きする。
【００７２】
非メモリアクセス、ライトマスク制御、ＶＳＩＺＥタイプオペレーション２２１７の命令テンプレートにおいて、ベータフィールド２２５４の残りは、ベクトル長フィールド２２５９Ｂとして解釈され、そのコンテンツは、いくつかのデータベクトル長のうちどちらが実行されるかを区別する（例えば、１２８、２５６、または５１２バイト）。
【００７３】
クラスＢのメモリアクセス２２２０の複数の命令テンプレートの場合、ベータフィールド２２５４の一部は、ブロードキャストフィールド２２５７Ｂとして解釈され、そのコンテンツは、ブロードキャストタイプデータ操作オペレーションが実行されるか否かを区別するが、ベータフィールド２２５４の残りは、ベクトル長フィールド２２５９Ｂとして解釈される。メモリアクセス２２２０の複数の命令テンプレートは、スケールフィールド２２６０を含み、変位フィールド２２６２Ａまたは変位スケールフィールド２２６２Ｂを任意選択で含む。
【００７４】
一般ベクトル向け命令フォーマット２２００に関連して、フォーマットフィールド２２４０、ベースオペレーションフィールド２２４２、およびデータ要素幅フィールド２２６４を含む、フルオペコードフィールド２２７４が示される。フルオペコードフィールド２２７４がこれらのフィールドの全てを含む一実施形態が示されるが、フルオペコードフィールド２２７４は、それらの全てをサポートしない複数の実施形態において、これらのフィールドの全てよりも少ないものを含む。フルオペコードフィールド２２７４は、オペレーションコード（オペコード）を提供する。
【００７５】
増加オペレーションフィールド２２５０、データ要素幅フィールド２２６４、およびライトマスクフィールド２２７０は、一般ベクトル向け命令フォーマットにおける命令ベースで、これらの特徴が指定されることを可能にする。ライトマスクフィールドおよびデータ要素幅フィールドを組み合わせることで、マスクが異なるデータ要素幅に基づいて適用されることを可能にするように、複数の型の命令を生成する。
【００７６】
クラスＡおよびクラスＢ内に見出される様々な命令テンプレートは、複数の異なる状況において有益である。本発明のいくつかの実施形態において、複数の異なるプロセッサまたはプロセッサ内の複数の異なるコアは、クラスＡのみ、クラスＢのみ、または双方のクラスをサポートし得る。例えば、汎用計算用の高性能の汎用アウトオブオーダコアは、クラスＢのみをサポートし得、主としてグラフィックスおよび／またはサイエンティフィック（スループット）計算用のコアは、クラスＡのみをサポートし得、双方用のコアは、双方をサポートし得る（勿論、双方のクラスの全てのテンプレートおよび命令ではないが、いくらか混合した双方のクラスの複数のテンプレートおよび命令を有するコアは、本発明の範囲内である）。また、１つのプロセッサは、複数のコアを含んでもよく、複数のコアの全ては、同一クラスをサポートし、またはそのうちの複数の異なるコアは、異なるクラスをサポートする。例えば、別個のグラフィックスおよび複数の汎用コアを有するプロセッサにおいて、主としてグラフィックスおよび／またはサイエンティフィック計算用の複数のグラフィックスコアのうち１つは、クラスＡのみをサポートし得るが、複数の汎用コアの１または複数は、クラスＢのみをサポートする、汎用計算用のアウトオブオーダ実行およびレジスタリネームを用いる複数の高性能汎用コアであり得る。別個のグラフィックスコアを有しない別のプロセッサは、クラスＡおよびクラスＢの双方をサポートする、もう１つの汎用インオーダまたはオウトオブオーダのコアを含み得る。勿論、本発明の複数の異なる実施形態において、１つのクラスの複数の特徴も、他のクラスに実装され得る。ハイレベル言語で書かれた複数のプログラムは、１）実行のためにターゲットプロセッサによりサポートされるクラスの複数の命令のみを有する形式、または２）全てのクラスの命令の複数の異なる組み合わせを用いて書かれた代替的な複数のルーチンを有し、目下、コードを実行しているプロセッサによりサポートされる複数の命令に基づいて、実行する複数のルーチンを選択する制御フローコードを有する形式を含む、種々様々な実行可能な形式にされる（例えば、実行時コンパイルまたは静的コンパイルされる）。
【００７７】
図１１は、本発明の複数の実施形態による、例示的な特定ベクトル向け命令フォーマットを図示するブロック図である。図１１は、位置、サイズ、インタープリテーション、および複数のフィールドの順序、ならびにこれらのフィールドに対する複数の値を指定するという意味で具体的な特定ベクトル向け命令フォーマット２３００を示す。特定ベクトル向け命令フォーマット２３００は、ｘ８６命令セットを拡張するべく用いられ得、従って、複数のフィールドのいくつかは、既存のｘ８６命令セットおよびその拡張（例えばＡＶＸ）において使用されるものと類似し、または同一である。このフォーマットは、プレフィックスエンコードフィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、および複数の拡張を伴う既存のｘ８６命令セットの複数の即値フィールドと依然として整合性がある。図１０の複数のフィールドにマッピングする図１１の複数のフィールドが図示される。
【００７８】
本発明の複数の実施形態は、例示的目的で一般ベクトル向け命令フォーマット２２００の文脈において、特定ベクトル向け命令フォーマット２３００を参照して説明されるが、本発明は、特許請求される場合を除き、特定ベクトル向け命令フォーマット２３００に限定されないことを理解されたい。例えば、一般ベクトル向け命令フォーマット２２００は、様々なフィールドの様々な適用可能なサイズを企図するが、特定ベクトル向け命令フォーマット２３００は、複数の特定サイズのフィールドを有するものとして示される。特定の例によれば、データ要素幅フィールド２２６４は、特定ベクトル向け命令フォーマット２３００における１つのビットフィールドとして図示されるが、本発明は、そのようには限定されない（つまり、一般ベクトル向け命令フォーマット２２００は、他の複数のサイズのデータ要素幅フィールド２２６４を企図する）。
【００７９】
一般ベクトル向け命令フォーマット２２００は、図１１Ａにおいて図示される順序で以下に列挙される、次の複数のフィールドを含む。ＥＶＥＸプレフィックス（バイト０〜３）２３０２は、４バイト形式でエンコードされる。フォーマットフィールド２２４０（ＥＶＥＸバイト０、ビット［７：０］）の第１のバイト（ＥＶＥＸバイト０）は、フォーマットフィールド２２４０であり、０ｘ６２を含む（本発明の一実施形態において、ベクトル向け命令フォーマットを区別するべく用いられる一意な値）。第２〜第４のバイト（ＥＶＥＸバイト１〜３）は、特定の能力を提供するいくつかのビットフィールドを含む。
【００８０】
ＲＥＸフィールド２３０５（ＥＶＥＸバイト１、ビット［７−５］）は、ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）、および２２５７ＢＥＸバイト１、ビット［５］−Ｂ）からなる。ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂのビットフィールドは、対応するＶＥＸビットフィールドと同一の機能性を提供し、１ｓ補数形式を用いてエンコードされる。すなわち、ＺＭＭ０は、１１１１Ｂとしてエンコードされ、ＺＭＭ１５は、００００Ｂとしてエンコードされる。複数の命令の他の複数のフィールドは、当技術分野で既知の複数のレジスタインデックスのより低い３つのビット（ｒｒｒ、ｘｘｘ、およびｂｂｂ）をエンコードし、従って、Ｒｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂは、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂを加算することにより形成され得る。
【００８１】
ＲＥＸ'フィールド２３１０。これは、ＲＥＸ'フィールド２３１０の第１の部分であり、拡張された３２レジスタセットの上方または下方の１６をエンコードするべく用いられるＥＶＥＸ．Ｒ'ビットフィールドである（ＥＶＥＸバイト１、ビット［４］−Ｒ'）。本発明の一実施形態において、このビットは、以下に示される他のものと共に、ＢＯＵＮＤ命令から（周知のｘ８６  ３２ビットモードで）区別するビット反転フォーマットで格納され、ＢＯＵＮＤ命令のリアルオペコードバイトは６２であるが、ＭＯＤ  Ｒ／Ｍフィールド（下記）において、ＭＯＤフィールドの値１１を受け取らない。本発明の代替的な複数の実施形態は、これと、反転フォーマットで下に示される他の複数のビットを格納しない。値１は、より低い１６のレジスタをエンコードするべく用いられる。換言すると、Ｒ'Ｒｒｒｒは、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、および他の複数のフィールドの他のＲＲＲを組み合わせることにより形成される。
【００８２】
オペコードマップフィールド２３１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）のコンテンツは、暗黙に示される先頭オペコードバイト（ＯＦ、ＯＦ３８、またはＯＦ３）をエンコードする。データ要素幅フィールド２２６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）は、ＥＶＥＸ．Ｗという表記により表される。ＥＶＥＸ．Ｗは、データタイプの粒度（サイズ）（３２ビットのデータ要素または６４ビットのデータ要素）を定義するべく用いられる。ＥＶＥＸ．ｖｖｖｖ２３２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）。ＥＶＥＸ．ｖｖｖｖの役割は、以下を含み得る。１）ＥＶＥＸ．ｖｖｖｖは、反転（１ｓ補数）形式で指定された第１のソースレジスタオペランドをエンコードし、２またはそれ以上のソースオペランドを用いる命令に対して有効である。２）ＥＶＥＸ．ｖｖｖｖは、一定の複数のベクトルシフトに対して１ｓ補数形式で指定されたデスティネーションレジスタオペランドをエンコードする。または３）ＥＶＥＸ．ｖｖｖｖは、いずれのオペランドもエンコードせず、フィールドは予約され、１１１１ｂを含むことになっている。従って、ＥＶＥＸ．ｖｖｖｖフィールド２３２０は、反転（１ｓ補数）形式で格納された第１のソースレジスタ指定子の４つの下位ビットをエンコードする。命令に応じて、指定子サイズを３２レジスタに拡張するべく、追加の異なるＥＶＥＸビットフィールドが用いられる。ＥＶＥＸ．Ｕ２２６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）。ＥＶＥＸ．Ｕ＝０の場合、これは、クラスＡまたはＥＶＥＸ．Ｕ０を示す。ＥＶＥＸ．Ｕ＝１の場合、クラスＢまたはＥＶＥＸ．Ｕ１を示す。
【００８３】
プレフィックスエンコードフィールド２３２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）は、ベースオペレーションフィールドのために追加ビットを提供する。また、これは、ＥＶＥＸプレフィックスフォーマットの複数のレガシーＳＳＥ命令に対するサポートを提供することに加えて、ＳＩＭＤプレフィックスを圧縮する利益を有する（ＳＩＭＤプレフィックスを表現するバイトを要求するのではなく、ＥＶＥＸプレフィックスは、２ビットのみを要求する）。一実施形態において、レガシーフォーマットおよびＥＶＥＸプレフィックスフォーマットの双方でＳＩＭＤプレフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を用いる複数のレガシーＳＳＥ命令をサポートするべく、これらのレガシーＳＩＭＤプレフィックスは、ＳＩＭＤプレフィックスエンコードフィールドにエンコードされ、デコーダのＰＬＡに提供される前に、ランタイム時にレガシーＳＩＭＤプレフィックスへと拡張される（従ってＰＬＡは、修飾することなくこれらのレガシー命令のレガシーフォーマットおよびＥＶＥＸフォーマットの双方を実行し得る）。より新しい命令は、ＥＶＥＸプレフィックスエンコードフィールドのコンテンツを、オペコード拡張として直接に使用し得るが、一定の複数の実施形態は同様に、整合性について拡張するが、これらのレガシーＳＩＭＤプレフィックスにより指定される複数の異なる意味を可能にする。代替的な実施形態は、２ビットのＳＩＭＤプレフィックスエンコードをサポートするようにＰＬＡを設計し得、従って拡張を要求しない。
【００８４】
アルファフィールド２２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ。ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．ライトマスク制御、およびＥＶＥＸ．Ｎとしても知られる。αでも図示される）。先述したように、このフィールドは、コンテキスト固有である。ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、ＥＶＥＸ．ｓ２-０、ＥＶＥＸｒ２-０、ＥＶＥＸ．ｒｒ１、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られる。βββでも図示される）。先述したように、このフィールドは、コンテキスト固有である。
【００８５】
ＲＥＸ'フィールド２２１０は、ＲＥＸ'フィールドの残りであり、拡張された３２レジスタセットの上方または下方の１６をエンコードするべく用いられるＥＶＥＸ．Ｖビットフィールドである（ＥＶＥＸバイト３、ビット［３］−Ｖ）。このビットは、ビット反転フォーマットに格納される。値１は、より低い１６のレジスタをエンコードするべく用いられる。換言すると、ＶＶＶＶは、ＥＶＥＸ．Ｖ、ＥＶＥＸ．ｖｖｖｖを組み合わせすることにより形成される。
【００８６】
ライトマスクフィールド２２７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）のコンテンツは、先述した複数のライトマスクレジスタにおけるレジスタのインデックスを指定する。本発明の一実施形態において、特定の値ＥＶＥＸ．ｋｋｋ＝０００は、特定の命令のために非ライトマスクが用いられることを暗に示す、特別な動作を有する（これは、全てのものに実線で接続されたライトマスク、またはマスキングハードウェアを迂回するハードウェアの使用を含む、様々な様式で実装され得る）。
【００８７】
リアルオペコードフィールド２３３０（バイト４）は、オペコードバイトとしても知られる。オペコードの一部は、このフィールド内に指定される。ＭＯＤ  Ｒ／Ｍフィールド２３４０（バイト５）は、ＭＯＤフィールド２３４２、Ｒｅｇフィールド２３４４、およびＲ／Ｍフィールド２３４６を含む。先述したように、ＭＯＤフィールド２３４２のコンテンツは、メモリアクセスオペレーションと非メモリアクセスオペレーションとを区別する。Ｒｅｇフィールド２３４４の役割は、デスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードするか、またはオペコード拡張として扱われ、任意の命令オペランドをエンコードするべく用いられないという２つの状況に要約され得る。Ｒ／Ｍフィールド２３４６の役割は、メモリアドレスを参照する命令オペランドをエンコードすること、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドをエンコードすることを含み得る。
【００８８】
スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）。先述したように、スケールフィールド２２５０のコンテンツは、メモリアドレス生成に用いられる。ＳＩＢ．ｘｘｘ２３５４およびＳＩＢ．ｂｂｂ２３５６。これらのフィールドのコンテンツは、レジスタインデックスＸｘｘｘおよびＢｂｂｂに関連してすでに言及された。変位フィールド２２６２Ａ（バイト７〜１０）。ＭＯＤフィールド２３４２が１０を含む場合、バイト７〜１０は、変位フィールド２２６２Ａであり、レガシー３２ビット変位（ｄｉｓｐ３２）と同様に機能し、バイト粒度で機能する。
【００８９】
変位係数フィールド２２６２Ｂ（バイト７）。ＭＯＤフィールド２３４２が０１を含む場合、バイト７は、変位係数フィールド２２６２Ｂである。このフィールドの位置は、レガシーｘ８６命令セットの８ビット変位（ｄｉｓｐ８）の位置と同一であり、ｄｉｓｐ８は、バイト粒度で機能する。ｄｉｓｐ８は、拡張された署名であるので、１２８バイトオフセットと１２７バイトオフセットとの間でのみ処理することができる。６４バイトキャッシュラインの観点から、ｄｉｓｐ８は、４つの本当に有用な値１２８、６４、０、および６４のみに設定され得る８ビットを使用する。多くの場合、より大きい範囲が必要とされるので、ｄｉｓｐ３２が使用される。しかし、ｄｉｓｐ３２は、４バイトを要求する。ｄｉｓｐ８およびｄｉｓｐ３２とは対照的に、変位係数フィールド２２６２Ｂは、ｄｉｓｐ８のリインタープレテーションである。変位係数フィールド２２６２Ｂを用いる場合、実際の変位は、メモリオペランドアクセス（Ｎ）のサイズで乗算された変位係数フィールドのコンテンツにより決定される。このタイプの変位は、ｄｉｓｐ８＊Ｎと呼ばれる。これは、平均的命令の長さ（変位に用いられるが、より大きい範囲を有する１バイト）を低減する。そのように圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であるという前提に基づき、従って、アドレスオフセットの複数の冗長下位ビットは、エンコードされる必要がない。換言すると、変位係数フィールド２２６２Ｂは、レガシーｘ８６命令セットの８ビット変位を代用する。従って、変位係数フィールド２２６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８＊Ｎにオーバーロードされることのみを例外として、ｘ８６命令セットの８ビット変位と同じようにエンコードされる（従って、Ｍｏｄ  ＲＭ／ＳＩＢエンコード規則に変更はない）。換言すると、エンコード規則またはエンコードの長さに変更はないが、（バイト的アドレスオフセットを得るべく、メモリオペランドのサイズにより変位を調節する必要がある）ハードウェアによる変位値のインタープリテーションのみには変更がある。即値フィールド２２７２は、先述したように動作する。
【００９０】
図１１Ｂは、本発明の一実施形態による、フルオペコードフィールド２２７４を構成する特定ベクトル向け命令フォーマット２３００のフィールドを図示するブロック図である。具体的には、フルオペコードフィールド２２７４は、フォーマットフィールド２２４０、ベースオペレーションフィールド２２４２、およびデータ要素幅（Ｗ）フィールド２２６４を含む。ベースオペレーションフィールド２２４２は、プレフィックスエンコードフィールド２３２５、オペコードマップフィールド２３１５、およびリアルオペコードフィールド２３３０を含む。
【００９１】
図１１Ｃは、本発明の一実施形態による、レジスタインデックスフィールド２２４４を構成する特定ベクトル向け命令フォーマット２３００のフィールドを図示するブロック図である。具体的には、レジスタインデックスフィールド２２４４は、ＲＥＸフィールド２３０５、ＲＥＸ'フィールド２３１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド２３４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド２３４６、ＶＶＶＶフィールド２３２０、ｘｘｘフィールド２３５４、およびｂｂｂフィールド２３５６を含む。
【００９２】
図１１Ｄは、本発明の一実施形態による、増加オペレーションフィールド２２５０を構成する特定ベクトル向け命令フォーマット２３００のフィールドを図示するブロック図である。クラス（Ｕ）フィールド２２６８が０を含む場合、ＥＶＥＸ．Ｕ０（クラスＡ２２６８Ａ）を意味する。１を含む場合、ＥＶＥＸ．Ｕ１（クラスＢ２２６８Ｂ）を意味する。Ｕ＝０であり、ＭＯＤフィールド２３４２が１１を含む（非メモリアクセスオペレーションを意味する）場合、アルファフィールド２２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、ｒｓフィールド２２５２Ａとして解釈される。ＲＳフィールド２２５２Ａが１（ラウンド２２５２Ａ．１）を含む場合、ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ラウンド制御フィールド２２５４Ａとして解釈される。ラウンド制御フィールド２２５４Ａは、１ビットのＳＡＥフィールド２２５６および２ビットのラウンドオペレーションフィールド２２５８を含む。ｒｓフィールド２２５２Ａが０（データ変換２２５２Ａ．２）を含む場合、ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ変換フィールド２２５４Ｂとして解釈される。Ｕ＝０であり、ＭＯＤフィールド２３４２が００、０１、または１０（メモリアクセスオペレーションを意味する）を含む場合、アルファフィールド２２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、追い出し示唆（ＥＨ）フィールド２２５２Ｂとして解釈され、ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ操作フィールド２２５４Ｃとして解釈される。
【００９３】
Ｕ＝１である場合、アルファフィールド２２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、ライトマスク制御（Ｚ）フィールド２２５２Ｃとして解釈される。Ｕ＝１であり、ＭＯＤフィールド２３４２が１１を含む（非メモリアクセスオペレーションを意味する）場合、ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［４］−Ｓｏ）の一部は、ＲＬフィールド２２５７Ａとして解釈される。１（ラウンド２２５７Ａ．１）を含む場合、ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）の残りは、ラウンドオペレーションフィールド２２５９Ａとして解釈されるが、ＲＬフィールド２２５７Ａが０（ＶＳＩＺＥ２２５７．Ａ２）を含む場合、ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）の残りは、ベクトル長フィールド２２５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）として解釈される。Ｕ＝１であり、ＭＯＤフィールド２３４２が００、０１、または１０を含む（メモリアクセスオペレーションを意味する）場合、ベータフィールド２２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド２２５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）およびブロードキャストフィールド２２５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）として解釈される。
【００９４】
図１２は、本発明の一実施形態による、レジスタアーキテクチャ２４００のブロック図である。図示される実施形態において、５１２ビット幅の３２のベクトルレジスタ２４１０が存在する。これらのレジスタは、ｚｍｍ０〜ｚｍｍ３１として参照される。より低い１６のｚｍｍレジスタの下位２５６ビットは、レジスタｙｍｍ０〜１６上にオーバーレイされる。より低い１６のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０〜１５上にオーバーレイされる。以下の表に図示されるように、特定ベクトル向け命令フォーマット２３００は、これらのオーバーレイされたレジスタファイルで動作する。
【表１】
2019071075.tif 000003
【００９５】
換言すると、ベクトル長フィールド２２５９Ｂは、最大長、および１もしくは複数の他のより短い長さのうちから選択され、そのようなそれぞれのより短い長さは、先述の長さの半分の長さである。ベクトル長フィールド２２５９Ｂを用いない複数の命令テンプレートは、最大ベクトル長で動作する。更に、一実施形態において、特定ベクトル向け命令フォーマット２３００のクラスＢ命令テンプレートは、パックドもしくはスカラ単精度／倍精度浮動小数点データおよびパックドもしくはスカラ整数データで動作する。複数のスカラオペレーションは、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタにおける最低位のデータ要素位置で実行されるオペレーションである。より高位の複数のデータ要素位置は、命令前と同一が、または実施形態に応じてゼロにされる。
【００９６】
複数のライトマスクレジスタ２４１５。図示される実施形態において、８のライトマスクレジスタ（ｋ０〜ｋ７）が存在し、それぞれは６４ビットのサイズである。代替的な実施形態において、複数のライトマスクレジスタ２４１５は１６ビットのサイズである。先述したように、本発明の一実施形態において、ベクトルマスクレジスタｋ０は、ライトマスクとして使用され得ない。通常、ｋ０を示すエンコードがライトマスクに用いられる場合、これは、０ｘＦＦＦＦの実線で接続されたライトマスクを選択し、その命令に対するマスキングを効果的にディスエーブルにする。
【００９７】
複数の汎用レジスタ２４２５。図示される実施形態において、既存の複数のｘ８６アドレスモードと共に用いられ、複数のメモリオペランドを処理する１６の６４ビット汎用レジスタが存在する。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、およびＲ８〜Ｒ１５の名称により参照される。
【００９８】
スカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）２４４５上に、ＭＭＸパックド整数フラットレジスタファイル２４５０がエイリアスされ、図示される実施形態において、ｘ８７スタックは、ｘ８７命令セット拡張を用いて、３２／６４／８０ビット浮動小数点データに複数のスカラ浮動小数点オペレーションを実行するべく用いられる８つの要素のスタックである。複数のＭＭＸレジスタは、６４ビットパックド整数データに複数のオペレーションを実行すると共に、ＭＭＸレジスタとｘｍｍレジスタとの間で実行されるいくつかのオペレーションのためのオペランドを保持するべく用いられる。
【００９９】
本発明の代替的な複数の実施形態は、より広いか、またはより狭い複数のレジスタを用い得る。  更に、本発明の代替的な複数の実施形態は、より多く、より少なく、または異なるレジスタファイルおよびレジスタを用い得る。
【０１００】
複数のプロセッサコアは、複数の異なる目的のために、複数の異なるプロセッサにおいて異なる様式で実装され得る。例えば、そのような複数のコアの複数の実装は、１）汎用計算用の汎用インオーダコア、２）汎用計算用の高性能汎用アウトオブオーダコア、３）主としてグラフィックスおよび／またはサイエンティフィック（スループット）計算用の特定用途用コアを含み得る。複数の異なるプロセッサの複数の実装は、１）汎用計算用の１もしくは複数の汎用インオーダコア、および／または汎用計算用の１もしくは複数の汎用アウトオブオーダコアを含むＣＰＵ、ならびに２）主としてグラフィックスおよび／またはサイエンティフィック（スループット）用の１もしくは複数の特定用途用コアを含むコプロセッサを含み得る。そのような複数の異なるプロセッサは、複数の異なるコンピュータシステムアーキテクチャをもたらし、複数の異なるコンピュータシステムアーキテクチャは、１）ＣＰＵの別個のチップ上のコプロセッサ、２）ＣＰＵと同一のパッケージにおける別個のダイ上のコプロセッサ、３）ＣＰＵと同一のダイ上のコプロセッサ
（この場合、そのようなコプロセッサは、場合によっては統合グラフィックスおよび／またはサイエンティフィック（スループット）ロジック、または特定用途用コア等、特定用途用ロジックとして言及される）、および４）同一のダイ上に、上述のＣＰＵ（場合によっては、アプリケーションコアもしくはアプリケーションプロセッサとして言及される）、上記のコプロセッサ、および追加の機能性を含み得るシステムオンチップを含み得る。複数の例示的なコアアーキテクチャが次に説明され、その後に複数の例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
【０１０１】
図１３Ａは、本発明の複数の実施形態による、例示的なインオーダパイプライン、および例示的なレジスタリネーム、アウトオブオーダ発行／実行パイプラインの双方を図示するブロック図である。図１３Ｂは、本発明の複数の実施形態による、インオーダアーキテクチャコアの例示的な実施形態、およびプロセッサ内に含まれる例示的なレジスタリネーム、アウトオブオーダ発行／実行アーキテクチャコアの双方を図示するブロック図である。実線の複数のボックスは、インオーダパイプラインおよびインオーダコアを図示するが、複数の破線ボックスの任意の追加により、レジスタリネーム、アウトオブオーダ発行／実行パイプライン、およびコアを図示する。インオーダ態様がアウトオブオーダ態様のサブセットであると仮定して、アウトオブオーダ態様が説明される。
【０１０２】
図１３Ａにおいて、プロセッサパイプライン２５００は、フェッチステージ２５０２、長さデコードステージ２５０４、デコードステージ２５０６、割り当てステージ２５０８、リネームステージ２５１０、スケジューリング（ディスパッチまたは発行としても知られる）ステージ２５１２、レジスタ読み取り／メモリ読み取りステージ２５１４、実行ステージ２５１６、ライトバック／メモリライトステージ２５１８、例外処理ステージ２５２２、およびコミットステージ２５２４を含む。
【０１０３】
図１３Ｂは、実行エンジンユニット２５５０に結合されたフロントエンドユニット２５３０を含むプロセッサコア２５９０を示し、実行エンジンユニット２５５０およびフロントエンドユニット２５３０の双方がメモリユニット２５７０に結合される。コア２５９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドもしくは代替的なコアタイプであってもよい。なおも別の選択肢として、コア２５９０は、例えば、ネットワークもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ＧＰＧＰＵ）コア、グラフィックスコア等の特定用途用コアであってもよい。フロントエンドユニット２５３０は、命令キャッシュユニット２５３４に結合された分岐予測ユニット２５３２を含み、分岐予測ユニット２５３２は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）２５３６に結合され、命令トランスレーションルックアサイドバッファ２５３６は、命令フェッチユニット２５３８に結合され、命令フェッチユニット２５３８は、デコードユニット２５４０に結合される。デコードユニット２５４０（またはデコーダ）は、複数のデコード命令をデコードし、出力として１もしくは複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を生成することができ、これらは、複数の元の命令からデコードされ、またはこれらを反映し、あるいはこれらから派生する。デコードユニット２５４０は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等が挙げられるが、これらに限定されない。一実施形態において、コア２５９０は、複数の一定のマクロ命令に対するマイクロコードを（例えば、デコードユニット２５４０またはフロントエンドユニット２５３０内に）格納する、マイクロコードＲＯＭまたは他の媒体を含む。デコードユニット２５４０は、実行エンジンユニット２５５０内のリネーム／アロケータユニット２５５２に結合される。
【０１０４】
実行エンジンユニット２５５０は、リタイアメントユニット２５５４および１または複数のスケジューラユニット２５５６のセットに結合されたリネーム／アロケータユニット２５５２を含む。スケジューラユニット２５５６は、複数のリザベーションステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット２５５６は、物理レジスタファイルユニット２５５８に結合される。物理レジスタファイルユニット２５５８のそれぞれは、１または複数の物理レジスタファイルを表し、それらのうちの異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、状態（例えば、実行される次の命令のアドレスである命令ポインタ）等、１または複数の異なるデータタイプを格納する。
【０１０５】
一実施形態において、物理レジスタファイルユニット２５５８は、複数のベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。物理レジスタファイルユニット２５５８は、リタイアメントユニット２５５４と重なり、レジスタリネームおよびアウトオブオーダ実行が（例えば、リオーダバッファおよびリタイアメントレジスタファイルを用いることにより、フューチャファイル、履歴バッファ、およびリタイアメントレジスタファイルを用いることにより、複数のレジスタのレジスタマップおよびプール等を用いることにより）実装され得る様々な様式を図示する。リタイアメントユニット２５５４および物理レジスタファイルユニット２５５８は、実行クラスタ２５６０に結合される。
【０１０６】
実行クラスタ２５６０は、１もしくは複数の実行ユニット２５６２のセット、および１もしくは複数のメモリアクセスユニット２５６４のセットを含む。複数の実行ユニット２５６２は、様々なオペレーション（例えば、シフト、加算、減算、乗算）を、様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に基づいて実行し得る。いくつかの実施形態は、複数の特定の関数または複数のセットの関数に専用のいくつかの実行ユニットを含み得るが、他の実施形態は、１つのみ実行ユニットまたは複数の実行ユニットを含み、それらの全てがあらゆる関数を実行し得る。
【０１０７】
スケジューラユニット２５５６、物理レジスタファイルユニット２５５８、および実行クラスタ２５６０は、おそらくは複数であるものとして示される。複数の一定の実施形態は、複数の一定のタイプのデータ／オペレーションのための複数の別個のパイプライン（例えば、各々が、自身のスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプライン。別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット２５６４を有する複数の一定の実施形態が実装される）を作成するからである。別個の複数のパイプラインが使用される場合、これらのパイプラインのうち１または複数は、アウトオブオーダ発行／実行であり、残りはインオーダであり得ることを理解されたい。
【０１０８】
複数のメモリアクセスユニット２５６４のセットは、メモリユニット２５７０に結合され、メモリユニット２５７０は、レベル２（Ｌ２）キャッシュユニット２５７６に結合されたデータキャッシュユニット２５７４に結合されたデータＴＬＢユニット２５７２を含む。例示的な一実施形態において、複数のメモリアクセスユニット２５６４は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み、それらのそれぞれは、メモリユニット２５７０におけるデータＴＬＢユニット２５７２に結合され得る。命令キャッシュユニット２５３４は、メモリユニット２５７０におけるレベル２（Ｌ２）キャッシュユニット２５７６に更に結合される。Ｌ２キャッシュユニット２５７６は、１または複数の他のレベルのキャッシュに、そして最終的にはメインメモリに結合される。
【０１０９】
例として、例示的なレジスタリネーム、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン２５００を以下のように実装し得る。１）命令フェッチ２５３８は、フェッチおよび長さデコードステージ２５０２および２５０４を実行する。２）デコードユニット２５４０はデコードステージ２５０６を実行する。３）リネーム／アロケータユニット２５５２は、割り当てステージ２５０８およびリネームステージ２５１０を実行する。４）スケジューラユニット２５５６は、スケジューリングステージ２５１２を実行する。５）物理レジスタファイルユニット２５５８およびメモリユニット２５７０は、レジスタ読み取り／メモリ読み取りステージ２５１４を実行し、実行クラスタ２５６０は、実行ステージ２５１６を実行する。６）メモリユニット２５７０および物理レジスタファイルユニット２５５８は、ライトバック／メモリライトステージ２５１８を実行する。７）様々なユニットは、例外処理ステージ２５２２に関与してもよく、８）リタイアメントユニット２５５４および物理レジスタファイルユニット２５５８は、コミットステージ２５２４を実行する。
【０１１０】
コア２５９０は、本明細書において説明される命令を含む、１または複数の命令セット（例えば、ｘ８６命令セット（複数のより新しいバージョンを追加された、いくつかの拡張を伴う）、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｙのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇのＡＲＭ命令セット（ＮＥＯＮ等の複数の選択的追加拡張を伴う）をサポートし得る。一実施形態において、コア２５９０は、パックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２、および／または先述のいくつかの形式の一般ベクトル向け命令フォーマット（Ｕ＝０および／またはＵ＝１））をサポートするロジックを含み、それにより、パックドデータを用いて実行される多くのマルチメディアアプリケーションにより使用される複数のオペレーションを可能にする。
【０１１１】
コアは、マルチスレディング（２もしくはそれ以上の並列セットのオペレーションもしくはスレッドを実行する）をサポートし、タイムスライスマルチスレッド化、同時マルチスレッド化（１つの物理コアが、物理コアが同時に、マルチスレッド化する複数のスレッドのそれぞれに対する論理コアを提供する）、またはそれらの組み合わせ（例えば、タイムスライスフェチおよびデコード、ならびにインテル（登録商標）ハイパースレッディング技術等における以後の同時マルチスレッド化）を含む様々な様式でサポートし得ることを理解されたい。
【０１１２】
レジスタリネームは、アウトオブオーダ実行の文脈において説明されるが、レジスタリネームは、インオーダアーキテクチャにおいて使用されてもよいことを理解されたい。プロセッサの図示される実施形態は、別個の命令および複数のデータキャッシュユニット２５３４／２５７４、ならびに共有Ｌ２キャッシュユニット２５７６も含むが、複数の代替的な実施形態は、例えば、レベル１（Ｌ１）内部キャッシュまたは内部キャッシュの複数のレベル等、複数の命令およびデータの双方に対する１つの内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュ、ならびにコアおよび／もしくはプロセッサの外部にある外部キャッシュの組み合わせを含み得る。あるいは、キャッシュのすべては、コアおよび／またはプロセッサの外部にあってもよい。
【０１１３】
図１４Ａおよび図１４Ｂは、コアが、チップにおけるいくつかのロジックブロックのうちの１つ（同一タイプおよび／または複数の異なるタイプの他のコアを含む）である、より具体的な例示的インオーダコアアーキテクチャのブロック図を図示する。複数のロジックブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を介していくつかの固定機能ロジック、メモリＩ／Ｏインターフェース、および他の必要なＩ／Ｏロジックと通信する。
【０１１４】
図１４Ａは、本発明の複数の実施形態による、オンダイ相互接続ネットワーク２６０２、およびレベル２（Ｌ２）キャッシュ２６０４のローカルサブセットへの接続を伴うシングルプロセッサコアのブロック図である。一実施形態において、命令デコーダ２６００は、パックドデータ命令セット拡張を用いるｘ８６命令セットをサポートする。Ｌ１キャッシュ２６０６は、スカラユニットおよびベクトルユニットに至るキャッシュメモリへの複数の低レイテンシーアクセスを可能にする。一実施形態において（設計を簡略化するべく）、スカラユニット２６０８およびベクトルユニット２６１０は、別個の複数のレジスタセット（それぞれ、複数のスカラレジスタ２６１２および複数のベクトルレジスタ２６１４）を使用し、それらの間で転送されるデータは、メモリに書き込まれ、その後、レベル１（Ｌ１）キャッシュ２６０６からリードバックされる。本発明の代替的な複数の実施形態は、異なるアプローチ（例えば、１つのレジスタセットを使用し、またはライトバックおよびリードバックされることなく、２つのレジスタファイルの間で、データが転送されることを可能にする通信パスを含む）を使用し得る。
【０１１５】
Ｌ２キャッシュ２６０４のローカルサブセットは、複数の別個のローカルサブセットに分割され、１プロセッサコア毎に１つのグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ２６０４の自身のローカルサブセットへのダイレクトアクセスパスを有する。プロセッサコアにより読み取られるデータは、Ｌ２キャッシュサブセット２６０４内に格納され、自身の複数のローカルＬ２キャッシュサブセットにアクセスする他の複数のプロセッサコアと並列に迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、自身のＬ２キャッシュサブセット２６０４内に格納され、必要な場合に他の複数のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを保証する。リングネットワークは、双方向性であり、複数のプロセッサコア、Ｌ２キャッシュ、および他のロジックブロック等のエージェントがチップ内で互いに通信することを可能にする。各リングデータパスは、１方向毎に１０１２ビット幅である。
【０１１６】
図１４Ｂは、本発明の複数の実施形態による、図１４Ａにおけるプロセッサコアの一部の拡大図である。図１４Ｂは、Ｌ１キャッシュ２６０４のＬ１データキャッシュ２６０６Ａ部分、ならびにベクトルユニット２６１０および複数のベクトルレジスタ２６１４に関する更なる詳細を含む。具体的には、ベクトルユニット２６１０は、１６ワイドベクトル処理ユニット（ＶＰＵ）（１６ワイドＡＬＵ２６２８を参照されたい）であり、これは、整数命令、単精度浮動命令、および倍精度浮動命令のうちの１または複数を実行する。ＶＰＵは、スウィズルユニット２６２０を用いる複数のレジスタ入力、複数の数値変換ユニット２６２２Ａ〜Ｂを用いる数値変換、およびレプリケーションユニット２６２４を用いるメモリ入力に関するレプリケーションをスウィズルすることをサポートする。複数のライトマスクレジスタ２６２６は、複数のベクトル書き込みの結果をプレディケートすることを可能にする。
【０１１７】
図１５は、本発明の複数の実施形態による、２つ以上のコア、統合メモリコントローラ、および統合グラフィックスを有し得る、プロセッサ２７００のブロック図である。図１５における複数の実線のボックスは、シングルコア２７０２Ａを有するプロセッサ２７００、システムエージェント２７１０、１または複数のバスコントローラユニット２７１６のセットを図示するが、複数の破線ボックスの選択的追加は、複数のコア２７０２Ａ〜Ｎ、システムエージェントユニット２７１０における１または複数の統合メモリコントローラユニット２７１４のセット、および特定用途用ロジック２７０８を有する代替的なプロセッサ２７００を図示する。
【０１１８】
従って、プロセッサ２７００の複数の異なる実装は、１）統合グラフィックスおよび／またはサイエンティフィック（スループット）ロジック（１または複数のコアを含み得る）である特定用途用ロジック２７０８、および１または複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、２つの組み合わせ）である複数のコア２７０２Ａ〜Ｎを用いるＣＰＵ、２）主としてグラフィックスおよび／またはサイエンティフィック（スループット）用に意図される多数の特定用途用コアである複数のコア２７０２Ａ〜Ｎを用いるコプロセッサ、および３）多数の汎用インオーダコアである複数のコア２７０２Ａ〜Ｎを用いるコプロセッサを含み得る。従って、プロセッサ２７００は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループットのｍａｎｙ  ｉｎｔｅｇｒａｔｅｄ  ｃｏｒｅ（ＭＩＣ）コプロセッサ（３０またはそれ以上のコアを含む）、エンベデッドプロセッサ等の汎用プロセッサ、コプロセッサ、または特定用途用プロセッサであってもよい。プロセッサは、１または複数のチップ上に実装されてもよい。プロセッサ２７００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳ等、いくつかの処理技術のいずれかを用いる１または複数の基板の一部であってもよく、および／またはその上に実装されてもよい。
【０１１９】
メモリ階層は、複数のコア内の１または複数のレベルのキャッシュ、共有キャッシュユニット２７０６のセットまたは１もしくは複数、および複数の統合メモリコントローラユニット２７１４のセットに結合された外部メモリ（図示せず）を含む。複数の共有キャッシュユニット２７０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）等の１または複数の中間レベルのキャッシュ、キャッシュの他の複数のレベル、最後のレベルのキャッシュ（ＬＬＣ）、および／またはこれらの組み合わせを含み得る。一実施形態において、リングベースの相互接続ユニット２７１２は、統合グラフィックスロジック２７０８、複数の共有キャッシュユニット２７０６のセット、およびシステムエージェントユニット２７１０／統合メモリコントローラユニット２７１４を相互接続し、複数の代替的な実施形態は、そのような複数のユニットを相互接続する、任意の数の周知技術を使用し得る。一実施形態において、コヒーレンシは、１もしくは複数のキャッシュユニット２７０６と複数のコア２７０２Ａ〜Ｎとの間で維持される。
【０１２０】
いくつかの実施形態において、複数のコア２７０２Ａ〜Ｎのうち１または複数は、マルチスレッド化することができる。システムエージェント２７１０は、複数のコア２７０２Ａ〜Ｎを調整および操作するそれらのコンポーネントを含む。システムエージェントユニット２７１０は、例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含んでもよい。ＰＣＵは、複数のコア２７０２Ａ〜Ｎおよび統合グラフィックスロジック２７０８の電力状態を調整するのに必要とされるロジックおよび複数のコンポーネントであってもよく、またはこれらを含んでもよい。ディスプレイユニットは、１または複数の外部接続ディスプレイを駆動するためのものである。
【０１２１】
複数のコア２７０２Ａ〜Ｎは、アーキテクチャ命令セットの観点からは同種または異種であり得る。つまり、複数のコア２７０２Ａ〜Ｎのうち２またはそれ以上は、同一の命令セットを実行することができるが、他のものは、当該命令セットのサブセット、または異なる命令セットのみを実行し得る。
【０１２２】
図１６〜図２０は、複数の例示的コンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯用情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯式メディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための当技術分野で既知の他の複数のシステム設計および構成も、好適である。一般に、本明細書において開示されるプロセッサおよび／または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが、概ね好適である。
【０１２３】
ここで図１６を参照すると、本発明の一実施形態による、システム２８００のブロック図が示される。システム２８００は、１または複数のプロセッサ２８１０、２８１５を含み、１または複数のプロセッサ２８１０、２８１５は、コントローラハブ２８２０に結合され得る。一実施形態において、コントローラハブ２８２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ）２８９０および入力／出力ハブ（ＩＯＨ）２８５０（複数の別個のチップ上にあり得る）を含む。ＧＭＣＨ２８９０は、メモリコントローラおよびグラフィックスコントローラを含み、これらにメモリ２８４０およびコプロセッサ２８４５が結合される。ＩＯＨ２８５０は、入力／出力（Ｉ／Ｏ）デバイス２８６０をＧＭＣＨ２８９０に結合する。あるいは、メモリおよび複数のグラフィックスコントローラの１つまたは双方は、（本明細書において説明されるように）プロセッサ内に統合され、メモリ２８４０およびコプロセッサ２８４５は、プロセッサ２８１０に直接に結合され、シングルチップ内のコントローラハブ２８２０は、ＩＯＨ２８５０と結合される。
【０１２４】
複数の追加のプロセッサ２８１５の選択的性質は、図１６において破線で示される。各プロセッサ２８１０、２８１５は、本明細書において説明される複数の処理コアのうち１または複数を含み、いくつかのバージョンのプロセッサ２７００であり得る。
【０１２５】
メモリ２８４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、または２つの組み合わせであってもよい。少なくとも一実施形態については、コントローラハブ２８２０は、フロントサイドバス（ＦＳＢ）等のマルチドロップバス、ＱｕｉｃｋＰａｔｈ相互接続（ＱＰＩ）等のポイントツーポイントインターフェース、または類似の接続２８９５を介してプロセッサ２８１０、２８１５と通信する。
【０１２６】
一実施形態において、コプロセッサ２８４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、エンベデッドプロセッサ等の特定用途用プロセッサである。一実施形態において、コントローラハブ２８２０は、統合グラフィックスアクセラレータを含み得る。
【０１２７】
アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む、性能の測定基準の範囲の観点において、物理リソース２８１０、２８１５の間には様々な差異が存在し得る。
【０１２８】
一実施形態において、プロセッサ２８１０は、通常のタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令が、複数の命令に埋め込まれ得る。プロセッサ２８１０は、取り付けられたコプロセッサ２８４５により実行されるべきタイプであるものとして、これらのコプロセッサ命令を認識する。従って、プロセッサ２８１０は、コプロセッサバスまたは他の相互接続上で、これらのコプロセッサ命令（または複数のコプロセッサ命令を表す複数の制御信号）をコプロセッサ２８４５に発行する。コプロセッサ２８４５は、複数の受信済みコプロセッサ命令を受け取り、実行する。
【０１２９】
ここで図１７を参照すると、本発明の実施形態による第１のより具体的な例示的システム２９００のブロック図が示される。図１７に示されるように、マルチプロセッサシステム２９００は、ポイントツーポイント相互接続システムであり、第１のプロセッサ２９７０、およびポイントツーポイント相互接続２９５０を介して結合される第２のプロセッサ２９８０を含む。プロセッサ２９７０および２９８０のそれぞれは、いくつかのバージョンのプロセッサ２７００であり得る。本発明の一実施形態において、プロセッサ２９７０および２９８０はそれぞれ、プロセッサ２８１０および２８１５であるが、コプロセッサ２９３８は、コプロセッサ２８４５である。別の実施形態において、プロセッサ２９７０および２９８０はそれぞれ、プロセッサ２８１０およびコプロセッサ２８４５である。
【０１３０】
統合メモリコントローラ（ＩＭＣ）ユニット２９７２および２９８２をそれぞれ含む、プロセッサ２９７０および２９８０が示される。また、プロセッサ２９７０は、複数のバスコントローラユニットの一部として、ポイントツーポイント（Ｐ―Ｐ）インターフェース２９７６および２９７８を含む。同様に、第２のプロセッサ２９８０は、Ｐ−Ｐインターフェース２９８６および２９８８を含む。プロセッサ２９７０、２９８０は、複数のＰ―Ｐインターフェース回路２９７８、２９８８を用いて、ポイントツーポイント（Ｐ―Ｐ）インターフェース２９５０を介して情報を交換し得る。図１７に示されるように、ＩＭＣ２９７２および２９８２は、複数のプロセッサをそれぞれのメモリ、すなわち、メモリ２９３２およびメモリ２９３４に結合させるが、メモリ２９３２およびメモリ２９３４は、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。
【０１３１】
プロセッサ２９７０、２９８０はそれぞれ、ポイントツーポイントインターフェース回路２９７６、２９９４、２９８６、２９９８を用いて、個々のＰ−Ｐインターフェース２９５２、２９５４を介してチップセット２９９０と情報を交換し得る。チップセット２９９０は、任意選択で、高性能インターフェース２９３９を介してコプロセッサ２９３８と情報を交換してもよい。一実施形態において、コプロセッサ２９３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、エンベデッドプロセッサ等の特定用途用プロセッサである。
【０１３２】
共有キャッシュ（図示せず）は、どちらかのプロセッサ内または双方のプロセッサの外側に含まれるが、Ｐ―Ｐ相互接続を介して複数のプロセッサとなおも接続され得、従って、プロセッサが低電力モードに置かれると、どちらかまたは双方のプロセッサのローカルキャッシュ情報は、共有キャッシュ内に格納され得る。チップセット２９９０は、インターフェース２９９６を介して第１のバス２９１６に結合され得る。一実施形態において、第１のバス２９１６は、周辺構成要素相互接続（ＰＣＩ）バス、またはＰＣＩ  Ｅｘｐｒｅｓｓバスまたは別の第３世代Ｉ／Ｏ相互接続バス等のバスであり得るが、本発明の範囲は、そのようには限定されない。
【０１３３】
図１７に示されるように、様々なＩ／Ｏデバイス２９１４は、第１のバス２９１６を第２のバス２９２０に結合するバスブリッジ２９１８と共に第１のバス２９１６に結合され得る。一実施形態において、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックスアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット等）、フィールドプログラマブルゲートアレイ、またはその他のプロセッサ等、１または複数の追加のプロセッサ２９１５は、第１のバス２９１６に結合される。一実施形態において、第２のバス２９２０は、低ピンカウント（ＬＰＣ）バスであり得る。様々なデバイスは、一実施形態において、例えば、キーボードおよび／またはマウス２９２２、通信デバイス２９２７、ならびに複数の命令／コードおよびデータ２９３０を含み得るディスクドライブもしくは他の大容量ストレージデバイス等のストレージユニット２９２８を含む第２のバス２９２０に結合され得る。更に、オーディオＩ／Ｏ２９２４は、第２のバス２９２０に結合されてもよい。他の複数のアーキテクチャが可能であることに留意されたい。例えば、図１７のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
【０１３４】
ここで図１８を参照すると、本発明の実施形態による、第２のより具体的な例示的システム３０００のブロック図が示される。図１８および図１９における複数の同一要素は、複数の同一の参照番号を有し、図１７の複数の一定の態様は、図１８の他の複数の態様を不明瞭にするのを避けるべく、図１８から省略されている。図１８は、プロセッサ２９７０、２９８０が統合メモリおよびＩ／Ｏ制御ロジック（「ＣＬ」）２９７２および２９８２をそれぞれ含み得ることを図示する。従って、ＣＬ２９７２、２９８２は、統合メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図１８は、メモリ２９３２、２９３４のみがＣＬ２９７２、２９８２に結合されるのみならず、複数のＩ／Ｏデバイス３０１４も制御ロジック２９７２、２９８２に結合されることを図示する。複数のレガシーＩ／Ｏデバイス３０１５は、チップセット２９９０に結合される。
【０１３５】
ここで図１９を参照すると、本発明の実施形態による、ＳｏＣ３１００のブロック図が示される。図１５における複数の類似の要素は、同一の参照番号を有する。また、複数の破線ボックスは、より高度なＳｏＣにおける複数の選択的特徴である。図１９において、相互接続ユニット３１０２は、１もしくは複数のコア２０２Ａ〜Ｎおよび共有キャッシュユニット２７０６のセットを含むアプリケーションプロセッサ３１１０、システムエージェントユニット２７１０、バスコントローラユニット２７１６、統合メモリコントローラユニット２７１４、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得るコプロセッサ３１２０のセットまたは１もしくは複数、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット３１３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット３１３２、および１または複数の外部ディスプレイを結合するディスプレイユニット３１４０に結合される。一実施形態において、コプロセッサ３１２０は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、エンベデッドプロセッサ等の特定用途用プロセッサを含む。
【０１３６】
本明細書において開示されるメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせで実装され得る。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性メモリ、ならびに／または複数のストレージ要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを有する複数のプログラマブルシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装され得る。
【０１３７】
図１７で図示されるコード２９３０等のプログラムコードは、複数の命令を入力し、本明細書において開示される複数の関数を実行し、出力情報を生成するべく適用され得る。出力情報は、既知の様式で、１または複数の出力デバイスに適用され得る。本願において、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサ等のプロセッサを有するいずれのシステムも含む。
【０１３８】
プログラムコードは、処理システムと通信するべく、ハイレベルプロシージャ型またはオブジェクト指向プログラミング言語で実装されてもよい。また、プログラムコードは、所望であれば、アセンブリ言語または機械語で実装されてもよい。実際には、本明細書において説明される複数のメカニズムは、範囲において、いずれの特定のプログラミング言語にも限定されない。いずれの場合にも、言語は、コンパイル型言語またはインタープリタ型言語であってもよい。
【０１３９】
少なくとも一実施形態の１または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上に格納された複数の代表的命令により実装され得、複数の代表的命令は、機械により読み取られると、機械に、本明細書において説明される複数の技術を実行するロジックを作成させる。「ＩＰコア」として既知のそのような複数の表現は、有形機械可読媒体上に格納され、様々な顧客、または実際にロジックまたはプロセッサを作製する複数の製造機械にロードする複数の製造設備に提供され得る。
【０１４０】
そのような機械可読ストレージ媒体としては、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ―ＲＯＭ）、書き換え可能コンパクトディスク（ＣＤ―ＲＷ）、および光磁気ディスク等、その他のタイプのディスクを含むストレージ媒体、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、および相変化メモリ（ＰＣＭ）等の半導体デバイス、磁気もしくは光カード、または複数の電子命令を格納するのに好適なその他のタイプの媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形な複数の構成の物品が挙げられ得るが、これらに限定されない。
【０１４１】
従って、本発明の複数の実施形態は、本明細書において説明される複数の構造、回路、装置、プロセッサ、および／またはシステムの特徴を定義する、ハードウェア記述言語（ＨＤＬ）等の複数の命令または設計データを含む、非一時的で有形の機械可読媒体も含む。そのような複数の実施形態は、プログラム製品とも呼ばれ得る。
【０１４２】
いくつかの場合に、命令変換器は、ソース命令セットからターゲット命令セットに、命令を変換するべく使用され得る。例えば、命令変換器は、命令を、コアにより処理される１または複数の他の命令にトランスレート（例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いる）、モーフィング、エミュレート、または変換し得る。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装され得る。命令変換器は、プロセッサ上にあってもよく、プロセッサから離れてもよく、または一部がプロセッサ上にあり、一部がプロセッサから離れてもよい。
【０１４３】
図２０は、本発明の複数の実施形態による、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の使用を対比させるブロック図である。図示される実施形態において、命令変換器は、ソフトウェア命令変換器であるが、別法では、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装され得る。図２０は、ｘ８６コンパイラ３２０４を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコア３２１６を用いるプロセッサによりネイティブに実行され得るｘ８６バイナリコード３２０６を生成し得る、ハイレベル言語３２０２のプログラムを示す。少なくとも１つのｘ８６命令セットコア３２１６を用いるプロセッサは、少なくとも１つのｘ８６命令セットコアを用いるインテル（登録商標）プロセッサと実質的に同一の結果を実現するべく、（１）インテル（登録商標）ｘ８６命令セットコアの命令セットの実質的部分、または（２）少なくとも１つのｘ８６命令セットコアを用いるインテル（登録商標）プロセッサ上で起動することを目的とする、複数のオブジェクトコードバージョンの複数のアプリケーションまたは他のソフトウェアを互換的に実行または処理することにより、少なくとも１つのｘ８６命令セットコアを用いるインテル（登録商標）プロセッサと実質的に同一の複数の機能を実行し得るいずれのプロセッサも表す。ｘ８６コンパイラ３２０４は、追加のリンケージ処理を用い、もしくは用いずに、少なくとも１つのｘ８６命令セットコア３２１６を用いるプロセッサ上で実行され得る、ｘ８６バイナリコード３２０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図２０は、代替的な命令セットのコンパイラ３２０８を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコア３２１４を用いないプロセッサ（例えば、カルフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｙのＭＩＰＳ命令セットを実行し、および／またはカリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇのＡＲＭ命令セットを実行する複数のコアを用いるプロセッサ）によりネイティブに実行され得る、代替的な命令セットバイナリコード３２１０を生成し得る、ハイレベル言語３２０２のプログラムを示す。命令変換器３２１２は、ｘ８６バイナリコード３２０６を、ｘ８６命令セットコア３２１４を用いないプロセッサによりネイティブに実行され得るコードに変換するべく、使用される。この変換済みコードは、代替的な命令セットバイナリコード３２１０と同一である可能性は低い。これを行うことができる命令変換器は、作製するのが困難なためである。しかし、変換済みコードは、汎用オペレーションを遂行し、代替的な命令セットの複数の命令からなるであろう。従って、命令変換器３２１２は、エミュレーション、シミュレーション、またはその他の処理により、ｘ８６命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがｘ８６バイナリコード３２０６を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
【０１４４】
一実施形態によれば、プロセッサは、第１のオペランド、第２のオペランド、および第３のオペランドを有し、第１のオペランドは、４つのＳＨＡ状態を格納する第１の格納位置を指定し、第２のオペランドは、複数のＳＨＡ１メッセージ入力を、第５のＳＨＡ１状態と組み合わせて格納する第２の格納位置を指定する、ＳＨＡ１ハッシュアルゴリズムを処理する第１の命令を受信するための命令デコーダを備える。プロセッサは、命令デコーダに結合され、第１の命令に応答して、第３のオペランドの指定された組み合わせの論理関数を用いて、第１および第２のオペランドから得られたＳＨＡ１状態およびメッセージ入力に、複数のＳＨＡ１ラウンドオペレーションの少なくとも４つのラウンドを実行する実行ユニットを更に備える。第１のオペランドおよび第２のオペランドは、少なくとも１２８ビットを有する第１のレジスタを指定する。第１の格納位置は、複数のＳＨＡ１状態Ａ、Ｂ、Ｃ、およびＤを格納する。第５のＳＨＡ１状態は、ＳＨＡ１状態Ｅである。複数のＳＨＡ１ラウンドオペレーションのうち少なくとも４つのラウンドの結果は、第１のオペランドにより示される第１の格納位置に格納される。結果は、新しい複数のＳＨＡ１状態Ａ、Ｂ、Ｃ、およびＤを表す。命令デコーダは、第４の格納位置を指定する第４のオペランドおよび第５の格納位置を指定する第５のオペランドを有する、第２の命令を受信し、実行ユニットは、第２の命令に応答して、第４の格納位置から得られた先行する複数のメッセージ入力の第１のセット、および第５の格納位置から得られた先行する複数のメッセージ入力の第２のセットに基づいて、複数のメッセージスケジューリングオペレーションの第１の部分を実行し、中間結果を第４の格納位置に格納するように構成される。命令デコーダは、第６の格納位置を指定する第６のオペランドおよび第７の格納位置を指定する第７のオペランドを有する第３の命令を受信し、実行ユニットは、第３の命令に応答して、第６の格納位置から得られた先行する複数のメッセージ入力の第３のセットおよび第７の格納位置から得られた先行する複数のメッセージ入力の第４のセットと組み合わせた中間結果に基づいて、複数のメッセージスケジューリングオペレーションの第２の部分を実行し、ＳＨＡ１アルゴリズムの次の複数のラウンド中に実行されるＳＨＡ１アルゴリズムの複数のラウンドオペレーションのために次の複数のメッセージ入力を生成するように構成される。
【０１４５】
上記の詳細な説明のいくつかの部分は、コンピュータメモリ内のデータビットに対する複数のオペレーションの複数のアルゴリズムおよび表現の観点から提示されている。これらのアルゴリズムの記載および表現は、他の当業者に作業の実態を最も有効に伝達するべくデータ処理の当業者により用いられる方法である。アルゴリズムは、ここでは、通常、所望の結果をもたらす、複数のオペレーションの自己矛盾のないシーケンスと考えられる。複数のオペレーションは、複数の物理量の物理的操作を要求するものである。
【０１４６】
しかし、これらおよび類似の用語の全ては、適切な物理量に関連するものであり、これらの量に適用される便宜的標記にすぎないことを念頭に置かれたい。上述から明らかなものとして具体的に記述されない限り、本明細書全体を通して、以下の特許請求の範囲において記載されるもの等の用語を使用する論述は、コンピュータシステムの複数のレジスタおよびメモリ内で物理（電子）量として表されるデータを操作し、複数のコンピュータシステムメモリもしくはレジスタ、または他のそのような情報ストレージ送信装置またはディスプレイデバイス内で物理量として同様に表される他のデータに変換する、コンピュータシステムまたは類似の電子コンピューティングデバイスのアクションおよび複数の処理を指すことを理解されたい。
【０１４７】
複数の図において示される複数の技術は、１または複数の電子デバイス上に格納され、実行されるコードおよびデータを用いて実装され得る。複数のそのような電子デバイスは、非一時的コンピュータ可読ストレージ媒体（例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ）および一時的コンピュータ可読伝送媒体（例えば、電気的、光、音響、もしくは搬送波、赤外線信号、デジタル信号等の他の形態の伝搬信号）等のコンピュータ可読媒体を用いて、（内的に、および／またはネットワークを介する他の複数の電子デバイスを用いて）コードおよびデータを格納および通信する。
【０１４８】
上記の複数の図に示される複数の処理および方法は、ハードウェア（例えば、回路、専用ロジック等）、ファームウェア、ソフトウェア（例えば、非一時的コンピュータ可読媒体上で実施される）、または双方の組み合わせを備える処理ロジックにより実行されてもよい。複数の処理または方法は、いくつかのシーケンシャルオペレーションの観点から説明されるが、説明される複数のオペレーションのうちいくつかは、異なる順序で実行され得ることを理解されたい。更に、いくつかのオペレーションは、連続してではなく、並列に実行され得る。
【０１４９】
上記の明細書において、本発明の複数の実施形態は、特定の例示的実施形態を参照して説明されている。以下に記載される本発明の広い趣旨および範囲を逸脱することなく、これに様々な変更が行われ得ることは明白であろう。従って、明細書および複数の図面は、限定的意味ではなく、例示的意味で顧慮されるものである。
【図１Ａ】
2019071075.tif 000004
【図１Ｂ】
2019071075.tif 000005
【図１Ｃ】
2019071075.tif 000006
【図２】
2019071075.tif 000007
【図３】
2019071075.tif 000008
【図４】
2019071075.tif 000009
【図５】
2019071075.tif 000010
【図６】
2019071075.tif 000011
【図７】
2019071075.tif 000012
【図８】
2019071075.tif 000013
【図９Ａ】
2019071075.tif 000014
【図９Ｂ】
2019071075.tif 000015
【図９Ｃ】
2019071075.tif 000016
【図１０Ａ】
2019071075.tif 000017
【図１０Ｂ】
2019071075.tif 000018
【図１１Ａ】
2019071075.tif 000019
【図１１Ｂ】
2019071075.tif 000020
【図１１Ｃ】
2019071075.tif 000021
【図１１Ｄ】
2019071075.tif 000022
【図１２】
2019071075.tif 000023
【図１３Ａ】
2019071075.tif 000024
【図１３Ｂ】
2019071075.tif 000025
【図１４Ａ】
2019071075.tif 000026
【図１４Ｂ】
2019071075.tif 000027
【図１５】
2019071075.tif 000028
【図１６】
2019071075.tif 000029
【図１７】
2019071075.tif 000030
【図１８】
2019071075.tif 000031
【図１９】
2019071075.tif 000032
【図２０】
2019071075.tif 000033
【手続補正書】
【提出日】平成31年1月4日(2019.1.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１のオペランド、第２のオペランド、および第３のオペランドを有し、前記第１のオペランドは、４つのＳＨＡ１状態を格納する第１の格納位置を指定し、前記第２のオペランドは、複数のＳＨＡ１メッセージ入力を、第５のＳＨＡ１状態と組み合わせて格納する第２の格納位置を指定する、ＳＨＡ１ハッシュアルゴリズムを処理するための第１の命令を受信するための命令デコーダと、
前記命令デコーダに結合され、前記第１の命令に応答して、前記第３のオペランドにおいて指定された組み合わせの論理関数を用いて、前記第１の格納位置および前記第２の格納位置から得られた複数のＳＨＡ１状態および前記複数のＳＨＡ１メッセージ入力に、複数のＳＨＡ１ラウンドオペレーションのうち少なくとも４つのラウンドを実行する実行ユニットとを備える、プロセッサ。
【手続補正書】
【提出日】平成31年1月10日(2019.1.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メッセージスケジューリングオペレーションの第２の部分の性能、デスティネーション及び第１のソースの両方であるオペランドの識別子、及び第２のソースオペランドの識別子を示すオペコードを有する命令をデコードするデコード回路と、
前記オペコードに従ってデコードされた前記命令を実行して、
前記第１のソースのビット１２７：９６の前記第２のソースのビット９５：６４との排他的論理和（ＸＯＲ）をとって第１結果を生成し、
前記第１結果を１だけ左に循環して第５結果を生成し、
前記第１のソースのビット９５：６４の前記第２のソースのビット６３：３２との排他的論理和（ＸＯＲ）をとって第２結果を生成し、
前記第２結果を１だけ左に循環して第６結果を生成し、
前記第１のソースのビット６３：３２の前記第２のソースのビット３１：０との排他的論理和（ＸＯＲ）をとって第３結果を生成し、
前記第３結果を１だけ左に循環して第７結果を生成し、
前記第１のソースのビット３１：０の前記第１結果との排他的論理和（ＸＯＲ）をとって第４結果を生成し、
前記第４結果を１だけ左に循環して第８結果を生成し、
前記第５結果を前記デスティネーションのビット１２７：９６に、前記第６結果を前記デスティネーションのビット９５：６４に、前記第７結果を前記デスティネーションのビット６３：３２に、前記第８結果を前記デスティネーションのビット３１：０にストアする、
実行回路と、
を備えるプロセッサ。
【請求項２】
前記デスティネーション及び第１のソースオペランドは、ＸＭＭレジスタである、請求項１に記載のプロセッサ。
【請求項３】
前記デスティネーション及び第１のソースオペランドは、１２８ビットレジスタである、請求項２に記載のプロセッサ。
【請求項４】
前記第２のソースオペランドは、ＸＭＭレジスタである、請求項１から３のいずれか一項に記載のプロセッサ。
【請求項５】
前記ＸＭＭレジスタは、１２８ビットレジスタである、請求項４に記載のプロセッサ。
【請求項６】
前記第２のソースオペランドは、１２８ビットを格納するメモリ位置である、請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
メッセージスケジューリングオペレーションの第２の部分の性能、デスティネーション及び第１のソースの両方であるオペランドの識別子、及び第２のソースオペランドの識別子を示すオペコードを有する命令をデコードする段階と、
前記オペコードに従ってデコードされた前記命令を実行して、
前記第１のソースのビット１２７：９６の前記第２のソースのビット９５：６４との排他的論理和（ＸＯＲ）をとって第１結果を生成し、
前記第１結果を１だけ左に循環して第５結果を生成し、
前記第１のソースのビット９５：６４の前記第２のソースのビット６３：３２との排他的論理和（ＸＯＲ）をとって第２結果を生成し、
前記第２結果を１だけ左に循環して第６結果を生成し、
前記第１のソースのビット６３：３２の前記第２のソースのビット３１：０との排他的論理和（ＸＯＲ）をとって第３結果を生成し、
前記第３結果を１だけ左に循環して第７結果を生成し、
前記第１のソースのビット３１：０の前記第１結果との排他的論理和（ＸＯＲ）をとって第４結果を生成し、
前記第４結果を１だけ左に循環して第８結果を生成し、
前記第５結果を前記デスティネーションのビット１２７：９６に、前記第６結果を前記デスティネーションのビット９５：６４に、前記第７結果を前記デスティネーションのビット６３：３２に、前記第８結果を前記デスティネーションのビット３１：０にストアする、
段階と、
を備える方法。
【請求項８】
前記デスティネーション及び第１のソースオペランドは、ＸＭＭレジスタである、請求項７に記載の方法。
【請求項９】
前記デスティネーション及び第１のソースオペランドは、１２８ビットレジスタである、請求項８に記載の方法。
【請求項１０】
前記第２のソースオペランドは、ＸＭＭレジスタである、請求項７から９のいずれか一項に記載の方法。
【請求項１１】
前記ＸＭＭレジスタは、１２８ビットレジスタである、請求項１０に記載の方法。
【請求項１２】
前記第２のソースオペランドは、１２８ビットを格納するメモリ位置である、請求項７から１１のいずれか一項に記載の方法。