(57)【要約】  プロセッサは、命令を復号する復号ユニットを含む。命令は、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドを示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す。実行ユニットは、復号ユニットに結合する。実行ユニットは、命令に応答して、結果を格納するように動作可能である。結果は、第１の６４ビット値に第２の６４ビット値を乗算し、第３の６４ビット値を加算し、第４の６４ビット値を加算したものを含む。実行ユニットは、命令により示される第１の６４ビットのデスティネーション・オペランドに、結果の半分の最下位６４ビットを格納してよく、命令により示される第２の６４ビットのデスティネーション・オペランドに、結果の半分の最上位６４ビットを格納してよい。
2017503232.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサであって、
命令を復号する復号ユニットであって、前記命令は、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドを示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す、復号ユニットと、
前記復号ユニットに結合される実行ユニットであって、前記実行ユニットは、前記命令に応答して、前記第１の６４ビット値に前記第２の６４ビット値を乗算し、前記第３の６４ビット値を加算し、前記第４の６４ビット値を加算したものを含む結果を格納するように動作可能である実行ユニットと
を備え、
前記実行ユニットは、前記命令により示される第１の６４ビットのデスティネーション・オペランドに、前記結果の半分の最下位６４ビットを格納し、前記命令により示される第２の６４ビットのデスティネーション・オペランドに、前記結果の半分の最上位６４ビットを格納する、
プロセッサ。
【請求項２】
前記復号ユニットは、ＲＳＡアルゴリズム加速命令を有する前記命令を復号する、
請求項１に記載のプロセッサ。
【請求項３】
前記復号ユニットは、汎用レジスタＲＡＸとして、前記第２の６４ビット値を有する前記第２の６４ビットのソースオペランドを暗黙的に示す前記命令を復号する、
請求項１又は２に記載のプロセッサ。
【請求項４】
前記復号ユニットは、汎用レジスタＲＤＸとして、前記結果の前記半分の最上位６４ビットを有する前記第２の６４ビットのデスティネーション・オペランドを暗黙的に示す前記命令を復号する、
請求項１から３のいずれか１項に記載のプロセッサ。
【請求項５】
前記復号ユニットは、汎用レジスタＲＡＸとして、前記第２の６４ビット値を有する前記第２の６４ビットのソースオペランドを暗黙的に示し、汎用レジスタＲＤＸとして、前記結果の前記半分の最上位６４ビットを有する前記第２の６４ビットのデスティネーション・オペランドを暗黙的に示す前記命令を復号する、
請求項１に記載のプロセッサ。
【請求項６】
前記復号ユニットは、前記結果の前記半分の最下位６４ビットを格納する前記第１の６４ビットのデスティネーション・オペランドと暗黙的に同じストレージ位置となる、前記第４の６４ビット値を有する前記第４の６４ビットのソースオペランドを明示的に指定する前記命令を復号する、
請求項１から５のいずれか１項に記載のプロセッサ。
【請求項７】
前記復号ユニットは、前記結果の前記半分の最上位６４ビットを格納する前記第２の６４ビットのデスティネーション・オペランドと暗黙的に同じストレージ位置となる、前記第３の６４ビット値を有する前記第３の６４ビットのソースオペランドを暗黙的に示す前記命令を復号する、
請求項１から６のいずれか１項に記載のプロセッサ。
【請求項８】
前記ストレージ位置は、汎用レジスタを含む、
請求項７に記載のプロセッサ。
【請求項９】
前記復号ユニットは、２つのオペランドのみを明示的に指定するフォーマットを有する前記命令を復号する、
請求項１から８のいずれか１項に記載のプロセッサ。
【請求項１０】
前記復号ユニットは、
前記第１の６４ビット値を有する前記第１の６４ビットのソースオペランドを明示的に指定し、
前記第２の６４ビット値を有する前記第２の６４ビットのソースオペランドを暗黙的に示し、
前記第３の６４ビット値を有する前記第３の６４ビットのソースオペランドを暗黙的に示し、
前記第４の６４ビット値を有する前記第４の６４ビットのソースオペランドを明示的に指定し、
前記第４の６４ビット値を有する前記第４の６４ビットのソースオペランドのために用いられるものと同じストレージ位置となる、前記結果の前記半分の最下位６４ビットを格納する前記第１の６４ビットのデスティネーション・オペランドを暗黙的に示し、
前記第３の６４ビット値を有する前記第３の６４ビットのソースオペランドのために用いられるものと同じストレージ位置となる、前記結果の前記半分の最上位６４ビットを格納する前記第２の６４ビットのデスティネーション・オペランドを暗黙的に示す
前記命令を復号する、
請求項９に記載のプロセッサ。
【請求項１１】
前記実行ユニットは、前記第３の６４ビット値と、前記第１の６４ビット値及び第２の６４ビット値の積との和を格納する１２８ビットのストレージ位置を有する、
請求項１から１０のいずれか１項に記載のプロセッサ。
【請求項１２】
前記実行ユニットは、前記第３の６４ビット値と、前記第１の６４ビット値及び前記第２の６４ビット値を乗算した１２８ビットの積とを表す値を加算する１２８ビットの加算器を有する、
請求項１から１１項のいずれか１項に記載のプロセッサ。
【請求項１３】
プロセッサにおける方法であって、前記方法は、
命令を受信する段階であって、前記命令は、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドを示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す、段階と、
前記命令に応答して、結果を格納する段階であって、前記結果は、前記第１の６４ビット値に前記第２の６４ビット値を乗算し、第３の６４ビット値を加算し、前記第４の６４ビット値を加算したものを含む、段階と
を備え、
前記結果を格納する段階は、前記命令により示される第１の６４ビットのデスティネーション・オペランドに、前記結果の半分の最下位６４ビットを格納する段階と、前記命令により示される第２の６４ビットのデスティネーション・オペランドに、前記結果の半分の最上位６４ビットを格納する段階とを含む、
方法。
【請求項１４】
前記方法は、ＲＳＡアルゴリズムのＯｐｅｎＳＳＬライブラリ実行の間に実行される、
請求項１３に記載の方法。
【請求項１５】
前記方法は、前記ＲＳＡアルゴリズムの前記ＯｐｅｎＳＳＬライブラリ実行の関数ｂｎ＿ｍｕｌ＿ｍｏｎｔの間に実行される、
請求項１４に記載の方法。
【請求項１６】
前記受信する段階は、汎用レジスタＲＡＸとして、前記第２の６４ビット値を有する前記第２の６４ビットのソースオペランドを暗黙的に示す前記命令を受信する段階を含む、
請求項１３から１５のいずれか１項に記載の方法。
【請求項１７】
前記受信する段階は、汎用レジスタＲＤＸとして、前記結果の前記半分の最上位６４ビットを有する前記第２の６４ビットのデスティネーション・オペランドを暗黙的に示す前記命令を受信する段階を含む、
請求項１３から１６のいずれか１項に記載の方法。
【請求項１８】
前記受信する段階は、汎用レジスタＲＡＸとして、前記第２の６４ビット値を有する前記第２の６４ビットのソースオペランドを暗黙的に示し、汎用レジスタＲＤＸとして、前記結果の前記半分の最上位６４ビットを有する前記第２の６４ビットのデスティネーション・オペランドを暗黙的に示す前記命令を受信する段階を含む、
請求項１３から１７のいずれか１項に記載の方法。
【請求項１９】
前記受信する段階は、前記結果の前記半分の最下位６４ビットを格納するのに用いられる前記第１の６４ビットのデスティネーション・オペランドと暗黙的に同じストレージ位置でもある、前記第４の６４ビット値を有する前記第４の６４ビットのソースオペランドを明示的に指定する前記命令を受信する段階を含む、
請求項１３から１８いずれか１項に記載の方法。
【請求項２０】
前記受信する段階は、前記結果の前記半分の最上位６４ビットを格納するのに用いられる前記第２の６４ビットのデスティネーション・オペランドと暗黙的に同じストレージ位置でもある、前記第３の６４ビット値を有する前記第３の６４ビットのソースオペランドを暗黙的に示す前記命令を受信する段階を含む、
請求項１３から１９のいずれか１項に記載の方法。
【請求項２１】
前記受信する段階は、２つのオペランドのみを明示的に指定するフォーマットを有する前記命令を受信する段階を含む、
請求項１３から２０のいずれか１項に記載の方法。
【請求項２２】
プロセッサであって、
複数の汎用レジスタと、
ＲＳＡアルゴリズム加速命令を復号する復号ユニットであって、前記ＲＳＡアルゴリズム加速命令は、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドとして、汎用レジスタＲＡＸを暗黙的に示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す、復号ユニットと、
前記復号ユニットと前記複数の汎用レジスタに結合される実行ユニットであって、前記ＲＳＡアルゴリズム加速命令に応答して、前記第１の６４ビット値に前記第２の６４ビット値を乗算し、前記第３の６４ビット値を加算し、前記第４の６４ビット値を加算したものを含む結果を格納するように動作可能な実行ユニットと
を備え、
前記実行ユニットは、６４ビットのソースオペラントと同じストレージ位置にある、前記命令により示される第１の６４ビットのデスティネーション・オペランドに、前記結果の半分の最下位６４ビットを格納し、前記命令により示される第２の６４ビットのデスティネーション・オペランドとして、暗黙的に示される汎用レジスタＲＤＸに、前記結果の半分の最上位６４ビットを格納する、
プロセッサ。
【請求項２３】
前記汎用レジスタＲＤＸは、前記第３の６４ビット値を格納するのにも用いられ、
前記結果の前記半分の最下位６４ビットを格納するのに用いられる前記ストレージ位置は、前記第４の６４ビット値を格納するのにも用いられる、
請求項２２に記載のプロセッサ。
【請求項２４】
複数の命令を処理するシステムであって、
相互接続と
前記相互接続に結合されるプロセッサであって、前記プロセッサは、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドを示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す命令を受信し、前記プロセッサは、前記命令に応答して、前記第１の６４ビット値に前記第２の６４ビット値を乗算し、前記第３の６４ビット値を加算し、前記第４の６４ビット値を加算したものを含む結果を格納するように動作可能であり、前記プロセッサは、前記命令により示される第１の６４ビットのデスティネーション・オペランドに、前記結果の半分の最下位６４ビットを格納し、前記命令により示される第２の６４ビットのデスティネーション・オペランドに、前記結果の半分の最上位６４ビットを格納する、プロセッサと、
前記相互接続に結合されるダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）であって、前記ＤＲＡＭは、アレイの複数のパラメータを更新するよう、前記命令を用いるＲＳＡアルゴリズムのＯｐｅｎＳＳＬ実装を格納するＤＲＡＭと
を備える
システム。
【請求項２５】
前記命令は、第１の汎用レジスタとして、前記第２の６４ビット値を有する前記第２の６４ビットのソースオペランドを暗黙的に示し、第２の異なる汎用レジスタとして、前記結果の前記半分の最上位６４ビットを有する前記第２の６４ビットのデスティネーション・オペランドを暗黙的に示す、
請求項２４に記載のシステム。
【請求項２６】
非一時的機械可読記憶媒体を備える製造物品であって、
前記非一時的機械可読記憶媒体は、命令を格納し、
前記命令は、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドを示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示し、
前記命令は、機械により実行された場合、前記機械に、前記第１の６４ビット値に前記第２の６４ビット値を乗算し、前記第３の６４ビット値を加算し、前記第４の６４ビット値を加算したものを含む結果を格納する段階を含む複数のオペレーションを実行させるように動作可能であり、
前記結果の半分の最下位６４ビットは、前記命令により示される第１の６４ビットのデスティネーション・オペランドに、格納され、
前記結果の半分の最上位６４ビットは、前記命令により示される第２の６４ビットのデスティネーション・オペランドに、格納される、
製造物品。
【請求項２７】
前記命令は、第１の汎用レジスタとして、前記第２の６４ビット値を有する前記第２の６４ビットのソースオペランドを暗黙的に示し、第２の異なる汎用レジスタとして、前記結果の前記半分の最上位６４ビットを有する前記第２の６４ビットのデスティネーション・オペランドを暗黙的に示す、
請求項２６に記載の物品。
【請求項２８】
請求項１３から２１のいずれか１項に記載の方法を実行するように動作可能なプロセッサ又は他の装置。
【請求項２９】
請求項１３から２１のいずれか１項に記載の方法を実行するための手段を含むプロセッサ又は他の装置。
【請求項３０】
複数のモジュール、複数のユニット、ロジック、回路、手段、又はそれらの任意の組み合わせを含む、請求項１３から２１のいずれか１項に記載の方法を実行するプロセッサ又は他の装置。
【請求項３１】
命令を任意的に格納する、あるいは提供する非一時的機械可読媒体を任意的に備える製造物品であって、
前記命令は、プロセッサ、コンピュータシステム、又は他の機械のうちの少なくとも１つにより実行された場合、前記機械に、請求項１３から２１のいずれか１項に記載の方法を実行させるように動作可能である、
製造物品。
【請求項３２】
コンピュータシステム又は他の電子デバイスであって、
相互接続と、
前記相互接続に結合されるプロセッサと、
前記相互接続に結合される、ＤＲＡＭ，グラフィクスチップ、無線通信チップ、相変化メモリ、及びビデオカメラから選択される少なくとも１つのコンポーネントと、
を備え、
前記コンピュータシステム又は他の電子デバイスは、請求項１３から２１のいずれか１項に記載の方法を実行するように動作可能である、
コンピュータシステム又は他の電子デバイス。
【請求項３３】
１つ又は複数のオペレーション、若しくは本明細書に実質的に記載されているような任意の方法を実行するように動作可能なプロセッサ又は他の装置。
【請求項３４】
１つ又は複数のオペレーション又は本明細書に実質的に記載されているような任意の方法を実行するための手段を備えるプロセッサ又は他の装置。
【請求項３５】
本明細書に実質的に記載されている複数の命令のうちのいずれかを実行するプロセッサ又は他の装置。
【請求項３６】
本明細書に実質的に記載されている複数の命令のうちのいずれかを実行するための手段を備えるプロセッサ又は他の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に記載の複数の実施形態は、概して、プロセッサに関する。特に、本明細書に記載の複数の実施形態は、概して、暗号アルゴリズムを加速する命令を実行するプロセッサに関する。
【背景技術】
【０００２】
ＲＳＡ（Ｒｏｎ  Ｒｉｖｅｓｔ，  Ａｄｉ  Ｓｈａｍｉｒ，ａｎｄ  Ｌｅｏｎａｒｄ  Ａｄｌｅｍａｎ）は、周知で広く用いられている公開鍵暗号化アルゴリズムである。ＲＳＡアルゴリズムは、鍵生成、暗号化、及び復号化により構成される。ＲＳＡは、ＲＳＡ公開鍵とＲＳＡ秘密鍵とを含むＲＳＡ鍵対に基づく。ＲＳＡ公開鍵は、広く公に（例えば、全ての人に）知られてよく、メッセージを暗号化するのに用いられてよい。ＲＳＡ秘密鍵は、メッセージを復号化するのに用いられる。ＲＳＡ秘密鍵は、広く公に知られるべきではなく、むしろ、秘密に保たれるべき、又はその暗号化されたメッセージを復号化する意図がある人にのみ留保されるべきである。高いレベルで、ＲＳＡアルゴリズムは、大きい整数を因数分解するのが困難である仮定に基づく。ＲＳＡ公開鍵は、概して、２つの大きい素数と一の補助値との積を含む。複数の素因数は、秘密に保たれ、暗号化されたメッセージを復号化するのに用いられる。ＲＳＡアルゴリズムにより提供される安全性は、公開鍵で暗号化されたメッセージが都合よく、及び／又は、秘密鍵を用いることによって合理的な時間においてのみ、復号化されることができるという仮定に基づく。所望される場合には、ＲＳＡアルゴリズムの更なる詳細は、２００３年２月、ＲＳＡ研究室のＪ．ジョンソン氏及びＢ．カリンスキ氏による公開鍵暗号化標準（ＰＫＣＳ）第１号、ＲＳＡ暗号化規格第２．１版、コメント３４４７（Ｒｅｑｕｅｓｔ  ｆｏｒ  Cｏｍｍｅｎｔ  ３４４７，Ｐｕｂｌｉｃ−Ｋｅｙ  Ｃｒｙｐｔｏｇｒａｐｈｙ  Ｓｔａｎｄａｒｄｓ（ＰＫＣＳ）＃１：ＲＳＡ  Ｃｒｙｐｔｏｇｒａｐｈｙ  Ｓｐｅｃｉｆｉｃａｔｉｏｎｓ  Ｖｅｒｓｉｏｎ  ２．１，ｂｙ  Ｊ．Ｊｏｎｓｓｏｎ  ａｎｄ  Ｂ．Ｋａｌｉｎｓｋｉ  ｏｆ  ＲＳＡ  Ｌａｂｏｒａｔｏｒｉｅｓ，Ｆｅｂｒｕａｒｙ  ２００３）を閲覧することによって得られる。所望であれば、ＲＳＡアルゴリズムの更なる詳細は、米国特許第４,４０５,８２９号によりも得られる。しかしながら、ＲＳＡアルゴリズムの詳しい理解は、本明細書に開示される本発明の複数の実施形態を理解するのに必須ではない。
【０００３】
上で言及されている通り、ＲＳＡアルゴリズムは、広く使用されている公開鍵暗号化アルゴリズムである。結果として、ＲＳＡアルゴリズムを実装する速さ及び効率性を向上させるために、長年にわたって大きな努力が投じられている。これは、ハードウェア及びソフトウェアの両方の視点からされている。ＲＳＡアルゴリズムを実装する、より一般的な方法のうちの１つは、ＯｐｅｎＳＳＬライブラリを用いるものである。ＯｐｅｎＳＳＬライブラリは、ＲＳＡアルゴリズムを含む様々な暗号アルゴリズムをサポートする、オープンソースのソフトウェアライブラリである。しかしながら、ＲＳＡアルゴリズムを実装する速さ及び効率性を改善する努力を行ったにも拘らず、その実装は、多くの場合において、依然として比較的に計算量が多くなる傾向にある。従って、ＲＳＡアルゴリズムを実装する速さ及び／又は効率性を改善する更なる方法が有利であろう。
【図面の簡単な説明】
【０００４】
本発明は、以下の説明、及び複数の実施形態を図示するのに用いられる複数の添付の図面を参照することによって、最良に理解され得る。複数の図面は以下の通りである。
【図１】ＲＳＡ加速命令の実施形態を実行するように動作可能なプロセッサの実施形態のブロック図である。
【図２】ＲＳＡ加速命令の実施形態を処理する方法の実施形態のブロックフロー図である。
【図３】実行ユニットの実施形態のためのマイクロアーキテクチャの実施例のブロック図である。
【図４】ＲＳＡ加速命令の実施例のオペレーションを表す擬似コードを示す。
【図５】適切な命令フォーマットの実施例のブロック図である。
【図６】適切な６４ビットの汎用レジスタセットの実施例を図示する。
【図７Ａ】本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を図示するブロック図である。
【図７Ｂ】本発明の複数の実施形態に係るプロセッサ内に含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を図示するブロック図である。
【図８Ａ】本発明の複数の実施形態に係る、単一のプロセッサコアと、そのオンダイ相互接続ネットワークへの接続と共に、レベル２（Ｌ２）キャッシュ８０４のそのローカルサブセットとのブロック図である。
【図８Ｂ】本発明の複数の実施形態に係る図８Ａのプロセッサコアの一部の拡大図である。
【図９】本発明の複数の実施形態に係る、１つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィクスを有してよいプロセッサのブロック図である。
【図１０】本発明の一実施形態に係るシステムのブロック図を示す。
【図１１】本発明の実施形態に係る第１のより具体的かつ例示的なシステムのブロック図を示す。
【図１２】本発明の実施形態に係る第２のより具体的かつ例示的なシステムのブロック図を示す。
【図１３】本発明の実施形態に係るＳｏＣのブロック図を示す。
【図１４】本発明の複数の実施形態に係るソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比させるブロック図である。
【発明を実施するための形態】
【０００５】
複数のＲＳＡ加速命令と、当該複数のＲＳＡ加速命令を実行する複数のプロセッサと、当該複数のＲＳＡ加速命令を処理する又は実行するとき、当該複数のプロセッサにより実行される複数の方法と、当該複数のＲＳＡ加速命令を処理する又は実行する１つ又は複数のプロセッサを組み込む複数のシステムとが、本明細書に開示されている。以下の説明において、多数の具体的な詳細（例えば、特の複数の命令オペレーション、複数のデータフォーマット、複数のプロセッサ構成、複数のマイクロアーキテクチャ詳細、複数の一連のオペレーション等）が示される。しかしながら、複数の実施形態は、これらの具体的な詳細なしで、実施され得る。複数の他の例において、複数の周知回路、構造及び技術が、この説明の理解を不明瞭にすることを回避するために詳細には示されていない。
【０００６】
ＯｐｅｎＳＳＬライブラリを用いるＲＳＡアルゴリズムの実装が解析されてきた。この解析の間、ベンチマークワークロードを用いるアプリケーションプロファイルタイプの解析を実行するインテル（登録商標）ＶＴｕｎｅ（商標）アナライザが用いられている。解析は、実行時間全体のうち最も大きな相対的割合を占めるＲＳＡアルゴリズムのＯｐｅｎＳＳＬライブラリ実行の複数の特定の関数又は部分を識別することを含んでいる。これらの関数は、多くの場合において、「ホット関数」と称される。ＲＳＡアルゴリズムのＯｐｅｎＳＳＬ実装における、ｂｎ＿ｍｕｌ＿ｍｏｎｔという名の、１つ特定の「ホット関数」が最も時間を消費する関数であることが分かった。加えて、ホット関数ｂｎ＿ｍｕｌ＿ｍｏｎｔを構成する複数の命令がまた解析された。これらの命令の一のサブセットだけが全体の実行時間の比較的大きい割合を占めることが分かった。言い換えれば、ホット関数ｂｎ＿ｍｕｌ＿ｍｏｎｔ内のコードの特定のサブセットは、相対的な「ホットコード」を表し、全体の実行時間の比較的大きい割合を消費する。
【０００７】
表１は、ＲＳＡアルゴリズムを実装するための全体の実行時間の比較的大きい割合を消費すると観察されてきたＲＳＡアルゴリズムのＯｐｅｎＳＳＬ実装の関数ｂｎ＿ｍｕｌ＿ｍｏｎｔによる命令のセットを列挙する表である。限定されないが、この命令のセットの実行が、実行される特定のワークロード及び解析のためのＲＳＡアルゴリズムを実装するための全体の実行時間のおよそ半分程度を消費するとされる。
表１−ＯｐｅｎＳＳＬ関数ｂｎ＿ｍｕｌ＿ｍｏｎｔによるホットコード
【表１】
2017503232.tif 000003
2017503232.tif 000004
【０００８】
表１の複数のオペレーションは、ＲＳＡアルゴリズムのループのコア部分である。上述のコードへの複数の入力パラメータは、ＷＯＲＤ，ＩＮ，ＯＵＴ，及びＣＡＲＲＹという４つのパラメータであり、全てが６４ビットのパラメータである。パラメータＩＮ及びＯＵＴは、アレイの１つの要素で、次のイタレーションにおける以下の連続した値を用いて更新される。パラメータＷＯＲＤは、イタレーションの間で変更されない。パラメータＣＡＲＲＹは、前のイテレーションから継承される。継承されるとは、前のサイクルの出力が次の入力であることを意味する。パラメータＯＵＴは、前のイテレーションから継承される場合がある。これらの７つの命令の全体のオペレーションは、ＷＯＲＤ＊ＩＮ＋ＣＡＲＲＹ＋ＯＵＴに等しい結果を生成するものである。パラメータの乗算ＷＯＲＤ＊ＩＮは、最大１２８ビット（６４ビットのパラメータのサイズの２倍）の積を生成し得る。積は、ＲＤＸ：ＲＡＸで表される１２８ビットのストレージに格納される。結果として、ＲＡＸに関わる２つの後続の加算命令が、１２８ビットの加算として実行される必要がある。なぜならば、キャリー又はオーバーフローが、６４ビットのレジスタから出て、値のビット［１２８：６４］を格納するのに用いられるレジスタＲＤＸに入ることが可能だからである。従って、ＡＤＤ及びＡＤＣ命令は一緒に、１２８ビットの加算を実行するのに用いられる。ＡＤＣ命令により用いられるキャリーフラグ（ＣＦ）の状態は、先行するＡＤＤ命令により実行される前、の加算のキャリーアウトを表す。すなわち、１２８ビットではなく、６４ビットのみのレジスタを有する６４ビットのアーキテクチャを介する実装に起因し、１２８ビットの加算は、ＡＤＤ及びＡＤＣ命令のペアにより実行される。これらの７つの命令により生成される結果は、２つの出力パラメータＯＵＴ＊及びＣＡＲＲＹ＊として、出力される。
【０００９】
いくつかの実施形態において、表１の命令のうちのいくつか、少なくとも５つ、少なくとも６つ、又は７つ全てが、単一の新規のＲＳＡ加速命令により実装され得る。いくつかの実施形態において、少なくとも行２−６により表される複数の命令が、この単一の新規の命令において実装され得る。複数の他の実施形態において、行１及び／又は行７により表される複数の命令はまた、この単一の新規の命令において任意的に実装され得る。有利に、ＲＳＡ加速命令は、特にＯｐｅｎＳＳＬライブラリを用いて実装されるとき、及び、特に関数ｂｎ＿ｍｕｌ＿ｍｏｎｔを用いて実装されるとき、ＲＳＡアルゴリズムを実装する速さ及び／又は効率性を向上させるのに役に立ち得る。
【００１０】
図１は、ＲＳＡ加速命令１０２の実施形態を実行するように動作可能なプロセッサ１００の実施形態のブロック図である。いくつかの実施形態において、プロセッサは、（例えば、デスクトップ、ラップトップ、又は他のコンピュータで一般的に用いられるタイプの）汎用プロセッサであってよい。代替的に、プロセッサは、特別用途プロセッサであってよい。適した特別用途プロセッサの複数の例は、単に少数の例を挙げており、それらに限定されないが、暗号プロセッサ、ネットワークプロセッサ、通信プロセッサ、コプロセッサ、グラフィクスプロセッサ、組み込みプロセッサ、デジタル・シグナル・プロセッサ（ＤＳＰ）、及びコントローラ（例えば、マイクロコントローラ）を含む。
【００１１】
プロセッサは、様々な複合命令セットコンピューティング（ＣＩＳＣ）プロセッサ、様々な縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、様々な超長命令語（ＶＬＩＷ）プロセッサ、それらの様々なハイブリッド、又は他のタイプのプロセッサのうちのいずれかであってよい。
【００１２】
オペレーションの間、プロセッサ１００は、ＲＳＡ加速命令１０２の実施形態を受信し得る。例えば、ＲＳＡ加速命令は、命令フェッチユニット、命令キュー、又は同様のものから受信され得る。ＲＳＡ加速命令は、マクロ命令、アセンブリ言語命令、機械コード命令、又は他の命令、若しくはプロセッサの命令セットの制御信号を表し得る。いくつかの実施形態において、ＲＳＡ加速命令は、（例えば、１つ又は複数のフィールド又は一のセットのビットにより、）（図面において「ＷＯＲＤ」と表示されている）第１の６４ビット値１１１を有することになる第１の６４ビットのソースオペランド１１０を明示的に指定してよく、あるいは示してよく（例えば、暗黙的に示してよく）、（図面に「ＩＮ」と表示されている）第２の６４ビット値１１３を有する第２の６４ビットのソースオペランド１１２を明示的に指定してよく、あるいは示してよい。ＲＳＡ加速命令はまた、（図面に「ＣＡＲＲＹ」と表示されている）第３の６４ビット値１１５を有する第３の６４ビットのソースオペランド１１４を明示的に指定してよく、あるいは示してよく、（図面に「ＯＵＴ」と表示されている）第４の６４ビット値１１７を有する第４の６４ビットのソースオペランド１１６を明示的に指定してよく、あるいは示してよい。
【００１３】
再び図１を参照すると、プロセッサは、復号ユニット又はデコーダ１０４を含む。復号ユニットは、ＲＳＡ加速命令１０２を含む複数の命令を受信して復号し得る。復号ユニットは、１つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコード・エントリ・ポイント、復号された命令又は制御信号、若しくは、ＲＳＡ加速命令を反映し、表し、及び／又はそこから導出される他の比較的下位の命令又は制御信号を出力し得る。１つ又は複数の比較的下位の命令又は制御信号は、１つ又は複数の比較的下位の（例えば、回路レベル又はハードウェアレベルの）オペレーションにより、比較的上位のＲＳＡ加速命令を実装し得る。いくつかの実施形態において、復号ユニットは、命令を受信する１つ又は複数の入力構造（例えば、入力ポート、入力相互接続、入力インターフェース等）、ＲＳＡ加速命令を受信して認識するように入力構造に結合された命令認識ロジック、ＲＳＡ加速命令を受信して復号するように認識ロジックに結合される復号ロジック、及び、１つ又は複数の対応する下位の命令又は制御信号を出力するように復号ロジックに結合される１つ又は複数の出力構造（例えば、出力ポート、出力相互接続、出力インターフェース等）を含み得る。
【００１４】
認識ロジック及び復号ロジックは、マイクロコードのリードオンリメモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラマブル・ロジック・アレイ（ＰＬＡ）、及び当技術分野において複数の公知の復号ユニットを実装するのに用いられる他のメカニズムを含むが、これらに限定されない様々な異なるメカニズムを用いて実装され得る。
【００１５】
プロセッサ１００はまた、レジスタ１０８のセットを含む。いくつかの実施形態において、レジスタは、６４ビットのデータを保たれるように動作可能な汎用レジスタを含み得る。汎用という用語は、多くの場合において、レジスタにおけるデータ又はアドレスを格納する能力を指すのに用いられるが、これは必須ではない。汎用レジスタのそれぞれは、データを格納するよう動作可能なオンダイストレージ位置を表し得る。汎用レジスタは、アーキテクチャ的に可視なレジスタ（例えば、アーキテクチャレジスタファイル）を表し得る。アーキテクチャ的に可視な又はアーキテクチャレジスタは、ソフトウェア及び／又はプログラマに可視であり、並びに／若しくは、オペランドを識別するように命令により示されるレジスタである。これらのアーキテクチャレジスタは、所与のマイクロアーキテクチャにおける他の非アーキテクチャ又は非アーキテクチャ的に可視なレジスタ（例えば、複数のテンポラリレジスタ、複数のリオーダバッファ、複数のリタイアメントレジスタ等）とは対照的である。レジスタは、周知技術を用いて、異なる態様で異なるマイクロアーキテクチャに実装されてよく、何らかの特定のタイプの回路に限定されない。様々な異なるタイプのレジスタが適切である。適切なタイプのレジスタの複数の例は、専用物理レジスタ、レジスタリネーミングを用いる動的に割り当てられた物理レジスタ、及びそれらの組み合わせを含むが、それらに限定されない。いくつかの実施形態において、レジスタは、図５に示されるものであってよいが、本発明の範囲は、このことに限定されない。
【００１６】
示されているように、いくつかの実施形態において、第１の６４ビットのソースオペランド１１０は、第１の汎用レジスタに格納されてよく、第２の６４ビットのソースオペランド１１２は、第２の汎用レジスタに格納されてよく、第３の６４ビットのソースオペランド１１４は、第３の汎用レジスタに格納されてよく、第４の６４ビットのソースオペランド１１６は、第４の汎用レジスタに格納されてよい。いくつかの実施形態において、汎用レジスタＲＡＸは、パラメータＩＮを有する第２の６４ビットのソースオペランドを格納するのに任意的に用いられ得る。いくつかの実施形態において、ＲＡＸレジスタは、暗黙的に示されてよく、又は命令に対して暗黙的であってよい。有利には、レジスタＲＡＸを使用することで、表１のＭＯＶ及びＭＵＬ命令において用いられる特定のレジスタに対する適合性を向上させ得る。代替的に、複数の他のレジスタが、用いられてよく、又は、表１の行１における１つ目のＭＯＶ命令と同様の追加のＭＯＶ命令が、任意的に用いられ得る。代替的に、メモリ位置、又は他のストレージ位置が、４つのソースオペランドのうちの１つ又は複数のために用いられてよい。例えば、いくつかの実施形態において、複数のメモリオペレーションが、第１の及び第４のソースオペランドのうちの１つ又は複数のために潜在的に用いられ得るが、これは必須ではない。
【００１７】
再び図１を参照すると、実行ユニット１０６は、復号ユニット１０４とレジスタ１０８に結合される。例として、実行ユニットは、算術及び論理オペレーションを実行する、算術ユニットと、算術ロジックユニットと、デジタル回路とを含んでよく、デジタル回路は、乗算器及び加算器又は同様のものを含む。実行ユニットは、ＲＳＡ加速命令１０２を表す、及び／又はそれから導出される、１つ又は複数の復号された、あるいは変換された命令又は制御信号を受信し得る。実行ユニットはまた、（図面に「ＷＯＲＤ」と表示される）第１の６４ビット値１１１を有する第１の６４ビットのソースオペランド１１０、（図面に「ＩＮ」と表示される）第２の６４ビット値１１３を有する第２の６４ビットのソースオペランド１１２、（図面に「ＣＡＲＲＹ」と表示される）第３の６４ビット値１１５を有する第３の６４ビットのソースオペランド１１４、及び（図面に「ＯＵＴ」と表示される）第４の６４ビット値１１７を有する第４の６４ビットのソースオペランド１１６を受信し得る。
【００１８】
実行ユニットは、ＲＳＡ加速命令に応答して、及び／又はその結果として（例えば、命令から直接に又は間接的に（例えば、エミュレーションにより）復号された１つ又は複数の命令又は制御信号に応答して）、結果を格納するように動作可能である。
【００１９】
いくつかの実施形態において、結果は、第１の６４ビット値（ＷＯＲＤ）に第２の６４ビット値（ＩＮ）を乗算し、第３の６４ビット値（ＣＡＲＲＹ）を加算し、第４の６４ビット値（ＯＵＴ）を加算した値に等しい及び／又はそれを表す値を含み得る。いくつかの実施形態において、結果は、命令により指定された、あるいは示される第１の６４ビットのデスティネーション・オペランド１１８、及び、命令により指定された、あるいは示される第２の６４ビットのデスティネーション・オペランド１２０に格納され得る。いくつかの実施形態において、（図面に「ＯＵＴ＊」と表示される）結果１１９の半分の最下位（例えば、最も低い順位の）６４ビットが、命令により示される第１の６４ビットのデスティネーション・オペランド１１８に格納され得る。すなわち、第１の６４ビットのデスティネーション・オペランド１１８は、結果ＷＯＲＤ＊ＩＮ＋ＣＡＲＲＹ＋ＯＵＴのビット［６３：０］を格納し得る。いくつかの実施形態において、（図面に「ＣＡＲＲＹ＊」と表示される）結果１２１の半分の最上位（例えば、最も高い順位の）６４ビットが、命令により示される第２の６４ビットのデスティネーション・オペランド１２０に格納され得る。すなわち、第２の６４ビットのデスティネーション・オペランド１２０は、結果ＷＯＲＤ＊ＩＮ＋ＣＡＲＲＹ＋ＯＵＴのビット［１２７：６４］を格納し得る。
【００２０】
示されているように、いくつかの実施形態において、第１及び第２のデスティネーション・オペランド１１８、１２０は任意的に、レジスタ（例えば、汎用レジスタ）であってよい。いくつかの実施形態において、汎用レジスタＲＤＸは、パラメータＣＡＲＲＹ＊を有する第２の６４ビットのデスティネーション・オペランドを格納するのに任意的に用いられ得る。いくつかの実施形態において、ＲＤＸレジスタは、暗黙的に示されてよく、又は命令に対して暗黙的であってよい。有利には、レジスタＲＤＸを使用することにより、表１の行６からＡＤＣ命令において用いられる特定のレジスタに対する適合性を向上させてよく、行７のＭＯＶ命令を取り除くのに役に立ち得る。代替的に、他のレジスタは、用いられてよく、及び／又は、表１の行７における２つ目のＭＯＶ命令と同様の追加のＭＯＶ命令が、任意的に用いられ得る。
【００２１】
代替的に、レジスタを用いる代わりに、メモリ位置又は他のストレージ位置が、デスティネーション・オペランドのうちの１つ又は複数のために用いられ得る。例えば、いくつかの実施形態において、メモリオペレーションは、第１のデスティネーション・オペランドのために任意的に用いられ得るが、このことは必須ではない。
【００２２】
実行ユニット及び／又はプロセッサは、ＲＳＡ加速命令を実行するように、並びに／若しくは、ＲＳＡ加速命令に応答して、及び／又はその結果として（例えば、ＲＳＡ加速命令から復号された、あるいは導出された１つ又は複数の命令又は制御信号に応答して）、結果を格納するように動作可能な具体的又は特定のロジック（例えば、複数のトランジスタ、集積回路、又はファームウェア（例えば、不揮発性メモリに格納された複数の命令）と潜在的に組み合わせた他のハードウェア及び／又はソフトウェア）を含み得る。いくつかの実施形態において、実行ユニットは、複数のソースオペランドを受信する１つ又は複数の入力構造（例えば、入力ポート、入力相互接続、入力インターフェース等）と、入力構造に結合され、ソースオペランドを受信して処理して結果オペランドを生成する回路又はロジック（例えば、乗算器及び少なくとも１つの加算器）と、回路又はロジックに結合され、結果オペランドを出力する１つ又は複数の出力構造（例えば、出力ポート、出力相互接続、及び出力インターフェース等）とを含み得る。いくつかの実施形態において、実行ユニットは、図３の回路又はロジックを含み得る。
【００２３】
説明を不明瞭にすることを回避するために、比較的に簡単なプロセッサ１００が示されて記載されている。複数の他の実施形態において、プロセッサは、複数の他の周知プロセッサコンポーネントを任意的に含み得る。そのようなコンポーネントの複数の可能な例は、命令フェッチユニット、命令及びデータキャッシュ、第２の又はより高いレベルのキャッシュ、アウトオブオーダ実行ロジック、命令スケジューリングユニット、レジスタリネーミングユニット、リタイアメントユニット、バスインターフェースユニット、命令及びデータ・トランスレーション・ルックアサイド・バッファ、プリフェッチバッファ、マイクロ命令キュー、マイクロ命令シーケンサ、プロセッサに含まれる他のコンポーネント、及びそれらの様々な組み合わせを含むが、これらに限定されない。複数のそのようなコンポーネントの多数の異なる組み合わせ及び構成が適切である。複数の実施形態は、任意の公知の組み合わせ又は構成に限定されない。さらに、複数の実施形態は、複数のコアを有するプロセッサ、ロジックプロセッサ、又は実行エンジンに含まれてよく、少なくともそれらのうちの１つは、ＲＳＡ加速命令の実施形態を実行する復号ユニットと実行ユニットとを有する。
【００２４】
図２は、ＲＳＡ加速命令の実施形態を処理する方法２３０の実施形態のブロックフロー図である。様々な実施形態において、方法は、プロセッサ、命令処理装置、又は他のデジタルロジックデバイスにより実行され得る。いくつかの実施形態において、図２の複数のオペレーション及び／又は方法は、図１のプロセッサにより及び／又はその中で実行され得る。図１のプロセッサに関して本明細書に記載されている複数のコンポーネント、特徴、及び具体的かつ選択的な詳細はまた、図２の複数のオペレーション及び／又は方法に任意的に適用し得る。代替的に、図２の複数のオペレーション及び／又は方法は、同様の又は異なるプロセッサ又は装置により、及び／又は、それらの中で実行され得る。
【００２５】
さらに、図１のプロセッサ及び／又は装置は、図２に示されるものと同じ、同様の又は異なる複数のオペレーション及び／又は方法を実行し得る。
【００２６】
方法は、ブロック２３１において、ＲＳＡ加速命令を受信する段階を含む。様々な態様において、命令は、プロセッサ、命令処理装置、又はそれらの一部（例えば、命令フェッチユニット、復号ユニット、バスインターフェースユニット等）で受信され得る。様々な態様において、命令は、オフダイのソースから（例えば、メモリ、相互接続等から）、又は、オンダイのソースから（例えば、命令キャッシュ、命令キュー等から）受信され得る。ＲＳＡ加速命令は、第１の６４ビット値（例えば、ＷＯＲＤ）を有する第１の６４ビットのソースオペランドを指定してよく、あるいは、示してよく、第２の６４ビット値（例えば、ＩＮ）を有する第２の６４ビットのソースオペランドを指定してよく、あるいは、示してよく、第３の６４ビット値（例えば、ＣＡＲＲＹ）を有する第３の６４ビットのソースオペランドを指定してよく、あるいは、示してよく、第４の６４ビット値（例えば、ＯＵＴ）を有する第４の６４ビットのソースオペランドを指定してよく、あるいは、示してよい。
【００２７】
ブロック２３２において、結果は、ＲＳＡ加速命令に応答して、及び／又はその結果として格納される。代表的に、実行ユニット、命令処理装置、又はプロセッサが、命令を実行してその結果を格納し得る。いくつかの実施形態において、結果は、第１の６４ビット値（例えば、ＷＯＲＤ）に第２の６４ビット値（例えば、ＩＮ）を乗算し、第３の６４ビット値（例えば、ＣＡＲＲＹ）を加算し、第４の６４ビット値（例えば、ＯＵＴ）を加算したものを含み得る。いくつかの実施形態において、結果（例えば、ＯＵＴ＊）の半分の最下位（例えば、最も低い順位の）６４ビットが、命令により示される第１の６４ビットのデスティネーション・オペランドに格納され得る。いくつかの実施形態において、結果（例えば、ＣＡＲＲＹ＊）の半分の最上位（例えば、最も高い順位の）６４ビットが、命令により示される第２の６４ビットのデスティネーション・オペランドに格納され得る。示されているように、いくつかの実施形態において、デスティネーション・オペランドは、汎用レジスタであってよい。代替的に、メモリ位置又は他のストレージ位置は、これらのオペランドのうちの１つ又は複数のために任意的に用いられ得る。
【００２８】
いくつかの実施形態において、方法２３０は、ＲＳＡアルゴリズムを実行する間に、実行され得る。いくつかの実施形態において、方法は、ＲＳＡアルゴリズムのＯｐｅｎＳＳＬライブラリの実行の間に実行され得る。いくつかの実施形態において、方法は、ＲＳＡアルゴリズムのＯｐｅｎＳＳＬライブラリの関数ｂｎ＿ｍｕｌ＿ｍｏｎｔの実行の間に実行され得る。
【００２９】
図示されている方法は、複数のアーキテクチャオペレーション（例えば、ソフトウェアの視点から可視な複数のもの）を含む。複数の他の実施形態において、方法は、１つ又は複数のマイクロアーキテクチャ・オペレーションを任意的に含み得る。例として、命令は、アウトオブオーダで、フェッチされ、復号され、スケジューリングされてよく、ソースオペランドが、アクセスされてよく、実行ユニットが、命令等を実装する複数のマイクロアーキテクチャ・オペレーションを実行してよい。
【００３０】
いくつかの実施形態において、命令を実装する複数のマイクロアーキテクチャ・オペレーションは、１つの乗算オペレーション及び２つの加算オペレーションを任意的に含み得る。
【００３１】
図３は、実行ユニット３０６の実施形態のマイクロアーキテクチャの実施例のブロック図である。実行ユニットは、乗算器３３４を含む。乗算器は、第１の６４ビットのソースオペランドから第１の６４ビット値（例えば、ＷＯＲＤ）を受信するように結合される第１の６４ビットの入力部と、第２の６４ビットのソースオペランドから第２の６４ビット値（例えば、ＩＮ）を受信するように結合される第２の６４ビットの入力部とを有し得る。乗算器は、１２８ビットの積（例えば、ＷＯＲＤ＊ＩＮ）を得るべく、第１の６４ビット値と第２の６４ビット値とを乗算するように動作可能であってよい。乗算器は、積を出力する１２８ビットの出力部を有し得る。
【００３２】
実行ユニットはまた、第１の１２８ビットの加算器３３６を含む。第１の１２８ビットの加算器は、１２８ビットの積（例えば、ＷＯＲＤ＊ＩＮ）を受信すべく、乗算器の１２８ビットの出力部に結合された１２８ビットの入力部を有する。第１の１２８ビットの加算器はまた、第３の６４ビット値（例えば、ＣＡＲＲＹ）を受信するように結合される６４ビットの入力部を有する。第１の１２８ビットの加算器は、第１の１２８ビットの和（例えば、ＷＯＲＤ＊ＩＮ＋ＣＡＲＲＹ）を生成するように、第３の６４ビット値を１２８ビットの積に加算し得る。第１の１２８ビットの加算器は、第１の１２８ビットの和を出力する１２８ビットの出力部を有し得る。
【００３３】
実行ユニットはまた、第２の１２８ビットの加算器３３８を含む。第２の１２８ビットの加算器は、第１の１２８ビットの和（例えば、ＷＯＲＤ＊ＩＮ＋ＣＡＲＲＹ）を受信するように、第１の加算器の１２８ビットの出力部に結合される１２８ビットの入力部を有する。第２の１２８ビットの加算器はまた、第４の６４ビット値（例えば、ＯＵＴ）を受信するように結合される６４ビットの入力部を有する。第２の１２８ビットの加算器は、第２の１２８ビットの和（例えば、ＷＯＲＤ＊ＩＮ＋ＣＡＲＲＹ＋ＯＵＴ）を生成するように、第４の６４ビット値を第１の１２８ビットの和に加算し得る。いくつかの実施形態において、第２の１２８ビットの加算器は、第１の６４ビットのデスティネーション・オペランドへ、第２の１２８ビットの和の下位の半分の第１の６４ビット（例えば、値ＷＯＲＤ＊ＩＮ＋ＣＡＲＲＹ＋ＯＵＴのビット［６３：０］）を出力する第１の６４ビットの出力部を有し得る。第２の１２８ビットの加算器はまた、第２の６４ビットのデスティネーション・オペランドへ、第２の１２８ビットの和の上位の半分の第２の６４ビット（例えば、値ＷＯＲＤ＊ＩＮ＋ＣＡＲＲＹ＋ＯＵＴのビット［１２７：６４］）を出力する第２の６４ビットの出力部を有し得る。
【００３４】
図４は、ＲＳＡ加速命令４０２の実施例のオペレーションを表す擬似コードを示す。ＲＳＡ加速命令は、擬似コードＲＳＡＦＭＡＡ１２８を有する。命令ＲＳＡＦＭＡＡ１２８は、６４ビットのソース／デスティネーション・オペランド（ＤＥＳＴ）が明示的に指定され、６４ビットのソースオペランド（ＳＲＣ）が明示的に指定され、６４ビットのソース汎用レジスタＲＡＸが暗黙的であり、６４ビットのソース／デスティネーション汎用レジスタＲＤＸが暗黙的であるフォーマットを有する。レジスタＲＡＸ及びＲＤＸは、それらが暗黙的であることを示すように符号化する命令において角括弧内に示される。
【００３５】
複数の他の実施形態において、より少ない又はより多くのオペランドが、明示的に指定されてよく、及び／又は、より少ない又はより多くのオペレーションが、暗黙的であってよい。
【００３６】
擬似コードにおいて、ＴＥＭＰ１、ＴＥＭＰ２、及びＴＥＭＰ３は、複数のテンポラリレジスタ（例えば、複数のマイクロアーキテクチャ・レジスタ）を表す。当該記号（矢印）は、格納することを表す。複数の他の実施形態において、より少ない又はより多くのテンポラリレジスタが、任意的に用いられ得る。ＣＯＭＢＩＮＥオペレーションは、２つの６４ビットオペランドを１２８ビットのオペランドへと組み合わせるのに用いられる。例えば、ＣＯＭＢＩＮＥ（０ｘ１，０ｘ２）が、０ｘ１０００００００００００００００２である。加算は１２８ビットのオペランド上で実行され、これにより、ＡＤＤ及びＡＤＣ命令の２つの別個のペアを実行する必要性に関する向上した効率性及び／又は速さが提供されることに留意されたい。ＤＥＳＴが、最初にソースオペランドとして、そして、次にデスティネーション・オペランドとして、用いられる。
【００３７】
ＤＥＳＴは、６４ビットの汎用レジスタ又は６４ビットのメモリ位置であってよく、読み取り及び書き込み機能を有する。ＯＵＴの値が継承された場合、レジスタが、複数の特定の利点を提供し得る一方で、ＯＵＴが継承されていない場合、メモリ位置を用いることに利点があり得る。いくつかの実施形態において、ＳＲＣは、６４ビットの汎用レジスタ又は６４ビットのメモリ位置であってよく、読み取り機能を有するが、必ずしも書き込み機能を有するものではない。
【００３８】
有利には、いくつかの実施形態において、ＲＡＸが、パラメータＩＮを提供するのに用いられ得る。このことは、表１の行１における１つ目のＭＯＶ命令との向上した適合性を提供し得る。代替的には、別のレジスタが用いられてよく、及び／又は、追加のＭＯＶ命令がＲＳＡＦＭＡＡ１２８命令の外に含まれてよい。
【００３９】
有利には、いくつかの実施形態において、ＲＤＸが、パラメータＣＡＲＲＹ＊を提供するデスティネーション・オペランドとして、用いられ得る。このことは、表１の行７における最後のＭＯＶ命令との向上した適合性を提供し得る。代替的に、別のレジスタが用いられてよく、及び／又は、追加のＭＯＶ命令がＲＳＡＦＭＡＡ１２８命令の外に含まれてよい。いくつかの実施形態において、ＲＤＸが、最初にパラメータ（例えば、ＣＡＲＲＹ）を提供するソースオペランドとしても、次にデスティネーション・オペランドとしても用いられ得ることも留意されたい。そのような再利用は、別のレジスタを必要とすることを回避するのに役に立ち得る。代替的に、異なるレジスタが、パラメータ（例えば、ＣＡＲＲＹ）を提供するソースオペランドとして、任意的に用いられ得る。ＲＤＸの値は、イタレーションの間で継承され得る。
【００４０】
図５は、適切な命令フォーマット５５０の実施例のブロック図である。命令フォーマットは、オペレーションコード又はオペコード５５２を含む。オペコードは、実行される命令及び／又はオペレーションを識別するように動作可能な複数のビット若しくは１つ又は複数のフィールドを表し得る。いくつかの実施形態において、オペコードは、ＲＳＡ加速オペレーションを表してよく、又はそれと関連付けられてよい。
【００４１】
命令フォーマットはまた、ソース／デスティネーション指定子５５４及びソース指定子５５６を含む。例として、これらの指定子のそれぞれは、レジスタのアドレス、メモリ位置、又は他のストレージ位置を指定するビット若しくは１つ又は複数のフィールドを含み得る。ソース／デスティネーション指定子５５４は、ソースオペランドを有するストレージ位置を指定し、指定された同じストレージ位置はまた、格納されるべき結果オペランドのデスティネーションとして用いられる。ソース指定子５５６は、別のソースオペランドを有するストレージ位置を指定する。
【００４２】
いくつかの実施形態において、命令はまた、暗黙的ＲＡＸソース５５８を有する。暗黙的とは、命令フォーマットが、ＲＡＸレジスタを指定するために、ビット若しくは１つ又は複数のフィールドを有する必要はないが、むしろ、ＲＡＸレジスタは、命令に対して暗黙的（例えば、オペコードに対して暗黙的）であってよいということを意味する。いくつかの実施形態において、命令はまた、暗黙的ＲＤＸソース／デスティネーション５６０を有する。ＲＤＸレジスタは、最初にソースオペランドを格納して、次に、格納されるべきデスティネーション・オペランドを格納するのに用いられ得る。
【００４３】
これは単に、適切な命令フォーマットの一実施例であることが理解されるべきである。この命令フォーマットは、２つのオペランド／ストレージ位置のみを指定する、あるいは示す一方で、その他は、暗黙的である。複数の他の実施形態において、より少ない又はより多くのオペランドが、明示的に指定され得る。様々な実施形態において、命令は、１つ、２つ、３つ、又は３つより多くのオペランド明示的に指定するフォーマットを有してよく、その他の複数が暗黙的である。さらに、図示されている、複数のフィールドの順序／構成が必須ではないが、むしろ、複数のフィールドは、配置が変更され得る。複数のフィールドは、連続した一連のビットを含む必要がなく、むしろ、非連続的又は分離されたビットから構成され得る。複数の特定のフィールドは重なる可能性があってよい。複数の代替的な実施形態はまた、複数の追加のフィールドを任意的に追加し得る。例えば、フィールド又は１つ又は複数のビットが、オペランドのサイズを指定し、オペレーションを符号あり又は符号なしとみなし、飽和演算が用いられるべくか否かを示すため等に追加され得る。図６は、適切な６４ビットの汎用レジスタセットの実施例を図示する。
【００４４】
６０８  ６４ビットのレジスタセットは、１６の６４ビット又はクワッドワードの汎用レジスタを含む。これらのレジスタは、ＲＡＸ，ＲＢＸ，ＲＣＸ，ＲＤＸ，ＲＳＩ，ＲＤＩ，ＲＢＰ，ＲＳＰ，Ｒ８，Ｒ９，Ｒ１０，Ｒ１１，Ｒ１２，Ｒ１３，Ｒ１４，及びＲ１５と称される。例として、６４ビットを有する、クワッドワードの符号なしの整数は、レジスタＲＡＸ，ＲＢＸ，ＲＣＸ，ＲＤＸ，ＲＳＩ，ＲＤＩ，ＲＢＰ，ＲＳＰ，又はＲ８−Ｒ１５に格納され得る。これらのレジスタはまた、３２ビットのオペランドを格納するように、３２ビットモードにおいて動作可能である。ＲＡＸ，ＲＢＸ，ＲＣＸ，ＲＤＸ，ＲＳＩ，ＲＤＩ，ＲＢＰ，及びＲＳＰレジスタの下位３２ビットはそれぞれ、レジスタＥＡＸ，ＥＢＸ，ＥＣＸ，ＥＤＸ，ＥＳＩ，ＥＤＩ，ＥＢＰ，及びＥＳＰに対応する。３２ビットを有する、ダブルワードの符号なしの整数は、レジスタＥＡＸ，ＥＢＸ，ＥＣＸ，ＥＤＸ，ＥＳＩ，ＥＤＩ，ＥＢＰ，ＥＳＰ，Ｒ８Ｄ−Ｒ１５Ｄに格納され得る。
【００４５】
レジスタＲ８−Ｒ１５の下位３２ビットはまた、３２ビットモードにおいてアドレス指定可能であり、Ｒ８Ｄ−Ｒ１５Ｄで称される。これらの３２ビットのレジスタはまた、１６ビット及び８ビットモードにおいてアドレス指定可能である。ＥＡＸ，ＥＢＸ，ＥＣＸ，及びＥＤＸレジスタの下位１６ビットはそれぞれ、ＡＸ，ＢＸ，ＣＸ，及びＤＸと称される（不図示）。例として、１６ビットを有するｗｏｒｄ符号なしの整数はそれぞれ、レジスタＢＸ，ＣＸ，及びＤＸに格納され得る。これらの汎用レジスタは、様々なｘ８６アーキテクチャプロセッサにおいて利用可能であり、１つ又は複数の実施形態を実装するのに適切であるが、これらの特定のレジスタは、必須ではない。複数の他のプロセッサは、より少ない又はより多くのレジスタを有してよく、より小さいレジスタ上でより大きいレジスタのそのようなエイリアシングを用いる必要がなくてよく、異なるサイズのレジスタを有してよい等でよい。
【００４６】
図３−６のいずれか１つに関して記載されているコンポーネント、機能、及び選択的な詳細はまた、図１−２のいずれか１つにおいて任意的に用いられてよい。さらに、本明細書に記載されているいずれかの装置に関して、本明細書に記載されているコンポーネント、機能、及び選択的な詳細は、本明細書に記載されているいずれかの方法に、任意的に用いられてよく、及び／又は、適用してよく、それら方法は、複数の実施形態において、そのような装置により、及び／又はその中で実行され得る。さらに、本明細書に記載されているいずれかのプロセッサのための、本明細書に記載されているコンポーネント、機能、及び選択的な詳細は、本明細書に記載されているいずれかのシステムに任意的に用いられてよく、及び／又は適用してよく、それらシステムは、複数の実施形態において、複数のそのようなプロセッサを含み得る。
【００４７】
例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャプロセッサコアが、異なる態様で異なる目的のために、異なるプロセッサにおいて実装され得る。例えば、複数のそのようなコアの複数の実装は、１）汎用演算向け汎用インオーダコア、２）汎用演算向け高性能汎用アウトオブオーダコア、３）主にグラフィクス及び／又は科学的（スループット）演算向けの特別用途コアを含んでよい。複数の異なるプロセッサの複数の実装は、１）１つ又は複数の汎用演算向け汎用インオーダコア及び／又は１つ又は複数の汎用演算向け汎用アウトオブオーダコアを含むＣＰＵ、及び２）主にグラフィクス及び／又は科学的（スループット）向けの１つ又は複数の特別用途コアを含むコプロセッサを含んでよい。 複数のそのような異なるプロセッサは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内で別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、場合によっては統合グラフィクス及び／又は科学的（スループット）ロジック等の特別用途ロジック、又は複数の特別用途コアと称される）及び４）同じダイ上で、説明されたＣＰＵ（場合によってはアプリケーションコア又はアプリケーションプロセッサと称される）、記載されたコプロセッサ及び追加の機能性を含み得るシステムオンチップを含み得る、複数の異なるコンピュータシステムアーキテクチャをもたらす。
【００４８】
複数の例示的なコアアーキテクチャが、次に説明され、次いで、複数の例示的なプロセッサ及びコンピュータアーキテクチャが説明される。例示的なコアアーキテクチャ インオーダ及びアウトオブオーダコアブロック図 
【００４９】
図７Ａは、本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を図示するブロック図である。図７Ｂは、本発明の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を図示するブロック図である。図７Ａ−Ｂの複数の実線のボックスは、インオーダパイプライン及びインオーダコアを図示する一方、任意的に追加される複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン及びコアを図示する。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様について説明する。
【００５０】
図７Ａにおいて、プロセッサパイプライン７００は、フェッチステージ７０２、長さ復号ステージ７０４、復号ステージ７０６、割り当てステージ７０８、リネーミングステージ７１０、スケジューリング（ディスパッチ又は発行としても公知）ステージ７１２、レジスタ読み取り／メモリ読み取りステージ７１４、実行ステージ７１６、ライトバック／メモリ書き込みステージ７１８、例外処理ステージ７２２、及びコミットステージ７２４を含む。
【００５１】
図７Ｂは、実行エンジンユニット７５０に結合されるフロントエンドユニット７３０を含むプロセッサコア７９０を示し、フロントエンドユニット７３０及び実行エンジンユニット７５０の両方はメモリユニット７７０に結合される。コア７９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、又はハイブリッド若しくは代替的なコア型であってよい。また別の選択肢として、コア７９０は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用演算画像処理ユニット（ＧＰＧＰＵ）コア、グラフィクスコア、又は同様のもの等の特別用途コアであってよい。
【００５２】
フロントエンドユニット７３０は、命令キャッシュユニット７３４に結合された分岐予測ユニット７３２を含み、命令キャッシュユニット７３４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）７３６に結合され、ＴＬＢ７３６は、命令フェッチユニット７３８に結合され、命令フェッチユニット７３８は、復号ユニット７４０に結合される。復号ユニット７４０（又はデコーダ）は、複数の命令を復号し、出力として、１つ又は複数のマイクロオペレーション、マイクロコード・エントリ・ポイント、マイクロ命令、他の命令、又は、複数の元の命令から復号された、若しくはこれらを他の方法で反映する、あるいはこれらから導出された他の制御信号を生成してよい。復号ユニット７４０は、様々な異なるメカニズムを用いて実装され得る。複数の適切なメカニズムの複数の例には、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブル・ロジック・アレイ（ＰＬＡ）、複数のマイクロコードのリードオンリーメモリ（ＲＯＭ）等が含まれるが、これらに限定されない。
【００５３】
一実施形態において、コア７９０は、マイクロコードのＲＯＭ、又は（例えば、復号ユニット７４０に、あるいはフロントエンドユニット７３０内に）複数の特定のマクロ命令のためのマイクロコードを格納する他の媒体を含む。復号ユニット７４０は、実行エンジンユニット７５０においてリネーム／アロケータユニット７５２に結合される。
【００５４】
実行エンジンユニット７５０は、リタイアメントユニット７５４に結合されるリネーム／アロケータユニット７５２と、１つ又は複数のスケジューラユニット７５６のセットとを含む。スケジューラユニット７５６は、複数の予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット７５６は、物理レジスタファイルユニット７５８に結合される。物理レジスタファイルユニット７５８のそれぞれは、１つ又は複数の物理レジスタファイルを表し、それらのうちのいくつかの異なるものが、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）等のような、１つ又は複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット７５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイルユニット７５８は、リタイアメントユニット７５４により重なり、レジスタリネーミング及びアウトオブオーダ実行が実施され得る様々な態様（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いる、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いる、レジスタマッピング及びレジスタのプールを用いる等）を図示する。リタイアメントユニット７５４及び物理レジスタファイルユニット７５８は、実行クラスタ７６０に結合される。実行クラスタ７６０は、１つ又は複数の実行ユニット７６２のセットと、１つ又は複数のメモリアクセスユニット７６４のセットとを含む。実行ユニット７６２は、様々なタイプのデータ（例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して、様々なオペレーション（例えば、複数のシフト、加算、減算、乗算）を実行し得る。いくつかの実施形態では、複数の特定の関数又は複数の関数の複数のセット専用の多数の実行ユニットを含んでよい一方、複数の他の実施形態では、１つのみの実行ユニット又は全ての関数を全てが実行する複数の実行ユニットを含んでよい。スケジューラユニット７５６、物理レジスタファイルユニット７５８及び実行クラスタ７６０は、複数として示される可能性があるが、なぜならば、複数の特定の実施形態は、特定のタイプのデータ／オペレーションに対して複数の別個のパイプラインを生成するからである（例えば、各々がそれら独自のスケジューラユニット、物理レジスタファイルユニット及び／又は実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点／パック型整数／パック型浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン及び／又はメモリアクセスパイプライン、及び、個別のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット７６４を有する複数の特定の実施形態が実装される）。複数の別個のパイプラインが用いられる場合、これらの複数のパイプラインのうちの１つ又は複数はアウトオブオーダ発行／実行、残りはインオーダであってよいことも理解されるべきである。
【００５５】
メモリアクセスユニット７６４のセットは、データＴＬＢユニット７７２を含むメモリユニット７７０に結合され、データＴＬＢユニット７７２は、データキャッシュユニット７７４に結合され、データキャッシュユニット７７４は、レベル２（Ｌ２）キャッシュユニット７７６に結合される。例示的な一実施形態において、メモリアクセスユニット７６４は、ロードユニット、ストアアドレスユニット及びストアデータユニットを含んでよく、これらのそれぞれは、メモリユニット７７０内のデータＴＬＢユニット７７２に結合される。命令キャッシュユニット７３４は、メモリユニット７７０内のレベル２（Ｌ２）キャッシュユニット７７６に、さらに結合される。Ｌ２キャッシュユニット７７６は、１つ又は複数の他のレベルのキャッシュに、及び最終的にはメインメモリに結合される。
【００５６】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン７００を以下のように実装してもよい。１）命令フェッチ７３８が、フェッチステージ７０２及び長さ復号ステージ７０４を実行し、２）復号ユニット７４０が、復号ステージ７０６を実行し、３）リネーム／アロケータユニット７５２が、割り当てステージ７０８及びリネーミングステージ７１０を実行し、４）スケジューラユニット７５６が、スケジューリングステージ７１２を実行し、５）物理レジスタファイルユニット７５８及びメモリユニット７７０が、レジスタ読み取り／メモリ読み取りステージ７１４を実行し、実行クラスタ７６０が、実行ステージ７１６を実行し、６）メモリユニット７７０及び物理レジスタファイルユニット７５８が、ライトバック／メモリ書き込みステージ７１８を実行し、７）様々なユニットが、例外処理ステージ７２２に関与してよく、かつ８）リタイアメントユニット７５４及び物理レジスタファイルユニット７５８が、コミットステージ７２４を実行する。
【００５７】
コア７９０は、本明細書で説明される命令を含む１つ又は複数の命令セット（例えば、ｘ８６命令セット（複数のより新規のバージョンで追加されたいくつかの拡張を有する）カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングスの（ＮＥＯＮのような任意選択的な追加の拡張を有する）ＡＲＭ命令セット）をサポートし得る。一実施形態において、コア７９０は、パック型データ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションにより用いられる複数のオペレーションがパック型データを用いて実行されることを可能にする。
【００５８】
コアは、マルチスレッディング（複数のオペレーション又は複数のスレッドの２つ又はそれより多くの並列セットを実行すること）をサポートしてよく、時分割マルチスレッディング、同時マルチスレッディング（単一の物理的コアが複数のスレッドのそれぞれに対して論理的コアを提供することにより、物理的コアが同時にマルチスレッディングを実行すること）又はそれらの組み合わせ（例えば、時分割フェッチ及び復号化、その後、インテル（登録商標）ハイパースレッディング・テクノロジー等での同時マルチスレッディング）を含む様々な態様で、マルチスレッディングを実行してもよいことを理解されるべきである。
【００５９】
アウトオブオーダ実行との関連で、レジスタリネーミングを説明する一方、レジスタリネーミングは、インオーダアーキテクチャで用いられ得ることを理解されるべきである。プロセッサの図示される実施形態は、別個の命令及び複数のデータキャッシュユニット７３４／７７４、並びに共有Ｌ２キャッシュユニット７７６も含む一方、複数の代替的な実施形態は、例えば、レベル１（Ｌ１）内部キャッシュ又は複数のレベルの内部キャッシュ等の、複数の命令及びデータの双方に対する単一の内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュと、コア及び／又はプロセッサの外部にある外部キャッシュとの組み合わせを含み得る。代替的に、キャッシュの全てが、コア及び／又はプロセッサの外部にあり得る。具体的かつ例示的なインオーダ・コア・アーキテクチャ 
【００６０】
図８Ａ−Ｂは、より具体的かつ例示的なインオーダ・コア・アーキテクチャのブロック図を図示し、ここで、コアは、チップ内のいくつかの論理ブロック（同じタイプ及び／又は異なるタイプの他の複数のコアを含む）のうちの１つであってよい。複数の論理ブロックは、用途に応じて、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を介して、いくつかの固定関数ロジック、メモリＩ／Ｏインターフェース及び他の必要なＩ／Ｏロジックと通信を行う。
【００６１】
図８Ａは、本発明の複数の実施形態に係る単一のプロセッサコアのブロック図であり、オンダイの相互接続ネットワーク８０２とのその接続と、レベル２（Ｌ２）キャッシュのそのローカルサブセット８０４と共に示される。一実施形態において、命令デコーダ８００は、パック型データ命令セット拡張を有するｘ８６命令セットをサポートする。 Ｌ１キャッシュ８０６は、キャッシュメモリによる、スカラ及びベクトルユニットへの低レイテンシアクセスを可能にする。一実施形態において、（設計の単純化のために）スカラユニット８０８及びベクトルユニット８１０は、別個のレジスタセット（それぞれ、複数のスカラレジスタ８１２及び複数のベクトルレジスタ８１４）を用い、そして、これらの間で転送されるデータは、レベル１（Ｌ１）キャッシュ８０６のメモリに書き込まれてから再読み出される一方、本発明の複数の代替的な実施形態は、異なるアプローチ（例えば、単一のレジスタセットを用いる、又は書き込み及び再読み取りを行うことなく、２つのレジスタファイル間でデータが転送されることを可能にする通信パスを含む）を用いてもよい。
【００６２】
Ｌ２キャッシュのローカルサブセット８０４は、１つのプロセッサコアあたり１つの個別のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュのその独自のローカルサブセット８０４に対するダイレクトアクセスパスを有する。プロセッサコアに読み出されたデータは、そのＬ２キャッシュのサブセット８０４に格納され、迅速かつ、それら独自の複数のローカルＬ２キャッシュのサブセットにアクセスする他の複数のプロセッサコアと並列に、アクセスされることができる。プロセッサコアに書き込まれたデータは、その独自のＬ２キャッシュのサブセット８０４に格納され、必要な場合には、他の複数のサブセットからフラッシュされる。リングネットワークは、共有のデータに対するコヒーレンシを保証する。リングネットワークが双方向であることにより、複数のプロセッサコア、複数のＬ２キャッシュ及び他の複数の論理ブロック等のエージェントは、チップ内で互いに通信を行うことを可能にする。各リングのデータパスは、１方向あたり、１０１２ビット幅である。
【００６３】
図８Ｂは、本発明の複数の実施形態に係る図８Ａのプロセッサコアの一部の拡大図である。図８Ｂは、Ｌ１キャッシュ８０４の一部であるＬ１データキャッシュ８０６Ａ、並びにベクトルユニット８１０及び複数のベクトルレジスタ８１４に関する更なる詳細を含む。具体的には、ベクトルユニット８１０は、整数の単精度浮動及び倍精度浮動命令のうちの1つ又は複数を実行する１６ワイドのベクトル処理ユニット（ＶＰＵ）である（１６ワイドＡＬＵ８２８を参照する）。ＶＰＵは、スウィズルユニット８２０による複数のレジスタ入力のスウィズル、数字変換ユニット８２２Ａ−Ｂによる数字変換、及び複製ユニット８２４によるメモリ入力に対する複製をサポートする。書き込みマスクレジスタ８２６は、結果的な複数のベクトルの書き込みを叙述することを可能にする。統合メモリコントローラ及びグラフィクスを有するプロセッサ 
【００６４】
図９は、本発明の複数の実施形態に係るプロセッサ９００のブロック図であり、プロセッサ９００は、１つより多くのコアを有してもよく、統合メモリコントローラを有してもよく、統合グラフィクスを有してよい。図９の複数の実線のボックスは、単一のコア９０２Ａ、システムエージェント９１０、１つ又は複数のバスコントローラユニット９１６のセットを有するプロセッサ９００を図示する一方、任意的に追加される複数の破線のボックスは、複数のコア９０２Ａ−Ｎを有する代替的なプロセッサ９００、システムエージェントユニット９１０内の１つ又は複数の統合メモリコントローラユニット９１４のセット及び特別用途ロジック９０８を図示する。
【００６５】
つまり、プロセッサ９００の異なる複数の実装は、１）（１つ又は複数のコアを含み得る）統合グラフィクス及び／又は科学的（スループット）ロジックである特別用途ロジック９０８、及び１つ又は複数の汎用コア（例えば、複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、その２つの組み合わせ）である複数のコア９０２Ａ−Ｎを有するＣＰＵ、２）主にグラフィクス及び／又は科学的（スループット）向けの多数の特別用途コアである複数のコア９０２Ａ−Ｎを有するコプロセッサ、及び３）多数の汎用インオーダコアである複数のコア９０２Ａ−Ｎを有するコプロセッサを含んでよい。つまり、プロセッサ９００は、汎用プロセッサ、コプロセッサ又は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用画像処理ユニット）、ハイスループット多集積コア（ＭＩＣ）コプロセッサ（３０又はそれより多くのコアを含む）、組み込みプロセッサ、又は同様のもの等の特別用途プロセッサであってよい。プロセッサは、１つ又は複数のチップ上で実装され得る。プロセッサ９００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ又はＮＭＯＳ等の多数の処理技術のいずれかを用いて、１つ又は複数の基板の一部であってよく、及び／又はその上に実装されてよい。
【００６６】
メモリ階層は、複数のコア、１つ又は複数の共有キャッシュユニット９０６又はそのセット、及び複数の統合メモリコントローラユニット９１４のセットに結合される外部メモリ（不図示）内に、１つ又は複数のレベルのキャッシュを含む。複数の共有キャッシュユニット９０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル4（Ｌ４）又は他の複数のレベルのキャッシュ等の１つ又は複数の中レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）及び／又はそれらの組み合わせを含んでよい。
【００６７】
一実施形態において、リングベース相互接続ユニット９１２が統合グラフィクスロジック９０８と、複数の共有キャッシュユニット９０６のセットと、システムエージェントユニット９１０／統合メモリコントローラユニット９１４と相互接続している一方、代替的な実施形態では、複数のそのようなユニットを相互接続するために任意の数の周知技術を用いてよい。一実施形態において、コヒーレンシが１つ又は複数のキャッシュユニット９０４Ａ−Ｎ及びコア９０２Ａ−Ｎの間で維持される。
【００６８】
いくつかの実施形態において、コア９０２Ａ−Ｎのうちの１つ又は複数は、マルチスレッディングが可能である。システムエージェント９１０は、複数のコア９０２Ａ−Ｎの調整及び操作を行うこれらのコンポーネントを含む。システムエージェントユニット９１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含み得る。ＰＣＵは、複数のコア９０２Ａ−Ｎ及び統合グラフィクスロジック９０８の電力状態を調整するために必要なロジック及び複数のコンポーネントであってよく、又はこれらを含んでよい。ディスプレイユニットは、１つ又は複数の外部接続されたディスプレイを駆動するためのものである。
【００６９】
複数のコア９０２Ａ−Ｎは、アーキテクチャ命令セットに関して同種又は異種であってよく、すなわち、複数のコア９０２Ａ−Ｎのうちの２つ又はそれより多くは、同じ命令セットを実行可能であってよい一方、他は、その命令セット又は異なる命令セットのサブセットのみを実行可能であってよい。例示的なコンピュータアーキテクチャ 
【００７０】
図１０−１３は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル・シグナル・プロセッサ（ＤＳＰ）、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスに関して当技術分野で公知の他のシステム設計及び構成も適切である。概して、本明細書で開示されるように、プロセッサ及び／又は他の実行ロジックを組み込み可能な多様なシステム又は電子デバイスが、概して適切である。
【００７１】
ここで、図１０を参照すると、本発明の一実施形態に係るシステム１０００のブロック図が示される。システム１０００は、コントローラハブ１０２０に結合される１つ又は複数のプロセッサ１０１０、１０１５を含み得る。一実施形態において、コントローラハブ１０２０は、グラフィクスメモリコントローラハブ（ＧＭＣＨ）１０９０及び入出力ハブ（ＩＯＨ）１０５０（複数の別個のチップ上にあり得る）を含む。ＧＭＣＨ１０９０は、メモリコントローラ及びグラフィクスコントローラを含み、これらにメモリ１０４０及びコプロセッサ１０４５が結合される。ＩＯＨ１０５０は、入出力（Ｉ／Ｏ）デバイス１０６０をＧＭＣＨ１０９０に結合する。代替的に、メモリコントローラ及びグラフィクスコントローラの一方又は両方は、（本明細書で説明されたように）プロセッサ内で集積され、メモリ１０４０及びコプロセッサ１０４５は、プロセッサ１０１０及びＩＯＨ１０５０と共に単一のチップにあるコントローラハブ１０２０と、直接に結合される。
【００７２】
複数の追加のプロセッサ１０１５の選択的な特性が、図１０に複数の破線で示される。各プロセッサ１０１０、１０１５は、本明細書で説明される複数の処理コアのうちの１つ又は複数を含んでよく、プロセッサ９００のいくつかのバージョンであってよい。
【００７３】
メモリ１０４０は、例えば、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、位相変化メモリ（ＰＣＭ）又はこれら２つの組み合わせであってよい。少なくとも１つの実施形態について、コントローラハブ１０２０は、フロントサイドバス（ＦＳＢ）等のマルチドロップバス、クイックパス相互接続（ＱＰＩ）等のポイントツーポイントインターフェース又は同様の接続１０９５を介して、プロセッサ１０１０、１０１５と通信を行う。
【００７４】
一実施形態において、コプロセッサ１０４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ、又は同様のもの等の特別用途プロセッサである。一実施形態において、コントローラハブ１０２０は、統合グラフィクスアクセラレータを含んでよい。
【００７５】
物理的リソース１０１０、１０１５の間には、アーキテクチャ上の、マイクロアーキテクチャ上の、熱の、複数の電力消費特性等を含む様々な利益の基準に関して、様々な複数の違いが存在し得る。
【００７６】
一実施形態において、プロセッサ１０１０は、一般的なタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数の命令内に、複数のコプロセッサ命令が組み込まれていてよい。プロセッサ１０１０は、これらの複数のコプロセッサ命令を、取り付けられたコプロセッサ１０４５によって実行されるべきタイプのものと認識する。従って、プロセッサ１０１０は、これらの複数のコプロセッサ命令（又は複数のコプロセッサ命令を表す複数の制御信号）を、コプロセッサバス又は他の相互接続上で、コプロセッサ１０４５に対して発行する。コプロセッサ１０４５は、受信された複数のコプロセッサ命令を受けて実行する。
【００７７】
ここで、図１１を参照すると、本発明の実施形態に係る第１のより具体的かつ例示的なシステム１１００のブロック図が示される。図１１に示されるように、マルチプロセッサシステム１１００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１１５０を介して結合される第１のプロセッサ１１７０及び第２のプロセッサ１１８０を含む。プロセッサ１１７０及び１１８０のそれぞれは、いくつかのバージョンのプロセッサ９００であってよい。本発明の一実施形態において、プロセッサ１１７０及び１１８０はそれぞれ、プロセッサ１０１０及び１０１５である一方、コプロセッサ１１３８は、コプロセッサ１０４５である。別の実施形態において、プロセッサ１１７０及び１１８０はそれぞれ、プロセッサ１０１０及びコプロセッサ１０４５である。
【００７８】
プロセッサ１１７０及び１１８０は、統合メモリコントローラ（ＩＭＣ）ユニット１１７２及び１１８２をそれぞれ含むものとして示される。プロセッサ１１７０はまた、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インターフェース１１７６及び１１７８を含み、同様に、第２のプロセッサ１１８０は、Ｐ−Ｐインターフェース１１８６及び１１８８を含む。プロセッサ１１７０、１１８０は、Ｐ−Ｐインターフェース回路１１７８、１１８８を用いたポイントツーポイント（Ｐ−Ｐ）インターフェース１１５０を介して、情報を交換し得る。図１１に示されるように、ＩＭＣ１１７２及び１１８２は、複数のプロセッサをそれぞれのメモリ、すなわち、それぞれのプロセッサにローカルに取り付けられたメインメモリの部分となり得るメモリ１１３２及びメモリ１１３４に結合する。
【００７９】
プロセッサ１１７０、１１８０はそれぞれ、ポイントツーポイントインターフェース回路１１７６、１１９４、１１８６、１１９８を用いる個々のＰ−Ｐインターフェース１１５２、１１５４を介して、チップセット１１９０と情報を交換し得る。チップセット１１９０は、高性能インターフェース１１３９を介して、コプロセッサ１１３８と任意的に情報を交換し得る。一実施形態において、コプロセッサ１１３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ、又は同様のもの等の特別用途プロセッサである。
【００８０】
共有キャッシュ（不図示）は、プロセッサが低電力モードに置かれている場合に、複数のプロセッサのいずれか又は両方のローカルキャッシュ情報が共有キャッシュに格納され得るように、プロセッサに含まれるか、又は、両方のプロセッサの外部にあってＰ−Ｐ相互接続を介して複数のプロセッサに接続されるかのいずれであってよい。
【００８１】
チップセット１１９０は、インターフェース１１９６を介して、第１のバス１１１６に結合され得る。一実施形態において、第１のバス１１１６は、周辺機器相互接続（ＰＣＩ）バス又はＰＣＩエクスプレスバス若しくは別の第３世代Ｉ／Ｏ相互接続バス等のバスであってよいが、本発明の範囲はこれに限定されない。
【００８２】
図１１に示されるように、様々なＩ／Ｏデバイス１１１４が、第１のバス１１１６を第２のバス１１２０に結合するバスブリッジ１１１８と共に、第１のバス１１１６に結合されてよい。一実施形態において、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えば、グラフィクスアクセラレータ若しくはデジタル・シグナル・プロセッシング（ＤＳＰ）ユニット等）、フィールド・プログラマブル・ゲート・アレイ又は任意の他のプロセッサ等の１つ又は複数の追加のプロセッサ１１１５が、第１のバス１１１６に結合される。一実施形態において、第２のバス１１２０は、ローピンカウント（ＬＰＣ）バスであってよい。例えば、キーボード及び／又はマウス１１２２、通信デバイス１１２７、及びディスクドライブ、又は複数の命令／コード及びデータ１１３０を含み得る他の大容量ストレージデバイス等のストレージユニット１１２８を含む様々なデバイスが、一実施形態において、第２のバス１１２０に結合され得る。さらに、オーディオＩ／Ｏ１１２４は、第２のバス１１２０に結合され得る。複数の他のアーキテクチャが可能であることが留意されたい。例えば、図１１のポイントツーポイントアーキテクチャの代わりに、システムが、マルチドロップバス又は他のそのようなアーキテクチャを実装し得る。
【００８３】
ここで、図１２を参照すると、本発明の実施形態に係る第２のより具体的かつ例示的なシステム１２００のブロック図が示される。図１１及び１２における同様の複数の要素には、同様の参照番号が付され、図１１の複数の特定の態様は、図１２の他の複数の態様を不明瞭にすることを回避するために、図１２から省略されている。
【００８４】
図１２は、複数のプロセッサ１１７０、１１８０はそれぞれ、統合メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）１１７２及び１１８２を含み得ることを図示する。つまり、ＣＬ１１７２、１１８２は、複数の統合メモリコントローラユニットを含み、かつ、Ｉ／Ｏ制御ロジックを含む。図１２は、メモリ１１３２、１１３４がＣＬ１１７２、１１８２に結合されるのみならず、複数のＩ／Ｏデバイス１２１４も制御ロジック１１７２、１１８２に結合されることも図示する。レガシＩ／Ｏデバイス１２１５は、チップセット１１９０に結合される。
【００８５】
ここで、図１３を参照すると、本発明の実施形態に係るＳｏＣ１３００のブロック図が示される。図９における同様の複数の要素には、同様の参照番号が付されている。また、複数の破線のボックスは、より高度なＳｏＣ上の任意選択的な機能である。図１３において、相互接続ユニット１３０２は、１つ又は複数のコア２０２Ａ−Ｎ及び共有キャッシュユニット９０６のセットを含むアプリケーションプロセッサ１３１０、システムエージェントユニット９１０、バスコントローラユニット９１６、統合メモリコントローラユニット９１４、統合グラフィクスロジック、画像プロセッサ、オーディオプロセッサ及びビデオプロセッサを含み得る１つ又は複数のコプロセッサ１３２０又はそのセット、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）ユニット１３３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット１３３２及び１つ又は複数の外部ディスプレイに結合するためのディスプレイユニット１３４０に結合される。一実施形態において、コプロセッサ１３２０は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組み込みプロセッサ、又は同様のもの等の特別用途プロセッサを含む。
【００８６】
本明細書に開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア又はそのような複数の実装アプローチの組み合わせで実装されてよい。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性及び非揮発性メモリ及び／又はストレージ要素を含む）、少なくとも１つの入力デバイス、及び少なくとも１つの出力デバイスを備えるプログラマブルシステム上で実行するコンピュータプログラム又はプログラムコードとして、実装され得る。
【００８７】
図１１に図示されているコード１１３０等のプログラムコードは、本明細書に記載される複数の関数を実行し、出力情報を生成するために、複数の入力命令に適用されてよい。  出力情報は、１つ又は複数の出力デバイスに、公知の様式で適用されてよい。この用途の目的のため、処理システムは、例えば、デジタル・シグナル・プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサ等のプロセッサを有する何らかのシステムを含む。
【００８８】
プログラムコードは、処理システムと通信を行うために、高水準の手順型又はオブジェクト指向プログラミング言語で実装されてもよい。また、プログラムコードは、所望される場合、アセンブリ言語又は機械言語で実装されてよい。実際に、本明細書で説明される複数のメカニズムは、何らかの特定のプログラミング言語の範囲に限定されない。いずれの場合であっても、言語はコンパイラ型又はインタープリタ型言語であってよい。
【００８９】
少なくとも１つの実施形態の１つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的な複数の命令によって実行されてよく、これらは、機械によって読み出されたとき、機械にロジックを組み立てさせることにより、本明細書で説明される複数の技術を実行する。「ＩＰコア」として公知の複数のそのような表現は、有形の機械可読媒体上に格納され、様々な顧客又は製造設備に供給されて、実際にロジック又はプロセッサを作り出す製造機械にロードされてよい。
【００９０】
そのような機械可読記憶媒体としては、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ―ＲＯＭ）、書き換え可能コンパクトディスク（ＣＤ―ＲＷ）、及び光磁気ディスク等、任意の他のタイプのディスクを含む記憶媒体、リードオンリメモリ（ＲＯＭ）、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、及び相変化メモリ（ＰＣＭ）等の半導体デバイス、磁気若しくは光カード、又は複数の電子命令を格納するのに適切な任意の他のタイプの媒体を含む、機械又はデバイスにより製造又は形成される、非一時的で有形な複数の構成の物品を含み得るが、これらに限定されない。
【００９１】
従って、本発明の複数の実施形態は、複数の命令を含む、又は本明細書に記載される複数の構造、複数の回路、複数の装置、複数のプロセッサ及び／又は複数のシステム機能を定義するハードウェア記述言語（ＨＤＬ）等の設計データを含む非一時的かつ有形の機械可読媒体も含む。複数のそのような実施形態はまた、プログラム製品と称されてよい。（バイナリトランスレーション、コードモーフィング等を含む）エミュレーション 
【００９２】
場合によっては、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するために、用いられてよい。例えば、命令コンバータは、命令を、コアにより処理されることになる１つ又は複数の他の命令にトランスレート（例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて）、モーフィング、エミュレート、あるいは変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、又はそれらの組み合わせにおいて実装され得る。命令コンバータは、プロセッサ上にあってよく、プロセッサ外にあってよく、又は部分がプロセッサ上で部分がプロセッサ外にあってよい。
【００９３】
図１４は、本発明の複数の実施形態に係る、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。図示される実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的には、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア又はそれらの様々な組み合わせで実装されてよい。
【００９４】
図１４は、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１４１６によりネイティブで実行され得るｘ８６バイナリコード１４０６を生成するように、高水準言語１４０２のプログラムが、ｘ８６コンパイラ１４０４を用いてコンパイルされ得ることを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ１４１６は、少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）社製プロセッサと実質的に同じ結果を実現するために、（１）インテル（登録商標）ｘ８６命令セットコアの命令セットの大部分又は（２）複数のオブジェクトコードバージョンの複数のアプリケーション又は少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）社製プロセッサ上で動作することを目的とする他のソフトウェアを、互換性を有するように実行するあるいは処理することにより、少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）社製プロセッサと実質的に同じ複数の関数を実行することができる任意のプロセッサを表す。ｘ８６コンパイラ１４０４は、追加の連係処理を用いて、又は用いずに、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１４１６上で実行されることができるｘ８６バイナリコード１４０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図１４は、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ１４１４（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳの命令セットを実行する、及び／又はカリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）によってネイティブで実行され得る代替的な命令セットバイナリコード１４１０を生成するために、代替的な命令セットコンパイラ１４０８を用いて、高水準言語１４０２のプログラムがコンパイルされてよいことを示す。命令コンバータ１４１２は、ｘ８６バイナリコード１４０６を、ｘ８６命令セットコアを有さないプロセッサ１４１４によってネイティブで実行され得るコードに変換するために用いられる。この変換されたコードは、これが可能な命令コンバータの作成は難しいため、代替的な命令セットバイナリコード１４１０と同じである可能性は低いが、しかしながら、変換されたコードは、一般的なオペレーションを実現し、代替的な命令セットからの複数の命令で構成される。つまり、命令コンバータ１４１２は、エミュレーション、シミュレーション又は任意の他の処理により、プロセッサ又はｘ８６命令セットプロセッサ又はコアを有さない他の電子デバイスにｘ８６バイナリコード１４０６を実行させることを可能にするソフトウェア、ファームウェア、ハードウェア又はそれらの組み合わせを表す。
【００９５】
説明及び請求項において、「結合」及び／又は「接続」という用語、並びにそれらの派生語は、用いられていてよい。これらの用語は、互いの同義語であることを意図されない。むしろ、複数の実施形態において、「接続」は、２つ又はそれより多くの要素が互いに直接物理的及び／又は電気的に接触していることを示すのに用いられ得る。「結合」は、２つ又はそれより多くの要素が互いに直接物理的及び／又は電気的に接触していることを意味し得る。しかしながら、「結合」はまた、２つ又はそれより多くの要素が互いに直接的と接触していないが、それでもなお互いに協働又は相互作用することを意味し得る。例えば、実行ユニットは、１つ又は複数の介在コンポーネントを通してレジスタ及び／又は復号ユニットに結合し得る。複数の図面において、複数の矢印が複数の接続及び複数の結合を示すのに用いられる。
【００９６】
「及び／又は」という用語は、用いられていてよい。本明細書で用いられているように、「及び／又は」という用語は、一方又は他方若しくは両方を意味する（例えば、Ａ及び／又はＢは、Ａ又はＢ、若しくは、Ａ及びＢを意味する）。
【００９７】
上の説明において、複数の実施形態の完全な理解を提供するために、具体的な詳細が示されている。しかしながら、複数の他の実施形態は、これらの具体的な詳細のいくつかなしでも実施され得る。本発明の範囲は、上で提供されている特定の例にではなく、以下の請求項のみにより決定されるべきである。複数の他の例において、複数の周知回路、構造、デバイス、及びオペレーションは、本説明の理解を不明瞭にすることを回避するために、ブロック図形式に及び／又は詳細なしで示されている。適切とされるのが、複数の参照番号、又は複数の参照番号の複数の末尾の部分が、対応の又は類似の要素を示すために複数の図面の間において繰り返されており、別段に指定され又は明確に明らかにされていない限り、これらは、同様の又は同じ特性を任意的に有してよい。
【００９８】
複数の特定のオペレーションは、複数のハードウェア要素により実行されてよく、又は複数の機械実行可能な又は回路実行可能な命令に具現化されてよく、これは、機械、回路、又はハードウェア要素（例えば、プロセッサ、プロセッサの一部、回路等）に、当該複数のオペレーションを実行する当該複数の命令でプログラミングさせる及び／又はその結果をもたすのに用いられてよい。複数のオペレーションはまた、ハードウェア及びソフトウェアの組み合わせにより任意的に実行され得る。プロセッサ、機械、回路、又はハードウェアは、命令を実行する及び／又は処理して命令に応答して結果を格納するように動作可能な具体的又は特定の回路又は他のロジック（例えば、ファームウェア及び／又はソフトウェアと潜在的に組み合わせられるハードウェア）を含み得る。
【００９９】
いくつかの実施形態は、機械可読媒体を含む製造物品（例えば、コンピュータプログラム製品）を含む。媒体は、機械に可読な形態に情報を提供、例えば、格納するメカニズムを含み得る。機械可読媒体は、そこに格納された一の命令又は一連の命令を提供してよく、又は有してよく、機械により実行された場合及び／又はそういったとき、当該命令は、機械に、本明細書で開示されている１つ又は複数のオペレーション、方法、又は技術を実行させる及び／又は機械にそれらを実行する結果をもたらすように動作可能である。機械可読媒体は、本明細書で開示されている複数の命令の１つ又は複数の実施形態を格納してよく、あるいは、提供してよい。
【０１００】
いくつかの実施形態において、機械可読媒体は、有形及び／又は非一時的機械可読記憶媒体を含んでよい。
【０１０１】
例えば、有形及び／又は非一時的機械可読記憶媒体は、フロッピー（登録商標）ディスケット、光ストレージ媒体、光ディスク、光データストレージデバイス、ＣＤ−ＲＯＭ、磁気ディスク、光磁気ディスク、リードオンリメモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、位相変化メモリ、位相変化データストレージ材料、不揮発性メモリ、非揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイス等を含み得る。
【０１０２】
適切な機械の複数の例は、汎用プロセッサ、特別用途プロセッサ、命令処理装置、デジタル論理回路、集積回路又は同様のものを含むが、これらに限定されない。適切な機械の更なる複数の他の例は、コンピューティングデバイス、若しくは、プロセッサ、命令処理装置、デジタル論理回路、又は集積回路を含む他の電子デバイスを含む。そのようなコンピューティングデバイス及び電子デバイスの複数の例は、デスクトップ型コンピュータ、ラップトップ型コンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス（例えば、ルータ及びスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、メディアプレイヤ、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラを含むが、これらに限定されない。
【０１０３】
この明細書全体に関連する「一実施形態」、「実施形態」、「１つ又は複数の実施形態」、「いくつかの実施形態」は、例えば、特定の特徴が本発明の実施に含まれ得るが必ずしも必須ではないことを示す。同様に、本説明において、開示を効率的にして発明の様々な態様の理解を補助する目的のために、様々な特徴が一緒に単一の実施形態、図面、又はそれらの説明にグループ化される場合がある。しかしながら、開示のこの方法は、本発明が各請求項において明確に列記されたものよりも多くの特徴を必要とするという意図を反映するものと解釈されるべきではない。むしろ、以下の請求項が反映するように、発明の複数の態様は、単一の開示される実施形態の全ての特徴より少なく存在する。つまり、詳細な説明に続く請求項は、これにより詳細な説明に明確に組み込まれ、各請求項は、本発明の別個の実施形態として独立している。実施例
【０１０４】
以下の複数の例は、更なる実施形態に関する。複数の例における具体的な事柄は、１つ又は複数の実施形態の任意の箇所に用いられ得る。
【０１０５】
例１は、命令を復号する復号ユニットを含むプロセッサ又は他の装置である。命令は、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドを示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す。プロセッサ又は装置の実行ユニットは、復号ユニットに結合される。実行ユニットは、命令に応答して、結果を格納するように動作可能である。結果は、第１の６４ビット値に第２の６４ビット値を乗算し、第３の６４ビット値を加算し、第４の６４ビット値を加算したものを含む。実行ユニットは、命令により示される第１の６４ビットのデスティネーション・オペランドに、結果の半分の最下位６４ビットを格納し、命令により示される第２の６４ビットのデスティネーション・オペランドに、結果の半分の最上位６４ビットを格納する。
【０１０６】
例２は、例１のプロセッサを含み、任意的に、復号ユニットが、ＲＳＡアルゴリズム加速命令を含む命令を復号する。
【０１０７】
例３は、任意の先行する例のプロセッサを含み、任意的に、復号ユニットが、汎用レジスタＲＡＸとして第２の６４ビット値を有する第２の６４ビットのソースオペランドを暗黙的に示す命令を復号する。
【０１０８】
例４は、任意の先行する例のプロセッサを含み、任意的に、復号ユニットが、汎用レジスタＲＤＸとして、結果の半分の最上位６４ビットを有する第２の６４ビットのデスティネーション・オペランドを暗黙的に示す命令を復号する。
【０１０９】
例５は、例１のプロセッサを含み、任意的に、復号ユニットが、汎用レジスタＲＡＸとして、第２の６４ビット値を有する第２の６４ビットのソースオペランドを暗黙的に示し、汎用レジスタＲＤＸとして、結果の半分の最上位６４ビットを有する第２の６４ビットのデスティネーション・オペランドを暗黙的に示す命令を復号する。
【０１１０】
例６は、任意の先行する例のプロセッサを含み、任意的に、復号ユニットが、結果の半分の最下位６４ビットを格納する第１の６４ビットのデスティネーション・オペランドと暗黙的に同じストレージ位置となる、第４の６４ビット値を有する第４の６４ビットのソースオペランドを明示的に指定する命令を復号する。
【０１１１】
例７は、任意の先行する例のプロセッサを含み、任意的に、復号ユニットが、結果の半分の最上位６４ビットを格納する第２の６４ビットのデスティネーション・オペランドと暗黙的に同じストレージ位置となる、第３の６４ビット値を有する第３の６４ビットのソースオペランドを暗黙的に示す命令を復号する。
【０１１２】
例８は、例７のプロセッサを含み、任意的に、ストレージ位置が汎用レジスタを含む。
【０１１３】
例９は、任意の先行する例のプロセッサを含み、任意的に、復号ユニットが、２つのオペランドのみを明示的に指定するフォーマットを有する命令を復号する。
【０１１４】
例１０は、例９のプロセッサを含み、任意的に、復号ユニットが、第１の６４ビット値を有する第１の６４ビットのソースオペランドを明示的に指定し、第２の６４ビット値を有する第２の６４ビットのソースオペランドを暗黙的に示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを暗黙的に示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを明示的に指定し、第４の６４ビット値を有する第４の６４ビットのソースオペランドのために用いられるものと同じストレージ位置となる、結果の半分の最下位６４ビットを格納する第１の６４ビットのデスティネーション・オペランドを暗黙的に示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドのために用いられるものと同じストレージ位置となる、結果の半分の最上位６４ビットを格納する第２の６４ビットのデスティネーション・オペランドを暗黙的に示す命令を復号する。
【０１１５】
例１１は、任意の先行する例プロセッサを含み、任意的に、実行ユニットが、第３の６４ビット値と、第１の６４ビット値及び第２の６４ビット値の積との和を格納する１２８ビットのストレージ位置を含む。
【０１１６】
例１２は、任意の先行する例のプロセッサを含み、任意的に、実行ユニットが、第３の６４ビット値を表す値と、第１の６４ビット値及び第２の６４ビット値を乗算した１２８ビットの積とを加算する１２８ビットの加算器を含む。
【０１１７】
例１３は、命令を受信する段階を含む、プロセッサ又は他の装置における方法である。命令は、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドを示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す。方法は、命令に応答して結果を格納する段階を含む。結果は、第１の６４ビット値に第２の６４ビット値を乗算し、第３の６４ビット値を加算し、第４の６４ビット値を加算したものを含む。結果を格納する段階は、命令により示される第１の６４ビットのデスティネーション・オペランドに、結果の半分の最下位６４ビットを格納する段階と、命令により示される第２の６４ビットのデスティネーション・オペランドに、結果の半分の最上位６４ビットを格納する段階とを含む。
【０１１８】
例１４は、ＲＳＡアルゴリズムのＯｐｅｎＳＳＬライブラリ実行の間に任意的に実行される例１３の方法を含む。
【０１１９】
例１５は、ＲＳＡアルゴリズムのＯｐｅｎＳＳＬライブラリ実行の関数ｂｎ＿ｍｕｌ＿ｍｏｎｔの間に任意的に実行される例１４の方法を含む。
【０１２０】
例１６は、任意の先行する例の方法を含み、任意的に、受信する段階が、汎用レジスタＲＡＸとして、第２の６４ビット値を有する第２の６４ビットのソースオペランドを暗黙的に示す命令を受信する段階を含む。
【０１２１】
例１７は、任意の先行する例の方法を含み、任意的に、受信する段階が、汎用レジスタＲＤＸとして、結果の半分の最上位６４ビットを有する第２の６４ビットのデスティネーション・オペランドを暗黙的に示す命令を受信する段階を含む。
【０１２２】
例１８は、任意の先行する例の方法を含み、任意的に、受信する段階が、汎用レジスタＲＡＸとして、第２の６４ビット値を有する第２の６４ビットのソースオペランドを暗黙的に示し、汎用レジスタＲＤＸとして、結果の半分の最上位６４ビットを有する第２の６４ビットのデスティネーション・オペランドを暗黙的に示す命令を受信する段階を含む。
【０１２３】
例１９は、任意の先行する例の方法を含み、任意的に、受信する段階が、結果の半分の最下位６４ビットを格納するのに用いられる第１の６４ビットのデスティネーション・オペランドと暗黙的に同じストレージ位置でもある、第４の６４ビット値を有する第４の６４ビットのソースオペランドを明示的に指定する命令を受信する段階を含む。
【０１２４】
例２０は、任意の先行する例の方法を含み、任意的に、受信する段階が、結果の半分の最上位６４ビットを格納するのに用いられる第２の６４ビットのデスティネーション・オペランドと暗黙的に同じストレージ位置でもある、第３の６４ビット値を有する第３の６４ビットのソースオペランドを暗黙的に示す命令を受信する段階を含む。
【０１２５】
例２１は、任意の先行する例の方法を含み、任意的に、受信する段階が、２つのオペランドのみを明示的に指定するフォーマットを有する命令を受信する段階を含む。
【０１２６】
例２２は、複数の汎用レジスタと、ＲＳＡアルゴリズム加速命令を復号する復号ユニットとを含むプロセッサ又は他の装置である。第１の６４ビット値を有する第１の６４ビットのソースオペランドを示すＲＳＡアルゴリズム加速命令は、第２の６４ビット値を有する第２の６４ビットのソースオペランドとして汎用レジスタＲＡＸを暗黙的に示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す。プロセッサ又は他の装置はまた、復号ユニットと複数の汎用レジスタに結合される実行ユニットを含む。実行ユニットは、ＲＳＡアルゴリズム加速命令に応答して結果を格納するように動作可能である。結果は、第１の６４ビット値に第２の６４ビット値を乗算し、第３の６４ビット値を加算し、第４の６４ビット値を加算したものを含む。実行ユニットは、６４ビットのソースオペランドと同じストレージ位置となる、命令により示される第１の６４ビットのデスティネーション・オペランドに、結果の半分の最下位６４ビットを格納し、命令により示される第２の６４ビットのデスティネーション・オペランドとして、暗黙的に示される汎用レジスタＲＤＸに、結果の半分の最上位６４ビットを格納する。
【０１２７】
例２３は、例２２のプロセッサを含み、任意的に、汎用レジスタＲＤＸはまた、第３の６４ビット値を格納するのに用いられ、結果の半分の最下位６４ビットを格納するのに用いられる当該ストレージ位置は、第４の６４ビット値を格納するのにも用いられる。
【０１２８】
例２４は、相互接続と、当該相互接続に結合されるプロセッサとを含む、複数の命令を処理するシステムである。プロセッサは、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドを示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す命令を受信する。プロセッサは、命令に応答して、第１の６４ビット値に第２の６４ビット値を乗算し、第３の６４ビット値を加算し、第４の６４ビット値を加算したものを含む結果を格納するように動作可能である。プロセッサは、命令により示される第１の６４ビットのデスティネーション・オペランドに、結果の半分の最下位６４ビットを格納し、命令により示される第２の６４ビットのデスティネーション・オペランドに、結果の半分の最上位６４ビットを格納する。システムはまた、相互接続に結合されるダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）を含む。ＤＲＡＭは、アレイの複数のパラメータを更新する命令を使用するＲＳＡアルゴリズムのＯｐｅｎＳＳＬ実装を格納する。
【０１２９】
例２５は、例２４のシステムを含み、任意的に、命令が、第１の汎用レジスタとして第２の６４ビット値を有する第２の６４ビットのソースオペランドを暗黙的に示し、第２の異なる汎用レジスタとして、結果の半分の最上位６４ビットを有する第２の６４ビットのデスティネーション・オペランドを暗黙的に示す。
【０１３０】
例２６は、非一時的機械可読記憶媒体を含む製造物品である。非一時的機械可読記憶媒体は、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドを示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す命令を格納する。命令は、機械により実行された場合、当該機械に、結果を格納する段階を含む複数のオペレーションを実行させるように動作可能である。結果は、第１の６４ビット値に第２の６４ビット値を乗算し、第３の６４ビット値を加算し、第４の６４ビット値を加算したものを含む。結果の半分の最下位６４ビットは、命令により示される第１の６４ビットのデスティネーション・オペランドに格納され、結果の半分の最上位６４ビットは、命令により示される第２の６４ビットのデスティネーション・オペランドに格納される。
【０１３１】
例２７は、例２６の物品を含み、任意的に、命令は、第１の汎用レジスタとして、第２の６４ビット値を有する第２の６４ビットのソースオペランドを暗黙的に示し、第２の異なる汎用レジスタとして、結果の半分の最上位６４ビットを有する第２の６４ビットのデスティネーション・オペランドを暗黙的に示す。
【０１３２】
例２８は、例１３−２１のうちのいずれかの方法を実行するように動作可能なプロセッサ又は他の装置を含む。
【０１３３】
例２９は、例１３−２１のうちのいずれかの方法を実行するための手段を含むプロセッサ又は他の装置を含む。
【０１３４】
例３０は、複数のモジュール、複数のユニット、ロジック、回路、手段、又はそれらの任意の組み合わせを含む、例１３−２１のうちのいずれかの方法を実行するプロセッサを含む。
【０１３５】
例３１は、相互接続と、相互接続に結合されるプロセッサと、相互接続に結合され、ＤＲＡＭ、グラフィクスチップ、無線通信チップ、相変化メモリ、ビデオカメラから選択される少なくとも１つのコンポーネントとを含むコンピュータシステム又は他の電子デバイスを含み、当該コンピュータシステム又は他の電子デバイスは、例１３−２１のうちのいずれかの方法を実行する。
【０１３６】
例３２は、プロセッサ、コンピュータシステム、又は他の機械により実行された場合及び／又はそういったとき、機械に、例１３−２１のうちのいずれかの方法を実行させるように動作可能な命令を任意的に格納する、あるいは、提供する非一時的機械可読媒体を任意的に含む。
【０１３７】
例３３は、本明細書に実質的に記載されている１つ又は複数のオペレーション又は任意の方法を実行するように動作可能なプロセッサ又は他の装置を含む。
【０１３８】
例３４は、本明細書に実質的に記載されている１つ又は複数のオペレーション又は任意の方法を実行するための手段を含むプロセッサ又は他の装置を含む。
【０１３９】
例３５は、本明細書に実質的に記載されている複数の命令のうちのいずれかを実行するように動作可能なプロセッサ又は他の装置を含む。
【０１４０】
例３６は、本明細書に実質的に記載されている複数の命令のうちのいずれかを実行するための手段を含むプロセッサ又は他の装置を含む。
【図１】
2017503232.tif 000005
【図２】
2017503232.tif 000006
【図３】
2017503232.tif 000007
【図４】
2017503232.tif 000008
【図５】
2017503232.tif 000009
【図６】
2017503232.tif 000010
【図７Ａ】
2017503232.tif 000011
【図７Ｂ】
2017503232.tif 000012
【図８Ａ】
2017503232.tif 000013
【図８Ｂ】
2017503232.tif 000014
【図９】
2017503232.tif 000015
【図１０】
2017503232.tif 000016
【図１１】
2017503232.tif 000017
【図１２】
2017503232.tif 000018
【図１３】
2017503232.tif 000019
【図１４】
2017503232.tif 000020
【手続補正書】
【提出日】平成28年6月27日(2016.6.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサであって、
命令を復号する復号ユニットであって、前記命令は、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドを示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す、復号ユニットと、
前記復号ユニットに結合される実行ユニットであって、前記実行ユニットは、前記命令に応答して、前記第１の６４ビット値に前記第２の６４ビット値を乗算し、前記第３の６４ビット値を加算し、前記第４の６４ビット値を加算したものを含む結果を格納するように動作可能である実行ユニットと
を備え、
前記実行ユニットは、前記命令により示される第１の６４ビットのデスティネーション・オペランドに、前記結果の半分の最下位６４ビットを格納し、前記命令により示される第２の６４ビットのデスティネーション・オペランドに、前記結果の半分の最上位６４ビットを格納する、
プロセッサ。
【請求項２】
前記復号ユニットは、ＲＳＡアルゴリズム加速命令を有する前記命令を復号する、
請求項１に記載のプロセッサ。
【請求項３】
前記復号ユニットは、汎用レジスタＲＡＸとして、前記第２の６４ビット値を有する前記第２の６４ビットのソースオペランドを暗黙的に示す前記命令を復号する、
請求項１又は２に記載のプロセッサ。
【請求項４】
前記復号ユニットは、汎用レジスタＲＤＸとして、前記結果の前記半分の最上位６４ビットを有する前記第２の６４ビットのデスティネーション・オペランドを暗黙的に示す前記命令を復号する、
請求項１から３のいずれか１項に記載のプロセッサ。
【請求項５】
前記復号ユニットは、汎用レジスタＲＡＸとして、前記第２の６４ビット値を有する前記第２の６４ビットのソースオペランドを暗黙的に示し、汎用レジスタＲＤＸとして、前記結果の前記半分の最上位６４ビットを有する前記第２の６４ビットのデスティネーション・オペランドを暗黙的に示す前記命令を復号する、
請求項１に記載のプロセッサ。
【請求項６】
前記復号ユニットは、前記結果の前記半分の最下位６４ビットを格納する前記第１の６４ビットのデスティネーション・オペランドと暗黙的に同じストレージ位置となる、前記第４の６４ビット値を有する前記第４の６４ビットのソースオペランドを明示的に指定する前記命令を復号する、
請求項１から５のいずれか１項に記載のプロセッサ。
【請求項７】
前記復号ユニットは、前記結果の前記半分の最上位６４ビットを格納する前記第２の６４ビットのデスティネーション・オペランドと暗黙的に同じストレージ位置となる、前記第３の６４ビット値を有する前記第３の６４ビットのソースオペランドを暗黙的に示す前記命令を復号する、
請求項１から６のいずれか１項に記載のプロセッサ。
【請求項８】
前記ストレージ位置は、汎用レジスタを含む、
請求項７に記載のプロセッサ。
【請求項９】
前記復号ユニットは、２つのオペランドのみを明示的に指定するフォーマットを有する前記命令を復号する、
請求項１から８のいずれか１項に記載のプロセッサ。
【請求項１０】
前記復号ユニットは、
前記第１の６４ビット値を有する前記第１の６４ビットのソースオペランドを明示的に指定し、
前記第２の６４ビット値を有する前記第２の６４ビットのソースオペランドを暗黙的に示し、
前記第３の６４ビット値を有する前記第３の６４ビットのソースオペランドを暗黙的に示し、
前記第４の６４ビット値を有する前記第４の６４ビットのソースオペランドを明示的に指定し、
前記第４の６４ビット値を有する前記第４の６４ビットのソースオペランドのために用いられるものと同じストレージ位置となる、前記結果の前記半分の最下位６４ビットを格納する前記第１の６４ビットのデスティネーション・オペランドを暗黙的に示し、
前記第３の６４ビット値を有する前記第３の６４ビットのソースオペランドのために用いられるものと同じストレージ位置となる、前記結果の前記半分の最上位６４ビットを格納する前記第２の６４ビットのデスティネーション・オペランドを暗黙的に示す
前記命令を復号する、
請求項９に記載のプロセッサ。
【請求項１１】
前記実行ユニットは、前記第３の６４ビット値と、前記第１の６４ビット値及び第２の６４ビット値の積との和を格納する１２８ビットのストレージ位置を有する、
請求項１から１０のいずれか１項に記載のプロセッサ。
【請求項１２】
前記実行ユニットは、前記第３の６４ビット値と、前記第１の６４ビット値及び前記第２の６４ビット値を乗算した１２８ビットの積とを表す値を加算する１２８ビットの加算器を有する、
請求項１から１１のいずれか１項に記載のプロセッサ。
【請求項１３】
プロセッサにおける方法であって、前記方法は、
命令を受信する段階であって、前記命令は、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドを示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す、段階と、
前記命令に応答して、結果を格納する段階であって、前記結果は、前記第１の６４ビット値に前記第２の６４ビット値を乗算し、第３の６４ビット値を加算し、前記第４の６４ビット値を加算したものを含む、段階と
を備え、
前記結果を格納する段階は、前記命令により示される第１の６４ビットのデスティネーション・オペランドに、前記結果の半分の最下位６４ビットを格納する段階と、前記命令により示される第２の６４ビットのデスティネーション・オペランドに、前記結果の半分の最上位６４ビットを格納する段階とを含む、
方法。
【請求項１４】
前記方法は、ＲＳＡアルゴリズムのＯｐｅｎＳＳＬライブラリ実行の間に実行される、
請求項１３に記載の方法。
【請求項１５】
前記方法は、前記ＲＳＡアルゴリズムの前記ＯｐｅｎＳＳＬライブラリ実行の関数ｂｎ＿ｍｕｌ＿ｍｏｎｔの間に実行される、
請求項１４に記載の方法。
【請求項１６】
前記受信する段階は、汎用レジスタＲＡＸとして、前記第２の６４ビット値を有する前記第２の６４ビットのソースオペランドを暗黙的に示す前記命令を受信する段階を含む、
請求項１３から１５のいずれか１項に記載の方法。
【請求項１７】
前記受信する段階は、汎用レジスタＲＤＸとして、前記結果の前記半分の最上位６４ビットを有する前記第２の６４ビットのデスティネーション・オペランドを暗黙的に示す前記命令を受信する段階を含む、
請求項１３から１６のいずれか１項に記載の方法。
【請求項１８】
前記受信する段階は、汎用レジスタＲＡＸとして、前記第２の６４ビット値を有する前記第２の６４ビットのソースオペランドを暗黙的に示し、汎用レジスタＲＤＸとして、前記結果の前記半分の最上位６４ビットを有する前記第２の６４ビットのデスティネーション・オペランドを暗黙的に示す前記命令を受信する段階を含む、
請求項１３から１７のいずれか１項に記載の方法。
【請求項１９】
前記受信する段階は、前記結果の前記半分の最下位６４ビットを格納するのに用いられる前記第１の６４ビットのデスティネーション・オペランドと暗黙的に同じストレージ位置でもある、前記第４の６４ビット値を有する前記第４の６４ビットのソースオペランドを明示的に指定する前記命令を受信する段階を含む、
請求項１３から１８のいずれか１項に記載の方法。
【請求項２０】
前記受信する段階は、前記結果の前記半分の最上位６４ビットを格納するのに用いられる前記第２の６４ビットのデスティネーション・オペランドと暗黙的に同じストレージ位置でもある、前記第３の６４ビット値を有する前記第３の６４ビットのソースオペランドを暗黙的に示す前記命令を受信する段階を含む、
請求項１３から１９のいずれか１項に記載の方法。
【請求項２１】
前記受信する段階は、２つのオペランドのみを明示的に指定するフォーマットを有する前記命令を受信する段階を含む、
請求項１３から２０のいずれか１項に記載の方法。
【請求項２２】
プロセッサであって、
複数の汎用レジスタと、
ＲＳＡアルゴリズム加速命令を復号する復号ユニットであって、前記ＲＳＡアルゴリズム加速命令は、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドとして、汎用レジスタＲＡＸを暗黙的に示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す、復号ユニットと、
前記復号ユニットと前記複数の汎用レジスタに結合される実行ユニットであって、前記ＲＳＡアルゴリズム加速命令に応答して、前記第１の６４ビット値に前記第２の６４ビット値を乗算し、前記第３の６４ビット値を加算し、前記第４の６４ビット値を加算したものを含む結果を格納するように動作可能な実行ユニットと
を備え、
前記実行ユニットは、６４ビットのソースオペラントと同じストレージ位置にある、前記命令により示される第１の６４ビットのデスティネーション・オペランドに、前記結果の半分の最下位６４ビットを格納し、前記命令により示される第２の６４ビットのデスティネーション・オペランドとして、暗黙的に示される汎用レジスタＲＤＸに、前記結果の半分の最上位６４ビットを格納する、
プロセッサ。
【請求項２３】
前記汎用レジスタＲＤＸは、前記第３の６４ビット値を格納するのにも用いられ、
前記結果の前記半分の最下位６４ビットを格納するのに用いられる前記ストレージ位置は、前記第４の６４ビット値を格納するのにも用いられる、
請求項２２に記載のプロセッサ。
【請求項２４】
複数の命令を処理するシステムであって、
相互接続と
前記相互接続に結合されるプロセッサであって、前記プロセッサは、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドを示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す命令を受信し、前記プロセッサは、前記命令に応答して、前記第１の６４ビット値に前記第２の６４ビット値を乗算し、前記第３の６４ビット値を加算し、前記第４の６４ビット値を加算したものを含む結果を格納するように動作可能であり、前記プロセッサは、前記命令により示される第１の６４ビットのデスティネーション・オペランドに、前記結果の半分の最下位６４ビットを格納し、前記命令により示される第２の６４ビットのデスティネーション・オペランドに、前記結果の半分の最上位６４ビットを格納する、プロセッサと、
前記相互接続に結合されるダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）であって、前記ＤＲＡＭは、アレイの複数のパラメータを更新するよう、前記命令を用いるＲＳＡアルゴリズムのＯｐｅｎＳＳＬ実装を格納するＤＲＡＭと
を備える
システム。
【請求項２５】
前記命令は、第１の汎用レジスタとして、前記第２の６４ビット値を有する前記第２の６４ビットのソースオペランドを暗黙的に示し、第２の異なる汎用レジスタとして、前記結果の前記半分の最上位６４ビットを有する前記第２の６４ビットのデスティネーション・オペランドを暗黙的に示す、
請求項２４に記載のシステム。
【請求項２６】
命令を受信する段階であって、前記命令は、第１の６４ビット値を有する第１の６４ビットのソースオペランドを示し、第２の６４ビット値を有する第２の６４ビットのソースオペランドを示し、第３の６４ビット値を有する第３の６４ビットのソースオペランドを示し、第４の６４ビット値を有する第４の６４ビットのソースオペランドを示す、段階と、
前記第１の６４ビット値に前記第２の６４ビット値を乗算し、前記第３の６４ビット値を加算し、前記第４の６４ビット値を加算したものを含む結果を格納する段階であって、前記結果の半分の最下位６４ビットを前記命令により示される第１の６４ビットのデスティネーション・オペランドに格納し、前記結果の半分の最上位６４ビットを前記命令により示される第２の６４ビットのデスティネーション・オペランドに格納する、段階とを
コンピュータに実行させるためのプログラム。
【請求項２７】
前記命令は、第１の汎用レジスタとして、前記第２の６４ビット値を有する前記第２の６４ビットのソースオペランドを暗黙的に示し、第２の異なる汎用レジスタとして、前記結果の前記半分の最上位６４ビットを有する前記第２の６４ビットのデスティネーション・オペランドを暗黙的に示す、
請求項２６に記載のプログラム。
【請求項２８】
請求項１３から２１のいずれか１項に記載の方法を実行するように動作可能なプロセッサ又は他の装置。
【請求項２９】
請求項１３から２１のいずれか１項に記載の方法を実行するための手段を含むプロセッサ又は他の装置。
【請求項３０】
複数のモジュール、複数のユニット、ロジック、回路、手段、又はそれらの任意の組み合わせを含む、請求項１３から２１のいずれか１項に記載の方法を実行するプロセッサ又は他の装置。
【請求項３１】
プロセッサ、コンピュータシステム、及び他の機械のうちの少なくとも１つに請求項１３から２１のいずれか１項に記載の方法を実行させるためのプログラム。
【請求項３２】
コンピュータシステム又は他の電子デバイスであって、
相互接続と、
前記相互接続に結合されるプロセッサと、
前記相互接続に結合される、ＤＲＡＭ，グラフィクスチップ、無線通信チップ、相変化メモリ、及びビデオカメラから選択される少なくとも１つのコンポーネントと、
を備え、
前記コンピュータシステム又は他の電子デバイスは、請求項１３から２１のいずれか１項に記載の方法を実行するように動作可能である、
コンピュータシステム又は他の電子デバイス。
【請求項３３】
請求項２６又は請求項３１に記載のプログラムを格納するコンピュータ可読記録媒体。
【国際調査報告】
2017503232.tif 000021
2017503232.tif 000022