本明細書で開示する内容は、サブデータ要素サイズのビット群インターリーブ命令、その命令を実行するプロセッサ、その命令の処理すなわち実行時にそのプロセッサが実行する方法、およびその命令を処理すなわち実行するために1つ以上のプロセッサを組み入れるシステムである。以下の記述では、数多くの具体的な詳細(例えば、特定の命令動作、データフォーマット、プロセッサ構成、マイクロアーキテクチャ上の詳細、操作シーケンス)を設定している。しかし、実施形態は、そうした詳細の設定がなくても実行可能である。他の例では、記載内容の理解を曖昧にしないように、既知の回路、構造および技術については詳細に示していない。
図1は、あるビット群インターリーブ命令102の一実施形態を実行するよう動作可能なプロセッサ100の一実施形態を示すブロック図である。幾つかの実施形態によって、このプロセッサは汎用プロセッサ(例えば、汎用マイクロプロセッサ、またはデスクトップ、ラップトップや他のコンピュータで使用される種類の中央演算処理装置(CPU))でよい。あるいは、このプロセッサを専用プロセッサとすることもできる。好適な専用プロセッサの例として、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックプロセッサ、コプロセッサ、組込みプロセッサ、デジタル信号プロセッサ(DPS)およびコントローラ(例えば、マイクロコントローラ)が挙げられるが、これに限定するものではない。このプロセッサは、種々の複合命令セットコンピュータ(CISC)アーキテクチャ、縮小命令セットコンピュータ(RISC)アーキテクチャ、超長命令語(VLIW)アーキテクチャ、ハイブリッドアーキテクチャ、他のタイプのアーキテクチャのいずれを採用していても、または異なるアーキテクチャを組み合わせて採用していてもよい(例えば、コアごとに異なるアーキテクチャを採用してもよい。)。動作中、プロセッサ100は、ビット群インターリーブ命令102を受信することができる。
例えば、この命令を相互接続部のメモリから受信してもよい。この命令は、このプロセッサのマクロ命令、アセンブリ言語命令、機械コード命令、その他の命令、または命令セットの制御信号となり得る。幾つかの実施形態によっては、このビット群インターリーブ命令は、第1のソースパックデータオペランド110を(例えば、1つ以上のフィールドまたは1組のビットを介して)明示的に指定または(例えば、非明示的に)示すことも、第2のソースパックデータオペランド114を指定または示すことも、結果パックデータオペランド118を記憶する宛先記憶位置を指定または示すこともできる。一例として、この命令に、ソースおよび/または宛先オペランド特定フィールドを持たせて、そのオペランドについてレジスタ、メモリ位置、その他の記憶位置を指定することができる。あるいは、これらのオペランドの1つまたは複数を任意に命令に対して暗黙(例えば、命令のオペコードに対して暗黙)にさせることができる。第1のソースパックデータオペランド110は、複数のサブデータ要素サイズのビット群112をそれぞれが有する第1の複数のデータ要素を備えることができる。第2のソースパックデータオペランドは、複数のサブデータ要素サイズのビット群116をそれぞれが有する第2の複数のデータ要素を備えることができる。第1の複数のデータ要素のデータ要素をそれぞれ、対応位置にある第2の複数のデータ要素の別々のデータ要素と対応させることができる。第1の複数のデータ要素に含まれる各データ要素のビット群をそれぞれ、対応する第2の複数のデータ要素のデータ要素において対応する位置にある別々のビット群に対応させることができる。様々な実施形態によって、ビット群はそれぞれ、1ビットサイズのビット群、2ビットサイズのビット群、4ビットサイズのビット群、8ビットサイズのビット群、16ビットサイズのビット群および32ビットサイズのビット群とすることができる。幾つかの実施形態によっては、ビット群をそれぞれ、8ビット未満(例えば、1ビット、2ビット、または4ビットサイズのビット群)とすることができるが、本発明の範囲はこれに限定されるものではない。幾つかの実施形態によっては、命令が、第1のソースパックデータオペランドのビット群のサイズを示す少なくとも1つのビット群サイズ表示ビットを有して(例えば、即値に)いてもよい。
図1を再度参照すると、本プロセッサは、復号部すなわちデコーダ104を含む。この復号部は、ビット群インターリーブ命令を受信し復号することができる。この復号部は、比較的高いレベルのビット群インターリーブ命令を反映、意味、かつ/またはこれらのインターリーブ命令から派生するものである、1つ以上の比較的低いレベルの命令または制御信号(例えば、1つ以上のマイクロ命令、マイクロ操作、マイクロコードエントリポイント、復号された命令または制御信号など)を出力することができる。幾つかの実施形態によっては、この復号部は、ビット群インターリーブ命令を受信する1つ以上の入力構造部(例えば、ポート(1つ以上)、相互接続部(1つ以上)、インタフェース)と、その構造部に連結されてそのビット群インターリーブ命令を認識および複合する命令認識復号ロジックと、同様に連結されて下位命令(単数または複数)または制御信号(単数または複数)を出力する1つ以上の出力構造部(例えば、ポート(1つ以上)、相互接続部(1つ以上)、インタフェース)とを含むことができる。この復号部は種々の異なる機構を使用して実装することができ、これらの機構には、マイクロコード読み出し専用メモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラム可能な論理アレイ(PLA)および当技術分野で既知の復号部の実装に使用する他の機構が含まれるが、これらに限定されない。
幾つかの実施形態によっては、ビット群インターリーブ命令を復号部に直接提供する代わりに、命令エミュレータ、翻訳ルーチン、モーファー、インタープリタまたは他の命令変更モジュールを任意に使用してもよい。様々な種類の命令変更モジュールが当技術分野で既知であり、ソフトウェア、ハードウェア、ファームウェアまたはそれらの組み合わせに実装可能である。したがって幾つかの実施形態によっては、命令変更モジュールを、例えば、独立したダイ上および/またはメモリ内など(例えば、静的、動的または実行時間エミュレーションモジュールとして)、プロセッサの外部に配置してもよい。例えば、命令変更モジュールは、たとえば第1の命令セットに含まれるビット群インターリーブ命令を受信し、これをエミュレート、翻訳、モーフ、解釈実行、または他の変換を実行することにより、そのビット群インターリーブ命令を第2の異なる命令セットに含まれる1つ以上の対応中間命令もしくは制御信号に変換することができる。この第2の命令セットの1つ以上の中間命令または制御信号を復号部(例えば、復号部104)に提供することができる。すると復号部は、それをプロセッサのネイティブハードウェア(例えば、1つ以上の実行ユニット)により実行可能な1つ以上の下位レベルの命令または制御信号に復元することができる。
図1を再度参照すると、本プロセッサはまた、1組のパックデータレジスタ108を含む。このパックデータレジスタのそれぞれを、パックデータ、ベクトルデータまたは単一命令多重データ(SIMD)データを記憶するように動作可能なオンダイ記憶位置とすることができる。このパックデータレジスタを、ソフトウェアおよび/またはプログラマに対して可視であるアーキテクチャ的に可視なレジスタまたはアーキテクチャレジスタを表してよく、および/または、それらは、オペランドを特定するために本プロセッサの命令セットの命令により示されるレジスタである。これらのアーキテクチャレジスタは、所定のマイクロアーキテクチャ(例えば、一時レジスタ、リオーダバッファ、退避レジスタ(retirement レジスタ)など)における他の非アーキテクチャレジスタとは対照的である。パックデータレジスタは、既知の技術を用いて様々なマイクロアーキテクチャに様々な方法で実装されることができるものであり、いずれかの特定種類の設計に限定されるものではない。適切な種類のレジスタの例として、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられた物理レジスタ、およびこの組み合わせが挙げられるが、これに限定されない。
幾つかの実施形態によっては、第1のソースパックデータオペランド110を、任意に、第1のパックデータレジスタに記憶し、第2のソースパックデータオペランド114を任意に第2のパックデータレジスタに記憶し、その宛先記憶位置を、任意にパックデータレジスタ108の第3のパックデータレジスタにしてよい。あるいは、メモリ位置または他の記憶位置を任意に、これらのオペランドの1つ以上に使用してもよい。さらに、幾つかの実施形態によっては、ソースパックデータオペランド用に使うパックデータレジスタを、任意に、結果パックデータオペランドの宛先記憶位置として再使用してもよい。一態様では、ソース/宛先レジスタが、ソースオペランドおよび結果オペランドの両方に使用されるものと非明示的に、すなわち暗に理解され得るものである。
図1を再度参照すると、実行ユニット106は、復号部104およびパックデータレジスタ108に連結されている。本実行ユニットは、ビット群インターリーブ命令を表し、かつ/またはその命令から派生する1つ以上の復号または他の変換をされた命令または制御信号を受信することができる。また、本実行ユニットは、第1のソースパックデータオペランド110および第2のソースパックデータオペランド114を受信することができる。本実行ユニットは、ビット群インターリーブ命令に応じて(例えば、命令から復元された1つ以上の命令または制御信号に応じて)、かつ/またはビット群インターリーブ命令の結果として動作して、その命令により示された宛先記憶位置に結果パックデータオペランド118を記憶することが可能である。幾つかの実施形態によっては、その結果パックデータオペランドは、第1のソースパックデータオペランドの1つおき、すなわち交互に並ぶビット群に第2のソースパックデータオペランドの1つおき、すなわち交互に並ぶ対応ビット群を挟んで含むことができる。この対応するビット群は、第1のソースパックデータオペランドおよび第2のソースパックデータオペランド内において対応する相対的位置(例えば、対応するビット位置)に位置することができる。幾つかの実施形態によっては、この結果は、図3、図4または図6に図示および記載するいずれかのものになり得る。ただし、本発明の範囲はこれに制限されるものではない。
幾つかの実施形態によっては、結果パックデータオペランドは、第1のソースパックデータオペランドの奇数位置のビット群のみを、第2のソースパックデータオペランドの対応奇数位置のビット群と交互に並べて含むことができる。他の実施形態では、結果パックデータオペランドは、第1のソースパックデータオペランドの偶数位置のビット群のみを、第2のソースパックデータオペランドの対応偶数位置のビット群と交互に並べて含んでもよい。幾つかの実施形態によっては、ビット群インターリーブ命令は、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドの対応偶数位置のビット群と対応奇数位置のビット群のうちのどちらが結果パックデータオペランドに含まれるかを示す、少なくとも1つの偶数奇数表示ビットを(例えば、ビット群インターリーブ命令の即値に)有してもよい。
幾つかの実施形態によっては、結果パックデータオペランドは、第1のソースパックデータオペランドの1つおきの1ビット、2ビット、4ビット、8ビット、16ビットまたは32ビットサイズのビット群を、第2のソースパックデータオペランドの1つおきの1ビット、2ビット、4ビット、8ビット、16ビットまたは32ビットサイズの対応ビット群と交互に並べて含むことができる。幾つかの実施形態によっては、このビット群は、1ビット、2ビット、または4ビットサイズのビット群であるが、本発明の範囲はこれに制限されるものではない。幾つかの実施形態によっては、このビット群は、32ビットダブルワードおよび64ビットクワドワードのどちらかであるデータ要素に含まれるが、32ビットダブルワードまたは64ビットクワドワードより小さい。
有利なことには、サブデータ要素サイズのビット群インターリーブ命令を用いてデータ要素より小さいビット群の交互配置ができる。幾つかの実施形態によっては、このビット群を、プロセッサがパックデータとして処理可能な最小サイズのパックデータ要素より小さくすることができる。幾つかの実施形態によっては、このプロセッサは、これらのパックデータ要素に飽和状態のパックデータ操作を実行できる場合もあるが、サブデータ要素サイズのビット群の少なくとも1つ以上に対しては飽和状態のパックデータ操作を実行できない場合もある。幾つかの実施形態によっては、キャリーチェーンを、パックデータ要素の境界と一致するものを除いて、ビット群の境界で壊すことはできない。
本実行ユニットおよび/またはプロセッサは、特定または特有のロジック(例えば、トランジスタ、集積回路、またはファームウェアとの組み合わせが可能な他のハードウェア(例えば、不揮発性メモリに記憶された命令)および/またはソフトウェア)を含むことができる。そのロジックは、ビット群インターリーブ命令を実行し、かつ/または、そのビット群インターリーブ命令に応じて、および/またはそのビット群インターリーブ命令の結果として(例えば、ビット群インターリーブ命令から復号された1つ以上の命令または制御信号に応じて)その結果を記憶するように動作可能なものである。幾つかの実施形態によっては、実行ユニットは、ソースオペランドを受信する1つ以上の入力構造部(例えば、ポート(1つ以上)、相互接続部(1つ以上)、インタフェース)と、その構造部に連結されてそのソースオペランドを受信および処理してその結果オペランドを生成する回路またはロジックと、同様に連結されてその結果オペランドを出力する1つ以上の出力構造部(例えば、ポート(1つ以上)、相互接続部(1つ以上)、インタフェース)とを含むことができる。幾つかの実施形態によっては、実行ユニットは、第1と第2のソースパックデータオペランドの一方に含まれて隣接するビット群のすべての対の中で、隣接するビット群の位置を交換するビット群スワッピングロジックと、1つおきのビット群を選択するマスキングおよび論理動作ロジックとを含むことができる。ただし、本発明の範囲はこれに制限されるものではない。
説明を不明瞭にしないよう、比較的単純なプロセッサ100を図示し説明してきた。しかし、このプロセッサは、任意に他の既知のプロセッサ構成要素を含んでもよい。含められる構成要素の例として、汎用レジスタ、ステータスレジスタ(フラッグレジスタと呼ぶ場合がある)、システム制御レジスタ、命令フェッチユニット、プリフェッチバッファ、1つ以上のレベルのキャッシュ(例えば、レベル1(L1)命令キャッシュ、L1データキャッシュ、L2データ/命令キャッシュ)、命令変換索引バッファ(TLB)、データTLB、分岐予測ユニット、アウトオブオーダ実行ユニット(例えば、命令スケジューリングユニット、レジスタリネームおよび/または割り当てユニット、命令ディスパッチユニット、リオーダバッファ(ROB)、予約ステーション、メモリオーダバッファ、退避ユニットなど)、バスインタフェースユニット、アドレス生成ユニット、デバッグユニット、性能監視ユニット、電源管理ユニット、プロセッサに含まれる他の構成要素、およびこれらの様々な組み合わせを含むが、これに限定されない。こうした構成要素を、当技術分野で既知の様々な異なる好適な組み合わせおよび/または構成で相互に連結することができる。実施形態は、既知のそのような組み合わせまたは構成のいずれにも限定されない。さらに、実施形態を、複数のコアを備えるプロセッサであって、そのうち少なくとも1つのコアがビット群インターリーブ命令を実行するよう動作可能であるものに含めてもよい。
図2は、ビット群インターリーブ命令の一実施形態を実行する方法230の一実施形態を示すブロック流れ図である。幾つかの実施形態によっては、図2の方法は、図1のプロセッサにより、および/または図1のプロセッサ内で実行することができる。また、図1のプロセッサについて本明細書で説明する構成要素、特徴および特定の任意の詳細を必要に応じて図2の方法に適用することできる。あるいは、図2の方法は、類似のもしくは異なるプロセッサまたは装置により、および/またはその中で実行することができる。さらに、図1のプロセッサは、図2に示すものと同一の、類似の、または異なる方法を実行することができる。
その方法は、ブロック231でビット群インターリーブ命令を受信することを含む。態様によって、この命令を、プロセッサまたはその一部(例えば、命令フェッチユニット、復号部、バスインタフェースユニットなど)で受信することができる。態様によって、この命令を、オフプロセッサおよび/またはオフダイソース(例えば、メモリ、相互接続部などから)、あるいはオンプロセッサおよび/またはオンダイソース(例えば、命令キャッシュ、命令キューなど)から受信することができる。ビット群インターリーブ命令で、複数のビット群をそれぞれが有する第1の複数のデータ要素を有する第1のソースパックデータオペランドを指定または示すことができる。その命令で、複数のビット群をそれぞれが有する第2の複数のデータ要素を有する第2のソースパックデータオペランドを指定または示すことができる。第1の複数のデータ要素のデータ要素それぞれを、そのオペランド内で対応する相対位置(例えば、対応するビット位置)にある第2の複数のデータ要素の別々のデータ要素と対応させることができる。第1の複数のデータ要素のデータ要素それぞれに含まれる各ビット群を、第2の複数のデータ要素の対応データ要素に含まれ、対応する相対位置(例えば、対応するビット位置)にある別々のビット群と対応させることができる。
ブロック232では、結果パックデータオペランドを、ビット群インターリーブ命令に応じて、かつ/またはその結果として宛先記憶位置に記憶することができる。この宛先記憶位置を、ビット群インターリーブ命令で指定または示すことができる。幾つかの実施形態によっては、結果パックデータオペランドは、第1のソースパックデータオペランドの1つおきのビット群を、第2のソースパックデータオペランドの1つおきの対応ビット群と交互に並べて含むことができる。幾つかの実施形態によっては、この方法は、本明細書の他の個所で開示するビット群インターリーブ命令のいずれかを受信すること、本明細書の他の個所で開示するビット群インターリーブ処理のいずれかを実行すること、および/または本明細書の他の個所で開示するビット群インターリーブ命令に対する結果パックデータオペランドのいずれかを記憶することを含むことができる。
図示の方法は、アーキテクチャの動作を含む(例えば、ソフトウェア透視図から可視であるもの)。他の実施形態では、この方法に随意1つ以上のマイクロアーキテクチャの動作を含めることができる。例として、命令を取り出す、復号する、アウトオブオーダのスケジュールにする、ソースオペランドをアクセスできるようにする、実行ユニットにマイクロアーキテクチャ動作を実行させて命令を実行することができる。
図3は、ビット群インターリーブ命令の一実施形態に応じて、偶数位置のビット群を交互配置するよう実行可能なビット群インターリーブ処理334の一実施形態を示すブロック図である。この命令で、第1の複数のパックデータ要素A1〜ANを有する第1のソースパックデータオペランド310を指定または示すことができる。また、この命令で、第2の複数のパックデータ要素B1〜BNを有する第2のソースパックデータオペランド314を指定または示すことができる。第1のソースパックデータオペランドのデータ要素それぞれを、対応する相対位置(例えば、対応ビット位置)にある第2のソースパックデータオペランドの別々のデータ要素と両オペランド内で対応させることができる。例えば、第1のソースパックデータオペランドの最下位のデータ要素A1を、第2のソースパックデータオペランドの最下位のデータ要素B1と対応させ、最上位のデータ要素ANを最上位のデータ要素BNと対応させることができる。一般に、各ソースパックデータオペランドのデータ要素の数は、単一データ要素のビットサイズで分割される、ソースパックデータオペランドのビットのサイズに等しくてよい。様々な実施形態によっては、各ソースパックデータオペランドの幅を64ビット、128ビット、256ビット、512ビット、または1024ビットとすることができる。ただし、本発明の範囲はこれに制限されるものではない。様々な実施形態によっては、各データ要素のサイズは、8ビット、16ビット、32ビット、または64ビットでもよい。ただし、本発明の範囲はこれに制限されるものではない。また、他のパックデータオペランドのサイズおよびデータ要素の幅も適宜変更可能である。様々な実施形態によっては、各ソースパックデータオペランドのデータ要素の数を、少なくとも2個、少なくとも4個、少なくとも8個、少なくとも16個、少なくとも32個または32個を超える数(例えば少なくとも64個)というように様々に変えることができる。
第1のソースパックデータオペランドのデータ要素それぞれが、複数のビット群を有してよい。同様に、第2のソースパックデータオペランドのデータ要素それぞれも、複数のビット群を有してよい。図示の例では、データ要素A1は、ビット群G1、G2、G3およびG4を有し、データ要素ANは、ビット群G5、G6、G7、G8を有する。同様に、データ要素B1は、ビット群H1、H2、H3およびH4を有し、データ要素BNは、ビット群H5、H6、H7、H8を有する。他の実施形態では、データ要素がそれぞれ別々の数のビット群を持つことができる。各ビット群は、それを含むデータ要素より少ないビット数を有する。幾つかの実施形態によっては、ビット群はそれぞれ、ビットの2乗の数を有することができる。例えば、様々な実施形態によっては、ビット群それぞれが、1ビット、2ビット、4ビット、8ビット、16ビット、32ビットを持つことができる。データ要素それぞれに、複数のビット群がある。例えば、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドに64ビットのデータ要素が含まれている場合、64ビットのデータ要素それぞれが、64個の1ビットビット群、32個の2ビットビット群、16個の4ビットビット群、8個の8ビットビット群、4個の16ビットビット群、2個の32ビットビット群を持つことができる。あるいは、32ビットまたは他のサイズのデータ要素を必要に応じて使用することができる。第1のソースパックデータオペランド310が含む第1の複数のデータ要素の各データ要素のビット群それぞれを、第2のソースパックデータオペランドが含む第2の複数のデータ要素のうち、対応する相対位置(例えば、対応ビット位置)にある別々のビット群に対応させることができる。例えば、この例示の場合、G1はH1に対応させることができ、G2はH2に対応させることができ、G7はH7に対応させることができる。
図示のビット群インターリーブ処理は、任意に一時的にグループ交換した第2のソースパックデータオペランド336を示す。1組の交差する矢印338を用いて、幾つかの実施形態によっては、1つのソースパックデータオペランド内の隣接するビット群のすべての対の中で隣接するビット群の位置をどのように交換することができるかを示す。例えば、H1をH2があった相対ビット位置に、H2をH1があった相対ビット位置に入れ替えることができる。幾つかの実施形態によっては、こうしたビット群の交換処理を必要に応じて実行することができる。実施形態によっては、こうしたビット群の交換動作を任意に省略可能である。こうしたビット群の交換動作は、結果パックデータオペランド318を生成する1つの可能な方法であるが、唯一の方法ではない。実施形態によっては、関連するビット群を第2のソースパックデータオペランドにあった元の位置から、結果パックデータオペランドの適切な位置に直接送ることで、こうしたビット群の交換動作を実行せずに済む。一例示として、データ要素B1およびグループ交換したデータ要素B'1は、4ビットサイズのビット群の場合、以下の通り表すことができる。B1= 0100 1110 0110 1100B'1= 1110 0100 1100 0110
こうした任意ビット群の交換処理から、この処理は任意ではあるが、いくつかの利点を得ることができる。1つには、2つのソースのビット群交互配置では、左シフトまたは右シフトのみをすればよい。しかし、任意のビット群の交換を実行する場合、第1および第2両方のソースパックデータオペランドに同一オペランドを再使用することにより、再帰式自動ビット反転処理(recursive auto bit-reversal operation)(例えば、1ビット群を右にシフトし、1ビット群を左にシフトする)をとることができる。2つ目の利点として、この交換動作を実行するかしないかにより、どちらかのソースオペランドの最下位のビット群を結果パックデータオペランドの最下位のビット群として出現させることが可能になる。
結果パックデータオペランド318を、ビット群インターリーブ命令に応じて、(例えば、実行ユニット106により)生成し、宛先記憶位置に記憶することができる。この宛先記憶位置を、ビット群インターリーブ命令が指定または示すことができる。様々な実施形態によっては、この宛先記憶位置を、パックデータレジスタ、メモリ位置または他の記憶位置にすることができる。この結果パックデータオペランドは、複数のパックデータ要素C1〜CNを含み、要素C1〜CNはそれぞれ、A1〜ANおよび/またはB1〜BNのいずれか1つに対応する。任意の一時的にグループ交換した第2のソースパックデータオペランド336を使用する実施形態では、第1の矢印340が、G1を第1のオペランドから結果オペランドにどのように記憶できるかを示し、第2の矢印342が、H1を一時的にグループ交換したオペランドから結果オペランドにどのように記憶できるかを示し、第3の矢印344が、G3を第1のオペランドから結果オペランドにどのように記憶できるかを示し、第4の矢印346が、H3を第1のオペランドから結果オペランドにどのように記憶できるかを示す。こうした場合、ビット群を、第1と第2のオペランドから交互に、結果オペランドにおけるビット群位置それぞれにビット位置で対応する連続ビット群位置から二者択一的に選択する。
幾つかの実施形態によっては、結果パックデータオペランドは、第1のソースパックデータオペランドの1つおきのビット群を、これに1おきに対応する第2のソースパックデータオペランドのビット群と交互に並べて含むことができる。例えば、結果パックデータオペランドは、第1のソースパックデータオペランドの1つおきの、1ビット、2ビット、または4ビットビットサイズのビット群を、第2のソースパックデータオペランドで同じサイズの1ビット、2ビット、4ビットサイズの1つおきの対応ビット群と交互に並べて含むことができる。図示の通り、幾つかの実施形態によっては、結果パックデータオペランドは、第1のソースパックデータオペランドの奇数位置のビット群のみを、第2のソースパックデータオペランドの対応奇数位置のビット群のみと交互に並べて含むことができる。第1のソースパックデータオペランドでは、最下位から最上位のビット位置までのビット順に、G1が第1の位置(すなわち奇数位置)のビット群、G2が第2の位置(すなわち偶数位置)のビット群、G3が第3の位置(すなわち奇数位置)のビット群、G4が第4の位置(すなわち偶数位置)のビット群である。同様に、最下位から最上位のビット位置までのビット順に、第2のソースパックデータオペランドでは、H1が第1の位置(すなわち奇数位置)のビット群、H2が第2の位置(すなわち偶数位置)のビット群、H3が第3の位置(すなわち奇数位置)のビット群、H4が第4の位置(すなわち偶数位置)のビット群である。最も近い奇数位置のビット群の対それぞれを、1つの介在する/中間の偶数位置ビット群に隔てられた不連続のビット群としてもよい。図示の結果パックデータオペランドは、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドのすべて奇数の位置のビット群のみ(例えば、G1、H1、H3、G5、H5、G7およびH7)を有し、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドのいずれの偶数位置のビット群も有しない(例えば、G2、H2、G4、H4、G6、H6、G8およびH8)ことに留意されたい。図示の結果パックデータオペランドは、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドのビット群の半分しか含んでいない。
幾つかの実施形態によっては、ビット群(例えば、奇数位置のビット群)の交互配置を、命令に明示的に指定し、および/またはフレキシブルにする代わりに、命令(例えば、命令のオペコード)に対して暗黙として、および/またはフィクスとすることができる。例えば、この命令が、データをシャッフルすなわち並べ替えるための広範な制御を用いる、2ソースオペランドの完全シャッフルすなわち並べ替え命令のような高度にフレキシブルな命令でなくてもよい。こうした専用または暗黙の機能を使うことで、フレキシブルな命令と併用されるように広範で明示的制御(例えば明示的制御フィールド)を生成および使用する必要を回避する一助となり得る。
図4は、ビット群インターリーブ命令の一実施形態に応じて偶数位置のビット群を交互に配置するよう実行可能なビット群インターリーブ処理334の一実施形態を示すブロック図である。図4の処理は、図3の処理と類似する部分がある。説明の混乱を避けるため、図3の処理に対して任意に類似または共通となる特徴および詳細をすべて繰り返さず、それとは異なるおよび/または図4の処理に追加された特徴を主に説明する。ただし、奇数位置のビット群の代わりに偶数位置のビット群を交互配置することに関連する特徴および詳細を除き、図3の処理に関する上述の特徴および詳細は、特に指示がないか明白でない限り、図4の処理にも適宜適用可能であることを理解されたい。上述のように、この命令は、対応する複数のビット群(例えば、G1〜G4およびG5〜G8)をそれぞれ含む第1の複数のパックデータ要素A1〜ANを有する第1のソースパックデータオペランド410を指定または示すことができ、この命令はまた、対応する複数のビット群(例えば、H1〜H4およびH5〜H8)をそれぞれ含んで対応する第2の複数のパックデータ要素B1〜BNを有する第2のソースパックデータオペランド414を指定または示すことができる。第1のソースパックデータオペランドが含むデータ要素それぞれを、対応する相対位置(例えば、オペランド内の対応ビット位置)にある第2のソースパックデータオペランドの別々のデータ要素と対応させることができる。第1のソースパックデータオペランド410のデータ要素それぞれが含む各ビット群は、第2のソースパックデータオペランド414の対応するデータ要素において対応する相対位置(例えば、対応ビット位置)にある別々のビット群に対応させることができる。第1のソースパックデータオペランドおよび第2のソースパックデータオペランド、それらのデータ要素およびそれらのビット群は、図3のものと同一または同様であってもよく、かつ同一のバリエーションおよび代替を持つことができる。幾つかの実施形態によっては、各ビット群が、1ビット、2ビット、4ビット、8ビット、16ビットまたは32ビットを有し、データ要素それぞれが、少なくともその2倍かそれ以上のビット数を有してもよい。
結果パックデータオペランド418を、ビット群インターリーブ命令/処理に応じて(例えば、実行ユニット106により)生成し、宛先記憶位置に記憶することができる。この宛先記憶位置は、この命令が指定または示すことができる。様々な実施形態によっては、この宛先記憶位置は、パックデータレジスタ、メモリ位置または他の記憶位置でよい。この結果パックデータオペランドは、複数のパックデータ要素C1〜CNを含み、この要素C1〜CNはそれぞれ、A1〜ANおよび/またはB1〜BNのいずれか1つに対応する。この結果パックデータオペランドは、第1のソースパックデータオペランドの1つおきのビット群を、これに1つおきに対応する第2のソースパックデータオペランドのビット群と交互に並べて含むことができる。図示の通り、幾つかの実施形態によっては、この結果パックデータオペランドは、第1のソースパックデータオペランドの偶数位置のビット群のみを、第2のソースパックデータオペランドの対応偶数位置のビット群のみと交互に並べて含んでもよい。最も近い偶数位置のビット群の各対を、1つの介在する/中間の奇数位置ビット群に隔てられた不連続のビット群としてもよい。図示の結果パックデータオペランドは、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドのすべて偶数位置のビット群のみ(例えば、G2、H2、G4、H4、G6、H6、G8およびH8)を有し、同じ第1のソースパックデータオペランドおよび第2のソースパックデータオペランドの奇数位置のビット群(例えば、G1、H1、G3、H3、G5、H5、G7およびH7のすべて)をいずれも有していない。図示の結果パックデータオペランドは、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドのビット群の半分しか含んでいない。この結果オペランドに含まれる偶数位置のビット群は、第1のソースパックデータオペランドおよび第2のソースパックデータオペランド長のほぼ全体に渡っている(例えば、これらのオペランドの最下位または最上位の半分に含まれているのではない)。また、図4では、結果オペランドの最下位のビット群(H2)を第2のソースオペランド414から取っているが、図3では、結果オペランドの最下位のビット群(G1)を第1のソースオペランド310から取っていることに留意されたい。幾つかの実施形態によっては、偶数と奇数の間で交換することが可能であるだけでなく、ソースオペランドの最下位のビット群を取ったソースオペランドから交換することも可能である。
図5は、ビット群インターリーブ命令の一実施形態に好適な即値550の例示的な一実施形態を示すブロック図である。図示の即値は、8ビット即値(imm8)である。図示の即値では、ビット5〜0が、ソースパックデータオペランドのビット群のサイズを指定または示すビット群サイズ表示フィールドおよび/または1組のビット群サイズ表示ビットである。幾つかの実施形態によっては、このフィールドまたはビットを用いて、ビット群のビットのサイズを明示的に指定する(例えば、2ビットサイズのビット群に2の値を指定する、4ビットサイズのビット群に4の値を指定する)ことができる。実施形態によっては、このフィールドまたはビットを用いて、複数の異なるサイズから選択するための任意のコードまたは任意の数字を提供することができる(例えば、1つのビットが、2ビットサイズのビット群を選択するために二進法の0の値を、または4ビットサイズのビット群を選択するために二進法の1の値を有することができる)。幾つかの実施形態によっては、このフィールドまたはビットを用いて、1ビット、2ビット、4ビット、8ビット、16ビット、32ビットサイズのビット群のうちのいずれか1つを示すことができる。ただし、本発明の範囲はこれに制限されるものではない。これらの各値により、ビット群に関する様々な粒度を示すことができる。
図示の即値では、ビット6を使用して、結果オペランドの最下位のビット群を提供するため、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドのうちの一方を指定または示す。これにより、結果パックデータオペランドが、最下位のビット群として、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドのうちの一方の最下位のビット群を有するのか、または第1のソースパックデータオペランドおよび第2のソースパックデータオペランドの他方(すなわち、別の方)の最下位から2番目のビット群を有するのかを示すことができる。
図示の即値では、ビット7は、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドの対応偶数位置のビット群または対応奇数位置のビット群のどちらが結果パックデータオペランドに含まれるのかを指定または示す、偶数または奇数(偶数奇数)表示フィールドおよび/または1組の1つ以上の偶数奇数表示ビットである。一実施形態では、1つのビットに第1の値(たとえば、利用可能な規定の1つにしたがって、二進数の1に設定)を持たせて、ソースオペランドから対応偶数位置ビット群が結果オペランドに記憶されることを示す、または、その1つのビットに第2の別の値(たとえば二進数の0に戻す)を持たせて、ソースオペランドからの対応奇数位置ビット群が結果オペランドに記憶されることを示すことができる。
これは、単に好適な即値の一例であることが理解されよう。実施形態によっては、これよりも長い即値(例えば、16ビット、32ビット)または短いビット(例えば、4ビット、6ビット)のいずれかを、8ビット即値の代わりに必要に応じて使用することができる。実施形態によっては、さらに長いフィールド、短いフィールドまたは複数組のビットのいずれかを用いて、ビット群サイズおよび/または偶数奇数表示を指定または示してもよい。さらに、この複数のフィールドまたは複数組のビットを必要に応じて様々に再配置してもよく、そこに連続したビットを含めなくてもよい。
図6は、マスク付ビット群インターリーブ処理634の一実施形態に応じて、パックデータ演算マスク660を施した偶数位置のビット群を交互配置するよう実行可能なマスク付ビット群インターリーブ処理634の一実施形態を示すブロック図である。図6のマスク付け処理は、図3のマスクなし処理と類似する部分がある。説明の混乱を避けるため、図3のマスク付なし処理と任意に類似または共通の特徴および詳細をすべて繰り返さず、異なるおよび/または図6に追加された特徴を主に説明する。しかし、図3のマスク付なし処理に関する上述の特徴および詳細は、特に指示がないか明白でない限り、図6のマスク付なし処理にも適宜適用可能であることを理解されたい。
このマスク付ビット群インターリーブ命令は、第1のソースパックデータオペランドの610および第2のソースパックデータオペランド614を指定または示すことができる。上記で説明した図4の処理と同様、この第1のソースパックデータオペランドは、複数のビット群をそれぞれ有する第1の複数のデータ要素を持つことができ、この第2のソースパックデータオペランドは、複数のビット群をそれぞれ有する第2の複数のデータ要素を持つことができる。この第1の複数のデータ要素のデータ要素はそれぞれ、対応位置にある第2の複数のデータ要素の別々のデータ要素と対応可能である。この第1の複数のデータ要素の各データ要素のビット群はそれぞれ、第2の複数の対応データ要素において対応位置にある別々のビット群に対応可能である。第1のソースパックデータオペランドおよび第2のソースパックデータオペランド、それらのデータ要素およびそれらのビット群は、図3のものと同一または同様であってもよく、かつ同一のバリエーションおよび代替を有してもよい。
また、マスク付ビット群インターリーブ命令は、ソースパックデータ演算マスク660を指定(例えば、明示的に指定する)または示すこともできる(例えば、非明示的に示す)。また、このパックデータ演算マスクを、本明細書では、単に演算マスク、プレディケートマスクまたはマスクと呼ぶ場合がある。このマスクは、対応する処理が実行されるかどうか、および/または対応結果が記憶されるかどうかに関わらず、プレディケート、条件付き制御、またはマスクに使用されるプレディケートオペランドあるいは条件付きの制御オペランドとすることができる。幾つかの実施形態によっては、複数の対応データ要素対に対する処理が、他とは別々におよび/または独立してプレディケートまたは条件的に制御されるように、このマスキングまたはプレディケーションをデータ要素毎の粒度とすることができる。このマスクは、マスク要素、プレディケート要素、または条件的制御要素をそれぞれ複数含むことができる。一態様では、この複数のマスク要素を、第1のソースパックデータオペランドおよび第2のソースパックデータオペランド(例えば、A1およびB1に対応するマスク要素)が含むソースデータ要素の対応対および/または対応結果データ要素と1対1の対応関係で含むことができる。このマスクは、第1のソースパックデータオペランドの各データ要素(例えば、データ要素A1用の1番目のマスク要素からデータ要素AN用のN番目のマスク要素)および/または各結果データ要素に対するマスク要素を持つことができる。ただし、こうした実施形態では、複数のビット群が、同じマスク要素に対応可能であり、かつ/または、ソースパックデータ演算マスクにあるマスク要素の何倍ものビット群が各ソースオペランドにあり得ることに留意されたい。図示の通り、幾つかの実施形態によっては、マスク要素それぞれが、単一マスクビットであってもよい。
あるいは、2つ以上のビットを必要に応じてマスク要素それぞれに使用することができる(例えば、各マスク要素が、それぞれの対応するソースデータ要素と同じビット数であってもよく、これらのビットがすべて同じ値を有していても、あるいはこのうちの1つのビットをマスクビットとして使用してもよい)。他のビット数も可能である。マスクビットそれぞれの値は、対応する処理を実行するかどうか、および/または対応結果データ要素を記憶するかどうかを制御することができる。各マスク要素またはビットに第1の値をもたせて、処理の実行および対応結果データ要素の宛先への記憶を可能にする、または、第2の別の値を持たせて、処理の実行および/または対応結果データ要素の宛先への記憶をできないようにすることができる。1つの利用可能な規定により、例示のように、バイナリ0に戻されたマスクビット(すなわち0)を、処理を実行する必要がない、かつ/またはその対応結果データ要素を記憶する必要がないマスクアウト処理を表すものとし、バイナリ1に設定されるマスクビット(すなわち1)を、対応結果データ要素が記憶されるマスクなし処理を表すものとすることができる。その逆の規定も利用可能である。
マスク付ビット群インターリーブ処理634の上記実施形態を、マスク付ビット群インターリーブ命令の上記実施形態に応じて、かつ/またはその結果として実行することができる(例えば、実行ユニット106により)。このマスク付処理を、ソースパックデータ演算マスク660のマスキング、プレディケーション、または条件制御を施すことにより実行することができる。上述の通り、結果パックデータオペランド618を、マスク付ビット群インターリーブ命令に応じて、(例えば、実行ユニット106により)生成し、宛先記憶位置に記憶することができる。この結果パックデータオペランドは、複数の結果データ要素C1〜CNを含むことができる。この要素C1〜CNはそれぞれ、同じ相対位置にある別のソースデータ要素対に対応する(例えばC1はA1およびB1に対応可能)。幾つかの実施形態によっては、マスクなしマスク要素に対応する結果データ要素が、ソースデータ要素の対応対に実行されるビット群インターリーブ処理により変化する値を備えることができる。これに対して、マスクアウトマスク要素に対応する結果データ要素は、ソースデータ要素の対応対に実行される演算に依存しない値を備えることができる。むしろ、これらの結果のデータ要素は、固定値または所定値を備えることができる。例えば、対応処理を実行する必要はない、または対応処理を実行する場合でも、その対応結果を、宛先に記憶する必要はない。それよりも、固定値または所定値を対応する結果データ要素に記憶することができる。
図示の例では、これは一例にすぎないが、第1のマスク要素662をマスクマスクなしとし(例えば、バイナリ1の値を有する)、N番目のマスク要素664をマスクする(例えばバイナリ0の値を有する)。結果として、データ要素C1を、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドから交互配置された対応奇数位置のビット群を含む結果のパックデータオペランドに記憶することができる。これに対して、データ要素CNは、マスクアウトしたマスク要素に対応し、マスクされた値668を記憶できる。このマスクされた値は、固定または所定の値とすることができる。特定のマスクされた固定値または所定値は、特定の実装に使用されるマスキングの種類より変更可能である。幾つかの実施形態によっては、ゼロイングマスキング(zeroing masking)を使用できる。ゼロイングマスキングでは、マスクアウトした結果データ要素(例えば、CN)をゼロ設定できる(例えば、強制的にゼロ値を持たせる)。他の実施形態では、マージマスキング(merging masking)を使用することができる。マージマスキングでは、マスクアウトした結果データ要素が、対応するソースデータ要素のうちの1つの値を持つことができる(例えば、対応するソースデータ要素をマスクアウトした結果データ要素へ通過させることができる)。例えば、CNはマージマスキングでANかBNどちらかの値を記憶することができる。
図示の実施形態は、パックデータ演算マスク660を施して偶数位置のビット群を交互配置するよう実行可能なマスク付ビット群インターリーブ処理634を示す。別の実施形態は、パックデータ演算マスクを施して奇数位置のビット群を交互配置するよう実行可能なマスクビット群インターリーブ処理に関連する(例えば、マスキングを図3に示すものと同様または同一の実施形態と適宜組み合わせることができる)。
図7は、データ要素ブロードキャスト命令を含むビット群インターリーブの一実施形態に応じてビット群インターリーブ処理734と必要に応じて組み合わせ可能なデータ要素ブロードキャスト処理770の実施形態を示すブロック図である。幾つかの実施形態によっては、この命令が1組の1つ以上のビットまたはブロードキャスト表示フィールドを適宜有して、データ要素のブロードキャスト送信が実行されることを示すことができる。この他の実施形態では、データ要素ブロードキャスト処理に、必要に応じてこの命令に対して暗黙にしてもよい(例えば、オペコードに対して暗黙)。この命令は、ブロードキャストまたは複製される単一データ要素(例えば、データ要素B1)を備えるソースオペランド772を示すことができる。このソースオペランドは、複数のデータ要素を有するパックデータオペランドと対照的に、単一データ要素のみを有するスカラオペランドであってもよい。幾つかの実施形態によっては、この単一データ要素(例えば、B1)を、メモリ位置773(例えば、メインメモリに)に記憶してもよいが、必須ではない。こうした実施形態では、単一データ要素には、(たとえば、ロード、または命令から復号または導出される他のメモリアクセス動作を介して)まずメモリ位置からアクセスできる。その後、この単一データ要素を、複数回、ブロードキャスト送信または複製して776、この単一データ要素の複数の複写(例えば、B1−1〜B1−N)を生成することができる。幾つかの実施形態によっては、データ要素B1の別の複製または複写を、命令が示す他のソースパックデータオペランド(例えば、データ要素A1〜ANを有する第1のソースパックデータオペランド310)のデータ要素それぞれについて生成することができる。この例示では、データ要素の複数の複製または複写を、一時的ソースパックデータオペランド774内に一緒に示されている。この一時的ソースパックデータオペランドは破線で示して、幾つかの実施形態によっては、単一データ要素の複数の複製すなわち複写を一時レジスタまたは他の非アーキテクチャ記憶位置に一緒に記憶できることを示しているが、他の実施形態では、データ要素の複数の複製すなわち複写は、実際にはレジスタにも記憶位置にも一緒に記憶できず、単に実行ユニットに提供することだけができる場合がある。ブロードキャストまたは複製した複数のデータ要素(例えば、一時ソースパックデータオペランド)を、ビット群インターリーブ処理734に提供することができるが、この処理734は本明細書の他の個所で説明するビット群インターリーブ処理のいずれであってもよい。上述のソースパックデータオペランドについて説明してきたように、ビット群インターリーブ処理を実質的にブロードキャストデータ要素または複製データ要素に実行することができる。有利なことに、ビット群インターリーブ処理をデータ要素ブロードキャスト処理に組み入れることにより、複数のベクトル、パックデータまたはSIMD演算インターリーブビット群それぞれに対して同じ単一データ要素または値の使用が望まれる様々な用途の効率を高める一助となり得る。
いくつかの概要をさらに例示するために、VPREVCROSSQと名付けられたビット群インターリーブ命令に関する以下の詳細な例示的実施形態を考える。表1に、この命令の幾つかの実施形態について、オペコード、符号化、および動作記述を列記する。
EVEXは、本明細書の他の個所で説明するようにEVEXによる符号化を指す。Xmm
*は128ビット、ymm
*は256ビット、zmm
*は512ビットのパックデータレジスタを表す。{k1}オペランドは、ソースパックデータ演算マスクまたはプレディケーションマスクとして使用されるマスクレジスタ(例えば、マスクレジスタk0〜k7のうちの1つ)を指定する。{z}は、マスキングの種類(例えば、マージマスキングまたはゼロイングマスキング)を示す。m64bcstは、メモリからソースベクトルの複数の要素までの64ビットデータ要素のブロードキャストを示す。
表2は、命令オペランドの符号化を列記したものである。ModRMは、レジスタ(reg)、またはレジスタもしくはメモリ(r/m)を可能にする。(r)は、読み出しを表し、(w)は、書き込みを示す。
VPREVCROSSQ命令は、第2のソースからの要素内でグループ化したビットの交換または逆転を実行し、交互にビット群を選択することにより、第1のソースと組み合わせる。この即値は演算を制御する。imm8[5:0]は、ビット群の長さを制御し、imm8[7]は、2つのオペランドについて交差パターンの順序を制御する。imm8[6]は、現在は使われていない。ビット群は対になって、2ビットの累乗グループサイズで1〜32サイズのビットのブロック(例えば、1ビット、2ビット、4ビット、8ビット、16ビット、32ビット)を形成することにより、グループすべてに対を設ける。各グループは、隣グループと対になり、その内部オペランドを交換する(入れ替える)。第1のソースオペランドはベクトルレジスタである。第2のオペランドはベクトルレジスタまたはメモリ位置である。この宛先オペランドはベクトルレジスタである。
VPREVCROSSQ命令の一実施形態に関する疑似コードの例を以下に示す。SRC1は、第1のソースパックデータオペランドを意味し、SRC2は、第2のソースパックデータオペランドを意味し、DESTは宛先を意味する。TSRC2は、一時レジスタを意味する。Qwordは、64ビットのクワッドワードを意味する。k1オペランドは、パックデータ演算マスクまたはプレディケーションマスクを意味する。この疑似コードでは、「j」はオペランド内のクワッドワードの位置カウンタを意味し、KLは、マスク長および/またはパックデータオペランド内のデータ要素位置の数を表し、VLは、ベクトルまたはパックデータオペランド長を意味する。EVEX.b==1は、SRC2がメモリのとき、埋め込みブロードキャストを構成する。パラメータ「h」は、そのグループ長である。様々なパラメータを、16進法(例えば、0x5555555555555555UL)で示し、マイクロアーキテクチャマスクを表す。記号「|」は、論理和を表し、記号「&」は、論理積を表し、「<<2」は、2ビット左シフトを表し、「>>4」は、4ビット右シフトを表す。この疑似コードは、任意のビット群交換動作を反映するものではなく、こうしたビット群の交換処理を組み入れる別の実施態様が想定される。
VPREVCROSSQ DEST, SRCl, SRC2, IMM8 (EVEX 復号化バージョン)
これらは、好適な命令の実施形態のほんの数例にすぎないことが理解されよう。他の実施形態によっては、使用するグループサイズを上下させることができる。一代替実施形態では、図示したグループサイズのサブセットか、1つの1ビット、2ビット、4ビット、8ビット、16ビットまたは32ビットのグループサイズから選択した1つのグループサイズかのいずれかを使用できる。他の実施形態では、交互のパターンに対して固定された手法(例えば、imm8[7]ではなく)を使用することができる。実施形態によっては、より狭い(例えば、64ビット)か、より広い(例えば、1024ビット)か、または別のサイズのパックデータオペランドを使用することができる。代替実施形態では、他の記憶位置(例えば、メモリ位置)をオペランド用に使用することができる。他の実施形態では、必要に応じてマスキング/プレディケーションを省くことができる。実施形態によっては必要に応じてデータ要素ブロードキャストを省くことができる。
図8は、ビット群インターリーブ命令802の一実施形態を示すブロック図である。この命令は、処理コードすなわちオペコード880を含むフォーマットである。このオペコードは、その命令および/または実行すべき処理(例えば、ビット群インターリーブ処理)を識別するよう動作可能な複数のビットまたは1つ以上のフィールドでよい。
この命令フォーマットは、第1のソースオペランドの記憶に使用するレジスタ、メモリ位置または他の記憶位置を明示的に指定するための第1のソースオペランド指定子881、第2のソースオペランドの記憶に使用するレジスタまたは他の記憶位置を明示的に指定するための第2のソースオペランド指定子882、および結果オペランドを記憶する宛先として使用するレジスタまたは他の記憶位置を明示的に指定するための宛先指定子883を含む。例えば、これらの指定子のそれぞれは、1組のビットまたは1つ以上のフィールドを含んで、レジスタ、メモリ位置、または他の記憶位置のアドレスを明示的に指定することができる。あるいは、これらの各記憶位置に対して明示的な指定子を備える命令の代わりに、この命令は、1つ以上のソースオペランドとその結果オペランドについて、1つ以上の暗黙の記憶位置(例えば、命令のオペコードに対して暗黙のレジスタ)を適宜備えることができる。例えば、ソースオペランドまたは結果オペランドに所定の固定レジスタを使用することを命令オペコードに暗黙にして、所定の固定レジスタを明示的に指定しなくてもよいようにできる。他の例として、ソースオペランド、続いてその結果オペランドに(例えば、暗黙のソース/宛先レジスタ)にレジスタまたは他の記憶位置(例えば、一度明示的に指定されたもの)を再使用することを暗黙にしてもよい。
幾つかの実施形態によっては、命令フォーマットが、任意のパックデータ演算マスク指定子884を含むことで、パックデータ演算マスク(例えば、パックデータ演算マスクレジスタ)を明示的に指定することができる。あるいは、このパックデータ演算マスクを示すことができる。幾つかの実施形態によっては、このパックデータ演算マスクレジスタが、ソースオペランドおよび結果オペランド(例えば、専用マスクセットまたはプレディケーションレジスタセット)に使用されるものとは別の1組のレジスタのうちの1つであってもよい。幾つかの実施形態によっては、この命令フォーマットが、また、任意の種類のマスキング処理指定子885を含むことで、マスキング処理の種類を指定することができる。例えば、この種のマスキング動作指定子は、マージマスキングを実行するのかゼロイングマスキングを実行するのかを指定する単一ビットを含むことができる。あるいは、マスキング処理の種類を示すことができる(例えば、暗黙の制御レジスタで、命令のオペコードに対して暗黙にする)。マスキングは、任意であり必須ではない。
データ要素ブロードキャストを使用する実施形態では、命令が、この命令に適宜、データ要素ブロードキャスト制御886を備えることができる。データ要素ブロードキャスト制御は、1つ以上のビットまたはフィールドを備えることで、命令/処理により使用される複数のソースデータ要素(例えば一時レジスタ内)に対し、記憶位置(例えば、メモリ位置)からアクセスされる単一ソースデータ要素をブロードキャスト送信するためにデータ要素ブロードキャストが実行されることを示すことができる。あるいは、データ要素ブロードキャストを、明示的に指定できる状態ではなく、命令に暗黙(例えば、オペコードに暗黙)にすることができる。上述の通り、データ要素ブロードキャストは、任意であり必須ではない。
ただしこれは好適なビット群インターリーブ命令の一例にすぎないあることが理解されよう。代替実施形態によっては、例示のフィールド/指定子のサブセットを含む、更なるフィールド/指定子を追加する、特定のフィールド/指定子を重ねることなどができる。さらに、このフィールド/指定子は例示通りの順序および配置である必要はない。フィールド/指定子は、様々に再配置することができる。さらに、フィールド/指定子は、連続ビット配列を含む必要はなく、むしろ、不連続または離れたビットを含んでもよい。幾つかの実施形態によっては、この命令フォーマットは、VEX符号化、EVEX符号化、または命令フォーマットを有することができる。ただし、本発明の範囲はこれに限定されるものではない。VEXおよびEVEXの符号化およびフォーマットについては、下記で詳述する。
本明細書で開示するビット群インターリーブ命令は、汎用命令であり、多様な、および/または一般的な目的に使用することができる。幾つかの実施形態によっては、ビット群インターリーブ命令を、例えば定位置のビットの転置を使用して、行列転置(例えば、64ビット×64ビット行列を変換すること)に任意に使用することができる。典型的には、この転置をブロック転置により実施することができる。複数のブロック転置工程を順次それぞれの工程を異なるサイズのビット群で実行することができる(例えば、最初に16ビット群、次いで8ビット群、その後4ビット群)。幾つかの実施形態によっては、2つ以上の64ビット×64ビット行列の2列以上からのビット群(例えば、全て同じソースパックデータオペランドに含まれる、第1の行列の列0、第2の行列の列0、任意で第3の行列の列0、任意で第4の行列の列0)を含むソースパックデータオペランドを、ビット群インターリーブ命令が示す、かつ/またはビット群インターリーブ命令をそのオペランドへの処理に使用することができる。他の実施形態によっては、1つの64ビット×64ビット行列の2列以上からのビット群(例えば、全て同じソースパックデータオペランドに含まれる、第1の行列の列0、第1の行列の列1、任意で第1の行列の列2、任意で第1の行列の列3)を含むソースパックデータオペランドを、ビット群インターリーブ命令が示す、かつ/またはビット群インターリーブ命令をそのオペランドへの処理に使用することができる。あるいは、このビット群インターリーブ命令を、例えば、一般的なビット反転処理および/またはグループ化した2の累乗型のビットを反転することなどの他の目的に必要に応じて使用することができる。これらは、ほんの一例にすぎない。
図9は、1組の好適なパックデータレジスタ908の例示的な一実施形態を示すブロック図である。このパックデータレジスタは、ZMM0〜ZMM31のラベルを付けた32個の512ビットのパックデータレジスタを含む。図示の実施形態では、低位16個のレジスタ、すなわちZMM0〜ZMM15の下位256ビットがエイリアスされるか、またはYMM0〜YMM15のラベルを付けた256ビットパックデータレジスタそれぞれに重ね合わせられる。ただし、これは必須ではない。同様に、図示の実施形態では、レジスタYMM0〜YMM15の下位128ビットがエイリアスされるか、XMM0〜XMM15のラベルを付けた128ビットパックデータレジスタそれぞれに重ね合わせられるが、これも必須ではない。512ビットのレジスタZMM0〜ZMM31は、512ビットのパックデータ、256ビットのパックデータまたは128ビットのパックデータを保持するよう動作可能である。256ビットのレジスタYMM0〜YMM15は、256ビットのパックデータまたは128ビットのパックデータを保持するよう動作可能である。128ビットのレジスタXMM0〜XMM15は、128ビットのパックデータを保持するよう動作可能である。幾つかの実施形態によっては、レジスタそれぞれをパック浮動小数点データまたはパック整数データのどちらかの記憶に使用可能である。少なくとも8ビットバイトデータ、16ビットワードデータ、32ビットダブルワード、32ビット単精度浮動小数点データ、64ビットクワッドワードおよび64ビット倍精度浮動小数点データを含む種々のデータ要素のサイズがサポートされる。代替の実施形態によっては、異なる数のレジスタおよび/または異なるサイズのレジスタを使用することができる。さらに別の実施形態によっては、レジスタは小さいレジスタに対してそれより大きいレジスタのエイリアシングを使用してもしなくてもよく、かつ/またはレジスタを浮動小数点データの記憶に使用してもしなくてもよい。
図10は、1組の好適なパックデータ演算マスクレジスタ1024の例示的な一実施形態を示すブロック図である。図示の実施形態では、この組は、k0〜k7のラベルを付けた8個のレジスタを備える。代替の実施形態によっては、8個よりレジスタが少なくても(例えば、2個、4個、6個など)、8個より多くてもよい(例えば、16個、32個など)。これらのレジスタそれぞれをパックデータ演算マスクの記憶に使用することができる。図示の実施形態では、レジスタのそれぞれが64ビットである。代替の実施形態によっては、このレジスタの幅を64ビットより広くしても(例えば、80ビット、128ビットなど)、64ビットより狭くしてもよい(例えば、8ビット、16ビット、32ビットなど)。これらのレジスタは、既知の技術を用いて様々な方法で実装することができるものであり、既知の特定の種類の回路に限定されるものではない。適切な種類のレジスタの例として、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられた物理レジスタ、およびこの組み合わせが挙げられるが、これに限定されない。
幾つかの実施形態によっては、このパックデータ演算マスクレジスタ1024が1組の独立した専用のアーキテクチャレジスタであってもよい。幾つかの実施形態によっては、これらの命令は、他の種のレジスタ(例えば、パックデータレジスタ)の符号化や指定に使用されるものとは異なる、命令フォーマットの複数ビットまたは1つ以上のフィールドのパックデータ演算マスクレジスタを符号化または指定することができる。例えば、ある命令は、3個のビット(例えば、3ビットフィールド)を使用して、8個のパックデータ演算マスクレジスタk0〜k7のいずれか1つを符号化または指定できる。代替の実施形態によっては、パックデータ演算マスクレジスタの数が上下するときは、それに対応して増減した数のビットを使用することも可能である。1つの具体的な実装では、パックデータ演算マスクレジスタk1〜k7のみ(k0は含まず)をプレディケートオペランドとしてアドレス指定して、マスク付パックデータ処理をプレディケートすることができる。レジスタk0を、通常のソースまたは宛先として使用してもよいが、プレディケートオペランドとして符号化しなくともよい(例えば、k0を指定する場合、「マスクなし」(no mask)符号になる)。ただし、これは必須ではない。
1つの命令のセットは、1つ以上の命令フォーマットを備える。1つの命令フォーマットが与えられると、これにより様々なフィールド(ビット数、ビット位置)が規定され、これにより特に、実行すべき演算(オペコード)とその演算を実行するオペランド(単数または複数)が指定される。命令フォーマットのなかには、命令テンプレート(またはサブフォーマット)の規定を介してさらに分解されるものがある。例えば、ある命令フォーマットが含む複数の命令テンプレートを、その命令フォーマットのフィールドの別々のサブセット(含まれるフィールドは一般に同一順であるが、含まれるフィールドの数が少ないために少なくとも一部ではビット位置が異なる)を持つように、かつ/または別の解釈をされる1つの所定フィールドを持つように規定することもある。このように、ISA(命令セットアーキテクチャ)の命令それぞれは、所定の命令フォーマットを用いて(また、規定されていれば、その命令フォーマットが含む複数の命令テンプレートの1つに)表され、演算およびそのオペランドを指定するフィールドを含む。例えば、例示的なADD命令は、特定のオペコードと、そのオペコードを指定するオペコードフィールドと、オペランド(ソース1/宛先およびソース2)を選択するオペランドフィールドとを含む命令フォーマットとを有する。そして、命令ストリームにこのADD命令が発生すると、特定のオペランドを選択するオペランドフィールドに特定のコンテンツが入る。Advanved Vector Extension (AVX)(AVX1 and AVX2)と呼ばれ、Vector Extensions(VEX)符号化方式を使用するSIMD拡張命令セットが、これまですでに存在しており、リリースおよび/または公開されている(例えば、2011年10月のIntel(商標登録)64およびIA−32 Architectures Software Develpers Manualおよび2011年6月のIntel(商標登録)Advanved Vector Extensions Programming Reference参照)。
例示的命令フォーマット
本明細書に記載するこの命令(単数または複数)の実施形態を様々なフォーマットで実現することができる。さらに、例示的なシステム、アーキテクチャおよびパイプラインを以下に詳述する。本明細書による命令(単数または複数)の実施形態はこうしたシステム、アーキテクチャおよびパイプラインで実行可能であるが、これらの例に限定されるものではない。
VEX命令フォーマット
VEX符号化方式により、命令に2つ以上のオペランドを持たせ、SIMDベクトルレジスタを128ビットより長くすることが可能になる。VEXプリフィックスを使用することにより3オペランド(または4以上)シンタックスを提供できる。例えば、以前の2オペランド命令では、ソースオペランドを上書きするA=A+Bなどの演算を実行していた。VEXプリフィックスを使用すると、オペランドにA=B+Cなどの非破壊的演算の実行が可能となる。
図11Aは、VEXプリフィックス1102、実オペコードフィールド1130、Mod M/Rバイト1140、SIBバイト1150、変位フィールド1162およびIMM8 1172を備える例示的なAVX命令フォーマットを示す。図11Bは、図11Aのどのフィールドが、オペコードフィールド全体1174およびベース演算フィールド1142を構成するかを示す。図11Cは、図11Aのどのフィールドが、レジスタインデックスフィールド1144を構成するかを示す。
VEXプリフィックス(バイト0〜2)1102は3バイト形式で符号化される。第1のバイトは、フォーマットフィールド1140(VEXバイト0、ビット[7:0])であり、明示的C4バイト値(C4命令フォーマットを区別するために使用される固有値)を持つ。第2および第3のバイト(VEXバイト1〜2)は、特定の機能を提供する複数のビットフィールドを備える。具体的には、REXフィールド1105(VEXバイト1、ビット[7−5])は、VEX.Rビットフィールド(VEXバイト1、ビット[7]−R)、VEX.Xビットフィールド(VEXバイト1、ビット[6]−X)およびVEX.Bビットフィールド(VEXバイト1、ビット[5]−B)からなる。この命令の他のフィールドは、同業者に既知であるように、レジスタインデックスの下位3ビット(RRR、XXX、およびBBB)を符号化し、これにVEX.R、VEX.XおよびVEX.Bを加えて、Rrrr、Xxxx、およびBbbbを形成できるようにする。オペコードマップフィールド1115(VEXバイト1、ビット[4:0]−mmmmm)は、暗黙の先頭オペコードバイトを符号化するコンテンツを備える。Wフィールド1164(VEXバイト2、ビット[7]−W)は表記VEX.Wで表され、この命令に応じて異なる機能を提供する。VEX.vvvv1120(VEXバイト2、ビット[6:3]−vvvv)の役割として、以下を挙げることができる。1)反転した形式(1の補数)で指定される第1のソースレジスタオペランドを符号化し、2つ以上のソースオペランドを有する命令に有効である、2)所定のベクトルシフト用に1の補数の形式で指定される宛先レジスタオペランドを符号化する、または3)いずれのオペランドも符号化しない。ただし、このフィールドは確保されて、1111bを含む。VEX.L1168サイズフィールド(VEXバイト2、ビット[2]−L)=0の場合、これは128ビットベクトルを示し、VEX.L=1の場合、256ビットベクトルを示す。プリフィックス符号化フィールド1125(VEXバイト2、ビット[1:0]−pp)は、ベース演算フィールドに追加のビットを提供する。
実オペコードフィールド1130(バイト3)もオペコードバイトとして知られている。オペコードの一部をこのフィールドで指定する。
MOD R/Mフィールド1140(バイト4)は、MODフィールド1142(ビット[7−6]、Regフィールド1144(ビット[5ー3])およびR/Mフィールド1146(ビット[2ー0])を含む。Regフィールド1144の役割として、宛先レジスタオペランドまたはソースレジスタオペランド(Rrrrのrrr)のいずれかを符号化すること、またはオペコード拡張として扱われ、いずれの命令オペランドの符号化にも使用されないことを挙げられる。R/Mフィールド1146の役割として、メモリアドレスを参照する命令オペランドを符号化すること、または宛先レジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化することを挙げられる。
スケール、インデックス、ベース(SIB)−スケールフィールド1150(バイト5)のコンテンツは、メモリアドレス生成に使用されるSSI152(ビット[7−6])を含む。SIB.xxx1154(ビット[5ー3])およびSIB.bbb1156(ビット[2ー0])のコンテンツは、レジスタインデックスXxxxおよびBbbbに関連して既に述べた。
変位フィールド1162および即値フィールド(IMM8)1172は、アドレスデータを含む。
汎用ベクトルフレンドリ命令フォーマット
ベクトルフレンドリ命令フォーマットは、ベクトル命令(例えば、ベクトル演算に特化した所定のフィールドがある)に好適な命令フォーマットである。ベクトル演算およびスカラ演算の両方を、ベクトルフレンドリ命令フォーマットを介してサポートする実施形態を説明するが、代替として、ベクトルフレンドリ命令フォーマットによりベクトル演算のみを用いる実施形態もある。
図12Aおよび図12Bは、本発明の実施形態による汎用ベクトルフレンドリ命令フォーマットおよびその命令テンプレートを図示するブロック図である。図12Aは、本発明の実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスA命令テンプレートを図示するブロック図であり、図12Bは、本発明の実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスB命令テンプレートを図示するブロック図である。具体的には、汎用ベクトルフレンドリ命令フォーマット1200について、クラスAおよびクラスB命令テンプレートが規定され、その両方が非メモリアクセス1205の命令テンプレートおよびメモリアクセス1220の命令テンプレートを含む。ベクトルフレンドリ命令フォーマットについて用いる用語「汎用」は、いずれの特定の命令セットにも紐付けされない命令フォーマットを指す。
ベクトルフレンドリ命令フォーマットが、32ビット(4バイト)または64ビット(8バイト)データ要素幅(すなわちサイズ)を備える64バイトベクトルオペランド長(すなわちサイズ)(したがって、16ダブルワードサイズ要素または代わりに8クアッドワードサイズ要素からなる64バイトベクトル)と、16ビット(2バイト)または8ビット(1バイト)データ要素幅(すなわちサイズ)を備える64バイトベクトルオペランド長(すなわちサイズ)と、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)データ要素幅(すなわちサイズ)を備える32バイトベクトルオペランド長(すなわちサイズ)と、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)データ要素幅(すなわちサイズ)を備える16バイトベクトルオペランド長(すなわちサイズ)とをサポートする本発明の実施形態を説明していくが、別の実施形態では、上記値から上下したまたは別のデータ要素幅(例えば、128ビット(16バイト)データ要素幅)を備えた、やはり上記値から上下したおよび/または別のベクトルオペランドサイズ(例えば、256バイトベクトルオペランド)のサポートも可能である。
図12AのクラスA命令テンプレートは、1)非メモリアクセス1205の命令テンプレート内に示す、非メモリアクセス完全丸め制御型演算1210の命令テンプレート、および非メモリアクセスデータ変換型演算1215の命令テンプレートと、2)メモリアクセス1220命令テンプレート内に示す、メモリアクセス一時的1225の命令テンプレート、およびメモリアクセス非一時的1230の命令テンプレートとを含む。図12BのクラスB命令テンプレートは、1)非メモリアクセス1205の命令テンプレート内に示す、非メモリアクセス書き込みマスク制御部分丸め制御型演算1212命令テンプレート、および非メモリアクセス書き込みマスク制御vsize型演算1217の命令テンプレートと、2)メモリアクセス1220の命令テンプレート内に示す、メモリアクセス書き込みマスク制御1227の命令テンプレートとを含む。
汎用ベクトルフレンドリ命令フォーマット1200は、図12A〜12Bに図示する順序で以下に列記するフィールドを含む。
フォーマットフィールド1240−このフィールドの特定の値(命令フォーマット識別子値)は、ベクトルフレンドリ命令フォーマットを、そしてこれにより、命令ストリームにおけるベクトルフレンドリ命令フォーマット中の命令の発生を一意に識別する。したがって、このフィールドは、汎用ベクトルフレンドリ命令フォーマットのみを有する命令セットには必要ないという意味で任意である。
ベース演算フィールド1242−このコンテンツは、種々のベース演算を区別する。
レジスタインデックスフィールド1244−このコンテンツは、直接またはアドレス生成を介して、レジスタ内であれメモリ内であれ、ソースおよび宛先オペランドの位置を指定する。これらは、P×Q(例えば、32×512、16×128、32×1024、64×1024)のレジスタファイルからN個のレジスタを選択するのに十分なビット数を含む。一実施形態では、Nは3つ以下のソースと1つの宛先レジスタとすることができるが、代替実施形態によっては、サポートするソースおよび宛先レジスタの数は変更可能である(例えば、2つまでのソースをサポートして、これらのソースの1つを宛先としても機能させる、3つまでのソースをサポートして、これらのソースの1つが宛先としても機能してもよく、2つまでのソースと1つの宛先をサポートすることも可能である)。
修飾子フィールド1246−このコンテンツは、メモリアクセスを特定する汎用ベクトル命令フォーマット内の命令の発生をメモリアクセスを指定しない命令の発生から区別する。すなわち、非メモリアクセス1205命令テンプレートとメモリアクセス1220命令テンプレートとの間を区別する。メモリアクセス演算は、メモリ階層への読み出しおよび/または書き込みを行う(場合によっては、レジスタ内の値を使用してソースおよび/または宛先アドレスを指定する)が、非メモリアクセス演算はこれをしない(例えば、そのソースおよび宛先はレジスタである)。また、一実施形態において、このフィールドは、メモリアドレス計算を実行するために3つの別々の方法から選択をするが、代替実施形態によっては、メモリアドレス計算の実行に3つ前後のまたは別の数の方法をサポートしてもよい。
オーグメンテーション演算フィールド1250−このコンテンツは、ベース演算に加えて様々な異なる演算のどの1つが実行されるかを区別する。このフィールドは、文脈特有のものである。本発明の一実施形態では、このフィールドを、クラスフィールド1268、アルファフィールド1252、およびベータフィールド1254に分ける。このオーグメンテーション演算フィールド1250を設けることで、共通グループの複数演算を2つ、3つ、または4つの命令ではなく1つの命令で実行することができる。
スケールフィールド1260−このコンテンツは、メモリアドレス生成のための(例えば、2スケール*インデックス+ベースを使用するアドレス生成のため)インデックスフィールドのコンテンツのスケーリングを可能にする。
変位フィールド1262A−このコンテンツは、メモリアドレス生成(例えば、2スケール*インデックス+ベース+変位を使用するアドレス生成のため)の一部として使用される。
変位因子フィールド1262B(尚、変位フィールド1262Aが変位因子フィールド1262Bの真上に位置させることで、いずれか一方が使用されることを示している)−このコンテンツは、アドレス生成の一部として(例えば、2スケール*インデックス+ベース+スケーリングされた変位を使用するアドレス生成のため)使用される。これはメモリアクセスのサイズ(N)によりスケーリングされる変位因子を指定する。このNは、メモリアクセス内のバイト数である。冗長な下位ビットを無視し、したがって、実効アドレスの算出に使用する最終変位を生成するために変位因子フィールドコンテンツに、メモリオペランド総サイズ(N)を乗算する。N値は、完全オペコードフィールド1274(本明細書で後述)およびデータ操作フィールド1254Cに基づいて実行時にプロセッサハードウェアにより決定する。変位フィールド1262Aおよび変位因子フィールド1262Bは、非メモリアクセス1205命令テンプレート用には使用されない、かつ/または、別の実施形態では2つのうち1つだけを実装しても、いずれも実装しなくてもよいという意味で任意である。
データ要素幅フィールド1264−このコンテンツは、複数のデータ要素幅のうちどれが使用されるかを区別する(幾つかの実施形態によってはすべての命令について、別の実施形態によっては、命令の一部のみについて)。ただしこのフィールドは、1つのデータ要素幅のみをサポートする、および/または複数のデータ要素幅をオペコードの何らかの態様を使用してサポートする場合は必要でないという意味では任意である。
書き込みマスクフィールド1270−このコンテンツは、データ要素位置毎に、そのデータ要素位置が宛先ベクトルオペランド内でベースオペランドおよびオーグメンテーション操作の結果を反映するかどうかを制御する。クラスA命令テンプレートはマージ書き込みマスキングをサポートし、クラスB命令テンプレートは、マージ書き込みマスキングおよびゼロイングマスキング−書き込みマスキングの両方をサポートする。マージ時、ベクトルマスクがあれば、宛先に含まれる要素の任意のセットをいずれの演算(ベース演算およびオーグメンテーション演算により指定される)の実行中にも更新されないように保護できる。他の一実施形態では、対応マスクビットが0を有する宛先の要素それぞれの古い値を保持しておくことができる。対照的に、ゼロイングする時、ベクトルマスクは、宛先に含まれる要素の任意のセットをいずれの演算(ベース演算およびオーグメンテーション演算により指定される)の実行中にもゼロにすることができる。したがって一実施形態では、マスクビットが0の値を有するとき、その対応宛先の要素は0に設定される。この機能のサブセットは、実行中の演算のベクトル長(最初から最後まで、修正されている要素の長さ)を制御する性能であるが、変更対象となる要素が連続している必要はない。したがって、書き込みマスクフィールド1270により、ロード、記憶、計算、論理などを含む部分ベクトル演算が可能となる。本発明に記載の実施形態では、書き込みマスクフィールド1270のコンテンツが、使用すべき書き込みマスクを含む複数の書き込みマスクレジスタのうちの1つを選択する(したがい、書き込みマスクフィールド1270のコンテンツが実行されるマスキングを間接的に指定する)が、代替実施形態によっては、その代わりにまたはそれに加えて、書き込みマスクフィールド1270のコンテンツが、実行対象であるマスキングを直接指定することが可能である。
即値フィールド1272−このコンテンツで即値の指定が可能になる。このフィールドは、即値をサポートしない汎用ベクトルフレンドリフォーマットの実装には含まれず、即値を使用しない命令にも含まれないという意味で任意である。
クラスフィールド1268−このコンテンツは、命令の異なるクラスを区別する。図12Aおよび図12Bを参照すると、このフィールドのコンテンツは、クラスAとクラスBとの間を選択する。図12Aおよび図12Bでは、角丸方形を使用して特定の値が各フィールドに存在することを示している(例えば、クラスフィールド1268に対して図12AのクラスAの1268Aおよび図12BのクラスBの1268B)。
クラスAの命令テンプレート
クラスAの非メモリアクセス1205命令テンプレートの場合、アルファフィールド1252はRSフィールド1252Aとして解釈され、そのコンテンツは、種々のオーグメンテーション演算型のうちどれが実行されるかを区別し(例えば、丸め1252A.1は非メモリアクセス丸め型演算1210に対して指定され、データ変換1252A.2は非メモリアクセスデータ変換型演算1215命令テンプレートに対して指定される)、ベータフィールド1254は、指定された型の演算のうちどれが実行されるかを区別する。非メモリアクセス1205命令テンプレートに、スケールフィールド1260、変位フィールド1262Aおよび変位スケールフィールド1262Bは含まれない。
非メモリアクセス命令テンプレート−完全丸め制御型演算 非メモリアクセス完全丸め制御型演算1210命令テンプレートでは、ベータフィールド1254は、丸め制御フィールド1254Aとして解釈され、そのコンテンツ(単数または複数)で静的丸めを提供する。本発明に記載の実施形態では、丸め制御フィールド1254Aが、全浮動小数点例外抑制(SAE)フィールド1256および丸め演算制御フィールド1258を含むが、代替実施形態によっては、これらの概念の両方をサポートして同じフィールドに符号化する、または、これらの概念/フィールドの一方または他方のみを有することができる(例えば、丸め演算制御フィールド1258のみを有してもよい)。
SAEフィールド1256−このコンテンツは、例外イベント報告を無効化するかしないかを区別する。したがって、抑制が有効化されていることをSAEフィールド1256のコンテンツが示す場合、所定の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外ハンドラも立ち上げない。
丸め演算制御フィールド1258−このコンテンツは、丸め演算群(例えば、切り上げ、切り下げ、0への丸め、最近接丸め)のうちどれを実行するかを区別する。したがって、この丸め演算制御フィールド1258により、命令単位での丸めモード変更が可能になる。丸めモードを指定するために制御レジスタをプロセッサが含む本発明の一実施形態では、この丸め演算制御フィールド1250のコンテンツが、そのレジスタの値をオーバーライドする。
非メモリアクセス命令テンプレート−データ変換型演算 非メモリアクセスデータ変換型演算1215命令テンプレートでは、ベータフィールド1254はデータ変換フィールド1254Bとして解釈され、そのコンテンツは、複数のデータ変換のうちどれが実行されるかを区別する(例えば、データ変換なし、スウィズル、ブロードキャスト)。
クラスAのメモリアクセス1220命令テンプレートの場合、アルファフィールド1252はエビクションヒントフィールド1252Bとして解釈され、そのコンテンツは、エビクションヒントのうちいずれが使用されるかを区別し(図12Aでは、一時的1252B.1をメモリアクセス一時的1225命令テンプレートに対して指定し、非一時的1252B.2をメモリアクセス非一時的1230命令テンプレートに対して指定する)、ベータフィールド1254はデータ操作フィールド1254Cとして解釈され、そのコンテンツは、複数のデータ操作演算(プリミティブとしても知られる)のうちのどれが実行されるかを区別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、および宛先のダウンコンバージョン)。メモリアクセス1220命令テンプレートは、スケールフィールド1260および、必要に応じて変位フィールド1262Aまたは変位スケールフィールド1262Bを含む。
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素ごとの方法でメモリから、またメモリへとデータを転送する。実際に転送される要素に関しては、書き込みマスクとして選択されるベクトルマスクのコンテンツによって規定される。
メモリアクセス命令テンプレート−一時的 一時的データは、キャッシュが有利となるレベルですぐに再利用される可能性が高いデータである。しかし、これはヒントであり、このヒントを完全に無視することも含めて、プロセッサが異なれば、異なる方法でこれを実装することは可能である。
メモリアクセス命令テンプレート−非一時的 非一時的データは、1次レベルキャッシャでキャッシュすることが有利であるほどにはすぐに再利用される可能性が低いデータで、優先的にエビクションされるべきである。しかし、これはヒントであり、このヒントを完全に無視することも含めて、プロセッサが異なれば、異なる方法でこれを実装することは可能である。
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファフィールド1252は書き込みマスク制御(Z)フィールド1252Cとして解釈され、そのコンテンツは、書き込みマスクフィールド1270によって制御される書き込みマスキングがマージまたはゼロイングのいずれかであるべきかを区別する。
クラスBの非メモリアクセス1205命令テンプレートの場合、ベータフィールド1254の一部はRLフィールド1257Aとして解釈され、そのコンテンツは、複数のオーグメンテーション演算型のうちどれが実行されるかを区別し(例えば、丸め1257A.1を非メモリアクセス書き込みマスク制御部分丸め制御型演算1212命令テンプレートに対して指定し、ベクトル長(VSIZE)1257A.2を非メモリアクセス書き込みマスク制御VSIZE型演算1217命令テンプレートに対して指定する)、ベータフィールド1254の他の部分は、その指定された型の演算のどれが実行されるかを区別する。非メモリアクセス1205命令テンプレートに、スケールフィールド1260、変位フィールド1262Aおよび変位スケールフィールド1262Bは含まれない。
非メモリアクセス書き込みマスク制御部分丸め制御型演算1210命令テンプレートでは、ベータフィールド1254の他の部分は丸め演算フィールド1259Aとして解釈され、例外イベント報告は無効化される(所定の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外ハンドラも立ち上げない)。
丸め演算制御フィールド1259A−丸め演算制御フィールド1258と同様に、このコンテンツは、丸め演算群(例えば、切り上げ、切り下げ、0への丸め、最近接丸め)のうちどれを実行するかを区別する。したがって、この丸め演算制御フィールド1259Aにより、命令単位での丸めモード変更が可能になる。プロセッサが丸めモードを指定するために制御レジスタを含む本発明の一実施形態では、この丸め演算制御フィールド1250のコンテンツが、そのレジスタの値をオーバーライドする。
非メモリアクセス書き込みマスク制御VSIZE型演算1217命令テンプレートでは、ベータフィールド1254の他の部分はベクトル長フィールド1259Bとして解釈され、そのコンテンツは、複数のデータベクトル長のうちどれ(例えば、128、256、または512バイト)で実行されるかを区別する。
クラスBメモリアクセス1220命令テンプレートの場合、ベータフィールド1254の一部はブロードキャストフィールド1257Bとして解釈され、そのコンテンツは、ブロードキャスト型データ操作演算が実行されるかを区別するが、ベータフィールド1254の他の部分はベクトル長フィールド1259Bとして解釈される。メモリアクセス1220命令テンプレートに、スケールフィールド1260、および必要に応じて変位フィールド1262Aまたは変位スケールフィールド1262Bが含まれる。
汎用ベクトルフレンドリ命令フォーマット1200に関しては、フォーマットフィールド1240、ベース演算フィールド1242およびデータ要素幅フィールド1264を含むものとして、完全オペコードフィールド1274を示している。完全オペコードフィールド1274がこれらのフィールドすべてを含む一実施形態が示されているが、これらのフィールドすべてをサポートするわけではない実施形態では、完全オペコードフィールド1274が含むフィールドは少なくなる。完全オペコードフィールド1274は演算コード(オペコード)を提供する。
オーグメンテーション演算フィールド1250、データ要素幅フィールド1264および書き込みマスクフィールド1270を設けることにより、これらの特徴を命令単位で、汎用ベクトルフレンドリ命令フォーマットで指定することが可能とする。
書き込みマスクフィールドとデータ要素幅フィールドを組み合わせることにより、異なるデータ要素幅に基づいてマスクを適用できるタイプ別命令を生成することができる。
クラスAおよびクラスB内に見られる様々な命令テンプレートは様々な状況で有益である。本発明の幾つかの実施形態では、1つのプロセッサ内の異なるプロセッサまたは異なるコアによって、クラスAのみ、クラスBのみ、または両方をサポートすることができる。例えば、汎用コンピューティング向け高性能汎用アウトオブオーダコアはクラスBのみをサポート、主としてグラフィックスおよび/または科学的(スループット)コンピューティング向けのコアはクラスAのみをサポート、両方向けのコアは両方をサポートすることができる(もちろん、両方のクラスのテンプレートおよび命令のすべてではなくともその一部を併せて有するコアは本発明の範囲である)。また、1つのプロセッサが複数のコアを有し、そのすべてが同じクラスをサポートしても、コアが異なればサポートするクラスも異なるというようにしてもよい。例えば、複数のグラフィックスおよび汎用コアを別々に備える1つのプロセッサの中で、主としてグラフィックスおよび/または科学的コンピューティング向けのグラフィックスコアの1つにクラスAのみをサポートさせ、汎用コアの1つ以上を、アウトオブオーダ実行および汎用コンピューティング向けのレジスタリネーミングを備える高性能汎用コアとして、クラスBのみをサポートさせてもよい。独立したグラフィックスコアを持たない別のプロセッサは、クラスAとクラスBの両方をサポートする1つ以上の汎用インオーダ型またはアウトオブオーダコアを含んでもよい。もちろん、本発明の別の実施形態では、あるクラスからの特徴を他のクラスに実装させることもできる。高レベル言語で書かれたプログラムが、様々な異なる実行可能フォームに入力(例えば、ジャストインタイムコンパイルまたは静的コンパイル)される。そのフォームの例として1)実行用にターゲットプロセッサによりサポートされる1つ以上のクラスの命令のみを有するフォーム、または2)すべてのクラスの命令の複数の組み合わせを用いて書かれた代替ルーチンと、現在コードを実行しているプロセッサによりサポートされる命令に基づいて実行すべきルーチンを選択する制御フローコードとを有するフォームを挙げることができる。
例示的な専用ベクトルフレンドリ命令フォーマット
図13A、図13B、図13Cおよび図13Dは、本発明の実施形態による、例示的な専用ベクトルフレンドリ命令フォーマットを図示するブロック図である。図13Aは、位置、サイズ、解釈、フィールドの順序、そしてそのフィールドの一部の値を指定するという意味で特化した専用ベクトルフレンドリ命令フォーマット1300を示す。この専用ベクトルフレンドリ命令フォーマット1300を使用して、x86の命令セットを拡張することが可能である。したがって、この実施形態のフィールドの一部は既存のx86命令セットおよびその拡張版(例えばAVX)で使用したものと同様、または同一である。このフォーマットは、拡張した既存のx86命令セットのプリフィックスフィールド、実オペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドと一致したままである。図13A〜図13Dからのフィールドを書き込んだ図12A又は図12Bのフィールドを例示する。
本発明の実施形態を、例示を目的として汎用ベクトルフレンドリ命令フォーマット1200にとの関連で専用ベクトルフレンドリ命令フォーマット1300を参照して説明するが、特許請求の範囲を除き、本発明はこの専用ベクトルフレンドリ命令フォーマット1300に制限されるものではないことを理解されたい。例えば、汎用ベクトルフレンドリ命令フォーマット1200では、様々なフィールドに様々なサイズが可能であるが、専用ベクトルフレンドリ命令フォーマット1300は特定サイズのフィールドを有するものとして示されている。例えば、データ要素幅フィールド1264を、特定のベクトルフレンドリ命令フォーマット1300では1ビットフィールドとして示すが、本発明はこれに限定されるものではない(すなわち、汎用ベクトルフレンドリ命令フォーマット1200はデータ要素幅フィールド1264を他のサイズで含むことができる)。
汎用ベクトルフレンドリ命令フォーマット1200は、図13Aに図示する順序で以下に列記するフィールドを含む。
EVEXプリフィックス(バイト0〜3)1302−これは4バイト形式で符号化される。
フォーマットフィールド1240(EVEXバイト0、ビット[7:0]−第1のバイト(EVEXバイト0)はフォーマットフィールド1240であり、0×62(本発明の一実施形態においてベクトルフレンドリ命令フォーマットを区別するため使用する固有の値)を含む。
第2〜4バイト(EVEXバイト1〜3)は、複数のビットフィールドを含んで特定の機能を提供する。
REXフィールド1305(EVEXバイト1、ビット[7−5])−これは、EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)およびEVEX.Xビットフィールド(EVEXバイト1、ビット[5]−B)からなる。このEVEX.R、EVEX.X、EVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能を提供し、1の補数形式を用いて符号化されるものである。すなわち、ZMM0は1111Bとして符号化され、ZMM15は0000Bとして符号化される。この命令の他のフィールドは、同業者には既知であるように、レジスタインデックスの下位3ビットを符号化し(rrr、xxxおよびbbb)、EVEX.R、EVEX.XおよびEVEX.Bを加えて、Rrrr、Xxxx、およびBbbbを形成することができる。
REX'フィールド1210−これは、REX'フィールド1210の第1の部分であり、拡張された32レジスタセットの上位16個または下位16個の符号化に使用されるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本発明の一実施形態では、以下に示すように他のビットと一緒に、このビットをビット反転フォーマットで記憶して、BOUND命令と(既知のx86 32ビットモードで)区別する。BOUND命令の実オペコードバイトは62であるが、MODフィールドの11の値をMODR/Mフィールドでは受け付けない(以下で説明)。本発明の代替実施形態によっては、このビットおよび下記に示す反転フォーマットによる他方ビットを記憶しない。1の値を下位16個のレジスタの符号化に使用する。言い換えると、EVEX.R'、EVEX.Rおよび他のフィールドの他のRRRを組み合わせて、R'Rrrrを形成する。
オペコードマップフィールド1315(EVEXバイト1、ビット[3:0]−mmmm)−このコンテンツは、暗黙の先頭オペコードバイト(OF、OF38またはOF3)を符号化する。
データ要素幅フィールド1264(EVEXバイト2、ビット[7]−W)−これは表記EVEX.Wで表される。EVEX.Wはデータタイプ(32ビットデータ要素または64ビットデータ要素)の粒度(サイズ)を規定するために使用される。
EVEX.vvvv1320(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割として以下を挙げることができる。1)反転した形式(1の補数)で指定される第1のソースレジスタオペランドを符号化し、2つ以上のソースオペランドを有する命令に有効であること、2)所定のベクトルシフト用に1の補数の形式で指定される宛先レジスタオペランドを符号化すること、または3)いずれのオペランドも符号化しないこと。ただし、このフィールドは確保されて、1111bを含むものとする。したがって、EVEX.vvvvフィールド1320は、反転形式(1の補数)で記憶された第1のソースレジスタ指定子の4つの下位ビットを符号化する。命令に応じて、異なるビットフィールドを追加で使用して、その指定子のサイズを32レジスタに拡張する
EVEX.U1268クラスフィールド(EVEXバイト2、ビット[2]−U)−EVEX.Uは、0であれば、クラスAまたはEVEX.U0を示す。1であれば、クラスBまたはEVEX.U1を示す。
プリフィックス符号化フィールド1325(EVEXバイト2、ビット[1:0]−pp)−これは、ベース演算フィールドの追加のビットとなる。EVEXプリフィックスフォーマットのレガシーSSE命令にサポートを提供することに加えて、これはSIMDプリフィックスの短縮にも有用である(SIMDプリフィックスを表すために1バイトを必要とせず、EVEXプリフィックスは2ビットのみでよい)。一実施形態では、レガシーフォーマットとEVEXプリフィックスフォーマットとの両方で、SIMDプリフィックス(66H、F2H、F3H)を使用するレガシーSSE命令をサポートするため、これらのレガシーSIMDプリフィックスをSIMDプリフィックス符号化フィールドに符号化し、実行時にはデコーダのPLAに提供する前にレガシーSIMDプリフィックスに拡張する(これにより、PLAは変更なしにこれらのレガシー命令のレガシーとEVEXフォーマットの両方を実行することができる)。より新たな命令はEVEXプリフィックス符号化フィールドのコンテンツを直接オペコード拡張として使用できるであろうが、実施形態によっては、一貫性を持たせるために同様の方法で展開させたとしても、この複数のSIMDプリフィックスにより異なる意味を指定すること可能である。別の実施形態では、PLAを再設計して2ビットSIMDプリフィックス符号化をサポートし、これにより、拡張を必要なくすことができる。
アルファフィールド1252(EVEXバイト3、ビット[7]−EH;EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書き込みマスク制御およびEVEX.Nとしても知られる;aとも示される)−これは、上述のように、このフィールドは文脈特有である。
ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2―0、EVEX.r2―0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られる、βββとも示される)は、上述のように、このフィールドはコンテキスト特有である。
REX'フィールド1210−これは、REX'フィールドの残りであり、拡張された32レジスタセットの上位16個または下位16個いずれかを符号化するために使用可能なEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットは、ビット反転フォーマットで記憶される。1の値を用いて下位16個のレジスタを符号化する。言い換えると、EVEX.V、EVEX.vvvvを組み合わせてV'VVVVを形成する。
書き込みマスクフィールド1270(EVEXバイト3、ビット[2:0]−kkk)−このコンテンツは、上述のように、書き込みマスクレジスタ中のレジスタのインデックスを指定する。本発明の一実施形態では、特定値EVEX.kkk=000は、特定の命令に書き込みマスクを使用しないことを含意する特別な振舞を有する(これは、すべて1にハードワイヤードされる書き込みマスクまたはマスキングハードウェアをバイパスするハードウェアを使用することを含む様々な方法で実装できる)。
実オペコードフィールド1330(バイト4)もオペコードバイトとして既知である。オペコードの一部をこのフィールドで指定する。
MOD R/Mフィールド1340(バイト5)は、MODフィールド1342、Regフィールド1344およびR/Mフィールド1346を含む。上述のように、MODフィールドの1342のコンテンツは、メモリアクセス演算と非メモリアクセス演算とを区別する。Regフィールド1344の役割は、2つの状況に要約することができる。つまり、宛先レジスタオペランドまたはソースレジスタオペランドのいずれかを符号化すること、またはオペコード拡張として扱われ、いずれの命令オペランドを符号化するためにも使用されないことである。R/Mフィールド1346の役割としては、メモリアドレスを参照する命令オペランドを符号化すること、または宛先レジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化することを挙げられる。
スケール、インデックス、ベース(SIB)バイト(バイト6)−上述のように、スケールフィールド1250のコンテンツは、メモリアドレス生成に使用される。SIB.xxx1354およびSIB.bbb1356−これらのフィールドのコンテンツは、レジスタインデックスXxxxおよびBbbbに関して言及済みである。
変位フィールド1262A(バイト7〜10)−MODフィールド1342が10を含むとき、バイト7〜10は変位フィールド1262Aであり、レガシー32ビットの変位(disp32)と同じ働きをし、バイト粒度で動作する。
変位因子フィールド1262B(バイト7)−MODフィールド1342が01を含むとき、バイト7は、変位因子フィールド1262Bである。このフィールドの位置は、レガシーx86命令セット8ビット変位(disp8)の位置と同じであり、バイト粒度で動作する。disp8は符号拡張されているので、−128バイトと127バイトの間のオフセットにアドレス指定できるだけであり、64バイトのキャッシュラインに関しては、disp8は真に有用な4つの値−129、−64、0および64のみに設定可能な8ビットを使用する。これより広い範囲が必要なことも多く、この場合はdisp32が使用されるが、disp32は4バイトを必要とする。disp8およびdisp32と対照的に、変位因子フィールド1262Bは、disp8の再解釈である。変位因子フィールド1262Bを使用するとき、実際の変位は、変位因子フィールドのコンテンツにメモリオペランドアクセスのサイズ(N)を乗算することにより決定される。この変位の型をdisp8*Nと呼ぶ。これは、平均命令長(変位に使用される1バイトであるがもっと広い範囲を有する)を短くする。こうした圧縮された変位は、有効変位がメモリアクセスの粒度の倍数であり、よって、アドレスオフセットの冗長下位ビットは符号化される必要がないという想定に基づいている。言い換えると、変位因子フィールド1262Bは、レガシーx86命令セットの8ビット変位の代わりになる。したがい、変位因子フィールド1262Bは、disp8がdisp8*Nにオーバーロードされるという点以外は、x86命令セットの8ビット変位と同じように符号化される(つまり、ModRM/SIB符号化規則は変更がない)。つまり、符号化規則または符号化長には変更がなく、ハードウェアによる変位値の解釈にのみ変更がある(ハードウェアはメモリオペランドのサイズにより変位をスケーリングしてバイト毎のアドレスオフセットを得る必要がある)。
即値フィールド1272は上述のように機能する。
完全オペコードフィールド
図13Bは、本発明の一実施形態による、完全オペコードフィールド1274を構成する専用ベクトルフレンドリ命令フォーマット1300のフィールドを図示するブロック図である。具体的には、完全オペコードフィールド1274は、フォーマットフィールド1240、ベース演算フィールド1242およびデータ要素幅(W)フィールド1264を含む。このベース演算フィールド1242は、プリフィックス符号化フィールド1325、オペコードマップフィールド1315および実オペコードフィールド1330を含む。
レジスタインデックスフィールド
図13Cは、本発明の一実施形態による、レジスタインデックスフィールド1244を構成する専用ベクトルフレンドリ命令フォーマット1300のフィールドを図示するブロック図である。具体的には、レジスタインデックスフィールド1244は、REXフィールド1305、REX'フィールド1310、MODR/M.regフィールド1344、MODR/M.r/mフィールド1346、VVVVフィールド1320、xxxフィールド1354およびbbbフィールド1356を含む。
オーグメンテーション演算フィールド
図13Dは、本発明の一実施形態による、オーグメンテーション演算フィールド1250を構成する専用ベクトルフレンドリ命令フォーマット1300のフィールドを図示するブロック図である。クラス(U)フィールド1268は、0を含むとき、EVEX.U0(クラスA1268A)を示し、1を含むとき、EVEX.U1(クラスB1268B)を示す。U=0かつMODフィールド1342が11を含むとき(非メモリアクセス演算を示す)、アルファフィールド1252(EVEXバイト3、ビット[7]−EH)は、rsフィールド1252Aとして解釈される。このrsフィールド1252Aが1(丸め1252A.1)を含むとき、ベータフィールド1254(EVEXバイト3、ビット[6−4]−SSS)は、丸め制御フィールド1254Aとして解釈される。この丸め制御フィールド1254Aは、1ビットのSAE1256および2ビットの丸め演算フィールド1258を含む。このrsフィールド1252Aが0(丸め1252A.2)を含むとき、ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS)は、3ビットデータ変換フィールド1254Bとして解釈される。U=0かつMODフィールド1342が00、01または10を含むとき(メモリアクセス演算を示す)、アルファフィールド1252(EVEXバイト3、ビット[7]−EH)は、エビクションヒント(EH)フィールド1252Bとして解釈され、ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS)は、3ビットデータ操作フィールド1254Cとして解釈される。
U=1のとき、アルファフィールド1252(EVEXバイト3、ビット[7]−EH)は、書き込みマスク制御(Z)フィールド1252Cとして解釈される。U=1かつMODフィールド1342が11を含むとき(非アクセス演算を示す)、ベータフィールド1254の一部(EVEXバイト3、ビット[4]−S0)がRLフィールド1257Aとして解釈され、それが1を含むとき(丸め1257A.1)、ベータフィールド1254の他の部分(EVEXバイト3、ビット[6:5]−S2−1)は丸め演算フィールド1259Aとして解釈され、RLフィールド1257Aが0を含むとき(VSIZE1257.A2)、ベータフィールド1254の他の部分(EVEXバイト3、ビット[6−5]−S2−1)がベクトル長フィールド1259B(EVEXバイト3、ビット[6−5]−L1ー0)として解釈される。U=1かつMODフィールド1342が00、01または10を含むとき(メモリアクセス演算を示す)、ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド1259B(EVEXバイト3、ビット[6:−5]−L1ー0)およびブロードキャストフィールド1257B(EVEXバイト3、ビット[4]−B)として解釈される。
例示的なレジスタアーキテクチャ
図14は、本発明の一実施形態によるレジスタアーキテクチャのブロック図である。図示の実施形態では、512ビット幅の32個のベクトルレジスタ1410があり、これらのレジスタは、zmm0〜zmm31と参照符号が付けられている。低位16個のzmmの下位256ビットがレジスタymm0〜16に重ねられる。低位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)をレジスタxmm0〜15に重ねる。専用ベクトルフレンドリ命令フォーマット1300は、以下の表に示すようにこれらの重ねられたレジスタファイルに演算を行う。
言い換えると、ベクトル長フィールド1259Bは、最大長とそれより短い1つ以上の他の長さとの間で選択する。その短い方の長さはそれぞれ、先行長さの半分の長さであり、ベクトル長フィールド1259Bを含まない命令テンプレートは最大ベクトル長に演算を行う。さらに、一実施形態では、この専用ベクトルフレンドリ命令フォーマット1300のクラスB命令テンプレートは、パックまたはスカラの単精度/倍精度浮動小数点データおよびパックまたはスカラの整数データに演算を行う。スカラ演算は、zmm/ymm/xmmレジスタの最下位のデータ要素位置に実行される演算であり、より上位のデータ要素位置はその実施形態に応じて命令の前と同じまま、または0にされる。
書き込みマスクレジスタ1415−図示の実施形態では、8個の書き込みレジスタ(k0〜k7)があり、それぞれ64ビットサイズである。代替実施形態では、この書き込みマスクレジスタ1415が16ビットサイズである。上述のように、本発明の一実施形態では、ベクトルマスクレジスタk0を書き込みマスクとして使用することはできない。通常k0を示す符号化を書き込みマスクに対して使用するとき、0xFFFFのハードワイヤードされた書き込みマスクを選択し、その命令に対する書き込みマスクを事実上無効化する。
汎用レジスタ1425−図示の実施形態では、16個の64ビット汎用レジスタがあり、これらはメモリオペランドをアドレス指定するため既存のx86アドレス指定モードと共に使用される。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSPおよびR8〜R15という名前で参照される。
MMXパック整数フラットレジスタファイル1450をエイリアスするスカラ浮動小数点スタックレジスタファイル(x87スタック)1445−図示の実施形態では、x87スタックは、x87命令セット拡張を使用して32/64/80ビットの浮動小数点データにスカラ浮動小数点演算を実行するために使用される8要素のスタックであり、MMXレジスタは、64ビットパック整数データに対して演算を行う、ならびにMMXレジスタとXMMレジスタとの間で実行される一部の演算のためのオペランドを保持するために使用される。
本発明の代替実施形態によっては、レジスタの幅を増減可能である。さらに、本発明の別の実施形態によっては、数の上下する、または別のレジスタファイルおよびレジスタを用いてもよい。
例示的なコアアーキテクチャ、プロセッサおよびコンピュータアーキテクチャ
プロセッサのコアを、様々な方法で、様々な目的のために、様々なプロセッサに実装することができる。例えば、こうしたコアの実装には例として、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主としてグラフィックスおよび/または科学的(スループット)コンピューティング向けの専用コアを挙げられる。様々なプロセッサの実装には例として、1)汎用コンピューティング向けの1つ以上の汎用インオーダコアおよび/または汎用コンピューティング向けの1つ以上の汎用アウトオブオーダコアを含むCPUと、2)主としてグラフィックスおよび/または科学的(スループット)向けの1つ以上の専用コアを含むコプロセッサとを含むことができる。このようにプロセッサが異なれば、仕上がるコンピュータシステムアーキテクチャも様々となり、こうしたプロセッサの例として以下を挙げられる。1)CPUから独立したチップ上のコプロセッサ、2)CPUと同じパッケージにある独立したダイ上のコプロセッサ、3)CPUと同じダイ上にあるコプロセッサ(この場合、こうしたコプロセッサはマージ型グラフィックスおよび/または科学的(スループット)ロジックなどの専用ロジックあるいは専用のコアと呼ばれる場合がある)、4)同じダイ上に上述のCPU(アプリケーションコア(単数または複数)またはアプリケーションプロセッサ(単数または複数)と呼ばれる場合がある)、上述のコプロセッサ、および追加の機能を含むことができるチップ上のシステムを含むことができる。例示的なコアアーキテクチャを次に説明し、その後例示的なプロセッサおよびコンピュータアーキテクチャの説明を続ける。
例示的なコアアーキテクチャ
インオーダおよびアウトオブオーダコアブロック図
図15Aは、本発明の実施形態による、例示的なインオーダパイプライン、および例示的なレジスタリネーミングアウトオブオーダ発行/実行パイプラインの両方を図示するブロック図である。図15Bは、本発明の実施形態による、インオーダアーキテクチャコアの例示的な実施形態と任意のプロセッサに含まれる例示的なレジスタリネーミングアウトオブオーダ発行/実行アーキテクチャコアとの両方を図示するブロック図である。図15A〜図15Bの実線の四角は、インオーダパイプラインおよびインオーダコアを示し、破線で追加した四角はレジスタリネーミングアウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様がアウトオブオーダ態様のサブセットであると考えて、そのアウトオブオーダ態様を説明する。
図15Aにおいて、プロセッサパイプライン1500は、フェッチステージ1502、長さ復号ステージ1504、復号ステージ1506、割り当てステージ1508、リネーミングステージ1510、スケジューリング(ディスパッチまたは発行としても既知の)ステージ1512、レジスタ読み出し/メモリ読み出しステージ1514、実行ステージ1516、再読み出し/メモリ書き込みステージ1518、例外処理ステージ1522およびコミットステージ1524を含む。
図15Bは、実行エンジンユニット1550に連結されたフロントエンドユニット1530を含むプロセッサコア1590を示し、両方ともメモリユニット1570に連結されている。このコア1590は縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは別のコアの型であってもよい。さらに別の選択肢として、このコア1590は例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックスユニット(GPGPU)コア、グラフィックスコアなどの専用コアであってもよい。
このフロントエンドユニット1530は、命令キャッシュユニット1534に連結された分岐予測ユニット1532を含み、命令キャッシュユニット1534は命令変換索引バッファ(TLB)ユニット1536に連結され、命令変換索引バッファ(TLB)ユニット1536は命令フェッチユニット1538に連結され、命令フェッチユニット1538は復号ユニット1540に連結されている。復号ユニット1540(すなわちデコーダ)は命令を復号し、元の命令から複合された、元の命令を反映する、または元の命令に由来する1つ以上のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令または他の制御信号を出力として生成することができる。復号ユニット1540を、様々に異なる機構を用いて実装させることができる。好適な機構の例として、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ(PLA)、マイクロコード読み出し専用メモリ(ROM)などが挙げられるが、これらに限定されるものではない。一実施形態では、コア1590は、マイクロコードROMまたは特定のマクロ命令用マイクロコードを記憶する他の媒体を含む(例えば、復号ユニット1540内またはフロントエンドユニット1530内に)。復号ユニット1540は、実行エンジンユニット1550内のリネーム/割り当てユニット1552に連結されている。
実行エンジンユニット1550は、退避ユニット1554に連結されたリネーム/割り当てユニット1552と、1組の1つ以上のスケジューラユニット1556とを含む。スケジューラユニット1556は、予約ステーション、中央命令ウインドウなどを含む、任意の数の異なるスケジューラとすることができる。このスケジューラユニット1556は、物理レジスタファイル(単数または複数)ユニット(単数または複数)1558に連結されている。物理レジスタファイルユニット(単数または複数)1558のそれぞれが、1つ以上の物理レジスタファイルであり、これらのそれぞれが、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)などの1つ以上の別々のデータタイプを記憶する。一実施形態では、物理レジスタファイル(単数または複数)ユニット1558は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供することができる。この物理レジスタファイル(単数または複数)ユニット(単数または複数)1558に退避ユニット1554が重ねられているが、これにより、レジスタリネーミングおよびアウトオブオーダ実行を実装できる様々な方法(例えば、リオーダバッファ(単数または複数)および退避レジスタファイル(単数または複数)を使用して、フューチャファイル(単数または複数)、ヒストリバッファ(単数または複数)および退避レジスタファイル(単数または複数)を使用して、レジスタマップおよびレジスタのプールを使用して)を図示している。この退避ユニット1554および物理レジスタファイル(単数または複数)ユニット(単数または複数)1558は、実行クラスタ(単数または複数)1560に連結される。実行クラスタ(単数または複数)1560は、1組の1つ以上の実行ユニット1562および1組の1つ以上のメモリアクセスユニット1564を含む。実行ユニット1562は、様々な演算(例えば、シフト、足し算、引き算、掛け算)を様々な種類のデータ(例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行できる。実施形態によっては特定の機能または組になった機能に専用の複数の実行ユニットを含むことができ、また、実施形態によっては1つだけの実行ユニットを含む、または複数の実行ユニットを含んでそのすべてにすべての機能を実行させることができる。スケジューラユニット(単数または複数)1556、物理レジスタファイル(単数または複数)ユニット(単数または複数)1558および実行クラスタ(単数または複数)1560を、複数でもよいものとして図示している。というのも、実施形態によっては、所定の種類のデータ/演算用に別々のパイプライン(例えば、スカラ整数パイプライン、スカラ浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはそれぞれが独自のスケジューラユニット、物理レジスタファイル(単数または複数)ユニットおよび/または実行クラスタを有するメモリアクセスパイプライン。独立した1つのメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット(単数または複数)1564を有する所定の実施形態が実装される)を作成する場合があるためである。別々のパイプラインを使用する場合、これらのパイプラインの1つ以上がアウトオブオーダ発行/実行であり、残りのパイプラインがインオーダであってもよいことを理解されたい。
このメモリアクセスユニット1564のセットは、メモリユニット1570に連結され、このメモリユニット1570はデータTLBユニット1572を含み、このデータTLBユニット1572は、レベル2(L2)キャッシュユニット1576に連結されるデータキャッシュユニット1574に連結される。一例示的な実施形態では、このメモリアクセスユニット1564はロードユニット、ストアアドレスユニットおよびストアデータユニットを含み、これらのそれぞれは、メモリユニット1570中のデータTLBユニット1572に連結されている。この命令キャッシュユニット1534はさらに、メモリユニット1570のレベル2(L2)キャッシュユニット1576に連結されている。このL2キャッシュユニット1576は1つ以上の別のレベルのキャッシュに連結され、最後にはメインメモリに連結される。
例えば、例示的なレジスタリネーミングアウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン1500を実装することができる。1)命令フェッチ1538がフェッチステージ1502および長さ復号ステージ1504を実行する、2)復号ユニット1540が復号ステージ1506を実行する、3)リネーム/割り当てユニット1552が割り当てステージ1508およびリネーミングステージ1510を実行する、4)スケジューラユニット(単数または複数)1556がスケジューリングステージ1512を実行する、5)物理レジスタファイル(単数または複数)ユニット(単数または複数)1558およびメモリユニット1570がレジスタ読み出し/メモリ読み出しステージ1514を実行し、実効クラスタ1560が実行ステージ1516を実行する、6)メモリユニット1570および物理レジスタファイル(単数または複数)ユニット(単数または複数)1558が再読み出し/メモリ書き込みステージ1518を実行する、7)様々なユニットが例外処理ステージ1522に関与できる、8)退避ユニット1554および物理レジスタファイル(単数または複数)ユニット(単数または複数)1558はコミットステージ1524を実行する。
コア1590は、本明細書に記載する命令(単数または複数)のほか、1つ以上の命令セット(例えば、x86命令セット(より新しいバージョンと共に追加された幾つかの拡張を備えたもの)、カリフォルニア州サニーベールのMIPS Technologies社のMIPS命令セット、カリフォルニア州サニーベールのARM Holding社のARM命令セット(NEONなどの任意の追加拡張を有する)をサポートすることができる。一実施形態では、このコア1590は、パックデータ命令セットの拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、これにより、数多くのマルチメディアアプリケーションによる演算がパックデータを用いて実行できるようになる。
尚、このコアはマルチスレッド(演算またはスレッドの2つ以上の並行セットを実行する)をサポートすることができ、そのサポートは様々な方法で可能である。例として、タイムスライスマルチスレッド、同時マルチスレッド(単一物理コアが、物理コアが同時にマルチスレッドしている各スレッドにロジックコアを提供する)またはその組み合わせ(例えば、インテル(商標登録)ハイパースレッディングテクノロジにおけるようなタイムスライスフェッチ、復号およびその後の同時マルチスレッド)を挙げられる。
レジスタリネーミングをアウトオブオーダ実行との関連で記載しているが、レジスタリネーミングはインオーダアーキテクチャで使用可能であることを理解されたい。また、このプロセッサの図示した実施形態は、個別に分かれた命令データキャッシュユニット1534およびデータキャッシュユニット1574ならびに共有L2キャッシュユニット1576を含むが、代替実施形態によっては、例えば、レベル1(L1)内部キャッシュまたは複数レベルの内部キャッシュなど、命令およびデータ両方について単一の内部キャッシュを有することができる。幾つかの実施形態によっては、本システムは、内部キャッシュとコアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含むことができる。あるいは、キャッシュのすべてをコアおよび/またはプロセッサの外部にすることができる。
具体的な例示的インオーダコアアーキテクチャ
図16A〜図16Bはより具体的な例示的インオーダコアアーキテクチャのブロック図を示し、そのコアはチップ内のいくつかの論理ブロック(同一の型および/または異なる型の他のコアを含む)の1つとなるものである。この論理ブロックは、アプリケーションに応じて、ある固定の機能ロジック、メモリI/Oインタフェース、および他の必要なI/Oロジックを有する高帯域幅の相互ネットワーク(例えば、リングネットワーク)を介して通信する。
図16Aは、本発明の実施形態による単一プロセッサコアを、そのオンダイ相互接続部ネットワーク1602およびレベル2(L2)キャッシュ1604のローカルサブセットへの相互接続部と共に示すブロック図である。一実施形態では、命令デコーダ1600がパックデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ1606により、キャッシュメモリへの低レイテンシアクセスがスカラユニットおよびベクトルユニットまで可能となる。一実施形態では(設計を簡潔にするため)、スカラユニット1608およびベクトルユニット1610が別々の複数のレジスタセット(スカラユニット1608はスカラレジスタ1612、ベクトルユニット1610はベクトルレジスタ1614)を使い、その間を転送されるデータはメモリに書き込まれ、その後レベル1(L1)キャッシュ1606から読み戻されるが、本発明の代替実施形態によっては、これとは別の手法を使うことができる(例えば、単一のレジスタセットを使う、またはデータの書き込みまたは読み戻しをせずに2つのレジスタファイルの間でデータを転送させる通信経路を含める)。
L2キャッシュのローカルサブセット1604は、プロセッサコア当たり1つずつとなるよう複数のローカルサブセットに分割されたグローバルL2キャッシュの一部である。プロセッサコアはそれぞれ、自身のL2キャッシュのローカルサブセット1604への直接のアクセス経路を有する。1つのプロセッサコアに読み出されたデータはそのL2キャッシュのサブセット1604に記憶され、他のプロセッサコアがそれぞれのローカルL2キャッシュサブセットにアクセスするのと並行して、迅速にアクセス可能となる。1つのプロセッサコアに書き込まれたデータはそれ自身のL2キャッシュサブセット1604に記憶され、必要であれば、他の複数のサブセットからフラッシュされる。このリングネットワークは共有データのコヒーレンシを保証する。このリングネットワークは双方向であるため、プロセッサコア、L2キャッシュおよび他の論理ブロックなどのエージェント間のチップ内通信が可能である。リングデータ経路はそれぞれ、1方向当たり1012ビット幅である。
図16Bは、本発明の実施形態による図16Aに示したプロセッサコアの部分展開図である。図16Bは、L1キャッシュ1606のL1データキャッシュ1606A部分ならびにベクトルユニット1610およびベクトルレジスタ1614に関するより詳細を含む。具体的には、このベクトルユニット1610は16ワイドベクトル処理ユニット(VPU)(16ワイドALU1628参照)であり、整数演算命令、単精度および倍精度の浮動小数点命令のうちの1つ以上を実行する。このVPUは、スウィズルユニット1620によるレジスタ入力のスウィズル、数値変換ユニット1622Aおよび1622Bによる数値変換、およびメモリ入力に関する複製ユニット1624による複製をサポートする。書き込みマスクレジスタ1626により、結果として生じるベクトル書き込みのプレディケートが可能になる。
統合型メモリコントローラおよびグラフィックスを有するプロセッサ
図17は、本発明の実施形態による、2つ以上のコア、1つの統合型メモリコントローラ、および複数の統合型グラフィックスを有することができるプロセッサ1700のブロック図である。図17の実線の四角は、単一コア1702A、システムエージェント1710、1組の1つ以上のバスコントローラユニット1716を有するプロセッサ1700を示し、破線の四角で任意に追加した部分は、複数のコア1702A〜1702N、システムエージェントユニット1710内の1組の1つ以上の統合型メモリコントローラユニット1714および専用ロジック1708を有する代替のプロセッサ1700を示す。
したがって、プロセッサ1700の様々な実装の例として、1)統合型グラフィックスおよび/または科学的(スループット)ロジック(1つ以上のコアを含むことができる)である専用ロジック1708と、1つ以上の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、その組み合わせ)であるコア1702A〜Nとを有するCPU、2)グラフィックスおよび/または科学的(スループット)を主な目的とする多数の専用コアであるコア1702A〜Nを有するコプロセッサ、および3)多数の汎用インオーダコアであるコア1702A〜Nを有するコプロセッサを挙げられる。このように、プロセッサ1700は、汎用プロセッサ、コプロセッサまたは専用プロセッサでよく、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループット多集積コア(MIC)コプロセッサ(30個以上のコアを含む)、組み込みプロセッサなどでよい。このプロセッサを1つ以上のチップ上に実装することができる。このプロセッサ1700は、1つ以上の基板の一部であっても、かつ/または、例えば、BiCMOS、CMOSまたはNMOSなどの複数の処理技術のいずれかを用いて1つ以上の基板上に実装されてもよい。
そのメモリ階層は、コア内の1つ以上のキャッシュのレベル、1組または1つ以上の共有キャッシュユニット1706、および統合型メモリコントローラユニット1714のセットに連結された外部メモリ(図示せず)を含む。共有キャッシュユニットのセット1706は、レベル2(L2)、レベル3(L3)、レベル4(L4)または他のレベル数のキャッシュなどの1つ以上の中間レベルキャッシュ、最終レベルキャッシュ(LLC)および/またはこれらの組み合わせを含むことができる。一実施形態では、リングベースの相互接続ユニット1712が、統合型グラフィックスロジック1708、共有キャッシュユニットセット1706およびシステムエージェントユニット1710/統合型メモリコントローラユニット(単数または複数)1714を相互接続するが、代替実施形態によっては、こうしたユニットの相互接続に既知の技法をいくつ使用してもよい。一実施形態では、1つ以上のキャッシュユニット1706とコア1702A〜Nとの間でコヒーレンシが維持される。
幾つかの実施形態によっては、コア1702A〜Nの1つ以上はマルチスレッド機能を持つ。システムエージェント1710はコア1702A〜Nを協調させ動作させるコンポーネントを含む。このシステムエージェント1710は例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでもよい。このPCUは、コア1702A〜Nおよび統合型グラフィックスロジック1708の電力状態の調整に必要なロジックおよびコンポーネントであっても、または、これらを含んでもよい。このディスプレイユニットは1つ以上の外部接続されたディスプレイを駆動するためのものである。
このコア1702A〜Nは、アーキテクチャ命令セットの点で同種でも異種でもよい。すなわち、コア1702A〜Nの2つ以上に同じ命令を実行可能にし、その他はその命令セットの1サブセットのみまたは別の命令セットを実行可能とすることができる。
例示的なコンピュータアーキテクチャ
図18〜21は例示的なコンピュータアーキテクチャのブロック図である。ただしこの他にも、ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイスおよび様々な他の電子装置用に当技術分野において既知であるシステム設計および構成も好適である。一般に、本明細書に開示するようにプロセッサおよび/または他の実行ロジックを組み込むことが可能な種々のシステムや電子装置であれば概して好適である。
ここで図18を参照すると、本発明の一実施形態によるシステム1800のブロック図が示されている。このシステム1800はコントローラハブ1820に連結された1つ以上のプロセッサ1810、1815を備えることができる。一実施形態では、このコントローラハブ1820はグラフィックスメモリコントローラハブ(GMCH)1890および入力/出力ハブ(IOH)1850(これらは別々のチップ上にあってもよい)を含み、GMCH1890はメモリ1840およびコプロセッサ1845を連結するメモリおよびグラフィックスコントローラを備える。IOH1850は入力/出力(I/O)デバイス1860をGMCH1890に連結する。あるいは、メモリおよびグラフィックスコントローラの1つまたは両方はプロセッサ内に統合され(本明細書に記載のように)、メモリ1840およびコプロセッサ1845は、プロセッサ1810とIOH1850を有する単一チップ内のコントローラハブ1820とに直接連結される。
追加プロセッサ1815の任意追加的特性を破線で図18に表す。プロセッサ1810、1815はそれぞれ本明細書に記載の処理コアの1つ以上を含んでもよく、プロセッサ1700のいずれかのバージョンとすることができる。
例えば、メモリ1840は、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)またはこの2つの組み合わせであってもよい。少なくとも一実施形態では、このコントローラハブ1820は、フロントサイドバス(FSB)などのマルチドロップバス、クイックパスインターコネクト(QPI)などのポイントツーポイントインタフェース、または類似の接続1895を介してプロセッサ(単数または複数)1810、1815と通信する。
一実施形態では、コプロセッサ1845は例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、埋め込みプロセッサなどの専用プロセッサである。一実施形態では、コントローラハブ1820は統合型グラフィックスアクセラレータを含んでもよい。
物理リソース1810、1815の間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費などをはじめとする特徴の一連のメトリックの点から、様々な相違があり得る。
一実施形態では、プロセッサ1810は一般的な型のデータ処理演算を制御する命令を実行する。この命令内にコプロセッサ命令を埋め込むことができる。
プロセッサ1810はこのコプロセッサ命令を、取付けたコプロセッサ1845により実行されるべきタイプとして認識する。したがって、このプロセッサ1810はこのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサバスまたは他の相互接続手段でコプロセッサ1845に発行する。コプロセッサ(単数または複数)1845はこのコプロセッサ命令を受け入れ、受信したものを実行する。
ここで図19を参照すると、本発明の一実施形態による第1の、さらに具体的な例示的システム1900のブロック図が示されている。図19に示すように、マルチプロセッサシステム1900はポイントツーポイント相互接続システムであり、第1のプロセッサ1970と、これにポイントツーポイント相互接続部1950を介して連結される第2のプロセッサ1980とを備える。
プロセッサ1970および1980それぞれは、プロセッサ1700のいずれかのバージョンとすることができる。本発明の一実施形態では、プロセッサ1970は、プロセッサ1810であり、プロセッサ1980はプロセッサ1815であり、コプロセッサ1938はコプロセッサ1845である。別の実施形態では、プロセッサ1970はプロセッサ1810であり、プロセッサ1980はコプロセッサ1845である。
プロセッサ1970は統合型メモリコントローラ(IMC)ユニット1972を含み、プロセッサ1980は統合型メモリコントローラ(IMC)ユニット1982を含むものとして図示されている。プロセッサ1970はまた、バスコントローラユニットの一部としてポイントツーポイント(P−P)インタフェース1976および1978を含み、同様に第2のプロセッサ1980は、P−Pインタフェース1986および1988を含む。プロセッサ1970はP−Pインタフェース回路1978を使用して、プロセッサ1980はP−Pインタフェース回路1988を使用して、ポイントツーポイント(P−P)相互接続部1950を介しての情報交換ができる。図19の示すように、IMC1972はそのプロセッサをメモリ1932に連結し、IMC1982はそのプロセッサをメモリ1934に連結している。これらのメモリをそれぞれのプロセッサにローカルに取付けられたメインメモリの一部とすることができる。
プロセッサ1970は、ポイントツーポイントインタフェース回路1976、1994を用い、P−Pインタフェース1952を介してチップセット1990と情報を交換し、プロセッサ1980は、ポイントツーポイントインタフェース回路1986、1998を用い、P−Pインタフェース1954を介してチップセット1990と情報を交換することができる。チップセット1990は高性能インタフェース1939を介して必要に応じてコプロセッサ1938と情報交換することができる。一実施形態では、このコプロセッサ1938は例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、埋め込みプロセッサなどの専用プロセッサである。
共有キャッシュ(図示せず)は、プロセッサが低電力モードにある場合、いずれかまたは両方のプロセッサのローカルキャッシュ情報を共有キャッシュに記憶できるように、どちらかプロセッサ内、または両方のプロセッサ外に配置されながらもP−P相互接続部を介してプロセッサに接続された状態にすることができる。
チップセット1990はインタフェース1996を介して第1のバス1916に連結可能である。一実施形態では、第1のバス1916はペリフェラルコンポーネントインターコネクト(PCI)バス、あるいはPCI Expressバスまたは他の第3世代I/O相互接続バスなどのバスであってもよいが、本発明の範囲はこれに限定されるものではない。
図19に示すように、様々なI/Oデバイス1914を、第1のバス1916を第2のバス1920に連結するバスブリッジ1918と並行して、第1のバス1916に連結することができる。一実施形態では、コプロセッサ、高スループットMICプロセッサ、GPGPUアクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイまたは他のプロセッサなどの1つ以上の追加プロセッサ1915を第1のバス1916に連結する。一実施形態では、第2のバス1920はローピンカウント(LPC)バスであってもよい。様々なデバイスを、第2のバス1920に連結可能である。そのデバイスの例として、キーボードおよび/またはマウス1996、通信デバイス1927、ならびに一実施形態において命令/コードおよびデータ1930を含むことが可能なディスクドライブまたは他の大容量記憶装置などの記憶ユニット1928を挙げることができる。さらに、オーディオI/O1924を第2のバス1920に連結することができる。ただし、他のアーキテクチャも可能である。例えば、図19のポイントツーポイントアーキテクチャの代わりに、任意のシステムでマルチドロップバスまたは他のこうしたアーキテクチャを実装することができる。
ここで図20を参照すると、本発明の一実施形態による第2の、さらに具体的な例示的システム2000のブロック図が示されている。図19および図20に含まれる同様の構成要素には同様の参照符号を付し、図19の態様のいくつかを図20から省いて図20の他の態様が不明確にならないようにしている。
図20は、プロセッサ1970が統合型メモリおよびI/O制御ロジック(「CL」)1972を、プロセッサ1980が統合型メモリおよびI/O制御ロジック(「CL」)1982を含むことができることを示す。したがって、このCL1972および1982は統合型メモリコントローラユニットおよびI/O制御ロジックを含む。図20はメモリ1932がCL1972に連結されるだけでなく、I/Oデバイス2014も制御ロジック1972に連結されることを示し、またメモリ1934がCL1982に連結されるだけでなく、I/Oデバイス2014も制御ロジック1982に連結されることを示している。レガシーI/Oデバイス2015はチップセット1990に連結されている。
ここで図21を参照すると、本発明の一実施形態によるSoC(システムオンチップ)2100のブロック図が示されている。図17に含まれる同様の構成要素には同様の参照符号を付している。また、破線の四角はさらに高度なSoCに任意で用いられる構造体を示す。図21では、相互接続ユニット(単数または複数)2102が、1組の1つ以上のコア202A〜Nおよび共有キャッシュユニット(単数または複数)1706を含むアプリケーションプロセッサ2110と、システムエージェントユニット1710と、バスコントローラユニット(単数または複数)1716と、統合型メモリコントローラユニット(単数または複数)1714と、統合型グラフィックスロジック、画像プロセッサ、オーディオプロセッサおよびビデオプロセッサを含むことができる1組または1つ以上のコプロセッサ2120と、スタティックランダムアクセスメモリ(SRAM)ユニット2130と、ダイレクトメモリアクセス(DMA)ユニット2132と、1つ以上の外部ディスプレイに連結するためのディスプレイユニット2140とに連結される。一実施形態では、このコプロセッサ(単数または複数)2120は例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、埋め込みプロセッサなどの専用プロセッサを含む。
本明細書に開示する機構の様々な実施形態を、ハードウェア、ソフトウェア、ファームウェアまたはこうした実装方法の組み合わせで実装することができる。本発明の様々な実施形態は、コンピュータプログラムまたはプログラムコードとして実装可能であり、このプログラムおよびコードは、少なくとも1つのプロセッサ、記憶システム(揮発ならびに不揮発メモリおよび/または記憶構成要素を含む)、少なくとも1つの入力装置および少なくとも1つの出力装置を備えるプログラム可能なシステム上で実行することができる。
図19に示すコード1930などのプログラムコードを入力命令に適用して、本明細書に記載する機能を実行し、出力情報を生成することができる。この出力情報を既知の方法で、1つ以上の出力装置に適用することができる。この適用を目的として、処理システムは、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
このプログラムコードは、処理システムと通信するために高水準手続き型言語またはオブジェクト指向プログラミング言語で実装可能である。また、このプログラムコードを希望であれば、アセンブリ言語または機械語で実装することができる。実際には、本明細書に記載する機構はいずれの特定のプログラミング言語にその範囲を限定されるものではない。いずれの場合においても、この言語はコンパイラ型またはインタープリタ型言語とすることができる。
少なくとも一実施形態の1つ以上の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に記憶された命令表現により実装可能である。この表現は、機械によって読み出されると、この機械にロジックを作成させて本明細書に記載の技法を実行させることができる。「IPコア」として知られているこうした表現は有形機械可読媒体に記憶することができ、様々な顧客または製造設備に提供して、ロジックまたはプロセッサを実際に作成する生産機械にロードすることができる。
こうした機械可読記憶媒体の例として、ハードディスクおよび、その他のフロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)および磁気光ディスクを含む型のディスクと、読み出し専用メモリ(ROM)などの半導体デバイスと、動的ランダムアクセスメモリ(DRAM)などのランダムアクセスメモリ(RAM)と、静的ランダムアクセスメモリ(SRAM)と、消去可能プログラマブル読み出し専用メモリ(EPROM)と、フラッシュメモリと、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM)と、相変化メモリ(PCM)と、磁気または光カード、あるいは電子的命令の記憶に好適な他の媒体とを挙げられる記憶媒体を含む、機械または装置により製造または形成される物品の非一過性で有形の構成が挙げられるが、これらに限定されない。
したがって、本発明の実施形態はまた、本明細書に記載の構造、回路、装置、プロセッサ、および/またはシステムの特徴を規定するハードウェア記述言語(HDL)などの、命令または設計データを備えた非一過性有形機械可読媒体を含む。また、こうした実施形態をプログラム製品と呼ぶことができる。
エミュレーション(バイナリ変換、コードモーフィングなど)
場合によっては、命令コンバータを使用して、1つの命令を1ソース命令セットから1ターゲット命令セットへ命令を変換することができる。例えば、その命令コンバータは、ある命令を、コアにより処理される1つ以上の他の命令に翻訳する(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)、モーフする、エミュレートする、またはこの他の変換を行うことができる。この命令コンバータを、ソフトウェア、ハードディスク、ファームウェアまたはその組み合わせに実装可能である。この命令コンバータは、オンプロセッサ、オフプロセッサ、またはその一部でよい。
図22は、本発明の実施形態による、ソース命令セットの二進命令をターゲット命令セットの二進命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。図示の実施形態では、この命令コンバータはソフトウェア命令コンバータであるが、代わりに、この命令コンバータをソフトウェア、ファームウェア、ハードウェアまたはその様々な組み合わせで実装可能である。図22は、高水準言語2202のプログラムをx86コンパイラ2204でコンパイルすることで、x86二進コード2206を生成可能であることを示している。このx86二進コード2206は、少なくとも1つのx86命令セットコア2216を備えるプロセッサによりネイティブモードで実行することができる。少なくとも1つのx86命令セットコア2216を有するこのプロセッサは、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同じ結果を達成するため、(1)インテルx86命令セットコアの命令セットの大部分、または(2)少なくとも1つのx86命令セットコアを有するインテルプロセッサ上で実行することを目的とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを互換性モードで実行または別の方法で処理することによって、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同じ機能を実行可能な任意のプロセッサを表している。このx86コンパイラ2204は、追加のリンケージ処理の有無に関わらず、少なくとも1つのx86命令セットコア2216を有するプロセッサ上で、実行可能なx86二進コード2206(例えば、オブジェクトコード)を生成するよう動作可能なコンパイラを表す。同様に、図22は高水準言語2202のプログラムを代替の命令セットコンパイラ2208を用いてコンパイルすることで、代替の命令セット二進コード2210を生成可能であることを示す。この代替の命令セット二進コード2210は、少なくとも1つのx86命令セットコア2214も備えないプロセッサ(例えば、カリフォルニア州サニーベールのMIPS Technologies社のMIPS命令セットおよび/またはカリフォルニア州サニーベールのARM Holdings社のARM命令セットを実行するコアを有するプロセッサ)によってネイティブに実行可能なものである。命令コンバータ2212は、x86二進コード2206を、x86命令セットコア2214の搭載のないプロセッサがネイティブモードで実行可能なコードに変換するために使用するものである。この変換後のコードは代替の命令セット二進コード2210と同じにはなりにくい。同一コードに変換できる命令コンバータの作成が難しいためである。しかし、変換後のコードは一般動作を実行し、代替命令セットからの命令で構成されるものとなる。したがって、命令コンバータ2212は、エミュレーション、シミュレーションまたは他のプロセスを介して、x86命令セットプロセッサもコアも有しないプロセッサまたは他の電子デバイスにx86二進コード2206を実行させることのできるソフトウェア、ファームウェア、ハードウェアまたはその組み合わせを表している。
図3〜10のいずれに記載のコンポーネント、特徴および詳細内容も、任意に図1および図2に適用可能である。さらに、こうした装置のいずれに記載のコンポーネント、特徴および詳細もまた、複数の実施形態においてその装置で、および/またはその装置を用いて実行可能な方法に任意に適用可能である。本明細書に記載するいずれのプロセッサも本明細書に記載するいずれのコンピュータシステムに含めることが可能である。幾つかの実施形態によっては、命令が、本明細書で開示する命令フォーマットの特徴または詳細を有してもよい(例えば、VEXまたはEVEXフォーマット)。ただし、これは必須ではない。
本明細書および特許請求の範囲では、動詞の「連結」および/または「接続」をその派生語と共に使用する場合がある。これらの用語は、互いに同義語としての意図で用いているのではなく、実施形態では、「接続」により、2つ以上の構成要素が互いに、直接物理的におよび/または電気的に接触していることを示すことができる。「連結」は、2つ以上の構成要素が互いに、直接物理的におよび/または電気的に接触していることを言う。しかし、「連結」は、2つ以上の構成要素が互いに直接接触していないが、それでも互いに協働するまたは相互作用することを意味することもできる。例えば、ある実行ユニットを1つ以上の介在構成要素を介してレジスタおよび/または復号ユニットと連結することができる。複数の図にわたり、矢印を用いて接続および連結を示している。
本明細書および/または特許請求の範囲では、「ロジック」、「ユニット」、「モジュール」または「コンポーネント」という用語を使用してきた可能性がある。これらの用語はそれぞれ、ハードウェア、ファームウェア、ソフトウェアまたは様々なその組み合わせを指すために使用することができる。例示的な実施形態では、これらの用語それぞれは集積回路、特定用途向け集積回路、アナログ回路、デジタル回路、プログラムされたロジックデバイス、命令を含むメモリデバイスおよび様々なその組み合わせを指すことができる。幾つかの実施形態によっては、これらは少なくとも幾つかのハードウェア(例えば、トランジスタ、ゲート、他の回路コンポーネント)を含むことができる。
「および/または」という用語を使用してきた可能性がある。本明細書で使用しているように、「および/または」は、一方、他方、または両方を意味する(例えば、Aおよび/またはBは、A、B、またはAとBとの両方のいずれかを意味する)。
上記の説明では、本実施形態を完全に理解できるように具体的な詳細を示している。しかし、実施形態によっては、その具体的詳細内容の一部を省いても実行することができる。本発明の範囲は、上記で説明した具体例によって規定されるものではなく、特許請求の範囲によってのみ規定されるものである。他の例では、説明の理解が曖昧にならないように、詳細を付与し、および/または詳細を付与せずに、既知の回路、構造、デバイスおよび動作をブロック図の形態に示した。適切と判断した場合、参照番号または参照番号の末尾番号を複数の図にわたり繰り返し用いている。これにより、特段の指示がなければ、また指示によらずとも明白でなければ、同様または同一の特徴を任意に装備可能な対応要素または類似要素を示している。
演算によっては、ハードウェア構成要素によって実行可能な場合と、機械実行可能命令または回路実行可能命令で具現化可能な場合がある。こうした命令を用いることで、その演算を実行させる命令をプログラムされた機械、回路、またはハードウェア構成要素(例えば、プロセッサ、プロセッサの一部、回路)にこの演算を実行させることや、結果としてそれらがこの演算を実行することが可能になる。またこの演算は必要に応じてハードウェアおよびソフトウェアの組み合わせにより実行することもできる。プロセッサ、機械、回路またはハードウェアは、具体的な、または特定の回路、あるいは、この命令を実行および/または処理ならびにこの命令に応じて結果を記憶するよう動作可能な他のロジック(例えば、ファームウェアおよび/またはソフトウェアと組み合わせ可能性なハードウェア)を含むことができる。
実施形態によっては、機械可読媒体を含む製造物品(例えば、コンピュータプログラム製品)を含む。この媒体は、それを含む機械に可読な形式で情報を提供する、例えば記憶する機構を含んでもよい。この機械可読媒体は、1つの命令または一連の命令を提供することができる、またはそれを媒体上に記憶しておくことができる。この命令は、機械によって実行された場合および/または実行されると、その機械に本明細書に開示する1つまたは複数の演算、方法あるいは技法を実行させるように、および/または結果として機械がそれを実行するように動作可能である。
幾つかの実施形態によっては、機械可読媒体は非一過性機械可読記憶媒体を含んでもよい。例えば、非一過性機械可読記憶媒体は、フロッピー(登録商標)ディスク、光記憶媒体、光ディスク、光データ記憶装置、CD−ROM、磁気ディスク、磁気光ディスク、読み出し専用メモリ(ROM)、プログラム可能ROM(PROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、ランダムアクセスメモリ(RAM)、静的RAM(SRAM)、動的RAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発メモリ、不揮発データ記憶装置、非一過性メモリ、非一過性データ記憶装置などでよい。非一過性機械可読媒体は一時的な伝搬信号で構成されるものではない。幾つかの実施形態によっては、この記憶媒体は固体物などの有形媒体でよい。
好適な機械の例として、汎用プロセッサ、専用プロセッサ、デジタルロジック回路、集積回路などが挙げられるが、それらに限定されない。さらに、好適な機械の他の例として、コンピュータシステムまたは、プロセッサ、デジタルロジック回路または集積回路を備える他の電子装置が挙げられる。こうしたコンピュータシステムまたは電子装置の例として、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワーク装置(例えば、ルータおよびスイッチ)、モバイルインターネット装置(MID)、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックスおよびビデオゲームコントローラが挙げられるが、それに限定されない。
本明細書全体を通して「一実施形態」、「実施形態」、「1つ以上の実施形態」、「一部の実施形態」に言及することにより、例えば、本発明の実施に当たり、具体的な特徴をそこに含めることができるが、必ずしも含めなくてもよいことを示している。同様に、その記載時には、様々な特徴を1つの実施形態、1つの図、またはその記載の中にまとめて、本開示内容の整理および種々の発明態様の理解の補助とする場合がある。しかしこの開示方法は、本発明が各請求項に明示的に記載されているより多くの特徴の有することを要件とするとの意図の反映と解釈されるものではない。むしろ、以下の請求項が反映するように、発明の態様は、開示した実施形態1つに含まれるすべての特徴より少ないものである。したがって、「発明を実施するための形態」に続く「特許請求の範囲」は、各請求項が本発明の別々の実施形態として独立した状態でこの「発明を実施するための形態」に明示的に組み入れられている。
例示的な実施形態
以下の実施例はさらに実施形態に関連する。これらの例に記載の明細事項は1つ以上の実施形態のいずれにも使用可能である。
実施例1は、複数のパックデータレジスタと、命令を復号する復号ユニットとを含むプロセッサである。この命令は、複数のビット群をそれぞれが有する第1の複数のデータ要素を有する第1のソースパックデータオペランドを示す。また、この命令は、複数のビット群をそれぞれが有する第2の複数のデータ要素を有する第2のソースパックデータオペランドを示す。この第1の複数のデータ要素に含まれるデータ要素それぞれが、対応位置にあって第2の複数のデータ要素に含まれる別々のデータ要素に対応する。この第1の複数のデータ要素に含まれる各データ要素のビット群はそれぞれ、第2の複数のデータ要素が含む対応データ要素内で対応位置にある別々のビット群に対応する。実行ユニットが、この複数のパックデータレジスタおよび復号ユニットに連結される。この実行ユニットは、その命令に応じて、この命令が示す宛先記憶位置に結果パックデータオペランドを記憶する。この結果パックデータオペランドは、第1のソースパックデータオペランドの1つおきのビット群を、第2のソースパックデータオペランドの1つおきの対応ビット群と交互に並べて含む。
実施例2は実施例1のプロセッサを含み、この場合、その実行ユニットがその命令に応じて、第1のソースパックデータオペランドの奇数位置のビット群のみを、第2のソースパックデータオペランドの奇数位置の対応ビット群と交互に並べて含む結果パックデータオペランドを記憶する。
実施例3は実施例1のプロセッサを含み、この場合、その実行ユニットが、その命令に応じて、第1のソースパックデータオペランドの偶数位置のビット群のみを、第2のソースパックデータオペランドの偶数位置の対応ビット群と交互に並べて含む結果パックデータオペランドを記憶する。
実施例4は実施例1のプロセッサを含み、この場合、その復号ユニットが、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドの対応偶数位置のビット群と対応奇数位置のビット群とのどちらが結果パックデータオペランドに含まれるかを示す少なくとも1つの偶数奇数表示ビットを有する命令を復号するものである。また、実行ユニットが、その命令に応じて、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドの対応偶数位置のビット群と対応奇数位置のビット群とのうち示される一方のみを有する結果パックデータオペランドを記憶する。
実施例5は実施例4のプロセッサを含み、この場合、その実行ユニットがその命令に応じて、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドのうちの一方の最下位のビット群と第1のソースパックデータオペランドおよび第2のソースパックデータオペランドのうちの他方の最下位から2番目のビット群とのどちらか一方を最下位のビット群として有する結果パックデータオペランドを記憶する。該最下位のビット群は、少なくとも1つの偶数奇数表示ビットにより示される結果パックデータオペランドの最下位のビット群となる。
実施例6は実施例4のプロセッサを含み、この場合、その復号ユニットが、少なくとも1つの偶数奇数表示ビットを有する即値を有する命令を復号する。
実施例7は実施例1のプロセッサを含み、この場合、その復号ユニットが、第1のソースパックデータオペランドのビット群のサイズを示す少なくとも1つのビット群サイズ表示ビットを有する命令を復号する。
実施例8は実施例7のプロセッサを含み、この場合、その復号ユニットが、少なくとも2ビットサイズビット群、4ビットサイズビット群、および8ビットサイズビット群のいずれか1つであるものとして第1のソースパックデータオペランドのビット群のサイズを示す少なくとも1つのビット群サイズ表示ビットを有する命令を復号する。
実施例9は実施例7のプロセッサを含み、この場合、その復号ユニットが、少なくとも1つのビット群サイズ表示ビットを有する即値を有する命令を復号する。
実施例10は実施例1〜9のいずれか1つのプロセッサを含み、この場合、その実行ユニットが、その命令に応じて、第1のソースパックデータオペランドの1つおきの1ビットサイズビット群を、第2のソースパックデータオペランドの1つおきのこ対応1ビットサイズビット群と交互に並べて含む結果パックデータオペランドを記憶する。
実施例11は実施例1〜9のいずれか1つのプロセッサを含み、この場合、その実行ユニットが、その命令に応じて、第1のソースパックデータオペランドの1つおきの2ビットサイズビット群を、第2のソースパックデータオペランドの1つおきの対応2ビットサイズビット群と交互に並べて含む結果パックデータオペランドを記憶する。
実施例12は実施例1〜9のいずれか1つのプロセッサを含み、この場合、その実行ユニットがその命令に応じて、第1のソースパックデータオペランドの1つおきの4ビットサイズビット群を、第2のソースパックデータオペランドの1つおきの対応4ビットサイズビット群と交互に並べて含む結果パックデータオペランドを記憶する。
実施例13は実施例1〜9のいずれか1つのプロセッサを含み、この場合、その復号ユニットが、64ビットデータ要素および32ビットデータ要素のうちの一方である第1の複数のデータ要素を有する第1のソースパックデータオペランドを示す命令を復号する。
実施例14は実施例1〜9のいずれか1つのプロセッサを含み、この場合、その復号ユニットが、複数のマスク要素を有するソースパックデータ演算マスクを示す命令を復号する。
実施例15は実施例14のプロセッサを含み、この場合、その復号ユニットが、ソースパックデータ演算マスクにあるマスク要素の少なくとも2倍の数のビット群を有する第1のソースパックデータオペランドを示す命令を復号する。
実施例16は実施例1〜9のいずれか1つのプロセッサを含み、この場合、その実行ユニットが、その命令に応じて、第1と第2のソースパックデータオペランドの一方に含まれる隣接ビット群のすべての対の中で、互いに隣接しているビット群の位置を交換する。
実施例17は、命令を受信することを含む、プロセッサで実行される方法である。この命令は、複数のビット群をそれぞれが有する第1の複数のデータ要素を有する第1のソースパックデータオペランドを示す。この命令は、複数のビット群をそれぞれが有する第2の複数のデータ要素を有する第2のソースパックデータオペランドを示す。この第1の複数のデータ要素のデータ要素それぞれは、対応位置にある第2の複数のデータ要素の別々のデータ要素と対応する。この第1の複数のデータ要素が含む各データ要素のビット群はそれぞれ、第2の複数のデータ要素が含む対応データ要素内で対応位置にある別々のビット群に対応する。また、この方法は、その命令に応じて、宛先記憶位置に結果パックデータオペランドを記憶することを含む。この宛先記憶位置は、この命令により示される。この結果パックデータオペランドは、第1のソースパックデータオペランドの1つおきのビット群を、第2のソースパックデータオペランドの1つおきの対応ビット群と交互に並べて含む。
実施例18は実施例17の方法を含み、この場合、記憶することが、1ビットサイズビット群、2ビットサイズビット群、4ビットサイズビット群のうちの1つである第1のソースパックデータオペランドの奇数位置のビット群のみを、第2のソースパックデータオペランドの対応奇数位置のビット群と交互に並べて含む結果パックデータオペランドを記憶することを含む。
実施例19は実施例17の方法を含み、この場合、記憶することが、1ビットサイズビット群、2ビットサイズビット群、4ビットサイズビット群のうちの1つである第1のソースパックデータオペランドの偶数位置のビット群のみを、第2のソースパックデータオペランドの対応偶数位置のビット群と交互に並べて含む結果パックデータオペランドを記憶することを含む。
実施例20は実施例17の方法を含み、この場合、受信することが、第1のソースパックデータオペランドおよび第2のソースパックデータオペランドが含む対応偶数位置のビット群と対応奇数位置のビット群とのどちらが結果パックデータオペランドに記憶されるかを示す少なくとも1つの偶数奇数表示ビットを有する命令を受信することを含む。
実施例21は実施例17の方法を含み、この場合、受信することが、1ビットサイズビット群、2ビットサイズビット群および4ビットサイズビット群から選択される少なくとも2つのサイズのいずれか一方であるものとして第1のソースパックデータオペランドのビット群のサイズを示す少なくとも1つのサイズ表示ビットを有する命令を受信することを含む。
実施例22は、相互接続部とその相互接続部に連結するプロセッサとを含む、命令を処理するシステムである。このプロセッサは、複数のビット群をそれぞれが有する第1の複数のデータ要素を有する第1のソースパックデータオペランドを示す命令を受信する。この命令は、複数のビット群をそれぞれが有する第2の複数のデータ要素を有する第2のソースパックデータオペランドを示す。この第1の複数のデータ要素のデータ要素それぞれは、対応位置にある第2の複数のデータ要素の別々のデータ要素と対応する。この第1の複数のデータ要素が含む各データ要素のビット群それぞれは、第2の複数のデータ要素が含む対応データ要素内で対応位置にある別々のビット群に対応する。また、この命令は宛先記憶位置を示す。このプロセッサはこの命令に応じて、宛先記憶位置の結果パックデータオペランドを記憶する。この結果パックデータオペランドは、第1のソースパックデータオペランドの1つおきのビット群を、第2のソースパックデータオペランドの1つおきの対応ビット群と交互に並べて含む。また、このシステムは、相互接続部と連結する動的ランダムアクセスメモリ(DRAM)を含む。このDRAMは行列転置を実行する1組の命令を記憶する。この1組の命令がプロセッサにより実行されると、第1のソースパックデータオペランドの少なくとも2つの異なる行列の少なくとも2列からのビット群を記憶することを含む演算をプロセッサに実行させる。
実施例23は実施例22のシステムを含み、この場合、プロセッサが、その命令に応じて、第1のソースパックデータオペランドの奇数位置のビット群のみを第2のソースパックデータオペランドの対応奇数位置のビット群と交互に並べて含む結果パックデータオペランドを記憶する。
実施例24は、非一過性機械可読記憶媒体を含む製造物品である。この非一過性機械可読記憶媒体は、複数のビット群をそれぞれが有する第1の複数のデータ要素を有する第1のソースパックデータオペランドを示す命令を記憶する。また、この命令は、複数のビット群をそれぞれが有する第2の複数のデータ要素を有する第2のソースパックデータオペランドを示す。この第1の複数のデータ要素に含まれるデータ要素それぞれが、対応位置にあって第2の複数のデータ要素に含まれる別々のデータ要素に対応する。この第1の複数のデータ要素に含まれる各データ要素のビット群はそれぞれ、第2の複数のデータ要素が含む対応データ要素内で対応位置にある別々のビット群に対応する。この命令が機械によって実行されると、その機械は、この命令が示す宛先記憶位置に結果パックデータオペランドを記憶することを含む処理を実行する。この結果パックデータオペランドは、第1のソースパックデータオペランドの1つおきのビット群を、第2のソースパックデータオペランドの1つおきの対応ビット群と交互に並べて含む。
実施例25は、その命令が、そのビット群のサイズを示す少なくとも1つのビット群サイズ表示ビットを有する、実施例24の製造物品を含む。
実施例26は、実施例17〜21のいずれか1つの方法を実行するよう動作可能なプロセッサまたは他の装置である。
実施例27は、実施例17〜21のいずれか1つの方法を実行する手段を含むプロセッサまたは他の装置である。
実施例28は、実施例17〜21のいずれか1つの方法を実行する複数のモジュールを含むプロセッサまたは他の装置である。
実施例29は、モジュールおよび/またはユニット、および/またはロジックおよび/または回路、および/または実施例17〜21のいずれか1つの方法を実行する手段の任意の組み合わせを含むプロセッサである。
実施例30は、命令を適宜記憶または提供する任意に非一過性な機械可読媒体を備える製造物品であり、この命令は、プロセッサ、コンピュータシステム、電子装置または他の機械により実行された場合および/または実行されたとき、実施例17〜21のいずれか1つの方法をこの機械に実行させるよう動作可能なものである。
実施例31は、バスまたは他の相互接続部と、この相互接続部に連結される実施例1〜16のいずれか1つのプロセッサと、動的ランダムアクセスメモリ(DRAM)、ネットワークインタフェース、グラフィックスチップ、ワイヤレス通信チップ、汎欧州デジタル移動通信電話方式(GSM(登録商標))アンテナ、相変化メモリ、およびビデオカメラから選択され、この相互接続部に連結される少なくとも1つの構成要素とを含むコンピュータシステム、他の電子装置、あるいは他の装置である。
実施例32は、実質的に本明細書に記載した通りのプロセッサまたは他の装置である。
実施例33は、実質的に本明細書に記載した通りの方法のいずれかを実行するよう動作可能なプロセッサまたは他の装置である。
実施例34は、実質的に本明細書に記載した通りのビット群インターリーブ命令のいずれかを実行するよう動作可能なプロセッサまたは他の装置である。
実施例35は、第1の命令セットの複数の命令を復号する復号ユニットを含むプロセッサまたは他の装置である。この復号ユニットは、第1の命令をエミュレートするこの第1の命令セットの1つ以上の命令を受信する。この第1の命令は、実質的に本明細に記載する通りのいずれのビット群インターリーブ命令であってもよく、第2の異なる命令セットになるものである。また、このプロセッサまたは他の装置は、この復号ユニットと連結する1つ以上の実行ユニットを含んで、第1の命令セットの1つ以上の命令を実行する。この1つ以上の実行ユニットは、第1の命令セットの1つ以上の命令に応じて1つの宛先に1つの結果を記憶する。この結果は、第1の命令に関して実質的に本明細書に開示した通りの結果のいずれかを含むことができる。
実施例36は、第1の命令セットの複数の命令を復号する復号ユニットを有するプロセッサを含むコンピュータシステムまたは他の電子装置である。また、このプロセッサは、1つ以上の実行ユニットを有する。この電子装置はさらに、このプロセッサと連結する記憶装置を含む。この記憶装置は、第1の命令を記憶する。この命令は、実質的に本明細書に記載する通りのビット群インターリーブ命令のいずれであってもよく、これとは異なる第2の命令セットとなるものである。この記憶装置はまた、第1の命令を第1の命令セットの1つ以上の命令に変換するために複数の命令を記憶する。この第1の命令セットの1つ以上の命令は、このプロセッサにより実行されると、このプロセッサに1つの宛先に1つの結果を記憶させる。この結果は、この第1の命令について実質的に本明細書に開示した通りの結果のいずれかを含むことができる。