(57)【要約】      （修正有）【課題】ベクトルメモリアクセス命令に応答して、メモリの限定範囲のみのメモリロケーションにアクセスする。【解決手段】プロセッサ１００が、複数のパックドデータレジスタ１０７を備え、これらのパックドデータレジスタと結合された実行ロジック１０９も備える。この実行ロジックは、限定範囲ベクトルメモリアクセス命令１０３に応答して動作可能であり、８ビットメモリインデックス及び１６ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示す。実行ロジックは、限定範囲ベクトルメモリアクセス命令に応答して、メモリの限定範囲のみのメモリロケーションにアクセスするように動作可能である。【選択図】図１
2014182807.tif 000002
【特許請求の範囲】
【請求項１】
複数のパックドデータレジスタと、
前記複数のパックドデータレジスタと結合されたユニットであって、８ビットメモリインデックス及び１６ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示す限定範囲ベクトルメモリアクセス命令に応答して動作可能であり、前記限定範囲ベクトルメモリアクセス命令に応答してメモリの限定範囲内のみのメモリロケーションにアクセスするように動作可能であるユニットと、
を備える、プロセッサ。
【請求項２】
前記限定範囲ベクトルメモリアクセス命令は、８ビットメモリインデックスを含む前記ソースパックドメモリインデックスを示す、請求項１に記載のプロセッサ。
【請求項３】
前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、２５６バイトのみを含む前記限定範囲内のメモリロケーションにアクセスする、請求項１または２に記載のプロセッサ。
【請求項４】
前記限定範囲ベクトルメモリアクセス命令は、少なくとも３２個のメモリインデックスを含む前記ソースパックドメモリインデックスを示す、請求項１から３のいずれか一項に記載のプロセッサ。
【請求項５】
前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、少なくとも３２ビットのメモリアドレスを有する前記メモリの前記限定範囲にアクセスする、請求項１から４のいずれか一項に記載のプロセッサ。
【請求項６】
前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、
前記メモリインデックスのそれぞれを符号拡張し、
前記符号拡張されたメモリインデックスのそれぞれにスケールファクターを適用する、
請求項５に記載のプロセッサ。
【請求項７】
前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、前記複数のパックドメモリインデックスのうちの一メモリインデックスによって示されるメモリアドレスにおける少なくとも１つのデータ要素と、前記複数のパックドメモリインデックスのうちの一メモリインデックスによって示されないメモリアドレスにおける少なくとも１つのデータ要素とをロードする多重データ要素ロードを実行する、請求項１から６のいずれか一項に記載のプロセッサ。
【請求項８】
前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、前記メモリから前記プロセッサの記憶ロケーションに前記限定範囲全体をロードする、請求項１から７のいずれか一項に記載のプロセッサ。
【請求項９】
前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、
複数のデータ要素をロードする多重データ要素ロードを実行し、
（ａ）前記限定範囲ベクトルメモリアクセス命令がパックドデータ演算マスクを示していないとき、及び（ｂ）前記限定範囲ベクトルメモリアクセス命令がパックドデータ演算マスクを示しているが、該パックドデータ演算マスクの対応するマスク要素がマスクされていないときの一方であるとき、複数のロードされた前記データ要素のうちの第２のものを前記限定範囲ベクトルメモリアクセス命令によって示されるデスティネーション記憶ロケーションにストアすることなく、前記複数のロードされたデータ要素のうちの第１のものを前記デスティネーション記憶ロケーションにストアする、
請求項１から８のいずれか一項に記載のプロセッサ。
【請求項１０】
前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、前記メモリから前記プロセッサの記憶ロケーションに前記限定範囲全体をロードし、前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、前記メモリインデックスに基づいて前記限定範囲ベクトルメモリアクセス命令によって示されるデスティネーション記憶ロケーションに前記限定範囲全体のデータ要素のサブセットを選択的に移動させる、請求項１から９のいずれか一項に記載のプロセッサ。
【請求項１１】
前記限定範囲ベクトルメモリアクセス命令は、デスティネーション記憶ロケーションを示し、前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、パックドデータ結果を前記デスティネーション記憶ロケーションにストアし、前記パックドデータ結果は、それぞれ対応するメモリインデックスによって示される前記限定範囲内のメモリロケーションからの複数のデータ要素を有する、請求項１から１０のいずれか一項に記載のプロセッサ。
【請求項１２】
前記限定範囲ベクトルメモリアクセス命令は、複数のデータ要素を有するソースパックドデータを示し、前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、前記ソースパックドデータの前記複数のデータ要素の各データ要素を、対応するメモリインデックスによって示される前記限定範囲内のメモリロケーションに書き込む、請求項１から１１のいずれか一項に記載のプロセッサ。
【請求項１３】
前記限定範囲ベクトルメモリアクセス命令は、パックドデータ演算マスクを示す、請求項１から１２のいずれか一項に記載のプロセッサ。
【請求項１４】
限定範囲ベクトルメモリアクセス命令を受信することであって、該限定範囲ベクトルメモリアクセス命令は、８ビットメモリインデックス及び１６ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示すことと、
前記限定範囲ベクトルメモリアクセス命令に応答して、メモリの限定範囲内のみのメモリロケーションにアクセスすることと、
を含む、プロセッサにおける方法。
【請求項１５】
前記受信することは、８ビットメモリインデックスを含む前記ソースパックドメモリインデックスを示す前記限定範囲ベクトルメモリアクセス命令を受信することを含む、請求項１４に記載の方法。
【請求項１６】
前記アクセスすることは、２５６バイトからなる前記限定範囲内のメモリロケーションにアクセスすることを含む、請求項１４または１５に記載の方法。
【請求項１７】
前記受信することは、デスティネーション記憶ロケーションを示す前記限定範囲ベクトルメモリアクセス命令を受信することを含み、前記方法は、前記限定範囲ベクトルメモリアクセス命令に応答して、パックドデータ結果を前記デスティネーション記憶ロケーションにストアすることを更に含み、前記パックドデータ結果は、それぞれ対応するメモリインデックスによって示される前記限定範囲内のメモリロケーションからの複数のデータ要素を有する、請求項１４から１６のいずれか一項に記載の方法。
【請求項１８】
前記受信することは、複数のデータ要素を有するソースパックドデータを示す前記限定範囲ベクトルメモリアクセス命令を受信することを含み、前記アクセスすることは、前記限定範囲ベクトルメモリアクセス命令に応答して、前記ソースパックドデータの前記複数のデータ要素の各データ要素を、対応するメモリインデックスによって示される前記限定範囲内のメモリロケーションに書き込むことを含む、請求項１４から１７のいずれか一項に記載の方法。
【請求項１９】
前記アクセスすることは、少なくとも３２ビットメモリアドレスを用いてアクセスすることを含む、請求項１４から１８のいずれか一項に記載の方法。
【請求項２０】
前記アクセスすることは、前記複数のパックドメモリインデックスのうちの一メモリインデックスによって示されるメモリアドレスにおける少なくとも１つのデータ要素と、前記複数のパックドメモリインデックスのうちの一メモリインデックスによって示されないメモリアドレスにおける少なくとも１つのデータ要素とをロードすることを含む多重データ要素ロードを実行することを含む、請求項１４から１９のいずれか一項に記載の方法。
【請求項２１】
複数のデータ要素をロードする多重データ要素ロードを実行することと、
（ａ）前記限定範囲ベクトルメモリアクセス命令がパックドデータ演算マスクを用いないとき、及び（ｂ）前記限定範囲ベクトルメモリアクセス命令がパックドデータ演算マスクを用いるが、該パックドデータ演算マスクの対応するマスク要素がマスクされていないときの一方であるとき、複数のロードされた前記データ要素のうちの第２のものを前記限定範囲ベクトルメモリアクセス命令によって示されたデスティネーション記憶ロケーションにストアすることなく、前記複数のロードされたデータ要素のうちの第１のものを前記デスティネーション記憶ロケーションにストアすることと、
を更に含む、請求項１４から２０のいずれか一項に記載の方法。
【請求項２２】
命令を処理するシステムであって、
相互接続部と、
前記相互接続部と結合されたプロセッサと、
前記相互接続部と結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）と
を備え、
該ＤＲＡＭは、限定範囲ベクトルメモリアクセス命令をストアし、該限定範囲ベクトルメモリアクセス命令は、８ビットメモリインデックス及び１６ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示し、前記限定範囲ベクトルメモリアクセス命令は、前記プロセッサによって実行されると、メモリの限定範囲内のみのメモリロケーションにアクセスすることを含む演算を前記プロセッサに実行させるように動作可能である、システム。
【請求項２３】
前記限定範囲ベクトルメモリアクセス命令は、８ビットメモリインデックスを含む前記ソースパックドメモリインデックスを示し、前記限定範囲ベクトルメモリアクセス命令は、前記プロセッサによって実行されると、前記プロセッサに、少なくとも３２ビットのメモリアドレスを有する前記限定範囲にアクセスさせるように動作可能である、請求項２２に記載のシステム。
【請求項２４】
機械により実行されると、
限定範囲ベクトルメモリアクセス命令をストアする手順と、
該限定範囲ベクトルメモリアクセス命令は、８ビットメモリインデックス及び１６ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示し、前記限定範囲ベクトルメモリアクセス命令は、モリの限定範囲内のみのメモリロケーションにアクセスする手順と
を前記機械に実行させる、プログラム。
【請求項２５】
前記限定範囲ベクトルメモリアクセス命令は、８ビットメモリインデックスを含む前記ソースパックドメモリインデックスを示し、該ソースパックドメモリインデックスは、少なくとも３２個のメモリインデックスを含む、請求項２４に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
実施の形態は、プロセッサに関する。特に、実施形態は、メモリアクセス命令を実行するプロセッサに関する。
【背景技術】
【０００２】
プロセッサは、一般に、メモリにアクセスする命令を実行するように動作可能である。例えば、プロセッサは、メモリからデータをロードし若しくは読み出すロード命令及び／又はメモリにデータをストアし若しくは書き込むストア命令を実行することができる。
【０００３】
或る特定の(Certain)プロセッサは、ベクトルロード命令を実行するように動作可能である。これらのベクトルロード命令は、当該技術分野ではベクトルギャザー命令又は単にギャザー命令とも呼ばれる。２０１１年６月に公表されたIntel (R) Advanced Vector Extensions Programming Referenceの文書参照番号３１９４３３−０１１は、幾つかの(some)ベクトルギャザー（ＶＧＡＴＨＥＲ）命令を記載している。例には、ＶＧＡＴＨＥＲＤＰＤ、ＶＧＡＴＨＥＲＱＰＤ、ＶＧＡＴＨＥＲＤＰＳ、ＶＧＡＴＨＥＲＱＰＳ、ＶＰＧＡＴＨＥＲＤＤ、ＶＰＧＡＴＨＥＲＱＤ、ＶＰＧＡＴＨＥＲＤＱ、及びＶＰＧＡＴＨＥＲＱＱが含まれる。これらのベクトルギャザー命令は、複数の対応するメモリインデックスを用いてメモリから複数のデータ要素をギャザーするか、読み出すか、又はロードするのに用いることができる。
【０００４】
本発明は、実施形態を例示するのに用いられる以下の説明及び添付図面を参照することによって最もよく理解することができる。
【図面の簡単な説明】
【０００５】
【図１】１つ又は複数の限定範囲ベクトルメモリアクセス命令を実行するプロセッサの一実施形態のブロック図である。
【０００６】
【図２】１つ又は複数の限定範囲ベクトルメモリアクセス命令を処理する命令処理装置の一実施形態のブロック図である。
【０００７】
【図３】限定範囲ベクトルメモリアクセス命令に応答してメモリの限定範囲にアクセスする方法の一実施形態のブロック流れ図である。
【０００８】
【図４】限定範囲ベクトルギャザー演算の一実施形態を示すブロック図である。
【０００９】
【図５】マスクされた限定範囲ベクトルギャザー演算の一実施形態を示すブロック図である。
【００１０】
【図６】限定範囲ベクトルスキャッター演算の一実施形態を示すブロック図である。
【００１１】
【図７】マスクされた限定範囲ベクトルスキャッター演算の一実施形態を示すブロック図である。
【００１２】
【図８】限定範囲ベクトルギャザー演算の一例示の実装の実施形態のブロック図である。
【００１３】
【図９】好適な一組のパックドデータレジスタの一例示の実施形態のブロック図である。
【００１４】
【図１０】好適な一組のパックドデータ演算マスクレジスタの一例示の実施形態のブロック図である。
【００１５】
【図１１】マスクビットの数がパックドデータ幅及びデータ要素幅に依存する６４ビットパックドデータ演算マスクレジスタの一例示の実施形態を示す図である。
【００１６】
【図１２Ａ】ＶＥＸプレフィックス、リアルオペコードフィールド、Ｍｏｄ  Ｒ／Ｍバイト、ＳＩＢバイト、変位フィールド、及びＩＭＭ８を含む例示的なＡＶＸ命令フォーマットを示す図である。
【００１７】
【図１２Ｂ】図１２Ａからのどのフィールドがフルオペコードフィールド及びベース演算フィールドを構成するのかを示す図である。
【００１８】
【図１２Ｃ】図１２Ａからのどのフィールドがレジスタインデックスフィールドを構成するのかを示す図である。
【００１９】
【図１３Ａ】本発明の実施形態による一般的なベクトルフレンドリー命令フォーマット及びそのクラスＡ命令テンプレートを示すブロック図である。
【００２０】
【図１３Ｂ】本発明の実施形態による一般的なベクトルフレンドリー命令フォーマット及びそのクラスＢ命令テンプレートを示すブロック図である。
【００２１】
【図１４Ａ】本発明の実施形態による例示的な特定のベクトルフレンドリー命令フォーマットを示すブロック図である。
【図１４Ｂ】本発明の実施形態による例示的な特定のベクトルフレンドリー命令フォーマットを示すブロック図である。
【図１４Ｃ】本発明の実施形態による例示的な特定のベクトルフレンドリー命令フォーマットを示すブロック図である。
【図１４Ｄ】本発明の実施形態による例示的な特定のベクトルフレンドリー命令フォーマットを示すブロック図である。
【００２２】
【図１５】本発明の１つの実施形態によるレジスタアーキテクチャのブロック図である。
【００２３】
【図１６Ａ】本発明の実施形態による例示的なインオーダーパイプライン及び例示的なレジスタリネームアウトオブオーダー発行／実行パイプラインの双方を示すブロック図である。
【００２４】
【図１６Ｂ】本発明の実施形態によるプロセッサに備えられるインオーダーアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネームアウトオブオーダー発行／実行アーキテクチャコアの双方を示すブロック図である。
【００２５】
【図１７Ａ】本発明の実施形態による単一のプロセッサコアを、オンダイ相互接続ネットワークへのその接続及びレベル２（Ｌ２）キャッシュのそのローカルサブセットとともに示すブロック図である。
【００２６】
【図１７Ｂ】本発明の実施形態による図１７Ａにおけるプロセッサコアの一部の拡大図である。
【００２７】
【図１８】本発明の実施形態による、２つ以上のコアを有することができ、統合メモリコントローラーを有することができ、統合グラフィックスを有することができるプロセッサのブロック図である。
【００２８】
【図１９】本発明の１つの実施形態によるシステムのブロック図である。
【００２９】
【図２０】本発明の一実施形態による第１のより具体的な例示的システムのブロック図である。
【００３０】
【図２１】本発明の一実施形態による第２のより具体的な例示的システムのブロック図である。
【００３１】
【図２２】本発明の一実施形態によるＳｏＣのブロック図である。
【００３２】
【図２３】本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。
【発明を実施するための形態】
【００３３】
本明細書では、限界範囲ベクトルメモリアクセス命令、これらの命令を実行するプロセッサ、これらの命令を処理又は実行するときにプロセッサによって実行される方法、及びこれらの命令を処理又は実行する１つ又は複数のプロセッサを組み込んだシステムが開示される。以下の説明では、多数の具体的な詳細（例えば、具体的な命令、命令フォーマット、パックドデータフォーマットプロセッサ構成、マイクロアーキテクチャの詳細、演算シーケンス等）が述べられる。しかしながら、実施形態は、これらの具体的な詳細がなくても実施することができる。それ以外の場合には、この説明の理解を分かりにくくしないように、よく知られた回路、構造、及び技法は詳細に示されていない。
【００３４】
図１は、１つ又は複数の限界範囲ベクトルメモリアクセス命令１０３を実行するように動作可能なプロセッサ１００の一実施形態のブロック図である。幾つかの実施形態では、プロセッサは、汎用プロセッサ（例えば、デスクトップ、ラップトップ、タブレット、ハンドヘルドデバイス、携帯電話、及び同様のコンピューティングデバイス）とすることができる。代替的に、プロセッサは、専用プロセッサとすることができる。好適な専用プロセッサの例には、ほんの数例を挙げると、グラフィックスプロセッサ、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、コプロセッサ、デジタル信号プロセッサ（ＤＳＰ）が含まれるが、これらに限定されるものではない。プロセッサは、様々な複合命令セットコンピューティング（ＣＩＳＣ）プロセッサ、様々な縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、様々な超長命令語（ＶＬＩＷ）プロセッサ、それらの様々なハイブリッド、又は完全に他のタイプのプロセッサのうちの任意のものとすることができる。
【００３５】
プロセッサは、命令セットアーキテクチャ（ＩＳＡ）１０１を有する。ＩＳＡは、プログラミングに関係したプロセッサのアーキテクチャの一部を表し、プロセッサのネイティブ命令、アーキテクチャレジスタ、データタイプ、アドレス指定モード、メモリアーキテクチャ、割込み及び例外ハンドリング、並びに外部入力及び出力（Ｉ／Ｏ）を含む。ＩＳＡは、マイクロアーキテクチャとは区別される。マイクロアーキテクチャは、ＩＳＡを実施するのに用いられる特定の設計技法を表す。
【００３６】
ＩＳＡは、アーキテクチャ的に可視のレジスタ（例えば、アーキテクチャレジスタファイル）１０６を含む。アーキテクチャレジスタは、概して、オンダイプロセッサ記憶位置を表す。アーキテクチャレジスタは、本明細書においては、単にレジスタと呼ばれる。特に別段の指定がないか又は明らかでない限り、アーキテクチャレジスタ、レジスタファイル、及びレジスタという語句は、本明細書においては、ソフトウェア及び／又はプログラマーに可視のレジスタ、及び／又はオペランドを識別するためにマクロ命令若しくはアセンブリ言語命令によって指定されるレジスタを指すのに用いられる。これらのレジスタは、所与のマイクロアーキテクチャにおける他の非アーキテクチャレジスタ又はアーキテクチャ的に可視でないレジスタ（例えば、マイクロ命令によって用いられる一時レジスタ、リオーダーバッファー、リタイアメントレジスタ等）と対照をなす。図示したレジスタは、パックドデータレジスタ１０７を含む。パックドデータレジスタのそれぞれは、パックドデータ、ベクトルデータ、又はＳＩＭＤデータをストアするように動作可能である。幾つかの実施の形態において、レジスタは、オプションとして、パックドデータ演算マスクレジスタ１０８も含むことができるが、これは必須ではない。
【００３７】
ＩＳＡは、プロセッサによってサポートされる命令セット１０１を含む。この命令セットの命令は、アセンブリ言語命令、機械レベル命令、又はマイクロ命令、又はマイクロ演算（デコーダがマクロ命令をデコードした結果得られるもの）とは対照的なマクロ命令例えば、実行のためにプロセッサに提供される命令、を表す。この命令セットは、それぞれがプロセッサに外部メモリ１１０の限定範囲１２０にアクセスさせるように動作可能な１つ又は複数の限定範囲ベクトルメモリアクセス命令１０３を含む。
幾つかの実施形態では、限定範囲１２０は、外部メモリ１１０の一部分又はサブセット（例えば、連続してインデックス可能な部分又はサブセット）のみを表すことができる。幾つかの実施形態では、命令（複数の場合もある）１０３は、オプションとして、外部メモリ１１０の限定範囲１２０内の場合によっては不連続なロケーションからデータ要素をプロセッサに読み出させるか、ロードさせるか、又はギャザーさせるように動作可能な１つ又は複数の限定範囲ベクトルギャザー命令１０４を含むことができる。幾つかの実施形態では、命令（複数の場合もある）１０３は、オプションとして、外部メモリ１１０の限定範囲１２０内の場合によっては不連続なロケーションにデータ要素をプロセッサに書き込ませるか、ストアさせるか、又はスキャッターさせるように動作可能な１つ又は複数の限定範囲ベクトルスキャッター命令１０５を含むことができる。様々な実施形態では、単一の限定範囲ベクトルメモリアクセス命令から複数又は多くのそのような命令まで存在し得る。
【００３８】
プロセッサは、実行ロジック１０９も備える。この実行ロジックは、限定範囲ベクトルメモリアクセス命令（複数の場合もある）１０３を実行又は処理するとともにこれらの命令に応答して限定範囲にアクセスする（例えば、限定範囲から要素をギャザーするか又は限定範囲に要素をスキャッターする）ように動作可能である。好適な実行ロジックの例には、実行ユニット、機能ユニット、メモリアクセスユニット、メモリ実行ユニット、ギャザーユニット、スキャッターユニット等が含まれるが、これらに限定されるものではない。
【００３９】
図２は、命令処理装置２００の一実施形態のブロック図である。幾つかの実施形態では、命令処理装置２００は、図１のプロセッサとすることもできるし、このプロセッサ内に備えることもできるし、同様のものとすることもできる。代替的に、命令処理装置２００は、異なるプロセッサとすることもできるし、異なるプロセッサ内に備えることもできる。その上、図１のプロセッサは、図２のプロセッサとは異なる命令処理装置を備えることができる。
【００４０】
命令処理装置２００は、限定範囲ベクトルメモリアクセス命令２０３を受信することができる。例えば、この命令は、命令フェッチユニット、命令キュー、メモリ等から受信することができる。幾つかの実施形態では、この命令は、限定範囲ベクトルギャザー命令又は限定範囲ベクトルスキャッター命令を表すことができる。
【００４１】
この装置は、一組のパックドデータレジスタ２０７を備える。幾つかの実施形態では、この装置は、オプションとして、一組のパックドデータ演算マスクレジスタ２０８を備えることができるが、これは必須ではない。これらのレジスタは、アーキテクチャオンプロセッサ（例えば、オンダイ）プロセッサ記憶ロケーションを表すことができる。これらのレジスタは、よく知られた技法を用いて種々のマイクロアーキテクチャにおいて種々の方法で実装することができ、どの特定のタイプの回路にも限定されるものではない。好適なタイプのレジスタの例には、専用化された物理レジスタ、レジスタリネームを用いて動的にアロケートされる物理レジスタ、及びそれらの組み合わせが含まれるが、これらに限定されるものではない。
【００４２】
限定範囲ベクトルメモリアクセス命令は、複数のパックドメモリインデックスを有するソースパックドメモリインデックス２１３を（例えば、１ビット若しくは複数ビット又はフィールドを通じて）明示的に指定することもできるし、別の方法で示す（例えば、暗黙的に示す）こともできる。幾つかの実施形態では、パックドメモリインデックスは、パックド８ビットバイトメモリインデックス又はパックド１６ビットワードメモリインデックスとすることができる。従来、ベクトルギャザー命令は、通常、これよりも大幅に大きな３２ビット又は６４ビットのメモリインデックスを実装している。なぜならば、ベクトルギャザー命令は、メモリ２１０内の限定範囲２２０内のみからではなく、メモリ２１０における任意の箇所からギャザーすることができることが期待されているからである。
ベクトルギャザー命令／演算又はベクトルメモリロード命令／演算の場合、この命令は、メモリ２１０の限定範囲２２０からロード又はギャザーされたデータ要素を含む結果のパックドデータがストアされるデスティネーション記憶ロケーション２１５を示すことができる。ベクトルスキャッター命令／演算又はベクトルメモリストア命令／演算の場合、この命令は、メモリ２１０の限定範囲２２０に書き込まれるか又はスキャッターされる複数のデータ要素を含むソースパックドデータ２１４を示すことができる。図示するように、幾つかの実施形態では、ソースパックドメモリインデックス２１３、ソースパックドデータ２１４、及びデスティネーション記憶ロケーション２１５は、一組のパックドデータレジスタ２０７のうちのパックドデータレジスタとすることができる。代替的に、オプションとして、他の記憶ロケーションをこれらのうちの１つ又は複数に用いることができる。
【００４３】
幾つかの実施形態では、限定範囲ベクトルメモリアクセス命令２０３は、オプションとして、ソースパックドデータ演算マスク２１６を指定するか又は別の方法で示すことができるが、これは必須ではない。パックドデータ演算マスク、及びプレディケーション又は条件付き制御へのそれらの使用は、以下で更に論述する。他の実施形態は、オプションとして、マスキングもプレディケーションも伴わずに実行することができる。
【００４４】
図２を再び参照すると、図示した命令処理装置は、デコードロジック２１１（例えば、デコードユニット又はデコーダー）を備える。命令デコードロジックは、高水準機械命令又はマクロ命令（例えば、命令２０３）を受信してデコードし、オリジナルの高水準命令を反映し及び／又はオリジナルの高水準命令から導出された１つ又は複数の低水準マイクロ演算、マイクロコードエントリーポイント、マイクロ命令、又は他の低水準命令若しくは制御信号を出力することができる。１つ又は複数の低水準命令又は制御信号は、１つ又は複数の低水準（例えば、回路レベル又はハードウェアレベル）演算を通じて高水準命令の演算を実施することができる。デコードロジックは、様々な異なるメカニズムを用いて実施することができる。これらのメカニズムには、マイクロコード読み出し専用メモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実施態様、プログラマブルロジックアレイ（ＰＬＡ）、及び当該技術分野で知られている他のメカニズムが含まれるが、これらに限定されるものではない。他の実施形態では、デコードロジック２１１を有する代わりに、命令エミュレーター、トランスレーター、モーファー、インタープリター、又は他の命令変換ロジック（例えば、ソフトウェア、ハードウェア、ファームウェア、又は組み合わせで実施される）を用いることができる。更に他の実施形態では、命令変換ロジック及びデコードロジックの組み合わせを用いることができる。命令変換ロジックの一部又は全ては、場合によっては、別個のダイ上又はメモリ内等、命令処理装置の残りのものからオフダイに位置することができる。
【００４５】
図２を再び参照すると、実行ロジック２０９は、デコードロジック２１１と結合されている。この実行ロジックは、パックドデータレジスタ２０７とも結合され、幾つかの実施形態では、オプションとしてパックドデータ演算マスクレジスタ２０８とも結合されている。好適な実行ロジックの例には、実行ユニット、機能ユニット、メモリアクセスユニット、メモリ実行ユニット、ギャザーユニット、スキャッターユニット等が含まれるが、これらに限定されるものではない。実行ロジック及び／又は装置は、命令２０３を実行及び／又は処理し、当該命令に応答してメモリの限定範囲にアクセスするように動作可能な具体的な又は特定のロジック（例えば、回路部、トランジスタ、又は場合によってはソフトウェア及び／又はファームウェアと組み合わされる他のハードウェア）を含むことができる。幾つかの実施形態では、実行ユニットは、少なくとも幾つかの集積回路部、トランジスタ、又は半導体ダイの他の回路部若しくはハードウェアを備える。
【００４６】
実行ロジックは、限定範囲ベクトルメモリアクセス命令２０３に応答して及び／又はこの命令の結果として（例えば、命令２０３からデコードされるか又は別の方法で導出される１つ又は複数の制御信号に応答して）、メモリ２１０の限定範囲２２０にアクセスするように動作可能である。例えば、限定範囲ベクトルギャザー命令の一実施形態では、実行ユニットは、ソースパックドメモリインデックス２１３を用いて、メモリ２１０の限定範囲２２０内の場合によっては不連続なロケーションからデータ要素をギャザー又はロードし、これらのギャザー又はロードされたデータ要素をデスティネーション記憶ロケーション２１５にストアすることができる。限定範囲ベクトルスキャッター命令の一実施形態では、実行ユニットは、ソースパックドメモリインデックス２１３を用いて、ソースパックドデータ２１４からのデータ要素をメモリ２１０の限定範囲２２０内の場合によっては不連続なロケーションにスキャッターするか又は書き込むことができる。
【００４７】
幾つかの実施形態では、限定範囲ベクトルメモリアクセス命令２０３は、メモリ２１０の限定範囲２２０にのみアクセスするのに用いることができる。幾つかの実施形態では、これらの命令は、８ビットバイト又は１６ビットワードのメモリインデックスのみを示す。従来のベクトルギャザー命令によれば、通常、メモリ内の任意の箇所からデータ要素をギャザーすることが可能になる。その結果、通常、３２ビット又は６４ビットのいずれかのメモリインデックスが用いられる。これらの３２ビット又は６４ビットのメモリインデックスは、場合によってはメモリ内の実質的に任意の箇所から又は（例えば、３２ビット又は６４ビットのいずれかによってアドレス指定することができる）少なくとも比較的大量のメモリからデータ要素をギャザーすることを可能にする十分なビットを有する。
【００４８】
しかしながら、３２ビット又は６４ビットのメモリインデックスを用いることの１つの可能性のある欠点は、それらの比較的大きなサイズがベクトルギャザー命令のソースオペランドとして示される単一のパックドデータレジスタ内にストアすることができるメモリインデックスの数を限定しがちであり得るということである。例えば、４つの６４ビットメモリインデックスしか又は８つの３２ビットメモリインデックスしか２５６ビットレジスタ内に収まることができない。その上、幾つかの場合には、８ビットバイトデータ要素又は１６ビットワード要素等の比較的小さなデータ要素をギャザーすることが所望される場合がある。しかしながら、比較的大きなサイズのメモリインデックスは、ギャザーすることができるそのような８ビットバイト要素又は１６ビットワード要素の数を限定しがちである。例えば、多くの場合、パックドデータレジスタ内に収まる３２ビット又は６４ビットのメモリインデックスの数と同数のデータ要素しかギャザーすることができない。その結果、多くの場合、３２ビット又は６４ビットのメモリインデックスの大きなサイズに部分的に起因して、これらの要素の望ましいだけの数をギャザーすることが可能でない。
【００４９】
幾つかの実施形態では、そのような比較的大きな３２ビット又は６４ビットのメモリインデックスの代わりに、８ビットバイト又は１６ビットワードのメモリインデックス等の比較的小さなメモリインデックスを限定範囲ベクトルメモリアクセス命令／演算の実施形態によって用いることができる。利点として、これは、ソースパックドメモリインデックスとして単一のパックドデータレジスタにストアすることができるメモリインデックスの数を増加させるのに役立つことができる。例えば、３２個の８ビットメモリインデックス又は１６個の１６ビットメモリインデックスは、４つのみの６４ビットメモリインデックス又は８つのみの３２ビットメモリインデックスの代わりに２５６ビットレジスタ内に収まることができる。別の例として、６４個の８ビットメモリインデックス又は３２個の１６ビットメモリインデックスは、５１２ビットレジスタ内に収まることができる。それに対応して、これは、単一の限定範囲ベクトルギャザー命令／演算又は限定範囲スキャッター命令／演算の一実施形態によってギャザー又はスキャッターすることができるデータ要素の数を増加させるのに役立つことができる。
【００５０】
幾つかの実施形態では、これらの比較的小さな８ビットバイト又は１６ビットワードのメモリインデックスは、メモリ内の任意の箇所からのデータ要素にアクセスするには不十分な場合がある。逆に、これらの小さな８ビット又は１６ビットのメモリインデックスは、それよりも大きなメモリ全体（例えば、３２ビット又は６４ビットのメモリインデックスによってアドレス指定する必要があるもの）の限定範囲（例えば、８ビット又は１６ビットのメモリインデックスによってインデックスすることが可能な連続的なサブセット）内のみのデータ要素にアクセスすることができる。幾つかの実施形態では、プロセッサによってサポートされるＩＳＡは、３２ビット又は６４ビットのメモリインデックスを示すとともにこれらのインデックスを用いてメモリ全体における任意の箇所からのデータ要素にアクセスする１つ又は複数の他のメモリアクセス命令（例えば、ベクトルギャザー命令）を含むことができる。
例えば、幾つかの実施形態では、８ビットメモリインデックスに対応する限定範囲は、８ビットバイトメモリインデックスによって一意にインデックスすることが可能な僅かに２５６個のデータ要素又は２５６個の記憶ロケーションからなることができる。別の例として、幾つかの実施形態では、限定範囲は、１６ビットバイトメモリインデックスによって一意にインデックスすることが可能な僅かに６５５３６個のデータ要素又は６５５３６個の記憶ロケーションからなることができる。他の実施形態では、インデックスすることが可能なこれらのデータ要素又は記憶ロケーションの一部分又はサブセットのみを限定範囲として用いることができる（例えば、１６ビットインデックスの全範囲を用いるのではなく、その範囲の一部分のみを用いることができる）。
【００５１】
限定範囲ベクトルメモリアクセス命令／演算は、メモリ内の任意の箇所のデータ要素にアクセスすることが可能ではないが、はるかに大きなメモリの限定範囲内のみからのデータ要素にアクセスすることが有利な場合がある様々な理由が存在する。例えば、これは、テーブル、アレイ、データ構造体、又はデータの他の配置若しくは集合体を限定範囲にストアすることができる場合であり得る。多くの場合、アルゴリズムは、テーブル、アレイ、データ構造体、又はデータの他の配置若しくは集合体内からの複数又は多くのデータ要素に同時にアクセスすることが必要な場合がある。１つの例として、このアルゴリズムは、行列を転置する場合もあるし、データを別の方法で再配置又は再構造化する場合もあり、この場合、アルゴリズムは、多くのデータ要素にアクセスすることが必要な場合がある。別の例として、アルゴリズムは、一定ストライドによって、例えば、２つごと、３つごと、４つごと、又はＮ個ごとのデータ要素に分割されるデータ要素にアクセスする場合がある。より一般的には、８ビットバイト又は１６ビットワードのメモリインデックスによってインデックスすることができるメモリの限定範囲内にストアすることができるデータの配置又は集合体内からの複数又は多くのデータ要素にアクセスするのにアルゴリズムが用いられる場合がある多くの例が存在する。
【００５２】
利点として、本明細書において開示される限定範囲ベクトルメモリアクセス命令／演算の実施形態は、そのような例において用いられるとき、より小さな８ビット又は１６ビットのメモリインデックスに部分的に起因して単一の命令／演算内で相対的により多くのデータ要素にアクセス（例えば、ギャザー又はスキャッター）することが可能であり得る。そのようなアクセスされるデータ要素の数を限定する傾向があるより大きなインデックスは必要とされない。なぜならば、データ要素は、メモリ内の任意の箇所ではなく限定範囲内からしかギャザーされないからである。その上、以下で更に論述するように、幾つかの実施形態では、限定範囲ベクトルメモリアクセス命令／演算は、アクセスされるデータ要素のそれぞれにシーケンシャルアクセスを用いる従来のベクトルギャザー命令／演算よりも実施効率が良く及び／又は高速であり得る（例えば、それぞれ複数のデータ要素を伴うメモリアクセスの実行をより少なくすることができるからである）。
【００５３】
説明を分かりにくくしないように、単純な命令処理装置２００が説明されているが、この命令処理装置は、オプションとして１つ又は複数の他の従来の構成要素を備えることができる。そのような従来の構成要素の例には、命令フェッチユニット、命令スケジューリングユニット、分岐予測ユニット、命令及びデータキャッシュ、命令及びデータ変換索引バッファー（ＴＬＢ）、プリフェッチバッファー、マイクロ命令キュー、マイクロ命令シーケンサー、バスインターフェースユニット、リタイアメント／コミットユニット、レジスタリネームユニット、並びにプロセッサにおいて従来用いられていた他の構成要素が含まれるが、これらに限定されるものではない。その上、実施形態は、同じ又は異なる命令セット及び／又はＩＳＡを有する複数のコア、論理プロセッサ、又は実行エンジンを有することができる。そのような構成要素の文字どおり多数の異なる組み合わせ及び構成がプロセッサに存在し、実施形態は、どの特定のそのような組み合わせにも構成にも限定されるものではない。
【００５４】
図３は、命令の一実施形態を処理する方法３３０の一実施形態のブロック流れ図である。様々な実施形態では、この方法は、汎用プロセッサ、専用プロセッサ、又は他の命令処理装置若しくはデジタルロジックデバイスが実行することができる。幾つかの実施形態では、図３の演算及び／又は方法は、図１のプロセッサ及び／又は図２の装置によって及び／又はそれらの内部において実行することができる。図１のプロセッサ及び図２の装置について本明細書において説明した構成要素、特徴、及び具体的なオプションの詳細は、図３の演算及び／又は方法にもオプションとして適用される。代替的に、図３の演算及び／又は方法は、類似のプロセッサ若しくは装置又は完全に異なるプロセッサ若しくは装置によって及び／又はそれらの内部において実行することができる。その上、図１のプロセッサ及び／又は図２の装置は、図３のものと同じか、類似するか、又は完全に異なる演算及び／又は方法を実行することができる。
【００５５】
この方法は、ブロック３３１において、限定範囲ベクトルメモリアクセス命令を受信することを含む。様々な態様では、この命令は、プロセッサ、命令処理装置、又はそれらの一部分（例えば、命令フェッチユニット、デコーダー、命令変換器等）において受信することができる。様々な態様では、この命令は、オフダイソースから（例えば、ＤＲＡＭメモリ、ディスク、相互接続部等から）、又はオンダイソースから（例えば、命令キャッシュから）受信することができる。この限定範囲ベクトルメモリアクセス命令は、複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示すことができる。幾つかの実施形態では、メモリインデックスは、８ビットメモリインデックス及び１６ビットメモリインデックスのうちの一方とすることができる。幾つかの実施形態では、これらのメモリインデックスは、８ビットメモリインデックスとすることができる。幾つかの実施形態では、ソースパックドメモリインデックスは、少なくとも３２個のメモリインデックスを含むことができる。
【００５６】
メモリの限定範囲内のみのメモリロケーションは、ブロック３３２において、限定範囲ベクトルメモリアクセス命令に応答してアクセスすることができる。幾つかの実施形態では、限定範囲は、３２ビット又は６４ビットの１つ又は複数のメモリアドレスをそれぞれ用いてアクセスすることができる。幾つかの実施形態では、限定範囲は、２５６バイトのみを含むことができる。幾つかの実施形態では、以下で更に説明するように、アクセスは、必要なデータ要素及び不必要なデータ要素の双方を含む複数のデータ要素をそれぞれロードすることができる複数のデータ要素ロードを通じて実行することができる。そのようなマルチ要素ロードは、幾つかの実施形態では、速度又は効率を改善するのに役立つことができる。幾つかの実施形態では、限定範囲全体をメモリからプロセッサの記憶ロケーション（例えば、オンダイレジスタ）にロードすることができる。
【００５７】
図示した方法は、アーキテクチャ的に可視の演算（例えば、ソフトウェアの視点から可視の演算）を伴う。他の実施形態では、この方法は、オプションとして、１つ又は複数のマイクロアーキテクチャ演算を含むことができる。例として、命令をアウトオブオーダーでフェッチ、デコード、スケジューリングすることができ、ソースオペランドにアクセスすることができ、マイクロアーキテクチャ演算を実行して命令の演算を実施するように実行ロジックをイネーブルすることができ、実行ロジックがマイクロアーキテクチャ演算を実行することができ、結果をプログラム順に戻す等することができる。
【００５８】
図４は、限定範囲ギャザー命令の一実施形態に応答して実行することができる限定範囲ギャザー演算４０３の一実施形態を示すブロック図である。この限定範囲ギャザー命令は、複数のパックドメモリインデックスを有するソースパックドメモリインデックス４１３を指定するか又は別の方法で示すことができる。図示するように、幾つかの実施形態では、メモリインデックスは、８ビットバイトメモリインデックスとすることができ、ソースパックドメモリインデックスは、５１２ビット幅とすることができ、６４個の８ビットバイトメモリインデックスを含むことができる。
代替的に、他の実施形態では、１６ビットワードメモリインデックス、又は３２ビット未満の他のメモリインデックスをオプションとして用いることができる。その上、他の実施形態では、５１２ビット以外の他のパックドデータ幅、例えば、６４ビット、１２８ビット、２５６ビット、又は１０２４ビットのパックドデータ幅等をオプションとして用いることができる。例として、６４ビット幅、１２８ビット幅、及び２５６ビット幅が、それぞれ、８個、１６個、及び３２個の８ビットバイトメモリインデックス、又は１６ビットワードメモリインデックスについてはそれぞれその半分をストアすることができる場合がある。図示した例では、メモリインデックスは、最下位位置（左側）から最上位位置（右側）に１３４，２３１，２０，１３５，５，２１，３０，...１８６の値を有する。これらの値は例にすぎない。
【００５９】
限定範囲ベクトルギャザー演算の一実施形態は、限定範囲ギャザー命令の実施形態に応答して及び／又はこの命令の結果として実行することができる。限定範囲ベクトルギャザー演算は、メモリ４１０の限定範囲４２０からデータ要素をロード又はギャザーすることができる。前に論述したように、限定範囲は、一般的にははるかに大きなメモリ全体（例えば、３２ビット又は６４ビットのメモリインデックスを用いて他の命令によってインデックスすることができる）の小さなサブセット（例えば、８ビット又は１６ビットのメモリインデックスによってインデックスすることが可能な連続的なサブセット）のみを表すことができる。限定範囲の大きさ又はサイズは、メモリインデックスのビットによる幅に基づくことができる。例えば、各８ビットバイトメモリインデックスは、２５６個の異なるロケーション又はデータ要素のうちの任意のものを一意にインデックス又はアドレス指定するように使用可能とすることができ、幾つかの実施形態では、限定範囲は、それらの２５６個のロケーション又はデータ要素（例えば、２５６バイト又は２５６ワード）のみを含むことができる。ギャザーされたデータ要素は、ソースパックドメモリインデックス４１３の対応するメモリインデックスによって示すことができる。各メモリインデックスは、対応するメモリロケーション及び／又はそのロケーションにストアされたデータ要素を指し示すことができる。例えば、図示した実施形態では、メモリインデックス１３４は、データ要素Ｂ１をストアする限定範囲内のメモリロケーションを指し示し、メモリインデックス２３１は、データ要素Ｂ２をストアする限定範囲内のメモリロケーションを指し示し、他のメモリインデックスについても以下同様である。
【００６０】
パックドデータ結果４１５は、限定範囲ベクトルギャザー命令／演算に応答して及び／又はこの命令／演算の結果としてデスティネーション記憶ロケーションにストアすることができる。１つの態様では、この命令は、デスティネーション記憶ロケーションを指定するか又は別の方法で示すことができる。幾つかの実施形態では、パックドデータ結果は、メモリ４１０の他の部分内からではなく限定範囲４２０内のみからの、場合によっては不連続な領域からギャザーされたデータ要素を含むことができる。図示するように、幾つかの実施形態では、パックドデータ結果は、５１２ビット幅とすることができ、６４個の８ビットバイトデータ要素を含むことができる。代替的に、１６ビットワード又は３２ビットダブルワードのデータ要素をギャザーすることができ、より広いか又はより狭い結果パックドデータにストアすることができる。図示した例では、デスティネーションにおけるパックドデータ結果は、最下位位置（左側）から最上位位置（右側）にデータ要素Ｂ１，Ｂ２，Ｂ３，Ｂ４，Ｂ５，Ｂ６，Ｂ７，...Ｂ６４をストアする。これは１つの例にすぎない。
【００６１】
図５は、マスクされた限定範囲ギャザー命令の一実施形態に応答して実行することができるマスクされた限定範囲ギャザー演算５０３の一実施形態を示すブロック図である。図５のマスクされた演算は、図４のマスクされていない演算と或る特定の類似点を有する。説明を分かりにくくしないように、図５のマスクされた演算の異なる特徴及び／又は追加の特徴を主として説明し、図４のマスクされていない演算と同様の特徴又は共通の特徴は全て繰り返されるとは限らない。しかしながら、マスクされていない演算のこれらの前述した特徴は、別段明瞭に明らかにされていない限り、オプションとして図５にも適用されることが認識されるべきである。
【００６２】
マスクされた限定範囲ギャザー命令は、複数のパックドメモリインデックスを有するソースパックドメモリインデックス５１３を指定するか又は別の方法で示すことができる。図示するように、幾つかの実施形態では、メモリインデックスは、８ビットバイトメモリインデックスとすることができ、ソースパックドメモリインデックスは、５１２ビット幅とすることができ、６４個の８ビットバイトメモリインデックスを含むことができる。代替的に、他の実施形態では、１６ビットワードメモリインデックス、又は３２ビット未満の他のメモリインデックスをオプションとして用いることができる。その上、他の実施形態では、５１２ビット以外の他のパックドデータ幅、例えば、６４ビット、１２８ビット、２５６ビット、又は１０２４ビット等のパックドデータ幅をオプションとして用いることができる。
【００６３】
幾つかの実施形態では、マスクされた限定範囲ギャザー命令は、オプションとしてソースパックドデータ演算マスク５１６を指定するか又は別の方法で示すことができる。このパックドデータ演算マスクは、本明細書においては、単に演算マスク、プレディケートマスク、又はマスクと呼ばれる場合もある。このマスクは、演算（例えば、ギャザー演算）を実行するか否かをマスク、プレディケート、又は条件付き制御するのに用いられるプレディケートオペランド又は条件付き制御オペランドを表すことができる。幾つかの実施形態では、マスキング又はプレディケーションは、異なるデータ要素に対する演算を別々に及び／又は他のものとは独立にプレディケート又は条件付き制御することができるように、データ要素単位の粒度とすることができる。演算マスクは、複数のマスク要素、プレディケート要素、又は条件付き制御要素を含むことができる。
１つの態様では、これらの要素を、対応するソースデータ要素及び／又は結果データ要素と１対１対応で含めることができる。図示するように、幾つかの実施形態では、各マスク要素は、単一のマスクビットとすることができる。各マスクビットの値は、演算（例えば、ギャザー演算）が実行されるか否かを制御することができる。１つの可能な規則によれば、各マスクビットは、ギャザー演算を実行するとともに結果データ要素をデスティネーション記憶ロケーションにストアすることを許可する第１の値（例えば、バイナリ１にセットされる）、又はギャザー演算を実行することを許可せず及び／又はギャザーされたデータ要素をデスティネーション記憶ロケーションにストアすることを許可しない第２の値（例えば、バイナリ０にクリアされる）を有することができる。
【００６４】
図示するように、ソースパックドメモリインデックス５１３が５１２ビット幅であるとともに６４個の８ビットメモリインデックスを有する場合、ソースパックドデータ演算マスク５１６は、各ビットがプレディケートビット又はマスクビットを表す６４ビット幅とすることができる。代替的に、ソースパックドデータ演算マスクは、他の幅、例えば、ソースパックドメモリインデックス５１３内のメモリインデックスの数（例えば、８個、１６個、３２個等）に等しいビットによる幅を有することができる。図示した例では、マスクビットは、最下位（左側）から最上位（右側）に１，１，０，１，１，１，０，...１である。これは１つの例にすぎない。図示した規則によれば、バイナリ０のマスクビット値は、マスクアウトされた要素を表すのに対して、バイナリ１のマスクビット値は、マスクされていない要素を示す。各マスクされていない要素について、関連付けられたギャザー演算が実行され、ギャザーされたデータ要素がパックドデータ結果５１５の対応するデータ要素にストアされる。各マスクビットは、対応する位置におけるメモリインデックス及び結果データ要素に対応する。例えば、この説明図では、対応する位置は、縦方向上下に整列されている。
【００６５】
マスクされた限定範囲ベクトルギャザー演算５０３の一実施形態は、マスクされた限定範囲ギャザー命令の実施形態に応答して及び／又はこの命令の結果として実行することができる。この演算は、ソースパックドデータ演算マスク５１６の条件付き制御を条件として、メモリ５１０の限定範囲５２０からデータ要素をロード又はギャザーすることができる。パックドデータ結果５１５は、マスクされた限定範囲ベクトルギャザー命令／演算に応答して及び／又はこの命令／演算の結果としてデスティネーション記憶ロケーションにストアすることができる。幾つかの実施形態では、データは、パックドデータ演算マスク内の対応するマスクビットが１にセットされている場合にのみギャザーすることができる。アスタリスク（＊）は、対応するマスクビットがマスクアウトされている（例えば、図示した例では、バイナリ０にクリアされている）結果パックドデータの位置に示される。図示するように、幾つかの実施形態では、パックドデータ結果は、５１２ビット幅とすることができ、６４個の８ビットバイトデータ要素を含むことができる。代替的に、１６ビットワード又は３２ビットダブルワードのデータ要素をギャザーすることができ、より広いか又はより狭い結果パックドデータにストアすることができる。図示した例では、デスティネーションにおけるパックドデータ結果は、最下位位置（左側）から最上位位置（右側）にデータ要素Ｂ１，Ｂ２，＊，Ｂ４，Ｂ５，Ｂ６，＊，...Ｂ６４をストアする。
【００６６】
幾つかの実施形態では、マージングマスキング（merging−masking）を実行することができる。マージングマスキングでは、所与のデスティネーションデータ要素がマスクアウトされているとき、デスティネーション記憶ロケーションにおけるデータ要素の初期値又は既存値を変更せずに保持することができる（すなわち、演算の結果を用いて更新されない）。他の実施形態では、ゼロイングマスキング（zeroing−masking）を実行することができる。ゼロイングマスキングでは、所与のデスティネーションデータ要素がマスクアウトされているとき、この対応する所与のデスティネーションデータ要素をゼロアウトすることができるか、又は０の値を対応する所与のデスティネーションデータ要素にストアすることができる。代替的に、他の所与の値を、マスクアウトされたデスティネーションデータ要素にストアすることができる。したがって、様々な実施形態では、アスタリスク（＊）によって示されるデータ要素位置は、ゼロアウトされた値を有することもできるし、ギャザー演算前のデスティネーション記憶ロケーションにおける初期のデータ要素の値を有することもできる。
【００６７】
図６は、限定範囲スキャッター命令の一実施形態に応答して実行することができる限定範囲スキャッター演算６０５の一実施形態を示すブロック図である。この限定範囲スキャッター命令は、複数のパックドメモリインデックスを有するソースパックドメモリインデックス６１３を指定するか又は別の方法で示すことができる。図示するように、幾つかの実施形態では、メモリインデックスは、８ビットバイトメモリインデックスとすることができ、ソースパックドメモリインデックスは、５１２ビット幅とすることができ、６４個の８ビットバイトメモリインデックスを含むことができる。代替的に、他の実施形態では、１６ビットワードメモリインデックス、又は３２ビット未満の他のメモリインデックスをオプションとして用いることができる。その上、他の実施形態では、５１２ビット以外の他のパックドデータ幅、例えば、６４ビット、１２８ビット、２５６ビット、又は１０２４ビット等のパックドデータ幅をオプションとして用いることができる。
【００６８】
限定範囲スキャッター命令は、スキャッターされる複数のパックドデータ要素を有するソースパックドデータ６１４も指定するか又は別の方法で示すことができる。図示するように、幾つかの実施形態では、パックドデータ要素は、８ビットバイトデータ要素とすることができ、ソースパックドデータ６１４は、５１２ビット幅とすることができ、６４個のそのような８ビットバイトデータ要素を含むことができる。代替的に、他の実施形態では、１６ビットワードデータ要素又は３２ビットダブルワードデータ要素をオプションとして用いることができる。その上、他の実施形態では、５１２ビット以外のソースパックドデータの他の幅、例えば、６４ビット、１２８ビット、２５６ビット、又は１０２４ビット等のパックドデータ幅をオプションとして用いることができる。幾つかの実施形態では、メモリインデックスの幅は、データ要素の幅と同じとすることができるが、これは必須ではない（例えば、メモリインデックス用ではなくデータ要素用に２倍の幅のレジスタを用いることができる）。
【００６９】
限定範囲ベクトルスキャッター演算の一実施形態は、限定範囲スキャッター命令の実施形態に応答して及び／又はこの命令の結果として実行することができる。この限定範囲ベクトルスキャッター演算は、メモリ６１０の限定範囲６２０にデータ要素をストアするか、書き込むか、又はスキャッターすることができる。本明細書の他の箇所で論述したように、限定範囲は、一般的にははるかに大きなメモリ６１０全体（例えば、３２ビット又は６４ビットのメモリインデックスを用いて他の命令によってインデックスすることができる）の小さなサブセット（例えば、８ビット又は１６ビットのメモリインデックスによってインデックスすることが可能な連続的なサブセット）のみを表すことができる。限定範囲６２０は、本明細書の他の箇所で説明した限定範囲のオプションの特徴又は属性のうちの任意のものを有することができる。ソースパックドデータ要素６１４は、ソースパックドメモリインデックス６１３によって示され及び／又はこのインデックスから導出されたロケーションにスキャッターすることができる。各メモリインデックスは、対応するメモリロケーションを指し示すことができる。幾つかの実施形態では、データ要素は、より大きなメモリ６１０の他の部分内からではなく限定範囲６２０内のみのオプションとして／場合によっては不連続なメモリロケーションにスキャッターすることができる。例えば、図示した実施形態では、メモリインデックス１３４は、データ要素Ｂ１が書き込まれる限定範囲内のメモリロケーションを指し示し、メモリインデックス２３１は、データ要素Ｂ２が書き込まれる限定範囲内のメモリロケーションを指し示し、他のメモリインデックスについても以下同様である。
【００７０】
図７は、マスクされた限定範囲スキャッター命令の一実施形態に応答して実行することができるマスクされた限定範囲スキャッター演算７０５の一実施形態を示すブロック図である。図７のマスクされた演算は、図６のマスクされていない演算とある特定の類似点を有する。説明を分かりにくくしないように、図７のマスクされた演算の異なる特徴及び／又は追加の特徴を主として説明し、図６のマスクされていない演算と同様の特徴又は共通の特徴は全て繰り返されるとは限らない。しかしながら、マスクされていない演算の前述した特徴は、別段明瞭に明らかにされていない限り、オプションとして図７にも適用されることが認識されるべきである。
【００７１】
マスクされた限定範囲スキャッター命令は、複数のパックドメモリインデックスを有するソースパックドメモリインデックス７１３を指定するか又は別の方法で示すことができる。図示するように、幾つかの実施形態では、メモリインデックスは、８ビットバイトメモリインデックスとすることができ、ソースパックドメモリインデックスは、５１２ビット幅とすることができ、６４個の８ビットバイトメモリインデックスを含むことができる。代替的に、他の実施形態では、１６ビットワードメモリインデックス、又は３２ビット未満の他のメモリインデックスをオプションとして用いることができる。その上、他の実施形態では、５１２ビット以外の他のパックドデータ幅、例えば、６４ビット、１２８ビット、２５６ビット、又は１０２４ビット等のパックドデータ幅をオプションとして用いることができる。
【００７２】
限定範囲スキャッター命令は、スキャッターされる複数のパックドデータ要素を有するソースパックドデータ７１４を指定するか又は別の方法で示すこともできる。図示するように、幾つかの実施形態では、パックドデータ要素は、８ビットバイトデータ要素とすることができ、ソースパックドデータ７１４は、５１２ビット幅とすることができ、６４個のそのような８ビットバイトデータ要素を含むことができる。代替的に、他の実施形態では、１６ビットワードデータ要素又は３２ビットダブルワードデータ要素をオプションとして用いることができる。その上、他の実施形態では、５１２ビット以外のソースパックドデータの他の幅、例えば、６４ビット、１２８ビット、２５６ビット、又は１０２４ビット等のパックドデータ幅をオプションとして用いることができる。
【００７３】
幾つかの実施形態では、マスクされた限定範囲スキャッター命令は、オプションとしてソースパックドデータ演算マスク７１６を指定するか又は別の方法で示すことができる。マスク７１６は、本明細書の他の箇所で説明した他のパックドデータ演算マスク、プレディケートマスク、又は条件付き制御オペランドの特徴又は属性のうちの任意のものをオプションとして有することができる。図示するように、ソースパックドメモリインデックスが６４個のメモリインデックスを有し及び／又はソースパックドデータが６４個のデータ要素を有する場合、ソースパックドデータ演算マスク７１６は、各ビットが対応するデータ要素及び／又は対応する相対位置におけるメモリインデックス用のプレディケートビット又はマスクビットを表す６４ビット幅とすることができる。代替的に、ソースパックドデータ演算マスクは、他の幅、例えば、メモリインデックスの数及び／又はデータ要素の数に等しいビットによる幅を有することができる。図示した規則によれば、バイナリ０のマスクビット値は、マスクアウトされた要素を表すのに対して、バイナリ１のマスクビット値は、マスクされていない要素を示す。
【００７４】
限定範囲ベクトルスキャッター演算の一実施形態は、限定範囲スキャッター命令の実施形態に応答して及び／又はこの命令の結果として実行することができる。この限定範囲ベクトルスキャッター演算は、より大きなメモリ７１０の限定範囲７２０にデータ要素をストアするか、書き込むか、又はスキャッターすることができる。本明細書の他の箇所で論述したように、限定範囲は、一般的にははるかに大きなメモリ全体（例えば、３２ビット又は６４ビットのメモリインデックスを用いて他の命令によってインデックスすることができる）の小さなサブセット（例えば、８ビット又は１６ビットのメモリインデックスによってインデックスすることが可能な連続的なサブセット）のみを表すことができる。限定範囲７２０は、本明細書の他の箇所で説明した限定範囲のオプションの特徴又は属性のうちの任意のものを有することができる。ソースパックドデータ要素７１４は、ソースパックドデータ演算マスク７１６のプレディケートされた制御又は条件付き制御の下で、ソースパックドメモリインデックス７１３によって示され及び／又はこのインデックスから導出されたロケーションにスキャッターすることができる。
幾つかの実施形態では、データ要素は、より大きなメモリ７１０の他の部分内からではなく限定範囲７２０内のみのオプションとして／場合によっては不連続なメモリロケーションにスキャッターすることができる。例えば、図示した実施形態では、データ要素Ｂ１は、メモリインデックス値１３４によって示される限定範囲におけるロケーションに書き込むことができ、データ要素Ｂ２は、メモリインデックス値２３１によって示される限定範囲におけるロケーションに書き込むことができ、他のデータ要素についても以下同様である。図示した例では、メモリインデックス値２０のデータ要素Ｂ３及びメモリインデックス値３０のデータ要素Ｂ７は、スキャッターを実行することができないようにマスクアウトされている。これは、この説明図では、メモリインデックス値２０及びメモリインデックス値３０に対応するロケーションにおけるアスタリスク（＊）によって示されている。幾つかの場合には、これらのメモリロケーションは、スキャッター演算前のそれらの既存の値を有する場合がある（例えば、スキャッター演算によって変更されない場合がある）。
【００７５】
以下の擬似コードは、限定範囲ベクトルギャザー命令／演算ＶＸＬＡＴＢの一例示の実施形態を表している。
【表２】
2014182807.tif 000003
【００７６】
以下の擬似コードは、限定範囲ベクトルギャザー命令／演算ＶＢＴＡＬＸＢの一例示の実施形態を表している。
【表３】
2014182807.tif 000004
【００７７】
上記擬似コードにおいて、ｚｍｍ１は、５１２ビットパックドデータレジスタを表す。レジスタｚｍｍ１は、ＶＸＬＡＴＢにはデスティネーション（ＤＥＳＴ）として用いられ、ＶＢＴＡＬＸＢにはソース（ＳＲＣ）として用いられる。ｋ１は６４ビットマスクレジスタを表す。ＫＬはマスク長を表し、ＶＬはベクトル長を表し、これらは、いずれかの命令の（１６，１２８）、（３２，２５６）、（６４，５１２）のうちの任意の１つから選択される。ｖｍ８ｚは、ベクトルスケールインデックスベースメモリアドレス指定を用いて指定されたメモリオペランドのベクトルアレイを表す。メモリアドレスのアレイは、５１２ビットＺＭＭレジスタ内の８ビットインデックス値の個々の要素を有する共通のベースレジスタ、定数スケールファクター、及びベクトルインデックスレジスタを用いて指定される。ＶＩＮＤＥＸは、メモリインデックスのベクトルを表す。ＳｉｇｎＥｘｔｅｎｄは、メモリインデックスＶＩＮＤＥＸに対する符号拡張演算を表す。ＢＡＳＥ＿ＡＤＤＲは、ベースアドレスを表し、ＳＣＡＬＥは、メモリアクセスにおいて一般に用いられるようなスケールを表す。シンボル←は、ストアすることを表す。ｉ及びｊは、ループカウンターである。
【００７８】
図８は、限定範囲ギャザー命令の一実施形態に応答して実行することができる限定範囲ベクトルギャザー演算８０３の一実施形態の一例示の実施態様のブロック図である。幾つかの実施形態では、演算８０３は、図１のプロセッサ及び／又は図２の装置によって及び／又はそれらの内部において実行することができる。代替的に、演算８０３は、類似のプロセッサ若しくは装置又は完全に異なるプロセッサ若しくは装置によって及び／又はそれらの内部において実行することができる。その上、図１のプロセッサ及び／又は図２の装置は、図８のものと類似するか又は完全に異なる演算を実行することができる。その上、幾つかの実施形態では、演算８０３の態様は、実施形態において図１のプロセッサ及び／又は図２の装置によって及び／又はそれらの内部において実行することができる図３の方法内にオプションとして組み込むことができる。
【００７９】
限定範囲ギャザー命令は、ソースパックドメモリインデックス８１３及びデスティネーション記憶ロケーション８１５を指定するか又は別の方法で示すことができる。図示するように、幾つかの実施形態では、メモリインデックスは、８ビットバイトメモリインデックスとすることができるが、これは必須ではない。図示した例では、これらのメモリインデックスは、最下位位置（左側）から最上位位置（右側）に０，５０，１００，１５０，２００の値を有する。これらの値は例にすぎないが、全ての値は、バイトインデックスによってインデックスすることが可能な０〜２５５の範囲内にあることに留意されたい。
【００８０】
実行ロジック８０９の一実施形態は、限定範囲ベクトルギャザー演算８０３を実行することができる。前に論述した実施形態と同様に、この演算は、メモリ８１０の限定範囲８２０内のみからメモリインデックスによって示されたデータ要素をギャザーし、ギャザーされたデータ要素を、デスティネーション記憶ロケーション８１５における対応する結果データ要素にストアすることができる。図示した例に示すように、メモリインデックス０、５０、１００、１５０、２００は、限定範囲における値Ａ、Ｂ、Ｃ、Ｄ、Ｅを有するデータ要素を示すことができ、これらの値Ａ、Ｂ、Ｃ、Ｄ、Ｅは、デスティネーション記憶ロケーションの対応する結果データ要素にストアすることができる。限定範囲は、本明細書の他の箇所で述べたオプションの属性のうちの任意のものを有することができる。
【００８１】
ベクトルギャザー命令を実施する１つの方法は、各データ要素を別々のロード演算（例えば、マイクロ演算）を通じて別々に又は個々にロード又はギャザーすることである。例えば、８つのロード演算が、シーケンシャルに１つずつ実行されて、８つのデータ要素をギャザーすることができる。そのようなシーケンシャルなロード演算は、一般に完了するのに大量の時間を要する傾向がある。また、これらのシーケンシャルなロード演算中、ページフォールトが潜在的に発生する場合がある。その結果、プロセッサは、一般に、ロード演算の全てを追跡することができ、そのようなページフォールトが偶然に発生した場合にギャザー命令の完了を監視することができる必要がある。
【００８２】
しかしながら、幾つかの実施形態では、単一のデータ要素をロード又はギャザーするのではなく、１つのロード演算当たり複数のデータ要素をメモリの限定範囲からプロセッサ上にロードするか又は別の方法で取り出すことができる。すなわち、幾つかの実施形態では、１つ又は複数の多重データ要素ロードを用いて、限定範囲ベクトルギャザー演算を実施することができる。図示した例示の実施形態に示すように、実行ロジック８０９は、限定範囲と結合された５１２ビット幅メモリロードロジック８４０を備えることができる。この５１２ビット幅メモリロードロジックは、５１２ビットロードを実行して、単一のロード演算において５１２ビット内に収まるだけの数のデータ要素をロードすることができる。例えば、単一の５１２ビットロード演算は、６４個の８ビットバイトデータ要素をロードすることができる。
幾つかの実施形態では、２５６バイトの限定範囲のうちの４つの５１２ビットの重ならない部分をそれぞれロードする４つの５１２ビットロードを用いて、２５６バイトの限定範囲８２０全体をプロセッサ内にロードすることができる。図示するように、幾つかの実施形態では、２５６ビットのロードされた限定範囲全体は、４つの５１２ビットレジスタにストアすることもできるし、代替的に８つの２５６ビットレジスタ又は２つの１０２４ビットレジスタにストアすることもできる。アーキテクチャ的又は非アーキテクチャ的な専用化されたレジスタ又は存在するレジスタを含めて、任意のオンプロセッサ記憶ロケーションが潜在的に好適である。別のオプションとして、５１２ビットロードではなく、それよりも狭い（例えば、１２８ビット、２５６ビット等）又はそれよりも広い（例えば、１０２４ビット）ロードをオプションとして用いることができる。その上、必要なデータ要素が、限定範囲の所与の部分内にない場合、これらのロードのうちの１つ又は複数をオプションとして省略することができる。
【００８３】
各ロードは、場合によっては、メモリインデックスの値に応じて、必要な／所望のデータ要素と不要な／非所望のデータ要素との双方をロードすることができる。例えば、各ロードは、複数のメモリインデックスのうちの或るメモリインデックスによって示されるメモリアドレスにおける少なくとも１つのデータ要素と、複数のメモリインデックスのうちの或るメモリインデックスによって示されないメモリアドレスにおける少なくとも１つのデータ要素とをロードすることができる。例えば、上記説明図に示すように、インデックス０、５０、１００、１５０、及び２００にそれぞれ対応する必要な／所望のデータ要素Ａ、Ｂ、Ｃ、Ｄ、及びＥをロードすることができる。加えて、例えば、データ要素Ｆ及びＧ等の不要な／非所望のデータ要素をロードすることができる。他の不要な／非所望のデータ要素（簡略化のために図示せず）もロードすることができる。データ要素Ｆ及びＧは、ソースパックドバイトメモリインデックス８１３によってインデックス又はアドレス指定することができる。利点として、そのようなマルチデータ要素ロードは、所与の数のデータ要素を、その所与の数のロードよりも少ないロードでギャザーすることを可能にすることができる。例えば、４つのロード演算しか実行されない場合であっても、通常、５つ以上の所望のデータ要素をロードされた限定範囲に含めることができる。例えば、１つの実施形態では、６４個の８ビットバイトデータ要素を４つのロードのみでギャザーすることができる。他の実施形態では、３２個、１６個、又は８個の所望の比較的小さなデータ要素をそれよりも少ない数（例えば、４つ）のより大きな多重データ要素ロードを用いてメモリからロードすることができる。その結果、これは、演算の速度を向上させるのに役立つことができる。
【００８４】
上記説明図を再び参照すると、実行ロジック８０９は、メモリインデックスベースのデータ再配置ロジック８４２も備える。このメモリインデックスベースのデータ再配置ロジックは、ロードされた限定範囲及び／又はロードされたデータ要素からの所望の／必要なデータ要素を再配置するとともに、それらのデータ要素を、対応するメモリインデックスによって示されるようなデスティネーション記憶ロケーションにおける適切な位置にストアするように動作可能とすることができる。幾つかの実施形態では、限定範囲全体のデータ要素のサブセットを、メモリインデックスに基づいてデスティネーション記憶ロケーションに選択的に移動させることができる。再配置を実行する様々な方法が考えられている。幾つかの実施形態では、１つ又は複数の並べ替え、シャッフル、抽出、又は他のデータ再配置演算を用いることができる。
【００８５】
様々な異なるパックドデータ幅及びデータ要素幅が好適である。幾つかの実施形態では、１２８ビット幅パックドデータが、１６個の８ビットバイトデータ要素又は８個の１６ビットワードデータ要素を含むことができる。他の実施形態では、２５６ビットパックドデータが、３２個の８ビットバイトデータ要素又は１６個の１６ビットワードデータ要素を含むことができる。更に他の実施形態では、５１２ビットパックドデータは、６４個の８ビットバイトデータ要素又は３２個の１６ビットワードデータ要素を含むことができる。更なる実施形態では、５１２ビットよりも大きなパックドデータフォーマット又は１２８ビットよりも小さなパックドデータフォーマットのいずれも好適である。例えば、１０２４ビットパックドデータ及び６４ビットパックドデータは、８ビットバイト又は１６ビットワードのいずれにも好適である。一般に、データ要素の数は、パックドデータオペランドのビットによるサイズをデータ要素のビットによるサイズによって除算したものに等しい。
【００８６】
図９は、好適な一組のパックドデータレジスタ９０７の一例示の実施形態のブロック図である。図示したパックドデータレジスタは、３２個の５１２ビットパックドデータレジスタ又はベクトルレジスタを含む。これらの３２個の５１２ビットレジスタは、ＺＭＭ０〜ＺＭＭ３１のラベルが付けられている。図示した実施形態では、これらのレジスタのうちの下位の１６個、すなわちＺＭＭ０〜ＺＭＭ１５の低順序の２５６ビットは、ＹＭＭ０〜ＹＭＭ１５のラベルが付けられたそれぞれの２５６ビットパックドデータレジスタ又はベクトルレジスタ上にエイリアスされるか又は重ねられている。ただし、これは必須ではない。同様に、図示した実施形態では、ＹＭＭ０〜ＹＭＭ１５の低順序の１２８ビットは、ＸＭＭ０及びＸＭＭ１のラベルが付けられたそれぞれの１２８ビットパックドデータレジスタ又はベクトルレジスタ上にエイリアスされるか又は重ねられている。ただし、これも必須ではない。５１２ビットレジスタＺＭＭ０〜ＺＭＭ３１は、５１２ビットパックドデータ、２５６ビットパックドデータ、又は１２８ビットパックドデータを保持するように動作可能である。
２５６ビットレジスタＹＭＭ０〜ＹＭＭ１５は、２５６ビットパックドデータ又は１２８ビットパックドデータを保持するように動作可能である。１２８ビットレジスタＸＭＭ０及びＸＭＭ１は、１２８ビットパックドデータを保持するように動作可能である。これらのレジスタのそれぞれは、パックド浮動小数点データ又はパックド整数データのいずれかをストアするのに用いることができる。少なくとも８ビットのバイトデータと、１６ビットのワードデータと、３２ビットのダブルワードデータ又は単精度浮動小数点データと、６４ビットのクワッドワードデータ又は倍精度浮動小数点データとを含む種々のデータ要素サイズがサポートされる。パックドデータレジスタの代替の実施形態は、異なる数のレジスタ、異なるサイズのレジスタを含むことができ、小さい方のレジスタ上に大きい方のレジスタをエイリアスする場合もあるし、しない場合もある。
【００８７】
図１０は、好適な一組のパックドデータ演算マスクレジスタ１００８の一例示の実施形態のブロック図である。パックドデータ演算マスクレジスタのそれぞれは、パックドデータ演算マスクをストアするのに用いることができる。図示した実施形態では、この一組は、ｋ０〜ｋ７のラベルが付けられた８つのパックドデータ演算マスクレジスタを含む。代替の実施形態は、８つよりも少ない（例えば、２つ、４つ、６つ等）か又は８つよりも多い（例えば、１６個、２０個、３２個等）パックドデータ演算マスクレジスタを含むことができる。図示した実施形態では、パックドデータ演算マスクレジスタのそれぞれは６４ビットである。代替の実施形態では、パックドデータ演算マスクレジスタの幅は、６４ビットよりも広くすることもできるし（例えば、８０ビット、１２８ビット等）、６４ビットよりも狭くすることもできる（例えば、８ビット、１６ビット、３２ビット等）。例として、マスクされた限定範囲ベクトルメモリアクセス命令は、３ビット（例えば、３ビットフィールド）を用いて、８つのパックドデータ演算マスクレジスタｋ０〜ｋ７のうちの任意の１つをエンコード又は指定することができる。代替の実施形態では、パックドデータ演算マスクレジスタが上記よりも少ないか又は多いとき、それぞれ、上記よりも少ないビット又は多くのビットを用いることができる。
【００８８】
図１１は、６４ビットパックドデータ演算マスクレジスタ１１０８の一例示の実施形態を示すとともに、パックドデータ演算マスクとして及び／又はマスキングに用いられるビット数がパックドデータ幅及びデータ要素幅に依存することを示す図である。図示したマスクレジスタは６４ビット幅であるが、これは必須ではない。一般に、単一の要素ごとのマスキング制御ビットが用いられるとき、マスキングに用いられるビット数は、ビットによるパックドデータ幅をビットによるパックドデータ要素幅によって除算したものに等しい。更に例を挙げて説明するために、幾つかの可能な例示の実施形態を検討する。８ビットのみ、例えば、下位の８ビットのみを、１６ビットデータ要素を有する１２８ビットパックドデータに用いることができる。１６ビットのみ、例えば下位の１６ビットのみを、８ビットデータ要素を有する１２８ビットパックドデータ又は１６ビットデータ要素を有する２５６ビットパックドデータのいずれかに用いることができる。３２ビットのみ、例えば下位の３２ビットのみを、８ビットデータ要素を有する２５６ビットパックドデータ又は１６ビットデータ要素を有する５１２ビットパックドデータのいずれかに用いることができる。６４ビットの全てのビットを、８ビットデータ要素を有する５１２ビットパックドデータに用いることができる。
【００８９】
命令セットは、１つ又は複数の命令フォーマットを有する。所与の命令フォーマットは、特に、実行される演算（オペコード）と、その演算が実行される対象のオペランド（複数の場合もある）とを指定する様々なフィールド（ビット数、ビットのロケーション）を定義する。幾つかの命令フォーマットは、命令テンプレート（又はサブフォーマット）の定義を通じて更に分割される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義することができ（含まれるフィールドは、通常、同じ順序であるが、少なくとも幾つかは、含まれるフィールドが少ないので、異なるビット位置を有する）、及び／又は異なって解釈される所与のフィールドを有するように定義することができる。このように、ＩＳＡの各命令は、所与の命令フォーマットを用いて（定義される場合、その命令フォーマットの命令テンプレートのうちの所与の１つにおいて）表され、演算及びオペランドを指定するためのフィールドを含む。例えば、例示的なＡＤＤ命令は、特定のオペコードと、このオペコードを指定するオペコードフィールド及びオペランド（ソース１／デスティネーション及びソース２）を選択するオペランドフィールドを含む命令フォーマットとを有し、命令ストリームにおけるこのＡＤＤ命令の存在は、特定のオペランドを選択するオペランドフィールドに特定の内容を有する。アドバンストベクトルエクステンション（ＡＶＸ：Advanced Vector Extensions）（ＡＶＸ１及びＡＶＸ２）と呼ばれるとともにベクトルエクステンション（ＶＥＸ：Vector Extensions）符号化方式を用いる一組のＳＩＭＤエクステンションがリリースされ及び／又公開されている。（例えば、Intel(R) 64 and IA-32 Architectures Software Developers Manual, October 2011及びIntel(R) Advanced Vector Extensions Programming Reference, June 2011を参照）。
【００９０】
例示的な命令フォーマット
本明細書において説明する命令（複数の場合もある）の実施形態は、種々のフォーマットで具現化することができる。加えて、例示的なシステム、アーキテクチャ、及びパイプラインが以下に詳述される。命令（複数の場合もある）の実施形態は、そのようなシステム、アーキテクチャ、及びパイプライン上で実行することができるが、詳述されるものに限定されるものではない。
【００９１】
ＶＥＸ命令フォーマット
ＶＥＸエンコードによって、命令が３つ以上のオペランドを有することが可能になり、ＳＩＭＤベクトルレジスタを１２８ビットよりも長くすることが可能になる。ＶＥＸプレフィックスの使用によって、３オペランド（又はそれよりも多くのオペランド）シンタックスが提供される。例えば、これまでの２オペランド命令は、ソースオペランドを上書きするＡ＝Ａ＋Ｂ等の演算を実行していた。ＶＥＸプレフィックスの使用によって、オペランドは、Ａ＝Ｂ＋Ｃ等の非消去的な演算を実行することが可能になる。
【００９２】
図１２Ａは、ＶＥＸプレフィックス１２０２、リアルオペコードフィールド１２３０、Ｍｏｄ  Ｒ／Ｍバイト１２４０、ＳＩＢバイト１２５０、変位フィールド１２６２、及びＩＭＭ８  １２７２を含む例示的なＡＶＸ命令フォーマットを示している。図１２Ｂは、図１２Ａからのどのフィールドがフルオペコードフィールド１２７４及びベース演算フィールド１２４２を構成するのかを示している。図１２Ｃは、図１２Ａからのどのフィールドがレジスタインデックスフィールド１２４４を構成するのかを示している。
【００９３】
ＶＥＸプレフィックス（バイト０〜２）１２０２は、３バイト形式でエンコードされる。第１のバイトは、フォーマットフィールド１２４０（ＶＥＸバイト０、ビット［７：０］）であり、このフィールドは、明示的なＣ４バイト値（Ｃ４命令フォーマットを区別するのに用いられる一意の値）を含む。第２のバイト及び第３のバイト（ＶＥＸバイト１及び２）は、特定の機能を提供する複数のビットフィールドを含む。具体的には、ＲＥＸフィールド１２０５（ＶＥＸバイト１、ビット［７〜５］）は、ＶＥＸ．Ｒビットフィールド（ＶＥＸバイト１、ビット［７］−Ｒ）と、ＶＥＸ．Ｘビットフィールド（ＶＥＸバイト１、ビット［６］−Ｘ）と、ＶＥＸ．Ｂビットフィールド（ＶＥＸバイト１、ビット［５］−Ｂ）とからなる。命令の他のフィールドは、当該技術分野で知られているように、レジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、及びｂｂｂ）をエンコードし、ＶＥＸ．Ｒ、ＶＥＸ．Ｘ、及びＶＥＸ．Ｂを加えることによってＲｒｒｒ、Ｘｘｘｘ、及びＢｂｂｂを形成することができるようにする。
オペコードマップフィールド１２１５（ＶＥＸバイト１、ビット［４：０］−ｍｍｍｍｍ）は、暗黙のリーディングオペコードバイトをエンコードするコンテンツを含む。Ｗフィールド１２６４（ＶＥＸバイト２、ビット［７］−Ｗ）は、ＶＥＸ．Ｗという表記によって表され、命令に応じて異なる機能を提供する。ＶＥＸ．ｖｖｖｖ１２２０（ＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）の役割は、次のもの、すなわち、１）ＶＥＸ．ｖｖｖｖが、反転された（１の補数）形式で指定された第１のソースレジスタオペランドをエンコードし、２つ以上のソースオペランドを有する命令に有効であること、２）ＶＥＸ．ｖｖｖｖが、或る特定のベクトルシフトについて１の補数の形式で指定されたデスティネーションレジスタオペランドをエンコードすること、又は３）ＶＥＸ．ｖｖｖｖがどのオペランドもエンコードしないこと、を含むことができ、このフィールドは予約され、１１１１ｂを含むべきであるる。ＶＥＸ．Ｌ１２６８のサイズフィールド（ＶＥＸバイト２、ビット［２］−Ｌ）＝０である場合、これは、１２８ビットベクトルを示す。ＶＥＸ．Ｌ＝１である場合、これは、２５６ビットベクトルを示す。プレフィックスエンコードフィールド１２２５（ＶＥＸバイト２、ビット［１：０］−ｐｐ）は、ベース演算フィールド用の追加のビットを提供する。
【００９４】
リアルオペコードフィールド１２３０（バイト３）は、オペコードバイトとしても知られている。このオペコードの一部は、このフィールドにおいて指定される。
【００９５】
ＭＯＤ  Ｒ／Ｍフィールド１２４０（バイト４）は、ＭＯＤフィールド１２４２（ビット［７-６］）、Ｒｅｇフィールド１２４４（ビット［５〜３］）、及びＲ／Ｍフィールド１２４６（ビット［２〜０］）を含む。Ｒｅｇフィールド１２４４の役割は、次のもの、すなわち、デスティネーションレジスタオペランド又はソースレジスタオペランド（Ｒｒｒｒのｒｒｒ）をエンコードすること、を含むこともできるし、オペコードエクステンションとして扱われて、どの命令オペランドをエンコードするのにも用いられないようにすることもできる。Ｒ／Ｍフィールド１２４６の役割は、次のもの、すなわち、メモリアドレスを参照する命令オペランドをエンコードすること、又はデスティネーションレジスタオペランド若しくはソースレジスタオペランドをエンコードすることを含むことができる。
【００９６】
スケール、インデックス、ベース（ＳＩＢ）。スケールフィールド１２５０（バイト５）のコンテンツは、メモリアドレス生成に用いられるＳＳ１２５２（ビット［７〜６］）を含む。ＳＩＢ．ｘｘｘ１２５４（ビット［５〜３］）及びＳＩＢ．ｂｂｂ１２５６（ビット［２〜０］）のコンテンツは、レジスタインデックスＸｘｘｘ及びＢｂｂｂに関して前に言及している。
【００９７】
変位フィールド１２６２及び即値フィールド（ＩＭＭ８）１２７２は、アドレスデータを含む。
【００９８】
一般的なベクトルフレンドリー命令フォーマット
ベクトルフレンドリー命令フォーマットは、ベクトル命令に適した命令フォーマットである（例えば、ベクトル演算に特有のある特定のフィールドが存在する）。ベクトル演算及びスカラー演算の双方がベクトルフレンドリー命令フォーマットを通じてサポートされる実施形態が説明されるが、代替的な実施形態は、ベクトルフレンドリー命令フォーマットを通じてベクトル演算のみを用いる。
【００９９】
図１３Ａ及び図１３Ｂは、本発明の実施形態による一般的な（generic）ベクトルフレンドリー命令フォーマット及びその命令テンプレートを示すブロック図である。図１３Ａは、本発明の実施形態による一般的なベクトルフレンドリー命令フォーマット及びそのクラスＡ命令テンプレートを示すブロック図である一方、図１３Ｂは、本発明の実施形態による一般的なベクトルフレンドリー命令フォーマット及びそのクラスＢ命令テンプレート示すブロック図である。具体的には、クラスＡ命令テンプレート及びクラスＢ命令テンプレートが定義される一般的なベクトルフレンドリー命令フォーマット１３００。これらの命令テンプレートの双方は、無メモリアクセス１３０５の命令テンプレート及びメモリアクセス１３２０の命令テンプレートを含む。ベクトルフレンドリー命令フォーマットとの関連における「一般的な」という用語は、この命令フォーマットがどの具体的な命令セットにも結び付いていないことをいう。
【０１００】
ベクトルフレンドリー命令フォーマットが次のもの、すなわち、３２ビット（４バイト）又は６４ビット（８バイト）のデータ要素幅（又はサイズ）を有する６４バイトベクトルオペランド長（又はサイズ）（したがって、６４バイトベクトルは、１６個のダブルワードサイズの要素又は代替的に８個のクワッドワードサイズの要素のいずれかからなる）；１６ビット（２バイト）又は８ビット（１バイト）のデータ要素幅（又はサイズ）を有する６４バイトベクトルオペランド長（又はサイズ）；３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、又は８ビット（１バイト）のデータ要素幅（又はサイズ）を有する３２バイトベクトルオペランド長（又はサイズ）；及び３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、又は８ビット（１バイト）データ要素幅（又はサイズ）を有する１６バイトベクトルオペランド長（又はサイズ）をサポートする本発明の実施形態が説明されるが、代替的な実施形態は、より大きな、より小さな、及び／又は異なるデータ要素幅（例えば、１２８ビット（１６バイト）データ要素幅）を有するより大きな、より小さな、又は異なるベクトルオペランドサイズ（例えば、２５６バイトベクトルオペランド）をサポートすることができる。
【０１０１】
図１３ＡにおけるクラスＡ命令テンプレートは、１）無メモリアクセス１３０５の命令テンプレート内には、無メモリアクセスのフルラウンド制御タイプ演算１３１０の命令テンプレートと、無メモリアクセスのデータ変換タイプ演算１３１５の命令テンプレートとが示されている；及び２）メモリアクセス１３２０の命令テンプレート内には、メモリアクセスのテンポラル１３２５命令テンプレートとメモリアクセスの非テンポラル１３３０命令テンプレートとが示されていることを含む。図１３ＢにおけるクラスＢ命令テンプレートは、１）無メモリアクセス１３０５の命令テンプレート内に、無メモリアクセスの書き込みマスク制御、部分ラウンド制御タイプ演算１３１２の命令テンプレートと無メモリアクセスの書き込みマスク制御ｖサイズ（vsize）タイプ演算１３１７の命令テンプレートとが示されている；及び２）メモリアクセス１３２０の命令テンプレート内に、メモリアクセス書き込みマスク制御１３２７の命令テンプレートが示されていることを含む。
【０１０２】
一般的なベクトルフレンドリー命令フォーマット１３００は、図１３Ａ及び図１３Ｂに図示した順序で以下に列挙した次のフィールドを含む。
【０１０３】
フォーマットフィールド１３４０−このフィールド内の特定の値（命令フォーマット識別子値）は、ベクトルフレンドリー命令フォーマットを一意に識別し、したがって、命令ストリームにおけるベクトルフレンドリー命令フォーマット内の命令の存在を一意に識別する。したがって、このフィールドは、一般的なベクトルフレンドリー命令フォーマットのみを有する命令セットには必要とされないという意味でオプションである。
【０１０４】
ベース演算フィールド１３４２−その内容は、異なるベース演算を区別する。
【０１０５】
レジスタインデックスフィールド１３４４−その内容は、直接又はアドレス生成を通じて、ソースオペランド及びデスティネーションオペランドがレジスタ又はメモリにある場合に、それらのロケーションを指定する。これらは、Ｐ×Ｑ（例えば３２×５１２、１６×１２８、３２×１０２４、６４×１０２４）レジスタファイルからＮ個のレジスタを選択するのに十分なビット数を含む。１つの実施形態では、Ｎは、３つまでのソースレジスタ及び１つまでのデスティネーションレジスタとすることができるが、代替的な実施形態は、それよりも多くの又はそれよりも少ないソースレジスタ及びデスティネーションレジスタをサポートすることができる（例えば、２つまでのソースをサポートすることもでき、これらのソースのうちの一方はデスティネーションとしても機能する。３つまでのソースをサポートすることもでき、これらのソースのうちの１つはデスティネーションとしても機能する。２つまでのソース及び１つまでのデスティネーションをサポートすることもできる。）。
【０１０６】
変更子フィールド１３４６−その内容は、メモリアクセスを指定する一般的なベクトル命令フォーマットにおける命令の存在を、そうでない命令の存在と区別する。すなわち、無メモリアクセス１３０５の命令テンプレートと、メモリアクセス１３２０の命令テンプレートとを区別する。メモリアクセス演算は、メモリ階層を読み出し及び／又はメモリ階層に書き込む（幾つかの場合には、レジスタ内の値を用いてソースアドレス及び／又はデスティネーションアドレスを指定する）一方、非メモリアクセス演算は、それを行わない（例えば、ソース及びデスティネーションはレジスタである）。１つの実施形態では、このフィールドは、メモリアドレス計算を実行する３つの異なる方法から選択も行うが、代替的な実施形態は、メモリアドレス計算を実行するそれよりも多くの方法、それよりも少ない方法、又は異なる方法をサポートすることができる。
【０１０７】
増大（augmentation）演算フィールド１３５０−その内容は、様々な異なる演算のうちのいずれがベース演算に加えて実行されるのかを区別する。このフィールドは、コンテキスト特有のものである。本発明の１つの実施形態では、このフィールドは、クラスフィールド１３６８、アルファフィールド１３５２、及びベータフィールド１３５４に分割されている。増大演算フィールド１３５０は、共通の数群の演算を２つの命令、３つの命令、又は４つの命令ではなく単一の命令で実行することを可能にする。
【０１０８】
スケールフィールド１３６０−その内容は、メモリアドレス生成（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅを用いるアドレス生成の場合）についてインデックスフィールドの内容のスケーリングを可能にする。
【０１０９】
変位（displacement）フィールド１３６２Ａ−その内容は、メモリアドレス生成（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅ＋ｄｉｓｐｌａｃｅｍｅｎｔを用いるアドレス生成の場合）の一部として用いられる。
【０１１０】
変位ファクターフィールド１３６２Ｂ（変位ファクターフィールド１３６２Ｂの真上に変位フィールド１３６２Ａを並置していることは一方又は他方が用いられることを示していることに留意されたい）−その内容は、アドレス生成の一部として用いられる。このフィールドは、メモリアクセスのサイズ（Ｎ）によってスケーリングされる変位ファクターを指定する。ここで、Ｎは、メモリアクセスのバイト数である（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅ＋ｓｃａｌｅｄ  ｄｉｓｐｌａｃｅｍｅｎｔを用いるアドレス生成の場合）。冗長な低順序ビットは無視され、したがって、変位ファクターフィールドの内容は、有効アドレスを計算する際に用いられる最終変位を生成するためにメモリオペランドの全サイズ（Ｎ）を乗算される。Ｎの値は、フルオペコードフィールド１３７４（本明細書において後に説明する）及びデータ操作フィールド１３５４Ｃに基づいてランタイムにおいてプロセッサハードウェアによって求められる。変位フィールド１３６２Ａ及び変位ファクターフィールド１３６２Ｂは、無メモリアクセス１３０５の命令テンプレートには用いられないこと及び／又は異なる実施形態は２つのうちの一方のみを実装することもできるし、全く実装しなくてもよいという意味でオプションである。
【０１１１】
データ要素幅フィールド１３６４−その内容は、複数のデータ要素幅のうちのいずれが用いられるのかを区別する（幾つかの実施形態では、全ての命令について；他の実施形態では、命令の一部についてのみ）。このフィールドは、１つのデータ要素幅しかサポートされていない場合及び／又はデータ要素幅がオペコードの或る態様を用いてサポートされている場合に必要とされないという意味でオプションである。
【０１１２】
書き込みマスクフィールド１３７０−その内容は、データ要素位置単位で、デスティネーションベクトルオペランドにおけるそのデータ要素位置が、ベース演算及び増大演算の結果を反映するか否かを制御する。クラスＡ命令テンプレートは、マージング書き込みマスキング（merging−writemasking）をサポートする一方、クラスＢ命令テンプレートは、マージング書き込みマスキング及びゼロイング書き込みマスキングの双方をサポートする。マージングのとき、ベクトルマスクによって、デスティネーションにおける任意の一組の要素を（ベース演算及び増大演算によって指定された）任意の演算の実行中の更新から保護することが可能になる。他の１つの実施形態では、対応するマスクビットが０を有するデスティネーションの各要素の旧値が保持される。これとは対照的に、ゼロイングのとき、ベクトルマスクによって、デスティネーションにおける任意の一組の要素を（ベース演算及び増大演算によって指定された）任意の演算の実行中にゼロにすることが可能になる。１つの実施形態では、デスティネーションの要素は、対応するマスクビットが０値を有するときに０にセットされる。
この機能のサブセットは、実行されている演算のベクトル長を制御する能力である（すなわち、要素のスパンが最初のものから最後のものに変更される）。しかしながら、変更される要素が連続的であることは必要ではない。したがって、書き込みマスクフィールド１３７０によって、ロード、ストア、算術、論理等を含む部分的なベクトル演算が可能になる。書き込みマスクフィールド１３７０の内容が、用いられる書き込みマスクを含む複数の書き込みマスクレジスタのうちの１つを選択する（したがって、書き込みマスクフィールド１３７０の内容が実行されるそのマスキングを間接的に識別する）本発明の実施形態が説明されているが、代替的な実施形態は、その代わりに又は付加的に、マスク書き込みフィールド１３７０の内容が実行されるマスキングを直接指定することを可能にする。
【０１１３】
即値フィールド１３７２−その内容は即値の指定を可能にする。このフィールドは、即値をサポートしていない一般的なベクトルフレンドリーフォーマットの実施態様には存在せず、即値を用いない命令には存在しないという意味でオプションである。
【０１１４】
クラスフィールド１３６８−その内容は、異なる命令のクラスを区別する。図１３Ａ及び図１３Ｂを参照すると、このフィールドの内容は、クラスＡ命令及びクラスＢ命令から選択される。図１３Ａ及び図１３Ｂにおいて、丸い角の方形は、特定の値がフィールド（例えば、図１３Ａ及び図１３Ｂにおけるクラスフィールド１３６８用のそれぞれクラスＡ１３６８Ａ及びクラスＢ１３６８Ｂ）に存在することを示すのに用いられる。
【０１１５】
クラスＡの命令テンプレート
クラスＡの非メモリアクセス１３０５の命令テンプレートの場合、アルファフィールド１３５２は、ＲＳフィールド１３５２Ａとして解釈され、その内容は、異なる増大演算タイプのうちのいずれが実行されるのかを区別する（例えば、ラウンド１３５２Ａ．１及びデータ変換１３５２Ａ．２は、それぞれ、無メモリアクセスのラウンドタイプ演算１３１０及び無メモリアクセスのデータ変換タイプ演算１３１５の命令テンプレートについて指定される）一方、ベータフィールド１３５４は、指定されたタイプの演算のうちのいずれが実行されるのかを区別する。無メモリアクセス１３０５の命令テンプレートでは、スケールフィールド１３６０、変位フィールド１３６２Ａ、及び変位スケールフィールド１３６２Ｂは存在しない。
【０１１６】
無メモリアクセスの命令テンプレート−フルラウンド制御タイプ演算
【０１１７】
無メモリアクセスフルラウンド制御タイプ演算１３１０の命令テンプレートでは、ベータフィールド１３５４は、ラウンド制御フィールド１３５４Ａとして解釈され、その内容（複数の場合もある）は、静的なラウンドを提供する。説明する本発明の実施形態においては、ラウンド制御フィールド１３５４Ａが、全浮動小数点例外抑制（suppress all floating point exceptions）（ＳＡＥ）フィールド１３５６及びラウンド演算制御フィールド１３５８を含むが、代替的な実施形態は、これらの概念の双方を同じフィールドにエンコードすることもできるし、これらの概念／フィールドの一方又は他方のみを有することもできる（例えば、ラウンド演算制御フィールド１３５８のみを有することができる）。
【０１１８】
ＳＡＥフィールド１３５６−その内容は、例外イベント報告をディセーブルするか否かを区別する。ＳＡＥフィールド１３５６の内容が、抑制がイネーブルされていることを示すとき、所与の命令は、どの種類の浮動小数点例外フラグも報告せず、どの浮動小数点例外ハンドラーも起動しない。
【０１１９】
ラウンド演算制御フィールド１３５８−その内容は、一群のラウンド演算（例えば、ラウンドアップ、ラウンドダウン、０へのラウンド、及び最も近いものへのラウンド）のうちのいずれを実行するのかを区別する。したがって、ラウンド演算制御フィールド１３５８によって、命令単位でのラウンドモードの変更が可能になる。プロセッサがラウンドモードを指定するための制御レジスタを備える本発明の１つの実施形態では、ラウンド演算制御フィールド１３５０の内容は、そのレジスタ値を無効にする。
【０１２０】
無メモリアクセス命令テンプレート−データ変換タイプ演算
【０１２１】
無メモリアクセスデータ変換タイプ演算１３１５の命令テンプレートでは、ベータフィールド１３５４は、データ変換フィールド１３５４Ｂとして解釈され、その内容は、複数のデータ変換のうちのいずれが実行されるのかを区別する（例えば、データ変換無し、スウィズル、ブロードキャスト）。
【０１２２】
メモリアクセス１３２０のクラスＡの命令テンプレートの場合、アルファフィールド１３５２は、エビクションヒント（eviction hint）フィールド１３５２Ｂとして解釈され、その内容は、エビクションヒントのうちのいずれが用いられるのかを区別する（図１３Ａでは、テンポラル１３５２Ｂ．１及び非テンポラル１３５２Ｂ．２は、それぞれ、メモリアクセスのテンポラル１３２５の命令テンプレート及びメモリアクセスの非テンポラル１３３０の命令テンプレート用に指定される）一方、ベータフィールド１３５４は、データ操作フィールド１３５４Ｃとして解釈され、その内容は、複数のデータ操作演算（プリミティブとしても知られている）のいずれが実行されるのかを区別する（例えば、無操作；ブロードキャスト；ソースのアップ変換；及びデスティネーションのダウン変換）。メモリアクセス１３２０の命令テンプレートは、スケールフィールド１３６０、及びオプションとして変位フィールド１３６２Ａ又は変位スケールフィールド１３６２Ｂを含む。
【０１２３】
ベクトルメモリ命令は、変換サポートを用いてメモリからのベクトルロード及びメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素に関してメモリから／へデータを転送する。実際に転送される要素は、書き込みマスクとして選択されたベクトルマスクの内容によって規定される。
【０１２４】
メモリアクセス命令テンプレート−テンポラル
【０１２５】
テンポラルデータは、キャッシュからの利益を得るのに十分なほど直ちに再利用される可能性のあるデータである。しかしながら、これはヒントであり、種々のプロセッサは、このヒントを完全に無視することを含めて、種々の方法でこのテンポラルデータを実施することができる。
【０１２６】
メモリアクセス命令テンプレート−非テンポラル
【０１２７】
非テンポラルデータは、第１レベルキャッシュにおけるキャッシュからの利益を得るのに十分なほど直ちに再利用される可能性のないデータであり、エビクションの優先順位が与えられるべきである。しかしながら、これはヒントであり、種々のプロセッサは、このヒントを完全に無視することを含めて、種々の方法でこの非テンポラルデータを実施することができる。
【０１２８】
クラスＢの命令テンプレート
クラスＢの命令テンプレートの場合、アルファフィールド１３５２は、書き込みマスク制御（Ｚ）フィールド１３５２Ｃとして解釈され、その内容は、書き込みマスクフィールド１３７０によって制御される書き込みマスキングがマージングであるのか又はゼロイングであるのかを区別する。
【０１２９】
クラスＢの非メモリアクセス１３０５の命令テンプレートの場合、ベータフィールド１３５４の一部は、ＲＬフィールド１３５７Ａとして解釈され、その内容は、種々の増大演算タイプのうちのいずれが実行されるのかを区別する（例えば、ラウンド１３５７Ａ．１及びベクトル長（ＶＳＩＺＥ）１３５７Ａ．２は、それぞれ、無メモリアクセスの書き込みマスク制御の部分ラウンド制御タイプ演算１３１２の命令テンプレート及び無メモリアクセスの書き込みマスク制御のＶＳＩＺＥタイプ演算１３１７の命令テンプレート用に指定される）一方、ベータフィールド１３５４の残りは、指定されたタイプの演算のいずれが実行されるのかを区別する。無メモリアクセス１３０５の命令テンプレートには、スケールフィールド１３６０、変位フィールド１３６２Ａ、及び変位スケールフィールド１３６２Ｂは存在しない。
【０１３０】
無メモリアクセス書き込みマスク制御の部分ラウンド制御タイプ演算１３１０の命令テンプレートでは、ベータフィールド１３５４の残りは、ラウンド演算フィールド１３５９Ａとして解釈され、例外イベント報告はディセーブルされる（所与の命令は、どの種類の浮動小数点例外フラグも報告せず、どの浮動小数点例外ハンドラーも起動しない）。
【０１３１】
ラウンド演算制御フィールド１３５９Ａ−ラウンド演算制御フィールド１３５８と全く同様に、その内容は、一群のラウンド演算（例えば、ラウンドアップ、ラウンドダウン、０へのラウンド、及び最も近いものへのラウンド）のうちのいずれを実行するのかを区別する。したがって、ラウンド演算制御フィールド１３５９Ａによって、命令単位でのラウンドモードの変更が可能になる。プロセッサがラウンドモードを指定するための制御レジスタを備える本発明の１つの実施形態では、ラウンド演算制御フィールド１３５０の内容は、そのレジスタ値を無効にする。
【０１３２】
無メモリアクセス書き込みマスク制御のＶＳＩＺＥタイプ演算１３１７の命令テンプレートでは、ベータフィールド１３５４の残りは、ベクトル長フィールド１３５９Ｂとして解釈され、その内容は、複数のデータベクトル長（例えば、１２８バイト、２５６バイト、又は５１２バイト）のうちのいずれが実行されるのかを区別する。
【０１３３】
メモリアクセス１３２０のクラスＢの命令テンプレートの場合、ベータフィールド１３５４の一部は、ブロードキャストフィールド１３５７Ｂとして解釈され、その内容は、ブロードキャストタイプデータ操作演算を実行するか否かを区別する一方、ベータフィールド１３５４の残りは、ベクトル長フィールド１３５９Ｂとして解釈される。メモリアクセス１３２０の命令テンプレートは、スケールフィールド１３６０、及びオプションとして変位フィールド１３６２Ａ又は変位スケールフィールド１３６２Ｂを含む。
【０１３４】
一般的なベクトルフレンドリー命令フォーマット１３００に関して、フォーマットフィールド１３４０、ベース演算フィールド１３４２、及びデータ要素幅フィールド１３６４を含むフルオペコードフィールド１３７４が示されている。フルオペコードフィールド１３７４がこれらのフィールドの全てを含む１つの実施形態が示されているが、フルオペコードフィールド１３７４は、これらのフィールドの全てをサポートしない実施形態では、これらのフィールドのうちの、全てよりも少ないフィールドを含む。フルオペコードフィールド１３７４は、演算コード（オペコード）を提供する。
【０１３５】
増大演算フィールド１３５０、データ要素幅フィールド１３６４、及び書き込みマスクフィールド１３７０によって、一般的なベクトルフレンドリー命令フォーマットにおいてこれらの特徴を命令単位で指定することが可能になる。
【０１３６】
書き込みマスクフィールド及びデータ要素幅フィールドの組み合わせによって、それらが種々のデータ要素幅に基づいてマスクを適用することを可能にするという点で、タイプ付けされた命令が作成される。
【０１３７】
クラスＡ及びクラスＢ内に見られる様々な命令テンプレートは、種々の状況において有益である。本発明の幾つかの実施形態では、種々のプロセッサ又はプロセッサ内の種々のコアが、クラスＡのみ、クラスＢのみ、又は双方のクラスをサポートすることができる。例えば、汎用コンピューティングを対象とした高性能汎用アウトオブオーダーコアは、クラスＢのみをサポートすることができ、主としてグラフィックス及び／又は科学（スループット）コンピューティングを対象としたコアは、クラスＡのみをサポートすることができ、双方を対象としたコアは、双方をサポートすることができる（もちろん、双方のクラスからの全てのテンプレート及び命令とは限らないが双方のクラスからのテンプレート及び命令の或る混合を有するコアは本発明の範囲内にある）。また、単一のプロセッサは、複数のコアを備えることができ、それらのコアの全てが同じクラスをサポートするか、又は異なるコアは異なるクラスをサポートする。
例えば、別々のグラフィックスコア及び汎用コアを有するプロセッサでは、主としてグラフィックス及び／又は科学（スループット）コンピューティングを対象としたグラフィックスコアのうちの１つは、クラスＡのみをサポートすることができる一方、汎用コアのうちの１つ又は複数は、クラスＢのみをサポートする汎用コンピューティングを対象としたアウトオブオーダー実行及びレジスタリネームを有する高性能汎用コアとすることができる。別個のグラフィックスコアを有しない別のプロセッサは、クラスＡ及びクラスＢの双方をサポートする１つ又は複数の汎用インオーダーコア又はアウトオブオーダーコアを備えることができる。もちろん、一方のクラスからの特徴は、本発明の異なる実施形態では他方のクラスにおいて実施することもできる。高水準言語で記述されるプログラムは、様々な異なる実行可能形態にされる（例えば、実行時にコンパイルされるか又は静的にコンパイルされる）。この実行可能形態には、１）実行用にターゲットプロセッサによってサポートされるクラス（複数の場合もある）の命令のみを有する形態、又は２）全てのクラスの命令の種々の組み合わせを用いて記述された代替的なルーチンを有するとともに、コードを現在実行しているプロセッサによってサポートされる命令に基づいて実行するルーチンを選択する制御フローコードを有する形態、が含まれる。
【０１３８】
例示的な具体的なベクトルフレンドリー命令フォーマット 
図１４ＡからＤは、本発明の実施形態による例示的な具体的なベクトルフレンドリー命令フォーマットを示すブロック図である。図１４ＡからＤは、ロケーション、サイズ、解釈、及びフィールドの順序、並びにそれらのフィールドの幾つかの値を指定しているという意味で具体的である、具体的なベクトルフレンドリー命令フォーマット１４００を示している。具体的なベクトルフレンドリー命令フォーマット１４００は、ｘ８６命令セットを拡張するのに用いることができ、したがって、フィールドのうちの幾つかは、既存のｘ８６命令セット及びその拡張（例えば、ＡＶＸ）において用いられるものと同様又は同じである。このフォーマットは、拡張を有する既存のｘ８６命令セットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、及び即値フィールドと一致が保たれている。図１４ＡからＤからのフィールドがマッピングする図１３Ａ、Ｂからのフィールドが示されている。
【０１３９】
本発明の実施形態は、説明の目的で一般的なベクトルフレンドリー命令フォーマット１３００に照らして具体的なベクトルフレンドリー命令フォーマット１４００に関して説明されているが、本発明は、特許請求されている箇所を除いてこの具体的なベクトルフレンドリー命令フォーマット１４００に限定されるものではないことが理解されるべきである。例えば、一般的なベクトルフレンドリー命令フォーマット１３００は、様々なフィールドについて様々な可能なサイズを考慮しているが、具体的なベクトルフレンドリー命令フォーマット１４００は、具体的なサイズのフィールドを有するものとして示されている。具体例として、データ要素幅フィールド１３６４は、具体的なベクトルフレンドリー命令フォーマット１４００では１ビットフィールドとして示されているが、本発明は、そのように限定されるものではない（すなわち、一般的なベクトルフレンドリー命令フォーマット１３００は、データ要素幅フィールド１３６４の他のサイズを考慮している）。
【０１４０】
一般的なベクトルフレンドリー命令フォーマット１３００は、図１４Ａに図示した順序で以下に列挙する次のフィールドを含む。
【０１４１】
ＥＶＥＸプレフィックス（バイト０〜３）１４０２−４バイト形式でエンコードされる。
【０１４２】
フォーマットフィールド１３４０（ＥＶＥＸバイト０、ビット［７：０］）−第１バイト（ＥＶＥＸバイト０）は、フォーマットフィールド１３４０であり、０ｘ６２（本発明の１つの実施形態では、ベクトルフレンドリー命令フォーマットを区別するために用いられる一意の値）を含む。
【０１４３】
第２バイト〜第４バイト（ＥＶＥＸバイト１〜３）は、具体的な機能を提供する複数のビットフィールドを含む。
【０１４４】
ＲＥＸフィールド１４０５（ＥＶＥＸバイト１、ビット［７〜５］）−ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）と、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）と、１３５７ＢＥＸバイト１、ビット［５］−Ｂ）とからなる。ＥＶＥＸ．Ｒビットフィールド、ＥＶＥＸ．Ｘビットフィールド、及びＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同じ機能を提供し、１の補数形式を用いてエンコードされる。すなわち、ＺＭＭ０は１１１１Ｂとしてエンコードされ、ＺＭＭ１５は００００Ｂとしてエンコードされる。命令の他のフィールドは、当該技術分野で知られているようにレジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、及びｂｂｂ）をエンコードし、そのため、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、及びＥＶＥＸ．Ｂを追加することによってＲｒｒｒ、Ｘｘｘｘ、及びＢｂｂｂを形成することができる。
【０１４５】
ＲＥＸ'フィールド１３１０−これは、ＲＥＸ'フィールド１３１０の最初の部分であり、拡張された３２レジスタセットの上位１６個又は下位１６個のいずれかをエンコードするのに用いられるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）である。本発明の１つの実施形態では、このビットは、以下に示す他のものとともに、ＢＯＵＮＤ命令と（よく知られたｘ８６の３２ビットモードにおいて）区別するためにビット反転フォーマットでストアされる。この命令のリアルオペコードバイトは６２であるが、ＭＯＤ  Ｒ／Ｍ フィールド（以下で説明）においてＭＯＤフィールドにおける１１の値を受理しない。本発明の代替的な実施形態は、これと以下に示す他のビットとを反転フォーマットでストアしない。１の値は、下位の１６個のレジスタをエンコードするのに用いられる。換言すれば、Ｒ'Ｒｒｒｒは、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、及び他のフィールドからの他のＲＲＲを組み合わせることによって形成される。
【０１４６】
オペコードマップフィールド１４１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）−その内容は、暗に示される先頭オペコードバイト（０Ｆ、０Ｆ３８、又は０Ｆ３）をエンコードする。
【０１４７】
データ要素幅フィールド１３６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）−ＥＶＥＸ．Ｗという表記によって表わされる。ＥＶＥＸ．Ｗは、データタイプの粒度（サイズ）（３２ビットデータ要素又は６４ビットデータ要素のいずれか）を定義するのに用いられる。
【０１４８】
ＥＶＥＸ．ｖｖｖｖ１４２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割は、次のものを含むことができる。１）ＥＶＥＸ．ｖｖｖｖは、反転された（１の補数）形式で指定された第１のソースレジスタオペランドをエンコードし、２つ以上のソースオペランドを有する命令に有効である；２）ＥＶＥＸ．ｖｖｖｖは、或る特定のベクトルシフト用に１の補数形式で指定されたデスティネーションレジスタオペランドをエンコードする；又は３）ＥＶＥＸ．ｖｖｖｖは、オペランドをエンコードせず、フィールドは保持され、１１１１ｂを含むことになる。したがって、ＥＶＥＸ．ｖｖｖｖフィールド１４２０は、反転された（１の補数）形式でストアされた第１のソースレジスタ指定子の４つの低順序のビットをエンコードする。命令に応じて、余分な異なるＥＶＥＸビットフィールドが、指定子のサイズを３２個のレジスタに拡張するのに用いられる。
【０１４９】
ＥＶＥＸ．Ｕ１３６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）−ＥＶＥＸ．Ｕ＝０である場合、これはクラスＡ又はＥＶＥＸ．Ｕ０を示し、ＥＶＥＸ．Ｕ＝１である場合、これはクラスＢ又はＥＶＥＸ．Ｕ１を示す。
【０１５０】
プレフィックスエンコードフィールド１４２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）−ベース演算フィールド用の追加のビットを提供する。ＥＶＥＸプレフィックスフォーマットにおけるレガシーＳＳＥ命令用のサポートを提供することに加えて、これは、ＳＩＭＤプレフィックスをコンパクトにする利点も有する（ＳＩＭＤプレフィックスを表すバイトを必要とするのではなく、ＥＶＥＸプレフィックスは２ビットしか必要としない）。１つの実施形態では、レガシーフォーマット及びＥＶＥＸプレフィックスフォーマットの双方においてＳＩＭＤプレフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を用いるレガシーＳＳＥ命令をサポートするために、これらのレガシーＳＩＭＤプレフィックスは、ＳＩＭＤプレフィックスエンコードフィールド内にエンコードされ、ランタイム時において、デコーダーのＰＬＡに提供される前にレガシーＳＩＭＤプレフィックスに展開される（そのため、ＰＬＡは、これらのレガシー命令を変更することなく、レガシーフォーマット及びＥＶＥＸフォーマットの双方を実行することができる）。より新しい命令は、ＥＶＥＸプレフィックスエンコードフィールドの内容をオペコード拡張子として直接用いることができるが、或る特定の実施形態は、一貫性を保つために同様の方法で拡張されるが、これらのレガシーＳＩＭＤプレフィックスによって異なる意味を指定することが可能である。代替的な実施形態は、２ビットＳＩＭＤプレフィックスエンコードをサポートし、したがって、拡張子を必要としないようにＰＬＡを再設計することができる。
【０１５１】
アルファフィールド１３５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ；ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．書き込みマスク制御、及びＥＶＥＸ．Ｎとしても知られている；αを用いて示されることもある）−前述したように、このフィールドはコンテキスト特有である。
【０１５２】
ベータフィールド１３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、ＥＶＥＸ．ｓ２〜０、ＥＶＥＸ．ｒ２〜０、ＥＶＥＸ．ｒｒ１、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られている；βββを用いて示されることもある）−前述したように、このフィールドはコンテキスト特有である。
【０１５３】
ＲＥＸ'フィールド１３１０−これは、ＲＥＸ'フィールドの残りの部分であり、拡張された３２レジスタセットの上位１６個又は下位１６個のいずれかをエンコードするのに用いることができるＥＶＥＸ．Ｖ'ビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ'）である。このビットは、ビット反転フォーマットでストアされる。１の値は、下位１６個のレジスタをエンコードするのに用いられる。換言すれば、Ｖ'ＶＶＶＶは、ＥＶＥＸ．Ｖ'、ＥＶＥＸ．ｖｖｖｖを組み合わせることによって形成される。
【０１５４】
書き込みマスクフィールド１３７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）−その内容は、前述したように書き込みマスクレジスタにおけるレジスタのインデックスを指定する。本発明の１つの実施形態では、具体的な値ＥＶＥＸ．ｋｋｋ＝０００は、書き込みマスクが特定の命令に用いられないことを意味する特殊な挙動を有する（これは、全て１に配線された書き込みマスク又はマスキングハードウェアを迂回するハードウェアの使用を含む様々な方法で実施することができる）。
【０１５５】
リアルオペコードフィールド１４３０（バイト４）は、オペコードバイトとしても知られている。オペコードの一部は、このフィールドにおいて指定される。
【０１５６】
ＭＯＤ  Ｒ／Ｍ フィールド１４４０（バイト５）は、ＭＯＤフィールド１４４２、Ｒｅｇフィールド１４４４、及びＲ／Ｍフィールド１４４６を含む。前述したように、ＭＯＤフィールド１４４２の内容は、メモリアクセス演算と非メモリアクセス演算とを区別する。Ｒｅｇフィールド１４４４の役割は、デスティネーションレジスタオペランド若しくはソースレジスタオペランドのいずれかをエンコードするという２つの状況に要約することができるか、又はオペコード拡張子として扱われ、どの命令オペランドをエンコードするのにも用いることができない。Ｒ／Ｍフィールド１４４６の役割は、次のもの、すなわち、メモリアドレスを参照する命令オペランドをエンコードすること、又はデスティネーションレジスタオペランド若しくはソースレジスタオペランドのいずれかをエンコードすることを含むことができる。
【０１５７】
スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）−前述したように、スケールフィールド１３５０の内容は、メモリアドレス生成に用いられる。ＳＩＢ．ｘｘｘ１４５４及びＳＩＢ．ｂｂｂ１４５６−これらのフィールドの内容は、レジスタインデックスＸｘｘｘ及びＢｂｂｂに関して前述している。
【０１５８】
変位フィールド１３６２Ａ（バイト７〜１０）−ＭＯＤフィールド１４４２が１０を含むとき、バイト７〜１０は、変位フィールド１３６２Ａであり、レガシー３２ビット変位（ｄｉｓｐ３２）と同じ機能を果たし、バイト粒度で機能する。
【０１５９】
変位ファクターフィールド１３６２Ｂ（バイト７）−ＭＯＤフィールド１４４２が０１を含むとき、バイト７は、変位ファクターフィールド１３６２Ｂである。このフィールドのロケーションは、バイト粒度で機能するレガシーｘ８６命令セットの８ビット変位（ｄｉｓｐ８）のロケーションと同じである。ｄｉｓｐ８は、符号拡張されるので、−１２８バイト〜１２７バイトのオフセットのみをアドレス指定することができる。６４バイトキャッシュラインに関して、ｄｉｓｐ８は、実際に有用な４つの値−１２８、−６４、０、及び６４にしかセットすることができない８ビットを用いる。より大きな範囲が多くの場合必要とされるので、ｄｉｓｐ３２が用いられる。しかしながら、ｄｉｓｐ３２は４バイトを必要とする。ｄｉｓｐ８及びｄｉｓｐ３２とは対照的に、変位ファクターフィールド１３６２Ｂは、ｄｉｓｐ８を解釈し直したものである。変位ファクターフィールド１３６２Ｂを用いるとき、実際の変位は、変位ファクターフィールドの内容にメモリオペランドアクセスのサイズ（Ｎ）を乗算したものによって求められる。このタイプの変位は、ｄｉｓｐ８＊Ｎとして参照される。これによって、平均命令長が削減される（単一のバイトが変位に用いられるが、はるかに大きな範囲を有する）。そのような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であり、したがって、アドレスオフセットの低順序の冗長ビットがエンコードに不要であるという前提に基づいている。換言すれば、変位ファクターフィールド１３６２Ｂは、レガシーｘ８６命令セットの８ビット変位の代わりになる。したがって、変位ファクターフィールド１３６２Ｂは、ｘ８６命令セットの８ビット変位と同じ方法でエンコードされ（そのため、ＭｏｄＲＭ／ＳＩＢエンコードルールに変更はない）、唯一の例外は、ｄｉｓｐ８がｄｉｓｐ８＊Ｎにオーバーロードされるということである。換言すれば、エンコードルール又はエンコード長に変更はなく、ハードウェアによる変位値の解釈にのみ変更がある（これは、バイトに関するアドレスオフセットを得るために、メモリオペランドのサイズによって変位をスケーリングすることを必要とする）。
【０１６０】
即値フィールド１３７２は、前述したように作用する。
【０１６１】
フルオペコードフィールド
図１４Ｂは、本発明の１つの実施形態によるフルオペコードフィールド１３７４を構成する具体的なベクトルフレンドリー命令フォーマット１４００のフィールドを示すブロック図である。具体的には、フルオペコードフィールド１３７４は、フォーマットフィールド１３４０、ベース演算フィールド１３４２、及びデータ要素幅（Ｗ）フィールド１３６４を含む。ベース演算フィールド１３４２は、プレフィックスエンコードフィールド１４２５、オペコードマップフィールド１４１５、及びリアルオペコードフィールド１４３０を含む。
【０１６２】
レジスタインデックスフィールド
図１４Ｃは、本発明の１つの実施形態によるレジスタインデックスフィールド１３４４を構成する具体的なベクトルフレンドリー命令フォーマット１４００のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド１３４４は、ＲＥＸフィールド１４０５、ＲＥＸ'フィールド１４１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド１４４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド１４４６、ＶＶＶＶフィールド１４２０、ｘｘｘフィールド１４５４、及びｂｂｂフィールド１４５６を含む。
【０１６３】
増大演算フィールド
図１４Ｄは、本発明の１つの実施形態による増大演算フィールド１３５０を構成する具体的なベクトルフレンドリー命令フォーマット１４００のフィールドを示すブロック図である。クラス（Ｕ）フィールド１３６８は、０を含むとき、これは、ＥＶＥＸ．Ｕ０（クラスＡ１３６８Ａ）を示す。このフィールドが１を含むとき、これは、ＥＶＥＸ．Ｕ１（クラスＢ１３６８Ｂ）を示す。Ｕ＝０であり、ＭＯＤフィールド１４４２が１１（無メモリアクセス演算を示す）を含むとき、アルファフィールド１３５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、ｒｓフィールド１３５２Ａとして解釈される。ｒｓフィールド１３５２Ａが１（ラウンド１３５２Ａ．１）を含むとき、ベータフィールド１３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ラウンド制御フィールド１３５４Ａとして解釈される。ラウンド制御フィールド１３５４Ａは、１ビットＳＡＥフィールド１３５６及び２ビットラウンド演算フィールド１３５８を含む。ｒｓフィールド１３５２Ａが０（データ変換１３５２Ａ．２）を含むとき、ベータフィールド１３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットデータ変換フィールド１３５４Ｂとして解釈される。Ｕ＝０であり、ＭＯＤフィールド１４４２が００、０１、又は１０（メモリアクセス演算を示す）とき、アルファフィールド１３５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、エビクションヒント（ＥＨ）フィールド１３５２Ｂとして解釈され、ベータフィールド１３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットデータ操作フィールド１３５４Ｃとして解釈される。
【０１６４】
Ｕ＝１であるとき、アルファフィールド１３５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、書き込みマスク制御（Ｚ）フィールド１３５２Ｃとして解釈される。Ｕ＝１であり、ＭＯＤフィールド１４４２が１１（無メモリアクセス演算を示す）とき、ベータフィールド１３５４の一部（ＥＶＥＸバイト３、ビット［４］−Ｓ０）は、ＲＬフィールド１３５７Ａとして解釈される。上記フィールドが１（ラウンド１３５７Ａ．１）を含むとき、ベータフィールド１３５４の残り（ＥＶＥＸバイト３、ビット［６〜５］−Ｓ２〜１）は、ラウンド演算フィールド１３５９Ａとして解釈される一方、ＲＬフィールド１３５７Ａが０（ＶＳＩＺＥ１３５７．Ａ２）を含むとき、ベータフィールド１３５４の残り（ＥＶＥＸバイト３、ビット［６〜５］−Ｓ２〜１）は、ベクトル長フィールド１３５９Ｂ（ＥＶＥＸバイト３、ビット［６〜５］−Ｌ１〜０）として解釈される。Ｕ＝１であり、ＭＯＤフィールド１４４２が００、０１、又は１０（メモリアクセス演算を示す）とき、ベータフィールド１３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド１３５９Ｂ（ＥＶＥＸバイト３、ビット［６〜５］−Ｌ１〜０）及びブロードキャストフィールド１３５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）として解釈される。
【０１６５】
例示的なレジスタアーキテクチャ
図１５は、本発明の１つの実施形態によるレジスタアーキテクチャ１５００のブロック図である。図示した実施形態には、５１２ビット幅である３２個のベクトルレジスタ１５１０が存在する。これらのレジスタは、ｚｍｍ０〜ｚｍｍ３１として参照される。下位の１６個のｚｍｍレジスタの低順序の２５６ビットは、レジスタｙｍｍ０〜ｙｍｍ１６の上に重ねられている。下位の１６個のｚｍｍレジスタの低順序の１２８ビット（ｙｍｍレジスタの低順序の１２８ビット）は、レジスタｘｍｍ０〜ｘｍｍ１５の上に重ねられている。特定のベクトルフレンドリー命令フォーマット１４００は、以下の表に示すように、これらの重ねられたレジスタファイルに対して演算を行う。
【表１】
2014182807.tif 000005
【０１６６】
換言すれば、ベクトル長フィールド１３５９Ｂは、最大長と、１つ又は複数の他のそれによりも短い長さから選択される。そのような短い各長さは、前の長さの半分の長さであり、ベクトル長フィールド１３５９Ｂを有しない命令テンプレートは、最大ベクトル長に対して演算を行う。さらに、１つの実施形態では、特定のベクトルフレンドリー命令フォーマット１４００のクラスＢ命令テンプレートは、パックド又はスカラー単精度／倍精度浮動小数点データ及びパックド又はスカラー整数データに対して演算を行う。スカラー演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタ内の最低順序データ要素位置に対して実行される演算である。それよりも高順序のデータ要素位置は、実施形態に応じて、命令前のものと同じままにされるか又はゼロにされる。
【０１６７】
書き込みマスクレジスタ１５１５−図示した実施形態では、それぞれサイズが６４ビットの８つの書き込みマスクレジスタ（ｋ０〜ｋ７）がある。代替の実施形態では、書き込みマスクレジスタ１５１５は、サイズが１６ビットである。前述したように、本発明の１つの実施形態では、ベクトルマスクレジスタｋ０は、書き込みマスクとして用いることができない。通常、ｋ０を示すエンコードが書き込みマスクに用いられるとき、このエンコードは、その命令用の書き込みマスキングを有効にディセーブルする０ｘＦＦＦＦのハードワイヤード書き込みマスクを選択する。
【０１６８】
汎用レジスタ１５２５−図示した実施形態には、メモリオペランドをアドレス指定する既存のｘ８６アドレス指定モードとともに用いられる１６個の６４ビット汎用レジスタがある。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、及びＲ８〜Ｒ１５という名称によって参照される。
【０１６９】
ＭＭＸパックド整数フラットレジスタファイル１５５０がエイリアスされるスカラー浮動小数点スタックレジスタファイル（ｘ８７スタック）１５４５−図示した実施形態では、ｘ８７スタックは、ｘ８７命令セットエクステンションを用いて３２／６４／８０ビットの浮動小数点データに対してスカラー浮動小数点演算を実行するのに用いられる８要素スタックである一方、ＭＭＸレジスタは、６４ビットパックド整数データに対して演算を実行するとともに、ＭＭＸレジスタとＸＭＭレジスタとの間で実行される幾つかの演算用のオペランドを保持するのに用いられる。
【０１７０】
本発明の代替の実施形態は、より広いレジスタ又はより狭いレジスタを用いることができる。加えて、本発明の代替の実施形態は、より多くのレジスタファイル及びレジスタ、より少ないレジスタファイル及びレジスタ、又は異なるレジスタファイル及びレジスタを用いることができる。
【０１７１】
例示的なコアアーキテクチャ、プロセッサ、及びコンピューターアーキテクチャ
プロセッサコアは、種々の目的で種々のプロセッサにおいて種々の方法で実施することができる。例えば、そのようなコアの実施態様は、１）汎用コンピューティングを対象とした汎用インオーダーコア、２）汎用コンピューティングを対象とした高性能汎用アウトオブオーダーコア、３）主としてグラフィックス及び／又は科学（スループット）コンピューティングを対象とした専用コアを含むことができる。種々のプロセッサの実施態様は、１）汎用コンピューティングを対象とした１つ若しくは複数の汎用インオーダーコア及び／又は汎用コンピューティングを対象とした１つ若しくは複数の汎用アウトオブオーダーコアを備えるＣＰＵ、並びに２）主としてグラフィックス及び／又は科学（スループット）を対象とした１つ又は複数の専用コアを備えるコプロセッサを含むことができる。そのような種々のプロセッサは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内にある別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、統合グラフィックスロジック及び／又は科学（スループット）ロジック等の専用ロジック又は専用コアと呼ばれることがある）、並びに４）説明したＣＰＵ（アプリケーションコア（複数の場合もある）又はアプリケーションプロセッサ（複数の場合もある）と呼ばれることがある）、上述したコプロセッサ、及び追加の機能と同じダイ上に備えることができるシステムオンチップ、を備えることができる種々のコンピューターシステムアーキテクチャをもたらす。例示的なコアアーキテクチャを次に説明し、その後に例示的なプロセッサ及びコンピューターアーキテクチャを説明する。
【０１７２】
例示的なコアアーキテクチャ
インオーダーコア及びアウトオブオーダーコアのブロック図
図１６Ａは、本発明の実施形態による例示的なインオーダーパイプライン及び例示的なレジスタリネームアウトオブオーダー発行／実行パイプラインの双方を示すブロック図である。図１６Ｂは、本発明の実施形態によるプロセッサに含まれる、インオーダーアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネームアウトオブオーダー発行／実行アーキテクチャコアの双方を示すブロック図である。図１６Ａ及び図１６Ｂにおける実線のボックスは、インオーダーパイプライン及びインオーダーコアを示している一方、破線のボックスのオプションの追加は、レジスタリネームアウトオブオーダー発行／実行パイプライン及びコアを示している。インオーダーの態様はアウトオブオーダーの態様のサブセットであることから、アウトオブオーダーの態様を説明することにする。
【０１７３】
図１６Ａにおいて、プロセッサパイプライン１６００は、フェッチステージ１６０２、長さデコードステージ１６０４、デコードステージ１６０６、アロケーションステージ１６０８、リネームステージ１６１０、スケジューリング（ディスパッチ又は発行としても知られている）ステージ１６１２、レジスタ読み出し／メモリ読み出しステージ１６１４、実行ステージ１６１６、ライトバック／メモリ書き込みステージ１６１８、例外ハンドリングステージ１６２２、及びコミットステージ１６２４を備える。
【０１７４】
図１６Ｂは、実行エンジンユニット１６５０に結合されたフロントエンドユニット１６３０を備えるプロセッサコア１６９０を示し、双方は、メモリユニット１６７０に結合されている。コア１６９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、又はハイブリッドコアタイプ若しくは代替のコアタイプとすることができる。更に別のオプションとして、コア１６９０は、例えば、ネットワークコア又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ＧＰＧＰＵ）コア、グラフィックスコア等のような専用コアとすることができる。
【０１７５】
フロントエンドユニット１６３０は、命令キャッシュユニット１６３４に結合された分岐予測ユニット１６３２を備え、この命令キャッシュユニットは、命令変換索引バッファー（ＴＬＢ）１６３６に結合され、この命令変換索引バッファーは、命令フェッチユニット１６３８に結合され、この命令フェッチユニットは、デコードユニット１６４０に結合されている。デコードユニット１６４０（又はデコーダー）は、命令をデコードし、オリジナルの命令からデコードされるか、又はオリジナルの命令を別の方法で反映するか、又はオリジナルの命令から導出される１つ又は複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成することができる。デコードユニット１６４０は、様々な異なるメカニズムを用いて実施することができる。好適なメカニズムの例には、ルックアップテーブル、ハードウェア実施態様、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコード読み出し専用メモリ（ＲＯＭ）等が含まれるが、これらに限定されるものではない。１つの実施形態では、コア１６９０は、（例えば、デコードユニット１６４０内又は別の状況ではフロントエンドユニット１６３０内において）或る特定のマクロ命令用のマイクロコードをストアするマイクロコードＲＯＭ又は他の媒体を備える。デコードユニット１６４０は、実行エンジンユニット１６５０内のリネーム／アロケーターユニット１６５２に結合されている。
【０１７６】
実行エンジンユニット１６５０は、リタイアメントユニット１６５４と一組の１つ又は複数のスケジューラユニット１６５６とに結合されたリネーム／アロケーターユニット１６５２を備える。スケジューラユニット（複数の場合もある）１６５６は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット（複数の場合もある）１６５６は、物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）１６５８に結合されている。物理レジスタファイル（複数の場合もある）ユニット１６５８のそれぞれは、１つ又は複数の物理レジスタファイルを表し、これらの物理レジスタファイルの異なるものは、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインター）等の１つ又は複数の異なるデータタイプをストアする。１つの実施形態では、物理レジスタファイル（複数の場合もある）ユニット１６５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラーレジスタユニットを含む。
これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供することができる。物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）１６５８は、（例えば、リオーダーバッファー（複数の場合もある）及びリタイアメントレジスタファイル（複数の場合もある）を用いる；フューチャーファイル（複数の場合もある）、履歴バッファー（複数の場合もある）、及びリタイアメントレジスタファイル（複数の場合もある）を用いる；レジスタマップ及びレジスタのプールを用いる等して）レジスタリネーム及びアウトオブオーダー実行を実施することができる様々な方法を示すリタイアメントユニット１６５４によって重ね合わされる。リタイアメントユニット１６５４及び物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）１６５８は、実行クラスター（複数の場合もある）１６６０に結合されている。実行クラスター（複数の場合もある）１６６０は、一組の１つ又は複数の実行ユニット１６６２及び一組の１つ又は複数のメモリアクセスユニット１６６４を備える。実行ユニット１６６２は、様々なタイプのデータ（例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して様々な演算（例えば、シフト、加算、減算、乗算）を実行することができる。
幾つかの実施形態は、特定の機能又は特定の数組の機能に専用の複数の実行ユニットを備えることができるが、他の実施形態は、全ての機能を全て実行する１つの実行ユニットのみ又は複数の実行ユニットを備えることができる。スケジューラユニット（複数の場合もある）１６５６、物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）１６５８、及び実行クラスター（複数の場合もある）１６６０は、場合によっては複数のものとして示される。なぜならば、或る特定の実施形態は、或る特定のタイプのデータ／演算用の別々のパイプライン（例えば、それぞれがそれ自体のスケジューラユニット、物理レジスタファイル（複数の場合もある）ユニット、及び／又は実行クラスターを有するスカラー整数パイプライン、スカラー浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／又はメモリアクセスパイプライン。別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスターのみがメモリアクセスユニット（複数の場合もある）１６６４を有する或る特定の実施形態が実施される）を作成するからである。別々のパイプラインが用いられる場合、これらのパイプラインのうちの１つ又は複数はアウトオブオーダー発行／実行とすることができ、残りはインオーダーとすることができることも理解されるべきである。
【０１７７】
一組のメモリアクセスユニット１６６４は、メモリユニット１６７０に結合され、このメモリユニットは、レベル２（Ｌ２）キャッシュユニット１６７６に結合されたデータキャッシュユニット１６７４に結合されているデータＴＬＢユニット１６７２を備える。１つの例示的な実施形態では、メモリアクセスユニット１６６４は、ロードユニット、アドレスストアユニット、及びデータストアユニットを備えることができ、これらのそれぞれは、メモリユニット１６７０内のデータＴＬＢユニット１６７２に結合されている。命令キャッシュユニット１６３４は、メモリユニット１６７０内のレベル２（Ｌ２）キャッシュユニット１６７６に更に結合されている。Ｌ２キャッシュユニット１６７６は、１つ又は複数の他のレベルのキャッシュ及び最終的にはメインメモリに結合されている。
【０１７８】
例として、例示的なレジスタリネームアウトオブオーダー発行／実行コアアーキテクチャは、次のようにパイプライン１６００を実施することができる。すなわち、１）命令フェッチ１６３８が、フェッチステージ１６０２及び長さデコードステージ１６０４を実行する；２）デコードユニット１６４０が、デコードステージ１６０６を実行する；３）リネーム／アロケーターユニット１６５２が、アロケーションステージ１６０８及びリネームステージ１６１０を実行する；４）スケジューラユニット（複数の場合もある）１６５６が、スケジュールステージ１６１２を実行する；５）物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）１６５８及びメモリユニット１６７０が、レジスタ読み出し／メモリ読み出しステージ１６１４を実行する；実行クラスター１６６０が、実行ステージ１６１６を実行する；６）メモリユニット１６７０及び物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）１６５８が、ライトバック／メモリ書き込みステージ１６１８を実行する；７）様々なユニットが、例外ハンドリングステージ１６２２に関与することができる；並びに８）リタイアメントユニット１６５４及び物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）１６５８が、コミットステージ１６２４を実行する。
【０１７９】
コア１６９０は、本明細書において説明する命令（複数の場合もある）を含む１つ又は複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンとともに追加された幾つかの拡張を有する）；カリフォルニア州サニーベールのMIPS Technologies社のＭＩＰＳ命令セット；カリフォルニア州サニーベールのARM Holdings社のＡＲＭ命令セット（ＮＥＯＮ等のオプションの追加の拡張を有する）をサポートすることができる。１つの実施形態では、コア１６９０は、パックドデータ命令セットエクステンション（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを備え、それによって、多くのマルチメディアアプリケーションによって用いられる演算をパックドデータを用いて実行することが可能になる。
【０１８０】
コアはマルチスレッド化（並列の２つ以上の組の演算又はスレッドを実行する）をサポートすることができ、タイムスライスマルチスレッド化、同時マルチスレッド化（単一の物理コアが、当該物理コアが同時にマルチスレッド化しているスレッドのそれぞれについて論理コアを提供する）、又はそれらの組合せ（例えば、Ｉｎｔｅｌ（登録商標）のＨｙｐｅｒｔｈｒｅａｄｉｎｇ  ｔｅｃｈｎｏｌｏｇｙ等のタイムスライスフェッチ及びデコード、並びにその後の同時のマルチスレッド化）を含む様々な方法でそれを行うことができることが理解されるべきである。
【０１８１】
レジスタリネームは、アウトオブオーダー実行との関連で説明されているが、レジスタリネームは、インオーダーアーキテクチャにおいても用いることができることが理解されるべきである。プロセッサの図示した実施形態は、別々の命令キャッシュユニット１６３４及びデータキャッシュユニット１６７４並びに共有Ｌ２キャッシュユニット１６７６を備えるが、代替の実施形態は、例えば、レベル１（Ｌ１）内部キャッシュ、又は複数のレベルの内部キャッシュ等の命令及びデータの双方用の単一の内部キャッシュを有することができる。幾つかの実施形態では、システムは、内部キャッシュと、コア及び／又はプロセッサの外部にある外部キャッシュとの組合せを備えることができる。代替的に、キャッシュの全てを、コア及び／又はプロセッサの外部にすることができる。
【０１８２】
具体的な例示的インオーダーコアアーキテクチャ
図１７Ａ及び図１７Ｂは、より具体的な例示的インオーダーコアアーキテクチャのブロック図を示している。このコアは、チップ内の幾つかの論理ブロック（同じタイプ及び／又は異なるタイプの他のコアを含む）のうちの１つである。これらの論理ブロックは、アプリケーションに応じて、或る固定機能ロジック、メモリＩ／Ｏインターフェース、及び他の必要なＩ／Ｏロジックと、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を通じて通信する。
【０１８３】
図１７Ａは、本発明の実施形態による、オンダイ相互接続ネットワーク１７０２への接続と、レベル２（Ｌ２）キャッシュ１７０４のローカルサブセットとを伴ったシングルプロセッサコアのブロック図である。１つの実施形態では、命令デコーダー１７００は、パックドデータ命令セットエクステンションを有するｘ８６命令セットをサポートする。Ｌ１キャッシュ１７０６は、スカラーユニット及びベクトルユニット内へのキャッシュメモリへの低レイテンシーアクセスを可能にする。１つの実施形態（設計を単純化する）では、スカラーユニット１７０８及びベクトルユニット１７１０は、別々のレジスタセット（それぞれ、スカラーレジスタ１７１２及びベクトルレジスタ１７１４）を用い、それらの間で転送されるデータは、メモリに書き込まれ、次いで、レベル１（Ｌ１）キャッシュ１７０６からリードバックされるが、本発明の代替の実施形態は、異なる手法を用いる（例えば、単一のレジスタセットを用いるか、又はライトバック及びリードバックされることなく２つのレジスタファイル間でデータを転送することを可能にする通信パスを備える）ことができる。
【０１８４】
Ｌ２キャッシュ１７０４のローカルサブセットは、プロセッサコアごとに１つの別々のローカルサブセットに分割されたグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ１７０４のそれ自身のローカルサブセットへの直接アクセスパスを有する。プロセッサコアによって読み出されたデータは、当該プロセッサコアのＬ２キャッシュサブセット１７０４にストアされ、他のプロセッサコアがそれら自身のローカルＬ２キャッシュサブセットにアクセスすることと並列に高速にアクセスすることができる。プロセッサコアによって書き込まれたデータは、それ自身のＬ２キャッシュサブセット１７０４にストアされ、必要な場合に他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシーを保証する。リングネットワークは、プロセッサコア、Ｌ２キャッシュ、及び他の論理ブロック等のエージェントがチップ内で互いに通信することを可能にするために双方向である。各リングデータパスは、方向あたり１０１２ビット幅である。
【０１８５】
図１７Ｂは、本発明の実施形態による、図１７Ａにおけるプロセッサコアの一部の拡大図である。図１７Ｂは、Ｌ１キャッシュ１７０４のＬ１データキャッシュ１７０６Ａ部分、並びにベクトルユニット１７１０及びベクトルレジスタ１７１４に関するより詳細な内容を含む。具体的には、ベクトルユニット１７１０は、整数命令、単精度浮動小数点命令、倍精度浮動小数点命令のうちの１つ又は複数を実行する１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ１７２８を参照）である。ＶＰＵは、スウィズルユニット１７２０を用いたレジスタ入力のスウィズルと、数値変換ユニット１７２２Ａ及び１７２２Ｂを用いた数値変換と、メモリ入力に関する複製ユニット１７２４を用いた複製とをサポートする。書き込みマスクレジスタ１７２６は、結果のベクトル書き込みを断定することを可能にする。
【０１８６】
統合メモリコントローラー及び統合グラフィックスを有するプロセッサ
図１８は、本発明の実施形態による、２つ以上のコアを有することができ、統合メモリコントローラーを有することができ、統合グラフィックスを有することができるプロセッサ１８００のブロック図である。図１８における実線のボックスは、単一のコア１８０２Ａと、システムエージェント１８１０と、一組の１つ又は複数のバスコントローラーユニット１８１６とを有するプロセッサ１８００を示している一方、破線のボックスのオプションの追加は、複数のコア１８０２Ａ〜１８０２Ｎと、システムエージェントユニット１８１０内の一組の１つ又は複数の統合メモリコントローラーユニット１８１４と、専用ロジック１８０８とを有する代替のプロセッサ１８００を示している。
【０１８７】
したがって、プロセッサ１８００の種々の実施態様は、１）統合グラフィックス及び／又は科学（スループット）ロジック（１つ又は複数のコアを備えることができる）である専用ロジック１８０８と、１つ又は複数の汎用コア（例えば、汎用インオーダーコア、汎用アウトオブオーダーコア、これらの２つの組合せ）であるコア１８０２Ａ〜１８０２Ｎとを有するＣＰＵと、２）主としてグラフィックス及び／又は科学（スループット）向けの多数の専用コアであるコア１８０２Ａ〜１８０２Ｎを有するコプロセッサと、３）多数の汎用インオーダーコアであるコア１８０２Ａ〜１８０２Ｎを有するコプロセッサとを備えることができる。したがって、プロセッサ１８００は、汎用プロセッサ、例えば、ネットワークプロセッサ若しくは通信プロセッサ等のコプロセッサ又は専用プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループットメニーインテグレーテッドコア（ＭＩＣ）コプロセッサ（３０個以上のコアを備える）、組み込みプロセッサ等とすることができる。このプロセッサは、１つ又は複数のチップ上に実装することができる。プロセッサ１８００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、又はＮＭＯＳ等の複数のプロセス技術のうちの任意のものを用いた１つ若しくは複数の基板の一部とすることができ、及び／又は１つ若しくは複数の基板上に実装することができる。
【０１８８】
メモリ階層は、コア内の１つ又は複数のレベルのキャッシュと、一組の１つ又は複数の共有キャッシュユニット１８０６と、一組の統合メモリコントローラーユニット１８１４に結合された外部メモリ（図示せず）とを含む。一組の共有キャッシュユニット１８０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、若しくは他のレベルのキャッシュ等の１つ又は複数の中間レベルキャッシュ、最終レベルキャッシュ（ＬＬＣ）、及び／又それらの組合せを含むことができる。１つの実施形態では、リングベースの相互接続部ユニット１８１２が、統合グラフィックスロジック１８０８、一組の共有キャッシュユニット１８０６、及びシステムエージェントユニット１８１０／統合メモリコントローラーユニット（複数の場合もある）１８１４を相互接続するが、代替の実施形態は、そのようなユニットを相互接続するための任意の数のよく知られた技法を用いることができる。１つの実施形態では、１つ又は複数のキャッシュユニット１８０６とコア１８０２Ａ〜１８０２Ｎとの間にコヒーレンシーが維持される。
【０１８９】
幾つかの実施形態では、コア１８０２Ａ〜１８０２Ｎのうちの１つ又は複数は、マルチスレッド化することができる。システムエージェント１８１０は、コア１８０２Ａ〜１８０２Ｎを連係及び動作させる構成要素を備える。システムエージェントユニット１８１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを備えることができる。ＰＣＵは、コア１８０２Ａ〜１８０２Ｎ及び統合グラフィックスロジック１８０８の電力状態を調整するのに必要なロジック及び構成要素とすることができるか又はそれらを備えることができる。ディスプレイユニットは、１つ又は複数の外部に接続されたディスプレイを駆動するためのものである。
【０１９０】
コア１８０２Ａ〜１８０２Ｎは、アーキテクチャ命令セットの観点で同種のものとすることもできるし、異種のものとすることもできる。すなわち、コア１８０２Ａ〜１８０２Ｎのうちの２つ以上は、同じ命令セットを実行可能とすることができる一方、他のものは、その命令セットのサブセットのみ又は異なる命令セットを実行可能とすることができる。
【０１９１】
例示的なコンピューターアーキテクチャ
図１９〜図２２は、例示的なコンピューターアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバー、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラー、携帯電話、ポータブルメディアプレイヤー、ハンドヘルドデバイス、及び他の様々な電子デバイスについて当該技術分野において知られている他のシステム設計及び構成も適している。概して、本明細書において開示されるようなプロセッサ及び／又は他の実行ロジックを組み込むことができる非常に多くの様々なシステム又は電子デバイスが一般に適している。
【０１９２】
次に図１９を参照すると、本発明の１つの実施形態によるシステム１９００のブロック図が示されている。システム１９００は、コントローラーハブ１９２０に結合された１つ又は複数のプロセッサ１９１０、１９１５を備えることができる。１つの実施形態では、コントローラーハブ１９２０は、グラフィックスメモリコントローラーハブ（ＧＭＣＨ）１９９０及び入力／出力ハブ（ＩＯＨ）１９５０（別々のチップ上に存在することができる）を含む。ＧＭＣＨ１９９０は、メモリと、メモリ１９４０及びコプロセッサ１９４５が結合されたグラフィックスコントローラーとを備える。ＩＯＨ１９５０は、入力／出力（Ｉ／Ｏ）デバイス１９６０をＧＭＣＨ１９９０に結合する。代替的に、メモリ及びグラフィックスコントローラーの一方又は双方は、（本明細書において説明するように）プロセッサ内に統合され、メモリ１９４０及びコプロセッサ１９４５は、プロセッサ１９１０と、ＩＯＨ１９５０を有する単一のチップ内のコントローラーハブ１９２０とに直接結合されている。
【０１９３】
追加のプロセッサ１９１５のオプションの特性が、図１９に破線で示されている。各プロセッサ１９１０、１９１５は、本明細書において説明する処理コアのうちの１つ又は複数を備えることができ、プロセッサ１８００の或るバージョンとすることができる。
【０１９４】
メモリ１９４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、又はこれらの２つの組合せとすることができる。少なくとも１つの実施形態について、コントローラーハブ１９２０は、フロントサイドバス（ＦＳＢ）等のマルチドロップバス、ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＱＰＩ）等のポイントツーポイントインターフェース、又は同様の接続１９９５を介してプロセッサ（複数の場合もある）１９１０、１９１５と通信する。
【０１９５】
１つの実施形態では、コプロセッサ１９４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等のような専用プロセッサである。１つの実施形態では、コントローラーハブ１９２０は、統合グラフィックスアクセラレーターを備えることができる。
【０１９６】
アーキテクチャの特性、マイクロアーキテクチャの特性、熱特性、電力消費特性等を含む多様なメリットメトリック（metrics of merit）の観点から、物理リソース１９１０、１９１５間には様々な相違が存在する可能性がある。
【０１９７】
１つの実施形態では、プロセッサ１９１０は、一般のタイプのデータ処理演算を制御する命令を実行する。命令内には、コプロセッサ命令を組み込むことができる。プロセッサ１９１０は、これらのコプロセッサ命令を、アタッチされたコプロセッサ１９４５によって実行されるべきタイプであるとして認識する。したがって、プロセッサ１９１０は、これらのコプロセッサ命令（又はコプロセッサ命令を表す制御信号）を、コプロセッサ１９４５に向けてコプロセッサバス又は他の相互接続上に発行する。コプロセッサ（複数の場合もある）１９４５は、受信したコプロセッサ命令を受理して実行する。
【０１９８】
次に図２０を参照すると、本発明の一実施形態による第１のより具体的な例示的システム２０００のブロック図が示されている。図２０に示すように、マルチプロセッサシステム２０００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続２０５０を介して結合された第１のプロセッサ２０７０及び第２のプロセッサ２０８０を備える。プロセッサ２０７０及び２０８０のそれぞれは、プロセッサ１８００の或るバージョンとすることができる。本発明の１つの実施形態では、プロセッサ２０７０及び２０８０は、それぞれプロセッサ１９１０及び１９１５である一方、コプロセッサ２０３８は、コプロセッサ１９４５である。別の実施形態では、プロセッサ２０７０及び２０８０は、それぞれプロセッサ１９１０及びコプロセッサ１９４５である。
【０１９９】
プロセッサ２０７０及び２０８０は、それぞれ統合メモリコントローラー（ＩＭＣ）ユニット２０７２及び２０８２を備えるものとして示されている。プロセッサ２０７０は、そのバスコントローラーユニットの一部としてポイントツーポイント（Ｐ−Ｐ）インターフェース２０７６及び２０７８も備える。同様に、第２のプロセッサ２０８０も、Ｐ−Ｐインターフェース２０８６及び２０８８を備える。プロセッサ２０７０、２０８０は、ポイントツーポイント（Ｐ−Ｐ）インターフェース回路２０７８、２０８８を用いてＰ−Ｐインターフェース２０５０を介して情報を交換することができる。図２０に示すように、ＩＭＣ２０７２及び２０８２は、プロセッサをそれぞれのメモリ、すなわちメモリ２０３２及びメモリ２０３４に結合している。これらのメモリは、それぞれのプロセッサにローカルにアタッチされたメインメモリの一部分とすることができる。
【０２００】
プロセッサ２０７０、２０８０はそれぞれ、ポイントツーポイントインターフェース回路２０７６、２０９４、２０８６、２０９８を用いて個々のＰ−Ｐインターフェース２０５２、２０５４を介してチップセット２０９０と情報を交換することができる。チップセット２０９０は、オプションとして、高性能インターフェース２０３９を介してコプロセッサ２０３８と情報を交換することができる。１つの実施形態では、コプロセッサ２０３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等のような専用プロセッサである。
【０２０１】
共有キャッシュ（図示せず）を、いずれかのプロセッサ内に備えることもできるし、双方のプロセッサの外部に備えて、さらに、Ｐ−Ｐ相互接続を介してプロセッサと接続することもでき、その結果、プロセッサが低電力モードになった場合に、いずれかのプロセッサ又は双方のプロセッサのローカルキャッシュ情報を共有キャッシュにストアすることができる。
【０２０２】
チップセット２０９０は、インターフェース２０９６を介して第１のバス２０１６に結合することができる。１つの実施形態では、第１のバス２０１６は、周辺機器相互接続（ＰＣＩ）バス、又はＰＣＩエクスプレスバス若しくは別の第３世代Ｉ／Ｏ相互接続バス等のバスとすることができるが、本発明の範囲は、そのように限定されるものではない。
【０２０３】
図２０に示すように、様々なＩ／Ｏデバイス２０１４を、第１のバス２０１６を第２のバス２０２０に結合するバスブリッジ２０１８とともに第１のバス２０１６に結合することができる。１つの実施形態では、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレーター（例えば、グラフィックスアクセラレーター又はデジタル信号処理（ＤＳＰ）ユニット等）、フィールドプログラマブルゲートアレイ、又は他の任意のプロセッサ等の１つ又は複数の追加のプロセッサ２０１５が第１のバス２０１６に結合されている。１つの実施形態では、第２のバス２０２０は、ローピンカウント（ＬＰＣ）バスとすることができる。様々なデバイスを第２のバス２０２０に結合することができる。これらの様々なデバイスには、例えば、キーボード及び／又はマウス２０２２、通信デバイス２０２７、並びに１つの実施形態では命令／コード及びデータ２０３０を含むことができるディスクドライブ若しくは他のマスストレージデバイス等の記憶ユニット２０２８が含まれる。さらに、オーディオＩ／Ｏ２０２４を第２のバス２０２０に結合することができる。他のアーキテクチャが可能であることに留意されたい。例えば、図２０のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスアーキテクチャ又は他のそのようなアーキテクチャを実装することができる。
【０２０４】
次に図２１を参照すると、本発明の一実施形態による第２のより具体的な例示的なシステム２１００のブロック図が示されている。図２０及び図２１における同様の要素は、同様の参照符号を有し、図２０の或る特定の態様（certain aspects）は、図２１の他の態様を分かりにくくしないように図２１から省略されている。
【０２０５】
図２１は、プロセッサ２０７０、２０８０が、それぞれ、統合されたメモリ及びＩ／Ｏの制御ロジック（「ＣＬ」）２０７２及び２０８２を備えることができることを示している。したがって、ＣＬ２０７２、２０８２は、統合メモリコントローラーユニットを備え、Ｉ／Ｏ制御ロジックを備える。図２１は、メモリ２０３２、２０３４がＣＬ２０７２、２０８２に結合されていることだけでなく、Ｉ／Ｏデバイス２１１４も制御ロジック２０７２、２０８２に結合されていることを示している。レガシーＩ／Ｏデバイス２１１５がチップセット２０９０に結合されている。
【０２０６】
次に図２２を参照すると、本発明の一実施形態によるＳｏＣ２２００のブロック図が示されている。図１８における同様の要素は、同様の参照符号を有する。また、破線のボックスは、より高度なＳｏＣ上のオプションの特徴である。図２２において、相互接続ユニット（複数の場合もある）２２０２は、一組の１つ又は複数のコア１８０２Ａ〜１８０２Ｎ及び共有キャッシュユニット（複数の場合もある）１８０６を備えるアプリケーションプロセッサ２２１０と、システムエージェントユニット１８１０と、バスコントローラーユニット（複数の場合もある）１８１６と、統合メモリコントローラーユニット（複数の場合もある）１８１４と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含むことができる一組の１つ又は複数のコプロセッサ２２２０と、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット２２３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット２２３２と、１つ又は複数の外部ディスプレイに結合するためのディスプレイユニット２２４０とに結合されている。１つの実施形態では、コプロセッサ（複数の場合もある）２２２０は、例えば、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組み込みプロセッサ等のような専用プロセッサを含む。
【０２０７】
本明細書において開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実施手法の組合せで実施することができる。本発明の実施形態は、少なくとも１つのプロセッサと、記憶システム（揮発性及び不揮発性メモリ及び／又は記憶素子を含む）と、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスとを備えるプログラマブルシステム上で実行されるコンピュータープログラム又はプログラムコードとして実施することができる。
【０２０８】
図２０に図示したコード２０３０等のプログラムコードは、入力された命令に適用されて、本明細書において説明した機能を実行し、出力情報を生成することができる。この出力情報は、既知の方法で１つ又は複数の出力デバイスに適用することができる。この適用のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラー、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
【０２０９】
プログラムコードは、処理システムと通信する高水準手続型プログラム言語又はオブジェクト指向型プログラム言語で実施することができる。プログラムコードは、所望の場合には、アセンブリ言語又は機械語で実施することもできる。実際に、本明細書において説明したメカニズムは、どの特定のプログラム言語にも範囲が限定されるものではない。いずれにしても、この言語は、コンパイル型言語又は解釈型言語とすることができる。
【０２１０】
少なくとも１つの実施形態の１つ又は複数の態様は、機械によって読み出されると、当該機械に、本明細書において説明した技法を実行するロジックを作製させるプロセッサ内の様々なロジックを表す機械可読媒体上にストアされた代表的な命令によって実施することができる。「ＩＰコア」として知られているそのような表現は、有形の機械可読媒体上にストアすることができ、様々な顧客又は製造設備に供給して、ロジック又はプロセッサを実際に作製する製造機械にロードすることができる。
【０２１１】
そのような機械可読記憶媒体は、機械又はデバイスによって製造又は形成された物品の非一時的な有形の構成を含むことができるが、これに限定されるものではない。これらの物品は、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、再書込み可能コンパクトディスク（ＣＤ−ＲＷ）、及び光磁気ディスクを含む他の任意のタイプのディスク、読み出し専用メモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気カード若しくは光カード、又は電子命令をストアするのに好適な他の任意のタイプの媒体等の半導体デバイス等の記憶媒体を含む。
【０２１２】
したがって、本発明の実施形態は、命令を含む非一時的な有形の機械可読媒体、又は本明細書において説明した構造、回路、装置、プロセッサ及び／又はシステムの特徴を定義するハードウェア記述言語（ＨＤＬ）等の設計データを含む非一時的な有形の機械可読媒体も含む。そのような実施形態は、プログラム製品と呼ばれる場合もある。
【０２１３】
エミュレーション（バイナリ変換、コードモーフィング等を含む）
場合によっては、命令変換器を用いて、命令をソース命令セットからターゲット命令セットに変換することができる。例えば、命令変換器は、命令を、コアによって処理される１つ又は複数の他の命令に変換（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる）、モーフィング、エミュレート、又は別の方法で変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はそれらの組合せで実施することができる。命令変換器は、オンプロセッサ、オフプロセッサ、又は一部分がオンプロセッサ及び一部分がオフプロセッサとすることができる。
【０２１４】
図２３は、本発明の実施形態による、ソフトウェア命令変換器を用いて、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換することを対比したブロック図である。図示した実施形態では、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はそれらの様々な組合せで実施することができる。図２３は、高水準言語２３０２によるプログラムを、ｘ８６コンパイラー２３０４を用いてコンパイルしてｘ８６バイナリコード２３０６を生成することができることを示している。このｘ８６バイナリコードは、少なくとも１つのｘ８６命令セットコア２３１６を有するプロセッサが本来的に実行することができるものである。少なくとも１つのｘ８６命令セットコア２３１６を有するプロセッサは、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ結果を達成するために、（１）Ｉｎｔｅｌ  ｘ８６命令セットコアの命令セットの実質的部分、又は（２）少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサ上で実行されることを目的としたアプリケーション又は他のソフトウェアのオブジェクトコードバージョン、を矛盾なく実行又は別の方法で処理することによって、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表している。
ｘ８６コンパイラー２３０４は、追加のリンク処理の有無を問わず、少なくとも１つのｘ８６命令セットコア２３１６を有するプロセッサ上で実行することができるｘ８６バイナリコード２３０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラーを表している。同様に、図２３は、高水準言語２３０２によるプログラムを、代替の命令セットコンパイラー２３０８を用いてコンパイルして代替の命令セットバイナリコード２３１０を生成することができることを示している。この代替の命令セットバイナリコードは、少なくとも１つのｘ８６命令セットコア２３１４を有しないプロセッサ（例えば、カリフォルニア州サニーベールのMIPS Technologies社のＭＩＰＳ命令セットを実行するコアを有するプロセッサ及び／又はカリフォルニア州サニーベールのARM Holdings社のＡＲＭ命令セットを実行するコアを有するプロセッサ）が本来的に実行することができるものである。命令変換器２３１２は、ｘ８６バイナリコード２３０６を、ｘ８６命令セットコア２３１４を有しないプロセッサが本来的に実行することができるコードに変換するのに用いられる。この変換されたコードは、代替の命令セットバイナリコード２３１０と同じである可能性は低い。なぜならば、これを行うことができる命令変換器は、作製が困難であるからである。しかしながら、変換されたコードは、一般的な演算を達成し、代替の命令セットからの命令で構成される。したがって、命令変換器２３１２は、エミュレーション、シミュレーション、又は他の任意のプロセスを通じて、ｘ８６命令セットプロセッサもコアも有しないプロセッサ又は他の電子デバイスがｘ８６バイナリコード２３０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はそれらの組合せを表している。
【０２１５】
図４〜図１１のうちの任意のものについて説明した構成要素、特徴、及び詳細は、オプションとして、図１〜図３のうちの任意のものにおいても用いことができる。その上、装置のうちの任意のものについて本明細書において説明した構成要素、特徴、及び詳細は、オプションとして、実施形態においてそのような装置によって及び／又はそのような装置を用いて実行することができる本明細書において説明した方法のうちの任意のものにおいても用いることができる。
【０２１６】
例示の実施形態
以下の例は、更なる実施形態に関する。それらの例における細部は、１つ又は複数の実施形態における任意の箇所に用いることができる。
【０２１７】
例１は、プロセッサである。このプロセッサは、複数のパックドデータレジスタを備える。このプリセッサは、パックドデータレジスタと結合されたユニットであって、８ビットメモリインデックス及び１６ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示す限定範囲ベクトルメモリアクセス命令に応答して動作可能であり、限定範囲ベクトルメモリアクセス命令に応答してメモリの限定範囲内のみのメモリロケーションにアクセスするように動作可能であるユニットも備える。
【０２１８】
例２は、請求項１の主題を含み、オプションとして、限定範囲ベクトルメモリアクセス命令は、８ビットメモリインデックスを含むソースパックドメモリインデックスを示す。
【０２１９】
例３は、請求項１の主題を含み、オプションとして、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、２５６バイトのみを含む限定範囲内のメモリロケーションにアクセスする。
【０２２０】
例４は、請求項１の主題を含み、オプションとして、限定範囲ベクトルメモリアクセス命令は、少なくとも３２個のメモリインデックスを含むソースパックドメモリインデックスを示す。
【０２２１】
例５は、請求項１の主題を含み、オプションとして、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、少なくとも３２ビットのメモリアドレスを有するメモリの限定範囲にアクセスする。
【０２２２】
例６は、請求項５の主題を含み、オプションとして、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、メモリインデックスのそれぞれを符号拡張し、符号拡張されたメモリインデックスのそれぞれにスケールファクターを適用する。
【０２２３】
例７は、請求項１の主題を含み、オプションとして、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、複数のパックドメモリインデックスのうちの一メモリインデックスによって示されるメモリアドレスにおける少なくとも１つのデータ要素と、複数のパックドメモリインデックスのうちの一メモリインデックスによって示されないメモリアドレスにおける少なくとも１つのデータ要素とをロードする多重データ要素ロードを実行する。
【０２２４】
例８は、請求項１の主題を含み、オプションとして、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、メモリからプロセッサの記憶ロケーションに限定範囲全体をロードする。
【０２２５】
例９は、請求項１の主題を含み、オプションとして、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、複数のデータ要素をロードする多重データ要素ロードを実行し、（ａ）命令がパックドデータ演算マスクを示していないとき、及び（ｂ）命令がパックドデータ演算マスクを示しているが、パックドデータ演算マスクの対応するマスク要素がマスクされていないときの一方であるとき、複数のロードされたデータ要素のうちの第２のものを命令によって示されたデスティネーション記憶ロケーションにストアすることなく、複数のロードされたデータ要素のうちの第１のものをデスティネーション記憶ロケーションにストアする。
【０２２６】
例１０は、請求項１の主題を含み、オプションとして、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、メモリからプロセッサの記憶ロケーションに限定範囲全体をロードし、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、メモリインデックスに基づいて命令によって示されるデスティネーション記憶ロケーションに限定範囲全体のデータ要素のサブセットを選択的に移動させる。
【０２２７】
例１１は、請求項１〜８のうちのいずれかの主題を含み、オプションとして、限定範囲ベクトルメモリアクセス命令は、デスティネーション記憶ロケーションを示し、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、パックドデータ結果をデスティネーション記憶ロケーションにストアし、パックドデータ結果は、それぞれ対応するメモリインデックスによって示される限定範囲内のメモリロケーションからの複数のデータ要素を有する。
【０２２８】
例１２は、請求項１〜８のうちのいずれかの主題を含み、オプションとして、限定範囲ベクトルメモリアクセス命令は、複数のデータ要素を有するソースパックドデータを示し、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、ソースパックドデータの各データ要素を、対応するメモリインデックスによって示される限定範囲内のメモリロケーションに書き込む。
【０２２９】
例１３は、請求項１〜８のうちのいずれかの主題を含み、オプションとして、限定範囲ベクトルメモリアクセス命令は、パックドデータ演算マスクを示す。
【０２３０】
例１４は、プロセッサにおける方法である。この方法は、限定範囲ベクトルメモリアクセス命令を受信することであって、限定範囲ベクトルメモリアクセス命令は、８ビットメモリインデックス及び１６ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示す、受信することを含む。この方法は、限定範囲ベクトルメモリアクセス命令に応答して、メモリの限定範囲のみのメモリロケーションにアクセスすることも含む。
【０２３１】
例１５は、請求項１４の主題を含み、オプションとして、受信することは、８ビットメモリインデックスを含むソースパックドメモリインデックスを示す命令を受信することを含む。
【０２３２】
例１６は、請求項１４の主題を含み、オプションとして、アクセスすることは、２５６バイトからなる限定範囲内のメモリロケーションにアクセスすることを含む。
【０２３３】
例１７は、請求項１４の主題を含み、オプションとして、受信することは、デスティネーション記憶ロケーションを示す命令を受信することを含み、この方法は、命令に応答して、パックドデータ結果をデスティネーション記憶ロケーションにストアすることを更に含み、パックドデータ結果は、それぞれ対応するメモリインデックスによって示される限定範囲内のメモリロケーションからの複数のデータ要素を有する。
【０２３４】
例１８は、請求項１４の主題を含み、オプションとして、受信することは、複数のデータ要素を有するソースパックドデータを示す命令を受信することを含み、アクセスすることは、命令に応答して、ソースパックドデータの各データ要素を、対応するメモリインデックスによって示される限定範囲内のメモリロケーションに書き込むことを含む。
【０２３５】
例１９は、請求項１４の主題を含み、オプションとして、アクセスすることは、少なくとも３２ビットメモリアドレスを用いてアクセスすることを含む。
【０２３６】
例２０は、請求項１４の主題を含み、オプションとして、アクセスすることは、複数のパックドメモリインデックスのうちの一メモリインデックスによって示されるメモリアドレスにおける少なくとも１つのデータ要素と、複数のパックドメモリインデックスのうちの一メモリインデックスによって示されないメモリアドレスにおける少なくとも１つのデータ要素とをロードすることを含む多重データ要素ロードを実行することを含む。
【０２３７】
例２１は、請求項１４の主題を含み、オプションとして、複数のデータ要素をロードする多重データ要素ロードを実行することと、（ａ）命令がパックドデータ演算マスクを用いないとき、及び（ｂ）命令がパックドデータ演算マスクを用いるが、パックドデータ演算マスクの対応するマスク要素がマスクされていないときの一方であるとき、複数のロードされたデータ要素のうちの第２のものを命令によって示されたデスティネーション記憶ロケーションにストアすることなく、複数のロードされたデータ要素のうちの第１のものをデスティネーション記憶ロケーションにストアすることと、を更に含む。
【０２３８】
例２２は、命令を処理するシステムである。このシステムは、相互接続部を備える。このシステムは、相互接続部と結合されたプロセッサも備える。このシステムは、相互接続部と結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）であって、このＤＲＡＭは、限定範囲ベクトルメモリアクセス命令をストアし、限定範囲ベクトルメモリアクセス命令は、８ビットメモリインデックス及び１６ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示し、限定範囲ベクトルメモリアクセス命令は、プロセッサによって実行されると、メモリの限定範囲のみのメモリロケーションにアクセスすることを含む演算をプロセッサに実行させるように動作可能である、ＤＲＡＭとも備える。
【０２３９】
例２３は、請求項２２の主題を含み、オプションとして、限定範囲ベクトルメモリアクセス命令は、８ビットメモリインデックスを含むソースパックドメモリインデックスを示し、命令は、プロセッサによって実行されると、プロセッサに、少なくとも３２ビットのメモリアドレスを有する限定範囲にアクセスさせるように動作可能である。
【０２４０】
例２４は、非一時的機械可読記憶媒体を含む製造物品であって、非一時的機械可読記憶媒体は、限定範囲ベクトルメモリアクセス命令をストアし、限定範囲ベクトルメモリアクセス命令は、８ビットメモリインデックス及び１６ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示し、限定範囲ベクトルメモリアクセス命令は、機械によって実行されると、メモリの限定範囲のみのメモリロケーションにアクセスすることを含む演算を機械に実行させるように動作可能である、非一時的機械可読記憶媒体を含む製造物品である。
【０２４１】
例２５は、例２４の主題を含み、オプションとして、限定範囲ベクトルメモリアクセス命令は、８ビットメモリインデックスを含むソースパックドメモリインデックスを示し、ソースパックドメモリインデックスは、少なくとも３２個のメモリインデックスを含む。
【０２４２】
例２６は、例１４〜２１のいずれかに記載の方法を実行する装置である。
【０２４３】
例２７は、例１４〜２１のいずれかに記載の方法を実行する手段を備える装置である。
【０２４４】
例２８は、機械によって実行されると、当該機械に例１４〜２１のうちのいずれかの方法を実行させる命令をストアする機械可読記憶媒体である。
【０２４５】
例２９は、実質的に本明細書において説明した命令を実行するプロセッサである。
【０２４６】
例３０は、実質的に本明細書において説明した方法を実行するプロセッサである。
【０２４７】
例３１は、実質的に本明細書において説明した方法を実行する手段を備えるプロセッサである。
【０２４８】
この説明及び特許請求の範囲において、「結合された」及び／又は「接続された」という用語が、それらの派生語とともに用いられている。これらの用語は互いに同義語として意図されていないことが理解されるべきである。逆に、特定の実施形態では、「接続された」は、２つ以上の要素が互いに直接物理的又は電気的に接触していることを示すのに用いることができる。「結合された」は、２つ以上の要素が直接物理的又は電気的に接触していることを意味することができる。しかしながら、「結合された」は、２つ以上の要素が互いに直接接触していないが、それでも、互いに協働又は相互作用することも意味することができる。例えば、実行ユニットは、１つ又は複数の介在する構成要素を通じて、レジスタ又はデコードロジックと結合することができる。図では、矢印が接続及び結合を示すのに用いられる。
【０２４９】
この説明及び特許請求の範囲において、「ロジック」という用語が用いられている場合がある。ロジックは、本明細書において用いられるとき、ハードウェア、ファームウェア、ソフトウェア、又は様々なそれらの組合せ等のモジュールを含むことができる。ロジックの例には、集積回路部、特定用途向け集積回路、アナログ回路、デジタル回路、プログラムされたロジックデバイス、命令を含むメモリデバイス等が含まれる。幾つかの実施形態では、ハードウェアロジックは、他の回路部構成要素とともにトランジスタ及び／又はゲートを潜在的に含むことができる。
【０２５０】
上記説明では、実施形態の十分な理解を提供するために、具体的な詳細が述べられてきた。しかしながら、他の実施形態は、これらの具体的な詳細のうちの幾つかがなくても実施することができる。本発明の範囲は、上記に提供された具体例によって決定されるものではなく、添付の特許請求の範囲によってのみ決定される。図に示し本明細書において説明した関係と等価な全ての関係が実施形態内に包含される。他の場合には、よく知られた回路、構造、デバイス、及び動作は、この説明の理解を分かりにくくしないように、ブロック図の形式において又は細部を伴わずに示されている。複数の構成要素が図示及び説明されている場合、場合によっては、これらの複数の構成要素は、１つの構成要素内に組み込むことができる。単一の構成要素が図示及び説明されている場合、場合によっては、この単一の構成要素を２つ以上の構成要素に分割することができる。
【０２５１】
様々な演算及び方法が説明されてきた。これらの方法のうちの幾つかは、比較的基本的な形式で流れ図に説明されているが、演算は、オプションとして、これらの方法に追加することができ、及び／又はこれらの方法から除去することができる。加えて、流れ図は、例示の実施形態による演算の特定の順序を示しているが、その特定の順序は例示である。代替の実施形態は、オプションとして演算を異なる順序で実行し、或る特定の演算を組み合わせ、或る特定の演算を重ねる等することができる。
【０２５２】
或る特定の演算は、ハードウェア構成要素によって実行することもできるし、命令を用いてプログラムされた機械、回路、又はハードウェア構成要素（例えば、プロセッサ、プロセッサの一部分、回路等）が演算を実行することを引き起こし及び／又はもたらすのに用いることができる機械実行可能な命令又は回路実行可能な命令で具現化することもできる。これらの演算は、オプションとして、ハードウェア及びソフトウェアの組合せによって実行することもできる。プロセッサ、機械、回路、又はハードウェアは、具体的な若しくは特定の回路部を含むことができ、又は他のロジック（例えば、ファームウェア及び／又はソフトウェアと潜在的に組み合わされるハードウェア）は、命令を実行及び／又は処理し、命令に応じた結果をストアするように動作可能である。
【０２５３】
幾つかの実施形態は、機械可読媒体を備える製造物品（例えば、コンピュータープログラム製品）を含む。この媒体は、機械によって可読な形式で情報を提供する、例えばストアするメカニズムを含むことができる。機械可読媒体は、機械によって実行された場合及び／又は実行されたとき、本明細書において開示された演算、方法、又は技法のうちの１つを当該機械に実行させ及び／又は機械がこれを実行することをもたらすように動作可能な命令又は命令シーケンスを提供することができる、すなわち、当該媒体にストアしておくことができる。機械可読媒体は、本明細書において開示される命令の実施形態のうちの１つ又は複数を提供する、例えば、ストアすることができる。
【０２５４】
幾つかの実施形態では、機械可読媒体は、有形の及び／又は非一時的な機械可読記憶媒体を含むことができる。例えば、有形の及び／又は非一時的な機械可読記憶媒体は、フロッピー（登録商標）ディスケット、光記憶媒体、光ディスク、光データ記憶デバイス、ＣＤ−ＲＯＭ、磁気ディスク、光磁気ディスク、読み出し専用メモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶デバイス、非一時的メモリ、非一時的データ記憶デバイス等を含むことができる。非一時的な機械可読記憶媒体は、一時的な伝播信号からなるものではない。別の実施形態では、機械可読媒体は、一時的機械可読通信媒体、例えば、搬送波、赤外線信号、デジタル信号等の電気的伝播信号、光学的伝播信号、音響的伝播信号、又は他の形式の伝播信号を含むことができる。
【０２５５】
好適な機械の例には、汎用プロセッサ、専用プロセッサ、命令処理装置、デジタル論理回路、集積回路等が含まれるが、これらに限定されるものではない。好適な機械の更に他の例には、そのようなプロセッサ、命令処理装置、デジタル論理回路、又は集積回路を組み込んだコンピューティングデバイス及び他の電子デバイスが含まれる。そのようなコンピューティングデバイス及び電子デバイスの例には、デスクトップコンピューター、ラップトップコンピューター、ノートブックコンピューター、タブレットコンピューター、ネットブック、スマートフォン、携帯電話、サーバー、ネットワークデバイス（例えば、ルーター及びスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、メディアプレイヤー、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラーが含まれるが、これらに限定されるものではない。
【０２５６】
この明細書全体を通じて、例えば、「１つの実施形態」、「一実施形態」、「１つ又は複数の実施形態」、「幾つかの実施形態」というとき、これは、特定の特徴が本発明の実施において含まれ得るが、必ずしも必須ではないことを示す。同様に、この説明において、様々な特徴は、開示を能率化するとともに様々な発明の態様の理解を助ける目的で、単一の実施形態、図、又はその説明においてともにグループ化されることがある。しかしながら、開示のこの方法は、本発明が各請求項において明確に列挙されたものよりも多くの特徴を必要とするという意図を反映するものと解釈されるべきではない。逆に、添付の特許請求の範囲が反映しているように、本発明の態様は、単一の開示された実施形態の全ての特徴よりも少ないものに存する。したがって、この詳細な説明に続く特許請求の範囲は、この詳細な説明に明確に組み込まれ、各請求項は、本発明の個々の実施形態として自立している。
【図１】
2014182807.tif 000006
【図２】
2014182807.tif 000007
【図３】
2014182807.tif 000008
【図４】
2014182807.tif 000009
【図５】
2014182807.tif 000010
【図６】
2014182807.tif 000011
【図７】
2014182807.tif 000012
【図８】
2014182807.tif 000013
【図９】
2014182807.tif 000014
【図１０】
2014182807.tif 000015
【図１１】
2014182807.tif 000016
【図１２Ａ】
2014182807.tif 000017
【図１２Ｂ】
2014182807.tif 000018
【図１２Ｃ】
2014182807.tif 000019
【図１３Ａ】
2014182807.tif 000020
【図１３Ｂ】
2014182807.tif 000021
【図１４Ａ】
2014182807.tif 000022
【図１４Ｂ】
2014182807.tif 000023
【図１４Ｃ】
2014182807.tif 000024
【図１４Ｄ】
2014182807.tif 000025
【図１５】
2014182807.tif 000026
【図１６Ａ】
2014182807.tif 000027
【図１６Ｂ】
2014182807.tif 000028
【図１７Ａ】
2014182807.tif 000029
【図１７Ｂ】
2014182807.tif 000030
【図１８】
2014182807.tif 000031
【図１９】
2014182807.tif 000032
【図２０】
2014182807.tif 000033
【図２１】
2014182807.tif 000034
【図２２】
2014182807.tif 000035
【図２３】
2014182807.tif 000036
【外国語明細書】
2014182807000001.pdf