(57)【要約】      （修正有）【課題】ＳＩＭＤ処理系において、ソースの各データ要素内の特定の位置から開始するビットをゼロ設定するコントロールベクトルを使用する命令実行のためのシステム、方法および装置を提供する。【解決手段】ＶＰＢＺＨＩの実行が第２のソースのデータ要素ごとに基づき、データ要素内の開始点よりも高い（より上位の）ビットのゼロ化を引き起こす。開始点は第１のソース内のデータ要素の内容により定義される。結果として得られたデータ要素はデスティネーションの対応するデータ要素ポジションに格納される。【選択図】図１
2014182800.tif 000002
【特許請求の範囲】
【請求項１】
指定されたビットポジションで開始するベクトルパックドゼロ上位ビット命令（ＶＰＢＺＨＩ命令）をデコードするデコードロジックであって、前記ＶＰＢＺＨＩ命令は第１および第２のソースオペランドおよびデスティネーションオペランドを含む、デコードロジックと、
実行ロジックであって、
前記第１のソースオペランドの各データ要素ポジションに関して、開始ビットポジションのデータ要素で始まる前記第２のソースオペランドの値をゼロ設定するための前記開始ビットポジションの決定と、
前記第２のソースオペランドの各対応するデータ要素ポジションに関して、前記第１のソースオペランドの対応するデータ要素ポジションの前記開始ビットポジションよりも上位であるかまたは等しいビットポジションにあるビットのゼロ化と、
任意のゼロ化後に対応するデータ要素ポジション内へ前記第２のソースオペランドの前記デスティネーションオペランドの値を格納することと、
を引き起こすデコードされた前記ＶＰＢＺＨＩ命令を実行する実行ロジックと、
を備える装置。
【請求項２】
前記第１および第２のソースオペランド、並びに前記デスティネーションオペランドはパックドデータレジスタである、請求項１に記載の装置。
【請求項３】
前記パックドデータレジスタのサイズは１２８ビット、２５６ビット、または５１２ビットである、請求項２に記載の装置。
【請求項４】
前記命令はライトマスクオペランドをさらに含む、請求項１から３のいずれか１項に記載の装置。
【請求項５】
前記デスティネーションレジスタ内のストレージは前記ライトマスクオペランドの値の対象である、請求項４に記載の装置。
【請求項６】
前記ライトマスクオペランド内のアクティブビット数は前記第１および第２のソースオペランド内のデータ要素の数に等しい、請求項４または５に記載の装置。
【請求項７】
前記第１のソースオペランドおよび前記デスティネーションオペランドはパックドデータレジスタであり、前記第２のソースオペランドはメモリロケーションである、請求項１から６のいずれか１項に記載の装置。
【請求項８】
コンピュータプロセッサ内で、指定されたビットポジションで開始するベクトルパックドゼロ上位ビット命令（ＶＰＢＺＨＩ命令）を実行する方法であって、
前記ＶＰＢＺＨＩ命令は第１および第２のソースオペランドおよびデスティネーションオペランドを含み、
前記第１のソースオペランドの各データ要素ポジションに関して、開始ビットポジションのデータ要素で始まる前記第２のソースオペランドの値をゼロ設定するための前記開始ビットポジションを決定する段階と、
前記第２のソースオペランドの各対応するデータ要素ポジションに関して、前記第１のソースオペランドの対応するデータ要素ポジションの前記開始ビットポジションよりも上位であるかまたは等しいビットポジション内にあるビットをゼロ化する段階と、
任意のゼロ化後に対応するデータ要素ポジション内へ前記第２のソースオペランドの前記デスティネーションオペランドの値を格納する段階と、
を備える方法。
【請求項９】
前記第１および第２ソースオペランド、並びに前記デスティネーションオペランドはパックドデータレジスタである、請求項８に記載の方法。
【請求項１０】
前記パックドデータレジスタのサイズは１２８ビット、２５６ビット、または５１２ビットである、請求項９に記載の方法。
【請求項１１】
前記命令はライトマスクオペランドをさらに含む、請求項８から１０のいずれか１項に記載の方法。
【請求項１２】
前記デスティネーションレジスタ内のストレージは前記ライトマスクオペランドの値の対象である、請求項１１に記載の方法。
【請求項１３】
前記ライトマスクオペランド内のアクティブビット数は前記第１および第２のソースオペランド内のデータ要素の数に等しい、請求項１１または１２に記載の方法。
【請求項１４】
前記第１のソースオペランドおよび前記デスティネーションオペランドはパックドデータレジスタであり、前記第２のソースオペランドはメモリロケーションである、請求項８から１３のいずれか１項に記載の方法。
【請求項１５】
指定されたビットポジションで開始するベクトルパックドゼロ上位ビット命令（ＶＰＢＺＨＩ命令）を実行するための方法をプロセッサに実行させるためのプログラムであって、
前記ＶＰＢＺＨＩ命令は第１および第２のソースオペランドおよびデスティネーションオペランドを含み、
前記方法は、
前記第１のソースオペランドの各データ要素ポジションに関して、開始ビットポジションのデータ要素で始まる前記第２のソースオペランドの値をゼロ設定するための前記開始ビットポジションを決定する段階と、
前記第２のソースオペランドの各対応するデータ要素ポジションに関して、前記第１のソースオペランドの対応するデータ要素ポジションの前記開始ビットポジションよりも上位であるかまたは等しいビットポジション内にあるビットをゼロ化する段階と、
任意のゼロ化後に対応するデータ要素ポジション内へ前記第２のソースオペランドの前記デスティネーションオペランドの値を格納する段階と、
を備える、プログラム。
【請求項１６】
前記第１および第２のソースオペランド、並びに前記デスティネーションオペランドはパックドデータレジスタである、請求項１５に記載のプログラム。
【請求項１７】
前記パックドデータレジスタのサイズは１２８ビット、２５６ビット、または５１２ビットである、請求項１６に記載のプログラム。
【請求項１８】
前記命令はライトマスクオペランドをさらに含む、請求項１７に記載のプログラム。
【請求項１９】
前記デスティネーションレジスタ内のストレージは前記ライトマスクオペランドの値の対象である、請求項１８に記載のプログラム。
【請求項２０】
前記第１のソースオペランドおよび前記デスティネーションオペランドはパックドデータレジスタであり、前記第２のソースオペランドはメモリロケーションである、請求項１５から１９のいずれか１項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は一般的にコンピュータプロセッサアーキテクチャに関し、より具体的には、実行時に特定の結果を引き起こす命令に関する。
【背景技術】
【０００２】
命令セット、または命令セットアーキテクチャ（ＩＳＡ）はプログラミングに関連するコンピュータアーキテクチャの一部であり、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割り込みおよび例外処理、および外部入力および出力（Ｉ／Ｏ）を含んでいてもよい。用語、命令は本明細書において、マイクロ命令またはマイクロオペレーションとは対照的に、プロセッサのデコーダがマクロ命令をデコードすることから結果として得られる、実行のためにプロセッサに提供される命令であるマクロ命令を一般的に指すことに留意すべきである。
【０００３】
本発明は同様の参照符号が同様の要素を示す添付の図面の図において例として示されており、且つこれらに限定されない。
【図面の簡単な説明】
【０００４】
【図１】本発明の一実施形態による１つのアクティブビットベクトルライトマスク要素の数、ベクトルサイズおよびデータ要素サイズとの間の相関関係を示す。
【０００５】
【図２】１つ以上の命令を実行するプロセッサ（プロセッサコア）の例示的な実施形態のブロック図である。
【０００６】
【図３Ａ】ＶＰＢＺＨＩの動作の例示的な説明図を示す。
【図３Ｂ】ＶＰＢＺＨＩの動作の例示的な説明図を示す。
【０００７】
【図４】プロセッサ内のＶＰＢＺＨＩ命令の実行の実施形態を示す。
【０００８】
【図５】ＶＰＢＺＨＩ命令を処理するための方法の実施形態を示す。
【０００９】
【図６】本発明の一実施形態によるレジスタアーキテクチャ６００のブロック図である。
【００１０】
【図７Ａ】本発明の実施形態による例示的なインオーダーパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダー発行／実行パイプラインの両方を示すブロック図である。
【００１１】
【図７Ｂ】本発明の実施形態によるプロセッサに含まれるインオーダーアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダー発行／実行アーキテクチャコアの両方を示すブロック図である。
【００１２】
【図８Ａ】コアがチップ内のいくつかの論理ブロック（同じタイプおよび／または異なるタイプの他のコアを含む）の１つであろうより具体的かつ例示的なインオーダーコアアーキテクチャのブロック図を示す。
【図８Ｂ】コアがチップ内のいくつかの論理ブロック（同じタイプおよび／または異なるタイプの他のコアを含む）の１つであろうより具体的例示的なインオーダーコアアーキテクチャのブロック図を示す。
【００１３】
【図９】本発明の実施形態による１つ以上のコアを有していてもよい、統合型メモリコントローラを有していてもよい、および統合型グラフィックスを有していてもよいプロセッサ９００のブロック図である。
【００１４】
【図１０】例示的なコンピュータアーキテクチャのブロック図である。
【図１１】例示的なコンピュータアーキテクチャのブロック図である。
【図１２】例示的なコンピュータアーキテクチャのブロック図である。
【図１３】例示的なコンピュータアーキテクチャのブロック図である。
【００１５】
【図１４】本発明の実施形態によるソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。
【発明を実施するための形態】
【００１６】
以下の説明において、多数の特定の詳細が記述されている。しかしながら、本発明の実施形態はこれらの特定の詳細なしに実施されてもよいことを理解されたい。他の例において、周知の回路、構造および技術はこの説明の理解を曖昧にしないために詳細には示されていない。
【００１７】
本明細書中の「一実施形態」、「実施形態」、「実施形態例」などへの参照は、記述された実施形態が特定の特徴、構造、または特性を含んでいてもよいが、すべての実施形態が必ずしも特定の特徴、構造、または特性を含まなくてもよいことを示している。さらに、そのような語句は必ずしも同じ実施形態を指すものではない。尚、特定の特徴、構造、または特性が実施形態に関連して説明されている際には、明記されているか否かに関わらず他の実施形態に関連するそのような特徴、構造、または特性に関わる当業者の知識の範囲内であるものと思われる。
【００１８】
概要
【００１９】
命令セットアーキテクチャはＩＳＡを実装するプロセッサの内部デザインであるマイクロアーキテクチャとは区別される。異なるマイクロアーキテクチャを有するプロセッサは共通の命令セットを共有することができる。例えば、Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、Ｉｎｔｅｌ  Ｃｏｒｅプロセッサ、およびカリフォルニア州サニーベールのアドバンスト・マイクロ・デバイセズ社のプロセッサはｘ８６命令セット（いくつかの拡張機能が新しいバージョンに追加された）のほとんど同一のバージョンを実装するが、異なる内部デザインを有している。例えば、ＩＳＡの同じレジスタアーキテクチャは、専用物理レジスタ、レジスタリネーミングメカニズム（例えば、レジスタエイリアス（別名）テーブル（ＲＡＴ）、米国特許第５，４４６，９１２号に記載されているリオーダーバッファ（ＲＯＢ）およびリタイアメントレジスタファイルの使用；米国特許５，２０７，１３２号に記載されている複数のマップおよびレジスタのプールの使用）を使用する１つ以上の動的に割り当てられた物理レジスタなどを含む、周知の技術を使用する異なるマイクロアーキテクチャで異なる方法で実装されてもよい。特に指定のない限り、語句レジスタアーキテクチャ、レジスタファイル、およびレジスタはソフトウェア／プログラマに見えるものおよび命令がレジスタを指定する方法を参照する。特異性が所望される所では、異なる形容詞的可視性が所与のマイクロアーキテクチャ（例えば、物理レジスタ、リオーダーバッファ、リタイアメントレジスタ、レジスタプール）においてレジスタを指定するために使用される一方、形容詞的論理的、アーキテクチャ的、またはソフトウェア可視性がレジスタアーキテクチャにおいてレジスタ／ファイルを示すために使用されるであろう。
【００２０】
命令セットは１つ以上の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、実行される操作およびその操作の対象であるオペランドを指定するための様々なフィールド（ビット数、ビットのロケーション）を規定する。所与の命令は所与の命令フォーマットを使用して表現され、操作とオペランドを指定する。命令ストリームはシーケンス内の各命令が命令フォーマット内の命令の発生である所の命令の特定のシーケンスである。
【００２１】
科学、金融、自動ベクトル化された汎用目的、ＲＭＳ（認識、マイニング、および合成）／ビジュアルおよびマルチメディアアプリケーション（例えば、２Ｄ／３Ｄグラフィックス、画像処理、ビデオ圧縮／解凍、音声認識アルゴリズムおよびオーディオ操作）は多くの場合、同じ操作が大量のデータアイテムに対して実行されることを必要とする（「データ並列化」と呼ぶ）。単一命令複数データ（ＳＩＭＤ）はプロセッサに複数のデータアイテムに対して同じ操作を実行させる命令のタイプを指す。ＳＩＭＤ技術はレジスタ内のビットをその各々が別々の値を表す固定サイズの複数のデータ要素に論理的に分割することができるプロセッサに特に適している。例えば、６４ビットレジスタのビットは別々の１６ビット値をそれぞれ表す４つの別々の１６ビットデータ要素として操作されるソースオペランドとして指定されてもよい。別の例として、２５６ビットレジスタのビットは４つの別々の６４ビットのパックドデータ要素（クワッド−ワード（Ｑ）サイズデータ要素）、８つの別々の３２ビットのパックドデータ要素（ダブルワード（Ｄ）サイズデータ要素）、１６の別々の１６ビットのパックドデータ要素（ワード（Ｗ）サイズデータ要素）、または３２の別々の８ビットのデータ要素（バイト（Ｂ）サイズデータ要素）として操作されるソースオペランドとして指定されてもよい。データのこのタイプはパックドデータタイプまたはベクトルデータタイプと呼ばれ、このデータタイプのオペランドはパックドデータオペランドまたはベクトルオペランドと呼ばれる。換言すれば、パックドデータアイテムまたはベクトルはパックドデータ要素のシーケンスを指し、パックドデータオペランドまたはベクトルオペランドはＳＩＭＤ命令のソースまたはデスティネーションオペランドである（パックドデータ命令またはベクトル命令としても知られる）。
【００２２】
一例として、ＳＩＭＤ命令の１つのタイプは同じサイズのデスティネーションベクトルオペランド（結果ベクトルオペランドとも呼ばれる）を、同一数のデータ要素でおよび同じデータ要素の順序で生成するために垂直様式で２つのソースベクトルオペランドに対して実行される単一のベクトル演算を指定する。デスティネーションベクトルオペランドのデータ要素がデスティネーションまたは結果データ要素と呼ばれる一方、ソースベクトルオペランドのデータ要素はソースデータ要素と呼ばれる。これらのソースベクトルオペランドは同じサイズであり同じ幅のデータ要素を含むので、これらは同一数のデータ要素を含む。２つのソースベクトルオペランド内の同じビットポジション内のソースデータ要素はデータ要素の対を形成する（対応するデータ要素とも呼ばれ、つまり各ソースオペランドのデータ要素ポジション０のデータ要素が対応し、各ソースオペランドのデータ要素ポジション１のデータ要素が対応するなど）。そのＳＩＭＤ命令により指定される操作は結果データ要素のマッチング数を生成するためにソースデータ要素のこれらの対のそれぞれに対して別々に実行されるため、ソースデータ要素の各対は対応する結果データ要素を有する。操作は垂直であるので、および結果ベクトルオペランドのサイズが同じであり、同一数のデータ要素を有しており、および結果データ要素がソースベクトルオペランドと同じデータ要素の順序に格納されているので、結果データ要素はソースベクトルオペランド内のソースデータ要素のそれらの対応する対として結果ベクトルオペランドの同じビットポジションにある。ＳＩＭＤ命令のこの例示的なタイプに加えて、様々な他のタイプのＳＩＭＤ命令がある（例えば、１つのみを有するまたは２つ以上のソースベクトルオペランドを有する；水平様式で動作する；異なるサイズ結果ベクトルオペランドを生成する、異なるサイズのデータ要素を有する、および／または異なるデータ要素の順序を有する）。用語デスティネーションベクトルオペランド（またはデスティネーションオペランド）は、別の命令により（別の命令による同じ場所の指定により）ソースオペランドとしてアクセスされてもよいように、その位置でのそのデスティネーションオペランドのストレージ（その命令により指定されたレジスタであるかまたはメモリアドレスで）を含む命令により指定された操作を実行する直接の結果として定義されることが理解されるべきである
【００２３】
ｘ８６、ＭＭＸ（商標）、ストリーミングＳＩＭＤ拡張命令（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１、およびＳＳＥ４．２命令を含む命令セットを有するＩｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサにより使用されるものなどのＳＩＭＤ技術はアプリケーションパフォーマンスの大幅な向上が有効となる（Ｃｏｒｅ（商標）およびＭＭＸ（商標）はカリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎの登録商標または商標である）。アドバンストベクトルエクステンション（ＡＶＸ）（ＡＶＸ１およびＡＶＸ２）と呼ばれＶＥＸ符号化方式を使用する、ＳＩＭＤ拡張命令の追加セットはリリースされておりおよび／または公開されている（例えば、２０１１年１０月、Ｉｎｔｅｌ（登録商標）６４およびＩＡ−３２アーキテクチャソフトウェア開発者マニュアルを参照、２０１１年６月、Ｉｎｔｅｌ（登録商標）アドバンストベクトルエクステンションプログラミングリファレンスを参照）。
【００２４】
以下の説明において、命令セットアーキテクチャ内のこの特定の命令の動作を記述する前に説明が必要となり得るいくつかの項目がある。１つのそのような項目は、条件付きで要素ごとの計算動作を制御するオペランドを断定するために一般的に使用される、「ライトマスクレジスタ」と呼ばれる（以下、用語マスクレジスタがまた使用されてもよく、以下で議論される「Ｋ」レジスタのようなライトマスクレジスタと呼ばれる）。以下で使用されるように、ライトマスクレジスタは、ライトマスクレジスタの各アクティブビットがＳＩＭＤ処理中のベクトルレジスタのパックドデータ要素の操作／更新を管理する複数ビット（１６、３２、６４など）を格納する。典型的には、プロセッサコアで使用可能な１つ以上のライトマスクレジスタがある。
【００２５】
命令セットアーキテクチャは、ベクトル演算を指定するおよびこれらのベクトルレジスタからソースレジスタおよび／またはデスティネーションレジスタを選択するためのフィールドを有する、少なくともいくつかのＳＩＭＤ命令を含む（例示的なＳＩＭＤ命令は１つまたは複数のベクトルレジスタのコンテンツ上で実行されるベクトル演算を指定してもよく、そのベクトル演算の結果はベクトルレジスタのいずれかに格納される）。本発明の異なる実施形態は異なるサイズのベクトルレジスタを有してもよく、より多い／より少ない／異なるサイズのデータ要素をサポートしてもよい。
【００２６】
ＳＩＭＤ命令（例えば、バイト、ワード、ダブルワード、クワッドワード）で指定されたマルチビットデータ要素のサイズはベクトルレジスタ内の「データ要素ポジション」のビットロケーションを決定し、ベクトルオペランドのサイズはデータ要素の数を決定する。パックドデータ要素は特定のポジションに格納されたデータを指す。換言すれば、デスティネーションオペランド内のデータ要素のサイズおよびデスティネーションオペランドのサイズに応じて（デスティネーションオペランド内のビットの合計数）（または言い換えると、デスティネーションオペランドのサイズおよびデスティネーションオペランド内のデータ要素の数に応じて）、マルチビットデータ要素ポジションのビットロケーションは結果ベクトルオペランド内で変化する（例えば、結果ベクトルオペランドのためのデスティネーションがベクトルレジスタである場合（この議論においてベクトルレジスタおよびパックドデータ要素レジスタは交換可能に使用される）、次にデスティネーションベクトルレジスタ内のマルチビットデータ要素ポジションのビットロケーションが変化する）。例えば、マルチビットデータ要素のビットロケーションは３２ビットのデータ要素上で動作するベクトル演算（データ要素ポジション０はビットロケーション３１：０を占有し、データ要素ポジション１はビットロケーション６３：３２を占有するなど）および６４ビットのデータ要素上で動作するベクトル演算（データ要素ポジション０はビットロケーション６３：０を占有し、データ要素ポジション１はビットロケーション１２７：６４を占有するなど）との間で異なる。
【００２７】
加えて、図１に示すように本発明の一実施形態による１つのアクティブビットベクトルライトマスク要素の数およびベクトルサイズおよびデータ要素サイズとの間に相関がある。１２８ビット、２５６ビット、５１２ビットのベクトルサイズが示されているが、他の幅も可能である。８ビットバイト（Ｂ）、１６ビットワード（Ｗ）、３２ビットダブルワード（Ｄ）または単精度浮動小数点、および６４ビットクワッドワード（Ｑ）または倍精度浮動小数点のデータ要素サイズが考慮されるが、他の幅もまた可能である。示されるように、ベクトルサイズが１２８ビットである際に、ベクトルデータ要素サイズが８ビットである際は１６ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが１６ビットである際は８ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが３２ビットである際は４ビットがマスキングのために使用されてもよく、およびベクトルデータ要素サイズが６４ビットの際は２ビットがマスキングのために使用されてもよい。ベクトルサイズが２５６ビットである際に、パックドデータ要素の幅が８ビットの際は３２ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが１６ビットである際は１６ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが３２ビットである際は８ビットがマスキングのために使用されてもよく、およびベクトルデータ要素サイズが６４ビットである際は４ビットがマスキングのために使用されてもよい。ベクトルサイズが５１２ビットである際に、ベクトルデータ要素サイズが８ビットである際は６４ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが１６ビットである際は３２ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが３２ビットである際は１６ビットがマスキングのために使用されてもよく、およびベクトルデータ要素サイズが６４ビットである際は８ビットがマスキングのために使用されてもよい。
【００２８】
ベクトルサイズおよびデータ要素サイズの組み合わせに応じて、全６４ビットまたは６４ビットのサブセットのみのいずれかがライトマスクとして使用されてもよい。一般的に、単一の要素ごとのマスキング制御ビットが使用される際には、マスキングに使用されるベクトルライトマスクレジスタ内のビット数（アクティブビット）はビットでのベクトルデータ要素サイズで除算したビットでのベクトルサイズに等しい。
【００２９】
上記のように、ライトマスクレジスタはベクトルレジスタ（またはメモリロケーション）内の要素に対応するマスクビットを含み、操作が実行されるべき要素を追跡する。この理由のため、ベクトルレジスタに関する限りこれらのマスクビットに対して類似した挙動を複製する共通の操作を有することおよび一般的にライトマスクレジスタ内でこれらのマスクビットを調節することを可能にすることが望ましい。
【００３０】
ソースの各データ要素内の特定の位置から開始するビットをゼロ設定するコントロールベクトルを使用する命令の実施形態が以下に説明される。この命令はベクトルレジスタのデータ要素内のビットを抽出し各データ要素にビットを挿入することを含む多くのビット操作タスクを効率よくベクトル化するために使用されてもよい。以下は命令セットの指定されたビットポジションで始まるベクトルパックドゼロ上位ビット（「ＶＰＢＺＨＩ」）命令と一般的に呼ばれる命令の実施形態およびそのような命令を実行するのに使用されてもよいシステム、アーキテクチャ、命令フォーマットなどの実施形態である。ＶＰＢＺＨＩの実行は第２のソースのデータ要素ごとに基づきデータ要素内の開始点よりも高位（より上位）のビットのゼロ化を引き起こす。開始点は第１のソースのデータ要素の内容により定義される。結果としてのデータ要素はデスティネーションの対応するデータ要素ポジションに格納される。
【００３１】
図２は１つまたは複数のＶＰＢＺＨＩ命令２０４を実行するプロセッサ（プロセッサコア）２００の例示的な実施形態のブロック図である。いくつかの実施形態において、プロセッサは汎用プロセッサ（例えば、デスクトップ、ラップトップ、サーバ、およびコンピュータのように使用されるタイプ）であってもよい。代替的に、プロセッサは専用プロセッサであってもよい。適切な専用プロセッサの例としては、限定はされないが、ほんのいくつか例を挙げると、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックスプロセッサ、コプロセッサ、組込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、およびコントローラなどを含む。プロセッサは任意の様々な複合命令セットコンピューティング（ＣＩＳＣ）プロセッサ、様々な縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、様々な超長命令語（ＶＬＩＷ）プロセッサ、様々なそれらのハイブリッド、または全く他のタイプのプロセッサであってもよい。
【００３２】
プロセッサ２００はアーキテクチャ的に可視なレジスタ（例えば、アーキテクチャ的レジスタファイル）２０５を含む。アーキテクチャ的レジスタはまた本明細書においては単にレジスタとも呼ばれてもよい。特に指定されるまたは明確ではない限り、語句アーキテクチャ的レジスタ、レジスタファイル、およびレジスタはソフトウェアおよび／またはプログラマから見えるレジスタ、および／またはオペランドを識別するためのマクロ命令またはアセンブリ言語命令により指定されるレジスタを指すために本明細書において使用される。これらのレジスタは所与のマイクロアーキテクチャ内の他の非アーキテクチャ的または非アーキテクチャ的な可視的なレジスタに対比される（例えば、命令により使用される一時レジスタ、リオーダーバッファ、リタイアメントレジスタなど）。レジスタはオンダイプロセッサのストレージロケーションを一般的に表す。図示のアーキテクチャ的レジスタはパックドデータレジスタ２０６を含む。パックドデータレジスタの各々はパックドまたはベクトルデータを格納するように動作可能であってもよい。図示のアーキテクチャ的レジスタはまたパックドデータ操作マスクレジスタ２０７をも含む。パックドデータ操作マスクレジスタの各々はパックドデータ操作マスクを格納するように動作可能であってもよい。これらのレジスタはこの説明ではライトマスクレジスタと呼ばれてもよい。パックドデータオペランドはパックドデータ操作マスクレジスタ２０７内に格納されてもよい。
【００３３】
プロセッサはまた実行ロジック２０８を含む。実行ロジックは１つまたは複数のＶＰＢＺＨＩ命令２０４を実行するまたは処理するように動作可能である。いくつかの実施形態において、実行ロジックはこれらの命令を実行するための特定のロジック（例えば、潜在的にファームウェアと組み合わされた特定の回路またはハードウェア）を含んでいてもよい。
【００３４】
図３Ａおよび図３ＢはＶＰＢＺＨＩの動作の例示的な説明図を示す。図示の例３Ａにおいて、第１のソースレジスタ３０１からのデータ要素はデータ要素ごとに基づき第２のソースレジスタ／メモリロケーション３０３内の対応するデータ要素内のビットのゼロ化のための開始点を提供する。この例において、第１および第２のソース３０１、３０３の両方はポジション０−３（右側の最下位）内に４つのデータ要素を有する。データ要素ポジション０において、第１のソース３０１は１６進数形式で０００００００２の値を有する。これは１０進表記法において２であり、第２のソース３０３のビットポジション２はゼロ化が開始してもよい点であることを示す。しかしながら、このビットポジションにおけるライトマスク３０５の値のため、ライトマスキングがこの説明図で使用され、第２のソース内のビットのゼロ化は発生せず、対応するデスティネーション３０９に保存される。この例において、デスティネーション３０９の内容は命令が実行される前と同じである。
【００３５】
データ要素ポジション１において、第１のソース３０１は１６進数形式で００００００１０の値を有する。これは１０進表記法において１６であり、第２のソース３０３のビットポジション１６はゼロ化が開始してもよい点であることを示す。再度、ライトマスキングがこの説明図において使用されているが、今回はライトマスク３０５のこのビットポジションの値はゼロ化および書き込みが発生することを示す。このように、第２のソース３０３のデータはビットポジション１６で開始するゼロ設定をされるであろうし、その新しい値はデスティネーション３０９のデータ要素ポジション１に格納されるであろう。
【００３６】
図示の例３Ｂにおいて、第１のソースレジスタ３１１からのデータ要素はデータ要素ごとに基づき第２のソースレジスタ／メモリロケーション３１３内の対応するデータ要素のビットのゼロ化のための開始点を提供する。この例において、第１および第２のソース３１１、３１３の両方はポジション０−３（右側の最下位）内に４つのデータ要素を有する。データ要素ポジション０において、第１のソース３１１は１６進数形式で０００００００２の値を有する。これは１０進数表記法において２であり、第２のソース３１３のビットポジション２はゼロ化が開始してもよい点であることを示す。しかしながら、このビットポジションにおけるライトマスク３１５の値のため、ライトマスキングがこの説明図で使用され、第２のソース内のビットのゼロ化は発生せず、対応するデスティネーション３１９に保存される。この例において、デスティネーション３１９の内容は完全にゼロ設定される。
【００３７】
データ要素ポジション１において、第１のソース３１１は１６進数形式で００００００１０の値を有する。これは１０進数表記法において１６であり、第２のソース３１３のビットポジション１６はゼロ化が開始してもよい点であることを示す。再度、ライトマスキングがこの説明図で使用されているが、今回はライトマスク３１５のこのビットポジションの値はゼロ化および書き込みが発生することを示す。このように、第２のソース３１３のデータはビットポジション１６で開始するゼロ設定をされるであろうし、その新しい値はデスティネーション３１９のデータ要素ポジション１に格納されるであろう。
【００３８】
ＶＰＢＺＨＩの例示的フォーマット
【００３９】
この命令の例示的フォーマットは「ＶＰＢＺＨＩ｛Ｋ１｝Ｒ１、Ｒ２／ＭＥＭ、Ｒ３」であり、ここでデスティネーションオペランドＫ１はオプションのライトマスクレジスタであり、Ｒ１はパックドデータソースレジスタ（１２８、２５６、５１２ビットレジスタなどのような）であり、Ｒ２はパックドデータデスティネーションレジスタ（１２８、２５６、５１２ビットレジスタなどのような）またはメモリロケーションであり、およびＲ３はデスティネーションレジスタ（１２８、２５６、５１２ビットレジスタなどのような）であり、およびＶＰＢＺＨＩは命令のオペコードである。オペコードはまたソースのデータ要素のサイズを指定してもよい。例えば、ＶＰＢＺＨＩＤはデータ要素が３２ビットであり、ＶＰＢＺＨＩＢが８ビットであることなどを示す。データ要素およびソースオペランドのサイズはまたライトマスクレジスタ内のアクティブビット数を決定する。
【００４０】
ＶＰＢＺＨＩの実行の例示的方法
【００４１】
図４はプロセッサ内のＶＰＢＺＨＩ命令の実行の実施形態を示す。第１および第２のソースオペランド、デスティネーションオペランド、オプションのライトマスクオペランド、オペコード付きのＶＰＢＺＨＩ命令が４０１でフェッチされる。
【００４２】
ＶＰＢＺＨＩ命令は４０３でデコーディングロジックによりデコードされる。命令のフォーマットに応じて、様々なデータはデータ変換があるのか、どのレジスタに書き込むのかおよび／またはどのレジスタから取得されるのか、どのメモリアドレスにアクセスするのかなどのようにこのステージで解釈されてもよい。
【００４３】
ソースオペランドの値が４０５で取得される／読み出される。例えば、ソースベクトルレジスタが読み出される。ソースオペランドがメモリオペランドである場合、次にそのオペランドに関連付けられたデータ要素が取得される。いくつかの実施形態おいて、メモリからのデータ要素は一時レジスタに格納される。
【００４４】
ＶＰＢＺＨＩ命令（またはマイクロオペレーションなどの命令を備えるオペレーション）はそのビットポジションのデータ要素で開始する第２のソースオペランドの値をゼロ設定するために、第１のソースオペランドの各データ要素ポジションに対して、開始ビットポジションを決定するために４０７で１つまたは複数の機能ユニットのような実行リソースにより実行される。命令の実行はまた、第２のソースオペランドの対応するデータ要素ポジションの各々のための、第１のソース中の対応するデータ要素ポジション内で見つけ出された開始ビットポジションより大きい（より上位の）または等しいビットポジションであるビットのゼロ化を引き起こす。この例は図３Ａおよび図３Ｂで見られる。いくつかの実施形態において、各データ要素ポジションが並列に評価される。他の実施形態において、データ要素ポジションが直列に評価される。
【００４５】
修正された第２のソースのデータ要素は４０９でデスティネーションの対応するデータ要素ポジションに書き込まれる。いくつかの実施形態において、ライトマスクが使用される際には、対応するデータ要素ポジションはそのビットポジションでライトマスクの値に応じて書き込まれなくてもよい。いくつかの実施形態において、ライトマスクがデータ要素ポジションは書き込まれるべきではないことを示す際には、デスティネーションのそのデータ要素ポジションはすべて０に設定される。他の実施形態において、ライトマスクがデータ要素ポジションは書き込まれるべきではないことを示す際には、デスティネーションのそのデータ要素ポジションは変更されない。４０７と４０９は別々に示されているが、いくつかの実施形態おいてそれらは命令の実行の一部として一緒に実行される。
【００４６】
いくつかの実施形態において、第２のソースのデータはデータ要素のいずれかの変更前にデスティネーションレジスタに格納される。例えば、ライトマスキングが使用されない場合、第２のソースからのデータ要素のすべてがデスティネーションに格納され次に変更される。ライトマスキングが使用される場合、選択されたデータ要素のみがライトマスクに従って移動される。
【００４７】
いくつかの実施形態において、一時的なストレージロケーションはゼロ化操作がその上で実行される際に第２のソースレジスタのデータが破壊されないように修正するために使用される。
【００４８】
図５はＶＰＢＺＨＩ命令を処理するための方法の実施形態を示す。この実施形態において、すべてではない、操作４０１−４０５のいくつかは以前に実行されているが、しかしながら、それらは以下に提示する詳細を不明瞭にしないために示されていないものと想定される。例えば、フェッチおよびデコードは示されておらず、またオペランド取得も示されていない。この例において、各データ要素ポジションは並列に処理されるが、しかしながら、データ要素ポジションはまた直列に評価されてもよい。
【００４９】
５０１で、第１のソースの各データ要素ポジションに対して、第２のソースの対応するデータ要素ポジション内のデータ要素の（潜在的な）ゼロ化のための開始ビットポジションの決定がなされる。例えば、図３Ａおよび図３Ｂにおいて、データ要素ポジション０でこの値が２であって、データ要素ポジション１において１６であった。このように、潜在的なゼロ化のための開始ビットポジションは第２のソースの対応するデータ要素ポジションのデータ要素に対して２および１６である。ゼロ化が発生してもよい間ではこの議論では潜在的に使用されるが、ライトマスクの使用に応じて、変更されたデータ要素がデスティネーションレジスタに格納されないであろうことが可能である。
【００５０】
第２のソースの各データ要素ポジションに対して、第２のソースの対応するデータ要素ポジション内のデータ要素の開始ビットポジションでのおよびより上位でのすべてのビットポジションは５０３でゼロ設定される。例えば、図３Ａおよび図３Ｂにおいて、データ要素ポジション０でこの値のゼロ化はビット２で開始し、そのデータ要素の最上位ビットまで継続する。
【００５１】
各データ要素ポジションに対して、データ要素ポジションがライトマスクされる場合の決定は５０５で行われる。例えば、図３Ａおよび図３Ｂにおいて、データ要素ポジション０でこの値は書き込みがないであろうことを示す。
【００５２】
ライトマスクによりブロックされている対象とならない第２のソースの値は５０７で対応する位置でデスティネーションに格納される。
【００５３】
いくつかの実施形態おいて、書き込まれなかったデスティネーションのすべてのデータ要素ポジションのデータ要素は５０９でゼロ設定される。
【００５４】
決定された開始ビットポジションで開始し上がっていくように説明されている上記の一方、他の変形例が考えられる。例えば、いくつかの実施形態において、動作は開始ビットポジションで開始し下がっていく。他の実施形態において、開始ビットポジションはゼロにされないが、次の行においてゼロにされる。
【００５５】
いくつかの実施形態において、第２のソースデータは５０３でデータ要素のいずれかの変更の前にデスティネーションレジスタに格納される。例えば、ライトマスキングが使用されない場合、第２のソースからのデータ要素のすべてがデスティネーションに格納され、次に修正される。ライトマスキングが使用される場合、選択されたデータ要素のみがライトマスクに従って移動される。
【００５６】
いくつかの実施形態において、一時的なストレージロケーションはゼロ化操作がその上で実行される際に第２のソースレジスタのデータが破壊されないように修正のために使用される。
【００５７】
例示的なレジスタアーキテクチャ
【００５８】
図６は本発明の一実施形態によるレジスタアーキテクチャ６００のブロック図である。図示の実施形態において、５１２ビット幅である３２個のベクトルレジスタ６１０があり、これらのレジスタはｚｍｍ０からｚｍｍ３１と呼ばれる。下位１６のｚｍｍレジスタの下位２５６ビットはレジスタｙｍｍ０−１６上にオーバーレイされる。下位１６のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）はレジスタｘｍｍ０−１５上にオーバーレイされる。
【００５９】
図示の実施形態における汎用レジスタ６２５には、メモリオペランドをアドレスするための既存のｘ８６アドレッシングモードと一緒に使用される１６個の６４ビット汎用レジスタがある。これらのレジスタはＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、およびＲ８からＲ１５の名前で呼ばれる。
【００６０】
図示の実施形態おけるＭＭＸパックドインテジャ（整数）フラットレジスタファイル６５０にエイリアス（別名参照）されるスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）６４５では、ＭＭＸおよびＸＭＭレジスタとの間で実行されるいくつかの操作のためのオペランドを保持するのと同様に、ＭＭＸレジスタが６４ビットのパックド整数データに対する操作を実行するために使用される一方、ｘ８７スタックはｘ８７命令セット拡張を使用して３２／６４／８０ビット浮動小数点データのスカラ浮動小数点演算を実行するために使用される８要素のスタックである。
【００６１】
本発明の代替の実施形態はより広いまたはより狭いレジスタを使用してもよい。加えて、本発明の代替の実施形態はより多い、より少ない、または異なるレジスタファイルおよびレジスタを使用してもよい。
【００６２】
例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ
【００６３】
プロセッサコアは異なる目的のために、および異なるプロセッサ内で異なる方法で実装されてもよい。例えば、次のようなコアの実装を含んでいてもよい：１）汎用コンピューティングを対象とした汎用インオーダーコア；２）汎用コンピューティングを対象とした高性能汎用アウトオブオーダーコア；３）主にグラフィックスおよび／または科学（スループット）コンピューティングを対象とした専用コア。異なるプロセッサの実装は次のものを含んでいてもよい：１）汎用コンピューティングを対象とした１つまたは複数の汎用インオーダーコアおよび／または汎用コンピューティングを対象とした１つまたは複数の汎用アウトオブオーダーコアを含むＣＰＵ；および２）主にグラフィックスおよび／または科学（スループット）を対象とした１つまたは複数の専用コアを含むコプロセッサ。このような異なるプロセッサは、１）ＣＰＵから分離されたチップ上のコプロセッサ；２）ＣＰＵと同じパッケージ内の分離されたダイ上のコプロセッサ；３）ＣＰＵと同じダイ上のコプロセッサ（このような場合、そのようなコプロセッサは統合型グラフィックスおよび／または科学（スループット）ロジックなどのような専用ロジック、または専用コアと時には呼ばれる）、および４）説明してきたＣＰＵ（アプリケーションコアまたはアプリケーションプロセッサと時には呼ばれる）、上述したコプロセッサ、および追加機能を同じダイ上に含んでもよいシステムオンチップ、を含んでいてもよい異なるコンピュータシステムアーキテクチャをもたらす。例示的なコアアーキテクチャを次に説明し、続いて例示的なプロセッサおよびコンピュータアーキテクチャの説明をする。
【００６４】
例示的なコアアーキテクチャ
【００６５】
インオーダーおよびアウトオブオーダーコアブロック図
【００６６】
図７Ａは本発明の実施形態による例示的なインオーダーパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダー発行／実行パイプラインの両方を示すブロック図である。図７Ｂは本発明の実施形態によるプロセッサに含まれるインオーダーアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダー発行／実行アーキテクチャコアの両方を示すブロック図である。図７Ａ−Ｂ中の破線ボックスのオプションの追加部はレジスタリネーミング、アウトオブオーダー発行／実行パイプラインおよびコアを示す一方、実線ボックスはインオーダーパイプラインおよびインオーダーコアを示す。インオーダーの態様がアウトオブオーダーの態様のサブセットであることを考え、アウトオブオーダーの態様が説明される。
【００６７】
図７Ａにおいて、プロセッサパイプライン７００はフェッチステージ７０２、長さデコーディングステージ７０４、デコードステージ７０６、アロケーションステージ７０８、リネーミングステージ７１０、スケジュール（またディスパッチまたは発行とも知られる）ステージ７１２、レジスタリード／メモリリードステージ７１４、実行ステージ７１６、ライトバック／メモリライトステージ７１８、例外処理ステージ７２２、およびコミットステージ７２４を含む。
【００６８】
図７Ｂは実行エンジンユニット７５０に結合されたフロントエンドユニット７３０を含むプロセッサコア７９０を示しており、両方がメモリユニット７７０に結合される。コア７９０は縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドまたは代替のコアタイプであってもよい。さらに別のオプションとして、コア７９０は、例えばネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックスプロセッシングユニット（ＧＰＧＰＵ）コア、グラフィックスコアなどのような専用コアであってもよい。
【００６９】
フロントエンドユニット７３０はデコードユニット７４０に結合された、命令フェッチユニット７３８に結合された、命令トランスレーションルックアサイドバッファ（ＴＬＢ）７３６に結合された、命令キャッシュユニット７３４に結合された分岐予測ユニット７３２を含む。デコードユニット７４０（またはデコーダ）は命令をデコードし、元の命令からデコードされる、またはそうでなければ反映する、または由来する１つまたは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成してもよい。デコードユニット７４０は様々な異なるメカニズムを使用して実装してもよい。適切なメカニズムの例としては、これらに限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコード読み取り専用メモリ（ＲＯＭ）、その他を含む。一実施形態において、コア７９０はマイクロコードＲＯＭまたは特定のマクロ命令のためのマイクロコードを格納した媒体（例えば、デコードユニット７４０内またはそうでなければフロントエンドユニット７３０内に）を含む。デコードユニット７４０は実行エンジンユニット７５０内でリネーム／アロケータユニット７５２に結合される。
【００７０】
実行エンジンユニット７５０はリタイアメントユニット７５４に結合されたリネーム／アロケータユニット７５２および１つまたは複数のスケジューラユニット７５６のセットを含む。スケジューラユニット７５６は、予約ステーション、中央命令ウィンドウ、その他などを含む異なるスケジューラの任意の数を表す。スケジューラユニット７５６は物理レジスタファイルユニット７５８に結合される。各物理レジスタファイルユニット７５８は１つまたは複数の物理レジスタファイル、例えばスカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、次に実行する命令のアドレスである命令ポインタ）、その他などの１つまたは複数の異なるデータタイプを格納する中の異なるものを表す。一実施形態において、物理レジスタファイルユニット７５８はベクトルレジスタユニットおよびスカラレジスタユニットを備える。これらのレジスタユニットはアーキテクチャ的ベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供してもよい。物理レジスタファイルユニット７５８はレジスタリネーミングおよびアウトオブオーダー実行が実装されてもよい様々な方法を説明するためにリタイアメントユニット７５４によりオーバーラップされている（例えば、リオーダーバッファおよびリタイアメントレジスタファイルを使用して、フューチャーファイル、履歴（ヒストリー）バッファ、およびリタイアメントレジスタファイルを使用して、レジスタマップおよびレジスタのプールを使用して、その他など）。リタイアメントユニット７５４および物理レジスタファイルユニット７５８は実行クラスタ７６０に結合される。実行クラスタ７６０は１つまたは複数の実行ユニット７６２のセットおよび１つまたは複数のメモリアクセスユニット７６４のセットを含む。実行ユニット７６２は、様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）で様々な操作（例えば、シフト、加算、減算、乗算）を実行してもよい。いくつかの実施形態は特定の機能または機能のセットに専用の多数の実行ユニットを含んでいてもよい一方、他の実施形態は１つの実行ユニットのみまたはすべての機能をすべて実行する複数の実行ユニットを含んでいてもよい。スケジューラユニット７５６、物理レジスタファイルユニット７５８、および実行クラスタ７６０は、特定の実施形態では特定のタイプのデータ／操作のために別々のパイプラインを作成するため、おそらく複数のものとして示されている（例えば、スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／または各々が独自のスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを有するメモリアクセスパイプライン−および別々のメモリアクセスパイプラインの場合には、特定の実施形態ではこのパイプラインの実行クラスタのみがメモリアクセスユニット７６４を有するように実装される。別々のパイプラインが使用される場合、１つまたは複数のこれらのパイプラインはアウトオブオーダー発行／実行でありおよび残りはインオーダーであってもよいことが理解されるべきである。
【００７１】
メモリアクセスユニット７６４のセットは、レベル２（Ｌ２）キャッシュユニット７７６に結合されたデータキャッシュユニット７７４に結合されたデータＴＬＢユニット７７２を含むメモリユニット７７０に結合される。例示的な一実施形態において、メモリアクセスユニット７６４は、その各々がメモリユニット７７０内のデータＴＬＢユニット７７２に結合されたロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでいてもよい。命令キャッシュユニット７３４はメモリユニット７７０内のレベル２（Ｌ２）キャッシュユニット７７６にさらに結合される。Ｌ２キャッシュユニット７７６は１つまたは複数の他のレベルのキャッシュおよび最終的にはメインメモリに結合される。
【００７２】
一例として、例示的なレジスタリネーミング、アウトオブオーダー発行／実行コアアーキテクチャは以下のようにパイプライン７００を実装してもよい：１）命令フェッチユニット７３８はフェッチおよび長さデコーディングステージ７０２および７０４を実行する；２）デコードユニット７４０はデコードステージ７０６を実行する；３）リネーム／アロケータユニット７５２はアロケーションステージ７０８およびリネーミングステージ７１０を実行する；４）スケジューラユニット７５６はスケジュールステージ７１２を実行する；５）物理レジスタファイルユニット７５８およびメモリユニット７７０はレジスタリード／メモリリードステージ７１４を実行する；実行クラスタ７６０は実行ステージ７１６を実行する；６）メモリユニット７７０および物理レジスタファイルユニット７５８はライトバック／メモリライトステージ７１８を実行する；７）様々なユニットは例外処理ステージ７２２に関与されてもよい；および８）リタイアメントユニット７５４および物理レジスタファイルユニット７５８はコミットステージ７２４を実行する。
【００７３】
コア７９０は本明細書に説明された命令を含む１つまたは複数の命令セット、（例えば、ｘ８６命令セット（新しいバージョンで追加されたいくつかの拡張命令を有する）；カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット；カリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セット（ＮＥＯＮなどのようなオプションの追加拡張命令を有する））、をサポートしてもよい。一実施形態において、コア７９０はパックドデータ命令セット拡張をサポートするためのロジック（例えば、前述のＡＶＸ１、ＡＶＸ２、および／またはジェネリックベクトルフレンドリ命令フォーマットのいくつかの形態（Ｕ＝０および／またはＵ＝１））を含み、それによってパックドデータを使用して実行される多くのマルチメディアアプリケーションにより使用される操作を可能にする。
【００７４】
コアがマルチスレッディング（２つまたはそれ以上の操作またはスレッドの並列のセットを実行すること）をサポートしていてもよく、およびタイムスライスドマルチスレッディング、同時マルチスレッディング（単一の物理コアが物理コアが同時にマルチスレッディングであるスレッドのそれぞれについて論理的なコアを提供する）、またはそれらの組み合わせ（例えば、タイムスライスドフェッチおよびデコードおよびその後はＩｎｔｅｌ（登録商標）ハイパースレッディングテクノロジーでのような同時マルチスレッディング）を含む様々な方法でそうしてもよいことを理解すべきである。
【００７５】
レジスタリネーミングはアウトオブオーダー実行のコンテキストで説明されている一方、レジスタリネーミングはインオーダーアーキテクチャで使用されてもよいことを理解すべきである。プロセッサの図示の実施形態はまた別々の命令およびデータキャッシュユニット７３４／７７４および共有Ｌ２キャッシュユニット７７６を含む一方、代替の実施形態は、例えばレベル１（Ｌ１）内部キャッシュ、または複数レベルの内部キャッシュなどのような命令およびデータの両方のための単一の内部キャッシュを有していてもよい。いくつかの実施形態において、システムは内部キャッシュおよびコアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでいてもよい。代替的に、キャッシュのすべてがコアおよび／またはプロセッサの外部にあってもよい。
【００７６】
具体的かつ例示的なインオーダーコアアーキテクチャ
【００７７】
図８Ａ−Ｂはコアがチップ内のいくつかの論理ブロック（同じタイプおよび／または異なるタイプの他のコアを含む）の１つであるより具体的かつ例示的なインオーダーコアアーキテクチャのブロック図を示す。論理ブロックは高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を介して用途に応じていくつかの固定機能ロジック、メモリＩ／Ｏインターフェース、および他の必要なＩ／Ｏロジックと通信する。
【００７８】
図８Ａは本発明の実施形態によるオンダイ相互接続ネットワーク８０２への接続およびレベル２（Ｌ２）キャッシュ８０４のローカルサブセットと一緒の単一のプロセッサコアのブロック図である。一実施形態において、命令デコーダ８００はパックドデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ８０６はスカラおよびベクトルユニット内のキャッシュメモリへのローレイテンシー（低遅延）アクセスを可能とする。一実施形態において（デザインを単純化するために）、スカラユニット８０８およびベクトルユニット８１０は別々のレジスタセット（それぞれ、スカラレジスタ８１２およびベクトルレジスタ８１４）を使用し、それらの間で転送されるデータがメモリに書き込まれ、その後レベル１（Ｌ１）キャッシュ８０６からリードバックされる一方、本発明の代替の実施形態は異なるアプローチ（例えば、単一のレジスタセットを使用するか、または２つのレジスタファイル間で転送されるデータが書き込みおよびリードバックされないことを可能にする通信パスを含む）を使用してもよい。
【００７９】
Ｌ２キャッシュ８０４のローカルサブセットはプロセッサコアあたり１つの別々のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアはＬ２キャッシュ８０４の独自のローカルサブセットへの直接アクセスパスを有する。プロセッサコアにより読み取られたデータはＬ２キャッシュのサブセット８０４に格納され、他のプロセッサコアが自分自身のローカルＬ２キャッシュのサブセットへアクセスすることと並行して迅速にアクセスすることができる。プロセッサコアにより書き込まれたデータは独自のＬ２キャッシュサブセット８０４に格納され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは共有データの一貫性を保証する。リングネットワークは、プロセッサコア、Ｌ２キャッシュおよび他の論理ブロックのようなエージェントをチップ内で相互に通信することを可能にするために双方向性である。各リングデータパスは方向ごとに１０１２ビット幅である。
【００８０】
図８Ｂは本発明の実施形態による図８Ａ内のプロセッサコアの部分の拡大図である。図８ＢはＬ２キャッシュ８０４のＬ１データキャッシュ８０６Ａ部分、並びにベクトルユニット８１０およびベクトルレジスタ８１４に関する詳細を含む。具体的には、ベクトルユニット８１０は、１つまたは複数の整数、単精度浮動小数点、倍精度浮動小数点命令を実行する、１６幅のベクトル処理ユニット（ＶＰＵ）（１６幅のＡＬＵ  ８２８を参照）である。ＶＰＵはスウィズルユニット８２０でのレジスタの入力のスウィズリング（ベクトル要素の入れ替え）、数値変換ユニット８２２Ａ−Ｂでの数値変換、およびメモリ入力上のレプリケーションユニット８２４でのレプリケーションをサポートする。
【００８１】
統合型メモリコントローラおよびグラフィックス付きプロセッサ
【００８２】
図９は本発明の実施形態による１つ以上のコアを有していてもよい、統合型メモリコントローラを有していてもよい、および統合型グラフィックスを有していてもよいプロセッサ９００のブロック図である。図９の破線ボックスのオプション追加部が複数のコア９０２Ａ−Ｎ、システムエージェントユニット９１０内の１つまたは複数の統合型メモリコントローラユニット９１４、および専用ロジック９０８のセットを有する代替プロセッサ９００を示す一方、実線ボックスはシングルコア９０２Ａ、システムエージェントユニット９１０、１つまたは複数のバスコントローラユニット９１６のセットを有するプロセッサ９００を示す。
【００８３】
このように、プロセッサ９００の異なる実装は：１）グラフィックスおよび／または科学（スループット）ロジック（１つまたは複数のコアを含んでいてもよい）を統合されている専用ロジック９０８を有するＣＰＵ、および１つまたは複数の汎用コア（例えば、汎用インオーダーコア、汎用アウトオブオーダーコア、その２つの組み合わせ）であるコア９０２Ａ−Ｎ；２）主にグラフィックスおよび／または科学（スループット）を対象とした多数の専用コアであるコア９０２Ａ−Ｎを有するコプロセッサ；および３）多数の汎用インオーダーコアであるコア９０２Ａ−Ｎを有するコプロセッサを含んでいてもよい。このように、プロセッサ９００は汎用プロセッサ、コプロセッサまたは例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックスプロセッシングユニット）、高スループットの多くの統合型コア（ＭＩＣ）コプロセッサ（３０以上のコアを含む）、組込みプロセッサなどのような専用プロセッサであってもよい。プロセッサは１つまたは複数のチップ上に実装されてもよい。プロセッサ９００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどのようないくつものプロセス技術のうちのいずれかを使用した１つまたは複数の基板の一部および／またはその上に実装されてもよい。
【００８４】
メモリ階層は、コア、セットまたは１つまたは複数の共有キャッシュユニット９０６、および統合型メモリコントローラユニット９１４のセットに結合された外部メモリ（図示せず）内のキャッシュの１つまたは複数のレベルを含む。共有キャッシュユニット９０６のセットはレベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、またはキャッシュの他のレベル、最終レベルキャッシュ（ＬＬＣ）、および／またはこれらの組み合わせなどのような１つまたは複数の中間レベルのキャッシュを含んでいてもよい。一実施形態おいてリングベースの相互接続ユニット９１２は統合型グラフィックスロジック９０８、共有キャッシュユニット９０６のセット、およびシステムエージェントユニット９１０／統合型メモリコントローラユニット９１４を相互接続する一方、代替実施形態ではこのようなユニットを相互接続するための任意の数の公知の技術を使用してもよい。一実施形態において、一貫性は１つまたは複数の共有キャッシュユニット９０６およびコア９０２Ａ−Ｎとの間で維持される。
【００８５】
いくつかの実施形態おいては、コア９０２Ａ−Ｎのうちの１つまたは複数はマルチスレッディングが可能である。システムエージェントユニット９１０はコア９０２Ａ−Ｎの調整および操作をするこれらのコンポーネントを含む。システムエージェントユニット９１０は、例えばパワーコントロールユニット（ＰＣＵ）およびディスプレイユニットを含んでいてもよい。ＰＣＵはコア９０２Ａ−Ｎおよび統合型グラフィックスロジック９０８の電源状態を調整するために必要なロジックおよびコンポーネントを含んでいてもよい。ディスプレイユニットは１つまたは複数の外部接続されたディスプレイの駆動用である。
【００８６】
コア９０２Ａ−Ｎはアーキテクチャ命令セットの面で均質または不均一であってもよく；すなわち、他のものはその命令セットまたは異なる命令セットのサブセットのみを実行可能であってもよい一方、２つまたはそれ以上のコア９０２Ａ−Ｎは同じ命令セットを実行可能であってもよい。
【００８７】
例示的なコンピュータアーキテクチャ
【００８８】
図１０−１３は例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワーク機器、ネットワークハブ、スイッチ、組込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための技術分野において知られている他のシステム設計および構成もまた適している。一般的に、本明細書に開示される膨大な種類の、プロセッサおよび／または他の実行ロジックを組み込むことが可能なシステムまたは電子デバイスは一般的に適している。
【００８９】
次に図１０を参照すると、本発明の一実施形態によるシステム１０００のブロック図が図示される。システム１０００はコントローラハブ１０２０に結合された１つまたは複数のプロセッサ１０１０、１０１５を含んでいてもよい。一実施形態においてコントローラハブ１０２０はグラフィックスメモリコントローラハブ（ＧＭＣＨ）１０９０および入力／出力ハブ（ＩＯＨ）１０５０（別々のチップ上にあってもよい）を含み；ＧＭＣＨ  １０９０はメモリ１０４０およびコプロセッサ１０４５に結合されたメモリおよびグラフィックスコントローラを含み；ＩＯＨ  １０５０は入力／出力（Ｉ／Ｏ）デバイス１０６０をＧＭＣＨ  １０９０に結合する。代替的に、メモリおよびグラフィックスコントローラの１つまたは両方がプロセッサ内に統合され（本明細書に記載されるように）、およびメモリ１０４０およびコプロセッサ１０４５がプロセッサ１０１０、およびＩＯＨ  １０５０を有する単一チップ内のコントローラハブ１０２０に直接結合される。
【００９０】
追加プロセッサ１０１５のオプションの特質は図１０内の破線で示される。それぞれのプロセッサ１０１０、１０１５は本明細書に記載の１つまたは複数のプロセッシングコアを含んでいてもよく、プロセッサ９００のいくつかのバージョンであってもよい。
【００９１】
メモリ１０４０は、例えばダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、またはこの２つの組み合わせであってもよい。少なくとも一つの実施形態の場合、コントローラハブ１０２０は、フロントサイドバス（ＦＳＢ）、クイックパスインターコネクト（ＱＰＩ）のようなポイントツーポイントインターフェース、または同様の接続１０９５などのようなマルチドロップバスを介して、プロセッサ１０１０、１０１５と通信する。
【００９２】
一実施形態おいて、コプロセッサ１０４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組込みプロセッサなどのような専用プロセッサである。一実施形態において、コントローラハブ１０２０は統合型グラフィックスアクセラレータを含んでいてもよい。
【００９３】
物理リソース１０１０、１０１５との間にはアーキテクチャ的、マイクロアーキテクチャ的、熱、消費電力特性などを含むメリットのメトリクスのスペクトル（評価、尺度、測定法などの範囲）の観点から様々な違いがあり得る。
【００９４】
一実施形態において、プロセッサ１０１０は一般的なタイプのデータ処理操作を制御する命令を実行する。命令内に埋め込まれたコプロセッサ命令であってもよい。プロセッサ１０１０はこれらのコプロセッサ命令を接続コプロセッサ１０４５により実行されるべきであるタイプのものであるとして認識する。したがって、プロセッサ１０１０はコプロセッサ１０４５に対してコプロセッサバスまたは他のインターコネクト上にこれらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）を発行する。コプロセッサ１０４５はこれを受け取り、受け取ったコプロセッサ命令を実行する。
【００９５】
次に図１１を参照すると、本発明の実施形態による第１のより具体的かつ例示的なシステム１１００のブロック図が図示される。図１１に示すように、マルチプロセッサシステム１１００はポイントツーポイント相互接続システムであり、ポイントツーポイントインターフェース１１５０を介して結合された第１のプロセッサ１１７０および第２のプロセッサ１１８０を含む。プロセッサ１１７０および１１８０のそれぞれはプロセッサ９００のいくつかのバージョンであってもよい。本発明の一実施形態において、コプロセッサ１１３８はコプロセッサ１０４５である一方、プロセッサ１１７０および１１８０はそれぞれプロセッサ１０１０および１０１５である。別の実施形態において、プロセッサ１１７０および１１８０はそれぞれプロセッサ１０１０およびコプロセッサ１０４５である。
【００９６】
プロセッサ１１７０および１１８０は統合型メモリコントローラ（ＩＭＣ）ユニット１１７２および１１８２それぞれを含んで表示される。プロセッサ１１７０はまたそのバスコントローラユニットの一部としてポイントツーポイント（Ｐ−Ｐ）インターフェース回路１１７６および１１７８を含み；同様に、第２のプロセッサ１１８０は、Ｐ−Ｐインターフェース回路１１８６および１１８８を含む。プロセッサ１１７０、１１８０はＰ−Ｐインターフェース回路１１７８、１１８８を使用してポイントツーポイント（Ｐ−Ｐ）インターフェース１１５０を介して情報を交換してもよい。図１１に示すように、ＩＭＣ１１７２および１１８２はプロセッサを、それぞれのプロセッサにローカルに接続されたメインメモリの一部であってもよいそれぞれのメモリ、つまりメモリ１１３２およびメモリ１１３４に結合する。
【００９７】
プロセッサ１１７０、１１８０の各々はポイントツーポイントインターフェース回路１１７６、１１９４、１１８６、１１９８を使用して個々のＰ−Ｐインターフェース１１５２、１１５４を介してチップセット１１９０と情報交換をしてもよい。チップセット１１９０は高性能インターフェース１１３９を介してコプロセッサ１１３８とオプションで情報交換をしてもよい。一実施形態において、コプロセッサ１１３８は、例えば高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組込みプロセッサなどのような専用プロセッサである。
【００９８】
共有キャッシュ（図示せず）はどちらかのプロセッサ内に含まれるかあるいは両方のプロセッサ外であってもよく、プロセッサが低電力モードに置かれる場合どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納されてもよいように、Ｐ−Ｐ相互接続を介してまだプロセッサに接続される。
【００９９】
チップセット１１９０はインターフェース１１９６を介して第１のバス１１１６に結合されてもよい。一実施形態において、第１のバス１１１６は周辺機器相互接続（ＰＣＩ）バス、またはＰＣＩ  Ｅｘｐｒｅｓｓバスまたは他の第三世代Ｉ／Ｏ相互接続バスなどのバスであってもよいが、本発明の範囲はこれに限定されない。
【０１００】
図１１に示すように、様々なＩ／Ｏデバイス１１１４は、第１のバス１１１６を第２のバス１１２０に結合するバスブリッジ１１１８と共に、第１のバス１１１６に結合されてもよい。一実施形態において、コプロセッサ、高スループットのＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックスアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニットなどのような）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどのような１つまたは複数の追加のプロセッサ１１１５は第１のバス１１１６に結合される。一実施形態において、第２のバス１１２０はローピンカウント（ＬＰＣ）バスであってもよい。一実施形態において、様々なデバイスは、例えばキーボードおよび／またはマウス１１２２、通信デバイス１１２７および命令／コードおよびデータ１１３０を含んでいてもよいディスクドライブまたは他の大容量記憶デバイスなどのようなストレージユニット１１２８を含む第２のバス１１２０に結合されてもよい。さらに、オーディオＩ／Ｏ１１２４は第２のバス１１２０に結合されてもよい。他のアーキテクチャも可能であることに留意されたい。例えば、図１１のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
【０１０１】
次に図１２を参照すると、本発明の実施形態による第２のより具体的かつ例示的なシステム１２００のブロック図が図示される。図１１および１２内の同様の要素は同様の参照符号の関係を有し、図１１の特定の態様は図１２の他の態様を不明瞭にするのを避けるために図１２から省略されている。
【０１０２】
図１２はプロセッサ１１７０、１１８０が統合型メモリおよびＩ／Ｏ制御ロジック（「ＣＬ」）１１７２および１１８２をそれぞれ含んでいてもよいことを示す。このように、ＣＬ  １１７２、１１８２は統合型メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図１２はメモリ１１３２、１１３４がＣＬ  １１７２、１１８２に結合されていることだけでなく、Ｉ／Ｏデバイス１２１４もまた制御ロジック１１７２、１１８２に結合されていることも示す。レガシーＩ／Ｏのデバイス１２１５はチップセット１１９０に結合される。
【０１０３】
次に図１３を参照すると、本発明の一実施形態によるＳｏＣ  １３００のブロック図が図示される。図９内の同様の要素が同様の参照番号を付してある。また、破線のボックスはより高度なＳｏＣ上のオプション機能である。図１３において、相互接続ユニット１３０２は：１つまたは複数のコア２０２Ａ−Ｎおよび共有キャッシュユニット９０６のセットを含むアプリケーションプロセッサ１３１０；システムエージェントユニット９１０；バスコントローラユニット９１６；統合型メモリコントローラユニット９１４；統合型グラフィックスロジック、画像処理プロセッサ、オーディオプロセッサ、ビデオプロセッサを含んでいてもよいセットまたは１つまたは複数のコプロセッサ１３２０；スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１３３０；ダイレクトメモリアクセス（ＤＭＡ）ユニット１３３２；および１つまたは複数の外部ディスプレイを結合するためのディスプレイユニット１３４０に結合される。一実施形態において、コプロセッサ１３２０は、例えばネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組込みプロセッサなどのような専用プロセッサを含む。
【０１０４】
本明細書に開示されたメカニズムの実施形態はハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせで実装されてもよい。本発明の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性メモリおよび／または記憶素子を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備えるプログラム可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてもよい。
【０１０５】
図１１に示されるコード１１３０などのようなプログラムコードは本明細書に説明された機能を実行し、出力情報を生成するために入力命令に適用されてもよい。出力情報は公知の方法で１つまたは複数の出力デバイスに適用されてもよい。本出願の目的のために、処理システムは、例えばデジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサなどのようなプロセッサを有する任意のシステムを含む。
【０１０６】
プログラムコードは処理システムと通信するために高レベル手続き型またはオブジェクト指向プログラミング言語で実装されてもよい。所望であれば、プログラムコードはまたアセンブリまたは機械言語で実装されてもよい。実際に、本明細書に説明されたメカニズムは特定のプログラミング言語の範囲に限定されない。いずれの場合においても、言語はコンパイルまたはインタープリタ型言語であってもよい。
【０１０７】
少なくとも１つの実施形態の１つまたは複数の態様は、機械により読み出された際に機械に本明細書に説明された技術を実行するためのロジックを組み立てることを引き起こす、プロセッサ内の様々なロジックを表す機械可読媒体上に格納された代表的な命令により実装されてもよい。「ＩＰコア」として知られているそのような表現は有形の機械可読媒体上に格納され、実際にロジックまたはプロセッサを作る製造機械にロードするために様々な顧客または製造施設に供給されてもよい。
【０１０８】
このような機械可読記憶媒体は、これらに限定されないが、ハードディスクなど、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、および光磁気ディスクを含む任意の他のタイプ、読み取り専用メモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブル読み取り専用メモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気または光カード、または電子命令を格納するのに適した媒体の任意の他のタイプなどの半導体デバイスなどの記憶媒体を含む、機械またはデバイスにより製造または形成された物品の非一時的な、有形の構成を含んでいてもよい。
【０１０９】
したがって、本発明の実施形態はまた、本明細書に説明された命令を含む、または構造、回路、装置、プロセッサ、および／またはシステムの特徴を規定するハードウェア記述言語（ＨＤＬ）などのような設計データを含む非一時的な、有形の機械可読媒体をも含む。このような実施形態はまたプログラムプロダクトと呼ばれることもある。
【０１１０】
エミュレーション（バイナリトランスレーション、コードモーフィングなどを含む）
【０１１１】
いくつかの場合において、命令コンバータは命令をソース命令セットからターゲット命令セットに変換するために使用されてもよい。例えば、命令コンバータは命令をコアにより処理される１つまたは複数の他の命令にトランスレート（例えば、静的なバイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを使用して）、モーフ（モーフィング）、エミュレート、またはそうでなければ変換してもよい。命令コンバータはソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実現されてもよい。命令コンバータはプロセッサ上、プロセッサ外、または一部がプロセッサ上および一部がプロセッサ外であってもよい。
【０１１２】
図１４は本発明の実施形態によるソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比させたブロック図である。図示の実施形態において、代替的に命令コンバータはソフトウェア、ファームウェア、ハードウェア、またはそれらの様々な組み合わせで実装されてもよいが、命令コンバータはソフトウェア命令コンバータである。図１４は少なくとも１つのｘ８６命令セットのコア１４１６を有するプロセッサによりネイティブに実行されてもよいｘ８６バイナリコード１４０６を生成させるためのｘ８６コンパイラ１４０４を使用してコンパイルされてもよい高級言語１４０２でのプログラムを示す。少なくとも１つのｘ８６命令セットコア１４１６を有するプロセッサは互換性のある実行またはそうでなければ、（１）Ｉｎｔｅｌ  ｘ８６命令セットコアの命令セットの実質的な一部、または（２）少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ結果を達成するために、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサ上で実行することを目標とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを処理することにより、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表す。ｘ８６コンパイラ１４０４は、追加の連携処理を有してまたは有せずに、少なくとも１つのｘ８６命令セットコア１４１６を有するプロセッサ上で実行されることができる、ｘ８６バイナリコード１４０６（例えば、オブジェクトコード）を生成するように動作可能であるコンパイラを表す。同様に、図１４は、少なくとも１つのｘ８６命令セットコア１４１４を有しないプロセッサ（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セットを実行する、および／またはカリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セットを実行するコアを有するプロセッサ）によりネイティブに実行されてもよい代替の命令セットバイナリコード１４１０を生成する代替の命令セットコンパイラ１４０８を使用してコンパイルされてもよい高級言語１４０２でのプログラムを示す。命令コンバータ１４１２はｘ８６バイナリコード１４０６をｘ８６命令セットコア１４１４を有しないプロセッサによりネイティブに実行されてもよいコードに変換するために使用される。この変換されたコードは、このことが可能な命令コンバータを作ることが困難であるため、代替の命令セットバイナリコード１４１０と同じでありそうではない；しかしながら、変換されたコードは一般的な動作を実現し、代替の命令セットからの命令で構成されることもできる。このように、命令コンバータ１４１２は、エミュレーション、シミュレーション、または他の任意のプロセスを介して、ｘ８６命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがｘ８６バイナリコード１４０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
【図１】
2014182800.tif 000003
【図２】
2014182800.tif 000004
【図３Ａ】
2014182800.tif 000005
【図３Ｂ】
2014182800.tif 000006
【図４】
2014182800.tif 000007
【図５】
2014182800.tif 000008
【図６】
2014182800.tif 000009
【図７Ａ】
2014182800.tif 000010
【図７Ｂ】
2014182800.tif 000011
【図８Ａ】
2014182800.tif 000012
【図８Ｂ】
2014182800.tif 000013
【図９】
2014182800.tif 000014
【図１０】
2014182800.tif 000015
【図１１】
2014182800.tif 000016
【図１２】
2014182800.tif 000017
【図１３】
2014182800.tif 000018
【図１４】
2014182800.tif 000019
【外国語明細書】
2014182800000001.pdf