(57)【特許請求の範囲】
【請求項１】
プロセッサであって、
複数のレジスタと、
３ソース浮動小数点加算命令を復号する復号ユニットであって、前記３ソース浮動小数点加算命令は、少なくとも第１の浮動小数点データ要素を含む第１のソースオペランドを示し、少なくとも第２の浮動小数点データ要素を含む第２のソースオペランドを示し、少なくとも第３の浮動小数点データ要素を含む第３のソースオペランドを示す、復号ユニットと、
前記複数のレジスタと前記復号ユニットとに結合される実行ユニットであって、前記実行ユニットは、前記３ソース浮動小数点加算命令に応じて、前記３ソース浮動小数点加算命令により示されるデスティネーションオペランドに結果を格納し、前記結果は、少なくとも前記第１、前記第２、及び前記第３の浮動小数点データ要素に対応する結果浮動小数点データ要素を含み、前記結果浮動小数点データ要素は、第１の浮動小数点の丸められた和を含み、前記第１の浮動小数点の丸められた和は、第２の浮動小数点の丸められた和と前記第３の浮動小数点データ要素との相加的組み合わせを表し、前記第２の浮動小数点の丸められた和は、前記第１の浮動小数点データ要素と前記第２の浮動小数点データ要素との相加的組み合わせを表す、実行ユニットと
を備える
プロセッサ。
【請求項２】
前記復号ユニットは、
前記第１のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第１のビットと、
前記第２のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第２のビットと、
前記第３のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第３のビットと
を有する前記３ソース浮動小数点加算命令を復号する、
請求項１に記載のプロセッサ。
【請求項３】
前記第１、前記第２、及び前記第３のビットは、前記３ソース浮動小数点加算命令の即値のビットである、
請求項２に記載のプロセッサ。
【請求項４】
前記復号ユニットは、前記第１のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する前記３ソース浮動小数点加算命令を復号する、
請求項１から３の何れか一項に記載のプロセッサ。
【請求項５】
前記復号ユニットは、前記第２のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する前記３ソース浮動小数点加算命令を復号する、
請求項４に記載のプロセッサ。
【請求項６】
前記復号ユニットは、前記第３のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する前記３ソース浮動小数点加算命令を復号する、
請求項５に記載のプロセッサ。
【請求項７】
前記復号ユニットは、異なる時間においてパックドデータを格納することもできるそれぞれのパックドデータレジスタに各々が格納されるべき複数のスカラデータ要素としての前記第１、前記第２、及び前記第３の浮動小数点データ要素をそれぞれ含む前記第１、前記第２、及び前記第３のソースオペランドを示す前記３ソース浮動小数点加算命令を復号し、
前記３ソース浮動小数点加算命令は、前記第１、前記第２、及び前記第３の浮動小数点データ要素に対応し、前記第１、前記第２、及び前記第３の浮動小数点データ要素に対して前記３ソース浮動小数点加算命令のオペレーションをプレディケートするためのマスク要素を含むソースプレディケートマスクを示す、
請求項１から６の何れか一項に記載のプロセッサ。
【請求項８】
前記復号ユニットは、前記第１の浮動小数点データ要素を含む第１の複数のパックドデータ要素、前記第２の浮動小数点データ要素を含む第２の複数のパックドデータ要素、及び前記第３の浮動小数点データ要素を含む第３の複数のパックドデータ要素をそれぞれ含む前記第１、前記第２、及び前記第３のソースオペランドを示す前記３ソース浮動小数点加算命令を復号する、
請求項１から６の何れか一項に記載のプロセッサ。
【請求項９】
前記復号ユニットは、複数のマスク要素を含むソースパックドデータオペレーションマスクを示す前記３ソース浮動小数点加算命令を復号し、
前記複数のマスク要素のそれぞれは、前記第１、前記第２、及び前記第３のソースオペランドの複数の対応する浮動小数点データ要素に対応し、前記第１、前記第２、及び前記第３のソースオペランドの前記複数の対応する浮動小数点データ要素に対して前記３ソース浮動小数点加算命令のパックドデータオペレーションをプレディケートするためのものである、
請求項８に記載のプロセッサ。
【請求項１０】
前記実行ユニットは、丸めモードに基づいて、前記第１及び前記第２の浮動小数点の丸められた和を求めるものであり、
前記丸めモードは、（１）最近接偶数への丸め、（２）負の無限大への丸め、（３）正の無限大への丸め、及び（４）切り捨てによるゼロへの丸めのうちの１つであり、
前記復号ユニットは、前記丸めモードを指定する前記３ソース浮動小数点加算命令を復号し、
前記３ソース浮動小数点加算命令により指定される前記丸めモードは、前記プロセッサの浮動小数点制御レジスタに基づく丸めモードに対してオーバーライドする、
請求項１から６の何れか一項に記載のプロセッサ。
【請求項１１】
前記実行ユニットは、
前記第１及び前記第２の浮動小数点データ要素を受信し、前記第２の浮動小数点の丸められた和を出力するよう結合される第１の浮動小数点加算器と、
前記第３の浮動小数点データ要素及び前記第２の浮動小数点の丸められた和を受信するよう結合される第２の浮動小数点加算器であって、前記第１の浮動小数点の丸められた和を出力する第２の浮動小数点加算器と
を有する、
請求項１から６の何れか一項に記載のプロセッサ。
【請求項１２】
予約ステーションと、
前記予約ステーションに結合されるバッファと
をさらに備え、
前記バッファは、前記予約ステーションから、前記３ソース浮動小数点加算命令に対応する制御信号を受信し、前記第１の浮動小数点加算器が前記第２の浮動小数点の丸められた和を生成している期間中に前記制御信号を格納し、
前記第２の浮動小数点加算器に結合される前記バッファは、前記期間の後に、前記第２の浮動小数点加算器に前記制御信号を提供する、
請求項１１に記載のプロセッサ。
【請求項１３】
前記実行ユニットは、出力部と、入力部と、前記出力部を前記入力部に結合させる回路とを有する、
請求項１から６のいずれか一項に記載のプロセッサ。
【請求項１４】
前記復号ユニットは、前記第３のソースオペランドがｒｅｇ＿ｆｉｅｌｄにより指し示され、前記第１のソースオペランドがＥＶＥＸ．ｖｖｖｖにより指し示され、前記第２のソースオペランドが８ビットの即値の一部及びｒｍ＿ｆｉｅｌｄのうちの１つを用いて指し示されるＥＶＥＸ符号化を含む前記３ソース浮動小数点加算命令を復号する、
請求項１から６の何れか一項に記載のプロセッサ。
【請求項１５】
プロセッサにおける方法であって、
前記方法は、
３ソース浮動小数点加算命令を受信する段階であって、前記３ソース浮動小数点加算命令は、少なくとも第１の浮動小数点データ要素を含む第１のソースオペランドを示し、少なくとも第２の浮動小数点データ要素を含む第２のソースオペランドを示し、少なくとも第３の浮動小数点データ要素を含む第３のソースオペランドを示す、段階と、
前記３ソース浮動小数点加算命令に応じてデスティネーションオペランドに結果を格納する段階であって、前記デスティネーションオペランドは、前記３ソース浮動小数点加算命令により示され、前記結果は、少なくとも前記第１、前記第２、及び前記第３の浮動小数点データ要素に対応する結果浮動小数点データ要素を含み、前記結果浮動小数点データ要素は、第１の浮動小数点の丸められた和を含み、前記第１の浮動小数点の丸められた和は、第２の浮動小数点の丸められた和と前記第３の浮動小数点データ要素との相加的組み合わせを表し、前記第２の浮動小数点の丸められた和は、前記第１の浮動小数点データ要素と前記第２の浮動小数点データ要素との相加的組み合わせを表す、段階と
を備える
方法。
【請求項１６】
受信する前記段階は、
前記第１のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定し、前記第２のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する前記３ソース浮動小数点加算命令を受信する段階
を含む、
請求項１５に記載の方法。
【請求項１７】
受信する前記段階は、
前記第１及び前記第２の浮動小数点の丸められた和に用いられる丸めモードを指定する前記３ソース浮動小数点加算命令を受信する段階
を含む、
請求項１５又は１６に記載の方法。
【請求項１８】
受信する前記段階は、
それぞれのパックドデータレジスタに各々が格納される複数のスカラデータ要素としての前記第１、前記第２、前記第３の浮動小数点データ要素をそれぞれ含む前記第１、前記第２、及び前記第３のソースオペランドを示す前記３ソース浮動小数点加算命令を受信する段階であって、前記３ソース浮動小数点加算命令は、ソースプレディケートマスクを示す、段階
を含む、
請求項１５から１７の何れか一項に記載の方法。
【請求項１９】
複数の命令を処理するシステムであって、
相互接続と、
前記相互接続に結合されるプロセッサであって、前記プロセッサは３ソース浮動小数点加算命令を受信し、前記３ソース浮動小数点加算命令は、少なくとも第１の浮動小数点データ要素を含む第１のソースオペランドを示し、少なくとも第２の浮動小数点データ要素を含む第２のソースオペランドを示し、少なくとも第３の浮動小数点データ要素を含む第３のソースオペランドを示し、前記プロセッサは、前記３ソース浮動小数点加算命令に応じて、前記３ソース浮動小数点加算命令により示されるべきデスティネーションオペランドに結果を格納し、前記結果は、少なくとも前記第１、前記第２、前記第３の浮動小数点データ要素に対応する結果浮動小数点データ要素を含み、前記結果浮動小数点データ要素は、第１の浮動小数点の丸められた和を含み、前記第１の浮動小数点の丸められた和は、第２の浮動小数点の丸められた和と前記第３の浮動小数点データ要素との相加的組み合わせを表し、前記第２の浮動小数点の丸められた和は、前記第１の浮動小数点データ要素と前記第２の浮動小数点データ要素との相加的組み合わせを表す、プロセッサと、
前記相互接続に結合されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）と
を備える
システム。
【請求項２０】
前記３ソース浮動小数点加算命令は、前記第１のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する、
請求項１９に記載のシステム。
【請求項２１】
コンピュータに３ソース浮動小数点加算命令を実行させるプログラムであって、
前記３ソース浮動小数点加算命令は、少なくとも第１の浮動小数点データ要素を含む第１のソースオペランドを示し、少なくとも第２の浮動小数点データ要素を含む第２のソースオペランドを示し、少なくとも第３の浮動小数点データ要素を含む第３のソースオペランドを示し、前記３ソース浮動小数点加算命令は、機械により実行された場合、前記機械に、前記３ソース浮動小数点加算命令に応じてデスティネーションオペランドに結果を格納する動作を含む複数の動作を実行させ、前記デスティネーションオペランドは、前記３ソース浮動小数点加算命令により示され、前記結果は、少なくとも前記第１、前記第２、前記第３の浮動小数点データ要素に対応する結果浮動小数点データ要素を含み、前記結果浮動小数点データ要素は、第１の浮動小数点の丸められた和を含み、前記第１の浮動小数点の丸められた和は、第２の浮動小数点の丸められた和と前記第３の浮動小数点データ要素との相加的組み合わせを表し、前記第２の浮動小数点の丸められた和は、前記第１の浮動小数点データ要素と前記第２の浮動小数点データ要素との相加的組み合わせを表す、
プログラム。
【請求項２２】
前記３ソース浮動小数点加算命令は、前記第１のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する、
請求項２１に記載のプログラム。
【請求項２３】
プロセッサであって、
複数のレジスタと、
３ソース浮動小数点加算命令を復号する復号ユニットであって、前記３ソース浮動小数点加算命令は、少なくとも第１の浮動小数点データ要素を含む第１のソースオペランドを示し、少なくとも第２の浮動小数点データ要素を含む第２のソースオペランドを示し、少なくとも第３の浮動小数点データ要素を含む第３のソースオペランドを示し、前記第１のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第１のビットを含み、前記第２のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第２のビットを含む、復号ユニットと、
前記複数のレジスタと前記復号ユニットとに結合される実行ユニットであって、前記実行ユニットは、前記３ソース浮動小数点加算命令に応じて、前記３ソース浮動小数点加算命令に示されるべきデスティネーションオペランドに結果を格納し、前記結果は、少なくとも前記第１、前記第２、及び前記第３の浮動小数点データ要素に対応する結果浮動小数点データ要素を含み、前記結果浮動小数点データ要素は、前記第１、前記第２、及び前記第３の浮動小数点データ要素の相加的組み合わせを表す浮動小数点の丸められた和を含む、実行ユニットと
を備える
プロセッサ。
【請求項２４】
前記浮動小数点の丸められた和は、第２の浮動小数点の丸められた和と前記第３の浮動小数点データ要素との相加的組み合わせを表し、前記第２の浮動小数点の丸められた和は、前記第１の浮動小数点データ要素と前記第２の浮動小数点データ要素との相加的組み合わせを表す、
請求項２３に記載のプロセッサ。
【請求項２５】
請求項１５から１８の何れか一項に記載の方法を実行するための手段を備えるプロセッサ。
【請求項２６】
請求項２１又は２２に記載のプログラムを格納する非一時的機械可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書にて説明される複数の実施形態は、概して、複数のプロセッサに関する。特に、本明細書にて説明される複数の実施形態は、概して、複数の命令に応じて浮動小数点数を加算するプロセッサに関する。
【背景技術】
【０００２】
浮動小数点数は一般に、複数のプロセッサ、複数のコンピュータシステム、及び複数の他の電子デバイスに用いられる。浮動小数点数の１つの利点が、これらは広い範囲の数値が比較的コンパクトな数値形式及び／又はビット数で表されることを可能にすることである。浮動小数点数は、これらのビットを、浮動小数点数の符号（ｓｉｇｎ）、仮数（ｓｉｇｎｉｆｉｃａｎｄ）、及び指数（ｅｘｐｏｎｅｎｔ）として知られている多数の構成フィールドに割り当てさせ得る。符号、仮数、基数（ｂａｓｅ）、及び指数は、以下のように関連され得る。Ａ＝（−１）ｓｉｇｎ＊ｓｉｇｎｉｆｉｃａｎｄ＊ｂａｓｅｅｘｐｏｎｅｎｔ
【０００３】
「（−１）ｓｉｇｎ」という式は、−１の符号（ｓｉｇｎ）乗を表す。この式は、浮動小数点数が正（＋）又は負（−）であるか否かを評価する。例えば、符号が整数のゼロである場合、浮動小数点数は正となり、又は代替的に、符号が整数の１である場合、浮動小数点数は負となる。仮数は、浮動小数点数の精度を大いに左右する桁の列の長さを含む。仮数はまた、有効桁、係数、小数、又は仮数（ｍａｎｔｉｓｓａ）として称される場合がある。基数点（ｒａｄｉｘ  ｐｏｉｎｔ）（例えば、１０進数形式の１０進の小数点又は２進数形式の２進の小数点）は、一般に、固定された位置（場合によっては暗黙であってよいが、例えば、仮数の最左又は最上位桁のすぐ右）に存在することが暗黙的に仮定される。２進数の例示的な仮数が、「１．１００１００１００００１１１１１１０１１０１１」であり得る。基数点の右にある仮数の桁（例えば、「１００１００１００００１１１１１１０１１０１１」）は、複数の小数ビットを表す。「ｂａｓｅｅｘｐｏｎｅｎｔ」という式は、指数で累乗される基数を表す。基数は一般に、基数２（２進数の場合）、基数１０（１０進数の場合）、又は基数１６（１６進数の場合）である。基数（ｂａｓｅ）は、基数（ｒａｄｉｘ）と称される場合がある。指数（ｅｘｐｏｎｅｎｔ）はまた、指数（ｃｈａｒａｃｔｅｒｉｓｔｉｃ）又はスケールと称される。
【０００４】
基数を指数で累乗することは要するに、指数の桁数により（例えば、暗黙の又は仮定の開始位置から）基数点をシフトする。指数が正である場合、基数点は右にシフトされ、又は、指数が負である場合、基数点は左にシフトされる。
【０００５】
米国電気電子技術者協会（ＩＥＥＥ）では、標準規格ＩＥＥＥ７５４において、標準化された多数の異なる浮動小数点形式を有している。代表的に、単精度浮動小数点形式では、３２ビットを有し、ビット［２２：０］における２３ビットの仮数部と、ビット［３０：２３］における８ビットの指数部と、ビット［３１］における１ビットの符号部とを含む。倍精度浮動小数点形式では、６４ビットを有し、ビット［５１：０］における５２ビットの仮数部と、ビット［６２：５２］における１１ビットの指数部と、ビット［６３］における１ビットの符号部とを含む。例えば、半精度浮動小数点形式、拡張型倍精度浮動小数点形式、及び４倍精度浮動小数点形式などの他の浮動小数点形式も当技術分野において知られている。浮動小数点数及び形式に関する複数のさらなる詳細は、所望であれば、ＩＥＥＥ７５４により入手可能である。
【図面の簡単な説明】
【０００６】
本願発明は、以下の説明、及び、複数の実施形態を図示するのに用いられる複数の添付の図面を参照により最良に理解され得る。複数の図面は以下の通りです。
【図１】３ソース浮動小数点加算命令の実施形態を実行するよう動作可能なプロセッサの実施形態のブロック図である。
【図２】３ソース浮動小数点加算命令の実施形態を実行する方法の実施形態のブロックフロー図である。
【図３】パックド３ソース浮動小数点選択的マスク加算オペレーションの実施形態のブロック図である。
【図４】スカラ３ソース浮動小数点選択的マスク加算オペレーションの実施形態のブロック図である。
【図５】パックド３ソース浮動小数点選択的マスク選択的ネゲーション制御加算オペレーションの実施形態のブロック図である。
【図６】スカラ３ソース浮動小数点選択的マスク選択的ネゲーション制御加算オペレーションの実施形態のブロック図である。
【図７】３ソース浮動小数点加算器の実施形態のブロック図である。
【図８】共に直列に結合される２ソース浮動小数点加算器のペアの実施形態のブロック図である。
【図９】出力部を入力部に結合させる再循環経路を有する２ソース浮動小数点加算器の実施形態のブロック図である。
【図１０】３ソース浮動小数点加算命令に適した命令フォーマットの実施形態のブロック図である。
【図１１】パックドデータレジスタの適したセットの実施形態のブロック図である。
【図１２】マスクビット数がパックドデータ幅及びデータ要素幅に依存することを示す表である。
【図１３】オペレーションマスクレジスタの適したセットの実施形態のブロック図である。
【図１４Ａ】本願発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びそれの命令テンプレートを示すブロック図である。
【図１４Ｂ】本願発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びそれの命令テンプレートを示すブロック図である。
【図１５Ａ】本願発明の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。
【図１５Ｂ】本願発明の一実施形態に係る、フルオペコードフィールドを構成する、特定ベクトル向け命令フォーマットの複数のフィールドを示すブロック図である。
【図１５Ｃ】本願発明の一実施形態に係る、レジスタインデックスフィールドを構成する、特定ベクトル向け命令フォーマットの複数のフィールドを示すブロック図である。
【図１５Ｄ】本願発明の一実施形態に係る、オーグメンテーションオペレーションフィールドを構成する、特定ベクトル向け命令フォーマットの複数のフィールドを示すブロック図である。
【図１６】レジスタアーキテクチャの実施形態のブロック図である。
【図１７Ａ】インオーダパイプラインの実施形態及びレジスタリネーミングアウトオブオーダ発行／実行パイプラインの実施形態を示すブロック図である。
【図１７Ｂ】実行エンジンユニットに結合されるフロントエンドユニットを含むプロセッサコアの実施形態のブロック図であり、実行エンジンユニット及びフロントエンドユニットは両方ともメモリユニットに結合される。
【図１８Ａ】単一のプロセッサコアの実施形態、及びそのオンダイ相互接続ネットワークへの接続、並びにそのレベル２（Ｌ２）キャッシュローカルサブセットのブロック図である。
【図１８Ｂ】図１８Ａのプロセッサコアの一部の拡大図の実施形態のブロック図である。
【図１９】１つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよいプロセッサの実施形態のブロック図である。
【図２０】コンピュータアーキテクチャの第１の実施形態のブロック図である。
【図２１】コンピュータアーキテクチャの第２の実施形態のブロック図である。
【図２２】コンピュータアーキテクチャの第３の実施形態のブロック図である。
【図２３】コンピュータアーキテクチャの第４の実施形態のブロック図である。
【図２４】本願発明の複数の実施形態に係る、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の使用のブロック図である。
【発明を実施するための形態】
【０００７】
本明細書において、複数の３ソースオペランド浮動小数点加算命令と、当該命令を実行する複数のプロセッサと、当該命令を処理又は実行する場合、当該複数のプロセッサにより実行される複数の方法と、当該命令を処理又は実行する１つ又は複数のプロセッサを組み込む複数のシステムとが開示される。以下の説明において、多数の具体的な詳細（例えば、複数の特定の命令オペレーション、データフォーマット、プロセッサ構成、マイクロアーキテクチャ上の詳細、一連のオペレーションなど）が記載される。しかし、複数の実施形態は、これらの具体的な詳細なしで実施され得る。他の例では、複数の周知回路、構造、及び技術は、本説明の理解を曖昧にすることを回避するために詳細に示されていない。
【０００８】
図１は、３ソース浮動小数点加算命令１０２の実施形態を実行するよう動作可能なプロセッサ１００の実施形態のブロック図である。いくつかの実施形態において、プロセッサは、（例えば、多くの場合、デスクトップ、ラップトップ、又は他のコンピュータに用いられる種類の）汎用プロセッサであってよい。代替的に、プロセッサは、専用プロセッサであってよい。適した専用プロセッサの複数の例としては、複数のグラフィックスプロセッサ、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、コプロセッサ、エンベデッドプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、コントローラ（例えば、マイクロコントローラ）を含むが、これらに限定されない。プロセッサは、様々な複合命令セットコンピューティング（ＣＩＳＣ）プロセッサ、様々な縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、様々な超長命令語（ＶＬＩＷ）プロセッサ、これらの様々なハイブリッド、又は他の種類のプロセッサのうちの何れかであり得る。
【０００９】
オペレーションの間、プロセッサ１００は、３ソース浮動小数点加算命令１０２の実施形態を受信し得る。例えば、３ソース浮動小数点加算命令は、命令フェッチユニット、命令キュー、又は同様のものから受信され得る。３ソース浮動小数点加算命令は、マクロ命令、アセンブリ言語命令、機械コード命令、若しくは、プロセッサの命令セットの命令又は制御信号を表し得る。
【００１０】
いくつかの実施形態において、３ソース浮動小数点加算命令は、少なくとも第１の浮動小数点データ要素を含む第１のソースオペランド１１２を明示的に指定してよく（例えば、１つ又は複数のフィールド又はビットの一のセットを通じて）、あるいは示してよく（例えば、暗黙的に示してよく、エミュレーションレジスタマッピングを通じてそのレジスタにマッピングされてよい、など）、少なくとも第２の浮動小数点データ要素を含む第２のソースオペランド１１４を指定してよく、あるいは示してよく、少なくとも第３の浮動小数点データ要素を含む第３のソースオペランド１１６を指定してよく、あるいは示してよく、結果１１８が格納されるべきデスティネーションオペランド（例えば、デスティネーション記憶位置）を指定してよく、あるいは示してよい。
【００１１】
再び図１を参照すると、プロセッサは、復号ユニット又はデコーダ１０４を備える。復号ユニットは、３ソース浮動小数点加算命令１０２を受信して復号し得る。復号ユニットは、１つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリーポイント、復号された命令又は制御信号、若しくは３ソース浮動小数点加算命令を反映し、表し、及び／又はそこから派生された他の比較的下位命令又は制御信号を出力し得る。当該１つ又は複数の下位命令又は制御信号は、１つ又は複数の下位レベル（例えば、回路レベル又はハードウェアレベル）のオペレーションを通じて、上位レベルの３ソース浮動小数点加算命令を実行し得る。いくつかの実施形態において、復号ユニットは、命令を受信する１つ又は複数の入力構造（例えば、ポート、相互接続、インターフェースなど）と、入力構造に結合され、命令を受信し、認識し、１つ又は複数の対応する下位命令又は制御信号に復号する命令認識及び復号ロジックと、命令認識及び復号ロジックに結合され、１つ又は複数の対応する下位命令又は制御信号を出力する１つ又は複数の出力構造（例えば、ポート、相互接続、インターフェースなど）とを含んでよい。復号ユニットは、複数のマイクロコードリードオンリメモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、及び当技術分野において既知の他の機構を含む様々な異なる機構を用いて実装され得るが、これらに限定されない。
【００１２】
いくつかの実施形態において、復号ユニットに直接提供される３ソース浮動小数点加算命令の代わりに、命令エミュレータ、トランスレータ、モルファ、インタープリタ、又は他の命令変換モジュールが選択的に用いられ得る。様々な異なる種類の命令変換モジュールは、当技術分野において既知であり、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせに実装され得る。いくつかの実施形態において、命令変換モジュールは、例えば、別個のダイ上及び／又はメモリになど、命令処理プロセッサの外部に配置され得る（例えば、静的、動的、又はランタイム命令エミュレーションモジュールとして）。例として、命令変換モジュールは、第１の命令セットに属し得る３ソース浮動小数点加算命令を受信してよく、３ソース浮動小数点加算命令をエミュレートし、トランスレートし、モーフィングし、解釈してよく、あるいは第２の異なる命令セットに属し得る１つ又は複数の対応する又は派生された中間命令又は制御信号に変換してよい。第２の命令セットの１つ又は複数の中間命令又は制御信号は、復号ユニットに提供されてよく、復号ユニットは、受信された、第２の命令セットの１つ又は複数の命令又は制御信号を、プロセッサのネイティブなハードウェア（例えば、１つ又は複数の実行ユニット）により実行可能な１つ又は複数の下位命令又は制御信号に復号し得る。
【００１３】
プロセッサはまた、レジスタ１１０のセットを備える。複数のレジスタのそれぞれは、浮動小数点データを格納するよう動作可能なオンダイの記憶位置を表し得る。例として、複数のレジスタは、複数の浮動小数点データ要素を格納するよう動作可能な浮動小数点レジスタ、複数のパックド又はスカラ浮動小数点データ要素を格納するよう動作可能なパックドデータレジスタ、又は同様のものであり得る。複数のレジスタは、ソフトウェア及び／又はプログラマに可視のアーキテクチャ的又はアーキテクチャ的に可視で、及び／又は、プロセッサの命令セットの複数の命令により示されて複数のオペランドを識別するレジスタであるレジスタ（例えば、アーキテクチャレジスタファイル）を表し得る。これらのアーキテクチャレジスタは、所与のマイクロアーキテクチャにおける他の非アーキテクチャ的、又は非アーキテクチャ的に可視のレジスタ（例えば、一時レジスタ、リオーダバッファ、リタイアメントレジスタなど）とは対照的である。レジスタは、周知技術を用いて異なるマイクロアーキテクチャに異なる態様で実装されてよく、いかなる特定の種類の回路にも限定されない。適した種類のレジスタの複数の例は、複数の専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられる物理レジスタ、及びこれらの組み合わせを含むが、これらに限定されない。
【００１４】
いくつかの実施形態において、第１のソースオペランド１１２は、そのセットの第１レジスタに選択的に格納されてよく、第２のソースオペランド１１４は、そのセットの第２のレジスタに選択的に格納されてよく、第３のソースオペランド１１６は、そのセットの第３レジスタに選択的に格納されてよく、デスティネーションオペランドは、そのセットの第４レジスタに選択的に格納されてよい。いくつかの場合において、デスティネーションオペランドに用いられるレジスタは、第１、第２、第３のソースオペランドに用いられる複数のレジスタと異なってよい。他の場合において、複数のソースオペランドのうちの１つに用いられるレジスタは、デスティネーションオペランドのために再利用されてよい（例えば、その結果は、複数のソースオペランドのうちの１つに書き込まれ得る）。代替的に、複数のメモリ位置又は他の記憶位置は、これらのオペランドのうちの１つ又は複数に選択的に用いられてよい。
【００１５】
再び図１を参照すると、実行ユニット１０６は、復号ユニット１０４とレジスタ１１０のセットとに結合される。いくつかの実施形態において、以下においてさらに説明されるように、実行ユニットはまた、選択的なパックドデータオペレーションマスクレジスタ１２０及び／又は選択的なパックドデータオペレーションマスク１２２に結合され得るが、このことは必須ではない。実行ユニットは、３ソース浮動小数点加算命令を表し、及び／又はそこから派生された、１つ又は複数の復号された、あるいは変換された命令又は制御信号を受信し得る。実行ユニットはまた、少なくとも第１の浮動小数点データ要素を含む第１のソースオペランド１１２と、少なくとも第２の浮動小数点データ要素を含む第２のソースオペランド１１４と、少なくとも第３の浮動小数点データ要素を含む第３のソースオペランド１１６とを受信し得る。実行ユニットは、３ソース浮動小数点加算命令に応じて、及び／又はその結果として（例えば、直接又は間接的に（例えば、エミュレーションを通じて）命令から復号された１つ又は複数の命令又は制御信号に応じて）、命令により示されるデスティネーションオペランドに結果１１８を格納するよう動作可能である。いくつかの実施形態において、結果は、少なくとも第１、第２、及び第３の浮動小数点データ要素に対応する結果浮動小数点データ要素を含み得る。いくつかの実施形態において、結果浮動小数点データ要素は、少なくとも第１の浮動小数点の丸められた和を含み得る。第１の浮動小数点の丸められた和は、浮動小数点数であり、適切な場合に浮動小数点の丸めを用いて丸められている。いくつかの実施形態において、第１の浮動小数点の丸められた和は、第２の浮動小数点の丸められた和と第３の浮動小数点データ要素との相加的組み合わせを表し得る。いくつかの実施形態において、第２の浮動小数点の丸められた和は、第１の浮動小数点データ要素と第２の浮動小数点データ要素との相加的組み合わせを表し得る。いくつかの実施形態において、結果は、図３から６のうちの何れかに対して示されて説明されるもののうちの何れかであってよいが、本願発明の範囲はそのように限定されない。
【００１６】
明確にするために、本明細書に用いられているように、第１の値と第２の値との「相加的組み合わせ」という用語は、第１及び第２の値のどちらもネゲートされないこと、若しくは何れか又は両方がネゲートされることを可能にする合計を指すのに用いられる。例えば、第２の浮動小数点の丸められた和と第３の浮動小数点データ要素との相加的組み合わせは、第２の浮動小数点の丸められた和に第３の浮動小数点データ要素が加算された合計、又は、第３の浮動小数点データ要素のネゲーションに第２の浮動小数点の丸められた和が加算された合計を含み得る。同様に、第１及び第２の浮動小数点データ要素の相加的組み合わせは、第２の浮動小数点データ要素に第１の浮動小数点データ要素が加算された合計、第２の浮動小数点データ要素のネゲーションに第１の浮動小数点データ要素が加算された合計、第２の浮動小数点データ要素のネゲーションに第１の浮動小数点データ要素のネゲーションが加算された合計、又は、第２の浮動小数点データ要素に第１の浮動小数点データ要素のネゲーションが加算された合計を含み得る。以下にてさらに説明されるように、全てではないが、いくつかの実施形態は、データ要素のうちの任意の１つ、２つ、又は全てを加算の前に選択的にネゲートされることを選択的に可能にし得るが、このことは必須ではない（例えば、別の実施形態ではそのようなネゲーションの機能を可能にしない）。
【００１７】
有利には、３ソース浮動小数点加算命令は、単一の命令（例えば、マクロ命令、命令セットの命令、など）の実行の制限範囲内に２つの加算を実行し得る。従来、２つの異なる命令が必要とされていた。１つの命令で両方の加算を実行する能力は、一定の性能及び／又は電力に対する利点を提供する傾向があり得る。ひとつには、両方の加算は、２つの別個の命令を復号することの代わりに、単一の命令を復号することを通じて実行され得る。これは、別の命令のための復号スロットを空けることによって命令復号スループットを増加させるのに役に立ち得る。これは、１つ少ない命令が復号されて２つの加算を遂行するので、電力消費量を低減させることにも役に立ち得る。２つ目の加算を実行するために、アーキテクチャレジスタへの２つの加算のうちの１つの中間合計の書き込みと、アーキテクチャレジスタからの中間合計の後続の読み取りとを回避することによって、複数の性能向上がまた、達成され得る。そのようなアーキテクチャレジスタへの書き込み及びそれからの読み取りは、概して、追加の時間又は待ち時間を（例えば、２〜３のクロックサイクルのオーダで）招く。これはまた、アーキテクチャレジスタを拘束することを回避することに役に立ち得て、レジスタリネーミングオペレーションの数を低減させることの助けになり得る。複数の読み取り、書き込み、及びレジスタリネーミングオペレーションを取り除くことはまた、電力消費を低減させるのに役に立ち得る。特定のプロセッサにとって、電力消費を低減させること自体が、特定のプロセッサ（例えば、特に高性能コンピューティング用に用いられるもの）が、利用可能な電力消費外枠により制限されるようになる性能を有する傾向があり得るので、向上した性能に繋がり得る。従って、電力消費を低減させることはまた、向上した性能に繋がり得る。
【００１８】
浮動小数点の丸めは、浮動小数点オペレーション（例えば、浮動小数点加算）の正確な結果が仮数部にある桁より多くの桁を必要とする場合に用いられ得る。いくつかの実施形態において、結果は、単一の浮動小数点の丸めオペレーションの代わりに、２つの異なる浮動小数点の丸めオペレーションを反映し得る。具体的に、第１の最初の浮動小数点の丸めオペレーションが、第１の丸められた和を生成すべく、第１及び第２の浮動小数点データ要素に関連する合計のために実行されてよく、次に、第２の後続の浮動小数点の丸めオペレーションが、第３の浮動小数点データ要素と第１の丸められた和との合計のために実行されてよい。以下にてさらに説明されるように、これらの２つの浮動小数点の丸めオペレーションは、命令のマイクロアーキテクチャ上の実装を反映し得る。例えば、いくつかの実施形態において、命令を実装するのに用いられるマイクロアーキテクチャでは、３つの浮動小数点値の同時加算ができないロジックを用い得る。一例として、以下にてさらに説明されるように、２つの浮動小数点加算器は、直列に用いられてよく、それぞれが２つの浮動小数点値のみの同時加算を実行する。
【００１９】
例えば、第１の加算器において、２つの浮動小数点値の合計が実行されてよく、次に、第１の浮動小数点の丸めオペレーションが、その合計に対して、実行されてよく、次に、第２の加算器において、第３の浮動小数点値と丸められた和との合計が実行されてよく、次に、第２の丸めオペレーションが第２の加算器の合計出力に対して実行されてよい。
【００２０】
別の例として、以下にてさらに説明されるように、単一の浮動小数点加算器が再循環で用いられてよく、各サイクルの間又は当該加算器を通るパスの間に、２つの浮動小数点値のみの同時加算が実行され得る。例えば、１つのパスにおいて、２つの浮動小数点値の合計が実行されてよく、次に、第１の浮動小数点の丸めオペレーションが、その合計に対して実行されてよく、次に２つ目のパスにおいて、第３の浮動小数点値と１つ目のパスからの丸められた和との合計が実行されてよく、次に、第２の丸めオペレーションが、２つ目のパスにおける加算器の出力に対して実行されてよい。以下にてさらに説明されるように、そのようなマイクロアーキテクチャ上の実装には、例えば、３つの浮動小数点値の同時加算を実行するための専用及び／又は一般的に大型又は複合ロジックを含む必要性を回避することなど、複数の利点がある。２つの浮動小数点の丸めオペレーションに関連する複数の結果は、単一の丸めオペレーションが実行された場合と僅かに異なってよく、そのようなマイクロアーキテクチャ上の実装を反映し得る。
【００２１】
いくつかの実施形態において、同じ種類の丸めオペレーション又は丸めモードは、丸めの両方の発生のために用いられ得る。異なる種類の丸めオペレーション又は丸めモードは、様々な実施形態に適する。適した丸めモードの複数の例は、（１）最近接偶数への丸め、（２）負の無限大への丸め、（３）正の無限大への丸め、及び（４）切り捨てによるゼロへの丸めを含むが、これらに限定されない。
【００２２】
いくつかの実施形態において、３ソース浮動小数点加算命令は、命令自体の中の組み込み丸めモード制御に対するサポートを有してよいが、これは必須ではない。従来、丸めモード制御は、概して、浮動小数点制御及びステータスレジスタ（例えば、ＭＸＣＳＲ）に指定される。いくつかの命令は、複数の符号化フィールドを介して、即値オペランド内に命令毎の丸めオーバーライドを提供することができる。いくつかの実施形態において、命令毎の丸めモードオーバーライド制御は、命令の符号化によって及び即値から提供され得る。例として、いくつかの実施形態において、丸めモード制御は、静的又は命令毎の丸めモードオーバーライド制御として、プレフィックス（例えば、ＥＶＥＸプレフィックス）に組み込まれ得る。これは、プログラマに、浮動小数点制御及びステータスレジスタ（例えば、ＭＸＣＳＲ）に丸めモードをオーバーライドし得る特定の丸めモードを静的に適用することをさせ得る。いくつかの実施形態において、全ての浮動小数点例外の報告の抑制は、そのような丸めモード制御が命令符号化を通じて提供された場合、選択的に示唆され得る。
【００２３】
全ての浮動小数点例外の報告の抑制は、任意の特定のマスクビットが、浮動小数点制御及びステータスレジスタ（例えば、ＭＸＣＳＲ）において対応する浮動小数点例外の報告を抑制するか抑制しないかと関係なく、又はそれに関わらず、発生し得る。これらの浮動小数点例外の報告の抑制は、そのような浮動小数点例外が発生したとき、浮動小数点制御及びステータスレジスタ（例えば、ＭＸＣＳＲ）のビット又はフラグが更新されない場合があることを意味し得る（例えば、それらは報告されない場合がある）。
【００２４】
再び図１を参照すると、実行ユニット１０６及び／又はプロセッサ１００は、３ソース浮動小数点加算命令を実行し、及び／又は、３ソース浮動小数点加算命令に応じて結果を及び／又はその結果として（例えば、３ソース浮動小数点加算命令から復号された、あるいは派生された１つ又は複数の命令又は制御信号に応じて）格納するよう動作可能な具体的又は特定のロジック（例えば、複数のトランジスタ、集積回路、又はファームウェア（例えば、不揮発性メモリに格納された複数の命令）と潜在的に組み合わせられた他のハードウェア、及び／又はソフトウェア）を含み得る。実行ユニットは、浮動小数点加算ロジック１０８を含み得る。例として、実行ユニット及び／又は浮動小数点加算ロジックは、浮動小数点加算器、浮動小数点融合積和演算器（ＦＭＡ）、浮動小数点算術ユニット、浮動小数点算術ロジックユニット、又は同様のものを含んでよい。いくつかの実施形態において、実行ユニットは、複数のソースオペランドを受信する１つ又は複数の入力構造（例えば、ポート、相互接続、インターフェースなど）、入力構造に結合され、複数のソースオペランドを受信及び処理して結果を生成する浮動小数点加算回路又はロジック、及び浮動小数点加算回路又はロジックに結合され、結果を出力する１つ又は複数の出力構造（例えば、ポート、相互接続、インターフェースなど）を含んでよい。いくつかの実施形態において、実行ユニットは、図７から９のうちの何れか１つ又は複数に対して示され説明される回路又はロジックを含んでよく、それらは、適したマイクロアーキテクチャ上の配列の図示的な例であるが、本願発明の範囲はそのように限定されない。
【００２５】
説明を曖昧にすることを回避するために、比較的シンプルなプロセッサ１００が示されており、説明されている。他の複数の実施形態において、プロセッサは、複数の他の周知プロセッサ構成要素を選択的に含み得る。そのようなコンポーネントの複数の可能な例は、命令フェッチユニット、命令及びデータキャッシュ、第２又は上位レベルのキャッシュ、アウトオブオーダ実行ロジック、命令スケジューリングユニット、レジスタリネーミングユニット、リタイアメントユニット、バスインタフェースユニット、命令及びデータトランスレーションルックアサイドバッファ、プリフェッチバッファ、マイクロ命令キュー、マイクロ命令シーケンサ、プロセッサに含まれる他の構成要素、及びこれらの様々な組み合わせを含むが、これらに限定されない。そのようなコンポーネントの多数の異なる組み合わせ及び構成は適したものである。複数の実施形態は任意の既知の組み合わせ又は構成に限定されない。
【００２６】
さらに、複数の実施形態は、複数のコアを有する複数のプロセッサ、複数の論理プロセッサ、又は複数実行エンジンに含まれてよく、それらのうちの少なくとも１つは、３ソース浮動小数点加算命令の実施形態を実行する復号ユニット及び実行ユニットを有する。
【００２７】
図２は、３ソース浮動小数点加算命令の実施形態を実行する方法２２５の実施形態のブロックフロー図である。様々な実施形態において、方法は、プロセッサ、命令処理装置、又は他のデジタルロジックデバイスにより実行され得る。いくつかの実施形態において、図２のオペレーション及び／又は方法は、図１のプロセッサにより及び／又はその中で実行され得る。本明細書にて説明されている、図１のプロセッサに関する複数の構成要素、特徴、及び特定の選択的な詳細はまた、図２のオペレーション及び／又は方法に選択的に適用される。代替的に、図２のオペレーション及び／又は方法は、同様の又は異なるプロセッサ又は装置により及び／又はその中で実行され得る。さらに、図１のプロセッサは、図２のオペレーション及び／又は方法と同じ、同様の、又は異なるものを実行し得る。
【００２８】
ブロック２２６では、方法は、３ソース浮動小数点加算命令を受信する段階を備える。様々な態様において、命令は、プロセッサ、命令処理装置、又はこれらの一部（例えば、命令フェッチユニット、復号ユニット、バスインタフェースユニットなど）において受信され得る。様々な態様において、命令は、オフダイソースから（例えば、メモリ、相互接続などから）、又はオンダイソースから（例えば、命令キャッシュ、命令キューなどから）、受信され得る。３ソース浮動小数点加算命令は、少なくとも第１の浮動小数点データ要素を含む第１のソースオペランドを指定してよく、あるいは示してよく、少なくとも第２の浮動小数点データ要素を含む第２のソースオペランドを指定してよく、あるいは示してよく、少なくとも第３の浮動小数点データ要素を含む第３のソースオペランドを指定してよく、あるいは示してよい。
【００２９】
ブロック２２７では、結果が、３ソース浮動小数点加算命令に応じて、及び／又は、３ソース浮動小数点加算命令の結果として、デスティネーションオペランドに格納される。デスティネーションオペランドは、３ソース浮動小数点加算命令により指定されてよく、あるいは示されてよい。代表的に、実行ユニット、命令処理装置、又はプロセッサが命令を実行してその結果を格納し得る。結果は、少なくとも第１、第２、及び第３の浮動小数点データ要素に対応する結果浮動小数点データ要素を含み得る。結果浮動小数点データ要素は、第１の浮動小数点の丸められた和を含み得る。いくつかの実施形態において、第１の浮動小数点の丸められた和は、第２の浮動小数点の丸められた和と第３の浮動小数点データ要素との相加的組み合わせを表し得る。いくつかの実施形態において、第２の浮動小数点の丸められた和は、第１の浮動小数点データ要素と第２の浮動小数点データ要素との相加的組み合わせを表し得る。
【００３０】
いくつかの実施形態において、結果は、図３から６のうちの何れかに対して示され説明されるもののうちの何れかであってよいが、本願発明の範囲はそのように限定されない。
【００３１】
図示される方法は、複数のアーキテクチャ的オペレーション（例えば、ソフトウェアの観点から可視のもの）に関連する。他の複数の実施形態において、方法は、１つ又は複数のマイクロアーキテクチャ上のオペレーションを選択的に含み得る。例として、命令は、フェッチされ復号されてよく、複数のソースオペランドは、アクセスされてよく、実行ユニットは、命令を実行するよう複数のマイクロアーキテクチャ上のオペレーションを実行してよい、等など。いくつかの実施形態において、命令を実行する複数のマイクロアーキテクチャ上のオペレーションは、図３から６又は７から９のうちの何れかに対して示され説明されるもののうちの何れかを選択的に含み得る。例えば、いくつかの実施形態において、第２の浮動小数点の丸められた和は、第１の浮動小数点加算器から第２の浮動小数点加算器に選択的に提供され得る。別の例として、いくつかの実施形態において、第２の浮動小数点の丸められた和は、浮動小数点加算器の出力部からその浮動小数点加算器の入力部に選択的に再循環され得る。
【００３２】
図３は、パックド３ソース浮動小数点選択的マスク加算命令の実施形態に応じて実行され得るパックド３ソース浮動小数点選択的マスク加算オペレーション３３０の実施形態を示すブロック図である。命令は、第１のソースパックドデータオペランド３１２、第２のソースパックドデータオペランド３１４、及び第３のソースパックドデータオペランド３１６を指定（例えば、明示的に指定）してよく、あるいは示し（例えば、暗黙的に示し）てよい。第１のソースパックドデータオペランドは、第１の複数のパックド浮動小数点データ要素Ａ１−ＡＮを有し得る。
【００３３】
第２のソースパックドデータオペランドは、第２の複数のパックド浮動小数点データ要素Ｂ１−ＢＮを有し得る。第３のソースパックドデータオペランドは、第３の複数のパックド浮動小数点データ要素Ｃ１−ＣＮを有し得る。
【００３４】
第１のソースパックドデータオペランドにおける各データ要素は、第２のソースパックドデータオペランドにおける異なるデータ要素に対応してよく、その複数のオペランド内の対応する相対位置において、第３のソースパックドデータオペランドにおける異なるデータ要素に対応してよい。例えば、Ａ１、Ｂ１、及びＣ１は、互いに対応してよく、ＡＮ、ＢＮ、及びＣＮは、互いに対応してよい、等など。
【００３５】
一般に、各ソースパックドデータオペランドにおける浮動小数点データ要素の数は、各浮動小数点データ要素のビットのサイズにより分割されたソースパックドデータオペランドのビットのサイズに等しいものであってよい。様々な実施形態において、ソースパックドデータオペランドのそれぞれの幅は、６４ビット、１２８ビット、２５６ビット、５１２ビット、又は１０２４ビットであってよいが、本願発明の範囲はそのように限定されない。様々な実施形態において、各浮動小数点データ要素は、１６ビットの半精度浮動小数点データ要素、３２ビットの単精度浮動小数点データ要素、６４ビットの倍精度浮動小数点データ要素、８０ビットの拡張倍精度形式、又は１２８ビットの４倍精度浮動小数点形式であってよい。
【００３６】
いくつかの実施形態において、３２ビットの単精度又は６４ビットの倍精度形式は、これらの現在普及した使用によりサポートされ得る。他のパックドデータオペランドサイズ及びデータ要素幅も適する。様々な実施形態において、各ソースパックドデータオペランドには、少なくとも２つ、少なくとも４つ、少なくとも８つ、又は８つより多くの浮動小数点データ要素があってよい。
【００３７】
再び図３を参照すると、示されるように、いくつかの実施形態において、命令はまた、ソースパックドデータオペレーションマスク３２２を選択的に指定してよく、あるいは示してよいが、これは必須ではない。パックドデータオペレーションマスクはまた、本明細書において単にオペレーションマスク、プレディケートマスク、又はマスクとして称され得る。ソースパックドデータオペレーションマスクは、複数のマスク要素Ｍ１−ＭＮを有し得る。各マスク要素は、ソースデータ要素及び／又はそのオペランド内の対応する相対位置における結果データ要素に対応し得る。例えば、Ｍ１はＡ１、Ｂ１、及びＣ１に対応し得る。
【００３８】
ソースパックドデータオペレーションマスクは、対応するパックドデータオペレーションが実行されるか否か及び／又は対応する結果が格納されるか否かをプレディケート、条件付きで制御、又はマスクするのに用いられ得るマスクオペランド、プレディケートオペランド、又は条件付き制御オペランドを表し得る。いくつかの実施形態において、マスキング又はプレディケートは、データ要素粒度毎にされてよく、これにより、対応する３データ要素の複数の異なるセットに対する複数のオペレーションが、別個に及び／又は他のものから独立に、プレディケートされ得る、又は条件付きで制御され得る。マスクは、複数のマスク要素、プレディケート要素、又は条件付き制御要素を含み得る。１つの態様において、マスク要素は、３ソースデータ要素の複数の対応するセット及び／又は複数の対応する結果データ要素とワンツーワンに対応して含まれ得る。示されているように、いくつかの実施形態において、各マスク要素は、単一のマスクビットであってよい。そのような場合、マスクは、第１のソースパックドデータオペランドの各データ要素用のビット及び／又は結果パックドデータ３１８の各結果データ要素用のビットを有し得る。各マスクビットの値は、対応するパックドデータオペレーションが実行されるか否か、及び／又は対応する結果データ要素が格納されるか否かを制御し得る。各マスクビットは、オペレーションが３ソースデータ要素の対応するセットに対して実行されることを可能にし、対応する結果データ要素が結果パックドデータに格納されることを可能にする第１の値を有してよく、又は、オペレーションが３ソースデータ要素の対応するセットに対して実行されることをさせず、及び／又は、対応する結果データ要素が結果パックドデータに格納されることをさせない第２の異なる値を有してよい。１つの可能な従来方式によれば、図示に示されているように、２進数のゼロ（すなわち、０）にクリアされたマスクビットが、マスクオペレーションを表してよく、そのオペレーションの結果の代わりに、マスクされた値が対応する結果データ要素に格納される。対照的に、２進数の１（すなわち、１）に設定されたマスクビットが、マスクされていないオペレーションを表してよく、そのオペレーションの結果が対応する結果データ要素に格納され得る。他の複数の実施形態において、その反対の従来方式が用いられてよく、又は、２つ以上のビットが、各マスク要素用に選択的に用いられてよい（例えば、各マスク要素は、各対応するソースデータ要素と同じビット数を有してよく、１つ又は複数の最上位又は最下位ビットがプレディケートのために用いられてよい）。
【００３９】
オペレーション３３０の実施形態は、命令の実施形態に応じて及び／又はその結果として実行され得る。パックドデータオペレーションマスク３２２が選択的に用いられる複数の実施形態において、オペレーションは、その選択的なソースパックドデータオペレーションマスクのマスキング、プレディケート、又は条件付き制御を対象にして実行され得る。結果パックドデータ３１８が命令に応じて、（例えば、実行ユニットにより）生成され、デスティネーション記憶位置に格納され得る。デスティネーション記憶位置は、命令により指定されてよく、あるいは示されてよい。様々な実施形態において、デスティネーション記憶位置は、パックドデータレジスタ、メモリ位置、又は他の記憶位置であってよい。結果パックドデータは、それぞれが３ソースデータ要素の異なるセットに対応し、異なる対応するマスク要素に対応する複数のデータ要素を含んでよい。
【００４０】
選択的なパックドデータオペレーションマスクが用いられる複数の実施形態において、マスクされていないマスク要素に対応する結果データ要素は、３ソース浮動小数点データ要素の対応するセットに対して実行されるオペレーションに依存する複数の値を有し得る。図示された例において、最右の結果データ要素がマスクされていないオペレーションに対応し、第１、第２、及び第３のソースパックドデータオペランドから、３ソース浮動小数点データ要素の対応するセットに対して実行された対応するパックドデータオペレーションに依存する値を格納する。具体的に、いくつかの実施形態において、最右の結果浮動小数点データ要素は、第１の浮動小数点の丸められた和（例えば、ＲＮＤ１（Ｃ１＋ＲＮＤ２（Ａ１＋Ｂ１）））を格納し得る。第１の浮動小数点の丸められた和は、第２の浮動小数点の丸められた和（例えば、ＲＮＤ２（Ａ１＋Ｂ１））と第３の浮動小数点データ要素（例えば、Ｃ１）との相加的組み合わせを表し得る。第２の浮動小数点の丸められた和（例えば、ＲＮＤ２（Ａ１＋Ｂ１））は、第１の浮動小数点データ要素（例えば、Ａ１）と第２の浮動小数点データ要素（例えば、Ｂ１）との相加的組み合わせを表し得る。当該複数の相加的組み合わせは、複数のソースデータ要素（例えば、Ａ１、Ｂ１、及び／又はＣ１のうちの何れか１つ又は複数）が選択的に又は潜在的にネゲートされることを可能にする。この例において、ＲＮＤ１及びＲＮＤ２は、別個で連続して採用された２つの浮動小数点の丸めオペレーションを指定するのに用いられる（例えば、ＲＮＤ２はＲＮＤ１の前に実行される）。
【００４１】
対照的に、選択的なパックドデータオペレーションマスク３２２が用いられる複数の実施形態において、マスクマスク要素に対応する結果データ要素は、ソースデータ要素の対応するペアに対して実行されたオペレーションに依存しない複数の値を有し得る。むしろ、これらの結果データ要素は、マスクされた値（例えば、固定された又は予め定められた値）を有し得る。例えば、対応するオペレーションが実行される必要がなく、又は対応するオペレーションが実行された場合、次に、対応する結果は、結果パックドデータに格納される必要がない、の何れかである。むしろ、マスクされた値（例えば、固定された又は予め定められた値）は、対応する結果データ要素に格納され得る。
【００４２】
図示された例において、第Ｎのマスク要素ＭＮは、マスクされた値（例えば、この場合、２進数のゼロ）を有する。結果として、対応する最左の結果データ要素は、マスクされた値を有する。その特定のマスクされた値は、特定の実装のために用いられるマスキングの種類に依存し得る。いくつかの実施形態において、ゼロ書き込みマスキングが用いられ得る。ゼロ書き込みマスキングにおいて、マスク結果データ要素は、ゼロを書き込まれ得る（例えば、ゼロの値を有するよう強制され得る）。他の複数の実施形態において、併合マスキングが用いられ得る。併合マスキングにおいて、複数のマスク結果データ要素は、複数の対応するソースデータ要素のうちの１つの値を有し得る（例えば、対応するソースデータ要素は、通過してマスク結果データ要素に渡され得る）。例えば、最左の結果データ要素は、ＡＮ、ＢＮ、又はＣＮのうちの１つの値を有し得る。他の複数の実施形態において、他の結果データ要素は、マスクされてよく、又はマスクされていなくてよい。
【００４３】
図４は、スカラ３ソース浮動小数点選択的マスク加算命令の実施形態に応じて実行され得るスカラ３ソース浮動小数点選択的マスク加算オペレーション４３２の実施形態を示すブロック図である。図４のスカラオペレーションは、図３のパックドオペレーションとは一定の類似点を有する。説明を曖昧にすることを回避するために、図３のパックドオペレーションに関する全ての選択的に同様の又は共通の特性及び詳細を繰り返さずに、図４のスカラオペレーションに関する異なる及び／又はさらなる特性は主に説明される。しかし、各オペランドに複数のデータ要素があることに関する態様を除き、前に説明された図３のパックドオペレーションの特性及び詳細はまた、別段の記載がない限り、又は明確に明白な場合を除き、図４のスカラオペレーションに選択的に適用され得ることが理解されるべきである。
【００４４】
命令は、第１のソースオペランド４１２、第２のソースオペランド４１４、及び第３のソースオペランド４１６を指定（例えば、明示的に指定）してよく、あるいは示し（例えば、暗黙的に示し）てよい。第１のソースオペランドは、第１の浮動小数点データ要素Ａを有し得る。第２のソースオペランドは、第２の浮動小数点データ要素Ｂを有し得る。第３のソースオペランドは、第３の浮動小数点データ要素Ｃを有し得る。
【００４５】
データ要素Ａ、Ｂ、及びＣは、互いに対応し得る。上で言及された図３に関する浮動小数点データ要素の前に言及された種類は適したものである。
【００４６】
いくつかの実施形態において、データ要素Ａ、Ｂ、及びＣは、複数のスカラ形式でそれぞれのパックドデータレジスタに格納され得る。パックドデータレジスタは、浮動小数点データ要素Ａ、Ｂ、及びＣより広いビット幅を有し得る。例えば、様々な実施形態において、パックドデータレジスタのそれぞれの幅は、６４ビット、１２８ビット、２５６ビット、５１２ビット、又は１０２４ビットであってよいが、本願発明の範囲はそのように限定されない。１つ特定の例において、１２８ビットのパックドデータレジスタは、用いられてよいが、これは必須ではない。パックドデータレジスタは、スカラ浮動小数点データ要素Ａ、Ｂ、及びＣに加えてパックドデータを格納することができてよい。
【００４７】
再び図４を参照すると、示されているように、いくつかの実施形態において、命令はまた、ソースオペレーションマスク４２２を選択的に指定してよく、あるいは示されてよいが、これは必須ではない。ソースオペレーションマスクは、マスク要素Ｍを有し得る。マスク要素Ｍは、ソースデータ要素Ａ、Ｂ、及びＣに対応し得る。マスク要素Ｍはまた、結果４１８の同じ相対位置における結果データ要素に対応し得る。ソースオペレーションマスクは、複数のものの代わりに単一のマスク要素があることを主に除き、図３のソースパックドデータオペレーションマスクに対して前に説明されたものと同様の属性及び変形を有し得る。この例示的な実施形態において、マスク要素は、マスクされていない（例えば、Ｍ＝１）。いくつかの実施形態において、ソースオペレーションマスクは、たとえ対応するスカラ要素が単一のセットのみ存在するとしても、用いられ得る。
【００４８】
オペレーション４３２の実施形態は、命令の実施形態に応じて及び／又はその結果として実行され得る。オペレーションマスク４２２が選択的に用いられる複数の実施形態において、オペレーションは、選択的なソースオペレーションマスクのマスキング、プレディケート、又は条件付き制御を対象にして実行され得る。結果４１８が命令に応じて、（例えば、実行ユニットにより）生成され、デスティネーション記憶位置に格納され得る。デスティネーション記憶位置は、命令により指定されてよく、あるいは示されてよい。様々な実施形態において、デスティネーション記憶位置は、レジスタ、メモリ位置、又は他の記憶位置であってよい。結果は、ソース浮動小数点データ要素Ａ、Ｂ，及びＣ、並びにマスク要素Ｍに対応する結果浮動小数点データ要素を含んでよい。
【００４９】
図示された例において、マスク要素がマスクされていない（例えば、Ｍ＝１）ので、結果データ要素は、ソース浮動小数点データ要素Ａ、Ｂ、及びＣの対応するセットに対して実行されたオペレーションに依存する値を格納する。具体的に、いくつかの実施形態において、結果浮動小数点データ要素は、第１の浮動小数点の丸められた和（例えば、ＲＮＤ１（Ｃ＋ＲＮＤ２（Ａ＋Ｂ））を格納し得る。第１の浮動小数点の丸められた和は、第２の浮動小数点の丸められた和（例えば、ＲＮＤ２（Ａ＋Ｂ））と、第３の浮動小数点データ要素（例えば、Ｃ）との相加的組み合わせを表し得る。第２の浮動小数点の丸められた和（例えば、ＲＮＤ２（Ａ＋Ｂ））は、第１の浮動小数点データ要素（例えば、Ａ）と第２の浮動小数点データ要素（例えば、Ｂ）との相加的組み合わせを表し得る。相加的組み合わせは、Ａ、Ｂ、及びＣのうちの何れか１つ又は複数を選択的に又は潜在的にネゲートされることを可能にする。ＲＮＤ１及びＲＮＤ２は、別個で連続して採用された２つの浮動小数点の丸めオペレーションを指定するのに用いられる。
【００５０】
代替的な例において、マスク要素がマスクされた場合（例えば、Ｍ＝０の場合）、結果データ要素は、代わりにマスクされた値（例えば、固定された又は予め定められた値）を格納し得る。図３に対して言及された、前に説明されたマスクされた値は、適したものである（例えば、ゼロ書き込みマスキングの場合における０、又は、併合マスキングの場合におけるＡ、Ｂ、又はＣの何れかである）。
【００５１】
図５は、パックド３ソース浮動小数点選択的マスク選択的ネゲーション制御加算命令の実施形態に応じて実行され得るパックド３ソース浮動小数点選択的マスク選択的ネゲーション制御加算オペレーション５３４の実施形態を示すブロック図である。図５の選択的ネゲーション制御オペレーションは、図３のオペレーションと一定の類似点を有する。説明を曖昧にすることを回避するために、図３のオペレーションに対する全ての選択的に同様の又は共通の特性及び詳細を繰り返さずに、図５の選択的ネゲーション制御オペレーションに関する異なる及び／又はさらなる特性は、主に説明される。しかし、別段の記載がない限り、あるいは明確に明白な場合を除き、前に説明された図３のオペレーションの特性及び詳細はまた、図５の選択的ネゲーション制御オペレーションに選択的に適用し得ることが理解されるべきである。
【００５２】
命令は、浮動小数点データ要素Ａ１−ＡＮを含む第１のソースパックドデータオペランド５１２、浮動小数点データ要素Ｂ１−ＢＮを含む第２のソースパックドデータオペランド５１４、及び浮動小数点データ要素Ｃ１−ＣＮを含む第３のソースパックドデータオペランド５１６を指定してよく、あるいは示してよい。複数のソースパックドデータオペランド及びデータ要素は、前に説明されたような（例えば、図３に関する）複数の特徴及び変更例を有し得る。
【００５３】
いくつかの実施形態において、命令はまた、ソースパックドデータオペレーションマスク５２２を選択的に指定してよく、あるいは示してよいが、これは必須ではない。ソースパックドデータオペレーションマスクは、マスク要素Ｍ１−ＭＮを有し得る。ソースパックドデータオペレーションマスク及びマスク要素は、前に説明されたような（例えば、図３に関する）複数の特徴及び変更例を有し得る。図示された例において、マスク要素Ｍ１及びＭＮは、両方ともマスクされていない（例えば、Ｍ１＝１及びＭＮ＝１）。
【００５４】
いくつかの実施形態において、命令は、１つ又は複数のビットのネゲーション制御を選択的に有し得るが、これは必須ではない。
【００５５】
１つ又は複数のビットのネゲーション制御は、ソフトウェア及び／又はプログラマが、ソースオペランドのうちの何れか１つ又は複数、若しくは全てのネゲーションを制御することを可能にし得る。いくつかの実施形態において、命令は、第１のソースオペランドのパックド浮動小数点データ要素の全て（例えば、Ａ１−ＡＮ）がネゲートされるか否かを指定すべく、第１のソースオペランド５１２に対応する１つ又は複数のビットの第１のセット５３６を有し得る。いくつかの実施形態において、命令はまた、若しくは代替的に、第２のソースオペランドのパックド浮動小数点データ要素の全て（例えば、Ｂ１−ＢＮ）がネゲートされるか否かを指定すべく、第２のソースオペランド５１４に対応する１つ又は複数のビットの第２のセット５３８を有し得る。いくつかの実施形態において、命令はまた、若しくは代替的に、第３のソースオペランドのパックド浮動小数点データ要素の全て（例えば、Ｃ１−ＣＮ）がネゲートされるか否かを指定すべく、第３のソースオペランド５１６に対応する１つ又は複数のビットの第３のセット５４０を有し得る。
【００５６】
いくつかの実施形態において、単一のビットが各々のソースパックドデータオペランドに対応してよく、そのソースパックドデータオペランドのためのネゲーション制御を提供するのに用いられてよい。１つの可能な従来方式によれば、ネゲーション制御の各単一のビットは、対応するソースパックドデータの全てのデータ要素がネゲートされることを指定すべく、２進数の１（すなわち、１）に設定されてよく、又は、その代わりに、対応するソースパックドデータオペランドの全てのデータ要素がネゲートされないことを指定すべく、２進数のゼロ（すなわち、０）にクリアされてよい。例えば、第１のビット５３６は、第１のソースオペランドの全てのデータ要素（例えば、Ａ１−ＡＮ）がネゲートされることを指定するよう設定されてよく、又は、それらがネゲートされないことを示すようクリアされてよい。同様に、第２のビット５３８は、第２のソースオペランドの全てのデータ要素（例えば、Ｂ１−ＢＮ）がネゲートされることを指定するよう設定されてよく、又は、それらがネゲートされないことを示すようクリアされてよい。同様に、第３のビット５４０は、第３のソースオペランドの全てのデータ要素（例えば、Ｃ１−ＣＮ）がネゲートされることを指定するよう設定されてよく、又は、それらがネゲートされないことを示すようクリアされてよい。
【００５７】
いくつかの実施形態において、第１、第２、及び第３のソースパックドデータのうちの何れかに対するネゲーション制御に対応し、それを提供し得るネゲーション制御の１つ又は複数のビットの単一のセットがあってよい。他の複数の実施形態において、第１、第２、及び第３のソースパックドデータのうちの任意の２つに対するネゲーション制御に対応し、それを提供し得るネゲーション制御の１つ又は複数のビットの２つのセットがあってよい。代替的に、第１、第２、及び第３のソースパックドデータのうちの３つの全てに対するネゲーション制御に対応し、それを提供し得るネゲーション制御の１つ又は複数のビットの３つのセットがあってよい。
【００５８】
いくつかの実施形態において、ネゲーション制御のビットは、命令の即値５４２により選択的に提供され得る。例えば、１つ特定の例示的な実施形態において、８ビットの即値が選択的に用いられてよく、第１のソースパックドデータに対応する単一のビット５３６は、ビットｉｍｍ８［０］により提供されてよく、第２のソースパックドデータに対応する単一のビット５３８は、ビットｉｍｍ８［１］により提供されてよく、第３のソースパックドデータに対応する単一のビット５４０は、ビットｉｍｍ８［２］により提供されてよい。
【００５９】
他の複数の実施形態において、例えば、２ビットの即値、４ビットの即値、６ビットの即値などのような他のサイズの即値が選択的に用いられてよい。他の複数の実施形態において、そのような即値の他のビットは、選択的に用いられてよく、及び／又は、異なる態様でソースパックドデータと一致し得る。別のオプションとして、即値を用いることの代わりに、ネゲーション制御ビットは、そうでなければ、命令により提供され得る（例えば、オペコードの一部として、命令の別のフィールドとして、など）。
【００６０】
再び図５を参照すると、図示された例において、ネゲーション制御の単一のビットは、ソースパックドデータのそれぞれに対応するのに用いられる。さらに、ビットは、ネゲーションを指定するよう設定され、又は、ネゲーションを指定しないようクリアされる。図示された例において、第１のソースパックドデータに対応するビットはクリアされ、第３のソースパックドデータに対応するビットはクリアされる。従って、第１のソースパックドデータのデータ要素（例えば、Ａ１−ＡＮ）及び第３のソースパックドデータのデータ要素（例えば、Ｃ１−ＣＮ）はネゲートされないであろう。対照的に、第２のソースパックドデータに対応するビットは設定され、そのため第２のソースパックドデータのデータ要素（例えば、Ｂ１−ＢＮ）はネゲートされるであろう。
【００６１】
オペレーション５３４の実施形態は、命令の実施形態に応じて及び／又はその結果として実行され得る。結果パックドデータ５１８が命令に応じて、（例えば、実行ユニットにより）生成され、デスティネーション記憶位置に格納され得る。結果パックドデータは、複数の結果データ要素を含み得る。図示された例示的な実施形態において、最右の結果浮動小数点データ要素は、第１の浮動小数点の丸められた和（例えば、ＲＮＤ１（Ｃ１＋ＲＮＤ２（Ａ１＋（−Ｂ１））））を格納してよく、最左の結果浮動小数点データ要素は、第Ｎの浮動小数点の丸められた和（例えば、ＲＮＤ１（ＣＮ＋ＲＮＤ２（ＡＮ＋（−ＢＮ））））を格納してよい。
【００６２】
データ要素Ｂ１からＢＮは、第２のビット５３８により提供された丸め制御に基づいてネゲートされることに留意されたい。第１及び第Ｎの浮動小数点の丸められた和はそれぞれ、別のそれぞれの浮動小数点の丸められた和（例えば、ＲＮＤ２（Ａ１＋（−Ｂ１））又はＲＮＤ２（ＡＮ＋（−ＢＮ）））と、第３のソースパックドデータからの対応する浮動小数点データ要素（例えば、Ｃ１又はＣＮ）との相加的組み合わせを表し得る。当該複数の相加的組み合わせは、ソースデータ要素、この場合はＢ１−ＢＮが、選択的に又は潜在的にネゲートされることを可能にする。
【００６３】
有利に、命令の、ネゲーション制御を指定する能力は、命令の柔軟性を増加させるよう（例えば、１つ又は複数のソースが引かれることを可能にすることにより）選択的に用いられ得る。代替的に、ネゲーションは、（例えば、１つ又は複数の他の命令により）パックド３ソース浮動小数点加算命令の実行の制限範囲外において選択的に実行され得る。
【００６４】
表１は、ＶＡＤＤ３ＰＤと称されるパックド３ソース倍精度浮動小数点マスクネゲーション制御加算命令の特定の例示的な実施形態の説明を提供する。いくつかの実施形態において、命令は、ＶＡＤＤ３ＰＤ  ｚｍｍｌ  ｛ｋ１｝｛ｚ｝，ｚｍｍ２，ｚｍｍ３／ｍ５１２，ｉｍｍ８｛ｅｒ｝という形式を有し得る。いくつかの実施形態において、命令は、ＥＶＥＸ．Ｕ１．ＮＤＳ．５１２．Ｆ３．０Ｆ３Ａ．Ｗ１  ６８／ｒ／ｉｓ４として、ＥＶＥＸに符号化され得る。表１  ＶＡＤＤ３ＰＤ
【表１】
0006371855.tif 000002
【００６５】
以下に列挙されるのがＶＡＤＤ３ＰＤ命令の擬似コードである。ＤＥＳＴが第１のソースオペランド及びデスティネーションオペランドである。ＳＲＣ２が第２のソースオペランドである。ＳＲＣ３が第３のソースオペランドである。ＶＬがビットでのベクトル長であり、この場合は５１２ビットである。ＫＬがビットでのマスク長であり、この場合は８ビットである。ＥＶＥＸ．ｂビットは、組み込み丸め制御及び例外の抑制のために用いられる。ｋｌがソースオペレーションマスクである。ＩＭＭ８が８ビットの即値である。「ｉ」及び「ｊ」はカウンタ（ｃｏｕｎｔｅｒ）である。他の複数の実施形態において、複数のレジスタは、メモリ又は他の記憶位置により置換されてよい。ＶＡＤＤ３ＰＤ  ＤＥＳＴ，ＳＲＣ２，ＳＲＣ３（ＫＬ，ＶＬ）＝（８，５１２） ＩＦ（ＶＬ＝＝５１２）ＡＮＤ（ＥＶＥＸ．ｂ＝＝１）ＡＮＤ  ＳＲＣ３＊ｉｓ  ａ  ｒｅｇｉｓｔｅｒ＊ ＴＨＥＮ  ＳＥＴ＿ＲＭ（ＥＶＥＸ．ＲＣ）； ＥＬＳＥ  ＳＥＴ＿ＲＭ（ＭＸＣＳＲ）．ＲＭ）； ＦＩ； ＦＯＲ  ｊ←０  ＴＯ  ＫＬ−１ ｉ←ｊ＊６４ ＩＦｋｌ［ｊ］ＯＲ＊ｎｏ  ｗｒｉｔｅｍａｓｋ＊ ＴＨＥＮ  ＤＥＳＴ［ｉ＋６３：ｉ］← ＴＭＰ＿ＳＲＣ２［６３：０］＝（ＩＭＭ８［０］）？−ＳＲＣ２［ｉ＋６３：ｉ］：ＳＲＣ２［ｉ＋６３：ｉ］ ＴＭＰ＿ＳＲＣ３［６３：０］＝（ＩＭＭ８［１］）？−ＳＲＣ３［ｉ＋６３：ｉ］：ＳＲＣ３［ｉ＋６３：ｉ］ ＴＭＰ＿ＤＥＳＴ［６３：０］＝（ＩＭＭ８［２］）？−ＤＥＳＴ［ｉ＋６３：ｉ］：ＤＥＳＴ［ｉ＋６３：ｉ］ ＲｏｕｎｄＦＰＣｏｎｔｒｏｌ（ ＲｏｕｎｄＦＰＣｏｎｔｒｏｌ（ＴＭＰ＿ＳＲＣ２［６３：０］＋ＴＭＰ＿ＳＲＣ３［６３：０］） ＋ＴＭＰ＿ＤＥＳＴ［６３：０］） ＥＬＳＥ ＩＦ＊ｍｅｒｇｉｎｇ−ｍａｓｋｉｎｇ＊；ｍｅｒｇｉｎｇ−ｍａｓｋｉｎｇ ＴＨＥＮ＊ＤＥＳＴ［ｉ＋６３：ｉ］ｒｅｍａｉｎｓ  ｕｎｃｈａｎｇｅｄ＊ ＥＬＳＥ；ｚｅｒｏｉｎｇ−ｍａｓｋｉｎｇ ＤＥＳＴ［ｉ＋６３：ｉ］←０ ＦＩＦＩ； ＥＮＤＦＯＲＤＥＳＴ［ＭＡＸ＿ＶＬ−１：ＶＬ］←０ 
【００６６】
表２は、ＶＡＤＤ３ＰＳと称されるパックド３ソース単精度浮動小数点マスクネゲーション制御加算命令の特定の例示的な実施形態の説明を提供する。表２  ＶＡＤＤ３ＰＳ
【表２】
0006371855.tif 000003
【００６７】
ＶＡＤＤ３ＰＳ命令の擬似コードは、６４ビットの代わりに、３２ビットのデータ要素が用いられ、幅が２倍のオペレーションマスクが用いられることを除き、上に列挙されたＶＡＤＤ３ＰＤ命令の擬似コードと類似する。他の複数の実施形態において、複数のレジスタは、メモリ又は他の記憶位置により置換されてよい。
【００６８】
これらは単に、複数の命令の複数の適した実施形態の複数の図示的な例である。他の複数の実施形態は、より狭いかより広いソースパックドデータオペランドのどちらかを用いてよく、及び／又は異なるサイズの浮動小数点データ要素を用いてよい。他の複数の実施形態は、マスキング／プレディケートを用いなくてよい。他の複数の実施形態は、ネゲーション制御を用いなくてよい。他の複数の実施形態は、複数のソース及び／又はデスティネーションオペランドを別に指定してよく又は示してよい。
【００６９】
図６は、スカラ３ソース浮動小数点選択的マスク選択的ネゲーション制御加算命令の実施形態に応じて実行され得るスカラ３ソース浮動小数点選択的マスク選択的ネゲーション制御加算オペレーション６４４の実施形態を示すブロック図である。図６のスカラ選択的ネゲーション制御オペレーションは、図４のスカラオペレーションとは一定の類似点を有するが、図５のパックドオペレーションと同様の選択的なネゲーション制御を組み込む。説明を曖昧にすることを回避するために、図４から５のオペレーションに関する全ての選択的に同様の又は共通の特性及び詳細を繰り返さずに、図６の簡潔な説明が提供される。しかし、別段の記載がない限り、あるいは明確に明白な場合を除き、前に説明された図４のスカラオペレーションの特性及び詳細並びに図５のオペレーションの選択的なネゲーション制御の態様はまた、図６のオペレーションに選択的に適用することが理解されるべきである。
【００７０】
図４のスカラオペレーションと同様に、命令は、データ要素Ａを含む第１のソースオペランド６１２、データ要素Ｂを含む第２のソースオペランド６１４、及びデータ要素Ｃを含む第３のソースオペランド６１６を指定してよく、あるいは示してよい。複数のソースオペランド及びデータ要素は、前に説明されたような（例えば、図４に関する）複数の特徴及び変更例を有してよい。
【００７１】
いくつかの実施形態において、命令はまた、ソースオペレーションマスク６２２を選択的に指定してよく、あるいは示してよいが、これは必須ではない。ソースオペレーションマスク及びマスク要素は、前に説明されたような（例えば、図４に関する）複数の特徴及び変更例を有してよい。図示された例において、マスク要素Ｍはマスクされていない（例えば、Ｍ＝１）。
【００７２】
いくつかの実施形態において、命令は、ネゲーション制御の１つ又は複数のビットを選択的に有してよいが、これは必須ではない。例えば、図示された実施形態において、命令は、第１のビット６３６と、第２のビット６３８と、第３のビット６４０とを有するが、本願発明の範囲はそのように限定されない。これらのビットは、即値６４２に選択的においてよいが、本願発明の範囲はそのように限定されない。他の複数の実施形態において、命令は、ネゲーション制御がこのスカラ実施形態におけるソースオペレーションの単一のスカラデータ要素に適用されることを除き、前に説明された図５のオペレーションに関する複数の特徴、特性、及び変形例のうちの何れかを有するネゲーション制御を有してよい。図示された例示的な実施形態において、第１のビット６３６は、データ要素Ａのネゲーションを制御するよう設定され、第２のビット６３８は、データ要素Ｂのネゲーションがないことを制御するようクリアされ、第３のビット６４０は、データ要素Ｃのネゲーションを制御するよう設定される。
【００７３】
結果的に、この例において、結果は、単一の結果データ要素として、第１の浮動小数点の丸められた和（例えば、ＲＮＤ１（（−Ｃ）＋ＲＮＤ２（（−Ａ）＋Ｂ）））を格納し得る。複数の特定のソースオペランドが図示の目的にのみネゲートされることと、他の複数の実施形態において、複数のソースオペランドは別にネゲートされてよく又はネゲートされなくてよいこととが理解されるべきである。
【００７４】
表３は、ＶＡＤＤ３ＳＤと称されるスカラ３ソース倍精度浮動小数点マスクネゲーション制御加算命令の特定の例示的な実施形態の説明を提供する。
【００７５】
いくつかの実施形態において、命令はＶＡＤＤ３ＳＤ  ｘｍｍｌ｛ｋｌ｝｛ｚ｝，ｘｍｍ２，ｘｍｍ３／ｍ６４，ｉｍｍ８｛ｅｒ｝という形式を有し得る。
【００７６】
いくつかの実施形態において、命令は、ＥＶＥＸ．Ｕ１．ＮＤＳ．１２８．Ｆ３．０Ｆ３Ａ．Ｗ１  ６９／ｒ／ｉｓ４として、ＥＶＥＸに符号化され得る。表３  ＶＡＤＤ３ＳＤ 
【表３】
0006371855.tif 000004
【００７７】
以下に列挙されるのがＶＡＤＤ３ＳＤ命令の擬似コードである。ＤＥＳＴが第１のソースオペランド及びデスティネーションオペランドである。ＳＲＣ２が第２のソースオペランドである。ＳＲＣ３が第３のソースオペランドである。ＥＶＥＸ．ｂビットは、組み込み丸め制御及び例外の抑制のために用いられる。ｋ１は、ソースオペレーションマスクである。ＩＭＭ８は８ビットの即値である。他の複数の実施形態において、複数のレジスタは、メモリ又は他の記憶位置により置換されてよい。ＶＡＤＤ３ＳＤ  ＤＥＳＴ，ＳＲＣ２，ＳＲＣ３ ＩＦ（ＥＶＥＸ．ｂ＝＝１）ＡＮＤ  ＳＲＣ３＊ｉｓ  ａ  ｒｅｇｉｓｔｅｒ＊ ＴＨＥＮ  ＳＥＴ＿ＲＭ（ＥＶＥＸ．ＲＣ）； ＥＬＳＥ  ＳＥＴ＿ＲＭ（ＭＸＣＳＲ．ＲＭ）； ＦＩ； ＩＦ  ｋｌ［０］ＯＲ＊ｎｏ  ｗｒｉｔｅｍａｓｋ＊ ＴＨＥＮ  ＤＥＳＴ［６３：０］← ＴＭＰ＿ＳＲＣ２［６３：０］＝（ＩＭＭ８［０］）？−ＳＲＣ２［６３：０］：ＳＲＣ２［６３：０］ ＴＭＰ＿ＳＲＣ３［６３：０］＝（ＩＭＭ８［１］）？−ＳＲＣ３［６３：０］：ＳＲＣ３［６３：０］ ＴＭＰ＿ＤＥＳＴ［６３：０］＝（ＩＭＭ８［２］）？−ＤＥＳＴ［６３：０］：ＤＥＳＴ［６３：０］ ＲｏｕｎｄＦＰＣｏｎｔｒｏｌ（ ＲｏｕｎｄＦＰＣｏｎｔｒｏｌ（ＴＭＰ＿ＳＲＣ２［６３：０］＋ＴＭＰ＿ＳＲＣ３［６３：０］） ＋ＴＭＰ＿ＤＥＳＴ［６３：０］） ＥＬＳＥＩＦ＊ｍｅｒｇｉｎｇ−ｍａｓｋｉｎｇ＊；ｍｅｒｇｉｎｇ−ｍａｓｋｉｎｇ ＴＨＥＮ＊ＤＥＳＴ［６３：０］  ｒｅｍａｉｎｓ  ｕｎｃｈａｎｇｅｄ＊ ＥＬＳＥ；ｚｅｒｏｉｎｇ−ｍａｓｋｉｎｇ ＤＥＳＴ［６３：０］←０ ＦＩＦＩ； ＤＥＳＴ［１２７：６４］−ＳＲＣ１［１２７：６４］ ＤＥＳＴ［ＭＡＸ＿ＶＬ−１：１２８］←０ 
【００７８】
表４は、ＶＡＤＤ３ＳＳと称されるスカラ３ソース単精度浮動小数点マスクネゲーション制御加算命令の特定の例示的な実施形態の説明を提供する。表４  ＶＡＤＤ３ＳＳ
【表４】
0006371855.tif 000005
【００７９】
ＶＡＤＤ３ＳＳ命令の擬似コードは、６４ビットの代わりに３２ビットのデータ要素が用いられることを除き、上に列挙されたＶＡＤＤ３ＳＤ命令の擬似コードと同様である。他の複数の実施形態において、複数のレジスタは、メモリ又は他の記憶位置により置換されてよい。
【００８０】
これらは単に、複数の命令の複数の適した実施形態の複数の図示的な例である。他の複数の実施形態は、異なるサイズの浮動小数点データ要素を用いてよい。他の複数の実施形態は、マスキング／プレディケートを用いなくてよい。他の複数の実施形態は、ネゲーション制御を用いなくてよい。他の複数の実施形態は、複数のソース及び／又はデスティネーションオペランドを別に指定してよく、又は示してよい。
【００８１】
図７は、３ソース浮動小数点オペランドを加算する３ソース浮動小数点加算器７０７の実施形態のブロック図である。この実施形態において、３ソース浮動小数点加算器は、第１のソース浮動小数点オペランド７１２、第２のソース浮動小数点オペランド７１４、及び第３のソース浮動小数点オペランド７１６を同時に受信して加算し、潜在的に丸められた結果７５０を生成することができる。加算器は、３ソースオペランドを同時に受信する入力部を有し、それらを、通常１つの同時加算オペレーションにおいて加算することができる。そのような複数の実施形態において、中間の丸め及び正規化オペレーションは通常、必要とされず、実行されない。しかし、そのような３ソース浮動小数点加算器の１つ潜在的な欠点が、それらは多くの場合、比較的により複雑な設計を有する傾向があり、多くの場合、より大型となる傾向があり、多くの場合、比較的により多くの電力を消費する傾向があり、そして、多くの場合、より特化される傾向があることである。
【００８２】
多くのプロセッサは、それぞれが同時に２つのソース浮動小数点オペランドを共に加算できる１つ又は複数の２ソース浮動小数点加算器を既に有し、又は容易に有し得るが、それらは同時に３ソース浮動小数点オペランドを共に加算することができない。
【００８３】
そのような加算器の複数の例は、通常の浮動小数点加算器、複数の融合積和演算器、及び同様のものを含む。いくつかの実施形態において、そのような既存の２ソース浮動小数点加算器は、図７のものなどの特化した３ソース浮動小数点加算器を含む必要性を回避すべく、本明細書に開示される３ソース浮動小数点加算命令／オペレーションを実行するのに用いられ得る。
【００８４】
図８は、３ソース浮動小数点オペランドを加算する、共に直列に結合される２ソース浮動小数点加算器８０８Ａ、８０８Ｂのペアの実施形態のブロック図である。例として、加算器は、浮動小数点加算器、浮動小数点融合積和演算器、又は同様のものを含んでよい。第１の２ソースオペランド浮動小数点加算器８０８Ａは、第１の浮動小数点オペランド８１２と第２の浮動小数点オペランド８１４とを受信するべく結合される入力部を有する。第１の２ソースオペランド浮動小数点加算器はまた、３ソース浮動小数点加算命令に対応する及び／又はそこから派生された制御信号８０２を受信すべく結合される複数の入力部を有する。例えば、制御信号は、予約ステーション（図示せず）から受信され得る。いくつかの実施形態において、制御信号、又はそれの選択的に簡略化されたバージョンはまた、選択的なバッファ８５４に選択的に提供されてよい。第１の２ソースオペランド浮動小数点加算器は、第１及び第２のオペランドに関連する第１の丸められた和８５２を生成するべく、第１及び第２の浮動小数点オペランドを加算することができる。第１の丸められた和は、浮動小数点の丸めモードに従って適切な場合に丸められる。第１の２ソースオペランド浮動小数点加算器は、第１の丸められた和を提供する出力部を有する。第２の２ソース浮動小数点加算器８０８Ｂは、第１の丸められた和を受信するべく、第１の加算器の出力部に結合される入力部を有する。第２の２ソース浮動小数点加算器はまた、第３の浮動小数点オペランド８１６を受信するべく結合される入力部を有する。第２の２ソース浮動小数点加算器はまた、制御信号８０２を受信するべく、バッファ８５４の出力部に結合される入力部又はそれの簡略化したバージョンを有する。制御信号は、第１の丸められた和が第１の加算器により生成される期間において、バッファに格納されてよく、次に、制御信号は第１の丸められた和と共に第２の加算器に提供され得る。第２の２ソースオペランド浮動小数点加算器は、全ての３ソース浮動小数点オペランドに関連する第２の丸められた和８１８を生成するべく、第３の浮動小数点オペランド及び第１の丸められた和を加算することができる。第２の２ソースオペランド浮動小数点加算器は、第２の丸められた和を提供する出力部を有する。有利に、この実施形態において、３ソース浮動小数点オペランドは、３ソース浮動小数点加算器を含むことを必要とせずに、共に加算されてよく、このことは、設計の複雑さ、寸法、及び／又は電力消費を低減するのに役に立ち得る。
【００８５】
図９は、加算器の出力部を加算器の入力部に結合させる再循環経路９５６を有する２ソース浮動小数点加算器９０８の実施形態のブロック図である。例として、加算器は、浮動小数点加算器、浮動小数点融合積和演算器、又は同様のものを含んでよい。２ソースオペランド浮動小数点加算器は、第１の浮動小数点オペランド９１２及び第２の浮動小数点オペランド９１４を受信するべく結合される第１及び第２の入力部を有する。２ソースオペランド浮動小数点加算器はまた、３ソース浮動小数点加算命令に対応する及び／又はそこから派生される制御信号９０２を受信するべく結合される入力部を有する。例えば、制御信号は、予約ステーション（図示せず）から受信され得る。２ソースオペランド浮動小数点加算器は、第１及び第２のソースオペランドに関連する第１の丸められた和９５２を生成するべく、第１及び第２の浮動小数点オペランドを加算することができる。第１の丸められた和は、浮動小数点の丸めモードに従って適切な場合に丸められる。２ソースオペランド浮動小数点加算器は、再循環経路９５６に結合される出力部を有する。再循環経路は、加算器の出力部からの第１の丸められた和を、その加算器の入力部と結合させる又は通信させ得る。再循環経路は、加算器の出力部からの第１の丸められた和をその加算器の入力部に戻して結合させるべく、例えば、回線、ワイヤ、相互接続、導電性パス、又は同様のものなどの回路を含んでよい。２ソース浮動小数点加算器はまた、第３の浮動小数点オペランド９１６を受信するべく結合される入力部を有する。２ソース浮動小数点加算器はまた、制御信号９０２を受信するべく、バッファ９５４の出力部に結合される入力部を有する。制御信号は、第１の丸められた和が加算器により生成される期間においてバッファに格納されてよく、次に、制御信号は第１の丸められた和と第３のソースオペランドと共に加算器に提供され得る。２ソースオペランド浮動小数点加算器は、全ての３ソース浮動小数点オペランドに関連する第２の丸められた和９１８を生成するべく、第３の浮動小数点オペランド及び第１の丸められた和を加算することができる。同じ２ソース浮動小数点加算器が連続の浮動小数点加算オペレーションの両方に用いられることに留意されたい。２ソースオペランド浮動小数点加算器は、第２の丸められた和９１８を提供する出力部を有する。有利に、この実施形態において、３ソース浮動小数点オペランドは、３ソース浮動小数点加算器を含むことを必要とせずに、共に加算されてよく、このことは、設計の複雑さ、寸法、及び／又は電力消費を低減させるのに役に立ち得る。
【００８６】
図１０は、３ソース浮動小数点加算命令に適した命令フォーマット１００２の実施形態のブロック図である。命令フォーマットは、オペレーションコード又はオペコード１０６０を含む。オペコードは、実行されるべき命令及び／又はオペレーション（例えば、３ソース浮動小数点加算）を識別するよう動作可能な複数のビット若しくは１つ又は複数のフィールドを表し得る。
【００８７】
命令フォーマットはまた、第１のソースオペランドを指定する第１のソース指定子１０６１と、第２のソースオペランドを指定する第２のソース指定子１０６２と、第３のソースオペランドを指定する第３のソース指定子１０６３と、結果が格納され得るデスティネーションオペランドを指定するデスティネーション指定子１０６４とを選択的に含む。例として、これらの指定子のそれぞれは、関連オペランドのレジスタのアドレス、メモリ位置、又は他の記憶位置を明示的に指定する複数のビット若しくは１つ又は複数のフィールドを含み得る。代替的に、別の実施形態において、１つ又は複数の指定子は、明示的に指定されるよりも、命令に選択的に暗黙的であり得る。例えば、いくつかの実施形態において、デスティネーション指定子の代わりに、複数のソースオペランドの１つに用いられた同じ記憶位置が、デスティネーションオペランドとして選択的に暗黙的に用いられてよい。例として、ソース／デスティネーションレジスタは、最初にソースデータを有してよく、その後、そのソースデータは、結果で上書きされてよい。代替的に、別の実施形態において、明示的な指定子のうちの何れか１つ又は複数は、暗黙的なオペランドにより置換され得る。
【００８８】
いくつかの実施形態において、命令フォーマットは、オペレーションマスクを明示的に指定する選択的なオペレーションマスク指定子１０６５を含んでよい（例えば、マスクレジスタ）。代替的に、パックドデータオペレーションマスクは、暗黙的に示され得る。いくつかの実施形態において、命令フォーマットはまた、マスキングオペレーションの種類を指定する、選択的なマスキングオペレーション種類指定子１０６６を含み得る。例として、マスキングオペレーション種類指定子は、併合マスキング又はゼロ書き込みマスキングが実行されるか否かを指定する単一のビットを含んでよい。代替的に、マスキングオペレーションの種類は、暗黙的に示されてよいか（例えば、オペコードにより）、あるいは指定されてよい（例えば、制御レジスタにおいて）。他の複数の実施形態は、マスキングを実行しなくてよく、マスク指定子又はマスキング種類指定子を必要としなくてよい。
【００８９】
いくつかの実施形態において、命令フォーマットは、本明細書に開示される複数のオペレーションに用いられる浮動小数点の丸めモードを指定する選択的な浮動小数点の丸めモード指定子１０６７を含んでよい。いくつかの実施形態において、浮動小数点の丸めモードは、浮動小数点制御レジスタにおいてモードをオーバーライドし得る。本明細書にて言及される様々な丸めモードのうちの何れか、又は当技術分野における他の知られている丸めモードは適したものである。浮動小数点の丸めモード指定子は、選択的で必須ではない。いくつかの実施形態において、丸めモード指定子は、全ての浮動小数点例外を抑制することを暗示し得るが、これは必須ではない。
【００９０】
いくつかの実施形態において、命令フォーマットは、ネゲーション制御を指定する選択的なネゲーション制御指定子１０６８を含んでよい。いくつかの実施形態において、ネゲーション制御指定子は、即値のビットを含んでよい。代替的に、命令符号化の他の部分のビットは用いられ得る。ネゲーション制御指定子は、選択的で必須ではない。
【００９１】
これは単に１つの図示的な例であることが理解されるべきである。代替的な実施形態は、指定子のサブセットを含んでよく、追加の複数の指定子又はフィールドを追加してよく、一定の複数の指定子又はフィールドを重複してよい、等など。加えて、複数のフィールドの図示されている順序／配列は必須ではないが、むしろ、複数のフィールドは、再配置され、重複されてよく、複数のフィールドは、連続した一連のビットを含む必要がないが、むしろ、非連続又は別個のビットを含んでよい、等など。いくつかの実施形態において、命令フォーマットは、ＶＥＸ又はＥＶＥＸ符号化を有してよく、又は、命令フォーマットは、本明細書の他の箇所にて説明される特徴を有してよいが、本願発明の範囲はそのように限定されない。いくつかの実施形態において、ＥＶＥＸ符号化において、第３のソースオペランドは、ｒｅｇ＿ｆｉｅｌｄに符号化されてよく、第１のソースオペランドは、ＶＥＸ．ｖｖｖｖに符号化されてよく、第２のソースオペランドは、８ビットの即値の一部及びｒｍ＿ｆｉｅｌｄのうちの１つを用いて符号化されてよいが、本願発明の範囲はそのように限定されない。ＥＶＥＸ符号化の場合、静的な丸めモード制御及び示唆された全ての例外の抑制は、命令のレジスタ形式でレジスタに対してＥＶＥＸ．ｂビットを１に設定することにより、命令の符号化において有効となり得る。
【００９２】
図１１は、複数のパックドデータレジスタ１１１０の適した一のセットの例示的な実施形態のブロック図である。複数のパックドデータレジスタは、ＺＭＭ０からＺＭＭ３１と標識される３２個の５１２ビットのパックドデータレジスタを含む。図示された実施形態において、下位１６個のレジスタ、すなわち、ＺＭＭ０−ＺＭＭ１５、の下位順の２５６ビットは、ＹＭＭ０−ＹＭＭ１５と標識される２５６ビットのパックドデータレジスタのそれぞれにエイリアスされる又はオーバーレイされるが、このことは必須ではない。同様に、図示された実施形態において、レジスタＹＭＭ０−ＹＭＭ１５の下位順の１２８ビットは、ＸＭＭ０−ＸＭＭ１５と標識される１２８ビットのパックドデータレジスタのそれぞれにエイリアスされる又はオーバーレイされるが、このことも必須ではない。５１２ビットのレジスタＺＭＭ０からＺＭＭ３１は、５１２ビットのパックドデータ、２５６ビットのパックドデータ、又は１２８ビットのパックドデータを保持するよう動作可能である。２５６ビットのレジスタＹＭＭ０−ＹＭＭ１５は、２５６ビットのパックドデータ又は１２８ビットのパックドデータを保持するよう動作可能である。１２８ビットのレジスタＸＭＭ０−ＸＭＭ１５は、１２８ビットのパックドデータを保持するよう動作可能である。いくつかの実施形態において、レジスタのそれぞれは、パックド浮動小数点データ又はパックド整数データの何れかを格納するのに用いられ得る。異なるデータ要素のサイズは、少なくとも８ビットバイトデータ、１６ビットワードデータ、３２ビットダブルワード、３２ビット単精度浮動小数点データ、６４ビットクワッドワード、及び６４ビット倍精度浮動小数点データを含んでサポートされる。代替的な実施形態において、異なる数のレジスタ及び／又は異なるサイズのレジスタが用いられ得る。さらに他の複数の実施形態において、複数のレジスタは、より小さいレジスタに対してより大きいレジスタのエリアシングを用いてよく又は用いなくてよく、及び／又は、浮動小数点データを格納するのに用いられてよく、又は用いられなくてよい。
【００９３】
図１２は、パックドデータオペレーションマスクビット数がパックドデータ幅及びパックドデータ要素幅に依存することを図示する表１２７０である。１２８ビット、２５６ビット、及び５１２ビットのパックドデータ幅が示されているが、他の幅も可能である。１６ビットの半精度、３２ビットの単精度、及び６４ビットの倍精度浮動小数点形式のパックドデータ要素幅が示されているが、他の幅も可能である。一例として、パックドデータ幅が１２８ビットである場合、４ビット（例えば、レジスタの最下位順の４ビット）が、パックドデータ要素幅が３２ビットである場合、マスキングするのに用いられ得る。
【００９４】
図１３は、オペレーションマスクレジスタ１３２０の適したセットの例示的な実施形態のブロック図である。パックドデータオペレーションマスクレジスタのそれぞれは、パックドデータオペレーションマスクを格納するのに用いられ得る。図示された実施形態において、そのセットは、ｋ０からｋ７と標識される８つのレジスタを含む。代替的な実施形態は、８つのレジスタより少なく含んでよく（例えば、２つ、４つ、６つなど）、あるいは８つのレジスタより多く含んでよい（例えば、１６個、３２個など）。図示された実施形態において、レジスタのそれぞれが６４ビットである。代替的な実施形態において、レジスタの幅は、６４ビットより広くてよく（例えば、８０ビット、１２８ビットなど）、あるいは６４ビットより狭くてよい（例えば、８ビット、１６ビット、３２ビットなど）。複数のレジスタは、周知技術を用いて異なる態様で実装されてよく、任意の既知の特定の種類の回路に限定されない。複数の適したレジスタの複数の例は、専用物理レジスタと、レジスタリネーミングを用いる動的に割り当てられた物理レジスタと、これらの組み合わせとを含むが、これらに限定されない。
【００９５】
いくつかの実施形態において、パックドデータオペレーションマスクレジスタ１３２０は、アーキテクチャレジスタの別個で専用のセットであってよい。いくつかの実施形態において、複数の命令は、他の種類のレジスタ（例えば、パックドデータレジスタ）を符号化する又は指定するのに用いられるものよりも、命令フォーマットの異なるビット又は１つ又は複数の異なるフィールドにパックドデータオペレーションマスクレジスタを符号化し又は指定してよい。例として、命令は、８つのパックドデータオペレーションマスクレジスタｋ０からｋ７のうちの何れか１つを符号化する又は指定するのに、３ビット（例えば、３ビットのフィールド）を用いてよい。代替的な実施形態において、より少ない又はより多くのパックドデータオペレーションマスクレジスタがある場合、より少ない又はより多くのビットのうちの何れかがそれぞれ用いられてよい。１つ特定の実装において、パックドデータオペレーションマスクレジスタｋ１からｋ７のみ（ただし、ｋ０ではない）が、マスクパックドデータオペレーションをプレディケートするプレディケートオペランドとして、アドレス指定され得る。レジスタｋ０は、通常ソース又はデスティネーションとして用いられてよいが、プレディケートオペランドとして符号化されなくてよい（例えば、ｋ０が指定される場合、それが「マスキングなし」符号化を有する）。しかし、このことは選択的で必須ではない。
【００９６】
命令セットは、１つ又は複数の命令フォーマットを含む。所与の命令フォーマットは、他のものから、実行されるべきオペレーション（オペコード）及びオペレーションがそれに対して実行されるオペランドを指定するべく、様々なフィールド（ビット数、ビットの位置）を定義する。
【００９７】
いくつかの命令フォーマットは、命令テンプレート（又はサブフォーマット）の定義を通じてさらに分解される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するよう定義されてよく（含まれたフィールドは通常、同じ順序にあるが、含まれるフィールドがより少ないので、少なくとも一部は異なるビット位置を有する）、及び／又は、別に解釈された所与のフィールドを有するよう定義されてよい。それにより、ＩＳＡの各命令が、所与の命令フォーマットを用いて（及び、定義された場合、命令フォーマットの命令テンプレートの所与の１つにおいて）表され、オペレーション及び複数のオペランドを指定するための複数のフィールドを含む。例えば、例示的なＡＤＤ命令は、特定のオペコードとオペコードフィールドを含む命令フォーマットとを有することによって、複数のオペランド（ソース１／デスティネーション及びソース２）を選択するそのオペコード及び複数のオペランドフィールドを指定し、命令ストリームにおけるこのＡＤＤ命令の発生は、複数の特定のオペランドを選択する複数のオペランドフィールドにおける具体的な複数のコンテンツを有するであろう。進化型ベクトル拡張（ＡＶＸ）（ＡＶＸ１及びＡＶＸ２）と称され、ベクトル拡張（ＶＥＸ）符号化スキームを用いるＳＩＭＤ拡張のセットがリリースされてより、及び／又は公開されている（例えば、インテル（登録商標）６４及びＩＡ−３２アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、２０１１年１０月参照、及び、インテル（登録商標）進化型ベクトル拡張プログラミング・レファレンス、２０１１年６月参照）。例示的な命令フォーマット
【００９８】
本明細書にて説明される命令の複数の実施形態は、異なるフォーマットで具現化され得る。さらに、複数の例示的なシステム、アーキテクチャ、及びパイプラインは以下に詳述される。命令の複数の実施形態は、そのようなシステム、アーキテクチャ、及びパイプライン上で実行され得るが、詳述されているそれらに限定されない。
汎用ベクトル向け命令フォーマット
【００９９】
ベクトル向け命令フォーマットが、ベクトル命令に適した命令フォーマットである（例えば、ベクトルオペレーションに固有の一定の複数のフィールドがある）。ベクトル及びスカラオペレーションの両方が、ベクトル向け命令フォーマットを通じてサポートされる複数の実施形態が説明されている一方、複数の代替的な実施形態は、ベクトル向け命令フォーマットのベクトルオペレーションのみを用いる。
【０１００】
図１４Ａ−１４Ｂは、本願発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びそれの命令テンプレートを示すブロック図である。図１４Ａは、本願発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びこれらのクラスＡの命令テンプレートを示すブロック図である一方、図１４Ｂは、本願発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びこれらのクラスＢの命令テンプレートを示すブロック図である。具体的に、クラスＡ及びクラスＢの命令テンプレートが定義される汎用ベクトル向け命令フォーマット１４００であり、これらの両方とも、ノーメモリアクセス１４０５の命令テンプレートとメモリアクセス１４２０の命令テンプレートとを含む。ベクトル向け命令フォーマットの文脈における汎用（ｇｅｎｅｒｉｃ）という用語は、いかなる特定の命令セットにも結びついていない命令フォーマットを指す。
【０１０１】
ベクトル向け命令フォーマットが、３２ビット（４バイト）又は６４ビット（８バイト）のデータ要素幅（又はサイズ）を有する６４バイトのベクトルオペランド長（又はサイズ）（それにより、６４バイトのベクトルが１６ダブルワードサイズの要素又は代替的に８クワッドワードサイズの要素の何れかからなる）、１６ビット（２バイト）又は８ビット（１バイト）のデータ要素幅（又はサイズ）を有する６４バイトのベクトルオペランド長（又はサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、又は８ビット（１バイト）のデータ要素幅（又はサイズ）を有する３２バイトのベクトルオペランド長（又はサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、又は８バット（１バイト）のデータ要素幅（又はサイズ）を有する１６バイトのベクトルオペランド長（又はサイズ）をサポートする、本願発明の複数の実施形態が説明される一方、複数の代替的な実施形態は、より多くの、より少ない、又は異なるデータ要素幅（例えば、１２８ビット（１６バイト）のデータ要素幅）を有する、より多くの、より少ない、及び／又は異なるベクトルオペランドサイズ（例えば、２５６バイトのベクトルオペランド）をサポートし得る。
【０１０２】
図１４ＡのクラスＡの命令テンプレートは、１）ノーメモリアクセス１４０５の命令テンプレート内に示されるノーメモリアクセス・フル丸め制御型オペレーション１４１０の命令テンプレート、及びノーメモリアクセス・データ変換型オペレーション１４１５の命令テンプレート、並びに２）メモリアクセス１４２０の命令テンプレート内に示されるメモリアクセス・一時的１４２５の命令テンプレート及びメモリアクセス・非一時的１４３０の命令テンプレートを含む。図１４ＢのクラスＢの命令テンプレートは、１）ノーメモリアクセス１４０５の命令テンプレート内に示されるノーメモリアクセス・書き込みマスク制御・部分的丸め制御型オペレーション１４１２の命令テンプレート及びノーメモリアクセス・書き込みマスク制御・ｖｓｉｚｅ型オペレーション１４１７の命令テンプレート、並びに２）メモリアクセス１４２０の命令テンプレート内に示されるメモリアクセス・書き込みマスク制御１４２７の命令テンプレートを含む。
【０１０３】
汎用ベクトル向け命令フォーマット１４００は、図１４Ａ−１４Ｂに図示されている順序で以下に列挙される複数の以下のフィールドを含む。
【０１０４】
フォーマットフィールド１４４０−このフィールドの特定の値（命令フォーマットの識別子値）がベクトル向け命令フォーマットを一意に識別し、それにより、複数の命令ストリームのベクトル向け命令フォーマットにおいて、複数の命令が発生する。そのように、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットにとっては必須ではないという意味で、選択的である。ベースオペレーションフィールド１４４２−そのコンテンツは、異なるベースオペレーションを区別する。 
【０１０５】
レジスタインデックスフィールド１４４４−そのコンテンツは、直接又はアドレス生成を通じて、ソース及びデスティネーションオペランドがレジスタにあれ、メモリにあれ、それらの位置を指定する。これらは、ＰｘＱ（例えば、３２ｘ５１２、１６ｘ１２８、３２ｘ１０２４、６４ｘ１０２４）のレジスタファイルからＮ個のレジスタを選択するのに十分なビット数を含む。一実施形態においてＮは最大、３つのソース及び１つのデスティネーションレジスタであり得る一方、複数の代替的な実施形態では、より多くの又はより少ないソース及びデスティネーションレジスタをサポートし得る（例えば、これらのソースのうちの１つがデスティネーションとしても動作する最大２つのソースをサポートしてよく、これらのソースのうちの１つがデスティネーションとしても動作する最大３つのソースをサポートしてよく、最大２つのソース及び１つのデスティネーションをサポートしてよい）。
【０１０６】
修飾子フィールド１４４６−そのコンテンツは、メモリアクセスを指定する汎用ベクトル命令フォーマットにおける複数の命令の発生を、指定しないものから、すなわち、ノーメモリアクセス１４０５の命令テンプレートとメモリアクセス１４２０の命令テンプレートとの間で区別する。
【０１０７】
複数のメモリアクセスオペレーションは、（場合によって、レジスタ内の値を用いてソース及び／又はデスティネーションアドレスを指定する）メモリ階層に対して読み取り及び／又は書き込みを行う一方、複数のノーメモリアクセスオペレーションは行わない（例えば、そのソース及びデスティネーションはレジスタである）。一実施形態においてこのフィールドはまた、３つの異なる態様の間で選択してメモリアドレス算出を実行する一方、複数の代替的な実施形態は、より多くの、より少ない、又は異なる態様をサポートしてメモリアドレス算出を実行し得る。
【０１０８】
オーグメンテーションオペレーションフィールド１４５０−そのコンテンツは、ベースオペレーションに加えて、様々な異なるオペレーションから実行されるべき１つを区別する。このフィールドはコンテキスト固有である。本願発明の一実施形態において、このフィールドは、クラスフィールド１４６８、アルファフィールド１４５２、及びベータフィールド１４５４に分割される。オーグメンテーションオペレーションフィールド１４５０は、オペレーションの複数の共通のグループが２つ、３つ、又は４つの命令ではなく、単一の命令において、実行されることを可能にする。
【０１０９】
スケールフィールド１４６０−そのコンテンツは、メモリアドレス生成のために（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅを用いるアドレス生成のため）に、インデックスフィールドのコンテンツのスケーリングを可能にする。
【０１１０】
変位フィールド１４６２Ａ−そのコンテンツは、（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅ＋ｄｉｓｐｌａｃｅｍｅｎｔを用いるアドレス生成のために）、メモリアドレス生成の一部として用いられる。
【０１１１】
変位係数フィールド１４６２Ｂ（変位フィールド１４６２Ａが変位係数フィールド１４６２Ｂに直接並置されることは一方又は他方が用いられていることを示すことに留意）−そのコンテンツは、アドレス生成の一部として用いられ、メモリアクセス（Ｎ）のサイズによりスケーリングされる変位要因を指定する。ここで、Ｎは、メモリアクセス（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅ＋ｄｉｓｐｌａｃｅｍｅｎｔを用いるアドレス生成のため）のバイト数である。冗長下位ビットは無視され、よって、変位係数フィールドのコンテンツが、有効アドレスを算出するのに用いられるべき最終変位を生成するために、メモリオペランドの合計サイズ（Ｎ）により乗算される。Ｎの値は、フルオペコードフィールド１４７４（本明細書で後述される）及びデータ操作フィールド１４５４Ｃに基づいて、ランタイムにプロセッサハードウェアにより決定される。変位フィールド１４６２Ａ及び変位係数フィールド１４６２Ｂは、それらがノーメモリアクセス１４０５の命令テンプレートのために用いられず、及び／又は複数の異なる実施形態がそれら２つのうちの１つのみを実行する又はどちらも実行しない場合があるという意味で、選択的である。
【０１１２】
データ要素幅フィールド１４６４−そのコンテンツは、（いくつかの実施形態において、全ての命令に対して、他の複数の実施形態においては、複数の命令のうちの一部のみに対して）多数のデータ要素幅の中で用いられるべき１つを区別する。このフィールドは、複数のオペコードのいくつかの態様を用いて、１つのデータ要素幅のみがサポートされ、及び／又は、複数のデータ要素幅がサポートされる場合、必須ではないという意味で、選択的である。
【０１１３】
書き込みマスクフィールド１４７０−そのコンテンツは、データ要素位置毎のベースで、デスティネーションベクトルオペランドにおけるデータ要素位置がベースオペレーション及びオーグメンテーションオペレーションの結果を反映するか否かを制御する。クラスＡの命令テンプレートは、併合書き込みマスクをサポートする一方、クラスＢの命令テンプレートは、併合書き込みマスクとゼロ書き込みの書き込みマスクの両方をサポートする。併合の場合、ベクトルマスクは、デスティネーションの複数の要素の任意のセットが、（ベースオペレーション及びオーグメンテーションオペレーションにより指定される）任意のオペレーションの実行中に複数の更新から保護されることを可能とし、他の一実施形態においては、対応するマスクビットが０を有するデスティネーションの各要素の古い値を保存する。対照的に、ゼロを書き込む場合、複数のベクトルマスクは、デスティネーションの複数の要素の任意のセットが、（ベースオペレーション及びオーグメンテーションオペレーションにより指定される）任意のオペレーションの実行中にゼロを書き込まれることを可能にし、一実施形態において、対応するマスクビットが０の値を有する場合、デスティネーションの要素が０に設定される。この機能のサブセットは、実行されるオペレーションのベクトル長（すなわち、最初のものから最後のものまでの修正される要素のスパン）を制御する能力であるが、しかし、修正される複数の要素が連続している必要はない。それにより、書き込みマスクフィールド１４７０は、読み込み、格納、算術、ロジックなどを含み、複数の部分的ベクトルオペレーションを可能にする。書き込みマスクフィールド１４７０のコンテンツが、用いられるべき書き込みマスクを含む多数の書き込みマスクレジスタから１つを選択する（それにより、書き込みマスクフィールド１４７０のコンテンツは、実行されるべきマスキングを間接的に識別する）、本願発明の複数の実施形態が説明される一方、複数の代替的な実施形態は、その代わりに、又は追加的に、書き込みマスクフィールド１４７０のコンテンツは、実行されるマスキングを直接指定する。
【０１１４】
即値フィールド１４７２−そのコンテンツは、即値の仕様を可能にする。このフィールドは、即値をサポートしない汎用ベクトル向けフォーマットの実装に存在せず、即値を用いない命令に存在しないという意味で、選択的である。
【０１１５】
クラスフィールド１４６８−そのコンテンツは、異なるクラスの命令の間で区別する。図１４Ａ−Ｂを参照すると、このフィールドのコンテンツはクラスＡ及びクラスＢの命令の間で選択する。図１４Ａ−Ｂにおいて、複数の角の丸いマス目が、特定の値がフィールドに存在することを示すのに用いられる（例えば、図１４Ａ−Ｂのそれぞれのクラスフィールド１４６８のためのクラスＡの１４６８Ａ及びクラスＢの１４６８Ｂ）。
クラスＡの命令テンプレート
【０１１６】
非メモリアクセス１４０５のクラスＡの命令テンプレートである場合、アルファフィールド１４５２がＲＳフィールド１４５２Ａとして解釈され、そのコンテンツは複数の異なるオーグメンテーションオペレーションの種類から実行されるべき１つ（例えば、丸め１４５２Ａ．１及びデータ変換１４５２Ａ．２がそれぞれ、ノーメモリアクセス・丸め型オペレーション１４１０及びノーメモリアクセス・データ変換型オペレーション１４１５の命令テンプレートに対して指定される）を区別する一方、ベータフィールド１４５４は、指定される型のオペレーションから実行されるべき１つを区別する。ノーメモリアクセス１４０５の命令テンプレート、スケールフィールド１４６０、変位フィールド１４６２Ａ、及び変位係数フィールド１４６２Ｂは、存在しない。
ノーメモリアクセスの命令テンプレートーフル丸め制御型オペレーション
【０１１７】
ノーメモリアクセス・フル丸め制御型オペレーション１４１０の命令テンプレートにおいて、ベータフィールド１４５４は、丸め制御フィールド１４５４Ａとして解釈され、そのコンテンツは、静的な丸めを提供する。説明されている本願発明の複数の実施形態において、丸め制御フィールド１４５４Ａは、全浮動小数点例外抑制（ＳＡＥ）フィールド１４５６及び丸めオペレーション制御フィールド１４５８を含む一方、複数の代替的な実施形態は、これらのコンセプトの両方をサポートし、同じフィールドに符号化してよく、又はこれらのコンセプト／フィールドのうちの一方又は他方のみを有してよい（例えば、丸めオペレーション制御フィールド１４５８のみを有してよい）。
【０１１８】
ＳＡＥフィールド１４５６−そのコンテンツは、例外イベント報告を無効化にするか否かを区別し、ＳＡＥフィールド１４５６のコンテンツが、抑制が有効であることを示している場合、所与の命令が、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外処理部も立ち上げない。
【０１１９】
丸めオペレーション制御フィールド１４５８−そのコンテンツは、一群の丸めオペレーション（例えば、切り上げ、切り捨て、ゼロへの丸め、及び最近接数への丸め）から実行されるべき１つを区別する。それにより、丸めオペレーション制御フィールド１４５８は、各命令ベースで丸めモードの変更を可能にする。プロセッサが、複数の丸めモードを指定する制御レジスタを含む、本願発明の一実施形態において、丸めオペレーション制御フィールド１４５８のコンテンツはそのレジスタ値をオーバーライドする。
ノーメモリアクセスの命令テンプレート−データ変換型オペレーション
【０１２０】
ノーメモリアクセス・データ変換型オペレーション１４１５の命令テンプレートにおいて、ベータフィールド１４５４は、データ変換フィールド１４５４Ｂとして解釈され、そのコンテンツは、多数のデータ変換から実行されるべき１つ（例えば、データ変換なし、スウィズル、ブロードキャスト）を区別する。
【０１２１】
メモリアクセス１４２０のクラスＡの命令テンプレートの場合、アルファフィールド１４５２は、追い出し示唆フィールド１４５２Ｂとして解釈され、そのコンテンツは、追い出し示唆から用いられるべき１つを区別し（図１４Ａでは、一時的１４５２Ｂ．１及び非一時的１４５２Ｂ．２がそれぞれメモリアクセス・一時的１４２５の命令テンプレート及びメモリアクセス・非一時的１４３０の命令テンプレートに対して指定される）、一方、ベータフィールド１４５４は、データ操作フィールド１４５４Ｃとして解釈され、そのコンテンツは、多数のデータ操作オペレーション（プリミティブとしても知られている）から実行されるべき１つを区別する（例えば、操作なし、ブロードキャスト、ソースのアップコンバート、及びデスティネーションのダウンコンバート）。メモリアクセス１４２０の命令テンプレートは、スケールフィールド１４６０を含み、変位フィールド１４６２Ａ又は変位係数フィールド１４６２Ｂを選択的に含む。
【０１２２】
複数のベクトルメモリ命令は、変換サポートにより、メモリからの複数のベクトル読み込み及びメモリへの複数のベクトル格納を実行する。複数の通常のベクトル命令と同様に、複数のベクトルメモリ命令は、書き込みマスクとして選択されるベクトルマスクのコンテンツに命令される、実際に転送される複数の要素と共に、データ要素単位の様式で、メモリから／へデータを転送する。
メモリアクセスの命令テンプレート−一時的
【０１２３】
一時的データは、キャッシュによる利益を十分に受けられるほどすぐに再利用される可能性が高いデータである。しかしながら、これは示唆であり、複数の異なるプロセッサは、その示唆を完全に無視することを含み、複数の異なる態様でこれを実装し得る。
メモリアクセスの命令テンプレート―非一時的
【０１２４】
非一時的データは、第１レベルキャッシュでキャッシングによる利益を十分に受けられるほどすぐに再利用される可能性が低いデータであり、追い出しの優先度が与えられるべきである。しかしながら、これは示唆であり、複数の異なるプロセッサは、その示唆を完全に無視することを含み、これを複数の異なる態様で実装し得る。
クラスＢの命令テンプレート
【０１２５】
クラスＢの命令テンプレートの場合、アルファフィールド１４５２は、書き込みマスク制御（Ｚ）フィールド１４５２Ｃとして解釈され、そのコンテンツは、書き込みマスクフィールド１４７０により制御される書き込みマスキングが併合又はゼロ書き込みであるべきか否かを区別する。
【０１２６】
非メモリアクセス１４０５のクラスＢの命令テンプレートである場合、ベータフィールド１４５４の一部は、ＲＬフィールド１４５７Ａとして解釈され、そのコンテンツは、異なるオーグメンテーションオペレーションの種類から実行されるべき１つを区別し（例えば、丸め１４５７Ａ．１及びベクトル長（ＶＳＩＺＥ）１４５７Ａ．２がそれぞれ、ノーメモリアクセス・書き込みマスク制御・部分的丸め制御型オペレーション１４１２の命令テンプレート及びノーメモリアクセス・書き込みマスク制御・ＶＳＩＺＥ型オペレーション１４１７の命令テンプレートに対して指定される）、一方、残りのベータフィールド１４５４は、指定された型の複数のオペレーションから実行されるべきものを区別する。ノーメモリアクセス１４０５の命令テンプレートにおいて、スケールフィールド１４６０、変位フィールド１４６２Ａ、及び変位係数フィールド１４６２Ｂは存在しない。
【０１２７】
ノーメモリアクセス・書き込みマスク制御、部分的丸め制御型オペレーション１４１０の命令テンプレートにおいて、残りのベータフィールド１４５４は、丸めオペレーションフィールド１４５９Ａとして解釈され、例外イベント報告が無効化される（所与の命令がいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外処理部も立ち上げない）。
【０１２８】
丸めオペレーション制御フィールド１４５９Ａ−丸めオペレーション制御フィールド１４５８とちょうど同じように、そのコンテンツは、一群の丸めオペレーション（例えば、切り上げ、切り捨て、ゼロへの丸め、最近接数への丸め）から実行されるべき１つを区別する。それにより、丸めオペレーション制御フィールド１４５９Ａは、各命令ベースで複数の丸めモードの変更を可能にする。プロセッサが複数の丸めモードを指定する複数の制御レジスタを含む本願発明の一実施形態において、丸めオペレーション制御フィールド１４５８のコンテンツは、そのレジスタ値をオーバーライドする。
【０１２９】
ノーメモリアクセス・書き込みマスク制御・ＶＳＩＺＥ型オペレーション１４１７の命令テンプレートにおいて、残りのベータフィールド１４５４は、ベクトル長フィールド１４５９Ｂとして解釈され、そのコンテンツは、多数のデータベクトル長から実行されるべき１つ（例えば、１２８、２５６、又は５１２バイト）を区別する。
【０１３０】
メモリアクセス１４２０のクラスＢの命令テンプレートである場合、ベータフィールド１４５４の一部は、ブロードキャストフィールド１４５７Ｂとして解釈され、そのコンテンツは、ブロードキャスト型データ操作オペレーションが実行されるか否かを区別し、一方、残りのベータフィールド１４５４は、ベクトル長フィールド１４５９Ｂとして解釈される。メモリアクセス１４２０の命令テンプレートは、スケールフィールド１４６０を含み、変位フィールド１４６２Ａ又は変位係数フィールド１４６２Ｂを選択的に含む。
【０１３１】
汎用ベクトル向け命令フォーマット１４００に関連して、フォーマットフィールド１４４０、ベースオペレーションフィールド１４４２、及びデータ要素幅フィールド１４６４を含むフルオペコードフィールド１４７４が示されている。フルオペコードフィールド１４７４がこれらのフィールドの全てを含む、一実施形態が示されている一方、それらの全てをサポートしない複数の実施形態においては、フルオペコードフィールド１４７４は、これらのフィールドの全てより少ないものを含む。フルオペコードフィールド１４７４はオペレーションコード（オペコード）を提供する。
【０１３２】
オーグメンテーションオペレーションフィールド１４５０、データ要素幅フィールド１４６４、及び書き込みマスクフィールド１４７０は、これらの特徴が、各命令ベースで、汎用ベクトル向け命令フォーマットにおいて指定されることを可能にする。
【０１３３】
書き込みマスクフィールドとデータ要素幅フィールドとの組み合わせは、マスクが複数の異なるデータ要素幅に基づいて適用されることを可能にする複数の型別の命令を生成する。
【０１３４】
クラスＡ及びクラスＢ内に得られる様々な命令テンプレートは、複数の異なる状況において有益である。本願発明のいくつかの実施形態において、複数の異なるプロセッサ又は一のプロセッサ内の異なるコアは、クラスＡのみ、クラスＢのみ、又は両方のクラスをサポートし得る。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスＢのみをサポートしてよく、主にグラフィックス及び／又はサイエンティフィック（スループット）コンピューティング向けのコアは、クラスＡのみをサポートしてよく、両方向けのコアは両方をサポートしてよい（もちろん、両方のクラスから複数のテンプレート及び複数の命令のいくつかの組み合わせを有するが両方のクラスから全てのテンプレート及び命令を有しないコアは、本願発明の範囲内にある）。また、単一のプロセッサは、複数のコアを含んでよく、その全ては同じクラスをサポートし、又は異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックス及び汎用コアを有するプロセッサにおいて、主にグラフィックス及び／又はサイエンティフィックコンピューティング向けの複数のグラフィックスコアのうちの１つは、クラスＡのみをサポートしてよく、一方、汎用コアのうちの１つ又は複数は、クラスＢのみをサポートする、汎用コンピューティング向けのアウトオブオーダ実行及びレジスタリネーミングを有する高性能汎用コアであってよい。別個のグラフィックスコアを有さない別のプロセッサは、クラスＡ及びクラスＢの両方をサポートするもう１つ汎用インオーダ又はアウトオブオーダコアを含み得る。もちろん、一方のクラスからの複数の特徴はまた、本願発明の複数の異なる実施形態において、他方のクラスに実行され得る。高水準言語で書かれている複数のプログラムは、様々な異なる実行可能な形式に換えてもよく（例えば、ジャストインタイムにコンパイルまたは静的にコンパイルされる）、そのような形式には、１）実行用のターゲットプロセッサによりサポートされるクラスの複数の命令のみを有する形式、又は、２）全てのクラスの複数の命令の複数の異なる組み合わせを用いて書かれている複数の代替的なルーチンを有し、コードを現在実行しているプロセッサによってサポートされる命令に基づいて実行する複数のルーチンを選択する制御フローコードを有する形式、が含まれる。
例示的な特定ベクトル向け命令フォーマット
【０１３５】
図１５Ａ−Ｄは、本願発明の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図１５Ａ−Ｄは、複数のフィールドの位置、サイズ、解釈、及び順序、並びにそれらのフィールドの一部の値を指定するという意味で特定の特定ベクトル向け命令フォーマット１５００を示す。特定ベクトル向け命令フォーマット１５００は、ｘ８６命令セットを拡張するのに用いられてよく、それにより、複数のフィールドの一部は既存のｘ８６命令セット及びこれらの拡張（例えば、ＡＶＸ）に用いられるものと同様又は同じである。このフォーマットは、複数の拡張を伴う既存のｘ８６命令セットのプレフィックス符号化フィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、及び即値フィールドとの整合性を保つ。図１４Ａ−Ｂの複数のフィールドにマッピングする図１５Ａ−Ｄの複数のフィールドが図示されている。
【０１３６】
本願発明の複数の実施形態が、例示の目的のために、汎用ベクトル向け命令フォーマット１４００との関連で特定ベクトル向け命令フォーマット１５００を参照して説明されているが、本願発明は、特許請求の範囲に記載されたものを除き、特定ベクトル向け命令フォーマット１５００に限定されないことが理解されるべきである。例えば、汎用ベクトル向け命令フォーマット１４００は、様々なフィールドに対して様々な可能なサイズを企図し、一方、特定ベクトル向け命令フォーマット１５００は、特定のサイズのフィールドを含むものとして示される。特定の例を用いて、データ要素幅フィールド１４６４が特定ベクトル向け命令フォーマット１５００における１ビットのフィールドとして図示されている一方、本願発明はそのように限定されない（すなわち、汎用ベクトル向け命令フォーマット１４００は、他のサイズのデータ要素幅フィールド１４６４を企図する）。
【０１３７】
汎用ベクトル向け命令フォーマット１４００は、図１５Ａに図示されている順序で以下に列挙される複数の以下のフィールドを含む。ＥＶＥＸプレフィックス（バイト０−３）１５０２−４バイトの形式において符号化される。
【０１３８】
フォーマットフィールド１４４０（ＥＶＥＸバイト０、ビット［７：０］）−第１のバイト（ＥＶＥＸバイト０）がフォーマットフィールド１４４０であり、０ｘ６２（本願発明の一実施形態においてベクトル向け命令フォーマットを区別するのに用いられる固有値）を含む。
【０１３９】
第２−第４のバイト（ＥＶＥＸバイト１−３）は、特定の機能を提供する多数のビットフィールドを含む。
【０１４０】
ＲＥＸフィールド１５０５（ＥＶＥＸバイト１、ビット［７−５］）−ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）、及びＥＶＥＸ．Ｂビットフィールド（ＥＶＥＸバイト１、ビット［５］−Ｂ）からなる。
【０１４１】
ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、及びＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同じ機能を提供し、１の補数の形式を用いて符号化される。すなわち、ＺＭＭ０がＨＵＢとして符号化され、ＺＭＭ１５は００００Ｂとして符号化される。当技術分野で知られているように、複数の命令の複数の他のフィールドがレジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、及びｂｂｂ）を符号化し、これにより、Ｒｒｒｒ、Ｘｘｘｘ、及びＢｂｂｂが、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ及びＥＶＥＸ．Ｂを加算することにより形成され得る。
【０１４２】
ＲＥＸ'フィールド１４１０−これは、ＲＥＸ'フィールド１４１０の第１の部分であり、拡張された３２個のレジスタセットの上位１６又は下位１６の何れかを符号化するのに用いられるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）である。本願発明の一実施形態において、このビットは、以下に示されるように他のものと共に、（周知のｘ８６  ３２ビットのモードで）ＢＯＵＮＤ命令から区別するビット反転フォーマットに格納され、そのリアルオペコードバイトが６２であるが、ＭＯＤ  Ｒ／Ｍフィールド（後述）においてＭＯＤフィールドの１１の値を受け取らない。本願発明の代替的な複数の実施形態は、これと、以下に示される反転フォーマットの他のビットを格納しない。１の値は、下位１６個のレジスタを符号化するのに用いられる。言い換えれば、Ｒ'Ｒｒｒｒが、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、及び複数の他のフィールドからの他のＲＲＲを組み合わせることによって形成される。
【０１４３】
オペコードマップフィールド１５１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）―そのコンテンツは、示唆された先頭のオペコードバイト（０Ｆ、０Ｆ３８、又は０Ｆ３）を符号化する。
【０１４４】
データ要素幅フィールド１４６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）は、ＥＶＥＸ．Ｗという表記により表される。ＥＶＥＸ．Ｗは、データタイプ（３２ビットのデータ要素又は６４ビットのデータ要素の何れか）の粒度（サイズ）を定義するのに用いられる。
【０１４５】
ＥＶＥＸ．ｖｖｖｖ１５２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割は、以下のものを含み得る。１）ＥＶＥＸ．ｖｖｖｖは、反転された（１の補数）形式で指定される第１のソースレジスタオペランドを符号化し、２つ以上のソースオペランドを有する複数の命令に有効である、２）ＥＶＥＸ．ｖｖｖｖは、特定のベクトルシフトに対して１の補数の形式で指定されるデスティネーションレジスタオペランドを符号化する、又は３）ＥＶＥＸ．ｖｖｖｖは、何れのオペランドも符号化せず、そのフィールドは残され、１１１１ｂを含むべきである。それにより、ＥＶＥＸ．ｖｖｖｖフィールド１５２０は、反転された（１の補数）形式に格納された第１のソースレジスタ指定子の４つの下位ビットを符号化する。命令に応じて、追加の異なるＥＶＥＸビットフィールドは、３２個のレジスタに指定子サイズを拡張するのに用いられる。
【０１４６】
ＥＶＥＸ．Ｕクラスフィールド１４６８（ＥＶＥＸバイト２、ビット［２］−Ｕ）−ＥＶＥＸ．Ｕ＝０の場合、クラスＡ又はＥＶＥＸ．Ｕ０を示し、ＥＶＥＸ．Ｕ＝１の場合、クラスＢ又はＥＶＥＸ．Ｕ１を示す。
【０１４７】
プレフィックス符号化フィールド１５２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）−ベースオペレーションフィールドに対して追加のビットを提供する。ＥＶＥＸプレフィックスフォーマットのレガシＳＳＥ命令に対してサポートを提供することに加えて、これはＳＩＭＤプレフィックスをコンパクトにする利点も有する（ＳＩＭＤプレフィックスを表現するためにバイトを必要とせず、ＥＶＥＸプレフィックスは２ビットのみを必要とする）。一実施形態において、レガシフォーマット及びＥＶＥＸプレフィックスフォーマットの両方にＳＩＭＤプレフィックス（６６Ｈ，Ｆ２Ｈ、Ｆ３Ｈ）を用いるレガシＳＳＥ命令をサポートするべく、これらのレガシＳＩＭＤプレフィックスは、ＳＩＭＤプレフィックス符号化フィールドに符号化され、デコーダのＰＬＡに提供される前に、ランタイムでレガシＳＩＭＤプレフィックスに拡張される（よって、ＰＬＡは、修正せずにこれらのレガシ命令のレガシ及びＥＶＥＸフォーマットの両方を実行できる）。より新しい命令がオペコード拡張として、ＥＶＥＸプレフィックス符号化フィールドのコンテンツを直接用いることができるが、特定の実施形態は、整合性に関して同様の様式に拡張するが、これらの複数のレガシＳＩＭＤプレフィックスによって指定されるべき異なる複数の意味を可能とする。代替的な実施形態では、ＰＬＡを再設計して２ビットのＳＩＭＤプレフィックス符号化をサポートしてよく、それにより、拡張が要求されない。
【０１４８】
アルファフィールド１４５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ、ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．ｗｒｉｔｅ  ｍａｓｋ  ｃｏｎｔｒｏｌ、及びＥＶＥＸ．Ｎとしても知られており、αを用いて示されることもある）−前に説明されたように、このフィールドは、コンテキスト固有である。
【０１４９】
ベータフィールド１４５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、ＥＶＥＸ．ｓ２＿０、ＥＶＥＸ．ｒ２＿０、ＥＶＥＸ．ｒｒｌ、ＥＶＥＸ．ＬＬＯ、ＥＶＥＸ．ＬＬＢとしても知られており、βββを用いても示される）−前に説明されたように、このフィールドは、コンテキスト固有である。
【０１５０】
ＲＥＸ'フィールド１４１０−これは、ＲＥＸ'フィールドの残りであり、拡張された３２のレジスタセットの上位１６又は下位１６の何れかを符号化するのに用いられ得るＥＶＥＸ．Ｖビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ）である。このビットは、ビット反転フォーマットで格納される。１の値は、下位１６個のレジスタを符号化するのに用いられる。言い換えれば、Ｖ'ＶＶＶＶは、ＥＶＥＸ．ＶとＥＶＥＸ．ｖｖｖｖを組み合わせることによって形成される。
【０１５１】
書き込みマスクフィールド１４７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）―そのコンテンツは、前に説明されたように、複数の書き込みマスクレジスタのうちのレジスタのインデックスを指定する。本願発明の一実施形態において、ＥＶＥＸ．ｋｋｋ＝０００という特定の値は、特定の命令に対して書き込みマスクを用いないことを示唆する特定の動作を有する（これは、ハードウェアに組み込まれた全ての書き込みマスク又はマスキングハードウェアを回避するハードウェアを用いることを含む、様々な態様で実装され得る）。
【０１５２】
リアルオペコードフィールド１５３０（バイト４）はまた、オペコードバイトとして知られている。オペコードの一部がこのフィールドに指定される。
【０１５３】
ＭＯＤ  Ｒ／Ｍフィールド１５４０（バイト５）は、ＭＯＤフィールド１５４２、Ｒｅｇフィールド１５４４、及びＲ／Ｍフィールド１５４６を含む。前に説明されたように、ＭＯＤフィールド１５４２のコンテンツは、メモリアクセスオペレーションとノーメモリアクセスオペレーションとの間で区別する。Ｒｅｇフィールド１５４４の役割は、デスティネーション・レジスタ・オペランド又はソースレジスタオペランドの何れかを符号化する、又は、オペコード拡張として扱われて何れの命令オペランドを符号化するのにも用いられない、という２つの状況に要約されることができる。Ｒ／Ｍフィールド１５４６の役割は、メモリアドレスを参照する命令オペランドを符号化すること、又は、デスティネーション・レジスタ・オペランド又はソースレジスタオペランドの何れかを符号化することを含んでよい。
【０１５４】
スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）−前に説明されたように、スケールフィールド１４５０のコンテンツは、メモリアドレス生成のために用いられる。ＳＩＢ．ｘｘｘ１５５４及びＳＩＢ．ｂｂｂ１５５６−これらのフィールドのコンテンツは、レジスタインデックスＸｘｘｘ及びＢｂｂｂに関連して前に言及されていた。
【０１５５】
変位フィールド１４６２Ａ（バイト７−１０）−ＭＯＤフィールド１５４２が１０を含む場合、バイト７−１０が変位フィールド１４６２Ａであり、レガシ３２ビット変位（ｄｉｓｐ３２）と同じく機能し、バイト粒度で機能する。
【０１５６】
変位係数フィールド１４６２Ｂ（バイト７）−ＭＯＤフィールド１５４２が０１を含む場合、バイト７が変位係数フィールド１４６２Ｂである。このフィールドの位置は、バイト粒度で機能するレガシｘ８６命令セット８ビットの変位（ｄｉｓｐ８）の位置と同じである。ｄｉｓｐ８が拡張された符号であることから、−１２８バイトと１２７バイトのオフセットとの間でのみアドレスすることができ、６４バイトのキャッシュラインに関して、ｄｉｓｐ８は、−１２８、−６４、０、及び６４という４つの本当に有用な値に設定されることができる８ビットを用いるが、多くの場合、より広い範囲が必要とされるので、ｄｉｓｐ３２が用いられる。しかし、ｄｉｓｐ３２には４バイトが必要である。ｄｉｓｐ８及びｄｉｓｐ３２とは対照的に、変位係数フィールド１４６２Ｂは、ｄｉｓｐ８の再解釈であり、変位係数フィールド１４６２Ｂを用いる場合、実際の変位は、メモリオペランドアクセス（Ｎ）のサイズにより乗算された変位係数フィールドのコンテンツにより決定される。この種類の変位は、ｄｉｓｐ８＊Ｎと称される。これは、平均命令長（変位のために用いられるが、はるかにより広い範囲を有する単一のバイト）を低減させる。そのような圧縮変位は、有効変位がメモリアクセスの粒度の倍数であるという前提に基づくものであり、よって、アドレスオフセットの冗長下位ビットは符号化される必要がない。言い換えれば、変位係数フィールド１４６２Ｂは、レガシｘ８６命令セット８ビットの変位を置換する。それにより、変位係数フィールド１４６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８＊Ｎに多重定義されることのみを除き、ｘ８６命令セット８ビットの変位と同じ態様で符号化される（よって、ＭｏｄＲＭ／ＳＩＢ  符号化規則は変更されない）。言い換えれば、符号化規則又は符号化長は変更されないが、（バイト単位のアドレスオフセットを得るために、メモリオペランドのサイズで変位をスケーリングする必要がある）ハードウェアによる変位値の解釈においてのみ変更がある。即値フィールド１４７２は、前に説明されたように動作する。
フルオペコードフィールド
【０１５７】
図１５Ｂは、本願発明の一実施形態に係るフルオペコードフィールド１４７４を構成する特定ベクトル向け命令フォーマット１５００の複数のフィールドを示すブロック図である。
【０１５８】
具体的に、フルオペコードフィールド１４７４は、フォーマットフィールド１４４０と、ベースオペレーションフィールド１４４２と、データ要素幅（Ｗ）フィールド１４６４とを含む。ベースオペレーションフィールド１４４２は、プレフィックス符号化フィールド１５２５と、オペコードマップフィールド１５１５と、リアルオペコードフィールド１５３０とを含む。
レジスタインデックスフィールド
【０１５９】
図１５Ｃは、本願発明の一実施形態に係るレジスタインデックスフィールド１４４４を構成する特定ベクトル向け命令フォーマット１５００の複数のフィールドを示すブロック図である。具体的に、レジスタインデックスフィールド１４４４は、ＲＥＸフィールド１５０５と、ＲＥＸ'フィールド１５１０と、ＭＯＤＲ／Ｍ．ｒｅｇフィールド１５４４と、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド１５４６と、ＷＷフィールド１５２０と、ｘｘｘフィールド１５５４と、ｂｂｂフィールド１５５６とを含む。
オーグメンテーションオペレーションフィールド
【０１６０】
図１５Ｄは、本願発明の一実施形態に係るオーグメンテーションオペレーションフィールド１４５０を構成する特定ベクトル向け命令フォーマット１５００の複数のフィールドを示すブロック図である。クラス（Ｕ）フィールド１４６８が０を含む場合、ＥＶＥＸ．Ｕ０（クラスＡ１４６８Ａ）を意味し、１を含む場合、ＥＶＥＸ．Ｕ１（クラスＢ１４６８Ｂ）を意味する。Ｕ＝０でＭＯＤフィールド１５４２が１１を含む（ノーメモリアクセスオペレーションを意味する）場合、アルファフィールド１４５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、ｒｓフィールド１４５２Ａとして解釈される。ｒｓフィールド１４５２Ａがａ１を含む場合（丸め１４５２Ａ．１）、ベータフィールド１４５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、丸め制御フィールド１４５４Ａとして解釈される。丸め制御フィールド１４５４Ａは、１ビットのＳＡＥフィールド１４５６と、２ビットの丸めオペレーションフィールド１４５８とを含む。ｒｓフィールド１４５２Ａがａ０を含む場合（データ変換１４５２Ａ．２）、ベータフィールド１４５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ変換フィールド１４５４Ｂとして解釈される。Ｕ＝０でＭＯＤフィールド１５４２が００、０１、又は１０を含む（メモリアクセスオペレーションを意味する）場合、アルファフィールド１４５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、追い出し示唆（ＥＨ）フィールド１４５２Ｂとして解釈され、ベータフィールド１４５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ操作フィールド１４５４Ｃとして解釈される。
【０１６１】
Ｕ＝１の場合、アルファフィールド１４５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、書き込みマスク制御（Ｚ）フィールド１４５２Ｃとして解釈される。Ｕ＝１でＭＯＤフィールド１５４２が１１を含む（ノーメモリアクセスオペレーションを意味する）場合、ベータフィールド１４５４（ＥＶＥＸバイト３、ビット［４］−Ｓ０）の一部は、ＲＬフィールド１４５７Ａとして解釈され、ａ１を含む場合（丸め１４５７Ａ．１）、残りのベータフィールド１４５４（ＥＶＥＸバイト３、ビット［６：５］−Ｓ２−１）は、丸めオペレーションフィールド１４５９Ａとして解釈され、一方、ＲＬフィールド１４５７Ａがａ０を含む場合（ＶＳＩＺＥ１４５７.Ａ２）、残りのベータフィールド１４５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）は、ベクトル長フィールド１４５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）として解釈される。
【０１６２】
Ｕ＝１でＭＯＤフィールド１５４２が００、０１、又は１０を含む場合（メモリアクセスオペレーションを意味する）、ベータフィールド１４５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド１４５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）及びブロードキャストフィールド１４５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）として解釈される。
例示的なレジスタアーキテクチャ
【０１６３】
図１６は、本願発明の一実施形態に係るレジスタアーキテクチャ１６００のブロック図である。図示されている実施形態において、５１２ビット幅の３２個のベクトルレジスタ１６１０があり、これらのレジスタは、ＺＭＭ０からＺＭＭ３１として参照される。下位１６個のｚｍｍレジスタの下位順の２５６ビットは、レジスタｙｍｍ０−１６にオーバーレイされる。下位１６個のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０−１５にオーバーレイされる。特定ベクトル向け命令フォーマット１５００は、以下の表で示されるように、これらのオーバーレイされるレジスタファイル上で動作する。
【表５】
0006371855.tif 000006
【０１６４】
言い換えれば、ベクトル長フィールド１４５９Ｂは、最大の長さと１つ又は複数の他のより短い長さとの間で選択し、ここで、そのようなより短い長さのそれぞれは、先行の長さの半分の長さであり、ベクトル長フィールド１４５９Ｂを有しない命令テンプレートは、最大のベクトル長で動作する。さらに、一実施形態において、特定ベクトル向け命令フォーマット１５００のクラスＢの命令テンプレートは、パックド又はスカラ単／倍精度浮動小数点データ及びパックド又はスカラ整数データに対して動作する。複数のスカラオペレーションは、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタにおける最下位のデータ要素位置で実行されるオペレーションであり、上位データ要素位置は、命令前と同じ状態で残されるか、又は、実施形態に応じてゼロを書き込まれるかの何れかである。
【０１６５】
書き込みマスクレジスタ１６１５−図示されている実施形態において、８つの書き込みマスクレジスタ（ｋ０からｋ７）があり、それぞれのサイズが６４ビットである。代替的な実施形態においては、書き込みマスクレジスタ１６１５はサイズが１６ビットである。前に説明されたように、本願発明の一実施形態において、ベクトルマスクレジスタｋ０は、書き込みマスクとして用いられることができず、通常ｋ０を示す符号化が、書き込みマスクのために用いられる場合、０ｘＦＦＦＦのハードウェアに組み込まれる書き込みマスクを選択し、その命令に対する書き込みマスキングを効果的に無効化にする。
【０１６６】
汎用レジスタ１６２５−図示されている実施形態において、複数のメモリオペランドにアドレスする既存のｘ８６アドレッシングモードと共に用いられる１６個の６４ビットの汎用レジスタがある。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、及びＲ８からＲ１５という名称により参照される。
【０１６７】
ＭＭＸパックド整数フラットレジスタファイル１６５０がエイリアスされるスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）１６４５−図示されている実施形態において、ｘ８７スタックは、ｘ８７命令セット拡張を用いて３２／６４／８０ビットの浮動小数点データに対してスカラ浮動小数点オペレーションを実行するのに用いられる８つの要素スタックであり、一方、ＭＭＸレジスタは、ＭＭＸレジスタとＸＭＭレジスタとの間で実行されるいくつかのオペレーションのための複数のオペランドを保持することと共に、６４ビットのパックド整数データに対して複数のオペレーションを実行するのに用いられる。
【０１６８】
本願発明の代替的な複数の実施形態は、より広い又はより狭いレジスタを用いてよい。さらに、本願発明の代替的な複数の実施形態は、より多くの、より少ない、又は異なるレジスタファイル及びレジスタを用いてよい。
例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ
【０１６９】
複数のプロセッサコアは、複数の異なる目的のために、複数の異なるプロセッサにおいて複数の異なる態様で実装され得る。例えば、そのような複数のコアの複数の実装は、１）汎用コンピューティング向けの汎用インオーダコア、２）汎用コンピューティング向けの高性能汎用アウトオブオーダコア、３）主にグラフィックス及び／又はサイエンティフィック（スループット）コンピューティング向けの特別用途コアを含み得る。複数の異なるプロセッサの複数の実装は、１）汎用コンピューティング向けの１つ又は複数の汎用インオーダコア及び／又は汎用コンピューティング向けの１つ又は複数の汎用アウトオブオーダコアを含むＣＰＵ、２）主にグラフィックス及び／又はサイエンティフィック（スループット）向けの１つ又は複数の特別用途コアを含むコプロセッサを含み得る。そのような複数の異なるプロセッサは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵとして同じパッケージにおける別個のダイ上のコプロセッサ、３）ＣＰＵとして同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、統合グラフィックス及び／又はサイエンティフィック（スループット）ロジックなど専用ロジックとして、又は特別用途コアとして称される場合がある）、及び４）同じダイ上で説明されたＣＰＵ（アプリケーションコア又はアプリケーションプロセッサとして称される場合がある）上述されたコプロセッサ、及び追加の機能を含み得るチップ上のシステムを含み得る異なるコンピュータシステムアーキテクチャをもたらす。複数の例示的なコアアーキテクチャが次に説明され、その後に複数の例示的プロセッサ及びコンピュータアーキテクチャの説明がされる。
例示的なコアアーキテクチャ インオーダ及びアウトオブオーダコアのブロック図
【０１７０】
図１７Ａは、本願発明の複数の実施形態に係る例示的インオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図１７Ｂは、本願発明の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコア及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの例示的実施形態の両方を示すブロック図である。図１７Ａ−Ｂの複数の実線のボックスは、インオーダパイプライン及びインオーダコアを図示し、一方、複数の破線のボックスの選択的な追加は、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン及びコアを図示する。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様は説明される。
【０１７１】
図１７Ａにおいて、プロセッサパイプライン１７００は、フェッチステージ１７０２と、長さ復号ステージ１７０４と、復号ステージ１７０６と、割り当てステージ１７０８と、リネーミングステージ１７１０と、スケジューリング（ディスパッチ又は発行としても知られている）ステージ１７１２と、レジスタ読み取り／メモリ読み取りステージ１７１４と、実行ステージ１７１６と、ライトバック／メモリ書き込みステージ１７１８と、例外処理ステージ１７２２と、コミットステージ１７２４とを含む。
【０１７２】
図１７Ｂは、実行エンジンユニット１７５０に結合され、両方ともメモリユニット１７７０に結合されるフロントエンドユニット１７３０を含むプロセッサコア１７９０を示す。コア１７９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、若しくは、ハイブリッド又は代替的コアの種類であってよい。また別のオプションとして、コア１７９０は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ＧＰＧＰＵ）コア、グラフィックスコア、又は同様のものなどの専用コアであってよい。
【０１７３】
フロントエンドユニット１７３０は、命令キャッシュユニット１７３４に結合される分岐予測ユニット１７３２を含み、命令キャッシュユニット１７３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ）１７３６に結合され、命令ＴＬＢユニット１７３６は、命令フェッチユニット１７３８に結合され、命令フェッチユニット１７３８は復号ユニット１７４０に結合される。復号ユニット１７４０（又はデコーダ）は、複数の命令を復号し、出力部として、１つ又は複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、他の命令、又は、元の複数の命令から復号された、あるいはこれらを反映した、若しくはこれらから派生された他の制御信号を生成してよい。復号ユニット１７４０は、様々な異なる機構を用いて実装され得る。適した機構の複数の例は、複数のルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）などを含むが、これらに限定されない。一実施形態において、コア１７９０は、マイクロコードＲＯＭ、又は一定のマクロ命令のためのマイクロコードを格納する他のメディア（例えば、復号ユニット１７４０に、あるいはフロントエンドユニット１７３０内に）を含む。復号ユニット１７４０は、実行エンジンユニット１７５０内のリネーミング／アロケータユニット１７５２に結合される。
【０１７４】
実行エンジンユニット１７５０は、リタイアメントユニット１７５４に結合されるリネーミング／アロケータユニット１７５２と、１つ又は複数のスケジューラユニット１７５６のセットとを含む。スケジューラユニット１７５６は、予約ステーション、中央命令ウィンドウなどを含み、任意の数の異なるスケジューラを表す。スケジューラユニット１７５６は、物理レジスタファイルユニット１７５８に結合される。物理レジスタファイルユニット１７５８のそれぞれは、１つ又は複数の物理レジスタファイルを表し、それらの異なるものは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行されるべき次の命令のアドレスである命令ポインタ）などのような１つ又は複数の異なるデータの種類を格納する。一実施形態において、物理レジスタファイルユニット１７５８は、ベクトルレジスタユニットと、書き込みマスクレジスタユニットと、スカラレジスタユニットとを含む。これらのレジスタユニットは、アーキテクチャ的ベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイルユニット１７５８は、リタイアメントユニット１７５４により重複され、レジスタリネーミング及びアウトオブオーダ実行が実行され得る（例えば、リオーダバッファ及びリタイアレジスタファイルを用いて、フューチャファイル、履歴バッファ、及びリタイアレジスタファイルを用いて、レジスタマップ及びレジスタのプールを用いるなど）様々な態様を示す。リタイアメントユニット１７５４及び物理レジスタファイルユニット１７５８は、実行クラスタ１７６０に結合される。実行クラスタ１７６０は、１つ又は複数の実行ユニット１７６２のセット及び１つ又は複数のメモリアクセスユニット１７６４のセットを含む。実行ユニット１７６２は、様々な種類のデータ（例えば、スカラ浮動小数点、パックド整数＜パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して、様々なオペレーション（例えば、シフト、加算、減算、乗算）を実行し得る。いくつかの実施形態が、特定の機能又は機能の複数のセットに専用の多数の実行ユニットを含み得る一方、他の複数の実施形態は、１つの実行ユニットのみ又は全てが全ての機能を実行する複数の実行ユニットを含み得る。スケジューラユニット１７５６、物理レジスタファイルユニット１７５８、及び実行クラスタ１７６０は、複数として示される可能性があるが、その理由は、複数の特定の実施形態は、特定の複数のデータの種類／複数のオペレーションに対して別個のパイプラインを生成するからである（例えば、それぞれがこれら自身のスケジューラユニット、物理レジスタファイルユニット及び／又は実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン及び／又はメモリアクセスパイプライン、及び、別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット１７６４を有する特定の複数の実施形態が実行される）。別個のパイプラインが用いられる場合、これらのパイプラインの１つ又は複数はアウトオブオーダ発行／実行でその残りはインオーダであってよいことも理解されるべきである。
【０１７５】
複数のメモリアクセスユニット１７６４のセットは、メモリユニット１７７０に結合され、メモリユニット１７７０は、データキャッシュユニット１７７４に結合されるデータＴＬＢユニット１７７２を含み、データキャッシュユニット１７７４は、レベル２（Ｌ２）キャッシュユニット１７７６に結合される。一例示的実施形態において、メモリアクセスユニット１７６４は、読み込みユニット、格納アドレスユニット、及び格納データユニットを含んでよく、それらのそれぞれは、メモリユニット１７７０内のデータＴＬＢユニット１７７２に結合される。命令キャッシュユニット１７３４はさらに、メモリユニット１７７０内のレベル２（Ｌ２）キャッシュユニット１７７６に結合される。Ｌ２キャッシュユニット１７７６は、１つ又は複数の他のレベルのキャッシュに結合され、最終的には主要メモリに結合される。
【０１７６】
例として、例示的なレジスタリネーミングアウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン１７００を実装し得る。１）命令フェッチ１７３８は、フェッチ及び長さ復号ステージ１７０２及び１７０４を実行し、２）復号ユニット１７４０は、復号ステージ１７０６を実行し、３）リネーミング／アロケータユニット１７５２は、割り当てステージ１７０８及びリネーミングステージ１７１０を実行し、４）スケジューラユニット１７５６は、スケジュールステージ１７１２を実行し、５）物理レジスタファイルユニット１７５８及びメモリユニット１７７０は、レジスタ読み取り／メモリ読み取りステージ１７１４を実行し、実行クラスタ１７６０は実行ステージ１７１６を実行し、６）メモリユニット１７７０及び物理レジスタファイルユニット１７５８は、ライトバック／メモリ書き込みステージ１７１８を実行し、７）様々なユニットが例外処理ステージ１７２２に関連してよく、８）リタイアメントユニット１７５４及び物理レジスタファイルユニット１７５８は、コミットステージ１７２４を実行する。
【０１７７】
コア１７９０は、本明細書にて説明される命令を含む１つ又は複数の命令セット（例えば、（複数のより新しいバージョンを伴う、いくつかの拡張が追加された）ｘ８６命令セット、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングスの（ＮＥＯＮのような選択的な追加の拡張を有する）ＡＲＭ命令セット）をサポートしてよい。一実施形態において、コア１７９０は、パックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）サポートするロジックを含み、それによって、多くのマルチメディアアプリケーションにより用いられる複数のオペレーションがパックドデータを用いて実行されることを可能にする。
【０１７８】
コアは、マルチスレッディング（複数のオペレーション又は複数のスレッドの２つ以上の並列セットを実行すること）をサポートしてよく、時分割マルチスレッディング、同時マルチスレッディング（単一の物理的コアが複数のスレッドのそれぞれに対して論理的コアを提供することにより、物理的コアが同時にマルチスレッディングを実行すること）又はこれらの組み合わせ（例えば、時分割フェッチ及び復号化、その後、インテル（登録商標）ハイパースレッディングテクノロジなどでの同時マルチスレッディング）を含む様々な態様で、マルチスレッディングを実行してよいことが理解されるべきである。
【０１７９】
アウトオブオーダ実行との関連で、レジスタリネーミングを説明するが、レジスタリネーミングは、インオーダアーキテクチャで用いられてよいことが理解されるべきである。プロセッサの図示された実施形態はまた、別個の命令及びデータキャッシュユニット１７３４／１７７４と、共有Ｌ２キャッシュユニット１７７６とを含む一方、複数の代替的な実施形態は、例えば、レベル１（Ｌ１）内部キャッシュ又は複数のレベルの内部キャッシュなどの、命令及びデータの両方のための単一の内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュと、コア及び／又はプロセッサの外部にある外部キャッシュとの組み合わせを含み得る。代替的に、キャッシュの全ては、コア及び／又はプロセッサの外部にあってよい。
特定の例示的インオーダコアアーキテクチャ
【０１８０】
図１８Ａ−Ｂは、より具体的な例示的インオーダコアアーキテクチャのブロック図を図示し、そのコアは、チップ内の多数のロジックブロック（同じ種類及び／又は異なる種類の他の複数のチップを含む）のうちの１つであり得る。複数のロジックブロックは、用途に応じて、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を介して、いくつかの固定関数ロジック、メモリＩ／Ｏインターフェース、及び他の必要なＩ／Ｏロジックと通信する。
【０１８１】
図１８Ａは、本願発明の複数の実施形態に係る単一のプロセッサコア、及びそのオンダイ相互接続ネットワーク１８０２との接続、並びにそのレベル２（Ｌ２）キャッシュローカルサブセット１８０４のブロック図である。一実施形態において、命令デコーダ１８００は、パックドデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ１８０６は、スカラ及びベクトルユニットに入るキャッシュメモリへの低レイテンシアクセスを可能にする。（設計を簡略化する）一実施形態において、スカラユニット１８０８及びベクトルユニット１８１０は、複数の別個のレジスタセットを（スカラレジスタ１８１２及びベクトルレジスタ１８１４をそれぞれ）用いており、それらの間で転送されるデータは、メモリに書き込まれ、次に、レベル１（Ｌ１）キャッシュ１８０６からリードバックされる一方、本願発明の代替的な複数の実施形態は、異なるアプローチを用いてよい（例えば、単一のレジスタセットを用いる、又は、データが書き込まれてリードバックされずに２つのレジスタファイルの間で転送されることを可能にする通信パスを含む）。
【０１８２】
Ｌ２キャッシュローカルサブセット１８０４は、プロセッサコア毎に１つの別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、自身のＬ２キャッシュローカルサブセット１８０４への直接アクセスパスを有する。プロセッサコアにより読み取られたデータは、そのＬ２キャッシュサブセット１８０４に格納され、これら自身のローカルＬ２キャッシュサブセットへアクセスする他のプロセッサコアと並列に、迅速にアクセスされることができる。プロセッサコアにより書き込まれたデータは、その自身のＬ２キャッシュサブセット１８０４に格納され、必要な場合には他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは双方向であって、複数のプロセッサコア、複数のＬ２キャッシュ、及び他のロジックブロックなどの複数のエージェントがチップ内で互いに通信することを可能にする。各リングデータパスは、方向毎に１０１２ビット幅である。
【０１８３】
図１８Ｂは、本願発明の複数の実施形態に係る、図１８Ａのプロセッサコアの一部の拡大図である。図１８Ｂは、Ｌ１キャッシュ１８０４のＬ１データキャッシュの一部１８０６Ａ、並びに、ベクトルユニット１８１０及びベクトルレジスタ１８１４に関するさらなる詳細を含む。
【０１８４】
具体的に、ベクトルユニット１８１０は、１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ１８２８を参照）であり、１つ又は複数の整数、単精度浮動、及び倍精度浮動命令を実行する。ＶＰＵは、スウィズルユニット１８２０によるレジスタ入力のスウィズル、数値変換ユニット１８２２Ａ−Ｂによる数値変換、及び複製ユニット１８２４によるメモリ入力部上の複製をサポートする。書き込みマスクレジスタ１８２６は、結果として生じる複数のベクトル書き込みをプレディケートすることを可能にする。
統合メモリコントローラ及びグラフィックスを有するプロセッサ
【０１８５】
図１９は、本願発明の複数の実施形態に係るプロセッサ１９００のブロック図であり、プロセッサ１９００は、１つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよい。図１９の複数の実線のボックスは、単一のコア１９０２Ａと、システムエージェント１９１０と、１つ又は複数のバスコントローラユニット１９１６のセットとを有するプロセッサ１９００を図示し、一方、複数の破線のボックスの選択的な追加は、複数のコア１９０２Ａ−Ｎと、システムエージェントユニット１９１０内の１つ又は複数の統合メモリコントローラユニット１９１４のセットと、専用ロジック１９０８とを有する代替的なプロセッサ１９００を図示する。
【０１８６】
それにより、プロセッサ１９００の複数の異なる実装は、１）統合グラフィックス及び／又はサイエンティフィック（スループット）ロジック（１つ又は複数のコアを含み得る）である専用ロジック１９０８と、１つ又は複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、その２つの組み合わせ）であるコア１９０２Ａ−Ｎとを有するＣＰＵ、２）主にグラフィックス及び／又はサイエンティフィック（スループット）向けの多数の特別用途コアであるコア１９０２Ａ−Ｎを有するコプロセッサ、及び３）多数の汎用インオーダコアであるコア１９０２Ａ−Ｎを有するコプロセッサを含み得る。それにより、プロセッサ１９００は、汎用プロセッサ、コプロセッサ、又は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループット多集積コア（ＭＩＣ）コプロセッサ（３０以上のコアを含む）、エンベデッドプロセッサ、又は同様のものなどの専用プロセッサであってよい。プロセッサは、１つ又は複数のチップに実装され得る。プロセッサ１９００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、又はＮＭＯＳなどの多数の処理技術のうちの何れかを用いて、１つ又は複数の基板の一部であってよく、及び／又はその上に実装されてよい。
【０１８７】
メモリ階層は、コア内の１つ又は複数のレベルのキャッシュと、一のセット若しくは１つ又は複数の共有キャッシュユニット１９０６と、統合メモリコントローラユニット１９１４のセットに結合される外部メモリ（図示せず）とを含む。共有キャッシュユニット１９０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、又は他のレベルのキャッシュなどの１つ又は複数の中レベルのキャッシュ、最終レベルキャッシュ（ＬＬＣ）、及び／又はこれらの組み合わせを含み得る。
【０１８８】
一実施形態において、リングベースの相互接続ユニット１９１２が、統合グラフィックスロジック１９０８、共有キャッシュユニット１９０６のセット、及びシステムエージェントユニット１９１０／統合メモリコントローラユニット１９１４を相互接続する一方、複数の代替的な実施形態は、複数のそのようなユニットを相互接続するための任意の数の周知技術を用いてよい。一実施形態において、コヒーレンシは、１つ又は複数のキャッシュユニット１９０６と、コア１９０２Ａ−Ｎとの間で維持される。
【０１８９】
いくつかの実施形態において、１つ又は複数のコア１９０２Ａ−Ｎは、マルチスレッディングできる。システムエージェント１９１０は、コア１９０２Ａ−Ｎを調整及び操作するそれらの構成要素を含む。システムエージェントユニット１９１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含み得る。ＰＣＵは、コア１９０２Ａ−Ｎ及び統合グラフィックスロジック１９０８の電力状態の調整に必要なロジック及び複数の構成要素であってよく、又はそれらを含んでよい。ディスプレイユニットは、１つ又は複数の外部接続表示を駆動するためのものである。
【０１９０】
コア１９０２Ａ−Ｎは、アーキテクチャ命令セットに関して同種又は異種であってよく、すなわち、コア１９０２Ａ−Ｎのうちの２つ以上は、同じ命令セットを実行することが可能であり得る一方、他はその命令セット又は異なる命令セットのサブセットのみを実行可能であり得る。
例示的なコンピュータアーキテクチャ
【０１９１】
図２０−２３は、例示的なコンピュータアーキテクチャのブロック図である。複数のラップトップ、デスクトップ、ハンドヘルド型ＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルド型デバイス及び様々な他の電子デバイス用の当技術分野で知られている複数の他のシステム設計及び構成も適する。概して、プロセッサ及び／又は他の実行ロジックを組み込み可能な多様な複数のシステムまたは複数の電子デバイスは、本明細書に開示されるように、概して適する。
【０１９２】
ここで図２０を参照すると、本願発明の一実施形態に係るシステム２０００のブロック図を示す。システム２０００は、コントローラハブ２０２０に結合される１つ又は複数のプロセッサ２０１０、２０１５を含んでよい。一実施形態において、コントローラハブ２０２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ）２０９０及び入力／出力ハブ（ＩＯＨ）２０５０（複数の別個のチップ上であり得る）を含み、ＧＭＣＨ２０９０は、メモリ２０４０及びコプロセッサ２０４５に結合されたメモリ及びグラフィックスコントローラを含み、ＩＯＨ２０５０は、複数の入力／出力（Ｉ／Ｏ）デバイス２０６０をＧＭＣＨ２０９０に結合させる。代替的に、メモリ及びグラフィックスコントローラのうちの１つ又は両方は、プロセッサ内に統合され（本明細書にて説明されているように）、メモリ２０４０及びコプロセッサ２０４５は、プロセッサ２０１０及び単一のチップ内でＩＯＨ２０５０を有するコントローラハブ２０２０に直接結合される。
【０１９３】
追加のプロセッサ２０１５の選択的な性質は、図２０に破線で示される。各プロセッサ２０１０、２０１５は、本明細書にて説明される１つ又は複数の処理コアを含んでよく、プロセッサ１９００の特定のバージョンであってよい。
【０１９４】
メモリ２０４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、又はその２つの組み合わせであってよい。少なくとも一実施形態において、コントローラハブ２０２０は、フロントサイドバス（ＦＳＢ）などのマルチドロップバス、ＱｕｉｃｋＰａｔｈインターコネクト（ＱＰＩ）などのポイントツーポイントインターフェース、又は同様の接続２０９５を介して、プロセッサ２０１０、２０１５と通信する。
【０１９５】
一実施形態において、コプロセッサ２０４５は、例えば、高スループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、エンベデッドプロセッサ、又は同様のものなどの専用プロセッサである。一実施形態において、コントローラハブ２０２０は、統合グラフィックスアクセラレータを含んでよい。
【０１９６】
物理リソース２０１０、２０１５の間には、アーキテクチャ的、マイクロアーキテクチャ上の、熱的、電力消費の特性及び同様のものを含む様々な利点の基準に関して、様々な差異が存在し得る。
【０１９７】
一実施形態において、プロセッサ２０１０は、一般的な種類のデータ処理オペレーションを制御する複数の命令を実行する。複数の命令内には、コプロセッサ命令が組み込まれ得る。プロセッサ２０１０は、これらのコプロセッサ命令を、取り付けられたコプロセッサ２０４５により実行されるべき種類のものとして認識する。従って、プロセッサ２０１０は、又は他の相互接続コプロセッサバス上でコプロセッサ２０４５にこれらのコプロセッサ命令（又はコプロセッサ命令を表す複数の制御信号）を発行する。コプロセッサ２０４５は、受信されたコプロセッサ命令を受け取って実行する。
【０１９８】
ここで図２１を参照すると、本願発明の実施形態に係る第１のより具体的な例示的システム２１００のブロック図が示される。図２１に示されているように、マルチプロセッサシステム２１００が、ポイントツーポイント相互接続システムであり、第１のプロセッサ２１７０と、ポイントツーポイント相互接続２１５０を介して結合される第２のプロセッサ２１８０とを含む。プロセッサ２１７０及び２１８０のそれぞれは、プロセッサ１９００の特定のバージョンであってよい。本願発明の一実施形態において、プロセッサ２１７０及び２１８０はそれぞれ、プロセッサ２０１０及び２０１５であり、一方、コプロセッサ２１３８は、コプロセッサ２０４５である。別の実施形態において、プロセッサ２１７０及び２１８０はそれぞれ、プロセッサ２０１０及びコプロセッサ２０４５である。
【０１９９】
プロセッサ２１７０及び２１８０は、それぞれが統合メモリコントローラ（ＩＭＣ）ユニット２１７２及び２１８２を含むものとして示されている。プロセッサ２１７０はまた、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インターフェース２１７６及び２１７８を含み、同様に、第２のプロセッサ２１８０は、Ｐ−Ｐインターフェース２１８６及び２１８８を含む。プロセッサ２１７０、２１８０は、ポイントツーポイント（Ｐ−Ｐ）インターフェース２１５０を介して、Ｐ−Ｐインターフェース回路２１７８、２１８８を用いて情報を交換し得る。図２１に示されているように、ＩＭＣ２１７２及び２１８２は、プロセッサを、それぞれのメモリ、すなわち、メモリ２１３２及びメモリ２１３４に結合させ、メモリ２１３２及びメモリ２１３４は、それぞれのプロセッサにローカルに取り付けられる主要メモリの一部であり得る。
【０２００】
プロセッサ２１７０、２１８０はそれぞれ、個々のＰ−Ｐインターフェース２１５２、２１５４を介して、ポイントツーポイントインターフェース回路２１７６、２１９４、２１８６、２１９８を用いて、チップセット２１９０と情報を交換し得る。チップセット２１９０は、高性能インターフェース２１３９を介して、コプロセッサ２１３８と選択的に情報を交換し得る。一実施形態において、コプロセッサ２１３８は、例えば、高スループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、エンベデッドプロセッサ、又は同様のものなどの専用プロセッサである。
【０２０１】
共有キャッシュ（図示せず）は、何れかのプロセッサに又は両方のプロセッサの外部に含まれてよく、Ｐ−Ｐ相互接続を介してプロセッサと接続されてもよく、これにより、プロセッサが低電力モードに置かれた場合にプロセッサの何れか又は両方のローカルキャッシュ情報が、共有キャッシュに格納され得る。
【０２０２】
チップセット２１９０は、インターフェース２１９６を介して第１のバス２１１６に結合され得る。一実施形態において、第１のバス２１１６は、周辺構成要素相互接続（ＰＣＩ）バス、又はＰＣＩエクスプレスバスなどのバス、若しく別の第３世代Ｉ／Ｏ相互接続バスはであり得るが、本願発明の範囲はそのように限定されない。
【０２０３】
図２１に示されているように、様々なＩ／Ｏデバイス２１１４は、第１のバス２１１６を第２のバス２１２０に結合させるバスブリッジ２１１８と共に、第１のバス２１１６に結合され得る。一実施形態において、複数のコプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えば、グラフィックスアクセラレータ又はデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイ、又は他のプロセッサなどの１つ又は複数の追加のプロセッサ２１１５は、第１のバス２１１６に結合される。一実施形態において、第２のバス２１２０は、ローピンカウント（ＬＰＣ）バスであってよい。一実施形態において、様々なデバイスは、例えば、キーボード及び／又はマウス２１２２、通信デバイス２１２７及びディスクドライブ又は命令／コード及びデータ２１３０を含み得る他の大容量ストレージデバイスなどのストレージユニット２１２８を含む第２のバス２１２０に結合され得る。さらに、オーディオＩ／Ｏ２１２４は、第２のバス２１２０に結合され得る。他のアーキテクチャが可能であることに留意されたい。例えば、図２１のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバス又はそのような他のアーキテクチャを実装し得る。
【０２０４】
ここで図２２を参照すると、本願発明の実施形態に係る第２のより具体的な例示的システム２２００のブロック図が示される。図２１及び２２の同様の複数の要素には同様の参照番号が付され、図２１の複数の特定の態様は、図２２の他の態様を曖昧にすることを回避するために、図２２から省略されている。
【０２０５】
図２２は、プロセッサ２１７０、２１８０がそれぞれ、統合メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）２１７２及び２１８２を含み得ることを図示する。それにより、ＣＬ２１７２、２１８２は、統合メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図２２は、メモリ２１３２、２１３４がＣＬ２１７２、２１８２に結合されていることを示しているのみならず、Ｉ／Ｏデバイス２２１４も制御ロジック２１７２、２１８２に結合されていることも示している。レガシＩ／Ｏデバイス２２１５は、チップセット２１９０に結合される。
【０２０６】
ここで図２３を参照すると、本願発明の実施形態に係るＳｏＣ２３００のブロック図が示されている。図１９の同様の複数の要素は、同様の参照番号を有する。また、複数の破線のボックスは、より高度なＳｏＣ上の選択的な特徴である。図２３において、相互接続ユニット２３０２は、１つ又は複数のコア２０２Ａ−Ｎのセット及び共有キャッシュユニット１９０６を含むアプリケーションプロセッサ２３１０と、システムエージェントユニット１９１０と、バスコントローラユニット１９１６と、統合メモリコントローラユニット１９１４と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得る１つ又は複数のコプロセッサ２３２０のセットと、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット２３３０と、直接メモリアクセス（ＤＭＡ）ユニット２３３２と、１つ又は複数の外部ディスプレイに結合するためのディスプレイユニット２３４０とに結合される。一実施形態において、コプロセッサ２３２０は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、エンベデッドプロセッサ、又は同様のものなどの専用プロセッサを含む。
【０２０７】
本明細書に開示される機構の複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装アプローチの組み合わせに実装され得る。本願発明の複数の実施形態は、少なくとも１つのプロセッサ、（揮発性及び不揮発性メモリ及び／又はストレージ要素を含む）ストレージシステム、少なくとも１つの入力デバイス、及び少なくとも１つの出力デバイスを有するプログラマブルシステムを実装する複数のコンピュータプログラム又はプログラムコードとして、実行され得る。
【０２０８】
図２１に図示されているコード２１３０などのプログラムコードは、本明細書にて説明される複数の機能を実行し、出力情報を生成するべく、複数の入力命令に適用され得る。出力情報は、既知の様式で１つ又は複数の出力デバイスに適用され得る。本願の目的のために、処理システムは、例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、専用集積回路（ＡＳＩＣ）、又はマイクロプロセッサなどのプロセッサ、を有する任意のシステムを含む。
【０２０９】
プログラムコードは、処理システムと通信を行うべく、高水準の手順型又はオブジェクト指向プログラミング言語で実装され得る。プログラムコードは、所望の場合には、アセンブリ又は機械言語で実装されてもよい。実際に、本明細書にて説明される機構は、いかなる特定のプログラミング言語の範囲にも限定されない。いかなる場合であっても、言語は、コンパイラ型又はインタープリタ型言語であってよい。
【０２１０】
少なくとも一実施形態の１つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的な複数の命令によって実装されてよく、これらは、機械によって読み取られた場合に、機械にロジックを製造させることにより、本明細書にて説明される複数の技術を実行する。「ＩＰコア」として知られているそのような表現は、有形で機械可読メディアに格納されてよく、様々な顧客又は製造施設に供給されて、実際にロジック又はプロセッサを作成する製造機械にロードされてもよい。
【０２１１】
そのような機械可読ストレージメディアは、限定的なものではないが、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、書き換え可能コンパクトディスク（ＣＤ−ＲＷ）及び光磁気ディスクを含む任意の他の種類のディスク、リードオンリメモリ（ＲＯＭ）などの半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）フラッシュメモリ、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、位相変化メモリ（ＰＣＭ）、磁気または光カードなどのランダムアクセスメモリ（ＲＡＭ）、又は複数の電子的命令を格納するために適した任意の他の種類のメディアなどのストレージ媒体を含む、機械又はデバイスによって製造若しくは形成される複数の物品の非一時的で有形の構成を含んでよい。
【０２１２】
従って、本願発明の複数の実施形態はまた、複数の命令を含み、又は本明細書にて説明される構造、回路、装置、プロセッサ及び／又はシステム特徴を定義するハードウェア記述言語（ＨＤＬ）などの設計データを含む非一時的な有形の機械可読媒体を含む。そのような複数の実施形態はまた、プログラム製品として称され得る。
エミュレーション（２進数変換、コードモーフィングなどを含む）
【０２１３】
いくつかの場合において、命令変換器は、命令を、ソース命令セットから、ターゲット命令セットに変換するのに用いられ得る。例えば、命令変換器は、コアにより処理されるべく、命令をトランスレートし（例えば、静的な２進数変換、動的なコンパイルを含む動的な２進数変換を用いて）、モーフィングし、エミュレートし、あるいは１つ又は複数の他の命令に変換し得る。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせに実装され得る。命令変換器は、プロセッサ上、プロセッサ外、又は部分的にプロセッサ上であり部分的にプロセッサ外であってよい。
【０２１４】
図２４は、本願発明の複数の実施形態に係る、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の使用を対比させるブロック図である。図示された実施形態において、命令変換器はソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせに実装されてもよい。図２４は、高水準言語２４０２のプログラムがｘ８６コンパイラ２４０４を用いてコンパイルされて、少なくとも１つのｘ８６命令セットコア２４１６を有するプロセッサによりネイティブに実行され得るｘ８６バイナリコード２４０６を生成し得ることを示す。少なくとも１つのｘ８６命令セットコア２４１６を有するプロセッサは、少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサと実質的に同じ結果を達成するために、（１）インテル（登録商標）ｘ８６命令セットコアの命令セットの大部分、又は（２）複数のオブジェクトコードバージョンの複数のアプリケーション又は少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサ上で実行することを目標とする他のソフトウェアを、互換性を有するように実行あるいは処理することにより、少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサと同じ機能を実質的に実行できる任意のプロセッサを表す。ｘ８６コンパイラ２４０４は、追加のリンク処理を用いて又は用いずに、少なくとも１つのｘ８６命令セットコア２４１６を有するプロセッサ上で実行されることができるｘ８６バイナリコード２４０６（例えば、オブジェクトコード）を生成するよう動作可能なコンパイラを表す。同様に、図２４は、少なくとも１つのｘ８６命令セットコアを有しないプロセッサ２４１４（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セットを実行する、及び／又はカリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）によりネイティブに実行され得る代替的な命令セットバイナリコード２４１０を生成すべく、高水準言語２４０２のプログラムが代替的な命令セットコンパイラ２４０８を用いてコンパイルされ得ることを示す。命令変換器２４１２は、ｘ８６バイナリコード２４０６を、ｘ８６命令セットコア２４１４を有しないプロセッサによりネイティブに実行されるコードに変換するのに用いられる。この変換済みコードは、これが可能な命令変換器の製造が難しいため、代替的な命令セットバイナリコード２４１０と同じである可能性が高いわけではないが、しかし、変換済みコードは、一般的な動作を遂行して代替的な命令セットからの命令で構成されるであろう。それにより、命令変換器２４１２は、エミュレーション、シミュレーション、又は他の処理を介して、プロセッサ若しくはｘ８６命令セットプロセッサ又はコアを有しない他の電子デバイスがｘ８６バイナリコード２４０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
【０２１５】
図３−１３のうちの何れかに関して説明されている複数の構成要素、特徴、及び詳細はまた、図１−２のうちの何れかに選択的に用いられ得る。さらに、本明細書にて説明される複数の装置のうちの何れかに関して本明細書にて説明される複数の構成要素、特徴、及び詳細はまた、複数の実施形態においてそのような装置により、及び／又はそれを用いて実行され得る本明細書にて説明される複数の方法のうちの何れかに選択的に用いられてよく、及び／又はそれらのうちの何れかに適用されてよい。
【０２１６】
本明細書にて説明される複数のプロセッサの何れかは、コンピュータシステム又は本明細書に開示される他のシステムのうちの何れかに含まれ得る。いくつかの実施形態において、複数の命令は、本明細書に開示される複数の命令フォーマットに関して説明されている複数の特徴及び詳細を用いて符号化され得る（例えば、ＶＥＸ、ＥＶＥＸなど）が、本願発明の範囲はそのように限定されない。
【０２１７】
詳細の説明及び特許請求の範囲において、「結合」及び／又は「接続」という用語、並びにこれらの派生語は、用いられ得る。これらの用語は、互いに同義語であることを意図されていない。むしろ、複数の実施形態において、「接続」は、２つ以上の要素が互いに直接物理的及び／又は電気的に接触することを示すのに用いられてよい。「結合」は２つ以上の要素が互いに直接物理的及び／又は電気的に接触することを意味し得る。しかし、「結合」はまた、２つ以上の要素が互いに直接接触しないが、それでも互いに協働又は相互作用することを意味し得る。例えば、実行ユニットは、１つ又は複数の介在構成要素を介して、レジスタ及び／又は復号ユニットに結合され得る。複数の図面において、複数の矢印が複数の接続及び結合を示すのに用いられる。
【０２１８】
「及び／又は」という用語は用いられていてよい。本明細書に用いられているように、「及び／又は」という用語は、一方又は他方、若しくは両方を意味する（例えば、Ａ及び／又はＢはＡ又はＢ若しくはＡ及びＢの両方を意味する）。
【０２１９】
上の説明において、複数の具体的な詳細は、複数の実施形態の十分な理解を提供するために記載されている。しかし、他の複数の実施形態はこれらの具体的な詳細の一部を用いずに実施され得る。本願発明の範囲は、上で提供された複数の特定の例により定められず、以下の特許請求の範囲によってのみ定まる。他の例では、複数の周知回路、構造、デバイス、及びオペレーションは、説明の理解を曖昧にすることを回避するために、ブロック図の形式で及び／又は細部を有さずに示されている。適切と考慮され、別段に特定されない限り、又は明確に明白な場合を除き、参照番号、又は参照番号の末尾が、同様又は同じ特性を選択的に有し得る対応する又は類似の要素を示すべく、複数の図面の間に繰り返されている。様々なオペレーション及び方法は説明されている。方法のいくつかは、フロー図において比較的基本な形式で説明されているが、複数の動作は、選択的に追加されてよく、及び／又は方法から取り除かれてよい。
【０２２０】
一定の動作は、ハードウェア要素により実行されてよく、又は機械実行可能な又は回路実行可能な命令により具現化されてよく、動作を実行する複数の命令でプログラミングされる機械、回路、又はハードウェア要素（例えば、プロセッサ、プロセッサの一部、回路など）を生じさせ、及び／又はもたらすのに用いられてよい。複数の動作はまた、ハードウェアとソフトウェアとの組み合わせにより選択的に実行され得る。プロセッサ、機械、回路、又はハードウェアが、命令を実行及び／又は処理してその命令に応じて結果を格納するよう動作可能な具体的又は特定の回路又は他のロジック（例えば、ファームウェア及び／又はソフトウェアと潜在的に組み合わせたハードウェア）を含んでよい。
【０２２１】
いくつかの実施形態は、機械可読媒体を含む製造品（例えば、コンピュータプログラム製品）を含む。媒体は、機械により可読な形成で情報を提供し、例えば、格納する機構を含み得る。機械可読媒体は、機械により実行された場合及び／又は実行されたとき、機械に、複数の動作、方法、又は本明細書に開示される技術のうちの１つを実行させ及び／又は機械の実行をもたらすよう動作可能な命令又は命令のシーケンスを提供又はそれに格納させ得る。機械可読媒体は、本明細書に開示される複数の命令の１つ又は複数の複数の実施形態を格納してよく、あるいは提供してよい。
【０２２２】
いくつかの実施形態において、機械可読媒体は、有形及び／又は非一時的機械可読記憶媒体を含んでよい。例えば、有形及び／又は非一時的機械可読記憶媒体は、フロッピー（登録商標）ディスケット、光記憶媒体、光ディスク、光学式データ記憶デバイス、ＣＤ−ＲＯＭ、磁気ディスク、光磁気ディスク、リードオンリメモリ（ＲＯＭ）、プログラム可能ＲＯＭ（ＰＲＯＭ）、消去可能プログラム可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラム可能ＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶デバイス、非一時的メモリ、非一時的データ記憶デバイス、又は同様のものを含み得る。非一時的機械可読記憶媒体は、一時的な伝搬信号を含まない。別の実施形態において、機械可読媒体は、例えば、電気的、光学的、音響的、若しくは、搬送波、赤外線信号、デジタル信号、又は同様のもののような他の形態の伝搬信号などの一時的な機械可読通信媒体を含んでよい。
【０２２３】
適した機械の複数の例は、汎用プロセッサ、専用プロセッサ、命令処理装置、デジタル論理回路、集積回路、又は同様のものを含むが、これらに限定されない。適した機械のさらに他の例は、コンピューティングデバイス、若しくはプロセッサ、命令処理装置、デジタル論理回路、又は集積回路を含む他の電子デバイスを含む。そのようなコンピューティングデバイス及び電子デバイスの複数の例は、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス（例えば、ルータ及びスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、メディアプレイヤ、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラを含むが、これらに限定されない。
【０２２４】
本明細書の全体に渡って参照し、例えば、「一実施形態」、「実施形態」、「１つ又は複数の実施形態」、「いくつかの実施形態」は、特定の特徴が本願発明の実施に含まれ得るが、必ずしも必須ではないことを示す。同様に、説明において、開示の合理化及び様々な発明の態様の理解の助けの目的のために、様々な特徴は、場合によっては、単一の実施形態、図面、又はこれらの説明に共にグループ化される。しかし、本開示の方法は、本発明が各請求項において明確に記載されたものよりも多くの特徴を必要とするという意図を反映するものと解釈されるべきではない。むしろ、以下の特許請求の範囲が反映している通り、本願発明の態様は、単一の開示実施形態の全ての特徴よりも少ない特徴に存する。それにより、詳細な説明に続く特許請求の範囲は、これにより詳細な説明に明確に組み込まれ、各請求項は、本願発明の別個の実施形態として独立している。
例示的な実施形態
【０２２５】
以下の複数の例は、さらなる実施形態に関する。複数の例における具体的事柄は、１つ又は複数の実施形態の任意の箇所に用いられてよい。
【０２２６】
例１は、複数のレジスタと、３ソース浮動小数点加算命令を復号する復号ユニットとを含むプロセッサである。３ソース浮動小数点加算命令は、少なくとも第１の浮動小数点データ要素を含む第１のソースオペランドを示し、少なくとも第２の浮動小数点データ要素を含む第２のソースオペランドを示し、少なくとも第３の浮動小数点データ要素を含む第３のソースオペランドを示す。実行ユニットは、複数の複数のレジスタと復号ユニットと結合される。実行ユニットは、３ソース浮動小数点加算命令に応じて、３ソース浮動小数点加算命令により示されるべきデスティネーションオペランドに結果を格納する。結果は、少なくとも第１、第２、及び第３の浮動小数点データ要素に対応する結果浮動小数点データ要素を含む。結果浮動小数点データ要素は、第１の浮動小数点の丸められた和を含む。第１の浮動小数点の丸められた和は、第２の浮動小数点の丸められた和と第３の浮動小数点データ要素との相加的組み合わせを表す。第２の浮動小数点の丸められた和は、第１の浮動小数点データ要素と第２の浮動小数点データ要素との相加的組み合わせを表す。
【０２２７】
例２は、例１のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、第１のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第１のビットと、第２のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第２のビットと、第３のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第３のビットとを有する３ソース浮動小数点加算命令を復号する。
【０２２８】
例３は、例２のプロセッサを含み、当該プロセッサにおいて、第１、第２、及び第３のビットは、３ソース浮動小数点加算命令の即値のビットを有する。
【０２２９】
例４は、例１のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、第１のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する３ソース浮動小数点加算命令を復号する。
【０２３０】
例５は、例４のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、第２のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する３ソース浮動小数点加算命令を復号する。
【０２３１】
例６は、例５のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、第３のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する３ソース浮動小数点加算命令を復号する。
【０２３２】
例７は、例１から６の何れか１つに記載のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、異なる時間でパックドデータを格納することもできるそれぞれのパックドデータレジスタに各々が格納されるスカラデータ要素として、第１、第２、及び第３の浮動小数点データ要素をそれぞれ含む第１、第２、及び第３のソースオペランドを示す３ソース浮動小数点加算命令を復号する。また、３ソース浮動小数点加算命令は、第１、第２、及び第３の浮動小数点データ要素に対応し、それらに対して３ソース浮動小数点加算命令のオペレーションをプレディケートするマスク要素を含むソースプレディケートマスクを示す。
【０２３３】
例８は、例１から６のうちの何れか１つに記載のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、第１の浮動小数点データ要素を含む第１の複数のパックドデータ要素と、第２の浮動小数点データ要素を含む第２の複数のパックドデータ要素と、第３の浮動小数点データ要素を含む第３の複数のパックドデータ要素とをそれぞれ有する第１、第２、及び第３のソースオペランドを示す３ソース浮動小数点加算命令を復号する。
【０２３４】
例９は、例８のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、複数のマスク要素を含むソースパックドデータオペレーションマスクを示す３ソース浮動小数点加算命令を復号する。マスク要素のそれぞれは、第１、第２、及び第３のソースオペランドの対応する浮動小数点データ要素に対応し、それらに対して３ソース浮動小数点加算命令のパックドデータオペレーションをプレディケートする。
【０２３５】
例１０は、例１から６のうちの何れか１つに記載のプロセッサを含む、当該プロセッサにおいて、実行ユニットは、第１及び第２の浮動小数点の丸められた和に対して丸めモードを用いており、その丸めモードは、（１）最近接偶数への丸め、（２）負の無限大への丸め、（３）正の無限大への丸め、及び（４）切り捨てによるゼロへの丸めのうちの１つである。復号ユニットはまた、丸めモードを指定する３ソース浮動小数点加算命令を選択的に復号する。また、命令により選択的に指定される丸めモードは、プロセッサの浮動小数点制御レジスタに丸めモードをオーバーライドする。
【０２３６】
例１１は例１から６のうちの何れか１つに記載のプロセッサを含み、当該プロセッサにおいて、実行ユニットは、第１及び第２の浮動小数点データ要素を受信し、第２の浮動小数点の丸められた和を出力するよう結合される第１の浮動小数点加算器を含む。実行ユニットはまた、第３の浮動小数点データ要素及び第２の浮動小数点の丸められた和を受信するよう結合される第２の浮動小数点加算器を含み、第２の浮動小数点加算器は、第１の浮動小数点の丸められた和を出力する。
【０２３７】
例１２は、例１１のプロセッサを含み、予約ステーションと、当該予約ステーションに結合されるバッファとをさらに含む。バッファは、３ソース浮動小数点加算命令に対応する制御信号を、予約ステーションから受信し、第１の浮動小数点加算器が第２の浮動小数点の丸められた和を生成する期間において制御信号を格納する。バッファは、その期間後に、第２の浮動小数点加算器に結合されて制御信号を第２の浮動小数点加算器に提供する。
【０２３８】
例１３は、例１から６のうちの何れか１つに記載のプロセッサを含み、当該プロセッサにおいて、実行ユニットは、出力部、入力部、及び、当該出力部を当該入力部に結合させる回路を含む。
【０２３９】
例１４は、例１から６のうちの何れか１つに記載のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、第３のソースオペランドがｒｅｇ＿ｆｉｅｌｄに符号化されるＥＶＥＸ符号化を有する３ソース浮動小数点加算命令を復号する。また、選択的に、第１のソースオペランドは、ＶＥＸ．ｖｖｖｖに符号化される。また、選択的に、第２のソースオペランドは、８ビットの即値の一部及びｒｍ＿ｆｉｅｌｄのうちの１つを用いて符号化される。
【０２４０】
例１５は、プロセッサにおける方法であり、当該方法は、３ソース浮動小数点加算命令を受信する段階を含む。３ソース浮動小数点加算命令は、少なくとも第１の浮動小数点データ要素を含む第１のソースオペランドを示し、少なくとも第２の浮動小数点データ要素を含む第２のソースオペランドを示し、少なくとも第３の浮動小数点データ要素を含む第３のソースオペランドを示す。方法はまた、３ソース浮動小数点加算命令に応じてデスティネーションオペランドに結果を格納する段階を含む。デスティネーションオペランドは、３ソース浮動小数点加算命令により示される。結果は、少なくとも、第１、第２、及び第３の浮動小数点データ要素に対応する結果浮動小数点データ要素を含む。結果浮動小数点データ要素は、第１の浮動小数点の丸められた和を含む。第１の浮動小数点の丸められた和は、第２の浮動小数点の丸められた和と第３の浮動小数点データ要素との相加的組み合わせを表す。第２の浮動小数点の丸められた和は、第１の浮動小数点データ要素と第２の浮動小数点データ要素との相加的組み合わせを表す。
【０２４１】
例１６は、例１５の方法を含み、当該方法において、受信する段階は、第１のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する３ソース浮動小数点加算命令を受信する段階を含む。選択的に、命令はまた、第２のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する。
【０２４２】
例１７は、例１５の方法を含み、当該方法において、受信する段階は、第１及び第２の浮動小数点の丸められた和に対して用いられる丸めモードを指定する３ソース浮動小数点加算命令を受信する段階を含む。
【０２４３】
例１８は例１５の方法を含み、当該方法において、受信する段階は、それぞれのパックドデータレジスタに各々が格納されるスカラデータ要素として、第１、第２、及び第３の浮動小数点データ要素をそれぞれ有する第１、第２、及び第３のソースオペランドを示す３ソース浮動小数点加算命令を受信する段階を含む。３ソース浮動小数点加算命令はまた、ソースプレディケートマスクを選択的に示し得る。
【０２４４】
例１９は、相互接続と当該相互接続に結合されるプロセッサとを含む、複数の命令を処理するシステムである。当該プロセッサは、３ソース浮動小数点加算命令を受信する。３ソース浮動小数点加算命令は、少なくとも第１の浮動小数点データ要素を含む第１のソースオペランドを示し、少なくとも第２の浮動小数点データ要素を含む第２のソースオペランドを示し、少なくとも第３の浮動小数点データ要素を含む第３のソースオペランドを示す。プロセッサは、３ソース浮動小数点加算命令に応じて、３ソース浮動小数点加算命令により示されるべきデスティネーションオペランドに結果を格納する。結果は、少なくとも、第１、第２、及び第３の浮動小数点データ要素に対応する結果浮動小数点データ要素を含む。結果浮動小数点データ要素は、第１の浮動小数点の丸められた和を含む。第１の浮動小数点の丸められた和は、第２の浮動小数点の丸められた和と第３の浮動小数点データ要素との相加的組み合わせを表す。第２の浮動小数点の丸められた和は、第１の浮動小数点データ要素と第２の浮動小数点データ要素との相加的組み合わせを表す。システムはまた、相互接続に結合されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）を選択的に含む。
【０２４５】
例２０は、例１９のシステムを含み、当該システムにおいて、３ソース浮動小数点加算命令は、第１のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する。
【０２４６】
例２１は、機械可読メディアを含む製造品を備え、当該製造品は選択的に、非一時的機械可読記憶媒体であってよい。当該媒体は、３ソース浮動小数点加算命令を格納する。３ソース浮動小数点加算命令は、少なくとも第１の浮動小数点データ要素を含む第１のソースオペランドを示し、少なくとも第２の浮動小数点データ要素を含む第２のソースオペランドを示し、少なくとも第３の浮動小数点データ要素を含む第３のソースオペランドを示す。３ソース浮動小数点加算命令は、機械により実行された場合、当該機械に、３ソース浮動小数点加算命令に応じてデスティネーションオペランドに結果を格納することを含む複数の動作を実行させる。デスティネーションオペランドは、３ソース浮動小数点加算命令により示される。結果は、少なくとも、第１、第２、及び第３の浮動小数点データ要素に対応する結果浮動小数点データ要素を含む。結果浮動小数点データ要素は、第１の浮動小数点の丸められた和を含み、第１の浮動小数点の丸められた和は、第２の浮動小数点の丸められた和と第３の浮動小数点データ要素との相加的組み合わせを表す。第２の浮動小数点の丸められた和は、第１の浮動小数点データ要素と第２の浮動小数点データ要素との相加的組み合わせを表す。
【０２４７】
例２２は、例２１の製造品を含み、当該製造品において、３ソース浮動小数点加算命令は、第１のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する。
【０２４８】
例２３は、複数のレジスタと、３ソース浮動小数点加算命令を復号する復号ユニットとを含むプロセッサである。３ソース浮動小数点加算命令は、少なくとも第１の浮動小数点データ要素を含む第１のソースオペランドを示し、少なくとも第２の浮動小数点データ要素を含む第２のソースオペランドを示し、少なくとも第３の浮動小数点データ要素を含む第３のソースオペランドを示す。命令はまた、第１のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第１のビットを選択的に有し、及び／又は第２のソースオペランドの１つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第２のビットを選択的に有する。実行ユニットは、複数のレジスタと復号ユニットとに結合される。実行ユニットは、３ソース浮動小数点加算命令に応じて、３ソース浮動小数点加算命令により示されるべきデスティネーションオペランドに結果を格納する。結果は、少なくとも、第１、第２、及び第３の浮動小数点データ要素に対応する結果浮動小数点データ要素を含む。結果浮動小数点データ要素は、第１、第２、及び第３の浮動小数点データ要素の相加的組み合わせを表す浮動小数点の丸められた和を含む。
【０２４９】
例２４は、例２３のプロセッサを含み、当該プロセッサにおいて、浮動小数点の丸められた和は、別の浮動小数点の丸められた和の相加的組み合わせを表す。
【０２５０】
例２５は、例１５から１８のうちの何れかに記載の方法を実行するよう動作可能なプロセッサ又は他の装置を備える。
【０２５１】
例２６は、例１５から１８のうちの何れかに記載の方法を実行するための手段を含むプロセッサ又は他の装置を備える。
【０２５２】
例２７は、例１５から１８のうちの何れかに記載の方法を実行する、複数のモジュール、ユニット、ロジック、回路、手段、又はこれらの組み合わせを含むプロセッサを備える。
【０２５３】
例２８は、相互接続と、当該相互接続に結合されるプロセッサと、ＤＲＡＭから選択される、当該相互接続に結合される少なくとも１つの構成要素と、グラフィックスチップと、無線通信チップと、相変化メモリと、ビデオカメラと、コンピュータシステム又は他の電子デバイスとを含むコンピュータシステム又は他の電子デバイスを備え、例１５から１８のうちの何れかに記載の方法を実行する。
【０２５４】
例２９は、プロセッサ、コンピュータシステム、又は他の機械により実行された場合及び／又は実行されたとき、当該機械に例１５から１８のうちの何れかに記載の方法を実行させるよう動作可能な命令を選択的に格納する、あるいは提供する選択的に非一時的機械可読記憶媒体である機械可読媒体を備える。
【０２５５】
例３０は、本明細書にて実質的に説明されるような１つ又は複数の動作又は任意の方法を実行するよう動作可能なプロセッサ又は他の装置を備える。
【０２５６】
例３１は、本明細書にて実質的に説明されるような１つ又は複数の動作又は任意の方法を実行するための手段を含むプロセッサ又は他の装置を備える。
【０２５７】
例３２は、本明細書にて実質的に説明されるような任意の命令を実行するよう動作可能なプロセッサ又は他の装置を備える。
【０２５８】
例３３は、本明細書にて実質的に説明されるような命令のうちの何れかを実行するための手段を含むプロセッサ又は他の装置を備える。
【０２５９】
例３４は、第１の命令セットに属する第１の命令を第２の命令セットの１つ又は複数の命令に変換する段階を含む方法を備え、当該第１の命令は、本明細書に実質的に開示されるような複数の命令のうちの何れかであってよい。方法はまた、第２の命令セットの１つ又は複数の命令を復号し、プロセッサ上で実行する段階を含む。実行する段階は、結果をデスティネーションに格納する段階を含む。結果は、本明細書に実質的に開示される、第１の命令に関する複数の結果のうちの何れかを含み得る。
【０２６０】
例３５は、第１の命令セットの複数の命令を復号するよう動作可能な復号ユニットを含むプロセッサ又は他の装置を備える。復号ユニットは、本明細書に実質的に開示されるような複数の命令のうちの何れかであってよく第２の命令セットに属する第１の命令をエミュレートする１つ又は複数の命令を受信する。プロセッサ又は他の装置はまた、第１の命令セットの１つ又は複数の命令を実行するべく、復号ユニットに結合される１つ又は複数の実行ユニットを備える。１つ又は複数の実行ユニットは、第１の命令セットの１つ又は複数の命令に応じてデスティネーションに結果を格納するよう動作可能である。結果は、本明細書に実質的に開示される第１の命令に関する複数の結果のうちの何れかを含んでよい。
【０２６１】
例３６は、第１の命令セットの複数の命令を復号するよう動作可能な復号ユニットを含み、１つ又は複数の実行ユニットを含むプロセッサを有するコンピュータシステム又は他の電子デバイスを備える。コンピュータシステムはまた、プロセッサに結合されるストレージデバイスを備える。ストレージデバイスは、第１の命令を格納し、第１の命令は、本明細書に実質的に開示される複数の命令の何れかであってよく、第２の命令セットに属する。ストレージデバイスはまた、複数の命令を格納して、第１の命令を第１の命令セットの１つ又は複数の命令に変換する。第１の命令セットの１つ又は複数の命令は、プロセッサにより実行された場合、当該プロセッサに、結果をデスティネーションに格納させるよう動作可能である。結果は、本明細書に実質的に開示される第１の命令に関する複数の結果のうちの何れかを含み得る。
【図１】
0006371855.tif 000007
【図２】
0006371855.tif 000008
【図３】
0006371855.tif 000009
【図４】
0006371855.tif 000010
【図５】
0006371855.tif 000011
【図６】
0006371855.tif 000012
【図７】
0006371855.tif 000013
【図８】
0006371855.tif 000014
【図９】
0006371855.tif 000015
【図１０】
0006371855.tif 000016
【図１１】
0006371855.tif 000017
【図１２】
0006371855.tif 000018
【図１３】
0006371855.tif 000019
【図１４Ａ】
0006371855.tif 000020
【図１４Ｂ】
0006371855.tif 000021
【図１５Ａ】
0006371855.tif 000022
【図１５Ｂ】
0006371855.tif 000023
【図１５Ｃ】
0006371855.tif 000024
【図１５Ｄ】
0006371855.tif 000025
【図１６】
0006371855.tif 000026
【図１７Ａ】
0006371855.tif 000027
【図１７Ｂ】
0006371855.tif 000028
【図１８Ａ】
0006371855.tif 000029
【図１８Ｂ】
0006371855.tif 000030
【図１９】
0006371855.tif 000031
【図２０】
0006371855.tif 000032
【図２１】
0006371855.tif 000033
【図２２】
0006371855.tif 000034
【図２３】
0006371855.tif 000035
【図２４】
0006371855.tif 000036