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