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