3個のソースオペランドを加算する加算命令
【課題】3個のソースオペランドを加算する新たな命令を設ける。
【解決手段】方法は加算命令の受信が含まれうる。加算命令は、第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示すことができる。第1、第2、および第3のソースオペランドの和を、加算命令の結果として格納する。この和は、一部分が、加算命令が示すデスティネーションオペランドに格納され、一部分が、複数のフラグに格納されてよい。他の方法、装置、システム、および機械可読媒体上の命令も含む。
【解決手段】方法は加算命令の受信が含まれうる。加算命令は、第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示すことができる。第1、第2、および第3のソースオペランドの和を、加算命令の結果として格納する。この和は、一部分が、加算命令が示すデスティネーションオペランドに格納され、一部分が、複数のフラグに格納されてよい。他の方法、装置、システム、および機械可読媒体上の命令も含む。
【発明の詳細な説明】
【技術分野】
【0001】
様々な別個の実施形態が、加算命令、該命令を実行する方法、該命令の実行ユニット、または該実行ユニットを含むデバイスに係る。特に、様々な別個の実施形態は、キャリーを伴う三重加算(three-way addition)を実行する加算命令、該命令を実行する方法、該命令の実行ユニット、または該実行ユニットを含むデバイスに係る。
【背景技術】
【0002】
加算命令は通常、命令セットアーキテクチャ(ISA)に含まれている。加算命令によりデバイスはデータの加算を行う、あるいはデータの和を得ることができる。
【0003】
公知の加算命令には、ADD−加算命令、および、ADC−キャリーを伴う加算命令が含まれ、両方ともインテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第2A巻:命令セットレファレンス、A−M、オーダ番号:253666−032US、2009年9月、および、様々なこれより古いマニュアルで説明がなされている。
【0004】
ADDおよびADC命令はいずれも、2つのオペランドの加算しかできない。場合によってこれは欠点となりうる。
【0005】
データ処理においては速度および/または効率性が重要であることから、従来とは異なる新たな加算命令を設けると好適であると思われる。
【図面の簡単な説明】
【0006】
本発明は、以下の記載を、本発明の実施形態を示す添付図面を参照しながら読むことで理解が深まる。
【図1】加算命令の一実施形態の処理方法の一実施形態のブロックフロー図である。
【図2】命令処理装置の一実施形態のブロック図である。
【図3】加算命令の一実施形態の和を格納するのに利用可能なレジスタと複数のフラグとの組み合わせの一実施形態を示すブロック図である。
【図4】様々な実施形態に適切な、様々な符号なし整数の数値データの種類を示す。
【図5】フラグによる加算命令の一実施形態に応じた実行ユニットの一実施形態のブロック図である。
【図6】複数のフラグを有するフラグレジスタの一実施形態を表すEFLAGSレジスタを示す。
【図7】適切な32ビットの汎用レジスタセットの一実施形態を示す。
【図8】適切な64ビットの汎用レジスタセットの一実施形態を示す。
【図9】加算命令の特定の実施形態を表すADD3命令の記述を示す。
【図10】加算命令の特定の実施形態を表すADD3命令の疑似コード処理を示す。
【図11】フラグによる加算命令の特定の実施形態を表すADOC3命令の記述を示す。
【図12】フラグによる加算命令の特定の実施形態を表すADOC3命令の疑似コード処理を示す。
【図13】4つのレジスタそれぞれに格納される、4つのクワッドワード符号なし整数として各々格納される256ビットの符号なし整数の一実施形態を示す。
【図14】256ビットのクワッドワード符号なし整数の、64ビットの符号なし整数による乗算と、ADD/ADC命令での関連する部分積の和とを示す。
【図15】1以上の実施形態における、256ビットのクワッドワード符号なし整数の、64ビットの符号なし整数による乗算と、ADD3/ADOC3命令での関連する部分積の和とを示す。
【図16】整数乗算命令の暗示的なデスティネーションオペランドと同じ暗示的なソースオペランドを有する加算命令の一実施形態のブロック図である。
【図17】適切なコンピュータシステムの第1の実施形態のブロック図である。
【図18】適切なコンピュータシステムの第2の実施形態のブロック図である。
【発明を実施するための形態】
【0007】
以下の詳細な説明において命令実装の詳細、データの種類、レジスタの種類、レジスタの配置、プロセッサの種類、システム構成等、多くの特定の詳細を述べる。しかし、実施形態はこれら特定の詳細なしに実施可能である。また、公知の回路、構造、および技術等に関して、詳細に説明しないことにより、本発明の実施形態の本質を曖昧にしないようにしている箇所もある。
【0008】
実施形態は、3つのオペランドの加算を行うことができる、新規で有用な加算命令に係る。他の実施形態は該加算命令の実行ユニットに係る。他の実施形態は、該実行ユニットを有する、または該命令を実行する機能を有する汎用プロセッサ、専用プロセッサ、コントローラ、または他のロジックデバイスまたは命令処理装置に係る。別の実施形態は、ディスク、メモリ、または他の有形機械可読媒体に格納される加算命令に係る。
【0009】
図1は、加算命令の一実施形態の処理方法100の一実施形態のブロックフロー図である。様々な実施形態では、方法は、汎用プロセッサ、専用プロセッサ(例えばグラフィックスプロセッサまたはデジタルシグナルプロセッサ(DSP))、ハードウェアアクセラレータ(例えば暗号化アクセラレータ)、あるいは、別の種類のロジックデバイスまたは命令処理装置により行うことができる。
【0010】
加算命令は、ブロック102でプロセッサまたは他の命令処理装置により受信されてよい。加算命令は、第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示すことができる。
【0011】
そして、第1、第2、および第3のソースオペランドの和を、加算命令の結果として格納する(ブロック104)。1以上の実施形態では、この和は、一部分が、加算命令が示すデスティネーションオペランドに格納され、一部分が、複数のフラグに格納されてよい。1以上の実施形態では、格納される和が、フラグの演算的な組み合わせ(arithmetic combination)に加算される第1、第2、および第3のソースオペランドの和を示してよい。
【0012】
図2は、命令処理装置210の一実施形態のブロック図である。1以上の実施形態では、命令処理装置は汎用プロセッサであってよい。プロセッサは、様々なCISC(complex instruction set computing)プロセッサ、様々なRISC(reduced instruction set computing)プロセッサ、様々なVLIW(very long instruction word)プロセッサ、これらの様々なハイブリッド、またはその他のプロセッサ全般のうちのいずれであってもよい。1以上の実施形態では、プロセッサは、カリフォルニア州サンタクララのインテルコーポレーション社製の汎用プロセッサであってよいが、これは必須要件ではない。インテルコーポレーション社製の汎用プロセッサの特定の例には、これらに限定はされないが、インテル(登録商標)コア(登録商標)i7プロセッサ・エクストリームエディション、インテル(登録商標)コア(登録商標)i7プロセッサ、インテル(登録商標)コア(登録商標)i5プロセッサ、インテル(登録商標)コア(登録商標)2エクストリームプロセッサ、インテル(登録商標)コア(登録商標)2クアッドプロセッサ、インテル(登録商標)コア(登録商標)2デュオプロセッサ、インテル(登録商標)ペンティアム(登録商標)プロセッサ、およびインテル(登録商標)セルロン(登録商標)プロセッサが含まれる。
【0013】
また、命令処理装置は専用プロセッサであってもよい。適切な専用プロセッサの代表的な例には、これらに限定はされないが、ネットワークプロセッサ、通信プロセッサ、暗号化プロセッサ、グラフィックスプロセッサ、コプロセッサ、エンベデッドプロセッサ、およびデジタルシグナルプロセッサ(DSP)がほんの一例として含まれる。これらプロセッサもCISC、RISC、VLIW、これらの様々なハイブリッド、またはその他のプロセッサ全般に基づいていてよい。
【0014】
また他の実施形態では、命令処理装置はコントローラ(例えばマイクロコントローラ)、または、命令処理機能を有するその他の種類のロジック回路であってよい。
【0015】
図2に戻ると、利用中に命令処理装置は、加算命令212の一実施形態を受信することができる。一例では、加算命令は、メモリからあるいはソフトウェアから受信されてよい。1以上の実施形態の加算命令は、第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示すことができる。加算命令は、3つのソースオペランドが足し合わせられ、加算命令が示すデスティネーションオペランドにその和を格納することを示してよい。加算命令は、ソースオペランドおよびデスティネーションオペランドを暗示的に示す、および/または、明示的に指定することができる。例えば加算命令は1以上の専用フィールドまたは複数のビットセットを有することで、1以上のオペランドに対応するレジスタ、メモリ、あるいはその他の格納位置を明示的に示すことができる。
【0016】
加算命令は、命令処理装置が認識している機械命令または制御信号を表してよい。命令処理装置は、加算命令に応じて、および/または、加算命令が指定するように、3つのソースオペランドに加算処理を行い、加算命令に応じて、またはその結果として、デスティネーションに和を格納する機能を有する専用の、または特別な回路、あるいは他のロジック(例えばハードウェアおよび/またはファームウェアと組み合わせられたソフトウェア)を有してよい。
【0017】
示している命令処理装置の実施形態には、命令復号器214が含まれる。復号器は、加算命令212を受信して復号することができる。復号器は、元の加算命令を反映する、あるいは、これから導出される、1以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令、あるいはその他の制御信号を生成して出力することができる。復号器は、様々な異なるメカニズムを利用して実装することができる。適切なメカニズムの例には、これらに限定はされないが、マイクロコードROM、ルックアップテーブル、ハードウェア実装、PLA(programmable logic array)等が含まれる。
【0018】
復号器は装置の必須のコンポーネントではない。1以上の他の実施形態では、装置はこの代わりに、命令エミュレータ、命令翻訳プログラム、命令モーファ、命令解釈プログラム、その他の命令変換ロジックを含むことができる。本技術分野では、様々な異なる種類の命令エミュレータ、命令モーファ、命令翻訳プログラム等が公知である。命令変換ロジックは加算命令を受信して、加算命令をエミュレート、翻訳、変形、解釈したり、加算命令を変換したりして、元の加算命令に対応する1以上の命令または制御信号を出力することができる。命令変換ロジックは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによる実装が可能である。場合によっては、命令変換ロジックの一部または全てが、命令処理装置の残りからオフダイの位置に設けられてもよい(例えば、別のダイとして、またはシステムメモリ内に設けられてもよい)。場合によっては、命令処理装置は復号器および命令変換ロジック両方を備えてもよい。
【0019】
図2に戻ると、命令処理装置は実行ユニット216を含む。一例では、実行ユニットは、演算装置(arithmetic unit)、論理演算装置(arithmetic logic unit)等を含むことができる。実行ユニットは、加算(符号付き、および、符号なし整数加算等)を行うことのできる加算ユニット218を含む。
【0020】
示されている実施形態では、実行ユニットは、復号器の出力に連結されている、さもなくば、これと通信可能状態である。「連結(couple)」という用語は、2以上のエレメントが直接的な電気接触または接続状態にあることを意味する場合がある。しかし「連結」という用語は、さらに、2以上のエレメントが直接的な接続状態にはないが、互いと協働または相互作用することも意味する(例えば間にコンポーネントを介在させることで)。一例を挙げると、復号器および実行ユニットが、これらの間に介在するオプションのバッファおよび/またはその他の本技術分野で公知であるコンポーネント(1または複数)によって、互いと連結される場合がこれに相当する。復号器が加算命令を復号した結果、実行ユニットは、加算命令を反映する、またはこれから導出される1以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令あるいはその他の制御信号を受信して実行してよい。また実行ユニットは、上述した命令変換ロジックから命令または制御信号を受信して実行してよい。
【0021】
復号器、または、装置の別の部分は、加算命令の結果、加算命令の示す3つのソースオペランドにアクセスすることができる。ソースオペランドは、レジスタ、メモリ、またはその他の格納位置に格納されてよい。示されている実施形態では、第1のソースオペランド(SRC1)、第2のソースオペランド(SRC2)、および第3のソースオペランド(SRC3)が全てレジスタセット220のレジスタに格納されているが、これは必須ではない。
【0022】
レジスタセット220は、レジスタファイルの一部であってよく、および潜在的に他のレジスタ(例えば制御レジスタ、ステータスレジスタ、フラグレジスタ等)を含んでよい。各レジスタが、データ格納に利用されうる格納位置またはデバイスであってよい。本明細書で記載するデータを格納および提供する機能を有しさえすれば、様々な異なる種類のレジスタが適切であり利用可能である。レジスタはリネームされてもされなくてもよい。適切なレジスタの例には、これらに限定はされないが、専用物理レジスタ、レジスタのリネームを行って動的に割り当てられる物理レジスタ、専用物理レジスタおよび動的に割り当てられる物理レジスタの組み合わせ等が含まれる。レジスタは物理的に実行ユニットとともにダイ上に配置されることがある。レジスタはプロセッサの外部から、またはプログラマの視点から可視であってよい。例えば命令は、レジスタに格納されているオペランドを特定することができる。
【0023】
実行ユニットは、加算命令(例えば、加算命令から導出した1以上の命令その他の制御信号)を実行する機能を有する回路またはその他の実行ロジック(例えば、ソフトウェア、および/または、ハードウェア、および/または、ファームウェアの様々な組み合わせ)を含んでよい。1以上の実施形態では、実行ユニットは、第1のソースオペランド(SRC1)、第2のソースオペランド(SRC2)、および第3のソースオペランド(SRC3)を示す加算命令212の結果、第1、第2、および第3のソースオペランドの和の一部分を、加算命令が示すデスティネーションオペランド(DEST)に加算命令の結果として格納することができる。示されているように、デスティネーションオペランド(DEST)はレジスタであってよい。またデスティネーションオペランドは、メモリのある位置、または、別の格納位置であってもよい。図においては、デスティネーションオペランドは、ソースオペランド用のレジスタとは別個のレジスタに対応するものとして描かれている。しかしソースオペランド用のレジスタをデスティネーションオペランド用に利用して、例えばデスティネーションオペランドがソースオペランドを上書きするようにすることもできる。
【0024】
1以上の実施形態では、その一部分がデスティネーションオペランド(DEST)に格納されることに加えて、和のさらなる一部分が複数のフラグ(例えば第1のフラグ222および第2のフラグ224等)に格納されてもよい。示されているように、これらフラグはレジスタ226に格納されてよい(例えばステータスレジスタ、フラグレジスタ、または条件コードレジスタ等)が、これは必須ではない。
【0025】
プロセッサおよび様々な他の種類のロジックデバイスがフラグを有する場合がある。例えば各フラグは1以上のビットを含んでよく、各ビットが1または0のバイナリ値を含んでよい。これらフラグの異なる値は、プロセッサまたはその他のロジックデバイスに割り当てられてもよいし、その意味が暗に示されてもよい。フラグは様々に異なる目的に利用される。フラグを、処理のステータス、状態、条件、または結果を記録する目的に利用する場合もある。
【0026】
1以上の実施形態では、第1のフラグ222がキャリーフラグであり、キャリーフラグ222を利用して和の一部を格納することができる。キャリーフラグは、プロセッサその他のロジックデバイスに通常設けられる公知の種類のアーキテクチャフラグまたはステータスフラグである。キャリーフラグは、算術演算におけるオーバフローがないかを示すのに利用することができる。例えばキャリーフラグは、前の演算中にオーバフロー(例えば、算術演算結果の最上位ビットからのキャリーまたはボロー)が生じた場合に第1の値(例えば1のバイナリ値)を有するシングルビットであってよく、そのようなオーバフローがない場合には、キャリーフラグは第2の値(例えば0のバイナリ値)を有してよい。キャリーフラグは、算術演算によって、任意のレジスタまたは格納位置のビット数よりも大きさが大きい結果が生成されたことを示す目的に利用されてもよい。キャリーフラグは、加算または減算といった算術演算に利用することもできる。
【0027】
キャリーフラグの加算への利用法の一例として、8ビットの符号なし整数を利用して数255と255とを足し合わせる例を考慮する。255足す255は510という値を生じる。数510は、バイナリで「1 1111 1110」と表される。しかし「1 1111 1110」は、ちょうど8ビットではなくて、9ビットである。つまり、数510をバイナリで表すには、ちょうど8ビットではなくて9ビットが必要になるということである。8つの最下位ビット「1111 1110」は、数254のバイナリ表現である。255と255との和から、最上位の8個目のビットから9個目のビットに「キャリー」が行われるので、キャリーフラグを値1に設定することができる。キャリーフラグを値1に設定することにより、機械に、結果が8ビットの符号なしの解釈では不正確である旨を示すことができ、および/または、正確な結果が、8ビットの結果と1ビットのキャリーフラグとを足した9ビットの連結であることを示すことができる。キャリーフラグは(例えばキャリーインとして)、加算または減算といった後の算術演算で利用することができる。
【0028】
1以上の実施形態では、第1のフラグ222がキャリーフラグであり、第2のフラグ224が、キャリーフラグ222と概ね同じように利用可能であるアーキテクチャフラグであってよい。アーキテクチャフラグ224は、算術演算にオーバフローがないかを示す目的に利用可能である。例えばアーキテクチャフラグ224は、前の演算中にキャリーフラグ222にオーバフローが生じた場合に第1の値(例えば1のバイナリ値)を有するシングルビットであってよく、そのようなオーバフローがキャリーフラグ222にない場合には、アーキテクチャフラグ224は第2の値(例えば0のバイナリ値)を有してよい。アーキテクチャフラグ224は、算術演算によって、任意のレジスタまたは格納位置のビット数に第1のフラグ(例えばキャリーフラグ)を足したものが表すことのできる大きさより大きい結果が生成されたことを示す目的に利用されてもよい。第1のフラグ(例えばキャリーフラグ)222および第2のさらなるアーキテクチャフラグ224は、それぞれ、加算命令の和を格納するのに利用可能な少なくとも1つの追加ビットを提供することができる。
【0029】
1以上の実施形態では、第2のさらなるアーキテクチャフラグ224はオーバフローフラグであってよい。オーバフローフラグは、プロセッサその他のロジックデバイスに通常設けられる公知の別の種類のアーキテクチャフラグまたはステータスフラグである。しかし従来のオーバフローフラグは、第2のさらなるアーキテクチャフラグ224の用途として上述した方法では利用されてこなかった。ADDおよびADC命令の場合、現在のオーバフローフラグの定義は、符号付き整数のオーバフローを検出する、というものである。しかしオーバフローフラグは従来、別のフラグと組み合わせられて和の一部を格納する目的に利用されてはいない。さらにオーバフローフラグは従来、別のフラグと組み合わせられて複数のキャリーを提供する目的に利用されてはいない。さらに、オーバフローフラグは従来、符号なしオペランドの幅の拡張として利用されてはいない。
【0030】
従って、オーバフローフラグの上述した用途は、キャリーフラグのリパーパスである(re-purposing)。さらに1以上の他の実施形態では、別の既存のアーキテクチャフラグをリパーパスすることもできる。既存のアーキテクチャでは、このような既存のアーキテクチャフラグのリパーパスは、全く新しい、または専用フラグの導入よりも、アーキテクチャおよび文書化面全体として変更が少ない傾向にある。また1以上の実施形態では、1以上の新たな、あるいは専用のフラグを第1および/または第2のフラグに導入することで、ここに記載する目的の達成に利用することができる。
【0031】
説明を曖昧にしないようにする意図から、比較的簡単な命令処理装置を示し、説明している。しかし他の実施形態では複数の実行ユニットを利用することもできることは理解されたい。例えば、装置は、複数の異なる種類の実行ユニット(例えば演算装置、論理演算装置(ALU)、整数ユニット(integer unit)等)を含んでよい。これらユニットのうち少なくとも1つが、本明細書で開示する加算命令の一実施形態に応じたものであってよい。また他の実施形態には、複数のコア、論理プロセッサ、または実行エンジンが含まれてよい。本明細書で開示する加算命令を実行する機能を有する実行ユニットは、少なくとも1つ、少なくとも2つ、殆どあるいは全てのコア、論理プロセッサ、または実行エンジン内に含まれてよい。
【0032】
命令処理装置はさらに、オプションとして1以上の公知の他のコンポーネントを含んでもよい。例えば、他の実施形態では、オプションとして命令フェッチロジック、プレデコードロジック、スケジュールロジック、リオーダ・バッファ、分岐予測ロジック、退避ロジック、レジスタ・リネームロジック、またはこれらの組み合わせを含んでよい。これらのコンポーネントは、従来の方法での実装、または、当業者であれば本開示に基づいて想到可能な微調整を加えることによる実装が可能である。本実施形態を理解する目的にはこれ以上これらのコンポーネントの詳述は不要であるが、これらコンポーネントの説明は刊行物にあるのでそれを参照されたい。当技術分野ではこれらコンポーネントの文字通り多くの異なる組み合わせおよび構成が公知である。本発明の範囲は、これら公知の組み合わせおよび構成のいずれにも限定はされない。実施形態は、これらオプションであるコンポーネントがあってもなくても実装可能である。
【0033】
図3は、加算命令の一実施形態の和を格納するのに利用可能なレジスタ330と複数のフラグ322、324との組み合わせの一実施形態を示すブロック図である。レジスタはビット[N:0]を有する。レジスタはさらに和の一部分の格納にも利用可能である。レジスタには和の代表的なビットの幾つかが格納されているとして示されている。
【0034】
第1のフラグ322は、1つの追加ビット[N+1]を有する。同様に、第2のフラグ324は、1つの追加ビット[N+2]を有する。フラグの2つのビットは、2つの追加ビットを提供して、和の別の一部分を格納する。フラグ「N+1:N+2」の2つのビットは、機械によって、完全な和を提供するレジスタ「N:0」のビットの連結と理解される。ビット[N+2]は、和における最上位ビット(MSB)を格納する。ビット[N+1]は、和における最上位ビット(MSB)の次のビットを格納する。
【0035】
ある具体例では、レジスタは和の一部分を格納するビット[31:0]を有し、第1のフラグ322は追加ビット「32」を有し、第2のフラグ324は追加ビット「33」を有すことができ、これらはまとめて和を部分毎に格納するのに利用される。別の具体例では、レジスタが和の一部分を格納するビット[63:0]を有し、第1および第2のフラグが、和のそれぞれ一部分を格納するための2つの追加ビット「65:64」を有すことができる。
【0036】
第1および第2のフラグがそれぞれ提供するこれら追加ビットによって、より大きな和を格納することができるようになる。3つの数を足し合わせるときに、さらにキャリー用のビットが必要になる場合もある。3つのソースオペランドを加算するときには、オペランドの値によっては、生成する和を格納するべく、これら追加ビットを利用する、および/または、これら追加ビットが必要となる場合がある。64ビットのレジスタのオペランドの場合を例にとって考える。3つのレジスタの最大の符号なし値は(264−1)であるので、結果生じる中間和は、OF:CF=1:1の場合、せいぜい3*264と想定される。この値は(266−1)より小さい。従って、レジスタが提供する64ビットに加えて、フラグにより2つの追加ビットを提供することで、3つの対応する64ビットのレジスタに格納される任意の3つの値の和の最上位ビットを十分表すことができるようになる。3つのソースオペランドを加算する加算命令により生成される最大値はオーバフローを生じない。同様に、32ビットレジスタに加えて、フラグにより2つの追加ビットを提供することで、3つの対応する32ビットのレジスタに格納される任意の3つの値の和の最上位ビットを十分表すことができるようになる。
【0037】
1以上の実施形態では、加算命令で整数が加算されてよい。1以上の実施形態では、整数は符号なし整数であってよい。また1以上の実施形態では、整数が符号付き整数であってもよい。コンセプトの一例として、本開示では符号なし整数の乗算を強調しているが、本発明の範囲はこれに限定されない。
【0038】
図4は、様々な実施形態に適切な、様々な符号なし整数の数値データの種類を示す。第1の種類は、「ワード符号なし整数」である。ワード符号なし整数は16ビットである。第2の種類は、ダブルワード符号なし整数である。ダブルワード符号なし整数は32ビットである。第3の種類は、クワッドワード符号なし整数である。クワッドワード符号なし整数は64ビットである。これらはほんの数例にすぎない。他のサイズの符号なし整数(例えばバイト、または64ビットより広いタイプ(例えば128ビットタイプ))も利用可能である。さらに同様の符号付き整数のタイプも利用可能である。
【0039】
1以上の実施形態における加算命令は、実行ユニットおよび/またはプロセッサ(またはその他の命令処理装置)に、複数のフラグに一部基づいて計算される和を生成させることのできる、フラグによる加算命令(add with flags instruction)であってよい。1以上の実施形態では、複数のフラグに一部基づいて計算される和には、複数のフラグの演算的な組み合わせに加算される3つのオペランドの和が含まれてよい。
【0040】
図5は、フラグによる加算命令513の一実施形態に応じた実行ユニット516の一実施形態のブロック図である。フラグによる加算命令は、第1のソースオペランド(SRC1)、第2のソースオペランド(SRC2)、および第3のソースオペランド(SRC3)を、ソースオペランドとして示し、第2のフラグ(F2)をソースオペランドとして示す。この命令は、第1および第2のフラグを、暗示的な、または暗に示される(understood)ソースオペランドとして示すことができる。
【0041】
フラグによる加算命令に呼応して、実行ユニットはSRC1、SRC2、SRC3、F1、およびF2を受信することができる。1以上の実施形態では、実行ユニットは、フラグによる加算命令の結果、SRC1、SRC2、およびSRC3の和を格納することができ、この和は、フラグによる加算命令が示すデスティネーションオペランド(DEST)のフラグF1およびF2に部分的に基づいて計算される。示されているように1以上の実施形態では、和はDEST=SRC1+SRC2+SRC3+F1+2*F2として計算することができる。
【0042】
この和で、式「F1+2*F2」の部分は、フラグF1およびF2の演算的な組み合わせを表している。第2のフラグ(F2)は乗数2を有する。
【0043】
図6は、複数のフラグを有するフラグレジスタの一実施形態を表すEFLAGSレジスタ626を示す。EFLAGSレジスタは32ビットのレジスタであり、一群のステータスフラグ、制御フラグ、および一群のシステムフラグを含む。
【0044】
ステータスフラグには、キャリーフラグ(CF、ビット0)、パリティフラグ(PF、ビット2)、補助キャリーフラグ(AF、ビット4)、ゼロフラグ(ZF、ビット6)、符号フラグ(SF、ビット7)、およびオーバフローフラグ(OF、ビット11)が含まれる。前述したように、1以上の実施形態では、キャリーフラグ(CF、ビット0)およびオーバフローフラグ(OF、ビット11)を、ここで開示する加算命令に関連する第1および第2のフラグ222、224として利用することができる。このためCFおよびOFを強調するが、これら特別なフラグの利用は必須ではない。
【0045】
システムフラグには、トラップフラグ(TF、ビット8)、割り込みイネーブルフラグ(IF、ビット9)、I/O特権レベル(IOPL、ビット12−13)、ネストタスク(NT、ビット14)、再開フラグ(RF、ビット16)、仮想−8086モード(VM、ビット17)、位置合わせチェック(AC、ビット18)、仮想割り込みフラグ(VIF、ビット19)、仮想割り込み待ち状態(VIP、ビット20)、およびIDフラグ(ID、ビット21)が含まれる。制御フラグには、方向フラグ(DF、ビット10)が含まれる。EFLAGSのビット22−31は保留される。
【0046】
EFLAGSレジスタは、前の16ビットのFLAGSレジスタを引き継いだものである。さらに64ビットモードのプロセッサのEFLAGSレジスタは、RFLAGSレジスタに引き継がれ、64ビットに拡張されている。RFLAGSの下位32ビットはEFLAGSと同じである。
【0047】
EFLAGSレジスタは、1以上の実施形態を実装するのに適したフラグを有するレジスタの特定の一実施形態であるが、この特定のレジスタおよびこれら特定のフラグは当然ながら必須ではない。EFLAGS/RFLAGSレジスタ、およびキャリーフラグのさらなる記述に関しては、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第1巻:基本アーキテクチャ、オーダ番号:253665−032US、2009年9月を参照されたい。
【0048】
1以上の実施形態では、加算命令は、汎用レジスタセットの1以上のソースオペランドおよび/または1以上のデスティネーションオペランドを示すことができる。1以上の実施形態ではこれら汎用レジスタを利用して整数を格納することができる。
【0049】
図7は、適切な32ビットの汎用レジスタセット740の一実施形態を示す。32ビットのレジスタセットは、8個の32ビットまたはダブルワードの汎用レジスタを含む。これらレジスタは、EAX、EBX、ECX、EDX、ESI、EDI、EBP、およびESPと称される。これら32ビットのレジスタはさらに、16ビットおよび8ビットモードでアドレス指定可能である。EAX、EBX、ECX、およびEDXレジスタの下位の16ビットは、AX、BX、CX、およびDXとそれぞれ称される。一例では、レジスタBX、CX、およびDXにはそれぞれ16ビットのワード符号なし整数を格納することができる。レジスタEAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP、R8D−R15Dには、32ビットのダブルワードの符号なし整数を格納することができる。
【0050】
図8は、適切な64ビットの汎用レジスタセット850の一実施形態を示す。64ビットのレジスタセットは16個の64ビットまたはクワッドワードの汎用レジスタを含む。これらレジスタは、RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、R8、R9、R10、R11、R12、R13、R14、およびR15と称される。これらレジスタは32ビットモードで32ビットオペランドに対して動作可能であり、64ビットモードで64ビットオペランドに対して動作可能である。RAX、RBX、RCX、RDX、RSI、RDI、RBP、およびRSPレジスタの下位32ビットが、それぞれEAX、EBX、ECX、EDX、ESI、EDI、EBP、およびESPレジスタに対応する。レジスタR8−R15の下位32ビットはさらに32ビットモードでアドレス指定可能であり、R8D−R15Dと称される。一例では、RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、またはR8D−R15Dレジスタには、64ビットのクワッドワードの符号なし整数を格納することができる。
【0051】
汎用レジスタは様々なx86アーキテクチャプロセッサで利用可能であり、1以上の実施形態を実装するのに適しているが、これら特定のレジスタは当然ながら必須ではない。汎用レジスタのさらなる記述に関しては、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第1巻:基本アーキテクチャ、オーダ番号:253665−032US、2009年9月を参照されたい。
【0052】
加算命令は、特定の実施形態においては、ADD3−3つのオペランドの符号なし整数の加算命令である。ADD3命令は、オプションとしてREXプレフィックスを有してこれ以上のレジスタ、および、より広いデータ空間をアドレス指定する標準的な3−バイトx86オペコードを有することができる。
【0053】
ADD3命令は、3−オペランド命令であり、うち2つのオペランドが明示的なオペランドであり、他の1つのオペランドが暗示的なオペランドである。表1にADD3命令用の命令オペランド符号化を示す。
【表1】
【0054】
オペランド1は明示的に指定されており、32ビットモードの命令については32ビットの汎用レジスタ(reg)に、64ビットモードの命令については64ビットの汎用レジスタにあってよい。オペランド1に対しては読み出し(R)および書き込み(W)が許されている。
【0055】
オペランド2は明示的に指定されており、32ビットモードの命令については32ビットの汎用レジスタ(r)またはメモリ(m)、64ビットモードの命令については64ビットの汎用レジスタまたはメモリ(m)にあってよい。オペランド2に対しては読み出し(R))が許されている。
【0056】
オペランド3は、32ビットモードの命令については32ビットのEAX汎用レジスタとして、64ビットモードの命令については64ビットのRAX汎用レジスタとして、暗示的に識別されている。オペランド3は、暗示された、または暗示的なソースオペランドとして利用される。EAX/RAXレジスタも本明細書の他の場所で説明されるMULX命令について暗示的に識別されるデスティネーションオペランドである。オペランド3に対しては読み出し(R))が許されている。オペランド4はADD3命令には利用不可能である。
【0057】
図9は、加算命令の特定の実施形態を表すADD3命令の記述を示す。16ビットのオペランドサイズは現在のところADD3命令では符号化できない。ADD3は、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第2A巻のADD命令とは異なるように、キャリーフラグ(CF)およびオーバフローフラグ(OF)を定義している。CF、OF、SF,ZF,およびPFは、結果に基づいて設定される。例えば結果の最上位ビットが設定されている場合(例えば64ビットモードのビット[63]、または32ビットモードの[31])、SFフラグが設定される。AFフラグはゼロに設定される。
【0058】
図10は、加算命令の特定の実施形態を表すADD3命令の疑似コード処理を示す。SRCはソースオペランドのことであり、DESTはデスティネーションオペランドのことであり、EAXおよびRAXは暗示的な汎用レジスタのことであり、TEMPは一時的な中間結果のことであり、CFはキャリーフラグのことであり、OFはオーバフローフラグのことである。32ビットモードでビット「33:32」がそれぞれOFおよびCFに格納され、64ビットモードでビット[65:64]がそれぞれOFおよびCFに格納される。
【0059】
フラグによる加算命令は、別の特定の実施形態においては、ADOC3−OF/CFフラグによる3つのオペランドの符号なし整数の加算命令である。ADOC3命令は、オプションとしてREXプレフィックスを有してこれ以上のレジスタ、および、より広いデータ空間をアドレス指定する標準的な3−バイトx86オペコードを有することができる。
【0060】
ADOC3命令は、3−オペランド命令であり、うち2つのオペランドが明示的なオペランドであり、他の1つのオペランドが暗示的なオペランドである。表2にADOC3命令用の命令オペランド符号化を示す。
【表2】
【0061】
オペランド1は明示的に指定されており、32ビットモードの命令については32ビットの汎用レジスタ(reg)に、64ビットモードの命令については64ビットの汎用レジスタにあってよい。オペランド1に対しては読み出し(R)および書き込み(W)が許されている。
【0062】
オペランド2は明示的に指定されており、32ビットモードの命令については32ビットの汎用レジスタ(r)またはメモリ(m)、64ビットモードの命令については64ビットの汎用レジスタまたはメモリ(m)であってよい。オペランド2に対しては読み出し(R))が許されている。
【0063】
オペランド3は、32ビットモードの命令については32ビットのEAX汎用レジスタとして、64ビットモードの命令については64ビットのRAX汎用レジスタとして、暗示的に識別されている。オペランド3は、暗示された、または暗示的なソースオペランドとして利用される。EAX/RAXレジスタも本明細書の他の場所で説明されるMULX命令について暗示的に識別されるデスティネーションオペランドである。オペランド3に対しては読み出し(R))が許されている。オペランド4はADOC3命令には利用不可能である。
【0064】
図11は、フラグによる加算命令の特定の実施形態を表すADOC3命令の記述を示す。16ビットのオペランドサイズは現在のところADOC3命令では符号化できない。入力OFおよびCF値には制約がない。つまりこれらフラグが両方とも1である場合、生成される最大値が何らオーバフローを生じないので、命令の結果の定義は良好である。ADOC3は、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第2A巻のADD命令とは異なるように、キャリーフラグ(CF)およびオーバフローフラグ(OF)を定義している。CF、OF、SF,ZF,およびPFは、結果に基づいて設定される。例えば結果の最上位ビットが設定されている場合(例えば64ビットモードのビット[63]、または32ビットモードの[31])、SFフラグが設定される。AFフラグはゼロに設定される。
【0065】
図12は、フラグによる加算命令の特定の実施形態を表すADOC3命令の疑似コード処理を示す。SRCはソースオペランドのことであり、DESTはデスティネーションオペランドのことであり、EAXおよびRAXは暗示的な汎用レジスタのことであり、TEMPは一時的な中間結果のことであり、CFはキャリーフラグのことであり、OFはオーバフローフラグのことである。32ビットモードでビット「33:32」がそれぞれOFおよびCFに格納され、64ビットモードでビット[65:64]がそれぞれOFおよびCFに格納される。さらに和は、演算的な組み合わせ「(2*OF)+CF」に基づく。
【0066】
さらにADD3およびADOC3命令の別の実施形態も考えられる。例えば1以上の実施形態においては、ADD3および/またはADOC3命令はオプションとしてVEX符号化を利用してよい。VEX符号化により、ちょうど2つではなくて3つのオペランドを明示的に指定することができる。例えば1以上の別の実施形態では、ADD3はVEX符号化により、reg=reg+r/m+vvvvとして表すことができる。別の例としては、1以上の実施形態で、ADOC3はVEX符号化により、reg=reg+r/m+vvvv+OCとして表すことができる。オペコード、符号化、REX、およびVEXプレフィックスのさらなる記述に関しては、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第2A巻:命令セットレファレンス、オーダ番号:253666−032US、2009年9月を参照されたい。
【0067】
ここで開示する加算命令は汎用命令であり、幅広い異なる種類のアルゴリズムで利用可能である。加算命令は、公知のアルゴリズムのいずれかでの利用に制限はされない。加算命令は幅広い異なる種類のアルゴリズムでの利用が想定されている。
【0068】
現在の段階では、ここで開示される加算命令は、大きな数の乗算の速度および/または効率を大いに高める助けとなると考えられている。大きな数の乗算は、様々に異なる種類のアルゴリズムで利用される。例えば、大きな整数の乗算は、べき乗剰余(modular exponentiation)、暗号化、公開鍵暗号化、TLS(Transport Layer Security)、SSL(Secure Sockets Layer)、IPsec(Internet Protocol Security)、IPv6(Internet Protocol version 6)、および、様々な他の暗号化以外のアルゴリズムにおいて広く行われている。暗号化に関しては、過去数年の間、暗号化によりセキュアにするインターネットおよびその他のネットワーク処理が順調に増加してきているのにつれ、暗号アルゴリズムの利用が顕著に増加してきている。この結果、専用暗号化アクセラレータ、エンベデッド暗号化プロセッサ、数多くの接続をサポートするサーバ等が、かなり頻繁にこのような暗号化アルゴリズムを実行しうる。この結果これらデバイスの性能は、大きな整数の乗算を実行するときの速度および/または効率により大きな影響を受けうる。これよりは程度は低いではあろうが、デスクトップおよびラップトップコンピュータその他のデバイスも、これらの暗号化アルゴリズムとの関連で大きな整数の乗算を実行する。高性能コンピュータも大きな数の計算との関連で大きな整数の乗算を実行する。これらおよびその他の種類の電子デバイスも、様々な他の暗号化以外のアルゴリズムまたは用途で、大きな数の乗算を実行する場合がある。従って大きな数の乗算の速度および/または効率を上げる助けとなる新規で従来と異なる命令を設けると好適であると思われる。
【0069】
大きな整数の乗算では、整数を格納するのに利用されるレジスタまたはその他の格納位置のサイズより大きい少なくとも1つの整数を乗算する場合がある。例えば512ビット、256ビット、または128ビットの整数が64ビットまたは32ビットのレジスタ、あるいはこれらよりさらに小さいレジスタに格納されることもある。この結果、512ビット、256ビット、または128ビットの整数が単一の64ビットまたは32ビットのレジスタに収まらない場合がある。従って512ビット、256ビット、または128ビットの整数の、複数の64ビットまたは32ビットに分けた部分を、それぞれ別々の64ビットまたは32ビットのレジスタまたはその他の格納位置に格納する場合がある。
【0070】
これをさらに説明するべく、図13は、4つのレジスタそれぞれに格納される、4つのクワッドワード符号なし整数A1−A4それぞれとして格納される256ビットの符号なし整数の一実施形態を示す。特に第1のクワッドワード符号なし整数(A1)は、第1のレジスタ1130−1に格納され、第2のクワッドワード符号なし整数(A2)は、第2のレジスタ1130−2に格納され、第3のクワッドワード符号なし整数(A3)は、第3のレジスタ1130−3に格納され、第4のクワッドワード符号なし整数(A4)は、第4のレジスタ1130−4に格納される。4つのクワッドワード符号なし整数A1−A4を、256ビットの符号なし整数と総称することにする。このように格納されている256ビットの符号なし整数を、符号なし整数のマルチワードベクトルと称することもできる。
【0071】
大きな整数に乗算を行うと、大きすぎて単一のレジスタには収まらなくなるので、幾らかの問題点を提起する。例えば2以上の乗算命令を利用する場合がある。各乗算命令は、大きな整数の一部分のみに乗算を行って部分積を生成することができる。部分積は、少なくとも1つの数の部分のみの完全に計算された積を表すことができる。これら部分積の各々を、加算することで、または、組み合わせることで、元の大きな整数の積全体を求めることができる。これら部分積の加算には、キャリー伝播加算(addition with carry propagation)が利用される場合がある。
【0072】
適切な乗算命令の1つにMUL−符号なし乗算命令がある。MUL命令については、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第2A巻:命令セットレファレンス、A−M、オーダ番号:253666−032US,2009年9月、その他の古いマニュアルを参照されたい。しかしMUL命令は、積の上位ビットによっては、キャリーフラグ(CF)およびオーバフローフラグ(OF)をクリアまたは設定する。MUL命令はキャリーフラグを変更する場合があるので、一般的にはMUL命令を一連の加算(例えばADD/ADC)命令内に配置しない。さらにMUL命令の部分積の結果は、一般的にはまず格納してから、加算(例えばADD/ADC)命令を実行する必要がある。利用可能なレジスタの数によっては、MUL命令のこれら部分積の全ての結果を加算の前に格納すると、利用可能なレジスタ全てが消費されることがあり、これによりメモリが満杯になったり、溢れたり、および/または、システムメモリへのアクセスが生じたりする場合がある。
【0073】
MUL命令の代替物が、本特許出願の譲受人に譲り渡された「MULTIPLICATION INSTRUCTION FOR WHICH EXECUTION COMPLETES WITHOUT WRITING A CARRY FLAG」なる名称の米国特許出願第_号明細書(出願日_)に開示されているMULX−フラグに影響しない符号なし乗算命令である。MULX命令は、第1のソースオペランドおよび第2のソースオペランドの符号なし乗算を実行して、演算に関するフラグを読み出す、あるいは書き込むことなく、結果をデスティネーションオペランドに格納する。これにより、ソフトウェアがキャリー演算および乗算を伴う加算(add with carry operations and multiplications)をインタリーブすることができるような効率的なプログラミングを行うことができる可能性がでてくる。RDX/EDXレジスタを暗示的なソースとして利用する。RAX/EDXレジスタを結果の下位64/32ビットの暗示的なデスティネーションとして利用する。結果の上位の64/32ビットは、明示的に符号化されたデスティネーションレジスタオペランドに書き込まれる。
【0074】
公知のADD/ADC命令、および、ここで開示するADD3/ADOC3の特定の実施形態の命令により実行される大きな整数の乗算の比較的簡単な比較例を提示することで、3つのソースオペランドを1つの加算命令で行うことに伴う利点を示す。
【0075】
図14は、256ビットのクワッドワード符号なし整数(A1−A4)の、64ビットの符号なし整数(B1)による乗算と、ADD/ADC命令での関連する部分積の和とを示す。図13との関連で示し、説明した256ビットのクワッドワードの符号なし整数(A1−A4)のことを想起されたい。最下位/最上位を除く各コラムに、積の上位部分、および、後続する積の下位部分が存在し、これらが加算されて部分的な和となる。ADD/ADC命令の欠点の1つは、通常2シリーズの加算命令の実行が必要となることである。最初のシリーズの加算命令は、右から左に向かう実線の矢印で示されており、後続するシリーズの加算命令は、右から左に向かう破線の矢印で示されている。これから分かるように、9つの命令が利用されている。加算の多くはキャリーを伴う加算であり、これにより、アプリケーションの流線型のフローに制限を加えることの多いシリアライゼーションが行う必要がでてくる可能性がある。加えて、これにより、保存しておくべき一時的なデータ(例えば部分的な和)の量が増加しうる。場合によってはこれにより利用可能なレジスタ数を超えてしまう可能性もあり、メモリアクセスが必要になることもある。
【0076】
これに対して図15は、1以上の実施形態における、256ビットのクワッドワード符号なし整数(A1−A4)の、64ビットの符号なし整数(B1)による乗算と、ADD3/ADOC3命令での関連する部分積の和とを示す。これら命令の各々は、3つの整数を加算することができ、和の部分を格納可能な2つのフラグが存在している。この結果、2つではなくて1つのパスで加算を完了させることができるようになる。これは、プロセスのシリアライゼーションを低減させることができる可能性があるので好適である。加えて、9つの代わりに、5つの命令のみが利用される。これにより復号、バッファリング、および実行等が必要となる命令数を減らすことができる可能性があるので好適である。加えて、保存しておくことが必要な一時的な結果数を減らすことができる可能性もあり、メモリへのアクセスを回避させる可能性もある。各積Ai*B1がMULまたはMULX命令により生成されてよい。
【0077】
図16は、加算命令の一実施形態のブロック図である。本実施形態では、加算命令は、整数乗算命令の暗示的なデスティネーションオペランド(例えば格納位置)と同じ暗示的なソースオペランド(例えば格納位置)を有する。一例としては、上述した説明で、ADD3およびADOC3命令それぞれが、32ビットモードでは暗示的なソースオペランドEAXを、64ビットモードではRAXを有していたことを想起されたい。さらに、上述したMULX命令は、RAX/EDXレジスタをMULX命令の結果の下位64/32ビットの暗示的なデスティネーションとして利用していたことを想起されたい。この代わりに、別の暗示的なレジスタまたはその他の格納位置を利用することもできる。
【0078】
これによりアルゴリズムによっては、MOV命令またはその他のデータ移動処理が回避される場合がある。これらさらなるMOV命令によって、復号が必要となる命令数、および、潜在的にバッファリングおよび実行が必要となる処理数が増加する傾向にある。例えば移動命令等の命令を省くことで、復号化/変換、ひいてはバッファリング、実行が必要となる命令数を低減させることができる。加えて、復号化されるストリームバッファ(DSB)等を利用するときの命令数を低減させることで、復号化される命令のループをDSB内に収めることができるようになるので、速度面で制限を受ける復号化処理を回避して処理速度を上げることができる。これにより大きな整数の乗算、および、加算命令が乗算命令の積に加算を行うようなある種の他のアルゴリズムの速度および/または効率が上げることができる可能性もあり、好適である。
【0079】
他の実施形態では、加算されるソースオペランドの数を3つだけに限定する必要はなく、利用するフラグの数を2つだけに限定する必要もない。例えば1以上の別の実施形態では、4以上のソースオペランドを足し合わせることもでき、また3以上のフラグを利用することもできる。
【0080】
1以上の実施形態には、機械(例えば実行ユニット)により実行されると3つのオペランドおよび/または整数に加算処理を実行させる加算命令を格納した、有形の機械アクセス可能な、および/または、機械により可読である媒体を含む製品が含まれる。有形の媒体には、1以上の固体材料が含まれてよい。媒体は、例えば機械アクセス可能な形態で情報を提供(例えば格納)するメカニズムを含むことができる。例えば、媒体はオプションとして記録可能媒体(例えばフロッピー(登録商標)ディスク、光格納媒体、光ディスク、CD−ROM,磁気ディスク、光磁気ディスク、ROM、PROM、EPROM、EEPROM、RAM、SRAM、DRAM、フラッシュメモリ、およびこれらの組み合わせ)を含むことができる。
【0081】
適切な機械には、これらに限られないが、ほんの数例を挙げると、実行ユニット、汎用プロセッサ、専用プロセッサ(例えばグラフィックスプロセッサおよび暗号化プロセッサ)、暗号化アクセラレータ、ネットワーク通信プロセッサ、コンピュータシステム、ネットワークデバイス、モデム、PDA,携帯電話機、および、幅広い範囲の他の電子デバイスが1以上の実行ユニットとともに含まれる。
【0082】
また別の実施形態は、実行ユニットを有する、および/またはここで開示する方法を実行するコンピュータシステム、エンベデッドシステム、その他の電子デバイスに係る。
【0083】
図17は、適切なコンピュータシステム1701の第1の実施形態のブロック図である。
【0084】
コンピュータシステムはプロセッサ1700を含む。プロセッサは、少なくとも1つの加算命令1702を実行する機能を有する少なくとも1つの実行ユニット1706を含む。
【0085】
プロセッサは、バス(例えばフロントサイドバス)または他のインターコネクト1780を介してチップセット1781に連結される。インターコネクトは、プロセッサと、システムの他のコンポーネントとの間におけるデータ信号のやりとりをチップセット経由で行うときに利用可能である。
【0086】
チップセットは、メモリコントローラハブ(MCH)1782として知られているシステムロジックチップを含む。MCHは、フロントサイドバスまたは他のインターコネクト1780に連結される。
【0087】
メモリ1786はMCHに連結される。様々な実施形態では、メモリは、RAMを含むことができる。DRAMは、一部の(全てではない)コンピュータシステムで利用されるRAMの一例である。図示されているように、メモリは、命令(例えば1以上の加算命令)1787およびデータ1788を格納するために利用することができる。
【0088】
MCHにはコンポーネントインターコネクト1785も連結される。1以上の実施形態では、コンポーネントインターコネクトは、1以上のPCIe(peripheral component interconnect express)インタフェースを含むことができる。コンポーネントインターコネクトは、他のコンポーネントを、システムの残りのコンポーネントに、チップセット経由で連結することができる。これらコンポーネントの一例は、グラフィックチップあるいは他のグラフィックデバイスであるが、これはオプションであり必須ではない。
【0089】
チップセットも、I/O(入力/出力)コントローラハブ(ICH)1784を含む。ICHは、ハブインタフェースバスその他のインターコネクト1783を介してMCHに連結される。1以上の実施形態では、バスその他のインターコネクト1783はDMI(Direct Media Interface)を含むことができる。
【0090】
ICHにはデータ格納装置1789が連結される。様々な実施形態では、データ格納装置には、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROMデバイス、フラッシュメモリデバイス等、またはこれらの組み合わせが含まれてよい。
【0091】
ICHにはさらに、第2のコンポーネントインターコネクト1790が連結される。1以上の実施形態では、第2のコンポーネントインターコネクトは、1以上のPCIeインタフェースを含むことができる。第2のコンポーネントインターコネクトは、様々な種類のコンポーネントを、システムの残りのコンポーネントに、チップセット経由で連結することができる。
【0092】
ICHにはまたさらに、シリアル拡張ポート1791が連結される。1以上の実施形態では、シリアル拡張ポートは、1以上のUSB(universal serial bus)ポートを含むことができる。シリアル拡張ポートは、様々な他の種類の入力/出力デバイスを、システムの残りのコンポーネントにチップセット経由で連結することができる。
【0093】
ICHにオプションとして連結可能なこの他のコンポーネントの幾らかの例には、これらに限定はされないが、オーディオコントローラ、無線トランシーバ、およびユーザ入力デバイス(例えばキーボード、マウス)が含まれる。
【0094】
ICHにはさらにネットワークコントローラが連結される。ネットワークコントローラは、システムをネットワークに連結することができる。
【0095】
1以上の実施形態では、コンピュータシステムは、ワシントン州Redmondのマイクロソフトコーポレーション社から入手可能なWINDOWS(登録商標)オペレーティングシステムのバージョンを実行することができる。また他のオペレーティングシステム(例えばUNIX(登録商標)、Linux(登録商標)、またはエンベデッドシステム)の利用も可能である。
【0096】
これは適切なコンピュータシステムの一例にすぎない。例えば、1以上の他の実施形態では、プロセッサがマルチコアを有してもよい。別の1以上の実施形態では、MCH1782はプロセッサ1700に物理的にオンダイに集積されていてよく、プロセッサを直接メモリ1786に、集積されたMCHを介して連結することができる。また別の1以上の実施形態では、他のコンポーネントをプロセッサにオンダイに集積して、例えばシステムオンチップ(SoC)デザインを提供することができる。さらに別の1以上の実施形態では、コンピュータシステムが複数のプロセッサを有することができる。
【0097】
図18は、適切なコンピュータシステム1801の第2の実施形態のブロック図である。第2の実施形態は、前段で説明した第1のコンピュータシステム例にいくらか類似している。説明を簡潔にするべく、以下では類似点を全て繰り返すのではなく、差異を中心に説明する。
【0098】
上述した第1の実施形態と同様に、コンピュータシステムは、プロセッサ1800と、I/Oコントローラハブ(ICH)1884を有するチップセット1881とを含む。さらに第1の実施形態と同様に、コンピュータシステムは、チップセットに連結された第1のコンポーネントインターコネクト1885、ICHに連結された第2のコンポーネントインターコネクト1890、ICHに連結されたシリアル拡張ポート1891、ICHに連結されたネットワークコントローラ1892、およびICHに連結されたデータ格納装置1889を含む。
【0099】
この第2の実施形態では、プロセッサ1800はマルチコアプロセッサである。マルチコアプロセッサは、プロセッサコア1894−1から1894−Mを含み、ここでMは2以上の整数であってよい(例えば、2、4、7、あるいはこれより大きい整数)。各コアは、ここに開示する命令の少なくとも1つの実施形態を実行する機能を有する少なくとも1つの実行ユニットを含むことができる。図示されているように、コア−1はキャッシュ1895(例えばL1キャッシュ)を含む。他のコア各々も同様に専用コアを含む。プロセッサコアは、単一の集積回路(IC)チップに実装されてよい。
【0100】
プロセッサはさらに少なくとも1つの共有キャッシュ1896を含む。共有キャッシュは、プロセッサの1以上のコンポーネント(例えばコア)が利用するデータ(例えば命令)を格納することができる。例えば、共有キャッシュは、メモリ1886にローカルにデータをキャッシュすることにより、プロセッサのコンポーネントからのアクセスをより迅速に行うことができる。1以上の実施形態では、共有キャッシュには1以上の中間レベルのキャッシュ(レベル2(L2)、レベル3(L3)、レベル4(L4))、あるいはその他のレベルのキャッシュ、最終のレベルのキャッシュ(LLC)、および/または、これらの組み合わせが含まれてよい。
【0101】
プロセッサコアおよび共有キャッシュはそれぞれ、バスその他のインターコネクト1897と連結される。バスその他のインターコネクトは、コアおよび共有キャッシュを連結して通信を行う。
【0102】
プロセッサはさらにメモリコントローラハブ(MCH)1882を含む。この実施形態に示すように、MCHはプロセッサ1800に集積される。例えばMCHはプロセッサコアとオンダイであってよい。プロセッサはMCH経由でメモリ1886に連結される。1以上の実施形態では、メモリはDRAMを含んでよいが、これは必須ではない。
【0103】
チップセットは入力/出力(I/O)ハブ1893を含む。I/Oハブは、バス(例えばQPI(QuickPath Interconnect))その他のインターコネクト1880を介してプロセッサに連結される。I/Oハブ1893には、第1のコンポーネントインターコネクト1885が連結される。
【0104】
これは適切なシステムの特定の一例にすぎない。ラップトップ、デスクトップ、ハンドヘルドPC、PDA,工学ワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、DSP、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話機、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々なその他の電子デバイスに関する、当技術分野で知られている他のシステム設計および構成の利用もまた適切である。概して、ここに開示されるプロセッサおよび/または実行ユニットを組み込むことのできる幅広い範囲のシステムまたは電子デバイスが概して適切である。
【0105】
上述に記載においては、説明をし易くする目的から、多くの特定の詳細を述べて実施形態の完全な理解を促すよう努めている。しかしながら当業者であれば、1以上の他の実施形態が、これら特定の詳細なしに実行可能であることを容易に理解する。ここに記載した特定の実施形態は、本発明の実施形態の範囲を限定する意図からではなく、例示する意図を有する。本発明の範囲は、上述した特定の例示からではなく、以下に示す請求項によってのみ決定されるべきものである。また、公知の回路、構造、デバイス、および処理に関してはブロック図の形式で示し、詳細には示さないことにより、記載の理解を曖昧にしないよう心がけている箇所もある。また適宜、参照番号または参照番号の末尾を図面にわたり繰り返すことで、オプションとして同様の特性を有する、対応または類似するエレメントであることを示している場合もある。
【0106】
処理のなかには、ハードウェアコンポーネントによる実行が可能なものもあり、機械実行可能な命令で具現化されるものもあり、処理を行う命令でプログラミングされた回路またはハードウェアとする、または少なくともそうするものがある。回路には、汎用または専用プロセッサ、論理回路が含まれてよいが、これら以外にも様々なものが含まれうる。処理はさらにオプションとしてハードウェアおよびソフトウェアの組み合わせによって実行されてもよい。実行ユニットおよび/またはプロセッサは、機械命令または機械命令から導出される1以上の制御信号に呼応して、命令が特定する結果オペランドを格納する専用のあるいは特別の回路を含むことができる。
【0107】
本明細書の随所で利用されている「一実施形態(one embodiment)(an embodiment)」あるいは「1以上の実施形態(one or more embodiments)」といった言い回しは、特定の特徴が実施形態の実行において含まれてよいことを示している。同様に、ある実施形態、図面、その説明では様々な特徴を一まとめに説明して、開示を簡素化することで様々な発明の側面の理解を促す工夫がなされている場合があることに留意されたい。しかしこの開示に関する手法が、実施形態が各請求項に明示されているもの以上の特徴を必要とすることを反映しているものとして捉えられるべきではない。そうではなくて、以下の請求項から分かるように、発明の各側面は、開示する1つ1つの実施形態の特徴全て未満のなかに存在する。従って詳細な記載に続く請求項は、この詳細な記載に、各請求項をそれ自体が発明の別個の実施形態であるように組み込まれるべきであることをここに明記しておく。
【技術分野】
【0001】
様々な別個の実施形態が、加算命令、該命令を実行する方法、該命令の実行ユニット、または該実行ユニットを含むデバイスに係る。特に、様々な別個の実施形態は、キャリーを伴う三重加算(three-way addition)を実行する加算命令、該命令を実行する方法、該命令の実行ユニット、または該実行ユニットを含むデバイスに係る。
【背景技術】
【0002】
加算命令は通常、命令セットアーキテクチャ(ISA)に含まれている。加算命令によりデバイスはデータの加算を行う、あるいはデータの和を得ることができる。
【0003】
公知の加算命令には、ADD−加算命令、および、ADC−キャリーを伴う加算命令が含まれ、両方ともインテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第2A巻:命令セットレファレンス、A−M、オーダ番号:253666−032US、2009年9月、および、様々なこれより古いマニュアルで説明がなされている。
【0004】
ADDおよびADC命令はいずれも、2つのオペランドの加算しかできない。場合によってこれは欠点となりうる。
【0005】
データ処理においては速度および/または効率性が重要であることから、従来とは異なる新たな加算命令を設けると好適であると思われる。
【図面の簡単な説明】
【0006】
本発明は、以下の記載を、本発明の実施形態を示す添付図面を参照しながら読むことで理解が深まる。
【図1】加算命令の一実施形態の処理方法の一実施形態のブロックフロー図である。
【図2】命令処理装置の一実施形態のブロック図である。
【図3】加算命令の一実施形態の和を格納するのに利用可能なレジスタと複数のフラグとの組み合わせの一実施形態を示すブロック図である。
【図4】様々な実施形態に適切な、様々な符号なし整数の数値データの種類を示す。
【図5】フラグによる加算命令の一実施形態に応じた実行ユニットの一実施形態のブロック図である。
【図6】複数のフラグを有するフラグレジスタの一実施形態を表すEFLAGSレジスタを示す。
【図7】適切な32ビットの汎用レジスタセットの一実施形態を示す。
【図8】適切な64ビットの汎用レジスタセットの一実施形態を示す。
【図9】加算命令の特定の実施形態を表すADD3命令の記述を示す。
【図10】加算命令の特定の実施形態を表すADD3命令の疑似コード処理を示す。
【図11】フラグによる加算命令の特定の実施形態を表すADOC3命令の記述を示す。
【図12】フラグによる加算命令の特定の実施形態を表すADOC3命令の疑似コード処理を示す。
【図13】4つのレジスタそれぞれに格納される、4つのクワッドワード符号なし整数として各々格納される256ビットの符号なし整数の一実施形態を示す。
【図14】256ビットのクワッドワード符号なし整数の、64ビットの符号なし整数による乗算と、ADD/ADC命令での関連する部分積の和とを示す。
【図15】1以上の実施形態における、256ビットのクワッドワード符号なし整数の、64ビットの符号なし整数による乗算と、ADD3/ADOC3命令での関連する部分積の和とを示す。
【図16】整数乗算命令の暗示的なデスティネーションオペランドと同じ暗示的なソースオペランドを有する加算命令の一実施形態のブロック図である。
【図17】適切なコンピュータシステムの第1の実施形態のブロック図である。
【図18】適切なコンピュータシステムの第2の実施形態のブロック図である。
【発明を実施するための形態】
【0007】
以下の詳細な説明において命令実装の詳細、データの種類、レジスタの種類、レジスタの配置、プロセッサの種類、システム構成等、多くの特定の詳細を述べる。しかし、実施形態はこれら特定の詳細なしに実施可能である。また、公知の回路、構造、および技術等に関して、詳細に説明しないことにより、本発明の実施形態の本質を曖昧にしないようにしている箇所もある。
【0008】
実施形態は、3つのオペランドの加算を行うことができる、新規で有用な加算命令に係る。他の実施形態は該加算命令の実行ユニットに係る。他の実施形態は、該実行ユニットを有する、または該命令を実行する機能を有する汎用プロセッサ、専用プロセッサ、コントローラ、または他のロジックデバイスまたは命令処理装置に係る。別の実施形態は、ディスク、メモリ、または他の有形機械可読媒体に格納される加算命令に係る。
【0009】
図1は、加算命令の一実施形態の処理方法100の一実施形態のブロックフロー図である。様々な実施形態では、方法は、汎用プロセッサ、専用プロセッサ(例えばグラフィックスプロセッサまたはデジタルシグナルプロセッサ(DSP))、ハードウェアアクセラレータ(例えば暗号化アクセラレータ)、あるいは、別の種類のロジックデバイスまたは命令処理装置により行うことができる。
【0010】
加算命令は、ブロック102でプロセッサまたは他の命令処理装置により受信されてよい。加算命令は、第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示すことができる。
【0011】
そして、第1、第2、および第3のソースオペランドの和を、加算命令の結果として格納する(ブロック104)。1以上の実施形態では、この和は、一部分が、加算命令が示すデスティネーションオペランドに格納され、一部分が、複数のフラグに格納されてよい。1以上の実施形態では、格納される和が、フラグの演算的な組み合わせ(arithmetic combination)に加算される第1、第2、および第3のソースオペランドの和を示してよい。
【0012】
図2は、命令処理装置210の一実施形態のブロック図である。1以上の実施形態では、命令処理装置は汎用プロセッサであってよい。プロセッサは、様々なCISC(complex instruction set computing)プロセッサ、様々なRISC(reduced instruction set computing)プロセッサ、様々なVLIW(very long instruction word)プロセッサ、これらの様々なハイブリッド、またはその他のプロセッサ全般のうちのいずれであってもよい。1以上の実施形態では、プロセッサは、カリフォルニア州サンタクララのインテルコーポレーション社製の汎用プロセッサであってよいが、これは必須要件ではない。インテルコーポレーション社製の汎用プロセッサの特定の例には、これらに限定はされないが、インテル(登録商標)コア(登録商標)i7プロセッサ・エクストリームエディション、インテル(登録商標)コア(登録商標)i7プロセッサ、インテル(登録商標)コア(登録商標)i5プロセッサ、インテル(登録商標)コア(登録商標)2エクストリームプロセッサ、インテル(登録商標)コア(登録商標)2クアッドプロセッサ、インテル(登録商標)コア(登録商標)2デュオプロセッサ、インテル(登録商標)ペンティアム(登録商標)プロセッサ、およびインテル(登録商標)セルロン(登録商標)プロセッサが含まれる。
【0013】
また、命令処理装置は専用プロセッサであってもよい。適切な専用プロセッサの代表的な例には、これらに限定はされないが、ネットワークプロセッサ、通信プロセッサ、暗号化プロセッサ、グラフィックスプロセッサ、コプロセッサ、エンベデッドプロセッサ、およびデジタルシグナルプロセッサ(DSP)がほんの一例として含まれる。これらプロセッサもCISC、RISC、VLIW、これらの様々なハイブリッド、またはその他のプロセッサ全般に基づいていてよい。
【0014】
また他の実施形態では、命令処理装置はコントローラ(例えばマイクロコントローラ)、または、命令処理機能を有するその他の種類のロジック回路であってよい。
【0015】
図2に戻ると、利用中に命令処理装置は、加算命令212の一実施形態を受信することができる。一例では、加算命令は、メモリからあるいはソフトウェアから受信されてよい。1以上の実施形態の加算命令は、第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示すことができる。加算命令は、3つのソースオペランドが足し合わせられ、加算命令が示すデスティネーションオペランドにその和を格納することを示してよい。加算命令は、ソースオペランドおよびデスティネーションオペランドを暗示的に示す、および/または、明示的に指定することができる。例えば加算命令は1以上の専用フィールドまたは複数のビットセットを有することで、1以上のオペランドに対応するレジスタ、メモリ、あるいはその他の格納位置を明示的に示すことができる。
【0016】
加算命令は、命令処理装置が認識している機械命令または制御信号を表してよい。命令処理装置は、加算命令に応じて、および/または、加算命令が指定するように、3つのソースオペランドに加算処理を行い、加算命令に応じて、またはその結果として、デスティネーションに和を格納する機能を有する専用の、または特別な回路、あるいは他のロジック(例えばハードウェアおよび/またはファームウェアと組み合わせられたソフトウェア)を有してよい。
【0017】
示している命令処理装置の実施形態には、命令復号器214が含まれる。復号器は、加算命令212を受信して復号することができる。復号器は、元の加算命令を反映する、あるいは、これから導出される、1以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令、あるいはその他の制御信号を生成して出力することができる。復号器は、様々な異なるメカニズムを利用して実装することができる。適切なメカニズムの例には、これらに限定はされないが、マイクロコードROM、ルックアップテーブル、ハードウェア実装、PLA(programmable logic array)等が含まれる。
【0018】
復号器は装置の必須のコンポーネントではない。1以上の他の実施形態では、装置はこの代わりに、命令エミュレータ、命令翻訳プログラム、命令モーファ、命令解釈プログラム、その他の命令変換ロジックを含むことができる。本技術分野では、様々な異なる種類の命令エミュレータ、命令モーファ、命令翻訳プログラム等が公知である。命令変換ロジックは加算命令を受信して、加算命令をエミュレート、翻訳、変形、解釈したり、加算命令を変換したりして、元の加算命令に対応する1以上の命令または制御信号を出力することができる。命令変換ロジックは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによる実装が可能である。場合によっては、命令変換ロジックの一部または全てが、命令処理装置の残りからオフダイの位置に設けられてもよい(例えば、別のダイとして、またはシステムメモリ内に設けられてもよい)。場合によっては、命令処理装置は復号器および命令変換ロジック両方を備えてもよい。
【0019】
図2に戻ると、命令処理装置は実行ユニット216を含む。一例では、実行ユニットは、演算装置(arithmetic unit)、論理演算装置(arithmetic logic unit)等を含むことができる。実行ユニットは、加算(符号付き、および、符号なし整数加算等)を行うことのできる加算ユニット218を含む。
【0020】
示されている実施形態では、実行ユニットは、復号器の出力に連結されている、さもなくば、これと通信可能状態である。「連結(couple)」という用語は、2以上のエレメントが直接的な電気接触または接続状態にあることを意味する場合がある。しかし「連結」という用語は、さらに、2以上のエレメントが直接的な接続状態にはないが、互いと協働または相互作用することも意味する(例えば間にコンポーネントを介在させることで)。一例を挙げると、復号器および実行ユニットが、これらの間に介在するオプションのバッファおよび/またはその他の本技術分野で公知であるコンポーネント(1または複数)によって、互いと連結される場合がこれに相当する。復号器が加算命令を復号した結果、実行ユニットは、加算命令を反映する、またはこれから導出される1以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令あるいはその他の制御信号を受信して実行してよい。また実行ユニットは、上述した命令変換ロジックから命令または制御信号を受信して実行してよい。
【0021】
復号器、または、装置の別の部分は、加算命令の結果、加算命令の示す3つのソースオペランドにアクセスすることができる。ソースオペランドは、レジスタ、メモリ、またはその他の格納位置に格納されてよい。示されている実施形態では、第1のソースオペランド(SRC1)、第2のソースオペランド(SRC2)、および第3のソースオペランド(SRC3)が全てレジスタセット220のレジスタに格納されているが、これは必須ではない。
【0022】
レジスタセット220は、レジスタファイルの一部であってよく、および潜在的に他のレジスタ(例えば制御レジスタ、ステータスレジスタ、フラグレジスタ等)を含んでよい。各レジスタが、データ格納に利用されうる格納位置またはデバイスであってよい。本明細書で記載するデータを格納および提供する機能を有しさえすれば、様々な異なる種類のレジスタが適切であり利用可能である。レジスタはリネームされてもされなくてもよい。適切なレジスタの例には、これらに限定はされないが、専用物理レジスタ、レジスタのリネームを行って動的に割り当てられる物理レジスタ、専用物理レジスタおよび動的に割り当てられる物理レジスタの組み合わせ等が含まれる。レジスタは物理的に実行ユニットとともにダイ上に配置されることがある。レジスタはプロセッサの外部から、またはプログラマの視点から可視であってよい。例えば命令は、レジスタに格納されているオペランドを特定することができる。
【0023】
実行ユニットは、加算命令(例えば、加算命令から導出した1以上の命令その他の制御信号)を実行する機能を有する回路またはその他の実行ロジック(例えば、ソフトウェア、および/または、ハードウェア、および/または、ファームウェアの様々な組み合わせ)を含んでよい。1以上の実施形態では、実行ユニットは、第1のソースオペランド(SRC1)、第2のソースオペランド(SRC2)、および第3のソースオペランド(SRC3)を示す加算命令212の結果、第1、第2、および第3のソースオペランドの和の一部分を、加算命令が示すデスティネーションオペランド(DEST)に加算命令の結果として格納することができる。示されているように、デスティネーションオペランド(DEST)はレジスタであってよい。またデスティネーションオペランドは、メモリのある位置、または、別の格納位置であってもよい。図においては、デスティネーションオペランドは、ソースオペランド用のレジスタとは別個のレジスタに対応するものとして描かれている。しかしソースオペランド用のレジスタをデスティネーションオペランド用に利用して、例えばデスティネーションオペランドがソースオペランドを上書きするようにすることもできる。
【0024】
1以上の実施形態では、その一部分がデスティネーションオペランド(DEST)に格納されることに加えて、和のさらなる一部分が複数のフラグ(例えば第1のフラグ222および第2のフラグ224等)に格納されてもよい。示されているように、これらフラグはレジスタ226に格納されてよい(例えばステータスレジスタ、フラグレジスタ、または条件コードレジスタ等)が、これは必須ではない。
【0025】
プロセッサおよび様々な他の種類のロジックデバイスがフラグを有する場合がある。例えば各フラグは1以上のビットを含んでよく、各ビットが1または0のバイナリ値を含んでよい。これらフラグの異なる値は、プロセッサまたはその他のロジックデバイスに割り当てられてもよいし、その意味が暗に示されてもよい。フラグは様々に異なる目的に利用される。フラグを、処理のステータス、状態、条件、または結果を記録する目的に利用する場合もある。
【0026】
1以上の実施形態では、第1のフラグ222がキャリーフラグであり、キャリーフラグ222を利用して和の一部を格納することができる。キャリーフラグは、プロセッサその他のロジックデバイスに通常設けられる公知の種類のアーキテクチャフラグまたはステータスフラグである。キャリーフラグは、算術演算におけるオーバフローがないかを示すのに利用することができる。例えばキャリーフラグは、前の演算中にオーバフロー(例えば、算術演算結果の最上位ビットからのキャリーまたはボロー)が生じた場合に第1の値(例えば1のバイナリ値)を有するシングルビットであってよく、そのようなオーバフローがない場合には、キャリーフラグは第2の値(例えば0のバイナリ値)を有してよい。キャリーフラグは、算術演算によって、任意のレジスタまたは格納位置のビット数よりも大きさが大きい結果が生成されたことを示す目的に利用されてもよい。キャリーフラグは、加算または減算といった算術演算に利用することもできる。
【0027】
キャリーフラグの加算への利用法の一例として、8ビットの符号なし整数を利用して数255と255とを足し合わせる例を考慮する。255足す255は510という値を生じる。数510は、バイナリで「1 1111 1110」と表される。しかし「1 1111 1110」は、ちょうど8ビットではなくて、9ビットである。つまり、数510をバイナリで表すには、ちょうど8ビットではなくて9ビットが必要になるということである。8つの最下位ビット「1111 1110」は、数254のバイナリ表現である。255と255との和から、最上位の8個目のビットから9個目のビットに「キャリー」が行われるので、キャリーフラグを値1に設定することができる。キャリーフラグを値1に設定することにより、機械に、結果が8ビットの符号なしの解釈では不正確である旨を示すことができ、および/または、正確な結果が、8ビットの結果と1ビットのキャリーフラグとを足した9ビットの連結であることを示すことができる。キャリーフラグは(例えばキャリーインとして)、加算または減算といった後の算術演算で利用することができる。
【0028】
1以上の実施形態では、第1のフラグ222がキャリーフラグであり、第2のフラグ224が、キャリーフラグ222と概ね同じように利用可能であるアーキテクチャフラグであってよい。アーキテクチャフラグ224は、算術演算にオーバフローがないかを示す目的に利用可能である。例えばアーキテクチャフラグ224は、前の演算中にキャリーフラグ222にオーバフローが生じた場合に第1の値(例えば1のバイナリ値)を有するシングルビットであってよく、そのようなオーバフローがキャリーフラグ222にない場合には、アーキテクチャフラグ224は第2の値(例えば0のバイナリ値)を有してよい。アーキテクチャフラグ224は、算術演算によって、任意のレジスタまたは格納位置のビット数に第1のフラグ(例えばキャリーフラグ)を足したものが表すことのできる大きさより大きい結果が生成されたことを示す目的に利用されてもよい。第1のフラグ(例えばキャリーフラグ)222および第2のさらなるアーキテクチャフラグ224は、それぞれ、加算命令の和を格納するのに利用可能な少なくとも1つの追加ビットを提供することができる。
【0029】
1以上の実施形態では、第2のさらなるアーキテクチャフラグ224はオーバフローフラグであってよい。オーバフローフラグは、プロセッサその他のロジックデバイスに通常設けられる公知の別の種類のアーキテクチャフラグまたはステータスフラグである。しかし従来のオーバフローフラグは、第2のさらなるアーキテクチャフラグ224の用途として上述した方法では利用されてこなかった。ADDおよびADC命令の場合、現在のオーバフローフラグの定義は、符号付き整数のオーバフローを検出する、というものである。しかしオーバフローフラグは従来、別のフラグと組み合わせられて和の一部を格納する目的に利用されてはいない。さらにオーバフローフラグは従来、別のフラグと組み合わせられて複数のキャリーを提供する目的に利用されてはいない。さらに、オーバフローフラグは従来、符号なしオペランドの幅の拡張として利用されてはいない。
【0030】
従って、オーバフローフラグの上述した用途は、キャリーフラグのリパーパスである(re-purposing)。さらに1以上の他の実施形態では、別の既存のアーキテクチャフラグをリパーパスすることもできる。既存のアーキテクチャでは、このような既存のアーキテクチャフラグのリパーパスは、全く新しい、または専用フラグの導入よりも、アーキテクチャおよび文書化面全体として変更が少ない傾向にある。また1以上の実施形態では、1以上の新たな、あるいは専用のフラグを第1および/または第2のフラグに導入することで、ここに記載する目的の達成に利用することができる。
【0031】
説明を曖昧にしないようにする意図から、比較的簡単な命令処理装置を示し、説明している。しかし他の実施形態では複数の実行ユニットを利用することもできることは理解されたい。例えば、装置は、複数の異なる種類の実行ユニット(例えば演算装置、論理演算装置(ALU)、整数ユニット(integer unit)等)を含んでよい。これらユニットのうち少なくとも1つが、本明細書で開示する加算命令の一実施形態に応じたものであってよい。また他の実施形態には、複数のコア、論理プロセッサ、または実行エンジンが含まれてよい。本明細書で開示する加算命令を実行する機能を有する実行ユニットは、少なくとも1つ、少なくとも2つ、殆どあるいは全てのコア、論理プロセッサ、または実行エンジン内に含まれてよい。
【0032】
命令処理装置はさらに、オプションとして1以上の公知の他のコンポーネントを含んでもよい。例えば、他の実施形態では、オプションとして命令フェッチロジック、プレデコードロジック、スケジュールロジック、リオーダ・バッファ、分岐予測ロジック、退避ロジック、レジスタ・リネームロジック、またはこれらの組み合わせを含んでよい。これらのコンポーネントは、従来の方法での実装、または、当業者であれば本開示に基づいて想到可能な微調整を加えることによる実装が可能である。本実施形態を理解する目的にはこれ以上これらのコンポーネントの詳述は不要であるが、これらコンポーネントの説明は刊行物にあるのでそれを参照されたい。当技術分野ではこれらコンポーネントの文字通り多くの異なる組み合わせおよび構成が公知である。本発明の範囲は、これら公知の組み合わせおよび構成のいずれにも限定はされない。実施形態は、これらオプションであるコンポーネントがあってもなくても実装可能である。
【0033】
図3は、加算命令の一実施形態の和を格納するのに利用可能なレジスタ330と複数のフラグ322、324との組み合わせの一実施形態を示すブロック図である。レジスタはビット[N:0]を有する。レジスタはさらに和の一部分の格納にも利用可能である。レジスタには和の代表的なビットの幾つかが格納されているとして示されている。
【0034】
第1のフラグ322は、1つの追加ビット[N+1]を有する。同様に、第2のフラグ324は、1つの追加ビット[N+2]を有する。フラグの2つのビットは、2つの追加ビットを提供して、和の別の一部分を格納する。フラグ「N+1:N+2」の2つのビットは、機械によって、完全な和を提供するレジスタ「N:0」のビットの連結と理解される。ビット[N+2]は、和における最上位ビット(MSB)を格納する。ビット[N+1]は、和における最上位ビット(MSB)の次のビットを格納する。
【0035】
ある具体例では、レジスタは和の一部分を格納するビット[31:0]を有し、第1のフラグ322は追加ビット「32」を有し、第2のフラグ324は追加ビット「33」を有すことができ、これらはまとめて和を部分毎に格納するのに利用される。別の具体例では、レジスタが和の一部分を格納するビット[63:0]を有し、第1および第2のフラグが、和のそれぞれ一部分を格納するための2つの追加ビット「65:64」を有すことができる。
【0036】
第1および第2のフラグがそれぞれ提供するこれら追加ビットによって、より大きな和を格納することができるようになる。3つの数を足し合わせるときに、さらにキャリー用のビットが必要になる場合もある。3つのソースオペランドを加算するときには、オペランドの値によっては、生成する和を格納するべく、これら追加ビットを利用する、および/または、これら追加ビットが必要となる場合がある。64ビットのレジスタのオペランドの場合を例にとって考える。3つのレジスタの最大の符号なし値は(264−1)であるので、結果生じる中間和は、OF:CF=1:1の場合、せいぜい3*264と想定される。この値は(266−1)より小さい。従って、レジスタが提供する64ビットに加えて、フラグにより2つの追加ビットを提供することで、3つの対応する64ビットのレジスタに格納される任意の3つの値の和の最上位ビットを十分表すことができるようになる。3つのソースオペランドを加算する加算命令により生成される最大値はオーバフローを生じない。同様に、32ビットレジスタに加えて、フラグにより2つの追加ビットを提供することで、3つの対応する32ビットのレジスタに格納される任意の3つの値の和の最上位ビットを十分表すことができるようになる。
【0037】
1以上の実施形態では、加算命令で整数が加算されてよい。1以上の実施形態では、整数は符号なし整数であってよい。また1以上の実施形態では、整数が符号付き整数であってもよい。コンセプトの一例として、本開示では符号なし整数の乗算を強調しているが、本発明の範囲はこれに限定されない。
【0038】
図4は、様々な実施形態に適切な、様々な符号なし整数の数値データの種類を示す。第1の種類は、「ワード符号なし整数」である。ワード符号なし整数は16ビットである。第2の種類は、ダブルワード符号なし整数である。ダブルワード符号なし整数は32ビットである。第3の種類は、クワッドワード符号なし整数である。クワッドワード符号なし整数は64ビットである。これらはほんの数例にすぎない。他のサイズの符号なし整数(例えばバイト、または64ビットより広いタイプ(例えば128ビットタイプ))も利用可能である。さらに同様の符号付き整数のタイプも利用可能である。
【0039】
1以上の実施形態における加算命令は、実行ユニットおよび/またはプロセッサ(またはその他の命令処理装置)に、複数のフラグに一部基づいて計算される和を生成させることのできる、フラグによる加算命令(add with flags instruction)であってよい。1以上の実施形態では、複数のフラグに一部基づいて計算される和には、複数のフラグの演算的な組み合わせに加算される3つのオペランドの和が含まれてよい。
【0040】
図5は、フラグによる加算命令513の一実施形態に応じた実行ユニット516の一実施形態のブロック図である。フラグによる加算命令は、第1のソースオペランド(SRC1)、第2のソースオペランド(SRC2)、および第3のソースオペランド(SRC3)を、ソースオペランドとして示し、第2のフラグ(F2)をソースオペランドとして示す。この命令は、第1および第2のフラグを、暗示的な、または暗に示される(understood)ソースオペランドとして示すことができる。
【0041】
フラグによる加算命令に呼応して、実行ユニットはSRC1、SRC2、SRC3、F1、およびF2を受信することができる。1以上の実施形態では、実行ユニットは、フラグによる加算命令の結果、SRC1、SRC2、およびSRC3の和を格納することができ、この和は、フラグによる加算命令が示すデスティネーションオペランド(DEST)のフラグF1およびF2に部分的に基づいて計算される。示されているように1以上の実施形態では、和はDEST=SRC1+SRC2+SRC3+F1+2*F2として計算することができる。
【0042】
この和で、式「F1+2*F2」の部分は、フラグF1およびF2の演算的な組み合わせを表している。第2のフラグ(F2)は乗数2を有する。
【0043】
図6は、複数のフラグを有するフラグレジスタの一実施形態を表すEFLAGSレジスタ626を示す。EFLAGSレジスタは32ビットのレジスタであり、一群のステータスフラグ、制御フラグ、および一群のシステムフラグを含む。
【0044】
ステータスフラグには、キャリーフラグ(CF、ビット0)、パリティフラグ(PF、ビット2)、補助キャリーフラグ(AF、ビット4)、ゼロフラグ(ZF、ビット6)、符号フラグ(SF、ビット7)、およびオーバフローフラグ(OF、ビット11)が含まれる。前述したように、1以上の実施形態では、キャリーフラグ(CF、ビット0)およびオーバフローフラグ(OF、ビット11)を、ここで開示する加算命令に関連する第1および第2のフラグ222、224として利用することができる。このためCFおよびOFを強調するが、これら特別なフラグの利用は必須ではない。
【0045】
システムフラグには、トラップフラグ(TF、ビット8)、割り込みイネーブルフラグ(IF、ビット9)、I/O特権レベル(IOPL、ビット12−13)、ネストタスク(NT、ビット14)、再開フラグ(RF、ビット16)、仮想−8086モード(VM、ビット17)、位置合わせチェック(AC、ビット18)、仮想割り込みフラグ(VIF、ビット19)、仮想割り込み待ち状態(VIP、ビット20)、およびIDフラグ(ID、ビット21)が含まれる。制御フラグには、方向フラグ(DF、ビット10)が含まれる。EFLAGSのビット22−31は保留される。
【0046】
EFLAGSレジスタは、前の16ビットのFLAGSレジスタを引き継いだものである。さらに64ビットモードのプロセッサのEFLAGSレジスタは、RFLAGSレジスタに引き継がれ、64ビットに拡張されている。RFLAGSの下位32ビットはEFLAGSと同じである。
【0047】
EFLAGSレジスタは、1以上の実施形態を実装するのに適したフラグを有するレジスタの特定の一実施形態であるが、この特定のレジスタおよびこれら特定のフラグは当然ながら必須ではない。EFLAGS/RFLAGSレジスタ、およびキャリーフラグのさらなる記述に関しては、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第1巻:基本アーキテクチャ、オーダ番号:253665−032US、2009年9月を参照されたい。
【0048】
1以上の実施形態では、加算命令は、汎用レジスタセットの1以上のソースオペランドおよび/または1以上のデスティネーションオペランドを示すことができる。1以上の実施形態ではこれら汎用レジスタを利用して整数を格納することができる。
【0049】
図7は、適切な32ビットの汎用レジスタセット740の一実施形態を示す。32ビットのレジスタセットは、8個の32ビットまたはダブルワードの汎用レジスタを含む。これらレジスタは、EAX、EBX、ECX、EDX、ESI、EDI、EBP、およびESPと称される。これら32ビットのレジスタはさらに、16ビットおよび8ビットモードでアドレス指定可能である。EAX、EBX、ECX、およびEDXレジスタの下位の16ビットは、AX、BX、CX、およびDXとそれぞれ称される。一例では、レジスタBX、CX、およびDXにはそれぞれ16ビットのワード符号なし整数を格納することができる。レジスタEAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP、R8D−R15Dには、32ビットのダブルワードの符号なし整数を格納することができる。
【0050】
図8は、適切な64ビットの汎用レジスタセット850の一実施形態を示す。64ビットのレジスタセットは16個の64ビットまたはクワッドワードの汎用レジスタを含む。これらレジスタは、RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、R8、R9、R10、R11、R12、R13、R14、およびR15と称される。これらレジスタは32ビットモードで32ビットオペランドに対して動作可能であり、64ビットモードで64ビットオペランドに対して動作可能である。RAX、RBX、RCX、RDX、RSI、RDI、RBP、およびRSPレジスタの下位32ビットが、それぞれEAX、EBX、ECX、EDX、ESI、EDI、EBP、およびESPレジスタに対応する。レジスタR8−R15の下位32ビットはさらに32ビットモードでアドレス指定可能であり、R8D−R15Dと称される。一例では、RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、またはR8D−R15Dレジスタには、64ビットのクワッドワードの符号なし整数を格納することができる。
【0051】
汎用レジスタは様々なx86アーキテクチャプロセッサで利用可能であり、1以上の実施形態を実装するのに適しているが、これら特定のレジスタは当然ながら必須ではない。汎用レジスタのさらなる記述に関しては、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第1巻:基本アーキテクチャ、オーダ番号:253665−032US、2009年9月を参照されたい。
【0052】
加算命令は、特定の実施形態においては、ADD3−3つのオペランドの符号なし整数の加算命令である。ADD3命令は、オプションとしてREXプレフィックスを有してこれ以上のレジスタ、および、より広いデータ空間をアドレス指定する標準的な3−バイトx86オペコードを有することができる。
【0053】
ADD3命令は、3−オペランド命令であり、うち2つのオペランドが明示的なオペランドであり、他の1つのオペランドが暗示的なオペランドである。表1にADD3命令用の命令オペランド符号化を示す。
【表1】
【0054】
オペランド1は明示的に指定されており、32ビットモードの命令については32ビットの汎用レジスタ(reg)に、64ビットモードの命令については64ビットの汎用レジスタにあってよい。オペランド1に対しては読み出し(R)および書き込み(W)が許されている。
【0055】
オペランド2は明示的に指定されており、32ビットモードの命令については32ビットの汎用レジスタ(r)またはメモリ(m)、64ビットモードの命令については64ビットの汎用レジスタまたはメモリ(m)にあってよい。オペランド2に対しては読み出し(R))が許されている。
【0056】
オペランド3は、32ビットモードの命令については32ビットのEAX汎用レジスタとして、64ビットモードの命令については64ビットのRAX汎用レジスタとして、暗示的に識別されている。オペランド3は、暗示された、または暗示的なソースオペランドとして利用される。EAX/RAXレジスタも本明細書の他の場所で説明されるMULX命令について暗示的に識別されるデスティネーションオペランドである。オペランド3に対しては読み出し(R))が許されている。オペランド4はADD3命令には利用不可能である。
【0057】
図9は、加算命令の特定の実施形態を表すADD3命令の記述を示す。16ビットのオペランドサイズは現在のところADD3命令では符号化できない。ADD3は、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第2A巻のADD命令とは異なるように、キャリーフラグ(CF)およびオーバフローフラグ(OF)を定義している。CF、OF、SF,ZF,およびPFは、結果に基づいて設定される。例えば結果の最上位ビットが設定されている場合(例えば64ビットモードのビット[63]、または32ビットモードの[31])、SFフラグが設定される。AFフラグはゼロに設定される。
【0058】
図10は、加算命令の特定の実施形態を表すADD3命令の疑似コード処理を示す。SRCはソースオペランドのことであり、DESTはデスティネーションオペランドのことであり、EAXおよびRAXは暗示的な汎用レジスタのことであり、TEMPは一時的な中間結果のことであり、CFはキャリーフラグのことであり、OFはオーバフローフラグのことである。32ビットモードでビット「33:32」がそれぞれOFおよびCFに格納され、64ビットモードでビット[65:64]がそれぞれOFおよびCFに格納される。
【0059】
フラグによる加算命令は、別の特定の実施形態においては、ADOC3−OF/CFフラグによる3つのオペランドの符号なし整数の加算命令である。ADOC3命令は、オプションとしてREXプレフィックスを有してこれ以上のレジスタ、および、より広いデータ空間をアドレス指定する標準的な3−バイトx86オペコードを有することができる。
【0060】
ADOC3命令は、3−オペランド命令であり、うち2つのオペランドが明示的なオペランドであり、他の1つのオペランドが暗示的なオペランドである。表2にADOC3命令用の命令オペランド符号化を示す。
【表2】
【0061】
オペランド1は明示的に指定されており、32ビットモードの命令については32ビットの汎用レジスタ(reg)に、64ビットモードの命令については64ビットの汎用レジスタにあってよい。オペランド1に対しては読み出し(R)および書き込み(W)が許されている。
【0062】
オペランド2は明示的に指定されており、32ビットモードの命令については32ビットの汎用レジスタ(r)またはメモリ(m)、64ビットモードの命令については64ビットの汎用レジスタまたはメモリ(m)であってよい。オペランド2に対しては読み出し(R))が許されている。
【0063】
オペランド3は、32ビットモードの命令については32ビットのEAX汎用レジスタとして、64ビットモードの命令については64ビットのRAX汎用レジスタとして、暗示的に識別されている。オペランド3は、暗示された、または暗示的なソースオペランドとして利用される。EAX/RAXレジスタも本明細書の他の場所で説明されるMULX命令について暗示的に識別されるデスティネーションオペランドである。オペランド3に対しては読み出し(R))が許されている。オペランド4はADOC3命令には利用不可能である。
【0064】
図11は、フラグによる加算命令の特定の実施形態を表すADOC3命令の記述を示す。16ビットのオペランドサイズは現在のところADOC3命令では符号化できない。入力OFおよびCF値には制約がない。つまりこれらフラグが両方とも1である場合、生成される最大値が何らオーバフローを生じないので、命令の結果の定義は良好である。ADOC3は、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第2A巻のADD命令とは異なるように、キャリーフラグ(CF)およびオーバフローフラグ(OF)を定義している。CF、OF、SF,ZF,およびPFは、結果に基づいて設定される。例えば結果の最上位ビットが設定されている場合(例えば64ビットモードのビット[63]、または32ビットモードの[31])、SFフラグが設定される。AFフラグはゼロに設定される。
【0065】
図12は、フラグによる加算命令の特定の実施形態を表すADOC3命令の疑似コード処理を示す。SRCはソースオペランドのことであり、DESTはデスティネーションオペランドのことであり、EAXおよびRAXは暗示的な汎用レジスタのことであり、TEMPは一時的な中間結果のことであり、CFはキャリーフラグのことであり、OFはオーバフローフラグのことである。32ビットモードでビット「33:32」がそれぞれOFおよびCFに格納され、64ビットモードでビット[65:64]がそれぞれOFおよびCFに格納される。さらに和は、演算的な組み合わせ「(2*OF)+CF」に基づく。
【0066】
さらにADD3およびADOC3命令の別の実施形態も考えられる。例えば1以上の実施形態においては、ADD3および/またはADOC3命令はオプションとしてVEX符号化を利用してよい。VEX符号化により、ちょうど2つではなくて3つのオペランドを明示的に指定することができる。例えば1以上の別の実施形態では、ADD3はVEX符号化により、reg=reg+r/m+vvvvとして表すことができる。別の例としては、1以上の実施形態で、ADOC3はVEX符号化により、reg=reg+r/m+vvvv+OCとして表すことができる。オペコード、符号化、REX、およびVEXプレフィックスのさらなる記述に関しては、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第2A巻:命令セットレファレンス、オーダ番号:253666−032US、2009年9月を参照されたい。
【0067】
ここで開示する加算命令は汎用命令であり、幅広い異なる種類のアルゴリズムで利用可能である。加算命令は、公知のアルゴリズムのいずれかでの利用に制限はされない。加算命令は幅広い異なる種類のアルゴリズムでの利用が想定されている。
【0068】
現在の段階では、ここで開示される加算命令は、大きな数の乗算の速度および/または効率を大いに高める助けとなると考えられている。大きな数の乗算は、様々に異なる種類のアルゴリズムで利用される。例えば、大きな整数の乗算は、べき乗剰余(modular exponentiation)、暗号化、公開鍵暗号化、TLS(Transport Layer Security)、SSL(Secure Sockets Layer)、IPsec(Internet Protocol Security)、IPv6(Internet Protocol version 6)、および、様々な他の暗号化以外のアルゴリズムにおいて広く行われている。暗号化に関しては、過去数年の間、暗号化によりセキュアにするインターネットおよびその他のネットワーク処理が順調に増加してきているのにつれ、暗号アルゴリズムの利用が顕著に増加してきている。この結果、専用暗号化アクセラレータ、エンベデッド暗号化プロセッサ、数多くの接続をサポートするサーバ等が、かなり頻繁にこのような暗号化アルゴリズムを実行しうる。この結果これらデバイスの性能は、大きな整数の乗算を実行するときの速度および/または効率により大きな影響を受けうる。これよりは程度は低いではあろうが、デスクトップおよびラップトップコンピュータその他のデバイスも、これらの暗号化アルゴリズムとの関連で大きな整数の乗算を実行する。高性能コンピュータも大きな数の計算との関連で大きな整数の乗算を実行する。これらおよびその他の種類の電子デバイスも、様々な他の暗号化以外のアルゴリズムまたは用途で、大きな数の乗算を実行する場合がある。従って大きな数の乗算の速度および/または効率を上げる助けとなる新規で従来と異なる命令を設けると好適であると思われる。
【0069】
大きな整数の乗算では、整数を格納するのに利用されるレジスタまたはその他の格納位置のサイズより大きい少なくとも1つの整数を乗算する場合がある。例えば512ビット、256ビット、または128ビットの整数が64ビットまたは32ビットのレジスタ、あるいはこれらよりさらに小さいレジスタに格納されることもある。この結果、512ビット、256ビット、または128ビットの整数が単一の64ビットまたは32ビットのレジスタに収まらない場合がある。従って512ビット、256ビット、または128ビットの整数の、複数の64ビットまたは32ビットに分けた部分を、それぞれ別々の64ビットまたは32ビットのレジスタまたはその他の格納位置に格納する場合がある。
【0070】
これをさらに説明するべく、図13は、4つのレジスタそれぞれに格納される、4つのクワッドワード符号なし整数A1−A4それぞれとして格納される256ビットの符号なし整数の一実施形態を示す。特に第1のクワッドワード符号なし整数(A1)は、第1のレジスタ1130−1に格納され、第2のクワッドワード符号なし整数(A2)は、第2のレジスタ1130−2に格納され、第3のクワッドワード符号なし整数(A3)は、第3のレジスタ1130−3に格納され、第4のクワッドワード符号なし整数(A4)は、第4のレジスタ1130−4に格納される。4つのクワッドワード符号なし整数A1−A4を、256ビットの符号なし整数と総称することにする。このように格納されている256ビットの符号なし整数を、符号なし整数のマルチワードベクトルと称することもできる。
【0071】
大きな整数に乗算を行うと、大きすぎて単一のレジスタには収まらなくなるので、幾らかの問題点を提起する。例えば2以上の乗算命令を利用する場合がある。各乗算命令は、大きな整数の一部分のみに乗算を行って部分積を生成することができる。部分積は、少なくとも1つの数の部分のみの完全に計算された積を表すことができる。これら部分積の各々を、加算することで、または、組み合わせることで、元の大きな整数の積全体を求めることができる。これら部分積の加算には、キャリー伝播加算(addition with carry propagation)が利用される場合がある。
【0072】
適切な乗算命令の1つにMUL−符号なし乗算命令がある。MUL命令については、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第2A巻:命令セットレファレンス、A−M、オーダ番号:253666−032US,2009年9月、その他の古いマニュアルを参照されたい。しかしMUL命令は、積の上位ビットによっては、キャリーフラグ(CF)およびオーバフローフラグ(OF)をクリアまたは設定する。MUL命令はキャリーフラグを変更する場合があるので、一般的にはMUL命令を一連の加算(例えばADD/ADC)命令内に配置しない。さらにMUL命令の部分積の結果は、一般的にはまず格納してから、加算(例えばADD/ADC)命令を実行する必要がある。利用可能なレジスタの数によっては、MUL命令のこれら部分積の全ての結果を加算の前に格納すると、利用可能なレジスタ全てが消費されることがあり、これによりメモリが満杯になったり、溢れたり、および/または、システムメモリへのアクセスが生じたりする場合がある。
【0073】
MUL命令の代替物が、本特許出願の譲受人に譲り渡された「MULTIPLICATION INSTRUCTION FOR WHICH EXECUTION COMPLETES WITHOUT WRITING A CARRY FLAG」なる名称の米国特許出願第_号明細書(出願日_)に開示されているMULX−フラグに影響しない符号なし乗算命令である。MULX命令は、第1のソースオペランドおよび第2のソースオペランドの符号なし乗算を実行して、演算に関するフラグを読み出す、あるいは書き込むことなく、結果をデスティネーションオペランドに格納する。これにより、ソフトウェアがキャリー演算および乗算を伴う加算(add with carry operations and multiplications)をインタリーブすることができるような効率的なプログラミングを行うことができる可能性がでてくる。RDX/EDXレジスタを暗示的なソースとして利用する。RAX/EDXレジスタを結果の下位64/32ビットの暗示的なデスティネーションとして利用する。結果の上位の64/32ビットは、明示的に符号化されたデスティネーションレジスタオペランドに書き込まれる。
【0074】
公知のADD/ADC命令、および、ここで開示するADD3/ADOC3の特定の実施形態の命令により実行される大きな整数の乗算の比較的簡単な比較例を提示することで、3つのソースオペランドを1つの加算命令で行うことに伴う利点を示す。
【0075】
図14は、256ビットのクワッドワード符号なし整数(A1−A4)の、64ビットの符号なし整数(B1)による乗算と、ADD/ADC命令での関連する部分積の和とを示す。図13との関連で示し、説明した256ビットのクワッドワードの符号なし整数(A1−A4)のことを想起されたい。最下位/最上位を除く各コラムに、積の上位部分、および、後続する積の下位部分が存在し、これらが加算されて部分的な和となる。ADD/ADC命令の欠点の1つは、通常2シリーズの加算命令の実行が必要となることである。最初のシリーズの加算命令は、右から左に向かう実線の矢印で示されており、後続するシリーズの加算命令は、右から左に向かう破線の矢印で示されている。これから分かるように、9つの命令が利用されている。加算の多くはキャリーを伴う加算であり、これにより、アプリケーションの流線型のフローに制限を加えることの多いシリアライゼーションが行う必要がでてくる可能性がある。加えて、これにより、保存しておくべき一時的なデータ(例えば部分的な和)の量が増加しうる。場合によってはこれにより利用可能なレジスタ数を超えてしまう可能性もあり、メモリアクセスが必要になることもある。
【0076】
これに対して図15は、1以上の実施形態における、256ビットのクワッドワード符号なし整数(A1−A4)の、64ビットの符号なし整数(B1)による乗算と、ADD3/ADOC3命令での関連する部分積の和とを示す。これら命令の各々は、3つの整数を加算することができ、和の部分を格納可能な2つのフラグが存在している。この結果、2つではなくて1つのパスで加算を完了させることができるようになる。これは、プロセスのシリアライゼーションを低減させることができる可能性があるので好適である。加えて、9つの代わりに、5つの命令のみが利用される。これにより復号、バッファリング、および実行等が必要となる命令数を減らすことができる可能性があるので好適である。加えて、保存しておくことが必要な一時的な結果数を減らすことができる可能性もあり、メモリへのアクセスを回避させる可能性もある。各積Ai*B1がMULまたはMULX命令により生成されてよい。
【0077】
図16は、加算命令の一実施形態のブロック図である。本実施形態では、加算命令は、整数乗算命令の暗示的なデスティネーションオペランド(例えば格納位置)と同じ暗示的なソースオペランド(例えば格納位置)を有する。一例としては、上述した説明で、ADD3およびADOC3命令それぞれが、32ビットモードでは暗示的なソースオペランドEAXを、64ビットモードではRAXを有していたことを想起されたい。さらに、上述したMULX命令は、RAX/EDXレジスタをMULX命令の結果の下位64/32ビットの暗示的なデスティネーションとして利用していたことを想起されたい。この代わりに、別の暗示的なレジスタまたはその他の格納位置を利用することもできる。
【0078】
これによりアルゴリズムによっては、MOV命令またはその他のデータ移動処理が回避される場合がある。これらさらなるMOV命令によって、復号が必要となる命令数、および、潜在的にバッファリングおよび実行が必要となる処理数が増加する傾向にある。例えば移動命令等の命令を省くことで、復号化/変換、ひいてはバッファリング、実行が必要となる命令数を低減させることができる。加えて、復号化されるストリームバッファ(DSB)等を利用するときの命令数を低減させることで、復号化される命令のループをDSB内に収めることができるようになるので、速度面で制限を受ける復号化処理を回避して処理速度を上げることができる。これにより大きな整数の乗算、および、加算命令が乗算命令の積に加算を行うようなある種の他のアルゴリズムの速度および/または効率が上げることができる可能性もあり、好適である。
【0079】
他の実施形態では、加算されるソースオペランドの数を3つだけに限定する必要はなく、利用するフラグの数を2つだけに限定する必要もない。例えば1以上の別の実施形態では、4以上のソースオペランドを足し合わせることもでき、また3以上のフラグを利用することもできる。
【0080】
1以上の実施形態には、機械(例えば実行ユニット)により実行されると3つのオペランドおよび/または整数に加算処理を実行させる加算命令を格納した、有形の機械アクセス可能な、および/または、機械により可読である媒体を含む製品が含まれる。有形の媒体には、1以上の固体材料が含まれてよい。媒体は、例えば機械アクセス可能な形態で情報を提供(例えば格納)するメカニズムを含むことができる。例えば、媒体はオプションとして記録可能媒体(例えばフロッピー(登録商標)ディスク、光格納媒体、光ディスク、CD−ROM,磁気ディスク、光磁気ディスク、ROM、PROM、EPROM、EEPROM、RAM、SRAM、DRAM、フラッシュメモリ、およびこれらの組み合わせ)を含むことができる。
【0081】
適切な機械には、これらに限られないが、ほんの数例を挙げると、実行ユニット、汎用プロセッサ、専用プロセッサ(例えばグラフィックスプロセッサおよび暗号化プロセッサ)、暗号化アクセラレータ、ネットワーク通信プロセッサ、コンピュータシステム、ネットワークデバイス、モデム、PDA,携帯電話機、および、幅広い範囲の他の電子デバイスが1以上の実行ユニットとともに含まれる。
【0082】
また別の実施形態は、実行ユニットを有する、および/またはここで開示する方法を実行するコンピュータシステム、エンベデッドシステム、その他の電子デバイスに係る。
【0083】
図17は、適切なコンピュータシステム1701の第1の実施形態のブロック図である。
【0084】
コンピュータシステムはプロセッサ1700を含む。プロセッサは、少なくとも1つの加算命令1702を実行する機能を有する少なくとも1つの実行ユニット1706を含む。
【0085】
プロセッサは、バス(例えばフロントサイドバス)または他のインターコネクト1780を介してチップセット1781に連結される。インターコネクトは、プロセッサと、システムの他のコンポーネントとの間におけるデータ信号のやりとりをチップセット経由で行うときに利用可能である。
【0086】
チップセットは、メモリコントローラハブ(MCH)1782として知られているシステムロジックチップを含む。MCHは、フロントサイドバスまたは他のインターコネクト1780に連結される。
【0087】
メモリ1786はMCHに連結される。様々な実施形態では、メモリは、RAMを含むことができる。DRAMは、一部の(全てではない)コンピュータシステムで利用されるRAMの一例である。図示されているように、メモリは、命令(例えば1以上の加算命令)1787およびデータ1788を格納するために利用することができる。
【0088】
MCHにはコンポーネントインターコネクト1785も連結される。1以上の実施形態では、コンポーネントインターコネクトは、1以上のPCIe(peripheral component interconnect express)インタフェースを含むことができる。コンポーネントインターコネクトは、他のコンポーネントを、システムの残りのコンポーネントに、チップセット経由で連結することができる。これらコンポーネントの一例は、グラフィックチップあるいは他のグラフィックデバイスであるが、これはオプションであり必須ではない。
【0089】
チップセットも、I/O(入力/出力)コントローラハブ(ICH)1784を含む。ICHは、ハブインタフェースバスその他のインターコネクト1783を介してMCHに連結される。1以上の実施形態では、バスその他のインターコネクト1783はDMI(Direct Media Interface)を含むことができる。
【0090】
ICHにはデータ格納装置1789が連結される。様々な実施形態では、データ格納装置には、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROMデバイス、フラッシュメモリデバイス等、またはこれらの組み合わせが含まれてよい。
【0091】
ICHにはさらに、第2のコンポーネントインターコネクト1790が連結される。1以上の実施形態では、第2のコンポーネントインターコネクトは、1以上のPCIeインタフェースを含むことができる。第2のコンポーネントインターコネクトは、様々な種類のコンポーネントを、システムの残りのコンポーネントに、チップセット経由で連結することができる。
【0092】
ICHにはまたさらに、シリアル拡張ポート1791が連結される。1以上の実施形態では、シリアル拡張ポートは、1以上のUSB(universal serial bus)ポートを含むことができる。シリアル拡張ポートは、様々な他の種類の入力/出力デバイスを、システムの残りのコンポーネントにチップセット経由で連結することができる。
【0093】
ICHにオプションとして連結可能なこの他のコンポーネントの幾らかの例には、これらに限定はされないが、オーディオコントローラ、無線トランシーバ、およびユーザ入力デバイス(例えばキーボード、マウス)が含まれる。
【0094】
ICHにはさらにネットワークコントローラが連結される。ネットワークコントローラは、システムをネットワークに連結することができる。
【0095】
1以上の実施形態では、コンピュータシステムは、ワシントン州Redmondのマイクロソフトコーポレーション社から入手可能なWINDOWS(登録商標)オペレーティングシステムのバージョンを実行することができる。また他のオペレーティングシステム(例えばUNIX(登録商標)、Linux(登録商標)、またはエンベデッドシステム)の利用も可能である。
【0096】
これは適切なコンピュータシステムの一例にすぎない。例えば、1以上の他の実施形態では、プロセッサがマルチコアを有してもよい。別の1以上の実施形態では、MCH1782はプロセッサ1700に物理的にオンダイに集積されていてよく、プロセッサを直接メモリ1786に、集積されたMCHを介して連結することができる。また別の1以上の実施形態では、他のコンポーネントをプロセッサにオンダイに集積して、例えばシステムオンチップ(SoC)デザインを提供することができる。さらに別の1以上の実施形態では、コンピュータシステムが複数のプロセッサを有することができる。
【0097】
図18は、適切なコンピュータシステム1801の第2の実施形態のブロック図である。第2の実施形態は、前段で説明した第1のコンピュータシステム例にいくらか類似している。説明を簡潔にするべく、以下では類似点を全て繰り返すのではなく、差異を中心に説明する。
【0098】
上述した第1の実施形態と同様に、コンピュータシステムは、プロセッサ1800と、I/Oコントローラハブ(ICH)1884を有するチップセット1881とを含む。さらに第1の実施形態と同様に、コンピュータシステムは、チップセットに連結された第1のコンポーネントインターコネクト1885、ICHに連結された第2のコンポーネントインターコネクト1890、ICHに連結されたシリアル拡張ポート1891、ICHに連結されたネットワークコントローラ1892、およびICHに連結されたデータ格納装置1889を含む。
【0099】
この第2の実施形態では、プロセッサ1800はマルチコアプロセッサである。マルチコアプロセッサは、プロセッサコア1894−1から1894−Mを含み、ここでMは2以上の整数であってよい(例えば、2、4、7、あるいはこれより大きい整数)。各コアは、ここに開示する命令の少なくとも1つの実施形態を実行する機能を有する少なくとも1つの実行ユニットを含むことができる。図示されているように、コア−1はキャッシュ1895(例えばL1キャッシュ)を含む。他のコア各々も同様に専用コアを含む。プロセッサコアは、単一の集積回路(IC)チップに実装されてよい。
【0100】
プロセッサはさらに少なくとも1つの共有キャッシュ1896を含む。共有キャッシュは、プロセッサの1以上のコンポーネント(例えばコア)が利用するデータ(例えば命令)を格納することができる。例えば、共有キャッシュは、メモリ1886にローカルにデータをキャッシュすることにより、プロセッサのコンポーネントからのアクセスをより迅速に行うことができる。1以上の実施形態では、共有キャッシュには1以上の中間レベルのキャッシュ(レベル2(L2)、レベル3(L3)、レベル4(L4))、あるいはその他のレベルのキャッシュ、最終のレベルのキャッシュ(LLC)、および/または、これらの組み合わせが含まれてよい。
【0101】
プロセッサコアおよび共有キャッシュはそれぞれ、バスその他のインターコネクト1897と連結される。バスその他のインターコネクトは、コアおよび共有キャッシュを連結して通信を行う。
【0102】
プロセッサはさらにメモリコントローラハブ(MCH)1882を含む。この実施形態に示すように、MCHはプロセッサ1800に集積される。例えばMCHはプロセッサコアとオンダイであってよい。プロセッサはMCH経由でメモリ1886に連結される。1以上の実施形態では、メモリはDRAMを含んでよいが、これは必須ではない。
【0103】
チップセットは入力/出力(I/O)ハブ1893を含む。I/Oハブは、バス(例えばQPI(QuickPath Interconnect))その他のインターコネクト1880を介してプロセッサに連結される。I/Oハブ1893には、第1のコンポーネントインターコネクト1885が連結される。
【0104】
これは適切なシステムの特定の一例にすぎない。ラップトップ、デスクトップ、ハンドヘルドPC、PDA,工学ワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、DSP、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話機、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々なその他の電子デバイスに関する、当技術分野で知られている他のシステム設計および構成の利用もまた適切である。概して、ここに開示されるプロセッサおよび/または実行ユニットを組み込むことのできる幅広い範囲のシステムまたは電子デバイスが概して適切である。
【0105】
上述に記載においては、説明をし易くする目的から、多くの特定の詳細を述べて実施形態の完全な理解を促すよう努めている。しかしながら当業者であれば、1以上の他の実施形態が、これら特定の詳細なしに実行可能であることを容易に理解する。ここに記載した特定の実施形態は、本発明の実施形態の範囲を限定する意図からではなく、例示する意図を有する。本発明の範囲は、上述した特定の例示からではなく、以下に示す請求項によってのみ決定されるべきものである。また、公知の回路、構造、デバイス、および処理に関してはブロック図の形式で示し、詳細には示さないことにより、記載の理解を曖昧にしないよう心がけている箇所もある。また適宜、参照番号または参照番号の末尾を図面にわたり繰り返すことで、オプションとして同様の特性を有する、対応または類似するエレメントであることを示している場合もある。
【0106】
処理のなかには、ハードウェアコンポーネントによる実行が可能なものもあり、機械実行可能な命令で具現化されるものもあり、処理を行う命令でプログラミングされた回路またはハードウェアとする、または少なくともそうするものがある。回路には、汎用または専用プロセッサ、論理回路が含まれてよいが、これら以外にも様々なものが含まれうる。処理はさらにオプションとしてハードウェアおよびソフトウェアの組み合わせによって実行されてもよい。実行ユニットおよび/またはプロセッサは、機械命令または機械命令から導出される1以上の制御信号に呼応して、命令が特定する結果オペランドを格納する専用のあるいは特別の回路を含むことができる。
【0107】
本明細書の随所で利用されている「一実施形態(one embodiment)(an embodiment)」あるいは「1以上の実施形態(one or more embodiments)」といった言い回しは、特定の特徴が実施形態の実行において含まれてよいことを示している。同様に、ある実施形態、図面、その説明では様々な特徴を一まとめに説明して、開示を簡素化することで様々な発明の側面の理解を促す工夫がなされている場合があることに留意されたい。しかしこの開示に関する手法が、実施形態が各請求項に明示されているもの以上の特徴を必要とすることを反映しているものとして捉えられるべきではない。そうではなくて、以下の請求項から分かるように、発明の各側面は、開示する1つ1つの実施形態の特徴全て未満のなかに存在する。従って詳細な記載に続く請求項は、この詳細な記載に、各請求項をそれ自体が発明の別個の実施形態であるように組み込まれるべきであることをここに明記しておく。
【特許請求の範囲】
【請求項1】
第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示す加算命令を受信する段階と、
前記加算命令の結果として前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドを利用して計算した和を、一部分が、前記加算命令が示すデスティネーションオペランドに格納され、一部分が複数のフラグに格納されるよう、格納する段階と
を備える方法。
【請求項2】
前記格納する段階は、
前記複数のフラグの第1のフラグに前記和の最上位ビットの次のビットを格納し、前記複数のフラグの第2のフラグに前記和の最上位ビットを格納する段階を有する請求項1に記載の方法。
【請求項3】
前記和の一部分の前記複数のフラグへの格納には、前記和の一部分をキャリーフラグに格納し、一部分を第2のフラグに格納することが含まれる請求項1に記載の方法。
【請求項4】
前記第2のフラグは、リパーパスされたアーキテクチャフラグを含む請求項3に記載の方法。
【請求項5】
前記第2のフラグは、オーバフローフラグを含む請求項3に記載の方法。
【請求項6】
前記和を格納する段階は、
前記複数のフラグの組み合わせに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和を格納する段階を有する請求項1に記載の方法。
【請求項7】
前記和を格納する段階は、
前記複数のフラグの第1のフラグに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和と、前記複数のフラグの第2のフラグに2を乗算した積に加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和とを格納する段階を有する請求項6に記載の方法。
【請求項8】
前記複数のフラグの前記組み合わせは、オーバフローフラグを含み、
前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドは、符号なし整数を含む請求項6に記載の方法。
【請求項9】
前記受信する段階は、
前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドから選択されるソースオペランドを、同じ命令セットアーキテクチャの整数乗算命令のデスティネーションオペランドとして暗示的に指定されたレジスタとして暗示的に指定する加算命令を受信する段階を有する請求項1に記載の方法。
【請求項10】
前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドは、32ビットおよび64ビットから選択されたサイズを持つ符号なし整数オペランドである請求項1に記載の方法。
【請求項11】
大きな整数を格納するのに利用されるレジスタのサイズより大きい前記大きな整数の乗算の一部として実行される請求項1に記載の方法。
【請求項12】
前記方法は、複数のコアを含む汎用マイクロプロセッサにより実行され、
前記複数のコアのうち少なくとも1つのコアは前記命令に応じた回路を有する請求項1に記載の方法。
【請求項13】
第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示す加算命令の結果、前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドを利用して計算した和を、一部分が、前記加算命令が示すデスティネーションオペランドに格納され、一部分が複数のフラグに格納されるよう、格納する実行ユニットを備える装置。
【請求項14】
前記実行ユニットは、前記複数のフラグの第1のフラグに、前記和の最上位ビットの次のビットを格納し、前記複数のフラグの第2のフラグに前記和の最上位ビットを格納する請求項13に記載の装置。
【請求項15】
前記実行ユニットは、前記和の一部分をキャリーフラグに格納し、一部分を第2のフラグに格納する請求項13に記載の装置。
【請求項16】
前記第2のフラグは、リパーパスされたアーキテクチャフラグを含む請求項15に記載の装置。
【請求項17】
前記第2のフラグは、オーバフローフラグを含む請求項15に記載の装置。
【請求項18】
前記実行ユニットは、前記複数のフラグの組み合わせに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和を格納する請求項13に記載の装置。
【請求項19】
前記実行ユニットは、前記複数のフラグの第1のフラグに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和と、前記複数のフラグの第2のフラグに2を乗算した積に加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和とを格納する請求項18に記載の装置。
【請求項20】
前記実行ユニットは、オーバフローフラグを含む複数のフラグの組み合わせに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和を格納し、
前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドは、符号なし整数を含む請求項18に記載の装置。
【請求項21】
前記実行ユニットは、前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドから選択されるソースオペランドを、同じ命令セットアーキテクチャの整数乗算命令のデスティネーションオペランドとして暗示的に指定されたレジスタとして暗示的に指定する加算命令に応じる請求項13に記載の装置。
【請求項22】
前記実行ユニットは、32ビットおよび64ビットから選択されたサイズを持つ符号なし整数を持つ前記第1のソースオペランド、前記第2のソースオペランド、および前記第1のソースオペランドを指定する加算命令に応じる請求項11に記載の装置。
【請求項23】
前記実行ユニットは、マルチコア汎用マイクロプロセッサのコア内に含まれる請求項11に記載の装置。
【請求項24】
前記実行ユニットは、専用暗号化デバイス内に含まれる請求項13に記載の装置。
【請求項25】
それぞれが符号なし整数を持つ第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示す加算命令の結果、複数のフラグの組み合わせに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドを利用して計算した和を、一部分が、前記加算命令が示すデスティネーションオペランドに格納され、一部分が前記複数のフラグに格納されるよう、格納する実行ユニットを備える装置。
【請求項26】
前記実行ユニットは、前記複数のフラグの第1のフラグに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和と、前記複数のフラグの第2のフラグに2を乗算した積に加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和とを格納する請求項25に記載の装置。
【請求項27】
インターコネクトと、
前記インターコネクトに連結されたプロセッサと、
前記インターコネクトに連結されたDRAMとを備え、
前記プロセッサは、第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示す加算命令の結果、前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドを利用して計算した和を、一部分が、前記加算命令が示すデスティネーションオペランドに格納され、一部分が複数のフラグに格納されるよう、格納するシステム。
【請求項28】
前記プロセッサは、前記複数のフラグの組み合わせに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドを格納する請求項27に記載のシステム。
【請求項29】
製品であって、
加算命令を提供する固体の有形の機械可読媒体を備え、
前記加算命令は、第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示し、機械により処理されると、前記機械に、
前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドを利用して和を計算する段階と、
前記和の一部分を前記加算命令が示すデスティネーションオペランドに格納し、一部分を複数のフラグに格納する段階とを実行させる製品。
【請求項30】
前記プロセッサは、前記複数のフラグの組み合わせに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの前記和を計算する請求項29に記載の製品。
【請求項1】
第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示す加算命令を受信する段階と、
前記加算命令の結果として前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドを利用して計算した和を、一部分が、前記加算命令が示すデスティネーションオペランドに格納され、一部分が複数のフラグに格納されるよう、格納する段階と
を備える方法。
【請求項2】
前記格納する段階は、
前記複数のフラグの第1のフラグに前記和の最上位ビットの次のビットを格納し、前記複数のフラグの第2のフラグに前記和の最上位ビットを格納する段階を有する請求項1に記載の方法。
【請求項3】
前記和の一部分の前記複数のフラグへの格納には、前記和の一部分をキャリーフラグに格納し、一部分を第2のフラグに格納することが含まれる請求項1に記載の方法。
【請求項4】
前記第2のフラグは、リパーパスされたアーキテクチャフラグを含む請求項3に記載の方法。
【請求項5】
前記第2のフラグは、オーバフローフラグを含む請求項3に記載の方法。
【請求項6】
前記和を格納する段階は、
前記複数のフラグの組み合わせに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和を格納する段階を有する請求項1に記載の方法。
【請求項7】
前記和を格納する段階は、
前記複数のフラグの第1のフラグに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和と、前記複数のフラグの第2のフラグに2を乗算した積に加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和とを格納する段階を有する請求項6に記載の方法。
【請求項8】
前記複数のフラグの前記組み合わせは、オーバフローフラグを含み、
前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドは、符号なし整数を含む請求項6に記載の方法。
【請求項9】
前記受信する段階は、
前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドから選択されるソースオペランドを、同じ命令セットアーキテクチャの整数乗算命令のデスティネーションオペランドとして暗示的に指定されたレジスタとして暗示的に指定する加算命令を受信する段階を有する請求項1に記載の方法。
【請求項10】
前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドは、32ビットおよび64ビットから選択されたサイズを持つ符号なし整数オペランドである請求項1に記載の方法。
【請求項11】
大きな整数を格納するのに利用されるレジスタのサイズより大きい前記大きな整数の乗算の一部として実行される請求項1に記載の方法。
【請求項12】
前記方法は、複数のコアを含む汎用マイクロプロセッサにより実行され、
前記複数のコアのうち少なくとも1つのコアは前記命令に応じた回路を有する請求項1に記載の方法。
【請求項13】
第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示す加算命令の結果、前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドを利用して計算した和を、一部分が、前記加算命令が示すデスティネーションオペランドに格納され、一部分が複数のフラグに格納されるよう、格納する実行ユニットを備える装置。
【請求項14】
前記実行ユニットは、前記複数のフラグの第1のフラグに、前記和の最上位ビットの次のビットを格納し、前記複数のフラグの第2のフラグに前記和の最上位ビットを格納する請求項13に記載の装置。
【請求項15】
前記実行ユニットは、前記和の一部分をキャリーフラグに格納し、一部分を第2のフラグに格納する請求項13に記載の装置。
【請求項16】
前記第2のフラグは、リパーパスされたアーキテクチャフラグを含む請求項15に記載の装置。
【請求項17】
前記第2のフラグは、オーバフローフラグを含む請求項15に記載の装置。
【請求項18】
前記実行ユニットは、前記複数のフラグの組み合わせに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和を格納する請求項13に記載の装置。
【請求項19】
前記実行ユニットは、前記複数のフラグの第1のフラグに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和と、前記複数のフラグの第2のフラグに2を乗算した積に加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和とを格納する請求項18に記載の装置。
【請求項20】
前記実行ユニットは、オーバフローフラグを含む複数のフラグの組み合わせに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和を格納し、
前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドは、符号なし整数を含む請求項18に記載の装置。
【請求項21】
前記実行ユニットは、前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドから選択されるソースオペランドを、同じ命令セットアーキテクチャの整数乗算命令のデスティネーションオペランドとして暗示的に指定されたレジスタとして暗示的に指定する加算命令に応じる請求項13に記載の装置。
【請求項22】
前記実行ユニットは、32ビットおよび64ビットから選択されたサイズを持つ符号なし整数を持つ前記第1のソースオペランド、前記第2のソースオペランド、および前記第1のソースオペランドを指定する加算命令に応じる請求項11に記載の装置。
【請求項23】
前記実行ユニットは、マルチコア汎用マイクロプロセッサのコア内に含まれる請求項11に記載の装置。
【請求項24】
前記実行ユニットは、専用暗号化デバイス内に含まれる請求項13に記載の装置。
【請求項25】
それぞれが符号なし整数を持つ第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示す加算命令の結果、複数のフラグの組み合わせに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドを利用して計算した和を、一部分が、前記加算命令が示すデスティネーションオペランドに格納され、一部分が前記複数のフラグに格納されるよう、格納する実行ユニットを備える装置。
【請求項26】
前記実行ユニットは、前記複数のフラグの第1のフラグに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和と、前記複数のフラグの第2のフラグに2を乗算した積に加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの和とを格納する請求項25に記載の装置。
【請求項27】
インターコネクトと、
前記インターコネクトに連結されたプロセッサと、
前記インターコネクトに連結されたDRAMとを備え、
前記プロセッサは、第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示す加算命令の結果、前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドを利用して計算した和を、一部分が、前記加算命令が示すデスティネーションオペランドに格納され、一部分が複数のフラグに格納されるよう、格納するシステム。
【請求項28】
前記プロセッサは、前記複数のフラグの組み合わせに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドを格納する請求項27に記載のシステム。
【請求項29】
製品であって、
加算命令を提供する固体の有形の機械可読媒体を備え、
前記加算命令は、第1のソースオペランド、第2のソースオペランド、および第3のソースオペランドを示し、機械により処理されると、前記機械に、
前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドを利用して和を計算する段階と、
前記和の一部分を前記加算命令が示すデスティネーションオペランドに格納し、一部分を複数のフラグに格納する段階とを実行させる製品。
【請求項30】
前記プロセッサは、前記複数のフラグの組み合わせに加えられる前記第1のソースオペランド、前記第2のソースオペランド、および前記第3のソースオペランドの前記和を計算する請求項29に記載の製品。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【公開番号】特開2011−134305(P2011−134305A)
【公開日】平成23年7月7日(2011.7.7)
【国際特許分類】
【外国語出願】
【出願番号】特願2010−256162(P2010−256162)
【出願日】平成22年11月16日(2010.11.16)
【出願人】(591003943)インテル・コーポレーション (1,101)
【Fターム(参考)】
【公開日】平成23年7月7日(2011.7.7)
【国際特許分類】
【出願番号】特願2010−256162(P2010−256162)
【出願日】平成22年11月16日(2010.11.16)
【出願人】(591003943)インテル・コーポレーション (1,101)
【Fターム(参考)】
[ Back to top ]