(57)【特許請求の範囲】
【請求項１】
第１のソースオペランド、第２のソースオペランド、および第３のソースオペランドを示す加算命令を受信する段階と、
前記加算命令の結果として前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドを利用して計算した和を、一部分が、前記加算命令が示すデスティネーションオペランドに格納され、一部分が複数のフラグに格納されるよう、格納する段階と
を備える方法。
【請求項２】
前記格納する段階は、
前記複数のフラグの第１のフラグに前記和の最上位ビットの次のビットを格納し、前記複数のフラグの第２のフラグに前記和の最上位ビットを格納する段階を有する請求項１に記載の方法。
【請求項３】
前記和の一部分の前記複数のフラグへの格納には、前記和の一部分をキャリーフラグに格納し、一部分を第２のフラグに格納することが含まれる請求項１に記載の方法。
【請求項４】
前記第２のフラグは、リパーパスされたアーキテクチャフラグを含む請求項２または３に記載の方法。
【請求項５】
前記第２のフラグは、オーバフローフラグを含む請求項２または３に記載の方法。
【請求項６】
前記加算命令は、フラグ付きの加算命令であり、
前記和を格納する段階は、
前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドの、前記複数のフラグの組み合わせに加えた和を格納する段階を有する請求項１から５のいずれか一項に記載の方法。
【請求項７】
前記和を格納する段階は、
前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドの、前記複数のフラグの第１のフラグおよび前記複数のフラグの第２のフラグに２を乗算した積に加えた和を格納する段階を有する請求項６に記載の方法。
【請求項８】
前記複数のフラグの前記組み合わせは、オーバフローフラグを含み、
前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドは、符号なし整数を含む請求項６または７に記載の方法。
【請求項９】
前記受信する段階は、
前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドから選択されるソースオペランドとして、同じ命令セットアーキテクチャの整数乗算命令のデスティネーションオペランドとして暗示的に指定されるレジスタを暗示的に指定する加算命令を受信する段階を有する請求項１から８のいずれか一項に記載の方法。
【請求項１０】
前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドは、３２ビットおよび６４ビットから選択されたサイズを持つ符号なし整数オペランドである請求項１から９のいずれか一項に記載の方法。
【請求項１１】
大きな整数を格納するのに利用されるレジスタのサイズより大きい前記大きな整数の乗算の一部として実行される請求項１から１０のいずれか一項に記載の方法。
【請求項１２】
前記方法は、複数のコアを含む汎用マイクロプロセッサにより実行され、
前記複数のコアのうち少なくとも１つのコアは前記命令に応じた回路を有する請求項１から１１のいずれか一項に記載の方法。
【請求項１３】
第１のソースオペランド、第２のソースオペランド、および第３のソースオペランドを示す加算命令の結果、前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドを利用して計算した和を、一部分が、前記加算命令が示すデスティネーションオペランドに格納され、一部分が複数のフラグに格納されるよう、格納する実行ユニットを備える装置。
【請求項１４】
前記実行ユニットは、前記複数のフラグの第１のフラグに、前記和の最上位ビットの次のビットを格納し、前記複数のフラグの第２のフラグに前記和の最上位ビットを格納する請求項１３に記載の装置。
【請求項１５】
前記実行ユニットは、前記和の一部分をキャリーフラグに格納し、一部分を第２のフラグに格納する請求項１３に記載の装置。
【請求項１６】
前記第２のフラグは、リパーパスされたアーキテクチャフラグを含む請求項１４または１５に記載の装置。
【請求項１７】
前記第２のフラグは、オーバフローフラグを含む請求項１４または１５に記載の装置。
【請求項１８】
前記加算命令は、フラグ付きの加算命令であり、
前記実行ユニットは、前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドの、前記複数のフラグの組み合わせに加えた和を格納する請求項１３から１７のいずれか一項に記載の装置。
【請求項１９】
前記実行ユニットは、前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドの、前記複数のフラグの第１のフラグおよび前記複数のフラグの第２のフラグに２を乗算した積に加えた和を格納する請求項１８に記載の装置。
【請求項２０】
前記複数のフラグの前記組み合わせは、オーバフローフラグを含み、
前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドは、符号なし整数を含む請求項１８または１９に記載の装置。
【請求項２１】
前記実行ユニットは、前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドから選択されるソースオペランドとして、同じ命令セットアーキテクチャの整数乗算命令のデスティネーションオペランドとして暗示的に指定されるレジスタを暗示的に指定する加算命令に応じる請求項１３から２０のいずれか一項に記載の装置。
【請求項２２】
前記実行ユニットは、３２ビットおよび６４ビットから選択されたサイズを持つ符号なし整数を持つ前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドを指定する加算命令に応じる請求項１３から２１のいずれか一項に記載の装置。
【請求項２３】
前記実行ユニットは、マルチコア汎用マイクロプロセッサのコア内に含まれる請求項１３から２２のいずれか一項に記載の装置。
【請求項２４】
前記実行ユニットは、専用暗号化デバイス内に含まれる請求項１３から２２のいずれか一項に記載の装置。
【請求項２５】
それぞれが符号なし整数を持つ第１のソースオペランド、第２のソースオペランド、および第３のソースオペランドと、複数のフラグの組み合わせとを利用して計算した和を、一部分が、加算命令が示すデスティネーションオペランドに格納され、一部分が前記複数のフラグに格納されるよう、格納する実行ユニットを備える装置。
【請求項２６】
前記実行ユニットは、前記第１のソースオペランドと、前記第２のソースオペランドと、前記第３のソースオペランドと、前記複数のフラグの第１のフラグの値と、前記複数のフラグの第２のフラグの値に２を乗算した積の値との和を格納する請求項２５に記載の装置。
【請求項２７】
インターコネクトと、
前記インターコネクトに連結されたプロセッサと、
前記インターコネクトに連結されたＤＲＡＭと
を備え、
前記プロセッサは、第１のソースオペランド、第２のソースオペランド、および第３のソースオペランドを示す加算命令の結果、前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドを利用して計算した和を、一部分が、前記加算命令が示すデスティネーションオペランドに格納され、一部分が複数のフラグに格納されるよう、格納するシステム。
【請求項２８】
前記加算命令は、フラグ付きの加算命令であり、
前記プロセッサは、前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドの、前記複数のフラグの組み合わせに加えた和を格納する請求項２７に記載のシステム。
【請求項２９】
第１のソースオペランド、第２のソースオペランド、および第３のソースオペランドを示す加算命令を含むプログラムであって、
コンピュータに、
前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドを利用して和を計算する段階と、
前記和の一部分を前記加算命令が示すデスティネーションオペランドに格納し、一部分を複数のフラグに格納する段階と
を実行させるためのプログラム。
【請求項３０】
前記加算命令は、フラグ付きの加算命令であり、
前記コンピュータに、前記第１のソースオペランド、前記第２のソースオペランド、および前記第３のソースオペランドの、前記複数のフラグの組み合わせに加えた前記和を計算させるための請求項２９に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
様々な別個の実施形態が、加算命令、該命令を実行する方法、該命令の実行ユニット、または該実行ユニットを含むデバイスに係る。特に、様々な別個の実施形態は、キャリーを伴う三重加算（three-way addition）を実行する加算命令、該命令を実行する方法、該命令の実行ユニット、または該実行ユニットを含むデバイスに係る。
【背景技術】
【０００２】
加算命令は通常、命令セットアーキテクチャ（ＩＳＡ）に含まれている。加算命令によりデバイスはデータの加算を行う、あるいはデータの和を得ることができる。
【０００３】
公知の加算命令には、ＡＤＤ−加算命令、および、ＡＤＣ−キャリーを伴う加算命令が含まれ、両方ともインテル（登録商標）６４およびＩＡ−３２アーキテクチャソフトウェア開発者用マニュアル第２Ａ巻：命令セットレファレンス、Ａ−Ｍ、オーダ番号：２５３６６６−０３２ＵＳ、２００９年９月、および、様々なこれより古いマニュアルで説明がなされている。
【０００４】
ＡＤＤおよびＡＤＣ命令はいずれも、２つのオペランドの加算しかできない。場合によってこれは欠点となりうる。
【０００５】
データ処理においては速度および／または効率性が重要であることから、従来とは異なる新たな加算命令を設けると好適であると思われる。
【図面の簡単な説明】
【０００６】
本発明は、以下の記載を、本発明の実施形態を示す添付図面を参照しながら読むことで理解が深まる。
【図１】加算命令の一実施形態の処理方法の一実施形態のブロックフロー図である。
【図２】命令処理装置の一実施形態のブロック図である。
【図３】加算命令の一実施形態の和を格納するのに利用可能なレジスタと複数のフラグとの組み合わせの一実施形態を示すブロック図である。
【図４】様々な実施形態に適切な、様々な符号なし整数の数値データの種類を示す。
【図５】フラグによる加算命令の一実施形態に応じた実行ユニットの一実施形態のブロック図である。
【図６】複数のフラグを有するフラグレジスタの一実施形態を表すＥＦＬＡＧＳレジスタを示す。
【図７】適切な３２ビットの汎用レジスタセットの一実施形態を示す。
【図８】適切な６４ビットの汎用レジスタセットの一実施形態を示す。
【図９】加算命令の特定の実施形態を表すＡＤＤ３命令の記述を示す。
【図１０】加算命令の特定の実施形態を表すＡＤＤ３命令の疑似コード処理を示す。
【図１１】フラグによる加算命令の特定の実施形態を表すＡＤＯＣ３命令の記述を示す。
【図１２】フラグによる加算命令の特定の実施形態を表すＡＤＯＣ３命令の疑似コード処理を示す。
【図１３】４つのレジスタそれぞれに格納される、４つのクワッドワード符号なし整数として各々格納される２５６ビットの符号なし整数の一実施形態を示す。
【図１４】２５６ビットのクワッドワード符号なし整数の、６４ビットの符号なし整数による乗算と、ＡＤＤ／ＡＤＣ命令での関連する部分積の和とを示す。
【図１５】１以上の実施形態における、２５６ビットのクワッドワード符号なし整数の、６４ビットの符号なし整数による乗算と、ＡＤＤ３／ＡＤＯＣ３命令での関連する部分積の和とを示す。
【図１６】整数乗算命令の暗示的なデスティネーションオペランドと同じ暗示的なソースオペランドを有する加算命令の一実施形態のブロック図である。
【図１７】適切なコンピュータシステムの第１の実施形態のブロック図である。
【図１８】適切なコンピュータシステムの第２の実施形態のブロック図である。
【発明を実施するための形態】
【０００７】
以下の詳細な説明において命令実装の詳細、データの種類、レジスタの種類、レジスタの配置、プロセッサの種類、システム構成等、多くの特定の詳細を述べる。しかし、実施形態はこれら特定の詳細なしに実施可能である。また、公知の回路、構造、および技術等に関して、詳細に説明しないことにより、本発明の実施形態の本質を曖昧にしないようにしている箇所もある。
【０００８】
実施形態は、３つのオペランドの加算を行うことができる、新規で有用な加算命令に係る。他の実施形態は該加算命令の実行ユニットに係る。他の実施形態は、該実行ユニットを有する、または該命令を実行する機能を有する汎用プロセッサ、専用プロセッサ、コントローラ、または他のロジックデバイスまたは命令処理装置に係る。別の実施形態は、ディスク、メモリ、または他の有形機械可読媒体に格納される加算命令に係る。
【０００９】
図１は、加算命令の一実施形態の処理方法１００の一実施形態のブロックフロー図である。様々な実施形態では、方法は、汎用プロセッサ、専用プロセッサ（例えばグラフィックスプロセッサまたはデジタルシグナルプロセッサ（ＤＳＰ））、ハードウェアアクセラレータ（例えば暗号化アクセラレータ）、あるいは、別の種類のロジックデバイスまたは命令処理装置により行うことができる。
【００１０】
加算命令は、ブロック１０２でプロセッサまたは他の命令処理装置により受信されてよい。加算命令は、第１のソースオペランド、第２のソースオペランド、および第３のソースオペランドを示すことができる。
【００１１】
そして、第１、第２、および第３のソースオペランドの和を、加算命令の結果として格納する（ブロック１０４）。１以上の実施形態では、この和は、一部分が、加算命令が示すデスティネーションオペランドに格納され、一部分が、複数のフラグに格納されてよい。１以上の実施形態では、格納される和が、フラグの演算的な組み合わせ（arithmetic combination）に加算される第１、第２、および第３のソースオペランドの和を示してよい。
【００１２】
図２は、命令処理装置２１０の一実施形態のブロック図である。１以上の実施形態では、命令処理装置は汎用プロセッサであってよい。プロセッサは、様々なＣＩＳＣ（complex instruction set computing）プロセッサ、様々なＲＩＳＣ（reduced instruction set computing）プロセッサ、様々なＶＬＩＷ（very long instruction word）プロセッサ、これらの様々なハイブリッド、またはその他のプロセッサ全般のうちのいずれであってもよい。１以上の実施形態では、プロセッサは、カリフォルニア州サンタクララのインテルコーポレーション社製の汎用プロセッサであってよいが、これは必須要件ではない。インテルコーポレーション社製の汎用プロセッサの特定の例には、これらに限定はされないが、インテル（登録商標）コア（登録商標）ｉ７プロセッサ・エクストリームエディション、インテル（登録商標）コア（登録商標）ｉ７プロセッサ、インテル（登録商標）コア（登録商標）ｉ５プロセッサ、インテル（登録商標）コア（登録商標）２エクストリームプロセッサ、インテル（登録商標）コア（登録商標）２クアッドプロセッサ、インテル（登録商標）コア（登録商標）２デュオプロセッサ、インテル（登録商標）ペンティアム（登録商標）プロセッサ、およびインテル（登録商標）セルロン（登録商標）プロセッサが含まれる。
【００１３】
また、命令処理装置は専用プロセッサであってもよい。適切な専用プロセッサの代表的な例には、これらに限定はされないが、ネットワークプロセッサ、通信プロセッサ、暗号化プロセッサ、グラフィックスプロセッサ、コプロセッサ、エンベデッドプロセッサ、およびデジタルシグナルプロセッサ（ＤＳＰ）がほんの一例として含まれる。これらプロセッサもＣＩＳＣ、ＲＩＳＣ、ＶＬＩＷ、これらの様々なハイブリッド、またはその他のプロセッサ全般に基づいていてよい。
【００１４】
また他の実施形態では、命令処理装置はコントローラ（例えばマイクロコントローラ）、または、命令処理機能を有するその他の種類のロジック回路であってよい。
【００１５】
図２に戻ると、利用中に命令処理装置は、加算命令２１２の一実施形態を受信することができる。一例では、加算命令は、メモリからあるいはソフトウェアから受信されてよい。１以上の実施形態の加算命令は、第１のソースオペランド、第２のソースオペランド、および第３のソースオペランドを示すことができる。加算命令は、３つのソースオペランドが足し合わせられ、加算命令が示すデスティネーションオペランドにその和を格納することを示してよい。加算命令は、ソースオペランドおよびデスティネーションオペランドを暗示的に示す、および／または、明示的に指定することができる。例えば加算命令は１以上の専用フィールドまたは複数のビットセットを有することで、１以上のオペランドに対応するレジスタ、メモリ、あるいはその他の格納位置を明示的に示すことができる。
【００１６】
加算命令は、命令処理装置が認識している機械命令または制御信号を表してよい。命令処理装置は、加算命令に応じて、および／または、加算命令が指定するように、３つのソースオペランドに加算処理を行い、加算命令に応じて、またはその結果として、デスティネーションに和を格納する機能を有する専用の、または特別な回路、あるいは他のロジック（例えばハードウェアおよび／またはファームウェアと組み合わせられたソフトウェア）を有してよい。
【００１７】
示している命令処理装置の実施形態には、命令復号器２１４が含まれる。復号器は、加算命令２１２を受信して復号することができる。復号器は、元の加算命令を反映する、あるいは、これから導出される、１以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令、あるいはその他の制御信号を生成して出力することができる。復号器は、様々な異なるメカニズムを利用して実装することができる。適切なメカニズムの例には、これらに限定はされないが、マイクロコードＲＯＭ、ルックアップテーブル、ハードウェア実装、ＰＬＡ（programmable logic array）等が含まれる。
【００１８】
復号器は装置の必須のコンポーネントではない。１以上の他の実施形態では、装置はこの代わりに、命令エミュレータ、命令翻訳プログラム、命令モーファ、命令解釈プログラム、その他の命令変換ロジックを含むことができる。本技術分野では、様々な異なる種類の命令エミュレータ、命令モーファ、命令翻訳プログラム等が公知である。命令変換ロジックは加算命令を受信して、加算命令をエミュレート、翻訳、変形、解釈したり、加算命令を変換したりして、元の加算命令に対応する１以上の命令または制御信号を出力することができる。命令変換ロジックは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによる実装が可能である。場合によっては、命令変換ロジックの一部または全てが、命令処理装置の残りからオフダイの位置に設けられてもよい（例えば、別のダイとして、またはシステムメモリ内に設けられてもよい）。場合によっては、命令処理装置は復号器および命令変換ロジック両方を備えてもよい。
【００１９】
図２に戻ると、命令処理装置は実行ユニット２１６を含む。一例では、実行ユニットは、演算装置（arithmetic unit）、論理演算装置（arithmetic logic unit）等を含むことができる。実行ユニットは、加算（符号付き、および、符号なし整数加算等）を行うことのできる加算ユニット２１８を含む。
【００２０】
示されている実施形態では、実行ユニットは、復号器の出力に連結されている、さもなくば、これと通信可能状態である。「連結（couple）」という用語は、２以上のエレメントが直接的な電気接触または接続状態にあることを意味する場合がある。しかし「連結」という用語は、さらに、２以上のエレメントが直接的な接続状態にはないが、互いと協働または相互作用することも意味する（例えば間にコンポーネントを介在させることで）。一例を挙げると、復号器および実行ユニットが、これらの間に介在するオプションのバッファおよび／またはその他の本技術分野で公知であるコンポーネント（１または複数）によって、互いと連結される場合がこれに相当する。復号器が加算命令を復号した結果、実行ユニットは、加算命令を反映する、またはこれから導出される１以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令あるいはその他の制御信号を受信して実行してよい。また実行ユニットは、上述した命令変換ロジックから命令または制御信号を受信して実行してよい。
【００２１】
復号器、または、装置の別の部分は、加算命令の結果、加算命令の示す３つのソースオペランドにアクセスすることができる。ソースオペランドは、レジスタ、メモリ、またはその他の格納位置に格納されてよい。示されている実施形態では、第１のソースオペランド（ＳＲＣ１）、第２のソースオペランド（ＳＲＣ２）、および第３のソースオペランド（ＳＲＣ３）が全てレジスタセット２２０のレジスタに格納されているが、これは必須ではない。
【００２２】
レジスタセット２２０は、レジスタファイルの一部であってよく、および潜在的に他のレジスタ（例えば制御レジスタ、ステータスレジスタ、フラグレジスタ等）を含んでよい。各レジスタが、データ格納に利用されうる格納位置またはデバイスであってよい。本明細書で記載するデータを格納および提供する機能を有しさえすれば、様々な異なる種類のレジスタが適切であり利用可能である。レジスタはリネームされてもされなくてもよい。適切なレジスタの例には、これらに限定はされないが、専用物理レジスタ、レジスタのリネームを行って動的に割り当てられる物理レジスタ、専用物理レジスタおよび動的に割り当てられる物理レジスタの組み合わせ等が含まれる。レジスタは物理的に実行ユニットとともにダイ上に配置されることがある。レジスタはプロセッサの外部から、またはプログラマの視点から可視であってよい。例えば命令は、レジスタに格納されているオペランドを特定することができる。
【００２３】
実行ユニットは、加算命令（例えば、加算命令から導出した１以上の命令その他の制御信号）を実行する機能を有する回路またはその他の実行ロジック（例えば、ソフトウェア、および／または、ハードウェア、および／または、ファームウェアの様々な組み合わせ）を含んでよい。１以上の実施形態では、実行ユニットは、第１のソースオペランド（ＳＲＣ１）、第２のソースオペランド（ＳＲＣ２）、および第３のソースオペランド（ＳＲＣ３）を示す加算命令２１２の結果、第１、第２、および第３のソースオペランドの和の一部分を、加算命令が示すデスティネーションオペランド（ＤＥＳＴ）に加算命令の結果として格納することができる。示されているように、デスティネーションオペランド（ＤＥＳＴ）はレジスタであってよい。またデスティネーションオペランドは、メモリのある位置、または、別の格納位置であってもよい。図においては、デスティネーションオペランドは、ソースオペランド用のレジスタとは別個のレジスタに対応するものとして描かれている。しかしソースオペランド用のレジスタをデスティネーションオペランド用に利用して、例えばデスティネーションオペランドがソースオペランドを上書きするようにすることもできる。
【００２４】
１以上の実施形態では、その一部分がデスティネーションオペランド（ＤＥＳＴ）に格納されることに加えて、和のさらなる一部分が複数のフラグ（例えば第１のフラグ２２２および第２のフラグ２２４等）に格納されてもよい。示されているように、これらフラグはレジスタ２２６に格納されてよい（例えばステータスレジスタ、フラグレジスタ、または条件コードレジスタ等）が、これは必須ではない。
【００２５】
プロセッサおよび様々な他の種類のロジックデバイスがフラグを有する場合がある。例えば各フラグは１以上のビットを含んでよく、各ビットが１または０のバイナリ値を含んでよい。これらフラグの異なる値は、プロセッサまたはその他のロジックデバイスに割り当てられてもよいし、その意味が暗に示されてもよい。フラグは様々に異なる目的に利用される。フラグを、処理のステータス、状態、条件、または結果を記録する目的に利用する場合もある。
【００２６】
１以上の実施形態では、第１のフラグ２２２がキャリーフラグであり、キャリーフラグ２２２を利用して和の一部を格納することができる。キャリーフラグは、プロセッサその他のロジックデバイスに通常設けられる公知の種類のアーキテクチャフラグまたはステータスフラグである。キャリーフラグは、算術演算におけるオーバフローがないかを示すのに利用することができる。例えばキャリーフラグは、前の演算中にオーバフロー（例えば、算術演算結果の最上位ビットからのキャリーまたはボロー）が生じた場合に第１の値（例えば１のバイナリ値）を有するシングルビットであってよく、そのようなオーバフローがない場合には、キャリーフラグは第２の値（例えば０のバイナリ値）を有してよい。キャリーフラグは、算術演算によって、任意のレジスタまたは格納位置のビット数よりも大きさが大きい結果が生成されたことを示す目的に利用されてもよい。キャリーフラグは、加算または減算といった算術演算に利用することもできる。
【００２７】
キャリーフラグの加算への利用法の一例として、８ビットの符号なし整数を利用して数２５５と２５５とを足し合わせる例を考慮する。２５５足す２５５は５１０という値を生じる。数５１０は、バイナリで「１  １１１１  １１１０」と表される。しかし「１  １１１１  １１１０」は、ちょうど８ビットではなくて、９ビットである。つまり、数５１０をバイナリで表すには、ちょうど８ビットではなくて９ビットが必要になるということである。８つの最下位ビット「１１１１  １１１０」は、数２５４のバイナリ表現である。２５５と２５５との和から、最上位の８個目のビットから９個目のビットに「キャリー」が行われるので、キャリーフラグを値１に設定することができる。キャリーフラグを値１に設定することにより、機械に、結果が８ビットの符号なしの解釈では不正確である旨を示すことができ、および／または、正確な結果が、８ビットの結果と１ビットのキャリーフラグとを足した９ビットの連結であることを示すことができる。キャリーフラグは（例えばキャリーインとして）、加算または減算といった後の算術演算で利用することができる。
【００２８】
１以上の実施形態では、第１のフラグ２２２がキャリーフラグであり、第２のフラグ２２４が、キャリーフラグ２２２と概ね同じように利用可能であるアーキテクチャフラグであってよい。アーキテクチャフラグ２２４は、算術演算にオーバフローがないかを示す目的に利用可能である。例えばアーキテクチャフラグ２２４は、前の演算中にキャリーフラグ２２２にオーバフローが生じた場合に第１の値（例えば１のバイナリ値）を有するシングルビットであってよく、そのようなオーバフローがキャリーフラグ２２２にない場合には、アーキテクチャフラグ２２４は第２の値（例えば０のバイナリ値）を有してよい。アーキテクチャフラグ２２４は、算術演算によって、任意のレジスタまたは格納位置のビット数に第１のフラグ（例えばキャリーフラグ）を足したものが表すことのできる大きさより大きい結果が生成されたことを示す目的に利用されてもよい。第１のフラグ（例えばキャリーフラグ）２２２および第２のさらなるアーキテクチャフラグ２２４は、それぞれ、加算命令の和を格納するのに利用可能な少なくとも１つの追加ビットを提供することができる。
【００２９】
１以上の実施形態では、第２のさらなるアーキテクチャフラグ２２４はオーバフローフラグであってよい。オーバフローフラグは、プロセッサその他のロジックデバイスに通常設けられる公知の別の種類のアーキテクチャフラグまたはステータスフラグである。しかし従来のオーバフローフラグは、第２のさらなるアーキテクチャフラグ２２４の用途として上述した方法では利用されてこなかった。ＡＤＤおよびＡＤＣ命令の場合、現在のオーバフローフラグの定義は、符号付き整数のオーバフローを検出する、というものである。しかしオーバフローフラグは従来、別のフラグと組み合わせられて和の一部を格納する目的に利用されてはいない。さらにオーバフローフラグは従来、別のフラグと組み合わせられて複数のキャリーを提供する目的に利用されてはいない。さらに、オーバフローフラグは従来、符号なしオペランドの幅の拡張として利用されてはいない。
【００３０】
従って、オーバフローフラグの上述した用途は、キャリーフラグのリパーパスである（re-purposing）。さらに１以上の他の実施形態では、別の既存のアーキテクチャフラグをリパーパスすることもできる。既存のアーキテクチャでは、このような既存のアーキテクチャフラグのリパーパスは、全く新しい、または専用フラグの導入よりも、アーキテクチャおよび文書化面全体として変更が少ない傾向にある。また１以上の実施形態では、１以上の新たな、あるいは専用のフラグを第１および／または第２のフラグに導入することで、ここに記載する目的の達成に利用することができる。
【００３１】
説明を曖昧にしないようにする意図から、比較的簡単な命令処理装置を示し、説明している。しかし他の実施形態では複数の実行ユニットを利用することもできることは理解されたい。例えば、装置は、複数の異なる種類の実行ユニット（例えば演算装置、論理演算装置（ＡＬＵ）、整数ユニット（integer unit）等）を含んでよい。これらユニットのうち少なくとも１つが、本明細書で開示する加算命令の一実施形態に応じたものであってよい。また他の実施形態には、複数のコア、論理プロセッサ、または実行エンジンが含まれてよい。本明細書で開示する加算命令を実行する機能を有する実行ユニットは、少なくとも１つ、少なくとも２つ、殆どあるいは全てのコア、論理プロセッサ、または実行エンジン内に含まれてよい。
【００３２】
命令処理装置はさらに、オプションとして１以上の公知の他のコンポーネントを含んでもよい。例えば、他の実施形態では、オプションとして命令フェッチロジック、プレデコードロジック、スケジュールロジック、リオーダ・バッファ、分岐予測ロジック、退避ロジック、レジスタ・リネームロジック、またはこれらの組み合わせを含んでよい。これらのコンポーネントは、従来の方法での実装、または、当業者であれば本開示に基づいて想到可能な微調整を加えることによる実装が可能である。本実施形態を理解する目的にはこれ以上これらのコンポーネントの詳述は不要であるが、これらコンポーネントの説明は刊行物にあるのでそれを参照されたい。当技術分野ではこれらコンポーネントの文字通り多くの異なる組み合わせおよび構成が公知である。本発明の範囲は、これら公知の組み合わせおよび構成のいずれにも限定はされない。実施形態は、これらオプションであるコンポーネントがあってもなくても実装可能である。
【００３３】
図３は、加算命令の一実施形態の和を格納するのに利用可能なレジスタ３３０と複数のフラグ３２２、３２４との組み合わせの一実施形態を示すブロック図である。レジスタはビット［Ｎ：０］を有する。レジスタはさらに和の一部分の格納にも利用可能である。レジスタには和の代表的なビットの幾つかが格納されているとして示されている。
【００３４】
第１のフラグ３２２は、１つの追加ビット［Ｎ＋１］を有する。同様に、第２のフラグ３２４は、１つの追加ビット［Ｎ＋２］を有する。フラグの２つのビットは、２つの追加ビットを提供して、和の別の一部分を格納する。フラグ「Ｎ＋１：Ｎ＋２」の２つのビットは、機械によって、完全な和を提供するレジスタ「Ｎ：０」のビットの連結と理解される。ビット［Ｎ＋２］は、和における最上位ビット（ＭＳＢ）を格納する。ビット［Ｎ＋１］は、和における最上位ビット（ＭＳＢ）の次のビットを格納する。
【００３５】
ある具体例では、レジスタは和の一部分を格納するビット［３１：０］を有し、第１のフラグ３２２は追加ビット「３２」を有し、第２のフラグ３２４は追加ビット「３３」を有すことができ、これらはまとめて和を部分毎に格納するのに利用される。別の具体例では、レジスタが和の一部分を格納するビット［６３：０］を有し、第１および第２のフラグが、和のそれぞれ一部分を格納するための２つの追加ビット「６５：６４」を有すことができる。
【００３６】
第１および第２のフラグがそれぞれ提供するこれら追加ビットによって、より大きな和を格納することができるようになる。３つの数を足し合わせるときに、さらにキャリー用のビットが必要になる場合もある。３つのソースオペランドを加算するときには、オペランドの値によっては、生成する和を格納するべく、これら追加ビットを利用する、および／または、これら追加ビットが必要となる場合がある。６４ビットのレジスタのオペランドの場合を例にとって考える。３つのレジスタの最大の符号なし値は（２６４−１）であるので、結果生じる中間和は、ＯＦ：ＣＦ＝１：１の場合、せいぜい３＊２６４と想定される。この値は（２６６−１）より小さい。従って、レジスタが提供する６４ビットに加えて、フラグにより２つの追加ビットを提供することで、３つの対応する６４ビットのレジスタに格納される任意の３つの値の和の最上位ビットを十分表すことができるようになる。３つのソースオペランドを加算する加算命令により生成される最大値はオーバフローを生じない。同様に、３２ビットレジスタに加えて、フラグにより２つの追加ビットを提供することで、３つの対応する３２ビットのレジスタに格納される任意の３つの値の和の最上位ビットを十分表すことができるようになる。
【００３７】
１以上の実施形態では、加算命令で整数が加算されてよい。１以上の実施形態では、整数は符号なし整数であってよい。また１以上の実施形態では、整数が符号付き整数であってもよい。コンセプトの一例として、本開示では符号なし整数の乗算を強調しているが、本発明の範囲はこれに限定されない。
【００３８】
図４は、様々な実施形態に適切な、様々な符号なし整数の数値データの種類を示す。第１の種類は、「ワード符号なし整数」である。ワード符号なし整数は１６ビットである。第２の種類は、ダブルワード符号なし整数である。ダブルワード符号なし整数は３２ビットである。第３の種類は、クワッドワード符号なし整数である。クワッドワード符号なし整数は６４ビットである。これらはほんの数例にすぎない。他のサイズの符号なし整数（例えばバイト、または６４ビットより広いタイプ（例えば１２８ビットタイプ））も利用可能である。さらに同様の符号付き整数のタイプも利用可能である。
【００３９】
１以上の実施形態における加算命令は、実行ユニットおよび／またはプロセッサ（またはその他の命令処理装置）に、複数のフラグに一部基づいて計算される和を生成させることのできる、フラグによる加算命令（add with flags instruction）であってよい。１以上の実施形態では、複数のフラグに一部基づいて計算される和には、複数のフラグの演算的な組み合わせに加算される３つのオペランドの和が含まれてよい。
【００４０】
図５は、フラグによる加算命令５１３の一実施形態に応じた実行ユニット５１６の一実施形態のブロック図である。フラグによる加算命令は、第１のソースオペランド（ＳＲＣ１）、第２のソースオペランド（ＳＲＣ２）、および第３のソースオペランド（ＳＲＣ３）を、ソースオペランドとして示し、第２のフラグ（Ｆ２）をソースオペランドとして示す。この命令は、第１および第２のフラグを、暗示的な、または暗に示される（understood）ソースオペランドとして示すことができる。
【００４１】
フラグによる加算命令に呼応して、実行ユニットはＳＲＣ１、ＳＲＣ２、ＳＲＣ３、Ｆ１、およびＦ２を受信することができる。１以上の実施形態では、実行ユニットは、フラグによる加算命令の結果、ＳＲＣ１、ＳＲＣ２、およびＳＲＣ３の和を格納することができ、この和は、フラグによる加算命令が示すデスティネーションオペランド（ＤＥＳＴ）のフラグＦ１およびＦ２に部分的に基づいて計算される。示されているように１以上の実施形態では、和はＤＥＳＴ＝ＳＲＣ１＋ＳＲＣ２＋ＳＲＣ３＋Ｆ１＋２＊Ｆ２として計算することができる。
【００４２】
この和で、式「Ｆ１＋２＊Ｆ２」の部分は、フラグＦ１およびＦ２の演算的な組み合わせを表している。第２のフラグ（Ｆ２）は乗数２を有する。
【００４３】
図６は、複数のフラグを有するフラグレジスタの一実施形態を表すＥＦＬＡＧＳレジスタ６２６を示す。ＥＦＬＡＧＳレジスタは３２ビットのレジスタであり、一群のステータスフラグ、制御フラグ、および一群のシステムフラグを含む。
【００４４】
ステータスフラグには、キャリーフラグ（ＣＦ、ビット０）、パリティフラグ（ＰＦ、ビット２）、補助キャリーフラグ（ＡＦ、ビット４）、ゼロフラグ（ＺＦ、ビット６）、符号フラグ（ＳＦ、ビット７）、およびオーバフローフラグ（ＯＦ、ビット１１）が含まれる。前述したように、１以上の実施形態では、キャリーフラグ（ＣＦ、ビット０）およびオーバフローフラグ（ＯＦ、ビット１１）を、ここで開示する加算命令に関連する第１および第２のフラグ２２２、２２４として利用することができる。このためＣＦおよびＯＦを強調するが、これら特別なフラグの利用は必須ではない。
【００４５】
システムフラグには、トラップフラグ（ＴＦ、ビット８）、割り込みイネーブルフラグ（ＩＦ、ビット９）、Ｉ／Ｏ特権レベル（ＩＯＰＬ、ビット１２−１３）、ネストタスク（ＮＴ、ビット１４）、再開フラグ（ＲＦ、ビット１６）、仮想−８０８６モード（ＶＭ、ビット１７）、位置合わせチェック（ＡＣ、ビット１８）、仮想割り込みフラグ（ＶＩＦ、ビット１９）、仮想割り込み待ち状態（ＶＩＰ、ビット２０）、およびＩＤフラグ（ＩＤ、ビット２１）が含まれる。制御フラグには、方向フラグ（ＤＦ、ビット１０）が含まれる。ＥＦＬＡＧＳのビット２２−３１は保留される。
【００４６】
ＥＦＬＡＧＳレジスタは、前の１６ビットのＦＬＡＧＳレジスタを引き継いだものである。さらに６４ビットモードのプロセッサのＥＦＬＡＧＳレジスタは、ＲＦＬＡＧＳレジスタに引き継がれ、６４ビットに拡張されている。ＲＦＬＡＧＳの下位３２ビットはＥＦＬＡＧＳと同じである。
【００４７】
ＥＦＬＡＧＳレジスタは、１以上の実施形態を実装するのに適したフラグを有するレジスタの特定の一実施形態であるが、この特定のレジスタおよびこれら特定のフラグは当然ながら必須ではない。ＥＦＬＡＧＳ／ＲＦＬＡＧＳレジスタ、およびキャリーフラグのさらなる記述に関しては、インテル（登録商標）６４およびＩＡ−３２アーキテクチャソフトウェア開発者用マニュアル第１巻：基本アーキテクチャ、オーダ番号：２５３６６５−０３２ＵＳ、２００９年９月を参照されたい。
【００４８】
１以上の実施形態では、加算命令は、汎用レジスタセットの１以上のソースオペランドおよび／または１以上のデスティネーションオペランドを示すことができる。１以上の実施形態ではこれら汎用レジスタを利用して整数を格納することができる。
【００４９】
図７は、適切な３２ビットの汎用レジスタセット７４０の一実施形態を示す。３２ビットのレジスタセットは、８個の３２ビットまたはダブルワードの汎用レジスタを含む。これらレジスタは、ＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＳＩ、ＥＤＩ、ＥＢＰ、およびＥＳＰと称される。これら３２ビットのレジスタはさらに、１６ビットおよび８ビットモードでアドレス指定可能である。ＥＡＸ、ＥＢＸ、ＥＣＸ、およびＥＤＸレジスタの下位の１６ビットは、ＡＸ、ＢＸ、ＣＸ、およびＤＸとそれぞれ称される。一例では、レジスタＢＸ、ＣＸ、およびＤＸにはそれぞれ１６ビットのワード符号なし整数を格納することができる。レジスタＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＳＩ、ＥＤＩ、ＥＢＰ、ＥＳＰ、Ｒ８Ｄ−Ｒ１５Ｄには、３２ビットのダブルワードの符号なし整数を格納することができる。
【００５０】
図８は、適切な６４ビットの汎用レジスタセット８５０の一実施形態を示す。６４ビットのレジスタセットは１６個の６４ビットまたはクワッドワードの汎用レジスタを含む。これらレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＳＩ、ＲＤＩ、ＲＢＰ、ＲＳＰ、Ｒ８、Ｒ９、Ｒ１０、Ｒ１１、Ｒ１２、Ｒ１３、Ｒ１４、およびＲ１５と称される。これらレジスタは３２ビットモードで３２ビットオペランドに対して動作可能であり、６４ビットモードで６４ビットオペランドに対して動作可能である。ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＳＩ、ＲＤＩ、ＲＢＰ、およびＲＳＰレジスタの下位３２ビットが、それぞれＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＳＩ、ＥＤＩ、ＥＢＰ、およびＥＳＰレジスタに対応する。レジスタＲ８−Ｒ１５の下位３２ビットはさらに３２ビットモードでアドレス指定可能であり、Ｒ８Ｄ−Ｒ１５Ｄと称される。一例では、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＳＩ、ＲＤＩ、ＲＢＰ、ＲＳＰ、またはＲ８Ｄ−Ｒ１５Ｄレジスタには、６４ビットのクワッドワードの符号なし整数を格納することができる。
【００５１】
汎用レジスタは様々なｘ８６アーキテクチャプロセッサで利用可能であり、１以上の実施形態を実装するのに適しているが、これら特定のレジスタは当然ながら必須ではない。汎用レジスタのさらなる記述に関しては、インテル（登録商標）６４およびＩＡ−３２アーキテクチャソフトウェア開発者用マニュアル第１巻：基本アーキテクチャ、オーダ番号：２５３６６５−０３２ＵＳ、２００９年９月を参照されたい。
【００５２】
加算命令は、特定の実施形態においては、ＡＤＤ３−３つのオペランドの符号なし整数の加算命令である。ＡＤＤ３命令は、オプションとしてＲＥＸプレフィックスを有してこれ以上のレジスタ、および、より広いデータ空間をアドレス指定する標準的な３−バイトｘ８６オペコードを有することができる。
【００５３】
ＡＤＤ３命令は、３−オペランド命令であり、うち２つのオペランドが明示的なオペランドであり、他の１つのオペランドが暗示的なオペランドである。表１にＡＤＤ３命令用の命令オペランド符号化を示す。
【表１】
0005425041.tif 000002
【００５４】
オペランド１は明示的に指定されており、３２ビットモードの命令については３２ビットの汎用レジスタ（ｒｅｇ）に、６４ビットモードの命令については６４ビットの汎用レジスタにあってよい。オペランド１に対しては読み出し（Ｒ）および書き込み（Ｗ）が許されている。
【００５５】
オペランド２は明示的に指定されており、３２ビットモードの命令については３２ビットの汎用レジスタ（ｒ）またはメモリ（ｍ）、６４ビットモードの命令については６４ビットの汎用レジスタまたはメモリ（ｍ）にあってよい。オペランド２に対しては読み出し（Ｒ））が許されている。
【００５６】
オペランド３は、３２ビットモードの命令については３２ビットのＥＡＸ汎用レジスタとして、６４ビットモードの命令については６４ビットのＲＡＸ汎用レジスタとして、暗示的に識別されている。オペランド３は、暗示された、または暗示的なソースオペランドとして利用される。ＥＡＸ／ＲＡＸレジスタも本明細書の他の場所で説明されるＭＵＬＸ命令について暗示的に識別されるデスティネーションオペランドである。オペランド３に対しては読み出し（Ｒ））が許されている。オペランド４はＡＤＤ３命令には利用不可能である。
【００５７】
図９は、加算命令の特定の実施形態を表すＡＤＤ３命令の記述を示す。１６ビットのオペランドサイズは現在のところＡＤＤ３命令では符号化できない。ＡＤＤ３は、インテル（登録商標）６４およびＩＡ−３２アーキテクチャソフトウェア開発者用マニュアル第２Ａ巻のＡＤＤ命令とは異なるように、キャリーフラグ（ＣＦ）およびオーバフローフラグ（ＯＦ）を定義している。ＣＦ、ＯＦ、ＳＦ，ＺＦ，およびＰＦは、結果に基づいて設定される。例えば結果の最上位ビットが設定されている場合（例えば６４ビットモードのビット［６３］、または３２ビットモードの［３１］）、ＳＦフラグが設定される。ＡＦフラグはゼロに設定される。
【００５８】
図１０は、加算命令の特定の実施形態を表すＡＤＤ３命令の疑似コード処理を示す。ＳＲＣはソースオペランドのことであり、ＤＥＳＴはデスティネーションオペランドのことであり、ＥＡＸおよびＲＡＸは暗示的な汎用レジスタのことであり、ＴＥＭＰは一時的な中間結果のことであり、ＣＦはキャリーフラグのことであり、ＯＦはオーバフローフラグのことである。３２ビットモードでビット「３３：３２」がそれぞれＯＦおよびＣＦに格納され、６４ビットモードでビット［６５：６４］がそれぞれＯＦおよびＣＦに格納される。
【００５９】
フラグによる加算命令は、別の特定の実施形態においては、ＡＤＯＣ３−ＯＦ／ＣＦフラグによる３つのオペランドの符号なし整数の加算命令である。ＡＤＯＣ３命令は、オプションとしてＲＥＸプレフィックスを有してこれ以上のレジスタ、および、より広いデータ空間をアドレス指定する標準的な３−バイトｘ８６オペコードを有することができる。
【００６０】
ＡＤＯＣ３命令は、３−オペランド命令であり、うち２つのオペランドが明示的なオペランドであり、他の１つのオペランドが暗示的なオペランドである。表２にＡＤＯＣ３命令用の命令オペランド符号化を示す。
【表２】
0005425041.tif 000003
【００６１】
オペランド１は明示的に指定されており、３２ビットモードの命令については３２ビットの汎用レジスタ（ｒｅｇ）に、６４ビットモードの命令については６４ビットの汎用レジスタにあってよい。オペランド１に対しては読み出し（Ｒ）および書き込み（Ｗ）が許されている。
【００６２】
オペランド２は明示的に指定されており、３２ビットモードの命令については３２ビットの汎用レジスタ（ｒ）またはメモリ（ｍ）、６４ビットモードの命令については６４ビットの汎用レジスタまたはメモリ（ｍ）であってよい。オペランド２に対しては読み出し（Ｒ））が許されている。
【００６３】
オペランド３は、３２ビットモードの命令については３２ビットのＥＡＸ汎用レジスタとして、６４ビットモードの命令については６４ビットのＲＡＸ汎用レジスタとして、暗示的に識別されている。オペランド３は、暗示された、または暗示的なソースオペランドとして利用される。ＥＡＸ／ＲＡＸレジスタも本明細書の他の場所で説明されるＭＵＬＸ命令について暗示的に識別されるデスティネーションオペランドである。オペランド３に対しては読み出し（Ｒ））が許されている。オペランド４はＡＤＯＣ３命令には利用不可能である。
【００６４】
図１１は、フラグによる加算命令の特定の実施形態を表すＡＤＯＣ３命令の記述を示す。１６ビットのオペランドサイズは現在のところＡＤＯＣ３命令では符号化できない。入力ＯＦおよびＣＦ値には制約がない。つまりこれらフラグが両方とも１である場合、生成される最大値が何らオーバフローを生じないので、命令の結果の定義は良好である。ＡＤＯＣ３は、インテル（登録商標）６４およびＩＡ−３２アーキテクチャソフトウェア開発者用マニュアル第２Ａ巻のＡＤＤ命令とは異なるように、キャリーフラグ（ＣＦ）およびオーバフローフラグ（ＯＦ）を定義している。ＣＦ、ＯＦ、ＳＦ，ＺＦ，およびＰＦは、結果に基づいて設定される。例えば結果の最上位ビットが設定されている場合（例えば６４ビットモードのビット［６３］、または３２ビットモードの［３１］）、ＳＦフラグが設定される。ＡＦフラグはゼロに設定される。
【００６５】
図１２は、フラグによる加算命令の特定の実施形態を表すＡＤＯＣ３命令の疑似コード処理を示す。ＳＲＣはソースオペランドのことであり、ＤＥＳＴはデスティネーションオペランドのことであり、ＥＡＸおよびＲＡＸは暗示的な汎用レジスタのことであり、ＴＥＭＰは一時的な中間結果のことであり、ＣＦはキャリーフラグのことであり、ＯＦはオーバフローフラグのことである。３２ビットモードでビット「３３：３２」がそれぞれＯＦおよびＣＦに格納され、６４ビットモードでビット［６５：６４］がそれぞれＯＦおよびＣＦに格納される。さらに和は、演算的な組み合わせ「（２＊ＯＦ）＋ＣＦ」に基づく。
【００６６】
さらにＡＤＤ３およびＡＤＯＣ３命令の別の実施形態も考えられる。例えば１以上の実施形態においては、ＡＤＤ３および／またはＡＤＯＣ３命令はオプションとしてＶＥＸ符号化を利用してよい。ＶＥＸ符号化により、ちょうど２つではなくて３つのオペランドを明示的に指定することができる。例えば１以上の別の実施形態では、ＡＤＤ３はＶＥＸ符号化により、ｒｅｇ＝ｒｅｇ＋ｒ／ｍ＋ｖｖｖｖとして表すことができる。別の例としては、１以上の実施形態で、ＡＤＯＣ３はＶＥＸ符号化により、ｒｅｇ＝ｒｅｇ＋ｒ／ｍ＋ｖｖｖｖ＋ＯＣとして表すことができる。オペコード、符号化、ＲＥＸ、およびＶＥＸプレフィックスのさらなる記述に関しては、インテル（登録商標）６４およびＩＡ−３２アーキテクチャソフトウェア開発者用マニュアル第２Ａ巻：命令セットレファレンス、オーダ番号：２５３６６６−０３２ＵＳ、２００９年９月を参照されたい。
【００６７】
ここで開示する加算命令は汎用命令であり、幅広い異なる種類のアルゴリズムで利用可能である。加算命令は、公知のアルゴリズムのいずれかでの利用に制限はされない。加算命令は幅広い異なる種類のアルゴリズムでの利用が想定されている。
【００６８】
現在の段階では、ここで開示される加算命令は、大きな数の乗算の速度および／または効率を大いに高める助けとなると考えられている。大きな数の乗算は、様々に異なる種類のアルゴリズムで利用される。例えば、大きな整数の乗算は、べき乗剰余（modular exponentiation）、暗号化、公開鍵暗号化、ＴＬＳ（Transport Layer Security）、ＳＳＬ（Secure Sockets Layer）、ＩＰｓｅｃ（Internet Protocol Security）、ＩＰｖ６（Internet Protocol version 6）、および、様々な他の暗号化以外のアルゴリズムにおいて広く行われている。暗号化に関しては、過去数年の間、暗号化によりセキュアにするインターネットおよびその他のネットワーク処理が順調に増加してきているのにつれ、暗号アルゴリズムの利用が顕著に増加してきている。この結果、専用暗号化アクセラレータ、エンベデッド暗号化プロセッサ、数多くの接続をサポートするサーバ等が、かなり頻繁にこのような暗号化アルゴリズムを実行しうる。この結果これらデバイスの性能は、大きな整数の乗算を実行するときの速度および／または効率により大きな影響を受けうる。これよりは程度は低いではあろうが、デスクトップおよびラップトップコンピュータその他のデバイスも、これらの暗号化アルゴリズムとの関連で大きな整数の乗算を実行する。高性能コンピュータも大きな数の計算との関連で大きな整数の乗算を実行する。これらおよびその他の種類の電子デバイスも、様々な他の暗号化以外のアルゴリズムまたは用途で、大きな数の乗算を実行する場合がある。従って大きな数の乗算の速度および／または効率を上げる助けとなる新規で従来と異なる命令を設けると好適であると思われる。
【００６９】
大きな整数の乗算では、整数を格納するのに利用されるレジスタまたはその他の格納位置のサイズより大きい少なくとも１つの整数を乗算する場合がある。例えば５１２ビット、２５６ビット、または１２８ビットの整数が６４ビットまたは３２ビットのレジスタ、あるいはこれらよりさらに小さいレジスタに格納されることもある。この結果、５１２ビット、２５６ビット、または１２８ビットの整数が単一の６４ビットまたは３２ビットのレジスタに収まらない場合がある。従って５１２ビット、２５６ビット、または１２８ビットの整数の、複数の６４ビットまたは３２ビットに分けた部分を、それぞれ別々の６４ビットまたは３２ビットのレジスタまたはその他の格納位置に格納する場合がある。
【００７０】
これをさらに説明するべく、図１３は、４つのレジスタそれぞれに格納される、４つのクワッドワード符号なし整数Ａ１−Ａ４それぞれとして格納される２５６ビットの符号なし整数の一実施形態を示す。特に第１のクワッドワード符号なし整数（Ａ１）は、第１のレジスタ１１３０−１に格納され、第２のクワッドワード符号なし整数（Ａ２）は、第２のレジスタ１１３０−２に格納され、第３のクワッドワード符号なし整数（Ａ３）は、第３のレジスタ１１３０−３に格納され、第４のクワッドワード符号なし整数（Ａ４）は、第４のレジスタ１１３０−４に格納される。４つのクワッドワード符号なし整数Ａ１−Ａ４を、２５６ビットの符号なし整数と総称することにする。このように格納されている２５６ビットの符号なし整数を、符号なし整数のマルチワードベクトルと称することもできる。
【００７１】
大きな整数に乗算を行うと、大きすぎて単一のレジスタには収まらなくなるので、幾らかの問題点を提起する。例えば２以上の乗算命令を利用する場合がある。各乗算命令は、大きな整数の一部分のみに乗算を行って部分積を生成することができる。部分積は、少なくとも１つの数の部分のみの完全に計算された積を表すことができる。これら部分積の各々を、加算することで、または、組み合わせることで、元の大きな整数の積全体を求めることができる。これら部分積の加算には、キャリー伝播加算（addition with carry propagation）が利用される場合がある。
【００７２】
適切な乗算命令の１つにＭＵＬ−符号なし乗算命令がある。ＭＵＬ命令については、インテル（登録商標）６４およびＩＡ−３２アーキテクチャソフトウェア開発者用マニュアル第２Ａ巻：命令セットレファレンス、Ａ−Ｍ、オーダ番号：２５３６６６−０３２ＵＳ，２００９年９月、その他の古いマニュアルを参照されたい。しかしＭＵＬ命令は、積の上位ビットによっては、キャリーフラグ（ＣＦ）およびオーバフローフラグ（ＯＦ）をクリアまたは設定する。ＭＵＬ命令はキャリーフラグを変更する場合があるので、一般的にはＭＵＬ命令を一連の加算（例えばＡＤＤ／ＡＤＣ）命令内に配置しない。さらにＭＵＬ命令の部分積の結果は、一般的にはまず格納してから、加算（例えばＡＤＤ／ＡＤＣ）命令を実行する必要がある。利用可能なレジスタの数によっては、ＭＵＬ命令のこれら部分積の全ての結果を加算の前に格納すると、利用可能なレジスタ全てが消費されることがあり、これによりメモリが満杯になったり、溢れたり、および／または、システムメモリへのアクセスが生じたりする場合がある。
【００７３】
ＭＵＬ命令の代替物が、本特許出願の譲受人に譲り渡された「MULTIPLICATION INSTRUCTION FOR WHICH EXECUTION COMPLETES WITHOUT WRITING A CARRY FLAG」なる名称の米国特許出願第＿号明細書（出願日＿）に開示されているＭＵＬＸ−フラグに影響しない符号なし乗算命令である。ＭＵＬＸ命令は、第１のソースオペランドおよび第２のソースオペランドの符号なし乗算を実行して、演算に関するフラグを読み出す、あるいは書き込むことなく、結果をデスティネーションオペランドに格納する。これにより、ソフトウェアがキャリー演算および乗算を伴う加算（add with carry operations and multiplications）をインタリーブすることができるような効率的なプログラミングを行うことができる可能性がでてくる。ＲＤＸ／ＥＤＸレジスタを暗示的なソースとして利用する。ＲＡＸ／ＥＤＸレジスタを結果の下位６４／３２ビットの暗示的なデスティネーションとして利用する。結果の上位の６４／３２ビットは、明示的に符号化されたデスティネーションレジスタオペランドに書き込まれる。
【００７４】
公知のＡＤＤ／ＡＤＣ命令、および、ここで開示するＡＤＤ３／ＡＤＯＣ３の特定の実施形態の命令により実行される大きな整数の乗算の比較的簡単な比較例を提示することで、３つのソースオペランドを１つの加算命令で行うことに伴う利点を示す。
【００７５】
図１４は、２５６ビットのクワッドワード符号なし整数（Ａ１−Ａ４）の、６４ビットの符号なし整数（Ｂ１）による乗算と、ＡＤＤ／ＡＤＣ命令での関連する部分積の和とを示す。図１３との関連で示し、説明した２５６ビットのクワッドワードの符号なし整数（Ａ１−Ａ４）のことを想起されたい。最下位／最上位を除く各コラムに、積の上位部分、および、後続する積の下位部分が存在し、これらが加算されて部分的な和となる。ＡＤＤ／ＡＤＣ命令の欠点の１つは、通常２シリーズの加算命令の実行が必要となることである。最初のシリーズの加算命令は、右から左に向かう実線の矢印で示されており、後続するシリーズの加算命令は、右から左に向かう破線の矢印で示されている。これから分かるように、９つの命令が利用されている。加算の多くはキャリーを伴う加算であり、これにより、アプリケーションの流線型のフローに制限を加えることの多いシリアライゼーションが行う必要がでてくる可能性がある。加えて、これにより、保存しておくべき一時的なデータ（例えば部分的な和）の量が増加しうる。場合によってはこれにより利用可能なレジスタ数を超えてしまう可能性もあり、メモリアクセスが必要になることもある。
【００７６】
これに対して図１５は、１以上の実施形態における、２５６ビットのクワッドワード符号なし整数（Ａ１−Ａ４）の、６４ビットの符号なし整数（Ｂ１）による乗算と、ＡＤＤ３／ＡＤＯＣ３命令での関連する部分積の和とを示す。これら命令の各々は、３つの整数を加算することができ、和の部分を格納可能な２つのフラグが存在している。この結果、２つではなくて１つのパスで加算を完了させることができるようになる。これは、プロセスのシリアライゼーションを低減させることができる可能性があるので好適である。加えて、９つの代わりに、５つの命令のみが利用される。これにより復号、バッファリング、および実行等が必要となる命令数を減らすことができる可能性があるので好適である。加えて、保存しておくことが必要な一時的な結果数を減らすことができる可能性もあり、メモリへのアクセスを回避させる可能性もある。各積Ａｉ＊Ｂ１がＭＵＬまたはＭＵＬＸ命令により生成されてよい。
【００７７】
図１６は、加算命令の一実施形態のブロック図である。本実施形態では、加算命令は、整数乗算命令の暗示的なデスティネーションオペランド（例えば格納位置）と同じ暗示的なソースオペランド（例えば格納位置）を有する。一例としては、上述した説明で、ＡＤＤ３およびＡＤＯＣ３命令それぞれが、３２ビットモードでは暗示的なソースオペランドＥＡＸを、６４ビットモードではＲＡＸを有していたことを想起されたい。さらに、上述したＭＵＬＸ命令は、ＲＡＸ／ＥＤＸレジスタをＭＵＬＸ命令の結果の下位６４／３２ビットの暗示的なデスティネーションとして利用していたことを想起されたい。この代わりに、別の暗示的なレジスタまたはその他の格納位置を利用することもできる。
【００７８】
これによりアルゴリズムによっては、ＭＯＶ命令またはその他のデータ移動処理が回避される場合がある。これらさらなるＭＯＶ命令によって、復号が必要となる命令数、および、潜在的にバッファリングおよび実行が必要となる処理数が増加する傾向にある。例えば移動命令等の命令を省くことで、復号化／変換、ひいてはバッファリング、実行が必要となる命令数を低減させることができる。加えて、復号化されるストリームバッファ（ＤＳＢ）等を利用するときの命令数を低減させることで、復号化される命令のループをＤＳＢ内に収めることができるようになるので、速度面で制限を受ける復号化処理を回避して処理速度を上げることができる。これにより大きな整数の乗算、および、加算命令が乗算命令の積に加算を行うようなある種の他のアルゴリズムの速度および／または効率が上げることができる可能性もあり、好適である。
【００７９】
他の実施形態では、加算されるソースオペランドの数を３つだけに限定する必要はなく、利用するフラグの数を２つだけに限定する必要もない。例えば１以上の別の実施形態では、４以上のソースオペランドを足し合わせることもでき、また３以上のフラグを利用することもできる。
【００８０】
１以上の実施形態には、機械（例えば実行ユニット）により実行されると３つのオペランドおよび／または整数に加算処理を実行させる加算命令を格納した、有形の機械アクセス可能な、および／または、機械により可読である媒体を含む製品が含まれる。有形の媒体には、１以上の固体材料が含まれてよい。媒体は、例えば機械アクセス可能な形態で情報を提供（例えば格納）するメカニズムを含むことができる。例えば、媒体はオプションとして記録可能媒体（例えばフロッピー（登録商標）ディスク、光格納媒体、光ディスク、ＣＤ−ＲＯＭ，磁気ディスク、光磁気ディスク、ＲＯＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＲＡＭ、ＳＲＡＭ、ＤＲＡＭ、フラッシュメモリ、およびこれらの組み合わせ）を含むことができる。
【００８１】
適切な機械には、これらに限られないが、ほんの数例を挙げると、実行ユニット、汎用プロセッサ、専用プロセッサ（例えばグラフィックスプロセッサおよび暗号化プロセッサ）、暗号化アクセラレータ、ネットワーク通信プロセッサ、コンピュータシステム、ネットワークデバイス、モデム、ＰＤＡ，携帯電話機、および、幅広い範囲の他の電子デバイスが１以上の実行ユニットとともに含まれる。
【００８２】
また別の実施形態は、実行ユニットを有する、および／またはここで開示する方法を実行するコンピュータシステム、エンベデッドシステム、その他の電子デバイスに係る。
【００８３】
図１７は、適切なコンピュータシステム１７０１の第１の実施形態のブロック図である。
【００８４】
コンピュータシステムはプロセッサ１７００を含む。プロセッサは、少なくとも１つの加算命令１７０２を実行する機能を有する少なくとも１つの実行ユニット１７０６を含む。
【００８５】
プロセッサは、バス（例えばフロントサイドバス）または他のインターコネクト１７８０を介してチップセット１７８１に連結される。インターコネクトは、プロセッサと、システムの他のコンポーネントとの間におけるデータ信号のやりとりをチップセット経由で行うときに利用可能である。
【００８６】
チップセットは、メモリコントローラハブ（ＭＣＨ）１７８２として知られているシステムロジックチップを含む。ＭＣＨは、フロントサイドバスまたは他のインターコネクト１７８０に連結される。
【００８７】
メモリ１７８６はＭＣＨに連結される。様々な実施形態では、メモリは、ＲＡＭを含むことができる。ＤＲＡＭは、一部の（全てではない）コンピュータシステムで利用されるＲＡＭの一例である。図示されているように、メモリは、命令（例えば１以上の加算命令）１７８７およびデータ１７８８を格納するために利用することができる。
【００８８】
ＭＣＨにはコンポーネントインターコネクト１７８５も連結される。１以上の実施形態では、コンポーネントインターコネクトは、１以上のＰＣＩｅ（peripheral component interconnect express）インタフェースを含むことができる。コンポーネントインターコネクトは、他のコンポーネントを、システムの残りのコンポーネントに、チップセット経由で連結することができる。これらコンポーネントの一例は、グラフィックチップあるいは他のグラフィックデバイスであるが、これはオプションであり必須ではない。
【００８９】
チップセットも、Ｉ／Ｏ（入力／出力）コントローラハブ（ＩＣＨ）１７８４を含む。ＩＣＨは、ハブインタフェースバスその他のインターコネクト１７８３を介してＭＣＨに連結される。１以上の実施形態では、バスその他のインターコネクト１７８３はＤＭＩ（Direct Media Interface）を含むことができる。
【００９０】
ＩＣＨにはデータ格納装置１７８９が連結される。様々な実施形態では、データ格納装置には、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭデバイス、フラッシュメモリデバイス等、またはこれらの組み合わせが含まれてよい。
【００９１】
ＩＣＨにはさらに、第２のコンポーネントインターコネクト１７９０が連結される。１以上の実施形態では、第２のコンポーネントインターコネクトは、１以上のＰＣＩｅインタフェースを含むことができる。第２のコンポーネントインターコネクトは、様々な種類のコンポーネントを、システムの残りのコンポーネントに、チップセット経由で連結することができる。
【００９２】
ＩＣＨにはまたさらに、シリアル拡張ポート１７９１が連結される。１以上の実施形態では、シリアル拡張ポートは、１以上のＵＳＢ（universal serial bus）ポートを含むことができる。シリアル拡張ポートは、様々な他の種類の入力／出力デバイスを、システムの残りのコンポーネントにチップセット経由で連結することができる。
【００９３】
ＩＣＨにオプションとして連結可能なこの他のコンポーネントの幾らかの例には、これらに限定はされないが、オーディオコントローラ、無線トランシーバ、およびユーザ入力デバイス（例えばキーボード、マウス）が含まれる。
【００９４】
ＩＣＨにはさらにネットワークコントローラが連結される。ネットワークコントローラは、システムをネットワークに連結することができる。
【００９５】
１以上の実施形態では、コンピュータシステムは、ワシントン州Ｒｅｄｍｏｎｄのマイクロソフトコーポレーション社から入手可能なＷＩＮＤＯＷＳ（登録商標）オペレーティングシステムのバージョンを実行することができる。また他のオペレーティングシステム（例えばＵＮＩＸ（登録商標）、Ｌｉｎｕｘ（登録商標）、またはエンベデッドシステム）の利用も可能である。
【００９６】
これは適切なコンピュータシステムの一例にすぎない。例えば、１以上の他の実施形態では、プロセッサがマルチコアを有してもよい。別の１以上の実施形態では、ＭＣＨ１７８２はプロセッサ１７００に物理的にオンダイに集積されていてよく、プロセッサを直接メモリ１７８６に、集積されたＭＣＨを介して連結することができる。また別の１以上の実施形態では、他のコンポーネントをプロセッサにオンダイに集積して、例えばシステムオンチップ（ＳｏＣ）デザインを提供することができる。さらに別の１以上の実施形態では、コンピュータシステムが複数のプロセッサを有することができる。
【００９７】
図１８は、適切なコンピュータシステム１８０１の第２の実施形態のブロック図である。第２の実施形態は、前段で説明した第１のコンピュータシステム例にいくらか類似している。説明を簡潔にするべく、以下では類似点を全て繰り返すのではなく、差異を中心に説明する。
【００９８】
上述した第１の実施形態と同様に、コンピュータシステムは、プロセッサ１８００と、Ｉ／Ｏコントローラハブ（ＩＣＨ）１８８４を有するチップセット１８８１とを含む。さらに第１の実施形態と同様に、コンピュータシステムは、チップセットに連結された第１のコンポーネントインターコネクト１８８５、ＩＣＨに連結された第２のコンポーネントインターコネクト１８９０、ＩＣＨに連結されたシリアル拡張ポート１８９１、ＩＣＨに連結されたネットワークコントローラ１８９２、およびＩＣＨに連結されたデータ格納装置１８８９を含む。
【００９９】
この第２の実施形態では、プロセッサ１８００はマルチコアプロセッサである。マルチコアプロセッサは、プロセッサコア１８９４−１から１８９４−Ｍを含み、ここでＭは２以上の整数であってよい（例えば、２、４、７、あるいはこれより大きい整数）。各コアは、ここに開示する命令の少なくとも１つの実施形態を実行する機能を有する少なくとも１つの実行ユニットを含むことができる。図示されているように、コア−１はキャッシュ１８９５（例えばＬ１キャッシュ）を含む。他のコア各々も同様に専用コアを含む。プロセッサコアは、単一の集積回路（ＩＣ）チップに実装されてよい。
【０１００】
プロセッサはさらに少なくとも１つの共有キャッシュ１８９６を含む。共有キャッシュは、プロセッサの１以上のコンポーネント（例えばコア）が利用するデータ（例えば命令）を格納することができる。例えば、共有キャッシュは、メモリ１８８６にローカルにデータをキャッシュすることにより、プロセッサのコンポーネントからのアクセスをより迅速に行うことができる。１以上の実施形態では、共有キャッシュには１以上の中間レベルのキャッシュ（レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４））、あるいはその他のレベルのキャッシュ、最終のレベルのキャッシュ（ＬＬＣ）、および／または、これらの組み合わせが含まれてよい。
【０１０１】
プロセッサコアおよび共有キャッシュはそれぞれ、バスその他のインターコネクト１８９７と連結される。バスその他のインターコネクトは、コアおよび共有キャッシュを連結して通信を行う。
【０１０２】
プロセッサはさらにメモリコントローラハブ（ＭＣＨ）１８８２を含む。この実施形態に示すように、ＭＣＨはプロセッサ１８００に集積される。例えばＭＣＨはプロセッサコアとオンダイであってよい。プロセッサはＭＣＨ経由でメモリ１８８６に連結される。１以上の実施形態では、メモリはＤＲＡＭを含んでよいが、これは必須ではない。
【０１０３】
チップセットは入力／出力（Ｉ／Ｏ）ハブ１８９３を含む。Ｉ／Ｏハブは、バス（例えばＱＰＩ（QuickPath Interconnect））その他のインターコネクト１８８０を介してプロセッサに連結される。Ｉ／Ｏハブ１８９３には、第１のコンポーネントインターコネクト１８８５が連結される。
【０１０４】
これは適切なシステムの特定の一例にすぎない。ラップトップ、デスクトップ、ハンドヘルドＰＣ、ＰＤＡ，工学ワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、ＤＳＰ、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話機、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々なその他の電子デバイスに関する、当技術分野で知られている他のシステム設計および構成の利用もまた適切である。概して、ここに開示されるプロセッサおよび／または実行ユニットを組み込むことのできる幅広い範囲のシステムまたは電子デバイスが概して適切である。
【０１０５】
上述に記載においては、説明をし易くする目的から、多くの特定の詳細を述べて実施形態の完全な理解を促すよう努めている。しかしながら当業者であれば、１以上の他の実施形態が、これら特定の詳細なしに実行可能であることを容易に理解する。ここに記載した特定の実施形態は、本発明の実施形態の範囲を限定する意図からではなく、例示する意図を有する。本発明の範囲は、上述した特定の例示からではなく、以下に示す請求項によってのみ決定されるべきものである。また、公知の回路、構造、デバイス、および処理に関してはブロック図の形式で示し、詳細には示さないことにより、記載の理解を曖昧にしないよう心がけている箇所もある。また適宜、参照番号または参照番号の末尾を図面にわたり繰り返すことで、オプションとして同様の特性を有する、対応または類似するエレメントであることを示している場合もある。
【０１０６】
処理のなかには、ハードウェアコンポーネントによる実行が可能なものもあり、機械実行可能な命令で具現化されるものもあり、処理を行う命令でプログラミングされた回路またはハードウェアとする、または少なくともそうするものがある。回路には、汎用または専用プロセッサ、論理回路が含まれてよいが、これら以外にも様々なものが含まれうる。処理はさらにオプションとしてハードウェアおよびソフトウェアの組み合わせによって実行されてもよい。実行ユニットおよび／またはプロセッサは、機械命令または機械命令から導出される１以上の制御信号に呼応して、命令が特定する結果オペランドを格納する専用のあるいは特別の回路を含むことができる。
【０１０７】
本明細書の随所で利用されている「一実施形態（one embodiment）（an embodiment）」あるいは「１以上の実施形態（one or more embodiments）」といった言い回しは、特定の特徴が実施形態の実行において含まれてよいことを示している。同様に、ある実施形態、図面、その説明では様々な特徴を一まとめに説明して、開示を簡素化することで様々な発明の側面の理解を促す工夫がなされている場合があることに留意されたい。しかしこの開示に関する手法が、実施形態が各請求項に明示されているもの以上の特徴を必要とすることを反映しているものとして捉えられるべきではない。そうではなくて、以下の請求項から分かるように、発明の各側面は、開示する１つ１つの実施形態の特徴全て未満のなかに存在する。従って詳細な記載に続く請求項は、この詳細な記載に、各請求項をそれ自体が発明の別個の実施形態であるように組み込まれるべきであることをここに明記しておく。
【図１】
0005425041.tif 000004
【図２】
0005425041.tif 000005
【図３】
0005425041.tif 000006
【図４】
0005425041.tif 000007
【図５】
0005425041.tif 000008
【図６】
0005425041.tif 000009
【図７】
0005425041.tif 000010
【図８】
0005425041.tif 000011
【図９】
0005425041.tif 000012
【図１０】
0005425041.tif 000013
【図１１】
0005425041.tif 000014
【図１２】
0005425041.tif 000015
【図１３】
0005425041.tif 000016
【図１４】
0005425041.tif 000017
【図１５】
0005425041.tif 000018
【図１６】
0005425041.tif 000019
【図１７】
0005425041.tif 000020
【図１８】
0005425041.tif 000021