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