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